# Remote Serial Console HOWTO

v2.4 2002年 10月 13日
Glen
Turner
Australian Academic and Research Network

    glen.turner+howto@aarnet.edu.au

Mark
F.
Komarinski

    mkomarinskiATwayga.org

日本語訳：芳賀靖史

    yasufumi.haga@nifty.com

2.4
2002年10月3日
カーネルフロー制御のバグ情報とケーブリング、 Debian および Livingston Portmaster の追加、誤字修正（特に 日本語への翻訳の際見つかったもの）
2.3
2002年7月11日
Red Hat Linux 7.3 用にアップグレード。 シリアルポート速度とUART、ioctlsave の修正。
2.2
2002年5月22日
マイナーチェンジ
2.1
2002年5月16日
gdt
カーネルのコンソール構文を訂正。USB と devfsを追加
2.0
2002年2月2日
gdt
第二版
≤1.0
2001年3月20日
mfk
初版

RS-232 のシリアルコンソールを使えば、 非同期シリアルポートに接続した端末やモデムから Linux を制御できるようになります。 そうなれば、もう管理対象マシンのモニターやマウス、 キーボードを使わなくてもシステムを管理できます。 シリアルコンソールが役に立つのは、 Linux システムを遠隔地のサイトや、 あるいは高密度のラックに配備しているところなのです。

この HOWTO では、 シリアルコンソールを接続するのに必要な、 Linux の設定方法を説明します。

シリアルコンソール
コンソール
シリアル
モデム
RS-232

## 献辞

私 Glen Turnerは、自分の家族に謝意を表したいと思います。 この HOWTO を書くために非常に長い間、幾晩も幾晩も、 このプロジェクトに注力できたのは、家族のおかげです。 Karen, Kayla そして Ella、ありがとう。

## はじめに

console（コンソール） 名詞 [ラテン語の consolatio(n) より。 “安楽、精神的慰めの意。”] オペレータに弔辞や死亡記事を 表示したり印刷したりするための装置。

Stan Kelly-Bootle, The Computer Contradictionary 訳注：contradictionary = contradiction（矛盾、否定）と dictionary（辞書）を掛けた洒落。反語辞書くらいの意。 .

### コンソールとは何か？

コンソールとは、システム管理メッセージ用のテキスト出力装置のことです。 こういったメッセージは、カーネルからも出てくるし、 init システムからも出ます。 それにシステムログ採取プログラムからも出てきます。

最近の小型コンピュータでは、 コンソールは通常、 そのコンピュータに付属しているモニターとキーボードになっています。

一方、昔からずっと使っているコンピュータのコンソールは、 DEC VT100 のような端末を、 RS-232 で接続したものになっています。 この端末は施錠された部屋の中にあり、 ミニコンピュータのオペレータが頻繁に監視しています。 Sun や Hewlett-Packard、 IBM の大規模システムでは、 今でもシリアルコンソールを使っています。

コンソールは、通常ログイン可能になっています。 そして一番信頼できるログインセッションは、 他でもないコンソールからのログインセッションだと、 オペレーティングシステムの多くの部分は考えます。 ですから、コンソールからスーパーユーザーである root でログインするというのは、 システムの動作異常に直面した場合の最後の砦となる、 切札のコマンドラインなのです。

### シリアルコンソールを使う理由

普通のユーザーには、シリアルコンソールよりも、 直接つながっているキーボードと画面をコンソールにしている方が、 メリットは大きいものです。 シリアルコンソールはもっと低速で、 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 マシンをシリアル端末にしてもかまいません。

  安全性を考慮して設置したマシンの中には、 セキュリティに関わるイベントをすべて、 手を加えずそのままログに記録する必要があるものがあります。 コンソールメッセージをすべて印刷するというのが、 この要件を満たす一つの方法です。 シリアルコンソールをシリアルプリンターに接続すれば、 この条件は達成できます。 Linux のバージョン 2.4 カーネルも、コンソール メッセージを Centronics または IEEE 1284-2000 の、 パラレルプリンタインタフェースに出力する機能をサポートしています。

組み込みソフトウェアを開発する

  Linux は、 組み込みアプリケーションのオペレーティングシステムとして、 ますます使われるようになっています。 このようなコンピュータにはキーボードも画面もありません。

  この組み込みコンピュータに、 ソフトウェア開発者が直接アクセスできるようする簡単な方法が、 シリアルポートを使うことです。 これはデバッグにはまことに貴重なものです。 組み込みコンピュータ用に設計されているチップセットのほとんどに シリアルポートがあるのは、まさにこのためなのです。

  この RS-232 ポートは、 出荷する製品では、外部コネクタに出す必要はありませんが、 出しておいて、 アップデートするソフトウェアをダウンロードするのにもよく使います。

通信装置用保守端末にする

  Linux は通信装置内のオペレーティングシステムとして、 ますます使われるようになっています。 Carrier Grade Linux コンソーシアムでは、この流れを加速し一元化したいと 思っています。

  ほとんどの通信装置は、 離れた場所にあるコンピュータが遠隔管理しています。 でもサイトの技術者たち （通信業界用語では 保守要員 といいます）は、 この装置にアクセスして、設置の変更状況を調べたり、 報告された障害を調べたりする必要があります。 この保守要員が使う端末のことを 保守端末 といいます。 保守端末は通信装置の 保守インタフェース プラグに差し込んであります。 シリアルコンソールは理想的な保守インタフェースになるのです。

ミニコンピュータシステムとは違い、 IBM PC は シリアルコンソールを使うような設計にはなっていませんでした。 しかし、これでは不都合なことが二つ出てきます。

第一に、電源投入時のセルフテストメッセージと基本入出力システム （つまり BIOS）のメッセージは画面に送られ、 ユーザーの入力はキーボードから受け取るようになります。こうなると、 シリアルポートを使って BIOS を再設定するのが難しくなり、 電源投入時のセルフテストのエラーもわからなくなります。

ラックマウント サーバー 装置の製造業者数はますます増加しており、 その製造業者は自分たちの BIOS を変更して、 RS-232 ポートをオプションで使えるようにしています。 これは BIOS を設定したり、テストメッセージを受け取るためのものです。 マシン、具体的にいえばシリアルコンソールを用いて運用するマシンを 購入するつもりなら、この機能が備わっているものにしてください。 どうしてもシリアルポートから BIOS へアクセスする必要がある既存のマシンについては、 PC Weasel 2000 などの、ハードウェアによる解決方法があります。

第二に、 IBM PC の RS-232 ポートは、 モデムの接続用に設計されています。 よって、 PC のシリアルポートを端末に接続する場合は、 ヌルモデムケーブルが必要になります。

### ‘コンソール’ の新しい意味

文書の作者の中には、 システムユニットに付いているキーボートとモニターの組を指して ‘コンソール’という言葉を使っている人がいます。 ある Linux の文書では、 これを‘物理コンソール’と表現しています。 この文書によれば、 システムメッセージが現れるコンソールを、 ‘論理コンソール’と表現しています。

この違いを実例で示しましょう。 X ウィンドウ は物理コンソール上でスタートするでしょうが、 X ウィンドウ のスタート時に発生した障害が出したシステムメッセージは、 論理コンソールに書かれるはずです。

混乱を避けるため、この HOWTO ではシステムメッセージが表示される場所を ‘コンソール’という言葉で表現します。 また、“物理コンソール”という混乱を招く言葉ではなく、 “付属のモニター・キーボード”と表現を使います。

デバイス名についても同じように区別します。 `/dev/console` というデバイスは、コンソールにメッセージを送るのに使います。 `/dev/systty` というシンボリックリンクは、 付属のモニター・キーボードで使用するデバイスを指しています。 このデバイスは、たいてい `/dev/tty0` になっています。

#### ‘コンソール&lsquoを指すいろいろな言葉

文書
この HOWTO | コンソール | 付属のモニター・キーボード
ある Linux 文書 | 論理コンソール | 物理コンソール
デバイス名 | `/dev/console` | `/dev/systty`

### 設定の概要

シリアルコンソールの設定には、主な段階が五つあります。

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 に貢献していただいた方々については、 で謝意を表しました。

## 準備

この章では、万一シリアルコンソールのスタートに失敗しても、 元のコンソールをもう一度確実に使えるようにします。

それから RS-232 ポートとそのパラメータの選び方を論じます。

### 万が一に備える

有能なシステム管理者には、万が一を考えた実践的な対応策が常にあり、 それで障害を何とかうまく処理するものです。 シリアルコンソールを設定する上で誤りがあると、 シリアルコンソールと付属のモニター・キーボードの両方が、 使用不能になる可能性があります。 ですから、もう一度コンソールへアクセスできるようにするには、 こういった対応策が必要になるのです。

Linux ディストリビューションの多くは、 ブートディスクが作れるようになっています。 コンソールの設定を変更する前にブートディスクを作れば、 ブートディスクがカーネルに渡すパラメータは正しいものになります。 設定の変更後に作ってしまうと、 そのパラメータにはエラーが入っているかもしれません。

Red Hat Linux では、 ブートディスクの作成前に、 動作中のカーネルのバージョンを確認します。

    bash$ uname -r
    2.4.2-2

そして、このバージョンを使ってブートディスクを作ります。

    bash# mkbootdisk &hyphen;&hyphen;device /dev/fd0 2.4.2-2

一方、Debian GNU/Linux でブートディスクを作る場合は、 動作しているカーネルのバージョンを確認し、 そのバージョンを使ってブートディスクを書きます。

    bash# mkboot /boot/vmlinuz-2.4.2-2

あるいは、 そのマシンを使ってレスキューディスクを用意するという方法もあります。 良く使うのは Tom's root boot です。

### シリアルポートを選択する

#### シリアルポートの名前

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）を使っています。 というのは、ほとんどの読者が使いたいと思っているのが、 そのシリアルポートだからです。

##### 同じシリアルポートに対する様々な名前

IBM PC | Linux カーネル | devfs 付き Linux カーネル | 大半のブートローダー
--- | --- | --- | ---
`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`

#### コンソールのシリアルポート用割り込みが共有できない

シリアルポートをコンソール用に使うと、 そのシリアルポートは他のデバイスと割り込みを共有できなくなります。 IBM PC のデバイスは、 普通 で示すように設置されています。 ですからもしコンソール用にシリアルポート `/dev/ttyS0` を使う場合は、 PC にシリアルポート `/dev/ttyS2` を設置しないようにして、割り込み 4 を共有しないようにして下さい。 `/dev/ttyS2` が物理的に取り外せない場合は、 で示しているように、 `setserial` コマンドを使ってそのポートを無効にして下さい。

##### IBM PC/AT の RS-232 ポート用に使用する割り込み

デバイス | 割り込み | ポート
--- | --- | ---
`/dev/ttyS0` | 4 | 0x3f8
`/dev/ttyS1` | 3 | 0x2f8
`/dev/ttyS2` | 4 | 0x3e8
`/dev/ttyS3` | 3 | 0x2e8

##### `/etc/rc.serial` で `setserial` コマンドを使い、 シリアルポート `/dev/ttyS2` を 無効にする。

    # /dev/ttyS2 を無効にしているので、割り込み 4 は共有されない。
    # というわけで、/dev/ttyS0 はシリアルコンソールに使える。
    setserial /dev/ttyS2 uart none port 0x0 irq 0

ソースコードを読んでいる限りでは、 割り込み共有の制約はたんに Intel Architecture-32 だけではなく、 すべてのコンピュータアーキテクチャにあてはまるように思えます。

### シリアルポートの速度とパラメータを選択する

この 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

邦訳は Serial-HOWTO です。

および Modem-HOWTO

邦訳は Modem-HOWTO です。

を参照してください。

カーネルやブートローダー、それにログインアプリケーションで、 シリアルポートのパラメータを設定するコマンドの構文を説明する場合は、 RS-232 の特性を表す以下の変数を使用します。

<速度>

  一秒あたりのビット数で計測したシリアルリンクの速度

  最近の PC で動作している Linux カーネルでは、シリアルコンソールの速度として、 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200（ビット毎秒 bps） をサポートしています。

  シリアルインタフェースをシリアルコンソールで使わなければ、 カーネルがサポートするシリアルビットレートの範囲はもっと広がります。 この違いについては、筋の通った理由はありません。 この奇妙な点を修正するパッチを linux-kernel メーリングリストに遠慮なく投稿してください。

  ごく最近の 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ビット毎秒です。 でもこれではあまりにも選択の幅が狭すぎます。 低速の国際電話回線では電話をかけられず、かといって、 大きいファイルのアップロードに耐えられるほど高速でもないのです。 ですから場合によっては、必要な速度を選んだ結果、 ソフトウェアの設定がもっと特殊なものになってしまうかもしれません。

  #### 拡張 BNF 記法で表したシリアルビットレート構文

      <速度> ::=  <数字列>

      <数字列> ::= <数字> | <数字><数字列>

      <数字> ::= 0 | 1 | … | 9

<パリティ>

  パリティビットの種類と、パリティビットが 1 の場合の解釈

  使用できる値は、パリティ無しの場合は `n` 、 1 ビットの偶数パリティなら `e` 、 1 ビットの奇数パリティなら `o` となります。

  この中でも、パリティ無し、 および 8 ビット幅のデータを使うことをお奨めします。

  パリティを使う場合は、普通偶数パリティを用います。

  パリティはエラーを検出する基本的な方法です。 最近のモデムに備わっているエラー検出機能とエラー訂正機能は、 ずっと性能が良いものになっています。 しかし結果的にパリティビットが保護するのは、 モデムとシリアルポートの間のケーブル上のデータだけですから、 そのケーブルのエラー発生率が低ければパリティビットは不要です。 実際、ケーブルのエラー発生率はたぶん低いと思います。

  #### 拡張 BNF 記法によるシリアルパリティ構文

      <パリティ> ::= n | e | o

<データ>

  一文字あたりのデータビット数

  Linux で使っているのが、最低でも 7 ビット必要な ASCII 文字セットなので、 使用できる値は `7` ビットか `8` ビットです。

  データ幅は 8 ビット をお奨めします。 これならリンクを簡単にファイル転送で使えるし、 英語以外のテキストが現れても大丈夫です。

  #### 拡張 BNF 記法によるシリアルデータビット構文

      <データ> ::= 7 | 8

<ストップ>

  ストップビットタイム数 ビットタイム というのは、 1 ビットの転送に要する時間のことです。 信号の ビットタイム とデータの ビット の違いは、 1.5 ビットタイムの信号というのはあり得るけれども、 1.5 ビットのデータというのはあり得ない、 ということを考えれば明らかです。

  使用できる値は、`1` か `2` です。

  ストップビットタイムには 1 をお奨めします。

  RS-232 ケーブルが非常に長い場合は、 2 ストップビットタイム必要かも知れません。

  1.5 ストップビットタイムというのを時折見かけることがあります。 これは、1 ストップビットタイムで済ますにはリンクが長すぎるし、 2 ストップビットタイムが必要なほどには長いわけでもない場合に、 データのスループットをあと 4 パーセント上げるためにそうしているのです。 でも 1.5 ストップビットタイムというのは危険すぎるので、 今ではめったに使いません。

  #### 拡張 BNF 記法によるシリアルストップビット構文

      <ストップ> ::= 1 | 2

<フロー制御>

  使用するフロー制御のタイプ

  Linux カーネルでは、無手順と CTS/RTS のフロー制御が できるようになっています。

  デフォルトは無手順です。これを表す場合は <フロー制御>を省略します。

  推奨するのは CTS/RTS のフロー制御です。 シリアルポートへのログインアクセスもできるようにもなっている場合には、 特にお奨めです。 これは `r` という <フロー制御> で表します。

  CTS/RTS のフロー制御は、 文字の流れを調整するものです。コンピュータが文字を伝送するのは、 モデムが "Clear To Send" をアサートしてからです。 コンピュータ側に文字を受け取るだけの充分なバッファがあれば、 コンピュータは "Ready To Send" をアサートします。 だから、コンピュータのバッファもモデムのバッファも、 飽和してオーバーフローするというようなことはありません。

  カーネルの CTS/RTS によるフロー制御は、現時点ではバグが多いです。 フロー制御が有効になっていても、 CTS がアサートされないと、 コンソールメッセージの表示に著しく時間がかかることがあります （モデムに着信していなかったり、 ヌルモデムケーブルやケーブルでターミナルサーバー接続しても、 セッションが無い場合にこうなります）。 カーネルのスタート時にカーネルメッセージが大量に出ると、 その結果、カーネルの CTS/RTS フロー制御を組み込んで構成したマシンでは、 リブートに何分も時間がかかることがあります。

  ですから、現時点ではカーネルの CTS/RTS フロー制御はお奨めできません。 筆者はカーネルパッチを持っています。 これがカーネル本体に反映されることを強く希望しています。

  しかし、ユーザー空間のアプリケーションで使用する CTS/RTS フロー制御はカーネルのバグとは無関係ですから、 getty にはやはりこのフロー制御をお奨めします。

  #### 拡張 BNF 記法によるシリアルフロー制御の構文

      <フロー制御> ::= <nil> | r

現時点では、カーネルは RS-232 のステータスラインを無視します。 ですから、 "Data Carrier Detect" と "Data Set Ready" がアサートされていなくても、カーネルメッセージは出力されます。 この結果、カーネルメッセージは、 アイドル状態でコマンドモードになっているモデムに送られることになります。

