[mysql]Table ‘mysql.procs_priv’ doesn’t exist

mysqlをアップグレードしたらば。

mysql> FLUSH PRIVILEGES;
ERROR 1146 (42S02): Table 'mysql.procs_priv' doesn't exist

こういうエラーが出るようになった。

たぶんmysqlを4→5にアップグレードしちゃったことが原因。yum一発アップグレードは怖いなぁ。

ともあれ、Table ‘mysql.procs_priv’ doesn’t existでググったら、

MySQL Bugs: #9934: DROP USER fails if mysql.procs_priv doesn’t exists
というのが出てきて、冷たいことを言われた末に、

If you encounter this after an update, run mysql_upgrade_shell command: it will create the missing table.
(アップグレード後にこのエラーが出たんだったら、mysql_upgrade_shellコマンドを走らせろ。それで欠けてるテーブルが作成されるから)

ということになっている。

(当然バックアップをとってから)やってみた。

[furukawa@www ~]$
sudo mysql_upgrade_shell --verbose --datadir=/var/lib/mysql --user=root --password=****
Running /usr/bin/mysqlcheck  --password=**** --check-upgrade --all-databases --auto-repair --user=root
expressionengine.exp_actions
error    : Table upgrade required. Please do "REPAIR TABLE `exp_actions`" to fix it!
expressionengine.exp_captcha
error    : Table upgrade required. Please do "REPAIR TABLE `exp_captcha`" to fix it!
expressionengine.exp_categories
error    : Table upgrade required. Please do "REPAIR TABLE `exp_categories`" to fix it!
expressionengine.exp_category_field_data
:(略)
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
This script updates all the mysql privilege tables to be usable by
the current version of MySQL
done

REPAIR TABLEする必要があるらしい。

[furukawa@www ~]$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 82
Server version: 5.0.68 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use expressionengine;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> REPAIR TABLE `exp_actions`;
+---------------------------------+--------+----------+----------+
| Table                           | Op     | Msg_type | Msg_text |
+---------------------------------+--------+----------+----------+
| expressionengine.exp_actions    | repair | status   | OK       |
+---------------------------------+--------+----------+----------+
1 row in set (0.00 sec)
:(略)

以下、この調子でテーブルを片っ端からREPAIRしていく。

columns_priv以降のテーブルはmysqlデータベースに入っている。

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> REPAIR TABLE `columns_priv`;
+--------------------+--------+----------+----------+
| Table              | Op     | Msg_type | Msg_text |
+--------------------+--------+----------+----------+
| mysql.columns_priv | repair | status   | OK       |
+--------------------+--------+----------+----------+
1 row in set (0.00 sec)
:(略)
mysql> exit
Bye
[furukawa@www ~]$
sudo mysql_upgrade_shell --verbose --datadir=/var/lib/mysql --user=root --password=****
mysql_upgrade already done for this version
This script updates all the mysql privilege tables to be usable by
the current version of MySQL
done
[furukawa@www ~]$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 84
Server version: 5.0.68 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

これでいいらしい。あんまり自信がないのだけれど、エラーメッセージでググった時に日本語の情報が出てこなかったので、とりあえずブログにあげておきます。

PhotoShareサーバ勝手に改善計画

photo by rudolf_schuba

masuidriveの人から、ご意見聞かせて、と連絡が来たので、がんばって書いてみます。

masuidrive on rails – Webでの非同期処理を考えてみる [長い記事だけどコメント求む!]

Life is beautiful: マルチスレッド・プログラミングの落とし穴、その2

要するに、重くなってきたサービスに対して、むやみにサーバを増やさないでどうやってパフォーマンスを改善しましょう?全部の機能を同期的に処理する必要はないんじゃね?という話だと理解しました。

ボク程度の人の意見が必要というよりは、何かしら「あっ!」って気づくきっかけが欲しいのだろうから、遠慮せずにだらだらと。

「その程度のことはわかっとるわいっ!」という部分が多いと思いますが、そこはご容赦ください。

