423 lines
12 KiB
Markdown
423 lines
12 KiB
Markdown
|
|
# APT Repository Setup Summary
|
||
|
|
|
||
|
|
## 🎉 What You Now Have
|
||
|
|
|
||
|
|
You now have a complete system for creating and hosting your own APT repository for socktop packages, **without needing a sponsor or official Debian/Ubuntu approval**.
|
||
|
|
|
||
|
|
## 📁 Files Created
|
||
|
|
|
||
|
|
### Scripts (in `scripts/`)
|
||
|
|
- **`init-apt-repo.sh`** - Initializes the APT repository directory structure
|
||
|
|
- **`add-package-to-repo.sh`** - Adds .deb packages to the repository and generates metadata
|
||
|
|
- **`sign-apt-repo.sh`** - Signs the repository with your GPG key
|
||
|
|
- **`setup-apt-repo.sh`** - All-in-one interactive wizard to set everything up
|
||
|
|
|
||
|
|
### Documentation
|
||
|
|
- **`QUICK_START_APT_REPO.md`** - Quick start guide (< 10 minutes)
|
||
|
|
- **`docs/APT_REPOSITORY.md`** - Comprehensive 600+ line guide covering everything
|
||
|
|
- **`APT_REPO_SUMMARY.md`** - This file
|
||
|
|
|
||
|
|
### GitHub Actions
|
||
|
|
- **`.github/workflows/publish-apt-repo.yml`** - Automated building, signing, and publishing
|
||
|
|
|
||
|
|
## 🚀 Quick Start (Choose One)
|
||
|
|
|
||
|
|
### Option 1: Interactive Setup (Recommended for First Time)
|
||
|
|
|
||
|
|
Run the setup wizard:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
./scripts/setup-apt-repo.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
This walks you through:
|
||
|
|
1. ✅ Checking prerequisites
|
||
|
|
2. 🔑 Setting up GPG key
|
||
|
|
3. 📦 Finding/building packages
|
||
|
|
4. 📝 Creating repository structure
|
||
|
|
5. ✍️ Signing the repository
|
||
|
|
6. 📋 Next steps to publish to gh-pages
|
||
|
|
|
||
|
|
### Option 2: Manual Step-by-Step
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 1. Initialize
|
||
|
|
./scripts/init-apt-repo.sh
|
||
|
|
|
||
|
|
# 2. Build packages
|
||
|
|
cargo deb --package socktop
|
||
|
|
cargo deb --package socktop_agent
|
||
|
|
|
||
|
|
# 3. Add packages
|
||
|
|
./scripts/add-package-to-repo.sh target/debian/socktop_*.deb
|
||
|
|
./scripts/add-package-to-repo.sh target/debian/socktop-agent_*.deb
|
||
|
|
|
||
|
|
# 4. Sign (replace YOUR-KEY-ID)
|
||
|
|
./scripts/sign-apt-repo.sh apt-repo stable YOUR-KEY-ID
|
||
|
|
|
||
|
|
# 5. Update URLs
|
||
|
|
sed -i 's/YOUR-USERNAME/your-github-username/g' apt-repo/*.{md,html}
|
||
|
|
|
||
|
|
# 6. Publish to gh-pages (see below)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Option 3: Fully Automated (After Initial Setup)
|
||
|
|
|
||
|
|
Once gh-pages branch exists, just tag releases:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
git tag v1.50.0
|
||
|
|
git push --tags
|
||
|
|
|
||
|
|
# GitHub Actions will:
|
||
|
|
# - Build packages for AMD64 and ARM64
|
||
|
|
# - Update APT repository
|
||
|
|
# - Sign with your GPG key
|
||
|
|
# - Push to gh-pages branch automatically
|
||
|
|
```
|
||
|
|
|
||
|
|
## 📤 Publishing to GitHub Pages (gh-pages branch)
|
||
|
|
|
||
|
|
**Why gh-pages branch?**
|
||
|
|
- ✅ Keeps main branch clean (source code only)
|
||
|
|
- ✅ Separate branch for published content
|
||
|
|
- ✅ GitHub Actions can auto-update it
|
||
|
|
- ✅ You can customize the landing page
|
||
|
|
|
||
|
|
**Initial Setup:**
|
||
|
|
```bash
|
||
|
|
# Create gh-pages branch
|
||
|
|
git checkout --orphan gh-pages
|
||
|
|
git rm -rf .
|
||
|
|
|
||
|
|
# Copy apt-repo CONTENTS to root (not the folder!)
|
||
|
|
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
|
||
|
|
|
||
|
|
# Return to main
|
||
|
|
git checkout main
|
||
|
|
```
|
||
|
|
|
||
|
|
**Enable in GitHub:**
|
||
|
|
1. Settings → Pages
|
||
|
|
2. Source: **gh-pages** → **/ (root)**
|
||
|
|
3. Save
|
||
|
|
|
||
|
|
Your repo will be at: `https://your-username.github.io/socktop/`
|
||
|
|
|
||
|
|
**Note:** GitHub Pages only allows `/` (root) or `/docs`. Since we use gh-pages branch, contents go in the root of that branch.
|
||
|
|
|
||
|
|
See `SETUP_GITHUB_PAGES.md` for detailed step-by-step instructions.
|
||
|
|
|
||
|
|
### Alternative: Self-Hosted Server
|
||
|
|
|
||
|
|
Copy `apt-repo/` contents to your web server:
|
||
|
|
```bash
|
||
|
|
rsync -avz apt-repo/ user@example.com:/var/www/apt/
|
||
|
|
```
|
||
|
|
|
||
|
|
Configure Apache/Nginx to serve the directory. See `docs/APT_REPOSITORY.md` for details.
|
||
|
|
|
||
|
|
## 🤖 GitHub Actions Automation
|
||
|
|
|
||
|
|
### Required Secrets
|
||
|
|
|
||
|
|
Add these in GitHub Settings → Secrets → Actions:
|
||
|
|
|
||
|
|
1. **GPG_PRIVATE_KEY**
|
||
|
|
```bash
|
||
|
|
gpg --armor --export-secret-key YOUR-KEY-ID
|
||
|
|
# Copy entire output including BEGIN/END lines
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **GPG_KEY_ID**
|
||
|
|
```bash
|
||
|
|
gpg --list-secret-keys --keyid-format LONG
|
||
|
|
# Use the ID after "rsa4096/"
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **GPG_PASSPHRASE**
|
||
|
|
```bash
|
||
|
|
# Your GPG passphrase (leave empty if no passphrase)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Triggers
|
||
|
|
|
||
|
|
The workflow runs on:
|
||
|
|
- **Version tags**: `git tag v1.50.0 && git push --tags`
|
||
|
|
- **Manual dispatch**: Actions tab → "Publish APT Repository" → Run workflow
|
||
|
|
|
||
|
|
### What It Does
|
||
|
|
|
||
|
|
1. ✅ Builds packages for AMD64 and ARM64
|
||
|
|
2. ✅ Initializes or updates APT repository
|
||
|
|
3. ✅ Generates Packages files and metadata
|
||
|
|
4. ✅ Signs with your GPG key
|
||
|
|
5. ✅ Commits and pushes to gh-pages branch
|
||
|
|
6. ✅ Creates GitHub Release with artifacts
|
||
|
|
7. ✅ Generates summary with installation instructions
|
||
|
|
|
||
|
|
## 👥 User Installation
|
||
|
|
|
||
|
|
Once published, users install with:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Add 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
|
||
|
|
|
||
|
|
# The agent service is automatically installed and configured
|
||
|
|
sudo systemctl enable --now socktop-agent
|
||
|
|
```
|
||
|
|
|
||
|
|
## 🔧 Maintenance
|
||
|
|
|
||
|
|
### Release New Version (Automated)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Update version in Cargo.toml, commit changes
|
||
|
|
git add . && git commit -m "Bump version to 1.51.0"
|
||
|
|
git tag v1.51.0
|
||
|
|
git push origin main --tags
|
||
|
|
|
||
|
|
# GitHub Actions automatically:
|
||
|
|
# - Builds packages for AMD64 and ARM64
|
||
|
|
# - Updates apt-repo
|
||
|
|
# - Signs with GPG
|
||
|
|
# - Pushes to gh-pages branch
|
||
|
|
```
|
||
|
|
|
||
|
|
### Manual Update (if needed)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# On main branch
|
||
|
|
cargo deb --package socktop
|
||
|
|
./scripts/add-package-to-repo.sh target/debian/socktop_*.deb
|
||
|
|
./scripts/sign-apt-repo.sh
|
||
|
|
|
||
|
|
# Switch to gh-pages and update
|
||
|
|
git checkout gh-pages
|
||
|
|
cp -r apt-repo/* .
|
||
|
|
git add . && git commit -m "Release v1.51.0" && git push
|
||
|
|
git checkout main
|
||
|
|
```
|
||
|
|
|
||
|
|
### Remove Old Versions
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# On gh-pages branch
|
||
|
|
git checkout gh-pages
|
||
|
|
rm pool/main/socktop_1.50.0_*.deb
|
||
|
|
# Regenerate metadata (re-add remaining packages)
|
||
|
|
git add . && git commit -m "Remove old versions" && git push
|
||
|
|
git checkout main
|
||
|
|
```
|
||
|
|
|
||
|
|
## 🎯 Key Benefits
|
||
|
|
|
||
|
|
✅ **No sponsor needed** - Host your own repository
|
||
|
|
✅ **Full control** - You decide when to release
|
||
|
|
✅ **Free hosting** - GitHub Pages at no cost
|
||
|
|
✅ **Automated** - GitHub Actions does the work
|
||
|
|
✅ **Professional** - Just like official repos
|
||
|
|
✅ **Multi-arch** - AMD64, ARM64 support built-in
|
||
|
|
✅ **Secure** - GPG signed packages
|
||
|
|
✅ **Easy updates** - Users get updates via `apt upgrade`
|
||
|
|
|
||
|
|
## 📊 Repository Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
apt-repo/
|
||
|
|
├── dists/
|
||
|
|
│ └── stable/
|
||
|
|
│ ├── Release # Main metadata (checksums)
|
||
|
|
│ ├── Release.gpg # Detached signature
|
||
|
|
│ ├── InRelease # Clearsigned release
|
||
|
|
│ └── main/
|
||
|
|
│ ├── binary-amd64/
|
||
|
|
│ │ ├── Packages # Package list
|
||
|
|
│ │ ├── Packages.gz # Compressed
|
||
|
|
│ │ └── Release # Component metadata
|
||
|
|
│ ├── binary-arm64/
|
||
|
|
│ └── binary-armhf/
|
||
|
|
├── pool/
|
||
|
|
│ └── main/
|
||
|
|
│ ├── socktop_1.50.0_amd64.deb
|
||
|
|
│ ├── socktop-agent_1.50.1_amd64.deb
|
||
|
|
│ ├── socktop_1.50.0_arm64.deb
|
||
|
|
│ └── socktop-agent_1.50.1_arm64.deb
|
||
|
|
├── KEY.gpg # Public GPG key
|
||
|
|
├── README.md # Repository info
|
||
|
|
├── index.html # Web interface
|
||
|
|
└── packages.html # Package listing
|
||
|
|
```
|
||
|
|
|
||
|
|
## 🔑 GPG Key Management
|
||
|
|
|
||
|
|
### Create New Key
|
||
|
|
|
||
|
|
```bash
|
||
|
|
gpg --full-generate-key
|
||
|
|
# Choose RSA 4096, no expiration (or 2 years)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Export Keys
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Public key (for users)
|
||
|
|
gpg --armor --export YOUR-KEY-ID > KEY.gpg
|
||
|
|
|
||
|
|
# Private key (for GitHub Secrets)
|
||
|
|
gpg --armor --export-secret-key YOUR-KEY-ID
|
||
|
|
```
|
||
|
|
|
||
|
|
### Backup Keys
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Backup to safe location
|
||
|
|
gpg --export-secret-keys YOUR-KEY-ID > gpg-private-backup.key
|
||
|
|
gpg --export YOUR-KEY-ID > gpg-public-backup.key
|
||
|
|
```
|
||
|
|
|
||
|
|
### Key Rotation
|
||
|
|
|
||
|
|
If your key expires or is compromised:
|
||
|
|
```bash
|
||
|
|
./scripts/sign-apt-repo.sh apt-repo stable NEW-KEY-ID
|
||
|
|
gpg --armor --export NEW-KEY-ID > apt-repo/KEY.gpg
|
||
|
|
# Users need to re-import the key
|
||
|
|
```
|
||
|
|
|
||
|
|
## 🐛 Troubleshooting
|
||
|
|
|
||
|
|
### "Repository not signed"
|
||
|
|
```bash
|
||
|
|
./scripts/sign-apt-repo.sh apt-repo stable YOUR-KEY-ID
|
||
|
|
ls apt-repo/dists/stable/Release* # Should show 3 files
|
||
|
|
```
|
||
|
|
|
||
|
|
### "Package not found"
|
||
|
|
```bash
|
||
|
|
cd apt-repo
|
||
|
|
dpkg-scanpackages --arch amd64 pool/main /dev/null > dists/stable/main/binary-amd64/Packages
|
||
|
|
gzip -9 -k -f dists/stable/main/binary-amd64/Packages
|
||
|
|
cd ..
|
||
|
|
./scripts/sign-apt-repo.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
### "404 Not Found" on GitHub Pages
|
||
|
|
- Wait 2-3 minutes after pushing
|
||
|
|
- Check Settings → Pages is enabled
|
||
|
|
- Verify source branch/directory
|
||
|
|
|
||
|
|
### GitHub Actions not signing
|
||
|
|
- Check all 3 secrets are set correctly
|
||
|
|
- GPG_PRIVATE_KEY must include BEGIN/END lines
|
||
|
|
- Test signing locally first
|
||
|
|
|
||
|
|
## 📚 Documentation
|
||
|
|
|
||
|
|
| File | Purpose | Length |
|
||
|
|
|------|---------|--------|
|
||
|
|
| `QUICK_START_APT_REPO.md` | Get started in < 10 minutes | Quick |
|
||
|
|
| `SETUP_GITHUB_PAGES.md` | Detailed gh-pages setup guide | Step-by-step |
|
||
|
|
| `docs/APT_REPOSITORY.md` | Complete guide with all options | Comprehensive |
|
||
|
|
| `docs/DEBIAN_PACKAGING.md` | How .deb packages are built | Technical |
|
||
|
|
| `DEBIAN_PACKAGING_SUMMARY.md` | Overview of packaging work | Summary |
|
||
|
|
| `APT_REPO_SUMMARY.md` | This file | Overview |
|
||
|
|
|
||
|
|
## 🎓 Learning Path
|
||
|
|
|
||
|
|
1. **Start here**: `QUICK_START_APT_REPO.md` (10 min)
|
||
|
|
2. **Set up**: Run `./scripts/setup-apt-repo.sh` (15 min)
|
||
|
|
3. **Publish**: Follow `SETUP_GITHUB_PAGES.md` (5 min)
|
||
|
|
4. **Automate**: Set up GitHub Actions secrets (10 min)
|
||
|
|
5. **Advanced**: Read `docs/APT_REPOSITORY.md` as needed
|
||
|
|
|
||
|
|
## 🚦 Next Steps
|
||
|
|
|
||
|
|
Choose your path:
|
||
|
|
|
||
|
|
### Just Getting Started?
|
||
|
|
1. ✅ Read `QUICK_START_APT_REPO.md`
|
||
|
|
2. ✅ Run `./scripts/setup-apt-repo.sh`
|
||
|
|
3. ✅ Follow `SETUP_GITHUB_PAGES.md` to publish
|
||
|
|
4. ✅ Test installation on a VM
|
||
|
|
|
||
|
|
### Want Automation?
|
||
|
|
1. ✅ Generate/export GPG key
|
||
|
|
2. ✅ Add GitHub Secrets
|
||
|
|
3. ✅ Tag a release: `git tag v1.50.0 && git push --tags`
|
||
|
|
4. ✅ Watch GitHub Actions magic happen
|
||
|
|
|
||
|
|
### Want to Understand Everything?
|
||
|
|
1. ✅ Read `docs/APT_REPOSITORY.md` (comprehensive)
|
||
|
|
2. ✅ Study the scripts in `scripts/`
|
||
|
|
3. ✅ Examine `.github/workflows/publish-apt-repo.yml`
|
||
|
|
4. ✅ Learn about Debian repository format
|
||
|
|
|
||
|
|
### Ready for Production?
|
||
|
|
1. ✅ Set up monitoring/analytics
|
||
|
|
2. ✅ Create PPA for Ubuntu (Launchpad)
|
||
|
|
3. ✅ Apply to Debian mentors for official inclusion
|
||
|
|
4. ✅ Set up repository mirrors
|
||
|
|
5. ✅ Document best practices for users
|
||
|
|
|
||
|
|
## 🌟 Success Criteria
|
||
|
|
|
||
|
|
You'll know you're successful when:
|
||
|
|
|
||
|
|
- [ ] Users can `apt install socktop`
|
||
|
|
- [ ] Updates work with `apt upgrade`
|
||
|
|
- [ ] Multiple architectures supported
|
||
|
|
- [ ] Repository is GPG signed
|
||
|
|
- [ ] GitHub Actions publishes automatically
|
||
|
|
- [ ] Installation instructions in README
|
||
|
|
- [ ] Zero sponsor or approval needed
|
||
|
|
|
||
|
|
## 💡 Pro Tips
|
||
|
|
|
||
|
|
1. **Test first**: Always test on a fresh VM before publishing
|
||
|
|
2. **Keep versions**: Don't delete old .deb files immediately
|
||
|
|
3. **Backup GPG key**: Store it safely offline
|
||
|
|
4. **Monitor downloads**: Use GitHub Insights or server logs
|
||
|
|
5. **Document everything**: Help users troubleshoot
|
||
|
|
6. **Version consistently**: Use semantic versioning
|
||
|
|
7. **Sign always**: Never publish unsigned repositories
|
||
|
|
|
||
|
|
## 🔗 Resources
|
||
|
|
|
||
|
|
- [Debian Repository Format](https://wiki.debian.org/DebianRepository/Format)
|
||
|
|
- [GitHub Pages Docs](https://docs.github.com/en/pages)
|
||
|
|
- [cargo-deb](https://github.com/kornelski/cargo-deb)
|
||
|
|
- [Ubuntu PPA Guide](https://help.launchpad.net/Packaging/PPA)
|
||
|
|
- [Debian Mentors](https://mentors.debian.net/)
|
||
|
|
|
||
|
|
## 🎊 Congratulations!
|
||
|
|
|
||
|
|
You now have everything you need to:
|
||
|
|
- ✅ Create your own APT repository
|
||
|
|
- ✅ Host it for free on GitHub Pages
|
||
|
|
- ✅ Automate the entire process
|
||
|
|
- ✅ Distribute packages professionally
|
||
|
|
- ✅ Provide easy installation for users
|
||
|
|
|
||
|
|
**No sponsor required. No approval needed. You're in control!** 🚀
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Questions?** Check the docs or open an issue.
|
||
|
|
|
||
|
|
**Ready to publish?** Run `./scripts/setup-apt-repo.sh` and follow the wizard!
|