在64位处理器的手机上部署centos会有下面的困难。

1. 没有现成的aarch64的rootfs。

2. termux没有rpm2cpio进行部署。

3. armv8*不会被centos识别为aarch64。

如果手机root了,可以直接使用linuxdeploy进行部署。linuxdeploy自带了apt,dpkg,rpm,yum包管理程序,以其部署centos为例,它是通过直接指定最小rpm集,在镜像站下载使用rpm2cpio进行还原,然后进入proot/chroot容器,对之前还原的包重新使用rpm安装一次。rpm2cpio原始还原,不进行包管理,这一步的目的是使用容器有实用程序可用。进入容器调用容器内的实用程序进行rpm安装,目的是将现有的包一一归入到包管理系统,建立包管理信息,可以理解为包注册到系统,不然rpm和yum是不会识别的。

linuxdeploy另一种部署方法,与termux一样,直接下载已经安装好最小包的rootfs.img。linuxdeploy提供centos armhfp现成镜像,要收费没有aarch64对应的镜像。termux的部署脚本atilo提供的centos镜像文件地址无效的,也就是没有了。

那么在非root手机部署aarch64对应的centos就需要将linuxdeploy部署方案移植到termux上。可以参考linuxdeploy的include/bootstrap/centos/deploy.sh等脚本进行修改移植。termux要使用linuxdeploy部署的方案,就需要rpm2cpio工具,但是termux应用的是apt包管理系统,不提供rpm工具。这就可以借termuxt部署fedora,然后通过fedora容器使用rpm2cpio工具进行centos的部署。因为fedora直接提供aarch64的最小rootfs镜像文件。由于安卓版的linux内核的用户权限管理的原因,这种方式会生成一些文件,其它容器访问不了。

armv8l是一个很怪的cpu架构命名,它不被fedora, centos生态兼容。一般地有arch列表arm, armv7, arm64, aarch64,在armv7l手机上,可以很好地被识别成arm或armhfp ,但是armv8l明明是aarch64,就不能被识别,而硬生生地识别成不兼容的armv8l。这里首先就影响我们要移植的部署方案,必须手动去指定,或者是添加兼容识别的脚本代码。

执行移植好的部署脚本,最小包集合还原到新容器的根目录,在进入容器进行包注册时就会再次因为armv8l困扰,rpm会报错所有aarch64的包为intended for different arch。自然就不能注册了。这时候你会发现,从aarch64包还原出来的实用程序以及依赖库,其实已经可以正常执行了,但是你想通过rpm包管理系统去注册,yum安装更多软件,这扇门因为armv8*这兼容难的名字被关上了。没有正确部署好gcc之前,连编译也不行。这样一来,部署下来的容器也只是一个死容器了。

在部署fedora也有同样的问题,在fedora下armv8*直接被兼容成armhfp,使用yum时,直接定向到armhfp镜像分支。但是fedora的yum可以通过--forcearch指定aarch64解决问题,但是centos就不行,fedora用的是dnf。centos部署可以通过rpm --ignorearch临时解决包注册的问题,但是yum却死活没有途径让人指定arch或者忽略。换句话说,你可以一个个包通过rpm --ignorearch --nodeps进行注册安装,但是就不能通过yum进行简单的依赖安装,甚至连正确安装次序都搞不好。这样的容器同样也是一个死容器。

armv8*在centos的包管理系统看来,既不是armhfp也不是aarch64的新型不兼容的特殊的cpu。所以你下载的armhfp还是aarch64分支的包也好,通通都认为是armv8*之外的“intended for different arch“。

要解决问题,就只能跟踪rpm或yum,看它们是怎么想的。rpm是二进制实用程序,yum是python脚本,那就跟踪yum。yum脚本一共有4部分组成,site-packages目录下的rpm, rpmUtils, yum以及/usr/share/yum-cli。通过单步跟踪可以发现脚本arch.py:getCononArch对cpu识别作了兼容处理,我们可以在这里添加上兼容代码,这样我们的yum就可以将armv8*识别成aarch64。修改后的yum终于定向到镜像站站点的aarch64分支,而不是armv8l这样不存在的分支。修改前,即使在repos.d目录的仓库配置文件硬指定aarch64地址路径,还是会因为识别不兼容问题将所有aarch64的包过滤掉,只能搜查出noarch的包。修改arch.py一来,yum在搜索下载环节就正常了,但是最后的问题也还是抹不平,仍然是armv8*引出的问题。

yum在搜索出包后,理清依赖关系,建立好依赖图,一一下载所有包就会进行安装测试。安装实际就是在进行rpm安装。由于我们不能通过yum去指使rpm进行--ignorearch操作,所以最后一切都安装不上,报错直接退出。仍旧是跟踪,发现yum脚本会生成事务去进行测试和安装,代码在cli.py:doTransaction,yum实际上调用扩展模块_rpm.so进行操作,我们只能通过三个hook函数被回调事件。我们还是干预不了这事。但是发现了,只要跳过测试阶段的错误raise,yum脚本就会在/tmp生成yum_save*事务日志,在/var/lib/yum/生成transaction-all*文件记录包安装的次序。

