minimal/src/generate_mll_image.sh

125 lines
3.0 KiB
Bash
Executable File

#!/bin/sh
set -e
SRC_DIR=$PWD
STATUS=xxx
TEMP_DIR=xxx
MLL_ISO=xxx
finalWords() {
cat << CEOF
##################################################################
# #
# Minimal Linux Live image 'mll_image.tgz' has been generated. #
# #
# You can import the MLL image in Docker like this: #
# #
# docker import mll_image.tgz minimal-linux-live:latest #
# #
# Then you can run MLL shell in Docker container like this: #
# #
# docker run -it minimal-linux-live /bin/sh #
# #
##################################################################
CEOF
}
cleanup() {
chmod -R ugo+rw $TEMP_DIR
rm -rf $TEMP_DIR
}
buildImage() {
rm -f $SRC_DIR/mll_image.tgz
cd $TEMP_DIR/image_root
tar -zcf $SRC_DIR/mll_image.tgz *
cd $SRC_DIR
}
prepareImage() {
mkdir $TEMP_DIR/image_root
cp -r $TEMP_DIR/rootfs_extracted/* $TEMP_DIR/image_root
if [ -d $TEMP_DIR/iso_extracted/minimal/rootfs ] ; then
# Copy the overlay content.
# With '--remove-destination' all possibly existing soft links in
# '$TEMP_DIR/image_root' will be overwritten correctly.
cp -r --remove-destination $TEMP_DIR/iso_extracted/minimal/rootfs/* \
$TEMP_DIR/image_root
fi
}
extractRootfs() {
xz -d -k $TEMP_DIR/iso_extracted/rootfs.xz
mkdir $TEMP_DIR/rootfs_extracted
cp $TEMP_DIR/iso_extracted/rootfs $TEMP_DIR/rootfs_extracted
cd $TEMP_DIR/rootfs_extracted
cpio -F rootfs -i
rm -f rootfs
cd $SRC_DIR
}
extractISO() {
xorriso -osirrox on -indev $MLL_ISO -extract / $TEMP_DIR/iso_extracted
chmod ugo+rw $TEMP_DIR/iso_extracted
}
prepareTempDir() {
if [ -d mll_image ] ; then
chmod -R ugo+rw mll_image
rm -rf mll_image
fi
TEMP_DIR=$SRC_DIR/mll_image
}
checkPrerequsites() {
if [ "$1" = "" ] ; then
if [ -f minimal_linux_live.iso ] ; then
echo "Using 'minimal_linux_live.iso' ISO image."
MLL_ISO=minimal_linux_live.iso
else
echo "ISO image 'minimal_linux_live.iso' does not exist. Cannot continue."
exit 1
fi
elif [ ! -f "$1" ] ; then
echo "Cannot locate ISO image `$1`. Cannot continue."
exit 1
else
MLL_ISO=$1
fi
STATUS=OK
if [ "`which docker`" = "" ] ; then
STATUS=ERROR
echo "ERROR: Cannot locate 'docker'."
fi
if [ "`which xorriso`" = "" ] ; then
STATUS=ERROR
echo "ERROR: Cannot locate 'xorriso'."
fi
if [ "$STATUS" = "ERROR" ] ; then
echo "You have to install 'docker' and 'xorriso'. Cannot continue."
exit 1
fi
}
main() {
checkPrerequsites "$@"
prepareTempDir
extractISO
extractRootfs
prepareImage
buildImage
cleanup
finalWords
}
main "$@"