4 ## Run the command discarding all of its output.
9 ## Restart the services we know about.
11 echo -n
"Restarting services:"
13 ## Make sure that the server is actually running.
14 if ! silently tripectl version
; then
15 echo " tripe server not running."
19 ## Find out which of our services are actually configured to start.
20 ## We'll assume that a link to the service script is a good indication.
21 need_restart
=$
(perl
-e
'
22 for my $svc (@ARGV) { $svc{$svc} = 1; }
23 for my $link (</etc/tripe/services/*>) {
25 my $targ = readlink $link;
26 next unless defined $targ;
28 m#/usr/lib/(?:[^/]+/)?tripe/services/([^/]+)#;
29 next unless exists $svc{$1};
33 ## If there's nothing to do then don't bother with the rest.
35 for svc
in $need_restart; do any
=t
; break; done
36 case $any in nil
) echo " none configured."; return 0 ;; esac
38 ## Restart the services. This is more than a little tricky.
39 for svc
in $need_restart; do
41 ## Find out about the service.
42 set -- $
("$svc" --version
)
43 name
="$1" version
="$2"
45 ## Write some progress.
48 ## If there's an instance of the service running already then we ask it
49 ## to quit. This is where everything gets commplicated.
50 if silently tripectl svcensure
"$name"; then
52 ## So, what we want to do is ask the service to quit, and make sure it
53 ## actually has done before starting the new version. Conveniently,
54 ## the server emits a notification when a service quits. Now all we
55 ## have to do is wait a reasonable time for the notification.
57 ## So we read the output of tripectl(1). Of course, to do this, we
58 ## must keep its standard input open, so we'll sleep for a bit. We can
59 ## use this to implement our timeout. The only problem is curtailing
60 ## the wait early if (as we expect) the service actually quits on time.
61 ## The answer is /very/ cheesy: we'll report the process-id of our
62 ## sleep(1) process through the server's notification mechanism. Then,
63 ## when we see the `SVCRELEASE', we kill the sleep(1) and return
66 echo svcsubmit
"$name" quit
68 echo notify tripe-peer-services.postinst.$$ SLEEPKID
=$sleepkid
74 "NOTE USER tripe-peer-services.postinst.$$ SLEEPKID="*)
77 "NOTE SVCRELEASE $name")
89 ## Restart the service. Pass `--startup' because (a) the server might
90 ## have started recently, and failed to start our services, and (b) our
91 ## services are (modulo some annoying warning messages) idempotent
93 if ! "$svc" --daemon
--startup
; then echo -n
" (FAILED)"; fi
98 restart_services conntrack connect watch