全部を非同期にすると…

中島さんの記事で

アクセス数が上がると、ユーザーがした投稿がデータベースに反映されるまでの時間がかかるようになるが、それが直接的におもてなしの低下に繋がることはない

と書いてあって「え~っ?」とまず思いました。

最近ブログのコメント欄なんかで、(スパムを防ぐために)管理者承認後に反映されます、というブログが増えているのですが、これは明らかに、おもてなしの低下につながっています。

単純な話で、自分が投稿したコメントがどう見えるかすぐに確認できない分、ユーザーさんはできあがりイメージを確認せずにその場を離れないといけないわけで。その場でできあがりを確認してから離れられるのに比べて不便なのは確かでしょう。

masuidriveの人の記事を見ると、「でも全部を非同期にする訳にはいかないし」って言われているので、そんなことは承知の上で、人間以外には非同期でいいんじゃね?という意図なのだとは思いますが。

あれ。でも全部非同期って、意外とありかもしれない。だって現にブログのコメントが非同期に反映されることについては、ユーザーの非難囂々という状態にはなっていなくて、それなりにみんなの同意が得られつつあるように見えます。

それだったら、投稿とか削除についても、「ちょっと時間がたってから反映されます」と一言表示されるだけで意外と許されるのかも。

エラーがあったらどうするか。photoshareの場合、幸い(?)ユーザー登録しないとコメントできないシステムみたいですので、

#iPhone持ってないので、詳細は知りませんw

それだったら、エラーになったらメールする、でもいいんじゃないでしょうか。

あと、よくしらんのですが、iPhone上のサービスって独自の(WEBじゃない)アプリが動いてるんですよね?であればそっちに表示させるとか。

同期と非同期をわける方法

ただ、そうやって非同期にすることが一般化すると何が起きるか。

なんだかんだいったって同期でスムーズに動いた方が嬉しいのは事実なので、そうすると、ユーザー数の少ない小規模サービス(技術者が片手間で作ったみたいなの)と、

リソースに余裕のある超大手サービス(YahooとかGoogleみたいな大手がはじめる新サービス)は同期で動いて、

photoshareのような、お金とサービスのバランスをとらないといけないところだけが非同期で機能を提供することになります。

これは痛い。競合に提供できるサービスを自分たちは提供できません、ということになるんだから、これは厳しい。

そうすると、やっぱり全面非同期化は厳しいんじゃないかな、と。

リアルタイムの情報を必要としないRSSとか、クローラーとかには非同期で返しつつ、ユーザーさんの要求はリアルタイムで返す必要があるんじゃないのかなぁ。

じゃあ、同期と非同期をどうやってわけるか。

 コントローラごとに実行するmongrelを振り分けるようなルールをリバースプロキシに書けばある程度回避できますが、どのように振り分けるのか決定するのは困難です。(Feedなら簡単だけどもっと難しいケースもあるよね)



 このように実はアクションごとに優先順位があります。Feedやランキングと言った部分は、反映が遅くてもほとんど問題になりませんが、自分の写真リストや写真そのものはすぐにアクセスできるようにしたいのです。

 現在のRailsはコントローラごとに優先順位を付けるような処理は苦手なので、これを行うには、なんらかの仕組みが必要になると思います。

問題は二パターンあって。

1.create,update,delete系の要求以外を別サーバに振り分けたら問題が解決する場合

2.それでは負荷対策として不十分で、create,update,delete系であっても一部は非同期にする必要がある場合

1.だったら問題は簡単で、railsで動作する同期動作サーバと、rsyncか何かで同期サーバの情報をミラーして提供する非同期サーバを用意して、リバースプロキシ部分の振り分けをがんばればいい話です。

sv_idea1.jpg

#十分難しいのですけどw まあお二人ならきっとできるでしょう。

問題は2.の時で。アーキテクチャはこんな感じかなぁ。非同期でいい機能はWEBサービスとして切り出して、フロントサーバはバックエンドサーバに投げちゃう。

