瀏覽代碼

fix mode switching

Tobias Simetsreiter 4 年之前
父節點
當前提交
38b62dc7d2
共有 3 個文件被更改,包括 35 次插入16 次删除
  1. 12 5
      src/bootstrap_captive/api/__init__.py
  2. 1 1
      src/http/index.html
  3. 22 10
      src/main.py

+ 12 - 5
src/bootstrap_captive/api/__init__.py

@@ -33,11 +33,18 @@ def index_data(inp):
     }
 
 def disable_portal(inp):
-    import subprocess
-    p = subprocess.Popen(['bootstrap_captive','stop'],
-                     cwd="/",
-                     stdout=subprocess.PIPE,
-                     stderr=subprocess.STDOUT)
+    from subprocess import Popen,PIPE,DEVNULL
+    import signal
+    # import os
+
+    def preexec():
+        # os.setpgrp()
+        signal.signal(signal.SIGINT, signal.SIG_IGN)
+
+    Popen(["bootstrap_captive","stop"],
+          stdin=DEVNULL, stdout=DEVNULL, stderr=DEVNULL,
+          preexec_fn=preexec)
+          # stdin=PIPE, stdout=PIPE, stderr=PIPE,
     return {
         "ok":True,
     }

+ 1 - 1
src/http/index.html

@@ -13,7 +13,7 @@
      <div class="form-group">
        <input id="input_ssid" placeholder="SSID" class="form-control">
        <input id="input_pw" placeholder="Password" class="form-control">
-       <button id="wifi_button" onclick="portal.setWifi()" class="btn btn-primary btn-lg form-control">set</button>
+       <button id="wifi_button" onclick="portal.setWifi()" class="btn btn-primary btn-lg form-control">set wifi</button>
      </div>
      <div class="form-group">
        <button onclick="portal.disablePortal()" class="btn btn-warning btn-lg form-control">Disable Portal</button>

+ 22 - 10
src/main.py

@@ -56,28 +56,40 @@ def com_start(args):
     from subprocess import run
     set_wifi(True)
     COM="""
+echo "STARTING"
+date
 set -x
-systemctl stop networking dhcpcd
-sleep 3
-systemctl start hostapd.service
-sleep 2
-systemctl start networking dnsmasq.service bootstrap_captive@server.service dhcpcd
+systemctl stop networking dhcpcd.service wpa_supplicant.service
+ip addr flush wlan0
 iptables -t nat -A PREROUTING -d 192.168.5.2 -j ACCEPT
 iptables -t nat -A PREROUTING -d 0/0 -p tcp --dport 80 -j DNAT --to-destination 192.168.5.1:80
+sleep 3
+systemctl start hostapd.service
+while ! systemctl is-active dnsmasq.service;
+do
+    systemctl start networking dnsmasq.service bootstrap_captive@server.service dhcpcd;
+    sleep 1
+done
 """
-    run(COM, shell=True)
+    with open("/var/log/bootstrap_captive.log", "a") as fd:
+        run(COM, shell=True, stdout=fd, stderr=fd)
 
 def com_stop(args):
     from subprocess import run
     set_wifi(False)
     COM="""
+echo "STOPPING"
+date
+set -x
 iptables -F -t nat
-systemctl stop bootstrap_captive@server.service hostapd.service dnsmasq.service
+systemctl stop networking hostapd.service dnsmasq.service dhcpcd.service wpa_suplicant.service
 ip addr flush wlan0
-sleep 3
-systemctl restart networking dhcpcd
+sleep 5
+systemctl restart networking dhcpcd.service wpa_supplicant.service;
+systemctl stop bootstrap_captive@server.service
 """
-    run(COM, shell=True)
+    with open("/var/log/bootstrap_captive.log", "a") as fd:
+        run(COM, shell=True, stdout=fd, stderr=fd)
 
 def com_server(args):
     from bootstrap_captive.server import server