2010年8月31日火曜日

r8168 on kernel-2.6.35

前の記事で r8168 ドライバが kernel-2.6.35 ではコンパイルできないと書いていたが、
エラーメッセージを書いてなかったので同じところではまった人のためにメモっておく。

r8168-8.018.00 を kernel-2.6.35 上でコンパイルすると、以下のようなエラーになる。
これ対処するパッチはこのへん

まあ、そのうち公式でも対応するんだろうけど。

$ make modules
make -C src/ modules
make[1]: Entering directory `/var/tmp/r8168-8.018.00/src'
make -C /lib/modules/2.6.35-gentoo/build SUBDIRS=/var/tmp/r8168-8.018.00/src modules
make[2]: Entering directory `/usr/src/linux-2.6.35-gentoo'
  CC [M]  /var/tmp/r8168-8.018.00/src/r8168_n.o
/var/tmp/r8168-8.018.00/src/r8168_n.c: In function ‘rtl8168_get_ethtool_stats’:
/var/tmp/r8168-8.018.00/src/r8168_n.c:1745: warning: ‘DMA_nnBIT_MASK’ is deprecated
/var/tmp/r8168-8.018.00/src/r8168_n.c: In function ‘rtl8168_init_board’:
/var/tmp/r8168-8.018.00/src/r8168_n.c:6517: warning: ‘DMA_nnBIT_MASK’ is deprecated
/var/tmp/r8168-8.018.00/src/r8168_n.c:6520: warning: ‘DMA_nnBIT_MASK’ is deprecated
/var/tmp/r8168-8.018.00/src/r8168_n.c: In function ‘rtl8168_hw_start’:
/var/tmp/r8168-8.018.00/src/r8168_n.c:7096: warning: ‘DMA_nnBIT_MASK’ is deprecated
/var/tmp/r8168-8.018.00/src/r8168_n.c:7098: warning: ‘DMA_nnBIT_MASK’ is deprecated
/var/tmp/r8168-8.018.00/src/r8168_n.c: In function ‘rtl8168_set_rx_mode’:
/var/tmp/r8168-8.018.00/src/r8168_n.c:8919: error: ‘struct net_device’ has no member named ‘mc_count’
/var/tmp/r8168-8.018.00/src/r8168_n.c:8928: error: ‘struct net_device’ has no member named ‘mc_list’
/var/tmp/r8168-8.018.00/src/r8168_n.c:8928: error: ‘struct net_device’ has no member named ‘mc_count’
/var/tmp/r8168-8.018.00/src/r8168_n.c:8929: error: dereferencing pointer to incomplete type
/var/tmp/r8168-8.018.00/src/r8168_n.c:8930: error: dereferencing pointer to incomplete type
make[3]: *** [/var/tmp/r8168-8.018.00/src/r8168_n.o] Error 1
make[2]: *** [_module_/var/tmp/r8168-8.018.00/src] Error 2
make[2]: Leaving directory `/usr/src/linux-2.6.35-gentoo'
make[1]: *** [modules] Error 2
make[1]: Leaving directory `/var/tmp/r8168-8.018.00/src'
make: *** [modules] Error 2

2010年8月29日日曜日

Fiono 330 [ ION + Atom330 ] を買った


主に動画を見ているデスクトップPCがうんともすんとも言わなくなってしまったので、
最近はやりの、Atomマシンを買ってみた。



Atom330 を積んだマシンで、だいたい2万円程度。
メモリとかディスクは昔 ThinkPadX61 につんでいたものが余っていたのでそれを使った。

で、使ってみた感想としては、Realtek の NIC が糞でした。
ネットワークがいつのまにか使えなくなる現象に陥る。インタフェイスを down/up すればとりあえず復旧するのだが、頻繁に発生しすぎて使えない。
あと、[Bug 538920 - r8169 netdev timeout when aspm is enabled] このバグと同じメッセージが出力されてたりした。
pcie_aspm=off をオプションに加えればつかえたよ!という書き込みもあるけど、ダメだった。

