[ SpamAssassin 設定 | FreeBSDトップ | 自作ソフトウェア ]


TIPS

daemon


Introduction


FreeBSD を運用していく上で便利な TIPS。

Single User Mode での起動


システム全般に関わる作業を実施する時等はシングルユーザモードで作業する。
シングルユーザモードで起動するためには、起動時の

Hit [Enter] to boot immediately, or any other key for command prompt
Booting [kernel] in 9 second...

のメッセージが表示されている時に Enter 以外の任意のキーを入力し、 loader のプロンプト ok に対して boot -s と入力する。

Hit [Enter] to boot immediately, or any other key for command prompt
Booting [kernel] in 9 second...

Type '?' for a list of commands, 'help' for more detailed help.
ok boot -s

シングルユーザモードで起動する場合は、 起動処理の最後にシェルを問い合わせてくるので任意のシェルのフルパス名か、 /bin/sh で良ければそのまま Enter を入力する。

Enter full pathname of shell or RETURN for /bin/sh:
#

シェルを起動したら、ファイルシステムの正当性チェック(fsck)、 ファイルシステムのマウント(mount)、Swapの有効化(swapon)等 必要なコマンドを実行する。
これらのコマンドは通常の起動時はシステムが自動実行するが、 シングルユーザモードの場合は自動実行されないので明示的に起動する必要がある。

# fsck -p
# mount -u /
# mount -a -t ufs
# swapon -a

これでシングルユーザモードでの起動は完了。

Disk のデバイス名称


FreeBSD では IDEドライブは ad0ad1 … SCSIドライブは da0da1 …というデバイス名となる。 但し、USB接続のドライブの場合は全て SCSIとして扱われるので、 フロッピードライブや USB Memory Key も da0da1 …となる。
MS-DOS/Windows の世界で言うパーティションを FreeBSD では 伝統的にスライスという言葉で表現している。 各ドライブ内のスライスは s1s2 …で示される。
MS-DOS/Windows で使用しているディスクを FreeBSD からアクセスするためには、 これらの名称を mount (8) コマンドの引数に指定して ファイルシステムとしてマウントする必要がある。 例えばプライマリ・マスターに接続されているIDEディスクの最初のスライスは /dev/ad0s1 としてアクセスすることになる。
FreeBSD ではスライスを更にパーティションと呼ばれる単位に分割して利用している。 パーティションは ab …で示される。
パーティション名称は歴史的な慣習により ac は 以下の用途に使用される。

a ルートパーティション
b swapパーティション
c ディスク全体

MS-DOS/Windows の世界での FDISK 拡張パーティションは5番目以降の 通常パーティションとして扱われるので、 例えば IDE プライマリ・マスタ上の最初の拡張パーティションは /dev/ad05s でアクセスする事になる。

ssh-agent の設定