コンソールが CTS や DSR、それに DCD をいいかげんに解釈すると、 RS-232 のマルチドロップ回線に、 シリアルコンソールを接続できなくなります。 マルチドロップ回線には、コンピュータが 3 台以上あり、 従来は 4 芯のケーブルか衛星通信サービス、 あるいは無線サービスを使用しています。

Linux のカーネルでは にある構文を使って、シリアルパラメータを記述します。 ブートローダーの多くが使っている構文は、 Linux カーネルが使っている構文のバリエーションです。

#### 拡張 BNF 記法によるカーネルのシリアルパラメータ構文

    <モード> ::= <速度><パリティ><データ><フロー制御>

<モード> に <ストップビット> が入っていないことに注意して下さい。 カーネルは、ストップビットの数は当然 1 だと思っているのです。 ですから長い RS-232 ケーブルをつなげる場合には、 この欠点を考慮する必要があります。

ほとんどのブートローダーでは、 `9600n8` がデフォルトになっていますが、 昔の端末になると、`9600e7` が一般的なデフォルトになっています。

たいていの Linux ソフトウェアやモデム装置では `9600n8` がデフォルトになっているので、 できればこれを使って下さい。

この HOWTO では、 常にシリアルポートの速度とパラメータを設定しています。 厳密には必要無いところであってもそうしています。 こうしておけば、推奨値や一般的なデフォルトになっている `9600n8` 以外のパラメータを設定している人たちに、 変更すべき箇所がわかるからです。

### モデムを設定する、あるいはヌルモデムケーブルを使う

モデムを使う場合は、 で選んだポート速度で動作するダムモデムになるように設定して下さい。 そのモデムがヘイズの AT コマンドを受け付ける場合は、 を参照して、モデムをダムモデムにして下さい。

端末とヌルモデムケーブルを使う場合は、 を見て下さい。ここで、ヌルモデムケーブルのピン配置を論じています。

### 端末あるいは端末エミュレータを設定する

使う端末は、シリアルパラメータに合わせて設定して下さい。 データビットやパリティビット、 それにストップビットが一致しなければなりません。 最近の‘スマート’モデムを使う場合は、 ビットスピードを合わせる必要はありません。 ダムモデムやあるいはヌルモデムケーブルを使用する場合は、 ビットスピードを合わせる必要があります。

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 を参照して下さい。

邦訳は、 Text-Terminal-HOWTO です。

## 必要なら 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 を設定して、 シリアルポートをコンソールで使うようにする。

ブートローダーを設定してシリアルポートを使う必要がある場合は、 に進んで下さい。 それ以外は、直接 に行って、 カーネルの構成変更を行なって下さい。 これには、ブートローダーを設定して、ブートパラメータを Linux カーネルに渡すという方法を使います。

## ブートローダーを設定する

PC が CPU をブートする際、 CPU は読み出し専用メモリからコードを取り出して実行します。 このコードが基本入出力システム、つまり BIOS です。 それから、BIOS は最初のハードディスクのマスターブートレコードから、 ブートローダーをロードします。

IBM PC/AT のハードウェアにはよくあることですが、 “最初のハードディスクの MBR から、 ブートローダーをロードする” というのは説明が簡単すぎます。 BIOS の設定が許せば、 BIOS 拡張を搭載しているコントローラカードなら、 どれに接続されているハードディスクでも、 そのうち最初に検出した二台のハードディスクから MBR がロードできます。したがって、 最初に検出した二台の IDE ディスクのうちの一台と、 最初に検出した二台のSCSI ディスクのうちの一台から、 MBR はロードできます。

続いて、ブートローダーがオペレーティングシステムをメモリに読み込み、 それを起動します。 これも説明が簡単すぎます。 MBR が 512 バイトというのは小さ過ぎて、 複雑なオペレーティングシステムを、 充分ロードできるだけのプログラムは収まり切れません。 ですから、ほとんどのブートローダーには段階が二つあります。 最初の段階は MBR の中にあり、 ディスクのどこか （例えば最初のパーティションのブートセクターのような場所） から、ブートローダーの第二段階をロードすることしかできません。 ブートローダーの第二段階では、ユーザーインタフェースを表示して、 オペレーティングシステムをロードします。

BIOS もブートローダーも厳密に言えば不要です。例えば、 こういうバージョンの Linux がありますが、これは、普通は BIOS を内蔵しているフラッシュメモリから直接起動します。 Linux は、もともとカーネルをディスクの然るべきセクターに置いておけば、 対話的なブートローダーが無くても走るようになっているのです。

それでもブートローダーを使うのは、次のような利点があるからです。

- 複数のオペレーティングシステムがブートできます。詳細は、 Linux + Windows HOWTO を参照してください。

- 対話的にパラメータをカーネルに渡せます。 ハードウェアの問題を解決する場合に、これが役に立ちます。 例えば、割り込みラインのいくつかを無効にできるし、 ドライブへのダイレクトメモリアクセスを無効にできる、等々です。 カーネルパラメータのリストについては、 Linux BootPrompt-HOWTO 邦訳は、 Linux BootPrompt-HOWTO です。 を参照してください。

- 別々のカーネルを対話的にロードできます。 これは新しいカーネルをインストールする際に役立ちます。 というのは、こうすれば、 正しく動作するカーネルを簡単な予備にできるからです。

こういった理由から、システム管理者はシリアルコンソールから、 ブートローダーを対話的に管理可能にする必要があるのです。

LILO や GRUB、 SYSLINUX は、 IBM PC では一般的なブートローダーです。お使いの Linux では、これらのうちどのブートローダーを使っているのかを調べて、 そのブートローダーに該当するセクションの指示に従ってください。

### 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

邦訳は、 LILO mini-HOWTO です。

もあります。

LILO の設定は、 `/etc/lilo.conf` というファイルに保存されます。 このファイルの最初の部分は、イメージすべてに適用するものです。 それ以降の部分は、各カーネルごとに `イメージ` を記述する部分です。

LILO は、 シリアルポートを使うように設定してください。 シリアルラインのパラメータ構文は、カーネルが使うものに従います。

#### EBNF による LILO の `serial` コマンド書式

    serial=<シリアルポート>[,<速度>[<パリティ>[<データ>]]]

ここで使っている変数はカーネルが使うものと同じです （ に示してあります）。 また、<ポート> は以下のようになっています。

#### EBNF記法による LILO の `serial` 変数

    <シリアルポート> ::= 0 | 1| … | 3

この例では `/dev/ttyS0` を使っています。 LILO は、このデバイスがポート 0 だと認識しています。

#### LILO ブートローダーの設定サンプル

    serial=0,9600n8
    timeout=100
    restricted
    password=PASSWORD

`restricted` パラメータ、 および `password` パラメータを使用しているのは、 誰かが電話を使って接続してそのマシンをブートし、 以下のようにタイプして、 Linux のアクセスパーミッションの辺りをうろつきまわる、 というようなことをさせないようにするためです。

#### カーネルパラメータを使ってアクセスパーミッションを回避する

    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 でブートするカーネルを、 シリアルコンソールを使うように設定しなければなりません。

### 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` コマンドがまだ無い場合は、 ハッシュしたパスワードを作って下さい。 作り方は を参照して下さい。 このパスワードは root のアクセス権限を得るのに使えますから、 良い（推定されにくい）ものにしてください。

#### `md5crypt` を使って、 GRUB 用のハッシュしたパスワードを作る

    grub> md5crypt
    Password: **********
    Encrypted: $1$U$JK7xFegdxWH6VuppCUSIb.

このハッシュ化されたパスワードを GRUB の設定ファイルで使って下さい。 この様子は、 に示してあります。

#### パスワードを要求するようにした GRUB の設定

    password &hyphen;&hyphen;md5 $1$U$JK7xFegdxWH6VuppCUSIb.

に示すように、 シリアルポートを定義し、 そのシリアルポートを使うように GRUB を設定して下さい。

#### シリアルコンソール用の GRUB の設定

    serial &hyphen;&hyphen;unit=0 &hyphen;&hyphen;speed=9600 &hyphen;&hyphen;word=8 &hyphen;&hyphen;parity=no &hyphen;&hyphen;stop=1
    terminal serial

`&hyphen;&hyphen;unit` というのはシリアルポートの番号のことで、 ゼロから数えます。 unit 0 が `COM1` になります。

`&hyphen;&hyphen;parity` の値は省略せずに、 `no` や `even` そして `odd` のように、一字一字はっきりと綴って下さい。 `n` や `e` そして `o` のような、一般によく使われる省略形は 受け付けません。

なぜだか分からないけれども、シリアルポート上に出力が何もない場合は、 `serial` コマンド、または `terminal` コマンドの構文エラーを疑って下さい。

シリアルポートの他に、付属のモニター・キーボードでも GRUB ブートローダーを管理したい場合は、 にある別の設定を使って下さい。

#### シリアルコンソールおよび、付属のモニター・キーボード用の GRUB の設定

    password &hyphen;&hyphen;md5 $1$U$JK7xFegdxWH6VuppCUSIb.
    serial &hyphen;&hyphen;unit=0 &hyphen;&hyphen;speed=9600 &hyphen;&hyphen;word=8 &hyphen;&hyphen;parity=no &hyphen;&hyphen;stop=1
    terminal &hyphen;&hyphen;timeout=10 serial console

シリアルポートと付属のモニター・キーボードの両方を設定すると、 タイムアウトになるまで、両方のデバイスでキーの押下が要求されます。 キーが押されると、キーを押したそのデバイスにブートメニューを表示します。 ちょっとまごつくかもしれませんが、他のデバイスには何も現れません。

キーを何も押さないと、 `terminal` コマンドで `serial` か `console` のいずれか最初に記述してある方にブートメニューを表示します。 `timeout` で設定された時間が満了した後、 `default` で設定されたデフォルトオプションの内容でブートします。

#### シリアルコンソールと付属のモニター用に設定した場合の、 デフォルトデバイスへの 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 のメニュー項目の選択ができないかもしれません。しかし、 に示したやり方は、文字とおり正しいのです。 Use the ^ and v keys は、キャレット(^)キー （Shift6） でカーソルが上方に動き、 v キー (V) でカーソルが下方に動くという意味です。

GRUB の設定に際しては、 2 種類のタイムアウトが関係していることに注意して下さい。 `Press any key to continue` は `terminal --timeout=10` コマンドで設定した時間だけ表示されており、 キーボードか端末でだれかがキーを押して、 入力フォーカスを取得するのを待っています。 それからメニューが `timeout 10` 秒間表示されて、 その後でデフォルトのブートオプションが採用されます。

シリアルポートに取り付けた端末が、本物の VT100 でも VT100 のエミュレータでもない場合は、 GRUB のコマンドラインインタフェースを使わざるをえません。 このインタフェースは GRUB のメニューインタフェースよりもずっと難しいのですが、 VT100 の端末言語が無くても使えます。

#### VT100 以外の端末でコマンドラインインタフェースを使う場合の GRUB の設定

    terminal &hyphen;&hyphen;timeout=10 &hyphen;&hyphen;dumb serial console

この HOWTO では、 GRUB のコマンドラインの使用方法は説明しません。 このコマンドラインははるかに複雑なうえエラーが出易いので、 本番機で使うのはお奨めできません。 名人なら、カーネルのブートに必要なコマンドは GRUB の info マニュアルを調べればいいはずだということはわかっているでしょう。

GRUB のメニューは、 P を押してパスワードを入力したら、 対話的に編集できるようになります。 メニュー項目を追加して、 別のランレベルでマシンをブートするというのがうまいやり方です。 デフォルトランレベル用のメニューエントリと シングルユーザーモード （ランレベル s） 用のメニューエントリの設定サンプルを に示してあります。 シングルユーザーモードについては、`lock` コマンドを使ってパスワードを要求するのを忘れないで下さい。 シングルユーザーモードでは、 Linux のパスワードが 要求されません。

#### GRUB のメニューにシングルユーザーモードのオプションを追加する

    password &hyphen;&hyphen;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 からブートするカーネルを、 シリアルコンソールが使えるように設定しなければなりません。

### 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` の 最初の行 に新しく追加します。

#### EBNF 記法による、 SYSLINUX の `serial` コマンド構文

    serial <空白> <シリアルポート> [ <空白> <速度> [ <空白> <syslinux_フロー制御> ] ]

この変数で使用している構文は、 と 、 さらに で使っているものと同じです。

#### EBNF 記法による、 SYSLINUX の `serial` 変数

    <空白> ::= ‘ ’
    <syslinux_フロー制御> ::= <16 進数字列>
    <16 進数字列> ::= 0x<16 進数字><16 進数字><16 進数字>
    <16 進数字> ::= 0 | 1 | … | 9 | a | b | … | f

<syslinux_フロー制御> 変数は RS-232 のステータスを管理するもので、 フロー制御信号はオプションです。ご自分のヌルモデムケーブルに ステータス信号やハンドシェーク信号が何も現れない場合は、 この変数を使わないでください。 <syslinux_フロー制御> の値は、 にリストしてあるフロー制御の動作のうち、 望ましい値を 16 進数で追加すれば計算されます。

正しく結線したヌルモデムケーブルや、 正しい設定のモデムを使用するうえで必要なことは、 表中の “RS-232 の完全準拠に必要か？” の欄で示してあります。 これらの値の合計は `0xab3` になります。

#### 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

この設定を使用すると、 モデムが電話で接続されたこと （あるいは、ヌルモデムケーブルを使っていれば、端末がつながったこと）を RS-232 のステータス信号が示すまで、 SYSLINUX は何も表示しないし、キーボードでタイプしたどんな文字も受け付けません。

お持ちのヌルモデムケーブルに RS-232 のステータス信号が無く、 無手順なら、以下のコマンドを使って下さい。

    serial 0 9600

忘れないで下さい。 `serial` は `\SYSLINUX.CFG` の中の最初の行でなければなりません。

## Linux カーネルの設定変更

Linux カーネルは設定を変更し、 与えられた `console` パラメータを用いてシリアルコンソールを使うようにします。 `console` パラメータは繰り返し与えることができます。 その場合出力はすべてのコンソールに送られ、 入力は一番最後にリストしてあるコンソールから取得します。 この一番最後の `console` は Linux が `/dev/console` デバイスに使うものです。

`console` のパラメータ構文は に示してあります。

