问题描述
由于先前使用ISO镜像文件在VMware中安装openEuler操作系统连不上网(本人目前还未解决20211119),所以准备使用docker镜像在Ubuntu20.04和Windows10上安装。
安装完成之后,当然是习惯性的yum update,但是发现报错
Error: There are no enabled repositories in “/etc/yum.repos.d”, “/etc/yum/repos.d”, “/etc/distro.repos.d”.
没有办法升级,于是上网找解决方案,发现都是说修改/etc/yum.repos.d/openEuler_x86_64.repo,然后输入vim /etc/yum.repos.d/openEuler_x86_64.repo,显示没有vim这个命令
bash: vim: command not found
这好像就陷入了一个矛盾:我需要vim编辑repo文件以使yum能够下载,但是yum又由于没有repo地址导致无法下载vim。这就比较难受了。
问题解决
我解决问题的方式比较粗暴:直接修改tar包镜像文件中的repo文件,使其原始就存在repo地址,这样就不需要后续人为修改了。
步骤:
- 解压官网下的openEuler-docker.x86_64.tar.xz,得到如下图的一系列文件
我们要改的文件/etc/yum.repos.d/openEuler_x86_64.repo就在那个.tar包里,再次解压.tar包,这时候要注意,解压到一个和那一串编码不一样名字的文件夹里,因为那个解压之后,会直接覆盖原始的那个文件夹,而两个文件夹内容不一样,这样是不对的。
得到
- 进入etc/yum.repos.d/(注意不是 /etc 是 etc),然后,从openEuler官网上下载对应版本的repo文件,这是超链接:
然后拷贝到刚才进的etc/yum.repos.d/目录下,
这样就将openEuler中yum的repo设置好了。 - 重新打包新建的这个文件夹,我这里是aaaaa,文件名先随便设一个。
这里打包命令在aaaaa文件夹下执行,应该是tar -cvf ../aaaaa.tar ./
打包的命令是这个,上图是错的
打包完之后,原来的那个tar文件就可以删了,保留刚刚生成这个就好。
4. 根据新生成的tar包的SHA256校验值重命名以及更新文件内容:
- 查看SHA256校验值
sha256sum aaaaa.tar
- 重命名tar文件、文件夹。这里,需要将刚才打包的tar文件、那一长串名字的文件夹重命名:
- 更新两个.json文件、那一长串文件夹中json文件:
将 “那一长串.json”中diff_ids后sha256后面那一串改成步骤4.1生成的SHA256;将 repositories中latest后面改为步骤4,1生成的SHA256校验码;(懒得重新截图了…不改repositories文件)将 manifest.json中Layers后面的文件名改为步骤4.1生成SHA256校验码.tar。
然后删除重命名之前的tar文件和文件夹(openEuler-docker.x86_64.tar,aaaaa.tar和aaaaa文件夹); 将那一长串名字的文件夹中的json文件中id后改为步骤4.1中SHA256校验值。
- 重新将整个文件夹打包成tar文件。然后这样就可以了,在docker中重新导入这个镜像。
然后创建这个镜像的容器并运行,发现yum update可以使用,大功告成!
小结
-
docker在导入tar镜像时,会校验SHA256,因此需要将镜像文件中与SHA256有关的参数重新设置一下;
-
要注意文件夹的层次关系,最后自己打包出来的镜像文件的目录结构应该类似于如下:(layer.tar这个链接应该也是要改的,但是我没有改,导入镜像的时候也没有报错)
-
创建openEuler容器的时候使用命令:
sudo docker run -itd --name openeuler-test --privileged=true openeuler-20.03-lts-sp1:latest /sbin/init
执行容器使用:
sudo docker exec -it openeuler-test /bin/bash