aboutsummaryrefslogtreecommitdiffstats
path: root/usr/libexec/import-state
diff options
context:
space:
mode:
authorOlav Vitters <olav@vitters.nl>2020-07-26 21:46:44 +0200
committerOlav Vitters <olav@vitters.nl>2020-07-26 21:46:44 +0200
commit244c9a00ae9a0dc62156aeb8781c2b22da0ad96e (patch)
treec0d76ed490862837a8a37bb61ed8e653e5cc2558 /usr/libexec/import-state
parentd0d18c6de12efeba25eb41d7cf207037027e4964 (diff)
parent6ca701a23c74b245f35750149a22f7d21805a8e0 (diff)
downloadinitscripts-244c9a00ae9a0dc62156aeb8781c2b22da0ad96e.tar
initscripts-244c9a00ae9a0dc62156aeb8781c2b22da0ad96e.tar.gz
initscripts-244c9a00ae9a0dc62156aeb8781c2b22da0ad96e.tar.bz2
initscripts-244c9a00ae9a0dc62156aeb8781c2b22da0ad96e.tar.xz
initscripts-244c9a00ae9a0dc62156aeb8781c2b22da0ad96e.zip
Merge tag '10.04' into distro/mga
10.04 release
Diffstat (limited to 'usr/libexec/import-state')
-rwxr-xr-xusr/libexec/import-state39
1 files changed, 39 insertions, 0 deletions
diff --git a/usr/libexec/import-state b/usr/libexec/import-state
new file mode 100755
index 00000000..be2d13eb
--- /dev/null
+++ b/usr/libexec/import-state
@@ -0,0 +1,39 @@
+#!/bin/bash
+# import-state: import state files from initramfs (e.g. network config)
+
+# Copy state into root folder:
+# ============================
+cd /run/initramfs/state
+
+IFS_backup=$IFS
+IFS=$'\n' # Process find's results line by line
+
+dirs_found=$(find . -type d)
+
+for dir in $dirs_found; do
+ pushd "$dir" > /dev/null
+
+ # Remove initial '.' char from the find's result:
+ dest_dir="${dir/\./}"
+
+ # Create destination folder if it does not exist (with the same rights):
+ if [[ -n "$dest_dir" && ! -d "$dest_dir" ]]; then
+ mkdir -p "$dest_dir"
+ chmod --reference="$PWD" "$dest_dir"
+ chown --reference="$PWD" "$dest_dir"
+ fi
+
+ # Copy all files that are not directory:
+ find . -mindepth 1 -maxdepth 1 -not -type d -exec cp -av -t "$dest_dir" {} \; > /dev/null
+
+ popd > /dev/null
+done
+
+IFS=$IFS_backup
+
+
+# Run restorecon on the copied files:
+# ===================================
+if [ -e /sys/fs/selinux/enforce ] && [ -x /usr/sbin/restorecon ]; then
+ find . -mindepth 1 -print0 | { cd / && xargs --null restorecon -iF; }
+fi