ansibleの勉強シリーズ第2回です。
今回は、
- Oracle JDK1.8のインストール。
- グループ・ユーザを追加し、ユーザのパスワードを設定する。
- yumのgroupinstallをする。
です。
Oracle JDK1.8のインストール
OpenJDKであれば、yumで簡単にインストールできますね。
しかし・・・
[vagrant@localhost nginx]$ yum search openjdk java-1.6.0-openjdk-devel.x86_64 : OpenJDK Development Environment java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos java-1.6.0-openjdk-javadoc.x86_64 : OpenJDK API Documentation java-1.6.0-openjdk-src.x86_64 : OpenJDK Source Bundle java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle
うーん、バージョン1.8は無いかあ
今回はようやく登場した1.8を入れたいので、openjdkではなくOracleのJDK v1.8をインストールします。。しかしOracke JDKはダウンロードページに行くと、Oracleのアカウントを作って、そのユーザID・パスワードを入力しないとダウンロードできません。
今回ansibleからこのOracle JDKをインストールする訳ですが、実はユーザID・パスワード無しでダウンロードが可能なので、やってみます。
common.yml(vars_filesで読み込む)
JAVA_DL_URL: http://download.oracle.com/otn-pub/java/jdk/8u5-b13/jdk-8u5-linux-x64.rpm JAVA_DL_PATH: /usr/local/src/jdk-8u5-linux-x64.rpm
main.yml
--- - name: download oracle jdk 1.8 command: 'wget -q -O {{JAVA_DL_PATH}} --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" {{JAVA_DL_URL}} creates={{JAVA_DL_PATH}}' poll: 10 - name: install oracle jdk yum: name={{JAVA_DL_PATH}}
ポイントは、
- クッキーを設定する事。
- rpmをyumモジュールでインストールし寡等性を維持する。
という点です。
実はクッキーを設定すると、wget等で直接rpmをダウンロードできちゃいます。
ユーザの追加とユーザパスワードの設定
続いてOSにグループとユーザを追加し、追加したユーザにパスワードを設定します。
common.yml(vars_filesで読み込む)
DEFAULT_GROUP: hoge DEFAULT_USER: hoge DEFAULT_USER_PASSWORD: hoge
main.yml
--- - name: add group "{{DEFAULT_GROUP}}" group: name={{DEFAULT_GROUP}} - name: add user "{{DEFAULT_USER}}" user: name={{DEFAULT_USER}} group={{DEFAULT_GROUP}} home=/home/{{DEFAULT_USER}} password={{DEFAULT_USER_PASSWORD}}
一見するとこれでいけそうに見えますが、これでは駄目です。
パスワードは平文では駄目で、SHA-512で非可逆圧縮されたハッシュ値を設定しないといけません。
How do I generate crypted passwords for the user module?
The mkpasswd utility that is available on most Linux systems is a great option:
mkpasswd --method=SHA-512
If this utility is not installed on your system (e.g. you are using OS X) then you can still easily generate these passwords using Python. First, ensure that the Passlib password hashing library is installed.pip install passlib
Once the library is ready, SHA512 password values can then be generated as follows:python -c "from passlib.hash import sha512_crypt; print sha512_crypt.encrypt('
http://docs.ansible.com/faq.html#how-do-i-generate-crypted-passwords-for-the-user-module')"
オフィシャルにはこういう説明があります。
mkpasswdはランダムなパスワードジェネレータです。
今回はパスワードを指定したいので、pythonのPasslibを使った方法になります。
macでPasslibをインストール
passlibはpip(pythonのパッケージ管理システム)からインストールできます。
ansibleを使う人なら既にpython環境は大体揃っていると思うので、pipのインストール方法は省略します。
今回はmacでpasslibをインストールしてみました。
treemacpro-2:~ tree$ sudo pip install passlib Password: Downloading/unpacking passlib Downloading passlib-1.6.2.tar.gz (408kB): 408kB downloaded Running setup.py (path:/private/tmp/pip_build_root/passlib/setup.py) egg_info for package passlib Installing collected packages: passlib Running setup.py install for passlib Successfully installed passlib Cleaning up... treemacpro-2:~ tree$
PasslibでSHA-512で非可逆圧縮されたパスワードを生成する
treemacpro-2:work tree$ python -c "from passlib.hash import sha512_crypt; print sha512_crypt.encrypt('hoge')" $6$rounds=100000$830C/SLSEa1r2O5c$EHYXmozzoQWbTvpV5rp2jFaZ0rxNTLKXLY9JXKT9CbA/l9VndMR.a7Lkm/FhzppDuns4bVXSJmlLb/bc5GI9X1
暗号文字列が出力されましたね。これを設定すればよいのです。
変更後のcommon.yml(vars_filesで読み込む)
DEFAULT_GROUP: hoge DEFAULT_USER: hoge DEFAULT_USER_PASSWORD: $6$rounds=100000$830C/SLSEa1r2O5c$EHYXmozzoQWbTvpV5rp2jFaZ0rxNTLKXLY9JXKT9CbA/l9VndMR.a7Lkm/FhzppDuns4bVXSJmlLb/bc5GI9X1
これでユーザの追加とパスワードの設定ができます。
試しに以下のようにsuしてみて、設定したパスワードでログインできればOKです!
[vagrant@localhost ~]$ su hoge パスワード: [hoge@localhost vagrant]$
yumのgroupinstallをする
groupinstallと言えば「Development Libraries」や「Development tools」ですね。
公式サイトのyumモジュールのexampleをよーく見ると、一番下にこっそりとgroupinstallのサンプルコマンドが書いてます。
- name: install the 'Development tools' package group yum: name="@Development tools" state=present
よくみると@が付いています。
@について全く説明がありませんが、@をつけると「yum install」が「yum groupinstall」になるようです。ちなみに@を付けないでインストールしようとすると以下のようになりました。
TASK: [tool | install the 'Development Libraries' package group] ************** failed: [node1] => {"changed": false, "failed": true, "item": "", "rc": 0, "results": []} msg: No Package matching 'Development Libraries' found available, installed or updated failed: [node2] => {"changed": false, "failed": true, "item": "", "rc": 0, "results": []} msg: No Package matching 'Development Libraries' found available, installed or updated FATAL: all hosts have already failed -- aborting
では@を利用して、Development LibrariesとDevelopment toolsを入れていましょう。
--- - name: install the 'Development Libraries' package group yum: name="@Development Libraries" state=present - name: install the 'Development tools' package group yum: name="@Development tools" state=present
雑感
ユーザのパスワードの設定の仕方とか、インフラエンジニアでない自分には分からん事だな。passwdコマンドで対話式でしか設定した無いから、SHA-512で管理されてるは思わなかったな。
そうだな。アプリの開発者としてはこういう基本的な概念をちゃんと学ぶ必要性に迫られてきてる訳だな。
覚える範囲が広くなってきて大変だとは思いますが、一度playbookを作れば簡単に使いまわせるので、めげずに頑張りましょう
(くそ!!アプリ開発してた奴らが俺らインフラ屋の領域に踏み込んできてやがる・・・!!やべえ・・・やるおに仕事を取られるなんて屈辱だ・・・!!!)
Ansible実践ガイド 第2版 (impress top gear)
- 作者: 北山晋吾,塚本正隆,畠中幸司
- 出版社/メーカー: インプレス
- 発売日: 2018/03/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
ansibleを学ぶ:vol02:Oracle JDK1.8のインストール、ユーザパスワード設定等 - 文系プログラマによるTIPSブログ
ansibleを学ぶ:vol03:実行中のホスト名を書き込む、変数の値に変数を使用する - 文系プログラマによるTIPSブログ
ansibleを学ぶ:vol04:よくハマる部分とその解決法 - 文系プログラマによるTIPSブログ
ansibleを学ぶ:vol05:対象サーバのid_rsa.pubを対象サーバのauthorized_keysに登録する - 文系プログラマによるTIPSブログ
ansibleを学ぶ:vol06:mysql-serverのインストールからcreate databaseまでを自動化する - 文系プログラマによるTIPSブログ
ansibleを学ぶ:vol07:figletで動的にホスト名をmotdに書き込んでニヤニヤする - 文系プログラマによるTIPSブログ