Skip to content

Commit 1cb7adc

Browse files
committed
#90: SMF should use contract
1 parent 2658e1d commit 1cb7adc

File tree

6 files changed

+96
-46
lines changed

6 files changed

+96
-46
lines changed

.github/workflows/nshalman-sunos-releases.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ jobs:
3333
repo_token: "${{ secrets.GITHUB_TOKEN }}"
3434
prerelease: false
3535
files: |
36-
cmd/tailscaled/tailscale.xml
36+
cmd/tailscaled/smf/install
37+
cmd/tailscaled/smf/tailscale.xml
38+
cmd/tailscaled/smf/vpn-tailscale
3739
sha256sums
3840
tailscale-illumos
3941
tailscale-solaris

build.sh

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ for GOOS in illumos solaris; do
4040
mv tailscale{,-${GOOS}}
4141
done
4242

43-
ln cmd/tailscaled/tailscale.xml .
44-
shasum -a 256 tailscaled-* tailscale-* tailscale.xml >sha256sums
45-
rm ./tailscale.xml
43+
ln cmd/tailscaled/smf/tailscale.xml .
44+
ln cmd/tailscaled/smf/vpn-tailscale .
45+
ln cmd/tailscaled/smf/install .
46+
shasum -a 256 install tailscaled-* tailscale-* tailscale.xml vpn-tailscale>sha256sums
47+
rm ./tailscale.xml ./vpn-tailscale ./install

cmd/tailscaled/smf/install

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#!/usr/bin/env bash
2+
3+
set -o xtrace
4+
set -o errexit
5+
6+
fail () {
7+
echo "$@"
8+
exit 1
9+
}
10+
11+
PREFIX=/usr
12+
13+
# On a SmartOS GZ, use /opt
14+
if [[ $(zonename) == "global" ]] && uname -v | grep -q joyent
15+
then
16+
PREFIX=/opt
17+
fi
18+
19+
svcadm disable -t vpn/tailscale || true
20+
21+
# See https://github.com/nshalman/tailscale/issues/90
22+
# On hosts currently running taildrive
23+
# disable is kind of broken
24+
# clean up manually
25+
svccfg -s tailscale listprop startd/duration | grep -q contract || \
26+
echo "Cleaning up after broken SMF manifest"
27+
sleep 1
28+
pkill tailscaled || true
29+
svcadm disable -st vpn/tailscale || true
30+
svccfg delete vpn/tailscale
31+
32+
TMPDIR="$(mktemp -d)"
33+
pushd "${TMPDIR?}"
34+
35+
DOWNLOAD=https://github.com/nshalman/tailscale/releases/latest/download
36+
# TODO: Would this work for Solaris?? what is Solaris "uname -o"?
37+
OS="$(uname -o)"
38+
39+
curl -fLO "${DOWNLOAD}/sha256sums"
40+
curl -fLO "${DOWNLOAD}/tailscaled-${OS?}"
41+
curl -fLO "${DOWNLOAD}/tailscale.xml"
42+
curl -fLO "${DOWNLOAD}/vpn-tailscale"
43+
44+
sha256sum --ignore-missing -c sha256sums
45+
rm sha256sums
46+
47+
chmod +x "tailscaled-${OS?}"
48+
chmod +x "vpn-tailscale"
49+
mv "tailscaled-${OS?}" "/${PREFIX?}/local/sbin/tailscaled"
50+
rm -f "/${PREFIX?}/local/sbin/tailscale"
51+
ln -s tailscaled "/${PREFIX?}/local/sbin/tailscale"
52+
<tailscale.xml | sed "s/@@PREFIX@@/${PREFIX?}/" > import.xml
53+
svccfg import import.xml
54+
svccfg setprop vpn/tailscale application/binary="/${PREFIX?}/local/sbin/tailscaled"
55+
svcadm enable -st vpn/tailscale
56+
rm tailscale.xml import.xml
57+
58+
popd
59+
rm -rf "${TMPDIR}"
60+
61+
sleep 2
62+
tailscale status

cmd/tailscaled/tailscale.xml renamed to cmd/tailscaled/smf/tailscale.xml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@
1313
<method_context>
1414
<method_credential group='root' user='root'/>
1515
</method_context>
16-
<exec_method name='start' type='method' exec='/usr/local/sbin/tailscaled' timeout_seconds='60'/>
17-
<exec_method name='stop' type='method' exec=':kill' timeout_seconds='60'/>
18-
<property_group name='application' type='application'/>
19-
<property_group name='startd' type='framework'>
20-
<propval name='duration' type='astring' value='child'/>
21-
<propval name='ignore_error' type='astring' value='core,signal'/>
16+
<exec_method name='start' type='method' exec='/@@PREFIX@@/local/lib/svc/method/vpn-tailscale %m' timeout_seconds='5'/>
17+
<exec_method name='stop' type='method' exec='/@@PREFIX@@/local/lib/svc/method/vpn-tailscale %m %{restarter/contract}' timeout_seconds='5'/>
18+
<property_group name='application' type='application'>
19+
<propval name='binary' type='astring' value='/@@PREFIX@@/local/sbin/tailscaled'/>
2220
</property_group>
2321
<stability value='Evolving'/>
2422
<template>

cmd/tailscaled/smf/vpn-tailscale

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/sbin/sh
2+
# Init script for tailscaled.
3+
4+
. /lib/svc/share/smf_include.sh
5+
6+
TAILSCALED=$(svcprop -p application/binary $SMF_FMRI)
7+
case "$1" in
8+
start)
9+
smf_clear_env
10+
"${TAILSCALED?}" &
11+
;;
12+
stop)
13+
smf_kill_contract $2 TERM 60
14+
"${TAILSCALED?}" --cleanup
15+
;;
16+
*)
17+
echo "Usage: $0 {start|stop}" >&2
18+
exit 1
19+
;;
20+
esac
21+
22+
exit $SMF_EXIT_OK

cmd/tailscaled/tailscale-smartos-gz.xml

Lines changed: 0 additions & 36 deletions
This file was deleted.

0 commit comments

Comments
 (0)