ブログトップ 記事一覧 ログイン 無料ブログ開設

まめ畑 このページをアンテナに追加 RSSフィード Twitter


2010-06-11 PXEBootとKickstartとPuppetで自動化してみる

[][][][]PXEBootとKickstartPuppetで自動化してみる 16:54 PXEBootとKickstartとPuppetで自動化してみるを含むブックマーク

PXEBootとPuppetOSインストールといろんな設定を自動化・省力化しようと思って試行錯誤中です。

試行錯誤のメモ

やること

PXE Boot+Kickstart+Puppetを使用してサーバの自動設定


PXE Boot (CentOS5.5)

yum install tftp tftp-server
  • /etc/xinetd.d/tftp
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -c -u root -s /tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
        only_from               = 192.168.147.0/24,127.0.0.1
}
sudo /etc/init.d/xinetd restart

インストールするOSISOを用意(今回はCentOS5.5)

以下、ISOを「/iso/」に、マウント先を「/pxeiso/centos5.5」

sudo mkdir /pxeiso
sudo mkdir /pxeiso/centos5.5
sudo mount -t iso9660 -o loop /iso/CentOS-5.5-i386-bin-DVD.iso /pxeiso/centos5.5
sudo yum install syslinux

  • ブートイメージの保存先の作成とデータのコピー
mkdir /tftpboot/centos5.5
cd /pxeiso/centos5.5/images/pxeboot
sudo cp vmlinuz /tftpboot/centos5.5/
sudo cp initrd.img /tftpboot/centos5.5/

  • pxeブートの設定ファイル作る
mkdir /tftpboot/centos5.5/pxelinux.cfg

にして保存すると、クライアントマシン毎に設定を変えられる。読み込み時には文字を最後から1字ずつ削りマッチさせていくので、

レンジの指定も可能。最後にdefault)

default centos5

label centos5
prompt 1
timeout 100
kernel vmlinuz
append load initrd=initrd.img devfs=nomoun

sudo yum install dhcp
sudo cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf

  • /etc/dhcpd.conf
ddns-update-style interim;
ignore client-updates;

subnet 192.168.147.0 netmask 255.255.255.0 {    #自分の環境に合わせる

# --- default gateway
        option routers                  192.168.147.2;
        option subnet-mask              255.255.255.0;

#        option nis-domain              "domain.org";
#        option domain-name             "domain.org";
        option domain-name-servers      192.168.147.2;

        option time-offset              -18000; # Eastern Standard Time
        filename "/centos5.5/pxelinux.0";                #追加
        next-server                     192.168.147.129; #PXEブートサーバのIPアドレス
#       option ntp-servers              192.168.10.1;
#       option netbios-name-servers     192.168.10.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
#       option netbios-node-type 2;

        range dynamic-bootp 192.168.147.128 192.168.147.254;
        default-lease-time 21600;
        max-lease-time 43200;

        # we want the nameserver to appear at a fixed address
#        host ns {
#                next-server marvin.redhat.com;
#                hardware ethernet 12:34:56:78:AB:CD;
#                fixed-address 207.175.42.254;
#        }
}
sudo /etc/init.d/dhcpd restart

  • pxelinux.0がみつからんかったので
wget ftp://ftp.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.86.tar.gz
cp pxelinux.0 /tftpboot/centos5.5/
  • /etc/exportsを編集

/iso/ 192.168.147.0/255.255.255.0(ro)

/etc/init.d/portmap restart
/etc/init.d/nfs restart



kickstart

  • /ks/ に ks.cfgを作成して以下を記述
  • /etc/exportsを編集

/ks/ 192.168.147.0/255.255.255.0(ro)

/etc/init.d/portmap restart
/etc/init.d/nfs restart

  • /root/anaconda-ks.cfgにインストール時に選択した物が書き込まれているので、コピーしてお好みに編集する
  • %postセクションの後に書いた処理がインストール後に実行される(ユーザの作成や必要なパッケージの作成など)

例:

install
text
nfs --server=192.168.147.129 --dir=/iso/
lang ja_JP.UTF-8
keyboard jp106
xconfig --startxonboot
network --device eth0 --bootproto=static --ip=192.168.147.11 --netmask=255.255.255.0 --gateway=192.168.147.2 --nameserver=192.168.147.2 --hostname pxe.test.com
rootpw --iscrypted **********************
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --disable
timezone Asia/Tokyo
reboot
bootloader --location=mbr --driveorder=sda --append="rhgb quiet"
autopart
clearpart --all --initlabel

