用于在 Ubuntu 目标机完全离线的场景下安装 zsh + oh-my-zsh + 常用插件/主题 的构建与安装脚本集合。
- 解决“目标机器离线,无法
apt install/git clone”的问题。 - 支持两阶段流程:在线构建离线包,离线机器安装。
- 避免误操作核心系统依赖链(例如
libc6)。
- 不做跨发行版(如 Debian/CentOS)通用安装器。
- 不保证所有 Ubuntu 组合都零风险,仍需做目标环境验收。
- 不在本仓库提交大体积构建产物(
.tar.gz/.deb)。
- 在线阶段:在可联网 Ubuntu 机器上运行
prepare_online_bundle.sh构建离线包。 - 离线阶段:将离线包拷贝到目标机器,执行
install_offline.sh完成安装。
仓库 Release 中提供了预构建离线包(当前提供 amd64):
- Ubuntu 24.04 (
noble) - Ubuntu 22.04 (
jammy) - Ubuntu 20.04 (
focal)
使用规则:
- 目标机与离线包必须匹配:
Ubuntu codename + arch(例如jammy + amd64)。 - 匹配时可以直接下载对应
.tar.gz到目标机离线安装。 - 不匹配时(版本/架构/源环境不同),请按本项目脚本自行构建目标机专用离线包。
建议先做完整性校验(Release 中同时提供 SHA256SUMS):
sha256sum -c SHA256SUMSbash collect_target_params.sh示例输出:
./prepare_online_bundle.sh --target-codename jammy --target-version 22.04.3 --target-arch amd64
./prepare_online_bundle.sh \
--target-codename jammy \
--target-version 22.04.3 \
--target-arch amd64输出示例:
zsh-offline-bundle-ubuntu22.04.3-jammy-amd64-20260306-173000.tar.gz
脚本会输出带时间戳的阶段日志(如 [INFO] [1/6]),在 apt 刷新、.deb 下载、git clone 等耗时步骤会提示“可能需要几分钟”;若网络不稳定,也会给出重试/等待提示。
mkdir -p ~/zsh-offline
tar -xzf zsh-offline-bundle-ubuntu22.04.3-jammy-amd64-*.tar.gz -C ~/zsh-offline
cd ~/zsh-offline
chmod +x install_offline.sh
./install_offline.sh- 在线构建目标参数必须与离线机一致:
codename、version、arch。 - 在线机器建议使用 Ubuntu(脚本依赖
apt-get/apt-cache/dpkg)。 - 脚本只解析
zsh直接依赖,并显式排除libc6。 powerlevel10k默认不启用,避免离线首启卡在fetching gitstatusd。
- 预构建离线包仅作为便利分发,不保证适配所有目标环境(特别是深度定制系统、锁版本、held packages、混合源环境)。
- 预构建包中的
.deb版本固定在构建时刻;安全更新和后续维护由使用者自行负责。 - 在生产环境使用前,请先在同版本测试环境完成验证,并自行承担变更风险。
collect_target_params.sh- 在目标机读取
codename/version/arch,输出在线构建命令。
- 在目标机读取
prepare_online_bundle.sh- 从零构建 bundle:下载目标
.deb、拉取 oh-my-zsh 及插件/主题源码归档、打包输出。
- 从零构建 bundle:下载目标
fill_debs_on_ubuntu.sh- 在已有
bundle/archives时仅刷新.deb并重打包。
- 在已有
offline/install_offline.sh- 离线安装入口,安装 zsh、部署 oh-my-zsh 和插件,写入
.zshrc,尝试chsh。
- 离线安装入口,安装 zsh、部署 oh-my-zsh 和插件,写入
offline/zshrc.template- 默认 shell 配置模板。
--target-codename:如jammy/noble--target-version:如22.04.3/24.04--target-arch:如amd64/arm64--target-mirror/--target-security-mirror:自定义源--target-components:默认main universe
离线安装脚本支持:
TARGET_USER=<username>TARGET_HOME=/path/to/homeSKIP_CHSH=1
getent passwd "$USER" | cut -d: -f7
zsh --version
ls -la ~/.zshrc ~/.oh-my-zsh- 本仓库脚本与文档使用 MIT 许可,见
LICENSE。 - 构建产物内会包含第三方项目源码归档与 Ubuntu
.deb包,它们不适用本仓库 MIT,需遵循各自许可条款。 - 第三方来源列表见
THIRD_PARTY.md。
欢迎 PR/Issue。提交前至少运行:
bash -n collect_target_params.sh prepare_online_bundle.sh fill_debs_on_ubuntu.sh offline/install_offline.sh仓库已配置 GitHub Actions CI,PR 时会自动执行语法检查、shellcheck 和基础 smoke 检查。
更多规范见 CONTRIBUTING.md。