

現在は`kickstart`を利用して数台の物理サーバに対する`CentOS6`インストール作業を半自動化しています。しかし良いデバッグの仕方がわからないために、設定ファイルを更新するたびDVDを焼いてインストールする作業を行っており、1回にだいたい30分ほどかかってしまっています。

より効率が良く、(もし可能なら)検証も容易な方法はありますか？(たとえば`chef`を用いて物理マシンへの`CentOS6`インストールなどを行うなどが可能でしょうか)

仮想マシンの構築は割りとよく記事で見かけるのですが、物理マシンの自動構築方法についてお教えいただけると助かります。`Baremetal
Deployment`といったキーワードも耳にするのですが、数台程度の構成には大げさで複雑なのかなと考えてます。

尚、この物理サーバーがローカルネットワーク内の最初のマシンでして、この上に仮想マシンを立ち上げてDNSやDHCP、Webサーバを構築していくことになります。（ただし、物理サーバの構築時だけ一時的にそれらを開発ノートPCなどで用意することは可能かもしれません。)


CC BY-SA 3.0
2014-12-18T16:14:20.837
2055
2020-08-11T07:34:45.160
2020-08-11T07:34:45.160
3060
3313
question
linux centos
物理サーバーへCentOS6を自動インストールしたい


構築に時間がかかるかもしれませんが、すぐに思いついたのはPXEブート経由でkickstartをつかった自動インストールを行う事です。

もしご存じなければ、PXEブートで～というのは、いわゆるネットワークブートからのインストールです。  
この画面でDHCPから指示があれば起動してOSのインストールなどが行えます。

![画像の説明をここに入力](https://i.stack.imgur.com/Xyo64.jpg)

OSのinstallイメージなど必要なリソースはhttpアクセス可能なサーバーに置いておきます。  
kickstartのファイルも同じところに置くことになりますので、kickstartのファイルを作り直してもhttpサーバーのファイルを更新するだけで良いので、構築してしまえばDVDの焼き直しよりは効率が良いと思います。

ただし、PXEブート環境を作るのにも（特に最初は）時間がかかります(*1)ので、数台程度だとかえって時間がかかってしまいそうですね。

(*1) PXEブートはDHCPサーバーが指示する格好になるのでDHCPサーバー構築、tftp構築、httpサーバー構築などが必要になります。


CC BY-SA 3.0
2014-12-18T16:56:04.107
2060
2014-12-18T16:56:04.107
728
2055
answer


一台目の設定ですと、物理的なメディアを使わざる得ないので、USBかDVDが手っ取り早いと思います。そして、USBの方が、繰り返しには便利だと思います。

まず、イメージ作成環境を用意します。もし、まだ構築していないのでしたら、DVDのイメージを自動生成する環境を作ります。この環境は、別の方が説明されているPXEBOOT用のイメージにも使えますから、一つあると便利と思います。そして、同じイメージ作成環境を用いてUSBに作るようにすれば便利です。

ここから先は色々な方法があると思います。また、パッケージの構成をいじるのが多いとか少ないとか、設定ファイルだけしかかえないと、など条件は色々あると思いますが、
_1)ベースになる部分を高速に設定する_ ことと、 _2)パッケージの追加をすること_ 、 _3)設定ファイルを置き換えること_
あたりを区分けして考えると良いかもしれません。

ベース部分は、たとえば、ディスクイメージを作ってUSBに納めておいて、イメージコピーし（あとで必要に応じて、パーティションサイズは変えるなど）、その上にインストールしてゆく方法はとれると思います。その上に,
2), 3) を上書きする。ある程度安定したら 1) に 2), 3)
の結果をマージする、というステップをとれば、かなり時間削減できるのではないでしょうか。

もちろん、構築の手間とデバッグはそれなりにかかりますから、手間をかける価値があれば、ですけれども。


CC BY-SA 3.0
2014-12-18T22:56:28.833
2063
2014-12-18T22:56:28.833
44
2055
answer


  * ベースのインストールを、kickstartで行う。kickstartの中でchefの設定も入れておく
  * インストール後の設定変更はchef経由で行う

という手法ではダメでしょうか？

例えば、下記のks.cfgはどうでしょうか？

  * PXEブートではなく、起動時にホスト名、IPアドレスなどを入力する
  * インストールに使用するCentOS6の関連ファイルをNFSサーバ 192.168.44.151:/images/cent6に配置
  * 追加でインストールしたいファイルを192.168.44.151:/images/work/に配置

[code]

    # Kickstart file automatically generated by anaconda.
    #version=DEVEL
    install
    nfs --server=192.168.44.151 --dir=/images/cent6
    lang en_US.UTF-8
    keyboard jp106
    %include /tmp/network-ks.cfg
    rootpw  --plaintext password
    firewall --service=ssh
    authconfig --enableshadow --passalgo=sha512
    selinux --enforcing
    timezone --utc Asia/Tokyo
    zerombr
    bootloader --location=partition --driveorder=sda --append="crashkernel=auto"
    clearpart --all --drives=sda --initlabel
    part /boot/efi --fstype=efi --grow --maxsize=200 --size=50
    part /boot --fstype=ext4 --size=500
    part pv.vol1 --grow --size=1
    volgroup vg_vol1 --pesize=4096 pv.vol1
    logvol / --fstype=ext4 --name=lv_root --vgname=vg_vol1 --grow --size=1024 --maxsize=51200
    logvol swap --name=lv_swap --vgname=vg_vol1 --grow --size=1638 --maxsize=1638
    repo --name="CentOS"  --baseurl=nfs:192.168.44.151:/images/cent6 --cost=100
    %packages
    @core
    @server-policy
    @workstation-policy
    nfs-utils
    %end
    %pre --log=/root/anaconda-pre.log
    #!/bin/bash
    exec < /dev/tty6 > /dev/tty6 2>&1
    chvt 6
    echo "=== Please input this server information ==="
    read -p "Enter hostname: " NEWHOSTNAME
    read -p "Enter IP address: " NEWIPADDR
    read -p "Enter netmask: " NEWNETMASK
    read -p "Enter default gw: " NEWGATEWAY
    read -p "Enter DNS server IP: " NEWDNS
    echo "network --bootproto=static --ip=${NEWIPADDR} --netmask=${NEWNETMASK} --gateway=${NEWGATEWAY} --nameserver=${NEWDNS} --device=eth0 --onboot=yes --hostname=${NEWHOSTNAME}" > /tmp/network-ks.cfg
    chvt 1
    %end
    %post --log=root/anaconda-post.log --erroronfail
    echo "192.168.44.151   master" >> /etc/hosts
    mkdir /mnt2
    mount -t nfs 192.168.44.151:/images/work /mnt2
    rpm -ivh /mnt2/chef-11.12.2-1.el6.x86_64.rpm
    mkdir -p /etc/chef
    cp /mnt2/validation.pem /etc/chef/validation.pem
    chmod 0600 /etc/chef/validation.pem
    cp /mnt2/client.rb /etc/chef/client.rb
    /usr/bin/chef-client
    %end
    #reboot
    
[/code]


CC BY-SA 3.0
2014-12-19T04:32:53.020
2094
2014-12-19T04:32:53.020
4815
2055
answer