最新 追記

meta's blog - The Power To Serve

筆者について

FreeBSDを通じてOSSにささかな貢献を。

OSS活動をご支援いただける方を募集しています


2009-10-14 trackerd

trackerd を無効化する (FreeBSD 7.2-RELEASE)

Tracker というファイル検索のインデックス化デーモンがやたらリソースを消費するので無効化します。

無効化自体は /usr/local/etc/xdg/autostart/trackerd.desktop を削除するだけでOKです。

一応バックアップを取っておくために、

# mkdir /usr/local/etc/xdg/autostart.disabled
# mv /usr/local/etc/xdg/autostart/trackerd.desktop /usr/local/etc/xdg/autostart.disabled/

としました。


2009-09-22 FreeBSD あれこれ

FreeBSD の環境設定 (ドットファイル)

FreeBSDをインストール後に自分の環境を作ったときのメモです。

~/.bashrc

set -o vi # シェルの操作を vi 互換モードにする
ulimit -c 0 # core ファイルを作らせない

# bash_completion を使用する
if [ -f /usr/local/etc/bash_completion ]; then
        . /usr/local/etc/bash_completion
fi

# 日本語環境変数セット ほか
export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8
export PAGER=/usr/local/bin/lv
export EDITOR=/usr/local/bin/vim

# いろいろなエイリアス
alias ..='cd ..'
alias Grep='grep'
alias ls='gls --color=auto'
alias ll='ls -lh'
alias mv='mv -i'
alias cp='cp -i'
alias rm='rm -i'
alias ports='cd /usr/ports'

~/.bash_logout

clear
vidcontrol -c

~/.screenrc

escape ^p^p
caption always '%{= wb} %-w%{=b kw}%n %t%{-}%+w %= %{=b wk}%c:%s'

2009-07-21 Mutt Sucks Less

muttrc の書き方 (Courier-IMAP PREAUTH編)

前回からだいぶ間が空いてしまいましたが、muttrc の書き方です。

自分のホームディレクトリにMaildirがある状態を想定して、メールボックスにIMAPでアクセスするための設定方法です。予めCourier-IMAPなどをインストールしておく必要があります。

PREAUTHとは予めSSHなどでログインして認証済みの状態でシェルからimapdを起動することで、IMAPプロトコルは標準入出力経由でやりとりすることになります。

$ /usr/local/bin/imapd ~/Maildir
* PREAUTH Ready.
INFO: LOGIN, user=meta, ip=[127.0.0.1], port=[0], protocol=IMAP

あらかじめ .mutt ディレクトリを作っておき、~/.mutt/muttrc に設定を記述します。

$ ( umask 077 && mkdir ~/.mutt )

muttc の中身はこんな感じ。

# 標準入出力経由でIMAPアクセスするための宣言
set tunnel="/usr/local/bin/imapd ~/Maildir"

# INBOX, Sent, Drafts などの場所を指定
set folder="imap://localhost/"
set spoolfile="imap://localhost/INBOX"
set record="+INBOX/Sent"
set postponed="+INBOX/Drafts"

# お約束の設定
set hostname="example.jp"
set send_charset="iso-2022-jp"
set envelope_from="yes"

# メールをスレッド順にソート
set sort="threads"

# SMTPサーバの設定
set smtp_url="smtps://smtp.example.jp:465/"

# IMAPとSMTPで別のユーザで認証する
account-hook imap://localhost/ 'set tunnel="/usr/local/bin/imapd ~/Maildir"'
account-hook smtps:/example.jp:465/ 'unset tunnel'

# ヘッダとメッセージのキャッシュ
set header_cache=~/.mutt/cache/headers/
set message_cachedir=~/.mutt/cache/bodies/

# IMAPの新着メールを G で受信
bind index G imap-fetch-mail
bind pager G imap-fetch-mail

以上がホームディレクトリ内のMaildirを直接IMAPで読むための設定です。 送信者(自分)の名前などはシステムのgecosフィールドの値が使われます。

明示的に設定するには、

set realname="Charlie Root"

と書いておけばOKです。


2009-07-17 SSHは万能?

OpenSSH による VPN

OpenSSH を使った簡易 VPN の構築 を参考にSSHでVPNを接続してみたときのメモ。サーバは 7.2-RELEASE、クライアントは 8-CURRENT。

目標状態はまあこんな感じ。

