guix-install.sh: Add GUIX_ALLOW_OVERWRITE environment variable.

The need for this use case appeared when attempting to install Guix on a truly
minimal image made with Buildroot, which lacked enough GNU components that I
had to extract a guix pack to /gnu before attempting installation, which would
then refuse to proceed because of the existing /gnu.

* etc/guix-install.sh: Document environment variables.
(sys_create_store) [GUIX_ALLOW_OVERWRITE]: Skip pre-existing installation
checks and output a warning.  Extract the tarball directly to /.
This commit is contained in:
Maxim Cournoyer 2022-12-14 10:31:52 -05:00
parent 28bd26b6b8
commit 23d56ba150
No known key found for this signature in database
GPG key ID: 1260E46482E63562

View file

@ -29,6 +29,22 @@
# We require Bash but for portability we'd rather not use /bin/bash or # We require Bash but for portability we'd rather not use /bin/bash or
# /usr/bin/env in the shebang, hence this hack. # /usr/bin/env in the shebang, hence this hack.
# Environment variables
#
# GUIX_BINARY_FILE_NAME
#
# Can be used to override the automatic download mechanism and point
# to a local Guix binary archive filename like
# "/tmp/guix-binary-1.4.0rc2.armhf-linux.tar.xz"
#
# GUIX_ALLOW_OVERWRITE
#
# Instead of aborting to avoid overwriting a previous installations,
# allow copying over /var/guix or /gnu. This can be useful when the
# installation required the user to extract Guix packs under /gnu to
# satisfy its dependencies.
if [ "x$BASH_VERSION" = "x" ] if [ "x$BASH_VERSION" = "x" ]
then then
exec bash "$0" "$@" exec bash "$0" "$@"
@ -336,16 +352,15 @@ sys_create_store()
_debug "--- [ ${FUNCNAME[0]} ] ---" _debug "--- [ ${FUNCNAME[0]} ] ---"
if [[ -e "/var/guix" || -e "/gnu" ]]; then if [[ -z $GUIX_ALLOW_OVERWRITE && (-e /var/guix || -e /gnu) ]]; then
die "A previous Guix installation was found. Refusing to overwrite." die "A previous Guix installation was found. Refusing to overwrite."
else
_msg "${WAR}Overwriting existing installation!"
fi fi
cd "$tmp_path" cd "$tmp_path"
tar --extract --file "$pkg" && _msg "${PAS}unpacked archive"
_msg "${INF}Installing /var/guix and /gnu..." _msg "${INF}Installing /var/guix and /gnu..."
mv "${tmp_path}/var/guix" /var/ tar --extract --file "$pkg" -C /
mv "${tmp_path}/gnu" /
_msg "${INF}Linking the root user's profile" _msg "${INF}Linking the root user's profile"
mkdir -p ~root/.config/guix mkdir -p ~root/.config/guix