From 9cf9ca4e883ae81d809e4699eba2d0370a746c74 Mon Sep 17 00:00:00 2001 From: JRGTH Date: Fri, 9 Jul 2021 03:57:48 -0400 Subject: [PATCH] Add required files from FreeBSD 13.0 base release, update config --- CHANGELOG | 1 + bastille-init | 10 + conf/bastille.conf.ext | 2 + .../system/freebsd-update/13.0/freebsd-update | 3409 +++++++++++++++++ .../freebsd-update/13.0/freebsd-update.conf | 76 + conf/system/include/13.0/diff3 | Bin 0 -> 28872 bytes conf/system/include/13.0/jib | 418 ++ conf/system/include/13.0/makewhatis | Bin 0 -> 442688 bytes conf/system/include/13.0/setfib | Bin 0 -> 7368 bytes conf/system/include/13.0/sum | Bin 0 -> 11688 bytes version | 2 +- 11 files changed, 3917 insertions(+), 1 deletion(-) create mode 100755 conf/system/freebsd-update/13.0/freebsd-update create mode 100644 conf/system/freebsd-update/13.0/freebsd-update.conf create mode 100755 conf/system/include/13.0/diff3 create mode 100644 conf/system/include/13.0/jib create mode 100755 conf/system/include/13.0/makewhatis create mode 100755 conf/system/include/13.0/setfib create mode 100755 conf/system/include/13.0/sum diff --git a/CHANGELOG b/CHANGELOG index f6b279c..f063f06 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,7 @@ ====================== Version Description +1.0.91......Add required files from FreeBSD 13.0 base release, update config. 1.0.90......Update release list, fix bug in tarballs page. 1.0.89......Fix small grep/regex error. 1.0.88......Fix for properly copy host resolv.conf to jails. diff --git a/bastille-init b/bastille-init index cc1b6ee..53e219f 100755 --- a/bastille-init +++ b/bastille-init @@ -919,6 +919,16 @@ reset_install() if [ -f "${CWDIR}/version" ]; then rm -f ${CWDIR}/version fi + + # Set default config. + sysrc -f ${CWDIR}${EXTCONF} GUI_ENABLE=YES INSTALL_DIR=${CWDIR} >/dev/null 2>&1 + + echo "" + echo "*************************************************************************************************************" + echo "* The configuration was reset, please go to [Extensions > Bastille > Configuration] to configure bastille. *" + echo "* Alternatively you can edit the '/usr/local/etc/bastille/bastille.conf' file manually. *" + echo "*************************************************************************************************************" + echo "" } remove_addon() diff --git a/conf/bastille.conf.ext b/conf/bastille.conf.ext index e6e2293..227cee7 100644 --- a/conf/bastille.conf.ext +++ b/conf/bastille.conf.ext @@ -17,6 +17,8 @@ bastille_zfs_prefix="bastille" bastille_zfs_options="-o compress=lz4 -o atime=off" bastille_compress_xz_options="-0 -v" bastille_decompress_xz_options="-c -d -v" +bastille_compress_gz_options="-1 -v" +bastille_decompress_gz_options="-k -d -c -v" bastille_network_loopback="" bastille_network_shared="" bastille_network_gateway="" diff --git a/conf/system/freebsd-update/13.0/freebsd-update b/conf/system/freebsd-update/13.0/freebsd-update new file mode 100755 index 0000000..004515b --- /dev/null +++ b/conf/system/freebsd-update/13.0/freebsd-update @@ -0,0 +1,3409 @@ +#!/bin/sh + +#- +# SPDX-License-Identifier: BSD-2-Clause-FreeBSD +# +# Copyright 2004-2007 Colin Percival +# All rights reserved +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted providing 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 ``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 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$ + +#### Usage function -- called from command-line handling code. + +# Usage instructions. Options not listed: +# --debug -- don't filter output from utilities +# --no-stats -- don't show progress statistics while fetching files +usage () { + cat < ${LINE}" + exit 1 + fi + done < ${CONFFILE} + + # Merge the settings read from the configuration file with those + # provided at the command line. + mergeconfig +} + +# Provide some default parameters +default_params () { + # Save any parameters already configured, and clear the slate + saveconfig + nullconfig + + # Default configurations + config_WorkDir /var/db/freebsd-update + config_MailTo root + config_AllowAdd yes + config_AllowDelete yes + config_KeepModifiedMetadata yes + config_BaseDir / + config_VerboseLevel stats + config_StrictComponents no + config_BackupKernel yes + config_BackupKernelDir /boot/kernel.old + config_BackupKernelSymbolFiles no + + # Merge these defaults into the earlier-configured settings + mergeconfig +} + +# Set utility output filtering options, based on ${VERBOSELEVEL} +fetch_setup_verboselevel () { + case ${VERBOSELEVEL} in + debug) + QUIETREDIR="/dev/stderr" + QUIETFLAG=" " + STATSREDIR="/dev/stderr" + DDSTATS=".." + XARGST="-t" + NDEBUG=" " + ;; + nostats) + QUIETREDIR="" + QUIETFLAG="" + STATSREDIR="/dev/null" + DDSTATS=".." + XARGST="" + NDEBUG="" + ;; + stats) + QUIETREDIR="/dev/null" + QUIETFLAG="-q" + STATSREDIR="/dev/stdout" + DDSTATS="" + XARGST="" + NDEBUG="-n" + ;; + esac +} + +# Perform sanity checks and set some final parameters +# in preparation for fetching files. Figure out which +# set of updates should be downloaded: If the user is +# running *-p[0-9]+, strip off the last part; if the +# user is running -SECURITY, call it -RELEASE. Chdir +# into the working directory. +fetchupgrade_check_params () { + export HTTP_USER_AGENT="freebsd-update (${COMMAND}, `uname -r`)" + + _SERVERNAME_z=\ +"SERVERNAME must be given via command line or configuration file." + _KEYPRINT_z="Key must be given via -k option or configuration file." + _KEYPRINT_bad="Invalid key fingerprint: " + _WORKDIR_bad="Directory does not exist or is not writable: " + _WORKDIR_bad2="Directory is not on a persistent filesystem: " + + if [ -z "${SERVERNAME}" ]; then + echo -n "`basename $0`: " + echo "${_SERVERNAME_z}" + exit 1 + fi + if [ -z "${KEYPRINT}" ]; then + echo -n "`basename $0`: " + echo "${_KEYPRINT_z}" + exit 1 + fi + if ! echo "${KEYPRINT}" | grep -qE "^[0-9a-f]{64}$"; then + echo -n "`basename $0`: " + echo -n "${_KEYPRINT_bad}" + echo ${KEYPRINT} + exit 1 + fi + if ! [ -d "${WORKDIR}" -a -w "${WORKDIR}" ]; then + echo -n "`basename $0`: " + echo -n "${_WORKDIR_bad}" + echo ${WORKDIR} + exit 1 + fi + case `df -T ${WORKDIR}` in */dev/md[0-9]* | *tmpfs*) + echo -n "`basename $0`: " + echo -n "${_WORKDIR_bad2}" + echo ${WORKDIR} + exit 1 + ;; + esac + chmod 700 ${WORKDIR} + cd ${WORKDIR} || exit 1 + + # Generate release number. The s/SECURITY/RELEASE/ bit exists + # to provide an upgrade path for FreeBSD Update 1.x users, since + # the kernels provided by FreeBSD Update 1.x are always labelled + # as X.Y-SECURITY. + RELNUM=`uname -r | + sed -E 's,-p[0-9]+,,' | + sed -E 's,-SECURITY,-RELEASE,'` + ARCH=`uname -m` + FETCHDIR=${RELNUM}/${ARCH} + PATCHDIR=${RELNUM}/${ARCH}/bp + + # Disallow upgrade from a version that is not a release + case ${RELNUM} in + *-RELEASE | *-ALPHA* | *-BETA* | *-RC*) + ;; + *) + echo -n "`basename $0`: " + cat <<- EOF + Cannot upgrade from a version that is not a release + (including alpha, beta and release candidates) + using `basename $0`. Instead, FreeBSD can be directly + upgraded by source or upgraded to a RELEASE/RELENG version + prior to running `basename $0`. + Currently running: ${RELNUM} + EOF + exit 1 + ;; + esac + + # Figure out what directory contains the running kernel + BOOTFILE=`sysctl -n kern.bootfile` + KERNELDIR=${BOOTFILE%/kernel} + if ! [ -d ${KERNELDIR} ]; then + echo "Cannot identify running kernel" + exit 1 + fi + + # Figure out what kernel configuration is running. We start with + # the output of `uname -i`, and then make the following adjustments: + # 1. Replace "SMP-GENERIC" with "SMP". Why the SMP kernel config + # file says "ident SMP-GENERIC", I don't know... + # 2. If the kernel claims to be GENERIC _and_ ${ARCH} is "amd64" + # _and_ `sysctl kern.version` contains a line which ends "/SMP", then + # we're running an SMP kernel. This mis-identification is a bug + # which was fixed in 6.2-STABLE. + KERNCONF=`uname -i` + if [ ${KERNCONF} = "SMP-GENERIC" ]; then + KERNCONF=SMP + fi + if [ ${KERNCONF} = "GENERIC" ] && [ ${ARCH} = "amd64" ]; then + if sysctl kern.version | grep -qE '/SMP$'; then + KERNCONF=SMP + fi + fi + + # Define some paths + BSPATCH=/usr/bin/bspatch + SHA256=/sbin/sha256 + PHTTPGET=/usr/libexec/phttpget + + # Set up variables relating to VERBOSELEVEL + fetch_setup_verboselevel + + # Construct a unique name from ${BASEDIR} + BDHASH=`echo ${BASEDIR} | sha256 -q` +} + +# Perform sanity checks etc. before fetching updates. +fetch_check_params () { + fetchupgrade_check_params + + if ! [ -z "${TARGETRELEASE}" ]; then + echo -n "`basename $0`: " + echo -n "-r option is meaningless with 'fetch' command. " + echo "(Did you mean 'upgrade' instead?)" + exit 1 + fi + + # Check that we have updates ready to install + if [ -f ${BDHASH}-install/kerneldone -a $FORCEFETCH -eq 0 ]; then + echo "You have a partially completed upgrade pending" + echo "Run '$0 install' first." + echo "Run '$0 fetch -F' to proceed anyway." + exit 1 + fi +} + +# Perform sanity checks etc. before fetching upgrades. +upgrade_check_params () { + fetchupgrade_check_params + + # Unless set otherwise, we're upgrading to the same kernel config. + NKERNCONF=${KERNCONF} + + # We need TARGETRELEASE set + _TARGETRELEASE_z="Release target must be specified via -r option." + if [ -z "${TARGETRELEASE}" ]; then + echo -n "`basename $0`: " + echo "${_TARGETRELEASE_z}" + exit 1 + fi + + # The target release should be != the current release. + if [ "${TARGETRELEASE}" = "${RELNUM}" ]; then + echo -n "`basename $0`: " + echo "Cannot upgrade from ${RELNUM} to itself" + exit 1 + fi + + # Turning off AllowAdd or AllowDelete is a bad idea for upgrades. + if [ "${ALLOWADD}" = "no" ]; then + echo -n "`basename $0`: " + echo -n "WARNING: \"AllowAdd no\" is a bad idea " + echo "when upgrading between releases." + echo + fi + if [ "${ALLOWDELETE}" = "no" ]; then + echo -n "`basename $0`: " + echo -n "WARNING: \"AllowDelete no\" is a bad idea " + echo "when upgrading between releases." + echo + fi + + # Set EDITOR to /usr/bin/vi if it isn't already set + : ${EDITOR:='/usr/bin/vi'} +} + +# Perform sanity checks and set some final parameters in +# preparation for installing updates. +install_check_params () { + # Check that we are root. All sorts of things won't work otherwise. + if [ `id -u` != 0 ]; then + echo "You must be root to run this." + exit 1 + fi + + # Check that securelevel <= 0. Otherwise we can't update schg files. + if [ `sysctl -n kern.securelevel` -gt 0 ]; then + echo "Updates cannot be installed when the system securelevel" + echo "is greater than zero." + exit 1 + fi + + # Check that we have a working directory + _WORKDIR_bad="Directory does not exist or is not writable: " + if ! [ -d "${WORKDIR}" -a -w "${WORKDIR}" ]; then + echo -n "`basename $0`: " + echo -n "${_WORKDIR_bad}" + echo ${WORKDIR} + exit 1 + fi + cd ${WORKDIR} || exit 1 + + # Construct a unique name from ${BASEDIR} + BDHASH=`echo ${BASEDIR} | sha256 -q` + + # Check that we have updates ready to install + if ! [ -L ${BDHASH}-install ]; then + echo "No updates are available to install." + if [ $ISFETCHED -eq 0 ]; then + echo "Run '$0 fetch' first." + exit 2 + fi + exit 0 + fi + if ! [ -f ${BDHASH}-install/INDEX-OLD ] || + ! [ -f ${BDHASH}-install/INDEX-NEW ]; then + echo "Update manifest is corrupt -- this should never happen." + echo "Re-run '$0 fetch'." + exit 1 + fi + + # Figure out what directory contains the running kernel + BOOTFILE=`sysctl -n kern.bootfile` + KERNELDIR=${BOOTFILE%/kernel} + if ! [ -d ${KERNELDIR} ]; then + echo "Cannot identify running kernel" + exit 1 + fi +} + +# Perform sanity checks and set some final parameters in +# preparation for UNinstalling updates. +rollback_check_params () { + # Check that we are root. All sorts of things won't work otherwise. + if [ `id -u` != 0 ]; then + echo "You must be root to run this." + exit 1 + fi + + # Check that we have a working directory + _WORKDIR_bad="Directory does not exist or is not writable: " + if ! [ -d "${WORKDIR}" -a -w "${WORKDIR}" ]; then + echo -n "`basename $0`: " + echo -n "${_WORKDIR_bad}" + echo ${WORKDIR} + exit 1 + fi + cd ${WORKDIR} || exit 1 + + # Construct a unique name from ${BASEDIR} + BDHASH=`echo ${BASEDIR} | sha256 -q` + + # Check that we have updates ready to rollback + if ! [ -L ${BDHASH}-rollback ]; then + echo "No rollback directory found." + exit 1 + fi + if ! [ -f ${BDHASH}-rollback/INDEX-OLD ] || + ! [ -f ${BDHASH}-rollback/INDEX-NEW ]; then + echo "Update manifest is corrupt -- this should never happen." + exit 1 + fi +} + +# Perform sanity checks and set some final parameters +# in preparation for comparing the system against the +# published index. Figure out which index we should +# compare against: If the user is running *-p[0-9]+, +# strip off the last part; if the user is running +# -SECURITY, call it -RELEASE. Chdir into the working +# directory. +IDS_check_params () { + export HTTP_USER_AGENT="freebsd-update (${COMMAND}, `uname -r`)" + + _SERVERNAME_z=\ +"SERVERNAME must be given via command line or configuration file." + _KEYPRINT_z="Key must be given via -k option or configuration file." + _KEYPRINT_bad="Invalid key fingerprint: " + _WORKDIR_bad="Directory does not exist or is not writable: " + + if [ -z "${SERVERNAME}" ]; then + echo -n "`basename $0`: " + echo "${_SERVERNAME_z}" + exit 1 + fi + if [ -z "${KEYPRINT}" ]; then + echo -n "`basename $0`: " + echo "${_KEYPRINT_z}" + exit 1 + fi + if ! echo "${KEYPRINT}" | grep -qE "^[0-9a-f]{64}$"; then + echo -n "`basename $0`: " + echo -n "${_KEYPRINT_bad}" + echo ${KEYPRINT} + exit 1 + fi + if ! [ -d "${WORKDIR}" -a -w "${WORKDIR}" ]; then + echo -n "`basename $0`: " + echo -n "${_WORKDIR_bad}" + echo ${WORKDIR} + exit 1 + fi + cd ${WORKDIR} || exit 1 + + # Generate release number. The s/SECURITY/RELEASE/ bit exists + # to provide an upgrade path for FreeBSD Update 1.x users, since + # the kernels provided by FreeBSD Update 1.x are always labelled + # as X.Y-SECURITY. + RELNUM=`uname -r | + sed -E 's,-p[0-9]+,,' | + sed -E 's,-SECURITY,-RELEASE,'` + ARCH=`uname -m` + FETCHDIR=${RELNUM}/${ARCH} + PATCHDIR=${RELNUM}/${ARCH}/bp + + # Figure out what directory contains the running kernel + BOOTFILE=`sysctl -n kern.bootfile` + KERNELDIR=${BOOTFILE%/kernel} + if ! [ -d ${KERNELDIR} ]; then + echo "Cannot identify running kernel" + exit 1 + fi + + # Figure out what kernel configuration is running. We start with + # the output of `uname -i`, and then make the following adjustments: + # 1. Replace "SMP-GENERIC" with "SMP". Why the SMP kernel config + # file says "ident SMP-GENERIC", I don't know... + # 2. If the kernel claims to be GENERIC _and_ ${ARCH} is "amd64" + # _and_ `sysctl kern.version` contains a line which ends "/SMP", then + # we're running an SMP kernel. This mis-identification is a bug + # which was fixed in 6.2-STABLE. + KERNCONF=`uname -i` + if [ ${KERNCONF} = "SMP-GENERIC" ]; then + KERNCONF=SMP + fi + if [ ${KERNCONF} = "GENERIC" ] && [ ${ARCH} = "amd64" ]; then + if sysctl kern.version | grep -qE '/SMP$'; then + KERNCONF=SMP + fi + fi + + # Define some paths + SHA256=/sbin/sha256 + PHTTPGET=/usr/libexec/phttpget + + # Set up variables relating to VERBOSELEVEL + fetch_setup_verboselevel +} + +#### Core functionality -- the actual work gets done here + +# Use an SRV query to pick a server. If the SRV query doesn't provide +# a useful answer, use the server name specified by the user. +# Put another way... look up _http._tcp.${SERVERNAME} and pick a server +# from that; or if no servers are returned, use ${SERVERNAME}. +# This allows a user to specify "portsnap.freebsd.org" (in which case +# portsnap will select one of the mirrors) or "portsnap5.tld.freebsd.org" +# (in which case portsnap will use that particular server, since there +# won't be an SRV entry for that name). +# +# We ignore the Port field, since we are always going to use port 80. + +# Fetch the mirror list, but do not pick a mirror yet. Returns 1 if +# no mirrors are available for any reason. +fetch_pick_server_init () { + : > serverlist_tried + +# Check that host(1) exists (i.e., that the system wasn't built with the +# WITHOUT_BIND set) and don't try to find a mirror if it doesn't exist. + if ! which -s host; then + : > serverlist_full + return 1 + fi + + echo -n "Looking up ${SERVERNAME} mirrors... " + +# Issue the SRV query and pull out the Priority, Weight, and Target fields. +# BIND 9 prints "$name has SRV record ..." while BIND 8 prints +# "$name server selection ..."; we allow either format. + MLIST="_http._tcp.${SERVERNAME}" + host -t srv "${MLIST}" | + sed -nE "s/${MLIST} (has SRV record|server selection) //Ip" | + cut -f 1,2,4 -d ' ' | + sed -e 's/\.$//' | + sort > serverlist_full + +# If no records, give up -- we'll just use the server name we were given. + if [ `wc -l < serverlist_full` -eq 0 ]; then + echo "none found." + return 1 + fi + +# Report how many mirrors we found. + echo `wc -l < serverlist_full` "mirrors found." + +# Generate a random seed for use in picking mirrors. If HTTP_PROXY +# is set, this will be used to generate the seed; otherwise, the seed +# will be random. + if [ -n "${HTTP_PROXY}${http_proxy}" ]; then + RANDVALUE=`sha256 -qs "${HTTP_PROXY}${http_proxy}" | + tr -d 'a-f' | + cut -c 1-9` + else + RANDVALUE=`jot -r 1 0 999999999` + fi +} + +# Pick a mirror. Returns 1 if we have run out of mirrors to try. +fetch_pick_server () { +# Generate a list of not-yet-tried mirrors + sort serverlist_tried | + comm -23 serverlist_full - > serverlist + +# Have we run out of mirrors? + if [ `wc -l < serverlist` -eq 0 ]; then + cat <<- EOF + No mirrors remaining, giving up. + + This may be because upgrading from this platform (${ARCH}) + or release (${RELNUM}) is unsupported by `basename $0`. Only + platforms with Tier 1 support can be upgraded by `basename $0`. + See https://www.freebsd.org/platforms/index.html for more info. + + If unsupported, FreeBSD must be upgraded by source. + EOF + return 1 + fi + +# Find the highest priority level (lowest numeric value). + SRV_PRIORITY=`cut -f 1 -d ' ' serverlist | sort -n | head -1` + +# Add up the weights of the response lines at that priority level. + SRV_WSUM=0; + while read X; do + case "$X" in + ${SRV_PRIORITY}\ *) + SRV_W=`echo $X | cut -f 2 -d ' '` + SRV_WSUM=$(($SRV_WSUM + $SRV_W)) + ;; + esac + done < serverlist + +# If all the weights are 0, pretend that they are all 1 instead. + if [ ${SRV_WSUM} -eq 0 ]; then + SRV_WSUM=`grep -E "^${SRV_PRIORITY} " serverlist | wc -l` + SRV_W_ADD=1 + else + SRV_W_ADD=0 + fi + +# Pick a value between 0 and the sum of the weights - 1 + SRV_RND=`expr ${RANDVALUE} % ${SRV_WSUM}` + +# Read through the list of mirrors and set SERVERNAME. Write the line +# corresponding to the mirror we selected into serverlist_tried so that +# we won't try it again. + while read X; do + case "$X" in + ${SRV_PRIORITY}\ *) + SRV_W=`echo $X | cut -f 2 -d ' '` + SRV_W=$(($SRV_W + $SRV_W_ADD)) + if [ $SRV_RND -lt $SRV_W ]; then + SERVERNAME=`echo $X | cut -f 3 -d ' '` + echo "$X" >> serverlist_tried + break + else + SRV_RND=$(($SRV_RND - $SRV_W)) + fi + ;; + esac + done < serverlist +} + +# Take a list of ${oldhash}|${newhash} and output a list of needed patches, +# i.e., those for which we have ${oldhash} and don't have ${newhash}. +fetch_make_patchlist () { + grep -vE "^([0-9a-f]{64})\|\1$" | + tr '|' ' ' | + while read X Y; do + if [ -f "files/${Y}.gz" ] || + [ ! -f "files/${X}.gz" ]; then + continue + fi + echo "${X}|${Y}" + done | sort -u +} + +# Print user-friendly progress statistics +fetch_progress () { + LNC=0 + while read x; do + LNC=$(($LNC + 1)) + if [ $(($LNC % 10)) = 0 ]; then + echo -n $LNC + elif [ $(($LNC % 2)) = 0 ]; then + echo -n . + fi + done + echo -n " " +} + +# Function for asking the user if everything is ok +continuep () { + while read -p "Does this look reasonable (y/n)? " CONTINUE; do + case "${CONTINUE}" in + y*) + return 0 + ;; + n*) + return 1 + ;; + esac + done +} + +# Initialize the working directory +workdir_init () { + mkdir -p files + touch tINDEX.present +} + +# Check that we have a public key with an appropriate hash, or +# fetch the key if it doesn't exist. Returns 1 if the key has +# not yet been fetched. +fetch_key () { + if [ -r pub.ssl ] && [ `${SHA256} -q pub.ssl` = ${KEYPRINT} ]; then + return 0 + fi + + echo -n "Fetching public key from ${SERVERNAME}... " + rm -f pub.ssl + fetch ${QUIETFLAG} http://${SERVERNAME}/${FETCHDIR}/pub.ssl \ + 2>${QUIETREDIR} || true + if ! [ -r pub.ssl ]; then + echo "failed." + return 1 + fi + if ! [ `${SHA256} -q pub.ssl` = ${KEYPRINT} ]; then + echo "key has incorrect hash." + rm -f pub.ssl + return 1 + fi + echo "done." +} + +# Fetch metadata signature, aka "tag". +fetch_tag () { + echo -n "Fetching metadata signature " + echo ${NDEBUG} "for ${RELNUM} from ${SERVERNAME}... " + rm -f latest.ssl + fetch ${QUIETFLAG} http://${SERVERNAME}/${FETCHDIR}/latest.ssl \ + 2>${QUIETREDIR} || true + if ! [ -r latest.ssl ]; then + echo "failed." + return 1 + fi + + openssl rsautl -pubin -inkey pub.ssl -verify \ + < latest.ssl > tag.new 2>${QUIETREDIR} || true + rm latest.ssl + + if ! [ `wc -l < tag.new` = 1 ] || + ! grep -qE \ + "^freebsd-update\|${ARCH}\|${RELNUM}\|[0-9]+\|[0-9a-f]{64}\|[0-9]{10}" \ + tag.new; then + echo "invalid signature." + return 1 + fi + + echo "done." + + RELPATCHNUM=`cut -f 4 -d '|' < tag.new` + TINDEXHASH=`cut -f 5 -d '|' < tag.new` + EOLTIME=`cut -f 6 -d '|' < tag.new` +} + +# Sanity-check the patch number in a tag, to make sure that we're not +# going to "update" backwards and to prevent replay attacks. +fetch_tagsanity () { + # Check that we're not going to move from -pX to -pY with Y < X. + RELPX=`uname -r | sed -E 's,.*-,,'` + if echo ${RELPX} | grep -qE '^p[0-9]+$'; then + RELPX=`echo ${RELPX} | cut -c 2-` + else + RELPX=0 + fi + if [ "${RELPATCHNUM}" -lt "${RELPX}" ]; then + echo + echo -n "Files on mirror (${RELNUM}-p${RELPATCHNUM})" + echo " appear older than what" + echo "we are currently running (`uname -r`)!" + echo "Cowardly refusing to proceed any further." + return 1 + fi + + # If "tag" exists and corresponds to ${RELNUM}, make sure that + # it contains a patch number <= RELPATCHNUM, in order to protect + # against rollback (replay) attacks. + if [ -f tag ] && + grep -qE \ + "^freebsd-update\|${ARCH}\|${RELNUM}\|[0-9]+\|[0-9a-f]{64}\|[0-9]{10}" \ + tag; then + LASTRELPATCHNUM=`cut -f 4 -d '|' < tag` + + if [ "${RELPATCHNUM}" -lt "${LASTRELPATCHNUM}" ]; then + echo + echo -n "Files on mirror (${RELNUM}-p${RELPATCHNUM})" + echo " are older than the" + echo -n "most recently seen updates" + echo " (${RELNUM}-p${LASTRELPATCHNUM})." + echo "Cowardly refusing to proceed any further." + return 1 + fi + fi +} + +# Fetch metadata index file +fetch_metadata_index () { + echo ${NDEBUG} "Fetching metadata index... " + rm -f ${TINDEXHASH} + fetch ${QUIETFLAG} http://${SERVERNAME}/${FETCHDIR}/t/${TINDEXHASH} + 2>${QUIETREDIR} + if ! [ -f ${TINDEXHASH} ]; then + echo "failed." + return 1 + fi + if [ `${SHA256} -q ${TINDEXHASH}` != ${TINDEXHASH} ]; then + echo "update metadata index corrupt." + return 1 + fi + echo "done." +} + +# Print an error message about signed metadata being bogus. +fetch_metadata_bogus () { + echo + echo "The update metadata$1 is correctly signed, but" + echo "failed an integrity check." + echo "Cowardly refusing to proceed any further." + return 1 +} + +# Construct tINDEX.new by merging the lines named in $1 from ${TINDEXHASH} +# with the lines not named in $@ from tINDEX.present (if that file exists). +fetch_metadata_index_merge () { + for METAFILE in $@; do + if [ `grep -E "^${METAFILE}\|" ${TINDEXHASH} | wc -l` \ + -ne 1 ]; then + fetch_metadata_bogus " index" + return 1 + fi + + grep -E "${METAFILE}\|" ${TINDEXHASH} + done | + sort > tINDEX.wanted + + if [ -f tINDEX.present ]; then + join -t '|' -v 2 tINDEX.wanted tINDEX.present | + sort -m - tINDEX.wanted > tINDEX.new + rm tINDEX.wanted + else + mv tINDEX.wanted tINDEX.new + fi +} + +# Sanity check all the lines of tINDEX.new. Even if more metadata lines +# are added by future versions of the server, this won't cause problems, +# since the only lines which appear in tINDEX.new are the ones which we +# specifically grepped out of ${TINDEXHASH}. +fetch_metadata_index_sanity () { + if grep -qvE '^[0-9A-Z.-]+\|[0-9a-f]{64}$' tINDEX.new; then + fetch_metadata_bogus " index" + return 1 + fi +} + +# Sanity check the metadata file $1. +fetch_metadata_sanity () { + # Some aliases to save space later: ${P} is a character which can + # appear in a path; ${M} is the four numeric metadata fields; and + # ${H} is a sha256 hash. + P="[-+./:=,%@_[~[:alnum:]]" + M="[0-9]+\|[0-9]+\|[0-9]+\|[0-9]+" + H="[0-9a-f]{64}" + + # Check that the first four fields make sense. + if gunzip -c < files/$1.gz | + grep -qvE "^[a-z]+\|[0-9a-z-]+\|${P}+\|[fdL-]\|"; then + fetch_metadata_bogus "" + return 1 + fi + + # Remove the first three fields. + gunzip -c < files/$1.gz | + cut -f 4- -d '|' > sanitycheck.tmp + + # Sanity check entries with type 'f' + if grep -E '^f' sanitycheck.tmp | + grep -qvE "^f\|${M}\|${H}\|${P}*\$"; then + fetch_metadata_bogus "" + return 1 + fi + + # Sanity check entries with type 'd' + if grep -E '^d' sanitycheck.tmp | + grep -qvE "^d\|${M}\|\|\$"; then + fetch_metadata_bogus "" + return 1 + fi + + # Sanity check entries with type 'L' + if grep -E '^L' sanitycheck.tmp | + grep -qvE "^L\|${M}\|${P}*\|\$"; then + fetch_metadata_bogus "" + return 1 + fi + + # Sanity check entries with type '-' + if grep -E '^-' sanitycheck.tmp | + grep -qvE "^-\|\|\|\|\|\|"; then + fetch_metadata_bogus "" + return 1 + fi + + # Clean up + rm sanitycheck.tmp +} + +# Fetch the metadata index and metadata files listed in $@, +# taking advantage of metadata patches where possible. +fetch_metadata () { + fetch_metadata_index || return 1 + fetch_metadata_index_merge $@ || return 1 + fetch_metadata_index_sanity || return 1 + + # Generate a list of wanted metadata patches + join -t '|' -o 1.2,2.2 tINDEX.present tINDEX.new | + fetch_make_patchlist > patchlist + + if [ -s patchlist ]; then + # Attempt to fetch metadata patches + echo -n "Fetching `wc -l < patchlist | tr -d ' '` " + echo ${NDEBUG} "metadata patches.${DDSTATS}" + tr '|' '-' < patchlist | + lam -s "${FETCHDIR}/tp/" - -s ".gz" | + xargs ${XARGST} ${PHTTPGET} ${SERVERNAME} \ + 2>${STATSREDIR} | fetch_progress + echo "done." + + # Attempt to apply metadata patches + echo -n "Applying metadata patches... " + tr '|' ' ' < patchlist | + while read X Y; do + if [ ! -f "${X}-${Y}.gz" ]; then continue; fi + gunzip -c < ${X}-${Y}.gz > diff + gunzip -c < files/${X}.gz > diff-OLD + + # Figure out which lines are being added and removed + grep -E '^-' diff | + cut -c 2- | + while read PREFIX; do + look "${PREFIX}" diff-OLD + done | + sort > diff-rm + grep -E '^\+' diff | + cut -c 2- > diff-add + + # Generate the new file + comm -23 diff-OLD diff-rm | + sort - diff-add > diff-NEW + + if [ `${SHA256} -q diff-NEW` = ${Y} ]; then + mv diff-NEW files/${Y} + gzip -n files/${Y} + else + mv diff-NEW ${Y}.bad + fi + rm -f ${X}-${Y}.gz diff + rm -f diff-OLD diff-NEW diff-add diff-rm + done 2>${QUIETREDIR} + echo "done." + fi + + # Update metadata without patches + cut -f 2 -d '|' < tINDEX.new | + while read Y; do + if [ ! -f "files/${Y}.gz" ]; then + echo ${Y}; + fi + done | + sort -u > filelist + + if [ -s filelist ]; then + echo -n "Fetching `wc -l < filelist | tr -d ' '` " + echo ${NDEBUG} "metadata files... " + lam -s "${FETCHDIR}/m/" - -s ".gz" < filelist | + xargs ${XARGST} ${PHTTPGET} ${SERVERNAME} \ + 2>${QUIETREDIR} + + while read Y; do + if ! [ -f ${Y}.gz ]; then + echo "failed." + return 1 + fi + if [ `gunzip -c < ${Y}.gz | + ${SHA256} -q` = ${Y} ]; then + mv ${Y}.gz files/${Y}.gz + else + echo "metadata is corrupt." + return 1 + fi + done < filelist + echo "done." + fi + +# Sanity-check the metadata files. + cut -f 2 -d '|' tINDEX.new > filelist + while read X; do + fetch_metadata_sanity ${X} || return 1 + done < filelist + +# Remove files which are no longer needed + cut -f 2 -d '|' tINDEX.present | + sort > oldfiles + cut -f 2 -d '|' tINDEX.new | + sort | + comm -13 - oldfiles | + lam -s "files/" - -s ".gz" | + xargs rm -f + rm patchlist filelist oldfiles + rm ${TINDEXHASH} + +# We're done! + mv tINDEX.new tINDEX.present + mv tag.new tag + + return 0 +} + +# Extract a subset of a downloaded metadata file containing only the parts +# which are listed in COMPONENTS. +fetch_filter_metadata_components () { + METAHASH=`look "$1|" tINDEX.present | cut -f 2 -d '|'` + gunzip -c < files/${METAHASH}.gz > $1.all + + # Fish out the lines belonging to components we care about. + for C in ${COMPONENTS}; do + look "`echo ${C} | tr '/' '|'`|" $1.all + done > $1 + + # Remove temporary file. + rm $1.all +} + +# Generate a filtered version of the metadata file $1 from the downloaded +# file, by fishing out the lines corresponding to components we're trying +# to keep updated, and then removing lines corresponding to paths we want +# to ignore. +fetch_filter_metadata () { + # Fish out the lines belonging to components we care about. + fetch_filter_metadata_components $1 + + # Canonicalize directory names by removing any trailing / in + # order to avoid listing directories multiple times if they + # belong to multiple components. Turning "/" into "" doesn't + # matter, since we add a leading "/" when we use paths later. + cut -f 3- -d '|' $1 | + sed -e 's,/|d|,|d|,' | + sed -e 's,/|-|,|-|,' | + sort -u > $1.tmp + + # Figure out which lines to ignore and remove them. + for X in ${IGNOREPATHS}; do + grep -E "^${X}" $1.tmp + done | + sort -u | + comm -13 - $1.tmp > $1 + + # Remove temporary files. + rm $1.tmp +} + +# Filter the metadata file $1 by adding lines with "/boot/$2" +# replaced by ${KERNELDIR} (which is `sysctl -n kern.bootfile` minus the +# trailing "/kernel"); and if "/boot/$2" does not exist, remove +# the original lines which start with that. +# Put another way: Deal with the fact that the FOO kernel is sometimes +# installed in /boot/FOO/ and is sometimes installed elsewhere. +fetch_filter_kernel_names () { + grep ^/boot/$2 $1 | + sed -e "s,/boot/$2,${KERNELDIR},g" | + sort - $1 > $1.tmp + mv $1.tmp $1 + + if ! [ -d /boot/$2 ]; then + grep -v ^/boot/$2 $1 > $1.tmp + mv $1.tmp $1 + fi +} + +# For all paths appearing in $1 or $3, inspect the system +# and generate $2 describing what is currently installed. +fetch_inspect_system () { + # No errors yet... + rm -f .err + + # Tell the user why his disk is suddenly making lots of noise + echo -n "Inspecting system... " + + # Generate list of files to inspect + cat $1 $3 | + cut -f 1 -d '|' | + sort -u > filelist + + # Examine each file and output lines of the form + # /path/to/file|type|device-inum|user|group|perm|flags|value + # sorted by device and inode number. + while read F; do + # If the symlink/file/directory does not exist, record this. + if ! [ -e ${BASEDIR}/${F} ]; then + echo "${F}|-||||||" + continue + fi + if ! [ -r ${BASEDIR}/${F} ]; then + echo "Cannot read file: ${BASEDIR}/${F}" \ + >/dev/stderr + touch .err + return 1 + fi + + # Otherwise, output an index line. + if [ -L ${BASEDIR}/${F} ]; then + echo -n "${F}|L|" + stat -n -f '%d-%i|%u|%g|%Mp%Lp|%Of|' ${BASEDIR}/${F}; + readlink ${BASEDIR}/${F}; + elif [ -f ${BASEDIR}/${F} ]; then + echo -n "${F}|f|" + stat -n -f '%d-%i|%u|%g|%Mp%Lp|%Of|' ${BASEDIR}/${F}; + sha256 -q ${BASEDIR}/${F}; + elif [ -d ${BASEDIR}/${F} ]; then + echo -n "${F}|d|" + stat -f '%d-%i|%u|%g|%Mp%Lp|%Of|' ${BASEDIR}/${F}; + else + echo "Unknown file type: ${BASEDIR}/${F}" \ + >/dev/stderr + touch .err + return 1 + fi + done < filelist | + sort -k 3,3 -t '|' > $2.tmp + rm filelist + + # Check if an error occurred during system inspection + if [ -f .err ]; then + return 1 + fi + + # Convert to the form + # /path/to/file|type|user|group|perm|flags|value|hlink + # by resolving identical device and inode numbers into hard links. + cut -f 1,3 -d '|' $2.tmp | + sort -k 1,1 -t '|' | + sort -s -u -k 2,2 -t '|' | + join -1 2 -2 3 -t '|' - $2.tmp | + awk -F \| -v OFS=\| \ + '{ + if (($2 == $3) || ($4 == "-")) + print $3,$4,$5,$6,$7,$8,$9,"" + else + print $3,$4,$5,$6,$7,$8,$9,$2 + }' | + sort > $2 + rm $2.tmp + + # We're finished looking around + echo "done." +} + +# For any paths matching ${MERGECHANGES}, compare $1 and $2 and find any +# files which differ; generate $3 containing these paths and the old hashes. +fetch_filter_mergechanges () { + # Pull out the paths and hashes of the files matching ${MERGECHANGES}. + for F in $1 $2; do + for X in ${MERGECHANGES}; do + grep -E "^${X}" ${F} + done | + cut -f 1,2,7 -d '|' | + sort > ${F}-values + done + + # Any line in $2-values which doesn't appear in $1-values and is a + # file means that we should list the path in $3. + comm -13 $1-values $2-values | + fgrep '|f|' | + cut -f 1 -d '|' > $2-paths + + # For each path, pull out one (and only one!) entry from $1-values. + # Note that we cannot distinguish which "old" version the user made + # changes to; but hopefully any changes which occur due to security + # updates will exist in both the "new" version and the version which + # the user has installed, so the merging will still work. + while read X; do + look "${X}|" $1-values | + head -1 + done < $2-paths > $3 + + # Clean up + rm $1-values $2-values $2-paths +} + +# For any paths matching ${UPDATEIFUNMODIFIED}, remove lines from $[123] +# which correspond to lines in $2 with hashes not matching $1 or $3, unless +# the paths are listed in $4. For entries in $2 marked "not present" +# (aka. type -), remove lines from $[123] unless there is a corresponding +# entry in $1. +fetch_filter_unmodified_notpresent () { + # Figure out which lines of $1 and $3 correspond to bits which + # should only be updated if they haven't changed, and fish out + # the (path, type, value) tuples. + # NOTE: We don't consider a file to be "modified" if it matches + # the hash from $3. + for X in ${UPDATEIFUNMODIFIED}; do + grep -E "^${X}" $1 + grep -E "^${X}" $3 + done | + cut -f 1,2,7 -d '|' | + sort > $1-values + + # Do the same for $2. + for X in ${UPDATEIFUNMODIFIED}; do + grep -E "^${X}" $2 + done | + cut -f 1,2,7 -d '|' | + sort > $2-values + + # Any entry in $2-values which is not in $1-values corresponds to + # a path which we need to remove from $1, $2, and $3, unless it + # that path appears in $4. + comm -13 $1-values $2-values | + sort -t '|' -k 1,1 > mlines.tmp + cut -f 1 -d '|' $4 | + sort | + join -v 2 -t '|' - mlines.tmp | + sort > mlines + rm $1-values $2-values mlines.tmp + + # Any lines in $2 which are not in $1 AND are "not present" lines + # also belong in mlines. + comm -13 $1 $2 | + cut -f 1,2,7 -d '|' | + fgrep '|-|' >> mlines + + # Remove lines from $1, $2, and $3 + for X in $1 $2 $3; do + sort -t '|' -k 1,1 ${X} > ${X}.tmp + cut -f 1 -d '|' < mlines | + sort | + join -v 2 -t '|' - ${X}.tmp | + sort > ${X} + rm ${X}.tmp + done + + # Store a list of the modified files, for future reference + fgrep -v '|-|' mlines | + cut -f 1 -d '|' > modifiedfiles + rm mlines +} + +# For each entry in $1 of type -, remove any corresponding +# entry from $2 if ${ALLOWADD} != "yes". Remove all entries +# of type - from $1. +fetch_filter_allowadd () { + cut -f 1,2 -d '|' < $1 | + fgrep '|-' | + cut -f 1 -d '|' > filesnotpresent + + if [ ${ALLOWADD} != "yes" ]; then + sort < $2 | + join -v 1 -t '|' - filesnotpresent | + sort > $2.tmp + mv $2.tmp $2 + fi + + sort < $1 | + join -v 1 -t '|' - filesnotpresent | + sort > $1.tmp + mv $1.tmp $1 + rm filesnotpresent +} + +# If ${ALLOWDELETE} != "yes", then remove any entries from $1 +# which don't correspond to entries in $2. +fetch_filter_allowdelete () { + # Produce a lists ${PATH}|${TYPE} + for X in $1 $2; do + cut -f 1-2 -d '|' < ${X} | + sort -u > ${X}.nodes + done + + # Figure out which lines need to be removed from $1. + if [ ${ALLOWDELETE} != "yes" ]; then + comm -23 $1.nodes $2.nodes > $1.badnodes + else + : > $1.badnodes + fi + + # Remove the relevant lines from $1 + while read X; do + look "${X}|" $1 + done < $1.badnodes | + comm -13 - $1 > $1.tmp + mv $1.tmp $1 + + rm $1.badnodes $1.nodes $2.nodes +} + +# If ${KEEPMODIFIEDMETADATA} == "yes", then for each entry in $2 +# with metadata not matching any entry in $1, replace the corresponding +# line of $3 with one having the same metadata as the entry in $2. +fetch_filter_modified_metadata () { + # Fish out the metadata from $1 and $2 + for X in $1 $2; do + cut -f 1-6 -d '|' < ${X} > ${X}.metadata + done + + # Find the metadata we need to keep + if [ ${KEEPMODIFIEDMETADATA} = "yes" ]; then + comm -13 $1.metadata $2.metadata > keepmeta + else + : > keepmeta + fi + + # Extract the lines which we need to remove from $3, and + # construct the lines which we need to add to $3. + : > $3.remove + : > $3.add + while read LINE; do + NODE=`echo "${LINE}" | cut -f 1-2 -d '|'` + look "${NODE}|" $3 >> $3.remove + look "${NODE}|" $3 | + cut -f 7- -d '|' | + lam -s "${LINE}|" - >> $3.add + done < keepmeta + + # Remove the specified lines and add the new lines. + sort $3.remove | + comm -13 - $3 | + sort -u - $3.add > $3.tmp + mv $3.tmp $3 + + rm keepmeta $1.metadata $2.metadata $3.add $3.remove +} + +# Remove lines from $1 and $2 which are identical; +# no need to update a file if it isn't changing. +fetch_filter_uptodate () { + comm -23 $1 $2 > $1.tmp + comm -13 $1 $2 > $2.tmp + + mv $1.tmp $1 + mv $2.tmp $2 +} + +# Fetch any "clean" old versions of files we need for merging changes. +fetch_files_premerge () { + # We only need to do anything if $1 is non-empty. + if [ -s $1 ]; then + # Tell the user what we're doing + echo -n "Fetching files from ${OLDRELNUM} for merging... " + + # List of files wanted + fgrep '|f|' < $1 | + cut -f 3 -d '|' | + sort -u > files.wanted + + # Only fetch the files we don't already have + while read Y; do + if [ ! -f "files/${Y}.gz" ]; then + echo ${Y}; + fi + done < files.wanted > filelist + + # Actually fetch them + lam -s "${OLDFETCHDIR}/f/" - -s ".gz" < filelist | + xargs ${XARGST} ${PHTTPGET} ${SERVERNAME} \ + 2>${QUIETREDIR} + + # Make sure we got them all, and move them into /files/ + while read Y; do + if ! [ -f ${Y}.gz ]; then + echo "failed." + return 1 + fi + if [ `gunzip -c < ${Y}.gz | + ${SHA256} -q` = ${Y} ]; then + mv ${Y}.gz files/${Y}.gz + else + echo "${Y} has incorrect hash." + return 1 + fi + done < filelist + echo "done." + + # Clean up + rm filelist files.wanted + fi +} + +# Prepare to fetch files: Generate a list of the files we need, +# copy the unmodified files we have into /files/, and generate +# a list of patches to download. +fetch_files_prepare () { + # Tell the user why his disk is suddenly making lots of noise + echo -n "Preparing to download files... " + + # Reduce indices to ${PATH}|${HASH} pairs + for X in $1 $2 $3; do + cut -f 1,2,7 -d '|' < ${X} | + fgrep '|f|' | + cut -f 1,3 -d '|' | + sort > ${X}.hashes + done + + # List of files wanted + cut -f 2 -d '|' < $3.hashes | + sort -u | + while read HASH; do + if ! [ -f files/${HASH}.gz ]; then + echo ${HASH} + fi + done > files.wanted + + # Generate a list of unmodified files + comm -12 $1.hashes $2.hashes | + sort -k 1,1 -t '|' > unmodified.files + + # Copy all files into /files/. We only need the unmodified files + # for use in patching; but we'll want all of them if the user asks + # to rollback the updates later. + while read LINE; do + F=`echo "${LINE}" | cut -f 1 -d '|'` + HASH=`echo "${LINE}" | cut -f 2 -d '|'` + + # Skip files we already have. + if [ -f files/${HASH}.gz ]; then + continue + fi + + # Make sure the file hasn't changed. + cp "${BASEDIR}/${F}" tmpfile + if [ `sha256 -q tmpfile` != ${HASH} ]; then + echo + echo "File changed while FreeBSD Update running: ${F}" + return 1 + fi + + # Place the file into storage. + gzip -c < tmpfile > files/${HASH}.gz + rm tmpfile + done < $2.hashes + + # Produce a list of patches to download + sort -k 1,1 -t '|' $3.hashes | + join -t '|' -o 2.2,1.2 - unmodified.files | + fetch_make_patchlist > patchlist + + # Garbage collect + rm unmodified.files $1.hashes $2.hashes $3.hashes + + # We don't need the list of possible old files any more. + rm $1 + + # We're finished making noise + echo "done." +} + +# Fetch files. +fetch_files () { + # Attempt to fetch patches + if [ -s patchlist ]; then + echo -n "Fetching `wc -l < patchlist | tr -d ' '` " + echo ${NDEBUG} "patches.${DDSTATS}" + tr '|' '-' < patchlist | + lam -s "${PATCHDIR}/" - | + xargs ${XARGST} ${PHTTPGET} ${SERVERNAME} \ + 2>${STATSREDIR} | fetch_progress + echo "done." + + # Attempt to apply patches + echo -n "Applying patches... " + tr '|' ' ' < patchlist | + while read X Y; do + if [ ! -f "${X}-${Y}" ]; then continue; fi + gunzip -c < files/${X}.gz > OLD + + bspatch OLD NEW ${X}-${Y} + + if [ `${SHA256} -q NEW` = ${Y} ]; then + mv NEW files/${Y} + gzip -n files/${Y} + fi + rm -f diff OLD NEW ${X}-${Y} + done 2>${QUIETREDIR} + echo "done." + fi + + # Download files which couldn't be generate via patching + while read Y; do + if [ ! -f "files/${Y}.gz" ]; then + echo ${Y}; + fi + done < files.wanted > filelist + + if [ -s filelist ]; then + echo -n "Fetching `wc -l < filelist | tr -d ' '` " + echo ${NDEBUG} "files... " + lam -s "${FETCHDIR}/f/" - -s ".gz" < filelist | + xargs ${XARGST} ${PHTTPGET} ${SERVERNAME} \ + 2>${STATSREDIR} | fetch_progress + + while read Y; do + if ! [ -f ${Y}.gz ]; then + echo "failed." + return 1 + fi + if [ `gunzip -c < ${Y}.gz | + ${SHA256} -q` = ${Y} ]; then + mv ${Y}.gz files/${Y}.gz + else + echo "${Y} has incorrect hash." + return 1 + fi + done < filelist + echo "done." + fi + + # Clean up + rm files.wanted filelist patchlist +} + +# Create and populate install manifest directory; and report what updates +# are available. +fetch_create_manifest () { + # If we have an existing install manifest, nuke it. + if [ -L "${BDHASH}-install" ]; then + rm -r ${BDHASH}-install/ + rm ${BDHASH}-install + fi + + # Report to the user if any updates were avoided due to local changes + if [ -s modifiedfiles ]; then + cat - modifiedfiles <<- EOF | ${PAGER} + The following files are affected by updates. No changes have + been downloaded, however, because the files have been modified + locally: + EOF + fi + rm modifiedfiles + + # If no files will be updated, tell the user and exit + if ! [ -s INDEX-PRESENT ] && + ! [ -s INDEX-NEW ]; then + rm INDEX-PRESENT INDEX-NEW + echo + echo -n "No updates needed to update system to " + echo "${RELNUM}-p${RELPATCHNUM}." + return + fi + + # Divide files into (a) removed files, (b) added files, and + # (c) updated files. + cut -f 1 -d '|' < INDEX-PRESENT | + sort > INDEX-PRESENT.flist + cut -f 1 -d '|' < INDEX-NEW | + sort > INDEX-NEW.flist + comm -23 INDEX-PRESENT.flist INDEX-NEW.flist > files.removed + comm -13 INDEX-PRESENT.flist INDEX-NEW.flist > files.added + comm -12 INDEX-PRESENT.flist INDEX-NEW.flist > files.updated + rm INDEX-PRESENT.flist INDEX-NEW.flist + + # Report removed files, if any + if [ -s files.removed ]; then + cat - files.removed <<- EOF | ${PAGER} + The following files will be removed as part of updating to + ${RELNUM}-p${RELPATCHNUM}: + EOF + fi + rm files.removed + + # Report added files, if any + if [ -s files.added ]; then + cat - files.added <<- EOF | ${PAGER} + The following files will be added as part of updating to + ${RELNUM}-p${RELPATCHNUM}: + EOF + fi + rm files.added + + # Report updated files, if any + if [ -s files.updated ]; then + cat - files.updated <<- EOF | ${PAGER} + The following files will be updated as part of updating to + ${RELNUM}-p${RELPATCHNUM}: + EOF + fi + rm files.updated + + # Create a directory for the install manifest. + MDIR=`mktemp -d install.XXXXXX` || return 1 + + # Populate it + mv INDEX-PRESENT ${MDIR}/INDEX-OLD + mv INDEX-NEW ${MDIR}/INDEX-NEW + + # Link it into place + ln -s ${MDIR} ${BDHASH}-install +} + +# Warn about any upcoming EoL +fetch_warn_eol () { + # What's the current time? + NOWTIME=`date "+%s"` + + # When did we last warn about the EoL date? + if [ -f lasteolwarn ]; then + LASTWARN=`cat lasteolwarn` + else + LASTWARN=`expr ${NOWTIME} - 63072000` + fi + + # If the EoL time is past, warn. + if [ ${EOLTIME} -lt ${NOWTIME} ]; then + echo + cat <<-EOF + WARNING: `uname -sr` HAS PASSED ITS END-OF-LIFE DATE. + Any security issues discovered after `date -r ${EOLTIME}` + will not have been corrected. + EOF + return 1 + fi + + # Figure out how long it has been since we last warned about the + # upcoming EoL, and how much longer we have left. + SINCEWARN=`expr ${NOWTIME} - ${LASTWARN}` + TIMELEFT=`expr ${EOLTIME} - ${NOWTIME}` + + # Don't warn if the EoL is more than 3 months away + if [ ${TIMELEFT} -gt 7884000 ]; then + return 0 + fi + + # Don't warn if the time remaining is more than 3 times the time + # since the last warning. + if [ ${TIMELEFT} -gt `expr ${SINCEWARN} \* 3` ]; then + return 0 + fi + + # Figure out what time units to use. + if [ ${TIMELEFT} -lt 604800 ]; then + UNIT="day" + SIZE=86400 + elif [ ${TIMELEFT} -lt 2678400 ]; then + UNIT="week" + SIZE=604800 + else + UNIT="month" + SIZE=2678400 + fi + + # Compute the right number of units + NUM=`expr ${TIMELEFT} / ${SIZE}` + if [ ${NUM} != 1 ]; then + UNIT="${UNIT}s" + fi + + # Print the warning + echo + cat <<-EOF + WARNING: `uname -sr` is approaching its End-of-Life date. + It is strongly recommended that you upgrade to a newer + release within the next ${NUM} ${UNIT}. + EOF + + # Update the stored time of last warning + echo ${NOWTIME} > lasteolwarn +} + +# Do the actual work involved in "fetch" / "cron". +fetch_run () { + workdir_init || return 1 + + # Prepare the mirror list. + fetch_pick_server_init && fetch_pick_server + + # Try to fetch the public key until we run out of servers. + while ! fetch_key; do + fetch_pick_server || return 1 + done + + # Try to fetch the metadata index signature ("tag") until we run + # out of available servers; and sanity check the downloaded tag. + while ! fetch_tag; do + fetch_pick_server || return 1 + done + fetch_tagsanity || return 1 + + # Fetch the latest INDEX-NEW and INDEX-OLD files. + fetch_metadata INDEX-NEW INDEX-OLD || return 1 + + # Generate filtered INDEX-NEW and INDEX-OLD files containing only + # the lines which (a) belong to components we care about, and (b) + # don't correspond to paths we're explicitly ignoring. + fetch_filter_metadata INDEX-NEW || return 1 + fetch_filter_metadata INDEX-OLD || return 1 + + # Translate /boot/${KERNCONF} into ${KERNELDIR} + fetch_filter_kernel_names INDEX-NEW ${KERNCONF} + fetch_filter_kernel_names INDEX-OLD ${KERNCONF} + + # For all paths appearing in INDEX-OLD or INDEX-NEW, inspect the + # system and generate an INDEX-PRESENT file. + fetch_inspect_system INDEX-OLD INDEX-PRESENT INDEX-NEW || return 1 + + # Based on ${UPDATEIFUNMODIFIED}, remove lines from INDEX-* which + # correspond to lines in INDEX-PRESENT with hashes not appearing + # in INDEX-OLD or INDEX-NEW. Also remove lines where the entry in + # INDEX-PRESENT has type - and there isn't a corresponding entry in + # INDEX-OLD with type -. + fetch_filter_unmodified_notpresent \ + INDEX-OLD INDEX-PRESENT INDEX-NEW /dev/null + + # For each entry in INDEX-PRESENT of type -, remove any corresponding + # entry from INDEX-NEW if ${ALLOWADD} != "yes". Remove all entries + # of type - from INDEX-PRESENT. + fetch_filter_allowadd INDEX-PRESENT INDEX-NEW + + # If ${ALLOWDELETE} != "yes", then remove any entries from + # INDEX-PRESENT which don't correspond to entries in INDEX-NEW. + fetch_filter_allowdelete INDEX-PRESENT INDEX-NEW + + # If ${KEEPMODIFIEDMETADATA} == "yes", then for each entry in + # INDEX-PRESENT with metadata not matching any entry in INDEX-OLD, + # replace the corresponding line of INDEX-NEW with one having the + # same metadata as the entry in INDEX-PRESENT. + fetch_filter_modified_metadata INDEX-OLD INDEX-PRESENT INDEX-NEW + + # Remove lines from INDEX-PRESENT and INDEX-NEW which are identical; + # no need to update a file if it isn't changing. + fetch_filter_uptodate INDEX-PRESENT INDEX-NEW + + # Prepare to fetch files: Generate a list of the files we need, + # copy the unmodified files we have into /files/, and generate + # a list of patches to download. + fetch_files_prepare INDEX-OLD INDEX-PRESENT INDEX-NEW || return 1 + + # Fetch files. + fetch_files || return 1 + + # Create and populate install manifest directory; and report what + # updates are available. + fetch_create_manifest || return 1 + + # Warn about any upcoming EoL + fetch_warn_eol || return 1 +} + +# If StrictComponents is not "yes", generate a new components list +# with only the components which appear to be installed. +upgrade_guess_components () { + if [ "${STRICTCOMPONENTS}" = "no" ]; then + # Generate filtered INDEX-ALL with only the components listed + # in COMPONENTS. + fetch_filter_metadata_components $1 || return 1 + + # Tell the user why his disk is suddenly making lots of noise + echo -n "Inspecting system... " + + # Look at the files on disk, and assume that a component is + # supposed to be present if it is more than half-present. + cut -f 1-3 -d '|' < INDEX-ALL | + tr '|' ' ' | + while read C S F; do + if [ -e ${BASEDIR}/${F} ]; then + echo "+ ${C}|${S}" + fi + echo "= ${C}|${S}" + done | + sort | + uniq -c | + sed -E 's,^ +,,' > compfreq + grep ' = ' compfreq | + cut -f 1,3 -d ' ' | + sort -k 2,2 -t ' ' > compfreq.total + grep ' + ' compfreq | + cut -f 1,3 -d ' ' | + sort -k 2,2 -t ' ' > compfreq.present + join -t ' ' -1 2 -2 2 compfreq.present compfreq.total | + while read S P T; do + if [ ${T} -ne 0 -a ${P} -gt `expr ${T} / 2` ]; then + echo ${S} + fi + done > comp.present + cut -f 2 -d ' ' < compfreq.total > comp.total + rm INDEX-ALL compfreq compfreq.total compfreq.present + + # We're done making noise. + echo "done." + + # Sometimes the kernel isn't installed where INDEX-ALL + # thinks that it should be: In particular, it is often in + # /boot/kernel instead of /boot/GENERIC or /boot/SMP. To + # deal with this, if "kernel|X" is listed in comp.total + # (i.e., is a component which would be upgraded if it is + # found to be present) we will add it to comp.present. + # If "kernel|" is in comp.total but "kernel|X" is + # not, we print a warning -- the user is running a kernel + # which isn't part of the release. + KCOMP=`echo ${KERNCONF} | tr 'A-Z' 'a-z'` + grep -E "^kernel\|${KCOMP}\$" comp.total >> comp.present + + if grep -qE "^kernel\|" comp.total && + ! grep -qE "^kernel\|${KCOMP}\$" comp.total; then + cat <<-EOF + +WARNING: This system is running a "${KCOMP}" kernel, which is not a +kernel configuration distributed as part of FreeBSD ${RELNUM}. +This kernel will not be updated: you MUST update the kernel manually +before running "$0 install". + EOF + fi + + # Re-sort the list of installed components and generate + # the list of non-installed components. + sort -u < comp.present > comp.present.tmp + mv comp.present.tmp comp.present + comm -13 comp.present comp.total > comp.absent + + # Ask the user to confirm that what we have is correct. To + # reduce user confusion, translate "X|Y" back to "X/Y" (as + # subcomponents must be listed in the configuration file). + echo + echo -n "The following components of FreeBSD " + echo "seem to be installed:" + tr '|' '/' < comp.present | + fmt -72 + echo + echo -n "The following components of FreeBSD " + echo "do not seem to be installed:" + tr '|' '/' < comp.absent | + fmt -72 + echo + continuep || return 1 + echo + + # Suck the generated list of components into ${COMPONENTS}. + # Note that comp.present.tmp is used due to issues with + # pipelines and setting variables. + COMPONENTS="" + tr '|' '/' < comp.present > comp.present.tmp + while read C; do + COMPONENTS="${COMPONENTS} ${C}" + done < comp.present.tmp + + # Delete temporary files + rm comp.present comp.present.tmp comp.absent comp.total + fi +} + +# If StrictComponents is not "yes", COMPONENTS contains an entry +# corresponding to the currently running kernel, and said kernel +# does not exist in the new release, add "kernel/generic" to the +# list of components. +upgrade_guess_new_kernel () { + if [ "${STRICTCOMPONENTS}" = "no" ]; then + # Grab the unfiltered metadata file. + METAHASH=`look "$1|" tINDEX.present | cut -f 2 -d '|'` + gunzip -c < files/${METAHASH}.gz > $1.all + + # If "kernel/${KCOMP}" is in ${COMPONENTS} and that component + # isn't in $1.all, we need to add kernel/generic. + for C in ${COMPONENTS}; do + if [ ${C} = "kernel/${KCOMP}" ] && + ! grep -qE "^kernel\|${KCOMP}\|" $1.all; then + COMPONENTS="${COMPONENTS} kernel/generic" + NKERNCONF="GENERIC" + cat <<-EOF + +WARNING: This system is running a "${KCOMP}" kernel, which is not a +kernel configuration distributed as part of FreeBSD ${RELNUM}. +As part of upgrading to FreeBSD ${RELNUM}, this kernel will be +replaced with a "generic" kernel. + EOF + continuep || return 1 + fi + done + + # Don't need this any more... + rm $1.all + fi +} + +# Convert INDEX-OLD (last release) and INDEX-ALL (new release) into +# INDEX-OLD and INDEX-NEW files (in the sense of normal upgrades). +upgrade_oldall_to_oldnew () { + # For each ${F}|... which appears in INDEX-ALL but does not appear + # in INDEX-OLD, add ${F}|-|||||| to INDEX-OLD. + cut -f 1 -d '|' < $1 | + sort -u > $1.paths + cut -f 1 -d '|' < $2 | + sort -u | + comm -13 $1.paths - | + lam - -s "|-||||||" | + sort - $1 > $1.tmp + mv $1.tmp $1 + + # Remove lines from INDEX-OLD which also appear in INDEX-ALL + comm -23 $1 $2 > $1.tmp + mv $1.tmp $1 + + # Remove lines from INDEX-ALL which have a file name not appearing + # anywhere in INDEX-OLD (since these must be files which haven't + # changed -- if they were new, there would be an entry of type "-"). + cut -f 1 -d '|' < $1 | + sort -u > $1.paths + sort -k 1,1 -t '|' < $2 | + join -t '|' - $1.paths | + sort > $2.tmp + rm $1.paths + mv $2.tmp $2 + + # Rename INDEX-ALL to INDEX-NEW. + mv $2 $3 +} + +# Helper for upgrade_merge: Return zero true iff the two files differ only +# in the contents of their RCS tags. +samef () { + X=`sed -E 's/\\$FreeBSD.*\\$/\$FreeBSD\$/' < $1 | ${SHA256}` + Y=`sed -E 's/\\$FreeBSD.*\\$/\$FreeBSD\$/' < $2 | ${SHA256}` + + if [ $X = $Y ]; then + return 0; + else + return 1; + fi +} + +# From the list of "old" files in $1, merge changes in $2 with those in $3, +# and update $3 to reflect the hashes of merged files. +upgrade_merge () { + # We only need to do anything if $1 is non-empty. + if [ -s $1 ]; then + cut -f 1 -d '|' $1 | + sort > $1-paths + + # Create staging area for merging files + rm -rf merge/ + while read F; do + D=`dirname ${F}` + mkdir -p merge/old/${D} + mkdir -p merge/${OLDRELNUM}/${D} + mkdir -p merge/${RELNUM}/${D} + mkdir -p merge/new/${D} + done < $1-paths + + # Copy in files + while read F; do + # Currently installed file + V=`look "${F}|" $2 | cut -f 7 -d '|'` + gunzip < files/${V}.gz > merge/old/${F} + + # Old release + if look "${F}|" $1 | fgrep -q "|f|"; then + V=`look "${F}|" $1 | cut -f 3 -d '|'` + gunzip < files/${V}.gz \ + > merge/${OLDRELNUM}/${F} + fi + + # New release + if look "${F}|" $3 | cut -f 1,2,7 -d '|' | + fgrep -q "|f|"; then + V=`look "${F}|" $3 | cut -f 7 -d '|'` + gunzip < files/${V}.gz \ + > merge/${RELNUM}/${F} + fi + done < $1-paths + + # Attempt to automatically merge changes + echo -n "Attempting to automatically merge " + echo -n "changes in files..." + : > failed.merges + while read F; do + # If the file doesn't exist in the new release, + # the result of "merging changes" is having the file + # not exist. + if ! [ -f merge/${RELNUM}/${F} ]; then + continue + fi + + # If the file didn't exist in the old release, we're + # going to throw away the existing file and hope that + # the version from the new release is what we want. + if ! [ -f merge/${OLDRELNUM}/${F} ]; then + cp merge/${RELNUM}/${F} merge/new/${F} + continue + fi + + # Some files need special treatment. + case ${F} in + /etc/spwd.db | /etc/pwd.db | /etc/login.conf.db) + # Don't merge these -- we're rebuild them + # after updates are installed. + cp merge/old/${F} merge/new/${F} + ;; + *) + if ! diff3 -E -m -L "current version" \ + -L "${OLDRELNUM}" -L "${RELNUM}" \ + merge/old/${F} \ + merge/${OLDRELNUM}/${F} \ + merge/${RELNUM}/${F} \ + > merge/new/${F} 2>/dev/null; then + echo ${F} >> failed.merges + fi + ;; + esac + done < $1-paths + echo " done." + + # Ask the user to handle any files which didn't merge. + while read F; do + # If the installed file differs from the version in + # the old release only due to RCS tag expansion + # then just use the version in the new release. + if samef merge/old/${F} merge/${OLDRELNUM}/${F}; then + cp merge/${RELNUM}/${F} merge/new/${F} + continue + fi + + cat <<-EOF + +The following file could not be merged automatically: ${F} +Press Enter to edit this file in ${EDITOR} and resolve the conflicts +manually... + EOF + read dummy files/${V}.gz + echo "${F}|${V}" + fi + done < $1-paths > newhashes + + # Pull lines out from $3 which need to be updated to + # reflect merged files. + while read F; do + look "${F}|" $3 + done < $1-paths > $3-oldlines + + # Update lines to reflect merged files + join -t '|' -o 1.1,1.2,1.3,1.4,1.5,1.6,2.2,1.8 \ + $3-oldlines newhashes > $3-newlines + + # Remove old lines from $3 and add new lines. + sort $3-oldlines | + comm -13 - $3 | + sort - $3-newlines > $3.tmp + mv $3.tmp $3 + + # Clean up + rm $1-paths newhashes $3-oldlines $3-newlines + rm -rf merge/ + fi + + # We're done with merging files. + rm $1 +} + +# Do the work involved in fetching upgrades to a new release +upgrade_run () { + workdir_init || return 1 + + # Prepare the mirror list. + fetch_pick_server_init && fetch_pick_server + + # Try to fetch the public key until we run out of servers. + while ! fetch_key; do + fetch_pick_server || return 1 + done + + # Try to fetch the metadata index signature ("tag") until we run + # out of available servers; and sanity check the downloaded tag. + while ! fetch_tag; do + fetch_pick_server || return 1 + done + fetch_tagsanity || return 1 + + # Fetch the INDEX-OLD and INDEX-ALL. + fetch_metadata INDEX-OLD INDEX-ALL || return 1 + + # If StrictComponents is not "yes", generate a new components list + # with only the components which appear to be installed. + upgrade_guess_components INDEX-ALL || return 1 + + # Generate filtered INDEX-OLD and INDEX-ALL files containing only + # the components we want and without anything marked as "Ignore". + fetch_filter_metadata INDEX-OLD || return 1 + fetch_filter_metadata INDEX-ALL || return 1 + + # Merge the INDEX-OLD and INDEX-ALL files into INDEX-OLD. + sort INDEX-OLD INDEX-ALL > INDEX-OLD.tmp + mv INDEX-OLD.tmp INDEX-OLD + rm INDEX-ALL + + # Adjust variables for fetching files from the new release. + OLDRELNUM=${RELNUM} + RELNUM=${TARGETRELEASE} + OLDFETCHDIR=${FETCHDIR} + FETCHDIR=${RELNUM}/${ARCH} + + # Try to fetch the NEW metadata index signature ("tag") until we run + # out of available servers; and sanity check the downloaded tag. + while ! fetch_tag; do + fetch_pick_server || return 1 + done + + # Fetch the new INDEX-ALL. + fetch_metadata INDEX-ALL || return 1 + + # If StrictComponents is not "yes", COMPONENTS contains an entry + # corresponding to the currently running kernel, and said kernel + # does not exist in the new release, add "kernel/generic" to the + # list of components. + upgrade_guess_new_kernel INDEX-ALL || return 1 + + # Filter INDEX-ALL to contain only the components we want and without + # anything marked as "Ignore". + fetch_filter_metadata INDEX-ALL || return 1 + + # Convert INDEX-OLD (last release) and INDEX-ALL (new release) into + # INDEX-OLD and INDEX-NEW files (in the sense of normal upgrades). + upgrade_oldall_to_oldnew INDEX-OLD INDEX-ALL INDEX-NEW + + # Translate /boot/${KERNCONF} or /boot/${NKERNCONF} into ${KERNELDIR} + fetch_filter_kernel_names INDEX-NEW ${NKERNCONF} + fetch_filter_kernel_names INDEX-OLD ${KERNCONF} + + # For all paths appearing in INDEX-OLD or INDEX-NEW, inspect the + # system and generate an INDEX-PRESENT file. + fetch_inspect_system INDEX-OLD INDEX-PRESENT INDEX-NEW || return 1 + + # Based on ${MERGECHANGES}, generate a file tomerge-old with the + # paths and hashes of old versions of files to merge. + fetch_filter_mergechanges INDEX-OLD INDEX-PRESENT tomerge-old + + # Based on ${UPDATEIFUNMODIFIED}, remove lines from INDEX-* which + # correspond to lines in INDEX-PRESENT with hashes not appearing + # in INDEX-OLD or INDEX-NEW. Also remove lines where the entry in + # INDEX-PRESENT has type - and there isn't a corresponding entry in + # INDEX-OLD with type -. + fetch_filter_unmodified_notpresent \ + INDEX-OLD INDEX-PRESENT INDEX-NEW tomerge-old + + # For each entry in INDEX-PRESENT of type -, remove any corresponding + # entry from INDEX-NEW if ${ALLOWADD} != "yes". Remove all entries + # of type - from INDEX-PRESENT. + fetch_filter_allowadd INDEX-PRESENT INDEX-NEW + + # If ${ALLOWDELETE} != "yes", then remove any entries from + # INDEX-PRESENT which don't correspond to entries in INDEX-NEW. + fetch_filter_allowdelete INDEX-PRESENT INDEX-NEW + + # If ${KEEPMODIFIEDMETADATA} == "yes", then for each entry in + # INDEX-PRESENT with metadata not matching any entry in INDEX-OLD, + # replace the corresponding line of INDEX-NEW with one having the + # same metadata as the entry in INDEX-PRESENT. + fetch_filter_modified_metadata INDEX-OLD INDEX-PRESENT INDEX-NEW + + # Remove lines from INDEX-PRESENT and INDEX-NEW which are identical; + # no need to update a file if it isn't changing. + fetch_filter_uptodate INDEX-PRESENT INDEX-NEW + + # Fetch "clean" files from the old release for merging changes. + fetch_files_premerge tomerge-old + + # Prepare to fetch files: Generate a list of the files we need, + # copy the unmodified files we have into /files/, and generate + # a list of patches to download. + fetch_files_prepare INDEX-OLD INDEX-PRESENT INDEX-NEW || return 1 + + # Fetch patches from to-${RELNUM}/${ARCH}/bp/ + PATCHDIR=to-${RELNUM}/${ARCH}/bp + fetch_files || return 1 + + # Merge configuration file changes. + upgrade_merge tomerge-old INDEX-PRESENT INDEX-NEW || return 1 + + # Create and populate install manifest directory; and report what + # updates are available. + fetch_create_manifest || return 1 + + # Leave a note behind to tell the "install" command that the kernel + # needs to be installed before the world. + touch ${BDHASH}-install/kernelfirst + + # Remind the user that they need to run "freebsd-update install" + # to install the downloaded bits, in case they didn't RTFM. + echo "To install the downloaded upgrades, run \"$0 install\"." +} + +# Make sure that all the file hashes mentioned in $@ have corresponding +# gzipped files stored in /files/. +install_verify () { + # Generate a list of hashes + cat $@ | + cut -f 2,7 -d '|' | + grep -E '^f' | + cut -f 2 -d '|' | + sort -u > filelist + + # Make sure all the hashes exist + while read HASH; do + if ! [ -f files/${HASH}.gz ]; then + echo -n "Update files missing -- " + echo "this should never happen." + echo "Re-run '$0 fetch'." + return 1 + fi + done < filelist + + # Clean up + rm filelist +} + +# Remove the system immutable flag from files +install_unschg () { + # Generate file list + cat $@ | + cut -f 1 -d '|' > filelist + + # Remove flags + while read F; do + if ! [ -e ${BASEDIR}/${F} ]; then + continue + else + echo ${BASEDIR}/${F} + fi + done < filelist | xargs chflags noschg || return 1 + + # Clean up + rm filelist +} + +# Decide which directory name to use for kernel backups. +backup_kernel_finddir () { + CNT=0 + while true ; do + # Pathname does not exist, so it is OK use that name + # for backup directory. + if [ ! -e $BASEDIR/$BACKUPKERNELDIR ]; then + return 0 + fi + + # If directory do exist, we only use if it has our + # marker file. + if [ -d $BASEDIR/$BACKUPKERNELDIR -a \ + -e $BASEDIR/$BACKUPKERNELDIR/.freebsd-update ]; then + return 0 + fi + + # We could not use current directory name, so add counter to + # the end and try again. + CNT=$((CNT + 1)) + if [ $CNT -gt 9 ]; then + echo "Could not find valid backup dir ($BASEDIR/$BACKUPKERNELDIR)" + exit 1 + fi + BACKUPKERNELDIR="`echo $BACKUPKERNELDIR | sed -Ee 's/[0-9]\$//'`" + BACKUPKERNELDIR="${BACKUPKERNELDIR}${CNT}" + done +} + +# Backup the current kernel using hardlinks, if not disabled by user. +# Since we delete all files in the directory used for previous backups +# we create a marker file called ".freebsd-update" in the directory so +# we can determine on the next run that the directory was created by +# freebsd-update and we then do not accidentally remove user files in +# the unlikely case that the user has created a directory with a +# conflicting name. +backup_kernel () { + # Only make kernel backup is so configured. + if [ $BACKUPKERNEL != yes ]; then + return 0 + fi + + # Decide which directory name to use for kernel backups. + backup_kernel_finddir + + # Remove old kernel backup files. If $BACKUPKERNELDIR was + # "not ours", backup_kernel_finddir would have exited, so + # deleting the directory content is as safe as we can make it. + if [ -d $BASEDIR/$BACKUPKERNELDIR ]; then + rm -fr $BASEDIR/$BACKUPKERNELDIR + fi + + # Create directories for backup. + mkdir -p $BASEDIR/$BACKUPKERNELDIR + mtree -cdn -p "${BASEDIR}/${KERNELDIR}" | \ + mtree -Ue -p "${BASEDIR}/${BACKUPKERNELDIR}" > /dev/null + + # Mark the directory as having been created by freebsd-update. + touch $BASEDIR/$BACKUPKERNELDIR/.freebsd-update + if [ $? -ne 0 ]; then + echo "Could not create kernel backup directory" + exit 1 + fi + + # Disable pathname expansion to be sure *.symbols is not + # expanded. + set -f + + # Use find to ignore symbol files, unless disabled by user. + if [ $BACKUPKERNELSYMBOLFILES = yes ]; then + FINDFILTER="" + else + FINDFILTER="-a ! -name *.debug -a ! -name *.symbols" + fi + + # Backup all the kernel files using hardlinks. + (cd ${BASEDIR}/${KERNELDIR} && find . -type f $FINDFILTER -exec \ + cp -pl '{}' ${BASEDIR}/${BACKUPKERNELDIR}/'{}' \;) + + # Re-enable patchname expansion. + set +f +} + +# Install new files +install_from_index () { + # First pass: Do everything apart from setting file flags. We + # can't set flags yet, because schg inhibits hard linking. + sort -k 1,1 -t '|' $1 | + tr '|' ' ' | + while read FPATH TYPE OWNER GROUP PERM FLAGS HASH LINK; do + case ${TYPE} in + d) + # Create a directory + install -d -o ${OWNER} -g ${GROUP} \ + -m ${PERM} ${BASEDIR}/${FPATH} + ;; + f) + if [ -z "${LINK}" ]; then + # Create a file, without setting flags. + gunzip < files/${HASH}.gz > ${HASH} + install -S -o ${OWNER} -g ${GROUP} \ + -m ${PERM} ${HASH} ${BASEDIR}/${FPATH} + rm ${HASH} + else + # Create a hard link. + ln -f ${BASEDIR}/${LINK} ${BASEDIR}/${FPATH} + fi + ;; + L) + # Create a symlink + ln -sfh ${HASH} ${BASEDIR}/${FPATH} + ;; + esac + done + + # Perform a second pass, adding file flags. + tr '|' ' ' < $1 | + while read FPATH TYPE OWNER GROUP PERM FLAGS HASH LINK; do + if [ ${TYPE} = "f" ] && + ! [ ${FLAGS} = "0" ]; then + chflags ${FLAGS} ${BASEDIR}/${FPATH} + fi + done +} + +# Remove files which we want to delete +install_delete () { + # Generate list of new files + cut -f 1 -d '|' < $2 | + sort > newfiles + + # Generate subindex of old files we want to nuke + sort -k 1,1 -t '|' $1 | + join -t '|' -v 1 - newfiles | + sort -r -k 1,1 -t '|' | + cut -f 1,2 -d '|' | + tr '|' ' ' > killfiles + + # Remove the offending bits + while read FPATH TYPE; do + case ${TYPE} in + d) + rmdir ${BASEDIR}/${FPATH} + ;; + f) + rm ${BASEDIR}/${FPATH} + ;; + L) + rm ${BASEDIR}/${FPATH} + ;; + esac + done < killfiles + + # Clean up + rm newfiles killfiles +} + +# Install new files, delete old files, and update generated files +install_files () { + # If we haven't already dealt with the kernel, deal with it. + if ! [ -f $1/kerneldone ]; then + grep -E '^/boot/' $1/INDEX-OLD > INDEX-OLD + grep -E '^/boot/' $1/INDEX-NEW > INDEX-NEW + + # Backup current kernel before installing a new one + backup_kernel || return 1 + + # Install new files + install_from_index INDEX-NEW || return 1 + + # Remove files which need to be deleted + install_delete INDEX-OLD INDEX-NEW || return 1 + + # Update linker.hints if necessary + if [ -s INDEX-OLD -o -s INDEX-NEW ]; then + kldxref -R ${BASEDIR}/boot/ 2>/dev/null + fi + + # We've finished updating the kernel. + touch $1/kerneldone + + # Do we need to ask for a reboot now? + if [ -f $1/kernelfirst ] && + [ -s INDEX-OLD -o -s INDEX-NEW ]; then + cat <<-EOF + +Kernel updates have been installed. Please reboot and run +"$0 install" again to finish installing updates. + EOF + exit 0 + fi + fi + + # If we haven't already dealt with the world, deal with it. + if ! [ -f $1/worlddone ]; then + # Create any necessary directories first + grep -vE '^/boot/' $1/INDEX-NEW | + grep -E '^[^|]+\|d\|' > INDEX-NEW + install_from_index INDEX-NEW || return 1 + + # Install new runtime linker + grep -vE '^/boot/' $1/INDEX-NEW | + grep -vE '^[^|]+\|d\|' | + grep -E '^/libexec/ld-elf[^|]*\.so\.[0-9]+\|' > INDEX-NEW + install_from_index INDEX-NEW || return 1 + + # Install new shared libraries next + grep -vE '^/boot/' $1/INDEX-NEW | + grep -vE '^[^|]+\|d\|' | + grep -vE '^/libexec/ld-elf[^|]*\.so\.[0-9]+\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-NEW + install_from_index INDEX-NEW || return 1 + + # Deal with everything else + grep -vE '^/boot/' $1/INDEX-OLD | + grep -vE '^[^|]+\|d\|' | + grep -vE '^/libexec/ld-elf[^|]*\.so\.[0-9]+\|' | + grep -vE '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-OLD + grep -vE '^/boot/' $1/INDEX-NEW | + grep -vE '^[^|]+\|d\|' | + grep -vE '^/libexec/ld-elf[^|]*\.so\.[0-9]+\|' | + grep -vE '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-NEW + install_from_index INDEX-NEW || return 1 + install_delete INDEX-OLD INDEX-NEW || return 1 + + # Rehash certs if we actually have certctl installed. + if which certctl>/dev/null; then + env DESTDIR=${BASEDIR} certctl rehash + fi + + # Rebuild generated pwd files and /etc/login.conf.db. + pwd_mkdb -d ${BASEDIR}/etc -p ${BASEDIR}/etc/master.passwd + cap_mkdb ${BASEDIR}/etc/login.conf + + # Rebuild man page databases, if necessary. + for D in /usr/share/man /usr/share/openssl/man; do + if [ ! -d ${BASEDIR}/$D ]; then + continue + fi + if [ -z "$(find ${BASEDIR}/$D -type f -newer ${BASEDIR}/$D/mandoc.db)" ]; then + continue; + fi + makewhatis ${BASEDIR}/$D + done + + # We've finished installing the world and deleting old files + # which are not shared libraries. + touch $1/worlddone + + # Do we need to ask the user to portupgrade now? + grep -vE '^/boot/' $1/INDEX-NEW | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' | + cut -f 1 -d '|' | + sort > newfiles + if grep -vE '^/boot/' $1/INDEX-OLD | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' | + cut -f 1 -d '|' | + sort | + join -v 1 - newfiles | + grep -q .; then + cat <<-EOF + +Completing this upgrade requires removing old shared object files. +Please rebuild all installed 3rd party software (e.g., programs +installed from the ports tree) and then run "$0 install" +again to finish installing updates. + EOF + rm newfiles + exit 0 + fi + rm newfiles + fi + + # Remove old shared libraries + grep -vE '^/boot/' $1/INDEX-NEW | + grep -vE '^[^|]+\|d\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-NEW + grep -vE '^/boot/' $1/INDEX-OLD | + grep -vE '^[^|]+\|d\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-OLD + install_delete INDEX-OLD INDEX-NEW || return 1 + + # Remove old directories + grep -vE '^/boot/' $1/INDEX-NEW | + grep -E '^[^|]+\|d\|' > INDEX-NEW + grep -vE '^/boot/' $1/INDEX-OLD | + grep -E '^[^|]+\|d\|' > INDEX-OLD + install_delete INDEX-OLD INDEX-NEW || return 1 + + # Remove temporary files + rm INDEX-OLD INDEX-NEW +} + +# Rearrange bits to allow the installed updates to be rolled back +install_setup_rollback () { + # Remove the "reboot after installing kernel", "kernel updated", and + # "finished installing the world" flags if present -- they are + # irrelevant when rolling back updates. + if [ -f ${BDHASH}-install/kernelfirst ]; then + rm ${BDHASH}-install/kernelfirst + rm ${BDHASH}-install/kerneldone + fi + if [ -f ${BDHASH}-install/worlddone ]; then + rm ${BDHASH}-install/worlddone + fi + + if [ -L ${BDHASH}-rollback ]; then + mv ${BDHASH}-rollback ${BDHASH}-install/rollback + fi + + mv ${BDHASH}-install ${BDHASH}-rollback +} + +# Actually install updates +install_run () { + echo -n "Installing updates..." + + # Make sure we have all the files we should have + install_verify ${BDHASH}-install/INDEX-OLD \ + ${BDHASH}-install/INDEX-NEW || return 1 + + # Remove system immutable flag from files + install_unschg ${BDHASH}-install/INDEX-OLD \ + ${BDHASH}-install/INDEX-NEW || return 1 + + # Install new files, delete old files, and update linker.hints + install_files ${BDHASH}-install || return 1 + + # Rearrange bits to allow the installed updates to be rolled back + install_setup_rollback + + echo " done." +} + +# Rearrange bits to allow the previous set of updates to be rolled back next. +rollback_setup_rollback () { + if [ -L ${BDHASH}-rollback/rollback ]; then + mv ${BDHASH}-rollback/rollback rollback-tmp + rm -r ${BDHASH}-rollback/ + rm ${BDHASH}-rollback + mv rollback-tmp ${BDHASH}-rollback + else + rm -r ${BDHASH}-rollback/ + rm ${BDHASH}-rollback + fi +} + +# Install old files, delete new files, and update linker.hints +rollback_files () { + # Install old shared library files which don't have the same path as + # a new shared library file. + grep -vE '^/boot/' $1/INDEX-NEW | + grep -E '/lib/.*\.so\.[0-9]+\|' | + cut -f 1 -d '|' | + sort > INDEX-NEW.libs.flist + grep -vE '^/boot/' $1/INDEX-OLD | + grep -E '/lib/.*\.so\.[0-9]+\|' | + sort -k 1,1 -t '|' - | + join -t '|' -v 1 - INDEX-NEW.libs.flist > INDEX-OLD + install_from_index INDEX-OLD || return 1 + + # Deal with files which are neither kernel nor shared library + grep -vE '^/boot/' $1/INDEX-OLD | + grep -vE '/lib/.*\.so\.[0-9]+\|' > INDEX-OLD + grep -vE '^/boot/' $1/INDEX-NEW | + grep -vE '/lib/.*\.so\.[0-9]+\|' > INDEX-NEW + install_from_index INDEX-OLD || return 1 + install_delete INDEX-NEW INDEX-OLD || return 1 + + # Install any old shared library files which we didn't install above. + grep -vE '^/boot/' $1/INDEX-OLD | + grep -E '/lib/.*\.so\.[0-9]+\|' | + sort -k 1,1 -t '|' - | + join -t '|' - INDEX-NEW.libs.flist > INDEX-OLD + install_from_index INDEX-OLD || return 1 + + # Delete unneeded shared library files + grep -vE '^/boot/' $1/INDEX-OLD | + grep -E '/lib/.*\.so\.[0-9]+\|' > INDEX-OLD + grep -vE '^/boot/' $1/INDEX-NEW | + grep -E '/lib/.*\.so\.[0-9]+\|' > INDEX-NEW + install_delete INDEX-NEW INDEX-OLD || return 1 + + # Deal with kernel files + grep -E '^/boot/' $1/INDEX-OLD > INDEX-OLD + grep -E '^/boot/' $1/INDEX-NEW > INDEX-NEW + install_from_index INDEX-OLD || return 1 + install_delete INDEX-NEW INDEX-OLD || return 1 + if [ -s INDEX-OLD -o -s INDEX-NEW ]; then + kldxref -R /boot/ 2>/dev/null + fi + + # Remove temporary files + rm INDEX-OLD INDEX-NEW INDEX-NEW.libs.flist +} + +# Actually rollback updates +rollback_run () { + echo -n "Uninstalling updates..." + + # If there are updates waiting to be installed, remove them; we + # want the user to re-run 'fetch' after rolling back updates. + if [ -L ${BDHASH}-install ]; then + rm -r ${BDHASH}-install/ + rm ${BDHASH}-install + fi + + # Make sure we have all the files we should have + install_verify ${BDHASH}-rollback/INDEX-NEW \ + ${BDHASH}-rollback/INDEX-OLD || return 1 + + # Remove system immutable flag from files + install_unschg ${BDHASH}-rollback/INDEX-NEW \ + ${BDHASH}-rollback/INDEX-OLD || return 1 + + # Install old files, delete new files, and update linker.hints + rollback_files ${BDHASH}-rollback || return 1 + + # Remove the rollback directory and the symlink pointing to it; and + # rearrange bits to allow the previous set of updates to be rolled + # back next. + rollback_setup_rollback + + echo " done." +} + +# Compare INDEX-ALL and INDEX-PRESENT and print warnings about differences. +IDS_compare () { + # Get all the lines which mismatch in something other than file + # flags. We ignore file flags because sysinstall doesn't seem to + # set them when it installs FreeBSD; warning about these adds a + # very large amount of noise. + cut -f 1-5,7-8 -d '|' $1 > $1.noflags + sort -k 1,1 -t '|' $1.noflags > $1.sorted + cut -f 1-5,7-8 -d '|' $2 | + comm -13 $1.noflags - | + fgrep -v '|-|||||' | + sort -k 1,1 -t '|' | + join -t '|' $1.sorted - > INDEX-NOTMATCHING + + # Ignore files which match IDSIGNOREPATHS. + for X in ${IDSIGNOREPATHS}; do + grep -E "^${X}" INDEX-NOTMATCHING + done | + sort -u | + comm -13 - INDEX-NOTMATCHING > INDEX-NOTMATCHING.tmp + mv INDEX-NOTMATCHING.tmp INDEX-NOTMATCHING + + # Go through the lines and print warnings. + local IFS='|' + while read FPATH TYPE OWNER GROUP PERM HASH LINK P_TYPE P_OWNER P_GROUP P_PERM P_HASH P_LINK; do + # Warn about different object types. + if ! [ "${TYPE}" = "${P_TYPE}" ]; then + echo -n "${FPATH} is a " + case "${P_TYPE}" in + f) echo -n "regular file, " + ;; + d) echo -n "directory, " + ;; + L) echo -n "symlink, " + ;; + esac + echo -n "but should be a " + case "${TYPE}" in + f) echo -n "regular file." + ;; + d) echo -n "directory." + ;; + L) echo -n "symlink." + ;; + esac + echo + + # Skip other tests, since they don't make sense if + # we're comparing different object types. + continue + fi + + # Warn about different owners. + if ! [ "${OWNER}" = "${P_OWNER}" ]; then + echo -n "${FPATH} is owned by user id ${P_OWNER}, " + echo "but should be owned by user id ${OWNER}." + fi + + # Warn about different groups. + if ! [ "${GROUP}" = "${P_GROUP}" ]; then + echo -n "${FPATH} is owned by group id ${P_GROUP}, " + echo "but should be owned by group id ${GROUP}." + fi + + # Warn about different permissions. We do not warn about + # different permissions on symlinks, since some archivers + # don't extract symlink permissions correctly and they are + # ignored anyway. + if ! [ "${PERM}" = "${P_PERM}" ] && + ! [ "${TYPE}" = "L" ]; then + echo -n "${FPATH} has ${P_PERM} permissions, " + echo "but should have ${PERM} permissions." + fi + + # Warn about different file hashes / symlink destinations. + if ! [ "${HASH}" = "${P_HASH}" ]; then + if [ "${TYPE}" = "L" ]; then + echo -n "${FPATH} is a symlink to ${P_HASH}, " + echo "but should be a symlink to ${HASH}." + fi + if [ "${TYPE}" = "f" ]; then + echo -n "${FPATH} has SHA256 hash ${P_HASH}, " + echo "but should have SHA256 hash ${HASH}." + fi + fi + + # We don't warn about different hard links, since some + # some archivers break hard links, and as long as the + # underlying data is correct they really don't matter. + done < INDEX-NOTMATCHING + + # Clean up + rm $1 $1.noflags $1.sorted $2 INDEX-NOTMATCHING +} + +# Do the work involved in comparing the system to a "known good" index +IDS_run () { + workdir_init || return 1 + + # Prepare the mirror list. + fetch_pick_server_init && fetch_pick_server + + # Try to fetch the public key until we run out of servers. + while ! fetch_key; do + fetch_pick_server || return 1 + done + + # Try to fetch the metadata index signature ("tag") until we run + # out of available servers; and sanity check the downloaded tag. + while ! fetch_tag; do + fetch_pick_server || return 1 + done + fetch_tagsanity || return 1 + + # Fetch INDEX-OLD and INDEX-ALL. + fetch_metadata INDEX-OLD INDEX-ALL || return 1 + + # Generate filtered INDEX-OLD and INDEX-ALL files containing only + # the components we want and without anything marked as "Ignore". + fetch_filter_metadata INDEX-OLD || return 1 + fetch_filter_metadata INDEX-ALL || return 1 + + # Merge the INDEX-OLD and INDEX-ALL files into INDEX-ALL. + sort INDEX-OLD INDEX-ALL > INDEX-ALL.tmp + mv INDEX-ALL.tmp INDEX-ALL + rm INDEX-OLD + + # Translate /boot/${KERNCONF} to ${KERNELDIR} + fetch_filter_kernel_names INDEX-ALL ${KERNCONF} + + # Inspect the system and generate an INDEX-PRESENT file. + fetch_inspect_system INDEX-ALL INDEX-PRESENT /dev/null || return 1 + + # Compare INDEX-ALL and INDEX-PRESENT and print warnings about any + # differences. + IDS_compare INDEX-ALL INDEX-PRESENT +} + +#### Main functions -- call parameter-handling and core functions + +# Using the command line, configuration file, and defaults, +# set all the parameters which are needed later. +get_params () { + init_params + parse_cmdline $@ + parse_conffile + default_params +} + +# Fetch command. Make sure that we're being called +# interactively, then run fetch_check_params and fetch_run +cmd_fetch () { + finalize_components_config ${COMPONENTS} + if [ ! -t 0 -a $NOTTYOK -eq 0 ]; then + echo -n "`basename $0` fetch should not " + echo "be run non-interactively." + echo "Run `basename $0` cron instead." + exit 1 + fi + fetch_check_params + fetch_run || exit 1 + ISFETCHED=1 +} + +# Cron command. Make sure the parameters are sensible; wait +# rand(3600) seconds; then fetch updates. While fetching updates, +# send output to a temporary file; only print that file if the +# fetching failed. +cmd_cron () { + fetch_check_params + sleep `jot -r 1 0 3600` + + TMPFILE=`mktemp /tmp/freebsd-update.XXXXXX` || exit 1 + finalize_components_config ${COMPONENTS} >> ${TMPFILE} + if ! fetch_run >> ${TMPFILE} || + ! grep -q "No updates needed" ${TMPFILE} || + [ ${VERBOSELEVEL} = "debug" ]; then + mail -s "`hostname` security updates" ${MAILTO} < ${TMPFILE} + fi + + rm ${TMPFILE} +} + +# Fetch files for upgrading to a new release. +cmd_upgrade () { + finalize_components_config ${COMPONENTS} + upgrade_check_params + upgrade_run || exit 1 +} + +# Check if there are fetched updates ready to install. +# Chdir into the working directory. +cmd_updatesready () { + finalize_components_config ${COMPONENTS} + # Check if working directory exists (if not, no updates pending) + if ! [ -e "${WORKDIR}" ]; then + echo "No updates are available to install." + exit 2 + fi + + # Change into working directory (fail if no permission/directory etc.) + cd ${WORKDIR} || exit 1 + + # Construct a unique name from ${BASEDIR} + BDHASH=`echo ${BASEDIR} | sha256 -q` + + # Check that we have updates ready to install + if ! [ -L ${BDHASH}-install ]; then + echo "No updates are available to install." + exit 2 + fi + + echo "There are updates available to install." + echo "Run '$0 install' to proceed." +} + +# Install downloaded updates. +cmd_install () { + finalize_components_config ${COMPONENTS} + install_check_params + install_run || exit 1 +} + +# Rollback most recently installed updates. +cmd_rollback () { + finalize_components_config ${COMPONENTS} + rollback_check_params + rollback_run || exit 1 +} + +# Compare system against a "known good" index. +cmd_IDS () { + finalize_components_config ${COMPONENTS} + IDS_check_params + IDS_run || exit 1 +} + +# Output configuration. +cmd_showconfig () { + finalize_components_config ${COMPONENTS} + for X in ${CONFIGOPTIONS}; do + echo $X=$(eval echo \$${X}) + done +} + +#### Entry point + +# Make sure we find utilities from the base system +export PATH=/sbin:/bin:/usr/sbin:/usr/bin:${PATH} + +# Set a pager if the user doesn't +if [ -z "$PAGER" ]; then + PAGER=/usr/bin/less +fi + +# Set LC_ALL in order to avoid problems with character ranges like [A-Z]. +export LC_ALL=C + +get_params $@ +for COMMAND in ${COMMANDS}; do + cmd_${COMMAND} +done diff --git a/conf/system/freebsd-update/13.0/freebsd-update.conf b/conf/system/freebsd-update/13.0/freebsd-update.conf new file mode 100644 index 0000000..7f09170 --- /dev/null +++ b/conf/system/freebsd-update/13.0/freebsd-update.conf @@ -0,0 +1,76 @@ +# $FreeBSD$ + +# Trusted keyprint. Changing this is a Bad Idea unless you've received +# a PGP-signed email from telling you to +# change it and explaining why. +KeyPrint 800651ef4b4c71c27e60786d7b487188970f4b4169cc055784e21eb71d410cc5 + +# Server or server pool from which to fetch updates. You can change +# this to point at a specific server if you want, but in most cases +# using a "nearby" server won't provide a measurable improvement in +# performance. +ServerName update.FreeBSD.org + +# Components of the base system which should be kept updated. +Components src world kernel + +# Example for updating the userland and the kernel source code only: +# Components src/base src/sys world + +# Paths which start with anything matching an entry in an IgnorePaths +# statement will be ignored. +IgnorePaths + +# Paths which start with anything matching an entry in an IDSIgnorePaths +# statement will be ignored by "freebsd-update IDS". +IDSIgnorePaths /usr/share/man/cat +IDSIgnorePaths /usr/share/man/whatis +IDSIgnorePaths /var/db/locate.database +IDSIgnorePaths /var/log + +# Paths which start with anything matching an entry in an UpdateIfUnmodified +# statement will only be updated if the contents of the file have not been +# modified by the user (unless changes are merged; see below). +UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile + +# When upgrading to a new FreeBSD release, files which match MergeChanges +# will have any local changes merged into the version from the new release. +MergeChanges /etc/ /boot/device.hints + +### Default configuration options: + +# Directory in which to store downloaded updates and temporary +# files used by FreeBSD Update. +# WorkDir /var/db/freebsd-update + +# Destination to send output of "freebsd-update cron" if an error +# occurs or updates have been downloaded. +# MailTo root + +# Is FreeBSD Update allowed to create new files? +# AllowAdd yes + +# Is FreeBSD Update allowed to delete files? +# AllowDelete yes + +# If the user has modified file ownership, permissions, or flags, should +# FreeBSD Update retain this modified metadata when installing a new version +# of that file? +# KeepModifiedMetadata yes + +# When upgrading between releases, should the list of Components be +# read strictly (StrictComponents yes) or merely as a list of components +# which *might* be installed of which FreeBSD Update should figure out +# which actually are installed and upgrade those (StrictComponents no)? +# StrictComponents no + +# When installing a new kernel perform a backup of the old one first +# so it is possible to boot the old kernel in case of problems. +# BackupKernel yes + +# If BackupKernel is enabled, the backup kernel is saved to this +# directory. +# BackupKernelDir /boot/kernel.old + +# When backing up a kernel also back up debug symbol files? +# BackupKernelSymbolFiles no diff --git a/conf/system/include/13.0/diff3 b/conf/system/include/13.0/diff3 new file mode 100755 index 0000000000000000000000000000000000000000..ee0ed0a653276cb88e0a7f4875048a5da3ae926b GIT binary patch literal 28872 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 b+St(khVs(77rHy!-^JUXb`nt@+Wx-*jYco| literal 0 HcmV?d00001 diff --git a/conf/system/include/13.0/jib b/conf/system/include/13.0/jib new file mode 100644 index 0000000..effe476 --- /dev/null +++ b/conf/system/include/13.0/jib @@ -0,0 +1,418 @@ +#!/bin/sh +#- +# Copyright (c) 2016 Devin Teske +# 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$ +# +############################################################ IDENT(1) +# +# $Title: if_bridge(4) management script for vnet jails $ +# +############################################################ INFORMATION +# +# Use this tool with jail.conf(5) (or rc.conf(5) ``legacy'' configuration) to +# manage `vnet' interfaces for jails. Designed to automate the creation of vnet +# interface(s) during jail `prestart' and destroy said interface(s) during jail +# `poststop'. +# +# In jail.conf(5) format: +# +# ### BEGIN EXCERPT ### +# +# xxx { +# host.hostname = "xxx.yyy"; +# path = "/vm/xxx"; +# +# # +# # NB: Below 2-lines required +# # NB: The number of eNb_xxx interfaces should match the number of +# # arguments given to `jib addm xxx' in exec.prestart value. +# # +# vnet; +# vnet.interface = e0b_xxx, e1b_xxx, ...; +# +# exec.clean; +# exec.system_user = "root"; +# exec.jail_user = "root"; +# +# # +# # NB: Below 2-lines required +# # NB: The number of arguments after `jib addm xxx' should match +# # the number of eNb_xxx arguments in vnet.interface value. +# # +# exec.prestart += "jib addm xxx em0 em1 ..."; +# exec.poststop += "jib destroy xxx"; +# +# # Standard recipe +# exec.start += "/bin/sh /etc/rc"; +# exec.stop = "/bin/sh /etc/rc.shutdown jail"; +# exec.consolelog = "/var/log/jail_xxx_console.log"; +# mount.devfs; +# +# # Optional (default off) +# #allow.mount; +# #allow.set_hostname = 1; +# #allow.sysvipc = 1; +# #devfs_ruleset = "11"; # rule to unhide bpf for DHCP +# } +# +# ### END EXCERPT ### +# +# In rc.conf(5) ``legacy'' format (used when /etc/jail.conf does not exist): +# +# ### BEGIN EXCERPT ### +# +# jail_enable="YES" +# jail_list="xxx" +# +# # +# # Global presets for all jails +# # +# jail_devfs_enable="YES" # mount devfs +# +# # +# # Global options (default off) +# # +# #jail_mount_enable="YES" # mount /etc/fstab.{name} +# #jail_set_hostname_allow="YES" # Allow hostname to change +# #jail_sysvipc_allow="YES" # Allow SysV Interprocess Comm. +# +# # xxx +# jail_xxx_hostname="xxx.shxd.cx" # hostname +# jail_xxx_rootdir="/vm/xxx" # root directory +# jail_xxx_vnet_interfaces="e0b_xxx e1bxxx ..." # vnet interface(s) +# jail_xxx_exec_prestart0="jib addm xxx em0 em1 ..." # bridge interface(s) +# jail_xxx_exec_poststop0="jib destroy xxx" # destroy interface(s) +# #jail_xxx_mount_enable="YES" # mount /etc/fstab.xxx +# #jail_xxx_devfs_ruleset="11" # rule to unhide bpf for DHCP +# +# ### END EXCERPT ### +# +# Note that the legacy rc.conf(5) format is converted to +# /var/run/jail.{name}.conf by /etc/rc.d/jail if jail.conf(5) is missing. +# +# ASIDE: dhclient(8) inside a vnet jail... +# +# To allow dhclient(8) to work inside a vnet jail, make sure the following +# appears in /etc/devfs.rules (which should be created if it doesn't exist): +# +# [devfsrules_jail=11] +# add include $devfsrules_hide_all +# add include $devfsrules_unhide_basic +# add include $devfsrules_unhide_login +# add path 'bpf*' unhide +# +# And set ether devfs.ruleset="11" (jail.conf(5)) or +# jail_{name}_devfs_ruleset="11" (rc.conf(5)). +# +# NB: While this tool can't create every type of desirable topology, it should +# handle most setups, minus some which considered exotic or purpose-built. +# +############################################################ GLOBALS + +pgm="${0##*/}" # Program basename + +# +# Global exit status +# +SUCCESS=0 +FAILURE=1 + +############################################################ FUNCTIONS + +usage() +{ + local action usage descr + exec >&2 + echo "Usage: $pgm action [arguments]" + echo "Actions:" + for action in \ + addm \ + show \ + show1 \ + destroy \ + ; do + eval usage=\"\$jib_${action}_usage\" + [ "$usage" ] || continue + eval descr=\"\$jib_${action}_descr\" + printf "\t%s\n\t\t%s\n" "$usage" "$descr" + done + exit $FAILURE +} + +action_usage() +{ + local usage descr action="$1" + eval usage=\"\$jib_${action}_usage\" + echo "Usage: $pgm $usage" >&2 + eval descr=\"\$jib_${action}_descr\" + printf "\t%s\n" "$descr" + exit $FAILURE +} + +derive_mac() +{ + local OPTIND=1 OPTARG __flag + local __mac_num= __make_pair= + while getopts 2n: __flag; do + case "$__flag" in + 2) __make_pair=1 ;; + n) __mac_num=${OPTARG%%[^0-9]*} ;; + esac + done + shift $(( $OPTIND - 1 )) + + if [ ! "$__mac_num" ]; then + eval __mac_num=\${_${iface}_num:--1} + __mac_num=$(( $__mac_num + 1 )) + eval _${iface}_num=\$__mac_num + fi + + local __iface="$1" __name="$2" __var_to_set="$3" __var_to_set_b="$4" + local __iface_devid __new_devid __num __new_devid_b + # + # Calculate MAC address derived from given iface. + # + # The formula I'm using is ``NP:SS:SS:II:II:II'' where: + # + N denotes 4 bits used as a counter to support branching + # each parent interface up to 15 times under the same jail + # name (see S below). + # + P denotes the special nibble whose value, if one of + # 2, 6, A, or E (but usually 2) denotes a privately + # administered MAC address (while remaining routable). + # + S denotes 16 bits, the sum(1) value of the jail name. + # + I denotes bits that are inherited from parent interface. + # + # The S bits are a CRC-16 checksum of NAME, allowing the jail + # to change link numbers in ng_bridge(4) without affecting the + # MAC address. Meanwhile, if... + # + the jail NAME changes (e.g., it was duplicated and given + # a new name with no other changes) + # + the underlying network interface changes + # + the jail is moved to another host + # the MAC address will be recalculated to a new, similarly + # unique value preventing conflict. + # + __iface_devid=$( ifconfig $__iface ether | awk '/ether/,$0=$2' ) + # ??:??:??:II:II:II + __new_devid=${__iface_devid#??:??:??} # => :II:II:II + # => :SS:SS:II:II:II + __num=$( set -- `echo -n "$__name" | sum` && echo $1 ) + __new_devid=$( printf :%02x:%02x \ + $(( $__num >> 8 & 255 )) $(( $__num & 255 )) )$__new_devid + # => P:SS:SS:II:II:II + case "$__iface_devid" in + ?2:*) __new_devid=a$__new_devid __new_devid_b=e$__new_devid ;; + ?[Ee]:*) __new_devid=2$__new_devid __new_devid_b=6$__new_devid ;; + *) __new_devid=2$__new_devid __new_devid_b=e$__new_devid + esac + # => NP:SS:SS:II:II:II + __new_devid=$( printf %x $(( $__mac_num & 15 )) )$__new_devid + __new_devid_b=$( printf %x $(( $__mac_num & 15 )) )$__new_devid_b + + # + # Return derivative MAC address(es) + # + if [ "$__make_pair" ]; then + if [ "$__var_to_set" -a "$__var_to_set_b" ]; then + eval $__var_to_set=\$__new_devid + eval $__var_to_set_b=\$__new_devid_b + else + echo $__new_devid $__new_devid_b + fi + else + if [ "$__var_to_set" ]; then + eval $__var_to_set=\$__new_devid + else + echo $__new_devid + fi + fi +} + +mustberoot_to_continue() +{ + if [ "$( id -u )" -ne 0 ]; then + echo "Must run as root!" >&2 + exit $FAILURE + fi +} + +jib_addm_usage="addm [-b BRIDGE_NAME] NAME [!]iface0 [[!]iface1 ...]" +jib_addm_descr="Creates e0b_NAME [e1b_NAME ...]" +jib_addm() +{ + local OPTIND=1 OPTARG flag bridge=bridge + while getopts b: flag; do + case "$flag" in + b) bridge="${OPTARG:-bridge}" ;; + *) action_usage addm # NOTREACHED + esac + done + shift $(( $OPTIND - 1 )) + + local name="$1" + [ "${name:-x}" = "${name#*[!0-9a-zA-Z_]}" -a $# -gt 1 ] || + action_usage addm # NOTREACHED + shift 1 # name + + mustberoot_to_continue + + local iface eiface_devid_a eiface_devid_b + local new no_derive num quad i=0 + for iface in $*; do + + no_derive= + case "$iface" in + !*) iface=${iface#!} no_derive=1 ;; + esac + + # Make sure the interface doesn't exist already + if ifconfig "e${i}a_$name" > /dev/null 2>&1; then + i=$(( $i + 1 )) + continue + fi + + # Bring the interface up + ifconfig $iface up || return + + # Make sure the interface has been bridged + if ! ifconfig "$iface$bridge" > /dev/null 2>&1; then + new=$( ifconfig bridge create ) || return + ifconfig $new addm $iface || return + ifconfig $new name "$iface$bridge" || return + ifconfig "$iface$bridge" up || return + fi + + # Create a new interface to the bridge + new=$( ifconfig epair create ) || return + ifconfig "$iface$bridge" addm $new || return + + # Rename the new interface + ifconfig $new name "e${i}a_$name" || return + ifconfig ${new%a}b name "e${i}b_$name" || return + ifconfig "e${i}a_$name" up || return + ifconfig "e${i}b_$name" up || return + + # + # Set the MAC address of the new interface using a sensible + # algorithm to prevent conflicts on the network. + # + eiface_devid_a= eiface_devid_b= + [ "$no_derive" ] || derive_mac -2 $iface "$name" \ + eiface_devid_a eiface_devid_b + if [ "$eiface_devid_a" -a "$eiface_devid_b" ]; then + ifconfig "e${i}a_$name" ether $eiface_devid_a + ifconfig "e${i}b_$name" ether $eiface_devid_b + fi > /dev/null 2>&1 + + i=$(( $i + 1 )) + done # for iface +} + +jib_show_usage="show" +jib_show_descr="List possible NAME values for \`show NAME'" +jib_show1_usage="show NAME" +jib_show1_descr="Lists e0b_NAME [e1b_NAME ...]" +jib_show2_usage="show [NAME]" +jib_show() +{ + local OPTIND=1 OPTARG flag + while getopts "" flag; do + case "$flag" in + *) action_usage show2 # NOTREACHED + esac + done + shift $(( $OPTIND - 1 )) + if [ $# -eq 0 ]; then + ifconfig | awk ' + /^[^:[:space:]]+:/ { + iface = $1 + sub(/:.*/, "", iface) + next + } + $1 == "groups:" { + for (n = split($0, group); n > 1; n--) { + if (group[n] != "bridge") continue + print iface + next + } + }' | + xargs -rn1 ifconfig | + awk '$1 == "member:" && + sub(/^e[[:digit:]]+a_/, "", $2), $0 = $2' | + sort -u + return + fi + ifconfig | awk -v name="$1" ' + match($0, /^e[[:digit:]]+a_/) && sub(/:.*/, "") && + substr($1, RSTART + RLENGTH) == name + ' | sort +} + +jib_destroy_usage="destroy NAME" +jib_destroy_descr="Destroy e0b_NAME [e1b_NAME ...]" +jib_destroy() +{ + local OPTIND=1 OPTARG flag + while getopts "" flag; do + case "$flag" in + *) action_usage destroy # NOTREACHED + esac + done + shift $(( $OPTIND -1 )) + local name="$1" + [ "${name:-x}" = "${name#*[!0-9a-zA-Z_]}" -a $# -eq 1 ] || + action_usage destroy # NOTREACHED + mustberoot_to_continue + jib_show "$name" | xargs -rn1 -I eiface ifconfig eiface destroy +} + +############################################################ MAIN + +# +# Command-line arguments +# +action="$1" +[ "$action" ] || usage # NOTREACHED + +# +# Validate action argument +# +if [ "$BASH_VERSION" ]; then + type="$( type -t "jib_$action" )" || usage # NOTREACHED +else + type="$( type "jib_$action" 2> /dev/null )" || usage # NOTREACHED +fi +case "$type" in +*function) + shift 1 # action + eval "jib_$action" \"\$@\" + ;; +*) usage # NOTREACHED +esac + +################################################################################ +# END +################################################################################ diff --git a/conf/system/include/13.0/makewhatis b/conf/system/include/13.0/makewhatis new file mode 100755 index 0000000000000000000000000000000000000000..83268ac112e3584fa2b89e866bf5bf8501c2ed31 GIT binary patch literal 442688 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%0ArYKT2iK)EwN6bBO<6nZA6P&BWw<&dsk2wfG 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
  • Ch+pvn$t0@uC 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 literal 0 HcmV?d00001 diff --git a/conf/system/include/13.0/setfib b/conf/system/include/13.0/setfib new file mode 100755 index 0000000000000000000000000000000000000000..a9d81be2b2ad022c1ac034058bd4dc4cdf6a3271 GIT binary patch literal 7368 zcmbtZeQaCR6~A`A+&17)1_avBH`cJ0DQ?`Bk(95v`PemcrO*;q(RHq4za(xQJ9>T& zDH~ljH*BvaT{OWo7}~0$Aq4zEL8?N_5{HB&6=REr#Htmvg4E7dn3hQ+O}A0+ocr!c zUms+vv=hC1?)ja2?z#8ebML#)`F?Yt#p!S?W0IWgKIVXW_7+7T4WeX>-ykc%8dx1$ z0p+c%ij{&~EHG2wz!Xs--sLoL;x1EUMZnSSMX7($sR#{maz`A;goGUJE|VgwCVz9e zDH3NDri^wa@MNW)=105-Cjvy=YKN-Y>x7!sdKFP2J}d`D+-{d!Y1-wsns&s0Zo=%e z>mU> z88X@8>KNMNla=e9mFrHN%WjC1zYVcyyV|FQH^d?}YOKSPOnAK56z7j^a6T=Xs&3uU z#9n^?`b8XdghO=^NB347bzel~0Lmr2LVe>Bc=Zza9e^wF*y%w4urE7>0r(=n=_T+d zm%xXXz@J_Me{Ko<`6ck-CGgQD@X00c_m;qMU9V%6jP?!XdzHX%Vf~E?)Xa57ejhy7 zv0K;?8@^BCLlURF+Ar~8Tl<$J{-O;(Ch=Eo{V?Vfe-1d=%o>%&iyDVTgY9td%j1c? zy6&+u?BipJ9TRdfo0anGLM~$e02#@Q3tBLkt>~vX%gQTS0r>%F@%VVNwfC1VeE9sn z*01wy(EHvzvM9?DHRpYbff zF?|UhH#{(z&*e3a^=b+C-3r+l&uxm+we}8z!5%Hq84q=#_FzVj7Qzv^ay~E{uoVU91I;w4m2hOBF9wHeo2v zZd61>a6K?iM3n!C;d&8K{v(cSMMU|JIISt_DE|?+o>P?nh+|F=xf&Hw#r3zYcZCJV zJRz#I;Fxa4Z*^% z1s&Sefz1LYg74ajC!CGflzuZ^`ee!B;-APQz&1_rR6w7?Bees}N^RUY=lhoLVPBi? zp&hM$<5D1Vzdt+`7+gE$Pft|v^u5olgZ8PifKfdJHGg{2)jUu*;PPim`9L97AZ z*(Pp)?xV&Zea5sm>pprCHE&>%UMSO+c~1>vUb>I^(vQ2UQ&s*tp6-Ej(239Z_vqYeh2`!6<6*o6pTvT%9}f)fE8_!axN+L==5O<{g(CeM z&E9$6C@$9Q8i=3cN;OX}IQ;IGsX+alUiCnx_*2nQdcmo^*JS*KXHqjf(>7h0nVrb} z0v308C&b$~f>HOcpWHSWFWWW%bDLZA=J%eF&TezBfxwSDu53X5c>QU;if4*H#0~-c zyg#0vsNCiIwr{uZJHFuVarc@g#xOoRTHnAiifQxp(|m9z%s9)9G4AH?@Ue?UsTE-A z+O<3XPe^Z6x&5d4*uRQqONU_Y`p4*X7{iqwF9^?hnBKYHBANZ4fAD~7oatz|4=oIiob zY3>uyaATZjnrHakC6l1itNQC$sxtQ$Y6i~qU7H4R84ovq!0X4q_bZ;c;Rv+KZ2KTR zRv1|Y-bALuh>i(&g;Y5YmkdCYruv0cN$$JgW!vE9$(*)02IJ4Ur$K--qoDLo&4hZj0{_VE�in`f^1 z>?@3oo`W_cx50Q$Km(S05K7TU?nfY6@?}TsN&H-0A|DqP^AQrtm3ya9fSjIijYG6h z{@Q1YGW5y{cfJK43)K@)V*VDYQSL%j{w$als!yPd1Io_``8AZCC})NI63TeW=U)}_ zQIv~OJ|g62Q7%DwNXS1$8DG))ejy)18IRI@kC1&sPX}JIZ(!$TO5Bfh@=_6W(8?h$;pG>9onsFX6@y;@z0K%5d6D*$y2G}7EwMR0mAlOMYKxQa|Y z1_p`x$Av)3mMVhNo#itjG4|=DLISJ9C5k|BA(0lOe6uMsJfx9UiSqLI8r{jt6-8+1 z4z*g!a|N@1F8jMAEji2$rHn`g>UN4#|5Ze?sz~N&bT5 z$0eVX{C&yKOFl1o>6aDZ?MBIOmt6h^p@d_hc&E~Z=StsSoeTZK_H=Z)|f^$wKbiaH+6K}b!W%M@TLxRJqtwR`&4a< z5(qRcc1&*nyKRkkQ!UV4>)Bdqu$IYdq9>xZr#f*;Zyfp%K0rOmF8r1WwKETV3#sr~ zd`};%oEukPwww#p3Zp6Bd2(U5Y$YuE0pYF9xt=5OGH9? zhqr3^phN5QEra5dLq%ec*tH_AmVoO23cV&k1a6CEV9# z@Q{7hsR(se0$fO!i{i^wQNwcy_deOvdEk-S zLd9yoQ=Zp5C91pOK+*o5)}FMLS!{{VY?d;DI3wpRNF zY2P4!4E$gAuiNbL>jkM*+S~ovW$^JDPj%|^M|IJbt3R!HF7f!l&l8)?1#&d(l QP8jkQX?V#BLfvlvADygz761SM literal 0 HcmV?d00001 diff --git a/conf/system/include/13.0/sum b/conf/system/include/13.0/sum new file mode 100755 index 0000000000000000000000000000000000000000..c379d8a5e69e0fde7a5691916a280b01968fd080 GIT binary patch literal 11688 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