diff options
Diffstat (limited to 'create.sh')
-rwxr-xr-x | create.sh | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/create.sh b/create.sh new file mode 100755 index 0000000..a04ada7 --- /dev/null +++ b/create.sh @@ -0,0 +1,132 @@ +#!/bin/bash +echo "Make sure you have build-essentials, musl, kernel-headers-musl, grub, libisoburn(xorriso), cpio and wget installed!" + +KERNEL_VERSION=5.8.2 +KERNEL_DIRECTORY=linux-$KERNEL_VERSION +KERNEL_ARCHIVE=$KERNEL_DIRECTORY.tar.xz +KERNEL_URL=https://www.kernel.org/pub/linux/kernel/v5.x/$KERNEL_ARCHIVE + +BUSYBOX_VERSION=1.32.0 +BUSYBOX_DIRECTORY=busybox-$BUSYBOX_VERSION +BUSYBOX_ARCHIVE=$BUSYBOX_DIRECTORY.tar.bz2 +BUSYBOX_URL=https://busybox.net/downloads/$BUSYBOX_ARCHIVE + +[[ ! -d ml-src ]] && mkdir ml-src +cd ml-src + +#DOWNLOAD SOURCE +[[ ! -f $KERNEL_ARCHIVE ]] && wget $KERNEL_URL +[[ ! -f $BUSYBOX_ARCHIVE ]] && wget $BUSYBOX_URL + +[[ ! -d $KERNEL_DIRECTORY ]] && tar xf $KERNEL_ARCHIVE +[[ ! -d $BUSYBOX_DIRECTORY ]] && tar xf $BUSYBOX_ARCHIVE + +#COMPILING +cd $KERNEL_DIRECTORY +[[ ! -f .config ]] && make defconfig +#Set OS name +sed -i "s/CONFIG_DEFAULT_HOSTNAME=\"(none)\"/CONFIG_DEFAULT_HOSTNAME=\"MatejaOS\"/" .config +make -j`nproc` +cp ./arch/x86/boot/bzImage ../vmlinux +cd .. + +cd $BUSYBOX_DIRECTORY +[[ ! -f .config ]] && make defconfig +#BusyBox static linking +sed -i "s/# CONFIG_STATIC is not set/CONFIG_STATIC=y/" .config +sed -i "s/gcc/musl-gcc/" Makefile +make -j`nproc` +cp busybox .. +cd .. + +#INITRAMFS +[[ ! -d initramfs-root ]] && mkdir initramfs-root +cd initramfs-root + +#Filesystem Hierarchy Standard +mkdir -p ./{bin,boot,dev,etc/{opt,sgml,X11,xml},home,lib,media,mnt,opt,sbin,srv,tmp,usr/{bin,include,lib,local,sbin,share,src},proc,root,run,sys,var/{cache,lib,lock,log,mail,opt,run,spool/mail,tmp}} + +#Basic Initramfs Directory Structure +#mkdir --parents ./{bin,dev,etc,lib,lib64,mnt/root,proc,root,sbin,sys} + +#Link tools to busybox +cd bin +cp ../../busybox . +for i in `./busybox --list` +do + ln -s busybox $i +done +cd .. + +#initramfs init script +cat > ./init << EOF +#!/bin/sh + +mount -t proc proc /proc +mount -t sysfs sysfs /sys + +#Disable kernel messages +echo 0 > /proc/sys/kernel/printk + +#Dynamic devices +mdev -s + +echo 1 > /proc/sys/kernel/sysrq + +echo "Welcome to MatejaOS!" + +echo "You can turn off the system using SysRq." +echo "echo s > /proc/sysrq-trigger" +echo "echo o > /proc/sysrq-trigger" + +while true +do + #Job control for BusyBox shell + setsid cttyhack sh + sleep 1 +done + +##FOR FUTURE USE (SWITCH ROOT TO HARD DRIVE) +#mkdir /mnt/root +#rescue_shell() { +# echo "Something went wrong. Dropping to a shell." +# exec sh +#} +#cmdline() { +# local value +# value=" $(cat /proc/cmdline) " +# value="${value##* ${1}=}" +# value="${value%% *}" +# [ "${value}" != "" ] && echo "${value}" +#} +## Mount the root filesystem. +#mount -o ro $(findfs $(cmdline root)) /mnt/root || rescue_shell +## Clean up. +#umount /proc +#umount /sys +## Switch to hard drive +#exec switch_root /mnt/root /sbin/init +EOF +chmod +x init + +#create initramfs +find . | cpio --create --format=newc > ../initramfs + +cd .. + +#CREATE ISO +mkdir -p iso-dir/boot/grub +cp vmlinux initramfs iso-dir/boot/ +cat > iso-dir/boot/grub/grub.cfg << EOF +set timeout=3 +set default=0 +menuentry 'MatejaOS' { + linux /boot/vmlinux + initrd /boot/initramfs +} +EOF +grub-mkrescue -o ../ml.iso iso-dir + +echo "Finished!" +echo "You can boot the iso file with command:" +echo "qemu-system-x86_64 -m 512 -cdrom ml.iso -boot d" |