
|
[バックナンバーのトップへ] [Linux システム管理のトップへ] いますぐ実践! Linux システム管理 / Vol.135 / 読者数:1323名こんばんは、うすだです。
新年度に入ってから少し経ちましたが、みなさまのお仕事の状態などは、
いかがでしょうか。順調でしょうか。 わたくしの場合は、いろいろテンパっていたお仕事が、 なぜかほぼ終焉をむかえてくださり、 新しい仕事をいくつか始めることができております。
その中のうちのひとつは、コテコテの組込みな OS のポーティングです。
同じ仕事をずっと続けていますと、やりがいがあっても、
やはりどこかでマンネリを感じてくるように思います。
…なんて、自分ではやってないことを、エラそうに書いてしまいました。 またしても微妙な決意をしたところで、今回も、はりきってまいります。 今回のお題 - Mercurial で設定ファイルを管理する昔々その昔、設定ファイルの履歴を RCS や CVS で管理する、 というネタをご紹介したことがあります。
Vol.061 - 設定ファイルをリビジョン管理する もともとは、ソースコードの履歴の管理や、 大勢でよってかかって開発を行う際などに使うものですが、 これを設定ファイルの管理にも用いると、変更履歴が残りますし、 設定を戻すこともできて便利ですよ、というお話でした。 ただ、個人的には、別の場所にリポジトリを作成して、 出し入れして使うというやりかたにあまり馴染めず、積極的に使っていませんでした。 もう少しすっきりしたバージョン管理ツールはないものか、 などと常日頃思っていたのですが、最近、 Mercurial という分散バージョン管理ツールが、ちまたで話題になっていましたので、 早速使ってみました。
試してみたところ、たしかに、ウワサ通り、シンプルで使いやすいです。 というわけで前置きが長くなりましたが、今回は、Mercurial を使って、 なにかの設定ファイルを管理してみたいと思います。
まずは、なにはともあれ、Mercurial の入手から始めましょう。
Mercurial
ソースコードはもちろん、
主要なディストリビューションのパッケージが各種取り揃えてあります。
もしパッケージがなくても、ソースコードに SPEC ファイルが含まれますので、
RPM 系のかたなら、自力でパッケージを作ることができます。
そんなこんなで、Mercurial を入手してみてください。 % rpm -qf `which hg` ところで、試す管理対象ですが、 今回は /etc/httpd 以下の設定ファイルにしたいと思います。基本的には、 他の設定ファイルなどでも、やりかたは同じです。お好きなところ、 お好きなものでお試しくださいませ。 さて、まずは、最初の設定を行ってみましょう。 管理対象のトップ・ディレクトリに移動して、以下のように、 hg init と実行してください。 % cd /etc/httpd % hg init すると、直下に、.hg というディレクトリが作成されます。 % ls .hg/ 00changelog.i requires store/
ここに、対象となるファイルの履歴や、さまざまな情報が記録されます。
また、使用するコマンドも、基本的には hg コマンドだけです。
次に、管理の対象にするファイルを登録します。
hg add のあとに、管理対象となるファイルを指定します。 % hg add conf/httpd.conf conf.d/*.conf
ディレクトリを指定した場合は、そのディレクトリ以下のファイルすべてが、
根こそぎ登録されます。 % hg add *
そして、初期の状態をコミットして、残しておきましょう。 % hg commit -m "initial version"
-m オプションで、メッセージを指定します。 最初の設定が終わりましたので、ここからは、 じゃんじゃんと使い込んでみたいと思います。 まずは、なにも気にせずに、設定ファイルを編集してください。 そして、いろいろと変更して、その状態をとっておきたくなったら、 再度コミットを行います。方法は前述の通りです。 % hg commit -m "change log format"
もし、複数のファイルを変更していて、そのうちいくつかだけをコミットしたい場合は、
コミットしたいファイルを指定します。 % hg commit -m "add foo.jp" conf/httpd.conf
いろいろこねくり回していて、どのファイルを変更したのか、 わからなくなったときには、hg diff と実行してください。 一番最近にコミットした状態と、いまの状態との差分を、 diff の形式で出力してくれます。 % hg diff たくさん出力されてさらに困った場合は、hg diff の後にファイルを指定しますと、 指定したファイルの差分だけを出力してくれます。 % hg diff conf/httpd.conf
新たにファイルを対象としたいときは、hg add で行えます。
hg add の後にそのファイルを指定してください。 % hg add conf.d/foo.jp.conf
ただし、これだけでは、ファイルの内容が .hg 以下に記録されません。
逆に、対象から外したいときは、hg remove で行えます。 % ls conf.d/test.conf conf.d/test.conf % hg remove conf.d/test.conf % ls conf.d/test.conf /bin/ls: conf.d/test.conf: No such file or directory
それから、ファイルを編集中に、コミットした状態に戻したくなったら、 hg revert で戻すことができます。 % ls -l conf/httpd.conf -rw-r--r-- 1 root root 40735 Apr 12 20:54 conf/httpd.conf % hg revert conf/httpd.conf % ls -l conf/httpd.conf -rw-r--r-- 1 root root 42641 Mar 25 23:28 conf/httpd.conf
ちなみに、hg log と実行しますと、履歴の一覧が出力されます。 % hg log
さて、これまでご紹介したコマンドは、
最新の状態との比較などを行っていたと思います。 % hg log -r 2 また、リビジョン 1 と 2 の差分を出力するには、以下のように実行してください。 % hg diff -r 1:2
それから、コミットしますと、リビジョン番号が一意に決まると思いますが、
番号という無機質な数値ではなく、名前で参照できるように、
タグというものをつけることができます。 % hg tag bar
もちろん、過去のリビジョンにタグをつけることもできます。 % hg tag -r 3 third
ちなみに、もし操作がわからなくなったときは、hg help と実行してみてください。 コマンド一覧が出力されます。 % hg help また、hg help の後にコマンドを指定すると、そのコマンドの使いかたが出力されます。 % hg help commit もちろん、オンラインマニュアル(man hg)にも、詳細な説明が記載されています。 hg help だけで解決できないときなどに、活用してみましょう。 以上、Mercurial の使いかたを、駆け足で簡単にご紹介しました。 いきなり本番で使うのは、勇気が百倍ほど必要かと思いますので、 まずは設定ファイルをごっそりコピーして、試してみてください。
冒頭で、新しいことをやってみましょう的なことを書きましたけれども、
Mercurial を導入して活用するなんて、まさにうってつけですね。(強引) 宿題の答え前回の宿題は、 GnuPG を使って、ログを暗号化し、メールで送信してみましょう。 でした。
まず、gpg --gen-key を実行して、鍵を作成しましょう。
Vol.087 - ファイルを暗号化する わたしは、以下のように、logwatcher という適当な名前を用いて、作成しました。 % gpg --list-keys /root/.gnupg/pubring.gpg ------------------------ pub 1024D/01234567 2008-04-10 uid logwatcher (for test) <uso@uso.usupi.org> sub 2048g/DEADBEEF 2008-04-10 そして、公開鍵を logwatcher.pub というファイルに書き出して、 これをサーバのログが読めるひと(root)に渡します。 % gpg -o logwatcher.pub --export logwatcher
ログの読めるひと(root)に、公開鍵を登録してもらい、
さらに鍵署名なるものをしてもらいます。 # gpg --import logwatcher.pub # gpg --lsign-key logwatcher では、試しに、適当なファイル(/root/.bashrc)を暗号化してみます。 # gpg -q -r logwatcher -o /tmp/bashrc_root -e /root/.bashrc
暗号化したファイル /tmp/bashrc_root を手元に持ってきて、
復号化できるかどうか試します。 % gpg -d /tmp/bashrc_root ...(/root/.bashrc の内容)... それでは、いつものスクリプトを、以下に差し替えてみましょう。
#!/bin/bash
WORKPATH=/tmp/sysad_134
cd $WORKPATH
while [ 1 ]; do
allmessages=""
while read -t 60 message; do
allmessages="${allmessages}${message}@RET@"
done < /var/log/authpriv
if [ "z`echo $allmessages | grep -i fail`" != z ]; then
TXTFILE=`mktemp syslog_auth_messages-XXXXX`
echo $allmessages | sed 's/@RET@/\n/g' >> $TXTFILE
gpg -q -r logwatcher -o - -ea $TXTFILE |
/usr/bin/Mail -s 'syslog authpriv' root
rm -f $TXTFILE
fi
done
前回のスクリプトと、基本的には変わりません。 だれかがログインに失敗などすると、うまくいけば、root 宛に、 以下のようなメールが届きます。 From: root@hoge.usupi.org To: root@hoge.usupi.org Subject: syslog authpriv -----BEGIN PGP MESSAGE----- Version: GnuPG v1.4.6 (GNU/Linux) hQIOA0kqpmTi/jFyEAf/QSJ/boigkPasY7zfMz0ZzYYhSbYWw6BPtpH9+RlHPrkT 8pDTgkxn5zYaXBkYc2TGYGriNqxvWu63WsOP0kXk0IdlHPXn9HKXtoQH27qSqDVT ...中略... -----END PGP MESSAGE----- このメールをファイルに出力すれば、gpg コマンドで復号化できます。 % gpg -d mail.txt ...ログの内容... …長々と申し訳ありません。
ちなみに、わたくし、勘違いをしておりまして、暗号化を行う側は、
公開鍵を使って暗号化を行うため、
パスフレーズを入力する必要はありませんでした。 今回の宿題今回の宿題は、 Mercurial によるバージョン管理を、最初からあらためて始めたいとき には、どうすればよいでしょうか? です。 いままでの履歴を全部捨て、今の状態を起点として、最初から管理を行いたい場合、 どうすればよいでしょうか? …という意味です。 使いはじめのうちは、手順を間違えて、 最初からやり直したくなることがあるのではないかと思います。 どこの場所で管理しているのかがわかっていれば、あとはもうご想像通りです。 お試しディレクトリなどで、試してみてください。 あとがきここだけの話ですが、最近、めきめきと痩せることができました。 というのも、以前ご紹介した、「夢をかなえるゾウ」に書かれていた、 食事を腹八分におさえる を忘れないで実践しているから、ではないかと思っています。
人間、努力すればそれなりの成果をあげることができると思います。 食べすぎると体に悪いし、眠くなるし、集中力も下がる
という理由にいたく納得して、自分の中でパラダイムシフトを起こすことで、
努力することなく、守りつづけられるようにしました。 そんなことでできるんかいな、という気もしますが、人間、 納得のできる理由があると、意外に守れてしまうようです。
また、それだけではなく、ちょっとした時間のあるときに、
腕たてふせや腹筋をしています。やせてきたな、がんばってやっているな、
という実感があると、これまた意外に楽しく行えます。 …ええっと、さすがに、みなさんも是非お試しください、 と言えるような内容ではないと思います。世の中にはこんな変なひともいるんだなあ、 とでも思ってくださいまし。
さて、次回は、2週間後が黄金週間まっただ中になりますので、日曜日ではなく、
5月6日(火) に発行したいと思っております。
今回も、ここまで読んでいただき、ありがとうございました。
「いますぐ実践! Linux システム管理」の解除は、以下からできます。
バックナンバーは、こちらにほぼ全部そろっています。
「栗日記」− 好調の波がやってきたかも…毎日栗の絵描いてます! |
▼ トップ ▼ プロフィール ▼ リンク
▼ 作ってみました
▼ せんでん
▼ 最近読んだ本 [X]
「粟津潔 デザインする言葉」 粟津潔「Binary Hacks」 高林 哲,鵜飼 文敏,佐藤 祐介,浜地 慎一郎,首藤 一幸 「Make: Volume01」 オライリー・ジャパン 「セーラが町にやってきた」 清野 由実 「手紙屋」 喜多川 泰 「Linuxカーネル2.6解読室」 高橋 浩和,小田 逸郎,山幡 為佐久 「人蕩し術」 無能 唱元 「子育てハッピーアドバイス2」 明橋 大二, 太田 知子 「ラッセル幸福論」 B. Russell 「それでも人生にイエスと言う」 Viktor Emil Frankl 「子育てハッピーアドバイス」 明橋 大二, 太田 知子 「考具」 加藤 昌治 「北欧デザイン<3>」 渡部 千春 「北斎の謎を解く」 諏訪 春雄 「体感美術館」 平野 暁臣 「チベット永遠の書」 Theodore Illion 「リナックスの革命」 Pekka Himanen 「人月の神話」 Frederick Phillips,Jr. Brooks 「ヤバい経済学」 Steven D. Levitt, Stephen J. Dubner 「小布施ッション<2001-2002>」 セーラ・マリ カミングス 「アンパンマン伝説」 やなせ たかし 「夢をかなえるゾウ」 水野 敬也 「ゲーム開発者のためのAI入門」 David M. Bourg, Glenn Seemann 「北欧デザイン<2>」 渡部 千春 「北欧デザイン<1>」 渡部 千春 「ヒューマン2.0」 渡辺 千賀 「中国・ロシア同盟がアメリカを滅ぼす日」 北野 幸伯 「超ロング・セラー 絶滅寸前商品」 湯浅 豊彦 「The BUG(ザ・バグ)」 すずき ひろのぶ,かとう みつあき 「デザインのデザイン」 原 研哉 「マキアヴェッリ語録」 塩野 七生 「ハンバーガーを待つ3分間の値段」 斎藤 由多加 「星の旅人-スペイン「奥の細道」-」 黛 まどか 「食品の裏側」 安部 司 「On Lisp」 Paul Graham 「ぼくが医者をやめた理由 つづき」 永井 明 「あなたならどうする?」 Jack Nikolaschka 「セキュアプログラミング−失敗から学ぶ設計・実装・運用・管理」 Mark G. Graff, Kenneth R. van Wyk 「「左利き」は天才?−利き手をめぐる脳と進化の謎」 David Wolman 「自分の中に毒を持て」 岡本 太郎 「アトピーの薬を減らす本」 田中 貴子 「岡本太郎「明日の神話」修復960日間の記録」 吉村 絵美留 「X51.ORG THE ODYSSEY」 佐藤 健寿 「アレルギーっ子の暮らし応援BOOK」 佐藤 のり子 「沖縄文化論」 岡本 太郎 「「伝説の社員」になれ!」 土井 英司 「コンピュータの構成と設計(上)」 Patterson & Hennessy 「カラスのジョンソン」 明川 哲也 「ドリルを売るには穴を売れ」 佐藤 義典 「頭がよくなる照明術」 結城 未来 「クロフォードのインタラクティブデザイン論」 Chris Crawford 「いじめの根を絶ち子どもを守るガイド」 Barbara Coloroso 「非常識のすすめ―逆発想の仏教論」 ひろさちや 「Linuxアドバンストネットワーク構築ガイド - HAサーバ構築編」 デージーネット 「イノベーションの達人!」 Tom Kelly, Jonathan Littman 「クリエーター50人が語る創造の原点」 小原 啓渡 「欺術 - 史上最強のハッカーが明かす禁断の技法」 Kevin Mitnick 「楽しい気象観察図鑑」 武田 康男 「入門 Ajax」 高橋 登史朗 「リリカルな自画像」 岡本 太郎 「やぎの目ゴールデンベスト」 林 雄司 「初めてのPython 第2版」 Mark Lutz,David Ascher 「鼻兎」 小林 賢太郎 「なぜ、これがアートなの?」 Amelia Arenas 「芸術起業論」 村上 隆 「まほう色の瞳」 Enrique Barrios 「ラーメンズつくるひとデコ」 ラーメンズ 「R25 つきぬけた男たち」 R25編集部 「美の呪力」 岡本 太郎 「しろのあお」 上大岡 トメ 「ザ・ゴール」 Eliyahu M. Goldratt 「ハッカーと画家」 Paul Graham 「岡本太郎に乾杯」 岡本 敏子 「Fedore Core Expert」 Software Design 「誰も知らない男」 ブルース・バートン 「子どもが育つ魔法の言葉」 ドロシー・ロー・ノルト 「国家の罠」 佐藤 優 「夜回り先生」 水谷 修 「やぎの目絵日記」 林 雄司 「7つの習慣」 スティーブン・R. コヴィー 「まろ、ん?−大掴源氏物語」 小泉 吉宏 「ザ・サーチ グーグルが世界を変えた」 ジョン・バッテル 「ポストモダン・マーケティング」 スティーブン ブラウン 「機動戦士ガンダムさん」 大和田 秀樹 「小エロのひみつ - Webやぎの目研究発表」 林 雄司 「これ、誰がデザインしたの?」 渡部千春 「60分間・企業ダントツ化プロジェクト」 神田 昌典 「ガルシアへの手紙」 エルバート ハバード 「人生は素晴らしいものだ」 オグ・マンディーノ 「ザ・マインドマップ」 トニー・ブザン,バリー・ブザン 「ワインバーグのシステム思考法」 G.M.ワインバーグ 「渋谷ではたらく社長の告白」 藤田 晋 「渋井真帆の日経新聞読みこなし隊」 渋井 真帆 「コラム息切れ」 小野 法師丸 「早朝起業」 松山 真之介 「変な人が書いた驚くほどツイてる話」 斎藤 一人 「35歳から仕事で大切にしたいこと」 村井 勉 「金融広告を読め」 吉本 佳生 「発想する会社!」 トム・ケリー,ジョナサン・リットマン 「エハイク」 吉田 戦車 「人生の旋律」 神田 昌典 「仕事の思想」 田坂 広志 「CPUの創りかた」 渡波 郁 「非常識な成功法則」 神田 昌典 …これ以前は記録してません…
▼ 気に入ってる本
| ||||||||||||||||||||||||||||||||||||||||