ドライバが悪いのかと思って、Kernel 付属の r8169 から realtek が配布している r8168 に変更してみたけど、こんどはハングアップするようになってしまった。
なお、kernel-2.6.35 ではそのままコンパイルが出来なかったのでパッチを書いた。

= lspci
00:00.0 Host bridge: nVidia Corporation MCP79 Host Bridge (rev b1) 
00:00.1 RAM memory: nVidia Corporation MCP79 Memory Controller (rev b1)
00:03.0 ISA bridge: nVidia Corporation MCP79 LPC Bridge (rev b2)
00:03.1 RAM memory: nVidia Corporation MCP79 Memory Controller (rev b1)
00:03.2 SMBus: nVidia Corporation MCP79 SMBus (rev b1)
00:03.3 RAM memory: nVidia Corporation MCP79 Memory Controller (rev b1)
00:03.5 Co-processor: nVidia Corporation MCP79 Co-processor (rev b1)
00:04.0 USB Controller: nVidia Corporation MCP79 OHCI USB 1.1 Controller (rev b1)
00:04.1 USB Controller: nVidia Corporation MCP79 EHCI USB 2.0 Controller (rev b1)
00:06.0 USB Controller: nVidia Corporation MCP79 OHCI USB 1.1 Controller (rev b1)
00:06.1 USB Controller: nVidia Corporation MCP79 EHCI USB 2.0 Controller (rev b1)
00:08.0 Audio device: nVidia Corporation MCP79 High Definition Audio (rev b1)
00:09.0 PCI bridge: nVidia Corporation MCP79 PCI Bridge (rev b1)
00:0b.0 IDE interface: nVidia Corporation MCP79 SATA Controller (rev b1)
00:0c.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
00:10.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
00:15.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
00:16.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
00:17.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
00:18.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
03:00.0 VGA compatible controller: nVidia Corporation ION VGA (rev b1)
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)

= cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 28
model name      : Intel(R) Atom(TM) CPU  330   @ 1.60GHz
stepping        : 2
cpu MHz         : 1599.833
cache size      : 512 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl tm2 ssse3 cx16 xtpr pdcm movbe lahf_lm
bogomips        : 3199.66
clflush size    : 64
cache_alignment : 64
address sizes   : 32 bits physical, 48 bits virtual
power management:

×4

2010年8月15日日曜日

[memo] LXC ゲストから USB デバイスへアクセス

LXCゲスト内でUSBデバイスなどの物理デバイスにアクセスするには、config ファイルに許可するデバイス番号を記述すればいいらしい。
USBデバイスすべてへのアクセスを許可する場合は、以下の記述を追加する。

lxc.cgroup.devices.allow = c 189:* rwm

特定のデバイス(バス)のみ許可したい場合は、*を適宜書き換えればいいだろう。

ゲスト内では udev が動作しないため手動でデバイスノードを作る必要がある。
GUEST# mkdir -p /dev/bus/usb/001
GUEST# mknod /dev/bus/usb/001/001 c 189 0
GUEST# chgrp -R usb /dev/bus/usb/
GUEST# ls -l /dev/bus/usb/001
total 0
crw-rw-r-- 1 root usb         189, 0 2010-08-12 01:37 001

lsusb コマンドで表示してみる。

GUEST# emerge -av usbutils
GUEST# lsusb
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

参考:
[lxc-users] usb devices


#記事書いてから思ったけど、ゲストじゃなくてコンテナって読んだ方がいいんだろか。

2010年8月12日木曜日

awesome のデフォルトレイアウトの変更

awesome-3.x からだったか、正確なバージョンは忘れてしまったが、
デフォルトのレイアウトがフローティングになってしまっていて非常に不便だった。

先日、デフォルトのレイアウトを変更する方法が判ったのでメモっておく。

rc.luaの以下の設定を変更する。

