windvn/input/oobe/data/bin/login
2022-07-30 11:45:58 +02:00

144 lines
3.7 KiB
Bash
Executable File

#!/usr/bin/env python3
# This script is ran when booting into the OS, and the setup isn't finished
import os
import traceback
import subprocess
debug = False
os.environ["PATH"] = "/sbin:/usr/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
def procWait(proc):
rtn = proc.wait()
if debug: print(rtn)
if rtn != 0: raise processError
def call(*args,**kwargs):
if debug: print(str(args[0]))
proc = subprocess.Popen(*args,**kwargs)
procWait(proc)
def callo(*args,**kwargs):
data = b""
proc = subprocess.Popen(*args,**kwargs,stdout=subprocess.PIPE)
while True:
b = proc.stdout.read()
if b == b"": break
data += b
procWait(proc)
return data.decode("utf-8")
def mchoice(choices):
while True:
choice = input("Choice: ").lower()
if not choice in choices: continue
return choice
def main():
while True:
print("Welcome to opus-dvn.")
print("1: Finish installation")
print("2: Clone to other device")
print("3: Open bash")
print("4: Shut down")
choice = mchoice(["1","2","3","4"])
if choice == "1":
if os.path.isfile("/isRawImage"):
print("Resizing / to fill disk...")
dev = callo(["findmnt","-n","-o","SOURCE","/"]).strip("\t\r\n")
disk = dev[:-1]
part = dev[-1]
call(["growpart",disk,part])
call(["resize2fs",dev])
os.remove("/isRawImage")
call(["dpkg-reconfigure","keyboard-configuration"])
call(["udevadm","trigger","--subsystem-match=input","--action=change"])
call(["apt","install","console-setup","locales","tzdata","--yes"])
call(["dpkg-reconfigure","locales"])
call(["dpkg-reconfigure","tzdata"])
print("")
hostname = input("Hostname: ")
with open("/etc/hosts","w",encoding="utf-8") as fh:
fh.write("""\
127.0.0.1 localhost
127.0.1.1 $HOSTNAME
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters\
""".replace("$HOSTNAME",hostname)
)
with open("/etc/hostname","w",encoding="utf-8") as fh:
fh.write(hostname)
os.environ["HOSTNAME"] = hostname
print("")
print("Configure your network now, using nmtui? (y/n)")
if mchoice(["y","n"]) == "y": call(["nmtui"])
print("")
call(["groupadd","-f","sudo"])
username = False
while True:
username = input("First user (Administrator): ").lower().strip(" ")
if username == "root": continue
print("Encrypt user? Recommended for machines that may be stolen or spying relatives. (y/n)")
encrypt = mchoice(["y","n"])
ucommand = ["adduser"]
ucommand = ucommand + ["--gecos","",username]
try:
call(["id","-u",username])
except:
try:
call(ucommand)
except:
try:
call(["deluser","--remove-home",username])
except:
continue
try:
call(["usermod","-a","-G","sudo",username])
except:
print("Warning: Couldn't add user to sudo group!")
if encrypt == "y":
call(["modprobe","ecryptfs"])
with open("/etc/modules","a",encoding="utf-8") as mfile:
mfile.write("ecryptfs\n")
call(["ecryptfs-migrate-home","-u",username])
for root,dirs,files in os.walk("/home"):
for files in dirs:
ffile = os.path.join(root,file)
lfile = ffile.replace("/home/","",1)
if lfile.startswith(username + "."):
shutil.rmtree(ffile)
break
break
print("")
print("Booting into new environment ...")
os.remove("/bin/login")
os.rename("/bin/login.bak","/bin/login")
return
if choice == "2":
print("Not implemented.")
continue
if choice == "3":
call(["bash"])
return
if choice == "4":
call(["poweroff"])
return
try:
main()
except:
print(traceback.format_exc())
input("Press RETURN to quit.")