macOS: persistent home lives at /Volumes/vmix-home/<user> (no mount over /Users)
macOS refuses to mount a volume over /Users (firmlink), and a failing fstab entry also suppresses the automount. Point NFSHomeDirectory at the automounted volume instead. Profile: Dock entries need tile-type/file URL; wait for the wallpaper store before shutting down. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XsESshRCoBoUVWV9qKURUF
This commit is contained in:
parent
0f9373263d
commit
e241364ce9
4 changed files with 23 additions and 17 deletions
|
|
@ -22,9 +22,10 @@
|
|||
uuid ? null,
|
||||
mac ? null,
|
||||
seed ? "${hostname}-${username}",
|
||||
# mount an APFS volume labelled vmix-home (a virtio-blk/AHCI disk the host
|
||||
# provides, formatted by the PE on first start) at /Users: ephemeral OS disk,
|
||||
# persistent home directories
|
||||
# keep the user's home on an APFS volume labelled vmix-home (a virtio-blk disk
|
||||
# the host provides, formatted by the PE on first start). macOS refuses mounts
|
||||
# over /Users (firmlink), so the volume automounts at /Volumes/<label> and the
|
||||
# account's home directory lives there: ephemeral OS disk, persistent home.
|
||||
persistHome ? false,
|
||||
homeVolumeLabel ? "vmix-home",
|
||||
# no desktop widgets for the created user (Sonoma+)
|
||||
|
|
@ -61,6 +62,7 @@ in
|
|||
${lib.optionalString (!delayOobeRun) ''
|
||||
# --- user account (admin), created directly in the local directory node
|
||||
U="${username}"; HOME_DIR="$DATA/Users/$U"
|
||||
${lib.optionalString persistHome ''HOME_PATH="/Volumes/${homeVolumeLabel}/$U"''}
|
||||
if ! D -read "/Local/Default/Users/$U" >/dev/null 2>&1; then
|
||||
UID_NEW=$(D -list /Local/Default/Users UniqueID | awk '$2 >= 501 && $2 < 1000 && $2 > m {m = $2} END {print (m ? m + 1 : 501)}')
|
||||
D -create "/Local/Default/Users/$U" || pe_fail "dscl create user"
|
||||
|
|
@ -68,7 +70,7 @@ in
|
|||
D -create "/Local/Default/Users/$U" RealName ${lib.escapeShellArg fullName}
|
||||
D -create "/Local/Default/Users/$U" UniqueID "$UID_NEW"
|
||||
D -create "/Local/Default/Users/$U" PrimaryGroupID 20
|
||||
D -create "/Local/Default/Users/$U" NFSHomeDirectory "/Users/$U"
|
||||
D -create "/Local/Default/Users/$U" NFSHomeDirectory "${if persistHome then "/Volumes/${homeVolumeLabel}/$U" else "/Users/$U"}"
|
||||
if ! D -passwd "/Local/Default/Users/$U" ${lib.escapeShellArg password}; then
|
||||
echo "vmix: WARNING: could not set the requested password, using '${tempPassword}'"
|
||||
D -passwd "/Local/Default/Users/$U" "${tempPassword}" || pe_fail "dscl passwd"
|
||||
|
|
@ -132,11 +134,9 @@ in
|
|||
pe_plist_set "$KT" keyboardtype.1-1575-0 integer 40
|
||||
|
||||
${lib.optionalString persistHome ''
|
||||
# --- home directories on the host-provided persistent volume (fstab by label;
|
||||
# diskarbitrationd mounts it at /Users when a volume named ${homeVolumeLabel} exists)
|
||||
F="$DATA/private/etc/fstab"
|
||||
grep -q "LABEL=${homeVolumeLabel}" "$F" 2>/dev/null || echo "LABEL=${homeVolumeLabel} /Users apfs rw 0 2" >> "$F"
|
||||
chmod 644 "$F"; chown 0:0 "$F"
|
||||
# --- persistent home: the seeded home directory on the Data volume is the
|
||||
# template loginwindow copies to /Volumes/${homeVolumeLabel}/$U at first login
|
||||
# (the volume is automounted by diskarbitrationd before the login)
|
||||
''}
|
||||
|
||||
# --- use the whole (possibly grown) disk
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue