can generate initramfs from busybox

Signed-off-by: Nico Schottelius <nico@wurzel.schottelius.org>
remotes/origin/4.0-pre-not-stable
Nico Schottelius 10 years ago
parent f51a444012
commit 7ba6c0a44a
  1. 29
      hacking/add_kernel_isolinux.sh
  2. 0
      hacking/v1-debootstrap-pacstrap/arch_bootstrap.sh
  3. 0
      hacking/v1-debootstrap-pacstrap/debian_bootstrap.sh
  4. 0
      hacking/v2-initramfs-from-os/file_list_of_packages.sh
  5. 0
      hacking/v2-initramfs-from-os/filelist_from_package.sh
  6. 0
      hacking/v2-initramfs-from-os/filelist_to_dir.sh
  7. 24
      hacking/v3-busybox/add_kernel_isolinux.sh
  8. 8
      hacking/v3-busybox/all.sh
  9. 27
      hacking/v3-busybox/generate.sh
  10. 60
      hacking/v3-busybox/init

@ -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

@ -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

@ -0,0 +1,8 @@
#!/bin/sh
rm -rf preos
mkdir -p preos/boot
./generate.sh > preos/boot/initramfs
./add_kernel_isolinux.sh preos

@ -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

@ -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…
Cancel
Save