You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

207 lines
7.1 KiB

#!/bin/bash
# Create initramfs image
# Author: Tomas M <http://www.linux-live.org/>
#
. ../config
INITRAMFS=/tmp/$LIVEKITNAME-initramfs-$$
# copy file to initramfs tree, including
# all library dependencies (as shown by ldd)
# $1 = file to copy (full path)
copy_including_deps() {
# if source doesn't exist or target exists, do nothing
if [ ! -e "$1" -o -e "$INITRAMFS"/"$1" ]; then
return
fi
cp -R --parents "$1" "$INITRAMFS"
if [ -L "$1" ]; then
DIR="$(dirname "$1")"
LNK="$(readlink "$1")"
copy_including_deps "$(
cd "$DIR"
realpath -s "$LNK"
)"
fi
ldd "$1" 2>/dev/null | sed -r "s/.*=>|[(].*//g" | sed -r "s/^\\s+|\\s+\$//" |
while read LIB; do
copy_including_deps "$LIB"
done
for MOD in $(find "$1" -type f | grep .ko); do
for DEP in $(cat /$LMK/modules.dep | fgrep /$(basename $MOD):); do
copy_including_deps "/$LMK/$DEP"
done
done
shift
if [ "$1" != "" ]; then
copy_including_deps "$@"
fi
}
rm -Rf $INITRAMFS
mkdir -p $INITRAMFS/{bin,dev,etc,lib,lib64,mnt,opt,proc,root,run,sys,tmp,usr,var/log}
ln -s bin $INITRAMFS/sbin
#cp static/bash $INITRAMFS/bin
cp static/busybox $INITRAMFS/bin
cp static/eject $INITRAMFS/bin
cp static/mount.dynfilefs $INITRAMFS/bin/@mount.dynfilefs
cp static/mount.httpfs2 $INITRAMFS/bin/@mount.httpfs2
cp static/mount.ntfs-3g $INITRAMFS/bin/@mount.ntfs-3g
cp static/blkid $INITRAMFS/bin
cp static/minios-configure $INITRAMFS/bin
chmod a+x $INITRAMFS/bin/*
$INITRAMFS/bin/busybox | grep , | grep -v Copyright | tr "," " " | while read LINE; do
for TOOL in $LINE; do
if [ ! -e $INITRAMFS/bin/$TOOL ]; then
ln -s busybox $INITRAMFS/bin/$TOOL
fi
done
done
rm -f $INITRAMFS/{s,}bin/init
mknod $INITRAMFS/dev/console c 5 1
mknod $INITRAMFS/dev/null c 1 3
mknod $INITRAMFS/dev/ram0 b 1 0
mknod $INITRAMFS/dev/tty1 c 4 1
mknod $INITRAMFS/dev/tty2 c 4 2
mknod $INITRAMFS/dev/tty3 c 4 3
mknod $INITRAMFS/dev/tty4 c 4 4
#copy_including_deps /usr/bin/strace
#copy_including_deps /usr/bin/lsof
copy_including_deps /$LMK/kernel/fs/aufs
copy_including_deps /$LMK/kernel/fs/overlayfs
copy_including_deps /$LMK/kernel/fs/ext2
copy_including_deps /$LMK/kernel/fs/ext3
copy_including_deps /$LMK/kernel/fs/ext4
copy_including_deps /$LMK/kernel/fs/fat
copy_including_deps /$LMK/kernel/fs/nls
copy_including_deps /$LMK/kernel/fs/fuse
copy_including_deps /$LMK/kernel/fs/isofs
copy_including_deps /$LMK/kernel/fs/ntfs
#copy_including_deps /$LMK/kernel/fs/reiserfs
copy_including_deps /$LMK/kernel/fs/squashfs
copy_including_deps /$LMK/kernel/fs/btrfs
copy_including_deps /$LMK/kernel/fs/xfs
# crc32c is needed for ext4, but I don't know which one, add them all, they are small
find /$LMK/kernel/ | grep crc32c | while read LINE; do
copy_including_deps $LINE
done
copy_including_deps /$LMK/kernel/drivers/staging/zsmalloc # needed by zram
copy_including_deps /$LMK/kernel/drivers/block/zram
copy_including_deps /$LMK/kernel/drivers/block/loop.*
: 'copy_including_deps /$LMK/kernel/drivers/block
copy_including_deps /$LMK/kernel/drivers/hv/hv_vmbus.*
copy_including_deps /$LMK/kernel/drivers/md/dm-mod.*
#copy_including_deps /$LMK/kernel/drivers/net/hyperv
#copy_including_deps /$LMK/kernel/drivers/net/ipvlan
copy_including_deps /$LMK/kernel/drivers/net/vmxnet3
#copy_including_deps /$LMK/kernel/drivers/net/wireguard
#copy_including_deps /$LMK/kernel/drivers/net/eql.*
#copy_including_deps /$LMK/kernel/drivers/net/geneve.*
#copy_including_deps /$LMK/kernel/drivers/net/macsec.*
copy_including_deps /$LMK/kernel/drivers/net/net_failover.*
copy_including_deps /$LMK/kernel/drivers/net/netconsole.*
copy_including_deps /$LMK/kernel/drivers/net/nlmon.*
copy_including_deps /$LMK/kernel/drivers/net/tap.*
copy_including_deps /$LMK/kernel/drivers/net/virtio_net.*
copy_including_deps /$LMK/kernel/drivers/net/vrf.*
copy_including_deps /$LMK/kernel/drivers/net/vsockmon.*
copy_including_deps /$LMK/kernel/drivers/net/vxlan.*
#copy_including_deps /$LMK/kernel/drivers/net/xen-netfront.*
copy_including_deps /$LMK/kernel/drivers/pci/controller
copy_including_deps /$LMK/kernel/drivers/pps/pps_core.*
copy_including_deps /$LMK/kernel/drivers/ptp/ptp.*
copy_including_deps /$LMK/kernel/drivers/scsi
copy_including_deps /$LMK/kernel/drivers/virtio/virtio.*
copy_including_deps /$LMK/kernel/drivers/virtio/virtio_mmio.*
copy_including_deps /$LMK/kernel/drivers/virtio/virtio_pci.*
copy_including_deps /$LMK/kernel/drivers/virtio/virtio_ring.*'
# usb drivers
copy_including_deps /$LMK/kernel/drivers/usb/storage/usb-storage.*
copy_including_deps /$LMK/kernel/drivers/usb/host
copy_including_deps /$LMK/kernel/drivers/usb/common
copy_including_deps /$LMK/kernel/drivers/usb/core
copy_including_deps /$LMK/kernel/drivers/hid/usbhid
copy_including_deps /$LMK/kernel/drivers/hid/hid.*
copy_including_deps /$LMK/kernel/drivers/hid/uhid.*
copy_including_deps /$LMK/kernel/drivers/hid/hid-generic.*
# disk and cdrom drivers
copy_including_deps /$LMK/kernel/drivers/cdrom
copy_including_deps /$LMK/kernel/drivers/scsi/sr_mod.*
copy_including_deps /$LMK/kernel/drivers/scsi/sd_mod.*
copy_including_deps /$LMK/kernel/drivers/scsi/scsi_mod.*
copy_including_deps /$LMK/kernel/drivers/scsi/sg.*
if [ "$CLOUD" = "true" ]; then
copy_including_deps /$LMK/kernel/drivers/virtio/virtio.*
copy_including_deps /$LMK/kernel/drivers/virtio/virtio_mmio.*
copy_including_deps /$LMK/kernel/drivers/virtio/virtio_pci.*
copy_including_deps /$LMK/kernel/drivers/virtio/virtio_ring.*
copy_including_deps /$LMK/kernel/drivers/scsi/vmw_pvscsi.*
copy_including_deps /$LMK/kernel/drivers/scsi/virtio_scsi.*
copy_including_deps /$LMK/kernel/drivers/block/virtio_blk.*
fi
copy_including_deps /$LMK/kernel/drivers/ata
copy_including_deps /$LMK/kernel/drivers/nvme
copy_including_deps /$LMK/kernel/drivers/mmc
# network support drivers
if [ "$NETWORK" = "true" ]; then
copy_including_deps /$LMK/kernel/drivers/net/ethernet
if [ "$CLOUD" = "true" ]; then
copy_including_deps /$LMK/kernel/drivers/net/vmxnet3
copy_including_deps /$LMK/kernel/drivers/net/virtio_net.*
fi
fi
# copy all custom-built modules
copy_including_deps /$LMK/updates
copy_including_deps /$LMK/modules.*
find $INITRAMFS -name "*.ko.gz" -exec gunzip {} \;
# trim modules.order file. Perhaps we could remove it entirely
MODULEORDER="$(
cd "$INITRAMFS/$LMK/"
find -name "*.ko" | sed -r "s:^./::g" | tr "\n" "|" | sed -r "s:[.]:.:g"
)"
cat $INITRAMFS/$LMK/modules.order | sed -r "s/.ko.gz\$/.ko/" | grep -E "$MODULEORDER"/foo/bar >$INITRAMFS/$LMK/_
mv $INITRAMFS/$LMK/_ $INITRAMFS/$LMK/modules.order
depmod -b $INITRAMFS $KERNEL
echo "root::0:0::/root:/bin/bash" >$INITRAMFS/etc/passwd
touch $INITRAMFS/etc/{m,fs}tab
cp init $INITRAMFS
chmod a+x $INITRAMFS/init
cp shutdown $INITRAMFS
chmod a+x $INITRAMFS/shutdown
ln -s ../init $INITRAMFS/bin/init
cp ../livekitlib $INITRAMFS/lib/
cp ../config $INITRAMFS/lib/
cp ../buildconfig $INITRAMFS/lib/
cp minios-modules.tar.xz $INITRAMFS/opt/
cd $INITRAMFS
find . -print | cpio -o -H newc 2>/dev/null | xz -f --extreme --check=crc32 >$INITRAMFS.img
echo $INITRAMFS.img
cd ..
rm -Rf $INITRAMFS