計算機関係TIPS

計算機関係, 特にFreeBSDにおけるシステム, ネットワーク設定等の忘備録
FreeBSD友の会: http://www.jp.freebsd.org/

/boot関係

FreeBSD 5系列以降では, デバイスドライバーのローダブルモジュール化が進んだこともあ り, /boot/loader.conf あたりをいじる場合が ある。

loader.conf

NIC
ドライバーやサウンドドライバーはチップ毎にkoがあるので, 起動時に有効にしておくためには,
snd_cmi_load="YES"
のように記述しておく。詳細は /boot/defaults/loader.conf 参照
ATAPI
CD,DVDドライブのデフォルトはPIOになっているので, DMAモードを有効にするには,
hw.ata.atapi_dma="1"
としておく。 ”> sysctl hw.ata.atapi_dma”で確認可 能。

device.hints
最近はデフォルトではACPI有効, APM無効になっているが, 環境によってはまだACPIは不安定なところがある。(マザーボードの機種依存が大きい?)
起動時にACPIを無効にするには/boot/device.hints をいじって,
hint.acpi.0.disabled="1"
としてやる。逆にAPMを有効にするには
hint.apm.0.disabled="0"
とする。( /etc/rc.conf apm_enable="YES" も必要?)




/etc関係

rc.conf
最近のFreeBSD 5-Stable でサーバー関係のパッケージをportsなどでインストールした際の注意事項として, /usr/local/etc/rc.d/ に置かれる起動 スクリプトが /etc/rc.conf を 参照するため, rc.conf内にapache_enable="YES" 等という記述をしておかないと自動起動しないようになってい る。

usbd.conf
usbd
/etc/usbd.conf に従ってUSBデバイスのattachを行うが, マウスに関してマウスホイールが考慮されていない。そこで,
device "Mouse"
セクションのところを
attach "/usr/sbin/moused -z 4 -p /dev/${DEVNAME} -I /var/run/moused.${DEVNAME}.pid ; /usr/sbin/vidcontrol -m on"
のように”-z 4”を書き加える。

