Linuxユーザの立場から、役立つ情報や困ったときの解決方法を分かりやすく、かつ簡潔に記事にまとめています。主に、Ubuntu 8.04(→9.04)やCentOS 5.2(→5.3)で確認したことですが、他のディストリビューションでも応用できると思います。内容は(1)設定ファイルの書き方(2)役立つソフトウェア紹介やインストール方法(3)便利なコマンドの使い方や活用例(4)困ったときの解決方法です。このページの末尾にキーワード別で記事を分類してあります。また、真上の「ブログ検索」フォームからブログ内の記事を検索できます。

2009年6月20日土曜日

ThinkCentre A50(8320-87J)をサーバにするときの注意点 このエントリーを含むはてなブックマーク

本記事では、ThinkCentre A50(8320-87J)にcentOSを入れて、常時立ち上げでサーバとして運用する場合に注意すべきことを書く。

カーネルパラメータ

このマシンにsshdを入れて、常時立ち上げ状態にして1日ほど経過すると、sshでログインが異常に遅くなる(あるいはログインできない)症状が発生した。また、このサーバに直接ログインを試みると、同じように異常に時間がかかったり、フリーズしたりすることもある。

ネットで調べてみると、割り込み要求を処理するapicという機能を停止して、ブートすると解決するらしい。実際に、/boot/grub/grub.confで、次のようにnoapicというカーネルパラメタを与えてブートするように設定した。

      #kernel /vmlinuz-2.6.18-xxx.xxx.xxx.el5 ro root=LABEL=/1        <-- コメント         kernel /vmlinuz-2.6.18-xxx.xxx.xxx.el5 ro root=LABEL=/1 noapic  <-- 追加 

すると、以降、上で説明した症状は現れなくなった。

追記: この設定をして、サーバを運用していたところ、1日とは言わないまでも1週間以内にはサーバがダウンしてしまう症状が現れた。ネットワークの設定ミスやケーブル不良などの他の要因を取り除いても依然として症状は現れた。一部のサービスだけがダウンしているのならまだしも、ログを見るかぎりでは、すべてのサービスのログが一斉に途切れていた。

この症状から推測すると、おそらく、ある時にとたんにOS自体がダウンしてしまったのだろう。とすると、個別のサービスの設定ミスが原因であるのが考えられないし、バグがあるとしても、何らかの報告がネット上にあるハズだが、見当たらない。ゆえに、ハードウェアがらみの原因が疑われる。

もう一度、apic関係でネットを調べてみたところ、さらに、もう1つのカーネルパラメータacpi=offを与える必要があるという情報をみつけた(というか、見落としていた)。さっそく、以下のように、grub.confを書き換えて、再起動した。

      #kernel /vmlinuz-2.6.18-xxx.xxx.xxx.el5 ro root=LABEL=/1        <-- コメント
      #kernel /vmlinuz-2.6.18-xxx.xxx.xxx.el5 ro root=LABEL=/1 noapic  <-- 追加
       kernel /vmlinuz-2.6.18-xxx.xxx.xxx.el5 ro root=LABEL=/1 noapic  acpi=off <-- さらに追加

参考URL: Ubuntuforums.org:"Sudden random drastic slow down (near freeze)"

さらに追記:また、サーバダウンが発生した。まだ1回しか確認していないが、この前の設定変更では解決しなかったようだ。実は、同じ機種のサーバをもう1台メンテナンスしているが、そちらはダウンしていない。両者の違いは、起動しているサービスおよび負荷ぐらい。

まずは起動サービスの差分を疑ってみる。実験前に、極力不要なサービスを停止した。そして、ダウンした方のサーバでacpidとampdが動いていた(他方のサーバでは動いていない)ので、これらを停止した。経過観察してみる。

OSのインストール

OSを新規インストールするとき、このタイプのThinkCentreだと少し苦労するかもしれない。インストールに使えそうなI/Fとしては、FDドライブとCDドライブとUSBとイーサネットコネクタがある。

  • 最近のlinuxはフロッピー起動の方法が使えない。ブートイメージが1.5Mに収まらなくなったとか。
  • 手元にCDに入ったOSがあれば良いが、雑誌に付いているのはDVDの場合が多い。
  • USB起動を試してみたができなかった。

順当に考えると、ネットワーク経由のインストールが残される(他にもあるかもしれないが)。何らかの方法でマシンを起動できたとしても、私の場合、プロキシ経由でしかインターネットに接続できないので、単純にHTTPあるいはFTP経由のインストールはできない。

よくWebで紹介されている方法でPXEブートでインストールする方法があるが、DHCPサーバを立てなければならない。(企業などのように)既にDHCPサーバのある内部ネットワークで、この方法はあまりやりたくない。

