Fedora22-LXDEのインストール後ログイン不可

以前、Fedora22 の minimam を SDCard に入れて動かしたとき、初期に出るウィザードがうまく動作していない挙動があって、SDCard の中を Linux マシンでマウントさせ shadow や sudo設定や、passwd 、ホームディレクトリとbash設定をしてやっとログインできたのを思い出しました。

 

詳細は追っていないので、どこに問題があるのかわかりませんが、挙動から初期ウィザードがうまく動作していない様子です。今回、Fedora22-LXDEを BerryBoot の img に変換したわけですが、うまくログインできたFedora22-Workstationの中と比べてみました。

 

以下は、iSCSI Boot しているディスクのトップディレクトリ以下の構造です。

▼Fedora22-Workstation インストール後の boot disk の中身
$ tree -L 4 –filelimit 30
.
├── data
│   └── Fedora22-Workstation-berryboot.img
│       ├── etc
│       │   ├── chrony.keys
│       │   ├── cups
│       │   ├── group
│       │   ├── group-
│       │   ├── gshadow
│       │   ├── gshadow-
│       │   ├── ld.so.cache
│       │   ├── locale.conf
│       │   ├── localtime -> ../usr/share/zoneinfo/Asia/Tokyo
│       │   ├── passwd
│       │   ├── passwd-
│       │   ├── pki
│       │   ├── resolv.conf
│       │   ├── shadow
│       │   ├── shadow-
│       │   └── udev
│       ├── home
│       │   └── pi
│       ├── tmp
│       │   └── tracker-extract-files.1000
│       └── var
│           ├── cache
│           ├── lib
│           ├── log
│           ├── spool
│           └── tmp
├── images
│   └── Fedora22-Workstation-berryboot.img
::

▼Fedora22-LXDE インストール後の boot disk の中身
$ tree -L 4 –filelimit 30
.
├── data
│   └── Fedora22-LXDE-berryboot.img
│       ├── etc
│       │   ├── chrony.conf
│       │   ├── chrony.keys
│       │   ├── hostname
│       │   ├── ld.so.cache
│       │   ├── pki
│       │   ├── resolv.conf
│       │   ├── ssh
│       │   ├── systemd
│       │   └── udev
│       ├── lib
│       │   ├── python2.7
│       │   └── systemd
│       ├── root
│       ├── tmp
│       │   ├── anaconda.log
│       │   ├── ifcfg.log
│       │   ├── packaging.log
│       │   ├── program.log
│       │   ├── sensitive-info.log
│       │   └── storage.log
│       └── var
│           ├── cache
│           ├── lib
│           ├── log
│           ├── spool
│           └── tmp
├── images
│   └── Fedora22-LXDE-berryboot.img
::

data ディレクトリ配下に、img にはないものが書き出されているようです。両者を比較してみますと、初期ウィザードで作られてもおかしくないファイルがごっそりありません。

試しに、必要なものをコピーして起動してみましが、元の状態に書き換わってしまいます。BerryBoot がルートファイルシステムにchroot するときか、それ以前かわかりませんが、何かチェックサムか何か見ているのでしょう。

 

さて、どうしますかね。シングルユーザモードで起動する方法も試してみましたが、BerryBoot.img の 中のinitを追わないと、kernel に渡す引数がどうなっているのかわかりません。前回、berryboot.img の中をのぞいてみた ではちょっと見ただけで処理を追ったわけじゃないので。

 

・・・・・・・・さて、方法は以下のような対処が考えられそうです。

1)berryboot.img の処理を追って、シングルユーザモードで起動させる方法があるか見極める。なければ、作る。

2)Fedora22 のimg を作る段階で、初期ユーザなどの設定を入れてしまう。

3)Fedora22 の minimam や LXDE などの配布イメージの初期ウィザードがなぜ動作しないか追う

 

3が正等な方法ですが、気力がわいてこないので、1か、2で対応しようと思っていますが、これも気力がわいてこない。一番お手軽なのは、2なので、やる気が沸いてくるまで、他のことを考えようかと思います。

 

ふぅ。いろいろありますね~。

BerryBoot 用のBoot img 作成でドはまり

