221 lines
5.2 KiB
Markdown
221 lines
5.2 KiB
Markdown
# Quick Start: Setting Up Your socktop APT Repository
|
|
|
|
This guide will get your APT repository up and running in **under 10 minutes**.
|
|
|
|
## Prerequisites
|
|
|
|
- [ ] Debian packages built (or use GitHub Actions to build them)
|
|
- [ ] GPG key for signing
|
|
- [ ] GitHub repository with Pages enabled
|
|
|
|
## Step 1: Create GPG Key (if needed)
|
|
|
|
```bash
|
|
# Generate a new key
|
|
gpg --full-generate-key
|
|
|
|
# Select:
|
|
# - RSA and RSA (default)
|
|
# - 4096 bits
|
|
# - Key does not expire (or 2 years)
|
|
# - Your name and email
|
|
|
|
# Get your key ID
|
|
gpg --list-secret-keys --keyid-format LONG
|
|
# Look for the part after "rsa4096/" - that's your KEY-ID
|
|
```
|
|
|
|
## Step 2: Initialize Repository Locally
|
|
|
|
```bash
|
|
cd socktop
|
|
|
|
# Create the repository structure
|
|
./scripts/init-apt-repo.sh
|
|
|
|
# Build packages (or download from GitHub Actions)
|
|
cargo install cargo-deb
|
|
cargo deb --package socktop
|
|
cargo deb --package socktop_agent
|
|
|
|
# Add packages to repository
|
|
./scripts/add-package-to-repo.sh target/debian/socktop_*.deb
|
|
./scripts/add-package-to-repo.sh target/debian/socktop-agent_*.deb
|
|
|
|
# Sign the repository (replace YOUR-KEY-ID with actual key ID)
|
|
./scripts/sign-apt-repo.sh apt-repo stable YOUR-KEY-ID
|
|
|
|
# Update URLs with your GitHub username
|
|
sed -i 's/YOUR-USERNAME/your-github-username/g' apt-repo/README.md apt-repo/index.html
|
|
```
|
|
|
|
## Step 3: Publish to GitHub Pages (gh-pages branch)
|
|
|
|
```bash
|
|
# Create gh-pages branch
|
|
git checkout --orphan gh-pages
|
|
git rm -rf .
|
|
|
|
# Copy apt-repo CONTENTS to root (not the folder itself)
|
|
cp -r apt-repo/* .
|
|
rm -rf apt-repo
|
|
|
|
# Commit and push
|
|
git add .
|
|
git commit -m "Initialize APT repository"
|
|
git push -u origin gh-pages
|
|
|
|
# Go back to main branch
|
|
git checkout main
|
|
```
|
|
|
|
Then in GitHub:
|
|
1. Go to **Settings → Pages**
|
|
2. Source: **Deploy from a branch**
|
|
3. Branch: **gh-pages** → **/ (root)** → **Save**
|
|
|
|
Wait 1-2 minutes, then visit: `https://your-username.github.io/socktop/`
|
|
|
|
## Step 4: Automate with GitHub Actions
|
|
|
|
Add these secrets to your repository (Settings → Secrets → Actions):
|
|
|
|
```bash
|
|
# Export your private key
|
|
gpg --armor --export-secret-key YOUR-KEY-ID
|
|
|
|
# Copy the ENTIRE output and save as secret: GPG_PRIVATE_KEY
|
|
```
|
|
|
|
Add these three secrets:
|
|
- **GPG_PRIVATE_KEY**: Your exported private key
|
|
- **GPG_KEY_ID**: Your key ID (e.g., `ABC123DEF456`)
|
|
- **GPG_PASSPHRASE**: Your key passphrase (leave empty if no passphrase)
|
|
|
|
The workflow in `.github/workflows/publish-apt-repo.yml` will now:
|
|
- Build packages for AMD64 and ARM64
|
|
- Update the APT repository
|
|
- Sign with your GPG key
|
|
- Push to gh-pages automatically
|
|
|
|
Trigger it by:
|
|
- Creating a version tag: `git tag v1.50.0 && git push --tags`
|
|
- Manual dispatch from GitHub Actions tab
|
|
|
|
## Step 5: Test It
|
|
|
|
On any Debian/Ubuntu system:
|
|
|
|
```bash
|
|
# Add your repository
|
|
curl -fsSL https://your-username.github.io/socktop/KEY.gpg | \
|
|
sudo gpg --dearmor -o /usr/share/keyrings/socktop-archive-keyring.gpg
|
|
|
|
echo "deb [signed-by=/usr/share/keyrings/socktop-archive-keyring.gpg] https://your-username.github.io/socktop stable main" | \
|
|
sudo tee /etc/apt/sources.list.d/socktop.list
|
|
|
|
# Install
|
|
sudo apt update
|
|
sudo apt install socktop socktop-agent
|
|
|
|
# Verify
|
|
socktop --version
|
|
socktop_agent --version
|
|
```
|
|
|
|
## Maintenance
|
|
|
|
### Add a New Version
|
|
|
|
```bash
|
|
# Build new packages
|
|
cargo deb --package socktop
|
|
cargo deb --package socktop_agent
|
|
|
|
# Add to repository
|
|
./scripts/add-package-to-repo.sh target/debian/socktop_*.deb
|
|
./scripts/add-package-to-repo.sh target/debian/socktop-agent_*.deb
|
|
|
|
# Re-sign
|
|
./scripts/sign-apt-repo.sh apt-repo stable YOUR-KEY-ID
|
|
|
|
# Publish
|
|
cd docs/apt # or wherever your apt-repo is
|
|
git add .
|
|
git commit -m "Release v1.51.0"
|
|
git push origin main
|
|
```
|
|
|
|
### Or Just Tag and Let GitHub Actions Do It
|
|
|
|
```bash
|
|
# Update version in Cargo.toml
|
|
# Commit changes
|
|
git add .
|
|
git commit -m "Bump version to 1.51.0"
|
|
|
|
# Tag and push
|
|
git tag v1.51.0
|
|
git push origin main --tags
|
|
|
|
# GitHub Actions will:
|
|
# - Build packages for AMD64 and ARM64
|
|
# - Update gh-pages branch automatically
|
|
# - Sign and publish!
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### "Repository not signed" error
|
|
|
|
Make sure you signed it:
|
|
```bash
|
|
./scripts/sign-apt-repo.sh apt-repo stable YOUR-KEY-ID
|
|
ls apt-repo/dists/stable/Release*
|
|
# Should show: Release, Release.gpg, InRelease, KEY.gpg
|
|
```
|
|
|
|
### "404 Not Found" on GitHub Pages
|
|
|
|
1. Check Settings → Pages is enabled
|
|
2. Wait 2-3 minutes for GitHub to deploy
|
|
3. Verify the URL structure matches your settings
|
|
|
|
### GitHub Actions not signing
|
|
|
|
Check that all three secrets are set correctly:
|
|
- Settings → Secrets and variables → Actions
|
|
- Make sure GPG_PRIVATE_KEY includes the BEGIN/END lines
|
|
- Test locally first
|
|
|
|
## What's Next?
|
|
|
|
✅ You now have a working APT repository!
|
|
|
|
**Share it:**
|
|
- Add installation instructions to your main README
|
|
- Tweet/blog about it
|
|
- Submit to awesome-rust lists
|
|
|
|
**Improve it:**
|
|
- Customize your GitHub Pages site (it's just HTML!)
|
|
- Add more architectures (ARMv7)
|
|
- Create multiple distributions (stable, testing)
|
|
- Set up download statistics
|
|
- Apply to Ubuntu PPA (Launchpad)
|
|
- Eventually submit to official Debian repos
|
|
|
|
## Full Documentation
|
|
|
|
For detailed information, see:
|
|
- `docs/APT_REPOSITORY.md` - Complete APT repository guide
|
|
- `docs/DEBIAN_PACKAGING.md` - Debian packaging details
|
|
- `DEBIAN_PACKAGING_SUMMARY.md` - Quick summary
|
|
|
|
## Questions?
|
|
|
|
Open an issue on GitHub or check the full documentation.
|
|
|
|
---
|
|
|
|
**Happy packaging! 📦** |