2007年2月アーカイブ

MT3になってから、だいぶSPAMコメント/トラックバック対策はやりやすくなった。
2.661のときは、2バイト文字を含まないコメントをはじいていたのだけれど、3にしてからそれをやめてしまったので、前と違ってトラックバックSPAMよりもコメントSPAMが気になるようになった。
そこで、CAPTCHA プラグインを入れてみることにした。
portsから p5-Authen-Captchaをインストールしてから、上記サイトからダウンロードしたzipを展開してmtのpluginsに入れる。
後は、blogの設定でpluginを有効にして、コメントform(とりあえず、Indivisual ArchiveとComment Listに入れた)にscriptタグを追加するだけ。
なんだけど、デフォルトのimagesディレクトリはcgi-binの下で、うちの設定だとそこにはcgiしか置けないので、パスを変更した。(この辺、blog毎の設定じゃなくて、systemの設定にして欲しいなあと思ったりする)

CAPTCHAを入力しないでコメントを投稿しようとした場合に表示されるエラーメッセージが、連続投稿に対するエラーメッセージなのが気になるところ。ソースを見たら、CommentThrottleFilterとして実装しているからかしらん。
るびまで以下の記事を見つけたので、試してみる。
プログラミングなどの知的作業の効率を上げるために、Emacs 上でスムーズに調べ事ができるようにするツール langhelp を紹介します。
ソースから入れるもの
  • el4r(記事の通りでOK)
  • langhelp(記事の通りでOK)
  • Ri for (X)Emacs(ダウンロード、展開して、ri-ruby.el を読めばinstall方法が書いてある)
  • bm.el(ダウンロードして、bm.elを読む)
    ※ 私の場合は、ri-ruby.el も bm.el も/usr/local/share/emacs/site-lispに入れて、ri-emacs.rb は /usr/local/lib/ruby/site_ruby/1.8に入れた。
portsから入れるもの
  • japanese/ruby-refe
  • japanese/w3m-img
  • www/emacs-w3m(なんかやたらと依存関係でいろいろ入った。ってゆーかgnome/gtk/glib周り全部新しくさせられた)
  • lang/ruby-mode.el
  • japanese/migemo-emacs21
