ぐらめぬ・ぜぷつぇんのはてダ

2008/11/24以降のメインブログはこちらになります。 : http://www.glamenv-septzen.net/

本はてなダイアリにはコメント・トラックバックを受け付ける記事を公開します。

2007-10-23

[]VMwareToolsのインストール

別件でちょっと、VMware上にCentOSの4(最新だと4.5か)を作りました。で、その時のVMwareToolsのインストールメモ。というか。

まぁいいや。

参考リンク:

まず、yumで rpm-build というパッケージをインストールする必要があるようです。

$ rpm -qa | grep rpm
...
rpm-build-4.3.3-22_nonptl
...

入ってましたので次に行きます。えっと、どうもRPMをビルドするのはどこかローカルでやりましょう、というらしいです。通常は /usr/src/redhat (TurboLinuxだったら/var/src/rpmだな。) の下に、{RPM|SRPM|SPECS|BUILD...}などのディレクトリがあって、そこでSRPMやらspecファイルやらソースやらRPMやらが配置されるのですが、どうも上のリンクを読むと推奨してないですね。

ですので、素直にドキュメントの指示に従います。今回はrootユーザーのホームの直下に、"rpmworks"というディレクトリを切ってその中に入れちゃいました。

# mkdir -p /root/rpmworks/{SRPMS,RPMS,SPECS,BUILD,SOURCES}
# echo "%_topdir /root/rpmworks" >> .rpmmacros
# echo "%packager root <root@localhost>" >> .rpmmacros
# cat .rpmmacros
%_topdir /root/rpmworks
%packager root <root@localhost>

こんな感じですか。

で、今使っているカーネルのバージョンを確認しておきましょう。

# uname -a
Linux yggdrasil00 2.6.9-55.0.9.ELsmp #1 SMP Thu Sep 27 18:27:41 EDT 2007 i686 i686 i386 GNU/Linux

2.6.9-55.0.9ですね。では、前掲のリンクの、下の方のURLを見てみると、CentOS4の場合はソースをここから取れますよ、というのがありました。「Current OS/SRPMS」と「Current Updates/SRPMS」の二つがメインにありますが、今回は既にup2dateでkernelをバージョンアップしていますので、対応するのはUpdatesの方にありました。

kernel-2.6.9-55.0.9.EL.src.rpm 

これを適当にDLして、あとはドキュメントの指示通りにします。

rpm -Uvh kernel-2.6.9-55.0.9.EL.src.rpm 
cd /root/rpmworks/SPECS
rpmbuild -bp --target i586 kernel-2.6.spec

ディレクトリやターゲットのアーキテクチャは若干修正しています。で、これをするとソースの展開およびパッチの適用までをこなしてくれます。

/root/rpmworks/BUILD/kernel-2.6.9/linux-2.6.9

この下に、kernelのソースが展開された形になります。

さて、ではVMwareToolsをインストールしてみます。VMwareのメニューから例によりVMware-Toolsのインストールを選び、cdromをマウントします。で、tar.gzの方をrootのホームディレクトリに展開。vmware-install.plを実行します。途中、vmware-config-tools.pl をついでに実行するか?聞かれてきますが、さくっとnoにしておきます。

で、終わったとに別途vmware-config-tools.plを起動します。