/etc/rc.d/
5-Stable
では /etc/rc.d/ にシステム関係の起動スクリプトが置かれている。例えばinetdを再起動したい場合には
“#/etc/rc.d/inetd restart”
(設定ファイルの再読込のみの場合は, ”inetd reload”
としてやればよい。



IOポート

/dev/io
UNIX
系のOSはネットワークサーバに用いられることが多いが, FreeBSDでは/dev/ioをオープンしてやればoutb, inb関数によって指定したIOアドレスにアクセスすることが可能。当然root権限が必要だが, リアルタイム性の要求が厳しくなければMS-DOSライクにハードウェアの制御が可能である。デバドラを開発する手間が掛けられない場合は便利ではある。
/dev/io
を開くのは以下のような感じ。

if((iofl = open("/dev/io", 000)) < 0) {
  printf("Can't open I/O port!\n");
  exit(1);
}


注意事 項: outb, inb 関数は4系列以前では<machine/cpufunc.h>をインクルードすれば良かったが,5系列以降は< unistd.h>もインクルードする。結構気付きにくいので注意。


その他経験したトラブル

NFSのマウント
5系列のあるときから, <sys/mount.h>に定義されているstatfs構造体などが64bit対応のためか大幅に書き換えられている。
NFSをマウントするツールなどで, 配列をstaticに定義しているコードだとマウントポイント情報取得の際にオーバーフローを起こして死んでしまうことがあるので注意。




static route 設定

クラスCネットワーク 192.168.1.0/24 において, 192.168.1.250のマシンが192.168.10.0/24 のネットワークへのGatewayとなっていることを, static route で設定するには,
192.168.1.0/24 のdefault router となっているホストの
/etc/rc.conf に

router_enable="YES"

router_flags="-q"

route_hoge="-net 192.168.10.0/24 192.168.1.250"

static_routes="hoge"

というように記述する。(hogeは適当な識別名)


Postfix

postfixはsendmailと互換性のあるMTA。sendmailと 違って設定ファイルが理解可能なので, 最近はもっぱらコイツを導入している。

FreeBSDの場合, portsでインストールしてやると
/etc/mail/mailer.confを書き換えて, sendmailとして起動時に立ち上がるようにできる。その場合,

sendmail_enable="YES"
sendmail_flags="-bd"
sendmail_pidfile="/var/spool/postfix/pid/master.pid"
sendmail_procname="/usr/local/libexec/postfix/master"
sendmail_outbound_enable="NO"
sendmail_submit_enable="NO"
sendmail_msp_queue_enable="NO"

という記述を /etc/rc.conf にしておく。
postfix自体の設定ファイルは/usr/local/etc/postfix/main.cf
デフォルトを編集, 追加するとしたら
mynetworks = 127.0.0.0/8, 192.168.0.0/16
allow_mail_to_commands = alias,forward,include
mailbox_size_limit = 204800000
message_size_limit = 20480000
といったくらいか?
virtual domainでメールを受け取る場合は,
/usr/local/etc/postfix/virtualに必要事項を記載しておく。
また, インストールやアップデートしたときにはnewaliasesを 忘れずに。
postfix自体の再起動(再読込)は
"# postfix restart"("# postfix reload")
デーモンを走らせたままアップデートした場合は一旦 stopで終了させてから, startしてやらないとログにエラーを書き続けるかもしれない。


SMTP-AUTH

りなZaurusのようなモバイル機器に特化したネットワーク接続業 者だとメールサーバの提供をしていないケースがある。こういう場合, 母艦となるホストのMTAを使ってメール送信したくなる。しかし, 無条件でメールの中継をするとSPAMの踏み台にされるし,かといってモバイル機器はDHCPでIPを取得するケースが多いのでIP決め打ちもできない。
そこで, SMTP-AUTH というのでID&パスワード認証を受けたもののみ中継するようにする。SMTPにpostfixを用いている場合は Cyrus SASL を用いる。
portsでインストールするには,
security/cyrus-sasl または security/cyrus-sasl2
をインストールしておいて, postfixをSASLオプションを選んでコンパイル&インストールしてやる。
saslの設定としては, まず /etc/rc.conf に

saslauthd_enable="YES"
saslauthd_flags="-a pam"

を追加してやる。また, SMTP-AUTHの認証で用いるID&パスワードを設定

# saslpasswd  ユーザID

これは, pamで管理されているものと一致していなくても良いようだ。
(-c オプションで新規ユーザ作成)

postfix側の設定としては, /usr/local/etc/postfix/main.cf に

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_recipient_restrictions = permit_sasl_authenticated,reject_unauth_destination
html_directory = no

といったのを追加して完了。


AMAVIS

最近のコンピュータウイルスやワームにはe-mailを介して拡散する機能があるので(クライアントでの対応も必 要だとして)メールサーバーの段階でウイルス対策をしておきたい。防御とともに加害者になるリスクを減らすという側面もある。もっとも最近は自前でMTA をもつウィルスが多いようだが。
メールサーバでMTAとウィルススキャナーの橋渡しを行うツールとして AMaViS なるものがある。ウィルススキャナーは別に用意する必要がある。

ウイルススキャナーはLEBRAドメインでは商用でFreeBSDに対応している Sophos を用いている。エンタープライズ向けとしては定評があるようで, 国内の代理店を通して導入している。ただ, これ自体にアップデート機能が無いので, スキャンエンジンに関しては毎月手で入れ替え。幸いウイルス定義ファイルはバージョン毎に固定名でアーカイブがあるので, cronで1日数回fetchして展開して更新としている。

acc.phys.cstドメインのメールサーバは OpenBSD なのでオー プンソースなウイルススキャナーである Clam Antivirus(security/clamav) を運用している。

portsではperlスクリプトとし て動くsecurity/amavis-perlとデーモンとして動くsecurity/amavisd やsecurity/amavisd-newがある。
MTAとしてpostfixを使う場合
"# make install MTA=postfix
WITHOUT_AMAVIS_VSCAN=yes"
としてインストール。
WITHOUT_AMAVIS_VSCANは, 自動的にsecurity/vscanをインストールさせないためのフラグ。

amavis-perlではvscanというユーザを使用するので, インストールが終了したらこれができているかを確認し, postfixの設定ファイル(/usr/local/etc/postfix/)の
master.cfに

vscan  unix    -    n    n    -    10    pipe    user=vscan
argv=/usr/local/sbin/amavis ${sender} ${recipient}
localhost:10025 inet n -    n    -    -    smtpd
-o content_filter=

main.cfに

content_filter = vscan:

を加えて, postfixを再起動してやれば良い。


APOP, IMAP4

メールサーバからクライアントにメールをダウンロードす るのにPOP3というプロトコルを用いることが多く, そのためたいていのメールサーバにはPOPサーバが導入されている。

しかしながら, 外部のネットワークからPOP3でサーバに接続するのは平文パスワードの問題でセキュリティ的には好ましくない。メールの管理をサーバ側で行いたいときは IMAP4で, POP3と同様にクライアント側にダウンロードする形で管理する場合は認証が暗号化されたAPOPを用いる。

共に UW IMAP(mail/imap-uw) を導入してやれば使用できる。inetdから起動することになるので, /etc/inetd.conf に

pop3    stream    tcp    nowait    root    /usr/local/libexec/ipop3d    ipop3d

pop3s    stream    tcp    nowait    root    /usr/local/libexec/ipop3d    ipop3d

imap    stream    tcp    nowait    root    /usr/local/libexec/imapd    imapd

imaps    stream    tcp    nowait    root    /usr/local/libexec/imapd    imapd
などと追加する。sはSSL/TLS対応のサービ ス。

特にAPOP対応にするためには, /etc/cram-md5.pwd というファイルを作り,

ユーザ名1     パスワード
ユーザ名2     パスワード

という感じでAPOP認証に使用するユーザ名とパスワー ドを列挙して,
"# chmod 400
/etc/cram-md5.pwd " としてパーミッションを変えてやればAPOPが有効となる。/var/log/maillogで確認。

外部からimapd, ipop3dへの接続を許可するには, /etc/hosts.allow を編集して tcp wrapped の設定をする必要があるので注意。


fetchmail

複数のメールサーバにアカウントを持っている場合は, Fetchmail でクライアントに集めて一括管理
することができる。POP3だけでなくAPOPやIMAPにも対応し, portsでは mail/fetchmail である。

ユーザの $HOME に .fetchmailrc がパーミッション400で存在しなければならない。
設定の記法は以下のような感じ

defaults
# defaultでは既読も含めて全てダウンロード
fetchall

# メールサーバ毎の設定
poll mail.domain.xx
# 使用するプロトコルはPOP3(or apop, imap)
protocol pop3

# そのサーバでのユーザ名&パスワード
username hogehoge
password xxxxxxxx

# MIMEのデコードを有効にしてしまうとメーラーによっては
# 2重デコードしてしまい, Subjectの日本語が化ける
no mimedecode

poll mail2.domain2.yy
....





FreeBSDではLinuxバイナリをエミュレータで動かすことが可能。
IA-32の場合, どちらの実行ファイルもELF-32bitなので実行速度の低下は僅か)