### EBNF 記法によるカーネルの `console` 構文

    console=ttyS<シリアルポート>[,<モード>]
    console=tty<仮想端末>
    console=lp<パラレルポート>
    console=ttyUSB[<USBポート>[,<モード>]

<シリアルポート> はシリアルポートの番号です。 これは で定義してありますし、 で説明しています。 この HOWTO の例では、 最初のシリアルポートを使い、 <シリアルポート> に `0` という値を与えています。 そして今度はこれが、カーネルパラメータに `console=ttyS0` という値を渡しています。

ご自分の Linux 機で devfs デバイスファイルシステムを使っている場合、 最初のシリアルポートに対するカーネルパラメータは、 やはり `ttyS0` になります。 これは、 この最初のシリアルデバイスが、 `/dev/ttyS0` ではなく、 `/dev/ttys/0` だとしても、 そうなります。

<モード> は、 で定義してあります。 さらに、 で説明しています。 この HOWTO の例で使用しているのは、 速度が 9600ビット毎秒、1 スタートビット、 データは 8 ビット、パリティ無し、1 ストップビット、 および CTS/RTS によるフロー制御無しです。 ですから <モード> には `9600n8` という値を与えています。 しかし、現在のカーネルにあるフロー制御のバグが修正された時は、 この HOWTO で、再度 `9600n8r` を推奨します。

<USBポート> には、 シリアルコンソールに使うシリアルポートを搭載している、 USB ドングル USB ドングルに付けたシリアルコンソールは Linux のバージョン 2.5.7 以降のカーネルでのみ使用可能です。 2.5 シリーズのカーネルは開発者向けのバージョンであり、本番用 にすぐ使えるものではありません。

のアドレスが指定できます。 例えば、 `console=ttyS0,9600n8` というシリアルポートは、 USB のシリアルドングルに移すと、 `console=ttyUSB0,9600n8` と書くことになります。 USB サブシステムがスタートするのはブートする過程の むしろ最後のほうなので、 USB サブシステムのロード 前に出たコンソールメッセージは失われます。

`console` パラメータを何も付けないと、 カーネルは `/dev/tty0` という、 最初の仮想端末を使います。 ユーザーはキーボードで CtrlAltF1 と押して、この仮想端末を使用します。

お使いのコンピュータにビデオカードがあるなら、 それもコンソールで使えるように設定したらどうでしょうか。 カーネルパラメータの `console=tty0` を使えばそうなります。

ビデオカードを搭載しており、‘COM1:’ という印のポートにシリアルコンソールも付いているコンピュータについては、 この HOWTO では次のカーネルパラメータをお奨めします。

### ビデオカード付 PC で推奨するカーネルパラメータ

    console=tty0 console=ttyS0,9600n8

カーネルメッセージは、最初の仮想端末とシリアルポートの両方に現れます。 ですが、init システムとシステムログ採取プログラムが出すメッセージは、 最初のシリアルポートにしか現れません。 ですから、付属のモニターを見ると、若干混乱するかもしれません。 マシンがブートして、それからハングするように見えるからです。 でもうろたえないで。 init システムはスタートしています。 でもその時は、シリアルポートにはメッセージを表示していますが、 付属モニターの画面には何も表示していないのです。 getty を設定していれば、 最終的には `login:` プロンプトが、付属のモニター上に現れます。

ビデオカードが付いていない PC については、 この HOWTO では次のようなカーネルパラメータを お奨めします。

### ビデオカード無しの PC で推奨するカーネルパラメータ

    console=ttyS0,9600n8

これらのパラメータは、ブートローダーがブートするカーネルに渡します。 次に、ご自分の Linux 機で使用しているブートローダーを設定し、 `console` パラメータをカーネルに渡すようにします。

### LILO を使った Linux カーネルの設定

`/etc/lilo.conf` の各 `image` エントリに対して、 以下の行を追加して下さい。

#### 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` の設定を以下に示します。

#### ベンダーがインストールした、 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

これを次のように修正します。

#### シリアルコンソール向けの修正を加えた、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 *

### 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` 行を修正して、 シリアルコンソールを使うことをカーネルに通知するパラメータを追加します。

#### 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

が設定全文の例になっています。これは、 Red Hat Linux 7.2 の、典型的な GRUB の設定です。

#### ベンダーがインストールした、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

修正した設定ファイルは に示してあります。

#### シリアルコンソール用に修正した、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

### SYSLINUX を使っている Linux カーネルの設定

各 `LABEL` エントリを編集して、 Linux カーネルに渡すシリアルコンソールパラメータを含めた、 `APPEND` 行を追加して下さい。 LILO 同様、 既にこのパラメータがある場合は、 `APPEND` の後のリストに、このパラメータを追加して下さい。

例えばこのようになります。

#### SYSLINUX の設定で推奨するカーネルパラメータ

    APPEND console=tty0 console=ttyS0,9600n8

でも初心者には、 LILO と SYSLINUX の違いからくる罠がいくつかあります。 LILO では `append=` を使います。 ところが SYSLINUX では、ただ `append` だけです。 それに、 LILO では、 `/etc/lilo.conf` を変更するたびに `lilo` を実行する必要がありますが、 SYSLINUX では、 `\SYSLINUX.CFG` を変更した後でも `syslinux` を実行する必要はありません。

## getty を設定する

getty はシリアルラインを監視して接続を待っています。 接続後シリアルリンクを確立し、 `/etc/issue` の内容を送信し、 ユーザーにログイン名を要求します。 それから getty は login をスタートさせ、 login がユーザーにパスワードを要求します。 ユーザーが何もしないと、 getty あるいは login はハングアップし、 getty は待ち状態に戻ります。

getty コマンドは過去何度となく再実装されてきました。 ですから getty のクローンには幅広い選択肢があり、 それぞれがその動作と構文の点で少しずつ異なっています。 ここでは従来の getty の説明をして、 それから他にもよく使われているものを取り上げます。

getty の仕事の一つは、 `TERM` 環境変数を設定し、 接続している端末の種類と型を表すことです。 この HOWTO では、端末を一般的に エミュレートされている DEC VT100 に設定します。 でもたまに別の端末エミュレーションを使って接続することがあるのなら、 対話的に別の端末に設定し直すこともできます。 `/etc/termcap` に載っている端末の内、適切なものを `TERM` に設定してください。

### 接続している端末の種類と型を対話的に変更する

    bash$ TERM=kermit
    bash$ tset -r

でもまずは、getty がそもそもどうやってスタートするのかを見てみましょう。

### init システム

`/etc/inittab` ファイルにはバックグラウンドプログラムが含まれており、 これらを使ってシステムを動かし続けます。 こういったプログラムの一つが getty で、 シリアルポート一つにつき 1 個の getty プロセスがあります。

#### 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 で保存している行が混乱しないように、 本物のコメント行は、 `##` で始めて下さい。

### 従来の getty

従来実装されてきた getty には、 uugetty と getty_ps があります。

従来の getty は、 `/etc/gettydefs` にあるセクション名で、 `/etc/inittab` に載っています。 このセクション名は、その getty の設定に用います。 の例では、 `CON9600` というセクションを使いました。

標準の `gettydefs` には、 `CON9600` はありません。わざとこうしました。 シリアルコンソールでは、若干ひねってみるのが必要なときがたまに あるのです。 `DT9600` エントリをコピーして、 それを自分のモデルに使って下さい。

#### `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

各々の行は空行で区切って下さい。

各々の設定行の構文は以下のとおりです。

#### EBNF記法による、`/etc/gettydefs` のエントリ構文

    <ラベル># <初期フラグ> # <最終フラグ> #<ログインプロンプト>#<次のラベル>

<ラベル> は、 getty コマンドラインで参照します。

<次のラベル> は、 RS-232 のブレーク信号が送られたら使う定義です。 コンソールが使用する速度は常に 9600bps なので、 ここでは最初の ラベル をもう一度指し示すことになります。 `gettydefs` の中で、 `CON9600` をもう一行書くつもりなら、 を参照して下さい。

<初期フラグ> は getty が使うシリアルラインのパラメータです。 これらの元になったのは、stty(1) のオプションと termios(3) のオプションですが、 このパラメータの完全なリストは、使っている getty の種類によって様々です。 のパラメータでは、 データが 8 ビット、パリティ無しの、 9600 bps で、確かに設定されています。

<最終フラグ> は、 getty が login を呼び出す前に設定する、 シリアルラインのパラメータです。 通常は、 9600bps のラインで、 端末の取り扱いは `SANE` 、データは 8 ビット、 パリティ無し、およびログインセッション終了後モデムはハングアップ、 という設定にする必要があります。

シリアルラインに対する伝統的な <ログインプロンプト> は、 まずマシン名、続いてシリアルポート、さらに `login:` という文字列、最後に空白を一つです。 マシン名とシリアルポートを挿入するマクロは様々ですから、 自分が使っている getty のドキュメントを見て下さい。

### agetty

agetty は “また別の getty” です。 すべてのパラメータはコマンドラインから取得し、 `/etc/gettydefs` や、 その他の設定ファイルはいっさい使いません。 agetty に関する文書は、 マニュアルページの agetty(8) にあります。

には、 シリアルラインで使うために agetty を起動する方法を示しています。

#### 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` というように表示されます。

訳注：\n はそのマシンのホスト名を、\o はそのマシン のドメイン名、\l は現在の tty ライン名を、それぞれ表します。 agetty(8) 参照。

ログアウトしても、 agetty が "Date Terminal Ready" 信号を落とし、 モデムをハングアップさせるようには見えません。 ログインセッションの終りに、自動的に接続を切るのが重要なことなら、 agetty の代わりに mgetty の使用を考えてみてはどうでしょうか。

### mgetty

mgetty はモデムをサポートする getty です。ヘイズの AT コマンドセットを備えたモデムをサポートしており、 着信の他に、ファックス送信や発呼に使用されるモデムのサポート用として、 特別に設計されています。 しかし、こういった機能はシリアルコンソールでは不要です。

mgetty には従来の `/etc/gettydefs` ファイルは不要です。結果として、 mgetty は `/etc/gettydefs` にエントリを書かなくても、 `/etc/inittab` から起動します。

#### mgetty 用 `/etc/inittab` エントリ

    co:2345:respawn:/sbin/mgetty ttyS0

mgetty の設定には 、 `/etc/mgetty+sendfax/mgetty.config` というファイルを使います。 このファイルには、 シリアルコンソールが使用するポート用のエントリがあるはずです。

#### 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` ファイルで明らかになります。

### mingetty

mingetty は、 ワークステーションのモニター・キーボードで仮想端末が使えるように、 必要最小限の機能に絞った getty になっています。 ですから、これにはシリアルラインのサポートはありません。

mingetty を `/etc/inittab` で、 シリアルライン用に使ってはいけません。 しかし、今ある仮想端末用の mingetty エントリは、そのままでもかまいません。

仮想端末は、一台あたり約 8KB のカーネルメモリを使用します。 しかしこれでも多過ぎるようなら、 生成する仮想端末数をもっと減らすのは簡単です。 Linux の 2.4 カーネルでは、 必要に応じて仮想端末を生成します。 ですから、仮想端末で mingetty を起動しなければ、 仮想端末は生成しません。マシンにビデオカードが無い場合は、 `/etc/inittab` から mingetty のエントリをすべて削除して下さい。

#### 仮想端末の数を減らす。`/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 の再起動後は、未使用のデバイスファイル を取り除いてしまうのが賢明だろうと思います。

#### 仮想端末を減らす。未使用の仮想端末を解放し、 そのデバイスファイルを削除する。

    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]

### getty 無し

シリアルコンソールを、コンソールメッセージの印刷にしか使わないのなら、 シリアルポートで getty プロセスを動かさないでください。

ロックというのは、シリアルポートを使う他のアプリケーションに、 このシリアルポートを使わせないようにするためのもので、 getty は、このロックの約束ごとに従います。 このシリアルポートは他のプロセスには使わせたくないのですが、 ここでは getty は動かしていません。 ですからロックファイルは手作業で作成して下さい。

`/var/lock/LCK..ttyS0` というファイルを作って、 そこに `1` というテキストを入れて下さい。これが 将来シリアルポートを使う可能性があるアプリケーションに、プロセス 1 が このシリアルポートを使用中だということを教えることになります。 プロセス 1 というのは常に init プロセス です。そして init はいつでも稼働中です。 ですからこのシリアルポートはいつもロックされているわけです。

ロックファイルはシステムがブートする時によく削除されますから、この ファイルはブートするたびに作成します。ロックファイルを作るのに都合が 良い場所は `/etc/rc.serial` です。この中には以下の ことを書いてください。

#### getty を使わない場合に、コンソールの シリアルポートをロックする、 `/etc/rc.serial` の 内容

    # 出力専用のコンソールが使用するので、/dev/ttyS0 をロック
    (umask 022 && \
     rm -f '/var/lock/LCK..ttyS0' && \
     echo '1' > '/var/lock/LCK..ttyS0')

## 付随するその他の設定

シリアルコンソールをちゃんと動かす前に、 他にも驚くほど多くの設定ファイルに、 こまごまとした修正が必要です。

多くの項目をどう設定するかは、 セキュリティに対する要求条件によって違ってきます。 特に遠隔地のサイトがどの程度信頼できて、 それに対応して、どのくらいのセキュリティが必要なのかに依存するのです。 この HOWTO では、 遠隔地のサイトには高いセキュリティが必要だと仮定して、 かなり多くの設定項目を例示することがあります。

### シリアルコンソールから root が ログインできるようにする。

`/etc/securetty` ファイルは、 root ユーザーがログインできるデバイスを管理するものです。

普通は root を、 コンソールからログインできるようにしておきたいものです。そこで `/etc/securetty` にシリアルコンソールデバイスのベース名を追加して下さい。

#### root がシリアルコンソールからログインできるように、 `securetty` を変更する。

    ttyS0

しかしこれだと、ほとんど誰でもモデムに電話をかけて接続し、 root のパスワードを推測してみることが可能です。 でも普通は、遠隔サイトから root でログインできるようにはしません。 それよりも、一般ユーザーでログインし、 それから `su` か `sudo` を使って root になります。 これである種の追跡能力が備わります。

あいにく root ユーザーは、 飽和したディスクを修復するためには、 コンソールからログインできなければなりません。 一般的に、ディスクサブシステムの容量のうち 5 パーセントは、 root が排他的に使用するのに取っておきます。 これは見かけほど非効率ではありません。 汎用のファイルシステムでフォーマットしているディスクの内、 最後の 5 パーセントはいつも性能が悪化するので、 空のままで残すのが一番なんです。

これは、root ユーザーがログインして、 ディスクを埋めているファイルの削除を始めるのに充分な量です。

#### `securetty` と Red Hat の kudzu

kudzu はコンソールに使っているデバイスを、 自動的に `securetty` に追加します。

### init レベルをテキストレベルに変える

画面がないサーバーで X ウィンドウシステム を動かしても、ほとんど意味がありません。 `/etc/inittab` を編集して、 `initdefault` を含んでいる行を見つけて下さい。以下のような行です。

    id:5:initdefault:

そしてデフォルトのランレベルを、 5 （X ウィンドウが動作しているマルチユーザー）から 3 （マルチユーザー）に変更して下さい。

    id:3:initdefault:

付属のキーボード・モニターで X ウィンドウ セッションが必要なことがあれば、 `startx` コマンドを使えばいいのです。

#### ランレベルと Red Hat の kudzu

シリアルデバイスをコンソールに使っている場合、 kudzu は、 `inittab` の `initdefault` エントリを自動的に更新するので、 ランレベル 3 を使うようになります。

#### X を動かし続ける

シリアルコンソールが付いていて、 付属のモニターが無いコンピュータでも、 時にはやはり X ウィンドウシステム を動かす必要があります。 例えばそのコンピュータは、数多くの X 端末のホストをしているかも知れません。

そのような場合は、コンピュータをランレベル 5 のままにして、 どの付属のモニターに対しても X サーバーを動かさないで下さい。 このためには `/etc/X11/xdm/Xservers` を変更します。コロンで始まる行はどれも削除して下さい （コロンは、ローカル機で動いている X サーバーを示しています）。 に、 変更前の `Xservers` ファイルを示してあります。

##### Red Hat Linux 7.2 の `Xservers`

    :0 local /usr/X11R6/bin/X

オペレーティングシステムが GNOME の gdm を使っている場合は、その設定ファイル `/etc/X11/gdm/gdm.conf` を変更して下さい。 `[servers]` セクションから、 ローカルの X に関するエントリはいずれも削除します。 には、 変更前の `[servers]` セクションを示してあります。

##### Red Hat Linux 7.2 の `gdm.conf` にある `[servers]` セクション

    [servers]
    0=/usr/bin/X11/X

### 保存してあるコンソールの設定を削除する

`/etc/ioctl.save` ファイルには、 シングルユーザーモードで使う、 シリアルポートと端末のパラメータが入っています。 このパラメータは、普通は getty が設定します。 ですが、シングルユーザーモード中は getty が動いていません。 ですから、この場合は `/etc/ioctl.save` の内容を使って、シリアルポートと端末のパラメータを設定します。

ここではコンソールを変更するつもりなので、 保存してある設定はもう正しくありません。

#### 保存してあるコンソールパラメータが入っている `ioctl.save` の削除

    bash# rm -f /etc/ioctl.save

シリアルコンソールからログインできるようになったら、 このファイルを再作成します。

### シリアルコンソールは `/dev/modem` ではない

多くの Linux ディストリビューションでは、 `/dev/modem` ファイルは、 使用できるモデムが接続されている、 シリアルポートへのシンボリックリンクになっています。

シリアルコンソールはモデムがつながっているシリアルポートになっていますが、 むろんそこから電話をかけるのに使おうとは思っていません。

`/dev/modem` が、コンソールに使っているシリアルポート （たぶん `/dev/ttyS0`） を指していないかどうか調べて下さい。 もし指していたら、そのシンボリックリンクを削除して下さい。

#### もし `/dev/modem` がシリアルコンソールのポートを指していれば、それを削除する。

    bash$ ls -l /dev/modem
    lrwxrwxrwx 1 root root 10 Jan 01 00:00 /dev/modem -> /dev/ttyS0
    bash# rm /dev/modem

### `/dev/systty` のターゲットを変更する。

多くの Linux ディストリビューションでは、 `/dev/systty` ファイルは、 付属のモニター・キーボードで使っている、 デバイスファイルへのシンボリックリンクになっています。 より詳細な説明に関しては、 を見て下さい。

付属のキーボード・モニターがなかったり、 あってもテキスト端末程度のことができればいいと思っている場合は、 `/dev/systty` がシリアルコンソールを指すように変更して下さい。

この場合、直接シンボリックリンクを変更するよりは、むしろ `MAKEDEV` が使っている設定ファイルを修正する方がいいです。 そのあとこのコマンドを実行して、シンボリックリンクを再作成します。 この設定ファイルは `/etc/makedev.d` というディレクトリにあります。 に示すように、 デフォルトの設定では最初の仮想端末を指しています。

#### `/etc/makedev.d/linux-2.4.x` にある、 `/dev/systty` のデフォルト値

    l systty tty0

で示すように、 これをコンソールが使っているシリアルポートを指すように修正して下さい。

#### `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

では、 に示すように、 新しい設定を使って `/dev/systty` を 再作成します。

#### `/dev/systty` の新しい値を インストールする

    bash# cd /dev
    bash# rm systty
    bash# ./MAKEDEV systty

### PAM(Pluggable Authentication Modules) の設定

Pluggable Authentication Module システムは、 コンソールからログインしたユーザーに特権を付与するのに使えます。 ディスクをマウントするには、 普通はスーパーユーザーになる必要があるでしょうが、 これはコンソールユーザーが、 フロッピーディスクのようなデバイスをマウントできるようにするのに使います。

PAM の設定ファイル `/etc/security/console.perms` には `<console>` 変数があります。 Red Hat Linux 7.1 だと、 `<console>` は正規表現になっています。

#### `console.perms` のデフォルト `<console>` は付属のキーボート・モニターを指している。

    <console>=tty[0-9][0-9]* vc/[0-9][0-9]* :[0-9]\.[0-9] :[0-9]

このファイルの最後の方で、 `<console>` ユーザーにいくつかのデバイスを使う許可を与えています。 これには、 ログインとログアウトの際、 デバイスのパーミッションを変更するという方法を用います。

