aboutsummaryrefslogtreecommitdiff
path: root/create.sh
diff options
context:
space:
mode:
Diffstat (limited to 'create.sh')
-rwxr-xr-xcreate.sh132
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"