From 5e44266292b2418aba6aeb5c60dd3a4756957218 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 28 Mar 2022 15:06:39 +0000
Subject: [PATCH 01/16] docs(README): update contributors
---
README.md | 35 +++++++++++++++++++++--------------
1 file changed, 21 insertions(+), 14 deletions(-)
diff --git a/README.md b/README.md
index e3ed5377..b2bac98d 100644
--- a/README.md
+++ b/README.md
@@ -220,6 +220,13 @@ make build
Nico
+
+
+
+
+ Niek van der Maas
+
+ |
@@ -227,6 +234,8 @@ make build
Eugen Biegler
|
+
+
@@ -234,8 +243,6 @@ make build
Aaron Bieber
|
-
-
@@ -271,6 +278,8 @@ make build
Paul Tötterman
|
+
+
@@ -278,8 +287,6 @@ make build
Casey Marshall
|
-
-
@@ -315,6 +322,8 @@ make build
Abraham Ingersoll
|
+
+
@@ -322,8 +331,6 @@ make build
Aofei Sheng
|
-
-
@@ -359,6 +366,8 @@ make build
Felix Yan
|
+
+
@@ -366,8 +375,6 @@ make build
JJGadgets
|
-
-
@@ -403,6 +410,8 @@ make build
WhiteSource Renovate
|
+
+
@@ -410,8 +419,6 @@ make build
Ryan Fowler
|
-
-
@@ -447,6 +454,8 @@ make build
Tianon Gravi
|
+
+
@@ -454,8 +463,6 @@ make build
Tjerk Woudsma
|
-
-
@@ -491,6 +498,8 @@ make build
derelm
|
+
+
@@ -498,8 +507,6 @@ make build
ignoramous
|
-
-
From b2ae9b6cacc576d18bec905a05bbb29dd9ceff84 Mon Sep 17 00:00:00 2001
From: henning mueller
Date: Tue, 5 Apr 2022 18:44:08 +0200
Subject: [PATCH 02/16] fix: Remove days from expiry option value examples
---
cmd/headscale/cli/api_key.go | 2 +-
cmd/headscale/cli/preauthkeys.go | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/cmd/headscale/cli/api_key.go b/cmd/headscale/cli/api_key.go
index 06099aa1..aa056c54 100644
--- a/cmd/headscale/cli/api_key.go
+++ b/cmd/headscale/cli/api_key.go
@@ -23,7 +23,7 @@ func init() {
apiKeysCmd.AddCommand(listAPIKeys)
createAPIKeyCmd.Flags().
- DurationP("expiration", "e", DefaultAPIKeyExpiry, "Human-readable expiration of the key (30m, 24h, 365d...)")
+ DurationP("expiration", "e", DefaultAPIKeyExpiry, "Human-readable expiration of the key (e.g. 30m, 24h)")
apiKeysCmd.AddCommand(createAPIKeyCmd)
diff --git a/cmd/headscale/cli/preauthkeys.go b/cmd/headscale/cli/preauthkeys.go
index 950cbcc5..7efb72fb 100644
--- a/cmd/headscale/cli/preauthkeys.go
+++ b/cmd/headscale/cli/preauthkeys.go
@@ -31,7 +31,7 @@ func init() {
createPreAuthKeyCmd.PersistentFlags().
Bool("ephemeral", false, "Preauthkey for ephemeral nodes")
createPreAuthKeyCmd.Flags().
- DurationP("expiration", "e", DefaultPreAuthKeyExpiry, "Human-readable expiration of the key (30m, 24h, 365d...)")
+ DurationP("expiration", "e", DefaultPreAuthKeyExpiry, "Human-readable expiration of the key (e.g. 30m, 24h)")
}
var preauthkeysCmd = &cobra.Command{
From 6e082417128a3b0de55e171683d37a10e8f23cbb Mon Sep 17 00:00:00 2001
From: Nico Rey
Date: Wed, 6 Apr 2022 11:05:08 -0300
Subject: [PATCH 03/16] Exit Headscale if ACL policy file cannot be parsed
---
cmd/headscale/cli/utils.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cmd/headscale/cli/utils.go b/cmd/headscale/cli/utils.go
index 768a9713..992d1254 100644
--- a/cmd/headscale/cli/utils.go
+++ b/cmd/headscale/cli/utils.go
@@ -408,7 +408,7 @@ func getHeadscaleApp() (*headscale.Headscale, error) {
aclPath := absPath(viper.GetString("acl_policy_path"))
err = app.LoadACLPolicy(aclPath)
if err != nil {
- log.Error().
+ log.Fatal().
Str("path", aclPath).
Err(err).
Msg("Could not load the ACL policy")
From c3324371d6cb6b0dd73f732e86094def4ccf9c21 Mon Sep 17 00:00:00 2001
From: Nico Rey
Date: Wed, 6 Apr 2022 18:41:13 -0300
Subject: [PATCH 04/16] Update changelog
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d3aa8d53..65d22955 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,7 @@
## 0.16.0 (2022-xx-xx)
### Changes
-
+- Headscale fails to serve if the ACL policy file cannot be parsed [#537](https://github.com/juanfont/headscale/pull/537)
- Fix labels cardinality error when registering unknown pre-auth key [#519](https://github.com/juanfont/headscale/pull/519)
## 0.15.0 (2022-03-20)
From fa7ef3df2fa6e982dd1a34771683f842c7d300e5 Mon Sep 17 00:00:00 2001
From: Nico Rey
Date: Thu, 7 Apr 2022 15:21:26 -0300
Subject: [PATCH 05/16] make linter happy
---
CHANGELOG.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 65d22955..c970be23 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,7 @@
## 0.16.0 (2022-xx-xx)
### Changes
+
- Headscale fails to serve if the ACL policy file cannot be parsed [#537](https://github.com/juanfont/headscale/pull/537)
- Fix labels cardinality error when registering unknown pre-auth key [#519](https://github.com/juanfont/headscale/pull/519)
From 98e98a8adbcfab168a6b60a610818d605fb7f45f Mon Sep 17 00:00:00 2001
From: Artem Klevtsov
Date: Sat, 9 Apr 2022 16:24:57 +0700
Subject: [PATCH 06/16] Fix wrong metrics port in docs
It should be 9090.
---
docs/running-headscale-linux.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/running-headscale-linux.md b/docs/running-headscale-linux.md
index 1e9d11c4..98a67f1d 100644
--- a/docs/running-headscale-linux.md
+++ b/docs/running-headscale-linux.md
@@ -178,7 +178,7 @@ systemctl status headscale
Verify `headscale` is available:
```shell
-curl http://127.0.0.1:8080/metrics
+curl http://127.0.0.1:9090/metrics
```
`headscale` will now run in the background and start at boot.
From 62d774b6ee014bcbadd612262037dc32262c8b9d Mon Sep 17 00:00:00 2001
From: Carson Yang
Date: Sun, 10 Apr 2022 09:53:27 +0800
Subject: [PATCH 07/16] Fix key name about derp port
---
derp-example.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/derp-example.yaml b/derp-example.yaml
index 0ebe32ed..732c4ba0 100644
--- a/derp-example.yaml
+++ b/derp-example.yaml
@@ -12,4 +12,4 @@ regions:
ipv6: "2604:a880:400:d1::828:b001"
stunport: 0
stunonly: false
- derptestport: 0
+ derpport: 0
From 9cdaa9730b35f47958c4970fc8e60f7700746a9c Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Sun, 10 Apr 2022 09:03:16 +0000
Subject: [PATCH 08/16] docs(README): update contributors
---
README.md | 50 +++++++++++++++++++++++++++++++++-----------------
1 file changed, 33 insertions(+), 17 deletions(-)
diff --git a/README.md b/README.md
index b2bac98d..74abc85b 100644
--- a/README.md
+++ b/README.md
@@ -280,6 +280,13 @@ make build
|
+
+
+
+
+ Artem Klevtsov
+
+ |
@@ -315,6 +322,8 @@ make build
thomas
|
+
+
@@ -322,8 +331,6 @@ make build
Abraham Ingersoll
|
-
-
@@ -331,13 +338,6 @@ make build
Aofei Sheng
|
-
-
-
-
- Artem Klevtsov
-
- |
@@ -352,6 +352,13 @@ make build
Bryan Stenson
|
+
+
+
+
+ Carson Yang
+
+ |
@@ -359,6 +366,8 @@ make build
Felix Kronlage-Dammers
|
+
+
@@ -366,8 +375,6 @@ make build
Felix Yan
|
-
-
@@ -403,6 +410,8 @@ make build
rcursaru
|
+
+
@@ -410,8 +419,6 @@ make build
WhiteSource Renovate
|
-
-
@@ -447,6 +454,8 @@ make build
The Gitter Badger
|
+
+
@@ -454,8 +463,6 @@ make build
Tianon Gravi
|
-
-
@@ -491,6 +498,8 @@ make build
bravechamp
|
+
+
@@ -498,8 +507,13 @@ make build
derelm
|
-
-
+
+
+
+
+ henning mueller
+
+ |
@@ -528,6 +542,8 @@ make build
Wakeful-Cloud
|
+
+
From 22dd61d8497165c28d51109cf7f9d6b5da404a6d Mon Sep 17 00:00:00 2001
From: Moritz Poldrack
Date: Sun, 10 Apr 2022 00:37:13 +0200
Subject: [PATCH 09/16] fixed the issue of sending on closed channel
This commit fixes the issue of headscale crashing after sending on a
closed channel by moving the channel close to the sender side, instead
of the creator. closeChanWithLog is also implemented with generics now.
Fixes: https://github.com/juanfont/headscale/issues/342
Signed-off-by: Moritz Poldrack
---
poll.go | 68 ++++++++++++++++++++++++++++++++++++++-------------------
1 file changed, 45 insertions(+), 23 deletions(-)
diff --git a/poll.go b/poll.go
index 15945a9b..3bad0b89 100644
--- a/poll.go
+++ b/poll.go
@@ -175,32 +175,13 @@ func (h *Headscale) PollNetMapHandler(ctx *gin.Context) {
Str("machine", machine.Name).
Msg("Loading or creating update channel")
- // TODO: could probably remove all that duplication once generics land.
- closeChanWithLog := func(channel interface{}, name string) {
- log.Trace().
- Str("handler", "PollNetMap").
- Str("machine", machine.Name).
- Str("channel", "Done").
- Msg(fmt.Sprintf("Closing %s channel", name))
-
- switch c := channel.(type) {
- case (chan struct{}):
- close(c)
-
- case (chan []byte):
- close(c)
- }
- }
-
const chanSize = 8
updateChan := make(chan struct{}, chanSize)
- defer closeChanWithLog(updateChan, "updateChan")
pollDataChan := make(chan []byte, chanSize)
- defer closeChanWithLog(pollDataChan, "pollDataChan")
+ defer closeChanWithLog(pollDataChan, machine.Name, "pollDataChan")
keepAliveChan := make(chan []byte)
- defer closeChanWithLog(keepAliveChan, "keepAliveChan")
if req.OmitPeers && !req.Stream {
log.Info().
@@ -273,7 +254,27 @@ func (h *Headscale) PollNetMapStream(
updateChan chan struct{},
) {
{
- ctx, cancel := context.WithCancel(ctx.Request.Context())
+ machine, err := h.GetMachineByMachineKey(machineKey)
+ if err != nil {
+ if errors.Is(err, gorm.ErrRecordNotFound) {
+ log.Warn().
+ Str("handler", "PollNetMap").
+ Msgf("Ignoring request, cannot find machine with key %s", machineKey.String())
+ ctx.String(http.StatusUnauthorized, "")
+
+ return
+ }
+ log.Error().
+ Str("handler", "PollNetMap").
+ Msgf("Failed to fetch machine from the database with Machine key: %s", machineKey.String())
+ ctx.String(http.StatusInternalServerError, "")
+
+ return
+ }
+
+ ctx := context.WithValue(ctx.Request.Context(), "machineName", machine.Name)
+
+ ctx, cancel := context.WithCancel(ctx)
defer cancel()
go h.scheduledPollWorker(
@@ -564,8 +565,8 @@ func (h *Headscale) PollNetMapStream(
func (h *Headscale) scheduledPollWorker(
ctx context.Context,
- updateChan chan<- struct{},
- keepAliveChan chan<- []byte,
+ updateChan chan struct{},
+ keepAliveChan chan []byte,
machineKey key.MachinePublic,
mapRequest tailcfg.MapRequest,
machine *Machine,
@@ -573,6 +574,17 @@ func (h *Headscale) scheduledPollWorker(
keepAliveTicker := time.NewTicker(keepAliveInterval)
updateCheckerTicker := time.NewTicker(updateCheckInterval)
+ defer closeChanWithLog(
+ updateChan,
+ fmt.Sprint(ctx.Value("machineName")),
+ "updateChan",
+ )
+ defer closeChanWithLog(
+ keepAliveChan,
+ fmt.Sprint(ctx.Value("machineName")),
+ "updateChan",
+ )
+
for {
select {
case <-ctx.Done():
@@ -606,3 +618,13 @@ func (h *Headscale) scheduledPollWorker(
}
}
}
+
+func closeChanWithLog[C chan []byte | chan struct{}](channel C, machine, name string) {
+ log.Trace().
+ Str("handler", "PollNetMap").
+ Str("machine", machine).
+ Str("channel", "Done").
+ Msg(fmt.Sprintf("Closing %s channel", name))
+
+ close(channel)
+}
From 9f03a012fb7faa8cde35ba39addfb287b2ffa5cd Mon Sep 17 00:00:00 2001
From: Moritz Poldrack
Date: Sun, 10 Apr 2022 22:47:35 +0200
Subject: [PATCH 10/16] updated changelog
---
CHANGELOG.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d3aa8d53..4408f130 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@
### Changes
- Fix labels cardinality error when registering unknown pre-auth key [#519](https://github.com/juanfont/headscale/pull/519)
+- Fix send on closed channel crash in polling [#542](https://github.com/juanfont/headscale/pull/542)
## 0.15.0 (2022-03-20)
From 1f43c39f93aeb4018b6481365369e07022f09341 Mon Sep 17 00:00:00 2001
From: Moritz Poldrack
Date: Mon, 11 Apr 2022 08:54:12 +0200
Subject: [PATCH 11/16] replaced version-at-commit script with git-describe
call
---
Makefile | 2 +-
scripts/version-at-commit.sh | 39 ------------------------------------
2 files changed, 1 insertion(+), 40 deletions(-)
delete mode 100755 scripts/version-at-commit.sh
diff --git a/Makefile b/Makefile
index 73630d3f..a2c225de 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
# Calculate version
-version = $(shell ./scripts/version-at-commit.sh)
+version = $(git describe --always --tags --dirty)
rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
diff --git a/scripts/version-at-commit.sh b/scripts/version-at-commit.sh
deleted file mode 100755
index 2f7fab84..00000000
--- a/scripts/version-at-commit.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env bash
-
-set -e -o pipefail
-commit="$1"
-versionglob="v[0-9].[0-9]*.[0-9]*"
-devsuffix=".dev"
-if [ -z "$commit" ]; then
- commit=`git log -n1 --first-parent "--format=format:%h"`
-fi
-
-# automatically assign version
-#
-# handles the following cases:
-#
-# 0. no tags on the repository. Print "dev".
-#
-# 1. no local modifications and commit is directly tagged. Print tag.
-#
-# 2. no local modifications and commit is not tagged. Take greatest version tag in repo X.Y.Z and assign X.Y.(Z+1). Print that + $devsuffix + $timestamp.
-#
-# 3. local modifications. Print "dev".
-
-tags=$(git tag)
-if [[ -z "$tags" ]]; then
- echo "dev"
-elif `git diff --quiet 2>/dev/null`; then
- tagged=$(git tag --points-at "$commit")
- if [[ -n "$tagged" ]] ; then
- echo $tagged
- else
- nearest_tag=$(git describe --tags --abbrev=0 --match "$versionglob" "$commit")
- v=$(echo $nearest_tag | perl -pe 's/(\d+)$/$1+1/e')
- isodate=$(TZ=UTC git log -n1 --format=%cd --date=iso "$commit")
- ts=$(TZ=UTC date --date="$isodate" "+%Y%m%d%H%M%S")
- echo "${v}${devsuffix}${ts}"
- fi
-else
- echo "dev"
-fi
From c312f8bf4a8e21284b1a1b41c414ad957142b469 Mon Sep 17 00:00:00 2001
From: Moritz Poldrack
Date: Mon, 11 Apr 2022 08:56:40 +0200
Subject: [PATCH 12/16] set up Makefile for reproducible builds
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index a2c225de..a708a103 100644
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,7 @@ PROTO_SOURCES = $(call rwildcard,,*.proto)
build:
- GGO_ENABLED=0 go build -ldflags "-s -w -X github.com/juanfont/headscale/cmd/headscale/cli.Version=$(version)" cmd/headscale/headscale.go
+ GGO_ENABLED=0 go build -trimpath -buildmode=pie -mod=readonly -ldflags "-s -w -X github.com/juanfont/headscale/cmd/headscale/cli.Version=$(version)" cmd/headscale/headscale.go
dev: lint test build
From 8601dd1f4235c52d7f123c7bf802ab2be865978f Mon Sep 17 00:00:00 2001
From: Moritz Poldrack
Date: Mon, 11 Apr 2022 14:56:11 +0200
Subject: [PATCH 13/16] fixed CGO disabling
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index a708a103..74ecd89e 100644
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,7 @@ PROTO_SOURCES = $(call rwildcard,,*.proto)
build:
- GGO_ENABLED=0 go build -trimpath -buildmode=pie -mod=readonly -ldflags "-s -w -X github.com/juanfont/headscale/cmd/headscale/cli.Version=$(version)" cmd/headscale/headscale.go
+ CGO_ENABLED=0 go build -trimpath -buildmode=pie -mod=readonly -ldflags "-s -w -X github.com/juanfont/headscale/cmd/headscale/cli.Version=$(version)" cmd/headscale/headscale.go
dev: lint test build
From 3d8dc9d2bff741089184cc10b5fc5d41eeab5251 Mon Sep 17 00:00:00 2001
From: Moritz Poldrack
Date: Mon, 11 Apr 2022 13:43:49 +0200
Subject: [PATCH 14/16] fix discord invite
Fixes: https://github.com/juanfont/headscale/issues/533
---
.github/ISSUE_TEMPLATE/config.yml | 2 +-
README.md | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index 99cc36fa..37a8cb80 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -7,5 +7,5 @@ contact_links:
url: "https://github.com/juanfont/headscale/blob/main/docs"
about: "Find documentation about how to configure and run headscale."
- name: "headscale Discord community"
- url: "https://discord.com/invite/XcQxk2VHjx"
+ url: "https://discord.gg/xGj2TuqyxY"
about: "Please ask and answer questions about usage of headscale here."
diff --git a/README.md b/README.md
index 74abc85b..7f712416 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
An open source, self-hosted implementation of the Tailscale control server.
-Join our [Discord](https://discord.gg/XcQxk2VHjx) server for a chat.
+Join our [Discord](https://discord.gg/xGj2TuqyxY) server for a chat.
**Note:** Always select the same GitHub tag as the released version you use
to ensure you have the correct example configuration and documentation.
From 9254afff2ddb48b6e60688ddad83abd6441893ec Mon Sep 17 00:00:00 2001
From: Kristoffer Dalby
Date: Thu, 21 Apr 2022 09:06:13 +0100
Subject: [PATCH 15/16] Add direnv and nix output to gitignore
---
.gitignore | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/.gitignore b/.gitignore
index d047cbfd..5556580d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,3 +27,7 @@ derp.yaml
.idea
test_output/
+
+# Nix and direnv
+.direnv/
+result
From 580c72bf167f48fad9b534ad50c3247334480eff Mon Sep 17 00:00:00 2001
From: Kristoffer Dalby
Date: Thu, 21 Apr 2022 09:06:30 +0100
Subject: [PATCH 16/16] Update discord link so it does not grant temp
memberships
---
README.md | 2 +-
docs/README.md | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 7f712416..8631eb92 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
An open source, self-hosted implementation of the Tailscale control server.
-Join our [Discord](https://discord.gg/xGj2TuqyxY) server for a chat.
+Join our [Discord](https://discord.gg/c84AZQhmpx) server for a chat.
**Note:** Always select the same GitHub tag as the released version you use
to ensure you have the correct example configuration and documentation.
diff --git a/docs/README.md b/docs/README.md
index 7a3080e3..459a6c21 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -3,7 +3,7 @@
This page contains the official and community contributed documentation for `headscale`.
If you are having trouble with following the documentation or get unexpected results,
-please ask on [Discord](https://discord.gg/XcQxk2VHjx) instead of opening an Issue.
+please ask on [Discord](https://discord.gg/c84AZQhmpx) instead of opening an Issue.
## Official documentation
|