diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2011-08-24 12:14:16 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2011-08-24 12:14:16 +0000 |
commit | e251780861adab6e5b700ea4acd238fa791af2bb (patch) | |
tree | 166249cb73d81f3f14bbb0ffa8c02e593899adb1 | |
parent | 7b01fd486c85eee5c5a3c9438fdc879063061af5 (diff) | |
download | alpine_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/APKBUILD | 4 | ||||
-rw-r--r-- | main/mkinitfs/mount-move.patch | 115 |
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> |
2 | pkgname=mkinitfs | 2 | pkgname=mkinitfs |
3 | pkgver=2.3.4 | 3 | pkgver=2.3.4 |
4 | pkgrel=2 | 4 | pkgrel=3 |
5 | pkgdesc="Tool to generate initramfs images for Alpine" | 5 | pkgdesc="Tool to generate initramfs images for Alpine" |
6 | url=http://git.alpinelinux.org/cgit/mkinitfs | 6 | url=http://git.alpinelinux.org/cgit/mkinitfs |
7 | depends="busybox apk-tools>=2.0" | 7 | depends="busybox apk-tools>=2.0" |
8 | triggers="$pkgname.trigger=/usr/share/kernel/*" | 8 | triggers="$pkgname.trigger=/usr/share/kernel/*" |
9 | source="http://git.alpinelinux.org/cgit/$pkgname.git/snapshot/$pkgname-$pkgver.tar.bz2 | 9 | source="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 | " |
13 | arch="noarch" | 14 | arch="noarch" |
@@ -45,4 +46,5 @@ package() { | |||
45 | } | 46 | } |
46 | md5sums="abec6dced89e137dc60542c1e5f938ac mkinitfs-2.3.4.tar.bz2 | 47 | md5sums="abec6dced89e137dc60542c1e5f938ac mkinitfs-2.3.4.tar.bz2 |
47 | 4ea4389d5dff0a69d6792420574d2f1f 0001-init-fix-progressbar-when-not-quiet.patch | 48 | 4ea4389d5dff0a69d6792420574d2f1f 0001-init-fix-progressbar-when-not-quiet.patch |
49 | 049392dd315240d2c7d892ef67072e03 mount-move.patch | ||
48 | e59c2f7de496fe430b07e32fd812ebe0 eglibc.patch" | 50 | e59c2f7de496fe430b07e32fd812ebe0 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 @@ | |||
1 | diff --git a/initramfs-init.in b/initramfs-init.in | ||
2 | index 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 | |||