かなり、ハマッてしまったのでポイントを後ほど、メモしておくことにします。

何にはまったかっていうと、Fedora21 ~ 22 の各種ARM 用のイメージファイルを BerryBoot の img にする手順がうまくいかなくて、以下のようになって、Kernel panic でBoot しないわけで。くじけそうになった最後にやっとできました。

 

オフィシャルの手順は、以下のように紹介されています。

Adding your own custom operating systems to the menu

$ sudo kpartx -av image_you_want_to_convert.img
add map loop0p1 (252:5): 0 117187 linear /dev/loop0 1
add map loop0p2 (252:6): 0 3493888 linear /dev/loop0 118784
$ sudo mount /dev/mapper/loop0p2 /mnt
$ sudo sed -i ‘s/^\/dev\/mmcblk/#/g’ /mnt/etc/fstab
$ sudo mksquashfs /mnt converted_image_for_berryboot.img -comp lzo -e lib/modules
$ sudo umount /mnt
$ sudo kpartx -d image_you_want_to_convert.img

実際にやってみると、まぁ、いろいろあるのはいつものこと。

ポイントは、ルートファイルシステム直下のシンボリックリンクを実態にして、逆側から張りなおすこと!そうしないと、以下のようになって、RAM ディスクの kernel から、動かす img の ファイルシステムがマウントできません。後ほど、手順をつけておきます。次やるとき、絶対忘れる自信があるので。

写真

とりあえず出来たので画像メモを貼り付け。

写真_2

で、各種初期設定をすればOK

写真_1

もうね、疲れました。が、ARM の IoT デバイスのノウハウが貯まったということで、少し前進。各ディストリビューションも ARM 用のオフィシャルイメージの準備もしてきているわけですし。野良イメージは怖いので、とりあえずはオフィシャルのを使えるようになったということで、満足。

Fedora_ARM さて、QKして気力、体力も復活したので、忘れないうちにメモしておきます。

オフィシャルの ARM イメージは上のリンクから辿って、以下のようなファイルが落とせます。ファイルサイズの大きい順では、

Size byte   M,GB  FineName
———-  —-  —————————————–
1194022996  1.1G  Fedora-Workstation-armhfp-22-3-sda.raw.xz
1129186356  1.1G  Fedora-KDE-armhfp-22-3-sda.raw.xz
837507064  799M  Fedora-Xfce-armhfp-22-3-sda.raw.xz
761534064  726M  Fedora-LXDE-armhfp-22-3-sda.raw.xz
552451864  527M  Fedora-SoaS-armhfp-22-3-sda.raw.xz
427291172  407M  Fedora-Server-armhfp-22-3-sda.raw.xz
301285980  287M  Fedora-Minimal-armhfp-22-3-sda.raw.xz

となります。

今までは、GUI環境などはまったく無視してきたので、どの環境がよいのかはわかりませんが、下2つはサーバ用途ですので、今回はFedora の代表的な顔である、Workstation を入れてみたいと思います。まぁ、最後は結局全部入れることになるわけですが。

 

さて、今回の手順は、BerryBoot の インストールできる状態のイメージの作成ということですが、今回は、さらに iscsi boot する環境でそれをテストしてみたいと思います。とは、言っても通常のSDカードやUSBデバイス(USBメモリやUSB HDD)に入れるのとそれほど変わりはありません。

前提条件をまとめますと以下のようになります。

今回の環境

・BerryBoot で、ISCSI Bootの SCSI デバイスにルートを入れる

・BerryBoot 用のimg があれば、インストールはBerryBoot のインスーラーがいれてくれる

・ARM 物理環境は、RasPi2 + 2GB SDCard (実際は250Mもあれば足ります)+ LAN (WiFi でもいけるようです)

・iSCSI のターゲットは、FreeNAS (この説明は除外)で、仮想環境で提供。本体はosx

・img 作成には、ubuntu 12 を使用

作業の流れは、以下のようになります。

1) FedoraのARMオフィシャルサイトより、イメージを取得

2) 圧縮されているので展開し、img の状態に。

3) img の中にあるルートパーティションをマウント

4) ルート直下のシンボリックリンクを修正

