diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2009-06-10 17:37:27 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2009-06-10 17:37:27 +0000 |
commit | eeed6ad60452fe436cf5bfd7bb90855e801befdc (patch) | |
tree | 9d6e90284b2177aed6ef0cc9e3e07be7d95b89fa /init.d | |
parent | 5b098951181f360627ff58b680da3d3987a7865f (diff) | |
download | alpine-baselayout-eeed6ad60452fe436cf5bfd7bb90855e801befdc.tar.bz2 alpine-baselayout-eeed6ad60452fe436cf5bfd7bb90855e801befdc.tar.xz |
init.d/modloop: added depend() and general cleanup for openrc
We also reuse already mounted device
Diffstat (limited to 'init.d')
-rw-r--r-- | init.d/modloop | 96 |
1 files changed, 58 insertions, 38 deletions
diff --git a/init.d/modloop b/init.d/modloop index ffa0bd9..13ec186 100644 --- a/init.d/modloop +++ b/init.d/modloop @@ -2,62 +2,82 @@ # script that will mount image with modules +depend() { + need dev + before checkfs fsck hwdrivers + keyword novserver +} + # read kernel options -for i in `cat /proc/cmdline` ; do - case $i in - *=*) eval KOPT_$i ;; - *) eval KOPT_$i=yes ;; - esac -done +init_KOPT() { + eval set -- `cat /proc/cmdline 2>/dev/null` + while [ $# -gt 0 ]; do + case "$1" in + *=*) eval "KOPT_${1%%=*}='${1#*=}'" ;; + *) eval "KOPT_$(echo $1 | sed 's: :_:g')=yes" ;; + esac + shift + done +} +find_mnt() { + local dev="$1" + local fsfile="$2" + awk "\$ == \"$dev\" {print \$2}\"" "$fsfile" 2>/dev/null +} + +# initialies: alpine_dev, alpine_mnt, alpine_fs, alpine_mounted find_media() { - ALPINE_DEV=${KOPT_alpine_dev%%:*} - ALPINE_MNT=`awk '/^\/dev\/'$ALPINE_DEV'/ { print $2 }' /etc/fstab` + init_KOPT + alpine_mounted= + alpine_dev=${KOPT_alpine_dev%%:*} + # first we check if alpine_dev is mounted and use this + alpine_mnt=$(find_mnt /dev/$alpine_dev /proc/mounts) + if [ -z "$alpine_mnt" ]; then + # then we check fstab + alpine_mnt=$(find_mnt /dev/$alpine_dev /etc/fstab) + else + alpine_mounted=yes + fi + # finally we fallback to /media/<devicename> + [ -z "$alpine_mnt" ] && alpine_mnt=/media/$alpine_dev } start() { - local rc= - local imgdir=$(dirname ${KOPT_BOOT_IMAGE:-""}) find_media - if [ -z "$ALPINE_DEV" ] ; then - ebegin "Skipping mount media with modules (specify with alpine_dev)" + if [ -z "$alpine_dev" ] ; then + ebegin "Skipping mount module loopback (specify with alpine_dev)" eend 0 return 0 fi - if [ -n "$KOPT_modloop" ]; then - CMG="$ALPINE_MNT/$KOPT_modloop" - else - CMG=$ALPINE_MNT/$imgdir/modloop.cmg - fi + modloop=${KOPT_modloop:-$KOPT_BOOT_IMAGE.cmg} + ebegin "Mounting loopback device for kernel modules" - modprobe loop >/dev/null 2>&1 &&\ - mount $ALPINE_MNT >/dev/null 2>&1 &&\ - mkdir -p /.modloop &&\ - if [ ! -f "$CMG" ] ; then - CMG=$ALPINE_MNT/$imgdir/modules.cmg - fi &&\ - mount -o loop,ro -t cramfs $CMG /.modloop - rc=$? - if [ "$rc" = 0 ]; then - rm -rf /lib/modules - ln -sf /.modloop/modules /lib + if [ -z "$alpine_mounted" ]; then + mount $alpine_dev $alpine_mnt 2>/dev/null fi + mkdir -p /.modloop /lib + + mount -o loop,ro -t cramfs $modloop /.modloop &&\ + rm -rf /lib/modules &&\ + ln -sf /.modloop/modules /lib/ + eend $? + # copy firmware if there are any - if [ -d $ALPINE_MNT/firmware ]; then - mkdir -p /lib/firmware - cp $ALPINE_MNT/firmware/* /lib/firmware/ + if [ -d $alpine_mnt/firmware ]; then + ebegin "Copying firmware from $alpine_mnt/firmware" + cp -R -a $alpine_mnt/firmware /lib/ + eend $? fi - eend $rc } stop() { find_media - if [ "$ALPINE_DEV" ] ; then - ebegin "Unmounting loopback device for kernel modules" - umount -d /.modloop &&\ - umount $ALPINE_MNT 2>/dev/null - eend $? - fi + [ -z "$alpine_dev" ] && return 0 + ebegin "Unmounting loopback device for kernel modules" + umount -d /.modloop &&\ + umount $alpine_mnt 2>/dev/null + eend $? } |