aboutsummaryrefslogtreecommitdiff
path: root/scripts/install-multi-user.sh
AgeCommit message (Collapse)Author
2022-12-07add template for installer issuesValentin Gagarin
since the installer prompts users to file issues, labelling them automatically should reduce triaging effort significantly.
2022-10-25Add `--yes` option for Nix installation scriptGabriella Gonzalez
2022-09-13Add fish suport to installerAna Hobden
Before this patch, installing Nix using the Fish shell did not work because Fish wasn't configured to add Nix to the PATH. Some options in #1512 offered workarounds, but they typically involve extra plugins or packages. This patch adds native, out-of-the-box support for the Fish shell. Note that Fish supports a `conf.d` directory, which is intended for exactly use cases like this: software projects distributing shell snippets. This patch takes advantage of it. The installer doesn't append any Nix loader behavior to any Fish config file. Because of that, the uninstall process is smooth and a reinstall obliterates the existing nix.fish files that we place instead of bothering the user with a backup / manual removal. Both single-user and multi-user cases are covered. It has been tested on Ubuntu, and a Mac with MacPorts, homebrew, and the Fish installer pkg. Closes #1512 Co-authored-by: Graham Christensen <graham@grahamc.com>
2022-09-09Merge pull request #4918 from roberth/installer-pcEelco Dolstra
installer: Jeeze -> Oh no
2022-08-31Set `HOME` var to `root`'s home when running `nix-store` as `root`Dave Nicponski
A [recent-ish change](https://github.com/NixOS/nix/pull/6676) logs a warning when a potentially counterintuitive situation happens. This now causes the multi-user installer to [emit a warning](https://github.com/NixOS/nixpkgs/issues/189043) when it's doing the "seed the Nix database" step via a low-level `nix-store --load-db` invocation. `nix-store` functionality implementations don't actually use profiles or channels or homedir as far as i can tell. So why are we hitting this code at all? Well, the current command approach for functionality here builds a [fat `nix` binary](https://github.com/NixOS/nix/blob/master/src/nix/local.mk#L23-L26) which has _all_ the functionality of previous individual binaries (nix-env, nix-store, etc) bundled in, then [uses the invocation name](https://github.com/NixOS/nix/blob/master/src/nix/main.cc#L274-L277) to select the set of commands to expose. `nix` itself has this behavior, even when just trying to parse the (sub)command and arguments: ``` dave @ davembp2 $ nix error: no subcommand specified Try 'nix --help' for more information. dave @ davembp2 $ sudo nix warning: $HOME ('/Users/dave') is not owned by you, falling back to the one defined in the 'passwd' file error: no subcommand specified Try 'nix --help' for more information. dave @ davembp2 $ HOME=~root sudo nix error: no subcommand specified Try 'nix --help' for more information. ``` This behavior can also be seen pretty easily with an arbitrary `nix-store` invocation: ``` dave @ davembp2 $ nix-store --realize dave @ davembp2 $ sudo nix-store --realize # what installer is doing now warning: $HOME ('/Users/dave') is not owned by you, falling back to the one defined in the 'passwd' file dave @ davembp2 $ sudo HOME=~root nix-store --realize # what this PR effectively does dave @ davembp2 $ ```
2022-08-19install: only create TMPDIR if missingTravis A. Everett
2022-08-17Ensure that $TMPDIR exists if definedEelco Dolstra
2022-08-17Use plain mktempEelco Dolstra
This fixes the case where $TMPDIR doesn't end in a slash.
2022-08-12Merge pull request #6882 from DeterminateSystems/allow-multi-user-as-rootEelco Dolstra
Allow installing multi-user as root on macOS and Linux
2022-08-10Don't prompt about using sudo if we're already rootGraham Christensen
2022-08-10install-multi-user: abstract is_root, is_os_linux, is_os_darwinGraham Christensen
2022-08-08Only fail if selinux is in enforcingTom Franklin
2022-06-10install-multi-user: check if selinux is enabled and if it is then abortArtturin
2022-04-08installer: ask for confirmation on multi-user install without systemdMartin Schwaighofer
On Linux a user can go through all the way through the multi-user install and find out at the end that they now have to manually configure their init system to launch the nix daemon. I suspect that for a significant number of users this is not what they wanted. They might prefer a single-user install. Now they have to manually uninstall nix before they can go through the single-user install. This introduces a confirmation dialog before the install in that specific situation to make sure that they want to proceed. See also: https://github.com/NixOS/nix/issues/4999#issuecomment-1064188080 This closes #4999 but rejecting it and closing that issue anyways would also be valid.
2022-03-24install-multi-user.sh: Preserve symlinksEelco Dolstra
We need to pass -P to ensure that symlinks are copied correctly. Fixes #6303.
2022-03-01installer: allow overriding nix user GID and UIDsBjørn Forsman
Needed to resolve conflict in case the default GID and UIDs are in use.
2022-02-17Create to daemon-socket folder during installGuillaume Maudoux
2022-01-21install-darwin: dodge bash 3.2 command bugTravis A. Everett
The script is trying to find chown in a cross-platform-like way, but there's some sort of deficiency in `command -p` in the default macOS bash 3.2. It looks like it will just use whatever PATH is already set, instead of the "default" path. This attempts to hard-set a PATH via `getconf PATH`. It will just set an empty PATH if that fails for some reason. A properly-functioning `command -p` should not care what we set the PATH to here one way or the other. Hopefully fixes #5768.
2021-12-08Merge pull request #5521 from abathur/clearly_mark_validation_stepDomen Kožar
installer: clarify starting assumption task
2021-11-19Apply some shellcheck suggestionsSandro Jäckel
2021-11-10installer: make rc replacement instructions explicitTravis A. Everett
2021-11-09installer: improve existing rc backup nagTravis A. Everett
2021-11-08installer: clarify starting assumption taskTravis A. Everett
We had a macOS user present in Matrix with some confusion because the lack of a clear task statement here made them think the error meant that a problem had occurred during the preceding task in a macOS install: "Fixing any leftover Nix volume state"
2021-11-03Reword "we"s to "I"s for consistencyJan Van Bruggen
This script uses multiple forms of the first-person POV: 1. "We" to refer to the Nix team (https://github.com/NixOS/nix/blob/1e7c796e66a692cd097b155bd0a60fedf20d554f/scripts/install-multi-user.sh#L72) 2. "We" to refer to the combination of the installation script & the user/executor (https://github.com/NixOS/nix/blob/1e7c796e66a692cd097b155bd0a60fedf20d554f/scripts/install-multi-user.sh#L710) 3. "We" to refer to the installation script alone (https://github.com/NixOS/nix/blob/1e7c796e66a692cd097b155bd0a60fedf20d554f/scripts/install-multi-user.sh#L602) 4. "I" to refer to the installation script alone (https://github.com/NixOS/nix/blob/1e7c796e66a692cd097b155bd0a60fedf20d554f/scripts/install-multi-user.sh#L200) Since I prefer POV 4 to POV 3, this changes all instances of POV 3 to POV 4.
2021-08-25Revert "Use /etc/zshenv instead of /etc/zshrc for profile"Matthew Bauer
This reverts commit 909d8cb2934869c945ac1cc20dfb71df513042eb. This messes up PATH priority since /etc/profile gets sourced AFTER /etc/zshenv and it sets the system paths so $HOME/.nix-profile/bin:/nix/var/nix/profiles/default/bin is behind /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin. See discussion in https://github.com/NixOS/nix/issues/4169.
2021-08-18Remove rsync usage in the installerDomen Kožar
It's not commonly installed on systems like debian, so avoid the bootstrapping problem by using cp and chmod.
2021-06-16installer: Jeeze -> Oh noRobert Hensing
Even if it doesn't offend me or probably most people, this word can be considered mildly blasphemous.
2021-05-27throw freenode down the memory holePatrick Hilhorst
2021-04-29darwin: encrypt nix volume if filevault is enabledTravis A. Everett
2021-03-25Merge pull request #4532 from abathur/macos_nixbld_idsDomen Kožar
fix nixbld user name/uid for macOS/darwin
2021-03-23Added Debian-based OS's profilesNicolas Stig124 FORMICHELLA
2021-03-11fix nixbld user name/uid for macOSTravis A. Everett
2020-10-19create missing profile files to fix zsh envvarsTravis A. Everett
Env vars for ZSH were moved from /etc/zshrc to /etc/zshenv in #3608 to address an issue with zshrc getting clobbered by OS updates, but /etc/zshenv doesn't exist by default--so *nothing* would get set up for zsh users unless they already happened to have /etc/zshenv. Creating these files if they don't exist. Also cut separate creation of profile.d/nix.sh, which isn't needed now.
2020-10-19fix skipped multi-user install steps on macOSTravis A. Everett
Some of the changes in #3788 to support non-systemd Nix installs don't appear to be aware that the darwin installer exists, which resulted in some skipped steps and inappropriate instructions.
2020-07-07merged systemd installer with non-systemd installer.Daniel Fitzpatrick
2020-06-23docs/installer: add correct curl flagsJörg Thalheim
also see https://nixos.org/download.html
2020-05-27Merge pull request #3608 from surajbarkale/patch-1Eelco Dolstra
Use /etc/zshenv instead of /etc/zshrc for profile
2020-05-26installer: fix unused variableDomen Kožar
2020-05-26Fix installer script bugsDomen Kožar
- --no-channel-add didn't have effect on multi-user installation - some new flags didn't work at all - document all installer flags
2020-05-25Merge pull request #3375 from domenkozar/multi-user-countDomen Kožar
install-multi-user: allow overriding user count
2020-05-25Allow passing extra nix.conf to installerDomen Kožar
2020-05-25install-multi-user: allow overriding user countDomen Kožar
2020-05-22Use /etc/zshenv instead of /etc/zshrc for profileSuraj Barkale
As noted in https://github.com/NixOS/nix/issues/3456 the `/etc/zshenv` file provides a better place for sourcing the nix environment.
2020-03-24installer: Fix terminal colors.Greg Price
The install-multi-user script uses blue, green, and red colors, as well as bold and underline, to add helpful formatting that helps structure its rather voluminous output. Unfortunately, the terminal escape sequences it uses are not quite well-formed. The relevant information is all there, just obscured by some extra noise, a leading parameter `38`. Empirically, the result is: * On macOS, in both Terminal.app and iTerm2, the spurious `38` is ignored, the rest of the escape sequence is applied, and the colors show up as intended. * On Linux, in at least gnome-terminal and xterm, the spurious `38` and the next parameter after it are ignored, and what's left is applied. So in the sequence `38;4;32`, the 4 (underline) is ignored but the 32 (green) takes effect; in a more typical sequence like `38;34`, the 34 (blue) is ignored and nothing happens. These codes are all unchanged since this script's origins as a Darwin-only script -- so the fact that they work fine in common macOS terminals goes some way to explain how the bug arose. Happily, we can make the colors work as intended by just deleting the extra `38;`. Tested in all four terminals mentioned above; the new codes work correctly on all of them, and on the two macOS terminals they work exactly the same as before. --- In a bit more technical detail -- perhaps more than anyone, me included, ever wanted to know, but now that I've gone and learned it I'll write it down anyway :) -- here's what's happening in these codes: An ECMA-48 "control sequence" begins with `\033[` aka "CSI", contains any number of parameters as semicolon-separated decimal numbers (plus sometimes other wrinkles), and ends with a byte from 0x40..0x7e. In our case, with `m` aka "SGR", "Select Graphic Rendition". An SGR control sequence `\033[...m` sets colors, fonts, text styles, etc. In particular a parameter `31` means red, `32` green, `34` blue, `4` underline, and `0` means reset to normal. Those are all we use. There is also a `38`. This is used for setting colors too... but it needs arguments. `38;5;nn` is color nn from a 256-color palette, and `38;2;rr;gg;bb` has the given RGB values. There is no meaning defined for `38;1` or `38;34` etc. On seeing a parameter `38` followed by an unrecognized argument for it, apparently some implementations (as seen on macOS) discard only the `38` and others (as seen on Linux) discard the argument too before resuming.
2020-03-22installer: Set files read-only when copying into storeGreg Price
After installing Nix, I found that all the files and directories initially copied into the store were writable, with mode 644 or 755: drwxr-xr-x 9 root root 4096 Dec 31 1969 /nix/store/ddmmzn4ggz1f66lwxjy64n89864yj9w9-nix-2.3.3 The reason is that that's how they were in the unpacked tarball, and the install-multi-user script used `rsync -p` without doing anything else to affect the permissions. The plain `install` script for a single-user install takes care to do a `chmod -R a-w` on each store path copied. We could do the same here with one more command; or we can pass `--chmod` to rsync, to have it write the files with the desired modes in the first place. Tested the new `rsync` command on both a Linux machine with a reasonably-modern rsync (3.1.3) and a Mac with its default, ancient, rsync 2.6.9, and it works as expected on both. Thankfully the latter is just new enough to have `--chmod`, which dates to rsync 2.6.7.
2019-10-23install-multi-user.sh: Remove unused variablesEelco Dolstra
https://hydra.nixos.org/build/104119659
2019-10-09TypoEelco Dolstra
2019-10-09Remove some redundant initializationEelco Dolstra
2019-10-09Remove world-writability from per-user directoriesEelco Dolstra
'nix-daemon' now creates subdirectories for users when they first connect. Fixes #509 (CVE-2019-17365). Should also fix #3127.
2019-10-08Make preexisting Nix install a warning, not a failureMatthew Bauer
In the multi-user install script, we originally made sure no previous references to Nix existed. This prevented any previous installs from contaminating the new install. However, some users need the ability to repair their existing Nix installation without uninstalling all references to Nix. This change allows users with existing Nix installations to use the installer, while still outputing a warning message on the dangers of this. As a result, the multi-user install script work much more like the single-user install script has worked in the past. This is a requirement for macOS Catalina users now that /Library/LaunchDaemons/org.nixos.nix-daemon.plisg is not managed by the Nix store. If there is ever a change to the .plist, all users will need to rerun this install script to get the new changes. Otherwise, changes to the launch daemon will require manual interventions.