125 lines
3.0 KiB
Bash
Executable File
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 "$@"
|