「オープンソースカンファレンス 2013 Tokyo/Fall」(2013-10-20)のライトニングトークで発表した内容になります。 Kickstart,Preseed,Cobblerなどを使わずにシェルスクリプトでLinuxのインストールをしてみたというお話です。
シェルスクリプトでLinuxインストール自動化@zinrai (じんらい)2013/10/20
View Slide
自己紹介➔ twitter : @zinrai (じんらい)➔ blog : zinrai.github.io➔ 特技: けん玉(4段)➔ 無職(2013/10/20 現在)WEBプログラマという肩書で働いていた。UNIXコマンドと沢山のサーバと戯れるのが好き。
今日の発表内容「シェルスクリプトでDebian Wheezyのインストール自動化」http://zinrai.github.io/blog/html/2013/09/07/debian_wheezy_pxeboot.htmlブログの記事をスライドにしました。タイトルの通りDebianのお話。
インストール自動化ということは、インストーラがなにをしてくれているか知る必要がある。
インストーラってなにしてる➔ パーティション作成 : parted(8)➔ ディスクフォーマット : mkfs(8)➔ デバイスマウント : mount(8)➔ ユーザーランド展開 : debootstrap(8)➔ カーネルインストール➔ ブートローダ設定 : grub-mkconfig(8), grub-install(8)➔ パスワード設定 : chpasswd(8)➔ ネットワーク設定➔ タイムゾーン設定➔ ユーザアカウント作成:useradd(8)
あとはシェルスクリプトを書くだけ。
インストール自動化の構成ディスクレス母艦にシェルスクリプトを用意し、ディスクレスブート時にクライアント側で実行させるというとても簡単な構成(実際のシェルスクリプトはブログを見てね)母艦には2種類のシェルスクリプトを用意● OSインストール用シェルスクリプトを探し実行するシェルスクリプト(クライアントのMACアドレスを取得し、そのMACアドレスが書かれたOSインストール用シェルスクリプトを実行する)● OSインストール用シェルスクリプトディスクレス母艦 クライアント
皆さんが気になるであろうパスワードの設定などについて
パスワード設定# printf ‘user:password’ | chpasswd
chpasswd(8)# printf ‘nanashi:aiueo123’ | chpasswdパスワードを平文でスクリプト内に書くのは非常にきもちわるい。
chpasswd(8)# printf ‘user:$6$4kJ7jG5Hsby135Du$MWF4yq7Qm7mhGV2zWrllHWSO/uazKNPk8s21eN.gy.8nI6y2aMiEsYtrRoqihHl5PHTW/Re1hY2tQnSGYf.Ch1’ | chpasswd -e「-e」オプションを使うと、ハッシュ化されたパスワードでパスワードを設定できる。
パスワードのハッシュ化ってどうやった?
grub-crypt(8)$ grub-cryptPassword:Retype password:$6$kxHNzhwdTP4yyHMY$kG.ND/VDik9MSAVDb8/RoD.LrG/29RAAXbe9B8/Sy49fsGdHZOhkOOar76lWNyelhbQKmf2E2gsh7.9Q8YhtJ1CentOSにバンドルされているPythonで書かれたコマンド
password-cryptパスワード2回も入力するとか面倒くさいし、この作業を100回やることを想像して寒気がしたので、grub-crypt(8)にランダムなパスワードを生成する「-z」オプションを加えたコマンドを作った。$ password-crypt -zjF96vBwBznII $6$yE3rtbSfIBIvC0dR$4VaO07x4gm4FlvO16hBQel9z7WDB9gUb60rxTGy3U14ypN3vam9MAMhoRRfFRxsenIYs7Jw1zl/rsxWxiepmY.
debconf(7)# export DEBIAN_FRONTEND=noninteractiveパッケージインストール時にダイアログが出てきて入力待ちになることがあるので、ダイアログが出ないように下記の環境変数を設定する必要がある。
課題● grub-crypt(8)にライセンスが明記されてなかった。(password-cryptになんのライセンス付けて公開したらいいのかわからないで詰っている。)● インストール済みかそうでないかをチェックする仕組みがない。(ネットワークブートし続ける限り永遠にインストールを繰り返す。Cobblerの実装を眺めて解決する予定)● アトミックなファイル操作(ファイル作成やコピーを確実に行うための処理を書く)
おわり質問や突っ込みがありましたらツイッターのほうにお願いします。