作業PCも3年目になり、そろそろ、新調するかなと思いました。
それで、マザーボードを新しくして、HDDを増やしてなんて考えたのですが、HDDを買うのもったいないなと。
うちは、FreeBSDをZFSで運用していて、これをミラーしています。
このディスクにOSイメージを入れて、ここから起動すればHDDを買わなくて良いのじゃないっと思いました。
ということで、ネットワークブートにチャレンジすることにします。
色々なOSを入れてみて起動時に切り替える状態にするのが理想ですね。
・Fedora
・Ubuntu
・OpenSUSE
この3つを実現してみます。
ネットワークブートに必要な物って、とにかくtftpサーバとdhcpです。
tftfpサーバは、FreeBSDにて、inet.confのtftpの部分のコメントを外せばすぐに起動します。
dhcpは、別サーバでやっているのですが、isc-dhcpサーバということで、内容は、同じです。
まず、ネットワークブートには、iPXEといのが要です。これは、ブートロムといわれるもので、本来NICにROM実装されているものです。通常のNICには、PXEが導入されているのですが、iPXEは、導入されていません。しかしながら、PXEからiPXEをブートすることで、この問題を回避することができます。
とりあえず、iPXEを作成します。
http://ipxe.org/download <- ここからダウンロードして、makeすると、undionly.kpxeが、binの直下に作成されます。
このファイルをtftpサーバのルートにでも、置いて下さい。
dhcpの設定
対象のレンジの設定の内に追記します。
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.10 192.168.0.40;
-------------------
next-server 192.168.0.1; <-- tftpサーバIPアドレス
host pc1 {
hardware ethernet 00:01:02:03:04:05; <-- 対象のNIC MACアドレス
fixed-address 192.168.0.50; <-- 割り当てるIPアドレス
if exists user-class and option user-class = "iPXE" {
filename "http://192.168.0.90/ipxe/boot.ipxe"; <-- iPXEのスクリプト(参照先を記述)
} else {
filename "undionly.kpxe"; <--iPXEファイル名
}
}
もし、apache web serverを導入していない場合、dhcp設定のfilenameをいかのようにして、tftpでロードさせるようにしてもOKです。
filename "tftp://192.168.0.90/ipxe/boot.ipxe"; <-- IPアドレスを適時環境に合わせて下さい。
さて、肝心のハードディスクを作成します。
ここは、FreeBSDでzfsを利用していることを前提としています。
zfs create -V 100g zroot/iscsi/hdd1 <-- zfsボリューム上に領域を確保します。
zfs create -V 100g zroot/iscsi/hdd2
zfs create -V 100g zroot/iscsi/hdd3
次に、iscsiで、共有します。
iscsiは、istgtを使いますので、portsかパッケージでセットアップしておいて下さい。
/usr/local/etc/istgt/istgt.conf
---------
[LogicalUnit1]
Comment "Hard Disk 1"
TargetName disk1
TargetAlias "Data Disk1"
Mapping PortalGroup1 InitiatorGroup1
AuthMethod Auto
AuthGroup AuthGroup1
UseDigest Auto
UnitType Disk
LUN0 Storage /dev/zvol/zroot/iscsi/hdd1 Auto
[LogicalUnit2]
Comment "Hard Disk 2"
TargetName disk2
TargetAlias "Data Disk2"
Mapping PortalGroup1 InitiatorGroup1
AuthMethod Auto
AuthGroup AuthGroup1
UseDigest Auto
UnitType Disk
LUN0 Storage /dev/zvol/zroot/iscsi/hdd2 Auto
[LogicalUnit3]
Comment "Hard Disk 3"
TargetName disk3
TargetAlias "Data Disk3"
Mapping PortalGroup1 InitiatorGroup1
AuthMethod Auto
AuthGroup AuthGroup1
UseDigest Auto
UnitType Disk
LUN0 Storage /dev/zvol/zroot/iscsi/hdd3 Auto
次に、iPXEのスクリプトboot.ipxeを作成します。
このファイルが、かなり重要です。
#!ipxe
# Some menu defaults
set menu-timeout 60000
set submenu-timeout ${menu-timeout}
isset ${menu-default} || set menu-default ubuntu
# Figure out if client is 64-bit capable
cpuid --ext 29 && set arch x64 || set arch x86
cpuid --ext 29 && set archl amd64 || set archl i386
###################### MAIN MENU ####################################
:start
menu iPXE boot menu for ${initiator-iqn}
item --gap -- ------------------------- Operating systems ------------------------------
item --key u fedora Boot Fedora from iSCSI
item --key u ubuntu Boot Ubuntu from iSCSI
item --key u opensuse Boot OpenSUSE from iSCSI
item --gap -- ------------------------- Tools and utilities ----------------------------
item --key i menu-install Installers...
item --gap -- ------------------------- Advanced options -------------------------------
item --key c config Configure settings
item shell Drop to iPXE shell
item reboot Reboot computer
item
item --key x exit Exit iPXE and continue BIOS boot
choose --timeout ${menu-timeout} --default ${menu-default} selected || goto cancel
set menu-timeout 0
goto ${selected}
:cancel
echo You cancelled the menu, dropping you to a shell
:shell
echo Type 'exit' to get the back to the menu
shell
set menu-timeout 0
set submenu-timeout 0
goto start
:failed
echo Booting failed, dropping to shell
goto shell
:reboot
reboot
:exit
exit
:config
config
goto start
:back
set submenu-timeout 0
clear submenu-default
goto start
############ MAIN MENU ITEMS ############
:fedora
echo Booting Fedora from iSCSI for ${initiator-iqn}
sanboot iscsi:192.168.0.90::::iqn.2007-09.jp.ne.peach.istgt:disk1 || goto failed
goto start
:ubuntu
echo Booting Ubuntu from iSCSI for ${initiator-iqn}
sanboot iscsi:192.168.0.90::::iqn.2007-09.jp.ne.peach.istgt:disk2 || goto failed
goto start
:opensuse
echo Booting OpenSUSE from iSCSI for ${initiator-iqn}
sanboot iscsi:192.168.0.90::::iqn.2007-09.jp.ne.peach.istgt:disk3 || goto failed
goto start
############################ INSTALLER MENU #########################
:menu-install
menu Installers for ${initiator-iqn}
item fedora-install Install fedora ${archl} from riken
item ubuntu-install Install ubuntu ${archl} from riken
item opensuse-install Install opensuse ${archl} from riken
item
item --key 0x08 back Back to top menu...
iseq ${menu-default} menu-install && isset ${submenu-default} && goto menu-install-timed ||
choose selected && goto ${selected} || goto start
:menu-install-timed
choose --timeout ${submenu-timeout} --default ${submenu-default} selected && goto ${selected} || goto start
:fedora-install
echo Starting Fedora 20 ${archl} installer for ${initiator-iqn}
set mirror http://ftp.riken.jp/Linux/fedora/releases/20
cpuid --ext 29 && set arch x86_64 || set arch i386
set repo ${mirror}/Fedora/${arch}/os
# Start installer
kernel ${repo}/images/pxeboot/vmlinuz initrd=initrd.img repo=${repo}
initrd ${repo}/images/pxeboot/initrd.img
boot || goto failed
goto start
:ubuntu-install
echo Starting Ubuntu 14.04 ${archl} installer for ${initiator-iqn}
set mirror http://ftp.riken.go.jp/Linux/ubuntu/dists/trusty/
cpuid --ext 29 && set arch amd64 || set arch i386
set repo ${mirror}/main/installer-${arch}/current/images/netboot/ubuntu-installer/${arch}/
# Start installer
kernel ${repo}/linux
initrd ${repo}/initrd.gz
boot || goto failed
goto start
:opensuse-install
echo Starting OpenSuse 13.1 ${archl} installer for ${initiator-iqn}
set mirror http://ftp.riken.jp/Linux/opensuse/distribution/13.1/repo/oss
cpuid --ext 29 && set arch x86_64 || set arch i386
set repo ${mirror}/boot/${arch}/loader
# Start installer
kernel ${repo}/linux TargetAddress=192.168.0.90 TargetName=iqn.2007-09.jp.ne.peach.istgt:disk3 TargetPort=3260
initrd ${repo}/initrd
boot || goto failed
goto start
この状態で、PXEでブートを行うと、メニューが出てくるまでになるはずです。
上記のサンプルは、tftpサーバ、httpサーバ、iscsiサーバが、192.168.0.90を想定しています。
dhcpサーバは、対象セグメントにて起動していれば良いです。
Ubuntu14ですが、一気にデスクトップをインストールすると、起動できなくなるようです。
最小構成でインストールしてから、後で、デスクトップをインストールするとうまくいきました。