I ♥ WordPress

サーバの構築を簡単にするためのステップ (その3)
2007/08/02 08:00 posted by kunkichi

前のエントリの続き。

はてなと一般IT企業との乖離については前回で終わり。だってめんどくさいんだもん(爆)。まあどこの会社にもいろいろ政治的な問題があって難しいということを単に愚痴ってみただけです(笑)

今日はこれ。

まっさらなサーバを30分で本番投入できるようにする

サーバをバックエンドの本番に投入するまでには、おおまかに以下のことが必要です。

〜略〜

  • OSのインストール

〜略〜

はてなダイアリー - とあるはてな社員の日記

2. OSのインストール

はてなが現在メインで使っているのは確かCentOSが多いらしい。CentOS は Red Hat EL のクローンであり、自動インストールの仕組みは Red Hat 標準の仕組みである「キックスタート」がそのまま使える。

昔、Red Hat 7〜9 を仕事で使っていた頃は検証環境を作ったりするのにFDからキックスタートして環境作り直しとかよくやってたんだけど、ここ数年は 商用UNIXばっかりで Linux から離れていたので、ちょっと復習をかねて、キックスタートを使ったOSのインストール手法を整理してみる。ちなみにOSはCentOS5を使います。

  1. CD/DVDからインストール。キックスタートファイルはFDに置く。

    一番ベタなやり方。でもこれだけでインストール時の対話形式をスキップできる。

    昔は、インストール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からカスタマイズしたところは以下。

    • デフォだとファイアウォール と SELinux が有効になっているので disable。
    • デフォだとディスクのパーティション構成を設定する箇所がコメントアウトされてるのだけどこれを有効にする。ちなみに上のパーティション構成はテストなのでとても安易w。
    • 最後の方のインストールするパッケージグループ・パッケージ名にいくつか追加(lm_sensors、net-snmp-libs、net-snmp、ntp)。

    あと、便宜上ネットワーク設定の箇所はバックスラッシュ入れて複数行に分けてるけど、実際には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あとは終わるまでのんびりとコーヒーでも。

  2. CD/DVDからインストール。キックスタートファイルはネットワーク上に置く。

    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を割り当てるとかした方がいいかも。

  3. CD/DVDで起動。キックスタートファイルとインストールデータはネットワーク上に置く。

    せっかくキックスタートはリモートでおけるようになったのだから、インストールするデータもネットワーク上においてしまおう。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がないのでそれはまた今度。

コメント&トラックバック

トラックバックURL





このページの先頭へ