2012年10月16日火曜日

OpenBlocks AX3でVyattaを動かす(起動編)

◆はじめに

前回に引き続きオープンソースルータのVyatta CORE 6.4をOpenBlocks AX3で動かします。前回は各サブモジュールのビルドまでを行いましたが、今回はISO LIVEイメージを作成しUSBメモリを用いてVyattaを起動させます。その後内蔵のSSDにVyattaをインストールしSSDから起動するようにします。そしてVyattaの簡単な動作確認を行います。

前回の記事はこちら: OpenBlocks AX3でVyattaを動かす(ビルド編)

◆VyattaのISO LIVEイメージ作成

パッケージリストから不要なパッケージの削除と必要なパッケージの追加を行います。
 $ cd ~/build-iso
 $ vi livecd/config.vyatta/chroot_local-packageslists/vyatta-full.list
 (以下を削除)
 grub-common
 grub-pc
 (以下を追加)
 libnet0
 libsablot0
自動で取得できないパッケージはあらかじめ pkgs ディレクトリにコピーします。

以下は、前回Debian lenny用リポジトリから取得したパッケージです
 $ cp /var/cache/apt/archives/libsablot0_1.0.3-1+b1_armel.deb pkgs
 $ cp /var/cache/apt/archives/libnet0_1.0.2a-7_armel.deb pkgs  
atmel-firmwareについてはpackages.vyatta.comから取得します。
 $ cd pkgs
 $ wget http://packages.vyatta.com/vyatta/pool/main/atmel-firmware_1.3-4_all.deb
 $ cd ..
livecd/mk.livecd.functions を編集します。レポジトリURLの変更と使用しない開発用レポジトリの削除を行います。
 diff --git a/livecd/mk.livecd.functions b/livecd/mk.livecd.functions
 index 248a4e2..1c92d19 100644
 --- a/livecd/mk.livecd.functions
 +++ b/livecd/mk.livecd.functions
 @@ -288,11 +288,10 @@ set_up_lh_config ()
    fi

    # set up the debian repo
 -  LB_MIRROR_BINARY="http://packages.vyatta.com/debian-$branch"
 -  LB_MIRROR_BOOTSTRAP="http://packages.vyatta.com/debian-$branch"
 +  LB_MIRROR_BINARY="ftp://ftp.plathome.co.jp/pub/debian"
 +  LB_MIRROR_BOOTSTRAP="ftp://ftp.plathome.co.jp/pub/debian"
    export LB_MIRROR_BINARY LB_MIRROR_BOOTSTRAP

 -  local dev_repo_root=http://packages.vyatta.com/vyatta-dev
    local repo_dir=unstable
    if ! eval "$VYATTA_DEV_BUILD"; then
      # not dev build => use testing.
 @@ -310,17 +309,11 @@ set_up_lh_config ()

      # set up chroot_sources
      cd ../config/chroot_sources
 -    ## "this" branch
 -    if [ ! -f vyatta.chroot ]; then
 -      echo "deb $dev_repo_root/$branch/$repo_dir $branch main" >vyatta.chroot
 -    fi
      ## "base" and "extra" branches for overlay
      for branch in "$VBUILD_BASE_BRANCH" "${VBUILD_EXTRA_BRANCHES[@]}"; do
        if [ -z "$branch" ] || [ -f "vyatta-$branch.chroot" ]; then
          continue
        fi
 -      echo "deb $dev_repo_root/$branch/$repo_dir $branch main" \
 -        >"vyatta-$branch.chroot"
        cp vyatta.chroot.gpg "vyatta-$branch.chroot.gpg"
      done