Adobe Acrobat Reader のようなバイナリ配布のアプリを動か すのに必要


kernel設定:

/etc/rc.conf において linux_enable="YES" としておく
または, kldstat で確認して linux.ko がロードされていなければ
root
で “# kldload linux.ko” してやる。


Linuxライブラリの導入:

実際のLinuxバイナリを動作させるにはLinux環境のライブラリが必要。
ports/emulators/linux_base*
に よって導入が可能
Red Hat7~9, Debian(a quality), Gentoo, SuSE 9
の環境が用意されている。(インストールは排他的)

Base system
以外に

x11/linux-XFree86-libs
devel/linux-glib2
x11-fonts/linux-fontconfig
x11-toolkits/linux-gtk2
x11-toolkits/linux-pango

などの導入が必要。20057月現在, Red Hat8ベースのライブラリが多い模様
SuSEベースのほうが良いけど・・・Gentoobootstrap "emerge system"のエミュレートをする設定が必要らしい。)


Linux実行バイナリに対する処理:

portsでインストールする場合には自動的にやってくれるが, 手で入れる場合には, そ れがLinux ELFバイナリであるという烙印を押す必要がある。

実行ファイル名が a.out の場合,
> brandelf -t Linux a.out” として やる。

file a.out” で 確認して、”Linux”云々というリターンがあれば成功



