From 72d15b226620c5d3248dd545748cff6c0bfcc049 Mon Sep 17 00:00:00 2001 From: lassulus Date: Sat, 17 Oct 2015 15:48:53 +0200 Subject: krebs 4 infest: add arch-infest and refactor --- krebs/4lib/infest/finalize.sh | 21 ++++++++++++----- krebs/4lib/infest/install-nix.sh | 7 ------ krebs/4lib/infest/prepare.sh | 51 ++++++++++++++++++++++++++++++++-------- 3 files changed, 56 insertions(+), 23 deletions(-) (limited to 'krebs/4lib') diff --git a/krebs/4lib/infest/finalize.sh b/krebs/4lib/infest/finalize.sh index ced5a4d4d..0039960c5 100644 --- a/krebs/4lib/infest/finalize.sh +++ b/krebs/4lib/infest/finalize.sh @@ -1,21 +1,30 @@ #! /bin/sh set -eux { - umount /mnt/nix || [ $? -eq 32 ] - umount /mnt/boot || [ $? -eq 32 ] - umount /mnt/root || [ $? -eq 32 ] - umount /mnt || [ $? -eq 32 ] - umount /boot || [ $? -eq 32 ] + umount /mnt/nix + umount /mnt/root + umount /boot || : + umount /mnt/boot + umount /mnt + + coreutils_path=$(set +f; for i in /nix/store/*coreutils*/bin; do :; done; echo $i) + sed_path=$(set +f; for i in /nix/store/*gnused*/bin; do :; done; echo $i) + PATH="$coreutils_path:$sed_path" - PATH=$(set +f; for i in /nix/store/*coreutils*/bin; do :; done; echo $i) export PATH mkdir /oldshit + #fix bug where grub install cant find the /nix/store because its under a bind mount + if test -e /boot/grub/grub.cfg; then + sed -i 's,//store,/nix/store,g' /boot/grub/grub.cfg + fi; + mv /bin /oldshit/ mv /newshit/bin / # TODO ensure /boot is empty + # skip boot rmdir /newshit/boot # skip /dev diff --git a/krebs/4lib/infest/install-nix.sh b/krebs/4lib/infest/install-nix.sh index 88c8c3e1e..af1a8bd16 100644 --- a/krebs/4lib/infest/install-nix.sh +++ b/krebs/4lib/infest/install-nix.sh @@ -19,16 +19,9 @@ install_nix() {( ) nix_src_dir=$(basename $nix_url .tar.bz2) tar jxf $nix_src_dir.tar.bz2 - mkdir -v -m 0755 -p /nix $nix_src_dir/install fi - #TODO: make this general or move to prepare - if ! mount | grep -Fq '/dev/mapper/centos-root on /mnt/nix type xfs'; then - mkdir -p /mnt/nix - mount --bind /nix /mnt/nix - fi - . /root/.nix-profile/etc/profile.d/nix.sh for i in \ diff --git a/krebs/4lib/infest/prepare.sh b/krebs/4lib/infest/prepare.sh index 07c00c3a5..9fbd5be86 100644 --- a/krebs/4lib/infest/prepare.sh +++ b/krebs/4lib/infest/prepare.sh @@ -5,10 +5,14 @@ prepare() {( if test -e /etc/os-release; then . /etc/os-release case $ID in + arch) + prepare_arch "$@" + exit + ;; centos) case $VERSION_ID in 7) - prepare_centos7 "$@" + prepare_centos "$@" exit ;; esac @@ -19,17 +23,28 @@ prepare() {( exit -1 )} -prepare_centos7() { +prepare_arch() { + type bzip2 2>/dev/null || pacman -S --noconfirm bzip2 + type git 2>/dev/null || pacman -S --noconfirm git + type rsync 2>/dev/null || pacman -S --noconfirm rsync + prepare_common +} + +prepare_centos() { type bzip2 2>/dev/null || yum install -y bzip2 type git 2>/dev/null || yum install -y git type rsync 2>/dev/null || yum install -y rsync + prepare_common +} + +prepare_common() { + if ! getent group nixbld >/dev/null; then groupadd -g 30000 -r nixbld fi for i in `seq 1 10`; do if ! getent passwd nixbld$i 2>/dev/null; then useradd \ - -c "CentOS Nix build user $i" \ -d /var/empty \ -g 30000 \ -G 30000 \ @@ -38,7 +53,6 @@ prepare_centos7() { -s /sbin/nologin \ -u $(expr 30000 + $i) \ nixbld$i - rm -f /var/spool/mail/nixbld$i fi done @@ -46,29 +60,46 @@ prepare_centos7() { # mount install directory # - if ! mount | grep -Fq '/dev/mapper/centos-root on /mnt type xfs'; then + if ! mount | grep -Fq ' on /mnt type '; then mkdir -p /newshit mount --bind /newshit /mnt fi - if ! mount | grep -Fq '/dev/sda1 on /mnt/boot type xfs'; then + if ! mount | grep -Fq ' on /mnt/boot type '; then mkdir -p /mnt/boot - mount /dev/sda1 /mnt/boot - fi - mount | grep 'on /mnt\>' >&2 + if mount | grep -Fq ' on /boot type '; then + bootdev=$(mount | grep " on /boot type " | sed 's/ .*//') + mount $bootdev /mnt/boot + else + mount --bind /boot/ /mnt/boot + fi + + fi # # prepare install directory # + rootpart=$(mount | grep " on / type" | sed 's/ .*//') + mkdir -p /mnt/etc/nixos mkdir -m 0555 -p /mnt/var/empty - if ! mount | grep -Fq '/dev/mapper/centos-root on /mnt/root type xfs'; then + if ! mount | grep -Fq "$rootpart on /mnt/root type "; then mkdir -p /mnt/root mount --bind /root /mnt/root fi + + # + # prepare nix store path + # + + mkdir -v -m 0755 -p /nix + if ! mount | grep -Fq "$rootpart on /mnt/nix type "; then + mkdir -p /mnt/nix + mount --bind /nix /mnt/nix + fi } prepare "$@" -- cgit v1.2.3