livecd/mk.livecd を編集してgrub関連部分の削除を行います。また生成されるイメージはbinary-hybrid.isoではなくbinary.isoのため該当部分を修正します。
 diff --git a/livecd/mk.livecd b/livecd/mk.livecd
 index dc2795e..6187fa9 100755
 --- a/livecd/mk.livecd
 +++ b/livecd/mk.livecd
 @@ -99,9 +99,6 @@ cp -f config/chroot_apt/preferences chroot/etc/apt
  # but that's even uglier.
  echo 'do_initrd = Yes' >chroot/etc/kernel-img.conf

 -echo 'I: creating default grub config'
 -create_default_grub_config
 -
  # build the XenSource partition image
  if eval "$create_xensourcevm"; then
    vyatta-xensource-partition-image || exit 1
 @@ -114,8 +111,6 @@ if ! lh binary ; then
    exit 1
  fi

 -# new image name (hybrid image)
 -mv binary-hybrid.iso binary.iso
  ln -nsf binary.iso livecd-"$BUILDID".iso

  echo I: Done
Linuxカーネルを指定します。
 $ echo "linux-image-3.0.32-1-obsax3-vyatta" > livecd/config.vyatta/chroot_local-packageslists/vyatta-kernel.obsax3-vyatta
Vyattaのデフォルトのシリアルの速度は9600bpsです。OpenBlocks AX3のブートローダのデフォルトは115200bpsなので115200に変更します。変更箇所はシステムのデフォルト値とVyattaの設定ファイルの二ヶ所です。
livecd/config.vyatta/chroot_local-hooks/05-event_tty:

 $ sed -i -e 's/9600/115200/' livecd/config.vyatta/chroot_local-hooks/05-event_tty


