PuppetでApacheを管理してみる part2
前回に引き続き、Apacheの構成管理をやって見たいと思います。
前回:PuppetでApacheを管理してみる part1 - ressyのナレッジ的なブログ
Apacheモジュールのマニフェストを書く
Apacheモジュール用のマニフェストを書いていきます。
具体的には以下のファイルを作成します。
/etc/puppet/modules/http/manifests/init.pp
moduleのマニフェストを作成する際には、以下のルールを守る必要があります。
他にもルールはあるのですが、まずは、以下を抑えておけば最低限書くことはできると思います。
init.pp
を必ず用意する- module名と同じclassを用意する必要がある
- 今回でいうと、
http
というclassを作成する必要があります
- 今回でいうと、
骨組み
出来上がり品を見せる前に、今回作成するhttp
クラスの骨組みを示します。
おおよそ、このような骨組みにします。
# cat /etc/puppet/modules/http/manifests/init.pp class http ( 変数:運用する/しない ) { case 変数 { 運用する: { - パッケージをインストールする - ファイルは、httpd.confのテンプレートを使用する - サービスは有効にする } 運用しない: { - パッケージをインストールする - サービスは無効にする } } }
# cat /etc/puppet/manifests/site.pp node 'WEB01' { class { 'http': 変数:運用する, } } node default { class { 'http': 変数:運用しない, }
前回の記事の通り、今回は勉強環境のWEB01
というサーバのみhttpを運用し、他のサーバでは運用しない構成とします。
今回は、クラスの変数として運用する/しないを用意し、その値に応じて処理を変えるようにしました。
あとは、/etc/puppet/manifests/site.pp
にてクラスを呼び出し、サーバWEB01
なら運用する、他のサーバなら運用しない。というふうにします。
サーバ単位でリソースをまとめる場合は、上記のようにnode
定義を使用すればOKです。
実際のところ、この骨組みがスマートかどうかはわかりませんが、今回の勉強環境で実現するには十分だと思うので、これで進めていきます。
実際に書いて見た
上記の骨組みを、実際に記述して見ます。
細かい説明は省略しますが、おおよそ内容はつかめるのではないかと思います。
# cat /etc/puppet/modules/http/manifests/init.pp class http( $enabled = 'false', # 変数:運用する/しない $port = '80' # 変数:ポート番号(templatesで使用する予定) ) { case $enabled { # Apacheを運用する場合 'true': { # パッケージをインストールする package { 'httpd': ensure => present, } # ファイルは、httpd.confのテンプレートを使用する file { '/etc/httpd/conf/httpd.conf': ensure => present, content => template('/etc/puppet/modules/http/templates/httpd.conf'), require => Package['httpd'], } # サービスは有効にする service { 'httpd': ensure => running, enable => true, subscribe => File['/etc/httpd/conf/httpd.conf'], } } # Apacheを運用しない場合 'false': { # パッケージをインストールする package { 'httpd': ensure => present, } # サービスは無効にする service { 'httpd': ensure => stopped, enable => false, } } } }
# cat /etc/puppet/manifests/site.pp node 'WEB01' { # WEB01ではApacheは運用する class { 'http': enabled => 'true', port => '80' } } node default { # 他のサーバではApacheは運用しない class { 'http': enabled => 'false', } }
補足として2点ほど
補足1
骨組みの説明には出ていきていない変数port
を用意しています。
この変数を使用して、templatesに格納したhttpd.conf
にてポート番号を指定できるようにしています。
補足2
上記マニフェストを書いただけでは、Agentサーバへのマニフェストの適用はできません。
理由は、templateのhttpd.conf
を用意していないためです。
puppet agent -t --verbose --noop
を任意のAgentサーバで実行してみると、適用に失敗するかと思います。
細く2点を踏まえて、詳しいことは次回以降取り上げます。
参考
この記事は、以下を参考にしています。
私とPuppet 基本編 その1 (Resource,Ordering,Class,Define,Node) - Qiita
PuppetでApacheを管理してみる part1
久々にpuppetの話題に戻りたいと思います。
数回に分けて、Apacheの構成管理をやって見たいと思います。
今日の記事は、構成管理の方針だけを取り上げます。
どうやって管理するか
自分の勉強環境で、Apacheの構成管理をやります。
勉強環境の構成はこちらの記事を参照してください。
こんなシステム構成で色々勉強していく - ressyのナレッジ的なブログ
今回は、この方針でApacheを構成管理します。
- WEB01でApacheを運用
- DBS01とMGS01では運用しない
- WEB01で使うコンフィグ(httpd.confなど)はMasterサーバ(=MGS01)で管理
- puppetのmodule機能を使用する
module機能
Puppetでは、マニフェストファイルを分割して管理するためにmodule機能を持っています。
構成管理の対象が増えると、/etc/puppet/manifests/site.pp
だけで全て記載すると、マニフェストの改修がやりにくくなります。
こういった時に、module機能を使用して例えば機能単位(Apache用のmodule、mysql用のmoduleなど)でファイルを分割すれば、マニフェストの管理・改修がやりやすくなるわけです。
続いて、module機能を具体的にどうやって使用するかです。
moduleを格納するディレクトリは以下のコマンドで確認できます。
# puppet config print | grep basemodulepath basemodulepath = /etc/puppet/modules:/usr/share/puppet/modules
上記の場合、/etc/puppet/modules
か/usr/share/puppet/modules
が該当します。
今回は、/etc/puppet/modules
に、Apacheのモジュールを作成します。
ディレクトリ名はhttp
とします。
# mkdir /etc/puppet/modules/http
さらに以下のディレクトリを作成します。
# mkdir /etc/puppet/modules/http/manifests # mkdir /etc/puppet/modules/http/templates # mkdir /etc/puppet/modules/http/files # mkdir /etc/puppet/modules/http/lib # mkdir /etc/puppet/modules/http/tests # mkdir /etc/puppet/modules/http/spec
各ディレクトリは以下を格納します。
- manifests:モジュールのマニフェストを格納
- templates:moduleで必要なconfigファイルなどを格納
- files:moduleで必要なconfigファイルなどを格納
- lib:カスタムfactsやカスタムリソース型などのプラグインを格納
- 例えば、
file
、package
などのリソースタイプを拡張した独自のリソース型を定義できる
- 例えば、
- tests:moduleのマニフェストの使い方を書いたドキュメントなどを格納
- spec:rspec-puppetで書かれたテストファイルを格納
moduleのディレクトリ構成は基本的に決まってます。
こちらを参考にすると良いでしょう。
Modules and Classes ~ モジュールとクラス — Documentation — Puppet
とりあえず使うかもって思ったディレクトリだけを作成しました(結局使わないかもディレクトリがあるかも)。
今回はここまで。
説明だけだと、moduleについてあまりイメージがわかないと思います。
次回以降、実際の設定を取り上げるのでそれを見ながら理解するのが良いかと思います。
参考
この記事は、以下を参考にしています。
Modules and Classes ~ モジュールとクラス — Documentation — Puppet
私とPuppet 基本編 その2 (Module,File,Templates,Variable) - Qiita
Vagrant upした時にAuthentication failureになった
最近Vagrantを立ち上げることが増えてきたので、その時にハマったメモを。
今までの記事のような解説スタイルではないのであしからず。
起きたこと
Vagrantfileにこんな感じで記載して
❯ cat Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "centos-6.4" config.vm.box_url = "http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210.box" config.vm.hostname = "ressy-host"
vagrant init
(Vagrantfileを作成する)を実行する
❯ vagrant init A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
そんで仮想マシンを立ち上げようとしたら。。。
❯ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Box 'centos-6.4' could not be found. Attempting to find and install... default: Box Provider: virtualbox default: Box Version: >= 0 ... default: Inserting generated public key within guest... default: Removing insecure key from the guest if it's present... default: Key inserted! Disconnecting and reconnecting using new SSH key... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
が何度も表示されてvagrant up
が完了しない。
という状態になりました。
※ 'vagrant ssh'で仮想マシンに入ることはできました。
sshまわりの設定を疑う
vagrant up
が終了しないので、ctrl + C
で中断。
default: Key inserted! Disconnecting and reconnecting using new SSH key... default: Warning: Authentication failure. Retrying...
この辺のメッセージでググると、仮想マシンのssh周りの設定が影響していることが多いらしい。
例えばこの記事によると、「秘密鍵と仮想マシン内の公開鍵がマッチしていない」ということが起きて、起動に失敗することがあるらしい。
詳細はリンク先の記事を参照。
vagrant up でAuthentication failure. Retrying... · NetCommons3/NetCommons3 Wiki · GitHub
なので、公開鍵の中身を確認してみる。
❯ vagrant ssh-config Host default ... IdentityFile <秘密鍵へのパス>/private_key ...
秘密鍵の場所がわかったので、公開鍵を生成(表示だけ)してみる。
❯ ssh-keygen -yf <秘密鍵へのパス>/private_key ssh-rsa AAAAB3Nz......
続いて、仮想マシン内の公開鍵を見ている。
vagrant up
は正常終了していませんが、vagrant ssh
で仮想マシンに入ることはできるみたい。
❯ vagrant ssh vagrant@127.0.0.1's password: Welcome to your Vagrant-built virtual machine. [vagrant@localhost ~]$
っで、authorized_keysを見てみる。
[vagrant@localhost ~]$ cat .ssh/authorized_keys ssh-rsa AAAAB3Nz......
一緒だった。
秘密鍵と公開鍵は一致しているけど認証ができてないってことか。
.ssh/authorized_keys
のパーミッションが怪しいと踏んだので見てみる。
[vagrant@localhost ~]$ ls -l .ssh/authorized_keys -rw-rw-r-- 1 vagrant vagrant 389 11月 12 04:30 2016 .ssh/authorized_keys
664
になってた。
これが原因っぽいのでパーミッションを600
になおす。
[vagrant@localhost ~]$ chmod 600 .ssh/authorized_keys
Vagrantをあげ直してみる。
❯ vagrant halt ❯ vagrant up
今度はうまくいった。
色々気になるところはあったけど、とりあえず起動したのでよし。
最後に
今日は自分がVagrant周りをいじった時にうまくいかなかった部分の殴り書きメモを書かせていただきました。
そういえば、Vagrantについては解説の記事とかは書いていませんね(勉強中ですが)。
近々、Vagrantって何?みたいな記事を書こうと思います。
マラソンの話:15kmランニングしてきた
今日は息抜きで、技術関連の話からは脱線します。
というわけでマラソン関連の話を。
マラソンがらみの近況
マラソンのシーズン(個人的に9月 〜 4月がシーズンだと思ってる)に入り、マラソンの大会もたくさん開催される時期に差し掛かりました。
私もすでに4つ大会エントリーしています。
- 11月:ハーフ1つ
- 12月:フル1つ
- 3月:フル1つ、ハーフ1つ
1月、2月、4月も何かしらエントリーしようかな?と思ってるところです。
ちょっと入れすぎかなぁ、と思いつつも今年は月に1回は大会 or 練習会に出たいなぁとか思ってます。
今日は15km走ってきました
大会へ向けて、本格的に練習に取り組んでいるこの頃。
今月に入ってからだいぶ涼しくなり、ようやく走りやすい気候になったなぁと思ってます。
おかげで練習量も増やしやすくなってきました。
今年の9月は暑くて、10km走るのもだいぶしんどかったですし。。。
今日は、15kmを1時間25分で走ってきました。
自分にとっては早いペースってわけではないですが、楽すぎず苦しすぎずのちょうどいい感じで走れました。
先ほど話した通り気候のおかげもありますが、先月30kmの練習会に出たこともあって、体が慣れてたこともあると思います。
この記事で話題にした内容です。
マラソンの話:30kmランニングしてきました - ressyのナレッジ的なブログ
練習会に参加してよかったなぁ。って思ってます。
この調子で練習量を増やしたいところ。
preztoにプラグインを追加する
今回は、こちらの続きでpreztoの周りをもう少しいじってみます。
具体的には、プラグインの追加をやっていきます。
preztoのプロンプトのテーマを変える part2 - ressyのナレッジ的なブログ
Gitプラグインを追加する
preztoにGitプラグインを追加すると、リポジトリのフォルダで作業している時に、リポジトリの状態を常に確認できるようになります。
以下は、knowledge
というリポジトリでmy_branch
というブランチを切っている場合の例です。
プラグイン追加前:
プラグイン追加後:
git branch
などと打たなくても、リポジトリの状態がわかるようになってます。
今回は、上記をやってみます。
と言っても、やることはすごく単純です。
.zpreztorc
を開き、zstyle ':prezto:load' pmodule
という部分を編集すればOKです。
$ vi .zpreztorc 26 zstyle ':prezto:load' pmodule \ 27 'environment' \ 28 'terminal' \ 29 'editor' \ 30 'history' \ 31 'directory' \ 32 'spectrum' \ 33 'utility' \ 34 'completion' \ 35 'git' \ # この行を追加する 36 'prompt'
これだけです。
後は、zshを起動しなおして、適当なリポジトリへ移動しましょう。
上記"プラグイン追加後:"のように表示されるはずです。
git
以外にも様々なプラグインがあるので、試してみると良いでしょう。
使用できるプラグインは、.prezto/modules/
配下にあるので、上記と同じ要領で好みで追加しましょう。
$ ls .zprezto/modules [22:54:40] README.md gpg rails archive haskell rsync autosuggestions helper ruby command-not-found history screen completion history-substring-search spectrum directory homebrew ssh dnf macports syntax-highlighting dpkg node terminal editor ocaml tmux emacs osx utility environment pacman wakeonlan fasd perl yum git prompt gnu-utility python
preztoのリポジトリのREADME.mdも参考にすると良いでしょう。
https://github.com/sorin-ionescu/prezto/blob/master/modules/README.md
今回はここまで。
参考
本記事は、以下を参考にしています。
https://github.com/sorin-ionescu/prezto
preztoのプロンプトのテーマを変える part2
今回は、こちらの続きでpreztoのテーマを変えてみます。
preztoのプロンプトのテーマを変える part1 - ressyのナレッジ的なブログ
テーマを変える
今回はparadoxというテーマに変更します。
paradoxがどんなテーマかはこちらを見ると良いでしょう。
Customizing Your Prezto Prompt
ホームディレクトリにある.zpreztorc
というファイルを編集します。
95行目あたりのzstyle ':prezto:module:prompt' theme 'sorin'
という行が編集する箇所になります。
デフォルトではsorin
とうテーマになっているので、paradox
に変更します。
$ vi ~/.zpreztorc 88 # 89 # Prompt 90 # 91 92 # Set the prompt theme to load. 93 # Setting it to 'random' loads a random theme. 94 # Auto set to 'off' on dumb terminals. 95 #zstyle ':prezto:module:prompt' theme 'sorin' 96 zstyle ':prezto:module:prompt' theme 'paradox' 97
他のテーマを使いたい場合も、同じように編集すればOKです。
あとは、zshを再度開き直すと、テーマが変わることが確認できると思います。
Ricty for Powerlineを入れる
テーマをpowerline
またはparadox
に変更する場合、iTerm2(自分が使ってるターミナルなのでそれ前提で話します。)にRicty for Powerlineというフォントのパッチを入れる必要があります。
これを入れないと、一部文字化けが発生します。
以下のようにしてインストールします。
$ brew tap sanemat/font $ brew reinstall --powerline --vim-powerline ricty
上記コマンドは5分〜10分くらい時間がかかります。
続けて以下を実行します。
$ ls -l /usr/local/Cellar/ricty/ →バージョンを確認する $ cp -f /usr/local/Cellar/ricty/<バージョン>/share/fonts/Ricty*.ttf ~/Library/Fonts/
ちなみに私の環境はバージョン4.0.1
です。
最後に、iTerm2のフォントを変更します。
メニューバーから[iTerm2]->[preferences]を開き、[profiles]->[text]->[Font]にて、Ricty for Powerline
を選択します。
これで、Ricty for Powerlineの追加は完了です。
※ Ricty for Powerlineはフォントが小さめ?なので、フォントサイズも好みで大きくした方がいいと思います。
テーマparadox
を使う分には、最低限これでOKかと思います。
っが、せっかくなのでもう少しだけ快適にしたいと思います。
例えば、自分はGitなどを使うこともあり、それ向けにpreztoにモジュールを追加しています。
詳しくは次回話したいと思います。
参考
この記事は以下を参考にしています。
Zsh+Preztoを設定し、powerline対応のthemeを設定する - Tbpgr Blog
Customizing Your Prezto Prompt
preztoのプロンプトのテーマを変える part1
前回インストールした、preztoをカスタマイズしていきたいと思います。
とは言っても、今回はテーマについて解説するだけですが。
perztoのインストール:preztoをインストールしてみた - ressyのナレッジ的なブログ
テーマを確認する
preztoでは標準で幾つかのテーマ(プロンプトのデザイン)が用意されており、インストール後に作成される~/.zpreztorc
で設定できます。
中身を見てみましょう。
$ cat -n ~/.zpreztorc … 88 # 89 # Prompt 90 # 91 92 # Set the prompt theme to load. 93 # Setting it to 'random' loads a random theme. 94 # Auto set to 'off' on dumb terminals. 95 zstyle ':prezto:module:prompt' theme 'sorin' …
zstyle ...
と言う部分でテーマを指定しています。
デフォルトではsorin
というテーマになっていると思います。
このテーマは好みのテーマ名を指定すれば変更できます。
どのようなテーマが利用できるかは、以下のコマンドを実行すればわかります。
# prompt -l
Currently available prompt themes:
agnoster cloud damoekri giddie kylewest minimal nicoulaj paradox peepcode powerline pure skwp smiley sorin steeef adam1 adam2 bart bigfade clint elite2 elite fade fire off oliver pws redhat suse walters zefram
たくさんの単語が出てきましたが、これら一つ一つがテーマです。
prompt -p <テーマ名>
と指定すると、テーマをプレビューできます。
例えば、テーマagnoster
をプレビューしたければ、prompt -p agnoster
と打てばOKです。
「一個一個プレビューしてくのは面倒くさい。」という方は、以下を参照すると良いでしょう。
一通りのプレビューがまとめられています。
Customizing Your Prezto Prompt
中途半端ですが、今回はここまで。
次回はプロンプトのテーマを変更してみます。
(ちなみに、テーマはparadoxにする予定)