アーカイブ

‘FreeBSD’ タグのついている投稿

[コマンド] rlwrap

2011 年 11 月 16 日 コメントはありません

GNU Rreadlineライブラリは入力の際の便利な機能を提供するライブラリ。これを使用したプログラムでは、入力の際にシェルのようなEmacsキーバインドでの移動や、履歴の呼び出し、カッコの対応の表示などの機能が使えるようになる。

rlwrapはreadlineを使用していないプログラムでもreadlineが使えるように入力をラップするコマンド。
http://utopia.knoware.nl/~hlub/rlwrap/
から入手できる。FreeBSDではportsにあった。

特にLispのREPLではカッコの対応がすぐわかってうれしい。

[FreeBSD] portsを検索

2010 年 5 月 29 日 コメントはありません

ports から目的の port を探すには ports-mgmt/psearch が便利。

% psearch [options] PATTERN [PATTERN...]

とすることで、正規表現 PATTERN で ports 内を検索し、結果をリストアップしてくれる。

デフォルトでは port の名前(name)と短縮説明(short description)を検索するが、-s オプションを付けることで、詳細な説明(long description)内も検索するようになる。

-c オプションでカテゴリを指定。-n オプションでバージョンも含む、その port の正式名称を出力する。

カテゴリー: コンピュータ タグ: , ,

[FreeBSD] ldap.confの場所

2010 年 5 月 21 日 コメントはありません

ports から pam_ldap や nss_ldap を入れた場合、openldap-client が自動で入る。

pam_ldap 用の ldap.conf.dist が/usr/local/etc にできるので、これを /usr/local/etc/ldap.conf にコピーして設定したが、ldapsearch などに反映されず、嵌った。

man ldap.conf によると、openldap-client の見る ldap.conf の場所は /usr/local/etc/openldap/ldap.conf だった。

要注意。

カテゴリー: コンピュータ タグ: , ,

[FreeBSD][UFS] 定期的にSnapshotを作成

2010 年 2 月 5 日 コメントはありません

UFSにはSnapshot機能があることは知っていたが、いつか試そうと思って放っていた。

今日rm *~しようとしてrm *してしまい激しく後悔。

定期的にSnapshotを作成するように設定することにした。

『FreeBSD UFS Snapshot Management Environmentを使って定期的にSnapshotを作成する』 – mteramotoの日記
によるとFreeBSD UFS Snapshot Management Environmentというのがあって、設定したスケジュールに従ってSnapshotをrotateしてくれるらしい。

sysutils/freebsd-snapshotというportsになっているのでこれをインストール。

/etc/crontabに

# /etc/crontab
0	*	*	*	*	root	/usr/local/sbin/periodic-snapshot hourly
0	0	*	*	*	root	/usr/local/sbin/periodic-snapshot daily
0	0	*	*	0	root	/usr/local/sbin/periodic-snapshot weekly

と記述してperiodic-snapshotを呼び出す時間を指定。

スケジュールは/etc/periodic.confに記述する。

インストール時には作られないので新規に作成。

napshot_enable="YES"
snapshot_schedule="/usr,/usr/pub:2:10:0"

のように書く。

/usrとか/usr/pubとかはマウントポイント。

snapshot_scheduleの書式は

<schedule>
::= <entry>*
<entry>
::= <fs> (", <fs>)* : <spec>
<fs>
::= /^.*$/
<spec>
::= <gen_weekly> : <gen_daily> : <gen_hourly> <gen_weekly>
::= <generation>
<gen_daily>
::= <generation> <gen_hourly>
::= <generation> ("@ <hour> (", <hour>)*)? <generation>
::= /^[0-9]+$/
<hour>
::= /^(0?[0-9]|1[0-9]|2[0-3])$/

のようになっていて、週ごと、日ごと、時間ごとに保持するSnapshotの個数を指定する。

はじめは2:2:2とかにしてみたが、毎時のSnapshotの作成に5分ほどかかる。

わりと負荷が高いので今のところ2:10:0としている。

空き容量を気にしながらしばらくは様子見。

参考
『FreeBSD UFS Snapshot Management Environmentを使って定期的にSnapshotを作成する』 – mteramotoの日記
『periodic-snapshot — run periodic UFS/ZFS backup snapshot maintenance task』

カテゴリー: コンピュータ タグ: , , ,

GN-1200TW2

2010 年 1 月 16 日 コメントはありません

『FreeBSD 8.0-RELEASEでvgeドライバに不具合』
に書いた問題で、パッチがHEADにコミットされたようだがStableに落ちてこない。

Currentにすれば良かったが、GENERICを捨てる気力が無く、チキンにも別NICを用意することにした。

PLANEXのGN-1200TW2を1200円ほどで購入。

チップはRealTechのRTL8269SCで、FreeBSDではre0として認識された。

re0:  port 0xa000-0xa0ff mem 0xf9011000-0xf90110ff irq 18 at device 4.0 on pci1
re0: Chip rev. 0x10000000
re0: MAC rev. 0x00000000
miibus0:  on re0
rgephy0:  PHY 1 on miibus0
rgephy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
re0: Ethernet address: 00:22:cf:22:ea:cf
re0: [FILTER]

