From 3b8ad1593a12bef4e3e2d9ab240b0fba16093199 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Sat, 1 Jan 2011 23:00:49 +0100 Subject: initial version --- .gitignore | 4 ++++ Makefile | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ bin/sh | 1 + dev/vc/0 | 1 + etc/kmap-de | Bin 0 -> 2823 bytes init | 47 +++++++++++++++++++++++++++++++++++++++++++++ root/.keep | 0 7 files changed, 115 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 120000 bin/sh create mode 120000 dev/vc/0 create mode 100644 etc/kmap-de create mode 100755 init create mode 100644 root/.keep diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c19e1c --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.root-done +initramfs +initramfs.cpio +root/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b17e9a7 --- /dev/null +++ b/Makefile @@ -0,0 +1,62 @@ +CONTENT=/sbin/lvm /sbin/vgchange /sbin/vgscan /bin/busybox init /dev/console etc/kmap-de +CONTENT-LINKS=bin/sh +CONTENT-MARKER=$(addprefix .root-done/,$(CONTENT)) +DATE=$(shell date +%F_%T) + +all: initramfs + +initramfs: initramfs.cpio + gzip > initramfs < initramfs.cpio + +initramfs.cpio: .root-done/.complete + cd root ;\ + find . | cpio -H newc -o > ../initramfs.cpio + +.root-done/.complete: $(CONTENT-MARKER) .root-done/.links + touch .root-done/.complete + +$(CONTENT-MARKER): .root-done/%: % + -ldd $* | cut -d" " -f 3 | while read i ; do \ + if [ -n "$$i" ]; then \ + mkdir -p $$(dirname $$i) ;\ + cp --parents $$i root/ ;\ + fi ;\ + done + + -ldd $* | grep -v "=>" | cut -f1 -d" " | while read i ; do \ + if [ -n "$$i" ]; then \ + mkdir -p $$(dirname $$i) ;\ + cp --parents $$i root/ ;\ + fi ;\ + done + + mkdir -p $(shell dirname $*) + cp -a --parents $* root/ + + mkdir -p $(dir .root-done/$*) + touch .root-done/$* + +.root-done/.links: Makefile + for i in $(CONTENT-LINKS) ; do \ + mkdir -p $$(dirname $$i) ;\ + cp -a --parents $$i root/ ;\ + done + + touch .root-done/.static + +$(CONTENT-MARKER): Makefile + +clean: + ${RM} initramfs initramfs.cpio + ${RM} -r root/* + ${RM} -r .root-done/ + +install: + if [ ! -d "/boot/grub" ]; then \ + mount /boot ;\ + fi + + if [ -r /boot/initramfs ]; then \ + mv /boot/initramfs /boot/initramfs-$(DATE) ;\ + fi + cp initramfs /boot/initramfs diff --git a/bin/sh b/bin/sh new file mode 120000 index 0000000..c3fa810 --- /dev/null +++ b/bin/sh @@ -0,0 +1 @@ +busybox \ No newline at end of file diff --git a/dev/vc/0 b/dev/vc/0 new file mode 120000 index 0000000..bea71cc --- /dev/null +++ b/dev/vc/0 @@ -0,0 +1 @@ +../console \ No newline at end of file diff --git a/etc/kmap-de b/etc/kmap-de new file mode 100644 index 0000000..bdef348 Binary files /dev/null and b/etc/kmap-de differ diff --git a/init b/init new file mode 100755 index 0000000..1bbb6df --- /dev/null +++ b/init @@ -0,0 +1,47 @@ +#!/bin/sh + +# make dirs +/bin/busybox mkdir -p /dev /proc /sys /newroot + +# mount needed filesystems +mount -t proc none /proc +mount -t sysfs none /sys + +busybox --install -s +mdev -s + +# lvm stuff +vgscan +vgchange -a y lvm + +# process command line options +init="/sbin/init" +root="/dev/lvm/root" + +CMDLINE=$(cat /proc/cmdline) + +for i in ${CMDLINE}; do + case $i in + root\=*) + root=$(echo "$i" | cut -d "=" -f 2) + ;; + init\=*) + init=$(echo "$i" | cut -d "=" -f 2) + ;; + esac +done + +# switch to new root or fallback to sh +mount -r ${root} /newroot +if [ -x "/newroot/${init}" ]; then + umount /sys + umount /proc + exec /bin/busybox switch_root /newroot ${init} ${CMDLINE} +else + echo "Something went wrong..." + echo "After fixing it you may want to execute:" + echo "exec /bin/busybox switch_root /newroot ${init} ${CMDLINE}" + + loadkmap < /etc/kmap-de + exec /bin/sh +fi diff --git a/root/.keep b/root/.keep new file mode 100644 index 0000000..e69de29 -- cgit v1.2.3