Date: Tue, 12 Nov 2013 20:03:22 +0000 (UTC) From: Antoine Brodin <antoine@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r333612 - in head/sysutils/etcupdate: . src Message-ID: <201311122003.rACK3M1S086784@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: antoine Date: Tue Nov 12 20:03:21 2013 New Revision: 333612 URL: http://svnweb.freebsd.org/changeset/ports/333612 Log: - Update to 1.0 - Add LICENSE - Stage support Submitted by: jhb (maintainer) Modified: head/sysutils/etcupdate/Makefile head/sysutils/etcupdate/src/etcupdate.8 head/sysutils/etcupdate/src/etcupdate.sh Modified: head/sysutils/etcupdate/Makefile ============================================================================== --- head/sysutils/etcupdate/Makefile Tue Nov 12 19:53:01 2013 (r333611) +++ head/sysutils/etcupdate/Makefile Tue Nov 12 20:03:21 2013 (r333612) @@ -2,7 +2,7 @@ # $FreeBSD$ PORTNAME= etcupdate -PORTVERSION= 0.4 +PORTVERSION= 1.0 CATEGORIES= sysutils MASTER_SITES= # none DISTFILES= # none @@ -10,17 +10,17 @@ DISTFILES= # none MAINTAINER= jhb@FreeBSD.org COMMENT= Manage updates to /etc automatically +LICENSE= BSD + NO_BUILD= yes NO_WRKSUBDIR= yes SRC= ${.CURDIR}/src -MAN8= ${PORTNAME}.8 -PLIST_FILES= sbin/etcupdate +PLIST_FILES= sbin/etcupdate man/man8/etcupdate.8.gz -NO_STAGE= yes do-install: - ${INSTALL_SCRIPT} ${SRC}/${PORTNAME}.sh ${PREFIX}/sbin/${PORTNAME} - ${INSTALL_MAN} ${SRC}/${PORTNAME}.8 ${PREFIX}/man/man8 + ${INSTALL_SCRIPT} ${SRC}/${PORTNAME}.sh ${STAGEDIR}${PREFIX}/sbin/${PORTNAME} + ${INSTALL_MAN} ${SRC}/${PORTNAME}.8 ${STAGEDIR}${PREFIX}/man/man8 .include <bsd.port.mk> Modified: head/sysutils/etcupdate/src/etcupdate.8 ============================================================================== --- head/sysutils/etcupdate/src/etcupdate.8 Tue Nov 12 19:53:01 2013 (r333611) +++ head/sysutils/etcupdate/src/etcupdate.8 Tue Nov 12 20:03:21 2013 (r333612) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd March 16, 2012 +.Dd November 12, 2013 .Dt ETCUPDATE 8 .Os .Sh NAME @@ -33,7 +33,7 @@ .Nd "manage updates to system files not updated by installworld" .Sh SYNOPSIS .Nm -.Op Fl nBF +.Op Fl npBF .Op Fl d Ar workdir .Op Fl r | Fl s Ar source | Fl t Ar tarball .Op Fl A Ar patterns @@ -64,6 +64,7 @@ .Op Fl M Ar options .Nm .Cm resolve +.Op Fl p .Op Fl d Ar workdir .Op Fl D Ar destdir .Op Fl L Ar logfile @@ -112,7 +113,6 @@ The utility will not perform a new merge until all conflicts from an earlier merge are resolved. .Sh MODES -.Pp The .Nm utility supports several modes of operation. @@ -150,7 +150,7 @@ tree. An older .Dq previous tree is removed if it exists. -By default the new +By default the new .Dq current tree is built from a source tree. However, @@ -343,25 +343,7 @@ then nothing will be output. .Sh OPTIONS The following options are available. Note that most options do not apply to all modes. -.Bl -tag -width ".Fl d Ar workdir" -.It Fl B -Do not build generated files in a private object tree. -Instead, -reuse the generated files from a previously built object tree that matches -the source tree. -This can be useful to avoid gratuitous conflicts in sendmail configuration -files when bootstrapping. -It can also be useful for building a tarball that matches a specific -world build. -.It Fl d Ar workdir -Specify an alternate directory to use as the work directory. -The work directory is used to store the -.Dq current -and -.Dq previous -trees as well as unresolved conflicts. -The default work directory is -.Pa <destdir>/var/db/etcupdate . +.Bl -tag -width ".Fl A Ar patterns" .It Fl A Ar patterns Always install the new version of any files that match any of the patterns listed in @@ -377,9 +359,20 @@ Note that ignored files specified via th variable or the .Fl I option will not be installed. +.It Fl B +Do not build generated files in a private object tree. +Instead, +reuse the generated files from a previously built object tree that matches +the source tree. +This can be useful to avoid gratuitous conflicts in +.Xr sendmail 8 +configuration +files when bootstrapping. +It can also be useful for building a tarball that matches a specific +world build. .It Fl D Ar destdir Specify an alternate destination directory as the target of a merge. -This is analagous to the +This is analogous to the .Dv DESTDIR variable used with .Sq make installworld . @@ -387,6 +380,15 @@ The default destination directory is an merges updating .Pa /etc on the local machine. +.It Fl d Ar workdir +Specify an alternate directory to use as the work directory. +The work directory is used to store the +.Dq current +and +.Dq previous +trees as well as unresolved conflicts. +The default work directory is +.Pa <destdir>/var/db/etcupdate . .It Fl F Ignore changes in the FreeBSD ID string when comparing files in the destination directory to files in either of the @@ -480,6 +482,33 @@ option is not specified, then a temporary .Dq current tree will be extracted to perform the comparison. +.It Fl p +Enable +.Dq pre-world +mode. +Only merge changes to files that are necessary to successfully run +.Sq make installworld +or +.Sq make installkernel . +When this flag is enabled, +the existing +.Dq current +and +.Dq previous +trees are left alone. +Instead, +a temporary tree is populated with the necessary files. +This temporary tree is compared against the +.Dq current +tree. +This allows a normal update to be run after +.Sq make installworld +has completed. +Any conflicts generated during a +.Dq pre-world +update should be resolved by a +.Dq pre-world +.Cm resolve . .It Fl r Do not update the .Dq current @@ -739,12 +768,16 @@ but it has been removed in the destinati .El .Sh SEE ALSO .Xr cap_mkdb 1 , -.Xr diff 1 , +.Xr diff 1 , .Xr make 1 , .Xr newaliases 1 , .Xr sh 1 , .Xr pwd_mkdb 8 -.\".Sh HISTORY +.Sh HISTORY +The +.Nm +utility first appeared in +.Fx 10.0 . .Sh AUTHORS The .Nm Modified: head/sysutils/etcupdate/src/etcupdate.sh ============================================================================== --- head/sysutils/etcupdate/src/etcupdate.sh Tue Nov 12 19:53:01 2013 (r333611) +++ head/sysutils/etcupdate/src/etcupdate.sh Tue Nov 12 20:03:21 2013 (r333612) @@ -61,14 +61,15 @@ usage() { cat <<EOF -usage: etcupdate [-nBF] [-d workdir] [-r | -s source | -t tarball] [-A patterns] - [-D destdir] [-I patterns] [-L logfile] [-M options] +usage: etcupdate [-npBF] [-d workdir] [-r | -s source | -t tarball] + [-A patterns] [-D destdir] [-I patterns] [-L logfile] + [-M options] etcupdate build [-B] [-d workdir] [-s source] [-L logfile] [-M options] <tarball> etcupdate diff [-d workdir] [-D destdir] [-I patterns] [-L logfile] etcupdate extract [-B] [-d workdir] [-s source | -t tarball] [-L logfile] [-M options] - etcupdate resolve [-d workdir] [-D destdir] [-L logfile] + etcupdate resolve [-p] [-d workdir] [-D destdir] [-L logfile] etcupdate status [-d workdir] [-D destdir] EOF exit 1 @@ -181,22 +182,31 @@ always_install() # $1 - directory to store new tree in build_tree() { - local make + local destdir dir file make make="make $MAKE_OPTIONS" log "Building tree at $1 with $make" mkdir -p $1/usr/obj >&3 2>&1 - (cd $SRCDIR; $make DESTDIR=$1 distrib-dirs) >&3 2>&1 || return 1 + destdir=`realpath $1` - if ! [ -n "$nobuild" ]; then - (cd $SRCDIR; \ - MAKEOBJDIRPREFIX=$1/usr/obj $make _obj SUBDIR_OVERRIDE=etc && - MAKEOBJDIRPREFIX=$1/usr/obj $make everything SUBDIR_OVERRIDE=etc && - MAKEOBJDIRPREFIX=$1/usr/obj $make DESTDIR=$1 distribution) \ + if [ -n "$preworld" ]; then + # Build a limited tree that only contains files that are + # crucial to installworld. + for file in $PREWORLD_FILES; do + dir=`dirname /$file` + mkdir -p $1/$dir >&3 2>&1 || return 1 + cp -p $SRCDIR/$file $1/$file || return 1 + done + elif ! [ -n "$nobuild" ]; then + (cd $SRCDIR; $make DESTDIR=$destdir distrib-dirs && + MAKEOBJDIRPREFIX=$destdir/usr/obj $make _obj SUBDIR_OVERRIDE=etc && + MAKEOBJDIRPREFIX=$destdir/usr/obj $make everything SUBDIR_OVERRIDE=etc && + MAKEOBJDIRPREFIX=$destdir/usr/obj $make DESTDIR=$destdir distribution) \ >&3 2>&1 || return 1 else - (cd $SRCDIR; $make DESTDIR=$1 distribution) >&3 2>&1 || return 1 + (cd $SRCDIR; $make DESTDIR=$destdir distrib-dirs && + $make DESTDIR=$destdir distribution) >&3 2>&1 || return 1 fi chflags -R noschg $1 >&3 2>&1 || return 1 rm -rf $1/usr/obj >&3 2>&1 || return 1 @@ -218,9 +228,15 @@ build_tree() # source tree. extract_tree() { + local files + # If we have a tarball, extract that into the new directory. if [ -n "$tarball" ]; then - if ! (mkdir -p $NEWTREE && tar xf $tarball -C $NEWTREE) \ + files= + if [ -n "$preworld" ]; then + files="$PREWORLD_FILES" + fi + if ! (mkdir -p $NEWTREE && tar xf $tarball -C $NEWTREE $files) \ >&3 2>&1; then echo "Failed to extract new tree." remove_tree $NEWTREE @@ -1298,6 +1314,11 @@ resolve_cmd() return fi + if ! [ -d $NEWTREE ]; then + echo "The current tree is not present to resolve conflicts." + exit 1 + fi + conflicts=`(cd $CONFLICTS; find . ! -type d) | sed -e 's/^\.//'` for file in $conflicts; do resolve_conflict $file @@ -1343,7 +1364,7 @@ update_cmd() usage fi - log "update command: rerun=$rerun tarball=$tarball" + log "update command: rerun=$rerun tarball=$tarball preworld=$preworld" if [ `id -u` -ne 0 ]; then echo "Must be root to update a tree." @@ -1376,9 +1397,22 @@ update_cmd() echo "Unable to create temporary directory." exit 1 fi - OLDTREE=$NEWTREE + + # A pre-world dryrun has already set OLDTREE to + # point to the current stock tree. + if [ -z "$preworld" ]; then + OLDTREE=$NEWTREE + fi NEWTREE=$dir + # For a pre-world update, blow away any pre-existing + # NEWTREE. + elif [ -n "$preworld" ]; then + if ! remove_tree $NEWTREE; then + echo "Unable to remove pre-world tree." + exit 1 + fi + # Rotate the existing stock tree to the old tree. elif [ -d $NEWTREE ]; then # First, delete the previous old tree if it exists. @@ -1421,6 +1455,12 @@ EOF # Initialize conflicts and warnings handling. rm -f $WARNINGS mkdir -p $CONFLICTS + + # Ignore removed files for the pre-world case. A pre-world + # update uses a stripped-down tree. + if [ -n "$preworld" ]; then + > $WORKDIR/removed.files + fi # The order for the following sections is important. In the # odd case that a directory is converted into a file, the @@ -1535,7 +1575,8 @@ always= dryrun= ignore= nobuild= -while getopts "d:nrs:t:A:BD:FI:L:M:" option; do +preworld= +while getopts "d:nprs:t:A:BD:FI:L:M:" option; do case "$option" in d) WORKDIR=$OPTARG @@ -1543,6 +1584,9 @@ while getopts "d:nrs:t:A:BD:FI:L:M:" opt n) dryrun=YES ;; + p) + preworld=YES + ;; r) rerun=YES ;; @@ -1633,6 +1677,9 @@ WARNINGS=$WORKDIR/warnings # Use $EDITOR for resolving conflicts. If it is not set, default to vi. EDITOR=${EDITOR:-/usr/bin/vi} +# Files that need to be updated before installworld. +PREWORLD_FILES="etc/master.passwd etc/group" + # Handle command-specific argument processing such as complaining # about unsupported options. Since the configuration file is always # included, do not complain about extra command line arguments that @@ -1644,19 +1691,39 @@ case $command in echo usage fi + if [ -n "$rerun" -a -n "$preworld" ]; then + echo "Only one of -p or -r can be specified." + echo + usage + fi + ;; + build|diff|status) + if [ -n "$dryrun" -o -n "$rerun" -o -n "$tarball" -o + -n "$preworld" ]; then + usage + fi ;; - build|diff|resolve|status) + resolve) if [ -n "$dryrun" -o -n "$rerun" -o -n "$tarball" ]; then usage fi ;; extract) - if [ -n "$dryrun" -o -n "$rerun" ]; then + if [ -n "$dryrun" -o -n "$rerun" -o -n "$preworld" ]; then usage fi ;; esac +# Pre-world mode uses a different set of trees. It leaves the current +# tree as-is so it is still present for a full etcupdate run after the +# world install is complete. Instead, it installs a few critical files +# into a separate tree. +if [ -n "$preworld" ]; then + OLDTREE=$NEWTREE + NEWTREE=$WORKDIR/preworld +fi + # Open the log file. Don't truncate it if doing a minor operation so # that a minor operation doesn't lose log info from a major operation. if ! mkdir -p $WORKDIR 2>/dev/null; then
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201311122003.rACK3M1S086784>