在HTC andriod手机上安装nginx+php-fpm+mysql服务

发布: 2013-08-17 19:08

android是一个相对开放的系统,与linux系统非常类似,但也不完全一样。
虽然能做很多事情,但是还需要做许多研究学习。
本次就在手机上安装anmp(android,nginx,php-fpm,mysql)服务对android系统做一次算是应用分析吧。
分析的重点内容为:
linux与android
刷机与root权限,在linux上与android上的不同,了解这个是做hack系统的比较重要的一步
android应用的读写权限
内存卡与sd卡
存储卡的分区方式与分区格式,vfat vs. ext4
外接USB卡的应用
用adb在linux下连接并操作android手机
如何在android命令行执行后台原生程序
android-ndk交叉编译C/C++服务程序环境
交叉编译anmp服务程序
使用已经编译好的arm发行版
chroot环境下启动服务的特征
chroot环境linux系统的安装与应用
android命令行模式的电话短信服务的可行性研究
android服务分析
android硬件驱动研究
android的启动过程研究
android第二原装linux系统的安装与启动
在android安装linux作为主系统
一、linux与android
android是在linux内核基础上开发的移动设备操作系统。
android并不是linux,系统的实现并不需要遵循LSB标准。
android只使用了linux内核部分,基础库部分和界面部分都属于自行开发类似linux的部分,
但更适合移动设备应用,如Bionic Libc,替换glibc,用busybox替换标准linux系统命令。
之所有选择用linux内核,主要原因在于以下几点,
linux内核本身是开源的,
内存管理与进程管理功能强大稳定
天生的权限安全支持
驱动认证安全模式
两者的不同之处列表,
android的硬件驱动部分属于专属驱动, 需要硬件厂商的直接支持
窗口系统使用基于类似jvm的java虚拟机实现。
专有的内存管理扩展功能,应用程序的缓存与强制清理

二、刷机与root权限
七、用adb在linux下连接并操作android手机
android手机使用USB与linux系统连接,
在接入连线时,触发linux的udev事件,创建相应用android设备。
然后,android-tools中的命令便通过这个android设备文件与android物理设备通信。
android-tools命令包括adb fastboot这些,
前者的功能更非常,包括应用的安装,备份,文件传输,网络转发,日志输出等常用功能,
还支持通过该命令进入android的模拟shell环境,对系统做维护。
在已经取得android系统的root权限的情况下,这个shell能进入root模式,
执行更多的系统管理功能,包括强制让某程序退出这样的功能。

fastboot命令用于定稿boot.img内核镜像,升级android的内核版本。
八、android-ndk交叉编译C/C++服务程序环境
android系统最底层使用的C库一层,能支持常用的系统功能,
android-ndk就是编译生成这种直接使用C库执行系统功能程序的交叉编译环境。
对于大多数的linux发行版,都能通过系统包管理安装android-ndk包。
android-ndk使用其提供的makefile规范简化代码的编译过程,如android.mk
也可以通过设定android-ndk编译器相关的路径信息的方式,
编译现有的项目,而不需要重新编译android.mk。
九、交叉编译anmp服务程序
现有的服务项目,nginx,mysql,php都使用的通用linux的makefile编译,
如使用autotools相关工具,生成makefile。
但是由于这几个服务包可能依赖许多其他的包,
一般来说,为了避免编译依赖导致失败,尽量可能地最小化编译,然后再添加编译更多功能进包里。
首先,以编译nginx为例,这个包还是比较容易编译的,
最简单编译的情况,不需要依赖任何外部第三方库,只使用android-ndk自带的libc和libz。
然后,当前nginx没有支持regex的功能,rewrite和location正则匹配无法使用,
这时需要先用android-ndk编译出pcre库,再次编译nginx,添加支持pcre的参数。
这样得到比较完整的nginx功能了。
环境设置与自动脚本请参考我的代码库: https://github.com/kitech/android-nmp

这些脚本完成包的自定义configure过程,指定相关的路径,生成makefile文件,
最后使用make交叉编译生成android系统的目录执行程序。
这里可能会遇到许多不兼容的情况,毕竟这些服务包本身不是为了android系统开发,
许多包都需要调整configure或者makefile以完成编译。

另外还用到了许多自定义编译相关的知识,包括设定环境变量影响编译过程,
指定路径,编译安装到特定目录下。
十、使用已经编译好的arm发行版
有许多linux发行版本,都发布了arm版本的二进制系统。
像debin有一个arm的iso镜像,但经过测试,这个包编译是针对arm5的,
而不是我现在用的arm7,这个系统能用qemu-system-arm启动运行起来。

接下来又找到了archlinuxarm.org这个网站,提供了许多基于archlinux生成的arm完整系统,
可以使用archlinux的pacman管理包,非常容易方便。

下载了一个arm7的系统包,ArchLinuxARM-trimslice-latest.tar.gz,解压到手机的ext4分区的目录,
基于完美执行,除了systemctl在chroot环境没有办法用。
接下来,安装这些服务就容易了,pacman -S nginx php php-fpm mysql
这么简单就搞定了,修改下配置文件,服务就启动了。

这里注意,必须使用ext4格式的分区,并且使用参考文档中的分区格式,
否则有可能在不小心的时候把数据清理掉了。
另外,这个网站还提供了树梅派这种微型电脑使用的系统镜像包,也是基于archlinux的,
并且目前还不断更新系统包,目录来看是非常好的android,树梅派等移动设备和微型电脑系统选择。

参考:
http://nullget.sourceforge.net/?q=node/756
http://nullget.sourceforge.net/?q=node/730
http://nullget.sourceforge.net/?q=node/729


原文: http://qtchina.tk/?q=node/750

Powered by zexport