#!/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/ [ -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 }