sv_idea2.jpg

#当たり前ですけど、本当にサーバを4台以上用意せよ、という話ではなくて。物理的に同じサーバ上でフロントとバックエンドの機能が動いていたってかまわないです。負荷が耐えられるんだったら、ですけど。

バックエンドサーバに要求される機能はこんな感じ。

・要求を受け付けて、キューに入れる

・応答は、静的に生成してあるHTMLかなにかをそのまま返しちゃう

・適宜キューにある処理を実施して、静的HTMLをアップデートする

railsで実現するとすると、

・要求を受け付けたら、それをDBに入れて、生成済みのHTMLを返す。ここはrailsで普通に作れるはず。

・キューにある処理を実施する部分は…

キューの処理は、rakeタスクをcronとかで叩くようなぬるい処理で間に合うんだったらこんな苦労していないから、やっぱりぶんぶん回るサーバプロセスが必要になりますね。

ここでrailsいらないじゃん、という話になるわけか。

いかん。masuidriveの人と同じ結論になってしまった^^;

でも、ここまでをふまえると、やっぱり独自で作るのがいい、という話になると思います。要求とは無関係にぶんぶん回っている時点でもはやWEBサーバじゃないですから、それに適したアーキテクチャのものを書く必要があるんじゃないかなぁ。

なんだかまとまらん話ですが、思うがままに書いてみました。何かしらヒントになるような部分があれば幸いです。

puttyの設定をiniファイルに変換する

 Windowsからlinuxサーバにアクセスする日本人の標準ツールPuTTY ごった煮版は、設定をレジストリじゃなくてiniファイルに保存することができます。

 今まで設定をレジストリに保存していた人は、ゑBLOG: PuTTYごった煮版 レジストリINIファイルコンバータを使うと設定を変換することができます。



 ところがこれが、どうもうまく動かない。スクリプトは動作するのだけれど、出力されたputty.iniには

[Generic]

UseIniFile=1

しか書かれていない、ということになって困りました。



コチョコチョしてみたら原因が分かったので、困った人向けのメモ。



原因:

 WindowsXPのregeditは、utf16(16ビット単位で文字を扱うコード)でファイルに書き出すみたいです。

reg2ini.pl(というか、ActivePerlとかその辺の処理系)はutf8を前提としているので、これだと正規表現がまったくマッチしなくなります。



ということで、出力された.regファイルを一度秀丸エディタか何かで開いて、utf8に変換してからreg2ini.plを使うとうまく動作します。



追記

regeditでエクスポートするときに「Win9x/NT4 登録ファイル」を選ぶという手もあるらしいです。

regedit.JPG

AmazonEC2&S3を使ってみた

 Amazonが運営するサーバ仮想化技術であるAmazonEC2&S3を使ってみました。



やり方とかは増井さんがとっくに説明されていますので、

はじめてのAmazon EC2&S3 ~これからの新サービスの公開の形~

ここでは使ってみた感想とかを。

意外といける

 聞き慣れない単語が多かったので、これはどうも今までの技術とは別系統っぽいなぁ、

はやらなかったときが悲惨だからもう少し様子見、とか思って先送りしてきたのですが^^;

やってみた結果、そんなに変な技術ではなくて、自分の知っている技術の延長線上にあるシステムだと分かりました。

 vmwareを使ってWindowsの上でlinuxを走らせたことのある方は分かると思うのですが、vmwareが動いてしまえば、

その下のホストOSは、Windowsだろうとlinuxだろうと、あまり関係がなくなってしまいます。

Windowsで作った仮想マシンイメージをlinuxで動いているvmwareに持って行ってもそのまま動作しますよね。

この考え方を延長すると、ホストは正体不明のOSであってもかまわないわけで。

正体不明のOSの上に何台でも仮想マシンを走らせることができるようにしたのが、AmazonEC2です。

