Debian GNU/Linux 初心者の 足跡

このページは主として Debian GNU/Linux 3.1(sarge), GNOME2, kernel2.6 環境での試行錯誤記録です。リリース前の記録も含みます。

このページの更新予定はありません。4.0(etch) に関しては Debian 初心者の A2Z をご覧下さい。

なお、3.0(woody), 2.2(potato) 他に関しては、このページの旧版である woody 初心者の足跡Linux 初心者の足跡に、Windows 系・共通に関しては書斎にあります。


counter  (, since Sep 20 2004)
  Last modified: Fri Feb 24 15:26:45 JST 2006 , by mail_address

penguin Linuxとの出会いは48の時でした。Turbo Linux 3.0 をノートパソコン Contura Aero にインストール。初めてのことで X の立ち上げに苦労しました。やっとのことでグレー画面に×カーソルが出た時は感激しました。「会社のUNIXマシンと同じだ!」 しかし、Xは実用的ではありませんでした。なにしろ Aero は 486SX/33MHz にメインメモリわずか8MBでしたから。(Aug 1999)

その後、ノートパソコン Mebius に Turbo Linux 4.2。そして Vine Linux 1.1, 2.0, 2.1。Vine Linux のすぐ使える日本語環境やロゴが気に入り、ず~っと Vine でいこうと思っていました。

debian logo しかしあるとき、Debian GNU/Linux はパッケージ管理にすぐれていることを知り、試してみたくなりました。生涯(大袈裟)Vine Linuxと決めていた私は悩んだ末、Debian GNU/Linux 2.2 (potato) を選んだのです。(Nov 2000)

苦あれば楽ありです。一緒に Debian's World を楽しみましょう。


パソコンの環境はそれぞれ違いますので、新規インストールあるいはアップグレードの前に、日本のLinux情報インストールマニュアルリリースノート等をよく読むことをお勧めします。インストール前後や各種設定の FAQ は Debian GNU/Linux スレッドテンプレ、インストール後のお勉強にはDebianリファレンスなどが役に立ちます。

パソコンは最新機種ではなくちょっと古い機種がいいです。買い替えをきっかけに Debian を試してみる、というのはいいですね。パソコンが2台あるとネットワーク関連の理解度が深まります。ノート機よりはデスクトップ機の方が苦労が少なくてすみます。モニタの水平・垂直周波数なども、事前に調べておきましょう。

多くの方のパソコンにはすでに Windows がインストールされていると思います。Debian をインストールするパーティション(ハードディスクの領域)が必要です。そのためには、次のいずれかを選ぶことになります。


インストール

インストーラ

パソコンやネットワーク環境に応じて、インストーラを起動するデバイス(メディア)を変えます。

CD-ROM

CD-ROM から起動できるなら簡単です。必要とする CD はインターネットへの接続環境によって異なります。

インターネットに接続できないなら、フルイメージ(i386-binary-1.iso:約640MB)を何等かの方法で調達します。雑誌・書籍の付録 CD-ROM を入手するか、ミラーサイトからダウンロードし CD を焼いてもらいます。ダイアルアップ接続の場合もフルイメージの方がいいですね。

常時接続可能なら、インストールを行うための必要最小限のイメージ(基本システムを含む i386-netinst.iso:約110MB、あるいは、基本システムを含まない i386-businesscard.iso:約31MB)をミラーサイトからダウンロードし CD に焼きます。ほとんどのパッケージはネットワーク(インターネット)から取得することになります。

CD を焼くのが初めてのときは、出来上がってみたら拡張子が iso の大きな一つのファイルだった、ということのないように FAQ を確認しておきましょう。(また、testing イメージの場合は必ず CD-RW にしましょう。なぜ? バグ等のためにインストールに失敗したら、、)

フロッピーディスク

CD-ROM やハードディスクからの起動ができない場合は仕方がありません。フロッピーディスクからインストーラを起動し、ネットワークインストールあるいは CD-ROM からのインストールを行います。

ミラーサイトの /debian/dists/sarge/main/installer-i386/current/images/floppy/ から、boot.img(ブートカーネル)と root.img(RAMディスクファイルシステム)、net-drivers.img(PCMCIA, wireless を含むネットワークドライバ)あるいは cd-drivers.img(CDドライバ)等のフロッピーディスクイメージ をダウンロードします。

フロッピーディスクへのイメージ書き込みは、
Windows の場合には Rawrite/Rawrite3, NTRawrite 等のコマンド(イメージ書き込みツール)を使います。いずれかを別途用意してください。(DOS の copy コマンドは使えません。)
Linux の場合には dd if=xxxx.img of=/dev/fd0 bs=1024 conv=sync ; sync です。

ハードディスク

インストーラが CD-ROM ドライブを認識しない、フロッピーディスクドライブもない、DOS で立ち上げられない、など制約のある場合のインストールは大変です。ここでは、ブートローダに GRUB を使っている Linux システムがすでにあり、かつ、そのパーティション以外のパーティション(Windows 領域でもいいです)がある場合に、フロッピーディスク/CD-ROM を使わずに、すでにインストールされている Linux をそっくり sarge に入れ替えることとします。インターネットに接続できる(イーサネットカードがインストーラによって認識される)という前提ですが。

netboot 用の vmlinuz(linux, カーネルバイナリ)と initrd.gz(RAMディスクイメージ)をダウンロードし、ハードディスクの適当な場所(新システムをインストールするパーティションとは別のところ。例えば、/dev/hda7 の Windows FAT32 領域、D:\debian ディレクトリ)に置きます。isoイメージは不要です。

/boot/grub/menu.lst に次の内容(例)を追加してリブート、「New Debian Install」を選んでインストール開始、あとはいつもの通りです。(ramdisk_size の値をもっと大きくする必要があるかもしれません。)

title   New Debian Install
kernel  (hd0,6)/debian/vmlinuz root=/dev/ram ramdisk_size=12000 devfs=mount,dall
initrd  (hd0,6)/debian/initrd.gz

インストーラを起動するとブートプロンプト(Press F1 for help, or ENTER to boot:)が表示されます。sarge のカーネルはデフォルトでは 2.4.x となりますが、CD イメージの場合、ブートプロンプトで linux26 と入力すれば最初から 2.6.x をインストールできます。

パーティショニング

パーティショニングするディスク領域の「ディスク全体を消去する」は既存のパーティションを削除することになります。(この時点ではまだ削除されません。)

パーティショニング機構では、ハードディスクの容量がごく少ない場合を除き、「デスクトップマシン」を選び /, /home のパーティションを作成することをお薦めします。(何等かの理由によりシステムを再インストールせざるを得なくなった場合、パーティションが一つのときには /home のプライベートデータも消えることになります。) / の基本パーティション、/home, スワップ の論理パーティションが作成されます。また、「マルチユーザワークステーション」では、/ の基本パーティション、/home, /usr, /var, /tmp, スワップ の論理パーティションが作成されます。

「パーティショニングの終了/デバイスへの変更の書き込み」を行う前だったら、パーティショニングへの変更を元の状態に戻すことができます。

インストール途中の選択の例(⇒)とその場合のパーティション(候補)の例を以下に示します。

IDE1 マスタ  10.0GB
  1. 基本    2.8GB ext3   /
  5. 論理    355MB スワップ スワップ
  6. 論理    6.8GB ext3   /home

1つのディスクには、基本パーティション1~4個(IDE1 マスタなら hda1~4)及び拡張パーティション0~1個、基本と拡張を合わせて4個まで作成できます。論理パーティション(IDE1 マスタなら hda5~)は拡張パーティション内に作成することになります。論理パーティションは連続していなければなりません。「基本hda1-拡張hda2(論理hda5-論理hda6)-基本hda3」は可能ですが「基本hda1-論理hda5-基本hda3-論理hda6」は不可です。

パッケージインストール

Debian はインストールするパッケージを自分で決めなければなりません。インストール段階では必要最小限のパッケージに留めたいなら、インストールするソフトウェアの選択(Tasksel)で「手動でパッケージを選択」を選びます。aptitude が起動しますので、そのまますぐ終了(g キー押下)し、その後のインストールを続行して下さい。

タスク/パッケージを最小構成でインストールすると、インストール第1段階終了/リブート後、文字化けすることがあります。インストール時 $LANG=ja_JP.eucJP と設定されたにもかかわらず日本語環境がまだ整っていないためで、その場合には、とりあえず LANG=C と入力して文字化けから逃げてください。

システムインストールを終えた後、自分の好みのパッケージをインストールすることになりますが、何しろパッケージの数が多すぎて何を入れたらいいか最初わかりません。そこで tasksel。これでデスクトップ環境などのタスク(パッケージ群)を入れてみるのもいいでしょう。多くのパッケージをいとも簡単にインストールできます。

しかし、少し慣れてくると、自分が使わないパッケージも数多くインストールされているのに気がつきます。インストールはタスクで簡単だけれど、アンインストールは一つ、ひとつ、、大変です。ハードディスクの容量が少ない場合には、タスクをもう少し細分化できないだろうかと考えます。そこで aptitude

aptitude には大区分として、Upgradable, New, Installed, Not Installed 各 Packages があります。さらに中区分として、admin, base, ・・, web, x11、さらに小区分として、、細かく分類されています。今度は細かすぎてまたわからなくなってきた、そういうときは、aptitude のもう一つの大区分である Tasks。

tasksel は使わずに aptitude の Tasks である程度のパッケージをまとめてインストールし、必要に応じて一つひとつパッケージを選んでいく。これが Debian パッケージインストールのお勧め、ぜひともお試しください。もちろん、パッケージのアンインストール、アップグレードも aptitude で。

apt-get は Depends パッケージをインストールし Recommends や Suggests パッケージを無視しますが、aptitude は Recommends や Suggests パッケージもリストアップされ選択することができます。メニュー F10 -> Options -> Dependency handling を選択することにより、Recommends パッケージの標準の動作を変更できます。
 aptitude はフルスクリーンモードでは su の機能が組み込んであり、通常のユーザから起動した場合、root権限が必要となった時点でパスワードを聞かれます。
 aptitude でインストール、アップグレード等を行うと、その経過が /var/log/aptitude に全て記録されます。いったん aptitude を使い始めたら、他のパッケージインストール手段を用いずに aptitude を使い続けましょう。

パッケージの依存性
 Depends(依存):Aを使うためにはBを必要とする場合、AはBにDepends
 Recommends(推奨):Bにより供給される機能をAが持たず、ほとんどのユーザがAを欲しないと
          パッケージメンテナが判断した場合、AはBをRecommends
 Suggests(提案):Aの機能を強化するファイルがBに含まれている場合、AはBをSuggests(BがAをEnhances)
aptitude のキーコマンド(フルスクリーンモード)
(キーストローク) (アクション)
     F10             メニュー
     ?               キーストロークヘルプ
     u               パッケージアーカイブ情報更新
     +               アップグレード又は新規インストールとして選択
     -               削除として選択(設定はそのまま)
     _               purgeとして選択(設定も削除)
     =               holdとして選択
     U               アップグレード可能な全てのパッケージを選択
     g               選択したパッケージのダウンロード、インストール、削除等を実行
     q               変更点を保存して現在のスクリーンを終了
     Enter           パッケージの情報閲覧
     C               パッケージの変更履歴閲覧
     l               表示されたパッケージの制限を変更
     /               単語検索
     \               最後の検索を繰り返し

インストール後

デュアルブート / GRUB

sarge はデフォルトで MBR に GRUB をインストールします。(GRUB は LILO よりはるかに扱いやすいです。)

ある時は Windows を立ち上げ、あるときは Linux を立ち上げたい、という場合にはデュアルブートです。もし、Windows2000 など他の OS がインストール時に認識されていれば、/boot/grub/menu.lst の最後に次のような記述があります。

# This is a divider, added to separate the menu items below from the Debian ones.
title           Other Operating Systems:
root

# This entry automatically added by the Debian installer for a non-linux OS on /dev/hda1
title           Windows NT/2000/XP
root            (hd0,0)
savedefault
makeactive
chainloader     +1

X Resolution

1024x480 や 1280x800 などのサイズでは /etc/X11/XF86Config-4 の修正等が必要となります。

1024x480 (Vaio C1: ATI Rage Mobility-P/M)

XF86Config-4 は、Device Driver:ati、H:28-90, V:43-100、Modeline "1024x480" 65 1024 1032 1176 1344 480 488 494 563

コンソールで日本語を表示するにはモジュール vga16fb, fbcon が必要です。vga16fbを組み込むことによってコンソールでは最下行が見えなくなりますので、コンソールを常用するなら fbset をインストールし # fbset -yres 400

1280x800 (AOpen 1551: Intel 855GM)

855resolution をインストールします。

コマンド # 855resolution -l で表示されるモードの中から、今後使うことのないモード(例えば 5c)を選び、/etc/default/855resolution に記述します。例えば、MODE=5c XRESO=1280 YRESO=800 とします。

/etc/X11/XF86Config-4 の Section "Monitor" に Modeline "1280x800" 83.46 1280 1344 1480 1680 800 801 804 828 を記述追加します。(HorizSync, VertRefresh の記述はなくても構いません。) また、Section "Screen" / SubSection "Display" の Modes に "1280x800" を追加します。

# /etc/init.d/855resolution start で WXGA+ 1280x800 に。

Synaptics TouchPad

タッチパッドの拡張機能を使うために xfree86-driver-synaptics をインストールします。次に、/usr/share/doc/xfree86-driver-synaptics/README.Debian を参考に /etc/X11/XF86Config-4 に記述追加、修正します。

