forked from lix-project/lix
fix nixbld user name/uid for macOS
This commit is contained in:
parent
8127094f76
commit
0431cf6d09
46
scripts/bigsur-nixbld-user-migration.sh
Executable file
46
scripts/bigsur-nixbld-user-migration.sh
Executable file
|
@ -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
|
|
@ -4,6 +4,8 @@ set -eu
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
|
|
||||||
readonly PLIST_DEST=/Library/LaunchDaemons/org.nixos.nix-daemon.plist
|
readonly PLIST_DEST=/Library/LaunchDaemons/org.nixos.nix-daemon.plist
|
||||||
|
NIX_FIRST_BUILD_UID="301"
|
||||||
|
NIX_BUILD_USER_NAME_TEMPLATE="_nixbld%d"
|
||||||
|
|
||||||
dsclattr() {
|
dsclattr() {
|
||||||
/usr/bin/dscl . -read "$1" \
|
/usr/bin/dscl . -read "$1" \
|
||||||
|
|
|
@ -25,7 +25,9 @@ readonly RED='\033[31m'
|
||||||
readonly NIX_USER_COUNT=${NIX_USER_COUNT:-32}
|
readonly NIX_USER_COUNT=${NIX_USER_COUNT:-32}
|
||||||
readonly NIX_BUILD_GROUP_ID="30000"
|
readonly NIX_BUILD_GROUP_ID="30000"
|
||||||
readonly NIX_BUILD_GROUP_NAME="nixbld"
|
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
|
# Please don't change this. We don't support it, because the
|
||||||
# default shell profile that comes with Nix doesn't support it.
|
# default shell profile that comes with Nix doesn't support it.
|
||||||
readonly NIX_ROOT="/nix"
|
readonly NIX_ROOT="/nix"
|
||||||
|
@ -104,7 +106,7 @@ EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
nix_user_for_core() {
|
nix_user_for_core() {
|
||||||
printf "nixbld%d" "$1"
|
printf "$NIX_BUILD_USER_NAME_TEMPLATE" "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
nix_uid_for_core() {
|
nix_uid_for_core() {
|
||||||
|
|
Loading…
Reference in a new issue