なので、AmazonEC2の上でゲストOSが動いてしまえば、あとは普通のlinuxと同じように使うことができます。

マシンイメージが便利

 vmwareでは、新品の仮想PCをくみ上げてそこに自分でOSを入れるのが基本でしたが、AmazonEC2では、すでにあるマシンイメージ(AMI)を使うのが基本です。

RedhatやCentOS,Ubuntuなどの各種linuxイメージが公開されているので、このコピーを使っていきなりマシンを起動させることができます。

amis.JPG


で、このマシンイメージがなにげに便利です。

いままで、CentOSをインストールしたら、その後Rubyを入れて、RubyGemも入れなくちゃ、RubyGemはyumにないから自分でrpm作らないとね、そのためにはrpmbuild入れて…

というような作業が必要だったのですが。rightScaleさんが公開しているCentOSのイメージでは、RubyはもちろんGemもsqliteもsubvesionも、全部すでにインストールされていました。

これは楽ちん。



もちろんこれは、自分の希望と異なるものが入っていたら「余計なことすなっ!」ですが、AmazonEC2を借りてその上でWebサービスを作ろうという人にはおおむね妥当なソフトがインストールされていて、これは便利、と思いました。

自動拡張してくれるわけじゃない

 「AmazonEC2は負荷に応じた拡張が容易」といわれていたので、負荷が高くなったら勝手にCPUの性能が上がったり、ディスクサイズが自動的に拡大されたりするサービスなのかな、と思っていたのです。

そんな怪しいマシンだから、きっと普通のOSは動かないんだろうな、と思って警戒していたのですが。

 べつにそんな怖いサービスではありません。仮想マシンを動かすことができますが、それだけです。ただ、サーバの増設が必要だ!となったときに、新しいマシンを買ってきたり、そこにOSを入れたりしなくても、AMIから同じ構成のマシンを何台でも立ち上げることができるので、拡張が便利、とそういうことです。

 なので、スケーラビリティを考えないサービスを適当に作っても何とかしてくれるわけじゃなくて、ちゃんとスケーラブルになるようにサービスを設計しておく必要があります。

はじめてのAmazon EC2&S3 ~これからの新サービスの公開の形~:第4回 自分用のイメージファイル(AMI)を作ろう|gihyo.jp … 技術評論社




 なんにも考えずにサーバが勝手に何とかしてくれないかな?とかずぼらなことを考える人は、グリッドホスティングみたいなサービスがオススメです。



#まあこれはこれでいろいろ難しいのですけどね。


atom形式のページをFirefoxで見る

Firefox3(たぶん2.0以降ずっと)、atom形式で送信されるページを開くと、rssフィードなんだろう、ということでライブブックマークに追加しようとします。

あるいは、ご自分でRSSリーダーをLivedoorReaderとかに変えている人は、そっちの画面が出るかもしれません。

この挙動、便利なときは便利なのですが、ATOM形式で結果を返すWEB APIをテストしたいときには、余計なお世話です。ATOM形式だからってRSSフィードだとは限らないですやん。いいからソースを見せてっ!


Firefoxの設定で、Webフィードの所を「Firefoxでプレビュー表示」にすると、処理を毎回聞いてくれるようになります。

 

 

 で、この状態で右クリックしてソースを表示させると….

ちゃんとrssのソースを表示してくれます。

 

RSSをブラウザで開いたときどう見えるべきかは、けっこう議論のある所みたいですが、少なくともソースとしてみたら元のファイルが見えるというのは、なかなかいい落としどころのような気がします。

Evernoteを携帯で見る

ITMediaさんで紹介されていたEvernote、早速使ってみました。

シゴトハッカーズ:Evernoteの基本的な使い方【チュートリアル編】 – ITmedia Biz.ID

自分の場合、仕事の進捗メモをとるのに使っています。いいめもの開発は今どうなっているのか、何をしようとしているのか、やったらどうなったのか、次は何をするつもりなのか….。