#### `console.perms` のデフォルトデバイス一覧

    <console>  0660 <floppy>     0660 root.floppy
    <console>  0600 <sound>      0600 root
    <console>  0600 <cdrom>      0660 root.disk
    <console>  0600 <pilot>      0660 root.uucp
    <console>  0600 <jaz>        0660 root.disk
    <console>  0600 <zip>        0660 root.disk
    <console>  0600 <ls120>      0660 root.disk
    <console>  0600 <scanner>    0600 root
    <console>  0600 <camera>     0600 root
    <console>  0600 <memstick>   0600 root
    <console>  0600 <flash>      0600 root
    <console>  0600 <fb>         0600 root
    <console>  0600 <kbd>        0600 root
    <console>  0600 <joystick>   0600 root
    <console>  0600 <v4l>        0600 root
    <console>  0700 <gpm>        0700 root
    <console>  0600 <mainboard>  0600 root
    <console>  0600 <rio500>     0600 root

上記でリストされているデバイスには 2 種類のタイプがあります。 付属のモニター・キーボードから接続しているユーザーに必要なデバイスと、 簡単にアクセスできるようにするデバイスです。 で触れた論理コンソールと物理コンソールの間の区別は、 この設定ファイルではつけられません。 そこで、その区別がつくように設定ファイルを修正します。

#### 付属のキーボード・モニターに必要な `console.perms` の デバイス

    <console>  0600 <fb>         0600 root
    <console>  0600 <kbd>        0600 root
    <console>  0600 <joystick>   0600 root
    <console>  0600 <v4l>        0600 root
    <console>  0700 <gpm>        0700 root

残りのデバイスは、 シリアルコンソールから接続しているユーザーだけが制御できるよう、 変更してください。 例えば、場所借りしているサイトにいる権限のないユーザーには、 フロッピーディスクのマウントはさせたくありません。 そこでシリアルコンソール用に新しいコンソールタイプを定義します。 例えば `<sconsole>` です。

#### `console.perms` に `<sconsole>` を追加して、 それがシリアルコンソールを指すようにする。

    <sconsole>=ttyS0

さあ、残りのエントリを `<console>` から `<sconsole>` へ修正しましょう。

#### シリアルコンソールを指すよう変更された `console.perms` の残りのデバイス

    <sconsole>  0660 <floppy>     0660 root.floppy
    <sconsole>  0600 <sound>      0600 root
    <sconsole>  0600 <cdrom>      0660 root.disk
    <sconsole>  0600 <pilot>      0660 root.uucp
    <sconsole>  0600 <jaz>        0660 root.disk
    <sconsole>  0600 <zip>        0660 root.disk
    <sconsole>  0600 <ls120>      0660 root.disk
    <sconsole>  0600 <scanner>    0600 root
    <sconsole>  0600 <camera>     0600 root
    <sconsole>  0600 <memstick>   0600 root
    <sconsole>  0600 <flash>      0600 root
    <sconsole>  0600 <mainboard>  0600 root
    <sconsole>  0600 <rio500>     0600 root

### Red Hat Linux を設定する

Red Hat Linux は、システムのスタートアップに関連するパラメータを、 `/etc/sysconfig/init` ファイルに格納しています。

`OK` や `PASSED`、 `FAILED` というメッセージ出力に、 端末に依存しないコマンドを使うよう、 `BOOTUP` パラメータを変更して下さい。 こうすると、これらのメッセージは、もう緑でも黄色でも、赤でも表示されません。 `/etc/sysconfig/init` の中のコメントによれば、 `color` 以外のどの値でもうまくいくように見えますが、 実際には `BOOTUP` は `serial` に設定しなければならないようです。

対話的なスタートアップを禁止するため、 `PROMPT` パラメータを変更します。 不正なキーストロークでシステムサービスが停止できてしまうと、 ラインノイズに対して脆弱になってしまうし、 システムのブート中に電話して接続する人は誰でも、 サービスを停止できるようになってしまいます。

#### Red Hat Linux 用の `/etc/sysconfig/init` の変更

    BOOTUP=serial
    PROMPT=no

Red Hat Linux では、 kudzu という名前のハードウェア検出プログラムが動きます。 Kudzu は、シリアルポートを識別しようとすると、 シリアルポートをリセットしてしまいます。 これではシリアルコンソールが止まってしまいます。 Kudzu の設定は、 `/etc/sysconfig/kudzu` ファイルでしています。

設定パラメータの `SAFE` を `yes` にすれば、 Kudzu がハードウェアをリセットしないようにできます。

#### Red Hat Linux 用の `/etc/sysconfig/kudzu` の変更

    SAFE=yes

## リブートとテスト

### コンソール操作の検証

できればシリアルポートに RS-232 のブレークアウトボックス

訳注：ブレークアウトボックスに関して原著者に説明を求めたところ、 以下のコメントをいただきました。 「ブレークアウトボックス」というのは、 ケーブルを用いてそれを個々のワイアに分ける器具です。 こうすると、そのケーブル内のワイア一本一本を監視したり、 流れる情報を変更したりできるようになります。 ほとんどの RS-232 用ブレークアウトボックスには、 各ワイアごとの RS-232 信号を表示する LED が付いています。 またその多くにはスイッチやワイアジャンパーがあり、 配線を簡単に変えられるようになっています。 高価な RS-232 用ブレークアウトボックスについては、 良い写真が http://www.comcraftfr.com/100c_l.htm にあります。 安価な RS-232 用のブレークアウトボックスは、 たいていの電気店で見つかります。 を挿して下さい。 ブート中にDTRラインが上がり、 それからコンソールメッセージの表示に合わせて、 データ転送ライトが光るはずです。

それからモデムを取り付けて下さい。 あるいはヌルモデムケーブルと端末でもかまいません。 そしてシリアルコンソールポートで使用するシリアルパラメータに合わせて、 それらを設定して下さい。 モデムを使う場合は、端末エミュレータからそのモデムに電話して接続しましょう。

    +++
    AT Z
    AT DT 1234-5678
    CONNECT 9600

そして端末、あるいは端末エミュレータの設定を、 シリアルコンソールで使っているシリアルパラメータに合わせて下さい。 最近のヘイズ AT スタイルのモデムなら、 速度を合わせる必要はありません。 直結の端末を使っている場合は、速度は合わせる必要があります。

コンピュータをリブートしてください。 このコマンド例で使用しているオプションは、-r の誤りだと思われます。 原著者には連絡済みですが、まだ回答はありません。

    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 キーを押して下さい。

### 保存したコンソールの設定を再作成する

シリアルコンソールから 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` と同じ形式でファイルに保存します。この手順は、 に示してあります。

#### シングルユーザーモードに入らずに、`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

### コンソールをテストする

別のマシンから、たとえば Minicom を使って電話して、接続して下さい。

#### シリアルコンソールに電話して接続する

    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
    AltD 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 = <undef>;
    eol2 = <undef>; 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
    AltX
    Leave Minicom? Yes
    Resetting modem

    localhost bash$

おもしろいことに、端末の設定を表示するのに使う `stty -a` コマンドは、モデムからシリアルコンソールへのリンクが 9600 bps だと伝えています。 一方、`CONNECT` メッセージは、二つのモデム間が 33600bps で動作していると伝えています。 モデム-コンピュータ間のリンク速度が一定だというのは、 ヘイズの AT 互換モデムの非常に有益な特徴です。 このおかげで、発呼側のコンピュータは、 着信側のシリアルコンソールのライン速度を、 前もって知らなくても済むのです。

### ここから次はどこへ？

これでシリアルコンソールの設定はできました。 次は に載っているセキュリティの指針を調べて、 作業を完成させましょう。

## セキュリティ

モデムを通してシリアルコンソールを使用すると、 誰でもその隙を突いてコンソールポートに接続できるようになってしまいます。 しかし、 モデムからファイアウォールや侵入検知用のスニファーを介して、 接続しているわけではありませんから、 無許可の人たちがシリアルコンソールを誤用しないようにするのは大切なことです。

‘war dialling’ という BBS 時代の技術の復活については、 @Stake の Wardialling Brief で説明されており、 The Register が報告しました。 の抜粋を見て下さい。 訳注："The Register" に関して原著者に問い合わせたところ、 これはオンライン新聞だという答えでした。 場所は、 www.theregister.co.uk です。

### Crackers favour war dialling and weak passwords （クラッカーは電話と弱いパスワードがお気に入り）からの抜粋

> 未報告のセキュリティ脆弱性への攻撃や、 たまには複雑怪奇なセキュリティホールの話題に夢中になっていると、 昔ながらの武骨な技術が、 クラッカーの活動の大黒柱としての役割を担っていることを忘れがちになる。

> 訳注： ソフトウェア上の問題点がアンダーグラウンドで発見された場合、 その問題点はある期間誰にもどこにも報告されないことがあり、その期間を "zero day" というようです。 この期間はその問題点を誰も知らないのでパッチも無いし対策もないから、 その問題点を悪用できるというのが "zero day" が持つ意味らしいです。

> 昨日[2002年04月25日] InfoSecurity Europe のハッキング討論会の最中に、 ブラックハットハッカーの KP が、 自分がネットワークに侵入した際、 その時間の 90 パーセントは無防備なモデムを通って侵入したし、 その多くは war dialing して発見したものだと語った。

> 訳注：ブラックハットハッカー（クラッカー）というのは、 悪意を持ってコンピュータやネットワークに侵入して、 ファイルを壊したりデータを盗んだりするようです。 対するホワイトハットハッカーは、 コンピュータやネットワークのセキュリティ上の弱点を見つけてそれを公表し、 管理者がその弱点を修復できるようにします。

> "War dialling" では、会社の電話システムの内線を順番に試しながら、 会社が使っているモデムに関係する電話番号を、 骨惜しみせず系統的に突き止める必要がある。

> “僕にとっては、侵入検知システムなんか実際恐れるに足らずさ。 だって裏口から入るんだから。 たいていのネットワークはベイクドアラスカ

> 訳注：ベイクドアラスカ(Baked Alaska)というのは、 スポンジケーキにアイスクリームを載せて、 メレンゲで包み、オーブンでさっと焼いたデザートのこと。

> みたいに作ってあるんだ。 外側はカリカリしてるけど、中は柔らかいんだよ” とは、先の KP の談。

> KP はネットワークに侵入するのに、弱いパスワードやデフォルトのままの パスワードをよく利用する。

    Crackers favour war dialling and weak passwords
    John Leyden, The Register, 2002-04-26.

### 良いパスワードを使う

BIOS やブートローダー、あるいは root のパスワードを推測できる人なら、誰でもそのマシンを完全に制御できてしまいます。 ですからこういったパスワードは、別々で、互いに何の関係もない、 良いパスワードにしてください。今のところ、一番良いのは、 ランダムな文字列と数字列を選ぶことです。 検索エンジンでヒットするだろうと思うようなパスワードは、 絶対使わないでください。 しかし、自分が良いと思うようなパスワードを、 検索エンジンで検索しないでください。 インターネットに平文でパスワードを送るのは良いことではないし、 検索エンジンのログに、 そのパスワードが載ってしまう可能性もあります。

ユーザーのパスワードが推測されてしまう、 それはたしかに一大事です。 ですがハッカーは、 ただ待っているだけで root のアクセス権限を入手できます。 つまり、 オペレーティングシステムの欠陥に起因する、 マシンの脆弱性が公表されるのを待ち、 そのマシンにパッチがあたる前にその脆弱性を突くのです。

マシン上のユーザー数を厳しく制限して下さい。そして、 cracklib を元にした PAM モジュールのような、ファシストパスワードチェッカーを使って、 確実に良質のパスワードだけを選ぶようにしてください。

BIOS のパスワードやブートローダーのパスワード、 それに root のパスワードは、 何かに書き留めておいてください。 こうすれば、これらのパスワードは覚えなくても済みますから、 完全にランダムで互いに無関係な、 最良のものをパスワードにしない理由はありません。 その書き留めたものは折り畳んで封筒に入れて、そして封をしてください。

これでコンピュータセキュリティの問題は、物理的な面に移りました。 これらの問題の解決方法は分かっています。錠前と鍵、警報器、金庫、 警備員、それに定期査察です。自分のサイトに警備員を配置しているなら、 その封筒を守衛室気付にして出して下さい。 その際、この封筒をマスターキーと同じ手順で扱うよう指示した、 取扱い説明書をこの封筒に付けてください。これがうまいやり方です。 小規模なサイトなら、金庫や手さげ金庫、 あるいは鍵のかかる引出しを使ってもかまいません。 施錠した引出しを無理矢理こじ開けた泥棒の方が、 モデムの背後にいるハッカーよりも、 はっきりとした侵入の痕跡や多くの手がかりをいっそう残すものです。

これら三つのパスワードは重要な会社の資産です。 そのマシンが厳重に保管されている場合、 そのマシンに関する主要なパスワードを忘れてしまうと、 分解するなら別ですが、 いつものやり方では設定が変更できないマシンになってしまいます。 重要なパスワードの生成方法や保管場所、有効期限、 および使い方の管理手順は、文書化しておいてください。

### "Data Terminal Ready" と "Data Carrier Detect" に従う

コンピュータがモデムをハングアップさせようとする場合、 RS-232 の "Data Terminal Ready" 信号が落ちます。 これは、ログインセッションが終了した時、 またはログインに失敗した時に起こります。

DTR が結線されているモデムケーブルを使うことと、 モデムを DTR に従うように設定することは、 コンソールを利用したサービス拒否攻撃を防止する上で必須です。

DTR 信号がないと、 発呼側は簡単にモデムラインをオープンのままにできるので、 システム管理者はコンソールへアクセスできなくなってしまいます。

RS-232 の "Data Carrier Detect" 信号は ユーザーがハングアップすると落ちます。

DCD が結線されているモデムケーブルを使うことと、 DCD をアサートするようにモデムを設定することは、 ユーザーがハングアップした後に、 誰かが電話をかけてそこに接続しないようしたり、 そのセッションを続けて使用するのを防止するためには欠かせません。

DCD が無いと、 不意に接続が切れてもそのセッションはクリアされません。 こうなるとその後の発呼者は、 誰でも直前のセッションを再開できてしまいます。 もし直前のユーザーが root だったら、 そのマシンはすっかり危険に晒されてしまいます。

### ダムモデムを使う、あるいは設定する。

たいていのモデムはヘイズの AT コマンドセットを使っています。 ある程度の時間をおいて `+++` を送れば、 そのモデムはコマンドモードに戻ります。 そのあと先頭に `AT` を付けてコマンドを送ります。

モデムが話中に `+++` を検知すると、 あいにくコマンドモードに逆戻りするかも知れません。 そうなると、モデムは発呼側から設定できてしまいます。 例えば、 ‘0’ 番からしか着信できないように設定できてしまいます。 そうなると、システム管理者はモデムにアクセスできなくなります。

コマンドモードに戻すこのコマンドは `AT S2=255` を使って取り除けます。 もちろんいったんそうしてしまうと、 モデムは AT コマンドをそれ以上受け付けなくなります。 ですから、このコマンドを実行する前に、 モデムに対するその他の設定を済ませておく必要があります。

ですがあいにく、モデムの電源を入れると、 モデムはコマンドモードでスタートしてしまいます。 ですから、コンソールメッセージを注意深く選べば、 モデムを無効にできてしまうのです。

最良の解決方法は、‘dumb’ または “select profile” の、DIP スイッチ、あるいはジャンパーが付いているモデムを選ぶことです。 これらのスイッチを使えば、コマンドモードが無効になり、 保存してある設定がロードされます。

### コンソールメッセージを制限する

#### システムログが出力するコンソールメッセージを制限する

コンソールメッセージを間断無く流すようにしておくと、 簡単に 9600bps のリンクが飽和することがあります。

すべての syslog メッセージをコンソールに表示するのはうまい考えのように見えますが、 実は、権限の無いユーザーが簡単な方法を使って、 リモートコンソールを実質的に使えなくしてしまえるのです。

ですから、 コンソールに出力するシステムログメッセージは、 本当に必要最小限にするように設定してください。 `/etc/syslog.conf` をちょっと覗いて、 `/dev/console` で終っている行を探してみて下さい。

この設定ファイルを変更して、 すべてのログメッセージを別のマシンに送り、 そこで記録し解析するという方法を考えてみましょう。 Red Hat Linux 7.2 標準の `/etc/syslog.conf` を、ログメッセージをログサーバーで記録するように修正したものを に示してあります。 `syslog.conf` の各行を繰り返して、 メッセージのコピーをログサーバーへ送るようにしました。 ログサーバーには loghost.example.edu.au という、DNS の別名があります。 こうしておくと、すべてのリモート機の設定を更新しなくても、 ログサーバーの移動が可能になります。 これで、システム障害の原因を特定する方法が、 もうログメッセージのローカルコピーしかないなどということは無くなります。 ですから、同期をとってファイルに書き込むのを止めれば、 ファイルシステムに不整合が発生する確率は増加しますが、 性能面で多少有利になります （これはファイルシステムがジャーナルを取らないから起こる問題点です）。 ファイル名の直前に `-` を置けば、 ファイルへの書き込みが同期しなくなります。

