Summary: | bsdinstall breaking auto install after f66a8328c | ||
---|---|---|---|
Product: | Base System | Reporter: | Andrey Fesenko <andrey> |
Component: | bin | Assignee: | John Baldwin <jhb> |
Status: | Closed FIXED | ||
Severity: | Affects Some People | CC: | asiciliano, emaste, grahamperrin, jhb, ladar, mnowak, pierre |
Priority: | --- | Keywords: | install, regression |
Version: | 14.0-STABLE | ||
Hardware: | Any | ||
OS: | Any | ||
Bug Depends on: | |||
Bug Blocks: | 271607 |
Description
Andrey Fesenko
2023-09-11 16:34:22 UTC
Can you provide the installerconfig file? (In reply to John Baldwin from comment #1) may use simpliest ``` export nonInteractive="YES" HOSTNAME="freebsd" DISTRIBUTIONS="base.txz kernel.txz" PARTITIONS="vtbd0 GPT { auto freebsd-ufs / }" #!/bin/sh -x gpart show mount ``` Interesting, zfs install work https://raw.githubusercontent.com/chef/bento/main/packer_templates/http/freebsd/installerconfig We likely have the same issue with FreeBSD 14.0 RC1 at https://gitlab.isc.org/isc-projects/images/-/merge_requests/279. The installer config is: ``` PARTITIONS="vtbd0" #!/bin/sh -e echo "vagrant" | pw usermod root -h 0 chsh -s /bin/sh root sed -i -e "s|^#\(PermitRootLogin\) .*|\1 yes|" /etc/ssh/sshd_config sysrc -f /boot/loader.conf autoboot_delay="-1" sysrc -f /boot/loader.conf console=comconsole sysrc hostname="freebsd.fqdn" sysrc ifconfig_DEFAULT="DHCP" sysrc sshd_enable="YES" reboot ``` FreeBSD 13.2 and 12.4 install fine. Humm, I am not able to reproduce, at least with invoking bsdinstall directly. I first wrote a test program with both parsers: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> static int parse_disk_config(const char *token) { printf("token: \"%s\"\n", token); return (0); } static int old_editor(int argc, const char **argv) { char *token; int i, error = 0, len = 0; for (i = 1; i < argc; i++) len += strlen(argv[i]) + 1; char inputbuf[len], *input = inputbuf; strcpy(input, argv[1]); for (i = 2; i < argc; i++) { strcat(input, " "); strcat(input, argv[i]); } while ((token = strsep(&input, ";")) != NULL) { error = parse_disk_config(token); if (error != 0) return (error); } return (0); } static int new_editor(int argc, const char **argv) { FILE *fp; char *input, *token; size_t len; int i, error = 0; fp = open_memstream(&input, &len); fputs(argv[1], fp); for (i = 2; i < argc; i++) { fprintf(fp, " %s", argv[i]); } fclose(fp); while ((token = strsep(&input, ";")) != NULL) { error = parse_disk_config(token); if (error != 0) { free(input); return (error); } } free(input); return (0); } int main(int ac, const char **av) { printf("old:\n"); old_editor(ac, av); printf("new:\n"); new_editor(ac, av); return (0); } ``` And it invokes parse_disk_config with the same string in both cases: ``` > ./test "vtbd0 GPT { auto freebsd-ufs / }" old: token: "vtbd0 GPT { auto freebsd-ufs / }" new: token: "vtbd0 GPT { auto freebsd-ufs / }" > ./test vtbd0 GPT { auto freebsd-ufs / } old: token: "vtbd0 GPT { auto freebsd-ufs / }" new: token: "vtbd0 GPT { auto freebsd-ufs / }" ``` I then ran this in a VM: ``` root@head:~ # mdconfig -a -t malloc -s 1g md0 root@head:~ # /usr/libexec/bsdinstall/scriptedpart md0 GPT { auto freebsd-ufs / } root@head:~ # gpart show md0 => 40 2097072 md0 GPT (1.0G) 40 1024 1 freebsd-boot (512K) 1064 2096048 2 freebsd-ufs (1.0G) ``` I also tried running `bsdinstall scriptedpart md0 GPT { auto freebsd-ufs / }` and it worked just as well. Re: ZFS, ZFS doesn't use "scriptedpart": From usr.sbin/bsdinstall/scripts/script: ``` # Make partitions rm -f $PATH_FSTAB touch $PATH_FSTAB if [ "$ZFSBOOT_DISKS" ]; then bsdinstall zfsboot else bsdinstall scriptedpart "$PARTITIONS" fi bsdinstall mount ``` I also tried this simple config file: ``` export nonInteractive="YES" PARTITIONS="md0" #!/bin/sh gpart show mount ``` with `bsdinstall script ./testinstall` and aborted it when it asked for a mirror to download the distributions from. Afterwards, from gpart show (vtbd0 in this case is the real root of the VM): ``` root@head:~ # gpart show => 34 75497398 vtbd0 GPT (36G) 34 128 1 freebsd-boot (64K) 162 72560446 2 freebsd-ufs (35G) 72560608 2936816 3 freebsd-swap (1.4G) 75497424 8 - free - (4.0K) => 63 2097089 md0 MBR (1.0G) 63 1 - free - (512B) 64 2097088 1 freebsd (1.0G) => 0 2097088 md0s1 BSD (1.0G) 0 1990656 1 freebsd-ufs (972M) 1990656 104448 2 freebsd-swap (51M) 2095104 1984 - free - (992K) ``` This was all tested on commit edd2a9b887864d07ac5af480b4b8f35cb76443f6 (HEAD -> main, origin/main) Author: John Baldwin <jhb@FreeBSD.org> Date: Fri Oct 13 12:26:58 2023 -0700 bhyve ahci: Replace WPRINTF with EPRINTLN Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D42181 I'll see if I can't reproduce with an install image. So the bug is not in the commit in question, rather the bug is that /etc/fstab isn't getting updated because of a later commit I made. Specifically, I got the sense of a check wrong here: https://github.com/bsdjhb/freebsd/commit/23099099196548550461ba427dcf09dcfb01878d#diff-d15da43b9961bf230557a7ae9bab338b880f066ac3db7728498feff3eb64973aR220 As a result, when geom_getmesh() succeeded, we weren't seeing error != 0 and thus didn't call apply_changes. Fix at https://reviews.freebsd.org/D42236 With this I now get a non-empty fstab after running `bsdinstall scriptedpart` manually: ``` root@head:/ # bsdinstall scriptedpart md0 GPT { auto freebsd-ufs / } ... root@head:/ # cat /tmp/bsdinstall_etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/md0p2 / ufs rw 1 1 ``` A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=5307bbcc038f878b4b3714f03a2c824a0caeba4f commit 5307bbcc038f878b4b3714f03a2c824a0caeba4f Author: John Baldwin <jhb@FreeBSD.org> AuthorDate: 2023-10-16 22:13:31 +0000 Commit: John Baldwin <jhb@FreeBSD.org> CommitDate: 2023-10-16 22:13:31 +0000 bsdinstall partedit: Apply changes from scripted installs I got a check inverted in a previous cleanup commit and as a result partedit was only applying GEOM changes (and generating an /etc/fstab) if it got an error reading the current GEOM mesh. Instead, it needed to do those actions if it succeeded in reading the mesh. The lack of /etc/fstab meant that bsdinstall mount didn't mount anything in a scripted install. PR: 273723 Reported by: Andrey Fesenko <andrey@bsdnir.info> Reported by: Michal Nowak <mnowak@startmail.com> Reviewed by: cognet, brooks Fixes: 230990991965 bsdinstall: Handle errors from geom_gettree. MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D42236 usr.sbin/bsdinstall/partedit/partedit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) *** Bug 274223 has been marked as a duplicate of this bug. *** A commit in branch stable/14 references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=bfbb28f3b1b659805364eea580033b4b3afcc0eb commit bfbb28f3b1b659805364eea580033b4b3afcc0eb Author: John Baldwin <jhb@FreeBSD.org> AuthorDate: 2023-10-16 22:13:31 +0000 Commit: John Baldwin <jhb@FreeBSD.org> CommitDate: 2023-10-19 18:59:57 +0000 bsdinstall partedit: Apply changes from scripted installs I got a check inverted in a previous cleanup commit and as a result partedit was only applying GEOM changes (and generating an /etc/fstab) if it got an error reading the current GEOM mesh. Instead, it needed to do those actions if it succeeded in reading the mesh. The lack of /etc/fstab meant that bsdinstall mount didn't mount anything in a scripted install. PR: 273723 Reported by: Andrey Fesenko <andrey@bsdnir.info> Reported by: Michal Nowak <mnowak@startmail.com> Reviewed by: cognet, brooks Fixes: 230990991965 bsdinstall: Handle errors from geom_gettree. MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D42236 (cherry picked from commit 5307bbcc038f878b4b3714f03a2c824a0caeba4f) usr.sbin/bsdinstall/partedit/partedit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) A commit in branch releng/14.0 references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=929e4723c3f5e66dd98fe3f342c6ec393c8eb9a5 commit 929e4723c3f5e66dd98fe3f342c6ec393c8eb9a5 Author: John Baldwin <jhb@FreeBSD.org> AuthorDate: 2023-10-16 22:13:31 +0000 Commit: John Baldwin <jhb@FreeBSD.org> CommitDate: 2023-10-19 20:42:35 +0000 bsdinstall partedit: Apply changes from scripted installs I got a check inverted in a previous cleanup commit and as a result partedit was only applying GEOM changes (and generating an /etc/fstab) if it got an error reading the current GEOM mesh. Instead, it needed to do those actions if it succeeded in reading the mesh. The lack of /etc/fstab meant that bsdinstall mount didn't mount anything in a scripted install. PR: 273723 Reported by: Andrey Fesenko <andrey@bsdnir.info> Reported by: Michal Nowak <mnowak@startmail.com> Reviewed by: cognet, brooks Fixes: 230990991965 bsdinstall: Handle errors from geom_gettree. MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D42236 (cherry picked from commit 5307bbcc038f878b4b3714f03a2c824a0caeba4f) (cherry picked from commit bfbb28f3b1b659805364eea580033b4b3afcc0eb) Approved by: re (gjb) usr.sbin/bsdinstall/partedit/partedit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) A commit in branch stable/13 references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=c81bdb4998683aa6b795b6e1cb294be6f493329d commit c81bdb4998683aa6b795b6e1cb294be6f493329d Author: John Baldwin <jhb@FreeBSD.org> AuthorDate: 2023-10-16 22:13:31 +0000 Commit: John Baldwin <jhb@FreeBSD.org> CommitDate: 2024-01-04 23:43:33 +0000 bsdinstall partedit: Apply changes from scripted installs I got a check inverted in a previous cleanup commit and as a result partedit was only applying GEOM changes (and generating an /etc/fstab) if it got an error reading the current GEOM mesh. Instead, it needed to do those actions if it succeeded in reading the mesh. The lack of /etc/fstab meant that bsdinstall mount didn't mount anything in a scripted install. PR: 273723 Reported by: Andrey Fesenko <andrey@bsdnir.info> Reported by: Michal Nowak <mnowak@startmail.com> Reviewed by: cognet, brooks Fixes: 230990991965 bsdinstall: Handle errors from geom_gettree. MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D42236 (cherry picked from commit 5307bbcc038f878b4b3714f03a2c824a0caeba4f) usr.sbin/bsdinstall/partedit/partedit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) |