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:
parent
a2375f49e1
commit
e02b31623d
|
@ -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
|
|
@ -5,13 +5,15 @@ SECTION = "base"
|
||||||
LICENSE = "GPLv2+"
|
LICENSE = "GPLv2+"
|
||||||
LIC_FILES_CHKSUM = "file://update-rc.d;beginline=5;endline=15;md5=148a48321b10eb37c1fa3ee02b940a75"
|
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
|
# Revision corresponding to tag update-rc.d_0.7
|
||||||
SRCREV = "eca680ddf28d024954895f59a241a622dd575c11"
|
SRCREV = "eca680ddf28d024954895f59a241a622dd575c11"
|
||||||
|
|
||||||
SRC_URI = "git://github.com/philb/update-rc.d.git;protocol=git \
|
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"
|
S = "${WORKDIR}/git"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue