計算機関係,
特にFreeBSDにおけるシステム,
ネットワーク設定等の忘備録
(FreeBSD友の会:
http://www.jp.freebsd.org/)
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"
も必要?)
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”)
としてやればよい。
/dev/io
UNIX系のOSはネットワークサーバに用いられることが多いが,
FreeBSDでは/dev/ioをオープンしてやればoutb,
inb関数によって指定したIOアドレスにアクセスすることが可能。当然root権限が必要だが,
リアルタイム性の要求が厳しくなければMS-DOSライクにハードウェアの制御が可能である。デバドラを開発する手間が掛けられない場合は便利ではある。
/dev/ioを開くのは以下のような感じ。
if((iofl =
open("/dev/io", 000)) < 0) { |
注意事
項:
outb, inb 関数は4系列以前では<machine/cpufunc.h>をインクルードすれば良かったが,5系列以降は<
unistd.h>もインクルードする。結構気付きにくいので注意。
NFSのマウント
5系列のあるときから,
<sys/mount.h>に定義されているstatfs構造体などが64bit対応のためか大幅に書き換えられている。
NFSをマウントするツールなどで,
配列をstaticに定義しているコードだとマウントポイント情報取得の際にオーバーフローを起こして死んでしまうことがあるので注意。
クラス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は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してやらないとログにエラーを書き続けるかもしれない。
りな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 |
といったのを追加して完了。
最近のコンピュータウイルスやワームには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を再起動してやれば良い。
メールサーバからクライアントにメールをダウンロードす
るのに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 |
特に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
でクライアントに集めて一括管理
することができる。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 のようなバイナリ配布のアプリを動か
すのに必要
/etc/rc.conf
において linux_enable="YES"
としておく
または,
kldstat で確認して linux.ko
がロードされていなければ
rootで
“# kldload
linux.ko” してやる。
実際の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
などの導入が必要。2005年7月現在,
Red Hat8ベースのライブラリが多い模様
(SuSEベースのほうが良いけど・・・Gentooはbootstrap
と "emerge
system"のエミュレートをする設定が必要らしい。)
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系はAMDのAthlon64やOptronに比べると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
を含めてやる。iccがC, icpcがC++, ifortがFortranコンパイラである。
Linuxエミュレータでの注意事項にあるように, /usr/compat/linux/tmpを/tmpへのシンボリックリンクにする等の作業が必要。そうしないと, コンパイルとリンクを別々に行わなければならなくなる。
詳細は icc -help 等を参照。各コンパイラに共通して重要なものを 列挙
-O3 : -Oより強めの最適化(-O, -O1, -O2は同じ)
-mp, -mp1 : 浮動小数点の精度を維持する。-mp1は速度への影響がより少ない
-prec_div : 除算精度を維持する
-pc80, -pc64, -pc32 : 内部FPU の精度指定。デフォの-pc80で問題なし。
-tpp7 : Pentium4に対しての最適化を行う。PenIIIは-tpp6
-axN, -xN : 指定したCPUに最適化されたコードを生成
-xK: Pentium III
-xB : Pentium M
-xW, -xN : Pentium 4 (SSE2)
-unroll[n] : ループ展開による最適化の設定。