ThinkPad X61にDebianをインストール

最近のDebianインストーラは優秀なので空きパーティションにインストールすれば、ちゃんとWindowsデュアルブートできるようになってる。
あと、ちょっとだけ新しいやつを使いたかったのでwheezyにしてみた。

特別にやったをことを箇条書きしてみる。

  • 空きパーティションWindows から EASEUS Partition Master で作った。このソフト凄すぎる。
  • ThinkPadトラックポイントを使えるようにした。
  • 振動時にHDDを保護するようにした。
  • バッテリー情報にアクセスできるようにした。
  • いくつか便利ソフトを入れたり、キーボート゛ショートカットを設定したり。

ThinkPadLinux情報はThinkWikiにいろいろ書いてある。


ThinkPadトラックポイントの設定

$ xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation" 8 1
$ xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Button" 8 2
$ xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Timeout" 8 200
$ xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Axes" 8 6 7 4 5

振動時のHDD保護とバッテリー情報にアクセス可能に。
振動時保護は find / した後、本体を横にしたときに表示が止まるかどうかで確認できる。

# aptitude install tp-smapi-dkms hdapsd sysfsutils
# echo tp_smapi >> /etc/modules
# echo hdaps >> /etc/modules
# modprobe -a hdaps
# /etc/init.d/hdapsd restart
# cat >> /etc/sysfs.conf << EOF
# For a LiIon battery in a Thinkpad
devices/platform/smapi/BAT0/start_charge_thresh = 50
devices/platform/smapi/BAT0/stop_charge_thresh = 80
EOF

start_charge_thresh は バッテリー残量が指定%になったら充電開始させる。
stop_charge_thresh は バッテリー残量が指定%になったら充電終了させる。

これらの情報に関してはここに詳しく書いてある。


出力画面の切り替え(ARandR)とWifiのアクセスポイント接続クライアント(wicd)

# aptitude install arandr wicd


Xfceのキーボードショートカット(音量関係)

設定マネージャ → キーボード → アプリケーションショートカットキー → 追加 → 実行したいコマンドを入力 → 割り当てたいキーを押す


こんなもんですかね。

LinuxでBrotherのプリンタを使う

Brotherのプリンターはネットワーク経由でしかもLinux対応、そしてそこそこ安いということで採用してます。
んで印刷はCUPSを使えばいいじゃんと思ってたけどBrotherのページにある例と今のCUPSの管理画面が違いすぎてとまどった。
んでブラウザからとか印刷できたので、次はPDFと思って xpdf で印刷すると "no daemon" とかでエラーになった。
調べてみると xpdf の印刷は lpr を使うけど、 lpr コマンドは cups-bsd パッケージに入ってるやつじゃないと CUPS で印刷できない罠。うーん、いろいろあるのねぇ。

# aptitude install cups cups-bsd
(lprパッケージがインストール済みならば削除していいか聞かれるので Yes)


スプール用ディレクトリが作成されているか一応確認。無ければ以下のようにして作成。

# mkdir -m 2775 /var/spool/lpd
# chown lp.lp /var/spool/lpd


Brotherのページからダウンロードしたdebファイルをインストール(lpr用とcups用両方)

# dpkg -i mfc*.deb
(64bit環境にインストールする場合は --force-architecture をつける)


http://localhost:631/ にブラウザからアクセス

その他のネットワークプリンター:    LPD/LPR ホストまたはプリンター
接続:                                    lpd://(プリンターのIP)/binary_p1

説明と場所は適当に。メーカーはBrother、モデルは使ってる型番のやつを選択。


これで綺麗に印刷できるようになった。
ただ xpdf での印刷は日本語が化けちゃうので xpdf の付属コマンド pdftops を使って

$ pdftops hoge.pdf | lpr

お茶を濁すことに。

pdftops で生成されるファイルに比べて、 xpdf で生成されるpsファイルはかなり小さい。
フォントが入ってないんじゃないかなぁと。それで化けてる予感。
まぁいいか。

emacs上でURLをクリックしたときにブラウザで開く

WindowsMeadow使ってたときは気にしなかったけど、Linux上でクリックしたらブラウザが開かなかった。
なもんで、以下を .emacs に追加。

(setq browse-url-browser-function
         (lambda (url args) (shell-command (format "/usr/bin/opera '%s'" url))))

Opera使いなのでこうやってるけど、FireFoxとかでもできるんじゃないかなぁ。

sheevaplugの中身をDebianに置き換える