ssh (1) を使用する際のパスフレーズを ssh-agent (1) を利用して自動化する方法。

  • 公開キーの作成
  • rsarsa1dsa それぞれの認証鍵を作成する。

    $ ssh-keygen -d rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/XXX/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/XXX/.ssh/id_rsa.
    Your public key has been saved in /home/XXX/.ssh/id_rsa.pub.
    The key fingerprint is:
    00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 XXX@hostname
    $ ssh-keygen -d rsa1
    Generating public/private rsa1 key pair.
    Enter file in which to save the key (/home/XXX/.ssh/identity):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/XXX/.ssh/identity.
    Your public key has been saved in /home/XXX/.ssh/identity.pub.
    The key fingerprint is:
    00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 XXX@hostname
    $ ssh-keygen -d dsa
    Generating public/private dsa key pair.
    Enter file in which to save the key (/home/XXX/.ssh/id_dsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/XXX/.ssh/id_dsa.
    Your public key has been saved in /home/XXX/.ssh/id_dsa.pub.
    The key fingerprint is:
    00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 XXX@hostname

  • 公開鍵を結合
  • 作成した公開鍵を全てまとめて authorized_keys という ファイルを作成。

    $ cd .ssh
    $ cat *.pub > authorized_keys

  • 公開鍵を転送
  • 結合した authorized_key ファイルを接続先のホストに転送する。

    $ scp authorized_key remote-host:.ssh/authorized_keys

  • ssh-agent の起動
  • ssh-agent (1) を使用するためには 環境変数をいくつか設定する必要があるので、 ssh-agent-s を使用して bourne shell 系の環境変数を出力させる。
    ssh-agent を起動したら ssh-add を使用して パスフレーズを記憶させる。

    $ eval `ssh-agent -s`
    $ ssh-add
    Enter passphrase for /home/XXX/.ssh/id_rsa:
    Identity added: /home/XXX/.ssh/id_dsa (/home/XXX/.ssh/id_dsa)
    Identity added: /home/XXX/.ssh/id_rdsa (/home/XXX/.ssh/id_dsa)
    Identity added: /home/XXX/.ssh/identity (XXX@hostname)

  • ssh 用の設定ファイル作成
  • $HOME/.ssh/config ファイルに以下の記述をすると ssh-agent の認証がフォワードされるので便利。

    ForwardAgent yes


以上で ssh-agent の設定は終了。

パスフレイズ無しで ssh 接続


パスフレイズを入力しないで ssh (1) 接続する方法。
セキュリティ上の観点からお勧めできないが、 どうしても必要な場合の設定方法を以下に示す。

  • 公開キーの作成
  • rsa の認証鍵を作成する。

    $ ssh-keygen -d rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/XXX/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/XXX/.ssh/id_rsa.
    Your public key has been saved in /home/XXX/.ssh/id_rsa.pub.
    The key fingerprint is:
    00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 XXX@hostname

  • 公開鍵を転送
  • 作成された id_rsa.pub ファイルを接続先のホストに転送する。
    接続先のファイル名は $HOME/.ssh/authorized_keysとする必要がある。

    $ scp id_rsa.pub remote-host:.ssh/authorized_keys


以上で設定は終了。

C debug macro


C 言語で debug する際等に使用する可変引数なマクロの実現方法。
FreeBSD 固有の話題ではないが、 UNIX とは切っても切れない縁である C 言語の話題なのでここにメモする。

#define debug(...) fprintf(stderr, __VA_ARGS__)

こういう定義を書いておくと debug() マクロが可変引数として使用可能である。

sendmail の Masquerade


NAT の使用や FireWall の内側で sendmail (8) を使用する場合、 envelop from のドメイン名が FQDN の場合はホスト名の解決ができないので、 メイルを送信できない場合がある。 そこで /etc/mail/sendmail.cf を適切に設定する事により、 envelop from のドメイン名を変更する必要がある。
sendmail に付属する m4 を利用した sendmail.cfの 生成ツールを使用する場合、以下の設定を追加する事により、 envelop from や Return-Path を変更する事ができる。

FEATURE(masquerade_envelope) envelope from の書き換え
FEATURE(masquerade_entire_domain) Return-Path の書き換え
FEATURE(local_no_masquerade) 自ドメインは masquerade しない
この設定をしないと自ドメイン宛のメイルは全て localhost に 配送されてしまう
MASQUERADE_AS(変更したいドメイン名) 変更するドメイン名

以下の設定を /etc/mail/freebsd.mc に追加して make (1) を実行すると FQDN.cfFQDN.submit.cf が作成されるので、それぞれを sendmail.cfsubmit.cf と 名称変更して sendmail (8) を再起動する。

VFlib のフォント追加


VFlib で特定の TrueType Font を使用するための設定を追加する。
まずはフォントファイルを任意のディレクトリにコピーし、 tti と呼ばれるフォントインデックスファイルを作成する。

# cd /usr/X11R6/lib/X11/fonts/TrurType
# ttindex MY-mincho.ttf
# ttindex MY-gotcic.ttf

これでフォントインデックスファイルが作成される。
次にフォント情報を定義ファイル vfontcap に追加する。 vfontcap ファイルが存在するディレクトリは インストール方法やインストールしたバージョンによって異なるが、 FreeBSD 5.1-RELEASE の標準設定の場合は /usr/local/share/VFlib/2.25.6 にインストールされるので、このファイルをエディタで開き、設定を変更する。
明朝体の出力で使用されるフォントは min: から開始される行、 ゴシック体の出力で使用されるフォントは goth: から開始される行で それぞれ定義されているので、fc= の後ろのフォント名を変更する。
fc= で指定する名称はフォントのタイプとフォントデータを格納した ファイル名が vfontcap で定義されている必要がある。

min:\

:fc=my-mincho:
goth:\

:fc=my-gothic:
my-mincho:\

fc=r-my-mincho:\
my-gothic:\

fc=r-my-gothic:\
r-my-mincho|My mincho font:\

ft=truetype:\

ff=/usr/X11R6/lib/X11/fonts/TrueType/MY-mincho:
my-gothic|My gothic font:\

ft=truetype:\

ff=/usr/X11R6/lib/X11/fonts/TrueType/MY-gothic:

最後に /usr/local/share/texmf/dvips/base/psfonts.map で Ryumin-Light には my-mincho、GothicBBB には my-gotic を 使用する様に以下の設定を追加すればよい。

rml Ryumin-Light-H <'r-my-mincho
gbm GothicBBB-Medium-H <'r-my-gothic
rmlv Ryumin-Light-V <'r-my-mincho
gbmv GothicBBB-Medium-V <'r-my-gothic

これで VFlib を使用した dvips 等でベクトルフォントが使用できる。

tcpdump のオプション


普段は滅多に使用しないが、ネットワーク系のトラブルが発生した際に 威力を発揮するツールの一つに tcpdump (1) がある。
滅多に使わないのでオプションを忘れてしまいがちなので、 備忘録がわりにここに残しておく。

# tcpdump -n -Xx -s 0 -i インタフェース

-Xx パケットを 16 進と ASCII で表示する。
-n アドレスを名前に変換しない。
-s 0 パケット長を制限せず全てのデータを表示する。

tar を利用したリモートコピー


通常は rsync (1) 等を使用するが、 GNU tar (1) と ssh (1) を使用して リモートホストにローカルサーバと同一の環境を構築する場合の コマンドライン引数を備忘録として残す。

# tar -C / -zcf - --force-local . | ssh リモートホスト tar -C / -zxpf - --forcelocal --unlink-first

-C / tar を実行する前に chdir するディレクトリを指定する
--forcelocal : が含まれているファイルも強制的にローカルホストとみなす
-p 保護情報(ファイルのパーミッション)を完全に設定する
--unlink-first ファイルを作成する前に削除する

/etc/mail/aliases の復活方法


sendmail (8) は alias を Berkeley DB の Hash 形式で管理しているが、 この db ファイルは /etc/mail/aliases ファイルを作成後、 newaliases (1) コマンドを実行して変換する。
操作ミスで /etc/mail/aliases を削除してしまった場合等は、 perl (1) を使用して /etc/mail/aliases.db から復活できる。 そんな奴いないって突っ込みは却下(笑)

#!/usr/local/bin/perl
# dbmopen() のファイル名は ".db" を指定しない
dbmopen(%aliases, "/etc/mail/aliases", undef);

while(($k, $v) = each %aliases){
    print "$k = $v\n";
}

dbmclose(%aliases);

とある方から makemap (8) を使った方が早くて確実だと指摘を頂きました。
ご指摘ありがとうございます>S.O.さま

# makemap -u hash /etc/mail/aliases.db

無線 LAN の自動切替


複数の無線 LAN アクセスポイントで無線 LAN の設定変更を自動化する。
自宅と職場で無線 LAN を使用している場合に、 SSIDWEPKEY の設定を自動で変更するための設定を行う。 動作原理は SSIDWEPKEY の組み合わせで DHCPDISCOVER パケットを送信し、 DHCPOFER が正しく帰ってくるまで繰り返すらしい。
この便利な機能を使用するために /etc/dhclient.conf に以下の設定を追加する。

interface "インタフェース" {

media "ssid SSID wepmode WEPMODE wepkey WEPKEY media DS/11Mbps",
:


"ssid SSID wepmode WEPMODE wepkey WEPKEY media DS/11Mbps";
}

無線 LAN カードの挿入時に dhclient (8) が自動実行される様に /etc/rc.conf に以下の設定を追加する。

pccard_ifconfig="DHCP" 無線 LAN カード挿入時に DHCP を実行

起動時の DHCP 処理


最近は DHCP で動的に IP アドレスを配布している LAN 環境が増えている。
出先で一々ネットワークの設定をしなくて済むので非常に便利なのだが、 ノートパソコンを持ち歩いている場合 LAN 環境がない状態で起動する事もあるので 起動時に DHCP を有効にしているとタイムアウトまで待たされるか Ctrl + C で起動時の DHCP を待つ必要がある。
これでは不便なので DHCP による IP アドレスの取得時に インタフェイスの状態を確認して、 status が active でない場合は dhclient を中断させるために、 /etc/dhclient-enter-hook に以下の設定を追加する。

#!/bin/sh # 追加
if [ "${interface}" = "インタフェース" ] # 追加
then # 追加

if ! ifconfig ${interface} | egrep -q 'status:[[:space:]]*active' # 追加

then # 追加


/usr/bin/killall dhclient # 追加

fi # 追加
fi # 追加

起動時に dhclient (8) が自動実行される様に /etc/rc.confに以下の設定を追加する。

ifconfig_インタフェース="DHCP" 起動時に DHCP を実行

rpm2cpio のオプション


Linux 用のアプリケイション等を liux emulator 経由で使用する際に 避けて通れない rpm 形式ファイルの展開方式。
ports から rpm2cpioコマンドを導入し、 以下のコマンドでディレクトリを展開する。

$ rpm2cpio rpmファイル | cpio -ivd

イメージファイルのマウント


cd の iso-image 等 ファイルシステムイメージをマウントするために、 FreeBSD 5系ではメモリディスク md (4) を使用する。
メモリディスクはmalloc (9) を利用して割り当てたメモリディスクや、 スワップ領域を利用したメモリディスクにも利用される。
mdconfig (8) コマンドでイメージファイルをデバイスに関連付けした後で、 mount (8) コマンドを使用して通常通りマウントし ファイルシステムにアクセスする。

# mdconfig -a -t vnode -f イメージファイル
# mount -t タイプ /dev/mdn マウントポイント

-a イメージファイルをデバイスに関連付けする
-t vnode デバイスへの関連付けをイメージファイルと指定する

Epson LP-7000C でプリントする


CUPSLPRng ではなく従来の lpr を利用して Epson LP-7000C プリンタから印刷する方法。
印刷には Epson Avasys が公開している Linux 用のドライバを利用する。
  • 必要なソフトウェアのインストール
  • ports/packages を利用して以下のソフトウェアをインストールする。
    • shells/bash
    • print/ghostscript-gnu
    • print/ghostscript-gnu-commfont
    • japanese/ghostscript-gnu-jpnfont
    • print/psutils-a4
    • japanese/nkf
    • japanese/a2ps
  • Linux 用ドライバの取得
  • Epson Avasys のペイジより Linux 用のドライバ一式をダウンロードし展開する。

  • 取得したドライバの修正
  • 取得したドライバの以下の内容を修正する
    • shell パスの修正
    • 同梱されている shell script ファイルは bash 独自の機能を使用した shell script なのだが Linux 用の wrapper script なので 1行目の shell のパスが/bin/shとなっているために、 /usr/local/bin/bash に変更する。
    • コマンドのパス変更
    • script 内部で実行しているコマンドのパスをフルパスに変更する。
    • ghostscript の実行オプション変更
    • script 内部で実行している gs のオプションのうち、 -dPARANOIDSAFER を指定すると gs がエラーとなるので、 -dSAFER に変更する
    • プリントオプションを指定するファイルのパス名変更
    • プリントオプションを指定するオプションを格納したファイルのパスを FreeBSD の流儀に合わせるために /etc/epkowa/lp7000cから /usr/local/etc/lp7000c.confに変更する。
  • 必要なファイルのコピー
  • 印刷に必要な以下のファイルをコピーする
    • /usr/local/bin/lp7000c_lprwrapper.sh
    • /usr/local/bin/pstolp7000c.sh
    • /usr/local/bin/lp7000c
    • /usr/local/etc/lp7000c.conf
  • マジックフィルタを準備する
  • Epson Avasys から提供されている script は PostScript ファイルの印刷しか対応していないので、 通常のテキストファイルを印刷するために a2ps(1)コマンドを 自動で実行するためのマジックフィルタを作成する。

  • printcap の設定
  • マジックフィルタをフィルタプログラムに指定した /etc/printcap ファイルを作成して lpd(8)を再起動する。
以上で Epson LP-7000C から高品質のカラー印刷が可能となる。


Last Update: Aug. 14 2006 Copyright © Mitzyuki IMAIZUMI 2002,2004,2005,2006 All Rights Reserved,