86 lines
2.2 KiB
Python
Executable File
86 lines
2.2 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
|
|
|
|
#--
|
|
q = Queue()
|
|
t = loader.bgload(3, .1)
|
|
IMAGE = "image.img"
|
|
#--
|
|
|
|
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}"]
|
|
output = subprocess.check_output(flash_cmd).decode("utf-8")
|
|
with tempfile.TemporaryDirectory() as tempdir:
|
|
mount_cmd = ["mount",f"{dev}2", tempdir]
|
|
umount_cmd = ["umount", tempdir]
|
|
|
|
subprocess.run(mount_cmd)
|
|
os.chdir(tempdir)
|
|
os.mkdir("ssh")
|
|
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)
|