上次编译python移植的到小米路由器上,http://blog.csdn.net/ftsun123/article/details/24925671,想把goagent 移植到python上面,发现没有openssl支持,调用urllib打开https的网站会有问题,所以我这边添加了对openssl的支持,添加步骤如下。
首先下载openssl的sourcecode http://www.openssl.org/source/
解压后编译,编译环境可以参考编译python的那篇文章,然后执行下面的命令
CC=arm-openwrt-linux-gcc CXX=arm-openwrt-linux-g++ AR=arm-openwrt-linux-ar RANLIB=arm-openwrt- linux-ranlib ./Configure no-asm shared --prefix=`pwd`/../out/openssl linux-armv4
2 make
3 make install
然后修改python的 setup.py文件(记得要先按编译python那篇文章打补丁),在453行添加下面的code。
# The common install prefix of 3rd party libraries used during
453 # cross compilation
454 mydir = os.environ.get('PYTHON_XCOMPILE_DEPENDENCIES_PREFIX')
455 if mydir:
456 inc_dirs += [mydir + '/include' ]
457 inc_dirs += [mydir + '/lib/libffi-3.0.10/include']
458 lib_dirs += [mydir + '/lib' ]
459 #inc_dirs += [os.getcwd() +'/third/out/zlib/include']
460 inc_dirs += [os.getcwd() + '/third/out/openssl/include']
461 #lib_dirs += [os.getcwd() + '/third/out/zlib/lib/']
462 lib_dirs += [os.getcwd() + '/third/out/openssl/lib/']
重新make 可以发现python 已经不会提示没有_ssl支持了。
安装goagent 还需要安装pyOpenSSL, 这个我是通过easy install 安装,不过依赖的一些库由于包含c文件需要自己手动编译成egg包或lib库安装上去,直接去网上搜一下这些lib,下载下来sourcecode就可以了。
安装pyOpenSSL依赖的需要手动编译的库如下。
cryptography-0.4->cffi-0.8.2->libffi-3.1
首先编译libffi,编译环境还是openwrt
CC=arm-openwrt-linux-gcc CXX=arm-openwrt-linux-g++ AR=arm-openwrt-linux-ar RANLIB=arm-openwrt-linux-ranlib ./configure --host=./configure --host=arm-linux --prefix=`pwd`/../out/libffi
make
make install
。
export PLAT=arm-openwrt-linux-
export PY=~/python-arm #python 的编译目录,所有的扩展包我都是放到这个目录下的third目录
export CC="${PLAT}gcc -pthread"
export LDSHARED="${CC} -shared"
export PYPREFIX=${PY}_install/ # python 编译出来的结果
export CFLAGS="-I${PY}/third/out/libffi/include -I${PYPREFIX}include/python2.7"
export LDFLAGS="-L${PY}third/out/libffi/lib"
python setup.py bdist_egg
编译cryptography, 这里需要依赖前面编译出来的openssl lib
export PLAT=arm-openwrt-linux-
export PY=~/python-arm #python 的编译目录,所有的扩展包我都是放到这个目录下的third目录
export CC="${PLAT}gcc -pthread"
export LDSHARED="${CC} -shared"
export PYPREFIX=“${PY}_install/"
export CFLAGS="-I${PY}third/out/openssl/include -I${PYPREFIX}include/python2.7"
export LDFLAGS="-L${PY}third/out/openssl/lib"python setup.py bdist_egg
编译出来egg同样需要重命名为cryptography-0.4。
这样基本需要的egg&lib就编译Ok了,接下来需要安装到路由器上面。
首先安装lib
编辑/etc/profile文件,添加下面的语句
export LD_LIBRARY_PATH=/userdisk/libs/
安装easy_install 文件
wget http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py
easy_install cffi-0.8.2.egg
ease_install cryptography-0.4.egg
ease_install pyOpenSSL
本来还编译了gevent库,想让goagent 工作的更稳定但是goagent会有Segment fault 错误,测试了一下goagent 被伟大的防火墙也弄的半残了,也就懒得折腾了。知道如何编译python 扩展库就OK了。
后记:
如果有时间看看能不能让路由器识别arduino mega,我这里有块板子,但是插上识别不出来,看来一下好像是没有usb串口驱动没有,有空看看能不能编译一个ipk装上去。