このページは主として Debian GNU/Linux 3.1(sarge), GNOME2, kernel2.6 環境での試行錯誤記録です。リリース前の記録も含みます。
このページの更新予定はありません。4.0(etch) に関しては Debian 初心者の A2Z をご覧下さい。
なお、3.0(woody), 2.2(potato) 他に関しては、このページの旧版である woody 初心者の足跡、Linux 初心者の足跡に、Windows 系・共通に関しては書斎にあります。
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 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 はインターネットへの接続環境によって異なります。
インターネットに接続できないなら、フルイメージ(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 表示されたパッケージの制限を変更
/ 単語検索
\ 最後の検索を繰り返し
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
1024x480 や 1280x800 などのサイズでは /etc/X11/XF86Config-4 の修正等が必要となります。
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
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 に。
タッチパッドの拡張機能を使うために 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 で日本語入力。
canna サーバが動いている環境で jvim-canna (Japanized VIM canna version) を使います。設定は特に必要ありません。コマンドは jvim、Insertモードで Ctrl+\。
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>
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 を起動します。そして、読み、単語を入力し、広義の品詞(動詞、名詞、形容詞、副詞、その他)、狭義の品詞を選択します。地名、人名の場合は、広義の品詞は その他 を選択し、狭義の品詞の中で 地名、人名 を選びます。
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
カーネル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 を実行してもいいですけど)
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 観賞のために 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 観賞をお楽しみ下さい。
この 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 として認識されていることがわかります。
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/buildNdisWrapper のサイトから 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 が作成されます)
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 は適当な名前の論理インターフェース)
ブート時や 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(パケットフィルタリング)の設定は必須です。
グローバルIPアドレスのネットワークインタフェースを通ってインターネットからローカルネットワークへ入って来るパケットに対して、通す/通さない等のフィルタ操作を iptables により行います。
⇒ 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
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
eth0-in チェインを通るその他のパケットはログの記録をとり破棄します。
# iptables -A eth0-in -j logdrop
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
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 による他、いくつか方法があるようです。
スクリプト(例えばファイル名 myfirewall)を書いて /etc/init.d/ に置き、
# update-rc.d myfirewall start 40 S . stop 89 0 6 .
例えば、ルールが -A INPUT -i eth1 -j ACCEPT のみの状態で # iptables-save を実行すれば、
# Generated by iptables-save v1.2.11 on Sun Jan 9 20:24:03 2005 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -i eth1 -j ACCEPT COMMIT # Completed on Sun Jan 9 20:24:03 2005
のように、そのときに設定されている全ての *テーブル、:チェイン ポリシー [パケットカウンタ:バイトカウンタ]、ルール が標準出力されます。
接続/通信開始前、切断/通信終了後の設定をそれぞれ、
# iptables-save > /etc/iptables.up.rules # iptables-save > /etc/iptables.down.rules
でファイルへ保存し、次の2行を /etc/network/interfaces へ記述追加します。
pre-up iptables-restore < /etc/iptables.up.rules post-down iptables-restore < /etc/iptables.down.rules
何もない状態から複雑なルールを設定していく場合、後々のルール修正変更を考えると、iptables コマンドで一つ一つ設定していくよりはスクリプトを書いて実行した方が利便性がいいです。一方、システム起動時には、スクリプトで iptables コマンドを一つ一つ実行しその都度ルールを追加するよりは、iptables-restore コマンドで専用フォーマットのルールをテーブル単位で読み込み設定する方が速くてスマートです。しかし残念ながら、iptables コマンドそのものはスクリプトを扱えません。そこで、スクリプトに iptables-restore コマンドやその他の設定コマンドを書き、そのスクリプトを実行するように /etc/network/interfaces へ記述する、これがいいですね。
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
/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 に記録されます。
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 プロトコルバージョン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 です。
$ 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 :鍵破棄
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 です。
8 */2 * * * clamav /usr/bin/freshclam --quiet
システム立上げ後にログを確認すると、次のようなエラーが出ることがありました。
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 により設定変更できます。
メーラ 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 の設定は /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
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
<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>
# 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
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 にすればフッタを表示しなくなります。
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>
サーバのログファイルを解析し利用統計報告を作成する、その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/ ・・・ 統計のレポートから除外する参照元
サーバのログファイルを解析し利用統計報告を作成する、その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 を修正します。
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 として残したいときこの行を追加
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
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 、、
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)
プログラムをバックグラウンドで定期的に起動するときに使います。デフォルトではシステム管理のために毎時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 が複数回実行されるのを防いでくれるそうです。
実行するコマンドをユーザが追加・削除するには以下の方法があります。
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/crontab と同様の記述形式で、起動する曜日(dow)と実行するコマンド(command)の間にユーザ名(user)を入れて書いた設定ファイルを /etc/cron.d/ ディレクトリに置きます。
/etc/crontab でデフォルト設定されている起動時刻でよければ、/etc/cron.{ hourly | daily | weekly | monthly } いずれかのディレクトリに実行ファイルを置きます。
ブラウザ 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 を使いたいんです。
flashplugin-nonfree をインストールします。Macromedia から Flash Player(flash_player_?_linux.tar.gz) をダウンロードし /usr/lib/mozilla-firefox/plugins/ にプラグインをインストールしてくれます。
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
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 を扱えるように 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)
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 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)
電源アダプタの抜き差しにより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 にマウント。