"Roger Marquis" <marq...@roble.com> writes:
> "Dag-Erling Smørgrav" <d...@des.no> writes:
> >  I do it all the time:
> > $ sudo env UNAME_r=X.Y-RELEASE freebsd-update fetch install
> Not sure if using a jail to test is relevant but this never updates (my)
> binaries to the specified RELEASE/RELENG, only to the current kernel's patch
> level.

No, it updates everything.  Like I said, I do this all the time,
including with jails that run a different release than the host system.

> Then there's the issue of specifying -RELEASE to mean -RELENG.

There is no such thing as -RELENG.  See sys/conf/newvers.sh.

> > Actually, you want to do this from *outside* the jail, partly out of
> > healthy paranoia and partly so freebsd-update will re-use previously
> > downloaded indexes and patches
> Updates to non-jailed environments are the preferred method to be sure but
> patching and testing base updates in a jail can be more convenient.

You missed my point.  You can run freebsd-update outside the jail to
update the contents of the jail.  See the attached shell script.

DES
-- 
Dag-Erling Smørgrav - d...@des.no

#!/bin/sh
#
# $Id$
#

progname="$(basename $0)"

#
# Print an informational message.
#
info() {
        echo "$@"
}

#
# Print an error message to stderr and exit.
#
error() {
        echo "$progname: $@" >&2
        exit 1
}

#
# Ask a question and wait for an answer.  Keep asking until the user
# answers yes or no.
#
# Usage example:
#
#     if yesno foo ; then echo yes ; else echo no ; fi
#
yesno() {
        while :; do
                echo -n "$@ (yes/no) "
                read answer
                case $answer in
                [Yy]|[Yy][Ee][Ss])
                        return 0
                        ;;
                [Nn]|[Nn][Oo])
                        return 1
                        ;;
                esac
        done
}

#
# Print a usage string and exit.
#
usage() {
        echo "usage: $progname jailname [[from-release] to-release]" >&2
        exit 1
}

main() {
        case $# in
        1)
                jailname="$1"
                ;;
        2)
                jailname="$1"
                fromrel="$(uname -r)"
                torel="$2"
                ;;
        3)
                jailname="$1"
                fromrel="$2"
                torel="$3"
                ;;
        *)
                usage
                ;;
        esac


        jailroot="/jail/$jailname"
        basehash="$(echo $jailroot | sha256 -q)"
        statedir="/var/db/freebsd-update/"
        install_link="$statedir/$basehash-install"
        conffile="$jailroot/etc/freebsd-update.conf"
        if [ -n "$torel" ] ; then
                fetch="upgrade"
                relarg="-r $torel"
                pre_uname="UNAME_r=$fromrel"
                post_uname="UNAME_r=$torel"
        else
                fetch="fetch"
        fi

        if [ -n "$torel" ] ; then
                if [ -n "${QUICK_UPGRADE+yes}" ] ; then
                        echo "Upgrading $jailroot from $fromrel to $torel"
                else
                        yesno "Upgrade $jailroot from $fromrel to $torel?"
                fi
        else
                if [ -n "${QUICK_UPGRADE+yes}" ] ; then
                        echo "Upgrading $jailroot"
                else
                        yesno "Update $jailroot?"
                fi
        fi || exit 0

        if [ -n "${QUICK_UPGRADE+yes}" ] ; then
                export PAGER=cat
        fi

        set -e
        env $pre_uname freebsd-update -b "$jailroot" -d "$statedir" -f 
"$conffile" $relarg $fetch
        [ -d "$install_link" ] || exit 1
        env $pre_uname freebsd-update -b "$jailroot" -d "$statedir" -f 
"$conffile" $relarg install
        if [ -n "${QUICK_UPGRADE+yes}" ] ; then
                echo "Quick upgrade, not restarting $jailname"
        elif yesno "Restart $jailname before proceeding?" ; then
                /etc/rc.d/jail restart $jailname
        fi
        [ -d "$install_link" ] || exit 0
        env $post_uname freebsd-update -b "$jailroot" -d "$statedir" -f 
"$conffile" $relarg install
        [ -d "$install_link" ] || exit 0
        env $post_uname freebsd-update -b "$jailroot" -d "$statedir" -f 
"$conffile" $relarg install
}

main "$@"
_______________________________________________
freebsd-security@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-security
To unsubscribe, send any mail to "freebsd-security-unsubscr...@freebsd.org"

Reply via email to