5) fstab をコメントアウト

6) lzo 圧縮した BerryBoot 用の img を作成

7) 後処理

手順 1

ubuntu上で、作業します。

オフィシャルサイトより、イメージをゲット。全部 root でやってますので、sudo は付けていません。

# wget https://download.fedoraproject.org/pub/fedora/linux/releases/22/Workstation/armhfp/Images/Fedora-Workstation-armhfp-22-3-sda.raw.xz

CHECKSUM

# sha256sum Fedora-Workstation-armhfp-22-3-sda.raw.xz

※sum を確認

手順 2

ファイルは何なのか確認。

# file Fedora-Workstation-armhfp-22-3-sda.raw.xz
Fedora-Workstation-armhfp-22-3-sda.raw.xz: XZ compressed data

XZ 圧縮なので、xzcat で展開して、img とします。

# xzcat -v Fedora-Workstation-armhfp-22-3-sda.raw.xz > Fedora-Workstation-armhfp-22-3-sda.img

速ければ、1分ちょいくらいです。

手順 3

img ファイルの中のルートファイルシステムをマウントします。kpartx だと簡単ですが、無い環境用に、手動でやる方法も書いておきます。kpartx -a で、イメージファイルの中のパーティションをブロックデバイスに割付ます。

# kpartx -av Fedora-Workstation-armhfp-22-3-sda.img
add map loop0p1 (252:0): 0 999424 linear /dev/loop0 2048
add map loop0p2 (252:1): 0 1000482 linear /dev/loop0 1001472
add map loop0p3 (252:2): 0 9765625 linear /dev/loop0 2001954★ここをマウント

# mkdir /mnt/fedora22
# mount /dev/mapper/loop0p3 /mnt/fedora22/

確認します。

# ll /mnt/fedora22/
合計 92
dr-xr-xr-x.  18 root root  4096  5月 22 04:00 ./
drwxr-xr-x    3 root root  4096  7月 19 09:39 ../
lrwxrwxrwx.   1 root root     7  8月 16  2014 bin -> usr/bin/
drwxrwxr-x.   2 root root  4096  5月 22 03:58 boot/
drwxr-xr-x.   4 root root  4096  5月 22 04:14 dev/
drwxr-xr-x. 126 root root 12288  5月 22 04:28 etc/
drwxr-xr-x.   2 root root  4096  8月 16  2014 home/
lrwxrwxrwx.   1 root root     7  8月 16  2014 lib -> usr/lib/
drwx——.   2 root root 16384  5月 22 03:58 lost+found/
drwxr-xr-x.   2 root root  4096  8月 16  2014 media/
drwxr-xr-x.   2 root root  4096  8月 16  2014 mnt/
drwxr-xr-x.   2 root root  4096  8月 16  2014 opt/
drwxrwxr-x.   2 root root  4096  5月 22 03:58 proc/
dr-xr-x—.   2 root root  4096  5月 22 04:28 root/
drwxr-xr-x.  32 root root  4096  5月 22 04:12 run/
lrwxrwxrwx.   1 root root     8  8月 16  2014 sbin -> usr/sbin/
drwxr-xr-x.   2 root root  4096  8月 16  2014 srv/
drwxrwxr-x.   2 root root  4096  5月 22 03:58 sys/
drwxrwxrwt.   7 root root  4096  5月 22 04:28 tmp/
drwxr-xr-x.  11 root root  4096  5月 22 04:00 usr/
drwxr-xr-x.  21 root root  4096  5月 22 04:12 var/

kpartx が無い場合は、以下で。

        ▼パーティションのサイズを調べて、個別にマウントさせる