変更前:
 -- {{{ Tags
 -- Define a tag table which hold all screen tags.
 
 tags = {}
 for s = 1, screen.count() do
     -- Each screen has its own tag table.
     tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s)
 end

変更後:
 -- {{{ Tags
 -- Define a tag table which hold all screen tags.
 
 tags = {}
 for s = 1, screen.count() do
     -- Each screen has its own tag table.
     tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[3])
 end

layouts[3] は少し上に記述されている、layouts配列から好きな物を選んで記述する。

[gentoo] pitivi 起動時のエラー

GentooLinux上で pitivi を起動しようとしたところ、以下のようなエラーが出て起動できなかった。

$ pitivi
ERROR:dbus.proxies:Introspect error on :1.3:/org/freedesktop/Hal/Manager: dbus.exceptions.DBusException: org.freedesktop.DBus.Error.AccessDenied: Rejected send message, 1 matched rules; type="method_call", sender=":1.40" (uid=1000 pid=11904 comm="/usr/bin/python2.6) interface="org.freedesktop.DBus.Introspectable" member="Introspect" error name="(unset)" requested_reply=0 destination=":1.3" (uid=0 pid=4269 comm="/usr/sbin/hald))
Traceback (most recent call last):
  File "/usr/bin/pitivi", line 118, in 
    _run_pitivi()
  File "/usr/bin/pitivi", line 113, in _run_pitivi
    sys.exit(ptv.main(sys.argv))
  File "/usr/lib64/pitivi/python/pitivi/application.py", line 357, in main
    ptv = InteractivePitivi()
  File "/usr/lib64/pitivi/python/pitivi/application.py", line 237, in __init__
    Pitivi.__init__(self)
  File "/usr/lib64/pitivi/python/pitivi/application.py", line 138, in __init__
    self.deviceprobe = get_probe()
  File "/usr/lib64/pitivi/python/pitivi/device.py", line 69, in get_probe
    return HalDeviceProbe()
  File "/usr/lib64/pitivi/python/pitivi/device.py", line 154, in __init__
    for dev in self.manager.FindDeviceByCapability("video4linux"):
  File "/usr/lib64/python2.6/site-packages/dbus/proxies.py", line 68, in __call__
    return self._proxy_method(*args, **keywords)
  File "/usr/lib64/python2.6/site-packages/dbus/proxies.py", line 140, in __call__
    **keywords)
  File "/usr/lib64/python2.6/site-packages/dbus/connection.py", line 622, in call_blocking
    message, timeout)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.AccessDenied: Rejected send message, 1 matched rules; type="method_call", sender=":1.40" (uid=1000 pid=11904 comm="/usr/bin/python2.6) interface="org.freedesktop.Hal.Manager" member="FindDeviceByCapability" error name="(unset)" requested_reply=0 destination=":1.3" (uid=0 pid=4269 comm="/usr/sbin/hald))

DBus経由でHALへのアクセス権がないためのエラー?のようなので調べていくと、/etc/dbus-1/system.d/hal.conf が怪しそうということが判った。

"org.freedesktop.Hal.Manager" で探していくと、root ユーザと plugdev グループに所属しているユーザはアクセス権があるように見えたので、plugdev グループに入れてみたが同じエラーがでてしまった。

ネット上で色々調べていくと、全く同じ事例は見つからなかったが、FindDeviceByCapability関係で似たような物があったので参考に、hal.conf に以下の記述を plugdev グループのポリシーに追加した。

<allow send_destination="org.freedesktop.Hal" send_interface="org.freedesktop.Hal.Device.Video4Linux">
</allow>

これで旨く起動できることを確認した。

2010年8月11日水曜日

[memo] LXC - Linux Containers on GentooLinux

GentooLinux上でLXCを使うときのメモ。

