Compare commits

...

14 Commits

Author SHA1 Message Date
shenmo7192 fb05f759a1 support sandbox in ubuntu 26.04 2026-05-10 16:38:35 +08:00
shenmo7192 f37b118c67 1.3.3.1 2026-05-10 13:49:45 +08:00
momen d05df2ea9a 修复 convert addons 依赖处理 2026-05-10 13:47:24 +08:00
shenmo7192 56e9d5bbb0 修复在ubuntu 26.04下无法正常 apm install 的问题 2026-05-09 23:07:24 +08:00
shenmo7192 e8a95ab13a desktop-fix改为白名单模式,目前只有KDE 2026-05-06 22:53:24 +08:00
shenmo7192 ec93f280f9 update: 修复无法启动apm debug 的问题 2026-05-06 20:21:42 +08:00
shenmo7192 68d5e85d0d bump ver to 1.3.2 2026-05-06 20:13:38 +08:00
shenmo7192 b9bd4552e5 终止强制更新数据库,避免APM应用优先级重置 2026-05-06 20:12:59 +08:00
shenmo7192 2e524df411 update: 每日启动自动清理仓库 2026-05-06 19:56:07 +08:00
shenmo7192 736e11255e 更新ace-env中的aptss配置,去掉apm debug中检查容器的逻辑,避免ubuntu哈气 2026-04-30 23:35:45 +08:00
shenmo7192 eba44e8489 remove recursive bwrap to satisfy ubuntu 26 2026-04-30 22:36:05 +08:00
shenmo7192 682e987816 fix(amber-pm-addons-maker): 优化包名和版本号的默认生成逻辑
重构包名和版本号的默认生成逻辑,当存在DEB文件时优先使用DEB包的名称和版本号作为默认值
将apt缓存清理操作移到条件判断外,确保无论是否有DEB文件都会执行清理
2026-04-25 20:13:25 +08:00
shenmo7192 0a94f1a854 更新:APM容器内支持wemeet链接打开 2026-04-25 19:53:21 +08:00
shenmo7192 fde7fd6051 删除 bwrap 无用的 2026-04-25 16:52:18 +08:00
9 changed files with 206 additions and 139 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
Package: apm
Version: 1.1.5
Version: 1.1.6-1
Maintainer: shenmo <jifengshenmo@outlook.com>
Priority: optional
Section: utils
@@ -1,6 +1,6 @@
[Desktop Entry]
Exec=xdg-open %U
MimeType=x-scheme-handler/spk;inode/directory;application/x-mimearchive;x-scheme-handler/http;x-scheme-handler/https;application/msword;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.ms-excel;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.ms-powerpoint;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/x-gzip;application/zip;application/rar;application/x-tar;application/pdf;application/rtf;image/gif;image/jpeg;image/jp2;image/png;image/tiff;image/bmp;image/svg+xml;image/webp;image/x-icon;application/kswps;application/kset;application/ksdps;application/x-photoshop;application/x-coreldraw;application/x-shockwave-flash;text/plain;application/x-javascript;text/javascript;text/css;text/html;application/xhtml+xml;text/xml;text/x-vcard;application/x-httpd-php;application/java-archive;application/vnd.android.package-archive;application/octet-stream;application/x-x509-user-cert;audio/mpeg;audio/midi;audio/x-wav;audio/x-mpegurl;audio/x-m4a;audio/ogg;audio/x-realaudio;video/mp4;video/mpeg;video/quicktime;video/x-m4v;video/x-ms-wmv;video/x-msvideo;video/webm;video/x-flv;application/xhtml_xml;
MimeType=x-scheme-handler/spk;x-scheme-handler/wemeet;inode/directory;application/x-mimearchive;x-scheme-handler/http;x-scheme-handler/https;application/msword;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.ms-excel;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.ms-powerpoint;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/x-gzip;application/zip;application/rar;application/x-tar;application/pdf;application/rtf;image/gif;image/jpeg;image/jp2;image/png;image/tiff;image/bmp;image/svg+xml;image/webp;image/x-icon;application/kswps;application/kset;application/ksdps;application/x-photoshop;application/x-coreldraw;application/x-shockwave-flash;text/plain;application/x-javascript;text/javascript;text/css;text/html;application/xhtml+xml;text/xml;text/x-vcard;application/x-httpd-php;application/java-archive;application/vnd.android.package-archive;application/octet-stream;application/x-x509-user-cert;audio/mpeg;audio/midi;audio/x-wav;audio/x-mpegurl;audio/x-m4a;audio/ogg;audio/x-realaudio;video/mp4;video/mpeg;video/quicktime;video/x-m4v;video/x-ms-wmv;video/x-msvideo;video/webm;video/x-flv;application/xhtml_xml;
Name=ace-run-in-host-os
NoDisplay=true
Terminal=false
+44 -14
View File
@@ -3,6 +3,7 @@
# amber-pm-base-overrider
# 功能:检查 /opt/apm-dummy/files-to-override 下的文件,并覆盖到所有包含
# /var/lib/apm/文件夹/files 的 /var/lib/apm/文件夹/files/ace-env 下
# 同时删除每个 ace-env 目录下的 amber-ce-tools/bin-override/bwrap
# 日志函数
log_warn() { echo -e "[\e[33mWARN\e[0m]: \e[1m$*\e[0m"; }
@@ -13,6 +14,7 @@ log_debug() { echo -e "[\e[32mDEBUG\e[0m]: \e[1m$*\e[0m"; }
# 配置
OVERRIDE_SOURCE="/opt/apm-dummy/files-to-override"
APM_BASE_DIR="/var/lib/apm"
BWRAP_PATH="amber-ce-tools/bin-override/bwrap"
# 显示帮助信息
show_help() {
@@ -30,6 +32,7 @@ amber-pm-base-overrider - APM 基础环境覆盖工具
功能:
检查 /opt/apm-dummy/files-to-override 下的文件,
并覆盖到所有 /var/lib/apm/<包名>/files/ace-env 目录下。
同时删除每个 ace-env 目录下的 amber-ce-tools/bin-override/bwrap。
EOF
}
@@ -67,7 +70,7 @@ fi
# 检查源目录是否为空
if [ -z "$(ls -A "$OVERRIDE_SOURCE" 2>/dev/null)" ]; then
exit 0
$VERBOSE && log_info "源目录为空,仅执行清理操作"
fi
$VERBOSE && log_info "源目录: $OVERRIDE_SOURCE"
@@ -79,8 +82,8 @@ fi
# 计数器
OVERRIDE_COUNT=0
DELETE_COUNT=0
ERROR_COUNT=0
HAS_CHANGES=false
# 遍历 /var/lib/apm/ 下的所有子目录
for pkg_dir in "$APM_BASE_DIR"/*/; do
@@ -108,6 +111,35 @@ for pkg_dir in "$APM_BASE_DIR"/*/; do
continue
fi
# ---- 删除 amber-ce-tools/bin-override/bwrap ----
bwrap_file="$target_dir/$BWRAP_PATH"
if [ -e "$bwrap_file" ] || [ -L "$bwrap_file" ]; then
if [ "$DRY_RUN" = true ]; then
if [ -d "$bwrap_file" ]; then
echo " [试运行] 将删除目录: $bwrap_file"
else
echo " [试运行] 将删除文件: $bwrap_file"
fi
((DELETE_COUNT++))
else
if rm -rf "$bwrap_file" 2>/dev/null; then
$VERBOSE && log_info "已删除: $bwrap_file"
((DELETE_COUNT++))
else
log_error "删除失败: $bwrap_file"
((ERROR_COUNT++))
fi
fi
else
$VERBOSE && log_debug "$pkg_name: bwrap 文件不存在,无需删除"
fi
# ---- 覆盖文件 ----
# 检查源目录是否为空
if [ -z "$(ls -A "$OVERRIDE_SOURCE" 2>/dev/null)" ]; then
continue
fi
# 检查是否有文件需要更新(比较源文件和目标文件)
NEED_UPDATE=false
while IFS= read -r -d '' file; do
@@ -126,7 +158,6 @@ for pkg_dir in "$APM_BASE_DIR"/*/; do
continue
fi
HAS_CHANGES=true
$VERBOSE && log_info "处理包: $pkg_name"
# 使用 rsync 或 cp 进行覆盖
@@ -150,17 +181,16 @@ for pkg_dir in "$APM_BASE_DIR"/*/; do
fi
done
# 只有在有改动或 verbose 模式时才输出统计信息
if [ "$HAS_CHANGES" = true ] || [ "$VERBOSE" = true ]; then
$VERBOSE && log_info "===================================="
$VERBOSE && log_info "覆盖操作完成"
log_info "成功处理: $OVERRIDE_COUNT 个包"
if [ "$DRY_RUN" = true ]; then
log_info "[试运行模式] 未实际执行覆盖"
fi
if [ $ERROR_COUNT -gt 0 ]; then
log_error "失败: $ERROR_COUNT 个"
fi
# 输出统计信息
$VERBOSE && log_info "===================================="
$VERBOSE && log_info "操作完成"
log_info "成功覆盖: $OVERRIDE_COUNT 个包"
log_info "成功删除 bwrap: $DELETE_COUNT 个包"
if [ "$DRY_RUN" = true ]; then
log_info "[试运行模式] 未实际执行操作"
fi
if [ $ERROR_COUNT -gt 0 ]; then
log_error "失败: $ERROR_COUNT 个操作"
fi
exit 0
+1 -1
View File
@@ -1 +1 @@
@VERSION@=1.3.0
@VERSION@=1.3.4
+37 -7
View File
@@ -264,14 +264,15 @@ if [ -n "$DEB_PATH" ]; then
exit 1
fi
log.info "DEB 包安装完成(ssaudit"
# 清理 apt 缓存
sudo -E chrootEnvPath="$chrootEnvPath" /var/lib/apm/apm/files/ace-run-pkg aptss clean || true
sudo -E chrootEnvPath="$chrootEnvPath" /var/lib/apm/apm/files/ace-run-pkg rm -vfr /var/lib/apt/lists || true
sudo -E chrootEnvPath="$chrootEnvPath" /var/lib/apm/apm/files/ace-run-pkg rm -vfr /var/lib/aptss/lists || true
sudo -E chrootEnvPath="$chrootEnvPath" /var/lib/apm/apm/files/ace-run-pkg rm -vfr /var/cache/apt/archives/* || true
fi
# 清理 apt 缓存和包列表(无论是否有 DEB 文件或是否 manual 模式)
log.info "清理 apt 缓存..."
sudo -E chrootEnvPath="$chrootEnvPath" /var/lib/apm/apm/files/ace-run-pkg aptss clean || true
sudo -E chrootEnvPath="$chrootEnvPath" /var/lib/apm/apm/files/ace-run-pkg rm -vfr /var/lib/apt/lists || true
sudo -E chrootEnvPath="$chrootEnvPath" /var/lib/apm/apm/files/ace-run-pkg rm -vfr /var/lib/aptss/lists || true
sudo -E chrootEnvPath="$chrootEnvPath" /var/lib/apm/apm/files/ace-run-pkg rm -vfr /var/cache/apt/archives/* || true
# 5. 清理 .dpkg-new 文件
log.info "搜索并清理 .dpkg-new 文件..."
find "$CRAFT_DIR/core" -name "*.dpkg-new" 2>/dev/null | while read -r file; do
@@ -292,18 +293,43 @@ ORIG_ARCH="$(dpkg --print-architecture 2>/dev/null || echo "unknown")"
if [ -z "$PKGNAME" ]; then
if [ "$MANUAL_MODE" = true ]; then
read -r -p "请输入要创建的 addons 包名 (建议格式: ${BASE_NAME}-<描述>-addons): " PKGNAME
else
if [ -n "$DEB_PATH" ]; then
DEB_PKG_NAME=$(dpkg-deb -f "$DEB_PATH" Package 2>/dev/null || echo "")
if [ -n "$DEB_PKG_NAME" ]; then
log.info "未指定包名,使用 Deb 包名生成默认格式: ${BASE_NAME}-${DEB_PKG_NAME}-addons"
PKGNAME="${BASE_NAME}-${DEB_PKG_NAME}-addons"
else
log.warn "无法读取 Deb 包名,使用默认格式: ${BASE_NAME}-addons"
PKGNAME="${BASE_NAME}-addons"
fi
else
log.warn "未指定包名,使用默认格式: ${BASE_NAME}-addons"
PKGNAME="${BASE_NAME}-addons"
fi
fi
fi
# 确定版本
if [ -z "$VERSION" ]; then
if [ "$MANUAL_MODE" = true ]; then
read -r -p "请输入要创建的版本 (Version) [默认 1.0.0-apm]: " VERSION
fi
VERSION="${VERSION:-1.0.0-apm}"
else
if [ -n "$DEB_PATH" ]; then
DEB_PKG_VERSION=$(dpkg-deb -f "$DEB_PATH" Version 2>/dev/null || echo "")
if [ -n "$DEB_PKG_VERSION" ]; then
log.info "未指定版本,使用 Deb 版本号: ${DEB_PKG_VERSION}"
VERSION="$DEB_PKG_VERSION"
else
log.warn "无法读取 Deb 版本号,使用默认版本: 1.0.0-apm"
VERSION="1.0.0-apm"
fi
else
log.warn "未指定版本,使用默认版本: 1.0.0-apm"
VERSION="1.0.0-apm"
fi
fi
fi
NEW_PKGNAME="$PKGNAME"
@@ -319,6 +345,10 @@ PKG_BUILD_DIR="$CRAFT_DIR/new-pkg"
mkdir -p "$PKG_BUILD_DIR/DEBIAN"
mkdir -p "$PKG_BUILD_DIR/var/lib/apm/$NEW_PKGNAME/files" 2>/dev/null || true
# 写入 addons 自身的基础依赖信息,供 amber-pm-convert 识别并自动补依赖。
echo "$BASE_NAME" > "$PKG_BUILD_DIR/var/lib/apm/${NEW_PKGNAME}/info"
echo "$BASE_NAME" > "$PKG_BUILD_DIR/var/lib/apm/${NEW_PKGNAME}/info_addon_base"
# 复制融合环境(core, work)到新的包内 files
log.info "复制融合环境文件..."
sudo cp -r "$CRAFT_DIR"/core "$PKG_BUILD_DIR/var/lib/apm/${NEW_PKGNAME}/files/" 2>/dev/null || true
+91 -63
View File
@@ -15,12 +15,12 @@ fi
# 显示用法信息
usage() {
echo "用法: $SCRIPT_NAME [--manual] --base <basename> [--base <basename> ...] [--addons <addon-name> ...] <deb文件路径>"
echo " 或者在手动模式下不传入 DEB 文件: $SCRIPT_NAME --manual --base <basename> [--base <basename> ...]"
echo "用法: $SCRIPT_NAME [--manual] --base <basename> [basename ...] [--base <basename> ...] [--addons <addon-name> ...] <deb文件路径>"
echo " 或者在手动模式下不传入 DEB 文件: $SCRIPT_NAME --manual --base <basename> [basename ...] [--base <basename> ...]"
echo ""
echo "参数说明:"
echo " --manual 启用手动模式:融合挂载后打开交互 shell,退出 shell 后脚本继续"
echo " --basename 必填参数(非手动模式下),指定基础环境名称,可多次使用"
echo " --basename 必填参数(非手动模式下),指定基础环境名称,可一次指定多个或多次使用"
echo " --addons 可选参数,指定额外挂载的 addons 包名称,可多次使用"
echo " deb文件路径 要转换的DEB文件路径(非手动且非空模式下必填)"
echo " --pkgname 可选参数,指定新包的包名(默认使用原DEB包名)"
@@ -28,6 +28,7 @@ usage() {
echo ""
echo "示例:"
echo " $SCRIPT_NAME --base amber-pm-trixie /path/to/package.deb"
echo " $SCRIPT_NAME --base amber-pm-trixie amber-pm-trixie-gxde-base /path/to/package.deb"
echo " $SCRIPT_NAME --base amber-pm-trixie --addons amber-pm-trixie-nvidia-addons /path/to/package.deb"
echo " $SCRIPT_NAME --manual --base amber-pm-trixie # 只融合挂载并进入手动 shell"
echo " $SCRIPT_NAME --manual --base amber-pm-trixie --pkgname newpkg --version 1.2.3 /path/to/package.deb"
@@ -39,6 +40,7 @@ usage() {
BASENAMES=() # 存放实际用于构建 overlay 的 base(可能会被递归添加)
BASENAMES_ORIG=() # 存放用户原始输入的 base 列表(用于 control 中 Depends 等)
ADDONS=() # 存放用户显式指定的 addons 包名
SELECTED_ADDONS=() # 存放本次转换要写入应用 info_layer_addons 的 addons
DEB_PATH=""
PKGNAME=""
VERSION=""
@@ -48,14 +50,28 @@ MANUAL_MODE=false
while [ $# -gt 0 ]; do
case "$1" in
--base)
if [ -z "$2" ]; then
shift
if [ $# -eq 0 ] || [[ "$1" == -* ]]; then
log.error "--base 后需要跟名称"
usage
exit 1
fi
BASENAMES+=("$2")
BASENAMES_ORIG+=("$2")
shift 2
while [ $# -gt 0 ]; do
[[ "$1" == -* ]] && break
if [ -n "$DEB_PATH" ]; then
log.error "未知参数或多余的参数: $1"
usage
exit 1
fi
if [ -f "$1" ]; then
DEB_PATH="$1"
shift
break
fi
BASENAMES+=("$1")
BASENAMES_ORIG+=("$1")
shift
done
;;
--addons)
if [ -z "$2" ]; then
@@ -64,6 +80,7 @@ while [ $# -gt 0 ]; do
exit 1
fi
ADDONS+=("$2")
SELECTED_ADDONS+=("$2")
shift 2
;;
--pkgname)
@@ -159,6 +176,34 @@ cleanup() {
# 设置退出时清理
trap cleanup EXIT
# 辅助函数:追加数组项并去重
_append_unique() {
local array_name="$1"
local item="$2"
[ -z "$item" ] && return
local existing
eval 'for existing in "${'"$array_name"'[@]}"; do
[ "$existing" = "$item" ] && return
done'
eval "$array_name"'+=("$item")'
}
_pkg_dir() {
local pkgname="$1"
local pkg_dir="/var/lib/apm/${pkgname}"
if [ ! -d "$pkg_dir" ]; then
pkg_dir="/var/lib/apm/apm/files/ace-env/var/lib/apm/${pkgname}"
fi
[ -d "$pkg_dir" ] && echo "$pkg_dir"
}
_is_addon_pkg() {
local pkg_dir
pkg_dir="$(_pkg_dir "$1")"
[ -n "$pkg_dir" ] && [ -f "${pkg_dir}/info_addon_base" ]
}
# 递归获取info文件中的依赖 (会把新依赖追加到 BASENAMES 数组中)
get_recursive_basenames() {
local basename="$1"
@@ -188,7 +233,33 @@ get_recursive_basenames() {
fi
}
# 递归获取所有基础环境(从用户输入的 base 开始)
BASE_INPUTS=("${BASENAMES[@]}")
BASENAMES=()
# 将 --base 中的 addons 转换为显式 addons,并把其 info 依赖的 base 加入 base 列表。
for BASE in "${BASE_INPUTS[@]}"; do
if _is_addon_pkg "$BASE"; then
log.info "检测到 --base 指向 addons: $BASE"
_append_unique ADDONS "$BASE"
_append_unique SELECTED_ADDONS "$BASE"
addon_info="$(_pkg_dir "$BASE")/info"
if [ -f "$addon_info" ]; then
while IFS= read -r addon_base; do
[ -z "$addon_base" ] && continue
_append_unique BASENAMES "$addon_base"
done < "$addon_info"
else
log.warn "addons 缺少 info,无法自动补 base 依赖: $BASE"
fi
else
_append_unique BASENAMES "$BASE"
fi
done
BASENAMES_ORIG=("${BASENAMES[@]}")
# 递归获取所有基础环境(从规范化后的 base 开始)
for BASE in "${BASENAMES[@]}"; do
get_recursive_basenames "$BASE"
done
@@ -217,56 +288,7 @@ log.info "将使用的新包名: ${NEW_PKGNAME:-<未指定>}"
log.info "将使用的新版本: ${NEW_VERSION:-<未指定>}"
log.info "使用的架构: $ORIG_ARCH"
# 辅助函数:读取某个 base 的 addons 并追加到 LOWERDIRS
_add_base_addons_to_lowerdirs() {
local base_name="$1"
local base_dir="/var/lib/apm/apm/files/ace-env/var/lib/apm/${base_name}"
if [ ! -d "$base_dir" ]; then
base_dir="/var/lib/apm/${base_name}"
fi
[ ! -d "$base_dir" ] && return
local addon_dirs=()
local addon_file
local addon_name
# 读取 info_layer_addons 主文件
if [ -f "${base_dir}/info_layer_addons" ]; then
while IFS= read -r addon_name; do
[ -z "$addon_name" ] && continue
addon_dirs+=("$addon_name")
done < "${base_dir}/info_layer_addons"
fi
# 读取 info_layer_addons.d 目录
if [ -d "${base_dir}/info_layer_addons.d" ]; then
for addon_file in $(ls -1 "${base_dir}/info_layer_addons.d" 2>/dev/null | sort); do
addon_name="${addon_file#*-}"
[ -z "$addon_name" ] && continue
addon_dirs+=("$addon_name")
done
fi
local addon
for addon in "${addon_dirs[@]}"; do
local addon_path="/var/lib/apm/${addon}"
if [ ! -d "$addon_path" ]; then
addon_path="/var/lib/apm/apm/files/ace-env/var/lib/apm/${addon}"
fi
if [ -d "${addon_path}/files/ace-env" ]; then
log.info " 自动挂载 addon: $addon (ace-env)"
LOWERDIRS+=("${addon_path}/files/ace-env")
elif [ -d "${addon_path}/files/core" ]; then
log.info " 自动挂载 addon: $addon (core)"
LOWERDIRS+=("${addon_path}/files/core")
else
log.warn "自动 addon 路径不存在,跳过: $addon"
fi
done
}
# 2. 构建 lowerdir 路径(多个 base 按顺序叠放,包含自动 addons)
# 2. 构建 lowerdir 路径(多个 base 按顺序叠放,只包含本次显式选择的 addons)
log.info "构建 overlay lowerdir 路径..."
LOWERDIRS=()
@@ -274,9 +296,6 @@ for BASENAME in "${BASENAMES[@]}"; do
ACE_ENV_PATH="/var/lib/apm/apm/files/ace-env/var/lib/apm/${BASENAME}/files/ace-env"
CORE_PATH="/var/lib/apm/apm/files/ace-env/var/lib/apm/${BASENAME}/files/core"
# 先挂载该 base 的 addonsaddons 在 base 之上)
_add_base_addons_to_lowerdirs "$BASENAME"
if [ -d "$ACE_ENV_PATH" ]; then
log.info "使用 ace-env 路径: $ACE_ENV_PATH"
LOWERDIRS+=("$ACE_ENV_PATH")
@@ -291,7 +310,7 @@ for BASENAME in "${BASENAMES[@]}"; do
fi
done
# 追加用户显式指定的 addons(放在 bases 之上)
# 追加本次显式选择的 addons(放在 bases 之上)
for addon in "${ADDONS[@]}"; do
ADDON_PATH="/var/lib/apm/${addon}"
if [ ! -d "$ADDON_PATH" ]; then
@@ -772,6 +791,15 @@ for BASENAME in "${BASENAMES[@]}"; do
log.info " 写入: $BASENAME"
done
if [ ${#SELECTED_ADDONS[@]} -gt 0 ]; then
log.info "创建 info_layer_addons 文件(仅包含本次选择的 addons..."
: > "$PKG_BUILD_DIR/var/lib/apm/${NEW_PKGNAME}/info_layer_addons" 2>/dev/null || true
for addon in "${SELECTED_ADDONS[@]}"; do
echo "$addon" >> "$PKG_BUILD_DIR/var/lib/apm/${NEW_PKGNAME}/info_layer_addons"
log.info " 写入 addon: $addon"
done
fi
# 创建 postrm 脚本
cat > "$PKG_BUILD_DIR/DEBIAN/postrm" << 'EOF'
#!/bin/bash
@@ -835,7 +863,7 @@ calculate_directory_size() {
fi
}
# 构建依赖字符串 - 包含所有用户原始输入的 base 和显式指定的 addons(用于 control
# 构建依赖字符串 - 包含规范化后的 base 和显式指定的 addons(用于 control
DEPENDS_PARTS=("${BASENAMES_ORIG[@]}")
# 如果包名是 addons 格式(*-addons),确保 base 已在依赖中
+18 -40
View File
@@ -1,32 +1,18 @@
#!/bin/bash
# 检测是否安装了 XFCE、DDE 或 GNOME 桌面环境
# 检测是否安装了 KDE Plasma 桌面环境
# 通过检查系统中是否存在相关的 desktop 文件或关键程序
is_xfce_or_dde_or_gnome() {
# 检查 XFCE
if [ -f /usr/share/xsessions/xfce.desktop ] || \
[ -f /usr/local/share/xsessions/xfce.desktop ] || \
command -v xfce4-session >/dev/null 2>&1; then
return 0
fi
# 检查 DDE/Deepin
if [ -f /usr/share/xsessions/deepin.desktop ] || \
[ -f /usr/share/xsessions/dde.desktop ] || \
[ -f /usr/local/share/xsessions/deepin.desktop ] || \
[ -f /usr/local/share/xsessions/dde.desktop ] || \
command -v dde-session >/dev/null 2>&1 || \
command -v startdde >/dev/null 2>&1; then
return 0
fi
# 检查 GNOME
if [ -f /usr/share/xsessions/gnome.desktop ] || \
[ -f /usr/share/xsessions/gnome-xorg.desktop ] || \
[ -f /usr/share/xsessions/gnome-wayland.desktop ] || \
[ -f /usr/local/share/xsessions/gnome.desktop ] || \
[ -f /usr/local/share/xsessions/gnome-xorg.desktop ] || \
[ -f /usr/local/share/xsessions/gnome-wayland.desktop ] || \
command -v gnome-session >/dev/null 2>&1 || \
command -v gnome-shell >/dev/null 2>&1; then
is_kde_plasma() {
# 检查 KDE Plasma
if [ -f /usr/share/xsessions/plasma.desktop ] || \
[ -f /usr/share/xsessions/plasma-xorg.desktop ] || \
[ -f /usr/share/xsessions/plasma-wayland.desktop ] || \
[ -f /usr/local/share/xsessions/plasma.desktop ] || \
[ -f /usr/local/share/xsessions/plasma-xorg.desktop ] || \
[ -f /usr/local/share/xsessions/plasma-wayland.desktop ] || \
command -v startplasma-x11 >/dev/null 2>&1 || \
command -v startplasma-wayland >/dev/null 2>&1 || \
command -v plasmashell >/dev/null 2>&1; then
return 0
fi
return 1
@@ -39,13 +25,13 @@ if grep -q "Kylin" /etc/os-release; then
echo "检测到麒麟系统,使用目标目录: $TARGET_BASE"
else
TARGET_BASE="/usr/local/share"
# 检测是否为 XFCE、DDE 或 GNOME 桌面环境
if is_xfce_or_dde_or_gnome; then
APP_TARGET_DIR="$TARGET_BASE/applications"
echo "检测到 XFCE/DDE/GNOME 桌面环境,使用目标目录: $APP_TARGET_DIR"
else
# 检测是否为 KDE Plasma 桌面环境
if is_kde_plasma; then
APP_TARGET_DIR="$TARGET_BASE/applications/apm"
echo "使用目标目录: $APP_TARGET_DIR"
echo "检测到 KDE Plasma 桌面环境,使用目标目录: $APP_TARGET_DIR"
else
APP_TARGET_DIR="$TARGET_BASE/applications"
echo "使用标准目标目录: $APP_TARGET_DIR"
fi
fi
@@ -143,11 +129,3 @@ if ! grep -q "Kylin" /etc/os-release; then
fi
fi
fi
# 更新桌面数据库
if command -v update-desktop-database >/dev/null 2>&1; then
echo "正在更新桌面数据库..."
update-desktop-database "$TARGET_BASE/applications/"
else
echo "警告: update-desktop-database 命令未找到"
fi
+2
View File
@@ -81,6 +81,8 @@ while ! network-check; do
done
# 每日更新星火源文件
apm autoremove -y
apm clean
exit
###########################################################################
+8 -9
View File
@@ -14,16 +14,15 @@ export ACE_PACKAGE_NAME=$PKGNAME
chrootEnvPath=/var/lib/apm/$PKGNAME/files/ace-env
if [ ! -e $chrootEnvPath/finish.flag ];then
# if [ ! -e $chrootEnvPath/finish.flag ];then
if [ "$(id -u)" = "0" ]; then
`dirname $chrootEnvPath`/bin/ace-init
else
pkexec `dirname $chrootEnvPath`/bin/ace-init
fi
fi
# if [ "$(id -u)" = "0" ]; then
# `dirname $chrootEnvPath`/bin/ace-init
# else
# pkexec `dirname $chrootEnvPath`/bin/ace-init
# fi
# Ubuntu 26.04 中断了我们配置容器
#fi
non_root_user=$(who | awk '{print $1}' | head -n 1)
uid=$(id -u $non_root_user)