+49
nixbld-user-migration-script.sh
+49
nixbld-user-migration-script.sh
···
1
+
#!/usr/bin/env bash
2
+
3
+
# this script was pulled from somewhere on the nix forums and was used to try
4
+
# to correct whatever issue was messing up OS updates on macbook
5
+
6
+
((NEW_NIX_FIRST_BUILD_UID=301))
7
+
8
+
id_available(){
9
+
dscl . list /Users UniqueID | grep -E '\b'$1'\b' >/dev/null
10
+
}
11
+
12
+
change_nixbld_names_and_ids(){
13
+
local name uid next_id
14
+
((next_id=NEW_NIX_FIRST_BUILD_UID))
15
+
echo "Attempting to migrate nixbld users."
16
+
echo "Each user should change from nixbld# to _nixbld#"
17
+
echo "and their IDs relocated to $next_id+"
18
+
while read -r name uid; do
19
+
echo " Checking $name (uid: $uid)"
20
+
# iterate for a clean ID
21
+
while id_available "$next_id"; do
22
+
((next_id++))
23
+
if ((next_id >= 400)); then
24
+
echo "We've hit UID 400 without placing all of your users :("
25
+
echo "You should use the commands in this script as a starting"
26
+
echo "point to review your UID-space and manually move the"
27
+
echo "remaining users (or delete them, if you don't need them)."
28
+
exit 1
29
+
fi
30
+
done
31
+
32
+
if [[ $name == _* ]]; then
33
+
echo " It looks like $name has already been renamed--skipping."
34
+
else
35
+
# first 3 are cleanup, it's OK if they aren't here
36
+
sudo dscl . delete /Users/$name dsAttrTypeNative:_writers_passwd &>/dev/null || true
37
+
sudo dscl . change /Users/$name NFSHomeDirectory "/private/var/empty 1" "/var/empty" &>/dev/null || true
38
+
# remove existing user from group
39
+
sudo dseditgroup -o edit -t user -d $name nixbld || true
40
+
sudo dscl . change /Users/$name UniqueID $uid $next_id
41
+
sudo dscl . change /Users/$name RecordName $name _$name
42
+
# add renamed user to group
43
+
sudo dseditgroup -o edit -t user -a _$name nixbld
44
+
echo " $name migrated to _$name (uid: $next_id)"
45
+
fi
46
+
done < <(dscl . list /Users UniqueID | grep nixbld | sort -n -k2)
47
+
}
48
+
49
+
change_nixbld_names_and_ids