Add RPM spec: repackage upstream claude-desktop .deb (preserves setuid chrome-sandbox)
This commit is contained in:
78
rpm/claude-desktop.spec
Normal file
78
rpm/claude-desktop.spec
Normal file
@@ -0,0 +1,78 @@
|
||||
# Prebuilt Electron bundle repackaged from the upstream .deb — no compile,
|
||||
# no strip, no debuginfo (matches the house convention in lair/mistralrs-package).
|
||||
%global _build_id_links none
|
||||
%global debug_package %{nil}
|
||||
%global __strip /usr/bin/true
|
||||
|
||||
# Passed in via --define at rpmbuild time (see .gitea/workflows/build-release.yml).
|
||||
%{!?claude_desktop_version: %global claude_desktop_version 0.0.0}
|
||||
|
||||
# The bundled Electron .so files are private to the app; don't let rpm scan
|
||||
# them for provides/requires. Fedora-native runtime deps are listed manually.
|
||||
%global __requires_exclude ^.*$
|
||||
%global __provides_exclude ^.*$
|
||||
|
||||
Name: claude-desktop
|
||||
Version: %{claude_desktop_version}
|
||||
Release: 1%{?dist}
|
||||
Summary: Desktop application for Claude.ai
|
||||
|
||||
License: LicenseRef-Anthropic-Proprietary
|
||||
URL: https://claude.ai
|
||||
Source0: claude-desktop_%{claude_desktop_version}_amd64.deb
|
||||
ExclusiveArch: x86_64
|
||||
|
||||
Requires: gtk3 libnotify nss libXtst libuuid at-spi2-core
|
||||
Requires: libdrm mesa-libgbm libsecret xdg-utils
|
||||
|
||||
%description
|
||||
Desktop application for Claude.ai, repackaged from the upstream Debian
|
||||
package. The Debian-specific AppArmor/apt maintainer scripts are omitted
|
||||
(Fedora uses SELinux and dnf); the setuid-root chrome-sandbox helper is
|
||||
preserved so Chromium's sandbox works.
|
||||
|
||||
%prep
|
||||
%setup -q -c -T
|
||||
# Extract the .deb without dpkg: `ar` (binutils) + `tar` (auto-detects the
|
||||
# data member's compression, currently xz). Portable across CI runners.
|
||||
ar x %{SOURCE0}
|
||||
mkdir -p payload
|
||||
tar -xf data.tar.* -C payload
|
||||
|
||||
%build
|
||||
# Nothing to build — prebuilt bundle.
|
||||
|
||||
%install
|
||||
cp -a payload/usr %{buildroot}/usr
|
||||
# Drop Debian packaging cruft that has no meaning on Fedora.
|
||||
rm -rf %{buildroot}/usr/share/lintian
|
||||
rm -rf %{buildroot}/usr/share/doc/claude-desktop
|
||||
# Chromium's sandbox helper must be setuid root. Set it explicitly rather
|
||||
# than relying on the extraction tool to preserve it (GNU tar drops setuid
|
||||
# bits when not run as root). rpm records root:root ownership by default.
|
||||
chmod 4755 %{buildroot}/usr/lib/claude-desktop/chrome-sandbox
|
||||
|
||||
%files
|
||||
%{_bindir}/claude-desktop
|
||||
%dir /usr/lib/claude-desktop
|
||||
# The bundle, including chrome-sandbox which keeps its setuid-root (4755)
|
||||
# mode from the upstream deb — required for Chromium's sandbox to work.
|
||||
/usr/lib/claude-desktop/*
|
||||
/usr/share/applications/claude-desktop.desktop
|
||||
/usr/share/icons/hicolor/*/apps/claude-desktop.png
|
||||
|
||||
%post
|
||||
touch --no-create /usr/share/icons/hicolor &>/dev/null || :
|
||||
update-desktop-database &>/dev/null || :
|
||||
|
||||
%postun
|
||||
if [ $1 -eq 0 ] ; then
|
||||
touch --no-create /usr/share/icons/hicolor &>/dev/null
|
||||
gtk-update-icon-cache /usr/share/icons/hicolor &>/dev/null || :
|
||||
update-desktop-database &>/dev/null || :
|
||||
fi
|
||||
|
||||
%posttrans
|
||||
gtk-update-icon-cache /usr/share/icons/hicolor &>/dev/null || :
|
||||
|
||||
%changelog
|
||||
Reference in New Issue
Block a user