Compare commits

..

106 Commits

Author SHA1 Message Date
0e8e4ecf0f update src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bin/ace-init.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-03-29 07:31:39 +00:00
e79923c206 update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-03-23 15:02:42 +00:00
36b2ea2ced update README.zh.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-03-23 15:02:06 +00:00
e9f2ebd9e5 修复:逻辑更改到postinst 2024-03-23 18:59:04 +08:00
99268485c4 修复:后续更新问题 2024-03-23 18:57:49 +08:00
ca582467dc damn忘了这个 2024-03-23 18:49:06 +08:00
92f87a3f62 不是龙架构不加liblol 2024-03-23 18:42:56 +08:00
6d76dc98aa 尝试修复和桌面冲突 2024-03-23 17:50:39 +08:00
fd1d9dded0 fix postinst 2024-03-23 17:05:52 +08:00
488c2f038f 修复龙架构 2024-03-23 16:09:36 +08:00
1b531a75b1 adapt to old version 2024-03-23 16:06:58 +08:00
73e3bec9c3 改回原包名 2024-03-23 16:01:18 +08:00
0bbaaea422 更改目录为ace-env 2024-03-23 15:39:58 +08:00
24fe84d5be Now change to ACE Bookworm 2024-03-23 13:40:19 +08:00
d74b603469 update src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bin/bookworm-run.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-03-20 07:04:15 +00:00
903788732c update ace-host-integration.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-03-20 02:50:43 +00:00
c976b58920 Delete unwork nvidia support
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-03-19 09:27:33 +00:00
516c4c30d4 fix init 2024-03-16 17:01:16 +08:00
75469cf1fc 修复:bwrap失效 2024-03-16 15:29:34 +08:00
b22439d7e6 同步更改到bwrap 2024-03-16 15:22:02 +08:00
0549dc74c3 * fix:时区出错 2024-03-16 15:19:04 +08:00
a2c95f2518 * adjust: 废弃了bookworm-run-root,重制了bookworm-run以提升代码质量
* fix: 部分应用卸载失败的问题

* fix: 光标主题失效的问题
2024-03-16 13:50:54 +08:00
34f4ba62cb update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-03-08 13:23:00 +00:00
63fa6b6c46 update README.zh.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-03-08 13:22:08 +00:00
172e219bb3 update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-02-23 14:56:11 +00:00
878d559241 update README.zh.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-02-23 14:55:17 +00:00
e9c9f488f5 fix:lost option 2024-02-17 16:03:44 +08:00
02a70eb0e7 apt clean first 2024-02-17 15:51:34 +08:00
8d5a07277a bwrap 2024-02-17 15:45:25 +08:00
12a2c435be update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-01-31 04:02:30 +00:00
798554ab22 update README.zh.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-01-31 04:02:20 +00:00
a284695f80 update README.zh.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-01-30 16:34:38 +00:00
fe19bf6efc update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-01-30 16:34:02 +00:00
4c19bf865a update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-01-30 16:33:39 +00:00
af5594cdcb update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-01-30 16:33:13 +00:00
130ff44a29 add README.zh.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-01-30 16:32:26 +00:00
dba6361d29 update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-01-30 16:31:54 +00:00
b5f45bbecf 修改: README.md 2024-01-30 19:17:59 +08:00
f3be1f48f6 No more RPM 2024-01-30 18:56:39 +08:00
af04000b02 更新host integration 2024-01-29 23:33:42 +08:00
a9988f37f3 修复:更新提示失效 2024-01-29 23:16:18 +08:00
130839b368 修复:提示完了不更新 2024-01-29 23:04:46 +08:00
574da47849 修改如下
1. 支持滚动更新功能,自动跟随到最新的上游
2. 添加了systemd依赖和一个systemd服务,会在安装后启动(修改了postinst/rm)
2024-01-29 23:01:41 +08:00
081203e0d4 1 2024-01-29 08:07:08 +08:00
57e9b966e0 修改: README.md 2024-01-29 08:05:31 +08:00
667b83e52b 修改: README.md 2024-01-29 08:04:38 +08:00
d2cf07bd01 支持fedora 2024-01-28 00:00:01 +08:00
5e74ed9b91 !4 更新自描述文件,提供编译命令
Merge pull request !4 from 花雨落逝/master
2024-01-15 06:22:35 +00:00
花雨落逝
65dfa5291c update README.md.
Signed-off-by: 花雨落逝 <12135927+hylshi@user.noreply.gitee.com>
2024-01-15 06:01:04 +00:00
花雨落逝
2ad0ea3f42 update README.md.
Signed-off-by: 花雨落逝 <12135927+hylshi@user.noreply.gitee.com>
2024-01-15 05:36:05 +00:00
花雨落逝
aedcb5c1ed update README.md.
Signed-off-by: 花雨落逝 <12135927+hylshi@user.noreply.gitee.com>
2024-01-15 05:30:16 +00:00
7f33d2fff7 去除unlink 2024-01-11 23:54:03 +08:00
b93199bb05 feat: 直接在包体提供bin的软链接而不是在postinst做 2024-01-11 23:52:11 +08:00
6b0942d2d5 test: NVIDIA support 2024-01-05 18:57:33 +08:00
de2d84e13a fix: Can not show icons in ACE container.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-12-31 13:12:39 +00:00
8fca595000 update tips-slimize-container.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-12-25 09:35:52 +00:00
ceb863717f update tips-slimize-container.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-12-25 09:27:44 +00:00
f489876185 fix: Can not start app in some desktops
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-12-20 06:13:52 +00:00
1e47004eef !2 chore: modify the category of shortcuts
Merge pull request !2 from pzm9012/master
2023-12-12 15:40:38 +00:00
pzm9012
4afbfab976 chore: modify the category of shortcuts
Signed-off-by: pzm9012 <pzm9012@outlook.com>
2023-12-12 15:33:43 +00:00
866a866d5b 无UOS包支持 2023-12-12 22:57:17 +08:00
2bdfe5c177 update src/DEBIAN/control.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-12-12 09:33:40 +00:00
6b27103c18 提交:1245 2023-12-11 23:36:17 +08:00
00c2772152 change ace integration
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-12-11 15:29:53 +00:00
a8463e9152 1.3
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-12-11 15:28:30 +00:00
0f293864b6 pkexec fix
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-12-11 08:09:11 +00:00
6c853b2bec update src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/build-container.sh.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-12-11 07:06:13 +00:00
8ce2c31380 修复 部分桌面上无法出现desktop 2023-12-11 10:02:38 +08:00
Anysets
f57e80c61a 删除文件 runsript-arch 2023-12-07 15:34:16 +00:00
Anysets
8140e49602 新建 runsript-arch 2023-12-07 15:33:05 +00:00
bc1d029e64 update src/DEBIAN/control.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-12-04 08:24:47 +00:00
4d51bd9dc4 update src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bin/bookworm-init.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-11-23 13:11:24 +00:00
5e41a8f9e7 update src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bin/bookworm-run.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-11-23 13:09:54 +00:00
2949a3df3f 重命名 src/etc/profile.d/bookworm-compatability-mode.sh 为 src/etc/profile.d/ACE-Bookworm.sh 2023-11-23 07:14:13 +00:00
c1030dd35b update src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bin/bookworm-run.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-11-22 15:13:27 +00:00
8d95934a7d update src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bin/bookworm-run.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-11-22 15:09:41 +00:00
0f4ae31462 update src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bin/bookworm-run.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-11-22 15:07:44 +00:00
c04007eccd arch问题 2023-11-21 15:29:26 +08:00
98575a442c 修复:media挂不上去 2023-11-21 15:26:32 +08:00
ddabb804d0 fix: 卸载工具的comment只显示英文 2023-11-17 21:01:58 +08:00
caadd5d785 修复:vim-common卸载失败 2023-11-15 16:55:17 +08:00
f89f92533f 修改: src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bin/ace-uninstall-helper-gui 2023-11-15 14:10:49 +08:00
a1593ea635 no-pass-auth-uninstaller 2023-11-15 14:06:27 +08:00
d06eaed9e3 修复:错误的环境变量设置 2023-11-14 23:28:46 +08:00
00a12285d9 !1 针对ubuntu发行版本的修正,
Merge pull request !1 from RX6900XT/master
2023-11-13 11:40:06 +00:00
RX6900XT
c26bf5aa06 update src/etc/profile.d/bookworm-compatability-mode.sh.
Signed-off-by: RX6900XT <qq482961502@gmail.com>
2023-11-13 10:57:35 +00:00
RX6900XT
fb8752e0ba !1 update src/etc/profile.d/bookworm-compatability-mode.sh.
Merge pull request !1 from shenmo/N/A
2023-11-13 10:55:57 +00:00
e2769c15d2 update src/etc/profile.d/bookworm-compatability-mode.sh.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-11-13 10:36:46 +00:00
RX6900XT
1e88351964 update src/etc/profile.d/bookworm-compatability-mode.sh.
针对ubuntu发行版本做出修正,在deepin下也能正常工作

Signed-off-by: RX6900XT <qq482961502@gmail.com>
2023-11-13 10:19:37 +00:00
6322718144 更改主机名 2023-11-13 15:09:59 +08:00
60ef6a9893 --setenv IS_ACE_ENV=1 2023-11-12 22:24:55 +08:00
722efa9726 update src/opt/apps/cn.flamescion.bookworm-compatibility-mod
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-11-12 11:07:14 +00:00
79679e79dc fix:no-icon-uos 2023-11-12 17:58:18 +08:00
259957fb9e fix: UOS package uninstall 2023-11-12 17:43:31 +08:00
666cbf3cc2 Support-UOS-apps 2023-11-12 16:05:16 +08:00
08a160114a 加入卸载助手 2023-11-12 15:39:59 +08:00
027b521b45 uninstaller 2023-11-12 14:58:55 +08:00
a3e9fa3fc8 微调 2023-11-11 20:12:09 +08:00
756c0ac310 feat: ace-uninstall-helper 2023-11-11 20:09:32 +08:00
6d2036b3fe 去除重复安装 2023-11-10 18:39:48 +08:00
9be0fa4fea 把安装软件过程转移到容器制作 2023-11-10 18:38:20 +08:00
518fa2dbd3 修改: .gitignore 2023-11-10 15:57:36 +08:00
b826b4c67c unite-ace-host-integration 2023-11-10 15:51:10 +08:00
d7e4071e6f unionrepo 2023-11-10 15:07:40 +08:00
c2effa5c30 remove submodule 2023-11-10 15:05:42 +08:00
e85ff8e69a 更新bin-override,改版本号重新发版本 2023-11-10 10:22:35 +08:00
52 changed files with 2322 additions and 414 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*.deb
src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/ace-env.tar.xz

