ファイルがどのパッケージに含まれているかを確認するrpmコマンド
2007/09/09 00:08 posted by kunkichi
いっつも忘れてしまって、もう100回ぐらい調べてます、、、僕の記憶力、orz
# rpm -qf ファイル名
これでもう忘れない、と思いたい、、、
いっつも忘れてしまって、もう100回ぐらい調べてます、、、僕の記憶力、orz
# rpm -qf ファイル名
これでもう忘れない、と思いたい、、、
ということで前回のエントリからまたもやえらく経ってしまったのだけど引き続き Cobbler の設定。
前回まででインストールと基本設定はできているので、いよいよここから実際のネットワークインストールサーバの運用に絡んだお話。逆に言うと前回の手順で行った1〜3の作業については(大幅な設定変更とかしない限り)もう意識する必要はなくなる。
またもや前回のエントリから時間が経ってしまったのだけど、いろいろ検証しているうちにキックスタート設定ファイルやら構築手順やらのファイル管理が必要な気がしてきた。
のちのちはアプリ開発環境も構築していきたいということもあって、ちょっと脱線して、前からやってみたかった Subversion+Trac を CentOS5 に導入してみました。
ちなみに、前提条件はこんな感じ。
例)
/home/develop/svn/project1
/home/develop/svn/project2
/home/develop/svn/project3
例)
/home/develop/trac/project1
/home/develop/trac/project2
/home/develop/trac/project3
では手順。
・Subversion のインストール
CentOS5 では subversion を HTTP 経由 で使うのに必要なパッケージが全部揃っているので、yumで subversion、httpd、mod_dav_svn をインストールすればオーケー。コマンド的には↓で全部必要なものが入ります。
# yum install mod_dav_svn
subversion のレポジトリを作成。プロジェクト名は”test”とします。
# mkdir -p /home/develop/svn
# svnadmin create /home/develop/svn/test
トランク、タグ、ブランチ用のディレクトリを作成。
# svn mkdir file:///home/develop/svn/test/trunk file:///home/develop/svn/test/tags file:///home/develop/svn/test/branches -m "init repository layout (trunk,tags,branches)"
apacheからファイルの読み書きが出来るようにパーミッションを変更。
# chown -R apache.apache /home/develop/svn/test
BASIC認証の設定。
# htpasswd -c /home/develop/.htpasswd kunkichi
apache の設定変更。/etc/httpd/conf.d 以下に subversion.conf が出来ているのだけど、全てコメントアウトされているので、必要な箇所のコメントアウトを外して、リポジトリ、BASIC認証用パスワードファイルのパスを変更。
# vi /etc/httpd/conf.d/subversion.conf
最終的にはこんな感じ。
<Location /svn>
DAV svn
SVNParentPath /home/develop/svn
# Limit write permission to list of valid users.
<LimitExcept GET PROPFIND OPTIONS REPORT>
# Require SSL connection for password protection.
# SSLRequireSSL
AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /home/develop/.htpasswd
Require valid-user
</LimitExcept>
</Location>
最後にapacheを再起動+自動起動設定。
# service httpd start
# chkconfig httpd on
ブラウザで確認。トランク、タグ、ブランチ用のディレクトリを作成した時にリビジョンが上がっているので”Revision 1: /”と表示されればOK。
・Tracのインストール
続いて Trac のインストール。
こちらも yum でササッと行きたいところだけど、CentOS5 の標準リポジトリに Trac は含まれていない。あとTrac が依存しているライブラリも同様。でもサードパーティーのレポジトリである DAGレポジトリ(rpmforge) でちゃんとパッケージ化されているのでこれを使えばオーケー!
、、、なんだけど、DAG の Trac パッケージは日本語化がされていない。個人的には英語でもなんら困らないし、むしろサーバのパッケージ管理を考えるとこっちの方がベターなんだけど、初のTrac ということもあるので、今回は依存ライブラリを DAG から、Trac 本体はインタアクト株式会社のウェブサイトで提供されている日本語化されているものを使う。
DAGレポジトリの追加。
# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
DAGレポジトリは標準でOFF。必要なときのみONとする。DAGレポジトリの設定ファイルを開いて
# vi /etc/yum.repos.d/rpmforge.repoこれを
・・・
enabled = 1
・・・
・・・
enabled = 0
・・・
に変更。
Tracが依存しているライブラリをDAGからインストール
# yum --enablerepo=rpmforge install -y python-clearsilver
ついでにmod_pythonもインストールしておく。こっちは標準レポジトリから。
# yum install -y mod_python
日本語化Tracのインストール
# wget http://www.i-act.co.jp/project/products/downloads/trac-0.10.4-ja-1.zip
# unzip trac-0.10.4-ja-1.zip
# cd trac-0.10.4-ja-1
# python setup.py install
Tracプロジェクト用ディレクトリの作成
# mkdir /home/develop/trac
Tracプロジェクトの作成。こちらも subversion のプロジェクト名と同じように”test”とします。
# trac-admin /home/develop/trac/test initenv
trac-admin 〜 initenv するといろいろ聞かれるので以下のように回答していきます。
まずプロジェクト名。”test”と入力。
Project Name [My Project]> test
Tracのデータベース接続詞を設定。今回はお手軽に デフォルトのsqlite を使うのでそのままENTER。
Database connection string [sqlite:db/trac.db]>
レポジトリのタイプを指定。subversion がデフォルトなのでそのままENTER。
Repository type [svn]>
subversionのレポジトリパスを指定します。
Path to repository [/path/to/repos]> /home/develop/svn/test
Tracのテンプレートパスを指定。とりあえずデフォルトで。そのままENTER。
Templates directory [/usr/share/trac/templates]>
完了したら動作確認。Trac付属の簡易HTTPサーバを起動。
# tracd --port 8000 /home/develop/trac/test
ブラウザで http://サーバのIP:8000/プロジェクト名 にアクセスして画面が表示されればとりあえずOK。
Tracd で動作確認が出来たら Ctrl+C で止めて今度はapacheで動作するように設定。まずパーミッションを変更。
# chown -R apache:apache /home/develop/trac/test
次にtrac用のapache設定ファイルを作成。
# vi /etc/httpd/conf.d/trac.conf
内容はこんな感じ。
<Location /trac>
SetHandler mod_python
PythonDebug On
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /home/develop/trac
PythonOption TracUriRoot /trac
</Location>
<LocationMatch "/trac/.*/login">
AuthType Basic
AuthName "trac"
AuthUserFile "/home/develop/.htpasswd"
Require valid-user
</LocationMatch>
設定が終わったらapacheを再起動して設定を反映。
# service httpd restart
ブラウザで http://サーバのIPアドレス/trac/test にアクセスして確認してみます。

