populate-volatile.sh: improve the handling of link config items
authorChen Qi <Qi.Chen@windriver.com>
Wed, 20 Feb 2013 03:28:37 +0000 (11:28 +0800)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 7 Mar 2013 11:14:33 +0000 (11:14 +0000)
Previously, if there's a link config item in the config file like

    l root root 1777 /tmp /var/tmp

and /tmp has existed, the symlink will not be created correctly.

Another example is the /run directory. If /run directory has been
created by some recipe or script before populate-volatile.sh runs,
the symlink of /run to /var/run will not be created correctly.

This patch ensures that the system creates symlinks exactly as the
config file tells it.

[YOCTO #3404]
[YOCTO #3406]

(From OE-Core rev: a54287d8e3d75a727c8ed5654a822bda256b0849)

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh

index c4bf70e..fec3b0c 100755 (executable)
@@ -68,20 +68,27 @@ mk_dir() {
 }
 
 link_file() {
-       EXEC="test -e \"$2\" -o -L $2 || ln -s \"$1\" \"$2\" >/dev/tty0 2>&1" 
+       EXEC="
+       if [ -L \"$2\" ]; then
+               [ \"\$(readlink -f \"$2\")\" != \"\$(readlink -f \"$1\")\" ] && { rm -f \"$2\"; ln -sf \"$1\" \"$2\"; };
+       elif [ -d \"$2\" ]; then
+               for f in $2/* $2/.[^.]*; do [ -e \$f ] && cp -rf \$f $1; done;
+               rm -rf \"$2\";
+               ln -sf \"$1\" \"$2\";
+       else
+               ln -sf \"$1\" \"$2\";
+       fi
+        "
 
        test "$VOLATILE_ENABLE_CACHE" = yes && echo "   $EXEC" >> /etc/volatile.cache.build
-       [ -e "$2" ] && {
-               echo "Cannot create link over existing -${TNAME}-." >&2
-       } || {
-               if [ "$ROOT_DIR" = "/" ]; then
-                       eval $EXEC &
-               else
-                       # For the same reason with create_file(), failures should
-                       # not be logged.
-                       eval $EXEC > /dev/null 2>&1 &
-               fi
-       }
+
+       if [ "$ROOT_DIR" = "/" ]; then
+               eval $EXEC &
+       else
+               # For the same reason with create_file(), failures should
+               # not be logged.
+               eval $EXEC > /dev/null 2>&1 &
+       fi
 }
 
 check_requirements() {
@@ -148,10 +155,8 @@ apply_cfgfile() {
 
                [ "${TTYPE}" = "l" ] && {
                        TSOURCE="$TLTARGET"
-                       [ -L "${TNAME}" ] || {
-                               [ "${VERBOSE}" != "no" ] && echo "Creating link -${TNAME}- pointing to -${TSOURCE}-."
-                               link_file "${TSOURCE}" "${TNAME}" &
-                       }
+                       [ "${VERBOSE}" != "no" ] && echo "Creating link -${TNAME}- pointing to -${TSOURCE}-."
+                       link_file "${TSOURCE}" "${TNAME}" &
                        continue
                }