Upgrade to Pro — share decks privately, control downloads, hide ads and more …

debian_shellscript_install

5fa4d3c8c505fd20da374c5e933bac0d?s=47 zinrai
October 20, 2013

 debian_shellscript_install

「オープンソースカンファレンス 2013 Tokyo/Fall」(2013-10-20)のライトニングトークで発表した内容になります。
Kickstart,Preseed,Cobblerなどを使わずにシェルスクリプトでLinuxのインストールをしてみたというお話です。

5fa4d3c8c505fd20da374c5e933bac0d?s=128

zinrai

October 20, 2013
Tweet

Transcript

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

  2. 自己紹介 ➔ twitter : @zinrai (じんらい) ➔ blog : zinrai.github.io

    ➔ 特技: けん玉(4段) ➔ 無職(2013/10/20 現在) WEBプログラマという肩書で働いていた。 UNIXコマンドと沢山のサーバと戯れるのが好き。
  3. 今日の発表内容 「シェルスクリプトでDebian Wheezyのインストール自動化」 http://zinrai.github. io/blog/html/2013/09/07/debian_wheezy_pxeboot.html ブログの記事をスライドにしました。 タイトルの通りDebianのお話。

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

  5. インストーラってなにしてる ➔ パーティション作成 : parted(8) ➔ ディスクフォーマット : mkfs(8) ➔

    デバイスマウント : mount(8) ➔ ユーザーランド展開 : debootstrap(8) ➔ カーネルインストール ➔ ブートローダ設定 : grub-mkconfig(8), grub-install(8) ➔ パスワード設定 : chpasswd(8) ➔ ネットワーク設定 ➔ タイムゾーン設定 ➔ ユーザアカウント作成:useradd(8)
  6. あとはシェルスクリプトを書くだけ。

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

    OSインストール用シェルスクリプト ディスクレス母艦 クライアント
  8. 皆さんが気になるであろうパスワードの設定などに ついて

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

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

  11. chpasswd(8) # printf ‘user:$6$4kJ7jG5Hsby135Du$MWF 4yq7Qm7mhGV2zWrllHWSO/uazKNPk8s21eN .gy. 8nI6y2aMiEsYtrRoqihHl5PHTW/Re1hY2tQnSG Yf.Ch1’ | chpasswd

    -e 「-e」オプションを使うと、ハッシュ化されたパス ワードでパスワードを設定できる。
  12. パスワードのハッシュ化ってどうやった?

  13. grub-crypt(8) $ grub-crypt Password: Retype password: $6$kxHNzhwdTP4yyHMY$kG. ND/VDik9MSAVDb8/RoD. LrG/29RAAXbe9B8/Sy49fsGdHZOhkOOar76l WNyelhbQKmf2E2gsh7.9Q8YhtJ1

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

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

  16. 課題 • grub-crypt(8)にライセンスが明記されてなかった。 (password-cryptになんのライセンス付けて公開したらいい のかわからないで詰っている。) • インストール済みかそうでないかをチェックする仕 組みがない。 (ネットワークブートし続ける限り永遠にインストールを繰り返 す。Cobblerの実装を眺めて解決する予定)

    • アトミックなファイル操作 (ファイル作成やコピーを確実に行うための処理を書く)
  17. おわり 質問や突っ込みがありましたらツイッターのほうに お願いします。