初期状態ではubuntuが入っているがいい加減古い。
せっかくバージョンアップするなら使い慣れてるDebianにしようと思いやってみた。
さらにこの際なのでフラッシュメモリに特化したファイルシステムUBIFSに変更してみた。

多分DreamPlugでもほぼ同じ手順でできると思う。

参考URL
http://www.plugcomputer.org/plugwiki/index.php/SheevaPlug_Installer
http://www.plugcomputer.org/plugwiki/index.php/Installing_Debian_To_Flash

準備するもの

* sheevaplug 本体
* 作業領域として利用する512M以上のUSBメモリ(SDカードで代用可)
* ローカルネットワークのどこかで稼動しているDHCPサーバとTFTPサーバ
* sheevaplug-installer
 以下からダウンロードする。
 http://www.plugcomputer.org/index.php/us/resources/downloads?func=select&id=5
* kernel uImage
 http://sheeva.with-linux.com/sheeva/ から好きなバージョンのものをダウンロード
 ここでは 2.6.38/2.6.38.6/sheeva-2.6.38.6-uImage を選択した。
ついでに sheeva-2.6.38.6-Modules.tar.gz もダウンロードしておくとよい。
* Debian インストーラ
 以下から uImage と uInitrd をダウンロードする。
 http://d-i.debian.org/daily-images/armel/daily/kirkwood/netboot/marvell/sheevaplug/

TFTPサーバの準備

Debian なら atftpd をインストールして /etc/init.d/atftpd start すればいい。
その場合のルートディレクトリは /srv/tftp/ になる。

TFTPサーバのルートディレクトリに以下を配置

uboot.bin               # sheevaplug-installer に付属している uboot/uboot.bin
sheeva-2.6.38.6-uImage  # ダウンロードした kernel uImage
uImage                  # ダウンロードした Debian インストーラ
uInitrd                 # ダウンロードした Debian インストーラ

U-BOOT入れ替え

Marvell>> setenv ipaddr (sheevaplugのIP)
Marvell>> setenv serverip (TFTPサーバのIP)
Marvell>> tftpboot 0x0800000 uboot.bin
Marvell>> nand erase 0x0 0xa0000
Marvell>> nand write 0x0800000 0x0 0xa0000
Marvell>> reset

ここに限らず tftpboot を実行したとき "Retry count exceeded; staring again"というエラーがでることがあるが、成功するまで何度でも頑張ること。

NANDに書き込まれているカーネルを入れ替える。

Marvell>> setenv ipaddr (sheevaplugのIP)
Marvell>> setenv serverip (TFTPサーバのIP)
Marvell>> tftpboot 0x2000000 sheeva-2.6.38.6-uImage
Marvell>> iminfo
Marvell>> nand erase 0x100000 0x400000
Marvell>> nand write 0x2000000 0x100000 0x400000
Marvell>> setenv mainlineLinux yes
Marvell>> setenv arcNumber 2097
Marvell>> saveenv

Debianインストーラを実行し、USBメモリにインストール。

USBメモリをsheevaplugに挿入

Marvell>> tftpboot 0x0400000 uImage
Marvell>> tftpboot 0x0800000 uInitrd
Marvell>> setenv bootargs console=ttyS0,115200 base-installer/initramfs-tools/driver-policy=most
Marvell>> bootm 0x0400000 0x0800000

Debianのインストールが始まる。途中でUSBメモリパーティションの区切り方を聞いてくるが、default のままで行う(LVMは利用しない)。

USBメモリから起動

Marvell>> setenv bootargs console=ttyS0,115200 mtdparts=nand_mtd:0xa0000@0x0(uboot),0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs) root=/dev/sda2 rootwait rw
Marvell>> boot  

SDカードで行っている場合は /dev/sda2 でなく /dev/mmcblk0p2 になる。

root でログインし NAND のファイルシステムを UBIFS に変更

sheeva login: root
root@sheeva:~# dhclient
root@sheeva:~# apt-get install mtd-utils
root@sheeva:~# ln -fs /proc/mounts /etc/mtab
root@sheeva:~# ubiformat /dev/mtd2 -s 512
root@sheeva:~# ubiattach /dev/ubi_ctrl -m 2 
root@sheeva:~# ubimkvol /dev/ubi0 -N rootfs -m

USBメモリにインストールした Debian を NAND にコピー

root@sheeva:~# mount -t ubifs ubi0:rootfs /mnt
root@sheeva:~# mkdir /tmp/rootfs
root@sheeva:~# mount -o bind / /tmp/rootfs/
root@sheeva:~# cd /tmp/rootfs
root@sheeva:~# sync
root@sheeva:~# cp -a . /mnt/

