preztoをインストールしてみた

最近、自分のMacBookにpreztoを入れてみたので、今回はその話をしたいと思います。

prezto

preztoはzsh向けのフレームワークで、コマンドラインでの作業を快適にするための様々なプラグインが利用できます。
zsh向けのフレームワークとしては、他にもoh-my-zshなども有名です。
自分は元々oh-my-zshを使っていたのですが、preztoのほうが軽いという話をちらほら聞いたので、使ってみようかなと思った次第です。

インストール

インストールは、こちらに書いてある通りに実施すればOKです。
GitHub - sorin-ionescu/prezto: The configuration framework for Zsh

$ zsh
$ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
$ setopt EXTENDED_GLOB
$ for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
$   ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
$ done
$ chsh -s /bin/zsh

あとは、zshを起動し直せばOKです。
プロンプトのデザインが変わっているかと思います。

preztoでは、プロンプトのデザインを好みに応じて変えることができます。
ただ、デザインを変える場合、必要に応じてRicty for Powerlineなどのプラグインを入れる必要があります。
その辺の話は次回したいと思います。

参考

この記事は以下を参考にしています。

GitHub - sorin-ionescu/prezto: The configuration framework for Zsh
Customizing Your Prezto Prompt
AntigenでPreztoを導入 - Qiita
oh-my-zshを使っていて重いと感じている方、preztoはいかが? - Qiita

マニフェストでグループを作ってみる part3

今回は、以下の記事で使用したコマンドの解説を行います。
具体的には、puppet agentコマンドの解説です。

マニフェストでグループを作ってみる - ressyのナレッジ的なブログ

puppet agentコマンド

グループ作成をした際は以下の2種類を実行していました。

# puppet agent -t --verbose --noop
# puppet agent -t --verbose

オプションの違いだけですが、挙動は大きく変わるのでその辺も解説します。

Agentサーバにマニフェストを適用する場合、puppet agentコマンドを使用します。
このコマンドによって、Masterサーバ上にあるマニフェスト/etc/puppet/manifests/site.ppが適用されます。

-tオプション

Agent/Master構成を組んでいる場合、2種類の動作モードが選択できます。

  1. デーモンとして動作させ、30分ごとにマニフェストを取得する
  2. 一度だけ動作させて終了する

-tオプションは、2.の動作を行うためのオプションです。
これを外した場合、1.の動作を行います(agentがデーモンとして起動する)。
※ 外した場合の動作は検証したことがないので、どこかの機会でやってみたいです。

--verboseオプション

--verboseオプションは、実行内容を確認するためのオプションです。
puppet agentコマンドを使う際は、基本的につけたほうが良いと思います。

--noopオプション

--noopオプションは、マニフェストの適用をシミュレーションするためのオプションです。
いきなりマニフェストを適用するのではなく、意図した通りに適用されそうかテストをする目的で使用できます。

ですので、puppet agentコマンドで適用する場合は、事前に--noopオプションを使うことをお勧めします。
問題ないことを確認してから、--noopオプションを外して実行すればOKです。

私が、グループ作成の際にマニフェストを適用する前に--noopオプションをつけていたのも、このような理由です。

参考

この記事は、以下を参考にしています。

Basic Agent/Master Puppet ~ Agent/Master方式Puppetの基礎 — Documentation — Puppet


マニフェストでグループを作ってみる part2

今回は、前回実施したグループ作成について、マニフェストの内容を解説します。
実行したコマンドについては、次回解説します。

マニフェストでグループを作ってみる - ressyのナレッジ的なブログ

マニフェストの内容

前回は、グループ作成のためにこのような記述をしました。

# cat /etc/puppet/manifests/site.pp

group { 'testgroup':
    ensure => present,
    gid => 5000,
}

マニフェストを記述する場合、おおよそ以下のようなルールで記述します。

<リソースタイプ> { <リソース名>:
<パラメータ1=> <値1>,
<パラメータ2=> <値2>,
…
}

リソースタイプ

