From ad8a4fd65e0691a6756de0972bfb23ef347e916b Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sun, 8 Apr 2018 12:07:35 +0200 Subject: Created a offline repo server --- deployments/08:00:27:E0:E0:E6.json | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 deployments/08:00:27:E0:E0:E6.json diff --git a/deployments/08:00:27:E0:E0:E6.json b/deployments/08:00:27:E0:E0:E6.json new file mode 100644 index 00000000..ecfaf2b5 --- /dev/null +++ b/deployments/08:00:27:E0:E0:E6.json @@ -0,0 +1,22 @@ +{ + "Setup temp build env": { + "pacman -Syy --noconfirm git" : null, + "useradd -m -G wheel builder" : null, + "sed -i 's/# %wheel ALL=(ALL) NO/%wheel ALL=(ALL) NO/' /etc/sudoers" : null + }, + "install lighttpd2-git": { + "git clone https://aur.archlinux.org/lighttpd2-git.git /home/builder/lighttpd2" : null, + "chown -R builder.builder /home/builder/lighttpd2" : null, + "su - builder -c \"(cd /home/builder/lighttpd2/; /usr/bin/makepkg -s --noconfirm)\"" : null, + "sh -c 'pacman -U --noconfirm /home/builder/lighttpd2/*.xz'" : null + }, + "Remove temp build env": { + "rm -rf /home/builder/lighttpd2" : null, + "sed -i 's/%wheel ALL=(ALL) NO/# %wheel ALL=(ALL) NO/' /etc/sudoers" : null + }, + "Create mirror": { + "mkdir -p /srv/http/archlinux/arch_offline/os/x86_64 + "pacman --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xorg-server-utils xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : null, + "repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz" : null, + } +} -- cgit v1.2.3-54-g00ecf From 456db37a90d1035afd5118bdc432e771361ed123 Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Sun, 8 Apr 2018 12:21:46 +0200 Subject: Changed the JSON structure to be able to pass args via the network --- archinstall.py | 91 +++++++++++++++++++++++--------------- deployments/08:00:27:E0:E0:E6.json | 42 ++++++++++-------- 2 files changed, 79 insertions(+), 54 deletions(-) diff --git a/archinstall.py b/archinstall.py index dad42737..adef8770 100644 --- a/archinstall.py +++ b/archinstall.py @@ -6,6 +6,7 @@ from glob import glob from socket import socket, inet_ntoa, AF_INET, AF_INET6, AF_PACKET from collections import OrderedDict as oDict from subprocess import Popen, STDOUT, PIPE +from time import sleep rootdir_pattern = re.compile('^.*?/devices') harddrives = oDict() @@ -149,20 +150,46 @@ if __name__ == '__main__': if not 'country' in args: args['country'] = 'SE' #all if not 'packages' in args: args['packages'] = '' if not 'post' in args: args['post'] = 'reboot' + if not 'password' in args: args['password'] = '0000' + + ## == If we got networking, + # Try fetching instructions for this box and execute them. + if get_default_gateway_linux(): + locmac = get_local_MACs() + for mac in locmac: + try: + instructions = grab_url_data('https://raw.githubusercontent.com/Torxed/archinstall/net-deploy/deployments/{}.json'.format(mac)) + except urllib.error.HTTPError: + print('[N] No instructions for this box on this mac: {}'.format(mac)) + continue + + #print('Decoding:', instructions) + try: + instructions = json.loads(instructions.decode('UTF-8'), object_pairs_hook=oDict) + except: + print('[E] JSON instructions failed to load for {}'.format(mac)) + instructions = {} + sleep(5) + continue + + if 'args' in instructions: + for key, val in instructions['args'].items(): + args[key] = val + print(args) if not os.path.isfile(args['pwfile']): - PIN = '0000' + #PIN = '0000' with open(args['pwfile'], 'w') as pw: - pw.write(PIN) - else: - ## TODO: Convert to `rb` instead. - # We shouldn't discriminate \xfu from being a passwd phrase. - with open(args['pwfile'], 'r') as pw: - PIN = pw.read().strip() + pw.write(args['password']) + #else: + # ## TODO: Convert to `rb` instead. + # # We shouldn't discriminate \xfu from being a passwd phrase. + # with open(args['pwfile'], 'r') as pw: + # PIN = pw.read().strip() print() - print('[!] Disk PASSWORD is: {}'.format(PIN)) + print('[!] Disk PASSWORD is: {}'.format(args['password'])) print() print('[N] Setting up {drive}.'.format(**args)) # dd if=/dev/random of=args['drive'] bs=4096 status=progress @@ -220,12 +247,12 @@ if __name__ == '__main__': o = run('arch-chroot /mnt chmod 700 /root') ## == Passwords - # o = run('arch-chroot /mnt usermod --password {} root'.format(PIN)) - # o = run("arch-chroot /mnt sh -c 'echo {pin} | passwd --stdin root'".format(pin='"{pin}"'.format(**args, pin=PIN)), echo=True) - o = run("arch-chroot /mnt sh -c \"echo 'root:{pin}' | chpasswd\"".format(**args, pin=PIN)) + # o = run('arch-chroot /mnt usermod --password {} root'.format(args['password'])) + # o = run("arch-chroot /mnt sh -c 'echo {pin} | passwd --stdin root'".format(pin='"{pin}"'.format(**args, pin=args['password'])), echo=True) + o = run("arch-chroot /mnt sh -c \"echo 'root:{pin}' | chpasswd\"".format(**args, pin=args['password'])) if 'user' in args: o = run('arch-chroot /mnt useradd -m -G wheel {user}'.format(**args)) - o = run("arch-chroot /mnt sh -c \"echo '{user}:{pin}' | chpasswd\"".format(**args, pin=PIN)) + o = run("arch-chroot /mnt sh -c \"echo '{user}:{pin}' | chpasswd\"".format(**args, pin=args['password'])) with open('/mnt/etc/mkinitcpio.conf', 'w') as mkinit: ## TODO: Don't replace it, in case some update in the future actually adds something. @@ -250,30 +277,22 @@ if __name__ == '__main__': entry.write('initrd /initramfs-linux.img\n') entry.write('options cryptdevice=UUID={UUID}:luksdev root=/dev/mapper/luksdev rw intel_pstate=no_hwp\n'.format(UUID=UUID)) - ## == If we got networking, - # Try fetching instructions for this box and execute them. - if get_default_gateway_linux(): - locmac = get_local_MACs() - for mac in locmac: - try: - instructions = grab_url_data('https://raw.githubusercontent.com/Torxed/archinstall/net-deploy/deployments/{}.json'.format(mac)) - except urllib.error.HTTPError: - print('[N] No instructions for this box on this mac: {}'.format(mac)) - continue - - #print('Decoding:', instructions) - instructions = json.loads(instructions.decode('UTF-8'), object_pairs_hook=oDict) - - for title in instructions: - print('[N] Network Deploy: {}'.format(title)) - for command in instructions[title]: - opts = instructions[title][command] if type(instructions[title][command]) in (dict, oDict) else {} - - #print('[N] Command: {} ({})'.format(command, opts)) - o = run('arch-chroot /mnt {c}'.format(c=command), **opts) - if type(instructions[title][command]) == bytes and len(instructions[title][command]) and not instructions[title][command] in o: - print('[W] Post install command failed: {}'.format(o.decode('UTF-8'))) - #print(o) + conf = {} + if 'post' in instructions: + conf = instructions['post'] + elif not 'args' in instructions and len(instructions): + conf = instructions + + for title in conf: + print('[N] Network Deploy: {}'.format(title)) + for command in conf[title]: + opts = conf[title][command] if type(conf[title][command]) in (dict, oDict) else {} + + #print('[N] Command: {} ({})'.format(command, opts)) + o = run('arch-chroot /mnt {c}'.format(c=command), **opts) + if type(conf[title][command]) == bytes and len(conf[title][command]) and not conf[title][command] in o: + print('[W] Post install command failed: {}'.format(o.decode('UTF-8'))) + #print(o) o = run('umount -R /mnt') if args['post'] == 'reboot': diff --git a/deployments/08:00:27:E0:E0:E6.json b/deployments/08:00:27:E0:E0:E6.json index ecfaf2b5..2b7fd42a 100644 --- a/deployments/08:00:27:E0:E0:E6.json +++ b/deployments/08:00:27:E0:E0:E6.json @@ -1,22 +1,28 @@ { - "Setup temp build env": { - "pacman -Syy --noconfirm git" : null, - "useradd -m -G wheel builder" : null, - "sed -i 's/# %wheel ALL=(ALL) NO/%wheel ALL=(ALL) NO/' /etc/sudoers" : null + "args" : { + "post" : "stay", + "password" : "0001" }, - "install lighttpd2-git": { - "git clone https://aur.archlinux.org/lighttpd2-git.git /home/builder/lighttpd2" : null, - "chown -R builder.builder /home/builder/lighttpd2" : null, - "su - builder -c \"(cd /home/builder/lighttpd2/; /usr/bin/makepkg -s --noconfirm)\"" : null, - "sh -c 'pacman -U --noconfirm /home/builder/lighttpd2/*.xz'" : null - }, - "Remove temp build env": { - "rm -rf /home/builder/lighttpd2" : null, - "sed -i 's/%wheel ALL=(ALL) NO/# %wheel ALL=(ALL) NO/' /etc/sudoers" : null - }, - "Create mirror": { - "mkdir -p /srv/http/archlinux/arch_offline/os/x86_64 - "pacman --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xorg-server-utils xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : null, - "repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz" : null, + "post" : { + "Setup temp build env": { + "pacman -Syy --noconfirm git" : null, + "useradd -m -G wheel builder" : null, + "sed -i 's/# %wheel ALL=(ALL) NO/%wheel ALL=(ALL) NO/' /etc/sudoers" : null + }, + "install lighttpd2-git": { + "git clone https://aur.archlinux.org/lighttpd2-git.git /home/builder/lighttpd2" : null, + "chown -R builder.builder /home/builder/lighttpd2" : null, + "su - builder -c \"(cd /home/builder/lighttpd2/; /usr/bin/makepkg -s --noconfirm)\"" : null, + "sh -c 'pacman -U --noconfirm /home/builder/lighttpd2/*.xz'" : null + }, + "Remove temp build env": { + "rm -rf /home/builder/lighttpd2" : null, + "sed -i 's/%wheel ALL=(ALL) NO/# %wheel ALL=(ALL) NO/' /etc/sudoers" : null + }, + "Create mirror": { + "mkdir -p /srv/http/archlinux/arch_offline/os/x86_64" : null, + "pacman --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xorg-server-utils xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : null, + "repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz" : null, + } } } -- cgit v1.2.3-54-g00ecf From 3059b1d5048335cc1b593adbd469a870f453d6ba Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sun, 8 Apr 2018 12:57:39 +0200 Subject: Created a offline repo machine (namechange) --- deployments/08:00:27:E0:E0:E6.json | 28 ---------------------------- deployments/08:00:27:e0:e0:e6.json | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 28 deletions(-) delete mode 100644 deployments/08:00:27:E0:E0:E6.json create mode 100644 deployments/08:00:27:e0:e0:e6.json diff --git a/deployments/08:00:27:E0:E0:E6.json b/deployments/08:00:27:E0:E0:E6.json deleted file mode 100644 index 2b7fd42a..00000000 --- a/deployments/08:00:27:E0:E0:E6.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "args" : { - "post" : "stay", - "password" : "0001" - }, - "post" : { - "Setup temp build env": { - "pacman -Syy --noconfirm git" : null, - "useradd -m -G wheel builder" : null, - "sed -i 's/# %wheel ALL=(ALL) NO/%wheel ALL=(ALL) NO/' /etc/sudoers" : null - }, - "install lighttpd2-git": { - "git clone https://aur.archlinux.org/lighttpd2-git.git /home/builder/lighttpd2" : null, - "chown -R builder.builder /home/builder/lighttpd2" : null, - "su - builder -c \"(cd /home/builder/lighttpd2/; /usr/bin/makepkg -s --noconfirm)\"" : null, - "sh -c 'pacman -U --noconfirm /home/builder/lighttpd2/*.xz'" : null - }, - "Remove temp build env": { - "rm -rf /home/builder/lighttpd2" : null, - "sed -i 's/%wheel ALL=(ALL) NO/# %wheel ALL=(ALL) NO/' /etc/sudoers" : null - }, - "Create mirror": { - "mkdir -p /srv/http/archlinux/arch_offline/os/x86_64" : null, - "pacman --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xorg-server-utils xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : null, - "repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz" : null, - } - } -} diff --git a/deployments/08:00:27:e0:e0:e6.json b/deployments/08:00:27:e0:e0:e6.json new file mode 100644 index 00000000..2b7fd42a --- /dev/null +++ b/deployments/08:00:27:e0:e0:e6.json @@ -0,0 +1,28 @@ +{ + "args" : { + "post" : "stay", + "password" : "0001" + }, + "post" : { + "Setup temp build env": { + "pacman -Syy --noconfirm git" : null, + "useradd -m -G wheel builder" : null, + "sed -i 's/# %wheel ALL=(ALL) NO/%wheel ALL=(ALL) NO/' /etc/sudoers" : null + }, + "install lighttpd2-git": { + "git clone https://aur.archlinux.org/lighttpd2-git.git /home/builder/lighttpd2" : null, + "chown -R builder.builder /home/builder/lighttpd2" : null, + "su - builder -c \"(cd /home/builder/lighttpd2/; /usr/bin/makepkg -s --noconfirm)\"" : null, + "sh -c 'pacman -U --noconfirm /home/builder/lighttpd2/*.xz'" : null + }, + "Remove temp build env": { + "rm -rf /home/builder/lighttpd2" : null, + "sed -i 's/%wheel ALL=(ALL) NO/# %wheel ALL=(ALL) NO/' /etc/sudoers" : null + }, + "Create mirror": { + "mkdir -p /srv/http/archlinux/arch_offline/os/x86_64" : null, + "pacman --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xorg-server-utils xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : null, + "repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz" : null, + } + } +} -- cgit v1.2.3-54-g00ecf From dff83ac7b8f1be247aa3914f7ca3d94c53e30373 Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Sun, 8 Apr 2018 13:06:52 +0200 Subject: More debugging --- archinstall.py | 46 +++++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/archinstall.py b/archinstall.py index adef8770..a48191ad 100644 --- a/archinstall.py +++ b/archinstall.py @@ -1,4 +1,5 @@ #!/usr/bin/python3 +import traceback import psutil, os, re, struct, sys, json import urllib.request, urllib.parse from glob import glob @@ -154,27 +155,34 @@ if __name__ == '__main__': ## == If we got networking, # Try fetching instructions for this box and execute them. + instructions = {} if get_default_gateway_linux(): locmac = get_local_MACs() - for mac in locmac: - try: - instructions = grab_url_data('https://raw.githubusercontent.com/Torxed/archinstall/net-deploy/deployments/{}.json'.format(mac)) - except urllib.error.HTTPError: - print('[N] No instructions for this box on this mac: {}'.format(mac)) - continue - - #print('Decoding:', instructions) - try: - instructions = json.loads(instructions.decode('UTF-8'), object_pairs_hook=oDict) - except: - print('[E] JSON instructions failed to load for {}'.format(mac)) - instructions = {} - sleep(5) - continue - - if 'args' in instructions: - for key, val in instructions['args'].items(): - args[key] = val + if not len(locmac): + print('[N] No network interfaces - No net deploy.') + else: + for mac in locmac: + try: + instructions = grab_url_data('https://raw.githubusercontent.com/Torxed/archinstall/net-deploy/deployments/{}.json'.format(mac)) + except urllib.error.HTTPError: + print('[N] No instructions for this box on this mac: {}'.format(mac)) + continue + + #print('Decoding:', instructions) + try: + instructions = json.loads(instructions.decode('UTF-8'), object_pairs_hook=oDict) + except: + print('[E] JSON instructions failed to load for {}'.format(mac)) + traceback.print_exc() + instructions = {} + sleep(5) + continue + + if 'args' in instructions: + for key, val in instructions['args'].items(): + args[key] = val + else: + print('[N] No gateway - No net deploy') print(args) -- cgit v1.2.3-54-g00ecf From cf6f6d94d00e7b156556f872f013fbb3ef798e45 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sun, 8 Apr 2018 13:31:12 +0200 Subject: Created a local mirror (sh added because *. search --- deployments/08:00:27:e0:e0:e6.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/08:00:27:e0:e0:e6.json b/deployments/08:00:27:e0:e0:e6.json index 2b7fd42a..f506ef5d 100644 --- a/deployments/08:00:27:e0:e0:e6.json +++ b/deployments/08:00:27:e0:e0:e6.json @@ -22,7 +22,7 @@ "Create mirror": { "mkdir -p /srv/http/archlinux/arch_offline/os/x86_64" : null, "pacman --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xorg-server-utils xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : null, - "repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz" : null, + "sh -c 'repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz'" : null } } } -- cgit v1.2.3-54-g00ecf From 16ff533c81b0d9c92cd4fc2089e96ff4fa3f19a7 Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Sun, 8 Apr 2018 13:45:30 +0200 Subject: Improved sys exec to enable debug output via net deploy --- archinstall.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/archinstall.py b/archinstall.py index a48191ad..a16ff8fb 100644 --- a/archinstall.py +++ b/archinstall.py @@ -43,19 +43,20 @@ def get_local_MACs(): macs[addr.address] = nic return macs -def run(cmd, echo=False, *args, **kwargs): +def run(cmd, echo=False, opts=None, *args, **kwargs): + if not opts: opts = {} #print('[!] {}'.format(cmd)) handle = Popen(cmd, shell='True', stdout=PIPE, stderr=STDOUT, **kwargs) output = b'' while handle.poll() is None: data = handle.stdout.read() if len(data): - if echo and 'flush': + if echo or 'debug' in opts: print(data.decode('UTF-8'), end='') # print(data.decode('UTF-8'), end='') output += data data = handle.stdout.read() - if echo: + if echo or 'debug' in opts: print(data.decode('UTF-8'), end='') output += data handle.stdout.close() @@ -297,7 +298,7 @@ if __name__ == '__main__': opts = conf[title][command] if type(conf[title][command]) in (dict, oDict) else {} #print('[N] Command: {} ({})'.format(command, opts)) - o = run('arch-chroot /mnt {c}'.format(c=command), **opts) + o = run('arch-chroot /mnt {c}'.format(c=command), opts) if type(conf[title][command]) == bytes and len(conf[title][command]) and not conf[title][command] in o: print('[W] Post install command failed: {}'.format(o.decode('UTF-8'))) #print(o) -- cgit v1.2.3-54-g00ecf From 6d2ce0db8c755b080e00a552c8b7e581c636e176 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sun, 8 Apr 2018 13:46:07 +0200 Subject: Enabled debugging on mirror creation --- deployments/08:00:27:e0:e0:e6.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/08:00:27:e0:e0:e6.json b/deployments/08:00:27:e0:e0:e6.json index f506ef5d..20acaa82 100644 --- a/deployments/08:00:27:e0:e0:e6.json +++ b/deployments/08:00:27:e0:e0:e6.json @@ -22,7 +22,7 @@ "Create mirror": { "mkdir -p /srv/http/archlinux/arch_offline/os/x86_64" : null, "pacman --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xorg-server-utils xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : null, - "sh -c 'repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz'" : null + "sh -c 'repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz'" : {"debug" : true} } } } -- cgit v1.2.3-54-g00ecf From ef455894e3d773dd728bf3613fd490f8cb4e686d Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Sun, 8 Apr 2018 14:02:08 +0200 Subject: Added debug output when options were given to the net-deploy command --- archinstall.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/archinstall.py b/archinstall.py index a16ff8fb..df857a87 100644 --- a/archinstall.py +++ b/archinstall.py @@ -296,6 +296,8 @@ if __name__ == '__main__': print('[N] Network Deploy: {}'.format(title)) for command in conf[title]: opts = conf[title][command] if type(conf[title][command]) in (dict, oDict) else {} + if len(opts): + print('[-] Options: {}'.format(opts)) #print('[N] Command: {} ({})'.format(command, opts)) o = run('arch-chroot /mnt {c}'.format(c=command), opts) -- cgit v1.2.3-54-g00ecf From 7b2373b7b1c594acf3a3f474b98a2f6cf3ae2a66 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sun, 8 Apr 2018 14:36:10 +0200 Subject: Forgot --noconfirm on pacman local dump --- deployments/08:00:27:e0:e0:e6.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/08:00:27:e0:e0:e6.json b/deployments/08:00:27:e0:e0:e6.json index 20acaa82..7209828c 100644 --- a/deployments/08:00:27:e0:e0:e6.json +++ b/deployments/08:00:27:e0:e0:e6.json @@ -21,7 +21,7 @@ }, "Create mirror": { "mkdir -p /srv/http/archlinux/arch_offline/os/x86_64" : null, - "pacman --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xorg-server-utils xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : null, + "pacman --noconfirm --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xorg-server-utils xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : null, "sh -c 'repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz'" : {"debug" : true} } } -- cgit v1.2.3-54-g00ecf From 778480f52bffe79030ee16254540a430f68f7673 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sun, 8 Apr 2018 15:03:23 +0200 Subject: Changed debug flag for a command --- deployments/08:00:27:e0:e0:e6.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deployments/08:00:27:e0:e0:e6.json b/deployments/08:00:27:e0:e0:e6.json index 7209828c..78fb2529 100644 --- a/deployments/08:00:27:e0:e0:e6.json +++ b/deployments/08:00:27:e0:e0:e6.json @@ -21,8 +21,8 @@ }, "Create mirror": { "mkdir -p /srv/http/archlinux/arch_offline/os/x86_64" : null, - "pacman --noconfirm --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xorg-server-utils xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : null, - "sh -c 'repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz'" : {"debug" : true} + "pacman --noconfirm --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xorg-server-utils xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : {"debug" : true}, + "sh -c 'repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz'" : null } } } -- cgit v1.2.3-54-g00ecf From beaf6ba8da7235803f9213d962024bfbfd9cf30f Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sun, 8 Apr 2018 15:05:21 +0200 Subject: Added "rerun" instructions. --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bf3e9959..1921e7ac 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,13 @@ Whenever this live-cd boots, from here on now - it'll run `archinstall.py`. # git clone -b net-deploy --single-branch https://github.com/Torxed/archinstall.git # python3 ./archinstall/archinstall.py +# Rerunning a installation + + # umount -R /mnt; cryptsetup close /dev/mapper/luksdev + # python3 ./archinstall/archinstall.py + +> Note: This assumes `--post=stay` is set to avoid instant reboot at the end. + # Some parameters you can give it --drive= @@ -55,4 +62,4 @@ Whenever this live-cd boots, from here on now - it'll run `archinstall.py`. ## End note - ![description](description.jpg) \ No newline at end of file + ![description](description.jpg) -- cgit v1.2.3-54-g00ecf From 6b07a7cb4960d9789fd891493c866d1a2e04b746 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sun, 8 Apr 2018 15:19:09 +0200 Subject: Update 08:00:27:e0:e0:e6.json --- deployments/08:00:27:e0:e0:e6.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/08:00:27:e0:e0:e6.json b/deployments/08:00:27:e0:e0:e6.json index 78fb2529..798740d3 100644 --- a/deployments/08:00:27:e0:e0:e6.json +++ b/deployments/08:00:27:e0:e0:e6.json @@ -21,7 +21,7 @@ }, "Create mirror": { "mkdir -p /srv/http/archlinux/arch_offline/os/x86_64" : null, - "pacman --noconfirm --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xorg-server-utils xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : {"debug" : true}, + "pacman --noconfirm --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : {"debug" : true}, "sh -c 'repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz'" : null } } -- cgit v1.2.3-54-g00ecf From 2be11b89da88a253e0b0ed33527d71fdf4163ae7 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sun, 8 Apr 2018 15:38:38 +0200 Subject: Removed debugging, added autostarts. --- deployments/08:00:27:e0:e0:e6.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/deployments/08:00:27:e0:e0:e6.json b/deployments/08:00:27:e0:e0:e6.json index 798740d3..f8f75408 100644 --- a/deployments/08:00:27:e0:e0:e6.json +++ b/deployments/08:00:27:e0:e0:e6.json @@ -21,8 +21,11 @@ }, "Create mirror": { "mkdir -p /srv/http/archlinux/arch_offline/os/x86_64" : null, - "pacman --noconfirm --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : {"debug" : true}, + "pacman --noconfirm --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : null, "sh -c 'repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz'" : null - } + }, + "Setup autostarts": { + "systemctl enable dhcpcd" : null, + "systemctl enable lighttpd2" : null } } -- cgit v1.2.3-54-g00ecf From 0491f5f27d236fb1d8792bea226d5abf1a0ad831 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sun, 8 Apr 2018 15:54:17 +0200 Subject: Removed stay after post. Installation looks good. --- deployments/08:00:27:e0:e0:e6.json | 1 - 1 file changed, 1 deletion(-) diff --git a/deployments/08:00:27:e0:e0:e6.json b/deployments/08:00:27:e0:e0:e6.json index f8f75408..05fc67a3 100644 --- a/deployments/08:00:27:e0:e0:e6.json +++ b/deployments/08:00:27:e0:e0:e6.json @@ -1,6 +1,5 @@ { "args" : { - "post" : "stay", "password" : "0001" }, "post" : { -- cgit v1.2.3-54-g00ecf From ecadddb3fc2313ab446fe7ac7a959b7f7ec32b26 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sun, 8 Apr 2018 15:57:03 +0200 Subject: Forgot a måsvinge.. fml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deployments/08:00:27:e0:e0:e6.json | 1 + 1 file changed, 1 insertion(+) diff --git a/deployments/08:00:27:e0:e0:e6.json b/deployments/08:00:27:e0:e0:e6.json index 05fc67a3..70612199 100644 --- a/deployments/08:00:27:e0:e0:e6.json +++ b/deployments/08:00:27:e0:e0:e6.json @@ -26,5 +26,6 @@ "Setup autostarts": { "systemctl enable dhcpcd" : null, "systemctl enable lighttpd2" : null + } } } -- cgit v1.2.3-54-g00ecf From e23dd62409ba84006001593de18d99dcf67b19cf Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Wed, 11 Apr 2018 22:24:02 +0200 Subject: Creating the first local mirror dependant client --- deployments/08:00:27:36:83:9b.json | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 deployments/08:00:27:36:83:9b.json diff --git a/deployments/08:00:27:36:83:9b.json b/deployments/08:00:27:36:83:9b.json new file mode 100644 index 00000000..c6e4f698 --- /dev/null +++ b/deployments/08:00:27:36:83:9b.json @@ -0,0 +1,21 @@ +{ + "args" : { + "password" : "0000" + }, + "pre" : { + "sh -c \"echo -n -e '[arch_offline]\nSigLevel = Optional TrustAll\nServer = http://localmirror.lan/archlinux/os/${arch}' >> /etc/pacman.conf\"" : null + }, + "post" : { + "Setup openssh": { + "pacman -Syy --noconfirm openssh" : null + }, + "Setup OpenVPN": { + "pacman -Syy --noconfirm openvpn" : null + }, + "Setup autostarts": { + "systemctl enable dhcpcd" : null, + "systemctl enable openssh" : null, + "systemctl enable openvpn-client@testclient" : null + } + } +} -- cgit v1.2.3-54-g00ecf From 950f2ec3b87c20520e03714e887202b008b92ef0 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Wed, 11 Apr 2018 22:25:02 +0200 Subject: Update 08:00:27:e0:e0:e6.json --- deployments/08:00:27:e0:e0:e6.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/08:00:27:e0:e0:e6.json b/deployments/08:00:27:e0:e0:e6.json index 70612199..9da6b170 100644 --- a/deployments/08:00:27:e0:e0:e6.json +++ b/deployments/08:00:27:e0:e0:e6.json @@ -20,7 +20,7 @@ }, "Create mirror": { "mkdir -p /srv/http/archlinux/arch_offline/os/x86_64" : null, - "pacman --noconfirm --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc" : null, + "pacman --noconfirm --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc openvpn rtorrent" : null, "sh -c 'repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz'" : null }, "Setup autostarts": { -- cgit v1.2.3-54-g00ecf From d7bf058251c58a91d608af3650b878960fb553df Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Wed, 11 Apr 2018 22:32:40 +0200 Subject: DNS + Database --- deployments/08:00:27:e0:e0:e6.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/08:00:27:e0:e0:e6.json b/deployments/08:00:27:e0:e0:e6.json index 9da6b170..79347f8b 100644 --- a/deployments/08:00:27:e0:e0:e6.json +++ b/deployments/08:00:27:e0:e0:e6.json @@ -20,7 +20,7 @@ }, "Create mirror": { "mkdir -p /srv/http/archlinux/arch_offline/os/x86_64" : null, - "pacman --noconfirm --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc openvpn rtorrent" : null, + "pacman --noconfirm --dbpath /tmp/ -Syu -w --cachedir /srv/http/archlinux/arch_offline/os/x86_64 base base-devel git python python-systemd awesome xorg-xinit xorg-server xterm nano screen sudo iptables mesa-libgl dhclient dnsmasq darkhttpd openssh sshfs openssl openvpn gcc openvpn rtorrent powerdns postgresql" : null, "sh -c 'repo-add /srv/http/archlinux/arch_offline/os/x86_64/arch_offline.db.tar.gz /srv/http/archlinux/arch_offline/os/x86_64/*.pkg.tar.xz'" : null }, "Setup autostarts": { -- cgit v1.2.3-54-g00ecf From 8535c1035371f8d148c3770226139823fb1d25ec Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Wed, 11 Apr 2018 23:02:08 +0200 Subject: DNS Server --- deployments/08:00:27:6f:0c:25.json | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 deployments/08:00:27:6f:0c:25.json diff --git a/deployments/08:00:27:6f:0c:25.json b/deployments/08:00:27:6f:0c:25.json new file mode 100644 index 00000000..a65ab0b0 --- /dev/null +++ b/deployments/08:00:27:6f:0c:25.json @@ -0,0 +1,23 @@ +{ + "args" : { + "password" : "0000" + }, + "post" : { + "Installing DNS + Database": { + "pacman -Syy --noconfirm powerdns postgresql" : null + }, + "Setup Database": { + "sh -c \"echo 'postgres:{pin}' | chpasswd\"" : null, + "su - postgres -c \"initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'\"" : null, + "systemctl start postgresql" : null + }, + "Setup DNS": { + "sh -c \"echo -n -e 'launch=gpgsql\ngpgsql-host=127.0.0.1\ngpgsql-user=pdns\ngpgsql-dbname=pdns\ngpgsql-password={PIN}' >> /etc/powerdns/pdns.conf\"" : null + }, + "Setup autostarts": { + "systemctl enable dhcpcd" : null, + "systemctl enable postgresql" : null, + "systemctl enable powerdns" : null + } + } +} -- cgit v1.2.3-54-g00ecf From 1e9e091a7eef140a71344d3384201fd580c76ed6 Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Wed, 11 Apr 2018 23:20:56 +0200 Subject: Testing pre-steps --- archinstall.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/archinstall.py b/archinstall.py index df857a87..9c22e680 100644 --- a/archinstall.py +++ b/archinstall.py @@ -237,6 +237,29 @@ if __name__ == '__main__': o = run("sed -i 's/#Server/Server/' /root/mirrorlist") o = run('rankmirrors -n 6 /root/mirrorlist > /etc/pacman.d/mirrorlist') + pre_conf = {} + if 'pre' in instructions: + pre_conf = instructions['pre'] + elif 'prerequisits' in instructions: + pre_conf = instructions['prerequisits'] + + ## Prerequisit steps needs to NOT be executed in arch-chroot. + ## Mainly because there's no root structure to chroot into. + ## But partly because some configurations need to be done against the live CD. + ## (For instance, modifying mirrors are done on LiveCD and replicated intwards) + for title in pre_conf: + print('[N] Network prerequisit step: {}'.format(title)) + for command in pre_conf[title]: + opts = pre_conf[title][command] if type(pre_conf[title][command]) in (dict, oDict) else {} + if len(opts): + print('[-] Options: {}'.format(opts)) + + #print('[N] Command: {} ({})'.format(command, opts)) + o = run('{c}'.format(c=command), opts) + if type(conf[title][command]) == bytes and len(conf[title][command]) and not conf[title][command] in o: + print('[W] Prerequisit step failed: {}'.format(o.decode('UTF-8'))) + #print(o) + print('[N] Straping in packages.') o = run('pacman -Syy') o = run('pacstrap /mnt base base-devel btrfs-progs efibootmgr nano wpa_supplicant dialog {packages}'.format(**args)) -- cgit v1.2.3-54-g00ecf From 24216bde897af17810f5a58073210117c26bf9d0 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Thu, 12 Apr 2018 19:59:47 +0200 Subject: Update 08:00:27:6f:0c:25.json --- deployments/08:00:27:6f:0c:25.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deployments/08:00:27:6f:0c:25.json b/deployments/08:00:27:6f:0c:25.json index a65ab0b0..48cf274e 100644 --- a/deployments/08:00:27:6f:0c:25.json +++ b/deployments/08:00:27:6f:0c:25.json @@ -1,6 +1,7 @@ { "args" : { - "password" : "0000" + "password" : "0000", + "debug" : true }, "post" : { "Installing DNS + Database": { -- cgit v1.2.3-54-g00ecf From f9f6f8a4a935c0431ec5f1d2dab1fe4ab989a3d8 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Thu, 12 Apr 2018 20:00:18 +0200 Subject: Update 08:00:27:6f:0c:25.json --- deployments/08:00:27:6f:0c:25.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/deployments/08:00:27:6f:0c:25.json b/deployments/08:00:27:6f:0c:25.json index 48cf274e..09c51dcd 100644 --- a/deployments/08:00:27:6f:0c:25.json +++ b/deployments/08:00:27:6f:0c:25.json @@ -1,15 +1,14 @@ { "args" : { - "password" : "0000", - "debug" : true + "password" : "0000" }, "post" : { "Installing DNS + Database": { "pacman -Syy --noconfirm powerdns postgresql" : null }, "Setup Database": { - "sh -c \"echo 'postgres:{pin}' | chpasswd\"" : null, - "su - postgres -c \"initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'\"" : null, + "sh -c \"echo 'postgres:{pin}' | chpasswd\"" : {"debug" : true}, + "su - postgres -c \"initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'\"" : {"debug" : true}, "systemctl start postgresql" : null }, "Setup DNS": { -- cgit v1.2.3-54-g00ecf From 7e22e24636238ee9a185fc92f04d49b327c8a87f Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Thu, 12 Apr 2018 20:04:48 +0200 Subject: Update 08:00:27:6f:0c:25.json --- deployments/08:00:27:6f:0c:25.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deployments/08:00:27:6f:0c:25.json b/deployments/08:00:27:6f:0c:25.json index 09c51dcd..326673a1 100644 --- a/deployments/08:00:27:6f:0c:25.json +++ b/deployments/08:00:27:6f:0c:25.json @@ -1,6 +1,7 @@ { "args" : { - "password" : "0000" + "password" : "0000", + "post" : "stay" }, "post" : { "Installing DNS + Database": { -- cgit v1.2.3-54-g00ecf From adfe5599d19e38952bf3ef3bbd125c22da27cb4d Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Thu, 12 Apr 2018 21:11:54 +0200 Subject: Restructured the reboot step, added locale.conf --- archinstall.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/archinstall.py b/archinstall.py index 9c22e680..40a28e8b 100644 --- a/archinstall.py +++ b/archinstall.py @@ -275,6 +275,7 @@ if __name__ == '__main__': #o = run("arch-chroot /mnt sed -i 's/#\(en_US\.UTF-8\)/\1/' /etc/locale.gen") o = run("arch-chroot /mnt sh -c \"echo '{hostname}' > /etc/hostname\"".format(**args)) o = run("arch-chroot /mnt sh -c \"echo -n 'en_US.UTF-8' > /etc/locale.gen\"") + o = run("arch-chroot /mnt sh -c \"echo -n 'LANG=en_US.UTF-8' > /etc/locale.conf\"") o = run('arch-chroot /mnt locale-gen') o = run('arch-chroot /mnt chmod 700 /root') @@ -328,8 +329,8 @@ if __name__ == '__main__': print('[W] Post install command failed: {}'.format(o.decode('UTF-8'))) #print(o) - o = run('umount -R /mnt') if args['post'] == 'reboot': + o = run('umount -R /mnt') o = run('reboot now') else: - print('Done. "reboot" when you\'re done tinkering.') + print('Done. "umount -R /mnt; reboot" when you\'re done tinkering.') -- cgit v1.2.3-54-g00ecf From 1c1a3490dd88321e85521bd2b3d2982a6aff139f Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Thu, 12 Apr 2018 21:32:58 +0200 Subject: Missing syntax in locale.gen --- archinstall.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/archinstall.py b/archinstall.py index 40a28e8b..05612904 100644 --- a/archinstall.py +++ b/archinstall.py @@ -274,7 +274,7 @@ if __name__ == '__main__': #o = run('arch-chroot /mnt echo "{hostname}" > /etc/hostname'.format(**args)) #o = run("arch-chroot /mnt sed -i 's/#\(en_US\.UTF-8\)/\1/' /etc/locale.gen") o = run("arch-chroot /mnt sh -c \"echo '{hostname}' > /etc/hostname\"".format(**args)) - o = run("arch-chroot /mnt sh -c \"echo -n 'en_US.UTF-8' > /etc/locale.gen\"") + o = run("arch-chroot /mnt sh -c \"echo -n 'en_US.UTF-8 UTF-8' > /etc/locale.gen\"") o = run("arch-chroot /mnt sh -c \"echo -n 'LANG=en_US.UTF-8' > /etc/locale.conf\"") o = run('arch-chroot /mnt locale-gen') o = run('arch-chroot /mnt chmod 700 /root') -- cgit v1.2.3-54-g00ecf From 722dd9643c47fee30d6ec4c5ee1cf2589f050aa7 Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Thu, 12 Apr 2018 22:18:16 +0200 Subject: Need new-line for locale-gen to read the file --- archinstall.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/archinstall.py b/archinstall.py index 05612904..5929de13 100644 --- a/archinstall.py +++ b/archinstall.py @@ -274,8 +274,8 @@ if __name__ == '__main__': #o = run('arch-chroot /mnt echo "{hostname}" > /etc/hostname'.format(**args)) #o = run("arch-chroot /mnt sed -i 's/#\(en_US\.UTF-8\)/\1/' /etc/locale.gen") o = run("arch-chroot /mnt sh -c \"echo '{hostname}' > /etc/hostname\"".format(**args)) - o = run("arch-chroot /mnt sh -c \"echo -n 'en_US.UTF-8 UTF-8' > /etc/locale.gen\"") - o = run("arch-chroot /mnt sh -c \"echo -n 'LANG=en_US.UTF-8' > /etc/locale.conf\"") + o = run("arch-chroot /mnt sh -c \"echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen\"") + o = run("arch-chroot /mnt sh -c \"echo 'LANG=en_US.UTF-8' > /etc/locale.conf\"") o = run('arch-chroot /mnt locale-gen') o = run('arch-chroot /mnt chmod 700 /root') -- cgit v1.2.3-54-g00ecf From 751a7c1ded730907aaed83f094fce62607eecc34 Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Thu, 12 Apr 2018 22:27:47 +0200 Subject: Added loading in the powerdns tables --- deployments/08:00:27:6f:0c:25.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/deployments/08:00:27:6f:0c:25.json b/deployments/08:00:27:6f:0c:25.json index 326673a1..badb64a1 100644 --- a/deployments/08:00:27:6f:0c:25.json +++ b/deployments/08:00:27:6f:0c:25.json @@ -13,7 +13,11 @@ "systemctl start postgresql" : null }, "Setup DNS": { - "sh -c \"echo -n -e 'launch=gpgsql\ngpgsql-host=127.0.0.1\ngpgsql-user=pdns\ngpgsql-dbname=pdns\ngpgsql-password={PIN}' >> /etc/powerdns/pdns.conf\"" : null + "sh -c \"echo -n -e 'launch=gpgsql\ngpgsql-host=127.0.0.1\ngpgsql-user=pdns\ngpgsql-dbname=pdns\ngpgsql-password={PIN}' >> /etc/powerdns/pdns.conf\"" : null, + "psql -U pdns -d pdns -a -f /usr/share/doc/powerdns/schema.pgsql.sql" : null + }, + "Install DNS Entries": { + }, "Setup autostarts": { "systemctl enable dhcpcd" : null, -- cgit v1.2.3-54-g00ecf From c277b96345b02289f13cf94fcbef24c57ca0ee6b Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Thu, 12 Apr 2018 22:34:08 +0200 Subject: Debugging --- archinstall.py | 2 +- deployments/08:00:27:6f:0c:25.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/archinstall.py b/archinstall.py index 5929de13..6d04d754 100644 --- a/archinstall.py +++ b/archinstall.py @@ -276,7 +276,7 @@ if __name__ == '__main__': o = run("arch-chroot /mnt sh -c \"echo '{hostname}' > /etc/hostname\"".format(**args)) o = run("arch-chroot /mnt sh -c \"echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen\"") o = run("arch-chroot /mnt sh -c \"echo 'LANG=en_US.UTF-8' > /etc/locale.conf\"") - o = run('arch-chroot /mnt locale-gen') + o = run('arch-chroot /mnt locale-gen', echo=True) o = run('arch-chroot /mnt chmod 700 /root') ## == Passwords diff --git a/deployments/08:00:27:6f:0c:25.json b/deployments/08:00:27:6f:0c:25.json index badb64a1..72bd9fd9 100644 --- a/deployments/08:00:27:6f:0c:25.json +++ b/deployments/08:00:27:6f:0c:25.json @@ -13,11 +13,11 @@ "systemctl start postgresql" : null }, "Setup DNS": { - "sh -c \"echo -n -e 'launch=gpgsql\ngpgsql-host=127.0.0.1\ngpgsql-user=pdns\ngpgsql-dbname=pdns\ngpgsql-password={PIN}' >> /etc/powerdns/pdns.conf\"" : null, + "sh -c \"echo -e 'launch=gpgsql\ngpgsql-host=127.0.0.1\ngpgsql-user=pdns\ngpgsql-dbname=pdns\ngpgsql-password={PIN}' >> /etc/powerdns/pdns.conf\"" : null, "psql -U pdns -d pdns -a -f /usr/share/doc/powerdns/schema.pgsql.sql" : null }, "Install DNS Entries": { - + }, "Setup autostarts": { "systemctl enable dhcpcd" : null, -- cgit v1.2.3-54-g00ecf From 81df161ffc7923e3dda6860a2a91581b2a62d58d Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Thu, 12 Apr 2018 22:53:21 +0200 Subject: Forgot to create the pdns user --- archinstall.py | 2 +- deployments/08:00:27:6f:0c:25.json | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/archinstall.py b/archinstall.py index 6d04d754..5929de13 100644 --- a/archinstall.py +++ b/archinstall.py @@ -276,7 +276,7 @@ if __name__ == '__main__': o = run("arch-chroot /mnt sh -c \"echo '{hostname}' > /etc/hostname\"".format(**args)) o = run("arch-chroot /mnt sh -c \"echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen\"") o = run("arch-chroot /mnt sh -c \"echo 'LANG=en_US.UTF-8' > /etc/locale.conf\"") - o = run('arch-chroot /mnt locale-gen', echo=True) + o = run('arch-chroot /mnt locale-gen') o = run('arch-chroot /mnt chmod 700 /root') ## == Passwords diff --git a/deployments/08:00:27:6f:0c:25.json b/deployments/08:00:27:6f:0c:25.json index 72bd9fd9..5c29575b 100644 --- a/deployments/08:00:27:6f:0c:25.json +++ b/deployments/08:00:27:6f:0c:25.json @@ -8,9 +8,10 @@ "pacman -Syy --noconfirm powerdns postgresql" : null }, "Setup Database": { - "sh -c \"echo 'postgres:{pin}' | chpasswd\"" : {"debug" : true}, - "su - postgres -c \"initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'\"" : {"debug" : true}, - "systemctl start postgresql" : null + "sh -c \"echo 'postgres:{pin}' | chpasswd\"" : null, + "su - postgres -c \"initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'\"" : null, + "systemctl start postgresql" : null, + "su - postgres -c \"psql -c 'CREATE USER pdns WITH PASSWORD \\'SomePassword\\';'\"" : {"debug" : true} }, "Setup DNS": { "sh -c \"echo -e 'launch=gpgsql\ngpgsql-host=127.0.0.1\ngpgsql-user=pdns\ngpgsql-dbname=pdns\ngpgsql-password={PIN}' >> /etc/powerdns/pdns.conf\"" : null, -- cgit v1.2.3-54-g00ecf From 97daed016749e7752b5b6fe66a5ed39ca77c4f7a Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Thu, 12 Apr 2018 23:04:39 +0200 Subject: Fixing syntax errors --- deployments/08:00:27:6f:0c:25.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/08:00:27:6f:0c:25.json b/deployments/08:00:27:6f:0c:25.json index 5c29575b..5873193c 100644 --- a/deployments/08:00:27:6f:0c:25.json +++ b/deployments/08:00:27:6f:0c:25.json @@ -11,7 +11,7 @@ "sh -c \"echo 'postgres:{pin}' | chpasswd\"" : null, "su - postgres -c \"initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'\"" : null, "systemctl start postgresql" : null, - "su - postgres -c \"psql -c 'CREATE USER pdns WITH PASSWORD \\'SomePassword\\';'\"" : {"debug" : true} + "su - postgres -c \"psql -c 'CREATE USER pdns WITH PASSWORD \'SomePassword\';'\"" : {"debug" : true} }, "Setup DNS": { "sh -c \"echo -e 'launch=gpgsql\ngpgsql-host=127.0.0.1\ngpgsql-user=pdns\ngpgsql-dbname=pdns\ngpgsql-password={PIN}' >> /etc/powerdns/pdns.conf\"" : null, -- cgit v1.2.3-54-g00ecf From 3156441797240ab4e11f881d188b1e5b7306054a Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Fri, 13 Apr 2018 06:13:38 +0200 Subject: Debugging --- deployments/08:00:27:6f:0c:25.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/08:00:27:6f:0c:25.json b/deployments/08:00:27:6f:0c:25.json index 5873193c..5c29575b 100644 --- a/deployments/08:00:27:6f:0c:25.json +++ b/deployments/08:00:27:6f:0c:25.json @@ -11,7 +11,7 @@ "sh -c \"echo 'postgres:{pin}' | chpasswd\"" : null, "su - postgres -c \"initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'\"" : null, "systemctl start postgresql" : null, - "su - postgres -c \"psql -c 'CREATE USER pdns WITH PASSWORD \'SomePassword\';'\"" : {"debug" : true} + "su - postgres -c \"psql -c 'CREATE USER pdns WITH PASSWORD \\'SomePassword\\';'\"" : {"debug" : true} }, "Setup DNS": { "sh -c \"echo -e 'launch=gpgsql\ngpgsql-host=127.0.0.1\ngpgsql-user=pdns\ngpgsql-dbname=pdns\ngpgsql-password={PIN}' >> /etc/powerdns/pdns.conf\"" : null, -- cgit v1.2.3-54-g00ecf From 57b619faea820a2d0c37e0bc008cb6beccd2bb17 Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Fri, 13 Apr 2018 06:28:34 +0200 Subject: Debugging --- deployments/08:00:27:6f:0c:25.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/08:00:27:6f:0c:25.json b/deployments/08:00:27:6f:0c:25.json index 5c29575b..780f8466 100644 --- a/deployments/08:00:27:6f:0c:25.json +++ b/deployments/08:00:27:6f:0c:25.json @@ -11,7 +11,7 @@ "sh -c \"echo 'postgres:{pin}' | chpasswd\"" : null, "su - postgres -c \"initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'\"" : null, "systemctl start postgresql" : null, - "su - postgres -c \"psql -c 'CREATE USER pdns WITH PASSWORD \\'SomePassword\\';'\"" : {"debug" : true} + "su - postgres -c \"psql -c 'CREATE USER pdns WITH PASSWORD \\\'SomePassword\\\';'\"" : {"debug" : true} }, "Setup DNS": { "sh -c \"echo -e 'launch=gpgsql\ngpgsql-host=127.0.0.1\ngpgsql-user=pdns\ngpgsql-dbname=pdns\ngpgsql-password={PIN}' >> /etc/powerdns/pdns.conf\"" : null, -- cgit v1.2.3-54-g00ecf From 3ab1d381d8e9e805324eaf599207ff122039fbe4 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Fri, 13 Apr 2018 06:31:38 +0200 Subject: Update 08:00:27:6f:0c:25.json --- deployments/08:00:27:6f:0c:25.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/08:00:27:6f:0c:25.json b/deployments/08:00:27:6f:0c:25.json index 780f8466..5c29575b 100644 --- a/deployments/08:00:27:6f:0c:25.json +++ b/deployments/08:00:27:6f:0c:25.json @@ -11,7 +11,7 @@ "sh -c \"echo 'postgres:{pin}' | chpasswd\"" : null, "su - postgres -c \"initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'\"" : null, "systemctl start postgresql" : null, - "su - postgres -c \"psql -c 'CREATE USER pdns WITH PASSWORD \\\'SomePassword\\\';'\"" : {"debug" : true} + "su - postgres -c \"psql -c 'CREATE USER pdns WITH PASSWORD \\'SomePassword\\';'\"" : {"debug" : true} }, "Setup DNS": { "sh -c \"echo -e 'launch=gpgsql\ngpgsql-host=127.0.0.1\ngpgsql-user=pdns\ngpgsql-dbname=pdns\ngpgsql-password={PIN}' >> /etc/powerdns/pdns.conf\"" : null, -- cgit v1.2.3-54-g00ecf From 53bee19a99389e06f53edb7491083d616d5aa5e6 Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Fri, 13 Apr 2018 06:54:22 +0200 Subject: More debugging --- archinstall.py | 7 ++++++- deployments/08:00:27:6f:0c:25.json | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/archinstall.py b/archinstall.py index 5929de13..1966ea6e 100644 --- a/archinstall.py +++ b/archinstall.py @@ -45,7 +45,8 @@ def get_local_MACs(): def run(cmd, echo=False, opts=None, *args, **kwargs): if not opts: opts = {} - #print('[!] {}'.format(cmd)) + if echo or 'debug' in opts: + print('[!] {}'.format(cmd)) handle = Popen(cmd, shell='True', stdout=PIPE, stderr=STDOUT, **kwargs) output = b'' while handle.poll() is None: @@ -334,3 +335,7 @@ if __name__ == '__main__': o = run('reboot now') else: print('Done. "umount -R /mnt; reboot" when you\'re done tinkering.') + + + +'su - postgres -c "psql -c \'CREATE USER pdns WITH PASSWORD \\\'SomePassword\\\';\'"' diff --git a/deployments/08:00:27:6f:0c:25.json b/deployments/08:00:27:6f:0c:25.json index 780f8466..313a2c83 100644 --- a/deployments/08:00:27:6f:0c:25.json +++ b/deployments/08:00:27:6f:0c:25.json @@ -11,7 +11,7 @@ "sh -c \"echo 'postgres:{pin}' | chpasswd\"" : null, "su - postgres -c \"initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'\"" : null, "systemctl start postgresql" : null, - "su - postgres -c \"psql -c 'CREATE USER pdns WITH PASSWORD \\\'SomePassword\\\';'\"" : {"debug" : true} + "su - postgres -c \"psql -c \\\"CREATE USER pdns WITH PASSWORD 'SomePassword';\\\"" : {"debug" : true} }, "Setup DNS": { "sh -c \"echo -e 'launch=gpgsql\ngpgsql-host=127.0.0.1\ngpgsql-user=pdns\ngpgsql-dbname=pdns\ngpgsql-password={PIN}' >> /etc/powerdns/pdns.conf\"" : null, -- cgit v1.2.3-54-g00ecf From 8c6185710e2b5de3bd854124b7a9c66c4f2572ca Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Fri, 13 Apr 2018 07:02:43 +0200 Subject: More debugging --- deployments/08:00:27:6f:0c:25.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/08:00:27:6f:0c:25.json b/deployments/08:00:27:6f:0c:25.json index 313a2c83..423fe872 100644 --- a/deployments/08:00:27:6f:0c:25.json +++ b/deployments/08:00:27:6f:0c:25.json @@ -11,7 +11,7 @@ "sh -c \"echo 'postgres:{pin}' | chpasswd\"" : null, "su - postgres -c \"initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'\"" : null, "systemctl start postgresql" : null, - "su - postgres -c \"psql -c \\\"CREATE USER pdns WITH PASSWORD 'SomePassword';\\\"" : {"debug" : true} + "su - postgres -c \"psql -c \\\"CREATE USER pdns WITH PASSWORD 'SomePassword';\\\"\"" : {"debug" : true} }, "Setup DNS": { "sh -c \"echo -e 'launch=gpgsql\ngpgsql-host=127.0.0.1\ngpgsql-user=pdns\ngpgsql-dbname=pdns\ngpgsql-password={PIN}' >> /etc/powerdns/pdns.conf\"" : null, -- cgit v1.2.3-54-g00ecf From 4001428149d38dc947ac70511f92ef089e69f45c Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Sat, 5 May 2018 19:20:14 +0200 Subject: Fixed: customize_rootfs.sh is not always run from /root, meaning 'git clone' would occationally fail to clone into /root rendering the rest of the process invalid. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8138ae0d..bfc28d0a 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ Just a bare bone automated [Arch](https://wiki.archlinux.org/index.php/Arch_Linu # cd ~/archlive # echo -e "git\npython-psutil" >> packages.both + # echo "cd /root" >> ./airootfs/root/customize_airootfs.sh # echo "git clone https://github.com/Torxed/archinstall.git" >> ./airootfs/root/customize_airootfs.sh # echo "chmod +x ~/archinstall/archinstall.py" >> ./airootfs/root/customize_airootfs.sh # mkdir ./airootfs/etc/skel -- cgit v1.2.3-54-g00ecf From 87604b0af1f3fffe0d12a46abf46ed0d2f77e1a3 Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Sun, 6 May 2018 22:48:08 +0200 Subject: Added a addon script to build AUR packages into the live iso that's used to execute archinstall --- make_offline | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 make_offline diff --git a/make_offline b/make_offline new file mode 100644 index 00000000..0b79871b --- /dev/null +++ b/make_offline @@ -0,0 +1,71 @@ +#!/bin/bash + +work_dir=$1 +arch=$2 + +# A func to download, build ... +build_aur () { + old_dir=`pwd` + # Prep with a build-user: + useradd -m -G wheel builder + sed -i 's/# %wheel ALL=(ALL) NO/%wheel ALL=(ALL) NO/' /etc/sudoers + + cd /tmp + rm -rf $1 $1.tar.gz + wget "https://aur.archlinux.org/cgit/aur.git/snapshot/$1.tar.gz" + tar xvzf "$1.tar.gz" + + cd $1 + build_dir=$(pwd) + chown -R builder.builder /tmp/$1 + echo " => Buiilding $1" + su - builder -c "(cd ${build_dir}; makepkg -s --noconfirm)" >/dev/null 2>&1 + + if [[ -n $3 ]]; then + echo " => Adding $1 to local AUR mirror" + mkdir -p $3 + sh -c "cp *.xz $3/$1.pkg.tar.xz" + sh -c "repo-add $3/aur_offline.db.tar.gz $3/*.xz" + if [[ -z $(cat ${old_dir}/packages.both | grep $1) ]]; then + echo " => Adding $1 to packages.both (from AUR)" + echo "$1" >> ${old_dir}/packages.both + fi + fi + + sh -c "mv *.xz ${old_dir}/$2/$1.pkg.tar.xz" + + cd ${old_dir} + userdel builder + rm -rf /home/builder + rm -rf /tmp/$1 + rm /tmp/$1.tar.gz +} + +echo "Starting to sync upstream changes to mirror." + +mkdir -p ${work_dir}/${arch}/airootfs/srv/http/archlinux/arch_offline/os/x86_64 +rm -rf /tmp/sync /tmp/local + +echo " => Retrieving packages" +pacman --noconfirm --dbpath /tmp/ -Syu -w --cachedir ${work_dir}/${arch}/airootfs/srv/http/archlinux/arch_offline/os/${arch} base base-devel syslinux efitools haveged intel-ucode memtest86+ mkinitcpio-nfs-utils nbd zsh git python python-systemd nano sudo iptables dhclient dnsmasq openssh sshfs openssl openvpn gcc openvpn powerdns postgresql sqlite go c-ares http-parser libuv nodejs-less mariadb memcached bzip2 glib2 libev lua51 ragel zlib >/dev/null 2>&1 + +echo " => Retrieving ISO specific packages" +pacman --noconfirm --dbpath /tmp/ -Syu -w --cachedir ${work_dir}/${arch}/airootfs/srv/http/archlinux/arch_offline/os/${arch} $(cat ${work_dir}/../packages.both) + +echo " => Building AUR (Adding packages to packages.both as we go along)" +build_aur "gogs-git" "${work_dir}/${arch}/airootfs/srv/http/archlinux/arch_offline/os/${arch}" +build_aur "lighttpd2-git" "${work_dir}/${arch}/airootfs/srv/http/archlinux/arch_offline/os/${arch}" "/tmp/aur_offline" + +if [[ -z $(cat ${work_dir}/pacman.conf | grep '\[aur_offline\]') ]]; then + echo "Adding offline mirror to build bubble" + echo "[aur_offline]" >> ${work_dir}/pacman.conf + echo "Server = file:///tmp/aur_offline" >> ${work_dir}/pacman.conf + echo "SigLevel = Optional TrustAll" >> ${work_dir}/pacman.conf +fi + +echo " => Adding packages to offline database" +sh -c "repo-add --new ${work_dir}/${arch}/airootfs/srv/http/archlinux/arch_offline/os/${arch}/arch_offline.db.tar.gz ${work_dir}/${arch}/airootfs/srv/http/archlinux/arch_offline/os/${arch}/*.pkg.tar.xz" >/dev/null 2>&1 + +pacman --config ${work_dir}/pacman.conf -Sy +pacman -Sy +echo "Done syncing offline mirror." -- cgit v1.2.3-54-g00ecf From 252af79e3dc647cd57a7d4622345d672852bc65e Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Thu, 24 May 2018 20:09:51 +0200 Subject: * New feature: deployment structure can now import/include other templates (Included templates will be installed first, since we'll assume those are baselines/requirements for slimmer deploy-structs) * Deployment scripts strings now supports python string formatting, if parameter or is given as options to each command-line (TODO: Add as a global parameter as well, and treat all strings as formatable) * Added two templates: workstation + 00:11:22:33:44:55, a example of how to set up a workstation using a template and a custom addition. Also added a default template that is similar to the workstation but does everything in one template. They all use some awk magic to fix alt-tab in Awesome WM, it also creates a "desktop" environment and installs some useful tools and fixes the start menu in Awesome WM. * Reordering mirrors is now a configurable option (Default turned off, to better suit offline environments) * Disk/root password now configurable as either a fixed string, or ask for via STDIN (Syntax for now is: ) * deployment targets now a variable (todo: add a parameter/argument) * SSL support (ignores certificate validation for now, I know this is bad, but until a parameter etc is in place, this has to be a nessecary evil for now) * Cleaned up a lot of custom variables and baked them into so it's easier to format strings based off information gathered along the way (such as partition names). * Error handling: Mostly for missing dependencies and situations, such as not booted in UEFI environment --- archinstall.py | 164 +++++++++++++++++++++++++++---------- deployments/00_11_22_33_44_55.json | 20 +++++ deployments/default.json | 37 +++++++++ deployments/workstation.json | 35 ++++++++ install_aur | 72 ++++++++++++++++ make_offline | 69 ---------------- 6 files changed, 284 insertions(+), 113 deletions(-) create mode 100644 deployments/00_11_22_33_44_55.json create mode 100644 deployments/default.json create mode 100644 deployments/workstation.json create mode 100644 install_aur delete mode 100644 make_offline diff --git a/archinstall.py b/archinstall.py index 49e2b878..c274fa3e 100644 --- a/archinstall.py +++ b/archinstall.py @@ -1,7 +1,7 @@ #!/usr/bin/python3 import traceback import psutil, os, re, struct, sys, json -import urllib.request, urllib.parse +import urllib.request, urllib.parse, ssl from glob import glob #from select import epoll, EPOLLIN, EPOLLHUP from socket import socket, inet_ntoa, AF_INET, AF_INET6, AF_PACKET @@ -9,9 +9,13 @@ from collections import OrderedDict as oDict from subprocess import Popen, STDOUT, PIPE from time import sleep +## FIXME: dependency checks (fdisk, lsblk etc) + rootdir_pattern = re.compile('^.*?/devices') harddrives = oDict() +deploy_target = 'https://raw.githubusercontent.com/Torxed/archinstall/net-deploy/deployments' + args = {} positionals = [] for arg in sys.argv[1:]: @@ -105,10 +109,11 @@ def grab_partitions(dev): parts = oDict() o = run('lsblk -o name -J -b {dev}'.format(dev=dev)) r = json.loads(o) - for part in r['blockdevices'][0]['children']: - parts[part['name'][len(drive_name):]] = { - # TODO: Grab partition info and store here? - } + if len(r['blockdevices']) and 'children' in r['blockdevices'][0]: + for part in r['blockdevices'][0]['children']: + parts[part['name'][len(drive_name):]] = { + # TODO: Grab partition info and store here? + } return parts @@ -134,22 +139,64 @@ def multisplit(s, splitters): def grab_url_data(path): safe_path = path[:path.find(':')+1]+''.join([item if item in ('/', '?', '=', '&') else urllib.parse.quote(item) for item in multisplit(path[path.find(':')+1:], ('/', '?', '=', '&'))]) - response = urllib.request.urlopen(safe_path) + ssl_context = ssl.create_default_context() + ssl_context.check_hostname = False + ssl_context.verify_mode=ssl.CERT_NONE + response = urllib.request.urlopen(safe_path, context=ssl_context) return response.read() +def get_instructions(target): + instructions = {} + try: + instructions = grab_url_data('{}/{}.json'.format(deploy_target, target)) + except urllib.error.HTTPError: + print('[N] No instructions found called: {}'.format(target)) + return instructions + + print('[N] Found net-deploy instructions called: {}'.format(target)) + try: + instructions = json.loads(instructions.decode('UTF-8'), object_pairs_hook=oDict) + except: + print('[E] JSON instructions failed to load for {}'.format(target)) + traceback.print_exc() + sleep(5) + + return instructions + +def merge_dicts(d1, d2, before=True, overwrite=False): + """ Merges d2 into d1 """ + if before: + d1, d2 = d2.copy(), d1.copy() + overwrite = True + + for key, val in d2.items(): + if key in d1: + if type(d1[key]) in [dict, oDict] and type(d2[key]) in [dict, oDict]: + d1[key] = merge_dicts(d1[key] if not before else d2[key], d2[key] if not before else d1[key], before=before, overwrite=overwrite) + elif overwrite: + d1[key] = val + else: + d1[key] = val + + return d1 + if __name__ == '__main__': update_git() # Breaks and restarts the script if an update was found. update_drive_list() + if not os.path.isdir('/sys/firmware/efi'): + print('[E] This script only supports UEFI-booted machines.') + exit(1) + ## Setup some defaults (in case no command-line parameters or netdeploy-params were given) if not 'drive' in args: args['drive'] = list(harddrives.keys())[0] # First drive found if not 'size' in args: args['size'] = '100%' if not 'start' in args: args['start'] = '513MiB' if not 'pwfile' in args: args['pwfile'] = '/tmp/diskpw' if not 'hostname' in args: args['hostname'] = 'Arcinstall' - if not 'country' in args: args['country'] = 'SE' #all - if not 'packages' in args: args['packages'] = '' + if not 'country' in args: args['country'] = 'SE' # 'all' if we don't want country specific mirrors. + if not 'packages' in args: args['packages'] = '' # extra packages other than default if not 'post' in args: args['post'] = 'reboot' - if not 'password' in args: args['password'] = '0000' + if not 'password' in args: args['password'] = '0000' # Default disk passord, can be or a fixed string ## == If we got networking, # Try fetching instructions for this box and execute them. @@ -160,28 +207,27 @@ if __name__ == '__main__': print('[N] No network interfaces - No net deploy.') else: for mac in locmac: - try: - instructions = grab_url_data('https://raw.githubusercontent.com/Torxed/archinstall/net-deploy/deployments/{}.json'.format(mac)) - except urllib.error.HTTPError: - print('[N] No instructions for this box on this mac: {}'.format(mac)) - continue - - #print('Decoding:', instructions) - try: - instructions = json.loads(instructions.decode('UTF-8'), object_pairs_hook=oDict) - except: - print('[E] JSON instructions failed to load for {}'.format(mac)) - traceback.print_exc() - instructions = {} - sleep(5) - continue + instructions = get_instructions(mac) if 'args' in instructions: + ## == Recursively fetch instructions if "include" is found under {args: ...} + while 'include' in instructions['args']: + includes = instructions['args']['include'] + print('[!] Importing net-deploy target: {}'.format(includes)) + del(instructions['args']['include']) + if type(includes) in (dict, list): + for include in includes: + instructions = merge_dicts(instructions, get_instructions(include), before=True) + else: + instructions = merge_dicts(instructions, get_instructions(includes), before=True) + + ## Update arguments if we found any for key, val in instructions['args'].items(): args[key] = val else: print('[N] No gateway - No net deploy') + if args['password'] == '': args['password'] = input('Enter a disk (and root) password: ') print(args) if not os.path.isfile(args['pwfile']): @@ -207,32 +253,47 @@ if __name__ == '__main__': o = run('parted -s {drive} set 1 boot on'.format(**args)) o = run('parted -s {drive} mkpart primary {start} {size}'.format(**args)) - first, second = grab_partitions(args['drive']).keys() - o = run('mkfs.vfat -F32 {drive}{part1}'.format(**args, part1=first)) + args['paritions'] = grab_partitions(args['drive']) + if len(args['paritions']) <= 0: + print('[E] No paritions were created on {drive}'.format(**args), o) + exit(1) + for index, part_name in enumerate(args['paritions']): + args['partition_{}'.format(index+1)] = part_name + + o = run('mkfs.vfat -F32 {drive}{partition_1}'.format(**args)) + if (b'mkfs.fat' not in o and b'mkfs.vfat' not in o) or b'command not found' in o: + print('[E] Could not setup {drive}{partition_1}'.format(**args), o) + exit(1) # "--cipher sha512" breaks the shit. # TODO: --use-random instead of --use-urandom - print('[N] Adding encryption to {drive}{part2}.'.format(**args, part2=second)) - o = run('cryptsetup -q -v --type luks2 --pbkdf argon2i --hash sha512 --key-size 512 --iter-time 10000 --key-file {pwfile} --use-urandom luksFormat {drive}{part2}'.format(**args, part2=second)) + print('[N] Adding encryption to {drive}{partition_2}.'.format(**args)) + o = run('cryptsetup -q -v --type luks2 --pbkdf argon2i --hash sha512 --key-size 512 --iter-time 10000 --key-file {pwfile} --use-urandom luksFormat {drive}{partition_2}'.format(**args)) if not o.decode('UTF-8').strip() == 'Command successful.': - print('[E] Failed to setup disk encryption.') + print('[E] Failed to setup disk encryption.', o) exit(1) - o = run('cryptsetup open {drive}{part2} luksdev --key-file {pwfile} --type luks2'.format(**args, part2=second)) + o = run('cryptsetup open {drive}{partition_2} luksdev --key-file {pwfile} --type luks2'.format(**args)) o = run('file /dev/mapper/luksdev') # /dev/dm-0 if b'cannot open' in o: - print('[E] Could not mount encrypted device.') + print('[E] Could not mount encrypted device.', o) exit(1) + print('[N] Creating btrfs filesystem inside {drive}{partition_2}'.format(**args)) o = run('mkfs.btrfs /dev/mapper/luksdev') + if not b'UUID' in o: + print('[E] Could not setup btrfs filesystem.', o) + exit(1) o = run('mount /dev/mapper/luksdev /mnt') - print('[N] Reordering mirrors.') os.makedirs('/mnt/boot') - o = run('mount {drive}{part1} /mnt/boot'.format(**args, part1=first)) - o = run("wget 'https://www.archlinux.org/mirrorlist/?country={country}&protocol=https&ip_version=4&ip_version=6&use_mirror_status=on' -O /root/mirrorlist".format(**args)) - o = run("sed -i 's/#Server/Server/' /root/mirrorlist") - o = run('rankmirrors -n 6 /root/mirrorlist > /etc/pacman.d/mirrorlist') + o = run('mount {drive}{partition_1} /mnt/boot'.format(**args)) + + print('[N] Reordering mirrors.') + if 'mirrors' in args and args['mirrors'] and get_default_gateway_linux(): + o = run("wget 'https://www.archlinux.org/mirrorlist/?country={country}&protocol=https&ip_version=4&ip_version=6&use_mirror_status=on' -O /root/mirrorlist".format(**args)) + o = run("sed -i 's/#Server/Server/' /root/mirrorlist") + o = run('rankmirrors -n 6 /root/mirrorlist > /etc/pacman.d/mirrorlist') pre_conf = {} if 'pre' in instructions: @@ -247,13 +308,21 @@ if __name__ == '__main__': for title in pre_conf: print('[N] Network prerequisit step: {}'.format(title)) for command in pre_conf[title]: - opts = pre_conf[title][command] if type(pre_conf[title][command]) in (dict, oDict) else {} + raw_command = command + opts = pre_conf[title][raw_command] if type(pre_conf[title][raw_command]) in (dict, oDict) else {} if len(opts): - print('[-] Options: {}'.format(opts)) - - #print('[N] Command: {} ({})'.format(command, opts)) + if 'pass-args' in opts or 'format' in opts: + command = command.format(**args) + if 'pass-args' in opts: + del(opts['pass-args']) + elif 'format' in opts: + del(opts['format']) + else: + print('[-] Options: {}'.format(opts)) + + #print('[N] Command: {} ({})'.format(raw_command, opts)) o = run('{c}'.format(c=command), opts) - if type(conf[title][command]) == bytes and len(conf[title][command]) and not conf[title][command] in o: + if type(conf[title][raw_command]) == bytes and len(conf[title][raw_command]) and not conf[title][raw_command] in o: print('[W] Prerequisit step failed: {}'.format(o.decode('UTF-8'))) #print(o) @@ -261,6 +330,10 @@ if __name__ == '__main__': o = run('pacman -Syy') o = run('pacstrap /mnt base base-devel btrfs-progs efibootmgr nano wpa_supplicant dialog {packages}'.format(**args)) + if not os.path.isdir('/mnt/etc'): + print('[E] Failed to strap in packages', o) + exit(1) + o = run('genfstab -pU /mnt >> /mnt/etc/fstab') with open('/mnt/etc/fstab', 'a') as fstab: fstab.write('\ntmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0\n') # Redundant \n at the start? who knoes? @@ -299,8 +372,8 @@ if __name__ == '__main__': ## For some reason, blkid and /dev/disk/by-uuid are not getting along well. ## And blkid is wrong in terms of LUKS. - #UUID = run('blkid -s PARTUUID -o value {drive}{part2}'.format(**args, part2=second)).decode('UTF-8').strip() - UUID = run("ls -l /dev/disk/by-uuid/ | grep {basename}{part2} | awk '{awk}'".format(basename=os.path.basename(args['drive']), part2=second, awk='{print $9}')).decode('UTF-8').strip() + #UUID = run('blkid -s PARTUUID -o value {drive}{partition_2}'.format(**args)).decode('UTF-8').strip() + UUID = run("ls -l /dev/disk/by-uuid/ | grep {basename}{partition_2} | awk '{{print $9}}'".format(basename=os.path.basename(args['drive']), **args)).decode('UTF-8').strip() with open('/mnt/boot/loader/entries/arch.conf', 'w') as entry: entry.write('title Arch Linux\n') entry.write('linux /vmlinuz-linux\n') @@ -316,13 +389,16 @@ if __name__ == '__main__': for title in conf: print('[N] Network Deploy: {}'.format(title)) for command in conf[title]: + raw_command = command opts = conf[title][command] if type(conf[title][command]) in (dict, oDict) else {} if len(opts): print('[-] Options: {}'.format(opts)) + if 'pass-args' in opts and opts['pass-args']: + command = command.format(**args) #print('[N] Command: {} ({})'.format(command, opts)) o = run('arch-chroot /mnt {c}'.format(c=command), opts) - if type(conf[title][command]) == bytes and len(conf[title][command]) and not conf[title][command] in o: + if type(conf[title][raw_command]) == bytes and len(conf[title][raw_command]) and not conf[title][raw_command] in o: print('[W] Post install command failed: {}'.format(o.decode('UTF-8'))) #print(o) diff --git a/deployments/00_11_22_33_44_55.json b/deployments/00_11_22_33_44_55.json new file mode 100644 index 00000000..5526629e --- /dev/null +++ b/deployments/00_11_22_33_44_55.json @@ -0,0 +1,20 @@ +{ + "args" : { + "include" : "workstation", + "user" : "anton", + "password" : "1111", + "drive" : "/dev/sdb", + "post" : "don't reboot" + }, + "post" : { + "Setup a basic virtual environment": { + "mkdir -p /home/{user}/virts" : {"pass-args" : true}, + "qemu-img create -f qcow2 /home/{user}/virts/test_deploy.qcow2 4G" : {"pass-args" : true}, + "chown -R {user}.{user} /home/{user}/virts" : {"pass-args" : true} + }, + "Setup user" : { + "useradd -m -G wheel -s /bin/bash anton" : null, + "sh -c \"echo {user}:{password} | chpasswd\"" : {"pass-args" : true} + } + } +} diff --git a/deployments/default.json b/deployments/default.json new file mode 100644 index 00000000..c2d34267 --- /dev/null +++ b/deployments/default.json @@ -0,0 +1,37 @@ +{ + "args" : { + "password" : "", + "user" : "anton", + "_webbrowser" : "chromium", + "_window_manager" : "awesome", + "_keyboard_layout" : "sv-latin1" + }, + "post" : { + "Install workstation packages": { + "pacman -Syy --noconfirm {_webbrowser} {_window_manager} openssh sshfs git dhclient ttf-freefont xorg-server xorg-xrandr xorg-xinit xterm nano wget pulseaudio pulseaudio-alsa pavucontrol smbclient cifs-utils xscreensaver" : null + }, + "Enable autostarts": { + "systemctl enable dhcpcd" : null + }, + "Setup desktop environment" : { + "sed -i 's/^twm &/#&/' /etc/X11/xinit/xinitrc" : null, + "sed -i 's/^xclock/#&/' /etc/X11/xinit/xinitrc" : null, + "sed -i 's/^xterm/#&/' /etc/X11/xinit/xinitrc" : null, + "sed -i 's/^exec xterm/#&/' /etc/X11/xinit/xinitrc" : null, + "sh -c \"echo 'setxkbmap se' >> /etc/X11/xinit/xinitrc\"" : null, + "sh -c \"echo 'xscreensaver -no-splash &' >> /etc/X11/xinit/xinitrc\"" : null, + "sh -c \"echo 'exec {_window_manager}' >> /etc/X11/xinit/xinitrc\"" : {"pass-args" : true}, + "sh -c \"echo 'KEYMAP={_keyboard_layout}\nFONT=lat9w-16' >> /etc/vconsole.conf\"" : {"pass-args" : true}, + "sh -c \"sed -i 's/{ \\\"open terminal\\\", terminal/{ \\\"Chromium\\\", \\\"chromium\\\" },\n &1/' /etc/xdg/awesome/rc.lua\"" : null, + "sh -c \"sed -i 's/{ \\\"open terminal\\\", terminal/{ \\\"File handler\\\", \\\"nemo\\\" },\n &1/' /etc/xdg/awesome/rc.lua\"" : null, + "sh -c \"sed -i 's/^globalkeys = gears.table.join(/&\n awful.key({ modkey, }, \\\"l\\\", function() awful.spawn(\\\"xscreensaver-command -lock &\\\") end),\n/' /etc/xdg/awesome/rc.lua\"" : null, + "sh -c \"awk -i inplace -v RS='' '{gsub(/awful.key\\({ modkey,.*?}, \\\"Tab\\\",.*?\\\"client\\\"}\\),/, \\\"awful.key({ modkey, }, \\\"Tab\\\",\\\n function ()\\\n awful.client.focus.byidx(-1)\\\n if client.focus then\\\n client.focus:raise()\\\n end\\\n end),\\\n awful.key({ modkey, \\\"Shift\\\" }, \\\"Tab\\\",\\\n function ()\\\n awful.client.focus.byidx(1)\\\n if client.focus then\\\n client.focus.raise()\\\n end\\\n end),\\\"); print}' /etc/xdg/awesome/rc.lua\"" : null, + "gsettings set org.nemo.desktop show-desktop-icons false" : null, + "xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search" : null + }, + "Setup users" : { + "useradd -m -G wheel -s /bin/bash anton" : null, + "sh -c \"echo {user}:{password} | chpasswd\"" : {"pass-args" : true} + } + } +} diff --git a/deployments/workstation.json b/deployments/workstation.json new file mode 100644 index 00000000..50686193 --- /dev/null +++ b/deployments/workstation.json @@ -0,0 +1,35 @@ +{ + "args" : { + "password" : "", + "_mediaplayer" : "lollypop gstreamer gst-plugins-good gnome-keyring", + "_webbrowser" : "chromium", + "_window_manager" : "awesome", + "_keyboard_layout" : "sv-latin1", + "_virtulization" : "qemu ovmf", + "post" : "don't reboot" + }, + "post" : { + "Install workstation packages": { + "pacman -Syy --noconfirm openssh sshfs git {_webbrowser} {_mediaplayer} {_window_manager} {_virtulization} dhclient ttf-freefont xorg-server xorg-xrandr xorg-xinit xterm nano wget pulseaudio pulseaudio-alsa pavucontrol smbclient cifs-utils xscreensaver" : {"pass-args" : true} + }, + "Setup virtulization" : { + "sh -c \"Description=\\\"Bridge for virtual machines\\\"\nInterface=br0\nConnection=bridge\nBindsToInterfaces=(eno1)\nIP=no\nExecUpPost=\\\"ip link set dev br0 address $(cat /sys/class/net/eno1/address); IP=dhcp; ip_set\\\"\nExecDownPre=\\\"IP=dhcp\\\"\n\n## Ignore (R)STP and immediately activate the bridge\nSkipForwardingDelay=yes\"" : null + }, + "Setup desktop environment" : { + "sed -i 's/^twm &/#&/' /etc/X11/xinit/xinitrc" : null, + "sed -i 's/^xclock/#&/' /etc/X11/xinit/xinitrc" : null, + "sed -i 's/^xterm/#&/' /etc/X11/xinit/xinitrc" : null, + "sed -i 's/^exec xterm/#&/' /etc/X11/xinit/xinitrc" : null, + "sh -c \"echo 'setxkbmap se' >> /etc/X11/xinit/xinitrc\"" : null, + "sh -c \"echo 'xscreensaver -no-splash &' >> /etc/X11/xinit/xinitrc\"" : null, + "sh -c \"echo 'exec {_window_manager}' >> /etc/X11/xinit/xinitrc\"" : {"pass-args" : true}, + "sh -c \"echo 'KEYMAP={_keyboard_layout}\nFONT=lat9w-16' >> /etc/vconsole.conf\"" : {"pass-args" : true}, + "sh -c \"sed -i 's/{ \\\"open terminal\\\", terminal/{ \\\"Chromium\\\", \\\"chromium\\\" },\n &1/' /etc/xdg/awesome/rc.lua\"" : null, + "sh -c \"sed -i 's/{ \\\"open terminal\\\", terminal/{ \\\"File handler\\\", \\\"nemo\\\" },\n &1/' /etc/xdg/awesome/rc.lua\"" : null, + "sh -c \"sed -i 's/^globalkeys = gears.table.join(/&\n awful.key({ modkey, }, \\\"l\\\", function() awful.spawn(\\\"xscreensaver-command -lock &\\\") end),\n/' /etc/xdg/awesome/rc.lua\"" : null, + "sh -c \"awk -i inplace -v RS='' '{gsub(/awful.key\\({ modkey,.*?}, \\\"Tab\\\",.*?\\\"client\\\"}\\),/, \\\"awful.key({ modkey, }, \\\"Tab\\\",\n function ()\n awful.client.focus.byidx(-1)\n if client.focus then\n client.focus:raise()\n end\n end),\n awful.key({ modkey, \\\"Shift\\\" }, \\\"Tab\\\",\n function ()\n awful.client.focus.byidx(1)\n if client.focus then\n client.focus.raise()\n end\n end),\\\"); print}' /etc/xdg/awesome/rc.lua\"" : null, + "gsettings set org.nemo.desktop show-desktop-icons false" : null, + "xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search" : null + } + } +} diff --git a/install_aur b/install_aur new file mode 100644 index 00000000..6452c428 --- /dev/null +++ b/install_aur @@ -0,0 +1,72 @@ +#!/bin/bash + +# offline_mirror_path - is used to temporarily store build AUR packages +# in order to "host" them to the build process. +# The path will be on the build machine, not inside the build itself. + +work_dir=$1 +arch=$2 +offline_mirror_path="/tmp/aur_offline" + +# A func to download, build and host AUR packages to the ISO build process +build_aur () { + old_dir=`pwd` + package=$1 + # Prep with a build-user (removed at the end): + # TODO: Check if already exists, if so, randomize name/don't remove at the end. + # TODO: Don't give permission to wheel, give it only to this user (easy, but needs debugging first) + useradd -m -G wheel builder + sed -i 's/# %wheel ALL=(ALL) NO/%wheel ALL=(ALL) NO/' /etc/sudoers + + # Extract the AUR package. + cd /tmp + rm -rf ${package} ${package}.tar.gz + wget "https://aur.archlinux.org/cgit/aur.git/snapshot/${package}.tar.gz" + tar xvzf "${package}.tar.gz" + + cd ${package} + build_dir=$(pwd) + chown -R builder.builder /tmp/${package} + echo " => Buiilding ${package}" + su - builder -c "(cd ${build_dir}; makepkg -s --noconfirm)" >/dev/null 2>&1 + + + echo " => Adding ${package} to local AUR hosting directory ${offline_mirror_path}" + mkdir -p ${offline_mirror_path} + sh -c "cp *.xz ${offline_mirror_path}/" + sh -c "repo-add ${offline_mirror_path}/aur_offline.db.tar.gz ${offline_mirror_path}/*.xz" + + ## Long term storage inside the ISO? (if we want to install from CD to disk or host it to others) + # sh -c "mv *.xz ${old_dir}/$2/$1.pkg.tar.xz" + + cd ${old_dir} + userdel builder + rm -rf /home/builder + rm -rf /tmp/${package} + rm /tmp/${package}.tar.gz +} + +echo "Starting to sync upstream changes to offline mirror." +rm -rf /tmp/sync /tmp/local + +echo " => Building AUR packages (found in packages.aur)" +for package in $(cat ${work_dir}/packages.aur); do + build_aur package +done + +if [[ -z $(cat ${work_dir}/pacman.conf | grep '\[aur_offline\]') ]]; then + echo " => Adding offline mirror to the chroot environment" + + echo "[aur_offline]" >> ${work_dir}/pacman.conf + echo "Server = file:///tmp/aur_offline" >> ${work_dir}/pacman.conf + echo "SigLevel = Optional TrustAll" >> ${work_dir}/pacman.conf +fi + +## Long term storage, if we want to be able to index our newly build files +## while installing down to disk later, we need to index the AUR packages. +#echo " => Adding packages to offline database" +#sh -c "repo-add --new ${work_dir}/${arch}/airootfs/srv/http/archlinux/arch_offline/os/${arch}/arch_offline.db.tar.gz ${work_dir}/${arch}/airootfs/srv/http/archlinux/arch_offline/os/${arch}/*.pkg.tar.xz" >/dev/null 2>&1 + +pacman --config ${work_dir}/pacman.conf -Sy +pacman -Sy +echo "Done syncing offline mirror." diff --git a/make_offline b/make_offline deleted file mode 100644 index 225dec25..00000000 --- a/make_offline +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/bash - -work_dir=$1 -arch=$2 -offline_mirror_path="/tmp/aur_offline" - -# A func to download, build ... -build_aur () { - old_dir=`pwd` - package=$1 - # Prep with a build-user: - useradd -m -G wheel builder - sed -i 's/# %wheel ALL=(ALL) NO/%wheel ALL=(ALL) NO/' /etc/sudoers - - cd /tmp - rm -rf ${package} ${package}.tar.gz - wget "https://aur.archlinux.org/cgit/aur.git/snapshot/${package}.tar.gz" - tar xvzf "${package}.tar.gz" - - cd ${package} - build_dir=$(pwd) - chown -R builder.builder /tmp/${package} - echo " => Buiilding ${package}" - su - builder -c "(cd ${build_dir}; makepkg -s --noconfirm)" >/dev/null 2>&1 - - - echo " => Adding ${package} to local AUR mirror" - mkdir -p ${offline_mirror_path} - sh -c "cp *.xz ${offline_mirror_path}/" - sh -c "repo-add ${offline_mirror_path}/aur_offline.db.tar.gz ${offline_mirror_path}/*.xz" - if [[ -z $(cat ${old_dir}/packages.both | grep ${package}) ]]; then - # TODO: save a copy of ${old_dir}/packages.both ONCE, if it doesn't excist already. - # This in order to revert our AUR changes which will affect a re-build. - echo " => Adding ${package} to packages.both (from AUR)" - echo "${package}" >> ${old_dir}/packages.both - fi - - ## Long term storage inside the ISO? (if we want to install to disk, we need to pass this along) - # sh -c "mv *.xz ${old_dir}/$2/$1.pkg.tar.xz" - - cd ${old_dir} - userdel builder - rm -rf /home/builder - rm -rf /tmp/${package} - rm /tmp/${package}.tar.gz -} - -echo "Starting to sync upstream changes to offline mirror." -rm -rf /tmp/sync /tmp/local - -echo " => Building AUR (Adding packages to packages.both as we go along)" -build_aur "lighttpd2-git" - -if [[ -z $(cat ${work_dir}/pacman.conf | grep '\[aur_offline\]') ]]; then - echo " => Adding offline mirror to the chroot environment" - - echo "[aur_offline]" >> ${work_dir}/pacman.conf - echo "Server = file:///tmp/aur_offline" >> ${work_dir}/pacman.conf - echo "SigLevel = Optional TrustAll" >> ${work_dir}/pacman.conf -fi - -## Long term storage, if we want to be able to index our newly build files -## while installing down to disk later, we need to index the AUR packages. -#echo " => Adding packages to offline database" -#sh -c "repo-add --new ${work_dir}/${arch}/airootfs/srv/http/archlinux/arch_offline/os/${arch}/arch_offline.db.tar.gz ${work_dir}/${arch}/airootfs/srv/http/archlinux/arch_offline/os/${arch}/*.pkg.tar.xz" >/dev/null 2>&1 - -pacman --config ${work_dir}/pacman.conf -Sy -pacman -Sy -echo "Done syncing offline mirror." -- cgit v1.2.3-54-g00ecf From 88aed640656445c12ca3cee809f4e61ba7d42236 Mon Sep 17 00:00:00 2001 From: Lord Anton Hvornum Date: Thu, 24 May 2018 20:24:19 +0200 Subject: Updated the readme --- README.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 1a133ad3..8f04d45b 100644 --- a/README.md +++ b/README.md @@ -7,23 +7,22 @@ Just a bare bone automated [Arch](https://wiki.archlinux.org/index.php/Arch_Linu # echo -e "git\npython-psutil" >> packages.both # echo "cd /root" >> ./airootfs/root/customize_airootfs.sh # echo "git clone https://github.com/Torxed/archinstall.git" >> ./airootfs/root/customize_airootfs.sh + # echo "cd archinstall; git checkout net-deploy; cd /root" >> ./airootfs/root/customize_airootfs.sh # echo "chmod +x ~/archinstall/archinstall.py" >> ./airootfs/root/customize_airootfs.sh # mkdir ./airootfs/etc/skel # echo '[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && sh -c ~/archinstall/archinstall.py' >> ./airootfs/etc/skel/.zprofile - # rm -v work/build.make_* && ./build.sh -v + # rm -v work*; ./build.sh -v > Note: `~/archlive` might be different on your system, see [ArchISO#Setup](https://wiki.archlinux.org/index.php/archiso#Setup) for more info. -Whenever this live-cd boots, from here on now - it'll run `archinstall.py`. +Whenever this live-cd boots, from here on now - it'll run `archinstall.py` with the `net-deploy` branch. -> CAUTION: If no parameters are given, it will devour the first disk in your system (/dev/sda, /dev/nvme0n1p2 etc). +> CAUTION: If no parameters are given, it will devour the first disk in your system (/dev/sda, /dev/nvme0n1 etc). # Manually run it on a booted Live CD - # pacman -Sy git - # git clone https://github.com/Torxed/archinstall.git - # python3 ./archinstall/archinstall.py -> Note: *(You could also wget the `archinstall.py` script and skip installing git)* + # wget https://raw.githubusercontent.com/Torxed/archinstall/net-deploy/archinstall.py + # python3 archinstall.py # Rerunning a installation @@ -43,8 +42,11 @@ Whenever this live-cd boots, from here on now - it'll run `archinstall.py`. Sets the starting location of the root partition (TODO: /boot will take up space from 1MiB - , make sure boot is no larger than 513MiB) + --password=0000 (Default) + Which disk password to use, --password="" for prompt of password. + --pwfile=/tmp/diskpw (Default) - Which file to use as the disk encryption password + Which file to store the disk encryption password while sending it to cryptsetup --hostname=Arcinstall (Default) Sets the hostname of the box @@ -60,7 +62,9 @@ Whenever this live-cd boots, from here on now - it'll run `archinstall.py`. Adds an additional username to the system (default group Wheel) --post=reboot (Default) - After a successful install, reboots into the system. + After a successful install, reboots into the system. Use --post=stay to not reboot. + +net-deployment structs support all these and more. Custom arguments with string formatting. See [deployments/workstation.json](https://github.com/Torxed/archinstall/blob/net-deploy/deployments/workstation.json) for examples. ## End note -- cgit v1.2.3-54-g00ecf