On Mon, Dec 14, 2020 at 03:08:14PM +0800, Wu Fengguang wrote:
文档有点长,是不是说明自动化做得不够好? 能放进脚本里去自动跑的,就不用放在文档里麻烦用户手工一条条命令敲了。
我了解的文档要求是:用户可以通过文档按步骤手动制作出镜像包。 并且在步骤之后也注明了可以使用工具来完成。 5) {compass-ci} 为用户提供了可将 '.tar.xz' 格式的 docker 镜像包转换为 rootfs 的工具。 ```bash ./{compass-ci}/container/docker-rootfs/run openEuler-docker.aarch64.tar.xz /tmp/openeuler-rootfs-20.03 ``` 需要将详细过程去掉吗?
Thanks, Chenglong
Thanks, Fengguang
On Mon, Dec 14, 2020 at 03:02:02PM +0800, Wang Chenglong wrote:
Signed-off-by: Wang Chenglong 18509160991@163.com
doc/tutorial.md | 84 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 29 deletions(-)
diff --git a/doc/tutorial.md b/doc/tutorial.md index e6f8491..88544f4 100644 --- a/doc/tutorial.md +++ b/doc/tutorial.md @@ -152,29 +152,34 @@ job yaml 是测试描述和执行的基本单元,以[YAML](http://yaml.org/YAM
- 获取对应 os 版本的 rootfs(以 openEuler 为例)
- 通过 docker 获取 rootfs
- 1) 下载 openEuler 官方提供的 docker 镜像压缩包
```
2) 加载 docker 镜像
```
2) 加载 docker 镜像 ```bash docker load -i openEuler-docker.aarch64 ```
3) 启动 openEuler 容器
3) 启动 openEuler 容器 ```bash
docker run -id openeuler-20.03-lts
docker run -d --name initramfs-docker openeuler-20.03-lts ```
4) 拷贝 docker 的 rootfs
4) 拷贝 docker 的 rootfs ```bash
docker cp -a docker run -d openeuler-20.03-lts:/ openEuler-rootfs
docker cp -a initramfs-docker:/ openEuler-rootfs/ ```
- 通过 qemu.img(qcow2格式)获取 rootfs (openEuler为例)
{compass-ci} 为用户提供了可将 '.tar.xz' 格式的 docker 镜像包转换为 rootfs 的工具。
```bash
./{compass-ci}/container/docker-rootfs/run openEuler-docker.aarch64.tar.xz /tmp/openeuler-rootfs-20.03
```
1) 下载 openEule r官方网站提供的 qcow2 格式镜像
- 通过 qemu.img(qcow2格式)获取 rootfs (openEuler为例)
1) 下载 openEuler 官方网站提供的 qcow2 格式镜像 ```bash wget https://repo.openeuler.org/openEuler-20.03-LTS/virtual_machine_img/aarch64/openEuler-20.03-LTS.aarch64.qcow2.xz ```
@@ -183,45 +188,66 @@ job yaml 是测试描述和执行的基本单元,以[YAML](http://yaml.org/YAM cd {compass-ci}/container/qcow2rootfs ./run openEuler-20.03-LTS.aarch64.qcow2.xz /tmp/openEuler-rootfs ```
- 定制rootfs
1. 使用chroot命令切换到 rootfs (此步骤需要 root 权限)
1. 使用 chroot 命令切换到 rootfs (此步骤需要 root 权限) ```bash chroot openEuler-rootfs ``` 2. 根据个人需要安装并配置服务 a. 修改 root 密码
b. 配置 ssh 服务
c. 检查系统时间
d. 如果使用 docker 制作 osimage 还需要以下操作:
> 1. 安装所需版本内核
> 2. 从 centos 官方网站下载内核rpm包
> 3. 使用 yum 进行安装
> 4. 删除 docker 环境变量文件
- 退出 rootfs,并打包
```bash
cd $rootfs
find . | coip -o -Hnewc |gzip -9 > $os_name.cgz
```
b. 查看软链接 /sbin/init
> 确定系统以systemd方式启动
```bash
ls -l /sbin/init
/sbin/init -> ../lib/systemd/systemd
```
c. 如果使用 docker 制作 osimage 还需以下操作:
> 删除 docker 环境变量文件 /.dockerenv
d. 安装基础软件
> openssh-server (ssh 远程连接服务)
> ntpdate (时间同步)
> cifs-utils (cifs文件系统工具包)
> nfs-utils (nfs文件系统工具包)
> curl (客户端url工具)
```bash
yum -y install openssh-server ntpdate cifs-utils nfs-utils curl
```
e. 如果使用 docker 制作 osimage 还需要以下操作:
> 删除 docker 环境变量文件 /.dockerenv
- 打包rootfs
- cd $rootfs
- find . | coip -o -Hnewc |gzip -9 > $os_name.cgz
- 打包驱动软件/内核源码
- 如果想要使用 {compass-ci} 未提供的内核版本, 可以在 rootfs 中手动安装对应版本内核,并将驱动软件/内核源码进行打包。
- find /lib/modules/* | cpio -o -Hnewc | gzip -9 > /modules-$os_name.cgz
- find /usr/src/kernels/* | cpio -o -Hnewc | gzip -9 > /headers-$os_name.cgz
#### FAQ -1. 日志报错 “Unable to mount root fs on unknown-block” +1. 日志报错 “Unable to mount root fs on unknown-block” - 问题现象 ```bash [ 0.390437] List of all partitions:
[ 0.390806] No filesystem could mount root, tried:
... [ 0.399404] Memory Limit: none [ 0.399749] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]--- ```[ 0.390806] No filesystem could mount root, tried: [ 0.391489] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
- 解决方法
- 1)启动内存不足,增加内存可解决。 2)内核文件权限不足,给予 644 权限。
- 系统运行缓慢
问题现象
打包镜像体积过大,会消耗很大内存
-- 2.23.0