ジャンボフレーム対応だが7000byteまで。GbE-PCI2(VT6122)は9000byteまでだった。

Netperfでスループットを計測してみる。
環境は、

ホスト1
OS: FreeBSD 8.0-RELEASE-p2
NIC: GN-1200TW2
CPU: Athlon64 3000+

ホスト2
OS: WindowsXP
NIC: nForce2 オンチップ
CPU: Celeron 2.0GHz

間にCG-SW05GTPLXBを挟んでいる。

結果
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec

  8192  32768  32768    10.00     440.97

421Mbps、つまり53MB/s出ており、GbE-PCI2と比べて遜色ない。

ベンチマーク中はinterruptで激しくCPU時間を消費していたので、速いマシンで計測すればもっと良い結果が出るかも。

FreeBSD 8.0-RELEASE

2009 年 12 月 11 日 コメントはありません

自宅サーバのOSをFreeBSD 7.2-RELEASSEからFreeBSD 8.0-RELEASEにアップグレード。

久々のメジャーバージョンアップ。

『FreeBSD 7.1-RELEASE』
の通り、freebsd-updateでアップデートできた。

カテゴリー: コンピュータ タグ: ,

Sendmail で OP25B 回避

2009 年 10 月 28 日 コメントはありません

自宅に置いてあるウェブサーバ(FreeBSD)に wordpress を入れて blog サービスを運営している。

メールサーバは間に合っているのでこのサーバでメールを受け取る必要はないが、blog にコメントが付いたときにメールで通知するサービスなどは欲しいからメールが送れるようにはしたい。

しかし、プロバイダの OP25B によってこのサーバ自身が直接メールを送ることはできない。

そこで、OP25B の影響がない別のメールサーバにメールを中継してもらうことにする。

MTA では Postfix が設定もわかりやすくてよいと思うが、FreeBSD のベースシステムに組み込まれている MTA はSendmail で、メールを1箇所に中継以来するだけでメールサーバを入れ替えるのも仰々しいので今回は Sendmail で設定してみることにした。

sendmail.cfを作る

Sendmail システムの振る舞いは /etc/mail/sendmail.cf に記述するが、m4 マクロによってこれを生成する仕組みが用意されているのでそれを使うことにする。

/etc/mail に移動すると freebsd.mc というファイルがあってこれがデフォルトの sendmail.cf を生成する m4 マクロ。

/etc/mail には Makefile があって make コマンドで sendmail.cf が作れるようになっている。

とりあえず

#su
#make

としてみる。

初回の make では

cp freebsd.mc your.host.name.submit.mc
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 your.host.name.mc > your.host.name.cf

のように出て、ホスト名.mc というファイルができるので以後これを編集、make して ホスト名.cf を得る。

今回のように特定のメールサーバに中継を依頼するにはSMART_HOSTマクロを設定すればいいよう。

nullclientではメールアドレスの @ 以下が中継を依頼したホスト名に書き換わってしまう。

your.host.name.mc に以下を追記。