.emacsに追加したのは以下(el4r-rctoolが追加した部分は書いてない)
; ruby-mode.el
(autoload 'ruby-mode   "ruby-mode" "Ruby Editing Mode" t)
; ri-ruby.el
(setq ri-ruby-script "/usr/local/lib/ruby/site_ruby/1.8/ri-emacs.rb")
(autoload 'ri "/usr/local/share/emacs/site-lisp/ri-ruby.el" nil t)
; bm.el
(require 'bm)
(global-set-key (kbd "<C-f2>") 'bm-toggle)
(global-set-key (kbd "<f2>")   'bm-next)
(global-set-key (kbd "<S-f2>") 'bm-previous)
; migemo
(require 'migemo)
(setq migemo-use-pattern-alist t)
(setq migemo-use-frequent-pattern-alist t)
あとは、記事に従って設定ファイルをコピーして、mklanghelp -allとかやったら使えるようになったっぽい。便利便利。
でも、emacsの起動時に以下のエラー?が出る
  ** reference to free variable ee-anchor-format
  ** assignment to free variable imenu--index-alist
のと、終了時にrubyのプロセスが残っている
Active processes exist; kill them and exit anyway? (yes or no)
Proc         Status   Buffer         Tty         Command
----         ------   ------         ---         -------
el4r         run      *el4r:process* (none)      ruby /usr/local/bin/el4r-instance
のが気になるなあ。
あと、migemoは上の設定を入れるだけで有効になったけど、bm.elのありがたみがまだわからない。
FreeBSD&PostgreSQLでRuby on RailsのTodoListTutorialを動かすときの話。
前準備として、portsから以下をインストール。(RubyとPostgreSQLはすでにインストールされているとして)
  • www/rubygem-rails
  • databases/ruby-postgres
MySQLではなくPostgreSQLを使う場合の変更点。
  • createdb todoをシェルから実行する。
  • tableの作成は、psql todo から以下を実行。(ファイルに保存して \i するのが良いと思うけど)
    -- Create the table
    CREATE TABLE todos (
      id SERIAL PRIMARY KEY,
      description TEXT NOT NULL ,
      done BOOLEAN DEFAULT FALSE NOT NULL
    );
    
    別に、VARCHAR(100)はそのままで良いし、TINYINTはSMALLINTにしても良かったんだけど、上のようにしてみた。(それにしても、チュートリアルでMySQL独自の型を使わなくても良いのになあと思ったけど、上の例もPostgreSQLべったりだな)
  • config/database.ymlの、mysqlのところをpostgresqlに置換。ユーザ名はtodoデータベースにアクセスできるユーザ名を。
モデルの名前がTodoで、テーブル名がtodosって言うのがピンと来なかったんだけど、複数形にすれば良いってこと?(チュートリアルじゃなくてリファレンス読めっちゅー話ではある)

面倒になって途中でやめたので、上のスキーマで最後まで行けるかはわかりません。明日にでも続きをやろう。
あ、あと試しにdescriptionに日本語を入れようとしたらエラーが出た。その辺も攻めなくてはなるまい。
昨日の続き。
まず、日本語については、DBがutf8であれば、環境変数PGCLIENTENCODINGを設定していなければ(あるいはutf8を設定すれば?)文字化けしないことがわかった。
rubyの$KCODEと環境変数PGCLIENTENCODINGが一致していれば良いのかな?と思ったけどそうでもないらしい。
で、チュートリアルを進めると、Editのリンクを作ったところから先に行けなくなった。Editのアクションをコントローラに追加するところがないせいだと思われ。
原文をあたろうと思ったら原文のURLにはアクセスできなかった。
で、generate scaffold Todo でscaffoldをgenerateしてみたら、app/controllers/todo_controller.rbではなくapp/controllers/todos_controller.rbができ、app/views/todoではなくapp/views/todosができた。
翻訳が悪いのか、原文が悪いのか判断つかないけど、このチュートリアルを選んだのは失敗だったようだ。
それでも、雰囲気はつかめたし、Railsの命名規約を学べばもうちょっとわかるようになるだろう。(でも、やっぱり初心者向けのチュートリアルじゃないよなあ)
プロバイダの都合で、IPアドレスが変わることに。
フレッツの場合のフレッツ網の先を、契約プロバイダの代わりに提携先のnttpcコミュニケーションズに移管するのだそうだ。
と、言うわけでIPアドレスの変更。
うちの場合以下のファイルを修正する必要があった。
/etc/hosts.allow
/etc/ipf.rules
/etc/ipnat.rules
/etc/ssh/sshd_config
/usr/local/etc/postfix/main.cf
/usr/local/etc/courier-imap/imapd-ssl
/usr/local/etc/courier-imap/imapd
/usr/local/etc/apache22/httpd.conf
/usr/local/etc/apache22/ssl.conf
/usr/local/etc/squid/squid.conf
/usr/local/etc/openvpn/openvpn.conf
/var/named/etc/namedb/named.conf
/var/named/etc/namedb/*.zone
で、デーモン系を片っ端から再起動。はまったのが、postfix reload だと新しいIPではlistenしてくれなくて、stop/startする必要があった。
ドメイン登録情報のDNSのところを直して作業終了。
セカンダリDNSの http://www.granitecanyon.com/ を修正しようとしたら、Internal Server Errorで駄目だった。
http://www.granitecanyon.com/ が不調なようなので、http://www.xname.org/index.php に変更してみることにした。
まずはxnameのサイトでアカウントを登録して、create zone でドメインを登録。
なんか指示が出る
Zone successfully modified on XName site.

Be sure to:

- add following lines to your zone file (with trailing dots) :

wizard-limit.net.	IN	NS	ns0.xname.org.
wizard-limit.net.	IN	NS	ns1.xname.org.

				

- modify your DNS configuration file as follow, to allow transfer to our name servers (if you run your primary name server with bind):

// 
// modify this sample configuration to fit your
// needs
//
zone "wizard-limit.net" {
	type master;
	file "wizard-limit.net";
	allow-transfer {
		193.218.105.149; 195.234.42.1; 
	};
};

- Delegate zone wizard-limit.net to your primary name server and our name servers.: ns0.xname.org - ns1.xname.org

As configuration is regularly reloaded on our name server, this new configuration will be active at next reload. You should receive an email informing you about this reload.
のでそれに従って以下を設定。
  • ゾーンのNSにxnameのサーバを登録。
  • allow-transfer に xnameのサーバを登録。
  • ドメイン情報のDNSサーバにxnameのサーバを登録。
これでいいのか相変わらずわからない・・・。DNSは鬼門だ~。

Fletsを使っていると、プロバイダとfletsのマルチセッションのpppoeを張りたくなる。
しかし、FreeBSDの/etc/rc.d/ppp スクリプトはマルチセッションには対応していないので、以下の方法を使うとマルチセッションにできる。(と思う、けど、なんと言ってもうちはOSの起動時にネットワーク系の初期化がうまくいかないので・・・。たぶん、jailに合わせてListenアドレスを限定しているせいだと思うんだけど)
前提条件は、以下。
  • プロバイダにtun0、fletsにtun1で繋ぐ。
  • ppp.confでのプロバイダのラベルはinternet、fletsはfletsとする。
  • プロバイダに繋ぐときのコントロールソケットは /var/tmp/internet
  • fletsに繋ぐときのコントロールソケットは /var/tmp/flets
で、手順。
  1. /etc/rc.d/ppp スクリプトの変更(プロバイダ用)
    *** /usr/src/etc/rc.d/ppp       Sat Nov  4 04:28:02 2006
    --- ppp Fri Feb 16 17:07:48 2007
    ***************
    *** 14,19 ****
    --- 14,20 ----
      command="/usr/sbin/${name}"
      start_precmd="ppp_precmd"
      start_postcmd="ppp_postcmd"
    + pidfile=/var/run/tun0.pid
    
      ppp_precmd()
      {
    ***************
    *** 36,41 ****
    --- 37,43 ----
            esac
    
            rc_flags="$rc_flags ${ppp_profile}"
    +       rm -f /var/tmp/internet
      }
    
      ppp_postcmd()
    
  2. /etc/rc.d/ppp-flets スクリプトの作成 /etc/rc.d/ppp を /etc/rc.d/ppp-flets としてコピーし、以下を変更する。
    *** ppp Fri Feb 16 17:07:48 2007
    --- ppp-flets   Fri Feb 16 17:10:43 2007
    ***************
    *** 9,20 ****
    
      . /etc/rc.subr
    
    ! name="ppp"
      rcvar=`set_rcvar`
    ! command="/usr/sbin/${name}"
      start_precmd="ppp_precmd"
      start_postcmd="ppp_postcmd"
    ! pidfile=/var/run/tun0.pid
    
      ppp_precmd()
      {
    --- 9,20 ----
    
      . /etc/rc.subr
    
    ! name="ppp_flets"
      rcvar=`set_rcvar`
    ! command="/usr/sbin/ppp"
      start_precmd="ppp_precmd"
      start_postcmd="ppp_postcmd"
    ! pidfile=/var/run/tun1.pid
    
      ppp_precmd()
      {
    ***************
    *** 36,43 ****
                    ;;
            esac
    
    !       rc_flags="$rc_flags ${ppp_profile}"
    !       rm -f /var/tmp/internet
      }
    
      ppp_postcmd()
    --- 36,43 ----
                    ;;
            esac
    
    !       rc_flags="$rc_flags ${ppp_profile_flets}"
    !       rm -f /var/tmp/flets
      }
    
      ppp_postcmd()
    
  3. /etc/rc.confにflets用の記述を追加(下2行)
    ppp_mode="ddial"
    ppp_nat="NO"
    ppp_enable="YES"
    ppp_profile="-unit0 internet"
    ppp_flets_enable="YES"
    ppp_profile_flets="-unit1 flets"
    
変更点を大雑把に説明すると、以下のような感じ。
  • デフォルトでは、commandのプロセスが起動しているかどうかを判定するので、代わりにpidファイルでチェックするように変更。
  • たまにpppの死に方によってコントロールソケットが残るので、rmするように変更。(本当は、rc.confの変数にする方がスマートだけど、スクリプトに直書き)

/etc/rc.subrのおかげで便利になってるんだろうけど、使い方がわかってないと恩恵にあずかれないね。本当はもっとスマートにできるのかも知れない。
OpenPNEのエントリにコメントがついたので、久しぶりに公式サイトを見てみたら、現在の最新安定版は2.6.3らしい。
うちにインストールされているのは2.0.5で、さすがにそれはないだろうと思ってバージョンアップすることにした。
あまり良く考えずにファイルを上書きして、ログインしようとしたらログインできない。
なんで~?と思ってアーカイブの中の setup/OpenPNE_Upgrade.html を見たら、SQLをちょこっと実行する必要があるらしい。
でも、良くみたら2.4からのバージョンアップしか対応していないらしい。
で、もう一度SourceForgeに行ったら2.4は入手できた。
2.4の中を見てみると、2.2からのアップグレードsqlは入ってる。
2.0から2.2は?
駄目元でアップグレードのsqlをそれぞれ実行してみるが、やっぱりログインできなかった。
諦めて、データベースをまっさらから作り直し、セットアップしなおし。
なんか、bizモジュールなんてのがあるので有効にしてみる。ちなみに、セットアップガイドにはDB関連にしかbizは出てこなくて、config.phpで別に有効にする必要があった。
docs.openpne.jpのwikiからwww.openpne.jpのtracに移行したみたいだけど、相変わらずドキュメントは激しく足りないみたいです。
でも、応援してますよ~。(だったら手伝え>俺)
FreeBSDの ports から入ってるソフトをたくさんアップデート。
なかではまったのが、squid。2.5系から2.6系にバージョンアップしたら、起動時に以下のエラーが出て立ち上がらなくなった。
2007/02/24 17:59:12| parseConfigFile: line 2254 unrecognized: 'httpd_accel_host virtual'
2007/02/24 17:59:12| parseConfigFile: line 2255 unrecognized: 'httpd_accel_port 80'
2007/02/24 17:59:12| parseConfigFile: line 2285 unrecognized: 'httpd_accel_with_proxy on'
2007/02/24 17:59:12| parseConfigFile: line 2306 unrecognized: 'httpd_accel_uses_host_header on'
ここにsquid2.5からのsquid.confの変更点が書いてあるので見てみたけど、いまいちピンとこない。
とりあえず、エラーが出た行をコメントアウトしたら、squidは立ち上がったけど当然のように透過モードで動かなくなってた。
で、squid.conf.defaultを見たところ、http_portにtransparentとか書けば良いらしいので、transparent用のIPにオプションを追加してみた。
http_port 192.168.0.1:3128 transparent
これで、なんとなく透過proxyとしては機能しているように見える。
httpd_accel_uses_host_headerの代わりにhttp_portのvhostオプションを使え、とかhttpd_accel_hostの代わりにhttp_portのdefaultsiteオプションとcache_peerの originserverオプションを使えとか、httpd_accel_portはcache_peerを使えとか書いてあるけど、その辺は触らず。
あと、httpd_accel_with_proxyに代わるのがなんだかわからなかったけど、良いんかいな。
NTT東日本では将来的なサービス向上を目的に、Bフレッツ契約回線に対してIPv6 (※)アドレスの割り当てを実施いたします。
だそうだ。
もともと、有料サービスであるフレッツ・ドットネットを契約している人には、それ用のv6アドレスがあったはずで、今回のはそれとは違う(フレッツ・ドットネットをやってる人は同じアドレスになるかもしれないけど)位置づけらしい。
今のところ割り当てたからと言って何が変わるわけでもなく、将来のサービスのためとのことだけど、気になるな~。
# もっとも、将来のサービスとやらも有料である可能性は高いと思うけど。
うちのFreeBSDも、そろそろv6を殺さずに生かしておいた方が良いのかな?
2007年2月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28      

このアーカイブについて

このページには、2007年2月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2007年1月です。

次のアーカイブは2007年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.1.1