Section "InputDevice"
        Driver        "synaptics"
        Identifier    "Synaptics"
        Option        "Device"          "/dev/psaux"
        Option        "Protocol"        "auto-dev"
        Option        "LeftEdge"        "1700"
        Option        "RightEdge"       "5300"
        Option        "TopEdge"         "1700"
        Option        "BottomEdge"      "4200"
        Option        "FingerLow"       "25"
        Option        "FingerHigh"      "30"
        Option        "MaxTapTime"      "180"
        Option        "MaxTapMove"      "220"
        Option        "VertScrollDelta" "100"
        Option        "MinSpeed"        "0.06"
        Option        "MaxSpeed"        "0.12"
        Option        "AccelFactor"     "0.0010"
#       Option        "SHMConfig"       "on"
#       Option        "Repeater"        "/dev/ps2mouse"
EndSection

Section "ServerLayout"
        Identifier      "Default Layout"
        Screen          "Default Screen"
        InputDevice     "Generic Keyboard"
        InputDevice     "Synaptics"  "CorePointer"
#       InputDevice     "Configured Mouse"
        InputDevice     "Generic Mouse"
EndSection

(注)CorePointer は一つだけ。
  Section "ServerLayout" で "Configured Mouse" をコメントアウトしないで、
  Section "InputDevice" / "Configured Mouse" の Option "CorePointer" を "AlwaysCore" でもよい。

日本語

日本語表示と入力

タスク/パッケージを最小構成でインストールしたとき、インストール完了/リブート後、文字化けすることがあります。インストール時 $LANG=ja_JP.eucJP と設定されたにもかかわらず日本語環境がまだ整っていないためで、とりあえず LANG=C と入力して文字化けから逃げてください。

language-env パッケージをインストールし、一般ユーザでコマンド $ set-language-env を実行すると、ロケール ja_JP.eucJP の日本語環境を比較的容易に構築できます。

コンソールで日本語表示

非X、$LANG=C という環境において、コンソールで日本語を表示するには、

# modprobe vga16fb (マシンによっては vesafb かもしれません)
# modprobe fbcon  (kernel 2.6 では必要です)
$ jfbterm -q -c other,EUC-JP,iconv,UTF-8 (終了は exit )

その都度、上記コマンドを投入するのではなく、起動時にモジュールを読み込んでおいて必要時に $ jfbterm コマンドだけで済むようにするには、/etc/modules に vga16fb と fbcon を追加し、~/.bashrc にでも次のように書いておきます。

alias jfbterm='LANG=ja_JP.EUC-JP jfbterm -q -c other,EUC-JP,iconv,UTF-8'

vi で日本語入力

コンソール上で日本語を表示できるようになったら今度は vi で日本語入力。

canna サーバが動いている環境で jvim-canna (Japanized VIM canna version) を使います。設定は特に必要ありません。コマンドは jvim、Insertモードで Ctrl+\。

Emacs で日本語入力

vi で日本語を入力できるようになったら今度は emacs21-nox (without X support) で日本語入力。

Emacs を立ち上げたら、error: "Can't activate input method 'japanese-egg-canna'"
そこで Meta+x set-input-method(または Ctrl+x Enter Ctrl+\)と入力すると Select input method (default japanese):(入力待ち)となり、canna ではなく quail が使われているようでした。

ここで Tab を押すと input method の候補が出ます。canna を使う予定はないので、~/.emacs の (set-input-method 'japanese-egg-canna) を (set-input-method 'japanese) と修正し、Ctrl+\ で日本語入力が可能としました。

アンチエイリアス

アンチエイリアスが有効だと、文字サイズを大きくしてもギザギザがなくきれいに表示されます。しかし、文字サイズが小さくなるとぼやけた感じになり、かえって見にくくなります。ビットマップが埋め込まれたフォントなら、小さな文字はアンチエイリアスを無効とし埋め込みビットマップを使うようにすると、すっきり文字。

Sazanami フォントの 8~20ピクセル文字をアンチエイリアス無効とする例を示します。~/.fonts.conf を次のように記述します。

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <match target="font">
    <test qual="any" id="family" compare="eq">
      <string>Sazanami Gothic</string>
      <string>Sazanami Mincho</string>
    </test>
    <test id="pixelsize" compare="more_eq">
      <double>8</double>
    </test>
    <test id="pixelsize" compare="less_eq">
      <double>20</double>
    </test>
    <edit id="antialias" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
</fontconfig>

Anthy, SCIM

Emacs with anthy で日本語入力

Emacs で anthy を使います。