3
.gitmodules vendored
View File

@@ -1,3 +0,0 @@
[submodule "src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/flamescion-container-tools/bin-override"]
path = src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/flamescion-container-tools/bin-override
url = https://gitee.com/amber-compatability-environment/bin-override.git

View File

@@ -1,31 +1,56 @@
# 书虫兼容模式
书虫兼容模式,是`琥珀兼容环境(ACE)`的一部分
琥珀兼容环境是一款基于bubblewrap的容器化应用打包和分发方案。
书虫兼容模式用极为轻量的容器方案让你可以在几乎任何的Linux发行版上运行一个`Debian 12`容器。在`Appimage`应用无法启动或者打包的时候,使用书虫兼容模式来打包可以让你在使用最新的环境的同时在更多的发行版上运行,是一个很好的选择
书虫兼容模式让你可以在deepin或UOS上使用Debian 12的应用为你带来更好的使用体验
请使用 `git clone --recurse-submodules` 来获取
## 构建指南
先构建容器再打包,容器位置在`src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files`
# Bookworm compatibility mode # Bookworm compatibility mode
# [中文](README.zh.md)
Bookworm compatibility mode is a part of `Amber Compatability Environment(ACE)` Bookworm compatibility mode is a part of `Amber Compatability Environment(ACE)`
Amber Compatability Environment is a container app packaging and distributing solution. Amber Compatability Environment is a container app packaging and distributing solution.
With the help of bubblewrap, a super tiny container solution, you can run a `Debian 12` container in almost every linux distrobution. When you can not launch or pack an `Appimage` App, using Bookworm compatibility mode can allow you to pack the app in a newer environment and also be able to run on more distrobutions. It is a good choice! With the help of bubblewrap, a super tiny container solution, you can run a `Debian 12` container in almost every linux distrobution. When you can not launch or pack an `Appimage` App, using Bookworm compatibility mode can allow you to pack the app in a newer environment and also be able to run on more distrobutions. It is a good choice!
Bookworm compatibility mode allows you to use Debian 12 applications on deepin or UniontechOS using bwrap containers, providing you with a better user experience! **You need to logout or reboot your computer to show the entries in launcher app list if it's your first time using ACE.**
Please use `git clone --recurse-submodules` to obtain the env Please use `git clone --recurse-submodules` to obtain the env
## Install Guide
### Quick Install (Need to install Spark Store first)
[spk://store/tools/cn.flamescion.bookworm-compatibility-mode/](https://spark-store-project.gitee.io/spk-resolv/?spk=spk://store/tools/cn.flamescion.bookworm-compatibility-mode/)
### Manual InstallDebian/Fedora/Arch)
https://share.shenmo.tech:23333/index.php?share/folder&user=1&sid=kr8z6Fqf
(Dependencies are needed to upgrade for Ubuntu 18.04/deepin 15)
https://cdn.d.store.deepinos.org.cn/store/depends/bubblewrap_0.3.1-4_amd64.deb x86
https://cdn.d.store.deepinos.org.cn/aarch64-store/depends/bubblewrap_0.3.1-4_arm64.deb arm64
## Build Guide ## Build Guide
### Debian
Build the container first then build the package. Container at `src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files` Build the container first then build the package. Container at `src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files`
Here are the details:
1. Install dependencies: sudo apt-get install arch-test debootstrap libnss-mymachines systemd-container
2. Enter the terminal at `src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files` and execute `./build-container.sh amd64`.[for amd,other arch please change]
3. Wait for the container to complete.
4.Get in to `bookworm-compatibility-mode` dir,run`fakeroot dpkg-deb -b src .`
5.Wating for complete.
### Fedora
See https://gitee.com/amber-compatability-environment/ace-rpm
### Arch
`yay -S cn.flamescion.bookworm-compatibility-mode`

52
README.zh.md Normal file
View File

@@ -0,0 +1,52 @@
# 书虫兼容模式
# [English](README.md)
琥珀兼容环境是一款基于bubblewrap的容器化应用打包和分发方案。
书虫兼容模式用极为轻量的容器方案让你可以在几乎任何的Linux发行版上运行一个`Debian 12`容器。在`Appimage`应用无法启动或者打包的时候,使用书虫兼容模式来打包可以让你在使用最新的环境的同时在更多的发行版上运行,是一个很好的选择
**首次安装后请注销或重启以展示启动器入口**
请使用 `git clone --recurse-submodules` 来获取
## 安装指南
### 快捷安装 (需要安装星火应用商店)
[spk://store/tools/cn.flamescion.bookworm-compatibility-mode/](https://spark-store-project.gitee.io/spk-resolv/?spk=spk://store/tools/cn.flamescion.bookworm-compatibility-mode/)
### 手动安装Debian/Fedora/Arch)
https://share.shenmo.tech:23333/index.php?share/folder&user=1&sid=kr8z6Fqf
(Ubuntu 18.04/deepin 15需要先安装依赖)
https://cdn.d.store.deepinos.org.cn/store/depends/bubblewrap_0.3.1-4_amd64.deb x86
https://cdn.d.store.deepinos.org.cn/aarch64-store/depends/bubblewrap_0.3.1-4_arm64.deb arm64
## 构建指南
### Debian
先构建容器再打包,容器位置在`src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files`
下面是详细步骤:
1. 安装依赖sudo apt-get install arch-test debootstrap libnss-mymachines systemd-container
2.`src/opt/apps/cn.flamescion.bookworm-compatibility-mode/files`位置进入终端,执行`./build-container.sh amd64`[amd架构其他架构同理]`
3. 等待容器打包完成
4. 进入`bookworm-compatibility-mode`目录,执行`fakeroot dpkg-deb -b src .`
5. 等待打包完成
### Fedora
请前往 https://gitee.com/amber-compatability-environment/ace-rpm
### Arch
`yay -S cn.flamescion.bookworm-compatibility-mode`
---

View File

@@ -1,8 +1,8 @@
Package: cn.flamescion.bookworm-compatibility-mode Package: cn.flamescion.bookworm-compatibility-mode
Version: 12.3 Version: 12.4.11
Section: misc Section: misc
Priority: optional Priority: optional
Depends: bubblewrap,flatpak Depends: bubblewrap,flatpak,zenity,policykit-1,gcc,systemd
Maintainer: shenmo <shenmo@spark-app.store> Maintainer: shenmo <shenmo@spark-app.store>
Architecture: arm64 Architecture: arm64
Description: bwrap wrapper for install and running debs inside a bookworm container Description: bwrap wrapper for install and running debs inside a bookworm container

View File

@@ -1,6 +1,21 @@
#!/bin/bash #!/bin/bash
export PACKAGE_NAME="$DPKG_MAINTSCRIPT_PACKAGE" export PACKAGE_NAME="$DPKG_MAINTSCRIPT_PACKAGE"
/opt/apps/$PACKAGE_NAME/files/bin/bookworm-init
if [ "$PACKAGE_NAME" = "cn.flamescion.bookworm-compatibility-mode" ];then if [ "${PACKAGE_NAME}" = "cn.flamescion.bookworm-compatibility-mode" ];then
ln -sf /opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bin/bookworm-run /usr/bin/bookworm-run if [ -d /opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bookworm-env ];then
if [ "$(arch)" != "loongarch64" ];then
mv /opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bookworm-env /opt/apps/cn.flamescion.bookworm-compatibility-mode/files/ace-env
ln -sfv /opt/apps/cn.flamescion.bookworm-compatibility-mode/files/ace-env /opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bookworm-env
else
mv /opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bookworm-env /opt/apps/amber-ce-loongnix/files/ace-env
fi
fi
fi
/opt/apps/$PACKAGE_NAME/files/bin/ace-init
if [ "${PACKAGE_NAME}" = "cn.flamescion.bookworm-compatibility-mode" ];then
systemctl daemon-reload
systemctl enable ace-bookworm-auto-upgrade
systemctl start ace-bookworm-auto-upgrade
fi fi

View File

@@ -1,9 +1,15 @@
#!/bin/bash #!/bin/bash
PACKAGE_NAME="$DPKG_MAINTSCRIPT_PACKAGE" PACKAGE_NAME="$DPKG_MAINTSCRIPT_PACKAGE"
if [ "$1" = "remove" ] || [ "$1" = "purge" ];then
if [ "$PACKAGE_NAME" = "cn.flamescion.bookworm-compatibility-mode" ];then if [ "${PACKAGE_NAME}" = "cn.flamescion.bookworm-compatibility-mode" ];then
unlink /usr/bin/bookworm-run systemctl stop ace-bookworm-auto-upgrade
systemctl disable ace-bookworm-auto-upgrade
fi fi
if [ "$1" = "remove" ] || [ "$1" = "purge" ];then
echo "清理卸载残留" echo "清理卸载残留"
rm -rf /opt/apps/$PACKAGE_NAME rm -rf /opt/apps/$PACKAGE_NAME
@@ -11,3 +17,5 @@ else
echo "非卸载,跳过清理" echo "非卸载,跳过清理"
fi fi

View File

@@ -0,0 +1,17 @@
# Ensure base distro defaults xdg path are set if nothing filed up some
# defaults yet.
if [ -z "$XDG_DATA_DIRS" ]; then
export XDG_DATA_DIRS="/usr/local/share:/usr/share"
fi
# Desktop files (used by desktop environments within both X11 and Wayland) are
# looked for in XDG_DATA_DIRS; make sure it includes the relevant directory for ACE
ACE_path="/opt/apps/amber-ce-bookworm/files/ace-env/flamescion-container-tools/data-dir/"
if [ -n "${XDG_DATA_DIRS##*${ACE_path}}" ] && [ -n "${XDG_DATA_DIRS##*${ACE_path}:*}" ]; then
export XDG_DATA_DIRS="${ACE_path}:${XDG_DATA_DIRS}"
fi

View File

@@ -0,0 +1,16 @@
# Ensure base distro defaults xdg path are set if nothing filed up some
# defaults yet.
if [ -z "$XDG_DATA_DIRS" ]; then
export XDG_DATA_DIRS="/usr/local/share:/usr/share"
fi
# Desktop files (used by desktop environments within both X11 and Wayland) are
# looked for in XDG_DATA_DIRS; make sure it includes the relevant directory for ACE
ACE_path="/opt/apps/amber-ce-bookworm/files/ace-env/flamescion-container-tools/data-dir/"
if [ -n "${XDG_DATA_DIRS##*${ACE_path}}" ] && [ -n "${XDG_DATA_DIRS##*${ACE_path}:*}" ]; then
export XDG_DATA_DIRS="${ACE_path}:${XDG_DATA_DIRS}"
fi

View File

@@ -1,4 +0,0 @@
export XDG_DATA_DIRS
APP_ROOT="/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bookworm-env/usr/share"
XDG_DATA_DIRS="${APP_ROOT}:/usr/local/share:/usr/share"
export APP_ROOT

View File

@@ -0,0 +1 @@
./cn.flamescion.bookworm-compatibility-mode/

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

View File

@@ -1,9 +0,0 @@
[Desktop Entry]
Categories=utils
Exec=/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bin/bookworm-run %U
Icon=cn.flamescion.bookworm-compatibility-mode
Name=Bookworm CM
Name[zh_CN]=书虫兼容模式
StartupNotify=true
Type=Application
Terminal=true

View File

@@ -0,0 +1,91 @@
#!/bin/bash
if [ "$UID" != "0" ];then
echo "Need to be run as root."
exit 1
fi
# 清除先前的变量值
unset ABSOLUTE_PATH IN_CONTAINER_PATH PKGNAME_GUESS DPKG_LIST_FILE ACE_ENV_PATH
# 定义环境路径变量
ACE_ENV_PATH="/opt/apps/amber-ce-bookworm/files/ace-env"
# 检查参数个数
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <desktop-file>"
exit 1
fi
# 保存并验证绝对路径
ABSOLUTE_PATH=$1
if [[ $ABSOLUTE_PATH != "$ACE_ENV_PATH"* ]]; then
echo "Error: Invalid path. Must start with $ACE_ENV_PATH"
exit 1
fi
# 验证是否为desktop文件
if [[ ! $ABSOLUTE_PATH == *.desktop ]]; then
if [ ! -e $ABSOLUTE_PATH ];then
echo "$ABSOLUTE_PATH does not exist. May have already been uninstalled. Ignore it."
exit
else
echo "Error: The file is not a desktop file."
exit 1
fi
fi
# 截取路径
IN_CONTAINER_PATH=${ABSOLUTE_PATH#"$ACE_ENV_PATH"}
# 截取并保存包名
PKGNAME_GUESS=$(basename "$ABSOLUTE_PATH" .desktop)
# 检查dpkg列表文件
DPKG_INFO_PATH="$ACE_ENV_PATH/var/lib/dpkg/info"
if [ -f "$DPKG_INFO_PATH/$PKGNAME_GUESS.list" ]; then
DPKG_LIST_FILE="$DPKG_INFO_PATH/$PKGNAME_GUESS.list"
elif ls "$DPKG_INFO_PATH/${PKGNAME_GUESS}:*.list" 1> /dev/null 2>&1; then
DPKG_LIST_FILE=$(ls "$DPKG_INFO_PATH/${PKGNAME_GUESS}:*.list" | head -n 1)
else
echo "Warn:No dpkg list file found for $PKGNAME_GUESS.desktop,try to scan to search for the package"
fi
# 验证文件并执行操作
if [ -f "$DPKG_LIST_FILE" ]; then
if grep -q "$IN_CONTAINER_PATH" "$DPKG_LIST_FILE" || grep -q "/opt/apps/$PKGNAME_GUESS/entries/applications/$PKGNAME_GUESS.desktop" "$DPKG_LIST_FILE"; then
bookworm-run apt autopurge $PKGNAME_GUESS -y
ret=$?
if [ "$ret" = "0" ];then
echo "Operation succeeded."
exit
else
echo "Operation failed."
exit $ret
fi
else
echo "Warn: Path not found in the dpkg list file,try to scan to search for the package"
fi
fi
# 遍历所有list文件 As fallback
for file in "$DPKG_INFO_PATH"/*.list; do
if grep -q "$IN_CONTAINER_PATH" "$file"; then
PKGNAME_GUESS=$(basename "$file" .list | cut -d':' -f1)
echo "Get pkgname $PKGNAME_GUESS, uninstalling..."
bookworm-run apt autopurge $PKGNAME_GUESS -y
ret=$?
if [ "$ret" = "0" ];then
echo "Operation succeeded."
exit 0
else
echo "Operation failed."
exit $ret
fi
fi
done
echo "Error: No matching package found."
exit 1

View File

@@ -0,0 +1,77 @@
#!/bin/bash
if [ "$UID" != "0" ];then
pkexec $0
exit
fi
# 定义应用列表文件路径
ACE_dir="/opt/apps/amber-ce-bookworm/files/ace-env"
# 读取所有.desktop文件并构造应用列表
app_list=()
for file in "$ACE_dir"/usr/share/applications/*.desktop; do
if [ ! -e "$file" ];then ##可能是软链接,对主机来说无用
file=$ACE_dir$(readlink $file)
fi
if [ "$(grep -m 1 '^NoDisplay=' "$file" | cut -d '=' -f 2)" = "true" ] || [ "$(grep -m 1 '^NoDisplay=' "$file" | cut -d '=' -f 2)" = "True" ];then
continue
fi
# 读取应用名称和简介
name_orig=$(grep -m 1 '^Name=' "$file" | cut -d '=' -f 2)
name_i18n=$(grep -m 1 "^Name\[${LANGUAGE}\]\=" "$file" | cut -d '=' -f 2)
if [ -z "$name_i18n" ] ;then
name=$name_orig
else
name=$name_i18n
fi
comment_orig=$(grep -m 1 '^Comment=' "$file" | cut -d '=' -f 2)
comment_i18n=$(grep -m 1 "^Comment\[${LANGUAGE}\]\=" "$file" | cut -d '=' -f 2)
if [ -z "$comment_i18n" ] ;then
comment=$comment_orig
else
comment=$comment_i18n
fi
# 如果没有简介,则显示"N/A"
[[ -z "$comment" ]] && comment="N/A"
# 添加到应用列表数组
app_list+=("false" "$name" "$comment" "$file")
done
# 使用 Zenity 显示应用列表,并获取用户选择
selected_apps=$(zenity --list --title "应用列表" --column "是否卸载" --column "应用名称" --column "应用介绍" --column "desktop文件位置" --checklist "${app_list[@]}" --print-column=4 --hide-column=4 --separator=" " --width=800 --height=400)
# 检查用户是否做出了选择
if [ -n "$selected_apps" ]; then
# 卸载选中的应用
(for app_desktop_path in $selected_apps; do
ace-bookworm-uninstall-helper "$app_desktop_path"
ret=$?
if [ "$ret" != "0" ];then
zenity --error --width 768 --text "$app_desktop_path 卸载失败,中止操作\n请手动执行\nsudo ace-uninstall-helper $app_desktop_path \n查看报错"
exit 1
break
fi
done ) &
cmd_pid=$!
(while kill -0 $cmd_pid 2> /dev/null; do
echo "# 正在执行..."
sleep 1
done)| zenity --progress --text="正在执行卸载操作..." --pulsate --auto-close --no-cancel --width 400
wait $cmd_pid
cmd_status=$?
if [ "$cmd_status" = "1" ];then
zenity --error --width 200 --text "卸载过程出现错误"
exit 1
else
zenity --info --width 200 --text "选定应用已卸载"
fi
else
zenity --info --text "未选择任何应用"
fi

View File

@@ -0,0 +1,118 @@
#!/bin/bash
if [ "$(id -u)" != "0" ]; then
echo "当前用户不是 root 用户,退出"
exit
fi
if [ "$PACKAGE_NAME" = "" ];then
curdir=`realpath $0`
parent_dir=`dirname $curdir`
pparent_dir=`dirname $parent_dir`
ppparent_dir=`dirname $pparent_dir`
PKGNAME=`basename $ppparent_dir`
else
PKGNAME=$PACKAGE_NAME
fi
chrootEnvPath=/opt/apps/$PKGNAME/files/ace-env
if [ ! -e $chrootEnvPath ];then
echo "Uncompress the env...."
tar -xvf $chrootEnvPath.tar.xz -C /opt/apps/$PKGNAME/files/
fi
non_root_user=$(who | awk '{print $1}' | head -n 1)
uid=$(id -u $non_root_user)
function bookworm-run(){
bwrap --dev-bind $chrootEnvPath/ / \
--setenv LANG "$LANG" \
--setenv LC_COLLATE "$LC_COLLATE" \
--setenv LC_CTYPE "$LC_CTYPE" \
--setenv LC_MONETARY "$LC_MONETARY" \
--setenv LC_MESSAGES "$LC_MESSAGES" \
--setenv LC_NUMERIC "$LC_NUMERIC" \
--setenv LC_TIME "$LC_TIME" \
--setenv LC_ALL "$LC_ALL" \
--setenv PULSE_SERVER /run/user/$uid/pulse/native \
--setenv PATH /flamescion-container-tools/bin-override:$PATH \
--setenv IS_ACE_ENV "1" \
--dev-bind-try /media /media \
--dev-bind-try /tmp /tmp \
--dev /dev \
--dev-bind-try /dev/dri /dev/dri \
--proc /proc \
--dev-bind / /host \
--dev-bind /sys /sys \
--dev-bind /run /run \
--dev-bind-try /run/user/$uid/pulse /run/user/$uid/pulse \
--bind-try /usr/share/themes /usr/local/share/themes \
--bind-try /usr/share/icons /usr/local/share/icons \
--bind-try /usr/share/fonts /usr/local/share/fonts \
--hostname Amber-CE-Bookworm \
--unshare-uts \
--dev-bind-try /etc/resolv.conf /etc/resolv.conf \
--dev-bind-try /home /home \
$@
}
echo "Update the flamescion container tools"
cp -r `dirname $chrootEnvPath`/flamescion-container-tools/ $chrootEnvPath
rm -rf $chrootEnvPath/usr/lib/`gcc -dumpmachine`/dri/dri
# 之前错误的多复制了一个,这里删掉
export container_user_gid="$(sudo -u $non_root_user id -rg)"
export container_user_home="/home/${non_root_user}"
export container_user_name="${non_root_user}"
export container_user_uid="$(sudo -u $non_root_user id -ru)"
#####init
bookworm-run bash /flamescion-container-tools/container-init/init.sh
rm $chrootEnvPath/etc/localtime
cp $(realpath /etc/localtime) $chrootEnvPath/etc/localtime
chmod 777 $chrootEnvPath/etc/localtime
bookworm-run cp /host/etc/locale.gen /etc/locale.gen && locale-gen
bookworm-run touch /finish.flag
bookworm-run apt clean
bookworm-run chown -R $(who | awk '{print $1}' | head -n 1) /usr/lib/locale/
sudo -u $(who | awk '{print $1}' | head -n 1) bwrap --dev-bind $chrootEnvPath/ / \
--setenv LANG "$LANG" \
--setenv LC_COLLATE "$LC_COLLATE" \
--setenv LC_CTYPE "$LC_CTYPE" \
--setenv LC_MONETARY "$LC_MONETARY" \
--setenv LC_MESSAGES "$LC_MESSAGES" \
--setenv LC_NUMERIC "$LC_NUMERIC" \
--setenv LC_TIME "$LC_TIME" \
--setenv LC_ALL "$LC_ALL" \
--setenv PULSE_SERVER /run/user/$uid/pulse/native \
--setenv PATH /flamescion-container-tools/bin-override:$PATH \
--setenv IS_ACE_ENV "1" \
--dev-bind $chrootEnvPath/ / \
--dev-bind-try /media /media \
--dev-bind-try /tmp /tmp \
--dev /dev \
--dev-bind-try /dev/dri /dev/dri \
--proc /proc \
--dev-bind /sys /sys \
--dev-bind /run /run \
--dev-bind-try /run/user/$uid/pulse /run/user/$uid/pulse \
--dev-bind / /host \
--bind-try /usr/share/themes /usr/local/share/themes \
--bind-try /usr/share/icons /usr/local/share/icons \
--bind-try /usr/share/fonts /usr/local/share/fonts \
--hostname Amber-CE-Bookworm \
--unshare-uts \
--dev-bind-try /etc/resolv.conf /etc/resolv.conf \
--dev-bind-try /home /home \
locale-gen
bookworm-run update-locale LANG=$LANG
chown -R root $chrootEnvPath
chmod 777 -R $chrootEnvPath /usr/share/icons

View File

@@ -1,238 +0,0 @@
#!/bin/bash
if [ "$(id -u)" != "0" ]; then
echo "当前用户不是 root 用户,退出"
exit
fi
if [ "$PACKAGE_NAME" = "" ];then
curdir=`realpath $0`
parent_dir=`dirname $curdir`
pparent_dir=`dirname $parent_dir`
ppparent_dir=`dirname $pparent_dir`
PKGNAME=`basename $ppparent_dir`
else
PKGNAME=$PACKAGE_NAME
fi
chrootEnvPath=/opt/apps/$PKGNAME/files/bookworm-env
if [ ! -e $chrootEnvPath ];then
echo "Uncompress the env...."
tar -xvf $chrootEnvPath.tar.xz -C /opt/apps/$PKGNAME/files/
fi
non_root_user=$(who | awk '{print $1}' | head -n 1)
uid=$(id -u $non_root_user)
function bookworm-run(){
bwrap --dev-bind $chrootEnvPath/ / \
--setenv LANG "$LANG" \
--setenv LC_COLLATE "$LC_COLLATE" \
--setenv LC_CTYPE "$LC_CTYPE" \
--setenv LC_MONETARY "$LC_MONETARY" \
--setenv LC_MESSAGES "$LC_MESSAGES" \
--setenv LC_NUMERIC "$LC_NUMERIC" \
--setenv LC_TIME "$LC_TIME" \
--setenv LC_ALL "$LC_ALL" \
--setenv PULSE_SERVER /run/user/$uid/pulse/native \
--setenv PATH /flamescion-container-tools/bin-override:$PATH \
--dev-bind $chrootEnvPath/ / \
--dev-bind /media /media \
--dev-bind /tmp /tmp \
--dev /dev \
--dev-bind-try /dev/dri /dev/dri \
--proc /proc \
--dev-bind /sys /sys \
--dev-bind /run /run \
--dev-bind-try /run/user/$uid/pulse /run/user/$uid/pulse \
--dev-bind / /host \
--bind-try /usr/share/themes /usr/local/share/themes \
--bind-try /usr/share/icons /usr/local/share/icons \
--bind-try /usr/share/fonts /usr/local/share/fonts \
--hostname bookworm-compatibility-mode \
--unshare-uts \
--dev-bind /etc/resolv.conf /etc/resolv.conf \
--dev-bind /home /home \
$@
}
bookworm-run apt update
bookworm-run apt install apt-utils bc curl dialog diffutils findutils gnupg2 less libnss-myhostname libvte-2.9*-common libvte-common lsof ncurses-base passwd pinentry-curses procps sudo time util-linux wget libegl1-mesa libgl1-mesa-glx libvulkan1 mesa-vulkan-drivers locales libglib2.0-bin -y
echo "Update the flamescion container tools"
cp -rv `dirname $chrootEnvPath`/flamescion-container-tools/ $chrootEnvPath
rm -rf $chrootEnvPath/usr/lib/`gcc -dumpmachine`/dri/dri
# 之前错误的多复制了一个,这里删掉
container_user_gid="$(sudo -u $non_root_user id -rg)"
container_user_home="/home/${non_root_user}"
container_user_name="${non_root_user}"
container_user_uid="$(sudo -u $non_root_user id -ru)"
cat << EOFFFFFF > $chrootEnvPath/init.sh
#!/bin/bash
printf "bookworm-cm: Setting up sudo...\n"
mkdir -p /etc/sudoers.d
# Do not check fqdn when doing sudo, it will not work anyways
if ! grep -q 'Defaults !fqdn' /etc/sudoers.d/sudoers; then
printf "Defaults !fqdn\n" >> /etc/sudoers.d/sudoers
fi
# Ensure passwordless sudo is set up for user
if ! grep -q "\"${container_user_name}\" ALL = (root) NOPASSWD:ALL" /etc/sudoers.d/sudoers; then
printf "\"%s\" ALL = (root) NOPASSWD:ALL\n" "${container_user_name}" >> /etc/sudoers.d/sudoers
fi
printf "bookworm-cm: Setting up groups...\n"
# If not existing, ensure we have a group for our user.
if ! grep -q "^${container_user_name}:" /etc/group; then
if ! groupadd --force --gid "${container_user_gid}" "${container_user_name}"; then
# It may occur that we have users with unsupported user name (eg. on LDAP or AD)
# So let's try and force the group creation this way.
printf "%s:x:%s:" "${container_user_name}" "${container_user_gid}" >> /etc/group
fi
fi
printf "bookworm-cm: Setting up users...\n"
# Setup kerberos integration with the host
if [ -d "/run/host/var/kerberos" ] &&
[ -d "/etc/krb5.conf.d" ] &&
[ ! -e "/etc/krb5.conf.d/kcm_default_ccache" ]; then
cat << EOF > "/etc/krb5.conf.d/kcm_default_ccache"
# # To disable the KCM credential cache, comment out the following lines.
[libdefaults]
default_ccache_name = KCM:
EOF
fi
# If we have sudo/wheel groups, let's add the user to them.
additional_groups=""
if grep -q "^sudo" /etc/group; then
additional_groups="sudo"
elif grep -q "^wheel" /etc/group; then
additional_groups="wheel"
fi
# Let's add our user to the container. if the user already exists, enforce properties.
#
# In case of AD or LDAP usernames, it is possible we will have a backslach in the name.
# In that case grep would fail, so we replace the backslash with a point to make the regex work.
# shellcheck disable=SC1003
if ! grep -q "^$(printf '%s' "${container_user_name}" | tr '\\' '.'):" /etc/passwd &&
! grep -q "^.*:.*:${container_user_uid}:" /etc/passwd; then
if ! useradd \
--home-dir "${container_user_home}" \
--no-create-home \
--groups "${additional_groups}" \
--shell "${SHELL:-"/bin/bash"}" \
--uid "${container_user_uid}" \
--gid "${container_user_gid}" \
"${container_user_name}"; then
printf "Warning: there was a problem setting up the user\n"
printf "Warning: trying manual addition\n"
printf "%s:x:%s:%s:%s:%s:%s" \
"${container_user_name}" "${container_user_uid}" \
"${container_user_gid}" "${container_user_name}" \
"${container_user_home}" "${SHELL:-"/bin/bash"}" >> /etc/passwd
printf "%s::1::::::" "${container_user_name}" >> /etc/shadow
fi
# Ensure we're not using the specified SHELL. Run it only once, so that future
# user's preferences are not overwritten at each start.
elif [ ! -e /etc/passwd.done ]; then
# This situation is presented when podman or docker already creates the user
# for us inside container. We should modify the user's prepopulated shadowfile
# entry though as per user's active preferences.
# If the user was there with a different username, get that username so
# we can modify it
if ! grep -q "^$(printf '%s' "${container_user_name}" | tr '\\' '.'):" /etc/passwd; then
user_to_modify=$(getent passwd "${container_user_uid}" | cut -d: -f1)
fi
if ! usermod \
--home "${container_user_home}" \
--shell "${SHELL:-"/bin/bash"}" \
--groups "${additional_groups}" \
--uid "${container_user_uid}" \
--gid "${container_user_gid}" \
--login "${container_user_name}" \
"${user_to_modify:-"${container_user_name}"}"; then
printf "Warning: there was a problem setting up the user\n"
fi
touch /etc/passwd.done
fi
# We generate a random password to initialize the entry for the user and root.
temporary_password="$(cat /proc/sys/kernel/random/uuid)"
printf "%s\n%s\n" "${temporary_password}" "${temporary_password}" | passwd root
printf "%s:%s" "${container_user_name}" "${temporary_password}" | chpasswd -e
# Delete password for root and user
printf "%s:" "root" | chpasswd -e
printf "%s:" "${container_user_name}" | chpasswd -e
## init host-spawn
unlink /flamescion-container-tools/bin-override/host-spawn
ln -sfv /flamescion-container-tools/bin-override/host-spawn-`arch` /flamescion-container-tools/bin-override/host-spawn
EOFFFFFF
#####init
chmod +x $chrootEnvPath/init.sh
bookworm-run bash /init.sh
bookworm-run rm /init.sh
bookworm-run cp /host/etc/locale.gen /etc/locale.gen && locale-gen
echo "Installing or Upgrading host integration..."
gitee_api_url="https://gitee.com/api/v5/repos/amber-compatability-environment/ace-host-integration/releases/latest"
resp="$(curl -s $gitee_api_url)"
VERSION_GITEE="$(jq -r '.tag_name' <<<$resp | sed "s/.*V\([^_]*\).*/\1/g")"
echo "$VERSION_GITEE"
bookworm-run wget https://gitee.com/amber-compatability-environment/ace-host-integration/releases/download/${VERSION_GITEE}/ace-host-integration_${VERSION_GITEE}_all.deb
bookworm-run apt install ./ace-host-integration_${VERSION_GITEE}_all.deb
bookworm-run rm ./ace-host-integration_${VERSION_GITEE}_all.deb
bookworm-run touch /finish.flag
bookworm-run apt clean
bookworm-run chown -R $(who | awk '{print $1}' | head -n 1) /usr/lib/locale/
sudo -u $(who | awk '{print $1}' | head -n 1) bwrap --dev-bind $chrootEnvPath/ / \
--setenv LANG "$LANG" \
--setenv LC_COLLATE "$LC_COLLATE" \
--setenv LC_CTYPE "$LC_CTYPE" \
--setenv LC_MONETARY "$LC_MONETARY" \
--setenv LC_MESSAGES "$LC_MESSAGES" \
--setenv LC_NUMERIC "$LC_NUMERIC" \
--setenv LC_TIME "$LC_TIME" \
--setenv LC_ALL "$LC_ALL" \
--setenv PULSE_SERVER /run/user/$uid/pulse/native \
--setenv PATH /flamescion-container-tools/bin-override:$PATH \
--dev-bind $chrootEnvPath/ / \
--dev-bind /media /media \
--dev-bind /tmp /tmp \
--dev /dev \
--dev-bind-try /dev/dri /dev/dri \
--proc /proc \
--dev-bind /sys /sys \
--dev-bind /run /run \
--dev-bind-try /run/user/$uid/pulse /run/user/$uid/pulse \
--dev-bind / /host \
--ro-bind /usr/share/themes /usr/local/share/themes \
--ro-bind /usr/share/icons /usr/local/share/icons \
--ro-bind /usr/share/fonts /usr/local/share/fonts \
--hostname bookworm-compatibility-mode \
--unshare-uts \
--dev-bind /etc/resolv.conf /etc/resolv.conf \
--dev-bind /home /home \
locale-gen
chown -R root $chrootEnvPath

View File

@@ -6,20 +6,14 @@ pparent_dir=`dirname $parent_dir`
ppparent_dir=`dirname $pparent_dir` ppparent_dir=`dirname $pparent_dir`
PKGNAME=`basename $ppparent_dir` PKGNAME=`basename $ppparent_dir`
export PACKAGE_NAME=$PKGNAME export PACKAGE_NAME=$PKGNAME
chrootEnvPath=/opt/apps/$PKGNAME/files/bookworm-env chrootEnvPath=/opt/apps/$PKGNAME/files/ace-env
if [ "$(id -u)" = "0" ]; then
`dirname $chrootEnvPath`/bin/bookworm-run-root "$@"
exit
fi
if [ ! -e $chrootEnvPath/finish.flag ];then if [ ! -e $chrootEnvPath/finish.flag ];then
if [ "$(id -u)" = "0" ]; then if [ "$(id -u)" = "0" ]; then
`dirname $chrootEnvPath`/bin/bookworm-init `dirname $chrootEnvPath`/bin/ace-init
else else
pkexec `dirname $chrootEnvPath`/bin/bookworm-init pkexec `dirname $chrootEnvPath`/bin/ace-init
fi fi
@@ -40,38 +34,127 @@ for arg in "$@"; do
container_command="${container_command} '${arg}'" container_command="${container_command} '${arg}'"
done done
fi fi
#########################################################################################
##########合成bwrap 1. 基础函数配置段
# 初始化 EXEC_COMMAND 为 bwrap 基础指令
EXEC_COMMAND="bwrap --dev-bind / / bwrap"
# add_command 函数定义
function add_command() {
# 参数拼接,考虑到转义和空格的处理
for arg in "$@"; do
EXEC_COMMAND="${EXEC_COMMAND} ${arg}"
done
}
function add_env_var() {
local var_name="${1}"
local var_value="${2}"
if [ "$var_value" != "" ]; then
add_command "--setenv $var_name $var_value"
fi
}
##########合成bwrap 2. 特殊需求函数配置段
function cursor_theme_dir_integration() {
local directory=""
if [ "$(id -u)" = "0" ]; then #####We don't want bother root to install themes,but will try to fix the unwriteable issue
mkdir -p $chrootEnvPath/usr/share/icons
chmod 777 -R $chrootEnvPath/usr/share/icons
return
fi
for directory in "/usr/share/icons"/*; do
# 检查是否为目录
if [ -d "$directory" ]; then
# 检查目录中是否存在 cursors 文件
if [ -d "$directory/cursors" ]; then
if [ -w $chrootEnvPath/usr/share/icons ];then
add_command "--ro-bind-try $directory $directory"
fi
fi
fi
done
bwrap --dev-bind / / \
bwrap \
--setenv LANG "$LANG" \
--setenv LC_COLLATE "$LC_COLLATE" \
--setenv LC_CTYPE "$LC_CTYPE" \
--setenv LC_MONETARY "$LC_MONETARY" \ }
--setenv LC_MESSAGES "$LC_MESSAGES" \ ##########合成bwrap 3. 环境变量和目录绑定配置段
--setenv LC_NUMERIC "$LC_NUMERIC" \ # 添加环境变量和其他初始设置
--setenv LC_TIME "$LC_TIME" \ ENV_VARS=(
--setenv LC_ALL "$LC_ALL" \ "LANG $LANG"
--setenv PULSE_SERVER /run/user/$uid/pulse/native \ "LC_COLLATE $LC_COLLATE"
--setenv PATH /flamescion-container-tools/bin-override:$PATH \ "LC_CTYPE $LC_CTYPE"
--dev-bind $chrootEnvPath/ / \ "LC_MONETARY $LC_MONETARY"
--dev-bind /media /media \ "LC_MESSAGES $LC_MESSAGES"
--dev-bind /tmp /tmp \ "LC_NUMERIC $LC_NUMERIC"
--dev /dev \ "LC_TIME $LC_TIME"
--dev-bind /dev/dri /dev/dri \ "LC_ALL $LC_ALL"
--proc /proc \ "PULSE_SERVER /run/user/\$uid/pulse/native"
--dev-bind /sys /sys \ "PATH /flamescion-container-tools/bin-override:\$PATH"
--dev-bind /run /run \ "IS_ACE_ENV 1"
--dev-bind-try /run/user/$uid/pulse /run/user/$uid/pulse \ )
--dev-bind / /host \
--ro-bind /usr/share/themes /usr/local/share/themes \ BIND_DIRS=(
--ro-bind /usr/share/icons /usr/share/icons \ "--dev-bind $chrootEnvPath/ /"
--ro-bind /usr/share/fonts /usr/local/share/fonts \ "--dev-bind-try /media /media"
--hostname bookworm-compatibility-mode \ "--dev-bind-try /mnt /mnt"
--unshare-uts \ "--dev-bind-try /tmp /tmp"
--dev-bind /etc/resolv.conf /etc/resolv.conf \ "--dev /dev"
--cap-add CAP_SYS_ADMIN \ "--dev-bind-try /dev/dri /dev/dri"
--dev-bind /home /home \ "--proc /proc"
bash -c "${container_command}" "--dev-bind /sys /sys"
"--dev-bind /run /run"
"--dev-bind-try /run/user/\$uid/pulse /run/user/\$uid/pulse"
"--dev-bind / /host"
"--ro-bind-try /usr/share/themes /usr/local/share/themes"
"--ro-bind-try /usr/share/icons /usr/local/share/icons"
"--ro-bind-try /usr/share/fonts /usr/local/share/fonts"
"--ro-bind-try $(realpath /etc/localtime) /etc/localtime"
"--dev-bind-try /etc/resolv.conf /etc/resolv.conf"
"--dev-bind-try /home /home"
)
EXTRA_ARGS=(
"--hostname Amber-CE-Bookworm"
"--unshare-uts"
"--cap-add CAP_SYS_ADMIN"
)
EXTRA_SCRIPTS=(
cursor_theme_dir_integration
)
##########合成bwrap 4. 合成并执行指令
# 逐一添加到 EXEC_COMMAND
for var in "${ENV_VARS[@]}"; do
add_env_var $var
done
for var in "${BIND_DIRS[@]}"; do
add_command "$var"
done
for var in "${EXTRA_ARGS[@]}"; do
add_command "$var"
done
for var in "${EXTRA_SCRIPTS[@]}"; do
$var
done
# 添加最终的 bash 命令
add_command "bash -c \"${container_command}\""
# 输出完整的 EXEC_COMMAND 以查看
# echo "${EXEC_COMMAND}"
# 注意: 实际执行时,请确保所有变量(如 $uid, $chrootEnvPath 等)都已正确定义
eval ${EXEC_COMMAND}

View File

@@ -0,0 +1,159 @@
#!/bin/bash
curdir=`realpath $0`
parent_dir=`dirname $curdir`
pparent_dir=`dirname $parent_dir`
ppparent_dir=`dirname $pparent_dir`
PKGNAME=`basename $ppparent_dir`
export PACKAGE_NAME=$PKGNAME
chrootEnvPath=/opt/apps/$PKGNAME/files/ace-env
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
non_root_user=$(who | awk '{print $1}' | head -n 1)
uid=$(id -u $non_root_user)
#### This part is for args pharm
if [ "$1" = "" ];then
container_command="bash"
else
container_command="$1"
shift
for arg in "$@"; do
arg="$(echo "${arg}x" | sed 's|'\''|'\'\\\\\'\''|g')"
arg="${arg%x}"
container_command="${container_command} '${arg}'"
done
fi
#########################################################################################
##########合成bwrap 1. 基础函数配置段
# 初始化 EXEC_COMMAND 为 bwrap 基础指令
EXEC_COMMAND="bwrap --dev-bind / / bwrap"
# add_command 函数定义
function add_command() {
# 参数拼接,考虑到转义和空格的处理
for arg in "$@"; do
EXEC_COMMAND="${EXEC_COMMAND} ${arg}"
done
}
function add_env_var() {
local var_name="${1}"
local var_value="${2}"
if [ "$var_value" != "" ]; then
add_command "--setenv $var_name $var_value"
fi
}
##########合成bwrap 2. 特殊需求函数配置段
function cursor_theme_dir_integration() {
local directory=""
if [ "$(id -u)" = "0" ]; then #####We don't want bother root to install themes,but will try to fix the unwriteable issue
mkdir -p $chrootEnvPath/usr/share/icons
chmod 777 -R $chrootEnvPath/usr/share/icons
return
fi
for directory in "/usr/share/icons"/*; do
# 检查是否为目录
if [ -d "$directory" ]; then
# 检查目录中是否存在 cursors 文件
if [ -d "$directory/cursors" ]; then
if [ -w $chrootEnvPath/usr/share/icons ];then
add_command "--ro-bind-try $directory $directory"
fi
fi
fi
done
}
##########合成bwrap 3. 环境变量和目录绑定配置段
# 添加环境变量和其他初始设置
ENV_VARS=(
"LANG $LANG"
"LC_COLLATE $LC_COLLATE"
"LC_CTYPE $LC_CTYPE"
"LC_MONETARY $LC_MONETARY"
"LC_MESSAGES $LC_MESSAGES"
"LC_NUMERIC $LC_NUMERIC"
"LC_TIME $LC_TIME"
"LC_ALL $LC_ALL"
"PULSE_SERVER /run/user/\$uid/pulse/native"
"PATH /flamescion-container-tools/bin-override:\$PATH"
"IS_ACE_ENV 1"
)
BIND_DIRS=(
"--dev-bind $chrootEnvPath/ /"
"--dev-bind-try /media /media"
"--dev-bind-try /tmp /tmp"
"--dev /dev"
"--dev-bind-try /dev/dri /dev/dri"
"--proc /proc"
"--dev-bind /sys /sys"
"--dev-bind /run /run"
"--dev-bind-try /run/user/\$uid/pulse /run/user/\$uid/pulse"
"--dev-bind / /host"
"--ro-bind-try /usr/share/themes /usr/local/share/themes"
"--ro-bind-try /usr/share/icons /usr/local/share/icons"
"--ro-bind-try /usr/share/fonts /usr/local/share/fonts"
"--ro-bind-try $(realpath /etc/localtime) /etc/localtime"
"--dev-bind-try /etc/resolv.conf /etc/resolv.conf"
"--dev-bind-try /home /home"
)
EXTRA_ARGS=(
"--hostname Amber-CE-Bookworm"
"--unshare-uts"
# "--cap-add CAP_SYS_ADMIN"
)
EXTRA_SCRIPTS=(
cursor_theme_dir_integration
)
##########合成bwrap 4. 合成并执行指令
# 逐一添加到 EXEC_COMMAND
for var in "${ENV_VARS[@]}"; do
add_env_var $var
done
for var in "${BIND_DIRS[@]}"; do
add_command "$var"
done
for var in "${EXTRA_ARGS[@]}"; do
add_command "$var"
done
for var in "${EXTRA_SCRIPTS[@]}"; do
$var
done
# 添加最终的 bash 命令
add_command "bash -c \"/usr/bin/bwrap ${container_command}\""
# 输出完整的 EXEC_COMMAND 以查看
# echo "${EXEC_COMMAND}"
# 注意: 实际执行时,请确保所有变量(如 $uid, $chrootEnvPath 等)都已正确定义
eval ${EXEC_COMMAND}

View File

@@ -1,77 +0,0 @@
#!/bin/bash
if [ "$(id -u)" != "0" ]; then
echo "当前用户不是 root 用户,退出"
exit
fi
curdir=`realpath $0`
parent_dir=`dirname $curdir`
pparent_dir=`dirname $parent_dir`
ppparent_dir=`dirname $pparent_dir`
PKGNAME=`basename $ppparent_dir`
export PACKAGE_NAME=$PKGNAME
chrootEnvPath=/opt/apps/$PKGNAME/files/bookworm-env
if [ ! -e $chrootEnvPath/finish.flag ];then
if [ "$(id -u)" = "0" ]; then
`dirname $chrootEnvPath`/bin/bookworm-init
else
pkexec `dirname $chrootEnvPath`/bin/bookworm-init
fi
fi
non_root_user=$(who | awk '{print $1}' | head -n 1)
uid=$(id -u $non_root_user)
#### This part is for args pharm
if [ "$1" = "" ];then
container_command="bash"
else
container_command="$1"
shift
for arg in "$@"; do
arg="$(echo "${arg}x" | sed 's|'\''|'\'\\\\\'\''|g')"
arg="${arg%x}"
container_command="${container_command} '${arg}'"
done
fi
bwrap --dev-bind / / \
bwrap \
--setenv LANG "$LANG" \
--setenv LC_COLLATE "$LC_COLLATE" \
--setenv LC_CTYPE "$LC_CTYPE" \
--setenv LC_MONETARY "$LC_MONETARY" \
--setenv LC_MESSAGES "$LC_MESSAGES" \
--setenv LC_NUMERIC "$LC_NUMERIC" \
--setenv LC_TIME "$LC_TIME" \
--setenv LC_ALL "$LC_ALL" \
--setenv PULSE_SERVER /run/user/$uid/pulse/native \
--setenv PATH /flamescion-container-tools/bin-override:$PATH \
--dev-bind $chrootEnvPath/ / \
--dev-bind /media /media \
--dev-bind /tmp /tmp \
--dev /dev \
--dev-bind /dev/dri /dev/dri \
--proc /proc \
--dev-bind /sys /sys \
--dev-bind /run /run \
--dev-bind-try /run/user/$uid/pulse /run/user/$uid/pulse \
--dev-bind / /host \
--ro-bind /usr/share/themes /usr/local/share/themes \
--ro-bind /usr/share/icons /usr/local/share/icons \
--ro-bind /usr/share/fonts /usr/local/share/fonts \
--hostname bookworm-compatibility-mode \
--unshare-uts \
--dev-bind /etc/resolv.conf /etc/resolv.conf \
--cap-add CAP_SYS_ADMIN \
--dev-bind /home /home \
bash -c "${container_command}"

View File

@@ -14,34 +14,34 @@ fi
if [ "$1" = "amd64" ] || [ "$1" = "x64" ];then if [ "$1" = "amd64" ] || [ "$1" = "x64" ];then
ARCH="amd64" ARCH="amd64"
ARCH_ANOTHERWAY="x64" ARCH_ANOTHERWAY="x64"
cd "`dirname $0`"
sudo debootstrap --include=libnotify-bin,apt-utils,bash-completion,bc,curl,dialog,diffutils,findutils,gnupg2,less,libnss-myhostname,libvte-common,lsof,ncurses-base,passwd,pinentry-curses,procps,sudo,time,util-linux,wget,libegl1-mesa,libgl1-mesa-glx,libvulkan1,mesa-vulkan-drivers,locales,libglib2.0-bin --arch=${ARCH} bookworm ./ace-env https://mirrors.ustc.edu.cn/debian/
elif [ "$1" = "arm64" ] || [ "$1" = "arm" ];then elif [ "$1" = "arm64" ] || [ "$1" = "arm" ];then
ARCH="arm64" ARCH="arm64"
ARCH_ANOTHERWAY="arm64" ARCH_ANOTHERWAY="arm64"
else
echo "Invalid architecture! Exit"
exit 1
fi
cd "`dirname $0`" cd "`dirname $0`"
sudo debootstrap --arch=${ARCH} bookworm ./bookworm-env https://mirrors.ustc.edu.cn/debian/ sudo debootstrap --include=libnotify-bin,apt-utils,bash-completion,bc,curl,dialog,diffutils,findutils,gnupg2,less,libnss-myhostname,libvte-common,lsof,ncurses-base,passwd,pinentry-curses,procps,sudo,time,util-linux,wget,libegl1-mesa,libgl1-mesa-glx,libvulkan1,mesa-vulkan-drivers,locales,libglib2.0-bin --arch=${ARCH} bookworm ./ace-env https://mirrors.ustc.edu.cn/debian/
elif [ "$1" = "loong" ] || [ "$1" = "loong64" ];then
pushd bookworm-env ARCH="loong64"
ARCH_ANOTHERWAY="loong64"
sudo debootstrap --no-check-gpg --include=libnotify-bin,apt-utils,bash-completion,bc,curl,dialog,diffutils,findutils,gnupg2,less,libnss-myhostname,libvte-common,lsof,ncurses-base,passwd,pinentry-curses,procps,sudo,time,util-linux,wget,libegl1,libgl1-mesa-dri,libvulkan1,mesa-vulkan-drivers,locales,libglib2.0-bin --arch=${ARCH} --variant=buildd sid ./ace-env http://lauosc.cn:11232/debian
else
echo "Need to point out architecture"
exit
fi
gitee_api_url="https://gitee.com/api/v5/repos/amber-compatability-environment/ace-host-integration/releases/latest" sudo rm -rf ace-env/var/cache/apt/archives/*.deb
resp="$(curl -s $gitee_api_url)"
VERSION_GITEE="$(jq -r '.tag_name' <<<$resp | sed "s/.*V\([^_]*\).*/\1/g")"
echo "$VERSION_GITEE"
sudo wget https://gitee.com/amber-compatability-environment/ace-host-integration/releases/download/${VERSION_GITEE}/ace-host-integration_${VERSION_GITEE}_all.deb sudo tar -I 'xz -T0' -cvf ace-env.tar.xz ace-env/*
sudo rm -rf ace-env
pushd flamescion-container-tools/ace-host-integration
dpkg-deb -Z xz -b . ../ace-host-integration.deb
popd popd
sudo systemd-nspawn -D bookworm-env apt install /ace-host-integration_${VERSION_GITEE}_all.deb -y
sudo rm bookworm-env/ace-host-integration_${VERSION_GITEE}_all.deb
sudo rm -rf bookworm-env/var/cache/apt/archives/*.deb
sudo tar -I 'xz -T0' -cvf bookworm-env.tar.xz bookworm-env/*
sudo rm -rf bookworm-env

View File

@@ -0,0 +1,8 @@
Package: ace-host-integration
Version: 1.2.1
Section: misc
Priority: optional
Depends: bash
Maintainer: shenmo <shenmo@spark-app.store>
Architecture: all
Description: ace-host-integration

View File

@@ -0,0 +1,4 @@
#!/bin/bash
if [ "${1}" = "triggered" ];then
/opt/ace-host-integration/ace-host-integration
fi

View File

@@ -0,0 +1,2 @@
interest-noawait /opt/apps
interest-noawait /usr/share/applications

View File

@@ -0,0 +1,87 @@
#!/bin/bash
# ===== Log =====
# log.info xxx
# log.warn xxx
# log.info xxx
# log.debug xxx
# 带颜色的echo
function log.color_output() {
local color=$1
shift 1
echo >&2 -e "\033[${color}m$@\033[0m"
return 0
}
# Log is named without prefix "utils." for convenience
# Usage: log.log <level> ...content
function log.log() {
if [[ $# < 2 ]]; then
return -1
fi
local level=$1
shift 1
case $level in
error) log.color_output "0;31" "[ERROR] $@" ;;
warn) log.color_output "1;33" "[WARN] $@" ;;
info) log.color_output "1;37" "[INFO] $@" ;;
debug) log.color_output "1;30" "[DEBUG] $@" ;;
esac
return 0
}
function log.error() { log.log "error" "$@"; }
function log.warn() { log.log "warn" $@; }
function log.info() { log.log "info" $@; }
function log.debug() { log.log "debug" $@; }
function do_integrate(){
local file=$1
if [ -f "$file" ]; then
exec_line=$(grep "^Exec=" "$file")
# 检查是否是bookworm-run
if [[ $exec_line != Exec=bookworm-run* ]]; then
echo "$file is detected. Processing host system integration..."
sed -i 's|^Exec=\(.*\)|Exec=bookworm-run \1|' "$file"
sed -i '/^TryExec=/d' "$file"
sed -i '/^Name=/ s/$/ (Bookworm)/' "$file"
sed -i "/^Name\[${LANGUAGE}\]=/ s/\$/ (Bookworm)/" "$file"
icon_line=$(grep "^Icon=" "$file")
if [[ "$icon_line" == "Icon=/"* ]]; then
# 如果Icon=后面接的是/,则添加前缀
sed -i 's|^Icon=/|Icon=/opt/apps/amber-ce-bookworm/files/bookworm-env/|' "$file"
fi
fi
fi
chmod +x $file
}
if [ "${IS_ACE_ENV}" != "" ];then
if [ -e /opt/apps/ ];then
for app_dir in $(ls /opt/apps/); do
for file in /opt/apps/$app_dir/entries/applications/*.desktop;do
do_integrate $file
done
done
else
log.warn "No /opt/apps directory. Skip..."
fi
for file in /usr/share/applications/*.desktop; do
do_integrate $file
done
find "/usr/share/applications/" -xtype l -delete
else
log.error "DO NOT run me on host OS"
fi

View File

@@ -0,0 +1,175 @@
#!/bin/bash
LANGUAGE=en_US
#############################################################
# ===== Log =====
# log.info xxx
# log.warn xxx
# log.info xxx
# log.debug xxx
# 带颜色的echo
function log.color_output() {
local color=$1
shift 1
echo >&2 -e "\033[${color}m$@\033[0m"
return 0
}
# Log is named without prefix "utils." for convenience
# Usage: log.log <level> ...content
function log.log() {
if [[ $# < 2 ]]; then
return -1
fi
local level=$1
shift 1
case $level in
error) log.color_output "0;31" "[ERROR] $@" ;;
warn) log.color_output "1;33" "[WARN] $@" ;;
info) log.color_output "1;37" "[INFO] $@" ;;
debug) log.color_output "1;30" "[DEBUG] $@" ;;
esac
return 0
}
function log.error() { log.log "error" "$@"; }
function log.warn() { log.log "warn" $@; }
function log.info() { log.log "info" $@; }
function log.debug() { log.log "debug" $@; }
# 发送通知
function notify-send() {
# Detect user using the display
local user=$(who | awk '{print $1}' | head -n 1)
# Detect uid of the user
local uid=$(id -u $user)
log.debug "User is $user and the uid of it is $uid"
sudo -u $user DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/${uid}/bus notify-send $@
}
# 检测网络链接畅通
function network-check()
{
# 超时时间
local timeout=15
# 目标网站
local target=www.baidu.com
# 获取响应状态码
local ret_code=`curl -I -s --connect-timeout ${timeout} ${target} -w %{http_code} | tail -n1`
if [ "x$ret_code" = "x200" ] ; then
# 网络畅通
return 0
else
# 网络不畅通
return 1
fi
}
###############################################################
if [ "$(id -u)" != "0" ]; then
log.error "Nope we need root to run"
exit -1
fi
network-check
if [ $? -ne 0 ] ; then
log.error "NETWORK_FAIL"
exit -1
fi
# The code above is modified from https://blog.csdn.net/yaxuan88521/article/details/120516298
if [ $(which aptss) ];then
APT_COMMAND=aptss
/usr/bin/apt update
log.info "Using aptss to operate the upgrade process since we detect it."
elif [ -e /usr/bin/apt ];then
APT_COMMAND=/usr/bin/apt
log.info "Using apt to operate the upgrade process."
else
log.error "Nope we support debian only now"
exit -1
fi
${APT_COMMAND} clean
${APT_COMMAND} update
updatetext=`${APT_COMMAND} update 2>&1`
until [ "`echo $updatetext | grep E: `" = "" ];do
log.info "UPDATE_ERROR_AND_WAIT_15_SEC"
sleep 15
updatetext=`${APT_COMMAND} update 2>&1`
done
isupdate=`echo ${updatetext: -5}`
if [ "$isupdate" = "date." ] ; then
log.info "No need to upgrade. exit"
exit 0
fi
## 从这里开始,只有检测到了更新才会进行
update_app_number=`echo ${updatetext%package*} #从右向左截取第一个 src 后的字符串`
update_app_number=`echo ${update_app_number##*information...}`
# 获取用户选择的要更新的应用
PKG_LIST="$(env LANGUAGE=en_US /usr/bin/apt list --upgradable | awk NR\>1)"
# 指定分隔符为 \n
IFS_OLD="$IFS"
IFS=$'\n'
for line in $PKG_LIST ; do
PKG_NAME=$(echo $line | awk -F ' ' '{print $1}')
PKG_NEW_VER=$(echo $line | awk -F ' ' '{print $2}')
PKG_CUR_VER=$(echo $line | awk -F ' ' '{print $3}')
dpkg --compare-versions $PKG_NEW_VER le $PKG_CUR_VER
if [ $? -eq 0 ] ; then
let update_app_number=$update_app_number-1
continue
fi
## 检测是否是 hold 状态
PKG_STA=$(dpkg-query -W -f='${db:Status-Want}' $PKG_NAME)
if [ "$PKG_STA" = "hold" ] ; then
let update_app_number=$update_app_number-1
fi
done
# 还原分隔符
IFS="$IFS_OLD"
if [ $update_app_number -le 0 ] ; then
log.info "No package need to upgrade after ignoring those holded ones. exit"
exit 0
fi
## 如果都是hold或者版本一致的那就直接退出否则把剩余的给提醒了
user=$(who | awk '{print $1}' | head -n 1)
log.info "ACE Bookworm环境中有 $update_app_number 个软件包可升级,正在自动升级"
notify-send -a amber-ce-bookworm "ACE兼容环境" "ACE环境中有${update_app_number}个软件包可升级,执行自动升级..."
${APT_COMMAND} clean
${APT_COMMAND} full-upgrade -y
${APT_COMMAND} clean
notify-send -a amber-ce-bookworm "ACE兼容环境" "自动升级结束"

View File

@@ -0,0 +1,3 @@
#!/bin/bash
### We do not want users to install ACE in ACE. Run inside this container instead
${@}

View File

@@ -0,0 +1,2 @@
#!/bin/bash
host-spawn /opt/apps/amber-ce-bookworm/files/bin/bookworm-run-bwrap $@

View File

@@ -0,0 +1,6 @@
#!/bin/bash
if [ "$1" = "open" ];then
xdg-open ${@:2}
else
/usr/bin/gio $@
fi

View File

@@ -0,0 +1,6 @@
#!/bin/bash
if [ "$UID" = "0" ];then
$@
else
host-spawn pkexec bookworm-run $@
fi

View File

@@ -0,0 +1,6 @@
#!/bin/bash
if [ "$UID" = "0" ];then
/usr/bin/sudo $@
else
host-spawn sudo bookworm-run $@
fi

View File

@@ -0,0 +1,128 @@
#!/bin/bash
if [ "$IS_ACE_ENV" != "1" ];then
echo "ONLY RUN ME IN ACE"
exit
fi
printf "ACE: Setting up sudo...\n"
mkdir -p /etc/sudoers.d
# Do not check fqdn when doing sudo, it will not work anyways
if ! grep -q 'Defaults !fqdn' /etc/sudoers.d/sudoers; then
printf "Defaults !fqdn\n" >> /etc/sudoers.d/sudoers
fi
# Ensure passwordless sudo is set up for user
if ! grep -q "\"${container_user_name}\" ALL = (root) NOPASSWD:ALL" /etc/sudoers.d/sudoers; then
printf "\"%s\" ALL = (root) NOPASSWD:ALL\n" "${container_user_name}" >> /etc/sudoers.d/sudoers
fi
printf "ACE: Setting up groups...\n"
# If not existing, ensure we have a group for our user.
if ! grep -q "^${container_user_name}:" /etc/group; then
if ! groupadd --force --gid "${container_user_gid}" "${container_user_name}"; then
# It may occur that we have users with unsupported user name (eg. on LDAP or AD)
# So let's try and force the group creation this way.
printf "%s:x:%s:" "${container_user_name}" "${container_user_gid}" >> /etc/group
fi
fi
printf "ACE: Setting up users...\n"
# Setup kerberos integration with the host
if [ -d "/run/host/var/kerberos" ] &&
[ -d "/etc/krb5.conf.d" ] &&
[ ! -e "/etc/krb5.conf.d/kcm_default_ccache" ]; then
cat << EOF > "/etc/krb5.conf.d/kcm_default_ccache"
# # To disable the KCM credential cache, comment out the following lines.
[libdefaults]
default_ccache_name = KCM:
EOF
fi
# If we have sudo/wheel groups, let's add the user to them.
additional_groups=""
if grep -q "^sudo" /etc/group; then
additional_groups="sudo"
elif grep -q "^wheel" /etc/group; then
additional_groups="wheel"
fi
# Let's add our user to the container. if the user already exists, enforce properties.
#
# In case of AD or LDAP usernames, it is possible we will have a backslach in the name.
# In that case grep would fail, so we replace the backslash with a point to make the regex work.
# shellcheck disable=SC1003
if ! grep -q "^$(printf '%s' "${container_user_name}" | tr '\\' '.'):" /etc/passwd &&
! grep -q "^.*:.*:${container_user_uid}:" /etc/passwd; then
if ! useradd \
--home-dir "${container_user_home}" \
--no-create-home \
--groups "${additional_groups}" \
--shell "${SHELL:-"/bin/bash"}" \
--uid "${container_user_uid}" \
--gid "${container_user_gid}" \
"${container_user_name}"; then
printf "Warning: there was a problem setting up the user\n"
printf "Warning: trying manual addition\n"
printf "%s:x:%s:%s:%s:%s:%s" \
"${container_user_name}" "${container_user_uid}" \
"${container_user_gid}" "${container_user_name}" \
"${container_user_home}" "${SHELL:-"/bin/bash"}" >> /etc/passwd
printf "%s::1::::::" "${container_user_name}" >> /etc/shadow
fi
# Ensure we're not using the specified SHELL. Run it only once, so that future
# user's preferences are not overwritten at each start.
elif [ ! -e /etc/passwd.done ]; then
# This situation is presented when podman or docker already creates the user
# for us inside container. We should modify the user's prepopulated shadowfile
# entry though as per user's active preferences.
# If the user was there with a different username, get that username so
# we can modify it
if ! grep -q "^$(printf '%s' "${container_user_name}" | tr '\\' '.'):" /etc/passwd; then
user_to_modify=$(getent passwd "${container_user_uid}" | cut -d: -f1)
fi
if ! usermod \
--home "${container_user_home}" \
--shell "${SHELL:-"/bin/bash"}" \
--groups "${additional_groups}" \
--uid "${container_user_uid}" \
--gid "${container_user_gid}" \
--login "${container_user_name}" \
"${user_to_modify:-"${container_user_name}"}"; then
printf "Warning: there was a problem setting up the user\n"
fi
touch /etc/passwd.done
fi
# We generate a random password to initialize the entry for the user and root.
temporary_password="$(cat /proc/sys/kernel/random/uuid)"
printf "%s\n%s\n" "${temporary_password}" "${temporary_password}" | passwd root
printf "%s:%s" "${container_user_name}" "${temporary_password}" | chpasswd -e
# Delete password for root and user
printf "%s:" "root" | chpasswd -e
printf "%s:" "${container_user_name}" | chpasswd -e
mkdir -p /usr/share/fonts
mkdir -p /usr/share/icons
mkdir -p /usr/share/themes
## init host-spawn
unlink /flamescion-container-tools/bin-override/host-spawn
ln -sfv /flamescion-container-tools/bin-override/host-spawn-$(uname -m) /flamescion-container-tools/bin-override/host-spawn
## install host-integration
apt install --reinstall /flamescion-container-tools/ace-host-integration.deb
cd /
mkdir -p /flamescion-container-tools/data-dir
cd /flamescion-container-tools/data-dir/
ln -sfv ../../usr/share/applications/ .
ln -sfv ../../usr/share/icons/ .

View File

@@ -1,5 +1,5 @@
{ {
"appid": "cn.flamescion.bookworm-compatibility-mode", "appid": "amber-ce-bookworm",
"name": "cn.flamescion.bookworm-compatibility-mode", "name": "cn.flamescion.bookworm-compatibility-mode",
"version": "12.1.4", "version": "12.1.4",
"arch": ["amd64"], "arch": ["amd64"],

View File

@@ -0,0 +1 @@
../../opt/apps/amber-ce-bookworm/files/bin/ace-bookworm-uninstall-helper

View File

@@ -0,0 +1 @@
../../opt/apps/amber-ce-bookworm/files/bin/ace-bookworm-uninstall-helper-gui

1
src/usr/bin/bookworm-run Symbolic link
View File

@@ -0,0 +1 @@
../../opt/apps/amber-ce-bookworm/files/bin/bookworm-run

View File

@@ -0,0 +1,14 @@
[Unit]
Description=Amber CE Auto upgrade
After=apt-daily.service network.target network-online.target systemd-networkd.service NetworkManager.service connman.service
[Service]
Type=simple
RemainAfterExit=yes
ExecStart=bookworm-run /flamescion-container-tools/ace-upgrader/ace-upgrader
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,17 @@
#!/bin/bash
# Ensure base distro defaults xdg path are set if nothing filed up some
# defaults yet.
if [ -z "$XDG_DATA_DIRS" ]; then
export XDG_DATA_DIRS="/usr/local/share:/usr/share"
fi
# Desktop files (used by desktop environments within both X11 and Wayland) are
# looked for in XDG_DATA_DIRS; make sure it includes the relevant directory for ACE
ACE_path="/opt/apps/amber-ce-bookworm/files/ace-env/flamescion-container-tools/data-dir/"
if [ -n "${XDG_DATA_DIRS##*${ACE_path}}" ] && [ -n "${XDG_DATA_DIRS##*${ACE_path}:*}" ]; then
export XDG_DATA_DIRS="${ACE_path}:${XDG_DATA_DIRS}"
fi

View File

@@ -0,0 +1,11 @@
[Desktop Entry]
Version=1.0
Name=ACE Bookworm Software Uninstaller
Name[zh_CN]=ACE Bookworm软件卸载器
Comment=用于卸载ACE容器的应用
Type=Application
Exec=/opt/apps/amber-ce-bookworm/files/bin/ace-bookworm-uninstall-helper-gui
Icon=ACE-bookworm-uninstaller
Categories=System
# Generated from the DesktopGenerater component of the z-Tools toolkit

View File

@@ -0,0 +1,11 @@
[Desktop Entry]
Categories=utils
Exec=bookworm-run %U
Icon=amber-ce-bookworm
Name=Amber CE Bookworm
Name[zh_CN]=ACE Bookworm兼容环境
Keywords=BCM,ACE,ace,mode
StartupNotify=true
Type=Application
Terminal=true
Categories=System

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
<vendor>amber-ce-bookworm.ace-uninstaller</vendor>
<icon_name>x-package-repository</icon_name>
<action id="amber-ce-bookworm.ace-uninstaller">
<description>运行amber-ce-bookworm.ace-uninstaller需要权限</description>
<message>要使用amber-ce-bookworm.ace-uninstaller需要权限</message>
<defaults>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.exec.path">/opt/apps/amber-ce-bookworm/files/bin/ace-bookworm-uninstall-helper-gui</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
</action>
</policyconfig>

View File

@@ -8,3 +8,5 @@ rm -rf /var/cache/apt/
rm -rf /var/lib/aptss/lists/* rm -rf /var/lib/aptss/lists/*
rm -rf /usr/share/doc rm -rf /usr/share/doc
#apt install ace-integration in init
#tools只保留gio hostspawn和xdg-open