今までは、Pukiwikiを使って自分のサーバ上で書いていたのですが、これだと検索機能が貧弱なので、時系列でメモを書いたら、あるテーマのメモだけ引っ張ってくるというようなことが困難です。evernoteだと、メモごとにタグを貼れるので、テーマごとに引っ張ってくるのが格段に便利になりそうです。



残念ながらエディタとしての性能はあまり高くないので、秀丸エディタで書いたメモをぺたっと貼り付けて使っています。まあ、Pukiwikiの頃だって、秀丸エディタで書いて貼り付けていたのですから、ここはまあ許容できるラインでしょう。

で、本題。evernoteはWEBサイトが用意されているので、書いたメモはブラウザから見ることもできます。iPhoneはアプリケーションが用意されているので、もちろんiPhoneでも見ることができます。evernoteモバイルというのもあるみたいです。じゃあ携帯電話でも….

携帯電話からアクセス可能なEvernote Mobile(閲覧のみQuick Post可能)は、当方のau携帯では日本語が文字化けする。

([月] EVERNOTEに関するメモ)



まあそんな状況です。日本の携帯電話はMobilePhoneじゃないのです…(悲)



手元のW52CAも、日本語が化けちゃって使い物になりませんでした。

あと、DoCoMoF705iも、Cokkieが使えないせいか、そもそもログインができません。



SoftBankについては、通常の携帯ブラウザでもログインしてメモを見ることができました(812SH)。さすがiPhoneのキャリアですね。

AUの携帯電話ですが、PCサイトビューアーを使うと見られるみたいです。



cap31.JPG


やり方としては、PCサイトビューアーで

https://www.evernote.com/mobile/Login.action?targetUrl=%2Fmobile%2Findex.jsp

にアクセスします。(QRコード)



#公式には https://evernote.com/m/らしいですが、ドメイン違いの証明書付きhttpsなどを経由した末、結局上記にたどり着くみたいです。



で、通常通りにユーザー名とパスワードを入力すればOK.



DoCoMoはF705iしか持っていないので、フルブラウザを試すことができなかったのですが、たぶんフルブラウザというからにはCokkeiとUTF8くらい通してくれるだろうから、たぶん動くんじゃないでしょうか。

とりいそぎ手元の携帯で試したまとめでした。

テストメールを簡単に送るノウハウ

いいめものおかげなのかどうなのか分からないのですが、メールを受け取ってアレコレするというシステムのご依頼をわりといただいています。
で、そういうシステムを作るとき、試しにそのシステムにメールを送ってみる、という作業が欠かせません。
宛先を入れて、本文を適当に日付とか入れて、送信ボタンを押して…

こういうとき、Yahoo!メールとかgooメールのアカウントを一個持っておくと便利です。
一回メールを送信したあと、
goo_mail1.PNG
送信後の画面でリロードすれば、
goo_mail3.PNG
同じ内容のメールをもう一通送ることができます。
普通に使っていると、そりゃまずいだろ、と思うような機能なのですが、こういうときは便利です。

Movable Type 4に移行してリンク切れが起きる問題対策

いいめもも、このブログも、Movable Typeをつかっています。いいめものほう、以前はMovable Type 3だったのですが、サーバを移動させたのを機会に、Movable Type 4に乗り換えました。



で、乗り換えて気づいたこと。そこら中でリンク切れが起きている…

切れたリンクと本来のページを見てみると、どうやら、Movable Type 3のころ、URLに(アンダースコア)を使っていたページが、勝手に-(ハイフン)に置き換えられてしまった模様。

調べてみると、困っている人もたくさん。



アップデートは計画的に – Nizah Blog

MT4.1 ウェブページのファイル名に「
」アンダースコアは禁物 – 具現 | 蓮華のライフデザイニングブログ

コメントスパム対策さらにその後 – あれているBlog

bq69 collectibles – MT 4.1 upgrade: cont’d

みなさまそれぞれのやり方で対処されたみたいですが、納得いかないっすよねぇ?

