diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..e0fab89 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "extra/devuan-keyring"] + path = extra/devuan-keyring + url = https://git.devuan.org/devuan-packages/devuan-keyring diff --git a/config b/config index 3f2ede6..5d69023 100644 --- a/config +++ b/config @@ -28,7 +28,7 @@ arrs+=(core_packages base_packages purge_packages blend_packages) os="devuan" release="jessie" -version="1.0.0-RC" +version="1.0.0-RC2" mirror="http://auto.mirror.devuan.org/merged" section="main" diff --git a/extra/devuan-keyring b/extra/devuan-keyring new file mode 160000 index 0000000..e82213e --- /dev/null +++ b/extra/devuan-keyring @@ -0,0 +1 @@ +Subproject commit e82213e52259a497db285c59758b9f6a95308060 diff --git a/zlibs/.helpers.swp b/zlibs/.helpers.swp new file mode 100644 index 0000000..6631660 Binary files /dev/null and b/zlibs/.helpers.swp differ diff --git a/zlibs/bootstrap b/zlibs/bootstrap index a2ef358..ab6493d 100644 --- a/zlibs/bootstrap +++ b/zlibs/bootstrap @@ -40,6 +40,7 @@ bootstrap_complete_base() { export DEBIAN_FRONTEND=noninteractive sudo -E debootstrap \ + --keyring="$LIBPATH/extra/devuan-keyring/keyrings/devuan-archive-keyring.gpg" \ --foreign \ --arch $arch $release $strapdir $mirror || zerr @@ -116,7 +117,7 @@ bootstrap_tar_pack() { local _dest=$(dirname $bootstrap_tgz) if [[ -f $bootstrap_tgz ]]; then - act "tarball found already in $_dest" + notice "tarball found already in $_dest" else notice "Creating boostrap tarball in $bootstrap_tgz" silly @@ -138,16 +139,17 @@ bootstrap_tar_unpack() { ckreq || return 1 if [[ -f "${unpath}/.keep" ]]; then + act "skipping tarball unpack" + else + sudo rm -rf ${unpath} 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 + conf_print_sourceslist | sudo tee $strapdir/etc/apt/sources.list >/dev/null + cat </dev/null #!/bin/sh apt-get update diff --git a/zlibs/helpers b/zlibs/helpers index fe81321..6c0d61f 100644 --- a/zlibs/helpers +++ b/zlibs/helpers @@ -19,6 +19,8 @@ ## helper functions that make my life easier +vars+=(loopdevice) + build_image_dist() { fn build_image_dist req=(arch size parted_type) @@ -33,14 +35,14 @@ build_image_dist() { notice "building complete dist image" act "$image_name" - bootstrap_complete_base || zerr - blend_preinst || zerr - image_prepare_raw || zerr - image_partition_raw_${parted_type} || zerr - build_kernel_${arch} || zerr - blend_postinst || zerr - rsync_to_raw_image || zerr - image_pack_dist || zerr + bootstrap_complete_base || { zerr; wrapup } + blend_preinst || { zerr; wrapup } + image_prepare_raw || { zerr; wrapup } + image_partition_raw_${parted_type} || { zerr; wrapup } + build_kernel_${arch} || { zerr; wrapup } + blend_postinst || { zerr; wrapup } + rsync_to_raw_image || { zerr; wrapup } + image_pack_dist || { zerr; wrapup } } build_iso_dist() { @@ -50,16 +52,16 @@ build_iso_dist() { notice "building complete iso image" - bootstrap_complete_base || zerr - blend_preinst || zerr - iso_prepare_strap || zerr - build_kernel_${arch} || zerr - iso_setup_isolinux || zerr - iso_write_isolinux_cfg || zerr + bootstrap_complete_base || { zerr; wrapup } + blend_preinst || { zerr; wrapup } + iso_prepare_strap || { zerr; wrapup } + build_kernel_${arch} || { zerr; wrapup } + iso_setup_isolinux || { zerr; wrapup } + iso_write_isolinux_cfg || { zerr; wrapup } #[[ $INSTALLER = 1 ]] && iso_setup_installer || zerr - blend_postinst || zerr - iso_squash_strap || zerr - iso_xorriso_build || zerr + blend_postinst || { zerr; wrapup } + iso_squash_strap || { zerr; wrapup } + iso_xorriso_build || { zerr; wrapup } } build_vagrant_dist() { @@ -69,16 +71,16 @@ build_vagrant_dist() { 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 + image_${imageformat}_as_strapdir || { zerr; wrapup } + bootstrap_complete_base || { zerr; wrapup } + vm_inject_overrides || { zerr; wrapup } + blend_preinst || { zerr; wrapup } + vm_setup_grub || { zerr; wrapup } + blend_postinst || { zerr; wrapup } + vm_umount_${imageformat} || { zerr; wrapup } + vm_vbox_setup || { zerr; wrapup } + vm_vagrant_package || { zerr; wrapup } + vm_pack_dist || { zerr; wrapup } } getfield() { @@ -120,29 +122,40 @@ devprocsys() { sudo mount -o bind /dev/pts $werdo/dev/pts && act "mounted devpts" && \ return 0 elif [[ $watdo = umount ]]; then - sudo umount $werdo/dev/pts && act "umounted devpts" && sleep 1 && \ - sudo umount $werdo/dev && act "umounted dev" && sleep 1 && \ - sudo umount $werdo/proc && act "umounted proc" && sleep 1 && \ - sudo umount $werdo/sys && act "umounted sys" && sleep 1 && \ + sudo umount $werdo/dev/pts && act "umounted devpts" && sleep 1 + sudo umount $werdo/dev && act "umounted dev" && sleep 1 + sudo umount $werdo/proc && act "umounted proc" && sleep 1 + sudo umount $werdo/sys && act "umounted sys" && sleep 1 return 0 fi return 1 } -findloopmapp() { - fn findloopmapp +wrapup() { + # a hopefully clean exit + fn wrapup + req=(strapdir) + ckreq || { + die "something is very wrong" + die "cleanup yourself, sorry" + exit 1 + } + + devprocsys umount $strapdir + exit 1 +} + +findloopdev() { + fn findloopdev req=(workdir image_name) ckreq || return 1 notice "finding a free loopdevice" loopdevice=$(sudo losetup -f --show $workdir/${image_name}.img) - mappdevice=$(sudo kpartx -va $loopdevice | \ - sed -E 's/.*(loop[0-9])p.*/\1/g' | sed 1q) + sudo partx -av $loopdevice || zerr func "loopdevice: $loopdevice" - func "mappdevice: $mappdevice" - silly sleep 2 } diff --git a/zlibs/imaging b/zlibs/imaging index b508915..a5f8caf 100644 --- a/zlibs/imaging +++ b/zlibs/imaging @@ -45,12 +45,11 @@ image_partition_raw_dos() { parted $workdir/${image_name}.img --script -- mkpart primary ${parted_boot} parted $workdir/${image_name}.img --script -- mkpart primary ${parted_root} - ## get loopdevice and mapper device (see ./helpers) - findloopmapp + ## get loopdevice (see ./helpers) + findloopdev - mappdevice="/dev/mapper/${mappdevice}" - bootpart=${mappdevice}p1 - rootpart=${mappdevice}p2 + bootpart=${loopdevice}p1 + rootpart=${loopdevice}p2 notice "formatting partitions..." sudo mkfs.vfat ${bootpart} @@ -77,11 +76,10 @@ image_partition_raw_gpt() { awk '/Sec GPT table/ {print $1}') - ${gpt_root[1]}) \ -l Root $workdir/${image_name}.img - findloopmapp + findloopdev - mappdevice="/dev/mapper/${mappdevice}" - bootpart=${mappdevice}p1 - rootpart=${mappdevice}p2 + bootpart="${loopdevice}p1" + rootpart="${loopdevice}p2" notice "formatting partitions..." sudo mkfs.ext4 -L rootfs ${rootpart} @@ -89,14 +87,14 @@ image_partition_raw_gpt() { image_pack_dist() { fn image_pack_dist - req=(mappdevice loopdevice image_name strapdir workdir) + req=(loopdevice image_name strapdir workdir) ckreq || return 1 notice "packaging image for dist" act "rechecking filesystem" - sudo e2fsck -f ${mappdevice}p2 - sudo resize2fs ${mappdevice}p2 + sudo e2fsck -f ${loopdevice}p2 + sudo resize2fs ${loopdevice}p2 sleep 2 @@ -105,8 +103,8 @@ image_pack_dist() { sleep 1 } - sudo kpartx -dv $loopdevice || { - die "kpartx failed to remove $loopdevice" + sudo partx -dv $loopdevice || { + die "partx failed to remove $loopdevice" zerr } sudo losetup -d $loopdevice || { @@ -114,12 +112,12 @@ image_pack_dist() { zerr } - _xz="xz -zv" + _xz=(xz -zv) [[ $(command -v pixz) ]] && _xz=pixz notice "compressing image with $_xz" silly pushd $workdir - ${=_xz} ${image_name}.img + ${xz} "${image_name}.img" notice "generating sha256 for ${image_name}.img.xz" sha256sum ${image_name}.img.xz > ${image_name}.img.xz.sha diff --git a/zlibs/iso b/zlibs/iso index 2cd3bdb..15a24e2 100644 --- a/zlibs/iso +++ b/zlibs/iso @@ -52,10 +52,25 @@ iso_setup_isolinux() { 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 \ - binary/isolinux || zerr - sudo cp /usr/share/live/build/bootloaders/isolinux/*.c32 \ - binary/isolinux || zerr + eval $(cat /etc/os-release) + case "$ID" in + devuan) + sudo cp \ + /usr/share/live/build/bootloaders/isolinux/isolinux.bin \ + binary/isolinux || zerr + sudo cp /usr/share/live/build/bootloaders/isolinux/*.c32 \ + binary/isolinux || zerr + ;; + gentoo) + sudo cp \ + /usr/share/syslinux/isolinux.bin binary/isolinux || zerr + sudo cp \ + /usr/share/syslinux/*.c32 binary/isolinux || zerr + ;; + *) + warn "no isolinux has been copied. take care of it yourself" + ;; + esac popd } @@ -88,10 +103,13 @@ iso_squash_strap() { notice "creating squashfs out of strapdir" + [[ -n "$mkefi" ]] && uefi_opt="-Xbcj x86" pushd $workdir sudo mksquashfs $strapdir binary/live/filesystem.squashfs \ + ${=uefi_opt} \ -noappend -comp xz || zerr popd + unset uefi_opt } iso_xorriso_build() { @@ -102,10 +120,24 @@ iso_xorriso_build() { notice "building iso..." isoname="${image_name}-live.iso" + [[ -n "$mkefi" ]] && { + uefi_opt="-eltorito-alt-boot -e boot/grub/efiboot.img -isohybrid-gpt-basdat -no-emul-boot" + } + + eval $(cat /etc/os-release) + case "$ID" in + devuan) + isohybrid=/usr/lib/ISOLINUX/isohdpfx.bin + ;; + gentoo) + isohybrid=/usr/share/syslinux/isohdpfx.bin + ;; + esac + mkdir -p $R/dist pushd $workdir sudo xorriso -as mkisofs -r -J -joliet-long -l \ - -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \ + -isohybrid-mbr $isohybrid \ -partition_offset 16 \ -A "${os} Live - ${arch}" \ -b isolinux/isolinux.bin \ @@ -113,9 +145,11 @@ iso_xorriso_build() { -no-emul-boot \ -boot-load-size 4 \ -boot-info-table \ + ${=uefi_opt} \ -o $R/dist/$isoname \ binary || zerr popd + unset uefi_opt } iso_setup_installer() {