yocto在docker contrainer 中应用的问题和解决的小结

因为有些项目只能在docker中build.

所以,我在pull一个Centos7.5的docker后,添加完用户,改好机器名,重新启动后,安装好yocto。

然后,编译时,遇到一系列问题。

第一个问题是找不到self目录,以后有时间,我会把详细的log放上来。

这个问题,由于没有调试环境,一直没来得及分析。但由于在另外一台实体机上,是可以构建成功的,所以分析是我自己的一些环境变量没有设置导致。

为验证,我用我的用户登录到docker container后,还是会出错。因为我没有将本机的fold/myname的目录映射进docker container.

映射后,编译过出错的位置。在新的位置出错,这次的错是说我的用户和组不对。

然后我将主机的ID和docker container设置为相同后,这个出错的位置通过,但是后面出的错是说可以存在主机污染。

所以,将我自己的用户移动user中,从root中移走后,编译成功。

但最后还是有一个告警:还是主机污染。是这么说的:运行yocto bitbaker的用户与被编译对象的owner用户是一个人,它说这样不好,非常不好。

==================================

然后我建一个其它的用户,与主机分离,然后,把我的git,ssh,rsa,bashrc等,都拷了过去,拷到它的home目录下面,

这次编译完全正常了。

没有告警。

分解解决这几个问题:ssh问题,gitlab和github下代码的问题,环境变量中设置self临时目录的问题。以及启动yocto的用户与被编译对象的owern 归属指向同一个人的问题。

====================================

这里面,再回头,我一直在反复思考的是为什么说yocto的启动用户与编译对象的从属者重复的问题。

以及主机污染。

日志中说运行yocto的用户是0,而0即是root.

无论什么时候,我启动docker container所用的一定不是root。

那么,为什么,我用宿主机我自己的用户,start docker container,最后会说我的yocto的启动者就是当前用户呢?

我的分析应该是这样的:

docker container中的root用户,就是 run docker container的用户。那个用户就是主机中的我,比如haoyujie,这个用户映射到docker中后,就是root,也就是用户ID=0的那个用户。

然后实际上,不论你如何操作,docker container中的操作系统,还是能识别出root==haoyujie这个事实,不论有没有主机污染。

这里说的主机污染就是我将haoyujie在主机和docker container中的ID设置为一样。

当然,当我把haoyujie从docker container中的root组移除后,权限的问题解决的,docker container能够成功地将root与haoyujie分开,但是主机污染还是存在的,即它还是发现运行yocto的用户和yocto编出来的东西的归属,实际上还是同一个用户。

所以,归跟究底,我们可以认为是docker container的设计导致。

解决办法就是建一个新的用户。

这个用户是任何名称都可以,在宿主机有还是没有,映到到docker container还是没有映射,都是没有问题的。

因为,docker container中的root用户,是 run docker container的那个用户,与就是你自己,

总之,yocto允许用root编译的同时,把编译结果的归属权限也给root。这样linux系统的权限分级从最开始就烧制不出来了。

在这件事情上,即使是warning也不能出现,编译成功,可能也没办法用。这就是linux,一个有权限控制洁癖的人带来的结果。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值