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…
	
	Add table
		Add a link
		
	
		Reference in a new issue