ラベル centos の投稿を表示しています。 すべての投稿を表示
ラベル centos の投稿を表示しています。 すべての投稿を表示

2009/10/28

LDAP認証:CentOSでやってはいけない設定

CentOS 5.3, 5.4で試したのですが、nsswitch.confに以下の設定を入れてしまうと、事実上起動途中でシステムがハングアップしてしまいます。

group:          ldap files

"ldap"に登録されていない情報をローカルに見に行くというところが原因で、パフォーマンスの観点からもお勧めはできない設定です。

ただUbuntuでは、この設定でLDAPサーバーに接続できないエラーが大量に出力されますが、無事に起動します。 CentOSでは"bind_policy soft"にするとUbuntuと同じような挙動になり、起動はできるようになりました。Ubuntuはデフォルトの"bind_policy hard"で動くんですけどね…。

とりあえず復旧するためには、CentOSのインストールDVDから起動してboot:に続いてlinux rescueと打って復旧モードで起動してnsswitch.confファイルを元に戻すのがお勧めです。

インストールDVDを使わなくてもシングルユーザーモードで起動するようにして、udevの初期化途中でC-cを何回か連打すればシェルに落ちると思いますが、ファイルシステム壊しそうでお勧めできないですね。

Ubuntuで挙動が違う原因はlibnss-ldapのdebパッケージに適用されているパッチにあるようです。 リトライ回数などが変更されているので、おそらくその影響でしょう。これだとCentOSも時間をかければ起動しそうですが、一回つまずく毎に相当待たされるので確認するのは辞めておきます。

2009/10/25

Ubuntu, CentOS管理コマンドに触れて思う事

LDAP認証の設定を終えて

2つのDistributionでは、そのデフォルト設定などが違うために、同じコードを使っていても、その設定方法やポリシーには違いがあります。Ubuntuでは”auth-client-config"コマンド、CentOSでは"authconfig"コマンドを使って、nsswitch.confやpam.d/以下のファイル群を操作します。

Ubuntuでは/etc/ldap.confは$ sudo dpkg-reconfigure ldap-auth-configで再設定はできて、"nss_base_passwd"などの手動で設定した項目はそのまま残っています。

CentOSでも/etc/ldap.confの状況は同じで、"authconfig"コマンドで設定できます。 authinfo.pyの中では条件にあった行だけを書き換えていて、手動で設定が必要な部分についてはやはり残す仕組みになっています。

何のためのツール群か

こういう管理ツールは必要なのか、時々疑問に思う事があります。 サポートのコストを軽減させたり、ファイルを直接編集する事で関係ないところまで無意識に書き換えてしまうといったケアレスミスの軽減に役に立つ場面はあると思います。

しかし実際には、その場しのぎのツールが生み出されて、そのバリエーションは多義に渡ります。 この分野ではUNIX系システムの特徴である”パイプ”や一つの処理を一つのコマンドに行なわせる簡潔さは継承されていないようです。

システム管理の自動化について考えると、AIXが持っている"ls*","mk*","ch*"系コマンドの一貫性はsmitの体系中で良く動いていると思います。 複雑なデバイスの管理になると崩れていく部分はありますが、それと比較してUbuntuやCentOSの持つ管理系コマンドの仕組みはpythonで書かれていたりして現代的で格好いいかもしれませんが、UNIX系の雰囲気は持っていません。

今後の予定

まだ認証の仕組みにSSLを使っていないので、現実的な応用を考えればLDAP認証やらレプリケーションやらにSSLまで設定をしてようやく最低限なのかなと思っています。

LPICの試験対策としては、まぁ必要ないところなので試験が終ってから、OpenLDAPを自宅LANに導入していこうと思います。まぁどんなOSを使ってもパッケージがhttpdグループやらを作ってくれるので、あらかじめUID, GIDを統一して準備しておく必要性は感じないですけどね。

ひょっとすると将来の仕事でLAN環境を作らなきゃかもしれないし、LDAPを使った応用については勉強しておこうと思っています。まぁ前の前の会社で散々やっていたけれど…。

OpenLDAP 2.4: CentOS 5.4でのLDAP認証設定

基本的にはUbuntuの時と同じで、バージョンは違うものの、使っている仕組みは同じなので /etc/ldap.conf をUbuntuからコピーしてきても動きます。

そこでCentOSで設定する時の注意点だけまとめます。

2009/10/24追記:
以下で説明している方法は、次のコマンドで代用できます。
$ sudo authconfig --enableldap --enableldapauth --ldapserver=10.0.0.2 --ldapbasedn="ou=accounts,dc=example,dc=org" --updateall