自分の場合、必ずしもURLがpost_14.html という形になっているとは限らなくて、this_is_a_pen.htmlみたいなURLになっていることがあるので、単純なredirectではとばすのが困難です。サーバ移行だから、Movable Type3の頃のキャッシュに期待するわけにも行きません。



こういうときは、apacheのmod_rewriteの出番だと思われます。rewrite_ruleを使ってアンダースコアをハイフンに置き換えてリダイレクトしてあげれば、大手サイトからいただいたリンク価値を失うこともなく、問題を一発で解決できるはずです。今こそブログに書くときだ!


…と思ったのですけど、最近忙しかったので、実作業ははてなの皆様にアウトソースさせていただきました^^;



Apacheのmod_rewriteをつかって、URL中のアンダースコアをハイフンに置き換えるRewriteRuleを教えてください。 つまり、 http://example.com/blog/2008/05/post_14.html と.. – 人力検索はてな


期待通り適切な書き方を教えていただけたので、ここでブログ記事として公開する次第。

Movable Type 3から4に移行して、URLがアンダースコアからハイフンに変わってしまって困っている人は、httpd.confに以下のようにかけばリダイレクトさせることができます。

<Directory "hogehoge">
Options FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^([0-9]+)/([0-9]+)/([^_]+)_(.+)\.html?$ $1/$2/$3-$4.html [N,L,R]
</Directory>

<Directory “hogehoge”> の部分は、自分のブログが置いてあるディレクトリ(公開設定-公開パス-サイトパスに書いてある)です。

このルールにより、2007/10/post_123.htmlという具合にアンダースコアを含むURLにアクセスしてきた場合、Apacheサーバが「あ、そのファイルはこっちに移動しましたから」(301 Moved Permanently)と新しいURLを案内してくれるようになります。

2007/10/this_is_a_pen.htmlみたいなURLもちゃんと変換してくれます。

[linux]なんでもsvnで管理する2

今日時点で、もぎゃろぐのなかで一番たくさんブックマークのついている記事がこれ。

[linux]なんでもsvnで管理する – もぎゃろぐ


なんでもといいながら実際には実行ファイルを管理するだけで、それなのにたくさんの方に見ていただいて申し訳ないです。



というわけで、設定ファイルも管理できる目処が立ったので、「[linux]なんでもsvnで管理する2」をお送りします。

設定ファイルの場合、/etc/httpd/conf/httpd.conf も管理したいし、/etc/aliasesも管理したい。だからといって/etc以下を全部svnにつっこむのは、さすがにちょっと怖いでしょ?というのが難点でした。



悩んでも分からなかったので、masuidriveの人に聞いてみました。


自分: 以前ブログで、設定ファイルとかもsvnで管理してるよ~的なことをいっていたじゃないですか。
Yuichiro: はいはい、やってます
自分: どういう単位になっているのでしょう?
たとえば、/etcしたが丸ごとリポジトリに入っている?
Yuichiro: いえ、別においてsym linkしてます
必要なファイルだけ。
apacheとかpostfixとか。
ホスト固有の設定とかありますしね
自分: ふむふむ。じゃあ設定ファイルは全部/var/setting/とかどこかにまとめてあるわけですね。
Yuichiro: そです。

なるほど。

適当なディレクトリを用意して、書き換えたくなりそうなファイルを一式コピーしてきます。