Kernel Config
* General
 * Control Group support                                                                                                                                                 
  -> namespace cgroup subsystem
  -> cpuset support
  -> Group CPU scheduler
  -> control group freeze subsystem
  -> Basis for grouping tasks (Control Groups)
  -> Simple CPU accounting
  -> Resource counters
  -> Memory resource controllers for Control Groups
  -> Namespace support
    -> UTS namespace
    -> IPC namespace
    -> User namespace
    -> Pid namespace
    -> Network namespace

cgroupのマウント
$ sudo mkdir /cgroup
$ sudo mount -t cgroup cgroup /cgroup
$ sudo vim /etc/fstab
cgroup                     /cgroup        cgroup           default     0 0



app-emulation/lxc
2010/08/11現在 mask されている。
- app-emulation/lxc-0.7.1 (masked by: package.mask)
/usr/portage/profiles/package.mask:
# Diego E. Pettenò (23 Oct 2009)
#
# Starting work toward supporting Linux Containers in Gentoo.
# Currently, it's a tentative ebuild based upon Tiziano Müller
# (dev-zero)'s overlay, with some differences from the upstream paths
# and handling.
#
# Will be unmasked when felt “ready” (and openrc'll support it as
# guest).

ので、unmask 。
$ echo app-emulation/lxc | sudo tee -a /etc/portage/package.unmask
$ sudo emerge -av lxc


ゲストの作成
ゲストは GentooLinux とする。
Debian を使いたい場合は、debootstrap とか。

HOST# export TARGET_DIR=/var/lxc/rootfs.gentoo
HOST# cd ${TARGET_DIR}
HOST# tar -xjpf stage3-*.tar.bz2
HOST# mkdir usr/portage
HOST# mount -o bind /usr/portage ${TARGET_DIR}/usr/portage
HOST# chroot ${TARGET_DIR} /bin/bash
# env-update
# source /etc/profile
GUEST# PS1="GUEST# "

LXCゲストは baselayout-2 で対応しているらしい。
GUEST# mkdir /etc/portage
GUEST# echo sys-apps/baselayout >> /etc/portage/package.keywords
GUEST# echo sys-apps/openrc >> /etc/portage/package.keywords
GUEST# emerge -u baselayout
GUEST# dispatch-conf

コンテナ用のデバイスファイルを作成します。tarball から展開した /dev は一度削除。
GUEST# rm -rf /dev
GUEST# mknod /dev/urandom c   1  9 
GUEST# mknod /dev/tty1    c 136  1 
GUEST# mknod /dev/tty2    c 136  4 
GUEST# mknod /dev/tty3    c 136  5 
GUEST# mknod /dev/tty4    c 136  6 
GUEST# mknod /dev/tty5    c   4  5 
GUEST# mknod /dev/tty6    c   4  6 
GUEST# mknod /dev/tty7    c   4  7 
GUEST# mknod /dev/tty8    c   4  8 
GUEST# mknod /dev/tty9    c   4  9 
GUEST# mknod /dev/tty10   c   4 10 
GUEST# mknod /dev/tty11   c   4 11 
GUEST# mknod /dev/tty12   c   4 12 
GUEST# mknod /dev/mem     c   1  1 
GUEST# mknod /dev/kmem    c   1  2 
GUEST# mknod /dev/port    c   1  4 
GUEST# mknod /dev/tty     c   5  0 
GUEST# mknod /dev/psaux   c  10  1 
GUEST# mknod /dev/null    c   1  3 
GUEST# mknod /dev/zero    c   1  5 
GUEST# mknod /dev/full    c   1  7 
GUEST# mknod /dev/random  c   1  8 
GUEST# mkdir /dev/pts
GUEST# mknod /dev/pts/ptmx c 5 2
GUEST# ln -s /dev/pts/ptmx /dev/ptmx 
GUEST# mkdir /dev/shm
GUEST# touch /dev/.keep

IPアドレスは、ゲスト内で設定しなくてもLXCが設定してくれるが、 ゲスト内で設定しても良いかもしれない(未確認)。
ルートの設定はしてくれないので、ゲスト内の設定を書く。

