diff --git a/.gitignore b/.gitignore index 7157ebb..642ea54 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,8 @@ debian/debootstrap.tar.gz void/clean_environment void/test_environment void/xbps-static*.tar.xz + +arch/archlinux-bootstrap*.tar.zst +arch/clean_environment +arch/test_environment +arch/pkglist.x86_64.txt diff --git a/arch/cleanup b/arch/cleanup new file mode 100755 index 0000000..8fc2ada --- /dev/null +++ b/arch/cleanup @@ -0,0 +1,102 @@ +#!/bin/sh + +if test `id -u` -ne 0 +then + echo "$0 must be run as root." + return +fi + +set -e + +FRESH=clean_environment +ROOT=test_environment + +add_mount() { + if mountpoint -q "$ROOT$1" + then + echo "$ROOT$1 already mounted." + else + echo "Mounting $2$1 to $ROOT$1" + mkdir -p "$ROOT$1" + mount -o bind "$2$1" "$ROOT$1" + fi +} + +remove_mount() { + if mountpoint -q "$ROOT$1" + then + echo "Unmounting $ROOT$1" + umount -l "$ROOT$1" + fi +} + +add_mounts() { + add_mount / "$ROOT" + add_mount /proc + add_mount /sys + add_mount /dev + add_mount /dev/pts + add_mount /tmp/.X11-unix +} + +remove_mounts() { + remove_mount /tmp/.X11-unix + remove_mount /dev/pts + remove_mount /dev + remove_mount /sys + remove_mount /proc + remove_mount / +} + +remove_environment() { + if test -d "$ROOT" + then + # Call this script that automatically unmounts the mount points too. + remove_mounts + echo "Removing $ROOT" + rm -r "$ROOT" + else + echo "No environment found at $ROOT. Doing nothing." + fi +} + +remove_everything() { + if test -d "$ROOT" + then + # Call this script that automatically unmounts the mount points too. + remove_environment + fi + + if test -d "$FRESH" + then + echo "Removing $FRESH" + rm -r "$FRESH" + fi + + if test -d debootstrap + then + echo "Removing debootstrap" + rm -r debootstrap + fi + + if test -f pkglist.x86_64.txt + then + echo "Removing pkglist.x86_64.txt" + rm pkglist.x86_64.txt + fi + + if test -f archlinux-bootstrap*.tar.zst + then + echo "Removing archlinux bootstrap tarballs." + rm archlinux-bootstrap*.tar.zst + fi +} + +case "$1" in + everything) remove_everything ;; + mounts) remove_mounts ;; + add_mounts) add_mounts ;; + environment) remove_environment ;; + "") remove_environment ;; +esac + diff --git a/arch/create_environment b/arch/create_environment new file mode 100755 index 0000000..70e1953 --- /dev/null +++ b/arch/create_environment @@ -0,0 +1,50 @@ +#!/bin/sh + +if test `id -u` -ne 0 +then + echo "$0 must be run as root." + return +fi + +set -e + +ROOT=test_environment +FRESH=clean_environment + +TARBALL=archlinux-bootstrap-x86_64.tar.zst +REPO="https://geo.mirror.pkgbuild.com" + +if test -e "$FRESH" +then + echo "Clean arch environment found at $FRESH. Good." +else + echo "No arch environment found at $FRESH, downloading from $REPO" + curl -O "$REPO/iso/latest/$TARBALL" + tar -xf "$TARBALL" + mv root.x86_64 "$FRESH" +fi + +if test -e "$ROOT" +then + echo "Existing installation found at $ROOT, removing." + ./cleanup +fi + +echo "Copying $FRESH to $ROOT." +cp -r "$FRESH" "$ROOT" + +echo "Initializing $ROOT." + +./cleanup add_mounts + +chmod 1777 "$ROOT/tmp" + +echo 'Server = http://ftp.swin.edu.au/archlinux/$repo/os/$arch' > "$ROOT/etc/pacman.d/mirrorlist" +cp /etc/resolv.conf "$ROOT/etc/resolv.conf" + + +cp -r install_scripts "$ROOT/root" + +chroot "$ROOT" /root/install_scripts/user_setup "$@" || echo Script failed. + +./cleanup mounts diff --git a/arch/enter_environment b/arch/enter_environment new file mode 100755 index 0000000..81bc884 --- /dev/null +++ b/arch/enter_environment @@ -0,0 +1,22 @@ +#!/bin/sh + +if test `id -u` -ne 0 +then + echo "$0 must be run as root." + return +fi + +ROOT=test_environment + +if test -e "$ROOT" +then + echo "Using existing environment in $ROOT." +else + ./create_environment +fi + +./cleanup add_mounts + +chroot "$ROOT" sudo -iu user "$@" + +./cleanup mounts diff --git a/arch/get_pacstrap b/arch/get_pacstrap new file mode 100755 index 0000000..d052fde --- /dev/null +++ b/arch/get_pacstrap @@ -0,0 +1,29 @@ +#!/bin/sh + +# Finds pacstrap in $PATH, or download some version of it if not found. +# This script prefers to use local copies that are already downloaded, over +# system-wide installations, in case you want to test on some specific +# outdated version of pacstrap. + +LOCALDIR=`pwd`/arch-install-scripts +if test -e "$LOCALDIR/pacstrap" +then + echo "Found $LOCALDIR/pacstrap in current directory" + + # Run pacstrap without installing it to the system. + bash "$LOCALDIR/pacstrap" "$@" +elif IT=`command -v pacstrap` +then + echo "Found $IT in PATH" + + # Use the version of pacstrap that was already installed. + pacstrap "$@" +else + echo "pacstrap not found. Downloading to $LOCALDIR." + git clone https://gitlab.archlinux.org/archlinux/arch-install-scripts + make -C arch-install-scripts pacstrap + + # Run pacstrap without installing it to the system. + bash "$LOCALDIR/pacstrap" "$@" +fi + diff --git a/arch/install_scripts/install_miner_pacman b/arch/install_scripts/install_miner_pacman new file mode 100755 index 0000000..e6cadce --- /dev/null +++ b/arch/install_scripts/install_miner_pacman @@ -0,0 +1,10 @@ +#!/bin/sh + +sudo pacman -S wget erlang erlang-wx --noconfirm + +wget -q https://zxq9.com/projects/zomp/get_zx && bash get_zx +export PATH=$PATH:$HOME/bin + +zx import realm install_scripts/qpq.zrf +zx import realm install_scripts/uwiger.zrf +zx run qpq-gajumine diff --git a/arch/install_scripts/qpq.zrf b/arch/install_scripts/qpq.zrf new file mode 100644 index 0000000..e0ff1c3 Binary files /dev/null and b/arch/install_scripts/qpq.zrf differ diff --git a/arch/install_scripts/user_setup b/arch/install_scripts/user_setup new file mode 100755 index 0000000..c593717 --- /dev/null +++ b/arch/install_scripts/user_setup @@ -0,0 +1,23 @@ +#!/bin/bash + +pacman-key --init +pacman-key --populate archlinux +pacman -Sy sudo --noconfirm + +# Overwrite locale setting specified before the chroot +export LANG=C +export LC_ALL=C + +# Add a passwordless sudoer +useradd -m -s /bin/bash -G wheel user +passwd -d user +echo "user ALL=(ALL) NOPASSWD:ALL" > "/etc/sudoers.d/user" +chmod 0440 "/etc/sudoers.d/user" + +# Copy the install scripts into their home directory +cp -r ~/install_scripts /home/user +chown -R user:user /home/user/install_scripts + +# su to this new user... Or sudo -iu, since we want to pass in arguments too. +cd /home/user +sudo -iu user "$@" diff --git a/arch/install_scripts/uwiger.zrf b/arch/install_scripts/uwiger.zrf new file mode 100644 index 0000000..934f79b Binary files /dev/null and b/arch/install_scripts/uwiger.zrf differ