livecd/templates/community/config.boot.default:

 diff --git a/livecd/templates/community/config.boot.default b/livecd/templates/community/config.boot.default
 index 1fb6e3c..a7c043d 100644
 --- a/livecd/templates/community/config.boot.default
 +++ b/livecd/templates/community/config.boot.default
 @@ -31,7 +31,7 @@ system {
      }
      console {
          device ttyS0 {
 -            speed 9600
 +            speed 115200
          }
      }
      config-management {
OpenBlocks AX3に附属しているpshd, runledと起動スクリプトをコピーします。
 $ mkdir -p livecd/config.vyatta/chroot_local-includes/usr/sbin
 $ cp -p /usr/sbin/pshd livecd/config.vyatta/chroot_local-includes/usr/sbin
 $ cp -p /usr/sbin/runled livecd/config.vyatta/chroot_local-includes/usr/sbin
 $ mkdir -p livecd/config.vyatta/chroot_local-includes/etc/init.d
 $ cp -p /etc/init.d/pshd livecd/config.vyatta/chroot_local-includes/etc/init.d
 $ cp -p /etc/init.d/runled livecd/config.vyatta/chroot_local-includes/etc/init.d
続いてルートファイルシステム生成中に実行される4つのスクリプトを追加します。
livecd/config.vyatta/chroot_local-hooks/90-update-initramfs:
(initramfsの生成)

    #! /bin/sh
    update-initramfs -c -k 3.0.32-1-obsax3-vyatta


livecd/config.vyatta/chroot_local-hooks/91-obsax3:
(pshd, runledの起動)

    #!/bin/sh
    update-rc.d pshd start 01 2 . stop 01 0 6 .
    update-rc.d runled start 01 2 . stop 01 0 6 .


livecd/config.vyatta/chroot_local-hooks/92-disable-grub:
(install system実行時のgrub installを抑制)

    #!/bin/sh
    sed -e 's/^\(install_grub\)$/#\1/' -i /opt/vyatta/sbin/install-system


livecd/config.vyatta/chroot_local-hooks/93-inittab:
(inittabから不要エントリを削除)

    #!/bin/sh
    sed -e 's/^\([123456]:.*\)/#\1/' -i /etc/inittab

ISOイメージ生成中にuImageを生成するために以下のスクリプトを追加します。
livecd/config.vyatta/binary_local-hooks/90-uimage:

    #!/bin/sh
    gzip -9 < binary/live/vmlinuz-3.0.32-1-obsax3-vyatta > binary/live/vmlinuz-3.0.32-1-obsax3-vyatta.gz
    mkimage -n "Vyatta Linux 3.0.32" -A arm -O linux -T multi -C gzip -a 0x8000 -e 0x8000 -d binary/live/vmlinuz-3.0.32-1-obsax3-vyatta.gz:binary/live/initrd.img 3.0.32-1-obsax3-vyatta binary/uImage
    rm -f binary/live/vmlinuz-3.0.32-1-obsax3-vyatta.gz
これらに実行フラグを立てます。
 $ chmod +x livecd/config.vyatta/chroot_local-hooks/9?-*
 $ chmod +x livecd/config.vyatta/binary_local-hooks/90-uimage
configureを実行します。
 $ export PATH=/sbin:/usr/sbin:$PATH
 $ autoreconf -i
 $ ./configure --with-kernel-flavor=obsax3-vyatta --with-devbuild=false
生成された livecd/mk.livecd.conf を編集します。
 (LB_APTをaptitudeからapt-getに変更。debugに効果あり)
 declare -x LB_APT="apt-get"
 (以下の行は不要なので削除)
 declare -x LB_BOOTLOADER="syslinux"
最後にisoイメージの生成を行います。一般ユーザで作業すると途中chrootのあたりでエラーになるためrootで行います。
パッケージのダウンロード等も行われるので多少時間を要します。
 $ su
 # make iso
     .
     .
 P: Deconfiguring file /etc/apt/apt.conf
 P: Deconfiguring file /usr/sbin/policy-rc.d
 P: Begin unmounting /sys...
 P: Deconfiguring file /usr/sbin/initctl
 P: Begin unmounting /selinux...
 P: Begin unmounting /proc...
 P: Begin unmounting /dev/pts...
 P: Begin unmounting filesystems...
 I: Done

 # ls -l livecd/binary.iso
 -rw-r--r-- 1 root root 196575232 Aug 30 20:41 livecd/binary.iso


◆OpenBlocks AX3でVyattaをlive起動

vfatでフォーマットされたUSBメモリを使ってvyattaを起動します。
binary.isoを中身をそのままUSBメモリにコピーします。
 $ cd ~build_iso
 $ su
 # mkdir /tmp/mnt2
 # mount livecd/binary.iso /tmp/mnt2 -o loop
 # mount /dev/sdb1 /mnt
 # rsync -a /tmp/mnt2/ /mnt
 # ls -l /mnt
 total 6976
 drwxr-xr-x 3 root root   16384 Aug 30 20:40 doc
 drwxr-xr-x 3 root root   16384 Aug 30 20:40 isolinux
 drwxr-xr-x 2 root root   16384 Aug 30 20:40 live
 -r-xr-xr-x 1 root root    3575 Aug 30 20:40 md5sum.txt
 -r-xr-xr-x 1 root root 7077423 Aug 30 20:40 uImage
 # umount /mnt
 # umount /tmp/mnt2
OpenBlocks AX3を再起動して適当なキーを押しブートローダで停止させます。
 # reboot
   .
   .
   .
 MMC:   MRVL_MMC: 0
 Net:   egiga0, egiga1
 Hit any key to stop autoboot:  0
 openblocks>
USBの初期化をします。
 openblocks> usb start
 (Re)start USB...
 USB:   Active port:     0
 Register 10011 NbrPorts 1
 USB EHCI 1.00
 scanning bus for devices... 2 USB Device(s) found
 Waiting for storage device(s) to settle before scanning...
        scanning bus for storage devices... 1 Storage Device(s) found
FATファイルシステムのコンテンツを確認します。
 openblocks> fatls usb 0:1
 0/32 blocks
             .disk/
             doc/
             isolinux/
             live/
      3575   md5sum.txt
   7077423   uimage
 0/32 blocks
 0/32 blocks
 0/32 blocks

 2 file(s), 4 dir(s)
uimageが確認できたら、FATファイルシステムからカーネルイメージをロードします。
 openblocks> fatload usb 0:1 0x20000000 uImage
 reading uImage
 0/32 blocks
 13760/13792 blocks
 0/31 blocks

 7077423 bytes read
ブートパラメタを設定してブートします。
 openblocks> setenv bootargs boot=live union=unionfs console=ttyS0,115200
 openblocks> bootm 0x20000000
USBメモリからのlive起動なので起動完了まで時間がかかります。今回の環境では2分30秒を要しました。
起動完了するとログインプロンプトがでるのでID:vyatta, Password:vyattaでloginします。
 Welcome to Vyatta - vyatta ttyS0

 vyatta login: vyatta
 Password:
 Linux vyatta 3.0.32-1-obsax3-vyatta #2 SMP Thu Aug 30 00:19:15 JST 2012 armv7l
 Welcome to Vyatta.
 This system is open-source software. The exact distribution terms for
 each module comprising the full system are described in the individual
 files in /usr/share/doc/*/copyright.
 vyatta@vyatta:~$
この状態でVyattaの機能は使える状態になっています。


◆SSDにVyattaをインストール

USBメモリからlive起動した状態だとconfigのセーブなどが行えない状態なので内蔵のSSDにVyattaをインストールします。
本来はVyattaのinstall systemの中でパーティショニングやファイルシステムの構築なども行えますが、今回は既存のファイルシステムを一部残して起きたかったのでパーティショニングはあらかじめオリジナルのDebianで行っておきます。

Vyattaを一度終了してDebianをRAMディスクモードで起動します。
 vyatta@vyatta:~$ reboot
Debianが起動したら、fdiskを実行します。
詳細は省略しますが、最終的に以下のようなパーティショニングを行いました。
 # fdisk -l /dev/sda

 - snip -

 Disk /dev/sda: 32 GB, 32012789760 bytes
 255 heads, 63 sectors/track, 3892 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot      Start         End      Blocks   Id  System
 /dev/sda1               1          20      160618   83  Linux
 /dev/sda2              21        1350    10675192   83  Linux
 /dev/sda3            1351        3892    20410582   83  Linux
sda1はVyattaのLinuxカーネル保存用の領域です。OpenBlocks AX3のブートローダu-bootでは、大きいパーティションからのext2loadを行うとエラーとなるためブート専用に小さめの領域を確保しました。
sda2はVyattaの/用の領域です。10GBもあれば十分です。
sda3は既存のDebian環境用の領域です。

Vyatta用bootの領域をext2でフォーマットし、Linuxカーネルイメージをコピーしておきます。
 # mkfs.ext2 /dev/sda1

 # mount /dev/sda1 /mnt
 # mount /dev/sdb1 /mnt2
 # cp -p /mnt2/uImage /mnt
 # ls -l /mnt
 Total 6951
 drwx------ 2 root root   12288 Sep  4 16:23 lost+found
 -rwxr-xr-x 1 root root 7076480 Aug 30 23:00 uImage
rebootし、u-bootで停止し今度はsda1からのuImageを使用してUSB LIVE起動します。
 # reboot
 - snip -

 openblocks> ide reset          

 Reset IDE:
 Marvell Serial ATA Adapter
 Integrated Sata device found
   Device 0 @ 0 0:
 Model: ADATA SSD S396 30GB                    Firm: 3.3.2    Ser#: 02414202500300002255
             Type: Hard Disk
             Supports 48-bit addressing
             Capacity: 30533.8 MB = 29.8 GB (62533296 x 512)

 openblocks> ext2ls ide 0:1
 <DIR>       1024 .
 <DIR>       1024 ..
 <DIR>      12288 lost+found
          7076480 uImage
 openblocks> ext2load ide 0:1 0x20000000 uImage
 Loading file "uImage" from ide device 0:1 (hda1)
 7076480 bytes read
 openblocks> setenv bootargs boot=live union=unionfs console=ttyS0,115200
 openblocks> bootm 0x20000000
起動したらvyatta/vyattaでログイン後 install systemを実行します。
Partitionの設定はSkipしてシステムはsda2にインストールします。
 vyatta@vyatta:~$ install system
 Welcome to the Vyatta install program.  This script
 will walk you through the process of installing the
 Vyatta image to a local hard drive.

 Would you like to continue? (Yes/No) [Yes]:
 Probing drives: OK
 Looking for pre-existing RAID groups...none found.
 You have two disk drives:
         sda     32017 MB
         sdb     1006 MB
 Would you like to configure RAID-1 mirroring on them? (Yes/No) [Yes]:No
 Ok.  Not configuring RAID-1.
 The Vyatta image will require a minimum 1000MB root.
 Would you like me to try to partition a drive automatically
 or would you rather partition it manually with parted?  If
 you have already setup your partitions, you may skip this step.

 Partition (Auto/Union/Parted/Skip) [Auto]: Skip

 The Vyatta install needs a minimum 1000MB root
 with partiton type 83 (Linux).



 Looking for appropriate partitions: OK
 I found the following partitions suitable for the Vyatta image:
 Partition       Size
  sda2           10939MB
  sda3           20908MB


 Which partition should I install the root on? [sda2]:

 Creating filesystem on /dev/sda2: OK
 Mounting /dev/sda2
 Copying system files to /dev/sda2:
  97% [=================================================> ] OK
 I found the following configuration files
 /opt/vyatta/etc/config/config.boot
 Which one should I copy to sda? [/opt/vyatta/etc/config/config.boot]:

 Enter password for administrator account
 Enter vyatta password:
 Retype vyatta password:
 /opt/vyatta/sbin/install-system: line 1428: /usr/sbin/dmidecode: No such file or directory
 /opt/vyatta/sbin/install-system: line 1429: /usr/sbin/dmidecode: No such file or directory
 Done!
 vyatta@vyatta:~$
sda2へのVyattaシステムのインストールが終わりました。(「dmidecode: No such file or directory」は無視してかまいません」)


◆OpenBlocks AX3のSSDからVyattaを起動

rebootしてVyattaが起動できることを確認します。
 vyatta@vyatta:~$ reboot
再びu-bootで停止し、SSD上のsda2をrootとしてVyattaを起動します。
 openblocks> ide reset          
 openblocks> ext2load ide 0:1 0x20000000 uImage
 openblocks> setenv bootargs root=/dev/sda2 console=ttyS0,115200
 openblocks> bootm 0x20000000
loginプロンプトが出てくれば無事完了です。
 Welcome to Vyatta - vyatta ttyS0

 vyatta login:
再びrebootして、u-bootで起動時に自動的にVyattaが起動するように設定します。
 openblocks> setenv bootcmd "ide reset;ext2load ide 0:1 0x20000000 uImage;setenv bootargs root=/dev/sda2 console=ttyS0,115200;bootm 0x20000000"
 openblocks> saveenv
 openblocks> reset    (再起動)
ちなみに出荷時の状態に戻すにはu-bootで以下のように設定します。
 openblocks> setenv bootcmd "echo;echo Run Boot Selection Script;echo;run _phase_1"
 openblocks> saveenv
または、次のコマンドで出荷時の状態に戻すことができます。
 openblocks> run clr_env


◆Vyattaの基本動作確認(アドレス設定、ユーザ管理、ssh接続等)

Vyattaで基本的なインターフェイスの設定等を行います。
 vyatta@vyatta$ configure
 [edit]
 vyatta@vyatta#
eth0のアドレスはDHCPで取得するようにします。
eth1にはstaticアドレスを設定します。vyattaはcommitコマンドにより設定が有効になります。
 vyatta@vyatta# set interfaces ethernet eth0 address dhcp
 vyatta@vyatta# set interfaces ethernet eth1 address 192.168.200.1/24
 vyatta@vyatta# commit
configureモードを抜けてshow interfacesでinterfaceの状態を確認します。
 vyatta@vyatta# exit
 Warning: configuration changes have not been saved.
 exit
 vyatta@vyatta:~$ show interfaces
 Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
 Interface        IP Address                        S/L  Description
 ---------        ----------                        ---  -----------
 eth0             192.168.111.227/24                u/u
 eth1             192.168.200.1/24                  u/u
 lo               127.0.0.1/8                       u/u
                  ::1/128
pingコマンドを確認します。
 vyatta@vyatta:~$ ping 192.168.111.1
 PING 192.168.111.1 (192.168.111.1) 56(84) bytes of data.
 64 bytes from 192.168.111.1: icmp_req=1 ttl=255 time=0.851 ms
 64 bytes from 192.168.111.1: icmp_req=2 ttl=255 time=0.308 ms
dateコマンドを確認します。
 vyatta@vyatta:~$ show date
 Tue Sep  4 08:05:56 GMT 2012
TIMEZONEをJSTに変更します。
 vyatta@vyatta:~$ configure
 vyatta@vyatta# set system time-zone Asia/Tokyo
 [edit]
 vyatta@vyatta# commit
 [ system time-zone Asia/Tokyo ]
 Stopping enhanced syslogd: rsyslogd.
 Starting enhanced syslogd: rsyslogd.

 [edit]
 vyatta@vyatta# date
 Tue Sep  4 17:07:20 JST 2012
 [edit]
SSHデーモンを有効にして外からssh loginできるようにします。
 vyatta@vyatta# set service ssh
 [edit]
 vyatta@vyatta# commit
 [ service ssh ]
 Restarting OpenBSD Secure Shell server: sshd.

 [edit]
 vyatta@vyatta#
次にユーザhogeを作成しpublic keyを設定し、外からloginできるようにします。
 vyatta@vyatta# set system login user hoge
 vyatta@vyatta# set system login user hoge authentication plaintext-password hogehoge
 vyatta@vyatta# set system login user hoge authentication public-keys ono@hoge.local
 vyatta@vyatta# set system login user hoge authentication public-keys ono@hoge.local type ssh-rsa
 vyatta@vyatta# set system login user hoge authentication public-keys ono@hoge.local key AAAAB3NzaC1yc2....
 vyatta@vyatta# commit
ユーザhogeでloginできることを確認します。
 another-machine$ ssh hoge@192.168.111.217
作成したconfigをsaveし次回起動にその設定で立ち上がるようにします。
 vyatta@vyatta# save


◆まとめ

前回と今回の2回でVyatta CORE 6.4をOpenBlocks AX3にインストールしました。
VyattaをSSDから起動し基本的なインターフェイス設定等が動作することを確認しました。


作成したOpenBlocks AX3用のISOイメージは以下の場所からダウンロードできますのでご利用ください。

http://vyatta.yellowback.net
ftp://ftp.plathome.co.jp/pub/OBSAX3/obdnmag/vyatta64/

また、修正済みソース等はgithubに置いてますのでご参照ください。

https://github.com/yellowback/vyatta-build-iso
https://github.com/yellowback/vyatta-linux-image
https://github.com/yellowback/vyatta-biosdevname
https://github.com/yellowback/vyatta-cfg-system

1 件のコメント:

  1. こんにちは、
    今回AX3を利用してVyattaを構築しています。
    前のビルド編は終わって
    起動編のLiveCDのISOイメージを作成するところで
    固まっています
    make isoを実行すると
    root@obsax3-A:/home/openflow/vyatta/build-iso# make iso
    cd livecd && ./mk.livecd
    I: cleaning earlier build
    I: configuring build
    ./mk.livecd.functions: line 305: lh: command not found
    root@obsax3-A:/home/openflow/vyatta/build-iso#

    lh Commandかないっていうエラーが出ます
    lh ってどんな命令ですか?
    解決方法を教えてください。

    返信削除