forked from ungleich-public/cdist
		
	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