perl模块之Rex(本地安装)
来源:互联网 发布:电视机推荐 知乎 编辑:程序博客网 时间:2024/05/22 15:45
前言
由于环境限制,需要安装的机器不可以上网,如果可以连网,请参考官网文档,以下所有操作都是root(如果没有root,编译的时候需要有一些修改),OS:suse11sp2,其实大部分linux应该都可以。
主要是Net::SSH2模块安装起来很坑,,依赖 libssh2,openssl,zlib ,自己FTP上去编译了一堆,还得参考一些不完全正确的中文blog,还是英文的靠谱一些,ln 一些 动态链接库,最后手动把老的libssh2卸载,安装Net::OpenSSH就没这么多问题。
环境准备
1.perl 5.10.1(假设已安装)3.libssh2、openssl、zlib、expat源码3.Rex模块及依赖的包
编译源码包
如果能连网 用yum
、apt-get
或者zypper
,下载相应的包和devel包会很方便,当然编译是通吃的。
编译expat
cdtest -f installed/expat-2.0.1.tar.gz && mv installed/expat-2.0.1.tar.gz .test ! -f expat-2.0.1.tar.gz && wget http://download.sf.net/expat/expat-2.0.1.tar.gzmkdir -p -m 0700 srccd srcfind -maxdepth 1 -type d -name "expat-*" -exec rm -r {} \;tar xzvf ~/expat-2.0.1.tar.gzcd expat-2.0.1test $UID = 0 && chown -R root:root ../configure --prefix=/usrmakerm -f /usr/lib/libexpat.*make installldconfig# I had to create a .0 symlink for Firefoxln -s /usr/lib/libexpat.so /usr/lib/libexpat.so.0cdmkdir -p -m 0700 installedrm -f installed/expat-*.tar.*mv expat-2.0.1.tar.gz installed/
编译openssl
cdtest -f installed/openssl-1.0.1g.tar.gz && mv installed/openssl-1.0.1g.tar.gz .test ! -f openssl-1.0.1g.tar.gz && wget http://openssl.org/source/openssl-1.0.1g.tar.gz# Verify tarball w/ md5sum:echo "de62b43dfcd858e66a74bee1c834e959 openssl-1.0.1g.tar.gz" | md5sum -c# Extract itmkdir -p -m 0700 srccd srcfind -maxdepth 1 -type d -name "openssl-*" -exec rm -r {} \;tar xzvf ~/openssl-1.0.1g.tar.gzcd openssl-1.0.1gtest $UID = 0 && chown -R root:root .## Configure and then build it# If you're low on time, or this is a re-build, skip 'make test'# You can install it where Slackware does by passing --prefix=/usr# and --openssldir=/etc/ssl to configure# Configure it, here using /usr/local/ssl/lib64 for 64-bit systems,# /usr/local/ssl/lib otherwisetest $(uname -m) = "x86_64" && ./config shared --libdir=lib64test $(uname -m) != "x86_64" && ./config shared# Build itmake# Test the buildmake test# If you have an old distribution-installed OpenSSL with a /etc/ssl# configuration directory, back that up and remove ittest -d /etc/ssl && ( mkdir -p -m 0700 ~/backup/ssl cp -a /etc/ssl/* ~/backup/ssl/ rm -r /etc/ssl )# Install the new versionmake install# Make sure the libraries are visible, use /usr/local/ssl/lib64 for 64-bit# systems, /usr/local/ssl/lib otherwiseFOO=libtest $(uname -m) = "x86_64" && FOO=lib64( cd /usr/local/ssl/${FOO} ln -sf libcrypto.so.1.0.0 libcrypto.so.1 ln -sf libssl.so.1.0.0 libssl.so.1 egrep -q "^/usr/local/ssl/${FOO}$" /etc/ld.so.conf || echo "/usr/local/ssl/${FOO}" >> /etc/ld.so.conf )ldconfigunset FOO# If you upgraded from a 0.x.x version to a 1.x.x one, you may find# old libssl.so.0.x.x shared library files in /usr/local/ssl/lib. You# might want to leave them there because there are probably many things# linked to them.# Make sure your non-root user can remove the source laterchown -R $(logname) .chmod -R u+w .# Save the source for latercdmkdir -p -m 0700 installedrm -f installed/openssl-*.tar.*mv openssl-1.0.1g.tar.gz installed/
编译zlib
# Get itcdtest -f installed/zlib-1.2.8.tar.xz && mv installed/zlib-1.2.8.tar.xz .test ! -f zlib-1.2.8.tar.xz && wget http://zlib.net/zlib-1.2.8.tar.xz# Verify tarball w/ md5sum:echo "28f1205d8dd2001f26fec1e8c2cebe37 zlib-1.2.8.tar.xz" | md5sum -c# Extract the sourcemkdir -p -m 0700 srccd srcfind -maxdepth 1 -type d -name "zlib-*" -exec rm -r {} \;tar xJvf ~/zlib-1.2.8.tar.xzcd zlib-1.2.8test $UID = 0 && chown -R root:root .## configure the build# 64-bit systems:test $(uname -m) = "x86_64" && ./configure --prefix=/usr --libdir=/usr/lib64 --sharedlibdir=/lib64# Non-64-bit systems:test $(uname -m) = "x86_64" || ./configure --prefix=/usr --sharedlibdir=/lib# Build itmake# Test the buildmake testtest -d /lib64 && ( cd /lib64 ; rm -f libz.so.1 libz.so )test -d /usr/lib64 && ( cd /usr/lib64 ; rm -f libz.so.1 libz.so )test -d /lib && ( cd /lib ; rm -f libz.so.1 libz.so )test -d /usr/lib && ( cd /usr/lib ; rm -f libz.so.1 libz.so )# Install the new version. It will install static (.a) and shared (.so)# versions of libz. The default base man directory is /usr/share/man,# which in Slackware is usually either not there or a symlink to /usr/man.make install mandir=/usr/man# Now create symlinks in /usr/lib*/ pointing to the real one in /lib*/:test -f /lib64/libz.so.1.2.8 && ( ln -sf /lib64/libz.so.1.2.8 /usr/lib64/libz.so.1.2.8 ln -sf /lib64/libz.so.1.2.8 /usr/lib64/libz.so.1 ln -sf /lib64/libz.so.1.2.8 /usr/lib64/libz.so )test -f /lib/libz.so.1.2.8 && ( ln -sf /lib/libz.so.1.2.8 /usr/lib/libz.so.1.2.8 ln -sf /lib/libz.so.1.2.8 /usr/lib/libz.so.1 ln -sf /lib/libz.so.1.2.8 /usr/lib/libz.so )# Update /etc/ld.so.cacheldconfigfind /usr/doc -maxdepth 1 -type d -name "zlib-*" -exec rm -r {} \;mkdir -p /usr/doc/zlib-1.2.8cp ChangeLog FAQ INDEX README /usr/doc/zlib-1.2.8/chown -R root:root /usr/doc/zlib-1.2.8chown -R $(logname) .chmod -R u+w .# Save the source for latercdmkdir -p -m 0700 installedrm -f installed/zlib-*.tar.* installed/zlib-*patch*.txtmv zlib-1.2.8.tar.xz installed/
编译libssh2
# Get itcdtest -f installed/libssh2-1.4.3.tar.gz && mv installed/libssh2-1.4.3.tar.gz .test ! -f libssh2-1.4.3.tar.gz && wget http://www.libssh2.org/download/libssh2-1.4.3.tar.gz# Extract the sourcemkdir -p -m 0700 srccd srcfind -maxdepth 1 -type d -name "libssh2-*" -exec rm -r {} \;tar xzvf ~/libssh2-1.4.3.tar.gzcd libssh2-1.4.3test $UID = 0 && chown -R root:root .# Configure the build - 64-bittest $(uname -m) = "x86_64" && ./configure --mandir=/usr/local/man --with-libssl-prefix=/usr/local/ssl \ --libdir=/usr/local/lib64# Configure the build - anything elsetest $(uname -m) != "x86_64" && ./configure --mandir=/usr/local/man --with-libssl-prefix=/usr/local/ssl# Build itmake# Install itmake installldconfig# Make sure your non-root user can remove the source laterchown -R $(logname) .chmod -R u+w .# Save the source for latercdmkdir -p -m 0700 installedrm -f installed/libssh2-*.tar.*mv libssh2-1.4.3.tar.gz installed/# add by shalk ln -s /usr/local/lib64/libssh2.so.1.0.* /usr/lib64/libssh2.so.1 # If you ever want to uninstall libssh2, this should do it:#cd#test -d src/libssh2-* && ( cd src/libssh2-* ; make uninstall )#for pfx in /usr /usr/local;#do# ( cd ${pfx}/include# rm -f libssh2.h libssh2_sftp.h libssh2_publickey.h )# rm -f ${pfx}/lib/libssh2.* ${pfx}/man/man3/libssh2_* \# ${pfx}/share/man/man3/libssh2_* ${pfx}/lib/pkgconfig/libssh2.pc# test -d ${pfx}/lib64 &&# rm -f ${pfx}/lib64/libssh2.* ${pfx}/lib64/pkgconfig/libssh2.pc#done#ldconfig##find ~/src -maxdepth 1 -type d -name "libssh2-*" -exec rm -r {} \;#rm -f ~/installed/libssh2-*.tar.*
至此,openssl,expat,zlib,libssh2就安装好了,主要是他们的动态链接库都可以找到,并且覆盖掉老版本的就好。 为此我卸载了版本的libssh2rpm -e libssh2-1-0.19.0+20080814-2.16.1 --nodeps
其实只要ln -s /usr/local/lib64/libssh2.so.1.0.* /usr/lib64/libssh2.so.1
就OK了 因为那个包 只提供了两个文件,用rpm -ql
可以查看到。
感谢 jason的howto 提供的编译代码
准备Rex的本地安装库
下载cpanm
#下载了一个单独的cpanm 可执行文件curl -LO http://xrl.us/cpanm
先下载Rex所有的依赖包到dists目录
cpanm -L /dev/null --save-dists dists --scandep Rex
生成索引
cpanm OrePAN#disks的绝对路径orepan_index.pl --repository=/home/path/dists/#生成的文件为/home/path/dists/module/02packages.details.txt.gz
可以将dists目录都copy走。
安装Rex
上传cpanm和dists目录
chmod a+x cpanmcp cpanm /usr/bin/# 从dists目录读依赖包,安装到/usr/local/rex/目录下,安装Rex模块cpanm --mirror-only --mirror file:///root/dists/ -L /usr/local/rex/ Rex
验证
#检验模块都OKperl -MYAML -I/usr/local/rex/lib/perl5/ -e "1"perl -MDBI -I/usr/local/rex/lib/perl5/ -e "1"perl -MLWP -I/usr/local/rex/lib/perl5/ -e "1"perl -MJSON::XS -I/usr/local/rex/lib/perl5/ -e "1"perl -MXML::Simple -I/usr/local/rex/lib/perl5/ -e "1"perl -MString::Escape -I/usr/local/rex/lib/perl5/ -e "1"perl -MRex -I/usr/local/rex/lib/perl5/ -e "1"#加入环境变量,可以加到.bashrc里export PATH=$PATH:/usr/local/rex/bin/export PERL5LIB=/usr/local/rex/lib/perl5/mkdir -p projects/my-first-rex-projectcd projects/my-first-rex-projectvim Rexfile#Rexfileuser "root";password "111111";pass_auth;group myserver => "127.0.0.1";desc "get the uptime of all server";task "uptime",group => "myserver",sub{ my $output = run "uptime"; say $output;};rex uptimelinux:~/projects/my-first-rex-project # rex uptime[2014-05-16 13:17:46] INFO - Running task uptime on 127.0.0.1[2014-05-16 13:17:46] INFO - Connecting to 127.0.0.1:22 (root)[2014-05-16 13:17:46] INFO - Connected to 127.0.0.1, trying to authenticate.[2014-05-16 13:17:46] INFO - Successfully authenticated on 127.0.0.1. 13:17pm up 3:07, 4 users, load average: 0.01, 0.02, 0.05[2014-05-16 13:17:47] INFO - Exiting Rex...[2014-05-16 13:17:47] INFO - Cleaning up...成功
后记
以后就方便了,把需要用到的打包上传,相关下载 提取密码:o7n7
如果在一台内网机器需要安装
#上传到安装的节点tar -zvxf rex_all.tar.gzcd rex_allsh install.sh#等待编译完成 执行cpanm --mirror-only --mirror file:///root/dists/ -L /usr/local/rex/ Rex
END
0 0
- perl模块之Rex(本地安装)
- perl 安装Rex
- Linux下安装与使用本地的perl模块
- perl 安装本地CPAN
- perl模块安装办法
- perl cpan 模块安装
- 安装Perl模块
- 安装perl模块 [Linux]
- perl安装模块
- perl模块安装
- 如何安装perl模块
- 如何安装perl模块
- perl模块安装
- 如何安装Perl模块
- Perl模块安装
- perl模块安装方法
- perl安装模块
- perl CGI模块安装
- 最长公共子序列
- nysql 5个子句的使用顺序
- 二分法查找数据
- 【Cocosd2d-x CCMenu菜单之二】
- 相对路径
- perl模块之Rex(本地安装)
- 利用+=n连续保存或者输出n个数
- 自定义控件专题之四:带3d翻转特效的滑动页
- 使用daemontools监控Zookeeper服务
- IIS 学习笔记(在IIS上发布了一个webservice,访问时可以访问到其目录,但是无法打开.asmx文件)
- Java将Unix时间戳转换成普通日期型的函数
- [cookbook笔记五] 使用面向对象思想处理图像
- Paas云计算平台Heroku
- php模拟post提交数据