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
openSUSE Build Service is sponsored by