Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F105266172
D35857.id109076.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D35857.id109076.diff
View Options
diff --git a/usr.sbin/etcupdate/etcupdate.8 b/usr.sbin/etcupdate/etcupdate.8
--- a/usr.sbin/etcupdate/etcupdate.8
+++ b/usr.sbin/etcupdate/etcupdate.8
@@ -33,7 +33,7 @@
.Nd "manage updates to system files not updated by installworld"
.Sh SYNOPSIS
.Nm
-.Op Fl npBF
+.Op Fl npBFN
.Op Fl d Ar workdir
.Op Fl r | Fl s Ar source | Fl t Ar tarball
.Op Fl A Ar patterns
@@ -44,7 +44,7 @@
.Op Fl m Ar make
.Nm
.Cm build
-.Op Fl B
+.Op Fl BN
.Op Fl d Ar workdir
.Op Fl s Ar source
.Op Fl L Ar logfile
@@ -59,7 +59,7 @@
.Op Fl L Ar logfile
.Nm
.Cm extract
-.Op Fl B
+.Op Fl BN
.Op Fl d Ar workdir
.Op Fl s Ar source | Fl t Ar tarball
.Op Fl D Ar destdir
@@ -518,6 +518,15 @@
then a temporary
.Dq current
tree will be extracted to perform the comparison.
+.It Fl N
+Perform a
+.Dv NO_ROOT
+build when building a
+.Dq current
+tree.
+The resulting tree will include a corresponding
+.Pa METALOG
+file at its root.
.It Fl p
Enable
.Dq pre-world
diff --git a/usr.sbin/etcupdate/etcupdate.sh b/usr.sbin/etcupdate/etcupdate.sh
--- a/usr.sbin/etcupdate/etcupdate.sh
+++ b/usr.sbin/etcupdate/etcupdate.sh
@@ -62,13 +62,13 @@
usage()
{
cat <<EOF
-usage: etcupdate [-npBF] [-d workdir] [-r | -s source | -t tarball]
+usage: etcupdate [-npBFN] [-d workdir] [-r | -s source | -t tarball]
[-A patterns] [-D destdir] [-I patterns] [-L logfile]
[-M options] [-m make]
- etcupdate build [-B] [-d workdir] [-s source] [-L logfile] [-M options]
+ etcupdate build [-BN] [-d workdir] [-s source] [-L logfile] [-M options]
[-m make] <tarball>
etcupdate diff [-d workdir] [-D destdir] [-I patterns] [-L logfile]
- etcupdate extract [-B] [-d workdir] [-s source | -t tarball]
+ etcupdate extract [-BN] [-d workdir] [-s source | -t tarball]
[-D destdir] [-L logfile] [-M options] [-m make]
etcupdate resolve [-p] [-d workdir] [-D destdir] [-L logfile]
etcupdate revert [-d workdir] [-D destdir] [-L logfile] file ...
@@ -184,14 +184,24 @@
# $1 - directory to store new tree in
build_tree()
(
- local destdir dir file make
+ local destdir dir file make autogenfiles metatmp
make="$MAKE_CMD $MAKE_OPTIONS -DNO_FILEMON"
+ if [ -n "$noroot" ]; then
+ make="$make -DNO_ROOT"
+ metatmp=`mktemp $WORKDIR/etcupdate-XXXXXXX`
+ : > $metatmp
+ trap "rm -f $metatmp; trap '' EXIT; return 1" INT
+ trap "rm -f $metatmp" EXIT
+ else
+ metatmp="/dev/null"
+ trap "return 1" INT
+ fi
+
log "Building tree at $1 with $make"
exec >&3 2>&1
- trap 'return 1' INT
mkdir -p $1/usr/obj
destdir=`realpath $1`
@@ -219,13 +229,38 @@
# Purge auto-generated files. Only the source files need to
# be updated after which these files are regenerated.
- rm -f $1/etc/*.db $1/etc/passwd $1/var/db/services.db || return 1
+ autogenfiles="./etc/*.db ./etc/passwd ./var/db/services.db"
+ (cd $1 && printf '%s\n' $autogenfiles >> $metatmp && \
+ rm -f $autogenfiles) || return 1
# Remove empty files. These just clutter the output of 'diff'.
- find $1 -type f -size 0 -delete || return 1
+ (cd $1 && find . -type f -size 0 -delete -print >> $metatmp) || \
+ return 1
# Trim empty directories.
- find $1 -depth -type d -empty -delete || return 1
+ (cd $1 && find . -depth -type d -empty -delete -print >> $metatmp) || \
+ return 1
+
+ if [ -n "$noroot" ]; then
+ # Rewrite the METALOG to exclude the files (and directories)
+ # removed above. $metatmp contains the list of files to delete,
+ # and we append #METALOG# as a delimiter followed by the
+ # original METALOG. This lets us scan through $metatmp in awk
+ # building up a table of names to delete until we reach the
+ # delimiter, then emit all the entries of the original METALOG
+ # after it that aren't in that table. We also exclude ./usr/obj
+ # and its children explicitly for simplicity rather than
+ # building up that list (and in practice only ./usr/obj itself
+ # will be in the METALOG since nothing is installed there).
+ echo '#METALOG#' >> $metatmp || return 1
+ cat $1/METALOG >> $metatmp || return 1
+ awk '/^#METALOG#$/ { metalog = 1; next }
+ { f=$1; gsub(/\/\/+/, "/", f) }
+ !metalog { rm[f] = 1; next }
+ !rm[f] && f !~ /^\.\/usr\/obj(\/|$)/ { print }' \
+ $metatmp > $1/METALOG || return 1
+ fi
+
return 0
)
@@ -1738,7 +1773,8 @@
ignore=
nobuild=
preworld=
-while getopts "d:m:nprs:t:A:BD:FI:L:M:" option; do
+noroot=
+while getopts "d:m:nprs:t:A:BD:FI:L:M:N" option; do
case "$option" in
d)
WORKDIR=$OPTARG
@@ -1798,6 +1834,9 @@
M)
MAKE_OPTIONS="$OPTARG"
;;
+ N)
+ noroot=YES
+ ;;
*)
echo
usage
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Dec 15, 6:07 AM (12 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15404389
Default Alt Text
D35857.id109076.diff (4 KB)
Attached To
Mode
D35857: etcupdate: Add a -N flag to perform a NO_ROOT build
Attached
Detach File
Event Timeline
Log In to Comment