2014年03月08日

シリアルコンソールがなくても、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 | このブログの読者になる | 更新情報をチェックする

2013年12月01日

Microsoft .NET Framework 4.5.1 (KB2858728)がWindowsUpdateでインストールできない

OSはWindows7。定石通り、手動でインストールを試みる。
マイクロソフトのサイトhttp://support.microsoft.com/kb/2858728から、オフラインインストーラーをダウンロードして実行してみると、「ディスク領域が不足しています」と出た。どうやらこのインストーラーは、空き領域を3G近く要求するらしい。
仕方ないのでCドライブの空きを増やしたら、ちゃんとインストールできた。

WindowsUpdateは「コード13EC WindowsUpdateで不明なエラーが発生しました」なる謎のエラーコードとエラーメッセージで失敗していた。この辺の表示はもう少し親切にならんかったのだろうか。ディスクが足りませんでした、とか言ってくれるだけでもだいぶ違うのだが。

kb2858725.png
posted by usoinfo at 10:33 | Comment(0) | Windows | このブログの読者になる | 更新情報をチェックする

2013年11月12日

Firefoxの個人証明書をエクスポートしたらOpera12にインポートできない

StartSSLでSSLの証明書を作ろうと思ってサインアップしたら、個人認証のために個人証明書を作成してインストールした。この作業をFirefoxでやったので、Operaでもアクセスできるように証明書をエクスポート&インポートしようとしたら、Opera12が「証明書チェーンが正しく順序付けられていませんでした」とかなんとか言って拒否する。意味がわからん。パスワードは合ってるし、Operaで.p12を食う処理に問題があるのだろうか。

ちょっと困ったが、FFでエクスポートしたp12を、一度IEにインポートしてエクスポートしてから、そのファイルをOpera12に食わせたら、うまくいった。PKIX業界はカオスでよく分からない………
posted by usoinfo at 09:03 | Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2013年10月29日

初代EeePC(701または4G-Xと呼ばれる機種)で、CentOS6で内蔵の無線LANを使う

内蔵ストレージが4Gしかない初代EeePC。ストレージも小さいし画面も狭いので、人間が使うにはちょっともうスペック不足だが、SSD+Atomの構成で省電力静音なので、ちょっとしたサーバーにでもしようと思う。
ところが、簡単に動きそうなLinuxのディストリビーションを入れようとしても、XububtuもLubuntuもストレージ不足で入らない(前者は5.4G、後者は4.3G必要)。そもそもサーバー用途なので、グラフィカルデスクトップなぞは不要であるから、CentOSの最小構成をインストールしてみた。

で、起動してみると、内蔵の無線LANが動かないのである。ifconfig wlan0 でインターフェースは見えているが、通信はできない。どうやら初代EeePCの無線LANはクセのある奴らしい。
# lspci | grep Atheros
01:00.0 Ethernet controller: Atheros Communications Inc. AR242x / AR542x Wireless Network Adapter (PCI-Express) (rev 01)
03:00.0 Ethernet controller: Atheros Communications Inc. L2 Fast Ethernet (rev a0)
AtherosのAR242x/AR542xというカードらしいのだが、
  • デフォルトで入っているath5kでは動かない
  • yumでインストールするmadwifiでは動かない
