]> code.ossystems Code Review - openembedded-core.git/commitdiff
update-rc.d: check also that symlinks are valid
authorLaurentiu Palcu <laurentiu.palcu@intel.com>
Wed, 16 Jan 2013 11:58:55 +0000 (13:58 +0200)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 16 Jan 2013 12:07:55 +0000 (12:07 +0000)
Running:

update-rc.d -r /path/to/target/rootfs basename defaults

at do_rootfs time in package postinstall stage, when
/path/to/target/rootfs/etc/init.d/basename is a symlink and points to some path
on target (for example: /etc/init.d/basename.some_package), would fail and the
postinstall execution would be postponed for first boot, on target.

This patch adds the posibility to verify whether the file the symlink
points to actually exists in the target rootfs.

[YOCTO #3716]

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-core/update-rc.d/update-rc.d/check-if-symlinks-are-valid.patch [new file with mode: 0644]
meta/recipes-core/update-rc.d/update-rc.d_0.7.bb

diff --git a/meta/recipes-core/update-rc.d/update-rc.d/check-if-symlinks-are-valid.patch b/meta/recipes-core/update-rc.d/update-rc.d/check-if-symlinks-are-valid.patch
new file mode 100644 (file)
index 0000000..4476e91
--- /dev/null
@@ -0,0 +1,53 @@
+Check if symlinks are valid
+
+When using root option and $initd/$bn is a symlink, the script would fail because
+the symlink points to a path on target. For example:
+
+/path/to/target/rootfs/etc/init.d/syslog -> /etc/init.d/syslog.busybox
+
+Hence, [ -f /path/to/target/rootfs/etc/init.d/syslog ] condition would return
+false.
+
+This patch adds the posibility to check whether the file the symlink points to
+actually exists in rootfs path and then continue.
+
+Upstream-Status: Pending
+
+Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com> 
+
+Index: git/update-rc.d
+===================================================================
+--- git.orig/update-rc.d       2013-01-16 12:12:58.349814356 +0200
++++ git/update-rc.d    2013-01-16 13:02:42.490864939 +0200
+@@ -147,13 +147,29 @@
+ bn=$1
+ shift
++sn=$initd/$bn
++if [ -L "$sn" -a -n $root ]; then
++      readlink=$(which readlink)
++
++      if [ -n $readlink ]; then
++              sn=$($readlink "$sn")
++              case "$sn" in
++                      /*) sn=${root}${sn} ;;
++                      *)  sn=$initd/$sn ;;
++              esac
++      else
++              echo "update-rc.d: readlink tool not present, cannot check whether \
++                              $sn symlink points to a valid file." >&2
++      fi
++fi
++
+ if [ $1 != "remove" ]; then
+-      if [ ! -f "$initd/$bn" ]; then
++      if [ ! -f "$sn" ]; then
+               echo "update-rc.d: $initd/$bn: file does not exist" >&2
+               exit 1
+       fi
+ else
+-      if [ -f "$initd/$bn" ]; then
++      if [ -f "$sn" ]; then
+               if [ $force -eq 1 ]; then
+                       echo "update-rc.d: $initd/$bn exists during rc.d purge (continuing)" >&2
+               else
index 0aac5fa0138660cf1cd375647bff778cbd329edb..bfcbd97bcd7fe76c92ac808b2cdfce4db1ce478f 100644 (file)
@@ -5,13 +5,15 @@ SECTION = "base"
 LICENSE = "GPLv2+"
 LIC_FILES_CHKSUM = "file://update-rc.d;beginline=5;endline=15;md5=148a48321b10eb37c1fa3ee02b940a75"
 
-PR = "r4"
+PR = "r5"
 
 # Revision corresponding to tag update-rc.d_0.7
 SRCREV = "eca680ddf28d024954895f59a241a622dd575c11"
 
 SRC_URI = "git://github.com/philb/update-rc.d.git;protocol=git \
-           file://add-verbose.patch;"
+           file://add-verbose.patch \
+           file://check-if-symlinks-are-valid.patch \
+          "
 
 S = "${WORKDIR}/git"