2010/01/12

Ubuntu 8.04上でAlix用にUbuntu 9.10 (Karmic)なCFカードを作成する

無線LANのクライアント、うまく行けばAPにできないかと思い、手持ちのLogitec LAN-W150N/U2 SeriesPlanex GW-USMicroNを動かそうとしたのですが、いつも使っているDebian lennyではカーネルを再構築する以外の方法がなさそうだったのでUbuntu 9.10 (Karmic)をalixに導入する事にしました。

ちなみにKarmic上で各デバイスがロードするドライバは次の通りで、これはlenny用のfirmware-ralinkパッケージには含まれていません。

  • LAN-W150N/U2 Series: rt2800usb (firmware: rt2870.bin)
  • GW-USMicroN: rt2870sta (firmware: rt2870.bin)

今回の作業はCFカードの設定までですが、これはUbuntu 8.04 (hardy)上で行ない、CFカードは/dev/sdgとして認識されている前提で説明をしています。

debootstrapからのkarmic導入はうまくいかない

karmicを直接導入するには、以下のコマンドで行えますが、kernel-imageを導入する段階でgrubの導入が先に進んでしまい、うまく導入する事ができません。 しかしkermit上で作業を進めれば、問題なく進める事ができるかもしれません。

$ sudo debootstrap --arch i386 karmic /mnt/cf http://jp.archive.ubuntu.com/ubuntu /usr/share/debootstrap/scripts/gutsy

今回は8.04経由なので少し冗長な説明になっていますが、良い機会なので昔に書いたドキュメントを更新するつもりでまとめ直しました。 まぁ強制的にlinux-imageパッケージだけ展開すれば良さそうなものですけどね。

CFカードへのUbuntu 8.04 Hardyの導入

いつもと同じ準備作業

ubuntu 8.04 (hardy)をセットアップし、後からアップグレードします。 まずは以前と同じ手順で始めます。

$ sudo /sbin/fdisk /dev/sdg
$ sudo /sbin/mke2fs /dev/sdg1
$ sudo /sbin/tune2fs -c 0 -i 0 /dev/sdg1
$ sudo mount /dev/sdg1 /mnt/cf
$ sudo debootstrap --arch i386 hardy /mnt/cf

続いて手順に従ってgrubの導入を行ないます。

$ sudo grub-install --root-directory=/mnt/cf /dev/sdg
grub周りの設定

/boot以下にlinuxのカーネルイメージがないので、最低限必要なものだけ追加します。 Ubuntuでは"linux-image-server"はPAEに対応していないアーキテクチャでは起動できないので、linux-image-genericを選択する必要があります。

apt-getを使うためにchrootコマンドを使います。 そしてカーネルパッケージを導入する前にsources.listファイルを編集します。 既存の1行を削除して、下記の内容で上書きしてしまいます。

$ sudo chroot /mnt/cf /bin/bash
# vi /etc/apt/sources.list

/etc/apt/sources.listファイル

deb http://jp.archive.ubuntu.com/ubuntu/ hardy main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu/ hardy main restricted

deb http://jp.archive.ubuntu.com/ubuntu/ hardy-updates main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu/ hardy-updates main restricted

deb http://security.ubuntu.com/ubuntu hardy-security main restricted
deb-src http://security.ubuntu.com/ubuntu hardy-security main restricted

apt-get updateはパッケージの署名関連の情報を更新するために行なっています。

# apt-get update
# apt-get install linux-image-generic

grubが使うmenu.lstファイルを作成する時には、lennyとは異なり/dev/sda1を指定します。

/boot/grub/menu.lstファイル

serial --speed=38400
terminal serial
##
default         0
timeout         10
##
title           Ubuntu 8.04
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.24-26-generic root=/dev/sda1 console=ttyS0,38400n8
initrd          /boot/initrd.img-2.6.24-26-generic
savedefault
シリアル端末周りの設定

Ubuntuでは/etc/inittabがないので、/etc/event.d/ディレクトリの不要なtty?なファイルを削除し、ttyS0ファイルを作成します。