parted Fedora-Xfce-armhfp-22-3-sda.img

    GNU Parted 2.3
    /nfs/Fedora-Xfce-armhfp-22-3-sda.img を使用
    GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
    (parted) u★
    単位は?  [compact]? b★
    (parted) print★
    モデル:  (file)
    ディスク /nfs/Fedora-Xfce-armhfp-22-3-sda.img: 4743757824B
    セクタサイズ (論理/物理): 512B/512B
    パーティションテーブル: msdos

    番号  開始         終了         サイズ       タイプ   ファイルシステム  フラグ
     1    1048576B     512753663B   511705088B   primary  ext3
     2    512753664B   1025000447B  512246784B   primary  linux-swap(v1)
     3    1025000448B  4525000191B  3499999744B  primary  ext4
          ^^^^^^^^^^
    (parted) q★
    root@ubu:/nfs# 

    # mount -o loop,offset=1025000448 Fedora-Xfce-armhfp-22-3-sda.img /mnt/fedora22
                           ^^^^^^^^^^※ B は取ってね
    # df -h
    Filesystem              Size  Used Avail Use% Mounted on
    ::
    /dev/loop1              3.2G  2.3G  843M  74% /mnt/fedora22

手順 4

ルート直下のシンボリックリンクを修正します。理屈はよくわかっていませんが、逆から張りなおすことでとりあえずブートしています。lib と bin と sbin を消して、実体を移動させ、逆からシンボリックを張っています。

berryboot.img の中をのぞいてみた

berryboot の作りをもう少し見たかったので、起動するboot img をばらして覗いてみました。手順は絶対忘れるのでメモしておきます。

 

作業は、osx でやっています。
とりあえず、作業用にRAMディスクを作っておきます。
作業は、RAMディスクの中じゃなくてもいいんですが、何かと速くて間違えなくて便利なので、自分用のメモの意味をあって書いています。独立したファイルシステムにフォーマットすることも簡単ですしね。

osx でRAMディスクを作成するには、

$ diskutil eraseDisk HFS+ RAMDISK `hdiutil attach -nomount ram://8388608`

この例では、ディスクサイズは8388608(4096 * 2048)で4GB のRAMディスクとしています。

コマンドラインがいやな場合は、RAMDiskCreator というツールをFlorian Bognerさんが公開しているので使ってみてください。

a

_Applications

RAMDiskCreator 1.2

 

aa

これ以下は、Linux でも同じなはずです。

file で berriboot.img を見ると、u-boot の uImage のようです。

$ file berryboot.img 
berryboot.img: u-boot legacy uImage, , Linux/ARM, RAMDisk Image (Not compressed), 10112736 bytes, Wed Apr  1 07:32:40 2015, Load Address: 0x00000000, Entry Point: 0x00000000, Header CRC: 0xAB28A904, Data CRC: 0x6870C48E

これは調べてみると、以下のようにすることで展開できるようです。

$ dd if=berryboot.img bs=64 skip=1 of=berryboot_initrd
158011+1 records in
158011+1 records out
10112736 bytes transferred in 0.315515 secs (32051518 bytes/sec)

先頭64bite に属性情報があるようで、それを飛ばして DD してやればよいようです。再度、file で見てみると、

$ file berryboot_initrd 
berryboot_initrd: gzip compressed data, was "rootfs.cpio", from Unix, last modified: Wed Apr  1 07:32:37 2015, max compression

cpio のようです。tmp ディレクトリを作成後、そこに展開してみます。

$ mkdir tmp
$ cd tmp/
$ cpio -idm < ../berryboot_initrd

うまく展開されたようです。

init では以下のようなことをしているようです。

---- /init
#!/bin/sh
#
# BerryBoot, ugly but functional image chooser thingy
#
# Author: Floris Bos
#

# Standard busybox init
/bin/mount -t proc proc /proc
/bin/mount -o remount,rw,noatime / 
/bin/mount -t sysfs sysfs /sys
/bin/mount -t devtmpfs dev /dev
/bin/hostname -F /etc/hostname

if grep -q debugconsole /proc/cmdline; then
    /sbin/getty -L tty2 0 vt100 &
fi

if grep -q "mmc0_led" /proc/cmdline; then
    if [ -e /sys/class/leds/ph20:green:led1 ]; then
        echo mmc0 > /sys/class/leds/ph20:green:led1/trigger
    fi
fi

if grep -q vncinstall /proc/cmdline; then
    export QWS_DISPLAY="VNC:size=800x600:depth=32:0"
    echo
    echo Connect with your VNC client
    echo If you wish to disable VNC mode: remove 'vncinstall' from cmdline.txt
    echo
fi

