tMerge branch 'next' - libdevuansdk - common library for devuan's simple distro kits HTML git clone https://git.parazyd.org/libdevuansdk DIR Log DIR Files DIR Refs DIR Submodules DIR README DIR LICENSE --- DIR commit 0fe5c9f3a3ae58115005273fe61c5e31eca41ed6 DIR parent 9a22ddaad19c06a2ed824c2d8f7c2f763ab40499 HTML Author: parazyd <parazyd@dyne.org> Date: Wed, 22 Feb 2017 14:21:39 +0100 Merge branch 'next' Diffstat: M README.md | 2 +- M config | 20 +++++++++++++------- M libdevuansdk | 9 ++++++--- M zlibs/bootstrap | 76 +++++++++++-------------------- M zlibs/helpers | 164 +++++++++++++++---------------- M zlibs/imaging | 69 ++++++++++++++++++++++++++----- M zlibs/iso | 21 ++++++++++----------- M zlibs/kernel | 6 +++--- M zlibs/rsync | 18 ++++++------------ M zlibs/sysconf | 20 +++++++++++++++++--- A zlibs/vm | 186 +++++++++++++++++++++++++++++++ 11 files changed, 404 insertions(+), 187 deletions(-) --- DIR diff --git a/README.md b/README.md t@@ -37,7 +37,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: DIR diff --git a/config b/config t@@ -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. <parazyd@dyne.org> # # This file is part of libdevuansdk t@@ -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" t@@ -32,6 +32,11 @@ 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 t@@ -41,8 +46,8 @@ core_packages=( bzip2 curl less - vim-tiny - nano-tiny + vim + nano sysvinit ) t@@ -54,8 +59,9 @@ base_packages=( sudo alsa-base alsa-utils - gawk + mawk tmux + screen openntpd wpasupplicant wireless-tools t@@ -65,9 +71,9 @@ base_packages=( zsh rsync git-core + haveged ) -purge_packages=( +purge_packages+=( dbus - nano ) DIR diff --git a/libdevuansdk b/libdevuansdk t@@ -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. <parazyd@dyne.org> # # This file is part of libdevuansdk t@@ -17,8 +17,8 @@ # You should have received a copy of the GNU General Public License # along with this source code. If not, see <http://www.gnu.org/licenses/>. -libdevuansdk_version="0.3" -LIBPATH=${LIBPATH:-`dirname $0`} +libdevuansdk_version="0.4" +LIBPATH=${LIBPATH:-$(dirname $0)} source $LIBPATH/config source $LIBPATH/zlibs/bootstrap t@@ -28,8 +28,11 @@ 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) +setopt pushdsilent + act "libdevuansdk v$libdevuansdk_version loaded" DIR diff --git a/zlibs/bootstrap b/zlibs/bootstrap t@@ -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. <parazyd@dyne.org> # # This file is part of libdevuansdk t@@ -52,17 +52,17 @@ 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_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 - bootstrap_config_cleanup | sudo tee $strapdir/cleanup + bootstrap_config_thirdstage | sudo tee $strapdir/thirdstage >/dev/null ## chroot into it and configure further ## debootstrap stage 3 t@@ -70,7 +70,7 @@ bootstrap_complete_base() { devprocsys mount $strapdir || zerr - chroot-script -d thirdstage cleanup || zerr + chroot-script -d thirdstage || zerr sleep 1 devprocsys umount $strapdir || zerr t@@ -79,23 +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/*_key -rm -f /etc/ssh/*.pub -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) t@@ -106,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 t@@ -117,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 } t@@ -125,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 <<EOF | sudo tee ${strapdir}/prepack -#!/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 t@@ -162,21 +137,24 @@ 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 + exit 1 + fi - cat <<EOF | sudo tee ${strapdir}/postunpack + cat <<EOF | sudo tee ${strapdir}/postunpack >/dev/null #!/bin/sh apt-get update 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 t@@ -184,8 +162,8 @@ EOF devprocsys umount $strapdir ## below typically used in arm-sdk - [[ -z $inittab ]] || { print $inittab | sudo tee -a $strapdir/etc/inittab } + [[ -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 - done + print $i | sudo tee -a $strapdir/etc/modules >/dev/null + done || return 0 } DIR diff --git a/zlibs/helpers b/zlibs/helpers t@@ -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. <parazyd@dyne.org> # # This file is part of libdevuansdk t@@ -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 } t@@ -51,19 +51,44 @@ 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 + 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 - [[ $BLEND = 1 ]] && blend_postinst || zerr + #[[ $INSTALLER = 1 ]] && iso_setup_installer || zerr + blend_postinst || zerr iso_squash_strap || zerr iso_xorriso_build || zerr } +build_vagrant_dist() { + fn build_vagrant_dist + req=(workdir strapdir os arch imageformat) + ckreq || return 1 + + notice "building complete vagrant image" + + image_${imageformat}_as_strapdir || zerr + bootstrap_complete_base || zerr + vm_inject_overrides || zerr + blend_preinst || zerr + vm_setup_grub || zerr + blend_postinst || zerr + vm_umount_${imageformat} || zerr + vm_vbox_setup || zerr + vm_vagrant_package || zerr + vm_pack_dist || zerr +} + +getfield() { + fn getfield $* + print "$1" | grep "^$2=" | sed -e 's:.*=\(.*\)$:\1:g' | sed -e 's:^"\(.*\)"$:\1:g' +} + devprocsys() { fn devprocsys "$@" local watdo="$1" t@@ -102,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) t@@ -112,14 +150,14 @@ qemu_install_user() { } dpkgdivert() { - fn dpkgdivert $@ + fn dpkgdivert "$@" req=(watdo werdo) local watdo="$1" local werdo="$2" ckreq || return 1 if [[ $watdo = on ]]; then - cat <<EOF | sudo tee ${werdo}/dpkgdivert + cat <<EOF | sudo tee ${werdo}/dpkgdivert >/dev/null #!/bin/sh dpkg-divert --add --local \ --divert /usr/sbin/invoke-rc.d.chroot \ t@@ -127,15 +165,13 @@ 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 <<EOF | sudo tee ${werdo}/dpkgdivert + cat <<EOF | sudo tee ${werdo}/dpkgdivert >/dev/null #!/bin/sh 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 t@@ -148,7 +184,7 @@ enableserv() { req=(service strapdir) ckreq || return 1 - cat <<EOF | sudo tee -a ${strapdir}/enserv + cat <<EOF | sudo tee -a ${strapdir}/enserv >/dev/null #!/bin/sh update-rc.d ${service} enable EOF t@@ -163,7 +199,7 @@ disableserv() { req=(service strapdir) ckreq || return 1 - cat <<EOF | sudo tee -a ${strapdir}/disserv + cat <<EOF | sudo tee -a ${strapdir}/disserv >/dev/null #!/bin/sh update-rc.d ${service} disable EOF t@@ -172,68 +208,15 @@ EOF chroot-script disserv } -enablessh() { - fn enablessh - req=(strapdir) - ckreq || return 1 - - cat <<EOF | sudo tee -a ${strapdir}/enssh -#!/bin/sh -sed -i -e 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config -update-rc.d ssh enable -update-rc.d regensshkeys defaults -update-rc.d regensshkeys enable -rm -f /enssh -EOF - - cat <<EOF | sudo tee ${strapdir}/etc/init.d/regensshkeys -#!/bin/sh -# -### BEGIN INIT INFO -# Provides: something -# Required-Start: \$syslog -# Required-Stop: \$syslog -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Regenerate openssh-server keys -# Description: Regenerate openssh-server keys -### END INIT INFO -# -set -e -set -u - -genkeys() { - /usr/sbin/service ssh stop - /usr/sbin/dpkg-reconfigure openssh-server - /usr/sbin/service ssh start - /usr/sbin/update-rc.d regensshkeys disable -} - -case "\$1" in - start) - genkeys;; - stop) - ;; - *) - echo "usage: \$(basename \$0) {start}" - ;; -esac -EOF - - sudo chmod +x $strapdir/etc/init.d/regensshkeys - - chroot-script -d enssh -} - install-custdebs() { fn install-custdebs req=(R strapdir) 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 <<EOF | sudo tee ${strapdir}/install-debs + cat <<EOF | sudo tee ${strapdir}/install-debs >/dev/null #!/bin/sh for deb in /debs/*.deb; do dpkg -i \$deb t@@ -241,7 +224,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 } t@@ -251,27 +234,34 @@ 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 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 chmod +x "$strapdir/$script" || zerr + sudo -E chroot "$strapdir" "/$script" || zerr ;; esac + + 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() { t@@ -310,6 +300,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 } DIR diff --git a/zlibs/imaging b/zlibs/imaging t@@ -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. <parazyd@dyne.org> # # This file is part of libdevuansdk t@@ -19,7 +19,7 @@ ## imagine images -vars+=(image_name bootpart rootpart) +vars+=(image_name bootpart rootpart loopdevice) image_prepare_raw() { fn image_prepare_raw t@@ -132,11 +132,10 @@ 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/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() { t@@ -144,8 +143,56 @@ 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 +} + +image_raw_as_strapdir() { + fn image_raw_as_strapdir + req=(workdir strapdir size) + ckreq || return 1 + + pushd "$workdir" + + notice "creating raw image of $size MB" + sudo rm -f base.raw + sudo qemu-img create -f raw base.raw ${size}M || zerr + notice "partitioning" + sudo parted base.raw mktable msdos || zerr + sudo parted base.raw mkpart primary '0%' '100%' || zerr + loopdevice=$(losetup --find) + sudo losetup -P $loopdevice base.raw || zerr + sudo mkfs.ext4 ${loopdevice}p1 || zerr + + 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 +} + +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 + act "$loopdevice" + 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 + echo 1 | sudo tee ${strapdir}/.keep >/dev/null ## hack? XXX: bootstrap_tar_unpack couldn't see it + popd } DIR diff --git a/zlibs/iso b/zlibs/iso t@@ -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. <parazyd@dyne.org> # # This file is part of libdevuansdk t@@ -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 t@@ -28,13 +28,12 @@ iso_prepare_strap() { notice "preparing strapdir for livecd" - cat <<EOF | sudo tee ${strapdir}/isoprep + cat <<EOF | sudo tee ${strapdir}/isoprep >/dev/null #!/bin/sh 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 t@@ -50,12 +49,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 } t@@ -66,7 +65,7 @@ iso_write_isolinux_cfg() { ckreq || return 1 notice "writing isolinux configuration" - cat <<EOF | sudo tee ${workdir}/binary/isolinux/isolinux.cfg + cat <<EOF | sudo tee ${workdir}/binary/isolinux/isolinux.cfg >/dev/null ui vesamenu.c32 prompt 0 menu title ${os} boot menu t@@ -90,7 +89,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 } t@@ -121,7 +120,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 } DIR diff --git a/zlibs/kernel b/zlibs/kernel t@@ -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. <parazyd@dyne.org> # # This file is part of libdevuansdk t@@ -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" t@@ -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" DIR diff --git a/zlibs/rsync b/zlibs/rsync t@@ -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. <parazyd@dyne.org> # # This file is part of libdevuansdk t@@ -26,23 +26,17 @@ rsync_to_raw_image() { notice "rsyncing strapdir to raw image..." image_raw_mount + sleep 1 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 DIR diff --git a/zlibs/sysconf b/zlibs/sysconf t@@ -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. <parazyd@dyne.org> # # This file is part of libdevuansdk t@@ -66,8 +66,8 @@ fe02::1 ip6-allrouters EOF } -conf_print_networkifaces() { - fn conf_print_networkifaces +conf_print_netifaces() { + fn conf_print_netifaces cat <<EOF # interfaces(5) file used by ifup(8) and ifdown(8) t@@ -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 t@@ -119,10 +122,21 @@ 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 +} + +conf_print_locales() { + fn conf_print_locales + + cat <<EOF +export LANG=C +export LC_ALL=C EOF } DIR diff --git a/zlibs/vm b/zlibs/vm t@@ -0,0 +1,186 @@ +#!/usr/bin/env zsh +# Copyright (c) 2016-2017 Dyne.org Foundation +# libdevuansdk is maintained by Ivan J. <parazyd@dyne.org> +# +# 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 <http://www.gnu.org/licenses/>. + +## ma baker + +vars+=(vmname) + +vm_inject_overrides() { + fn vm_inject_overrides + req=(strapdir) + ckreq || return 1 + + notice "injecting rootfs overrides" + cat <<EOF | sudo -E tee ${strapdir}/etc/rc.local >/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 chmod +x $strapdir/etc/rc.local + + 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 +} + +vm_setup_grub() { + fn vm_setup_grub + req=(strapdir loopdevice) + ckreq || return 1 + + notice "setting up grub" + cat <<EOF | sudo tee ${strapdir}/setupgrub >/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_${imageformat}() { + fn vm_umount_${imageformat} + req=(strapdir loopdevice imageformat) + ckreq || return 1 + + 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 ${imageformat} image from strapdir" + sudo umount $strapdir || zerr + silly sleep 1 + sudo rmdir $strapdir || zerr + + notice "cleaning up" + 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 imageformat) + ckreq || return 1 + + notice "converting ${imageformat} image to vdi" + pushd $workdir + 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 + + 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 /vmsdk || 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 <<EOF > Vagrantfile +Vagrant.configure("2") do |config| + config.vm.box = "devuanbox.box" + 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" + cat <<EOF > metadata.json +{ + "provider": "virtualbox" +} +EOF + notice "actually packaging..." + vagrant package --base "$vmname" --output ${vm_name}.box --include metadata.json --vagrantfile Vagrantfile || zerr + popd +} + +vm_pack_dist() { + fn vm_pack_dist + req=(workdir imageformat) + ckreq || return 1 + + notice "packing up dist" + mkdir -p $R/dist + mv $workdir/${vm_name}.box $R/dist + 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 + 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 +}