$ cd /etc/event.d
$ sudo rm tty?
$ sudo vi ttyS0

/etc/event.d/ttyS0ファイルの内容

start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec /sbin/getty -L 38400 ttyS0 vt100
その他、fstab周り

/etc/fstabを編集します。 UbuntuではHDDも/dev/sd*として認識されるので、/dev/sda1を使います。

/etc/fstabファイル

/dev/sda1 / ext3 defaults,relatime 0 0
proc /proc proc defaults 0 0

ここまでで、最低限の設定が完了しました。 引き続きalixにCFカードを入れてKarmicにアップグレードする準備をします。 umountコマンドを使わずにCFカードを抜いてしまうと、CFカードに書き込まれずにバッファに溜っているデータが消えてしまう可能性があるので、ちゃんと終了処理を行なうようにします。

$ sudo umount /mnt/cf

シリアル経由でのAlix上での作業を開始

ネットワーク周りの設定

まだ中途半端なシステムを稼働させるために必要な設定をいれていきます。 ネットワーク周りの設定は環境によるので適宜変更してください。

/etc/network/interfacesファイルの設定

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

設定が終れば、NICを起動します。

# ifup lo
# ifup eth0

リモートから作業をするためにsshdを起動してsudoを設定します。

# apt-get install openssh-server
# visudo

visudoによるsudo設定の変更

...
%sudo ALL=NOPASSWD: ALL
...

SSH経由でログインして作業をするためのID(user01)を作成します。

# useradd -m -G sudo user01
# passwd user01

ネットワーク経由で作業を継続

引き続いてgrub周りの設定を再び

無事にネットワークに接続できれば、作成したIDでログインし、grub周りの設定を行ないます。

$ sudo apt-get install grub
$ sudo update-grub

update-grubの実行中にmenu.lstを置き換えるか尋ねられるためinstall_newを選択し、新しいファイルをインストールします。 しかしこのままでは使えないので、先頭に既存のものも残りますが、編集をします。

/etc/grub/menu.lstファイルの変更部分抜粋


...
# kopt=/dev/sda1 console=ttyS0,38400n8
...
# defoptions=
...

新しいlinux-imageが導入された時にmenu.lstファイルを更新するように、 kernel-img.confファイルに設定を追加します。

/etc/kernel-img.confファイルの内容

# Kernel Image management overrides
# See kernel-img.conf(5) for details
do_symlinks = Yes
do_bootloader = no
do_initrd = yes
postinst_hook = update-grub
postrm_hook   = update-grub

最後にupdate-grubコマンドを実行し、menu.lstファイルを生成します。

$ sudo update-grub

menu.lstファイルにシリアル関連の情報が追加されることを確認する

...
root		(hd0,0)
kernel		/boot/vmlinuz-2.6.24-16-generic /dev/sda1 ro console=ttyS0,38400n8 quiet splash
initrd		/boot/initrd.img-2.6.24-16-generic
...

# kopt=で指定した内容を/boot/grub/menu.lstファイルが含んでいる事を確認します。 ここまでで問題なければdefault 0で指定されているファイル先頭を飛して、update-grubで作成されたエントリからブートするように変更しておきます。

変更後のmenu.lstファイル

...
default         1
...
カーネルを含むパッケージの更新

ここまで終ればhardyのまま、パッケージを最新にします。

$ sudo apt-get dist-upgrade

新しいlinux-imageとlibc6を反映させるためにシステムを再起動します。

$ sudo reboot
いよいよkarmicへのアップグレード

コマンドラインからのUbuntuのアップグレード手順は、Network Upgrade for Ubuntu Servers (Recommended)にあります。

Ubuntu 8.04がベースなのでdo-release-upgradeコマンドには-dオプションを使います。

$ sudo apt-get install update-manager-core
$ sudo do-release-upgrade -d

アップグレード対象パッケージの選定と、ダウンロードを始めるタイミングで確認のプロンプトが表れます。 そこで質問の度に停止するので放っておく事はできませんが、yを入力しているとkarmicへのバージョンアップが完了するはずです。