ということのようである。CentOS HowToのThe Atheros AR5007EG wireless cardあたりを参考に、いろいろやって動かした。

  1. 必要なものが入ってなかったら入れる。
  2. # yum install gcc gcc-c++ make kernel-devel \
    wget wpa_supplicant wireless-tools pciutils
    gcc gcc-c++ make kernel-devel は必須。wpa_supplicantは、無線を暗号化するなら必要。wget wireless-tools pciutilsはお好みで。

  3. madwifiのスナップショットをダウンロードしてコンパイルし、ドライバを入れる
  4. # cd /tmp
    # wget http://snapshots.madwifi-project.org/madwifi-hal-0.10.5.6/madwifi-hal-0.10.5.6-r4103-20100110.tar.gz
    # tar xvfz madwifi-hal-0.10.5.6-r4103-20100110.tar.gz
    # cd madwifi-hal-0.10.5.6-r4103-20100110
    # make
    # make install
    madwifiのsnapshotはいくつか種類があるが、r4126-20100324では動かなかったように思う。が未確認である。

  5. 標準のドライバを殺し、madwifiのドライバを読むようにする
  6. blacklistにathを入れるのと、ath_pciを読むようにするのの2つ。
    # vi /etc/modprobe.d/blacklist.conf
    (最終行に追加)
    blacklist ath5k
    blacklist ath

    # vi /etc/modprobe.d/ath.conf
    (ファイル名は何でも良さそうだが、新規ファイル作成。既存のどこかのファイルに追加してもいいだろう)
    alias netdev-ath0 ath_pci

  7. WPAを使うなら設定する
  8. これは普通にやればOK。
    # cd /etc/wpa_supplicant
    # wpa_passphrase *SSID* *PASSPHRASE* > hogehoge.conf
    # mv wpa_supplicant.conf wpa_supplicant.conf.org
    # cat wpa_supplicant.conf.org hogehoge.conf > wpa_supplicant.conf

    # vi /etc/sysconfig/wpa_supplicant

    INTERFACES="-iwlan0" とする
    DRIVERS="-Dwext" とする


  9. 無線LANを起動する
  10. # modprobe -r ath5k
    # modprobe ath_pci
    するなり、面倒ならリブートするなり。すると、インターフェースとして、wifi0 と wlan0 が見えるはずである。このうち、使うのはwlan0の方である。必要なら/etc/sysconfig/network-script/ifcfg-wlan0を適当に設定してやって、wpa_supplicantを起こし、ifupで起動。
    # ifconfig -a
    eth0 Link encap:Ethernet HWaddr **:**:**:**:**:**
    (略)
    lo Link encap:Local Loopback
    (略)

    wifi0 Link encap:UNSPEC HWaddr **-**-**-**-**-**-**-5E-00-00-00-00-00-00-00-00
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    (略)

    wlan0 Link encap:Ethernet HWaddr **:**:**:**:**:**
    BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    (略)

    # service wpa_supplicant start
    # /sbin/ifup wlan0
    # iwconfig wlan0
    wlan0 IEEE 802.11g ESSID:"*********" Nickname:""
    Mode:Managed Frequency:2.412 GHz Access Point: 1C:**:**:**:**:C2
    Bit Rate:48 Mb/s Tx-Power:17 dBm Sensitivity=1/1
    Retry:off RTS thr:off Fragment thr:off
    Encryption key:****-****-****-****-****-****-****-**** Security mode:restricted
    Power Management:off
    Link Quality=65/70 Signal level=-31 dBm Noise level=-96 dBm
    Rx invalid nwid:17180 Rx invalid crypt:0 Rx invalid frag:0
    Tx excessive retries:0 Invalid misc:0 Missed beacon:0

    こんな感じである。

HowToのドキュメントとの大きな違いは、modprobeのaliasが netdev-ath0 である点と、インターフェースの名前がath0でなくwlan0になる、というところかな。
posted by usoinfo at 17:23 | Comment(0) | Linux | このブログの読者になる | 更新情報をチェックする

2013年08月09日

phpDocumenter2 を使う

