Harald Hoyer 98731e
From 2cf328ad0ae7fb5ee7de8fac5652e4cd58adca1a Mon Sep 17 00:00:00 2001
Harald Hoyer 98731e
From: Harald Hoyer <harald@redhat.com>
Harald Hoyer 98731e
Date: Thu, 2 Feb 2012 18:50:26 +0100
Harald Hoyer 98731e
Subject: [PATCH] renamed usrmove to convertfs
Harald Hoyer 98731e
Harald Hoyer 98731e
---
Harald Hoyer 98731e
 modules.d/30convertfs/convertfs.sh     |  176 ++++++++++++++++++++++++++++++++
Harald Hoyer 98731e
 modules.d/30convertfs/do-convertfs.sh  |   11 ++
Harald Hoyer 98731e
 modules.d/30convertfs/module-setup.sh  |   20 ++++
Harald Hoyer 98731e
 modules.d/30usrmove/do-usrmove.sh      |   11 --
Harald Hoyer 98731e
 modules.d/30usrmove/module-setup.sh    |   20 ----
Harald Hoyer 98731e
 modules.d/30usrmove/usrmove-convert.sh |  159 ----------------------------
Harald Hoyer 98731e
 6 files changed, 207 insertions(+), 190 deletions(-)
Harald Hoyer 98731e
 create mode 100755 modules.d/30convertfs/convertfs.sh
Harald Hoyer 98731e
 create mode 100755 modules.d/30convertfs/do-convertfs.sh
Harald Hoyer 98731e
 create mode 100755 modules.d/30convertfs/module-setup.sh
Harald Hoyer 98731e
 delete mode 100755 modules.d/30usrmove/do-usrmove.sh
Harald Hoyer 98731e
 delete mode 100755 modules.d/30usrmove/module-setup.sh
Harald Hoyer 98731e
 delete mode 100755 modules.d/30usrmove/usrmove-convert.sh
Harald Hoyer 98731e
Harald Hoyer 98731e
diff --git a/modules.d/30convertfs/convertfs.sh b/modules.d/30convertfs/convertfs.sh
Harald Hoyer 98731e
new file mode 100755
Harald Hoyer 98731e
index 0000000..6c76a4c
Harald Hoyer 98731e
--- /dev/null
Harald Hoyer 98731e
+++ b/modules.d/30convertfs/convertfs.sh
Harald Hoyer 98731e
@@ -0,0 +1,176 @@
Harald Hoyer 98731e
+#!/bin/bash
Harald Hoyer 98731e
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 98731e
+# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+ROOT="$1"
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+if [[ ! -d "$ROOT" ]]; then
Harald Hoyer 98731e
+    echo "Usage: $0 <rootdir>"
Harald Hoyer 98731e
+    exit 1
Harald Hoyer 98731e
+fi
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+if [[ "$ROOT" -ef / ]]; then
Harald Hoyer 98731e
+    echo "Can't convert the running system."
Harald Hoyer 98731e
+    echo "Please boot with 'rd.convertfs' on the kernel command line,"
Harald Hoyer 98731e
+    echo "to update with the help of the initramfs,"
Harald Hoyer 98731e
+    echo "or run this script from a rescue system."
Harald Hoyer 98731e
+    exit 1
Harald Hoyer 98731e
+fi
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+while [[ "$ROOT" != "${ROOT%/}" ]]; do
Harald Hoyer 98731e
+    ROOT=${ROOT%/}
Harald Hoyer 98731e
+done
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+needconvert() {
Harald Hoyer 98731e
+    for dir in "$ROOT/bin" "$ROOT/sbin" "$ROOT/lib" "$ROOT/lib64"; do
Harald Hoyer 98731e
+        if [[ -e "$dir" ]]; then
Harald Hoyer 98731e
+            [[ -L "$dir" ]] || return 0
Harald Hoyer 98731e
+        fi
Harald Hoyer 98731e
+    done
Harald Hoyer 98731e
+    return 1
Harald Hoyer 98731e
+}
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+if ! needconvert; then
Harald Hoyer 98731e
+    echo "Your system is already converted."
Harald Hoyer 98731e
+    exit 0
Harald Hoyer 98731e
+fi
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+testfile="$ROOT/.usrmovecheck$$"
Harald Hoyer 98731e
+rm -f "$testfile"
Harald Hoyer 98731e
+> "$testfile"
Harald Hoyer 98731e
+if [[ ! -e "$testfile" ]]; then
Harald Hoyer 98731e
+    echo "Cannot write to $ROOT/"
Harald Hoyer 98731e
+    exit 1
Harald Hoyer 98731e
+fi
Harald Hoyer 98731e
+rm -f "$testfile"
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+testfile="$ROOT/usr/.usrmovecheck$$"
Harald Hoyer 98731e
+rm -f "$testfile"
Harald Hoyer 98731e
+> "$testfile"
Harald Hoyer 98731e
+if [[ ! -e "$testfile" ]]; then
Harald Hoyer 98731e
+    echo "Cannot write to $ROOT/usr/"
Harald Hoyer 98731e
+    exit 1
Harald Hoyer 98731e
+fi
Harald Hoyer 98731e
+rm -f "$testfile"
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+ismounted() {
Harald Hoyer 98731e
+    while read a m a; do
Harald Hoyer 98731e
+        [[ "$m" = "$1" ]] && return 0
Harald Hoyer 98731e
+    done < /proc/mounts
Harald Hoyer 98731e
+    return 1
Harald Hoyer 98731e
+}
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+# clean up after ourselves no matter how we die.
Harald Hoyer 98731e
+cleanup() {
Harald Hoyer 98731e
+    echo "Something failed. Move back to the original state"
Harald Hoyer 98731e
+    for dir in "$ROOT/bin" "$ROOT/sbin" "$ROOT/lib" "$ROOT/lib64" \
Harald Hoyer 98731e
+	"$ROOT/usr/bin" "$ROOT/usr/sbin" "$ROOT/usr/lib" \
Harald Hoyer 98731e
+        "$ROOT/usr/lib64"; do
Harald Hoyer 98731e
+        [[ -d "${dir}.usrmove-new" ]] && rm -fr "${dir}.usrmove-new"
Harald Hoyer 98731e
+        if [[ -d "${dir}.usrmove-old" ]]; then
Harald Hoyer 98731e
+            mv "$dir" "${dir}.del~"
Harald Hoyer 98731e
+            mv "${dir}.usrmove-old" "$dir"
Harald Hoyer 98731e
+            rm -fr "${dir}.del~"
Harald Hoyer 98731e
+        fi
Harald Hoyer 98731e
+    done
Harald Hoyer 98731e
+}
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+trap 'ret=$?; [[ $ret -ne 0 ]] && cleanup;exit $ret;' EXIT
Harald Hoyer 98731e
+trap 'exit 1;' SIGINT
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+ismounted "$ROOT/usr" || CP_HARDLINK="-l"
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+set -e
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+# merge / and /usr in new dir in /usr
Harald Hoyer 98731e
+for dir in bin sbin lib lib64; do
Harald Hoyer 98731e
+    rm -rf "$ROOT/usr/${dir}.usrmove-new"
Harald Hoyer 98731e
+    [[ -L "$ROOT/$dir" ]] && continue
Harald Hoyer 98731e
+    [[ -d "$ROOT/$dir" ]] || continue
Harald Hoyer 98731e
+    echo "Make a copy of \`$ROOT/usr/$dir'."
Harald Hoyer 98731e
+    [[ -d "$ROOT/usr/$dir" ]] \
Harald Hoyer 98731e
+        && cp -ax $CP_HARDLINK "$ROOT/usr/$dir" "$ROOT/usr/${dir}.usrmove-new"
Harald Hoyer 98731e
+    echo "Merge the copy with \`$ROOT/$dir'."
Harald Hoyer 98731e
+    [[ -d "$ROOT/usr/${dir}.usrmove-new" ]] \
Harald Hoyer 98731e
+        || mkdir -p "$ROOT/usr/${dir}.usrmove-new"
Harald Hoyer 98731e
+    cp -axT $CP_HARDLINK --backup --suffix=.usrmove~ "$ROOT/$dir" "$ROOT/usr/${dir}.usrmove-new"
Harald Hoyer 98731e
+    echo "Clean up duplicates in \`$ROOT/usr/$dir'."
Harald Hoyer 98731e
+    # delete all symlinks that have been backed up
Harald Hoyer 98731e
+    find "$ROOT/usr/${dir}.usrmove-new" -type l -name '*.usrmove~' -delete || :
Harald Hoyer 98731e
+    # replace symlink with backed up binary
Harald Hoyer 98731e
+    find "$ROOT/usr/${dir}.usrmove-new" \
Harald Hoyer 98731e
+        -name '*.usrmove~' \
Harald Hoyer 98731e
+        -type f \
Harald Hoyer 98731e
+        -exec bash -c 'p="{}";o=${p%%%%.usrmove~};
Harald Hoyer 98731e
+                       [[ -L "$o" ]] && mv -f "$p" "$o"' ';' || :
Harald Hoyer 98731e
+done
Harald Hoyer 98731e
+# switch over merged dirs in /usr
Harald Hoyer 98731e
+for dir in bin sbin lib lib64; do
Harald Hoyer 98731e
+    [[ -d "$ROOT/usr/${dir}.usrmove-new" ]] || continue
Harald Hoyer 98731e
+    echo "Switch to new \`$ROOT/usr/$dir'."
Harald Hoyer 98731e
+    rm -fr "$ROOT/usr/${dir}.usrmove-old"
Harald Hoyer 98731e
+    mv "$ROOT/usr/$dir" "$ROOT/usr/${dir}.usrmove-old"
Harald Hoyer 98731e
+    mv "$ROOT/usr/${dir}.usrmove-new" "$ROOT/usr/$dir"
Harald Hoyer 98731e
+done
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+# replace dirs in / with links to /usr
Harald Hoyer 98731e
+for dir in bin sbin lib lib64; do
Harald Hoyer 98731e
+    [[ -L "$ROOT/$dir" ]] && continue
Harald Hoyer 98731e
+    [[ -d "$ROOT/$dir" ]] || continue
Harald Hoyer 98731e
+    echo "Create \`$ROOT/$dir' symlink."
Harald Hoyer 98731e
+    rm -rf "$ROOT/${dir}.usrmove-old" || :
Harald Hoyer 98731e
+    mv "$ROOT/$dir" "$ROOT/${dir}.usrmove-old"
Harald Hoyer 98731e
+    ln -sfn usr/$dir "$ROOT/$dir"
Harald Hoyer 98731e
+done
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+echo "Clean up backup files."
Harald Hoyer 98731e
+# everything seems to work; cleanup
Harald Hoyer 98731e
+for dir in bin sbin lib lib64; do
Harald Hoyer 98731e
+     # if we get killed in the middle of "rm -rf", ensure not to leave
Harald Hoyer 98731e
+     # an incomplete directory, which is moved back by cleanup()
Harald Hoyer 98731e
+    [[ -d "$ROOT/usr/${dir}.usrmove-old" ]] \
Harald Hoyer 98731e
+        && mv "$ROOT/usr/${dir}.usrmove-old" "$ROOT/usr/${dir}.usrmove-old~"
Harald Hoyer 98731e
+    [[ -d "$ROOT/${dir}.usrmove-old" ]] \
Harald Hoyer 98731e
+        && mv "$ROOT/${dir}.usrmove-old" "$ROOT/${dir}.usrmove-old~"
Harald Hoyer 98731e
+done
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+for dir in bin sbin lib lib64; do
Harald Hoyer 98731e
+    [[ -d "$ROOT/usr/${dir}.usrmove-old~" ]] \
Harald Hoyer 98731e
+        && rm -rf "$ROOT/usr/${dir}.usrmove-old~" || :
Harald Hoyer 98731e
+    [[ -d "$ROOT/${dir}.usrmove-old~" ]] \
Harald Hoyer 98731e
+        && rm -rf "$ROOT/${dir}.usrmove-old~" || :
Harald Hoyer 98731e
+done
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+for dir in lib lib64; do
Harald Hoyer 98731e
+    [[ -d "$ROOT/$dir" ]] || continue
Harald Hoyer 98731e
+    for lib in "$ROOT"/usr/${dir}/lib*.so*.usrmove~; do
Harald Hoyer 98731e
+        [[ -f $lib ]] || continue
Harald Hoyer 98731e
+        mv $lib ${lib/.so/_so}
Harald Hoyer 98731e
+    done
Harald Hoyer 98731e
+done
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+set +e
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+echo "Run ldconfig."
Harald Hoyer 98731e
+ldconfig -r "$ROOT"
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+. $ROOT/etc/selinux/config
Harald Hoyer 98731e
+if [ "$SELINUX" != "disabled" ] && [ -f /etc/selinux/${SELINUXTYPE}/contexts/files/file_contexts ]; then
Harald Hoyer 98731e
+    echo "Fixing SELinux labels"
Harald Hoyer 98731e
+    /usr/sbin/setfiles -r $ROOT -p /etc/selinux/${SELINUXTYPE}/contexts/files/file_contexts $ROOT/sbin $ROOT/bin $ROOT/lib $ROOT/lib64 $ROOT/usr/lib $ROOT/usr/lib64 $ROOT/etc/ld.so.cache $ROOT/var/cache/ldconfig || :
Harald Hoyer 98731e
+fi
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+if [ -d $ROOT/var/run ]; then
Harald Hoyer 98731e
+    echo "Converting /var/run to symlink"
Harald Hoyer 98731e
+    mv -f $ROOT/var/run $ROOT/var/run.runmove~
Harald Hoyer 98731e
+    ln -sfn ../run $ROOT/var/run
Harald Hoyer 98731e
+fi
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+if [ -d $ROOT/var/lock ]; then
Harald Hoyer 98731e
+    echo "Converting /var/lock to symlink"
Harald Hoyer 98731e
+    mv -f $ROOT/var/lock $ROOT/var/lock.lockmove~
Harald Hoyer 98731e
+    ln -sfn ../run/lock $ROOT/var/lock
Harald Hoyer 98731e
+fi
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+echo "Done."
Harald Hoyer 98731e
+exit 0
Harald Hoyer 98731e
diff --git a/modules.d/30convertfs/do-convertfs.sh b/modules.d/30convertfs/do-convertfs.sh
Harald Hoyer 98731e
new file mode 100755
Harald Hoyer 98731e
index 0000000..99738e3
Harald Hoyer 98731e
--- /dev/null
Harald Hoyer 98731e
+++ b/modules.d/30convertfs/do-convertfs.sh
Harald Hoyer 98731e
@@ -0,0 +1,11 @@
Harald Hoyer 98731e
+#!/bin/bash
Harald Hoyer 98731e
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 98731e
+# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+if getargbool 0 rd.convertfs; then
Harald Hoyer 98731e
+    if getargbool 0 rd.debug; then
Harald Hoyer 98731e
+        bash -x convertfs "$NEWROOT" 2>&1 | vinfo
Harald Hoyer 98731e
+    else
Harald Hoyer 98731e
+        convertfs "$NEWROOT" 2>&1 | vinfo
Harald Hoyer 98731e
+    fi
Harald Hoyer 98731e
+fi
Harald Hoyer 98731e
diff --git a/modules.d/30convertfs/module-setup.sh b/modules.d/30convertfs/module-setup.sh
Harald Hoyer 98731e
new file mode 100755
Harald Hoyer 98731e
index 0000000..48ffa3e
Harald Hoyer 98731e
--- /dev/null
Harald Hoyer 98731e
+++ b/modules.d/30convertfs/module-setup.sh
Harald Hoyer 98731e
@@ -0,0 +1,20 @@
Harald Hoyer 98731e
+#!/bin/bash
Harald Hoyer 98731e
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 98731e
+# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+check() {
Harald Hoyer 98731e
+    [[ $mount_needs ]] && return 1
Harald Hoyer 98731e
+    return 255
Harald Hoyer 98731e
+}
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+depends() {
Harald Hoyer 98731e
+    return 0
Harald Hoyer 98731e
+}
Harald Hoyer 98731e
+
Harald Hoyer 98731e
+install() {
Harald Hoyer 98731e
+    dracut_install bash
Harald Hoyer 98731e
+    dracut_install find ldconfig mv rm cp ln 
Harald Hoyer 98731e
+    inst_hook pre-pivot 99 "$moddir/do-convertfs.sh"
Harald Hoyer 98731e
+    inst "$moddir/convertfs.sh" /usr/bin/convertfs
Harald Hoyer 98731e
+}
Harald Hoyer 98731e
+
Harald Hoyer 98731e
diff --git a/modules.d/30usrmove/do-usrmove.sh b/modules.d/30usrmove/do-usrmove.sh
Harald Hoyer 98731e
deleted file mode 100755
Harald Hoyer 98731e
index 6596a68..0000000
Harald Hoyer 98731e
--- a/modules.d/30usrmove/do-usrmove.sh
Harald Hoyer 98731e
+++ /dev/null
Harald Hoyer 98731e
@@ -1,11 +0,0 @@
Harald Hoyer 98731e
-#!/bin/bash
Harald Hoyer 98731e
-# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 98731e
-# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-if getargbool 0 rd.usrmove; then
Harald Hoyer 98731e
-    if getargbool 0 rd.debug; then
Harald Hoyer 98731e
-        bash -x usrmove-convert "$NEWROOT" 2>&1 | vinfo
Harald Hoyer 98731e
-    else
Harald Hoyer 98731e
-        usrmove-convert "$NEWROOT" 2>&1 | vinfo
Harald Hoyer 98731e
-    fi
Harald Hoyer 98731e
-fi
Harald Hoyer 98731e
diff --git a/modules.d/30usrmove/module-setup.sh b/modules.d/30usrmove/module-setup.sh
Harald Hoyer 98731e
deleted file mode 100755
Harald Hoyer 98731e
index 04b44ca..0000000
Harald Hoyer 98731e
--- a/modules.d/30usrmove/module-setup.sh
Harald Hoyer 98731e
+++ /dev/null
Harald Hoyer 98731e
@@ -1,20 +0,0 @@
Harald Hoyer 98731e
-#!/bin/bash
Harald Hoyer 98731e
-# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 98731e
-# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-check() {
Harald Hoyer 98731e
-    [[ $mount_needs ]] && return 1
Harald Hoyer 98731e
-    return 255
Harald Hoyer 98731e
-}
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-depends() {
Harald Hoyer 98731e
-    return 0
Harald Hoyer 98731e
-}
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-install() {
Harald Hoyer 98731e
-    dracut_install bash
Harald Hoyer 98731e
-    dracut_install find ldconfig mv rm cp ln 
Harald Hoyer 98731e
-    inst_hook pre-pivot 99 "$moddir/do-usrmove.sh"
Harald Hoyer 98731e
-    inst "$moddir/usrmove-convert.sh" /usr/bin/usrmove-convert
Harald Hoyer 98731e
-}
Harald Hoyer 98731e
-
Harald Hoyer 98731e
diff --git a/modules.d/30usrmove/usrmove-convert.sh b/modules.d/30usrmove/usrmove-convert.sh
Harald Hoyer 98731e
deleted file mode 100755
Harald Hoyer 98731e
index 8aa8588..0000000
Harald Hoyer 98731e
--- a/modules.d/30usrmove/usrmove-convert.sh
Harald Hoyer 98731e
+++ /dev/null
Harald Hoyer 98731e
@@ -1,159 +0,0 @@
Harald Hoyer 98731e
-#!/bin/bash
Harald Hoyer 98731e
-# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 98731e
-# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-ROOT="$1"
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-if [[ ! -d "$ROOT" ]]; then
Harald Hoyer 98731e
-    echo "Usage: $0 <rootdir>"
Harald Hoyer 98731e
-    exit 1
Harald Hoyer 98731e
-fi
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-if [[ "$ROOT" -ef / ]]; then
Harald Hoyer 98731e
-    echo "Can't convert the running system."
Harald Hoyer 98731e
-    echo "Please boot with 'usrmove' on the kernel command line,"
Harald Hoyer 98731e
-    echo "to update with the help of the initramfs,"
Harald Hoyer 98731e
-    echo "or run this script from a rescue system."
Harald Hoyer 98731e
-    exit 1
Harald Hoyer 98731e
-fi
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-while [[ "$ROOT" != "${ROOT%/}" ]]; do
Harald Hoyer 98731e
-    ROOT=${ROOT%/}
Harald Hoyer 98731e
-done
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-needconvert() {
Harald Hoyer 98731e
-    for dir in "$ROOT/bin" "$ROOT/sbin" "$ROOT/lib" "$ROOT/lib64"; do
Harald Hoyer 98731e
-        if [[ -e "$dir" ]]; then
Harald Hoyer 98731e
-            [[ -L "$dir" ]] || return 0
Harald Hoyer 98731e
-        fi
Harald Hoyer 98731e
-    done
Harald Hoyer 98731e
-    return 1
Harald Hoyer 98731e
-}
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-if ! needconvert; then
Harald Hoyer 98731e
-    echo "Your system is already converted."
Harald Hoyer 98731e
-    exit 0
Harald Hoyer 98731e
-fi
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-testfile="$ROOT/.usrmovecheck$$"
Harald Hoyer 98731e
-rm -f "$testfile"
Harald Hoyer 98731e
-> "$testfile"
Harald Hoyer 98731e
-if [[ ! -e "$testfile" ]]; then
Harald Hoyer 98731e
-    echo "Cannot write to $ROOT/"
Harald Hoyer 98731e
-    exit 1
Harald Hoyer 98731e
-fi
Harald Hoyer 98731e
-rm -f "$testfile"
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-testfile="$ROOT/usr/.usrmovecheck$$"
Harald Hoyer 98731e
-rm -f "$testfile"
Harald Hoyer 98731e
-> "$testfile"
Harald Hoyer 98731e
-if [[ ! -e "$testfile" ]]; then
Harald Hoyer 98731e
-    echo "Cannot write to $ROOT/usr/"
Harald Hoyer 98731e
-    exit 1
Harald Hoyer 98731e
-fi
Harald Hoyer 98731e
-rm -f "$testfile"
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-ismounted() {
Harald Hoyer 98731e
-    while read a m a; do
Harald Hoyer 98731e
-        [[ "$m" = "$1" ]] && return 0
Harald Hoyer 98731e
-    done < /proc/mounts
Harald Hoyer 98731e
-    return 1
Harald Hoyer 98731e
-}
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-# clean up after ourselves no matter how we die.
Harald Hoyer 98731e
-cleanup() {
Harald Hoyer 98731e
-    echo "Something failed. Move back to the original state"
Harald Hoyer 98731e
-    for dir in "$ROOT/bin" "$ROOT/sbin" "$ROOT/lib" "$ROOT/lib64" \
Harald Hoyer 98731e
-	"$ROOT/usr/bin" "$ROOT/usr/sbin" "$ROOT/usr/lib" \
Harald Hoyer 98731e
-        "$ROOT/usr/lib64"; do
Harald Hoyer 98731e
-        [[ -d "${dir}.usrmove-new" ]] && rm -fr "${dir}.usrmove-new"
Harald Hoyer 98731e
-        if [[ -d "${dir}.usrmove-old" ]]; then
Harald Hoyer 98731e
-            mv "$dir" "${dir}.del~"
Harald Hoyer 98731e
-            mv "${dir}.usrmove-old" "$dir"
Harald Hoyer 98731e
-            rm -fr "${dir}.del~"
Harald Hoyer 98731e
-        fi
Harald Hoyer 98731e
-    done
Harald Hoyer 98731e
-}
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-trap 'ret=$?; [[ $ret -ne 0 ]] && cleanup;exit $ret;' EXIT
Harald Hoyer 98731e
-trap 'exit 1;' SIGINT
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-ismounted "$ROOT/usr" || CP_HARDLINK="-l"
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-set -e
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-# merge / and /usr in new dir in /usr
Harald Hoyer 98731e
-for dir in bin sbin lib lib64; do
Harald Hoyer 98731e
-    rm -rf "$ROOT/usr/${dir}.usrmove-new"
Harald Hoyer 98731e
-    [[ -L "$ROOT/$dir" ]] && continue
Harald Hoyer 98731e
-    [[ -d "$ROOT/$dir" ]] || continue
Harald Hoyer 98731e
-    echo "Make a copy of \`$ROOT/usr/$dir'."
Harald Hoyer 98731e
-    [[ -d "$ROOT/usr/$dir" ]] \
Harald Hoyer 98731e
-        && cp -ax $CP_HARDLINK "$ROOT/usr/$dir" "$ROOT/usr/${dir}.usrmove-new"
Harald Hoyer 98731e
-    echo "Merge the copy with \`$ROOT/$dir'."
Harald Hoyer 98731e
-    [[ -d "$ROOT/usr/${dir}.usrmove-new" ]] \
Harald Hoyer 98731e
-        || mkdir -p "$ROOT/usr/${dir}.usrmove-new"
Harald Hoyer 98731e
-    cp -axT $CP_HARDLINK --backup --suffix=.usrmove~ "$ROOT/$dir" "$ROOT/usr/${dir}.usrmove-new"
Harald Hoyer 98731e
-    echo "Clean up duplicates in \`$ROOT/usr/$dir'."
Harald Hoyer 98731e
-    # delete all symlinks that have been backed up
Harald Hoyer 98731e
-    find "$ROOT/usr/${dir}.usrmove-new" -type l -name '*.usrmove~' -delete || :
Harald Hoyer 98731e
-    # replace symlink with backed up binary
Harald Hoyer 98731e
-    find "$ROOT/usr/${dir}.usrmove-new" \
Harald Hoyer 98731e
-        -name '*.usrmove~' \
Harald Hoyer 98731e
-        -type f \
Harald Hoyer 98731e
-        -exec bash -c 'p="{}";o=${p%%%%.usrmove~};
Harald Hoyer 98731e
-                       [[ -L "$o" ]] && mv -f "$p" "$o"' ';' || :
Harald Hoyer 98731e
-done
Harald Hoyer 98731e
-# switch over merged dirs in /usr
Harald Hoyer 98731e
-for dir in bin sbin lib lib64; do
Harald Hoyer 98731e
-    [[ -d "$ROOT/usr/${dir}.usrmove-new" ]] || continue
Harald Hoyer 98731e
-    echo "Switch to new \`$ROOT/usr/$dir'."
Harald Hoyer 98731e
-    rm -fr "$ROOT/usr/${dir}.usrmove-old"
Harald Hoyer 98731e
-    mv "$ROOT/usr/$dir" "$ROOT/usr/${dir}.usrmove-old"
Harald Hoyer 98731e
-    mv "$ROOT/usr/${dir}.usrmove-new" "$ROOT/usr/$dir"
Harald Hoyer 98731e
-done
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-# replace dirs in / with links to /usr
Harald Hoyer 98731e
-for dir in bin sbin lib lib64; do
Harald Hoyer 98731e
-    [[ -L "$ROOT/$dir" ]] && continue
Harald Hoyer 98731e
-    [[ -d "$ROOT/$dir" ]] || continue
Harald Hoyer 98731e
-    echo "Create \`$ROOT/$dir' symlink."
Harald Hoyer 98731e
-    rm -rf "$ROOT/${dir}.usrmove-old" || :
Harald Hoyer 98731e
-    mv "$ROOT/$dir" "$ROOT/${dir}.usrmove-old"
Harald Hoyer 98731e
-    ln -sfn usr/$dir "$ROOT/$dir"
Harald Hoyer 98731e
-done
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-echo "Clean up backup files."
Harald Hoyer 98731e
-# everything seems to work; cleanup
Harald Hoyer 98731e
-for dir in bin sbin lib lib64; do
Harald Hoyer 98731e
-     # if we get killed in the middle of "rm -rf", ensure not to leave
Harald Hoyer 98731e
-     # an incomplete directory, which is moved back by cleanup()
Harald Hoyer 98731e
-    [[ -d "$ROOT/usr/${dir}.usrmove-old" ]] \
Harald Hoyer 98731e
-        && mv "$ROOT/usr/${dir}.usrmove-old" "$ROOT/usr/${dir}.usrmove-old~"
Harald Hoyer 98731e
-    [[ -d "$ROOT/${dir}.usrmove-old" ]] \
Harald Hoyer 98731e
-        && mv "$ROOT/${dir}.usrmove-old" "$ROOT/${dir}.usrmove-old~"
Harald Hoyer 98731e
-done
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-for dir in bin sbin lib lib64; do
Harald Hoyer 98731e
-    [[ -d "$ROOT/usr/${dir}.usrmove-old~" ]] \
Harald Hoyer 98731e
-        && rm -rf "$ROOT/usr/${dir}.usrmove-old~" || :
Harald Hoyer 98731e
-    [[ -d "$ROOT/${dir}.usrmove-old~" ]] \
Harald Hoyer 98731e
-        && rm -rf "$ROOT/${dir}.usrmove-old~" || :
Harald Hoyer 98731e
-done
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-for dir in lib lib64; do
Harald Hoyer 98731e
-    [[ -d "$ROOT/$dir" ]] || continue
Harald Hoyer 98731e
-    for lib in "$ROOT"/usr/${dir}/lib*.so*.usrmove~; do
Harald Hoyer 98731e
-        [[ -f $lib ]] || continue
Harald Hoyer 98731e
-        mv $lib ${lib/.so/_so}
Harald Hoyer 98731e
-    done
Harald Hoyer 98731e
-done
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-set +e
Harald Hoyer 98731e
-
Harald Hoyer 98731e
-echo "Run ldconfig."
Harald Hoyer 98731e
-ldconfig -r "$ROOT"
Harald Hoyer 98731e
-#echo "Set autorelabel flag."
Harald Hoyer 98731e
-#> "$ROOT/.autorelabel"
Harald Hoyer 98731e
-echo "Done."
Harald Hoyer 98731e
-exit 0