From 5be335ccdf8e53ccff940971ad9dc73ef72f32cb Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Tue, 13 Jan 2009 17:16:45 +0000 Subject: [PATCH] initramfs-init: extract apkovl also link mkiso to use the makefile --- make.alpine => alpine.mk | 7 ++--- initramfs-init | 52 ++++++++++++++++++++++++++++++-- mkiso | 65 +--------------------------------------- 3 files changed, 53 insertions(+), 71 deletions(-) rename make.alpine => alpine.mk (97%) mode change 100644 => 100755 mkiso diff --git a/make.alpine b/alpine.mk similarity index 97% rename from make.alpine rename to alpine.mk index 0438f3b..ea99e71 100644 --- a/make.alpine +++ b/alpine.mk @@ -80,7 +80,7 @@ INITFS_MODDIR := $(INITFS_DIR)/lib/modules/$(KERNEL) INITFS_MODDIRSTAMP := $(DESTDIR)/stamp.initfs.modules INITFS_APKS := $(UCLIBC_APK) $(BUSYBOX_APK) -INITFS_RAWBASEFILES := etc/mdev.conf etc/passwd etc/group etc/fstab +INITFS_RAWBASEFILES := etc/mdev.conf etc/passwd etc/group etc/fstab etc/modules INITFS_BASEFILES := $(addprefix $(INITFS_DIR)/, $(INITFS_RAWBASEFILES)) $(INITFS_DIRSTAMP): $(INITFS_APKS) @@ -88,8 +88,7 @@ $(INITFS_DIRSTAMP): $(INITFS_APKS) @rm -rf $(INITFS_DIR) @mkdir -p $(addprefix $(INITFS_DIR)/, \ dev proc sys sbin bin .modloop lib/modules \ - media/cdrom media/floppy media/usb \ - newroot/proc newroot/sys) + media/cdrom media/floppy media/usb newroot) @for apk in $(INITFS_APKS) ; do \ tar -C $(INITFS_DIR) -xzf $$apk ; \ done @@ -158,7 +157,7 @@ $(ISOLINUX_CFG): @echo "default linux" >>$(ISOLINUX_CFG) @echo "label linux" >>$(ISOLINUX_CFG) @echo " kernel /boot/vmlinuz" >>$(ISOLINUX_CFG) - @echo " append initrd=/boot/initramfs.gz alpine_dev=cdrom quiet" >>$(ISOLINUX_CFG) + @echo " append initrd=/boot/initramfs.gz alpine_dev=cdrom modules=floppy quiet" >>$(ISOLINUX_CFG) ISO_KERNEL := $(ISO_DIR)/boot/vmlinuz ISO_APKS := $(ISO_DIR)/apks diff --git a/initramfs-init b/initramfs-init index aa2da95..8996f23 100755 --- a/initramfs-init +++ b/initramfs-init @@ -1,4 +1,4 @@ -#!/bin/ash +#!/bin/sh VERSION=1.9.1-pre0 NEWROOT=/newroot @@ -36,6 +36,22 @@ scan_drivers() { fi } +find_ovl() { + local mnt="$1" + local ovl + local lines + + # look for apkovl's on mounted media + ovl=$( ls -1 "$mnt"/*.apkovl.tar.gz* 2>/dev/null ) || return 1 + lines=$(echo "$ovl" | wc -l) + + if [ $lines -gt 1 ] ; then + echo "ERROR: More than one apkovl file was found on $(basename $mnt). None will be read." >&2 + return 1 + fi + echo "$ovl" +} + # gotta start from somewhere :) echo "Starting Alpine $VERSION" @@ -74,9 +90,16 @@ mount -t devpts -o gid=5,mode=0620,noexec,nosuid devpts /dev/pts mount -t tmpfs -o nodev,nosuid,noexec shm /dev/shm eend $RC +/bin/sh # load available drivers to get access to modloop media ebegin "Loading boot drivers" [ "$MODULES" ] && modprobe $MODULES 2> /dev/null +if [ -f /etc/modules ] ; then + sed 's/\#.*//g' < /etc/modules | + while read module args; do + modprobe -q $module $args + done +fi scan_drivers scan_drivers eend 0 @@ -110,11 +133,27 @@ ebegin "Loading hardware drivers" scan_drivers eend 0 +# look for apkovl +for i in usb floppy cdrom; do + mount /media/$i 2>/dev/null || continue + ovl=$(find_ovl /media/$i) + [ -f "$ovl" ] && break + umount /media/$i 2>/dev/null +done + +if [ -f "$ovl" ]; then + ebegin "Loading user settings from $ovl" + tar -C $NEWROOT -zxf "$ovl" + eend $? + umount /media/$i 2>/dev/null + pkgs=$(sed 's/\#.*//' $NEWROOT/etc/lbu/packages.list 2>/dev/null) +fi + # install new root ebegin "Installing packages to root filesystem" mount -t tmpfs -o size=50M tmpfs $NEWROOT apk create --root /newroot -apk add --root /newroot --repository /media/cdrom/apks --quiet --progress +apk add --root /newroot --repository /media/cdrom/apks --quiet --progress $pkgs eend $? # switch over to new root @@ -125,4 +164,11 @@ cat /proc/mounts | while read DEV DIR TYPE OPTS ; do fi done sync -exec /bin/busybox switch_root $NEWROOT /sbin/init $KOPT_init_args || exec /bin/busybox sh + +if [ -x $NEWROOT/sbin/init ]; then + exec /bin/busybox switch_root $NEWROOT /sbin/init $KOPT_init_args +fi + +echo "initramfs emergency recovery shell launched" +exec /bin/busybox sh +reboot diff --git a/mkiso b/mkiso old mode 100644 new mode 100755 index 9c4684e..9eeab55 --- a/mkiso +++ b/mkiso @@ -1,66 +1,3 @@ #!/bin/sh -tmp=$PWD/tmp -aports=$PWD/../aports -target=alpine-test.iso - -initramfs=test.gz -modloop=modloop.cmg - -unapk() { - local dest="$1" - shift - while [ $# -gt 0 ]; do - tar -C "$dest" -zxf "$1" - shift - done - rm -f "$dest/.PKGINFO" -} - -link_or_copy() { - ln -f "$1" "$2" 2>/dev/null || cp "$1" "$2" -} - - -rm -r $tmp -mkdir -p $tmp/apks $tmp/isolinux -cp /usr/share/syslinux/isolinux.* $tmp/isolinux -cat >$tmp/isolinux/isolinux.cfg < Creating ISO image" -genisoimage -o $target -l -J -R \ - -b isolinux/isolinux.bin \ - -c isolinux/boot.cat \ - -no-emul-boot \ - -boot-load-size 4 \ - -boot-info-table \ - -quiet \ - $tmp - - +make -f alpine.mk