ログアウトしても続くジョブ
今日は朝から技能教習と学科教習を1つずつ受けたのだが、学科教習が終わったら受付に来いと教習手帳に貼られていた。
どうしたもんかと行けば、昼からあいてるから技能教習入れんかとのこと。というわけで今日は技能教習2コマやってきた。
おそらく進み方は標準より遅めな気がするが、急ぐもんでもない。確実に運転できるようにならんとな。
これまで、Linuxですぐ終わらない作業はatを使ってやることが多かった。
$ echo "hoge" | at now
この方法はよい方法だと思うが、他にもやり方はあるらしい。
$ nohup hoge &
hohupってのはログアウトしても終了しないためのコマンドで、これをつけて起動して、バックグラウンドで実行して放置すればいい。
必要に応じてリダイレクトしておく必要があるが、それさえできるのならよいだろう。
では、実行したコマンドが予想外に長引きそうなときはどうすればよいのだろうか。
バックグラウンドで実行して、なおかつログアウトしても終了しないようにしなければならない。
フォアグラウンドで実行してたらCtrl+Zで止める。
[1]+ Stopped hogeこのように表示されるので、
$ bg 1
これでバックグラウンドで実行している状態になる。
これで、ログアウトしても終了しないようにすればいいが、そのためにはbashではdisownコマンドを使う。
ps axでプロセス番号を調べて、
$ disown 12345
このようにして完成。ログアウトしても大丈夫。
ただ、やはり時間がかかりそうなら最初からしかるべき措置をとるべきですね。
disownはbashにはあるけど、他のシェルにはないこともあるようで。
あと、Linuxの場合はログアウトするとジョブは終了するというようになっているけど、
他のUNIX系OSではそういうわけではないようで。詳しいところは知らないけど。
その場合はバックグラウンドにして放置するだけでOKです。
Author : hidemaro
Date : 2010/07/31(Sat) 23:22
Linux・Web | comments (0) | trackback (0)
AirStationのハブ機能を使わない
今日は無線LANのアクセスポイントをいろいろ設定していた。
久しぶりにこういう設定したなぁ。
ところで無線LANの親機ってルーターと一体となっていることが多いです。
やはり個人で使う場合、ルーターと兼ねることができれば便利だからでしょうね。
ただ、今日はそれが必要なく、単にアクセスポイントとして機能すれば足りた。
しかし、そういう設定の仕方がわからず困っていた。
BUFFALOの製品だったのでちょっとWebにアクセスして調べてみた。
エアステーション(AirStation)をブリッジで接続する方法
これを見ると、まず、DHCPを切ってAirStation自体のIPアドレスを適当に設定する。
そしてネットワークにLANポートの1番のところへ接続すればいいと。
LANポートの1番がスイッチングハブのカスケードポートとして機能しているのかな。
このLANポートの1番に接続するというのがポイントだったんでしょう。
これで単にアクセスポイントとして機能するようです。
ルーター機能を切ってないけどこれでいいらしい。ようわからん。
以前IO-DATAの製品を使ってたときには、
ルーターモードとAPモードがはっきり分けられたからわかりやすかったけど、
これはどうもわかりにくいな。一見しただけでは区別が付かんな。
Author : hidemaro
Date : 2010/07/10(Sat) 23:58
Linux・Web | comments (0) | trackback (0)
役に立たない学校のメールアドレス
学校からメールアドレスが付与されているもののめったに使わない。
今まで使ったことがあるのはDreamSpark関係だけ。(参考記事 : DreamSparkというバラマキ)
その理由には学内でしか利用できないと言うことがある。
だから、いちいちメールの送受信に学校の演習室にいかないといけない。
研究室でも使えるので5年生以上の学生にとっては使う余地はあるが。
しかしそれも設定を知らないと出来ない。設定は演習室にひっそり置いてあるがあまり気付かないだろうね。
そんなこともあって最初に設定した演習室でしか使えないので不便で使ってない学生が多いのが現実だろうね。
学外から使う方法がないわけではない。
僕は部のサーバーのSSHを使って、ポートフォワードして使うことができる。
必要に応じて家で使っている。
まぁしかしこういうのは珍しい例でしょうね。そもそも学内に使えるSSHサーバーがないというね。
専攻科生の連絡には専ら学校から付与されたメールアドレス宛の電子メールでやってるようだが、
それについて.forwardを設定したりして必ず受け取れるようにするよう指導している、と技術職員の人から聞いた。
演習室でSSHでサーバーに入れるから、これで.forwardを作ることは確かに出来る。
これで自分のメールアドレスに転送できるわけだ。Gmailでもどこでもいいだろう。
これが今のところ一番便利な使い方なのは疑うところではないだろう。
しかし、学校から付与されたものの信用というのはやはり高い。
こういうのを家から使えるといいことは確かでしょう。
セキュリティ的な問題だということを聞いた覚えがあるので、
POP3S・SMTPSとか導入してみるとかすればいいと思うんですがどうなんでしょうね。
あとWebメールとかもあると便利なんですけどね。
まぁ実際にはそうではないので時々ポートフォワードして使うことにします。
Author : hidemaro
Date : 2010/06/05(Sat) 23:56
Linux・Web | comments (0) | trackback (0)
Ajaxなメーラー、RoundCubeを入れる
Webからメールを見れるようにIlohamailを入れていたのだが、なんか古くさい。
まぁ実際結構古いらしいですが、あまり気にせず使ってた。
同じものを部でも使ってたのだが、どうも動作がおかしいと言うことで変えることにしたようで、
後輩が調べつつ、AtMailを入れていた。Ajaxを使っているPHPで動くメーラーだ。きれいですね。
ただ、日本語の問題などがあるようで、これよりはRoundCubeがおすすめだという記事を見て、僕はRoundCubeを入れてみた。
これもPHPで動くAjaxを取り入れたメーラーですね。
まず、ダウンロード。wgetでダウンロードして展開。
そして/var/www/にディレクトリごと動かしてApacheの設定を変えてaliasをはる。
それでデータベースを使うのでMySQLの設定、INSTALLのDATABASE SETUPに従ってデータベースを作りSQLを実行する。
これで準備はできたということでinstall/にアクセスするわけです。
ところがNOT OKとなってるところがたくさんある。
何がNOT OKだったのかというとまずはPHPのバージョン。5.2.0以上じゃないといかんらしい。
しかしyumしててもアップデートされてない。
こういうときは非公式のリポジトリですね。
というわけで CentOS で PHP5.2.5、MySQL5.0.54 を yum update (熟年広報) を見ながらリポジトリを追加。
そしてyum update、するとぞろぞろインストールしていく。
ところがlighttpdについてMissing Dependencyがどうちゃらこうちゃらと出て止まってしまった。
まぁこれは使ってないのでrpm –e lighttpdとして削除してしまった。
それを解決したら後はひたすらアップデートされた。PHP以外もいろいろ新しくなった。
それのせいでApacheが起動しなくなってしまった。なんのエラーもでないからようわからんかったがApacheのerror_logを見ると、
[error] Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] ((null):0)
というなんのことかよくわからないエラーが出てた。
どうもHTTPSについて複数のNameVirtualHostしてたのが悪かったらしいです。
NameVirtualHost *:443 <VirtualHost *:443> ServerName libserver.ddo.jp:443 RewriteEngine on RewriteRule ^(.*)$ https://hdmr.org$1 [L,R=301] </VirtualHost> <VirtualHost *:443> ServerName hdmr.org:443 </VirtualHost>
こういうのがだめだったらしいです。これを消せば直りました。
元々できないことだったみたいだがApache 2.2から厳格になったようで。
あと、PHPにDOMがないだとかMySQLがないだとか言われたが、このあたりはyumでphp-xmlとかphp-mysqlをインストールすれば解決。
それで設定にとりかかれるわけだが、言語はja_JPと書いても問題ないですね。ちゃんと対応してるみたいです。
IMAPサーバーやSMTPサーバーを定めたりする。
それでできたら、設定ファイルのソースコードが表示されるのでこれをコピペ。
# cat <<'EOF' >main.inc.php (ペースト) EOF
こんな風にしてコピペした。
これでテストして完成。
大変良く出来てますね。日本語も問題ないようで。
ただ、ここから差し出したメールはUTF-8になるみたいね。
日本では一般的なISO-2022-JPではないので注意。
Ilohamailのときはこのあたり設定できたのだが、国際化の流れかUTF-8のみのようです。
まぁ現在ではこれで問題となることは少ないと思いますけど、読めないメーラーもあるかも。
読む方はちゃんと日本語対応してますね。encodingの書いてない行儀悪いメールはもちろん無理ですがそれ以外は大丈夫ですね。
これなら便利そうだ。
Author : hidemaro
Date : 2010/05/18(Tue) 23:56
Linux・Web | comments (0) | trackback (0)
OAuthで使うTwitter API
にnお出かけ中にTwitterにPostしたいなと思ったとき、メールでPostできるものを作っていた。
PerlのNet::TwitterとMIME::Parserを使えば簡単に作れます。(参考記事 : メールに反応するTwitterのBotさん)
ところがここで使っているAPIへのBASIC認証でのログインは廃止されるらしい。
セキュリティの面ですぐれたOAuthを使いましょうということらしい。
OAuthというのはAPIへのアクセスを委譲する仕組みのこと。
あらかじめ認証を認証を済ませればアプリケーションからAPIが使えるようになる仕組み。
この仕組みのいいところはユーザー名・パスワードを教えなくてもAPIへのアクセスを委譲できること。
ユーザー名・パスワードを教えるとパスワードが変更されたりする恐れがあるが、OAuthならAPIでできることしかできない。
また、許可を取り消すことも可能だったりする。
そんなわけでセキュリティの面ではかなりすぐれていることがわかる。
具体的なOAuthの使用例だが、Twitpicという画像のアップロードとTwitterへのPostが同時にできるサービスがある。
現在、このサービスへはOAuthの認証によりログインを行う。
ログインをクリックするとTwitterのOAuthの認証ページに飛ばされて、TwitpicにAPIの利用を許可するとログインできる。
そしてアップロードするとAPIを用いて画像のアップロードについてPostする。
こんな風にWebアプリケーションでの利用は多い。
ただ、クライアントアプリケーションでも使用されている。
最近Tweenで導入されたのだが、ユーザー名・パスワードを入力したら自動で認証される。
もちろんパスワードは保存されず、認証されたときに発行されるトークンしか保存していない。
さてPerlでOAuthにより認証を行いTwitter APIを使うのならNet::Twitter::OAuthを使う。
Net::TwitterがいつのまにかOAuthに拡張されていたようで。
これをCPANで入れるわけだがとにかく長い。時間がかかる。
それでOAuthを使うためにはアプリケーションを登録しなければならない。
Twitterにユーザーさえあれば簡単にアプリケーションを登録できる。
クライアントアプリケーションにすることと、Default Access typeをRead&Writeにすること。
名前は自分の好きな名前にすればいい。これがクライアント名になる。
クライアント名になるってことはPostしたらこの名前が表示されるわけですね。
登録が完了するとConsumer keyとComsumer secretが発行される。これを使って認証を行う。
さてまずトークンを得るための認証だ。
#!/usr/bin/perl
use strict;
use warnings;
use Net::Twitter::OAuth;
my $client=Net::Twitter::OAuth->new(consumer_key=>'KEY',consumer_secret=>'SECRET');
print "認証URL : ",$client->get_authorization_url,"\n認証後コードを入力してください : ";
my $verifier=<STDIN>;
chomp $verifier;
my($access_token, $access_token_secret) = $client->request_access_token(verifier=>$verifier);
open(my $fh,'>','oauthtoken.pl');
print $fh "{'access_token'=>'$access_token','access_token_secret'=>'$access_token_secret'}";
close $fh;
Consumer keyとComsumer secretを与えてクライアントを初期化する。
そして認証を行うわけだが、認証用のページにアクセスして認証を行うことになる。
そのURLはget_authorization_urlメソッドで得られる。ここにアクセスしてもらって行えばよいだろう。
Webアプリケーションならここへリダイレクトしたりするんでしょうね。
完了したらコードが出てくるので打ち込んでもらって、request_access_tokenのときに渡す。
すればAccess tokenとAccess token secretが得られる。これを保存しておく。
これはほとんど使い回しですね。サンプルコードのパクリです。
次に実際に使うところだが、これはNet::Twitterとほとんど違いがない。
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Encode;
use MIME::Parser;
use Net::Twitter::OAuth;
use FindBin;
my $client=Net::Twitter::OAuth->new(consumer_key=>'KEY',consumer_secret=>'SECRET');
my $token=do "$FindBin::Bin/oauthtoken.pl";
$client->access_token($token->{'access_token'});
$client->access_token_secret($token->{'access_token_secret'});
my $parser=MIME::Parser->new;
$parser->output_dir('/tmp');
my $mail=$parser->parse(*STDIN);
my @lines=$mail->bodyhandle->as_lines;
my $body=decode('ISO-2022-JP',$lines[0]);
chomp $body;
$client->update("${body} *Remote*");
さっきと同様にクライアントを初期化して、access_token・access_token_secretメソッドでトークンを渡すだけ。
あとはNet::Twitterと同じように出来る。
単にNet::Twitterを使ってたときに比べるとアプリケーションの登録と認証という2つの手間が増えてしまう。
今まで、インストールさえすれば簡単に使えたNet::Twitterだけにかなりめんどくさく感じる。
確かにセキュリティに優れた仕組みだし、Webアプリケーションではぜひともやってほしいが、
クライアントで使うのにここまでいるのかはよくわからない。
まぁとても手間がかかるものでもないので、ぜひ挑戦してみてください。
Author : hidemaro
Date : 2010/05/08(Sat) 23:58
Linux・Web | comments (0) | trackback (0)
Subversionでチェックイン・チェックアウトして快適に!
先輩曰く、「卒論締め切り直前にはHDDクラッシュ・USBメモリ死亡に備えなければ死ぬ」という。
なるほど、これは納得。データをいろんな場所で保管するってのは意義深いことですよね。
そういう方法を模索せねばと思ったのだが、そういえばSubversionってあったよなと思って調べてみた。
予備知識無しに飛び込んだのがまずかった。というわけでこの記事はSubversionについての知識を付ける記事にしたい。
そもそもSubversionというのはyum曰く、「Modern Version Control System designed to replace CVS」らしい。
CVSを置き換えるべく設計された近代的なバージョン管理システムだよと書いてある。
バージョン管理システムってのはソースコードなどを管理するシステムで、変更の内容などが記録されている。
変更の内容が記録されてるって事は古いソースコードを取り出すこともできるってことだ。
Windowsの場合、TortoiseSVNっていう有名なソフトウエアがあって、これはエクスプローラと統合して操作出来ると。
きわめて簡単な操作でチェックイン(取り出し)・チェックアウト(書き込み)ができる。
この記事を参考にやってみた。
CentOS にsubversionサーバ設定メモ (ICHIBA BLOG)
まず、Subversionがないことには始まらん。というわけでyumでインストール。
けどCentOSには最初から入ってるからそのまま始められる。
さて、デーモンを起動するか、と思うが別にその必要は無い。svnってやつはそういうやつらしいです。
とりあえずディレクトリ関係の一連の設定をせねばならん。
# mkdir /var/svn # svnadmin create /var/svn/reps # chown -R apache:apache /var/svn/reps/ # groupadd svn # chown -R :svn /var/svn/ # chmod -R g+wr /var/svn/ # usermod -G svn (user)
これはなにをしているかというと、まずディレクトリを作り、リポジトリを作成する。
リポジトリっていうのはプログラムを書きためるところですね。
それの所有権をapache:apacheにしているが、これはWebDAVとの連携を意図したものですね。まぁやらんでもいい気はしたけど。
それで/var/svnの所有グループをsvnグループにする。これはsvnグループのユーザーが操作出来るようにするため。
というわけで触るユーザーをsvnグループに所属させて、とりあえず一連の設定は完了。
次に設定ファイルを編集、とはいえ大して変えることはないけど。
[general] anon-access = none auth-access = write
匿名ユーザーは拒否、認証されたユーザーは読み書きを許可するという内容。
パスワードについての設定もあるが、変更する必要は無い方法を取ろうと思った。
というのもここで設定できるパスワードって平文で保存されるんですよ。
それを回避するためにsshを介してアクセスするという方法を取ることとしました。
まぁ試してみればいいさ。
$ svn ls svn+ssh://hidemaro@hdmr.org/var/svn/reps
svn+ssh://とすればsshを介してアクセスすることとなる。これでsvnにアクセスしてlsできる。
まぁ今の時点ではなんにもないけどね。
さて、これをWindowsのTortoiseSVNから操作しようというわけですが、まぁやってみましょう。
さて、ここからDownloadします。下の方にLanguage Packもあるので必要に応じてダウンロードして下さい。
それでインストール。これでできたわけですが、さてどうやって使うか、ちょっと悩む。
まぁとりあえずアクセスしてみましょう。
適当なフォルダを選んで右クリックして、TortoiseSVNのリポジトリブラウザを起動する。
URLのところに svn+ssh://hidemaro@hdmr.org/var/svn/reps のように入力してみる。
すると hidemaro@hdmr.org ‘s password など聞いてくる。それで答えるのだが何度も何度も聞いてくる。
これは認証が失敗しているわけではなくて、なんか接続する度に毎度聞いてくるからのようだ。
というわけでパスワードをいちいち入力することはめんどくさい、というより使えたもんじゃない。
そこで公開鍵認証である。
公開鍵認証について記事を書いたことがあったかと思ったら意外なことになかった。
このTortoiseSVNは例によってPuTTYの仕組みを使っているのでPuTTYをインストールしておく。
PuTTY ごった煮版
まず鍵の用意。これはputtygenで行う。
鍵ペア生成としてランダムにマウスを動かし、適当にコメント・パスフレーズを設定し秘密鍵を保存する。
そして公開鍵のテキストをコピーする。そしてこれをホームディレクトリの .ssh/authorized_keys に貼り付ける。
ここでauthorized_keysのパーミッションは600でなければならないので注意。
こうすれば事前に秘密鍵をpagentで読み込んでおけば、PuTTY関係のソフトウエアではパスワードを入力することなくその登録したユーザーにはログインできる。
それはPuTTYだけではなく、それを応用したFilezillaとかTortoiseSVNでも言えること。
というわけで、これでいちいちパスワードを聞かれなくなって便利になったと。
こういう状態にした上で話を進めていく。
まず、プロジェクトフォルダを作成する。ここではhelloとしようか。
そこにtrunk・branches・tagsの3つのフォルダを作成する。
絶対に作らないといけないわけではないが、この3つのフォルダを用意するのはかなり有意義である。
使い方はいろいろあるけど、例えば、trunkには主流のソースコードを保管し、branches・tagsには分岐したソースコードを保管するという使い方をするわけです。
例えばプログラムに大改造を加える必要が出てきたとする。
それで主流のソースコードから分岐するとき、branches/hoge にコピーをする。
そしてその branches/hoge に切り替えて開発をカリカリ行う。そこで開発してても主流のtrunkのソースコードに影響は出ない。
使い方はいろいろだけど3つフォルダがある意義は大きいそうで。
次にリポジトリにディレクトリを用意する。リポジトリブラウザを起動してリポジトリにhelloというフォルダを作成する。
そして、ローカルのhelloフォルダを右クリックしてチェックアウトする。
リポジトリのURLは svn+ssh://hidemaro@hdmr.org/var/svn/reps/hello など、その作ったディレクトリにする。
これで準備完了。
trunkにhello.plとか作ってみる。それで適当に書いてみる。
それでtrunkでSVNコミットを選ぶ。すると変更されたファイルだとか何とか表示される。
管理下に入れるファイルにチェックを入れて、必要に応じコメントも入れてOKとする。するとチェックアウトされる。
日頃の変更に関わる動作はこれだけです。こりゃ便利。
こんな簡単な動作だけど、変更点などは全部記録してくれるわけです。
それとほかのところでの変更点を取り込むのはSVN更新でいける。するとチェックインされる。これも簡単やね。
ほんまに記録してるんかいというのは確かに疑問に思うところだが、いろいろ見れます。
ログを表示をしてみる、するとファイルの変更だとか一覧になって見える。
変更のところでダブルクリックしてみると、差分が見える。
そのときのファイルはと思ったら、右クリックでリビジョンを保存すれば保存できる。
あと、ちょっとファイルをいじって、間違って変更してしまったぜと思ったら元に戻すとしてみる。すると変更したファイルを戻せる。
などなど。
これでソースコードや他のデータも変更を記録したり出来ますね。
あとIDE統合なんてのもあるから、また今度試してみようと思う。
こりゃ便利だわ。あまりに便利なのでSubversionを近所に普及させていこうとおもう。
Author : hidemaro
Date : 2010/01/27(Wed) 23:58
Linux・Web | comments (0) | trackback (0)
連続稼働するLibserver
Libserverってどれぐらい連続稼働してるんだろ?
とふと気になって調べてみた。
どうやって調べるのかって話ですが、ちゃんとそういうコマンドがあるのです。
$ uptime 23:01:48 up 161 days, 5:38, 1 user, load average: 2.00, 2.01, 2.00
見りゃすぐにわかりますね、161日間連続稼働しているようです。
けっこう長いですね。停電とかもあったはずなのに。
まぁけど、最後にフタ開けたのいつかと言われると、確かにかなり昔のことかなとも思う。
Libserverは知っての通り、パソコンなんですね。
決してサーバー用に使うマシンではないのですよ。だから連続稼働を意図しているものではないのです。
だからよう動いてくれてるなってのが正直なところです。
もちろんこんなことができてるのはLinuxの堅牢さあってのことかなとは思うけど。
それにしてもWindowsってよく再起動要求されますよね。
NT系はまだましだと思うのですが、それでもドライバー類入れるとそのたびに再起動しろと言われる。
LinuxってKernelのアップデートぐらいしか再起動する必要ないですからね。
この違いは何なんだろうかというのはとても気になるところ。
もしそうでもなければ161日なんて数えられませんって。
Author : hidemaro
Date : 2010/01/11(Mon) 23:54
Linux・Web | comments (0) | trackback (0)
お年玉をWebで確かめられるようにした
昨日言ったとおり友人と初詣に行ってきました。
友人に誘われるままにおみくじを引けば凶が出てきたのは残念だったなと。
おみくじにはよい思い出がないから引きたくなかったのだが。
毎年、1月末には年賀状お年玉くじの抽選が行われます。
そしてそれを見ながら毎年あたってないかなとチェックしますね。
いまだに四等以外のあたりをみたことがないのですが、チェックはしたくなるもの。
というわけでこれをコンピュータにやらせようと思って去年はPerlでスクリプトを作りました。
ただ、それではなぁと思ったのでJavaScriptを駆使してWeb上で作ってみた。
もちろんまだ抽選結果を入力してないから使えませんけどね。
ただテストのために下五桁aaaaaをC組限定賞・下2桁bbを四等にセットしてありますので試せますね。
使い方ですが、まずくじ番号を打ち込みます。打ち込んで6桁入ったら自動で判定されると。
それで結果を確認したらEnterすると。すると消去されて戻る。
サクサク入力してチェックできるはず。しかも入力した結果は下に残るので後で確認もしやすい。
C組限定賞においてはC組でなければならない。けどC組であるかはくじ番号からわからない。
というわけでC組であるかはボタンが特別に出てきて選べばよいと。そうなっています。
ここからが本題でJavaScriptでこれを実現するのはどうするねんと。それが問題だ。
まず、フォームの内容が変更されたらそれを感知したいと。それができれば6桁になったときがわかりますから。
というわけでonchange属性を設定してみた。ところがこれがうまくいかない。
なぜなんだろうと思ったら、onchange属性は変更されてフォーカスが外れたときに発生するからだそうだ。
あー、なるほど。入力途中には感知できんのか。こりゃどうしたもんか。
というわけでonkeyup属性に設定してみた。keyupされたらなんしか変更されてるんじゃないのってことです。
それを感知してテキストボックスのvalueのlengthを確かめながらやればよいですねということです。
あとはEnterを感知してEnterされたらボタンが押されたのと同じことにしようと。これは厄介だった。
というのもMozillaとそれ以外で動作が違うから。
onkeyupにしてもそうなのですが、onkeypressではキー情報などを取り出すことが出来ます。
Mozillaの動作はそれらの情報は引数として渡される。それ以外ではwindow.eventから取り出すようになっている。
というあたりの違いがあるので厄介だったのです。
まずonkeypress=”getenter(event)”と指定します。eventってのがポイントらしい。
そしてこんな関数を用意すればよいと。
function getenter(e){
if(e==null) e=window.event;
if(e.keyCode==13) enter();
}
Mozillaではeにしかるべきオブジェクトが渡されるが、そうでなければないのでwindow.eventをセットして済ませると。
そんな感じですね。
あとEnterするとPostしてページが遷移してしまう。それを防ぐためにはform要素でaction=””とすればいいらしい。
完成していろいろ試していたらオートコンプリート欄が邪魔なのでこれを消したいなと思った。
その要素でautocomplete="off"とすればよいようだ。DTDに載ってないから独自拡張だろうなぁ。
こんな感じで完成したわけです。
みなさんもご利用下さい。
Twitterに報告する機能も付けておいたから、なかなかおもしろいんじゃないかなと。
TwitterにPostするPHPのことはまた気が向いたら書きましょう。
Author : hidemaro
Date : 2010/01/04(Mon) 22:00
Linux・Web | comments (0) | trackback (0)
オレオレじゃないSSL証明書を作りにいった
ふと、SSLのオレオレ証明書どうにかならんかなと思った。
そういえば無料のSSL証明書発行サービスあったよね。と思って調べたらあった。
StartSSL
無料以外でもやってるのだが、無料でもLevel1というもっとも低級な認証はうけられるのが特徴ではある。
高級な証明書も作っていて、EV証明書まで発行できるようだ。たったの149.9USDだと言っているが結構値が張る。
一応Mozilla関係ではCA証明書が内蔵されているようなのでそれなりに使いやすそうではある。
LibserverはSSLでアクセスする人僕ぐらいだからいらん気もしたが、別のところであるからなぁ。
というわけで登録しよう。
詳しい解説があるのでそれを見ながらやった。
無料 SSL 証明書 StartSSL を使う (futuremix)
さて、まずは個人証明書が作られるので、これをブラウザに取り込む。これをログインに使うようだ。
このあたりはSSHの公開鍵認証に似てますよね。
次にドメインの認証を行います。トップレベルドメインの認証しかできないようです。
だからドメインの所有者以外は証明書を打ち出せないと言うことだ。おー、ドメイン取っててよかった。
そういえばSSLってドメインで認証を行うことが多いらしいですね。有料でも安いやつはそうらしい。
かの有名なVeriSignは団体が登記されてるかとか、電話で団体に意志を確認したりするそうで、この厳格さがウリらしい。
まぁそれはそうと、そんなものは商売するとかでなければいらないと言えるので、ドメインで認証すればよろしい。
Whoisの登録してあるメールアドレスとかにメールを投げてもらうという方法で認証してもらった。
Validations Wizard で Domain Name Validation を選んでやってもらえばいい。
これで証明書に署名してもらえるようになった。というわけで鍵とCSRを作った。(参考記事 : SSLの鍵を打ち出す単純な方法)
# /etc/pki/tls/misc/CA -newreq
これで鍵を作ってnewreq.pemの内容をコピペして渡せばいい。
ただStartSSLでは鍵の長さは2048bit以上であることを要求しているのでopenssl.cnfを変更しなければならなかった。
[ req ] default_bits = 2048 default_md = sha1
まぁこれぐらいの設定はしておけよということです。なぜか元が1024bitだったので怒られた。
用意したらCertificate WizardでSSL/TLS Web Serber Certificateを選んでやる。
向こうで鍵も作ってもらうという方法はあるが、それはなぁと思ったのでそこはSkipして、CSRとしてnewreq.pemの中身をコピペして渡した。
できたらその証明書の内容をコピペして、newcert.pemとでもして保存しておこうか。
実は僕はここでドジをして、鍵を消してしまったのよ。あーあ。
というわけでやりなおそうと思ったのだが、同じドメインでは30日内には署名し直せないよと言われたので、前の証明書を失効させてもらうことに。
Tool BoxのRevocation Requestを選んで、そのCertificateでその証明書を選ぶ。
そしてReasonだが、これはまじめに書かんといかんかったようだ。
自動だと思っていい加減に書いたら「ちゃんと理由教えて」って英語でメールが届いた。
自動じゃなくて手動なんだね。というわけで「リクエストした後で鍵を消してしまったから」ということを送ったらすぐに失効させてくれた。
本当に申し訳ない。それで改めてやり直しました。
さて、設定だが、ちょっと注意しなければならないことがある。
この与えられた証明書は中間CAにより認証されている。すなわちその構図を示すと、
StartComのルートCA ―署名→ Class1用の中間CA ―署名→ 発行された証明書
というわけでこれをちゃんと設定しないといけない。特に中間CAは重要。
Tool BoxのStartCom CA Certificatesから StartCom Root CA(PEM encoded) と Class 1 Intermediate Server CA をダウンロードしておく。
それぞれ同じディレクトリに ca.pem , sub.class1.server.ca.pem としておく。
その上でApacheの設定。まぁこれはStartSSLのページにもありますけど。
SSLCertificateFile /etc/pki/tls/certs/newcert.pem SSLCertificateKeyFile /etc/pki/tls/certs/newkey2.pem SSLCertificateChainFile /etc/pki/tls/certs/sub.class1.server.ca.pem SSLCACertificateFile /etc/pki/tls/certs/ca.pem
newkey2.pemは以前の記事で書いた、パスワードを解除した鍵ファイルね。
中間CA証明書の設定を忘れてはならないと言うことです。
Apacheについては書いてあるんだが、DovecotとPostfixについてはないので少し悩んだ。
まずDovecotの設定はこんな感じ。
ssl_cert_file = /etc/pki/tls/certs/newcert.pem ssl_key_file = /etc/pki/tls/certs/newkey2.pem ssl_ca_file = /etc/pki/tls/certs/sub.class1.server.ca.pem
CA証明書のところに中間CA証明書を入れればうまいこといった。
Postfixも実のところ同様で、
smtpd_tls_cert_file = /etc/pki/tls/certs/newcert.pem smtpd_tls_key_file = /etc/pki/tls/certs/newkey2.pem smtpd_tls_CA_file = /etc/pki/tls/certs/sub.class1.server.ca.pem
これで使えるようになりました。
というわけでテストページを作ってみたから、試しにアクセスしてみてください。
https://hdmr.org/ssl.php
多分何も言われずにアクセス出来たはず。オレオレ証明書の場合はこうもいかない。
PHPで $_SERVER["HTTPS"]=='on' であるか確かめているのでHTTPSでしかアクセス出来ないはず。
見ますと、証明書のOとOUが書き換えられてる。Class1はさすがにこのあたりの扱いは悪い。
まぁ確かに団体の実在性確認とかはしてないわけですから、このあたりは当然と言えば当然ですが。
有効期間は1年間のようですね。毎年打ち直す必要があるらしい。これも普通ですね。
Apacheにcertwatchっていうユーティリティがあるので一ヶ月前になったら知らせてくれますから、そのときには作り直せばいいわけですね。
HTTPSを使っておもしろいことができたらいいですけど、何ができるだろうか。
それなりに使えるSSL証明書がこうやって作れることがわかっただけでよしとするか。
Author : hidemaro
Date : 2009/12/28(Mon) 13:18
Linux・Web | comments (0) | trackback (0)
Blogエディタで書くBlog
この記事はxfy Blog Editorで書いてから直接アップロードしています。
こういうことができるんですね。ただ簡単ではなくてアプリケーションからBlogを操作出来るようにしないといけない。
これが厄介で、Blognplusに対応したものを自分で作らないといかんと。
具体的なアプリケーションからの操作方法ですが、XML-RPCという方法で行います。
これはXMLのHTTPによるやりとりにより操作する方法です。これを用いてMovable Typeは操作出来るようです。
というわけでMovable Typeの操作の一部をBlognplusでできるようにすればいいわけです。
具体的な内容は Movable Type で使える XML-RPC API の内容です。いろいろありますね。
blogger APIがあって、それで足りないのをmetaWeblog APIで拡張して、それでも足りないのをMT独自拡張としてあるわけだ。
このうちblogger APIのnew Post・editPostについてはそれを拡張したmetaWeblog APIのnewPost・editPostを専ら使うだろうから特に実装しなくてかまわないと判断した。実際いらない。まぁ実装しても知れてるけどね。
あとMT独自拡張のうちsupportedTextFiltersについてはよくわからなかったからパス、getTrackbackPingsは使う予定もなかったのでパスした。
それと公開・非公開に関わる機能はBlognplusはちょっと違うからうまく実現できていないかも知れない。
さて、具体的にはどうやって実現したかだが、pearのXML_RPCを使った。すでに入っていたが、pearにあるからインストールは簡単。
# pear install XML_RPC
インストールできたら、これを使ったコードを書くことになる。マニュアルを見ながらやる。
XML_RPC Manual
<?php
require_once 'XML/RPC.php';
require_once 'XML/RPC/Server.php';
function newPost($params){
$blogid =$params->getParam(0)->scalarval();
//中略
$content =$params->getParam(3);
$title =$content->structmem('title')->scalarval();
//エラー時
global $XML_RPC_erruser;
return new XML_RPC_Response(0, $XML_RPC_erruser+3,"許可されていないファイルタイプです。");
//中略
return new XML_RPC_Response(new XML_RPC_Value($error[2],'string'));
}
//略
$methods = array(
'metaWeblog.newPost' => array( 'function' => 'newPost' ),
//略
);
$server = new XML_RPC_Server($methods);
?>基本的にはこんな感じ。リクエストを受ける関数を用意して、XML-RPCのメソッドを関数に関連づけると。
で、引数ですが何番目か指定してgetParamで取り出します。なければnullが来るようだ。
これはXML_RPC_Valueクラスなので、ここからint・boolean・stringなど取り出すにはscalarvalで取り出さないといけない。
さらにstructだった場合はstructmemでメンバであるXML_RPC_Valueを取り出して、これについてscalarvalするなりしないといけない。
arrayの場合はarraymemで要素を取り出せますね。まぁこんな具合です。
結果はXML_RPC_Responseクラスのインスタンスを返すことになります。失敗したときは引数は0,エラーコード,エラーの説明とする。
成功したときは結果のXML_RPC_Valueを返す。ここでは記事IDの文字列を返していますね。
XML_RPC_Valueのインスタンスは元となるオブジェクトとその型(int,boolean,stringなど)を引数に与えて作る。stringのときは省略できる。
ただstructとarrayはXML_RPC_Valueの連想配列を渡して作らないと行けない。なのでかなりめんどくさい。
return new XML_RPC_Response(new XML_RPC_Value(array( 'userid'=>new XML_RPC_Value($original[1]['user_id']), //中略 ),'struct'));
こういう風にして作ります。
できたファイルを置いておきます。
rpcapi.php.bz2 (bzip2,3.0KB)
実際の使い方ですが、MT互換で作ったのでMTで使えるBlogエディタなら大概いけると思います。
Movable Typeは有名だからねぇ。使えるエディタもすごく多いですからいいですね。
xfy Blog Editorでいけたのは言うまでもないですが、Windows Live Writerでもいけましたし。
ただ、MTはPerl CGIですが、これはPHPなので拡張子が違うのでどうしても全く合わせることが出来ない。
けどどちらも手動でエンドポイントを入れられるから大丈夫ですね。このphpファイルを指定すればいい。
あとスキンを読み込んでBlogエディタに反映させようとしてもうまくいかないかな。MTじゃないからしょうがないね。
それとMTではカテゴリー複数選択可ですが、Blognplusは1つしか選べません。あと選択しなかったら標準のカテゴリーに自動で設定される。
時々Firefoxで無茶してフリーズしてしまうこととかあるけど、別のソフトなのでそれだけでかなり安心ですね。
あと適宜セーブできるのでこれもいいですね。今までは時々Terapadにコピペしてたけど、これはCtrl+Sだけで終わり。
HTMLもソフトに任せておけば適当に実体参照に変えてくれたりするから安心ですね。
あと画像とかファイルのアップロードもここからできますから。画像を貼ったりとかローカルのファイルにリンクを張ると処理してくれるはず。
というわけでこれからは積極的に利用していきたいと思います。
Author : hidemaro
Date : 2009/12/26(Sat) 20:25
Linux・Web | comments (0) | trackback (0)