mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2026-01-13 04:32:09 +01:00
93 lines
2.2 KiB
Plaintext
93 lines
2.2 KiB
Plaintext
#!/sbin/runscript
|
|
|
|
# script that will mount image with modules
|
|
|
|
depend() {
|
|
need dev
|
|
before checkfs fsck hwdrivers modules hwclock
|
|
keyword novserver
|
|
}
|
|
|
|
# read kernel options
|
|
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() {
|
|
init_KOPT
|
|
alpine_mounted=
|
|
alpine_dev=${KOPT_alpine_dev%%:*}
|
|
alpine_fs=${KOPT_alpine_dev#*:}
|
|
[ "$alpine_fs" = "$KOPT_alpine_dev" ] && unset alpine_fs
|
|
# 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 modloop mount_opts
|
|
find_media
|
|
if [ -z "$alpine_dev" ] ; then
|
|
ebegin "Skipping mount module loopback (specify with alpine_dev)"
|
|
eend 0
|
|
return 0
|
|
fi
|
|
|
|
modloop=${KOPT_modloop:-$KOPT_BOOT_IMAGE.cmg}
|
|
[ -n "$alpine_fs" ] && mount_opts="-t $alpine_fs"
|
|
|
|
ebegin "Mounting loopback device for kernel modules"
|
|
if [ -z "$alpine_mounted" ]; then
|
|
mount $mount_opts /dev/$alpine_dev $alpine_mnt 2>/dev/null
|
|
fi
|
|
mkdir -p /.modloop /lib
|
|
|
|
mount -o loop,ro -t cramfs $alpine_mnt/$modloop /.modloop &&\
|
|
rm -rf /lib/modules &&\
|
|
ln -sf /.modloop/modules /lib/
|
|
eend $? || return 1
|
|
|
|
# copy firmware if there are any
|
|
if [ -d $alpine_mnt/firmware ]; then
|
|
ebegin "Copying firmware from $alpine_mnt/firmware"
|
|
cp -R -a $alpine_mnt/firmware /lib/
|
|
eend $?
|
|
fi
|
|
}
|
|
|
|
stop() {
|
|
local rc=0
|
|
find_media
|
|
[ -z "$alpine_dev" ] && return 0
|
|
ebegin "Unmounting loopback device for kernel modules"
|
|
if mountinfo --quiet /.modloop; then
|
|
umount -d /.modloop || rc=1
|
|
fi
|
|
if mountinfo --quiet $alpine_mnt; then
|
|
umount $alpine_mnt || rc=1
|
|
fi
|
|
eend $rc
|
|
}
|
|
|