2015年01月30日

ffmpegでmp3やらm4aやらmp4やらを結合する

端的に言うと
  1. -i で繋げたい元ファイルをひとつずつ列挙
  2. -filter_complex "concat=n=(ファイル数):v=(ビデオなら1それ以外は0):a=1"
  3. 出力ビットレートを指定する場合は後ろに付ける
  4. 最後に出力ファイル名
例:
#part?.mp3 をビットレート160kで繋いで partall.mp3 に出力。
ffmpeg -i part1.mp3 -i part2.mp3 -i part3.mp3 \
-filter_complex "concat=n=3:v=0:a=1" \
-b:a 160k partall.mp3
で繋がるようだ。
mp3でもm4aでも繋がるし、mp4も繋がる。意外に便利かもしれん。
posted by usoinfo at 16:29 | Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2014年11月22日

Android/Nexus7(2012)にiOS向け物理キーボード

長期外出するときは、緊急時のためにノートパソコンを持って出ていたが、やることと言えば、Webを見て、メールを読んで、sshでサーバーに繋ぐの3つ。これならAndroidでも出来るので、Androidタブレットだけ持っていけばいいかな、と思う。だが、タッチ画面でsshを使うのは骨が折れるので、外付けBluetoothキーボードを買うことにした。

主に緊急用なので使用頻度も低いから安い奴にしようと、アマゾンで買った。型番もないキーボード(ASIN B00GMYEN60)である。
届いたので繋いでみたんだが、どうもこれiOS向けのキーボードらしくて変なキーがあるし、使ってみると、=や[]が、Fnキー+通常キーの同時押しに割り当てられているのだが、これが入力できない。
こんなキーボードなのだが↓
612PsAuXEYL._SL1024_y.jpg

キーボードイベントを見てると、スキャンコードもキーコードも送られているんだけど、入力に現れない。キーボードのせいかIMEのせいか、わからない。
しかし、ターミナルで、=や~が入力できないのは困るので、ナントカ使えるように、レイアウトとキーマップを突っ込んでみた。

これB00GMYEN60.zip

(ベンダーコード、プロダクトコードは、adb shell dumpsys input とかやって調べてね。作業内容は このへんを参考に。)

rootを取った端末で、PCからadbで繋いで、
adb push Vendor_05ac_Product_022c.kl /sdcard/
adb push Vendor_05ac_Product_022c.kcm /sdcard/
などしてファイルを送り込みadb shell
$ su
# mount -o rw,remount /dev/block/platform/sdhci-tegra.3/by-name/APP /system
# cp /sdcard/Vendor_05ac_Product_022c.kl /system/usr/keylayout/
# chmod 644 /system/usr/keylayout/Vendor_05ac_Product_022c.kl
# cp /sdcard/Vendor_05ac_Product_022c.kcm /system/usr/keychars/
# chmod 644 /system/usr/keychars/Vendor_05ac_Product_022c.kcm
# mount -o ro,remount /dev/block/platform/sdhci-tegra.3/by-name/APP /system
# exit
(※これはNexus7(2012)の例。/systemのremountは、mountコマンドなどで調べてね。)
キーボードを外して付けると適用される。

