summaryrefslogtreecommitdiffstats
path: root/init.d
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2009-06-10 17:37:27 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2009-06-10 17:37:27 +0000
commiteeed6ad60452fe436cf5bfd7bb90855e801befdc (patch)
tree9d6e90284b2177aed6ef0cc9e3e07be7d95b89fa /init.d
parent5b098951181f360627ff58b680da3d3987a7865f (diff)
downloadalpine-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/modloop96
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 $?
}