[daisuke@snares ~/tmp/setting] $ ls -la httpd/
total 20
drwxr-xr-x  5 root root 4096 May 10 11:19 .
drwxr-xr-x  3 root root 4096 May 10 17:01 ..
drwxr-xr-x  3 root root 4096 May 10 16:30 conf
drwxr-xr-x  3 root root 4096 May 10 11:19 conf.d
[daisuke@snares ~/tmp/setting] $ ls -la httpd/conf
total 44
drwxr-xr-x  3 root root  4096 May 10 16:30 .
drwxr-xr-x  5 root root  4096 May 10 11:19 ..
-rw-r--r--  1 root root  5975 May 10 16:30 httpd.conf
-rw-r--r--  1 root root 12959 May 10 11:19 magic
[daisuke@snares ~/tmp/setting] $ ls -la httpd/conf.d/
total 52
drwxr-xr-x  3 root root  4096 May 10 11:19 .
drwxr-xr-x  5 root root  4096 May 10 11:19 ..
-rw-r--r--  1 root root   778 May 10 11:19 manual.conf
-rw-r--r--  1 root root  1827 May 10 11:19 perl.conf
-rw-r--r--  1 root root   560 May 10 11:19 php.conf
-rw-r--r--  1 root root  1438 May 10 11:19 python.conf
-rw-r--r--  1 root root 10919 May 10 11:19 ssl.conf
-rw-r--r--  1 root root   352 May 10 11:19 webalizer.conf
-rw-r--r--  1 root root   299 May 10 11:19 welcome.conf

インポートします。

[daisuke@snares ~/tmp/setting] $ svn import file:///var/svn/repos/httpd_conf/ -m "initial import"



#インポートしてしまえば、もはやこれらのファイルは用済みです。

/var/setting/を用意して、ここにファイルをチェックアウトしてきます。

[daisuke@snares /var/setting] $ sudo svn co file:///var/svn/repos/httpd_conf/ ./
[daisuke@snares /var/setting] $ ls /var/setting/
httpd

元のファイルから、このファイルにsymlinkします。

[daisuke@snares /etc/httpd] $ ls
conf           logs     run
conf.d         modules
[daisuke@snares /etc/httpd] $ sudo cp -r conf conf.20080510.1104
[daisuke@snares /etc/httpd] $ sudo cp -r conf.d conf.d.20080510.1104
[daisuke@snares /etc/httpd] $ ls
conf           conf.20080510.1104  conf.d.20080505       logs     run
conf.20080505  conf.d              conf.d.20080510.1107  modules
[daisuke@snares /etc/httpd] $ cd conf
[daisuke@snares /etc/httpd] $ ls
[daisuke@snares /etc/httpd/conf] $ ls -la
total 28
drwxr-xr-x  7 root root 4096 May 10 11:07 .
drwxr-xr-x  8 root root 4096 May 10 11:07 ..
-rw-r--r--  1 root root  5975 May 10 16:30 httpd.conf
-rw-r--r--  1 root root  5809 May 10 16:26 httpd.conf~
-rw-r--r--  1 root root 12959 May 10 11:19 magic
drwxr-xr-x  3 root root 4096 May  5 23:41 ssl.crl
drwxr-xr-x  3 root root 4096 May  5 23:41 ssl.crt
drwxr-xr-x  3 root root 4096 May  5 23:41 ssl.csr
drwxr-xr-x  3 root root 4096 May  5 23:41 ssl.key
drwxr-xr-x  3 root root 4096 May  5 23:41 ssl.prm
[daisuke@snares /etc/httpd/conf] $ sudo rm httpd.conf
[daisuke@snares /etc/httpd/conf] $ sudo ln -s /var/setting/httpd/conf/httpd.conf ./
[daisuke@snares /etc/httpd/conf] $ sudo ln -s /var/setting/httpd/conf/magic ./

同様にしてhttpd/conf.dの下もsymlinkに置き換えました。