# Show GUI, it will write the OS choosen to /tmp/answer
/usr/bin/BerrybootGUI -qws 2>/tmp/debug 

# Clear screen
clear

IMAGE=`cat /tmp/answer`
DATADIR="/mnt/data/IMAGE"
rm /tmp/answer

#
# Set CPU governor to "ondemand" when booting an OS on the Pi
# Set it to "performance" for other devices
#
if grep -q "BCM2708" /proc/cpuinfo; then
    GOVERNOR=ondemand
else
    GOVERNOR=performance
fi

if [ "IMAGE" != "" ]; then
    mkdir -p /squashfs /aufs DATADIR
    clear
    echo Mounting image{IMAGE}...
    mount -o loop "/mnt/images/IMAGE" /squashfs
    cd /squashfs

    if [ -e berryboot-init ]; then
        echo Executing init script
        . berryboot-init
    fi

    if [ -L lib -o -L sbin ]; then
        echo
        echo Error: having a symlink for /lib and/or /sbin inside your image is not allowed!
        echo This conflicts with the shared AUFS folders
        echo
        sleep 5
    fi

    for initfile in sbin/init usr/lib/systemd/systemd init
    do
        if [ -einitfile ]; then
            echo Mounting RW data directory on top
            mount -t aufs -o br:{DATADIR}:/mnt/shared:/squashfs none /aufs
            cd /aufs
            mount -o move /dev dev
            mount -o move /sys sys
            mount -o move /proc proc
            echo Setting CPU governor toGOVERNOR
            echo "GOVERNOR">sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
            echo Starting operating system{IMAGE}...
            exec switch_root . initfile
        fi
    done

    echo
    echo Error: unable to locate or execute /sbin/init /usr/lib/systemd/systemd /init insideIMAGE
    echo
    sleep 5
fi

# In case the user pressed cancel or something went wrong, show an emergency recovery shell
clear
echo
echo Emergency recovery shell activated
echo

/bin/sh

cmdline に mmc0_led があると、何か green にしているようですね。筐体のLED を緑にしているんですかね? あとで試してみます。vncinstall があると、環境変数QWS_DISPLAYにVNC のパラメータがセットされるようです。VNC インストールができるということですかね。あとで、試してみることに。

ちょっと勉強になりました。

Arduino と RasPi2 と ESP8266

ここのところ、遊び道具が増えてきて、あれもやりたいこれもありたいと調査していると、結局何も手付かずに終わってしまう不毛な毎日が続いているので、とりあえず、やってみたいことを整理してみます。

 

・ESP8266 の省電力化と、リチウム電池利用した温度湿度照度の単体デバイスの作りこみ

単体ではそこそこ調査は終わっていて、あとは作りこみ。ESP8266(ESP12) + DHT-22(AM2302) + GL5528でセンサー部と、データをWiFi で投げてThingSpeak に投げることまでは完了。残るは、省電力化へのコードの検討、テストと、バッテリー駆動への電力部の作成(というか、パーツ組み合わせるだけ)です。途中で、RasPi2 をゲットしてそっちに気がほうけてしまい手付かずの案件。

2015_05_10_2_14

+

HTB19pQDHXXXXXXyXFXXq6xXFXXX7

+

HTB1NkOvHFXXXXa_aXXXq6xXFXXXt

 

 

・ProMini を活用したモータ制御するロボット(プログラム制御の車とか、リモコン制御のものとか)

極小のギヤモータは、ゲット済みでモータードライバなしでarduino に直結して動作させる予定の案件。基本部分が出来ればあとはセンサー拡張して楽しむ予定の案件

 837293198_862

+gearmoter

・HC-06(Bluetooth) + ProMini で HID USBデバイス

SPPのやつなんですが、HID にできるかもしれないので、一応ゲットしました。だめなら、ちょっと高価なHM-10でやるつもりのもの。まだ、未調査なので、動作確認もしてない放置もの。

a

or

b

・RasPi2(母艦) + Firmata化したarduino との通信