/mnt/etc/fstab を以下の内容に差し替え

/dev/root /      ubifs defaults,noatime,rw                      0 0
tmpfs  /var/run  tmpfs size=1M,rw,nosuid,mode=0755              0 0
tmpfs  /var/lock tmpfs size=1M,rw,noexec,nosuid,nodev,mode=1777 0 0
tmpfs  /tmp      tmpfs defaults,nosuid,nodev                    0 0

再起動し、sheevaplug の起動オプションを修正

root@sheeva:~# shutdown -r now

再起動して Marvell>> のプロンプトを表示させたらUSBメモリを抜く

Marvell>> setenv bootargs 'console=ttyS0,115200 ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs'
Marvell>> saveenv
Marvell>> reset

めでたくDebianが起動したら、後はお好きに〜

2011/06/22追記

openvpnでtunが必要になったので、別マシンにて sheeva-2.6.38.6-Modules.tar.gz から tun.ko を取り出して以下を実行した。

# cp tun.ko /lib/modules/2.6.38.6/kernel/drivers/net/tun.ko 
# depmod -a
# echo tun >> /etc/modules
# modprobe tun

他にも必要なモジュールがでてきたら同様にすればいいと思う。

Xfce4.8で再起動とシャットダウンとかを有効にする

4.6から4.8にバージョンアップしたら、ログアウトダイアログで再起動とシャットダウンのボタンが押せなくなってた。

https://wiki.archlinux.org/index.php/Xfce によると power グループに所属しているユーザでないとできないらしい。

powerグループを作ってもいいんだが、せっかくなのでサービス記述ファイルをごにょごにょしてみる。

/etc/polkit-1/localauthority/50-local.d/org.freedesktop.consolekit.pkla
このファイルを作成/編集すると即時反映されます。

[Local restart]
Identity=(再起動を許可するグループとかユーザとか)
Action=org.freedesktop.consolekit.system.restart
ResultAny=yes
ResultInactive=no
ResultActive=yes

[Local shutdown]
Identity=(シャットダウンを許可するグループとかユーザとか)
Action=org.freedesktop.consolekit.system.stop
ResultAny=yes
ResultInactive=no
ResultActive=yes

[Local Users]
Identity=(リムーバブルディスクのマウントを許可するグループとかユーザとか)
Action=org.freedesktop.udisks.*
ResultAny=yes
ResultInactive=no
ResultActive=yes


サスペンドとハイバネートも設定する場合は Local Users の org.freedesktop.upower なので

[Local Users]
Identity=(もろもろ許可するグループとかユーザとか)
Action=org.freedesktop.udisks.*;org.freedesktop.upower.*
ResultAny=yes
ResultInactive=no
ResultActive=yes

って感じにしとく。


Identityの書式は

Identity=unix-group:hoge                 # グループ hoge に許可
Identity=unix-user:hoge                  # ユーザ hoge に許可
Identity=unix-group:hoge;unix-user:hege  # グループ hoge と ユーザ hege に許可

という感じ。複数設定する場合はセミコロンでつなげていけばよい。

adobe-flashpluginが削除できない

古いFLASHプラグインがインストールされてたのに気が付いて削除しようとしたら

adobe-flashplugin を削除しています ...
update-alternatives: エラー: iceape-flashplugin の alternatives がありません。
update-alternatives: エラー: iceape-flashplugin の alternatives がありません。
dpkg: adobe-flashplugin の処理中にエラーが発生しました (--purge):
 サブプロセス インストール済みの pre-removal スクリプト はエラー終了ステータス 2 を返しました

とかでて削除できなかったので以下の内容でスクリプトファイルを作ってrootで実行して解決。

#!/bin/sh

TARGETS="midbrowser adobe iceape iceweasel mozilla firefox xulrunner xulrunner-addons"

for t in $TARGETS
do
  touch /usr/local/$t.path
  update-alternatives --install /usr/local/$t.link $t-flashplugin /usr/local/$t.path 50
done

aptitude purge adobe-flashplugin

for t in $TARGETS
do
  update-alternatives --remove-all $t-flashplugin
done

SheevaPlugを導入してみた(その1)

OpenBlockS266が今まで稼動してたけど、USBが使えるやつが欲しくなったのでSheevaPlug Dev Kitを買ってみた。実際に買ったのは12月なのだが時間が無くて放置してたら、今は本家ではGuruPlugなんてのが出てるし、国内ではDev Kitとほとんど同じSheevaPlug+なんてのがでてるのね。まぁいいや。

