fix(bootstrap): safe uninstall, add license, CI, and docs

- Fix uninstall to only remove own files (farmer/sprout can coexist)
- Add systemctl daemon-reload after removing unit files
- Suppress userdel error if user doesn't exist
- Add 0BSD LICENSE (matches gogrlx/grlx)
- Add GitHub Actions CI workflow (shellcheck)
- Expand README: non-interactive install, uninstall docs, arch list, badges
This commit is contained in:
2026-03-06 09:02:16 +00:00
parent e53869dc3d
commit dc0a27291e
5 changed files with 106 additions and 6 deletions

View File

@@ -1,10 +1,17 @@
# grlx Quickstart
## <p align="center"><img src="docs/grlx-speed.jpg" width="300"></p>
[![CI](https://github.com/gogrlx/bootstrap.grlx.dev/actions/workflows/ci.yml/badge.svg)](https://github.com/gogrlx/bootstrap.grlx.dev/actions/workflows/ci.yml)
[![License: 0BSD](https://img.shields.io/badge/License-0BSD-green.svg)](https://opensource.org/licenses/0BSD)
Want to get up and running as quickly as possible to see what all the fuss is about?
Use our bootstrap scripts!
Note that only Linux `sprout`s and `farmer`s are supported, but you can use the
CLI from macOS as well.
## Install
1. Download and initialize the command line utility from our releases to your dev machine.
```bash
# replace 'linux' with darwin if you're on macOS
@@ -17,6 +24,7 @@ Once configured, the CLI prints out your administrator public key, which you'll
*It's recommended you now add `grlx` somewhere in your `$PATH`.*
![grlx install](docs/grlx-install.gif)
2. On your control server, you'll need to install the `farmer`. This script may also be run as `root` instead of using sudo.
```bash
curl -L https://bootstrap.grlx.dev/latest/farmer | sudo bash
@@ -27,6 +35,7 @@ You'll be prompted for an admin public key, which you should have gotten from th
Make sure the certificate host name matches the external-facing interface (a domain or IP address) as it will be used for TLS validation!
![farmer install](docs/farmer-install.gif)
3. On all of your fleet nodes, you'll need to install the `sprout`.
```bash
# Set FARMERINTERFACE to your farmer's domain name. FARMERBUSPORT and FARMERAPIPORT
@@ -47,3 +56,53 @@ grlx -T \* cmd run --out json -- uname -a
```
![running commands](docs/grlx-cmd.gif)
## Non-Interactive Install
Both scripts support environment variables for unattended installation:
**Farmer:**
```bash
curl -L https://bootstrap.grlx.dev/latest/farmer | \
FARMERINTERFACE=0.0.0.0 \
FARMERAPIPORT=5405 \
FARMERBUSPORT=5406 \
FARMERORGANIZATION="My Org" \
ADMIN_PUBKEYS="ABC25HBCYNHYMIFTN372NCKASUQPJCTBA66GLKXFYM3QGRP42IC5BYYF" \
CERT_HOSTS="farmer.example.com" \
sudo -E bash
```
**Sprout:**
```bash
curl -L https://bootstrap.grlx.dev/latest/sprout | \
FARMERINTERFACE=farmer.example.com \
FARMERAPIPORT=5405 \
FARMERBUSPORT=5406 \
sudo -E bash
```
## Uninstall
To uninstall either component, set the `UNINSTALL` environment variable:
```bash
# Uninstall farmer
curl -L https://bootstrap.grlx.dev/latest/farmer | UNINSTALL=1 sudo -E bash
# Uninstall sprout
curl -L https://bootstrap.grlx.dev/latest/sprout | UNINSTALL=1 sudo -E bash
```
Each uninstall only removes its own files — running both components on the same host is safe.
## Supported Architectures
- x86_64 (amd64)
- i686/i386 (386)
- aarch64/arm64 (arm64)
- armv7l (arm)
## License
[0BSD](LICENSE)