2013年4月13日 星期六

[Linux] Nginx、ARM 與 CMake @ Ubuntu 12.04

   +   


Nginx 是這幾年開始火紅的 Web server,而 ARM Device 則有過之而無不及!這兩個合在一起,就可以創作出許多 web app on ARM device 的熱情。最近抽空用 CMake 整了一下安裝流程,當然是偽 CMake 用法 XD 把 CMake 當做 script 的用法 :P 整合過程中,就依樣畫葫順便做了 libssl-cmakelibz-cmake,測試環境:



  • 在 Ubuntu 12.04 64Bit 環境,編譯給自身用的服務

  • 在 Ubuntu 12.04 64Bit 環境,透過 cross complier 編譯給 ARM Device (ARM6)

  • 在 Mac OSX 12.08 Server 版,編譯給自身用的服務


如此一來,終於可以接近 "一鍵" 完成 cross compile 給 ARM Device 跑的服務啦 :P


需提一下,由於在 nginx configure 的過程中,會去測試裝置所用的 int size、syserr_no 等資訊,作法就是編譯片段程式,丟到裝置上跑完來得知結果,故在 cross compile 的流程中,導入 ssh/scp 的機制,將編譯好的程式丟到裝置上執行,所以裝置必須支援 ssh/scp 以及 key-pair 的登入方式(可參考 dropbeardropbear-cmake )。


如此一來方可完成 cmake .. && make 等輕鬆愉快的體驗 XD 在此感謝同事 YangAcer 以及 Ali's blog: Cross-compile nginx 1.3.6 的分享 :D 


一般使用:


$ git clone --recursive https://github.com/changyy/nginx-cmake.git
$ cd nginx-cmake
$ mkdir build
$ cd build
$ cmake ..
$ make
$ ./nginx-out/sbin/nginx -p ./nginx-out/


裝置編譯(此例裝置 IP 為 192.168.168.168,並且可用 root@192.168.168.168 遠端登入及 scp 檔案):


$ git clone --recursive https://github.com/changyy/nginx-cmake.git
$ cd nginx-cmake
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_TOOLCHAIN_FILE=/path/toolchain-arm6.cmake
...
CMake Error at CMakeLists.txt:14 (message):
Please use -DREMOTE_DEVICE_SSH_LOGIN='account@remote_device_ip' again (need
sshd & scp service)
...
$ cmake .. -DCMAKE_TOOLCHAIN_FILE=/path/toolchain-arm6.cmake -DREMOTE_DEVICE_SSH_LOGIN='root@192.168.168.168'
$ make
$ scp -r ./nginx-out root@192.168.168.168:/tmp
$ ssh root@192.168.168.168 "/tmp/nginx-out/sbin/nginx -p /tmp/nginx-out/"

註:跑 nginx 還須處理 shared library,可以用 objdump 或 readelf -a sbin/nginx | grep Shared 確認


2 則留言:

  1. 最近正在考虑把nginx移植到arm上的可行性,谢谢你这篇blog,如果能出一个更详细的移植步骤就好了,网上好像很少这方面的资料。

    回覆刪除
  2. 这两天才开始看,好多移植方面的东西不太了解,才发现您这已经把这个交叉编译的nginx都开源放到github上了呀。。。我还在叫您写个详细步骤。惭愧了,看书不仔细,再次感谢,网上找了2天,才看到您这个好东东。。。。谢谢。

    回覆刪除