svn commit: r263189 - head/tools/tools/nanobsd/Files/root
Warner Losh
imp at FreeBSD.org
Fri Mar 14 20:20:32 UTC 2014
Author: imp
Date: Fri Mar 14 20:20:32 2014
New Revision: 263189
URL: http://svnweb.freebsd.org/changeset/base/263189
Log:
NanoBSD has a utility shell script called save_cfg which helps keep
/cfg updated with the modified configuration files in /etc. I have
written an improved version with the following features:
* Recurses directories.
* Only requires file arguments the first time the file/directory is
* added to /cfg.
* Handles file deletions.
PR: 145962, 157533
Submitted by: Aragon Gouveia and Alex Bakhtin
Modified:
head/tools/tools/nanobsd/Files/root/save_cfg
Modified: head/tools/tools/nanobsd/Files/root/save_cfg
==============================================================================
--- head/tools/tools/nanobsd/Files/root/save_cfg Fri Mar 14 19:46:32 2014 (r263188)
+++ head/tools/tools/nanobsd/Files/root/save_cfg Fri Mar 14 20:20:32 2014 (r263189)
@@ -1,6 +1,7 @@
#!/bin/sh
#
# Copyright (c) 2006 Mathieu Arnold
+# Copyright (c) 2010 Alex Bakhtin
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -32,11 +33,86 @@ set -e
trap "umount /cfg" 1 2 15 EXIT
mount /cfg
(
+cd /etc
+for filename in "$@" `find * -type f`
+do
+ if [ ! -f /cfg/$filename -a ! -f /cfg/.ignore/$filename ]
+ then
+
+ #
+ # If file doesn't exist in /cfg and file is not in the 'ignore' list
+ # then check if this file is exactly the same as original file
+ # in nanobsd image
+ #
+ if ! cmp -s /etc/$filename /conf/base/etc/$filename
+ then
+ file_path=`echo "$filename" | sed 's/\/[^/]*$//'`
+ if [ $file_path != $filename ]
+ then
+ if [ ! -d /etc/$file_path ]
+ then
+ # should never go here unless we have some errors in
+ # sed script extracting file path
+ echo "Error: Path /etc/$file_path is not directory."
+ exit 1;
+ fi
+ fi
+
+ #
+ # Ask user - how should we handle this file.
+ # Add to cfg (y/n/i)?
+ # y) -> save this file in /cfg
+ # n) -> do not save this file in /cfg for current script invocation ONLY
+ # i) -> add file to ignore list (/cfg/.ignore hiereachy) and never save
+ # try to add this file to /cfg.
+ #
+ # touch is ised to add files to /cfg to keep the script flow straight and easy
+ #
+ read -p "New file /etc/$filename found. Add to /cfg (y/n/i)? " key
+ case "$key" in
+ [yY])
+ if [ $file_path != $filename ]
+ then
+ mkdir -vp /cfg/$file_path
+ fi
+ touch /cfg/$filename && echo "File /etc/$filename added to /cfg."
+ ;;
+ [iI])
+ mkdir -vp /cfg/.ignore
+ if [ $file_path != $filename ]
+ then
+ mkdir -vp /cfg/.ignore/$file_path
+ fi
+ touch /cfg/.ignore/$filename && echo "File /etc/$filename added to ignore list."
+ ;;
+ esac
+ fi
+ fi
+done
+
+#
+# Actually check all files in /cfg and save if necessary
+#
cd /cfg
-for i in "$@" `find * -type f`
+for filename in "$@" `find * -type f`
do
- cmp -s /etc/$i /cfg/$i || cp -pfv /etc/$i /cfg/$i
+ if [ -f /etc/$filename ]
+ then
+ cmp -s /etc/$filename /cfg/$filename || cp -pfv /etc/$filename /cfg/$filename
+ else
+
+ #
+ # Give user an option to remove file from /cfg if this file is removed from /etc
+ #
+ read -p "File /cfg/$filename not found in /etc. Remove from /cfg (y/n)? " key
+ case "$key" in
+ [yY])
+ rm /cfg/$filename && echo "File /cfg/$filename removed"
+ ;;
+ esac
+ fi
done
+
)
umount /cfg
trap 1 2 15 EXIT
More information about the svn-src-all
mailing list