今回は tap デバイスを使ったトンネリングをするので、サーバ・クライアントの両方に tap デバイスが必要です。なければ、作る。ブリッジインターフェイスもあとで使うのでついでに作っておく。

# ifconfig tap0 create
# ifconfig bridge0 create

SSH-VPN 用の鍵をあらかじめ作っておき、その鍵でrootでログイン出来るようにしておきます。そして、接続。

client# ssh -oTunnel=ethernet -w0:0 -i /root/.ssh/ssh_vpn example.vmeta.jp

オプションの詳細は man 1 ssh でも見てください。うまく接続できたら、こんな風になってるはずです。

server# ifconfig tap0
tap0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:bd:b0:39:c3:00
Opened by PID 73615
client# ifconfig tap0
tap0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:bd:8f:37:80:00
Opened by PID 54562

サーバとクライアント間でVPNが確立できたので、VPN回線とサーバ側のネットワークをブリッジで接続します。

server# ifconfig bridge0 addm em0 addm tap0 up
server# ifconfig bridge0
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	ether 72:07:5d:cd:ba:b3
	id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
	maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
	root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
	member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
	        ifmaxaddr 0 port 4 priority 128 path cost 2000000
	member: em0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
	        ifmaxaddr 0 port 1 priority 128 path cost 200000

クライアント側も同様にして、

client# ifconfig bridge0 addm0 vr0 addm tap0 up
client# ifconfig bridge0
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	ether 36:d3:e2:27:4f:d2
	id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
	maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
	root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
	member: vr0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
	        ifmaxaddr 0 port 2 priority 128 path cost 200000
	member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
        ifmaxaddr 0 port 6 priority 128 path cost 2000000

と設定すると、図のようにネットワークがつながります。

接続後のインターフェイスの設定を自動で行うには、上のページの「実際に運用する」あたりに習って設定すればOKです。

手軽に構築できるSSH-VPNですが、常用するには向いてないと思います。


2009-07-16 iPhone OS 3.0

iPhone OS 3.0 の Wi-Fi 自動接続

iPhone OS 3.0 になって、Wi-FiアクセスポイントのWeb上でのログインを自動で行ってくれる機能が付いたのは既知のとおりだが、釈然としない点がある。ソフトバンクモバイルのページによると、「インターネットテザリング、Wi-Fiへ自動ログインの機能は、日本では対応しておりません。」というのだ。

インターネットテザリングに対応しないのはキャリアの回線の都合なので許可するか否かや料金の設定はキャリア(国)によって異なるというのは理解できるが、Wi-Fiへの自動ログイン機能が使えるか否かにどの国で使うかが関係あるのだろうか。

納得のいかない点がいくつかあったので、iPhone OS 3.0 の Wi-Fi 自動ログイン機能がどのような仕組みなのか調べてみることにした。

FreeBSDとOpengateで公衆無線LANのような認証を設けたネットワークを構築し、Wi-Fi自動ログインの挙動を調べる。 Opengateではファイヤウォールにipfwを使用しており、未認証の端末の通信には以下のルールが適用される。

60000 fwd 127.0.0.1 tcp from 192.168.16.0/24 to any dst-port 80

要するに未認証の端末の外向き80番へのTCPパケットはすべてOpengateサーバにフォワードされる。フォワードされたHTTPアクセスへはOpengateサーバ上のApacheが応答し、認証ページへリダイレクトする。Apacheのログを調べると、

192.168.16.251 - - [01/Jul/2009:18:17:42 +0900] "GET /library/test/success.html HTTP/1.0" 404 833 "-" "CaptiveNetworkSupport/1.0 wispr"
192.168.16.251 - - [01/Jul/2009:18:18:46 +0900] "GET /library/test/success.html HTTP/1.0" 404 833 "-" "CaptiveNetworkSupport/1.0 wispr"

というログが残っていた。Wi-Fiアクセスポイントに接続すると同時に、

へのアクセスを試み 404 Not Found や 301 などのリダイレクトHTTP応答ならWeb認証のあるアクセスポイントとみなしログイン画面を出すようだ。

Opengateによる認証でも自動ログイン機能のログイン画面が表示されて、ネットワーク設定の画面では「自動認証」のスイッチも現れたが、切断後再接続したときに自動でログインするには至らない。


2009-07-14 クラウドコンピューティング

