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
原创粉丝点击