全体の流れ

CentOS 5.3のDVDから特にRPMを選択せずに導入し、yum updateで5.4相当にしています。 nss_ldapなどのモジュール類は既に入っているので、yumで取得する必要はありませんでした。

”/etc/ldap.conf"→"/etc/nsswitch.conf"→"/etc/pam.d/system-auth"と編集していくだけです。

/etc/pam.d/system-authの編集

"system-auth"ファイルはloginやsshdなどの設定からincludeされている、認証全般を管理するファイルです。 "pam_unix.so"が読み込まれている前に"sufficient pam_ldap.so"を追加していきます。

auth        required      pam_env.so
auth        sufficient    pam_ldap.so
auth        sufficient    pam_unix.so nullok try_first_pass
...
...
account     sufficient    pam_ldap.so
account     required      pam_unix.so
...

まとめ

実際のところPAMの設定で、最低限必要なのは”auth sufficient pam_ldap.so"ぐらいです。 accountセクションに"pam_ldap"を書かなくても、通常のログインに問題はありません。 まだ"shadowAccount"オブジェクトクラスの情報をLDAPに登録していないからです。

他にも”authorizedServiceObject”、"hostObject"オブジェクトクラスをユーザーIDに設定して、ldpa.confで"pam_check_service_attr yes"等を設定してチェックさせる事もできますが、OpenLDAPの標準的なschemaの中には含まれていませんね。

PAMの挙動を確認するためには、ある程度はソースコードの各定義を斜め読みするのが良さそうです。 ドキュメントから全ての動きを想像するのは、ちょっと難しいかもしれません。

さらに追記

CentOSでは"authconfig"コマンドがPAM, NSS等の各種サービスを設定してくれますが、細かいところまでは難しいようです。

system-authについてはsystem-auth-acへのシンボリックリンクになっていて、"authconfig"コマンドは実際にはsystem-auth-acファイルを編集します。そのためカスタマイズする場合にはsystem-authをファイルに置き換えて編集する事で、将来RPMが更新された際などに"authconfig"が実行されて編集内容をリセットしてしまう危険を回避する事ができます。

マニュアルに書いてあるとはいっても普通にファイルを編集してしまうと、意図しないタイミングで書き変わってしまう可能性があるので、そんな事件に遭遇すると嫌になるかもしれないですね…。

2009/03/01

Ubuntu 8.04のrinseでCentOS-5のイメージを作成する

rinseでcentosのイメージは簡単にできるだろうと思って、試したところうまく動きませんでした。CentOS-4ではURLの指定間違いなんかが報告されているようです。[Wrong server path for CentOS-4 in rinse.conf]
なにしろUbuntu 8.04で導入されるrinseのバージョンは0.9で最新版が1.5ですから、いろいろ不具合があるという事なのでしょう。[“rinse” source package in Ubuntu]
Vine Linux 4.2を導入する時にだいたい処理の流れはわかったので、動くようにしてみました。

PRMダウンロード先の変更

トラフィックを減らすためにRingサーバーにイメージの取得先を変更しています。 これは必須ではないですが、まぁ日本に住んでいるならRingサーバーにあるものは使いましょう、という事で…。
/etc/rinse/rinse.confを編集しました。

[centos-4]
mirror = http://ftp.iij.ad.jp/pub/linux/centos/4/os/i386/CentOS/RPMS/
mirror.amd64 = http://ftp.iij.ad.jp/pub/linux/centos/4/os/x86_64/CentOS/RPMS/
[centos-5]
mirror = http://ftp.iij.ad.jp/pub/linux/centos/5/os/i386/CentOS/
mirror.amd64 = http://ftp.iij.ad.jp/pub/linux/centos/5/os/x86_64/CentOS/

CentOS5用/etc/xen-tools/xen-tools.confの準備

Vine同様にdistributionにcentos-5を指定したファイル(/etc/xen-tools/xen-tools.centos5.conf)を作成します。

$ sed -e '/^#/d' -e '/^$/d' /etc/xen-tools/xen-tools.centos5.conf
dir = /home/xen
install-method = rinse
size   = 4Gb      # Disk image size.
memory = 128Mb    # Memory size
swap   = 128Mb    # Swap size
fs     = ext3     # use the EXT3 filesystem for the disk image.
dist   = centos-5     # Default distribution to install.
image  = sparse   # Specify sparse vs. full disk images.
gateway   = 192.168.1.1
netmask   = 255.255.255.0
broadcast = 192.168.1.255
kernel      = /boot/vmlinuz-`uname -r`
initrd      = /boot/initrd.img-`uname -r`
mirror = http://ftp.jp.debian.org/debian/
ext3_options   = noatime,nodiratime,errors=remount-ro
ext2_options   = noatime,nodiratime,errors=remount-ro
xfs_options    = defaults
reiser_options = defaults
serial_device = xvc0
disk_device = xvda  #default