%packages
@base
@core
@development-libs
@development-tools
@editors
@japanese-support
@ruby
keyutils
trousers
fipscheck
device-mapper-multipath
imake

  • /tftpboot/centos5.5/pxelinux.cfg/default を変更

append ks=nfs:192.168.147.129:/ks/ks.cfg load initrd=initrd.img devfs=nomount



Puppet

  • 証明をする際にドメインがいるので、DNSに登録するか/etc/hostsに書いておく
    • boot.test.com client1.test.comを今回使う
  • Ruby製なのでRuby入れておく
wget http://reductivelabs.com/downloads/facter/facter-latest.tgz
gzip -d -c facter-latest.tgz | tar xf -
cd facter-*
sudo ruby install.rb

wget http://reductivelabs.com/downloads/puppet/puppet-latest.tgz
gzip -d -c puppet-latest.tgz | tar xf -
cd puppet-*
sudo ruby install.rb

sudo mkdir -p /etc/puppet/manifests
sudo touch /etc/puppet/manifests/site.pp
class mysql-server {
    $password = 'test'
    package { 'mysql-server': ensure => installed }
    service { 'mysqld':
        ensure    => running,
        subscribe => Package['mysql-server'],
    }

    exec { 'Set MySQL server root password':
        subscribe   => Package['mysql-server'],
        require     => Service['mysqld'],
        refreshonly => true,
        unless      => "mysqladmin -uroot -p$password status",
        path        => '/bin:/usr/bin',
        command     => "mysqladmin -uroot password $password",
    }
}


node default {
    include 'mysql-server'
}


  • 初回起動だけ --mkuserをつける
sudo puppetmasterd --verbose --mkusers

puppetd --server boot.test.com --verbose

puppetca --sign client1.test.com

  • 自動で署名を行う場合は /etc/puppet 配下に「autosign.conf」というファイルを作成し、
client1.test.com
とか
*.test.com

のように記述しておけばいい

(もし、クライアント側で署名のエラーが出たら、puppetサーバの /etc/puppet/ssl/ca/signed 中にあるクライアント証明ファイルを消してみるとかいいかも)




kickstartPuppetも入れる

  • %postに以下を記述
%post --log=root/anaconda-post.log --erroronfail
echo "192.168.147.129 boot.test.com" >> /etc/hosts
wget http://reductivelabs.com/downloads/facter/facter-latest.tgz
gzip -d -c facter-latest.tgz | tar xf -
cd facter-*
ruby install.rb
wget http://reductivelabs.com/downloads/puppet/puppet-latest.tgz
gzip -d -c puppet-latest.tgz | tar xf -
cd puppet-*
ruby install.rb

mkdir -p /etc/puppet/manifests
touch /etc/puppet/manifests/site.pp

echo "@reboot /usr/sbin/puppetd --server boot.test.com --verbose" >> /var/spool/cron/root

最終行でリブート時に実行するようにしてる。

起動スクリプトを設定してもいい


参考にしたサイト

VirtualBoxの仮想マシンをディスクレス化させる - 酔いどれコード

CentOS で tftp を使う - ~fumi/ChangeLog

404 - エラー: 404

in.tftpd(8) - Linux man page

TFTPサーバにする

no title

ウノウラボ by Zynga Japan: Linuxをネットワーク経由で自動インストールする方法(後編)

しげふみメモ : PXEでネットワークブートしてLinuxをインストール(x86_64)

Red Hat Enterprise Linux

Puppet Labs: IT Automation Software for System Administrators

Documentation | Puppet Labs - Puppet Labs Documentation

連載:オープンソースなシステム自動管理ツール Puppet|gihyo.jp … 技術評論社

Puppet によるインフラ管理入門

Gosuke Miyashita

404 Not Found

n0tsn0ts 2010/07/16 11:16 Puppet によるインフラ管理入門を公開しているものですリンクしていただきありがとうございます。
大変素晴らしい記事だと思いますが、kickstart の部分は cobbler を使うともっと手軽に設定することができます。
詳しは、僕のブログの cobbler タグのエントリをチェックしてみてください!

con_mamecon_mame 2010/07/17 23:24 cobbler使ってみました!
確かに、簡単に設定することができますね。
ありがとうございます!