Take Claude Desktop from the repository that now carries it
It was `panama app claude-desktop`: a source build, because nothing packaged it. Upstream publishes an RPM repository now, so the exception shrinks to adding that repository -- and the result upgrades with `dnf upgrade` along with everything else instead of needing a slow rebuild every time a version ships. That moves it out of setup/apps/ and into the third-party section of install-packages, beside Bun, Claude Code and RustDesk. It also means it is part of ./install for the first time. The reason it was kept out was the build: slow, wants the network throughout, and fails on an upstream that moved, which is the failure the interview exists to prevent. A dnf install is none of those, and the default dock pins com.anthropic.Claude, so a fresh machine was shipping a pin for something the install had never put there. The repository is added with upstream's own setup script rather than a .repo file written out here. A baseurl copied into this repository is a pin by another name; the script is the part upstream keeps correct. Both halves are skipped when already present, so a re-run costs nothing. The desktop entry id does not change -- it is still com.anthropic.Claude -- so the dock pin and the notification rules carry over untouched. The new package drops the nodejs dependency, which is what used to hide the missing-npm bug the launcher search contract guards; its comment said "depends" in the present tense and now says what actually happened.
This commit is contained in:
+1
-1
@@ -92,7 +92,7 @@ ${BOLD}Examples:${RESET}
|
|||||||
$PROGRAM upgrade
|
$PROGRAM upgrade
|
||||||
$PROGRAM apps
|
$PROGRAM apps
|
||||||
$PROGRAM app
|
$PROGRAM app
|
||||||
$PROGRAM app claude-desktop
|
$PROGRAM app chatgpt-desktop
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
# Claude Desktop.
|
|
||||||
#
|
|
||||||
# Anthropic ships macOS and Windows only. This is a community wrapper that
|
|
||||||
# downloads the official build, bundles Electron, and packages the result as a
|
|
||||||
# proper Fedora RPM -- so what lands on the system is still a package dnf owns
|
|
||||||
# and can remove, which is the part of the dnf/flatpak rule that matters most.
|
|
||||||
#
|
|
||||||
# The exception it needs is the build itself. There is no RPM or flatpak of
|
|
||||||
# Claude Desktop to install, so the choice is building one or not having it.
|
|
||||||
# Nothing is pinned: the default branch is built every time, and a failure is
|
|
||||||
# reported rather than worked around. sunhat pinned versions and every pin was
|
|
||||||
# a 404 within a release cycle.
|
|
||||||
|
|
||||||
description="Claude Desktop, built into a Fedora RPM"
|
|
||||||
repo="https://github.com/dewzor/claude-desktop-fedora.git"
|
|
||||||
|
|
||||||
# The upstream script installs its own build dependencies and prints the RPM it
|
|
||||||
# produced. It needs root because of that dependency install.
|
|
||||||
build() {
|
|
||||||
sudo ./build-fedora.sh
|
|
||||||
|
|
||||||
local rpm
|
|
||||||
rpm="$(find build -name 'claude-desktop-*.rpm' -newermt '-1 hour' 2>/dev/null | head -1)"
|
|
||||||
[[ -n "$rpm" ]] || rpm="$(find . -name 'claude-desktop-*.rpm' 2>/dev/null | head -1)"
|
|
||||||
[[ -n "$rpm" ]] || { printf 'the build produced no RPM\n' >&2; return 1; }
|
|
||||||
|
|
||||||
sudo dnf install -y "$rpm"
|
|
||||||
}
|
|
||||||
@@ -151,10 +151,14 @@ fi
|
|||||||
|
|
||||||
# --- Applications no repository packages -------------------------------------
|
# --- Applications no repository packages -------------------------------------
|
||||||
#
|
#
|
||||||
# Everything else Panama installs comes from dnf or Flathub. These three do not
|
# Everything else Panama installs comes from dnf or Flathub. These four do not
|
||||||
# exist in either, so each is an explicit exception with a reason, and each is
|
# exist in either, so each is an explicit exception with a reason, and each is
|
||||||
# skipped when already present so a re-run costs nothing.
|
# skipped when already present so a re-run costs nothing.
|
||||||
#
|
#
|
||||||
|
# Claude Desktop is the half-exception: a repository does carry it, just not one
|
||||||
|
# Fedora or Flathub knows about, so what is exceptional there is adding the
|
||||||
|
# repository rather than installing around one.
|
||||||
|
#
|
||||||
# None of them pins a version. sunhat pinned URLs -- upscayl 2.11.5, LACT 0.5.4,
|
# None of them pins a version. sunhat pinned URLs -- upscayl 2.11.5, LACT 0.5.4,
|
||||||
# a fedora-40 RPM -- and every one of them was a 404 within a release cycle. An
|
# a fedora-40 RPM -- and every one of them was a 404 within a release cycle. An
|
||||||
# installer that resolves "latest" keeps working; one that names a version rots.
|
# installer that resolves "latest" keeps working; one that names a version rots.
|
||||||
@@ -180,6 +184,28 @@ else
|
|||||||
curl -fsSL https://claude.ai/install.sh | bash > /dev/null 2>&1 || log "Claude Code install failed; skipping"
|
curl -fsSL https://claude.ai/install.sh | bash > /dev/null 2>&1 || log "Claude Code install failed; skipping"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Claude Desktop: Anthropic ships macOS and Windows only, so this is a community
|
||||||
|
# RPM built from the official release. Panama used to build it from source -- it
|
||||||
|
# was `panama app claude-desktop` -- because no repository carried it. Upstream
|
||||||
|
# publishes one now, which is strictly better: the result upgrades with every
|
||||||
|
# other package instead of needing a slow rebuild each time a version ships.
|
||||||
|
#
|
||||||
|
# The repository is added by upstream's own setup script rather than by writing
|
||||||
|
# the .repo file out here. A baseurl copied into this repository is a pin by
|
||||||
|
# another name, and that script is the part upstream keeps correct.
|
||||||
|
if rpm -q claude-desktop-extra >/dev/null 2>&1; then
|
||||||
|
log "Claude Desktop already installed"
|
||||||
|
else
|
||||||
|
if [[ ! -f /etc/yum.repos.d/claude-desktop.repo ]]; then
|
||||||
|
log "Adding the Claude Desktop repository..."
|
||||||
|
curl -fsSL https://patrickjaja.github.io/claude-desktop-extra/install-rpm.sh \
|
||||||
|
| sudo bash > /dev/null 2>&1 || log "Could not add the Claude Desktop repository"
|
||||||
|
fi
|
||||||
|
log "Installing Claude Desktop..."
|
||||||
|
sudo dnf install -y claude-desktop-extra > /dev/null \
|
||||||
|
|| log "Claude Desktop install failed; skipping"
|
||||||
|
fi
|
||||||
|
|
||||||
# RustDesk: remote desktop. The flatpak cannot register the root-owned system
|
# RustDesk: remote desktop. The flatpak cannot register the root-owned system
|
||||||
# service that unattended access needs -- see panama-doctor's rustdesk check --
|
# service that unattended access needs -- see panama-doctor's rustdesk check --
|
||||||
# so this takes the RPM. The download URL is resolved from the latest release
|
# so this takes the RPM. The download URL is resolved from the latest release
|
||||||
|
|||||||
@@ -106,8 +106,9 @@ grep -q 'command -v npm' "$stage" \
|
|||||||
# Checking for npm is not enough. Node comes from nvm, whose script only an
|
# Checking for npm is not enough. Node comes from nvm, whose script only an
|
||||||
# interactive shell sources -- and a stage is not one, so npm is absent unless
|
# interactive shell sources -- and a stage is not one, so npm is absent unless
|
||||||
# the stage goes and gets it. This machine hid that: a system npm existed only
|
# the stage goes and gets it. This machine hid that: a system npm existed only
|
||||||
# because Claude Desktop depends on nodejs. Without this line, a fresh install
|
# because the Claude Desktop of the day pulled in nodejs. It no longer does, so
|
||||||
# builds no extension and says so in one line nobody reads.
|
# nothing hides it any more. Without this line, a fresh install builds no
|
||||||
|
# extension and says so in one line nobody reads.
|
||||||
grep -q '/etc/profile.d/nvm.sh' "$stage" \
|
grep -q '/etc/profile.d/nvm.sh' "$stage" \
|
||||||
|| note 'the extension build never sources nvm, so npm is missing on any machine without a system node'
|
|| note 'the extension build never sources nvm, so npm is missing on any machine without a system node'
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user