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