Skip to content

Latest commit

 

History

History
157 lines (106 loc) · 10.2 KB

File metadata and controls

157 lines (106 loc) · 10.2 KB

中文 | English | 返回项目主页

scripts 目录说明

本目录存放 RootFS 构建期间使用的安装器、写入 RootFS 的维护工具以及 systemd 服务模板。多数文件由 Dockerfile 或 GitHub Actions 调用;运行前请先确认脚本应在 Linux 容器还是构建环境中执行。

文件一览

文件 运行位置 作用
install-desktop.shdesktops/*.sh RootFS 构建环境 按稳定 slug 分发桌面 profile,并维护软件包集合和桌面专属环境变量。
configure-desktop.sh RootFS 构建环境 写入桌面/显示后端配置,调用 profile 环境配置并按需安装统一自启动服务。
start-desktop-session.sh Linux 容器 根据 /etc/droidspaces-desktop.conf 启动实际桌面会话。
install-mesa.sh ARM64 Linux 容器 安装最新版 Android 容器专用 Mesa 和 MediaCodec VA-API 驱动,并锁定 Mesa 包。
install-anland-kde.sh ARM64 Linux 容器 安装 Anland patched KWin/Xwayland Release 包,并锁定相关包。
install-anland-gnome.sh ARM64 Debian/Ubuntu 容器 安装 Anland patched Mutter/Xwayland Release 包,并锁定相关包。
install-anland-desktop.sh RootFS 构建环境 根据桌面 slug 分发到 KDE 或 GNOME Anland 安装器。
lib/anland-build.sh RootFS 构建宿主 为 native/QEMU 构建统一解析 Anland 包族、Release tag 和 revision。
install-usb-manager.sh Linux 容器 安装 Droidspaces USB Manager、发行版依赖、菜单入口和用户权限。
systemd257.sh RootFS 构建环境 在需要时安装由包管理器管控的 systemd 257 完整包族,供旧 Android 内核使用。
download-firmware Debian/Ubuntu 容器 安装并解压 linux-firmware 中的 .zst 固件。
nosnap.sh Ubuntu RootFS 构建环境 移除 Snap、阻止其重新安装,并配置传统 deb 软件源。
bashrc.sh Linux 用户 shell 提供 Docker 快捷命令、温度查看和 SSH 文件传输等辅助函数。
start/desktop-session.service Linux 容器的 systemd 通过统一入口自动启动所选桌面会话。
binfmt/* Linux 容器的 systemd/内核 检查并挂载 binfmt_misc,为 QEMU 跨架构执行做准备。

Mesa 安装器

install-mesa.shlfdevs/mesa-for-android-container 的最新 GitHub Release 选择当前发行版对应的 ARM64 Mesa 资产,并从 Re-s/droidspaces-media-decode 的最新稳定 Release 安装 msm_drm_drv_video.so。支持 Debian 13、Ubuntu 24.04/25.10/26.04、Fedora 43/44 和 Arch Linux。媒体解码驱动按发行版安装到 libva 的默认驱动目录:Debian/Ubuntu 为 /usr/lib/aarch64-linux-gnu/dri,Fedora 为 /usr/lib64/dri,Arch Linux 为 /usr/lib/dri

安装器会严格检查 Release tag、资产名和官方下载地址。使用镜像源时,Mesa 归档会根据 GitHub Release API 公布的 SHA-256 digest 校验;媒体解码驱动在所有下载源下都会校验 Release API digest、上游 SHA256SUMS 及资产大小。下载支持断点续传,临时文件在退出时自动清理。

从仓库根目录交互运行:

sudo ./scripts/install-mesa.sh

未指定参数时,脚本会测试三个下载源并提示选择。也可以直接指定来源,适合无人值守构建:

sudo ./scripts/install-mesa.sh --1  # GitHub
sudo ./scripts/install-mesa.sh --2  # gh-proxy.com
sudo ./scripts/install-mesa.sh --3  # ghproxy.net

三个来源选项互斥,并同时作用于 Mesa 与媒体解码驱动下载。-1-2-3 是对应的短参数,--help 可查看内置帮助。第三方源仍需访问 api.github.com 取得可信元数据,并需要 jqsha256sum;下载由 curlwget 完成。

安装完成后,脚本按发行版写入持久锁定:

发行版 锁定位置与机制
Debian/Ubuntu /etc/apt/preferences.d/hold-anland-packagePin-Priority: -1
Fedora /etc/dnf/dnf.conf 中脚本管理的 exclude
Arch /etc/pacman.conf 中脚本管理的 IgnorePkg

锁定范围仅根据归档中实际安装的 Mesa 包生成。KWin/Xwayland 与 Mutter/Xwayland 分别由 install-anland-kde.shinstall-anland-gnome.sh 锁定。托管配置可重复运行,不会不断追加相同块;已有的非托管配置会保留。

新增桌面 profile

桌面名称、发行版能力和显示后端矩阵集中在 lib/desktop-config.sh。新增桌面时:

  1. desktop_normalizedesktop_label 和支持矩阵中登记稳定 slug。
  2. 新建可执行的 desktops/<slug>.sh,默认操作按 /etc/os-release 安装软件包,并实现 configure-environment <backend> 配置桌面专属环境变量。
  3. start-desktop-session.sh 添加会话命令;install-desktop.sh 会自动发现合法 slug 对应的可执行 profile。
  4. 在中英文工作流入口的 desktop 下拉中加入显示名称。

七个 Dockerfile 和核心工作流已经使用通用 profile 接口,普通 X11 桌面无需复制 Dockerfile。依赖 patched Wayland 包的 profile 还需在 lib/anland-build.shanland_package_family 中登记包族。

Anland KDE 安装器

install-anland-kde.sh 默认从 Goldzxcbug/droidspaces-package 的固定滚动 Release anland-kde-packages 读取 anland-kde-manifest,为 Debian 13、Ubuntu 26.04、Fedora 43/44 或 Arch Linux ARM64 安装匹配版本的 patched KWin/Xwayland 包。

sudo ./scripts/install-anland-kde.sh

它同样支持 --1--2--3 选择 GitHub、gh-proxy.comghproxy.net;省略时测速后交互选择。镜像下载的清单与归档均使用 GitHub API digest 校验。脚本按系统 locale 输出中文或英文,并通过 APT hold、DNF exclude 或 Pacman IgnorePkg 防止系统更新覆盖安装结果。

安装公开 Fork 发布的包时只需覆盖仓库;Fork 必须提供固定标签 anland-kde-packages

sudo ANLAND_RELEASE_REPOSITORY=owner/repository \
  ./scripts/install-anland-kde.sh --1

Anland 宿主模块、App、SELinux、绑定挂载和 Droidspaces 权限仍需按项目主页的 Wayland 和 Anland 配置完成。

Anland GNOME 安装器

install-anland-gnome.sh 默认从固定滚动 Release anland-gnome-packages 读取 anland-gnome-manifest,为 Debian 13 或 Ubuntu 26.04 ARM64 安装 patched Mutter/Xwayland 运行时包,并跳过归档中的测试/开发包。下载源选择、镜像 digest 校验和命令行参数与 KDE 安装器一致;安装结果通过 APT hold 防止升级覆盖。

sudo ./scripts/install-anland-gnome.sh

使用公开 Fork 的包时同时覆盖 GNOME 仓库变量:

sudo ANLAND_RELEASE_REPOSITORY=owner/repository \
  ./scripts/install-anland-gnome.sh --1

USB Manager 安装器

install-usb-manager.sh 支持 Debian/Ubuntu、Fedora 和 Arch,自动安装 PyQt5、ADB、udev、NTFS、exFAT 等依赖,并安装 usb-managerusb-passthroughusb-storage-passthrough 命令。

sudo ./scripts/install-usb-manager.sh --user "$USER"

--user USER 指定获得 USB 管理权限和桌面入口的用户。省略时依次尝试 SUDO_USER、当前登录用户和第一个普通用户。开发或离线测试可以通过 --source DIR 使用本地 Droidspaces-USB-Manager 源码目录;运行 --help 查看完整参数。

在普通 Arch 系统上,安装器会照常安装 systemd 和其他依赖。若检测到 /etc/droidspaces-systemd257,重复运行时会保留 Pacman 的 IgnorePkg 锁定,不再把 systemd 作为显式安装目标;PyQt5、ADB、NTFS、exFAT 等 USB Manager 依赖仍会正常补齐。

RootFS 导入 Droidspaces 时必须开启硬件访问,否则容器无法看到 /sys/bus/usb/sys/bus/scsi

systemd 257 兼容脚本

systemd257.sh 供 Dockerfile 在 enable_systemd257=true 时调用。它检查已安装的 systemd 主版本:257 或更低版本直接跳过,更高版本则从 Goldzxcbug/droidspaces-package 的冻结兼容 Release systemd257-packages 安装对应发行版的完整原生包族,并锁定 systemd 相关包。新包先发布到包含源码版本和仓库提交的不可变标签;RootFS 只有在该 Release 完整发布后,才会一次性更新标签、各平台 SHA-256、预期包数和包仓库提交。

sudo ./scripts/systemd257.sh

这是面向旧 Android 内核的实验性兼容步骤。生成 RootFS 后应实际验证 systemd、D-Bus、udev、网络和桌面会话。

固件工具

download-firmware 会被复制为 Debian 13 和 Ubuntu 24/25/26 RootFS 中的 /usr/local/bin/download-firmware,但不会自动执行。需要时在容器中运行:

sudo download-firmware

脚本安装 zstdlinux-firmware,解压 /lib/firmware 下的 .zst 文件,并修复指向压缩文件的软链接。成功后创建 /var/lib/.fw-setup-completed;该标记目前不用于跳过重复运行。

其他构建和启动文件

  • nosnap.sh 仅用于 Ubuntu。它停止并卸载 Snap、清理残留、写入 APT pin 防止重新安装,并配置项目所需的传统 deb 来源。它会修改系统软件包和 APT 配置,应在目标 RootFS 或构建层中以 root 运行。
  • start/desktop-session.service 是通用服务模板,通过 start-desktop-session.sh 读取桌面配置,以 RootFS 的 UID 1000 用户启动对应会话,并对异常退出进行限频重启。
  • binfmt/qemu-binfmt-register.sh 与对应 service 检查内核是否支持 binfmt_misc,必要时挂载它;不支持时安全跳过。实际跨架构执行仍需要 QEMU 解释器。
  • bashrc.sh 是追加到用户 shell 环境的辅助配置,不应作为独立安装器执行。

开发检查

修改 shell 脚本后,至少运行语法检查;安装了 ShellCheck 时也应执行静态检查:

bash -n scripts/install-mesa.sh
bash -n scripts/install-anland-kde.sh
bash -n scripts/install-anland-gnome.sh
bash -n scripts/install-usb-manager.sh
shellcheck scripts/install-mesa.sh

涉及软件包安装和锁定配置的改动,还应分别在 APT、DNF 和 Pacman 容器中验证,并重复运行一次检查幂等性。