で、いつも(TurboLinux)だったらここで「kernelのincludeヘッダーはどこじゃ(#゚Д゚)ゴルァ!!」と怒られたりするわけですが・・・。何か、何事もなくさくっと終わってしまったようなんですけど。

何だったんだ、TurboLinuxでのあの混沌は。orz.

ええっと・・・はい。これでお仕舞いです。何だったんでしょう。まぁ、何事もないに越したことは無いのですが。

・・・ひょっとして、kernel-develさえ入っていればよかったのかしら?確かにこのパッケージは最初から入ってたのだけれど。

でもコンパイルした感じすらしない・・・最初から対応したモジュールが添付されてたのかな?

まぁよい。ごたごたを省けたのでいいや。で、例によりXが起動しなくなったけど、とっくにinittab書き換えてSysVのRunlevelを3にしてコンソールでブートするように調整していたので問題なし。っつーかXうぜぇ。どうせ開発用のサーバなんだから。

というわけで何事もなく終了。

[]yumの定時アップデート処理について。

さて、開発用・・・とはいえど。本番用もあるわけで。で、調べなくちゃ行けないのがパッケージのアップデート処理。というわけで、まずはさくっとyumパッケージ自体の中身を見てみます。

$ rpm -ql yum
/etc/cron.daily/yum.cron
/etc/cron.weekly/yum.cron
/etc/logrotate.d/yum
/etc/rc.d/init.d/yum
/etc/yum
/etc/yum.conf
/etc/yum.repos.d
/etc/yum/yum-daily.yum
/usr/bin/yum
/usr/bin/yum-arch
/usr/lib/python2.3/site-packages/repomd
...
/usr/lib/python2.3/site-packages/yum/transactioninfo.pyc
/usr/share/doc/yum-2.4.3
...
/usr/share/man/man5/yum.conf.5.gz
...
/usr/share/yum-cli/callback.py
...
/usr/share/yum-cli/yummain.pyc
/var/cache/yum

はぁん。で、各ファイルをざっと見てまとめ直すと。

/etc/cron.daily/yum.cron

これが定時更新処理のキモ。中はシンプルにこんな感じ。

#!/bin/sh
if [ -f /var/lock/subsys/yum ]; then
        /usr/bin/yum -R 120 -e 0 -d 0 -y update yum
        /usr/bin/yum -R 10 -e 0 -d 0 -y shell /etc/yum/yum-daily.yum
fi

/etc/yum/yum-daily.yumについては、shellオプションで起動されたときに対する「入力」が書かれていた。

で、ifでファイル存在をチェックしている。このロックファイルはどこで作られるのかというと。

/etc/rc.d/init.d/yum

これ、startでロックファイルを作成、stopでロックファイルを削除する仕組み。はぁん。つまり、cron.dailyが実行されるのを前提として、そのスイッチの役目になっているわけだ。

他。

というわけで、おおよそのポイントは押さえ終わった。yumのオプションとかについては省略。--helpやmanを見れば済む。

後は関連する雑多なファイルについて。

/etc/cron.weekly/yum.cron
"clean package"オプションで実行される。yumのキャッシュディレクトリ内の、ダウンロードしたパッケージファイルを削除してくれる。
/etc/logrotate.d/yum
/var/log/yum.log のlogrotate設定。
/etc/yum.conf
man (5) yum.conf を参照。
/var/cache/yum
yum.confの"cachedir"のデフォルト。

こんな感じ。

ふーん・・・じゃあ結局、yumをdefaultでONにしておけば、特に、まぁ・・・問題はなさそうだね。

・・・ってちょっとまて。もうちょっと慎重に。伊達に、TurboLinuxでApacheのパッケージ更新で何度も涙を流してはいない。(設定ファイル上書きされてマジ怒り心頭)

cron.dailyのyum.cronをもうちょっと慎重に見てみよう。

/usr/bin/yum -R 120 -e 0 -d 0 -y update yum
/usr/bin/yum -R 10 -e 0 -d 0 -y shell /etc/yum/yum-daily.yum

まず最初の行は、"yumパッケージそれ自体"のアップデートを行っている。-eはエラーレベル、-dはデバッグレベル。-yは何かプロンプトされたら全てYesにするオプション。

二行目が問題で、shellモードで起動するよう指示し、入力内容は yum-daily.yum を使うよう指示している。shellモードって何?ということで、man yumを見てると

yum-shell(8)

という記述が。というわけで、"man 8 yum-shell"。

え〜〜っと・・・。まぁ単純で、yumのコマンドラインオプションをそのまま打ち込めますよ、ということらしい。

# yum list ...
# yum update ...
...

と打たなければいけなかったのが、

# yum shell
list ...
update ...

となるわけ。

では実際に、yumのshellに渡されるファイル、/etc/yum/yum-daily.yumの中身は

update
ts run
exit

えーっと。ようするに、アップデート「しちゃう」わけだ・・・。

まぁ・・・いっか。どちらかというと check-update した結果をメールで寄越してお仕舞いで、アップデートは管理者自身で、というのもイイかなとは思ってたんだけど。

但し、すっぴんのインストールしたてのCentOS4でコレやると、かなりの数のパッケージがアップデートかかるので。最初からONにするのはやめておいた方が良いかも。

それはそれとして、CentOSについてはパッケージアップデートのXMLフィードとかは特に用意してないんだな。TurboLinuxだと

http://www.turbolinux.co.jp/security/index.rdf

から読めるので、結構便利なんだが・・・。まぁ、いっか。

うん、とりあえずこれはこれで、yumについていろいろ理解できたので良しとしよう。なんというか・・・アレだな。パッケージ自体はRPMで昔通りなんだけど、「リポジトリ」という概念をサポートする為のツールとして、yumがあるんだろな・・・。

それにしても、時流に取り残されてるな。自分。

[]MTAの切り替えについて。

VMware上ではデフォルトはsendmailになっている。一応postfixのパッケージも入ってはいるが・・・。実運用環境はpostfixになっていた。既に。

イカン。切り替えないと。

で、Google先生に聞いてみると結構ヒットしたのだが・・・。念のため、

http://www.centos.org/docs/4/

からDLできる System Administratorion Guides 辺りを検索してみたら、普通に

Chapter 39.
Mail Transport Agent (MTA) Conguration

として載っていた。

system-switch-mail というパッケージが入っていれば良いらしい。GUI版だとsystem-switch-mail-gnome。で、VMware上では一応入ってた。

えっと、中身はpythonをコンパイルしたやつみたいです。あとgettextのロケールファイル群。やってることは、*.py斜め読みした限りでは、選択されたMTAに対して"alternativesコマンド"とやらを発行し、"mta"グループのリンクを切り替えた後、然るべきサービスを停止・起動しているようです。例えばsendmailを選択したらこんな感じ。

/usr/sbin/alternatives --set mta /usr/sbin/sendmail.sendmail
/sbin/service postfix stop 2>/dev/null >/dev/null
/sbin/service exim stop 2>/dev/null >/dev/null
/sbin/service sendmail start 2>/dev/null >/dev/null

はぁん。alternativesというのは始めて見るコマンドだにゃ。

# which alternatives
/usr/sbin/alternatives
# rpm -qf /usr/sbin/alternatives
chkconfig-1.3.13.5.EL4-1

へぇ。

ちなみに、alternatives --display で指定したグループのリンク状況を見れるみたい。

[root@yggdrasil00 ~]# alternatives --display mta
mta - status is manual.
 link currently points to /usr/sbin/sendmail.postfix
/usr/sbin/sendmail.sendmail - priority 90
 slave mta-pam: /etc/pam.d/smtp.sendmail
 slave mta-mailq: /usr/bin/mailq.sendmail
 slave mta-newaliases: /usr/bin/newaliases.sendmail
 slave mta-rmail: /usr/bin/rmail.sendmail
 slave mta-sendmail: /usr/lib/sendmail.sendmail
 slave mta-mailqman: /usr/share/man/man1/mailq.sendmail.1.gz
 slave mta-newaliasesman: /usr/share/man/man1/newaliases.sendmail.1.gz
 slave mta-aliasesman: /usr/share/man/man5/aliases.sendmail.5.gz
 slave mta-sendmailman: /usr/share/man/man8/sendmail.sendmail.8.gz
/usr/sbin/sendmail.postfix - priority 30
 slave mta-pam: /etc/pam.d/smtp.postfix
 slave mta-mailq: /usr/bin/mailq.postfix
 slave mta-newaliases: /usr/bin/newaliases.postfix
 slave mta-rmail: /usr/bin/rmail.postfix
 slave mta-sendmail: /usr/lib/sendmail.postfix
 slave mta-mailqman: /usr/share/man/man1/mailq.postfix.1.gz
 slave mta-newaliasesman: /usr/share/man/man1/newaliases.postfix.1.gz
 slave mta-aliasesman: /usr/share/man/man5/aliases.postfix.5.gz
 slave mta-sendmailman: /usr/share/man/man1/sendmail.postfix.1.gz
Current `best' version is /usr/sbin/sendmail.sendmail.

詳細はalternativesのmanを参照。とりあえずこれで、MTAはpostfixに切り替わった・・・。

ふ〜〜・・・慣れないディストリビューションだと、いろいろと大変だな。