<リソースタイプ>とは、設定すべき項目の種類を指定します。
今回の場合、グループを作成したかったのでgroupと指定しています。
他にも、パッケージインストール関連の場合はpackage、設定ファイルの記述に関するものであればfileなど、リソースの種類は多々あります。

具体的には以下を参照すると良いでしょう。
https://docs.puppet.com/puppet/latest/reference/type.html

リソース名

<リソース名>は、設定対象を表します。
リソースタイプをgroupとした場合、リソース名には作成するグループの名前を指定します。
今回はtestgroupというグループを作成しています。

パラメータ、値

<パラメータ>は文字通り設定に必要なパラメータの種類を、<値>はパラメータの値を記述します。
パラメータは、各リソース共通のパラメータもあれば、リソース固有のパラメータもあります。

ensureは各リソース共通のパラメータで、このリソースに対してどのような処理を行うか指定します。
間違った言い方かもしれませんが、簡単にいうと「有効」「無効」を指定すると思えば良いでしょう。

  • ensure => presentとすると「有効」、つまりグループを作成します。
  • ensure => absentとすると「無効」、つまりグループを削除します。

gidは、リソースタイプgroupuserで使用できるパラメータで、文字通りグループIDを指定します。
今回の場合、グループtestgroupのグループIDを5000にしています。

マニフェストの内容に関する解説は以上です。
今回は、gidを指定するだけの簡単な例でしたが、パラメータは他にもあります。
詳しいことはいかに記載されていますので、参考にしてみてください。
https://docs.puppet.com/puppet/latest/reference/type.html#group

今回はここまで。
次回は、実行したコマンドに関する解説をします。

参考資料

この記事は以下を参考にしています。

Resource Type Reference (Single-Page) — Documentation — Puppet
Puppetを使ったLinuxシステムの設定自動管理 - さくらのナレッジ


マニフェストでグループを作ってみる

前回までで、Puppetのインストールを完了しました。
今回から、マニフェストを少しずつ書いていこうと思います。

グループを作成するマニフェストを書いてみる

マニフェストを使用して、各サーバにグループtestgroupを作成してみましょう。
ファイル/etc/puppet/manifests/site.ppを新規作成します。

# touch /etc/puppet/manifests/site.pp

この拡張子.ppのファイルが、マニフェストを記述するファイルとなります。
こちらに作成するグループを書いていきます。

# vi /etc/puppet/manifests/site.pp

group { 'testgroup':
    ensure => present,
    gid => 5000,
}

これはgid 5000のグループtestgroupを作成する記述です。
この記述の具体的な意味は次回解説します。
今回は、とりあえずグループを作るだけにします。

マニフェストをいきなり、Agentに適用する前にテストをしましょう。
Agent/Master構成の場合、puppet agentコマンドによってマニフェストを適用しますが、いきなり適用せずマニフェストを正常に適用できるかテストすることができます。
マニフェストを適用したいAgentサーバにて、以下のコマンドを実行すればOKです。
オプションの意味も次回解説します。

# puppet agent -t --verbose --noop
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for dbs01
Info: Applying configuration version '**********'
Notice: /Stage[main]/Main/Group[testgroup]/ensure: current_value absent, should be present (noop)
Notice: Class[Main]: Would have triggered 'refresh' from 1 events
Notice: Stage[main]: Would have triggered 'refresh' from 1 events
Info: Creating state file /var/lib/puppet/state/state.yaml
Notice: Finished catalog run in 0.15 seconds

上記実行結果は、勉強環境のdbs01で実行した例です。
Notice: /Stage[main]/Main/Group[testgroup]/...という部分が確認できると思います。
エラーが出なければ、あとは実際に適用します。
先ほどの、実行コマンドから--noopを外してもう一回実行すればOKです。

# puppet agent -t --verbose
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for dbs01
Info: Applying configuration version '**********'

testgroupが作成されたか確認します。

# cat /etc/group | grep testgroup
testgroup:x:5000:

無事に作成されたことが確認できます。
あとは、これを他のAgentサーバについても同様に実行すればOKです。

今回はここまで。
次回は、今回取り上げたマニフェストの記述やコマンドについて解説します。


