Posted on Sat Feb 27 14:57:44 +0900 2010 by nabeken
MacBook に Gentoo Linux をインストールしました。2010/02/25 現在、 2.6.33 で安定しています。この記事は MacBook/MacBook-late-2008-my-1st-impression の簡潔なまとめです。
キーボードは US にしました。viを使う場合、USのほうがよいです。3年保証はひとまず見送りました。
使用して15ヶ月目になりました。
普段は Gentoo Linux + X11 + awesome で生活しているので、その環境を構築しました。最近、iPhoneを購入したため、Mac OS Xの利用頻度が上がっています。
Mac OS X と Gentoo Linux のデュアルブートを構築しました。ディスクは Mac OS X に 250GB, grub 用に 100MB, のこりすべてを LVM 領域に割り当てました。
ディスクをすべて初期化した上で、パーティションを切り直したい場合は、OS Xのインストーラーを使うのが便利です。いろいろ実験したのをさっぱり消すため、私はこの方法を取りました。
まず Mac OS X のDVDから起動します。インストール先の選択になったら、一番上のバーのディスクユーティリティを起動させて、ここでパーティションを切り直します。何分割でも構いませんが、2分割にして、OS X用のみ用意します。(どうせあとで、OS X以外のために gparted で切り直します)
適当な Live CD で起動後、最初のパーティション(OS Xが入っている)以外を削除して、必要なパーティションを作ります。その後、rEFItで gptsync を実行すれば作業は完了です。(grubはhd0にインストール。)
160GBでは足りなくなったため、500GBへ交換しました。交換には、 T6 サイズのトルクスドライバーが必要です。古い機種では T8 とありますが、Late 2008 では T6 サイズになります。
また、交換後起動が遅くなる現象に見舞われました。これは PRAM のリセットで解決しました。
2GBでは辛くなってきたのでメモリを増設しました。その様子は別記事でまとめています。
EFI のブートローダとして rEFlt を導入します。rEFlt で起動すると gptsync というツールが使えるようになります。これはその名の通り、 GPT スキームを MBR へ同期するツールです。GNU Parted で GPT でパーティションを操作し、最後に gptsync することで、BIOSからも、EFIからも矛盾なく操作できるようになります。
これだけでも rEFlt 導入の価値があります。
`c' を押しながら、MacBook を起動させると、CDからブートします。有線接続であれば、この状態で DHCP でアドレスが取得できました。
ひとまず、distccを入れてから、通常のインストール手順を踏みます。
ビルド中はさすがにファンが回っていますが、ラップトップはほんのり熱い程度でまったく問題ありません。以前使っていた Latitude X1 に比べれば雲泥の差です……。
2009/06/11現在、以下のデバイスが out-of-the-box (標準カーネル)で動作します。(Following devices work well in the out-of-the-box)
定番の dmesg はこちらに。https://projects.tsuntsun.net/~nabeken/dist/dmesg-2.6.29-rc3-macbook
NIC は forcedeth で動きます(Gigabit Ethernetですが、menuconfigでは、Fast Ethernet扱いなので注意)。実測ですが、40MB/s (320Mbps) は余裕で出ています。
wireless は Broadcom の official driver (nvidiaと同じ方式で、バイナリの中間ドライバ、そして、カーネルとの接着部分しかオープンになっていないタイプ) で動くことを確認しました。ただし、wirelessの方は 2.6.25 まで、それ以上の場合は修正が必要となります。
Ubuntu のパッケージでは、2.6.28 でもビルド、動作することを確認しました。(参考: https://launchpad.net/ubuntu/+source/linux-restricted-modules )ただし、やや不安定です。(参考: Broadcom 製 STA ドライバで、IPv6 multi prefix 環境においてIF起動時に正しくアドレスが設定されない問題 )
2.6.30 でトラブルなく動作することを確認しました。
# hciconfig hci0: Type: USB BD Address: 00:23:12:5D:27:8C ACL MTU: 1021:5 SCO MTU: 64:1 UP RUNNING PSCAN ISCAN RX bytes:1125 acl:0 sco:0 events:45 errors:0 TX bytes:913 acl:0 sco:0 commands:45 errors:0 # hciconfig -a hci0: Type: USB BD Address: 00:23:12:5D:27:8C ACL MTU: 1021:5 SCO MTU: 64:1 UP RUNNING PSCAN ISCAN RX bytes:1125 acl:0 sco:0 events:45 errors:0 TX bytes:913 acl:0 sco:0 commands:45 errors:0 Features: 0xff 0xff 0x8f 0xfe 0x9b 0xff 0x79 0x83 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 Link policy: RSWITCH HOLD SNIFF PARK Link mode: SLAVE ACCEPT Name: 'shiho.tokyo.tknetworks.org' Class: 0x080100 Service Classes: Capturing Device Class: Computer, Uncategorized HCI Ver: 2.1 (0x4) HCI Rev: 0xfb LMP Ver: 2.1 (0x4) LMP Subver: 0x21a2 Manufacturer: Broadcom Corporation (15)
となり、rfcomm 経由で ppp できることを確認しました。
dmesg の通り、きちんと認識されています。
uvcvideo: Found UVC 1.00 device Built-in iSight (05ac:8507) input: Built-in iSight as /class/input/input7
設定のキモは UVC (USB Video Class) と、iSight の firmware の組み込みです。
# grep -i isight .config CONFIG_USB_ISIGHTFW=m # grep -i usb_video_class .config CONFIG_USB_VIDEO_CLASS=m CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
動作確認は mplayer で行えます。v4lを有効にした mplayer で
# mplayer tv://0
とすれば、あなたの顔が映るはずです :-)また、 ustream でのストリーミングも行えました。
トラックパッドのドライバーは 2.6.30 でマージされましたので、追加パッチは不要となりました。 (new bcm5974 driver for MacBook unibody is available in mainlline kernel. This fix is contained in kernel version 2.6.30 higher; http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=158e928741e58eb4aa379da422290c10fef23f00)
config で CONFIG_MOUSE_BCM5974=m にするだけで完了です。これにより、カーネルへのパッチが不要となりました。(Setting CONFIG_MOUSE_BCM5974=m then you can use your trackpad without any patches)
http://bitmath.org/code/bcm5974-dkms/
最新の Xorg では HAL を使い各種デバイスを制御します。HAL版の設定ファイルは以下のようになります。
<?xml version="1.0" encoding="ISO-8859-1"?> <deviceinfo version="0.2"> <device> <match key="info.capabilities" contains="input.touchpad"> <merge key="input.x11_driver" type="string">synaptics</merge> <merge key="input.x11_options.SendCoreEvents" type="string">true</merge> <merge key="input.x11_options.GrabEventDevice" type="string">1</merge> <merge key="input.x11_options.MultiFingerButton" type="string">2</merge> <merge key="input.x11_options.PressureMotionMinZ" type="string">10</merge> <merge key="input.x11_options.FingerLow" type="string">60</merge> <merge key="input.x11_options.FingerHigh" type="string">100</merge> <merge key="input.x11_options.FingerPress" type="string">256</merge> <merge key="input.x11_options.SHMConfig" type="string">true</merge> <merge key="input.x11_options.TapButton1" type="string">1</merge> <merge key="input.x11_options.TapButton2" type="string">3</merge> <merge key="input.x11_options.TapButton3" type="string">2</merge> <merge key="input.x11_options.MinSpeed" type="string">0.8</merge> <merge key="input.x11_options.MaxSpeed" type="string">1.2</merge> <merge key="input.x11_options.AccelFactor" type="string">0.10</merge> <merge key="input.x11_options.HorizScrollDelta" type="string">30</merge> <merge key="input.x11_options.VertScrollDelta" type="string">5</merge> <merge key="input.x11_options.MaxTapMove" type="string">100</merge> <merge key="input.x11_options.MaxTapTime" type="string">223</merge> <merge key="input.x11_options.MaxDoubleTapTime" type="string">200</merge> </match> </device> </deviceinfo>
基本的には xorg.conf の値を移行しただけです。このファイルを /etc/hal/fdi 以下に保存し、haldを再起動させれば完了です。なお、xorg.confから Input 系の設定ファイルはすべて除去します。
私が現在使っている設定ファイルは xorg.conf です。随分スマートになりました。
サンプルが上のサイトにあります。これはそのまま使えます。うまく認識されると以下のような Xorg.0.log になります。
# grep -i synaptics /vag/log/Xorg.0.log (**) |-->Input Device "Synaptics Touchpad" (II) LoadModule: "synaptics" (II) Loading /usr/lib64/xorg/modules/input//synaptics_drv.so (II) Module synaptics: vendor="X.Org Foundation" (II) LoadModule: "synaptics" (II) Reloading /usr/lib64/xorg/modules/input//synaptics_drv.so (II) Synaptics touchpad driver version 0.15.2 (--) Synaptics Touchpad auto-dev sets device to /dev/input/event3 (II) Synaptics Touchpad: x-axis range 0 - 1280 (II) Synaptics Touchpad: y-axis range 0 - 800 (--) Synaptics Touchpad touchpad found (**) Synaptics Touchpad: always reports core events (II) evaluating device (Synaptics Touchpad) (II) XINPUT: Adding extended input device "Synaptics Touchpad" (type: TOUCHPAD) (II) Synaptics Touchpad: x-axis range 0 - 1280 (II) Synaptics Touchpad: y-axis range 0 - 800 (--) Synaptics Touchpad touchpad found
該当部分の dmesg は以下の通り。
# dmesg | grep bcm5974 input: bcm5974 as /class/input/input3 usbcore: registered new interface driver bcm5974
ようやく、ディスプレイの明るさを調節できるようになりました。nvclock 0.8 beta4 を使うと、X 上でも明るさを調節できるようになりました。(参考: https://help.ubuntu.com/community/MacBook%20Aluminum?#Screen%20brightness%20adjustment )
調節は以下のように行います。
$ nvclock -S 15 Changing Smartdimmer level from 15% to 15% New Smartdimmer level: 15% $ nvclock -S 100 Changing Smartdimmer level from 15% to 100% New Smartdimmer level: 100%
nvclock単体では値を保存しないため、以下のようなスクリプトをサスペンド、xsession時に仕込んでいます。
#!/bin/sh function setdimmer { TMP=$(cat /usr/local/tmp/.nvclock) nvclock -S $TMP } if [[ -z $1 ]]; then echo 'usage: ./nvclock2 15' echo 'usage: ./nvclock2 restore' exit 1 fi case "$1" in "restore") setdimmer ;; *) echo $1 > /usr/local/tmp/.nvclock setdimmer ;; esac
最新の nvidia-drivers (180.22) を用いることで、Max OS X と同等か、それよりも早くレジュームするようになりました。これは素晴しいです!ちなみに、このドライバは 2.6.29-rc2 対応なのを確認しています。
あらかじめ、 acpid をインストールして、起動しておきます。ディスプレイの開閉、電源ボタンの操作なので ACPI のイベントが発生します。そのイベントに応じたスクリプトにサスペンド処理を追加します。
まず、 /etc/acpi/events/lm_lid を作ります。
# cat /etc/acpi/events/lm_lid event=button[ /]lid action=/etc/acpi/actions/lm_lid.sh %e
続いて、そのアクションを実行するスクリプトを作ります。(以下のスクリプトは 2.6.28 を対象としています。)それ以外の場合、煩雑な処理が必要となります。
また、まだ過渡期のためか、一部ドライバを読み込んでいる場合、サスペンドに失敗します。(zd1211rwなど)
# cat /etc/acpi/actions/lm_lid.sh #!/bin/bash STATE=$(cat /proc/acpi/button/lid/LID0/state | cut -d' ' -f7) case "$STATE" in closed) echo mem > /sys/power/state ;; open) logger -p debug -t acpi "resumed from C3" ;; esac
VGA は nvidia が Linux 向けに提供しているドライバで動作します。ただし、カーネルのバージョンに依存しています。180.22であれば、2.6.29-rc4まで対応しています。
2.6.33でnouveauのdriがマージされました。nouveauを試したところ、動いてるようなので手順を紹介します。もちろん、Gentooです。
まずカーネルを用意します。リリース即日に gentoo-sources-2.6.33 が出たので、それを使用します。
# emerge gentoo-sources
nouveauの設定はstagingにあります。
# grep -i nouveau .config CONFIG_DRM_NOUVEAU=m CONFIG_DRM_NOUVEAU_BACKLIGHT=y CONFIG_DRM_NOUVEAU_DEBUG=y
また、フレームバッファのデバイスドライバをすべて無効にします。(c.f. http://en.gentoo-wiki.com/wiki/Nouveau)
カーネルの次はユーザランドです。
# emerge nouveau-firmware # emerge '=x11-libs/libdrm-2.4.18_pre20100211'
libdrmのバージョンに注意します。xorg.confの設定は以下。
compositionもサスペンド問題なしでした。また、キーボードからの彩度調整も可能となりました。これは地味に便利です。これでnvidia-driversのご機嫌を伺う必要がなくなりました!あとはbroadcom-staですね……。
http://delicious.com/nabekenta/MB