これはつい最近、知ったんですがFirmata という汎用通信規格がやり取りできるよう arduino にスケッチを入れてコントロールはシリアル経由でやるという代物。ソフトウェア実装なので、電子工作が伴う前の基礎技術の研究をしたいなと。コントロールする母艦は、RasPi2 でやるつもりで、実装方法はいろいろあるようです。Python や Ruby や C 、PHP、そしてnode.js とかでも出来るようです。表示やコントロールが伴うものは、HDMI出力があるRasPai からやったほうが良さそうなので、そいういう用途にGUI でラップしたFirmata のアプリケーションを作れないかなと。こちらは、まだ未調査なので、どんな組み合わせがベストなのかは不明。

 

 

このほかにもあれこれと、やりたいことが調べているうちに出てきてしまうんですが、上4つはやりたいですね。今年度中はおそらくこれらで、あそべるはず。特に、ソフトウェア的な組み合わせが出来る、RasPai との連携を考えると、技術が追いつかなさそうなので、ぼちぼと勉強しながらやっていきたいと思っています。

 

さて、とりあえず何からやりますかね。気がノルやつから手をつけていきますか。遊びでは、それが基本スタンスですからね。

osx10.9 で UnixBench

ここのところ、RasPi2 でいろいろ遊んでいますが、そういえば母艦である osx 機で UnixBench を計測していないことに気がつきました。で、その結果。

 

UnixBench にパッチを当てる情報は、以下を参考にしました。

Patch for UnixBench 5.1.3 on Mac OS X Mavericks (10.9)
https://gist.github.com/barusan/11033924

blog
http://www.baru-san.net/archives/267

ありがたく、使わせていただきます。

wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/byte-unixbench/UnixBench5.1.3.tgz
git clone https://gist.github.com/11033924.git
tar xvf UnixBench5.1.3.tgz
cd UnixBench/
patch -p1 < ../11033924/UnixBench5.1.3.mavericks.patch
make
./Run

な感じで計測。

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: HOPE.local: Darwin
   OS: Darwin -- 13.4.0 -- Darwin Kernel Version 13.4.0: ....::
::
   CPU 7: Intel(R) Core(TM) ...::
::

------------------------------------------------------------------------
Benchmark Run: 日  7 12 2015 16:14:49 - 16:42:55
8 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       34704465.0 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     6360.0 MWIPS (9.8 s, 7 samples)
Execl Throughput                                903.5 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        800480.2 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          219592.2 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       2163139.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1281398.1 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 103377.8 lps   (10.0 s, 7 samples)
Process Creation                               4573.6 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   5948.9 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   1956.7 lpm   (60.0 s, 2 samples)
System Call Overhead                        1350215.3 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   34704465.0   2973.8
Double-Precision Whetstone                       55.0       6360.0   1156.4
Execl Throughput                                 43.0        903.5    210.1
File Copy 1024 bufsize 2000 maxblocks          3960.0     800480.2   2021.4
File Copy 256 bufsize 500 maxblocks            1655.0     219592.2   1326.8
File Copy 4096 bufsize 8000 maxblocks          5800.0    2163139.0   3729.6
Pipe Throughput                               12440.0    1281398.1   1030.1
Pipe-based Context Switching                   4000.0     103377.8    258.4
Process Creation                                126.0       4573.6    363.0
Shell Scripts (1 concurrent)                     42.4       5948.9   1403.0
Shell Scripts (8 concurrent)                      6.0       1956.7   3261.2
System Call Overhead                          15000.0    1350215.3    900.1
                                                                   ========
System Benchmarks Index Score                                        1092.0

------------------------------------------------------------------------
Benchmark Run: 日  7 12 2015 16:42:55 - 17:11:05
8 CPUs in system; running 8 parallel copies of tests

