Re: Good practices with bectl

From: Renato Botelho <garga_at_FreeBSD.org>
Date: Wed, 21 Sep 2022 10:56:06 UTC
On 20/09/22 19:19, Alan Somers wrote:
> On Tue, Sep 20, 2022 at 4:14 PM Nuno Teixeira <eduardo@freebsd.org> wrote:
>>
>> Hello to all,
>>
>> I will use becl for the first time for current upgrades.
>> Just to check that I'm thinking correctly:
>>
>> Create a test environment for upgrade:
>>> bectl create -r test (should I use '-r'?)
>> Activate test:
>>> bectl activate test
>>> reboot
>> ...
>>> upgrade OS on test
>>> reboot
>> ...
>> if a problem happens, reboot default from BE loader
>> ---
>> if everything fine destroy default and rename test to default
>>> bectl destroy -o default
>>> bectl rename test default
>> repeat on next upgrade
>>
>> Don't know if a faster way exists with chroot or bectl jail...
>>
>> Any hints appreciated.
>>
>> Thanks,
>> --
>> Nuno Teixeira
>> FreeBSD Committer (ports)
> 
> I don't think you need to use "-r".  Also, you're forgetting one of
> the best things about boot environments: you can upgrade them even
> when not booted into them.  That's faster than upgrading the running
> BE.  Here is the procedure I use:
> 
> RELEASE=Whatever
> sudo bectl create ${RELEASE}
> sudo bectl mount ${RELEASE}
> BASEDIR=/tmp/be_mount.XXXX    # Use mount point returned by bectl mount
> sudo freebsd-update -b ${BASEDIR} -d ${BASEDIR}/var/db/freebsd-update
> upgrade -r ${RELEASE}
> sudo freebsd-update -b ${BASEDIR} -d ${BASEDIR}/var/db/freebsd-update install
> # Ignore admonitions to reboot, since we're using a boot environment
> sudo freebsd-update -b ${BASEDIR} -d ${BASEDIR}/var/db/freebsd-update install
> sudo bectl activate ${RELEASE}

I like to use `sudo bectl activate -t ${RELEASE}`, it activates new 
partition to be ROOT only for the next boot.  If something goes wrong, 
you just need to power cycle the machine and it will boot on previous 
partition.

After a success boot you must run `sudo bectl activate RELEASE` again to 
make it permanent.

> sudo reboot
> 
> This general procedure works just as well if you're upgrading from source, too.
> 
> sudo make DESTDIR=${BASEDIR} installworld
> sudo mergemaster -m $PWD -D $BASEDIR -U
> 
> -Alan
> 
>