eris/test-distributions

171 lines
4.4 KiB
Text
Raw Normal View History

#!/bin/bash
2017-06-01 01:03:39 +01:00
# Copyright (C) 2017 Andrew Hamilton. All rights reserved.
# Licensed under the Artistic License 2.0.
set -e
VIGIL_PATH=$(realpath $(dirname $0))
function mount_squashfs_iso {
mkdir iso && sudo mount -o loop $1 iso
mkdir lower && sudo mount -t squashfs iso/$2 lower
mkdir upper work $3 && sudo mount -t overlay \
-o lowerdir=lower,upperdir=upper,workdir=work overlay $3
}
function umount_squashfs_iso {
sudo umount $1 && sudo rm -rf upper work $1
sudo umount lower && rmdir lower
sudo umount iso && rmdir iso
}
function run_in_container {
CONTAINER=$1
shift
[ -f $CONTAINER ] && OPTION="--image" || OPTION="--directory"
sudo systemd-nspawn --quiet --chdir=/vigil --overlay=$VIGIL_PATH:/vigil \
$OPTION=$CONTAINER /bin/bash --login -c "$*"
}
function build_ubuntu {
sudo debootstrap --components=main,restricted,universe,multiverse \
zesty ubuntu.part
run_in_container ubuntu.part \
ln -sf /lib/systemd/resolv.conf /etc/resolv.conf
run_in_container ubuntu.part apt-get update
mv ubuntu.part ubuntu
}
function remove_ubuntu {
sudo rm -rf ubuntu
}
function build_fedora {
IMAGE="Fedora-Cloud-Base-25-1.3.x86_64.raw"
wget --continue "https://dl.fedoraproject.org/pub/fedora/linux/releases/25/CloudImages/x86_64/images/$IMAGE.xz"
unxz $IMAGE.xz
mv $IMAGE fedora
}
function remove_fedora {
sudo rm -rf fedora
}
function build_debian {
sudo debootstrap --components=main,contrib,non-free \
--include=sudo jessie debian.part
run_in_container debian.part apt-get update
mv debian.part debian
}
function remove_debian {
sudo rm -rf debian
}
2017-06-03 19:17:34 +01:00
ARCHLINUX_ISO="archlinux-2017.06.01-x86_64.iso"
function build_archlinux {
2017-06-03 19:17:34 +01:00
wget --continue "http://mirrors.kernel.org/archlinux/iso/2017.06.01/$ARCHLINUX_ISO"
mount_squashfs_iso $ARCHLINUX_ISO "arch/x86_64/airootfs.sfs" archlinux
run_in_container archlinux pacman-key --init
run_in_container archlinux pacman-key --populate archlinux
run_in_container archlinux pacman -Syyu --noconfirm
}
function remove_archlinux {
2017-06-03 19:17:34 +01:00
umount_squashfs_iso archlinux
rm $ARCHLINUX_ISO
}
OPENSUSE_ISO="openSUSE-Tumbleweed-GNOME-Live-x86_64-Current.iso"
function build_opensuse {
wget --continue "https://download.opensuse.org/tumbleweed/iso/$OPENSUSE_ISO"
mount_squashfs_iso $OPENSUSE_ISO \
"openSUSE-tumbleweed-livecd-gnome-read-only.x86_64-2.8.0" opensuse
}
function remove_opensuse {
umount_squashfs_iso opensuse
rm $OPENSUSE_ISO
}
PIXEL_ISO="2016-12-13-pixel-x86-jessie.iso"
function build_pixel {
wget --continue "http://downloads.raspberrypi.org/pixel_x86/images/pixel_x86-2016-12-13/$PIXEL_ISO"
mount_squashfs_iso $PIXEL_ISO live/filesystem.squashfs pixel
sudo rm pixel/etc/resolv.conf
echo "nameserver 127.0.0.53" | sudo dd of=pixel/etc/resolv.conf
run_in_container pixel apt-get update
}
function remove_pixel {
umount_squashfs_iso pixel
rm $PIXEL_ISO
}
2017-06-07 18:39:54 +01:00
function build_gentoo {
TAR_FILE="stage3-amd64-20170525.tar.bz2"
wget --continue "http://distfiles.gentoo.org/releases/amd64/autobuilds/20170525/$TAR_FILE"
mkdir -p gentoo.part
sudo tar --directory=gentoo.part -xjf $TAR_FILE
rm $TAR_FILE
run_in_container gentoo.part emerge --sync
run_in_container gentoo.part emerge sudo
mv gentoo.part gentoo
}
function remove_gentoo {
sudo rm -rf gentoo
}
[ $# -eq 0 ] && WORK_PATH=$(mktemp -d --suffix=-vigil) || WORK_PATH="$1"
sudo apt-get install -y systemd-container debootstrap xz-utils wget
cd $WORK_PATH
2017-06-07 18:39:54 +01:00
for DISTRIBUTION in ubuntu fedora debian archlinux opensuse pixel gentoo; do
if [ -e $DISTRIBUTION ]; then
echo "$DISTRIBUTION container already exists."
else
echo "Building $DISTRIBUTION container..."
build_$DISTRIBUTION
fi
echo "Installing vigil's dependencies in $DISTRIBUTION..."
run_in_container $DISTRIBUTION ./install-dependencies
echo "Installing vigil in $DISTRIBUTION..."
run_in_container $DISTRIBUTION sudo python3 setup.py install
echo "Testing executables are installed in $DISTRIBUTION..."
run_in_container $DISTRIBUTION ./tests/tools_test.py ExecutablesTestCase
echo "Running vigil in $DISTRIBUTION..."
run_in_container $DISTRIBUTION vigil --help
echo "Successfully installed vigil in $DISTRIBUTION."
echo "Removing $DISTRIBUTION container..."
remove_$DISTRIBUTION
done
rmdir $WORK_PATH
echo "Finished."