Move firmware generation to tasks
This commit is contained in:
parent
3d9cfd40b2
commit
734945a923
1 changed files with 1 additions and 77 deletions
|
@ -17,6 +17,7 @@ from .models import Device, Organization, Network, Model, Wifi, UserStatus
|
||||||
from .signals import *
|
from .signals import *
|
||||||
from .forms import *
|
from .forms import *
|
||||||
from .device import makewificonfig, heartbeathandler
|
from .device import makewificonfig, heartbeathandler
|
||||||
|
from .tasks import mkfirmware
|
||||||
|
|
||||||
from distutils.dir_util import copy_tree
|
from distutils.dir_util import copy_tree
|
||||||
|
|
||||||
|
@ -65,83 +66,6 @@ def hosts(request):
|
||||||
device.save()
|
device.save()
|
||||||
return render(request, "manager/hosts", {"device": device})
|
return render(request, "manager/hosts", {"device": device})
|
||||||
|
|
||||||
def mkfirmware(device, path):
|
|
||||||
if device.firmware and device.firmware > device.model.firmware and device.firmware > device.changed and glob.glob("%s/%s.bin" % (path, device.id)):
|
|
||||||
return True
|
|
||||||
|
|
||||||
BEFORE = os.getcwd()
|
|
||||||
DEVICEDIR = "/opt/vpnmanager/device-config/%i/" % device.model.id
|
|
||||||
SRCDIR = "/opt/vpnmanager/imagebuilder/%i/" % device.model.id
|
|
||||||
|
|
||||||
if glob.glob(SRCDIR + "/.kumilock"):
|
|
||||||
return False
|
|
||||||
|
|
||||||
with open(SRCDIR + "/.kumilock", "w") as lock:
|
|
||||||
lock.write("")
|
|
||||||
|
|
||||||
tempdir = tempfile.TemporaryDirectory()
|
|
||||||
|
|
||||||
copy_tree(DEVICEDIR, tempdir.name)
|
|
||||||
|
|
||||||
# Write OpenVPN config
|
|
||||||
|
|
||||||
with open(tempdir.name + "/etc/openvpn/client.conf", "w") as vpnconf:
|
|
||||||
vpnconf.write(device.vpnconfig)
|
|
||||||
|
|
||||||
# Write secret
|
|
||||||
|
|
||||||
with open(tempdir.name + "/etc/vpnsecret", "w") as secret:
|
|
||||||
secret.write('SECRET="%s"' % device.secret)
|
|
||||||
|
|
||||||
# Write password
|
|
||||||
|
|
||||||
with open(tempdir.name + "/etc/shadow", "r") as shadow:
|
|
||||||
password = crypt.crypt(device.password, crypt.mksalt(crypt.METHOD_MD5))
|
|
||||||
shadowin = shadow.read()
|
|
||||||
|
|
||||||
with open(tempdir.name + "/etc/shadow", "w") as shadowout:
|
|
||||||
shadowout.write(shadowin.replace("$PASSWORD", password))
|
|
||||||
|
|
||||||
# Write Wireless config
|
|
||||||
|
|
||||||
with open(tempdir.name + "/etc/config/wireless", "r") as wireless:
|
|
||||||
wirein = wireless.read()
|
|
||||||
|
|
||||||
with open(tempdir.name + "/etc/config/wireless", "w") as wireout:
|
|
||||||
wire = wirein.replace("$SSID", device.serial)
|
|
||||||
wireout.write(wire + "\n" + makewificonfig(device))
|
|
||||||
|
|
||||||
# Create compilation environment
|
|
||||||
|
|
||||||
os.system("rm -rf " + SRCDIR + "/files/")
|
|
||||||
os.mkdir(SRCDIR + "/files/")
|
|
||||||
os.system("cp -r " + tempdir.name + "/* " + SRCDIR + "/files/")
|
|
||||||
|
|
||||||
tempdir.cleanup()
|
|
||||||
|
|
||||||
os.system("rm " + SRCDIR + "/bin/targets/ar71xx/generic/*")
|
|
||||||
|
|
||||||
# Build image
|
|
||||||
|
|
||||||
os.chdir(SRCDIR)
|
|
||||||
|
|
||||||
try:
|
|
||||||
subprocess.call(["/usr/bin/make"])
|
|
||||||
except:
|
|
||||||
os.remove(SRCDIR + "/.kumilock")
|
|
||||||
os.chdir(BEFORE)
|
|
||||||
return False
|
|
||||||
|
|
||||||
os.chdir(BEFORE)
|
|
||||||
|
|
||||||
os.rename(glob.glob(SRCDIR + "/bin/targets/ar71xx/generic/*squashfs-sysupgrade.bin")[0], "%s/%s.bin" % (path, device.id))
|
|
||||||
os.remove(SRCDIR + "/.kumilock")
|
|
||||||
os.system("rm -rf " + SRCDIR + "/files/")
|
|
||||||
os.system("rm " + SRCDIR + "/bin/targets/ar71xx/generic/*")
|
|
||||||
device.firmware = datetime.datetime.now()
|
|
||||||
device.save()
|
|
||||||
return True
|
|
||||||
|
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
def update(request):
|
def update(request):
|
||||||
FWDIR = "/opt/vpnmanager/images/"
|
FWDIR = "/opt/vpnmanager/images/"
|
||||||
|
|
Loading…
Reference in a new issue