2013年4月7日日曜日

VMware-vSphere-CLI-5.1.0-780721.x86_64.tar.gz on RHEL6.4

インターネットにつながっていない環境にある、Red Hat Enterprise Linux 6.4 (x86_64) に VMware vSphere CLI をインストールする話となります。

仮想マシンを増やしてもよいのであれば、vMAをデプロイすればよいだけの話です。ただ、vMAはRHELではなくSLESが採用されている点も考慮し、RHELにインストールすることにしました。

基本的には、Perl スクリプトでできているので、依存関係にある Perl モジュールを準備したらインストールできます。

RHEL6の標準リポジトリであるrhel-x86_64-server-6にアクセスできるのであれば、以下のコマンドを実行します。アクセスできない場合は、工夫してみてください。このリポジトリ、もしくは代替のリポジトリがアクセスできる前提で話を続けます。


sudo yum -y install \
 openssl-devel \
 perl-Class-MethodMaker \
 perl-XML-SAX \
 perl-XML-LibXML \
 perl-MailTools \
 perl-ExtUtils-MakeMaker \
 perl-Crypt-SSLeay \
 glibc.i686 \
 zlib.i686 \
 ncurses-libs.i686 \
 libstdc++.i686 \
 libxml2.i686


RHEL6のオプショナル・リポジトリであるrhel-x86_64-server-optional-6にアクセスできるのであれば、以下のコマンドも実行します。アクセスできない場合は、以下の5つのパッケージを入手してインストールしてください。


sudo yum -y install \
 perl-Archive-Zip \
 perl-Email-Date-Format \
 perl-MIME-Lite \
 perl-MIME-Types \
 perl-SOAP-Lite



perlモジュールData::DumpがRHEL6の公式リポジトリで見つかりませんでした。
EPELリポジトリにはあるのでそちらから入手しインストールします。

sudo rpm -ivh perl-Data-Dump-1.15-1.el6.noarch.rpm

UUIDモジュールに関するrpmパッケージが見当たらないので作ります。作り方は後述します。
作ったらインストールします。

sudo yum localinstall perl-UUID-0.05-1.x86_64.rpm

ここまでの作業で必要なPerlモジュールがそろうのですが、一部のモジュールについては、バージョンが古い、との警告が出てしまいます。警告が出るモジュールについては、CPANから最新のものを取得してビルドすればよいのですが、RHEL標準のPerlモジュールを上書きしたくはありません。
そこで、/usr/local/share/perl5.update/にモジュールをインストールし、vSphere CLIを使うときには事前に、

export PERL5LIB=/usr/local/share/perl5.update/lib/perl5

を実行することにしました。作業用PCでコンパイルし、/usr/local/share/perl5.update/をtarで固めたものを持ち込むことにします。tarで固めるまでの作業は後述します。
tarを解凍すればPerlモジュールの準備が完了します。

pushd /; sudo tar xzvf ~/perl5.update.tar.gz; popd

VMware-vSphere-CLI-5.1.0-780721.x86_64.tar.gzをインストールします。
以下のように実行し、画面の指示に従って[Enter][Space ...][yes]を入力してライセンスに同意すればOKです。


tar xzvf VMware-vSphere-CLI-5.1.0-780721.x86_64.tar.gz
sudo PERL5LIB=/usr/local/share/perl5.update/lib/perl5 ./vmware-vsphere-cli-distrib/vmware-install.pl -d



以下のコマンド群を実行し、Perlスクリプトがコンパイルエラーを起こさないこと、ELFバイナリが起動時の共有ライブラリ・ロードに失敗しないことまでは確認しました。


print_error_message_and_sleep()
{
  local R=$?
  local E="###### Error "
  E="$E$E$E$E$E$E$E$E$E$E"
  echo "$E$E$E$E$E$E [$R] $*" | tee -a /proc/self/fd/2
  sleep 10
  ErrorCount=$((ErrorCount+1))
  return $R
}
Error=print_error_message_and_sleep

perl -e 'print $i++ . ":" . "$_\n" foreach @INC' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -e 'print $i++ . ":" . "$_\n" foreach @INC' || $Error

perl -MUUID -e 'print $UUID::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MUUID -e 'print $UUID::VERSION' || $Error

perl -Mversion -e 'print $version::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -Mversion -e 'print $version::VERSION' || $Error

perl -MCompress::Raw::Zlib -e 'print $Compress::Raw::Zlib::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MCompress::Raw::Zlib -e 'print $Compress::Raw::Zlib::VERSION' || $Error
#perl -MCompress::Raw::Bzip2 -e 'print $Compress::Raw::Bzip2::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MCompress::Raw::Bzip2 -e 'print $Compress::Raw::Bzip2::VERSION' || $Error
#perl -MIO::Compress::Base -e 'print $IO::Compress::Base::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MIO::Compress::Base -e 'print $IO::Compress::Base::VERSION' || $Error
#perl -MIO::Compress::Zlib::Constants -e 'print $IO::Compress::Zlib::Constants::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MIO::Compress::Zlib::Constants -e 'print $IO::Compress::Zlib::Constants::VERSION' || $Error
#perl -MCompress::Zlib -e 'print $Compress::Zlib::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MCompress::Zlib -e 'print $Compress::Zlib::VERSION' || $Error