既然无法干预,我们只好通过手动进行rpm安装了,因为这时候我们可以通过特殊手段让yum下载好所有依赖的包缓存在/var/cache/yum/aarch64/7/*/packages,并令其生成一份安装次序表。

用这方法成功安装好vncserver以及xterm。

对于groupinstall,如果没有yum的帮助那是一件多么痛的事。以一个“Desktop“的组安装为例,就有近1000个包。

转载于:https://www.cnblogs.com/bbqzsl/p/9275264.html

64位手机部署centos相关推荐

  1. windows 2008 64位oracle11g部署问题(3)之ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务...

    oracle11g安装完毕了,监听也起来了,发现通过客户端 本地网络服务名配置(如下图)链接oracle11g服务器,确报ORA-12514的错误,该如何解决呢? 1. 找到listener.ora监 ...

  2. windows 2008 64位oracle11g部署问题(1)之警告-启动database control时出错

    由于本学期需要做oracle的授课,想将oracle版本由10g提升为11g,原来一直都用10g在redhat下,这次为了让学生安装方便(毕竟定义的目标是学习完达到oca即可了),因此想在window ...

  3. 关于腾讯TBS中,加载失败问题(64位手机无法加载x5)

    64位手机无法加载x5(libmttwebview.so is 32-bit instead of 64-bit) x5内核暂时不提供64位的so文件,在64位手机上需要让AP以32位模式运行.具体操 ...

  4. android中64位手机,我们需要64位Android手机吗?

    过去数月,多款新智能手机都把64位处理器作为卖点.用户应当购买一款配置64位处理器的手机吗?64位处理器的性能是32位处理器的2倍吗?这两个问题的答案是否定的.转向更新的ARM架构会带来性能的提升,但 ...

  5. 腾讯TBS初始化失败,加载失败问题(踩坑记录 64位手机无法加载x5)

    问题一:ndk配置的问题 //X5兼容64位手机 ndk {abiFilters "armeabi", "armeabi-v7a", "x86&quo ...

  6. android tbs 内核加载失败_腾讯TBS初始化失败,加载失败问题(踩坑记录 64位手机无法加载x5)...

    问题一:ndk配置的问题 //X5兼容64位手机 ndk { abiFilters "armeabi", "armeabi-v7a", "x86&qu ...

  7. arm 64位 android,一大波64位手机处理器来袭

    今天凌晨,谷歌正式发布了Android L系统,其最显眼的地方就是UI方面的改变,但最重要的地方却是新增了64位版本,并将ART模式作为系统默认的运行模式,以此换来更加流畅的操作体验. 由于指令集的关 ...

  8. 树莓派最新64位系统部署yolov5

    目录 一.适用版本 二.部署过程 1.下载yolov5 2.安装opencv和pytorch 安装opencv 安装pytorch 3.安装yolov5 4.运行detect.py 三.关于自己遇到的 ...

  9. htc+820+android+5.0,Android L附体!全球首款64位手机图赏

    Desire 820如约而至,而且是顶着全球首款64位八核手机的光环.如果你对它感兴趣,不妨来看看真机图赏. 从真机图上看,Desire 820的外形与816很相似,也继承了诸多HTC One M8上 ...

最新文章

  1. Marty Cagan:怎样寻找出色的产品经理
  2. win10系统Mysql5.7服务启动报:1053错误:服务没有及时响应启动或控制请求
  3. php中系统函数的特征,php 常用的系统函数
  4. JAVA——HttpClient封装工具类
  5. 机器学习和人工智能的初学指南
  6. Docker pull镜像报错问题
  7. Django:模型层ORM,创建模型类,字段类型
  8. 【Java】Java中的在Linux和Mac以及Windows上使用File.separator的坑
  9. PyTorch 模型训练教程(一)-数据
  10. 使用matplotlib画色斑图
  11. 计算机代数与数论pdf,计算机代数和数论(maple).pdf
  12. EnableViewState和EnableTheming的作用
  13. codeblock调试
  14. Pizza Separation
  15. Aras Innovator: 扩展Part类型,管理更多的物体类型
  16. spark Hash Shuffle内幕彻底解密
  17. 【自媒体营销神器】一键自动下载短视频并分发至长视频平台脚本开源展示
  18. Grpc系列二 Grpc4种服务方法的定义和实现
  19. 生命的计算和计算的生命
  20. C:通过三边判断三角形种类

热门文章

  1. html点击隐藏点击出现,点击按钮,内容隐藏,再点击一下,然后内容又显示了,这种效果怎么做?然后默认的是隐藏的...
  2. centos7光盘修复 grub_CentOs7怎样修复MBR和GRUB?
  3. iphone日历怎么跳转日期_晚上别调手表日期!手表调节日历的禁区!
  4. android 控件遮盖,Android手机软键盘遮挡布局控件
  5. 【深度学习】带有 CRF-RNN 层的 U-Net模型
  6. python【蓝桥杯vip练习题库】ALGO-189 P0505(阶乘问题)
  7. Android移动开发之【Android实战项目】DAY12-App实现修改密码
  8. hplus java,hplus
  9. 博途v15安装过程中提示出错_博途V15.1安装及无限重启和.net3.5SP1错误处理解决方法...
  10. 浅析影响网站建设的因素有哪些?