2011年2月13日 (日)

玄箱 - Debain Linuxをインストール&アップデートする(2011年版)

長年使ってきた玄箱HGサーバーが不調になったので再インストールすることにしました。ついでにsqueezeも出たことだし、アップデートもかねて。

しかし、さすがにインストール&アップデートは5年前と勝手が違っていました。ので2011年時点でのsqueezeまでのアップデートのやり方をメモしておきます。

まずは初期化したHDを組み込んだ玄箱HGをLANに接続します。
arp -a などでIPアドレスを確認して、玄箱HGにtelnetで接続します。
手順は、以前書いたものと同じです。EMモードになっていなければ、次のコマンドでEMモードにして再ログインしてください。

# echo -n 'NGNG' > /dev/fl3
# reboot

ログイン後は、パーミッションを再構成して玄箱HG用 Debian Linuxのイメージを展開。これも以前の手順と同じ。イメージもdebian_2006_06_10_dist.tgzが最新なのでこれを適用します。

Debian にできたらsargeにアップデートする手順を参考にしてsargeにアップデートしてください。ただし、/etc/apt/sources.list には以下の記述のみを有効にしてください。他のリポジトリはコメントアウトします。

/etc/apt/sources.list
---
deb http://archive.debian.org/debian/ sarge contrib main non-free
---

sargeは過去のリポジトリなので現在はDebianのディストリビューションアーカイブに収録されています。

sargeにアップデートした後は、ここの手順を参考にしてアカウントの作成や諸々のコマンドをインストールしておきます。

その後、カーネル2.6化の手順に従ってカーネルを2.6にしておきます。この時genbako.comのHG用カーネルイメージは2.6.25.1、モジュールは2.6.25.1が最新になってますのでこれらをwgetでダウンロードして使います。

以降、Debianのバージョンは1つずつ段階的にアップデートしたほうが無難なので、時間がかかるけど辛抱強くapt-get dist-upgradeしていきましょう。各バージョンのリポジトリは以下のとおりです。

etch
deb http://archive.debian.org/debian/ etch contrib main non-free
lenny
deb ftp://ftp.dti.ad.jp/pub/Linux/debian lenny main contrib non-free
squeeze
deb ftp://ftp.dti.ad.jp/pub/Linux/debian squeeze main contrib non-free

アップグレード中の問い合わせには、よくわからなければ全てデフォルトで答えていけば問題ないです。特にhaltはデフォルトにすべきです。変更してしまうとhaltで正常に電源が落ちなくなるみたいです。

ちなみにlennyでのaptitudeのアップデートで、squeezeへのアップデートの際には aptitude safe-upgrade が使えます。

とりあえず問題なくsqueezeにアップグレードできました。
しばらくはこれで様子見ということで。

| | コメント (1) | トラックバック (0)

2010年9月14日 (火)

vimperator clock.jsの点滅をとめた

clock.jsというのがあるのを知った。
http://d.hatena.ne.jp/janus_wel/20081128/1227849365

macを使ってるので時計は画面右上に表示されてる。なので画面下を見ているときにvimperator下部のステータスバーに時計が表示されていると目の移動が少なくて便利。さっそくいれてみた。

デフォルトで [ "時刻" "日付" ] と表示される。これでいい。
しかし、時刻のコロンが点滅するたびに、firefox全体のフレームが数ピクセル脈動する。たぶん空白文字とコロンを秒単位で交換表示して点滅にみせかけているんだろうけど、macの半角空白とコロンの字幅が違うのでこうなっちゃうんじゃないだろうか。フレーム全体が動くというのも解せないが。

これはうざい。でも点滅を止めるオプションはない。なのでソースをいじることにした。

http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/clock.js

の318行目。

return hour + (now.getMilliseconds() < 400 ? ' ' : ':') + min;

return hour + ':' + min;

とした。これで点滅が止まった。

いい感じに使わせてもらってます。

| | コメント (0) | トラックバック (0)

2010年7月27日 (火)

CakePHPでSecurityコンポーネントを使ったらPOSTがはまった

限定された小規模な環境で使えるWebアプリをつくる必要が出来たので、CakePHPで開発中。Scaffoldをちょっと捻った感じの要件なのですぐリリースできた。こういう案件にはCakePHPは最適だと思う。

数日後に、一部の画面にログイン機能をつける要件が出てきた。ログイン画面をつくるようなことは求められてなく、BASIC認証でいいということだったのでSecurityコンポーネントでBASIC認証をつけた。これも数行加えるだけで完了。こんなかんじ。

var $components = array('Security');

function beforeFilter(){
        $this->Security->loginOptions = array('type' => 'basic');
        $this->Security->loginUsers = array('user' => 'password');
        $this->Security->requireLogin('admin_index', 'admin_view', 'admin_add', 'admin_edit','admin_delete');
}

BASIC認証は正常に機能しててOK。と思っていたら一部の画面でPOST処理をすると画面が真っ白になる現象が発生。調べてみるとcontrollerの該当actionに到達する前に真っ白になってるみたい。Webサーバーのアクセスログを調べるとPOSTメソッドの時だけ404 not foundになっている。同じURLでもGETの時は200が返ってる。なんのこっちゃ?と思った。

調べてみると、blackHoleに落ちてたみたいだ。確認のため以下のようにしてみた。

var $components = array('Security');

function beforeFilter(){
        $this->Security->loginOptions = array('type' => 'basic');
        $this->Security->loginUsers = array('user' => 'password');
        $this->Security->requireLogin('admin_index', 'admin_view', 'admin_add', 'admin_edit','admin_delete');
        $this->Security->blackHoleCallback = "securityError";
}

function securityError(){
        var_dump("Securty Component raize an error.");
}

これで該当アクションでPOSTしてみると、"Securty Component raize an error."と出力された。やっぱり落ちてるようだ。

どうすればいいかな?と思って調べたらてっく★ゆきろぐさんの記事を発見。まさにこれだった。たしかに該当アクションでは訳あって一部に自前のinput formを使っている。ワンタイムトークンチェックが利用できない状態なわけですね。

完全にform Helperで書き換えようかとも思ったけど、要求と労力のバランスからPOSTのトークンチェックをスルーする事に決めた。beforeFilter() を以下のように修正。

function beforeFilter(){
        $this->Security->loginOptions = array('type' => 'basic');
        $this->Security->loginUsers = array('user' => 'password');
        $this->Security->requireLogin('admin_index', 'admin_view', 'admin_add', 'admin_edit','admin_delete');
        $this->Security->blackHoleCallback = "securityError";

        $this->Security->validatePost = false;
}

とりあえずこれで正常にPOSTされるようになった。
もしかしたら Security::requireAuth() でセキュリティ対策をするアクションを設定して、今回はまったアクションを除外すればいいのかもしれないけど、時間がないのでやってない。あとで思い出したらやってみようと思います。

 

| | コメント (0) | トラックバック (0)

«emacs + flymake で Django