This commit is contained in:
Owen Qwen
2026-08-31 16:44:54 -05:00
parent e71b3ada71
commit 5f99d9b137
21 changed files with 1045 additions and 47 deletions
+47 -1
View File
@@ -7,10 +7,17 @@ BIN_DIR="${HOME}/.local/bin"
STATE_DIR="${HOME}/Library/Application Support/UltraMesh"
LAUNCH_DIR="${HOME}/Library/LaunchAgents"
PLIST_PATH="${LAUNCH_DIR}/com.ultramesh.umnd.plist"
HELPER_BIN="/Library/PrivilegedHelperTools/com.ultramesh.umn-helper"
HELPER_PLIST="/Library/LaunchDaemons/com.ultramesh.umn-helper.plist"
HELPER_SOCKET="/var/run/ultramesh-helper.sock"
RESOLVER_PATH="/etc/resolver/mesh"
TEMP_DIR=$(mktemp -d)
trap 'rm -rf "${TEMP_DIR}"' EXIT
cd "${PROJECT_DIR}"
swift build -c release --product umnd
swift build -c release --product umn
swift build -c release --product umn-helper
BUILD_DIR=$(swift build -c release --show-bin-path)
mkdir -p "${BIN_DIR}" "${STATE_DIR}" "${LAUNCH_DIR}"
@@ -18,6 +25,38 @@ install -m 755 "${BUILD_DIR}/umnd" "${BIN_DIR}/umnd"
install -m 755 "${BUILD_DIR}/umn" "${BIN_DIR}/umn"
codesign --force --sign - "${BIN_DIR}/umnd" >/dev/null 2>&1
codesign --force --sign - "${BIN_DIR}/umn" >/dev/null 2>&1
codesign --force --sign - "${BUILD_DIR}/umn-helper" >/dev/null 2>&1
cat > "${TEMP_DIR}/helper.plist" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
<key>Label</key><string>com.ultramesh.umn-helper</string>
<key>ProgramArguments</key><array><string>${HELPER_BIN}</string><string>--uid</string><string>${UID}</string><string>--socket</string><string>${HELPER_SOCKET}</string></array>
<key>RunAtLoad</key><true/><key>KeepAlive</key><true/>
<key>StandardOutPath</key><string>/var/log/ultramesh-helper.log</string>
<key>StandardErrorPath</key><string>/var/log/ultramesh-helper.log</string>
</dict></plist>
EOF
cat > "${TEMP_DIR}/resolver" <<'EOF'
# Managed by Ultra Mesh Network
nameserver 127.0.0.1
port 53535
EOF
plutil -lint "${TEMP_DIR}/helper.plist" >/dev/null
if [[ -e "${RESOLVER_PATH}" ]] && ! cmp -s "${TEMP_DIR}/resolver" "${RESOLVER_PATH}"; then
echo "Refusing to overwrite unmanaged ${RESOLVER_PATH}." >&2
exit 1
fi
sudo -v
sudo launchctl bootout system "${HELPER_PLIST}" >/dev/null 2>&1 || true
sudo install -d -m 755 /Library/PrivilegedHelperTools /Library/LaunchDaemons /etc/resolver
sudo install -m 755 "${BUILD_DIR}/umn-helper" "${HELPER_BIN}"
sudo install -m 644 "${TEMP_DIR}/helper.plist" "${HELPER_PLIST}"
sudo install -m 644 "${TEMP_DIR}/resolver" "${RESOLVER_PATH}"
sudo launchctl bootstrap system "${HELPER_PLIST}"
launchctl bootout "gui/${UID}" "${PLIST_PATH}" >/dev/null 2>&1 || true
plutil -create xml1 "${PLIST_PATH}"
@@ -32,9 +71,16 @@ plutil -insert StandardErrorPath -string "${STATE_DIR}/umnd.log" "${PLIST_PATH}"
chmod 600 "${PLIST_PATH}"
launchctl bootstrap "gui/${UID}" "${PLIST_PATH}"
for _ in {1..20}; do [[ -S "${HELPER_SOCKET}" ]] && [[ -S "${STATE_DIR}/umnd.sock" ]] && break; sleep 0.25; done
echo "Ultra Mesh Network installed."
echo "Binary directory: ${BIN_DIR}"
if [[ ":${PATH}:" != *":${BIN_DIR}:"* ]]; then
echo "Add this line to ~/.zshrc: export PATH=\"\$HOME/.local/bin:\$PATH\""
fi
"${BIN_DIR}/umn" status
STATUS=$("${BIN_DIR}/umn" status)
echo "${STATUS}"
INTERFACE=$("${BIN_DIR}/umn" interface status)
echo "${INTERFACE}"
[[ "${STATUS}" == *"DNS listening"* ]] || { echo "DNS health check failed (port 53535 may be busy)." >&2; exit 1; }
[[ "${INTERFACE}" == *"helper: connected"* ]] || { echo "native interface health check failed." >&2; exit 1; }
+17 -1
View File
@@ -3,11 +3,27 @@ set -euo pipefail
BIN_DIR="${HOME}/.local/bin"
PLIST_PATH="${HOME}/Library/LaunchAgents/com.ultramesh.umnd.plist"
HELPER_BIN="/Library/PrivilegedHelperTools/com.ultramesh.umn-helper"
HELPER_PLIST="/Library/LaunchDaemons/com.ultramesh.umn-helper.plist"
RESOLVER_PATH="/etc/resolver/mesh"
TEMP_RESOLVER=$(mktemp)
trap 'rm -f "${TEMP_RESOLVER}"' EXIT
cat > "${TEMP_RESOLVER}" <<'EOF'
# Managed by Ultra Mesh Network
nameserver 127.0.0.1
port 53535
EOF
launchctl bootout "gui/${UID}" "${PLIST_PATH}" >/dev/null 2>&1 || true
[[ ! -e "${PLIST_PATH}" ]] || unlink "${PLIST_PATH}"
[[ ! -e "${BIN_DIR}/umnd" ]] || unlink "${BIN_DIR}/umnd"
[[ ! -e "${BIN_DIR}/umn" ]] || unlink "${BIN_DIR}/umn"
echo "Binaries and LaunchAgent removed."
sudo -v
sudo launchctl bootout system "${HELPER_PLIST}" >/dev/null 2>&1 || true
[[ ! -e "${HELPER_PLIST}" ]] || sudo unlink "${HELPER_PLIST}"
[[ ! -e "${HELPER_BIN}" ]] || sudo unlink "${HELPER_BIN}"
if [[ -e "${RESOLVER_PATH}" ]] && cmp -s "${TEMP_RESOLVER}" "${RESOLVER_PATH}"; then sudo unlink "${RESOLVER_PATH}"; fi
echo "Binaries, LaunchAgent, LaunchDaemon, routes, interface, and managed resolver removed."
echo "Identity and configuration were preserved in ~/Library/Application Support/UltraMesh."