anthy-el をインストールし、~/.emacs は (set-input-method 'japanese-anthy) に変更、そして、日本語入力モードの on/off は Ctrl+\ で。
一時的に変更するだけなら、Meta+x set-input-method(または Ctrl+x Enter Ctrl+\)で japanese-anthy と入力してもいいです。

モード変更は、
  q:かな漢字変換/q:カタカナ固定 →→ l:半角英数固定/L:全角英数固定 →→ Ctrl+j:かな漢字変換

文節の伸縮は、Ctrl+o:文節を1文字長く、Ctrl+i:文節を1文字短く

単語登録

Emacs を起動しているなら、M-x anthy-add-word-interactive の後、登録する単語、その読みを入力、カテゴリー(一般名詞、その他名詞、形容詞、副詞)を選択、、と続けます。

あるいは、辞書管理ツール sumika をインストールし、sumika を起動します。そして、読み、単語を入力し、広義の品詞(動詞、名詞、形容詞、副詞、その他)、狭義の品詞を選択します。地名、人名の場合は、広義の品詞は その他 を選択し、狭義の品詞の中で 地名、人名 を選びます。

scim-m17n

m17n-env, scim, scim-m17n, libm17n-0, anthy, libanthy0, etc をインストールします。

ルートと一般ユーザからコマンド set-m17n-env を実行します。Activate ~/.xsession.d/* script snippets の設定では 30im-scim を選択します。そして、X を再起動。scim の設定はコマンド $ scim-setup です。

~/.xsession や ~/.gnomerc への記述を追加せずに、gdm で Default System Session, GNOME のどちらからでもログインできるようになります。

(メモ)

uim ~ uim-anthy ~ anthy
scim ~ scim-uim ~ uim ~ uim-anthy ~ anthy
scim ~ scim-anthy ~ anthy
scim ~ scim-m17n ~ anthy

サウンド、ビデオ

サウンド・ドライバ ALSA

カーネル2.6に取り込まれた alsa-driver(例えば /lib/modules/2.6.8-1-686/kernel/sound/pci/snd-intel8x0.ko)を使います。

現在使われているサウンドカード、ロードされているドライバ等を、コマンド $ lsmod$ cat /proc/asound/cards (modules) 等により確認します。OSS のドライバ(例えば i810_audio)がロードされていたら(rmmod を行い)、/etc/discover.conf に skip i810_audio の記述を追加し、起動時にロードされないようにしておきます。

alsa-base, alsa-utils をインストールします。# alsaconf を実行します。ミキサーで音量を調整します。これで音が出るようになるはずなんですが、、。

サウンドデバイスがないと言われたら # /usr/share/alsa-base/snddevices を実行。権限がないと言われたら audio, cdrom グループにユーザ名を追加。それでも音が出なかったら、PCのスピーカ端子の接続を確認するか、、諦める。

ミキサーにはいろいろあります。alsa-utils に入っている alsamixer、ALSA 専用の gamix、GNOME の gnome-alsamixer、KDE の kamix など。

alsa-base の設定(/etc/default/alsa)で alsactl_store_on_shutdown="always autosave" となっていれば、現在の音量設定がリブート後も自動で保持されます。(音量設定の保存(読込)のためにその都度、コマンド $ alsactl store (restore) を実行する必要はありません。)

GNOMEメインメニュー/アプリケーション/デスクトップの設定/サウンド/全般 の設定で、「起動時にサウンドサーバを有効にする(イベントに対して効果音を鳴らす)」ようになっていると、リブート後 ALSA による音が出なくなりますのでチェックを外しておいてください。(再度 # alsaconf を実行してもいいですけど)

MP3

CD 音声データを WAV フォーマットへ変換するリッパーとして grip(CDプレイヤーであり、リッパーであり、エンコーダでもある)、WAV ファイルを MP3 フォーマットへ変換するエンコーダとして lame、MP3 ファイルを再生するプレーヤとして xmms をインストールします。

lame は /etc/apt/sources.list に次行を追加してインストールします。

deb ftp://ftp.nerim.net/debian-marillat/ sarge main

他に、リッパーとして CDDA2WAV, Cdparanoia など、エンコーダとして Blade's MP3 Encoder, 午後のこ~だ など、プレーヤとして AlsaPlayer, mpg123 などがあります。

DVD 観賞 xine

DVD 観賞のために libxine1, totem-xine, etc をインストールします。

市販の DVD をセットすると Totem (Movie Player) が立ち上がります。しかし、映像、音声は出ません。

An error occured
The source seems encrypted, and can't be read. Are you trying to play an encrypted DVD without libdvdcss?

/etc/apt/sources.list に次行を追加し、libdvdcss2 をインストールします。

deb ftp://ftp.nerim.net/debian-marillat/ sarge main

映像が出るようになりました。それでは DVD 観賞をお楽しみ下さい。

ネットワーク

無線LAN

WLI-PCM-L11G(P)

この PCMCIA 無線 LAN カードはインストール段階で認識され、インストール終了後も改めて設定することなしに使えます。ネットワーク設定のトリガに hotplug を用い、ESSID や WEP は /etc/network/interfaces で設定しています。モジュールは orinoco_cs です。

# The loopback network interface
auto lo
iface lo inet loopback

# Hotpluggable network interfaces
mapping hotplug
        script grep
        map eth0

# The primary network interface
iface eth0 inet dhcp
        wireless-mode managed        (=アクセスポイントモード)
        wireless-essid network_name  (適正なネットワークの名前)
        wireless-key s:password      (WEPkey 13文字)
   (注)インストール時の記述は wireless-xxx でしたが、 wireless_xxx でもOKです。

/etc/network/interfaces を変更したら # /etc/init.d/networking restart を実行します。

システムをブートする前にPCMCIA無線LANカードを挿入するときは、ネットワークを使用するサービスが開始される前にそのカードが設定されていなければなりません。cardmgr がフォアグラウンドで設定を行うように /etc/default/pcmcia で CARDMGR_OPTS="-f" と設定し、/etc/rc?.d/S20pcmcia を /etc/rc?.d/S12pcmcia などとリネームしておきます。

参考:コマンド $ cardctl ident により、product info は WLI-PCM-L11G が "BUFFALO", "WLI-PCM-L11G", "Version 01.01", ""、WLI-PCM-L11GP が "MELCO", "WLI-PCM-L11", "Version 01.01", "" として、また、manfid は共に 0x0156, 0x0002 として認識されていることがわかります。

LD-WL11/PCI3

ndiswrapper-0.11-1 をインストールして Windows XP のドライバを使うことにします。

ndiswrapper-source, ndiswrapper-utils, wireless-tools をインストールします。

適当なディレクトリで ndiswrapper のソースを展開します。

# tar jxCvf /usr/src /usr/src/ndiswrapper-source.tar.bz2

カーネルソースのディレクトリに移動します。

$ cd /usr/src/linux-2.6.y

モジュールイメージのパッケージを作成します。

# make-kpkg modules_image

親ディレクトリにできたモジュールパッケージをインストールします。

# dpkg -i ../ndiswrapper-modules-2.6.8_0.11-1+10.00.Custom_i386.deb

なお、module-assistant, kernel-headers-2.6.8-1-686 をインストールすると、次のコマンドにより /usr/src ディレクトリに ndiswrapper-modules-2.6.8-1-686_0.11-1+2.6.8-10_i386.deb が作成され、ndiswrapper モジュールのインストールまで行ってくれます。

# module-assistant auto-install ndiswrapper

この枠内は、ndiswrapper-source, ndiswrapper-utils が パッケージ化(Ver 0.11-1, Dec 2004)される前(apt-get インストールできなかったとき)の手順です。

ndiswrapper-0.11 をインストールして Windows XP のドライバを使うことにします。カーネルは2.6.8です。(カーネルは2.6.0または2.4.20以上、カーネルソースも必要です。また、そのソースでビルドしたことのある環境でないと、以下の方法ではndiswrapperモジュール作成に失敗します、多分。)wireless-toos もインストールしておきます。

modulesディレクトリからカーネルソースのディレクトリにリンクを張ります。

# ln -s /usr/src/linux-2.6.8 /lib/modules/2.6.8-1-686/build

NdisWrapper のサイトから ndiswrapper-0.11.tar.gz をダウンロードし、適当なディレクトリに置き解凍、ndiswrapper-0.11ディレクトリへ移動します。

$ tar zxvf ndiswrapper-0.11.tar.gz ; cd ndiswrapper-0.11

一般的なインストール方法は INSTALL に書いてありますが、ここでは次の手順で行います。(dh_testdir コマンドが見つからないといわれたら、debhelper をインストールします。)

# debian/rules binary-modules (ndiswrapper-modules_0.11-2.6.8-1-686_i386.deb を作成)
# debian/rules binary-utils  (ndiswrapper-utils_0.11_i386.deb を作成)
# dpkg -i ../ndiswrapper-*.deb

無線 LAN カードを確認しておきます。

$ lspci  → 0000:01:05.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8180L 802.11b MAC (rev 20)
$ lspci -n  → 0000:01:05.0 0200: 10ec:8180 (rev 20)

REALTEK のサイトから Windows XP 用の RTL8180L ドライバ ndis5x-8180(173).zip をダウンロードし、適当なディレクトリに置いて解凍、INF ファイルをインストールします。

# unzip "ndis5x-8180(173).zip" ; ndiswrapper -i ./net8180.inf

(最初、製品付属CD-ROMの wl11cb (Elecom, 05/23/2003, 5.140.0523.2003) ドライバ(WL11/CB, WL11/PCI3 共通)を使いました。しかしそのドライバでは、ndiswrapper をロードするとキーボードからの入力動作がおかしくなり、また、アクセスポイントが SSID ブロードキャスト無効/Any接続拒否/ステルスモード だと iwconfig による設定ができませんでした。)

必要なファイルが /etc/ndiswrapper/net8180 ディレクトリにコピーされ config ファイルが作成されます。インストールされたドライバの状態を確認します。

# ndiswrapper -l

ndiswrapper モジュールをロードします。

# modprobe ndiswrapper

システムログを dmesg 等により確認します。

ndiswrapper version 0.11 loaded
wlan0: ndiswrapper ethernet device xx:xx:xx:xx:xx:xx using driver net8180
ndiswrapper: driver net8180 (Realtek, 10/07/2004, 5.173.1007.2004) added

アクセスポイントを探します。

# iwlist wlan0 scan (net8180 ドライバの場合、SSID をブロードキャストしていない相手でもOKでした。)

パラメータを設定し、wlan0を使えるようにします。(/etc/network/interfaces での設定は WLI-PCM-L11G(P) の項を参照)

# iwconfig wlan0 mode Managed
# iwconfig wlan0 key restricted s:password
# iwconfig wlan0 essid network_name
# dhclient wlan0 (DHCP接続です)

動作良好を確認したら、自動で ndiswrapper をロードできるようにします。

# ndiswrapper -m (/etc/modprobe.d/ndiswrapper が作成されます)

2200BG

module-assistant, kernel-headers-2.6.x-y-686 をインストールしておきます。

module-assistant コマンドにより、ドライバのソース ipw2200-source のインストール、/usr/src/ に置かれた ipw2200-source.tar.gz の展開、モジュールの作成、インストールを行います。

# module-assistant auto-install ipw2200

/usr/src/modules/ipw2200/debian/README.firmware(または /usr/share/doc/ipw2200-modules-2.6.x-y-686/README.firmware)に書いてあるとおり、2200BG 用のファームウエア ipw2200-fw-2.?.tgz(ドライバのバージョンに合ったもの※)を http://ipw2200.sourceforge.net/firmware.php からダウンロードします。解凍すると ipw-2.?-*.fw のファイルができますので、それらを /lib/firmware, /usr/local/lib/firmware, /usr/lib/hotplug/firmware のいずれかにコピーします。

※ ドライバのバージョンが1.0.3の場合はファームウェア2.2が必要です。また、ドライバのバージョンが1.0.4〜1.0.6, 1.0.7以降の場合はそれぞれファームウェア2.3, 2.4となり、モジュール ieee80211 も必要となります。ipw2200-source と同様に、事前に ieee80211-source をインストールし、モジュールの作成・インストールを行っておいてください。

(AOpen 1551-AG1 の場合)Mini-PCI 無線LAN Intel PRO/Wireless 2200BG は sarge インストール時には認識されないため、最初 PCMCIA 無線LAN WLI-PCM-L11GP を使用。WLI-PCM-L11GP は eth1 として認識されるが、途中のリブート後から eth2 として認識されるため、/etc/network/interfaces を書き換えてインストールを続行。インストール完了後 2200BG は eth0 として認識される。

ネットワーク設定切換え

コマンドによる切換え

異なる LAN 環境下でのネットワーク設定を切換えできるようにします。自宅(my_home)では固定アドレスで設定、外出先(ur_home)では DHCP による設定とします。設定ファイルは /etc/network/interfaces です。

iface ur_home inet dhcp
iface my_home inet static
        address 192.168.xx.y
        masknet 255.255.255.0
        gateway 192.168.xx.z

自宅でネットワーク設定を行うときのコマンドは # ifup eth0=my_home
外出先では # ifdown eth0 ; ifup eth0=ur_home
(eth0 は物理インターフェース、my_home, ur_home は適当な名前の論理インターフェース)

MAC による自動切換え

ブート時や PCMCIA LAN カードを挿入したときのネットワーク設定のトリガとして hotplug を用い、使用するカードの MAC によって無線/有線のネットワーク設定を適切に行うようにします。(/etc/pcmcia/network の設定は使いません。)

MAC に基づいて論理インターフェースを選択するマッピングスクリプトを、適当なディレクトリ(たとえば /usr/local/sbin/)にインストールします。

# install -m770 /usr/share/doc/ifupdown/examples/get-mac-address.sh /usr/local/sbin/

/etc/network/interfaces の記述は次のとおりです。

mapping hotplug
        script echo
mapping eth?
        script /usr/local/sbin/get-mac-address.sh
        map xx:xx:xx:xx:xx:xx wireless(MACと適当な論理インターフェース名)
        map yy:yy:yy:yy:yy:yy wired
iface wireless inet dhcp
        …                      ←(無線使用時の設定)
iface wired inet static
        …                      ←(有線使用時の設定)

ゲートウェイルータ

            Internet
               |
          -----------
         | ADSL Modem|
          -----------
          eth0 | xxx.xxx.xx.x(グローバルIPアドレス)
            ======= 
           | PC- 1 |
            =======
          eth1 | 192.168.0.1
               |
      +--------+--------+(ローカルネットワーク)
      |                 |                          (プライベートIPアドレス)
      | 192.168.0.2     | 192.168.0.x(DHCP)         クラスA 10.0.0.0~10.255.255.255
   -------           -------                        クラスB 172.16.0.0~172.31.255.255
  | PC- 2 |         | PC- 3 |                       クラスC 192.168.0.0~192.168.255.255
   -------           -------

PC-1 をゲートウェイルータにするにはネットワークカードが2枚必要となります。1枚目はインストール時に認識されすでに /etc/network/interfaces に記述があると思いますので、2枚目について記述追加します。ネットワーク環境に応じて、static, dhcp, address, gateway 等、さらには、/etc/hosts などの設定変更を行います。

eth0/1 の番号は認識された順に振られますので、その時の使用環境によっては設定が入れ替わることがあります。新たに追加したカードがインストール時に設定したカードよりも常に先に認識されるようであれば、0と1を入れ替える必要があります。

IP forward を有効にします。

# echo 1 > /proc/sys/net/ipv4/ip_forward

IP forward を常に有効にするなら /etc/network/options の ip_forward=no を yes に変更。設定変更を有効にするには

# /etc/init.d/networking restart

マスカレード

ローカルネットワークからグローバルIPアドレスのネットワークインタフェースを通って外(インターネット)に出て行くとき、ローカルネットワークのプライベートIPアドレスをグローバルIPアドレスに書き換えます。

マスカレードの設定例
(動的割当グローバルIPアドレス/ダイアルアップの場合)

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

(固定グローバルIPアドレスの場合)

# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to xxx.xxx.xx.x
# iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to xxx.xxx.xx.x:1-1023

設定の削除は -A オプションに代えて -D オプションを使い、設定追加したときと同じようにコマンド入力します。

# iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

設定した nat テーブルのルールを確認します。(インストール後、何も設定していなければ、ポリシーは PREROUTING, POSTROUTING, OUTPUT いずれも ACCEPT です。)

# iptables -t nat -L -n

起動時にマスカレードを自動的に設定するなら、例えば /etc/network/interfaces に記述してもいいです。

auto eth0
iface eth0 inet dhcp
    pre-up echo 1 > /proc/sys/net/ipv4/ip_forward
    pre-up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

インターネットに直接接続されるPC-1では、Netfilter(パケットフィルタリング)の設定は必須です。

セキュリティ

Netfilter(パケットフィルタリング)

パケットフィルタリング

グローバルIPアドレスのネットワークインタフェースを通ってインターネットからローカルネットワークへ入って来るパケットに対して、通す/通さない等のフィルタ操作を iptables により行います。

テーブルと組込み済みチェイン
 filter(パケットフィルタ、-t オプションなしの場合のデフォルトテーブル)
INPUT(ローカルマシンに入ってくるパケットに対するチェイン)
FORWARD(ローカルマシンで転送されるパケットに対するチェイン)
OUTPUT(ローカルマシンから出て行くパケットに対するチェイン)
 nat(パケット変換)
PREROUTING(パケットが入ってきたときにそのパケットを変換するためのチェイン)
OUTPUT(ローカルマシンから出て行くパケットをルーティングの前に変換するためのチェイン)
POSTROUTING(パケットが出て行くときに変換するためのチェイン)
 mangle(特別なパケット変換)
全ての組込み済みチェインが利用可能
基本的なターゲット(マッチしたパケットに対してどうするかを指定)
ACCEPT(パケットを通す)
DROP(パケットを捨てる)
QUEUE(kernel がサポートしている場合、パケットをユーザ空間に渡す)
RETURN(このチェインの検査を中止して、呼出し元チェイン内の次のルールから検査を再開する)
拡張された主なターゲット
LOG(kernel ログに記録)
REJECT(エラーパケットを送信し、そのパケットを捨てる)
SNAT(nat テーブルの POSTROUTING チェインのみで有効、パケットの送信元アドレスを変換する)
MASQUERADE(nat テーブルの POSTROUTING チェインのみで有効、動的割当IP/ダイヤルアップ接続用)
    ⇒ PREROUTING → (ROUTINGの決定) → FORWARD → POSTROUTING ⇒
                      ↓                         ↑
                     INPUT                    OUTPUT
                      ↓                         ↑
                        ──→(ローカルプロセス) ──→

設定例(PPP)

[Insert connection-tracking modules (not needed if built into kernel)]
# insmod ip_conntrack
# insmod ip_conntrack_ftp

[Create chain which blocks new connections, except if coming from inside]
# iptables -N block
# iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A block -m state --state NEW -i ! ppp0 -j ACCEPT
# iptables -A block -j DROP

[Jump to that chain from INPUT and FORWARD chains]
# iptables -A INPUT -j block
# iptables -A FORWARD -j block

設定例(eth0, eth1)

                               Internet:eth0  LAN:eth1

                              (Chain:Policy)
            ┃                 INPUT:DROP(*1,4:ACCEPT, *2:DROP)                 ↑
            ↓                 FORWARD:DROP(*1,4:ACCEPT, *2,3:DROP)             ┃
       ============            OUPUT:ACCEPT(*3:DROP)                      ==============
        PREROUTING                                                          POSTROUTING  
       ============                                                       ==============
            ┃                                                    ↑
         (ROUTING)━━━━━━━━━━━━━┓                                  ┃
            ┃                              ↓     FORWARD                      ┃
            ┃                  ===========================                     ┃
            ┃          (i:eth0)┏━━━━←┫                                  ┃
       INPUT↓                  ┃          ┣→━━━━┓(o:eth0)              ┃
        ========= (i:eth0)      ┃          ┣←━┓    ┃            (i:eth1)*4┃
(i:eth1,lo) ┣→━━━━┓      ┃          ┣→━┃━━┃━━━━━━━━━━→┫
    *4┏━←┫          ┃     =┃================┃====┃=                     ┃
      ┃ ========       ┃      ┃          ↓    ↑    ↓                      ┃
      ┃    ↓          ↓      ↓          ┃    ┃    ┃                      ┃
      ┃    ┃         -- eth0-in --        ┃    ┃    ┃                      ┃
      ┣←━┃━━━━←┫      ┣→━━━━┃━━┃━━┃━━━━━━━━━━→┫
      ┃    ┃       *1 ┗→┳←┛ *1       ┃    ┃    ┃          ┏━━┓    ┃
      ┃    ┃         ---  ┃  ----        ┃    ┃    ↓          ↑    ┃    ┃
      ┃    ┃              ┃              ┃    ┃   --- eth0-out ---   ┃    ┃
      ┃    ┃              ┃              ┃    ┃    ┣→━┳━←┫    ┃    ↑Policy
      ┃    ┃              ┃              ┃    ┃   ----   ┃   ----   ┃ ==========
      ┃    ┃              ┃              ┃    ┃    ↓    ┃    ↑    ┗━→┫
      ┃    ↓Policy        ↓*2      Policy↓    ┗━━┛    ↓*3  ┗━━━━←┫
      ┃   ------------------------------------------------------   (o:eth0) ==========
      ┃                        log / drop                                      ↑OUTPUT
      ┃   ------------------------------------------------------               ┃
      ↓                                                                        ↑
     ------------------------------------------------------------------------------
                               LOCAL PROCESS
     ------------------------------------------------------------------------------

パケットフィルタリングのルールを確認します。

# iptables -L -n

ルールをクリアします(テーブル内の全てのチェインの内容を消去します。リモート端末からアクセスしている場合には、ポリシーの設定によっては通信できなくなるので注意)。

# iptables -F

以下、ルールを設定していきます。設定した順番にパケットを検査していきますので、ルール設定の順番は重要です。

接続/通信開始前

ftp 接続追跡 (connection tracking)に必要なモジュールをロードします。

# modprobe ip_conntrack_ftp
# modprobe ip_nat_ftp

どのルールにも合致しないときのパケットをどうするか、ポリシーを決定します。

# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT

logdrop というユーザ定義チェインを作ります。

# iptables -N logdrop
# iptables -A logdrop -j LOG  --log-prefix "[Dropped] "
# iptables -A logdrop -j DROP

eth0-in, eth0-out というユーザ定義チェインを作ります。

# iptables -N eth0-in
# iptables -N eth0-out

eth0 インタフェース経由のものは eth0-in または eth-out チェインへジャンプさせます。

# iptables -A INPUT -i eth0 -j eth0-in
# iptables -A FORWARD -i eth0 -j eth0-in
# iptables -A FORWARD -o eth0 -j eth0-out
# iptables -A OUTPUT -o eth0 -j eth0-out
*1 in:eth0 INPUT/FORWARD の ACCEPT を明示

Webサーバ(192.168.0.x)へのアクセスを許可します。

# iptables -A eth0-in -p tcp --dport 80 -d 192.168.0.x -j ACCEPT

Webサーバへの ping(echo request:8) は許可します。

# iptables -A eth0-in -p icmp --icmp-type 8 -d 192.168.0.x -j ACCEPT

ssh は特定のホストからのみ許可します。

# iptables -A eth0-in -p tcp -s xxx.xxx.xx.x --dport 22 -j ACCEPT

すでに双方向にパケットがやり取りされた接続、及び、既存の接続に関係しているものは許可します。

# iptables -A eth0-in -m state --state ESTABLISHED,RELATED -j ACCEPT
*2 in:eth0 INPUT/FORWARD の ACCEPT 明示以外を LOG/DROP

eth0-in チェインを通るその他のパケットはログの記録をとり破棄します。

# iptables -A eth0-in -j logdrop
*3 out:eth0 FORWARD/OUTPUT の LOG/DROP を明示

eth0 から出て行くもののうち、ポート135,137-139,445宛は破棄、プライベートアドレス宛はログの記録をとり破棄します。

# iptables -A eth0-out -p udp --dport 135 -j DROP
# iptables -A eth0-out -p tcp --dport 135 -j DROP
# iptables -A eth0-out -p udp --dport 137:139 -j DROP
# iptables -A eth0-out -p tcp --dport 137:139 -j DROP
# iptables -A eth0-out -p udp --dport 445 -j DROP
# iptables -A eth0-out -p tcp --dport 445 -j DROP
# iptables -A eth0-out -d 10.0.0.0/8 -j logdrop
# iptables -A eth0-out -d 172.16.0.0/12 -j logdrop
# iptables -A eth0-out -d 192.168.0.0/16 -j logdrop
*4 in:eth1/lo INPUT, in:eth1 FORWARD の ACCEPT を明示

eth1 インタフェース及び lo インタフェースからのものは許可します。

# iptables -A INPUT -i eth1 -j ACCEPT
# iptables -A FORWARD -i eth1 -j ACCEPT
# iptables -A INPUT -i lo -j ACCEPT

意図するようにパケットフィルタリングのルールが設定できたかどうか確認します。

# iptables -L -n -v --line-numbers
切断/通信終了後

eth0-in, eth0-out, lof_drop チェイン内の全てのルールを消去します。

# iptables -F eth0-in
# iptables -F eth0-out
# iptables -F logdrop

組込み済みチェイン内の全てのルールを消去します。

# iptables -F INPUT
# iptables -F OUTPUT
# iptables -F FORWARD

eth-in, eth0-out, lof_drop チェインを削除します。

# iptables -X eth0-in
# iptables -X eth0-out
# iptables -X logdrop

ポリシーを元に戻します。

# iptables -P INPUT ACCEPT
# iptables -P FORWARD ACCEPT

パケットフィルタリングのルールがデフォルトに戻ったことを確認します。

# iptables -L -n

設定の確認がすべて終了したら、マスカレードの設定も含めて、起動時に自動設定されるようにします。

iptables/README.Debian によると、netfilter/iptables を設定したりそれを機能させるには、ifupdown による他、いくつか方法があるようです。

何もない状態から複雑なルールを設定していく場合、後々のルール修正変更を考えると、iptables コマンドで一つ一つ設定していくよりはスクリプトを書いて実行した方が利便性がいいです。一方、システム起動時には、スクリプトで iptables コマンドを一つ一つ実行しその都度ルールを追加するよりは、iptables-restore コマンドで専用フォーマットのルールをテーブル単位で読み込み設定する方が速くてスマートです。しかし残念ながら、iptables コマンドそのものはスクリプトを扱えません。そこで、スクリプトに iptables-restore コマンドやその他の設定コマンドを書き、そのスクリプトを実行するように /etc/network/interfaces へ記述する、これがいいですね。

ipmasq

ipmasq をインストールすることにより、マスカレードやフィルタの設定が簡単に行えます。設定は次のようになりました。(項目は一部省略) ルール設定のファイルは /etc/ipmasq/rules/ にあります。カスタマイズは、、ドキュメント /usr/share/doc/ipmasq/ipmasq.html/index.html 等をよく読みましょう、、。

# iptables -t nat -L -v
Chain PREROUTING (policy ACCEPT)
target     prot opt in     out     source          destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt in     out     source          destination
MASQUERADE  all  --  any    eth0   localnet/24     anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt in     out     source          destination
# iptables -t filter -L -v
Chain INPUT (policy DROP)
target     prot opt in     out     source          destination
ACCEPT     all  --  lo     any     anywhere        anywhere            
LOG        all  --  !lo    any     localnet/8      anywhere         LOG level warning
DROP       all  --  !lo    any     localnet/8      anywhere
ACCEPT     all  --  eth1   any     anywhere        255.255.255.255
ACCEPT     all  --  eth1   any     localnet/24     anywhere
ACCEPT    !tcp  --  eth1   any     anywhere        BASE-ADDRESS.MCAST.NET/4
LOG        all  --  eth0   any     localnet/24     anywhere         LOG level warning
DROP       all  --  eth0   any     localnet/24     anywhere
ACCEPT     all  --  eth0   any     anywhere        255.255.255.255
ACCEPT     all  --  eth0   any     anywhere        myname.mynet
ACCEPT     all  --  eth0   any     anywhere        xxx.xxx.xx.255
LOG        all  --  any    any     anywhere        anywhere         LOG level warning
DROP       all  --  any    any     anywhere        anywhere

Chain FORWARD (policy DROP)
target     prot opt in     out     source          destination
ACCEPT     all  --  eth1   eth0    localnet/24     anywhere
ACCEPT     all  --  any    any     anywhere        anywhere         state RELATED,ESTABLISHED
LOG        all  --  any    eth0    anywhere        localnet/24      LOG level warning
DROP       all  --  any    eth0    anywhere        localnet/24
LOG        all  --  any    any     anywhere        anywhere         LOG level warning
DROP       all  --  any    any     anywhere        anywhere

Chain OUTPUT (policy DROP)
target     prot opt in     out     source          destination
ACCEPT     all  --  any    lo      anywhere        anywhere
ACCEPT     all  --  any    eth1    anywhere        255.255.255.255
ACCEPT     all  --  any    eth1    anywhere        localnet/24
ACCEPT    !tcp  --  any    eth1    anywhere        BASE-ADDRESS.MCAST.NET/4
LOG        all  --  any    eth0    anywhere        localnet/24      LOG level warning
DROP       all  --  any    eth0    anywhere        localnet/24
ACCEPT     all  --  any    eth0    anywhere        255.255.255.255
ACCEPT     all  --  any    eth0    myname.mynet    anywhere
ACCEPT     all  --  any    eth0    xxx.xxx.xx.255  anywhere
LOG        all  --  any    any     anywhere        anywhere         LOG level warning
DROP       all  --  any    any     anywhere        anywhere

(-n オプション付きの場合)
 eth0:myname.mynet=>xxx.xxx.xx.xx, eth1:localnet/24=>192.168.0.0/24, lo:localnet/8=>127.0.0.0/8),
 LOG level warning=>LOG flags 0 level 4, BASE-ADDRESS.MCAST.NET/4=>224.0.0.0/4

TCP wrapper, xinetd

/etc/hosts.deny, /etc/hosts.allow 及び /etc/inetd.conf を設定し、セキュリティデーモン tcpd(TCP wrapper)+ inetd により TCP を使ったサービスヘのアクセス制御をかけます。(デフォルトでは、全てのホストからのアクセスを受け入れるようになっています。)

まず最初に、/etc/hosts.deny を次のように記述し、全てのホストからのアクセスを拒否します。

ALL: ALL

次に、/etc/hosts.allow にアクセスを許可するホスト名を(デーモンごとに)記述した後、適切に設定できたかコマンド $ tcpdchk で確認します。(デーモン portmap のように、"ALL" または IPアドレスしか認識せず、ホスト名を使えないものがあります。)

ALL: LOCAL @some_netgroup 192.168.0.
(あるいは)
ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
(あるいはデーモンごとに)
smbd: LOCAL .foo.ne.jp 192.168.0.
nmbd: LOCAL .foo.ne.jp 192.168.0.

アクセス制御を確認するには、(daemon:デーモンプロセス名、client:クライアントのホスト名、あるいはIPアドレス)

$ tcpdmatch daemon[@server] [user@]client

TCP wrapper によって拒否されたホスト名は、/var/log/daemon.log 及び /var/log/syslog に記録されます。

xinetd

inetd を機能拡張したインターネットサービスデーモン xinetd を試してみます。

xinetd をインストールしたところ、/etc/init.d/inetd has been diverted to /etc/init.d/inetd.real。inetd は起動しないように設定されました。また、/etc/xinetd.d/ には内部サービス chargen, daytime, echo, time の設定ファイル(いずれも disable = yes)が作成されました。しかし、swat(インストール後 /etc/inetd.conf の起動エントリのコメントを外すことにより起動できていた)については自動作成されませんでした。当然 swat は使えなくなります。You will have to convert (swat line of) /etc/inetd.conf into /etc/xinetd.conf format, and add it manually. だそうです。
(/etc/inetd.conf の swat の行は次の通りです。)

#<service_name><sock_type><proto><flags>        <user>  <server_path>   <args>
swat            stream  tcp     nowait.400      root    /usr/sbin/tcpd  /usr/sbin/swat

/etc/xinetd.conf は次のように空っぽでした。

# Simple configuration file for xinetd
# Some defaults, and include /etc/xinetd.d/
defaults
{

}
includedir /etc/xinetd.d

man xinetd.conf によると xinetd の設定ファイルのサンプルは、

defaults
{
   log_type        = FILE /var/log/servicelog  :ログ出力、SYSLOG, FILE
   log_on_success  = PID                         :起動/終了時のログ項目、PID,HOST,USERID,EXIT,DURATION
   log_on_failure  = HOST                        :起動失敗時のログ項目、HOST,USERID,ATTEMPT
   only_from       = 128.138.193.0 128.138.204.0 :アクセス可能なリモートホスト
   only_from       = 128.138.252.1               
   instances       = 10                          :同時動作可能なサービス数、デフォルト無制限 UNLIMITED
   disabled        = rstatd                      :使用不可にするサービス
}

service ftp
{
   socket_type     = stream                      :ソケットの種類、stream,dgram,raw,seqpacket
   wait            = no                          :シングルスレッド yes、マルチスレッド no
   nice            = 10                          :プロセス優先度、最高 -20~最低 19
   user            = root                        :サービスを実行するユーザ名
   server          = /usr/etc/in.ftpd            :起動するサービスの絶対パス
   server_args     = -l                          :サーバに渡す引き数、-l, -a
   instances       = 4
   log_on_success  += DURATION HOST USERID
   access_times    = 2:00-9:00 12:00-24:00       :アクセス可能な時間帯
}

  +=:デフォルトの設定に追加、-=:デフォルトの設定から削除
 属性をすべて指定する必要はない。必要な属性は、
      socket_type, user(内部サービス以外), server(内部サービス以外), wait, 
      protocol(RPC サービスと /etc/services リストにない(UNLISTED)サービスのみ), 
      rpc_version(RPC サービスのみ), rpc_number(/etc/services リストにない RPC サービスのみ),
      port(/etc/services リストにない RPC 以外のサービスのみ)

/usr/share/doc/xinetd/README.Debian には次のように書いてあります。

xinetd features an inetd.conf compatibility mode. When started with the
  -inetd_compat option, xinetd first reads its own configuration file
  (/etc/xinetd.conf), then /etc/inetd.conf.
If you need to run both netkit-inetd and xinetd, with different service
  definitions, you can :
  * Remove -inetd_compat from /etc/default/xinetd so that xinetd doesn't read
    inetd.conf anymore.

これの逆をいけばいいのでしょうか。/etc/default/xinetd に -inetd_compat オプションを書き加えてみました。swat が起動できるようになりました。

しかしこれでは、xinetd(= TCPwrapper(tcpd) + inetd +α)を生かすことはできません。やはり、/etc/xinetd.conf 及び /etc/xinetd.d/ 配下にサービスごとの設定ファイルを作成しましょう。

SSH

SSH プロトコルバージョン2の DSA (RSA) 公開鍵認証を行います。

ローカルホストで公開鍵及び秘密鍵を作成します。

$ ssh-keygen -t dsa (RSA 鍵の場合は ssh-keygen -t rsa)
Generating public/private dsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_dsa): (このまま Return)
Enter passphrase (empty for no passphrase): (当然ながら、ログインパスワードとは異なるものに!)
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_dsa.
Your public key has been saved in /home/user/.ssh/id_dsa.pub.
The key fingerprint is:
4f:e4:c5:f3:59:a5:fd:c7:f8:40:9f:96:e5:06:ff:22 user@foobar

~/.ssh ディレクトリに、DSA 認証のための id_dsa(秘密鍵)と id_dsa.pub(公開鍵)(RSA 認証なら id_rsa, id_rsa.pub)が作成されます。このローカルホストで作成した公開鍵を、リモートホスト(ログインしたいサーバ)の ~/.ssh/authorized_keys に(新規/追加)保存します。

$ cat id_dsa.pub >> authorized_keys

/etc/ssh/sshd_config の RSAAuthentication, PubkeyAuthentication が yes であることを確認します。これで、公開鍵と秘密鍵及びパスフレーズによる認証が可能となりました。ローカルホストからリモートホストに ssh でログインすると、ローカルホストのパスフレーズを問われるようになります。 Enter passphrase for key '/home/user/.ssh/id_dsa':

しかし、これだけでは、/etc/ssh/sshd_config の PasswordAuthentication が no であっても、パスフレーズ誤り連続3回のときや authorized_keys に保存されていないホストからのログインの場合は、パスワード認証になってしまいます。公開鍵認証だけに限定したいなら、ChallengeResponseAuthentication yes を no にします。そして、# /etc/init.d/ssh restart です。

さらにセキュリティを高めるために、/etc/ssh/sshd_config の PermitRootLogin は no に変更しましょう。また、秘密鍵は自分だけの秘密! パスフレーズは忘れないように。一番の大きな問題、それは、、忘れやすくなったこと。パスフレーズ変更は $ ssh-keygen -p です。

GnuPG

鍵の作成

$ gpg --gen-key
gpg (GnuPG) 1.2.4; Copyright (C) 2003 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

gpg: 鍵輪「/home/user/.gnupg/secring.gpg」ができました
すきな鍵の種類を選択してください:
   (1) DSAとElGamal (既定)
   (2) DSA (署名のみ)
   (4) RSA (署名のみ)
どれにしますか? 1
DSA鍵対は1024ビットになります。
新しいELG-E鍵対を生成します。
             最小の鍵長は  768 ビット
             既定の鍵長は 1024 ビット
         最大の推奨鍵長は 2048 ビット
どの鍵長にしますか? (1024)
要求された鍵長は1024ビット
鍵の有効期限を決めてください。
         0 = 無期限
      <n>  = 有効期限 n 日間
      <n>w = 有効期限 n 週間
      <n>m = 有効期限 n か月間
      <n>y = 有効期限 n 年間
鍵の有効期間は? (0)
Keyは無期限です
これでいいですか (y/n)? y

あなたの鍵を同定するためにユーザーIDが必要です。
このソフトは本名、コメント、電子メール・アドレスから
次の書式でユーザーIDを構成します:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

本名: My Name
電子メール・アドレス: my@mail.address
コメント:
次のユーザーIDを選択しました:
    "My Name <my@mail.address>"

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)?  o
秘密鍵を保護するためにパスフレーズがいります。

パスフレーズを入力:
パスフレーズを再入力:
今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めします。
++++++++++++++++++++++++.+++++++++++++++++++++++++++++..++++
+++++++++++.++++++++++.+++++>++++++++++..........>.+++++....
...............+++++
今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めします。
.+++++.++++++++++++++++++++.+++++.++++++++++++++++++++++++++
++++.++++++++++.++++++++++..+++++>+++++.>.+++++.............
.......<+++...>++++......++++^^^
gpg: /home/user/.gnupg/trustdb.gpg: 信用データベースができました
公開鍵と秘密鍵を作り、署名しました。
絶対的に信用した鍵として記録しました。

コマンドの例

user_id は key-ID, USER-ID どちらでも可)
gpg --armor --export [user_id] [ > file] :公開鍵をアスキー形式で出力
gpg --fingerprint [user_id] :フィンガープリントの出力
gpg --list-keys [user_id] :公開鍵一覧の出力
gpg --edit-key user_id :パスフレーズ、有効期限等の変更
   プロンプト Command> で使えるコマンドの一覧表示は help
gpg --import files :他人の公開鍵を登録
gpg --delete-key user_id :登録した公開鍵の削除
gpg --verify pgpfile :署名の検証
gpg --verify sigfile files :署名の検証(分離署名の場合)
gpg --gen-revoke user_id [ > revoke_file] :破棄証明書作成
gpg --import revoke_file :鍵破棄

Anti Virus

clamav をインストールします。(メーラ sylpheed-claws とプラグイン sylpheed-claws-plugins をインストールすると、clamav, clamav-freshclam, sylpheed-claws-clamav 等もインストールされます。)

なお、sarge で clamav を使っていると、バージョンが古い(安定版でのアップグレードは通常、セキュリティがらみだけです)、というメッセージが出るようになります。次の行を apt-line に追加しておけばいいです。

deb http://ftp2.jp.debian.org/debian-volatile sarge/volatile main

ウィルスデータベース

ウィルスデータベースは /var/lib/clamav/ の main.cvd, daily.cvd です。コマンド freshclam によりデータベースの更新ができます。設定ファイルは /etc/clamav/freshclam.conf、ログファイルは /var/log/clamav/freshclam.log です。

# freshclam :手動で更新
# freshclam -d -c 12 :デーモンとして1日12回実行

データベース更新方法/設定を変えるには、# dpkg-reconfigure clamav-freshclam です。

システム立上げ後にログを確認すると、次のようなエラーが出ることがありました。

ClamAV update process started at ...
ERROR: Can't get information about ... host.
ERROR: Connection with ... (IP ???) failed.
Trying again ...
 :
Giving up ...

これはPCMCIA無線LAN(DHCP)によるネットワーク接続確立の前に freshclam が起動されたためです。/etc/rc?.d/S20pcmcia を /etc/rc?.d/S12pcmcia とリネームしてPCMCIAカード設定を早めても時々エラーとなりましたので、/etc/rc?.d/S20freshclam を /etc/rc?.d/S90freshclam とリネームして対処しました。

ウィルススキャン

コマンド clamscan によりディレクトリ/ファイルをスキャンできます。

clamscan :カレントディレクトリをスキャン
clamscan file :fileをスキャン
clamscan -r /home :/homeディレクトリ配下の全ファイルをスキャン
clamscan -r --mbox /var/spool/mail :メールスプールをスキャン

デーモンとして常時起動するには clamav-daemon をインストールします。設定ファイルは /etc/clamav/clamd.conf、ログファイルは /var/log/clamav/clamav.log です。# dpkg-reconfigure clamav-daemon により設定変更できます。

Anti Spam

メーラ Sylpheed-Claws でのスパム対策として SpamAssassin を使うことにします。

spamassassin, sylpheed-claws-spamassassin(sylpheed-claws-plugins)をインストールします。

Sylpheed-Claws を起動し、設定/プラグイン/プラグインをロード で SpamAssassin と SpamAssassin GTK をロードします。次に、設定/プリファレンス(全般の設定)/振り分け/SpamAssassin で次のように設定します。

トランスポート:ローカルホスト
spamd:783(デフォルト)
スパムとして保存 にチェック(チェックしないと、スパムと判定されたメールは削除されることになる)
フォルダに保存:#mh/メール箱/spam(フォルダを事前に作成しておく)
最大サイズ:250kB(デフォルト)(スパムのサイズは通常小さい。これより大きいサイズについてはスパムチェックを行わない)
有効時間:30秒(デフォルト)

/etc/default/spamassassin の ENABLED=0 を 1 にします。

その他、細かな設定を行うなら、SpamAssassin のユーザ共通設定ファイルは /etc/mail/spamassassin/local.cf、ユーザごとの設定ファイルは ~/.spamassassin/user_prefs となります。記述内容のサンプルは /usr/share/spamassassin/ にあります。

以上でスパムのチェックをしてくれるようになりますが、日本語メールを対象とするには設定ファイルを日本語判定用に記述しなければなりません。それは大変面倒なことです(私にとって)。そこで TLEC の spamassassin ユーザ定義ファイルを拝借し、~/.spamassassin/user_prefs とします。

スパムを認識するかどうか確認します。スパムのサンプルとして /usr/share/doc/spamassassin/examples/sample-spam.txt が用意されています。

If your spam filter supports it, the GTUBE provides a test by which you
can verify that the filter is installed correctly and is detecting incoming
spam. You can send yourself a test mail containing the following string of
characters (in upper case and with no white spaces and line breaks):

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X ・・・ テスト用文字列

You should send this test mail from an account outside of your network.

新規作成のメールにテスト用文字列を貼り付けて自分宛てに送信します。(# tail -f /var/log/syslog でログを表示しながら)先ほど送信したメールを受信します。ログ(例)は次のようになり、スパムと判定されたメールは Sylpheed-Claws で指定したフォルダに保存されます。

(スパムと判定)
Jun 16 15:05:59 localhost spamd[3990]: connection from localhost.localdomain [127.0.0.1] at port 33339
Jun 16 15:05:59 localhost spamd[3990]: info: setuid to user_name succeeded
Jun 16 15:06:01 localhost spamd[3990]: checking message <20050616150551.438ec41e@localhost.localdomain>
 for user_name:1000.
Jun 16 15:06:06 localhost spamd[3990]: identified spam (1001.7/5.0) for user_name:1000 in 7.9 seconds...
Jun 16 15:06:06 localhost spamd[3990]: result: Y 1001 - FORGED_RCVD_HELO,GTUBE,RCVD_IN_NJABL_DUL ...
 ... size=1109,mid=<20050616150551.438ec41e@localhost.localdomain>,autolearn=no

(スパムではないと判定)
Jun 16 15:33:27 localhost spamd[3988]: clean message (1.7/5.0) for yoshio:1000 in 6.1 seconds, 928 bytes.
Jun 16 15:33:27 localhost spamd[3988]: result: .  1 - FORGED_RCVD_HELO,RCVD_IN_NJABL_DUL

SpamAssassinはメールの判定スコアに重みをつける学習機能を持っています。誤判定した場合には手動で学習させることができます。(フォルダ名を指定すると一度に複数のメールを学習させることができます。)
 スパムではないメールをスパムと誤判定した場合には # sa-learn --ham [ファイルまたはフォルダ]
 スパムメールをスパムではないと誤判定した場合には # sa-learn --spam [ファイルまたはフォルダ]

サーバ

ファイルサーんバ Samba

Samba の設定は /etc/samba/smb.conf を直接編集してもいいですが、GUI設定ツール SWAT(Samba Web Administration Tool、パッケージ swat)をインストールして、ブラウザから http://localhost:901/ で行うのが簡単です。"localhost" の部分は Sambaサーバ名 あるいは IPアドレス でもいいです。設定には root のパスワードが必要となります。

SWAT を使うために /etc/hosts.deny 及び /etc/hosts.allow を設定します。例えば、

/etc/hosts.deny

swat: ALL(あるいは ALL: ALL。他ホストからのアクセスを拒否)

/etc/hosts.allow

swat: LOCAL .foo.ne.jp

その後、/etc/inetd.conf の swat 起動エントリのコメントを外し次のようにします。

swat   stream tcp  nowait.400  root  /usr/sbin/tcpd/ usr/sbin/swat

そして、inetd を再起動します。

# kill -HUP `cat /var/run/inetd.pid`

SWAT を起動し、Global Parameters に dos, unix, display 各 charset が表示されないときは View を Advanced とし、環境に応じて charset 等のパラメータ、その他 Share Parameters などを変更します。変更後はコマンド $ testparm でエラーの出ないことを確認します。
  dos charset:CP850 → CP932。Windows で使用する日本語文字コード
  unix charset:UTF-8 → EUCJP-MS。Samba サーバが使用する文字コード
  display charset:LOCALE → EUCJP-MS。Samba, SWAT が画面表示に使用する文字コード(一般的には unix charset と同じにする)

Samba サーバにアクセスするためには、Samba が動いている Linux システムにユーザ登録してあっても、コマンド # smbpasswd -a ユーザ名 による登録が必要です。

Linux マシンから Windows 共有ディレクトリにアクセスするには smbclient をインストールし、

$ smbclient //サーバ名/共有名 (プロンプト smb: \> で使えるコマンドのヘルプは help)

Windows 共有ディレクトリをマウントするには smbfs をインストールし、

$ smbmount //サーバ名/共有名 マウントポイント [-o [username=ユーザ名][,password=パスワード][,ro][,rw]]

あるいは、/etc/fstab に、マウントポイント、タイプ smbfs、オプション user などを書いておくと、一般ユーザが $ mount コマンドでマウントできるようになります。

マウントを解除するには $ smbumount マウントポイント (# umount コマンドでも可)です。


(参考 http://localhost:901/ で SWAT にアクセスできるか?)
                                                |             ( /etc/hosts.allow )
              ( /etc/hosts )                    | swat:LOCAL  | swat:localhost  | swat:127.0.0.1
------------------------------------------------+-------------+-----------------+----------------
127.0.0.1     localhost.localdomain   localhost |     NG      |       NG        |       OK
- - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - + - - - - - - - - + - - - - - - - -
127.0.0.1     localhost   localhost.localdomain |     OK      |       OK        |       OK
- - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - + - - - - - - - - + - - - - - - - -
127.0.0.1     localhost                         |     OK      |       OK        |       OK

Web サーバ Apache2

/etc/apache2/apache2.conf (抜粋)

ServerRoot "/etc/apache2" ・・・ サーバの設定ファイルが置かれるルートディレクトリ

User www-data
Group www-data

# Include module configuration:
Include /etc/apache2/mods-enabled/*.load ・・・ cgid, userdir -> /etc/apache2/mods-available/*.load
Include /etc/apache2/mods-enabled/*.conf ・・・ cgid, userdir -> /etc/apache2/mods-available/*.conf

# Include all the user configurations:
Include /etc/apache2/httpd.conf

# Include ports listening
Include /etc/apache2/ports.conf

# Include generic snippets of statements
Include /etc/apache2/conf.d/[^.#]*

DirectoryIndex index.html index.cgi index.pl index.php index.xhtml

# UserDir is now a module

HostnameLookups Off ・・・ ログのホスト情報は IPアドレス、ホスト名にするなら On

#AddDefaultCharset      ISO-8859-1

# To use CGI scripts outside /cgi-bin/:
#AddHandler cgi-script.cgi ・・・ CGI スクリプトを /usr/lib/cgi-bin/ に置くならこのままでOK

# Include the virtual host configurations:
Include /etc/apache2/sites-enabled/[^.#]* ・・・ 000-default -> /etc/apache2/sites-available/default

/etc/apache2/mods-available/userdir.conf

<IfModule mod_userdir.c>
        UserDir public_html ・・・ ユーザのホームディレクトリに public_html というディレクトリを作成すれば
        UserDir disabled root                              http://サーバ名/~ユーザ名/ にアクセス可能となる

        <Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        </Directory>
</IfModule>

/etc/apache2/httpd.conf

# This is here for backwards compatability reasons and to support
#  installing 3rd party modules directly via apxs2, rather than
#  through the /etc/apache2/mods-{available,enabled} mechanism.
#
#LoadModule mod_placeholder /usr/lib/apache2/modules/mod_placeholder.so

/etc/apache2/sites-available/default

default を(例えば)my_site としてコピーし修正後、# a2dissite default ; # a2ensite my_site
/etc/apache2/sites-enabled/000-default が消え /etc/apache2/sites-enabled/my_site -> /etc/apache2/sites-available/my_site が作成されます。

修正を反映させるために # /etc/init.d/apache2 reload

NameVirtualHost *
<VirtualHost *>
        ServerAdmin webmaster@localhost ・・・ サーバ管理者のメールアドレス

        DocumentRoot /var/www/ ・・・ http://サーバ名/ でアクセスするときのトップページのディレクトリ
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews ・・ DirectoryIndex(index.html等)が存在しないとき
                AllowOverride None                          ファイル一覧を表示させたくないなら Indexes を削除
                Order allow,deny
                allow from all
                # This directive allows us to have apache2's default start page
                # in /apache2-default/, but still have / go to the right place
                RedirectMatch ^/$ /apache2-default/ ・・ URI が / で終わるとき /apache2-default/ ページを表示
        </Directory>                                     /index.html を表示させたいから行頭に # を付加

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined ・・・(worm 対策のためにあとで修正する)
        ServerSignature On ・・・(エラーページのフッタ(バージョン、OS名等)を表示させないときは Off)

        Alias /icons/ "/usr/share/apache2/icons/"
        <Directory "/usr/share/apache2/icons">
            Options Indexes MultiViews
            AllowOverride None
            Order allow,deny
            Allow from all
        </Directory>

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

フッタ

サーバが生成するドキュメント(エラーメッセージ等)の最下行に表示するフッタの内容は、/etc/apache2/apache2.conf の ServerTokens の内容(Prod[uctOnly], Major, Minor, Min[imal], OS, Full/または未指定)により変わります。この設定はサーバ全体に適用されます。

/etc/apache2/sites-available/testing_site の ServerSignature On を Off にすればフッタを表示しなくなります。

CGI

Perl へのパス #!/usr/bin/perl

エラーコード500(Internal Server Error)は Perl の文法誤りか改行コードを疑います。Windows 端末で作ったファイル(shift-jis-dos)を FTP アスキー(テキスト)モード転送せずに cp コマンドでコピーするときはあらかじめ shift-jis-unix に変換しておきます。(アスキーモード転送では改行コードを相手に合わせて変換してくれます。)

ScriptAlias ディレクティブにより、/cgi-bin/ ディレクトリ下の全てのファイルは CGI プログラムとして扱われます。そのため、/cgi-bin/ ディレクトリ下の gif 画像は CGI プログラムによってはエラーとなって表示されないこともあります。対策として、画像ファイル(CGIファイル以外)はドキュメント用のディレクトリ下に置きます。(例えば、/var/www/img/ に置く。/cgi-bin/ 側からみると、そのディレクトリは /img/ となる。)
あるいは、/etc/apache2/sites-available/default の <Directory "/usr/lib/cgi-bin"> に AddHandler の記述を追加します。

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
        ・・・
        AddHandler image/gif .gif ・・・ この他に image/jpeg .jpg など(/etc/mime.types 参照)
</Directory>

ログの管理

Analog

サーバのログファイルを解析し利用統計報告を作成する、その1。analog をインストールします。

/etc/analog.cfg を若干修正します。そして、# analog コマンドを cron 起動すればいいと思います。

LOGFILE /var/log/apache2/access.log ・・・ 統計処理を行うログファイル(デフォルト)
OUTFILE /var/www/abc.html ・・・ コマンド # analog により出力される統計報告ファイル
HOSTNAME "[ My Web Server ]" ・・・ abc.html ページのタイトル
HOSTURL http://www.mydomain/ ・・・ タイトルをクリックしたときのリンク先
HOSTEXCLUDE 192.168.0. ・・・ 同一 LAN 内からのアクセスは統計から除外
FILEEXCLUDE /cgi-bin/* ・・・ この他、/image/*, *.js など、統計から除外するディレクトリ、ファイル
REFREPEXCLUDE http://www.mydomain/ ・・・ 統計のレポートから除外する参照元
AWStats

サーバのログファイルを解析し利用統計報告を作成する、その2。awstats をインストールしてみます。

/etc/awstats/awstats.conf を /etc/awstats/awstats.www.mydomain.conf としてコピーし、その中の MAIN SETUP SECTION を確認、修正します。

LogFile="/var/log/apache2/access.log" ・・・ apache2
LogFormat=1 ・・・ combined logs
SiteDomain="www.mydomain"
DNSLookup=1 ・・・ /etc/apache2/apache2.conf で既に HostnameLookups On 設定の場合は DNSLookup=0
DirIcons="/awstats-icon" ・・・ DocumentRootからみたディレクトリ
                               コマンド # ln -s /usr/share/awstats/icon /var/www/awstats-icon を実行しておく

その他、必要に応じて OPTIONAL SETUP SECTION, OPTIONAL ACCURACY SETUP SECTION, OPTIONAL APPEARANCE SETUP SECTION, etc を修正します。例えば、

AllowAccessFromWebToFollowingIPAdresses="127.0.0.1 192.168.0.1-192.168.0.255"
SkipHosts="localhost REGEX[^192\.168\.0\.]"
SkipFiles="REGEX[^\/cgi-bin/excludedir]"
NotPageList="css js gif jpg png ico pl"
# /usr/lib/cgi-bin/awstats.pl -config=www.mydomain -update
Update for config "/etc/awstats/awstats.www.mydomain.conf"
With data in log file "/var/log/apache2/access.log"...>
Found 73 new qualified records.

/var/lib/awstats/awstatsMMYYYY.www.mydomain.txt が作成されます。(Analog より重いです。ログの量によってはかなりの時間がかかります。)

次により awstats.www.mydomain.html を作成できます。

# /usr/lib/cgi-bin/awstats.pl -config=www.mydomain -output > awstats.www.mydomain.html

ブラウザで直接見るなら http://localhost/cgi-bin/awstats.pl?config=www.mydomain です。

cron 起動するなら /etc/cron.d/awstats を修正します。

worm

access.log には歓迎しないアクセス(worm や長~い SEARCH によるエラー)も記録され、当然、ログファイルサイズが大きくなります。歓迎しないアクセスを worm と定義しそれを access.log から除外するために次の内容のもの(例えばファイル名 worm_det)を /etc/apache2/conf.d/ 配下に作成します。worm や長~い SEARCH によるエラーは error.log には記録されます。(error.log のカスタマイズはできません。)

<IfModule mod_setenvif.c>
    SetEnvIf Request_Method "(GET)|(POST)|(PUT)|(DELETE)|(HEAD)" log ・・・ エラー414となる SEARCH は除外
    SetEnvIf Request_URI ^/default\.ida worm !log ・・・ worm と定義、access.log に記録しないから !log
    SetEnvIf Request_URI ^/NULL\.IDA worm !log           大文字/小文字を区別しないなら SetEnvIfNoCase
</IfModule>

そして、/etc/apache2/sites-available/my_site (default) を次のように修正します。

#CustomLog /var/log/apache2/access.log combined
CustomLog /var/log/apache2/access.log combined env=log ・・・ log と定義したものだけを記録
CustomLog /var/log/apache2/worm.log combined env=worm ・・・ worm.log として残したいときこの行を追加

あるいは、SetEnvIf Request_Method "(GET)|(POST) ... を定義する代わりに、/etc/apache2/apache2.conf でログフォーマットを変更し /etc/apache2/conf.d/worm_det 及び /etc/apache2/sites-available/my_site (default) を次のようにしてもいいです。(こちらの方がいいと思います。)

#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
<IfModule mod_setenvif.c>
    SetEnvIf Request_URI ^/default\.ida worm
    SetEnvIf Request_URI ^/NULL\.IDA worm
</IfModule>
#CustomLog /var/log/apache2/access.log combined
CustomLog /var/log/apache2/access.log combined env=!worm
CustomLog /var/log/apache2/worm.log combined env=worm ・・・ worm.log として残したいときこの行を追加

自宅サーバ DDNS

ADSL で常時接続、といっても、プロバイダから割り振られた IP アドレスが変わることがあります。自宅サーバを公開しようとしても、その都度 IP アドレスを皆に知らせるわけにもいきません。そういうときは、ダイナミック DNS サービスを利用しましょう。自分の利用するサブドメイン名への IP アドレスの設定を随時、簡単に行うことができます。

この maruyosi's Home は、家サーバー・プロジェクト(ieServer.Net)を利用しております。ドメイン名(myhome.cx, or.tp, jpn.ph, fam.cx, dip.jp)の中から好きなものを一つ選び、ユーザ名(サブドメイン名になります)、メールアドレス、パスワードを登録するだけです。もちろん、無料です。

なお、cx はクリスマス諸島(Christmas Island)に割り当てられたドメイン名です。

自宅 LAN(ローカルIPアドレス 192.168.0.*)内の PC から同一 LAN 内の自宅サーバ(192.168.0.80)にアクセスする場合、IPアドレスを指定すると Web ページが表示されるが、ドメイン名(maruyosi.fam.cx)を指定するとルータ(192.168.0.1)の設定画面となることがあります。このときは、/etc/hosts にホスト名のほかにドメイン名(maruyosi.fam.cx)も記述してローカルIPアドレス(192.168.0.80)に対応づければいいです。

さらに、、

カーネルアップグレード(再構築)

カーネル

カーネル 2.6.x を 2.6.y にアップグレードします。カーネル2.6の設定を行うには、make xconfig では Qt 開発パッケージ(libqt3-dev, etc)、make gconfig では GTK+ 開発パッケージ(libgtk2.0-dev, libglib2.0-dev, libglade2-dev, etc)が必要となります。その他、必要なパッケージを事前にインストールしておきます。kernel-package, fakeroot, bzip2, bin86, g++, etc

カーネルソースをインストールします。

# apt-get install kernel-source-2.6.y

これにより、/usr/src/ に kernel-source-2.6.y.tar.bz2 が置かれます。

ユーザのホームあるいは空き容量のある適当なディレクトリに移動し(/usr/src/ である必要はありません)ソースを展開します。

$ tar jxvf /usr/src/kernel-source-2.6.y.tar.bz2

カレントディレクトリ(例えば /home/foo)にできた kernel-source-2.6.y ディレクトリ(カーネルソースのディレクトリ)に移動します。

(次のようにシンボリックリンクを作成しておくと、あとあと作業がしやすいと思います。)

# ln -s /home/foo/kernel-source-2.6.y /usr/src/linux
$ cd /usr/src/linux

カーネルの設定を行います。
$ make xconfig または make menuconfig、make defconfig(デフォルトの設定)、make allmodconfig(可能な項目はモジュール化)。現在の設定を使うなら、/boot/config-2.6.x を ./.config としてコピー、make oldconfig。

コンパイルを以前行ったことがあれば、

$ make-kpkg clean

カーネルイメージのパッケージを作ります。

$ fakeroot make-kpkg --revision ab.c kernel_image (ab.c の部分は任意)

initrdを使っているならオプション --initrd もつけます。次のメッセージが出ますが [n] を入力します。

Warning: You are using the initrd option, that may not
work unless you have applied the initrd cramfs patch to
the kernel, or modified mkinitrd not to use cramfs by
default. The  cramfs initrd patch, is included in the 
Debian supplied kernel sources, but is not present in 
pristine kernel sources.
By default, I assume you know what you are doing, and I
apologize for being so annoying. Should I abort[N/y]?

親ディレクトリにできたカーネルパッケージをインストールします。現在インストールしてあるカーネルと同じバージョンをインストールしようとすると、警告が出ます。事前に、ディレクトリ /lib/modules/2.6.x を他に移動しておくか、/lib/modules/2.6.x.old のように名前を変えておきます。

# dpkg -i ../kernel-image-2.6.y_ab.c_i386.deb

ブートローダは GRUBを使っており、カーネルパッケージインストールの都度 LILO の問合せをせずに update-grub を自動実行するようにしてありますので、

/initrd.img does not exist. Installing from scratch, eh?
Or maybe you don't want a symbolic link here. Hmm? Lets See.
/vmlinuz does not exist. Installing from scratch, eh?
Or maybe you don't want a symbolic link here. Hmm? Lets See.
Searching for GRUB installation directory ... found: /boot/grub .
Testing for an existing GRUB menu.list file... found: /boot/grub/menu.lst .
Found kernel: /boot/vmlinuz-2.6.x
Found kernel: /boot/vmlinuz-2.6.y
Updating /boot/grub/menu.lst ... done

などのメッセージが出て、これで完了です。一応、/boot/grub/menu.lst を確認して、reboot。

モジュール

カーネル以外のモジュールソースからモジュールを作成する場合は、次によります。

モジュールのソースをインストールします。

# apt-get install <module>-source

これにより、/usr/src/ に <module>-source.tar.gz が置かれます。

適当なディレクトリでソースを展開します。

# tar zxCvf /usr/src /usr/src/<module>-source.tar.gz

カーネルソースのディレクトリに移動します。

$ cd /usr/src/linux-2.6.y

モジュールイメージのパッケージを作成します。

# make-kpkg modules_image

親ディレクトリにできたモジュールパッケージをインストールします。

# dpkg -i ../<module>- ・・・ .deb

ソフトウェア RAID

mdadm をインストールし、ミラーリング(ソフトウェア RAID1)を行います。mdadm は raidtools2 と違って設定ファイルなしでほとんどの機能を実行できます。

cfdisk あるいは fdisk で、増設したハードディスク Disk-1(セカンダリマスター /dev/hdc)のパーティションを作成します。ミラーリングするパーティションはハードディスク Disk-0(プライマリマスター /dev/hda)と同じサイズに、タイプは fd にします。

# cfdisk /dev/hdc
                                  cfdisk 2.12

                              Disk Drive: /dev/hdc
                        Size: 10209927168 bytes, 10.2 GB
              Heads: 255   Sectors per Track: 63   Cylinders: 1241

  Name  Flags   Part Type  FS Type          [Label]   Size (MB)
 --------------------------------------------------------------
  hdc2           Primary   Linux raid autodetect        4096.19    ・・・ /
  hdc5           Logical   Linux raid autodetect        2048.10    ・・・ /home
  hdc6           Logical   Linux raid autodetect         230.31    ・・・ swap
# fdisk /dev/hdc
Disk /dev/hdc: 10.2 GB, 10209927168 bytes
255 heads, 63 sectors/track, 1241 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device  Boot   Start       End      Blocks   Id  System
/dev/hdc2           218       715     4000185   fd  Linux raid autodetect
/dev/hdc3           716      1241     4225095    5  Extended
/dev/hdc5           716       964     2000061   fd  Linux raid autodetect
/dev/hdc6           965       992      224878+  fd  Linux raid autodetect

デバイス md を作成し、確認します。Disk-1 のみ RAID に組み込まれる縮退モードとなります。

# mdadm --create /dev/md0 --level=raid1 --raid-devices=2 missing /dev/hdc2
# mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/hdc5
# mdadm -Cv /dev/md2 -l1 -n2 missing /dev/hdc6  ← -C:--create, -l1:--level=1(raid1), -n2:--raid-devices=2
$ cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 hdc6[0]
      224768 blocks [2/1] [U_]

md1 : active raid1 hdc5[0]
      1999936 blocks [2/1] [U_]

md0 : active raid1 hdc2[0]
      4000064 blocks [2/1] [U_]

unused devices: <none>

ファイルシステム ext3 を デバイス md0, md1 に作成します。

# mke2fs -j /dev/md0
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
500960 inodes, 1000016 blocks
50000 blocks (5.00%) reserved for the super user
First data block=0
31 block groups
32768 blocks per group, 32768 fragments per group
16160 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

デバイス md2 にスワップ領域を作成します。

# mkswap /dev/md2
Setting up swapspace version 1, size = 230158 kB

/etc/mdadm/mdadm.conf を修正します。

DEVICE partitions ⇒ DEVICE /dev/hda* /dev/hdc*

mdadm.conf を作成し、確認します。

# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
$ cat /etc/mdadm/mdadm.conf
#DEVICE partitions
DEVICE /dev/hda* /dev/hdc*
ARRAY /dev/md2 level=raid1 num-devices=2 UUID=a8a2d5f3: ...
   devices=/dev/hdc6
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=ba128e6f: ...
   devices=/dev/hdc5
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=8a1d81ce: ...
   devices=/dev/hdc2

Disk-0(/dev/hda*)から Disk-1(/dev/md*)にファイルをコピーします。また、アクセス権を適正なものにします。

# mkdir /mnt/raid ・・・ わかりやすいように作業用ディレクトリを作成
# mount /dev/md0 /mnt/raid
# mkdir /mnt/raid/home
# mount /dev/md1 /mnt/raid/home
# cd /
# cp -a ( mnt, proc, tmp, lost+found 以外の全ディレクトリ) /mnt/raid
(あるいは # rsync -auHxv --exclude=/mnt ~ --exclude=/lost+found /* /mnt/raid などお好きな方法で)
# cd /mnt/raid
# mkdir mnt proc tmp
# chmod 555 proc
# chmod 1777 tmp

/mnt/raid/etc/fstab(Disk-1 側)を修正します。

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/md0        /               ext3    defaults,errors=remount-ro 0       1
/dev/md1        /home           ext3    defaults        0       2
/dev/md2        none            swap    sw              0       0
/dev/hdd        /media/cdrom    iso9660 ro,user,noauto  0       0
#/dev/fd0        /media/floppy   auto    rw,user,noauto  0       0 ・・・ HDD 増設のため FDD を取外した

Disk-0 側の initrd.img をバックアップした後、Disk-1 側に RAID 対応の initrd.img を作成します。

# cp -a /boot/initrd.img-2.6.8-2-686 /boot/initrd.img-2.6.8-2-686-old
# mkinitrd -r /dev/md0 -o /mnt/raid/boot/initrd.img-2.6.8-2-686

/boot/grub/menu.lst に追加します。

title           Debian GNU/Linux, kernel 2.6.8-2-686 (Disk-0)
root            (hd0,1)
kernel          /boot/vmlinuz-2.6.8-2-686 root=/dev/hd2 ro
initrd          /boot/initrd.img-2.6.8-2-686 ・・・ この時点ではまだ old です
savedefault
boot

title           Debian GNU/Linux, kernel 2.6.8-2-686 (Disk-1)
root            (hd1,1)
kernel          /boot/vmlinuz-2.6.8-2-686 root=/dev/md0 ro
initrd          /boot/initrd.img-2.6.8-2-686 ・・・ RAID 対応です
savedefault
boot
# umount /mnt/raid/home ; # umount /mnt/raid

リブート:Disk-1 から立上げ、正常に動作することを確認します。この時点ではまだ RAID 化を中止することができます。

これから先の作業を続行すると、簡単に元に戻すことができなくなります。

Disk-0 のパーティションタイプを変更します。(リブートが必要といわれたら再度リブートします。)

# fdisk /dev/hda
Disk /dev/hda: 13.6 GB, 13664550912 bytes
255 heads, 63 sectors/track, 1661 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device  Boot   Start       End      Blocks   Id  System
/dev/hda2           638      1135     4000185   fd  Linux raid autodetect
/dev/hda4          1136      1661     4225095    5  Extended
/dev/hda5          1136      1384     2000061   fd  Linux raid autodetect
/dev/hda6          1385      1412      224878+  fd  Linux raid autodetect

Disk-0 を RAID に組み込みます。

# mdadm /dev/md0 -a /dev/hda2
# mdadm /dev/md1 -a /dev/hda5
# mdadm /dev/md2 -a /dev/hda6

ミラーリング(Disk-0 のリカバリ)はすでに開始されています。進捗を確認します。

$ cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hda5[2] hdc5[1]
      1999936 blocks [2/1] [_U]
        resync=DELAYED
md2 : active raid1 hda6[2] hdc6[1]
      224768 blocks [2/1] [_U]
        resync=DELAYED
md0 : active raid1 hda2[2] hdc2[1]
      4000064 blocks [2/1] [_U]
      [===========>.........]  recovery = 58.0% (2324096/4000064) finish=1.8min speed=14806K/sec
unused devices: <none>

完了すると次のようになります。

Personalities : [raid1]
md1 : active raid1 hda5[0] hdc5[1]
      1999936 blocks [2/2] [UU]

md2 : active raid1 hda6[0] hdc6[1]
      224768 blocks [2/2] [UU]

md0 : active raid1 hda2[0] hdc2[1]
      4000064 blocks [2/2] [UU]

unused devices: <none>

initrd.img を再作成します。

# mkinitrd -o /boot/initrd.img-2.6.8-2-686

/etc/mdadm/mdadm.conf を修正します。

DEVICE /dev/hda* /dev/hdc* ・・・ この行だけを残す

mdadm.conf を再作成します。

# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
$ cat /etc/mdadm/mdadm.conf
#DEVICE partitions
DEVICE /dev/hda* /dev/hdc*
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=ba128e6f: ...
   devices=/dev/hda5,/dev/hdc5
ARRAY /dev/md2 level=raid1 num-devices=2 UUID=a8a2d5f3: ...
   devices=/dev/hda6,/dev/hdc6
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=8a1d81ce: ...
   devices=/dev/hda2,/dev/hdc2

Disk-0, 1 どちらからでも起動できるように grub をインストールします。(いろいろ試したんで ... ? ...、最終的に OK)

$ cat /boot/grub/device.map
(hd0)   /dev/hda
# grub  --device-map=/boot/grub/device.map   ... ?
Probing devices to guess BIOS drives. This may take a long time.
grub> root (hd0,1)
 Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  16 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1+16 p (hd0,1)/boot/grub/stage2
/boot/grub/menu.lst"... succeeded
Done.
                                                 ? ...  grub> device (hd0) /dev/hdc
grub> root (hd1,1)                                      grub> root (hd0,1)
grub> setup (hd1)                                       grub> setup (hd0)
grub> quit

/boot/grub/menu.lst の次の箇所を修正しておきます。

# kopt=root=/dev/hda2 ro  ⇒ # kopt=root=/dev/md0 ro

デバイス(例えば md1 の hdc5)を RAID 構成から外すには次にように手順を踏みます。

# mdadm /dev/md1 -f /dev/hdc5
mdadm: set /dev/hdc5 faulty in /dev/md1
$ cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hda5[0] hdc5[2](F)
      1999936 blocks [2/1] [U_]
# mdadm /dev/md1 -r /dev/hdc5
mdadm: hot removed /dev/hdc5
$ cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hda5[0]
      1999936 blocks [2/1] [U_]
(あるいは、一挙に)# mdadm /dev/md1 -f /dev/hdc5 -r /dev/hdc5

Disk-0, 1 どちらからでも起動できることを確認。BIOS で Disk-0 を none として Disk-1 から立ち上げても Disk-0, 1 両者が RAID 構成で立ち上がるため、Disk-0 の電源をオフとして Disk-1 から立ち上がることを確認。

Disk-0, 1 の RAID 構成が出来上がったら、Disk-0 の initrd.img-old で立ち上げてみたりしないこと。修復に慣れるまで結構疲れることになる。が、勉強のために試してみることはよい。失敗した方がいろいろと覚えられる。
(修復の手順?)⇒ fsck で修正し、Disk-0 のパーティションタイプを ext3 に戻し、、Disk-0/initrd.img-old で立上げ、再度 /dev/md0 へのファイルコピーからやり直す、、md デバイス再作成からやり直すなら # mdadm --zero-superblock /dev/hdc2 、、

Suspend to RAM (ACPI S3)

i855GM graphics chip, kernel2.6.12 の場合です。

acpid をインストールします。(power ボタンでシャットダウンするようになります。この機能を使いたくない場合は /etc/acpi/events/powerbtn 内の記述を修正/コメントアウトしておきます。)

XF86Config-4 の Device セクションに記述追加します。

Option "VBERestore" "true"

ただし、テキストコンソール(vt1~6)の画面がチラチラするようになるため、# modprobe vga16fb が必要です。(/etc/modules に記述追加しておきます。)

LCDを閉じたときにサスペンドするために、そのイベントを検出しスクリプトを動かす /etc/acpi/events/lid_btn を作成します。

event=button[ /]lid
action=/etc/acpi/lid_btn.sh

サスペンド/リジュームを行うためのスクリプト /etc/acpi/lid_btn.sh を作成します。(chmod +x しておきます。)

#!/bin/bash
vt=`fgconsole`
rmmod usb_storage
rmmod uhci_hcd
rmmod ehci_hcd
hwclock --systohc

echo "mem" > /sys/power/state

hwclock --hctosys
modprobe uhci_hcd
modprobe ehci_hcd
modprobe usb_storage
modprobe i830
chvt 1; chvt 7
chvt $vt

sleep ボタンを使ってサスペンドするときは event=button[ /]sleep、この場合のリジュームは lid ボタンとなる。(1551-AG1)

その他

定期起動 cron

プログラムをバックグラウンドで定期的に起動するときに使います。デフォルトではシステム管理のために毎時17分、毎日6時25分、毎日曜日6時47分、毎月1日6時52分、何等かが起動されるようになっています(/etc/crontab 参照)。実行されるプログラムファイルは /etc/cron.{ hourly | daily | weekly | monthly } 各ディレクトリにあります。しかし、その時刻にマシンの電源が入っていなければ長期間実行されないこともあり得ます。24時間稼働できないなら anacron をインストールします。毎日・毎週・毎月、確実に実行してくれるようになります(/etc/anacrontab 参照)。なお、lockfile-progs はインストールした方がいいようです。何か不具合があったとき /etc/cron.daily/standard が複数回実行されるのを防いでくれるそうです。

実行するコマンドをユーザが追加・削除するには以下の方法があります。

crontab

cron を実行するユーザ(root 含む)毎に設定を行い、編集、確認、削除のコマンドはそれぞれ crontab [-u user] { -e | -l | -r } です。環境変数 EDITOR に設定してあるエディタが起動します。設定は /var/spool/cron/crontabs/user に反映されます。

XEmacs の場合は、Meta+x load-library (Enter)の後 crontab と入力し、編集モードになったら Meta+x crontab-edit (Enter)とすると、ヘッダコメントが挿入されます。編集後、普通に保存すればいいです。

記述形式は次の通りであり、この例では、毎月27日の17時7分に command が実行されます。

# min  hour  day  month   dow    command
   7    17    27    *      *     command

それぞれ、複数の指定 1,2,5,9 や範囲指定 0-4 などもできます。また、例えば hour の箇所が 0-23/2 や */2 ならば2時間ごとの実行となります。dow(day of week) の 0, 7 は Sun です。

command の部分は、実行するコマンド名及びオプションを書いてもいいし、シェルスクリプトなどでプログラムファイルを作成しその名前を書いてもいいです。

cron が実行され、標準出力やエラー出力があればユーザにメールが送られます。環境変数 MAILTO を設定することで宛先指定もできます。MAILTO="" とすればメールは送られません。crontab の設定行よりも前に書いて下さい。

/etc/cron.d/

/etc/crontab と同様の記述形式で、起動する曜日(dow)と実行するコマンド(command)の間にユーザ名(user)を入れて書いた設定ファイルを /etc/cron.d/ ディレクトリに置きます。

/etc/cron.hourly/ etc

/etc/crontab でデフォルト設定されている起動時刻でよければ、/etc/cron.{ hourly | daily | weekly | monthly } いずれかのディレクトリに実行ファイルを置きます。

ブラウザ Firefox

外部メーラ起動

ブラウザ Firefox の mailto リンクをクリックしたときに、メーラ Sylpheed(-Claws) のメール新規作成ウィンドウを開くようにします。

Firefox を起動し URL欄に about:config と入力すると Firefox の各種設定(設定名、状態、型、値)が表示されます。その中から network.protocol-handler.external.mailto を捜し出し(フィルタ欄に mailto と入力するといいです)、値が true となっていることを確認します(false のときは右クリックで値を変更します)。次に、右クリックで 新規/String を選び、設定名 network.protocol-handler.app.mailto、String の値 /usr/local/bin/mailto.sh を入力して、設定を追加します。

あるいは、~/.mozilla/firefox/???.default/user.js に次の内容を記述追加(新規作成)します。

user_pref("network.protocol-handler.app.mailto", "/usr/local/bin/mailto.sh");

Firefox を終了すると、先ほど追加した設定が ~/.mozilla/firefox/???.default/prefs.js に反映されているはずです。

次に、以下の内容の /usr/local/bin/mailto.sh を作成し、実行権限をつけます。(# chmod a+x /usr/local/bin/mailto.sh

#!/bin/sh
/usr/bin/sylpheed-claws --compose $1

Firefox を再起動すると、Sylpheed(-Claws) の新規作成ウィンドウ(宛先欄入力済み)が mailto リンククリックで開くようになります。

メニューアイテム非表示

メインメニューアイテムの一部(例えば Help)を非表示にしたいときは、~/.mozilla/firefox/???.default/chrome ディレクトリに、次の内容の userChrome.css を置きます。(日本語を使用する場合、エディタには UTF-8 対応のものが必要です。)

@charset "utf-8";
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
#main-menubar menu[label="Help"] {
 display:none !important;
}

拡張機能

とりあえず入れてみた拡張機能。Mouse Gestures:これは私には必須です。Opera で癖になりました。User Agent Switcher:Opera と違って User Agent を偽装することはないでしょう。mozilla ですから。Bookmarks Synchronizer:デュアルブートの Linux と Windows、また、他のパソコン、いずれもデフォルトブラウザは Firefox。だから、同じ Bookmark を使いたいんです。

プラグイン

Flash

flashplugin-nonfree をインストールします。Macromedia から Flash Player(flash_player_?_linux.tar.gz) をダウンロードし /usr/lib/mozilla-firefox/plugins/ にプラグインをインストールしてくれます。

Java

Java をインストール後、リンクを張ります。

# ln -s /usr/lib/j2re1.5-sun/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/mozilla-firefox/plugins/

(参考) about:, about:buildconfig, cache, config, plugins

Java

SUN のサイトから jre-1_5_0_01-linux-i586.bin をダウンロードしておきます。

java-common をインストールします。

# apt-get install java-common

java-package をインストールし、パッケージを作成します。

# apt-get install java-package
$ fakeroot make-jpkg jre-1_5_0_01-linux-i586.bin

カレントディレクトリにパッケージができますのでインストールします。

# dpkg -i sun-j2re1.5_1.5.0+update01_i386.deb

コマンド java -version で確認すると、

java version "1.5.0_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_01-b08)
Java HotSpot(TM) Client VM (build 1.5.0_01-b08, mixed mode, sharing)

フォント

インストールしただけでは、Debian では文字化けします。

/usr/lib/j2re1.5-sun/lib/ に移動します。fontconfig.Sun.2003.properties.src または fontconfig.Turbo.8.0.properties.src を fontconfig.properties としてコピーします。kochi フォントがインストールされていれば、これで文字化けは解消されます。

fontconfig.RedHat.8.0.properties.src をコピーする場合は「misc-kochi 」「misc-kochi_」を「kochi-」に書き換えます。私は sazanami フォントを使っていますので「sazanami-」に書き換えました。また、font path 「/usr/share/fonts/ja/TrueType」も「/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType」(/usr/share/fonts/truetype)に書き換えました。

(参考)

XEmacs

UTF-8

XEmacs で UTF-8 を扱えるように mule-ucs をインストールします。UTF-8 ファイルを読み込むと Shift_JIS として誤認識され、文字化けすることでしょう。次のようにもう一度読み込むと OK です。
  Ctrl+x RET c utf-8 RET Ctrl+x Ctrl+v RET

UTF-8 ファイルを誤認識しないように、XEmacs の設定ファイル ~/.xemacs/init.el を次のように記述します。

(set-language-environment "Japanese")
(prefer-coding-system 'utf-8)
(prefer-coding-system 'euc-jp-unix)

この場合、読み込み時の認識 Priority は次のようになります。
  1. euc-jp 2. utf-8 3. iso-2022-jp 4. shift_jis

(参考)Anthy を使うなら anthy-el をインストールします。その他、カラー表示、行・桁番号表示を行うには次のように設定ファイルに記述します。

(load-library "anthy")
(global-set-key "\C-\\" 'anthy-mode)
(setq default-input-method "japanese-anthy")
;; カラー表示
(require 'font-lock)
;; 行番号表示
(line-number-mode t)
;; 桁番号表示
(column-number-mode t)

xml-mode

XEmacs21.4 で XHTML 文書(拡張子 .html)を開こうとすると次のエラーが出ます。 (HTML Font)

/usr/share/xml/entities/xhtml/xhtml-special.ent line 2 col 5 entity i18n
/usr/share/xml/xhtml/schema/dtd/1.0/xhtml1-strict.dtd line 239 col 8 entity HTML
/home/user/dir/xhtml_file.html line 3 col 54 
Name expected; at: :lang NMT

M-x xml-mode とすれば xml-mode になります (XML [html]) が、XHTML 文書を最初から xml-mode で開く (XML [html] Font) ためには、文書の1行目に次のように記述するか、

<?xml version="1.0" encoding="UTF-8"?><!-- -*- xml -*- -->

文書の最後に次のように記述します。

<!--
Local Variables:
mode: xml
End:
-->

VAIO PCG-C1VR/BP

SONYPI

Vaio C1 の持つ機能を生かすために、sonypi や videodev, meye などのモジュールを使います。

sonypiデバイスを作成します。# mknod /dev/sonypi c 10 63
(/var/log/messages, /proc/misc で確認すると、自動では63が割り当てられていました。)

次の内容のファイルを /etc/modprobe.d/ に置きます。(ファイル名は何でもいいです。例えば sonypi)

# camera
alias char-major-10-63 sonypi
options sonypi minor=63 camera=1
# meye
# alias char-major-81 videodev    # すでに /etc/modprobe.d/aliases に記載がありました
alias char-major-81-0 meye
options meye gbuffers=32          # 600x32=19200k(デフォルトは 600x2=1200k)

Power management

電源アダプタの抜き差しによりCPUパフォーマンスやLCDバックライト輝度を変えるために、acpid, longrun, spicctrl をインストールし、次の内容のファイル /etc/init.d/pwr-change.sh(chmod +x しておく)及び /etc/acpi/events/powerchange を作成します。そして、acpid を再起動。

#!/bin/sh
# /etc/init.d/pwr-change.sh
status=`sed "s/state: *//" /proc/acpi/ac_adapter/ACAD/state`
case $status in
        "on-line"       )       /usr/bin/longrun -s 0 100             # 0:300MHz, 100:600MHz
                                /usr/bin/longrun -f performance
                                /usr/bin/spicctrl -b 255
                                exit 0
                                ;;
        "off-line"      )       /usr/bin/longrun -s 0 33              # 33:400MHz, 66:500MHz
                                /usr/bin/longrun -f economy
                                /usr/bin/spicctrl -b 100              # 50では暗すぎる
                                exit 0
                                ;;
esac
echo "Something has failed!"
exit 1
# /etc/acpi/events/powerchange
event=ac_adapter
action=/etc/init.d/pwr-change.sh

ブート時にも制御を可能とするには init スクリプトへのリンクを作成します。

# update-rc.d pwr-change.sh start 99 2 .(最後のピリオドを忘れないこと)

状態の確認は、longrun -p(CPUパフォーマンスレベル)、spicctrl -B(LCD輝度)、spicctrl -p(バッテリー状態)、spicctrl -c(バッテリー全容量)、spicctrl -r(バッテリー残容量)など。

注意:acpid をインストールすると power ボタンでシャットダウンするようになります。capture ボタンを使うときに間違わないように! あるいは、/etc/acpi/powerbtn.sh を修正してpowerボタンの機能を変更しておきます。

モーションアイ

motioneye をインストールします。jpg/ppm スナップショットや mjpeg 圧縮ビデオをキャプチャできます。

Commands
  -d      :Display camera capture
  -p FILE :Get camera snapshot (ppm format)
  -j FILE :Get camera snapshot (jpg format)
  -m FILE :Get mjpeg video
Options
  -a NUM  :Camera AGC (0-63) (default 48)
  -b NUM  :Camera brightness (0-63) (default 32)
  -c NUM  :Camera colour (0-63) (default 32)
  -C NUM  :Camera contrast (0-63) (default 32)
  -D FILE :Video device to use (default /dev/video0)
  -f NUM  :Framerate (0=every frame, 2=every 2 frames) (0-31) (default 0)
  -h NUM  :Camera hue (0-63) (default 32)
  -P NUM  :Camera picture (0-63) (default 0)
  -q NUM  :JPEG quality (1-10) (default 7)
  -s      :Subsample the image
  -S NUM  :Camera sharpness (0-63) (default 32)
  -t NUM  :Number of seconds to capture (default 10)
  -w      :Wait for the start capture video with CAPTURE button

デフォルトサイズ640x480のスナップショット:jpg形式では約30kBのものが ppm形式では約900kB。

ジョグダイアル

sjog をインストールすると、Brightness, Volume, X-Chat, Mozilla, Kcalc, Konsole, Eterm, Konqueror, Xmms, Popdown がジョグダイアルにより選ぶことができます。メニューのカスタマイズは、$ cp /etc/sjogrc ~/.sjogrc の後、~/.sjogrc を修正してください。

sjog に代えて rsjog をインストールしてみます。$ cp /usr/share/doc/rsjog/sample.rsjogrc ~/.rsjogrc、これにより、ファンクションキーの一部が有効になります。デフォルト設定では、Fn+F1:Eterm, Fn+F4:volume, Fn+F5:brightness, Fn+Esc:shutdown -h now です。

さらに、$ cp /usr/share/doc/rsjog/sample.rsjog.menu ~/.rsjog.menu によりメニューモードとなり、Middle button, Volume, Brightness, Eterm, Galeon, X-Chat, xmms 等、ジョグダイアルにより選べるようになります。カスタマイズは ~/.rsjogrc, ~/.rsjog.menu を修正してください。

参考

メモリスティック(スロット空き)はインストール後の /etc/fstab では Filesystem: /dev/sda, MountPoint: /media/usb0 であるがこれを Filesystem: /dev/sda1 と修正。USBメモリは /dev/sdb1 として認識されるので /media/usb1 にマウント。

各種ユーティリティ

試してみましょ、この パッケージ

ふぉんと! よくわからない

私がよく忘れる、間違う、コマンド など