iPhone のアドレス帳を OpenLDAP で管理する (OpenLDAP導入編)

なんでもオンラインで管理したい病なのでやっちゃいましょう。

サーバは基本的に FreeBSD です。

まず、OpenLDAP Server をインストールします。

# cd /usr/ports/openldap24-server && make install

次に /etc/rc.conf の編集。

# echo 'slapd_enable="YES"' >> /etc/rc.conf

/usr/local/etc/openldap/slapd.conf を編集。とりあえず書き換えるのは以下のところくらい。

suffix          "dc=thelefty,dc=org"
rootdn          "cn=Manager,dc=thelefty,dc=org"
rootpw          {SSHA}aKeZVecq39wD/EVQiSVzxRsuAVMqqOE8

rootpw は slappasswd で生成します。

$ slappasswd
New password:
Re-enter new password:
{SSHA}R2h4fgMhbwZk7hb1ARyBJvuJeLqVSUhC

そして、slapd を起動。

# /usr/local/etc/rc.d/slapd start
Starting slapd.

LDAPのツリーを作成します。以下のような内容のファイルを作成。

dn:dc=thelefty,dc=org
objectClass:organization
objectClass:dcObject
o: thelefty.org address book

dn: ou=AddressBook,dc=thelefty,dc=org
objectClass: organizationalUnit
ou: AddressBook

そして登録。

$ ldapadd -x -D cn=Manager,dc=thelefty,dc=org -W -f $INPUTFILE

登録されているか確認します。上のファイルの内容に似たものが出てくればOKです。

$ ldapsearch -x -W  -D cn=Manager,dc=thelefty,dc=org -b dc=thelefty,dc=org
Enter LDAP Password:

とりあえずこれでLDAPサーバ側の準備は完了。アクセス制限やSSLでの暗号化設定はまたの機会に。


2009-07-12 iPhone 3GS

iPhone 3GS 購入

買いました。

とりあえずエントリだけ更新。詳しくは後で書くかも。

絵日記プラグインのテスト

てすとん。

まあこんな感じか。

写真は某所の狭すぎる右折車線。

サムネイルが画像の表示サイズをHTMLで指定しただけになってるけどまあいいか。


2009-06-11 Windowsあれこれ

CapsLock を Ctrl に変更する方法

CapsLock を Ctrl と入れ替える方法はネット上ですぐ見つけられるけど、CapsLock を Ctrl に変更するだけというのはあんまり見かけませんね。

なんでだろう。CapsLock と Ctrl を入れ替える場合でも、本来の目的は A の左のキーが Ctrl キーとして機能するようにすることなのに。

そんなに多くの人が元の Ctrl の位置に変更してまで CapsLock の機能を残したいんだろうか。そうとは思えないけど。そんなわけで、Windows で CapsLock を Ctrl に変更する方法を Noppi さんのとこより。


2009-05-12 夏に向けて

net-snmp でハードディスクの温度を監視する

Linux では hddtemp や smartmontools でハードディスクの温度を取得することができますが、FreeBSD では smartmontools を使います。

ハードディスクが S.M.A.R.T. に対応していれば簡単です。

# portinstall smartmontools
# smartctl -a /dev/ad4 | grep ^194
194 Temperature_Celsius     0x0022   039   042   000    Old_age   Always       -       39 (0 20 0 0)

この情報を net-snmp で取得できるようにします。

まずは hddtemp の -n オプションに相当する、ハードディスク温度の数値のみが出力されるようにする必要があります。適当に awk でも使って 数値のみを切り出し、これをシェルスクリプトにし /root/tools/get_hddtemp.sh として保存します。

複数のハードディスクがある場合のために、引数でハードディスクのデバイスファイルを与えるようにしました。

#!/bin/sh
/usr/local/sbin/smartctl -a $1 | /usr/bin/awk '{if($1=="194") print $10}'

これを実行するとこのようになります。

# /root/tools/get_hddtemp.sh /dev/ad4
41

net-snmp でこの情報を取得できるようにするため /usr/local/etc/snmp/snmpd.conf に次の1行を追加し、restart します。

extend ad4temp /root/tools/get_hddtemp.sh /dev/ad4
# /usr/local/etc/rc.d/snmpd restart

snmpwalk で試しに取ってみます。