そこで、私のとった方法を説明する。起動イメージ(boot.iso)を取得して、CD-ROMかDVDに焼く。DVDの場合は、DVDドライブをマシンにUSB接続すること(<- DVDドライブでブートはできるが、インストールプロセスでHard Disk, FTP, HTTPなどインストール方法を聞かれるところで、DVDドライブが選択肢になくて、起動用途でしかDVDドライブは使えなかった)。

# wget http://ftp.riken.jp/Linux/centos/5.2/os/i386/images/boot.iso

isoイメージをCDやらDVDに焼く方法は、インターネットで調べたらたくさんの情報があるので、ここでは省略するが、私は、Ubuntuで普段作業しており、Braseroというツールが入っているので、それを使って作成した。

次に、この起動イメージを使って、マシンを起動した(もちろん、Baiosでデバイスの起動順位を適切に設定しておくこと)。

プロキシ経由でないと、インターネットに接続できないので、マシンを起動できたからといって、そのままインストールというわけにはいかない。ここでは、同一ネットワーク上にある他のPC(HDの空きスペースが十分あること)を使ったインストールを説明する。

方法は、この作業用PCにOSのイメージファイルをダウンロードし、さらにこのPCをwebサーバとすることで、このローカルレポジトリを内部ネットワークで公開するのである。DHCPでIPを動的に配布している場合は、インストール途中でIPが変化しないように注意が必要。

作業用PCで、webサーバをインストールする。この方法はここでは説明しない。次に、下のようにイメージファイルをダウンロードする。

# wget http://ftp.riken.jp/Linux/centos/5.2/isos/i386/CentOS-5.2-i386-bin-DVD.iso

そして、ISOファイルをweb公開用のディレクトリ(例えば、hogeユーザ用のディレクトリにcentosというディレクトリを作るなら、マウントポイントは/home/hoge/public_html/centos)にマウントする。

# mount -t iso9660 -r -o loop CentOS-5.2-i386-bin-DVD.iso /home/hoge/public_html/centos

作業用PCのIPアドレスを調べる。下のinetアドレスというところ。ここでは、説明のため、192.168.0.1とする。

# ifconfig
eth0      Link encap:イーサネット  ハードウェアアドレス 00:00:00:00:00:00 
         inetアドレス:192.168.0.1  ブロードキャスト:xx.xxx.xxx.xxx  マスク:xxx.xxx.xxx.xxx
以下、省略

作業用PCのhogeユーザのweb公開用のディレクトリに、適当なhtmlファイルを置いて 、きちんとアクセスできるか確認する。

# cd /home/hoge/public_html
# echo 'Hello, World!' > index.html

そして、http://192.168.0.1/~hogeにアクセスして、Hello, World!と表示されたらOK!

そして、インストール対象のPCを起動させてHTTPインストールを選択する。レポジトリのあるサイトとディレクトリを聞かれるので、下のように入れる。以上

サイト:192.168.0.1
ディレクトリ:/~hoge/centos

dnsmasqで簡易DNSサーバ このエントリーを含むはてなブックマーク

本記事では、簡易的なDNSサーバを構築するための方法をまとめる。

DNSサーバ

ネットワーク上にある各ホストにはipアドレスが割り当てられているが、各クライアントは、それらのホスト(例えば、webサーバなど)を指定するときにipアドレスでなく、ホスト名を使うことが多い。実際に、ネットワークがある程度以上大きくなると、それだけホスト数が増えるからである、利用するホストのipアドレスを覚えることは現実的でない。そこで、DNSサーバは、クライアントが問い合わせてきたホスト名から、そのipアドレスを答える。

dnsmasq

DNSサーバというと、Bindが有名だが、設定するのが大変で、セキュリティにも十分注意しなければならない。小中規模の内部ネットワークで名前解決をする場合など、手っ取り早く簡易的なDNSサーバを立てる場合、dnsmasqがちょうど向いている。

以下のサイトに、比較的詳しい情報が載っているので、興味をもった人は見てみるとよいと思う。

設定

centOS 5.3にインストールしてみた。

# yum install dnsmasq

設定ファイルは/etc/dnsmasq.confと/etc/hostsと/etc/resolv.confと(dhcpdを使っている場合は、そのサービスを提供しているサーバの)/etc/dhcpd.confである。設定方法は、構築するネットワークによってまちまちだが、(上の参照サイトにあるように)それほど多くの設定項目があるわけではない。私の場合は、内部ネットワークにはdhcpサーバを既に動かしていたことと、プロキシサーバを経由してインターネットに接続するようなネットワークだった。

まず、/etc/dnsmasq.confを読みながら、必要と思われる部分をコメントアウトしたり、パラメータを設定した。まず、"better netizen"であるために、次の2つをコメントアウト。

# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv

