前回(http://blog.geeko.jp/ribbon/1296) では、途中までしかうまくいきませんでしたが、その後いろいろとやってみて、ほぼうまくいくようになりました。

大まかな流れは、ipxe起動->pxelinux起動->autoyastによる自動インストールとなります。要するに、pxelinux を ipxeでキックしてあげる、ということになります。よってipxe起動以後の手順は、SUSEのマニュアルにある、自動インストールの説明とほぼ同じになります。


準備

◆1 dhcpの設定

前回と違い、ipxe起動ファイルをtftpのroot直下に置きました。こんな感じになります。

この設定により、iPXEが、OSを起動するための初期スクリプト boot.ipxeをダウンロードすることが出来ます。

◆2 boot.ipxe の準備

内容を整理し、以下のようにしました。

◆3 pxelinxの準備

前回の失敗は、ipxeから起動するLinuxローダに、isolinuxを使用したことでした。これはISOしか見ないようで、ネットワークブートには対応していなかったようです。ネットワークブートに必要なのはpxelinuxなので、これを、/usr/share/syslinux/pxelinux.0 から /srv/tftpboot にコピーします。続いて、/srv/tftpboot配下にpxelinux.cfg ディレクトリを用意します。

◆4 ブート用ファイルの準備

SUSEの自動インストールの説明のように、linux initrd message biostest memtest を、インストールCDイメージから(たとえば/srv/tftpboot/install/leap42/CD1/boot/x86_64/loader/から)コピーします。

◆5 pxelinux.cfg/default ファイルの作成

pxelinuxが使う設定ファイルを用意します。基本的には インストールイメージ内にあるisolinux.cfgをコピーし、配下の以下のように用意しました。単なる自動起動だけであれば、不要な項目も多いですが….

◆7 autoyast.xml を用意する

あらかじめ作成したautoyast.xml をインストールイメージに(この場合は、/srv/tftpboot/install/leap42/CD1/)コピーします。

◆8  起動する
まず、ipxeで起動すると以下の画面が出ます。

pxeok

enterを押すか、タイムアウトまで待つと、ipxeがsyslinuxを起動します。

syslinuxok

enterを押すか、タイムアウトまで待つと、openSUSEが起動します。そして、autoyast.xml が処理され、自動インストールが始まります。

autoinstall-01

ただ、手動でインストールしたautoyast.xmlが、なぜか不正なため、インストール処理は失敗します。

autoinstall-02

とりあえずここまで出来るようになりました。

 

openSUSE mini sumitでも話ましたが、openSUSEを自動インストールしようとして試行錯誤しています。すべて仮想環境でテストしているのですが、なかなかうまくいきません。

仮想環境は、debian ベースの proxmoxVEを使っています。これが、なかなか便利で、Webベースで仮想マシンを立てたりつぶしたり、VNC経由で仮想マシンとサクッと繋がる、バックアップも取れる、やろうと思えば高可用性構成も取れるなど、便利な機能がてんこ盛りです。VMware ESXi と比べると、機能的に劣るところもありますが、個人ベースで使うには十分すぎるくらいです。

ただ、この仮想環境、ちょっと変わったところがあって、仮想OS用のBIOSに、iPXEが組み込まれているのですね。PXEではなくて。なので、ネットワークブートを行う時は、PXEのノウハウがあまり使えません。とりあえず、今やっていることをメモとして書いておきます。


準備

◆1 dhcpの設定

iPXEを使う時には、dhcpで、インストールサーバの情報を設定する必要があります。dhcpの設定はyastからも出来ますが、今回は直接 /etc/dhcpd.conf を設定しました。こんな感じになります。

default-lease-time 14400;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.101 192.168.10.127;
default-lease-time 14400;
max-lease-time 172800;
}
if exists user-class and option user-class = “iPXE” {
filename  “iPXE/boot.ipxe”;
}
else  {
filename “iPXE/undionly.kpxe”;
}
next-server 192.168.10.41;

この設定により、iPXEが、OSを起動するための初期スクリプト boot.ipxeをダウンロードすることが出来ます。

◆2 tftpの設定

tftpの設定はyast から行います。特に標準のままで問題ありません。なお、tftpはxinetd配下から起動することになります。

◆3 httpdの設定

httpdを設定します。rootディレクトリは、/srv/tftpboot/install/ にします。

◆4 OSイメージの展開

yast の、インストールサーバ設定から、OSイメージを展開します。サブディレクトリは、leap42にしてみます。

◆5 OSイメージの配置

/srv/tftpboot 配下にOSのISOイメージを置きます。

◆6 boot.ipxe の作成

ひな形は、ここにあります。こんな感じになっています。

#!ipxe
menu Please choose an operating system to install
item –gap openSUSE
item isolinux isolinux boot
item efi efi boot
item iso iso boot
item –gap ipxe shell
item shell       Drop to iPXE shell

choose target && goto ${target}

:failed
echo Booting failed, dropping to shell
goto shell

:shell
echo Type ‘exit’ to get the back to the menu
shell
set menu-timeout 0
set submenu-timeout 0
goto start

:isolinux
kernel http://192.168.10.41/install/leap42/CD1/boot/x86_64/loader/isolinux.bin initrd=http://192.168.10.41/install/leap42/CD1/boot/x86_64/loader/initrd install=http://192.168.10.41/install/leap42/CD1/
initrd http://192.168.10.41/install/leap42/CD1/boot/x86_64/loader/initrd
boot || goto failed

:efi
chain   /install/leap42/CD1/EFI/BOOT/bootx64.efi initrd=initrd install=/install/132/CD1
initrd  /install/leap42/CD1/boot/x86_64/loader/initrd
boot || goto failed

:iso
sanboot http://192.168.10.41/leap42.iso
boot || goto failed


やってみました

◆1 isolinux でブートする

展開されたISOイメージ内にはisolinux.bin があります。これを直接指定してみます。結果は

isolinux-bad

と、あえなく撃沈。

◆2 EFIでブートする

展開されたISOイメージ内にはEFI用のブートコードがあります。これを指定してみます。結果は

efi-bad

と、これも撃沈。

◆3 ISOイメージをブートする

iPXEには、SANからブートする機能があります。この機能を使うと、ISOイメージをそのままブートすることが出来ます。結果は、

iso-ok-01

と、ISOブートと同じ画面が出ます。ただ、この後そのまま続行しても、インストールデータがネットワークブートしたkernelから直接読めるわけではないので、

iso-ok-02

と、インストールデータがある場所を要求してきます。ここに、httpで取得出来るURLを入れてあげればそのまま続行出来ます。

とりあえずここまでは出来ています。