GUEST# nano -w /etc/conf.d/net
config_eth0=( "noop" )
routes_eth0=( "default via 192.168.0.1"
              "default via fe80::1" )

GUEST# rc-update add net.eth0 default

その他、resolv.conf や localtime 等はご自由に。
次に、inittab をいじる。TERMINAL以下をコメントアウトして、1行挿入する。

GUEST# nano -w /etc/inittab
# TERMINALS
c0:12345:respawn:/sbin/agetty 38400 console
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
#c2:2345:respawn:/sbin/agetty 38400 tty2 linux
#c3:2345:respawn:/sbin/agetty 38400 tty3 linux
#c4:2345:respawn:/sbin/agetty 38400 tty4 linux
#c5:2345:respawn:/sbin/agetty 38400 tty5 linux
#c6:2345:respawn:/sbin/agetty 38400 tty6 linux

ここで一端ホスト側に戻り、LXCのゲスト設定を作る。
ゲストの名前は "gentoo" とする。

HOST# lxc-create -n gentoo
HOST# vim /etc/lxc/gentoo/config
lxc.utsname = gentoo
lxc.tty = 4
lxc.pts = 1024
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lan0
lxc.network.hwaddr = 02:00:00:01:01:01
lxc.network.ipv4 = 192.168.0.101/24
lxc.network.ipv6 = 2001:db8:1::101/64
lxc.network.name = eth0
lxc.mount = /etc/lxc/gentoo/fstab
lxc.rootfs = /var/lxc/rootfs.gentoo

ゲスト起動前にホスト側でマウントするところは lxc.mount で指定したファイルに記述する。

HOST# vim /etc/lxc/gentoo/fstab
none /var/lxc/rootfs.gentoo/proc proc defaults 0 0
/usr/portage /var/lxc/rootfs.gentoo/usr/portage none bind,ro 0 0
none /var/lxc/rootfs.gentoo/usr/portage/distfiles tmpfs defaults 0 0

起動してみる。
HOST# lxc-start -n gentoo
INIT: version 2.87 booting
Loading /lib64/rc/console/keymap

  OpenRC 0.6.1 is starting up Gentoo Linux (x86_64) [LXC]

Press I to enter interactive boot mode

* /proc is already mounted, skipping
* Caching service dependencies ...
[ ok ]
* Mounting /dev/pts ...
[ ok ]
* Mounting /dev/shm ...
[ ok ]
* Setting hostname to lxc-gentoo ...
[ ok ]
* Configuring kernel parameters ...
[ ok ]
* Creating user login records ...
[ ok ]
* Cleaning /var/run ...
[ ok ]
* Wiping /tmp directory ...
[ ok ]
* Setting terminal encoding [UTF-8] ...
[ ok ]
* Setting keyboard mode [UTF-8] ...
[ ok ]
* Loading key mappings [us] ...
[ ok ]
* Updating /etc/mtab ...
[ ok ]
* Bringing up interface lo
*   Caching network module dependencies
*   127.0.0.1/8 ...
[ ok ]
*   Adding routes
*     127.0.0.0/8 via 127.0.0.1 ...
[ ok ]
* Initializing random number generator ...
[ ok ]
INIT: Entering runlevel: 3
* Mounting network filesystems ...
[ ok ]
* Starting local ...
[ ok ]


This is gentoo.unknown_domain (Linux x86_64 2.6.34-gentoo) 13:37:01

gentoo login:  root
Password: 
Last login: Wed Aug 11 13:37:59 JST 2010 on console
gentoo ~ # ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   3888   620 ?        Ss   13:39   0:00 init [3]  
root       387  0.2  0.0  56040  1468 console  Ss   13:39   0:00 /bin/login -- 
root       388  0.5  0.0  17728  1840 console  S    13:40   0:00 -bash
root       392  0.0  0.0  14804   980 console  R+   13:40   0:00 ps aux
gentoo ~ #