PHPのソースコードからドキュメントを生成したい。Javaにはjavadocがあるように、PHPにもそのようなものがある。というわけで、PHPのドキュメンテーションツール、phpDocumentor version2( http://phpdoc.org/ )を使用する。
まず、PHPでXSLが有効になっていないと使用できない。phpコマンドで調べる。
% php -r "phpinfo();" | grep XSL
XSL => enabled
EXSLT => enabled
enabledになっていない時は、libxsltをインストールして、--with-xsl を付けてPHPをビルドし直すなどする。CentOSなら、libxsltはyumでインストールできる。

phpDocumenterはpearからインストールする。また、実行にgraphvizが必要なので、これもインストール。
# pear channel-discover pear.phpdoc.org
# pear install phpdoc/phpDocumentor
# yum install graphviz
インストールできたら、コマンドを叩くだけ。
% phpdoc -d src -t docs \
--extensions php,phps --encoding EUC-JP \
--ignore-symlinks --title "MyPHPAPIDocument"
--template zend
-d にソースファイルのあるディレクトリ、-t にドキュメントを生成するディレクトリを指定。--extensions は、解析するソースファイルの拡張子を設定し、ソースがUTF-8以外の文字コードで書かれていれば --encoding を指定。テンプレートの種類を変えたければ --template で指定。
生成ができれば、出力されたディレクトリのindex.htmlをブラウザで開けばOK。Javadoc風のコメントからドキュメントが生成されているはずだ。
タグ:PHP phpdoc
posted by usoinfo at 09:56 | Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2013年08月01日

MySQL スレーブが Errno 1872 で停止した時の対処

MySQLのスレーブが走っているマシンを再起動したら、スレーブがエラーを吐いて止まってしまった。
Last_Errno は 1872。
ドキュメントによれば、

(http://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html)
Error: 1872 SQLSTATE: HY000 (ER_SLAVE_RLI_INIT_REPOSITORY)
Message: Slave failed to initialize relay log info structure from the repository
ER_SLAVE_RLI_INIT_REPOSITORY was introduced in 5.6.12.

とのこと。
何らかの理由で、リレーログが読めなくなってしまったか何か?

この時は、MySQLは上がっていて、スレーブのステータスもとれるので、SHOW SLAVE STATUSで最後の状態を調べる。
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: ***.***.***.***
Master_User: ********
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000009
:(略)
Last_Errno: 1872
Last_Error: Slave failed to initialize relay log info structure from the repository
Skip_Counter: 0
Exec_Master_Log_Pos: 4840135
:(略)
1 row in set (0.00 sec)
で、Master_Log_FileExec_Master_Log_Posを見る。ここまでマスターのバイナリログの実行が終わっているので、一旦スレーブをリセットして、ここから再開させる。

RESET SLAVE;

CHANGE MASTER TO
MASTER_HOST='***.***.***.***',
MASTER_USER='********',
MASTER_PASSWORD='********',
MASTER_LOG_FILE='mysql-bin.000009', // Master_Log_Fileのファイル名をセット
MASTER_LOG_POS=4840135; // Exec_Master_Log_Posの値をセット

START SLAVE;
これで、スレーブが再開するか確認。
今回はこれで動き出したようだ。ふう。
タグ:MySQL
posted by usoinfo at 07:19 | Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2013年07月23日

CentOS6にmuninをインストール。ついでにApacheとMySQLも監視。

dump-munin-20130723.png
この画像の例のように、muninでサーバーを軽く監視しておきたいので、インストールしようと思う。

1. muninはepelからインストールするので、入れてなければ EPELを設定。
http://mirrors.fedoraproject.org/publiclist/EPEL/
ここから適当なミラーを選ぶと良いが、どこかのミラーから epel-release-6-8.noarch.rpm を入れる。
% su
# rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
...
# vi /etc/yum.repos.d/epel.repo
...
enabled=0 (デフォルトではepelを見に行かないようにしておく。この辺はお好みで。)
...

2. 次に、muninとmuninに必要なものをインストール。
# yum install --enablerepo=epel munin munin-node
...(いろいろたくさんパッケージが入る)
# service munin-node start (とりあえず起動)

3.Webからmuninを見えるように設定。
設定を直接httpd.confかVirtualHostの中に書いても良いし、conf/extra/munin.conf などに分けてincludeしてもいい。インストールしたmuninでは、/var/www/html/munin にファイルが生成されるので、Aliasを切る。必要なら認証もかける。
Alias /munin /var/www/html/munin
<Directory "/var/www/html/munin">
AuthUserFile ***passwdfile_path***
AuthName ByPassword
AuthType Basic
Require valid-user
</Directory>
こんな感じ。
/var/log/munin 以下にmuninのログがあって、munin-update.log あたりを覗くと、ちゃんと動いているかどうか分かる。5分に1回走るので、15分くらいしたら、http://****/munin にアクセスすると、グラフが見える。はずだ。

4.ついでに、Apacheも監視してみる。
まず、もし plugins にシンボリックリンクが張ってなかったら、こんな感じで張る。
ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses
ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/apache_processes
ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/apache_volume
次に、muninがApacheからserver-statusを取れるように、Apacheを設定。httpd.confにでも、こんな感じの設定を追加。
# vi httpd.conf
...
LoadModule status_module modules/mod_status.so (もしコメントアウトされていれば有効化)
...
<Location /server-status>
AddDefaultCharset EUC-JP
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>

ExtendedStatus On
Apacheを再起動したら、コマンドラインで動作をテストしてみる。
# munin-run apache_accesses
accesses80.value 0
value が U になっている時は、うまくserver-statusが取れてないと思われるので、'curl http://127.0.0.1/server-status' などと手動で実行してみて、apacheの設定が正しいか確認しよう。値が取れていれば、munin-node を再起動して、しばらくするとmuninのグラフに見えるはず。

5.さらに、MySQLも監視してみる。
もし入ってなければ perl-DBD-MySQL をインストール。
# yum install perl-DBD-MySQL

そして、plugins の下にシンボリックリンクを張る。必要なものだけ張ればいいと思うが、ここではとりあえず全部盛りとした。
ln -s /usr/share/munin/plugins/mysql_bytes /etc/munin/plugins/
ln -s /usr/share/munin/plugins/mysql_queries /etc/munin/plugins/
ln -s /usr/share/munin/plugins/mysql_slowqueries /etc/munin/plugins/
ln -s /usr/share/munin/plugins/mysql_threads /etc/munin/plugins/
(ここまでの4つと、ここから下は、オプションで必要な設定が異なるらしい)
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_commands
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_innodb_bpool
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_innodb_io
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_innodb_log
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_innodb_tnx
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_select_types
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_table_locks
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_connections
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_slow
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_network_traffic
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_qcache
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_qcache_mem
監視されるMySQL側には、muninでアクセスするアカウントを作成(既存のアカウントを使うのであれば不要)。
% mysql -h 127.0.0.1 -u root -p
...
mysql> GRANT ALL PRIVILEGES ON *.* TO 'munin'@'127.0.0.1' IDENTIFIED BY 'mypassword!!' WITH GRANT OPTION;
そして、munin-nodeがmysqlにアクセスできるように /etc/munin/plugin-conf.d/munin-node に設定を追加。
# vi /etc/munin/plugin-conf.d/munin-node
...(以下を追加)
[mysql*]
env.mysqladmin /usr/local/mysql/bin/mysqladmin (mysqladminへのパスを書く)
env.mysqlopts -u munin -pmypassword!! -h 127.0.0.1 --port=3306 (さっき設定したアカウントまたは既存のアカウント)
env.mysqlconnection DBI:mysql:mysql;host=127.0.0.1;port=3306
env.mysqluser munin
env.mysqlpassword mypassword!!
上2行は mysql_bytes から mysql_threads まで、下3行は mysql_ のプラグインに必要な設定のようで、両方必要のようだ。

設定したら、munin-run で動作確認。
# munin-run mysql_queries
Warning: Using a password on the command line interface can be insecure.
delete.value 373
insert.value 3025
replace.value 0
select.value 7018
update.value 177
cache_hits.value 0
# munin-run mysql_commands
Com_delete.value 373
Com_insert.value 3025
Com_insert_select.value 0
Com_load.value 0
Com_replace.value 0
Com_replace_select.value 0
Com_select.value 7018
Com_update.value 177
Com_update_multi.value 0
追補
MySQLとmuninのバージョンの組み合わせによっては、/usr/share/munin/plugins/mysql_ 系の各コマンドで、"Unknown section: INDIVIDUAL BUFFER POOL INFO at /etc/munin/plugins/mysql_**** line xxxx." のエラーが出て動作しないことがある。
これは、MySQL の SHOW ENGINE INNODB STATUS に、muninが読解不能のセクションが含まれているのが原因の模様。とりあえずの回避策として、当該のセクションをスキップするように変更。
# /usr/share/munin/plugins/mysql_
(1084行目あたり)
...
'TRANSACTIONS' => \&parse_transactions,
'BACKGROUND THREAD' => \&skip,
'INDIVIDUAL BUFFER POOL INFO' => \&skip,
);
...
これでスキップされるはずだ。

6.仕上げ
設定できたら、munin-node を再起動。ついでに、OSのブート時にmunin-nodeが起動するように設定しておく。
# service munin-node restart
# chkconfig --add munin-node
# chkconfig munin-node on
posted by usoinfo at 10:50 | Comment(1) | 開発 | このブログの読者になる | 更新情報をチェックする

2013年07月10日

Microsoft .NET Framework 1.1 SP1 用セキュリティ更新プログラム (KB2833941) がWindowsUpdateでインストールできない

OSはWindows XP SP3。ランタイムが入っていないのが原因か? 必ずしもどもXPでも起こるわけではないようである。
手動でいく。

まずここ http://www.microsoft.com/ja-jp/download/details.aspx?id=39469 から、Windows XP、Windows Server 2003 (64 ビット)、Windows Vista、および Windows Server 2008 用 Microsoft .NET Framework 1.1 Service Pack 1 セキュリティ更新プログラム (KB2833941) をダウンロード。

実行すると、インストール途中で 'netfx.msiがないので場所を指定して' 的なことを言われる。WindowsUpdateで失敗していたのはこれのせいか。
netfx.msiを入手するため、ここ http://www.microsoft.com/ja-jp/download/details.aspx?id=26 から、Microsoft .NET Framework Version 1.1 再頒布可能パッケージ をダウンロード。
保存したフォルダでコマンドプロンプトを開き、
C:\>dornetfx.exe /C /T:C:\work
などとして、中身を解凍する。
そして、KB2833941 のnetfx.msiの場所に、解凍したフォルダを指定してやる。

これで解決。
posted by usoinfo at 05:37 | Comment(0) | Windows | このブログの読者になる | 更新情報をチェックする