dnl your.host.name.mc
define(`SMART_HOST', `relay.smtp.server')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
FEATURE(`authinfo', `hash /etc/mail/relay-auth')
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
define(`confAUTH_MECHANISMS', 'EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

m4ではdnl以下はコメント。

行末にdnlをつけているのは、マクロ置換した後 define 文が空行として残らないようにするためで、必要というわけではない。

define(`SMART_HOST’, `relay.smtp.server’)dnl
SMART_HOSTの設定。relay.smtp.server は中継を依頼するサーバ。
cf ファイルでは DSrelay.smtp.server という行になる。

define(`ESMTP_MAILER_ARGS’, `TCP $h 587′)dnl
メールを送るプログラムの引数を指定。
TCPはsendmailに内蔵されているSMTPでメールを送るプログラム。
$hは相手のホスト名で通常はメールアドレスの@以下だけどSMART_HOSTを設定した場合は中継依頼するサーバ。
SMTPの25番で送ったのではOP25Bに引っかかってしまうので配送ポートで送っている。

FEATURE(`authinfo’, `hash /etc/mail/relay-auth’)
SMTP-Authによる認証を使用するのでその設定を呼び出す。
/etc/mail/relay-auth は後で作成。

TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)
define(`confAUTH_MECHANISMS’, ‘EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl
使用する認証システムを指定。

あとは make してできた your.host.name.cf を

# cp your.host.name.cf sendmail.cf
# /etc/rc.d/sendmail restart

として sendmail.cf にコピーして、sendmail をリスタートすれば設定が反映される。

ただ、ベースシステムの sendmail をそのまま使っているので SMTP-Auth のモジュールが組み込まれていないと Warning が出る。sendmail を SASL が使えるように設定してリビルドする必要がある。

Sendmail をリビルド

とりあえず SASL が使えるように ports から security/cyrus-sasl2 を入れる。

コンフィグはデフォルトのままでよかった。

次に /etc/make.conf に以下を追記。

# /etc/make.conf
SENDMAIL_CFLAGS=-I/usr/local/include -DSASL=2
SENDMAIL_LDFLAGS=-L/usr/local/lib
SENDMAIL_LDADD=-lsasl2

sendmail をリビルド。ソースを展開してない場合は csup などで取得、展開しておくこと。

# cd /usr/src/lib/libsmutil
# make obj && make depend && make
# cd /usr/src/lib/libsm
# make obj && make depend && make
# cd /usr/src/usr.sbin/sendmail
# make obj && make depend && make && make install

再び sendmail をリスタートすると Warning は消えた。

認証データベースを作る

先ほど sendmail.cf に設定した /etc/mail/relay-auth を作る。

/etc/mail/relay-auth に

AuthInfo:your.host.name "U:name" "I:name@your.host.name" "P:password"

のように記述する。I には認証IDを書く。普通はPOPの認証IDと同じなのでドメインまで入れる必要があるかは要確認(eonet.ne.jp では@の代わりに%)。

その後、

# cd /etc/mail
# makemap hash relay-auth < relay-auth
# chmod 600 relay-auth.db relay-auth

とすると、relay-auth.db ができて認証データベースの作成は完了。パスワードが書かれたファイルなのでパーミッションを 600 にしておく。

中継するサーバを設定

プロバイダが中継を受け入れてくれる場合は以上でメールが送信できるようになるが、そうでない場合は中継を受け入れるサーバを用意しておく必要がある。

自分の環境の場合、こちらも FreeBSD だが MTA は Postfix なので Postfix の場合について書く。

とりあえず ports から security/cyrus-sasl2 を入れる。コンフィグはそのままでよかった。

Postfix を SASL 付きでビルドしていない場合にはコンフィグで SASL を有効にしてリビルドしておく。

/usr/local/etc/postfix/main.cf を修正。

smtpd_sasl_auth_enable=yes
smtpd_sasl_security_options=noanonymous

smtpd_recipient_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_unauth_destination

smtpd_recipient_restrictions はSMTPで送信先のアドレスを受け取ったときに許可するかどうかの設定なので、要は中継を許可するかどうかの設定。

おそらく元からある設定なので、 permit_sasl_authenticated を追記した形になる。

あとは、

# saslpasswd2 -c -u mydomainname myaccount
# postfix reload

として relay-auth で設定したのと同じパスワードを設定してやればよい。

参考
近頃のsendmail事情

Syntax error: Bad fd number

2009 年 10 月 13 日 コメントはありません

shでcsh系のリダイレクト記法>&を用いたときに出るエラー。

crontabの記述でやりがちなので注意。

crontabに記述したコマンドは標準ではshで実行される。

FreeBSDではcrontabの先頭に

SHELL=/bin/csh

と書くことでcshの記法が使える。

カテゴリー: コンピュータ タグ: , , , ,

sshdの待ち受けポートを変更する

2009 年 9 月 10 日 コメントはありません

デフォルトのポート番号ではどこからか辞書攻撃されるのでsshdの待ち受けポート番号を変更する。

FreeBSDではsshdの設定は /etc/ssh/sshd_config に記述する。

Port 22

となっているところを、任意のポート番号に変更すればよい。

その後、

# /etc/rc.d/sshd restart

として、sshdを再起動する。

カテゴリー: コンピュータ タグ: ,

FTPクライアントでファイル一覧が表示されない

2009 年 8 月 1 日 コメントはありません

管理しているサーバに「FFFTPからアクセスすると中身が見えない」と報告があった。

ログをもらうとログイン、ファイル一覧の取得は「226 Transfer complete.」となっていて正常に完了した様子。

ブラウザからFTPプロトコルで接続してみるとファイル名が時刻や年と一緒になった「2007 hoge」のような名前になっている。

取得してきたファイル一覧をうまく解釈できていないよう。

そこで、正常にアクセスできる同環境のftpdとファイル一覧の形式を比べてみた。
問題になっているftpdは

-rw-r--r--   1 root   wheel          93  3 22 20:27 filename

という形式で、正常なftpdは

-rw-r--r--  1 root    wheel          93 Oct 23  2006 filename

という形式になっている。

もっと大胆に崩れているかと思ったけど、月の表示形式が名称の短縮名になっているか否かぐらいしか違いがない。

FTPのLISTコマンドはサーバ側の/bin/ls -lの出力に依存する。

サーバ側でls -lとすると月が数字で表示された。

これを短縮名で表示させるにはどうしたらいいだろうか。

ちょうどIRCで話していた経験者に聞くとローケルによって変わると教えてくれた。

そのときは一般ユーザからsuしたのでLC_ALL=ja_JP.eucJPになっていた。

# unsetenv LC_ALL && ls -l

としてみると短縮名で表示されるようになった。

と、そこで

# /etc/rc.d/inetd restart

としたことを思い出した。

つまり、環境変数は親プロセスから子プロセスに引き継がれるので、LC_ALLが一般ユーザ→ルート→inetd→ftpdと引き継がれて/bin/ls -lの出力をクライアントの対応していない形式にしてしまったということだった。

# (unsetenv LC_ALL; /etc/rc.d/inetd restart)

とすると問題は解決した。

カテゴリー: コンピュータ タグ: , , , , ,