/etc/rinse/centos-5.packagesの変更

なぜか基本的なライブラリが不足していたので、パッケージを加えました。

e2fsprogs-libs
yum-metadata-parser

この状態で以前のようにxen-create-imageを実行すると、起動はできますが、コンソールからのrootでのログインが行なえないため実質的には使えません。

$ sudo xen-create-image --config /etc/xen-tools/xen-tools.centos5.conf --hostname xen68 --ip 192.168.1.68

これは/etc/shadowでrootのパスワードが設定されていないために発生します。Vineやdebianのイメージではrootはパスワードなしで作成されるため、すぐにパスワードを設定するようにしていました。

解決策1:作業用IDを手作業で作成する

作ってしまったイメージを消すのも、もったいないのでそのまま作業用IDを加えてみます。

ディスクイメージが /home/xen/domains/xen68/disk.imgにあると仮定しています。 まずはこのディスクイメージをマウントします。

$ sudo mount -o loop /home/xen/domains/xen68/disk.img /mnt
$ sudo chroot /mnt

作業用のID"user1"を加えます。実際には自分が普段使っているIDを指定しています。

# /usr/sbin/useradd -m user1
# passwd user1
# /usr/sbin/usermod -G wheel user1

最後に"visudo"を起動して、wheelグループ(%wheel) のユーザーがsudoを実行できるようにします。 次の1行を加えます。

# visudo
%wheel ALL = (ALL) ALL

xenのイメージを起動する前にイメージをアンマウントします。

# exit
$ sudo umount /mnt
これでXenを起動して無事にログインできる事を確認しました。
$ sudo xm create -c /etc/xen/xen68.cfg

解決策(?)2:xen-create-imageのaccountオプション

rinseはXen dom0が稼働しているUbuntu 8.04上のアカウントをコピーする機能自体は一応持っているので、試してみる事にしました。

$ sudo xen-create-image --config /etc/xen-tools/xen-tools.centos5.conf --accounts --hostname xen68 --ip 192.168.1.68

ログファイルは"/var/log/xen-tools/xen68.log"にあって、どうもエラーを大量に掃き出している模様です。関係ないデーモン系のユーザーIDも以降しようとして、何かうまくいっていないようです。
このまま起動してもsudoの設定はされていないので、ログインができるだけで特権ユーザーにはなる術がありませんでした。実際には解決策1と同じ事をする必要がありそうです。
大量のIDを移行したいといった要求がなければ、これを修正してどうにかする必要性はないでしょう。

わざわざrootのパスワードを外すのも嫌なので、手動で自分用のIDを作成する事で回避します。この解決策2は使えないですね…。

2007/09/11

引き続き…CentOS on Xen

先日のUbuntu 7.04 XenでCentOS 4.3を導入した件は、その後、xm create -c /etc/xen/xen113.cfg を実行してみるものの、「Device 0 (vif) could not be connected. Hotplug scripts not working.」というエラーを出し続けたのでした。

その後で順調に動いていた他のdomUも停止後、同じメッセージを表示して起動しなくなった事がわかったので、dom0含めてマシンの再起動をかけて回復しました。

その後、.cfgファイルの"arch=i386"をコメントアウトして"arch=x86_64"な状態で"xen-create-image"を実行した直後も同じ状態になり、いまのところ原因がわからず対処療法的にCentOSなイメージを作成した後にマシンの再起動をしています。

"arch=i386"で作成したdomUは、起動してログインできるものの、"yum update"を実行した際に /usr/lib/python2.3/site-packages/rpmmodule.so を探しにいって見つからないとエラーになってしまいました。ログをみると、最初はi386なRPMファイルを導入して作ったイメージに最後でx86_64なアップデートを適用してしまったらしく、i386とx86_64のファイルが混在するという結果になってしまったようです。今回はCentOSを起動する事を優先して、i386はあきらめて、"arch=x86_64"で進めてみます。

前回までと同じように作成したarch=x86_64なイメージは、起動してログインできますが、"yum"コマンドすらみつからず、"rpm -qa"を実行しても何も表示されない動きをしていて、挙動がi386の時と少し違います。

