diff --git a/README b/README index b9c8ce5..4981168 100644 --- a/README +++ b/README @@ -2,18 +2,32 @@ parabola-arm-imagebuilder ========================= +image creation +-------------- + this is a collection of scripts creating parabola arm images for use with qemu with the original goal of building parabola arm packages on these machines. Development focus has since shifted towards creating parabola-arm release tarballs. -to create a new virtual machine, run +to create a new virtual machine image, run $> sudo ./create.sh -optionally, to create a new virtual machine with a packaging environment, run: - $> DEVSETUP=1 sudo ./create.sh +by default, the creation script will perform a full bootstrap, installing an +archlinuxarm release tarball and migrating the installed system to parabola +in-place. This behaviour can be changed by setting the environment variable +NOBOOTSTRAP to 1: -the packaging environment setup script makes use of several files and packages + $> sudo NOBOOTSTRAP=1 ./create.sh + +In this case, a parabola arm release tarball is used instead. + +optionally, to create a new virtual machine with a packaging environment, set +the environment variable DEVSETUP to 1: + + $> sudo DEVSETUP=1 ./create.sh + +The packaging environment setup script makes use of several files and packages present on already setup parabola development machines. if your setup is different, you might have to modify src/stage3.sh accordingly. @@ -32,6 +46,9 @@ The scripts assume that the following programs are available and in $PATH: The scripts also assume that you like vim :) +virtual machine start +--------------------- + to open a shell into the created machine, run $> ./start.sh [path to created image] @@ -53,3 +70,21 @@ configured for passwordless sudo for the parabola user and the package tree and a build chroot are prepared. have fun. also check out the .bashrc of the parabola user in the created virtual machine, for batch build integration based on task-spooler. + +tarball creation +---------------- + +to create a tarball from the created vm image, run + + $> sudo ./make_tarball.sh [path to created image] + +the tarball creation script assumes to operate on an image *without* packaging +environment setup and will not perform additional cleanup operations if used on +the wrong image. Things that are cleaned up are: + + /root/.ssh + /etc/ssh/ssh_host_* + /etc/pacman.d/gnupg + /var/log/* + /var/cache/* + /lost+found diff --git a/create.sh b/create.sh index a089e2f..57dc735 100755 --- a/create.sh +++ b/create.sh @@ -30,6 +30,7 @@ die() { echo "$*" 1>&2 ; exit 1; } export OUTFILE="${OUTFILE:-armv7h.img}" export SIZE="${SIZE:-64G}" export ARCHTARBALL="${ARCHTARBALL:-ArchLinuxARM-armv7-latest.tar.gz}" +export PARABOLATARBALL="${PARABOLATARBALL:-ParabolaARM-armv7-latest.tar.gz}" export _builddir=build mkdir -p "$_builddir" @@ -40,12 +41,18 @@ export _outfile="$_builddir/$(basename "$OUTFILE")" # prepare the empty image ./src/stage0.sh -# FIXME: skip this step once parabola release images are available -# install a clean archlinuxarm in the empty image -./src/stage1.sh +if [ -z "${NOBOOTSTRAP:-}" ]; then + # install a clean archlinux-arm system in the empty image + wget -nc http://os.archlinuxarm.org/os/$ARCHTARBALL + TARBALL="$ARCHTARBALL" ./src/stage1.sh -# migrate the installed image to a clean parabola -./src/stage2.sh + # migrate the installed image to a clean parabola + ./src/stage2.sh +else + # install a clean parabola-arm system in the empty image + # FIXME: add download link for released parabola tarballs here + TARBALL="$PARABOLATARBALL" ./src/stage1.sh +fi # setup package development environment [ -n "${DEVSETUP:-}" ] && ./src/stage3.sh diff --git a/make_tarball.sh b/make_tarball.sh index 931a581..fb65d46 100755 --- a/make_tarball.sh +++ b/make_tarball.sh @@ -27,7 +27,8 @@ die() { echo "$*" 1>&2 ; exit 1; } _builddir=build mkdir -p "$_builddir" -_imagefile=$1 +_imagefile="$_builddir/$(basename "$1")" +cp $1 $_imagefile _rootdir="$_builddir"/root-$$ _loopdev=$(sudo losetup -f --show "$_imagefile") @@ -38,20 +39,29 @@ function cleanup { sudo umount ${_loopdev}p1 sudo umount ${_loopdev}p3 sudo losetup -d $_loopdev - rm -rf "$_rootdir" + rm -rf "$_rootdir" "$_imagefile" } trap cleanup ERR # mount the image mkdir -p "$_rootdir" -sudo mount -o ro ${_loopdev}p3 "$_rootdir" -sudo mount -o ro ${_loopdev}p1 "$_rootdir"/boot +sudo mount ${_loopdev}p3 "$_rootdir" +sudo mount ${_loopdev}p1 "$_rootdir"/boot +# clean the image +rm -fvr \ + "$_rootdir"/root/.ssh \ + "$_rootdir"/etc/ssh/ssh_host_* \ + "$_rootdir"/etc/pacman.d/gnupg \ + "$_rootdir"/var/log/* \ + "$_rootdir"/var/cache/* \ + "$_rootdir"/lost+found + +# create the tarball tar -czf ParabolaARM-armv7-$(date "+%Y-%m-%d").tar.gz -C "$_rootdir" . # cleanup sudo umount ${_loopdev}p1 sudo umount ${_loopdev}p3 sudo losetup -d $_loopdev -rm -rf "$_rootdir" - +rm -rf "$_rootdir" "$_imagefile" diff --git a/src/stage1.sh b/src/stage1.sh index 3de1f2c..d2380f6 100755 --- a/src/stage1.sh +++ b/src/stage1.sh @@ -37,9 +37,6 @@ function cleanup { } trap cleanup ERR -# fetch latest archlinuxarm tarball -wget -nc http://os.archlinuxarm.org/os/$ARCHTARBALL - # the following installation instructions are adapted from # https://archlinuxarm.org/platforms/armv7/arm/versatile-express @@ -62,7 +59,7 @@ mkdir -p "$_bootdir" mkdir -p "$_rootdir" mount ${_loopdev}p1 "$_bootdir" mount ${_loopdev}p3 "$_rootdir" -bsdtar -vxpf $ARCHTARBALL -C "$_rootdir" +bsdtar -vxpf $TARBALL -C "$_rootdir" sync # fill the boot partition and create fstab