~nabeken/diary/

Gentoo Linux(6年くらい)とFreeBSD(1年くらい)とOpenBSD(新参者)を使う日々。


IHANet BGP peering overview

Gentoo Linux on MacBook (Late 2008)

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ヶ月目になりました。

  • 見た目はものすごく格好いい
  • 手首周辺がちょうどエッヂの部分になるので、手になにか巻かないと痛い
    • ここはもうすこしなめらかに加工してほしかったな
    • ↑慣れた
  • MacBook + EMONSTER + Bluetooth DUN は最高の組み合わせ
    • 電車でささっと広げて、接続して、ささっと閉じればいい
    • 最近、ようやくサスペンドも普通の速度になり快適度が格段に向上しました。
    • また、Bluetooth も問題なく動作するようになり、今度は逆に ppp の時間にイライラする次第 :-(
  • 2kgはやはり少し重い
    • しかし、薄いので鞄にもすっぽりと収まるので携帯性は格段に向上している
  • ディスプレイの硝子加工はなんとも言えず。電車で使う時は反射が辛いので、別途シートを貼るべき

普段は Gentoo Linux + X11 + awesome で生活しているので、その環境を構築しました。最近、iPhoneを購入したため、Mac OS Xの利用頻度が上がっています。

Mac OS X と Gentoo Linux のデュアルブートを構築しました。ディスクは Mac OS X に 250GB, grub 用に 100MB, のこりすべてを LVM 領域に割り当てました。

Mac OS X のインストーラで初期化する

ディスクをすべて初期化した上で、パーティションを切り直したい場合は、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では辛くなってきたのでメモリを増設しました。その様子は別記事でまとめています。

rEFlt http://refit.sourceforge.net/

EFI のブートローダとして rEFlt を導入します。rEFlt で起動すると gptsync というツールが使えるようになります。これはその名の通り、 GPT スキームを MBR へ同期するツールです。GNU Parted で GPT でパーティションを操作し、最後に gptsync することで、BIOSからも、EFIからも矛盾なく操作できるようになります。

これだけでも rEFlt 導入の価値があります。

Live CD (Gentoo Linux 2008.0-r1 amd64)

`c' を押しながら、MacBook を起動させると、CDからブートします。有線接続であれば、この状態で DHCP でアドレスが取得できました。

ひとまず、distccを入れてから、通常のインストール手順を踏みます。

ビルド中はさすがにファンが回っていますが、ラップトップはほんのり熱い程度でまったく問題ありません。以前使っていた Latitude X1 に比べれば雲泥の差です……。

Linux における MacBook (Late 2008) のハードウェア動作状況 (The devices running under linux)

2009/06/11現在、以下のデバイスが out-of-the-box (標準カーネル)で動作します。(Following devices work well in the out-of-the-box)

  • Linux shiho.tokyo.tknetworks.org 2.6.30-macbook #1 SMP PREEMPT Wed Jun 10 12:57:56 JST 2009 x86_64 Intel(R) Core(TM)2 Duo CPU P7350 @ 2.00GHz GenuineIntel GNU/Linux
  • ネットワーク系完動 (wlan, lan, bluetooth)
  • グラフィックス系完動 (nvidia-drivers)
  • サスペンド完動 (suspend to ram)
  • CPUの周波数制御は apci-cpufreq で
  • トラックパッド完動 (trackpad works well with bcm5974 on Linux 2.6.30)

定番の dmesg はこちらに。https://projects.tsuntsun.net/~nabeken/dist/dmesg-2.6.29-rc3-macbook

NIC

NIC は forcedeth で動きます(Gigabit Ethernetですが、menuconfigでは、Fast Ethernet扱いなので注意)。実測ですが、40MB/s (320Mbps) は余裕で出ています。

wireless

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起動時に正しくアドレスが設定されない問題 )

Bluetooth

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 できることを確認しました。

内蔵の iSight

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 でのストリーミングも行えました。

Synaptics

トラックパッドのドライバーは 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)

synapics の設定

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

LCD Backlight

ようやく、ディスプレイの明るさを調節できるようになりました。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

サスペンド (Suspend to RAM)

最新の 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

VGA は nvidia が Linux 向けに提供しているドライバで動作します。ただし、カーネルのバージョンに依存しています。180.22であれば、2.6.29-rc4まで対応しています。

VGA (nouveau)

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

更新履歴

  • libdrmのパッケージ名指定を修正 (thanks to @kjm) (Sat, 27 Feb 2010 14:57:44 +0900)
  • 2.6.33のnouveau話を追加 (Thu, 25 Feb 2010 19:46:34 +0900)
  • HALでsynapticsを設定する方法を追加 (Fri, 19 Jun 2009 00:52:47 +0900)
  • URLを追加 (Thu, 11 Jun 2009 17:53:00 +0900)
  • 2.6.30がリリースされたのに併せ、古いカーネルに関する記述を削除 (Thu, 11 Jun 2009 14:32:53 +0900)
  • 2.6.30でパッチが不要になることを追記 (Mon, 4 May 2009 21:54:34 +0900)
  • ハードディスク交換時の注意を追加 (Mon, 4 May 2009 21:48:37 +0900)
  • MAINT cosmetic (Tue, 7 Apr 2009 23:06:24 +0900)
  • 2.6.29.x での状況を追加 (Mon, 30 Mar 2009 17:48:58 +0900)
  • 2.6.29-rc4対応 (Thu, 12 Feb 2009 19:43:06 +0900)
  • 簡潔にまとめ直した (Thu, 5 Feb 2009 19:04:11 +0900)