#!/bin/sh set -e # 设置日志文件 LOG_FILE="/tmp/mihomo-party-install.log" exec > "$LOG_FILE" 2>&1 log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" } # 检查 root 权限 if [ "$EUID" -ne 0 ]; then log "Error: Please run as root" exit 1 fi # 判断 $2 是否以 .app 结尾 if [[ $2 == *".app" ]]; then APP_PATH="$2" else APP_PATH="$2/Mihomo Party.app" fi HELPER_PATH="/Library/PrivilegedHelperTools/party.mihomo.helper" LAUNCH_DAEMON="/Library/LaunchDaemons/party.mihomo.helper.plist" log "Starting installation..." # 创建目录并设置权限 log "Creating directories and setting permissions..." mkdir -p "/Library/PrivilegedHelperTools" chmod 755 "/Library/PrivilegedHelperTools" chown root:wheel "/Library/PrivilegedHelperTools" # 设置核心文件权限 log "Setting core file permissions..." if [ -f "$APP_PATH/Contents/Resources/sidecar/mihomo" ]; then chown root:admin "$APP_PATH/Contents/Resources/sidecar/mihomo" chmod +s "$APP_PATH/Contents/Resources/sidecar/mihomo" log "Set permissions for mihomo" else log "Warning: mihomo binary not found at $APP_PATH/Contents/Resources/sidecar/mihomo" fi if [ -f "$APP_PATH/Contents/Resources/sidecar/mihomo-alpha" ]; then chown root:admin "$APP_PATH/Contents/Resources/sidecar/mihomo-alpha" chmod +s "$APP_PATH/Contents/Resources/sidecar/mihomo-alpha" log "Set permissions for mihomo-alpha" else log "Warning: mihomo-alpha binary not found at $APP_PATH/Contents/Resources/sidecar/mihomo-alpha" fi # 复制 helper 工具 log "Installing helper tool..." if [ -f "$APP_PATH/Contents/Resources/files/party.mihomo.helper" ]; then cp -f "$APP_PATH/Contents/Resources/files/party.mihomo.helper" "$HELPER_PATH" chown root:wheel "$HELPER_PATH" chmod 544 "$HELPER_PATH" log "Helper tool installed successfully" else log "Error: Helper file not found at $APP_PATH/Contents/Resources/files/party.mihomo.helper" exit 1 fi # 创建并配置 LaunchDaemon log "Configuring LaunchDaemon..." mkdir -p "/Library/LaunchDaemons" cat << EOF > "$LAUNCH_DAEMON" Label party.mihomo.helper AssociatedBundleIdentifiers party.mihomo.app KeepAlive Program ${HELPER_PATH} StandardErrorPath /tmp/party.mihomo.helper.err StandardOutPath /tmp/party.mihomo.helper.log EOF chown root:wheel "$LAUNCH_DAEMON" chmod 644 "$LAUNCH_DAEMON" log "LaunchDaemon configured" # 加载并启动服务 log "Loading and starting service..." launchctl unload "$LAUNCH_DAEMON" 2>/dev/null || true if ! launchctl load "$LAUNCH_DAEMON"; then log "Error: Failed to load helper service" exit 1 fi if ! launchctl start party.mihomo.helper; then log "Error: Failed to start helper service" exit 1 fi log "Installation completed successfully" exit 0