#perl -MHTML::Parser -e 'print $HTML::Parser::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MHTML::Parser -e 'print $HTML::Parser::VERSION' || $Error

#perl -MNet::SSLeay -e 'print $Net::SSLeay::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MNet::SSLeay -e 'print $Net::SSLeay::VERSION' || $Error

#perl -MIO::Socket::SSL -e 'print $IO::Socket::SSL::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MIO::Socket::SSL -e 'print $IO::Socket::SSL::VERSION' || $Error

#perl -MHTTP::Request -e 'print $HTTP::Request::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MHTTP::Request -e 'print $HTTP::Request::VERSION' || $Error
#perl -MHTTP::Response -e 'print $HTTP::Response::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MHTTP::Response -e 'print $HTTP::Response::VERSION' || $Error

#perl -MHTTP::Date -e 'print $HTTP::Date::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MHTTP::Date -e 'print $HTTP::Date::VERSION' || $Error

#perl -MHTTP::Cookies -e 'print $HTTP::Cookies::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MHTTP::Cookies -e 'print $HTTP::Cookies::VERSION' || $Error

#perl -MLWP::UserAgent -e 'print $LWP::UserAgent::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MLWP::UserAgent -e 'print $LWP::UserAgent::VERSION' || $Error
#perl -MLWP -e 'print $LWP::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MLWP -e 'print $LWP::VERSION' || $Error

#perl -MMozilla::CA -e 'print $Mozilla::CA::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MMozilla::CA -e 'print $Mozilla::CA::VERSION' || $Error

#perl -MNet::HTTPS -e 'print $Net::HTTPS::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MNet::HTTPS -e 'print $Net::HTTPS::VERSION' || $Error

#perl -MLWP::Protocol::https -e 'print $LWP::Protocol::https::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MLWP::Protocol::https -e 'print $LWP::Protocol::https::VERSION' || $Error

export PERL5LIB=/usr/local/share/perl5.update/lib/perl5

viperl-support --help || $Error
vicfg-dumppart --help || $Error
vicfg-snmp --help || $Error
vicfg-nas --help || $Error
vicfg-user --help || $Error
vicfg-syslog --help || $Error
vicfg-nics --help || $Error
vicfg-module --help || $Error
vicfg-ntp --help || $Error
vicfg-ipsec --help || $Error
vicfg-advcfg --help || $Error
vicfg-scsidevs --help || $Error
vicfg-mpath35 --help || $Error
vicfg-vmknic --help || $Error
vicfg-route --help || $Error
vicfg-rescan --help || $Error
vicfg-volume --help || $Error
vicfg-cfgbackup --help || $Error
vicfg-authconfig --help || $Error
vicfg-dns --help || $Error
vicfg-vswitch --help || $Error
vicfg-mpath --help || $Error
vicfg-iscsi --help || $Error
vicfg-hostops --help || $Error
vmware-cmd --help || $Error
vihostupdate --help || $Error
svmotion --help || $Error
vihostupdate35 --help || $Error
vifs --help || $Error
vmkfstools --help || $Error
resxtop --help || $Error
#sudo vmware-uninstall-vSphere-CLI.pl || $Error

echo "[ $ErrorCount ]"

esxcli --help || $Error




ここからの話は作業用マシンの作業となります。「後述」するとしていた部分の話です。
インストール先のマシンとしては「Core」グループのパッケージしかインストールされていない環境で確認しました。作業用マシンには、追加で以下のコマンドを実行してあります。

sudo yum groupinstall Base "Development Tools"
sudo yum install libuuid-devel perl-ExtUtils-MakeMaker perl-Test-Simple

cpan2rpmをインストールします。RHEL6ではコマンドを書き換える必要があります。

wget http://ftp.arix.com/cpan2rpm-2.028-1.noarch.rpm
sudo rpm -ivh cpan2rpm-2.028-1.noarch.rpm
sudo sed -i -e 's!Pod::Text!Pod::Parser!' /usr/bin/cpan2rpm

ホームディレクトリにrpmbuildディレクトリ、.rpmmacrosファイルがない場合、最初に以下のコマンドを実行してこれらを作成します。

cpan2rpm --mk-rpm-dirs=~/rpmbuild

パッケージを作成します。

cpan2rpm --no-sign --requires=perl,libuuid --buildrequires=perl-ExtUtils-MakeMaker,libuuid-devel UUID

