Name: amber-package-manager Version: 1.2.3 Release: 1%{?dist} Summary: bwrap wrapper for install and running debs inside a Amber-PM container License: Proprietary URL: https://gitee.com/amber-ce/amber-pm/ BuildArch: x86_64 Vendor: shenmo # 禁用调试包生成 %global debug_package %{nil} Source0: apm_1.2.3_amd64.deb Requires: bubblewrap Requires: flatpak Requires: polkit Requires: systemd Requires: (procps-ng or procps) Requires: coreutils Requires: fuse-overlayfs Requires: xz Conflicts: ace-host-integration BuildRequires: dpkg %description bwrap wrapper for install and running debs inside a Amber-PM container %prep # 准备阶段 - 提取.deb文件 %setup -q -c -T # 修正:添加目标目录参数 dpkg-deb -x %{SOURCE0} . %build # 构建阶段 - 二进制包,无需编译 %install rm -rf %{buildroot} # 创建基本的目录结构 mkdir -p %{buildroot} # 复制所有文件到buildroot cp -r ./* %{buildroot}/ %post # 安装后脚本 - 与DEBIAN postinst保持一致 PACKAGE_NAME="amber-package-manager" # 确保必要的目录存在且具有正确权限 TMP_APM_DIR="/tmp/apm" # 创建目录(如果不存在) if [ ! -d "$TMP_APM_DIR" ]; then mkdir -p "$TMP_APM_DIR" chmod 1777 "$TMP_APM_DIR" echo "创建 $TMP_APM_DIR 目录" else # 确保目录权限正确 current_mode=$(stat -c '%a' "$TMP_APM_DIR" 2>/dev/null || echo "0") if [ "$current_mode" != "1777" ] && [ "$current_mode" != "1777" ]; then chmod 1777 "$TMP_APM_DIR" echo "修复 $TMP_APM_DIR 目录权限" fi fi # 确保目录属主正确(应为root,但所有用户可写) chown root:root "$TMP_APM_DIR" 2>/dev/null || : # 清理可能存在的残留锁文件或临时文件 # 注意:我们不删除用户数据,只删除可能的问题文件 find "$TMP_APM_DIR" -name "*.lock" -type f -delete 2>/dev/null || : # 运行初始化脚本 if [ -f /var/lib/apm/$PACKAGE_NAME/files/bin/ace-init ]; then /var/lib/apm/$PACKAGE_NAME/files/bin/ace-init fi # 处理systemd服务 - 与DEBIAN保持一致 systemctl daemon-reload systemctl enable apm-daily-update 2>/dev/null || : systemctl start apm-daily-update 2>/dev/null || : systemctl restart apparmor.service 2>/dev/null || : # 应用sysctl配置 if [ -f /usr/lib/sysctl.d/apm.conf ]; then sysctl -p /usr/lib/sysctl.d/apm.conf 2>/dev/null || : fi # 配置SELinux以允许execstack(如果SELinux已启用) if [ -x /usr/sbin/setsebool ] && [ -e /sys/fs/selinux ]; then setsebool selinuxuser_execstack -P 1 # 同时设置其他可能需要的SELinux布尔值 setsebool allow_execstack -P 1 2>/dev/null || : setsebool allow_execmem -P 1 2>/dev/null || : # 为/tmp/apm目录设置SELinux上下文(如果存在) if [ -d "$TMP_APM_DIR" ] && [ -x /usr/sbin/semanage ]; then semanage fcontext -a -t user_tmp_t "$TMP_APM_DIR(/.*)?" 2>/dev/null || : restorecon -Rv "$TMP_APM_DIR" 2>/dev/null || : fi fi # 发送统计信息(后台执行,对应debian postinst中的feedback.sh) if [ -f /var/lib/apm/apm/files/feedback.sh ]; then /var/lib/apm/apm/files/feedback.sh & fi # 创建 /host 符号链接(对应debian postinst中的 ln -sv / /host) if [ ! -e /host ]; then ln -sv / /host 2>/dev/null || : fi # 执行触发器相关任务(对应DEBIAN的triggered情况) amber-pm-configure-nvidia-host 2>/dev/null || : amber-pm-dstore-patch 2>/dev/null || : # 记录安装完成 echo "Amber Package Manager 安装完成。" %preun # 卸载前脚本 if [ $1 -eq 0 ]; then # 完全卸载前停止服务 systemctl stop apm-daily-update 2>/dev/null || : systemctl disable apm-daily-update 2>/dev/null || : fi %postun # 卸载后脚本 if [ $1 -eq 0 ]; then # 完全卸载(对应remove) echo "正在清理 amber-package-manager 系统和用户数据..." # 清理系统级数据:/var/lib/apm echo "正在清理系统级残留数据 /var/lib/apm ..." rm -rf /var/lib/apm/ 2>/dev/null || : # 清理所有用户主目录下的 .apm 文件夹 echo "正在清理用户数据 /home/*/.apm ..." for username in $(ls /home 2>/dev/null); do userdir="/home/$username" if [ -d "$userdir/.apm/" ]; then echo "清理用户 $username 的 .apm 目录..." rm -rf "$userdir/.apm/" 2>/dev/null || : fi done echo "amber-package-manager 所有相关数据已被清理。" fi %files %defattr(-,root,root,-) # 配置文件 /etc/profile.d/apm.sh /etc/X11/Xsession.d/20apm /etc/apparmor.d/apm /etc/apt/sources.list.d/apm.list /etc/apt/trusted.gpg.d/apm.gpg # 主程序与所有 amber-pm-* 辅助工具 /usr/bin/apm /usr/bin/amber-pm-* # systemd 单元 /usr/lib/systemd/system/apm-daily-update.service /usr/lib/systemd/system/apm-daily-update.timer /usr/lib/systemd/system/gxde-apm-fixer.service /usr/lib/systemd/user-environment-generators/60-apm # sysctl 配置 /usr/lib/sysctl.d/apm.conf # Shell 补全(bash/fish/zsh) /usr/share/bash-completion/completions/apm /usr/share/fish/completions/apm.fish /usr/share/zsh/site-functions/_apm # Polkit 策略 /usr/share/polkit-1/actions/store.spark-app.apm-uninstaller.policy # 图标 /usr/share/icons/apm.png # 主数据目录(递归包含所有子文件和目录) /var/lib/apm/ %changelog * Wed Oct 29 2025 shenmo & xmp360 & <1666451428@qq.com> - Supports the 'apm show' and 'apm list' commands - No longer unshare UTS, no longer set the hostname separately, improve compatibility - Modified the shell style within APM - The update of the software main icon and README.md was contributed by @possibleving - Update the main software icon and README.md * Mon Oct 27 2025 xmp360 <1666451428@qq.com> - 1.0.10 - Fixed Bugs * Sat Oct 25 2025 xmp360 <1666451428@qq.com> - 1.0.8 - Fixed Bugs - Added Some Egg Link For Supporters * Sun Oct 19 2025 shenmo - 1.0.5-1 - Update to version 1.0.5 - Added new files: apm-daily-update.service, bash-completion, ace-run-pkg - Fixed dpkg-deb extraction command