##### ログメッセージのコピーをログサーバーへ送るように修正した `/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 用に設定したこのファイルを、 に示します。 システムのログデーモンの設定に加えて、 syslog メッセージの送信元を制限するように IP Tables を設定して、 サービス拒否攻撃も防御して下さい。 また、nscd が動いていて、DNS の逆引きをキャッシュしているのを確認して、 性能改善も行なって下さい。

##### `/etc/sysconfig/syslog` のオプションを設定して、 リモートのログメッセージを許可する。

    # Red Hat Linux のデフォルト値。タイマー起動の ‘ --MARK-- ’ メッセージは書かない。
    SYSLOGD_OPTIONS="-m 0"

    # リモートの syslog メッセージを受け取るようにオプションを追加。
    SYSLOGD_OPTIONS="${SYSLOGD_OPTIONS} -r"

##### 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

##### nscd を使って DNS の 逆引きをキャッシュする。

    bash# chkconfig nscd on
    bash# /etc/init.d/nscd restart

#### コンソールに対するブロードキャストメッセージを制限する

シリアルコンソールにログインしているユーザーは、 ブロードキャストメッセージを受け取らないでください。 そうするには、 `/etc/profile.d` に新しいファイルを追加します。 に Bourneシェルで使うファイルを示しています。

##### コンソールユーザーへのメッセージ送信を制限する。

    #

    # 参照されるファイルはあるか？
    if [ -x /usr/bin/mesg -a -x /usr/bin/tty ]
    then

      # シリアルコンソールにいるのか？
      if [ `/usr/bin/tty` = /dev/ttyS0 ]
      then

        # ブロードキャストメッセージは受け取らない
        /usr/bin/mesg n
      fi
    fi

このファイルは頻繁に実行するので、 コードは今より読みずらくはなりますが、 もっと高速にした というバージョンを使うことにします。 このバージョンは に示しました。

##### `/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 シェル用も必要ですから、 に示しました。

##### `/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` は 親シェルが実行するというよりも親シェルに付随するものですが、このファイル には実行パーミッションを設定する必要があります。 このファイルのインストールとパーミッションの設定は、 に示した手順で行ないます。

##### ファイルを `/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

### モデムの機能を用いて使用を制限する

たいていのモデムはパスワードが追加できるようになっています。 しかしこのパスワードも、 長所と短所は他のすべてのパスワード認証方法と同じですから、 特に有用だというわけではありません。 すでにパスワード認証は BIOS にもあるしブートローダーにもあります。それに login でもパスワード認証を行なっています。

モデムの多くはコールバックをサポートしています。モデムに電話がかかり、 ハングアップしてから2、3秒後に、 予め設定してある電話番号に電話をします。 これによって、コンソールにアクセスできる場所が制限されます。

多くのモデムでは、 発信元電話番号 (CLI) を予め定義してあるリストと照合できるようになっています。 もし発信元の電話番号がこのリスト上にない場合は接続しません。 モデムにつながっている電話線は CLI を送るように設定しなければなりませんが、 こうしてしまうと、 電話会社から追加課金されてしまうかもしれません。 かけている電話すべてが CLI を送れるわけではありませんし、 正当な発信者の中には、 電話会社に CLI の送信を抑えるよう頼んだ人がいるかもしれません。

着信した電話番号を記録するように設定できるモデムもたくさんあります。 誤用を追跡する場合にこれは役立ちます。

モデムの多くは暗号化をサポートしています。 モデムによっては、キーを複数許可しているものもあります。 これで問題が手際良く解決します。こうすれば、 許可されたモデムだけが、 どこからでも電話して接続できるようになります。 この場合、モデムは通常同じ種類にする必要がありますし、 おそらく型も同じにしなければなりません。

#### 暗号化の二重使用技術

暗号化機能を有するモデムの所有、使用、売買、あるいは輸出入は、国に よっては重大な犯罪になります。

ですから、自国内の法律と、 旅行で通るかも知れない国々の法律に精通していなければなりません。

多くの電話サービスや PBX ラインは、 着信だけを許可するよう設定できます。 万が一コンピュータに悪さをされたとしても、 そのようにしておけば、モデムの誤用を防止するうえで役に立ちます。 ‘demon dialler’ は多くの電話番号に電話をかけて、 応答するモデムを探すことができますが、 この電話の費用は莫大になる可能性があります。

### BIOS の特徴

ほとんどの BIOS では、 その設定の際に、‘パスワードを入力する’ようにできます。 これは設定しテストしてください。 マザーボードによっては、 パスワードを有効にするためにジャンパーを切り替える必要があります。 また、BIOS によっては、 あの ‘master passwords’ が付いているものもあるので、 検索エンジンで探して、 自分の BIOS がそうではないことを確かめてください。 このパスワードは、ブートローダーや root のパスワードと同じものにはしないでください。

BIOS の設定には ‘ブート順序’ の設定があります。 他のどんな媒体よりも先にハードディスクからブートするよう設定してください。 こうすれば、誰かがレスキューディスクを挿入しても、 マシンをブートして、 root になり、 ファイルシステムにアクセスするということができなくなります。

### ブートローダーのパスワードを使う

デフォルト以外のイメージでブートする場合や、 コマンドラインからパラメータを与える場合に、 パスワードを要求するようブートローダーを設定して下さい。

こうしておけば、 の例にあるように、 ブートシーケンス中に誰かが電話で接続し、 そのマシンを制御するオプションをつけて、 カーネルをブートしてしまうようなことが防止できます。

このパスワードは BIOS のパスワードとも、 root のパスワードとも同じにしてはいけません。

### 非対話的ブートシーケンス

Red Hat Linux には ‘対話ブート’ オプションがあり、 これを使えばサービスがスタートしないようにできます。 でもWEB サービスが目的のマシンで、 無許可の人間がシステムと対話して、 HTTP デーモンが起動しないようにするというのは、 愉快とはいえないでしょうね。

`/etc/sysconfig/init` を編集して以下の行を入れてください。

    PROMPT=no

### マジック SysRq キー

‘マジック SysRq キー’ というのは、 いくつかの基本的なコマンドを、 直接カーネルに渡せるキーシーケンスのことです。 カーネルソフトウェアの開発者たちは、 このインタフェースを使って、自分たちのソフトウェアをデバッグします。 一般の環境では、 コンピュータをリブートする最後の手段にも使えるし、 リモートで行なうのが困難だったり高くつくような、他のことにも使えます。

カーネルソフトェアの開発以外で使っているコンピュータでこのマジック SysRq キーを使うと、 そのマシンは申し分のないサービス拒否デバイスになってしまいます。 不正なキーストロークを２、３行なえば、 そのコンピュータはどうにもならなくなるのです。 シリアルにせよ他のものにせよ、 コンソールは信頼できる人だけがアクセスできる場所に設置して下さい。

シリアルコンソールは RS-232 のブレーク機能を、 ‘マジック SysRq キー’ に使っています。 ‘ブレーク’ とは、 シリアルライン上で何も転送していない期間のことで、 従来の端末では、Break というラベルが付いたキーを押下するとブレーク状態になります。

モデムに電話をかけて接続し、ブレークを送るのは、誰にでもできます。 ですから、もしシリアルコンソールがモデムにつながっている場合は、 このマジック SysRq キーを無効にする必要があります。 シリアルコンソールがターミナルサーバーにつながっていて認証を要求してきたり、 ヌルモデムケーブルを使って直接別の端末につながっている場合は、 マジック SysRq キーを有効にしてもかまいません。

マジック SysRq キーは、カーネルの変数を設定するか、 そのキーをサポートしないようにコンパイルすれば無効にできます。

`/proc/sys/kernel/sysrq` に `0` を書き込めば、 マジック SysRq キーは無効になります。 以下のように `sysctl` コマンドも使えます。

#### `sysctl` を使って、マジック SysRq キーを無効にする。

    bash# sysctl -w kernel.sysrq=0

ご自分の Linux ディストリビューションには `/etc/sysctl.conf` ファイルがあって、 マシンのブート中にそのファイルを使って `sysctl` を実行しているかも知れません。その場合は次の行を追加して下さい。

#### マジック SysRq キーを無効にする、 `/etc/sysctl.conf` の設定。

    # マジック SysRq キーを無効にする。
    kernel.sysrq = 0

`/etc/sysctl.conf` でマジック SysRq キーをオフにしたとしても、 カーネルがブートしてからそのファイルの内容が適用されるまでの間が 弱点になります。

ですから、自分のカーネルをコンパイルして、 次のコンフィギュレーションパラメータを設定する方が、 はるかに優れています。

#### SysRq キーを無効にした、 カーネルの `make menuconfig`

    Kernel hacking  --->
     [ ] Magic SysRq key

これで次のコンフィギュレーションパラメータが `/usr/src/linux/.config` に書かれます。

#### SysRq キーを無効にしている カーネルの `.config`

    # CONFIG_MAGIC_SYSRQ is not set

### Ctrl Alt Delete の動きを調整する

IBM PC は、 コンピュータをリブートするために、 Ctrl Alt Delete を使いました。 Linux ではこのキーの組合せに細工をして、 init システムで使えるようにしてあります。 init プロセスに `SIGINT` シグナルを送るのです。 （とはいっても、 `ctrlaltdelhard` を行なうとこの細工が無くなり、 このキーの組合せでコンピュータを直ちにリブートできるのですが）。 init システムは `/etc/inittab` を使って、 Ctrl Alt Delete というキーの組合せで生成されたシグナルをどう処理するかを決めます。

Linux のたいていのディストリビューションはシステムを正しくリブート するし、大部分のユーザーが期待している動作をそのまま行ないます。 はこの方法を 示しています。

#### `/etc/inittab` での Ctrl Alt Delete のデフォルト処理

    # CTRL-ALT-DELETE に細工を施す。
    ca::ctrlaltdel:/sbin/shutdown -t3 -r now

個々のサイトによっては、 Ctrl Alt Delete を無効にしたいかもしれません。これについては、 に示してあります。

#### Ctrl Alt Delete を無視する `/etc/inittab` の設定

    # CTRL-ALT-DELETE に細工して何もしないようにする。
    ca::ctrlaltdel:

あるいは、コンピュータを正しくシャットダウンしたいかも知れません。 これをオペレータに説明するのはとても簡単で、指示は `/etc/issue` か Post-it Note を使ってモニターに表示すればいいのです。コンピュータが Advanced Power Management (あるいは APM ともいいます) を使っている場合は、 コンピュータをシャットダウンすると、電源も切れます。

#### `/etc/inittab` 内の Ctrl Alt Delete によって 正しくシャットダウンする。

    # CTRL-ALT-DELETE に細工してシャットダウンする
    ca::ctrlaltdel:/sbin/shutdown -t3 -h now

### アクセス未遂のログ

システムログの中の、getty が出力したものをちょっと覗いてみて下さい。 そして日常のログ監視の作業手順で、 これらのメッセージも監視するようにして下さい。

### 電話回線リンクの盗聴への対応

電話回線でモデムに接続すると、盗聴される可能性があります。 その電話の接続経路上にある通信会社を信用していないとか、 法執行機関がその通信会社に、 盗聴設備を要求するかもしれないから信用していない場合には、 これが問題になることがあります。

国際電話は特に無防備になります。 衛星回線や無線回線を通っている電話は、 手元のラジオで傍受できてしまいます。 海底ケーブルを通っている電話は傍受するのにずっと費用がかかりますから、 こんなことをするのは、たぶん Echelon を使っているような、政府機関に限られるでしょう。

機密扱いのデータは電話回線リンクでは受渡しをしないとすると、 主に無防備になるのは、 自分のユーザー名とパスワードをタイプしているときです。 この場合は、 S/KEY やあるいは OPIE 、 それに関連する An OPIE for PAM を調べて下さい。

しかしこういったワンタイムパスワードには欠点があります。 これについては Peiter ‘mudge’ Zatko が、 Vulnerabilities in the S/KEY one time password system という、よくまとまった概要を書いています。

#### 暗号化キー用の基本材料

ワンタイムパスワードジェネレータとか、 ワンタイムパスワードのリストといった、 暗号化の基本となる材料を所有することは、 国によっては重大な犯罪になります。

ですから、自国内の法律と、 旅行で通るかも知れない国々の法律に精通していなければなりません。

#### 通信傍受の妨害

法的に認められた通信傍受を妨害したり回避するような方策をとると、 国によっては重大な犯罪になります。

ですから、自国内の法律と、 旅行で通るかも知れない国々の法律に精通していなければなりません。

## シリアルコンソールをサポートするように、カーネルを設定する

ディストリビュータが出荷している Linux カーネルは、 たいていシリアルコンソールが使えるように設定してあります。 しかしシステム管理者は、 カーネルを再コンパイルする以外には解決策が無いような問題に、 ほとんど必ず遭遇します。 こういった場合は、 シリアルコンソールをサポートするようにカーネルを設定して下さい。 普通コンソールメッセージは、 シリアルポートの他にモニターへも表示したいですから、 通常の仮想端末コンソールも設定します。

### Linux カーネルのバージョン 2.5

カーネルのバージョン 2.5 は現在活発な開発途上にあるものですから、 このセクションの内容は古くなっているかも知れません。 バージョン 2.5 では、 USB ドングルに取り付けたシリアルポートに、 コンソールが接続できるようになっています。 バージョン 2.5 のカーネルに対する `-dj` パッチは、コンソールレイヤーを書き直したものです。 しかしこの書き直したレイヤーが、 シリアルコンソールをユーザー空間で使用する場合にも効果があるかどうかは不明です。

カーネルを設定する場合は、 次のパラメータを設定してください。

#### `make menuconfig` を使ったシリアルコンソール用カーネル設定

    Character devices  &hyphen;&hyphen;&hyphen;>
     [*] 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` に次のパラメータが設定されるはずです。

#### `.config` を用いた、シリアルコンソールのカーネル構成

    CONFIG_VT=y
    CONFIG_VT_CONSOLE=y
    CONFIG_SERIAL=y
    CONFIG_SERIAL_CONSOLE=y

USB バスに取り付けたシリアルポートを使いたい場合は、通常の USB の設定に加えて、 USB のコンソールドライバ、 および USB シリアルドングルのうち一つをロードするように、 カーネルを設定してください。 （ここの例では、汎用シリアルドングルを使っています）。

#### `make menuconfig` を使った USB ドングルのシリアルコンソール用カーネル設定

    USB Serial Converter support &hyphen;&hyphen;&hyphen;>
     <M> USB Serial Converter support
     [M] USB Serial Console device support
     [M] USB Generic Serial Driver

こうすると、`/usr/src/linux/.config` に次のパラメータが設定されるはずです。

#### `.config` を使った USB デバイスのシリアルコンソール用カーネル設定

    CONFIG_USB_SERIAL=m
    CONFIG_USB_SERIAL_CONSOLE=m
    CONFIG_USB_SERIAL_GENERIC=m

で説明したように、 マジック SysRq キーを使わないようにカーネルを設定することも必要です。

### Linux カーネルのバージョン 2.4

このカーネルを設定する場合は、 次のパラメータを設定して下さい。

#### `make menuconfig` を用いたシリアルコンソール用のカーネル設定

    Character devices  &hyphen;&hyphen;&hyphen;>
     [*] 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` に設定されるはずです。

#### `.config` を使ったシリアルコンソール用のカーネル設定

    CONFIG_VT=y
    CONFIG_VT_CONSOLE=y
    CONFIG_SERIAL=y
    CONFIG_SERIAL_CONSOLE=y

で説明したように、 マジック SysRq キーを使わないようにカーネルを設定することも必要です。

### Linux カーネルのバージョン 2.2

最近の Linux 2.2 カーネルは、 ビルドバラメータ とパラメータ構文が Linux のバージョン 2.4 カーネルと同じになっています。

初期のカーネルに関しては、1997年 4月に出た Linux Journal の36号にある、Francesco Conti が書いた 記事 を参照して下さい。

訳注：この記事のタイトルは "Serial Terminal as Console" と なっています。URL は若干違っていて、 "http://linuxjournal.com/article.php?sid=2040" になっているようです。

この記事にはカーネルにあてるパッチがいくつか載っていました。 以下に略記したように、 シリアルポートで利用できる速度範囲を広げるために、 このパッチは拡張しました。

`/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` を に載っている値の中の一つに変えて下さい。

#### IBM-PC/AT のシリアルポートのビットレートと、 そのビットクロックの除数

ビットレート | 除数
--- | ---
115200bps | `0x01`
57600bps | `0x02`
38400bps | `0x03`
19200bps | `0x06`
9600bps | `0x0c`
4800bps | `0x18`
2400bps | `0x30`
1200bps | `0x60`

## シリアルケーブルの詳細

### 用語

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" ピンは、 実際はデータを受け取るんです。

### コンソールポート・モデム間のケーブル

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

邦訳は、 Serial-HOWTO です。

を参照して下さい。コンピュータ側の "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 の信号は平衡伝送ではありませんが、 このようにより合わせれば、 結果的に信号の劣化や拾うノイズの量が最小限になるでしょう。

### コンソールポートと端末（または別のPC）間のケーブル

特に規定しているわけではないのですが、 RS-232 規格では、 間にモデムをはさまずに 2 台のコンピュータを相互接続できるようになっています。 これには ‘ヌルモデム’ ケーブルという特別なケーブルが必要になります。

ヌルモデムケーブル内の結線は、 必要となるハンドシェークと制御信号によって異なります。 製造業者が違えば、この点に関する見方も違います。 ですから、結線図が付属していないヌルモデムケーブルは買わないで下さい。