内部ネットワークをWANをつなげるゲートウェイ(NIC2枚刺し)のLAN側のNIC(=eth1)が名前解決を受け付ける方なので、それを指定した。

# If you want dnsmasq to listen for DHCP and DNS requests only on
# specified interfaces (and the loopback) give the name of the
# interface (eg eth0) here.
# Repeat the line for more than one interface.
interface=eth1

DHCPはdhcpdが既にサービスを提供しているので、dnsmasqではdnsだけを提供することにする。したがって、ゲートウェイのNIC2枚(eth0およびeth1)はDHCPを使わないことを明示。

# If you want dnsmasq to provide only DNS service on an interface,
# configure it as shown above, and then use the following line to
# disable DHCP on it.
no-dhcp-interface=eth0
no-dhcp-interface=eth1

DHCPサーバの設定ファイル/etc/dhcpd.confに次のように書き込み、DHCPでipが割り当てられる内部ネットワークの各クライアントにDNSサーバやドメイン名などの情報を伝える。

subnet 192.168.xxx.xxx netmask 255.255.255.xxx {
        option routers                  192.168.xxx.xxx;   <--- ゲートウェイのLAN側のIPアドレス
        option subnet-mask              255.255.255.0;

        #option nis-domain              "domain.org";
        option domain-name              "xxx.yyy.jp";
        option domain-name-servers      192.168.xxx.xxx;   <---- DNSサーバのIPアドレス
    以下、省略
}

/etc/hostsに、内部ネットワークおよびDMZにおいてあるwebサーバなどのホスト名(およびエイリアス)とipアドレスとの対応を記述した。

次に、/etc/resolv.confだが、名前解決のためのDNSサーバを登録しておく。自分自身でまずは名前解決を試みて、それができないならば、ルータに問い合わせるように設定した。

; generated by /sbin/dhclient-script
search hoge.xxx.yyy.jp
nameserver 192.168.xxx.xxx  <--- LAN側のIPアドレス
nameserver 192.168.yyy.yyy  <--- ルータのIPアドレス

ここで、注意しなければならないのは、ネットワークを再起動すると、この設定ファイルが上書きされて、ルータのIPアドレスだけになってしまうことである。"; generated by /sbin/dhclient-script"と書かれているように、このマシーンがdhcpでルータからipアドレスを取得しているならば、自動的にルータのIPアドレスだけが名前解決のために登録されてしまう。これを避けるために、NICを立ち上げるときに参照される設定ファイル/etc/sysconfig/network-scripts/ifcfg-eth0でPEERDNS=noを設定しておく。

DEVICE=eth0
BOOTPROTO=dhcp    <--- ルータからDHCPでIPを取得する場合
HWADDR=00:00:00:00:00:00
ONBOOT=yes
IPV6INIT=no
PEERDNS=no         <---これを追加

/etc/resolv.confの上書き対策に関する情報は、centOSのresolv.confをDHCP使用時に上書きしないようにするを参照した。

基本的な設定を済ませた後に、サービスを起動し、登録する。次では、dnsmasqのstartだけを書いているが、上で設定を変更したサービスはすべてリロードしておくこと。

# /etc/rc.d/init.d/dnsmasq start
# chkconfig dnsmasq on

suの制限 このエントリーを含むはてなブックマーク

suをwheelグループに所属するユーザだけに制限する場合に、/etc/login.defsに

SU_SHEEL_ONLY yes

と設定するように、書いてあるWebサイトがよくあるが、これは古いやり方らしい。元ネタは、pam_wheel.so を使う場合は、SU_WHEEL_ONLY の設定は不要。

/etc/pam.d/suで次のように設定すれば、suできるユーザはwheelグループの人だけに制限できる。

# (RedHat 系)
auth  required pam_wheel.so use_uid

# (Debian 系)
auth  required pam_wheel.so

新規ユーザを追加する。 このエントリーを含むはてなブックマーク

新規ユーザhogeを追加するには、useraddコマンドを使うが、ubuntuで次のように実行すると、ホームディレクトリが作成されない。

$ useradd hoge

useradd コマンドには -m オプションをつけように書いてあるように、/etc/login.defs に

CREATE_HOME     yes

と設定してある場合は、mオプションが不要だが、そうでないならば次のようにしておくこと。

$ useradd -m hoge

ユーザの所属グループを調べる。 このエントリーを含むはてなブックマーク

ユーザhogeの所属グループを調べるには、次のidコマンドを使う。

$ id hoge
uid=1000(hoge) gid=1000(hoge) 所属グループ=1000(hoge),24(cdrom),29(audio),115(netdev)

キーワード

キーワード別に記事を分類してあります。クリックすると各キーワードに該当する記事たちが表示されます。

過去の記事

筆者について

自分の写真
趣味はコンピュータ、音楽、写真などです。