$30 off During Our Annual Pro Sale. View Details »

debian_shellscript_install

zinrai
October 20, 2013

 debian_shellscript_install

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

zinrai

October 20, 2013
Tweet

More Decks by zinrai

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide