Re: [PATCH] Get rid of cat and grep

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Why not just reimplement cat in sed?

cat() {
    for x in "$@"; do
        sed s/,/,/ < "$1"
    done
}

On Jun 5, 2009, at 6:56 AM, Seewer Philippe <philippe.seewer@xxxxxx> wrote:

cat and grep just bloat the initrd, this patch removes dependencies on them.

---
modules.d/40network/ifup             |    3 ++-
modules.d/40network/install          |    2 +-
modules.d/40network/kill-dhclient.sh |    4 +++-
modules.d/95nbd/nbdroot              |   12 +-----------
modules.d/95nfs/nfsroot              |   12 ++----------
modules.d/95nfs/nfsroot-cleanup.sh   |    2 +-
modules.d/99base/dracut-lib          |   14 ++++++++++++++
7 files changed, 24 insertions(+), 25 deletions(-)

diff --git a/modules.d/40network/ifup b/modules.d/40network/ifup
index 981a207..e347da5 100755
--- a/modules.d/40network/ifup
+++ b/modules.d/40network/ifup
@@ -100,7 +100,8 @@ if [ -z "$ip" ]; then
   do_dhcp;
else
   # spin through the kernel command line, looking for ip= lines
-    for p in $(cat /proc/cmdline); do
+    [ "$CMDLINE" ] || read CMDLINE </proc/cmdline;
+    for p in $CMDLINE; do
   [ -n "${p%ip=*}" ] && continue
   ip_to_var ${p#ip=}

diff --git a/modules.d/40network/install b/modules.d/40network/install
index d480391..3a06f79 100755
--- a/modules.d/40network/install
+++ b/modules.d/40network/install
@@ -1,5 +1,5 @@
#!/bin/bash
-dracut_install ip dhclient hostname cat
+dracut_install ip dhclient hostname
# Include wired net drivers, excluding wireless
for modname in `find "/lib/modules/$kernel/kernel/drivers" -name '*.ko'`; do
 if nm -uPA $modname | grep -q eth_type_trans; then
diff --git a/modules.d/40network/kill-dhclient.sh b/modules.d/ 40network/kill-dhclient.sh
index fcebd32..54b3344 100755
--- a/modules.d/40network/kill-dhclient.sh
+++ b/modules.d/40network/kill-dhclient.sh
@@ -1,5 +1,7 @@
#!/bin/sh
for f in /tmp/dhclient.*.pid; do
-    [ -e $f ] && kill $(cat $f)
+    [ -e $f ] || continue
+    read PID < $f;
+    kill $PID;
done
diff --git a/modules.d/95nbd/nbdroot b/modules.d/95nbd/nbdroot
index 1130cca..3475239 100755
--- a/modules.d/95nbd/nbdroot
+++ b/modules.d/95nbd/nbdroot
@@ -71,17 +71,7 @@ getarg ro && nbdrw=ro
getarg rw && nbdrw=rw
fsopts=${fsopts+$fsopts,}${nbdrw}
-if [ ! -e /tmp/nbd.present ]; then
-    cat /proc/devices | while read t1 devt; do
-    if [ "$devt" = "nbd" ]; then
-        >/tmp/nfs.present
-        break
-    fi
-    done
-fi
-if [ ! -e /tmp/nbd.present ]; then
-    modprobe nbd || exit 1
-fi
+incol2 /proc/devices nbd || modprobe nbd || exit 1
# XXX better way to wait for the device to be made?
i=0
diff --git a/modules.d/95nfs/nfsroot b/modules.d/95nfs/nfsroot
index 2d08b68..da002c5 100755
--- a/modules.d/95nfs/nfsroot
+++ b/modules.d/95nfs/nfsroot
@@ -46,16 +46,8 @@ getarg rw && nfsrw=rw
nfsflags=${nfsflags+$nfsflags,}${nfsrw}
# Load the modules so the filesystem type is there
-if [ ! -e /tmp/nfs.present ]; then
-    cat /proc/filesystems | while read t1 fst; do
-        case "$fst" in
-        nfs|nfs4) >/tmp/nfs.present; break ;;
-    esac
-    done
-fi
-if [ ! -e /tmp/nfs.present ]; then
-    modprobe nfs || exit 1
-fi
+incol2 /proc/filesystems nfs  || modprobe nfs || exit 1
+incol2 /proc/filesystems nfs4 || modprobe nfs || exit 1
# XXX don't forget to move /var/lib/nfs/rpc_pipefs to new /
diff --git a/modules.d/95nfs/nfsroot-cleanup.sh b/modules.d/95nfs/ nfsroot-cleanup.sh
index 4bfdd34..1a5f187 100644
--- a/modules.d/95nfs/nfsroot-cleanup.sh
+++ b/modules.d/95nfs/nfsroot-cleanup.sh
@@ -4,7 +4,7 @@ pid=$(pidof rpc.statd)
pid=$(pidof rpcbind)
[ -n "$pid" ] && kill $pid
-if grep -q rpc_pipefs /proc/mounts; then +if incol2 /proc/mounts / var/lib/nfs/rpc_pipefs; then # try to create the destination directory [ -d $NEWROOT/var/lib/nfs/rpc_pipefs ] || mkdir -p $NEWROOT/var/ lib/nfs/rpc_pipefs 2>/dev/null
diff --git a/modules.d/99base/dracut-lib b/modules.d/99base/dracut-lib
index e3f4794..07c1bc7 100644
--- a/modules.d/99base/dracut-lib
+++ b/modules.d/99base/dracut-lib
@@ -36,3 +36,17 @@ check_occurances() {
   [ $count -eq $expected ]
}
+
+incol2() {
+    local dummy check;
+    local file="$1";
+    local str="$2";
+
+    [ -z "$file" ] && return;
+    [ -z "$str"  ] && return;
+
+    while read dummy check ; do
+    [ "$check" = "$str" ] && return 0
+    done < $file
+    return 1
+}

--
To unsubscribe from this list: send the line "unsubscribe initramfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe initramfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux