Thinkpad T60にGentooをインストールする

前置き

これまでにGentooのインストールに関する記事を3本書きました。

しかし、やや情報が古くなってきているので、2012年版のGentooインストールにチャレンジしつつ、手順をまとめてみたいと思います。

本文

準備・使うもの

  • ThinkPad T60 2623-M3J
  • sda1にWindowsXPをインストール済み
  • MBMでマルチブートする予定
  • LiveDVD 2012.0のisoファイルをダウンロードしてDVDに焼く
  • stage3とportageの最新tarボールを公式サイトから入手してUSBメモリへ保存
  • stage3-i686-20120306.tar.bz2
  • portage-20120319.tar.bz2
  • WindowsのCrystalMarkで、デバイス名などを調べておく

余談ですが、LiveDVDは、KWinというウィンドウマネージャを採用しているようです。ターミナルが動けば良かったので、ウィンドウマネージャとしての使い勝手は良く分かりません。ただLiveDVDには、Ctrl+Bを押すたびにベーコン(BACON)の写真が出る、というとんでもないイタズラが仕込まれているので、bashのカーソル移動が苦痛でした。emacs使いには耐えられないでしょう。

起動からchrootまで

  • LiveDVDで起動
  • 起動オプションは無し
  • 無線LANのスイッチは切っておく(ONのままだと、起動途中で固まるかも)
  • 起動途中にkeymapを聞かれるので、jpと入力

オプション無しで起動すると、keymapファイルのロードに失敗するみたいです。結局、英語キーボード配列で操作するハメになりました。インストール後に気付いたのですが、noxオプション(X無し)を付けて起動すると、日本語キーボード配列で操作できるようです。

LiveDVDにはpciutilsが入っているので、lspciでPCIデバイスを調査しておきます。また、Dマイナー志向さんの記事を参考に、gccのオプションを決めます。

$ sudo su -                  # パスワード不要。
# lspci
00:00.0 Host bridge: Intel Corporation Mobile 945GM/PM/GMS, 943/940GML and 945GT Express Memory Controller Hub (rev 03)
00:01.0 PCI bridge: Intel Corporation Mobile 945GM/PM/GMS, 943/940GML and 945GT Express PCI Express Root Port (rev 03)
00:1b.0 Audio device: Intel Corporation N10/ICH 7 Family High Definition Audio Controller (rev 02)
...
# ./gcc-native.sh
-march=core2 -mcx16 -msahf --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=4096 -mtune=core2

fdiskで/dev/sdaにパーティションを切ります。今回は、ルート(/)とswapの2区画としました。

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1              63    35169119    17584528+   7  HPFS/NTFS/exFAT
/dev/sda2   *    35169120    70820703    17825792   83  Linux
/dev/sda3        70820704   225167039    77173168    5  Extended
/dev/sda4       225167040   234435599     4634280   12  Compaq diagnostics
/dev/sda5        70822752    71871327      524288   82  Linux swap / Solaris
  • sda2をID=82(Linux)とし、アクティブに
  • sda5をID=83(Linux swap)
  • sda1はWindowsXP
  • sda4はWindowsXPのリカバリイメージ
# mke2fs -j /dev/sda1        # どうせならext4を使うべきだったか…。
# mkswap /dev/sda5
# swapon /dev/sda5
# mount /dev/sda1 /mnt/gentoo
# date                       # 時計が合ってるか確認。この時点ではUTCでOK。

chrootに備えて、DLしておいたstage3とportageを解凍します。

# cd /mnt/gentoo             # ここを、chroot後のルート(/)とする。
# tar xvjpf /media/XXXXX/stage3-i686-20120306.tar.bz2
# tar xvjf /media/XXXXX/portage-20120319.tar.bz2 -C usr
# vi etc/make.conf
    CFLAGS="-march=core2 -mcx16 -msahf --param l1-cache-size=32 \"
        "--param l1-cache-line-size=64 --param l2-cache-size=4096 -mtune=core2"
    CXXFLAGS="${CFLAGS}"
    CHOST="i686-pc-linux-gnu"
    MAKEOPTS="-j3 -s"
    LINGUAS="ja en"

    USE="X -kde -gnome cjk nls udev python consolekit policykit lxde \"
        "gudev postgres jpeg png freetype truetype mp3 alsa sound"

    INPUT_DEVICES="evdev"
    VIDEO_CARDS="radeon"

    GENTOO_MIRRORS="ftp://ftp.iij.ad.jp/pub/linux/gentoo/"
    SYNC="rsync://rsync.jp.gentoo.org/gentoo-portage"

chrootします。

# cp -L /etc/resolv.conf /mnt/gentoo/etc
# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev
# chroot /mnt/gentoo /bin/bash
# env-update
# source /etc/profile
# export PS1="(chroot) $PS1"

いろいろemerge(Part1)

これから、いろいろemergeしますが、そのつど、make.confのUSEフラグを微調整します。前述のmake.conは、今回の一連の作業後の最終バージョンです。

また場合によっては、アプリ個別のUSEフラグやkeywordを定義する必要があります。/etc/portage/package.useの最終版は以下の通りです。

net-wireless/wpa_supplicant wps madwifi
app-editors/vim perl ruby python
media-libs/libpng apng
media-fonts/mplus-outline-fonts ipafont
x11-libs/qt-core qt3support
x11-libs/qt-gui qt3support
x11-libs/qt-sql qt3support
dev-lang/ruby doc
sys-power/cpufreqd pmu
dev-lang/scala binary

同様に、/etc/portage/package.keywordsの最終版は以下の通りです。

=dev-lang/io-2009.01.02-r2 ~x86
=dev-lang/scala-2.9.1 ~x86

では、emergeしていきましょう。

# emerge --sync              # Portageツリーの同期。
# eselect news read new      # 「お知らせを読め」と出たら読む。
# emerge --oneshot portage   # emergeコマンド自体を更新。
# emerge vim                 # chroot後はviが使えないので、ここでemerge。
# vi /etc/locale.gen
    en_US ISO-8859-1
    ja_JP.UTF-8 UTF-8
# locale-gen
# cp /usr/share/zoneinfo/Japan /etc/localtime
                             # シンボリックリンクにすべき?

カーネルのビルド

gccやカーネルのソースをemergeします。待ち時間、長し、です。

# emerge gcc glibc linux-headers linux-firmware gentoo-sources
# etc-update                 # (A)

(A)のetc-updateは、emerge後に設定ファイルの衝突が報告された場合に実施します。ここでは、/etc/locale.genが衝突しました。差異を見て適当にマージします。

カーネルをコンフィグしてビルドします。

# cd /usr/src/linux
# make menuconfig
# make && make modules_install
# cp arch/i386/boot/bzImage /boot/gentoo-take1

参考に、コンフィグ内容の最終版を添付します。適当です。

各種設定

# vi /etc/fstab
    /dev/sda2       /           ext3    noatime   0 1
    /dev/sda5       none        swap    sw        0 0
    /dev/cdrom      /mnt/cdrom  auto    noauto,ro 0 0
# vi /etc/conf.d/hostname
    hostname="hogehoge"
# vi /etc/conf.d/net
    config_eth0="dhcp"
    dhcpcd_eth0="-t 10"
    dhcp_eth0="release nontp nonis"
        # releaseで、現IPアドレスを解放。
        # nodtpとnonisは、「ntpとnisのconfファイルを更新するな」の意味。
        # /etc/resolv.confは更新して欲しいので、nodnsは指定しない。
# vi /etc/issue
    This is \n (\s \m \r) \t
# cd /etc/init.d
# ln -s net.lo net.eth0      # これ、昔は必要なかったはず…。
# rc-update add net.eth0 default
# vi /etc/hosts
    127.0.0.1    hogehoge localhost
# passwd                     # rootのパスワード。
# vi /etc/rc.conf
    UNICODE="yes"
    EDITOR="/usr/bin/vim"    # (A)
# vi /etc/conf.d/keymaps
    keymap="jp106"
# vi /etc/conf.d/hwclock     # 昔はclockというファイル名だったが…。
    clock="local"            # RTCはUTCではなくローカルタイムよ、という意味。

(A)で環境変数EDITORを設定していますが、実はこれ、効きません(/etc/profileで上書きされるっぽい)。そこで、/etc/profile.d/editor-config.shを作成しました。このスクリプトは/etc/profileの最後にロードされます。

export EDITOR="/usr/bin/vim"

いろいろemerge(Part2)

# emerge syslog-ng logrotate
# rc-update add syslog-ng default
# emerge dhcpcd              # rc-updateへのaddは不要。

logrotateをemergeすると、cron.dailyにローテート用のスクリプトが登録されます。

grubの設定とリブート

# emerge grub
# vi /boot/grub/grub.conf
    default 0
    timeout 3
    title Gentoo Linux take1
    root (hd0,1)
    kernel /boot/gentoo-take1 root=/dev/sda2
# grep -v rootfs /proc/mounts >/etc/mtab
# /sbin/grub                 # MBRではなく、PBRにgrubを組み込みます。
    root (hd0,1)
    setup (hd0,1)
    quit
# exit
# umount -a
# reboot

時計

前述の/etc/localtimeと/etc/conf.d/hwclockの設定により、Linuxのシステムクロックは以下のように制御されます。

  • PCのRTCをローカルタイムと解釈する
  • タイムゾーンはJST
  • 起動時に、RTCをJSTと解釈して、システムクロックに設定

こうすれば、Windowsの挙動と同じなのでデュアルブートにも都合が良いようです。

さらに、オンラインの場合は、起動時にntpでシステムクロックを調整しましょう。

# emerge ntp                 # NTPクライアント機能のみ使う。
# vi /etc/conf.d/ntp-client
    NTPCLIENT_OPTS="-s -b -u \
        0.jp.pool.ntp.org 1.jp.pool.ntp.org \
        2.jp.pool.ntp.org 3.jp.pool.ntp.org"
# rc-update add ntp-client default

シャットダウン時にシステムクロックをRTCへコピーするよう、/etc/conf.d/hwclockを設定することも可能みたいです。

無線LAN

ThinkPad T60の内蔵無線LANは、AtherosのAR5418というチップでした(lspciやCrystalMarkの結果より)。このチップはカーネルによりサポートされているので、コンフィグ時にCONFIG_ATH9Kをyにしておきましょう。起動後にdmesgを見ると、認識されてるっぽかったです。たぶん、デバイス名はath9kです。

WEPの場合、あとの設定はeth0と同様に、/etc/conf.d/netに記述します。また、ifconfigの代わりにiwconfig(wireless-toolsパッケージ)を使うみたいです。

# emerge wireless-tools                          # iwconfigコマンド。
# ln -s net.lo net.wlan0
# vi /etc/conf.d/net
    modules="iwconfig"
    key_YOURESSID1="s:YOURPASSKEY enc open"
    preferred_aps="'YOURESSID1'"
    associate_order="forcepreferredonly"
# /etc/init.d/net.wlan0 start                    # ここで無線LEDが点灯。
# rc-update del net.eth0 default
# rc-update add net.wlan0 default

LEDは点きっぱなしでした(通信時でも点滅しない)。

一方、WPA-PSKの場合は、iwconfigの代わりにwpa_supplicantを使うよう、/etc/conf.d/netを修正し、さらにwpa_supplicant専用の設定ファイルを作成します。

# emerge wpa_supplicant
# vi /etc/conf.d/net
    modules="wpa_supplicant"
    wpa_supplicant_wlan0="-Dwext"      # ーDはドライバ名。wextは汎用ドライバか?
# vi /etc/wpa_supplicant/wpa_supplicant.conf
    ctrl_interface=/var/run/wpa_supplicant
    eapol_version=1
    ap_scan=1
    fast_reauth=1
    network={
        ssid="YOURESSID2"
        proto=WPA
        key_mgmt=WPA-PSK
        pairwise=CCMP           # AESのこと?
        group=CCMP
        psk="YOURPASSPHRASE"
        priority=1
    }

wpa_supplicant.confのサンプルは、/usr/share/doc/wpa_supplicant-X.Y.Z/wpa_supplicant.conf.bz2にあります。

これで再起動するか、net.wlan0をrestartすればOKだと思います。「wlan0を開始したけどinactiveよ」みたいなwarningが出ますが気にしなくて良さそうです。

/etc/init.d/net.wlan0[2277]: WARNING: net.wlan0 has started, but is inactive
/etc/init.d/netmount[2415]: WARNING: netmount is scheduled to start when net.wlan0 has started

システム管理系のemerge

# emerge gentoolkit          # equeryコマンドなど。
# emerge pciutils            # lspciコマンド。
# emerge usbutils            # lsusbコマンド。
# emerge dcron
# rc-update add dcron default
# crontab /etc/crontab
# emerge mlocate             # slocateの後釜?
# vi /etc/updatedb.conf
    PRUNEPATHSに /mnt を追加。
# updatedb &
# emerge sudo
# visudo
    rootとwheelメンバーはsudo可能とする。
# emerge bind-tools          # nslookupやhostコマンド。
# emerge samba
# vi /etc/samba/smb.conf
	[global]
	workgroup = GPSOFT
	dos charset = CP932
	unix charset = UTF-8
	hosts allow = 192.168.XXX.XXX/255.255.XXX.XXX
# smbpasswd -a YOURNAME
# /etc/init.d/samba start
# rc-update add samba default

mlocateをemergeすると、cron.dailyにDB更新スクリプトが登録されます。

ユーザ登録

# useradd -m -G users,wheel,adm,audio -s /bin/bash YOURNAME
# passwd YOURNAME

X、ウィンドウマネージャ系のemerge

この先は、カーネルコンフィグが重要です(つまり、デフォルトのままでは動かない可能性があります)。今回はATIなので、frame buffer関連のデバドラを無効にしました。また、CONFIG_USB_SUSPENDをyにしました。ThinkPad T60のグラフィックス(Radeon X1300)は古いタイプなので、radeon-ucodeやlinux-firmwareをemergeする必要はないようです。

make.confは前述の通りです。最近のXは、halじゃなくてudevを使うそうです(どっちにしろ、詳しいことは知りませんが…)。

では、Xをemergeしましょう。覚悟して下さい。

# emerge xorg-server         # xorg-x11でもいいけど、巨大すぎるらしい。
# env-update
# source /etc/profile
# su - YOURNAME
$ startx

一瞬、真っ黒な画面が出て終わりましたが、それで正解のようです(twmとxtermをemergeしておけば、もう少しマシなテストができるらしいですが面倒なのでスキップしました)。ただし、vesa、fbdev、synapticsなどでエラーが出ているようです。

Failed to load module "vesa"
Failed to load module "fbdev"
Query no Synaptics: 6003C8
SynPS/2 Synaptics TouchPad Unable to query/intialize Synaptics hardware.
PreInit returned 11 for "SynPS/2 Synaptics TouchPad"
/etc/X11/xinit/xinitrc: line 59: twm: command not found
/etc/X11/xinit/xinitrc: line 63: exec: xterm: not found

vesaとfbdevについては、ドライバをemergeすれば解決です。synapticsについては後述します。

# emerge xf86-video-vesa xf86-video-fbdev

続いて、ウィンドウマネージャを入れます。今回はLXDE(Lightweight X11 Desktop Environment)を試してみます。これも覚悟が必要です。ところで、ウィンドウマネージャ(WM)とデスクトップ環境(DE)は同義なんでしょうか。

# emerge lxde-meta
# su - YOURNAME
$ vi .xinitrc
    exec startlxde
$ startx

無事、出ました。タスクバーの左から3番目のアイコンが「×」になってましたが、どうやら、ランチャパネルに、存在しないアプリのアイコンが登録されているのが原因みたいなので削除しておきました。またコンソールに、「cupsアイコンが無い」みたいなエラーが出てますが気にしないでおきます。

あとはXのコンフィグです。コンフィグファイルは/etc/X11/xorg.conf.d/の下に置くはずなんですが、存在しません。置き場が、/usr/share/X11/xorg.conf.d/に変わったみたいです。10-evdev.confと50-synaptics.confが用意されてました。デフォルトのままでも動くのですが、以下の点が気になります。

  • 英語キーボード配列になる
  • トラックポイントでスクロールできない
  • タッチパッド(UltraNav)をタップしてもクリックにならない
  • トラックポイントの感度が弱い、スピードも遅い

これらを改善するため、以下のように設定します。ちなみに、タッチパッドでは2本指スクロールが可能です。でもダブルタップの判定が厳しいです。

# cd /usr/share/X11/xorg.conf.d
# vi 10-evdev.conf
    Section "InputClass"
        Identifier "evdev keyboard catchall"
        MatchIsKeyboard "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
        Option "XkbLayout" "jp"                            # 追加。
        Option "XkbModel" "jp106"                          # 追加。
        Option "XkbOptions" "terminate:ctrl_alt_bksp"      # 追加。
    EndSection

        # ★さらに、touchpad用のセクション全体をコメントアウトすること。
# vi 40-trackpoint.conf                                    # 新規ファイル。
    Section "InputClass"
        Identifier "Trackpoint Wheel Emulation"
        MatchProduct "TPPS/2 IBM TrackPoint"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
        Option "EmulateWheel" "true"
        Option "EmulateWheelButton" "2"
        Option "ZAxisMapping" "4 5"
    EndSection
# vi 50-synaptics.conf
    Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"      # これで"Query no Synaptics"エラーが解消。
        Option "TapButton1" "1"                  # 1本指タップを左クリックとして扱う。
    EndSection

udev関連の設定は、/etc/udev/rules.d/に置くようです。ここでトラックポイントの感度とスピードを設定します。文献によっては、DRIVERSだったりATTRSだったりしますが、Sを付けないのが正解みたいでした。

# cd /etc/udev/rules.d
# vi 10-trackpoint.rules
    SUBSYSTEM=="serio",DRIVER=="psmouse",WAIT_FOR="/sys/devices/platform/i8042/serio1/serio2/sensitivity",ATTR{sensitivity}="255"
    SUBSYSTEM=="serio",DRIVER=="psmouse",WAIT_FOR="/sys/devices/platform/i8042/serio1/serio2/speed",ATTR{speed}="100"

このように書くと、Gentoo起動時にエラー(「.../serio1/sensitivityは存在しない」みたいな)が出るのですが無視っておきましょう。

[  2347.053] (II) config/udev: Adding input device SynPS/2 Synaptics TouchPad (/dev/input/event8)
[  2347.053] (**) SynPS/2 Synaptics TouchPad: Applying InputClass "touchpad catchall"
[  2347.053] (II) LoadModule: "synaptics"
...
[  2347.137] (II) config/udev: Adding input device SynPS/2 Synaptics TouchPad (/dev/input/mouse0)
[  2347.137] (**) SynPS/2 Synaptics TouchPad: Applying InputClass "touchpad catchall"
[  2347.137] (II) Using input driver 'synaptics' for 'SynPS/2 Synaptics TouchPad'

Ubuntu(というかGnomeやKDE)に比べると、LXDEのメニューは何とも寂しい限りです(期待通りです)。いじる場所は少ないのですが、LXDEのプリファレンスを探索するうちに、デスクトップの右クリックでOpenboxのポップアップメニューが出るようになってしまいました。戻そうにも、プリファレンスのダイアログが出せません。こうなったら、シェルからプリファレンスを起動しないといけません。

$ pcmanfm --desktop-pref
    # Advancedタブの"Show menus provided by window managers..."のチェックを外す。

オーディオ

今回、一番苦労したのがオーディオの設定でした。試行錯誤したので最短ルートではないかもしれませんが、以下のように落ち着きました。

  • カーネルコンフィグで、CONFIG_SND_HDA_CODEC_ANALOGをy
  • USEフラグにalsaとmp3
  • alsa-utilsとalsa-pluginsをemerge
  • ミュージックプレーヤ(今回はaudacious)をemerge
  • ユーザをaudioグループに所属させる
# emerge alsa-utils alsa-plugins
# rc-update add alsasound boot
# emerge audacious

当初、CONFIG_SND_HDA_CODEC_ANALOGではなくCONFIG_SND_HDA_CODEC_REALTEKをyにしてました。これでもdmesgにはオーディオチップを認識した形跡があったのですが、音は鳴ったり鳴らなかったりで、鳴ったとしても極端に音量不足です。どうもコーデック違いだったようで、正しいコーデックは以下のように調べることができます。

# grep Codec /proc/asound/card*/codec*
Codec: Analog Devices ID 1981

というわけで、これに近い"Build Analog Device HD-audio codec support(CONFIG_SND_HDA_CODEC_ANALOG)"を選びました。

# dmesg |grep ALSA -A 3
[    1.475553] ALSA device list:
[    1.477615]   #0: HDA Intel at 0xee400000 irq 47
[    1.479684]   #29: ThinkPad Console Audio Control at EC reg 0x30, fw 79HT50WW-1.07
# grep Codec /proc/asound/card*/codec*
Codec: Analog Devices AD1981

alsa-utilsに含まれるalsamixerでボリューム調整できます。コンフィグ用のalsaconfコマンドはオーディオチップを認識してくれませんでしたが、udevが自動設定してくれるので気にしなくて良いようです。

日本語

ポイントは以下の3点です。

  • ロケール設定
  • 日本語フォント
  • 日本語入力
# emerge mplus-outline-fonts
# cd /usr/share/X11/xorg.conf.d
# vi 01-module.conf
    Section "Module"
        Load "freetype"
    EndSection
# vi20-files.conf
    Section "Files"
        FontPath "usr/share/fonts/mplus-outline-fonts"
    EndSection
# emerge kimera anthy
# su - YOURNAME
$ vi .xinitrc
    export LANG=ja_JP.utf-8
    unset LC_ALL
    export LC_CTYPE=ja_JP.utf-8
    export GTK_IM_MODULE=xim
    export QT_IM_MODULE=xim
    export XMODIFIERS="@im=kimera"
    kimera &
    exec startlxde
$ startx

kimeraがFEPで、anthyが辞書ですかね。kimeraは、WindowsのFEPっぽいツールバーを表示してくれるので、設定が楽チンです。またanthyには予測変換機能があります。

いろいろemerge(Part3)

# emerge ruby dev-lang/io dev-lang/scala gprolog erlang clojure ghc
                             # 「7つの言語7つの世界」より。
# emerge gimp
# emerge midori
# emerge -uDN world          # 最後は、emerge worldで締めます。

scalaはビルドに失敗するのでバイナリで入れました(USE=binary)。

gimpでスクリーンショットを撮ってみました。

ss1.png ss2.png

気になること

man pageを日本語化してませんが、こちらの記事の通りでいけるはずです。

startxすると、xauthがエラーを吐きます(Xは起動するので、エラーというより警告でしょうか)。

xauth: file /home/YOURNAME/.serverauth.#### does not exist

/usr/bin/startxスクリプトの中でxauthを呼ぶ前に、.serverauth.#### をtouchしてやれば静かになるのですが、正しい解決策とは思えないので放置します。

毎回startxでWM/DEを起動するのも面倒なので、デスクトップマネージャ(DM)が欲しいところです。LXDEの兄弟のLXDMを使うのが素直な選択ですが、gentooではマスクされてました。で、代わりにslimを入れたのですが、なぜか、ログインしてもLXDEが起動しません。素の(WM/DE無しの)Xが起動しているようで、無地の黒背景に×印のマウスポインタが出るのみです。色々試したのですが、解決できていません。/etc/init.d/dbusを開始してないのが原因でした。 また、複数のXセッションを使い分けることは無さそう(というか設定に手間取りそう)なので、/etc/slim.confを以下のように編集しました。

# login_cmd           exec /bin/sh - ~/.xinitrc %session
login_cmd           exec /bin/bash -login ~/.xinitrc %session
# login_cmd           exec /bin/bash -login /usr/share/slim/Xsession %session

ファン制御やサスペンドのため、acpiやcpufreqd、hibernate-scriptなどをセットアップしたのですが、未消化です。でも、前述のdbusを開始してみたら、LXDEのログアウトメニューからサスペンドできるようになりました。

Last modified:2012/04/30 21:43:03
Keyword(s):
References:[サーバ管理・Linux関連]
This page is frozen.