うーん、これはどう理解すればいいのだろう。arch=x86_64で作ったイメージについて/var/log/xen-tools/のログをみると、RPMの導入で"failed"と表示されているところがあります。

....
        python-elementtree is needed by yum-2.4.2-2.centos4.noarch
        python-sqlite is needed by yum-2.4.2-2.centos4.noarch
        urlgrabber is needed by yum-2.4.2-2.centos4.noarch
+ die 'command "rpm --install   --root /tmp/rqcJeEXkQO --dbpath /tmp/rqcJeEXkQO/var/lib/rpm centos-yumconf-4-4.5
.noarch.rpm yum-2.4.2-2.centos4.noarch.rpm"' failed
+ echo 'rpmstrap: critical error: command "rpm --install   --root /tmp/rqcJeEXkQO --dbpath /tmp/rqcJeEXkQO/var/l
ib/rpm centos-yumconf-4-4.5.noarch.rpm yum-2.4.2-2.centos4.noarch.rpm" failed'
rpmstrap: critical error: command "rpm --install   --root /tmp/rqcJeEXkQO --dbpath /tmp/rqcJeEXkQO/var/lib/rpm c
entos-yumconf-4-4.5.noarch.rpm yum-2.4.2-2.centos4.noarch.rpm" failed
....
これは依存関係に少し問題がありそうです。
/usr/lib/rpmstrap/scripts/centos4 を少し編集して、依存関係のあるモジュールを追加しました。さらに"vault.centos.org"は遅いので、理研のミラーサイトに古い4.3のイメージをみつけたので、このURLを追加して、依存関係のあるRPMの情報を追加しています。
$ diff centos4.20070910 centos4
37a38,39
> http://ftp.riken.jp/Linux/centos/4.3/os/i386/CentOS/RPMS/
> http://vault.centos.org/4.3/os/i386/CentOS/RPMS/
46a49,50
> http://ftp.riken.jp/Linux/centos/4.3/os/x86_64/CentOS/RPMS/
> http://vault.centos.org/4.3/os/x86_64/CentOS/RPMS/
262a267,271
> 52:sqlite-3.2.2-1.x86_64.rpm
> 52:expat-1.95.7-4.x86_64.rpm
> 52:python-urlgrabber-2.9.6-2.noarch.rpm
> 52:python-elementtree-1.2.6-4.x86_64.rpm
> 52:python-sqlite-1.1.6-1.x86_64.rpm
さて何とか起動しましたが、やっぱりうまく起動しない。 何かがエラーだと思ったら、/home/xen/domains 以下にある disk.img のサイズがおかしい。 "ls -l"でみると4GBの設定どおり表示されるのは良いとして、du -ks disk.img の結果が 0KBになっていました。うーん、これはわからない。"xen-delete-image"コマンドを実行してから同じ名前で作り直しているから、古いdisk.imgをXenがつかんだままだったりとかしたのか…。いまとなっては状況証拠しかみつからないので、"xen-delete-image"で作成したイメージを消してからマシンを再起動して、再びイメージの作成をやりました。

結果は…、無事にdomUでCentOSが起動して、yumコマンドも存在するし、"rpm -qa"の結果も正しそうです。"yum install gcc"でgccが導入できました。

vif周りのHotplugがちゃんと動かなくてイメージ作る度に、再起動が必要になるし、何かする前にちゃんと"xm destory "でdomUを停止したり、面倒な事が多いから、まだまだ実用には気をつける事が多いかな。…、だからXenSourcesがXen v4.0を売るのか…。うまく使いこなさないとだなぁ。

2007/09/10

Ubuntu 7.04 XenのゲストOS(domU)にCentOSを

どうやら/dev/hdaをCFディスクにした構成では、/dev/hdaが/dev/sdbとして認識されてしまい、dom0がうまく起動しなくなってしまいました。
いろいろ試してみたものの、おとなしく/dev/hdaを外して、/dev/sdaなSATAディスクと/dev/hd{c,d}にCD-RW, DVD-ROMドライブをつけた構成に戻して、Ubuntu 7.04を入れ直す事にしました。

以前試した時と同じ構成になっているので、当然Xenは無事に動き、etchをdomUとして動かす事ができたので、/etc/xen-tools/xen-tools.confの中で dist = centos4 を指定してCentOS 4.1のイメージを動かしています。

単純に/etc/xen-tools/xen-tools.confの中で、"dist = centos4" と変更しただけでは途中でエラーになってしまいます。そこでrpmstrapを導入して、xen-create-imageの引数を少し変更したり、いろいろ試してみました。

