File rustdesk.spec of Package rustdesk
# spec file for package rustdesk
#
Name: rustdesk
Version: 1.4.3
Release: 0
Summary: Remote desktop software written in Rust
License: AGPL-3.0-only
URL: https://github.com/rustdesk/rustdesk
Source0: rustdesk-%{version}-0.x86_64-suse.rpm
ExclusiveArch: x86_64
AutoReqProv: no
# Add BuildRequires
BuildRequires: build
BuildRequires: systemd-rpm-macros
BuildRequires: hicolor-icon-theme
BuildRequires: chrpath
BuildRequires: desktop-file-utils
# Add runtime dependency for the service
Requires: systemd
Requires: hicolor-icon-theme
# Add Requires for the ldconfig *command path*
Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
%description
RustDesk is a free and open-source remote desktop software written in Rust.
This package repackages the official RustDesk release RPM for OBS.
%prep
# Unpack the source RPM
%setup -c -T -n %{name}-%{version}
unrpm %{SOURCE0}
%build
# nothing to build
%install
# Create all the destination directories
mkdir -p %{buildroot}%{_unitdir}
mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_datadir}/applications
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/
mkdir -p %{buildroot}%{_libdir}/%{name}
mkdir -p %{buildroot}%{_datadir}/%{name}
mkdir -p %{buildroot}/etc/ld.so.conf.d
# Move the libraries to the correct architecture-specific location
mv usr/share/rustdesk/lib/* %{buildroot}%{_libdir}/%{name}/
# Move the architecture-independent data files
mv usr/share/rustdesk/data %{buildroot}%{_datadir}/%{name}/data
# --- THIS IS THE KEY CHANGE ---
# Move the binary to /usr/share/rustdesk, not /usr/bin
mv usr/share/rustdesk/rustdesk %{buildroot}%{_datadir}/%{name}/rustdesk
# Create a symlink in /usr/bin pointing to the real binary
ln -s %{_datadir}/%{name}/rustdesk %{buildroot}%{_bindir}/rustdesk
# Move the systemd service file
mv usr/share/rustdesk/files/rustdesk.service %{buildroot}%{_unitdir}/rustdesk.service
# Move the desktop entry
mv usr/share/rustdesk/files/rustdesk.desktop %{buildroot}%{_datadir}/applications/rustdesk.desktop
# Move the link desktop file
mkdir -p %{buildroot}%{_datadir}/%{name}/files
mv usr/share/rustdesk/files/rustdesk-link.desktop %{buildroot}%{_datadir}/%{name}/files/
# Move the icons
mv usr/share/icons/hicolor/256x256/apps/rustdesk.png %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/rustdesk.png
mv usr/share/icons/hicolor/scalable/apps/rustdesk.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/rustdesk.svg
# --- Fix Binary Issues ---
# Remove RPATH from the *real* binary and libraries
chrpath -d %{buildroot}%{_datadir}/%{name}/rustdesk
for lib in %{buildroot}%{_libdir}/%{name}/*.so; do
chrpath -d "$lib"
# Set executable bit on libraries
chmod 755 "$lib"
done
# Strip the *real* binary and libraries
strip %{buildroot}%{_datadir}/%{name}/rustdesk
strip %{buildroot}%{_libdir}/%{name}/*.so
# Validate desktop file
desktop-file-validate %{buildroot}%{_datadir}/applications/rustdesk.desktop
# Add linker config file
echo "%{_libdir}/%{name}" > %{buildroot}/etc/ld.so.conf.d/%{name}.conf
%pre
%service_add_pre rustdesk.service
%post
%systemd_post rustdesk.service
%icon_theme_cache_post
%desktop_database_post
# Run ldconfig to update linker cache
ldconfig
%preun
%systemd_preun rustdesk.service
%postun
%systemd_postun_with_restart rustdesk.service
%icon_theme_cache_postun
%desktop_database_postun
# Run ldconfig to update linker cache
ldconfig
%files
%defattr(-,root,root)
# Main binary (this is the symlink)
%{_bindir}/rustdesk
# Systemd service
%{_unitdir}/rustdesk.service
# Desktop files
%{_datadir}/applications/rustdesk.desktop
# Icons
%{_datadir}/icons/hicolor/256x256/apps/rustdesk.png
%{_datadir}/icons/hicolor/scalable/apps/rustdesk.svg
# Linker config
%config(noreplace) /etc/ld.so.conf.d/%{name}.conf
# Libraries (architecture-specific)
%dir %{_libdir}/%{name}
%{_libdir}/%{name}/*.so
# Data files (architecture-independent)
%dir %{_datadir}/%{name}
%{_datadir}/%{name}/rustdesk
%{_datadir}/%{name}/files
%{_datadir}/%{name}/data
%changelog
* Mon Oct 27 2025 - itachi_re <xanbenson99@gmail.com> - 1.4.3
- Initial repackage of RustDesk for openSUSE
- Fix FHS violation by moving .so files to %{_libdir}/%{name}
- Remove RPATH and use ld.so.conf.d file instead
- Strip binaries and fix library permissions
- Add missing %pre section and %changelog
- Fix ldconfig dependency by requiring /sbin/ldconfig
- Fix Flutter data path error by symlinking binary from /usr/share