The ISO image generation logic has been split in multiple scripts.
This commit is contained in:
parent
bafad2d9e1
commit
1943629bb4
92
src/11_generate_overlay.sh
Executable file
92
src/11_generate_overlay.sh
Executable file
@ -0,0 +1,92 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "*** GENERATE OVERLAY BEGIN ***"
|
||||||
|
|
||||||
|
SRC_DIR=$(pwd)
|
||||||
|
|
||||||
|
# Remove the old ISO generation area if it exists.
|
||||||
|
echo "Removing old overlay area. This may take a while."
|
||||||
|
rm -rf work/isoimage_overlay
|
||||||
|
mkdir -p work/isoimage_overlay
|
||||||
|
cd work/isoimage_overlay
|
||||||
|
|
||||||
|
# Read the 'OVERLAY_TYPE' property from '.config'
|
||||||
|
OVERLAY_TYPE="$(grep -i ^OVERLAY_TYPE $SRC_DIR/.config | cut -f2 -d'=')"
|
||||||
|
|
||||||
|
# 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
|
||||||
|
# with the root folder on boot.
|
||||||
|
|
||||||
|
echo "Using sparse file for overlay."
|
||||||
|
|
||||||
|
# This is the BusyBox executable that we have already generated.
|
||||||
|
BUSYBOX=../rootfs/bin/busybox
|
||||||
|
|
||||||
|
# Create sparse image file with 1MB size. Note that this increases the ISO
|
||||||
|
# image size.
|
||||||
|
$BUSYBOX truncate -s 1M minimal.img
|
||||||
|
|
||||||
|
# Find available loop device.
|
||||||
|
LOOP_DEVICE=$($BUSYBOX losetup -f)
|
||||||
|
|
||||||
|
# Associate the available loop device with the sparse image file.
|
||||||
|
$BUSYBOX losetup $LOOP_DEVICE minimal.img
|
||||||
|
|
||||||
|
# Format the sparse image file with Ext2 file system.
|
||||||
|
$BUSYBOX mkfs.ext2 $LOOP_DEVICE
|
||||||
|
|
||||||
|
# Mount the sparse file in folder 'sparse".
|
||||||
|
mkdir sparse
|
||||||
|
$BUSYBOX mount minimal.img sparse
|
||||||
|
|
||||||
|
# Create the overlay folders.
|
||||||
|
mkdir -p sparse/rootfs
|
||||||
|
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
|
||||||
|
|
||||||
|
# Unmount the sparse file and delete the temporary folder.
|
||||||
|
$BUSYBOX umount sparse
|
||||||
|
rm -rf sparse
|
||||||
|
|
||||||
|
# Detach the loop device since we no longer need it.
|
||||||
|
$BUSYBOX losetup -d $LOOP_DEVICE
|
||||||
|
|
||||||
|
echo "Applying original ownership to all affected files and folders."
|
||||||
|
chown -R $(logname) .
|
||||||
|
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.
|
||||||
|
|
||||||
|
echo "Using folder structure for overlay."
|
||||||
|
|
||||||
|
# Create the overlay folders.
|
||||||
|
mkdir -p minimal/rootfs
|
||||||
|
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
|
||||||
|
else
|
||||||
|
echo "The ISO image will have no overlay structure."
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd $SRC_DIR
|
||||||
|
|
||||||
|
echo "*** GENERATE OVERLAY END ***"
|
@ -1,175 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# TODO - this shell script file needs serios refactoring since right now it does
|
|
||||||
# too many things:
|
|
||||||
#
|
|
||||||
# 1) Create proper overlay structure.
|
|
||||||
# 2) Prepare the actual ISO structure.
|
|
||||||
# 3) Generate the actual ISO image.
|
|
||||||
#
|
|
||||||
# Probably it's best to create separate shell scripts for each functionality.
|
|
||||||
|
|
||||||
echo "*** GENERATE ISO BEGIN ***"
|
|
||||||
|
|
||||||
SRC_DIR=$(pwd)
|
|
||||||
|
|
||||||
# Save the kernel installation directory.
|
|
||||||
KERNEL_INSTALLED=$SRC_DIR/work/kernel/kernel_installed
|
|
||||||
|
|
||||||
# Find the Syslinux build directory.
|
|
||||||
cd work/syslinux
|
|
||||||
cd $(ls -d *)
|
|
||||||
WORK_SYSLINUX_DIR=$(pwd)
|
|
||||||
cd $SRC_DIR
|
|
||||||
|
|
||||||
# Remove the old ISO file if it exists.
|
|
||||||
rm -f minimal_linux_live.iso
|
|
||||||
echo "Old ISO image file has been removed."
|
|
||||||
|
|
||||||
# Remove the old ISO generation area if it exists.
|
|
||||||
echo "Removing old ISO image work area. This may take a while..."
|
|
||||||
rm -rf work/isoimage
|
|
||||||
|
|
||||||
# This is the root folder of the ISO image.
|
|
||||||
mkdir work/isoimage
|
|
||||||
echo "Prepared new ISO image work area."
|
|
||||||
|
|
||||||
# Read the 'COPY_SOURCE_ISO' property from '.config'
|
|
||||||
COPY_SOURCE_ISO="$(grep -i ^COPY_SOURCE_ISO .config | cut -f2 -d'=')"
|
|
||||||
|
|
||||||
cd work/isoimage
|
|
||||||
|
|
||||||
# Now we copy the kernel.
|
|
||||||
cp $KERNEL_INSTALLED/kernel ./kernel.xz
|
|
||||||
|
|
||||||
# Now we copy the root file system.
|
|
||||||
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'=')"
|
|
||||||
|
|
||||||
# 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
|
|
||||||
# with the root folder on boot.
|
|
||||||
|
|
||||||
echo "Using sparse file for overlay."
|
|
||||||
|
|
||||||
# This is the BusyBox executable that we have already generated.
|
|
||||||
BUSYBOX=../rootfs/bin/busybox
|
|
||||||
|
|
||||||
# Create sparse image file with 1MB size. Note that this increases the ISO
|
|
||||||
# image size.
|
|
||||||
$BUSYBOX truncate -s 1M minimal.img
|
|
||||||
|
|
||||||
# Find available loop device.
|
|
||||||
LOOP_DEVICE=$($BUSYBOX losetup -f)
|
|
||||||
|
|
||||||
# Associate the available loop device with the sparse image file.
|
|
||||||
$BUSYBOX losetup $LOOP_DEVICE minimal.img
|
|
||||||
|
|
||||||
# Format the sparse image file with Ext2 file system.
|
|
||||||
$BUSYBOX mkfs.ext2 $LOOP_DEVICE
|
|
||||||
|
|
||||||
# Mount the sparse file in folder 'sparse".
|
|
||||||
mkdir sparse
|
|
||||||
$BUSYBOX mount minimal.img sparse
|
|
||||||
|
|
||||||
# Create the overlay folders.
|
|
||||||
mkdir -p sparse/rootfs
|
|
||||||
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
|
|
||||||
|
|
||||||
# Unmount the sparse file and delete the temporary folder.
|
|
||||||
$BUSYBOX umount sparse
|
|
||||||
rm -rf sparse
|
|
||||||
|
|
||||||
# Detach the loop device since we no longer need it.
|
|
||||||
$BUSYBOX losetup -d $LOOP_DEVICE
|
|
||||||
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.
|
|
||||||
|
|
||||||
echo "Using folder structure for overlay."
|
|
||||||
|
|
||||||
# Create the overlay folders.
|
|
||||||
mkdir -p minimal/rootfs
|
|
||||||
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
|
|
||||||
else
|
|
||||||
echo "The ISO image will have no overlay structure."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Copy the precompiled files 'isolinux.bin' and 'ldlinux.c32' in the ISO image
|
|
||||||
# root folder.
|
|
||||||
cp $WORK_SYSLINUX_DIR/bios/core/isolinux.bin .
|
|
||||||
cp $WORK_SYSLINUX_DIR/bios/com32/elflink/ldlinux/ldlinux.c32 .
|
|
||||||
|
|
||||||
# Create the ISOLINUX configuration file.
|
|
||||||
echo 'default kernel.xz initrd=rootfs.xz vga=ask' > ./syslinux.cfg
|
|
||||||
|
|
||||||
# Create UEFI start script.
|
|
||||||
mkdir -p efi/boot
|
|
||||||
cat << CEOF > ./efi/boot/startup.nsh
|
|
||||||
echo -off
|
|
||||||
echo Minimal Linux Live is starting...
|
|
||||||
\\kernel.xz initrd=\\rootfs.xz
|
|
||||||
CEOF
|
|
||||||
|
|
||||||
# Now we generate the ISO image file.
|
|
||||||
xorriso \
|
|
||||||
-as mkisofs \
|
|
||||||
-R \
|
|
||||||
-r \
|
|
||||||
-o ../minimal_linux_live.iso \
|
|
||||||
-b isolinux.bin \
|
|
||||||
-c boot.cat \
|
|
||||||
-input-charset UTF-8 \
|
|
||||||
-no-emul-boot \
|
|
||||||
-boot-load-size 4 \
|
|
||||||
-boot-info-table \
|
|
||||||
./
|
|
||||||
|
|
||||||
# Copy the ISO image to the root project folder.
|
|
||||||
cp ../minimal_linux_live.iso ../../
|
|
||||||
|
|
||||||
if [ "$(id -u)" = "0" ] ; then
|
|
||||||
# Apply ownership back to original owner for all affected files.
|
|
||||||
chown $(logname) ../../minimal_linux_live.iso
|
|
||||||
chown $(logname) ../../work/minimal_linux_live.iso
|
|
||||||
chown -R $(logname) .
|
|
||||||
echo "Applied original ownership to all affected files and folders."
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $SRC_DIR
|
|
||||||
|
|
||||||
cat << CEOF
|
|
||||||
|
|
||||||
#################################################################
|
|
||||||
# #
|
|
||||||
# ISO image file 'minimal_linux_live.iso' has been generated. #
|
|
||||||
# #
|
|
||||||
#################################################################
|
|
||||||
|
|
||||||
CEOF
|
|
||||||
|
|
||||||
echo "*** GENERATE ISO END ***"
|
|
@ -30,7 +30,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Delete folder with previously extracted Syslinux.
|
# Delete folder with previously extracted Syslinux.
|
||||||
echo "Removing SYSLINUX work area. This may take a while..."
|
echo "Removing SYSLINUX work area. This may take a while."
|
||||||
rm -rf ../work/syslinux
|
rm -rf ../work/syslinux
|
||||||
mkdir ../work/syslinux
|
mkdir ../work/syslinux
|
||||||
|
|
62
src/13_prepare_iso.sh
Executable file
62
src/13_prepare_iso.sh
Executable file
@ -0,0 +1,62 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "*** PREPARE ISO BEGIN ***"
|
||||||
|
|
||||||
|
SRC_DIR=$(pwd)
|
||||||
|
|
||||||
|
# Save the kernel installation directory.
|
||||||
|
KERNEL_INSTALLED=$SRC_DIR/work/kernel/kernel_installed
|
||||||
|
|
||||||
|
# Find the Syslinux build directory.
|
||||||
|
cd work/syslinux
|
||||||
|
cd $(ls -d *)
|
||||||
|
WORK_SYSLINUX_DIR=$(pwd)
|
||||||
|
cd $SRC_DIR
|
||||||
|
|
||||||
|
# Remove the old ISO generation area if it exists.
|
||||||
|
echo "Removing old ISO image work area. This may take a while."
|
||||||
|
rm -rf work/isoimage
|
||||||
|
|
||||||
|
# This is the root folder of the ISO image.
|
||||||
|
echo "Preparing new ISO image work area."
|
||||||
|
mkdir work/isoimage
|
||||||
|
|
||||||
|
cd work/isoimage
|
||||||
|
|
||||||
|
# Now we copy the kernel.
|
||||||
|
cp $KERNEL_INSTALLED/kernel ./kernel.xz
|
||||||
|
|
||||||
|
# Now we copy the root file system.
|
||||||
|
cp ../rootfs.cpio.xz ./rootfs.xz
|
||||||
|
|
||||||
|
# Now we copy the overlay content if it exists
|
||||||
|
if [ -d $SRC_DIR/work/isoimage_overlay \
|
||||||
|
-a ! "`ls $SRC_DIR/work/isoimage_overlay`" = "" ] ; then
|
||||||
|
|
||||||
|
echo "The ISO image will have overlay structure."
|
||||||
|
cp -r $SRC_DIR/work/isoimage_overlay/* .
|
||||||
|
else
|
||||||
|
echo "The ISO image will have no overlay structure."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Copy the precompiled files 'isolinux.bin' and 'ldlinux.c32' in the ISO image
|
||||||
|
# root folder.
|
||||||
|
cp $WORK_SYSLINUX_DIR/bios/core/isolinux.bin .
|
||||||
|
cp $WORK_SYSLINUX_DIR/bios/com32/elflink/ldlinux/ldlinux.c32 .
|
||||||
|
|
||||||
|
# Create the ISOLINUX configuration file.
|
||||||
|
echo 'default kernel.xz initrd=rootfs.xz vga=ask' > ./syslinux.cfg
|
||||||
|
|
||||||
|
# Create UEFI start script.
|
||||||
|
mkdir -p efi/boot
|
||||||
|
cat << CEOF > ./efi/boot/startup.nsh
|
||||||
|
echo -off
|
||||||
|
echo Minimal Linux Live is starting.
|
||||||
|
\\kernel.xz initrd=\\rootfs.xz
|
||||||
|
CEOF
|
||||||
|
|
||||||
|
cd $SRC_DIR
|
||||||
|
|
||||||
|
echo "*** PREPARE ISO END ***"
|
45
src/14_generate_iso.sh
Executable file
45
src/14_generate_iso.sh
Executable file
@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "*** GENERATE ISO BEGIN ***"
|
||||||
|
|
||||||
|
SRC_DIR=$(pwd)
|
||||||
|
|
||||||
|
if [ ! -d $SRC_DIR/work/isoimage ] ; then
|
||||||
|
echo "Cannot locate ISO image work folder. Cannot continue."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd $SRC_DIR/work/isoimage
|
||||||
|
|
||||||
|
# Now we generate the ISO image file.
|
||||||
|
xorriso \
|
||||||
|
-as mkisofs \
|
||||||
|
-R \
|
||||||
|
-r \
|
||||||
|
-o ../minimal_linux_live.iso \
|
||||||
|
-b isolinux.bin \
|
||||||
|
-c boot.cat \
|
||||||
|
-input-charset UTF-8 \
|
||||||
|
-no-emul-boot \
|
||||||
|
-boot-load-size 4 \
|
||||||
|
-boot-info-table \
|
||||||
|
./
|
||||||
|
|
||||||
|
# Copy the ISO image to the root project folder.
|
||||||
|
cp ../minimal_linux_live.iso ../../
|
||||||
|
|
||||||
|
cd $SRC_DIR
|
||||||
|
|
||||||
|
cat << CEOF
|
||||||
|
|
||||||
|
#################################################################
|
||||||
|
# #
|
||||||
|
# ISO image file 'minimal_linux_live.iso' has been generated. #
|
||||||
|
# #
|
||||||
|
#################################################################
|
||||||
|
|
||||||
|
CEOF
|
||||||
|
|
||||||
|
echo "*** GENERATE ISO END ***"
|
@ -10,5 +10,7 @@ set -e
|
|||||||
./08_prepare_bundles.sh
|
./08_prepare_bundles.sh
|
||||||
./09_generate_rootfs.sh
|
./09_generate_rootfs.sh
|
||||||
./10_pack_rootfs.sh
|
./10_pack_rootfs.sh
|
||||||
./12_generate_iso.sh
|
./11_generate_overlay.sh
|
||||||
./13_generate_image.sh
|
./13_prepare_iso.sh
|
||||||
|
./14_generate_iso.sh
|
||||||
|
./15_generate_image.sh
|
||||||
|
Loading…
x
Reference in New Issue
Block a user