概览
JTermOS 将裁剪后的 Linux 内核、BusyBox 根文件系统、jlink 精简 JRE 与 squashfs 只读根文件系统 打包为单个 ISO 镜像。系统启动后 Java 应用自动运行,崩溃后在 5 秒内自动重启, 无需完整桌面发行版,也无需 X11 / Wayland。
整个构建流程由编号脚本编排,从内核编译、BusyBox 组装、rootfs 覆盖、JRE 裁剪、 库依赖扫描、服务安装到镜像打包,全部可复现、可审计。
核心亮点
极小镜像
ISO 约 28 MB,rootfs.squashfs 约 30–60 MB。squashfs 压缩只读根,体积与一致性兼得。
快速启动
从 GRUB 到可用 shell 不足 5 秒。内核裁剪 + 精简 init + 静态 BusyBox 共同压缩启动路径。
Java 一等公民
预置 Eclipse Temurin OpenJDK 17,通过 jlink 定制 JRE,仅保留应用实际依赖的模块,约 40 MB。
运行库完整
预置 libc、libm、libpthread、libdl、libjli、libjava、libnio、libzip、libnss 等,避免运行期缺库。
自启动与自恢复
Java 应用开机自动拉起,异常退出后 5 秒内自动重启,适合无人值守终端设备。
只读根文件系统
squashfs 提升安全性与一致性,运行时数据可放 tmpfs 或 overlay,重启即恢复出厂状态。
双引导支持
GRUB 2.06 同时支持 BIOS 与传统 UEFI 设备,U 盘启动开箱即用。
内置信息工具
预装 fastfetch 与 neofetch,进入 shell 即可快速查看系统与硬件状态。
组件版本
| 组件 | 版本 / 选型 | 说明 |
|---|---|---|
| 引导加载器 | GRUB 2.06 | BIOS + EFI 双引导 |
| Linux 内核 | 5.15 LTS / 6.6 | 增量配置裁剪 |
| 根文件系统 | BusyBox 静态 | 约 250 KB |
| Java 运行时 | Temurin OpenJDK 17 | jlink 定制 JRE |
| 根文件系统镜像 | squashfs | 只读压缩 |
| 镜像格式 | ISO | QEMU 直接启动 |
快速开始
① QEMU 直接运行
# 从 Release 页面下载 jtermos.iso 后执行 qemu-system-x86_64 -m 512M -cdrom jtermos.iso -nographic # 启动后按回车进入 shell,输入 fastfetch 查看系统信息
② 从源码构建
git clone https://github.com/lishaoyang459353850/jtermos.git cd jtermos ./build.sh all
③ 写入 U 盘并在物理机启动
# 将 /dev/sdX 替换为你的 U 盘设备,注意不要写错盘符 sudo dd if=jtermos.iso of=/dev/sdX bs=4M status=progress oflag=sync
提示:Secure Boot 需关闭或自行签名;BIOS 与传统 UEFI 均可引导。
性能指标
适用场景
嵌入式 Java 终端
在资源受限硬件上运行 Java 应用,无需引入完整桌面发行版的重量。
快速演示环境
把自定义 Java 应用打进 ISO,插上 U 盘或通过 QEMU 即可现场演示。
构建学习与教学
内核裁剪、BusyBox、jlink、squashfs、GRUB 全流程脚本化,是完整的实战案例。
CI/CD Java 沙箱
用最小 JRE 构建隔离的 Java 执行环境,启动快、依赖少、易清理。
已知限制
- 默认根文件系统为只读 squashfs,持久化写入需配置 overlay 或 tmpfs。
- jlink 定制 JRE 仅包含常用模块;应用若依赖额外模块,需用
jdeps分析后重新生成。 - 物理机兼容性依赖硬件;缺少驱动时需在内核配置中追加对应选项。
- Secure Boot 未签名,需在固件中关闭或导入自定义密钥。
- 生产环境请修改默认登录配置,并启用必要的安全策略。
项目结构
jtermos/ ├── build.sh # 一键构建总入口 ├── configs/ │ ├── jterm-kernel.fragment # 内核增量配置 │ ├── genimage.cfg # 分区/镜像定义 │ ├── grub.cfg # GRUB 启动菜单 │ └── boot.cmd # U-Boot 备选启动脚本 ├── scripts/ │ ├── 00-env.sh # 环境变量 │ ├── 10-kernel.sh # 编译内核 │ ├── 20-busybox.sh # 编译 BusyBox │ ├── 30-rootfs.sh # 组装 rootfs │ ├── 40-jlink.sh # jlink 裁剪 JRE │ ├── 50-copy-libs.sh # ldd/readelf 扫库拷贝 │ ├── 60-services.sh # 安装 init/服务脚本 │ ├── 70-image.sh # 打 squashfs + ISO │ └── grub-install.sh # 生成 EFI GRUB ├── rootfs-overlay/ # 直接覆盖到 rootfs └── app/ └── app.jar # 放你的 Java 应用