注 意事 項:

Linuxバイナリは /usr/compat/linux chroot して実行されるので, Linuxアプリからは, /usr/compat/linux/tmp, /usr/compat/var/tmp がそれぞれ/tmp, /var/tmp として見える。Linuxエミュレーション環境をインストールした段階ではこれらのディレクトリが一般ユーザでの書き込みが許可されていない場合が多い。temporary file が書き込めない云々というエラーが出た場合はこれ らのディレクトリのパーミッションを変更してやる。

また, Acrobat Readerからlprを介して印刷する場合のように, Linuxバイナリによる中間生成ファイルをネイティブなコマ ンドに渡すケースでは, 両者から見える /tmp ディレクトリが一致しないという問題がある。それぞれ本物のtmpへのシンボリックリンクにしてやれば, この問題は一応は解決する。



インテルは自社のIA-32系のCPUに最適化した商 用コンパイラC/C++/Fortran)を販売しており, Linux版に関しては非商用利用の場合は無料で使用可能。た だし, 上記のサイトで非商用利用の登録をして, e-mail***.licというライセンスファイルを受け取る必要がある。

CPUメーカー謹製のコンパイラということで, 特にPentium4系に最適化された実行バイナリが作れる。ケースに依るが, 最適化がうまくはまるとGCCと比べて計 算速度が2倍くらい向上する。Pentium4系はAMDAthlon64Optronに比べるとCPU自体の魅力は(個人的な好みとしては)劣るが, CPUの持つ能力を最大限に引き出せるコンパイラが入手できる というのは大きなアドバンテージ。
詳しいレポートは, 例えば C MAGAZINE(ソフトバンク)のサイトの
http://www.cmagazine.jp/devreport/IntelC/html/ICC00.html
に掲載されている。

FreeBSDにおいても, ports(lang/icc, lang/ifc)でインス トールすれば, Linuxエミュレーションにより動作可能。しかもFreeBSDネイティブなバイナリを吐いてくれる。

インストール後の作業としては, 先に入手したライセンスファイルを

/usr/local/intel_cc_80/licenses

/usr/local/intel_fc_80/licenses

に置いておき, PATH

/usr/local/intel_cc_80/bin

/usr/local/intel_fc_80/bin

を含めてやる。iccC, icpcC++, ifortFortranコンパイラである。



Linuxエミュレータでの注意事項にあるように, /usr/compat/linux/tmp/tmpへのシンボリックリンクにする等の作業が必要。そうしないと, コンパイルとリンクを別々に行わなければならなくなる。



コンパイルオプション

詳細は icc -help 等を参照。各コンパイラに共通して重要なものを 列挙

-xP : Pentium 4 (SSE3)

特に-xN, -xW, -xPSSEレジスタを使った浮動小数点演算の
ベクトル化を試みてくれるので
, はまった場合は計算速度が劇的
向上する。
n=0disable, 無指定はdefault

-prefetch : データプリフェッチ有効(default

データの先読みをするので, 行列演算のように巨大配列を扱うときには有利かな?