tailscale+tailscaled now completely obsoletes relaynode, so let's let it finally go away.main
parent
73fccd8b06
commit
a56e853b72
@ -1,14 +0,0 @@ |
|||||||
/*.tar.gz |
|
||||||
/*.deb |
|
||||||
/*.rpm |
|
||||||
/*.spec |
|
||||||
/pkgver |
|
||||||
debian/changelog |
|
||||||
debian/debhelper-build-stamp |
|
||||||
debian/files |
|
||||||
debian/*.log |
|
||||||
debian/*.substvars |
|
||||||
debian/*.debhelper |
|
||||||
debian/tailscale-relay |
|
||||||
/tailscale-relay/ |
|
||||||
/tailscale-relay-* |
|
||||||
@ -1 +0,0 @@ |
|||||||
rm -f debian/changelog *~ debian/*~ |
|
||||||
@ -1,13 +0,0 @@ |
|||||||
exec >&2 |
|
||||||
read -r package <package |
|
||||||
rm -f *~ .*~ \ |
|
||||||
debian/*~ debian/changelog debian/debhelper-build-stamp \ |
|
||||||
debian/*.log debian/files debian/*.substvars debian/*.debhelper \ |
|
||||||
*.tar.gz *.deb *.rpm *.spec pkgver relaynode *.exe |
|
||||||
[ -n "$package" ] && rm -rf "debian/$package" |
|
||||||
for d in */.stamp; do |
|
||||||
if [ -e "$d" ]; then |
|
||||||
dir=$(dirname "$d") |
|
||||||
rm -rf "$dir" |
|
||||||
fi |
|
||||||
done |
|
||||||
@ -1,10 +0,0 @@ |
|||||||
exec >&2 |
|
||||||
dir=${1%/*} |
|
||||||
redo-ifchange "$S/$dir/package" "$S/oss/version/short.txt" |
|
||||||
read -r package <"$S/$dir/package" |
|
||||||
read -r version <"$S/oss/version/short.txt" |
|
||||||
arch=$(dpkg --print-architecture) |
|
||||||
|
|
||||||
redo-ifchange "$dir/${package}_$arch.deb" |
|
||||||
rm -f "$dir/${package}"_*_"$arch.deb" |
|
||||||
ln -sf "${package}_$arch.deb" "$dir/${package}_${version}_$arch.deb" |
|
||||||
@ -1 +0,0 @@ |
|||||||
Tailscale IPN relay daemon. |
|
||||||
@ -1,5 +0,0 @@ |
|||||||
redo-ifchange ../../../version/short.txt gen-changelog |
|
||||||
( |
|
||||||
cd .. |
|
||||||
debian/gen-changelog |
|
||||||
) >$3 |
|
||||||
@ -1 +0,0 @@ |
|||||||
9 |
|
||||||
@ -1,14 +0,0 @@ |
|||||||
Source: tailscale-relay |
|
||||||
Section: net |
|
||||||
Priority: extra |
|
||||||
Maintainer: Avery Pennarun <apenwarr@tailscale.com> |
|
||||||
Build-Depends: debhelper (>= 10.2.5), dh-systemd (>= 1.5) |
|
||||||
Standards-Version: 3.9.2 |
|
||||||
Homepage: https://tailscale.com/ |
|
||||||
Vcs-Git: https://github.com/tailscale/tailscale |
|
||||||
Vcs-Browser: https://github.com/tailscale/tailscale |
|
||||||
|
|
||||||
Package: tailscale-relay |
|
||||||
Architecture: any |
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends} |
|
||||||
Description: Traffic relay node for Tailscale IPN |
|
||||||
@ -1,11 +0,0 @@ |
|||||||
Format: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=173 |
|
||||||
Upstream-Name: tailscale-relay |
|
||||||
Upstream-Contact: Avery Pennarun <apenwarr@tailscale.com> |
|
||||||
Source: https://github.com/tailscale/tailscale/ |
|
||||||
|
|
||||||
Files: * |
|
||||||
Copyright: © 2019 Tailscale Inc. <info@tailscale.com> |
|
||||||
License: Proprietary |
|
||||||
* |
|
||||||
* Copyright 2019 Tailscale Inc. All rights reserved. |
|
||||||
* |
|
||||||
@ -1,25 +0,0 @@ |
|||||||
#!/bin/sh |
|
||||||
read junk pkgname <debian/control |
|
||||||
read shortver <../../version/short.txt |
|
||||||
git log --pretty='format:'"$pkgname"' (SHA:%H) unstable; urgency=low |
|
||||||
|
|
||||||
* %s |
|
||||||
|
|
||||||
-- %aN <%aE> %aD |
|
||||||
' . | |
|
||||||
python -Sc ' |
|
||||||
import os, re, subprocess, sys |
|
||||||
|
|
||||||
first = True |
|
||||||
def Describe(g): |
|
||||||
global first |
|
||||||
if first: |
|
||||||
s = sys.argv[1] |
|
||||||
first = False |
|
||||||
else: |
|
||||||
sha = g.group(1) |
|
||||||
s = subprocess.check_output(["git", "describe", "--always", "--", sha]).strip().decode("utf-8") |
|
||||||
return re.sub(r"^\D*", "", s) |
|
||||||
|
|
||||||
print(re.sub(r"SHA:([0-9a-f]+)", Describe, sys.stdin.read())) |
|
||||||
' "$shortver" |
|
||||||
@ -1,3 +0,0 @@ |
|||||||
relaynode /usr/sbin |
|
||||||
tailscale-login /usr/sbin |
|
||||||
taillogin /usr/sbin |
|
||||||
@ -1,8 +0,0 @@ |
|||||||
#DEBHELPER# |
|
||||||
|
|
||||||
f=/var/lib/tailscale/relay.conf |
|
||||||
if ! [ -e "$f" ]; then |
|
||||||
echo |
|
||||||
echo "Note: Run tailscale-login to configure $f." >&2 |
|
||||||
echo |
|
||||||
fi |
|
||||||
@ -1,10 +0,0 @@ |
|||||||
#!/usr/bin/make -f |
|
||||||
DESTDIR=debian/tailscale-relay |
|
||||||
|
|
||||||
override_dh_auto_test: |
|
||||||
override_dh_auto_install: |
|
||||||
mkdir -p "${DESTDIR}/etc/default" |
|
||||||
cp tailscale-relay.defaults "${DESTDIR}/etc/default/tailscale-relay" |
|
||||||
|
|
||||||
%: |
|
||||||
dh $@ --with=systemd |
|
||||||
@ -1,12 +0,0 @@ |
|||||||
[Unit] |
|
||||||
Description=Traffic relay node for Tailscale IPN |
|
||||||
After=network.target |
|
||||||
ConditionPathExists=/var/lib/tailscale/relay.conf |
|
||||||
|
|
||||||
[Service] |
|
||||||
EnvironmentFile=/etc/default/tailscale-relay |
|
||||||
ExecStart=/usr/sbin/relaynode --config=/var/lib/tailscale/relay.conf --tun=wg0 $PORT $FLAGS |
|
||||||
Restart=on-failure |
|
||||||
|
|
||||||
[Install] |
|
||||||
WantedBy=multi-user.target |
|
||||||
@ -1,21 +0,0 @@ |
|||||||
exec >&2 |
|
||||||
dir=${1%/*} |
|
||||||
redo-ifchange "$S/oss/version/short.txt" "$S/$dir/package" "$dir/debtmp.dir" |
|
||||||
read -r package <"$S/$dir/package" |
|
||||||
read -r version <"$S/oss/version/short.txt" |
|
||||||
arch=$(dpkg --print-architecture) |
|
||||||
|
|
||||||
( |
|
||||||
cd "$S/$dir" |
|
||||||
git ls-files debian | xargs redo-ifchange debian/changelog |
|
||||||
) |
|
||||||
cp -a "$S/$dir/debian" "$dir/debtmp/" |
|
||||||
rm -f "$dir/debtmp/debian/$package.debhelper.log" |
|
||||||
rm -f "$dir/${package}_${version}_${arch}.deb" |
|
||||||
( |
|
||||||
cd "$dir/debtmp" && |
|
||||||
debian/rules build && |
|
||||||
fakeroot debian/rules binary |
|
||||||
) |
|
||||||
|
|
||||||
mv "$dir/${package}_${version}_${arch}.deb" "$3" |
|
||||||
@ -1,20 +0,0 @@ |
|||||||
# Generate a directory tree suitable for forming a tarball of |
|
||||||
# this package. |
|
||||||
exec >&2 |
|
||||||
dir=${1%/*} |
|
||||||
outdir=$PWD/${1%.dir} |
|
||||||
rm -rf "$outdir" |
|
||||||
mkdir "$outdir" |
|
||||||
touch $outdir/.stamp |
|
||||||
sfiles=" |
|
||||||
tailscale-login |
|
||||||
debian/*.service |
|
||||||
*.defaults |
|
||||||
" |
|
||||||
ofiles=" |
|
||||||
relaynode |
|
||||||
../taillogin/taillogin |
|
||||||
" |
|
||||||
redo-ifchange "$outdir/.stamp" |
|
||||||
(cd "$S/$dir" && redo-ifchange $sfiles && cp $sfiles "$outdir/") |
|
||||||
(cd "$dir" && redo-ifchange $ofiles && cp $ofiles "$outdir/") |
|
||||||
@ -1,15 +0,0 @@ |
|||||||
exec >&2 |
|
||||||
dir=${1%/*} |
|
||||||
pkg=${1##*/} |
|
||||||
pkg=${pkg%.rpm} |
|
||||||
redo-ifchange "$S/oss/version/short.txt" "$dir/$pkg.tar.gz" "$dir/$pkg.spec" |
|
||||||
read -r pkgver junk <"$S/oss/version/short.txt" |
|
||||||
|
|
||||||
machine=$(uname -m) |
|
||||||
rpmbase=$HOME/rpmbuild |
|
||||||
|
|
||||||
mkdir -p "$rpmbase/SOURCES/" |
|
||||||
cp "$dir/$pkg.tar.gz" "$rpmbase/SOURCES/" |
|
||||||
rm -f "$rpmbase/RPMS/$machine/$pkg-$pkgver.$machine.rpm" |
|
||||||
rpmbuild -bb "$dir/$pkg.spec" |
|
||||||
mv "$rpmbase/RPMS/$machine/$pkg-$pkgver.$machine.rpm" $3 |
|
||||||
@ -1,7 +0,0 @@ |
|||||||
redo-ifchange "$S/$1.in" "$S/oss/version/short.txt" |
|
||||||
read -r pkgver junk <"$S/oss/version/short.txt" |
|
||||||
basever=${pkgver%-*} |
|
||||||
subver=${pkgver#*-} |
|
||||||
sed -e "s/Version: 0.00$/Version: $basever/" \ |
|
||||||
-e "s/Release: 0$/Release: $subver/" \ |
|
||||||
<"$S/$1.in" >"$3" |
|
||||||
@ -1,8 +0,0 @@ |
|||||||
exec >&2 |
|
||||||
xdir=${1%.tar.gz} |
|
||||||
base=${xdir##*/} |
|
||||||
updir=${xdir%/*} |
|
||||||
redo-ifchange "$xdir.dir" |
|
||||||
OUT="$PWD/$3" |
|
||||||
|
|
||||||
cd "$updir" && tar -czvf "$OUT" --exclude "$base/.stamp" "$base" |
|
||||||
@ -1,15 +0,0 @@ |
|||||||
# Build packages for customer distribution. |
|
||||||
dir=${1%/*} |
|
||||||
cd "$dir" |
|
||||||
targets="tarball" |
|
||||||
if which dh_clean fakeroot dpkg >/dev/null; then |
|
||||||
targets="$targets deb" |
|
||||||
else |
|
||||||
echo "Skipping debian packages: debhelper and/or dpkg build tools missing." >&2 |
|
||||||
fi |
|
||||||
if which rpm >/dev/null; then |
|
||||||
targets="$targets rpm" |
|
||||||
else |
|
||||||
echo "Skipping rpm packages: rpm build tools missing." >&2 |
|
||||||
fi |
|
||||||
redo-ifchange $targets |
|
||||||
@ -1 +0,0 @@ |
|||||||
/relaynode |
|
||||||
@ -1,17 +0,0 @@ |
|||||||
# Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved. |
|
||||||
# Use of this source code is governed by a BSD-style |
|
||||||
# license that can be found in the LICENSE file. |
|
||||||
|
|
||||||
# Build with: docker build -t tailcontrol-alpine . |
|
||||||
# Run with: docker run --cap-add=NET_ADMIN --device=/dev/net/tun:/dev/net/tun -it tailcontrol-alpine |
|
||||||
|
|
||||||
FROM debian:stretch-slim |
|
||||||
|
|
||||||
RUN apt-get update && apt-get -y install iproute2 iptables |
|
||||||
RUN apt-get -y install ca-certificates |
|
||||||
RUN apt-get -y install nginx-light |
|
||||||
|
|
||||||
COPY relaynode / |
|
||||||
|
|
||||||
# tailcontrol -tun=wg0 -dbdir=$HOME/taildb >> tailcontrol.log 2>&1 & |
|
||||||
CMD ["/relaynode", "-R", "--config", "relay.conf"] |
|
||||||
@ -1 +0,0 @@ |
|||||||
redo-ifchange build |
|
||||||
@ -1,3 +0,0 @@ |
|||||||
exec >&2 |
|
||||||
redo-ifchange Dockerfile relaynode |
|
||||||
docker build -t tailscale . |
|
||||||
@ -1,2 +0,0 @@ |
|||||||
redo-ifchange ../relaynode |
|
||||||
cp ../relaynode $3 |
|
||||||
@ -1,10 +0,0 @@ |
|||||||
#!/bin/sh |
|
||||||
# Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved. |
|
||||||
# Use of this source code is governed by a BSD-style |
|
||||||
# license that can be found in the LICENSE file. |
|
||||||
|
|
||||||
set -e |
|
||||||
redo-ifchange build |
|
||||||
docker run --cap-add=NET_ADMIN \ |
|
||||||
--device=/dev/net/tun:/dev/net/tun \ |
|
||||||
-it tailscale |
|
||||||
@ -1 +0,0 @@ |
|||||||
tailscale-relay |
|
||||||
@ -1,236 +0,0 @@ |
|||||||
// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Relaynode is the old Linux Tailscale daemon.
|
|
||||||
//
|
|
||||||
// Deprecated: this program will be soon deleted. The replacement is
|
|
||||||
// cmd/tailscaled.
|
|
||||||
package main // import "tailscale.com/cmd/relaynode"
|
|
||||||
|
|
||||||
import ( |
|
||||||
"context" |
|
||||||
"encoding/json" |
|
||||||
"fmt" |
|
||||||
"io/ioutil" |
|
||||||
"log" |
|
||||||
"net/http" |
|
||||||
"net/http/pprof" |
|
||||||
"os" |
|
||||||
"os/signal" |
|
||||||
"strings" |
|
||||||
"syscall" |
|
||||||
"time" |
|
||||||
|
|
||||||
"github.com/apenwarr/fixconsole" |
|
||||||
"github.com/klauspost/compress/zstd" |
|
||||||
"github.com/pborman/getopt/v2" |
|
||||||
"github.com/tailscale/wireguard-go/wgcfg" |
|
||||||
"tailscale.com/atomicfile" |
|
||||||
"tailscale.com/control/controlclient" |
|
||||||
"tailscale.com/logpolicy" |
|
||||||
"tailscale.com/version" |
|
||||||
"tailscale.com/wgengine" |
|
||||||
"tailscale.com/wgengine/filter" |
|
||||||
"tailscale.com/wgengine/magicsock" |
|
||||||
) |
|
||||||
|
|
||||||
func main() { |
|
||||||
err := fixconsole.FixConsoleIfNeeded() |
|
||||||
if err != nil { |
|
||||||
log.Printf("fixConsoleOutput: %v\n", err) |
|
||||||
} |
|
||||||
config := getopt.StringLong("config", 'f', "", "path to config file") |
|
||||||
server := getopt.StringLong("server", 's', "https://login.tailscale.com", "URL to tailcontrol server") |
|
||||||
listenport := getopt.Uint16Long("port", 'p', magicsock.DefaultPort, "WireGuard port (0=autoselect)") |
|
||||||
tunname := getopt.StringLong("tun", 0, "wg0", "tunnel interface name") |
|
||||||
alwaysrefresh := getopt.BoolLong("always-refresh", 0, "force key refresh at startup") |
|
||||||
fake := getopt.BoolLong("fake", 0, "fake tunnel+routing instead of tuntap") |
|
||||||
nuroutes := getopt.BoolLong("no-single-routes", 'N', "disallow (non-subnet) routes to single nodes") |
|
||||||
rroutes := getopt.BoolLong("remote-routes", 'R', "allow routing subnets to remote nodes") |
|
||||||
droutes := getopt.BoolLong("default-routes", 'D', "allow default route on remote node") |
|
||||||
routes := getopt.StringLong("routes", 0, "", "list of IP ranges this node can relay") |
|
||||||
debug := getopt.StringLong("debug", 0, "", "Address of debug server") |
|
||||||
getopt.Parse() |
|
||||||
if len(getopt.Args()) > 0 { |
|
||||||
log.Fatalf("too many non-flag arguments: %#v", getopt.Args()[0]) |
|
||||||
} |
|
||||||
uflags := controlclient.UFlagsHelper(!*nuroutes, *rroutes, *droutes) |
|
||||||
if *config == "" { |
|
||||||
log.Fatal("no --config file specified") |
|
||||||
} |
|
||||||
if *tunname == "" { |
|
||||||
log.Printf("Warning: no --tun device specified; routing disabled.\n") |
|
||||||
} |
|
||||||
|
|
||||||
pol := logpolicy.New("tailnode.log.tailscale.io") |
|
||||||
|
|
||||||
logf := wgengine.RusagePrefixLog(log.Printf) |
|
||||||
|
|
||||||
// The wgengine takes a wireguard configuration produced by the
|
|
||||||
// controlclient, and runs the actual tunnels and packets.
|
|
||||||
var e wgengine.Engine |
|
||||||
if *fake { |
|
||||||
e, err = wgengine.NewFakeUserspaceEngine(logf, *listenport) |
|
||||||
} else { |
|
||||||
e, err = wgengine.NewUserspaceEngine(logf, *tunname, *listenport) |
|
||||||
} |
|
||||||
if err != nil { |
|
||||||
log.Fatalf("Error starting wireguard engine: %v\n", err) |
|
||||||
} |
|
||||||
|
|
||||||
e = wgengine.NewWatchdog(e) |
|
||||||
|
|
||||||
// Default filter blocks everything, until Start() is called.
|
|
||||||
e.SetFilter(filter.NewAllowNone()) |
|
||||||
|
|
||||||
var lastNetMap *controlclient.NetworkMap |
|
||||||
statusFunc := func(new controlclient.Status) { |
|
||||||
if new.URL != "" { |
|
||||||
fmt.Fprintf(os.Stderr, "To authenticate, visit:\n\n\t%s\n\n", new.URL) |
|
||||||
return |
|
||||||
} |
|
||||||
if new.Err != "" { |
|
||||||
log.Print(new.Err) |
|
||||||
return |
|
||||||
} |
|
||||||
if new.Persist != nil { |
|
||||||
if err := saveConfig(*config, *new.Persist); err != nil { |
|
||||||
log.Println(err) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if m := new.NetMap; m != nil { |
|
||||||
if lastNetMap != nil { |
|
||||||
logf("netmap diff:\n%v\n", new.NetMap.ConciseDiffFrom(lastNetMap)) |
|
||||||
} |
|
||||||
lastNetMap = m |
|
||||||
|
|
||||||
if m.Equal(&controlclient.NetworkMap{}) { |
|
||||||
return |
|
||||||
} |
|
||||||
|
|
||||||
log.Printf("packet filter: %v\n", m.PacketFilter) |
|
||||||
e.SetFilter(filter.New(m.PacketFilter)) |
|
||||||
|
|
||||||
wgcfg, err := m.WGCfg(uflags, m.DNS) |
|
||||||
if err != nil { |
|
||||||
log.Fatalf("Error getting wg config: %v\n", err) |
|
||||||
} |
|
||||||
err = e.Reconfig(wgcfg, m.DNSDomains) |
|
||||||
if err != nil { |
|
||||||
log.Fatalf("Error reconfiguring engine: %v\n", err) |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
cfg, err := loadConfig(*config) |
|
||||||
if err != nil { |
|
||||||
log.Fatal(err) |
|
||||||
} |
|
||||||
|
|
||||||
hi := controlclient.NewHostinfo() |
|
||||||
hi.FrontendLogID = pol.PublicID.String() |
|
||||||
hi.BackendLogID = pol.PublicID.String() |
|
||||||
if *routes != "" { |
|
||||||
for _, routeStr := range strings.Split(*routes, ",") { |
|
||||||
cidr, err := wgcfg.ParseCIDR(routeStr) |
|
||||||
if err != nil { |
|
||||||
log.Fatalf("--routes: not an IP range: %s", routeStr) |
|
||||||
} |
|
||||||
hi.RoutableIPs = append(hi.RoutableIPs, cidr) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
c, err := controlclient.New(controlclient.Options{ |
|
||||||
Persist: cfg, |
|
||||||
ServerURL: *server, |
|
||||||
Hostinfo: hi, |
|
||||||
NewDecompressor: func() (controlclient.Decompressor, error) { |
|
||||||
return zstd.NewReader(nil) |
|
||||||
}, |
|
||||||
KeepAlive: true, |
|
||||||
}) |
|
||||||
c.SetStatusFunc(statusFunc) |
|
||||||
if err != nil { |
|
||||||
log.Fatal(err) |
|
||||||
} |
|
||||||
lf := controlclient.LoginDefault |
|
||||||
if *alwaysrefresh { |
|
||||||
lf |= controlclient.LoginInteractive |
|
||||||
} |
|
||||||
c.Login(nil, lf) |
|
||||||
|
|
||||||
// Print the wireguard status when we get an update.
|
|
||||||
e.SetStatusCallback(func(s *wgengine.Status, err error) { |
|
||||||
if err != nil { |
|
||||||
log.Fatalf("Wireguard engine status error: %v\n", err) |
|
||||||
} |
|
||||||
var ss []string |
|
||||||
for _, p := range s.Peers { |
|
||||||
if p.LastHandshake.IsZero() { |
|
||||||
ss = append(ss, "x") |
|
||||||
} else { |
|
||||||
ss = append(ss, fmt.Sprintf("%d/%d", p.RxBytes, p.TxBytes)) |
|
||||||
} |
|
||||||
} |
|
||||||
logf("v%v peers: %v\n", version.LONG, strings.Join(ss, " ")) |
|
||||||
c.UpdateEndpoints(0, s.LocalAddrs) |
|
||||||
}) |
|
||||||
|
|
||||||
if *debug != "" { |
|
||||||
go runDebugServer(*debug) |
|
||||||
} |
|
||||||
|
|
||||||
sigCh := make(chan os.Signal, 1) |
|
||||||
signal.Notify(sigCh, os.Interrupt) |
|
||||||
signal.Notify(sigCh, syscall.SIGTERM) |
|
||||||
|
|
||||||
<-sigCh |
|
||||||
logf("signal received, exiting") |
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) |
|
||||||
defer cancel() |
|
||||||
|
|
||||||
e.Close() |
|
||||||
pol.Shutdown(ctx) |
|
||||||
} |
|
||||||
|
|
||||||
func loadConfig(path string) (cfg controlclient.Persist, err error) { |
|
||||||
b, err := ioutil.ReadFile(path) |
|
||||||
if os.IsNotExist(err) { |
|
||||||
log.Printf("config %s does not exist", path) |
|
||||||
return controlclient.Persist{}, nil |
|
||||||
} |
|
||||||
if err := json.Unmarshal(b, &cfg); err != nil { |
|
||||||
return controlclient.Persist{}, fmt.Errorf("load config: %v", err) |
|
||||||
} |
|
||||||
return cfg, nil |
|
||||||
} |
|
||||||
|
|
||||||
func saveConfig(path string, cfg controlclient.Persist) error { |
|
||||||
b, err := json.MarshalIndent(cfg, "", "\t") |
|
||||||
if err != nil { |
|
||||||
return fmt.Errorf("save config: %v", err) |
|
||||||
} |
|
||||||
if err := atomicfile.WriteFile(path, b, 0666); err != nil { |
|
||||||
return fmt.Errorf("save config: %v", err) |
|
||||||
} |
|
||||||
return nil |
|
||||||
} |
|
||||||
|
|
||||||
func runDebugServer(addr string) { |
|
||||||
mux := http.NewServeMux() |
|
||||||
mux.HandleFunc("/debug/pprof/", pprof.Index) |
|
||||||
mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline) |
|
||||||
mux.HandleFunc("/debug/pprof/profile", pprof.Profile) |
|
||||||
mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol) |
|
||||||
mux.HandleFunc("/debug/pprof/trace", pprof.Trace) |
|
||||||
srv := http.Server{ |
|
||||||
Addr: addr, |
|
||||||
Handler: mux, |
|
||||||
} |
|
||||||
if err := srv.ListenAndServe(); err != nil { |
|
||||||
log.Fatal(err) |
|
||||||
} |
|
||||||
} |
|
||||||
@ -0,0 +1 @@ |
|||||||
|
# placeholder to work around redo bug |
||||||
@ -1,9 +0,0 @@ |
|||||||
exec >&2 |
|
||||||
dir=${2%/*} |
|
||||||
redo-ifchange "$S/$dir/package" "$S/oss/version/short.txt" |
|
||||||
read -r package <"$S/$dir/package" |
|
||||||
read -r pkgver <"$S/oss/version/short.txt" |
|
||||||
machine=$(uname -m) |
|
||||||
redo-ifchange "$dir/$package.rpm" |
|
||||||
rm -f "$dir/${package}"-*."$machine.rpm" |
|
||||||
ln -sf "$package.rpm" "$dir/$package-$pkgver.$machine.rpm" |
|
||||||
@ -1,4 +0,0 @@ |
|||||||
#!/bin/sh |
|
||||||
cfg=/var/lib/tailscale/relay.conf |
|
||||||
dir=$(dirname "$0") |
|
||||||
"$dir/taillogin" --config="$cfg" |
|
||||||
@ -1,8 +0,0 @@ |
|||||||
# Set the port to listen on for incoming VPN packets. |
|
||||||
# Remote nodes will automatically be informed about the new port number, |
|
||||||
# but you might want to configure this in order to set external firewall |
|
||||||
# settings. |
|
||||||
PORT="--port=41641" |
|
||||||
|
|
||||||
# Extra flags you might want to pass to relaynode. |
|
||||||
FLAGS="" |
|
||||||
@ -1,40 +0,0 @@ |
|||||||
Name: tailscale-relay |
|
||||||
Version: 0.00 |
|
||||||
Release: 0 |
|
||||||
Summary: Traffic relay node for Tailscale |
|
||||||
Group: Network |
|
||||||
License: Proprietary |
|
||||||
URL: https://tailscale.com/ |
|
||||||
Vendor: Tailscale Inc. |
|
||||||
#Source: https://github.com/tailscale/tailscale |
|
||||||
Source0: tailscale-relay.tar.gz |
|
||||||
#Prefix: %{_prefix} |
|
||||||
Packager: Avery Pennarun <apenwarr@tailscale.com> |
|
||||||
BuildRoot: %{_tmppath}/%{name}-root |
|
||||||
|
|
||||||
%description |
|
||||||
Traffic relay node for Tailscale. |
|
||||||
|
|
||||||
%prep |
|
||||||
%setup -n tailscale-relay |
|
||||||
|
|
||||||
%build |
|
||||||
|
|
||||||
%install |
|
||||||
D=$RPM_BUILD_ROOT |
|
||||||
[ "$D" = "/" -o -z "$D" ] && exit 99 |
|
||||||
rm -rf "$D" |
|
||||||
mkdir -p $D/usr/sbin $D/lib/systemd/system $D/etc/default $D/etc/tailscale |
|
||||||
cp taillogin tailscale-login relaynode $D/usr/sbin |
|
||||||
cp tailscale-relay.service $D/lib/systemd/system/ |
|
||||||
cp tailscale-relay.defaults $D/etc/default/tailscale-relay |
|
||||||
|
|
||||||
%clean |
|
||||||
|
|
||||||
%files |
|
||||||
%defattr(-,root,root) |
|
||||||
%config(noreplace) /etc/default/tailscale-relay |
|
||||||
/lib/systemd/system/tailscale-relay.service |
|
||||||
/usr/sbin/taillogin |
|
||||||
/usr/sbin/tailscale-login |
|
||||||
/usr/sbin/relaynode |
|
||||||
@ -1,7 +0,0 @@ |
|||||||
dir=${1%/*} |
|
||||||
redo-ifchange "$S/$dir/package" "$S/oss/version/short.txt" |
|
||||||
read -r package <"$S/$dir/package" |
|
||||||
read -r version <"$S/oss/version/short.txt" |
|
||||||
redo-ifchange "$dir/$package.tar.gz" |
|
||||||
rm -f "$dir/$package"-*.tar.gz |
|
||||||
ln -sf "$package.tar.gz" "$dir/$package-$version.tar.gz" |
|
||||||
Loading…
Reference in new issue