Skip to content

Commit

Permalink
make purge script more robust for Darwin (#18192)
Browse files Browse the repository at this point in the history
The existing purge script for Darwin would fail and stop at many stages.

This commit makes the script more robust to certain failures that were observed and documented in #16404
  • Loading branch information
siddarthkay authored Dec 19, 2023
1 parent da61233 commit 771fb11
Showing 1 changed file with 30 additions and 6 deletions.
36 changes: 30 additions & 6 deletions nix/scripts/purge.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ nix_purge_darwin_multi_user_service() {
cd /Library/LaunchDaemons
NIX_SERVICES=(org.nixos.darwin-store.plist org.nixos.nix-daemon.plist)
for NIX_SERVICE in "${NIX_SERVICES[@]}"; do
sudo launchctl unload "${NIX_SERVICE}"
sudo launchctl remove "${NIX_SERVICE}"
sudo launchctl unload "${NIX_SERVICE}" || true
sudo launchctl remove "${NIX_SERVICE}" || true
done
}

Expand All @@ -41,15 +41,39 @@ nix_purge_darwin_multi_user_users() {
nix_purge_darwin_multi_user_volumes() {
sudo sed -i.bkp '/nix/d' /etc/synthetic.conf
sudo sed -i.bkp '/nix/d' /etc/fstab
sudo diskutil apfs deleteVolume /nix

# Attempt to delete the volume
if ! sudo diskutil apfs deleteVolume /nix; then
echo "Failed to unmount /nix because it is in use."

# Identify the process using the volume
local pid=$(lsof +D /nix | awk 'NR==2{print $2}')
if [ -n "$pid" ]; then
echo "The volume /nix is in use by process ID $pid."

# Ask the user whether to terminate the process
read -p "Do you want to terminate this process? (y/n): " choice
if [[ $choice == "y" ]]; then
sudo kill $pid
echo "Process $pid terminated."
else
echo "Process not terminated. Please close it manually and retry."
return 1
fi
else
echo "No process found using /nix. Manual intervention required."
return 1
fi
fi

echo -e "${YLW}You will need to reboot your system!${RST}" >&2
}

nix_purge_multi_user() {
if [[ $(uname -s) == "Darwin" ]]; then
nix_purge_darwin_multi_user_service
nix_purge_darwin_multi_user_users
nix_purge_darwin_multi_user_volumes
nix_purge_darwin_multi_user_service || true
nix_purge_darwin_multi_user_users || true
nix_purge_darwin_multi_user_volumes || true
else
nix_purge_linux_multi_user_service
nix_purge_linux_multi_user_users
Expand Down

0 comments on commit 771fb11

Please sign in to comment.