mirror of https://github.com/tailscale/tailscale/
cmd/relaynode: delete it!
tailscale+tailscaled now completely obsoletes relaynode, so let's let it finally go away.pull/220/head
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