Linux では、フロー制御とモデム制御の各信号線が、 すべて正しく結線されている必要があります。 ヌルモデムケーブルの正しい結線は、 と、もう一つ に示してあります。

Linux は CTS と RTS を使ってハンドシェークを行なって、 端末のオーバーランからコンピュータを保護し、 またコンピュータのオーバーランから端末を保護しています。 2 台のコンピュータをつなぐつもりなら、 CTS/RTS のハンドシェークを使わないと、 信頼性の高いファイル転送はできません。

Linux は端末が接続されていることを検知するために、 DSR と DCD を使います。 そのあとログインを要求します。 もしセッションが確立しているときに DCD が落ちると、Linux はユーザーをログアウトさせます。

Linux は DTR を使って、 リンクを強制的にクリアします。 これはユーザーがログオフして、通信チャンネルを解放した後に行ないます。

ヌルモデムケーブルは、 と の、 どちらのデザインでも、Linux カーネルの要件に合います。 しかし、両方のコンピュータが遠隔地にある場合は、 の方が若干良いかもしれません。 というのは、 ヌルモデムケーブルのどちら側に欠陥があるのかを、 DSR と DCD のステートの違いを使って決められるからです。

ヌルモデムの設計にはすべて、共通の欠陥があります。 ローカルコンピュータが "Data Terminal Ready" を落として、 ローカルモデムをリセットした後、 モデムと相互接続しているコンピュータが "Data Set Ready" を相当な時間落としてしまうのです。 しかしほとんどのソフトウェアは、モデムリンクとヌルモデムリンクの間の、 この若干の差異を調整するようになっています。

セキュリティ上重要な情報が無防備になり、 信頼が大きく損なわれてしまうのは、 や 、それに で示しているケーブルをはじめとして、 ヌルモデムケーブルの結線が間違っている場合です。

#### ステータスとハンドシェークを完全にしたヌルモデムケーブル

          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

#### ステータスとハンドシェークを完全にした別バージョンのヌルモデムケーブル

          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 コマンドを使ってモデムのソフトウェアを設定し、 制御信号とハンドシェークを無効にすることです。 こうすれば、ブートローダーの作者がシリアル接続のサポート内容を修正する際に、 ハンドシェークを修復できるようになります。

ヌルモデムケーブルに関しては、 使っている端末エミュレータソフトウェアで、 ハンドシェークを無効にするのが最良のやり方です。

ヌルモデムケーブルに関して最悪の場合は、 ハンドシェークと制御信号を改造しているケーブルが必要になります。 本番環境では、このようなケーブルは使わないようにして下さい。

#### ステータスとハンドシェークを改造したヌルモデムケーブル

          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 ヌルモデムケーブルがあればいいのです。

#### ステータスもハンドシェークもないヌルモデムケーブル

    Signal ground ---------------------- Signal ground

     Receive data ---------------------- Transmit data

    Transmit data ---------------------- Receive data

#### ステータスもハンドシェークもない片方向のヌルモデムケーブル

    Signal ground ---------------------- Signal ground

    Transmit data ---------------------- Receive data

本番環境では、こういったケーブルは使用しないで下さい

### シリアルケーブルの作成

ラックに詰め込んだコンピュータでシリアルコンソールを使う場合は、 最終的にはヌルモデムのシリアルケーブルを何本も作ることになります。 このセクションには、 シリアルケーブルを作る上でヒントになることがいくつか載せてあります。 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 の電源電圧を伝送しているケーブルだと思いますから、 互換性のない電圧をつないでしまうと装置が壊れてしまうかも知れません。

## モデムの設定

### 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 を終了します。このオプションは AltQ です。

Minicom は Alt ではなく、 CtrlA を使ってメニューシステムにアクセスすることがときどきあります。 以下のような Minicom のスタートアップメッセージでヒントを探して下さい。

    Press ALT-Z for help on special keys

    Press CTRL-A Z for help on special keys

### ダムモデムを設定する

大半の UNIX ライクなオペレーティングシステムと同じように、 Linux はシリアルコンソールが、 ダムモデムにつながっているものと思っています。 ダムモデムは最近はあまり見かけません。 見かけるとすれば、たぶん ISDN のターミナルアダプタや、あるいは衛星回線の地上端末といった、 風変わりなハードウェアだけでしょう。

ダムモデムはハードウェアを使って設定します。 には、 仮想のダムモデムのフロントパネルを示しています。 実際は、速度とモードの設定には、 ジャンパーや DIP スイッチを使うようです。

#### ダムモデムのフロントパネル

    +-----------------------------+
    |                             |
    |    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 がアサートされていないという想定で、動作するようにしてください。

### AT コマンドでモデムを設定する

今では、たいていのモデムはヘイズモデムとそのコマンドセットに基づく、 スマートモデムです。しかし先に論じたように、 Linux のシリアルコンソールは、 ダムモデムで動作するように設計されています。

したがって、スマートモデムをダムモデムと同じになるまで、 機能を落とします。 高価なモデムの中には、DIP スイッチや、 ボードジャンパーがあり、 それらを使ってダムモードにするものもあります。

そのモデムの `AT` コマンドを解説しているマニュアルは必携です。 たいていのモデムは、より一般的な `AT` コマンドでは一致していますが、 もっと専門的なコマンドに関しては違っています。

#### ポート速度を設定する

ヘイズの AT 互換モデムでは、 電話しているモデムがどんな速度を使っていても、 コンピュータ・モデム間は一定の速度を維持できます。

ほとんどのモデムでは、電源投入後最初に受信する文字の速度に基づいて、 自動的にこの速度を設定します。

そこで、 モデムの電源を切り、またすぐに電源を入れて下さい。そして `minicom -o console` コマンドでそのモデムに接続してください。 それから Enter を何回か押します。 これでモデムは Minicom が使っているのと同じビットレートで動作します。 この速度は、 で、シリアルコンソールに設定した速度です。

モデムになにかを出力するよう要求すれば、ポートの速度は確認できます。

##### モデムのポート速度を調べる

    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

    CtrlA Q
    Leave without reset? Yes

モデムによってはポート速度を再設定する AT コマンドがあります。 お使いのモデムのマニュアルで、`AT&B1` コマンドをちょっと調べてみてください。 また明示的にポート速度を設定するコマンドがあるモデムもあるので、 モデムのマニュアルで、 ざっと `ATB` コマンドを調べてみてください。

#### アンサーモードを設定する

`ATS0=2` コマンドを使えば、 モデムは 2 回目の呼出音で着信に応えます。

電話会社によっては、1 回目の呼出音で応えると、 モデムを識別できなくなる場合があるので、 そのような設定にはしないで下さい。

#### CTS/RTS のハンドシェークを設定する

CTS/RTS のハンドシェークを使うと、 文字落ちしなくなります。

`AT&K3` がその `AT` コマンドです。

#### "Data Carrier Detect" を設定する

"Data Carrier Detect" は、電話しているモデムの有無に従うようにしてください。

この AT コマンドは `AT&C1` です。

#### "Data Terminal Ready" を設定する

モデムは "Data Terminal Ready" が制御するようにしてください。 もし DTR が上がっていれば、 そのモデムは着信を受け付ける状態になっています。 DTR が落ちている場合は、 それ以上はどのような着信も受け付けないようにし、 既に着信している場合は、 いずれもハングアップさせてください。

この AT コマンドは `AT&D2` です。

#### `CONNECT` メッセージを出さないように設定する

ヘイズの AT 互換モデムは、 着信すると普通はメッセージを出力します。 例えば次のようなものです。

    CONNECT 9600

モデムにはこういったメッセージ出力を無効にする、 ‘quiet mode’ があります。

この AT コマンドは `ATQ1` です。 このコマンドに対応する応答の `OK` は表示されません。

#### コマンドをエコーバックしないように設定する

コマンドのエコーを返すとコンソールが混乱することがあります。 ですから、コマンドのエコーバックは無効にして下さい。

この `AT` コマンドは `ATE0` です。

#### 静かに接続するように設定する

ほとんどのモデムにはスピーカーがあります。デフォルトでは、モデムが 接続中でしかも一般的なプロトコルと速度でネゴシエートしている間は、 スピーカーから音が出続けています。 こうしておけば、間違えて何度も人を呼ばずに済むので、 発信しているモデムにとっては非常に役立ちます。 しかし、モデムが応答中の場合は、スピーカーの音が邪魔になることがあります。

もっと静かなコンピュータルームがお望みなら、 `ATM0` コマンドを使ってスピーカを切って下さい。

#### オプションで、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 の瞬間的な低下を無視するようにします。

#### アテンションシーケンスを無効にするよう設定する

モデムを正しく設定して順調に動作していれば、 モデムのコマンドモードにアクセスできるようにする、 `+++` シーケンスを無効にして下さい。

この AT コマンドは `ATS2=255` です。

たまたまこのコマンドを実行してしまった場合は、 を見て、 そのモデムを工場出荷時のデフォルトパラメータにリセットして、 再起動して下さい。

#### 設定例

##### 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

    AltA Q
    Leave without reset? Yes

#### モデムをリセットする

これ以上の AT コマンドをモデムに出す必要がある場合は、 一旦モデムの電源を切り、それからまた電源を入れて下さい。 こうすればモデムはコマンドモードになるはずです。

では次のコマンドを出して、モデムを工場出荷時設定に戻してみましょう。

##### ヘイズの 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

    AltA Q
    Leave without reset? Yes

もしこれが失敗した場合は、モデムの設定メモリをクリアする必要があります。 この手順はモデムの製造業者によって様々だし、 たぶんモデムを分解する必要があるでしょう。

### 内蔵モデム

内蔵モデムというのは、 基本的には PC のバスカードにマウントした、 外付けモデムとシリアルポートです。 これらは電源の供給も不要だしシャーシも要らないので、 外付けモデムよりも安価です。

内蔵モデムは、 リモートのシリアルコンソールアプリケーションでもちゃんと動作します。 場所借りしているサイトにあるコンピュータには、特に魅力的です。 というのは、これらのサイトは、 占有スペースと電気の消費量によって金額を請求しているからです。

お使いの内蔵モデムが、電源の切り／入りをしても、 その設定を保持していることを確かめて下さい。

それから、 内蔵モデムのシリアルポートが使っている、 割り込みラインとポートアドレス空間が、 その他の既存のシリアルポートのものと、競合しないことを確認して下さい。 あるいは、 内蔵のシリアルポートを無効にできることを確認してください。 そうすれば、割り込みラインとポートアドレス空間が解放されて、 内蔵モデムでそれらを使えるようになります。

内蔵モデムを WinModem と混同しないよう注意して下さい。 内蔵モデムには特別なデバイスドライバは要りません。そのままでも Linux からは標準的なシリアルポートに見えます。

### WinModem

モデムを見ると、 そこには中央処理装置と専用のデジタルシグナルプロセッサがあります。 また、最近の PC を見ると、 そこには大きな CPU があり、 サウンドボードは汎用の DSP を搭載しています。 変だと思いませんか？ 外付けモデムと、ハードウェアがダブッてますけど、 そうしないといけないのでしょうか？

‘WinModem’ というのは、 PC の構造を若干拡張して、 その中にモデムの CPU と DSP を組み込んだものです。 そういうモデムはもともと、 Microsoft Windows のデバイスドライバを組み込んで出荷しているものしかなかったので、 "WinModems" といいます。 これらのデバイスドライバのせいで、 "WinModem" はヘイズの AT 互換モデムにシリアルポートが付いているものだ、 という錯覚が起きました。長い間、使えるものといえば、 Windows 版のドライバしかなかったのです。 でも今では Linux 版のデバイスドライバも提供している業者が何社かあり、 そのモデムを ‘LinModems’ と洒落ています。

LinModem はたぶん、 Linux のコンソールに使えます。必要なのはせいぜい、 ソースコードを変更して、 そのモデムの AT コマンドエミュレーションをダム化することと、 カーネルを再コンパイルすることくらいです。

しかし、ブートローダーは非常に限られたソフトウェア環境で動作しており、 簡単なシリアルチップのサポートですら悪戦苦闘しています。 ブートローダーの中には、割り込み処理さえ無いものがあることを考えると、 LinModem の複雑な DSP 処理を行なわせるのは、 実用の範囲を優に越えています。

## バグと困りごと

### Linux カーネルのフロー制御

`console=` パラメータに `r` オプションを付けて、 Linux カーネルに CTS/RTS のフロー制御をさせることができます。 例えば、速度が 9600bps、データが 8 ビット、 パリティ無し、CTS/RTS のフロー制御、というシリアルリンクは、 で示すように設定します。

#### CTS/RTS フロー制御を行なう、カーネルの `console` パラメータ

    console=9600n8r

Linux カーネルは常にデータを送出するだけなので、 CTS/RTS フロー制御は、 "Clear to Send" がアサートされていないことを確認する という実装になっています。 この部分のコードは、 `/usr/src/linux/drivers/char/serial.c` にあります。 関連部分は にあります。

#### コンソールの 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 では、 再度カーネルレベルのフロー制御をお奨めしたいと思います。

### 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

訳注：シリアルコンソールのハングアップを修復する、 新しい SysVinit パッケージ

を参照して下さい。この勧告で公表しているのは、 Red Hat Linux 7.1 CD で出荷 している、`SysVinit-2.78-15.i386.rpm` パッケージ のアップデートです。

### BIOS、 キーボード、そしてビデオカード

BIOS によっては、 キーボードが接続されていないとブートしないものがあります。

    Keyboard faulty, press F1

しかしほとんどの BIOS には、 キーボードを付けなくてもブートできるようにする設定があります。

ビデオカードをインストールしてないとブートしない、奇妙な BIOS もあります。

### リブートでモデムがハングアップする

リブート中に、シリアルコントローラーはリセットされますから、 モデムの制御ライン "Data Terminal Ready" は落ちます。 すると今度はこれが原因になって、モデムがハングアップしてしまいます。

だからといって誘惑に駆られて、 DTR を無視するようなモデムの設定にはしないでください。 そうしてしまうと、このバグはもっと始末が悪くなってしまいます。 こうなると、電話は正しく切れなくなるし、モデムは動いたままになり、 クリアする方法はなくなります。 DTR を無視すると、 悪意のある人が電話をかけてきても、クリアする方法も無くなります。

コンピュータが `Restarting system` というメッセージを出してから、 ブートローダーのプロンプトを出すまでに要する、 総時間を記録したいこともあるでしょう。

でも モデムはブートしている間に （シリアルチップがリセットされるので）ハングアップしますし、 あるいは init のランレベルが変わる時も （getty が再起動するので）、 ハングアップします。

### init と syslog の出力は補助コンソールには表示されない。

カーネルのメッセージをシリアルポートと、 つながっているモニターの両方へ出力するように、 カーネルを設定するのは可能です。しかし、 init と syslog のメッセージは、 一番最後にリストしたコンソールデバイス、 本文書の例だとシリアルポート、にしか現れません。

このため、つながっているモニターを見ている人は、 混乱する可能性があります。 というのは、モニター上のメッセージが止まってしまうので、 init の起動直前にマシンがハングアップしたように思えるからです。 でも結局はブート処理は終了して、 getty が login: 要求を表示します。 ポストイットにその旨を書いてモニターに貼っておけば、 せっかちな人たちも安心するかもしれません。

### 接続してもコンソールが応答しない

マシンに接続後、端末の画面はまっさらかもしれません。でも Enter を押せば、 普通は login: 要求が上がってきます。

Enter を押した後、画面に何も文字が出てこなくても、 うろたえないでください。 マシンの電源は入っているはずだし、 オペレーティングシステムはブートしたはずです。 モデムが呼び出しに答えるには、 "Data Terminal Ready" が上がらなければなりません。

一番ありそうなのは、マシンがブートして、 `fsck` というファイルシステムチェックが動いている場合です。 このチェックには相当な時間がかかる場合があり、 その間の出力は何もないか、あってもほんの少しです。

システムログの帳簿に、 `fsck` が各ファイルシステムをチェックするのに要する時間を記録しておけば、 心の平安を保つのに相当役立つでしょう。

Enter の押下後テキストが乱れていたら、 ビットレートパラメータかパリティパラメータが合っていません。 その場合は、お使いの端末エミュレータの設定を直して下さい。

### 初期化中にモデムがハングアップする

`setserial` を使うとシリアルポートがリセットされます。 このためにモデムがハングアップしてしまいます。

`setserial` はブート中にときどき使われます。 その結果、出力は、 に見られるようなものになります。 `/etc/rc.serial` ファイルを調べて、 シリアルコンソールに使っているポートを参照している部分は、 いずれも削除してください。

#### マシンの初期化中、`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

### ブートローダーにはフロー制御がない

ほとんどのブートローダーでは、 CTS/RTS フロー制御をサポートしていません。 これがデータ喪失の原因になることがあり、 そこには大きな速度の不整合が存在します。 9600bps の固定速度ポートに接続している、最新のモデムにはよくあることです。

SYSLINUX の 1.66 はフロー制御を サポートしています。

### ブートローダーはラインノイズに弱い

ほとんどのブートローダーは、 ラインノイズから出た文字を一つでも受け取ると、 永久にそのプロンプトが出たままになります。

