From bafad2d9e196af54db6466daa2b59ad9a94e3add Mon Sep 17 00:00:00 2001 From: Ivan Davidov Date: Wed, 29 Nov 2017 14:03:55 +0200 Subject: [PATCH] New feature - overlay bundles can be merged in the rootfs. The default merge location is the ISO image. Also added few fixes and enhancements to some other scripts. --- src/.config | 29 +++++++++++++++++++++-------- src/08_prepare_bundles.sh | 3 +++ src/09_generate_rootfs.sh | 28 +++++++++++++++++++--------- src/12_generate_iso.sh | 24 +++++++++++++++++------- src/13_generate_image.sh | 25 +++++++++++++++++++------ src/qemu.sh | 4 ++-- src/rebuild.sh | 2 +- 7 files changed, 82 insertions(+), 33 deletions(-) diff --git a/src/.config b/src/.config index cfaa070b9..5f8d2b572 100644 --- a/src/.config +++ b/src/.config @@ -194,8 +194,8 @@ USE_PREDEFINED_BUSYBOX_CONFIG=false # Define the overlay type to use. Possible values are 'sparse' and 'folder'. You # can use any other value, no value, or comment the property in order to disable -# it. Put your overlay content in the folder 'minimal_overlay' and it will be -# automatically merged with the root file system on boot. The build process +# it. Put your overlay content in the folder 'minimal_overlay/rootfs' and it will +# be automatically merged with the root file system on boot. The build process # creates either '/minimal.img/rootfs' or '/minimal/rootfs' (read below) and # this folder contains all overlay content in it. The build process also creates # '/minimal.img/work' or '/minimal/work'. This folder is used by the overlay @@ -216,12 +216,6 @@ USE_PREDEFINED_BUSYBOX_CONFIG=false # OVERLAY_TYPE=folder -# Use already downloaded source bundles instead of downloading them from -# internet. This is useful when you have already downloaded the sources and have -# no internet connection. Or if you want to share your version of "Minimal Linux -# Live" with predefined sources. -USE_LOCAL_SOURCE=false - # This property defines one or more additional overlay software pieces which # will be generated and placed in the 'work/src/minimal_overlay/rootfs' folder. # These software pieces will be visible and fully usable after boot. By default @@ -272,8 +266,27 @@ USE_LOCAL_SOURCE=false # The only default overlay bundle is 'mll_source'. It provides all MLL sources # in the directory '/usr/src'. Note that these sources will not work there # since MLL does not provide build tool chain. +# OVERLAY_BUNDLES=mll_source +# The location where the overlay bundle software will be stored. +# +# rootfs - all overlay bundles will be embedded in the initramfs. In this way +# the software will be available on boot but the initramfs size will +# grow significantly and MLL will require more RAM in order to boot. +# +# iso - all overlay bundles will be packed in the ISO image structure. The +# actual location depends on the value of the configuration property +# 'OVERLAY_TYPE'. +# +OVERLAY_LOCATION=iso + +# Use already downloaded source bundles instead of downloading them from +# internet. This is useful when you have already downloaded the sources and have +# no internet connection. Or if you want to share your version of "Minimal Linux +# Live" with predefined sources. +USE_LOCAL_SOURCE=false + # This property enables the standard penguin boot logo in the upper left corner # of the screen. The property is used in 'xx_build_kernel.sh'. The default value # is 'true' for demonstration purposes. diff --git a/src/08_prepare_bundles.sh b/src/08_prepare_bundles.sh index c96d17b9d..a09899465 100755 --- a/src/08_prepare_bundles.sh +++ b/src/08_prepare_bundles.sh @@ -6,6 +6,9 @@ SRC_DIR=$(pwd) echo "*** PREPARE OVERLAY BEGIN ***" +echo "Preparing overlay work area." +rm -rf $SRC_DIR/work/overlay* + # Read the 'OVERLAY_BUNDLES' property from '.config' OVERLAY_BUNDLES="$(grep -i ^OVERLAY_BUNDLES .config | cut -f2 -d'=')" diff --git a/src/09_generate_rootfs.sh b/src/09_generate_rootfs.sh index c974638d6..6458ef57d 100755 --- a/src/09_generate_rootfs.sh +++ b/src/09_generate_rootfs.sh @@ -3,7 +3,7 @@ set -e echo "*** GENERATE ROOTFS BEGIN ***" -SRC_ROOT=$(pwd) +SRC_DIR=$(pwd) # Remember the sysroot SYSROOT=$(pwd)/work/sysroot @@ -13,13 +13,13 @@ BUSYBOX_INSTALLED=$(pwd)/work/busybox/busybox_installed cd work -echo "Preparing initramfs work area..." +echo "Preparing rootfsfs work area." rm -rf rootfs -# Copy all BusyBox generated stuff to the location of our 'initramfs' folder. +# Copy all BusyBox generated stuff to the location of our 'rootfs' folder. cp -r $BUSYBOX_INSTALLED rootfs -# Copy all rootfs resources to the location of our 'initramfs' folder. +# Copy all rootfs resources to the location of our 'rootfs' folder. cp -r ../minimal_rootfs/* rootfs cd rootfs @@ -53,14 +53,24 @@ cp $SYSROOT/lib/libc.so.6 lib # Copy all necessary 'glibc' libraries to '/lib' END. strip -g \ - $SRC_ROOT/work/rootfs/bin/* \ - $SRC_ROOT/work/rootfs/sbin/* \ - $SRC_ROOT/work/rootfs/lib/* \ + $SRC_DIR/work/rootfs/bin/* \ + $SRC_DIR/work/rootfs/sbin/* \ + $SRC_DIR/work/rootfs/lib/* \ 2>/dev/null echo "Reduced the size of libraries and executables." -echo "The initramfs area has been generated." +# Read the 'OVERLAY_LOCATION' property from '.config' +OVERLAY_LOCATION="$(grep -i ^OVERLAY_LOCATION $SRC_DIR/.config | cut -f2 -d'=')" -cd $SRC_ROOT +if [ "$OVERLAY_LOCATION" = "rootfs" -a -d $SRC_DIR/work/overlay_rootfs ] ; then + echo "Merging overlay software in rootfs." + + cp -r $SRC_DIR/work/overlay_rootfs/* . + cp -r $SRC_DIR/minimal_overlay/rootfs/* . +fi + +echo "The rootfs area has been generated." + +cd $SRC_DIR echo "*** GENERATE ROOTFS END ***" diff --git a/src/12_generate_iso.sh b/src/12_generate_iso.sh index 8622c904e..a1d2f387e 100755 --- a/src/12_generate_iso.sh +++ b/src/12_generate_iso.sh @@ -50,7 +50,14 @@ cp ../rootfs.cpio.xz ./rootfs.xz # Read the 'OVERLAY_TYPE' property from '.config' OVERLAY_TYPE="$(grep -i ^OVERLAY_TYPE $SRC_DIR/.config | cut -f2 -d'=')" -if [ "$OVERLAY_TYPE" = "sparse" -a "$(id -u)" = "0" ] ; then +# Read the 'OVERLAY_LOCATION' property from '.config' +OVERLAY_LOCATION="$(grep -i ^OVERLAY_LOCATION $SRC_DIR/.config | cut -f2 -d'=')" + +if [ "$OVERLAY_LOCATION" = "iso" \ + -a "$OVERLAY_TYPE" = "sparse" \ + -a -d $SRC_DIR/work/overlay_rootfs \ + -a "$(id -u)" = "0" ] ; then + # Use sparse file as storage place. The above check guarantees that the whole # script is executed with root permissions or otherwise this block is skipped. # All files and folders located in the folder 'minimal_overlay' will be merged @@ -83,8 +90,8 @@ if [ "$OVERLAY_TYPE" = "sparse" -a "$(id -u)" = "0" ] ; then mkdir -p sparse/work # Copy the overlay content. - cp -r $SRC_DIR/overlay_rootfs/* sparse/rootfs/ - cp -r $SRC_DIR/minimal_overlay/rootfs/* sparse/rootfs/ + cp -r $SRC_DIR/overlay_rootfs/* sparse/rootfs + cp -r $SRC_DIR/minimal_overlay/rootfs/* sparse/rootfs # Unmount the sparse file and delete the temporary folder. $BUSYBOX umount sparse @@ -92,7 +99,10 @@ if [ "$OVERLAY_TYPE" = "sparse" -a "$(id -u)" = "0" ] ; then # Detach the loop device since we no longer need it. $BUSYBOX losetup -d $LOOP_DEVICE -elif [ "$OVERLAY_TYPE" = "folder" ] ; then +elif [ "$OVERLAY_LOCATION" = "iso" \ + -a "$OVERLAY_TYPE" = "folder" \ + -a -d $SRC_DIR/work/overlay_rootfs ] ; then + # Use normal folder structure for overlay. All files and folders located in # the folder 'minimal_overlay' will be merged with the root folder on boot. @@ -103,10 +113,10 @@ elif [ "$OVERLAY_TYPE" = "folder" ] ; then mkdir -p minimal/work # Copy the overlay content. - cp -rf $SRC_DIR/work/overlay_rootfs/* minimal/rootfs/ - cp -r $SRC_DIR/minimal_overlay/rootfs/* minimal/rootfs/ + cp -rf $SRC_DIR/work/overlay_rootfs/* minimal/rootfs + cp -r $SRC_DIR/minimal_overlay/rootfs/* minimal/rootfs else - echo "Generating ISO image with no overlay structure..." + echo "The ISO image will have no overlay structure." fi # Copy the precompiled files 'isolinux.bin' and 'ldlinux.c32' in the ISO image diff --git a/src/13_generate_image.sh b/src/13_generate_image.sh index 7fdd55d8b..3f7fb41da 100755 --- a/src/13_generate_image.sh +++ b/src/13_generate_image.sh @@ -11,13 +11,26 @@ rm -f mll_image.tgz rm -rf $SRC_DIR/work/mll_image mkdir -p $SRC_DIR/work/mll_image -# Copy the rootfs. -cp -r $SRC_DIR/work/rootfs/* \ - $SRC_DIR/work/mll_image +if [ -d $SRC_DIR/work/rootfs ] ; then + # Copy the rootfs. + cp -r $SRC_DIR/work/rootfs/* \ + $SRC_DIR/work/mll_image +else + echo "Cannot continue - rootfs is missing." + exit 1 +fi -# Copy the overlay area. -cp -r $SRC_DIR/work/src/minimal_overlay/rootfs/* \ - $SRC_DIR/work/mll_image +if [ -d $SRC_DIR/work/overlay_rootfs ] ; then + echo "Merging overlay software in image." + + # Copy the overlay area. + cp -r $SRC_DIR/work/overlay_rootfs/* \ + $SRC_DIR/work/mll_image + cp -r $SRC_DIR/minimal_overlay/rootfs/* \ + $SRC_DIR/work/mll_image +else + echo "MLL image will have no overlay software." +fi cd $SRC_DIR/work/mll_image diff --git a/src/qemu.sh b/src/qemu.sh index 0919a190e..57d0890b5 100755 --- a/src/qemu.sh +++ b/src/qemu.sh @@ -14,8 +14,8 @@ cmd="qemu-system-$(uname -m) -m 128M -cdrom minimal_linux_live.iso -boot d -vga if [ "$1" = "-hdd" -o "$1" = "-h" ] ; then echo "Starting QEMU with attached ISO image and hard disk." - $cmd -hda hdd.img + $cmd -hda hdd.img & else echo "Starting QEMU with attached ISO image." - $cmd + $cmd & fi diff --git a/src/rebuild.sh b/src/rebuild.sh index 4e9ad3291..ede001def 100755 --- a/src/rebuild.sh +++ b/src/rebuild.sh @@ -7,7 +7,7 @@ set -e # # Note: this will also rebuild all overlay bundles. -./08_prepare_src.sh +./08_prepare_bundles.sh ./09_generate_rootfs.sh ./10_pack_rootfs.sh ./12_generate_iso.sh