Files
autoflash/flash.py
ducoterra a892fb247a exec
2019-09-11 21:58:31 -04:00

102 lines
2.6 KiB
Python
Executable File

#!/usr/bin/env python3
import threading
import loader
from queue import Queue
import subprocess
import time
import fourletterphat as flp
import os
import tempfile
from shutil import copyfile
#--
q = Queue()
t = loader.bgload(3, .1)
IMAGE = "image.img"
PWD = os.getcwd()
#--
def disp_string(string):
for letter in range(0,3) if len(string) > 3 else range(0, len(string)):
try:
flp.set_digit(letter, string[letter].upper())
except IndexError:
pass
flp.show()
def get_mountedlist():
return [item[item.find("/"):] for item in subprocess.check_output(
["/bin/bash", "-c", "lsblk"]).decode("utf-8").split("\n") if "/" in item]
def get_mounted_devs():
cmd = ["/bin/bash", "-c", "lsblk"]
output = subprocess.check_output(cmd).decode("utf-8").split("\n")
res = set()
for item in output:
if item.startswith("sd"):
# print(f"Found /dev/{item.split(' ')[0]}")
res.add(f"/dev/{item.split(' ')[0]}")
return res
def flash(dev):
loader.q.put(dev)
try:
flash_cmd = ["/bin/dd", f"if={IMAGE}", f"of={dev}"]
print("flashing")
subprocess.run(flash_cmd)
print("flashed")
with tempfile.TemporaryDirectory() as tempdir:
mount_cmd = ["mount",f"{dev}2", tempdir]
umount_cmd = ["umount", tempdir]
print("mounting")
subprocess.run(mount_cmd)
print(f"changing dir to {tempdir}")
os.chdir(tempdir)
print("making ssh dir")
os.mkdir("ssh")
print(f"changing dir to {PWD}")
os.chdir(PWD)
print(f"copying wpa_supplicant to {tempdir}")
copyfile("wpa_supplicant.conf", tempdir)
print("unmounting")
subprocess.run(umount_cmd)
return True
except BaseException as err:
print(err)
disp_string('ERR')
finally:
loader.q.get()
if __name__=="__main__":
while True:
if os.path.isfile(IMAGE):
break
else:
disp_string("IMG")
time.sleep(1)
disp_string("GO")
done = set()
while True:
devs = get_mounted_devs()
done = done.intersection(devs)
for dev in devs:
if dev not in done:
print(f"Flashing {dev}")
disp_string(dev.split("/")[2])
if flash(dev):
print(f"Flashed {dev}")
disp_string("GO")
time.sleep(.5)
done.add(dev)
time.sleep(1)