Remote Serial Console HOWTO Glen Turner Australian Academic and Research Network glen.turner+howto@aarnet.edu.au Mark F. Komarinski mkomarinskiATwayga.org 日本語訳:芳賀靖史 - yasufumi.haga@nifty.com v2.4 2002年 10月 13日 Revision History Revision 2.4 2002年10月3日 カーネルフロー制御のバグ情報とケーブリング、 Debian および Livingston Portmaster の追加、誤字修正(特に日本語への翻訳の際見つかったもの) Revision 2.3 2002年7月11日 Red Hat Linux 7.3 用にアップグレード。シリアルポート速度とUART、 ioctlsave の修正。 Revision 2.2 2002年5月22日 マイナーチェンジ Revision 2.1 2002年5月16日 Revised by: gdt カーネルのコンソール構文を訂正。USB と devfsを追加 Revision 2.0 2002年2月2日 Revised by: gdt 第二版 Revision ≦1.0 2001年3月20日 Revised by: mfk 初版 RS-232 のシリアルコンソールを使えば、非同期シリアルポートに接続した端末 やモデムから Linux を制御できるようになります。そうなれば、もう管理対象 マシンのモニターやマウス、キーボードを使わなくてもシステムを管理できま す。シリアルコンソールが役に立つのは、 Linux システムを遠隔地のサイトや 、あるいは高密度のラックに配備しているところなのです。 この HOWTO では、シリアルコンソールを接続するのに必要な、 Linux の設定 方法を説明します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 献辞 私 Glen Turnerは、自分の家族に謝意を表したいと思います。この HOWTO を書 くために非常に長い間、幾晩も幾晩も、このプロジェクトに注力できたのは、 家族のおかげです。 Karen, Kayla そして Ella、ありがとう。 Table of Contents 1. はじめに 1.1. コンソールとは何か? 1.2. シリアルコンソールを使う理由 1.3. ‘コンソール’ の新しい意味 1.4. 設定の概要 2. 準備 2.1. 万が一に備える 2.2. シリアルポートを選択する 2.3. シリアルポートの速度とパラメータを選択する 2.4. モデムを設定する、あるいはヌルモデムケーブルを使う 2.5. 端末あるいは端末エミュレータを設定する 3. 必要なら BIOS の設定を行なう 4. ブートローダーを設定する 4.1. LILO ブートローダーを設定する 4.2. GRUB ブートローダーを設定する 4.3. SYSLINUX ブートローダーを設定する 5. Linux カーネルの設定変更 5.1. LILO を使った Linux カーネルの設定 5.2. GRUB を使っている Linux カーネルの設定 5.3. SYSLINUX を使っている Linux カーネルの設定 6. getty を設定する 6.1. init システム 6.2. 従来の getty 6.3. agetty 6.4. mgetty 6.5. mingetty 6.6. getty 無し 7. 付随するその他の設定 7.1. シリアルコンソールから root がログインできるようにする。 7.2. init レベルをテキストレベルに変える 7.3. 保存してあるコンソールの設定を削除する 7.4. シリアルコンソールは /dev/modem ではない 7.5. /dev/systty のターゲットを変更する。 7.6. PAM(Pluggable Authentication Modules) の設定 7.7. Red Hat Linux を設定する 8. リブートとテスト 8.1. コンソール操作の検証 8.2. 保存したコンソールの設定を再作成する 8.3. コンソールをテストする 8.4. ここから次はどこへ? 9. セキュリティ 9.1. 良いパスワードを使う 9.2. "Data Terminal Ready" と "Data Carrier Detect" に従う 9.3. ダムモデムを使う、あるいは設定する。 9.4. コンソールメッセージを制限する 9.5. モデムの機能を用いて使用を制限する 9.6. BIOS の特徴 9.7. ブートローダーのパスワードを使う 9.8. 非対話的ブートシーケンス 9.9. マジック SysRq キー 9.10. Ctrl-Alt-Delete の動きを調整する 9.11. アクセス未遂のログ 9.12. 電話回線リンクの盗聴への対応 10. シリアルコンソールをサポートするように、カーネルを設定する 10.1. Linux カーネルのバージョン 2.5 10.2. Linux カーネルのバージョン 2.4 10.3. Linux カーネルのバージョン 2.2 11. シリアルケーブルの詳細 11.1. 用語 11.2. コンソールポート・モデム間のケーブル 11.3. コンソールポートと端末(または別のPC)間のケーブル 11.4. シリアルケーブルの作成 12. モデムの設定 12.1. Minicom を使ってモデムにコマンドを送る 12.2. ダムモデムを設定する 12.3. AT コマンドでモデムを設定する 12.4. 内蔵モデム 12.5. WinModem A. バグと困りごと A.1. Linux カーネルのフロー制御 A.2. Red Hat Linux 7.1 と SysVinit A.3. BIOS、キーボード、そしてビデオカード A.4. リブートでモデムがハングアップする A.5. init と syslog の出力は補助コンソールには表示されない。 A.6. 接続してもコンソールが応答しない A.7. 初期化中にモデムがハングアップする A.8. ブートローダーにはフロー制御がない A.9. ブートローダーはラインノイズに弱い A.10. Advanced Power Management A.11. モデムと国際電話の必要条件 B. シリアルコンソールからファイルをアップロードする B.1. コンソールにログを取らないようにする B.2. "ASCII アップロード" と cat B.3. Xmodem, Ymodem および Zmodem B.4. Kermit C. Red Hat Linux をシリアルコンソールからアップグレードする C.1. ブートディスクを選ぶ C.2. シリアルポートを使うように BIOS を設定する。 C.3. DTR を無視して、DCD をアサートするようにモデムを設定する C.4. ネットワークインストール用フロッピーディスクを用意する C.5. HTTP サーバーを準備する C.6. ネットワーク設定を記録しておく C.7. LILO の設定を記録しておく C.8. Red Hat ディストリビューションをアップグレードする C.9. シリアルコンソール用のブートディスクを作る C.10. 参考文献 D. シリアルコンソールから、 DebianGNU/Linux をアップグレードする E. ターミナルサーバーの設定 E.1. 中古のターミナルサーバーを購入する際の考慮事項 E.2. Cisco 2511 E.3. Xyplex/iTouch MAXserver 1600 E.4. Xylogics/Bay/Nortel Annex E.5. Livingston/Lucent Portmaster F. 開発者へのお願い F.1. ブートローダーの作者へのお願い F.2. BIOS の作者へのお願い G. この HOWTO について G.1. 著作権 G.2. 免責条項 G.3. 謝辞 G.4. コメントと訂正 G.5. 日本語版謝辞 Colophon List of Tables 1-1. ‘コンソール‘を指すいろいろな言葉 2-1. 同じシリアルポートに対する様々な名前 2-2. IBM PC/AT の RS-232 ポート用に使用する割り込み 4-1. SYSLINUX のフロー制御ビットマップ 10-1. IBM-PC/AT のシリアルポートのビットレートと、そのビットクロックの 除数 List of Figures 2-1. /etc/rc.serial で setserial コマンドを使い、シリアルポート /dev/ ttyS2 を無効にする。 2-2. 拡張 BNF 記法で表したシリアルビットレート構文 2-3. 拡張 BNF 記法によるシリアルパリティ構文 2-4. 拡張 BNF 記法によるシリアルデータビット構文 2-5. 拡張 BNF 記法によるシリアルストップビット構文 2-6. 拡張 BNF 記法によるシリアルフロー制御の構文 2-7. 拡張 BNF 記法によるカーネルのシリアルパラメータ構文 4-1. EBNF による LILO の serial コマンド書式 4-2. EBNF記法による LILO の serial 変数 4-3. LILO ブートローダーの設定サンプル 4-4. md5crypt を使って、 GRUB 用のハッシュしたパスワードを作る 4-5. パスワードを要求するようにした GRUB の設定 4-6. シリアルコンソール用の GRUB の設定 4-7. シリアルコンソールおよび、付属のモニター・キーボード用の GRUB の設 定 4-8. シリアルコンソールと付属のモニター用に設定した場合の、デフォルトデ バイスへの GRUB の出力 4-9. VT100 以外の端末でコマンドラインインタフェースを使う場合の GRUB の 設定 4-10. GRUB のメニューにシングルユーザーモードのオプションを追加する 4-11. EBNF 記法による、 SYSLINUX の serial コマンド構文 4-12. EBNF 記法による、 SYSLINUX の serial 変数 5-1. EBNF 記法によるカーネルの console 構文 5-2. ビデオカード付 PC で推奨するカーネルパラメータ 5-3. ビデオカード無しの PC で推奨するカーネルパラメータ 5-4. LILO を設定する際の、推奨するカーネルパラメータ 5-5. GRUB の設定で推奨するカーネルパラメータ 5-6. SYSLINUX の設定で推奨するカーネルパラメータ 6-1. 接続している端末の種類と型を対話的に変更する 6-2. getty は、 /etc/inittab のエントリに基づき init が起動する 6-3. gettydefs に CON9600 を定義する 6-4. EBNF記法による、/etc/gettydefs のエントリ構文 6-5. agetty 用の /etc/inittab エントリ 6-6. mgetty 用 /etc/inittab エントリ 6-7. mgetty の設定ファイル、 mgetty.config 6-8. 仮想端末の数を減らす。/etc/inittab から mingetty エントリを取り除 く。 6-9. 仮想端末を減らす。未使用の仮想端末を解放し、そのデバイスファイルを 削除する。 6-10. getty を使わない場合に、コンソールのシリアルポートをロックする、 /etc/rc.serial の内容 7-1. root がシリアルコンソールからログインできるように、 securetty を変 更する。 7-2. Red Hat Linux 7.2 の Xservers 7-3. Red Hat Linux 7.2 の gdm.conf にある [servers] セクション 7-4. 保存してあるコンソールパラメータが入っている ioctl.save の削除 7-5. もし /dev/modem がシリアルコンソールのポートを指していれば、それを 削除する。 7-6. /etc/makedev.d/linux-2.4.x にある、 /dev/systty のデフォルト値 7-7. MAKEDEV の設定ファイルにある /dev/systty の値を変更する 7-8. /dev/systty の新しい値をインストールする 7-9. console.perms のデフォルト は付属のキーボート・モニター を指している。 7-10. console.perms のデフォルトデバイス一覧 7-11. 付属のキーボード・モニターに必要な console.perms のデバイス 7-12. console.perms に を追加して、それがシリアルコンソール を指すようにする。 7-13. シリアルコンソールを指すよう変更された console.perms の残りのデバ イス 7-14. Red Hat Linux 用の /etc/sysconfig/init の変更 7-15. Red Hat Linux 用の /etc/sysconfig/kudzu の変更 8-1. シングルユーザーモードに入らずに、ioctlsave を使って /etc/ ioctl.save を生成する 9-1. Crackers favour war dialling and weak passwords (クラッカーは電話 と弱いパスワードがお気に入り)からの抜粋 9-2. ログメッセージのコピーをログサーバーへ送るように修正した /etc/ syslog.conf 9-3. /etc/sysconfig/syslog のオプションを設定して、リモートのログメッセ ージを許可する。 9-4. remote.example.edu.au への syslog メッセージを制限する 9-5. nscd を使って DNS の逆引きをキャッシュする。 9-6. コンソールユーザーへのメッセージ送信を制限する。 9-7. /etc/profile.d/mesg.sh、コンソールユーザーへのメッセージ送信を制限 する。 9-8. /etc/profile.d/mesg.csh、コンソールユーザーへのメッセージ送信を制 限する。 9-9. ファイルを /etc/profile.d にインストールする。 9-10. sysctl を使って、マジック SysRq キーを無効にする。 9-11. マジック SysRq キーを無効にする、 /etc/sysctl.conf の設定。 9-12. SysRq キーを無効にした、カーネルの make menuconfig 9-13. SysRq キーを無効にしているカーネルの .config 9-14. /etc/inittab での Ctrl-Alt-Delete のデフォルト処理 9-15. Ctrl-Alt-Delete を無視する /etc/inittab の設定 9-16. /etc/inittab 内の Ctrl-Alt-Delete によって正しくシャットダウンす る。 10-1. make menuconfig を使ったシリアルコンソール用カーネル設定 10-2. .config を用いた、シリアルコンソールのカーネル構成 10-3. make menuconfig を使った USB ドングルのシリアルコンソール用カーネ ル設定 10-4. .config を使った USB デバイスのシリアルコンソール用カーネル設定 10-5. make menuconfig を用いたシリアルコンソール用のカーネル設定 10-6. .config を使ったシリアルコンソール用のカーネル設定 11-1. ステータスとハンドシェークを完全にしたヌルモデムケーブル 11-2. ステータスとハンドシェークを完全にした別バージョンのヌルモデムケ ーブル 11-3. ステータスとハンドシェークを改造したヌルモデムケーブル 11-4. ステータスもハンドシェークもないヌルモデムケーブル 11-5. ステータスもハンドシェークもない片方向のヌルモデムケーブル 12-1. ダムモデムのフロントパネル 12-2. モデムのポート速度を調べる 12-3. AT コマンドを使ってモデムを設定する 12-4. ヘイズの AT 互換モデムをリセットする。 A-1. CTS/RTS フロー制御を行なう、カーネルの console パラメータ A-2. コンソールの CTS/RTS フロー制御用カーネルソースコード A-3. マシンの初期化中、setserial はモデムをハングアップさせる原因になる B-1. Red Hat Linux でコンソールへのカーネルメッセージを抑止する C-1. シリアルリンクを使うために BIOS を設定する C-2. ハードディスクからブートするよう BIOS を設定する C-3. Red Hat Linux 7.2 の mkbootdisk から抜き出す。これで SYSLINUX.CFG を作る C-4. mkbootdisk から抜き出して変更したもの。シリアルコンソールを使う SYSLINUX.CFG を作る E-1. Linux PC がつながっている Cisco 2511 ターミナルサーバーに対する基 本設定 E-2. Portmaster ユニットの設定 E-3. Portmaster のポート設定 F-1. /dev/nvram を設定して、CMOS の設定にアクセスする F-2. CMOS の設定を得る F-3. CMOS の内容を設定する List of Examples 4-1. カーネルパラメータを使ってアクセスパーミッションを回避する 5-1. ベンダーがインストールした、 LILO の設定の全文 5-2. シリアルコンソール向けの修正を加えた、LILO 設定の全文 5-3. ベンダーがインストールした、GRUB の設定の全文 5-4. シリアルコンソール用に修正した、GRUB の設定の全文 8-1. シリアルコンソールに電話して接続する C-1. インターネットプロトコル(IP)の設定を表示する C-2. LILO の設定を表示する ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 1. はじめに console(コンソール)名詞 [ラテン語 の consolatio(n) より。 “安楽、精 神的慰めの意。”] オペレータに弔辞 や死亡記事を表示したり印刷したりす るための装置。 Stan Kelly-Bootle, The Computer Contradictionary [1]. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1. コンソールとは何か? コンソールとは、システム管理メッセージ用のテキスト出力装置のことです。 こういったメッセージは、カーネルからも出てくるし、 init システムからも 出ます。それにシステムログ採取プログラムからも出てきます。 最近の小型コンピュータでは、コンソールは通常、そのコンピュータに付属し ているモニターとキーボードになっています。 一方、昔からずっと使っているコンピュータのコンソールは、 DEC VT100 のよ うな端末を、 RS-232 で接続したものになっています。この端末は施錠された 部屋の中にあり、ミニコンピュータのオペレータが頻繁に監視しています。 Sun や Hewlett-Packard、 IBM の大規模システムでは、今でもシリアルコンソ ールを使っています。 コンソールは、通常ログイン可能になっています。そして一番信頼できるログ インセッションは、他でもないコンソールからのログインセッションだと、オ ペレーティングシステムの多くの部分は考えます。ですから、コンソールから スーパーユーザーである root でログインするというのは、システムの動作異 常に直面した場合の最後の砦となる、切札のコマンドラインなのです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2. シリアルコンソールを使う理由 普通のユーザーには、シリアルコンソールよりも、直接つながっているキーボ ードと画面をコンソールにしている方が、メリットは大きいものです。シリア ルコンソールはもっと低速で、 80桁24行の画面を埋めるのにかかる時間は 1 秒にもなります。それに普通は、非プロポーショナルフォントの ASCII テキス トしかサポートしませんし、英語以外の言語サポートも限られています。価格 にしても、中古の PC より新品の端末の方が高額になることがあります。 それでもシリアルコンソールが役に立つ場面がいくつかあります。それは、 遠隔地にあるコンピュータのシステム管理をする Linux は無人サイトに配置するのに適したオペレーティングシステムです 。それに DNS サービスや DHCP サービスといった、ネットワークインフラ の核になるサービスのホスティングにも適しています。このようなサービ スは、一般に組織のどの部門でも設置します。中には、規模が小さ過ぎた り遠距離すぎて、情報技術スタッフを配置できないところもあるでしょう 。 そういった遠隔地にあるコンピュータのシステム管理には、普通は SSH を 使います。しかし、ソフトウェア障害を診断して修正するには、コンソー ルにアクセスするしか手が無い時があります。インストール済みのディス トリビューションに対して、危険を伴う重要なアップグレードを行なう時 も、コンソールにアクセスする必要があるかもしれません。 こういう場合は、シリアルコンソールをモデムにつなぎます。そしてその モデムに電話すれば、遠隔地のコンピュータからコンソールへアクセスで きるようになります。こうすれば、どのような電話からでも、コンソール に到達できるようになります。 コンピュータを高密度ラックにマウントする パーソナルコンピュータをクラスターにすると、メインフレームコンピュ ータよりも優れた性能が発揮できます。それに、アプリケーションによっ ては、他に負けないようなスーパーコンピュータも作れます。クラスタリ ングの詳細は、 Cluster-HOWTO を参照して下さい。 こういったクラスターは、一般に 19 インチの通信装置用ラックに組まれ ており、各コンピュータのシステムユニットの厚さは、通常 1 ラック単位 (つまり 1.75 インチ)(訳注: 1U)になっています。ですから、キーボ ードとモニターはラックに置かない方がいいです。小さなブラウン管のモ ニターでも、16 ラック単位(訳注: 16U)分のスペースは使い切ってしま うでしょうからね。 この場合、一見、モニターとキーボードの切替器をつけるのが最良の解決 法のように思えます。しかしモニターへ出力する VGA 信号は微弱です。で すから、スイッチをつけたとしても、モニターをコンピュータのラックか らあまり離して置くことはできません。 それよりも、マシンルームのような非常に費用のかかる場所に置かず、む しろコンピュータセンターのオペレータルームで、コンソールが監視でき るようにしたいですね。遠隔制御ができて、光ファイバーで延長できるモ ニタースイッチも使えますが、この方法は費用が高額になることがありま す。 一方、RS-232 だと、標準的なケーブルでも、長さが15メートルのものがあ りますし、もっと長くするのも簡単です。それにケーブルの引き回しも安 く済みます。ターミナルサーバーを使えば、端末 1 台で最大 90 台のシリ アルコンソールにアクセスできるようになります。 コンソールメッセージを記録する これは二種類のまったく異なる状況で役に立ちます。 カーネルのエラーメッセージは、表示されてもその後瞬時にコンピュータ がリブートしてしまうので、そのエラー内容は分かりません。カーネルの プログラマはこういったことによく直面します。このメッセージを記録し ておくのに、シリアルコンソールが使えます。他の Linux マシンをシリア ル端末にしてもかまいません。 安全性を考慮して設置したマシンの中には、セキュリティに関わるイベン トをすべて、手を加えずそのままログに記録する必要があるものがありま す。コンソールメッセージをすべて印刷するというのが、この要件を満た す一つの方法です。シリアルコンソールをシリアルプリンターに接続すれ ば、この条件は達成できます。 [2] 組み込みソフトウェアを開発する Linux は、組み込みアプリケーションのオペレーティングシステムとして 、ますます使われるようになっています。このようなコンピュータにはキ ーボードも画面もありません。 この組み込みコンピュータに、ソフトウェア開発者が直接アクセスできる ようする簡単な方法が、シリアルポートを使うことです。これはデバッグ にはまことに貴重なものです。組み込みコンピュータ用に設計されている チップセットのほとんどにシリアルポートがあるのは、まさにこのためな のです。 この RS-232 ポートは、出荷する製品では、外部コネクタに出す必要はあ りませんが、出しておいて、アップデートするソフトウェアをダウンロー ドするのにもよく使います。 通信装置用保守端末にする Linux は通信装置内のオペレーティングシステムとして、ますます使われ るようになっています。 Carrier Grade Linux コンソーシアムでは、この流れを加速し一元化したいと思 っています。 ほとんどの通信装置は、離れた場所にあるコンピュータが遠隔管理してい ます。でもサイトの技術者たち(通信業界用語では保守要員といいます) は、この装置にアクセスして、設置の変更状況を調べたり、報告された障 害を調べたりする必要があります。この保守要員が使う端末のことを保守 端末といいます。保守端末は通信装置の保守インタフェースプラグに差し 込んであります。シリアルコンソールは理想的な保守インタフェースにな るのです。 ミニコンピュータシステムとは違い、 IBM PC はシリアルコンソールを使うよ うな設計にはなっていませんでした。しかし、これでは不都合なことが二つ出 てきます。 第一に、電源投入時のセルフテストメッセージと基本入出力システム(つまり BIOS)のメッセージは画面に送られ、ユーザーの入力はキーボードから受け取 るようになります。こうなると、シリアルポートを使って BIOS を再設定する のが難しくなり、電源投入時のセルフテストのエラーもわからなくなります。 ラックマウントサーバー装置の製造業者数はますます増加しており、その製造 業者は自分たちの BIOS を変更して、 RS-232 ポートをオプションで使えるよ うにしています。これは BIOS を設定したり、テストメッセージを受け取るた めのものです。マシン、具体的にいえばシリアルコンソールを用いて運用する マシンを購入するつもりなら、この機能が備わっているものにしてください。 どうしてもシリアルポートから BIOS へアクセスする必要がある既存のマシン については、 PC Weasel 2000 などの、ハード ウェアによる解決方法があります。 第二に、 IBM PC の RS-232 ポートは、モデムの接続用に設計されています。 よって、 PC のシリアルポートを端末に接続する場合は、ヌルモデムケーブル が必要になります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3. ‘コンソール’ の新しい意味 文書の作者の中には、システムユニットに付いているキーボートとモニターの 組を指して ‘コンソール’という言葉を使っている人がいます。ある Linux の文書では、これを‘物理コンソール’と表現しています。この文書によれば 、システムメッセージが現れるコンソールを、 ‘論理コンソール’と表現して います。 この違いを実例で示しましょう。 X ウィンドウは物理コンソール上でスタート するでしょうが、 X ウィンドウのスタート時に発生した障害が出したシステム メッセージは、論理コンソールに書かれるはずです。 混乱を避けるため、この HOWTO ではシステムメッセージが表示される場所を ‘コンソール’という言葉で表現します。また、“物理コンソール”という混 乱を招く言葉ではなく、 “付属のモニター・キーボード”と表現を使います。 デバイス名についても同じように区別します。 /dev/console というデバイス は、コンソールにメッセージを送るのに使います。 /dev/systty というシンボ リックリンクは、付属のモニター・キーボードで使用するデバイスを指してい ます。このデバイスは、たいてい /dev/tty0 になっています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 1-1. ‘コンソール‘を指すいろいろな言葉 ┌────────┬────────┬──────────────┐ │文書 │ │ │ ├────────┼────────┼──────────────┤ │この HOWTO │"コンソール" │"付属のモニター・キーボード"│ ├────────┼────────┼──────────────┤ │ある Linux 文書 │"論理コンソール"│"物理コンソール" │ ├────────┼────────┼──────────────┤ │デバイス名 │/dev/console │/dev/systty │ └────────┴────────┴──────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4. 設定の概要 シリアルコンソールの設定には、主な段階が五つあります。 1. シリアルポートを使うため、場合によっては BIOS の設定を変えることが あります。 2. シリアルポートを使うため、必要に応じてブートローダーを修正すること があります。 3. シリアルポートをコンソールとして使えるように、 Linux カーネルを設定 しなければなりません。この場合は、ブートローダーがカーネルをスター トさせる時に、 console パラメータをカーネルに渡すようにします。 4. init システムは、シリアルコンソールからのログインを監視するため、あ るプロセスを実行し続けます。この監視するプロセスのことを、昔から getty と呼んでいます。 5. 多くのシステムユーティリティは、コンソールを認識するように設定する 、または、(すでに認識している場合は)コンソールの動作を乱さないよ うに設定する必要があります。 この HOWTO に載せている例は、 Red Hat Linux のバージョン 7.1 から 7.3 (2001 年から 2002 年にかけてリリースされました)までのものを用いていま す。 Red Hat Linux の新しいバージョンが出た際には、この HOWTO の保守担 当者に、最新情報をいただければありがたいと思います。また、 Red Hat Linux 以外の Linux ディストリビューション、特に Debian GNU/Linux と Slackware Linux に関する事例は大歓迎です。この HOWTO に貢献していただい た方々については、 Section G.3 で謝意を表しました。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 2. 準備 この章では、万一シリアルコンソールのスタートに失敗しても、元のコンソー ルをもう一度確実に使えるようにします。 それから RS-232 ポートとそのパラメータの選び方を論じます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1. 万が一に備える 有能なシステム管理者には、万が一を考えた実践的な対応策が常にあり、それ で障害を何とかうまく処理するものです。シリアルコンソールを設定する上で 誤りがあると、シリアルコンソールと付属のモニター・キーボードの両方が、 使用不能になる可能性があります。ですから、もう一度コンソールへアクセス できるようにするには、こういった対応策が必要になるのです。 Linux ディストリビューションの多くは、ブートディスクが作れるようになっ ています。コンソールの設定を変更する前にブートディスクを作れば、ブート ディスクがカーネルに渡すパラメータは正しいものになります。設定の変更後 に作ってしまうと、そのパラメータにはエラーが入っているかもしれません。 Red Hat Linux では、ブートディスクの作成前に、動作中のカーネルのバージ ョンを確認します。 ┌──────────────────────────────────┐ │bash$ uname -r │ │2.4.2-2 │ └──────────────────────────────────┘ そして、このバージョンを使ってブートディスクを作ります。 ┌──────────────────────────────────┐ │bash# mkbootdisk --device /dev/fd0 2.4.2-2 │ └──────────────────────────────────┘ 一方、Debian GNU/Linux でブートディスクを作る場合は、動作しているカーネ ルのバージョンを確認し、そのバージョンを使ってブートディスクを書きます 。 ┌──────────────────────────────────┐ │bash# mkboot /boot/vmlinuz-2.4.2-2 │ └──────────────────────────────────┘ あるいは、そのマシンを使ってレスキューディスクを用意するという方法もあ ります。良く使うのは Tom's root boot です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2. シリアルポートを選択する 2.2.1. シリアルポートの名前 Linux のシリアルポート名は、 UNIX の流儀に従っています。ですから、最初 のシリアルポートは /dev/ttyS0 というファイル名で、二番目のシリアルポー トは /dev/ttyS1 等というようになります。 しかし IBM PC のやり方は違います。この場合は、最初のシリアルポートの名 前は COM1: となり、二番目のシリアルポートは COM2: 等々、というような具 合です。 IBM PC/AT コンピュータとその後継機には、一台あたりシリアルポー トが 4 つまで搭載できます。 さらに大抵のブートローダーには、また別の命名規則があります。最初のシリ アルポートは 0、二番目は 1、等々となります。 自分の Linux ディストリビューションで、 devfs というデバイスマネージャ を使用している場合は、シリアルポートには、さらにまた別の名前があります 。最初のシリアルポートは /dev/tts/0、二番目のシリアルポートは /dev/tts/ 1 等々、というようになります。 結局、IBM PC のシャーシにあるシリアルポートは COM1: になっていますが、 それが Linux では /dev/ttyS0 となり、 devfs が使えるように設定している Linux では、それが /dev/tts/0 となります。さらに多くのブートローダーで は、ポート 0 になっています。 この HOWTO に載せている例では、この最初のシリアルポート(訳注:/dev/ ttyS0)を使っています。というのは、ほとんどの読者が使いたいと思っている のが、そのシリアルポートだからです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 2-1. 同じシリアルポートに対する様々な名前 ┌───┬──────┬────────────┬─────────┐ │ │Linux カーネ│devfs 付き Linux カーネ │大半のブートローダ│ │IBM PC│ ル │ ル │ ー │ ├───┼──────┼────────────┼─────────┤ │COM1: │ /dev/ttyS0 │ /dev/tts/0 │ 0 │ ├───┼──────┼────────────┼─────────┤ │COM2: │ /dev/ttyS1 │ /dev/tts/1 │ 1 │ ├───┼──────┼────────────┼─────────┤ │COM3: │ /dev/ttyS2 │ /dev/tts/2 │ 2 │ ├───┼──────┼────────────┼─────────┤ │COM4: │ /dev/ttyS3 │ /dev/tts/3 │ 3 │ └───┴──────┴────────────┴─────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.2. コンソールのシリアルポート用割り込みが共有できない シリアルポートをコンソール用に使うと、そのシリアルポートは他のデバイス と割り込みを共有できなくなります。 IBM PC のデバイスは、普通 Table 2-2 で示すように設置されています。ですからもしコンソール用にシリアルポート /dev/ttyS0 を使う場合は、 PC にシリアルポート /dev/ttyS2 を設置しないよ うにして、割り込み 4 を共有しないようにして下さい。 /dev/ttyS2 が物理的 に取り外せない場合は、 Figure 2-1 で示しているように、 setserial コマン ドを使ってそのポートを無効にして下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 2-2. IBM PC/AT の RS-232 ポート用に使用する割り込み ┌─────┬────┬───┐ │ デバイス │割り込み│ポート│ ├─────┼────┼───┤ │/dev/ttyS0│ 4 │0x3f8 │ ├─────┼────┼───┤ │/dev/ttyS1│ 3 │0x2f8 │ ├─────┼────┼───┤ │/dev/ttyS2│ 4 │0x3e8 │ ├─────┼────┼───┤ │/dev/ttyS3│ 3 │0x2e8 │ └─────┴────┴───┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Figure 2-1. /etc/rc.serial で setserial コマンドを使い、シリアルポート /dev/ttyS2 を無効にする。 # /dev/ttyS2 を無効にしているので、割り込み 4 は共有されない。 # というわけで、/dev/ttyS0 はシリアルコンソールに使える。 setserial /dev/ttyS2 uart none port 0x0 irq 0 ソースコードを読んでいる限りでは、割り込み共有の制約はたんに Intel Architecture-32 だけではなく、すべてのコンピュータアーキテクチャにあて はまるように思えます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3. シリアルポートの速度とパラメータを選択する この HOWTO では RS-232 標準の説明はしません。この標準は正式には、 ANSI/ TIA/EIA-232-F-1997 Interface Between Data Terminal Equipment and Data Circuit-Terminating Equipment Employing Serial Data Interchange といい ます。 ‘ 1 秒あたりのビット数(訳注:bps)’ とか ‘スタートビット’、 ‘データビット’ 、 ‘パリティ’、 ‘ストップビット’、それに ‘フロー 制御’ についての説明は、 Serial-HOWTO [3] および Modem-HOWTO [4] を参照してください。 カーネルやブートローダー、それにログインアプリケーションで、シリアルポ ートのパラメータを設定するコマンドの構文を説明する場合は、 RS-232 の特 性を表す以下の変数を使用します。 <速度> 一秒あたりのビット数で計測したシリアルリンクの速度 最近の PC で動作している Linux カーネルでは、シリアルコンソールの速 度として、 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200(ビ ット毎秒 [5])をサポートしています。 シリアルインタフェースをシリアルコンソールで使わなければ、カーネル がサポートするシリアルビットレートの範囲はもっと広がります。 [6] ごく最近の Linux カーネルでは、 USB のシリアルドングルを用いたシリ アルコンソールを、 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200ビット毎秒で使えるようにもなっています。 一方、ほとんどのブートローダーがサポートする速度範囲は、カーネルが サポートする範囲とは違っています。 LILO のバージョン 21.7.5 では、 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 56000, 57600, 115200 ビット毎秒の速度をサポートしています。また、SYSLINUX のバージョン 1.67 では、 75ビット毎秒から 56000 ビット毎秒までをサ ポートしています。 GRUB のバージョン 0.90 がサポートしている速度は 、 2400, 4800, 9600, 19200, 38400, 57600, 115200 ビット毎秒です。 シリアルポートで使用する速度は、ブートローダーと Linux カーネルの両 方で同じ速度にしなければなりません。一つのオペレーティングシステム で、複数のブートローダーを使っていることがあります。例えば、 Red Hat Linux では、オペレーティングシステムのインストールやアップグレ ードに SYSLINUX を使っています。 Red Hat Linux のバージョン 7.1 以 前ではブートローダーに LILO を使い、 7.2 以降は GRUB を使用します。 シリアル端末やダムモデムを使うつもりなら、その端末やダムモデムのビ ットレートも、ブートローダーとカーネルで用いるビットレートと合わせ る必要があります。 シリアルコンソールを 9600bps 未満のヘイズ互換モデムと接続する場合は 、そのシリアルコンソールをモデムと同じ速度に設定して下さい。 9600bps より高速のモデムの場合は、たいてい自動的にシリアルポートの 速度と同期します。 ここで選んだビットレートは、シリアルポートの UART 半導体チップでも サポートしていなければなりません。チップ上に受信バッファが無い初期 の UART では、信頼して受信できるのは 14400bps までにすぎませんでし た。この中には 8250A や 82510、 16450 それに 16550(A 無し)も入り ます。受信バッファが付いた最近の UART は、シリアルビットレート全域 で動作します。これに該当するモデルは、 16550A, 16552, 16650, 16654, 16750, 16850, 16950 です。 然るべき理由が無い限り、一般的なビットレートの 9600ビット毎秒を使っ て下さい。これが大多数のデバイスの、デフォルトビットレートになって います。 カーネルでも、3種類の一般的なブートローダーでも、それに Linux が動 作するすべての IBM PCs でもサポートしている速度といえば、 2400, 4800, 9600 それに 19200ビット毎秒です。でもこれではあまりにも選択の 幅が狭すぎます。低速の国際電話回線では電話をかけられず、かといって 、大きいファイルのアップロードに耐えられるほど高速でもないのです。 ですから場合によっては、必要な速度を選んだ結果、ソフトウェアの設定 がもっと特殊なものになってしまうかもしれません。 Figure 2-2. 拡張 BNF 記法で表したシリアルビットレート構文 <速度> ::= <数字列> <数字列> ::= <数字> | <数字><数字列> <数字> ::= 0 | 1 | … | 9 <パリティ> パリティビットの種類と、パリティビットが 1 の場合の解釈 使用できる値は、パリティ無しの場合は n 、 1 ビットの偶数パリティな ら e 、 1 ビットの奇数パリティなら o となります。 この中でも、パリティ無し、および 8 ビット幅のデータを使うことをお奨 めします。 パリティを使う場合は、普通偶数パリティを用います。 パリティはエラーを検出する基本的な方法です。最近のモデムに備わって いるエラー検出機能とエラー訂正機能は、ずっと性能が良いものになって います。しかし結果的にパリティビットが保護するのは、モデムとシリア ルポートの間のケーブル上のデータだけですから、そのケーブルのエラー 発生率が低ければパリティビットは不要です。実際、ケーブルのエラー発 生率はたぶん低いと思います。 Figure 2-3. 拡張 BNF 記法によるシリアルパリティ構文 <パリティ> ::= n | e | o <データ> 一文字あたりのデータビット数 Linux で使っているのが、最低でも 7 ビット必要な ASCII 文字セットな ので、使用できる値は 7 ビットか 8 ビットです。 データ幅は 8 ビットをお奨めします。これならリンクを簡単にファイル転 送で使えるし、英語以外のテキストが現れても大丈夫です。 Figure 2-4. 拡張 BNF 記法によるシリアルデータビット構文 <データ> ::= 7 | 8 <ストップ> ストップビットタイム数 [7] 使用できる値は、1 か 2 です。 ストップビットタイムには 1 をお奨めします。 RS-232 ケーブルが非常に長い場合は、 2 ストップビットタイム必要かも 知れません。 1.5 ストップビットタイムというのを時折見かけることがあります。これ は、1 ストップビットタイムで済ますにはリンクが長すぎるし、 2 ストッ プビットタイムが必要なほどには長いわけでもない場合に、データのスル ープットをあと 4 パーセント上げるためにそうしているのです。でも 1.5 ストップビットタイムというのは危険すぎるので、今ではめったに使いま せん。 Figure 2-5. 拡張 BNF 記法によるシリアルストップビット構文 <ストップ> ::= 1 | 2 <フロー制御> 使用するフロー制御のタイプ Linux カーネルでは、無手順と CTS/RTS のフロー制御ができるようになっ ています。 デフォルトは無手順です。これを表す場合は <フロー制御>を省略します。 推奨するのは CTS/RTS のフロー制御です。シリアルポートへのログインア クセスもできるようにもなっている場合には、特にお奨めです。これは r という <フロー制御> で表します。 CTS/RTS のフロー制御は、文字の流れを調整するものです。コンピュータ が文字を伝送するのは、モデムが "Clear To Send" をアサートしてからで す。コンピュータ側に文字を受け取るだけの充分なバッファがあれば、コ ンピュータは "Ready To Send" をアサートします。だから、コンピュータ のバッファもモデムのバッファも、飽和してオーバーフローするというよ うなことはありません。 ┌────────────────────────────┐ │ Caution │ ├────────────────────────────┤ │カーネルの CTS/RTS によるフロー制御は、現時点ではバグが │ │多いです。フロー制御が有効になっていても、 CTS がアサー │ │トされないと、コンソールメッセージの表示に著しく時間がか│ │かることがあります(モデムに着信していなかったり、ヌルモ│ │デムケーブルやケーブルでターミナルサーバー接続しても、セ│ │ッションが無い場合にこうなります)。カーネルのスタート時│ │にカーネルメッセージが大量に出ると、その結果、カーネルの│ │CTS/RTS フロー制御を組み込んで構成したマシンでは、リブー│ │トに何分も時間がかかることがあります。 │ │ │ │ですから、現時点ではカーネルの CTS/RTS フロー制御はお奨 │ │めできません。筆者はカーネルパッチを持っています。これが│ │カーネル本体に反映されることを強く希望しています。 │ │ │ │しかし、ユーザー空間のアプリケーションで使用する CTS/RTS│ │フロー制御はカーネルのバグとは無関係ですから、 getty に │ │はやはりこのフロー制御をお奨めします。 │ └────────────────────────────┘ Figure 2-6. 拡張 BNF 記法によるシリアルフロー制御の構文 <フロー制御> ::= | r 現時点では、カーネルは RS-232 のステータスラインを無視します。ですから 、 "Data Carrier Detect" と "Data Set Ready" がアサートされていなくても 、カーネルメッセージは出力されます。この結果、カーネルメッセージは、ア イドル状態でコマンドモードになっているモデムに送られることになります。 コンソールが CTS や DSR、それに DCD をいいかげんに解釈すると、 RS-232 のマルチドロップ回線に、シリアルコンソールを接続できなくなります。マル チドロップ回線には、コンピュータが 3 台以上あり、従来は 4 芯のケーブル か衛星通信サービス、あるいは無線サービスを使用しています。 Linux のカーネルでは Figure 2-7 にある構文を使って、シリアルパラメータ を記述します。ブートローダーの多くが使っている構文は、 Linux カーネルが 使っている構文のバリエーションです。 Figure 2-7. 拡張 BNF 記法によるカーネルのシリアルパラメータ構文 <モード> ::= <速度><パリティ><データ><フロー制御> <モード> に <ストップビット> が入っていないことに注意して下さい。カーネ ルは、ストップビットの数は当然 1 だと思っているのです。ですから長い RS-232 ケーブルをつなげる場合には、この欠点を考慮する必要があります。 ほとんどのブートローダーでは、 9600n8 がデフォルトになっていますが、昔 の端末になると、9600e7 が一般的なデフォルトになっています。 たいていの Linux ソフトウェアやモデム装置では 9600n8 がデフォルトになっ ているので、できればこれを使って下さい。 この HOWTO では、常にシリアルポートの速度とパラメータを設定しています。 厳密には必要無いところであってもそうしています。こうしておけば、推奨値 や一般的なデフォルトになっている 9600n8 以外のパラメータを設定している 人たちに、変更すべき箇所がわかるからです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4. モデムを設定する、あるいはヌルモデムケーブルを使う モデムを使う場合は、Section 2.3 で選んだポート速度で動作するダムモデム になるように設定して下さい。そのモデムがヘイズの AT コマンドを受け付け る場合は、 Chapter 12を参照して、モデムをダムモデムにして下さい。 端末とヌルモデムケーブルを使う場合は、 Section 11.3 を見て下さい。ここ で、ヌルモデムケーブルのピン配置を論じています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.5. 端末あるいは端末エミュレータを設定する 使う端末は、シリアルパラメータに合わせて設定して下さい。データビットや パリティビット、それにストップビットが一致しなければなりません。最近の ‘スマート’モデムを使う場合は、ビットスピードを合わせる必要はありませ ん。ダムモデムやあるいはヌルモデムケーブルを使用する場合は、ビットスピ ードを合わせる必要があります。 CTS/RTS のハンドシェークはオンにして、 DTR/DSR のハンドシェークはオフに 、そして XON/XOFF のハンドシェークもオフにしてください。お使いの装置で は、 CTS/RTS のハンドシェークや DTR/DSR のハンドシェークを‘ハードウェ アハンドシェーク’ と呼んでいるかも知れません。また、XON/XOFF ハンドシ ェークのことを、 ‘ソフトウェアハンドシェーク’と呼んでいることもありま す。 行は自動的に折り返すように設定して下さい。これで長いコンソールメッセー ジが読めるようになります。 受け取った行末文字は LF CR (つまり行送りしてから改行する)に設定して下 さい。送信する場合の行末文字は CR(改行)だけにしてください。 端末エミュレータを使う場合に一番良いのは、一般的な DEC VT100 端末か VT102 端末をエミュレートすることです。 DEC VT シリーズの、それ以降の端 末は VT100 と互換性があります。この端末が使えない場合は、 ANSI X3.64-1979 Additional Controls for Use with American National Standard Code for Information Interchange (あるいはその後継の ISO/IEC 6429:1992 ISO Information technology − Control functions for coded character sets) を実装している、別の端末をエミュレートしてみて下さい。例えば、多 くのエミュレータには ANSI BBS という端末があり、これは IBM PC の文字セ ットと、 16 色の IBM PC カラー、それに 80 桁 25 行の画面と X3.64-1979 の制御シーケンスを備えています。 端末の設定に関する詳細は、 Text-Terminal-HOWTO を参照して下さい。 [8] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 3. 必要なら BIOS の設定を行なう BIOS によっては、シリアルコンソールをサポートしているものがあります。お 使いのコンピュータの BIOS もそういった BIOS なら、サポートの程度を調査 しておくといいでしょう。シリアルコンソールのサポート度合によっては、ブ ートローダーを明示的に設定しなくても、シリアルポートが使えるかも知れま せん。 この HOWTO に協力してくれた人たちが遭遇した BIOS では、シリアルコンソー ルのサポートは、次のようになっていました。 VGA へのテキスト出力をそのままシリアルポートにリダイレクトしている BIOS は画面に表示するために使っている 0x10 という“ビデオ”の割り込 み要求を捉えて、画面に出力するはずの文字をシリアルポートに送信しま す。シリアルポートで受信した文字は、 “キーの読みとり” という、 BIOS の 0x16 割り込み要求へ与える文字として使われます。 BIOS のこの機能を使って、画面へテキストを出力したりキーボードからの 読み取りを行なっている 16 ビットのアプリケーションは、どれでもシリ アルポートにリダイレクトされます。これには BIOS 自身も入るし、ブー トローダーや 16 ビットのオペレーティングシステム(例えば MS-DOS な ど)も含まれます。 (Linux, BSD あるいは Windows NT/2000/XP といったような) 32 ビット オペレーティングシステムの場合は、16 ビットの BIOS をロードしても、 そのオペレーティングシステムではもう使用できないので、その BIOS を 入出力用には使えません。ですから、32 ビットのオペレーティングシステ ムは、 32 ビット専用のデバイスドライバをロードします。これらのデバ イスドライバは、コンソールの I/O をシリアルポートにリダイレクトする 機能を備えている必要があります。 自分の BIOS がこのテクニックを使っている場合は、次のようにしてくだ さい。 1. BIOS を設定して、キーボードからの入力と画面出力をシリアルポート にリダイレクトする。 2. ブートローダーの設定は変えないこと。というのは BIOS がこの 16 ビットアプリケーションの入出力を、シリアルポートにリダイレクト してくれるからである。 3. Linux の設定を変更して、シリアルポートをコンソールで使うように すること。というのは、 Linux が 32 ビットのオペレーティングシス テムだからである。 BIOS の設定および電源投入時のセルフテストでシリアルポートを使っている この BIOS は、設定と電源投入時のセルフテスト用にシリアルポートを使 っています。でも 0x10 の“ビデオ” 割り込み要求と、 0x16 の“キーボ ードの読みとり” 割り込み要求を、シリアルポートにリダイレクトしませ ん。 いくつかの BIOS は、通常キーボードと画面出力を、すべてシリアルポー トにリダイレクトしていますが、中には設定で BIOS の入出力のリダイレ クトだけにできるものがあります。 BIOS の設定オプションで、 Cease redirection after boot (訳注:ブート後リダイレクトを止める)に似た ものを探して下さい。 お使いの BIOS がこのテクニックを用いていたり、 Cease redirection after boot を設定するつもりなら、以下のようにしてください。 1. BIOS を設定して、その出力をシリアルポートに送るようにする。 2. ブートローダーを設定して、シリアルポートを使うようにする。 3. Linux は 32 ビットオペレーティングシステムなので、 Linux がシリ アルポートをコンソールで使うように設定する。 グラフィックの VGA 出力をシリアルポートにリダイレクトしている グラフィックの 32 ビットオペレーティングシステムの中には、コンソー ル出力をシリアルポートに送るための、専用の機能が無いものがあります 。 BIOS によっては、この欠点を克服しようとするものもあります。専用 のシリアルプロトコルを使って、グラフィック出力をリモートのシリアル クライアントに送信するのです。 Linux オペレーティングシステムを使っている場合は、標準の端末エミュ レータからはそういったマシンに接続できないので、この機能には手を触 れずにおくのが一番です。 1. 出力をシリアルポートに送らないように BIOS を設定する。 2. ブートローダーを設定して、シリアルポートを使うようにする。 3. シリアルポートをコンソールで使うように Linux を設定する。 シリアルポート機能がない この BIOS はシリアルポートからアクセスできないので、電源投入時のセ ルフテストのメッセージがわかりません。 それでも /dev/nvram デバイスを使えば、遠隔地から BIOS を設定できる かもしれません。これを使う場合は注意して下さい。 1. ブートローダーを設定して、シリアルポートを使うようにする。 2. Linux を設定して、シリアルポートをコンソールで使うようにする。 ブートローダーを設定してシリアルポートを使う必要がある場合は、 Chapter 4 に進んで下さい。それ以外は、直接 Chapter 5 に行って、カーネルの構成変 更を行なって下さい。これには、ブートローダーを設定して、ブートパラメー タを Linux カーネルに渡すという方法を使います。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 4. ブートローダーを設定する PC が CPU をブートする際、 CPU は読み出し専用メモリからコードを取り出し て実行します。このコードが基本入出力システム、つまり BIOS です。それか ら、BIOS は最初のハードディスクのマスターブートレコードから、ブートロー ダーをロードします。 [9] 続いて、ブートローダーがオペレーティングシステ ムをメモリに読み込み、それを起動します。 [10] BIOS もブートローダーも厳密に言えば不要です。例えば、こういうバージョン の Linux がありますが、これは、普 通は BIOS を内蔵しているフラッシュメモリから直接起動します。 Linux は、 もともとカーネルをディスクの然るべきセクターに置いておけば、対話的なブ ートローダーが無くても走るようになっているのです。 それでもブートローダーを使うのは、次のような利点があるからです。 ・ 複数のオペレーティングシステムがブートできます。詳細は、 Linux + Windows HOWTO を参 照してください。 ・ 対話的にパラメータをカーネルに渡せます。ハードウェアの問題を解決す る場合に、これが役に立ちます。例えば、割り込みラインのいくつかを無 効にできるし、ドライブへのダイレクトメモリアクセスを無効にできる、 等々です。カーネルパラメータのリストについては、 Linux BootPrompt-HOWTO [11] を参照してください。 ・ 別々のカーネルを対話的にロードできます。これは新しいカーネルをイン ストールする際に役立ちます。というのは、こうすれば、正しく動作する カーネルを簡単な予備にできるからです。 こういった理由から、システム管理者はシリアルコンソールから、ブートロー ダーを対話的に管理可能にする必要があるのです。 LILO や GRUB、 SYSLINUX は、 IBM PC では一般的なブートローダーです。お 使いの Linux では、これらのうちどのブートローダーを使っているのかを調べ て、そのブートローダーに該当するセクションの指示に従ってください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.1. LILO ブートローダーを設定する LILO はインテルのマシンで使われている Linux のブートローダーです。イン テルのマシン用には他にもブートローダーが存在しますが、一般的な選択肢と しては、GRUB と SYSLINUX になります。他のプロセッサアーキテクチャ用にも LILO と同等のものがあり、その名前は普通 ‘LILO’ をもじったものになって います。 LILO は lilo(8) と lilo.conf(5) のマニュアルページで文書になっています 。それに LILO Generic boot loader for Linux … User's Guide が /usr/ share/doc/lilo…/doc/User_Guide.ps にあります。 LILO mini-HOWTO [12] もあります。 LILO の設定は、 /etc/lilo.conf というファイルに保存されます。このファイ ルの最初の部分は、イメージすべてに適用するものです。それ以降の部分は、 各カーネルごとにイメージを記述する部分です。 LILO は、シリアルポートを使うように設定してください。シリアルラインのパ ラメータ構文は、カーネルが使うものに従います。 Figure 4-1. EBNF による LILO の serial コマンド書式 serial=<シリアルポート>[,<速度>[<パリティ>[<データ>]]] ここで使っている変数はカーネルが使うものと同じです(Figure 2-7 に示して あります)。また、<ポート> は以下のようになっています。 Figure 4-2. EBNF記法による LILO の serial 変数 <シリアルポート> ::= 0 | 1| … | 3 この例では /dev/ttyS0 を使っています。 LILO は、このデバイスがポート 0 だと認識しています。 Figure 4-3. LILO ブートローダーの設定サンプル serial=0,9600n8 timeout=100 restricted password=PASSWORD restricted パラメータ、および password パラメータを使用しているのは、誰 かが電話を使って接続してそのマシンをブートし、以下のようにタイプして、 Linux のアクセスパーミッションの辺りをうろつきまわる、というようなこと をさせないようにするためです。 Example 4-1. カーネルパラメータを使ってアクセスパーミッションを回避する ┌──────────────────────────────────┐ │LILO: linux init=/sbin/sash │ └──────────────────────────────────┘ パスワードは(他人が推測できない)良いものにしてください。というのは、 パスワードを使えば、 root のアクセス権限を得られるからです。 LILO のパ スワードは、設定ファイルの中に平文で書かれています。ですから、けっして 他のどんなパスワードとも同じものにしないでください。また、/etc/ lilo.conf を読めるのが root だけになるように、このファイルのパーミッシ ョンを設定してください。 ┌──────────────────────────────────┐ │bash# chmod u=rw,go= /etc/lilo.conf │ └──────────────────────────────────┘ LILO には、ブートメッセージを表示するオプションがありますが、これはシリ アルコンソールでは動作しません。ですから以下のような行はすべて削除して 下さい。 message=/boot/message これでシリアルコンソールを使うための LILO の設定ができました。しかし、 まだ LILO でブートするカーネルを、シリアルコンソールを使うように設定し なければなりません。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2. GRUB ブートローダーを設定する GRUB は様々なファイルシステムから、様々な種類のオペレーティングシステム がブートできるように設計されたブートローダーです。 Linux がインストール できるルートファイルシステムの種類がますます多くなってきているので、 GRUB は一般的になりつつあります。 GRUB は GNU の info ファイル形式で文書になっています。この文書を見る場 合は、 info grub とタイプして下さい。 GRUB の設定ファイルは、 /boot/grub/menu.lst です。しかし、ディストリビ ューションによっては、別の設定ファイルを使っているものもあります。例え ば、 Red Hat Linux では /boot/grub/grub.conf というファイルを使っていま す。 GRUB の設定ファイルは実行時に解釈されます。このためマシンをリブートする まで、構文上のエラーは検出されません。ですから、タイプミスをしないよう に気をつけて下さい。 まず、GRUB の設定ファイルを編集して、 splashimage のエントリは、いずれ も削除して下さい。このエントリを削除しないと、 GRUB 0.90 では非常に奇妙 な動きになります。シリアルコンソールと付属のモニター・キーボードとの間 で、制御を転送しあってしまいます。 GRUB の設定ファイルに password コマンドがまだ無い場合は、ハッシュしたパ スワードを作って下さい。作り方は Figure 4-4 を参照して下さい。このパス ワードは root のアクセス権限を得るのに使えますから、良い(推定されにく い)ものにしてください。 Figure 4-4. md5crypt を使って、 GRUB 用のハッシュしたパスワードを作る ┌──────────────────────────────────┐ │grub> md5crypt │ │Password: ********** │ │Encrypted: $1$U$JK7xFegdxWH6VuppCUSIb. │ └──────────────────────────────────┘ このハッシュ化されたパスワードを GRUB の設定ファイルで使って下さい。こ の様子は、 Figure 4-5 に示してあります。 Figure 4-5. パスワードを要求するようにした GRUB の設定 password --md5 $1$U$JK7xFegdxWH6VuppCUSIb. Figure 4-6 に示すように、シリアルポートを定義し、そのシリアルポートを使 うように GRUB を設定して下さい。 Figure 4-6. シリアルコンソール用の GRUB の設定 serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1 terminal serial --unit というのはシリアルポートの番号のことで、ゼロから数えます。 unit 0 が COM1 になります。 --parity の値は省略せずに、 no や even そして odd のように、一字一字は っきりと綴って下さい。 n や e そして o のような、一般によく使われる省略 形は受け付けません。 なぜだか分からないけれども、シリアルポート上に出力が何もない場合は、 serial コマンド、または terminal コマンドの構文エラーを疑って下さい。 シリアルポートの他に、付属のモニター・キーボードでも GRUB ブートローダ ーを管理したい場合は、 Figure 4-7 にある別の設定を使って下さい。 Figure 4-7. シリアルコンソールおよび、付属のモニター・キーボード用の GRUB の設定 password --md5 $1$U$JK7xFegdxWH6VuppCUSIb. serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1 terminal --timeout=10 serial console シリアルポートと付属のモニター・キーボードの両方を設定すると、タイムア ウトになるまで、両方のデバイスでキーの押下が要求されます。キーが押され ると、キーを押したそのデバイスにブートメニューを表示します。ちょっとま ごつくかもしれませんが、他のデバイスには何も現れません。 キーを何も押さないと、 terminal コマンドで serial か console のいずれか 最初に記述してある方にブートメニューを表示します。 timeout で設定された 時間が満了した後、 default で設定されたデフォルトオプションの内容でブー トします。 Figure 4-8. シリアルコンソールと付属のモニター用に設定した場合の、デフ ォルトデバイスへの GRUB の出力 ┌────────────────────────────────────────┐ │Press any key to continue. │ │Press any key to continue. │ │Press any key to continue. │ │Press any key to continue. │ │Press any key to continue. │ │Press any key to continue. │ │Press any key to continue. │ │Press any key to continue. │ │Press any key to continue. │ │Press any key to continue. │ │ │ │ GRUB version 0.90 (639K lower / 162752K upper memory) │ │ │ │ +-------------------------------------------------------------------------+ │ │ | [ Red Hat Linux (2.4.9-21) ] | │ │ | | │ │ | | │ │ +-------------------------------------------------------------------------+ │ │ Use the ^ and v keys to select which entry is highlighted. │ │ Press enter to boot the selected OS or 'p' to enter a │ │ password to unlock the next set of features. │ │ │ │ The highlighted entry will be booted automatically in 10 seconds. │ └────────────────────────────────────────┘ VT100 端末を使っていない場合は、カーソルキーを使った GRUB のメニュー項 目の選択ができないかもしれません。しかし、 Figure 4-8 に示したやり方は 、文字とおり正しいのです。 Use the ^ and v keys は、キャレット(^)キー( Shift-6)でカーソルが上方に動き、 v キー (V) でカーソルが下方に動くとい う意味です。 GRUB の設定に際しては、 2 種類のタイムアウトが関係していることに注意し て下さい。 Press any key to continue は terminal --timeout=10 コマンド で設定した時間だけ表示されており、キーボードか端末でだれかがキーを押し て、入力フォーカスを取得するのを待っています。それからメニューが timeout 10 秒間表示されて、その後でデフォルトのブートオプションが採用さ れます。 シリアルポートに取り付けた端末が、本物の VT100 でも VT100 のエミュレー タでもない場合は、 GRUB のコマンドラインインタフェースを使わざるをえま せん。このインタフェースは GRUB のメニューインタフェースよりもずっと難 しいのですが、 VT100 の端末言語が無くても使えます。 Figure 4-9. VT100 以外の端末でコマンドラインインタフェースを使う場合の GRUB の設定 terminal --timeout=10 --dumb serial console この HOWTO では、 GRUB のコマンドラインの使用方法は説明しません。このコ マンドラインははるかに複雑なうえエラーが出易いので、本番機で使うのはお 奨めできません。名人なら、カーネルのブートに必要なコマンドは GRUB の info マニュアルを調べればいいはずだということはわかっているでしょう。 GRUB のメニューは、 P を押してパスワードを入力したら、対話的に編集でき るようになります。メニュー項目を追加して、別のランレベルでマシンをブー トするというのがうまいやり方です。デフォルトランレベル用のメニューエン トリとシングルユーザーモード(ランレベル s)用のメニューエントリの設定 サンプルを Figure 4-10 に示してあります。シングルユーザーモードについて は、lock コマンドを使ってパスワードを要求するのを忘れないで下さい。シン グルユーザーモードでは、 Linux のパスワードが要求されません。 Figure 4-10. GRUB のメニューにシングルユーザーモードのオプションを追加 する password --md5 $1$U$JK7xFegdxWH6VuppCUSIb. default 0 title Red Hat Linux (2.4.9-21) root (hd0,0) kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6 initrd /initrd-2.4.9-21.img title Red Hat Linux (2.4.9-21) single user mode lock root (hd0,0) kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6 s initrd /initrd-2.4.9-21.img kernel コマンドと initrd コマンドにあるファイル名は、 GRUB をインストー ルしたディレクトリからの相対パスになっています。 GRUB をインストールす るディレクトリは、普通 /boot/grub です。ですから、 /vmlinuz-2.4.9-21 と いうのは、実際は /boot/grub/vmlinuz-2.4.9-21 というファイルになります。 これでシリアルコンソールが使えるように GRUB を設定しました。しかしまだ 、 GRUB からブートするカーネルを、シリアルコンソールが使えるように設定 しなければなりません。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3. SYSLINUX ブートローダーを設定する SYSLINUX は、MS-DOS のフロッピーディスク上 にインストールするブートローダーです。 \SYSLINUX.CFG という設定ファイル が指示する内容にしたがって、フロッピーディスクからファイルを一つ、 Linux カーネルとしてロードします。 SYSLINUX では簡単なテキストインタフェースを用意しています。これを使って 、設定ファイルに定義してある、予め用意した設定の中からロードするカーネ ルが選べるし、カーネルに与えるパラメータを追加することもできます。 ISOLINUX と PXELINUX は SYSLINUX の変形版で、 CD-ROM と Intel の Preboot Execution Environment で 使うものです。 SYSLINUX は、シリアルポートの速度については、幅広くサポートしていますが 、速度以外では、8 ビットデータ、パリティ無し、1 ストップビットしかサポ ートしていません。シリアルポートは、 COM1: から COM4: までをサポートし ています。たいていのブートローダーでもそうですが、これを 0 から 3 まで の数字に割り当てて、ポート 0 とかポート 3 というように書きます。 SYSLINUX でシリアルポートをサポートするには、以下のコマンドを \ SYSLINUX.CFG の最初の行に新しく追加します。 Figure 4-11. EBNF 記法による、 SYSLINUX の serial コマンド構文 serial <空白> <シリアルポート> [ <空白> <速度> [ <空白> ] ] この変数で使用している構文は、 Figure 2-7 と Figure 4-2、さらに Figure 4-12 で使っているものと同じです。 Figure 4-12. EBNF 記法による、 SYSLINUX の serial 変数 <空白> ::= ‘ ’ ::= <16 進数字列> <16 進数字列> ::= 0x<16 進数字><16 進数字><16 進数字> <16 進数字> ::= 0 | 1 | … | 9 | a | b | … | f 変数は RS-232 のステータスを管理するもので、フロ ー制御信号はオプションです。ご自分のヌルモデムケーブルにステータス信号 やハンドシェーク信号が何も現れない場合は、この変数を使わないでください 。 の値は、 Table 4-1 にリストしてあるフロー制御 の動作のうち、望ましい値を 16 進数で追加すれば計算されます。 正しく結線したヌルモデムケーブルや、正しい設定のモデムを使用するうえで 必要なことは、表中の “RS-232 の完全準拠に必要か?” の欄で示してありま す。これらの値の合計は 0xab3 になります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 4-1. SYSLINUX のフロー制御ビットマップ ┌────────────┬───┬────────────────┐ │ │16 進 │以下の各信号の制御は RS-232 への│ │ フロー制御の動作 │ 数値 │ 完全準拠に必要か? │ ├────────────┼───┼────────────────┤ │DTR をアサートする │0x001 │ 必要 │ ├────────────┼───┼────────────────┤ │RTS をアサートする │0x002 │ 必要 │ ├────────────┼───┼────────────────┤ │CTS のアサートを待つ │0x010 │ 必要 │ ├────────────┼───┼────────────────┤ │DSR のアサートを待つ │0x020 │ 必要 │ ├────────────┼───┼────────────────┤ │RI のアサートを待つ │0x040 │ 不要 │ ├────────────┼───┼────────────────┤ │DCD のアサートを待つ │0x080 │ 必要 │ ├────────────┼───┼────────────────┤ │CTS がアサートされない限│0x100 │ 不要 │ │り入力を無視する │ │ │ ├────────────┼───┼────────────────┤ │DSR がアサートされない限│0x200 │ 必要 │ │り入力を無視する │ │ │ ├────────────┼───┼────────────────┤ │RI がアサートされない限 │0x400 │ 不要 │ │り入力を無視する │ │ │ ├────────────┼───┼────────────────┤ │DCD がアサートされない限│0x800 │ 必要 │ │り入力を無視する │ │ │ └────────────┴───┴────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ここで設定したい、 9600bps, ポート 0, 完全な RS-232 ステータス信号、CTS /RTS のフロー制御といった内容は次のように書きます。 serial 0 9600 0xab3 Tip: この設定を使用すると、モデムが電話で接続されたこと(あるいは、 ヌルモデムケーブルを使っていれば、端末がつながったこと)を RS-232 のステータス信号が示すまで、 SYSLINUX は何も表示しないし、キーボー ドでタイプしたどんな文字も受け付けません。 お持ちのヌルモデムケーブルに RS-232 のステータス信号が無く、無手順なら 、以下のコマンドを使って下さい。 serial 0 9600 忘れないで下さい。 serial は \SYSLINUX.CFG の中の最初の行でなければなり ません。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 5. Linux カーネルの設定変更 Linux カーネルは設定を変更し、与えられた console パラメータを用いてシリ アルコンソールを使うようにします。 console パラメータは繰り返し与えるこ とができます。その場合出力はすべてのコンソールに送られ、入力は一番最後 にリストしてあるコンソールから取得します。この一番最後の console は Linux が /dev/console デバイスに使うものです。 console のパラメータ構文は Figure 5-1 に示してあります。 Figure 5-1. EBNF 記法によるカーネルの console 構文 console=ttyS<シリアルポート>[,<モード>] console=tty<仮想端末> console=lp<パラレルポート> console=ttyUSB[[,<モード>] <シリアルポート> はシリアルポートの番号です。これは Figure 4-2 で定義し てありますし、 Section 2.2 で説明しています。この HOWTO の例では、最初 のシリアルポートを使い、 <シリアルポート> に 0 という値を与えています。 そして今度はこれが、カーネルパラメータに console=ttyS0 という値を渡して います。 ご自分の Linux 機で devfs デバイスファイルシステムを使っている場合、最 初のシリアルポートに対するカーネルパラメータは、やはり ttyS0 になります 。これは、この最初のシリアルデバイスが、 /dev/ttyS0 ではなく、 /dev/ ttys/0 だとしても、そうなります。 <モード> は、 Figure 2-7 で定義してあります。さらに、Section 2.3 で説明 しています。この HOWTO の例で使用しているのは、速度が 9600ビット毎秒、1 スタートビット、データは 8 ビット、パリティ無し、1 ストップビット、およ び CTS/RTS によるフロー制御無しです。ですから <モード> には 9600n8 とい う値を与えています。しかし、現在のカーネルにあるフロー制御のバグが修正 された時は、この HOWTO で、再度 9600n8r を推奨します。 には、シリアルコンソールに使うシリアルポートを搭載している 、 USB ドングル [13] のアドレスが指定できます。例えば、 console= ttyS0,9600n8 というシリアルポートは、 USB のシリアルドングルに移すと、 console=ttyUSB0,9600n8 と書くことになります。 USB サブシステムがスター トするのはブートする過程のむしろ最後のほうなので、 USB サブシステムのロ ード前に出たコンソールメッセージは失われます。 console パラメータを何も付けないと、カーネルは /dev/tty0 という、最初の 仮想端末を使います。ユーザーはキーボードで Ctrl-Alt-F1 と押して、この仮 想端末を使用します。 お使いのコンピュータにビデオカードがあるなら、それもコンソールで使える ように設定したらどうでしょうか。カーネルパラメータの console=tty0 を使 えばそうなります。 ビデオカードを搭載しており、‘COM1:’ という印のポートにシリアルコンソ ールも付いているコンピュータについては、この HOWTO では次のカーネルパラ メータをお奨めします。 Figure 5-2. ビデオカード付 PC で推奨するカーネルパラメータ console=tty0 console=ttyS0,9600n8 カーネルメッセージは、最初の仮想端末とシリアルポートの両方に現れます。 ですが、init システムとシステムログ採取プログラムが出すメッセージは、最 初のシリアルポートにしか現れません。ですから、付属のモニターを見ると、 若干混乱するかもしれません。マシンがブートして、それからハングするよう に見えるからです。でもうろたえないで。 init システムはスタートしていま す。でもその時は、シリアルポートにはメッセージを表示していますが、付属 モニターの画面には何も表示していないのです。 getty を設定していれば、最 終的には login: プロンプトが、付属のモニター上に現れます。 ビデオカードが付いていない PC については、この HOWTO では次のようなカー ネルパラメータをお奨めします。 Figure 5-3. ビデオカード無しの PC で推奨するカーネルパラメータ console=ttyS0,9600n8 これらのパラメータは、ブートローダーがブートするカーネルに渡します。次 に、ご自分の Linux 機で使用しているブートローダーを設定し、 console パ ラメータをカーネルに渡すようにします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.1. LILO を使った Linux カーネルの設定 /etc/lilo.conf の各 image エントリに対して、以下の行を追加して下さい。 Figure 5-4. LILO を設定する際の、推奨するカーネルパラメータ append="console=tty0 console=ttyS0,9600n8" 既に append 行が存在することもあります。例えば以下のようなものです。 append="mem=1024M" この場合、既存の append 行は、パラメータすべてを渡すように修正します。 結果は次のとおりです。 append="mem=1024M console=tty0 console=ttyS0,9600n8" 設定全文の例として、 Red Hat Linux 7.1 の典型的な /etc/lilo.conf の設定 を以下に示します。 Example 5-1. ベンダーがインストールした、 LILO の設定の全文 boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 message=/boot/message default=linux image=/boot/vmlinuz-2.4.2-2 label=linux read-only root=/dev/hda6 initrd=/boot/initrd-2.4.2-2.img これを次のように修正します。 Example 5-2. シリアルコンソール向けの修正を加えた、LILO 設定の全文 boot=/dev/hda map=/boot/map install=/boot/boot.b prompt default=linux # COM1 のシリアルコンソール向け変更:グローバルセクション内 # message=/boot/message を削除 serial=0,9600n8 timeout=100 restricted password=de7mGPe3i8 image=/boot/vmlinuz-2.4.2-2 label=linux read-only root=/dev/hda6 initrd=/boot/initrd-2.4.2-2.img # COM1 のシリアルコンソール向け変更:各イメージセクション内 append="console=tty0 console=ttyS0,9600n8" さて、これで LILO の設定が終了しました。 lilo コマンドを使って新しいブ ートレコードをディスクにインストールしましょう。 ┌──────────────────────────────────┐ │bash# chown root:root /etc/lilo.conf │ │bash# chmod u=rw,g=,o= /etc/lilo.conf │ │bash# lilo │ │Added linux * │ └──────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.2. GRUB を使っている Linux カーネルの設定 GRUB の設定ファイルで、各 title エントリを見つけてください。そのエント リの後に kernel 行が続いています。例えば、次のようなものです。 title Red Hat Linux (2.4.9-21) root (hd0,0) kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6 initrd /initrd-2.4.9-21.img 各 kernel 行を修正して、シリアルコンソールを使うことをカーネルに通知す るパラメータを追加します。 Figure 5-5. GRUB の設定で推奨するカーネルパラメータ title Red Hat Linux (2.4.9-21) root (hd0,0) kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6 console=tty0 console=ttyS0,9600n8 initrd /initrd-2.4.9-21.img Example 5-3 が設定全文の例になっています。これは、 Red Hat Linux 7.2 の 、典型的な GRUB の設定です。 Example 5-3. ベンダーがインストールした、GRUB の設定の全文 default=0 timeout=10 splashimage=(hd0,0)/grub/splash.xpm.gz password --md5 $1$wwmIq64O$2vofKBDL9vZKeJyaKwIeT. title Red Hat Linux (2.4.9-21) root (hd0,0) kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6 initrd /initrd-2.4.9-21.img 修正した設定ファイルは Example 5-4 に示してあります。 Example 5-4. シリアルコンソール用に修正した、GRUB の設定の全文 default=0 timeout=10 password --md5 $1$wwmIq64O$2vofKBDL9vZKeJyaKwIeT. serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1 terminal --timeout=10 serial console title Red Hat Linux (2.4.9-21) root (hd0,0) kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6 console=tty0 console=ttyS0,9600n8 initrd /initrd-2.4.9-21.img title Red Hat Linux (2.4.9-21) single user mode lock root (hd0,0) kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6 console=tty0 console=ttyS0,9600n8 s initrd /initrd-2.4.9-21.img ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.3. SYSLINUX を使っている Linux カーネルの設定 各 LABEL エントリを編集して、 Linux カーネルに渡すシリアルコンソールパ ラメータを含めた、 APPEND 行を追加して下さい。 LILO 同様、既にこのパラ メータがある場合は、 APPEND の後のリストに、このパラメータを追加して下 さい。 例えばこのようになります。 Figure 5-6. SYSLINUX の設定で推奨するカーネルパラメータ APPEND console=tty0 console=ttyS0,9600n8 でも初心者には、 LILO と SYSLINUX の違いからくる罠がいくつかあります。 LILO では append= を使います。ところが SYSLINUX では、ただ append だけ です。それに、 LILO では、 /etc/lilo.conf を変更するたびに lilo を実行 する必要がありますが、 SYSLINUX では、 \SYSLINUX.CFG を変更した後でも syslinux を実行する必要はありません。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 6. getty を設定する getty はシリアルラインを監視して接続を待っています。接続後シリアルリン クを確立し、 /etc/issue の内容を送信し、ユーザーにログイン名を要求しま す。それから getty は login をスタートさせ、 login がユーザーにパスワー ドを要求します。ユーザーが何もしないと、 getty あるいは login はハング アップし、 getty は待ち状態に戻ります。 getty コマンドは過去何度となく再実装されてきました。ですから getty のク ローンには幅広い選択肢があり、それぞれがその動作と構文の点で少しずつ異 なっています。ここでは従来の getty の説明をして、それから他にもよく使わ れているものを取り上げます。 getty の仕事の一つは、 TERM 環境変数を設定し、接続している端末の種類と 型を表すことです。この HOWTO では、端末を一般的にエミュレートされている DEC VT100 に設定します。でもたまに別の端末エミュレーションを使って接続 することがあるのなら、対話的に別の端末に設定し直すこともできます。 /etc /termcap に載っている端末の内、適切なものを TERM に設定してください。 Figure 6-1. 接続している端末の種類と型を対話的に変更する ┌──────────────────────────────────┐ │bash$ TERM=kermit │ │bash$ tset -r │ └──────────────────────────────────┘ でもまずは、getty がそもそもどうやってスタートするのかを見てみましょう 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.1. init システム /etc/inittab ファイルにはバックグラウンドプログラムが含まれており、これ らを使ってシステムを動かし続けます。こういったプログラムの一つが getty で、シリアルポート一つにつき 1 個の getty プロセスがあります。 Figure 6-2. getty は、 /etc/inittab のエントリに基づき init が起動する ┌──────────────────────────────────┐ │co:2345:respawn:/sbin/getty ttyS0 CON9600 vt102 │ └──────────────────────────────────┘ inittab の各フィールドはコロン (:) で区切られており、以下のものを含んで います。 co inittab 内の任意のエントリです。このエントリが inittab の他の場所に 現れていない限り大丈夫です。このエントリはコンソール用なので、 co という名前にしました。 Red Hat Linux 7.3 には kudzu というプログラムがあり、ブート時にシス テム設定を行ないます。 kudzu は co という inittab のエントリを特別 扱いします。このエントリを用いて、付属のモニター・キーボード、ある いはシリアルコンソールの設定を行なうのです。 co の値をハードコーデ ィングすれば、これは防げます。 2345 このエントリがスタートするランレベルです。動作可能なシステムについ ては、ランレベル 2、3、4 それに 5 が使えます。他のランレベルでは getty は使わないでください。シリアルコンソールは、ランレベル 1 (な いしはシングルユーザーモード)で、 getty が無くても動作します。 respawn そのプログラムが死んだ場合に、それを再起動します。コンソールからロ グアウトしたとき、新しい login プロンプトが現れるように、再起動させ たいんです。 /sbin/getty ttyS0 CON9600 vt102 実行すべきコマンドです。この場合、 /etc/gettydefs に存在する CON9600 の設定を使って、 /dev/ttyS0 に接続するよう、 getty に指示し ています。このエントリは 9600bps で動いている端末を表しています。こ の端末は VT100 の後継モデルだと最初に仮定しています。 /etc/inittab の変更後、以下のコマンドを使って init を再起動します。 ┌──────────────────────────────────┐ │telinit q │ └──────────────────────────────────┘ あるいは kill -HUP 1 コマンドを使って、 init にハングアップシグナルを送 ってもかまいません。でもこの方法はお奨めしません。というのは、もしタイ プミスをして、本当に init を殺してしまうと、その瞬間にシステムが突然停 止してしまうからです。 inittab 内のコメントと Red Hat の kudzu: kudzu は # のコメント行を 使って、付属のモニター・キーボードやシリアルポートに対する getty の 起動や停止を行なっています。本当のコメントと kudzu で保存している行 が混乱しないように、本物のコメント行は、 ## で始めて下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2. 従来の getty 従来実装されてきた getty には、 uugetty と getty_ps があります。 従来の getty は、 /etc/gettydefs にあるセクション名で、 /etc/inittab に 載っています。このセクション名は、その getty の設定に用います。 Figure 6-2 の例では、 CON9600 というセクションを使いました。 標準の gettydefs には、 CON9600 はありません。わざとこうしました。シリ アルコンソールでは、若干ひねってみるのが必要なときがたまにあるのです。 DT9600 エントリをコピーして、それを自分のモデルに使って下さい。 Figure 6-3. gettydefs に CON9600 を定義する # シリアルコンソール 9600, 8, N, 1, CTS/RTS フロー制御 CON9600# B9600 CS8 -PARENB -ISTRIP CRTSCTS HUPCL # B9600 SANE CS8 -PARENB -ISTRIP CRTSCTS HUPCL #@S @L login: #CON9600 各々の行は空行で区切って下さい。 各々の設定行の構文は以下のとおりです。 Figure 6-4. EBNF記法による、/etc/gettydefs のエントリ構文 <ラベル># <初期フラグ> # <最終フラグ> #<ログインプロンプト>#<次のラベ ル> <ラベル> は、 getty コマンドラインで参照します。 <次のラベル> は、 RS-232 のブレーク信号が送られたら使う定義です。コンソ ールが使用する速度は常に 9600bps なので、ここでは最初のラベルをもう一度 指し示すことになります。 gettydefs の中で、 CON9600 をもう一行書くつも りなら、 Section 9.9 を参照して下さい。 <初期フラグ> は getty が使うシリアルラインのパラメータです。これらの元 になったのは、stty(1) のオプションと termios(3) のオプションですが、こ のパラメータの完全なリストは、使っている getty の種類によって様々です。 Figure 6-3 のパラメータでは、データが 8 ビット、パリティ無しの、 9600 bps で、確かに設定されています。 <最終フラグ> は、 getty が login を呼び出す前に設定する、シリアルライン のパラメータです。通常は、 9600bps のラインで、端末の取り扱いは SANE 、 データは 8 ビット、パリティ無し、およびログインセッション終了後モデムは ハングアップ、という設定にする必要があります。 シリアルラインに対する伝統的な <ログインプロンプト> は、まずマシン名、 続いてシリアルポート、さらに login: という文字列、最後に空白を一つです 。マシン名とシリアルポートを挿入するマクロは様々ですから、自分が使って いる getty のドキュメントを見て下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3. agetty agetty は “また別の getty” です。すべてのパラメータはコマンドラインか ら取得し、 /etc/gettydefs や、その他の設定ファイルはいっさい使いません 。 agetty に関する文書は、マニュアルページの agetty(8) にあります。 Figure 6-5 には、シリアルラインで使うために agetty を起動する方法を示し ています。 Figure 6-5. agetty 用の /etc/inittab エントリ co:2345:respawn:/sbin/agetty -h -t 60 ttyS0 9600 vt102 ttyS0 は /dev/ttyS0 というシリアルデバイスを指しています。 9600 は、シリアルリンクを流れる 1 秒あたりのビット数です。 agetty では 複数種類の値をサポートします。その中から選ぶには、モデムの CONNECT メッ セージや、あるいは RS-232 のブレーク信号を使います。シリアルコンソール にはデータレートが 1 種類しかないので、使う値は一つだけにしてください。 vt102 の部分は、 TERM 環境変数を設定し、 VT100 端末が接続中であることを 示します。 -h は CTS/RTS のハンドシェークを行なうようにします。 -t 60 によって、モデムは 60 秒後にハングアップしますから、ログインでき るのはこの 60 秒間です。この機能はちゃんとテストして、リンクがアイドル 状態の時に、 init が 60 秒ごとに agetty を再起動していないことを確認し た方がいいです。 agetty のプロセス ID が頻繁に変わっていないかどうか調 べて下さい。 agetty は /etc/issue 内のエスケープシーケンスを使って、情報を挿入します 。例えば、 \n.\o \l は remote.example.edu.au ttyS0 というように表示され ます。 [14] ログアウトしても、 agetty が "Date Terminal Ready" 信号を落とし、モデム をハングアップさせるようには見えません。ログインセッションの終りに、自 動的に接続を切るのが重要なことなら、 agetty の代わりに mgetty の使用を 考えてみてはどうでしょうか。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4. mgetty mgetty はモデムをサポートする getty です。ヘイズの AT コマンドセットを 備えたモデムをサポートしており、着信の他に、ファックス送信や発呼に使用 されるモデムのサポート用として、特別に設計されています。しかし、こうい った機能はシリアルコンソールでは不要です。 mgetty には従来の /etc/gettydefs ファイルは不要です。結果として、 mgetty は /etc/gettydefs にエントリを書かなくても、 /etc/inittab から起 動します。 Figure 6-6. mgetty 用 /etc/inittab エントリ co:2345:respawn:/sbin/mgetty ttyS0 mgetty の設定には、 /etc/mgetty+sendfax/mgetty.config というファイルを 使います。このファイルには、シリアルコンソールが使用するポート用のエン トリがあるはずです。 Figure 6-7. mgetty の設定ファイル、 mgetty.config port ttyS0 speed 9600 direct yes data-only yes toggle-dtr yes need-dsr yes port-owner root port-group root port-mode 600 login-prompt @ \P login:\040 login-time 60 term vt102 これらのオプションはすべて /usr/share/doc/mgetty…/mgetty.ps という、ポ ストスクリプトファイル形式の文書になっています。 direct と data-only、need-dsr および toggle-dtr は yes に設定します。こ れで RS-232 の制御ラインはダムモデム用として正しく使われます。 port-owner と port-group それに port-mode は、 root ユーザーだけがシリ アルデバイスにアクセスできるようにします。モデムのアプリケーションには 、普通 uucp グループを用います。ですからこうしておけば、モデムのアプリ ケーションが、誤ってシリアルコンソールにアクセスしてしまうようなことは 不可能になります。 login-prompt は現在使用中のマシン (@) とシリアルポート(\P) を表していま す。 \040 というテキストは、たんに login: の後ろに空白を表示する 8 進数 のコードです。 term vt102 には、接続元で使いそうな端末の種類と型を指定します。この内容 で TERM 環境変数の値が決まります。別の種類の端末から電話するつもりなら 、この環境変数は変えてもかまいません。 残りの設定ファイル、 /etc/mgetty+sendfax/dialin.config と /etc/ mgetty+sendfax/login.config は、変更する必要はありません。 ここで提示している設定を変えたい場合、注意して欲しいのは、 mgetty の blocking パラメータと toggle-dtr パラメータを一緒に使うのは難しいという ことです。 問題があれば、 mgetty.config に debug 8 を追加して、デバッグ機能を動か して下さい。こうすれば mgetty の動作が /var/log/mgetty.log.ttyS0 ファイ ルで明らかになります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.5. mingetty mingetty は、ワークステーションのモニター・キーボードで仮想端末が使える ように、必要最小限の機能に絞った getty になっています。ですから、これに はシリアルラインのサポートはありません。 mingetty を /etc/inittab で、シリアルライン用に使ってはいけません。しか し、今ある仮想端末用の mingetty エントリは、そのままでもかまいません。 仮想端末は、一台あたり約 8KB のカーネルメモリを使用します。しかしこれで も多過ぎるようなら、生成する仮想端末数をもっと減らすのは簡単です。 Linux の 2.4 カーネルでは、必要に応じて仮想端末を生成します。ですから、 仮想端末で mingetty を起動しなければ、仮想端末は生成しません。マシンに ビデオカードが無い場合は、 /etc/inittab から mingetty のエントリをすべ て削除して下さい。 Figure 6-8. 仮想端末の数を減らす。/etc/inittab から mingetty エントリを 取り除く。 1:2345:respawn:/sbin/mingetty tty1 # 余分な仮想端末は使わない # 2:2345:respawn:/sbin/mingetty tty2 # 3:2345:respawn:/sbin/mingetty tty3 # 4:2345:respawn:/sbin/mingetty tty4 # 5:2345:respawn:/sbin/mingetty tty5 # 6:2345:respawn:/sbin/mingetty tty6 init の再起動後は、未使用のデバイスファイルを取り除いてしまうのが賢明だ ろうと思います。 Figure 6-9. 仮想端末を減らす。未使用の仮想端末を解放し、そのデバイスフ ァイルを削除する。 ┌──────────────────────────────────┐ │bash# telinit q │ │bash# deallocvt /dev/tty[2-9] /dev/tty[0-9][0-9] │ │bash# rm /dev/tty[2-9] /dev/tty[0-9][0-9] │ └──────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.6. getty 無し シリアルコンソールを、コンソールメッセージの印刷にしか使わないのなら、 シリアルポートで getty プロセスを動かさないでください。 ロックというのは、シリアルポートを使う他のアプリケーションに、このシリ アルポートを使わせないようにするためのもので、 getty は、このロックの約 束ごとに従います。このシリアルポートは他のプロセスには使わせたくないの ですが、ここでは getty は動かしていません。ですからロックファイルは手作 業で作成して下さい。 /var/lock/LCK..ttyS0 というファイルを作って、そこに 1 というテキストを 入れて下さい。これが将来シリアルポートを使う可能性があるアプリケーショ ンに、プロセス 1 がこのシリアルポートを使用中だということを教えることに なります。プロセス 1 というのは常に init プロセスです。そして init はい つでも稼働中です。ですからこのシリアルポートはいつもロックされているわ けです。 ロックファイルはシステムがブートする時によく削除されますから、このファ イルはブートするたびに作成します。ロックファイルを作るのに都合が良い場 所は /etc/rc.serial です。この中には以下のことを書いてください。 Figure 6-10. getty を使わない場合に、コンソールのシリアルポートをロック する、 /etc/rc.serial の内容 # 出力専用のコンソールが使用するので、/dev/ttyS0 をロック (umask 022 && \ rm -f '/var/lock/LCK..ttyS0' && \ echo '1' > '/var/lock/LCK..ttyS0') ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 7. 付随するその他の設定 シリアルコンソールをちゃんと動かす前に、他にも驚くほど多くの設定ファイ ルに、こまごまとした修正が必要です。 多くの項目をどう設定するかは、セキュリティに対する要求条件によって違っ てきます。特に遠隔地のサイトがどの程度信頼できて、それに対応して、どの くらいのセキュリティが必要なのかに依存するのです。この HOWTO では、遠隔 地のサイトには高いセキュリティが必要だと仮定して、かなり多くの設定項目 を例示することがあります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.1. シリアルコンソールから root がログインできるようにする。 /etc/securetty ファイルは、 root ユーザーがログインできるデバイスを管理 するものです。 普通は root を、コンソールからログインできるようにしておきたいものです 。そこで /etc/securetty にシリアルコンソールデバイスのベース名を追加し て下さい。 Figure 7-1. root がシリアルコンソールからログインできるように、 securetty を変更する。 ttyS0 しかしこれだと、ほとんど誰でもモデムに電話をかけて接続し、 root のパス ワードを推測してみることが可能です。でも普通は、遠隔サイトから root で ログインできるようにはしません。それよりも、一般ユーザーでログインし、 それから su か sudo を使って root にな ります。これである種の追跡能力が備わります。 あいにく root ユーザーは、飽和したディスクを修復するためには、コンソー ルからログインできなければなりません。一般的に、ディスクサブシステムの 容量のうち 5 パーセントは、 root が排他的に使用するのに取っておきます。 [15] これは、root ユーザーがログインして、ディスクを埋めているファイル の削除を始めるのに充分な量です。 securetty と Red Hat の kudzu: kudzu はコンソールに使っているデバイ スを、自動的に securetty に追加します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.2. init レベルをテキストレベルに変える 画面がないサーバーで X ウィンドウシステムを動かしても、ほとんど意味があ りません。 /etc/inittab を編集して、 initdefault を含んでいる行を見つけ て下さい。以下のような行です。 id:5:initdefault: そしてデフォルトのランレベルを、 5 (X ウィンドウが動作しているマルチユ ーザー)から 3 (マルチユーザー)に変更して下さい。 id:3:initdefault: 付属のキーボード・モニターで X ウィンドウセッションが必要なことがあれば 、 startx コマンドを使えばいいのです。 ランレベルと Red Hat の kudzu: シリアルデバイスをコンソールに使って いる場合、 kudzu は、 inittab の initdefault エントリを自動的に更新 するので、ランレベル 3 を使うようになります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.2.1. X を動かし続ける シリアルコンソールが付いていて、付属のモニターが無いコンピュータでも、 時にはやはり X ウィンドウシステムを動かす必要があります。例えばそのコン ピュータは、数多くの X 端末のホストをしているかも知れません。 そのような場合は、コンピュータをランレベル 5 のままにして、どの付属のモ ニターに対しても X サーバーを動かさないで下さい。このためには /etc/X11/ xdm/Xservers を変更します。コロンで始まる行はどれも削除して下さい(コロ ンは、ローカル機で動いている X サーバーを示しています)。 Figure 7-2 に 、変更前の Xservers ファイルを示してあります。 Figure 7-2. Red Hat Linux 7.2 の Xservers :0 local /usr/X11R6/bin/X オペレーティングシステムが GNOME の gdm を使っている場合は、その設定フ ァイル /etc/X11/gdm/gdm.conf を変更して下さい。 [servers] セクションか ら、ローカルの X に関するエントリはいずれも削除します。 Figure 7-3には 、変更前の [servers] セクションを示してあります。 Figure 7-3. Red Hat Linux 7.2 の gdm.conf にある [servers] セクション [servers] 0=/usr/bin/X11/X ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.3. 保存してあるコンソールの設定を削除する /etc/ioctl.save ファイルには、シングルユーザーモードで使う、シリアルポ ートと端末のパラメータが入っています。このパラメータは、普通は getty が 設定します。ですが、シングルユーザーモード中は getty が動いていません。 ですから、この場合は /etc/ioctl.save の内容を使って、シリアルポートと端 末のパラメータを設定します。 ここではコンソールを変更するつもりなので、保存してある設定はもう正しく ありません。 Figure 7-4. 保存してあるコンソールパラメータが入っている ioctl.save の 削除 ┌──────────────────────────────────┐ │bash# rm -f /etc/ioctl.save │ └──────────────────────────────────┘ シリアルコンソールからログインできるようになったら、このファイルを再作 成します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.4. シリアルコンソールは /dev/modem ではない 多くの Linux ディストリビューションでは、 /dev/modem ファイルは、使用で きるモデムが接続されている、シリアルポートへのシンボリックリンクになっ ています。 シリアルコンソールはモデムがつながっているシリアルポートになっています が、むろんそこから電話をかけるのに使おうとは思っていません。 /dev/modem が、コンソールに使っているシリアルポート(たぶん /dev/ttyS0 )を指していないかどうか調べて下さい。もし指していたら、そのシンボリッ クリンクを削除して下さい。 Figure 7-5. もし /dev/modem がシリアルコンソールのポートを指していれば 、それを削除する。 ┌──────────────────────────────────┐ │bash$ ls -l /dev/modem │ │lrwxrwxrwx 1 root root 10 Jan 01 00:00 /dev/modem -> /dev/ttyS0 │ │bash# rm /dev/modem │ └──────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.5. /dev/systty のターゲットを変更する。 多くの Linux ディストリビューションでは、 /dev/systty ファイルは、付属 のモニター・キーボードで使っている、デバイスファイルへのシンボリックリ ンクになっています。より詳細な説明に関しては、Section 1.3 を見て下さい 。 付属のキーボード・モニターがなかったり、あってもテキスト端末程度のこと ができればいいと思っている場合は、 /dev/systty がシリアルコンソールを指 すように変更して下さい。 この場合、直接シンボリックリンクを変更するよりは、むしろ MAKEDEV が使っ ている設定ファイルを修正する方がいいです。そのあとこのコマンドを実行し て、シンボリックリンクを再作成します。この設定ファイルは /etc/makedev.d というディレクトリにあります。 Figure 7-6 に示すように、デフォルトの設 定では最初の仮想端末を指しています。 Figure 7-6. /etc/makedev.d/linux-2.4.x にある、 /dev/systty のデフォル ト値 l systty tty0 Figure 7-7 で示すように、これをコンソールが使っているシリアルポートを指 すように修正して下さい。 Figure 7-7. MAKEDEV の設定ファイルにある /dev/systty の値を変更する ┌──────────────────────────────────┐ │bash# cd /etc/makedev.d │ │bash# fgrep systty * │ │linux-2.4.x:l systty tty0 │ │bash# vi linux-2.4.x │ └──────────────────────────────────┘ l systty ttyS0 では、Figure 7-8 に示すように、新しい設定を使って /dev/systty を再作成 します。 Figure 7-8. /dev/systty の新しい値をインストールする ┌──────────────────────────────────┐ │bash# cd /dev │ │bash# rm systty │ │bash# ./MAKEDEV systty │ └──────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.6. PAM(Pluggable Authentication Modules) の設定 Pluggable Authentication Module システムは、コンソールからログインした ユーザーに特権を付与するのに使えます。ディスクをマウントするには、普通 はスーパーユーザーになる必要があるでしょうが、これはコンソールユーザー が、フロッピーディスクのようなデバイスをマウントできるようにするのに使 います。 PAM の設定ファイル /etc/security/console.perms には 変数があ ります。 Red Hat Linux 7.1 だと、 は正規表現になっています。 Figure 7-9. console.perms のデフォルト は付属のキーボート・モ ニターを指している。 =tty[0-9][0-9]* vc/[0-9][0-9]* :[0-9]\.[0-9] :[0-9] このファイルの最後の方で、 ユーザーにいくつかのデバイスを使う 許可を与えています。これには、ログインとログアウトの際、デバイスのパー ミッションを変更するという方法を用います。 Figure 7-10. console.perms のデフォルトデバイス一覧 0660 0660 root.floppy 0600 0600 root 0600 0660 root.disk 0600 0660 root.uucp 0600 0660 root.disk 0600 0660 root.disk 0600 0660 root.disk 0600 0600 root 0600 0600 root 0600 0600 root 0600 0600 root 0600 0600 root 0600 0600 root 0600 0600 root 0600 0600 root 0700 0700 root 0600 0600 root 0600 0600 root 上記でリストされているデバイスには 2 種類のタイプがあります。付属のモニ ター・キーボードから接続しているユーザーに必要なデバイスと、簡単にアク セスできるようにするデバイスです。 Section 1.3 で触れた論理コンソールと 物理コンソールの間の区別は、この設定ファイルではつけられません。そこで 、その区別がつくように設定ファイルを修正します。 Figure 7-11. 付属のキーボード・モニターに必要な console.perms のデバイ ス 0600 0600 root 0600 0600 root 0600 0600 root 0600 0600 root 0700 0700 root 残りのデバイスは、シリアルコンソールから接続しているユーザーだけが制御 できるよう、変更してください。例えば、場所借りしているサイトにいる権限 のないユーザーには、フロッピーディスクのマウントはさせたくありません。 そこでシリアルコンソール用に新しいコンソールタイプを定義します。例えば です。 Figure 7-12. console.perms に を追加して、それがシリアルコン ソールを指すようにする。 =ttyS0 さあ、残りのエントリを から へ修正しましょう。 Figure 7-13. シリアルコンソールを指すよう変更された console.perms の残 りのデバイス 0660 0660 root.floppy 0600 0600 root 0600 0660 root.disk 0600 0660 root.uucp 0600 0660 root.disk 0600 0660 root.disk 0600 0660 root.disk 0600 0600 root 0600 0600 root 0600 0600 root 0600 0600 root 0600 0600 root 0600 0600 root ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.7. Red Hat Linux を設定する Red Hat Linux は、システムのスタートアップに関連するパラメータを、 /etc /sysconfig/init ファイルに格納しています。 OK や PASSED、 FAILED というメッセージ出力に、端末に依存しないコマンド を使うよう、 BOOTUP パラメータを変更して下さい。こうすると、これらのメ ッセージは、もう緑でも黄色でも、赤でも表示されません。 /etc/sysconfig/ init の中のコメントによれば、 color 以外のどの値でもうまくいくように見 えますが、実際には BOOTUP は serial に設定しなければならないようです。 対話的なスタートアップを禁止するため、 PROMPT パラメータを変更します。 不正なキーストロークでシステムサービスが停止できてしまうと、ラインノイ ズに対して脆弱になってしまうし、システムのブート中に電話して接続する人 は誰でも、サービスを停止できるようになってしまいます。 Figure 7-14. Red Hat Linux 用の /etc/sysconfig/init の変更 BOOTUP=serial PROMPT=no Red Hat Linux では、 kudzu という名前のハードウェア検出プログラムが動き ます。 Kudzu は、シリアルポートを識別しようとすると、シリアルポートをリ セットしてしまいます。これではシリアルコンソールが止まってしまいます。 Kudzu の設定は、 /etc/sysconfig/kudzu ファイルでしています。 設定パラメータの SAFE を yes にすれば、 Kudzu がハードウェアをリセット しないようにできます。 Figure 7-15. Red Hat Linux 用の /etc/sysconfig/kudzu の変更 SAFE=yes ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 8. リブートとテスト 8.1. コンソール操作の検証 できればシリアルポートに RS-232 のブレークアウトボックス [16] を挿して 下さい。ブート中にDTRラインが上がり、それからコンソールメッセージの表示 に合わせて、データ転送ライトが光るはずです。 それからモデムを取り付けて下さい。あるいはヌルモデムケーブルと端末でも かまいません。そしてシリアルコンソールポートで使用するシリアルパラメー タに合わせて、それらを設定して下さい。モデムを使う場合は、端末エミュレ ータからそのモデムに電話して接続しましょう。 ┌──────────────────────────────────┐ │+++ │ │AT Z │ │AT DT 1234-5678 │ │CONNECT 9600 │ └──────────────────────────────────┘ そして端末、あるいは端末エミュレータの設定を、シリアルコンソールで使っ ているシリアルパラメータに合わせて下さい。最近のヘイズ AT スタイルのモ デムなら、速度を合わせる必要はありません。直結の端末を使っている場合は 、速度は合わせる必要があります。 コンピュータをリブートしてください。 [17] ┌──────────────────────────────────┐ │bash# shutdown -h now │ └──────────────────────────────────┘ リブート中、端末には普通のブートローダーのテキストが見えて、それからデ フォルトのカーネルがブートし、その後 init の出力が見えて、最後に /etc/ issue の内容が現れて、 getty がログインを求めてくるはずです。 ┌─────────────────────────────────────────────────────────────┐ │LILO: │ │ │ │Linux version … │ │Kernel command line: auto BOOT_IMAGE=linux ro root=306 BOOT_FILE=/boot/vmlinuz-2.4.3-12 console=tty0 console=ttyS0,9600n8 │ │… │ │INIT version … │ │… │ │/etc/issue says "All your base are belong to us". │ │remote.example.edu.au ttyS0 login: │ └─────────────────────────────────────────────────────────────┘ login: メッセージが見えない場合は、 Return キーか Enter キーを押して下 さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.2. 保存したコンソールの設定を再作成する シリアルコンソールから root でログインし、コンソールをシングルユーザー モードに落して下さい。この間にモデムはハングアップすることがありますか ら、再接続が必要かも知れません。 /etc/ioctl.save に保存しておいた端末設定が無い場合、 init は、端末が直 結されていること、そしてその端末が、速度は 9600 bps、データは 8 ビット 、パリティ無し、ストップビットが 1 ビット、そして無手順で動作すると想定 します。ですからお使いの端末をこの内容で設定して下さい。 ┌──────────────────────────────────┐ │remote.example.edu.au ttyS0 login: root │ │Password: … │ │sh# rm -f /etc/ioctl.save │ │bash# telinit 1 │ │…Telling INIT to go to single user mode. │ │INIT: Going single user │ │INIT: Sending processes the TERM signal │ │sh# stty sane -parenb cs8 crtscts brkint -istrip -ixoff -ixon │ └──────────────────────────────────┘ stty を使って Linux の端末設定を変更しているので、接続してある端末の設 定も忘れずに変更してください。 シングルユーザーモードを抜けて、デフォルトのランレベルに戻ると、シリア ルコンソールの設定を /etc/ioctl.save に保存します。 ┌──────────────────────────────────┐ │sh# exit │ │… │ │bash# ls -l /etc/ioctl.save │ │-rw------- 1 root root 60 Jan 1 00:00 /etc/ioctl.save │ └──────────────────────────────────┘ なんらかの理由で、マシンがシングルユーザーモードでブートする時は、 /etc /ioctl.save に保存した端末設定が使われます。 接続してある端末やモデムの速度を 9600 bps に変更できない場合は、上記の 方法に従うことができません。 ioctlsave というユーティリティが作られたのは、こうい う特殊な場合に備えてのことなのです。このプログラムは、その時点の端末設 定を ioctl.save と同じ形式でファイルに保存します。この手順は、 Figure 8-1 に示してあります。 Figure 8-1. シングルユーザーモードに入らずに、ioctlsave を使って /etc/ ioctl.save を生成する ┌──────────────────────────────────┐ │remote.example.edu.au ttyS0 login: root │ │Password: … │ │bash# rm -f /etc/ioctl.save │ │bash# ioctlsave -t /dev/ttyS0 /etc/ioctl.save │ └──────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.3. コンソールをテストする 別のマシンから、たとえば Minicom を使って電話して、接続して下さい。 Example 8-1. シリアルコンソールに電話して接続する ┌──────────────────────────────────┐ │localhost bash$ minicom │ └──────────────────────────────────┘ ┌──────────────────────────────────┐ │Initializing modem │ │Welcome to minicom 1.83.1 │ │Press ALT-Z for help on special keys │ │AT S7=45 S0=0 L1 V1 X4 &C1 E1 Q0 │ │OK │ │Alt-D remote.example.edu.au-ttyS0 │ │Dialing: remote.example.edu.au-ttyS0 At: 1234-5678 │ │Connected. Press any key to continue │ │Any │ │CONNECT 115200/V34/LAPM/V42BIS/33600:TX/33600:RX │ └──────────────────────────────────┘ ┌────────────────────────────────────────┐ │Enter │ │/etc/issue says "All your base are belong to us". │ │remote.example.edu.au ttyS0 login: user │ │Password: ******** │ │Message of the day is "be careful out there". │ │remote bash$ stty -a │ │speed 9600 baud; rows 0; columns 0; line = 0; │ │intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ; │ │eol2 = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; │ │lnext = ^V; flush = ^O; min = 1; time = 0; │ │-parenb -parodd cs8 hupcl -cstopb cread -clocal crtscts │ │-ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff │ │-iuclc -ixany -imaxbel │ │opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab3 bs0 vt0 ff0 │ │isig icanon -iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt │ │-echoctl -echoke │ │… │ │remote bash$ logout │ └────────────────────────────────────────┘ ┌──────────────────────────────────┐ │NO CARRIER │ │Alt-X │ │Leave Minicom? Yes │ │Resetting modem │ └──────────────────────────────────┘ ┌──────────────────────────────────┐ │localhost bash$ │ └──────────────────────────────────┘ おもしろいことに、端末の設定を表示するのに使う stty -a コマンドは、モデ ムからシリアルコンソールへのリンクが 9600 bps だと伝えています。一方、 CONNECT メッセージは、二つのモデム間が 33600bps で動作していると伝えて います。モデム-コンピュータ間のリンク速度が一定だというのは、ヘイズの AT 互換モデムの非常に有益な特徴です。このおかげで、発呼側のコンピュータ は、着信側のシリアルコンソールのライン速度を、前もって知らなくても済む のです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.4. ここから次はどこへ? これでシリアルコンソールの設定はできました。次は Chapter 9 に載っている セキュリティの指針を調べて、作業を完成させましょう。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 9. セキュリティ モデムを通してシリアルコンソールを使用すると、誰でもその隙を突いてコン ソールポートに接続できるようになってしまいます。しかし、モデムからファ イアウォールや侵入検知用のスニファーを介して、接続しているわけではあり ませんから、無許可の人たちがシリアルコンソールを誤用しないようにするの は大切なことです。 ‘war dialling’ という BBS 時代の技術の復活については、 @Stake の Wardialling Brief で説明されており、 The Register が報告しました。 Figure 9-1 の抜粋を見て下さい。 [18] Figure 9-1. Crackers favour war dialling and weak passwords (クラッカ ーは電話と弱いパスワードがお気に入り)からの抜粋 未報告のセキュリティ脆弱性への攻撃や、たまには複雑怪奇なセキュリテ ィホールの話題に夢中になっていると、昔ながらの武骨な技術が、クラッ カーの活動の大黒柱としての役割を担っていることを忘れがちになる。 [19] 昨日[2002年04月25日] InfoSecurity Europe のハッキング討論会の最中に 、ブラックハットハッカーの KP が、自分がネットワークに侵入した際、 その時間の 90 パーセントは無防備なモデムを通って侵入したし、その多 くは war dialing して発見したものだと語った。 [20] "War dialling" では、会社の電話システムの内線を順番に試しながら、会 社が使っているモデムに関係する電話番号を、骨惜しみせず系統的に突き 止める必要がある。 “僕にとっては、侵入検知システムなんか実際恐れるに足らずさ。だって 裏口から入るんだから。たいていのネットワークはベイクドアラスカ [21] みたいに作ってあるんだ。外側はカリカリしてるけど、中は柔らかいんだ よ” とは、先の KP の談。 KP はネットワークに侵入するのに、弱いパスワードやデフォルトのままの パスワードをよく利用する。 Crackers favour war dialling and weak passwords John Leyden, The Register , 2002-04-26. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.1. 良いパスワードを使う BIOS やブートローダー、あるいは root のパスワードを推測できる人なら、誰 でもそのマシンを完全に制御できてしまいます。ですからこういったパスワー ドは、別々で、互いに何の関係もない、良いパスワードにしてください。今の ところ、一番良いのは、ランダムな文字列と数字列を選ぶことです。検索エン ジンでヒットするだろうと思うようなパスワードは、絶対使わないでください 。 [22] ユーザーのパスワードが推測されてしまう、それはたしかに一大事です。です がハッカーは、ただ待っているだけで root のアクセス権限を入手できます。 つまり、オペレーティングシステムの欠陥に起因する、マシンの脆弱性が公表 されるのを待ち、そのマシンにパッチがあたる前にその脆弱性を突くのです。 マシン上のユーザー数を厳しく制限して下さい。そして、 cracklib を元にした PAM モジュールのような、ファシスト パスワードチェッカーを使って、確実に良質のパスワードだけを選ぶようにし てください。 BIOS のパスワードやブートローダーのパスワード、それに root のパスワード は、何かに書き留めておいてください。こうすれば、これらのパスワードは覚 えなくても済みますから、完全にランダムで互いに無関係な、最良のものをパ スワードにしない理由はありません。その書き留めたものは折り畳んで封筒に 入れて、そして封をしてください。 これでコンピュータセキュリティの問題は、物理的な面に移りました。これら の問題の解決方法は分かっています。錠前と鍵、警報器、金庫、警備員、それ に定期査察です。自分のサイトに警備員を配置しているなら、その封筒を守衛 室気付にして出して下さい。その際、この封筒をマスターキーと同じ手順で扱 うよう指示した、取扱い説明書をこの封筒に付けてください。これがうまいや り方です。小規模なサイトなら、金庫や手さげ金庫、あるいは鍵のかかる引出 しを使ってもかまいません。施錠した引出しを無理矢理こじ開けた泥棒の方が 、モデムの背後にいるハッカーよりも、はっきりとした侵入の痕跡や多くの手 がかりをいっそう残すものです。 これら三つのパスワードは重要な会社の資産です。そのマシンが厳重に保管さ れている場合、そのマシンに関する主要なパスワードを忘れてしまうと、分解 するなら別ですが、いつものやり方では設定が変更できないマシンになってし まいます。重要なパスワードの生成方法や保管場所、有効期限、および使い方 の管理手順は、文書化しておいてください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.2. "Data Terminal Ready" と "Data Carrier Detect" に従う コンピュータがモデムをハングアップさせようとする場合、 RS-232 の "Data Terminal Ready" 信号が落ちます。これは、ログインセッションが終了した時 、またはログインに失敗した時に起こります。 DTR が結線されているモデムケーブルを使うことと、モデムを DTR に従うよう に設定することは、コンソールを利用したサービス拒否攻撃を防止する上で必 須です。 DTR 信号がないと、発呼側は簡単にモデムラインをオープンのままにできるの で、システム管理者はコンソールへアクセスできなくなってしまいます。 RS-232 の "Data Carrier Detect" 信号はユーザーがハングアップすると落ち ます。 DCD が結線されているモデムケーブルを使うことと、 DCD をアサートするよう にモデムを設定することは、ユーザーがハングアップした後に、誰かが電話を かけてそこに接続しないようしたり、そのセッションを続けて使用するのを防 止するためには欠かせません。 DCD が無いと、不意に接続が切れてもそのセッションはクリアされません。こ うなるとその後の発呼者は、誰でも直前のセッションを再開できてしまいます 。もし直前のユーザーが root だったら、そのマシンはすっかり危険に晒され てしまいます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3. ダムモデムを使う、あるいは設定する。 たいていのモデムはヘイズの AT コマンドセットを使っています。ある程度の 時間をおいて +++ を送れば、そのモデムはコマンドモードに戻ります。そのあ と先頭に AT を付けてコマンドを送ります。 モデムが話中に +++ を検知すると、あいにくコマンドモードに逆戻りするかも 知れません。そうなると、モデムは発呼側から設定できてしまいます。例えば 、 ‘0’ 番からしか着信できないように設定できてしまいます。そうなると、 システム管理者はモデムにアクセスできなくなります。 コマンドモードに戻すこのコマンドは AT S2=255 を使って取り除けます。もち ろんいったんそうしてしまうと、モデムは AT コマンドをそれ以上受け付けな くなります。ですから、このコマンドを実行する前に、モデムに対するその他 の設定を済ませておく必要があります。 ですがあいにく、モデムの電源を入れると、モデムはコマンドモードでスター トしてしまいます。ですから、コンソールメッセージを注意深く選べば、モデ ムを無効にできてしまうのです。 最良の解決方法は、‘dumb’ または “select profile” の、DIP スイッチ、 あるいはジャンパーが付いているモデムを選ぶことです。これらのスイッチを 使えば、コマンドモードが無効になり、保存してある設定がロードされます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4. コンソールメッセージを制限する 9.4.1. システムログが出力するコンソールメッセージを制限する コンソールメッセージを間断無く流すようにしておくと、簡単に 9600bps のリ ンクが飽和することがあります。 すべての syslog メッセージをコンソールに表示するのはうまい考えのように 見えますが、実は、権限の無いユーザーが簡単な方法を使って、リモートコン ソールを実質的に使えなくしてしまえるのです。 ですから、コンソールに出力するシステムログメッセージは、本当に必要最小 限にするように設定してください。 /etc/syslog.conf をちょっと覗いて、 / dev/console で終っている行を探してみて下さい。 この設定ファイルを変更して、すべてのログメッセージを別のマシンに送り、 そこで記録し解析するという方法を考えてみましょう。 Red Hat Linux 7.2 標 準の /etc/syslog.conf を、ログメッセージをログサーバーで記録するように 修正したものを Figure 9-2 に示してあります。 syslog.conf の各行を繰り返 して、メッセージのコピーをログサーバーへ送るようにしました。ログサーバ ーには loghost.example.edu.au という、DNS の別名があります。こうしてお くと、すべてのリモート機の設定を更新しなくても、ログサーバーの移動が可 能になります。これで、システム障害の原因を特定する方法が、もうログメッ セージのローカルコピーしかないなどということは無くなります。ですから、 同期をとってファイルに書き込むのを止めれば、ファイルシステムに不整合が 発生する確率は増加しますが、性能面で多少有利になります(これはファイル システムがジャーナルを取らないから起こる問題点です)。ファイル名の直前 に - を置けば、ファイルへの書き込みが同期しなくなります。 Figure 9-2. ログメッセージのコピーをログサーバーへ送るように修正した / etc/syslog.conf # (メールを除く)info レベル以上のメッセージはログに採取する。 # プライベートな認証メッセージはログに取らない。 *.info;mail.none;authpriv.none;cron.none @loghost.example.edu.au *.info;mail.none;authpriv.none;cron.none -/var/log/messages # authpriv ファイルはアクセス制限をかけている。 authpriv.* @loghost.example.edu.au authpriv.* /var/log/secure # メールのメッセージはすべて一箇所でログに取る。 mail.* @loghost.example.edu.au mail.* -/var/log/maillog # cron関係のログ cron.* @loghost.example.edu.au cron.* -/var/log/cron # 緊急メッセージはみんなに流す *.emerg @loghost.example.edu.au *.emerg * # crit レベル以上のニュースのエラーは特別なファイルに保存する。 uucp,news.crit @loghost.example.edu.au uucp,news.crit -/var/log/spooler # ブートメッセージは boot.logにも保存する。 local7.* @loghost.example.edu.au local7.* -/var/log/boot.log ログサーバーは標準の /etc/syslog.conf を使って設定しますが、このファイ ルは、リモートの syslog メッセージを受け取れるようにしておきます。 Red Hat Linux 用に設定したこのファイルを、 Figure 9-3 に示します。システム のログデーモンの設定に加えて、 syslog メッセージの送信元を制限するよう に IP Tables を設定して、サービス拒否攻撃も防御して下さい。また、nscd が動いていて、DNS の逆引きをキャッシュしているのを確認して、性能改善も 行なって下さい。 Figure 9-3. /etc/sysconfig/syslog のオプションを設定して、リモートのロ グメッセージを許可する。 # Red Hat Linux のデフォルト値。タイマー起動の ‘ --MARK-- ’ メッセージは書かない。 SYSLOGD_OPTIONS="-m 0" # リモートの syslog メッセージを受け取るようにオプションを追加。 SYSLOGD_OPTIONS="${SYSLOGD_OPTIONS} -r" Figure 9-4. remote.example.edu.au への syslog メッセージを制限する ┌─────────────────────────────────────────────────────────┐ │ bash# chkconfig iptables on │ │ bash# /etc/init.d/iptables restart │ │# 本機からの IP トラフィックをすべて許可する │ │ bash# iptables --append INPUT --source 127.0.0.0/8 --in-interface lo --jump ACCEPT │ │# たぶん、他のトラフィックをフィルターにかける │ │… │ │# remote.example.edu.au からの syslog メッセージを受け取る │ │ bash# iptables --append INPUT --source remote.example.edu.au --protocol udp --destination-port syslog -j ACCEPT │ │# 予定外の syslog メッセージは黙って落とす │ │ bash# iptables --append INPUT --protocol udp --destination-port syslog -j DROP │ │# 動作中の設定を保存する │ │ bash# /etc/init.d/iptables save │ └─────────────────────────────────────────────────────────┘ Figure 9-5. nscd を使って DNS の逆引きをキャッシュする。 ┌──────────────────────────────────┐ │bash# chkconfig nscd on │ │bash# /etc/init.d/nscd restart │ └──────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.2. コンソールに対するブロードキャストメッセージを制限する シリアルコンソールにログインしているユーザーは、ブロードキャストメッセ ージを受け取らないでください。そうするには、 /etc/profile.d に新しいフ ァイルを追加します。 Figure 9-6 に Bourneシェルで使うファイルを示してい ます。 Figure 9-6. コンソールユーザーへのメッセージ送信を制限する。 # # 参照されるファイルはあるか? if [ -x /usr/bin/mesg -a -x /usr/bin/tty ] then # シリアルコンソールにいるのか? if [ `/usr/bin/tty` = /dev/ttyS0 ] then # ブロードキャストメッセージは受け取らない /usr/bin/mesg n fi fi このファイルは頻繁に実行するので、コードは今より読みずらくはなりますが 、もっと高速にした Figure 9-6 というバージョンを使うことにします。この バージョンは Figure 9-7 に示しました。 Figure 9-7. /etc/profile.d/mesg.sh、コンソールユーザーへのメッセージ送 信を制限する。 # # /etc/profile.d/mesg.sh -- 他の人がシリアルコンソールのユーザーを悩まさないようにする。 [ -x /usr/bin/mesg -a -x /usr/bin/tty -a `/usr/bin/tty` = /dev/ttyS0 ] && /usr/bin/mesg n C シェル用も必要ですから、 Figure 9-8 に示しました。 Figure 9-8. /etc/profile.d/mesg.csh、コンソールユーザーへのメッセージ送 信を制限する。 # # /etc/profile.d/mesg.csh -- 他の人がシリアルコンソールのユーザーを悩まさないようにする。 if (-X mesg && -X tty && `tty` == /dev/ttyS0) then mesg n endif mesg.sh と mesg.csh は親シェルが実行するというよりも親シェルに付随する ものですが、このファイルには実行パーミッションを設定する必要があります 。このファイルのインストールとパーミッションの設定は、 Figure 9-9 に示 した手順で行ないます。 Figure 9-9. ファイルを /etc/profile.d にインストールする。 ┌──────────────────────────────────┐ │bash# cp mesg.*sh /etc/profile.d/ │ │bash# chown root:root /etc/profile.d/mesg.*sh │ │bash# chmod u=rwx,g=rx,o=rx /etc/profile.d/mesg.*sh │ └──────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5. モデムの機能を用いて使用を制限する たいていのモデムはパスワードが追加できるようになっています。しかしこの パスワードも、長所と短所は他のすべてのパスワード認証方法と同じですから 、特に有用だというわけではありません。すでにパスワード認証は BIOS にも あるしブートローダーにもあります。それに login でもパスワード認証を行な っています。 モデムの多くはコールバックをサポートしています。モデムに電話がかかり、 ハングアップしてから2、3秒後に、予め設定してある電話番号に電話をします 。これによって、コンソールにアクセスできる場所が制限されます。 多くのモデムでは、発信元電話番号 (CLI) を予め定義してあるリストと照合で きるようになっています。もし発信元の電話番号がこのリスト上にない場合は 接続しません。モデムにつながっている電話線は CLI を送るように設定しなけ ればなりませんが、こうしてしまうと、電話会社から追加課金されてしまうか もしれません。かけている電話すべてが CLI を送れるわけではありませんし、 正当な発信者の中には、電話会社に CLI の送信を抑えるよう頼んだ人がいるか もしれません。 着信した電話番号を記録するように設定できるモデムもたくさんあります。誤 用を追跡する場合にこれは役立ちます。 モデムの多くは暗号化をサポートしています。モデムによっては、キーを複数 許可しているものもあります。これで問題が手際良く解決します。こうすれば 、許可されたモデムだけが、どこからでも電話して接続できるようになります 。この場合、モデムは通常同じ種類にする必要がありますし、おそらく型も同 じにしなければなりません。 ┌──────────────────────────────────┐ │ 暗号化の二重使用技術 │ ├──────────────────────────────────┤ │暗号化機能を有するモデムの所有、使用、売買、あるいは輸出入は、国によ│ │っては重大な犯罪になります。 │ │ │ │ですから、自国内の法律と、旅行で通るかも知れない国々の法律に精通して│ │いなければなりません。 │ └──────────────────────────────────┘ 多くの電話サービスや PBX ラインは、着信だけを許可するよう設定できます。 万が一コンピュータに悪さをされたとしても、そのようにしておけば、モデム の誤用を防止するうえで役に立ちます。 ‘demon dialler’ は多くの電話番号 に電話をかけて、応答するモデムを探すことができますが、この電話の費用は 莫大になる可能性があります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.6. BIOS の特徴 ほとんどの BIOS では、その設定の際に、‘パスワードを入力する’ようにで きます。これは設定しテストしてください。マザーボードによっては、パスワ ードを有効にするためにジャンパーを切り替える必要があります。また、BIOS によっては、あの ‘master passwords’ が付いているものもあるので、検索 エンジンで探して、自分の BIOS がそうではないことを確かめてください。こ のパスワードは、ブートローダーや root のパスワードと同じものにはしない でください。 BIOS の設定には ‘ブート順序’ の設定があります。他のどんな媒体よりも先 にハードディスクからブートするよう設定してください。こうすれば、誰かが レスキューディスクを挿入しても、マシンをブートして、 root になり、ファ イルシステムにアクセスするということができなくなります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7. ブートローダーのパスワードを使う デフォルト以外のイメージでブートする場合や、コマンドラインからパラメー タを与える場合に、パスワードを要求するようブートローダーを設定して下さ い。 こうしておけば、 Example 4-1 の例にあるように、ブートシーケンス中に誰か が電話で接続し、そのマシンを制御するオプションをつけて、カーネルをブー トしてしまうようなことが防止できます。 このパスワードは BIOS のパスワードとも、 root のパスワードとも同じにし てはいけません。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.8. 非対話的ブートシーケンス Red Hat Linux には ‘対話ブート’ オプションがあり、これを使えばサービ スがスタートしないようにできます。でもWEB サービスが目的のマシンで、無 許可の人間がシステムと対話して、 HTTP デーモンが起動しないようにすると いうのは、愉快とはいえないでしょうね。 /etc/sysconfig/init を編集して以下の行を入れてください。 PROMPT=no ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.9. マジック SysRq キー ‘マジック SysRq キー’ というのは、いくつかの基本的なコマンドを、直接 カーネルに渡せるキーシーケンスのことです。カーネルソフトウェアの開発者 たちは、このインタフェースを使って、自分たちのソフトウェアをデバッグし ます。一般の環境では、コンピュータをリブートする最後の手段にも使えるし 、リモートで行なうのが困難だったり高くつくような、他のことにも使えます 。 カーネルソフトェアの開発以外で使っているコンピュータでこのマジック SysRq キーを使うと、そのマシンは申し分のないサービス拒否デバイスになっ てしまいます。不正なキーストロークを2、3行なえば、そのコンピュータは どうにもならなくなるのです。シリアルにせよ他のものにせよ、コンソールは 信頼できる人だけがアクセスできる場所に設置して下さい。 シリアルコンソールは RS-232 のブレーク機能を、 ‘マジック SysRq キー’ に使っています。 ‘ブレーク’ とは、シリアルライン上で何も転送していな い期間のことで、従来の端末では、Break というラベルが付いたキーを押下す るとブレーク状態になります。 モデムに電話をかけて接続し、ブレークを送るのは、誰にでもできます。です から、もしシリアルコンソールがモデムにつながっている場合は、このマジッ ク SysRq キーを無効にする必要があります。シリアルコンソールがターミナル サーバーにつながっていて認証を要求してきたり、ヌルモデムケーブルを使っ て直接別の端末につながっている場合は、マジック SysRq キーを有効にしても かまいません。 マジック SysRq キーは、カーネルの変数を設定するか、そのキーをサポートし ないようにコンパイルすれば無効にできます。 /proc/sys/kernel/sysrq に 0 を書き込めば、マジック SysRq キーは無効にな ります。以下のように sysctl コマンドも使えます。 Figure 9-10. sysctl を使って、マジック SysRq キーを無効にする。 ┌──────────────────────────────────┐ │bash# sysctl -w kernel.sysrq=0 │ └──────────────────────────────────┘ ご自分の Linux ディストリビューションには /etc/sysctl.conf ファイルがあ って、マシンのブート中にそのファイルを使って sysctl を実行しているかも 知れません。その場合は次の行を追加して下さい。 Figure 9-11. マジック SysRq キーを無効にする、 /etc/sysctl.conf の設定 。 # マジック SysRq キーを無効にする。 kernel.sysrq = 0 /etc/sysctl.conf でマジック SysRq キーをオフにしたとしても、カーネルが ブートしてからそのファイルの内容が適用されるまでの間が弱点になります。 ですから、自分のカーネルをコンパイルして、次のコンフィギュレーションパ ラメータを設定する方が、はるかに優れています。 Figure 9-12. SysRq キーを無効にした、カーネルの make menuconfig ┌──────────────────────────────────┐ │Kernel hacking ---> │ │ [ ] Magic SysRq key │ └──────────────────────────────────┘ これで次のコンフィギュレーションパラメータが /usr/src/linux/.config に 書かれます。 Figure 9-13. SysRq キーを無効にしているカーネルの .config # CONFIG_MAGIC_SYSRQ is not set ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.10. Ctrl-Alt-Delete の動きを調整する IBM PC は、コンピュータをリブートするために、 Ctrl-Alt-Delete を使いま した。 Linux ではこのキーの組合せに細工をして、 init システムで使えるよ うにしてあります。 init プロセスに SIGINT シグナルを送るのです。(とは いっても、 ctrlaltdelhard を行なうとこの細工が無くなり、このキーの組合 せでコンピュータを直ちにリブートできるのですが)。 init システムは /etc /inittab を使って、 Ctrl-Alt-Delete というキーの組合せで生成されたシグ ナルをどう処理するかを決めます。 Linux のたいていのディストリビューションはシステムを正しくリブートする し、大部分のユーザーが期待している動作をそのまま行ないます。 Figure 9-14 はこの方法を示しています。 Figure 9-14. /etc/inittab での Ctrl-Alt-Delete のデフォルト処理 # CTRL-ALT-DELETE に細工を施す。 ca::ctrlaltdel:/sbin/shutdown -t3 -r now 個々のサイトによっては、Ctrl-Alt-Delete を無効にしたいかもしれません。 これについては、 Figure 9-15 に示してあります。 Figure 9-15. Ctrl-Alt-Delete を無視する /etc/inittab の設定 # CTRL-ALT-DELETE に細工して何もしないようにする。 ca::ctrlaltdel: あるいは、コンピュータを正しくシャットダウンしたいかも知れません。これ をオペレータに説明するのはとても簡単で、指示は /etc/issue か Post-it Note を使ってモニターに表示すればいいのです。コンピュータが Advanced Power Management (あるいは APM ともいいます) を使っている場合は、コンピ ュータをシャットダウンすると、電源も切れます。 Figure 9-16. /etc/inittab 内の Ctrl-Alt-Delete によって正しくシャットダ ウンする。 # CTRL-ALT-DELETE に細工してシャットダウンする ca::ctrlaltdel:/sbin/shutdown -t3 -h now ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.11. アクセス未遂のログ システムログの中の、getty が出力したものをちょっと覗いてみて下さい。そ して日常のログ監視の作業手順で、これらのメッセージも監視するようにして 下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.12. 電話回線リンクの盗聴への対応 電話回線でモデムに接続すると、盗聴される可能性があります。その電話の接 続経路上にある通信会社を信用していないとか、法執行機関がその通信会社に 、盗聴設備を要求するかもしれないから信用していない場合には、これが問題 になることがあります。 国際電話は特に無防備になります。衛星回線や無線回線を通っている電話は、 手元のラジオで傍受できてしまいます。海底ケーブルを通っている電話は傍受 するのにずっと費用がかかりますから、こんなことをするのは、たぶん Echelon を使っているような、 政府機関に限られるでしょう。 機密扱いのデータは電話回線リンクでは受渡しをしないとすると、主に無防備 になるのは、自分のユーザー名とパスワードをタイプしているときです。この 場合は、 S/KEY やあるいは OPIE 、それに関連する An OPIE for PAM を調べて下さい。 しかしこういったワンタイムパスワードには欠点があります。これについては Peiter ‘mudge’ Zatko が、 Vulnerabilities in the S/KEY one time password system という、よくまとまった概要を書いています。 ┌──────────────────────────────────┐ │ 暗号化キー用の基本材料 │ ├──────────────────────────────────┤ │ワンタイムパスワードジェネレータとか、ワンタイムパスワードのリストと│ │いった、暗号化の基本となる材料を所有することは、国によっては重大な犯│ │罪になります。 │ │ │ │ですから、自国内の法律と、旅行で通るかも知れない国々の法律に精通して│ │いなければなりません。 │ └──────────────────────────────────┘ ┌──────────────────────────────────┐ │ 通信傍受の妨害 │ ├──────────────────────────────────┤ │法的に認められた通信傍受を妨害したり回避するような方策をとると、国に│ │よっては重大な犯罪になります。 │ │ │ │ですから、自国内の法律と、旅行で通るかも知れない国々の法律に精通して│ │いなければなりません。 │ └──────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 10. シリアルコンソールをサポートするように、カーネルを設定する ディストリビュータが出荷している Linux カーネルは、たいていシリアルコン ソールが使えるように設定してあります。しかしシステム管理者は、カーネル を再コンパイルする以外には解決策が無いような問題に、ほとんど必ず遭遇し ます。こういった場合は、シリアルコンソールをサポートするようにカーネル を設定して下さい。普通コンソールメッセージは、シリアルポートの他にモニ ターへも表示したいですから、通常の仮想端末コンソールも設定します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.1. Linux カーネルのバージョン 2.5 カーネルのバージョン 2.5 は現在活発な開発途上にあるものですから、このセ クションの内容は古くなっているかも知れません。バージョン 2.5 では、 USB ドングルに取り付けたシリアルポートに、コンソールが接続できるようになっ ています。バージョン 2.5 のカーネルに対する -dj パッチは、コンソールレ イヤーを書き直したものです。しかしこの書き直したレイヤーが、シリアルコ ンソールをユーザー空間で使用する場合にも効果があるかどうかは不明です。 カーネルを設定する場合は、次のパラメータを設定してください。 Figure 10-1. make menuconfig を使ったシリアルコンソール用カーネル設定 ┌────────────────────────────────────┐ │Character devices ---> │ │ [*] Virtual terminal │ │ [*] Support for console on virtual terminal │ │ <*> Standard/generic (8250/16550 and compatible UARTs) serial support │ │ [*] Support for console on serial port │ └────────────────────────────────────┘ こうすると /usr/src/linux/.config に次のパラメータが設定されるはずです 。 Figure 10-2. .config を用いた、シリアルコンソールのカーネル構成 CONFIG_VT=y CONFIG_VT_CONSOLE=y CONFIG_SERIAL=y CONFIG_SERIAL_CONSOLE=y USB バスに取り付けたシリアルポートを使いたい場合は、通常の USB の設定に 加えて、 USB のコンソールドライバ、および USB シリアルドングルのうち一 つをロードするように、カーネルを設定してください。(ここの例では、汎用 シリアルドングルを使っています)。 Figure 10-3. make menuconfig を使った USB ドングルのシリアルコンソール 用カーネル設定 ┌──────────────────────────────────┐ │USB Serial Converter support ---> │ │ USB Serial Converter support │ │ [M] USB Serial Console device support │ │ [M] USB Generic Serial Driver │ └──────────────────────────────────┘ こうすると、/usr/src/linux/.config に次のパラメータが設定されるはずです 。 Figure 10-4. .config を使った USB デバイスのシリアルコンソール用カーネ ル設定 CONFIG_USB_SERIAL=m CONFIG_USB_SERIAL_CONSOLE=m CONFIG_USB_SERIAL_GENERIC=m Section 9.9で説明したように、マジック SysRq キーを使わないようにカーネ ルを設定することも必要です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.2. Linux カーネルのバージョン 2.4 このカーネルを設定する場合は、次のパラメータを設定して下さい。 Figure 10-5. make menuconfig を用いたシリアルコンソール用のカーネル設定 ┌────────────────────────────────────┐ │Character devices ---> │ │ [*] Virtual terminal │ │ [*] Support for console on virtual terminal │ │ <*> Standard/generic (8250/16550 and compatible UARTs) serial support │ │ [*] Support for console on serial port │ └────────────────────────────────────┘ こうすると、次のパラメータが /usr/src/linux/.config に設定されるはずで す。 Figure 10-6. .config を使ったシリアルコンソール用のカーネル設定 CONFIG_VT=y CONFIG_VT_CONSOLE=y CONFIG_SERIAL=y CONFIG_SERIAL_CONSOLE=y Section 9.9で説明したように、マジック SysRq キーを使わないようにカーネ ルを設定することも必要です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.3. Linux カーネルのバージョン 2.2 最近の Linux 2.2 カーネルは、ビルドバラメータとパラメータ構文が Linux のバージョン 2.4 カーネルと同じになっています。 初期のカーネルに関しては、1997年 4月に出た Linux Journal の36号にある、Francesco Conti が書いた記事 を参照して下さい。 [23] この記事にはカーネルにあてるパッチがいくつか載っていました。以下に略記 したように、シリアルポートで利用できる速度範囲を広げるために、このパッ チは拡張しました。 /usr/src/linux/drivers/char/console.c の先頭で、 #defines を二つ追加し て、シリアルコンソールを使うようにしてください。 #define CONFIG_SERIAL_ECHO #define SERIAL_ECHO_PORT 0x3f8 /* COM1 ポートアドレス */ あるいは、ttyS1 を使う場合は、次の行を追加してください。 #define CONFIG_SERIAL_ECHO #define SERIAL_ECHO_PORT 0x2f8 /* COM2 ポートアドレス */ カーネルは、シリアルリンクの速度を 9600bps に想定しています。別のビット レートを使うつもりなら、次の 2 行を探してください。 serial_echo_outb(0x00, UART_DLM); /* 9600 baud */ serial_echo_outb(0x0c, UART_DLL); そして、 0x0c を Table 10-1 に載っている値の中の一つに変えて下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 10-1. IBM-PC/AT のシリアルポートのビットレートと、そのビットクロ ックの除数 ┌──────┬──────┐ │ビットレート│ 除数 │ ├──────┼──────┤ │ 115200bps │ 0x01 │ ├──────┼──────┤ │ 57600bps │ 0x02 │ ├──────┼──────┤ │ 38400bps │ 0x03 │ ├──────┼──────┤ │ 19200bps │ 0x06 │ ├──────┼──────┤ │ 9600bps │ 0x0c │ ├──────┼──────┤ │ 4800bps │ 0x18 │ ├──────┼──────┤ │ 2400bps │ 0x30 │ ├──────┼──────┤ │ 1200bps │ 0x60 │ └──────┴──────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 11. シリアルケーブルの詳細 11.1. 用語 RS-232 はもともと、端末をモデムにつなぐためのものでした。この端末は正式 にはデータ端末装置という名前で、略して DTE といいます。モデムは正式には データ通信装置という名前で、略して DCE といいます。 標準の RS-232 ケーブルには、 DTE に接続する 25 ピン D タイプのソケット と、 DCE に接続する 25 ピン D タイプのプラグがあります。そして、プラグ の 1 番ピンはソケットの 1 番ピンと結線しており、プラグの 2 番ピンはソケ ットの 2 番ピンと結線されている、などのように、25 本のピンは全結線にな っています。ケーブルのシールドは、ソケット上の金属のカバーに取り付けら れています。 RS-232 の信号伝送は、他の多くの通信規格を使った信号伝送よりもずっと頑丈 です。ピンの中にはショートしてもかまわないピンもあるし、つながなくても いいピンもあります。あるいは複数の出力を駆動できるピンもあります。 信号の名前はデータ端末装置側から見た場合の名前になっています。ですから 、 DTE 上の "Transmit Data" は DCE 上の "Transmit Data" につながってい ます。 DTE 上の "Transmit Data" ピンは、実際にデータを伝送します。とこ ろが DCE 上の "Transmit Data" ピンは、実際はデータを受け取るんです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.2. コンソールポート・モデム間のケーブル RS-232 規格は、コンピュータとモデムの相互接続を定義しています。ですから 、たんに既製品のケーブルを買っても、ここでまずいことが起こることはほと んどありません。ケーブルには二つのタイプがあります。コンピュータに付い ている、標準的な 25 ピン D タイプコネクタが付いたケーブルと、 IBM PC/AT や、他の多くのコンピュータで使っている、専用の 9 ピン D タイプコネクタ が付いたケーブルです。ケーブルにはタイトルが付いており、 RS-232 25 ピン コンピュータ (DTE) から 25 ピンモデム (DCE) へとか、 RS-232 9 ピン IBM PC/AT コンピュータ (DTE) から 25 ピンモデム (DCE) へというようになって います。たいていのモデムには適したケーブルが付属しています。 もし独自のケーブルを作る必要がある場合、使っているコンピュータの RS-232 ピン配置については、 Serial-HOWTO [24] を参照して下さい。コンピュータ側 の "Transmit Data" をモデム側の "Transmit Data" と結線し、コンピュータ 側の "Receive Data" はモデム上の "Receive Data" と結線してください。 "Signal Ground", "Clear to Send", "Ready to Send", "Data Set Ready", "Data Terminal Ready", "Data Carrier Detect" についても同様にして下さい 。 専用のコンピュータルームに設置する場合は、 RJ-45 のパッチパネルを通して 、シリアルケーブルを配線するように考慮して下さい。 RJ-45 コネクタのピン 配置は一般的なものが二つあります。 Yost と Cisco 2500-series console です。 シールド無しのツイストペアケーブルのピン配置を自分で独自に作る場合は、 "Signal Ground" 線と "Transmit Data"線、およびもう一本の "Signal Ground" 線と "Receive Data" 線を、それぞれ確実により合わせてください。 RS-232 の信号は平衡伝送ではありませんが、このようにより合わせれば、結果 的に信号の劣化や拾うノイズの量が最小限になるでしょう。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3. コンソールポートと端末(または別のPC)間のケーブル 特に規定しているわけではないのですが、 RS-232 規格では、間にモデムをは さまずに 2 台のコンピュータを相互接続できるようになっています。これには ‘ヌルモデム’ ケーブルという特別なケーブルが必要になります。 ヌルモデムケーブル内の結線は、必要となるハンドシェークと制御信号によっ て異なります。製造業者が違えば、この点に関する見方も違います。ですから 、結線図が付属していないヌルモデムケーブルは買わないで下さい。 Linux では、フロー制御とモデム制御の各信号線が、すべて正しく結線されて いる必要があります。ヌルモデムケーブルの正しい結線は、 Figure 11-1 と、 もう一つ Figure 11-2 に示してあります。 Linux は CTS と RTS を使ってハンドシェークを行なって、端末のオーバーラ ンからコンピュータを保護し、またコンピュータのオーバーランから端末を保 護しています。 2 台のコンピュータをつなぐつもりなら、 CTS/RTS のハンド シェークを使わないと、信頼性の高いファイル転送はできません。 Linux は端末が接続されていることを検知するために、 DSR と DCD を使いま す。そのあとログインを要求します。もしセッションが確立しているときに DCD が落ちると、Linux はユーザーをログアウトさせます。 Linux は DTR を使って、リンクを強制的にクリアします。これはユーザーがロ グオフして、通信チャンネルを解放した後に行ないます。 ヌルモデムケーブルは、 Figure 11-1 と Figure 11-2 の、どちらのデザイン でも、Linux カーネルの要件に合います。しかし、両方のコンピュータが遠隔 地にある場合は、 Figure 11-2 の方が若干良いかもしれません。というのは、 ヌルモデムケーブルのどちら側に欠陥があるのかを、 DSR と DCD のステート の違いを使って決められるからです。 ヌルモデムの設計にはすべて、共通の欠陥があります。ローカルコンピュータ が "Data Terminal Ready" を落として、ローカルモデムをリセットした後、モ デムと相互接続しているコンピュータが "Data Set Ready" を相当な時間落と してしまうのです。しかしほとんどのソフトウェアは、モデムリンクとヌルモ デムリンクの間の、この若干の差異を調整するようになっています。 セキュリティ上重要な情報が無防備になり、信頼が大きく損なわれてしまうの は、 Figure 11-3 や Figure 11-4、それに Figure 11-5 で示しているケーブ ルをはじめとして、ヌルモデムケーブルの結線が間違っている場合です。 Figure 11-1. ステータスとハンドシェークを完全にしたヌルモデムケーブル Signal ground ---------------------- Signal ground Receive data ---------------------- Transmit data Transmit data ---------------------- Receive data Ready to send ---------------------- Clear to send Clear to send ---------------------- Ready to send Data terminal ready -----------------+---- Data carrier detect | +---- Data set ready Data carrier detect ----+----------------- Data terminal ready | Data set ready ----+ Ring indication -- 未使用 未使用 -- Ring indication Figure 11-2. ステータスとハンドシェークを完全にした別バージョンのヌルモ デムケーブル Signal ground ---------------------- Signal ground Receive data ---------------------- Transmit data Transmit data ---------------------- Receive data Ready to send ---------------------- Clear to send Clear to send ---------------------- Ready to send Data terminal ready ----+----------------- Data carrier detect | Data set ready ----+ +---- Data set ready | Data carrier detect ----+------------+---- Data terminal ready Ring indication -- 未使用 未使用 -- Ring indication あいにく、すべての Linux のブートローダーが、 Linux オペレーティングシ ステムで必要になる、制御信号をサポートしているわけではありません。この 奇妙な事態のせいで、ブートローダーにコマンドを出す必要がある場合、制御 信号とハンドシェークを止めざるを得ないかもしれません。 そんな場合に、RS-232 のハンドシェイクをさせないようにする方法が二つあり ます。ソフトウェアによる方法とハードウェアによる方法です。 モデムが付いている場合、現時点での最良のテクニックは、 AT コマンドを使 ってモデムのソフトウェアを設定し、制御信号とハンドシェークを無効にする ことです。こうすれば、ブートローダーの作者がシリアル接続のサポート内容 を修正する際に、ハンドシェークを修復できるようになります。 ヌルモデムケーブルに関しては、使っている端末エミュレータソフトウェアで 、ハンドシェークを無効にするのが最良のやり方です。 ヌルモデムケーブルに関して最悪の場合は、ハンドシェークと制御信号を改造 しているケーブルが必要になります。本番環境では、このようなケーブルは使 わないようにして下さい。 Figure 11-3. ステータスとハンドシェークを改造したヌルモデムケーブル Signal ground ---------------------- Signal ground Receive data ---------------------- Transmit data Transmit data ---------------------- Receive data Data terminal ready ---+ +--- Data terminal ready | | Clear to send ---+ +--- Clear to send | | Data carrier detect ---+ +--- Data terminal ready | | Data set ready ---+ +--- Data set ready Ready to send -- 未使用 未使用 -- Ready to send Ring indication -- 未使用 未使用 -- Ring indication おそらくシリアルコンソールを使って、カーネルの oops メッセージを捕捉す るためですが、やっつけ仕事でも良いのなら、いくつかの getty プログラムの 設定で、 RS-232 のステータス信号を無視するようにもできます。例えば、 mgetty には、 mgetty.conf に direct オプションがあります。この場合は、3 芯か 2 芯の RS-232 ヌルモデムケーブルがあればいいのです。 Figure 11-4. ステータスもハンドシェークもないヌルモデムケーブル Signal ground ---------------------- Signal ground Receive data ---------------------- Transmit data Transmit data ---------------------- Receive data Figure 11-5. ステータスもハンドシェークもない片方向のヌルモデムケーブル Signal ground ---------------------- Signal ground Transmit data ---------------------- Receive data 本番環境では、こういったケーブルは使用しないで下さい ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.4. シリアルケーブルの作成 ラックに詰め込んだコンピュータでシリアルコンソールを使う場合は、最終的 にはヌルモデムのシリアルケーブルを何本も作ることになります。このセクシ ョンには、シリアルケーブルを作る上でヒントになることがいくつか載せてあ ります。 10 本以上ケーブルを作るつもりで、しかも都会に住んでいる場合は 、たぶん気が付くでしょうが、専門のケーブル製造業者でケーブルを作らせる 方が経済的です。 RS-232 規格では、シールド付きのケーブルを、最低でも 15 メートル駆動でき ます。もっと正確に言えば、 RS-232 のラインドライバは 2500 ピコファラッ ドまでのキャパシタンスに対して動作します。ですから、低キャパシタンスの ケーブルを選べば、駆動距離はもっと延ばせます。 例えば、ANSI/TIA/EIA-568-A のシールド無しツイストペアのカテゴリ 5 ケー ブルでは、キャパシタンスは最大で、1 メートルあたり 55pF になっています 。ですから、この一般的な “UTP cat 5” ケーブルだと、45 メートルまで安 全に駆動できます。それ以上の場合は、ケーブルの最大長である約 50 メート ルで、実際の “シャントキャパシタンス” (一般的な数値は 47.5 pF/m)が どうなっているかを、ケーブルの製造業者の仕様で確認してください。しかし RS-232 の信号は平衡伝送ではないので、シールド無しのケーブルを長く延ばす と、簡単にノイズを拾ってしまいます。ケーブルの製造業者によっては、低キ ャパシタンスのシールド付きケーブルを販売しており、これを使えば 100 メー トルまで駆動できます。 ケーブル配線の仕方を工夫して、ノイズが最低になるようにしてください。 BIOS やブートローダーの多くは、ラインノイズで何か一文字受信してしまうと 、永久に待ち状態になってしまいます。 仕様以上の使い方をしていることに、何の不安も感じていなくても、心に留め ておいてほしいことがあります。 RS-232 規格が、もともとは同期 48kbps で 動作するように設計されたもので、ケーブルの必要条件にこのことが反映され ているのです。企業のネットワークオペレータの経験によれば、ビル内でスト ラクチャードケーブリングをレイアウトする際の制限になるのは、カテゴリ 5 のケーブルを使った、ファーストイーサネットの最大長が 100 メートルだとい うことでした。カテゴリ 5 ケーブルを使った 9600bps の RS-232 非同期信号 で達成している、実際の距離ではなかったんです。 もっと距離を延ばしたい場合は、RS-232 のラインドライバを使って下さい。こ うすれば、カテゴリ 3 の UTP ケーブルで、一般に 2000 メートルまで駆動で きます。さらに延長したければ、光ケーブルモデムや広域電話網、モバイル電 話網、衛星通信、あるいは無線を考慮して下さい。 その環境に高周波ノイズが充満している場合は、シールド付きのケーブルとコ ネクタを使って下さい。ケーブルのシールドを一方の端のコンピュータに接続 します。これはシールドのドレインワイヤを、(もしあれば) "保安用グラン ド" に接地するか、あるいはそのドレインワイヤをコネクターのボディに半田 付けすればできます。それでもまだノイズが相当量ある場合は、そのケーブル の両端を、シールドしたケーブルの上から、フェライトコアで覆って下さい。 それから、ケーブルを正しい長さにして、 D コネクタをシャーシにしっかりね じ留めするという、普通の正しい慣例に従ってください。 こういったケーブルのどれかを作るつもりで、しかも半田付けの技量があれば 、 DB9 や、あるいは DB25 のバックシェルにある信号線をジャンパーで飛ばす のも簡単にできます。 大量のケーブルを作るつもりなら、半田付けよりも圧着システムの方がずっと 速くできます。繰り返しになりますが、ピンをジャンパーで飛ばすのは、バッ クシェルの内部でできるんです。 どんなものを使うにしても、テスターで抵抗を測り、断線や線間短絡をチェッ クしてください。ここで1分ケチると、あとで数時間浪費するかもしれません。 ストラクチャードケーブリングシステムでは、 DB9/RJ-45 バックシェル内のス ペースは狭いです。ですから、パッチパネルの裏でジャンパーを飛ばすともっ とうまくいきます。 DB9/RJ-45 コネクタは、 DB9 コネクタでは IBM PC のピ ン配置なっており、 RJ-45 コネクタでは、 Yost あるいは Cisco のピン配置 になっています。 ┌──────────────────────────────────┐ │ ストラクチャードケーブリングシステムで両立しないデバイス │ ├──────────────────────────────────┤ │ストラクチャードケーブリングシステムをパッチする場合、 RS-232 デバイ│ │ス同士を接続するよう注意して下さい。他のはたぶん、イーサネットや │ │ISDN、電話、アラーム、それに DC の電源電圧を伝送しているケーブルだと│ │思いますから、互換性のない電圧をつないでしまうと装置が壊れてしまうか│ │も知れません。 │ └──────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 12. モデムの設定 12.1. Minicom を使ってモデムにコマンドを送る Minicom はフルスクリーンのシリアル端末エミュレータパッケージで、 MS-DOS 用の古い Telix 端末エミュレータに非常に良く似ています。 まず、次のコマンドを使って、設定モードで Minicom を起動します。 ┌──────────────────────────────────┐ │bash# minicom -o -s │ └──────────────────────────────────┘ すると以下のメニューが現れます。 ┌──────────────────────────────────┐ │Filenames and paths │ │File transfer protocols │ │Serial port setup │ │Modem and dialing │ │Screen and keyboard │ │Save setup as dfl │ │Save setup as.. │ │Exit │ │Exit from Minicom │ └──────────────────────────────────┘ ここで、Serial port setup を選び、設定します。 ┌──────────────────────────────────┐ │A - Serial Device: /dev/ttyS0 │ │B - Lockfile Location: /var/lock │ │C - Callin Program: │ │D - Callout Program: │ │E - Bps/Par/Bits: 9600 8N1 │ │F - Hardware Flow Control: Yes │ │G - Software Flow Control: No │ └──────────────────────────────────┘ では、設定を保存してください。 ┌──────────────────────────────────┐ │Give name to save this configuration? │ │> console │ └──────────────────────────────────┘ そして Minicom を終了します。 モデムを設定するには、 minicom -o console コマンドを使って、モデムを初 期化する文字列を送出せずに Minicom を立ち上げます。では AT コマンドを出 してモデムを設定しましょう。 設定が終了したら、Quit オプションを使って、モデムにリセット文字列を送ら ずに Minicom を終了します。このオプションは Alt-Q です。 Minicom は Alt ではなく、 Ctrl-A を使ってメニューシステムにアクセスする ことがときどきあります。以下のような Minicom のスタートアップメッセージ でヒントを探して下さい。 ┌──────────────────────────────────┐ │Press ALT-Z for help on special keys │ └──────────────────────────────────┘ ┌──────────────────────────────────┐ │Press CTRL-A Z for help on special keys │ └──────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.2. ダムモデムを設定する 大半の UNIX ライクなオペレーティングシステムと同じように、 Linux はシリ アルコンソールが、ダムモデムにつながっているものと思っています。ダムモ デムは最近はあまり見かけません。見かけるとすれば、たぶん ISDN のターミ ナルアダプタや、あるいは衛星回線の地上端末といった、風変わりなハードウ ェアだけでしょう。 ダムモデムはハードウェアを使って設定します。 Figure 12-1 には、仮想のダ ムモデムのフロントパネルを示しています。実際は、速度とモードの設定には 、ジャンパーや DIP スイッチを使うようです。 Figure 12-1. ダムモデムのフロントパネル +-----------------------------+ | | | SPEED MODE | | [ ] 300 [ ] Originate | | [ ] 600 [X] Answer | | [ ] 2400 | | [X] 9600 | | | +-----------------------------+ モデムの速度は必要なビットレートに設定します。この例では 9600 bps です 。モデムのモードは "Answer" に設定します。つまり、着信を待ち、そしてそ の着信に応答するのです。 RS-232 の制御ラインである "Data Terminal Ready" が落ちていると、モデム は着信した電話には応えません。コンピュータの電源が切れているとか、ある いはコンピュータのシリアルインタフェースが、まだ初期化されていないので す。 DTR が上がってしまえば、モデムは着信する電話に応えます。 電話が着信し接続が確立されてしまえば、モデムは "Data Carrier Detect" 制 御ラインを上げます。 DCD が上がっている時に受信したデータだけが有効にな ります(DCD がアサートされていない時にダムモデムから受信したデータは、 おそらくラインノイズです)。そして、DCD が上がっている時だけ、送信デー タがリンクを通じて伝送されます。 Linux コンピュータの getty は、 DCD が上がってくるのをずっと待っていた ので、 getty はユーザーを喜んで迎え、ログインを要求します。 ユーザーがログインしてデータが流れる一方で、モデムとコンピュータの間で "Clear to Send" と "Ready to Send" を使い、データの送出が早過ぎないよう にしています。文字を受けとる時間が無いほどコンピュータが忙しい場合、コ ンピュータは "Clear to Send" を落とします。逆にモデムが忙し過ぎて文字を 受けとれない場合は、モデムが "Ready to Send" を落とします。 ユーザーが電話を切ると、"Data Carrier Detect" が落ち、その着信している セッションに関係するすべてのプロセスに、ハングアップシグナルが送られま す。 あるいはユーザーがログアウトしてもかまいません。シェルが死ぬと、コンピ ュータは "Data Terminal Ready" を落とし、その結果モデムがハングアップし ます。 getty が再度 "Data Terminal Ready" を上げると、モデムは着信を受 け付けます。 "Data Set Ready" についてはまだ説明していませんでした。このラインはモデ ムの電源が切れていたり、モデムがまだ初期化されていない場合に落ちます。 DSR が落ちている時は、他の信号はすべて未定義状態です。例えば、DSR が落 ちている状態で、 DCD が "フロートして" 上がった場合、ソフトウェアは、 DCD がアサートされていないという想定で、動作するようにしてください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3. AT コマンドでモデムを設定する 今では、たいていのモデムはヘイズモデムとそのコマンドセットに基づく、ス マートモデムです。しかし先に論じたように、 Linux のシリアルコンソールは 、ダムモデムで動作するように設計されています。 したがって、スマートモデムをダムモデムと同じになるまで、機能を落としま す。高価なモデムの中には、DIP スイッチや、ボードジャンパーがあり、それ らを使ってダムモードにするものもあります。 そのモデムの AT コマンドを解説しているマニュアルは必携です。たいていの モデムは、より一般的な AT コマンドでは一致していますが、もっと専門的な コマンドに関しては違っています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3.1. ポート速度を設定する ヘイズの AT 互換モデムでは、電話しているモデムがどんな速度を使っていて も、コンピュータ・モデム間は一定の速度を維持できます。 ほとんどのモデムでは、電源投入後最初に受信する文字の速度に基づいて、自 動的にこの速度を設定します。 そこで、モデムの電源を切り、またすぐに電源を入れて下さい。そして minicom -o console コマンドでそのモデムに接続してください。それから Enter を何回か押します。これでモデムは Minicom が使っているのと同じビッ トレートで動作します。この速度は、Section 12.1 で、シリアルコンソールに 設定した速度です。 モデムになにかを出力するよう要求すれば、ポートの速度は確認できます。 Figure 12-2. モデムのポート速度を調べる ┌──────────────────────────────────┐ │bash# minicom -o console │ │Welcome to minicom │ │Press CTRL-A Z for help on special keys │ │ │ │Enter Enter Enter │ │ │ │ATI Enter │ │56k V.90 Series 3 External V2.20 │ │ │ │Ctrl-A Q │ │Leave without reset? Yes │ └──────────────────────────────────┘ モデムによってはポート速度を再設定する AT コマンドがあります。お使いの モデムのマニュアルで、AT&B1 コマンドをちょっと調べてみてください。また 明示的にポート速度を設定するコマンドがあるモデムもあるので、モデムのマ ニュアルで、ざっと ATB コマンドを調べてみてください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3.2. アンサーモードを設定する ATS0=2 コマンドを使えば、モデムは 2 回目の呼出音で着信に応えます。 電話会社によっては、1 回目の呼出音で応えると、モデムを識別できなくなる 場合があるので、そのような設定にはしないで下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3.3. CTS/RTS のハンドシェークを設定する CTS/RTS のハンドシェークを使うと、文字落ちしなくなります。 AT&K3 がその AT コマンドです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3.4. "Data Carrier Detect" を設定する "Data Carrier Detect" は、電話しているモデムの有無に従うようにしてくだ さい。 この AT コマンドは AT&C1 です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3.5. "Data Terminal Ready" を設定する モデムは "Data Terminal Ready" が制御するようにしてください。もし DTR が上がっていれば、そのモデムは着信を受け付ける状態になっています。 DTR が落ちている場合は、それ以上はどのような着信も受け付けないようにし、既 に着信している場合は、いずれもハングアップさせてください。 この AT コマンドは AT&D2 です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3.6. CONNECT メッセージを出さないように設定する ヘイズの AT 互換モデムは、着信すると普通はメッセージを出力します。例え ば次のようなものです。 ┌──────────────────────────────────┐ │CONNECT 9600 │ └──────────────────────────────────┘ モデムにはこういったメッセージ出力を無効にする、 ‘quiet mode’ があり ます。 この AT コマンドは ATQ1 です。このコマンドに対応する応答の OK は表示さ れません。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3.7. コマンドをエコーバックしないように設定する コマンドのエコーを返すとコンソールが混乱することがあります。ですから、 コマンドのエコーバックは無効にして下さい。 この AT コマンドは ATE0 です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3.8. 静かに接続するように設定する ほとんどのモデムにはスピーカーがあります。デフォルトでは、モデムが接続 中でしかも一般的なプロトコルと速度でネゴシエートしている間は、スピーカ ーから音が出続けています。こうしておけば、間違えて何度も人を呼ばずに済 むので、発信しているモデムにとっては非常に役立ちます。しかし、モデムが 応答中の場合は、スピーカーの音が邪魔になることがあります。 もっと静かなコンピュータルームがお望みなら、 ATM0 コマンドを使ってスピ ーカを切って下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3.9. オプションで、DTR の遅延を設定する RS-232 をサポートしている半導体がリセットされると、 "Data Terminal Ready" が落ち、このため、モデムがハングアップしてしまいます。これにはい らつくことがあります。もし mgetty の toggle-dtr-waittime と似たパラメー タを、 getty でもサポートしていれば、モデムが DTR を無視する時間を延長 できます。強制的にハングアップさせるために、 getty が DTR を落としたま まにしておく時間を、モデムに設定した値以上に延長するわけです。結果的に は、この半導体をリセットしても、モデムはハングアップしなくなりますが、 それでもログインセッションの終りに getty がモデムをハングアップさせる可 能性はあります。 ですからお使いのモデムのドキュメントを調べてください。この例のモデムで は、 S レジスタ 25 を使って、 DTR の変化を検知するしきい値を入れていま す。この値は 100 分の 1 秒単位です。モデムを ATS25=150 (1.5 秒) に設定 し、さらに mgetty に toggle-dtr-waittime 2000 (2 秒) と設定することで、 DTR の瞬間的な低下を無視するようにします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3.10. アテンションシーケンスを無効にするよう設定する モデムを正しく設定して順調に動作していれば、モデムのコマンドモードにア クセスできるようにする、 +++ シーケンスを無効にして下さい。 この AT コマンドは ATS2=255 です。 たまたまこのコマンドを実行してしまった場合は、 Section 12.3.12を見て、 そのモデムを工場出荷時のデフォルトパラメータにリセットして、再起動して 下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3.11. 設定例 Figure 12-3. AT コマンドを使ってモデムを設定する ┌──────────────────────────────────┐ │bash# minicom -o console │ │Welcome to minicom │ │Press CTRL-A Z for help on special keys │ │ │ │AT &F Enter │ │OK │ │ │ │AT Z Enter │ │OK │ │ │ │AT &C1 &D2 &K3 S0=2 M0 Enter │ │OK │ │ │ │AT E0 Q1 S2=255 &W Enter │ │ │ │Alt-A Q │ │Leave without reset? Yes │ └──────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3.12. モデムをリセットする これ以上の AT コマンドをモデムに出す必要がある場合は、一旦モデムの電源 を切り、それからまた電源を入れて下さい。こうすればモデムはコマンドモー ドになるはずです。 では次のコマンドを出して、モデムを工場出荷時設定に戻してみましょう。 Figure 12-4. ヘイズの AT 互換モデムをリセットする。 ┌──────────────────────────────────┐ │bash# minicom -o console │ │Welcome to minicom │ │Press CTRL-A Z for help on special keys │ │ │ │AT &F &Y0 &W &W1 Enter │ │OK │ │AT Z Enter │ │OK │ │ │ │Alt-A Q │ │Leave without reset? Yes │ └──────────────────────────────────┘ もしこれが失敗した場合は、モデムの設定メモリをクリアする必要があります 。この手順はモデムの製造業者によって様々だし、たぶんモデムを分解する必 要があるでしょう。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.4. 内蔵モデム 内蔵モデムというのは、基本的には PC のバスカードにマウントした、外付け モデムとシリアルポートです。これらは電源の供給も不要だしシャーシも要ら ないので、外付けモデムよりも安価です。 内蔵モデムは、リモートのシリアルコンソールアプリケーションでもちゃんと 動作します。場所借りしているサイトにあるコンピュータには、特に魅力的で す。というのは、これらのサイトは、占有スペースと電気の消費量によって金 額を請求しているからです。 お使いの内蔵モデムが、電源の切り/入りをしても、その設定を保持している ことを確かめて下さい。 それから、内蔵モデムのシリアルポートが使っている、割り込みラインとポー トアドレス空間が、その他の既存のシリアルポートのものと、競合しないこと を確認して下さい。あるいは、内蔵のシリアルポートを無効にできることを確 認してください。そうすれば、割り込みラインとポートアドレス空間が解放さ れて、内蔵モデムでそれらを使えるようになります。 内蔵モデムを WinModem と混同しないよう注意して下さい。内蔵モデムには特 別なデバイスドライバは要りません。そのままでも Linux からは標準的なシリ アルポートに見えます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.5. WinModem モデムを見ると、そこには中央処理装置と専用のデジタルシグナルプロセッサ があります。また、最近の PC を見ると、そこには大きな CPU があり、サウン ドボードは汎用の DSP を搭載しています。変だと思いませんか?外付けモデム と、ハードウェアがダブッてますけど、そうしないといけないのでしょうか? ‘WinModem’ というのは、 PC の構造を若干拡張して、その中にモデムの CPU と DSP を組み込んだものです。そういうモデムはもともと、 Microsoft Windows のデバイスドライバを組み込んで出荷しているものしかなかったので 、 "WinModems" といいます。これらのデバイスドライバのせいで、 "WinModem" はヘイズの AT 互換モデムにシリアルポートが付いているものだ、 という錯覚が起きました。長い間、使えるものといえば、 Windows 版のドライ バしかなかったのです。でも今では Linux 版のデバイスドライバも提供してい る業者が何社かあり、そのモデムを ‘LinModems’ と洒落ています。 LinModem はたぶん、 Linux のコンソールに使えます。必要なのはせいぜい、 ソースコードを変更して、そのモデムの AT コマンドエミュレーションをダム 化することと、カーネルを再コンパイルすることくらいです。 しかし、ブートローダーは非常に限られたソフトウェア環境で動作しており、 簡単なシリアルチップのサポートですら悪戦苦闘しています。ブートローダー の中には、割り込み処理さえ無いものがあることを考えると、 LinModem の複 雑な DSP 処理を行なわせるのは、実用の範囲を優に越えています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Appendix A. バグと困りごと A.1. Linux カーネルのフロー制御 console= パラメータに r オプションを付けて、 Linux カーネルに CTS/RTS のフロー制御をさせることができます。例えば、速度が 9600bps、データが 8 ビット、パリティ無し、CTS/RTS のフロー制御、というシリアルリンクは、 Figure A-1 で示すように設定します。 Figure A-1. CTS/RTS フロー制御を行なう、カーネルの console パラメータ console=9600n8r Linux カーネルは常にデータを送出するだけなので、 CTS/RTS フロー制御は、 "Clear to Send" がアサートされていないことを確認するという実装になって います。この部分のコードは、 /usr/src/linux/drivers/char/serial.c にあ ります。関連部分は Figure A-2 にあります。 Figure A-2. コンソールの CTS/RTS フロー制御用カーネルソースコード static inline void wait_for_xmitr(struct async_struct *info) { … /* Wait for flow control if necessary */ if (info->flags & ASYNC_CONS_FLOW) { tmout = 1000000; while (--tmout && ((serial_in(info, UART_MSR) & UART_MSR_CTS) == 0)); } } tmout 値を 1000000 にしてループすることで、 CTS ラインがアサート状態に なるまで、1 秒ほど待つことになります。 このコードでは、 RS-232 の "Data Set Ready" と "Data Carrier Detect" の 両ステータスラインからのステータスを無視しています。しかし、こうしてし まうと、多くの不都合が出てきます。 ・ RS-232 ケーブルを抜いていたり、ターミナルサーバーのポートがアイドル 状態の場合、このコードは、約 1 秒間 CTS がアサートされるのを待ちま すが、その間にコンソールにはあらゆる文字が書き込まれます。そうなる と、マシンのブート時に、コンソールに大量の文字が書き込まれることに なり、その結果リブートが非常に長時間かかってしまいます。 ・ "Clear to Send" のアサートが有効なのは、 "Data Carrier Detect" と "Data Set Ready" がアサートされる場合だけです。このコードは、電源が 入っていないデバイスのことを考慮すべきです。デバイスに電源が入って いないと、 CTR がフロート状態になります。 ・ 百万回のループ後、"Clear to Send" がアサートされていなければ、とに かく文字を送出します。よって、マルチドロップの RS-232 ラインでは、 このカーネルは使えません。それどころか、文字落ちが起こるでしょう。 ・ "Data Carrier Detect" がアサートされていなくても、文字は送出されま す。ですから、接続されているモデムはコマンドモードになるかも知れま せん。もし任意のテキストをコンソールメッセージ中に入れることができ れば、このことがセキュリティ上の欠陥になってしまいます。多くのコン ソールメッセージには、ユーザーイベントから派生したエラーテキストが 入っていますから、コンソールメッセージ中に AT&F を入れて、モデムの 自動応答設定を外すのは、そう難しいことではないでしょう。 こういうバグがあるので、この HOWTO では、カーネルレベルのフロー制御は、 もうお奨めしません。筆者は、現在報告されているバグすべてを修復するパッ チを持っており、カーネル本体にこのパッチを取り込んでもらおうとしていま す。カーネルのこのバグが修正されてしまえば、この HOWTO では、再度カーネ ルレベルのフロー制御をお奨めしたいと思います。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.2. Red Hat Linux 7.1 と SysVinit Red Hat Linux 7.1 で出荷している System V の init システムは、現時点で はシングルユーザーモードのシリアルコンソールを、正しくサポートしていま せん。これについては、Red Hat の勧告 RHBA-2001:085-02 New SysVinit package to fix hangs on serial console [25] を参照して下さい。この勧告で公表してい るのは、 Red Hat Linux 7.1 CD で出荷している、SysVinit-2.78-15.i386.rpm パッケージのアップデートです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.3. BIOS、キーボード、そしてビデオカード BIOS によっては、キーボードが接続されていないとブートしないものがありま す。 ┌──────────────────────────────────┐ │Keyboard faulty, press F1 │ └──────────────────────────────────┘ しかしほとんどの BIOS には、キーボードを付けなくてもブートできるように する設定があります。 ビデオカードをインストールしてないとブートしない、奇妙な BIOS もありま す。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.4. リブートでモデムがハングアップする リブート中に、シリアルコントローラーはリセットされますから、モデムの制 御ライン "Data Terminal Ready" は落ちます。すると今度はこれが原因になっ て、モデムがハングアップしてしまいます。 だからといって誘惑に駆られて、 DTR を無視するようなモデムの設定にはしな いでください。そうしてしまうと、このバグはもっと始末が悪くなってしまい ます。こうなると、電話は正しく切れなくなるし、モデムは動いたままになり 、クリアする方法はなくなります。 DTR を無視すると、悪意のある人が電話を かけてきても、クリアする方法も無くなります。 コンピュータが Restarting system というメッセージを出してから、ブートロ ーダーのプロンプトを出すまでに要する、総時間を記録したいこともあるでし ょう。 でもモデムはブートしている間に(シリアルチップがリセットされるので)ハ ングアップしますし、あるいは init のランレベルが変わる時も(getty が再 起動するので)、ハングアップします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.5. init と syslog の出力は補助コンソールには表示されない。 カーネルのメッセージをシリアルポートと、つながっているモニターの両方へ 出力するように、カーネルを設定するのは可能です。しかし、 init と syslog のメッセージは、一番最後にリストしたコンソールデバイス、本文書の例だと シリアルポート、にしか現れません。 このため、つながっているモニターを見ている人は、混乱する可能性がありま す。というのは、モニター上のメッセージが止まってしまうので、 init の起 動直前にマシンがハングアップしたように思えるからです。でも結局はブート 処理は終了して、 getty が login: 要求を表示します。ポストイットにその旨 を書いてモニターに貼っておけば、せっかちな人たちも安心するかもしれませ ん。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.6. 接続してもコンソールが応答しない マシンに接続後、端末の画面はまっさらかもしれません。でも Enter を押せば 、普通は login: 要求が上がってきます。 Enter を押した後、画面に何も文字が出てこなくても、うろたえないでくださ い。マシンの電源は入っているはずだし、オペレーティングシステムはブート したはずです。モデムが呼び出しに答えるには、 "Data Terminal Ready" が上 がらなければなりません。 一番ありそうなのは、マシンがブートして、 fsck というファイルシステムチ ェックが動いている場合です。このチェックには相当な時間がかかる場合があ り、その間の出力は何もないか、あってもほんの少しです。 システムログの帳簿に、 fsck が各ファイルシステムをチェックするのに要す る時間を記録しておけば、心の平安を保つのに相当役立つでしょう。 Enter の押下後テキストが乱れていたら、ビットレートパラメータかパリティ パラメータが合っていません。その場合は、お使いの端末エミュレータの設定 を直して下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.7. 初期化中にモデムがハングアップする setserial を使うとシリアルポートがリセットされます。このためにモデムが ハングアップしてしまいます。 setserial はブート中にときどき使われます。その結果、出力は、 Figure A-3 に見られるようなものになります。 /etc/rc.serial ファイルを調べて、シリ アルコンソールに使っているポートを参照している部分は、いずれも削除して ください。 Figure A-3. マシンの初期化中、setserial はモデムをハングアップさせる原 因になる ┌──────────────────────────────────┐ │… │ │Mounting local filesystems: [ OK ] │ │Turning on user and group quotas for local filesystems: [ OK ] │ │Enabling swap space: [ OK ] │ │/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A │ │ │ │NO CARRIER │ └──────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.8. ブートローダーにはフロー制御がない ほとんどのブートローダーでは、 CTS/RTS フロー制御をサポートしていません 。これがデータ喪失の原因になることがあり、そこには大きな速度の不整合が 存在します。 9600bps の固定速度ポートに接続している、最新のモデムにはよ くあることです。 SYSLINUX の 1.66 はフロー制御をサポートしています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.9. ブートローダーはラインノイズに弱い ほとんどのブートローダーは、ラインノイズから出た文字を一つでも受け取る と、永久にそのプロンプトが出たままになります。 モデムによっては RS-232 の信号を、わざと "フロート"状態にしておくものが あり、着信がないときはノイズを送っています。モデムは "Data Carrier Detect" をアサートしていないので、ノイズによる文字は受信側で破棄してほ しい、と思っているのです。 まずいブートローダーとまずいモデムを組み合わせると、ブート中にいつもマ シンがハングアップする、という結果になる場合があります。 お使いのブートローダーが DCD に従うように設定できない場合は、購入しよう と思っているモデムはどれも試験するよう注意して、着信がない時に文字を生 成しないことを確認してください。現時点では、 RS-232 のステータス信号を 完全に実装しているのは、 SYSLINUX だけです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.10. Advanced Power Management APM はソフトウェアで電源の管理をできるようにするものです。これは天の恵 みでもあり、呪いにもなります。 天の恵みなのは、マシンが遠隔操作で、きれいに、そして最後までシャットダ ウンできるからです。その遠隔サイトが電源設備を保守している場合は、こう するのが良いかも知れません。 これが呪いだというのは、いったん電源を落とすと、物理的に電源ボタンを押 さない限り、二度とそのマシンが起動しないからです。マシンによっては BIOS や、あるいはマザーボードの設定で、この役に立たない動作を無効にできます 。 ┌──────────────────────────────────┐ │ shutdown コマンドのタイプミスは APM よりも始末が悪い │ ├──────────────────────────────────┤ │shutdown -r now と shutdown -h now を混同しないよう注意してください │ │。前者はマシンをきれいにリブートしますが、後者はそのマシンの電源をき│ │れいに落とします。下手をすると、誰かが電源ボタンを、物理的に押すはめ│ │になります。 │ └──────────────────────────────────┘ リモートサイトのコンピュータ環境構築に、本気で取り組んでいるのなら、 Western Telematic や Server Technology 、それに他の多くの会社から出ている、リモートの電源 スイッチを調査する方がいいでしょう。モデルによってはターミナルサーバー を組み込んでいたり、モデムや RS-232 ラインを組み込んでいて、 UPS への入 力電源の故障をシミュレートする(したがって、電源が切れる前に Linux シス テムをきれいにシャットダウンする)ようになっています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.11. モデムと国際電話の必要条件 モデムが電話ネットワークに接続するのに適していると証明するような、国際 的な承認手順はありません。技術的な共通規格が揃っており、モデムを世界規 模の電話の交換ネットワーク上で使用する際は、その規格を満たさなければな らないのですが、その存在を無視しているのです。ですから、ある国で承認し たことが他の国の標準で認知されるということはほとんど、あるいはまったく ありません。 モデムを使う上で必要となる国内の技術要件はあります。共通の必要条件は、 2回目の呼出音の後で応答するように、モデムとそのソフトウェアを設定するこ とと、同じ話中の番号あるいは間違っている番号に、連続 6 回以上はかけない ことです。 ┌──────────────────────────────────┐ │ 通信用機器の承認 │ ├──────────────────────────────────┤ │ほとんどの国では、未承認の通信装置を使用したりあるいは輸入したりする│ │のは犯罪になります。 │ │ │ │さらに、ある種の装置を操作するには認可が必要になる場合があります。 │ └──────────────────────────────────┘ プライバシーに関する法律によって、発信者識別記録でできることが規制され ているかもしれません。 プッシュホンの電話が世界中どこでも使えると決めてかかってはいけません。 十進法に基づいたダイヤルに関しては、共通の標準が無いのです。ゼロの列が 一番長い国々もあれば、ゼロの列が一番短い国々もあります。 国内の電話番号プランには、国際的な協調があまりありません。国際識別番号 をダイヤルするつもりで、国内の緊急サービス番号に電話しないよう注意して 下さい。一般的な緊急サービス番号は、112, 911, 000 ですが、国際識別番号 は国によって違います。 無料電話のようなインテリジェントネットワークの機能は、国外から発信する 電話では普通は利用できません。 国際電話は海底光ケーブルや衛星通信、あるいは短波無線を通ってくることが あります。このような伝送方式では、使用可能なビットレートにかなり違いが あります。海底光ケーブルだとエラーがなく、スループットも最大になると思 って下さい。衛星通信だと 1200bps から 2400bps までで、エラーもいくらか あるでしょう。 HF 無線だと 75bps から 300bps までで、エラーも多くなりま す。 距離によっては遅延も相当出てくるでしょう。モデムのエラー訂正ウィンドウ よりも遅延の方が大きくなった場合、モデムの HDLC ベースのエラー訂正を無 効にすれば、 Zmodem のファイル転送性能はもっと良くなります。 国際電話ではその信号がかなり変わってしまうかも知れません。従来国際電話 はエコーを最小限にするために、アナログのコンディショニング回路を通るよ うになっています。このコンディショニングのせいで、モデムで使用できるビ ットレートの最大値が制限されているのです。たぶん 9600bps 未満でしょう。 ガードトーンを出すようなプログラムを作って、アナログのコンディショニン グを無効にできるかも知れません。でもこれは通信会社によって様々だし、ガ ードトーンを送出するコマンドはモデムによっていろいろです。 最近の国際回線、特に国際コーリングカードでアクセスする回線では、デジタ ル音声圧縮を使っています。こういったデジタル圧縮している回線では、信頼 できるモデム間接続は確立できません。現時点でこういったデジタル圧縮の回 線を識別する一番いい戦略は、バックグラウンドのノイズを聴くことです。つ まり誰も話していない時には、バックグラウンドノイズは合成されたバックグ ラウンドノイズ(サイレンスサプレッションという圧縮技術)に置き換わりま す。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Appendix B. シリアルコンソールからファイルをアップロードする マシンがどうにもならなくなり、その復旧のためにファイルをアップロードし なければならない、という筋書きはたくさんあります。そういった筋書きのは 多くは、コンソールに使っているシリアルポートから、ファイルをアップロー ドするのが唯一の手段です。 シリアルリンク上でファイルをあちこちに動かす方法には、マイクロコンピュ ーティング技術の長い歴史があります。そこでこのセクションでは歴史を遡っ て、掲示版システムという"先インターネット時代" によく使ったツールのベー ルをはがすことにします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ B.1. コンソールにログを取らないようにする ファイルをアップロードあるいはダウンロードしようとする前に、コンソール 上にメッセージを表示しないようにするのがうまい考えです。こういったメッ セージが出てると、 cat を使って移動したファイルを壊してしまうし、 Xmodem や、他の同様なプロトコルの通信が、かなり長時間になってしまいます 。 お使いのシステムの設定を変更して、 klogd に -c 1 パラメータを付けてくだ さい。こうして、カーネルメッセージが直接コンソールに表示されるのを禁止 します。それでも、カーネルメッセージはシステムのログには記録されます。 Figure B-1. Red Hat Linux でコンソールへのカーネルメッセージを抑止する ┌──────────────────────────────────┐ │bash# vi /etc/sysconfig/syslog │ └──────────────────────────────────┘ KLOGD_OPTIONS="-2 -c 1" ┌──────────────────────────────────┐ │bash# /etc/init.d/syslog restart │ └──────────────────────────────────┘ それから、システムログ採取プログラムの設定を変えて、コンソールにメッセ ージを送らないようにして下さい。 /etc/syslog.conf を編集して、 /dev/ console に出力を送っている行を変更し、代わりに、その出力をファイルに送 るようにします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ B.2. "ASCII アップロード" と cat cat はあらゆる UNIX ライクなシステムで使えます。このコマンドは、キーボ ードから受けとったデータをファイルにコピーします。 Minicom や他の端末エ ミュレータには ‘ASCII upload’ という機能があり、ファイルをキーボード から入力したものとして、シリアルリンクへ送ります。 ┌──────────────────────────────────┐ │remote bash$ cat > upload.txt │ └──────────────────────────────────┘ ┌──────────────────────────────────┐ │Alt-S Upload ascii │ │[ascii upload - Press CTRL-C to quit] │ └──────────────────────────────────┘ アップロードが完了するのを待ちます… ┌──────────────────────────────────┐ │ASCII upload of "upload.txt" │ │10.0 Kbytes transferred at 3900 CPS... Done. │ │READY: press any key to continue... │ └──────────────────────────────────┘ ┌──────────────────────────────────┐ │Ctrl-D │ │remote bash$ │ └──────────────────────────────────┘ ハードウェアフロー制御をしていないと、ASCII アップロードで、たまに文字 落ちが起こります。 バイナリファイルをアップロードするには、それを ASCII にエンコードし、ア ップロードします。そしてそれからもう一度バイナリにデコードします。 ┌──────────────────────────────────┐ │localhost bash$ uuencode upload.bin < upload.bin > upload.txt │ └──────────────────────────────────┘ ┌──────────────────────────────────┐ │Alt-S Upload ascii │ │[ascii upload - Press CTRL-C to quit] │ └──────────────────────────────────┘ アップロードが完了するのを待ちます… ┌──────────────────────────────────┐ │ASCII upload of "upload.txt" │ │10.0 Kbytes transferred at 3900 CPS... Done. │ │READY: press any key to continue... │ └──────────────────────────────────┘ ┌──────────────────────────────────┐ │Ctrl-D │ │remote bash$ │ └──────────────────────────────────┘ ┌──────────────────────────────────┐ │remote bash$ uudecode < upload.txt │ └──────────────────────────────────┘ 転送エラーは sum や cksum 、あるいは md5sum といった、チェックサムプロ グラムを使えば検出できます。ローカルマシンからそのファイルを転送する前 と、リモートマシンで受けとった後に、そのチェックサムを印刷しておきます 。 ┌──────────────────────────────────┐ │localhost bash$ cksum upload.bin │ │1719761190 76 upload.bin │ └──────────────────────────────────┘ ┌──────────────────────────────────┐ │remote bash$ cksum upload.bin │ │1719761190 76 upload.bin │ └──────────────────────────────────┘ チェックサムを計算するプログラムは数多くありますが、 sum コマンドを使う 場合は注意してください。というのは、BSD 用と System V UNIX 用に多くのバ ージョンがあり、それらが違う結果を出すからです。 cksum は POSIX 標準の 開発者たちが、この混乱を収拾しようとした産物です。このコマンドは、すべ ての POSIX マシン上にある、同じファイルに対して同じ結果を返します。 元のチェックサムと、アップロードしたファイルのチェックサムが一致しない 場合は、もう一度ファイルをアップロードしなければなりません。リンクにノ イズが多くファイルが大きい場合は、アップロードはけっしてうまくいかない かもしれません。この場合に必要なのは、ファイルを小分けにして、その一つ をアップロードし、チェックサムを確認し、大丈夫なら次をアップロードする というやり方です。 こういうことは自動化すべきもののように思えるでしょう。続きは Xmodem か ら始めます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ B.3. Xmodem, Ymodem および Zmodem Xmodem は、 128 バイトのデータとチェックサムを送り、すべて大丈夫だとい う通知を待ってから、次のブロックを送ります。もし否定的な通知が返ったり 、 ACK も NAK も決して返らない場合は、再度そのブロックを送ります。 Xmodem は、 CP/M を動かしている 8 ビットコンピュータ用に書かれたプログ ラム程度の、単純なプロトコルです。このプログラムには効率が悪い部分が数 多くあるし、小さな問題点もたくさんあります。例えば、ファイルサイズを次 の 128 バイト境界に切り上げてしまいます。これらの欠点から進化した結果が 、 Xmodem の改訂プロトコル、それから Ymodem、そして最後が Zmodem です。 Zmodem は Xmodem よりも充分高速だし、些細な問題もありません。 Zmodem の プロトコルは Xmodem のプロトコルよりもずっと複雑ですが、自分でするのは 、せいぜいコードをコンパイルしてインストールすることだけですから、その 複雑さに関わりあう必要はありません。 ┌──────────────────────────────────┐ │remote bash$ rz │ │... waiting to receive.**B0100000023be50 │ └──────────────────────────────────┘ ┌──────────────────────────────────┐ │Alt-S Upload zmodem │ │[zmodem upload - Press CTRL-C to quit] │ │Sending: upload.bin │ │Bytes Sent: 3072/ 10000 BPS:2185 ETA 00:09 │ └──────────────────────────────────┘ アップロードが失敗して rz がファイルの受信待ちのままになっている場合は 、何回か Ctrl-X をタイプすればコマンドプロンプトに戻ります。この方法は 、 Xmodem の rx や Ymodem の ry でも動作します。 Zmodem で役に立つ機能といえば、アップロードに失敗しても復旧できることと 、一回のアップロードのセッションで、複数のファイルを送れることです。 Xmodem や Ymodem、そして Zmodem を POSIX 用に実装したものは、 http:// www.ohse.de/uwe/software/lrzsz.html にあります。 Red Hat Linux は lrzsz RPM パッケージの形でこ れを配布しています。 lrzsz は、 Omen Technology が出している、 rzsz というパ ブリックドメイン版から派生している、機能拡張したフリーソフトウェアです 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ B.4. Kermit Kermit というのは、 Columbia University が開発した、端末エミュレータ兼フ ァイル転送プログラムです。その人気の元は、Kermit を使えば、 IBM のメイ ンフレームから MS-DOS PC に至る、幅広いコンピュータにアクセス可能だとい う点にあります。 Kermit を若干変えたものが G-Kermit という名前で、 GNU Public License の下でリリースされまし た。これはたいていの Linux ディストリビューションで使用できます。 最近の Kermit と Zmodem のプロトコルの技術基盤は同じ物です。しかし Zmodem はエラー率が高いにも関わらず、呼び出す時の性能は良くなっています 。一方、移植されてきたホストプラットフォームは Kermit の方が多くなって います。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Appendix C. Red Hat Linux をシリアルコンソールからアップグレードする Linux ディストリビューションのアップグレード版は、頻繁にリリースされて います。しかしマシンに直接触れないと、これらのアップグレード版のインス トールができないようなら、遠隔管理は無理です。 このセクションでは、Red Hat Linux を遠隔地からインストールしたりアップ グレードする方法を検証します。 Red Hat Linux はインストールディスクを用いて、 HTTP サーバーから、ネッ トワーク経由でインストールできます。このディスクを修正して、シリアルコ ンソールを使うようにします。このディスクからブートするのか、それともハ ードディスクからブートするのかが制御できれば、シリアルポートを使って、 遠隔地から Red Hat Linux ディストリビューションのアップグレードができま す。マシンを配置する際、空のフロッピーディスクをフロッピードライブに挿 入しておけば、オペレーティングシステムのアップグレードに、オンサイトの 介入は不要になります。 もし他の Linux ディストリビューションをアップグレードする手順をご存知な ら、是非この HOWTO の保守担当者にいただければと思います。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ C.1. ブートディスクを選ぶ 遠隔地からアップグレードする際の関門は、アップグレードを実行するために フロッピーディスクからブートできることと、その後ハードディスクからリブ ートできることです。可能性としては次のようなものがあります。 1. たいていの BIOS では、設定でブートディスクの順序が制御できるように なっています。その BIOS がシリアルコンソールをサポートしていれば、 フロッピーディスクをフロッピードライブに残したまま、そのマシンをア ップグレードできます。そうすれば、そのオペレーティングシステムをア ップグレードするために、マシン本体に誰かが付添う必要はなくなります 。 2. アップグレード前後で、誰かがフロッピーディスクの挿入と取り出しをし てもかまいません。場所借りしているサイトはほとんど、この程度の ‘媒 体交換’ 用技術サポートは用意しています。 3. BIOS の設定を格納する CMOS メモリで、レコードを二つ作ることが可能で す。一つはフロッピーからのブートに使い、もう一つはハードディスクか らのブートに使います。しかしあいにく nvram デバイスは、それほど多種 多様なマシンで動作するわけではないので、このHOWTOではこの方法にはこ れ以上深入りしません。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ C.2. シリアルポートを使うように BIOS を設定する。 サーバーの多くは、シリアルポートから BIOS が設定できるようになっていま す。特にラックマウント用に設計されたシステムではそうなっています。しか し今のところ、デスクトップシステム向けに設計されたマシンで、シリアルポ ートから BIOS がアクセスできるようになっているものはほとんどありません 。 ベンダーのドキュメントを参照して、シリアルポートが使えるように BIOS を 設定して下さい。この機能を ‘コンソールリダイレクション’ と呼んでいる ベンダーもあります。あいにく、この用語の意味はベンダーによって様々です 。 VGA の出力とキーボードを、専用のシリアルプロトコルを使ってリモートの PC にリダイレクトする、という意味でこの用語を使っているベンダーもありま す。ブートした後、BIOS に、シリアルリダイレクションを無効にするよう指示 する場合があるなら、この機能は Linux のシリアルコンソールでしか使えませ ん。 混乱している例ですが、Dell は Dell 2400 と Dell 2450 の説明に ‘コンソ ールリダイレクション’ を使用しています。 Dell 2450 の BIOS はシリアル ポートから設定できます。 Dell 2400 の ‘コンソールリダイレクション’ と いうのは追加ハードウェアで、そのコンピュータの VGA モニターとキーボード を遠隔地で複製するものです。 BIOS の設定例を Figure C-1 に示します。 Figure C-1. シリアルリンクを使うために BIOS を設定する ┌──────────────────────────────────┐ │BIOS setup console redirection │ │ │ │Enter BIOS setup during boot when │ │ Keyboard: [Ctrl+Alt+Esc pressed] │ │ Serial port: ["HAL" is typed] │ │ │ │Serial port │ │ Port: [COM1] │ │ Speed [9600] bps │ │ Data: [8] bits │ │ Parity: [None] │ │ Stop: [1] bits │ │ Handshaking: [Full CTS/RTS handshaking] │ │ Terminal: [Dumb] │ └──────────────────────────────────┘ 多くの BIOS では、そのブート中にある特定のキーを押すと、設定ダイアログ に入ります。モデムリンクにノイズが多い場合、これが問題になることがあり ます。 通常の動作では、最初にハードディスクからブートするように、ブート順序を 設定します。 Figure C-2. ハードディスクからブートするよう BIOS を設定する ┌──────────────────────────────────┐ │BIOS setup boot order │ │ │ │First: [Hard disk] │ │Second: [CD-ROM] │ │Third: [Floppy disk] │ └──────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ C.3. DTR を無視して、DCD をアサートするようにモデムを設定する コンピュータはアップグレード中に 2、3 回リブートします。このリブートの せいでモデムはハングアップしてしまいます。アップグレード中に何度も電話 するはめになると、いらだたしくなるかもしれません。モデムの設定を変えて "Data Terminal Ready" を無視するようにすれば、コンピュータがリブートし ても、モデムがハングアップしなくなります。 DTR を無視するには、モデムに AT&D0 コマンドを送って下さい。 通信料金を減らすため、インストール中は接続を切りたいと思うことがありま す。そういう場合はモデムの設定で、"Data Carrier Detect" をずっと上げて おくようにすれば、切断も再接続もインストール作業の邪魔になりません。常 に DCD を上げておくには、 AT&C0 コマンドを使います。 Section 12.3 にある手順を使って、これらの変更を適用して下さい。他の AT コマンドは、すべてそのままにしておきます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ C.4. ネットワークインストール用フロッピーディスクを用意する Red Hat Linux のウェブサイトには、ネットワークインストール用の、フロッ ピーディスクイメージがあります。 Red Hat Linux の 7.1 用のイメージは、 ftp://ftp.redhat.com/pub/redhat/linux/7.1/en/os/i386/images/bootnet.img です。 フロッピーディスクに、このイメージをインストールします。 ┌──────────────────────────────────┐ │bash# mkfs -t msdos -c /dev/fd0 │ │mkfs.msdos 2.2 (06 Jul 1999) │ │bash# dd if=bootnet.img of=/dev/fd0 bs=1440k │ │1+0 records in │ │1+0 records out │ │bash# sync │ └──────────────────────────────────┘ 次にそのディスクをマウントし、インストール用のファイルが存在することを 確かめます。 ┌──────────────────────────────────┐ │bash# mount -t vfat /dev/fd0 /mnt/floppy │ │bash# ls /mnt/floppy │ │boot.msg general.msg ldlinux.sys rescue.msg vmlinuz │ │expert.msg initrd.img param.msg syslinux.cfg │ └──────────────────────────────────┘ このフロッピーディスクでは、 SYSLINUX ブートローダーを使用します。これ については、 Section 4.3 と Section 5.3 で説明しました。まず最初に、ブ ートローダーの設定ファイル /mnt/floppy/syslinux.cfg を変更して、シリア ルポートを使うようにします。 vi エディタを使ってこのファイルを編集する つもりなら、スワップファイルをこのフロッピーディスクに書き込まないよう に、 -n オプションを使って下さい。 ┌──────────────────────────────────┐ │bash# vi -n /mnt/floppy/syslinux.cfg │ └──────────────────────────────────┘ serial 0 9600 次に、新しいブートオプションを追加します。これは、このファイルにある、 他のブートオプションを元にして作ります。ここでは、シリアルコンソールパ ラメータをカーネルに渡すようにします。このパラメータは、シリアルコンソ ールを使っている、普段の運用時に渡すパラメータと同じです。ですから、 "serial" というのは、このブートオプションの名前に相応しいと思います。 label serial kernel vmlinuz append initrd=initrd.img lang= text serial expert devfs=nomount console=ttyS0,9600n8 text、serial、および expert は、 Red Hat の anaconda インストーラに渡す パラメータです。 text を指定すれば、グラフィカルなインストーラがスター トしないことが保証されます。また、 serial と指定すれば、存在しないかも しれないビデオハードウェアは、できる限りスキャンしないようにします。で すから、実際にビデオカードがあれば、手動で Xconfigurator を動かす必要が あります。 expert を指定すると、設定オプションのすべてが目に見えるよう になります。この場合は、汎用のフロッピーイメージを一つ用います。 3 番目に、この新しい設定を自動的にスタートさせます。この例で使っている サイトには誰もいないので、 boot: プロンプトを出す必要はありません。 default serial prompt 0 4 番目に、この新しい設定をフロッピーディスクに書き込みます。 ┌──────────────────────────────────┐ │bash# umount /mnt/floppy │ └──────────────────────────────────┘ そして、このフロッピーディスクでブートすることを確認して下さい。もしブ ートしなかったら、最新の SYSLINUX をダウンロードし実行して、新しいブー トセクターを書き込んで下さい。 ┌──────────────────────────────────┐ │bash# syslinux /dev/fd0 │ └──────────────────────────────────┘ 最後に、アップグレードする予定のコンピュータにコピーするために使う、新 しいブートイメージを生成して下さい。 ┌──────────────────────────────────┐ │bash# dd if=/dev/fd0 of=bootserialnet.img bs=1440k │ │1+0 records in │ │1+0 records out │ └──────────────────────────────────┘ この新しいブートフロッピーを、シリアルコンソールが付いたマシンでテスト すれば、短いですが、 SYSLINUX がブートしているのがわかります。 ┌──────────────────────────────────┐ │SYSLINUX 1.52 2001-02-07 Copyright (C) 1994-2001 H. Peter Anvin │ └──────────────────────────────────┘ それから boot.msg ファイルが現れて、そして Linux カーネルがロードされま す。 ┌──────────────────────────────────┐ │Loading initrd.img.............. │ │Loading vmlinuz............. ready. │ └──────────────────────────────────┘ そして、実行開始です。 ┌────────────────────────────────────────┐ │Linux version 2.4.2-2BOOT (root@porky.devel.redhat.com) (gcc version 2.96 200001│ └────────────────────────────────────────┘ 次に init システムがパッと通り過ぎます。 ┌───────────────────────────────────────┐ │Greetings. │ │Red Hat install init version 7.0 starting │ │mounting /proc filesystem... done │ │mounting /dev/pts (unix98 pty) filesystem... done │ │Red Hat install init version 7.0 using a serial console │ │remember, cereal is an important part of a nutritionally balanced breakfast. │ │checking for NFS root filesystem...no │ │trying to remount root filesystem read write... done │ │checking for writeable /tmp... yes │ │running install... │ │running /sbin/loader │ └───────────────────────────────────────┘ これは anaconda というインストール用アプリケーションがスタートする前で す。 ┌────────────────────────────────────┐ │Welcome to Red Hat Linux │ │+----------+ Devices +-----------+ │ │| | │ │| Do you have a driver disk? | │ │| | │ │| +-----+ +----+ | │ │| | Yes | | No | | │ │| +-----+ +----+ | │ │| | │ │| | │ │+--------------------------------+ │ │/ between elements | selects | next screen │ └────────────────────────────────────┘ ファンクションキーにアクセスする方法がないように思えます。でも幸い、こ のユーザーインタフェースでは、ファンクションキーを使う必要はありません 。 これでフロッピーのテストは終りました。フロッピーディスクを抜き、マシン をリブートして、通常動作に戻して下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ C.5. HTTP サーバーを準備する ウェブサーバーが、これからアップグレードするバージョンの、 Red Hat Linux で動いているなら最高です。しかし以前のバージョンが動いている場合 は、オペレーティングシステムを再構築せず、もっと新しいバージョンのオペ レーティングシステムから、 anaconda-runtime をインストールして下さい。 wget のようなミラーリングユーティリティを使って、 Linux のディストリビ ューションを、ローカルのウェブサーバーにコピーします。あるいは、ディス トリビューション CD から、ウェブサーバーにコピーしてもかまいません。 ┌──────────────────────────────────────────────────────────────────────────┐ │bash$ mkdir --mode=664 --parents /var/www/html/redhat/linux/7.1/en/os/i386 │ │bash$ umask 002 │ │bash$ wget -nh -nH -r -N -nr -l0 -k -np -X SRPMS ftp://ftp.redhat.com/pub/redhat/linux/7.1/en/os/i386/ -P /var/www/html/redhat/linux/7.1/en/os/i386 │ └──────────────────────────────────────────────────────────────────────────┘ 上記の例で使っている Red Hat の FTP サイトの代わりに、ミラーサイトを使 うのが一番良いです。 ファイルをどれもこれも、そっくりそのままでは、取得しないで下さい。これ は、とても大事なことです。 FTP サーバー、ウェブサーバー、それに CD-ROM が作ったファイルは、いずれも削除して下さい。 ┌──────────────────────────────────┐ │bash$ cd /var/www/html/redhat │ │bash$ # FTP サーバーが追加したファイル │ │bash$ find . -name '.listing' -print -exec rm {} \; │ │bash$ find . -name 'ls-*' -print -exec rm {} \; │ │bash$ # HTTP サーバーから wget で追加したファイル │ │bash$ find . -name '\?*' -print -exec rm {} \; │ │bash$ # CD-ROM で追加したファイル │ │bash$ find . -name 'TRANS.TBL' -print -exec rm {} \; │ └──────────────────────────────────┘ 今度は配布されているソフトウェアに、最新のアップデートを追加する必要が あります。これは、すぐにアップグレードしてしまうと、マシンが危険な状態 になるので、それを避けるためです。 Red Hat Linux 7.1 では、アップデートの追加は欠かせません。 Section A.2 を参照して下さい。 ftp://ftp.redhat.com/pub/updates/7.1/en/os/ にあるサブディレクトリ、 i386, i486, i586, i686, images, noarch から RPM のアップデートを集めて下さい。 [26] これらのアップデートを、ディストリビューションのコピーとマージして下さ い。アップデートする、それぞれの RPM ファイルについては、オリジナルの RPM ファイルを削除して、それから、アップデートする RPM に置き換えて下さ い。例えば、次のようにします。 ┌─────────────────────────────────────────┐ │bash$ cd /var/www/html/redhat/linux/7.1/en/os/i386/RedHat/RPMS │ │bash$ ls /var/www/html/redhat/updates/7.1/en/os/i386 │ │SysVinit-2.78-17.i386.rpm │ │bash$ ls SysVinit-*.rpm │ │SysVinit-2.78-15.i386.rpm │ │bash$ rm SysVinit-2.78-15.i386.rpm │ │bash$ cp /var/www/html/redhat/updates/7.1/en/os/i386/SysVinit-2.78-17.i386.rpm . │ │bash$ chmod u=rw,g=r,o=r SysVinit-2.78-17.i386.rpm │ └─────────────────────────────────────────┘ updates のサブディレクトリ i386, i686, noarch にある RPM を、 /var/www/ html/redhat/linux/7.1/en/os/i386/RedHat/RPMS にマージして下さい。さらに 、 /var/www/html/redhat/updates/7.1/en/os/images ディレクトリにあるファ イルを、 /var/www/html/redhat/linux/7.1/en/os/i386/images にマージして 下さい。 /var/www/html/redhat/linux/7.1/en/os/i386/RedHat/base/hdlist ファイルと hdlist2 ファイルには、インストールする RPM のリストが入っています。この リストを修正して、アップデートする RPM の名前を記載してください。 HTTP サーバーには anaconda-runtime RPM をインストールして下さい。この RPM は、アップデートしようとしているRed Hat Linux と、同じバージョンに してください。 では、次のコマンドで新しい hdlist を作って下さい。 ┌────────────────────────────────────────────────────────────────────────┐ │bash$ cd /usr/lib/anaconda-runtime │ │bash$ rm /var/www/html/redhat/linux/7.1/en/os/i386/RedHat/base/hdlist* │ │bash$ umask 002 │ │bash$ ./genhdlist --withnumbers --hdlist /var/www/html/redhat/linux/7.1/en/os/i386/RedHat/base/hdlist /var/www/html/redhat/linux/7.1/en/os/i386 │ └────────────────────────────────────────────────────────────────────────┘ これでアップデートを追加したディストリビューションが、ネットワークイン ストールで使えます。 CD インストールでは使えませんが、この場合は関係あ りません。 このアップデートを追加したディストリビューションは、オリジナルのディス トリビューションとは別のものなので、オリジナルディストリビューションの バージョン番号は使わない方が良いです。そのアップデートを適用した日付を 後ろに付けるのが、うまい方法です。 bash$ cd /var/www/html/redhat/linux/ bash$ mv 7.1 7.1-20020202 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ C.6. ネットワーク設定を記録しておく "Dynamic Host Configuration Protocol" (DHCP)を使っていないマシンの場 合は、その時点のネットワーク設定を記録しておいて下さい。インストールの 際、Configure TCP/IP 画面で必要な項目を入力するのに使います。 Example C-1. インターネットプロトコル(IP)の設定を表示する bash$ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:11:22:33:44:55 inet addr:10.1.2.3 Bcast:10.1.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:344233 errors:0 dropped:0 overruns:0 frame:0 TX packets:285750 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 Interrupt:10 Base address:0x9000 bash$ netstat -r -n (1) Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 10.1.2.0 0.0.0.0 255.255.255.0 U 40 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 40 0 0 lo 0.0.0.0 10.1.2.254 0.0.0.0 UG 40 0 0 eth0 bash$ cat /etc/resolv.conf domain example.edu.au nameserver 10.255.1.1 nameserver 10.255.2.1 nameserver 172.16.1.1 (1) inet addr 値は ‘IP address’ のことです。この例では、 10.1.2.3 と なっています。 Mask の値は ‘Netmask’ のことです。この例では、 255.255.255.0 になっています。 (2) 宛先 0.0.0.0 に対する Gateway の欄の値は、 ‘デフォルトのゲートウェ イ’ です。この例では、 10.1.2.254 になっています。 (3) 最初にリストされている、ネームサーバーの値が、 ‘プライマリのネーム サーバー’ です。この例では、10.255.1.1 になっています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ C.7. LILO の設定を記録しておく /etc/lilo.conf にある、インストール時点の append=、 boot=、および linear の値を記録しておいて下さい。 Example C-2. LILO の設定を表示する ┌──────────────────────────────────┐ │bash# fgrep append= /etc/lilo.conf │ │append="console=tty0 console=ttyS0,9600n8" │ │bash# fgrep boot= /etc/lilo.conf │ │boot=/dev/hda │ │bash# fgrep linear /etc/lilo.conf │ │bash# │ └──────────────────────────────────┘ boot= パラメータがハードディスクを指している場合は、 LILO は、マスター ブートレコード、つまり MBR にインストールされています。パーティションを 指していることもあります。 linear パラメータが存在すれば、ブートするハードディスクはリニアブロック アドレッシング、つまり LBA を使っています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ C.8. Red Hat ディストリビューションをアップグレードする このセクションですべてが一つになります。シリアルコンソールのアップグレ ード全体のリハーサルをします。普通のテキストモードによるアップグレード と、大きな違いはありません。 BIOS をフロッピーからブートするように設定して、フロッピーディスクを挿入 して下さい。さあ、マシンをリブートしましょう。 ┌───────────────────────────────────────────────────────────────────────┐ │bash# shutdown -r now │ │SYSLINUX 1.64 1.64-pre2 Copyright (C) 1994-2001 H. Peter Anvin │ │ Welcome to Red Hat Linux 7.1! │ │ - To install or upgrade Red Hat Linux in graphical mode, │ │ press the key. │ │ - To install or upgrade Red Hat Linux in text mode, type: text . │ │ - To enable low resolution mode, type: lowres . │ │ Press for more information about low resolution mode. │ │ - To disable framebuffer mode, type: nofb . │ │ Press for more information about disabling framebuffer mode. │ │ - To enable expert mode, type: expert . │ │ Press for more information about expert mode. │ │ - To enable rescue mode, type: linux rescue . │ │ Press for more information about rescue mode. │ │ - If you have a driver disk, type: linux dd . │ │ - Use the function keys listed below for more information. │ │[F1-Main] [F2-General] [F3-Expert] [F4-Kernel] [F5-Rescue] │ │boot: │ │Loading initrd.img.............. │ │Loading vmlinuz............. ready. │ │Linux version 2.4.2-2BOOT (root@porky.devel.redhat.com) (gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-79)) #1 Sun Apr 8 18:24:33 EDT 2001│ └───────────────────────────────────────────────────────────────────────┘ エキスパートモードでブートしたので、メニューは標準のアップグレードとは 若干違っています。例えば、ドライバーディスクはありません。 ┌──────────────────────────────────┐ │ Welcome to Red Hat Linux │ │+----------+ Devices +-----------+ │ │| | │ │| Do you have a driver disk? | │ │| | │ │| +-----+ +----+ | │ │| | Yes | |[No]| | │ │| +-----+ +----+ | │ │| | │ │+--------------------------------+ │ └──────────────────────────────────┘ その後アップグレードは、通常のやり方で続きます。 ┌──────────────────────────────────┐ │+--------+ Choose a Language +---------+ │ │| | │ │| What language should be used during | │ │| the installation process? | │ │| | │ │| Czech : | │ │| [ English : ] | │ │| Danish : | │ │| French : | │ │| German : | │ │| Hungarian : | │ │| Icelandic : | │ │| Italian : | │ │| | │ │| +----+ | │ │| |[OK]| | │ │| +----+ | │ │| | │ │+--------------------------------------+ │ └──────────────────────────────────┘ これまでに準備したウェブサーバーからアップグレードするため、 HTTP を選 びます。 ┌──────────────────────────────────┐ │+-----+ Installation Method +------+ │ │| | │ │| What type of media contains the | │ │| packages to be installed? | │ │| | │ │| NFS image | │ │| FTP | │ │| [ HTTP ] | │ │| | │ │| +----+ +------+ | │ │| |[OK]| | Back | | │ │| +----+ +------+ | │ │| | │ │+----------------------------------+ │ └──────────────────────────────────┘ ここで、Example C-1 で記録しておいたネットワークの詳細を入力します。ネ ットワークが "Dynamic Host Configuration Protocol" か、 "Bootstrap Protocol" をサポートしていれば、それらもちゃんと動作します。 ┌──────────────────────────────────┐ │+--------------------+ Configure TCP/IP +--------------------+ │ │| | │ │| Please enter the IP configuration for this machine. Each | │ │| item should be entered as an IP address in dotted-decimal | │ │| notation (for example, 1.2.3.4). | │ │| | │ │| [ ] Use dynamic IP configuration (BOOTP/DHCP) | │ │| | │ │| IP address: 10.1.2.3________ | │ │| Netmask: 255.255.255.0___ | │ │| Default gateway (IP): 10.1.2.254______ | │ │| Primary nameserver: 10.255.1.1______ | │ │| | │ │| +----+ +------+ | │ │| |[OK]| | Back | | │ │| +----+ +------+ | │ │| | │ │+------------------------------------------------------------+ │ └──────────────────────────────────┘ 予め準備しておいたウェブサーバーの名前を入力します。 Red Hat directory へ入力するディレクトリは、 / で始めなければならないことに注意して下さい 。 ┌───────────────────────────────────┐ │+-----------------+ HTTP Setup +-----------------------------------+ │ │| | │ │| Please enter the following information: | │ │| | │ │| o the name or IP number of your web server | │ │| o the directory on that server containing | │ │| Red Hat Linux for your architecure | │ │| | │ │| Web site name: www.example.edu.au_______________________ | │ │| Red Hat directory: /redhat/linux/7.1-20020202/en/os/i386____ | │ │| | │ │| +----+ +------+ | │ │| |[OK]| | Back | | │ │| +----+ +------+ | │ │| | │ │+------------------------------------------------------------------+ │ └───────────────────────────────────┘ それから次のステータスメッセージがパッと出て、その後 "welcome" の画面が 現れます。 ┌──────────────────────────────────────┐ │Retrieving base/netstg1.img... │ │Loading /mnt/runtime ramdisk... │ │Retrieving base/netstg2.img... │ │Loading /mnt/runtime/usr ramdisk... │ │Running anaconda - please wait... │ │Graphical installation not available for http installs. Starting text mode.│ └──────────────────────────────────────┘ ┌──────────────────────────────────┐ │+----------------+ Red Hat Linux +-----------------+ │ │| | │ │| Welcome to Red Hat Linux! | │ │| | │ │| This installation process is outlined in detail | │ │| in the Official Red Hat Linux Installation | │ │| Guide available from Red Hat Software. If you | │ │| have access to this manual, you should read the | │ │| installation section before continuing. | │ │| | │ │| If you have purchased Official Red Hat Linux, | │ │| be sure to register your purchase through our | │ │| web site, http://www.redhat.com/. | │ │| | │ │| +----+ +------+ | │ │| |[OK]| | Back | | │ │| +----+ +------+ | │ │| | │ │+--------------------------------------------------+ │ └──────────────────────────────────┘ Upgrade Existing Installation を選んで下さい。でもこの手順は一般のイン ストールでもうまくいきます。 ┌──────────────────────────────────┐ │+--------------+ Installation Type +--------------+ │ │| | │ │| What type of system would you like to install? | │ │| | │ │| Workstation | │ │| Server System | │ │| Laptop | │ │| Custom System | │ │| [ Upgrade Existing Installation ] | │ │| | │ │| +----+ +------+ | │ │| | OK | | Back | | │ │| +----+ +------+ | │ │| | │ │+-------------------------------------------------+ │ └──────────────────────────────────┘ アップグレードは続きます。 LILO Configuration 画面が現れたら、 Example C-2 で記録しておいたカーネルパラメータを入力して下さい。これらのパラメ ータには、 console=ttyS… が含まれているはずです。 ┌──────────────────────────────────┐ │+---------------------+ LILO Configuration +---------------------+ │ │| | │ │| A few systems will need to pass special options to the kernel | │ │| at boot time for the system to function properly. If you need | │ │| to pass boot options to the kernel, enter them now. If you | │ │| don't need any or aren't sure, leave this blank. | │ │| | │ │| [ ] Use linear mode (needed for some SCSI drives) | │ │| | │ │| console=tty0 console=ttyS0,9600n8_______________ | │ │| | │ │| +----+ +------+ +------+ | │ │| | OK | | Skip | | Back | | │ │| +----+ +------+ +------+ | │ │| | │ │+----------------------------------------------------------------+ │ └──────────────────────────────────┘ ┌──────────────────────────────────┐ │+-------------+ LILO Configuration +--------------+ │ │| | │ │| Where do you want to install the bootloader? | │ │| | │ │|[/dev/hda Master Boot Record (MBR) ]| │ │| /dev/hda1 First sector of boot partition | │ │| | │ │| +----+ +------+ | │ │| | OK | | Back | | │ │| +----+ +------+ | │ │| | │ │+-------------------------------------------------+ │ └──────────────────────────────────┘ ┌───────────────────────────────────┐ │+----------------------+ LILO Configuration +-----------------------+ │ │| | │ │| The boot manager Red Hat uses can boot other operating systems | │ │| as well. You need to tell me what partitions you would like to | │ │| be able to boot and what label you want to use for each of them. | │ │| | │ │| Device Partition type Default Boot label | │ │|[/dev/hda6 Linux Native * linux ] : | │ │| : | │ │| : | │ │| : | │ │| : | │ │| | │ │| +----+ +------+ +------+ | │ │| | Ok | | Edit | | Back | | │ │| +----+ +------+ +------+ | │ │| | │ │| | │ │+-------------------------------------------------------------------+ │ └───────────────────────────────────┘ アップグレードは続きます。パッケージのインストールには2、3 時間かかるか もしれませんから、接続を切ってもかまいません。 ┌──────────────────────────────────┐ │+-------------+ Package Installation +--------------+ │ │| | │ │| Name : | │ │| Size : | │ │| Summary: | │ │| | │ │| Packages Bytes Time | │ │| Total : 0 0M | │ │| Completed: 0 0M | │ │| Remaining: 0 0M | │ │| | │ │| | │ │+---------------------------------------------------+ │ └──────────────────────────────────┘ 接続を切り、その後再接続する際、一番いいのは、 Return を押すのではなく 、 Tab を押すことです。 Bootdisk 画面で Return を押すと、ブートディスクを書きます。これでアップ グレードディスクを上書きします。 BIOS のパラメータを変えても、ハードディスクからのブートができない場合や 、リブートの際、誰かにフロッピーディスクを抜いてもらわなくても済むよう に、あえてブートディスクを新しく作りたくなることがあります。 ┌──────────────────────────────────┐ │+------------------+ Bootdisk +-------------------+ │ │| | │ │| A custom boot disk provides a way of booting | │ │| into your Linux system without depending on | │ │| the normal bootloader. This is useful if you | │ │| don't want to install lilo on your system, | │ │| another operating system removes lilo, or lilo | │ │| doesn't work with your hardware configuration. | │ │| A custom boot disk can also be used with the | │ │| Red Hat rescue image, making it much easier to | │ │| recover from severe system failures. | │ │| | │ │| Would you like to create a boot disk for your | │ │| system? | │ │| | │ │| +-----+ +----+ | │ │| |[Yes]| | No | | │ │| +-----+ +----+ | │ │| | │ │+-------------------------------------------------+ │ └──────────────────────────────────┘ "Complete" の画面が現れたら、リブートして Linux を立ち上げる準備をして 下さい。シリアルの BIOS があるなら、その BIOS のパラメータを変えて、最 初にハードディスクからブートするように準備してください。シリアルの BIOS がなければ、誰かにフロッピーディスクを抜いてもらってください。 ┌──────────────────────────────────┐ │+-----------------+ Complete +------------------+ │ │| | │ │| Congratulations, installation is complete. # | │ │| : | │ │| Press return to reboot, and be sure to : | │ │| remove your boot medium after the system : | │ │| reboots, or your system will rerun the : | │ │| install. For information on fixes which : | │ │| are available for this release of Red Hat : | │ │| Linux, consult the Errata available from : | │ │| http://www.redhat.com/errata. : | │ │| : | │ │| Information on configuring and using your : | │ │| Red Hat Linux system is contained in the : | │ │| | │ │| +----+ | │ │| |[OK]| | │ │| +----+ | │ │| | │ │+-----------------------------------------------+ │ └──────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────────┐ │sending termination signals...done │ │sending kill signals...done │ │disabling swap... │ │ /tmp/swap/hda5 │ │unmounting filesystems... │ │ /mnt/sysimage/var/www/html │ │ /mnt/sysimage/boot │ │ /mnt/sysimage/proc │ │ /mnt/runtime/usr │ │ /mnt/sysimage │ │ /proc/bus/usb │ │ /mnt/runtime │ │ /dev/pts │ │ /proc │ │rebooting system │ │Restarting system. │ │ │ │LILO │ │Loading linux...................... │ │Linux version 2.4.3-12 (root@porky.devel.redhat.com) (gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-85)) #1 Fri Jun 8 15:05:56 EDT 2001 │ └──────────────────────────────────────────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ C.9. シリアルコンソール用のブートディスクを作る アップグレードがうまくいったら、シリアルコンソールをサポートするブート フロッピーを作って下さい。これは anaconda インストーラを使ったり、 Section 2.1 で説明したのと同じ方法でブートディスクを作れば一番簡単にで きます。 Section 4.3で説明したように、設定ファイル \SYSLINUX.CFG を修正 して、ブートローダーがシリアルコンソールを使うようにします。そして最後 に、 Section 5.3 で説明したように、シリアルコンソールを使うようにカーネ ルを設定します。 あるいは、自分専用の mkbootdisk の RPM パッケージを作って、そこに修正し たシェルスクリプト /sbin/mkbootdisk のコピーを入れるという方法もありま す。 ブートフロッピーの \SYSLINUX.CFG ファイルは、 Figure C-3 にあるコードを 使って、 mkbootdisk で書いています。このコードは、シリアルコンソールを 使うように変更します。その結果は、 Figure C-4 に示してあります。 Figure C-3. Red Hat Linux 7.2 の mkbootdisk から抜き出す。これで SYSLINUX.CFG を作る cat > $MOUNTDIR/syslinux.cfg < $MOUNTDIR/syslinux.cfg < を参照して下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ C.10. 参考文献 インストール CD にあるカーネルが、アップグレードするマシンではブートし なかったり、あるいは存在しないモジュールが、ファイルシステムに必要だっ たりすることがときどきあります。この場合は新しいカーネルを構築して、こ の新しいカーネルを使うように、インストールディスクを再作成する必要があ るでしょう。これについては、 RedHat7 CDs mini-HowTo で、文書になって います。これは "Linux Documentation Project" からは利用できない、非公式 の HOWTO です。 これよりも古い文書で、以前の Red Hat ディストリビューションの構築プロセ スを、ほぼ完全に説明しているのは、 Burning a RedHat CD HOWTO [27] です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Appendix D. シリアルコンソールから、 DebianGNU/Linux をアップグレードす る ブートディスクとルートディスクを作成して下さい console=ttyS0,9600 というパラメータを付けて、ブートディスクでブートして 下さい。 インストールプログラムを開始して下さい ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Appendix E. ターミナルサーバーの設定 ターミナルサーバーはもともと、ミニコンピュータに端末を接続するために設 計されたものです。各端末には RS-232 ポートが付いています。ミニコンピュ ータとの接続には、普通イーサネットポートを使いました。端末を接続すれば 、予め定義してあるマシンのリストから、どのマシンをつなぐのかが選べるよ うな、コマンドラインインタフェースにつながります。それからそのマシンと の間で、 Telnet セッションが始まります。 時が流れて、ターミナルサーバーはより多くの機能を手に入れました。例えば モデムが接続できるようになっています。最初のうちは、これを使って、単に ミニコンピュータに電話をかけて、接続できるようになっただけでしたが、機 能の拡大により、ほとんどのターミナルサーバーは、非常に多くのシリアルポ ートが付いた、ルーターになるまでに成長しました。 多くのコンソールを端末一台につなげられる他に、ターミナルサーバーは、ユ ーザーアカウントとパスワードが使えるように設定できます。こうすることで 、どのモデムからでも、そのコンソールに接続できるようになる一方で、その コンソールに、未承認のユーザーからアクセスされないようにします。 このセクションの残りの部分では、ターミナルサーバーを選択する際に必要に なる、ターミナルサーバーの購入時の考慮事項や、ケーブルのピン配置、それ から、ターミナルサーバーの種類を区別するのに必要な、基本的なソフトウェ アの設定を記載します。 この後も情報をお寄せ下さい。歓迎します。この HOWTO の保守担当者に電子メ ールで送って下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ E.1. 中古のターミナルサーバーを購入する際の考慮事項 昔はインターネットサービスプロバイダが、ターミナルサーバーの大手ユーザ ーでした。各モデムはターミナルサーバーポートにつながっていたでしょうし 、接続してくるユーザーは、たんに予め決まったミニコンピュータだけにでは なく、どこにでも IP が送れるようになっていたと思います。製造業者はこの 使い方を反映するように、その装置の名前を、 ‘アクセスサーバー’ とか ‘ モデムサーバー’ に変えました。 これらのアクセスサーバーは新しい世代がとって代わりました。新しい世代は 、 ISP のルーターに、電話のトランク回線を直接挿し込めるようになっていま す。モデムが別々に分かれているわけではありません。モデムのトーンは、ル ーター内部にある、デジタルシグナルプロセッサチップがデコードします。こ の結果今では、ターミナルサーバーは中古市場で、簡単に入手できるようにな っています。 中古のターミナルサーバーを購入する場合は、そのソフトウェアの権利も購入 することを確認して下さい。会社によっては、自分たちのソフトウェアをライ センスしていて、そのライセンスが再販できないこと、そのターミナルサーバ ーの所有者変更の際は、当該会社からライセンスを再購入しなければならない こと、という契約条件を付けているところがあります。ソフトウェアのアップ デートを得るには、多くの会社では一般に保守契約が必要になります。これら の保守契約は高額になる可能性があり、一般的な数字は、年額で小売価格の 15 パーセントです。サードパーティのメンテナンス業者から、もっと安価なソフ トウェアアップデートを入手できるかも知れません。 古いターミナルサーバーの多くはもう販売していないか、あるいはそのベンダ ーのサポートが打ち切られています。ベンダーのウェブサイトで “end of life” を探して下さい。 ごく最近利用可能になったソフトウェアが、購入したターミナルサーバーの RAM やフラッシュメモリの制約内で収まらない場合、ベンダーのサポートが、 特に問題となることがあります。中古のターミナルサーバーを購入するのは、 このことを調べてからにしたほうがいいでしょう。そうしないと、フラッシュ メモリのアップグレードが、著しく困難になる可能性があります。というのは 、マザーボード上の ROM も、フラッシュメモリの特性を分かっているものに、 置き換える必要があるかも知れないからです。 これはフラッシュメモリ設計の失敗です。このようなサーバーでは、フラッシ ュメモリは、メモリの読み書きに要するタイミングではなく、モデル名でそれ 自身を識別します。ですから、フラッシュメモリからソフトウェアをロードす る場合は、ブート ROM には、フラッシュメモリのモデルとタイミングの表が必 要です。 Kingston とか MemoryX といった、サードパーティの部品メーカーでは、通常ダイ ナミックRAM やフラッシュメモリを提供しています。ですが普通は ROM もスタ ティックRAM も提供できません。 古いターミナルサーバーのほとんどは、 Secure Shell をサポートしていませ ん。この場合、イーサネットポートでターミナルサーバーにアクセスするとい う考えはまずいです。つまりコンソールにログインすると、自分のパスワード が平文でインターネット上を流れてしまいます。ですから、ターミナルサーバ ーに電話して接続するか、あるいは S/KEY 認証付きの、 RADIUS プロトコルと いったような、ワンタイムパスワードシステムを使って下さい。 あるいは、別の Linux マシンを一台用意して、マルチポートのシリアルカード を使ってもかまいません。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ E.2. Cisco 2511 Cisco 2511 アクセスサーバーに対する基本的な設定は、 Figure E-1 に示して あります。同じような設定は、他のシスコのアクセスサーバーでも動作すると 思います。 Cisco には web site に優れたドキュメ ントがあります。正しい Configuration guide を見つけることから始めてくだ さい。 シスコあるいは再販業者との現在の保守契約は、ソフトウェアアップデートを ダウンロードするのに必要です。この契約には、フラッシュメモリのアップグ レードに必要な、 ROM に関する条項も入っています。ほとんどの管轄区域では 、シスコのソフトウェアライセンスは譲渡可能にはなっていません。ですから 、中古市場でアクセスサーバーを購入した場合は、シスコか再販業者から、ソ フトウェアライセンスを購入する必要があると思います。 Figure E-1. Linux PC がつながっている Cisco 2511 ターミナルサーバーに対 する基本設定 interface Async1 description To Linux computer ip unnumbered Loopback0 async mode interactive no peer default ip address line 1 location To Linux PC session-timeout 30 no exec login modem InOut terminal-type vt100 special-character-bits 8 transport preferred none transport input telnet telnet break-on-ip telnet ip-on-break stopbits 1 flowcontrol hardware line vty 0 4 location Network password PASSWORD login local terminal-type vt100 transport preferred none transport output telnet Linux を Cisco 2500 シリーズのルーターに移植しているところ があります。この HOWTO の執筆時 点では、 Cisco 2511 で非同期ポートはサポートしていませんでした。シスコ の IOS の代わりに Linux を動かす魅力は、 Linux が SSH をサポートできる という点にあります。この文書の執筆時点では、非公式のベータ版は見かけま したが、シスコは、 Cisco 2500 シリーズのルーター用の SSH を、まだリリー スしていませんでした。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ E.3. Xyplex/iTouch MAXserver 1600 Xyplex ターミナルサーバーに関する情報を得るのに役立つサイトは、 http:// www.gno.org/~gdr/xyplex/ です。ケーブル配線については、 http:// www.conserver.com/consoles/xyplexcons.html で論じています。 Xyplex ターミナルサーバーは、現在 iTouch Communications 社が製造しています。 iTouch と結んでいる、現時点で 有効な保守契約が、ソフトウェアアップデートのダウンロードに必要です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ E.4. Xylogics/Bay/Nortel Annex Annex のターミナルサーバーに関する情報を集めるのに役立つサイトは、 http://www.ofb.net/~jheiss/annex/ です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ E.5. Livingston/Lucent Portmaster 最初に、Figure E-2 に示すように、ターミナルサーバーの設定を行ないます。 この図では、example というシステム名を用い、 IP アドレスは 10.1.2.3、ネ ットマスクは 255.255.255.0、ゲートウェイアドレスは 10.1.2.254、DNS サー バーのアドレスは 10.1.1.1 にしてあります。これらのアドレスは、ご自分の ネットワークでお使いのアドレスに置き換えて下さい。 Figure E-2. Portmaster ユニットの設定 ┌──────────────────────────────────┐ │set sysname example │ │set password PASSWORD │ │set ether0 address 10.1.2.3 │ │set ether0 netmask 255.255.255.0 │ │set ether0 broadcast high │ │set gateway 10.1.2.254 │ │set namesvc dns │ │set nameserver 10.1.1.1 │ │save all │ └──────────────────────────────────┘ では、ターミナルサーバーの各シリアルポートを設定しましょう。その様子は 、Figure E-3 に示してあります。 Figure E-3. Portmaster のポート設定 ┌──────────────────────────────────┐ │set s0 service_device telnet 2000 │ │set s0 device │ │reset s0 │ │set s1 service_device telnet 2001 │ │set s1 device │ │reset s1 │ │… │ │set s29 service_device telnet 2029 │ │set s29 device │ │reset s29 │ │save all │ └──────────────────────────────────┘ シリアルポート 0 に接続するには、 telnet example 2000 コマンドを実行し て下さい。他のシリアルデバイスに telnet で接続する場合は、相応の TCP ポ ート番号を使って下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Appendix F. 開発者へのお願い F.1. ブートローダーの作者へのお願い ブートローダーでシリアルコンソールをサポートしていることが、非常に役立 っています。サポートしてくれて感謝します。 ブートローダーは 8250A UART と、そのプログラム互換の後継である、 82510 、 16450、 16550、および、 16750 をサポートしてください。 IBM PC/XT で 使われているシリアルチップ 8250 (Aは付かない) と、その後継である 8250B のサポートは不要です。 8250A のデータシートは 82C50A CMOS Asynchronous Communications Element にあり、インテルの正誤表、 82510 PC Software Compatibility で更 新されています。 16550 のデータシートは、 PC16550D Universal Asynchronous Receiver/Transmitter with FIFOs です。 シリアルポートとシリアルパラメータを設定するため、 Linux のブートローダ ーのほとんどは、カーネルのコンソールパラメータをモデルにした構文を使っ ています。いずれにせよ、ユーザーはカーネル構文を覚える必要がありますか ら、このまま一貫性を維持するのはうまいやり方だろうと思います。 デフォルト値は 9600bps、データは 8 ビット、パリティ無し、ストップビット は 1 ビットそれに CTS/RTS のフロー制御にしてください。こうしておけば、 シリアルコンソールを使う他のプログラムとの相互運用性が最大になります。 低速もどうか無視しないで下さい。ニューギニア高地の、徒歩で三日かけて登 るような山中にコンピュータがある場合、リモートのシリアルコンソールは、 一番価値があります。天候条件が悪い中で、短波(HF) 無線で 75bps を越える 速度を出すのは困難です。 モデムのステータスラインを使う場合は、従来のやり方に従って下さい。着信 のステータス(DSR と DCD)や、ハンドシェークライン(RTS)を無視していて も、少なくとも送出するステータス(DTR) と、ハンドシェーク (CTS のライン は、アサートするようにして下さい。正しく設定したモデムは、 DTR が落ちて いる時に、着信は受けません。それに DTR を落とすと、モデムがハングアップ することになります。 BIOS が、すでに UART を初期化してあり、ブートローダーにそのことを知らせ ることができる、設定オプションを用意しているかもしれません。このことを 考えに入れて下さい。ブートローダーが UART を初期化すると、 DTR が落ちて 、ラインはハングアップします。場合によっては、ハングアップするたびに衛 星回線を再予約しないと、別の電話が着信できなくなります。 ラインノイズに関する要件を満たして下さい。ブートローダーがスタートして 、それから無意味な文字を 2、3 秒ごとに出している、と想像してみてくださ い。これは無論まずいのですが、もしマシンが、ブートローダーのプロンプト で、立往生したままだとすると、モデム内の障害を、遠隔地から診断して、修 復するのは困難です。解決方法は、タイマーの時間切れで、デフォルトイメー ジをブートすることです。もしユーザー(あるいはラインノイズ)がタイプを 始めたとしても、ブートは始まります。例えば、ブートローダーの設定は以下 のようにできます。 # 30分後にとにかくマシンをスタートさせる # 30 * 60 秒 * 10 分の 1 秒単位 lifetime 18000 デフォルトではライフタイマーは無いはずです。このタイマーは、利用率が高 いアプリケーションでも役に立ちます。利用率が 99.999% になるように計画さ れている環境でマシンを使う場合、この "lifetime"値は、3 分前後に設定して ください。 BIOS から読み込んだ情報が正しいことを確認して下さい。例えば、もしシリア ルポートのレジスタアドレスは 0x000 だと、 BIOS の拡張データエリアが示唆 している場合は、レジスタを初期化しようとしないでください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ F.2. BIOS の作者へのお願い 皆さんの BIOS に、リモート操作のサポートを追加してくれて感謝します。 2 、3 改善すれば、これをサポートしている利点が最大になります。そのほとん どは、Section F.1 に載せてあります。 ・ ユーザーインタフェースは、単純なままにしておいて下さい。派手なカー ソルで指し示すような端末を、サポートする必要はありません。見栄えの 良い機能を付けても、使える端末エミュレータクライアントの数を、制限 するだけです。驚くほど多数の端末エミュレータが、非常にバグが多い DEC VT100 を実装しています。 低速をサポートする他に、データ転送量が少ない場合の、ユーザーインタ フェースも試験して下さい。 ・ あまりやり過ぎないで下さい。 Linux では、ブートローダーとオペレーテ ィングシステムの両方が、シリアルコンソールを明示的にサポートしてい ます。ですから BIOS に必要なのは、 BIOS 自身のシリアルインタフェー スをサポートすることだけです。 Linux は、汎用のシリアルリダイレクシ ョン機能を、サポートする必要はありません。どうしても他のオペレーテ ィングシステム用に、そういった機能を用意する場合は、ぜひシステムブ ート後に、その機能を無効にできるようにして下さい。 ・ ラインノイズのせいで、コンピュータがブートできなくなるようにはしな いで下さい。 BIOS の設定画面に入るのに、必要なキー入力が一つしかな い、ということは止めて下さい。 dell や hp あるいは ibm のようにフレ ーズを使って、ユーザーや営業部門の人たちをハッピーにして下さい。 lifetime のアイデアは、 Section F.1からコピーして下さい。 ・ 首尾一貫したプロンプトを表示して下さい。 500 台の PC を、スーパーコ ンピュータアレイにして使っているユーザーを想像してみてください。自 分でも BIOS のパラメータを変えたいしょう。 Expect が、そのパラメータを設定しやすいようにして下さい 。 ・ Linux のユーティリティが動作することを保証して下さい。 Linux の nvram デバイスドライバが、 CMOS の内容をすべて返すかどうか確認して 下さい。そうすれば、大量のマシンで簡単に、同じ内容の CMOS 設定がで きます。 Figure F-2 と Figure F-3 にあるコマンドが、あるマシンから 別のマシンへ、 BIOS の設定をコピーするように動作するはずです。ここ でいうマシンの型、モデル、および BIOS のバージョンは同一です。 Figure F-1. /dev/nvram を設定して、CMOS の設定にアクセスする ┌────────────────────────────┐ │bash# /dev/MAKEDEV nvram │ │bash# vi /etc/modules.conf │ └────────────────────────────┘ alias char-major-10-144 nvram ┌────────────────────────────┐ │bash# depmod -a │ └────────────────────────────┘ Figure F-2. CMOS の設定を得る ┌────────────────────────────┐ │bash# cat /dev/nvram > /etc/nvram.bin │ └────────────────────────────┘ Figure F-3. CMOS の内容を設定する ┌────────────────────────────┐ │bash# cat /etc/nvram.bin > /dev/nvram │ └────────────────────────────┘ ・ Linux から動かせる、フラッシュ BIOS のアップグレードプログラムを用 意して下さい。そしてそのソースコードが利用できるようにして下さい。 あるいは、仕様を公開して下さってもかまいません。そうすれば、そうい うプログラムは書けます。 フラッシュ BIOS のアップデートプログラムは、その多くがマイクロソフ トの MS-DOS のブートディスクから起動します。そのアップデートプログ ラムが、同じような FreeDOS でも動作するかどうか、ぜひ調べて下さい。 Linux コンピュータの多くは、マイクロソフトのオペレーティングシステ ムソフトウェアのライセンスを持っていません。ですから、法律上は、 MS-DOS のブートディスク作成が不可能です。 ・ BIOS が備えているシリアルサービスについて、ドキュメントで明らかにし て下さい。 ‘シリアルリダイレクション’ 機能を持っている BIOS の中 には、 BIOS を普通のテキスト端末にリダイレクトできず、その代わりに 専用のプロトコルを使うようになっているものがあります。でもこれでは 、 Linux のシリアルコンソールユーザーには、ほとんど役に立ちません。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Appendix G. この HOWTO について G.1. 著作権 本節の邦訳は参考です。正式なものは英文をお読み下さい。 The first edition of this document is copyright 2001 Mark F. Komarinski and is distributed under the terms of the Linux Documentation Project (LDP) License, see Section G.1.1. 本文書の初版の著作権は copyright 2001 Mark F. Komarin ski となっており 、 Linux Documentation Project (LDP) License の条件下で配布されています 。当該ライセンスについては、 "Linux Documentation Project License" のセ クションをみて下さい。 The revisions to this document for the second edition are copyright AARNet Pty Ltd (Australian Company Number 084 540 518), 2001-2002. These parts were written by Glen Turner. He asserts his moral rights to be identified as one of the authors of this work under the Copyright Act 1968 (Commonwealth of Australia). The Australian Academic and Research Network and Glen Turner distribute these parts under the terms of the Linux Documentation Project (LDP) License, see Section G.1.1. 第二版についての本文書の改訂版の著作権は copyright AARNet Pty Ltd (Australian Company Number 084 540 518), 2001-2002 となっています。これ らの部分は Glen Turner が書きました。 Copyright Act 1968 (Commonwealth of Australia) の下で、Glen Turner は自分がこの文書の著者の一人であると 証明する道義的権利を主張します。 The Australian Academic and Research Network と Glen Turner は Linux Documentation Project (LDP) License の 条件下でこれらの部分を配布します。当該ライセンスについては、 "Linux Documentation Project License" のセクションをみて下さい。 This license meets the Debian Free Software Guidelines , so you should find this HOWTO in the Debian package doc-linux-html. 本ライセンスは Debian Free Software Guidelines を満たしていますので、この HOWTO は Debian パッケージの doc-linux-html にあるはずです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ G.1.1. Linux Documentation Project License 本節の邦訳は参考です。正式なものは英文をお読み下さい。 Unless otherwise stated, Linux HOWTO documents are copyrighted by their respective authors. Linux HOWTO documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions. 他に特別明言されていない限り、 Linux HOWTO 文書の著作権は個々の著者に属 する。この著作権の告知がそのすべての複製で維持される限り、 Linux HOWTO 文書は、その全体、あるいはその一部を、どのような物理的ないし電子的媒体 で、再作成ないし配布しても良い。商業的再配布はこれを許可し、また奨励す る。ただしそのような配布はいずれもその著者に通知してもらいたい。 All translations, derivative works, or aggregate works incorporating any Linux HOWTO documents must be covered under this copyright notice. That is, you may not produce a derivative work from a HOWTO and impose additional restrictions on its distribution. Exceptions to these rules may be granted under certain conditions; please contact the Linux HOWTO coordinator at the address given below. 翻訳物、派生した著作、ないしは Linux HOWTO 文書を組み込んだ集合的著作は 、すべてこの著作権の告知の下で保護されねばならない。すなわち、 HOWTO か ら派生した著作を作成しその配布物に新たな制約を課することをしてはならな い。ある条件下ではこれらの規則に対する例外も許可される。その場合はどう か Linux HOWTO 調整担当者へ下記アドレス宛てに連絡してもらいたい。 In short, we wish to promote dissemination of this information through as many channels as possible. However, we do wish to retain copyright on the HOWTO documents, and would like to be notified of any plans to redistribute the HOWTOs. つまり我々はできる限り多くの経路を通じて、この情報の普及を促進すること を望んでいる。しかしながらこの HOWTO 文書の著作権を維持することは切に望 んでいるし、この HOWTO の再配布案はどんなものであれ、通知してもらいたい 。 If you have any questions, please contact . どんなものであれ質問があれば、どうか に連 絡してもらいたい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ G.2. 免責条項 本節の邦訳は参考です。正式なものは英文をお読み下さい。 No liability for the contents of this documents can be accepted. Use the concepts, examples and other content at your own risk. As this is a new edition of this document, there may be errors and inaccuracies, that may of course be damaging to your system. Proceed with caution, and although this is highly unlikely, the author(s) do not take any responsibility for that. 本文書の内容に関するいかなる責任も負わない。その概念、例、およびその他 の内容は自分の責任において使用すること。これは本文書の新しい版であるか ら、間違いや不正確な記述はありうるし、読者のシステムに被害をあたえるこ とも当然ありうる。慎重に進めてもらいたい。被害を与えることはまずないだ ろうが、もし被害を与えたとしても、著者はいかなる責任も負わない。 All copyrights are held by their by their respective owners, unless specifically noted otherwise. Use of a term in this document should not be regarded as affecting the validity of any trademark or service mark. すべての著作権は特に他で明記しない限り、個々の所有者が所有する。この文 書内の用語の使用は、どのような商品商標あるいは役務商標の有効性にも影響 すると見なすべきではない。 Naming of particular products or brands should not be seen as endorsements. 特定の製品ないし商標の名称に言及しても、それが是認されていると見なすべ きではない。 You are strongly recommended to take a backup of your system before major installation and backups at regular intervals. 危険を伴うインストールを行なう場合は、事前にバックアップをとり、かつ定 期的にバックアップをとることを、読者には強く推奨する。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ G.3. 謝辞 この HOWTO の初版は、Mark Komarinski が書きました。これは Miquel van Smoorenburg が書いた、 /usr/src/linux/Documentation/serial-console.txt に基づいていました。 この HOWTO の第二版は Australian Academic and Research Network のスタッフ、主に Glen Turner と David Vu が書きまし た。 次の人たちからは、この HOWTO に援助をいただきました。順不同で掲載します 。 LinuxSA mailing list 第二版の校正。LinuxSA というのは南オー ストラリアに本拠をおく Linux ユーザーグループです。 David Lawyer 第二版の技術レビューと、更新したこの HOWTO の Linux Documentation Project への推薦。 David は Text-Terminal-HOWTO [28] の著者です。 Devin Reade Xyplex ターミナルサーバーの情報。Devin は http://www.gno.org/~gdr/ xyplex/ で、 Xyplex ターミナルサーバーに関する情報の保守をしていま す。 Linux on Dell PowerEdge mailing list の Michael Brown, Marc Mondragon および他のメンバー BIOS が文字をどうやってシリアルポートにリダイレクトするのかを、技術 的に説明してくれました。 Linux on Dell PowerEdge list は、 subscribe linux-poweredge という文を含むメッセージを、 に送れば購読できます。 Thomas Lunde と Gabor Kiss 文法の誤りとタイプミスを指摘してくれました。 Darren Young Red Hat Linux のバージョン 7.2 用に、 /etc/security/console.perms を更新してくれました。 芳賀靖史 この HOWTO を JF Linux documentation プロジェクト向けに、日本語に翻 訳するかたわら、沢山の間違いを指摘してくれました。 Thomas Horsley シリアルコンソールを使っていても、 X Window System は動かす必要があ るかもしれないことを指摘してくれました。 Figure 7-3 で使用している 、 gdm の設定をいただきました。 Greg Matthews, Nathan Neulinger および Romildo Wildgrube カーネルパラメータに console=ttyS…r を使うとマシンがハングしてしま ったので、そのことを報告してくれました。これは最初に DSR と DCD が アサートされているかどうかを調べずに、 CTS を検査するループを行なっ ているという、カーネルのバグによるものです。 Shaun Karl と Keisuke Nakao Debian GNU/Linux 用の手順をいただきました。 Igor Sviridov Section E.5 で使用している、 Livingstone Portmaster の設定をいただ きました。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ G.4. コメントと訂正 この HOWTO を現在保守しているのは Glen Turner です。どうか訂正や追加、 コメント、そして批評は に送って下さい 。 この HOWTO を使って、自分たちのマシンでシリアルコンソールがうまく設定で きたという電子メールを送ってくれた皆さんにも感謝します。お使いの HOWTO のバージョン(表紙を参照して下さい)や、 Linux ディストリビューション名 とそのバージョン、対象マシン数は、ぜひ明示して下さい。その情報があれば 、保守担当者は自分の雇主に、この HOWTO に関わる作業を続けることで生まれ る充分な公共の利益を示すことができます。その情報は、他のどのような目的 にも使用しません。 Linux の改善は続いています。ですから、ご自分の Linux ディストリビューシ ョンの最新バージョンに必要な、そういった小さな部分的な変更点もどうか送 って下さい。 この HOWTO の著者は著述を専門にしているわけではありません。ですからもし 理解し難い部分などが見つかったら、そのときは保守している人に知らせてあ げて下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ G.5. 日本語版謝辞 校正にあたり、JF プロジェクトの皆様にご協力いただきました。特に、以下の 方々(順不同)には貴重なアドバイスをいただきました。この場を借りて、御 礼申し上げます。鈴木康弘さん、Akihiro KODAさん、 Seiji Kaneko さん、高 橋聡さん、中野武雄さん、山下義之さん、日下部陽一さん、小野間博さん、佐 野武俊さん、山崎康宏さん。もし、洩れがありましたらご連絡下さい。早急に 対処いたします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Colophon この文書は DocBook 4.1 SGML で書かれています。 SGML ソースファイルを生 成するために XEmacs と PSGML を使用しました。 HTML と PostScript および PDF の出力は、 Linux Documentation Project の手により、DocBook ソースか ら生成されました。 Linux Documentation Project で生成した PDF では、引用符(‘’ “”)や 省略符号といったような文字が、アンパサンド(&)になっているようです。そ ういう時はおそらく、 PostScript file をダウン ロードしてから、 GhostScript を使い、 以下のコマンドで PostScript ファイルを PDF に変換してもかまいません。 ┌──────────────────────────────────────┐ │bash$ gs -q -dNOPAUSE -dBATCH -dSAFER \ │ │-dNOPLATFONTS -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true \ │ │-sPAPERSIZE=a4 -sDEVICE=pdfwrite -dCompatibilityLevel=1.2 \ │ │-sOutputFile=Remote-Serial-Console-HOWTO.pdf \ │ │-c .setpdfwrite -f Remote-Serial-Console-HOWTO.ps │ └──────────────────────────────────────┘ Notes [1] 訳注:contradictionary = contradiction(矛盾、否定)と dictionary (辞書)を掛けた洒落。反語辞書くらいの意。 [2] Linux のバージョン 2.4 カーネルも、コンソールメッセージを Centronics または IEEE 1284-2000 の、パラレルプリンタインタフェー スに出力する機能をサポートしています。 [3] 邦訳は Serial-HOWTO です。 [4] 邦訳は Modem-HOWTO です。 [5] bps [6] この違いについては、筋の通った理由はありません。この奇妙な点を修正 するパッチを linux-kernel メーリングリストに遠慮なく投稿してくださ い。 [7] ビットタイムというのは、 1 ビットの転送に要する時間のことです。信 号のビットタイムとデータのビットの違いは、 1.5 ビットタイムの信号 というのはあり得るけれども、 1.5 ビットのデータというのはあり得な い、ということを考えれば明らかです。 [8] 邦訳は、 Text-Terminal-HOWTO です。 [9] IBM PC/AT のハードウェアにはよくあることですが、 “最初のハードデ ィスクの MBR から、ブートローダーをロードする” というのは説明が簡 単すぎます。 BIOS の設定が許せば、 BIOS 拡張を搭載しているコントロ ーラカードなら、どれに接続されているハードディスクでも、そのうち最 初に検出した二台のハードディスクから MBR がロードできます。したが って、最初に検出した二台の IDE ディスクのうちの一台と、最初に検出 した二台のSCSI ディスクのうちの一台から、 MBR はロードできます。 [10] これも説明が簡単すぎます。 MBR が 512 バイトというのは小さ過ぎて、 複雑なオペレーティングシステムを、充分ロードできるだけのプログラム は収まり切れません。ですから、ほとんどのブートローダーには段階が二 つあります。最初の段階は MBR の中にあり、ディスクのどこか(例えば 最初のパーティションのブートセクターのような場所)から、ブートロー ダーの第二段階をロードすることしかできません。ブートローダーの第二 段階では、ユーザーインタフェースを表示して、オペレーティングシステ ムをロードします。 [11] 邦訳は、 Linux BootPrompt-HOWTO です。 [12] 邦訳は、 LILO mini-HOWTO です。 [13] USB ドングルに付けたシリアルコンソールは Linux のバージョン 2.5.7 以降のカーネルでのみ使用可能です。 2.5 シリーズのカーネルは開発者 向けのバージョンであり、本番用にすぐ使えるものではありません。 [14] 訳注:\n はそのマシンのホスト名を、\o はそのマシンのドメイン名、\l は現在の tty ライン名を、それぞれ表します。 agetty(8) 参照。 [15] これは見かけほど非効率ではありません。汎用のファイルシステムでフォ ーマットしているディスクの内、最後の 5 パーセントはいつも性能が悪 化するので、空のままで残すのが一番なんです。 [16] 訳注:ブレークアウトボックスに関して原著者に説明を求めたところ、以 下のコメントをいただきました。 「ブレークアウトボックス」というのは、ケーブルを用いてそれを個々の ワイアに分ける器具です。こうすると、そのケーブル内のワイア一本一本 を監視したり、流れる情報を変更したりできるようになります。ほとんど の RS-232 用ブレークアウトボックスには、各ワイアごとの RS-232 信号 を表示する LED が付いています。またその多くにはスイッチやワイアジ ャンパーがあり、配線を簡単に変えられるようになっています。高価な RS-232 用ブレークアウトボックスについては、良い写真が http:// www.comcraftfr.com/100c_l.htm にあります。安価な RS-232 用のブレークアウトボックスは 、たいていの電気店で見つかります。 [17] このコマンド例で使用しているオプションは、-r の誤りだと思われます 。原著者には連絡済みですが、まだ回答はありません。 [18] 訳注:"The Register" に関して原著者に問い合わせたところ、これはオ ンライン新聞だという答えでした。場所は、 www.theregister.co.uk です。 [19] 訳注:ソフトウェア上の問題点がアンダーグラウンドで発見された場合、 その問題点はある期間誰にもどこにも報告されないことがあり、その期間 を "zero day" というようです。この期間はその問題点を誰も知らないの でパッチも無いし対策もないから、その問題点を悪用できるというのが "zero day" が持つ意味らしいです。 [20] 訳注:ブラックハットハッカー(クラッカー)というのは、悪意を持って コンピュータやネットワークに侵入して、ファイルを壊したりデータを盗 んだりするようです。対するホワイトハットハッカーは、コンピュータや ネットワークのセキュリティ上の弱点を見つけてそれを公表し、管理者が その弱点を修復できるようにします。 [21] 訳注:ベイクドアラスカ(Baked Alaska)というのは、スポンジケーキにア イスクリームを載せて、メレンゲで包み、オーブンでさっと焼いたデザー トのこと。 [22] しかし、自分が良いと思うようなパスワードを、検索エンジンで検索しな いでください。インターネットに平文でパスワードを送るのは良いことで はないし、検索エンジンのログに、そのパスワードが載ってしまう可能性 もあります。 [23] 訳注:この記事のタイトルは "Serial Terminal as Console" となってい ます。URL は若干違っていて、 "http://linuxjournal.com/article.php? sid=2040" になっているようです。 [24] 邦訳は、 Serial-HOWTO です。 [25] 訳注:シリアルコンソールのハングアップを修復する、新しい SysVinit パッケージ [26] 訳注:2002 年 6 月 17 日現在、当該アップデートは ftp:// updates.redhat.com/7.1/en/os/ になっているようです。 [27] 邦訳は、 Burning a RedHat CD HOWTO です。 [28] Text-Terminal-HOWTO です。