* gnu/installer/final.scm (call-with-mnt-container): New procedure,
(install-system): use it instead of call-with-container, to make sure that the
container is not jailed.
When the store overlay is mounted, other processes such as kmscon, udev
and guix-daemon may open files from the store, preventing the
underlying install support from being umounted. See:
https://lists.gnu.org/archive/html/guix-devel/2018-12/msg00161.html.
To avoid this situation, mount the store overlay inside a container,
and run the installation from within that container.
* gnu/build/shepherd.scm (fork+exec-command/container): New procedure.
* gnu/services/base.scm (guix-shepherd-service): Support an optional PID
argument passed to the "start" method. If that argument is passed, ensure that
guix-daemon enters the given PID MNT namespace by using
fork+exec-command/container procedure.
* gnu/installer/final.scm (umount-cow-store): Remove it,
(install-system): run the installation from within a container.
* gnu/installer/newt/final.scm (run-install-shell): Remove the display hack.
If a device contains an active logical volume, BLKRRPART will report that the
device is busy. This will cause this device to be filtered by
"non-install-devices" procedure, which is not desired.
Make sure to deactivate all logical volumes before device probing.
Fixes <https://issues.guix.gnu.org/42683>.
* gnu/installer.scm (installer-program): Add lvm2-static to the inputs.
* gnu/installer/parted.scm (remove-logical-devices): New procedure,
(init-parted): call it.
This adds support for creating and editing NTFS partitions. It is however not
possible yet to create root NTFS partitions, as overlaying on top of a fuse
partition does not seem supported.
* gnu/installer.scm (installer-program): Add "ntfs-3g" to the inputs.
* gnu/installer/parted.scm (user-fs-type-name, user-fs-type->mount-type,
partition-filesystem-user-type, create-ntfs-file-system,
format-user-partitions): Add NTFS support.
* gnu/installer/newt/partition.scm (run-fs-type-page): Add NTFS support.
When debugging the installation tests, it can be very handy to be able to read
"guix system init" command output.
* gnu/installer/final.scm (install-system): Dump installation command output
to the console when running the installation tests.
When debugging the installation tests, it can be very handy to be able to read
"run-command" output, for instance when executing "guix system init".
Introduce a new "invoke-with-log" procedure that is able to log a command
standard and error outputs to the syslog. Use it, only when running the
installation tests, to dump "run-command" output.
* gnu/installer/utils.scm (open-pipe-with-stderr, invoke-with-log): New
procedures,
(invoke-log-port): new variable,
(run-command): move to the end of the file and use invoke-with-log when
running the installation tests.
Issue reported by SergioBG here:
https://lists.gnu.org/archive/html/bug-guix/2020-04/msg00432.html.
Due to default buffering mode, the installer was reading from the pipe without
having actually written a command before.
* gnu/installer/connman.scm (connman-connect-with-auth): Set pipe buffering
mode to 'line.
According to glibc manual, locale are under the following form:
language[_territory[.codeset]][@modifier]
The esperanto locale "epo" does not have a territory. Modify run-command to
take this into account.
Reported by Alex Sassmannshausen here:
https://lists.gnu.org/archive/html/guix-devel/2020-04/msg00192.html.
* gnu/installer/utils.scm (run-command): Handle locale without territory such
as "epo".
Previously for Azerbaijani, no Latin layout but only the Cyrillic variant
could be selected.
* gnu/installer/newt/keymap.scm (add-empty-variant): New procedure.
(run-keymap-page): Use it to insert an empty variant.
* gnu/installer/proxy.scm: New file.
* gnu/local.mk (INSTALLER_MODULES): Add it.
* po/guix/POTFILES.in: Add it.
* gnu/installer/newt/parameters.scm (run-proxy-page): New procedure,
(run-parameters-page): add the previous procedure to the parameters menu.
* gnu/installer/newt/page.scm (run-input-page): Remove component argument that
is not longer passed to the procedure passed to 'add-component-callback',
(run-listbox-selection-page): ditto.
* gnu/installer/newt/user.scm (run-user-add-page): Ditto,
(run-user-add-page): ditto.
* gnu/installer/newt/help.scm: New file.
* gnu/local.mk (INSTALLER_MODULES): Add it.
* po/guix/POTFILES.in: Add it.
* gnu/installer/record.scm (<installer>): Add 'help-menu' and 'help-page'
fields,
(installer-help-menu, installer-help-page): new exported procedures.
* gnu/installer/newt.scm (init): Set the help line,
(help-menu, help-page): new procedures used ...
(newt-installer): ... here.
* gnu/installer/newt/keymap.scm (run-layout-page): Add a context argument to
differenciate the help context from the main one,
(run-keymap-page): add a context argument and pass it to run-layout-page.
* gnu/installer.scm (compute-keymap-step): Add a context argument and pass it
to 'installer-keymap-page',
(installer-steps): set the help menu and pass the appropriate context to
compute-keymap-step calls,
(guile-newt): update to revision 2.
* gnu/installer/tests.scm (choose-services): Turn desktop-environments list
into a choose-desktop-environment procedure. This way, it is easier to select
all desktop-environments or none, in the same way as choose-network-service?
and choose-network-management-tool? arguments.
This fixes <https://bugs.gnu.org/39712>.
The guix-daemon was preventing the cow-store umount, so restart it. Some
udevd workers, using cow-store files might also still be around, so have some
umount retries.
* gnu/installer/final.scm (kill-cow-users): New procedure,
(umount-cow-store): restart guix-daemon and kill all processes started from
within the cow-store before trying to umount the store overlay. Also try 5
times to umount the overlay in case it is still busy.
* gnu/installer/utils.scm (run-shell-command): Rename to...
(run-command): Remove call to 'call-with-temporary-output-file' and hop
through Bash. Expect COMMAND to be a list of strings rather than a
string.
* gnu/installer/final.scm (install-system): Turn INSTALL-COMMAND into a
list of strings and pass it to 'run-command'.
* gnu/installer/newt/page.scm (edit-file): Likewise.
This is useful for automated tests.
* gnu/installer/newt/network.scm (wait-service-online)[online?]: New
procedure. Check for /tmp/installer-assume-online.
Use it instead of 'connman-online?'.
This will allow us to automate testing of the installer.
* gnu/installer/utils.scm (%client-socket-file)
(current-server-socket, current-clients): New variables.
(open-server-socket, call-with-server-socket): New procedure.
(with-server-socket): New macro.
(run-shell-command): Add call to 'send-to-clients'. Select on both
current-input-port and current-clients.
* gnu/installer/steps.scm (run-installer-steps): Wrap 'call-with-prompt'
in 'with-socket-server'. Call 'sigaction' for SIGPIPE.
* gnu/installer/newt/page.scm (watch-clients!, close-port-and-reuse-fd)
(run-form-with-clients, send-to-clients): New procedures.
(draw-info-page): Add call to 'run-form-with-clients'.
(run-input-page): Likewise. Handle EXIT-REASON equal to 'exit-fd-ready.
(run-confirmation-page): Likewise.
(run-listbox-selection-page): Likewise. Define 'choice->item' and use it.
(run-checkbox-tree-page): Likewise.
(run-file-textbox-page): Add call to 'run-form-with-clients'. Handle
'exit-fd-ready'.
* gnu/installer/newt/partition.scm (run-disk-page): Pass
#:client-callback-procedure to 'run-listbox-selection-page'.
* gnu/installer/newt/user.scm (run-user-page): Call
'run-form-with-clients'. Handle 'exit-fd-ready'.
* gnu/installer/newt/welcome.scm (run-menu-page): Define
'choice->item' and use it. Call 'run-form-with-clients'.
* gnu/installer/newt/final.scm (run-install-success-page)
(run-install-failed-page): When (current-clients) is non-empty, call
'send-to-clients' without displaying a choice window.
* gnu/installer/newt/final.scm (run-install-failed-page): Propose between
installer resume or restart. Do actually resume the installation by raising an
&installer-step-abort condition if "Resume" button is pressed. Otherwise, keep
going as the installer will be restarted by login.
* gnu/installer.scm (installer-program): Remove the associated TODO comment.
Fixes <https://issues.guix.info/issue/39217>.
Fixes <https://issues.guix.info/issue/38447>.
* gnu/installer/final.scm (umount-cow-store): New procedure ...,
(install-system): ... used here, to remove the store overlay so that the
target device is not seen as busy during further umount calls.
Fixes <https://bugs.gnu.org/38562>.
Reported by Brice Waegeneire <brice@waegenei.re>.
Previously, pressing F12 or shift-F2 in one of those forms would cause
it to exit, usually with the default value #t because the caller had not
provided a useful hotkey "callback".
* gnu/installer/newt/page.scm (run-input-page, run-confirmation-page)
(run-listbox-selection-page, run-checkbox-tree-page)
(run-file-textbox-page): Pass #:flags FLAG-NOF12 to 'make-form'.
Fixes <https://bugs.gnu.org/39199>.
Reported by Jonathan Brielmaier <jonathan.brielmaier@web.de>.
* gnu/installer/newt/page.scm (run-file-textbox-page): Move 'loop' to
the beginning of the body. Do not call 'loop' from the 'dynamic-wind'
exit handler as we would not return the value of the second call to
'loop'.
Fixes <https://bugs.gnu.org/36885>.
Reported by <lukasbf@tutanota.com>.
* gnu/installer/newt/page.scm (edit-file): New procedure.
(run-file-textbox-page): Add #:edit-button? and #:editor-locale
parameters. Remove 'file-text' and add 'edit-button', and add it
to the horizontal stacked grid when EXIT-BUTTON? is true. Wrap
body in 'loop'. Handle case where ARGUMENT is EDIT-BUTTON by calling
'loop'.
* gnu/installer/newt/final.scm (run-config-display-page): Add #:locale
parameter. Pass #:edit-button? and #:editor-locale to
'run-file-textbox-page'.
(run-final-page): Pass LOCALE to 'run-config-display-page'.
* gnu/installer/newt/partition.scm (run-fs-type-page): Add ‘jfs’ to the
list box.
* gnu/installer/parted.scm (user-fs-type-name, user-fs-type->mount-type)
(partition-filesystem-user-type): Add ‘jfs’ mapping
(create-jfs-file-system): New procedure.
(format-user-partitions): Use it.
* gnu/installer.scm (set-installer-path): Add jfsutils.
* gnu/installer/parted.scm (data-partition?, metadata-partition?,
freespace-partition?, normal-partition?, extended-partition?,
logical-partition?): Remove, as now provided by Guile-Parted.
* gnu/installer/newt/partition.scm (run-disk-page): Remove disk-destroy calls,
replace disk-delete-all by disk-remove-all-partitions and
disk-delete-partition by disk-remove-partition*.
This fixes 55c43108 commit that renamed input-hide-checkbox? into
input-visibility-checkbox?.
* gnu/installer/newt/partition.scm (prompt-luks-passwords): Rename
input-hide-checkbox? into input-visibility-checkbox?.
* gnu/installer/newt/user.scm (run-user-add-page): Change the input
visibility checkbox's text to ‘Show’, and default to unchecked.
* gnu/installer/newt/page.scm (run-input-page): Likewise.
Rename INPUT-HIDE-CHECKBOX? argument to INPUT-VISIBILITY-CHECKBOX?.
Guile-JSON 3.x is incompatible with Guile-JSON 1.x, which we relied on
until now: it maps JSON dictionaries to alists (instead of hash tables),
and JSON arrays to vectors (instead of lists). This commit is about
adjusting all the existing code to this new mapping.
* m4/guix.m4 (GUIX_CHECK_GUILE_JSON): New macro.
* configure.ac: Use it.
* doc/guix.texi (Requirements): Mention the Guile-JSON version.
* guix/git-download.scm (git-fetch)[guile-json]: Use GUILE-JSON-3.
* guix/import/cpan.scm (string->license): Expect vectors instead of
lists.
(module->dist-name): Use 'json-fetch' instead of 'json-fetch-alist'.
(cpan-fetch): Likewise.
* guix/import/crate.scm (crate-fetch): Likewise, and call 'vector->list'
for DEPS.
* guix/import/gem.scm (rubygems-fetch): Likewise.
* guix/import/json.scm (json-fetch-alist): Remove.
* guix/import/pypi.scm (pypi-fetch): Use 'json-fetch' instead of
'json-fetch-alist'.
(latest-source-release, latest-wheel-release): Call 'vector->list' on
RELEASES.
* guix/import/stackage.scm (stackage-lts-info-fetch): Use 'json-fetch'
instead of 'json-fetch-alist'.
(lts-package-version): Use 'vector->list'.
* guix/import/utils.scm (hash-table->alist): Remove.
(alist->package): Pass 'vector->list' on the inputs fields, and default
to the empty vector.
* guix/scripts/import/json.scm (guix-import-json): Remove call to
'hash-table->alist'.
* guix/swh.scm (define-json-reader): Expect pair? or null? instead of
hash-table?.
[extract-field]: Use 'assoc-ref' instead of 'hash-ref'.
(json->branches): Use 'map' instead of 'hash-map->list'.
(json->checksums): Likewise.
(json->directory-entries, origin-visits): Call 'vector->list' on the
result of 'json->scm'.
* tests/import-utils.scm ("alist->package with dependencies"): New test.
* gnu/installer.scm (build-compiled-file)[builder]: Use GUILE-JSON-3.
* gnu/installer.scm (installer-program)[installer-builder]: Likewise.
* gnu/installer/locale.scm (iso639->iso639-languages): Use 'assoc-ref'
instead of 'hash-ref', and pass vectors through 'vector->list'.
(iso3166->iso3166-territories): Likewise.
* gnu/system/vm.scm (system-docker-image)[build]: Use GUILE-JSON-3.
* guix/docker.scm (manifest, config): Adjust for Guile-JSON 3.
* guix/scripts/pack.scm (docker-image)[build]: Use GUILE-JSON-3.
* guix/import/github.scm (fetch-releases-or-tags): Update docstring.
(latest-released-version): Use 'assoc-ref' instead of 'hash-ref'. Pass
the result of 'fetch-releases-or-tags' to 'vector->list'.
* guix/import/launchpad.scm (latest-released-version): Likewise.
Fixes <http://bugs.gnu.org/36008>.
Suggested by Giovanni Biscuolo <g@xelera.eu>.
* gnu/installer/services.scm (%system-services) <"i3">: Add i3status,
dmenu, and st.
Fixes <https://bugs.gnu.org/36099>.
Reported by Jonathan Brielmaier <jonathan.brielmaier@web.de>.
* gnu/installer/parted.scm (initrd-configuration): Add
%BASE-INITRD-MODULES to the 'initrd-modules' field.
This fixes https://issues.guix.gnu.org/issue/35622.
* gnu/installer/connman.scm (<service>): Mention that name may be false.
* gnu/installer/newt/wifi.scm (wifi-services): Filter out wifi services
without name.
Co-authored by: Pierre Neidhardt <mail@ambrevar.xyz>
Fixes <https://bugs.gnu.org/35783>.
This is a followup to 7d567af46b.
* gnu/installer/parted.scm (auto-partition!): Append ESP-PARTITION, when
it is true, to the result of 'create-adjacent-partitions!'.
* gnu/installer/newt/partition.scm (run-partioning-page): Remove
'initial-partitions' variable, and remove call to
'create-special-user-partitions'.
Co-authored-by: Mathieu Othacehe <m.othacehe@gmail.com>
Fixes <https://bugs.gnu.org/35731>.
* gnu/installer/newt/partition.scm (run-partioning-page)[run-page]:
Introduce 'initial-partitions' variable. Previously we'd call
'disk-partitions' after 'auto-partition' had done its job of creating
new partitions, and thus its result would contain the just-created
partitions. Consequently, 'create-special-user-partitions' would return
the ESP partition we just created, and thus it would appear twice in the
list.
* gnu/installer/parted.scm (user-fs-type-name): Add fat16.
(user-fs-type->mount-type): Add fat16.
(create-fat16-file-system): New procedure.
(format-user-partitions): Use it.
The list of locales supported by glibc is now built from source.
* gnu/installer/locale.scm (locale-string->locale): Add optional
'codeset' parameter and honor it.
(supported-locales->locales): Rewrite to 'read' from SUPPORTED-LOCALES.
* gnu/installer.scm (compute-locale-step): Pass the result of
'glibc-supported-locales' instead of the "aux-files/SUPPORTED" file.
* gnu/installer/aux-files/SUPPORTED: Remove.
* gnu/local.mk (dist_installer_DATA): Remove it.
* gnu/installer/newt/page.scm (run-input-page)[input-hide-checkbox?]: New
parameter adding a checkbox to toggle password hiding. By default, the
checkbox is active and the password is hence hided.
* gnu/installer/newt/partition.scm (prompt-luks-passwords): Enable the
previous parameter on both password input pages.
* gnu/installer/newt/user.scm (run-root-password-page): Enable the previous
parameter,
(confirm-password): ditto,
(run-user-add-page): add a checkbox to toggle password hiding.
Previously, for a machine that only has wired networking, and only one
such network, we'd have to go through two selection boxes. Now we just
skip both.
* gnu/installer/newt/ethernet.scm (run-ethernet-page): When
'ethernet-services' returns one element, return it directly without
opening a listbox selection.
* gnu/installer/newt/network.scm (run-technology-page): Likewise.
Until now, step descriptions in the menu that shows up when hitting
"Exit" would not be translated. That's because the 'G_' procedure was
called once and for all when the installer was started.
* gnu/installer/steps.scm (<installer-step>)[description]: Add the
'thunked' attribute.
Previously, the "Everything is one partition" entry would come first in
English but it would be second in French. This change keeps it the
first choice regardless of the language.
* gnu/installer/newt/partition.scm (run-scheme-page): Pass
#:sort-listbox-items? to 'run-scheme-page'.
Fixes <https://bugs.gnu.org/35541>.
Reported by Florian Pelz <pelzflorian@pelzflorian.de>.
* gnu/installer/services.scm (system-services->configuration): Generate
a snippet that appends PACKAGES to %BASE-PACKAGES.
Previously, if we had a password mismatch, the 'password' field would
end up containing a <user> record instead of the actual password.
* gnu/installer/newt/user.scm (confirm-password): Make TRY-AGAIN
optional and adjust docstring.
(run-user-add-page): Move 'confirm-password' call one level higher.
* gnu/installer/newt/user.scm (run-user-add-page): Add #:real-name. Add
a label and entry for the real name and initialize the 'real-name' field
of the <user> record.
* gnu/installer/final.scm (create-user-database): Set the 'comment'
field of the <user-account> record.
Previously the "listbox" would be unnecessarily high, leaving too little
space for the German translation of the text above.
* gnu/installer/newt/partition.scm (run-disk-page): Increase
#:info-textbox-width and pass #:listbox-height.
Fixes <https://bugs.gnu.org/35469>.
Reported by Florian Pelz <pelzflorian@pelzflorian.de>.
* gnu/installer/services.scm (%system-services): Add service for
'nss-certs', with 'recommended?' set to #t.
* gnu/installer/services.scm (<system-service>)[recommended?]: New
field.
* gnu/installer/newt/services.scm (run-desktop-environments-cbt-page):
Pass #:selection to 'run-checkbox-tree-page', computed from the
'recommended?' field of each service.
(run-networking-cbt-page): Likewise.
* gnu/installer/newt/final.scm (run-install-success-page): Return
'success.
* gnu/installer.scm (installer-program): Check the result of the 'final
step and reboot upon success.
This allows the installer to distinguish success from failure, and also
ensures the shell that runs 'guix system init' exits upon completion.
* gnu/installer/utils.scm (run-shell-command)[pause]: New procedure.
Add "exec" before COMMAND in the script. Guard 'invoke' call and handle
'invoke-error?'. Add call to 'pause' on completion.
* gnu/installer/final.scm (install-system): Remove 'false-if-exception'.
Fixes <https://bugs.gnu.org/35399>.
* gnu/installer/newt/user.scm (run-root-password-page): New procedure.
* gnu/installer/user.scm (users->configuration): Filter out the "root"
account.
* gnu/installer/final.scm (create-user-database): Set 'uid' field in
'user-account' form.
Partly fixes <https://bugs.gnu.org/35399>.
* gnu/installer/user.scm (<user>)[password]: New field.
* gnu/installer/final.scm (%seed): New variable.
(integer->alphanumeric-char, random-string)
(create-user-database): New procedures.
(install-system): Call 'create-user-database'.
* gnu/installer/newt/final.scm (run-install-shell): Add #:users and pass
it to 'install-system'.
(run-final-page): Pass #:users to 'run-install-shell'.
* gnu/installer/newt/user.scm (run-user-add-page): Add password entry.
Pass its result as the 'password' field of <user>.
* gnu/installer/utils.scm (run-shell-command): Add #:locale and honor it.
* gnu/installer/newt/final.scm (run-install-shell): Add 'locale'
parameter; pass it to 'install-system'.
(run-final-page): Obtain locale from RESULT; pass it to 'run-install-shell'.
* gnu/installer/final.scm (install-system): Add 'locale' parameter; pass
it to 'run-shell-command'.
When trying to jump to the first step, DONE-STEPS ends-up being null, which
fails the matching condition.
* gnu/installer/steps.scm (skip-to-step): Split matching conditions to handle
the empty DONE-STEPS case properly.
Previously, we would always (1) put English first, and (2) sort the
other layouts based on their English description. This fixes both
issues.
* gnu/installer/newt/keymap.scm (sort-layouts)[layout<?]: New procedure.
[preferred]: New variable.
Partition according to both the 'name' and 'synopsis' fields. Sort both
the main layouts and the other layouts according to 'layout<?'.