出来上がったRPMパッケージ~/rpmbuild/RPMS/x86_64/perl-UUID-0.05-1.x86_64.rpmをインストール先マシンにコピーします。

アップデートが必要なパッケージを/usr/local/share/perl5.update/にインストールし、tarで固めインストール先マシンにコピーします。


print_error_message_and_sleep()
{
  local R=$?
  local E="###### Error "
  E="$E$E$E$E$E$E$E$E$E$E"
  echo "$E$E$E$E$E$E [$R] $*" | tee -a /proc/self/fd/2
  sleep 10
  ErrorCount=$((ErrorCount+1))
  return $R
}
Error=print_error_message_and_sleep

sudo mkdir -p /usr/local/share/perl5.update/ || $Error

wget http://search.cpan.org//CPAN/authors/id/J/JP/JPEACOCK/version-0.9902.tar.gz || $Error
tar xzvf version-0.9902.tar.gz || $Error
cd version-0.9902 || $Error
perl Makefile.PL INSTALL_BASE=/usr/local/share/perl5.update/ || $Error
make || $Error
make test || $Error
sudo make install || $Error
cd .. || $Error
perl -Mversion -e 'print $version::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -Mversion -e 'print $version::VERSION' || $Error

wget http://www.cpan.org/authors/id/P/PM/PMQS/Compress-Raw-Zlib-2.060.tar.gz || $Error
tar xzvf Compress-Raw-Zlib-2.060.tar.gz || $Error
cd Compress-Raw-Zlib-2.060 || $Error
perl Makefile.PL INSTALL_BASE=/usr/local/share/perl5.update/ || $Error
make || $Error
make test || $Error
sudo make install || $Error
cd .. || $Error
perl -MCompress::Raw::Zlib -e 'print $Compress::Raw::Zlib::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MCompress::Raw::Zlib -e 'print $Compress::Raw::Zlib::VERSION' || $Error

wget http://www.cpan.org/authors/id/P/PM/PMQS/Compress-Raw-Bzip2-2.060.tar.gz || $Error
tar xzvf Compress-Raw-Bzip2-2.060.tar.gz || $Error
cd Compress-Raw-Bzip2-2.060 || $Error
perl Makefile.PL INSTALL_BASE=/usr/local/share/perl5.update/ || $Error
make || $Error
make test || $Error
sudo make install || $Error
cd .. || $Error
#perl -MCompress::Raw::Bzip2 -e 'print $Compress::Raw::Bzip2::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MCompress::Raw::Bzip2 -e 'print $Compress::Raw::Bzip2::VERSION' || $Error

wget http://www.cpan.org/authors/id/P/PM/PMQS/IO-Compress-2.060.tar.gz || $Error
tar xzvf IO-Compress-2.060.tar.gz || $Error
cd IO-Compress-2.060 || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl Makefile.PL INSTALL_BASE=/usr/local/share/perl5.update/ || $Error
make || $Error
#make test || $Error
sudo make install || $Error
cd .. || $Error
perl -MIO::Compress::Base -e 'print $IO::Compress::Base::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MIO::Compress::Base -e 'print $IO::Compress::Base::VERSION' || $Error
perl -MIO::Compress::Zlib::Constants -e 'print $IO::Compress::Zlib::Constants::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MIO::Compress::Zlib::Constants -e 'print $IO::Compress::Zlib::Constants::VERSION' || $Error
perl -MCompress::Zlib -e 'print $Compress::Zlib::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MCompress::Zlib -e 'print $Compress::Zlib::VERSION' || $Error

wget http://www.cpan.org/authors/id/G/GA/GAAS/HTML-Parser-3.70.tar.gz || $Error
tar xzvf HTML-Parser-3.70.tar.gz || $Error
cd HTML-Parser-3.70 || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl Makefile.PL INSTALL_BASE=/usr/local/share/perl5.update/ || $Error
make || $Error
make test || $Error
sudo make install || $Error
cd .. || $Error
perl -MHTML::Parser -e 'print $HTML::Parser::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MHTML::Parser -e 'print $HTML::Parser::VERSION' || $Error

wget http://www.cpan.org/authors/id/M/MI/MIKEM/Net-SSLeay-1.54.tar.gz || $Error
tar xzvf Net-SSLeay-1.54.tar.gz || $Error
cd Net-SSLeay-1.54 || $Error
yes | PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl Makefile.PL INSTALL_BASE=/usr/local/share/perl5.update/ || $Error
make || $Error
make test || $Error
sudo make install || $Error
cd .. || $Error
#perl -MNet::SSLeay -e 'print $Net::SSLeay::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MNet::SSLeay -e 'print $Net::SSLeay::VERSION' || $Error

