Proposal to enhance boot path selections

Paul Goyette <[email protected]> Sat, 10 May 2025 22:54:45 -0700 (PDT)
Newsgroups gmane.os.netbsd.ports.x86-64,gmane.os.netbsd.devel.kernel,gmane.os.netbsd.ports.i386
Message-ID <[email protected]>
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--0-1382393930-1746928291=:17718
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; format=flowed
Content-ID: <[email protected]>

It has been pointed out to me (privately) that the recent changes I
made to the biosboot and efiboot code may introduce some confusion
regarding which paths are searched for the boot code.  Particularly,
prior to the recent changes one might well use a "naked" boot command
for a primary normal boot, and use /onetbsd (or /netbsd.old or
anything with a leading slash) to request booting from a previous
kernel.

With the recent changes, specifying /onetbsd will only look for a
kernel in /onetbsd and /onetbsd.gz (both being regular files);  it
will not look in /onetbsd/kernel or /onetbsd/kernel.gz as might be
expected.

If one is accustomed to booting with the leading slash it could be
disconcerting (or worse) to not having ingrained muscle-memory boot
the old kernel as expected.

So, I propose that the attached patches be made to the path selection
code.  Simply stated, a leading slash '/' character in the specified
boot name will no longer prevent treating the boot name as a kernel
directory name.  Other embedded slash characters (and multiple leading
slashes) will still prevent using the specified name as a kernel
directory name.  So, for example, ``boot /old/netbsd'' will _not_
attempt to boot /old/netbsd/kernel or /old/netbsd/kernel.gz (with
or without the leading slash.)

I've tested this in qemu for both i38 and amd64 biosboot, and tested
on bare-metal amd64[*] efiboot, and it works well.  The changes are
very localized and affect only the command_boot() code, and that code
is affected only when an explicit argument is given to the boot
command.  A "naked" boot command is not affected by these changes.

[*] For the bare-metal testing I made sure to have a second bootable
media, just in case something broke.  I did not have to resort to the
backup.  :-)

+---------------------+--------------------------+----------------------+
| Paul Goyette (.sig) | PGP Key fingerprint:     | E-mail addresses:    |
| (Retired)           | 1B11 1849 721C 56C8 F63A | [email protected]    |
| Software Developer  | 6E2E 05FD 15CE 9F2D 5102 | [email protected]  |
| & Network Engineer  |                          | [email protected] |
+---------------------+--------------------------+----------------------+
--0-1382393930-1746928291=:17718
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME=BOOTNAMES.patch
Content-Transfer-Encoding: BASE64
Content-ID: <[email protected]>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME=BOOTNAMES.patch

