Hatena::ブログ(Diary)

富士山は世界遺産 このページをアンテナに追加 RSSフィード Twitter

2010-06-30

preseedを使ってDebian GNU/Linux 5.0.4(netinst)のインストール自動化を行う手順

サーバインストールって、結構定型化してますよね。面倒ですよね。そう思わない人は読まなくていいです。

概要

  1. PXEを使ってマシンをブート
  2. netinstなインストーラを起動し
  3. preseed.cfg通りにインストールしてもらい
  4. 完了したらメール送信

以上、4本立てです。

DHCPPXE(TFTP)、カーネルパラメータ、d-iの知識が入り乱れて要求されるので結構ハードル高いですが、便利になります。

5台以上立て続けにインストールするなら、検討してみてください。

準備

インストール対象のマシンのMACアドレスを記録してください。

PXEブート用DHCPサーバの構築

Ubuntu上でやりました。Debianでもほとんど変わらないと思います。

論よりコード
$ sudo apt-get -y install dhcp3-server
$ cat << EOF | sudo tee /etc/dhcp3/dhcpd.conf
allow booting;
allow bootp;
subnet 192.168.78.0 netmask 255.255.255.0{
  range 192.168.78.100 192.168.78.139;
  option broadcast-address 192.168.78.255;
  next-server 192.168.78.2;
}
group {
  filename "/debian-5.0.4-installer/pxelinux.0";
  host 08-00-27-b6-fa-6c { hardware ethernet 08:00:27:B6:FA:6C; }
}
EOF
$ sudo /etc/init.d/dhcp3-server restart
debug方法

ログファイルは/var/log/syslogです。

netinstインストーラ配布用TFTPサーバの構築

このTFTPサーバのアドレスは192.168.78.2としています。

即ち、dhcpd.confのnext-server部分、および後述のpxelinux.cfg/01-MACADDRのurl部分ですので、適宜書き換えてください。また、TFTPサーバDHCPサーバと同居させることも可能です。

また、Ubuntu上でやりました。DebianでもTFTP rootが/srv/tftp → /var/tftp (だったかな?) くらいの変更で、ほとんど変わらないと思います。

論よりコード
$ sudo apt-get -y install atftpd
$ sudo mkdir /srv/tftp/debian-5.0.4-installer/
$ wget http://ftp.jp.debian.org/debian/dists/lenny/main/installer-amd64/current/images/netboot/netboot.tar.gz -O - | sudo sh -c "cat - | tar xzf - -C /srv/tftp/debian-5.0.4-installer/"
debug方法

ログファイルは/var/log/syslogです。

TFTPサーバ:pxelinux.cfg/01-MACADDRの作成

PXEで起動し、インストーラカーネルの場所とパラメタを指定するファイルです。

論よりコード
$ cat << EOF | sudo tee /srv/tftp/debian-5.0.4-installer/pxelinux.cfg/01-08-00-27-b6-fa-6c
default autoinstall

label autoinstall
    kernel debian-installer/amd64/linux
    append load initrd=debian-installer/amd64/initrd.gz locale=ja_JP.UTF8 console-keymaps-at/keymap=jp106 interface=eth0 hostname=deb01 domain=localdomain.local url=tftp://192.168.78.2/preseed.cfg DEBCONF_DEBUG=5
EOF
注意

ファイル名は 01-MACアドレス(小文字、ハイフン区切り)です。先頭の01-を忘れがちなので、気をつけてください。

interface、hostname、domainは適宜書き換えてください。interfaceインストールおよびインストール後に利用するNICになります。hostnameやdomainも、ここで指定したものがインストール後にも使われます。

tips

pxelinux.cfg/01-MACADDRのurl=にはhttpやftpも使えます。httpdやftpdは用意してください。proxyが超えられるか否かは知りません。

TFTPサーバ:preseed.cfgの作成

概要

なんとなくわかってください。

という感じ。

TFTPサーバ:/srv/tftp/preseed.cfg
d-i mirror/country string manual
d-i mirror/http/hostname string ftp.jp.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string http://192.168.78.100:8080

