delphinium-sdk/blends/devuan-minimal-live/beowulf/scripts/create_initrd.sh
2020-11-13 13:52:11 +01:00

264 lines
5.8 KiB
Bash
Executable File

#!/bin/bash
# ----------------------------------------------------------------------
#
# This file is part of microdevuan, a set of scripts to create minimal
# devuan live images
#
# ----------------------------------------------------------------------
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# ----------------------------------------------------------------------
#
# (c) KatolaZ <katolaz@freaknet.org> (2016)
#
# ----------------------------------------------------------------------
####
##
## This will create a minimal initrd without too much garbage
##
## KatolaZ -- 2016-05-14
##
##
if [ $# -le 3 ]; then
echo "Usage: $0 <initrd_orig> <initrd_new> <initrd_compression> <initrd_micro>"
exit 1
fi
####
##
## Config options --
##
OLDPWD=`pwd`
INITRD_ORIG=$1
INITRD_NEW=$2
INITRD_COMPR=$3
INITRD_MICRO=$4
WORK_DIR=/tmp/initrd_new
####
##
## unpack the current initrd image
##
if [ ! -d ${WORK_DIR} ]; then
mkdir ${WORK_DIR}
else
rm -rf ${WORKDIR}/*
fi
####
##
## Determine how the original initrd was compressed...
##
INITRD_FILE=`file -L ${INITRD_ORIG}`
if [ `echo ${INITRD_FILE} | grep gzip | wc -l` == 1 ]; then
INITRD_UNCOMPRESS=zcat;
elif [ `echo ${INITRD_FILE} | grep bzip2 | wc -l` == 1 ]; then
INITRD_UNCOMPRESS=bzcat;
elif [ `echo ${INITRD_FILE} | grep " xz " | wc -l` == 1 ]; then
INITRD_UNCOMPRESS=xzcat;
else
echo "Unable to determine the format of ${INITRD_ORIG} -- Aborting!!!"
exit 1;
fi
echo -n "===> Uncompressing the original init using ${INITRD_UNCOMPRESS}..."
cd ${WORK_DIR}; `${INITRD_UNCOMPRESS} ${INITRD_ORIG} | cpio -id`
echo "done!"
MODULE_DIRS=$(ls lib/modules/)
####
##
## Remove unnecessary ethernet modules -- we already know
## that the root partition is not over nfs...
##
for M in ${MODULE_DIRS}; do
echo "===> Removing drivers for kernel version ${M} <==="
MODULE_DIR="lib/modules/${M}/kernel"
echo -n "===> Removing unnecessary network drivers..."
##rm -rf ${MODULE_DIR}/drivers/net/ethernet/*
rm -rf ${MODULE_DIR}/drivers/net/*
echo "done!"
####
##
## Remove unnecessary filesystem support
##
##
echo -n "===> Removing unnecessary filesystems drivers..."
##rm -rf ${MODULE_DIR}/fs/nfs
rm -rf ${MODULE_DIR}/fs/xfs
rm -rf ${MODULE_DIR}/fs/btrfs
##rm -rf ${MODULE_DIR}/fs/ext4
##rm -rf ${MODULE_DIR}/fs/fat
rm -rf ${MODULE_DIR}/fs/fuse
rm -rf ${MODULE_DIR}/fs/hfs
rm -rf ${MODULE_DIR}/fs/hfsplus
rm -rf ${MODULE_DIR}/fs/reiserfs
rm -rf ${MODULE_DIR}/fs/ntfs
rm -rf ${MODULE_DIR}/fs/jfs
rm -rf ${MODULE_DIR}/fs/jffs2
rm -rf ${MODULE_DIR}/fs/udf
##rm -rf ${MODULE_DIR}/fs/nls
rm -rf ${MODULE_DIR}/fs/nfs_common
echo "done!"
####
##
## Remove the lftp and qla2xxx drivers (FibreChannel)
##
echo -n "===> Removing unnecessary SCSI drivers..."
rm -rf ${MODULE_DIR}/drivers/scsi/lpfc
rm -rf ${MODULE_DIR}/drivers/scsi/qla2xxx
rm -rf ${MODULE_DIR}/drivers/scsi/fnic
rm -rf ${MODULE_DIR}/drivers/scsi/csiostor
rm -rf ${MODULE_DIR}/drivers/scsi/isci
rm -rf ${MODULE_DIR}/drivers/scsi/cxgbi
rm -rf ${MODULE_DIR}/drivers/scsi/megaraid
rm -rf ${MODULE_DIR}/drivers/scsi/mpt2sas
rm -rf ${MODULE_DIR}/drivers/scsi/mpt3sas
rm -rf ${MODULE_DIR}/drivers/scsi/pm8001
rm -rf ${MODULE_DIR}/drivers/scsi/qla4xxx
rm -rf ${MODULE_DIR}/drivers/scsi/aic7xxx
rm -rf ${MODULE_DIR}/drivers/scsi/bfa
echo "done!"
echo -n "===> Removing unnecessary RAID drivers..."
rm -rf ${MODULE_DIR}/drivers/md
echo "done!"
## remove the gpu driver folder altogether
echo -n "===> Removing unnecessary GPU drivers..."
rm -rf ${MODULE_DIR}/drivers/gpu/
echo "done"
echo -n "===> Removing unnecessary firmware..."
rm -rf lib/firmware/
rm -rf ${MODULE_DIR}/firmware/
#rm -rf ${MODULE_DIR}/firmware/radeon/
#rm -rf ${MODULE_DIR}/firmware/cxgb4
echo "done"
done
##
## Remove unnecessary stuff in /bin and /sbin
##
echo -n "===> Removing unnecessary stuff in /bin and /sbin..."
#rm -rf bin/rsync bin/wget
#rm -rf sbin/acpid
#rm -rf lib/systemd
rm sbin/lvm
rm sbin/vgchange
rm sbin/mdadm
rm sbin/mdmon
rm sbin/dmsetup
echo "done!"
####
##
## Maybe we might remove everything in usr/lib
##
echo -n "===> Removing unnecessary libraries in /usr/lib..."
##rm -rf usr/lib/*
echo "done!"
####
##
##
## Set lvm not to use udev in initramfs to avoid boot delays.
##
sudo sed -i 's/multipath_component_detection = 1/multipath_component_detection = 0/' etc/lvm/lvm.conf
sudo sed -i 's/md_component_detection = 1/md_component_detection = 0/' etc/lvm/lvm.conf
sudo sed -i 's/udev_sync = 1/udev_sync = 0/' etc/lvm/lvm.conf
sudo sed -i 's/udev_rules = 1/udev_rules = 0/' etc/lvm/lvm.conf
####
##
## Now we create the micro initrd
##
cat <<EOF
*************************************************************************
** WARNING!!!! DO NOT INTERRUPT THE CREATION OF INITRD OR YOUR IMAGE **
** WILL COME OUT COMPLETELY BROKEN (AND YOU MIGHT NEED TO START FROM **
** SCRATCH!!!) **
*************************************************************************
EOF
echo -n "===> Creating new initrd '${INITRD_MICRO}' using ${INITRD_COMPR}..."
find . | cpio -H newc -o | `echo ${INITRD_COMPR}` > ${INITRD_MICRO}
echo -n "done!"
####
##
## Remove the directory
##
cd ${OLDPWD} && rm -rf ${WORK_DIR}
exit 0