mirror of
https://github.com/tailscale/tailscale.git
synced 2024-12-04 23:45:34 +00:00
77 lines
2.5 KiB
Markdown
77 lines
2.5 KiB
Markdown
|
# Tailscale Appliance Gokrazy Image
|
||
|
|
||
|
This is (as of 2024-06-02) a **WORK IN PROGRESS** (pre-alpha) experiment to
|
||
|
package Tailscale as a [Gokrazy](https://gokrazy.org/) appliance image
|
||
|
for use on both VMs (AWS, GCP, Azure, Proxmox, ...) and Rasperry Pis.
|
||
|
|
||
|
See https://github.com/tailscale/tailscale/issues/1866
|
||
|
|
||
|
## Overview
|
||
|
|
||
|
It makes a ~70MB image (about the same size as
|
||
|
`tailscale-setup-full-1.66.4.exe` and smaller than the combined
|
||
|
Tailscale Android APK) that combines the Linux kernel and Tailscale
|
||
|
and that's it. Nothing written in C. (except optional busybox for
|
||
|
debugging) So no operating system to maintain. Gokrazy has three
|
||
|
partitions: two read-only ones (one active at a time, the other for
|
||
|
updates for the next boot) and one optional stateful, writable
|
||
|
partition that survives upgrades (`/perm/`)
|
||
|
|
||
|
Initial bootstrap configuration of this appliance will be over either
|
||
|
serial or configuration files (auth keys, subnet routes, etc) baked into
|
||
|
the image (for Raspberry Pis) or in cloud-init/user-data (for AWS, etc).
|
||
|
As of 2024-06-02, AWS user-data config files work.
|
||
|
|
||
|
## Quick start
|
||
|
|
||
|
Install dependencies:
|
||
|
```
|
||
|
$ brew install qemu e2fsprogs
|
||
|
```
|
||
|
|
||
|
Build + launch:
|
||
|
```
|
||
|
$ make qemu
|
||
|
```
|
||
|
|
||
|
That puts serial on stdio. To exit the serial console and escape to
|
||
|
the qemu monitor, type `Ctrl-a c`. Then type `quit` in the monitor to
|
||
|
quit.
|
||
|
|
||
|
## Building
|
||
|
|
||
|
`make image` to build just the image (`tsapp.img`), without uploading it.
|
||
|
|
||
|
## UTM
|
||
|
|
||
|
You can also use UTM, but the qemu path above is easier.
|
||
|
For UTM, see the [UTM instructions](UTM.md).
|
||
|
|
||
|
## AWS
|
||
|
|
||
|
### Build an AMI
|
||
|
|
||
|
`go run build.go --bucket=your-S3-temp-bucket` to build an AMI. Make
|
||
|
sure your "aws" command is in your path and has access.
|
||
|
|
||
|
### Creating an instance
|
||
|
|
||
|
When creating an instance, you need a Nitro machine type to get a
|
||
|
virtual serial console. Notably, that means the `t2.*` instance types
|
||
|
that AWS pushes as a free option are not new enough. Use `t3.*` at least.
|
||
|
|
||
|
As of 2024-06-02 this builder tool only supports x86_64 (arm64 should
|
||
|
be trivial and will come soon), so don't use a Graviton machine type.
|
||
|
|
||
|
To connect to the serial console, you can either use the web console, or
|
||
|
use the CLI like:
|
||
|
|
||
|
```
|
||
|
$ aws ec2-instance-connect send-serial-console-ssh-public-key --instance-id i-0b4a0eabc43629f13 --serial-port 0 --ssh-public-key file:///your/home/.ssh/id_ed25519.pub --region us-west-2
|
||
|
{
|
||
|
"RequestId": "a93b0ea3-9ff9-45d5-b8ed-b1e70ccc0410",
|
||
|
"Success": true
|
||
|
}
|
||
|
$ ssh i-0b4a0eabc43629f13.port0@serial-console.ec2-instance-connect.us-west-2.aws
|
||
|
```
|