モデムによっては RS-232 の信号を、 わざと "フロート"状態にしておくものがあり、 着信がないときはノイズを送っています。 モデムは "Data Carrier Detect" をアサートしていないので、 ノイズによる文字は受信側で破棄してほしい、と思っているのです。

まずいブートローダーとまずいモデムを組み合わせると、 ブート中にいつもマシンがハングアップする、 という結果になる場合があります。

お使いのブートローダーが DCD に従うように設定できない場合は、 購入しようと思っているモデムはどれも試験するよう注意して、 着信がない時に文字を生成しないことを確認してください。 現時点では、 RS-232 のステータス信号を完全に実装しているのは、 SYSLINUX だけです。

### Advanced Power Management

APM はソフトウェアで電源の管理をできるようにするものです。 これは天の恵みでもあり、呪いにもなります。

天の恵みなのは、マシンが遠隔操作で、きれいに、 そして最後までシャットダウンできるからです。 その遠隔サイトが電源設備を保守している場合は、 こうするのが良いかも知れません。

これが呪いだというのは、いったん電源を落とすと、物理的に 電源 ボタンを押さない限り、 二度とそのマシンが起動しないからです。 マシンによっては BIOS や、 あるいはマザーボードの設定で、この役に立たない動作を無効にできます。

#### `shutdown` コマンドのタイプミスは APM よりも始末が悪い

`shutdown -r now` と `shutdown -h now` を混同しないよう注意してください。 前者はマシンをきれいにリブートしますが、後者はそのマシンの電源を きれいに落とします。下手をすると、誰かが 電源 ボタンを、物理的に押すはめになります。

リモートサイトのコンピュータ環境構築に、本気で取り組んでいるのなら、 Western Telematic や Server Technology、 それに他の多くの会社から出ている、 リモートの電源スイッチを調査する方がいいでしょう。 モデルによってはターミナルサーバーを組み込んでいたり、 モデムや RS-232 ラインを組み込んでいて、 UPS への入力電源の故障をシミュレートする （したがって、電源が切れる前に Linux システムをきれいにシャットダウンする）ようになっています。

### モデムと国際電話の必要条件

モデムが電話ネットワークに接続するのに適していると証明するような、 国際的な承認手順はありません。技術的な共通規格が揃っており、 モデムを世界規模の電話の交換ネットワーク上で使用する際は、 その規格を満たさなければならないのですが、 その存在を無視しているのです。ですから、 ある国で承認したことが他の国の標準で認知されるということはほとんど、 あるいはまったくありません。

モデムを使う上で必要となる国内の技術要件はあります。 共通の必要条件は、 2回目の呼出音の後で応答するように、 モデムとそのソフトウェアを設定することと、 同じ話中の番号あるいは間違っている番号に、 連続 6 回以上はかけないことです。

#### 通信用機器の承認

ほとんどの国では、 未承認の通信装置を使用したりあるいは輸入したりするのは犯罪になります。

さらに、ある種の装置を操作するには認可が必要になる場合があります。

プライバシーに関する法律によって、 発信者識別記録でできることが規制されているかもしれません。

プッシュホンの電話が世界中どこでも使えると決めてかかってはいけません。 十進法に基づいたダイヤルに関しては、共通の標準が無いのです。 ゼロの列が一番長い国々もあれば、ゼロの列が一番短い国々もあります。

国内の電話番号プランには、国際的な協調があまりありません。 国際識別番号をダイヤルするつもりで、 国内の緊急サービス番号に電話しないよう注意して下さい。 一般的な緊急サービス番号は、112, 911, 000 ですが、 国際識別番号は国によって違います。

無料電話のようなインテリジェントネットワークの機能は、 国外から発信する電話では普通は利用できません。

国際電話は海底光ケーブルや衛星通信、 あるいは短波無線を通ってくることがあります。 このような伝送方式では、使用可能なビットレートにかなり違いがあります。 海底光ケーブルだとエラーがなく、スループットも最大になると思って下さい。 衛星通信だと 1200bps から 2400bps までで、エラーもいくらかあるでしょう。 HF 無線だと 75bps から 300bps までで、 エラーも多くなります。

距離によっては遅延も相当出てくるでしょう。 モデムのエラー訂正ウィンドウよりも遅延の方が大きくなった場合、 モデムの HDLC ベースのエラー訂正を無効にすれば、 Zmodem のファイル転送性能はもっと良くなります。

国際電話ではその信号がかなり変わってしまうかも知れません。 従来国際電話はエコーを最小限にするために、 アナログのコンディショニング回路を通るようになっています。 このコンディショニングのせいで、 モデムで使用できるビットレートの最大値が制限されているのです。 たぶん 9600bps 未満でしょう。 ガードトーン を出すようなプログラムを作って、 アナログのコンディショニングを無効にできるかも知れません。 でもこれは通信会社によって様々だし、 ガードトーンを送出するコマンドはモデムによっていろいろです。

最近の国際回線、特に国際コーリングカードでアクセスする回線では、 デジタル音声圧縮を使っています。 こういったデジタル圧縮している回線では、 信頼できるモデム間接続は確立できません。 現時点でこういったデジタル圧縮の回線を識別する一番いい戦略は、 バックグラウンドのノイズを聴くことです。 つまり誰も話していない時には、 バックグラウンドノイズは合成されたバックグラウンドノイズ （サイレンスサプレッション という圧縮技術） に置き換わります。

## シリアルコンソールからファイルをアップロードする

マシンがどうにもならなくなり、 その復旧のためにファイルをアップロードしなければならない、 という筋書きはたくさんあります。 そういった筋書きのは多くは、 コンソールに使っているシリアルポートから、 ファイルをアップロードするのが唯一の手段です。

シリアルリンク上でファイルをあちこちに動かす方法には、 マイクロコンピューティング技術の長い歴史があります。 そこでこのセクションでは歴史を遡って、 掲示版システムという"先インターネット時代" によく使ったツールのベールをはがすことにします。

### コンソールにログを取らないようにする

ファイルをアップロードあるいはダウンロードしようとする前に、 コンソール上にメッセージを表示しないようにするのがうまい考えです。 こういったメッセージが出てると、 `cat` を使って移動したファイルを壊してしまうし、 Xmodem や、 他の同様なプロトコルの通信が、かなり長時間になってしまいます。

お使いのシステムの設定を変更して、 klogd に `-c 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` に出力を送っている行を変更し、 代わりに、その出力をファイルに送るようにします。

### "ASCII アップロード" と `cat`

`cat` はあらゆる UNIX ライクなシステムで使えます。 このコマンドは、キーボードから受けとったデータをファイルにコピーします。 Minicom や他の端末エミュレータには ‘ASCII upload’ という機能があり、 ファイルをキーボードから入力したものとして、シリアルリンクへ送ります。

    remote bash$ cat > upload.txt

    AltS 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...

    CtrlD
    remote bash$

ハードウェアフロー制御をしていないと、ASCII アップロードで、 たまに文字落ちが起こります。

バイナリファイルをアップロードするには、それを ASCII にエンコードし、アップロードします。そしてそれからもう一度バイナリに デコードします。

    localhost bash$ uuencode upload.bin < upload.bin > upload.txt

    AltS 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...

    CtrlD
    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 から始めます。

### 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

    AltS Upload zmodem
    [zmodem upload - Press CTRL-C to quit]
    Sending: upload.bin
    Bytes Sent:   3072/  10000   BPS:2185     ETA 00:09

アップロードが失敗して `rz` がファイルの受信待ちのままになっている場合は、何回か CtrlX をタイプすればコマンドプロンプトに戻ります。この方法は、 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 というパブリックドメイン版から 派生している、機能拡張したフリーソフトウェアです。

### Kermit

Kermit というのは、 Columbia University が開発した、端末エミュレータ兼ファイル転送プログラムです。 その人気の元は、Kermit を使えば、 IBM のメインフレームから MS-DOS PC に至る、 幅広いコンピュータにアクセス可能だという点にあります。

Kermit を若干変えたものが G-Kermit という名前で、 GNU Public License の下でリリースされました。 これはたいていの Linux ディストリビューションで使用できます。

最近の Kermit と Zmodem のプロトコルの技術基盤は同じ物です。 しかし Zmodem はエラー率が高いにも関わらず、 呼び出す時の性能は良くなっています。 一方、移植されてきたホストプラットフォームは Kermit の方が多くなっています。

## Red Hat Linux をシリアルコンソールからアップグレードする

Linux ディストリビューションのアップグレード版は、 頻繁にリリースされています。 しかしマシンに直接触れないと、 これらのアップグレード版のインストールができないようなら、 遠隔管理は無理です。

このセクションでは、Red Hat Linux を遠隔地からインストールしたりアップグレードする方法を検証します。

Red Hat Linux はインストールディスクを用いて、 HTTP サーバーから、 ネットワーク経由でインストールできます。 このディスクを修正して、シリアルコンソールを使うようにします。 このディスクからブートするのか、 それともハードディスクからブートするのかが制御できれば、 シリアルポートを使って、遠隔地から Red Hat Linux ディストリビューションのアップグレードができます。 マシンを配置する際、 空のフロッピーディスクをフロッピードライブに挿入しておけば、 オペレーティングシステムのアップグレードに、 オンサイトの介入は不要になります。

もし他の Linux ディストリビューション をアップグレードする手順をご存知なら、 是非この HOWTO の保守担当者にいただければと思います。

### ブートディスクを選ぶ

遠隔地からアップグレードする際の関門は、 アップグレードを実行するためにフロッピーディスクからブートできることと、 その後ハードディスクからリブートできることです。 可能性としては次のようなものがあります。

1. たいていの BIOS では、 設定でブートディスクの順序が制御できるようになっています。 その BIOS がシリアルコンソールをサポートしていれば、 フロッピーディスクをフロッピードライブに残したまま、 そのマシンをアップグレードできます。 そうすれば、そのオペレーティングシステムをアップグレードするために、 マシン本体に誰かが付添う必要はなくなります。

2. アップグレード前後で、 誰かがフロッピーディスクの挿入と取り出しをしてもかまいません。 場所借りしているサイトはほとんど、 この程度の ‘媒体交換’ 用技術サポートは用意しています。

3. BIOS の設定を格納する CMOS メモリで、 レコードを二つ作ることが可能です。 一つはフロッピーからのブートに使い、 もう一つはハードディスクからのブートに使います。 しかしあいにく nvram デバイス は、 それほど多種多様なマシンで動作するわけではないので、 このHOWTOではこの方法にはこれ以上深入りしません。

### シリアルポートを使うように BIOS を設定する。

サーバーの多くは、シリアルポートから BIOS が設定できるようになっています。 特にラックマウント用に設計されたシステムではそうなっています。 しかし今のところ、 デスクトップシステム向けに設計されたマシンで、 シリアルポートから BIOS がアクセスできるようになっているものはほとんどありません。

ベンダーのドキュメントを参照して、 シリアルポートが使えるように BIOS を設定して下さい。この機能を ‘コンソールリダイレクション’ と呼んでいるベンダーもあります。 あいにく、この用語の意味はベンダーによって様々です。 VGA の出力とキーボードを、 専用のシリアルプロトコルを使ってリモートの PC にリダイレクトする、 という意味でこの用語を使っているベンダーもあります。 ブートした後、BIOS に、 シリアルリダイレクションを無効にするよう指示する場合があるなら、 この機能は Linux のシリアルコンソールでしか使えません。

混乱している例ですが、Dell は Dell 2400 と Dell 2450 の説明に ‘コンソールリダイレクション’ を使用しています。 Dell 2450 の BIOS はシリアルポートから設定できます。 Dell 2400 の ‘コンソールリダイレクション’ というのは追加ハードウェアで、 そのコンピュータの VGA モニターとキーボードを遠隔地で複製するものです。

BIOS の設定例を に示します。

#### シリアルリンクを使うために 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 では、 そのブート中にある特定のキーを押すと、 設定ダイアログに入ります。 モデムリンクにノイズが多い場合、これが問題になることがあります。

通常の動作では、最初にハードディスクからブートするように、 ブート順序を設定します。

#### ハードディスクからブートするよう BIOS を設定する

    BIOS setup boot order

    First:  [Hard disk]
    Second: [CD-ROM]
    Third:  [Floppy disk]

### DTR を無視して、DCD をアサートするようにモデムを設定する

コンピュータはアップグレード中に 2、3 回リブートします。 このリブートのせいでモデムはハングアップしてしまいます。 アップグレード中に何度も電話するはめになると、 いらだたしくなるかもしれません。 モデムの設定を変えて "Data Terminal Ready" を無視するようにすれば、コンピュータがリブートしても、 モデムがハングアップしなくなります。 DTR を無視するには、モデムに `AT&D0` コマンドを送って下さい。

通信料金を減らすため、 インストール中は接続を切りたいと思うことがあります。 そういう場合はモデムの設定で、"Data Carrier Detect" をずっと上げておくようにすれば、 切断も再接続もインストール作業の邪魔になりません。 常に DCD を上げておくには、 `AT&C0` コマンドを使います。

にある手順を使って、 これらの変更を適用して下さい。 他の `AT` コマンドは、すべてそのままにしておきます。

### ネットワークインストール用フロッピーディスクを用意する

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 ブートローダーを使用します。これについては、 と で説明しました。 まず最初に、ブートローダーの設定ファイル `/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 |     |
    |    +-----+          +----+     |
    |                                |
    |                                |
    +--------------------------------+
    <Tab>/<Alt-Tab> between elements  | <Space> selects | <F12> next screen

ファンクションキーにアクセスする方法がないように思えます。でも幸い、 このユーザーインタフェースでは、ファンクションキーを使う必要はありません。

これでフロッピーのテストは終りました。 フロッピーディスクを抜き、マシンをリブートして、 通常動作に戻して下さい。

### HTTP サーバーを準備する

ウェブサーバーが、 これからアップグレードするバージョンの、 Red Hat Linux で動いているなら最高です。 しかし以前のバージョンが動いている場合は、 オペレーティングシステムを再構築せず、 もっと新しいバージョンのオペレーティングシステムから、 anaconda-runtime をインストールして下さい。

`wget` のようなミラーリングユーティリティを使って、 Linux のディストリビューションを、ローカルのウェブサーバーにコピーします。 あるいは、ディストリビューション CD から、ウェブサーバーにコピーしてもかまいません。

    bash$ mkdir &hyphen;&hyphen;mode=664 &hyphen;&hyphen;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 では、 アップデートの追加は欠かせません。 を参照して下さい。

`ftp://ftp.redhat.com/pub/updates/7.1/en/os/` にあるサブディレクトリ、 `i386`, `i486`, `i586`, `i686`, `images`, `noarch` から RPM のアップデートを集めて下さい。

訳注：2002 年 6 月 17 日現在、当該アップデートは `ftp://updates.redhat.com/7.1/en/os/` になっているようです。

これらのアップデートを、 ディストリビューションのコピーとマージして下さい。 アップデートする、 それぞれの 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 &hyphen;&hyphen;withnumbers &hyphen;&hyphen;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

### ネットワーク設定を記録しておく

"Dynamic Host Configuration Protocol" （DHCP） を使っていないマシンの場合は、 その時点のネットワーク設定を記録しておいて下さい。 インストールの際、Configure TCP/IP 画面で必要な項目を入力するのに使います。

#### インターネットプロトコル（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

    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

`inet addr` 値は ‘IP address’ のことです。 この例では、 `10.1.2.3` となっています。 `Mask` の値は ‘Netmask’ のことです。 この例では、 `255.255.255.0` になっています。

宛先 `0.0.0.0` に対する Gateway の欄の値は、 ‘デフォルトのゲートウェイ’ です。この例では、 `10.1.2.254` になっています。

最初にリストされている、 `ネームサーバー` の値が、 ‘プライマリのネームサーバー’ です。 この例では、`10.255.1.1` になっています。

### LILO の設定を記録しておく

`/etc/lilo.conf` にある、 インストール時点の `append=`、 `boot=`、および `linear` の値を記録しておいて下さい。

#### 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 を使っています。

### 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 <ENTER> key.
     -  To install or upgrade Red Hat Linux in text mode, type: text <ENTER>.
     -  To enable low resolution mode, type: lowres <ENTER>.
        Press <F2> for more information about low resolution mode.
     -  To disable framebuffer mode, type: nofb <ENTER>.
        Press <F2> for more information about disabling framebuffer mode.
     -  To enable expert mode, type: expert <ENTER>.
        Press <F3> for more information about expert mode.
     -  To enable rescue mode, type: linux rescue <ENTER>.
        Press <F5> for more information about rescue mode.
     -  If you have a driver disk, type: linux dd <ENTER>.
     -  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 |      |
    |     +----+         +------+      |
    |                                  |
    +----------------------------------+

ここで、 で記録しておいたネットワークの詳細を入力します。ネットワークが "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 画面が現れたら、 で記録しておいたカーネルパラメータを入力して下さい。 これらのパラメータには、 `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

### シリアルコンソール用のブートディスクを作る

アップグレードがうまくいったら、 シリアルコンソールをサポートするブートフロッピーを作って下さい。これは anaconda インストーラを使ったり、 で説明したのと同じ方法でブートディスクを作れば一番簡単にできます。 で説明したように、 設定ファイル `\SYSLINUX.CFG` を修正して、 ブートローダーがシリアルコンソールを使うようにします。そして最後に、 で説明したように、 シリアルコンソールを使うようにカーネルを設定します。

