aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorDomen Kožar <domen@dev.si>2021-03-25 10:35:56 +0100
committerGitHub <noreply@github.com>2021-03-25 10:35:56 +0100
commitdc6a8f154856be4a969fc9a03ff2aa0529abbbf9 (patch)
tree74e2c31ec67f6a4f574a53d15246521e6092d28d /scripts
parentd1cb956bf2e417baa08e55699a57c2bde3adf7d3 (diff)
parent0431cf6d0992e7986afbb3d0ffd0a7e1cca8ae8a (diff)
Merge pull request #4532 from abathur/macos_nixbld_ids
fix nixbld user name/uid for macOS/darwin
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/bigsur-nixbld-user-migration.sh46
-rw-r--r--scripts/install-darwin-multi-user.sh2
-rw-r--r--scripts/install-multi-user.sh6
3 files changed, 52 insertions, 2 deletions
diff --git a/scripts/bigsur-nixbld-user-migration.sh b/scripts/bigsur-nixbld-user-migration.sh
new file mode 100755
index 000000000..f1619fd56
--- /dev/null
+++ b/scripts/bigsur-nixbld-user-migration.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env bash
+
+((NEW_NIX_FIRST_BUILD_UID=301))
+
+id_available(){
+ dscl . list /Users UniqueID | grep -E '\b'$1'\b' >/dev/null
+}
+
+change_nixbld_names_and_ids(){
+ local name uid next_id
+ ((next_id=NEW_NIX_FIRST_BUILD_UID))
+ echo "Attempting to migrate nixbld users."
+ echo "Each user should change from nixbld# to _nixbld#"
+ echo "and their IDs relocated to $next_id+"
+ while read -r name uid; do
+ echo " Checking $name (uid: $uid)"
+ # iterate for a clean ID
+ while id_available "$next_id"; do
+ ((next_id++))
+ if ((next_id >= 400)); then
+ echo "We've hit UID 400 without placing all of your users :("
+ echo "You should use the commands in this script as a starting"
+ echo "point to review your UID-space and manually move the"
+ echo "remaining users (or delete them, if you don't need them)."
+ exit 1
+ fi
+ done
+
+ if [[ $name == _* ]]; then
+ echo " It looks like $name has already been renamed--skipping."
+ else
+ # first 3 are cleanup, it's OK if they aren't here
+ sudo dscl . delete /Users/$name dsAttrTypeNative:_writers_passwd &>/dev/null || true
+ sudo dscl . change /Users/$name NFSHomeDirectory "/private/var/empty 1" "/var/empty" &>/dev/null || true
+ # remove existing user from group
+ sudo dseditgroup -o edit -t user -d $name nixbld || true
+ sudo dscl . change /Users/$name UniqueID $uid $next_id
+ sudo dscl . change /Users/$name RecordName $name _$name
+ # add renamed user to group
+ sudo dseditgroup -o edit -t user -a _$name nixbld
+ echo " $name migrated to _$name (uid: $next_id)"
+ fi
+ done < <(dscl . list /Users UniqueID | grep nixbld | sort -n -k2)
+}
+
+change_nixbld_names_and_ids
diff --git a/scripts/install-darwin-multi-user.sh b/scripts/install-darwin-multi-user.sh
index a27be2a43..f6575ae2f 100644
--- a/scripts/install-darwin-multi-user.sh
+++ b/scripts/install-darwin-multi-user.sh
@@ -4,6 +4,8 @@ set -eu
set -o pipefail
readonly PLIST_DEST=/Library/LaunchDaemons/org.nixos.nix-daemon.plist
+NIX_FIRST_BUILD_UID="301"
+NIX_BUILD_USER_NAME_TEMPLATE="_nixbld%d"
dsclattr() {
/usr/bin/dscl . -read "$1" \
diff --git a/scripts/install-multi-user.sh b/scripts/install-multi-user.sh
index 4cc11d210..66825f9de 100644
--- a/scripts/install-multi-user.sh
+++ b/scripts/install-multi-user.sh
@@ -25,7 +25,9 @@ readonly RED='\033[31m'
readonly NIX_USER_COUNT=${NIX_USER_COUNT:-32}
readonly NIX_BUILD_GROUP_ID="30000"
readonly NIX_BUILD_GROUP_NAME="nixbld"
-readonly NIX_FIRST_BUILD_UID="30001"
+# darwin installer needs to override these
+NIX_FIRST_BUILD_UID="30001"
+NIX_BUILD_USER_NAME_TEMPLATE="nixbld%d"
# Please don't change this. We don't support it, because the
# default shell profile that comes with Nix doesn't support it.
readonly NIX_ROOT="/nix"
@@ -104,7 +106,7 @@ EOF
}
nix_user_for_core() {
- printf "nixbld%d" "$1"
+ printf "$NIX_BUILD_USER_NAME_TEMPLATE" "$1"
}
nix_uid_for_core() {