
Emacs勉強会でLTしてきた #Agile渋谷

最近坊主にして杉作J太郎クリソツのantipopさんに
そそのかされて参加したのが運の尽き…
著者の大竹智也さんをはじめ、参加者全員から「Emacs実践入門」で尻を1万回スパンキングされる勉強会でした。
「リチャードストールマンにクリソツのAV男優さんいますよねー」とか「あのAV男優さん出てくるとEmacs使いたくなりますよねー」とかで会場が盛り上がっててEmacs使いの狂気を感じた。
vim使いの私とは相容れない水と油、もしくは水とローションといった感じだった。
今回paperboy.elのlogoも作ったのでステッカーにしようかと思います。
Stowを利用してソースからビルドしたソフトウェアを効率的に管理する
同じチームの@lamanotramaさんと話していて、 これから一部パッケージはRPMを作らず、@hirose31さんの方式 (ソースから自前ビルドしたソフトウエアの効率的な管理方法 - (ひ)メモ) を採用するとのことで、「なるほど!!」と思いながら上記記事のはてブコメント を眺めてたらStowというものを発見。
早速検証してみた。検証環境はCentOS 6.3です。
Stowの概要
- Perlで書かれている
- ソースからビルドしたソフトウェアを管理するソフト
- 任意のディレクトリ
/usr/local/stowなどにパッケージ一式をインストール - インストールしたパッケージから
/usr/lib/{bin,lib,share}にリンクを貼って利用。 - バージョンの切り替えはリンク張り直しで行う(ファイルの上書きはしない)
zsh-4.3.17やzsh-5.0.0などバージョンの切り替えが容易になる(同じようなソフトのpacoと違う点)
Stowの導入
epelにあるのでyumで導入。cpanmでも入ります。
1
| |
Stow用のディレクトリを用意
パッケージインストール用のディレクトリを作成
1
| |
Stowを利用してzsh-5.0.0を導入
試しにzsh-5.0.0を利用してみる。
configureのときに--prefix=/usr/local/stow/zsh-5.0.0といった感じで、
--prefix=/usr/local/stow/{name}-{version}というような感じでインストール先を指定し、
/usr/local/stow/以下に一式インストールする。これにより/usr/local/{bin,lib,share}以下が汚れずに済むし、管理も楽になる。
1 2 3 4 5 6 7 8 | |
stowコマンドを用いて、/usr/local/{bin,lib,share}にsymlinkを貼る。
-v,--verboseをつけると詳細が見えるので良い感じです。
1 2 | |
symlinkを貼ろうとした際に既にファイルが存在すると下記のようなエラーが発生する。
1 2 3 4 5 | |
既存ファイルの待避。マニュアルは入らないから一式削除
1 2 3 4 5 | |
再度stowコマンドを実行。
1 2 | |
下記のような形でlinkが貼られる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
lsで/usr/local/{bin,lib,share}を確認
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Stowを利用してzshバージョンの切り替え
zsh-4.3.17を導入して、zsh-5.0.0から切り替えをしてみる。
1 2 3 4 5 6 7 | |
この状態で/usr/local/stow配下に2つのバージョンがある。
1 2 3 4 | |
zsh-5.0.0へのリンクを削除(stow -D)して、zsh-4.3.17にリンクを貼る。
1 2 3 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
下記でバージョンが切り替わっているか確認。バージョン切り替えが楽。
1 2 3 4 | |
Stow関連の情報は全体的に古いものが多くて、ググっているとオワコン的な雰囲気が漂ってるんですが 2012年現在もちゃんとメンテされているので、ソースからビルドするならStowを利用するのが良いかもしれない。
運用としてはwebistranoなどを利用して、
- ビルドサーバでビルドしたものをデプロイ
- 各サーバで
stowコマンドを実行してバージョン切り替え
という感じになるかなーと考え中。
もう少し突っ込んで検証してみよう。
参考URL
ファイル/ディレクトリの変更を検知してコマンドを実行するincron
webistranoでファイルをデプロイして、設定の再読み込みやサービス再起動などが必要な際に、
デプロイユーザがsudoでreloadやらrestartなどを実行しているのが、
権限的に何となく気になって、ファイルの更新を検知して
自動的にreloadやrestartする方法を模索していたら
incronという良い物があったので検証。
検証環境はScientific Linux 6.2です。
実現したいこと
- デプロイユーザとサービス再起動ユーザの分離(sudo権限の剥奪)
- Nagiosの設定ファイルをデプロイしたら、Nagiosの
reloadが自動でかかる - Passengerの
restart.txt的な感じでreload.txtがトリガーでNagiosのreload的な
incronの導入
incronをyumで導入
1
| |
incronの起動
1 2 | |
incrontabの設定
crontabと同じような感じで設定。今回はrootのincrontabを設定します。
1
| |
下記のように監視対象,トリガー,実行コマンドという形で記載
1
| |
reload.txtへのアクセス、修正などのイベントを検知し、nagiosのreloadが走るようにする。
実際にはデプロイの際に、reload.txtにtouchなどでタイムスタンプを更新して、reloadを走らせます。
(実運用ではconfigtestをかけ成功した場合にreloadするようなスクリプトを用意した方が良いです)
incrontab -dで設定の反映
1
| |
トリガーとなるイベント一覧
incrontab -tでイベントとなるトリガー一覧が確認出来ます。
- IN_ACCESS : 当該ファイルがアクセスされた
- IN_MODIFY : 当該ファイルが変更された
- IN_ATTRIB : メタデータが変更された(パーミッション、拡張属性、タイムスタンプなど)
- IN_CLOSE_WRITE : 書き込み可能ファイルの1つが閉じられた
- IN_CLOSE_NOWRITE : 書き込み不可能ファイルの1つが閉じられた
- IN_OPEN : ファイルの1つが開かれた
- IN_MOVED_FROM : 当該ディレクトリの外にファイルが出された
- IN_MOVED_TO : 当該ディレクトリの中にファイルが入れられた
- IN_CREATE : 当該ディレクトリ中にファイル/ディレクトリが新規作成された
- IN_DELETE : 当該ディレクトリ中からファイル/ディレクトリが削除された
- IN_DELETE_SELF : 当該ファイル/ディレクトリ本体が削除された
- IN_CLOSE : IN_CLOSE_WRITEとIN_CLOSE_NOWRITEの双方を対象とする
- IN_MOVE : IN_MOVED_FROMとIN_MOVED_TOの双方を対象とする
- IN_ALL_EVENTS : ここに一覧した全イベントを対象とする
- IN_DONT_FOLLOW : シンボリックリンクは参照させない
- IN_ONLYDIR : 当該パスがディレクトリの場合のみ監視させる
- IN_MOVE_SELF : 当該ファイル/ディレクトリ本体が移動された
デプロイユーザが下記のようにデプロイ後にreload.txtのタイムスタンプを
更新するとnagiosのreloadがかかるようになり、sudoの必要がなくなった。
1
| |
同じようなことはwatchrでも出来ますかね。
ファイルの変更を動的に検知して、反映させる場合とかで便利そう。使いどころも結構ありそう。
参考URL
THE DARK KNIGHT RISES


ジャパンプレミアに行ってきて、いち早く観てきたという自慢エントリー。
とにかく素晴らしかった!!