summaryrefslogtreecommitdiffstats
path: root/0005-lsinitrd.sh-prevent-construct.patch
blob: b2e21af41ab1c92ff276813d8d9644990adebc9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
From fd9f902477a8d8df6ce0fa1b044484c435fff247 Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@redhat.com>
Date: Thu, 27 Mar 2014 09:27:53 +0100
Subject: [PATCH] lsinitrd.sh: prevent < <$() construct
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Running dracut in a chroot environment, which has /dev not correctly
setup will result in errors like:

/usr/bin/lsinitrd: line 164: /dev/fd/62: No such file or directory
cpio: Malformed number �5�OK��
cpio: Malformed number 5�OK��
cpio: Malformed number �OK��

This is because bash wants /dev/fd/<num> for constructs like:
foo < <$(bar)
---
 lsinitrd.sh | 50 +++++++++++++++++++++++++++++---------------------
 1 file changed, 29 insertions(+), 21 deletions(-)

diff --git a/lsinitrd.sh b/lsinitrd.sh
index 8dc9032..a697bc2 100755
--- a/lsinitrd.sh
+++ b/lsinitrd.sh
@@ -160,27 +160,35 @@ case $bin in
         ;;
 esac
 
-if [[ $SKIP ]]; then
-    read -N 6 bin < <($SKIP "$image")
-fi
-
-case $bin in
-    $'\x1f\x8b'*)
-        CAT="zcat --";;
-    BZh*)
-        CAT="bzcat --";;
-    $'\x71\xc7'*|070701)
-        CAT="cat --"
-        ;;
-    $'\x02\x21'*)
-        CAT="lz4 -d -c";;
-    *)
-        CAT="xzcat --";
-        if echo "test"|xz|xzcat --single-stream >/dev/null 2>&1; then
-            CAT="xzcat --single-stream --"
-        fi
-        ;;
-esac
+CAT=$({
+        if [[ $SKIP ]]; then
+            $SKIP "$image"
+        else
+            cat "$image"
+        fi } | {
+        read -N 6 bin
+        case $bin in
+            $'\x1f\x8b'*)
+                echo "zcat --"
+                ;;
+            BZh*)
+                echo "bzcat --"
+                ;;
+            $'\x71\xc7'*|070701)
+                echo "cat --"
+                ;;
+            $'\x02\x21'*)
+                echo "lz4 -d -c"
+                ;;
+            *)
+                if echo "test"|xz|xzcat --single-stream >/dev/null 2>&1; then
+                    echo "xzcat --single-stream --"
+                else
+                    echo "xzcat --"
+                fi
+                ;;
+        esac
+    })
 
 skipcpio()
 {