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ドライブは ad0、ad1 …
SCSIドライブは da0、da1 …というデバイス名となる。
但し、USB接続のドライブの場合は全て SCSIとして扱われるので、
フロッピードライブや USB Memory Key も da0、da1 …となる。
MS-DOS/Windows の世界で言うパーティションを FreeBSD では
伝統的にスライスという言葉で表現している。
各ドライブ内のスライスは s1、s2 …で示される。
MS-DOS/Windows で使用しているディスクを FreeBSD からアクセスするためには、
これらの名称を mount (8) コマンドの引数に指定して
ファイルシステムとしてマウントする必要がある。
例えばプライマリ・マスターに接続されているIDEディスクの最初のスライスは
/dev/ad0s1 としてアクセスすることになる。
FreeBSD ではスライスを更にパーティションと呼ばれる単位に分割して利用している。
パーティションは a、b …で示される。
パーティション名称は歴史的な慣習により a 〜 c は
以下の用途に使用される。
a
|
ルートパーティション
|
b
|
swapパーティション
|
c
|
ディスク全体
|
MS-DOS/Windows の世界での FDISK 拡張パーティションは5番目以降の
通常パーティションとして扱われるので、
例えば IDE プライマリ・マスタ上の最初の拡張パーティションは
/dev/ad05s でアクセスする事になる。
|
ssh-agent の設定
|
|
ssh (1) を使用する際のパスフレーズを
ssh-agent (1) を利用して自動化する方法。
- 公開キーの作成
rsa、rsa1、dsa それぞれの認証鍵を作成する。
$ 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 の認証がフォワードされるので便利。
以上で 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.cfと FQDN.submit.cf
が作成されるので、それぞれを sendmail.cf、submit.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 を使用している場合に、
SSID や WEPKEY の設定を自動で変更するための設定を行う。
動作原理は SSID と WEPKEY の組み合わせで
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 でプリントする
|
|
CUPS や LPRng ではなく従来の 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 から高品質のカラー印刷が可能となる。
|