Cobblerを使ってRedHat系OSをネットワーク経由（非PXE）でインストールする

# 前口上

ECS LivaのOSなしモデルを買ったのでOSをインストールすることに。
[先人の調査](http://polaire.org/r-top/mob/archives/2014/09/ecs-livacentos7-1.html)により、少なくともLinuxカーネル3.13以降が必要なのがわかっているので、とりあえずFedora 21 64-bitをインストールしてみた。

Cobblerを使ってPXEブートでインストールしようとしたが、モニターが真っ黒になるだけで先に進まないのでとりあえず諦めて、USBメモリからブートしてCobblerが提供するkickstartファイルを使用してインストールを行った。

というわけで何らかの理由でPXEブートが使えない環境で、ネットワーク経由でRedHat系OSをインストールする方法をECS Livaでの手順を例に挙げ記述する。
手順はシステムのファームウェアモードがBIOSかUEFIかで多少異なる。LivaはUEFIモードしか使用できないが、少し古いコンピュータだとBIOSモードのみだし、最近のコンピュータは大抵どちらかを設定で選ぶことができる。

CentOS 7は同じ手順でできるはずだが、UEFIモードは利用可能な環境が手元にないため未確認。
CentOS 6だとBIOSモードなら以下の手順でできる。UEFIモードは未調査だがこの手順ではできない。
CentOS 5以前はやったことがないのでわからない。私には今さらインストールする機会はないだろう。

# CobblerのOSイメージとしてFedora 21を追加

Cobbler自体のインストール手順は[こちら](http://qiita.com/yunano/items/476c6c060f28dd919740)で紹介している。CentOS 7をOSイメージとして追加する方法もこの中に書いてある。
さらにOSイメージとしてFedora 21を追加するためには以下のようにする。

**2015-04-05追記**： 現在私は別の方法でFedora 21のCobblerへの追加を行っている。→[Cobblerの省力化のためにプロキシと組み合わせる](http://qiita.com/yunano/items/51c08fdbd2ff9cacef40)

Cobbler 2.6.5（ソースを見る限り、この文章を書いている時点で最新の2.6.7でも）が持っているsignatureではFedora 21が追加できないのでmasterブランチの最新からsignatureを持ってくる。

```
# cobbler signature update
```

イメージの中身をどこから引っ張ってくるかは、私があまりFedoraに詳しくないので多少試行錯誤した。
結果、まずcobbler importはFedora 21 Serverから。

```
# cobbler import --name f21 --path rsync://ftp.iij.ad.jp/pub/linux/fedora/releases/21/Server/x86_64/os/
```

しかる後にPackagesとrepodataをEverythingから引っ張ってくる。
Packagesは40GB以上ある。

```
# rsync -avSHP --del rsync://ftp.iij.ad.jp/pub/linux/fedora/releases/21/Everything/x86_64/os/Packages/ /var/www/cobbler/ks_mirror/f21/Packages
# rsync -avSHP --del rsync://ftp.iij.ad.jp/pub/linux/fedora/releases/21/Everything/x86_64/os/repodata/ /var/www/cobbler/ks_mirror/f21/repodata
```

updatesリポジトリをCobblerに取り込む。

```
# cobbler repo add --name f21-updates --mirror http://ftp.iij.ad.jp/pub/linux/fedora/updates/21/x86_64/
# cobbler reposync --only f21-updates
```

kickstartファイルのテンプレートを、LivaにFedora 21をインストールする用に1ファイル作る。

```
# cp /var/lib/cobbler/kickstarts/sample_end.ks /var/lib/cobbler/kickstarts/f21.ks
```

ここまでのコマンドを打っていればFedora 21のプロファイル名は「f21-x86_64」になっているので取り込んだupdatesリポジトリ、およびkickstartファイルのテンプレートをこのプロファイルにセットする。

```
# cobbler profile edit --name f21-x86_64 --repos f21-updates --kickstart /var/lib/cobbler/kickstarts/f21.ks
```

## kickstartファイルのテンプレートの修正

先程作ったkickstartファイルのテンプレートである /var/lib/cobbler/kickstarts/f21.ks には以下のような修正を行う。

インストール中USBメモリを差しているのでUSBメモリの中身を消されないようにする必要がある。
そのため、ignoredisk, bootloader, clearpartで内蔵ストレージだけを対象にするようにする。
Livaの内蔵ストレージのデバイス名はmmcblk0である。もっともこれは特別な例で、大抵のコンピュータではOSをインストールする対象のストレージはsdaになるだろう。しかしたまにUSBメモリがsdaになったりするので試行錯誤が必要になることがある。
CentOS 6ではbootloaderのオプションに--boot-driveはないので代わりに`--driveorder=<デバイス名>`とする。

```
ignoredisk --only-use=mmcblk0
bootloader --location=mbr --boot-drive=mmcblk0
clearpart --all --drives=mmcblk0
```

私は/homeパーティションを作られるのは自分1人で使う環境では好きではないため、autopartは使用せずpart等でパーティションの切り方を定義しているが、LivaのようにUEFIモードでOSをインストールしなければならないコンピュータでは/boot/efiパーティションを--fstype=efiで作る必要がある。
したがって、パーティションを作る辺りは以下のようにしている（`part /boot/efi`行以外はBIOSモードでも同じ）。
CentOS 6はルートパーティションにxfsは使えないので代わりに`logvol /`のfstypeをext4とする。

```
part /boot/efi --fstype=efi --size=128
part /boot --fstype=ext4 --size=512
part pv.1 --size=1 --grow
volgroup vg1 --pesize=4096 pv.1
logvol swap --fstype=swap --name=lv_swap --vgname=vg1 --size=512
logvol / --fstype=xfs --name=lv_root --vgname=vg1 --size=1 --grow
```

その他は[こちら](http://qiita.com/yunano/items/476c6c060f28dd919740#2-13)に記載している。
なお、CentOS 7のbaseパッケージグループに当たるのはFedora 21ではstandardパッケージグループである。
よって%packagesと%endの間に指定するなら`@base`ではなく`@standard`になる。

# USBメモリの準備

私はWindows上でこれを行っている。他のOSだとできるかどうかわからない。

OSのブータブルISO、Fedora 21だと Fedora-Server-netinst-x86_64-21.iso を例えば http://ftp.iij.ad.jp/pub/linux/fedora/releases/21/Server/x86_64/iso/Fedora-Server-netinst-x86_64-21.iso からダウンロードする。
ここでnetinstでなくDVD等でも目的を達することはできるが、ファイルサイズが一番小さいもので問題ない。

netinstのブータブルISOを使えばUSBメモリは容量が1GBもあれば十分である。
FAT32でフォーマットしておく。

[UNetbootin](http://unetbootin.sourceforge.net/)をダウンロードし実行する。
"ディスクイメージ"にFedora-Server-netinst-x86_64-21.isoを選んでUSBメモリに焼く。焼いた後再起動は特に必要ない。

Cobblerが提供するf21-x86_64プロファイルのkickstartファイルのURLは `http://<CobblerサーバのIPアドレス>/cblr/svc/op/ks/profile/f21-x86_64` となる。プロファイル名が違うなら「f21-x86_64」の部分を変える。
このURLを起動時に使用するkickstartファイルとして設定すれば良いが、BIOSモードかUEFIモードかで書き換えるファイルや書き方が違う。

## UEFIモードでOSをインストールする場合

USBメモリに EFI\BOOT\grub.cfg というファイルができているので、このkickstartファイルを使用してインストールする以下のメニューを追加する。場所は「menuentry 'Install Fedora-Server 21'」の次にしておくと、選ぶ時にカーソル移動する必要がないし、時間切れで自動選択されるので良い。

```
menuentry 'Install from Cobbler Fedora 21 profile' --class fedora --class gnu-linux --class gnu --class os {
	linuxefi /images/pxeboot/vmlinuz inst.ks=http://<CobblerサーバのIPアドレス>/cblr/svc/op/ks/profile/f21-x86_64 quiet
	initrdefi /images/pxeboot/initrd.img
}
```

## BIOSモードでOSをインストールする場合

USBメモリに syslinux.cfg というファイルができているので以下のメニューを追加する。場所はすべてのlabelの中で一番上にしておくと、選ぶ時にカーソル移動する必要がないし、時間切れで自動選択されるので良い。
CentOS 6でNICが複数ある場合には`ksdevice=eth0`などをappendのオプションに付ける必要があるはず。

```
label cobbler-fedora21-kickstart
kernel /isolinux/vmlinuz
append initrd=/isolinux/initrd.img ks=http://<CobblerサーバのIPアドレス>/cblr/svc/op/ks/profile/f21-x86_64
```

# あとは

ブートメニューからUSBメモリを選んで EFI\BOOT\grub.cfg あるいは syslinux.cfg に追加したメニューを選ぶと勝手にインストールが進む。

ECS LivaだとUSBメモリとキーボードを差して電源を入れ、DeleteキーでBIOSセットアップユーティリティに入り、ExitのBoot OverrideのところにUSBメモリがいるはずなのでそれを選んでブートしてメニューを選ぶことになる。