@@ -31,25 +31,31 @@ if [ "${1}" = "uninstall" ]; then
3131 pilotctl gateway stop 2> /dev/null || true
3232 fi
3333
34- # Remove system service
35- if [ " $OS " = " linux" ] && [ -f /etc/systemd/system/pilot-daemon.service ] ; then
34+ # Remove system services (daemon + updater)
35+ if [ " $OS " = " linux" ]; then
3636 if [ " $( id -u) " = " 0" ] || sudo -n true 2> /dev/null; then
37- sudo systemctl stop pilot-daemon 2> /dev/null || true
38- sudo systemctl disable pilot-daemon 2> /dev/null || true
39- sudo rm -f /etc/systemd/system/pilot-daemon.service
37+ for svc in pilot-daemon pilot-updater; do
38+ if [ -f " /etc/systemd/system/${svc} .service" ]; then
39+ sudo systemctl stop " $svc " 2> /dev/null || true
40+ sudo systemctl disable " $svc " 2> /dev/null || true
41+ sudo rm -f " /etc/systemd/system/${svc} .service"
42+ fi
43+ done
4044 sudo systemctl daemon-reload
41- echo " Removed systemd service "
45+ echo " Removed systemd services "
4246 else
4347 echo " Skipped systemd removal (run with sudo to remove)"
4448 fi
4549 fi
4650 if [ " $OS " = " darwin" ]; then
47- PLIST=" $HOME /Library/LaunchAgents/com.vulturelabs.pilot-daemon.plist"
48- if [ -f " $PLIST " ]; then
49- launchctl unload " $PLIST " 2> /dev/null || true
50- rm -f " $PLIST "
51- echo " Removed LaunchAgent"
52- fi
51+ for label in com.vulturelabs.pilot-daemon com.vulturelabs.pilot-updater; do
52+ PLIST=" $HOME /Library/LaunchAgents/${label} .plist"
53+ if [ -f " $PLIST " ]; then
54+ launchctl unload " $PLIST " 2> /dev/null || true
55+ rm -f " $PLIST "
56+ fi
57+ done
58+ echo " Removed LaunchAgents"
5359 fi
5460
5561 # Remove pilot directory (binaries, config, identity, received files)
@@ -165,6 +171,8 @@ if [ -z "$TAG" ]; then
165171 CGO_ENABLED=0 go build -o " $TMPDIR /pilotctl" " $TMPDIR /src/cmd/pilotctl"
166172 echo " Building gateway..."
167173 CGO_ENABLED=0 go build -o " $TMPDIR /pilot-gateway" " $TMPDIR /src/cmd/gateway"
174+ echo " Building updater..."
175+ CGO_ENABLED=0 go build -o " $TMPDIR /pilot-updater" " $TMPDIR /src/cmd/updater"
168176fi
169177
170178# --- Install binaries to ~/.pilot/bin ---
@@ -184,7 +192,13 @@ if [ -f "$TMPDIR/gateway" ]; then
184192else
185193 cp " $TMPDIR /pilot-gateway" " $BIN_DIR /pilot-gateway"
186194fi
195+ if [ -f " $TMPDIR /updater" ]; then
196+ cp " $TMPDIR /updater" " $BIN_DIR /pilot-updater"
197+ elif [ -f " $TMPDIR /pilot-updater" ]; then
198+ cp " $TMPDIR /pilot-updater" " $BIN_DIR /pilot-updater"
199+ fi
187200chmod 755 " $BIN_DIR /pilot-daemon" " $BIN_DIR /pilotctl" " $BIN_DIR /pilot-gateway"
201+ [ -f " $BIN_DIR /pilot-updater" ] && chmod 755 " $BIN_DIR /pilot-updater"
188202
189203# --- Symlink to /usr/local/bin if writable, otherwise skip ---
190204
@@ -193,17 +207,21 @@ if [ -d "$LINK_DIR" ] && [ -w "$LINK_DIR" ]; then
193207 ln -sf " $BIN_DIR /pilot-daemon" " $LINK_DIR /pilot-daemon"
194208 ln -sf " $BIN_DIR /pilotctl" " $LINK_DIR /pilotctl"
195209 ln -sf " $BIN_DIR /pilot-gateway" " $LINK_DIR /pilot-gateway"
210+ [ -f " $BIN_DIR /pilot-updater" ] && ln -sf " $BIN_DIR /pilot-updater" " $LINK_DIR /pilot-updater"
196211 echo " Symlinked to ${LINK_DIR} "
197212fi
198213
199214# --- Update: stop here, skip config/service/PATH setup ---
200215
201216if [ " $UPDATING " = true ]; then
217+ # Write version file for the auto-updater
218+ [ -n " $TAG " ] && echo " $TAG " > " $BIN_DIR /.pilot-version"
202219 echo " "
203220 echo " Updated to ${TAG:- source} :"
204- echo " pilot-daemon ${BIN_DIR} /pilot-daemon"
205- echo " pilotctl ${BIN_DIR} /pilotctl"
206- echo " pilot-gateway ${BIN_DIR} /pilot-gateway"
221+ echo " pilot-daemon ${BIN_DIR} /pilot-daemon"
222+ echo " pilotctl ${BIN_DIR} /pilotctl"
223+ echo " pilot-gateway ${BIN_DIR} /pilot-gateway"
224+ echo " pilot-updater ${BIN_DIR} /pilot-updater"
207225 echo " "
208226 echo " Restart the daemon to use the new version:"
209227 echo " pilotctl daemon stop && pilotctl daemon start"
@@ -266,10 +284,32 @@ RestartSec=5
266284[Install]
267285WantedBy=multi-user.target
268286SVC
287+ # Auto-updater service
288+ if [ -f " $BIN_DIR /pilot-updater" ]; then
289+ sudo tee /etc/systemd/system/pilot-updater.service > /dev/null << USVC
290+ [Unit]
291+ Description=Pilot Protocol Auto-Updater
292+ After=network-online.target
293+ Wants=network-online.target
294+
295+ [Service]
296+ Type=simple
297+ User=$( whoami)
298+ ExecStart=${BIN_DIR} /pilot-updater \\
299+ -install-dir ${BIN_DIR}
300+ Restart=always
301+ RestartSec=30
302+
303+ [Install]
304+ WantedBy=multi-user.target
305+ USVC
306+ fi
307+
269308 sudo systemctl daemon-reload
270309 echo " Service: pilot-daemon.service"
271- echo " Start: sudo systemctl start pilot-daemon"
272- echo " Enable: sudo systemctl enable pilot-daemon"
310+ echo " Service: pilot-updater.service (auto-updates)"
311+ echo " Start: sudo systemctl start pilot-daemon pilot-updater"
312+ echo " Enable: sudo systemctl enable pilot-daemon pilot-updater"
273313 else
274314 echo " Skipped systemd setup (run as root or with passwordless sudo to enable)"
275315 fi
@@ -327,7 +367,37 @@ ${EXTRA_ARGS} </array>
327367</dict>
328368</plist>
329369PLIST
370+ # Auto-updater LaunchAgent
371+ if [ -f " $BIN_DIR /pilot-updater" ]; then
372+ UPLIST=" $PLIST_DIR /com.vulturelabs.pilot-updater.plist"
373+ cat > " $UPLIST " << UPLIST
374+ <?xml version="1.0" encoding="UTF-8"?>
375+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
376+ <plist version="1.0">
377+ <dict>
378+ <key>Label</key>
379+ <string>com.vulturelabs.pilot-updater</string>
380+ <key>ProgramArguments</key>
381+ <array>
382+ <string>${BIN_DIR} /pilot-updater</string>
383+ <string>-install-dir</string>
384+ <string>${BIN_DIR} </string>
385+ </array>
386+ <key>RunAtLoad</key>
387+ <true/>
388+ <key>KeepAlive</key>
389+ <true/>
390+ <key>StandardOutPath</key>
391+ <string>${PILOT_DIR} /updater.log</string>
392+ <key>StandardErrorPath</key>
393+ <string>${PILOT_DIR} /updater.log</string>
394+ </dict>
395+ </plist>
396+ UPLIST
397+ fi
398+
330399 echo " Service: com.vulturelabs.pilot-daemon"
400+ echo " Service: com.vulturelabs.pilot-updater (auto-updates)"
331401 echo " Start: launchctl load $PLIST "
332402 echo " Stop: launchctl unload $PLIST "
333403fi
358428
359429# --- Verify ---
360430
431+ # Write version file for the auto-updater
432+ [ -n " $TAG " ] && echo " $TAG " > " $BIN_DIR /.pilot-version"
433+
361434echo " "
362435echo " Installed:"
363- echo " pilot-daemon ${BIN_DIR} /pilot-daemon"
364- echo " pilotctl ${BIN_DIR} /pilotctl"
365- echo " pilot-gateway ${BIN_DIR} /pilot-gateway"
436+ echo " pilot-daemon ${BIN_DIR} /pilot-daemon"
437+ echo " pilotctl ${BIN_DIR} /pilotctl"
438+ echo " pilot-gateway ${BIN_DIR} /pilot-gateway"
439+ echo " pilot-updater ${BIN_DIR} /pilot-updater (auto-updates in background)"
366440echo " "
367441echo " Config: ${PILOT_DIR} /config.json"
368442echo " Registry: ${REGISTRY} "
0 commit comments