summaryrefslogblamecommitdiff
path: root/mkinitram
blob: 2ae21f80573429184192b47110729a2e8dfdd458 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11










                     











                                        














                                                            
                                    



                        
                                        

                         




                                            






                                                       



                                                       

                          
                                             


                                     


                                
                                               
 
                                                          


                                                                             

                                                                   
    
                                                      






                                          
#!/bin/sh

msg() {
	echo "==>" $@
}

die() {
	echo $@
	exit 1
}

unapk() {
	local dest="$1"
	shift
	while [ $# -gt 0 ]; do
		tar -C "$dest" -zxf "$1"
		shift
	done
	rm -f "$dest/.PKGINFO"
}


APKS=../aports/core/*/

image=$PWD/image
dest=$PWD/test.gz
init=init


kernel=$1
# if no kernel specified, then guess...
if [ -z "$kernel" ]; then
	kernel=$(ls /lib/modules 2>/dev/null | tail -n 1)
fi

if [ ! -d /lib/modules/$kernel ]; then
	die "modules dir /lib/modules/$kernel was not found"
fi
msg "mkinitram Using kernel $kernel"

# create empty image dir

rm -rf "$image"
mkdir -p "$image/dev" "$image/etc/rcS.d"

# unpack busybox and deps
unapk $image $APKS/uclibc-[0-9]*.apk \
	$APKS/busybox-[0-9]*.apk \
	$APKS/alpine-baselayout-[0-9]*.apk \
	$APKS/apk-tools-[0-9]*.apk

ln -sf /bin/busybox $image/init

# create misc devs and enable boot scripts
mknod $image/dev/null c 2 2
ln -s ../init.d/mdev $image/etc/rcS.d/S10mdev
ln -s ../init.d/hwdrivers $image/etc/rcS.d/S30hwdrivers
ln -s ../init.d/modutils $image/etc/rcS.d/S40modutils
ln -s ../init.d/modloop $image/etc/rcS.d/S50modloop
ln -s ../init.d/hwdrivers $image/etc/rcS.d/S60hwdrivers

mkdir $image/.modloop

# load those extra drivers
for i in ide-cd usb-storage ide-disk loop; do
	echo $i >> $image/etc/modules
done


# copy kernel modules
kmods=$image/lib/modules/$kernel
mkdir -p $kmods/kernel/drivers $kmods/kernel/fs

for i in acpi ata block ide scsi cdrom usb message hid; do
	cp -LpR /lib/modules/$kernel/kernel/drivers/$i $kmods/kernel/drivers/
done

for i in isofs vfat nls ext2 cramfs '*.ko'; do
	cp -LpR /lib/modules/$kernel/kernel/fs/$i $kmods/kernel/fs/
done
cp -LpR /lib/modules/$kernel/kernel/lib $kmods/kernel/

depmod $kernel -b $image
	

# generate the image
cd $image
find . | cpio -o -H newc | gzip -9 > $dest