diff --git a/initramfs/init b/initramfs/init index f7549a2..f221d58 100644 --- a/initramfs/init +++ b/initramfs/init @@ -2,53 +2,30 @@ # Initial script for Linux Live Kit # Author: Tomas M -export PATH=.:/:/usr/sbin:/usr/bin:/sbin:/bin - -. /.config -. /linuxkitlib - -mount -n -t proc proc /proc -mount -n -t sysfs sysfs /sys -mount -n -o remount,rw rootfs / -ln -sf /proc/mounts /etc/mtab # this allows us to use umount -a - -# Don't print kernel messages to konsole any longer -echo "0" >/proc/sys/kernel/printk - -# Activate zram (auto-compression of RAM) -# Compressed RAM consumes 1/2 or even 1/4 of original size -# Setup static size of 500MB -echo "Setting dynamic RAM compression using ZRAM" -modprobe zram -echo $((512*1024*1024)) > /sys/block/zram0/disksize -mkswap /dev/zram0 -swapon /dev/zram0 -p 32767 -echo 100 > /proc/sys/vm/swappiness - MEMORYDIR=/memory UNIONDIR=/union -# Setup empty union -mkdir $MEMORYDIR -mkdir $UNIONDIR -mount -t ramfs ramfs $MEMORYDIR -mount -t aufs -o xino=$MEMORYDIR/xino,br=$MEMORYDIR none $UNIONDIR +export PATH=.:/:/usr/sbin:/usr/bin:/sbin:/bin -# find LiveKit data +. /.config +. /livekitlib +init_proc +init_devs +init_aufs +init_zram +init_union $MEMORYDIR $UNIONDIR + +# find data dir with filesystem bundles +DATA="$(find_data $LIVEKITNAME)" + +# copy to RAM if needed # add data to union +union_append_bundles "$DATA" +# possibly switch root # testing message -echo -echo -echo -echo " If you see this message, then the test passed OK." -echo " Thank you for testing. That's all for now :)" -echo " It's now safe to turn off your computer ..." -echo -echo -echo -echo +echo "If you see this message, then something went terribly wrong. Sorry!" /bin/bash diff --git a/initramfs/initramfs_create b/initramfs/initramfs_create index 811adb1..713baf9 100755 --- a/initramfs/initramfs_create +++ b/initramfs/initramfs_create @@ -35,19 +35,20 @@ copy_including_deps() rm -Rf $INITRAMFS mkdir -p $INITRAMFS/{bin,dev,etc,lib,lib64,mnt,proc,root,run,sbin,sys,tmp,usr,var/log} -modprobe zram -copy_including_deps /dev/zram0 +#tar -C $INITRAMFS -xf initrd-tree.tar.gz +#rm $INITRAMFS/* 2>/dev/null # only files +#copy_including_deps /lib64/libc.so.* +#copy_including_deps /lib64/libm.so.* -copy_including_deps /dev/console /dev/null /dev/fb0 /dev/zero copy_including_deps /dev/ram /dev/systty /dev/fuse copy_including_deps /dev/tty /dev/tty? -copy_including_deps /bin/bash /bin/mount /bin/mkdir +copy_including_deps /bin/bash /bin/mount /bin/umount /bin/mkdir copy_including_deps /bin/ln /bin/cat /bin/ls /bin/free copy_including_deps /sbin/blkid /sbin/swapon /sbin/mkswap /sbin/modprobe copy_including_deps /bin/grep /bin/egrep /bin/cut /bin/tr copy_including_deps /sbin/lsmod copy_including_deps /sbin/fdisk - +copy_including_deps /bin/uname copy_including_deps /usr/bin/vi copy_including_deps /usr/bin/strace @@ -71,4 +72,4 @@ find . -print | cpio -o -H newc 2>/dev/null | gzip -f --best >$INITRAMFS.img echo $INITRAMFS.img cd .. -#rm -Rf $INITRAMFS +rm -Rf $INITRAMFS diff --git a/livekitlib b/livekitlib index e2d5d53..62d02a5 100644 --- a/livekitlib +++ b/livekitlib @@ -97,3 +97,92 @@ create_bundle() mksquashfs "$1" "$2" -comp xz -b 512K $3 $4 $5 $6 $7 $8 $9>/dev/null } + +# mount virtual filesystems like proc etc +# +init_proc() +{ + debug_log "vfs_mount_init" + mount -n -t proc proc /proc + echo "0" >/proc/sys/kernel/printk + mount -n -t sysfs sysfs /sys + mount -n -o remount,rw rootfs / + ln -sf /proc/mounts /etc/mtab +} + +# make sure some devices are there +init_devs() +{ + if [ ! -e /dev/console ]; then mknod dev/console c 5 1; fi + if [ ! -e /dev/null ]; then mknod dev/null c 1 3; fi + if [ ! -e /dev/zram0 ]; then mknod dev/zram0 b 252 0; fi +} + +# Activate zram (auto-compression of RAM) +# Compressed RAM consumes 1/2 or even 1/4 of original size +# Setup static size of 500MB +# +init_zram() +{ + debug_log "init_zram" + echo "Setting dynamic RAM compression using ZRAM" + modprobe zram + echo 536870912 > /sys/block/zram0/disksize # 512MB + mkswap /dev/zram0 + swapon /dev/zram0 -p 32767 + echo 100 > /proc/sys/vm/swappiness +} + +# load the AUFS kernel module if needed +# +init_aufs() +{ + debug_log "init_aufs" + # TODO maybe check here if aufs support is working at all + # and procude useful error message if user has no aufs + modprobe aufs 2>/dev/null +} + +# Setup empty union +# $1 = memory directory (tmpfs will be mounted there) +# $2 = union directory where to mount the union +# +init_union() +{ + debug_log "init_union" + mkdir -p "$1" + mkdir -p "$2" + mount -t ramfs ramfs "$1" + mount -t aufs -o xino=$1/xino,br=$1 none "$2" +} + +# Find LIVEKIT data by mounting all devices +# If found, retain mounted disk +find_data() +{ + debug_log "find_data" + + local DEVICE FS MNT + MNT=/mnt + + blkid -o device | while read DEVICE; do + FS=$(blkid -s TYPE -o value $DEVICE) + # TODO: if fs = ntfs then mount ntfs-3g, if fs=dos then mount vfat + mount -o ro "$DEVICE" $MNT -t "$FS" 2>/dev/null + if [ -d "$MNT/$LIVEKITNAME" ]; then + echo $MNT + return + fi + umount $MNT 2>/dev/null + done +} + +mount_device() +{ + echo "A" +} + +union_append_bundles() +{ + echo "B" +} \ No newline at end of file