SW5kZXg6IGJvb3QvYm9vdDIuYw0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
UkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvYXJjaC9pMzg2L3N0YW5kL2Jv
b3QvYm9vdDIuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODYNCmRpZmYg
LXUgLXAgLXIxLjg2IGJvb3QyLmMNCi0tLSBib290L2Jvb3QyLmMJNiBNYXkg
MjAyNSAxODoxNjoxMiAtMDAwMAkxLjg2DQorKysgYm9vdC9ib290Mi5jCTEx
IE1heSAyMDI1IDA1OjAxOjQzIC0wMDAwDQpAQCAtNDg5LDE0ICs0ODksMTgg
QEAgY29tbWFuZF9ib290KGNoYXIgKmFyZykNCiAJaWYgKCFwYXJzZWJvb3Qo
YXJnLCAmZmlsZW5hbWUsICZob3d0bykpDQogCQlyZXR1cm47DQogDQotCWlm
IChmaWxlbmFtZSAhPSBOVUxMKSB7DQorCWlmIChmaWxlbmFtZSAhPSBOVUxM
ICYmIGZpbGVuYW1lWzBdICE9ICdcMCcpIHsNCiAJCS8qIHRyeSBvbGQgbG9j
YXRpb25zIGZpcnN0IHRvIGFzc2lzdCBhdGYgdGVzdCBiZWRzICovDQogCQlz
bnByaW50ZihwYXRoLCBzaXplb2YocGF0aCkgLSA0LCAiJXMiLCBmaWxlbmFt
ZSk7DQogCQlib290aXQyKHBhdGgsIHNpemVvZihwYXRoKSwgaG93dG8pOw0K
IA0KLQkJLyogbm93IHRyZWF0IGdpdmVuIGZpbGVuYW1lIGFzIGEgZGlyZWN0
b3J5ICovDQotCQlpZiAoc3RyY2hyKGZpbGVuYW1lLCAnLycpID09IE5VTEwp
IHsNCi0JCQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCkgLSA0LCAiJXMv
a2VybmVsIiwgZmlsZW5hbWUpOw0KKwkJLyoNCisJCSAqIG5vdyB0cmVhdCBn
aXZlbiBmaWxlbmFtZSBhcyBhIGRpcmVjdG9yeSB1bmxlc3MgdGhlcmUNCisJ
CSAqIGlzIGFscmVhZHkgYW4gZW1iZWRkZWQgcGF0aC1uYW1lIHNlcGFyYXRv
ciAnLycgcHJlc2VudA0KKwkJICovDQorCQlpZiAoc3RyY2hyKGZpbGVuYW1l
ICsgMSwgJy8nKSA9PSBOVUxMKSB7DQorCQkJc25wcmludGYocGF0aCwgc2l6
ZW9mKHBhdGgpIC0gNCwgIiVzL2tlcm5lbCIsDQorCQkJICAgIGZpbGVuYW1l
KTsNCiAJCQlib290aXQyKHBhdGgsIHNpemVvZihwYXRoKSwgaG93dG8pOw0K
IAkJfQ0KIAl9IGVsc2Ugew0KSW5kZXg6IGVmaWJvb3QvYm9vdC5jDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5
cy9hcmNoL2kzODYvc3RhbmQvZWZpYm9vdC9ib290LmMsdg0KcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjI5DQpkaWZmIC11IC1wIC1yMS4yOSBib290LmMNCi0t
LSBlZmlib290L2Jvb3QuYwkzMCBBcHIgMjAyNSAwNjoyNDo0NyAtMDAwMAkx
LjI5DQorKysgZWZpYm9vdC9ib290LmMJMTEgTWF5IDIwMjUgMDU6MDE6NDMg
LTAwMDANCkBAIC00NjQsMTQgKzQ2NCwxOCBAQCBjb21tYW5kX2Jvb3QoY2hh
ciAqYXJnKQ0KIAlpZiAoIXBhcnNlYm9vdChhcmcsICZmaWxlbmFtZSwgJmhv
d3RvKSkNCiAJCXJldHVybjsNCiANCi0JaWYgKGZpbGVuYW1lICE9IE5VTEwp
IHsNCisJaWYgKGZpbGVuYW1lICE9IE5VTEwgJiYgZmlsZW5hbWVbMF0gIT0g
J1wwJykgew0KIAkJLyogdHJ5IG9sZCBsb2NhdGlvbnMgZmlyc3QgdG8gYXBw
ZWFzZSBhdGYgdGVzdCBiZWRzICovDQogCQlzbnByaW50ZihwYXRoLCBzaXpl
b2YocGF0aCkgLSA0LCAiJXMiLCBmaWxlbmFtZSk7DQogCQlib290aXQyKHBh
dGgsIHNpemVvZihwYXRoKSwgaG93dG8pOw0KIA0KLQkJLyogbm93IHRyZWF0
IGdpdmVuIGZpbGVuYW1lIGFzIGEgZGlyZWN0b3J5IG5hbWUgKi8NCi0JCWlm
IChzdHJjaHIoZmlsZW5hbWUsICcvJykgPT0gTlVMTCkgew0KLQkJCXNucHJp
bnRmKHBhdGgsIHNpemVvZihwYXRoKSAtIDQsICIlcy9rZXJuZWwiLCBmaWxl
bmFtZSk7DQorCQkvKg0KKwkJICogbm93IHRyZWF0IGdpdmVuIGZpbGVuYW1l
IGFzIGEgZGlyZWN0b3J5IHVubGVzcyB0aGVyZQ0KKwkJICogaXMgYWxyZWFk
eSBhbiBlbWJlZGRlZCBwYXRoLW5hbWUgc2VwYXJhdG9yICcvJyBwcmVzZW50
DQorCQkgKi8NCisJCWlmIChzdHJjaHIoZmlsZW5hbWUgKyAxLCAnLycpID09
IE5VTEwpIHsNCisJCQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCkgLSA0
LCAiJXMva2VybmVsIiwNCisJCQkgICAgZmlsZW5hbWUpOw0KIAkJCWJvb3Rp
dDIocGF0aCwgc2l6ZW9mKHBhdGgpLCBob3d0byk7DQogCQl9DQogCX0gZWxz
ZSB7DQo=

--0-1382393930-1746928291=:17718--