On Sun, Oct 08, 2017 at 09:56:15AM +0000, Robert Peichaer wrote:
> Up to now, the upgrade procedure from one to the next release meant
> that you had to manually download and verify the new ramdisk kernel.
> 
> What about if you just needed to boot into the existing bsd.rd and
> it would support downloading and verifying the bsd.rd of the next
> release?
> 
> This diff changes the installer script to support such a scenario.
> 
> 1) Boot the existing bsd.rd and choose (U)pgrade
> 2) Enter the "Server directory" of the new release
>    The installer then offers just the bsd.rd
>    The on-disk signify key of the new release is used for verify it
> 3) Reboot into the new bsd.rd and do the upgrade
> 
> 
> An important assumption for this to work properly is:
> 
>    Upgrades are only supported from one release to the release
>    immediately following it. [1]
> 
> 
> It would look like this for the 6.2 to 6.3 upgrade situation.
> (The version numbers are obviously faked)
> 
>   Let's upgrade the sets!
>   Location of sets? (cd0 disk http or 'done') [http]
>   HTTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none]
>   HTTP Server? (hostname, list#, 'done' or '?') [ftp.hostserver.de]
>   Server directory? [pub/OpenBSD/6.2/amd64] pub/OpenBSD/6.3/amd64
>   Unable to get a verified list of distribution sets.
>   
>   Select sets by entering a set name, a file name pattern or 'all'. De-select
>   sets by prepending a '-', e.g.: '-game*'. Selected sets are labelled '[X]'.
>       [X] bsd.rd
>   Set name(s)? (or 'abort' or 'done') [done]
>   Get/Verify SHA256.sig   100% |**************************|  2152       00:00
>   Signature Verified
>   Get/Verify bsd.rd       100% |**************************|  9565 KB    00:14
>   Installing bsd.rd       100% |**************************|  9565 KB    00:00
>   Location of sets? (cd0 disk http or 'done') [done]
>   Making all device nodes...done.
>   
>   CONGRATULATIONS! Your OpenBSD upgrade has been successfully completed!
>   To boot the new system, enter 'reboot' at the command prompt.
> 
> 
> Here's the diff and below is a more detailed description.

Well, here's a diff, that actually works.


Index: install.sub
===================================================================
RCS file: /cvs/src/distrib/miniroot/install.sub,v
retrieving revision 1.1036
diff -u -p -p -u -r1.1036 install.sub
--- install.sub 4 Oct 2017 18:19:33 -0000       1.1036
+++ install.sub 9 Oct 2017 17:41:59 -0000
@@ -1330,6 +1330,15 @@ sane_install() {
 #
 select_sets() {
        local _avail=$1 _selected=$2 _f _action _col=$COLUMNS
+       local _bsd_rd _no_sets=true
+
+       if [[ $MODE == upgrade ]]; then
+               for _f in $_avail; do
+                       [[ $_f != bsd* ]] && _no_sets=false
+                       [[ $_f == bsd.rd* ]] && _bsd_rd=$_f
+               done
+               $_no_sets && UPGRADE_BSDRD=true _avail=$_bsd_rd 
_selected=$_bsd_rd
+       fi
 
        # account for 4 spaces added to the sets list
        let COLUMNS=_col-8
@@ -1516,6 +1525,9 @@ install_files() {
                ! $_unpriv ftp -D "$_t" -Vmo - "$_src/SHA256.sig" 
>"$_cfile.sig" &&
                        _issue="Cannot fetch SHA256.sig" && break
 
+               $UPGRADE_BSDRD &&
+                       PUB_KEY=/mnt/etc/signify/openbsd-$((VERSION + 
1))-base.pub
+
                # Verify signature file with public keys.
                ! unpriv -f "$_cfile" \
                        signify -Vep $PUB_KEY -x "$_cfile.sig" -m "$_cfile" &&
@@ -1576,7 +1588,9 @@ install_files() {
                                tar -zxphf - -C /mnt
                        fi
                        ;;
-               *)      $_unpriv ftp -D Installing -Vmo - "$_fsrc" >"/mnt/$_f"
+               *)      $UPGRADE_BSDRD && [[ $_f == bsd.rd* ]] &&
+                               cp /mnt/$_f /mnt/$_f.old.$VERSION
+                       $_unpriv ftp -D Installing -Vmo - "$_fsrc" >"/mnt/$_f"
                        ;;
                esac
                if (($?)); then
@@ -1587,6 +1601,7 @@ install_files() {
                        fi
                else
                        DEFAULTSETS=$(rmel $_f $DEFAULTSETS)
+                       $UPGRADE_BSDRD && DEFAULTSETS=
                fi
                [[ -d $_tmpsrc ]] && rm -f "$_tmpsrc/$_f"
        done
@@ -3139,6 +3154,7 @@ PUB_KEY=/etc/signify/openbsd-${VERSION}-
 ROOTDEV=
 ROOTDISK=
 SETDIR="$VNAME/$ARCH"
+UPGRADE_BSDRD=false
 V4_DHCPCONF=false
 V6_AUTOCONF=false
 WLANLIST=/tmp/i/wlanlist
===================================================================
Stats: --- 1 lines 60 chars
Stats: +++ 17 lines 525 chars
Stats: 16 lines
Stats: 465 chars

-- 
-=[rpe]=-

Reply via email to