152 lines
4 KiB
Bash
Executable file
152 lines
4 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# 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
|
|
}
|
|
|
|
|
|
function build_archlinux {
|
|
ARCHIVE="archlinux-bootstrap-2017.05.01-x86_64.tar.gz"
|
|
wget --continue "http://mirrors.kernel.org/archlinux/iso/latest/$ARCHIVE"
|
|
tar -zxf $ARCHIVE
|
|
mv root.x86_64 archlinux.part
|
|
run_in_container archlinux.part pacman-key --init
|
|
run_in_container archlinux.part pacman-key --populate archlinux
|
|
echo "Server = http://mirror.rackspace.com/archlinux/\$repo/os/\$arch" > \
|
|
archlinux.part/etc/pacman.d/mirrorlist
|
|
run_in_container archlinux.part pacman -Syyu --noconfirm
|
|
run_in_container archlinux.part pacman -S --noconfirm sudo grep
|
|
rm $ARCHIVE
|
|
mv archlinux.part archlinux
|
|
}
|
|
|
|
|
|
function remove_archlinux {
|
|
sudo rm -rf archlinux
|
|
}
|
|
|
|
|
|
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
|
|
}
|
|
|
|
|
|
[ $# -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
|
|
for DISTRIBUTION in ubuntu fedora debian archlinux opensuse pixel; 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 "Testing executables are installed in $DISTRIBUTION..."
|
|
run_in_container $DISTRIBUTION ./tools_test.py ExecutablesTestCase
|
|
echo "Successfully installed vigil's dependencies in $DISTRIBUTION."
|
|
echo "Removing $DISTRIBUTION container..."
|
|
remove_$DISTRIBUTION
|
|
done
|
|
rmdir $WORK_PATH
|
|
echo "Finished."
|