update-rc.d: check also that symlinks are valid

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]

(From OE-Core rev: 4b63e73422ea25aba1bde0beddb02bc04948e13c)

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Laurentiu Palcu 2013-01-16 13:58:55 +02:00 committed by Richard Purdie
parent a2375f49e1
commit e02b31623d
2 changed files with 57 additions and 2 deletions

View File

@ -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

View 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"