diff --git a/debian/changelog b/debian/changelog index dbf2d63c..bfe63a29 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,12 @@ livecd-rootfs (2.353) UNRELEASED; urgency=medium * drop input group from snappy images, adjust md5 sums in live-build/ubuntu-core/hooks/00-uid-gid-fix.chroot_early + * completely separate the snappy device tarball creation from the snappy + rootfs so one doesnt taint the other (which allows dropping a lot more from + the rootfs we do not need in a snappy system, like initramfs creation + tools and all its dependencies). + * drop live-build/ubuntu-core/hooks/500-move-kernel-to-device-tar.binary + * enable automated build of raspi2 device tarballs for snappy -- Oliver Grawert Mon, 09 Nov 2015 12:53:24 +0100 diff --git a/live-build/auto/build b/live-build/auto/build index bfb99ee5..b8a94047 100755 --- a/live-build/auto/build +++ b/live-build/auto/build @@ -343,15 +343,137 @@ fi # in a binary hook case $PROJECT:$SUBPROJECT in ubuntu-core:system-image|ubuntu-desktop-next:system-image) - LB_LINUX_FLAVOURS=none - # rename to have the right prefix etc - mv device.tar.gz "$PREFIX.device.tar.gz" - - # azure specific tarball - if [ -e device-azure.tar.gz ]; then - mv device-azure.tar.gz "$PREFIX.azure.device.tar.gz" + # create device tarball (for snappy only atm) + if [ "$PROJECT:$SUBPROJECT" = "ubuntu-core:system-image" ]; then + case $ARCH in + armhf) + subarches="generic raspi2" + ;; + i386|amd64|arm64|powerpc|ppc64el) + subarches="generic" + ;; + esac + + # create a clean chroot + debootstrap --variant=minbase $LB_DISTRIBUTION chroot-device $LB_PARENT_MIRROR_BOOTSTRAP + + # ... but keep the PPA setup + cp -a chroot/etc/apt/* chroot-device/etc/apt/ + + # ... and move it in place + rm -rf chroot + mv chroot-device chroot + + for devarch in $subarches; do + (echo "I: creating $devarch device tarball for $ARCH" + HERE="$(pwd)" + set -x + + linux_package="linux-$devarch" + case $ARCH in + amd64) + linux_package="linux-signed-generic" + ;; + esac + + # make sure all virtual filesystems are available + lb chroot_proc install "$@" + lb chroot_sysfs install "$@" + lb chroot_devpts install "$@" + + # prepare the env + Chroot chroot "apt-get -y update" + Chroot chroot "apt-get -y purge linux-image-*" + Chroot chroot "apt-get -y autoremove" + rm -rf chroot/boot/initrd.img* chroot/boot/vmlinu?-* chroot/lib/modules/* \ + chroot/boot/abi-* chroot/boot/System.map-* chroot/boot/config-* + mkdir -p chroot/etc/initramfs-tools/conf.d + echo "COMPRESS=lzma" >chroot/etc/initramfs-tools/conf.d/snappy-device-tarball.conf + + # install needed packages and the kernel itself + Chroot chroot "apt-get -y install initramfs-tools-ubuntu-core linux-firmware xz-utils" + Chroot chroot "apt-get -y install $linux_package" + + # clean up + lb chroot_devpts remove "$@" + lb chroot_sysfs remove "$@" + lb chroot_proc remove "$@" + + # now build the actual device tarball + TMPDIR="$(mktemp -d)" + mkdir -p $TMPDIR/system/ + mkdir -p $TMPDIR/assets/ + + cd chroot + cp -ar --parent lib/modules/ $TMPDIR/system/ + cp -ar --parent lib/firmware/ $TMPDIR/system/ + + # new assets handling + if [ -f boot/vmlinu?-*.signed ]; then + kernel=boot/vmlinu?-*.signed + else + kernel=boot/vmlinu?-* + fi + + initrd=boot/initrd.img-* + + cp -ar $initrd $TMPDIR/assets/ + cp -ar $kernel $TMPDIR/assets/ + cp -ar boot/abi-* boot/System.map-* boot/config-* $TMPDIR/assets/ + + dtbs=$(find lib/firmware -type d -name 'device-tree' -print0) + if [ -n "$dtbs" ]; then + mv "$dtbs" $TMPDIR/assets/dtbs + fi + + # create hardware.yaml + # this assumes armhf == u-boot + # and all others grub + # common bits + cat > $TMPDIR/hardware.yaml << EOF +kernel: assets/$(basename $kernel) +initrd: assets/$(basename $initrd) +partition-layout: system-AB +EOF + # arch specific ones + if [ "$ARCH" = "armhf" ]; then + cat >> $TMPDIR/hardware.yaml << EOF +dtbs: assets/dtbs +bootloader: u-boot +EOF + else + cat >> $TMPDIR/hardware.yaml << EOF +bootloader: grub +EOF + fi + + # compress everything + cd $TMPDIR + tarname="device.tar.gz" + if [ "$devarch" = "raspi2" ];then + tarname="raspi2.$tarname" + fi + tar -c -z -f $HERE/$PREFIX.$tarname system assets hardware.yaml + + # show size of initrd and kernel in the log + ls -lh assets/ + + # dump the content list into the log + echo "I: device tarball contents for $PREFIX.$tarname:" + find . -type f + + # azure wants its own device tarball + if [ "$ARCH" = "amd64" ]; then + cp $HERE/$PREFIX.$tarname $HERE/$PREFIX.azure.$tarname + fi + cd $HERE) + done fi + + ls -l *device.tar.gz + + LB_LINUX_FLAVOURS=none ;; esac diff --git a/live-build/auto/config b/live-build/auto/config index 4e03cb52..9f032543 100755 --- a/live-build/auto/config +++ b/live-build/auto/config @@ -404,7 +404,7 @@ case $PROJECT in esac # generic kernel etc - KERNEL_FLAVOURS=generic + KERNEL_FLAVOURS=none case $ARCH in i386) add_package install grub-pc @@ -418,7 +418,7 @@ case $PROJECT in add_package install flash-kernel u-boot-tools ;; esac - OPTS="${OPTS:+$OPTS }--linux-packages=linux-image" + OPTS="${OPTS:+$OPTS }--linux-packages=none --initramfs=none" # contains the framework definition add_package install ubuntu-core-libs diff --git a/live-build/ubuntu-core/hooks/500-move-kernel-to-device-tar.binary b/live-build/ubuntu-core/hooks/500-move-kernel-to-device-tar.binary deleted file mode 100644 index a94f0cf1..00000000 --- a/live-build/ubuntu-core/hooks/500-move-kernel-to-device-tar.binary +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/sh -# -# move the kernel out into a new device tarfile with system/boot - -set -ex - -echo "I: Moving kernel into device tarball" - -HERE="$(pwd)" -TMPDIR="$(mktemp -d)" -ARCH=$(dpkg --print-architecture) -mkdir -p $TMPDIR/system/ -mkdir -p $TMPDIR/assets/ - -# cp files, we can't simply use tar --transform as it changes the symlink target -( - cd binary/boot/filesystem.dir - - cp -ar --parent lib/modules/ $TMPDIR/system/ - cp -ar --parent lib/firmware/ $TMPDIR/system/ - - # new assets handling - if [ -f boot/vmlinu?-*.signed ]; then - kernel=boot/vmlinu?-*.signed - else - kernel=boot/vmlinu?-* - fi - - initrd=boot/initrd.img-* - - cp -ar $initrd $TMPDIR/assets/ - cp -ar $kernel $TMPDIR/assets/ - cp -ar boot/abi-* boot/System.map-* $TMPDIR/assets/ - - dtbs=$(find lib/firmware -type d -name 'device-tree' -print0) - if [ -n "$dtbs" ]; then - mv "$dtbs" $TMPDIR/assets/dtbs - fi - - # create hardware.yaml - # this assumes armh == u-boot - # and all others grub - # common bits - cat > $TMPDIR/hardware.yaml << EOF -kernel: assets/$(basename $kernel) -initrd: assets/$(basename $initrd) -partition-layout: system-AB -EOF - -# arch specific ones -if [ "$ARCH" = "armhf" ]; then - cat >> $TMPDIR/hardware.yaml << EOF -dtbs: assets/dtbs -bootloader: u-boot -EOF -else - cat >> $TMPDIR/hardware.yaml << EOF -bootloader: grub -EOF -fi -) - -# and tar it up -( - cd $TMPDIR - tar -c -z -f $HERE/device.tar.gz system assets hardware.yaml -) - -# now build the azure device tarball -# this should go away once we have a custom grub.cfg for azure -cp $HERE/device.tar.gz $HERE/device-azure.tar.gz - -rm -rf $TMPDIR - -# remove files from the root filesystem -(cd binary/boot/filesystem.dir - rm -f boot/vmlinu?-* - rm -f boot/initrd.img-* - rm -f boot/abi-* - rm -f boot/System.map-* - rm -f initrd.img - rm -f vmlinu? - rm -rf lib/modules - rm -rf lib/firmware - # lp: #1468469 - rm -rf boot/config-* - rm -rf usr/share/doc/linux-image* - rm -rf var/lib/initramfs-tools/* - rm -rf lib/modprobe.d/blacklist_linux_*.conf -)