aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2011-08-24 12:14:16 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2011-08-24 12:14:16 +0000
commite251780861adab6e5b700ea4acd238fa791af2bb (patch)
tree166249cb73d81f3f14bbb0ffa8c02e593899adb1
parent7b01fd486c85eee5c5a3c9438fdc879063061af5 (diff)
downloadalpine_aports-e251780861adab6e5b700ea4acd238fa791af2bb.tar.bz2
alpine_aports-e251780861adab6e5b700ea4acd238fa791af2bb.tar.xz
alpine_aports-e251780861adab6e5b700ea4acd238fa791af2bb.zip
main/mkinitfs: fix init to find UUID and usbdisk symlink in fstab
ref #734
-rw-r--r--main/mkinitfs/APKBUILD4
-rw-r--r--main/mkinitfs/mount-move.patch115
2 files changed, 118 insertions, 1 deletions
diff --git a/main/mkinitfs/APKBUILD b/main/mkinitfs/APKBUILD
index 00974e2a72..dd2c59a0f8 100644
--- a/main/mkinitfs/APKBUILD
+++ b/main/mkinitfs/APKBUILD
@@ -1,13 +1,14 @@
1# Maintainer: Natanael Copa <ncopa@alpinelinux.org> 1# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
2pkgname=mkinitfs 2pkgname=mkinitfs
3pkgver=2.3.4 3pkgver=2.3.4
4pkgrel=2 4pkgrel=3
5pkgdesc="Tool to generate initramfs images for Alpine" 5pkgdesc="Tool to generate initramfs images for Alpine"
6url=http://git.alpinelinux.org/cgit/mkinitfs 6url=http://git.alpinelinux.org/cgit/mkinitfs
7depends="busybox apk-tools>=2.0" 7depends="busybox apk-tools>=2.0"
8triggers="$pkgname.trigger=/usr/share/kernel/*" 8triggers="$pkgname.trigger=/usr/share/kernel/*"
9source="http://git.alpinelinux.org/cgit/$pkgname.git/snapshot/$pkgname-$pkgver.tar.bz2 9source="http://git.alpinelinux.org/cgit/$pkgname.git/snapshot/$pkgname-$pkgver.tar.bz2
10 0001-init-fix-progressbar-when-not-quiet.patch 10 0001-init-fix-progressbar-when-not-quiet.patch
11 mount-move.patch
11 eglibc.patch 12 eglibc.patch
12 " 13 "
13arch="noarch" 14arch="noarch"
@@ -45,4 +46,5 @@ package() {
45} 46}
46md5sums="abec6dced89e137dc60542c1e5f938ac mkinitfs-2.3.4.tar.bz2 47md5sums="abec6dced89e137dc60542c1e5f938ac mkinitfs-2.3.4.tar.bz2
474ea4389d5dff0a69d6792420574d2f1f 0001-init-fix-progressbar-when-not-quiet.patch 484ea4389d5dff0a69d6792420574d2f1f 0001-init-fix-progressbar-when-not-quiet.patch
49049392dd315240d2c7d892ef67072e03 mount-move.patch
48e59c2f7de496fe430b07e32fd812ebe0 eglibc.patch" 50e59c2f7de496fe430b07e32fd812ebe0 eglibc.patch"
diff --git a/main/mkinitfs/mount-move.patch b/main/mkinitfs/mount-move.patch
new file mode 100644
index 0000000000..4931663246
--- /dev/null
+++ b/main/mkinitfs/mount-move.patch
@@ -0,0 +1,115 @@
1diff --git a/initramfs-init.in b/initramfs-init.in
2index 2ff2585..f64ef26 100755
3--- a/initramfs-init.in
4+++ b/initramfs-init.in
5@@ -104,10 +104,32 @@ unpack_apkovl() {
6 }
7
8 # find mount dir for given device in an fstab
9+# returns global MNTOPTS
10 find_mnt() {
11- local dev="$1"
12- local fsfile="$2"
13- awk "\$1 == \"$dev\" {print \$2}\"" "$fsfile" 2>/dev/null
14+ local search_dev="$1" fstab="$2"
15+ MNTOPTS=
16+ [ -r "$fstab" ] || return 1
17+ local dev mnt fs chk
18+ case "$search_dev" in
19+ UUID=*|LABEL=*|/dev/*);;
20+ *) search_dev=/dev/$search_dev;;
21+ esac
22+ local search_real_dev=$(resolve_dev $search_dev)
23+ while read dev mnt fs MNTOPTS chk; do
24+ local real_dev=$(resolve_dev $dev)
25+ local i j
26+ for i in "$search_dev" "$search_real_dev"; do
27+ [ -z "$i" ] && continue
28+ for j in "$dev" "$real_dev"; do
29+ [ -z "$j" ] && continue
30+ if [ "$i" = "$j" ]; then
31+ echo "$mnt"
32+ return
33+ fi
34+ done
35+ done
36+ done < $fstab
37+ MNTOPTS=
38 }
39
40 # Wait for usb to settle
41@@ -214,6 +236,29 @@ start_lvm() {
42 lvm vgchange --ignorelockingfailure -a y >/dev/null 2>&1
43 }
44
45+# resolve an uuid or symlink to the real device
46+resolve_dev() {
47+ case "$1" in
48+ UUID=*|LABEL=*) findfs "$1";;
49+ *) readlink -f "$1";;
50+ esac
51+}
52+
53+# remount ALPINE_MNT according given fstab
54+remount_alpine_mnt() {
55+ local fstab="$1"
56+ local mnt=$(find_mnt $ALPINE_DEV $fstab)
57+ if [ "$ALPINE_MNT" != "$mnt" ]; then
58+ mkdir -p "$mnt"
59+ mount -o move $ALPINE_MNT $mnt
60+ ALPINE_MNT=$mnt
61+ fi
62+ # respect users mount options in fstab
63+ if [ -n "$MNTOPTS" ]; then
64+ mount -o remount,$MNTOPTS "$ALPINE_MNT"
65+ fi
66+}
67+
68 # gotta start from somewhere :)
69 echo "Alpine Init $VERSION"
70
71@@ -270,7 +315,7 @@ if [ -n "$KOPT_ovl_dev" ] ; then
72 fi
73
74 case "$ALPINE_DEV" in
75- UUID=*) ;;
76+ UUID=*|LABEL=*) ;;
77 *) ALPINE_DEV=/dev/$ALPINE_DEV ;;
78 esac
79
80@@ -453,20 +498,9 @@ pkgs="$pkgs alpine-base"
81
82 # move the ALPINE_MNT if ALPINE_DEV is specified in users fstab
83 # this is so a generated /etc/apk/repositories will use correct mount dir
84-new_mnt=$(find_mnt $ALPINE_DEV $sysroot/etc/fstab)
85-if [ -n "$new_mnt" ] && [ "$new_mnt" != "$ALPINE_MNT" ]; then
86- mkdir -p $new_mnt
87- mount -o move $ALPINE_MNT $new_mnt
88- ALPINE_MNT="$new_mnt"
89-fi
90-
91-# let user set ALPINE_MNT as readonly in fstab
92-if [ -f $sysroot/etc/fstab ]; then
93- mountopts=$(awk "\$2 == \"$ALPINE_MNT\" { print \$4 }" \
94- $sysroot/etc/fstab)
95- if [ -n "$mountopts" ]; then
96- mount -o remount,$mountopts $ALPINE_MNT
97- fi
98+if [ -f "$sysroot"/etc/fstab ]; then
99+ has_fstab=1
100+ remount_alpine_mnt "$sysroot"/etc/fstab
101 fi
102
103 # copy keys so apk finds them. apk looks for stuff relative --root
104@@ -503,6 +537,11 @@ else
105 fi
106 eend $?
107
108+# remount ALPINE_MNT according default fstab from package
109+if [ -z "$has_fstab" ] && [ -f "$sysroot"/etc/fstab ]; then
110+ remount_alpine_mnt "$sysroot"/etc/fstab
111+fi
112+
113 # fix inittab if alternative console
114 setup_inittab_console $CONSOLE
115