can generate initramfs from busybox
Signed-off-by: Nico Schottelius <nico@wurzel.schottelius.org>
This commit is contained in:
parent
f51a444012
commit
7ba6c0a44a
10 changed files with 119 additions and 29 deletions
|
@ -1,29 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# FIXME: Write cdist type / explorer that finds
|
|
||||||
# package for a file, distro independent
|
|
||||||
|
|
||||||
if [ "$#" -ne 1 ]; then
|
|
||||||
echo "$0 dir-out"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
dir=$1; shift
|
|
||||||
boot=$dir/boot
|
|
||||||
|
|
||||||
mkdir -p "$boot"
|
|
||||||
cp /boot/vmlinuz-linux \
|
|
||||||
/boot/initramfs-linux-fallback.img \
|
|
||||||
/usr/lib/syslinux/bios/isolinux.bin \
|
|
||||||
"$boot"
|
|
||||||
|
|
||||||
cp /usr/lib/syslinux/bios/ldlinux.c32 \
|
|
||||||
"$dir"
|
|
||||||
|
|
||||||
cat > "$dir/isolinux.cfg" << eof
|
|
||||||
default preos
|
|
||||||
label preos
|
|
||||||
title cdist PreOS
|
|
||||||
linux /boot/vmlinuz-linux
|
|
||||||
initrd /boot/initramfs-linux-fallback.img
|
|
||||||
eof
|
|
24
hacking/v3-busybox/add_kernel_isolinux.sh
Executable file
24
hacking/v3-busybox/add_kernel_isolinux.sh
Executable file
|
@ -0,0 +1,24 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# FIXME: distro specific kernel location
|
||||||
|
|
||||||
|
if [ "$#" -ne 1 ]; then
|
||||||
|
echo "$0 dir-out"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
dir=$1; shift
|
||||||
|
boot=$dir/boot
|
||||||
|
|
||||||
|
mkdir -p "$boot"
|
||||||
|
cp /boot/vmlinuz-linux "$boot/linux"
|
||||||
|
cp /usr/lib/syslinux/bios/isolinux.bin "$boot"
|
||||||
|
cp /usr/lib/syslinux/bios/ldlinux.c32 "$dir"
|
||||||
|
|
||||||
|
cat > "$dir/isolinux.cfg" << eof
|
||||||
|
default preos
|
||||||
|
label preos
|
||||||
|
title cdist PreOS
|
||||||
|
linux /boot/linux
|
||||||
|
initrd /boot/initramfs
|
||||||
|
eof
|
8
hacking/v3-busybox/all.sh
Executable file
8
hacking/v3-busybox/all.sh
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
rm -rf preos
|
||||||
|
mkdir -p preos/boot
|
||||||
|
|
||||||
|
./generate.sh > preos/boot/initramfs
|
||||||
|
./add_kernel_isolinux.sh preos
|
||||||
|
|
27
hacking/v3-busybox/generate.sh
Executable file
27
hacking/v3-busybox/generate.sh
Executable file
|
@ -0,0 +1,27 @@
|
||||||
|
#!/bin/sh
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
|
||||||
|
initramfs_dir=$(mktemp -d /tmp/cdist-preos.XXXXXXX)
|
||||||
|
# initramfs_dir=$1
|
||||||
|
|
||||||
|
for dir in bin sbin etc proc sys newroot; do
|
||||||
|
mkdir -p ${initramfs_dir}/$dir
|
||||||
|
done
|
||||||
|
touch ${initramfs_dir}/etc/mdev.conf
|
||||||
|
|
||||||
|
cp init "${initramfs_dir}/init"
|
||||||
|
cp $(which busybox) "${initramfs_dir}/bin"
|
||||||
|
ln -fs busybox "${initramfs_dir}/bin/sh"
|
||||||
|
|
||||||
|
cd "${initramfs_dir}"
|
||||||
|
find . | cpio -H newc -o | gzip
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
# TODO:
|
||||||
|
# - Kernel modules
|
||||||
|
# - ssh
|
||||||
|
# - various mkfs
|
||||||
|
# - libs
|
||||||
|
|
60
hacking/v3-busybox/init
Normal file
60
hacking/v3-busybox/init
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
#Mount things needed by this script
|
||||||
|
mount -t proc proc /proc
|
||||||
|
mount -t sysfs sysfs /sys
|
||||||
|
|
||||||
|
#Disable kernel messages from popping onto the screen
|
||||||
|
echo 0 > /proc/sys/kernel/printk
|
||||||
|
|
||||||
|
#Create all the symlinks to /bin/busybox
|
||||||
|
busybox --install -s
|
||||||
|
|
||||||
|
#Create device nodes
|
||||||
|
mknod /dev/null c 1 3
|
||||||
|
mknod /dev/tty c 5 0
|
||||||
|
mdev -s
|
||||||
|
|
||||||
|
#Function for parsing command line options with "=" in them
|
||||||
|
# get_opt("init=/sbin/init") will return "/sbin/init"
|
||||||
|
get_opt() {
|
||||||
|
echo "$@" | cut -d "=" -f 2
|
||||||
|
}
|
||||||
|
|
||||||
|
#Defaults
|
||||||
|
init="/sbin/init"
|
||||||
|
root="/dev/hda1"
|
||||||
|
|
||||||
|
#Process command line options
|
||||||
|
for i in $(cat /proc/cmdline); do
|
||||||
|
case $i in
|
||||||
|
root\=*)
|
||||||
|
root=$(get_opt $i)
|
||||||
|
;;
|
||||||
|
init\=*)
|
||||||
|
init=$(get_opt $i)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
exec sh
|
||||||
|
|
||||||
|
# Skipping the rest
|
||||||
|
|
||||||
|
#Mount the root device
|
||||||
|
mount "${root}" /newroot
|
||||||
|
|
||||||
|
#Check if $init exists and is executable
|
||||||
|
if [[ -x "/newroot/${init}" ]] ; then
|
||||||
|
#Unmount all other mounts so that the ram used by
|
||||||
|
#the initramfs can be cleared after switch_root
|
||||||
|
umount /sys /proc
|
||||||
|
|
||||||
|
#Switch to the new root and execute init
|
||||||
|
exec switch_root /newroot "${init}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#This will only be run if the exec above failed
|
||||||
|
echo "Failed to switch_root, dropping to a shell"
|
||||||
|
exec sh
|
Loading…
Reference in a new issue