Puppetをインストールする part5

今回は、こちらの続きをやっていきます。

http://ressy-tech.hatenablog.jp/entry/tech/puppet/install4

5. Master側での署名確認(Master)

前回は、AgentのインストールとMasterへの接続テストを行いました。
今回は、Master側でAgentの証明書へ署名を行います。
この作業が必要なのは、MasterはAgentからの接続が、正規ホストからのものであることを認証しているためです。

まずは、署名待ちになっている証明書を確認します。
以下のように実行しましょう。

# puppet cert list --all
  "dbs01" (SHA256) xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
  "web01" (SHA256) yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy
+ "mgs01" (SHA256) zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz (alt names: ....)

ホスト名の前に、+がついて入れば署名済み、ついていなければ署名されてない状態となります。
上記の場合、WEB01とDBS01が署名されてない状態となります。

※ MGS01は、Masterサーバと兼用しているためか、私の環境では最初から署名済みでした。
  この部分は定かではないので、少し調べる必要がありそうです。

署名されてない証明書に署名をしましょう。
以下を実行します。

# puppet cert sign --all
Notice: Signed certificate request for web01
Notice: Removing file Puppet::SSL::CertificateRequest web01 at '/var/lib/puppet/ssl/ca/requests/web01'
Notice: Signed certificate request for dbs01
Notice: Removing file Puppet::SSL::CertificateRequest dbs01 at '/var/lib/puppet/ssl/ca/requests/dbs01'

改めて、puppet cert list --allを実行しましょう。

# puppet cert list --all
+ dbs01" (SHA256) xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
+ "web01" (SHA256) yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy
+ "mgs01" (SHA256) zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz:zz (alt names: ....)

全てのホスト名の前に+がつきました。
これで全てのサーバの署名が完了しました。

Puppetのインストールで必要な作業は以上になります。
ここまでを実施して、初めてマニフェストを各サーバへ適用できるようになりました。
次回は、マニフェストを実際に書いてみます。


Puppetをインストールする part4

今回は、こちらの続きをやっていきます。

Puppetをインストールする part3 - ressyのナレッジ的なブログ

4. Puppetのインストールと設定(Agent)

Agentをインストールします。
私の勉強環境ではWEB01、DBS01、MGS01の全サーバがインストール先となります。

各々のAgentサーバにて以下を実行します。

# yum install puppet -y

Agent側では、Masterサーバを明示する必要があります。
そのために、ファイル/etc/puppet/puppet.confにMasterサーバのホスト名を設定します。
[agent]のセクション内に以下のように記述してください。

[main][agent]
…
    server = MGS01

記述したら、Masterへの接続テストを行います。
Agentサーバ全てで実施してください。
例えばDBS01で実行した場合、以下のようになります。

# puppet agent -t --verbose
Info: Caching certificate for ca
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for dbs01
Info: Certificate Request fingerprint (SHA256): xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
Info: Caching certificate for ca

Error:で始まるメッセージがなければOKです。

今回はここまで。
次回は、Master側での自動署名の確認を行います。
これが終われば、Puppetのインストールは一旦完了です。


Puppetをインストールする part3

今回は、こちらの続きをやっていきます。

Puppetをインストールする part2 - ressyのナレッジ的なブログ

3. Puppetのインストールと設定(Master)

AgentとMasterではインストールするパッケージが少し違います。
まずはMasterサーバ(私の勉強環境ではMGS01)をインストールします。

Masterサーバにて以下を実行します。

# yum install puppet-server -y

インストール後、ファイル/etc/puppet/puppet.confに変更の適用時にファイルの差分を表示するための設定を追加します。

[main]
…
    show_diff = true

[agent]

puppet.confには、デフォルトで[main]セクションと[agent]セクションが記述されています。
[main]セクションには共通設定を、[agent]セクションにはAgent固有の設定を入れます。
他にも、[master]セクションや[user]セクションがありますが、ここでは記事では省略します。

あとは、サービスを起動します。

# /etc/init.d/puppetmaster start

今回はここまで。
次回は、Agentのインストールをします。