あるいは、自分専用の mkbootdisk の RPM パッケージを作って、 そこに修正したシェルスクリプト `/sbin/mkbootdisk` のコピーを入れるという方法もあります。

ブートフロッピーの `\SYSLINUX.CFG` ファイルは、 にあるコードを使って、 `mkbootdisk` で書いています。 このコードは、シリアルコンソールを使うように変更します。その結果は、 に示してあります。

#### Red Hat Linux 7.2 の `mkbootdisk` から抜き出す。 これで `SYSLINUX.CFG` を作る

    cat > $MOUNTDIR/syslinux.cfg <<EOF
    default linux
    prompt 1
    display boot.msg
    timeout 100
    label linux
      kernel vmlinuz
      append $INITRDARG root=$rootdev
    EOF

#### `mkbootdisk` から抜き出して変更したもの。 シリアルコンソールを使う `SYSLINUX.CFG` を作る

    cat > $MOUNTDIR/syslinux.cfg <<EOF
    serial 0 9600
    default linux
    prompt 1
    display boot.msg
    timeout 100
    label linux
      kernel vmlinuz
      append $INITRDARG root=$rootdev console=tty0 console=ttyS0,9600n8
    EOF

これで、作成したブートフロッピーはシリアルコンソールを使います。

代替案として抜群に良いのは、ブートフロッピーを作る時に、 カーネルパラメータとシリアルポート、 それに速度とフロー制御が指定できるように、 パラメータを `mkbootdisk` に追加することだろうと思います。この拡張要件については、 Red Hat Bugzilla のエントリ 59351 を参照して下さい。

### 参考文献

インストール CD にあるカーネルが、 アップグレードするマシンではブートしなかったり、 あるいは存在しないモジュールが、 ファイルシステムに必要だったりすることがときどきあります。 この場合は新しいカーネルを構築して、 この新しいカーネルを使うように、 インストールディスクを再作成する必要があるでしょう。これについては、 RedHat7 CDs mini-HowTo で、 文書になっています。これは "Linux Documentation Project" からは利用できない、非公式の HOWTO です。

これよりも古い文書で、 以前の Red Hat ディストリビューションの構築プロセスを、 ほぼ完全に説明しているのは、 Burning a RedHat CD HOWTO

邦訳は、 Burning a RedHat CD HOWTO です。

です。

## シリアルコンソールから、 DebianGNU/Linux をアップグレードする

ブートディスクとルートディスクを作成して下さい

`console=ttyS0,9600` というパラメータを付けて、ブートディスクでブートして下さい。

インストールプログラムを開始して下さい

## ターミナルサーバーの設定

ターミナルサーバーはもともと、 ミニコンピュータに端末を接続するために設計されたものです。 各端末には RS-232 ポートが付いています。 ミニコンピュータとの接続には、普通イーサネットポートを使いました。 端末を接続すれば、予め定義してあるマシンのリストから、 どのマシンをつなぐのかが選べるような、 コマンドラインインタフェースにつながります。 それからそのマシンとの間で、 Telnet セッションが始まります。

時が流れて、ターミナルサーバーはより多くの機能を手に入れました。 例えばモデムが接続できるようになっています。 最初のうちは、これを使って、 単にミニコンピュータに電話をかけて、接続できるようになっただけでしたが、 機能の拡大により、ほとんどのターミナルサーバーは、 非常に多くのシリアルポートが付いた、ルーターになるまでに成長しました。

多くのコンソールを端末一台につなげられる他に、 ターミナルサーバーは、 ユーザーアカウントとパスワードが使えるように設定できます。 こうすることで、どのモデムからでも、 そのコンソールに接続できるようになる一方で、 そのコンソールに、未承認のユーザーからアクセスされないようにします。

このセクションの残りの部分では、 ターミナルサーバーを選択する際に必要になる、 ターミナルサーバーの購入時の考慮事項や、ケーブルのピン配置、 それから、ターミナルサーバーの種類を区別するのに必要な、 基本的なソフトウェアの設定を記載します。

この後も情報をお寄せ下さい。歓迎します。この HOWTO の保守担当者に電子メールで送って下さい。

### 中古のターミナルサーバーを購入する際の考慮事項

昔はインターネットサービスプロバイダが、 ターミナルサーバーの大手ユーザーでした。 各モデムはターミナルサーバーポートにつながっていたでしょうし、 接続してくるユーザーは、たんに予め決まったミニコンピュータだけにではなく、 どこにでも IP が送れるようになっていたと思います。 製造業者はこの使い方を反映するように、その装置の名前を、 ‘アクセスサーバー’ とか ‘モデムサーバー’ に変えました。

これらのアクセスサーバーは新しい世代がとって代わりました。新しい世代は、 ISP のルーターに、 電話のトランク回線を直接挿し込めるようになっています。 モデムが別々に分かれているわけではありません。 モデムのトーンは、 ルーター内部にある、デジタルシグナルプロセッサチップがデコードします。 この結果今では、ターミナルサーバーは中古市場で、 簡単に入手できるようになっています。

中古のターミナルサーバーを購入する場合は、 そのソフトウェアの権利も購入することを確認して下さい。 会社によっては、自分たちのソフトウェアをライセンスしていて、 そのライセンスが再販できないこと、 そのターミナルサーバーの所有者変更の際は、 当該会社からライセンスを再購入しなければならないこと、 という契約条件を付けているところがあります。 ソフトウェアのアップデートを得るには、 多くの会社では一般に保守契約が必要になります。 これらの保守契約は高額になる可能性があり、 一般的な数字は、年額で小売価格の 15 パーセントです。 サードパーティのメンテナンス業者から、 もっと安価なソフトウェアアップデートを入手できるかも知れません。

古いターミナルサーバーの多くはもう販売していないか、 あるいはそのベンダーのサポートが打ち切られています。 ベンダーのウェブサイトで “end of life” を探して下さい。

ごく最近利用可能になったソフトウェアが、 購入したターミナルサーバーの RAM やフラッシュメモリの制約内で収まらない場合、 ベンダーのサポートが、特に問題となることがあります。 中古のターミナルサーバーを購入するのは、 このことを調べてからにしたほうがいいでしょう。 そうしないと、 フラッシュメモリのアップグレードが、著しく困難になる可能性があります。 というのは、マザーボード上の ROM も、 フラッシュメモリの特性を分かっているものに、 置き換える必要があるかも知れないからです。

これはフラッシュメモリ設計の失敗です。このようなサーバーでは、 フラッシュメモリは、メモリの読み書きに要するタイミングではなく、 モデル名でそれ自身を識別します。 ですから、フラッシュメモリからソフトウェアをロードする場合は、 ブート ROM には、フラッシュメモリのモデルとタイミングの表が必要です。

Kingston とか MemoryX といった、 サードパーティの部品メーカーでは、 通常ダイナミックRAM やフラッシュメモリを提供しています。ですが普通は ROM もスタティックRAM も 提供できません。

古いターミナルサーバーのほとんどは、 Secure Shell をサポートしていません。 この場合、イーサネットポートでターミナルサーバーにアクセスするという 考えはまずいです。つまりコンソールにログインすると、 自分のパスワードが平文でインターネット上を流れてしまいます。 ですから、ターミナルサーバーに電話して接続するか、あるいは S/KEY 認証付きの、 RADIUS プロトコルといったような、ワンタイムパスワードシステムを使って下さい。

あるいは、別の Linux マシンを一台用意して、 マルチポートのシリアルカードを使ってもかまいません。

### Cisco 2511

Cisco 2511 アクセスサーバーに対する基本的な設定は、 に示してあります。 同じような設定は、他のシスコのアクセスサーバーでも動作すると思います。 Cisco には web site に優れたドキュメントがあります。正しい Configuration guide を見つけることから始めてください。

シスコあるいは再販業者との現在の保守契約は、 ソフトウェアアップデートをダウンロードするのに必要です。 この契約には、フラッシュメモリのアップグレードに必要な、 ROM に関する条項も入っています。 ほとんどの管轄区域では、 シスコのソフトウェアライセンスは譲渡可能にはなっていません。 ですから、中古市場でアクセスサーバーを購入した場合は、 シスコか再販業者から、ソフトウェアライセンスを購入する必要があると思います。

#### 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 を、まだリリースしていませんでした。

### Xyplex/iTouch MAXserver 1600

Xyplex ターミナルサーバーに関する情報を得るのに役立つサイトは、 です。 ケーブル配線については、 で論じています。

Xyplex ターミナルサーバーは、現在 iTouch Communications 社が製造しています。 iTouch と結んでいる、現時点で有効な保守契約が、 ソフトウェアアップデートのダウンロードに必要です。

### Xylogics/Bay/Nortel Annex

Annex のターミナルサーバーに関する情報を 集めるのに役立つサイトは、 です。

### Livingston/Lucent Portmaster

最初に、 に示すように、 ターミナルサーバーの設定を行ないます。 この図では、`example` というシステム名を用い、 IP アドレスは 10.1.2.3、ネットマスクは 255.255.255.0、 ゲートウェイアドレスは 10.1.2.254、DNS サーバーのアドレスは 10.1.1.1 にしてあります。これらのアドレスは、 ご自分のネットワークでお使いのアドレスに置き換えて下さい。

#### 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

では、ターミナルサーバーの各シリアルポートを設定しましょう。 その様子は、 に示してあります。

#### 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 ポート番号を使って下さい。

## 開発者へのお願い

### ブートローダーの作者へのお願い

ブートローダーでシリアルコンソールをサポートしていることが、 非常に役立っています。サポートしてくれて感謝します。

ブートローダーは 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 の拡張データエリアが示唆している場合は、 レジスタを初期化しようとしないでください。

### BIOS の作者へのお願い

皆さんの BIOS に、リモート操作のサポートを追加してくれて感謝します。 2、3 改善すれば、これをサポートしている利点が最大になります。 そのほとんどは、 に載せてあります。

- ユーザーインタフェースは、単純なままにしておいて下さい。 派手なカーソルで指し示すような端末を、サポートする必要はありません。 見栄えの良い機能を付けても、 使える端末エミュレータクライアントの数を、制限するだけです。 驚くほど多数の端末エミュレータが、 非常にバグが多い DEC VT100 を実装しています。

  低速をサポートする他に、 データ転送量が少ない場合の、ユーザーインタフェースも試験して下さい。

- あまりやり過ぎないで下さい。 Linux では、 ブートローダーとオペレーティングシステムの両方が、 シリアルコンソールを明示的にサポートしています。 ですから BIOS に必要なのは、 BIOS 自身のシリアルインタフェースをサポートすることだけです。 Linux は、汎用のシリアルリダイレクション機能を、サポートする必要はありません。 どうしても他のオペレーティングシステム用に、そういった機能を用意する場合は、 ぜひシステムブート後に、その機能を無効にできるようにして下さい。

- ラインノイズのせいで、コンピュータがブートできなくなるようにはしないで下さい。 BIOS の設定画面に入るのに、必要なキー入力が一つしかない、 ということは止めて下さい。 `dell` や `hp` あるいは `ibm` のようにフレーズを使って、 ユーザーや営業部門の人たちをハッピーにして下さい。 `lifetime` のアイデアは、 からコピーして下さい。

- 首尾一貫したプロンプトを表示して下さい。 500 台の PC を、スーパーコンピュータアレイにして使っているユーザーを想像してみてください。 自分でも BIOS のパラメータを変えたいしょう。 Expect が、そのパラメータを設定しやすいようにして下さい。

- Linux のユーティリティが動作することを保証して下さい。 Linux の `nvram` デバイスドライバが、 CMOS の内容をすべて返すかどうか確認して下さい。 そうすれば、大量のマシンで簡単に、同じ内容の CMOS 設定ができます。 と にあるコマンドが、 あるマシンから別のマシンへ、 BIOS の設定をコピーするように動作するはずです。 ここでいうマシンの型、モデル、および BIOS のバージョンは同一です。

  #### /dev/nvram を設定して、CMOS の設定にアクセスする

      bash# /dev/MAKEDEV nvram
      bash# vi /etc/modules.conf

      alias char-major-10-144 nvram

      bash# depmod -a

  #### CMOS の設定を得る

      bash# cat /dev/nvram > /etc/nvram.bin

  #### CMOS の内容を設定する

      bash# cat /etc/nvram.bin > /dev/nvram

- Linux から動かせる、フラッシュ BIOS のアップグレードプログラムを用意して下さい。 そしてそのソースコードが利用できるようにして下さい。 あるいは、仕様を公開して下さってもかまいません。 そうすれば、そういうプログラムは書けます。

  フラッシュ BIOS のアップデートプログラムは、 その多くがマイクロソフトの MS-DOS のブートディスクから起動します。 そのアップデートプログラムが、 同じような FreeDOS でも動作するかどうか、ぜひ調べて下さい。 Linux コンピュータの多くは、マイクロソフトのオペレーティングシステム ソフトウェアのライセンスを持っていません。 ですから、法律上は、 MS-DOS のブート ディスク作成が不可能です。

- BIOS が備えているシリアルサービスについて、 ドキュメントで明らかにして下さい。 ‘シリアルリダイレクション’ 機能を持っている BIOS の中には、 BIOS を普通のテキスト端末にリダイレクトできず、 その代わりに専用のプロトコルを使うようになっているものがあります。 でもこれでは、 Linux のシリアルコンソールユーザーには、ほとんど役に立ちません。

## この HOWTO について

### 著作権

本節の邦訳は参考です。正式なものは英文をお読み下さい。

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 .

本文書の初版の著作権は 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&hyphen;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 .

第二版についての本文書の改訂版の著作権は copyright © AARNet Pty Ltd (Australian Company Number 084 540 518), 2001&hyphen;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` にあるはずです。

#### 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 linux-howto@metalab.unc.edu.

どんなものであれ質問があれば、どうか linux-howto@metalab.unc.edu に連絡してもらいたい。

### 免責条項

本節の邦訳は参考です。正式なものは英文をお読み下さい。

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.

危険を伴うインストールを行なう場合は、事前にバックアップをとり、 かつ定期的にバックアップをとることを、読者には強く推奨する。

### 謝辞

この 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 Text-Terminal-HOWTO です。 の著者です。

Devin Reade

  Xyplex ターミナルサーバーの情報。Devin は で、 Xyplex ターミナルサーバーに関する情報の保守をしています。

Linux on Dell PowerEdge mailing list の Michael Brown, Marc Mondragon および 他のメンバー

  BIOS が文字をどうやってシリアルポートにリダイレクトするのかを、 技術的に説明してくれました。 Linux on Dell PowerEdge list は、 `subscribe linux-poweredge` という文を含む メッセージを、 linux-poweredge-request@dell.com に送れば購読できます。

Thomas Lunde と Gabor Kiss

  文法の誤りとタイプミスを指摘してくれました。

Darren Young

  Red Hat Linux のバージョン 7.2 用に、 `/etc/security/console.perms` を更新してくれました。

芳賀靖史

  この HOWTO を JF Linux documentation プロジェクト向けに、 日本語に翻訳するかたわら、沢山の間違いを指摘してくれました。

Thomas Horsley

  シリアルコンソールを使っていても、 X Window System は動かす必要があるかもしれないことを指摘してくれました。 で使用している、 `gdm` の設定をいただきました。

Greg Matthews, Nathan Neulinger および Romildo Wildgrube

  カーネルパラメータに `console=ttyS`…`r` を使うとマシンがハングしてしまったので、 そのことを報告してくれました。 これは最初に DSR と DCD がアサートされているかどうかを調べずに、 CTS を検査するループを行なっているという、 カーネルのバグによるものです。

Shaun Karl と Keisuke Nakao

  Debian GNU/Linux 用の手順をいただきました。

Igor Sviridov

  で使用している、 Livingstone Portmaster の設定をいただきました。

### コメントと訂正

この HOWTO を現在保守しているのは Glen Turner です。どうか訂正や追加、コメント、そして批評は glen.turner+howto@aarnet.edu.au に送って下さい。

この HOWTO を使って、 自分たちのマシンでシリアルコンソールがうまく設定できたという 電子メールを送ってくれた皆さんにも感謝します。 お使いの HOWTO のバージョン （表紙を参照して下さい）や、 Linux ディストリビューション名 とそのバージョン、対象マシン数は、 ぜひ明示して下さい。 その情報があれば、保守担当者は自分の雇主に、 この HOWTO に関わる作業を続けることで生まれる 充分な公共の利益を示すことができます。その情報は、他のどのような 目的にも使用しません。

Linux の改善は続いています。 ですから、ご自分の Linux ディストリビューションの最新バージョンに必要な、そういった小さな 部分的な変更点もどうか送って下さい。

この HOWTO の著者は著述を専門にしているわけではありません。 ですからもし理解し難い部分などが見つかったら、 そのときは保守している人に知らせてあげて下さい。

### 日本語版謝辞

校正にあたり、JF プロジェクトの皆様にご協力いただきました。 特に、以下の方々（順不同）には貴重なアドバイスをいただきました。 この場を借りて、御礼申し上げます。鈴木康弘さん、Akihiro KODAさん、 Seiji Kaneko さん、高橋聡さん、中野武雄さん、山下義之さん、 日下部陽一さん、小野間博さん、佐野武俊さん、山崎康宏さん。 もし、洩れがありましたらご連絡下さい。早急に対処いたします。

この文書は 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