port builder script to go
Signed-off-by: Xe <me@christine.website>
This commit is contained in:
parent
65d1d08536
commit
acd4500adf
|
@ -0,0 +1,4 @@
|
||||||
|
result
|
||||||
|
.direnv
|
||||||
|
*.raw
|
||||||
|
var/*
|
|
@ -0,0 +1,42 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1651007983,
|
||||||
|
"narHash": "sha256-GNay7yDPtLcRcKCNHldug85AhAvBpTtPEJWSSDYBw8U=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "e10da1c7f542515b609f8dfbcf788f3d85b14936",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"utils": "utils"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1649676176,
|
||||||
|
"narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
description = "A basic Go web server setup";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "nixpkgs/nixos-unstable";
|
||||||
|
utils.url = "github:numtide/flake-utils";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, utils }:
|
||||||
|
utils.lib.eachSystem [
|
||||||
|
"x86_64-linux"
|
||||||
|
"aarch64-linux"
|
||||||
|
"x86_64-darwin"
|
||||||
|
"aarch64-darwin"
|
||||||
|
] (system:
|
||||||
|
let
|
||||||
|
pkgs = import nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
overlays = [
|
||||||
|
(final: prev: {
|
||||||
|
go = prev.go_1_18;
|
||||||
|
buildGoModule = prev.buildGo118Module;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
|
version = builtins.substring 0 8 self.lastModifiedDate;
|
||||||
|
in {
|
||||||
|
devShells.default = pkgs.mkShell {
|
||||||
|
buildInputs = with pkgs; [ go gopls gotools go-tools squashfsTools ];
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,114 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"archive/tar"
|
||||||
|
"compress/gzip"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"path/filepath"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
out = flag.String("out-dir", ".", "where to save squashfs images to")
|
||||||
|
tsTarballPath = flag.String("tailscale-tarball", "./var/tailscale_1.24.2_amd64.tgz", "path to tailscale tarball on disk")
|
||||||
|
distro = flag.String("distro", "arch", "distro to stamp into system extension")
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
fin, err := os.Open(*tsTarballPath)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
gzRdr, err := gzip.NewReader(fin)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
tarFin := tar.NewReader(gzRdr)
|
||||||
|
|
||||||
|
tmpDir, err := os.MkdirTemp("", "taildeck-builder")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
defer os.RemoveAll(tmpDir)
|
||||||
|
|
||||||
|
os.MkdirAll(filepath.Join(tmpDir, "usr", "bin"), 0755)
|
||||||
|
os.MkdirAll(filepath.Join(tmpDir, "usr", "sbin"), 0755)
|
||||||
|
os.MkdirAll(filepath.Join(tmpDir, "usr", "lib", "systemd", "system"), 0755)
|
||||||
|
os.MkdirAll(filepath.Join(tmpDir, "usr", "lib", "extension-release.d"), 0755)
|
||||||
|
|
||||||
|
for {
|
||||||
|
hdr, err := tarFin.Next()
|
||||||
|
if err != nil {
|
||||||
|
if err == io.EOF {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("%s (%s): %d bytes", hdr.Name, strconv.FormatInt(hdr.Mode, 8), hdr.Size)
|
||||||
|
|
||||||
|
var fname string
|
||||||
|
|
||||||
|
switch filepath.Base(hdr.Name) {
|
||||||
|
case "tailscale":
|
||||||
|
fname = filepath.Join(tmpDir, "usr", "bin", "tailscale")
|
||||||
|
case "tailscaled":
|
||||||
|
fname = filepath.Join(tmpDir, "usr", "sbin", "tailscaled")
|
||||||
|
case "tailscaled.service":
|
||||||
|
fname = filepath.Join(tmpDir, "usr", "lib", "systemd", "system", "tailscaled.service")
|
||||||
|
default:
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
fout, err := os.Create(fname)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = io.Copy(fout, tarFin)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = fout.Close()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fout, err := os.Create(filepath.Join(tmpDir, "usr", "lib", "extension-release.d", "extension-release.tailscale"))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Fprintln(fout, "SYSEXT_LEVEL=1.0")
|
||||||
|
fmt.Fprintf(fout, "ID=%s", *distro)
|
||||||
|
|
||||||
|
err = fout.Close()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
binPath, err := exec.LookPath("mksquashfs")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sp := strings.Split(filepath.Base(*tsTarballPath), "_")
|
||||||
|
cmd := exec.Command(binPath, tmpDir, fmt.Sprintf("tailscale_sysext_%s.raw", sp[1]), "-quiet", "-noappend", "-all-root", "-root-mode", "755", "-b", "1M", "-comp", "xz", "-Xdict-size", "100%")
|
||||||
|
cmd.Stderr = os.Stderr
|
||||||
|
cmd.Stdout = os.Stdout
|
||||||
|
if err := cmd.Run(); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
35
run.sh
35
run.sh
|
@ -1,35 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -ex
|
|
||||||
|
|
||||||
TS_VER=1.22.0
|
|
||||||
TS_ROOT="${HOME}/.local/share/tailscale"
|
|
||||||
TS_PATH="${TS_ROOT}/tailscale_${TS_VER}_amd64"
|
|
||||||
|
|
||||||
mkdir -p ${TS_ROOT}
|
|
||||||
cd ${TS_ROOT}
|
|
||||||
|
|
||||||
if [ ! -d "${TS_PATH}" ]; then
|
|
||||||
curl -o tailscale_1.22.0_amd64.tgz https://pkgs.tailscale.com/stable/tailscale_1.22.0_amd64.tgz
|
|
||||||
tar zxf tailscale_1.22.0_amd64.tgz
|
|
||||||
fi
|
|
||||||
|
|
||||||
sudo systemctl stop tailscaled.service ||:
|
|
||||||
sudo systemd-run \
|
|
||||||
--service-type=notify \
|
|
||||||
--description="Tailscale node agent" \
|
|
||||||
-u tailscaled.service \
|
|
||||||
-p ExecStartPre="${HOME}/.local/share/tailscale/tailscale_1.22.0_amd64/tailscaled --cleanup" \
|
|
||||||
-p ExecStopPost="${HOME}/.local/share/tailscale/tailscale_1.22.0_amd64/tailscaled --cleanup" \
|
|
||||||
-p Restart=on-failure \
|
|
||||||
-p RuntimeDirectory=tailscale \
|
|
||||||
-p RuntimeDirectoryMode=0755 \
|
|
||||||
-p StateDirectory=tailscale \
|
|
||||||
-p StateDirectoryMode=0700 \
|
|
||||||
-p CacheDirectory=tailscale \
|
|
||||||
-p CacheDirectoryMode=0750 \
|
|
||||||
"${HOME}/.local/share/tailscale/tailscale_1.22.0_amd64/tailscaled" \
|
|
||||||
"--state=/var/lib/tailscale/tailscaled.state" \
|
|
||||||
"--socket=/run/tailscale/tailscaled.sock"
|
|
||||||
|
|
||||||
sudo ${TS_PATH}/tailscale up
|
|
Loading…
Reference in New Issue