CentOS7 カスタムLiveCD作成

# まえがき
HP DL180 Gen9にCentOS7を入れようとしたところ、RAIDコントローラが認識できなかった。

元々2本のSAS HDDをRAID1で組んでいてOSからは1つのディスクが見えてほしかったのだが、RAIDコントローラが認識できないせいで、2つのディスクが見えていた。
わお、これではインストールができない。

普通、HP製サーバにWindowsでもLinuxでもOS入れるときはInteligent Provisioningという便利機能を使うことによって、その辺のドライバ関連を自動的にインストールしてくれるのだが残念ながらInteligent ProvisiongではCentOS7が対応していないらしく、使用できなかった。
それで、直接OS入れようとしたら上述のような自体になった。

まぁそれはそれで、インストール時にRAIDコントローラのドライバを読み込ませてあげて事なきを得たのだけれど、今回事情があってサーバのディスク丸ごとバックアップ/リストアを行う必要があったので、RAIDコントローラのドライバを組み込んだLiveCDを作る必要に迫られたので、メモメモ。

# 前提
* CentOS7.0.1406をベースとしたLiveCDを作成する
* HP DL180 Gen9に搭載されているRAIDコントローラB140iのドライバを組み込む
* livecd-toolsがインストール済であること

# 準備
1. [Hewlett Packard Enterprise サポートセンター ](http://h20564.www2.hpe.com/hpsc/swd/public/detail?swItemId=MTX_73afb657547b4f67af78f04483)から、**hpdsa-1.2.10-114.rhel7u0.x86_64.dd.gz**をダウンロード
2. 適当なUSBメモリやSDカードなどにddで書き込む
3. 「2.」で焼いたUSBメモリなどをCentOS7サーバに挿入
4. マウント 

```
mount /dev/sdb /media/
```

※マウントして終わりでも良いが、適当なフォルダに中身を丸ごとコピーしておいても良い
※中にはdriverのrpmが入っている
※マウント先あるいはコピー先のパスは後で使用するので控えておく

```
mkdir b140i_driver
cp -a /media/* b140i_driver
```



# 実作業
大雑把な流れとしては以下

* RAIDコントローラのドライバをインストールするようにしたkickstartファイルを作成
* そのkickstartファイルを使用して、LiveCDのイメージファイルを生成

## ベースとなるkickstartファイルをDL
Live CD/DVD作成用のkickstartファイルが公式に公開してくれているので、ありがたく使わせてもらいます
※公式と言っていいのかわからないけどCentOSアカの中なので・・・


まずはダウンロード

```
wget https://raw.githubusercontent.com/CentOS/sig-core-livemedia/master/kickstarts/centos-7-livecd.cfg
```

20行目あたりに下記を追加
※fileには「準備」のところでマウントあるいはコピー済のdriverのrpmのパスを書く

```
# For HPE b140i driver
repo --name=hpe_driver --baseurl=file:/media/kmod-hpdsa-1.2.10-114.rhel7u0/rpms/x86_64/
```

1020行目あたりのgrub関連の下、%endの手前に以下を追加

```
# For HPE b140i driver
kmod-hpdsa
```

これでb140のdriverがLiveCDに組み込まれる。
ただし、CentOS7.0時代のkickstartだからだと思うが、リポジトリが既になく、ファイルのDLに失敗してしまうため、さらに以下を修正

17行目のrepo ~~ mirror.centos.org ~~をコメントアウト
18行目に追加

※ブラウザとかで実際にこのURLを調べてみればわかるが、以前はあったんだろうが、現在このようなパスは存在しない

```
#repo --name=base --baseurl=http://mirror.centos.org/centos/7.1.1503/os/x86_64/ --excludepkgs=grubby
repo --name=base --baseurl=http://archive.kernel.org/centos-vault/7.0.1406/os/x86_64/ --excludepkgs=grubby
```

不要ならやらなくても良いけど、キーボードを日本語仕様に変更
3-4行目あたりを下記にように変更

```
keyboard jp106
timezone Asia/Tokyo --isUtc
```


1365行目あたりを下記にように変更

```
localectl set-keymap jp
localectl set-x11-keymap jp
```

一応、全体的なdiffを

```diff:centos-7-livecd.cfg
[root@localhost ]# diff centos-7-livecd.cfg centos-7-livecd.cfg.orig
3,4c3,4
< keyboard jp106
< timezone Asia/Tokyo --isUtc
---
> keyboard us
> timezone Europe/Brussels --isUtc
17,18c17
< #repo --name=base --baseurl=http://mirror.centos.org/centos/7.1.1503/os/x86_64/ --excludepkgs=grubby
< repo --name=base --baseurl=http://archive.kernel.org/centos-vault/7.0.1406/os/x86_64/ --excludepkgs=grubby
---
> repo --name=base --baseurl=http://mirror.centos.org/centos/7.1.1503/os/x86_64/ --excludepkgs=grubby
21,23d19
< # For HPE b140i driver
< repo --name=hpe_driver --baseurl=file:/root/kmod-hpdsa-1.2.10-114.rhel7u0/rpms/x86_64/
<
1018,1019c1014
< # For HPE b140i driver
< kmod-hpdsa
---
>
1365,1366c1360,1361
< localectl set-keymap jp
< localectl set-x11-keymap jp
---
> localectl set-keymap us
> localectl set-x11-keymap us
1370a1366
>
```

## LiveCDのイメージファイルを生成

下記コマンドを実行すると、isoが生成されるので、あとはそれをCDに焼くなり、どうにかしてマウントするなりお好きなように。
ただマシンスペックにもよるのだけど、コマンド完了まで10分以上かかったりするので気長に待ちましょう。

```
LANG=C livecd-creator \
--verbose \
--config=centos-7-livecd.cfg \
--fslabel="CentOS-7-x86_64-LiveMin-1406" \
--title="CentOS Linux 7.0.1406 Live" \
--product="CentOS Linux 7.0.1406 Live"
```

# おまけ
### kickstartって何？
Linuxの自動インストール機能のこと。
どんな設定になって、どんなパッケージをインストールして、パスワードはこれで、ユーザはこれを用意して～～っていうのをまとめたkickstartファイルを用意してあげると、それに従って勝手にインストールしてくれる。

### インストール時に追加ドライバ読み込ませるにはどうしたら？
1. ドライバ自体は「準備」と同じようにサポートページからDLして適当なメディアに焼いておく。
2. インストールメディアでブートした後、メニューで止まると思うが、そこの画面の「Install CentOS7」という箇所で「e」キーを押すとインストールパラメータを指定できる。そこで
```
inst.dd modprobe.blacklist=ahci
```というパラメータ文字列を追記する。quietの後ろにスペースあけて、追記すると良い。
3. あとはその状態で起動。その間に用意したドライバメディアを挿す。
4. 起動途中で対話式メニューが実行され、そこでドライバメディアあるいはその中身が表示されるので、移動してdriverのrpmを指定してcontinue

# 参考

* https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/sect-driver-updates-performing-ppc.html
* http://h50146.www5.hpe.com/products/software/oe/linux/mainstream/product/hardware/pl_all/rhel6_dl_gen8.html
* http://tech.blog.surbiton.jp/tag/inst-dd-modprobe-blacklistahci/
* http://serverfault.com/questions/721523/install-centos-7-on-hp-dl120-gen9-server-with-b140i-raid-controller