diff --git a/sysutils/etcupdate/files/etcupdate b/sysutils/etcupdate/files/etcupdate index 182a55142c6d..82c1163c4ddc 100755 --- a/sysutils/etcupdate/files/etcupdate +++ b/sysutils/etcupdate/files/etcupdate @@ -1,6 +1,6 @@ #!/bin/sh # -# $NetBSD: etcupdate,v 1.20 2003/02/04 08:40:57 martti Exp $ +# $NetBSD: etcupdate,v 1.21 2003/04/05 18:17:22 perry Exp $ # # Copyright (c) 2001 The NetBSD Foundation, Inc. # All rights reserved. @@ -55,11 +55,13 @@ PATH="/sbin:/usr/sbin:/bin:/usr/bin:${PATH}" TEMPROOT="${TEMPROOT:=/tmp/temproot}" SRCDIR="${SRCDIR:=/usr/src/etc}" PAGER="${PAGER:=/usr/bin/more}" -WIDTH="${WIDTH:=80}" +SWIDTH=`stty -a | fgrep columns | sed -E 's/.+ ([0-9]+) columns.+/\1/'` +WIDTH="${WIDTH:=${SWIDTH}}" VERBOSE= CONTINUE= BINARY= AUTOMATIC= +LOCALSKIP= # Settings for post-installation procedures NEED_MTREE= @@ -81,6 +83,8 @@ Options: -w width Screen width (default: 80) -a Automatically update unmodified files + -l Automatically skip files with strictly local changes + (this option has no effect on files lacking RCS Ids) -h This help text -v Be more verbose @@ -149,8 +153,8 @@ install_checksum() { [ "${AUTOMATIC}" != "YES" ] && return D=`dirname "${1}"` - mkdir -p "/etc/etcupdate/${D}" - md5 "${1}" > "/etc/etcupdate/${1}" + mkdir -p "/var/etcupdate/${D}" + md5 "${1}" > "/var/etcupdate/${1}" } diff_and_merge_file() { @@ -163,9 +167,9 @@ diff_and_merge_file() { return fi - if [ "${AUTOMATIC}" = "YES" -a -f "/etc/etcupdate/${1}" ] ; then + if [ "${AUTOMATIC}" = "YES" -a -f "/var/etcupdate/${1}" ] ; then SUM1=`md5 "${1}"` - SUM2=`cat "/etc/etcupdate/${1}"` + SUM2=`cat "/var/etcupdate/${1}"` if [ "${SUM1}" = "${SUM2}" ] ; then install_file "${1}" install_checksum "${1}" @@ -173,6 +177,18 @@ diff_and_merge_file() { fi fi + if [ "${LOCALSKIP}" = "YES" ] ; then + ID1=`ident -q "${TEMPROOT}${1}" | sed -n 2p` + ID1="${ID1:-0}" + ID2=`ident -q "${1}" | sed -n 2p` + ID2="${ID2:-1}" + if [ "${ID1}" = "${ID2}" ] ; then + verbose "===> ${1} (ok:RCS)" + rm -f "${TEMPROOT}${1}" + return + fi + fi + clear if [ ! -f "${1}" ]; then verbose "===> ${1} (missing)" @@ -300,7 +316,7 @@ USERRC="${HOME}/.`basename $0`rc" [ -r ${USERRC} ] && . ${USERRC} # Read command line arguments -ARGV=`getopt ab:hp:s:t:vw: $*` +ARGV=`getopt ab:hlp:s:t:vw: $*` [ $? != 0 ] && usage set -- ${ARGV} for i; do @@ -317,6 +333,10 @@ for i; do -h) usage ;; + -l) + LOCALSKIP=YES + shift + ;; -p) PAGER="${2}" shift 2 @@ -394,7 +414,7 @@ if [ -z "${CONTINUE}" ]; then MAKE=make \ MTREE=mtree \ INSTALL_DONE=1 \ - NO_SENDMAIL=1" + USETOOLS=never" echo "*** Populating ${TEMPROOT} from ${SRCDIR}" cd ${SRCDIR} if [ -z "${VERBOSE}" ]; then @@ -417,6 +437,14 @@ if [ -z "${CONTINUE}" ]; then rm -f "${TEMPROOT}"/etc/spwd.db find "${TEMPROOT}" -type f -size 0 -exec rm {} \; + # Ignore files we're told to ignore + if [ ! -z "${IGNOREFILES}" ]; then + echo "*** Ignoring files: ${IGNOREFILES}" + for file in ${IGNOREFILES}; do + rm -f "${TEMPROOT}"${file} + done + fi + # Are there any new directories? echo "*** Checking for new directories" for i in `find ${TEMPROOT} -type d`; do diff --git a/sysutils/etcupdate/files/etcupdate.8 b/sysutils/etcupdate/files/etcupdate.8 index 01ee14ccd193..279711eca5f3 100644 --- a/sysutils/etcupdate/files/etcupdate.8 +++ b/sysutils/etcupdate/files/etcupdate.8 @@ -1,4 +1,4 @@ -.\" $NetBSD: etcupdate.8,v 1.8 2003/01/27 07:54:24 martti Exp $ +.\" $NetBSD: etcupdate.8,v 1.9 2003/04/05 18:17:23 perry Exp $ .\" .\" Copyright (c) 2001 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -34,7 +34,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd January 24, 2003 +.Dd April 2, 2003 .Dt ETCUPDATE 8 .Os .Sh NAME @@ -46,6 +46,7 @@ .Op Fl a .Op Fl b Ar srcdir .Op Fl h +.Op Fl l .Op Fl p Ar pager .Op Fl s Ar srcdir .Op Fl t Ar temproot @@ -53,48 +54,25 @@ .Op Fl w Ar width .Sh DESCRIPTION .Nm -is a tool to update the configuration and startup files in +is a tool that lets the administrator update the configuration and +startup files in .Pa /etc (and some other directories like .Pa /dev , .Pa /root and .Pa /var ) -without the need of manually checking and modifying every file. -The user should run this script after performing an operating system -update (e.g. after running +without having to manually check and modify every file. +The administrator should run this script after performing an operating +system update (e.g. after running .Pa make build in .Pa /usr/src -or after extracting the binary distribution files) -to use the latest configuration and startup files. -.Pp -If the user is updating from sources (which is the default mode), -.Nm -will first create a copy of the new configuration and startup files -by running -.Pa make distribution -in -.Pa /usr/src/etc . -.Pp -Instead of using sources, the user can also extract one or more binary -distribution sets and use those files to update the currently installed -files (see usage of the -.Fl b Ar srcdir -argument later in this manual page). -Files in -.Pa srcdir -will be removed by -.Nm -when using the -.Fl b Ar srcdir -argument (as the -.Pa srcdir -directory is treated like -.Pa temproot ) . +or after extracting new binary distribution files) +to update to the latest configuration and startup files. .Pp .Nm -compares the new files against the currently installed files. +compares the new configuration files against the currently installed files. The user is given the option of installing, merging or deleting each modified or missing file. .Nm @@ -105,62 +83,156 @@ from the file. .Pp .Nm +needs a clean set of new configuration files to compare the +existing files against. +These files, called the +.Dq reference files +in this manual, may be derived from either a source or binary +distribution of +.Nx . +.Pp +If the user is updating from sources (which is the default mode), +.Nm +will first create a copy of the reference files +by running +.Pa make distribution +in +.Pa /usr/src/etc , +installing the files to a so-called +.Pa temproot . +(See usage of the +.Fl s Ar srcdir , +and +.Fl t Ar temproot +options later in this manual page.) +.Pp +Instead of using sources, the user can also extract one or more binary +distribution sets in a special location and use those as the reference +files (see usage of the +.Fl b Ar srcdir +option later in this manual page). +.Pp +The following options are available: +.Bl -tag -width indent +.It Fl a +.Nm can automatically update files which have not been modified locally. The .Fl a flag instructs .Nm to store MD5 checksums in -.Pa /etc/etcupdate +.Pa /var/etcupdate and use these checksums to determine if there have been any local modifications. -.Sh ENVIRONMENT -.Bl -tag -width TEMPROOT -.It Ev TEMPROOT -The temporary files created from -.Pa /usr/src/etc -will be stored here. These files will then be compared -against the currently installed files in the -.Pa /etc -directory. By default this is -.Pa /tmp/temproot -but it can be changed either with the -.Fl t Ar temproot -argument or by defining the -.Ev TEMPROOT -variable. -.It Ev SRCDIR -The location of the -.Nx -sources files. By default this is -.Pa /usr/src/etc -but it can be changed either with the -.Fl s Ar srcdir -argument or by defining the -.Ev SRCDIR -variable. -.It Ev PAGER -The pager to use when displaying files. By default this is +.It Fl b +Location of reference files extracted from a binary distribution of +.Nx . +Note that reference files in +.Pa srcdir +will be altered and removed by +.Nm +when using the +.Fl b Ar srcdir +option (as the +.Pa srcdir +directory is treated like +.Pa temproot ) . +.It Fl h +Prints a help text. +.It Fl l +Automatically skip files with unchanged RCS IDs. +This has the effect of leaving alone files that have been altered +locally but which have not been changed in the +reference files. +Since this works using RCS IDs, files without RCS IDs will not be +skipped even if only modified locally. +This flag may be used together with the +.Fl a +flag described above. +.It Fl p +The pager to use when displaying files. +By default this is .Xr more 1 -but it can be changed either with the -.Fl p Ar pager -argument or by defining the +but it can be changed either with this option +or by defining the .Ev PAGER variable. -.It Ev WIDTH -The screen width used during interactive merge. By default this is -80 but it can be changed either with the -.Fl w Ar width -argument or by defining the +.It Fl s +The location of the +.Nx +sources files used to create the reference files. +By default this is +.Pa /usr/src/etc +but it can be changed either with this option +or the +.Ev SRCDIR +variable. +.It Fl t +Specifies the location of the +.Pa temproot +directory. +The temporary reference files created from +.Pa /usr/src/etc +will be stored there. +By default this is +.Pa /tmp/temproot +but can be changed either with this option or the +.Ev TEMPROOT +environment variable. +.It Fl v +Makes +.Nm +verbose about its actions. +.It Fl w +Sets screen width used during interactive merge. +By default this is the number of columns +.Xr stty 1 +reports but it can be changed either with this +option or by defining the .Ev WIDTH variable. This is useful for .Xr xterm 1 users with wider shell windows. .El +.Sh ENVIRONMENT +.Bl -tag -width TEMPROOT +.It Ev TEMPROOT +Sets a default value for +.Pa temproot . +See +.Fl t +above. +.It Ev SRCDIR +The location of the +.Nx +sources files. +See +.Fl s +above. +.It Ev PAGER +The pager to use when displaying files. +See +.Fl p +above. +.It Ev WIDTH +The screen width used during interactive merge. +See +.Fl w +above. +.It Ev IGNOREFILES +A list of files that +.Nm +should ignore. +Files listed in this +variable will never be considered for updating by +.Nm . +.El .Sh FILES The environment variables can also be defined in the following configuration -files. The user's personal configuration file settings override the global +files. +The user's personal configuration file settings override the global settings. .Pp /etc/etcupdate.conf @@ -205,25 +277,42 @@ To get a better idea what's going on, use the flag: .Pp .Dl etcupdate -v +.Sh SEE ALSO +.Xr cmp 1 , +.Xr more 1 , +.Xr rcs 1 , +.Xr sdiff 1 , +.Xr stty 1 , +.Xr aliases 5 .Sh HISTORY The .Nm command appeared in .Nx 1.6 . .Sh AUTHORS -The -script was written by Martti Kuparinen and -improved by several other +The script was written by +.An Martti Kuparinen +.Aq martti@NetBSD.org +and improved by several other .Nx users. .Pp The idea for this script (including code fragments, variable names etc.) came from the .Fx -mergemaster (by Douglas Barton). Unlike the +mergemaster (by Douglas Barton). +Unlike the .Fx -mergemaster, this does not use CVS version tags to compare if -the files need to be updated. Files are compared with +mergemaster, this does not use CVS version tags by default to compare if +the files need to be updated. +Files are compared with .Xr cmp 1 as this is more reliable and the only way if the version numbers are the same even though the files are different. +.\" when exactly are the version the same even though the file changes? +.\" .Pp +.\" .Sh BUGS +.\" Because of the use of +.\" .Xr cmp 1 +.\" to compare files, rather than CVS versions, files that are locally changed +.\" from the distribution are always considered needing to be updated.