mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-10 14:02:43 +00:00
- Refresh /etc/localtime after each update using tzsetup -r.
- Regenerate /var/db/services.db when /etc/services changes. MFC after: 1 week
This commit is contained in:
parent
df8fcc1468
commit
3e920822b7
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=259134
@ -66,7 +66,7 @@ TEST=$WORKDIR/test
|
||||
build_trees()
|
||||
{
|
||||
|
||||
# Populate trees with pre-world files and an additional file
|
||||
# Populate trees with pre-world files and additional files
|
||||
# that should not be touched.
|
||||
|
||||
rm -rf $SRC $OLD $TEST $CONFLICTS
|
||||
@ -126,6 +126,7 @@ polkit:*:562:
|
||||
haldaemon:*:560:
|
||||
EOF
|
||||
rm $TEST/etc/inetd.conf
|
||||
touch $TEST/etc/localtime
|
||||
|
||||
# Copy the "old" source tree to the new source tree and
|
||||
# make upstream modifications.
|
||||
|
@ -628,6 +628,24 @@ root: someone@example.com
|
||||
MAILER-DAEMON: postmaster
|
||||
postmaster: root
|
||||
EOF
|
||||
|
||||
# - Verify that updating an unmodified /etc/services builds
|
||||
# /var/db/services.db.
|
||||
cat > $OLD/etc/services <<EOF
|
||||
rtmp 1/ddp #Routing Table Maintenance Protocol
|
||||
tcpmux 1/tcp #TCP Port Service Multiplexer
|
||||
tcpmux 1/udp #TCP Port Service Multiplexer
|
||||
EOF
|
||||
cat > $NEW/etc/services <<EOF
|
||||
rtmp 1/ddp #Routing Table Maintenance Protocol
|
||||
tcpmux 1/tcp #TCP Port Service Multiplexer
|
||||
tcpmux 1/udp #TCP Port Service Multiplexer
|
||||
nbp 2/ddp #Name Binding Protocol
|
||||
compressnet 2/tcp #Management Utility
|
||||
compressnet 2/udp #Management Utility
|
||||
EOF
|
||||
cp $OLD/etc/services $TEST/etc/services
|
||||
mkdir -p $TEST/var/db
|
||||
}
|
||||
|
||||
# $1 - relative path to file that should be missing from TEST
|
||||
@ -896,6 +914,8 @@ check_trees()
|
||||
file /etc/login.conf "" 7774a0f9a3a372c7c109c32fd31c4b6b
|
||||
file /etc/login.conf.db
|
||||
file /etc/mail/aliases "" 7d598f89ec040ab56af54011bdb83337
|
||||
file /etc/services "" 37fb6a8d1273f3b78329d431f21d9c7d
|
||||
file /var/db/services.db
|
||||
}
|
||||
|
||||
if [ `id -u` -ne 0 ]; then
|
||||
@ -934,6 +954,7 @@ cat > $WORKDIR/correct.out <<EOF
|
||||
U /dirchange/old/todir
|
||||
U /etc/login.conf
|
||||
M /etc/mail/aliases
|
||||
U /etc/services
|
||||
A /adddir/partial/file
|
||||
A /dirchange/old/todir/file
|
||||
A /etc/master.passwd
|
||||
|
221
tools/regression/usr.sbin/etcupdate/tzsetup.sh
Executable file
221
tools/regression/usr.sbin/etcupdate/tzsetup.sh
Executable file
@ -0,0 +1,221 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2013 Advanced Computing Technologies LLC
|
||||
# Written by: John H. Baldwin <jhb@FreeBSD.org>
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# $FreeBSD$
|
||||
|
||||
# Various regression tests for the tzsetup handling in the 'update' command.
|
||||
|
||||
WORKDIR=work
|
||||
|
||||
usage()
|
||||
{
|
||||
echo "Usage: tzsetup.sh [-s script] [-w workdir]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Allow the user to specify an alternate work directory or script.
|
||||
COMMAND=etcupdate
|
||||
while getopts "s:w:" option; do
|
||||
case $option in
|
||||
s)
|
||||
COMMAND="sh $OPTARG"
|
||||
;;
|
||||
w)
|
||||
WORKDIR=$OPTARG
|
||||
;;
|
||||
*)
|
||||
echo
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND - 1))
|
||||
if [ $# -ne 0 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
CONFLICTS=$WORKDIR/conflicts
|
||||
OLD=$WORKDIR/old
|
||||
NEW=$WORKDIR/current
|
||||
TEST=$WORKDIR/test
|
||||
|
||||
build_trees()
|
||||
{
|
||||
|
||||
# Build the base tree, but not /etc/localtime itself
|
||||
local i j k
|
||||
|
||||
rm -rf $OLD $NEW $TEST $CONFLICTS
|
||||
mkdir -p $OLD $NEW $TEST
|
||||
mkdir -p $TEST/etc
|
||||
mkdir -p $TEST/var/db
|
||||
mkdir -p $TEST/usr/share/zoneinfo
|
||||
|
||||
# Create a dummy timezone file
|
||||
echo "foo" > $TEST/usr/share/zoneinfo/foo
|
||||
|
||||
}
|
||||
|
||||
# $1 - relative path to file that should be missing from TEST
|
||||
missing()
|
||||
{
|
||||
if [ -e $TEST/$1 -o -L $TEST/$1 ]; then
|
||||
echo "File $1 should be missing"
|
||||
fi
|
||||
}
|
||||
|
||||
# $1 - relative path to file that should be a symlink in TEST
|
||||
# $2 - optional value of the link
|
||||
link()
|
||||
{
|
||||
local val
|
||||
|
||||
if ! [ -L $TEST/$1 ]; then
|
||||
echo "File $1 should be a link"
|
||||
elif [ $# -gt 1 ]; then
|
||||
val=`readlink $TEST/$1`
|
||||
if [ "$val" != "$2" ]; then
|
||||
echo "Link $1 should link to \"$2\""
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# $1 - relative path to regular file that should be present in TEST
|
||||
# $2 - optional string that should match file contents
|
||||
# $3 - optional MD5 of the flie contents, overrides $2 if present
|
||||
file()
|
||||
{
|
||||
local contents sum
|
||||
|
||||
if ! [ -f $TEST/$1 ]; then
|
||||
echo "File $1 should be a regular file"
|
||||
elif [ $# -eq 2 ]; then
|
||||
contents=`cat $TEST/$1`
|
||||
if [ "$contents" != "$2" ]; then
|
||||
echo "File $1 has wrong contents"
|
||||
fi
|
||||
elif [ $# -eq 3 ]; then
|
||||
sum=`md5 -q $TEST/$1`
|
||||
if [ "$sum" != "$3" ]; then
|
||||
echo "File $1 has wrong contents"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
if [ `id -u` -ne 0 ]; then
|
||||
echo "must be root"
|
||||
fi
|
||||
|
||||
if [ -r /etc/etcupdate.conf ]; then
|
||||
echo "WARNING: /etc/etcupdate.conf settings may break some tests."
|
||||
fi
|
||||
|
||||
# First, test for /etc/localtime not existing
|
||||
|
||||
build_trees
|
||||
|
||||
$COMMAND -nr -d $WORKDIR -D $TEST > $WORKDIR/testn.out
|
||||
|
||||
cat > $WORKDIR/correct.out <<EOF
|
||||
EOF
|
||||
|
||||
echo "Differences for no /etc/localtime with -n:"
|
||||
diff -u -L "correct" $WORKDIR/correct.out -L "test" $WORKDIR/testn.out
|
||||
|
||||
$COMMAND -r -d $WORKDIR -D $TEST > $WORKDIR/test.out
|
||||
|
||||
echo "Differences for no /etc/localtime:"
|
||||
diff -u -L "correct" $WORKDIR/correct.out -L "test" $WORKDIR/test.out
|
||||
|
||||
missing /etc/localtime
|
||||
missing /var/db/zoneinfo
|
||||
|
||||
# Second, test for /etc/localtime being a symlink
|
||||
|
||||
build_trees
|
||||
ln -s /dev/null $TEST/etc/localtime
|
||||
|
||||
$COMMAND -nr -d $WORKDIR -D $TEST > $WORKDIR/testn.out
|
||||
|
||||
cat > $WORKDIR/correct.out <<EOF
|
||||
EOF
|
||||
|
||||
echo "Differences for symlinked /etc/localtime with -n:"
|
||||
diff -u -L "correct" $WORKDIR/correct.out -L "test" $WORKDIR/testn.out
|
||||
|
||||
$COMMAND -r -d $WORKDIR -D $TEST > $WORKDIR/test.out
|
||||
|
||||
echo "Differences for symlinked /etc/localtime:"
|
||||
diff -u -L "correct" $WORKDIR/correct.out -L "test" $WORKDIR/test.out
|
||||
|
||||
link /etc/localtime "/dev/null"
|
||||
missing /var/db/zoneinfo
|
||||
|
||||
# Third, test for /etc/localtime as a file and a missing /var/db/zoneinfo
|
||||
|
||||
build_trees
|
||||
echo "bar" > $TEST/etc/localtime
|
||||
|
||||
$COMMAND -nr -d $WORKDIR -D $TEST > $WORKDIR/testn.out
|
||||
|
||||
cat > $WORKDIR/correct.out <<EOF
|
||||
Warnings:
|
||||
Needs update: /etc/localtime (required manual update via tzsetup(1))
|
||||
EOF
|
||||
|
||||
echo "Differences for missing /var/db/zoneinfo with -n:"
|
||||
diff -u -L "correct" $WORKDIR/correct.out -L "test" $WORKDIR/testn.out
|
||||
|
||||
$COMMAND -r -d $WORKDIR -D $TEST > $WORKDIR/test.out
|
||||
|
||||
echo "Differences for missing /var/db/zoneinfo:"
|
||||
diff -u -L "correct" $WORKDIR/correct.out -L "test" $WORKDIR/test.out
|
||||
|
||||
file /etc/localtime "bar"
|
||||
missing /var/db/zoneinfo
|
||||
|
||||
# Finally, test the case where it should update /etc/localtime
|
||||
|
||||
build_trees
|
||||
echo "bar" > $TEST/etc/localtime
|
||||
echo "foo" > $TEST/var/db/zoneinfo
|
||||
|
||||
$COMMAND -nr -d $WORKDIR -D $TEST > $WORKDIR/testn.out
|
||||
|
||||
cat > $WORKDIR/correct.out <<EOF
|
||||
EOF
|
||||
|
||||
echo "Differences for real update with -n:"
|
||||
diff -u -L "correct" $WORKDIR/correct.out -L "test" $WORKDIR/testn.out
|
||||
|
||||
$COMMAND -r -d $WORKDIR -D $TEST > $WORKDIR/test.out
|
||||
|
||||
echo "Differences for real update:"
|
||||
diff -u -L "correct" $WORKDIR/correct.out -L "test" $WORKDIR/test.out
|
||||
|
||||
file /etc/localtime "foo"
|
||||
file /var/db/zoneinfo "foo"
|
@ -1,4 +1,4 @@
|
||||
.\" Copyright (c) 2010-2012 Advanced Computing Technologies LLC
|
||||
.\" Copyright (c) 2010-2013 Advanced Computing Technologies LLC
|
||||
.\" Written by: John H. Baldwin <jhb@FreeBSD.org>
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
@ -25,7 +25,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd November 12, 2013
|
||||
.Dd December 9, 2013
|
||||
.Dt ETCUPDATE 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -695,6 +695,25 @@ has been removed from the
|
||||
tree,
|
||||
but it has been locally modified.
|
||||
The modified version of the file remains in the destination directory.
|
||||
.It "Needs update: /etc/localtime (required manual update via tzsetup(1))"
|
||||
The
|
||||
.Fa /var/db/zoneinfo
|
||||
file does not exist,
|
||||
so
|
||||
.Nm
|
||||
was not able to refresh
|
||||
.Fa /etc/localtime
|
||||
from its source file in
|
||||
.Fa /usr/share/zoneinfo .
|
||||
Running
|
||||
.Xr tzsetup 1
|
||||
will both refresh
|
||||
.Fa /etc/localtime
|
||||
and generate
|
||||
.Fa /var/db/zoneinfo
|
||||
permitting future updates to refresh
|
||||
.Fa /etc/localtime
|
||||
automatically.
|
||||
.It "Needs update: /etc/mail/aliases.db (required manual update via newaliases(1))"
|
||||
The file
|
||||
.Pa /etc/mail/aliases
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2010 Advanced Computing Technologies LLC
|
||||
# Copyright (c) 2010-2013 Advanced Computing Technologies LLC
|
||||
# Written by: John H. Baldwin <jhb@FreeBSD.org>
|
||||
# All rights reserved.
|
||||
#
|
||||
@ -486,6 +486,39 @@ diffnode()
|
||||
esac
|
||||
}
|
||||
|
||||
# Run one-off commands after an update has completed. These commands
|
||||
# are not tied to a specific file, so they cannot be handled by
|
||||
# post_install_file().
|
||||
post_update()
|
||||
{
|
||||
local args
|
||||
|
||||
# None of these commands should be run for a pre-world update.
|
||||
if [ -n "$preworld" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# If /etc/localtime exists and is not a symlink and /var/db/zoneinfo
|
||||
# exists, run tzsetup -r to refresh /etc/localtime.
|
||||
if [ -f ${DESTDIR}/etc/localtime -a \
|
||||
! -L ${DESTDIR}/etc/localtime ]; then
|
||||
if [ -f ${DESTDIR}/var/db/zoneinfo ]; then
|
||||
if [ -n "${DESTDIR}" ]; then
|
||||
args="-C ${DESTDIR}"
|
||||
else
|
||||
args=""
|
||||
fi
|
||||
log "tzsetup -r ${args}"
|
||||
if [ -z "$dryrun" ]; then
|
||||
tzsetup -r ${args} >&3 2>&1
|
||||
fi
|
||||
else
|
||||
warn "Needs update: /etc/localtime (required" \
|
||||
"manual update via tzsetup(1))"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Create missing parent directories of a node in a target tree
|
||||
# preserving the owner, group, and permissions from a specified
|
||||
# template tree.
|
||||
@ -583,6 +616,14 @@ post_install_file()
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
/etc/services)
|
||||
log "services_mkdb -q -o $DESTDIR/var/db/services.db" \
|
||||
"${DESTDIR}$1"
|
||||
if [ -z "$dryrun" ]; then
|
||||
services_mkdb -q -o $DESTDIR/var/db/services.db \
|
||||
${DESTDIR}$1 >&3 2>&1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
@ -1506,6 +1547,9 @@ EOF
|
||||
"(requires manual update via newaliases(1))"
|
||||
fi
|
||||
|
||||
# Run any special one-off commands after an update has completed.
|
||||
post_update
|
||||
|
||||
if [ -s $WARNINGS ]; then
|
||||
echo "Warnings:"
|
||||
cat $WARNINGS
|
||||
|
Loading…
Reference in New Issue
Block a user