%global debug_package %{nil} Name: linglong Version: 1.10.3 Release: 2 Summary: Linglong package manager for Linux License: LGPL v3 URL: https://gitee.com/LFRon/linyaps-generic-linux Source0: https://github.com/LFRon/linyaps-generic-linux/archive/refs/tags/1.10.3-1.zip # ========== BuildRequires ========== BuildRequires: cmake gcc-c++ gettext intltool systemd-devel sudo BuildRequires: glibc-devel # 提供 -lc/-lm 链接脚本 %if 0%{?suse_version} BuildRequires: libqt5-qtbase-devel BuildRequires: clang llvm %else BuildRequires: qt5-qtbase-devel qt5-qtbase-private-devel libqt5-qtbase-devel %endif BuildRequires: glib2-devel nlohmann_json-devel ostree-devel yaml-cpp-devel libcap-devel # 如不需要单测,建议去掉这两行;要保留测试则按你仓库可用性决定 # BuildRequires: gtest gmock BuildRequires: libseccomp-devel libelf-devel BuildRequires: libcurl-devel openssl-devel unzip # ========== Runtime Requires ========== Requires: linglong-bin = %{version}-%{release} Requires: desktop-file-utils linglong-box fuse-overlayfs # shadow 在 SUSE,shadow-utils 在其他 %if 0%{?suse_version} Requires: shadow %else Requires: shadow-utils %endif Requires: glib2 shared-mime-info systemd Requires: google-noto-sans-mono-fonts wqy-zenhei-fonts Recommends: erofs-fuse erofs-utils %description Linyaps is a secondary package manager on Linux.It could run apps with stable and fast container powered by Linyaps-box on Linux. %package -n linglong-bin Summary: Linglong package manager %if 0%{?suse_version} Requires: linglong-box google-noto-sans-mono-fonts wqy-zenhei-fonts shadow %else Requires: linglong-box google-noto-sans-mono-fonts wqy-zenhei-fonts shadow-utils %endif %description -n linglong-bin Linyaps package management command line tool. %package -n linglong-builder Summary: Linglong build tools Requires: linglong-box linglong-bin = %{version}-%{release} git %description -n linglong-builder This Linyaps sub-package is a tool that makes it easy to build applications and dependencies. %prep %autosetup -p1 -n linyaps-generic-linux-%{version}-1 %define _debugsource_template %{nil} %build # 启用 SUSE 硬化(含 -fPIE / -pie 等) # %set_build_flags mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DINCLUDE_INSTALL_DIR:PATH=%{_includedir} \ -DLIB_INSTALL_DIR:PATH=%{_libdir} \ -DSYSCONF_INSTALL_DIR:PATH=%{_sysconfdir} \ -DSHARE_INSTALL_PREFIX:PATH=%{_datadir} \ -DBUILD_SHARED_LIBS=OFF \ -DCPM_LOCAL_PACKAGES_ONLY=ON \ -DENABLE_LINGLONG_INSTALLER=ON \ -DLINGLONG_EXPORT_PATH=apps/share \ -DCMAKE_BUILD_TYPE=Release \ -DQT_VERSION_MAJOR=5 \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ -DCMAKE_C_FLAGS="-O3 -flto=full" \ -DCMAKE_CXX_FLAGS="-O3 -flto=full" .. make %install cd build %make_install INSTALL_ROOT=%{buildroot} # 修正 shebang:避免 /usr/bin/env 触发 rpmlint 'env-script-interpreter' sed -ri '1s|^#!/usr/bin/env[[:space:]]+bash$|#!/bin/bash|' \ %{buildroot}%{_libexecdir}/%{name}/ld-cache-generator \ %{buildroot}%{_libexecdir}/%{name}/dialog/99-linglong-permission || true sed -ri '1s|^#!/usr/bin/env[[:space:]]+sh$|#!/bin/sh|' \ %{buildroot}%{_prefix}/lib/systemd/system-environment-generators/61-linglong \ %{buildroot}%{_prefix}/lib/systemd/user-generators/linglong-user-systemd-generator \ %{buildroot}%{_prefix}/lib/%{name}/generate-xdg-data-dirs.sh || true # /etc/profile.d/ 脚本是“被 source”的,去掉 shebang sed -i '1{/^#!.*$/d}' %{buildroot}%{_sysconfdir}/profile.d/linglong.sh || true # ========== systemd / tmpfiles 宏 ========== %if 0%{?suse_version} %pre -n linglong-bin %service_add_pre org.deepin.linglong.PackageManager.service %post -n linglong-bin %service_add_post org.deepin.linglong.PackageManager.service %tmpfiles_create %{_tmpfilesdir}/linglong.conf %preun -n linglong-bin %service_del_preun org.deepin.linglong.PackageManager.service %postun -n linglong-bin %service_del_postun org.deepin.linglong.PackageManager.service %else %pre -n linglong-bin %service_add_pre org.deepin.linglong.PackageManager.service %post -n linglong-bin %systemd_post org.deepin.linglong.PackageManager.service %tmpfiles_create %{_tmpfilesdir}/linglong.conf %preun -n linglong-bin %systemd_preun org.deepin.linglong.PackageManager.service %postun -n linglong-bin %systemd_postun_with_restart org.deepin.linglong.PackageManager.service %endif %files %doc README.md %license LICENSE %exclude %{_libdir}/cmake/linglong-*/*.cmake %files -n linglong-bin # 目录所有权(避免 brp-50-check-filelist 报 “directories not owned”) %dir %{_sysconfdir}/X11/Xsession.d %dir %{_libexecdir}/%{name} %dir %{_libexecdir}/%{name}/container %dir %{_libexecdir}/%{name}/dialog %dir %{_prefix}/lib/systemd/system-environment-generators %dir %{_prefix}/lib/systemd/user-generators %dir %{_datadir}/%{name} %dir %{_datadir}/polkit-1 %dir %{_datadir}/polkit-1/actions # 配置与可执行 %{_sysconfdir}/profile.d/* %{_sysconfdir}/X11/Xsession.d/* %{_bindir}/ll-cli %{_bindir}/llpkg # 项目 helper(通过 -DCMAKE_INSTALL_LIBEXECDIR 安装到此) %{_libexecdir}/%{name}/ll-package-manager %{_libexecdir}/%{name}/ll-session-helper %{_libexecdir}/%{name}/ld-cache-generator %{_libexecdir}/%{name}/font-cache-generator %{_libexecdir}/%{name}/ll-dialog %{_libexecdir}/%{name}/ll-init %{_libexecdir}/%{name}/dialog/99-linglong-permission # systemd units / presets(generator 用精确文件名) %{_unitdir}/*.service %{_userunitdir}/* %{_presetdir}/*.preset %{_prefix}/lib/systemd/system-environment-generators/61-linglong %{_prefix}/lib/systemd/user-generators/linglong-user-systemd-generator # shell 补全、DBus、polkit、数据文件 %{_datadir}/bash-completion/completions/ll-cli %{_datadir}/dbus-1/system-services/*.service %{_datadir}/dbus-1/system.d/*.conf %{_datadir}/polkit-1/actions/org.deepin.linglong.PackageManager1.policy %{_datadir}/%{name}/config.yaml %{_datadir}/%{name}/export-dirs.json %{_datadir}/mime/packages/* %{_datadir}/zsh/* %{_datadir}/icons/* %{_datadir}/applications/* %{_datadir}/locale/* # sysusers/tmpfiles %{_sysusersdir}/*.conf %{_tmpfilesdir}/*.conf # 由 tmpfiles 创建但需在文件列表中声明的目录(ghost) %ghost %dir /etc/linglong %ghost %dir /etc/linglong/config.d %ghost %dir /run/linglong %ghost %dir /var/lib/linglong # 容器/脚本(仍在 /usr/lib 下) %{_prefix}/lib/%{name}/container/* %{_prefix}/lib/%{name}/generate-xdg-data-dirs.sh %files -n linglong-builder # 目录所有权 %dir %{_libexecdir}/%{name} %dir %{_libexecdir}/%{name}/builder %dir %{_libexecdir}/%{name}/builder/helper %dir %{_datadir}/%{name} %dir %{_datadir}/%{name}/builder %dir %{_datadir}/%{name}/builder/templates %dir %{_datadir}/%{name}/builder/uab # 可执行与脚本 %{_bindir}/ll-builder %{_libexecdir}/%{name}/fetch-dsc-source %{_libexecdir}/%{name}/fetch-git-source %{_libexecdir}/%{name}/fetch-file-source %{_libexecdir}/%{name}/fetch-archive-source %{_libexecdir}/%{name}/app-conf-generator %{_libexecdir}/%{name}/builder/helper/*.sh # 补全与模板 %{_datadir}/bash-completion/completions/ll-builder %{_datadir}/%{name}/builder/templates/*.yaml %{_datadir}/%{name}/builder/uab/* %changelog * Tue Dec 23 2025 Packager - 1.10.3-2 - Add Clang+LLVM support for OpenSUSE 15.6 * Sat Nov 08 2025 Packager - 1.9.13-2 - Adapt spec for openSUSE Leap 15.6: - switch shadow-utils -> shadow on SUSE - drop glibc-static/libstdc++-static on SUSE - use libqt5-qtbase-devel and systemd service macros on SUSE - replace hard-coded systemd paths with macros - force C++17 with gcc-12 toolchain and dynamic glibc link - pass SUSE hardening flags via %%set_build_flags / PIE - fix rpmlint: tmpfiles_create, remove env shebangs, own ghost directories - keep dbus/polkit items for later security review