d-i clock-setup/utc boolean true
d-i time/zone string Japan
d-i clock-setup/ntp boolean true
d-i clock-setup/ntp-server string ntp.localdomain.local

d-i partman-auto/method string lvm
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-lvm/device_remove_lvm_span boolean true
d-i partman-auto/purge_lvm_from_device  boolean true
d-i partman-lvm/confirm boolean true
d-i partman-auto-lvm/guided_size string max
d-i partman-auto/choose_recipe select atomic
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true

d-i passwd/root-login boolean false
d-i passwd/user-fullname string user01
d-i passwd/username string user01
# $ echo "hogehoge" | mkpasswd -s -H MD5
d-i passwd/user-password-crypted password $1$1bA07m/w$1wuZ5DneSI2bG2KWQBc0r0

d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
d-i apt-setup/services-select multiselect security, volatile
d-i apt-setup/security_host string security.debian.org
d-i apt-setup/volatile_host string volatile.debian.org

tasksel tasksel/first multiselect none
d-i pkgsel/include string openssh-server sudo screen msmtp
d-i pkgsel/upgrade select full-upgrade

popularity-contest popularity-contest/participate boolean false

d-i grub-installer/only_debian boolean true

d-i preseed/late_command string tftp -g -r /S99install.sh -l /target/etc/rc2.d/S99install 192.168.78.2 ; chmod +x /target/etc/rc2.d/S99install; sync

d-i finish-install/reboot_in_progress note
TFTPサーバ:/srv/tftp/S99install.sh

このスクリプトで、インストール完了後にメールを送るようにします。携帯メールにするなら、fromとかちゃんとやってください。spamとしてはじかれます。

SMTPサーバが必要です。SMTPSRVあたりを書き換えてくださいな。

purge nanoしているのはご愛敬。

#!/bin/bash -e
LANG=C

apt-get remove --purge -y nano

IF=eth0
SMTPSRV=192.168.78.2
FROM=no-reply+`hostname`@localdomain.local
TO=notify@localdomain.local

sleep 10
ping -c 10 ${SMTPSRV}
if [ $? == 0 ]; then
cat << EOM | msmtp  --host=${SMTPSRV} --port=8025 --from=${FROM} ${TO} 
Subject: [INFO] Hands-off install completed. (`hostname`)

Hands-off install completed.

== setup info ==
FINISH=`date "+%Y/%m/%d %H:%M:%S"`
MACADDR=`ifconfig ${IF} | awk '/HWaddr/ {print $5}'`
HOSTNAME=`hostname`
IPV4ADDR=`ifconfig ${IF} | awk '/inet addr:/ {print $2}' | cut -d ":" -f 2`
DEBIAN_VERSION=`cat /etc/debian_version`
[EoM]
EOM
fi

mv -f /etc/rc2.d/S99install /etc/rc2.d/s99install
tips

preseed/late_commandではwgetも使えます。

tftpはbusyboxのtftpなので、コマンドラインを間違えないように。

debug方法

ログファイルが/var/log/installer/syslogに落ちています。

これは、appendでDEBCONF_DEBUG=5を指定しているためです。

preseed.cfgの作り方

DEBCONF_DEBUG=5を指定した状態でインストーラを起動してください。あとは実際にインストール作業をすると、/var/log/installer/syslogにログが落ちてます。あとは、キーワードになりそうな行を切り貼りするだけです。

(なげやりな説明)

リファレンス

いろいろお世話になりました。

B.2. preseed の利用

http://www.debian.org/releases/stable/arm/apbs02.html.ja

Halis way: Ubuntu dapper PXE network install

http://halisway.blogspot.com/2006/06/ubuntu-dapper-pxe-network-install.html

Ubuntu preseed.cfg installs off PXE Boot - Wiki

https://www.digisoftinc.org/wiki/index.php/Ubuntu_preseed.cfg_installs_off_PXE_Boot

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/fujisan3776/20100630/1277861431