$ snmpwalk -v 1 -c community localhost NET-SNMP-EXTEND-MIB::nsExtendOutLine
NET-SNMP-EXTEND-MIB::nsExtendOutLine."ad4temp".1 = STRING: 41
NET-SNMP-EXTEND-MIB::nsExtendOutLine."echotest".1 = STRING: hello world

OID を取得するため、-On オプションをつけます。

$ snmpwalk -v 1 -c community localhost NET-SNMP-EXTEND-MIB::nsExtendOutLine -On
.1.3.6.1.4.1.8072.1.3.2.4.1.2.7.97.100.52.116.101.109.112.1 = STRING: 41
.1.3.6.1.4.1.8072.1.3.2.4.1.2.8.101.99.104.111.116.101.115.116.1 = STRING: hello world

あとはこれを、snmp の監視ツールに適当にセットしてやればグラフの描画なりなんなり好きにできます。

ad4temp


2009-05-07 FreeBSD 7.2-RELEASE Available

cvsup-mirror でミラーサーバの構築

FreeBSD 7.2-RELEASE 出ました。リリース直後は freebsd-update サーバも cvsup サーバも混み合ってアップデートできない状態でした。

研究室や自宅やその他で FreeBSD マシンが増えてきたので、ローカルに1台 cvsup のミラーを構築してみました。

# cd /usr/ports/net/cvsup-mirror
# make
===>  Vulnerability check disabled, database not found
===>  Extracting for cvsup-mirror-1.3_8
===>  Patching for cvsup-mirror-1.3_8
===>  Configuring for cvsup-mirror-1.3_8
I am going to ask you a few questions so that I can set up your
FreeBSD mirror configuration.  Every question has a [default]
answer.  To accept the default, just press ENTER.

At this point, I am just gathering information.  I will not touch
your system until you type "make install".

Master site for your updates [cvsup-master.freebsd.org]? cvsup2.jp.freebsd.org

How many hours between updates of your files [1]?

Now you must decide which sets of files you wish to make available
from your mirror site.  You can choose any combination, and you
can put each set anywhere you want to on your disks.  Although each
set is optional, we strongly encourage every mirror site to carry
at least the main source repository.

Do you wish to mirror the main source repository [y]?
Where would you like to put it [/home/ncvs]?
Do you wish to mirror the installed World Wide Web data [y]? n
Do you wish to mirror the GNATS bug tracking database [y]? n
Do you wish to mirror the mailing list archive [y]? n

Now, a few questions so that I can set up your CVSup server properly.

For security reasons, both the CVSup client and server should run
under their own unique user and group IDs.  These IDs should have no
special access privileges.  Normally, the user:group "cvsupin:cvsupin"
is used for the client and "cvsup:cvsup" is used for the server, but
you can choose other names if you wish.  At "make install" time, I
will create the users and groups, if they don't already exist.

Use unique user and group IDs for these.  Do not use "nobody",
"nonroot", or "nogroup".

Unique unprivileged user ID for running the client [cvsupin]?
Unique unprivileged group ID for running the client [cvsupin]?
Unique unprivileged user ID for running the server [cvsup]?
Unique unprivileged group ID for running the server [cvsup]?

The CVSup server does its logging via syslog.  At "make install"
time, I will set up the logging for you, if necessary.  I will use
the "!program" feature of syslog to keep your CVSup log messages
separate from the messages of your other daemons.

Syslog facility for the server log [daemon]?

You can control the load on your machine by limiting the number of
clients that the CVSup server will serve at once.  CVSup won't load
your network especially heavily, but it is more CPU and disk
intensive than most other file server software.

Maximum simultaneous client connections [8]?

Building the "config.sh" file ... Done.
Building the "cvsupd.access" file ... Done.
# make install

あとは /etc/rc.conf に

cvsupd_enable="YES"

とでも書いておきます。しばらく放っておくと cron で手元にミラーが構築されるので、

# /usr/local/etc/rc.d/cvsupd start

を実行して cvsupd を起動しておけばOKです。

cron で同期してくれるのを待つのではなく、すぐに同期を実行したい場合は

# /usr/local/etc/cvsup/update.sh

を実行します。シェルスクリプトの中を見るとわかりますが、フルパスで実行しないと動かないので注意が必要です。

これで構築したミラーサーバが cvsup.freebsd.vmeta.jp です。利用はご自由に。利用の際は supfile で compress を無効にするか、cvsup (csup) に -Z (大文字) オプションを付けて圧縮を無効にしてください。