Slide 1

Slide 1 text

シェルスクリプトでLinuxインストール自動化 @zinrai (じんらい) 2013/10/20

Slide 2

Slide 2 text

自己紹介 ➔ twitter : @zinrai (じんらい) ➔ blog : zinrai.github.io ➔ 特技: けん玉(4段) ➔ 無職(2013/10/20 現在) WEBプログラマという肩書で働いていた。 UNIXコマンドと沢山のサーバと戯れるのが好き。

Slide 3

Slide 3 text

今日の発表内容 「シェルスクリプトでDebian Wheezyのインストール自動化」 http://zinrai.github. io/blog/html/2013/09/07/debian_wheezy_pxeboot.html ブログの記事をスライドにしました。 タイトルの通りDebianのお話。

Slide 4

Slide 4 text

インストール自動化ということは、インストーラがな にをしてくれているか知る必要がある。

Slide 5

Slide 5 text

インストーラってなにしてる ➔ パーティション作成 : parted(8) ➔ ディスクフォーマット : mkfs(8) ➔ デバイスマウント : mount(8) ➔ ユーザーランド展開 : debootstrap(8) ➔ カーネルインストール ➔ ブートローダ設定 : grub-mkconfig(8), grub-install(8) ➔ パスワード設定 : chpasswd(8) ➔ ネットワーク設定 ➔ タイムゾーン設定 ➔ ユーザアカウント作成:useradd(8)

Slide 6

Slide 6 text

あとはシェルスクリプトを書くだけ。

Slide 7

Slide 7 text

インストール自動化の構成 ディスクレス母艦にシェルスクリプトを用意し、ディスクレスブート時にクライアント側で 実行させるというとても簡単な構成 (実際のシェルスクリプトはブログを見てね) 母艦には2種類のシェルスクリプトを用意 ● OSインストール用シェルスクリプトを探し実行するシェルスクリプト (クライアントのMACアドレスを取得し、そのMACアドレスが書かれたOSインス トール用シェルスクリプトを実行する) ● OSインストール用シェルスクリプト ディスクレス母艦 クライアント

Slide 8

Slide 8 text

皆さんが気になるであろうパスワードの設定などに ついて

Slide 9

Slide 9 text

パスワード設定 # printf ‘user:password’ | chpasswd

Slide 10

Slide 10 text

chpasswd(8) # printf ‘nanashi:aiueo123’ | chpasswd パスワードを平文でスクリプト内に書くのは非常に きもちわるい。

Slide 11

Slide 11 text

chpasswd(8) # printf ‘user:$6$4kJ7jG5Hsby135Du$MWF 4yq7Qm7mhGV2zWrllHWSO/uazKNPk8s21eN .gy. 8nI6y2aMiEsYtrRoqihHl5PHTW/Re1hY2tQnSG Yf.Ch1’ | chpasswd -e 「-e」オプションを使うと、ハッシュ化されたパス ワードでパスワードを設定できる。

Slide 12

Slide 12 text

パスワードのハッシュ化ってどうやった?

Slide 13

Slide 13 text

grub-crypt(8) $ grub-crypt Password: Retype password: $6$kxHNzhwdTP4yyHMY$kG. ND/VDik9MSAVDb8/RoD. LrG/29RAAXbe9B8/Sy49fsGdHZOhkOOar76l WNyelhbQKmf2E2gsh7.9Q8YhtJ1 CentOSにバンドルされているPythonで書かれた コマンド

Slide 14

Slide 14 text

password-crypt パスワード2回も入力するとか面倒くさいし、この作業を100回 やることを想像して寒気がしたので、grub-crypt(8)にランダムな パスワードを生成する「-z」オプションを加えたコマンドを作っ た。 $ password-crypt -z jF96vBwBznII $6$yE3rtbSfIBIvC0dR$4VaO0 7x4gm4FlvO16hBQel9z7WDB9gUb60rxTGy3U 14ypN3vam9MAMhoRRfFRxsenIYs7Jw1zl/rsx WxiepmY.

Slide 15

Slide 15 text

debconf(7) # export DEBIAN_FRONTEND=noninteractive パッケージインストール時 にダイアログが出てきて入 力待ちになることがあるの で、ダイアログが出ないよ うに下記の環境変数を設 定する必要がある。

Slide 16

Slide 16 text

課題 ● grub-crypt(8)にライセンスが明記されてなかった。 (password-cryptになんのライセンス付けて公開したらいい のかわからないで詰っている。) ● インストール済みかそうでないかをチェックする仕 組みがない。 (ネットワークブートし続ける限り永遠にインストールを繰り返 す。Cobblerの実装を眺めて解決する予定) ● アトミックなファイル操作 (ファイル作成やコピーを確実に行うための処理を書く)

Slide 17

Slide 17 text

おわり 質問や突っ込みがありましたらツイッターのほうに お願いします。