forked from Jackett/Jackett
-
Notifications
You must be signed in to change notification settings - Fork 0
/
install_service_macos
executable file
·100 lines (87 loc) · 3.22 KB
/
install_service_macos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/bin/zsh
# Setting up colors
BOLDRED="$(printf '\033[1;31m')"
BOLDGREEN="$(printf '\033[1;32m')"
NC="$(printf '\033[0m')" # No Color
userid=$(id -u)
# Stop and unload the service if it's running
launchctl bootout gui/${userid}/org.user.Jackett &>/dev/null
# Move working directory to Jackett's
cd "$(dirname "$0")"
# Check if we're running from Jackett's directory
if [ ! -f ./jackett ]; then
echo "${BOLDRED}ERROR${NC}: Couldn't locate ./jackett - Is the script in the right directory?"
exit 1
fi
jackettdir="$(pwd)"
# Check that no other service called Jackett is already running
if [[ $(launchctl list | grep org.user.Jackett) ]]; then
echo "${BOLDRED}ERROR${NC}: Jackett already seems to be running as a service. Please stop it before running this script again."
exit 1
fi
# Write the plist to LaunchAgents
mkdir -p ~/Library/LaunchAgents/
cat >~/Library/LaunchAgents/org.user.Jackett.plist <<EOL
<?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>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>org.user.Jackett</string>
<key>ProgramArguments</key>
<array>
<string>${jackettdir}/jackett</string>
<string>--NoRestart</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>${jackettdir}</string>
</dict>
</plist>
EOL
# Un-quarantine all dylib and DLL files
qstr="$(xattr -p com.apple.quarantine jackett)" 2>/dev/null
if [[ $qstr ]]; then
echo "Removing Jackett executable and all .dylib and .dll files from quarantine..."
qstr="00c1${qstr:4}"
xattr -w com.apple.quarantine $qstr jackett
xattr -w com.apple.quarantine $qstr *.{dylib,dll}
fi
# Run the agent
echo "Launching agent..."
#launchctl load ~/Library/LaunchAgents/org.user.Jackett.plist
launchctl bootstrap gui/${userid} ~/Library/LaunchAgents/org.user.Jackett.plist
sleep .5
# Check that it's loaded
if [[ $(launchctl list | grep org.user.Jackett) ]]; then
# Check that service is running
if [[ $(launchctl print gui/${userid}/org.user.Jackett | grep 'state') =~ "running" ]]; then
echo "${BOLDGREEN}Agent successfully installed and running!${NC}"
echo "Jackett location: ${jackettdir}"
echo "Jackett agent:"
launchctl print gui/${userid}/org.user.Jackett | egrep 'state|pid |path|working'
else
cat << EOL
${BOLDRED}ERROR${NC}: Agent was loaded but is not running. The installation might have failed.
Please open an issue on https://github.com/Jackett/Jackett/issues and paste following information:
*Jackett directory*: ${jackettdir}
*launchctl info*:
$(launchctl print gui/${userid}/org.user.Jackett)
*LaunchAgents permissions*:
$(ls -la ~/Library/LaunchAgents | egrep ' \.|Jackett')
EOL
fi
else
echo "${BOLDRED}ERROR${NC}: Agent could not be loaded. Please open an issue on https://github.com/Jackett/Jackett/issues and paste the output."
echo "*Jackett directory*: ${jackettdir}"
echo "*LaunchAgents permissions*:"
ls -la ~/Library/LaunchAgents | egrep ' \.|Jackett'
fi