Dhrystone 2 using register variables      151501922.0 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    47934.1 MWIPS (9.8 s, 7 samples)
Execl Throughput                               4391.2 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks       1785300.9 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          417942.6 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       5208018.8 KBps  (30.0 s, 2 samples)
Pipe Throughput                             3024743.9 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 737487.3 lps   (10.0 s, 7 samples)
Process Creation                              17603.0 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                  17545.1 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   2572.0 lpm   (60.1 s, 2 samples)
System Call Overhead                        3138596.8 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0  151501922.0  12982.2
Double-Precision Whetstone                       55.0      47934.1   8715.3
Execl Throughput                                 43.0       4391.2   1021.2
File Copy 1024 bufsize 2000 maxblocks          3960.0    1785300.9   4508.3
File Copy 256 bufsize 500 maxblocks            1655.0     417942.6   2525.3
File Copy 4096 bufsize 8000 maxblocks          5800.0    5208018.8   8979.3
Pipe Throughput                               12440.0    3024743.9   2431.5
Pipe-based Context Switching                   4000.0     737487.3   1843.7
Process Creation                                126.0      17603.0   1397.1
Shell Scripts (1 concurrent)                     42.4      17545.1   4138.0
Shell Scripts (8 concurrent)                      6.0       2572.0   4286.7
System Call Overhead                          15000.0    3138596.8   2092.4
                                                                   ========
System Benchmarks Index Score                                        3440.0

osx 10.9.5 ですが、体感的にはもっと速い感じ。まぁ、とりあえずの指針としてきます。

たとえば、sakuraVPS の2G Plan の CPU3 RAM 2GB HDD200GB で2000くらいは出ます。

 