[daisuke@snares /etc/httpd/conf] $ ls -la
total 28
drwxr-xr-x  7 root root 4096 May 10 11:07 .
drwxr-xr-x  8 root root 4096 May 10 11:07 ..
lrwxrwxrwx  1 root root   34 May 10 11:07 httpd.conf -> /var/setting/httpd/conf/http d.conf
lrwxrwxrwx  1 root root   29 May 10 11:07 magic -> /var/setting/httpd/conf/magic
drwxr-xr-x  3 root root 4096 May  5 23:41 ssl.crl
drwxr-xr-x  3 root root 4096 May  5 23:41 ssl.crt
drwxr-xr-x  3 root root 4096 May  5 23:41 ssl.csr
drwxr-xr-x  3 root root 4096 May  5 23:41 ssl.key
drwxr-xr-x  3 root root 4096 May  5 23:41 ssl.prm
[daisuke@snares /etc/httpd/conf] $ ls -la /etc/httpd/conf.d
total 8
drwxr-xr-x  2 root root 4096 May 10 11:08 .
drwxr-xr-x  8 root root 4096 May 10 11:07 ..
lrwxrwxrwx  1 root root   37 May 10 11:08 manual.conf -> /var/setting/httpd/conf.d/manual.conf
lrwxrwxrwx  1 root root   35 May 10 11:08 perl.conf -> /var/setting/httpd/conf.d/perl.conf
lrwxrwxrwx  1 root root   34 May 10 11:08 php.conf -> /var/setting/httpd/conf.d/php.conf
lrwxrwxrwx  1 root root   37 May 10 11:08 python.conf -> /var/setting/httpd/conf.d/python.conf
lrwxrwxrwx  1 root root   34 May 10 11:08 ssl.conf -> /var/setting/httpd/conf.d/ssl.conf
lrwxrwxrwx  1 root root   40 May 10 11:08 webalizer.conf -> /var/setting/httpd/conf.d/webalizer.conf
lrwxrwxrwx  1 root root   38 May 10 11:08 welcome.conf -> /var/setting/httpd/conf.d/welcome.conf

このあたりで、システムがちゃんと動いているか確認。

[daisuke@snares /etc/httpd/conf] $ sudo /etc/rc.d/init.d/httpd restart
Password:
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

ブラウザで各ページを見て回って…大丈夫そうです。

以後は、/etc下は書き換えずに、/var/setting/下のファイルを書き換えるようにします。



で、なにか致命的なミスをしたことに気づいたら、

[daisuke@snares /var/setting/httpd/conf] $ sudo rm httpd.conf
[daisuke@snares /var/setting/httpd/conf] $ sudo svn update
Restored 'httpd.conf'
At revision 4.

とすることで、ちゃんと動いていた頃のシステムに戻ることができます。

おまけ:この前後に起こった悲劇。


自分:  えらいことになった^^;
Yuichiro: ??
自分: /etcを丸ごとリポジトリに入れる実験をしていたのですが。
元に戻そうと思って、うっかり sudo rm -f /etc とやってしまって、
/etc/passwdがないから、sudo mv etc.20080505.1653 etc と戻すことができない。
Yuichiro: .......



さくらインターネットさんのサポートで、HDDを別サーバにつないでいただいて/etcを書き戻して復旧しました(有償)。

これ、マジでシャレにならないので、皆様ご注意くださいませ^^;

ブログのURLを変えた。

ちょっと思うところがあって、もぎゃろぐのURLが変わりました。

旧:http://mogya.com/blog/
新:http://blog.mogya.com/

こういうとき、旧URLでも記事にアクセスできるようにしておかないと、ソーシャルブックマークとか、ニュースサイトからはっていただいたリンクがもったいない。
こんなときには、Apacheの設定ファイルであるhttpd.confに

Redirect permanent /blog http://blog.mogya.com

というふうに書いて再起動してあげれば、Redirect機能が働くようになる。
以降、http://www.mogya.com/blog/2008/03/linuxsvn.html というふうにアクセスしてきたブラウザには、

HTTP/1.x 301 Moved Permanently

というヘッダとともに新しいURLが返されるようになる。
結果として、ブラウザはちゃんと新しいページを表示してくれるし、えらいソーシャルブックマークだと、自動的にURLをはりかえてくれたりするかもしれない。すくなくともGoogleは「あ、ページが移動したんだな」と認識してページランクを引き継いでくれるらしい。
技術的には当たり前の話なのですが、まあ誰かの役に立つかもしれないのでメモメモ。