<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8005179850861707811</id><updated>2012-02-27T16:00:55.763+09:00</updated><category term='OpenShift'/><category term='RHEL'/><category term='Fake OSX'/><category term='仮想化'/><category term='Postfix'/><category term='Comice OS'/><category term='ports'/><category term='RPM'/><category term='バックアップ'/><category term='デスクトップ'/><category term='KVM'/><category term='RHEL4'/><category term='Git'/><category term='Mac'/><category term='Mac OS X'/><category term='prelink'/><category term='vim'/><category term='Apache'/><category term='openSUSE'/><category term='EC2'/><category term='libvirt'/><category term='Linux コマンド動作徹底解析'/><category term='bind'/><category term='Homebrew'/><category term='ZFS'/><category term='LVM2'/><category term='Zabbix'/><category term='セキュリティ'/><category term='SSH'/><category term='LVM'/><category term='ソースコード解析'/><category term='Debian'/><category term='SLES'/><category term='OpenLDAP'/><category term='sendmail'/><category term='RHEL5'/><category term='LDAP'/><category term='AWS'/><category term='Amazon Linux'/><category term='Haskell'/><category term='Tomcat'/><category term='IaaS'/><category term='PostgreSQL'/><category term='Ruby'/><category term='Linux'/><category term='CentOS 6'/><category term='Scientific Linux 6'/><category term='cscope'/><category term='Ubuntu'/><category term='RHEL6'/><category term='Puppet'/><category term='クラウド'/><category term='ネットワーク'/><category term='OpenSSH'/><category term='Postgres Plus'/><title type='text'>SIOS "OSSよろず" ブログ出張所</title><subtitle type='html'>サイオステクノロジーのOSS技術者による技術メモ</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>56</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-3221752062147727428</id><published>2012-02-27T16:00:00.000+09:00</published><updated>2012-02-27T16:00:55.878+09:00</updated><title type='text'>Trouble-Maker モジュールを作成しました</title><content type='html'>&lt;p&gt;2月がそろそろ終わり、暖かな春が訪れることを心待ちにしている鎌田です。&lt;/p&gt;&lt;p&gt;以前、「&lt;a href="http://sios-oss.blogspot.com/2011/12/trouble-maker.html"&gt;Trouble Maker を触ってみました&lt;/a&gt;」という記事で Trouble-Maker を軽く触りましたが、今回は Trouble-Maker のトラブルを引き起こすモジュールを作成しました。&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;dl&gt;&lt;dt&gt;SIOS-OSS / sios-troublemaker-modules&lt;/dt&gt;&lt;dd&gt;&lt;a href="https://github.com/SIOS-OSS/sios-troublemaker-modules"&gt;https://github.com/SIOS-OSS/sios-troublemaker-modules&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;この記事を公開する時点ではまだモジュールが1つしかありませんが、今後増やしていく予定です。また、現時点では対応 OS は RHEL5 とそれに準ずるクローン OS のみです。&lt;/p&gt;&lt;h2&gt;Trouble-Maker のインストール方法 (おさらい)&lt;/h2&gt;&lt;p&gt;以前の記事のインストール方法は大きく変わりませんが、RHEL に含まれていないモジュールを RPMforge から入手するという方法を紹介していましたが、今回は Fedora プロジェクトで RHEL 向けにメンテナンスしている EPEL を使う方法を紹介します。&lt;/p&gt;&lt;pre&gt;# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm&lt;br /&gt;# yum install perl-Archive-Tar perl-YAML&lt;br /&gt;# wget http://sourceforge.net/projects/trouble-maker/files/trouble-maker/0.11/trouble-maker-0.11.tgz/download&lt;br /&gt;# cd /&lt;br /&gt;# tar xzvf /path/to/trouble-maker-0.11.tgz&lt;/pre&gt;&lt;h2&gt;モジュールのインストール方法&lt;/h2&gt;&lt;p&gt;今回、モジュールを github で公開していますので、入手に git コマンドが必要になります。EPEL に git が存在しますので、以下のように yum コマンドでインストールしてください。&lt;/p&gt;&lt;pre&gt;# yum install git&lt;/pre&gt;&lt;p&gt;次に、以下のコマンドを実行し、github から Trouble-Maker モジュールを入手します。&lt;/p&gt;&lt;pre&gt;# git clone http://github.com/SIOS-OSS/sios-troublemaker-modules.git&lt;/pre&gt;&lt;p&gt;これで、カレントディレクトリに sios-troublemaker-modules というディレクトリが作成され、その中には今回公開した Trouble-Maker モジュールが含まれています。&lt;/p&gt;&lt;p&gt;次に、入手した Trouble-Maker モジュールをインストールします。以下のコマンドを実行してください。&lt;/p&gt;&lt;pre&gt;# /usr/local/trouble-maker/bin/pack_kitbag.pl ./sios-troublemaker-modules/ /usr/local/trouble-maker/kitbag/&lt;/pre&gt;&lt;p&gt;これで Trouble-Maker モジュールのインストールが完了しました。&lt;/p&gt;&lt;p&gt;今回公開したモジュールは1つだけですので、試される方は以下のコマンドを実行してトラブルを発生させてください。&lt;/p&gt;&lt;pre&gt;# /usr/local/trouble-maker/bin/trouble-maker.pl  --version=RHEL_5 --selection=dns-cannot_resolve&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-3221752062147727428?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/3221752062147727428/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/trouble-maker.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/3221752062147727428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/3221752062147727428'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/trouble-maker.html' title='Trouble-Maker モジュールを作成しました'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-4085537640743372467</id><published>2012-02-23T13:00:00.000+09:00</published><updated>2012-02-23T13:00:00.674+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Fake OSX'/><category scheme='http://www.blogger.com/atom/ns#' term='Comice OS'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Mac 風 Linux をインストールしてみました</title><content type='html'>&lt;p&gt;ご無沙汰しております、サイオステクノロジーの稲垣です。&lt;/p&gt;&lt;p&gt;先日某 IT ニュースサイトで Mac 風 Linux を見かけたので、気になってインストールしてみました。&lt;br /&gt;今回はインストールのみで、ほとんどいじっていません。触れてみた感想については又の機会に…。&lt;/p&gt;&lt;p&gt;今回インストールしてみたのは、この 2 つの OS です。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Comice OS 4.0&lt;/li&gt;&lt;li&gt;Fake OSX&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;small&gt;※Comice OS は、Pear OS の後継にあたるものです。&lt;/small&gt;&lt;/p&gt;&lt;p&gt;ログイン後のデスクトップ画像を比較してみましょう。&lt;/p&gt;&lt;p&gt;まずは Comice OS からいきます。&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-G3F2iRkH7Mk/T0SLoib6YgI/AAAAAAAAAFs/ezwjxMu9fZU/s1600/comice.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="240" width="320" src="http://3.bp.blogspot.com/-G3F2iRkH7Mk/T0SLoib6YgI/AAAAAAAAAFs/ezwjxMu9fZU/s320/comice.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Dock もそうですが、Mac の App Store の様なアイコンの Pear Appstore というものまであります。&lt;/p&gt;&lt;p&gt;そして左上に注目してください。なんと Apple のものにそっくりなロゴがあります。comice は洋梨の品種みたいなので、このロゴは洋梨ということで間違いないでしょう。それにしても林檎と洋梨…似てますね。&lt;/p&gt;&lt;p&gt;次は Fake OSX のデスクトップ画面です。&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-MWFfgszTuus/T0SLzKv9sqI/AAAAAAAAAF4/cQ_y9r2_C2Q/s1600/fak.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="240" width="320" src="http://4.bp.blogspot.com/-MWFfgszTuus/T0SLzKv9sqI/AAAAAAAAAF4/cQ_y9r2_C2Q/s320/fak.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-hF5_HcWuVs8/T0SL1w19CXI/AAAAAAAAAGE/Mvi8k7-QSt8/s1600/fake.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="240" width="320" src="http://3.bp.blogspot.com/-hF5_HcWuVs8/T0SL1w19CXI/AAAAAAAAAGE/Mvi8k7-QSt8/s320/fake.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;こちらは Comice OS 以上にアイコンが似ているものが多いです。Mac の Finder、メールのアイコンなどですね。2 枚目の画像には、新旧 iTunes のアイコンまであります。&lt;/p&gt;&lt;p&gt;両方共 Mac OS に似ている部分はありますが、個人的には Dock と洋梨のロゴが決め手で Comice OS の方がより似ている気がします。&lt;/p&gt;&lt;p&gt;ちなみにこれらの OS は Ubuntu がベースとなっているので、Ubuntu 使いで気になった方はぜひ試してみてください。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-4085537640743372467?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/4085537640743372467/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/mac-linux.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/4085537640743372467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/4085537640743372467'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/mac-linux.html' title='Mac 風 Linux をインストールしてみました'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-G3F2iRkH7Mk/T0SLoib6YgI/AAAAAAAAAFs/ezwjxMu9fZU/s72-c/comice.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-4972644089867286429</id><published>2012-02-22T12:00:00.000+09:00</published><updated>2012-02-22T13:07:31.918+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bind'/><title type='text'>サブドメインの管理を委任する</title><content type='html'>&lt;div&gt; こんにちは。サイオステクノロジーの小川です。 &lt;/div&gt;&lt;br /&gt;&lt;div&gt; &lt;a href="http://sios-oss.blogspot.com/2012/02/google-apps-bind9.html"&gt;Google Appsを導入しよう(BIND9設定編) &lt;/a&gt;では、DNSサーバのマスター、スレーブの構築方法を紹介をしました。今回は、サブドメインの管理を別のDNSサーバに委任する方法について簡単に紹介をします。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;サブドメインの管理を委任する目的として、組織のゾーンが大きくなったときに DNSサーバの管理の負担を減らすことや、ネットワークのトラフィックを分散させること、等が挙げられます。&lt;/div&gt;&lt;br/&gt;&lt;div&gt;例として、ある組織 (example.com) に OSS という組織が新設されたので、oss.example.com のサブドメインを追加します。サブドメインの管理は別のDNSサーバに委任します。&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;font size="4"&gt;&lt;b&gt;マスターサーバの設定例&lt;/b&gt;&lt;/font&gt;&lt;/li&gt;&lt;br /&gt;&lt;div&gt;ゾーンデータファイルを編集します。&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# vim example.com.db&lt;br /&gt;&lt;/pre&gt;&lt;div&gt; &lt; ゾーンデータファイルの記述例 &gt; &lt;/div&gt;&lt;pre&gt;&lt;br /&gt;$TTL 86400&lt;br /&gt;@                     IN  SOA    ns1 root (&lt;br /&gt;                      2012022001 ; Serial&lt;br /&gt;                      10800      ; Refresh   &lt;br /&gt;                      3600       ; Retry     &lt;br /&gt;                      604800     ; Expire   &lt;br /&gt;                      86400 )    ; Minimum&lt;br /&gt;&lt;br /&gt;                      IN NS      ns1&lt;br /&gt;                      IN NS      ns2&lt;br /&gt;ns1                   IN A       xxx.xxx.xxx.147 ; マスターサーバ&lt;br /&gt;ns2                   IN A       xxx.xxx.xxx.91 ; スレーブサーバ&lt;br /&gt;&lt;br /&gt;ns1.oss               IN A       xxx.xxx.xxx.87 ; サブドメインのマスターサーバ&lt;br /&gt;ns2.oss               IN A       xxx.xxx.xxx.89 ; サブドメインのスレーブサーバ&lt;br /&gt;&lt;/pre&gt;&lt;div&gt; ここでは、サブドメインのマスターサーバを ns1.oss.example.com、サブドメインのスレーブサーバをns2.oss.example.com としています。&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;font size="4"&gt;&lt;b&gt;サブドメインのマスターサーバの設定例&lt;/b&gt;&lt;/font&gt;&lt;/li&gt;&lt;br /&gt;&lt;div&gt;zone ステートメントを記述します。 &lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# vim oss.example.com.zone&lt;br /&gt;&lt;/pre&gt;&lt;div&gt; &lt; zone ステートメントの記述例 &gt; &lt;/div&gt;&lt;pre&gt;&lt;br /&gt;zone "oss.example.com" IN {&lt;br /&gt; type master;&lt;br /&gt; allow-update { none; };&lt;br /&gt; allow-transfer { xxx.xxx.xxx.89; };&lt;br /&gt; file "oss.example.com.db";&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;div&gt; ※ named.conf で oss.example.com.zone を include しています。 &lt;/div&gt;&lt;br /&gt;&lt;div&gt;ゾーンデータファイルを作成します。&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# vim oss.example.com.db&lt;br /&gt;&lt;/pre&gt;&lt;div&gt; &lt; ゾーンデータファイルの記述例 &gt; &lt;/div&gt;&lt;pre&gt; &lt;br /&gt;$TTL 86400&lt;br /&gt;@                    IN  SOA    ns1 root (&lt;br /&gt;                     2012022001 ; Serial&lt;br /&gt;                     10800      ; Refresh   &lt;br /&gt;                     3600       ; Retry     &lt;br /&gt;                     604800     ; Expire   &lt;br /&gt;                     86400 )    ; Minimum&lt;br /&gt;&lt;br /&gt;                     IN NS      ns1&lt;br /&gt;                     IN NS      ns2&lt;br /&gt;                     IN A       xxx.xxx.xxx.86&lt;br /&gt;&lt;br /&gt;ns1                  IN A       xxx.xxx.xxx.87 ; サブドメインのマスターサーバ&lt;br /&gt;ns2                  IN A       xxx.xxx.xxx.89 ; サブドメインのスレーブサーバ&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;&lt;font size="4"&gt;&lt;b&gt;サブドメインのスレーブサーバの設定例&lt;/b&gt;&lt;/font&gt;&lt;/li&gt;&lt;br /&gt;&lt;div&gt;zone ステートメントを記述します。&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# vim oss.example.com.slave.zone&lt;br /&gt;&lt;/pre&gt;&lt;div&gt; &lt; zone ステートメントの記述例 &gt; &lt;/div&gt;&lt;pre&gt;&lt;br /&gt;zone "oss.example.com" IN {&lt;br /&gt;                type slave;&lt;br /&gt;                masters { xxx.xxx.xxx.89; };&lt;br /&gt;                file "slaves/oss.example.com.slave.db";&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt; &lt;div&gt; ※ named.conf で oss.example.com.slave.zone を include しています。 &lt;/div&gt;&lt;br /&gt;&lt;div&gt;以上です。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-4972644089867286429?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/4972644089867286429/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/blog-post_22.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/4972644089867286429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/4972644089867286429'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/blog-post_22.html' title='サブドメインの管理を委任する'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-7189645807703000828</id><published>2012-02-21T18:00:00.000+09:00</published><updated>2012-02-21T18:49:59.816+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='libvirt'/><category scheme='http://www.blogger.com/atom/ns#' term='KVM'/><category scheme='http://www.blogger.com/atom/ns#' term='RHEL6'/><category scheme='http://www.blogger.com/atom/ns#' term='仮想化'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='CentOS 6'/><category scheme='http://www.blogger.com/atom/ns#' term='Scientific Linux 6'/><title type='text'>連載「libvirt を利用して日々の作業を効率化」第２回</title><content type='html'>&lt;p&gt;こんにちは、OSSテクノロジーセンターの原です。&lt;/p&gt;&lt;p&gt;さて、前回は Ruby のスクリプトから libvirt にアクセスし、ゲストの一覧を取得するところまでできました。&lt;/p&gt;&lt;p&gt;&lt;a href="http://sios-oss.blogspot.com/2012/02/libvirt.html"&gt;連載「libvirt を利用して日々の作業を効率化」第１回&lt;/a&gt;&lt;/p&gt;&lt;p&gt;前回までのおさらいとしては&lt;/p&gt;&lt;ul&gt; &lt;li&gt;libvirt は Red Hat 社が中心に開発する、仮想化管理用の標準 API&lt;/li&gt; &lt;li&gt;libvirt には様々な言語バインディングがる&lt;/li&gt; &lt;li&gt;Ruby から API にアクセススして、仮想マシン一覧を出してみる&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;ここまでですね。&lt;/p&gt;&lt;p&gt;今回はここから一歩進んで、Web アプリとしての機能を持たせて行きましょう。&lt;/p&gt;&lt;p&gt;今回利用する sinatra についてですが、細かい使い方については割愛させて頂きます。&lt;/p&gt;&lt;p&gt;…と言っても、公式に非常にわかりやすいドキュメントがありますので、初めての方はそちらをざっと眺めてもらえればと思います。&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sinatrarb.com/intro-jp.html"&gt;Sinatra: README (Japanese)&lt;/a&gt;&lt;/p&gt;&lt;p&gt;ではお約束通り、前回インストールした sinatra の最も簡単な Hello world 画面をブラウザに表示するところまでやってみましょう。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# mkdir webvirt&lt;br /&gt;# cd webvirt&lt;br /&gt;# vim webvirt.rb&lt;br /&gt;&lt;/pre&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;webvirt.rb:&lt;/b&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/ruby&lt;br /&gt;require 'rubygems'&lt;br /&gt;require 'sinatra'&lt;br /&gt;&lt;br /&gt;get '/' do&lt;br /&gt;  'Hello world!'&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;実行権限を与えてアプリを立ち上げましょう。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# chmod +x webvirt.rb &lt;br /&gt;# ./webvirt.rb &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ブラウザから http://webvirt:4567/ にアクセスしてみましょう。&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-E9QhGyPW5xQ/T0MaBHiKpwI/AAAAAAAAAFI/GMl1VR8orQw/s1600/01-hellow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="258" src="http://4.bp.blogspot.com/-E9QhGyPW5xQ/T0MaBHiKpwI/AAAAAAAAAFI/GMl1VR8orQw/s320/01-hellow.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;(※ webvirt の部分は適宜 IP アドレス等に読み替えてください。また、ファイアウォールが閉まっている場合、該当ポート開放をお忘れなく。)&lt;/p&gt;&lt;p&gt;Hello world が表示できたでしょうか？アプリを止めるには Ctrl + c です。&lt;/p&gt;&lt;p&gt;できましたら libvirt との連携を考えてみましょう。&lt;/p&gt;&lt;p&gt;前回最後に書いたスクリプトをそのまま Web に出してみましょう。&lt;/p&gt;&lt;b&gt;前回の get_vm_list.rb:&lt;/b&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/ruby&lt;br /&gt;require 'libvirt'&lt;br /&gt;conn = Libvirt::open("qemu+ssh://root@kvmhost/system")&lt;br /&gt;vm_list = conn.list_defined_domains&lt;br /&gt;puts vm_list&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;これと同じ機能を持つ Web 画面を作ってみましょう。&lt;/p&gt;&lt;b&gt;webvirt.rb:&lt;/b&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/ruby&lt;br /&gt;require 'rubygems'&lt;br /&gt;require 'sinatra'&lt;br /&gt;require 'libvirt'&lt;br /&gt;&lt;br /&gt;get '/' do&lt;br /&gt;  conn = Libvirt::open("qemu+ssh://root@kvmhost/system")&lt;br /&gt;  @vm_list = conn.list_defined_domains&lt;br /&gt;  erb :index&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;# mkdir ./views&lt;br /&gt;# vim views/index.erb&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;views/index.erb:&lt;/b&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;b&amp;gt;My KVM VMs&amp;lt;/b&amp;gt;&lt;br /&gt;&amp;lt;hr&amp;gt;&lt;br /&gt;&amp;lt;% for vm in @vm_list %&amp;gt;&lt;br /&gt;  &amp;lt;%= vm %&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;% end %&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;1つのファイル(webvirt.rb)だけで全てを完結させても良いのですが、見通しが悪くなるので、処理系と画面のファイルは分けてみました。&lt;/p&gt;&lt;p&gt;中身を軽く見て行きましょう。&lt;/p&gt;&lt;p&gt;webvirt.rb で require 'libvirt' して、conn = Libvirt::open? で接続、conn.list_defined_domains でリストを取得しています。&lt;/p&gt;&lt;p&gt;ここまでは前回と同じですね。&lt;/p&gt;&lt;p&gt;views/index.erb で画面を作りつつ、@vm_list の中身を for 文で展開しつつ、改行を入れておきました。&lt;/p&gt;&lt;p&gt;ここまでできたら、再びアプリを起動して、ブラウザからアクセスしてみてください。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# ./webvirt.rb &lt;br /&gt;&lt;/pre&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ncK_g_qWn00/T0Ma0RIexqI/AAAAAAAAAFU/5VIRkkZIWsE/s1600/02-list.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="258" width="320" src="http://1.bp.blogspot.com/-ncK_g_qWn00/T0Ma0RIexqI/AAAAAAAAAFU/5VIRkkZIWsE/s320/02-list.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;画面にリストが表示できたでしょうか？&lt;/p&gt;&lt;p&gt;前回も最後に書きましたが、list_defined_domains メソッドは非アクティブなゲストマシンのリストを取得します。&lt;/p&gt;&lt;p&gt;次はアクティブなゲストマシンのリストも一緒に表示しましょう。&lt;/p&gt;&lt;b&gt;webvirt.rb:&lt;/b&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/ruby&lt;br /&gt;require 'rubygems'&lt;br /&gt;require 'sinatra'&lt;br /&gt;require 'libvirt'&lt;br /&gt;&lt;br /&gt;get '/' do&lt;br /&gt;  conn = Libvirt::open("qemu+ssh://root@kvmhost/system")&lt;br /&gt;  @act_vm_list = conn.list_domains&lt;br /&gt;  @sby_vm_list = conn.list_defined_domains&lt;br /&gt;  erb :index&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;views/index.erb&lt;/b&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;b&amp;gt;My KVM VMs&amp;lt;/b&amp;gt;&lt;br /&gt;&amp;lt;hr&amp;gt;&lt;br /&gt;Active VMs&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;% for act_vm in @act_vm_list %&amp;gt;&lt;br /&gt;  &amp;lt;%= act_vm %&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;% end %&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;hr&amp;gt;&lt;br /&gt;Standby VMs&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;% for sby_vm in @sby_vm_list %&amp;gt;&lt;br /&gt;  &amp;lt;%= sby_vm %&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;% end %&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;どうでしょう？アクティブ・非アクティブ両方のゲストマシンの一覧がでましたね。&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-G1QltGx_Q-M/T0Mco6LqpkI/AAAAAAAAAFg/K0Bqiq-IYs4/s1600/03-list.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="258" width="320" src="http://3.bp.blogspot.com/-G1QltGx_Q-M/T0Mco6LqpkI/AAAAAAAAAFg/K0Bqiq-IYs4/s320/03-list.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;ところで、アクティブなゲストマシンの方は、名前でなくて ID で表示されていますね。&lt;/p&gt;&lt;p&gt;大変面倒なことに list_domains と list_defined_domains は若干挙動が違うのです。ちょっと格好が悪いのでこれは後々直すことにしましょう。&lt;/p&gt;&lt;p&gt;詳しくは各メソッドの詳細をご確認ください。&lt;/p&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="http://libvirt.org/ruby/api/classes/Libvirt/Connect.html#M000201"&gt;conn.list_domains&lt;/a&gt;&lt;br&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://libvirt.org/ruby/api/classes/Libvirt/Connect.html#M000203"&gt;conn.list_defined_domains&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;いかがでしたでしょうか。&lt;/p&gt;&lt;p&gt;少し長くなってしまいましたので、仮想マシンのパワーオン/オフは次回以降に回したいと思います。&lt;/p&gt;&lt;p&gt;ではでは。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-7189645807703000828?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/7189645807703000828/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/libvirt_21.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/7189645807703000828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/7189645807703000828'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/libvirt_21.html' title='連載「libvirt を利用して日々の作業を効率化」第２回'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-E9QhGyPW5xQ/T0MaBHiKpwI/AAAAAAAAAFI/GMl1VR8orQw/s72-c/01-hellow.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-6457374202548971360</id><published>2012-02-20T13:42:00.000+09:00</published><updated>2012-02-20T13:42:35.497+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RHEL6'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux コマンド動作徹底解析'/><category scheme='http://www.blogger.com/atom/ns#' term='CentOS 6'/><category scheme='http://www.blogger.com/atom/ns#' term='ソースコード解析'/><category scheme='http://www.blogger.com/atom/ns#' term='Scientific Linux 6'/><title type='text'>連載「Linux コマンド動作徹底解析」"ls -l" 編 第2回</title><content type='html'>&lt;p&gt;サイオステクノロジー 金田です。&lt;br /&gt;&lt;small&gt;週１連載の予定でしたが、先週は諸事情により投稿できませんでした。申し訳ありません。&lt;/small&gt;&lt;/p&gt;&lt;p&gt;では、早速 "ls -l" 編 第2回 を進めていきます。&lt;/p&gt;&lt;hr&gt;&lt;p&gt;今回は以下の範囲を見ていきます。&lt;br /&gt;&lt;small&gt;以下ファイル名が省略されている場合は、前のコードと同じファイルです。行頭の数字は行番号です。&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;coreutils-8.4/src/ls.c&lt;/u&gt;:&lt;pre&gt;&lt;br /&gt;1228 &lt;br /&gt;1229 int&lt;br /&gt;1230 main (int argc, char **argv)&lt;br /&gt;1231 {&lt;br /&gt;1232   int i;&lt;br /&gt;1233   struct pending *thispend;&lt;br /&gt;1234   int n_files;&lt;br /&gt;1235 &lt;br /&gt;1236   /* The signals that are trapped, and the number of such signals.  */&lt;br /&gt;1237   static int const sig[] =&lt;br /&gt;1238     {&lt;br /&gt;1239       /* This one is handled specially.  */&lt;br /&gt;1240       SIGTSTP,&lt;br /&gt;1241 &lt;br /&gt;1242       /* The usual suspects.  */&lt;br /&gt;1243       SIGALRM, SIGHUP, SIGINT, SIGPIPE, SIGQUIT, SIGTERM,&lt;br /&gt;1244 #ifdef SIGPOLL&lt;br /&gt;1245       SIGPOLL,&lt;br /&gt;1246 #endif&lt;br /&gt;1247 #ifdef SIGPROF&lt;br /&gt;1248       SIGPROF,&lt;br /&gt;1249 #endif&lt;br /&gt;1250 #ifdef SIGVTALRM&lt;br /&gt;1251       SIGVTALRM,&lt;br /&gt;1252 #endif&lt;br /&gt;1253 #ifdef SIGXCPU&lt;br /&gt;1254       SIGXCPU,&lt;br /&gt;1255 #endif&lt;br /&gt;1256 #ifdef SIGXFSZ&lt;br /&gt;1257       SIGXFSZ,&lt;br /&gt;1258 #endif&lt;br /&gt;1259     };&lt;br /&gt;1260   enum { nsigs = ARRAY_CARDINALITY (sig) };&lt;br /&gt;1261 &lt;br /&gt;1262 #if ! SA_NOCLDSTOP&lt;br /&gt;1263   bool caught_sig[nsigs];&lt;br /&gt;1264 #endif&lt;br /&gt;1265 &lt;br /&gt;1266   initialize_main (&amp;argc, &amp;argv);&lt;br /&gt;1267   set_program_name (argv[0]);&lt;br /&gt;1268   setlocale (LC_ALL, "");&lt;br /&gt;1269   bindtextdomain (PACKAGE, LOCALEDIR);&lt;br /&gt;1270   textdomain (PACKAGE);&lt;br /&gt;1271 &lt;br /&gt;1272   initialize_exit_failure (LS_FAILURE);&lt;br /&gt;1273   atexit (close_stdout);&lt;br /&gt;1274 &lt;br /&gt;1275   assert (ARRAY_CARDINALITY (color_indicator) + 1&lt;br /&gt;1276           == ARRAY_CARDINALITY (indicator_name));&lt;br /&gt;1277 &lt;br /&gt;1278   exit_status = EXIT_SUCCESS;&lt;br /&gt;1279   print_dir_name = true;&lt;br /&gt;1280   pending_dirs = NULL; &lt;br /&gt;1281                  &lt;br /&gt;1282   current_time.tv_sec = TYPE_MINIMUM (time_t);&lt;br /&gt;1283   current_time.tv_nsec = -1;&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;C言語のプログラムは main () 関数から始まります。ls コマンドの場合は、&lt;u&gt;coreutils-8.4/src/ls.c&lt;/u&gt; の 1230行目が該当します。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;1230 main (int argc, char **argv)&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;続いて変数の宣言がありますが個々の説明は省きます。&lt;br /&gt;1237行目以降の以下の部分は少し説明しておきます。&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;br /&gt;1236   /* The signals that are trapped, and the number of such signals.  */&lt;br /&gt;1237   static int const sig[] =&lt;br /&gt;1238     {&lt;br /&gt;1239       /* This one is handled specially.  */&lt;br /&gt;1240       SIGTSTP,&lt;br /&gt;1241 &lt;br /&gt;1242       /* The usual suspects.  */&lt;br /&gt;1243       SIGALRM, SIGHUP, SIGINT, SIGPIPE, SIGQUIT, SIGTERM,&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;SIGTSTP&lt;/b&gt; は &lt;u&gt;Ctrl+Z&lt;/u&gt; を押した時のシグナルで、いわゆるサスペンドに相当します。&lt;/p&gt;&lt;p&gt;他にユーザキー操作で発生するシグナルとしては、&lt;b&gt;SIGINT&lt;/b&gt; (&lt;u&gt;Ctrl+C&lt;/u&gt;)、&lt;b&gt;SIGQUIT&lt;/b&gt; (&lt;u&gt;Ctrl+\&lt;/u&gt;) などがあります。&lt;br /&gt;&lt;small&gt;キーの割当はsttyコマンドで確認できます。&lt;/small&gt;&lt;/p&gt;&lt;p&gt;また、kill コマンドを -s オプションなしで実行すると &lt;b&gt;SIGTERM&lt;/b&gt; が送れますし、-s を使用すれば他のシグナルも送れます。詳しくは &lt;u&gt;man 1 kill&lt;/u&gt; や &lt;u&gt;man 7 signal&lt;/u&gt; などを確認してください。&lt;/p&gt;&lt;hr&gt;&lt;p&gt;続いて、1266行目は、なにやら意味有りげな名前が付いていますが、&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;1266   initialize_main (&amp;argc, &amp;argv);&lt;br /&gt;&lt;/pre&gt;以下のように宣言されており、実体がありません(つまり何もしません)。&lt;br /&gt;&lt;br /&gt;&lt;u&gt;coreutils-8.4/src/system.h&lt;/u&gt;:&lt;pre&gt;&lt;br /&gt;205 #ifndef initialize_main&lt;br /&gt;206 # define initialize_main(ac, av)&lt;br /&gt;207 #endif&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;次の行 1267行目は "ls" という文字列を program_name 変数に代入する処理です。&lt;br /&gt;&lt;br /&gt;&lt;u&gt;coreutils-8.4/src/ls.c&lt;/u&gt;:&lt;pre&gt;&lt;br /&gt;1267   set_program_name (argv[0]);&lt;br /&gt;&lt;/pre&gt;&lt;small&gt;※argv[0] とは、コマンドラインでのコマンド名部分を指します。&lt;/small&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;1268行目は、初期化の際のおまじないみたいなものです。&lt;small&gt;&lt;u&gt;man 3 setlocale&lt;/u&gt; 参照&lt;/small&gt;&lt;pre&gt;&lt;br /&gt;1268   setlocale (LC_ALL, "");&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;次の２行 1269～1270行目のうち、&lt;u&gt;bindtextdomain ()&lt;/u&gt; は、メッセージファイルの読み先を"&lt;b&gt;/usr/share/locale/*/*/coreutils.mo&lt;/b&gt;" に設定し、&lt;u&gt;textdomain ()&lt;/u&gt; は、&lt;u&gt;gettext()&lt;/u&gt; 関連ライブラリ (ls コマンドにおいては &lt;u&gt;dcgettext()&lt;/u&gt; )を呼んだ際のデフォルトドメイン ("coreutil" という文字列) を設定します。&lt;br /&gt;&lt;small&gt;詳細は &lt;u&gt;man 3 bindtextdomain&lt;/u&gt;(※)、&lt;u&gt;man 3 textdomain&lt;/u&gt;(※)、&lt;u&gt;man 3 gettext&lt;/u&gt; を参照。&lt;br /&gt;※：gettext-devel パッケージのインストールが必要&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;coreutils-8.4/src/ls.c&lt;/u&gt;:&lt;pre&gt;&lt;br /&gt;1269   bindtextdomain (PACKAGE, LOCALEDIR);&lt;br /&gt;1270   textdomain (PACKAGE);&lt;br /&gt;&lt;/pre&gt;&lt;u&gt;coreutils-8.4/lib/config.h&lt;/u&gt;:&lt;pre&gt;&lt;br /&gt;2043 #define PACKAGE "coreutils"&lt;br /&gt;&lt;/pre&gt;&lt;u&gt;kernel-2.6.32-131.0.15.el6/scripts/kconfig/lkc.h&lt;/u&gt;:&lt;pre&gt;&lt;br /&gt; 35 #define LOCALEDIR "/usr/share/locale"&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;次の 1272行目 &lt;u&gt;initialize_exit_failure()&lt;/u&gt; は、関数の中に入ってみましょう。&lt;br /&gt;&lt;br /&gt;&lt;u&gt;coreutils-8.4/src/ls.c&lt;/u&gt;:&lt;pre&gt;&lt;br /&gt;1272   initialize_exit_failure (LS_FAILURE);&lt;br /&gt;  :&lt;br /&gt; 102 /* Set exit_failure to STATUS if that's not the default already.  */&lt;br /&gt; 103 static inline void&lt;br /&gt; 104 initialize_exit_failure (int status)&lt;br /&gt; 105 {  &lt;br /&gt; 106   if (status != EXIT_FAILURE)&lt;br /&gt; 107     exit_failure = status;&lt;br /&gt; 108 }          &lt;br /&gt;&lt;br /&gt;[LS_FAILURE 定義箇所]&lt;br /&gt; 780     LS_FAILURE = 2&lt;br /&gt;&lt;/pre&gt;exit_failure 変数に 2 を代入していますね。&lt;br /&gt;これは次に説明する &lt;u&gt;close_stdout()&lt;/u&gt; の処理が失敗した時のための exit コードを設定しています。&lt;pre&gt;&lt;br /&gt;1273   atexit (close_stdout);&lt;br /&gt;&lt;/pre&gt;&lt;u&gt;atexit()&lt;/u&gt; は、&lt;u&gt;exit()&lt;/u&gt; が呼ばれた時や &lt;u&gt;main ()&lt;/u&gt; 関数が終了する時に、実行する関数 (close_stdout) を登録するものです。&lt;small&gt;詳細は &lt;u&gt;man 3 atexit&lt;/u&gt; を参照。&lt;/small&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;ここで、先に &lt;u&gt;close_stdout()&lt;/u&gt; を見ておきます。&lt;br /&gt;&lt;br /&gt;&lt;u&gt;coreutils-8.4/lib/closeout.c&lt;/u&gt;:&lt;pre&gt;&lt;br /&gt;106 void&lt;br /&gt;107 close_stdout (void)&lt;br /&gt;108 {      &lt;br /&gt;109   if (close_stream (stdout) != 0&lt;br /&gt;110       &amp;&amp; !(ignore_EPIPE &amp;&amp; errno == EPIPE))&lt;br /&gt;111     {&lt;br /&gt;112       char const *write_error = _("write error");&lt;br /&gt;113       if (file_name)&lt;br /&gt;114         error (0, errno, "%s: %s", quotearg_colon (file_name),&lt;br /&gt;115                write_error);&lt;br /&gt;116       else   &lt;br /&gt;117         error (0, errno, "%s", write_error);&lt;br /&gt;118 &lt;br /&gt;119       _exit (exit_failure);&lt;br /&gt;120     }        &lt;br /&gt;121 &lt;br /&gt;122    if (close_stream (stderr) != 0)&lt;br /&gt;123      _exit (exit_failure);&lt;br /&gt;124 }&lt;br /&gt;&lt;/pre&gt;109行目で標準出力 (&lt;b&gt;stdout&lt;/b&gt;) を、122行目で標準エラー出力 (&lt;b&gt;stderr&lt;/b&gt;) をそれぞれ &lt;u&gt;close_stream&lt;/u&gt; (中でfclose(3)が呼ばれる) していて、エラーの場合は exit_failure の値で exit しています。&lt;br /&gt;つまり、ls コマンドの終了ステータスが &lt;b&gt;2&lt;/b&gt; だった時、(この &lt;u&gt;close_stdout()&lt;/u&gt; では) &lt;b&gt;stdout&lt;/b&gt; を close する際は &lt;u&gt;error ()&lt;/u&gt; で出力されるメッセージを伴って終了しますので、エラー箇所の特定ができます。&lt;/p&gt;&lt;hr&gt;&lt;p&gt;では、&lt;u&gt;main ()&lt;/u&gt; に戻って、続きの処理を見ていきます。&lt;/p&gt;&lt;p&gt;1275～1276行目は、color_indicator 配列と indicator_name 配列の要素数を計算してしています。計算値が一致しないと &lt;u&gt;assert ()&lt;/u&gt; 内で exit が呼ばれ終了します。&lt;small&gt;詳細は &lt;u&gt;man 3 assert&lt;/u&gt; 参照&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;coreutils-8.4/src/ls.c&lt;/u&gt;:&lt;pre&gt;&lt;br /&gt;1275   assert (ARRAY_CARDINALITY (color_indicator) + 1&lt;br /&gt;1276           == ARRAY_CARDINALITY (indicator_name));&lt;br /&gt;  :&lt;br /&gt; 565 static const char *const indicator_name[]=&lt;br /&gt; 566   {&lt;br /&gt; 567     "lc", "rc", "ec", "rs", "no", "fi", "di", "ln", "pi", "so",&lt;br /&gt; 568     "bd", "cd", "mi", "or", "ex", "do", "su", "sg", "st",&lt;br /&gt; 569     "ow", "tw", "ca", "mh", "cl", NULL&lt;br /&gt; 570   };&lt;br /&gt;  :&lt;br /&gt; 579 static struct bin_str color_indicator[] =&lt;br /&gt; 580   {&lt;br /&gt; 581     { LEN_STR_PAIR ("\033[") },         /* lc: Left of color sequence */&lt;br /&gt; 582     { LEN_STR_PAIR ("m") },             /* rc: Right of color sequence */&lt;br /&gt; 583     { 0, NULL },                        /* ec: End color (replaces lc+no+rc) */&lt;br /&gt; 584     { LEN_STR_PAIR ("0") },             /* rs: Reset to ordinary colors */&lt;br /&gt; 585     { 0, NULL },                        /* no: Normal */&lt;br /&gt; 586     { 0, NULL },                        /* fi: File: default */&lt;br /&gt; 587     { LEN_STR_PAIR ("01;34") },         /* di: Directory: bright blue */&lt;br /&gt; 588     { LEN_STR_PAIR ("01;36") },         /* ln: Symlink: bright cyan */&lt;br /&gt; 589     { LEN_STR_PAIR ("33") },            /* pi: Pipe: yellow/brown */&lt;br /&gt; 590     { LEN_STR_PAIR ("01;35") },         /* so: Socket: bright magenta */&lt;br /&gt; 591     { LEN_STR_PAIR ("01;33") },         /* bd: Block device: bright yellow */&lt;br /&gt; 592     { LEN_STR_PAIR ("01;33") },         /* cd: Char device: bright yellow */&lt;br /&gt; 593     { 0, NULL },                        /* mi: Missing file: undefined */&lt;br /&gt; 594     { 0, NULL },                        /* or: Orphaned symlink: undefined */&lt;br /&gt; 595     { LEN_STR_PAIR ("01;32") },         /* ex: Executable: bright green */&lt;br /&gt; 596     { LEN_STR_PAIR ("01;35") },         /* do: Door: bright magenta */&lt;br /&gt; 597     { LEN_STR_PAIR ("37;41") },         /* su: setuid: white on red */&lt;br /&gt; 598     { LEN_STR_PAIR ("30;43") },         /* sg: setgid: black on yellow */&lt;br /&gt; 599     { LEN_STR_PAIR ("37;44") },         /* st: sticky: black on blue */&lt;br /&gt; 600     { LEN_STR_PAIR ("34;42") },         /* ow: other-writable: blue on green */&lt;br /&gt; 601     { LEN_STR_PAIR ("30;42") },         /* tw: ow w/ sticky: black on green */&lt;br /&gt; 602     { LEN_STR_PAIR ("30;41") },         /* ca: black on red */&lt;br /&gt; 603     { 0, NULL },                        /* mh: disabled by default */&lt;br /&gt; 604     { LEN_STR_PAIR ("\033[K") },        /* cl: clear to end of line */&lt;br /&gt; 605   };&lt;br /&gt;&lt;/pre&gt;&lt;u&gt;coreutils-8.4/lib/argmatch.h&lt;/u&gt;:&lt;pre&gt;&lt;br /&gt; 29 # define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array))&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;1278～1283行目は変数の初期化です。&lt;br /&gt;&lt;br /&gt;&lt;u&gt;coreutils-8.4/src/ls.c&lt;/u&gt;:&lt;pre&gt;&lt;br /&gt;1278   exit_status = EXIT_SUCCESS;&lt;br /&gt;1279   print_dir_name = true;&lt;br /&gt;1280   pending_dirs = NULL;&lt;br /&gt;1281 &lt;br /&gt;1282   current_time.tv_sec = TYPE_MINIMUM (time_t);&lt;br /&gt;1283   current_time.tv_nsec = -1;&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;以上、初期化が終わるまでを見てきました。&lt;br /&gt;次回は、オプション解析関数 &lt;u&gt;decode_switches ()&lt;/u&gt; から進めていきたいと思います。&lt;/p&gt;&lt;p&gt;&lt;u&gt;coreutils-8.4/src/ls.c&lt;/u&gt;:&lt;pre&gt;&lt;br /&gt;1285   i = decode_switches (argc, argv);&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p align="right"&gt;(続く)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-6457374202548971360?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/6457374202548971360/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/linux-ls-l-2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/6457374202548971360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/6457374202548971360'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/linux-ls-l-2.html' title='連載「Linux コマンド動作徹底解析」&quot;ls -l&quot; 編 第2回'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-2660999881199417521</id><published>2012-02-17T20:14:00.000+09:00</published><updated>2012-02-22T21:26:53.173+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bind'/><title type='text'>Google Appsを導入しよう (BIND9設定編)</title><content type='html'>&lt;div&gt;こんばんは。サイオステクノロジーの小川です。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;最近、無償版の「Google Apps Standard Edition」で利用できる機能が増えてきて、便利に感じています。たとえば、&lt;b&gt;シングルサインオンの機能は&lt;/b&gt;、以前まで有償版の「Google Apps for Business」でしか提供されていなかったのですが、現在は &lt;b&gt;Standard Edition でも利用ができます&lt;/b&gt;。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;Standard Edition は 10アカウントまで作成ができます&lt;/b&gt;ので、色々な用途で使い分けることができます。Googleサイトでサークルのホームページを作ったり、チームの連絡用にGmailを使ってみるのも良いかもしれないですね。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;今回は&lt;b&gt;Google Appsの導入でBIND9の設定について紹介&lt;/b&gt;します。また、併せてマスターサーバとスレーブサーバの構築の手順についても簡単に説明します。OSはCentOS5 系を使用しています。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;font size="4"&gt;&lt;b&gt;&lt; Google Apps の導入に必要なもの &gt;&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;font size="3"&gt;&lt;b&gt;ドメイン&lt;/b&gt;&lt;/font&gt;&lt;/li&gt;&lt;b&gt;Google Appsは最低 1つのドメインが必要&lt;/b&gt;です。私は「お名前.com」様でドメインを取得しました。ここでは、Google Apps に登録するドメインを example.com として説明をさせていただきます。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;font size="3"&gt;&lt;b&gt;DNSサーバ&lt;/b&gt;&amp;nbsp;&lt;/font&gt;&lt;/li&gt;Google Apps の導入では、DNSサーバに登録した情報を Google が参照できる必要があります。&lt;b&gt;インターネット上にDNSサーバを公開するので、ポート53番は解放&lt;/b&gt;します。&lt;b&gt;取得したドメインのDNSサーバは自前のDNSサーバに設定を変更&lt;/b&gt;してください。&lt;/ul&gt;&lt;br /&gt;&lt;div&gt;まだCentOSにBINDをインストールされていない方は、以下の手順でインストールします。&lt;/div&gt;&lt;pre&gt;# yum install bind bind-chroot &lt;br /&gt;# yum install caching-nameserver&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;なお、CentOS6 系では caching-nameserver は bind に統合された為、インストールする必要はありません。インストールしようとすると、以下のようなメッセージが表示されます。&lt;/div&gt;&lt;pre&gt;# yum install caching-nameserver&lt;br /&gt;Package 32:bind-9.7.3-8.P3.el6_2.2.i686 already installed and latest version&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;a name="master"&gt;&lt;font size="4"&gt;&lt;b&gt;1. マスターサーバの構築手順&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;1-1. BIND の設定ファイル named.conf を編集。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;# vim /etc/named.conf &lt;/pre&gt;&lt;div&gt;&lt; 追記項目の例 &gt;&lt;/div&gt;&lt;pre&gt;view "external" {&lt;br /&gt;   allow-query { any; };&lt;br /&gt;   recursion no;&lt;br /&gt;   include "/etc/example.com.zone";&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;view&lt;/b&gt; &lt;/li&gt;&lt;div&gt;view の名称は特に決まりはありません。インターネットに公開している、外向けといった意味で「external」としています。&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;allow-query&lt;/b&gt; &lt;/li&gt;&lt;div&gt;すべての問い合わせに対して応答するよう any としています。Google Apps の導入の際に Google がDNSレコードを参照したり、メールのやり取りで不特定のユーザーが参照したりするので、必要な設定です。&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;recursion &lt;/b&gt;&lt;/li&gt;&lt;div&gt;DNSサーバへの問い合わせの応答は、このサーバが持っている情報だけ返せばいいので no にしてください。&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;include&lt;/b&gt;&lt;/li&gt;&lt;div&gt;named.conf の内容を別のファイルに分けて記述することができます。後述の example.com.zone のファイルを参照してください。&lt;/div&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div&gt;※ CentOS5系で caching-nameserver をインストールしている場合は、named.caching-nameserver.conf を利用して named.conf を作成することもできます。&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# cd /var/named/chroot/etc/&lt;br /&gt;# cp named.caching-nameserver.conf named.conf&lt;br /&gt;# chown root:named named.conf&lt;br /&gt;# ln -s /var/named/chroot/etc/named.conf /etc/named.ccnf&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;1-2. zone を記述するファイルを作成。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# vim example.com.zone&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt; 記述内容の例 &gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;zone "example.com" IN {&lt;br /&gt;     type master;&lt;br /&gt;     allow-update { none; };&lt;br /&gt;     allow-transfer { xxx.xxx.xxx.91; };&lt;br /&gt;     file "example.com.db";&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;zone&lt;/b&gt;&lt;/li&gt;&lt;div&gt;example.com ゾーンの設定を記述します。Google Apps で今後新しくサブドメイン oss.example.com を追加するような場合は、example.comゾーンの管理下に置かれます。&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;type&lt;/b&gt;&lt;/li&gt;&lt;div&gt;マスターサーバは master としてください。&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;allow-update&lt;/b&gt;&lt;/li&gt;&lt;div&gt;セキュリティの観点から、クライアントがDNSレコードを更新できないよう明示的に none としています。&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;allow-transfer&lt;/b&gt;&lt;/li&gt; &lt;div&gt;マスターサーバからスレーブサーバへ example.com ゾーンの情報を転送する為に、スレーブの IP アドレスを設定します。&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;file&lt;/b&gt;&lt;/li&gt;&lt;div&gt;ゾーンデータファイルの場所を指定します。ファイルの内容は後述の example.com.db を参照ください。&lt;/div&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;1-3. example.com.zone の所有者を named に変更。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;# chown root:named example.zone&lt;/pre&gt;&lt;div&gt;&lt;b&gt;1-4. named.conf の内容に間違いがないかチェック。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;# named-checkconf&lt;/pre&gt;&lt;div&gt;&lt;b&gt;1-5. 正引き用ゾーンデータファイルを作成。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;# vim example.com.db&lt;/pre&gt;&lt;div&gt;&lt; 記述内容の例 &gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;$TTL 86400&lt;br /&gt;@                          IN  SOA    ns1 root (&lt;br /&gt;                           2012021307 ; Serial&lt;br /&gt;                           10800      ; Refresh   &lt;br /&gt;                           3600       ; Retry     &lt;br /&gt;                           604800     ; Expire   &lt;br /&gt;                           86400 )    ; Minimum&lt;br /&gt;&lt;br /&gt;                           IN NS      ns1&lt;br /&gt;                           IN NS      ns2&lt;br /&gt;                           N A         xxx.xxx.xxx.145&lt;br /&gt;                           &lt;b&gt;IN MX      1 aspmx.l.google.com.&lt;/b&gt;&lt;br /&gt;                           &lt;b&gt;IN MX      5 alt1.aspmx.l.google.com.&lt;/b&gt;&lt;br /&gt;                           &lt;b&gt;IN MX      5 alt2.aspmx.l.google.com.&lt;/b&gt;&lt;br /&gt;                           &lt;b&gt;IN MX      10 aspmx2.googlemail.com.&lt;/b&gt;&lt;br /&gt;                           &lt;b&gt;IN MX      10 aspmx3.googlemail.com.&lt;/b&gt;&lt;br /&gt;                           &lt;b&gt;IN MX      10 aspmx4.googlemail.com.&lt;/b&gt;&lt;br /&gt;                           &lt;b&gt;IN MX      10 aspmx5.googlemail.com.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ns1                        IN A       xxx.xxx.xxx.147&lt;br /&gt;ns2                        IN A       xxx.xxx.xxx.91&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;ゾーンデータファイルの書き方は好みが分かれるかと思いますが、私の場合、@ を使用しています。@ を利用することで、example.com.zone の zone で指定したドメイン名(example.com)を補完してくれます。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;example.com のネームサーバとしてマスター(ns1.example.com)、スレーブ(ns2.example.com)を指定しています。ns1 の Aレコードにはマスターサーバの IP アドレス、ns2 の Aレコードにはスレーブサーバの IP アドレスを登録しています。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;「2012021307」はシリアル番号です。2012年2月13日に7回更新しました、という意味となります。更新した年月日と回数を記述してください。&lt;b&gt;ゾーンデータファイルを更新する際はシリアル番号の更新は忘れないように注意してください。&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Gmail では Google Apps のメールサーバを利用してメールの送受信を行うので、&lt;b&gt;example.com の MX レコードには Google Apps のメールサーバを登録してください。&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;font size="3"&gt;&lt;b&gt;注意！ Gmail の有効化が完了するまで、現在使用中のメールサーバのMX レコードは削除しないでください。メールの配送が止まってしまいます。&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;1-6. example.com.db の所有者を named に変更。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# chown root:named example.com.db&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;b&gt;1-7. ゾーンデータファイルの構文に間違いがないかチェック。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# named-checkzone example.com example.com.db&lt;br /&gt;zone example.com/IN: loaded serial 2012021307&lt;br /&gt;OK&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;b&gt;1-8. サービスを起動。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# service named start&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;b&gt;1-9. example.com の MX レコードを確認。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# dig @8.8.8.8 example.com mx&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;[応答結果]&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;exmple.com.  86400 IN MX 10 aspmx2.googlemail.com.&lt;br /&gt;exmple.com.  86400 IN MX 10 aspmx3.googlemail.com.&lt;br /&gt;exmple.com.  86400 IN MX 10 aspmx4.googlemail.com.&lt;br /&gt;exmple.com.  86400 IN MX 10 aspmx5.googlemail.com.&lt;br /&gt;exmple.com.  86400 IN MX 1 aspmx.l.google.com.&lt;br /&gt;exmple.com.  86400 IN MX 5 alt1.aspmx.l.google.com.&lt;br /&gt;exmple.com.  86400 IN MX 5 alt2.aspmx.l.google.com.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;a name="slave"&gt;&lt;font size="3"&gt;&lt;b&gt;2. スレーブサーバの構築手順&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;2-1. named.conf を編集。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;# vim /etc/named.conf&lt;/pre&gt;&lt;div&gt;&lt; 追記項目の例 &gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;view "external" {&lt;br /&gt;   allow-query { any; };&lt;br /&gt;   recursion no;&lt;br /&gt;   include "/etc/example.com.slave.zone";&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;b&gt;2-2. zone を記述するファイルを作成。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# vim example.com.slave.zone&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt; 記述内容の例 &gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;zone "example.com" IN {&lt;br /&gt;        type slave;&lt;br /&gt;        masters { xxx.xxx.xxx.147; };&lt;br /&gt;        file "slaves/example.com.slave.db";&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;type&lt;/b&gt;&lt;/li&gt;&lt;div&gt;スレーブサーバは slave としてください。&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;masters &lt;/b&gt;&lt;/li&gt;&lt;div&gt;マスターサーバの IP アドレスを指定してください。&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;file&lt;/b&gt;&lt;/li&gt;&lt;div&gt;マスターサーバから転送されるゾーンデータファイルの保存場所を slaves ディレクトリに指定して、ファイル名を決めます。&lt;/div&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;2-3. named.conf の内容に間違いがないかチェック。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;# named-checkconf&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;2-4. サービスを起動。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;# service named start&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;2-5. slaves ディレクトリにゾーンデータファイルが作成される。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# cat /slaves/example.com.slave.db&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;マスターサーバのゾーンデータファイルと同様の内容であることがわかります。&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;$ORIGIN .&lt;br /&gt;$TTL 86400 ; 1 day&lt;br /&gt;example.com  IN SOA ns1.example.com. root.example.com. (&lt;br /&gt;                          2012021307 ; serial&lt;br /&gt;                          10800      ; refresh (3 hours)&lt;br /&gt;                          3600       ; retry (1 hour)&lt;br /&gt;                          604800     ; expire (1 week)&lt;br /&gt;                          86400      ; minimum (1 day)&lt;br /&gt;                          )&lt;br /&gt;                          NS ns1.example.com.&lt;br /&gt;                          NS ns2.example.com.&lt;br /&gt;                          A xxx.xxx.xxx.145&lt;br /&gt;                          MX 1 aspmx.l.google.com.&lt;br /&gt;                          MX 5 alt1.aspmx.l.google.com.&lt;br /&gt;                          MX 5 alt2.aspmx.l.google.com.&lt;br /&gt;                          MX 10 aspmx2.googlemail.com.&lt;br /&gt;                          MX 10 aspmx3.googlemail.com.&lt;br /&gt;                          MX 10 aspmx4.googlemail.com.&lt;br /&gt;                          MX 10 aspmx5.googlemail.com.&lt;br /&gt;$ORIGIN example.com.&lt;br /&gt;ns1   A xxx.xxx.xxx.147&lt;br /&gt;ns2   A xxx.xxx.xxx.91&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;font size="3"&gt;以上で &lt;b&gt;DNS サーバの構築は完了&lt;/b&gt;です。&lt;/font&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;※ 今回は Google Apps の導入が目的の為、逆引き設定の話は割愛させていただきます。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;次は、&lt;b&gt;Google Apps の申込み 〜 サービスの有効化の話&lt;/b&gt;に進みたいと思います。&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;a name="activation"&gt;&lt;font size="4"&gt;&lt;b&gt;3. Google Apps のサービス有効化までの手順&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-1. Google Apps の製品ページにアクセス。&lt;/b&gt;&lt;/div&gt;&lt;div&gt;「開始する」のボタンをクリックしてください。&lt;/div&gt;&lt;a href="http://www.google.com/apps/intl/ja/group/index.html"&gt;http://www.google.com/apps/intl/ja/group/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-2. Google Apps に登録するドメイン名を入力。&lt;/b&gt;&lt;/div&gt;&lt;div&gt;「次へ進む」をクリックしてください。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-3. アカウント管理者の情報と組織の情報を入力。&lt;/b&gt;&lt;/div&gt;&lt;div&gt;「次へ進む」のボタンをクリックしてください。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-4.管理者アカウントの名前とパスワードを入力。&lt;/b&gt;&lt;/div&gt;&lt;div&gt;「文字の確認」に表示されている文字を入力してください。&lt;/div&gt;&lt;div&gt;利用規約を確認しましたら、「同意して、設定を続行 &gt;&gt;」ボタンをクリックしてください。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-5.Google Apps の管理者コントロールパネルにログイン。&lt;/b&gt;&lt;/div&gt;&lt;div&gt;URLは「&lt;a href&gt;https://www.google.com/a/example.com&lt;/a&gt;」となります。&lt;/div&gt;&lt;div&gt;「example.com」はGoogle Apps に登録したドメイン名になります。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-OI-bCQnzaX4/Tz0--mxDgOI/AAAAAAAAAD0/Jy6z3rtIFM0/s1600/login.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="109" width="320" src="http://1.bp.blogspot.com/-OI-bCQnzaX4/Tz0--mxDgOI/AAAAAAAAAD0/Jy6z3rtIFM0/s320/login.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-6.「Google Apps を有効にする」のボタンをクリック。&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-jdf6QwUmCBA/Tz4t0qhlEHI/AAAAAAAAAEA/JnUFZ9M70dk/s1600/ControlPanel%2B%25281%2529.JPG" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="188" width="320" src="http://4.bp.blogspot.com/-jdf6QwUmCBA/Tz4t0qhlEHI/AAAAAAAAAEA/JnUFZ9M70dk/s320/ControlPanel%2B%25281%2529.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-7.「所有権の確認」で「別の方法」をクリック。&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-iC3LYdyMjUY/Tz-4c84ELSI/AAAAAAAAAEk/UjatQwx8YcM/s1600/googleapps_domain2.JPG" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="182" width="320" src="http://1.bp.blogspot.com/-iC3LYdyMjUY/Tz-4c84ELSI/AAAAAAAAAEk/UjatQwx8YcM/s320/googleapps_domain2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-8.「DNS レコードをドメインの設定に追加」を選択。&lt;/b&gt;&lt;/div&gt;&lt;div&gt;「ドメイン レジストラまたはプロバイダを選択」から「その他」を選択してください。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-9.「google-site-verification=文字列」の文字列をTXTレコードに登録。&lt;/b&gt;&lt;/div&gt;&lt;div&gt;example.comのDNSサーバに登録してください。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt; 記述内容の例 &gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;$TTL 86400&lt;br /&gt;@                          IN  SOA    ns1 root (&lt;br /&gt;                           &lt;b&gt;2012021601 ; Serial&lt;/b&gt;&lt;br /&gt;                           10800      ; Refresh   &lt;br /&gt;                           3600       ; Retry     &lt;br /&gt;                           604800     ; Expire   &lt;br /&gt;                           86400 )    ; Minimum&lt;br /&gt;&lt;br /&gt;                           IN NS      ns1&lt;br /&gt;                           IN NS      ns2&lt;br /&gt;&lt;br /&gt;                           IN A       xxx.xxx.xxx.145&lt;br /&gt;                           IN MX      1 aspmx.l.google.com.&lt;br /&gt;                           IN MX      5 alt1.aspmx.l.google.com.&lt;br /&gt;                           IN MX      5 alt2.aspmx.l.google.com.&lt;br /&gt;                           IN MX      10 aspmx2.googlemail.com.&lt;br /&gt;                           IN MX      10 aspmx3.googlemail.com.&lt;br /&gt;                           IN MX      10 aspmx4.googlemail.com.&lt;br /&gt;                           IN MX      10 aspmx5.googlemail.com.&lt;br /&gt;                           &lt;b&gt;IN TXT    "google-site-verification=xxxxxxxxxxxxxxxxxxxxxx"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ns1                        IN A       xxx.xxx.xxx.147&lt;br /&gt;ns2                        IN A       xxx.xxx.xxx.91&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;TXT レコードの記述は &lt;b&gt;"google-site-verification=xxxxxxxxxxxxxxxxxxxxxx" &lt;/b&gt;のようにダブルクォーテーションで括っています。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;font size="3"&gt;&lt;b&gt;注意！ シリアル番号の更新は忘れないようにしてください。&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-10.サービスを再起動。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;# service named restart&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-11.TXT レコードが反映されているかどうか確認。&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;# dig @8.8.8.8 example.com txt&lt;/pre&gt;&lt;div&gt; &lt; 実行結果を抜粋 &gt; &lt;/div&gt;&lt;pre&gt;;; ANSWER SECTION:&lt;br /&gt;example.com.  86399 IN TXT "google-site-verification=xxxxxxxxxxxxxxxxxxxxxx"&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-12.「所有権の確認」の画面で「確認」ボタンをクリック。&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-13.「example.com の所有権が確認されました。」と表示される。&lt;/b&gt;&lt;/div&gt;&lt;div&gt;「続行」のリンクをクリックしてください。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-S6gcKCk4iwg/Tz0v04sOpoI/AAAAAAAAADQ/VNglCt41SqQ/s1600/domain_ok.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="64" width="320" src="http://1.bp.blogspot.com/-S6gcKCk4iwg/Tz0v04sOpoI/AAAAAAAAADQ/VNglCt41SqQ/s320/domain_ok.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-14.「ダッシュボード」の画面に戻るので、「設定」をクリック。&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-15.「メール」の「MXレコード」の項目で「MX 設定の手順」のリンクをクリック。&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-16.「メール配信の方法」は「Google サーバー」を選択し、「次へ &gt;&gt;」をクリック。&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-17.「MXレコードを更新しています...」と表示される。&lt;/b&gt;&lt;/div&gt;&lt;div&gt;有効化まで最大で48時間かかる場合があります。しばらくお待ちください。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-DSWj2PplJBE/Tz0wDqWCN4I/AAAAAAAAADc/pmzP3JAUQLk/s1600/mx_record.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="48" width="320" src="http://4.bp.blogspot.com/-DSWj2PplJBE/Tz0wDqWCN4I/AAAAAAAAADc/pmzP3JAUQLk/s320/mx_record.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-18.「受信トレイ」のリンクをクリックし、Gmail のサービスにアクセス。&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;3-19.「作成」ボタンからメールを作成し、メールの送信ができるどうか確認をしてください。&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;font size="4"&gt;以上で &lt;b&gt;Google Apps の導入は完了&lt;/b&gt;です。お疲れさまでした！&lt;/font&gt;&lt;/div&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;div&gt;&lt;font size="4"&gt;&lt;b&gt;Standard Edition をご利用いただき、Google Apps for Business の導入をご検討される場合は是非 SIOS にご相談ください！お客様に最適なソリューションのご提案やサポートをさせていただきます。&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;font size="4"&gt; Google Apps の基本サポート/追加ソリューション/移行・サポート&lt;/font&gt;&lt;/div&gt;&lt;a href="http://www.sios.com/products/cloud/service/index.html"&gt;&lt;font size="4"&gt;http://www.sios.com/products/cloud/service/index.html&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;font size="4"&gt;&lt;b&gt;ここまでお付き合いくださった皆様、どうもありがとうございました。&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-2660999881199417521?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/2660999881199417521/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/google-apps-bind9.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/2660999881199417521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/2660999881199417521'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/google-apps-bind9.html' title='Google Appsを導入しよう (BIND9設定編)'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-OI-bCQnzaX4/Tz0--mxDgOI/AAAAAAAAAD0/Jy6z3rtIFM0/s72-c/login.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-5741293378618749944</id><published>2012-02-16T17:49:00.000+09:00</published><updated>2012-02-16T17:49:09.749+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RHEL6'/><category scheme='http://www.blogger.com/atom/ns#' term='openSUSE'/><category scheme='http://www.blogger.com/atom/ns#' term='SLES'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='RPM'/><category scheme='http://www.blogger.com/atom/ns#' term='CentOS 6'/><category scheme='http://www.blogger.com/atom/ns#' term='Scientific Linux 6'/><title type='text'>パッケージ更新した後、古いパッケージをロードしたままになっているプロセスを見つける。</title><content type='html'>&lt;p&gt;こんにちは、OSSテクノロジーセンターの原です。&lt;/p&gt;&lt;p&gt;今回は yum update した後、古いパッケージをロードしたままになっているプロセスを見つけてくれる便利な yum plugin を紹介しようと思います。&lt;/p&gt;&lt;p&gt;パッケージ名は yum-plugin-ps です。&lt;/p&gt;&lt;p&gt;RHEL 6.x から利用可能で、RHEL Server Optional チャンネルにあります。&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;p&gt;&lt;b&gt;インストール：&lt;/b&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# yum install -y yum-plugin-ps&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;使い方としては、何かをインストール、アップデートした後に実行します。&lt;/p&gt;&lt;p&gt;その前に、一旦 yum ps コマンドを使って、現在の状況を確認したいと思います。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# yum ps&lt;br /&gt;Loaded plugins: product-id, ps, security, subscription-manager&lt;br /&gt;Updating certificate-based repositories.&lt;br /&gt;       pid proc                  CPU      RSS      State uptime&lt;br /&gt;ps&lt;br /&gt;#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;特になにもないようです。では一例として apr パッケージをアップデートしてみます。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# yum update -y apr apr-util&lt;br /&gt;Loaded plugins: product-id, ps, security, subscription-manager&lt;br /&gt;Updating certificate-based repositories.&lt;br /&gt;Setting up Update Process&lt;br /&gt;Resolving Dependencies&lt;br /&gt;--&gt; Running transaction check&lt;br /&gt;---&gt; Package apr.x86_64 0:1.3.9-3.el6 will be updated&lt;br /&gt;---&gt; Package apr.x86_64 0:1.3.9-3.el6_1.2 will be an update&lt;br /&gt;---&gt; Package apr-util.x86_64 0:1.3.9-3.el6 will be updated&lt;br /&gt;--&gt; Processing Dependency: apr-util = 1.3.9-3.el6 for package: apr-util-ldap-1.3.9-3.el6.x86_64&lt;br /&gt;---&gt; Package apr-util.x86_64 0:1.3.9-3.el6_0.1 will be an update&lt;br /&gt;--&gt; Running transaction check&lt;br /&gt;---&gt; Package apr-util-ldap.x86_64 0:1.3.9-3.el6 will be updated&lt;br /&gt;---&gt; Package apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1 will be an update&lt;br /&gt;--&gt; Finished Dependency Resolution&lt;br /&gt;&lt;br /&gt;Dependencies Resolved&lt;br /&gt;&lt;br /&gt;======================================================================&lt;br /&gt; Package               Arch     Version            Repository     Size&lt;br /&gt;======================================================================&lt;br /&gt;Updating:&lt;br /&gt; apr            x86_64   1.3.9-3.el6_1.2   rhel-x86_64-server-6  123 k&lt;br /&gt; apr-util       x86_64   1.3.9-3.el6_0.1   rhel-x86_64-server-6   87 k&lt;br /&gt;Updating for dependencies:&lt;br /&gt; apr-util-ldap  x86_64   1.3.9-3.el6_0.1   rhel-x86_64-server-6   15 k&lt;br /&gt;&lt;br /&gt;Transaction Summary&lt;br /&gt;======================================================================&lt;br /&gt;Upgrade       3 Package(s)&lt;br /&gt;&lt;br /&gt;Total download size: 226 k&lt;br /&gt;Downloading Packages:&lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt;Total                                       25 MB/s | 226 kB     00:00&lt;br /&gt;Running rpm_check_debug&lt;br /&gt;Running Transaction Test&lt;br /&gt;Transaction Test Succeeded&lt;br /&gt;Running Transaction&lt;br /&gt;  Updating   : apr-1.3.9-3.el6_1.2.x86_64                          1/6&lt;br /&gt;  Updating   : apr-util-1.3.9-3.el6_0.1.x86_64                     2/6&lt;br /&gt;  Updating   : apr-util-ldap-1.3.9-3.el6_0.1.x86_64                3/6&lt;br /&gt;  Cleanup    : apr-util-ldap-1.3.9-3.el6.x86_64                    4/6&lt;br /&gt;  Cleanup    : apr-util-1.3.9-3.el6.x86_64                         5/6&lt;br /&gt;  Cleanup    : apr-1.3.9-3.el6.x86_64                              6/6&lt;br /&gt;Installed products updated.&lt;br /&gt;&lt;br /&gt;Updated:&lt;br /&gt;  apr.x86_64 0:1.3.9-3.el6_1.2       apr-util.x86_64 0:1.3.9-3.el6_0.1&lt;br /&gt;&lt;br /&gt;Dependency Updated:&lt;br /&gt;  apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1&lt;br /&gt;&lt;br /&gt;Complete!&lt;br /&gt;#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;アップデートできたら、早速 yum ps コマンドで確認してみます。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# yum ps&lt;br /&gt;Loaded plugins: product-id, ps, security, subscription-manager&lt;br /&gt;Updating certificate-based repositories.&lt;br /&gt;       pid proc                  CPU      RSS      State uptime&lt;br /&gt;apr-1.3.9-3.el6_1.2.x86_64&lt;br /&gt;     14216 httpd                0:00   3.8 MB   Sleeping: *07:01&lt;br /&gt;     14218 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14219 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14220 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14221 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14222 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14223 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14224 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14225 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;apr-util-1.3.9-3.el6_0.1.x86_64&lt;br /&gt;     14216 httpd                0:00   3.8 MB   Sleeping: *07:01&lt;br /&gt;     14218 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14219 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14220 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14221 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14222 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14223 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14224 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14225 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;apr-util-ldap-1.3.9-3.el6_0.1.x86_64&lt;br /&gt;     14216 httpd                0:00   3.8 MB   Sleeping: *07:01&lt;br /&gt;     14218 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14219 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14220 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14221 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14222 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14223 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14224 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;     14225 httpd                0:00   2.4 MB   Sleeping: *07:01&lt;br /&gt;ps&lt;br /&gt;#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;どうやら httpd が古い apr のパッケージをロードしたままになっているようですので、再起動しましょう。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# /etc/init.d/httpd restart&lt;br /&gt;httpd を停止中:                                            [  OK  ]&lt;br /&gt;httpd を起動中:                                            [  OK  ]&lt;br /&gt;#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;新しい apr を読みなおすことができたでしょうか。再度 yum ps を確認します。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# yum ps&lt;br /&gt;Loaded plugins: product-id, ps, security, subscription-manager&lt;br /&gt;Updating certificate-based repositories.&lt;br /&gt;       pid proc                  CPU      RSS      State uptime&lt;br /&gt;ps&lt;br /&gt;#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;めでたく古い apr のパッケージをロードしたままになっているプロセスはなくなったようです。&lt;/p&gt;&lt;p&gt;ちなみに SLES 11 でも同じような機能をもつ zypper ps というコマンド存在します。(むしろ zypper ps の方が実装されたのが早かったハズです)&lt;/p&gt;&lt;p&gt;利用方法は yum ps と同じですが、zypper の方は特別にプラグインを導入する必要はありません。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# zypper ps&lt;br /&gt;No processes using deleted files found.&lt;br /&gt;#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;今回確認に利用した apr は yum ps (zypper ps) を利用しなくても、 Apache Portable Runtime (APR) の名前から、Apache の再起動が必要そうなイメージが付きますが、パッと見どのプロセスが関連しているのかわからないパッケージも時々あるかと思います。&lt;/p&gt;&lt;p&gt;そんな時は是非この yum ps (zypper ps) を利用してみてください。&lt;/p&gt;&lt;p&gt;ではでは。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-5741293378618749944?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/5741293378618749944/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5741293378618749944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5741293378618749944'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/blog-post.html' title='パッケージ更新した後、古いパッケージをロードしたままになっているプロセスを見つける。'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-339129444574696847</id><published>2012-02-16T12:00:00.000+09:00</published><updated>2012-02-21T17:18:13.521+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ZFS'/><category scheme='http://www.blogger.com/atom/ns#' term='CentOS 6'/><title type='text'>連載「ZFS on Linux」第1回～ZFS on Linux のインストール～</title><content type='html'>&lt;p&gt;サイオステクノロジー 鎌田です。お久しぶりです。&lt;/p&gt;&lt;p&gt;当ブログの連載記事としては、既に2名の方が libvirt と OS コマンドの解説で執筆されていますが、私は個人的に興味のある ZFS を Linux で使える &lt;a href="http://zfsonlinux.org/"&gt;ZFS on Linux&lt;/a&gt; に照準を当てたいと思います。&lt;/p&gt;&lt;p&gt;ZFS on Linux に関しては既に様々な情報がありますが、なぜあえて今やりたいのかと申しますと、私個人としては FreeBSD が好きであることと、FreeBSD が ZFS をネイティブ実装していて興味があることと、ZFS って名前だけよく聞くけど結局よくわかっていない、という理由でせっかくなので連載記事として追っていこうと思い立ったことが始まりです。&lt;/p&gt;&lt;p&gt;そういうわけでして、あまり詳しい情報を記載できるという保証ができないのですが、検証記録的なノリでぜひご覧いただければと思っています。それでは、第1回目として ZFS on Linux のインストールから始めたいと思います。&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;h3&gt;環境&lt;/h3&gt;&lt;p&gt;今回の連載で使用する検証用の環境は次の通りです。&lt;/p&gt;&lt;ul&gt;  &lt;li&gt;CentOS 6.2 (x86_64) : 最小インストール&lt;/li&gt;  &lt;li&gt;ZFS on Linux 0.6.0-rc6&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;インストール手順&lt;/h3&gt;&lt;p&gt;次に、インストール手順です。&lt;/p&gt;&lt;ol&gt;  &lt;li&gt;    &lt;p&gt;&lt;a href="http://zfsonlinux.org/"&gt;ZFS on Linux&lt;/a&gt; のサイトから、以下の2つのファイルをダウンロードします。&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;spl-0.6.0-rc6.tar.gz&lt;/li&gt;      &lt;li&gt;zfs-0.6.0-rc6.tar.gz&lt;/li&gt;    &lt;/ul&gt;  &lt;/li&gt;  &lt;li&gt;    &lt;p&gt;上記2つをコンパイルし、RPM 化するために必要なパッケージをインストールします。yum コマンドを使ってさくっと入れちゃいましょう。&lt;/p&gt;    &lt;pre&gt;# yum groupinstall "Development Tools"&lt;br /&gt;# yum install zlib-devel libuuid-devel libblkid-devel libselinux-devel parted lsscsi&lt;/pre&gt;  &lt;/li&gt;  &lt;li&gt;    &lt;p&gt;まずは SPL をコンパイルし、インストールします。"make rpm" の部分は結構時間かかります。&lt;/p&gt;    &lt;pre&gt;# tar xzvf spl-0.6.0-rc6.tar.gz&lt;br /&gt;# cd spl-0.6.0-rc6.tar.gz&lt;br /&gt;# ./configure&lt;br /&gt;# make rpm&lt;br /&gt;# rpm -Uvh *.x86_64.rpm&lt;/pre&gt;  &lt;/li&gt;  &lt;li&gt;    &lt;p&gt;そして ZFS をコンパイルし、インストールします。ここも、"make rpm" の部分に結構時間かかります。&lt;/p&gt;    &lt;pre&gt;# tar xzvf zfs-0.6.0-rc6.tar.gz&lt;br /&gt;# cd zfs-0.6.0-rc6&lt;br /&gt;# ./configure&lt;br /&gt;# make rpm&lt;br /&gt;# rpm -Uvh *.x86_64.rpm&lt;/pre&gt;  &lt;/li&gt;  &lt;li&gt;    &lt;p&gt;一旦 OS を再起動し、以下のコマンドを実行すると、ファイルシステムとして ZFS が利用可能になっていることがわかります。&lt;/p&gt;    &lt;pre&gt;# cat /proc/filesystems&lt;br /&gt; :&lt;br /&gt;nodev   zfs&lt;/pre&gt;  &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;というわけで、ZFS が利用できる状況になりました。次回は ZFS 領域を作っていろいろさわってみます。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-339129444574696847?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/339129444574696847/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/zfs-on-linux1zfs-on-linux.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/339129444574696847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/339129444574696847'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/zfs-on-linux1zfs-on-linux.html' title='連載「ZFS on Linux」第1回～ZFS on Linux のインストール～'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-6406129281240386083</id><published>2012-02-15T17:02:00.000+09:00</published><updated>2012-02-21T17:17:42.969+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenShift'/><title type='text'>OpenShift で MTOS セットアップ</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-00yg4GAo21Y/TztkUVCV7PI/AAAAAAAAACs/t1h0_whdCro/s1600/OpenShift%2Bby%2BRed%2BHat.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="140" src="http://4.bp.blogspot.com/-00yg4GAo21Y/TztkUVCV7PI/AAAAAAAAACs/t1h0_whdCro/s200/OpenShift%2Bby%2BRed%2BHat.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;お世話になっております。&lt;br /&gt;OSSTC 佐藤です。&lt;/p&gt;&lt;p&gt;今日は Red Hat 社の PaaS で絶賛売り出し中の OpenShift を触ります。&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;Red Hat - OpenShift&lt;/dt&gt;   &lt;dd&gt;&lt;a href="https://openshift.redhat.com"&gt;https://openshift.redhat.com&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;OpenShift は以下の様な言語やフレームワークをサポートしています。&lt;br /&gt;Databases も豊富です。ちなみに無料利用が可能な EXPRESS で割り当てられるディスクサイズはデフォルトで 512 MB です。&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;Languages and Frameworks&lt;/dt&gt;   &lt;dd&gt;&lt;a href="https://openshift.redhat.com/app/features"&gt;https://openshift.redhat.com/app/features&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;さて、まずは使ってみましょう。&lt;/p&gt;&lt;p&gt;"Sign up for OpenShift" で登録を行います。&lt;br /&gt;"Promotional Code" は空欄で問題ありません。&lt;/p&gt;&lt;p&gt;登録後確認メールが飛んできますので、メール内容を確認の上記載されている確認用 URL へアクセスする事で準備は完了です。&lt;/p&gt;&lt;p&gt;ログインするとローカル環境のセットアップを行う為に説明があります。&lt;br /&gt;いきなり動画を見てしまった私はどうやってコピペすんじゃ！とも思いましたが、それはただの短気っぷりを発揮したにすぎません。&lt;/p&gt;&lt;p&gt;ログイン後に左のメニューから Quickstart を確認してもらえば手詰まりはしないです。&lt;br /&gt;"1. Install the client tools" に簡潔に書いてあります。&lt;/p&gt;&lt;p&gt;Red Hat 系はレポジトリを追加して yum にて簡単にセットアップが行えます。&lt;br /&gt;Other Linux 環境では以下の手順で進めました。&lt;br /&gt;&lt;small&gt;# 諸処お察し下さい。&lt;/small&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;　$ su -c "zypper install git ruby rubygems"&lt;br /&gt;　$ su -c "gem install rhc"&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;"Express Console" にてブラウザでも環境構築できますが CUI で進めてみます。&lt;/p&gt;&lt;p&gt;以下のコマンドは読み替えてください。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;mydomain はユニークなものである必要があります。&lt;/li&gt;&lt;li&gt;rhlogin は申請時のメールアドレスです。&lt;/li&gt;&lt;li&gt;appname は git で管理するアプリケーション名です。&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;今回はフレームワークで何かしたりというのは後回しで、まずはアプリケーションを作成する(動かしてみる)事が目的なので MTOS でいきます。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;　$ rhc-create-domain -n mydomain -l rhlogin&lt;br /&gt;　$ rhc-create-app -a appname -t perl-5.10&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;TYPE 指定を perl にしたのでローカルに appanme/perl が生成されます。そこが DocumentRoot になるみたいです。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;　$ cd appname/perl&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;MTOS をダウンロードして DocumentRoot に展開します。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;　$ unzip ~/Download/MTOS-5.12-ja.zip&lt;br /&gt;　$ cd MTOS-5.12-ja/&lt;br /&gt;　$ mv * ..&lt;br /&gt;　$ cd ../&lt;br /&gt;　$ rm -rf MTOS-5.12-ja/&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;最後に htaccess で典型的な設定を施します。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;　$ vi .htaccess&lt;br /&gt;&lt;br /&gt;[ mt/perl/.htaccess ]&lt;br /&gt;--------------------------------&lt;br /&gt;&amp;lt;Files ~ &amp;quot;^\.(htaccess|htpasswd)&amp;amp;&amp;quot;&amp;gt;&lt;br /&gt;deny from all&lt;br /&gt;&amp;lt;/Files&amp;gt;&lt;br /&gt;Options -Indexes&lt;br /&gt;DirectoryIndex index.html index.pl      &lt;br /&gt;order deny,allow&lt;br /&gt;--------------------------------&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;一通りファイルは揃ったので push します。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;　$ git add -A&lt;br /&gt;　$ git commit -a -m 'MTOS upload'&lt;br /&gt;　$ git push &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;push すると環境構築が開始されたりしますので待ちます。はい、待ちます。&lt;/p&gt;&lt;p&gt;無事完了したら http://appname-mydomain.rhcloud.com/mt.cgi にアクセスすると見慣れた設定ページが表示されます。&lt;/p&gt;&lt;p&gt;DB を SQLite に選択して、パスは "../../data/任意のデータベースファイル名" にて進めばそのままいけます。SMTP は sendmail 利用で進んでいけば OK。&lt;/p&gt;&lt;p&gt;まぁ便利な世の中になりました。&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;[参考]&lt;br /&gt;OPENSHIFT EXPRESS EVALUATION GUIDE - Redhat&lt;/dt&gt;   &lt;dd&gt;&lt;a href="https://www.redhat.com/openshift/community/sites/default/files/documents/RHOS_Express_Eval_Guide.pdf"&gt;https://www.redhat.com/openshift/community/sites/default/files/documents/RHOS_Express_Eval_Guide.pdf&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-6406129281240386083?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/6406129281240386083/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/openshift-mtos.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/6406129281240386083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/6406129281240386083'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/openshift-mtos.html' title='OpenShift で MTOS セットアップ'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-00yg4GAo21Y/TztkUVCV7PI/AAAAAAAAACs/t1h0_whdCro/s72-c/OpenShift%2Bby%2BRed%2BHat.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-4158936984000721654</id><published>2012-02-14T12:00:00.000+09:00</published><updated>2012-02-21T17:17:11.973+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RHEL'/><title type='text'>Red Hat Enterprise Linux スタンダードサポート提供時間変更のお知らせ</title><content type='html'>&lt;p&gt;おはようございます。 &lt;br&gt;本日はバレンタインデーですね。 今年はなぜか芋焼酎を2本もらった村田です。&lt;/p&gt;&lt;p&gt;さて、今回の記事も前回の稲垣に続いて、Red Hat のサポートに関するお話です。 &lt;/p&gt;&lt;p&gt;これまで、平日9時～21時のサポート（通称9時9時サポート）を提供していた Red Hat Enterprise Linux (以下:RHEL) スタンダードサポートが、2012年4月1日受注分以降、順次9時～17時へ変更されます。&lt;/p&gt;&lt;p&gt;夕方にトラブルが発生してサポート時間に間に合うようにと、17時前にバタバタすることはよくあることかと思いますが、RHEL スタンダードサポートは21時まで受付して頂けることで助けられていた方も少なくないのではないでしょうか。 &lt;/p&gt;&lt;p&gt; 少しでも長く21時までのサポートを受けたいという方は、 &lt;u&gt;&lt;strong&gt;2012年3月23日（金）まで&lt;/strong&gt;&lt;/u&gt;に発注を頂くことで、切り替わる時期を後ろに延ばすことができるようです。夕方以降に RHEL スタンダードサポートをご利用された事がある方は、この機会にぜひ駆け込み発注をご検討ください。 &lt;/p&gt;&lt;p&gt; 注） 2014年4月1日以降は全ての契約が9時～17時サポートになります。  &lt;/p&gt;&lt;p&gt;詳しくは以下の SIOS Web にて解説がありますのでご確認ください。 &lt;br&gt;  &lt;a href="http://i.sios.com/products/oss/redhat/info/red-hat-enterprise-linux.html" target="_blank"&gt;Red Hat Enterprise Linux スタンダードサポート提供時間 変更のお知らせ &lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-4158936984000721654?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/4158936984000721654/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/red-hat-enterprise-linux.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/4158936984000721654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/4158936984000721654'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/red-hat-enterprise-linux.html' title='Red Hat Enterprise Linux スタンダードサポート提供時間変更のお知らせ'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-130818250379518387</id><published>2012-02-10T19:11:00.000+09:00</published><updated>2012-02-15T16:29:34.440+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RHEL6'/><category scheme='http://www.blogger.com/atom/ns#' term='RHEL5'/><title type='text'>RHEL5,6 のサポート期間変更のお知らせ</title><content type='html'>&lt;p&gt;お久しぶりです、サイオステクノロジーの稲垣です。&lt;/p&gt;&lt;p&gt;今回は、RHEL のサポート期間延長に関するお話です。&lt;/p&gt;&lt;p&gt;今までの RHEL のサポート期間は、標準で 7 年でしたが、RHEL5、RHEL6 では標準で &lt;strong&gt;10 年&lt;/strong&gt;と、従来よりも 3 年長いサポート期間が提供されることになりました。&lt;/p&gt;&lt;p&gt;RHEL5、RHEL6 のサポート終了期間は、以下の様に公表されています。&lt;br /&gt;ライフサイクルの詳細が載っている URL もあるので、併せて確認してみてください。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Red Hat Enterprise Linux 5&lt;br /&gt;2017 年 3 月 31 日&lt;/li&gt;&lt;li&gt;Red Hat Enterprise Linux 6&lt;br /&gt;2020 年 11 月 30 日&lt;/li&gt;&lt;/ul&gt;&lt;a href="https://access.redhat.com/support/policy/updates/errata/"&gt;Red Hat Enterprise Linux Life Cycle&lt;/a&gt;&lt;p&gt;&lt;B&gt;&lt;U&gt;補足：&lt;/U&gt;&lt;/B&gt;&lt;br /&gt;&lt;small&gt;2012/2/10 現在、RHEL5、RHEL6 では、RHEL3、RHEL4 の Extended Lifecycle Support (ELS) に相当するサポートは提供されていません。そのため当初の記述から変更しております。&lt;br /&gt;RHEL5、RHEL6 の Life Cycle に記載されている Extended Life Phase (ELP) については、テクニカルサポートは受けられないものの、サブスクリプションをお持ちであればカスタマーポータル上で、パッケージ、ISO イメージ、ドキュメント、ナレッジにアクセスが可能とのことです。&lt;/small&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-130818250379518387?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/130818250379518387/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/rhel56.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/130818250379518387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/130818250379518387'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/rhel56.html' title='RHEL5,6 のサポート期間変更のお知らせ'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-5311967784895575815</id><published>2012-02-08T12:00:00.000+09:00</published><updated>2012-02-16T10:24:54.133+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RHEL'/><title type='text'>閏年 ~RHEL への影響は？~</title><content type='html'>&lt;p&gt;お久しぶりです、サイオステクノロジーの稲垣です。&lt;/p&gt;&lt;p&gt;今年は待ちに待った閏年です！…ということで、今回は閏年についての記事です。&lt;/p&gt;&lt;p&gt;1 年が例年より 1 日多いことで、使用しているシステムに影響があるかもしれないと考える方も多いのではないでしょうか。&lt;/p&gt;&lt;p&gt;Red Hat Enterprise Linux に含まれるすべてのアプリケーションは、閏年の処理を考慮して設計されているため、RHEL は閏年の影響を受けたという報告は今のところありません。&lt;/p&gt;&lt;p&gt;念のため Red Hat の Bugzilla を確認してみましたが、閏年に関する登録はありませんでした。&lt;br /&gt;&lt;small&gt;※仮に閏年に関する問題があったとしたら、既に大騒ぎになっているはずなので、今の時点で何もアナウンスが無いということは…という考え方もできます。&lt;/small&gt;&lt;/p&gt;&lt;p&gt;以上、閏年についての情報でした。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-5311967784895575815?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/5311967784895575815/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/rhel.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5311967784895575815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5311967784895575815'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/rhel.html' title='閏年 ~RHEL への影響は？~'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-3725204267087681167</id><published>2012-02-07T17:00:00.000+09:00</published><updated>2012-02-21T11:10:55.724+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='libvirt'/><category scheme='http://www.blogger.com/atom/ns#' term='KVM'/><category scheme='http://www.blogger.com/atom/ns#' term='RHEL6'/><category scheme='http://www.blogger.com/atom/ns#' term='仮想化'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='CentOS 6'/><category scheme='http://www.blogger.com/atom/ns#' term='Scientific Linux 6'/><title type='text'>連載「libvirt を利用して日々の作業を効率化」第１回</title><content type='html'>&lt;p&gt;こんにちは。1月からサイオスに Join した 原です。&lt;/p&gt;&lt;p&gt;libvirt は Red Hat 社が中心に開発する、仮想化管理用の標準 API です。&lt;/p&gt;&lt;p&gt;サポートされているプロダクトであれば、全て同じように扱えるのが魅力です。&lt;/p&gt;&lt;p&gt;まずはおさらいとして、どんなものに対応しているか見てみます。&lt;/p&gt;&lt;p&gt;&lt;a href="http://libvirt.org/drivers.html"&gt;libvirt: Internal drivers&lt;/a&gt; に一覧が出ています。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;The KVM/QEMU Linux hypervisor&lt;br /&gt;The Xen hypervisor on Linux and Solaris hosts.&lt;br /&gt;The LXC Linux container system&lt;br /&gt;The OpenVZ Linux container system&lt;br /&gt;The User Mode Linux paravirtualized kernel&lt;br /&gt;The VirtualBox hypervisor&lt;br /&gt;The VMware ESX and GSX hypervisors&lt;br /&gt;The VMware Workstation and Player hypervisors&lt;br /&gt;The Microsoft Hyper-V hypervisor&lt;br /&gt;Virtual networks using bridging, NAT, VEPA and VN-LINK.&lt;br /&gt;Storage on IDE/SCSI/USB disks, FibreChannel, LVM, iSCSI, NFS and filesystems&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Xen や KVM を触っている(いた)方なら、libvirt の CLI ツールである virsh コマンドや、GUI ツールの virt-manager を利用したことがある方が多いのではないでしょうか。&lt;/p&gt;&lt;p&gt;単に virsh コマンドを利用するのも複数の Hypervisor に対応しているだけあって便利なのですが、API にアクセスする、"ちょっとしたツール"を作り、日々の作業を自動化することで、より libvirt の醍醐味を味わうことが出来ます。&lt;/p&gt;&lt;p&gt;"ちょっとしたツール"を作るにあたって、どんな言語バインディングがあるのかは、&lt;a href="http://libvirt.org/bindings.html"&gt;libvirt: Bindings for other languages&lt;/a&gt; をご確認ください。&lt;/p&gt;&lt;p&gt;この連載では、libvirt を中心に、仮想化インフラストラクチャの自動化にスポットを当てて、日々の作業を効率化するためのヒントを紹介できればと思います。&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;p&gt;例として libvirt API を利用して、Web 画面から仮想マシンを立ち上げるサイトを作成してみたいと思います。&lt;/p&gt;&lt;p&gt;今回のサーバの構成は下記のようになります。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ホスト名: kvmhost - ハイパーバイザ(KVM, libvirtd, Scientific Linux 6.1) 1台&lt;/li&gt;&lt;li&gt;ホスト名: webvirt - Webサーバ(Ruby, libvirt-client, Scientific Linux 6.1) 1台&lt;/li&gt;&lt;li&gt;仮想マシン 数台&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Webサーバの構成&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Ruby&lt;/li&gt;&lt;li&gt;Sinatra(DSL)&lt;/li&gt;&lt;li&gt;WEBrick(httpサーバ)&lt;/li&gt;&lt;li&gt;ruby-libvirt(libvirtクライアント)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;以下、ハイパーバイザ側を kvmhost、Webサーバ側を webvirt と呼びます。&lt;/p&gt;&lt;p&gt;また、明示的にユーザ名を指定しない場合は全て root での作業となります。&lt;/p&gt;&lt;p&gt;今回は Webサーバとして Ruby にビルドインされた werick を、libvirt-client の言語バインディングとしては Ruby を利用しますが、どのWebサーバ・言語でも基本的な設計はかわりません。&lt;/p&gt;&lt;p&gt;kvmhost側は、既に KVM 及び libvirtd が稼動しているものとして、webvirt側の構築をします。&lt;/p&gt;&lt;p&gt;まずは EPEL リポジトリを追加して、必要なパッケージを導入します。&lt;/p&gt;&lt;p&gt;補足になりますが、EPEL リポジトリは RHEL のアップストリームである、Fedora Project の有志によって運営されている RHEL 向けの高品質なアドオンパッケージリポジトリです。&lt;/p&gt;&lt;p&gt;また、CentOS や Scientific Linux (SL) のような RHEL からスピンオフしたディストリビューションとの互換性もあります。&lt;/p&gt;&lt;pre&gt;# rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm&lt;br /&gt;# yum install -y openssh-clients ruby rubygem-sinatra ruby-libvirt&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;次に、kvmhost と webvirt をどのように通信させるかを検討します。&lt;/p&gt;&lt;p&gt;libvirt の接続には ssh を始めいくつかの接続手段があります。&lt;/p&gt;&lt;p&gt;詳しくは &lt;a href="http://libvirt.org/remote.html"&gt;libvirt: Remote support&lt;/a&gt; をご確認ください。&lt;/p&gt;&lt;p&gt;今回は最も簡単な ssh による接続を利用したいと思います。&lt;/p&gt;&lt;p&gt;webvirt側&lt;/p&gt;&lt;pre&gt;# cd ~&lt;br /&gt;# mkdir .ssh&lt;br /&gt;# ssh-keygen&lt;br /&gt;(質問は全てエンターで進んでしまって構いません)&lt;br /&gt;# cd .ssh&lt;br /&gt;# cat id_rsa.pub &amp;gt;&amp;gt; webvirt-id_rsa.pub&lt;br /&gt;# scp ./webvirt-id_rsa.pub root@kvmhost/root/.ssh&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;kvmhost側&lt;/p&gt;&lt;pre&gt;# cd .ssh/&lt;br /&gt;# cat webvirt-id_rsa.pub &amp;gt;&amp;gt; authorized_keys&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;少しそれますが、例えば Ruby 組み込みの webrick ではなく、 Phusion Passenger(mod_rails for Apache)や、mod_perl、mod_php 等、他の言語で webサーバを Apache で動かしたい場合は下記の様に、Apacheユーザでノンパスワードログイン出来るようにしておきます。&lt;/p&gt;&lt;pre&gt;# cd /var/www/&lt;br /&gt;# mkdir .ssh&lt;br /&gt;# chown apache.apache .ssh/&lt;br /&gt;# sudo -u apache ssh-keygen&lt;br /&gt;# cd .ssh&lt;br /&gt;# cat id_rsa.pub &amp;gt;&amp;gt; webvirt-id_rsa.pub&lt;br /&gt;# scp ./webvirt-id_rsa.pub root@kvmhost/root/.ssh&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;sudo で apache ユーザの ssh 鍵を作成するのがポイントです。&lt;/p&gt;&lt;p&gt;さて、話を戻して kvmhost側で ssh の受け入れが完了したら、webvirt からノンパスワードでログイン出来るか試してみましょう。&lt;/p&gt;&lt;pre&gt;# ssh root@kvmhost&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;さて、ここまでで、libvirtd に接続できる環境が整いました。&lt;/p&gt;&lt;p&gt;Ruby で接続する前に virsh コマンドで接続できるか確認してみましょう。&lt;/p&gt;&lt;pre&gt;# virsh -c qemu+ssh://kvmhost/system list --all&lt;br /&gt; Id Name                 State&lt;br /&gt;----------------------------------&lt;br /&gt;  - test1                shut off&lt;br /&gt;  - test2                shut off&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;libvirt に登録されているゲストマシンの一覧が表示されればOKです。&lt;/p&gt;&lt;p&gt;できましたでしょうか？&lt;/p&gt;&lt;p&gt;できたら、今度は Ruby でゲストマシンの一覧を取得できるか試してみましょう。&lt;/p&gt;&lt;p&gt;get_vm_list.rb&lt;/p&gt;&lt;pre&gt;#!/usr/bin/ruby&lt;br /&gt;require 'libvirt'&lt;br /&gt;conn = Libvirt::open("qemu+ssh://root@kvmhost/system")&lt;br /&gt;vm_list = conn.list_defined_domains&lt;br /&gt;puts vm_list&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;# chmod +x get_vm_list.rb&lt;br /&gt;# ./get_vm_list.rb&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Libvirt::open メソッドで接続し、list_defined_domains メソッドで非アクティブなゲストマシンの一覧を取得しています。&lt;/p&gt;&lt;p&gt;APIのドキュメントは下記に詳しく掲載されています。&lt;/p&gt;&lt;p&gt;&lt;a href="http://libvirt.org/ruby"&gt;Ruby bindings for libvirt&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://libvirt.org/ruby/api/index.html"&gt;Ruby bindings for libvirt RDoc Documentation&lt;/a&gt;&lt;/p&gt;&lt;p&gt;いかがでしたしょうか。&lt;/p&gt;&lt;p&gt;次回はこの環境を使って、実際に Web画面から仮想マシンのパワーオン/オフが行えるようにしていきたいと思います。&lt;/p&gt;&lt;p&gt;ではでは。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-3725204267087681167?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/3725204267087681167/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/libvirt.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/3725204267087681167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/3725204267087681167'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/libvirt.html' title='連載「libvirt を利用して日々の作業を効率化」第１回'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-114194256443185705</id><published>2012-02-06T17:05:00.000+09:00</published><updated>2012-02-06T17:05:26.686+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RHEL6'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux コマンド動作徹底解析'/><category scheme='http://www.blogger.com/atom/ns#' term='CentOS 6'/><category scheme='http://www.blogger.com/atom/ns#' term='ソースコード解析'/><category scheme='http://www.blogger.com/atom/ns#' term='Scientific Linux 6'/><title type='text'>連載「Linux コマンド動作徹底解析」"ls -l" 編 第1回</title><content type='html'>&lt;p&gt;サイオステクノロジー 金田です。&lt;/p&gt;&lt;p&gt;今日から「Linux コマンド動作徹底解析」と題した連載をスタートします。Linux でよく使われるコマンドを選んで、ソースコードを追いかけながらどのような動作をしているのかを見ていきます。途中に出てくるシステムコールや C言語のライブラリ関数も、man の情報だけではなく、必要に応じて kernel や glibc のソースコードを参照しながら説明できたらと思っています。&lt;/p&gt;&lt;p&gt;連載第1回は "ls -l" 編 と題して、週1回、計4回の予定で連載していく予定です。&lt;/p&gt;&lt;hr&gt;&lt;p&gt;さて、RHEL/CentOS/Scientific Linux のバージョン 6 系がリリースされてから１年近く経過し、お客様のシステムの導入に携わったり、あるいは検証用でさわってみた方も結構いらっしゃるかと思います。&lt;/p&gt;&lt;p&gt;バージョン 5 系にからの変化は色々とありますが、CUI で使われる ls コマンド (-l オプション付) の表示結果にちょっとした変化があったことはお気づきでしたでしょうか？&lt;/p&gt;&lt;p&gt;・&lt;b&gt;5 系の 'ls -l /' の結果例&lt;/b&gt;&lt;pre&gt;$ ls -l /&lt;br /&gt;合計 146&lt;br /&gt;drwxr-xr-x   2 root root  4096 11月 10 06:48 bin&lt;br /&gt;:&lt;/pre&gt;・&lt;b&gt;6 系の 'ls -l /' の結果例&lt;/b&gt;&lt;pre&gt;$ ls -l /&lt;br /&gt;合計 1910&lt;br /&gt;dr-xr-xr-x&lt;font color="red"&gt;.&lt;/font&gt;   2 root root    4096  2月  5 03:32 2012 bin&lt;br /&gt;:         ↑&lt;small&gt;この赤いドット&lt;/small&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;上記のように、パーミッション情報の最後に一つフィールドが追加されています。この追加されたフィールドについては man を参照しても何も記載されていません。今回の連載を始めるきっかけになったのは「はてさて、これは何だ？」という疑問からでした。"ls -l" 編では、コマンドの動作の詳細とともに、この追加されたフィールドが何なのかというのも見ていきたいと考えています。&lt;/p&gt;&lt;hr&gt;&lt;p&gt;実際にソースコードで動作を見ていく前に、今回解析に使用するシステム情報などを整理しておきます。&lt;p&gt;OS は Scientific Linux 6.1 (以下 SL6.1) を使用します。&lt;/p&gt;&lt;p&gt;次に SL6.1 に含まれる ls コマンドのバージョンを確認しておきます。&lt;/p&gt;&lt;p&gt;&lt;pre&gt;$ rpm -qf /bin/ls&lt;br /&gt;coreutils-8.4-13.el6.x86_64&lt;/pre&gt;&lt;small&gt;※32bit 環境の場合、x86_64 の部分が i386 になります。&lt;/small&gt;&lt;p&gt;&lt;p&gt;これに該当するソース RPM はミラーサイトなどからダウンロードします。ファイル名は &lt;br /&gt;coreutils-8.4-13.el6.src.rpm です。&lt;br /&gt;システムコールは kernel のソース RPM (kernel-2.6.32-131.0.15.el6.src.rpm)、&lt;br /&gt;ライブラリは glibc のソース RPM (glibc-2.12-1.25.el6.src.rpm) をそれぞれ使用します。&lt;/p&gt;&lt;p&gt;もしご自分でソースコードをご覧になりたい方は、次のような手順でソース RPM を展開してみてください。&lt;p&gt;&lt;p&gt;&lt;pre&gt;$ rpm -i coreutils-8.4-13.el6.src.rpm&lt;br /&gt;$ rpmbuild -bp ~/rpmbuild/SPECS/coreutils.spec --nodeps&lt;/pre&gt;&lt;p&gt;&lt;small&gt;注：kernel のソース RPM を rpmbuild -bp で展開する際は gcc が必要になります。&lt;/small&gt;&lt;/p&gt;&lt;p&gt;ソースコードツリーは ~/rpmbuild/BUILD/ ディレクトリ配下に展開されます。(以降、~/rpmbuild/BUILD/ をトップディレクトリとして話を進めていきます。)&lt;/p&gt;&lt;p&gt;連載初回ということで、前振りや諸条件の説明でそれなりにスペースを使ってしまったので、今回はここまでとします。(初回からソースコード解説を期待されていた方には申し訳ない)&lt;/p&gt;&lt;p&gt;次回以降、実際にソースコードを引用しながら ls -l の動作を見ていきます。ls コマンドを実行した際に、最初に呼ばれるコードは coreutils-8.4/src/ls.c の 1230 行目 main() 関数です。&lt;/p&gt;&lt;p&gt;&amp;lt;coreutils-8.4/src/ls.c&amp;gt; より&lt;pre&gt;   1230 main (int argc, char **argv)&lt;/pre&gt;&lt;/p&gt;&lt;p align="right"&gt;(続く)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-114194256443185705?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/114194256443185705/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/linux-ls-l-1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/114194256443185705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/114194256443185705'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/linux-ls-l-1.html' title='連載「Linux コマンド動作徹底解析」&quot;ls -l&quot; 編 第1回'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-5784864763000816729</id><published>2012-02-02T12:00:00.000+09:00</published><updated>2012-02-02T12:00:03.805+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openSUSE'/><category scheme='http://www.blogger.com/atom/ns#' term='SLES'/><title type='text'>SUSE 系にしか存在しないサービス起動コマンド</title><content type='html'>&lt;p&gt;お元気ですか？私は元気です。稲垣です。&lt;/p&gt;&lt;p&gt;今回は SUSE 特有のコマンドをご紹介します。&lt;/p&gt;&lt;p&gt;皆さんは、サービスを起動するときに何というコマンドを使用していますか？&lt;/p&gt;&lt;p&gt;Red Hat 系 OS を使用している方は、基本的に以下の 2 つのコマンドのどちらかを使用してサービスの起動をしていると思います。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;/sbin/service [サービス名] start&lt;br /&gt;/etc/init.d/[サービス名] start&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;しかし SUSE 系の OS の場合は、この 2 つのコマンド以外にもサービスを起動するコマンドがデフォルトで存在します。&lt;/p&gt;&lt;p&gt;それは、&lt;strong&gt;rc[サービス名]&lt;/strong&gt;コマンドです。これらのコマンドは、/etc/init.d/以下のコマンドのシンボリックリンクなので、/etc/init.d/以下のコマンドを実行するのと同じ様に動作します。&lt;/p&gt;&lt;p&gt;例:apache を起動する場合&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;/usr/sbin/rcapache2 start&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;rc コマンドは、/sbin、/usr/sbin、/usr/bin 以下にあります。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;ls -l /sbin/rc*&lt;br /&gt;/sbin/rcSuSEfirewall2 -&gt; /etc/init.d/SuSEfirewall2_setup&lt;br /&gt;/sbin/rcaaeventd -&gt; /etc/init.d/aaeventd&lt;br /&gt;/sbin/rcapparmor -&gt; /etc/init.d/boot.apparmor&lt;br /&gt;&lt;br /&gt;~省略~&lt;br /&gt;&lt;br /&gt;/sbin/rcrpcbind -&gt; /etc/init.d/rpcbind&lt;br /&gt;/sbin/rcsubdomain -&gt; /etc/init.d/boot.apparmor&lt;br /&gt;/sbin/rcsyslog -&gt; /etc/init.d/syslog&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ls -l /usr/sbin/rc*&lt;br /&gt;/usr/sbin/rcacpid -&gt; /etc/init.d/acpid&lt;br /&gt;/usr/sbin/rcalsasound -&gt; /etc/init.d/alsasound&lt;br /&gt;/usr/sbin/rcatd -&gt; /etc/init.d/atd&lt;br /&gt;&lt;br /&gt;~省略~&lt;br /&gt;&lt;br /&gt;/usr/sbin/rcxfs -&gt; /etc/init.d/xfs&lt;br /&gt;/usr/sbin/rcxinetd -&gt; /etc/init.d/xinetd&lt;br /&gt;/usr/sbin/rcypbind -&gt; /etc/init.d/ypbind&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ls -l /usr/bin/rc*&lt;br /&gt;/usr/bin/rcsmolt -&gt; /etc/init.d/smolt&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;もしかすると、/etc/init.d/ 以下のコマンドを実行するより 1 秒くらい時間短縮ができるかもしれません。&lt;br /&gt;SUSE ユーザの方は、使ってみてはいかがでしょうか。&lt;/p&gt;&lt;p&gt;以上、稲垣でした。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-5784864763000816729?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/5784864763000816729/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/suse.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5784864763000816729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5784864763000816729'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/suse.html' title='SUSE 系にしか存在しないサービス起動コマンド'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-3985441373534936976</id><published>2012-02-01T12:00:00.000+09:00</published><updated>2012-02-02T15:53:40.965+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RHEL4'/><title type='text'>RHEL4 系のサポート期間について</title><content type='html'>&lt;p&gt;おはようございます、こんにちは、こんばんは。サイオステクノロジーの稲垣です。&lt;/p&gt;&lt;p&gt;来る 2012 年 2 月 29 日、以下の Red Hat Enterprise Linux 4 系のサポートが終了します。&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;Red Hat Enterprise Linux 4 - 30 day End Of Life Notice&lt;/dt&gt;   &lt;dd&gt;&lt;a href="http://rhn.redhat.com/errata/RHSA-2012-0073.html"&gt;https://rhn.redhat.com/errata/RHSA-2012-0073.html&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;  &lt;dt&gt;[サポートが終了するプロダクト]&lt;/dt&gt;  &lt;dd&gt;Red Hat Enterprise Linux AS 4&lt;/dd&gt;  &lt;dd&gt;Red Hat Enterprise Linux ES 4&lt;/dd&gt;  &lt;dd&gt;Red Hat Enterprise Linux WS 4&lt;/dd&gt;  &lt;dd&gt;Red Hat Enterprise Linux Extras 4&lt;/dd&gt;  &lt;dd&gt;Red Hat Desktop 4&lt;/dd&gt;  &lt;dd&gt;Red Hat Global File System 4&lt;/dd&gt;  &lt;dd&gt;Red Hat Cluster Suite 4&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;Red Hat 社では、より新しいバージョンである 5 系や 6 系へのアップデートを推奨しています。&lt;/p&gt;&lt;p&gt;アップデートが難しい場合には、Red Hat Enterprise Linux 4 Extended Lifecycle Support を契約することで、RHEL4 のサポート期間を最大 3 年延長できます。この契約は以下のプロダクトにしか適用することができないので注意が必要です。&lt;/p&gt;&lt;dl&gt;  &lt;dt&gt;[適用できるプロダクト]&lt;/dt&gt;  &lt;dd&gt;Red Hat Enterprise Linux AS 4&lt;/dd&gt;  &lt;dd&gt;Red Hat Enterprise Linux ES 4&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;しかし、以下の URL 内のパッケージ一覧に載っているものは、Extended Lifecycle Support を適用してもサポート対象外になるので注意してください。&lt;/p&gt;&lt;dl&gt;  &lt;dt&gt;Extended Life Cycle Support - Exclusions&lt;/dt&gt;  &lt;dd&gt;&lt;a href="http://www.redhat.com/rhel/server/extended_lifecycle_support/exclusions/"&gt;http://www.redhat.com/rhel/server/extended_lifecycle_support/exclusions/&lt;/a&gt;&lt;/dd&gt;  &lt;dt&gt;Red Hat Enterprise Linux 4 Extended Lifecycle Support の詳細はこちらから&lt;/dt&gt;   &lt;dd&gt;・&lt;a href="http://cloud.watch.impress.co.jp/docs/news/20110301_430202.html"&gt;レッドハット、RHEL 4のサポートを最大3年延長可能なオプション～最大10年間のサポートを提供&lt;/a&gt;&lt;/dd&gt;  &lt;dd&gt;・&lt;a href="http://i.sios.com/products/oss/redhat/info/rhel-els-support.html"&gt;Red Hat Enterprise Linux Extended Life Cycle Support (RHEL ELS)延長サポートのご案内&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;アップデートを行うにしても、Red Hat 4 系を使用している場合は、早めの対応を行いましょう。&lt;/p&gt;&lt;p&gt;以上、稲垣からのお知らせでした。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-3985441373534936976?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/3985441373534936976/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/02/rhel4.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/3985441373534936976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/3985441373534936976'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/02/rhel4.html' title='RHEL4 系のサポート期間について'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-8491072577920871830</id><published>2012-01-31T12:00:00.000+09:00</published><updated>2012-01-31T12:00:02.960+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SLES'/><title type='text'>SLES10でノベルカスタマセンターに接続できない問題</title><content type='html'>&lt;p&gt;ご無沙汰しております、サイオステクノロジーの稲垣です。&lt;/p&gt;&lt;p&gt;今回は、SLES10 でノベルカスタマセンターに接続できない問題について紹介します。&lt;br /&gt;YaST を使用して [ノベルカスタマセンターの環境設定] を行った際に、以下のエラーが出力されてしまい、ノベルカスタマセンターへの接続に失敗する問題があります。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;Execute curl command failed with '60':&lt;br /&gt;curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:&lt;br /&gt;error: 14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed&lt;br /&gt;More details here ...&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;この問題は、SLES10SP4 のアップデートパッケージで修正が行われています。&lt;br /&gt;また、新規に SLES10SP4 をインストールした場合は、既にセキュリティ証明書ファイルが置き換わっているため、対策を行わなくても接続できます。&lt;/p&gt;&lt;p&gt;しかし、セキュリティ証明書ファイルが置き換わる前に作成した SLES10SP4 のシステムや、SLES10SP4 以前のシステムは、対策を行わなければノベルカスタマセンターに接続できません。&lt;/p&gt;&lt;p&gt;これから、SLES10SP4 以前のバージョンと置き換わる前に作成した SLES10SP4 での対策を説明します。&lt;/p&gt;&lt;ul&gt;  &lt;li&gt;    &lt;b&gt;SLES10SP4 以前のバージョンを使用している場合&lt;/b&gt;    &lt;p&gt;SLES10SP4 以前のバージョンを使用している場合は、新しいセキュリティ証明書ファイルをダウンロードして置き換える必要があります。&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;        /usr/share/curl/curl-ca-bundle.crt ファイルのバックアップを作成します。        &lt;pre&gt;cp /usr/share/curl/curl-ca-bundle.crt /usr/share/curl/curl-ca-bundle.crt.sav&lt;/pre&gt;      &lt;/li&gt;      &lt;li&gt;        &lt;p&gt;root ユーザに変更します。&lt;/p&gt;      &lt;/li&gt;      &lt;li&gt;        &lt;p&gt;以下の URL のファイルを、/usr/share/curl 以下と入れ替えます。&lt;/p&gt;        &lt;a href="http://support.novell.com/products/desktop/curl-ca-bundle.crt"&gt;http://support.novell.com/products/desktop/curl-ca-bundle.crt&lt;/a&gt;        &lt;pre&gt;# cd /usr/share/curl&lt;br /&gt;# rm curl-ca-bundle.crt&lt;br /&gt;# wget http://support.novell.com/products/desktop/curl-ca-bundle.crt&lt;/pre&gt;      &lt;/li&gt;      &lt;li&gt;        以下のコマンドで、ダウンロードしたセキュリティ証明書のテストをします。        &lt;pre&gt;# curl -v https://secure-www.novell.com/home/&lt;/pre&gt;        &lt;p&gt;※このコマンドを実行したときにエラーが出力されなければ、対処が行われたことになります。&lt;/p&gt;      &lt;/li&gt;    &lt;/ol&gt;  &lt;/li&gt;  &lt;li&gt;    &lt;b&gt;証明書が置き換わる前に作成した SLES10SP4 を使用している場合&lt;/b&gt;    &lt;p&gt;SLES10SP4 については、パッケージで修正が行われています。以下の手順を実施して対処してください。&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;        以下の URL から、修正対応済みの suseRegister と openssl-certs パッケージをダウンロードします。        &lt;dl&gt;          &lt;dt&gt;The suseRegister&lt;/dt&gt;          &lt;dd&gt;&lt;a href="http://download.novell.com/Download?buildid=Iedb9LC-InI~"&gt;http://download.novell.com/Download?buildid=Iedb9LC-InI~&lt;/a&gt;&lt;/dd&gt;          &lt;dt&gt;The openssl-certs&lt;/dt&gt;          &lt;dd&gt;&lt;a href="http://download.novell.com/Download?buildid=_7Pup8oi5zw~"&gt;http://download.novell.com/Download?buildid=_7Pup8oi5zw~&lt;/a&gt;&lt;/dd&gt;        &lt;/dl&gt;        &lt;p&gt;※これらのパッケージをダウンロードするには、ノベルカスタマセンターへのログインが必要になります。&lt;/p&gt;      &lt;/li&gt;      &lt;li&gt;        rpm -Uvh を使用して、ダウンロードしたパッケージをインストールします。        &lt;pre&gt;rpm -Uvh suseRegister-1.2-9.55.1.noarch.rpm&lt;/pre&gt;        &lt;pre&gt;rpm -Uvh openssl-certs-0.8.0-0.10.1.noarch.rpm&lt;/pre&gt;      &lt;/li&gt;      &lt;li&gt;        ノベルカスタマセンターへの接続を行います。      &lt;/li&gt;    &lt;/ol&gt;    &lt;p&gt;この手順を行なってもエラーが出力される場合は、以下の手順を実施します。&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;        以下のコマンドを実行し、/etc/ssl/certs ディレクトリを削除します。        &lt;pre&gt;rm -r /etc/ssl/certs/&lt;/pre&gt;      &lt;/li&gt;      &lt;li&gt;        以下のコマンドを実行し、openssl-certs パッケージを再インストールします。        &lt;pre&gt;rpm -Uvh --replacepkgs openssl-certs-0.8.0-0.10.1.noarch.rpm&lt;/pre&gt;      &lt;/li&gt;      &lt;li&gt;        ノベルカスタマセンターへの接続を行います。      &lt;/li&gt;    &lt;/ol&gt;  &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;ノベル社のページにも同様の記載があります。&lt;/p&gt;&lt;a href="http://www.novell.com/support/viewContent.do?externalId=7010008&amp;sliceId=1"&gt;http://www.novell.com/support/viewContent.do?externalId=7010008&amp;sliceId=1&lt;/a&gt;&lt;p&gt;以上、稲垣でした。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-8491072577920871830?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/8491072577920871830/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/01/sles10.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/8491072577920871830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/8491072577920871830'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/01/sles10.html' title='SLES10でノベルカスタマセンターに接続できない問題'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-5435015138088469788</id><published>2012-01-13T12:00:00.000+09:00</published><updated>2012-01-13T12:00:01.599+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openSUSE'/><category scheme='http://www.blogger.com/atom/ns#' term='SLES'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='セキュリティ'/><category scheme='http://www.blogger.com/atom/ns#' term='RHEL'/><title type='text'>rootユーザに変更できるユーザの制限方法</title><content type='html'>&lt;p&gt;お久しぶりです、サイオステクノロジーの稲垣です。&lt;/p&gt;&lt;p&gt;今回は、root ユーザに変更できるユーザの制限方法について紹介します。&lt;br /&gt;検証した OS は、RHEL4,5,6、SLES10,11、openSUSE10,11,12 です。&lt;br /&gt;早速、su コマンドで root 権限を得ることができるユーザの制限を行う手順を記載していきます。&lt;/p&gt;&lt;p&gt;以下の設定は、ユーザ名 user1 と user2 のみ su コマンドで root 権限を得ることができるようにする設定です。&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;/etc/login.defs に下記を追記します。　　&lt;pre&gt;SU_WHEEL_ONLY           yes&lt;/pre&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;/etc/group の wheel グループの行に許可したいユーザを追記します。&lt;br /&gt;&lt;br /&gt;[変更前]&lt;br /&gt;&lt;pre&gt;wheel:x:10:&lt;/pre&gt;　&lt;br /&gt;[変更後]&lt;br /&gt;&lt;pre&gt;wheel:x:10:user1,user2&lt;/pre&gt;※複数ユーザを指定する場合は、 "," で区切ります。&lt;br /&gt;※デフォルトで root が記載されている OS もあります。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;以下の行を指定のファイルに追記します。&lt;br /&gt;※SLES のバージョンによって追記するファイルが異なります。作業前に確認してください。&lt;/p&gt;&lt;p&gt;[追記する行]&lt;pre&gt;auth     required       pam_wheel.so use_uid&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;[追記するファイル]&lt;/p&gt;&lt;p&gt;・RHEL4.x、SLES10、openSUSE10.x の場合&lt;br /&gt;/etc/pam.d/su に追記します。&lt;/p&gt;&lt;p&gt;・RHEL5.x、6.x、SLES11、openSUSE11.x、12.x の場合&lt;br /&gt;"su -" を制限したい場合は /etc/pam.d/su-l に追記、"su" を制限したい場合は /etc/pam.d/su に追記します。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;これで、root ユーザに変更できるユーザを制限することができます。&lt;br /&gt;なお、この設定は即時反映されるため、再起動等は必要ありません。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-5435015138088469788?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/5435015138088469788/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/01/root.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5435015138088469788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5435015138088469788'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/01/root.html' title='rootユーザに変更できるユーザの制限方法'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-4811360185376920649</id><published>2012-01-06T12:00:00.000+09:00</published><updated>2012-01-06T12:00:00.820+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='cscope'/><category scheme='http://www.blogger.com/atom/ns#' term='ソースコード解析'/><title type='text'>cscope と vim の連携</title><content type='html'>&lt;p&gt;寒い日々が続いていますが、いかがお過ごしですか？サイオステクノロジー 稲垣です。&lt;br /&gt;前回は cscope の使用方法についてご紹介しましたが、今回は cscope と vim との連携についてご紹介します。&lt;/p&gt;&lt;p&gt;cscope と vim を組み合わせて使うには cscope_map.vim プラグインを ~/.vim/plugin/cscope_maps.vim に配置します。&lt;br /&gt;&lt;small&gt;&lt;i&gt;cscope_map.vim プラグインは &lt;a href="http://cscope.sourceforge.net/cscope_maps.vim"&gt;sourceforge&lt;/a&gt; から取得できます。&lt;a href="http://cscope.sourceforge.net/cscope_vim_tutorial.html"&gt;The Vim/Cscope tutorial&lt;/a&gt; もあわせてご覧ください。&lt;/i&gt;&lt;/small&gt;&lt;/p&gt;&lt;p&gt;インストール後、単語の先頭で下記のキー･バインディングをタイプすることで cscope のファンクションを呼び出すことが可能になります。&lt;/p&gt;&lt;p&gt;下記の記述で CTRL+\ s はコントロールキーと "\" を同時にタイプし、続けて "s" をタイプすることを示します。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;CTRL+\ s : C シンボルの検索&lt;li&gt;CTRL+\ g : グローバルな定義の検索 &lt;li&gt;CTRL+\ c : 呼び出す関数を検索&lt;li&gt;CTRL+\ t : この文字列を検索&lt;li&gt;CTRL+\ e : egrep パターンを検索&lt;li&gt;CTRL+\ f : ファイルを検索&lt;li&gt;CTRL+\ i : include しているファイルを検索&lt;li&gt;CTRL+\ d : 呼ばれる関数を検索&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-4811360185376920649?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/4811360185376920649/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/01/cscope-vim.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/4811360185376920649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/4811360185376920649'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/01/cscope-vim.html' title='cscope と vim の連携'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-4430709011534232315</id><published>2012-01-05T12:00:00.000+09:00</published><updated>2012-01-05T12:00:00.128+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cscope'/><category scheme='http://www.blogger.com/atom/ns#' term='ソースコード解析'/><title type='text'>ソースコード解析ツール -cscope-</title><content type='html'>&lt;p&gt;明けましておめでとうございます。サイオステクノロジー 稲垣です。&lt;br /&gt;今回は、ソースコード解析ツールである cscope をご紹介します。&lt;/p&gt;&lt;p&gt;cscope は、C、lex、または yacc のソースファイル内のコードの特定の要素を探し出す対話型プログラムです。cscope を使用すると、従来のエディタよりも効率的にソースファイルを検索、編集できます。&lt;/p&gt;cscope の初期起動オプション&lt;pre&gt;&lt;br /&gt;$ cscope -b -q -i cscope.files&lt;br /&gt;&lt;br /&gt;-b : インデックス作成後 cscope を起動しない&lt;br /&gt;-q : 逆引き用インデックスを作成する&lt;br /&gt;-i : インデックス作成に使うファイルリストを含んだファイルを指定する。&lt;br /&gt;     通常は cscope.files&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;これでできるファイルは、以下の 3 つとなります。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;cscope.in.out&lt;li&gt;cscope.out&lt;li&gt;cscope.po.out&lt;/ul&gt;&lt;p&gt;cscope.files は下記コマンドを実行して作成します。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;$ cscope-indexer -r&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;cscope は起動する毎にインデックスを作成しますが、-d オプションをつけて起動するとインデックス作成を行いません。&lt;/p&gt;&lt;p&gt;また cscope.files の先頭に "-q" と書いてあると、cscope 起動時に逆引き用インデックスを作成します。&lt;br /&gt;(-q オプションを付けて起動するのと同じ動作をする)&lt;/p&gt;&lt;p&gt;-k オプションを指定すると /usr/include 以下のヘッダ･ファイルを参照しません。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-4430709011534232315?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/4430709011534232315/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2012/01/cscope.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/4430709011534232315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/4430709011534232315'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2012/01/cscope.html' title='ソースコード解析ツール -cscope-'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-2410381633618313199</id><published>2011-12-31T12:06:00.000+09:00</published><updated>2011-12-31T12:10:11.011+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>worker MPM じゃないと ttl が動かない</title><content type='html'>&lt;p&gt;サイオス鎌田です。&lt;br /&gt;2011年ももうすぐ終わりですね。&lt;br /&gt;今回は、Apache のプロキシ設定に関するお話です。&lt;/p&gt;&lt;p&gt;Apache のプロキシ設定に、コネクションの生存時間を設定する ttl 設定があることはご存じでしょうか。&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;ProxyPass ディレクティブ&lt;/dt&gt;&lt;dd&gt;&lt;a href="http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass"&gt;http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;実はこの ttl 設定、Apache のコンパイル時にデフォルトで選択されたり、RHEL 等のデフォルトである prefork MPM では動作しません。ソースコード上ではスレッド MPM が有効な場合のみ動作するよう設計されているんです。従って、worker MPM 等のスレッド MPM でなければ ttl が使えません。&lt;/p&gt;&lt;p&gt;そのため、例えば prefork MPM のまま ttl 設定を行い、プロキシ先のサーバ、例えば Tomcat で connectionTimeout を設定していると、Apache からコネクションを切断することがないため、Tomcat からコネクションの切断要求が送信されたままになってしまい、CLOSE_WAIT の状態になってしまいます。&lt;/p&gt;&lt;p&gt;現在の Apache の trunk 上にあるソースコードを見た限りでは、スレッド MPM 限定となるような設計にはなっていなかったので、おそらく Apache 2.4 からは prefork MPM でも ttl が動作すると思われますが、Apache 2.0 系または Apache 2.2 系で ttl を使う場合は、worker MPM を使う方がいいかもしれません。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-2410381633618313199?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/2410381633618313199/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/worker-mpm-ttl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/2410381633618313199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/2410381633618313199'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/worker-mpm-ttl.html' title='worker MPM じゃないと ttl が動かない'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-5654318457251625859</id><published>2011-12-28T12:00:00.000+09:00</published><updated>2011-12-28T12:00:01.932+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Postfix'/><title type='text'>Spam対策 -Postfix-</title><content type='html'>&lt;p&gt;こんにちは、サイオステクノロジー 稲垣です。&lt;/p&gt;&lt;p&gt;前回に引き続き、Postfix の設定についてご紹介します。&lt;br /&gt;今回は、Postfix での Spam 対策についてです。&lt;/p&gt;&lt;p&gt;Postfix で利用可能な Spam 対策を、以下に示します。&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;送信元の IP アドレスによる制限&lt;/p&gt;&lt;p&gt;Spam 送信者が利用する IP アドレスを元に制限します。この設定ではサーバに直接接続してくる IP アドレスのみに対して有効です。Spam 送信者がプロバイダの SMTP サーバを中継させて送信するようなケースでは利用できません。&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;/etc/postfix/main.cf に以下の行を追加します&lt;br /&gt;(一行で記述するか、折り返す場合は 2行目の先頭に TAB を入れます)&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;smtpd_client_restrictions =&lt;br /&gt; check_client_access hash:/etc/postfix/reject_client&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;/etc/postfix/reject_client を以下の形式で作成します&lt;pre&gt;&lt;br /&gt;192.168.123.123 REJECT&lt;br /&gt;172.16.1 REJECT&lt;br /&gt;&lt;/pre&gt;これは、192.168.123.123 および 172.16.1.0/24 アドレスブロックからの SMTP 接続を却下する設定です。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;postmap コマンドで reject_sender.db を作成します&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# /usr/sbin/postmap /etc/postfix/reject_client&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;送信者による制限&lt;/p&gt;&lt;p&gt;送信者アドレス (envelope-from) またはそのドメイン部による受信制限の設定について説明します。ここで、送信者アドレスはヘッダ内の From: フィールドに書かれているアドレスではなく SMTP セッション中で MAIL FROM として指定されるアドレスです。&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;/etc/postfix/main.cf に以下の行を追加します&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;smtpd_sender_restrictions =&lt;br /&gt; hash:/etc/postfix/reject_sender&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;/etc/postfix/reject_sender を以下の形式で作成します&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;spammer@example.com REJECT&lt;br /&gt;spammers.org REJECT&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;これは、spammer@example.com および spammers.org ドメインを送信者アドレスに持つメールを却下する設定です。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;postmap コマンドで reject_sender.db を作成します&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# /usr/sbin/postmap /etc/postfix/reject_sender&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;ヘッダによる制限&lt;/p&gt;&lt;p&gt;Postfix では正規表現によるフィルタを行うことができます。ここでは、RHEL 標準の Postfix で利用できるようになっている pcre を利用する方法を述べます。&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;/etc/postfix/main.cf に以下の行を追加します&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;header_checks =&lt;br /&gt; pcre:/etc/postfix/header_checks&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;/etc/postfix/header_checks を以下の形式で作成します&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;/^X-Mailer: *Achi-Kochi Mail/i REJECT&lt;br /&gt;/^X-Mailer: *IM200[0-9] Version/i REJECT&lt;br /&gt;/^Subject:.*!!!/ REJECT&lt;br /&gt;/^Subject:.*( \$\$\$|\$\$\$ )/ REJECT&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ここでは、X-Mailer: にバルク送信ツールが含まれているメール、Subject: に "!!!" や "$$$" が含まれているメールを却下します。("( \$\$\$|\$\$\$ )" としているのは、Subject: に生 JIS コードで日本語文字列が入っている場合の対策です) なお、i 修飾子は大文字と小文字を区別することを表わし、Perl などと正反対の動作を表わすので注意が必要です。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;内容 (本文) による制限&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;/etc/postfix/main.cf に以下の行を追加します&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;body_checks =&lt;br /&gt; pcre:/etc/postfix/body_check_regex&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;/etc/postfix/body_check_regex&lt;/p&gt;&lt;p&gt;ヘッダによる制限と同様に /etc/postfix/body_check_regex に正規表現を書いていきます。なお、現在のところは複数行に跨った文字列にマッチさせることは出来ません。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;公開 RBL サービスの利用&lt;/p&gt;&lt;p&gt;Postfix では smtpd_client_restrictions に reject_rbl_client &lt;利用する RBL のドメイン名&gt; を加えることで利用することが出来ます。&lt;/p&gt;&lt;p&gt;設定例&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;smtpd_client_restrictions = permit_mynetworks,&lt;br /&gt; reject_invalid_hostname,&lt;br /&gt; reject_non_fqdn_sender,&lt;br /&gt; reject_non_fqdn_recipient,&lt;br /&gt; reject_unknown_sender_domain,&lt;br /&gt; reject_unknown_recipient_domain,&lt;br /&gt; reject_rbl_client bl.spamcop.net,&lt;br /&gt; reject_rbl_client blackholes.mail-abuse.org,&lt;br /&gt; reject_rbl_client dynablock.wirehub.net,&lt;br /&gt; reject_rbl_client korea.services.net,&lt;br /&gt; reject_rbl_client opm.blitzed.org,&lt;br /&gt; reject_rbl_client relays.ordb.org,&lt;br /&gt; reject_rbl_client relays.visi.com,&lt;br /&gt; reject_rbl_client sbl.spamhaus.org,&lt;br /&gt; reject_rbl_client sbl-xbl.spamhaus.org,&lt;br /&gt; permit&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;添付ファイルつきのメールを拒否する方法&lt;/p&gt;&lt;p&gt;Postfix では特定の拡張子を持つ添付ファイルのあるメールを拒否することができます。&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;/etc/postfix/main.cf に以下の行を追加します&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;header_checks = regexp:/etc/postfix/header_checks&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;/etc/postfix/header_checks を以下の形式で作成します&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;/name=.*\.scr/ REJECT&lt;br /&gt;/name=.*\.exe/ REJECT&lt;br /&gt;/name=\".*\.inf\"/ REJECT&lt;br /&gt;/name=\".*\.scr\"/ REJECT&lt;br /&gt;/name=\".*\.pif\"/ REJECT&lt;br /&gt;/name=\".*\.bat\"/ REJECT&lt;br /&gt;/name=\".*\.dll\"/ REJECT&lt;br /&gt;/name=\".*\.vbs\"/ REJECT&lt;br /&gt;/name=\".*\.reg\"/ REJECT&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;「/name=」行は、「name=」が含まれるヘッダ内文字列に任意のファイル名（.*）に加え、「.」（\.）＋「scr」で終わる拡張子（.* \）が含まれている場合に拒否（REJECT）を意味する。以下、数行は拡張子のバリエーションを増やしているだけで、定義方法自体に変わりはない。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;dl&gt;&lt;dt&gt;その他&lt;/dt&gt;&lt;dd&gt;&lt;p&gt;Postfix とスパム対策ソフトウェア、ウィルス対策ソフトウェアを組合わせたもの。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://fedorasrv.com/postfix-clamav-spamassassin.shtml"&gt;メールサーバーでウィルス&amp;スパムチェック&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-5654318457251625859?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/5654318457251625859/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/spam-postfix.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5654318457251625859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5654318457251625859'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/spam-postfix.html' title='Spam対策 -Postfix-'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-8494478845969429461</id><published>2011-12-27T12:00:00.000+09:00</published><updated>2012-01-17T12:46:20.737+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sendmail'/><title type='text'>sendmail - ヘルプでのバージョン情報の隠蔽</title><content type='html'>&lt;p&gt;サイオス 小川です。デフォルトの状態で telnet で sendmail にアクセスして、ヘルプを表示させると下記のように表示されます。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;220 [FQDN] ESMTP Sendmail 8.13.7/8.13.7; Fri, 22 Oct 2010 12:04:15 +0900 (JST)&lt;br /&gt;help&lt;br /&gt;214-2.0.0 This is sendmail version 8.13.7&lt;br /&gt;214-2.0.0 Topics:&lt;br /&gt;214-2.0.0 HELO EHLO MAIL RCPT DATA&lt;br /&gt;214-2.0.0 RSET NOOP QUIT HELP VRFY&lt;br /&gt;214-2.0.0 EXPN VERB ETRN DSN AUTH&lt;br /&gt;214-2.0.0 STARTTLS&lt;br /&gt;214-2.0.0 For more info use "HELP ".&lt;br /&gt;214-2.0.0 To report bugs in the implementation see&lt;br /&gt;214-2.0.0 http://www.sendmail.org/email-addresses.html&lt;br /&gt;214-2.0.0 For local information send email to Postmaster at your site.&lt;br /&gt;214 2.0.0 End of HELP info&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ヘルプの設定ファイルは、/etc/mail/helpfile となっています。内容は下記の通りです。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;#vers 2&lt;br /&gt;cpyr&lt;br /&gt;cpyr Copyright (c) 1998-2000, 2002, 2004-2006 Sendmail, Inc. and its suppliers.&lt;br /&gt;cpyr All rights reserved.&lt;br /&gt;cpyr Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.&lt;br /&gt;cpyr Copyright (c) 1988, 1993&lt;br /&gt;cpyr The Regents of the University of California. All rights reserved.&lt;br /&gt;cpyr&lt;br /&gt;cpyr&lt;br /&gt;cpyr By using this file, you agree to the terms and conditions set&lt;br /&gt;cpyr forth in the LICENSE file which can be found at the top level of&lt;br /&gt;cpyr the sendmail distribution.&lt;br /&gt;cpyr&lt;br /&gt;cpyr $$Id: helpfile,v 8.47 2006/04/26 18:22:54 ca Exp $$&lt;br /&gt;cpyr&lt;br /&gt;smtp This is sendmail version $v&lt;br /&gt;smtp Topics:&lt;br /&gt;smtp HELO EHLO MAIL RCPT DATA&lt;br /&gt;smtp RSET NOOP QUIT HELP VRFY&lt;br /&gt;smtp EXPN VERB ETRN DSN AUTH&lt;br /&gt;smtp STARTTLS&lt;br /&gt;smtp For more info use "HELP ".&lt;br /&gt;smtp To report bugs in the implementation see&lt;br /&gt;smtp http://www.sendmail.org/email-addresses.html&lt;br /&gt;smtp For local information send email to Postmaster at your site.&lt;br /&gt;help HELP [ ]&lt;br /&gt;help The HELP command gives help info.&lt;br /&gt;helo HELO&lt;br /&gt;helo Introduce yourself.&lt;br /&gt;ehlo EHLO&lt;br /&gt;ehlo Introduce yourself, and request extended SMTP mode.&lt;br /&gt;ehlo Possible replies include:&lt;br /&gt;ehlo SEND Send as mail [RFC821]&lt;br /&gt;ehlo SOML Send as mail or terminal [RFC821]&lt;br /&gt;ehlo SAML Send as mail and terminal [RFC821]&lt;br /&gt;ehlo EXPN Expand the mailing list [RFC821]&lt;br /&gt;ehlo HELP Supply helpful information [RFC821]&lt;br /&gt;ehlo TURN Turn the operation around [RFC821]&lt;br /&gt;ehlo 8BITMIME Use 8-bit data [RFC1652]&lt;br /&gt;ehlo SIZE Message size declaration [RFC1870]&lt;br /&gt;ehlo VERB Verbose [Allman]&lt;br /&gt;ehlo CHUNKING Chunking [RFC1830]&lt;br /&gt;ehlo BINARYMIME Binary MIME [RFC1830]&lt;br /&gt;ehlo PIPELINING Command Pipelining [RFC1854]&lt;br /&gt;ehlo DSN Delivery Status Notification [RFC1891]&lt;br /&gt;ehlo ETRN Remote Message Queue Starting [RFC1985]&lt;br /&gt;ehlo STARTTLS Secure SMTP [RFC2487]&lt;br /&gt;ehlo AUTH Authentication [RFC2554]&lt;br /&gt;ehlo ENHANCEDSTATUSCODES Enhanced status codes [RFC2034]&lt;br /&gt;ehlo DELIVERBY Deliver By [RFC2852]&lt;br /&gt;mail MAIL From: [ ]&lt;br /&gt;mail Specifies the sender. Parameters are ESMTP extensions.&lt;br /&gt;mail See "HELP DSN" for details.&lt;br /&gt;rcpt RCPT To: [ ]&lt;br /&gt;rcpt Specifies the recipient. Can be used any number of times.&lt;br /&gt;rcpt Parameters are ESMTP extensions. See "HELP DSN" for details.&lt;br /&gt;data DATA&lt;br /&gt;data Following text is collected as the message.&lt;br /&gt;data End with a single dot.&lt;br /&gt;rset RSET&lt;br /&gt;rset Resets the system.&lt;br /&gt;quit QUIT&lt;br /&gt;quit Exit sendmail (SMTP).&lt;br /&gt;auth AUTH mechanism [initial-response]&lt;br /&gt;auth Start authentication.&lt;br /&gt;starttls STARTTLS&lt;br /&gt;starttls Start TLS negotiation.&lt;br /&gt;verb VERB&lt;br /&gt;verb Go into verbose mode. This sends 0xy responses that are&lt;br /&gt;verb not RFC821 standard (but should be) They are recognized&lt;br /&gt;verb by humans and other sendmail implementations.&lt;br /&gt;vrfy VRFY&lt;br /&gt;vrfy Verify an address. If you want to see what it aliases&lt;br /&gt;vrfy to, use EXPN instead.&lt;br /&gt;expn EXPN&lt;br /&gt;expn Expand an address. If the address indicates a mailing&lt;br /&gt;expn list, return the contents of that list.&lt;br /&gt;noop NOOP&lt;br /&gt;noop Do nothing.&lt;br /&gt;send SEND FROM:&lt;br /&gt;send replaces the MAIL command, and can be used to send&lt;br /&gt;send directly to a users terminal. Not supported in this&lt;br /&gt;send implementation.&lt;br /&gt;soml SOML FROM:&lt;br /&gt;soml Send or mail. If the user is logged in, send directly,&lt;br /&gt;soml otherwise mail. Not supported in this implementation.&lt;br /&gt;saml SAML FROM:&lt;br /&gt;saml Send and mail. Send directly to the user's terminal,&lt;br /&gt;saml and also mail a letter. Not supported in this&lt;br /&gt;saml implementation.&lt;br /&gt;turn TURN&lt;br /&gt;turn Reverses the direction of the connection. Not currently&lt;br /&gt;turn implemented.&lt;br /&gt;etrn ETRN [ | @ | \# ]&lt;br /&gt;etrn Run the queue for the specified , or&lt;br /&gt;etrn all hosts within a given , or a specially-named&lt;br /&gt;etrn (implementation-specific).&lt;br /&gt;dsn MAIL From: [ RET={ FULL | HDRS} ] [ ENVID= ]&lt;br /&gt;dsn RCPT To: [ NOTIFY={NEVER,SUCCESS,FAILURE,DELAY} ]&lt;br /&gt;dsn [ ORCPT= ]&lt;br /&gt;dsn SMTP Delivery Status Notifications.&lt;br /&gt;dsn Descriptions:&lt;br /&gt;dsn RET Return either the full message or only headers.&lt;br /&gt;dsn ENVID Sender's "envelope identifier" for tracking.&lt;br /&gt;dsn NOTIFY When to send a DSN. Multiple options are OK, comma-&lt;br /&gt;dsn delimited. NEVER must appear by itself.&lt;br /&gt;dsn ORCPT Original recipient.&lt;br /&gt;-bt Help for test mode:&lt;br /&gt;-bt ? :this help message.&lt;br /&gt;-bt .Dmvalue :define macro `m' to `value'.&lt;br /&gt;-bt .Ccvalue :add `value' to class `c'.&lt;br /&gt;-bt =Sruleset :dump the contents of the indicated ruleset.&lt;br /&gt;-bt =M :display the known mailers.&lt;br /&gt;-bt -ddebug-spec :equivalent to the command-line -d debug flag.&lt;br /&gt;-bt $$m :print the value of macro $$m.&lt;br /&gt;-bt $$=c :print the contents of class $$=c.&lt;br /&gt;-bt /mx host :returns the MX records for `host'.&lt;br /&gt;-bt /parse address :parse address, returning the value of crackaddr, and&lt;br /&gt;-bt the parsed address.&lt;br /&gt;-bt /try mailer addr :rewrite address into the form it will have when&lt;br /&gt;-bt presented to the indicated mailer.&lt;br /&gt;-bt /tryflags flags :set flags used by parsing. The flags can be `H' for&lt;br /&gt;-bt Header or `E' for Envelope, and `S' for Sender or `R'&lt;br /&gt;-bt for Recipient. These can be combined, `HR' sets&lt;br /&gt;-bt flags for header recipients.&lt;br /&gt;-bt /canon hostname :try to canonify hostname.&lt;br /&gt;-bt /map mapname key :look up `key' in the indicated `mapname'.&lt;br /&gt;-bt /quit :quit address test mode.&lt;br /&gt;-bt rules addr :run the indicated address through the named rules.&lt;br /&gt;-bt Rules can be a comma separated list of rules.&lt;br /&gt;control Help for smcontrol:&lt;br /&gt;control help This message.&lt;br /&gt;control restart Restart sendmail.&lt;br /&gt;control shutdown Shutdown sendmail.&lt;br /&gt;control status Show sendmail status.&lt;br /&gt;control memdump Dump allocated memory list (for debugging only).&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ヘルプでのバージョン情報を表示させないようにするために /etc/mail/helpfile を下記のように変更します。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;smtp This is sendmail version $v&lt;br /&gt;↓&lt;br /&gt;smtp This is Mail Server&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;変更後、sendmail を再起動します。（sendmail.cf の再作成は不要）&lt;/p&gt;&lt;p&gt;telnet で sendmail にアクセスしてヘルプを表示させると下記のようになります。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;220 [FQDN] ESMTP Sendmail 8.13.7/8.13.7; Wed, 23 Aug 2006 12:17:35 +0900 (JST)&lt;br /&gt;help&lt;br /&gt;214-2.0.0 This is Mail Server&lt;br /&gt;214-2.0.0 Topics:&lt;br /&gt;214-2.0.0 HELO EHLO MAIL RCPT DATA&lt;br /&gt;214-2.0.0 RSET NOOP QUIT HELP VRFY&lt;br /&gt;214-2.0.0 EXPN VERB ETRN DSN AUTH&lt;br /&gt;214-2.0.0 STARTTLS&lt;br /&gt;214-2.0.0 For more info use "HELP ".&lt;br /&gt;214-2.0.0 To report bugs in the implementation see&lt;br /&gt;214-2.0.0 http://www.sendmail.org/email-addresses.html&lt;br /&gt;214-2.0.0 For local information send email to Postmaster at your site.&lt;br /&gt;214 2.0.0 End of HELP info&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-8494478845969429461?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/8494478845969429461/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/sendmail_27.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/8494478845969429461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/8494478845969429461'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/sendmail_27.html' title='sendmail - ヘルプでのバージョン情報の隠蔽'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-3445754331580856038</id><published>2011-12-26T12:00:00.000+09:00</published><updated>2011-12-26T12:00:01.366+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sendmail'/><title type='text'>sendmail - メールヘッダのバージョン情報の隠蔽</title><content type='html'>&lt;p&gt;サイオス 小川です。sendmail をデフォルト状態で使用するとメールヘッダに sendmail のバージョン情報が出力されます。下記 (8.13.8/8.13.8) の部分が該当します。&lt;/p&gt;&lt;p&gt;sendmail のバージョン情報を削除する方法&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;Received: from smtp (rhel5-5 [127.0.0.1])&lt;br /&gt;by rhel5-5.labs.sios.com (8.13.8/8.13.8) with ESMTP id o913QBHg002003&lt;br /&gt;for root@example.com; Fri, 1 Oct 2010 12:27:01 +0900&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;/etc/mail/sendmail.cf の設定を変更する。&lt;/p&gt;&lt;p&gt;sendmail.cf の変更は直接 sendmail.cf を変更するのでなく、sendmail.mc を変更して、これにマクロプロセッサで処理を行って sendmail.cf を生成します。&lt;/p&gt;&lt;p&gt;一連の作業は /etc/mail ディレクトリで行います。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# cd /etc/mail&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;エディタで sendmail.mc を開き、ファイルの最終行に以下を追加します。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;define(`confRECEIVED_HEADER',`$?sfrom $s $.$?_($?s$|from $.$_)&lt;br /&gt;$.$?{auth_type}(authenticated$?{auth_ssf} bits=${auth_ssf}$.)&lt;br /&gt;$.by $j (unknown)$?r with $r$. id $i$?{tls_version}&lt;br /&gt;(version=${tls_version} cipher=${cipher} bits=${cipher_bits} verify=${verify})$.$?u&lt;br /&gt;for $u; $|;&lt;br /&gt;$.$b')dnl&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;エディタで上書き保存後、make を実行します。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# make&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ここまでで sendmail.cf の変更が終了しています。この設定を読みこますために sendmail のリロードを行います。(再起動の必要はありません)&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# /sbin/service sendmail reload&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;以上で作業は完了です。&lt;/p&gt;&lt;p&gt;この作業で sendmail の (8.13.8/8.13.8) の部分を (unkown) と表示するようになります。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;Received: from smtp (rhel5-5.labs.sios.com [10.1.1.129])&lt;br /&gt;by rhel5-5.labs.sios.com (unknown) with ESMTP id o9143iLY002196&lt;br /&gt;for root@examle.com; Fri, 1 Oct 2010 13:04:19 +0900&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-3445754331580856038?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/3445754331580856038/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/sendmail_26.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/3445754331580856038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/3445754331580856038'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/sendmail_26.html' title='sendmail - メールヘッダのバージョン情報の隠蔽'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-3267386349934307710</id><published>2011-12-22T12:05:00.002+09:00</published><updated>2011-12-22T12:05:43.653+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RHEL6'/><category scheme='http://www.blogger.com/atom/ns#' term='CentOS 6'/><category scheme='http://www.blogger.com/atom/ns#' term='デスクトップ'/><category scheme='http://www.blogger.com/atom/ns#' term='Scientific Linux 6'/><title type='text'>CentOS 6.2 リリースされました</title><content type='html'>&lt;p&gt;サイオステクノロジー 金田です。&lt;/p&gt;&lt;p&gt;12/9 に CentOS 6.1 が出たばかりですが、12/20 には CentOS 6.2 が早々とリリースされたので、早速 CentOS 6.2 をインストールしてみました。&lt;/p&gt;&lt;p&gt;インストール手順などは CentOS 6.0 と特に変わっているところはありませんでしたが、個人的に気になっていた点として、CentOS 6.0 では「システム」→「設定」→「ウィンドウ」の項目が無かった(画像1)ので、CentOS 6.1/6.2 で復活するかどうか注目していました。&lt;/p&gt;&lt;p&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-e5nPsl-5mXQ/TvKcMwGdBaI/AAAAAAAAACI/8TV9D-5r55I/s1600/1no-window-properties-panel.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-e5nPsl-5mXQ/TvKcMwGdBaI/AAAAAAAAACI/8TV9D-5r55I/s320/1no-window-properties-panel.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;u&gt;画像１&lt;b&gt;&amp;nbsp;&lt;/b&gt;CentOS 6.0 「システム」→「設定」メニュー&lt;/u&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;結果的に CentOS 6.1 で復活したようで(※)、CentOS 6.2 でも使用できるようになっています。(画像2)&lt;br /&gt;&lt;small&gt;※：Scientific Linux 6.1 や RHEL 6.1 で利用可能であることはすでに確認していました。&lt;/small&gt;&lt;/p&gt;&lt;p&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ZtvoBhbHVGg/TvKd0SZGIeI/AAAAAAAAACU/al1GpOh9tF8/s1600/windows-properties.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-ZtvoBhbHVGg/TvKd0SZGIeI/AAAAAAAAACU/al1GpOh9tF8/s320/windows-properties.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;u&gt;画像２ CentOS 6.2 「システム」→「設定」メニュー&lt;/u&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-3267386349934307710?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/3267386349934307710/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/centos-62.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/3267386349934307710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/3267386349934307710'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/centos-62.html' title='CentOS 6.2 リリースされました'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-e5nPsl-5mXQ/TvKcMwGdBaI/AAAAAAAAACI/8TV9D-5r55I/s72-c/1no-window-properties-panel.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-5787598403558051044</id><published>2011-12-22T12:00:00.000+09:00</published><updated>2012-01-17T12:48:29.140+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sendmail'/><title type='text'>sendmail - グリーティング･メッセージでのバージョン情報の隠蔽</title><content type='html'>&lt;p&gt;サイオス 小川です。デフォルトの状態で telnet で sendmail にアクセスすると下記のように出力されます。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;220 [FQDN] ESMTP Sendmail 8.13.7/8.13.7; Fri, 22 Oct 2010 12:04:15 +0900 (JST)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;これに関するデフォルトの /etc/mail/sendmail.cf 設定は下記の通りです。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;SmtpGreetingMessage=$j Sendmail $v/$Z; $b&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;この設定を sendmail.mc を使って変更します。次の行を sendmail.mc に追加します。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;define(`confSMTP_LOGIN_MSG', `$j unknown; $b')dnl&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;sendmail.cf を作成し直して、sendmail を再起動します。この時の sendmail.cf は下記の通りです。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;SmtpGreetingMessage=$j unknown; $b&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;telnet で sendmail にアクセスすると下記のようになります。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;220 [FQDN] ESMTP unknown; Fri, 22 Oct 2010 14:26:33 +0900 (JST)&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-5787598403558051044?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/5787598403558051044/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/sendmail_22.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5787598403558051044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5787598403558051044'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/sendmail_22.html' title='sendmail - グリーティング･メッセージでのバージョン情報の隠蔽'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-6945327717259097877</id><published>2011-12-21T16:00:00.000+09:00</published><updated>2011-12-21T16:00:00.697+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sendmail'/><title type='text'>sendmail - mailertable による冗長化</title><content type='html'>&lt;p&gt;サイオス 小川です。&lt;/p&gt;&lt;p&gt;/etc/mail/mailertable に下記のように記述することにより、経路の冗長化をすることができます。&lt;/p&gt;&lt;p&gt;フォールバック&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;domain smtp:[IPアドレス1]:[IPアドレス]:[IPアドレス]&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ラウンドロビン&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;domain smtp:[IPアドレス1],[IPアドレス],[IPアドレス]&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-6945327717259097877?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/6945327717259097877/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/sendmail-mailertable.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/6945327717259097877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/6945327717259097877'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/sendmail-mailertable.html' title='sendmail - mailertable による冗長化'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-1824864359681508499</id><published>2011-12-21T12:00:00.000+09:00</published><updated>2011-12-21T12:00:01.134+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sendmail'/><title type='text'>sendmail で宛先を限定する方法</title><content type='html'>&lt;p&gt;サイオス 小川です。mailertable を使用して宛先を制限します。&lt;/p&gt;&lt;p&gt;1. /etc/mail/mailertable で下記の様に localhost と送信を許可するドメインの設定をします。また、最後の行で指定のない宛先に対してはエラー"error:5.7.1:553 Relaying denied" を返却するように設定します。&lt;/p&gt;&lt;p&gt;&lt;code&gt;/etc/mail/mailertable&lt;/code&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;localhost local:&lt;br /&gt;example1.com smtp:example1.com&lt;br /&gt;example2.com smtp:example2.com&lt;br /&gt;example3.com smtp:example3.com&lt;br /&gt;. error:5.7.1:553 Relaying denied&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;2. &lt;code&gt;make mailertable.db&lt;/code&gt; を実行し、mailertable.db を更新する。&lt;/p&gt;&lt;p&gt;この設定により下記の動作をするようになります。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&amp;lt;ユーザー名@localhost&amp;gt; 宛のメールはローカルスプールに受信します。&lt;/li&gt;&lt;li&gt;&amp;lt;ユーザー名@example1.com&amp;gt; 宛等のメールは DNS を参照して転送先が決められます。&lt;/li&gt;&lt;li&gt;それ以外のメールはエラーで転送拒否されます。&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-1824864359681508499?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/1824864359681508499/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/sendmail.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/1824864359681508499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/1824864359681508499'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/sendmail.html' title='sendmail で宛先を限定する方法'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-8479725777047284020</id><published>2011-12-20T15:00:00.000+09:00</published><updated>2011-12-20T15:00:03.058+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Postfix'/><title type='text'>DNS  による名前解決を行わない設定 -Postfix-</title><content type='html'>&lt;p&gt;サイオステクノロジー 稲垣です。&lt;/p&gt;&lt;p&gt;Postfix を使用して、受信したメールを DNS による名前解決を使わずに main.cf の relayhost の設定を使って送信する方法をご紹介します。&lt;/p&gt;&lt;p&gt;relayhost の転送先ホスト名または IP アドレスを、角括弧 ("[" "]") で囲みます。このように設定すると、Postfix は該当ホスト名または IP アドレスについて、DNS による名前解決を行わず (DNS クエリーを発行せず) に処理を行います。&lt;/p&gt;&lt;p&gt;設定例&lt;/p&gt;&lt;pre&gt;relayhost = [192.168.xx.xx]&lt;/pre&gt;&lt;p&gt;この際、/etc/hosts に該当ホスト名が設定されていなければエラーになります。&lt;/p&gt;&lt;p&gt;あるいは、main.cf にて下記行を追加することで、Postfix は全てのホスト名または IP アドレスについて、DNS による名前解決をせずに処理を行います。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;disable_dns_lookups = yes&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-8479725777047284020?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/8479725777047284020/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/dns-postfix.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/8479725777047284020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/8479725777047284020'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/dns-postfix.html' title='DNS  による名前解決を行わない設定 -Postfix-'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-4197223761078310332</id><published>2011-12-16T12:00:00.001+09:00</published><updated>2011-12-16T14:58:08.354+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bind'/><title type='text'>bind 脆弱性 CVE-2011-4313 リンクまとめ</title><content type='html'>&lt;p&gt;サイオステクノロジー 金田です。&lt;/p&gt;&lt;p&gt;DNS サーバ bind の脆弱性 CVE-2011-4313 についてリンクをまとめてみました。&lt;/p&gt;&lt;p&gt;bind の開発元である ISC の英語ページは 12/5 付で更新されていますが、日本語のページは更新されていません。日本語の情報としては IIJ-SECT の情報がわかりやすいと思います。&lt;/p&gt;&lt;p&gt;&lt;u&gt;ISC Security Advisory&lt;/u&gt;&lt;ul&gt;&lt;li&gt;CVE-2011-4313: BIND 9 Resolver crashes after logging an error in query.c&lt;br /&gt;&lt;a href="https://www.isc.org/software/bind/advisories/cve-2011-4313"&gt;https://www.isc.org/software/bind/advisories/cve-2011-4313&lt;/a&gt;&lt;/li&gt;&lt;li&gt;(日本語) &lt;a href="https://www.isc.org/advisorycve20114313JP"&gt;https://www.isc.org/advisorycve20114313JP&lt;/a&gt;&lt;/li&gt;&lt;li&gt;CVE-2011-4313 FAQ and Supplemental Information&lt;br /&gt;&lt;a href="https://deepthought.isc.org/article/AA-00549"&gt;https://deepthought.isc.org/article/AA-00549&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;IIJ-SECT Security Diary&lt;/u&gt;&lt;ul&gt;&lt;li&gt;CVE-2011-4313 BIND9 キャッシュサーバの脆弱性について&lt;br /&gt;&lt;a href="https://sect.iij.ad.jp/d/2011/11/160759.html"&gt;https://sect.iij.ad.jp/d/2011/11/160759.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;CVE-2011-4313 BIND9 キャッシュサーバの脆弱性について (続報)&lt;br /&gt;&lt;a href="https://sect.iij.ad.jp/d/2011/12/067936.html"&gt;https://sect.iij.ad.jp/d/2011/12/067936.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;他 順不同&lt;/u&gt;&lt;ul&gt;&lt;li&gt;JPRS: &lt;a href="http://jprs.jp/tech/security/2011-11-17-bind9-vuln-crash-after-logging-an-error.html"&gt;http://jprs.jp/tech/security/2011-11-17-bind9-vuln-crash-after-logging-an-error.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;JPNIC: &lt;a href="http://www.nic.ad.jp/ja/topics/2011/20111117-01.html"&gt;http://www.nic.ad.jp/ja/topics/2011/20111117-01.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;JPCERT: &lt;a href="http://www.jpcert.or.jp/at/2011/at110031.txt"&gt;http://www.jpcert.or.jp/at/2011/at110031.txt&lt;/a&gt;&lt;/li&gt;&lt;li&gt;JVN: &lt;a href="https://jvn.jp/cert/JVNVU606539/"&gt;https://jvn.jp/cert/JVNVU606539/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;修正パッチ適用推奨ですが、修正パッチを適用できない場合の対処は、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;権威サーバ(Authoritative-only servers、コンテンツサーバとも言う)：影響なし。&lt;/li&gt;&lt;li&gt;キャッシュサーバ(Recursive servers)："minimal-responses yes;" で回避可能。&lt;/li&gt;&lt;li&gt;権威サーバとキャッシュサーバを兼ねている("mixed-mode" servers)：設定での回避は不可。機能を分離すること。&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;CentOS/Scientific Linux とも修正パッケージが公開されています。&lt;br /&gt;&lt;pre&gt;4.x系 bind-9.2.4-38.el4&lt;br /&gt;5.x系 bind-9.3.6-16.P1.el5_7.1&lt;br /&gt;      bind97-9.7.0-6.P2.el5_7.4&lt;br /&gt;6.x系 bind-9.7.3-2.el6_1.P3.3&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;RHEL errata&lt;br /&gt;&lt;pre&gt;4.x 系 &lt;a href="https://rhn.redhat.com/errata/RHSA-2011-1496.html"&gt;https://rhn.redhat.com/errata/RHSA-2011-1496.html&lt;/a&gt;&lt;br /&gt;5.x 系 &lt;a href="https://rhn.redhat.com/errata/RHSA-2011-1458.html"&gt;https://rhn.redhat.com/errata/RHSA-2011-1458.html&lt;/a&gt;&lt;br /&gt;       &lt;a href="https://rhn.redhat.com/errata/RHSA-2011-1459.html"&gt;https://rhn.redhat.com/errata/RHSA-2011-1459.html&lt;/a&gt;&lt;br /&gt;6.x 系 &lt;a href="https://rhn.redhat.com/errata/RHSA-2011-1458.html"&gt;https://rhn.redhat.com/errata/RHSA-2011-1458.html&lt;/a&gt;&lt;/pre&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-4197223761078310332?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/4197223761078310332/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/bind-cve-2011-4313.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/4197223761078310332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/4197223761078310332'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/bind-cve-2011-4313.html' title='bind 脆弱性 CVE-2011-4313 リンクまとめ'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-1943912028507766301</id><published>2011-12-16T12:00:00.000+09:00</published><updated>2011-12-16T13:57:51.431+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RHEL6'/><category scheme='http://www.blogger.com/atom/ns#' term='CentOS 6'/><category scheme='http://www.blogger.com/atom/ns#' term='ネットワーク'/><category scheme='http://www.blogger.com/atom/ns#' term='Scientific Linux 6'/><title type='text'>CentOS 6 系で NIC 交換すると eth0 と認識されない</title><content type='html'>&lt;p&gt;サイオステクノロジー 金田です。&lt;/p&gt;&lt;p&gt;CentOS6 (RHEL6/Scientific Linux6) では、HW 不良等により NIC を交換すると、交換したNICが eth0 ではなく eth1 と認識されてしまいます。&lt;/p&gt;&lt;p&gt;MAC アドレスが異なる NIC が追加されるたびに /etc/udev/rules.d/70-persistenet-net.rules にエントリが追加されてしまうためにこのような現象になるのですが、交換した NIC を eth0 と認識させる方法について以下に紹介します。&lt;/p&gt;&lt;p&gt;(1) MAC アドレスの確認&lt;br /&gt;/etc/sysconfig/network-scripts/ifcfg-eth1 がない場合、ifconfig eth1 を実行し HWaddr の内容を記録しておきます。&lt;/p&gt;&lt;p&gt;(2) ネットワーク関連サービスの停止&lt;br /&gt;&lt;pre&gt;# service NetworkManager stop (＊)&lt;br /&gt;# service network stop&lt;/pre&gt;＊：NetworkManager がインストールされている場合&lt;/p&gt;&lt;p&gt;(3) ネットワークモジュールのアンロード&lt;br /&gt;&lt;pre&gt;# rmmod &lt;ドライバ名&gt;&lt;/pre&gt;※ドライバ名は /etc/udev/rules.d/70-persistent-net.rules ファイル内の NIC 設定行の１行上のコメント行の末尾に () で括られて記載されています。&lt;br /&gt;&amp;nbsp; (下記例は vmnet3)&lt;br /&gt;&lt;pre&gt;# PCI device 0x15ad:0x07b0 (vmxnet3)&lt;br /&gt;SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:79:22:65", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;(4) ifcfg-ethX ファイルのリネームまたは修正&lt;br /&gt;/etc/sysconfig/network-scripts/ifcfg-eth1 がある場合は、ifcfg-eth0 ファイルと ifcfg-eth1 ファイルを次のように変更します。&lt;br /&gt;&lt;pre&gt;# mv ifcfg-eth0 ifcfg-eth0.bak&lt;br /&gt;# mv ifcfg-eth1 ifcfg-eth0&lt;/pre&gt;/etc/sysconfig/network-scripts/ifcfg-eth1 がない場合は、ifcfg-eth0 の HWADDR= の値を (1) で保存した値に書き換えます。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;(5) /etc/udev/rules.d/70-persistent-net.rules のバックアップ&lt;br /&gt;&lt;pre&gt;# mv /etc/udev/rules.d/70-persistent-net.rules \&lt;br /&gt;     /etc/udev/rules.d/70-persistent-net.rules.bak&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;(6) ネットワークモジュールのロード&lt;br /&gt;&lt;pre&gt;# modprobe &lt;ドライバ名&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;(7) ネットワーク関連サービスの起動&lt;br /&gt;&lt;pre&gt;# service network start&lt;br /&gt;# service NetworkManager start (＊)&lt;/pre&gt;＊：NetworkManager がインストールされている場合&lt;/p&gt;&lt;br /&gt;&lt;p&gt;上記は、eth1 として認識してしまった後の変更方法ですが、/etc/udev/rules.d/70-persistent-net.rules に NIC のエントリを作成されないようにする方法も併せて紹介します。&lt;br /&gt;&lt;br /&gt;/lib/udev/rules.d/75-persistent-net-generator.rules にある下記の行をコメントアウトすることで、/etc/udev/rules.d/70-persistenet-net.rules に新しい NIC の情報は追加されなくなります。&lt;br /&gt;&lt;br /&gt;(変更前)&lt;br /&gt;&lt;pre&gt;DRIVERS=="?*", IMPORT{program}="write_net_rules"&lt;/pre&gt;(変更後)&lt;br /&gt;&lt;pre&gt;# DRIVERS=="?*", IMPORT{program}="write_net_rules"&lt;/pre&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-1943912028507766301?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/1943912028507766301/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/centos-6-nic-eth0.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/1943912028507766301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/1943912028507766301'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/centos-6-nic-eth0.html' title='CentOS 6 系で NIC 交換すると eth0 と認識されない'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-2069100939634594978</id><published>2011-12-16T11:28:00.000+09:00</published><updated>2011-12-16T11:28:21.429+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Trouble Maker を触ってみました</title><content type='html'>&lt;p&gt;サイオス 鎌田です。&lt;/p&gt;&lt;p&gt;数日前に、Gigazine のニュースに &lt;a href="http://gigazine.net/news/20111208-trouble-maker/"&gt;Trouble Maker というツール&lt;/a&gt;が紹介されていました。これは、Linux サーバに細工を施し、システムが起動しなくなる等のトラブルをわざと引き起こすツールで、Linux のトラブル解決の練習になるようなものです。というわけで、一つ検証環境を用意して、さっそく動かしてみました。&lt;/p&gt;&lt;dl&gt;  &lt;dt&gt;Trouble Maker&lt;/dt&gt;  &lt;dd&gt;&lt;a href="http://trouble-maker.sourceforge.net/"&gt;http://trouble-maker.sourceforge.net/&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;まずはインストール方法から。難しいことはありません。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm&lt;br /&gt;# yum install perl-YAML&lt;br /&gt;# wget http://sourceforge.net/projects/trouble-maker/files/trouble-maker/0.11/trouble-maker-0.11.tgz/download&lt;br /&gt;# cd /&lt;br /&gt;# tar xzvf /path/to/trouble-maker-0.11.tgz&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;起動してみます。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# /usr/local/trouble-maker/bin/trouble-maker.pl --version=RHEL_5&lt;br /&gt;&lt;br /&gt;Trouble-maker version 0.10&lt;br /&gt;Copyright (C) 2004 by Josh More&lt;br /&gt;Trouble-maker comes with ABSOLUTELY NO WARRANTY&lt;br /&gt;This is free software, and you are welcome to redistribute it under certain conditions.&lt;br /&gt;For details, see the file 'COPYING' included with this distribution.&lt;br /&gt;&lt;br /&gt;This program is intended for training purposes only, and will cause system problems.&lt;br /&gt;To proceed, type 'yes'.&lt;br /&gt;(To bypass this step, change the value of the $bypass variable to '1')&lt;br /&gt;&amp;gt;yes&lt;br /&gt;PROBLEM:&lt;br /&gt;The system will not boot&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;さらっと、システムが起動しなくなると怖いことを言ってきます。実際にここで再起動すると、次のメッセージが出て OS が起動しなくなります。ぜひ、皆さんも検証用の環境を作って動かしてみてはいかがでしょうか。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;Kernel panic - not syncing: Attempted to kill init!&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-2069100939634594978?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/2069100939634594978/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/trouble-maker.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/2069100939634594978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/2069100939634594978'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/trouble-maker.html' title='Trouble Maker を触ってみました'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-7203358590119156296</id><published>2011-12-15T13:52:00.001+09:00</published><updated>2011-12-16T11:30:49.751+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='セキュリティ'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>CVE-2011-3192 の新しい攻撃コードが公開されています</title><content type='html'>&lt;p&gt;お久しぶりです。サイオス 鎌田です。今年も残すところあとわずかとなりました。今回は脆弱性のお話です。&lt;/p&gt;&lt;p&gt;夏の終わりごろ、HTTP サーバとして有名な Apache HTTPD に、&lt;a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3192"&gt;CVE-2011-3192&lt;/a&gt; という脆弱性が存在することが発覚し、&lt;a href="http://mail-archives.apache.org/mod_mbox/httpd-announce/201108.mbox/%3C20110824161640.122D387DD%40minotaur.apache.org%3E"&gt;アナウンスから 48 時間以内に修正を実施することを宣言する&lt;/a&gt;など、少し大きな騒ぎとなりました。&lt;/p&gt;&lt;p&gt;現在は修正版もリリースされていますし、バージョンアップを行わずに設定を変更することで回避している方もいらっしゃるかと思います。設定を変更することで回避する方法として、当初 Apache HTTPD のアナウンスでは、Range ヘッダに 5 つ以上範囲指定されているリクエストを無視したり、HTTP リクエストのヘッダサイズを制限したり、Range ヘッダの指定をそもそも無視するといった方法を紹介していました。&lt;/p&gt;&lt;p&gt;今回、公開された新しい攻撃コードは、この設定変更による回避策のうち、Range ヘッダに 5 つ以上範囲指定されているリクエストを無視する方法と、HTTP リクエストのヘッダサイズを制限する方法を破る攻撃となっています。具体的には、Range ヘッダには 2 つの範囲指定を行い、Accept-Encoding ヘッダに gzip を指定したリクエストを頻繁に行うという、単純、かつ効果的に DoS を実現させる攻撃となっています。&lt;/p&gt;&lt;p&gt;そのため、Range ヘッダを無視することで回避を行っている方には影響がないのですが、どうしても Range ヘッダを有効化する方にとっては非常に厄介な攻撃コードが公開されたことになります。こうなると、対策方法としては Apache HTTPD をバージョンアップするしかありません。&lt;/p&gt;&lt;p&gt;このように、当初は良かった対策でも、新しい攻撃コードが公開されることによって再度脅威にさらされるというケースがありますので、一度稼働を始めたバージョンを使い続けるだけでなく、定期的にバージョンアップを行うことを前提とした運用を検討されることをお勧めいたします。&lt;/p&gt;&lt;p&gt;なお、現在公開されている最新の Apache HTTPD のバージョンは、2.2.21 となっています。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-7203358590119156296?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/7203358590119156296/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/cve-2011-3192.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/7203358590119156296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/7203358590119156296'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/cve-2011-3192.html' title='CVE-2011-3192 の新しい攻撃コードが公開されています'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-5755066892916214649</id><published>2011-12-15T09:00:00.000+09:00</published><updated>2011-12-15T09:28:53.259+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Postgres Plus'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>PostgreSQL で、STATISTICS (列の統計精度) を変更した箇所を忘れたら</title><content type='html'>&lt;p&gt;お世話になっております、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;PostgreSQL では、特定のテーブルの特定のカラムごとに、統計情報を取得する際の精度を指定することで、大きなテーブルでは荒くなりがちな統計情報の精度を調整することができるようになっています。&lt;pre&gt;&lt;br /&gt;postgres=# &lt;strong&gt;ALTER TABLE users ALTER COLUMN name SET STATISTICS 500;&lt;/strong&gt;&lt;br /&gt;ALTER TABLE&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;しかし、いろいろやっていると、データベース全体のどこに指定をしたか忘れてしまいます。そんな時は、以下のようにすれば変更箇所を一覧することができます。&lt;pre&gt;&lt;br /&gt;postgres=# &lt;strong&gt;SELECT c.relname, a.attname, a.attstattarget&lt;br /&gt;  FROM pg_attribute AS a, pg_class AS c&lt;br /&gt;  WHERE c.oid = a.attrelid and a.attstattarget &amp;gt; 0;&lt;/strong&gt;&lt;br /&gt; relname | attname | attstattarget&lt;br /&gt;---------+---------+---------------&lt;br /&gt; users   | name    |           500&lt;br /&gt;(1 row)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ところでこの値のデフォルトである "default_statistics_target" パラメータは、VACUUM の効率やマシン性能の向上に合わせて、徐々に上がっています。&lt;p&gt;「&lt;a href="http://www.postgresql.jp/document/8.3/html/runtime-config-query.html"&gt;18.6 問い合わせ計画 - PostgreSQL 8.3 文書&lt;/a&gt;」&lt;blockquote&gt;default_statistics_target（integer）…デフォルトは10です。&lt;/blockquote&gt;&lt;p&gt;「&lt;a href="http://www.postgresql.jp/document/8.4/html/runtime-config-query.html"&gt;18.6 問い合わせ計画 - PostgreSQL 8.4 文書&lt;/a&gt;」&lt;blockquote&gt;default_statistics_target（integer）…デフォルトは100です。&lt;/blockquote&gt;&lt;p&gt;以前は、10 では小さすぎるので調整をすると性能が上がりましたが、100 もあれば、よほど大きなテーブルでなければ問題なくなった模様。&lt;p&gt;では。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-5755066892916214649?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/5755066892916214649/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/postgresql-statistics.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5755066892916214649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5755066892916214649'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/postgresql-statistics.html' title='PostgreSQL で、STATISTICS (列の統計精度) を変更した箇所を忘れたら'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-7805650252801038260</id><published>2011-12-14T15:00:00.000+09:00</published><updated>2011-12-15T14:10:00.277+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Amazon Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='IaaS'/><category scheme='http://www.blogger.com/atom/ns#' term='クラウド'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='EC2'/><category scheme='http://www.blogger.com/atom/ns#' term='AWS'/><title type='text'>ソースの入手と再ビルド ～ Amazon Linux AMI (EC2) 編</title><content type='html'>&lt;p&gt;お疲れ様です、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;&lt;a href=http://aws.amazon.com/jp/amazon-linux-ami/&gt;Amazon Linux AMI&lt;/a&gt; は、&lt;a href=http://aws.amazon.com/jp/&gt;AWS (Amazon Web Services)&lt;/a&gt; 専用に、&lt;a href=http://www.amazon.com/&gt;Amazon.com&lt;/a&gt; によって開発されている Linux ディストリビューションの仮想環境イメージ (AMI: Amazon Machine Image) です。今のところ実態としては、RHEL6 系に近いものになっています。てっきり CentOS あたりをベースにリコンパイルだけをして作っているのかと思っていたのですが、RHEL6 を下敷きにしつつも、自前で全部作っているそうです。AWS の機能に特化されているのみならず、Amazon のサポートに通りが良いところがウリです。&lt;p&gt;そのようなわけですから、Amazon Linux もまた RPM ベースです。Amazon Linux も YUM は備えているのですが、ソースの入手には yumdownloader ではなく、別途 get_reference_source コマンド経由で、web サービスを利用します。右記参照、「&lt;a href="http://aws.amazon.com/jp/ec2/faqs/#Can_I_view_the_source_code_to_the_Amazon_Linux_AMI"&gt;Q: Amazon Linux AMI へのソースコードを見ることができますか？ - Amazon Elastic Compute Cloud (Amazon EC2) FAQ&lt;/a&gt;」。&lt;pre&gt;&lt;br /&gt;$ &lt;strong&gt;get_reference_source --aws-account-id=XXXX-XXXX-XXXX \&lt;br /&gt; --package=which&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Requested package: which&lt;br /&gt;&lt;br /&gt;Found package from local RPM database: which-2.19-5.1.9.amzn1&lt;br /&gt;Corresponding source RPM to found package : which-2.19-5.1.9.amzn1.src.rpm&lt;br /&gt;&lt;br /&gt;Your AWS account id: XXXX-XXXX-XXXX&lt;br /&gt;&lt;br /&gt;Are these parameters correct? Please type 'yes' to continue: &lt;strong&gt;yes&lt;/strong&gt;&lt;br /&gt;Source RPM for 'which-2.19-5.1.9.amzn1' downloaded to: /usr/src/srpm/debug/which-2.19-5.1.9.amzn1.src.rpm&lt;br /&gt;[ knaka@ip-10-146-81-102:~ S ]&lt;br /&gt;$ &lt;strong&gt;ls -ld /usr/src/srpm/debug&lt;/strong&gt;&lt;br /&gt;drwxrwxrwt 2 root root 4096 Dec XX 03:36 /usr/src/srpm/debug/&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;それ以降は他の distro と大差ないのですが、以前の記事（「&lt;a href="http://sios-oss.blogspot.com/2011/11/debuginfo-rpm.html"&gt;SIOS OSS Tech: debuginfo RPM パッケージで、ソースレベル・デバッグをする&lt;/a&gt;」）などで触れた Red Hat 系における "redhat-rpm-config" パッケージが、Amazon Linux では "system-rpm-config" パッケージにあたるので、既存パッケージと同等の構成でインストールしたい場合や、特に、debuginfo パッケージが必要な場合には、これもインストールしておいてください。&lt;pre&gt;&lt;br /&gt;$ &lt;strong&gt;sudo yum install -y system-rpm-config&lt;/strong&gt;&lt;br /&gt;$ &lt;strong&gt;rpmbuild --rebuild --define="optflags -pg -g3 -O0" \&lt;br /&gt; /usr/src/srpm/debug/which-2.19-5.1.9.amzn1.src.rpm&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;Wrote: /home/knaka/rpm/RPMS/i686/which-2.19-5.1.9.amzn1.i686.rpm&lt;br /&gt;Wrote: /home/knaka/rpm/RPMS/i686/which-debuginfo-2.19-5.1.9.amzn1.i686.rpm&lt;br /&gt;(中略)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;では。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-7805650252801038260?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/7805650252801038260/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/amazon-linux-ami-ec2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/7805650252801038260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/7805650252801038260'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/amazon-linux-ami-ec2.html' title='ソースの入手と再ビルド ～ Amazon Linux AMI (EC2) 編'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-3023397098102681995</id><published>2011-12-13T17:00:00.000+09:00</published><updated>2011-12-13T17:54:28.983+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Postgres Plus'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>PostgreSQL の SQL やプロシージャでランダムデータの入ったテーブルを生成する</title><content type='html'>&lt;p&gt;お疲れ様です、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;テーブルの抱えるサンプルデータの行数が 2～3 行だと、何をどうしてもインデックスなど使われないのでつまらない時に、自動的に生成した沢山のランダムデータを INSERT する方法です。連番 10000 個につき、ランダムな 20 文字からなる名前をそれぞれに持つ "users" テーブルを作成してみます。&lt;h2&gt;SQL のみで実行&lt;/h2&gt;&lt;p&gt;まずは、バージョン 9.0 以降での例です。&lt;pre&gt;&lt;br /&gt;DROP TABLE users CASCADE;&lt;br /&gt;&lt;br /&gt;CREATE TABLE users (id integer PRIMARY KEY, name text);&lt;br /&gt;&lt;br /&gt;INSERT INTO users (id, name) (&lt;br /&gt;  SELECT id,&lt;br /&gt;   string_agg(substr(s, ceil(random() * length(s))::int, 1),'')&lt;br /&gt;    FROM (&lt;br /&gt;      SELECT 'abcdefghijklmnopqrstuvwxyz'&lt;br /&gt;       'ABCDEFGHIJKLMNOPQRSTUVWXYZ'::text s, *&lt;br /&gt;        FROM generate_series(1, 10000) AS id, generate_series(1, 20)&lt;br /&gt;    ) AS tmp&lt;br /&gt;    GROUP BY id&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;CREATE INDEX ON users (name); -- 9.0 から、インデックス名は省略可能&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ここでは、新しく導入された &lt;a href=http://www.postgresql.jp/document/9.0/html/functions-aggregate.html&gt;string_agg() 集約関数&lt;/a&gt;を使用しているため、8.4 以前では動きません。サブクエリをそれぞれ実行してみれば、何をしているかは分かると思います。&lt;p&gt;ランダムな文字列が生成されていることと、充分にデータが大きいのでインデックスが使われていることを確認します。&lt;pre&gt;&lt;br /&gt;postgres=# &lt;strong&gt;SELECT * FROM users LIMIT 10;&lt;/strong&gt;&lt;br /&gt; id |         name&lt;br /&gt;----+----------------------&lt;br /&gt;  1 | bCphDuvZliwsKjSciOZA&lt;br /&gt;  2 | oYTQPutKQqYRTnYwIuwU&lt;br /&gt;  3 | DSmnbfqkTpKioEZeZsOP&lt;br /&gt;  4 | JNHCbFYJauDDnPRpVizO&lt;br /&gt;  5 | xkXMPWQOoFEXslAtRycS&lt;br /&gt;  6 | TGvhwnxrvWgThdFXawMo&lt;br /&gt;  7 | bqmtCNNulQmfwInTWKkr&lt;br /&gt;  8 | HrlPvRMvnyJpPWJrJwLV&lt;br /&gt;  9 | mYbJGoCCZNUGefvzXiUl&lt;br /&gt; 10 | GEAwBkNlGzgTxiCexfGw&lt;br /&gt;(10 rows)&lt;br /&gt;&lt;br /&gt;postgres=# &lt;strong&gt;EXPLAIN SELECT * FROM users WHERE name = 'hoge';&lt;/strong&gt;&lt;br /&gt;                                  QUERY PLAN&lt;br /&gt;------------------------------------------------------------------------------&lt;br /&gt; Bitmap Heap Scan on users  (cost=4.64..75.57 rows=50 width=36)&lt;br /&gt;   Recheck Cond: (name = 'hoge'::text)&lt;br /&gt;   -&gt;  Bitmap Index Scan on users_name_idx  (cost=0.00..4.63 rows=50 width=0)&lt;br /&gt;         Index Cond: (name = 'hoge'::text)&lt;br /&gt;(4 rows)&lt;br /&gt;&lt;br /&gt;postgres=# &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;バージョン 8.4 でも、配列に対する集約関数である &lt;a href=http://www.postgresql.jp/document/8.4/html/functions-aggregate.html&gt;array_agg() 関数&lt;/a&gt;が使えるので、以下のようにできます。&lt;pre&gt;&lt;br /&gt;DROP TABLE users CASCADE;&lt;br /&gt;&lt;br /&gt;CREATE TABLE users (id integer PRIMARY KEY, name text);&lt;br /&gt;&lt;br /&gt;INSERT INTO users (id, name) (&lt;br /&gt;  SELECT id, array_to_string(&lt;br /&gt;   array_agg(a[ceil(random() * array_length(a, 1))]),'' )&lt;br /&gt;    FROM (&lt;br /&gt;      SELECT ARRAY[&lt;br /&gt;       'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',&lt;br /&gt;       'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',&lt;br /&gt;       'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',&lt;br /&gt;       'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'&lt;br /&gt;      ] AS a, *&lt;br /&gt;        FROM generate_series(1, 10000) AS id, generate_series(1, 20)&lt;br /&gt;    ) AS tmp&lt;br /&gt;    GROUP BY id&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;CREATE INDEX users_name_idx ON users (name);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;8.3 以前では、array_agg() も無いので、集約関数では無理だと思います。ストアドプロシージャを使います。&lt;h2&gt;ストアドプロシージャで実行&lt;/h2&gt;&lt;p&gt;9.0 以降には &lt;a href=http://www.postgresql.jp/document/9.0/html/sql-do.html&gt;DO コマンド&lt;/a&gt;があり、無名関数の実行ができますので "DO $$～" のように実行できますが、8.4 以前では、一旦名前をつけて関数を定義する必要があります。&lt;p&gt;以下は、8.3 でも動きます。&lt;pre&gt;&lt;br /&gt;DROP TABLE users CASCADE;&lt;br /&gt;&lt;br /&gt;CREATE TABLE users (id integer PRIMARY KEY, name text);&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE FUNCTION tmp() RETURNS void AS&lt;br /&gt;$$&lt;br /&gt;  DECLARE&lt;br /&gt;    i INTEGER;&lt;br /&gt;    id INTEGER;&lt;br /&gt;    name text;&lt;br /&gt;    s text := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';&lt;br /&gt;  BEGIN&lt;br /&gt;    FOR id IN 1 .. 10000 LOOP&lt;br /&gt;      name := '';&lt;br /&gt;      FOR i IN 1 .. 20 LOOP&lt;br /&gt;        name := name || substr(s, ceil(random() * length(s))::int, 1);&lt;br /&gt;      END LOOP;&lt;br /&gt;      INSERT INTO users VALUES(id, name);&lt;br /&gt;    END LOOP;&lt;br /&gt;  END&lt;br /&gt;$$ LANGUAGE plpgsql;&lt;br /&gt;&lt;br /&gt;SELECT tmp();&lt;br /&gt;&lt;br /&gt;DROP FUNCTION tmp();&lt;br /&gt;&lt;br /&gt;CREATE INDEX users_name_idx ON users (name);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;では。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-3023397098102681995?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/3023397098102681995/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/postgresql-sql.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/3023397098102681995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/3023397098102681995'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/postgresql-sql.html' title='PostgreSQL の SQL やプロシージャでランダムデータの入ったテーブルを生成する'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-1548698396838478534</id><published>2011-12-12T15:00:00.000+09:00</published><updated>2011-12-12T17:41:01.942+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LDAP'/><category scheme='http://www.blogger.com/atom/ns#' term='RHEL6'/><category scheme='http://www.blogger.com/atom/ns#' term='SSH'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenLDAP'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSSH'/><title type='text'>RHEL6.1～系の OpenLDAP (slapd.conf) で SSH 公開鍵配布</title><content type='html'>&lt;p&gt;お世話になっております、SIOS &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;先日掲載した「&lt;a href="http://sios-oss.blogspot.com/2011/12/rhel6-openldap-pam.html"&gt;SIOS OSS Tech: RHEL6 系での OpenLDAP サーバと PAM 認証&lt;/a&gt;」で、slapd.conf 型から cn=config 型への移行を頑張ろうと決意したのですが、「&lt;a href=http://www.zarafa.com/wiki/index.php/OpenLdap:_Switch_to_dynamic_config_backend_(cn%3Dconfig)#Convert_schema_files_for_import&gt;Convert schema files for import - OpenLdap: Switch to dynamic config backend (cn=config) - Zarafa wiki&lt;/a&gt;」を読んでアホらしくなってしまい、slapd.conf へ戻すことにしました。今回の主題は OpenLDAP を使った SSH キーの配布なのですが、その前段として、前回の手順一通りを、slapd.conf を用いるものに書き換えて再掲しようと思います。cn=config 方式にも有用な場面は（多分）あるかと思われますので、既存の記事も、そのまま残しておきます。&lt;h2&gt;ディレクトリ・サーバの設定&lt;/h2&gt;&lt;p&gt;まずはいつものように、SELinux と iptables の無効化です。実運用のサーバでは、運用ポリシーに従って、それぞれ適切に設定してください。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;setenforce permissive&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;getenforce&lt;/strong&gt;&lt;br /&gt;Permissive&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;service iptables stop&lt;/strong&gt;&lt;br /&gt;iptables: ファイアウォールルールを消去中:                  [  OK  ]&lt;br /&gt;iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]&lt;br /&gt;iptables: モジュールを取り外し中:                          [  OK  ]&lt;br /&gt;[root@dirserv ~]#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;サーバと、操作用のクライアントをインストールします。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;yum install -y openldap-clients openldap-servers&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;もし動いているようであれば、slapd サービスを停止させてから、slapd.d/ ディレクトリを削除します。これで、slapd は slapd.conf から設定を読むようになります。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;service slapd status&lt;/strong&gt;&lt;br /&gt;slapd は停止しています&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;rm -fr /etc/openldap/slapd.d/ /var/lib/ldap/*&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;"Obsolete" のファイルを元に、slapd.conf を作成します。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;slappasswd -s secret2&lt;/strong&gt;&lt;br /&gt;{SSHA}Z42Qdb/r/YAw0QRD8vI/SYcLgoxtzF4l&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;cp \&lt;br /&gt; /usr/share/openldap-servers/slapd.conf.obsolete \&lt;br /&gt; /etc/openldap/slapd.conf&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;chown ldap.ldap /etc/openldap/slapd.conf&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;chmod 0600 /etc/openldap/slapd.conf&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;vi /etc/openldap/slapd.conf&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;diff -uNr \&lt;br /&gt; /usr/share/openldap-servers/slapd.conf.obsolete \&lt;br /&gt; /etc/openldap/slapd.conf&lt;/strong&gt;&lt;br /&gt;--- /usr/share/openldap-servers/slapd.conf.obsolete&lt;br /&gt;+++ /etc/openldap/slapd.conf&lt;br /&gt;@@ -64,9 +64,9 @@&lt;br /&gt; # /etc/pki/tls/certs, running "make slapd.pem", and fixing permissions on&lt;br /&gt; # slapd.pem so that the ldap user or group can read it.  Your client software&lt;br /&gt; # may balk at self-signed certificates, however.&lt;br /&gt;-# TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt&lt;br /&gt;-# TLSCertificateFile /etc/pki/tls/certs/slapd.pem&lt;br /&gt;-# TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem&lt;br /&gt;&lt;strong&gt;+TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt&lt;br /&gt;+TLSCertificateFile /etc/pki/tls/certs/slapd.pem&lt;br /&gt;+TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt; # Sample security restrictions&lt;br /&gt; #      Require integrity protection (prevent hijacking)&lt;br /&gt;@@ -95,14 +95,26 @@&lt;br /&gt; #&lt;br /&gt; # rootdn can always read and write EVERYTHING!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;+access to attrs=userPassword&lt;br /&gt;+  by dn="cn=Manager,dc=example,dc=com" write&lt;br /&gt;+  by self write&lt;br /&gt;+  by anonymous auth&lt;br /&gt;+  by * none&lt;br /&gt;+&lt;br /&gt;+access to *&lt;br /&gt;+  by dn.exact="cn=Manager,dc=example,dc=com" write&lt;br /&gt;+  by self write&lt;br /&gt;+  by * read&lt;br /&gt;+&lt;br /&gt;&lt;/strong&gt; #######################################################################&lt;br /&gt; # ldbm and/or bdb database definitions&lt;br /&gt; #######################################################################&lt;br /&gt;&lt;br /&gt; database       bdb&lt;br /&gt;-suffix         "dc=my-domain,dc=com"&lt;br /&gt;&lt;strong&gt;+suffix         "dc=example,dc=com"&lt;br /&gt;&lt;/strong&gt; checkpoint     1024 15&lt;br /&gt;-rootdn         "cn=Manager,dc=my-domain,dc=com"&lt;br /&gt;&lt;strong&gt;+rootdn         "cn=Manager,dc=example,dc=com"&lt;br /&gt;+rootpw         {SSHA}Z42Qdb/r/YAw0QRD8vI/SYcLgoxtzF4l&lt;br /&gt;&lt;/strong&gt; # Cleartext passwords, especially for the rootdn, should&lt;br /&gt; # be avoided.  See slappasswd(8) and slapd.conf(5) for details.&lt;br /&gt; # Use of strong authentication encouraged.&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;起動します。今回はテストですので、インデックスも BDB の設定も、そのまま放置します。実運用では、パフォーマンスやバックアップにも気をつかってあげてください。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;service slapd start&lt;/strong&gt;&lt;br /&gt;slapd を起動中:                                            [  OK  ]&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;以下は任意ですが、サーバの挙動が分かりやすいように、ログの出力も設定しておきます。slapd は local4 のファシリティで syslog 出力をするのですが、せっかくの RHEL6 系の rsyslog ですので、アプリケーション名 ("slapd") でログを振り分けるようにしてみます。実運用では、ログが溢れないように、ローテートの設定もしておいてください。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;cp /etc/rsyslog.conf /etc/rsyslog.conf.orig&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;vi /etc/rsyslog.conf&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;diff -uNr /etc/rsyslog.conf.orig /etc/rsyslog.conf&lt;/strong&gt;&lt;br /&gt;--- /etc/rsyslog.conf.orig&lt;br /&gt;+++ /etc/rsyslog.conf&lt;br /&gt;@@ -76,3 +76,6 @@&lt;br /&gt; # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional&lt;br /&gt; #*.* @@remote-host:514&lt;br /&gt; # ### end of the forwarding rule ###&lt;br /&gt;&lt;strong&gt;+&lt;br /&gt;+!slapd&lt;br /&gt;+*.* /var/log/slapd.log&lt;br /&gt;&lt;/strong&gt;[root@dirserv ~]# &lt;strong&gt;service rsyslog reload&lt;/strong&gt;&lt;br /&gt;Reloading system logger...                                 [  OK  ]&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;アクセスできるかどうか、試してみます。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapsearch -x -D "cn=Manager,dc=example,dc=com" \&lt;br /&gt; -b "dc=example,dc=com" -w secret2&lt;/strong&gt;&lt;br /&gt;# extended LDIF&lt;br /&gt;#&lt;br /&gt;# LDAPv3&lt;br /&gt;# base &lt;dc=example,dc=com&gt; with scope subtree&lt;br /&gt;# filter: (objectclass=*)&lt;br /&gt;# requesting: ALL&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;# search result&lt;br /&gt;search: 2&lt;br /&gt;result: 32 No such object&lt;br /&gt;&lt;br /&gt;# numResponses: 1&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;良いようであれば、認証用のデータを入れて行きます。根元から作って行きます。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapadd -x -D "cn=Manager,dc=example,dc=com" \&lt;br /&gt; -w secret2 &amp;lt;&amp;lt;EOF&lt;br /&gt;dn: dc=example,dc=com&lt;br /&gt;dc: example&lt;br /&gt;objectClass: dcObject&lt;br /&gt;objectClass: organization&lt;br /&gt;o: Example Corp.&lt;br /&gt;&lt;br /&gt;dn: cn=Manager,dc=example,dc=com&lt;br /&gt;cn: Manager&lt;br /&gt;objectClass: organizationalRole&lt;br /&gt;&lt;br /&gt;dn: o=Users,dc=example,dc=com&lt;br /&gt;o: Linux Users&lt;br /&gt;objectClass: organization&lt;br /&gt;&lt;br /&gt;dn: ou=People,o=Users,dc=example,dc=com&lt;br /&gt;ou: People&lt;br /&gt;objectClass: organizationalUnit&lt;br /&gt;&lt;br /&gt;dn: ou=Group,o=Users,dc=example,dc=com&lt;br /&gt;ou: Group&lt;br /&gt;objectClass: organizationalUnit&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;adding new entry "dc=example,dc=com"&lt;br /&gt;&lt;br /&gt;adding new entry "cn=Manager,dc=example,dc=com"&lt;br /&gt;&lt;br /&gt;adding new entry "o=Users,dc=example,dc=com"&lt;br /&gt;&lt;br /&gt;adding new entry "ou=People,o=Users,dc=example,dc=com"&lt;br /&gt;&lt;br /&gt;adding new entry "ou=Group,o=Users,dc=example,dc=com"&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ちょっと間違うと、途中まで作ったところでエラーになり、そこまでの分が半端に残ります。failure atomic ではありません…、トランザクションがあればいいのにね。今回はテストですので、そんな時は、以下のように根元からガバッと再帰で消してしまってください。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapdelete -v -x -D "cn=Manager,dc=example,dc=com" \&lt;br /&gt; -w secret2 -r "dc=example,dc=com"&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ユーザ (foo と bar) を追加します。OpenLDAP のクライアント側 (SSSD, pam_ldap, nss-pam-ldapd 等) は、文書にはあまりキチンと書かれていないのですが (せいぜい /usr/share/doc/nss-pam-ldapd-0.7.5/README くらいか)、デフォルトで、クラス "posixAccount" や "posixShadow" を持つノードを、ユーザ情報として取りにきます。ですので、実はツリー構造は割と恣意的に決めてしまっても問題ありません。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;pass=$(slappasswd -s secret3)&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapadd -x -D "cn=Manager,dc=example,dc=com" \&lt;br /&gt; -w secret2 &amp;lt;&amp;lt;EOF&lt;br /&gt;dn: uid=foo,ou=People,o=Users,dc=example,dc=com&lt;br /&gt;objectClass: top&lt;br /&gt;objectClass: posixAccount&lt;br /&gt;objectClass: account&lt;br /&gt;gecos: ldap system users&lt;br /&gt;cn: foo&lt;br /&gt;uid: foo&lt;br /&gt;uidNumber: 1000&lt;br /&gt;gidNumber: 1000&lt;br /&gt;homeDirectory: /home/foo&lt;br /&gt;loginShell: /bin/bash&lt;br /&gt;userPassword: $pass&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;adding new entry "uid=foo,ou=People,o=Users,dc=example,dc=com"&lt;br /&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;pass=$(slappasswd -s secret4)&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapadd -x -D "cn=Manager,dc=example,dc=com" \&lt;br /&gt; -w secret2 &amp;lt;&amp;lt;EOF&lt;br /&gt;dn: uid=bar,ou=People,o=Users,dc=example,dc=com&lt;br /&gt;objectClass: top&lt;br /&gt;objectClass: posixAccount&lt;br /&gt;objectClass: account&lt;br /&gt;gecos: ldap system users&lt;br /&gt;cn: bar&lt;br /&gt;uid: bar&lt;br /&gt;uidNumber: 1001&lt;br /&gt;gidNumber: 1001&lt;br /&gt;homeDirectory: /home/bar&lt;br /&gt;loginShell: /bin/bash&lt;br /&gt;userPassword: $pass&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;adding new entry "uid=bar,ou=People,o=Users,dc=example,dc=com"&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;グループ (foo と bar) を追加します。こちらも同様に、クライアントはデフォルトで、クラス "posixGroup" を持つノードを探索に来ます。今回は、昨今の Linux ディストリビューションの構成と同様に、UPG (User Private Group) 式で、ユーザごとに個別に同名のグループを割り当てますが、LDAP 的には、共通のグループを割り当てる方が一般的かも知れません。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapadd -x -D "cn=Manager,dc=example,dc=com" \&lt;br /&gt; -w secret2 &amp;lt;&amp;lt;EOF&lt;br /&gt;dn: cn=foo,ou=Group,o=Users,dc=example,dc=com&lt;br /&gt;cn: foo&lt;br /&gt;objectClass: posixGroup&lt;br /&gt;gidNumber: 1000&lt;br /&gt;userPassword: {CRYPT}x&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;adding new entry "cn=foo,ou=Group,o=Users,dc=example,dc=com"&lt;br /&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapadd -x -D "cn=Manager,dc=example,dc=com" \&lt;br /&gt; -w secret2 &amp;lt;&amp;lt;EOF&lt;br /&gt;dn: cn=bar,ou=Group,o=Users,dc=example,dc=com&lt;br /&gt;cn: bar&lt;br /&gt;objectClass: posixGroup&lt;br /&gt;gidNumber: 1001&lt;br /&gt;userPassword: {CRYPT}x&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;adding new entry "cn=bar,ou=Group,o=Users,dc=example,dc=com"&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;一般ユーザから、他人のパスワードが見えないことを確認しておきます。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapsearch -x \&lt;br /&gt; -D "uid=foo,ou=People,o=Users,dc=example,dc=com" \&lt;br /&gt; -b "dc=example,dc=com" -w secret3 "(objectClass=posixAccount)"&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapsearch -x \&lt;br /&gt; -D "uid=bar,ou=People,o=Users,dc=example,dc=com" \&lt;br /&gt; -b "dc=example,dc=com" -w secret4 "(objectClass=posixAccount)"&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;h2&gt;認証依頼元の Linux ホストの設定&lt;/h2&gt;&lt;p&gt;こちらも同様に、SELinux と iptables の無効化です。実運用のサー (以下テンプレ略)。&lt;pre&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;setenforce permissive&lt;/strong&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;getenforce&lt;/strong&gt;&lt;br /&gt;Permissive&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;service iptables stop&lt;/strong&gt;&lt;br /&gt;iptables: ファイアウォールルールを消去中:                  [  OK  ]&lt;br /&gt;iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]&lt;br /&gt;iptables: モジュールを取り外し中:                          [  OK  ]&lt;br /&gt;[root@linhost ~]#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;RHEL5 系の &lt;a href=http://www.padl.com/OSS/nss_ldap.html&gt;nss_ldap&lt;/a&gt; から、RHEL6 系では PAM は pam_ldap に、NSS は nss_ldap からフォークした &lt;a href=http://arthurdejong.org/nss-pam-ldapd/&gt;nss-pam-ldapd&lt;/a&gt; へと分離しており、また、それらを束ねる &lt;a href=http://docs.redhat.com/docs/ja-JP/Red_Hat_Enterprise_Linux/6/html/Migration_Planning_Guide/ch07s02.html&gt;SSSD 抽象化レイヤ&lt;/a&gt; (&lt;a href=http://fedoraproject.org/wiki/Features/SSSD&gt;詳細&lt;/a&gt;) が入っていたりと、設定ファイルが多岐に渡り、もはや手作業では手に負えなくなっているので、authconfig コマンドを使用します。&lt;p&gt;同時に、TLS (389 番ポートでの "STARTTLS" による接続) も設定します。authconfig では、認証局ナシでの TLS 設定ができないので、設定をした後で、ちょっとだけ手を入れる必要があります。&lt;p&gt;SSSD を用いる手順:&lt;pre&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;authconfig --disableforcelegacy --enablemkhomedir \&lt;br /&gt; --enableldap --enableldapauth --enableldaptls \&lt;br /&gt; --ldapserver=dirserv.vnat --ldapbasedn="dc=example,dc=com" \&lt;br /&gt; --update&lt;/strong&gt;&lt;br /&gt;sssd を起動中:                                             [  OK  ]&lt;br /&gt;oddjobd を起動中:                                          [  OK  ]&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/sssd/sssd.conf&lt;br /&gt;ldap_tls_reqcert = never&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/nslcd.conf&lt;br /&gt;tls_cacertfile /etc/pki/tls/certs/ca-bundle.crt&lt;br /&gt;tls_checkpeer no&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;service sssd restart&lt;/strong&gt;&lt;br /&gt;sssd を停止中:                                             [  OK  ]&lt;br /&gt;sssd を起動中:                                             [  OK  ]&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;旧来の (legacy な) 手順:&lt;pre&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;authconfig --enableforcelegacy --enablemkhomedir \&lt;br /&gt; --enableldap --enableldapauth --enableldaptls \&lt;br /&gt; --ldapserver=dirserv.vnat --ldapbasedn="dc=example,dc=com" \&lt;br /&gt; --update&lt;/strong&gt;&lt;br /&gt;nslcd を起動中:                                            [  OK  ]&lt;br /&gt;oddjobd を起動中:                                          [  OK  ]&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/nslcd.conf&lt;br /&gt;tls_cacertfile /etc/pki/tls/certs/ca-bundle.crt&lt;br /&gt;tls_reqcert no&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;service nslcd restart&lt;/strong&gt;&lt;br /&gt;nslcd を停止中:                                            [  OK  ]&lt;br /&gt;nslcd を起動中:                                            [  OK  ]&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/pam_ldap.conf&lt;br /&gt;tls_cacertfile /etc/pki/tls/certs/ca-bundle.crt&lt;br /&gt;tls_checkpeer no&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt; では、動作を確認してみます。&lt;pre&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;id foo&lt;/strong&gt;&lt;br /&gt;uid=1000(foo) gid=1000(foo) 所属グループ=1000(foo)&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;su - foo&lt;/strong&gt;&lt;br /&gt;Creating home directory for foo.&lt;br /&gt;[foo@linhost ~]$ &lt;strong&gt;su - bar&lt;/strong&gt;&lt;br /&gt;パスワード: &lt;strong&gt;secret4&lt;/strong&gt;&lt;br /&gt;Creating home directory for bar.&lt;br /&gt;[bar@linhost ~]$ &lt;strong&gt;id&lt;/strong&gt;&lt;br /&gt;uid=1001(bar) gid=1001(bar) 所属グループ=1001(bar) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023&lt;br /&gt;[bar@linhost ~]$ &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;良いようです。&lt;h2&gt;SSH キー配布の設定&lt;/h2&gt;&lt;p&gt;ディレクトリサーバに、SSH のキーを保持する LDAP スキーマが必要なので、oepnssh-ldap をインストールします。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;yum install -y openssh-ldap&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;slapd の設定を修正し、スキーマを追加します。キーへのアクセス権限の設定も追加しておきます。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;cp /etc/openldap/slapd.conf \&lt;br /&gt; /etc/openldap/slapd.conf.orig&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;vi /etc/openldap/slapd.conf&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;diff -uNr /etc/openldap/slapd.conf.orig \&lt;br /&gt; /etc/openldap/slapd.conf&lt;/strong&gt;&lt;br /&gt;--- /etc/openldap/slapd.conf.orig&lt;br /&gt;+++ /etc/openldap/slapd.conf&lt;br /&gt;@@ -15,6 +15,7 @@&lt;br /&gt; include                /etc/openldap/schema/openldap.schema&lt;br /&gt; include                /etc/openldap/schema/ppolicy.schema&lt;br /&gt; include                /etc/openldap/schema/collective.schema&lt;br /&gt;&lt;strong&gt;+include                /usr/share/doc/openssh-ldap-5.3p1/openssh-lpk-openldap.&lt;/strong&gt;schema&lt;br /&gt;&lt;br /&gt; # Allow LDAPv2 client connections.  This is NOT the default.&lt;br /&gt; allow bind_v2&lt;br /&gt;@@ -101,6 +102,11 @@&lt;br /&gt;   by anonymous auth&lt;br /&gt;   by * none&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;+access to attrs=sshPublicKey&lt;br /&gt;+  by dn="cn=Manager,dc=example,dc=com" write&lt;br /&gt;+  by self write&lt;br /&gt;+  by * none&lt;br /&gt;+&lt;br /&gt;&lt;/strong&gt; access to *&lt;br /&gt;   by dn.exact="cn=Manager,dc=example,dc=com" write&lt;br /&gt;   by self write&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;service slapd restart&lt;/strong&gt;&lt;br /&gt;slapd を停止中:                                            [  OK  ]&lt;br /&gt;slapd を起動中:&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ここでキーを作成し、登録します。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ssh-keygen -f ~/.ssh/id_rsa -N ""&lt;/strong&gt;&lt;br /&gt;Generating public/private rsa key pair.&lt;br /&gt;Your identification has been saved in /root/.ssh/id_rsa.&lt;br /&gt;Your public key has been saved in /root/.ssh/id_rsa.pub.&lt;br /&gt;The key fingerprint is:&lt;br /&gt;(中略)&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;key=$(cat ~/.ssh/id_rsa.pub)&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapmodify -x -D "cn=Manager,dc=example,dc=com" \&lt;br /&gt; -w secret2 &amp;lt;&amp;lt;EOF&lt;br /&gt;dn: uid=foo,ou=People,o=Users,dc=example,dc=com&lt;br /&gt;changetype: modify&lt;br /&gt;add: objectClass&lt;br /&gt;objectClass: ldapPublicKey&lt;br /&gt;-&lt;br /&gt;add: sshPublicKey&lt;br /&gt;sshPublicKey: $key&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;以上で、LDAP サーバ側は終了です。&lt;h2&gt;sshd サーバの設定&lt;/h2&gt;&lt;p&gt;sshd サーバが LDAP サーバから、対象ユーザの公開鍵を取得できるように設定します。まずは、sshd の外部プログラムを追加でインストールします。&lt;pre&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;yum install -y openssh-ldap&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;sshd が、外部プログラムからキーを取得するように設定します。上記パッケージに含まれる HOWTO.ldap-keys では "AuthorizedKeysCommand" のパラメータをダブルクォートでくくっていますが、そのように記述すると、パーサはこれを処理しないため、動きません。クォートせずに、"/" で始まる絶対パスを指定してください。なお、stat(2) でファイルの有無を確認しているので、行末にスペース等が入っていると、これまた動きません。総じて不親切です。あまり使われていないのか。&lt;pre&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig&lt;/strong&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;vi /etc/ssh/sshd_config&lt;/strong&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;diff -uNr \&lt;br /&gt; /etc/ssh/sshd_config.orig \&lt;br /&gt; /etc/ssh/sshd_config&lt;/strong&gt;&lt;br /&gt;--- /etc/ssh/sshd_config.orig&lt;br /&gt;+++ /etc/ssh/sshd_config&lt;br /&gt;@@ -45,10 +45,10 @@&lt;br /&gt; #MaxSessions 10&lt;br /&gt;&lt;br /&gt; #RSAAuthentication yes&lt;br /&gt;-#PubkeyAuthentication yes&lt;br /&gt;&lt;strong&gt;+PubkeyAuthentication yes&lt;/strong&gt;&lt;br /&gt; #AuthorizedKeysFile    .ssh/authorized_keys&lt;br /&gt;-#AuthorizedKeysCommand none&lt;br /&gt;-#AuthorizedKeysCommandRunAs nobody&lt;br /&gt;&lt;strong&gt;+AuthorizedKeysCommand /usr/libexec/openssh/ssh-ldap-wrapper&lt;br /&gt;+AuthorizedKeysCommandRunAs root&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt; # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts&lt;br /&gt; #RhostsRSAAuthentication no&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;上記の外部プログラムが利用する設定を記述します。パスワードを含むので、パーミッションに注意してください。設定後、"/usr/libexec/openssh/ssh-ldap-wrapper foo" のように実行してキーが返って来ないようであれば、設定をしくじっています。(※注意: openssh-ldap-5.3p1-52 の ssh-ldap-wrapper には、設定ファイルのパーサにバグがあり、"tls_checkpeer" の設定が効きません。直すか、ちゃんとした証明書を用意するか、TLS をオフにするしかないようです。下記では、オフにしています)&lt;p&gt;# TLS が使えなくとも、公開鍵ならば平文で飛んでも問題ありませんから、なまじ rootdn のパスワードを指定するよりも、anonymous でキーを取得できるようにした方が良いかも知れません&lt;pre&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;cat &amp;gt; /etc/ssh/ldap.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;uri ldap://dirserv.vnat/&lt;br /&gt;base dc=example,dc=com&lt;br /&gt;binddn cn=Manager,dc=example,dc=com&lt;br /&gt;bindpw secret2&lt;br /&gt;host dirserv.vnat&lt;br /&gt;&lt;br /&gt;ssl no&lt;br /&gt;#ssl start_tls&lt;br /&gt;tls_cacertdir /etc/openldap/cacerts&lt;br /&gt;tls_cacertfile /etc/pki/tls/certs/ca-bundle.crt&lt;br /&gt;tls_checkpeer no&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;chmod 600 /etc/ssh/ldap.conf&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;sshd を再起動します。&lt;pre&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;service sshd restart&lt;/strong&gt;&lt;br /&gt;sshd を停止中:                                             [  OK  ]&lt;br /&gt;sshd を起動中:                                             [  OK  ]&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;以上です。試しに、~/.ssh/id_rsa.pub を持っているホストからログインしてみます。&lt;pre&gt;&lt;br /&gt;[root@dirserv etc]# &lt;strong&gt;ssh -o RSAAuthentication=yes \&lt;br /&gt; -o PasswordAuthentication=no -l foo linhost.vnat&lt;/strong&gt;&lt;br /&gt;Last login: Thu Dec XX 15:54:49 2011 from dirserv.vnat&lt;br /&gt;[foo@linhost ~]$&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;良いようですね。では。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-1548698396838478534?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/1548698396838478534/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/rhel61-openldap-slapdconf-ssh.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/1548698396838478534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/1548698396838478534'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/rhel61-openldap-slapdconf-ssh.html' title='RHEL6.1～系の OpenLDAP (slapd.conf) で SSH 公開鍵配布'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-7107778948570155320</id><published>2011-12-09T12:00:00.000+09:00</published><updated>2011-12-12T11:44:26.548+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='prelink'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='RPM'/><title type='text'>prelink されたバイナリの "rpm -V" での検証は無問題</title><content type='html'>&lt;p&gt;寒くなってまいりましたが、いかがお過ごしでしょうか。お疲れ様です、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;今どきの Red Hat 系のシステムでは、デフォルトで prelink が有効になっているんですね。下記のように、cron から起動されています。&lt;pre&gt;&lt;br /&gt;$ &lt;strong&gt;ls /etc/cron.daily/prelink&lt;/strong&gt;&lt;br /&gt;/etc/cron.daily/prelink*&lt;br /&gt;$ &lt;strong&gt;grep PRELINKING /etc/sysconfig/prelink&lt;/strong&gt;&lt;br /&gt;PRELINKING=yes&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;定期的に prelink をしなおしているので、バイナリが書き換わっています。"libxml2" の持つ "/usr/lib64/libxml2.so.2.6.26" を見てみます。下記は、RPM のシステムが保持している MD5 値です。&lt;pre&gt;&lt;br /&gt;$ &lt;strong&gt;pkg=libxml2&lt;/strong&gt;&lt;br /&gt;$ &lt;strong&gt;file=/usr/lib64/libxml2.so.2.6.26&lt;/strong&gt;&lt;br /&gt;$ &lt;strong&gt;rpm -q --dump $pkg | grep ^$file | cut -d' ' -f1,4&lt;/strong&gt;&lt;br /&gt;/usr/lib64/libxml2.so.2.6.26 0cb304449951396925c1ad4e84930a22&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ファイルから直接に MD5 値を取得すると、当然 prelink が書きかえた分だけ違います。&lt;pre&gt;&lt;br /&gt;$ &lt;strong&gt;md5sum $file&lt;/strong&gt;&lt;br /&gt;1dd15c495edb654f0a55c366bf39bdf7  /usr/lib64/libxml2.so.2.6.26&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ところが、"rpm -V" で verify しても、何も言われないんですよね。&lt;pre&gt;&lt;br /&gt;$ &lt;strong&gt;rpm -V libxml2&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;なぜだろうかと思ったのですが、ミソは、以下のファイルでした。&lt;pre&gt;&lt;br /&gt;$ &lt;strong&gt;rpm -qf /etc/rpm/macros.prelink&lt;/strong&gt;&lt;br /&gt;prelink-0.4.0-2.el5&lt;br /&gt;$ &lt;strong&gt;cat /etc/rpm/macros.prelink&lt;/strong&gt;&lt;br /&gt;# rpm-4.1 verifies prelinked libraries using a prelink undo helper.&lt;br /&gt;#       Note: The 2nd token is used as argv[0] and "library" is a&lt;br /&gt;#       placeholder that will be deleted and replaced with the appropriate&lt;br /&gt;#       library file path.&lt;br /&gt;%__prelink_undo_cmd     /usr/sbin/prelink prelink -y library&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;"rpm -V" の verify をする際に RPM は、上記マクロのコマンドを内部で呼んで、prelink による改変前のバイナリのダイジェスト値で比較して、それ以外の改変の有無を判断しています。手実行して、RPM が内部で保持している MD5 値と一致することを確認してみます。&lt;pre&gt;&lt;br /&gt;$ &lt;strong&gt;prelink --verify --md5 $file&lt;/strong&gt;&lt;br /&gt;0cb304449951396925c1ad4e84930a22  /usr/lib64/libxml2.so.2.6.26&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;OK でした。なお、prelink の処理は可逆です。元に戻すための情報は、ELF のバイナリファイルに追加されるセクション ".gnu.prelink_undo" 内に保持されています。&lt;pre&gt;&lt;br /&gt;$ &lt;strong&gt;readelf --section-headers $file | grep --after-context=1 prelink&lt;/strong&gt;&lt;br /&gt;  [27] .gnu.prelink_undo PROGBITS         0000000000000000  0013baf0&lt;br /&gt;       0000000000000798  0000000000000001           0     0     8&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;元に戻してみます。&lt;pre&gt;&lt;br /&gt;$ &lt;strong&gt;sudo prelink --undo $file&lt;/strong&gt;&lt;br /&gt;$ &lt;strong&gt;md5sum $file&lt;/strong&gt;&lt;br /&gt;0cb304449951396925c1ad4e84930a22  /usr/lib64/libxml2.so.2.6.26&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;今度は、直接 MD5 値を取っても、RPM の内部値と一致しています。&lt;p&gt;処理まで追おうとして力つきましたので、今日はこのへんで。では。&lt;h2&gt;追記 (Mon Dec 12 2011)&lt;/h2&gt;&lt;p&gt;RHEL6 系からは、ダイジェスト値が SHA1 の 256 ビットに変更されています。&lt;pre&gt;&lt;br /&gt;$ &lt;strong&gt;pkg=libxml2&lt;/strong&gt;&lt;br /&gt;$ &lt;strong&gt;file=/usr/lib64/libxml2.so.2.6.26&lt;/strong&gt;&lt;br /&gt;$ &lt;strong&gt;rpm -q --dump $pkg | grep ^$file | cut -d' ' -f1,4&lt;/strong&gt;&lt;br /&gt;/usr/lib64/libxml2.so.2.7.6 2b7ae1cbfd796e3ce32a0a836d801bfcc0feefad284705c572d9bb5528f387af&lt;br /&gt;$ &lt;strong&gt;sha256sum $file&lt;/strong&gt;&lt;br /&gt;292596e8550d3167df658b03578654337c26c99d37fc10beb0771385b33d426e  /usr/lib64/libxml2.so.2.7.6&lt;br /&gt;$ &lt;strong&gt;prelink --verify $file | sha256sum&lt;/strong&gt;&lt;br /&gt;2b7ae1cbfd796e3ce32a0a836d801bfcc0feefad284705c572d9bb5528f387af  -&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ダイジェスト値はパッケージを作成した時点で埋めこまれます。rpm-*/build/files.c:genCpioListAndHeader() あたりを見ると分かりますが、%_binary_filedigest_algorithm マクロが得られなければ、デフォルトで MD5 になるようになっていますので、明示的に SHA256 が指定されているはずです。これは、redhat-rpm-config パッケージに含まれる /usr/lib/rpm/redhat/macros で指定されています。&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;# Use SHA-256 for FILEDIGESTS instead of default MD5&lt;br /&gt;%_source_filedigest_algorithm 8&lt;br /&gt;%_binary_filedigest_algorithm 8&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-7107778948570155320?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/7107778948570155320/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/prelink-rpm-v.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/7107778948570155320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/7107778948570155320'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/prelink-rpm-v.html' title='prelink されたバイナリの &quot;rpm -V&quot; での検証は無問題'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-2440582174122889563</id><published>2011-12-08T12:28:00.000+09:00</published><updated>2011-12-15T16:14:20.534+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ports'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='Homebrew'/><title type='text'>ソースの入手と再ビルド &amp; デバッグ ～ Mac OS X Homebrew 編</title><content type='html'>&lt;p&gt;お疲れ様です、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;はじめて UNIX OS を買いました、Mac OS X です。そこで、「&lt;a href="http://sios-oss.blogspot.com/2011/11/centosscientific-linux.html"&gt;ソースの入手と再ビルド ～ CentOS / Scientific Linux 編&lt;/a&gt;」、「&lt;a href="http://sios-oss.blogspot.com/2011/11/ubuntu.html"&gt;ソースの入手と再ビルド ～ Ubuntu 編&lt;/a&gt;」に続いて、Mac OS X 上での UNIX (POSIX？) 系パッケージの管理について簡単にお話ししようと思います。&lt;p&gt;Mac OS X 上での後入れの UNIX 系パッケージの管理には、今回 &lt;a href="http://mxcl.github.com/homebrew/"&gt;Homebrew&lt;/a&gt; を利用することにしました。Homebrew は、BSD 系のシステムで多く用いられているパッケージ管理システムである ports 系の一派であり、&lt;a href="http://www.freebsd.org/ja/ports/index.html"&gt;FreeBSD Ports&lt;/a&gt;, &lt;a href="http://gentoo-portage.com/"&gt;Gentoo Portage&lt;/a&gt;, &lt;a href=http://www.macports.org/&gt;MacPorts&lt;/a&gt; (旧 DarwinPorts) などの仲間です。&lt;p&gt;RPM (Red Hat) 系や deb (Debian) 系のパッケージ管理では一般的に、ディストリビューション開発者の側でビルドされたバイナリパッケージを入手してインストールする方式を採るのに対して、ports 系のパッケージは、ネットワークからソースコードを取得してきて、自分のホスト上で自前でビルドをするという特徴を持ちます (バイナリ配布もできるようにはなっていますけどね)。ターゲット・ホスト上には、インストール可能なパッケージのソースの所在をあらわす URL とビルド手順が書かれたファイルが格納されており、それらに従って、ホスト上で都度コンパイルをしながら、インストールを行います。もちろん、パッケージ管理ツールとしては当然のこととして、パッケージ単位でのインストール、アンインストール、ファイルのリスト管理、依存関係の解決などの機能を備えています。&lt;p&gt;ports 系のメリットとしては、OS や CPU フィーチャごとに最高の最適化がかけられる、やっていることが分かりやすい、などが挙げられる反面、環境ごとにバイナリが異なるのでサポートがしづらい、ネットワーク環境が必須、ビルドにマシンパワーと長い時間を要する、依存される度合いの大きいライブラリの API が更新されると大変、使っているだけで変態扱いされる、等のデメリットもあります。「貴重な一台をマルチユースで大事に使う」という旧来型のコンピューティング・シーンにおいては快適ですが、昨今の、安価なサーバを次から次に使い捨て、クラウドでガンガンとスケールするような使い方とは、相性が悪いのではないかなぁと思います。&lt;p&gt;さて、私の Mac の使い方は、当然前者の「貴重な一台をマルチユースで大事に使う」スタイルですので、ジャンジャン Homebrew を活用しましょう。従来 Mac OS X 環境で広く用いられてきた MacPorts が、すでに OS X の標準アプリケーションとして /bin/, /sbin/, /usr/bin/ 等にインストールされているソフトウェアも、重複して MacPorts の管理下でインストールしなければならず、無用に CPU パワーと初期導入時間を要し、別バージョンの多重管理に起因する問題を起こしたりしていたのに対して、Homebrew では、重複しないものだけを、/usr/local/ の下で完結して管理するところに、非常に好感が持てます。&lt;p&gt;では、ソースの入手とビルド手順を解説して行きましょう…かと思ったのですが、正直なところ「&lt;a href="https://github.com/mxcl/homebrew/wiki/Formula-Cookbook"&gt;Formula Cookbook - GitHub&lt;/a&gt;」を読んで /usr/local/Library/Formula/ 以下の formula ファイルを眺めれば、Homebrew がやっていることについては誰にでも分かると思いますので、そちらに譲ります。&lt;p&gt;では。&lt;p&gt;…と、それだけでは何なので、フルにデバッグ情報を積んで、ソースレベル・デバッグが可能な状態でのインストール方法でも紹介しようと思います。&lt;p&gt;/usr/local/Library/Homebrew/formula.rb:Formula#mktemp() におけるビルドディレクトリの処理を見ると、インストール終了後は "ensure" で、何が何でもビルドツリーを消しに行きますので、ソースファイルとオブジェクトファイルを消さずに残すことができません。private だし。&lt;pre&gt;&lt;br /&gt;private&lt;br /&gt;  def mktemp&lt;br /&gt;    tmp_prefix = ENV['HOMEBREW_TEMP'] || '/tmp'&lt;br /&gt;    tmp=Pathname.new `/usr/bin/mktemp -d #{tmp_prefix}/homebrew-#{name}-#{version}-XXXX`.strip&lt;br /&gt;    raise "Couldn't create build sandbox" if not tmp.directory? or $? != 0&lt;br /&gt;    begin&lt;br /&gt;      wd=Dir.pwd&lt;br /&gt;      Dir.chdir tmp&lt;br /&gt;      yield&lt;br /&gt;    ensure&lt;br /&gt;      Dir.chdir wd&lt;br /&gt;      tmp.rmtree&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;仕方が無いので、Cellar ディレクトリ内で直接ビルドをするよう、Formula ファイルを以下のように修正します。(RPM の debuginfo が、ビルドした場所と違うディレクトリにソースを格納できるのは、debugedit コマンドで、ELF 内の DWARF 情報を直接書き換えという大技を使えるからです。Mac OS X の Mach-O バイナリでは、そもそも DWARF 情報を *.o が持っていて、実行ファイルは、それらへのリンクしか持っていないんですね。それらがすべてフルパスで格納されているので、どうやってソースを移動して良いやらさっぱり分からないので、やめておきます)&lt;pre&gt;&lt;br /&gt;$ &lt;strong&gt;brew edit wget&lt;/strong&gt;&lt;br /&gt;$ &lt;strong&gt;(cd /usr/local/; git diff Library/Formula/wget.rb)&lt;/strong&gt;&lt;br /&gt;diff --git a/Library/Formula/wget.rb b/Library/Formula/wget.rb&lt;br /&gt;index 66240e7..26c3328 100644&lt;br /&gt;--- a/Library/Formula/wget.rb&lt;br /&gt;+++ b/Library/Formula/wget.rb&lt;br /&gt;@@ -13,6 +13,8 @@ class Wget &amp;lt; Formula&lt;br /&gt;     [["--enable-iri", "Enable iri support."]]&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;+  skip_clean :all if ARGV.debug?&lt;/strong&gt; # strip を抑制します&lt;br /&gt;&lt;strong&gt;+&lt;br /&gt;&lt;/strong&gt;   def install&lt;br /&gt;     args = ["--disable-debug",&lt;br /&gt;             "--prefix=#{prefix}",&lt;br /&gt;@@ -20,6 +22,14 @@ class Wget &amp;lt; Formula&lt;br /&gt;&lt;br /&gt;     args &amp;lt;&amp;lt; "--disable-iri" unless ARGV.include? "--enable-iri"&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;+    if ARGV.debug?&lt;br /&gt;+      ENV.Og&lt;/strong&gt; # 最適化を切ります → "-O0"&lt;br /&gt;&lt;strong&gt;+      d = Dir.getwd&lt;br /&gt;+      Dir.chdir ".."&lt;br /&gt;+      mv d, prefix + 'src'&lt;/strong&gt; # ソースをインストール対象とします&lt;br /&gt;&lt;strong&gt;+      Dir.chdir prefix + 'src'&lt;/strong&gt; # その中でビルドします&lt;br /&gt;&lt;strong&gt;+    end&lt;br /&gt;+&lt;/strong&gt;&lt;br /&gt;     system "./configure", *args&lt;br /&gt;     system "make install"&lt;br /&gt;   end&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;上記の修正の後、"--debug" オプションをつけてインストールすれば、最適化が無効になり、ソースレベルのデバッグが有効になります。&lt;pre&gt;&lt;br /&gt;$ &lt;strong&gt;brew install --debug --force wget&lt;/strong&gt;&lt;br /&gt;$ &lt;strong&gt;gdb wget&lt;/strong&gt;&lt;br /&gt;GNU gdb 6.3.50-20050815 (Apple version gdb-1708) (Thu Nov XX 21:59:02 UTC 2011)&lt;br /&gt;Copyright 2004 Free Software Foundation, Inc.&lt;br /&gt;GDB is free software, covered by the GNU General Public License, and you are&lt;br /&gt;welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;Type "show copying" to see the conditions.&lt;br /&gt;There is absolutely no warranty for GDB.  Type "show warranty" for details.&lt;br /&gt;This GDB was configured as "x86_64-apple-darwin"...&lt;br /&gt;Executing: ~/etc/gdbinit.&lt;br /&gt;Done: ~/etc/gdbinit.&lt;br /&gt;Reading symbols for shared libraries ..... done&lt;br /&gt;&lt;br /&gt;(gdb) &lt;strong&gt;b main&lt;/strong&gt;&lt;br /&gt;Breakpoint 1 at 0x10002bef2: file main.c, line 915.&lt;br /&gt;(gdb) &lt;strong&gt;run&lt;/strong&gt;&lt;br /&gt;Starting program: /usr/local/bin/wget&lt;br /&gt;Reading symbols for shared libraries ++++......................... done&lt;br /&gt;&lt;br /&gt;Breakpoint 1, main (argc=1, argv=0x7fff5fbff998) at main.c:915&lt;br /&gt;915       bool append_to_log = false;&lt;br /&gt;(gdb) l&lt;br /&gt;910     main (int argc, char **argv)&lt;br /&gt;911     {&lt;br /&gt;912       char **url, **t;&lt;br /&gt;913       int i, ret, longindex;&lt;br /&gt;914       int nurl;&lt;br /&gt;915       bool append_to_log = false;&lt;br /&gt;916&lt;br /&gt;917       total_downloaded_bytes = 0;&lt;br /&gt;918&lt;br /&gt;919       program_name = argv[0];&lt;br /&gt;(gdb)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Formula ファイルは Git で管理されていますので、修正を加えても、コンフリクトしない限りは問題なくアップデートができます。&lt;pre&gt;&lt;br /&gt;$ &lt;strong&gt;brew update&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ところで、Homebrew の用いる用語のアナロジー―homebrew (自家醸造), formula (醸造法), cellar (酒蔵), keg (樽)―等は、とても秀逸だと思います。ではまた。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-2440582174122889563?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/2440582174122889563/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/mac-os-x-homebrew.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/2440582174122889563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/2440582174122889563'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/mac-os-x-homebrew.html' title='ソースの入手と再ビルド &amp; デバッグ ～ Mac OS X Homebrew 編'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-1178287384928431167</id><published>2011-12-07T14:00:00.000+09:00</published><updated>2011-12-12T16:14:48.345+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LDAP'/><category scheme='http://www.blogger.com/atom/ns#' term='RHEL6'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='CentOS 6'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenLDAP'/><title type='text'>RHEL6 系での OpenLDAP サーバと PAM 認証</title><content type='html'>&lt;p&gt;お世話になっております、SIOS &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;Scientific Linux 6.1 で OpenLDAP のサーバを立てようとして、はたと止まってしまいました。RHEL5 系まででお馴染みの /etc/openldap/slapd.conf がありません。どうやら RHEL6 からは、以前は slapd.conf に記述していたメタデータも、論理的には DN "cn=config" のノードの下に、物理的には /etc/openldap/slapd.d/ 以下に、LDIF を用いた「dynamic runtime configuration engine」なるデータ構造で格納されるように変更されたようです。それに伴い他のノードと同様、汎用の DIT 操作コマンドを用いて、しかも動的に設定できるようになっています。詳しくは RHEL6 の「&lt;a href=http://docs.redhat.com/docs/ja-JP/Red_Hat_Enterprise_Linux/6/html/Migration_Planning_Guide/index.html&gt;移行管理ガイド&lt;/a&gt;」の「&lt;a href="http://docs.redhat.com/docs/ja-JP/Red_Hat_Enterprise_Linux/6/html/Migration_Planning_Guide/ch07s03.html"&gt;7.3.1 slapd 設定を変換する&lt;/a&gt;」や、本家ドキュメントの「&lt;a href="http://www.openldap.org/doc/admin24/slapdconf2.html"&gt;OpenLDAP Software 2.4 Administrator&amp;apos;s Guide: Configuring slapd&lt;/a&gt;」等を参照してください。&lt;p&gt;追記 (Mon Dec 12 2011): こちらの記事では slapd.d/ で頑張っていましたが、面倒になってしまい slapd.conf に戻ってしまった記事はこちら→「&lt;a href="http://sios-oss.blogspot.com/2011/12/rhel61-openldap-slapdconf-ssh.html"&gt;SIOS OSS Tech: RHEL6.1～系の OpenLDAP (slapd.conf) で SSH 公開鍵配布&lt;/a&gt;」。&lt;h2&gt;RHEL6 系の初期 slapd.d/ は何のため？&lt;/h2&gt;&lt;p&gt;さて、ここで一旦、少々脇道にそれます。上記のサイトを参照すると、既存の slapd.conf があるならば、slaptest コマンドで変換して slapd.d/ を作れば良いように読めますが、では、新規インストールをした場合にはどうすれば良いのでしょう？ アップデートではなく新規で openldap-servers パッケージを入れても、以下のように、ちゃんとデータが構築されているように見えます。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;find /etc/openldap/slapd.d/&lt;/strong&gt;&lt;br /&gt;/etc/openldap/slapd.d/&lt;br /&gt;/etc/openldap/slapd.d/cn=config.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config&lt;br /&gt;/etc/openldap/slapd.d/cn=config/olcDatabase={-1}frontend.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/olcDatabase={2}monitor.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/cn=schema&lt;br /&gt;/etc/openldap/slapd.d/cn=config/cn=schema/cn={11}collective.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/cn=schema/cn={10}ppolicy.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/cn=schema/cn={3}duaconf.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/cn=schema/cn={9}openldap.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/cn=schema/cn={0}corba.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/cn=schema/cn={7}misc.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/cn=schema/cn={2}cosine.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/cn=schema/cn={6}java.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/cn=schema/cn={4}dyngroup.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/cn=schema/cn={5}inetorgperson.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/cn=schema/cn={8}nis.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/cn=schema/cn={1}core.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/cn=schema.ldif&lt;br /&gt;/etc/openldap/slapd.d/cn=config/olcDatabase={1}bdb.ldif&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;しかしこのデータ、アクセスしようにも、rootdn のパスワードが分かりません。RHEL の文書を見ても書かれていないようです。以下のように、ファイルも誰の持ち物でもありません。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;rpm -qf /etc/openldap/slapd.d/*&lt;/strong&gt;&lt;br /&gt;file /etc/openldap/slapd.d/cn=config is not owned by any package&lt;br /&gt;file /etc/openldap/slapd.d/cn=config.ldif is not owned by any package&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ということは、インストールの際に動的に作成しているのでしょう。%postinstall のスクリプトを見てみます。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;rpm -q --scripts openldap-servers&lt;/strong&gt;&lt;br /&gt;(中略。↓ インストール後のスクリプトにおいて、)&lt;br /&gt;postinstall scriptlet (using /bin/sh):&lt;br /&gt;(中略。↓ slapd.d/ ディレクトリが存在しなければ、)&lt;br /&gt;# generate configuration in slapd.d&lt;br /&gt;if ! ls -d /etc/openldap/slapd.d/* &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;    (中略。↓ slapd.conf.obsolete なるファイルをコピーしてきて、)&lt;br /&gt;    [ $fresh_install -eq 0 ] &amp;amp;&amp;amp; \&lt;br /&gt;        cp /usr/share/openldap-servers/slapd.conf.obsolete \&lt;br /&gt;         /etc/openldap/slapd.conf&lt;br /&gt;    (中略。↓ config 用のエントリを加えて、)&lt;br /&gt;    cat &amp;gt;&amp;gt; /etc/openldap/slapd.conf &amp;lt;&amp;lt; EOF&lt;br /&gt;database config&lt;br /&gt;rootdn   "cn=admin,cn=config"&lt;br /&gt;#rootpw   secret&lt;br /&gt;EOF&lt;br /&gt;    (中略。slaptest コマンドで slapd.d/ 形式に変換します。)&lt;br /&gt;    slaptest -f /etc/openldap/slapd.conf \&lt;br /&gt;     -F /etc/openldap/slapd.d &amp;gt; /dev/null 2&amp;gt; /dev/null&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;上記のとおり、「#rootpw secret」となっています。パスワードは未設定です。これではアクセスできませんね。&lt;p&gt;さらに余談として、Ubuntu でも rootdn のパスワードは設定されていないのですが、かわりに、root ユーザで SASL EXTERNAL 認証でアクセスすると、何でもできるように考慮されています。&lt;a href=https://help.ubuntu.com/10.04/serverguide/C/index.html&gt;Ubuntu 10.04 サーバガイド&lt;/a&gt;の「&lt;a href="https://help.ubuntu.com/10.04/serverguide/C/openldap-server.html"&gt;OpenLDAP Server&lt;/a&gt;」の項などを見ると、SASL EXTERNAL の接続でサクサクと rootpw を設定しているのに、なぜ RHEL で同じことができないのかと思えば、そういうことでした。&lt;p&gt;debian/slapd.init.ldif:&lt;pre&gt;&lt;br /&gt;# Frontend settings&lt;br /&gt;dn: olcDatabase={-1}frontend,cn=config&lt;br /&gt;objectClass: olcDatabaseConfig&lt;br /&gt;objectClass: olcFrontendConfig&lt;br /&gt;olcDatabase: {-1}frontend&lt;br /&gt;(中略)&lt;br /&gt;olcAccess: &lt;strong&gt;{0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;debian/slapd.install:&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;debian/slapd.init.ldif&lt;/strong&gt; usr/share/slapd:&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;debian/slapd.postinst:&lt;pre&gt;&lt;br /&gt;create_new_configuration() {&lt;br /&gt;  (中略)&lt;br /&gt;  &lt;strong&gt;init_ldif="/usr/share/slapd/slapd.init.ldif"&lt;/strong&gt;&lt;br /&gt;  (中略)&lt;br /&gt;  capture_diagnostics &lt;strong&gt;slapadd -F "${SLAPD_CONF}" \&lt;br /&gt;   -b "cn=config" -l ${init_ldif}&lt;/strong&gt; || failed=1&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;もっとも Ubuntu でも、従来 (2.4.21-0ubuntu5 以前) はこの点が考慮されていなかったらしく、アップデートの際には既存のデータに対して、下記のように sed で内部表現をゴリゴリと書き換えているんですけれどね。&lt;p&gt;debian/slapd.postinst:&lt;pre&gt;&lt;br /&gt;postinst_upgrade_configuration() {&lt;br /&gt;  (中略)&lt;br /&gt;  # Grant manage access to connections made by the root user via&lt;br /&gt;  # SASL EXTERNAL&lt;br /&gt;  if previous_version_older 2.4.21-0ubuntu5 ; then&lt;br /&gt;    if [ -d "$SLAPD_CONF" ]; then&lt;br /&gt;      # Stick the new olcAccess at the begining of the&lt;br /&gt;      # olcAccess list (using an index of 0 *and*&lt;br /&gt;      # adding it as early as possible in the ldif file)&lt;br /&gt;      # to make sure that local root has access to the&lt;br /&gt;      # database no matter what other acls say.&lt;br /&gt;      &lt;strong&gt;sed -i 's/^\(olcDatabase: {-1}frontend\)/\0\nolcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break/' "${SLAPD_CONF}/cn=config/olcDatabase={-1}frontend.ldif"&lt;/strong&gt;&lt;br /&gt;      &lt;strong&gt;sed -i 's/^\(olcDatabase: {0}config\)/\0\nolcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break/' "${SLAPD_CONF}/cn=config/olcDatabase={0}config.ldif"&lt;/strong&gt;&lt;br /&gt;    fi&lt;br /&gt;  fi&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;これ同様に sed で書き換えるなり、以下のように slapd.d/cn=config/olcDatabase={0}config.ldif に "olcRootPW" のエントリをねじ込むなりしてサービスを上げ直せば、パスワードを設定することは可能です。これは、いよいよの「rootdn のパスワード忘れちゃった！」の際にも役に立つでしょう。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;service slapd stop&lt;/strong&gt;&lt;br /&gt;Stopping slapd:                                            [  OK  ]&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;slappasswd -s secret1&lt;/strong&gt;&lt;br /&gt;{SSHA}QVHYz50xBxpbbEa5qO+5cn7jDktBVXr4&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;echo 'olcRootPW:{SSHA}QVHYz50xBxpbbEa5qO+5cn7jDktBVXr4' &amp;gt;&amp;gt; /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{0\}config.ldif&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;service slapd start&lt;/strong&gt;x&lt;br /&gt;Starting slapd:                                            [  OK  ]&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapsearch -x -D "cn=admin,cn=config" -b "cn=config" -w secret1 "(olcRootDN=*)"&lt;/strong&gt;&lt;br /&gt;# extended LDIF&lt;br /&gt;#&lt;br /&gt;# LDAPv3&lt;br /&gt;# base &amp;lt;cn=config&amp;gt; with scope subtree&lt;br /&gt;# filter: (olcRootPW=*)&lt;br /&gt;# requesting: ALL&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;# {0}config, config&lt;br /&gt;dn: olcDatabase={0}config,cn=config&lt;br /&gt;objectClass: olcDatabaseConfig&lt;br /&gt;olcDatabase: {0}config&lt;br /&gt;olcAccess: {0}to *  by * none&lt;br /&gt;olcAddContentAcl: TRUE&lt;br /&gt;olcLastMod: TRUE&lt;br /&gt;olcMaxDerefDepth: 15&lt;br /&gt;olcReadOnly: FALSE&lt;br /&gt;olcRootDN: cn=admin,cn=config&lt;br /&gt;olcRootPW: {SSHA}QVHYz50xBxpbbEa5qO+5cn7jDktBVXr4&lt;br /&gt;olcSyncUseSubentry: FALSE&lt;br /&gt;olcMonitoring: FALSE&lt;br /&gt;&lt;br /&gt;# search result&lt;br /&gt;search: 2&lt;br /&gt;result: 0 Success&lt;br /&gt;&lt;br /&gt;# numResponses: 2&lt;br /&gt;# numEntries: 1&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ではなぜ RHEL6 では、アクセス手段のない slapd.d/ をわざわざ作っているのでしょうか？ 実は最新の OpenLDAP の slapd でも、slapd.d/ が無いところへユーザが slapd.conf を置けば、従来と同様に slapd は slapd.conf から設定を読み込んでしまうのです (詳しくは openldap-*/servers/slapd/bconfig.c の read_config() 関数を読んでください)。よって、新規の際の slapd.d/ は、従来の slapd.conf 流の設定をあっさりとは使わせないようにするために、教育的見地からダミーとして置かれているものと見て良いでしょう。&lt;p&gt;さて、以上のようにデフォルトの slapd.d/ が単なるダミーであることが分かりましたし、&lt;a href=http://www.openldap.org/doc/admin24/slapdconf2.html&gt;本家の文書&lt;/a&gt;も&lt;a href=http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/ch-Directory_Servers.html&gt;Red Hat の文書&lt;/a&gt;も共に、slapd.d/ 以下を手で編集するのはイカン、お行儀が悪いと言っておりますので、何ら躊躇することなく slapd.d/ 以下を削除して、自前の slapd.conf から slaptest コマンドで slapd.d/ を新規生成することにしましょう。&lt;p&gt;閑話休題、やっと本題に入ります。&lt;h2&gt;サーバの設定&lt;/h2&gt;&lt;p&gt;まずはいつものように、SELinux と iptables の無効化です。実運用のサーバでは、運用ポリシーに従って、それぞれ適切に設定してください。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;setenforce permissive&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;getenforce&lt;/strong&gt;&lt;br /&gt;Permissive&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;service iptables stop&lt;/strong&gt;&lt;br /&gt;iptables: ファイアウォールルールを消去中:                  [  OK  ]&lt;br /&gt;iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]&lt;br /&gt;iptables: モジュールを取り外し中:                          [  OK  ]&lt;br /&gt;[root@dirserv ~]#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;サーバと、操作用のクライアントをインストールします。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;yum install -y openldap-clients openldap-servers&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;"Obsolete" のファイルを元に、slapd.conf を作成します。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;slappasswd -s secret2&lt;/strong&gt;&lt;br /&gt;{SSHA}Z42Qdb/r/YAw0QRD8vI/SYcLgoxtzF4l&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;cp /usr/share/openldap-servers/slapd.conf.obsolete slapd.conf&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;vi slapd.conf&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;diff -uNr /usr/share/openldap-servers/slapd.conf.obsolete slapd.conf&lt;/strong&gt;&lt;br /&gt;--- /usr/share/openldap-servers/slapd.conf.obsolete&lt;br /&gt;+++ slapd.conf&lt;br /&gt;@@ -64,9 +64,9 @@&lt;br /&gt; # /etc/pki/tls/certs, running "make slapd.pem", and fixing permissions on&lt;br /&gt; # slapd.pem so that the ldap user or group can read it.  Your client software&lt;br /&gt; # may balk at self-signed certificates, however.&lt;br /&gt;-# TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt&lt;br /&gt;-# TLSCertificateFile /etc/pki/tls/certs/slapd.pem&lt;br /&gt;-# TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem&lt;br /&gt;&lt;strong&gt;+TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt&lt;br /&gt;+TLSCertificateFile /etc/pki/tls/certs/slapd.pem&lt;br /&gt;+TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt; # Sample security restrictions&lt;br /&gt; #      Require integrity protection (prevent hijacking)&lt;br /&gt;@@ -95,14 +95,30 @@&lt;br /&gt; #&lt;br /&gt; # rootdn can always read and write EVERYTHING!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;+access to attrs=userPassword&lt;br /&gt;+  by dn="cn=Manager,dc=example,dc=com" write&lt;br /&gt;+  by self write&lt;br /&gt;+  by anonymous auth&lt;br /&gt;+  by * none&lt;br /&gt;+&lt;br /&gt;+access to *&lt;br /&gt;+  by dn.exact="cn=Manager,dc=example,dc=com" write&lt;br /&gt;+  by self write&lt;br /&gt;+  by * read&lt;br /&gt;+&lt;/strong&gt;&lt;br /&gt; #######################################################################&lt;br /&gt; # ldbm and/or bdb database definitions&lt;br /&gt; #######################################################################&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;+database       config&lt;br /&gt;+rootdn         "cn=admin,cn=config"&lt;br /&gt;+rootpw         {SSHA}QVHYz50xBxpbbEa5qO+5cn7jDktBVXr4&lt;br /&gt;+&lt;br /&gt;&lt;/strong&gt; database       bdb&lt;br /&gt;-suffix         "dc=my-domain,dc=com"&lt;br /&gt;&lt;strong&gt;+suffix         "dc=example,dc=com"&lt;br /&gt;&lt;/strong&gt; checkpoint     1024 15&lt;br /&gt;-rootdn         "cn=Manager,dc=my-domain,dc=com"&lt;br /&gt;&lt;strong&gt;+rootdn         "cn=Manager,dc=example,dc=com"&lt;br /&gt;+rootpw         {SSHA}Z42Qdb/r/YAw0QRD8vI/SYcLgoxtzF4l&lt;br /&gt;&lt;/strong&gt; # Cleartext passwords, especially for the rootdn, should&lt;br /&gt; # be avoided.  See slappasswd(8) and slapd.conf(5) for details.&lt;br /&gt; # Use of strong authentication encouraged.&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;(動いているようであれば) サービスを停止し、現在のデータを削除してから、新しいデータを作り、再度起動します。今回はテストなので、インデックスも BDB の設定も、そのまま放置します。実運用では、パフォーマンスやバックアップにも気をつかってあげてください。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;service slapd stop&lt;/strong&gt;&lt;br /&gt;slapd を停止中:                                            [失敗]&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;rm -fr /etc/openldap/slapd.d/* /var/lib/ldap/*&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;slaptest -f slapd.conf -F /etc/openldap/slapd.d/&lt;/strong&gt;&lt;br /&gt;bdb_db_open: warning - no DB_CONFIG file found in directory /var/lib/ldap: (2).&lt;br /&gt;Expect poor performance for suffix "dc=example,dc=com".&lt;br /&gt;bdb_db_open: database "dc=example,dc=com": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2).&lt;br /&gt;backend_startup_one (type=bdb, suffix="dc=example,dc=com"): bi_db_open failed! (2)&lt;br /&gt;slap_startup failed (test would succeed using the -u switch)&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;chown -R ldap.ldap /etc/openldap/slapd.d/* /var/lib/ldap/*&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;service slapd start&lt;/strong&gt;&lt;br /&gt;slapd を起動中:                                            [  OK  ]&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;以下は任意ですが、サーバの挙動が分かりやすいように、ログの出力も設定しておきます。slapd は local4 のファシリティで syslog 出力をするのですが、せっかくの RHEL6 系の rsyslog ですので、アプリケーション名 ("slapd") でログを振り分けるようにしてみます。実運用では、ログが溢れないように、ローテートの設定もしておいてください。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;cp /etc/rsyslog.conf /etc/rsyslog.conf.orig&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;vi /etc/rsyslog.conf&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;diff -uNr /etc/rsyslog.conf.orig /etc/rsyslog.conf&lt;/strong&gt;&lt;br /&gt;--- /etc/rsyslog.conf.orig&lt;br /&gt;+++ /etc/rsyslog.conf&lt;br /&gt;@@ -76,3 +76,6 @@&lt;br /&gt; # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional&lt;br /&gt; #*.* @@remote-host:514&lt;br /&gt; # ### end of the forwarding rule ###&lt;br /&gt;&lt;strong&gt;+&lt;br /&gt;+!slapd&lt;br /&gt;+*.* /var/log/slapd.log&lt;br /&gt;&lt;/strong&gt;[root@dirserv ~]# &lt;strong&gt;service rsyslog reload&lt;/strong&gt;&lt;br /&gt;Reloading system logger...                                 [  OK  ]&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;アクセスできるかどうか、試してみます。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapsearch -x -D "cn=admin,cn=config" -b "cn=config" -w secret1 "(olcRootDN=*)"&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapsearch -x -D "cn=Manager,dc=example,dc=com" -b "dc=example,dc=com" -w secret2&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;良いようであれば、認証用のデータを入れて行きます。根元から作って行きます。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret2 &amp;lt;&amp;lt;EOF&lt;br /&gt;dn: dc=example,dc=com&lt;br /&gt;dc: example&lt;br /&gt;objectClass: dcObject&lt;br /&gt;objectClass: organization&lt;br /&gt;o: Example Corp.&lt;br /&gt;&lt;br /&gt;dn: cn=Manager,dc=example,dc=com&lt;br /&gt;cn: Manager&lt;br /&gt;objectClass: organizationalRole&lt;br /&gt;&lt;br /&gt;dn: o=Users,dc=example,dc=com&lt;br /&gt;o: Linux Users&lt;br /&gt;objectClass: organization&lt;br /&gt;&lt;br /&gt;dn: ou=People,o=Users,dc=example,dc=com&lt;br /&gt;ou: People&lt;br /&gt;objectClass: organizationalUnit&lt;br /&gt;&lt;br /&gt;dn: ou=Group,o=Users,dc=example,dc=com&lt;br /&gt;ou: Group&lt;br /&gt;objectClass: organizationalUnit&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;adding new entry "dc=example,dc=com"&lt;br /&gt;&lt;br /&gt;adding new entry "cn=Manager,dc=example,dc=com"&lt;br /&gt;&lt;br /&gt;adding new entry "o=Users,dc=example,dc=com"&lt;br /&gt;&lt;br /&gt;adding new entry "ou=People,o=Users,dc=example,dc=com"&lt;br /&gt;&lt;br /&gt;adding new entry "ou=Group,o=Users,dc=example,dc=com"&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ちょっと間違うと、途中まで作ったところでエラーになり、そこまでの分が半端に残ります。failure atomic ではありません…、トランザクションがあればいいのにね。今回はテストですので、そんな時は、以下のように根元からガバッと再帰で消してしまってください。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapdelete -v -x -D "cn=Manager,dc=example,dc=com" -w secret2 -r "dc=example,dc=com"&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ユーザ (foo と bar) を追加します。OpenLDAP のクライアント側 (SSSD, pam_ldap, nss-pam-ldapd 等) は、文書にはあまりキチンと書かれていないのですが (せいぜい /usr/share/doc/nss-pam-ldapd-0.7.5/README くらいか)、デフォルトで、クラス "posixAccount" や "posixShadow" を持つノードを、ユーザ情報として取りにきます。ですので、実はツリー構造は割と恣意的に決めてしまっても問題ありません。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;slappasswd -s secret3&lt;/strong&gt;&lt;br /&gt;{SSHA}LAs1y8ozcRtUNMVZh3Sj+t8Vn/48HJV3&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret2 &amp;lt;&amp;lt;EOF&lt;br /&gt;dn: uid=foo,ou=People,o=Users,dc=example,dc=com&lt;br /&gt;objectClass: top&lt;br /&gt;objectClass: posixAccount&lt;br /&gt;objectClass: account&lt;br /&gt;gecos: ldap system users&lt;br /&gt;cn: foo&lt;br /&gt;uid: foo&lt;br /&gt;uidNumber: 1000&lt;br /&gt;gidNumber: 1000&lt;br /&gt;homeDirectory: /home/foo&lt;br /&gt;loginShell: /bin/bash&lt;br /&gt;userPassword: {SSHA}LAs1y8ozcRtUNMVZh3Sj+t8Vn/48HJV3&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;adding new entry "uid=foo,ou=People,o=Users,dc=example,dc=com"&lt;br /&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;slappasswd -s secret4&lt;/strong&gt;&lt;br /&gt;{SSHA}8XOqcgEYQjI9vFreV8j6dc6B6Fjovfts&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret2 &amp;lt;&amp;lt;EOF&lt;br /&gt;dn: uid=bar,ou=People,o=Users,dc=example,dc=com&lt;br /&gt;objectClass: top&lt;br /&gt;objectClass: posixAccount&lt;br /&gt;objectClass: account&lt;br /&gt;gecos: ldap system users&lt;br /&gt;cn: bar&lt;br /&gt;uid: bar&lt;br /&gt;uidNumber: 1001&lt;br /&gt;gidNumber: 1001&lt;br /&gt;homeDirectory: /home/bar&lt;br /&gt;loginShell: /bin/bash&lt;br /&gt;userPassword: {SSHA}8XOqcgEYQjI9vFreV8j6dc6B6Fjovfts&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;adding new entry "uid=bar,ou=People,o=Users,dc=example,dc=com"&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;グループ (foo と bar) を追加します。こちらも同様に、クライアントはデフォルトで、クラス "posixGroup" を持つノードを探索に来ます。今回は、昨今の Linux ディストリビューションの構成と同様に、UPG (User Private Group) 式で、ユーザごとに個別に同名のグループを割り当てますが、LDAP 的には、共通のグループを割り当てる方が一般的かも知れません。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret2 &amp;lt;&amp;lt;EOF&lt;br /&gt;dn: cn=foo,ou=Group,o=Users,dc=example,dc=com&lt;br /&gt;cn: foo&lt;br /&gt;objectClass: posixGroup&lt;br /&gt;gidNumber: 1000&lt;br /&gt;userPassword: {CRYPT}x&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;adding new entry "cn=foo,ou=Group,o=Users,dc=example,dc=com"&lt;br /&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret2 &amp;lt;&amp;lt;EOF&lt;br /&gt;dn: cn=bar,ou=Group,o=Users,dc=example,dc=com&lt;br /&gt;cn: bar&lt;br /&gt;objectClass: posixGroup&lt;br /&gt;gidNumber: 1001&lt;br /&gt;userPassword: {CRYPT}x&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;adding new entry "cn=bar,ou=Group,o=Users,dc=example,dc=com"&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;一般ユーザから、他人のパスワードが見えないことを確認しておきます。&lt;pre&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapsearch -x -D "uid=foo,ou=People,o=Users,dc=example,dc=com" -b "dc=example,dc=com" -w secret3 "(objectClass=posixAccount)"&lt;/strong&gt;&lt;br /&gt;[root@dirserv ~]# &lt;strong&gt;ldapsearch -x -D "uid=bar,ou=People,o=Users,dc=example,dc=com" -b "dc=example,dc=com" -w secret4 "(objectClass=posixAccount)"&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;h2&gt;認証依頼元の Linux ホストの設定&lt;/h2&gt;&lt;p&gt;こちらも同様に、SELinux と iptables の無効化です。実運用のサー (以下テンプレ略)。&lt;pre&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;setenforce permissive&lt;/strong&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;getenforce&lt;/strong&gt;&lt;br /&gt;Permissive&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;service iptables stop&lt;/strong&gt;&lt;br /&gt;iptables: ファイアウォールルールを消去中:                  [  OK  ]&lt;br /&gt;iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]&lt;br /&gt;iptables: モジュールを取り外し中:                          [  OK  ]&lt;br /&gt;[root@linhost ~]#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;RHEL5 系の &lt;a href=http://www.padl.com/OSS/nss_ldap.html&gt;nss_ldap&lt;/a&gt; から、RHEL6 系では PAM は pam_ldap に、NSS は nss_ldap からフォークした &lt;a href=http://arthurdejong.org/nss-pam-ldapd/&gt;nss-pam-ldapd&lt;/a&gt; へと分離しており、また、それらを束ねる &lt;a href=http://docs.redhat.com/docs/ja-JP/Red_Hat_Enterprise_Linux/6/html/Migration_Planning_Guide/ch07s02.html&gt;SSSD 抽象化レイヤ&lt;/a&gt; (&lt;a href=http://fedoraproject.org/wiki/Features/SSSD&gt;詳細&lt;/a&gt;) が入っていたりと、設定ファイルが多岐に渡り、もはや手作業では手に負えなくなっているので、authconfig コマンドを使用します。&lt;p&gt;同時に、TLS (389 番ポートでの "STARTTLS" による接続) も設定します。authconfig では、認証局ナシでの TLS 設定ができないので、設定をした後で、ちょっとだけ手を入れる必要があります。&lt;p&gt;SSSD を用いる手順:&lt;pre&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;authconfig --disableforcelegacy --enablemkhomedir --enableldap --enableldapauth --enableldaptls --ldapserver=dirserv.vnat --ldapbasedn="dc=example,dc=com" --update&lt;/strong&gt;&lt;br /&gt;sssd を起動中:                                             [  OK  ]&lt;br /&gt;oddjobd を起動中:                                          [  OK  ]&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/sssd/sssd.conf&lt;br /&gt;ldap_tls_reqcert = never&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/nslcd.conf&lt;br /&gt;tls_cacertfile /etc/pki/tls/certs/ca-bundle.crt&lt;br /&gt;tls_checkpeer no&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;service sssd restart&lt;/strong&gt;&lt;br /&gt;sssd を停止中:                                             [  OK  ]&lt;br /&gt;sssd を起動中:                                             [  OK  ]&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;旧来の (legacy な) 手順:&lt;pre&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;authconfig --enableforcelegacy --enablemkhomedir --enableldap --enableldapauth --enableldaptls --ldapserver=dirserv.vnat --ldapbasedn="dc=example,dc=com" --update&lt;/strong&gt;&lt;br /&gt;nslcd を起動中:                                            [  OK  ]&lt;br /&gt;oddjobd を起動中:                                          [  OK  ]&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/nslcd.conf&lt;br /&gt;tls_cacertfile /etc/pki/tls/certs/ca-bundle.crt&lt;br /&gt;tls_reqcert no&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;service nslcd restart&lt;/strong&gt;&lt;br /&gt;nslcd を停止中:                                            [  OK  ]&lt;br /&gt;nslcd を起動中:                                            [  OK  ]&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/pam_ldap.conf&lt;br /&gt;tls_cacertfile /etc/pki/tls/certs/ca-bundle.crt&lt;br /&gt;tls_checkpeer no&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt; では、動作を確認してみます。&lt;pre&gt;&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;id foo&lt;/strong&gt;&lt;br /&gt;uid=1000(foo) gid=1000(foo) 所属グループ=1000(foo)&lt;br /&gt;[root@linhost ~]# &lt;strong&gt;su - foo&lt;/strong&gt;&lt;br /&gt;Creating home directory for foo.&lt;br /&gt;[foo@linhost ~]$ &lt;strong&gt;su - bar&lt;/strong&gt;&lt;br /&gt;パスワード: &lt;strong&gt;secret4&lt;/strong&gt;&lt;br /&gt;Creating home directory for bar.&lt;br /&gt;[bar@linhost ~]$ &lt;strong&gt;id&lt;/strong&gt;&lt;br /&gt;uid=1001(bar) gid=1001(bar) 所属グループ=1001(bar) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023&lt;br /&gt;[bar@linhost ~]$ &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;良いようですね。では。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-1178287384928431167?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/1178287384928431167/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/12/rhel6-openldap-pam.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/1178287384928431167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/1178287384928431167'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/12/rhel6-openldap-pam.html' title='RHEL6 系での OpenLDAP サーバと PAM 認証'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-1448729192952761251</id><published>2011-12-06T11:47:00.000+09:00</published><updated>2011-12-06T15:24:36.111+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='RPM'/><title type='text'>debuginfo RPM パッケージで、ソースレベル・デバッグをする</title><content type='html'>&lt;p&gt;お元気ですか？ あいにく風邪気味の、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;最近の RPM ベースの Linux ディストリビューションであれば、バイナリ RPM と共に、debuginfo パッケージが提供されているのが普通だと思います。この debuginfo パッケージをインストールすることで、従来であればバイナリパッケージ作成の際に strip で落とされてしまっていたデバッグ情報やソース情報を別パッケージとして利用することができるようになるため、本体パッケージを肥大化させることなく、本体パッケージのバイナリそのものを用いて、ソースレベルでのデバッグを行うことができます (GDB の分離デバッグ情報についての詳細は「&lt;a href="http://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html"&gt;Separate Debug Files - Debugging with GDB&lt;/a&gt;」あたりを、RPM のビルド中の処理については /usr/lib/rpm/find-debuginfo.sh の debugedit のあたりを参照してください)。&lt;p&gt;しかし現在の提供形態だと、いくつか問題があります。&lt;ul&gt;&lt;li&gt;バイナリは "-g -O2" でコンパイルされているので、最適化がかかっており、デバッグがしづらい&lt;li&gt;自前でパラメータを変えてビルドしたら、既存の debuginfo は使用できない&lt;li&gt;最新のバイナリのアップデートは公開されているのに、対応する debuginfo が出ていないことがある (特に CentOS)&lt;li&gt;debuginfo パッケージは大きいので、SRPM ファイルともども、ミラーから削除されがちで入手できなかったりする (特に CentOS)&lt;/ul&gt;&lt;p&gt;そこで、自前でパッケージをビルドして、debuginfo を活用する方法をご紹介します。以下は、おそらく RHEL4～ の系列では動きますが、それ以外はよく知りません。合わせて以前の記事も参考にしてください → 「&lt;a href="http://sios-oss.blogspot.com/2011/11/centosscientific-linux.html"&gt;SIOS OSS Tech: ソースの入手と再ビルド ～ CentOS / Scientific Linux 編&lt;/a&gt;」。&lt;p&gt;まずは、redhat-rpm-config パッケージをインストールします。debuginfo パッケージ生成関連のマクロはこのパッケージに含まれているため、これをインストールしておかないと、RPM パッケージのビルドはできますが、debuginfo パッケージが生成されません。&lt;pre&gt;&lt;br /&gt;[root@centos4 ~]# &lt;strong&gt;yum install redhat-rpm-config&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;次にビルドです。"rpmbuild --rebuild &amp;lt;SRPM ファイル&amp;gt;" なり "rpmbuild -ba &amp;lt;SPEC ファイル&amp;gt;" なり (渋いところでは、"rpmbuild -ta &amp;lt;tar.gz ファイル&amp;gt;" なり) でビルドをするところですが、ここで、デバッグ用のオプションを指定することができます。デフォルトは "-g -O2" になっていると思いますが、特にこの "-O2" のおかげでかなり最適化がされてしまい、ソースレベルでのデバッグがしづらくなります。これを "-O0" にして最適化を切ると同時に、"-pg", "-g3" で、付加的なデバッグ情報も付けておきます。&lt;p&gt;注意: 最適化オプションやコンパイル環境の変更によって、調査するはずだった不具合が解消してしまうことも、よくあります。困ります&lt;p&gt;以下は、CentOS 4 での例です。ソースの入手からビルド～ソースレベル・デバッグまでを見てみます。&lt;pre&gt;&lt;br /&gt;[root@centos4 ~]# &lt;strong&gt;wget http://ftp.redhat.com/pub/redhat/linux/enterprise/4/en/os/i386/SRPMS/bash-3.0-19.2.src.rpm&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;[root@centos4 ~]# &lt;strong&gt;rpmbuild --rebuild \&lt;br /&gt; --define="optflags -pg -g3 -O0" bash-3.0-19.2.src.rpm&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;Wrote: /usr/src/redhat/RPMS/i386/bash-3.0-19.2.i386.rpm&lt;br /&gt;Wrote: /usr/src/redhat/RPMS/i386/bash-debuginfo-3.0-19.2.i386.rpm&lt;br /&gt;(中略)&lt;br /&gt;[root@centos4 ~]# &lt;strong&gt;rpm -Uvh --force \&lt;br /&gt; /usr/src/redhat/RPMS/i386/bash-3.0-19.2.i386.rpm \&lt;br /&gt; /usr/src/redhat/RPMS/i386/bash-debuginfo-3.0-19.2.i386.rpm&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;[root@centos4 ~]# &lt;strong&gt;bash -c "while true; do sleep 1; done" &amp;amp;&lt;/strong&gt;&lt;br /&gt;[1] 32108&lt;br /&gt;[root@centos4 ~]# &lt;strong&gt;gdb -p 32108&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;Attaching to process 32108&lt;br /&gt;Reading symbols from /bin/bash...Reading symbols from&lt;br /&gt; /usr/lib/debug/bin/bash.debug...done.&lt;br /&gt;Using host libthread_db library "/lib/tls/libthread_db.so.1".&lt;br /&gt;done.&lt;br /&gt;Reading symbols from /lib/libtermcap.so.2...done.&lt;br /&gt;Loaded symbols for /lib/libtermcap.so.2&lt;br /&gt;Reading symbols from /lib/libdl.so.2...done.&lt;br /&gt;Loaded symbols for /lib/libdl.so.2&lt;br /&gt;Reading symbols from /lib/tls/libc.so.6...done.&lt;br /&gt;Loaded symbols for /lib/tls/libc.so.6&lt;br /&gt;Reading symbols from /lib/ld-linux.so.2...done.&lt;br /&gt;Loaded symbols for /lib/ld-linux.so.2&lt;br /&gt;0x0027f7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2&lt;br /&gt;(gdb) &lt;strong&gt;bt&lt;/strong&gt;&lt;br /&gt;#0  0x0027f7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2&lt;br /&gt;#1  0x00324533 in __waitpid_nocancel () from /lib/tls/libc.so.6&lt;br /&gt;#2  0x0807d03f in waitchld (wpid=32134, block=1) at jobs.c:2497&lt;br /&gt;#3  0x0807be1d in wait_for (pid=32134) at jobs.c:1904&lt;br /&gt;#4  0x0806b901 in execute_command_internal (command=0x9c73280, asynchronous=0, pipe_in=-1, pipe_out=-1, fds_to_close=0x9c73378) at execute_cmd.c:704&lt;br /&gt;#5  0x0806b279 in execute_command (command=0x9c73280) at execute_cmd.c:351&lt;br /&gt;#6  0x0806e2db in execute_while_or_until (while_command=0x9c732d0, type=0) at execute_cmd.c:2327&lt;br /&gt;#7  0x0806e1ef in execute_while_command (while_command=0x9c732d0) at execute_cmd.c:2273&lt;br /&gt;#8  0x0806ba79 in execute_command_internal (command=0x9c732e0, asynchronous=0, pipe_in=-1, pipe_out=-1, fds_to_close=0x9c732f8) at execute_cmd.c:764&lt;br /&gt;#9  0x080a7187 in parse_and_execute (string=0x9c72d00 "while true; do sleep 1; done", from_file=0x80d9392 "-c", flags=4) at evalstring.c:267&lt;br /&gt;#10 0x0805cb6f in run_one_command (command=0xbff9bc18 "while true; do sleep 1; done") at shell.c:1269&lt;br /&gt;#11 0x0805bd7a in main (argc=3, argv=0xbff378e4, env=0xbff378f4) at shell.c:653&lt;br /&gt;(gdb) &lt;strong&gt;frame 11&lt;/strong&gt;&lt;br /&gt;#11 0x0805bd7a in main (argc=3, argv=0xbff378e4, env=0xbff378f4) at shell.c:653&lt;br /&gt;653           run_one_command (command_execution_string);&lt;br /&gt;(gdb) &lt;strong&gt;l&lt;/strong&gt;&lt;br /&gt;648           if (debugging_mode)&lt;br /&gt;649             start_debugger ();&lt;br /&gt;650&lt;br /&gt;651     #if defined (ONESHOT)&lt;br /&gt;652           executing = 1;&lt;br /&gt;653           run_one_command (command_execution_string);&lt;br /&gt;654           exit_shell (last_command_exit_value);&lt;br /&gt;655     #else /* ONESHOT */&lt;br /&gt;656           with_input_from_string (command_execution_string, "-c");&lt;br /&gt;657           goto read_and_execute;&lt;br /&gt;(gdb) &lt;strong&gt;p command_execution_string&lt;/strong&gt;&lt;br /&gt;$1 = 0xbff9bc18 "while true; do sleep 1; done"&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ソースもシンボルも見えています。良いようですね。&lt;p&gt;では。&lt;p&gt;話は逸れますが、上記で、上書きでインストールをする際に "rpm" コマンドに "-U" と "--force" を組み合わせています。"--force" は依存を壊しませんので、それほど問題ではありません。一方、"--nodeps" はいけません。RPM の本質は依存関係の解決だと思いますので、それを破壊する "--nodeps" は悪です。"--nodeps" を付けなければならない状況に陥ったら、開発者 or 管理者として負けだと思ってください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-1448729192952761251?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/1448729192952761251/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/11/debuginfo-rpm.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/1448729192952761251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/1448729192952761251'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/11/debuginfo-rpm.html' title='debuginfo RPM パッケージで、ソースレベル・デバッグをする'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-8106587763348543504</id><published>2011-12-05T16:37:00.000+09:00</published><updated>2011-12-05T16:37:00.469+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Puppet'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>RPM ベースで Puppet を動かしてみる</title><content type='html'>&lt;p&gt;どうも、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;&lt;a href=http://puppetlabs.com/&gt;Puppet&lt;/a&gt; は、構内ホストをクロスプラットフォームに集中管理するためのソフトウェアです。ユーザやパッケージの存否、設定等々を、複数のノードに一括して適用することができるようになります。&lt;p&gt;Scientific Linux 6.1 において、ごく簡単な動作を確認するまでの手順を紹介します。ここでは puppet master 側のホストの FQDN を "master.vnat", puppet 側を "node1.vnat" とします。&lt;p&gt;まず、固有のパッケージをインストールするところまでは、master, node1 とも共通です。&lt;p&gt;SELinux は permissive, もしくは disabled にします。現行のパッケージ (puppet-2.6.12-1.el6) では、enforcing だとエラーになります (&lt;a href=https://bugzilla.redhat.com/show_bug.cgi?id=726061&gt;Bug 726061 – puppetmaster fails on startup due to missing SSL/CA directory&lt;/a&gt;)。&lt;pre&gt;&lt;br /&gt;[root@master ~]# &lt;strong&gt;setenforce permissive&lt;/strong&gt;&lt;br /&gt;[root@master ~]# &lt;strong&gt;getenforce&lt;/strong&gt;&lt;br /&gt;Permissive&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;デフォルトのポート番号が分からないので、iptables も、ひとまず切っておきます (8139 かな？ 何その Realtek の NIC チップみたいな番号は)。&lt;pre&gt;&lt;br /&gt;[root@master ~]# &lt;strong&gt;service iptables stop&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;パッケージは EPEL から入れますので、レポジトリ設定を入れておきます。ちなみに &lt;a href=https://fedoraproject.org/wiki/EPEL&gt;EPEL (Extra Packages for Enterprise Linux)&lt;/a&gt; とは、Fedora を元にして RHEL が作られる際に取り込まれなかったパッケージ群を、RHEL やその互換ディストリビューションのために有志が提供してくださっているプロジェクトです。&lt;pre&gt;&lt;br /&gt;[root@master ~]# &lt;strong&gt;rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ここから、puppet master と puppet とで、インストールするパッケージが異なってきます。まず、puppet master です。"puppet-server" パッケージをインストールし、puppet master サービスを起動します。&lt;pre&gt;&lt;br /&gt;[root@master ~]# &lt;strong&gt;yum install -y puppet-server&lt;/strong&gt;&lt;br /&gt;[root@master ~]# &lt;strong&gt;service puppetmaster start&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;次に puppet の側です。"puppet" パッケージを入れます。&lt;pre&gt;&lt;br /&gt;[root@node1 ~]# &lt;strong&gt;yum install -y puppet&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;puppet が puppet master を指すように設定します。この設定ファイルは init のスクリプトに渡すものですので、/etc/sysconfig/ 以下に入っています。&lt;pre&gt;&lt;br /&gt;[root@node1 ~]# &lt;strong&gt;cp /etc/sysconfig/puppet /etc/sysconfig/puppet.orig&lt;/strong&gt;&lt;br /&gt;[root@node1 ~]# &lt;strong&gt;vi /etc/sysconfig/puppet&lt;/strong&gt;&lt;br /&gt;[root@node1 ~]# &lt;strong&gt;diff -uNr \&lt;br /&gt; /etc/sysconfig/puppet.orig /etc/sysconfig/puppet&lt;/strong&gt;&lt;br /&gt;--- /etc/sysconfig/puppet.orig&lt;br /&gt;+++ /etc/sysconfig/puppet&lt;br /&gt;@@ -1,5 +1,5 @@&lt;br /&gt; # The puppetmaster server&lt;br /&gt;-#PUPPET_SERVER=puppet&lt;br /&gt;+&lt;strong&gt;PUPPET_SERVER=master.vnat&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt; # If you wish to specify the port to connect to do so here&lt;br /&gt; #PUPPET_PORT=8140&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;puppet から puppet master への設定変更の確認インターバルが、デフォルトでは 30 分と長いです (実運用としてはむしろ短いのですが)。テスト用に、puppet master への変更が即座に反映されるよう、5 秒を指定します。こちらの設定ファイルは、puppet のプログラム自身が読む方ですので、/etc/puppet/ 以下に入ります。設定ファイルの "main" セクション内に、"runinterval" パラメータを追加します。&lt;pre&gt;&lt;br /&gt;[root@node1 ~]# &lt;strong&gt;cp \&lt;br /&gt; /etc/puppet/puppet.conf /etc/puppet/puppet.conf.orig&lt;/strong&gt;&lt;br /&gt;[root@node1 ~]# &lt;strong&gt;vi /etc/puppet/puppet.conf&lt;/strong&gt;&lt;br /&gt;[root@node1 ~]# &lt;strong&gt;diff -uNr \&lt;br /&gt; /etc/puppet/puppet.conf.orig /etc/puppet/puppet.conf&lt;/strong&gt;&lt;br /&gt;--- /etc/puppet/puppet.conf.orig&lt;br /&gt;+++ /etc/puppet/puppet.conf&lt;br /&gt;@@ -11,6 +11,8 @@&lt;br /&gt;     # The default value is '$confdir/ssl'.&lt;br /&gt;     ssldir = $vardir/ssl&lt;br /&gt;&lt;br /&gt;+    &lt;strong&gt;runinterval=5&lt;/strong&gt;&lt;br /&gt;+&lt;br /&gt; [agent]&lt;br /&gt;     # The file in which puppetd stores a list of the classes&lt;br /&gt;     # associated with the retrieved configuratiion.  Can be loaded in&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;puppet サービスを起動します。&lt;pre&gt;&lt;br /&gt;[root@node1 ~]# &lt;strong&gt;service puppet start&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;puppet master 側で、puppet からの接続を受け入れてあげます。&lt;pre&gt;&lt;br /&gt;[root@master ~]# &lt;strong&gt;puppetca --list&lt;/strong&gt;&lt;br /&gt;  node1.vnat (13:C6:9C:8A:4A:5B:59:2B:EA:61:E0:87:E6:43:96:85)&lt;br /&gt;[root@master ~]# &lt;strong&gt;puppetca --sign node1.vnat&lt;/strong&gt;&lt;br /&gt;notice: Signed certificate request for node1.vnat&lt;br /&gt;notice: Removing file Puppet::SSL::CertificateRequest node1.vnat&lt;br /&gt; at '/var/lib/puppet/ssl/ca/requests/node1.vnat.pem'&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;動作を試してみます。デフォルトの puppet manifest ファイルに、ユーザの存在を保証させるリソースを記述します。&lt;pre&gt;&lt;br /&gt;[root@master ~]# &lt;strong&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/puppet/manifests/site.pp&lt;br /&gt;user { "hoge":&lt;br /&gt;  ensure     =&amp;gt; present,&lt;br /&gt;  uid        =&amp;gt; '567',&lt;br /&gt;  gid        =&amp;gt; 'wheel',&lt;br /&gt;  shell      =&amp;gt; '/bin/sh',&lt;br /&gt;  home       =&amp;gt; '/var/hoge/',&lt;br /&gt;  managehome =&amp;gt; true,&lt;br /&gt;}&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;[root@master ~]# &lt;strong&gt;service puppetmaster reload&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ユーザ、追加されたかな？&lt;pre&gt;&lt;br /&gt;[root@node1 ~]# &lt;strong&gt;id hoge&lt;/strong&gt;&lt;br /&gt;uid=567(hoge) gid=10(wheel) 所属グループ=10(wheel)&lt;br /&gt;[root@node1 ~]# &lt;strong&gt;grep hoge /etc/passwd&lt;/strong&gt;&lt;br /&gt;hoge:x:567:10::/var/hoge/:/bin/sh&lt;br /&gt;[root@node1 ~]# &lt;strong&gt;ls -ld /var/hoge/&lt;/strong&gt;&lt;br /&gt;drwx------. 4 hoge wheel 4096 11月 XX 16:23 2011 /var/hoge/&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;良いようですね。ではまた。&lt;p&gt;参考リンク:&lt;ul&gt;&lt;li&gt;&lt;a href="http://gihyo.jp/admin/serial/01/puppet/"&gt;連載：オープンソースなシステム自動管理ツール Puppet｜gihyo.jp … 技術評論社&lt;/a&gt;&lt;li&gt;&lt;a href="http://www.natzworks.com/digital/2010/435.html"&gt;Puppet: マニフェストを puppetrun で配信&lt;/a&gt;&lt;li&gt;&lt;a href="http://docs.puppetlabs.com/guides/language_guide.html"&gt;Documentation | Puppet Labs - Language Guide&lt;/a&gt;&lt;li&gt;&lt;a href="http://blog.madoro.org/mn/80"&gt;さようならPuppet、こんにちはChef - Masatomo Nakano Blog&lt;/a&gt;&lt;/ul&gt;&lt;p&gt;# Puppet のヘンテコ設定言語を思うと、Ruby DSL を用いる Chef の方が筋が良さそうだなぁ…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-8106587763348543504?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/8106587763348543504/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/11/puppet.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/8106587763348543504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/8106587763348543504'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/11/puppet.html' title='RPM ベースで Puppet を動かしてみる'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-8370214609858493612</id><published>2011-12-02T10:28:00.000+09:00</published><updated>2011-12-02T10:28:00.625+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Ruby の「条件式としての範囲式」の正体を探る</title><content type='html'>&lt;p&gt;ご苦労様です、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;Ruby 言語における「条件式としての範囲式」というやつが、どうも腑に落ちません （「&lt;a href=http://doc.ruby-lang.org/ja/1.9.2/doc/spec=2foperator.html#range_cond&gt;Ruby 1.9.2 リファレンスマニュアル 演算子式 条件式としての範囲式&lt;/a&gt;」）。&lt;pre&gt;&lt;br /&gt;&amp;gt; &lt;strong&gt;["foo", "bar", "BEGIN", "hoge", "fuga", "END", "buzz"].select { |w|&lt;br /&gt;    (w === "BEGIN" .. w === "END")? true: false&lt;br /&gt;  }&lt;/strong&gt;&lt;br /&gt;=&gt; ["BEGIN", "hoge", "fuga", "END"]&lt;br /&gt;&amp;gt; &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;これはオブジェクトのリテラルではなく、言語仕様としての、何かしらの特殊な「何か」ですよね？ その証拠に上記でも、3 項演算子を削って、Ruby が括弧内を条件式と判別できないようにすると、オブジェクトにはなり得ません。&lt;pre&gt;&lt;br /&gt;&amp;gt; &lt;strong&gt;["foo", "bar", "BEGIN", "hoge", "fuga", "END", "buzz"].select { |w|&lt;br /&gt;    (w === "BEGIN" .. w === "END")&lt;br /&gt;  }&lt;/strong&gt;&lt;br /&gt;ArgumentError: bad value for range&lt;br /&gt;&amp;gt; &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ということは、ここでループ中にその状態を抱えているのは Ruby のスタック上の「何か」ですよね？ なまじ何でもオブジェクトな Ruby なだけに、これも一見 Range のオブジェクトに見えるんですが…。せめて、実装上の正体だけでも見ておこうと思います。&lt;p&gt;# Ruby でも、遅延評価とか名前渡しとかできるとカッコ良かったんですけどね&lt;p&gt;Yacc の入力ファイルがあると思います。&lt;pre&gt;&lt;br /&gt;$ find . -name "*.y"&lt;br /&gt;./ruby-1.8.7-p299/parse.y&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ありました。該当するトークンを探します。&lt;pre&gt;&lt;br /&gt;static int&lt;br /&gt;yylex()&lt;br /&gt;{&lt;br /&gt;  ...&lt;br /&gt;  retry:&lt;br /&gt;    switch (c = nextc()) {&lt;br /&gt;      ...&lt;br /&gt;      &lt;strong&gt;case '.':&lt;/strong&gt;&lt;br /&gt;        lex_state = EXPR_BEG;&lt;br /&gt;        &lt;strong&gt;if ((c = nextc()) == '.') {&lt;/strong&gt;&lt;br /&gt;            &lt;strong&gt;if ((c = nextc()) == '.') {&lt;/strong&gt;&lt;br /&gt;                &lt;strong&gt;return tDOT3;&lt;/strong&gt;&lt;br /&gt;            }&lt;br /&gt;            pushback(c);&lt;br /&gt;            &lt;strong&gt;return tDOT2;&lt;/strong&gt;&lt;br /&gt;        }&lt;br /&gt;        ...&lt;br /&gt;&lt;br /&gt;static struct {&lt;br /&gt;    ID token;&lt;br /&gt;    const char *name;&lt;br /&gt;} op_tbl[] = {&lt;br /&gt;    {&lt;strong&gt;tDOT2&lt;/strong&gt;,     ".."},&lt;br /&gt;    {&lt;strong&gt;tDOT3&lt;/strong&gt;,     "..."},&lt;br /&gt;    {'+',       "+"},&lt;br /&gt;    ...&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;"tDOT2" と "tDOT3" が "..", "..." のトークンのようです。どうパースしていますかね？&lt;pre&gt;&lt;br /&gt;arg : lhs '=' arg&lt;br /&gt;    ...&lt;br /&gt;    | arg &lt;strong&gt;tDOT2&lt;/strong&gt; arg&lt;br /&gt;        {&lt;br /&gt;            value_expr($1);&lt;br /&gt;            value_expr($3);&lt;br /&gt;            &lt;strong&gt;$$ = NEW_DOT2($1, $3);&lt;/strong&gt;&lt;br /&gt;            if (nd_type($1) == NODE_LIT &amp;amp;&amp;amp; FIXNUM_P($1-&amp;gt;nd_lit) &amp;amp;&amp;amp;&lt;br /&gt;                nd_type($3) == NODE_LIT &amp;amp;&amp;amp; FIXNUM_P($3-&amp;gt;nd_lit)) {&lt;br /&gt;                deferred_nodes = list_append(deferred_nodes, $$);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    ...&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;NEW_DOT2(), NEW_DOT3() とやらで、パースツリーのノードを作っています。node.h:&lt;pre&gt;&lt;br /&gt;#define NEW_DOT2(b,e) NEW_NODE(NODE_DOT2,b,e,0)&lt;br /&gt;#define NEW_DOT3(b,e) NEW_NODE(NODE_DOT3,b,e,0)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ノードの型としては "NODE_DOT2" や "NODE_DOT3" で上がって行くようです。これは Range でも条件範囲式でも同じようですので、上で何らかの置換処理をしているんでしょう。if 式での処理を見てみます。&lt;pre&gt;&lt;br /&gt;primary : literal&lt;br /&gt;        | kIF expr_value then&lt;br /&gt;          compstmt&lt;br /&gt;          if_tail&lt;br /&gt;          kEND&lt;br /&gt;            {&lt;br /&gt;                $$ = NEW_IF(&lt;strong&gt;cond($2)&lt;/strong&gt;, $4, $5);&lt;br /&gt;                fixpos($$, $2);&lt;br /&gt;                if (cond_negative(&amp;amp;$$-&amp;gt;nd_cond)) {&lt;br /&gt;                    NODE *tmp = $$-&amp;gt;nd_body;&lt;br /&gt;                    $$-&amp;gt;nd_body = $$-&amp;gt;nd_else;&lt;br /&gt;                    $$-&amp;gt;nd_else = tmp;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;式が条件式だった時には、cond() 関数 → cond0() 関数で何かの変換をしているようです。&lt;pre&gt;&lt;br /&gt;static NODE*&lt;br /&gt;cond0(node)&lt;br /&gt;    NODE *node;&lt;br /&gt;{&lt;br /&gt;  ...&lt;br /&gt;  switch (nd_type(node)) {&lt;br /&gt;    ...&lt;br /&gt;    case NODE_DOT2:&lt;br /&gt;    case NODE_DOT3:&lt;br /&gt;      &lt;strong&gt;node-&amp;gt;nd_beg = range_op(node-&amp;gt;nd_beg);&lt;/strong&gt;&lt;br /&gt;      &lt;strong&gt;node-&amp;gt;nd_end = range_op(node-&amp;gt;nd_end);&lt;/strong&gt;&lt;br /&gt;      &lt;strong&gt;if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);&lt;/strong&gt;&lt;br /&gt;      &lt;strong&gt;else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);&lt;/strong&gt;&lt;br /&gt;      node-&amp;gt;nd_cnt = local_append(internal_id());&lt;br /&gt;      if (!e_option_supplied()) {&lt;br /&gt;        int b = literal_node(node-&amp;gt;nd_beg);&lt;br /&gt;        int e = literal_node(node-&amp;gt;nd_end);&lt;br /&gt;        if ((b == 1 &amp;amp;&amp;amp; e == 1) || (b + e &amp;gt;= 2 &amp;amp;&amp;amp; RTEST(ruby_verbose))) {&lt;br /&gt;          parser_warn(node, "range literal in condition");&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;      break;&lt;br /&gt;      ...&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ありました、条件式に指定された場合には、パースツリーのノード型を変えています。どうやら Ruby の「条件式としての範囲式」は、内部的には、ドットの数によってそれぞれ「flip2」「flip3」と呼ばれているようです。&lt;p&gt;となれば、処理がされる箇所を探すのは簡単です。eval.c:&lt;pre&gt;&lt;br /&gt;static VALUE&lt;br /&gt;rb_eval(self, n)&lt;br /&gt;    VALUE self;&lt;br /&gt;    NODE *n;&lt;br /&gt;{&lt;br /&gt;  ...&lt;br /&gt;  switch (nd_type(node)) {&lt;br /&gt;    ...&lt;br /&gt;    case NODE_FLIP2:          /* like AWK */&lt;br /&gt;      {&lt;br /&gt;        &lt;strong&gt;VALUE *flip = rb_svar(node-&amp;gt;nd_cnt);&lt;/strong&gt;&lt;br /&gt;        if (!flip) rb_bug("unexpected local variable");&lt;br /&gt;        if (!RTEST(*flip)) {&lt;br /&gt;          if (RTEST(rb_eval(self, node-&amp;gt;nd_beg))) {&lt;br /&gt;            *flip = RTEST(rb_eval(self, node-&amp;gt;nd_end))?Qfalse:Qtrue;&lt;br /&gt;            result = Qtrue;&lt;br /&gt;          }&lt;br /&gt;          else {&lt;br /&gt;            result = Qfalse;&lt;br /&gt;          }&lt;br /&gt;        }&lt;br /&gt;        else {&lt;br /&gt;          if (RTEST(rb_eval(self, node-&amp;gt;nd_end))) {&lt;br /&gt;            *flip = Qfalse;&lt;br /&gt;          }&lt;br /&gt;          result = Qtrue;&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;      break;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;なるほど、フリップフロップですか。ここでの鍵は rb_svar() でしょうか。&lt;pre&gt;&lt;br /&gt;VALUE *&lt;br /&gt;rb_svar(cnt)&lt;br /&gt;    int cnt;&lt;br /&gt;{&lt;br /&gt;    struct RVarmap *vars = ruby_dyna_vars;&lt;br /&gt;    ID id;&lt;br /&gt;&lt;br /&gt;    if (!ruby_scope-&amp;gt;local_tbl) return NULL;&lt;br /&gt;    if (cnt &amp;gt;= ruby_scope-&amp;gt;local_tbl[0]) return NULL;&lt;br /&gt;    &lt;strong&gt;id = ruby_scope-&amp;gt;local_tbl[cnt+1];&lt;/strong&gt;&lt;br /&gt;    while (vars) {&lt;br /&gt;        if (vars-&amp;gt;id == id) return &amp;amp;vars-&amp;gt;val;&lt;br /&gt;        vars = vars-&amp;gt;next;&lt;br /&gt;    }&lt;br /&gt;    if (ruby_scope-&amp;gt;local_vars == 0) return NULL;&lt;br /&gt;    return &amp;amp;ruby_scope-&amp;gt;local_vars[cnt];&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Ruby のスコープのローカルで、対応する変数の入れモノを返してくれるようです。PUSH_SCOPE() を見ると、ruby_scope はスタックを push するたびに作られているようですので、スレッドごとに独立するんでしょう。&lt;pre&gt;&lt;br /&gt;#define PUSH_SCOPE() do {               \&lt;br /&gt;    volatile int _vmode = scope_vmode;  \&lt;br /&gt;    struct SCOPE * volatile _old;       \&lt;br /&gt;    &lt;strong&gt;NEWOBJ(_scope, struct SCOPE)&lt;/strong&gt;;       \&lt;br /&gt;    OBJSETUP(_scope, 0, T_SCOPE);       \&lt;br /&gt;    _scope-&amp;gt;local_tbl = 0;              \&lt;br /&gt;    _scope-&amp;gt;local_vars = 0;             \&lt;br /&gt;    _scope-&amp;gt;flags = 0;                  \&lt;br /&gt;    _old = ruby_scope;                  \&lt;br /&gt;    &lt;strong&gt;ruby_scope = _scope&lt;/strong&gt;;                \&lt;br /&gt;    scope_vmode = SCOPE_PUBLIC&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;というわけで、「条件式としての範囲式」は、内部的には Range 型オブジェクトなどではなく、「flip2」「flip3」と呼ばれる言語仕様であり、状態はローカルのスコープごとに持っているようです。&lt;p&gt;注意: このアプローチには時に、言語設計者がせっかく隠蔽してくれているものを、実装レベルで見て分かったような気になってしまう罠が隠れています。例えば、Scala の吐いた class ファイルの逆コンパイルをしたところで、実装の理解には役立っても、言語の理解には全く役立たないどころか、むしろ有害だったりします。&lt;p&gt;では。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-8370214609858493612?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/8370214609858493612/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/11/ruby.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/8370214609858493612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/8370214609858493612'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/11/ruby.html' title='Ruby の「条件式としての範囲式」の正体を探る'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-1207479277370758718</id><published>2011-12-01T15:40:00.000+09:00</published><updated>2011-12-01T15:40:00.564+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Haskell'/><title type='text'>PostgreSQL の無限再帰 WITH 句で思うこと</title><content type='html'>&lt;p&gt;お世話になっております、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;PostgreSQL の再帰 WITH 句で、無限長のフィボナッチ数列を作ってみます。&lt;pre&gt;&lt;br /&gt;template1=# &lt;strong&gt;WITH RECURSIVE&lt;br /&gt;              f(a, b) AS (VALUES(0, 1) UNION SELECT b, a + b FROM f)&lt;br /&gt;            SELECT a FROM f OFFSET 0 LIMIT 20;&lt;/strong&gt;&lt;br /&gt;  a&lt;br /&gt;------&lt;br /&gt;    0&lt;br /&gt;    1&lt;br /&gt;    1&lt;br /&gt;    2&lt;br /&gt;    3&lt;br /&gt;    5&lt;br /&gt;    8&lt;br /&gt;   13&lt;br /&gt;   21&lt;br /&gt;   34&lt;br /&gt;   55&lt;br /&gt;   89&lt;br /&gt;  144&lt;br /&gt;  233&lt;br /&gt;  377&lt;br /&gt;  610&lt;br /&gt;  987&lt;br /&gt; 1597&lt;br /&gt; 2584&lt;br /&gt; 4181&lt;br /&gt;(20 rows)&lt;br /&gt;&lt;br /&gt;template1=# &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;この "LIMIT" の用法は、下記の通り可搬性が低いので推奨はできないようですが、ちょっと面白いので。&lt;blockquote&gt;これが動作するのは、PostgreSQLの実装が、実際に親問い合わせで取り出されるのと同じ数のWITH問い合わせの行のみを評価するからです。 この秘訣を実稼動環境で使用することは勧められません。 他のシステムでは異なった動作をする可能性があるからです。（「&lt;a href="http://www.postgresql.jp/document/current/html/queries-with.html"&gt;WITH問い合わせ（共通テーブル式）」 - PostgreSQL 文書&lt;/a&gt;）&lt;/blockquote&gt;&lt;p&gt;「必要な部分しか持ってこないので、データ元が無限でも OK」というところが、ちょっと Haskell 等の遅延評価型言語における無限長リストを思い起こさせます。&lt;p&gt;無限長のフィボナッチ数列。&lt;pre&gt;&lt;br /&gt;module Fib where&lt;br /&gt;  f = 0:1:zipWith (+) f (tail f)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;その頭 20 個を取得。&lt;pre&gt;&lt;br /&gt;*Fib&amp;gt; &lt;strong&gt;take 20 f&lt;/strong&gt;&lt;br /&gt;[0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181]&lt;br /&gt;*Fib&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;RDBMS で、複雑な結合の実行計画を賢く最適化して、実際に必要なデータだけをストレージからフェッチしてくれる機能というのは、どこか遅延評価の考え方に似ているように思われます。&lt;pre&gt;&lt;br /&gt;CREATE TABLE foo (k integer PRIMARY KEY, v text);&lt;br /&gt;TRUNCATE TABLE foo;&lt;br /&gt;INSERT INTO foo VALUES(1, '1st foo');&lt;br /&gt;INSERT INTO foo VALUES(2, '2nd foo');&lt;br /&gt;INSERT INTO foo VALUES(3, '3rd foo');&lt;br /&gt;INSERT INTO foo VALUES(5, '5th foo');&lt;br /&gt;INSERT INTO foo VALUES(7, '7th foo');&lt;br /&gt;&lt;br /&gt;CREATE TABLE bar (k integer PRIMARY KEY, v text);&lt;br /&gt;TRUNCATE TABLE bar;&lt;br /&gt;INSERT INTO bar VALUES(1, '1st bar');&lt;br /&gt;INSERT INTO bar VALUES(2, '2nd bar');&lt;br /&gt;INSERT INTO bar VALUES(4, '4th bar');&lt;br /&gt;INSERT INTO bar VALUES(6, '6th bar');&lt;br /&gt;INSERT INTO bar VALUES(8, '8th bar');&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;当たり前ですが、直積をとってから絞り込むような、手続き型処理的なアホなことはしていませんね。&lt;pre&gt;&lt;br /&gt;template1=# &lt;strong&gt;EXPLAIN SELECT * FROM foo CROSS JOIN bar;&lt;/strong&gt;&lt;br /&gt;                             QUERY PLAN&lt;br /&gt;--------------------------------------------------------------------&lt;br /&gt; Nested Loop  (cost=23.53..30303.83 rows=1512900 width=72)&lt;br /&gt;   -&gt;  Seq Scan on foo  (cost=0.00..22.30 rows=1230 width=36)&lt;br /&gt;   -&gt;  Materialize  (cost=23.53..35.83 rows=1230 width=36)&lt;br /&gt;         -&gt;  Seq Scan on bar  (cost=0.00..22.30 rows=1230 width=36)&lt;br /&gt;(4 rows)&lt;br /&gt;&lt;br /&gt;template1=# &lt;strong&gt;EXPLAIN SELECT * FROM foo CROSS JOIN bar WHERE foo.k = bar.k;&lt;/strong&gt;&lt;br /&gt;                             QUERY PLAN&lt;br /&gt;--------------------------------------------------------------------&lt;br /&gt; Merge Join  (cost=170.85..290.46 rows=7564 width=72)&lt;br /&gt;   Merge Cond: (foo.k = bar.k)&lt;br /&gt;   -&gt;  Sort  (cost=85.43..88.50 rows=1230 width=36)&lt;br /&gt;         Sort Key: foo.k&lt;br /&gt;         -&gt;  Seq Scan on foo  (cost=0.00..22.30 rows=1230 width=36)&lt;br /&gt;   -&gt;  Sort  (cost=85.43..88.50 rows=1230 width=36)&lt;br /&gt;         Sort Key: bar.k&lt;br /&gt;         -&gt;  Seq Scan on bar  (cost=0.00..22.30 rows=1230 width=36)&lt;br /&gt;(8 rows)&lt;br /&gt;&lt;br /&gt;template1=#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;PostgreSQL、賢いですねぇ。実行計画の最適化こそがデータベースの真髄ですな。&lt;p&gt;ではまた。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-1207479277370758718?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/1207479277370758718/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/11/postgresql-with.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/1207479277370758718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/1207479277370758718'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/11/postgresql-with.html' title='PostgreSQL の無限再帰 WITH 句で思うこと'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-2183324019705207068</id><published>2011-11-30T09:57:00.000+09:00</published><updated>2011-12-01T09:29:16.181+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KVM'/><category scheme='http://www.blogger.com/atom/ns#' term='IaaS'/><category scheme='http://www.blogger.com/atom/ns#' term='仮想化'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>RHEL6 系で qemu-kvm バイナリを CPU エミュレーション・モードで使う</title><content type='html'>&lt;p&gt;お疲れ様です、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。突然ですが、今どきの仮想マシンにの実現方法としては、おおざっぱに以下の 3 種類があります。&lt;dl&gt;&lt;dt&gt;CPU エミュレーション (インタプリタや、全部バイナリ変換 (Binary Translation))&lt;/dt&gt;&lt;dd&gt;&lt;a href="http://wiki.qemu.org/Main_Page"&gt;QEMU&lt;/a&gt;, &lt;a href="http://bochs.sourceforge.net/"&gt;Bochs&lt;/a&gt; など。超重いが、他 CPU の命令実行もできて柔軟。実装が大変&lt;/dd&gt;&lt;dt&gt;トラップ実行 (Trap and Execute。TAE とでも？) + 部分バイナリ変換&lt;/dt&gt;&lt;dd&gt;(Workstation など、昔ながらの) &lt;a href=http://www.vmware.com/&gt;VMware&lt;/a&gt; (実は ESXi でもできるんですが), (昔ながらの) &lt;a href=https://www.virtualbox.org/&gt;VirtualBox&lt;/a&gt;, KQEMU (きわめて残念なことに開発終了) など。ハードウェア支援が不要。CPU 命令をネイティブで走らせるので、そこそこ速い。実装が大変&lt;/dd&gt;&lt;dt&gt;ハードウェア支援仮想化 (Hardware-Assisted Virtualization, HAV)&lt;/dt&gt;&lt;dd&gt;QEMU virtualizer (QEMU-KVM), &lt;a href=http://xen.org/&gt;Xen-HVM&lt;/a&gt;, HAV モードの VMware (ESXi とか), HAV モードの VirtualBox など。&lt;a href=http://www.intel.com/jp/technology/virtualization/index.htm&gt;intel VT-x&lt;/a&gt; や &lt;a href=http://www.amd.com/jp/products/technologies/virtualization/Pages/virtualization.aspx&gt;AMD-V&lt;/a&gt; が必要。速い、と言われている。実装が（比較的に）簡単&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;# 何かと面倒な準仮想化 (Para-virtualization, PV) や、OS 仮想化のコンテナ方式については脇に置きます&lt;p&gt;一般に、前者ほど遅くて後者ほど速いです（初期の VT-x は root, non-root 移行のコストが高くて、むしろ TAE の方が速かったりもしたらしいですが）。最近の実用環境では HAV が主流なのですが、HAV 方式の欠点として、VM 環境上では VM が動かせないことがあります。&lt;p&gt;# AMD-V だと、VM のスタックができるというウワサを聞きましたが、よく知りません →「&lt;a href=http://uksysadmin.wordpress.com/2011/02/15/running-openstack-under-virtualbox/&gt;Running OpenStack under VirtualBox « System Administration and Architecture Blog&lt;/a&gt;」&lt;p&gt;何がしたいかと言うと、&lt;a href=http://www.eucalyptus.com/&gt;Eucalyptus&lt;/a&gt; や &lt;a href="http://www.openstack.org/"&gt;OpenStack&lt;/a&gt; のような IaaS プラットフォームをお手軽にテストしたいのですが、実マシンをそうそうゴロゴロと用意できない時に、VM 上でテストをできるようにしたいのです。しかし、それらのプロットフォームは、最近の流行からして、開発のプライマリに据えているハイパーバイザが KVM なのです。&lt;p&gt;これらは、実装的には &lt;a href=http://libvirt.org/&gt;libvirt&lt;/a&gt; 配下で VM ハイパーバイザを動かすようになっているので、理屈上は Xen や VirtualBox でも動きそうなものですが、KVM が開発のプライマリなので、何かと動きません。そもそも、RHEL6 だと Xen の Dom0 も動きませんし、RHEL5 だと Python その他が古すぎて IaaS プラットフォームが動かなかったりもします。&lt;p&gt;そこで、KVM も動作には QEMU-KVM を使っているので、かわりに QEMU を使うと結構動きます。しかし残念なことに、以前はあった KQEMU による TAE 方式は開発が止まってしまったので、泣く泣く QEMU の CPU エミュレーションモードを使います。&lt;p&gt;&lt;a href=http://www.jp.redhat.com/rhel/&gt;RHEL6&lt;/a&gt; に入っている "qemu-kvm" というコマンドは、実態としては "qemu-system-x86_64" であり、ビルド時に名前を変えているだけです。このバイナリは、KVM のオプションをつければ KVM を利用した HAV 方式で動きますが、KVM を切っておけば、CPU エミュレーションでも動きます。KVM virtualizer 推しのために、emulator をわざと使えなくしているようです。&lt;p&gt;libvirt-0.8.7/src/qemu/qemu_capabilities.c:&lt;pre&gt;&lt;br /&gt;static int&lt;br /&gt;qemuCapsInitGuest(virCapsPtr caps,&lt;br /&gt;                  virCapsPtr old_caps,&lt;br /&gt;                  const char *hostmachine,&lt;br /&gt;                  const struct qemu_arch_info *info,&lt;br /&gt;                  int hvm)&lt;br /&gt;{&lt;br /&gt;  ...&lt;br /&gt;  if (STREQ(info-&amp;gt;arch, hostmachine) ||&lt;br /&gt;   (STREQ(hostmachine, "x86_64") &amp;amp;&amp;amp; STREQ(info-&amp;gt;arch, "i686"))) {&lt;br /&gt;    if (&lt;strong&gt;access("/dev/kvm", F_OK) == 0&lt;/strong&gt;) {&lt;br /&gt;      ...&lt;br /&gt;      &lt;strong&gt;const char *const kvmbins[] =&lt;br /&gt;       { "/usr/libexec/qemu-kvm", /* RHEL */&lt;br /&gt;         "qemu-kvm", /* Fedora */&lt;br /&gt;         "kvm" }; /* Upstream .spec */&lt;/strong&gt;&lt;br /&gt;      ...&lt;br /&gt;    }&lt;br /&gt;    if (&lt;strong&gt;access("/dev/kqemu", F_OK) == 0&lt;/strong&gt;)&lt;br /&gt;      haskqemu = 1;&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;上記のように、libvirt は、コマンドのパスとモジュールのロード状況に基づいて、その環境上で利用可能なハイパーバイザーを判断しています。よって、RHEL6 でもリンクを張るだけで、libvirt 経由で QEMU のエミュレーションモードが使えるようになります。&lt;pre&gt;&lt;br /&gt;# ln -sf /usr/libexec/qemu-kvm /usr/bin/qemu-system-x86_64&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;これで、VM 上で QEMU の完全仮想化エミュレーションが動くようになります。Virt-Manager 上での表示としては、以下のようになります。&lt;table&gt;&lt;tr&gt;&lt;th&gt;＼&lt;/th&gt;&lt;th&gt;「Hypervisor」&lt;/th&gt;&lt;th&gt;「Architecture」&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;KVM 有効の virtualizer&lt;/th&gt;&lt;td&gt;「KVM」&lt;/td&gt;&lt;td&gt;「x86_64」&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;QEMU emulator&lt;/th&gt;&lt;td&gt;「qemu」&lt;/td&gt;&lt;td&gt;「x86_64」&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;以下は、Windows 版の VMware Workstation 上の Scientific Linux 6 (x64) 上の Virt-Manager 上で Scientific Linux (IA32) を動かした例です。&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-NcAmy5CjSn8/TsBuTe8JU9I/AAAAAAAAABQ/Mvm-m3IhB-Q/s1600/emumode.png" imageanchor="1" style=""&gt;&lt;img border="0" height="346" width="400" src="http://1.bp.blogspot.com/-NcAmy5CjSn8/TsBuTe8JU9I/AAAAAAAAABQ/Mvm-m3IhB-Q/s400/emumode.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;もちろん、とっても遅いです。しかし、動かないよりはマシですので、テスト用に使っています。&lt;p&gt;では。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-2183324019705207068?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/2183324019705207068/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/11/rhel6-qemu-kvm-cpu.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/2183324019705207068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/2183324019705207068'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/11/rhel6-qemu-kvm-cpu.html' title='RHEL6 系で qemu-kvm バイナリを CPU エミュレーション・モードで使う'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-NcAmy5CjSn8/TsBuTe8JU9I/AAAAAAAAABQ/Mvm-m3IhB-Q/s72-c/emumode.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-9142692348516076423</id><published>2011-11-29T12:28:00.000+09:00</published><updated>2011-11-29T18:07:42.297+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='バックアップ'/><category scheme='http://www.blogger.com/atom/ns#' term='LVM'/><category scheme='http://www.blogger.com/atom/ns#' term='LVM2'/><title type='text'>なぜオンライン EXT3 の LVM2 スナップショット &amp; バックアップは問題なく動くのか？</title><content type='html'>&lt;p&gt;お疲れ様です、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。新書本風のタイトルにしてみました。&lt;p&gt;最初に、私の自宅サーバの、えらく大雑把なバックアップを紹介しようと思います。日に一回、ルート直下のスナップショットを、まるごと別のハードディスクに rsync で増分バックアップしています。システムは以下のようにマウントされています。/ 直下が LVM であり、EXT4 でマウントされています。&lt;pre&gt;&lt;br /&gt;$ mount | grep /dev/mapper&lt;br /&gt;/dev/mapper/vg_main-lv_main on / type ext4 (rw,errors=remount-ro)&lt;br /&gt;/dev/mapper/vg_sub-lv_sub on /sub type ext4 (rw)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;以下は、1 日 1 回実行されるバックアップスクリプトです。LVM スナップショットをリードオンリーでマウントし、rsync でコピーするだけの簡単なものです。&lt;pre&gt;&lt;br /&gt;$ cat /etc/cron.daily/backup-snapshot&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;mntpnt=/mnt/tmp&lt;br /&gt;&lt;br /&gt;# /vm/ は大きいので、日曜日にだけバックアップ&lt;br /&gt;foptvm=&lt;br /&gt;# From Sunday, 0-indexed&lt;br /&gt;test $(date +%w) != 0 &amp;amp;&amp;amp; foptvm="$foptvm --exclude /vm/"&lt;br /&gt;&lt;br /&gt;mkdir -p /sub/_&lt;br /&gt;lvcreate --size 30G --snapshot --name lv_snap /dev/vg_main/lv_main&lt;br /&gt;mount -o ro /dev/vg_main/lv_snap $mntpnt&lt;br /&gt;if test -d $mntpnt/proc&lt;br /&gt;then&lt;br /&gt;  rsync -avr --delete $foptvm $mntpnt/ /sub/_&lt;br /&gt;fi&lt;br /&gt;umount $mntpnt&lt;br /&gt;lvremove -f /dev/vg_main/lv_snap&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;当初は、DB ごとに個人データごとにと、個別にバックアップをとっていたのですが、サーバの用途が増えてきたためだんだん面倒くさくなってきてしまい、このような丸ごとバックアップに落ち着きました。問題なく動いていたので、これで正しいのだろうと思っていたのですが、ふとログを見ると、以下のようなメッセージが出ていました。&lt;pre&gt;&lt;br /&gt;$ grep EXT4 /var/log/messages&lt;br /&gt;Nov XX 06:25:03 queen kernel: [10216804.075357] EXT4-fs (dm-3): orphan cleanup on readonly fs&lt;br /&gt;Nov XX 06:25:03 queen kernel: [10216804.151685] EXT4-fs (dm-3): 43 orphan inodes deleted&lt;br /&gt;Nov XX 06:25:03 queen kernel: [10216804.151689] EXT4-fs (dm-3): recovery complete&lt;br /&gt;Nov XX 06:25:04 queen kernel: [10216804.249053] EXT4-fs (dm-3): mounted filesystem with ordered data mode. Opts: (null)&lt;br /&gt;Nov YY 06:25:03 queen kernel: [10303060.217676] EXT4-fs (dm-3): orphan cleanup on readonly fs&lt;br /&gt;Nov YY 06:25:03 queen kernel: [10303060.542436] EXT4-fs (dm-3): 45 orphan inodes deleted&lt;br /&gt;Nov YY 06:25:03 queen kernel: [10303060.542441] EXT4-fs (dm-3): recovery complete&lt;br /&gt;Nov YY 06:25:03 queen kernel: [10303060.648882] EXT4-fs (dm-3): mounted filesystem with ordered data mode. Opts: (null)&lt;br /&gt;Nov ZZ 06:25:02 queen kernel: [10389317.017146] EXT4-fs (dm-3): orphan cleanup on readonly fs&lt;br /&gt;Nov ZZ 06:25:02 queen kernel: [10389317.117018] EXT4-fs (dm-3): 45 orphan inodes deleted&lt;br /&gt;Nov ZZ 06:25:02 queen kernel: [10389317.117023] EXT4-fs (dm-3): recovery complete&lt;br /&gt;Nov ZZ 06:25:03 queen kernel: [10389317.215482] EXT4-fs (dm-3): mounted filesystem with ordered data mode. Opts: (null)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;特に気になるのが「～ orphan inodes deleted」です。リードオンリーでマウントしているはずなのに、EXT4 のクリーンアップが動いて、ファイルシステムに変更を加えているように見えます。この分だと、ジャーナルのリプレイもしているのではないでしょうか？ むしろジャーナルのリプレイができないとなると、マウントしたままの EXT4 のブロックデバイスイメージから取っているスナップショットですので、ファイルシステムには不整合が生じているのでは？ そもそも、LVM のスナップショットって書きこめるの？&lt;p&gt;と、疑問が出てきてしまったので、検証してみました。まずは、「LVM のスナップショットに書き込めるのか？」から。&lt;pre&gt;&lt;br /&gt;root@queen:~# lvcreate --size 30G --snapshot --name lv_snap \&lt;br /&gt; /dev/vg_main/lv_main&lt;br /&gt;  Logical volume "lv_snap" created&lt;br /&gt;root@queen:~# mount -o rw /dev/vg_main/lv_main /mnt/tmp&lt;br /&gt;root@queen:~# ls -l /mnt/tmp/hoge&lt;br /&gt;ls: cannot access /mnt/tmp/hoge: No such file or directory&lt;br /&gt;root@queen:~# echo hoge &amp;gt; /mnt/tmp/hoge&lt;br /&gt;root@queen:~# cat /mnt/tmp/hoge&lt;br /&gt;hoge&lt;br /&gt;root@queen:~# umount /mnt/tmp/&lt;br /&gt;root@queen:~# lvremove -f /dev/vg_main/lv_snap&lt;br /&gt;  Logical volume "lv_snap" successfully removed&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;余裕で書き込めますね。知らなかった…。「&lt;a href="http://tldp.org/HOWTO/LVM-HOWTO/index.html"&gt;LVM HOWTO&lt;/a&gt;」の「&lt;a href="http://tldp.org/HOWTO/LVM-HOWTO/snapshotintro.html"&gt;Snapshots&lt;/a&gt;」の項に、以下のようにあります。&lt;blockquote&gt;In LVM2, snapshots are read/write by default. Read/write snapshots work like read-only snapshots, with the additional feature that if data is written to the snapshot, that block is marked in the exception table as used, and never gets copied from the original volume.&lt;/blockquote&gt;&lt;p&gt;LVM2 になってからは、スナップショットの差分領域は、スナップショット元からの差分を保持すると同時に、スナップショットへの書き込み差分も保持するようになっているそうです。静的なスナップショットというよりも、動的に書き込める、揮発的なブランチのようなものですね。&lt;p&gt;さて、LVM スナップショットに書き込めることは分かったので、次は、リードオンリー・マウントでも EXT4 がマウント時にファイルシステムの修復を行うかどうか、です。&lt;p&gt;余談なのですが、最近の Linux は I/O フリーズの機能を持っています。ファイルシステムを一貫性のある状態に移行させてから一時「凍結」し、バックアップやコピーをとるための機能です。これを使えば、以下のようにきれいなスナップショットがとれます。&lt;ul&gt;&lt;li&gt;ioctl(2) に FIFREEZE で、I/O を止め、一時的にファイルシステムを一貫性のある状態に保つ&lt;li&gt;LVM でブロックデバイスのスナップショットをとる&lt;li&gt;FITHAW で、フリーズを解除&lt;li&gt;スナップショットをマウントし、ゆっくりと rsync ででもコピーをとる&lt;li&gt;アンマウントして、スナップショットを開放&lt;/ul&gt;&lt;p&gt;しかし残念ながら、今の LVM などでは、この機能を使っていません…か？ FIFREEZE 等の呼び出しがないことから、てっきり使っていないと思っていたのですが、RHEL6 などで FIFREEZE/FITHAW の ioctl() を発行するためのコマンド fsfreeze(8) の man を参照すると、以下のように書かれています。&lt;blockquote&gt;fsfreeze is unnecessary for  device-mapper  devices.  The  device-mapper(and LVM)  automatically freezes filesystem on the device when a snap-shot creation is requested.  For more details see  the  dmsetup(8)  manpage.&lt;/blockquote&gt;&lt;p&gt;LVM2 のコードを見てみると（かなり読みづらいコードなのですが）、lvcreate(8) でスナップショットを作成すると、device mapper の「ブロックデバイスに対して」、DM_DEV_SUSPEND_CMD で ioctl() を呼んでいます (これは、drivers/md/dm-ioctl.c まわりのコードです。対して、ファイルシステムへのコードは linux/fs/ioctl.c:ioctl_fsfreeze() にあり、FIFREEZE での ioctl() が、「ファイルシステム上のノードに対して」発行されます)。とはいえ、結果的には、両者とも同一のスーパーブロックに対して freeze_bdev() を実行することになります。ブロックデバイスのくせして、自分の上に載っているファイルシステムにまで干渉するとは、何だか妙な感じがしますが、理にかなってはいます。&lt;p&gt;よって、LVM2 でスナップショットを取る前には、一瞬 I/O を停止して、ファイルシステムを整合性を保った状態まで持って行ってからスナップショットを作成しています。&lt;p&gt;以上でスナップショットについては解決したのですが、では、異常終了時の EXT3 はどうなんでしょう。結論から言うと、「&lt;a href="http://thread.gmane.org/gmane.comp.file-systems.ext4/5358"&gt;[RFC, PATCH 0/6] ext3: do not modify data on-disk when mounting read-o&lt;/a&gt;」や「&lt;a href="http://marc.info/?l=linux-kernel&amp;m=117607695406580"&gt;&amp;apos;Add a norecovery option to ext3/4?&amp;apos; - MARC&lt;/a&gt;」を見ると分かるように、実は「-o ro」オプションをつけてマウントしても、EXT3/EXT4 は、可能であれば（デバイスが書き込み可能であれば）ジャーナルのリプレイと orphan inode の切り落としをしてしまいます。ソース中では "really_read_only" のフラグで分岐しています。&lt;p&gt;linux-2.6.32/fs/ext4/super.c:&lt;pre&gt;&lt;br /&gt;static int ext4_load_journal(struct super_block *sb,&lt;br /&gt;                             struct ext4_super_block *es,&lt;br /&gt;                             unsigned long journal_devnum)&lt;br /&gt;{&lt;br /&gt;    ...&lt;br /&gt;    int really_read_only;&lt;br /&gt;    ...&lt;br /&gt;    really_read_only = bdev_read_only(sb-&amp;gt;s_bdev);&lt;br /&gt;    ...&lt;br /&gt;    if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER)) {&lt;br /&gt;        if (sb-&amp;gt;s_flags &amp;amp; MS_RDONLY) {&lt;br /&gt;            ext4_msg(sb, KERN_INFO, "INFO: recovery "&lt;br /&gt;                "required on readonly filesystem");&lt;br /&gt;            &lt;strong&gt;if (really_read_only) {&lt;br /&gt;                ext4_msg(sb, KERN_ERR, "write access "&lt;br /&gt;                    "unavailable, cannot proceed");&lt;br /&gt;                return -EROFS;&lt;br /&gt;            }&lt;/strong&gt;&lt;br /&gt;            ext4_msg(sb, KERN_INFO, "write access will "&lt;br /&gt;               "be enabled during recovery");&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;以上をまとめますと、&lt;ul&gt;&lt;li&gt;LVM2 では、元 LV のダーティバッファはスナップショットにも反映される&lt;li&gt;LVM2 のスナップショットには、書き込みができる&lt;li&gt;スナップショットはブロックデバイスでありながら、その上層のファイルシステムと示し合わせて、一貫性のある状態でのスナップショットを取ってくれる&lt;li&gt;EXT3/EXT4 の "-o ro" マウントは、(journal リプレイと) orphan inode 切り落としをする&lt;/ul&gt;&lt;p&gt;以上から、EXT3/EXT4 の、ある瞬間のスナップショットを LVM2 でとって、それをリードオンリーマウントしてコピーをとっても、一貫性の点では問題はないということですね。&lt;p&gt;やれやれ、ZFS や btrfs のような、シャドウコピーで手軽にファイルシステムレベルでスナップショットを利用できるようになれば、LVM を事前に用意する必要もないので、はるかに話は簡単になるんですが。早くデフォルトにならないかなぁ。&lt;p&gt;ではまた。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-9142692348516076423?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/9142692348516076423/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/11/ext3-lvm2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/9142692348516076423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/9142692348516076423'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/11/ext3-lvm2.html' title='なぜオンライン EXT3 の LVM2 スナップショット &amp; バックアップは問題なく動くのか？'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-6314262988076030156</id><published>2011-11-29T12:00:00.000+09:00</published><updated>2011-12-22T12:06:39.971+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RHEL6'/><category scheme='http://www.blogger.com/atom/ns#' term='CentOS 6'/><category scheme='http://www.blogger.com/atom/ns#' term='ネットワーク'/><category scheme='http://www.blogger.com/atom/ns#' term='Scientific Linux 6'/><title type='text'>CentOS 6.0 でインストール直後にネットワークを有効にする方法</title><content type='html'>サイオステクノロジー 金田です。&lt;br /&gt;&lt;br /&gt;CentOS 6.0 の&amp;nbsp;GUI インストールで、CentOS 5 系と同じように設定変更せず先に進めると、インストール後のネットワークが有効にならずに困ったことがあります。&lt;br /&gt;&lt;br /&gt;インストールしてしまったら、/etc/sysconfig/network-scripts/ifcfg-eth0 を編集するか、GUI のメニュー 「システム」→「設定」→「ネットワーク接続」から有効化すればいいのですが、できればインストール時に有効化したいですよね？今回はその方法を紹介します。&lt;br /&gt;&lt;br /&gt;CentOS 6.0 のインストール中にホスト名を設定する画面(画像1)が表示されたら「ネットワークの設定」ボタンをクリックします。&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-vF_Jwu6FojU/TtNNE-9BrII/AAAAAAAAABc/0fkisVCMJlc/s1600/inst08.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-vF_Jwu6FojU/TtNNE-9BrII/AAAAAAAAABc/0fkisVCMJlc/s320/inst08.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;u&gt;画像1 CentOS 6.0 インストール時ホスト名設定画面&lt;/u&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;実は、CentOS 5 系ではこのタイミングでネットワークが有効になっている(画像2)だけなんですね。&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-w2qIh0m5Ijs/TtNRffS4vXI/AAAAAAAAAB8/lpcgCMwQI78/s1600/inst08-b.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-w2qIh0m5Ijs/TtNRffS4vXI/AAAAAAAAAB8/lpcgCMwQI78/s320/inst08-b.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;u&gt;画像2 CentOS 5系のインストール時ホスト名設定画面&lt;/u&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;話を CentOS 6.0 に戻します。&lt;br /&gt;次に「ネットワーク接続」のウィンドウ(画像3)の「有線」タブで「System eth0」を選択して「編集...」ボタンをクリックします。&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Fsm8LuZK_IE/TtNOFge9vPI/AAAAAAAAABo/Z9jLSTsYjz4/s1600/inst09.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-Fsm8LuZK_IE/TtNOFge9vPI/AAAAAAAAABo/Z9jLSTsYjz4/s320/inst09.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;u&gt;画像3 「ネットワーク接続」ウィンドウ&lt;/u&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;「System eth0 の編集」ウィンドウ(画像4)で「自動接続する」のチェックボックスをチェックすれば、インストール後にネットワークが有効になります。&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-OZC00_SObfs/TtNOZ9CnumI/AAAAAAAAABw/9I-XGkY7OV8/s1600/inst10.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-OZC00_SObfs/TtNOZ9CnumI/AAAAAAAAABw/9I-XGkY7OV8/s320/inst10.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;u&gt;画像4 「System eth0」ウィンドウ&lt;/u&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;RHEL6 や Scientific Linux 6 でも同じ方法で変更できます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-6314262988076030156?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/6314262988076030156/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/11/centos-60.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/6314262988076030156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/6314262988076030156'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/11/centos-60.html' title='CentOS 6.0 でインストール直後にネットワークを有効にする方法'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-vF_Jwu6FojU/TtNNE-9BrII/AAAAAAAAABc/0fkisVCMJlc/s72-c/inst08.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-4840213621464936936</id><published>2011-11-28T14:30:00.000+09:00</published><updated>2011-11-29T09:51:52.514+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Postgres Plus'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>PostgreSQL 死活監視のタイムアウト</title><content type='html'>&lt;p&gt;お疲れぎみです、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;スクリプト等から PostgreSQL のプロセスが正しく動作しているかどうかを監視するための方法としては、pg_ctl コマンドを使ってのチェックと、実際にポートにアクセスしてのチェックがあると思います。&lt;p&gt;まずはプロセスの確認です。pg_ctl コマンドの "status" サブコマンドで、ローカルで動作している PostgreSQL のプロセスの状態を取ることができます。&lt;pre&gt;&lt;br /&gt;$ /usr/local/pgsql/bin/pg_ctl -D ~/pgdata-main/ status&lt;br /&gt;pg_ctl: postmaster is running (PID: 10532)&lt;br /&gt;Command line was:&lt;br /&gt;/usr/lib/postgresql/8.4/bin/postgres "-D" "/home/knaka/pgdata-main"&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;"-D" オプションで指定したデータディレクトリ下には "postmaster.pid" ファイルがあり、内容は、外部からのコネクションを受け付けている Postmaster プロセスのプロセス番号 (PID) です。この PID に対応するプロセスが動作しているどうかの結果を返します。&lt;p&gt;このコマンドがブロックしてしまうことはないのでしょうか？ 少しソースも見てみましょう。Postmaster の死活を見ているのは、下記の部分です。src/bin/pg_ctl/pg_ctl.c です。&lt;pre&gt;&lt;br /&gt;static bool&lt;br /&gt;postmaster_is_alive(pid_t pid)&lt;br /&gt;{&lt;br /&gt;  ...&lt;br /&gt;  if (kill(pid, 0) == 0)&lt;br /&gt;    return true;&lt;br /&gt;  ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;kill(2) にシグナル番号 0 を投げるというのはどういう意味でしたっけ？ man には以下のようにあります。&lt;blockquote&gt;If sig is 0, then no signal is sent, but error checking is still per-formed; this can be used to check for the existence of a process ID  orprocess group ID.&lt;/blockquote&gt;&lt;p&gt;単にプロセスが存在しているかどうかしか見ていませんが、これがブロックすることはなさそうなので、DB の状態に拠らず安心して呼べますね。しかしこれでは、プロセスはあるけれど実際にはサービスが行われていなかった場合を検出できません。&lt;p&gt;そこで、ネットワークのポート (TCP/IP なりドメインソケットなりの) に接続して死活監視を行います (パスワードを訊かれないよう、&lt;a href=http://www.postgresql.jp/document/current/html/libpq-pgpass.html&gt;パスワードファイル&lt;/a&gt;なり&lt;a href=http://www.postgresql.jp/document/current/html/libpq-pgservice.html&gt;サービスファイル&lt;/a&gt;なりは事前に設定しておいてください)。&lt;pre&gt;&lt;br /&gt;$ psql -h localhost -p 5433 -U admin template1 -l&lt;br /&gt;                          List of databases&lt;br /&gt;   Name    | Owner | Encoding | Collation | Ctype | Access privileges&lt;br /&gt;-----------+-------+----------+-----------+-------+-------------------&lt;br /&gt; eucdb     | admin | EUC_JP   | C         | C     |&lt;br /&gt; main      | admin | UTF8     | C         | C     |&lt;br /&gt; postgres  | knaka | UTF8     | C         | C     |&lt;br /&gt; template0 | knaka | UTF8     | C         | C     | =c/knaka&lt;br /&gt;(中略)&lt;br /&gt;$ echo $?&lt;br /&gt;0 &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;# なおここで、"postgres" データベースに接続してチェックするのはやめましょう。世の中には "postgres" データベースを持たない PostgreSQL データベースがあります。"template1" が無いことはありません。&lt;p&gt;しかしながら、もしポートを開いたまま死んでいる PostgreSQL へ不用意に接続して状態を確認してしまうと、いつまでも待ってしまいます。&lt;a href=http://ja.wikipedia.org/wiki/Netcat&gt;netcat コマンド&lt;/a&gt;で listen ポートを開いて試してみましょう。&lt;pre&gt;&lt;br /&gt;$ nc -l 15432&lt;br /&gt;(待ち...)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;別のコンソールから。&lt;pre&gt;&lt;br /&gt;$ psql -h localhost -p 15432 -U postgres postgres&lt;br /&gt;(待ち...)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;はい、返ってきません。もし一定時間ごとに死活監視のコマンドを発行するようにしていたら大変です。プロセスは増え続け、いずれリソースを食い尽くします。&lt;p&gt;そんな時、たとえば SSH でリモートのコマンドを叩くような状態監視であれば、タイムアウトのパラメータを渡すことで対処します。&lt;pre&gt;&lt;br /&gt;$ nc -l 10022&lt;br /&gt;&lt;br /&gt;$ ssh -p 10022 localhost&lt;br /&gt;&lt;/pre&gt;これだと戻りませんが。&lt;pre&gt;&lt;br /&gt;$ ssh -o "ConnectTimeout=5" -p 10022 localhost&lt;br /&gt;(5 秒経過…)&lt;br /&gt;Connection timed out during banner exchange&lt;br /&gt;$ echo $?&lt;br /&gt;255&lt;br /&gt;$ &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;"ConnectionTimeout" パラメータを渡すことで、ちゃんとエラーを返すようになりました。&lt;p&gt;一方、&lt;a href=http://www.postgresql.jp/document/current/html/app-psql.html&gt;psql コマンドのドキュメント&lt;/a&gt;にはそういうオプションが見当たりません。しかし psql コマンドは、実際のデータベースへの接続には libpq ライブラリを用いており、タイムアウトの設定はそちらにあります。&lt;a href=http://www.postgresql.jp/document/current/html/libpq-envars.html&gt;libpq が理解する環境変数&lt;/a&gt;を見てみますと、"PGCONNECT_TIMEOUT=～" というのがありますね。試してみましょう。&lt;pre&gt;&lt;br /&gt;$ PGCONNECT_TIMEOUT=5 psql -h localhost -p 15432 -U postgres postgres&lt;br /&gt;(5 秒経過…)&lt;br /&gt;psql: timeout expired&lt;br /&gt;$ echo $?&lt;br /&gt;2&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;めでたくタイムアウトし、エラーのリターンコードを返すようになりました。&lt;p&gt;では&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-4840213621464936936?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/4840213621464936936/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/11/postgresql.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/4840213621464936936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/4840213621464936936'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/11/postgresql.html' title='PostgreSQL 死活監視のタイムアウト'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-1741595025012160794</id><published>2011-11-25T14:00:00.000+09:00</published><updated>2011-11-29T09:50:52.831+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>ソースの入手と再ビルド ～ Ubuntu 編</title><content type='html'>&lt;p&gt;お疲れ様です、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;&lt;a href=http://sios-oss.blogspot.com/2011/11/centosscientific-linux.html&gt;先日のエントリ&lt;/a&gt;で、RPM 系ディストリビューションにおけるソースの入手とビルド方法には触れましたので、今度は簡単に、Debian 系ということで Ubuntu 上でのビルドをしてみます。なお、私も RPM を主戦場としておりまして、Debian 系の習熟度は普通のシスアド程度なのですが、やはりイザという時にソースの入手やビルド程度できねばなるまいと思いまして、あえてメモ書き程度に記しておきます。&lt;p&gt;まずは、パッケージビルドをするためのツールを含む "dpkg-dev" をインストールします。そして、後で Bash のビルドを試しますので、依存パッケージをインストールしておきます。&lt;pre&gt;&lt;br /&gt;root@queen:~# &lt;strong&gt;aptitude install dpkg-dev&lt;/strong&gt;&lt;br /&gt;root@queen:~# &lt;strong&gt;aptitude build-dep bash&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;以降は一般ユーザで行います。apt-get で source を入手できます。&lt;pre&gt;&lt;br /&gt;nonpriv@queen:~$ &lt;strong&gt;mkdir -p ~/deb/&lt;/strong&gt;&lt;br /&gt;nonpriv@queen:~$ &lt;strong&gt;cd ~/deb/&lt;/strong&gt;&lt;br /&gt;nonpriv@queen:~/deb$ &lt;strong&gt;apt-get source bash&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;nonpriv@queen:~/deb$ &lt;strong&gt;ls -l&lt;/strong&gt;&lt;br /&gt;total 4016&lt;br /&gt;drwxr-xr-x 3 nonpriv nonpriv    4096 2011-XX-XX 14:36 bash-4.1&lt;br /&gt;-rw-r--r-- 1 nonpriv nonpriv   87125 2010-08-11 05:05 bash_4.1-2ubuntu4.diff.gz&lt;br /&gt;-rw-r--r-- 1 nonpriv nonpriv    1296 2010-08-11 05:05 bash_4.1-2ubuntu4.dsc&lt;br /&gt;-rw-r--r-- 1 nonpriv nonpriv 4013077 2010-01-05 04:10 bash_4.1.orig.tar.gz&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;RPM のビルドが手続き的なのに対して、ダウンロードしてきた "bash-4.1/" ディレクトリの中を見て分かるとおり、Debian のビルドは、元のビルドシステムを生かしつつ、そこへラッパーを被せているようなノリがあります。うまく言えないけれど、そんな感じです。&lt;p&gt;ここで deb パッケージを作成するだけであれば、下記で充分です。&lt;pre&gt;&lt;br /&gt;nonpriv@queen:~/deb/bash-4.1$ &lt;strong&gt;dpkg-buildpackage&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;右記をひととおり読めば、誰でも deb ソースパッケージの操作、作成はできるようになると思います → 「&lt;a href="http://www.debian.org/doc/manuals/maint-guide/index.ja.html"&gt;Debian 新メンテナーガイド&lt;/a&gt;」。SPEC ファイル書き方講座の決定版とも言える「&lt;a href="http://www.rpm.org/max-rpm/"&gt;Maximum RPM&lt;/a&gt;」が 10 年以上もそのままなのに比べると、Debian プロジェクトはきちんとしているなぁと思わざるを得ません。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-1741595025012160794?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/1741595025012160794/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/11/ubuntu.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/1741595025012160794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/1741595025012160794'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/11/ubuntu.html' title='ソースの入手と再ビルド ～ Ubuntu 編'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-2661538080309822208</id><published>2011-11-24T11:34:00.000+09:00</published><updated>2011-11-29T09:49:45.532+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>肥大化した個人利用の Git ワークを縮小する</title><content type='html'>&lt;p&gt;お世話になります、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;CVS や Subversion 等の集中型バージョン管理と違い、Git のような分散型のバージョン管理では、明確な「ワーク」というものはありません（ワークではないレポジトリはありますが）。そのため、clone された各ワークは、それまでの変更履歴を全て抱えています。多人数での開発であれば、過去の、どの履歴をいつ参照する必要が生じるとも分からないので、ヒストリを勝手に消したら叱られるでしょうが、個人利用では、どう考えても今後必要にならないヒストリは、ディスクの肥やしでしかありません。途中の変更履歴を削除し、ワークのサイズを小さくする方法を把握しておくことは有益かと思います。&lt;p&gt;# 私的な事情としては、ワークを Dropbox 上に置いて Linux と Windows で共用しているため、無駄に大きくなられると、ネットストレージの容量を圧迫して困るのです&lt;p&gt;まずは、もしまだ git を使ったことのない環境であれば、コミット時のユーザ名とメールアドレスを設定しておきます。&lt;pre&gt;&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;git config --global user.name "Foo Bar"&lt;/strong&gt;&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;git config --global user.email "foobar@example.com"&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;空のレポジトリを作成します。初期サイズは、100KB ほどのようです。&lt;pre&gt;&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;mkdir ~/repos/&lt;/strong&gt;&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;git init --bare ~/repos/&lt;/strong&gt;&lt;br /&gt;Initialized empty Git repository in /home/nonpriv/repos/.git/&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;du -hs ~/repos/&lt;/strong&gt;&lt;br /&gt;100K    /home/nonpriv/repos/&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;clone でワークを作成します。サイズは 104KB ほどです。&lt;pre&gt;&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;git clone file:///home/nonpriv/repos/ ~/work/&lt;/strong&gt;&lt;br /&gt;Initialized empty Git repository in /home/nonpriv/work/.git/&lt;br /&gt;warning: You appear to have cloned an empty repository.&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;cd work/&lt;/strong&gt;&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;du -hs .&lt;/strong&gt;&lt;br /&gt;104K    .&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ワークにおいて、特に何の変哲もない最初のコミットと、レポジトリへの push を行います。&lt;pre&gt;&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;echo first &amp;gt; hoge.txt&lt;/strong&gt;&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;git add hoge.txt&lt;/strong&gt;&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;git commit -m "First commit"&lt;/strong&gt;&lt;br /&gt;[master (root-commit) f3241b3] First commit&lt;br /&gt; 1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt; create mode 100644 hoge.txt&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;git push origin master&lt;/strong&gt;&lt;br /&gt;Counting objects: 3, done.&lt;br /&gt;Writing objects: 100% (3/3), 213 bytes, done.&lt;br /&gt;Total 3 (delta 0), reused 0 (delta 0)&lt;br /&gt;Unpacking objects: 100% (3/3), done.&lt;br /&gt;To file:///home/nonpriv/repos/&lt;br /&gt; * [new branch]      master -&amp;gt; master&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;次に、うっかり巨大な内容 (10MB ほど) をコミット、push してしまいました。&lt;pre&gt;&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;dd if=/dev/urandom of=hoge.txt bs=10M count=1&lt;/strong&gt;&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;git add hoge.txt&lt;/strong&gt;&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;git commit -m "Second commit contains big data"&lt;/strong&gt;&lt;br /&gt;[master cbd23c4] Second commit contains big data&lt;br /&gt; 1 files changed, 0 insertions(+), 0 deletions(-)&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;git push&lt;/strong&gt;&lt;br /&gt;Counting objects: 5, done.&lt;br /&gt;Delta compression using up to 2 threads.&lt;br /&gt;Compressing objects: 100% (2/2), done.&lt;br /&gt;Writing objects: 100% (3/3), 10.00 MiB, done.&lt;br /&gt;Total 3 (delta 0), reused 0 (delta 0)&lt;br /&gt;Unpacking objects: 100% (3/3), done.&lt;br /&gt;To file:///home/nonpriv/repos/&lt;br /&gt;   f3241b3..cbd23c4  master -&amp;gt; master&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;仕方が無いので、巨大なコミットを消しにかかります。&lt;pre&gt;&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;echo third &amp;gt; hoge.txt&lt;/strong&gt;&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;git add hoge.txt&lt;/strong&gt;&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;git commit -m "Third commit removes it"&lt;/strong&gt;&lt;br /&gt;[master 56770a2] Third commit removes it&lt;br /&gt; 1 files changed, 1 insertions(+), 40970 deletions(-)&lt;br /&gt; rewrite hoge.txt (100%)&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;git push&lt;/strong&gt;&lt;br /&gt;Counting objects: 5, done.&lt;br /&gt;Delta compression using up to 2 threads.&lt;br /&gt;Compressing objects: 100% (1/1), done.&lt;br /&gt;Writing objects: 100% (3/3), 253 bytes, done.&lt;br /&gt;Total 3 (delta 0), reused 0 (delta 0)&lt;br /&gt;Unpacking objects: 100% (3/3), done.&lt;br /&gt;To file:///home/nonpriv/repos/&lt;br /&gt;   cbd23c4..56770a2  master -&amp;gt; master&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ここで CVS や Subversion であれば、ワークのサイズは小さくもなりましょうが、Git ではワークもレポジトリなので、レポジトリ内に過去の履歴が残っており、実サイズは小さくなりません。&lt;pre&gt;&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;cd ~&lt;/strong&gt;&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;git clone file:///home/nonpriv/repos/ ~/work2/&lt;/strong&gt;&lt;br /&gt;Initialized empty Git repository in /home/nonpriv/work2/.git/&lt;br /&gt;remote: Counting objects: 9, done.&lt;br /&gt;remote: Compressing objects: 100% (4/4), done.&lt;br /&gt;remote: Total 9 (delta 0), reused 0 (delta 0)&lt;br /&gt;Receiving objects: 100% (9/9), 10.00 MiB, done.&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;du -hs ~/work2&lt;/strong&gt;&lt;br /&gt;11M     /home/nonpriv/work2&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;そこで、rebase コマンドの squash で、ヒストリ上から、大きなコミットを無かったことにします。&lt;pre&gt;&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;cd ~/work/&lt;/strong&gt;&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;git log&lt;/strong&gt;&lt;br /&gt;commit 56770a2af0d3a9d636f38993eb12d517bdf9949f&lt;br /&gt;Author: Foo Bar &amp;lt;foobar@example.com&amp;gt;&lt;br /&gt;Date:   XXX Nov XX 11:04:06 2011 +0900&lt;br /&gt;&lt;br /&gt;    Third commit removes it&lt;br /&gt;&lt;br /&gt;commit cbd23c48a7d24cba52bd1e6ff795ea06f4d7d710&lt;br /&gt;Author: Foo Bar &amp;lt;foobar@example.com&amp;gt;&lt;br /&gt;Date:   XXX Nov XX 11:03:19 2011 +0900&lt;br /&gt;&lt;br /&gt;    Second commit contains big data&lt;br /&gt;&lt;br /&gt;commit f3241b3584cbd2e9ede54bcb6bd7f8363e7615c3&lt;br /&gt;Author: Foo Bar &amp;lt;foobar@example.com&amp;gt;&lt;br /&gt;Date:   XXX Nov XX 11:02:10 2011 +0900&lt;br /&gt;&lt;br /&gt;    First commit&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;git rebase --interactive f3241b3584cbd2e9ede54bcb6bd7f8363e7615c3&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;巨大な内容を削除するためのコミット (ここでは "Third commit") を squash し、その前の "Second commit" と合わせて 1 つにしてしまいます。これで、論理的には、巨大な内容のコミットは無かった事になります。&lt;pre&gt;&lt;br /&gt;pick cbd23c4 Second commit contains big data&lt;br /&gt;&lt;strong&gt;squash&lt;/strong&gt; 56770a2 Third commit removes it&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ヒストリを破壊するこの変更は、当然リモートリポジトリに対して全く fast-forward ではないので、"--force" で push します。&lt;pre&gt;&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;git log&lt;/strong&gt;&lt;br /&gt;commit f6ed91fc820e974f1221fe621e34b17fbd6e317d&lt;br /&gt;Author: Foo Bar &amp;lt;foobar@example.com&amp;gt;&lt;br /&gt;Date:   XXX Nov XX 11:03:19 2011 +0900&lt;br /&gt;&lt;br /&gt;    Second commit contains big data&lt;br /&gt;&lt;br /&gt;    Third commit removes it&lt;br /&gt;&lt;br /&gt;commit f3241b3584cbd2e9ede54bcb6bd7f8363e7615c3&lt;br /&gt;Author: Foo Bar &amp;lt;foobar@example.com&amp;gt;&lt;br /&gt;Date:   XXX Nov XX 11:02:10 2011 +0900&lt;br /&gt;&lt;br /&gt;    First commit&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;git push --force&lt;/strong&gt;&lt;br /&gt;Counting objects: 5, done.&lt;br /&gt;Writing objects: 100% (3/3), 278 bytes, done.&lt;br /&gt;Total 3 (delta 0), reused 0 (delta 0)&lt;br /&gt;Unpacking objects: 100% (3/3), done.&lt;br /&gt;To file:///home/nonpriv/repos/&lt;br /&gt; + 56770a2...f6ed91f master -&amp;gt; master (forced update)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;さて、小さくなったでしょうか。&lt;pre&gt;&lt;br /&gt;[nonpriv@sl6kdev work]$ &lt;strong&gt;cd ~&lt;/strong&gt;&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;git clone file:///home/nonpriv/repos/ ~/work3/&lt;/strong&gt;&lt;br /&gt;Initialized empty Git repository in /home/nonpriv/work3/.git/&lt;br /&gt;remote: Counting objects: 6, done.&lt;br /&gt;remote: Compressing objects: 100% (2/2), done.&lt;br /&gt;remote: Total 6 (delta 0), reused 0 (delta 0)&lt;br /&gt;Receiving objects: 100% (6/6), 459 bytes, done.&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;du -hs ~/work3/&lt;/strong&gt;&lt;br /&gt;160K    /home/nonpriv/work3&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;だいぶ小さくなりました。良いようです。&lt;p&gt;non-fast-forward を "--force" で push してしまったので、それ以前に clone されていた別のワークは危険です。消しておきましょう。&lt;pre&gt;&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;rm -fr ~/work2/&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;以上です。&lt;p&gt;&lt;strong&gt;注意:&lt;/strong&gt; squash した結果を push したレポジトリ (上記の例では ~/repos/) には、実はまだ squash で潰されたはずの内容が残っています。あまり追求していないので、実体として何が残っているのかはよく知りません。&lt;pre&gt;&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;du -hs ~/repos/&lt;/strong&gt;&lt;br /&gt;11M     /home/nonpriv/repos/&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;そしてここから clone する際、ローカルパスの URL 形式 ("file://～") ではなくローカルのパスを指定して clone してしまうと、Git はローカルのコピーやハードリンクを用いてワークを作成してしまうため、小さくなりません。&lt;pre&gt;&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;git clone ~/repos/ ~/work4/&lt;/strong&gt;&lt;br /&gt;Initialized empty Git repository in /home/nonpriv/work4/.git/&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;du -hs ~/work4/&lt;/strong&gt;&lt;br /&gt;11M     /home/nonpriv/work4/&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;レポジトリを clone しなおして、~/repos/ を入れかえておくのも手かと思います。&lt;pre&gt;&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;git clone --mirror file:///home/nonpriv/repos/ ~/repos-new/&lt;/strong&gt;&lt;br /&gt;Initialized empty Git repository in /home/nonpriv/repos-new/&lt;br /&gt;remote: Counting objects: 6, done.&lt;br /&gt;remote: Compressing objects: 100% (2/2), done.&lt;br /&gt;remote: Total 6 (delta 0), reused 0 (delta 0)&lt;br /&gt;Receiving objects: 100% (6/6), done.&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;rm -fr ~/repos/&lt;/strong&gt;&lt;br /&gt;[nonpriv@sl6kdev ~]$ &lt;strong&gt;mv ~/repos-new/ ~/repos/&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;git-clone(1) のヘルプには「ローカルパス指定と file://～ とでは、大差ないよ」とか書けれていますが、実のところは違います。特に事情がなければ、常に "file://～" なりネットワーク接続指定なりを用いる方が安全だと思います。ソースで言うと、&lt;a href=https://github.com/git/git/blob/master/builtin/clone.c&gt;builtin/clone.c&lt;/a&gt; の cmd_clone() における、"clone_local(path, git_dir)" と "transport_get_remote_refs(transport)" との is_local フラグによる分岐を参照してください。&lt;p&gt;もっとも、ストレージリソースが潤沢にあるならば、どっちでもいいんですけどね。&lt;p&gt;&lt;strong&gt;注意 2:&lt;/strong&gt; ブランチを切っているようであれば、ワーク側でひととおり checkout しておいてやる必要もあります。参考 → 「&lt;a href="http://stackoverflow.com/questions/1029969/why-is-my-git-repository-so-big"&gt;Why is my git repository so big? - Stack Overflow&lt;/a&gt;」。&lt;p&gt;では。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-2661538080309822208?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/2661538080309822208/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/11/git.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/2661538080309822208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/2661538080309822208'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/11/git.html' title='肥大化した個人利用の Git ワークを縮小する'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-767271635212875402</id><published>2011-11-22T19:14:00.001+09:00</published><updated>2011-11-24T10:58:21.859+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RHEL6'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><title type='text'>RPM 版 Tomcat のマルチインスタンス化</title><content type='html'>&lt;p&gt;初めての投稿になります。サイオスの鎌田です。&lt;/p&gt;&lt;p&gt;RHEL6 からは、提供される Tomcat のバージョンが 6.x 系となり、OpenJDK との組み合わせで今後利用が増えてくるのではないでしょうか。社内向けのツールなど、簡単な Web アプリケーションであれば RHEL6 上で動作させ、運用していくことも十分に考えられるかと思います。&lt;/p&gt;&lt;p&gt;しかし、RPM 版 Tomcat を用いる上で、こういった問題を抱えてはいないでしょうか。Web アプリケーション同士の相性により、1つの Tomcat インスタンス上で同時に動作させると問題が生じるため、仕方なくコミュニティ版の Tomcat で環境を構築するといった問題です。代表的な例として、Atlassian 社製のエンタープライズ Wiki アプリケーションである Confluence と、同社の ITS である JIRA は、それぞれを 1つの Tomcat インスタンス上で動作させることはサポート対象外としています。&lt;/p&gt;&lt;p&gt;実は、RPM 版 Tomcat でマルチインスタンス化させることは可能なのです。元々の Tomcat の機能を使うだけなのですが、RPM 版 Tomcat では init スクリプトでマルチインスタンスを管理できるように考慮されて作られています。以下、その手順を述べます。&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;p&gt;まず、新しくインスタンスを作るための準備を行います。適当なディレクトリを決め、その下に Tomcat のディレクトリ構造を作るのです。ここでは、&lt;code&gt;CATALINA_BASE&lt;/code&gt; と呼びますが、例として /usr/share/sample といったディレクトリを作成することを想定します。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# mkdir -m 775 /usr/share/sample \&lt;br /&gt;    /usr/share/sample/bin \&lt;br /&gt;    /usr/share/sample/conf \&lt;br /&gt;    /usr/share/sample/temp \&lt;br /&gt;    /usr/share/sample/webapps \&lt;br /&gt;    /usr/share/sample/work \&lt;br /&gt;    /var/log/sample&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;次に、作成したディレクトリの所有者と所有グループを適切に変更します。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# chown root:tomcat /usr/share/sample/bin \&lt;br /&gt;    /usr/share/sample/conf \&lt;br /&gt;    /usr/share/sample/temp \&lt;br /&gt;    /usr/share/sample/webapps \&lt;br /&gt;    /usr/share/sample/work \&lt;br /&gt;    /var/log/sample&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;次に、Tomcat をマルチインスタンス化させるにあたって、必要なファイルのコピーや、シンボリックリンクを張ります。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# ln -s /usr/share/tomcat6/bin/tomcat-juli.jar /usr/share/sample/bin/tomcat-juli.jar&lt;br /&gt;# cp -p /etc/tomcat6/server.xml /usr/share/sample/conf/&lt;br /&gt;# ln -s /etc/tomcat6/catalina.properties /usr/share/sample/conf/catalina.properties&lt;br /&gt;# ln -s /var/log/sample /usr/share/sample/logs&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;これで、&lt;code&gt;CATALINA_BASE&lt;/code&gt; の準備は終わりました。&lt;/p&gt;&lt;p&gt;次は、新しく作成したインスタンスの設定を適切に変更します。&lt;code&gt;$CATALINA_BASE/conf/server.xml&lt;/code&gt; が主に変更する設定となります。マルチインスタンス化するにあたって、デフォルトのシャットダウンポート 8005 番や、AJP ポート 8009 番を他のインスタンスと衝突しないように変更する必要があります。&lt;/p&gt;&lt;p&gt;これで Tomcat の動作に必要な情報は一通り揃っていますが、今度は service コマンドを用いてインスタンスの起動や終了を可能にするため、init スクリプトを用意します。まずは、&lt;code&gt;/etc/sysconfig/tomcat6&lt;/code&gt; を &lt;code&gt;/etc/sysconfig/&amp;lt;service_name&amp;gt;&lt;/code&gt; にコピーします。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# cp -p /etc/sysconfig/tomcat6 /etc/sysconfig/sample&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;コピーした &lt;code&gt;/etc/sysconfig/&amp;lt;service_name&amp;gt;&lt;/code&gt; の内容を編集します。編集する箇所は &lt;code&gt;CATALINA_BASE&lt;/code&gt; / &lt;code&gt;CATALINA_TMPDIR&lt;/code&gt; / &lt;code&gt;CATALINA_PID&lt;/code&gt; が該当するかと思います。それぞれ適切なディレクトリと PID ファイルパスを指定してください。&lt;/p&gt;&lt;p&gt;最後に、&lt;code&gt;/etc/init.d/tomcat6&lt;/code&gt; へのシンボリックリンク &lt;code&gt;/etc/init.d/&amp;lt;service_name&amp;gt;&lt;/code&gt; を作成し、chkconfig コマンドでサービスを追加します。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# ln -s /etc/init.d/tomcat6 /etc/init.d/sample&lt;br /&gt;# chkconfig --add sample&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;以上で、すべての準備は整いました。あとは &lt;code&gt;$CATALINA_BASE/webapps/&lt;/code&gt; ディレクトリ配下に WAR ファイル等を配置してサービスを起動したり、終了したりして動作を確認してください。&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# service sample start&lt;br /&gt;# service sample stop&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-767271635212875402?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/767271635212875402/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/11/rpm-tomcat.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/767271635212875402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/767271635212875402'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/11/rpm-tomcat.html' title='RPM 版 Tomcat のマルチインスタンス化'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-3925022124557584544</id><published>2011-11-17T10:47:00.000+09:00</published><updated>2011-11-29T09:48:53.367+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Postgres Plus'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>PostgreSQL を SNMP で監視する</title><content type='html'>&lt;p&gt;お世話になっております、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;&lt;a href="http://pgfoundry.org/projects/pgsnmpd/"&gt;pgsnmpd&lt;/a&gt; は、RFC1697 (RDBMS-MIB) に準拠した、PostgreSQL 用の SNMP エージェントです。CentOS 5 にインストールして試してみます。&lt;p&gt;まずは、ビルドに必要なパッケージをインストールします。&lt;pre&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;yum install -y gcc net-snmp-devel zlib-devel openssl-devel libxslt-devel pam-devel libtermcap-devel&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ビルドします。Postgres Plus は、&lt;a href=http://sios-oss.blogspot.com/2011/10/postgresql-zabbix.html&gt;以前の記事&lt;/a&gt;で入れた通りです。pg_env.sh で pg_config にパスを通しておかないとビルドができませんので注意してください。&lt;pre&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;. /opt/PostgresPlus/9.0SS/pg_env.sh&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;tar zxvf pgsnmpd-1.0.tgz&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;cd pgsnmpd-1.0/&lt;/strong&gt;&lt;br /&gt;[root@co5v pgsnmpd-1.0]# make&lt;br /&gt;(中略)&lt;br /&gt;[root@co5v pgsnmpd-1.0]# &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;適当な設定を書いてみます。&lt;pre&gt;&lt;br /&gt;[root@co5v pgsnmpd-1.0]# &lt;strong&gt;cat test.conf&lt;/strong&gt;&lt;br /&gt;com2sec readwrite default public&lt;br /&gt;group MyRWGroup v2c readwrite&lt;br /&gt;view all included .1 80&lt;br /&gt;access MyRWGroup "" any noauth exact all all none&lt;br /&gt;agentaddress localhost:10161&lt;br /&gt;[root@co5v pgsnmpd-1.0]# &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;実行してみます。&lt;pre&gt;&lt;br /&gt;[root@co5v pgsnmpd-1.0]# &lt;strong&gt;./pgsnmpd -c test.conf -C "dbname=postgres host=localhost user=postgres password=edb"&lt;/strong&gt;&lt;br /&gt;Could not set search path because of some problem with the set query&lt;br /&gt;[init_smux] bind failed: Permission denied&lt;br /&gt;PGSQL-SNMP-Ver1.0 is up and running.&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;net-snmp-utils を入れて、試しに叩いてみます。&lt;pre&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;yum install -y net-snmp-utils&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;snmpwalk -v 2c -c public localhost:10161 mib-2.39&lt;/strong&gt;&lt;br /&gt;SNMPv2-SMI::mib-2.39.1.1.1.2.1 = OID: SNMPv2-SMI::enterprises.27645.1&lt;br /&gt;SNMPv2-SMI::mib-2.39.1.1.1.2.11866 = OID: SNMPv2-SMI::enterprises.27645.11866&lt;br /&gt;SNMPv2-SMI::mib-2.39.1.1.1.2.11874 = OID: SNMPv2-SMI::enterprises.27645.11874&lt;br /&gt;(中略)&lt;br /&gt;SNMPv2-SMI::mib-2.39.1.9.1.2.11874.1 = Hex-STRING: 07 DB 0A 1F 0F 1E 27 A8 2B 09 00&lt;br /&gt;SNMPv2-SMI::mib-2.39.1.9.1.2.16393.1 = Hex-STRING: 07 DB 0A 1F 0F 1E 27 A8 2B 09 00&lt;br /&gt;SNMPv2-SMI::mib-2.39.1.9.1.2.16393.1 = No more variables left in this MIB View (It is past the end of the MIB tree)&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;snmpwalk -v 2c -c public localhost:10161 mib-2.39.1.2.1.2.1&lt;/strong&gt;&lt;br /&gt;SNMPv2-SMI::mib-2.39.1.2.1.2.1 = STRING: "PostgreSQL 9.0.2 on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit"&lt;br /&gt;[root@co5v ~]# &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;正直申し上げると、RDBMS-MIB による監視に馴染みがないので実用的かどうかは分からないのですが、パスワード認証なしでも状態が取れる点にメリットはあるかと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-3925022124557584544?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/3925022124557584544/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/11/postgresql-snmp.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/3925022124557584544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/3925022124557584544'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/11/postgresql-snmp.html' title='PostgreSQL を SNMP で監視する'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-2444900843685538636</id><published>2011-11-10T14:26:00.000+09:00</published><updated>2011-11-29T09:46:21.669+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='RPM'/><title type='text'>ソースの入手と再ビルド ～ CentOS / Scientific Linux 編</title><content type='html'>お疲れ様です、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;今どき組み込み系でもない限り、ほとんどの Linux ディストリビューションは高度なパッケージ管理機能（メタ・パッケージ管理機能）を備えており、ネットワーク上からパッケージを入手して、依存関係を解決しつつインストールやアップデートをできるようになっています。代表的なツールとしては、Red Hat 系の RPM パッケージ用の up2date, Yum や、Debian 系の deb パッケージに対する apt, Aptitude などであり、みなさんも日常的にご利用だと思います。&lt;p&gt;しかし残念なことに、せっかくのそれらの機能を、コンパイル済みのバイナリを入手するためにしか使っていない方が多いようです。せっかくのオープンソース OS 環境なのですから、ソースの入手・展開をしての解析、設定を変更しての再構築も容易になっていることを、もっと知ってもらいたいと思います。&lt;p&gt;まずはパッケージの入手です。yum-utils パッケージに含まれる yum-downloader コマンドを使うと、現在有効になっているレポジトリの "base" 等の名前に後ろに "-source" をつけたレポジトリを一時的に有効にし、ソース・パッケージを入手してきてくれます。&lt;pre&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;yum install -y yum-utils&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;[root@co5v ~]#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;下記の設定の追加は、CentOS 5 で必要です。Scientific Linux では最初から有効になっています。&lt;pre&gt;&lt;br /&gt;[root@co5v ~] &lt;strong&gt;cat &amp;lt;&amp;lt;'EOF' &amp;gt; /etc/yum.repos.d/CentOS-Source.repo&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;[base-source]&lt;br /&gt;name=CentOS-$releasever - Base Source Packages&lt;br /&gt;baseurl=http://mirror.centos.org/centos/$releasever/os/SRPMS/&lt;br /&gt;gpgcheck=1&lt;br /&gt;enabled=0&lt;br /&gt;gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever&lt;br /&gt;&lt;br /&gt;[updates-source]&lt;br /&gt;name=CentOS-$releasever - Updates Source Packages&lt;br /&gt;baseurl=http://mirror.centos.org/centos/$releasever/updates/SRPMS/&lt;br /&gt;gpgcheck=1&lt;br /&gt;enabled=0&lt;br /&gt;gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever&lt;br /&gt;EOF&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;以上で行け…るはずだったんですが、あれ？ CentOS 5 で、&lt;a href=http://mirror.centos.org/centos/5/os/SRPMS/readme.txt&gt;書き置きの readme&lt;/a&gt; 一つを残して、ミラーレポジトリから SRPM が軒並み片付けられてしまっていますね。弱っちゃうな。では指示の通りに、かわりに以下を指定しましょう。バージョン (5.7) を直指定していますので、環境に合わせて変更してください。&lt;pre&gt;&lt;br /&gt;[root@co5v ~] &lt;strong&gt;cat &amp;lt;&amp;lt;'EOF' &amp;gt; /etc/yum.repos.d/CentOS-Source.repo&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;[base-source]&lt;br /&gt;name=CentOS-$releasever - Base Source Packages&lt;br /&gt;baseurl=http://vault.centos.org/5.7/os/SRPMS/&lt;br /&gt;gpgcheck=1&lt;br /&gt;enabled=0&lt;br /&gt;gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever&lt;/strong&gt;&lt;br /&gt;[root@co5kdev ~]# &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;試しに "which" パッケージのビルドをするために、ビルド時に依存するものを入れておきます。yum-builddep コマンドを使います。&lt;pre&gt;&lt;br /&gt;[root@co5kdev ~]# &lt;strong&gt;yum-builddep -y which&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;[root@co5kdev ~]# &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;ようやく、ダウンロード &amp;amp; ビルドです。&lt;pre&gt;&lt;br /&gt;[nonpriv@co5kdev ~]$ &lt;strong&gt;yumdownloader --source which&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;[nonpriv@co5kdev ~]$ &lt;strong&gt;mkdir -p ~/rpm/{SOURCES,BUILD,SRPMS,RPMS}&lt;/strong&gt;&lt;br /&gt;[nonpriv@co5kdev ~]$ &lt;strong&gt;echo "%_topdir $HOME/rpm" &amp;gt; ~/.rpmmacros&lt;/strong&gt;&lt;br /&gt;[nonpriv@co5kdev ~]$ &lt;strong&gt;rpm -i which-2.16-7.src.rpm&lt;/strong&gt;&lt;br /&gt;[nonpriv@co5kdev ~]$ &lt;strong&gt;cd rpm/SPECS/&lt;/strong&gt;&lt;br /&gt;[nonpriv@co5kdev SPECS]$ &lt;strong&gt;rpmbuild -ba which.spec&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;伸張ファイルの検査中: /usr/lib/rpm/check-files /var/tmp/which-2.16-7-root&lt;br /&gt;書き込み完了: /home/nonpriv/rpm/SRPMS/which-2.16-7.src.rpm&lt;br /&gt;書き込み完了: /home/nonpriv/rpm/RPMS/x86_64/which-2.16-7.x86_64.rpm&lt;br /&gt;実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.38918&lt;br /&gt;+ umask 022&lt;br /&gt;+ cd /home/nonpriv/rpm/BUILD&lt;br /&gt;+ cd which-2.16&lt;br /&gt;+ rm -rf /var/tmp/which-2.16-7-root&lt;br /&gt;+ exit 0&lt;br /&gt;[nonpriv@co5kdev SPECS]&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;じゃんじゃんソースを入手して、SPEC をいじったりソースを読んだりしましょう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-2444900843685538636?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/2444900843685538636/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/11/centosscientific-linux.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/2444900843685538636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/2444900843685538636'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/11/centosscientific-linux.html' title='ソースの入手と再ビルド ～ CentOS / Scientific Linux 編'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-5139133836903557411</id><published>2011-11-03T11:35:00.000+09:00</published><updated>2011-11-29T09:43:59.074+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Postgres Plus'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Zabbix'/><title type='text'>PostgreSQL をバックエンドにして Zabbix を動かす</title><content type='html'>&lt;p&gt;お疲れ様です、サイオス &lt;span title="那賀 樹一郎,Kiichiro NAKA,knaka"&gt;那賀&lt;/span&gt;です。&lt;p&gt;&lt;a href=http://www.zabbix.com/&gt;Zabbix&lt;/a&gt; は、広く利用されている、オープンソースの統合監視ツールです。単純な監視ツールである &lt;a href="http://www.nagios.org/"&gt;Nagios&lt;/a&gt; や &lt;a href="http://munin-monitoring.org/"&gt;Munin&lt;/a&gt; などと比べて、より詳細な監視が可能なエージェント型の構成をとり、プロキシやノードによる分散も考慮するなど、これ一つでとりあえず必要充分と言えるのではないでしょうか。&lt;p&gt;関連リンク:&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.zabbix.com/jp/"&gt;Zabbixオフィシャル日本語サイト :: エンタープライズクラスの分散監視オープンソースソリューション&lt;/a&gt;&lt;li&gt;&lt;a href="http://www.zabbix.jp/"&gt;ZABBIX-JP - Un-Official Support Page&lt;/a&gt;&lt;/ul&gt;&lt;p&gt;さて、Zabbix はそのデータ保持に使用する RDBMS として PostgreSQL, MySQL, Oracle, SQLite をサポートしています。ところが世の Zabbix の書籍やインストール手順は、ほとんどが MySQL 用なので、せっかくですから PostgreSQL 用を書いてみようと思います。開発も含めて MySQL が Zabbix のプライマリ DB 扱いなので分は悪いのですが、それほど複雑なクエリは発行していないようですので、問題はないでしょう。&lt;p&gt;今回は CentOS 5 上に、日本のユーザ会配布の YUM レポジトリから Zabbix 1.8 を導入して構築をしてみます。各バイナリのバージョン等は、適宜現状のものに読み替えてください。また、同じ PostgreSQL でも、今回は&lt;a href=http://www.enterprisedb.com/&gt;米 EnterpriseDB 社&lt;/a&gt;の &lt;a href="http://www.sios.com/products/oss/postgres/"&gt;Postgres Plus&lt;/a&gt; を使用してみます。&lt;p&gt;YUM によるインストールについては&lt;a href="http://www.zabbix.jp/modules/bwiki/index.php?ZABBIX-JP%A4%CEyum%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA%CD%F8%CD%D1%CA%FD%CB%A1"&gt;こちら&lt;/a&gt;に案内があります。&lt;pre&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;rpm -Uvh http://www.zabbix.jp/binaries/relatedpkgs/rhel5/x86_64/zabbix-jp-release-5-3.noarch.rpm&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;alternatives --display zabbix-jp-release&lt;/strong&gt;&lt;br /&gt;zabbix-jp-release -ステータスは自動です。&lt;br /&gt;リンクは現在 /usr/share/zabbix-jp-release/zabbix-jp-1.6.repo を指しています。&lt;br /&gt;/usr/share/zabbix-jp-release/zabbix-jp-1.1.repo - 優先項目 10&lt;br /&gt;/usr/share/zabbix-jp-release/zabbix-jp-1.4.repo - 優先項目 20&lt;br /&gt;/usr/share/zabbix-jp-release/zabbix-jp-1.6.repo - 優先項目 40&lt;br /&gt;/usr/share/zabbix-jp-release/zabbix-jp-1.8.repo - 優先項目 30&lt;br /&gt;現在の「最適」バージョンは /usr/share/zabbix-jp-release/zabbix-jp-1.6.repo です 。&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;alternatives --config zabbix-jp-release&lt;/strong&gt;&lt;br /&gt; &lt;br /&gt;4 プログラムがあり 'zabbix-jp-release' を提供します。&lt;br /&gt;&lt;br /&gt;  選択       コマンド&lt;br /&gt;-----------------------------------------------&lt;br /&gt;   1           /usr/share/zabbix-jp-release/zabbix-jp-1.1.repo&lt;br /&gt;   2           /usr/share/zabbix-jp-release/zabbix-jp-1.4.repo&lt;br /&gt;*+ 3           /usr/share/zabbix-jp-release/zabbix-jp-1.6.repo&lt;br /&gt;   4           /usr/share/zabbix-jp-release/zabbix-jp-1.8.repo&lt;br /&gt;&lt;br /&gt;Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:&lt;strong&gt;4&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;yum clean all&lt;/strong&gt;&lt;br /&gt;Loaded plugins: fastestmirror&lt;br /&gt;Cleaning up Everything&lt;br /&gt;Cleaning up list of fastest mirrors&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;yum install -y zabbix-agent zabbix-server-pgsql zabbix-web-pgsql&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;chkconfig iptables off&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;service iptables stop&lt;/strong&gt;&lt;br /&gt;ファイアウォールルールを適用中:                            [  OK  ]&lt;br /&gt;チェインポリシーを ACCEPT に設定中filter                   [  OK  ]&lt;br /&gt;iptables モジュールを取り外し中                            [  OK  ]&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;chkconfig httpd on&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;service httpd start&lt;/strong&gt;&lt;br /&gt;httpd を起動中:                                            [  OK  ]&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;chkconfig zabbix-server on&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;service zabbix-server start&lt;/strong&gt;&lt;br /&gt;Starting zabbix server:                                    [  OK  ]&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;chkconfig zabbix-agent on&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;service zabbix-agent start&lt;/strong&gt;&lt;br /&gt;Starting zabbix agent:                                     [  OK  ]&lt;br /&gt;[root@co5v ~]# &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;次に Postgres Plus です。上記 URL から辿れる &lt;a href="http://postgres.sios.com/"&gt;Postgres Plus のユーザーサイト&lt;/a&gt;へログインし、「ダウンロード」から "Postgres Plus Standard Server 9.0 for Linux 64 ビット" を入手します。&lt;p&gt;次に、CentOS 上に root でログインします。Postgres Plus にはウィザード形式の GUI インストーラもついているのですが、慣れてくると面倒なので、今回はコマンドラインから必要な情報を全て与えて、自動的にインストールをしてみます。オプションの詳細については、"--help" を参照してください。&lt;pre&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;chmod 755 postgresplus-9.0.2-1-linux-x64.bin&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;./postgresplus-9.0.2-1-linux-x64.bin \&lt;br /&gt; --mode unattended \&lt;br /&gt; --superpassword edb \&lt;br /&gt; --enable-components dbserver \&lt;br /&gt; --disable-components \&lt;br /&gt;  slony,pgJdbc,postgis,psqlOdbc,npgsql,pgbouncer,pgmemcache,pgagent \&lt;br /&gt; --dbInstallTune 0 \&lt;br /&gt; --updateNotification 0 \&lt;br /&gt; --existingEmail dummy@example.com \&lt;br /&gt; --existingpassword dummypass \&lt;br /&gt; --locale ja_JP.utf8&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;chkconfig --list postgresql-9.0&lt;/strong&gt;&lt;br /&gt;postgresql-9.0  0:off   1:off   2:on    3:on    4:on    5:on    6:off&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;service postgresql-9.0 status&lt;/strong&gt;&lt;br /&gt;pg_ctl: server is running (PID: 13099)&lt;br /&gt;/opt/PostgresPlus/9.0SS/bin/postgres "-D" "/opt/PostgresPlus/9.0SS/data"&lt;br /&gt;[root@co5v ~]#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;もし ident しかないようでしたら、password なり md5 なりでパスワード認証をするようにしておきます。Postgres Plus では、デフォルトで local への all のアクセスを MD5 認証について許可するようになっているので不要ですが、一応以下のように明示的に設定し、サービスを再スタートさせて反映させておきます。標準的な RPM ベースの PostgreSQL ですと、ident 認証のみになっていると思います。&lt;pre&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;cp /opt/PostgresPlus/9.0SS/data/pg_hba.conf /opt/PostgresPlus/9.0SS/data/pg_hba.conf.orig&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;vi /opt/PostgresPlus/9.0SS/data/pg_hba.conf&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;diff -uNr /opt/PostgresPlus/9.0SS/data/pg_hba.conf.orig \&lt;/strong&gt;&lt;br /&gt; /opt/PostgresPlus/9.0SS/data/pg_hba.conf&lt;br /&gt;--- /opt/PostgresPlus/9.0SS/data/pg_hba.conf.orig&lt;br /&gt;+++ /opt/PostgresPlus/9.0SS/data/pg_hba.conf&lt;br /&gt;@@ -73,6 +73,7 @@&lt;br /&gt; # TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD&lt;br /&gt;&lt;br /&gt; # "local" is for Unix domain socket connections only&lt;br /&gt;+&lt;strong&gt;local   zabbix          zabbix                                  md5&lt;/strong&gt;&lt;br /&gt; local   all             all                                     md5&lt;br /&gt; # IPv4 local connections:&lt;br /&gt; host    all             all             127.0.0.1/32            md5&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;service postgresql-9.0 restart&lt;/strong&gt;&lt;br /&gt;Restarting PostgreSQL 9.0:&lt;br /&gt;waiting for server to shut down.... done&lt;br /&gt;server stopped&lt;br /&gt;waiting for server to start.... done&lt;br /&gt;server started&lt;br /&gt;PostgreSQL 9.0 restarted successfully&lt;br /&gt;[root@co5v ~]#[root@co5v ~]#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;次に、Zabbix 用のアカウントとデータベースを作成します。MySQL だとスキーマでネームスペースを作るところですが、そこは PostgreSQL ですので、データベース "zabbix" を作り、そこへデータを格納するようにします。ロールも "zabbix" とします。createuser の "-P" オプションで、新しいロールのためのパスワードを設定するようにします。うっかりクセで "-W" を指定しないように――"-W" は接続のためのパスワードであり、新ユーザのパスワードではありません。&lt;pre&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;echo localhost:5432:postgres:postgres:edb &gt; ~/.pgpass&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;chmod 600 ~/.pgpass&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;. /opt/PostgresPlus/9.0SS/pg_env.sh&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;createdb -U postgres zabbix&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;createuser -U postgres --pwprompt --no-superuser --no-createrole --no-createdb zabbix&lt;/strong&gt;&lt;br /&gt;Enter password for new role: &lt;strong&gt;zabbix&lt;/strong&gt;&lt;br /&gt;Enter it again: &lt;strong&gt;zabbix&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE zabbix TO zabbix"&lt;/strong&gt;&lt;br /&gt;GRANT&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;echo localhost:5432:zabbix:zabbix:zabbix &gt;&gt; ~/.pgpass&lt;/strong&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;psql -x -U zabbix zabbix -c "SELECT now()"&lt;/strong&gt; # 試しに&lt;br /&gt;-[ RECORD 1 ]----------------------&lt;br /&gt;now | 2011-XX-XX 10:52:13.482851+09&lt;br /&gt;&lt;br /&gt;[root@co5v ~]#&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Zabbix の初期データを流しこんで、前準備は終了です。&lt;pre&gt;&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;psql -U zabbix zabbix &lt; /usr/share/doc/zabbix-server-1.8.*/schema/postgresql.sql&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;psql -U zabbix zabbix &lt; /usr/share/doc/zabbix-server-1.8.*/data/data.sql&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;[root@co5v ~]# &lt;strong&gt;psql -U zabbix zabbix &lt; /usr/share/doc/zabbix-server-1.8.*/data/images_pgsql.sql&lt;/strong&gt;&lt;br /&gt;(中略)&lt;br /&gt;[root@co5v ~]# &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;後は、http://～/zabbix/ に接続して、設定を行います。今回は、第 4 ステップ "Configure DB connection" での設定は以下のようになりました。"Test connection" をクリックして、接続が "Ok" となれば次へ進みます。&lt;table&gt;&lt;tr&gt;&lt;td align=right&gt;Type:&lt;/td&gt;&lt;td&gt;PostgreSQL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=right&gt;Host:&lt;/td&gt;&lt;td&gt;localhost&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=right&gt;Port:&lt;/td&gt;&lt;td&gt;0 ("0" でデフォルトの 5432 を利用)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=right&gt;Name:&lt;/td&gt;&lt;td&gt;zabbix&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=right&gt;User:&lt;/td&gt;&lt;td&gt;zabbix&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=right&gt;Password:&lt;/td&gt;&lt;td&gt;zabbix&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-CNbU_Z5uVRU/Tq4LLLrGuhI/AAAAAAAAAAo/MHZ8udfXuMg/s1600/zabbix.png" imageanchor="1" style=""&gt;&lt;img border="0" height="304" width="400" src="http://3.bp.blogspot.com/-CNbU_Z5uVRU/Tq4LLLrGuhI/AAAAAAAAAAo/MHZ8udfXuMg/s400/zabbix.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;それ以降の設定、使い方は、他の DB と同様です。web コンソールの初期パスワードは "Admin/zabbix" です。&lt;p&gt;同じ Zabbix でも、バックエンドを PostgreSQL にすることで、PostgreSQL ならではのオンライン物理バックアップや、ストリーミング・レプリケーションによる代替機の用意など、他 DB とは違った運用が考えられるのではないかと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-5139133836903557411?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/5139133836903557411/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/10/postgresql-zabbix.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5139133836903557411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/5139133836903557411'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/10/postgresql-zabbix.html' title='PostgreSQL をバックエンドにして Zabbix を動かす'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-CNbU_Z5uVRU/Tq4LLLrGuhI/AAAAAAAAAAo/MHZ8udfXuMg/s72-c/zabbix.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-7530441130549329648</id><published>2011-11-01T10:53:00.000+09:00</published><updated>2011-12-16T10:00:37.061+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RHEL6'/><category scheme='http://www.blogger.com/atom/ns#' term='CentOS 6'/><category scheme='http://www.blogger.com/atom/ns#' term='デスクトップ'/><category scheme='http://www.blogger.com/atom/ns#' term='Scientific Linux 6'/><title type='text'>CentOS 6.0 での GUI ログイン画面の変更方法</title><content type='html'>&lt;div style="text-align: left;"&gt;サイオステクノロジー 金田です。&lt;/div&gt;&lt;div style="text-align: left;"&gt;CentOS 6.0 から GUI ログイン画面にユーザー一覧が表示されるようになりました。(画像1)&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-nvsFCS0cqWQ/Tq9MNGJUHFI/AAAAAAAAAAw/q3GsPVqLVo8/s1600/dialog-1.PNG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-nvsFCS0cqWQ/Tq9MNGJUHFI/AAAAAAAAAAw/q3GsPVqLVo8/s200/dialog-1.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;u&gt;画像1 CentOS 6.0 デフォルトのログイン画面&lt;/u&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;システムのユーザー数が少なければあまり気にならないのですが、多人数が登録されているシステムでは自分のユーザー名を探すのはちょっと面倒です。&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;そこで、ユーザー一覧を表示せず CentOS 5 系(画像2)のような、ユーザー名入力のログイン画面になるようにする設定を紹介します。&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-B3HL-H2WYZI/Tq9Ml6rtitI/AAAAAAAAAA4/CDJSWSwZv1U/s1600/dialog-0.PNG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-B3HL-H2WYZI/Tq9Ml6rtitI/AAAAAAAAAA4/CDJSWSwZv1U/s200/dialog-0.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;u&gt;画像2 CentOS 5系のログイン画面&lt;/u&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;エディタで /etc/gconf/gconf.xml.defaults/%gconf-tree.xml を開いて、下記の行を検索します。&lt;br /&gt;&lt;br /&gt;[編集前]&lt;/div&gt;&lt;pre&gt;&amp;lt;entry name="disable_user_list" mtime="1312141029" type="schema" stype="bool" owner="gdm-simple-greeter" gettext_domain="gdm"&amp;gt;&lt;br /&gt;        &amp;lt;local_schema locale="C" short_desc="既知のユーザをログイン・ウィンドウに表示しない"&amp;gt;&lt;br /&gt;                &amp;lt;default type="bool" value="false"/&amp;gt;&lt;br /&gt;                &amp;lt;longdesc&amp;gt;TRUE にすると、既知のユーザがログイン・ウィンドウへ表示されなくなります。&amp;lt;/longdesc&amp;gt;&lt;br /&gt;        &amp;lt;/local_schema&amp;gt;&lt;br /&gt;&amp;lt;/entry&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: left;"&gt;&amp;lt;entry name="disable_user_list" のエントリ中の &amp;lt;default type="bool" &lt;u&gt;value="false"/&amp;gt;&lt;/u&gt; の&amp;nbsp;value の値を ture に変更します。&lt;br /&gt;&lt;br /&gt;[編集後]&lt;/div&gt;&lt;pre&gt;&amp;lt;entry name="disable_user_list" mtime="1312141029" type="schema" stype="bool" owner="gdm-simple-greeter" gettext_domain="gdm"&amp;gt;&lt;br /&gt;        &amp;lt;local_schema locale="C" short_desc="既知のユーザをログイン・ウィンドウに表示しない"&amp;gt;&lt;br /&gt;                &amp;lt;default type="bool" value="&lt;b&gt;&lt;u&gt;true&lt;/u&gt;&lt;/b&gt;"/&amp;gt;&lt;br /&gt;                &amp;lt;longdesc&amp;gt;TRUE にすると、既知のユーザがログイン・ウィンドウへ表示されなくなります。&amp;lt;/longdesc&amp;gt;&lt;br /&gt;        &amp;lt;/local_schema&amp;gt;&lt;br /&gt;&amp;lt;/entry&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: left;"&gt;ファイルを保存しログアウトすると、ユーザー名入力のログイン画面(画像3)が表示されます。&lt;br /&gt;RHEL6 や Scientific Linux 6 でも同じ方法で変更できます。&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-B01k0kpnuGs/Tq9NANJe0vI/AAAAAAAAABA/sZUDQ2nLnbA/s1600/dialog-2.PNG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-B01k0kpnuGs/Tq9NANJe0vI/AAAAAAAAABA/sZUDQ2nLnbA/s200/dialog-2.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;u&gt;画像3 変更後の CentOS 6.0 のログイン画面&lt;/u&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-7530441130549329648?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/7530441130549329648/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/11/centos-60-gui.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/7530441130549329648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/7530441130549329648'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/11/centos-60-gui.html' title='CentOS 6.0 での GUI ログイン画面の変更方法'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-nvsFCS0cqWQ/Tq9MNGJUHFI/AAAAAAAAAAw/q3GsPVqLVo8/s72-c/dialog-1.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8005179850861707811.post-6978651938124421340</id><published>2011-10-20T01:08:00.001+09:00</published><updated>2011-11-25T16:31:39.873+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>Apache を SSL で使用する</title><content type='html'>&lt;div&gt;おがわです。&lt;/div&gt;&lt;div&gt;今回は、Apache を SSL の環境で使用できるようにしてみようと思います。Apache2.2.21 と OpenSSL1.0.0 を使用します。&lt;/div&gt;&lt;p&gt;■openssl1.0.0 をインストール&lt;br /&gt;-----------------------------------------------------------&lt;pre&gt;&lt;br /&gt;# wget http://www.openssl.org/source/openssl-1.0.0e.tar.gz&lt;br /&gt;# tar zxvf openssl-1.0.0e.tar.gz&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;--prefix オプションをつけてインストール先を指定します。今回はとりあえず、/opt の上にインストールします。&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# ./config --prefix=/opt/openssl&lt;br /&gt;# make&lt;br /&gt;# make install&lt;br /&gt;&lt;/pre&gt;-----------------------------------------------------------&lt;/p&gt;&lt;p&gt;■apache2.2.21 をインストール&lt;br /&gt;-----------------------------------------------------------&lt;pre&gt;&lt;br /&gt;# cd /usr/local/src&lt;br /&gt;# wget http://www.apache.org/dist//httpd/httpd-2.2.21.tar.gz&lt;br /&gt;# tar zxvf httpd-2.2.21.tar.gz&lt;br /&gt;# ./configure --prefix=/opt/apache2 --enable-modules=ssl --with-ssl=/opt/openssl&lt;br /&gt;# make&lt;br /&gt;# make install&lt;br /&gt;&lt;/pre&gt;&amp;lt; apacheユーザー,グループ作成 &amp;gt;&lt;pre&gt;&lt;br /&gt;# groupadd apache&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;クライアントからの要求があったときに、生成される apache の子プロセスに root 権限を持たないようにします。また、生成された子プロセスがアクセスできるファイルシステムを /var/empty/apache に制限します。apache ユーザーはログインできないようにする為、/sbin/nologin を実行します。&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# useradd -g apache -d /var/empty/apache -s /sbin/nologin apache&lt;br /&gt;# cd /opt/apache2/conf&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;証明書置き場を作ります。ここではわかりすいように certs というディレクトリを作成します。&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# mkdir certs&lt;br /&gt;# cd certs&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;自己証明書を発行します。トリプルDES(Data Encription Standard の略)の暗号方式を使用します。どうやら DES という共通鍵暗号方式で 3 回暗号化しているために des3 らしい。鍵の長さは 2048 ビットを使用します。1024ビットはセキュリティの観点から使用しない方がいいみたい。&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# openssl genrsa -des3 -out ca.key 2048&lt;br /&gt;&lt;br /&gt;# openssl req -new -x509 -days 365 -key ca.key -out ca.crt&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;※ サーバー証明書と CA 証明書の組織名は異なる必要があるらしいので、適当につけてみます。&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;Organization Name (eg, company) [Default Company Ltd]:CA&lt;br /&gt;Organizational Unit Name (eg, section) []:CA&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;サーバー用秘密鍵を作ります。&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# openssl genrsa -des3 -out server.key 2048&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;作成した秘密鍵を利用して、サーバー証明書のCSRを作成します。CSR は Certificate Signing Request の略です。このサーバーにアクセスするときに申請する公開鍵証明書のリクエストのことをいいます。&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# openssl req -new -key server.key -out server.csr&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;シリアルナンバーのファイルを作成します。&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# echo 01 &gt; ca.srl&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;1 年期限のサーバー証明書をつくります。&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# openssl x509 -req -days 365 -CA ca.crt -CAkey ca.key -in server.csr -out server.crt&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&amp;lt; httpd-ssl.conf &amp;gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# vim /opt/apache2/conf/extra/httpd-ssl.conf&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;■編集項目&lt;br /&gt;-------------------------------------------------------&lt;br /&gt;# 78 行目と 79 行目を変更する。&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;ServerName www.example.com:443&lt;br /&gt;ServerAdmin y-ogawa@example.com&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;# 99 行目と 107 行目 (証明書の置き場を指定する。)&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;SSLCertificateFile "/opt/apache2/conf/certs/server.crt"&lt;br /&gt;SSLCertificateFile "/opt/apache2/conf/certs/server.crt"&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;-------------------------------------------------------&lt;br /&gt;&lt;br /&gt;SSLCertificateFile ディレクティブに証明書が置いてある場所を指定する。&lt;br /&gt;&lt;br /&gt;&amp;lt; httpd.conf &amp;gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;# vim /opt/apache2/conf/httpd.conf&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;■編集項目&lt;br /&gt;-------------------------------------------------------&lt;pre&gt;&lt;br /&gt;# 65 行目と 66 行目&lt;br /&gt;User apache&lt;br /&gt;Group apache&lt;br /&gt;&lt;br /&gt;# 406 行目 ( コメントアウトを外して、httpd-ssl.conf ファイルを読み込ませる。)&lt;br /&gt;Include conf/extra/httpd-ssl.conf&lt;br /&gt;&lt;/pre&gt;-------------------------------------------------------&lt;pre&gt;&lt;br /&gt;# /opt/apache2/bin/apachectl start&lt;br /&gt;&lt;/pre&gt;ここでエラー。&lt;pre&gt;&lt;br /&gt;httpd: Could not open configuration file /usr/local/apache2/conf/httpd.conf: No such file or directory&lt;br /&gt;&lt;/pre&gt;httpd.conf がないって言われる。読みに行ってるディレクトリも httpd.conf の場所と違う...&lt;br /&gt;&lt;br /&gt;とりあえず、apachectl コマンドに -f オプションで httpd.conf ファイルの場所を指定すると実行できました！ &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# /opt/apache2/bin/apachectl -f /opt/apache2/conf/httpd.conf -k start&lt;br /&gt;&lt;/pre&gt;それか...ディレクトリを作って&lt;pre&gt;&lt;br /&gt;# mkdir -p /usr/local/apache2/conf/&lt;br /&gt;&lt;/pre&gt;シンボリックリンクをはってやる。この方法でも大丈夫でした。&lt;pre&gt;&lt;br /&gt;# ln -s /opt/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;パスワードは証明書を作成したときのものを入力します。&lt;pre&gt;&lt;br /&gt;# /opt/apache2/bin/apachectl start&lt;br /&gt;Apache/2.2.21 mod_ssl/2.2.21 (Pass Phrase Dialog)&lt;br /&gt;Some of your private key files are encrypted for security reasons.&lt;br /&gt;In order to read them you have to provide the pass phrases.&lt;br /&gt;&lt;br /&gt;Server www.example.com:443 (RSA)&lt;br /&gt;Enter pass phrase:&lt;br /&gt;&lt;br /&gt;OK: Pass Phrase Dialog successful.&lt;br /&gt;&lt;/pre&gt;ちゃんと動いてるか確認、&lt;pre&gt;&lt;br /&gt;# ps aux | grep httpd | grep -v grep&lt;br /&gt;root     32446  0.0  0.2   8416  2812 ?        Ss   22:25   0:00 /opt/apache2/bin/httpd -k start&lt;br /&gt;apache   32447  0.0  0.1   8416  1512 ?        S    22:25   0:00 /opt/apache2/bin/httpd -k start&lt;br /&gt;apache   32448  0.0  0.1   8416  1512 ?        S    22:25   0:00 /opt/apache2/bin/httpd -k start&lt;br /&gt;apache   32449  0.0  0.1   8416  1512 ?        S    22:25   0:00 /opt/apache2/bin/httpd -k start&lt;br /&gt;apache   32450  0.0  0.1   8416  1524 ?        S    22:25   0:00 /opt/apache2/bin/httpd -k start&lt;br /&gt;apache   32451  0.0  0.1   8416  1512 ?        S    22:25   0:00 /opt/apache2/bin/httpd -k start&lt;br /&gt;&lt;/pre&gt;443 番ポートを使用してるプロセスを確認。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# lsof -i:443&lt;br /&gt;COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME&lt;br /&gt;httpd   1380   root    4u  IPv4   9420      0t0  TCP 192.168.11.22:https (LISTEN)&lt;br /&gt;httpd   1381 apache    4u  IPv4   9420      0t0  TCP 192.168.11.22:https (LISTEN)&lt;br /&gt;httpd   1382 apache    4u  IPv4   9420      0t0  TCP 192.168.11.22:https (LISTEN)&lt;br /&gt;httpd   1383 apache    4u  IPv4   9420      0t0  TCP 192.168.11.22:https (LISTEN)&lt;br /&gt;httpd   1384 apache    4u  IPv4   9420      0t0  TCP 192.168.11.22:https (LISTEN)&lt;br /&gt;httpd   1385 apache    4u  IPv4   9420      0t0  TCP 192.168.11.22:https (LISTEN)&lt;br /&gt;httpd   1386 apache    4u  IPv4   9420      0t0  TCP 192.168.11.22:https (LISTEN)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;HTTPS でアクセスできました！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8005179850861707811-6978651938124421340?l=sios-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sios-oss.blogspot.com/feeds/6978651938124421340/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sios-oss.blogspot.com/2011/10/apache-ssl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/6978651938124421340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8005179850861707811/posts/default/6978651938124421340'/><link rel='alternate' type='text/html' href='http://sios-oss.blogspot.com/2011/10/apache-ssl.html' title='Apache を SSL で使用する'/><author><name>SIOS-OSS</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
