64位手机部署centos
在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个包。
64位手机部署centos的更多相关文章
- 记录一次腾讯X5内核64位手机初始化失败
之前一直在使用x5内核,只需要一个jar包和so文件就能让webview实现多余原生webview的水平,在32位的手机上能够正常运行,但是到了64位手机上就报如下错误: E/ERROR:: .... ...
- 64位手机无法加载x5(libmttwebview.so is 32-bit instead of 64-bit)
x5内核暂时不提供64位的so文件,在64位手机上需要让AP以32位模式运行. 具体操作如下: 1.如果使用是Eclipse则需要将所有的.so文件都放置在so加载目录:lib/armeabi文件夹下 ...
- android studio 64位手机+Fresco引起的在arm64位机器上找不到对应的so库
我们的程序在32位机器上没有问题,有一天公司采购了一台魅族MX5 MTK的64位处理器上我们的应用报错了 "nativeLibraryDirectories=[/data/app/com.l ...
- 64位ubuntu下重新编译hadoop2.2流水账
hadoop官方网站中只提供了32位的hadoop-2.2.0.tar.gz,如果要在64位ubuntu下部署hadoop-2.2.0,就需要重新编译源码包,生成64位的部署包.建议以下操作使用roo ...
- linux CentOs 7.4 64位 系统下 nuxt部署 、nginx 安装、node环境及软连接,pm2软连接
一.nginx安装 1.安装依赖包 //一键安装上面四个依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 2 ...
- CentOS 7.1静默安装11.2.0.3 64位单机数据库软件
第1章 CentOS 7.1静默安装11.2.0.3 64位单机数据库软件 1.1 安装前的准备工作 1.1.1 软件准备 1.1.2 检查硬件 注意这里的内存应该满足要求,不然 ...
- 浅谈Excel开发:十一 针对64位Excel的插件的开发和部署
自Office 2010版本开始有了32位和64位之分,对Excel来说,32位的Excel和64位的Excel在性能上的主要区别是64位的Excel能够处理2G及2G以上的大数据集. 随着64位操作 ...
- centos 7 64位虚机上android4环境运行
场景 现在的开发大多是在linux的虚拟机上进行,现在有些工作和android有关,因此初步尝试了一下是否可以和目前的场景进行统一. 系统是在vmware workstaion上的centos 7的6 ...
- CentOS RedHat YUM 源扩展补充(32位、64位均有)
一般情况下强烈建议在CentOS6下面使用YUM配置安装LAMP环境,一些兄弟也很喜欢使用编译的安装方法,个人觉得如果不是对服务器做定制,用yum安装稳定简单,何必去download&make ...
随机推荐
- API设计中防重放攻击
HTTPS数据加密是否可以防止重放攻击? 否,加密可以有效防止明文数据被监听,但是却防止不了重放攻击. 防重放机制 我们在设计接口的时候,最怕一个接口被用户截取用于重放攻击.重放攻击是什么呢?就是把你 ...
- HTTP Catcher
HTTP Catcher HTTP Catcher 是一个 Web 调试工具.它可以拦截.查看.修改和重放来自 iOS 系统的 HTTP 请求. 你不需要连接电脑,HTTP Catcher 可以在后台 ...
- ESP8266开发之旅 网络篇⑫ 域名服务——ESP8266mDNS库
1. 前言 前面的博文中,无论是作为client端还是server端,它们之间的通信都是通过具体的IP地址来寻址.通过IP地址来寻址,本身就是一个弊端,用户怎么会去记住这些魔法数字呢?那么有没 ...
- Spring Boot构建的Web项目如何在服务端校验表单输入
本文首发于个人网站:Spring Boot构建的Web项目如何在服务端校验表单输入 这个例子用于演示在Spring Boot应用中如何验证Web 应用的输入,我们将会建立一个简单的Spring MVC ...
- 百万年薪python之路 -- 并发编程之 多进程二
1. 僵尸进程和孤儿进程 基于unix的环境(linux,macOS) 主进程需要等待子进程结束之后,主进程才结束 主进程时刻检测子进程的运行状态,当子进程结束之后,一段时间之内,将子进程进行回收. ...
- 防抖与节流 & 若每个请求必须发送,如何平滑地获取最后一个接口返回的数据
博客地址:https://ainyi.com/79 日常浏览网页中,在进行窗口的 resize.scroll 或者重复点击某按钮发送请求,此时事件处理函数或者接口调用的频率若无限制,则会加重浏览器的负 ...
- SpringBoot之响应式编程
一 Spring WebFlux Framework说明 Spring WebFlux 是 Spring Framework 5.0 中引入的新 reactive web framework.与 Sp ...
- ofd电子文档内容分析工具(分析文档、签章和证书)
前言 ofd是国家文档标准,其对标的文档格式是pdf.ofd文档是容器格式文件,ofd其实就是压缩包.将ofd文件后缀改为.zip,解压后可看到文件包含的内容. ofd文件分析工具下载:点我下载.获取 ...
- mysql中if函数的正确使用姿势
--为了今天要写的内容,运行了将近7个小时的程序,在数据库中存储了1千万条数据.-- 今天要说的是mysql数据库的IF()函数的一个实例. 具体场景如下, 先看看表结构: CREATE TABLE ...
- expect实现自动输入密码功能
系统: Ubuntu:16.04 安装expect: sudo apt-get update sudo apt-get install expect 脚本实例: //这一行告诉操作系统脚本里的代码使用 ...