2014年4月16日水曜日
cpanmin.usのインストールで”Can't locate ExtUtils/Manifest.pm”と言われたとき
cpanmin.usのインストールで”Can't locate ExtUtils/Manifest.pm”と言われたときは、”perl-ExtUtils-Manifest”をインストールしてあげましょう。
# cat /etc/redhat-release
CentOS release 6.5 (Final)
# curl -L http://cpanmin.us | perl - --sudo App::cpanminus
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 262k 100 262k 0 0 830k 0 --:--:-- --:--:-- --:--:-- 830k
--> Working on App::cpanminus
Fetching http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7001.tar.gz ... OK
Configuring App-cpanminus-1.7001 ... N/A
Can't locate ExtUtils/Manifest.pm in @INC (@INC contains: CODE(0x1f76c48) /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /loader/0x1f76c48/App/cpanminus/script.pm line 99.
# yum install perl-ExtUtils-Manifest
簡単ですね!
2014年4月8日火曜日
OpenSSLのHeartbleed問題を解決する。CentOS 6.5編
『OpenSSLの重大バグが発覚。インターネットの大部分に影響の可能性』
http://jp.techcrunch.com/2014/04/08/20140407massive-security-bug-in-openssl-could-effect-a-huge-chunk-of-the-internet/
本日こちらの記事が話題になりました。
CentOSの対応状況については、本家のフォーラムが参考になります。
『heartbleed openssl bug, need 1.0.1g openssl version』
https://www.centos.org/forums/viewtopic.php?f=9&t=45814
日本語の情報だと、こちらが詳しいです。
『 CVE-2014-0160 OpenSSL Heartbleed 脆弱性まとめ』
http://d.hatena.ne.jp/nekoruri/20140408/heartbleed
『Heartbleed脆弱性と、その背後にあるWebアプリケーションアーキテクチャの一般的欠陥について』
http://blog.kazuhooku.com/2014/04/heartbleedweb.html
以下は、OSがCentOS 6.5の場合のHTTPサーバの解決方法です。
Apacheの場合
# yum update openssl mod_ssl
# /etc/init.d/httpd restart
Nginxの場合
# yum update openssl nginx
# /etc/init.d/nginx restart
確認方法
openssl-1.0.1e-16.el6_5.7以上がインストールされればOKです。
# yum list installed | grep openssl
openssl.x86_64 1.0.1e-16.el6_5.7
openssl-devel.x86_64 1.0.1e-16.el6_5.7
# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
とくに、OpenSSLのバージョンは変わっていないので注意。
正しくアップデートされたかどうか、こちらのページでチェックできます。
イタリアのFilippo Valsordaさんが作った『Heartbleed test』です。
http://filippo.io/Heartbleed/
例えば、フォームに”www.blogger.com”と入れて[Go!]を押します。
”All good, www.blogger.com seems not affected!”と出たらOKです。
HTTPサーバ側の設定は上記で完了です。
安全のため、証明書を再発行&再設定しておきましょう。
間違っていたら教えてください。
http://jp.techcrunch.com/2014/04/08/20140407massive-security-bug-in-openssl-could-effect-a-huge-chunk-of-the-internet/
本日こちらの記事が話題になりました。
CentOSの対応状況については、本家のフォーラムが参考になります。
『heartbleed openssl bug, need 1.0.1g openssl version』
https://www.centos.org/forums/viewtopic.php?f=9&t=45814
日本語の情報だと、こちらが詳しいです。
『 CVE-2014-0160 OpenSSL Heartbleed 脆弱性まとめ』
http://d.hatena.ne.jp/nekoruri/20140408/heartbleed
『Heartbleed脆弱性と、その背後にあるWebアプリケーションアーキテクチャの一般的欠陥について』
http://blog.kazuhooku.com/2014/04/heartbleedweb.html
以下は、OSがCentOS 6.5の場合のHTTPサーバの解決方法です。
Apacheの場合
# yum update openssl mod_ssl
# /etc/init.d/httpd restart
Nginxの場合
# yum update openssl nginx
# /etc/init.d/nginx restart
確認方法
openssl-1.0.1e-16.el6_5.7以上がインストールされればOKです。
openssl.x86_64 1.0.1e-16.el6_5.7
openssl-devel.x86_64 1.0.1e-16.el6_5.7
# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
とくに、OpenSSLのバージョンは変わっていないので注意。
イタリアのFilippo Valsordaさんが作った『Heartbleed test』です。
http://filippo.io/Heartbleed/
例えば、フォームに”www.blogger.com”と入れて[Go!]を押します。
”All good, www.blogger.com seems not affected!”と出たらOKです。
HTTPサーバ側の設定は上記で完了です。
安全のため、証明書を再発行&再設定しておきましょう。
間違っていたら教えてください。
2014年4月7日月曜日
Apache ThriftをCentOS6にインストール
Apache Thrift(http://thrift.apache.org/)をCentOS6にインストールしようとしたのですが、エラーが出て一瞬ハマったので正解をメモしておきます。
Thriftインストールが駄目なパターン
# ./configure
# make
~~~~
libtool: link: g++ -Wall -g -O2 -o .libs/TutorialClient CppClient.o -L/usr/lib ./.libs/libtutorialgencpp.a /usr/local/src/thrift-0.9.1/lib/cpp/.libs/libthrift.so ../../lib/cpp/.libs/libthrift.so -lssl -lcrypto -lrt -lpthread -Wl,-rpath -Wl,/usr/local/lib
make[3]: ディレクトリ `/usr/local/src/thrift-0.9.1/tutorial/cpp' から出ます
Making all in py
make[3]: ディレクトリ `/usr/local/src/thrift-0.9.1/tutorial/py' に入ります
../../compiler/cpp/thrift --gen py -r ../../tutorial/tutorial.thrift
make[3]: ディレクトリ `/usr/local/src/thrift-0.9.1/tutorial/py' から出ます
Making all in py.twisted
make[3]: ディレクトリ `/usr/local/src/thrift-0.9.1/tutorial/py.twisted' に入ります
../../compiler/cpp/thrift --gen py:twisted -r ../../tutorial/tutorial.thrift
make[3]: ディレクトリ `/usr/local/src/thrift-0.9.1/tutorial/py.twisted' から出ます
Making all in py.tornado
make[3]: ディレクトリ `/usr/local/src/thrift-0.9.1/tutorial/py.tornado' に入ります
../../compiler/cpp/thrift --gen py:tornado -r ../../tutorial/tutorial.thrift
make[3]: ディレクトリ `/usr/local/src/thrift-0.9.1/tutorial/py.tornado' から出ます
make[3]: ディレクトリ `/usr/local/src/thrift-0.9.1/tutorial' に入ります
../compiler/cpp/thrift --gen html -r ../tutorial/tutorial.thrift
make[3]: ディレクトリ `/usr/local/src/thrift-0.9.1/tutorial' から出ます
make[2]: ディレクトリ `/usr/local/src/thrift-0.9.1/tutorial' から出ます
Making all in test
make[2]: ディレクトリ `/usr/local/src/thrift-0.9.1/test' に入ります
Making all in nodejs
make[3]: ディレクトリ `/usr/local/src/thrift-0.9.1/test/nodejs' に入ります
make[3]: `all' に対して行うべき事はありません.
make[3]: ディレクトリ `/usr/local/src/thrift-0.9.1/test/nodejs' から出ます
Making all in cpp
make[3]: ディレクトリ `/usr/local/src/thrift-0.9.1/test/cpp' に入ります
Makefile:832: 警告: ターゲット `gen-cpp/ThriftTest.cpp' へのコマンドを置き換えます
Makefile:829: 警告: ターゲット `gen-cpp/ThriftTest.cpp' への古いコマンドは無視されます
/bin/sh ../../libtool --tag=CXX --mode=link g++ -Wall -g -O2 -L/usr/lib -o libtestgencpp.la ThriftTest_constants.lo ThriftTest_types.lo ../../lib/cpp/libthrift.la -lssl -lcrypto -lrt -lpthread
libtool: link: ar cru .libs/libtestgencpp.a .libs/ThriftTest_constants.o .libs/ThriftTest_types.o
ar: .libs/ThriftTest_constants.o: No such file or directory
make[3]: *** [libtestgencpp.la] エラー 1
make[3]: ディレクトリ `/usr/local/src/thrift-0.9.1/test/cpp' から出ます
make[2]: *** [all-recursive] エラー 1
make[2]: ディレクトリ `/usr/local/src/thrift-0.9.1/test' から出ます
make[1]: *** [all-recursive] エラー 1
make[1]: ディレクトリ `/usr/local/src/thrift-0.9.1' から出ます
make: *** [all] エラー 2
Thriftインストールが成功するパターン
configure時にオプションを追加します。
cppのライブラリのインストールをスルーしています。
# wget http://ftp.kddilabs.jp/infosystems/apache/thrift/0.9.1/thrift-0.9.1.tar.gz
# tar vzxf thrift-0.9.1.tar.gz
# ./configure --with-cpp=no
# make
# make install
# ln -s /usr/local/bin/thrift /usr/bin/thrift
GitHubにFabricスクリプトを置いておきました。
https://github.com/takeshiyako2/fabric-scripts/blob/master/centos6-thrift.py
2014年4月4日金曜日
Amazon EC2でTCPポート枯渇を防ぐために、Linuxカーネルをチューニング
Linuxカーネルの"TCP_TIMEWAIT_LEN"をチューニングして、TCPポートの枯渇を防ぐ方法を紹介します。
大量トラフィックを捌くサーバにありがちなのですが、
# netstat | grep tcp | wc -lTCPポートの接続状況が60000 とかになっていると、ポートが枯渇してTCPコネクションが詰まっている状態です。
そこで、TIME_WAIT となったセッションを早く終了させ、ポートの空きを作って、ポートの枯渇状態を解決します。
Linux kernelのTCP_TIMEWAIT_LENを60 -> 5にします。
環境は、Amazon EC2のCentOS6.6です。
AMIは、こちらです。
https://aws.amazon.com/marketplace/pp/B00NQAYLWO
AWS Marketplace - CentOS 6 (x86_64) - with Updates HVM Linux/Unix, CentOS 6 | 64-bit Amazon Machine Image (AMI) | Updated: 9/29/14 Instance Type: c3.4xlarge EBS: General Purpose (SSD)
カーネルのリビルド時には10Gほど使用するので、ディスクサイズは多めに設定して起動します。
あらかじめ、ディスクサイズを増加させておきます。下記参照。
EC2のCentOS6 HVMでresize2fs "Nothing to do!"と言われたとき
http://takeshiyako.blogspot.jp/2014/12/ec2centos6-hvmresize2fs-nothing-to-do.html
ライブラリをアップデート。
# yum -y update # yum -y install gcc wget rpm-build.x86_64 redhat-rpm-config.noarch patchutils.x86_64 elfutils-libelf-devel.x86_64 binutils-devel.x86_64 hmaccalc.x86_64 rng-tools.x86_64 # yum -y install redhat-rpm-config patchutils xmlto asciidoc binutils-devel newt-devel python-devel perl-ExtUtils-Embed bison flex hmaccalc elfutils-devel audit-libs-devel bfa-firmware # reboot
カーネルのバージョンを確認。
# cat /proc/version Linux version 2.6.32-431.29.2.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Tue Sep 9 21:36:05 UTC 2014
カーネルの最新バージョンを探します。
http://vault.centos.org/6.6/updates/Source/SPackages/
kernel-2.6.32-504.8.1.el6.src.rpmm
こちらが最新でした。
ダウンロードします。
# cd /usr/local/src # curl -O http://vault.centos.org/6.6/updates/Source/SPackages/kernel-2.6.32-504.8.1.el6.src.rpm
パッチを作成。
# rpm -ivh kernel-2.6.32-504.8.1.el6.src.rpm # cd ~/rpmbuild/SOURCES/ # cp linux-2.6.32-504.8.1.el6.tar.bz2 /tmp # cd /tmp # tar xjvf linux-2.6.32-504.8.1.el6.tar.bz2 # mv linux-2.6.32-504.8.1.el6 linux-2.6.32-504.8.1.namibuild.el6 # cd linux-2.6.32-504.8.1.namibuild.el6
Makefileファイルを編集。
# vim Makefile EXTRAVERSION = -> EXTRAVERSION = -504.8.1.namibuild.el6
tcp.hファイルを編集。
# vim include/net/tcp.h #define TCP_TIMEWAIT_LEN (60*HZ) -> #define TCP_TIMEWAIT_LEN (5*HZ)
圧縮してコピー。
# cd .. # tar cjvf linux-2.6.32-504.8.1.namibuild.el6.tar.bz2 linux-2.6.32-504.8.1.namibuild.el6 # cp linux-2.6.32-504.8.1.namibuild.el6.tar.bz2 ~/rpmbuild/SOURCES/ # cd ~/rpmbuild/SPECS/
kernel.specファイルを編集。
# vim kernel.spec %define distro_build 504.8.1 -> %define distro_build 504.8.1.namibuild %define kversion 2.6.32-504.8.1.el6 -> %define kversion 2.6.32-504.8.1.namibuild.el6 Source0: linux-2.6.32-504.8.1.el6.tar.bz2 -> Source0: linux-2.6.32-504.8.1.namibuild.el6.tar.bz2
カーネルをビルドする。結構時間がかかります。(c3.4xlargeで30分ほど)
# rpmbuild -bb --with firmware kernel.spec
ビルドしたカネールをインストール。
# cd ../RPMS/x86_64/ # rpm -Uvh kernel-2.6.32-504.8.1.namibuild.el6.x86_64.rpm kernel-devel-2.6.32-504.8.1.namibuild.el6.x86_64.rpm kernel-headers-2.6.32-504.8.1.namibuild.el6.x86_64.rpm kernel-firmware-2.6.32-504.8.1.namibuild.el6.x86_64.rpm # reboot
カネールを確認。
# cat /proc/version Linux version 2.6.32-504.8.1.namibuild.el6.x86_64 (root@ip-172-31-19-117.ap-northeast-1.compute.internal) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Thu Dec 25 07:43:14 UTC 2014ベンチマークをしたりして、ポートの空きが早くできているか確認してみましょう。
Enjoy!
参考)
TIME_WAIT状態のTCPコネクションを早く終了させるべくKernelをリビルド
http://d.hatena.ne.jp/rx7/20131204/p1
kernelをチューニングしてTIME_WAIT値を変更する - メモとかそんな感じなやつ
http://sarface2012.hatenablog.com/entry/2012/11/15/225509
TIME_WAITのチューニングとkernelリビルド for CentOS 6.0 - 逆襲のWebエンジニア
http://d.hatena.ne.jp/ono51/20111012/p1
※ See also.
革命の日々! Linuxカーネルの「TCP_TIMEWAIT_LEN」変更は無意味? の件について
http://mkosaki.blog46.fc2.com/blog-entry-1292.html
Linux - ぜんぶTIME_WAITのせいだ! - Qiita
http://qiita.com/kuni-nakaji/items/c07004c7d9e5bb683bc2
isucon3_cheatsheet/02.kernel.md at master · sonots/isucon3_cheatsheet
https://github.com/sonots/isucon3_cheatsheet/blob/master/02.kernel.md
http://sarface2012.hatenablog.com/entry/2012/11/15/225509
TIME_WAITのチューニングとkernelリビルド for CentOS 6.0 - 逆襲のWebエンジニア
http://d.hatena.ne.jp/ono51/20111012/p1
※ See also.
革命の日々! Linuxカーネルの「TCP_TIMEWAIT_LEN」変更は無意味? の件について
http://mkosaki.blog46.fc2.com/blog-entry-1292.html
Linux - ぜんぶTIME_WAITのせいだ! - Qiita
http://qiita.com/kuni-nakaji/items/c07004c7d9e5bb683bc2
isucon3_cheatsheet/02.kernel.md at master · sonots/isucon3_cheatsheet
https://github.com/sonots/isucon3_cheatsheet/blob/master/02.kernel.md
登録:
投稿 (Atom)