Karmicにアップグレードした後の作業

do-release-upgradeによって再起動が行なわれたとして、必要になる残作業を書いていきます。

ttyS0を認識させる方法

upstart-compat-sysvの仕組みがupstartによって置き換えられたのにもかかわらず、/etc/event.d/ttyS0ファイルがそのままになっているため、gettyが起動せずシリアル経由で接続してもログインプロンプトが表れません。

CFカードを別マシンでマウントして編集しても良いのですが、alix上で作業するなら、SSH経由のネットワークログインか、grubのメニューでrecovery modeを選択してログインします。

8.04では互換性のないttyS0ファイルを作成する事もできるので、独自に作成している場合はマニュアルに当るなどしてください。 このブログでも、Ubuntu 8.04 Hardyと9.10 KarmicでのttyS0の扱い方で簡単な説明をしています。

今回は8.04で互換性のある書式で作成したので、単純にmvします。

$ sudo mv /etc/event.d/ttyS0 /etc/init/ttyS0.conf

実際に使うための便利な設定

manコマンドの追加

マニュアルはパッケージによってインストールされていますが、それを見るために必要なmanが入っていません。

$ sudo apt-get install man-db
ホスト名の変更

CFカードを操作したホスト名がそのまま/etc/hostnameに入っているはずです。 設定されている名前を変更すれば、次の起動時にその名前になります。

ただしsudoを一緒に使うのであれば、IPアドレスを引けるように新しい名前を反映させる前に/etc/hostsを編集します。 例えば、ubuntuにホスト名を変更するとします。

$ sudo vi /etc/hosts

/etc/hostsファイルの内容

127.0.0.1 localhost ubuntu
::1 localhost ubuntu

もし再起動なしにホスト名の変更をしたいのであれば、hostnameコマンドを使います。

$ sudo hostname ubuntu

普通は間違ってrootで実行すると危険なので、ホスト名を確認するためにhostnameコマンドは使いません。 unameコマンドを使いましょう。

$ uname -n
ntpdの設定

ローカルにあるntpサーバーをみるようにntpdateの設定を変更します。 Debianとは違いntpdate自体は既に導入されているはずです。

/etc/default/ntpdateファイル

...
NTPDATE_USE_NTP_CONF=no
...
NTPSERVERS="192.168.1.2 ntp.ring.gr.jp ntp.ubuntu.com"
...  

もし長時間稼働させたままのサーバーにするのであれば、稼働中も時刻を修正するようにntpパッケージを導入します。

$ sudo apt-get install ntp

ntpd.confファイルを編集します。

/etc/openntpd/ntpd.conf

...
#server ntp.ubuntu.com
server 192.168.1.2
...
locale (ja_JP.UTF-8)の設定

このままでは日本語を表示させたいl場面で混乱するので、localeの設定を行ないます。

$ sudo locale-gen ja_JP.UTF-8
$ sudo locale-gen C

端末で$ locale -aコマンドを実行して、ja_JP.utf8が表示されれば完了です。

日付表示をJSTに変更する

現段階ではdateコマンドなどで表示される時刻がUTCになっているので、 日本標準時(JST)に変更しておきます。

$ cd /etc
$ sudo rm localtime
$ sudo ln -s /usr/share/zoneinfo/Japan localtime

さいごに

ここまでで必要な作業はだいたい完了したので、無線LANを試すところは次の機会にしようと思います。

今回の作業で気がついたのですが、alixはAMD Geode LXなので686なマシンタイプ用のカーネルで動くんですよね。 ブロードバンドルーターにしているalixもlinux-image-686に変更しておかないと。

まぁここまで頑張っても、ここから先に何をするかが問題ですからね…。 とりあえずやり直しが効くようにCFカードをデスクトップに持ってきてバックアップをddコマンドで取っておきましょう。

$ sudo dd if=/dev/sdg of=alix_ubuntu_cfcard.img bs=512

0 件のコメント: