docs: point install instructions at pkg.claude-desktop-debian.dev (#510)

Phase 4a-APT cutover (#493, #503) moves binary distribution behind a
Cloudflare Worker at pkg.claude-desktop-debian.dev. The Worker serves
repo metadata directly and 302-redirects .deb/.rpm requests to GitHub
Release assets, which makes the >100 MB .deb push cap irrelevant.

GitHub Pages auto-301s legacy aaddrick.github.io/claude-desktop-debian
URLs to pkg.claude-desktop-debian.dev, but the redirect uses http://
(Pages has no cert for pkg.<domain> — DNS points at Cloudflare, so
Pages can never pass domain verification). apt refuses that scheme
downgrade as a security policy, so existing users' sources.list
silently breaks on the next `apt update`. DNF accepts the downgrade
and keeps working.

Changes:

- README.md: install snippets (APT + DNF) now point at
  pkg.claude-desktop-debian.dev directly. New users never touch the
  Pages redirect chain.
- README.md: add a "Migrating from the old aaddrick.github.io URL"
  section with sed one-liners for existing users + a short background
  paragraph explaining why the change was needed.
- .github/workflows/ci.yml: release-notes install snippets (APT + DNF,
  both branches) and the generated claude-desktop.repo file's baseurl
  and gpgkey all point at pkg.<domain>. Smoke-test chain walkers
  deliberately keep starting at github.io (they test the full 3-hop
  Pages→Worker→Releases chain for clients that do follow the
  downgrade, like curl-without-L and dnf).

Refs #493, #503
This commit is contained in:
Aaddrick
2026-04-23 16:12:05 -04:00
committed by GitHub
parent de19c1bb36
commit 8bce730056
2 changed files with 34 additions and 11 deletions

View File

@@ -282,8 +282,8 @@ jobs:
echo ""
echo '```bash'
echo "# First time? Add the repo:"
echo "curl -fsSL https://aaddrick.github.io/claude-desktop-debian/KEY.gpg | sudo gpg --dearmor -o /usr/share/keyrings/claude-desktop.gpg"
echo 'echo "deb [signed-by=/usr/share/keyrings/claude-desktop.gpg arch=amd64,arm64] https://aaddrick.github.io/claude-desktop-debian stable main" | sudo tee /etc/apt/sources.list.d/claude-desktop.list'
echo "curl -fsSL https://pkg.claude-desktop-debian.dev/KEY.gpg | sudo gpg --dearmor -o /usr/share/keyrings/claude-desktop.gpg"
echo 'echo "deb [signed-by=/usr/share/keyrings/claude-desktop.gpg arch=amd64,arm64] https://pkg.claude-desktop-debian.dev stable main" | sudo tee /etc/apt/sources.list.d/claude-desktop.list'
echo ""
echo "# Install or update:"
echo "sudo apt update && sudo apt install claude-desktop"
@@ -293,7 +293,7 @@ jobs:
echo ""
echo '```bash'
echo "# First time? Add the repo:"
echo "sudo curl -fsSL https://aaddrick.github.io/claude-desktop-debian/rpm/claude-desktop.repo -o /etc/yum.repos.d/claude-desktop.repo"
echo "sudo curl -fsSL https://pkg.claude-desktop-debian.dev/rpm/claude-desktop.repo -o /etc/yum.repos.d/claude-desktop.repo"
echo ""
echo "# Install or update:"
echo "sudo dnf install claude-desktop"
@@ -340,8 +340,8 @@ jobs:
echo ""
echo '```bash'
echo "# First time? Add the repo:"
echo "curl -fsSL https://aaddrick.github.io/claude-desktop-debian/KEY.gpg | sudo gpg --dearmor -o /usr/share/keyrings/claude-desktop.gpg"
echo 'echo "deb [signed-by=/usr/share/keyrings/claude-desktop.gpg arch=amd64,arm64] https://aaddrick.github.io/claude-desktop-debian stable main" | sudo tee /etc/apt/sources.list.d/claude-desktop.list'
echo "curl -fsSL https://pkg.claude-desktop-debian.dev/KEY.gpg | sudo gpg --dearmor -o /usr/share/keyrings/claude-desktop.gpg"
echo 'echo "deb [signed-by=/usr/share/keyrings/claude-desktop.gpg arch=amd64,arm64] https://pkg.claude-desktop-debian.dev stable main" | sudo tee /etc/apt/sources.list.d/claude-desktop.list'
echo ""
echo "# Install or update:"
echo "sudo apt update && sudo apt install claude-desktop"
@@ -351,7 +351,7 @@ jobs:
echo ""
echo '```bash'
echo "# First time? Add the repo:"
echo "sudo curl -fsSL https://aaddrick.github.io/claude-desktop-debian/rpm/claude-desktop.repo -o /etc/yum.repos.d/claude-desktop.repo"
echo "sudo curl -fsSL https://pkg.claude-desktop-debian.dev/rpm/claude-desktop.repo -o /etc/yum.repos.d/claude-desktop.repo"
echo ""
echo "# Install or update:"
echo "sudo dnf install claude-desktop"
@@ -518,6 +518,10 @@ jobs:
repoVer="${TAG#v}"; repoVer="${repoVer%+claude*}"
claudeVer="${TAG#*+claude}"
deb_name="claude-desktop_${claudeVer}-${repoVer}_amd64.deb"
# Intentionally starts at the github.io URL: the smoke test
# walks the full Pages-301 → Worker-302 → Releases chain to
# confirm the legacy redirect path still works for clients
# that follow HTTPS→HTTP downgrades (DNF, curl without -L).
deb_url="https://aaddrick.github.io/claude-desktop-debian/pool/main/c/claude-desktop/${deb_name}"
# Wait for propagation
@@ -660,11 +664,11 @@ jobs:
printf '%s\n' \
'[claude-desktop]' \
'name=Claude Desktop for Fedora/RHEL' \
'baseurl=https://aaddrick.github.io/claude-desktop-debian/rpm/$basearch' \
'baseurl=https://pkg.claude-desktop-debian.dev/rpm/$basearch' \
'enabled=1' \
'gpgcheck=1' \
'repo_gpgcheck=1' \
'gpgkey=https://aaddrick.github.io/claude-desktop-debian/KEY.gpg' \
'gpgkey=https://pkg.claude-desktop-debian.dev/KEY.gpg' \
> rpm/claude-desktop.repo
- name: Re-upload signed RPMs to GitHub Release
@@ -734,6 +738,8 @@ jobs:
repoVer="${TAG#v}"; repoVer="${repoVer%+claude*}"
claudeVer="${TAG#*+claude}"
rpm_name="claude-desktop-${claudeVer}-${repoVer}-1.x86_64.rpm"
# Intentionally starts at the github.io URL — see APT smoke
# test comment above for why.
rpm_url="https://aaddrick.github.io/claude-desktop-debian/rpm/x86_64/${rpm_name}"
deadline=$((SECONDS + 300))

View File

@@ -50,10 +50,10 @@ Add the repository for automatic updates via `apt`:
```bash
# Add the GPG key
curl -fsSL https://aaddrick.github.io/claude-desktop-debian/KEY.gpg | sudo gpg --dearmor -o /usr/share/keyrings/claude-desktop.gpg
curl -fsSL https://pkg.claude-desktop-debian.dev/KEY.gpg | sudo gpg --dearmor -o /usr/share/keyrings/claude-desktop.gpg
# Add the repository
echo "deb [signed-by=/usr/share/keyrings/claude-desktop.gpg arch=amd64,arm64] https://aaddrick.github.io/claude-desktop-debian stable main" | sudo tee /etc/apt/sources.list.d/claude-desktop.list
echo "deb [signed-by=/usr/share/keyrings/claude-desktop.gpg arch=amd64,arm64] https://pkg.claude-desktop-debian.dev stable main" | sudo tee /etc/apt/sources.list.d/claude-desktop.list
# Update and install
sudo apt update
@@ -68,7 +68,7 @@ Add the repository for automatic updates via `dnf`:
```bash
# Add the repository
sudo curl -fsSL https://aaddrick.github.io/claude-desktop-debian/rpm/claude-desktop.repo -o /etc/yum.repos.d/claude-desktop.repo
sudo curl -fsSL https://pkg.claude-desktop-debian.dev/rpm/claude-desktop.repo -o /etc/yum.repos.d/claude-desktop.repo
# Install
sudo dnf install claude-desktop
@@ -76,6 +76,23 @@ sudo dnf install claude-desktop
Future updates will be installed automatically with your regular system updates (`sudo dnf upgrade`).
#### Migrating from the old `aaddrick.github.io` URL
If you installed claude-desktop before April 2026, your repo config points at `https://aaddrick.github.io/claude-desktop-debian`. That URL now auto-redirects to `pkg.claude-desktop-debian.dev` — DNF follows the redirect transparently, but **apt refuses it as a security downgrade**, so `apt update` fails. Update your sources list to the new URL:
```bash
# APT (Debian/Ubuntu)
sudo sed -i 's|https://aaddrick\.github\.io/claude-desktop-debian|https://pkg.claude-desktop-debian.dev|g' \
/etc/apt/sources.list.d/claude-desktop.list
sudo apt update
# DNF (Fedora/RHEL) — optional refresh; the old URL still works but pointing directly at the new host is cleaner
sudo curl -fsSL https://pkg.claude-desktop-debian.dev/rpm/claude-desktop.repo \
-o /etc/yum.repos.d/claude-desktop.repo
```
Background: binaries for recent releases are no longer committed to the `gh-pages` branch — `.deb` files grew past GitHub's 100 MB per-file cap (#493). The new URL is fronted by a small Cloudflare Worker that serves the existing metadata directly and 302-redirects package downloads to the corresponding GitHub Release asset. Bandwidth and package bytes still come from GitHub; the Worker just handles the routing.
### Using AUR (Arch Linux)
The [`claude-desktop-appimage`](https://aur.archlinux.org/packages/claude-desktop-appimage) package is available on the AUR and is automatically updated with each release.