こんな画面が表示されたらこれで一応完了です。
あと、やりたいこととして
とかあるんだけどこれは後々。
【追記:2007/9/8】
このエントリを参照していただいたサイトで以下のエントリがありました。
■[CentOS]CentOS5でsubversionを入れる時に詰まったことのメモ
CentOS5 で Subversion+Trac | cafe chantant blog
VMware Serverを導入したので、CentOS5を入れていろいろと試そうということで上記のページを参考にSubversionのインストールしました。
インストールを終えてブラウザから動作の確認をしたのですが、「Could not open the requested SVN filesystem」と表示され、うまくいっていませんでした。(public static void main)
テスト環境だったのでSELinuxとかFirewallはOFFにしてたのですが記述してなかったので追記しました。
ちょっと間が空いたけど前回の続き。
ステップ3とステップ4で、OSの自動インストールの仕組みについて説明した。それぞれの設定はそんなに難しくはないと思うんだけど、kickstart、dhcp、tftp、ファイルサーバと設定箇所が多岐にわたっていてかつ手動で設定するのは、ちょっと規模が大きくなると厳しい感じもする。
ということで上で一通りあげたツールを全部まとめて簡単にインストール・設定・管理ができる、Cobbler というツールがあることを知ったのでちょっと脱線するけど試してみる。
前回の続き。
PXEブート対応のNICがないということで、完全な無人インストールはできないということだったのだけど、BIOSの設定を見直してみるとありました、、、調査不足、俺、orz
ということで早速設定変更してやってみました。
4. PXEブートで起動。全てのデータをネットワーク上に置く。
まず、PXEブートに対応しているNICがついていてBIOS設定で有効にしておくことが大前提。
まずインストール対象のサーバがインストールプログラムをネットワークから取得できるようにtftpサーバを立てる。
# yum install tftp-server
tftpサーバはxinetd越しに起動するのでxinetdも併せてインストールされると思います。ただしデフォでは無効になっているので、これを有効にする。
# chkconfig xinetd on修正後、xinetdのリスタートもお忘れなく。
# chkconfig tftp on
# service xinetd restart
次にPXEブート用のブートイメージをCD/DVDからtftpで公開しているディレクトリにコピー。
# mkdir /tftpboot/linux-install
# cp -pi /export/nfs/iso/images/pxeboot/initrd.img /tftpboot/linux-install/.
# cp -pi /export/nfs/iso/images/pxeboot/vmlinuz /tftpboot/linux-install/.
次にPXEブート用のブートローダであるpxelinux.0をtftpで公開しているディレクトリにコピー。
# cp -pi /usr/lib/syslinux/pxelinux.0 /tftpboot/linux-install/.
PXEブート用の設定ファイルを作成する。pxelinux.0と同じ階層にpxelinux.cfg というディレクトリを作成し配下にdefaultという名前でファイルを作成する。
# mkdir /tftpboot/linux-install/pxelinux.cfg
中身はこんな感じで。
default centos5
prompt 0
label centos5
kernel vmlinuz
append ks=nfs:192.168.0.254:/export/nfs/ks/ load initrd=initrd.img devfs=nomount
で、最後にdhcpd.confの設定変更。これまではDHCPでIP取得と併せてキックスターと設定ファイルのパスを取得していたのだけど、PXEブートではIP取得と併せてまずブートローダを取得しないといけないので、DHCPではブートローダのファイル名を渡すようにする。そのかわり、PXEブート用設定ファイルの中でブートローダの引数にキックスタートファイルのパスを指定する、ということかな。
filename "/export/nfs/ks/"; これを
filename "/linux-install/pxelinux.0";に変更して、DHCPを再起動する。
# service dhcpd restartでサーバの電源をオン。
これで終了〜。ブートCD/DVDのメディアもいらないし、起動時のプロンプトも入力する必要なし、電源入れるだけで勝手にインストールが始まります。
ちなみにうちの余っていたDELLのデスクトップ(CPU: Pen3 1GHz、MEM: 512MB)で試してみた感じでは、トータル15分程度で完了。これはマシンスペックやネットワークの帯域、あとインストールするパッケージ数にもよると思うだけど、
最近のマシンはCPUもディスクも早いと思うのでもっと短くなるかもしれないね。
前のエントリの続き。
はてなと一般IT企業との乖離については前回で終わり。だってめんどくさいんだもん(爆)。まあどこの会社にもいろいろ政治的な問題があって難しいということを単に愚痴ってみただけです(笑)
今日はこれ。
サーバをバックエンドの本番に投入するまでには、おおまかに以下のことが必要です。
〜略〜
- OSのインストール
〜略〜
2. OSのインストール
はてなが現在メインで使っているのは確かCentOSが多いらしい。CentOS は Red Hat EL のクローンであり、自動インストールの仕組みは Red Hat 標準の仕組みである「キックスタート」がそのまま使える。
昔、Red Hat 7〜9 を仕事で使っていた頃は検証環境を作ったりするのにFDからキックスタートして環境作り直しとかよくやってたんだけど、ここ数年は 商用UNIXばっかりで Linux から離れていたので、ちょっと復習をかねて、キックスタートを使ったOSのインストール手法を整理してみる。ちなみにOSはCentOS5を使います。
一番ベタなやり方。でもこれだけでインストール時の対話形式をスキップできる。
昔は、インストールFDの中にキックスタート設定ファイル(ks.cfg)を入れてたのだけど、RHEL ではもうFDからの起動は出来なくて必ず CD/DVD から起動する必要があるらしい。ただし、キックスタートだけでFDを使うことはできる。
とりあえず普通に1回インストールすると/root/anaconda-ks.cfgというファイルが作成される。これがインストール時の設定内容に基づいて作成されたキックスタート設定ファイルなんだけど、これをベースにしてカスタマイズしてみる。
# Kickstart file automatically generated by anaconda.
install
cdrom
lang ja_JP.UTF-8
keyboard jp106
network
--device eth0 ¥
--bootproto static ¥
--ip 192.168.0.101 ¥
--netmask 255.255.255.0 ¥
--gateway 192.168.0.1 ¥
--nameserver 192.168.0.1 ¥
--hostname test.example.com
rootpw --iscrypted *****************************
firewall --disabled
authconfig --enableshadow --enablemd5
selinux --disabled
timezone Asia/Tokyo
bootloader --location=mbr --driveorder=hda
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
clearpart --linux --drives=hda
part /boot --fstype ext3 --size=100 --asprimary
part swap --size=1000
part / --fstype ext3 --size=100 --grow
%packages
@base
@core
@development-libs
@development-tools
@japanese-support
kernel-devel
lm_sensors
net-snmp-libs
net-snmp
ntp
オリジナルのanaconda-ks.cfgからカスタマイズしたところは以下。
あと、便宜上ネットワーク設定の箇所はバックスラッシュ入れて複数行に分けてるけど、実際には1行で書く必要あり。バックスラッシュも使えません。
でこのファイルを FD に ks.cfg というファイル名でコピーする。
# mkdir /mnt/floppyこれができたら準備完了。いよいよサーバのインストールを行う。
# mount /dev/fd0 /mnt/floppy
# cp -pi ks.cfg /mnt/floppy
# umount /mnt/floppy
CD/DVDで起動。インストーラ起動画面が表示されたら以下のように入力。
boot: linux ks=floppyあとは終わるまでのんびりとコーヒーでも。
1. でかなり時間は短縮できるようになったけど、今時FDってのもねー。FDDがないサーバも多いし。ということで、次はネットワーク上からキックスタート設定を拾ってくるようにする。ということで、必要なのは BOOTP/DHCP と NFS の設定。
まず、適当なサーバにks.cfgを移動して NFS で公開。ここでは /export/nfs/ks を公開ディレクトリする。このときファイル名は”割り当てたいIPアドレス-kickstart”にしておくこと。例では192.168.0.101で割り当てます。
# mkdir -p /export/nfs/ks
# cp -pi /tmp/ks.cfg /export/nfs/ks/192.168.0.101-kickstart
# vi /etc/exports
---–
/export/nfs/ks *(ro,no_root_squash)
---–
# service nfs start
次にBOOTP/DHCPの設定。BOOTP は使ったことないので、DHCPでやります。
yum で dhcp をインストールして、設定ファイルをちょこっと書き換え。
# yum install dhcp
# cp -pi /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf
# vi /etc/dhcpd.conf
とりあえずこんな感じで書き換え。割り当て範囲は192.168.0.101だけにしてます。最後の方でNFSの公開ディレクトリとサーバのIPを設定してます。
ddns-update-style interim;
ignore client-updates;
# 割り当てたいネットワークの範囲
subnet 192.168.0.0 netmask 255.255.255.0 {
# --- default gateway
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.0.1;
# 割り当てたいIPアドレスの範囲
range dynamic-bootp 192.168.0.101;
default-lease-time 86400;
max-lease-time 172800;
# NFSサーバでキックスタートファイルをおいているパス
filename "/export/nfs/ks/";
# NFSサーバのIPアドレス
next-server 192.168.0.254;
}
ではDHCPを起動。
# service dhcpd start
ではCD/DVDで起動してインストールしてみる。インストーラ起動画面が表示されたら以下のように入力。
boot: linux ksあとは終わるまでのんびりとお菓子でも。
ちなみにちょっと注意として、dhcpd.conf でリースするIPをある範囲で指定する場合、つまり192.168.0.10〜100とかで指定する場合は、どれが割り当てられるかわからないので、キックスタートファイル名のIPが予測できない(上の例で割り当てられるIPを一つだけにしたのはそのため。)予め、NIC の MACアドレスを調べておいて、このMACにはこのIPを割り当てるとかした方がいいかも。
せっかくキックスタートはリモートでおけるようになったのだから、インストールするデータもネットワーク上においてしまおう。CentOS5はCDだと6枚組だし最小構成でも全部必要なので入れ替えるの面倒。DVDだと1枚で済むけどたくさんメディアを使うのはコスト的によろしくない。ということでインストーラをブートするだけCDを使うことにする。
まずインストールするデータをネットワーク上におく。本家サイトからダウンロードしたインストールDVDのISOイメージを公開するディレクトリにマウント。その後NFSで公開。
# mkdir /export/nfs/iso
# mount -o loop /tmp/CentOS-5.0-i386-bin-DVD.iso /export/nfs/iso
# vi /etc/exports
---–
/export/nfs/ks *(ro,no_root_squash)
/export/nfs/iso *(ro,no_root_squash)
---–
# service nfs reload
次にキックスタート設定ファイルの中身を書き換える。今の設定ファイルだとCDROMからインストールするようになっているのでこれをNFSを使うようにする。
# vi /export/nfs/ks/192.168.0.101-kickstart
---–
cdrom
---–
となっている箇所を、
-----
nfs --server=192.168.0.254 --dir=/export/nfs/iso
---–
に変更する。
後はこれまでと同じく
CD/DVDで起動してインストーラ起動画面で以下のように入力。
boot: linux ksあとは終わるまでのんびりと昼寝でも。
てな感じで。まだ工夫の余地はたくさんあるんだけど、これだけでも結構効率が上がるはず。
ほんとは、PXEブートを使って、インストールCD/DVDもなし、完全な無人インストールをやりたかったのだけど、PXEブートに対応してるNICがないのでそれはまた今度。
メモ。printf/sprintf の 型指定で b を使うと 2進数 で出力できる。Perl 5.6以降っぽい。
$ perl -e 'printf("%3d:%08b\n",$_,$_)for(0..255)'
0:00000000
1:00000001
・・・
254:11111110
255:11111111
Solaris8 標準の Perl は 5.003だから自分で書かないと無理かな。
参考:
↓まるまる載ってた。
2進10進数変換
知らなんだのでメモ。
# yum install yum-fastestmirror
CNET Japanにこんな記事が載っていました。
Linuxの新バージョンに搭載されている「ティックレスカール」について、プログラマーたちは、同オープンソースOSの効率改善につながると期待している。これは、プロセッサの消費電力を節約することを目的とした技術だ。(CNET Japan)
最近は、高処理性能なマルチコアCPUが大流行りですが、併せて低消費電力を宣伝してることも多いです。まあ個人のレベルでもノートPCのバッテリ駆動時間なんかで恩恵を受けるんだろうけど、個人的には、
また、一般的に24時間稼働するサーバでは、増加する一方の電気料金を節約できる。
というところがかなり恩恵を受ける、というか受けたいところ(笑)。
データセンターのラック収容効率ってのは、結局のところ、ラックサイズとか熱量とかではなくて、ラックの電源容量に対してサーバの消費電力が頭打ちになるパターンがほとんどだしね。
これまでの消費電力改善に対しては、ハードウェア側からのアプローチが(宣伝もあって)大きいと思うのだけど、今度はOS側からもこういうアプローチが行われることはとても素晴らしい。また、ソフトウェアという意味では、OSだけでなくその上に乗っかってるアプリケーションのレベルでもこういった対応は求められる訳で、消費電力改善を妨げるような挙動をするものを探すツールが併せて提供されるというのも素晴らしい。
データセンターでのラック収容に悩んでる人は多いと思うので、期待したいです。
せっかく『あわせて読みたい』の画像をはっつけたので、どんなサイトが「あわせて」読まれてるのかな?ということで、リンクをたどってみたら、こういうのを見つけました。
cl.pocari.org - dig の出力に色をつける dig-color
dig の出力に色をつける dig-color というのを作ってみました.
リソースレコードタイプは A/NS/CNAME/SOA/MX のみにしか対応していませんので,そのほかのタイプが必要であれば追加してください.
こちらはRubyで書かれているようで、Rubyが入ってない環境は結構あるかなと思ったので、Perlで書き換えてみました。
#!/usr/bin/perl -w
use strict;
use warnings;
my %colors = (
"section" => "02;01",
"comment" => "37",
"normal" => "00",
"A" => "32",
"NS" => "34",
"CNAME" => "36",
"SOA" => "33",
"MX" => "31",
);
my @return = readpipe( "dig " . join( " ", @ARGV ));
foreach my $line ( @return ){
my $color = $colors{"normal"};
if( $line =~ /^;;.+SECTION:$/ ){
$color = $colors{"section"};
}elsif( $line =~ /^;/ ){
$color = $colors{"comment"};
}elsif( $line =~ /^(.+\s)(SOA|NS|A|MX|CNAME)(\s.+)$/ ){
$color = $colors{"$2"};
# レコードタイプのみに色を付ける場合
#$line = sprintf "%s\e[%sm%s\e[00m%s\n", $1, $colors{"$2"} ,$2, $3;
}
printf "\e[%sm%s\e[00m", $color, $line;
}
ま、単にPerlの書き方に変えただけなんだけど。変数とか配列とかの書き方とか、あとpopen使ったことないのでreadpipeに置き換えただけみたいな、本当にその程度。
むしろ、出力に色を付けるのは詳しく知らなかったので、その辺はいじらないでそのまま動かしたら、サラッと動いちゃったので本人がびっくり、みたいな(爆)
結果はこんな感じ。
色がつくだけで何気に見やすくなるんですね。オリジナルの作者の方のアイデアに感謝。
2008/08/31/ 12:22
2008/08/25/ 21:10
2008/08/24/ 15:31
2008/02/19/ 23:52
2008/01/23/ 21:27