wget http://www.cpan.org/authors/id/S/SU/SULLR/IO-Socket-SSL-1.84.tar.gz || $Error
tar xzvf IO-Socket-SSL-1.84.tar.gz || $Error
cd IO-Socket-SSL-1.84 || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl Makefile.PL INSTALL_BASE=/usr/local/share/perl5.update/ || $Error
make || $Error
#make test || $Error
sudo make install || $Error
cd ..
#perl -MIO::Socket::SSL -e 'print $IO::Socket::SSL::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MIO::Socket::SSL -e 'print $IO::Socket::SSL::VERSION' || $Error

wget http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Message-6.06.tar.gz || $Error
tar xzvf HTTP-Message-6.06.tar.gz || $Error
cd HTTP-Message-6.06 || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl Makefile.PL INSTALL_BASE=/usr/local/share/perl5.update/ || $Error
make || $Error
#make test || $Error
sudo make install || $Error
cd .. || $Error
#perl -MHTTP::Request -e 'print $HTTP::Request::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MHTTP::Request -e 'print $HTTP::Request::VERSION' || $Error
#perl -MHTTP::Response -e 'print $HTTP::Response::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MHTTP::Response -e 'print $HTTP::Response::VERSION' || $Error

wget http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Date-6.02.tar.gz || $Error
tar xzvf HTTP-Date-6.02.tar.gz || $Error
cd HTTP-Date-6.02 || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl Makefile.PL INSTALL_BASE=/usr/local/share/perl5.update/ || $Error
make || $Error
make test || $Error
sudo make install || $Error
cd .. || $Error
#perl -MHTTP::Date -e 'print $HTTP::Date::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MHTTP::Date -e 'print $HTTP::Date::VERSION' || $Error

wget http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Cookies-6.01.tar.gz || $Error
tar xzvf HTTP-Cookies-6.01.tar.gz || $Error
cd HTTP-Cookies-6.01 || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl Makefile.PL INSTALL_BASE=/usr/local/share/perl5.update/ || $Error
make || $Error
make test || $Error
sudo make install || $Error
cd .. || $Error
#perl -MHTTP::Cookies -e 'print $HTTP::Cookies::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MHTTP::Cookies -e 'print $HTTP::Cookies::VERSION' || $Error

wget http://www.cpan.org/authors/id/G/GA/GAAS/libwww-perl-6.05.tar.gz || $Error
tar xzvf libwww-perl-6.05.tar.gz || $Error
cd libwww-perl-6.05 || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl Makefile.PL INSTALL_BASE=/usr/local/share/perl5.update/ || $Error
make || $Error
#make test || $Error
sudo make install || $Error
cd .. || $Error
perl -MLWP::UserAgent -e 'print $LWP::UserAgent::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MLWP::UserAgent -e 'print $LWP::UserAgent::VERSION' || $Error
perl -MLWP -e 'print $LWP::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MLWP -e 'print $LWP::VERSION' || $Error

wget http://www.cpan.org/authors/id/A/AB/ABH/Mozilla-CA-20130114.tar.gz || $Error
tar xzvf Mozilla-CA-20130114.tar.gz || $Error
cd Mozilla-CA-20130114 || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl Makefile.PL INSTALL_BASE=/usr/local/share/perl5.update/ || $Error
make || $Error
make test || $Error
sudo make install || $Error
cd .. || $Error
#perl -MMozilla::CA -e 'print $Mozilla::CA::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MMozilla::CA -e 'print $Mozilla::CA::VERSION' || $Error

wget http://www.cpan.org/authors/id/G/GA/GAAS/Net-HTTP-6.06.tar.gz || $Error
tar xzvf Net-HTTP-6.06.tar.gz || $Error
cd Net-HTTP-6.06 || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl Makefile.PL INSTALL_BASE=/usr/local/share/perl5.update/ || $Error
make || $Error
make test || $Error
sudo make install || $Error
cd .. || $Error
perl -MNet::HTTPS -e 'print $Net::HTTPS::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MNet::HTTPS -e 'print $Net::HTTPS::VERSION' || $Error

wget http://www.cpan.org/authors/id/G/GA/GAAS/LWP-Protocol-https-6.03.tar.gz || $Error
tar xzvf LWP-Protocol-https-6.03.tar.gz || $Error
cd LWP-Protocol-https-6.03 || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl Makefile.PL INSTALL_BASE=/usr/local/share/perl5.update/ || $Error
make || $Error
#make test || $Error
sudo make install || $Error
cd .. || $Error
perl -MLWP::Protocol::https -e 'print $LWP::Protocol::https::VERSION' || $Error
PERL5LIB=/usr/local/share/perl5.update/lib/perl5 perl -MLWP::Protocol::https -e 'print $LWP::Protocol::https::VERSION' || $Error

pushd / || $Error; tar czvf ~/perl5.update.tar.gz usr/local/share/perl5.update || $Error; popd || $Error

echo "[ $ErrorCount ]"


0 件のコメント:

コメントを投稿