きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

Packer武者修行

今日気付いたことを書く。
RHEL6.5をESXi5.5にkickstartでインストールする話。


やはりPACKER_LOG環境変数は重要。
何をやっているかかなり分かる。


ISOチェクサムは時間がかかる。
SHA256はやり過ぎたかな。
それだけで合計4分近くかかる。
ローカルのキャッシュで2分。
ESXi側のキャッシュで2分。
チェクサムをnoneにしたら問答無用で3-4GBあるISOを送りつける。
MD5で改善しないか時間を測りたい。


output_directoryは動的に作るべき。
remote_datastoreに、非rootユーザーがフォルダ作成できるようにしていたが、それだけではダメだ。
既にフォルダがあるとbuiderがエラーで終わる。
"output_directory": "output-vmware-iso-{{user `vm_name'}}
みたいに重複を避けるようにした方がいい。


Linuxのks.cfgのカスタマイズが必要。
rootパスワードなど。
Packerでks.cfgをカスタマイズすることはできない。
自前のシェルを挟んで、vm単位でks.cfgを作成して、それらをPackerに変数で流し込むようにしよう。
また、セキュリティ的にパスワード暗号化したいので、grub-cryptでSHA512のハッシュを作り、ks.cfgにsedなどで組み込む。
でも、Packerのssh_passwordやらは平文のままだ。すごい中途半端。でもks.cfgはhttpで公開するので、やはりやるべきだろう。


ESXiのVNCポートを設定しないといけない。たまたまCIMポートが空いてて使えてしまえたけど、vCenter Applianceのwebクライアントを使っていると、使えるポートが見つからなくなる。
5988と5989あたり。
この辺りを適切にファイアウォール設定して、vnc_port_min/vnc_port_maxに組み入れると、数分の時間短縮になる。


sshの待ち時間はデフォルトの20分がいい。
10分がギリギリのラインで、ks.cfg次第では失敗ばかりする。今日はここにはまっていた。


boot_commandは癖がある。
"<esc><wait>",
とりあえず区切る。
"linux ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/kickstart/ks-{{user `vm_name`}}.cfg ip={{user `ip`}} netmask={{user `netmask`}} gateway={{user `gateway`}} ksdevice={{user `ksdevice`}}"


区切った理由は、稀にbootコマンドを受け付けたGUI側で、途中の文字列から受け取ってた節があるので区切った。waitも入れた。
今回ksdeviceにはvmnic名を入れた。そうしないとks.cfgまでたどり着けなかった。
これは超絶はまった。
eth0でもいけるのかな。。。
ネットワークまわりは不思議だ。
ks.cfgにも設定あるんだが、どうなってんだか。


なんかvmware-toolsが入ってない。
ここはまだ深掘りできてない。
Packerが何かやろうとしていたみたいなんだが、インストールはできてない。


post-processorsは、ovftoolがパスにいないとダメらしい。ちょっと手元にない。redhatのメディアにもない。VMWareのサイトにログインしないとダウンロードできない。


post-processorsを書いてあげないと、buiderはインベントリから登録解除してしまうので、仮想マシンがすぐ使えない。
ふむ、そういう意味では、buider用のESXiホストと、post-processor用のESXiホストは分けてもいいのか。


残骸のようにデータストア上にある仮想マシンをwebクライアント経由でインベントリ登録して起動してみたら、ややこしいことになった。
System eth0が動いてない。
Auto eth1なるものが追加され、デバイスが奪われた。MACアドレス使われてるよ、とほほ。
これをデバッグするのは大変そうだ。


provioningはまだ試してない。
いくつかのミドルをインストールしたい。
しかも、バージョンアップとフィックスにも耐えられる仕組みにしたい。
テンプレートになるPackerのJSONはあまりいじりたくない。
シェルをアップロードして、シェルでやりたい。
そのシェルに渡す引数をPackerの変数にしときたい。
インストール資材は、Packerがあげるhttpサーバからwgetできないだろうか。別サーバーでもいい。

なんか、PackerのJSONは、OS+アーキテクチャ毎に作る方がスムーズになる気がしてきた。
RHEL6系、RHEL7系、Win7、Win10、Winサーバ系。


OSのみインストールと、ミドルのみインストールと、IDEのみインストールと、両方インストールの選択ができるように考えてはいるが、細かいのをいるいらない言われそうでたぶん纏まらない。


自動化としては、IDEの設定もしたい。
プラグインリポジトリを非ネットワーク環境にミラーしてくる仕組みと、自分たちのソースを全部チェックアウトしてくるのと、ワークスペースの設定などをやりたい。


もはやPackerから離れまくってる。

packer-windows-pluginはまだ使用していない。使う予定。WinRMもはまるのかな。