LFC1
から、FC2へのアップグレード
2004年5月17日に、FedoraCore2
がリリースされたので、FC1で運用していたCF-T2をFC2へとアップグレードしました。
以下その際のメモです。
Key word: Linux, Fedora Core 2, FC2, Let's note, CF-T2
FC3情報
と
りあえず、アップグレード
XKB
関連のエラーが出る
日本語入力の設定
kernelの設定
GNOME
のメニューをいじる
Suspendについて
CPUFreqについて
SynapticsのTouchpadを
使う
yumで
freshrpmsを利用する
kinput2
が起動しなくなった
USB
接続SDカードリーダをVMWareに認識させる
(Linuxのusb-storageドライバーから特定のデバイスだけを外す)
とりあえず、アップ
グレード
Fedoraのミラーサイトか
ら、DVDのISOイメージをダウンロードしてきて、DVD-Rに焼きました。
ただしこのDVDイメージはやたらに大きい(4.4GB)ので、ダウンロードには苦労しました。
ダウンロードが完了したら、md5sum等で必ずチェックしましょう。
DVD-Rに焼き付けるのには、cdrecord-ProDVDを
利用しました。
FedoraCoreにおけるDVD作成のわかりやすい解説が、ここにあります。
作成したDVDでブートすると、まずブート時のオプションを聞かれます。
ここで、普通はそのまま[Enter]を押してしまうのですが、それではすぐにカーネルパニックを起こしてしまいます。
そこで、最初のプロンプトに、
linux acpi=off
と入力して[Enter]を押します。
カーネルパニックの原因は、CF-T2のACPIとFC2のインストーラに付いてくるカーネルとの相性が悪いことにあるようです。
あとは通常通りに、アップデートを行います。
一つ注意することは、ブートローダの更新をしないようにすることです。これは、kernel-2.6.xに存在するバグで、ブートローダをアップデートす
ると、デュアルブートの他OS(WinXP等)が起動しなくなることがあります(その他、パーティションの切り直しなどもNGです)。
デュアルブートにしていない場合は気にしなくてよいでしょう。
アップデートは1時間ちょっとで終了します。
再起動する際、kernelにオプションとして、acpi=offを渡すことを忘れないでください。
そうしないと起動中にハングします。
一旦起動したら、/boot/grub/grub.confの該当項目に、acpi=offを付け足します。
例) kernel /boot/vmlinuz-2.6.5-1.358 ro root=LABEL=/ rhgb acpi=off
XKB関連のエラーが
出る
インストール後にまず気付いた問題は、gdmからログインした際、XKBに関するエラーダイアログが大量に出ることです。これを直すためには、次の行を
/etc/X11/XF86ConfigのInputDeviceセクションに追加します。
Option "XkbRules" "xorg"
/etc/X11/XF86Configが無い場合は、/etc/X11/xorg.confを編集します。
または、手動で上記のファイルを編集する代わりに、
system-config-display
をrootとして実行し、ディスプレイ関連の設定を行った後に終了するという手もあります。
日本語入力の設定
FC2では、デフォルトの日本語入力方法がIIIMFというものになっています。
私は、Wnn7を使っているので、ここに書いた方法
とまったく同じ方法で、kinput2+Wnn7へと変更しました。
kernelの
設定
毎度のことながら一番面倒で、しかし面白いのがkernelの設定です。
今回私は試行錯誤の末、Vanilla kernel (kernel.orgで配布されている、一番標準的なkernel) を使うことにしました。
FC2付属のカーネルも悪くないのですが、私の環境では次のような問題が発生しました。
それは、無線LANの問題です。
CF-T2内蔵の無線LANアダプタはIntel PRO/Wireless LAN 2100 3B Mini PCI
Adapterというものです。これまではこのアダプタのために、driverloaderという有料の
Wrapper経由でWindowsのドライバーを用いていました。しかし、FC2のカーネルではこのdriverloaderがアダプタを認識してくれ
ないという問題が発生しました。
原因は、カーネルのスタックサイズにあります。FC2のカーネルはスタックサイズが4kBに制限されています(普通は8kB)。
Windowsのドライバーは概して大きなスタックサイズを要求するので、4kBでは足りなくなってしまったわけです。
この問題の解決方法はいくつか考えられます。
一つは、ここで開発されている、Linuxネイティブの
ドライバーを用いる方法です。このプロジェクトはIntelの支援を受けて行われており、将来的にはこのドライバーを利用するのが望ましいでしょう。しか
し、現状はまだベータ段階なので問題が起きるかも知れません。私は、driverloaderを購入してしまったので、今のところそちらを使い続けるつも
りです。
もう一つは、FC2のカーネルソースからスタックサイズを変更するパッチを取り除いて、コンパイルし直すというものです。
その方法は下に
書いておきます。ただし、FC2のカーネルにはその他にもいろいろパッチが当たっており、私の経験では再構築をするといろいろと不具合がでました(gdm
を再起動するとハングする等、、)。
そこで、私はVanilla kernelをダウンロードしてきてコンパイル、インストールすることにしました。
以下、私の行った手順です。
linux-2.6.6.tgzをダウンロードして、/usr/src/に展開。
cd linux-2.6.6
make gconfig #ここは、menuconfigでもxconfigでもお好きなように
カーネルコンフィギュレーションの設定
make bzImage;make modules;make modules_install;make install
make clean
再起動
私が行ったカーネルコンフィギュレーションについて要点を述べます。
Processor familyはPentiumMにしました。
PowerManagementで、ACPIを入れても、Vanilla kernelの場合はブート時にハングするようなことがありませんでした。
(追記:でもACPIを有効にするとなぜか画面輝度の調節が
キーボードから出来なくなるので、acpi=offで使ってます。)
Software Suspendや、pmdiskは試しに有効にしてみました。ただし、どちらもうまく動きませんでしたが、、。
kernel hackingのUse 4Kb for kernel stacks instead of 8Kbはoffにします。
あとは必要のないデバイスドライバーをひたすら削ります。そうしないとコンパイルに時間がかかるし、不要なモジュールでディスク容量が食われてしまうから
です。
あとからコンパイルするモジュール類
VMWare:
vmware-config.plで、問題なくコンパイルできます。
Driverloader:
dldrconfigで、問題なくコンパイルできます。なお、私は試していませんが、NdisWrapperというものがあるようです。
Driverloaderのような働きをするもので、フリーです。
Madwifi:
問題なくコンパイルできます。
FC2のカーネルからスタックサイズ制限を外す
まず、カーネルソースのSRPM(kernel-2.6.5-1.358.src.rpm)をダウンロードしてからインストールします。
その後、/usr/src/redhat/SPECS/kernel-2.6.specを編集します。
具体的には、以下の二つの行をコメントアウトします(実際には二つの行は離れています)。
Patch200: linux-2.6.5-nostack.patch
%patch200 -p1
これで、スタックサイズを制限するパッチが当られないようになります。
その後、
#rpmbuild -bb kernel-2.6.spec
で、rpmパッケージを作り、
#cd /usr/src/redhat/RPMS/i386/
#rpm -ivh kernel-source-2.6.5-1.358.root.i386.rpm
で、カーネルソースをインストールします。
その後、
#cd /ur/src/linux-2.6.5-1.358.root
#make gconfig
#make bzImage;make modules;make modules_install;make install
で、カーネルをインストールします。
GNOMEのメ
ニューをいじる
FC1から引き続き、FC2でもGNOMEのメニューは編集できません。
/etc/gnome-vfs-2.0/modules/default-modules.conf
を
/etc/gnome-vfs-2.0/modules/default-modules.conf.with-menu-editing
で置き換えれば可能ですが、Fedora開発者に何らかの意図があってメニュー編集が無効にされているのでしょうから、変更しない方が安全そうです。
そこで今回も、メニューを手作業で編集する方法をとります。
編集するファイルは、/etc/xdg/menus 以下にあります。
まず、applications.menu が、以
前説明した /etc/X11/desktop
-menu/applications.menuに対応します。
ただし書式が少し変わっていて、次のような置き換えを行ってください。
旧書式 -> 新書式
<Folder> -> <Menu>
<Desktop> -> <Directory>
<Query> -> <Include>
<Keyword> -> <Category>
また、<DontShowIfEmpty/>は使えないようです。
全体として、意味が明確になった感じです。
また、*.desktopファイルの置場所ですが、以前は自動的に~/.gnome2/vfolders/以下から読み込んでくれたのですが、今度は読み
込んでくれないようです。そこで、<LegacyDir>
</LegacyDir>で囲んで読み込ませるディレクトリを指定します。
FC2のデフォルトでは、/etc/X11/applnkが読み込まれるようなので、私はここに自分の*.desktopファイルを置くことにしました。
applications.menuの編集方法はFC1とあまり変わりませんが、<MergeFile>
favorites.menu</MergeFile>というように指定することで、自分で作成したfavorites.menuファイルを
読み込ませることができます。私は、favorites.menuに自分用のメニューを書いて、それを上記のように読み込ませることにしました。
Suspendについて
Kernel-2.6には、標準でswsuspとpmdiskというサスペンド機構がついてきます。ただし、FC2のデフォルトカーネルでは無効になって
いるので、カーネル再構築の必要があります。
私が試した限り、CF-T2ではどちらもうまく動作しませんでした。原因は今のところ不明で、深くも追求していません。
そこで、software suspend 2を試すこと
にしました。私が行った手順は次の通り。
まず、こ
こからsoftware-suspend-2.0.0.80-for-2.6.6.tar.bz2をダウンロードしてきます。ただし、このサイト
の更新は早いので、最新版をダウンロードした方がよいでしょう。
その後、次のようにパッチを当ます。
tar xjfvp software-suspend-2.0.0.80-for-2.6.6.tar.bz2
cd /usr/src/linux-2.6.6/
patch -p1 <
/path/to/software-suspend-2.0.0.80-for-2.6.6/20-software-suspend-linux-2.6.6-test8-whole
patch -p1 <
/path/to/software-suspend-2.0.0.80-for-2.6.6/21-software-suspend-linux-2.6.6-test9-incremental
patch -p1 <
/path/to/software-suspend-2.0.0.80-for-2.6.6/21-software-suspend-linux-2.6.6-test10-incremental
patch -p1 <
/path/to/software-suspend-2.0.0.80-for-2.6.6/30-software-suspend-core-2.0-whole
patch -p1 <
/path/to/software-suspend-2.0.0.80-for-2.6.6/31-software-suspend-core-2.0.0.72-incremental
patch -p1 <
/path/to/software-suspend-2.0.0.80-for-2.6.6/31-software-suspend-core-2.0.0.73-incremental
patch -p1 <
/path/to/software-suspend-2.0.0.80-for-2.6.6/31-software-suspend-core-2.0.0.74-incremental
patch -p1 <
/path/to/software-suspend-2.0.0.80-for-2.6.6/31-software-suspend-core-2.0.0.75-incremental
patch -p1 <
/path/to/software-suspend-2.0.0.80-for-2.6.6/31-software-suspend-core-2.0.0.76-incremental
patch -p1 <
/path/to/software-suspend-2.0.0.80-for-2.6.6/31-software-suspend-core-2.0.0.77-incremental
patch -p1 <
/path/to/software-suspend-2.0.0.80-for-2.6.6/31-software-suspend-core-2.0.0.78-incremental
patch -p1 <
/path/to/software-suspend-2.0.0.80-for-2.6.6/31-software-suspend-core-2.0.0.79-incremental
patch -p1 <
/path/to/software-suspend-2.0.0.80-for-2.6.6/31-software-suspend-core-2.0.0.80-incremental
その後、CONFIG_SOFTWARE_SUSPEND2=yとCONFIG_SOFTWARE_SUSPEND_SWAPWRITER=yを有効にし
てカーネルを再構築します。
また、suspend、resumeを安定に行うためには、出来るだけモジュールで読み込まれる機能を減らした方がよいようです。
そこで、lsmodで現在読み込まれているモジュールの一覧を確認します。そして、それらのモジュールのうちカーネルに組み込むことができるものはできる
だけ組み込むように.configを設定します。
kernelにはブートパラメータとして、resume2=/dev/hda#を与えます。#はスワップパーティションの番号に置き換えます。
例えば、/dev/hda5がスワップパーティションの場合、resume2=/dev/hda5とします。
システムをsuspendするためには、上記のダウンロードサイトから、suspend.shをダウンロードしてきて、
suspend.sh --install
をrootで実行します。
その後、hibernateコマンドを実行すると、suspendが行われます。
再度電源を入れると自動的にresumeが始まります。
もしresumeして欲しくない場合はカーネルにnoresume2というオプションを付けて起動します。
私の環境では現在のところ、resume後に3Dアクセラレーション(DRI)を利用するソフトがハングするという問題があります(例えば
glxgear)。普通ノートパソコンで3Dバリバリのソフトを動かすことは少ないでしょうが、私は出先で3次元CADを使ったりするのでちょっと不便で
す。でも、suspendが全くできないよりずいぶんマシです。それからこの問題は、一度gnomeからログアウトして再ログインすると直るようです。
私は、suspend.pyというpythonスクリプトを書いて、これを呼び出すメニューエント
リーを追加して使っています。
suspend.pyは本当にsuspendをするかどうかを訊ねるダイアログを開き、hibernateスクリプトを呼び出すだけのものです。
これを利用するには、sudoが(少なくともhibernateに関しては)パスワード無しで使えないとだめです。
CPUFreqについて
kernel-2.6では、CPUFreq機能が標準でついてきます。これは、CPUの周波数を動作状況に応じて変更し、バッテリーの持ちをよくするため
の機能ですが、CPUの負荷やバッテリー残量などを監視して動作周波数を切り替えるためのデーモンプログラムが必要です。
FC2には、デフォルトでcpuspeedというプログラムが付属してきますが、これは設定の幅が狭く、特にバッテリー駆動時はcpu負荷が高くても最低
の動作周波数に設定されてしまうので、いまいちです。そこで、私が前から使っているcpufreqdをインストールすることにしました。
http://sourceforge.net/projects/cpufreqdか
ら最新版をダウンロードしたら、./configure;make;make installで、インストールします。
その後、/usr/local/etc/cpufreqd.confを編集します。tarボールの中にサンプルが含まれているので参考にします。
気をつける点は、kernel-2.6の場合、minfreqとmaxfreqには実際の周波数を入れなければならないということです。
%ではだめです。自分のCPUがサポートしている周波数に関しては、
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
で、調べることができます。
cpufreqdを自動起動するためのinitスクリプトの例をここに置いておきます。
Synaptics
のTouchpadを使う
CF-T2には、Synaptics社製のTouchpad(タッチパッド)が付いてきます。しかし、FC2のデフォルトではカーソルを動かすことしか出
来ず、タッピングをクリックとして認識させたり、パッドのエッジを撫でることで画面をスクロールさせるというような便利な機能は使えません。そこで、これ
らの機能を使うための設定を説明します。
最初にカーネルの設定です。device driverのinputセクションで、
CONFIG_INPUT_EVDEVとCONFIG_MOUSE_PS2が有効になっていることを確認します。
もし有効になっていなかったら有効にしてカーネルをコンパイルし直します。
次に、http://w1.894.telia.com/~u89404340/touchpad/index.htmlに
行って、最新版のSynapticsドライバーをダウンロードしてきます。これは、カーネルドライバーではなくて、X.Org/XFree86用のドライ
バーモジュールです。
次のようにしてドライバーをインストールします。
tar xjfvp synaptics-0.13.2.tar.bz2
cd synaptics-0.13.2/
make
sudo make install
次に、/etc/X11/xorg.confを編集します。(xorg.confが無い人は/etc/X11/XF86Config)
ここでは、USB接続のマウスとタッチパッドを両方使うための設定を説明します。
まず、ServerLayoutセクションに、
InputDevice "Mouse0" "CorePointer"
InputDevice "TouchPad" "AlwaysCore"
を追加します(すでにCorePointerやAlwaysCoreが存在する場合はそれを編集)。
そして、Moduleセクションに、
Load "synaptics"
を追加します。
最後に、次のような設定を追加します(すでに同様のセクションがある場合は編集)。
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "IMPS/2"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
EndSection
Section "InputDevice"
Identifier "TouchPad"
Driver "synaptics"
Option "Protocol" "auto-dev"
Option "Device" "/dev/psaux"
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"
EndSection
これで、Synaptics製Touchpadの便利な機能が使えるようになります。
例えば:
ダブルタッピングでドラッグ動作
2本の指でタップすると中ボタンクリック
3本の指でクリックすると右ボタンクリック
指をパッドの右端で滑らせると縦スクロール
指をパッドの下端で滑らせると水平スクロール
等です。qsynapticsと
いうソフトを使えばいろいろな設定をGUIで変更できます。
また、キーボード入力中にタッチパッドに触れてしまい、カーソルが変なところに飛んでしまうことで悩んでいる方は、syndaemonを起動しておくとよ
いでしょう。これはキー入力を監視し、入力中はタッチパッドを無効にするデーモンです。上記ドライバーをインストールすると自動的にインストールされま
す。
yum
でfreshrpmsを利用する
FC2には様々なソフトがパッケージとして用意されていますが、Debian等と比べて十分な種類が揃っているとは言い難いです。
必要なソフトがFC2のパッケージに入っていないとき便利なのが、freshrpmsで
す。ここでは、FC2には入っていないけどよく利用されるソフトがFC2用のRPMとして提供されています(FC1用や、RH9用などもある)。
自分でソースからコンパイルするのが面倒な人は、まず自分の探しているソフトがfreshrpmsにあるかどうかを確かめるのがよいでしょう。
ところで、私はRPMパッケージのインストールにyumを利用しているので、yum install hogehoge
と打ったときに、freshrpmsからもパッケージを検索してくれると有難いです。そのためには、/etc/yum.confに以下の3行を加えるだけ
です。
[freshrpms]
name=Fedora Core $releasever - $basearch freshrpms
baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/freshrpms
kinput2
が起動しなくなった
今朝気付いたらkinput2がログイン時に起動しなくなっていました。
原因は、xinitrcパッケージをアップデートしたことにあるようです。
対策は簡単で、/etc/X11/xinit/xinitrc.d/xinputを xinput.shへと改名するだけです。
/etc/X11/xinit/xinitrcが変更されて、*.shという名前のスクリプト以外は実行されなくなったのが原因のようです。
USB
接続SDカードリーダーをVMWareに認識させる
(Linux
のusb-storageドライバーから特定のデバイスだけを外す)
私はJ-SH53という携帯電話を使っているのですが、この電話にはMP3プレーヤーの機能がついています。
本体を使って、オーディオケーブルや光ディジタルケーブル経由で音楽を録音することもできるのですが、それには音楽の再生時間と同じだけの時間が必要にな
ります。これは面倒くさいので、パソコンからSDメモリカードに直接MP3を書き込むことにしています。
その際、この携帯で再生可能なのはセキュアMP3と呼ばれる特殊な形式のMP3なので、まず普通のMP3から変換してやらなければなりません。また、セ
キュアMP3は著作権保護用のファイル形式なので、SDカードへの転送も著作権保護機能対応のSDカードリーダを使わなければなりません。
しかし残念ながら私は、Linux上でセキュアMP3を扱えるソフトを知りません。また、著作権保護機能付SDカードリーダーも、普通のSDカードリーダ
としてなら使うことが出来ますが、その著作権保護機能をLinuxから利用することはできないようです。
ということで、携帯への音楽転送には、Windowsを使うしかないようです。
しかし、私はLinuxを常用しているので、音楽転送のためにわざわざWindowsを起動するのは面倒です。
普段私は、どうしてもWindowsが必要になった際、VMWareを利用しています。今回の音楽転送もVMWareから行えないかどうか頑張ってみるこ
とにしました。
1. あっさりできる
じつはこれ、意外なほど実現できます。
まず、VMWareから、ローカルのHDDにWindowsをインストールします。
私の場合は、Panasonic製SD-JukeboxというソフトとBN-SDCEADというUSB接続のSDカードリーダーを利用しているので、SD
-Jukeboxをインストールし、カードリーダーを接続します。この時、usb-storageドライバーが読み込まれていると、Linuxにこのデバ
イスを占有されてしまい、VMWareで利用することができません(SCSIディスクとしては利用できますが)。そこで、
rmmod usb-storage
として、このモジュールを外しておきます。
これで、SDカードリーダがVMWare上でUSBデバイスとして認識され、Windowsのドライバーがこのリーダーの面倒をみることになるので、著作
権保護機能も利用できます。
2. しかし難しい問題もある
さて、上記の方法で音楽転送はめでたく実現されたわけですが、私には不満がありました。それは、「CF-T2のハードディスクは決して大きくないので、
ローカルディスクにWindowsをインストールしたくない」、というものです。
そこで、USB2.0接続の外付けHDDを買ってきて、そこにWindowsをインストールすることにしました(もちろんVMWare経由で)。
まず、このディスクをUSBポートに差します。すると、usb-storageドライバーが読み込まれて、SCSIディスクとして利用可能になります
(/dev/sda)。
私は、VMWareのraw-diskモードで/dev/sda1にWindows2000をインストールしました。
さて、ここからが問題です。上では、SDカードリーダーをVMWareに認識させるため、usb-storageドライバーをunloadしました。
しかし、今回はUSB-HDDを利用するためにこのドライバが必要です。usb-storageをunloadしてしまったらそもそもVMWareが立ち
上がりません(VMWareの起動中にrmmodしたらどうなるのか、怖くて試していませんが、おそらくモジュールが使用中だからunload出来ないと
言われるでしょう)。つまり、USB-HDDとUSB-SDカードリーダのどっちをとるかという話になるわけです。どっちも取りたい私は、次のようにして
解決をしました。
この問題を解決するためには、usb-storageドライバーが、SDカードだけ手放してくれればよいわけです。
それを行うには、USBDEVFS_DISCONNECTというioctl要求を、/proc/bus/usb/BBB/DDDに送れば良いようです。こ
こで、BBBとDDDはSDカードリーダのバス番号及びデバイス番号です。
これを行うための、usbdetachという簡単なプログラムを書いてみました。usbdetach.cを
ダウンロードし、コンパイルして使ってください。コンパイルは、
gcc -o usbdetach usbdetach.c
とするだけです。使い方はソースの冒頭に書いてあります。
このプログラムを使えば、usb-storage以外のドライバーにもデバイスを解放するように指令できるはずです。
なお、BBBとDDDの値を調べるための簡単な方法は、usbutils
に含まれる、lsusbコマンドを利用することです。
それ以外にも、/proc/bus/usb/devicesを読めば分かります。
interface番号は、ほとんどの場合0で問題ないでしょう。これも/proc/bus/usb/devicesに書いてあります。
usbdetach /proc/bus/usb/004/003 0
などとして、SDカードリーダを解放し、VMWareの[VM]->[USB Port 1]
からデバイスを選ぶとSDカードリーダがVMWareで認識されます。