現状のxen-tools.confの中身は、次のようになっています。

dir = /home/xen
rpmstrap = 1
size   = 4Gb      # Disk image size.
memory = 128Mb    # Memory size
swap   = 128Mb    # Swap size
fs     = ext3     # use the EXT3 filesystem for the disk image.
dist   = centos4     # Default distribution to install.
image  = sparse   # Specify sparse vs. full disk images.
gateway   = 192.168.1.1
netmask   = 255.255.255.0
kernel = /boot/vmlinuz-2.6.19-4-generic-amd64
initrd = /boot/initrd.img-2.6.19-4-generic-amd64
arch=i386
ここでrpmstrapが必要なので、apt-getで導入してしまいます。
$ sudo apt-get install rpmstrap
xen-create-imageの引数は次のようにしています。
$ xen-create-image --verbose --hostname xen113 --ip 192.168.1.113
さらにwgetでRPMファイルを取得するところで、"-e"というパッケージを取得しようとしてエラーになっていたので、/usr/bin/rpmstrapの1行目を少し変更しています。 変更前
#!/bin/sh
変更後
#!/bin/bash
あとは…、xen-tools.confで"dist = "の後ろに指定した文字列をキーにして/usr/lib/rpmstrap/scripts/の"centos4"ファイルを編集してURLが並んでいるところの先頭にCentOS 4.3のRPMファイルが存在する場所を指定します。
$ diff /usr/lib/rpmstrap/scripts/centos4.20070910 /usr/lib/rpmstrap/scripts/centos4
37a38
> http://vault.centos.org/4.3/os/i386/CentOS/RPMS/
46a48
> http://vault.centos.org/4.3/os/x86_64/CentOS/RPMS/
既存のURLはCentOS 4.1のイメージを指しているようになっているけれど、アクセスするとエラーになってしまったり、ちゃんとRPMファイルにアクセスできない。
その中で指定されているRPMファイルのバージョンを比較すると、どうやら .../4.1/... ディレクトリ以下にあったのは、CentOS 4.3のイメージだったらしい。 時間が経ってポリシーが変更したのか、4.1以下からみつけたREADMEファイルには、4.1が欲しければ http://vault.centos.org/ いいけとあったので、そこの4.3ディレクトリに変更した。

何回か"xen-create-image"を実行して、ようやく順調に流れたけれど、"Executing : xt-customize-image ..."と表示されたところで、進まなくなってしまった。
とりあえず放置して、今日はこのまま寝よう。

2007/09/06

CentOSからUbuntuへ - メインマシンのRAID5化

仕事が忙しくなってきて、現実逃避の勢いも増して、 /boot = RAID-1, / = RAID-0 だったメインマシンにディスクを追加して、ディスク合計4台でSoftware RAID-5 を構成してみた。
体感速度は案外早く、ストレスを感じる機会が随分減った。まだVMWareのイメージはUSBディスクに置いたりしているものもありますが。

PATAなディスクでIDEのプライマリー、セカンダリーをフルに使った構成では遅いと聞いていたので、SATAなディスクを4台を、2台はマザーボードに、2台はPCIカードを追加しています。 いまどき3.0GbpsなSATA-II + NCQ だけれど、メインマシンはAGPx8 + PCIなちょっと古いマシンなので、Ratoc Systems製のREX-PCI15Sを買いました。

これは1.5Gbpsな内蔵SATAインタフェースが2つ付いているものだけれど、4つインタフェースが付いた方ではブートディスクにできないのでこれにしました。

/bootを格納する起動領域をどこに取るか迷って、各ディスクに512MBのswap領域は確保していますが、/bootの領域を取っても適当な使い方がわからない。
RAID-5ではMBRのliloからmdデバイス上にある/boot領域を認識できないので、いろいろ迷った挙句に、/boot 領域はCFカード→PATAインタフェースカードを買って、IDEポートに接続して起動ディスクとして使っています。

同容量のCFカードを買ってきて、現行の起動ディスクイメージをddコマンドで吸い出して、交換したCFカードにリストア+起動できるか、まったく同じカードならできるだろうけれど、今度 テストしてみましょう。

ついでにOSをCentOS 4.5から、Ubuntu 7.04に入れ替えてしまい、VMWareやMyEclipseなどの環境を移行してテストしています。
一部うまく動かないものもあるけれど、アドホックに楽しめれば良いという考えなら、Ubuntuがいまの流行りなのかなぁ。

CentOSはRHELを勉強するためだと割り切っていたけれど、Ubuntuに乗り換えたのには満足。