From 60027586345230d07f2979ff27086a67c4abebc5 Mon Sep 17 00:00:00 2001 From: parazyd Date: Fri, 20 Jan 2017 14:21:00 +0100 Subject: [PATCH 01/19] simplify ssh setup --- config | 7 ++++--- zlibs/bootstrap | 1 + zlibs/helpers | 52 ++++++------------------------------------------- zlibs/sysconf | 31 +++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 49 deletions(-) diff --git a/config b/config index f7443e6..52c96aa 100644 --- a/config +++ b/config @@ -41,8 +41,8 @@ core_packages=( bzip2 curl less - vim-tiny - nano-tiny + vim + nano sysvinit ) @@ -54,8 +54,9 @@ base_packages=( sudo alsa-base alsa-utils - gawk + mawk tmux + screen openntpd wpasupplicant wireless-tools diff --git a/zlibs/bootstrap b/zlibs/bootstrap index 0570bc3..1b2a808 100644 --- a/zlibs/bootstrap +++ b/zlibs/bootstrap @@ -59,6 +59,7 @@ bootstrap_complete_base() { conf_print_networkifaces | sudo tee $strapdir/etc/network/interfaces conf_print_resolvconf | sudo tee $strapdir/etc/resolv.conf conf_print_sourceslist | sudo tee $strapdir/etc/apt/sources.list + conf_print_locales | sudo tee $strapdir/etc/profile.d/locales.sh ## write third-stage for chroot bootstrap_config_thirdstage | sudo tee $strapdir/thirdstage diff --git a/zlibs/helpers b/zlibs/helpers index 3925b1a..18a0aa5 100644 --- a/zlibs/helpers +++ b/zlibs/helpers @@ -177,52 +177,12 @@ enablessh() { req=(strapdir) ckreq || return 1 - cat < Date: Fri, 20 Jan 2017 15:09:27 +0100 Subject: [PATCH 02/19] remove functionality because zsh --- zlibs/helpers | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/zlibs/helpers b/zlibs/helpers index 18a0aa5..47b0a5b 100644 --- a/zlibs/helpers +++ b/zlibs/helpers @@ -112,7 +112,7 @@ qemu_install_user() { } dpkgdivert() { - fn dpkgdivert $@ + fn dpkgdivert "$@" req=(watdo werdo) local watdo="$1" local werdo="$2" @@ -211,25 +211,18 @@ chroot-script() { case "x$1" in x-d) - shift 1 - local scripts="$@" - - dpkgdivert on $strapdir - for i in $scripts; do - notice "chrooting to execute $i..." - sudo chmod +x $strapdir/$i - sudo -E chroot $strapdir /$i - done - dpkgdivert off $strapdir + local script="$2" + dpkgdivert on "$strapdir" + notice "chrooting to execute $script..." + sudo -E chmod +x "$strapdir/$script" || zerr + sudo -E chroot "$strapdir" "/$script" || zerr + dpkgdivert off "$strapdir" ;; *) - local scripts="$@" - - for i in $scripts; do - notice "chrooting to execute $i..." - sudo chmod +x $strapdir/$i - sudo -E chroot $strapdir /$i - done + local script="$1" + notice "chrooting to execute $script..." + sudo -E chmod +x "$strapdir/$script" || zerr + sudo -E chroot "$strapdir" "/$script" || zerr ;; esac } From d3cd80c6b9250cb430e98fb632d713e6306416b9 Mon Sep 17 00:00:00 2001 From: parazyd Date: Fri, 20 Jan 2017 15:29:44 +0100 Subject: [PATCH 03/19] add haveged as a default package --- config | 1 + 1 file changed, 1 insertion(+) diff --git a/config b/config index 52c96aa..5c80d35 100644 --- a/config +++ b/config @@ -66,6 +66,7 @@ base_packages=( zsh rsync git-core + haveged ) purge_packages=( From 904c4527ab7dde5665da5e4afe2aab04546fface Mon Sep 17 00:00:00 2001 From: parazyd Date: Fri, 20 Jan 2017 16:04:22 +0100 Subject: [PATCH 04/19] append to purge_packages --- config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config b/config index 5c80d35..9948b25 100644 --- a/config +++ b/config @@ -69,7 +69,7 @@ base_packages=( haveged ) -purge_packages=( +purge_packages+=( dbus nano ) From 162d058cf1611a16ef15c2b703292536720e7ac7 Mon Sep 17 00:00:00 2001 From: parazyd Date: Mon, 30 Jan 2017 16:32:07 +0100 Subject: [PATCH 05/19] upstream debugflags from arm-sdk --- libdevuansdk | 7 +++++++ zlibs/bootstrap | 28 ++++++++++++++-------------- zlibs/helpers | 24 +++++++++++++----------- zlibs/iso | 16 ++++++++-------- zlibs/sysconf | 2 ++ 5 files changed, 44 insertions(+), 33 deletions(-) diff --git a/libdevuansdk b/libdevuansdk index 6293971..45eacd2 100644 --- a/libdevuansdk +++ b/libdevuansdk @@ -32,4 +32,11 @@ source $LIBPATH/zlibs/sysconf vars+=(libdevuansdk_version) vars+=(LIBPATH) +if [[ $DEBUG -gt 0 ]]; then + cp="/bin/cp -v" +else + cp="/bin/cp" + setopt pushdsilent +fi + act "libdevuansdk v$libdevuansdk_version loaded" diff --git a/zlibs/bootstrap b/zlibs/bootstrap index 1b2a808..78fd649 100644 --- a/zlibs/bootstrap +++ b/zlibs/bootstrap @@ -52,18 +52,18 @@ bootstrap_complete_base() { ## write all system configuration notice "writing system configuration" - conf_print_debconf | sudo tee $strapdir/debconf.set - conf_print_fstab | sudo tee $strapdir/etc/fstab - conf_print_hostname | sudo tee $strapdir/etc/hostname - conf_print_hosts | sudo tee $strapdir/etc/hosts - conf_print_networkifaces | sudo tee $strapdir/etc/network/interfaces - conf_print_resolvconf | sudo tee $strapdir/etc/resolv.conf - conf_print_sourceslist | sudo tee $strapdir/etc/apt/sources.list - conf_print_locales | sudo tee $strapdir/etc/profile.d/locales.sh + conf_print_debconf | sudo tee $strapdir/debconf.set >/dev/null + conf_print_fstab | sudo tee $strapdir/etc/fstab >/dev/null + conf_print_hostname | sudo tee $strapdir/etc/hostname >/dev/null + conf_print_hosts | sudo tee $strapdir/etc/hosts >/dev/null + conf_print_networkifaces | sudo tee $strapdir/etc/network/interfaces >/dev/null + conf_print_resolvconf | sudo tee $strapdir/etc/resolv.conf >/dev/null + conf_print_sourceslist | sudo tee $strapdir/etc/apt/sources.list >/dev/null + conf_print_locales | sudo tee $strapdir/etc/profile.d/locales.sh >/dev/null ## write third-stage for chroot - bootstrap_config_thirdstage | sudo tee $strapdir/thirdstage - bootstrap_config_cleanup | sudo tee $strapdir/cleanup + bootstrap_config_thirdstage | sudo tee $strapdir/thirdstage >/dev/null + bootstrap_config_cleanup | sudo tee $strapdir/cleanup >/dev/null ## chroot into it and configure further ## debootstrap stage 3 @@ -129,7 +129,7 @@ bootstrap_tar_pack() { #for i in $custmodules;do sudo sed -i -e '/'$i'/d' $strapdir/etc/modules;done #[[ -n $inittab ]] && sudo sed -i -e '/'$inittab'/d' $strapdir/etc/inittab - cat </dev/null #!/bin/sh #apt-get --yes --force-yes purge ${extra_packages} apt-get --yes --force-yes autoremove @@ -170,7 +170,7 @@ bootstrap_tar_unpack() { sudo mkdir -p ${unpath}/{boot,dev,sys,proc} } - cat </dev/null #!/bin/sh apt-get update apt-get --yes --force-yes upgrade @@ -185,8 +185,8 @@ EOF devprocsys umount $strapdir ## below typically used in arm-sdk - [[ -z $inittab ]] || { print $inittab | sudo tee -a $strapdir/etc/inittab } + [[ -z $inittab ]] || { print $inittab | sudo tee -a $strapdir/etc/inittab >/dev/null } for i in $custmodules; do - print $i | sudo tee -a $strapdir/etc/modules + print $i | sudo tee -a $strapdir/etc/modules >/dev/null done } diff --git a/zlibs/helpers b/zlibs/helpers index 47b0a5b..772891f 100644 --- a/zlibs/helpers +++ b/zlibs/helpers @@ -119,7 +119,7 @@ dpkgdivert() { ckreq || return 1 if [[ $watdo = on ]]; then - cat </dev/null #!/bin/sh dpkg-divert --add --local \ --divert /usr/sbin/invoke-rc.d.chroot \ @@ -130,7 +130,7 @@ chmod +x /usr/sbin/policy-rc.d rm -f /dpkgdivert EOF elif [[ $watdo = off ]]; then - cat </dev/null #!/bin/sh rm -f /usr/sbin/policy-rc.d rm -f /usr/sbin/invoke-rc.d @@ -148,7 +148,7 @@ enableserv() { req=(service strapdir) ckreq || return 1 - cat </dev/null #!/bin/sh update-rc.d ${service} enable EOF @@ -163,7 +163,7 @@ disableserv() { req=(service strapdir) ckreq || return 1 - cat </dev/null #!/bin/sh update-rc.d ${service} disable EOF @@ -178,11 +178,13 @@ enablessh() { ckreq || return 1 # "hardened" ssh - sudo -E sed -i $strapdir/etc/sshd_config \ - -e 's/PermitRootLogin .*/PermitRootLogin yes/' \ - -e 's/HostKey .*dsa_key/#&/' \ - -e 's/X11Forwarding .*/X11Forwarding no/' \ - -e 's/UsePAM .*/UsePAM no/' + #sudo -E sed -i $strapdir/etc/sshd_config \ + #-e 's/PermitRootLogin .*/PermitRootLogin yes/' \ + #-e 's/HostKey .*dsa_key/#&/' \ + #-e 's/X11Forwarding .*/X11Forwarding no/' \ + #-e 's/UsePAM .*/UsePAM no/' + + return 0 } install-custdebs() { @@ -191,9 +193,9 @@ install-custdebs() { ckreq || return 1 sudo mkdir -p $strapdir/debs - sudo cp $CPVERBOSE -f $R/extra/custom-packages/*.deb $strapdir/debs/ + sudo ${=cp} $R/extra/custom-packages/*.deb $strapdir/debs/ - cat </dev/null #!/bin/sh for deb in /debs/*.deb; do dpkg -i \$deb diff --git a/zlibs/iso b/zlibs/iso index f3b6e8a..c6db28c 100644 --- a/zlibs/iso +++ b/zlibs/iso @@ -28,7 +28,7 @@ iso_prepare_strap() { notice "preparing strapdir for livecd" - cat </dev/null #!/bin/sh apt-get update apt-get --yes --force-yes install dialog live-boot @@ -50,12 +50,12 @@ iso_setup_isolinux() { pushd $workdir sudo mkdir -p binary/{live,isolinux} act "copying kernel and initrd" - sudo cp $CPVERBOSE $strapdir/boot/vmlinuz* binary/live/vmlinuz - sudo cp $CPVERBOSE $strapdir/boot/initrd* binary/live/initrd + sudo ${=cp} $strapdir/boot/vmlinuz* binary/live/vmlinuz + sudo ${=cp} $strapdir/boot/initrd* binary/live/initrd - sudo cp $CPVERBOSE /usr/share/live/build/bootloaders/isolinux/isolinux.bin \ + sudo ${=cp} /usr/share/live/build/bootloaders/isolinux/isolinux.bin \ binary/isolinux - sudo cp $CPVERBOSE /usr/share/live/build/bootloaders/isolinux/*.c32 \ + sudo ${=cp} /usr/share/live/build/bootloaders/isolinux/*.c32 \ binary/isolinux popd } @@ -66,7 +66,7 @@ iso_write_isolinux_cfg() { ckreq || return 1 notice "writing isolinux configuration" - cat </dev/null ui vesamenu.c32 prompt 0 menu title ${os} boot menu @@ -90,7 +90,7 @@ iso_squash_strap() { notice "creating squashfs out of strapdir" pushd $workdir - sudo mksquashfs $strapdir binary/live/filesystem.squashfs -comp xz -e boot + sudo mksquashfs $strapdir binary/live/filesystem.squashfs -comp xz -e boot popd } @@ -121,7 +121,7 @@ iso_setup_installer() { fn iso_setup_installer notice "setting up devuan-installer" - sudo cp $CPVERBOSE $R/extra/installer/* $strapdir/ + sudo ${=cp} $R/extra/installer/* $strapdir/ ## TODO: init to script } diff --git a/zlibs/sysconf b/zlibs/sysconf index 6d1303c..9ea55b3 100644 --- a/zlibs/sysconf +++ b/zlibs/sysconf @@ -119,11 +119,13 @@ conf_print_sourceslist() { deb ${mirror} ${release} ${section} deb ${mirror} ${release}-updates ${section} deb ${mirror} ${release}-security ${section} +#deb ${mirror} ${release}-backports ${section} ## source repositories #deb-src ${mirror} ${release} ${section} #deb-src ${mirror} ${release}-updates ${section} #deb-src ${mirror} ${release}-security ${section} +#deb-src ${mirror} ${release}-backports ${section} EOF } From 9bc8bf9d2e335362222f1928eda0608b203f4f21 Mon Sep 17 00:00:00 2001 From: parazyd Date: Mon, 30 Jan 2017 17:24:55 +0100 Subject: [PATCH 06/19] rsync a bit differently --- libdevuansdk | 2 +- zlibs/imaging | 20 +++++++++++--------- zlibs/rsync | 1 + 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/libdevuansdk b/libdevuansdk index 45eacd2..3b34111 100644 --- a/libdevuansdk +++ b/libdevuansdk @@ -18,7 +18,7 @@ # along with this source code. If not, see . libdevuansdk_version="0.3" -LIBPATH=${LIBPATH:-`dirname $0`} +LIBPATH=${LIBPATH:-$(dirname $0)} source $LIBPATH/config source $LIBPATH/zlibs/bootstrap diff --git a/zlibs/imaging b/zlibs/imaging index 2e3c5b1..7c776b8 100644 --- a/zlibs/imaging +++ b/zlibs/imaging @@ -132,11 +132,14 @@ image_raw_mount() { req=(workdir bootpart rootpart) ckreq || return 1 - mkdir -p $workdir/boot $workdir/root - if [[ $parted_type = dos ]]; then - sudo mount $bootpart $workdir/boot && act "mounted boot partition" || zerr - fi - sudo mount $rootpart $workdir/root && act "mounted root partition" || zerr + #mkdir -p $workdir/boot $workdir/root + #sudo mount $bootpart $workdir/boot && act "mounted boot partition" || zerr + #sudo mount $rootpart $workdir/root && act "mounted root partition" || zerr + + mkdir -p $workdir/mnt + sudo mount $rootpart $workdir/mnt && act "mounted root partition" || zerr + sudo mkdir $workdir/mnt/boot + sudo mount $bootpart $workdir/mnt/boot && act "mounted boot partition" || zerr } image_raw_umount() { @@ -144,8 +147,7 @@ image_raw_umount() { req=(workdir bootpart rootpart) ckreq || return 1 - if [[ $parted_type = dos ]]; then - sudo umount $workdir/boot && act "unmounted boot partition" || zerr - fi - sudo umount $workdir/root && act "unmounted root partition" || zerr + sudo umount $workdir/mnt/boot && act "unmounted boot partition" || zerr + sleep 1 + sudo umount $workdir/mnt && act "unmounted root partition" || zerr } diff --git a/zlibs/rsync b/zlibs/rsync index ef2e56e..4469948 100644 --- a/zlibs/rsync +++ b/zlibs/rsync @@ -26,6 +26,7 @@ rsync_to_raw_image() { notice "rsyncing strapdir to raw image..." image_raw_mount + sleep 1 silly pushd $strapdir From 845a6286a840afb747f3fa234b7f17fcdc50111c Mon Sep 17 00:00:00 2001 From: parazyd Date: Mon, 30 Jan 2017 17:59:22 +0100 Subject: [PATCH 07/19] rsync all at once now --- zlibs/rsync | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/zlibs/rsync b/zlibs/rsync index 4469948..6d8f90b 100644 --- a/zlibs/rsync +++ b/zlibs/rsync @@ -30,20 +30,13 @@ rsync_to_raw_image() { silly pushd $strapdir - sudo rm -f .done - sudo rsync -HPavz -q --exclude={./boot} ./* $workdir/root || { + #sudo rm -f .done + + sudo rsync -HPavz -q ./* $workdir/mnt || { image_raw_umount - die "not enough space. report a bug please" + die "not enough space, please report a bug" zerr } - - if [[ $parted_type = dos ]]; then - sudo rsync -HPavz -q ./boot/* $workdir/boot || { - image_raw_umount - die "not enough space. report a bug please" - zerr - } - fi popd image_raw_umount From 94e77b5ebf0539f085359d4be1385d40fb84fc03 Mon Sep 17 00:00:00 2001 From: parazyd Date: Wed, 1 Feb 2017 17:53:38 +0100 Subject: [PATCH 08/19] latest progress --- libdevuansdk | 4 ++++ zlibs/helpers | 15 --------------- zlibs/sysconf | 22 ---------------------- 3 files changed, 4 insertions(+), 37 deletions(-) diff --git a/libdevuansdk b/libdevuansdk index 3b34111..3dc9a17 100644 --- a/libdevuansdk +++ b/libdevuansdk @@ -34,9 +34,13 @@ vars+=(LIBPATH) if [[ $DEBUG -gt 0 ]]; then cp="/bin/cp -v" + mkdir="/bin/mkdir -v" else cp="/bin/cp" + mkdir="/bin/mkdir" setopt pushdsilent fi +sudo="sudo -E" + act "libdevuansdk v$libdevuansdk_version loaded" diff --git a/zlibs/helpers b/zlibs/helpers index 772891f..a585fe7 100644 --- a/zlibs/helpers +++ b/zlibs/helpers @@ -172,21 +172,6 @@ EOF chroot-script disserv } -enablessh() { - fn enablessh - req=(strapdir) - ckreq || return 1 - - # "hardened" ssh - #sudo -E sed -i $strapdir/etc/sshd_config \ - #-e 's/PermitRootLogin .*/PermitRootLogin yes/' \ - #-e 's/HostKey .*dsa_key/#&/' \ - #-e 's/X11Forwarding .*/X11Forwarding no/' \ - #-e 's/UsePAM .*/UsePAM no/' - - return 0 -} - install-custdebs() { fn install-custdebs req=(R strapdir) diff --git a/zlibs/sysconf b/zlibs/sysconf index 9ea55b3..e2af917 100644 --- a/zlibs/sysconf +++ b/zlibs/sysconf @@ -137,25 +137,3 @@ export LANG=C export LC_ALL=C EOF } - -conf_print_rclocal() { - fn conf_print_rclocal - - cat < Date: Mon, 13 Feb 2017 13:05:23 +0100 Subject: [PATCH 09/19] fix cleanup in bootstrap --- zlibs/bootstrap | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zlibs/bootstrap b/zlibs/bootstrap index 78fd649..538f8e7 100644 --- a/zlibs/bootstrap +++ b/zlibs/bootstrap @@ -71,7 +71,8 @@ bootstrap_complete_base() { devprocsys mount $strapdir || zerr - chroot-script -d thirdstage cleanup || zerr + chroot-script -d thirdstage || zerr + chroot-script -d cleanup || zerr sleep 1 devprocsys umount $strapdir || zerr From 056c2d943fb7b304ed5504fe7b86b8830423bb26 Mon Sep 17 00:00:00 2001 From: parazyd Date: Tue, 14 Feb 2017 17:23:23 +0100 Subject: [PATCH 10/19] initial import of vm/vagrant code --- config | 6 ++ libdevuansdk | 1 + zlibs/bootstrap | 5 +- zlibs/helpers | 31 ++++++++- zlibs/imaging | 25 ++++++- zlibs/sysconf | 3 + zlibs/vm | 171 ++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 236 insertions(+), 6 deletions(-) create mode 100644 zlibs/vm diff --git a/config b/config index 9948b25..eeec0ba 100644 --- a/config +++ b/config @@ -28,6 +28,8 @@ version="1.0.0-beta2" mirror="http://auto.mirror.devuan.org/merged" section="main" +isomirror="http://files.devuan.org/devuan_jessie_beta" + image_name="${os}_${release}_${version}_${arch}" [[ -n $blend_name ]] && image_name="${image_name}_${blend_name}" [[ -n $device_name ]] && image_name="${image_name}_${device_name}" @@ -72,4 +74,8 @@ base_packages=( purge_packages+=( dbus nano + exim4 + exim4-base + exim4-config + reportbug ) diff --git a/libdevuansdk b/libdevuansdk index 3dc9a17..73d9a10 100644 --- a/libdevuansdk +++ b/libdevuansdk @@ -28,6 +28,7 @@ source $LIBPATH/zlibs/iso source $LIBPATH/zlibs/kernel source $LIBPATH/zlibs/rsync source $LIBPATH/zlibs/sysconf +source $LIBPATH/zlibs/vm vars+=(libdevuansdk_version) vars+=(LIBPATH) diff --git a/zlibs/bootstrap b/zlibs/bootstrap index 538f8e7..2c21c3b 100644 --- a/zlibs/bootstrap +++ b/zlibs/bootstrap @@ -88,8 +88,7 @@ bootstrap_config_cleanup() { #!/bin/sh rm -f /debconf.set rm -f /thirdstage -rm -f /etc/ssh/*_key -rm -f /etc/ssh/*.pub +rm -f /etc/ssh/ssh_host_* rm -f /root/.bash_history #rm -f /usr/bin/qemu-arm-static ## our file for which we check the bootstrap is complete @@ -186,7 +185,7 @@ EOF devprocsys umount $strapdir ## below typically used in arm-sdk - [[ -z $inittab ]] || { print $inittab | sudo tee -a $strapdir/etc/inittab >/dev/null } + [[ -n "$inittab" ]] && { print $inittab | sudo tee -a $strapdir/etc/inittab >/dev/null } for i in $custmodules; do print $i | sudo tee -a $strapdir/etc/modules >/dev/null done diff --git a/zlibs/helpers b/zlibs/helpers index a585fe7..8dbf885 100644 --- a/zlibs/helpers +++ b/zlibs/helpers @@ -1,5 +1,5 @@ #!/usr/bin/env zsh -# Copyright (c) 2016 Dyne.org Foundation +# Copyright (c) 2016-2017 Dyne.org Foundation # libdevuansdk is maintained by Ivan J. # # This file is part of libdevuansdk @@ -58,12 +58,39 @@ build_iso_dist() { build_kernel_${arch} || zerr iso_setup_isolinux || zerr iso_write_isolinux_cfg || zerr - [[ $INSTALLER = 1 ]] && iso_setup_installer + [[ $INSTALLER = 1 ]] && iso_setup_installer || zerr [[ $BLEND = 1 ]] && blend_postinst || zerr iso_squash_strap || zerr iso_xorriso_build || zerr } +build_vagrant_dist() { + fn build_vagrant_dist + req=(workdir strapdir os arch) + ckreq || return 1 + + notice "building complete vagrant image" + + image_raw_as_strapdir || zerr + bootstrap_complete_base || zerr + vm_inject_overrides || zerr + [[ $BLEND = 1 ]] && blend_preinst || zerr + vm_setup_grub || zerr + [[ $BLEND = 1 ]] && blend_postinst || zerr + vm_umount_raw || zerr + vm_vbox_setup || zerr + vm_vagrant_package || zerr + vm_pack_dist || zerr +} + +getfield() { + fn getfield $* + + echo "$1" | grep "^$2=" | \ + sed -e 's:.*=\(.*\)$:\1:g' | \ + sed -e 's:^"\(.*\)"$:\1:g' +} + devprocsys() { fn devprocsys "$@" local watdo="$1" diff --git a/zlibs/imaging b/zlibs/imaging index 7c776b8..4306380 100644 --- a/zlibs/imaging +++ b/zlibs/imaging @@ -19,7 +19,7 @@ ## imagine images -vars+=(image_name bootpart rootpart) +vars+=(image_name bootpart rootpart loopdevice) image_prepare_raw() { fn image_prepare_raw @@ -151,3 +151,26 @@ image_raw_umount() { sleep 1 sudo umount $workdir/mnt && act "unmounted root partition" || zerr } + +image_raw_as_strapdir() { + fn image_raw_as_strapdir + req=(workdir strapdir) + ckreq || return 1 + + pushd "$workdir" + + notice "creating raw image of $size MB" + sudo -E rm -f base.raw + sudo -E qemu-img create -f raw base.raw + notice "partitioning" + sudo -E parted base.raw mktable msdos + sudo -E parted base.raw mkpart primary '0%' '100%' + loopdevice=$(losetup --find) + sudo -E losetup -P $loopdevice base.raw + sudo -E mkfs.ext4 ${loopdevice}p1 + + notice "mounting raw image to strapdir" + sudo mount ${loopdevice}p1 $strapdir + + popd +} diff --git a/zlibs/sysconf b/zlibs/sysconf index e2af917..a49c216 100644 --- a/zlibs/sysconf +++ b/zlibs/sysconf @@ -84,6 +84,9 @@ iface lo inet loopback auto eth0 iface eth0 inet dhcp +#auto eth1 +#iface eth1 inet dhcp + # auto eth0 # iface eth0 inet static # address 10.0.1.10 diff --git a/zlibs/vm b/zlibs/vm new file mode 100644 index 0000000..3ebd7ea --- /dev/null +++ b/zlibs/vm @@ -0,0 +1,171 @@ +#!/usr/bin/env zsh +# Copyright (c) 2016-2017 Dyne.org Foundation +# libdevuansdk is maintained by Ivan J. +# +# This file is part of libdevuansdk +# +# This source code is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this source code. If not, see . + +## ma baker +# +# deps: +# virtualbox +# qemu-kvm + +vars+=(vmname) + +vm_inject_overrides() { + fn vm_inject_overrides + req=(strapdir) + ckreq || return 1 + + notice "injecting rootfs overrides" + cat </dev/null +#!/bin/sh +# rc.local for base images + +[ -f /etc/ssh/ssh_host_rsa_key.pub ] || dpkg-reconfigure openssh-server + +exit 0 +EOF + sudo -E chmod +x $strapdir/etc/rc.local + + print "rootfs / rootfs rw 0 0" | sudo -E tee ${strapdir}/etc/fstab >/dev/null + + sudo sed -i -e 's/without-password/yes/' ${strapdir}/etc/ssh/sshd_config || zerr +} + +vm_setup_grub() { + fn vm_setup_grub + req=(strapdir loopdevice) + ckreq || return 1 + + notice "setting up grub" + cat </dev/null +#!/bin/sh +export DEBIAN_FRONTEND=noninteractive +apt-get --yes --force-yes install linux-image-amd64 grub-pc +sed -e 's:GRUB_TIMEOUT=5:GRUB_TIMEOUT=1:' -i /etc/default/grub +update-grub +grub-install --no-floppy --recheck --modules="biosdisk part_msdos" ${loopdevice} +sed -e 's:${loopdevice}p1:/dev/sda1:g' -i /boot/grub/grub.cfg +sync +sync +sync +EOF + devprocsys mount $strapdir || zerr + chroot-script -d setupgrub || zerr + devprocsys umount $strapdir || zerr +} + +vm_umount_raw() { + fn vm_umount_raw + req=(strapdir loopdevice) + ckreq || return 1 + + notice "remounting raw image" + sudo -E mount -o remount,ro $strapdir || zerr + sync + notice "flushing bytes and buffers" + sudo blockdev --flushbufs $loopdevice || zerr + sudo python -c 'import os; os.fsync(open("'${loopdevice}'", "r+b"))' || zerr + notice "unmounting raw image from strapdir" + silly sleep 1 + sudo umount $strapdir || zerr + sudo rmdir $strapdir || zerr + + sync + silly sleep 1 + notice "cleaning up" + sudo losetup -d ${loopdevice} || zerr + silly sleep 1 +} + +vm_vbox_setup() { + fn vm_vbox_setup + req=(workdir) + ckreq || return 1 + + notice "converting raw image to vdi" + pushd $workdir + sudo -E qemu-img convert -f raw -O vdi base.raw base.vdi || zerr + sudo -E chown $USER base.vdi || zerr + VBoxManage modifyhd base.vdi --type immutable --compact || zerr + act "removing old raw image" + rm -f base.raw + + vmname="${os}-${release}-prevagrant" + notice "importing base.vdi to a VBox" + act "creating vm" + VBoxManage createvm --name "$vmname" --ostype Debian_64 --register || zerr + act "setting up ram and group" + VBoxManage modifyvm "$vmname" --memory 256 --groups /personalcloud || zerr + act "setting up storage" + VBoxManage storagectl "$vmname" --name "IDE Controller" --add ide || zerr + act "attaching storage" + VBoxManage storageattach "$vmname" --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium base.vdi || zerr + + vminfo="$(VBoxManage showvminfo "$vmname" --machinereadable)" + diskuuid="$(getfield "$vminfo" '"IDE Controller-ImageUUID-0-0"')" + + act "autoreset off on storage" + VBoxManage modifyhd "$diskuuid" --autoreset off || zerr + + act "setting up nat network" + VBoxManage modifyvm "$vmname" --nic1 nat || zerr + popd +} + +vm_vagrant_package() { + fn vm_vagrant_package + req=(workdir vmname) + ckreq || return 1 + + notice "packaging a vagrant box" + + pushd $workdir + act "creating vagrantfile" + cat < Vagrantfile +Vagrant.configure("2") do |config| + config.vm.box = "devuanbox.box" + config.ssh.username = "root" + config.ssh.password = "toor" + config.vm.guest = :debian +end +EOF + act "creating metadata.json" + cat < metadata.json +{ + "provider": "virtualbox" +} +EOF + notice "actually packaging..." + vagrant package --base "$vmname" --outbut devuanbox.box --include metadata.json --vagrantfile Vagrantfile || zerr + popd +} + +vm_pack_dist() { + fn vm_pack_dist + req=(workdir) + ckreq || return 1 + + notice "packing up dist" + mkdir -p $R/dist + mv $workdir/devuanbox.box $R/dist/ + act "calculating sha256sum..." + silly + sha256sum $R/dist/devuanbox.box > $R/dist/devuanbox.box.sha + notice "done!" + ls -1 $R/dist +} From a4cf35c5b6082405346a43ac5cda48eeebaabd4a Mon Sep 17 00:00:00 2001 From: parazyd Date: Tue, 14 Feb 2017 18:46:21 +0100 Subject: [PATCH 11/19] apply fixes for a valid build --- zlibs/bootstrap | 2 +- zlibs/imaging | 4 ++-- zlibs/vm | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/zlibs/bootstrap b/zlibs/bootstrap index 2c21c3b..f1a70d2 100644 --- a/zlibs/bootstrap +++ b/zlibs/bootstrap @@ -188,5 +188,5 @@ EOF [[ -n "$inittab" ]] && { print $inittab | sudo tee -a $strapdir/etc/inittab >/dev/null } for i in $custmodules; do print $i | sudo tee -a $strapdir/etc/modules >/dev/null - done + done || return 0 } diff --git a/zlibs/imaging b/zlibs/imaging index 4306380..6e1bc2a 100644 --- a/zlibs/imaging +++ b/zlibs/imaging @@ -154,14 +154,14 @@ image_raw_umount() { image_raw_as_strapdir() { fn image_raw_as_strapdir - req=(workdir strapdir) + req=(workdir strapdir size) ckreq || return 1 pushd "$workdir" notice "creating raw image of $size MB" sudo -E rm -f base.raw - sudo -E qemu-img create -f raw base.raw + sudo -E qemu-img create -f raw base.raw ${size}M notice "partitioning" sudo -E parted base.raw mktable msdos sudo -E parted base.raw mkpart primary '0%' '100%' diff --git a/zlibs/vm b/zlibs/vm index 3ebd7ea..97218d3 100644 --- a/zlibs/vm +++ b/zlibs/vm @@ -151,7 +151,7 @@ EOF } EOF notice "actually packaging..." - vagrant package --base "$vmname" --outbut devuanbox.box --include metadata.json --vagrantfile Vagrantfile || zerr + vagrant package --base "$vmname" --output devuanbox.box --include metadata.json --vagrantfile Vagrantfile || zerr popd } From f002c12258492bf20d5aef25c68de59b3fdb4500 Mon Sep 17 00:00:00 2001 From: parazyd Date: Tue, 14 Feb 2017 20:03:12 +0100 Subject: [PATCH 12/19] refresh libdevuansdk code --- README.md | 2 +- config | 16 ++++++------- libdevuansdk | 15 +++--------- zlibs/bootstrap | 64 ++++++++++++++++--------------------------------- zlibs/helpers | 18 +++++++------- zlibs/imaging | 18 ++++++-------- zlibs/iso | 13 +++++----- zlibs/kernel | 6 ++--- zlibs/rsync | 2 +- zlibs/sysconf | 2 +- zlibs/vm | 27 +++++++++------------ 11 files changed, 68 insertions(+), 115 deletions(-) diff --git a/README.md b/README.md index 3f0dcd7..3e7c53e 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Devuan's SDK was originally conceived during a period of residency at the Schumacher college in Dartington, UK. Greatly inspired by the laborious and mindful atmosphere of its wonderful premises. -The Devuan SDK is Copyright (c) 2015-2016 by the Dyne.org Foundation +The Devuan SDK is Copyright (c) 2015-2017 by the Dyne.org Foundation Devuan SDK components are designed, written and maintained by: diff --git a/config b/config index eeec0ba..c57d377 100644 --- a/config +++ b/config @@ -1,5 +1,5 @@ #!/usr/bin/env zsh -# Copyright (c) 2016 Dyne.org Foundation +# Copyright (c) 2016-2017 Dyne.org Foundation # libdevuansdk is maintained by Ivan J. # # This file is part of libdevuansdk @@ -19,7 +19,7 @@ ## libdevuansdk configuration -vars+=(release version mirror section blend_name) +vars+=(release version mirror section blend_name image_name vm_name) arrs+=(core_packages base_packages purge_packages blend_packages) os="devuan" @@ -28,12 +28,15 @@ version="1.0.0-beta2" mirror="http://auto.mirror.devuan.org/merged" section="main" -isomirror="http://files.devuan.org/devuan_jessie_beta" - image_name="${os}_${release}_${version}_${arch}" [[ -n $blend_name ]] && image_name="${image_name}_${blend_name}" [[ -n $device_name ]] && image_name="${image_name}_${device_name}" +vm_name="${os}_${release}_${version}_${arch}_vagrant" +[[ -n $blend_name ]] && vm_name="${image_name}_${blend_name}" + +rootcredentials="root:toor" + core_packages=( devuan-keyring debian-keyring @@ -73,9 +76,4 @@ base_packages=( purge_packages+=( dbus - nano - exim4 - exim4-base - exim4-config - reportbug ) diff --git a/libdevuansdk b/libdevuansdk index 73d9a10..1851096 100644 --- a/libdevuansdk +++ b/libdevuansdk @@ -1,5 +1,5 @@ #!/usr/bin/env zsh -# Copyright (c) 2016 Dyne.org Foundation +# Copyright (c) 2016-2017 Dyne.org Foundation # libdevuansdk maintained by Ivan J. # # This file is part of libdevuansdk @@ -17,7 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this source code. If not, see . -libdevuansdk_version="0.3" +libdevuansdk_version="0.4" LIBPATH=${LIBPATH:-$(dirname $0)} source $LIBPATH/config @@ -33,15 +33,6 @@ source $LIBPATH/zlibs/vm vars+=(libdevuansdk_version) vars+=(LIBPATH) -if [[ $DEBUG -gt 0 ]]; then - cp="/bin/cp -v" - mkdir="/bin/mkdir -v" -else - cp="/bin/cp" - mkdir="/bin/mkdir" - setopt pushdsilent -fi - -sudo="sudo -E" +setopt pushdsilent act "libdevuansdk v$libdevuansdk_version loaded" diff --git a/zlibs/bootstrap b/zlibs/bootstrap index f1a70d2..b772888 100644 --- a/zlibs/bootstrap +++ b/zlibs/bootstrap @@ -1,5 +1,5 @@ #!/usr/bin/env zsh -# Copyright (c) 2016 Dyne.org Foundation +# Copyright (c) 2016-2017 Dyne.org Foundation # libdevuansdk maintained by Ivan J. # # This file is part of libdevuansdk @@ -52,18 +52,17 @@ bootstrap_complete_base() { ## write all system configuration notice "writing system configuration" - conf_print_debconf | sudo tee $strapdir/debconf.set >/dev/null - conf_print_fstab | sudo tee $strapdir/etc/fstab >/dev/null - conf_print_hostname | sudo tee $strapdir/etc/hostname >/dev/null - conf_print_hosts | sudo tee $strapdir/etc/hosts >/dev/null - conf_print_networkifaces | sudo tee $strapdir/etc/network/interfaces >/dev/null - conf_print_resolvconf | sudo tee $strapdir/etc/resolv.conf >/dev/null - conf_print_sourceslist | sudo tee $strapdir/etc/apt/sources.list >/dev/null - conf_print_locales | sudo tee $strapdir/etc/profile.d/locales.sh >/dev/null + conf_print_debconf | sudo tee $strapdir/debconf.set >/dev/null + conf_print_fstab | sudo tee $strapdir/etc/fstab >/dev/null + conf_print_hostname | sudo tee $strapdir/etc/hostname >/dev/null + conf_print_hosts | sudo tee $strapdir/etc/hosts >/dev/null + conf_print_netifaces | sudo tee $strapdir/etc/network/interfaces >/dev/null + conf_print_resolvconf | sudo tee $strapdir/etc/resolv.conf >/dev/null + conf_print_sourceslist | sudo tee $strapdir/etc/apt/sources.list >/dev/null + conf_print_locales | sudo tee $strapdir/etc/profile.d/locales.sh >/dev/null ## write third-stage for chroot bootstrap_config_thirdstage | sudo tee $strapdir/thirdstage >/dev/null - bootstrap_config_cleanup | sudo tee $strapdir/cleanup >/dev/null ## chroot into it and configure further ## debootstrap stage 3 @@ -72,7 +71,6 @@ bootstrap_complete_base() { devprocsys mount $strapdir || zerr chroot-script -d thirdstage || zerr - chroot-script -d cleanup || zerr sleep 1 devprocsys umount $strapdir || zerr @@ -81,22 +79,6 @@ bootstrap_complete_base() { bootstrap_tar_unpack $strapdir || zerr } -bootstrap_config_cleanup() { - fn config_cleanup - - cat << EOF -#!/bin/sh -rm -f /debconf.set -rm -f /thirdstage -rm -f /etc/ssh/ssh_host_* -rm -f /root/.bash_history -#rm -f /usr/bin/qemu-arm-static -## our file for which we check the bootstrap is complete -echo "1" > .done -rm -f /cleanup -EOF -} - bootstrap_config_thirdstage() { fn bootstrap_config_thirdstage req=(core_packages base_packages) @@ -107,7 +89,7 @@ bootstrap_config_thirdstage() { apt-get update debconf-set-selections /debconf.set -echo "root:toor" | chpasswd +echo "${rootcredentials}" | chpasswd sed -i -e 's/KERNEL\!=\"eth\*|/KERNEL\!=\"/' \ /lib/udev/rules.d/75-persistent-net-generator.rules rm -f /etc/udev/rules.d/70-persistent-net.rules @@ -118,6 +100,11 @@ apt-get --yes --force-yes install ${base_packages} apt-get --yes --force-yes purge ${purge_packages} apt-get --yes --force-yes autoremove apt-get clean + +rm -f /debconf.set +rm -f /etc/ssh/ssh_host_* +rm -f /root/.bash_history +echo "1" > .keep EOF } @@ -126,19 +113,6 @@ bootstrap_tar_pack() { req=(bootstrap_tgz) ckreq || return 1 - #for i in $custmodules;do sudo sed -i -e '/'$i'/d' $strapdir/etc/modules;done - #[[ -n $inittab ]] && sudo sed -i -e '/'$inittab'/d' $strapdir/etc/inittab - - cat </dev/null -#!/bin/sh -#apt-get --yes --force-yes purge ${extra_packages} -apt-get --yes --force-yes autoremove -apt-get clean -rm -f /prepack -EOF - - chroot-script prepack || zerr - local _dest=$(dirname $bootstrap_tgz) if [[ -f $bootstrap_tgz ]]; then @@ -163,12 +137,15 @@ bootstrap_tar_unpack() { req=(unpath bootstrap_tgz) ckreq || return 1 - [[ -f ${unpath}/.done ]] || { + if [[ -f ${unpath}/.keep ]]; then mkdir -p ${unpath} silly sudo tar xfp $bootstrap_tgz -C ${unpath} sudo mkdir -p ${unpath}/{boot,dev,sys,proc} - } + else + error "no .keep file found. exiting..." + zerr + fi cat </dev/null #!/bin/sh @@ -177,7 +154,6 @@ apt-get --yes --force-yes upgrade apt-get --yes --force-yes install ${extra_packages} apt-get --yes --force-yes autoremove apt-get clean -rm -f /postunpack EOF devprocsys mount $strapdir diff --git a/zlibs/helpers b/zlibs/helpers index 8dbf885..857b559 100644 --- a/zlibs/helpers +++ b/zlibs/helpers @@ -51,6 +51,7 @@ build_iso_dist() { ckreq || return 1 notice "building complete iso image" + ## XXX: TODO: upstream existing heads code bootstrap_complete_base || zerr [[ $BLEND = 1 ]] && blend_preinst || zerr @@ -85,10 +86,7 @@ build_vagrant_dist() { getfield() { fn getfield $* - - echo "$1" | grep "^$2=" | \ - sed -e 's:.*=\(.*\)$:\1:g' | \ - sed -e 's:^"\(.*\)"$:\1:g' + print "$1" | grep "^$2=" | sed -e 's:.*=\(.*\)$:\1:g' | sed -e 's:^"\(.*\)"$:\1:g' } devprocsys() { @@ -154,7 +152,6 @@ dpkg-divert --add --local \ cp /bin/true /usr/sbin/invoke-rc.d echo -e "#!/bin/sh\nexit 101" > /usr/sbin/policy-rc.d chmod +x /usr/sbin/policy-rc.d -rm -f /dpkgdivert EOF elif [[ $watdo = off ]]; then cat </dev/null @@ -162,7 +159,6 @@ EOF rm -f /usr/sbin/policy-rc.d rm -f /usr/sbin/invoke-rc.d dpkg-divert --remove --rename /usr/sbin/invoke-rc.d -rm -f /dpkgdivert EOF fi @@ -205,7 +201,7 @@ install-custdebs() { ckreq || return 1 sudo mkdir -p $strapdir/debs - sudo ${=cp} $R/extra/custom-packages/*.deb $strapdir/debs/ + sudo cp $R/extra/custom-packages/*.deb $strapdir/debs/ cat </dev/null #!/bin/sh @@ -215,7 +211,7 @@ for deb in /debs/*.deb; do done apt-get autoremove apt-get clean -rm -rf /debs install-debs +rm -rf /debs EOF chroot-script install-debs } @@ -228,17 +224,19 @@ chroot-script() { local script="$2" dpkgdivert on "$strapdir" notice "chrooting to execute $script..." - sudo -E chmod +x "$strapdir/$script" || zerr + sudo chmod +x "$strapdir/$script" || zerr sudo -E chroot "$strapdir" "/$script" || zerr dpkgdivert off "$strapdir" ;; *) local script="$1" notice "chrooting to execute $script..." - sudo -E chmod +x "$strapdir/$script" || zerr + sudochmod +x "$strapdir/$script" || zerr sudo -E chroot "$strapdir" "/$script" || zerr ;; esac + + sudo rm -f $strapdir/$script } silly() { diff --git a/zlibs/imaging b/zlibs/imaging index 6e1bc2a..6b05777 100644 --- a/zlibs/imaging +++ b/zlibs/imaging @@ -1,5 +1,5 @@ #!/usr/bin/env zsh -# Copyright (c) 2016 Dyne.org Foundation +# Copyright (c) 2016-2017 Dyne.org Foundation # libdevuansdk is maintained by Ivan J. # # This file is part of libdevuansdk @@ -132,10 +132,6 @@ image_raw_mount() { req=(workdir bootpart rootpart) ckreq || return 1 - #mkdir -p $workdir/boot $workdir/root - #sudo mount $bootpart $workdir/boot && act "mounted boot partition" || zerr - #sudo mount $rootpart $workdir/root && act "mounted root partition" || zerr - mkdir -p $workdir/mnt sudo mount $rootpart $workdir/mnt && act "mounted root partition" || zerr sudo mkdir $workdir/mnt/boot @@ -160,14 +156,14 @@ image_raw_as_strapdir() { pushd "$workdir" notice "creating raw image of $size MB" - sudo -E rm -f base.raw - sudo -E qemu-img create -f raw base.raw ${size}M + sudo rm -f base.raw + sudo qemu-img create -f raw base.raw ${size}M || zerr notice "partitioning" - sudo -E parted base.raw mktable msdos - sudo -E parted base.raw mkpart primary '0%' '100%' + sudo parted base.raw mktable msdos || zerr + sudo parted base.raw mkpart primary '0%' '100%' || zerr loopdevice=$(losetup --find) - sudo -E losetup -P $loopdevice base.raw - sudo -E mkfs.ext4 ${loopdevice}p1 + sudo losetup -P $loopdevice base.raw || zerr + sudo mkfs.ext4 ${loopdevice}p1 || zerr notice "mounting raw image to strapdir" sudo mount ${loopdevice}p1 $strapdir diff --git a/zlibs/iso b/zlibs/iso index c6db28c..097ee45 100644 --- a/zlibs/iso +++ b/zlibs/iso @@ -1,5 +1,5 @@ #!/usr/bin/env zsh -# Copyright (c) 2016 Dyne.org Foundation +# Copyright (c) 2016-2017 Dyne.org Foundation # libdevuansdk is maintained by Ivan J. # # This file is part of libdevuansdk @@ -34,7 +34,6 @@ apt-get update apt-get --yes --force-yes install dialog live-boot apt-get --yes --force-yes autoremove apt-get clean -rm -f /isoprep EOF chroot-script -d isoprep || zerr @@ -50,12 +49,12 @@ iso_setup_isolinux() { pushd $workdir sudo mkdir -p binary/{live,isolinux} act "copying kernel and initrd" - sudo ${=cp} $strapdir/boot/vmlinuz* binary/live/vmlinuz - sudo ${=cp} $strapdir/boot/initrd* binary/live/initrd + sudo cp $strapdir/boot/vmlinuz* binary/live/vmlinuz + sudo cp $strapdir/boot/initrd* binary/live/initrd - sudo ${=cp} /usr/share/live/build/bootloaders/isolinux/isolinux.bin \ + sudo cp /usr/share/live/build/bootloaders/isolinux/isolinux.bin \ binary/isolinux - sudo ${=cp} /usr/share/live/build/bootloaders/isolinux/*.c32 \ + sudo cp /usr/share/live/build/bootloaders/isolinux/*.c32 \ binary/isolinux popd } @@ -121,7 +120,7 @@ iso_setup_installer() { fn iso_setup_installer notice "setting up devuan-installer" - sudo ${=cp} $R/extra/installer/* $strapdir/ + sudo cp $R/extra/installer/* $strapdir/ ## TODO: init to script } diff --git a/zlibs/kernel b/zlibs/kernel index fc77f26..a053aab 100644 --- a/zlibs/kernel +++ b/zlibs/kernel @@ -1,5 +1,5 @@ #!/usr/bin/env zsh -# Copyright (c) 2016 Dyne.org Foundation +# Copyright (c) 2016-2017 Dyne.org Foundation # libdevuansdk is maintained by Ivan J. # # This file is part of libdevuansdk @@ -22,7 +22,7 @@ build_kernel_amd64() { fn build_kernel_amd64 req=(strapdir arch) - #freq=($strapdir/.done) + #freq=($strapdir/.keep) ckreq || return 1 local kernel_base="linux-image" @@ -43,7 +43,7 @@ build_kernel_amd64() { build_kernel_i386() { fn build_kernel_i386 req=(strapdir arch) - #freq=($strapdir/.done) + #freq=($strapdir/.keep) ckreq || return 1 local kernel_base="linux-image" diff --git a/zlibs/rsync b/zlibs/rsync index 6d8f90b..12f4c5e 100644 --- a/zlibs/rsync +++ b/zlibs/rsync @@ -1,5 +1,5 @@ #!/usr/bin/env zsh -# Copyright (c) 2016 Dyne.org Foundation +# Copyright (c) 2016-2017 Dyne.org Foundation # libdevuansdk is maintained by Ivan J. # # This file is part of libdevuansdk diff --git a/zlibs/sysconf b/zlibs/sysconf index a49c216..0e242d8 100644 --- a/zlibs/sysconf +++ b/zlibs/sysconf @@ -1,5 +1,5 @@ #!/usr/bin/env zsh -# Copyright (c) 2016 Dyne.org Foundation +# Copyright (c) 2016-2017 Dyne.org Foundation # libdevuansdk is maintained by Ivan J. # # This file is part of libdevuansdk diff --git a/zlibs/vm b/zlibs/vm index 97218d3..4a12171 100644 --- a/zlibs/vm +++ b/zlibs/vm @@ -18,10 +18,6 @@ # along with this source code. If not, see . ## ma baker -# -# deps: -# virtualbox -# qemu-kvm vars+=(vmname) @@ -39,9 +35,9 @@ vm_inject_overrides() { exit 0 EOF - sudo -E chmod +x $strapdir/etc/rc.local + sudo chmod +x $strapdir/etc/rc.local - print "rootfs / rootfs rw 0 0" | sudo -E tee ${strapdir}/etc/fstab >/dev/null + print "rootfs / rootfs rw 0 0" | sudo tee ${strapdir}/etc/fstab >/dev/null sudo sed -i -e 's/without-password/yes/' ${strapdir}/etc/ssh/sshd_config || zerr } @@ -52,7 +48,7 @@ vm_setup_grub() { ckreq || return 1 notice "setting up grub" - cat </dev/null + cat </dev/null #!/bin/sh export DEBIAN_FRONTEND=noninteractive apt-get --yes --force-yes install linux-image-amd64 grub-pc @@ -60,9 +56,7 @@ sed -e 's:GRUB_TIMEOUT=5:GRUB_TIMEOUT=1:' -i /etc/default/grub update-grub grub-install --no-floppy --recheck --modules="biosdisk part_msdos" ${loopdevice} sed -e 's:${loopdevice}p1:/dev/sda1:g' -i /boot/grub/grub.cfg -sync -sync -sync +sync; sync; sync EOF devprocsys mount $strapdir || zerr chroot-script -d setupgrub || zerr @@ -75,7 +69,7 @@ vm_umount_raw() { ckreq || return 1 notice "remounting raw image" - sudo -E mount -o remount,ro $strapdir || zerr + sudo mount -o remount,ro $strapdir || zerr sync notice "flushing bytes and buffers" sudo blockdev --flushbufs $loopdevice || zerr @@ -99,8 +93,8 @@ vm_vbox_setup() { notice "converting raw image to vdi" pushd $workdir - sudo -E qemu-img convert -f raw -O vdi base.raw base.vdi || zerr - sudo -E chown $USER base.vdi || zerr + sudo qemu-img convert -f raw -O vdi base.raw base.vdi || zerr + sudo chown $USER base.vdi || zerr VBoxManage modifyhd base.vdi --type immutable --compact || zerr act "removing old raw image" rm -f base.raw @@ -151,7 +145,7 @@ EOF } EOF notice "actually packaging..." - vagrant package --base "$vmname" --output devuanbox.box --include metadata.json --vagrantfile Vagrantfile || zerr + vagrant package --base "$vmname" --output ${vm_name}.box --include metadata.json --vagrantfile Vagrantfile || zerr popd } @@ -162,10 +156,11 @@ vm_pack_dist() { notice "packing up dist" mkdir -p $R/dist - mv $workdir/devuanbox.box $R/dist/ + mv $workdir/${vm_name}.box $R/dist act "calculating sha256sum..." silly - sha256sum $R/dist/devuanbox.box > $R/dist/devuanbox.box.sha + sha256sum $R/dist/${vm_name}.box > $R/dist/${vm_name}.box.sha + # TODO: XXX: cleanup vagrant/virtualbox leftovers notice "done!" ls -1 $R/dist } From 3165af5c09cbd46d0280cabcae5b4b4b3a692c92 Mon Sep 17 00:00:00 2001 From: parazyd Date: Wed, 15 Feb 2017 13:48:52 +0100 Subject: [PATCH 13/19] disable sync in vagrantfile --- zlibs/vm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/zlibs/vm b/zlibs/vm index 4a12171..22bbd78 100644 --- a/zlibs/vm +++ b/zlibs/vm @@ -136,6 +136,8 @@ Vagrant.configure("2") do |config| config.ssh.username = "root" config.ssh.password = "toor" config.vm.guest = :debian + config.vm.synced_folder ".", "/vagrant", disabled: true + # https://github.com/dotless-de/vagrant-vbguest end EOF act "creating metadata.json" From a2a1ecd2c58ba86b37057e7805e5b3cc64acf872 Mon Sep 17 00:00:00 2001 From: parazyd Date: Wed, 15 Feb 2017 14:49:02 +0100 Subject: [PATCH 14/19] implement support for qcow2 images --- zlibs/helpers | 33 +++++++++++++++++++++++---------- zlibs/imaging | 25 +++++++++++++++++++++++++ zlibs/vm | 44 +++++++++++++++++++++++++++----------------- 3 files changed, 75 insertions(+), 27 deletions(-) diff --git a/zlibs/helpers b/zlibs/helpers index 857b559..d94d056 100644 --- a/zlibs/helpers +++ b/zlibs/helpers @@ -67,21 +67,21 @@ build_iso_dist() { build_vagrant_dist() { fn build_vagrant_dist - req=(workdir strapdir os arch) + req=(workdir strapdir os arch imageformat) ckreq || return 1 notice "building complete vagrant image" - image_raw_as_strapdir || zerr - bootstrap_complete_base || zerr - vm_inject_overrides || zerr + image_${imageformat}_as_strapdir || zerr + bootstrap_complete_base || zerr + vm_inject_overrides || zerr [[ $BLEND = 1 ]] && blend_preinst || zerr - vm_setup_grub || zerr + vm_setup_grub || zerr [[ $BLEND = 1 ]] && blend_postinst || zerr - vm_umount_raw || zerr - vm_vbox_setup || zerr - vm_vagrant_package || zerr - vm_pack_dist || zerr + vm_umount_${imageformat} || zerr + vm_vbox_setup || zerr + vm_vagrant_package || zerr + vm_pack_dist || zerr } getfield() { @@ -127,6 +127,19 @@ findloopmapp() { silly sleep 4 } +findfreenbd() { + fn findfreenbd + + notice "looking for a free /dev/nbd" + + for i in $(seq 0 8); do + grep "^/dev/nbd${i}" /proc/mounts >/dev/null || { + print "/dev/nbd${i}" + break + } + done +} + qemu_install_user() { fn qemu_install_user req=(qemu_bin strapdir) @@ -231,7 +244,7 @@ chroot-script() { *) local script="$1" notice "chrooting to execute $script..." - sudochmod +x "$strapdir/$script" || zerr + sudo chmod +x "$strapdir/$script" || zerr sudo -E chroot "$strapdir" "/$script" || zerr ;; esac diff --git a/zlibs/imaging b/zlibs/imaging index 6b05777..28ab361 100644 --- a/zlibs/imaging +++ b/zlibs/imaging @@ -170,3 +170,28 @@ image_raw_as_strapdir() { popd } + +image_qcow2_as_strapdir() { + fn image_qcow2_as_strapdir + req=(workdir strapdir size) + ckreq || return 1 + + pushd "$workdir" + + notice "creating qcow2 image of $size MB" + rm -f base.qcow2 + qemu-img create -f qcow2 base.qcow2 ${size}M || zerr + sudo modprobe nbd max_part=8 || zerr + loopdevice="$(findfreenbd)" + [ -n "$loopdevice" ] || zerr + sudo qemu-nbd --connect=${loopdevice} base.qcow2 || zerr + notice "partitioning" + sudo parted ${loopdevice} mktable msdos || zerr + sudo parted ${loopdevice} mkpart primary '0%' '100%' || zerr + sudo mkfs.ext4 ${loopdevice}p1 || zerr + + notice "mounting qcow2 image to strapdir" + sudo mount ${loopdevice}p1 $strapdir || zerr + + popd +} diff --git a/zlibs/vm b/zlibs/vm index 22bbd78..1f6bcf9 100644 --- a/zlibs/vm +++ b/zlibs/vm @@ -63,41 +63,49 @@ EOF devprocsys umount $strapdir || zerr } -vm_umount_raw() { - fn vm_umount_raw - req=(strapdir loopdevice) +vm_umount_${imageformat}() { + fn vm_umount_${imageformat} + req=(strapdir loopdevice imageformat) ckreq || return 1 - notice "remounting raw image" + notice "remounting ${imageformat} image" sudo mount -o remount,ro $strapdir || zerr sync notice "flushing bytes and buffers" sudo blockdev --flushbufs $loopdevice || zerr sudo python -c 'import os; os.fsync(open("'${loopdevice}'", "r+b"))' || zerr - notice "unmounting raw image from strapdir" - silly sleep 1 + notice "unmounting ${imageformat} image from strapdir" sudo umount $strapdir || zerr + silly sleep 1 sudo rmdir $strapdir || zerr - sync - silly sleep 1 notice "cleaning up" - sudo losetup -d ${loopdevice} || zerr + case "$imageformat" in + raw) + sudo losetup -d ${loopdevice} || zerr + ;; + qcow2) + sudo qemu-nbd --disconnect ${loopdevice} || zerr + ;; + *) + zerr + ;; + esac silly sleep 1 } vm_vbox_setup() { fn vm_vbox_setup - req=(workdir) + req=(workdir imageformat) ckreq || return 1 - notice "converting raw image to vdi" + notice "converting ${imageformat} image to vdi" pushd $workdir - sudo qemu-img convert -f raw -O vdi base.raw base.vdi || zerr - sudo chown $USER base.vdi || zerr + qemu-img convert -f ${imageformat} -O vdi base.${imageformat} base.vdi || zerr + #sudo chown $USER base.vdi || zerr VBoxManage modifyhd base.vdi --type immutable --compact || zerr - act "removing old raw image" - rm -f base.raw + #act "removing old raw image" + #rm -f base.raw vmname="${os}-${release}-prevagrant" notice "importing base.vdi to a VBox" @@ -153,15 +161,17 @@ EOF vm_pack_dist() { fn vm_pack_dist - req=(workdir) + req=(workdir imageformat) ckreq || return 1 notice "packing up dist" mkdir -p $R/dist mv $workdir/${vm_name}.box $R/dist - act "calculating sha256sum..." + mv $workdir/base.${imageformat} $R/dist/${vm_name}.${imageformat} + act "calculating sha256 sums..." silly sha256sum $R/dist/${vm_name}.box > $R/dist/${vm_name}.box.sha + sha256sum $R/dist/${vm_name}.${imageformat} > $R/dist/${vm_name}.${imageformat}.sha # TODO: XXX: cleanup vagrant/virtualbox leftovers notice "done!" ls -1 $R/dist From 059a533ff746023d1d5b02242ba9b8180d25f810 Mon Sep 17 00:00:00 2001 From: parazyd Date: Wed, 15 Feb 2017 15:42:57 +0100 Subject: [PATCH 15/19] added virtualbox cleanup on vm_pack_dist() --- zlibs/helpers | 2 +- zlibs/sysconf | 4 ++-- zlibs/vm | 12 ++++++++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/zlibs/helpers b/zlibs/helpers index d94d056..9019586 100644 --- a/zlibs/helpers +++ b/zlibs/helpers @@ -288,6 +288,6 @@ silly() { "god is porco" "A million hamsters are spinning their wheels right now" ) - local rnd=$(shuf -i1-30 -n 1) + local rnd=$(shuf -i1-$#funneh -n 1) act "${funneh[$rnd]}" ; [[ $arg1 = sleep ]] && sleep $arg2 } diff --git a/zlibs/sysconf b/zlibs/sysconf index 0e242d8..f88b116 100644 --- a/zlibs/sysconf +++ b/zlibs/sysconf @@ -66,8 +66,8 @@ fe02::1 ip6-allrouters EOF } -conf_print_networkifaces() { - fn conf_print_networkifaces +conf_print_netifaces() { + fn conf_print_netifaces cat < $R/dist/${vm_name}.box.sha sha256sum $R/dist/${vm_name}.${imageformat} > $R/dist/${vm_name}.${imageformat}.sha - # TODO: XXX: cleanup vagrant/virtualbox leftovers + notice "cleaning up virtualbox leftovers" + pushd "$workdir" + VBoxManage unregistervm "$vmname" --delete + rm -f metadata.json Vagrantfile + rm -rf .vagrant + popd + rm -rf "$workdir" + rm -rf "$HOME/VirtualBox VMs/vmsdk" + notice "done!" ls -1 $R/dist } From 693ee05e21751066fe9e31db3ec54fdead2b34f9 Mon Sep 17 00:00:00 2001 From: parazyd Date: Wed, 15 Feb 2017 15:52:37 +0100 Subject: [PATCH 16/19] verbose on found nbd --- zlibs/bootstrap | 1 + zlibs/imaging | 1 + 2 files changed, 2 insertions(+) diff --git a/zlibs/bootstrap b/zlibs/bootstrap index b772888..6fd4566 100644 --- a/zlibs/bootstrap +++ b/zlibs/bootstrap @@ -145,6 +145,7 @@ bootstrap_tar_unpack() { else error "no .keep file found. exiting..." zerr + exit 1 fi cat </dev/null diff --git a/zlibs/imaging b/zlibs/imaging index 28ab361..6d4103b 100644 --- a/zlibs/imaging +++ b/zlibs/imaging @@ -184,6 +184,7 @@ image_qcow2_as_strapdir() { sudo modprobe nbd max_part=8 || zerr loopdevice="$(findfreenbd)" [ -n "$loopdevice" ] || zerr + act "$loopdevice" sudo qemu-nbd --connect=${loopdevice} base.qcow2 || zerr notice "partitioning" sudo parted ${loopdevice} mktable msdos || zerr From 99488030c86a4a6f174edb68bfa3e29f39532c95 Mon Sep 17 00:00:00 2001 From: parazyd Date: Wed, 15 Feb 2017 15:54:45 +0100 Subject: [PATCH 17/19] ??? --- zlibs/bootstrap | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zlibs/bootstrap b/zlibs/bootstrap index 6fd4566..ac5bb49 100644 --- a/zlibs/bootstrap +++ b/zlibs/bootstrap @@ -137,15 +137,15 @@ bootstrap_tar_unpack() { req=(unpath bootstrap_tgz) ckreq || return 1 - if [[ -f ${unpath}/.keep ]]; then + if [[ -f "${unpath}/.keep" ]]; then + error "no .keep file found. exiting..." + zerr + exit 1 + else mkdir -p ${unpath} silly sudo tar xfp $bootstrap_tgz -C ${unpath} sudo mkdir -p ${unpath}/{boot,dev,sys,proc} - else - error "no .keep file found. exiting..." - zerr - exit 1 fi cat </dev/null From 0e2810b75c250a466823181e375466b41a6d96d0 Mon Sep 17 00:00:00 2001 From: parazyd Date: Wed, 15 Feb 2017 16:32:37 +0100 Subject: [PATCH 18/19] hack around .keep for tarball --- zlibs/bootstrap | 8 ++++---- zlibs/imaging | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/zlibs/bootstrap b/zlibs/bootstrap index ac5bb49..eccf236 100644 --- a/zlibs/bootstrap +++ b/zlibs/bootstrap @@ -138,14 +138,14 @@ bootstrap_tar_unpack() { ckreq || return 1 if [[ -f "${unpath}/.keep" ]]; then - error "no .keep file found. exiting..." - zerr - exit 1 - else mkdir -p ${unpath} silly sudo tar xfp $bootstrap_tgz -C ${unpath} sudo mkdir -p ${unpath}/{boot,dev,sys,proc} + else + error "no .keep file found. exiting..." + zerr + exit 1 fi cat </dev/null diff --git a/zlibs/imaging b/zlibs/imaging index 6d4103b..b5e9047 100644 --- a/zlibs/imaging +++ b/zlibs/imaging @@ -167,7 +167,7 @@ image_raw_as_strapdir() { notice "mounting raw image to strapdir" sudo mount ${loopdevice}p1 $strapdir - + echo 1 | sudo tee ${strapdir}/.keep >/dev/null ## hack? XXX: bootstrap_tar_unpack couldn't see it popd } @@ -193,6 +193,6 @@ image_qcow2_as_strapdir() { notice "mounting qcow2 image to strapdir" sudo mount ${loopdevice}p1 $strapdir || zerr - + echo 1 | sudo tee ${strapdir}/.keep >/dev/null ## hack? XXX: bootstrap_tar_unpack couldn't see it popd } From ee53a0b770f10ba3dd02b0de5122c88b19868bc3 Mon Sep 17 00:00:00 2001 From: parazyd Date: Wed, 22 Feb 2017 14:09:20 +0100 Subject: [PATCH 19/19] fix breakage on unknown blends --- zlibs/helpers | 26 +++++++++++++++++++------- zlibs/iso | 2 +- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/zlibs/helpers b/zlibs/helpers index 9019586..f5f3bf8 100644 --- a/zlibs/helpers +++ b/zlibs/helpers @@ -36,11 +36,11 @@ build_image_dist() { ## TODO: add blend_prebuild; blend_midbuild; blend_postbuild bootstrap_complete_base || zerr - [[ $BLEND = 1 ]] && blend_preinst || zerr + blend_preinst || zerr image_prepare_raw || zerr image_partition_raw_${parted_type} || zerr build_kernel_${arch} || zerr - [[ $BLEND = 1 ]] && blend_postinst || zerr + blend_postinst || zerr rsync_to_raw_image || zerr image_pack_dist || zerr } @@ -54,13 +54,13 @@ build_iso_dist() { ## XXX: TODO: upstream existing heads code bootstrap_complete_base || zerr - [[ $BLEND = 1 ]] && blend_preinst || zerr + blend_preinst || zerr iso_prepare_strap || zerr build_kernel_${arch} || zerr iso_setup_isolinux || zerr iso_write_isolinux_cfg || zerr - [[ $INSTALLER = 1 ]] && iso_setup_installer || zerr - [[ $BLEND = 1 ]] && blend_postinst || zerr + #[[ $INSTALLER = 1 ]] && iso_setup_installer || zerr + blend_postinst || zerr iso_squash_strap || zerr iso_xorriso_build || zerr } @@ -75,9 +75,9 @@ build_vagrant_dist() { image_${imageformat}_as_strapdir || zerr bootstrap_complete_base || zerr vm_inject_overrides || zerr - [[ $BLEND = 1 ]] && blend_preinst || zerr + blend_preinst || zerr vm_setup_grub || zerr - [[ $BLEND = 1 ]] && blend_postinst || zerr + blend_postinst || zerr vm_umount_${imageformat} || zerr vm_vbox_setup || zerr vm_vagrant_package || zerr @@ -252,6 +252,18 @@ chroot-script() { sudo rm -f $strapdir/$script } +blend_preinst() { + fn blend_preinst + func "not overriden" + return 0 +} + +blend_postinst() { + fn blend_postinst + func "not overriden" + return 0 +} + silly() { fn silly "$@" local arg1="$1" diff --git a/zlibs/iso b/zlibs/iso index 097ee45..156e604 100644 --- a/zlibs/iso +++ b/zlibs/iso @@ -19,7 +19,7 @@ ## burn baby -[[ $INSTALLER = 1 ]] && base_packages+=(grub-pc) +#[[ $INSTALLER = 1 ]] && base_packages+=(grub-pc) iso_prepare_strap() { fn iso_prepare_strap