変更した割り当ては、
左上の□ = ESCキー
Command = 半角/全角キー
: と ; を入れ替え (単押しは:、Shift押しながらで;)
右シフト押しながら O で `
右シフト押しながら P で ~
右シフト押しながら L で =
右シフト押しながら : で +
右シフト押しながら V で [
右シフト押しながら B で ]
右シフト押しながら N で {
右シフト押しながら M で }

Fnキー同時押しの記号シリーズは、右のShift同時押しで代用するようにした。
これで、キーボードをUSにして、Android英語キーボードにしたら、なんとかsshには実用できそうだ。

しかしだ。
このキーボード、日本語の刻印があるので、カナタイプできるかと思ってやってみたら、重大な欠陥があることが分かった。濁点゛、半濁点゜のキーがない!「ぺ」とか「べ」とかが入れられない!なんじゃこりゃあ!
タグ:android NEXUS7
posted by usoinfo at 18:46 | Comment(0) | Android | このブログの読者になる | 更新情報をチェックする

2014年10月12日

方向幕メーカーを作ってみた。

国鉄方向幕書体というフォントがあることを知ったので、昨日いろいろ作って遊んでいたら、楽しくなってしまった。
cssでサイズを調整したり位置を合わせたりするのがだんだん面倒になり、結局、方向幕っぽい画像を作成するツールを作ってみた。

方向幕メーカー - http://houkoumaku.usoinfo.info/

ノーサポートですので自己責任でどうぞ。

usost-loop-line.png
posted by usoinfo at 12:30 | Comment(2) | 開発 | このブログの読者になる | 更新情報をチェックする

2014年05月08日

GooglePlayの発禁はどういう仕組みでやっているのだろうか……

今朝、GooglePlayからメールが来たんだ。曰く、
アプリ 電源連動スクリーンロック(パッケージ ID jp.net.usost.eisl.free)が Google Play ストアから削除されましたのでお知らせいたします。

削除の理由: コンテンツ ポリシーの露骨な性表現を含むコンテンツ条項への違反
なんでじゃーい!
そのアプリは、画面表示と言えばプレファレンス画面が一つあるだけだし、広告もつけてない。露骨な性表現が出る余地がどこにもない。
修正すべき箇所がわからない(こちらは、ないと思っている)ので、不当な削除であるという申請と共に、Googleに説明を求める文言を送付した。
本アプリケーションには性表現は存在しません。画像を表示しませんし、広告もありません。画面表示はプレファレンス画面があるだけです。「削除の理由: コンテンツ ポリシーの露骨な性表現を含むコンテンツ条項への違反」とは、本アプリケーションのどの部分を指しているのか、ご説明頂きたいと考えます。

しばらくして、GooglePlayから返事が来た。
Hi,

We appreciate the opportunity to review your app's removal. Upon further
review, we've accepted your appeal and have reinstated your app.

こうなった理由の説明なしかーい!
どうなってんでしょうね、Google。
posted by usoinfo at 09:59 | Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2014年04月06日

ATOKのユーザー辞書をAnthyに変換する

XPのサポート終了まであと3日。
というわけで手近なXPを撲滅するための活動を遂行している。その一環として、従来XPで動いていた大したことしてない(動画観賞用の)ノートPCは、Debianに切り替えてみることにした。
どうせ最小限のことしかしないのでそんなにいじらないのだが、日本語入力は標準の辞書だけだとやはり不便なので、XPで使っていたATOKのユーザー辞書を、Anthy用に変換して使用することにした。

ATOKの辞書ツールでユーザー辞書をテキストファイルに出力してUTF-8・改行コードLFに変換し、以下のスクリプトで変換した。#!/usr/bin/perl

#
# Usage: atok2anthy.pl atoc-dic.txt > ~/.anthy/private_words_default
# 変換後、kasumiを開いて保存。
#
# 入力ファイルはこのファイルと同一文字コード、改行はLFであること。
# オリジナルソース: http://d.hatena.ne.jp/kim_upsilon/20100103/1262515249
# 参考1: http://www.tanu.org/~sakane/doc/public/howto-canna.html
# 参考2: http://www.justsystems.com/jp/tech/atok/text_02.html
# Modified by usoinfo.info. 2014/04/06 http://blog.usoinfo.info/

my %dictionary = ();
my %hinshi = (
"独立語" => "KJ",
"単漢字" => "KJ",
"名詞サ変" => "T30",
"名詞ザ変" => "T30",
"固有人名" => "JNM",
"固有人他" => "JNM",
"固有人姓" => "JNM",
"固有地名" => "CN",
"固有一般" => "KK",
"固有商品" => "KK",
"名詞" => "T35",
"感動詞" => "CK",
"一段動詞" => "KS",
"形容詞" => "KY",
"接頭語" => "PRE",
"接尾語" => "SUC",
"カ行五段" => "K5",
"ガ行五段" => "G5",
"サ行五段" => "S5",
"タ行五段" => "T5",
"ナ行五段" => "N5",
"バ行五段" => "B5",
"マ行五段" => "M5",
"ラ行五段" => "R5",
"ワ行五段" => "W5",
"カ変動詞" => "KX",
"サ変動詞" => "SX",
"ザ変動詞" => "ZX",
"名詞形動" => "T00",
"形容動詞" => "T05",
"名サ形動" => "F00",
"連体詞" => "RT",
"数詞" => "NN",
"助数詞" => "JS",
"副詞" => "F04",
"接続詞" => "CJ",
"冠数詞" => "NNPRE",
);
open( INPUT, "<$ARGV[0]" );

while ( )
{
# ATOK辞書ユーティリティで出力した辞書ファイルは「読み、単語、品詞」の
# 順番に並んでいて、区切り文字としてタブ文字が間に入る
#
# 例: しゃんはいありすげんがくだん[\t]上海アリス幻樂団[\t]固有名詞*
if ( $_ =~ /([^\t]+)\t([^\t]+)\t([^\t]+)(\*|\$)$/ ) {
my $reading = $1; # 読み
my $word = $2; # 単語
my $class = $3; # 品詞

# 読みがひらがなだけではないものは出力しない
if( $reading !~ /^(?:\xE3\x81[\x81-\xBF]|\xE3\x82[\x80-\x93]|ー|゛)+$/ ){
# print STDERR "unsupported yomi '$reading' - $word\n";
next;
}

# Anthyの品詞に相当する品詞に置き換え、辞書に追加する
if ( exists( $hinshi{$class} ) ) {
print "$reading #$hinshi{$class}*500 $word\n";
}
else {
# その他の品詞は(対応させるのが面倒なので)変換しない
print STDERR "unsupported class '$class' - $word ($reading)\n";
}
}
else {
# コメント行・空行などは無視する
print STDERR "not match '$line'\n";
}
}

close( INPUT );
変換後のファイルを~/.anthy/private_words_defaultに配置して、霞を起動して「保存」。ユーザー辞書の単語も変換できるようになった。品詞の対応がこれで合っているかイマイチ自信がないが。。。
タグ:Anthy ATOK
posted by usoinfo at 08:55 | Comment(0) | Linux | このブログの読者になる | 更新情報をチェックする

2014年03月09日

HDL-GXRに最新の2.6系カーネル(2.6.39.4)を入れる

2.6.28用のカーネルパッチ(「HDL-GXR 対応 linux カーネルパッチの使い方」)を、2.6.39.4 に適用できるように書き換えてみた。
完全に理解してやっているわけではないので、間違いがあるかも知れず、ちゃんと動くかどうかも検証してない。
使ってみようという人は、無保証・自己責任でお願いします。

hdl-gxr-kernel-2.6.39.4.patch カーネルパッチ2.6.39.4用
hdl-gxr-config-2.6.39.4.txt .configサンプル

2.6.28の時に施したカーネルオプションを強制的に埋め込みオプションにする改変は、CONFIG_CMDLINE_FORCE ができたので、やめにしてこっちを使用する。
2.6.28の.configを使う場合には、CONFIG_SYSFS_DEPRECATED をオフにする。
# cd (どこか)
# tar xvfj linux-2.6.39.4.tar.bz2
# cd linux-2.6.39.4/
# patch -p1 < ../hdl_gxr_kernel_2.6.39.4.patch
patching file arch/arm/boot/compressed/head.S
patching file arch/arm/kernel/head.S
patching file arch/arm/mach-orion5x/Kconfig
patching file arch/arm/mach-orion5x/Makefile
patching file arch/arm/mach-orion5x/hdl_gxr-setup.c
patching file arch/arm/tools/mach-types
# ARCH=arm make oldconfig
(ENTER連打)
# ARCH=arm make menuconfig
# ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make uImage modules
ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=(どこか) make modules_install
:

簡単なまとめはこちら。一応、コンパイル済みのカーネルとモジュールも作った。

hdl-gxr-2-6-39-4usoinfo.png
これでUSB無線LANも使えるようになったし、省電力サーバになりそうだ。
posted by usoinfo at 08:24 | Comment(0) | Linux | このブログの読者になる | 更新情報をチェックする

2014年03月08日

HDL-GXRをSqueeze化する

Lenny化し、カーネルも2.6.28になったHDL-GXR。これでSqueezeにできる用意が調ったわけである。いざアップグレードしようとしたが、aptでアップグレードできないので、debootstrap でrootfsを作り、入れ替えることでSqueeze化することにした。

1. 用意する物
  1. カーネルを2.6.28にしたHDL-GXR
  2. Linuxが動いているPC
  3. USB-SATA接続キット


2. HDL-GXRでSqueeze用のrootfsを作成
HDDの空き容量が結構ないとダメなので、ディスク容量が足りない時は、外付けディスクなどを使用。
以下の例では、/opt/landisk 以下に作成する。/opt/landisk/debootstrapにdebootstrapを置き、rootfsは/opt/landisk/squeezeに作成。

# mkdir -p /opt/landisk/debootstrap
# cd /opt/landisk/debootstrap
# wget http://ftp.jp.debian.org/debian/pool/main/d/debootstrap/debootstrap-udeb_1.0.26+squeeze1_all.udeb
# ar -x debootstrap-udeb_1.0.26+squeeze1_all.udeb
# tar zxvfp data.tar.gz
# export DEBOOTSTRAP_DIR=`pwd`/usr/share/debootstrap
# export PATH=$PATH:`pwd`/usr/sbin
# mkdir -p /opt/landisk/squeeze
# debootstrap --arch=armel squeeze /opt/landisk/squeeze http://ftp.jp.debian.org/debian
(略)
I: Base system installed successfully.
#

結構時間が掛かるので、しばらく待つ。終わったら、
# mount -t proc proc /opt/landisk/squeeze/proc
# chroot /opt/landisk/squeeze

最低限の設定をここでする。
# dpkg-reconfigure tzdata
(タイムゾーンをAsia/Tokyoに設定)

# passwd
(rootのパスワードを設定)

# vi /etc/apt/sources.list
(Squeezeのsources.listを設定)
--
deb http://ftp.jp.debian.org/debian squeeze main contrib non-free
deb-src http://ftp.jp.debian.org/debian squeeze main contrib non-free
deb http://security.debian.org squeeze/updates main contrib non-free]
--

# apt-get update
# apt-get upgrade
# apt-get install udev openssh-server
(システムに必要なudev、ログインに必要なsshdをインストール)

# vi /etc/network/interfaces
(ネットワーク設定、DHCPでアドレスを取るようにしておく)
--
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp
--

# vi /etc/fstab
(マウントポイントを設定しておく)
--
proc /proc proc defaults,nosuid,noexec 0 0
/dev/sda1 /boot ext3 defaults,rw 0 0
/dev/sda2 swap swap defaults 0 0
/dev/sda3 / ext3 defaults,rw 1 1
--

# apt-get clean
# exit

設定したらchrootを抜け、カーネルモジュールを配置する。
今走ってる/lib/modules/2.6.28 をコピーしてもいいし、前作ったtgzが残っていればそれを展開してもいい。
# mkdir -p /opt/landisk/squeeze/lib/modules
# cp -arp /lib/modules/2.6.28 /opt/landisk/squeeze/lib/modules
あるいは前回のlib.tgzを使って
# tar xvfz lib.tgz -C /opt/landisk/squeeze

最後に、tarで固めて、ファイルをどこかに取っておく。
# umount /opt/landisk/squeeze/proc
# tar cjvf /opt/landisk/squeeze-rootfs.tar.bz2 .
(squeeze-rootfs.tar.bz2 このファイルはどこかに取っておく)


3. HDDを取り外して別マシンでマウント、作ったtarを展開
HDL-GXRをシャットダウンしてストレージを取り外し、別のPCに接続(ここでは取り付けたHDDがsdbの前提)。
バックアップを取っておくなら
# mount /dev/sdb3 /mnt
# cd /mnt
# tar cjvf /export/landisk/lenny-rootfs-backup.tar.bz2 .
# cd /
# umount /mnt

こんな感じ。
しかる後、sdb3 を新しいものに入れ替える。
# mkfs.ext3 /dev/sdb3
# mount /dev/sdb3 /mnt
# tar xvfj /export/landisk/squeeze-rootfs.tar.bz2 -C /mnt
# umount /mnt


4. HDL-GXRに繋いでブート
うまくいけば、めでたくHDL-GXRがSqueezeになっているはずである。

作ったカーネルとrootfsを一応置いておく。簡単なまとめはこちら
カーネルとモジュールは、iptables関係・ipv6・USBウェブカム・USB無線LANなど、ごちゃごちゃと要らない物も入っているので、作り直した方がいいかも。

kernel hdl-gxr-kernel-2.6.28-20140308.tar.bz2
rootfs hdl-gxr-squeeze-rootfs-20140308.tar.bz2
これをディスクに放り込めば、とりあえずSqueezeが動く。はず。
posted by usoinfo at 17:32 | Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする

シリアルコンソールがなくても、HDL-GXRのカーネルを2.6.28に入れ替える

Lenny化したHDL-GXRであるが、Squeezeにするためには、カーネルが2.6.26以降でなくてはならない。OLP2.0のカーネルは2.6.12なので、カーネルを入れ替える必要がある。

カーネルパッチは、2.6.28のものを作ってらっしゃる方がいるので(「HDL-GXR 対応 linux カーネルパッチの使い方」参照)、コンパイルはできるのだが、これをブートさせるのにはシリアルコンソールを繋いで、u-bootにカーネルパラメータを与えなければならない(と思う)。
UARTの口は基盤にスルーホールがあいていて、繋げば即いけるかと思わせるがそうでもなく、TTL-CMOSレベル変換回路がないとダメである。あいにく持っておらず、通販で買おうにも注文して届くのに時間が掛かる。待ってられない!
ということで、シリアルコンソールがなくても無理矢理カーネル2.6.28をブートさせちまおう、という手順の記録。

1. 用意する物
  1. クロスコンパイルするDebian Squeezeが動いてるPC(※VirtualPCでもいいし、下のPCと同じでもいい)
  2. Lenny化したHDL-GXR
  3. Linuxが動いているPC(失敗した時用)
  4. USB-SATA接続キット(失敗した時用)
時間が掛かってもいいなら、HDL-GXR単体だけでも可能。

2. クロスコンパイル環境を作る
セルフコンパイルするならこの手順飛ばして可。
Squeezeが動いてるPCで、/etc/apt/sources.list にemdebianを追加する。# vi /etc/apt/sources.list

(追加)
deb http://www.emdebian.org/debian/ squeeze main

# aptitude install emdebian-archive-keyring
# aptitude update
次いで、コンパイルに必要なツールをインストール。# aptitude install build-essential ncurses-dev \
uboot-mkimage libc6-dev-armel-cross gcc-4.3-arm-linux-gnueabi \
binutils-arm-linux-gnueabi
3. カーネルにパッチを当てる
カーネルソース、パッチをダウンロードして、パッチを当てる。# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.gz
# tar xvfz linux-2.6.28.tar.gz
# wget -O hdl-gxr.diff \
"http://jr0bak.homelinux.net/~imai/pukiwiki/pukiwiki.php?plugin=attach&refer=%C6%FC%B5%AD%2F2008-12-09%2FHDL-GXR%20%C2%D0%B1%FE%20linux%20%A5%AB%A1%BC%A5%CD%A5%EB%A5%D1%A5%C3%A5%C1&openfile=hdl-gxr.diff"
# wget -O hdl-gxr-config \
"http://jr0bak.homelinux.net/~imai/pukiwiki/pukiwiki.php?plugin=attach&refer=%C6%FC%B5%AD%2F2008-12-11%2FHDL-GXR%20%C2%D0%B1%FE%20linux%20%A5%AB%A1%BC%A5%CD%A5%EB%A5%D1%A5%C3%A5%C1%A4%CE%BB%C8%A4%A4%CA%FD&openfile=dot.config"
# cd linux-2.6.28
# patch -p1 < ../hdl-gxr.diff
# cp ../hdl-gxr-config ./.config

4. カーネルソースをいじくる
u-bootが渡してくるカーネルオプションを無視して、カーネルに埋め込んだオプションを使うようにしてしまう。
arch/arm/kernel/setup.c の 608行目あたり、parse_tag_cmdline()の中を書き換える。// arch/arm/kernel/setup.c L.608

static int __init parse_tag_cmdline(const struct tag *tag)
{
// strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
strlcpy(default_command_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE);

return 0;
}
ソースを変更したら、カーネルのconfigをいじる。
# ARCH=arm make menuconfig
設定をいろいろする。
必ず設定するのは、
Boot options ->
Default kernel command string
console=ttyS0,115200 root=/dev/sda3 ro mem=128Mとする。(ここが4.で渡されるカーネルオプションになる。と思う)。
もしSqueeze化するなら、
General setup ->
Create deprecated sysfs files
をオフにする。
.configで
CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/sda3 ro mem=128M"
CONFIG_INOTIFY_USER=y
CONFIG_SIGNALFD=y
# CONFIG_SYSFS_DEPRECATED_V2 is not set
(下3つはSqueeze化するときは必要)となる。

5. コンパイルして、HDL-GXRに新しいカーネルを入れる
# ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make uImage modules
# ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=(どこか) make modules_install
※これで、arch/arm/boot/uImage と、(どこか)/lib/modules/以下のファイルを、HDL-GXRに持っていく。
例えば、
# mkdir -p /opt/arm/boot
# ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/opt/arm make modules_install
# cp -p arch/arm/boot/uImage /opt/arm/boot/uImage.new
# cp -p System.map /opt/arm/boot/
# cp -p .config /opt/arm/boot/config-2.6.28.hdl-gxr
# cd /opt/arm/boot
# tar cvfz ../kern.tgz .
# cd /opt/arm
# tar cvfz lib.tgz lib
で、/opt/arm/kern.tgz, /opt/arm/lib.tgz をHDL-GXRにscpなりで持って行く


出来たカーネルとモジュールを、それぞれHDL-GXRのsda1,sda3に配置する。
Lennyの動いてるHDL-GXRなら、# tar xvfz kern.tgz -C /boot (さっき作ったカーネルを展開)
# mv /boot/uImage.gxr /boot/uImage.gxr.bak (念のため現在のカーネルをバックアップ)
# mv /boot/uImage.new /boot/uImage.gxr (新しいカーネルを配置)
# tar xvfz lib.tgz -C / (さっき作ったモジュールを展開)


リブートして、うまくいけば、2.6.28のカーネルで起動するはず。
hdl-gxr-2-6-28.png
失敗した時は、HDL-GXRのディスクを取り外してLinuxが動いているPCにつなぎ、sda1 をマウントして、バックアップしておいた uImage.gxr.bak を uImage.gxr に戻せば、2.6.12のカーネルで起動できる。
posted by usoinfo at 14:56 | Comment(0) | Linux | このブログの読者になる | 更新情報をチェックする

HDL-GXRをDebian Lennyで使えるようにする

P3060215s.jpg
中身が完全にすっからかんになった、アイオーデータ製の HDL-GX250R を安く手に入れた。Marvell 88F5182でLinuxが動く箱である。が、中身が完全にすっからかんなので、システムを入れないとウンともスンともいわない。ので、まずは、Debian Lenny が動くようにする。

1. 用意する物
  1. Linuxが動いているPC
  2. USB-SATA接続キット
  3. SATA接続のHDDなりSSDなりHDL-GXRに入れるストレージ

2. OPEN LANDISK PLATFORM Linux Ver. 2.0 をインストールする
http://ftp.iij.ad.jp/pub/sourceforge.jp/freetank/30616/のOLP02をインストールする。
OPEN LANDISK PLATFORM Linux200README.pdfの説明の通りにすればよい。

PCに、USB-SATA接続キットを使って、HDL-GXRに入れるストレージを接続。(ここでは、/dev/sdb になっているという前提。)
fdisk で
/dev/sdb1 83 128M
/dev/sdb2 82 1G
/dev/sdb3 83 残り全部
という感じでパーティションを切る。
例:
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 2048 264191 131072 83 Linux
/dev/sdb2 264192 2361343 1048576 82 Linux スワップ / Solaris
/dev/sdb3 2361344 78140159 37889408 83 Linux
そして、
# mkfs.ext3 /dev/sdb1
# mkfs.ext3 /dev/sdb3
# mkswap /dev/sdb2
でフォーマットする。

次に、tar ballを各パーティションに展開する。
sdb1 に /boot を展開
# wget "http://ftp.iij.ad.jp/pub/sourceforge.jp/freetank/30616/OLP02_boot_etch20071203a.tgz"
# mount /dev/sdb1 /mnt
# tar xvfz OLP02_boot_etch20071203a.tgz -C /mnt
# mv /mnt/uImage.OLP02GXR /mnt/uImage.gxr
# mv /mnt/initrd /mnt/initrd.gxr
# umount /mnt

sdb3 に / を展開
# wget "http://ftp.iij.ad.jp/pub/sourceforge.jp/freetank/30616/OLP02_base_etch20071203a.tgz"
# mount /dev/sdb3 /mnt
# tar xvfz OLP02_base_etch20071203a.tgz -C /mnt
# umount /mnt
できたらストレージを取り外す。

3. HDR-GXR を起動
作ったストレージをHDL-GXRに取り付け、イーサネットも差し込んで、電源をONする。ACCESSのLEDが橙色に点灯し、しばらくしてパワーLED1つの点灯になったら多分成功。
アドレスはDHCPで取得するので、ルータ等のログを見るなりして、取れたアドレスを調べる。
% ssh root@(調べたアドレス)
root@192.168.18.134's password:
で、パスワード olpadmin でログインできる。
これで Debian etch、カーネルは2.6.12のLinux箱になった。

4. Lenny にアップグレードする
aptitude でアップグレードすればいいので、/etc/apt/sources.list を適当に書き換えつつ aptitude update/upgrade/dist-upgrade すればよい。

まず、etch は archive に行っているので、
# vi /etc/apt/sources.list
--
deb http://archive.debian.org/debian/ etch main non-free contrib
deb-src http://archive.debian.org/debian/ etch main non-free contrib

deb http://archive.debian.org/debian-security/ etch/updates main non-free contrib
deb-src http://archive.debian.org/debian-security/ etch/updates main non-free contrib
--
こんな感じにして、

# apt-get update
# apt-get install debian-archive-keyring
keyringを入れたら、Lennyに切り替えてアップグレード。
# vi /etc/apt/sources.list
--
deb http://archive.debian.org/debian/ lenny main non-free contrib
deb-src http://archive.debian.org/debian/ lenny main non-free contrib

deb http://archive.debian.org/debian-security/ lenny/updates main non-free contrib
deb-src http://archive.debian.org/debian-security/ lenny/updates main non-free contrib
--
こんな感じにして、

# aptitude update
# aptitude upgrade
# aptitude dist-upgrade
これで Debian Lenny、カーネルは2.6.12のLinux箱になった。

40Gの2.5"HDDを入れて、消費電力はだいたい9W前後。省電力で大変良い。
タグ:玄箱 Linux LANDISK
posted by usoinfo at 14:09 | Comment(0) | Linux | このブログの読者になる | 更新情報をチェックする

2014年02月25日

Debian Squeeze化した玄箱に最新の2.6系カーネルを入れる

Squeezeにするまでの手順は、簡単に言うと、Lennyを入れてしかる後Squeezeにアップグレードすればよろしい。
(ここ http://siruko.com/kuro/debian.htmlなどを参考にさせて頂いた)

Squeezeになったものは、カーネルのバージョンは2.6.25。これでUSB無線LANを使おうとカーネルをコンパイルしたりしたのだがどうにもラチがあかず、最新のカーネルにすることにした。
なかなかうまくいかずに試行錯誤して、どうやら出来たので手順をメモしておく。

1. カーネルをコンパイルする

セルフコンパイル環境も玄箱上に作ってあるが、時間が掛かって仕方ないので、クロスコンパイルで行うことにする。セルフコンパイルの時は、1-3.から、CROSS_COMPILE=powerpc-linux-gnu- を削除して読み替えればよい。

1-1. クロスコンパイルするマシンを用意

aptの使える手頃なLinuxがある場合はそれを使っていいが、手元になかったので、Oracle VM VirtualBoxを使って仮想マシンにDebian Squeezeをインストールした。
- Oracle VM VirtualBox
- Debian Squeeze
玄箱に合わせてSqueezeを選択。ネットワークインストールでデスクトップ環境を外して最小限インストール(どうせコンパイルするだけなのでデスクトップいらないし)にしたが、この辺はお好み。

1-2. クロスコンパイル環境を用意

/etc/apt/sources.list に以下の1行を追加
deb http://www.emdebian.org/debian/ squeeze main
したら、updateしてツールを入れる。
# aptitude install emdebian-archive-keyring
# aptitude update
# aptitude install build-essential ncurses-dev \
libc6-dev-powerpc-cross gcc-4.3-powerpc-linux-gnu \
binutils-powerpc-linux-gnu uboot-mkimage

1-3. カーネルをビルド
1-3-1. ソースを展開してconfigを生成
2014/02/25で2.6系の最新は2.6.39.4だったのでこれを使う。
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.4.tar.bz2
tar jxvf linux-2.6.39.4.tar.bz2
cd linux-2.6.39.4
ARCH=powerpc make linkstation_defconfig

1-3-2. .config を編集

MTDのため、.configが以下になるようにするらしい。
面倒なので、viで.configを書き換える。662行目あたりから
#
# Mapping drivers for chip access
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
CONFIG_MTD_PHYSMAP=y
# CONFIG_MTD_PHYSMAP_COMPAT is not set
# CONFIG_MTD_PHYSMAP_OF is not set
# CONFIG_MTD_INTEL_VR_NOR is not set
# CONFIG_MTD_PLATRAM is not set
#
# Mapping drivers for chip access
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
CONFIG_MTD_PHYSMAP=y
CONFIG_MTD_PHYSMAP_COMPAT=y
CONFIG_MTD_PHYSMAP_START=0xffc00000
CONFIG_MTD_PHYSMAP_LEN=0x400000
CONFIG_MTD_PHYSMAP_BANKWIDTH=1
と変更。
ARCH=powerpc make menuconfig

で該当箇所を変更しても可。

1-3-3. ビルド

カーネルとモジュールをビルドし、出来上がりを、仮に /opt/ppc/ (どこでもいいけど) 以下に入れておく。
# ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- make uImage modules
# ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- INSTALL_MOD_PATH=/opt/ppc make modules_install
# scripts/dtc/dtc -f -I dts -O dtb -o /opt/ppc/boot/kuroboxHD.dtb \
-V 16 arch/powerpc/boot/dts/kuroboxHD.dts
- ※玄箱HGは、
scripts/dtc/dtc -f -I dts -O dtb -o /opt/ppc/boot/kuroboxHG.dtb \
-V 16 arch/powerpc/boot/dts/kuroboxHG.dts
だと思われる。

mkdir -p /opt/ppc/boot
cp -p arch/powerpc/boot/uImage /opt/ppc/boot/vmlinux.UBoot
cp -p System.map /opt/ppc/boot/
出来たカーネルとモジュールを玄箱に入れるので、tarで固めておく。
pushd /opt/ppc/
tar cvfz kuro-kern.tgz boot
tar cvfz kuro-lib.tgz lib
popd

2. 玄箱のブート環境を整備する

玄箱のHDDは、次のパーティションだと仮定する。
/dev/sda1 MontaVista Linuxの(オリジナルの)/パーティション
/dev/sda2 swap
/dev/sda3 Debian Squeezeの/パーティション
Debian Squeeze化した状態では、起動は、"sda1の /boot/loader.o から /boot/vmlinuz.bin が走る"ことになっていると思われるが、これを"/boot/uloader-2.4.17_mvl21-sandpoint.o から /boot/u-boot-1.2.0-hd.ram.bin から /boot/vmlinux.UBoot"になるようにする。

2-1. 必要なファイルの入手

玄箱/玄箱HG 用 ubuntu 12.04 LTS imageより、kuro-bootsel2.20080419.tar.gzubuntu-precise-installer.zip を頂戴してくる。

2-2. ブート用のファイルを配置

ubuntu-precise-installer.zip を解凍して、次のファイルを玄箱の sda1:/boot に置く。
u-boot-1.2.0-hd.ram.bin
uloader-2.4.17_mvl21-sandpoint.o
※玄箱HGでは
u-boot-1.2.0-hg.ram.bin
uloader-2.4.17_mvl21.o
のはず。
Debian Squeezeが動いているなら、scpなりで転送して、
# mount /dev/hda1 /mnt
# cp u-boot-1.2.0-hd.ram.bin /mnt/boot
# cp uloader-2.4.17_mvl21-sandpoint.o /mnt/boot
など。玄箱からHDDを取り出して、Linuxマシンにマウントしても可。
このU-BOOTは、rootが/dev/sda3、コンソールの玄箱側192.168.0.151、nc側192.168.0.150 とのこと。

次に、kuro-bootsel2.20080419.tar.gz を玄箱MontaVista上で解凍して、install.shを実行。
あるいは、玄箱Debian上で解凍して、install.shの内容を手作業で実行。
# mount /dev/hda1 /mnt
# mkdir -p /mnt/boot/tools
# cp kuro_swread kuro_morse /mnt/boot/tools/
# cp kuro_bootsel2.sh /mnt/etc/init.d/
# chmod 755 /mnt/etc/init.d/kuro_bootsel2.sh
# pushd /mnt/etc/rc.d/rcS.d
# ln -s ../init.d/kuro_bootsel2.sh S15kuro_bootsel2.sh
# popd
# cp kuro_boot.conf /mnt/etc/

2-3. kuro_bootsel2.sh を変更

/etc/init.d/kuro_bootsel2.sh を次のように変更。
101行目から
if [ ! -f $2 ]; then
/bin/echo "Kernel does not exist."
/boot/tools/kuro_morse F $AVR
return 0;
fi
init_avr

# if [ ! -f $2 ]; then
# /bin/echo "Kernel does not exist."
# /boot/tools/kuro_morse F $AVR
# return 0;
# fi
if [ -f $2 ]; then
/sbin/insmod $1 kernel=$2 $3
else
echo /sbin/insmod $1 $2 $3
/sbin/insmod $1 $2 $3
echo /sbin/init 6
/sbin\/init 6
fi
init_avr
とする。

(している内容は、ubuntu-precise-installer-kuroBOX.sh の sed -e "101,105 s/^./#/" -e "110 s/^./#/" ... と同じである。)

2-4. kuro_boot.conf を変更

sda1:/etc/kuro_boot.conf を、uloaderを起こしに行くように書き換える。念のため古いバージョンは取っておいた方がいいかもしれない。
# cp kuro_boot.conf kuro_boot.conf.org
# vi kuro_boot.conf
# kuro_bootsel config file (2008-04-01)
#
# "bootdefault"
# 1: Linux, 2-9: See below
bootdefault=2

(略)

# Menu entry No.2
#
menu2="Debian"
loader2="-f /boot/uloader-2.4.17_mvl21-sandpoint.o"
kernel2='uboot=/boot/u-boot-1.2.0-hd.ram.bin'
option2=''
(している内容は、ubuntu-precise-installer-kuroBOX.sh の sed -e "s/^#bootdefault=1$/bootdefault=2/" ... と同じである。)

配置したファイル名を書く。玄箱HGなら、
loader2="-f /boot/uloader-2.4.17_mvl21.o"
kernel2='uboot=/boot/u-boot-1.2.0-hg.ram.bin'
のはず。

3. カーネルとモジュールを配置

先ほど作ったカーネルとモジュールを、玄箱に持ってきて配置する。
カーネルは sda1 の /boot へ。
モジュールは sda3 の /lib/moduels へ。

kuro-kern.tgz と kuro-lib.tgz を玄箱に持って行って、
※Debian Squeeze 上なら
# mount /dev/hda1 /mnt
# tar xvfz kuro-kern.tgz -C /mnt
# umount /mnt
# tar xvfz kuro-lib.tgz -C /
玄箱からHDDを取り出していれば、sda1とsda3をそれぞれマウントして展開。

4. fstab を変更

カーネルを2.6.25から2.6.39に変えると、ハードディスクの見え方が /dev/hda から /dev/sda になる。sda3:/etc/fstab に書いてあるのは/dev/hdaなので、変更する。
hdaとsdaを両方書いておけば、ない方は失敗するだけなので、古いカーネルでブートした時もマウントされるようになる。
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hda2 none swap sw 0 0
/dev/hda3 / ext3 defaults,noatime,errors=remount-ro 0 0
/dev/sda2 none swap sw 0 0
/dev/sda3 / ext3 defaults,noatime,errors=remount-ro 0 0


5. 祈りながらリブート

イーサネットの口がついたLinuxマシンがあれば、netcatをインストールしてコンソールを見られる。
玄箱のイーサとマシンのイーサを繋いで、玄箱のスイッチをクロス側にして、
# aptitude install netcat
# ifconfig eth0 192.168.0.150 netmask 255.255.255.0 up
# nc -v -v -n -u -s 192.168.0.150 -p 6666 192.168.0.151 6666
として、玄箱を再起動。
うまくできていれば、コンソール出力が出てきて、玄箱がブートするはずである。

出力こんな感じ。
# nc -v -v -n -u -s 192.168.0.150 -p 6666 192.168.0.151 6666
Connection to 192.168.0.151 6666 port [udp/*] succeeded!

U-Boot 1.2.0 (Mar 26 2009 - 17:24:32) LinkStation / KuroBox
stdin : nc
stdout: nc
stderr: nc
IDE: Bus 0: OK
Device 0: Model: TRANSCEND Firm: Ser#: 0507070840470450
Type: Removable Hard Disk
Capacity: 3907.9 MB = 3.8 GB (8003520 x 512)
Boot in 01 seconds ('s' to stop)...
Loading 0:1:boot/vmlinux.UBoot

1937671 bytes read

2387 bytes read
## Booting image at 00800000 ...
Image Name: Linux-2.6.39.4
Image Type: PowerPC Linux Kernel Image (gzip compressed)
Data Size: 1937607 Bytes = 1.8 MB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
Booting using flat device tree at 0x7f0000
Using Buffalo Linkstation machine description
Linux version 2.6.39.4 (root@yakisoba.usoinfo.info) (gcc version 4.3.5 (Debian 4.3.5-4) ) #4 Tue Feb 25 11:33:17 JST 2014
bootconsole [udbg0] enabled
Adding PCI host bridge /soc10x/pci@fec00000
PCI host bridge /soc10x/pci@fec00000 (primary) ranges:
IO 0x00000000fe000000..0x00000000febfffff -> 0x0000000000000000
MEM 0x0000000080000000..0x00000000efffffff -> 0x0000000080000000
BUFFALO Network Attached Storage Series
(C) 2002-2005 BUFFALO INC.
Zone PFN ranges:

(略)


いけなくなった場合、EMモードで立ち上げるか玄箱からハードディスクを外してLinuxマシンでマウントし、sda1:/etc/kuro_boot.conf の2番を古いものに書き換えて起動し直せば、2.6.25のカーネルで立ち上げられる。
menu2="Debian"
loader2="-f /boot/loader.o"
kernel2=/boot/vmlinux.bin
option2='cmdline="root=/dev/hda3"'

ようやく玄箱で無線LAN(GW-US54Mini2)がrt73usbで使えるようになった。
しかし、どうも通信が不安定で、ディレイがひどく大きくなったりする。USBハブを挟んでいるのが原因かと思って直結にしてみたが、あまり状況は改善されない。CPUパワーはそんなに食っているようには見えないけど、WPAを使っているせいかなあ。。。現状、使えるとは言いにくい。

フロントのUSBの端子を引き出して、直結。
P2250121s.jpg
[追記]
無線LANが不安定なのは、省電力機能がどうも悪さをしている模様であった。
# iwconfig wlan0 power off
で、遅延もパケットロスもなくなった。
/etc/network/interfaces に、post-up /sbin/iwconfig wlan0 power off と書いて、解決。
iface wlan0 inet static
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
post-up /sbin/iwconfig wlan0 power off
address 192.168.128.x
network 192.168.128.0
netmask 255.255.255.0
broadcast 192.168.128.255
gateway 192.168.128.1
これで無線LAN内蔵の省電力Debianサーバーの出来上がりだ!
posted by usoinfo at 16:17 | Comment(0) | Linux | このブログの読者になる | 更新情報をチェックする