ベンチマーク計測中の htop は以下のような感じ。

  1  [||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]     Tasks: 252 total, 0 running
  2  [||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]     Load average: 7.85 5.22 3.26 
  3  [||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]     Uptime: 01:03:57
  4  [||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
  5  [||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
  6  [||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
  7  [||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
  8  [||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
  Mem[||||||||||||                                        3711/32768MB]
  Swp[                                                        0/1024MB]

がんばってますね。

ちなみに、osx10.9.5 の公開しているソースは、

http://www.opensource.apple.com/release/os-x-1095/

たとえば、bash とかは、以下にあり、

http://www.opensource.apple.com/source/bash/bash-92/

まだやったことはないんですが、xcode を使ってビルドできるようです。

Source_Browser

iSCSI Boot で OS をいろいろ切り替え

あれもこれも、入れたいのに、いちいちSDカードなんて、抜き差ししてるのめんどいよね、ってことで、工夫してみました。

こんな感じで、SD Card にOS は入れずに、ネットワーク越しのiSCSI Disk から、OS をブートしてPi2 を楽しむことを試しました。

iscsiBoot_raspi

まさか、RasPi がiSCSI Boot するなんて思っていなかったので、最初は本当かな? って。で、試したところ問題ない速度で楽しめることがわかりました。BerryBoot v2.0 を使って実際に試してみましたよ。

 

図では、わかりにくいのですが、osx にバーチャルボックスで起動した、FreeNAS でiSCSI のターゲットを提供し、pi は、Boot 領域のSD Card を指したまま、ネットワーク越しのディスクから起動します。

OS 切り替えは、osx のブラウザーからFreeNAS の iSCSI のディスクを交換し、Pi2 をリブートすれば OK な感じです。

freenas_-_FreeNAS-9_3-STABLE-201506292332

ZFS の操作はまったくわかりませんが、とりあえず物理ディスクをバーチャルボックスで80Gくらい割り当てたものを上記な感じで作ります。

 freenas_-_FreeNAS-9_3-STABLE-201506292332 2

iSCSI にする DISK はあらかじめたくさん作っておいて、上図のような感じでエクステントと対応ディスクのセットを作っておきます。

freenas_-_FreeNAS-9_3-STABLE-201506292332 3

ターゲット名は変わらないので、Pi2 の SDCard の中は変更しなくてOK です。

freenas_-_FreeNAS-9_3-STABLE-201506292332 4

こんな感じで、ブートしたいディスクに交換し、

freenas_-_FreeNAS-9_3-STABLE-201506292332 5

Pi2 をリブート(電源を落として変更するのがベストですかね)すれば、OK。

 

BerryBoot v2.0 の説明は、親切な作者のページがあるので、省略しますが、

http://www.berryterminal.com/doku.php/berryboot

iSCSI でのインストールは、以下に説明があります。

http://www.berryterminal.com/doku.php/storing_your_files_on_a_synology_nas_using_iscsi

 

一度、インストールをすると、boot の中の設定ファイルは以下のような感じになります。

---- iscsi.sh
# iscsistart -i [initiatorName] -t [targetIqn] -g [Lun] -a [Address]
/sbin/iscsistart -i "iqn.2012-08.com.berryboot:myPi" -g 1 -t "iqn.freenas:piboot" -a "192.168.1.45"

---- cmdline.txt 
smsc95xx.turbo_mode=N elevator=deadline quiet bootmenutimeout=10 ipv4=192.168.1.24/255.255.255.0/192.168.1.1 datadev=iscsi


---- config.txt 
disable_overscan=1
start_x=1
gpu_mem=128

# Berryboot settings, do not change
initramfs berryboot.img

[pi2]
kernel=kernel_rpi2_aufs.img

[pi1]
kernel=kernel_rpi_aufs.img
cma_lwm=16
cma_hwm=32
cma_offline_start=16

---- uEnv.txt 
ipv4=192.168.1.24/255.255.255.0/192.168.1.1 datadev=iscsi

 

 

再度インストールするときは、uEnv.txt と iscsi.sh と cmdline.txt の datadev=iscsi を消して Pi2 をリブートすれば インストールウィザードが走ります。iSCSI の設定は再度必要ですが、自身のIP 設定などは、残したままなので、ターゲットのポータル名と、IP を入れればOK な感じです。

 

あと、このBerryboot は Github にソースがあって、Qt4 でGUI 作っているようです。

https://github.com/maxnet/berryboot

統合開発環境 Qt Creator のプロジェクトファイル(BerrybootGUI2.pro)があったので、これらの開発環境についても折を見て勉強してみたいです。GTK による開発と、QT の開発、どっちが入りやすいのでしょうかね。

 

Linux の組み込みの世界は、奥が深いですね。

最後に、iSCSI Boot した Raspbian の UnixBench を乗せておきます。

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: pi: GNU/Linux
   OS: GNU/Linux -- 3.18.10v7-aufs -- #1 SMP PREEMPT Wed Apr 1 00:07:44 CEST 2015
   Machine: armv7l (unknown)
   Language: en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968")
   CPU 0: ARMv7 Processor rev 5 (v7l) (0.0 bogomips)
          
   CPU 1: ARMv7 Processor rev 5 (v7l) (0.0 bogomips)
          
   CPU 2: ARMv7 Processor rev 5 (v7l) (0.0 bogomips)
          
   CPU 3: ARMv7 Processor rev 5 (v7l) (0.0 bogomips)
          
   16:46:43 up 8 min,  2 users,  load average: 0.12, 0.32, 0.19; runlevel 2

------------------------------------------------------------------------
Benchmark Run: 土  7月 11 2015 16:46:43 - 17:15:08
4 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       13034196.3 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     2201.6 MWIPS (9.9 s, 7 samples)
Execl Throughput                               1115.2 lps   (29.6 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks         67394.5 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           18209.0 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        217804.3 KBps  (30.0 s, 2 samples)
Pipe Throughput                              820546.2 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 143190.3 lps   (10.0 s, 7 samples)
Process Creation                               3197.5 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   2604.1 lpm   (60.1 s, 2 samples)
Shell Scripts (8 concurrent)                    344.4 lpm   (60.4 s, 2 samples)
System Call Overhead                        1752660.9 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   13034196.3   1116.9
Double-Precision Whetstone                       55.0       2201.6    400.3
Execl Throughput                                 43.0       1115.2    259.4
File Copy 1024 bufsize 2000 maxblocks          3960.0      67394.5    170.2
File Copy 256 bufsize 500 maxblocks            1655.0      18209.0    110.0
File Copy 4096 bufsize 8000 maxblocks          5800.0     217804.3    375.5
Pipe Throughput                               12440.0     820546.2    659.6
Pipe-based Context Switching                   4000.0     143190.3    358.0
Process Creation                                126.0       3197.5    253.8
Shell Scripts (1 concurrent)                     42.4       2604.1    614.2
Shell Scripts (8 concurrent)                      6.0        344.4    573.9
System Call Overhead                          15000.0    1752660.9   1168.4
                                                                   ========
System Benchmarks Index Score                                         406.1

pi@pi /usr/local/src/UnixBench $