筆者について
FreeBSDを通じてOSSにささかな貢献を。
- 日本xrdpユーザ会発起人
- xrdp developer
- FreeBSD developer
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-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 の監視ツールに適当にセットしてやればグラフの描画なりなんなり好きにできます。
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 (大文字) オプションを付けて圧縮を無効にしてください。