Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 Mar 2015 20:47:56 -0800
From:      Craig Rodrigues <rodrigc@FreeBSD.org>
To:        Allan Jude <allanjude@freebsd.org>, Ahmed Kamal <email.ahmedkamal@googlemail.com>
Cc:        "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, "src-committers@freebsd.org" <src-committers@freebsd.org>
Subject:   Re: svn commit: r279571 - head/usr.sbin/freebsd-update
Message-ID:  <CAG=rPVcSmENTn7a0nwz%2B=3XeM9r3VLWrgB%2BSwHyghKUDdvPvbw@mail.gmail.com>
In-Reply-To: <201503032320.t23NKJjC059788@svn.freebsd.org>
References:  <201503032320.t23NKJjC059788@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Allan,

Ahmed Kamal is working on helping
with devops automation of some of the config management associated
with the jenkins.freebsd.org cluster.  Ahmed pointed out to me
that this enhancement to freebsd-update would facilitate using
freebsd-update in an automation environment.

Allan, thanks for working on this and taking it to completion!
Ahmed, thanks for working on this stuff and pointing out where FreeBSD
can be improved to help in automation environments!

--
Craig


On Tue, Mar 3, 2015 at 3:20 PM, Allan Jude <allanjude@freebsd.org> wrote:

> Author: allanjude (doc committer)
> Date: Tue Mar  3 23:20:18 2015
> New Revision: 279571
> URL: https://svnweb.freebsd.org/changeset/base/279571
>
> Log:
>   Add a new safetly belt to freebsd-update to prevent a user doing a minor
> update (-pX) while having an unfinished major upgrade (9.x to 9.y)
>   Safetly belt can be disabled with the -F flag
>
>   Additionally, add the --not-running-from-cron flag they bypasses the TTY
> requirement, and allows freebsd-update to be invoked by orchestration
> frameworks, scripts, or otherwise.
>
>   PR:           196760
>   Differential Revision:        https://reviews.freebsd.org/D1550
>   Reviewed by:  cperciva, delphij
>   Approved by:  bcr (mentor), rodrigc (src)
>   MFC after:    1 month
>   Relnotes:     yes
>   Sponsored by: ScaleEngine Inc.
>
> Modified:
>   head/usr.sbin/freebsd-update/freebsd-update.8
>   head/usr.sbin/freebsd-update/freebsd-update.sh
>
> Modified: head/usr.sbin/freebsd-update/freebsd-update.8
>
> ==============================================================================
> --- head/usr.sbin/freebsd-update/freebsd-update.8       Tue Mar  3
> 22:49:07 2015        (r279570)
> +++ head/usr.sbin/freebsd-update/freebsd-update.8       Tue Mar  3
> 23:20:18 2015        (r279571)
> @@ -25,7 +25,7 @@
>  .\"
>  .\" $FreeBSD$
>  .\"
> -.Dd July 14, 2010
> +.Dd March 2, 2015
>  .Dt FREEBSD-UPDATE 8
>  .Os FreeBSD
>  .Sh NAME
> @@ -36,10 +36,12 @@
>  .Op Fl b Ar basedir
>  .Op Fl d Ar workdir
>  .Op Fl f Ar conffile
> +.Op Fl F
>  .Op Fl k Ar KEY
>  .Op Fl r Ar newrelease
>  .Op Fl s Ar server
>  .Op Fl t Ar address
> +.Op Fl -not-running-from-cron
>  .Cm command ...
>  .Sh DESCRIPTION
>  The
> @@ -54,16 +56,16 @@ by the
>  .Fx
>  Release Engineering Team, e.g.,
>  .Fx
> -7.3-RELEASE and
> +9.3-RELEASE and
>  .Fx
> -8.0-RELEASE, but not
> +10.1-RELEASE, but not
>  .Fx
> -6.3-STABLE or
> +9.3-STABLE or
>  .Fx
> -9.0-CURRENT.
> +11-CURRENT.
>  .Sh OPTIONS
>  The following options are supported:
> -.Bl -tag -width "-f conffile"
> +.Bl -tag -width "-r newrelease"
>  .It Fl b Ar basedir
>  Operate on a system mounted at
>  .Ar basedir .
> @@ -81,6 +83,10 @@ Read configuration options from
>  .Ar conffile .
>  (default:
>  .Pa /etc/freebsd-update.conf )
> +.It Fl F
> +Force
> +.Nm Cm fetch
> +to proceed where it normally would not, such as an unfinished upgrade
>  .It Fl k Ar KEY
>  Trust an RSA key with SHA256 of
>  .Ar KEY .
> @@ -98,12 +104,21 @@ Mail output of
>  command, if any, to
>  .Ar address .
>  (default: root, or as given in the configuration file.)
> +.It Fl -not-running-from-cron
> +Force
> +.Nm Cm fetch
> +to proceed when there is no controlling tty.
> +This is for use by automated scripts and orchestration tools.
> +Please do not run
> +.Nm Cm fetch
> +from crontab or similar using this flag, see:
> +.Nm Cm cron
>  .El
>  .Sh COMMANDS
>  The
>  .Cm command
>  can be any one of the following:
> -.Bl -tag -width "-f conffile"
> +.Bl -tag -width "rollback"
>  .It Cm fetch
>  Based on the currently installed world and the configuration
>  options set, fetch all available binary updates.
>
> Modified: head/usr.sbin/freebsd-update/freebsd-update.sh
>
> ==============================================================================
> --- head/usr.sbin/freebsd-update/freebsd-update.sh      Tue Mar  3
> 22:49:07 2015        (r279570)
> +++ head/usr.sbin/freebsd-update/freebsd-update.sh      Tue Mar  3
> 23:20:18 2015        (r279571)
> @@ -43,12 +43,15 @@ Options:
>                    (default: /var/db/freebsd-update/)
>    -f conffile  -- Read configuration options from conffile
>                    (default: /etc/freebsd-update.conf)
> +  -F           -- Force a fetch operation to proceed
>    -k KEY       -- Trust an RSA key with SHA256 hash of KEY
>    -r release   -- Target for upgrade (e.g., 6.2-RELEASE)
>    -s server    -- Server from which to fetch updates
>                    (default: update.FreeBSD.org)
>    -t address   -- Mail output of cron command, if any, to address
>                    (default: root)
> +  --not-running-from-cron
> +               -- Run without a tty, for use by automated tools
>  Commands:
>    fetch        -- Fetch updates from server
>    cron         -- Sleep rand(3600) seconds, fetch updates, and send an
> @@ -399,6 +402,12 @@ init_params () {
>
>         # No commands specified yet
>         COMMANDS=""
> +
> +       # Force fetch to proceed
> +       FORCEFETCH=0
> +
> +       # Run without a TTY
> +       NOTTYOK=0
>  }
>
>  # Parse the command line
> @@ -411,6 +420,12 @@ parse_cmdline () {
>                         if [ ! -z "${CONFFILE}" ]; then usage; fi
>                         shift; CONFFILE="$1"
>                         ;;
> +               -F)
> +                       FORCEFETCH=1
> +                       ;;
> +               --not-running-from-cron)
> +                       NOTTYOK=1
> +                       ;;
>
>                 # Configuration file equivalents
>                 -b)
> @@ -673,6 +688,14 @@ fetch_check_params () {
>                 echo "(Did you mean 'upgrade' instead?)"
>                 exit 1
>         fi
> +
> +       # Check that we have updates ready to install
> +       if [ -f ${BDHASH}-install/kerneldone && $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.
> @@ -3197,7 +3220,7 @@ get_params () {
>  # Fetch command.  Make sure that we're being called
>  # interactively, then run fetch_check_params and fetch_run
>  cmd_fetch () {
> -       if [ ! -t 0 ]; then
> +       if [ ! -t 0 && $NOTTYOK -eq 0 ]; then
>                 echo -n "`basename $0` fetch should not "
>                 echo "be run non-interactively."
>                 echo "Run `basename $0` cron instead."
>
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAG=rPVcSmENTn7a0nwz%2B=3XeM9r3VLWrgB%2BSwHyghKUDdvPvbw>