個人的には http://www.plugcomputer.org/ のトップにあるやつがデザイン的に好きなのだが、これは発売予定あるのかな?

最終的な用途は無線LAN(うちはFONがアクセスポイントになってる)の中継機。
今のところWDS(リピータ機能)では動かせてないけど、テレビとかスカパーチューナからアクセスできればいいのでIPマスカレードすればいいやという結論に。

まず最初にやったこと

何はともあれログインしなきゃ話にならん。
Windowsでやるなら、付属CDにUSBのシリアルコンソール用ドライバが入ってるのでそれをインストールする必要があるが、めんどいのでLinuxマシンにUSBでつなぎシリアルコンソールを起動。

$ screen /dev/usbttyS0 115200

Ubuntu jaunty (development branch) debian ttyS0

debian login: 
(初期アカウントは root/nosoup4u)

histroy で履歴を見ると

du -h Verizon-2009-01-25-1152.mp4

ってのがあったこれ何だろ?

まずはパスワードを変更し、適当に時刻を合わせる

root@debian:~# passwd
root@debian:~# date [MMDDhhmmYY]

再起動してみる

root@debian:~# /sbin/shutdown -r now
      __  __                      _ _
     |  \/  | __ _ _ ____   _____| | |
     | |\/| |/ _` | '__\ \ / / _ \ | |
     | |  | | (_| | |   \ V /  __/ | |
     |_|  |_|\__,_|_|    \_/ \___|_|_|
 _   _     ____              _
| | | |   | __ )  ___   ___ | |_
| | | |___|  _ \ / _ \ / _ \| __|
| |_| |___| |_) | (_) | (_) | |_
 \___/    |____/ \___/ \___/ \__|
 ** MARVELL BOARD: SHEEVA PLUG LE

U-Boot 1.1.4 (Mar 19 2009 - 16:06:59) Marvell version: 3.4.16

U-Boot code: 00600000 -> 0067FFF0  BSS: -> 006CEE80

Soc: 88F6281 A0 (DDR2)
CPU running @ 1200Mhz L2 running @ 400Mhz
SysClock = 400Mhz , TClock = 200Mhz

DRAM CAS Latency = 5 tRP = 5 tRAS = 18 tRCD=6
DRAM CS[0] base 0x00000000   size 256MB
DRAM CS[1] base 0x10000000   size 256MB
DRAM Total size 512MB  16bit width
Flash:  0 kB
Addresses 8M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (8M - 7M): Done
NAND:512 MB

CPU : Marvell Feroceon (Rev 1)

Streaming disabled
Write allocate disabled


USB 0: host mode
PEX 0: interface detected no Link.
Net:   egiga0 [PRIME], egiga1
Hit any key to stop autoboot:  0
Marvell>> version
U-Boot 1.1.4 (Mar 19 2009 - 16:06:59) Marvell version: 3.4.16
Marvell>> 

U-Bootが古すぎるので新しくする

ここに書いてあるとおりにやる。

  1. TFTPサーバを用意する。うちはDebianなので aptitude install atftpd でサクッとインストール。
  2. U-Boot 3.4.27+pingtoo binaryをTFTPサーバに u-boot.bin として保存しておく。
  3. SheevaPlugにてU-Bootを更新する
Marvell>> setenv serverip (TFTPサーバのIPアドレス)
Marvell>> setenv ipaddr (SheevaPlugのIPアドレス)
Marvell>> bubt u-boot.bin

 ...

**Warning**
If U-Boot Endiannes is going to change (LE->BE or BE->LE), Then Env parameters should be overriden..
Override Env parameters? (y/n) n

 ...

Marvell>> reset

せっかくだからカーネルも新しくする

READMEに大抵のことは書いてあります。

  1. http://sheeva.with-linux.com/sheeva/ から入れたいカーネルの README を SheevaPlug の /root に保存。うちでは2.6.34を採用。
  2. 保存した README はシェルスクリプトになっているので実行権限をつけて実行する。
  3. ダウンロードしたカーネルをNANDに保存か/bootに保存するか聞かれるので、SDカードから実行するのでなければNANDに。まぁこれは好み。
  4. 保存した README の最初のほうに記述されている setenv の行をメモしておく。
  5. 再起動し U-Boot に入る。そしてメモした setenv を実行し、saveenvする。


続きは明日