ジャンル不定の日記です。

ファルコン9の次回打ち上げは3月1日

ファルコン9の次回打ち上げは3月1日ぽいですね。
たまにSpaceX社のサイト見に行ってるが、次回の予定が記載されているページがちょっとわかりにくいね。
UPDATES → Launch Manifest
のページの下の方に画像で書かれる感じなのかな。

前々回から着陸実験しながらの打ち上げになってるから打ち上げ中継見てるが、
前々回は母艦に命中して大破(母艦は小破)
前回は荒天のため着陸せずに着水で、成功と言ってる
というわけで、まだ着陸回収に成功していないわけだが、楽しみ。
日本がH2Aを1発100億円かけて打ち上げているのが、同程度の性能のロケットが1発2400万円で打ち上げられれば人類の活動圏が地球を離れる大革命が起きる。
まあ、1発2400万円には2段目ロケットの回収も必要なんで、今は1段目だけだからまだ先だが、それでもかなり打ち上げしやすくなる。


あと、3月6日にNASAの探査機ドーンがケレスに到着とのことで、既にかなり鮮明な画像が送られてきているが、
表面に水の氷が露出していないか?興味ありますね。
アポロの月面着陸から40年以上経って人類がいまだに地球外天体にたどり着けていないのは、最大の原因はロケットの打ち上げ費用だと思うが、
それ以外に土木工事の難易度があると思ってる。
金星とか地球並みにデカイ星に降りたら脱出不能になるから、地球よりも小型天体を目指すしか無いと思うが、
掘削等の土木工事をするのに、重力が小さいとその分重機の重量が必要になるはず。月で地球と同じ作業するなら6倍の重機が必要と思う。
現地で土木工事が出来ないと、大規模な資源貯蔵や放射線を防ぐための施設が作れない。
だが、表面に水の氷があって常温で解けないなら、掘削せずに熱で容易に加工できる。
大気がないと液体にはならず溶かした時点で気化するからは液体の廃棄も不要。
まあ、沸点がかなり低くなるから人間が住むにはコーティングして断熱する必要があるが、融点は冷凍庫よりは高い温度になるし構造物が先に出来ちゃえばコーティングは簡単と思う。
今は人類の目標天体は月と火星が主流だと思うが、ケレスの表面に水の氷があるならケレスが目標になると思う。

SheevaPlugのNANDにArch Linux入れた

昨日SDブートでSheevaPlugにArch Linux入れて、NANDブートも余裕だと思ってたんだが、すごいハマった・・・
うまく行かなかったのは、ubifsのrootfs作成方法に問題あったかubootの設定に問題があるんだと思ってたんだが、uImageをSDブート中のArchの/boot/uImageをnandwriteしたのがまずかったような。
uImageを再度nandwriteしたらすんなり行った。

前回SDブートの環境作る際はSheevaPlugのインストーラーでubootの設定をしたが、
インストーラーはubootの再インストールと設定だけなんで、設定変更だけならインストーラーでuboot書きこまないほうが安全と思ったんで当初自分で設定してたが、
うまく行かなくて試行錯誤していて、最終的にインストーラーをnandで使ったんで、uboot設定はインストーラー通りのもの。


SDカードの時は、パーティションを2つに分けて、1番目がuImageで2番目がrootfsでファイルを置くだけなので母艦で作ればよかったが、
NANDは端末から外せないので、SDブートの環境から書き込んだ。

NANDのパーティションを確認
cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00100000 00020000 "u-boot"
mtd1: 00400000 00020000 "uImage"
mtd2: 1fb00000 00020000 "root"
と/proc/mtdを見てNANDのパーティションを確認する。
/dev/mtd1がuImageで/dev/mtd2がrootfsだとわかった。
SheevaPlugインストーラーは、sdにすると1番目のパーティションがu-bootになるが、nandにインストールするとu-boot領域はOSに見せない設定になる。
何故違うのかわからないが、誤ってu-boot領域壊しちゃったらまずいから、u-boot領域は見えない方が良いね。

uImageの書き込み
flash_eraseall /dev/mtd1
nandwrite -pm /dev/mtd1 uImage
flash_eraseallでnandパーティションを全消し。
nandwriteでuImageを書き込むが、-pオプションは余りを埋め。-mオプションは破損領域をマーク。らしい。
uImageは、母艦でapacheが使えるようになってるんで、apacheに置いてwgetで取得した。

rootfsの作成
pacman -S mtd-utils
ubiformat /dev/mtd2
ubiattach -p /dev/mtd2
ubimkvol /dev/ubi0 -m -N rootfs
mkdir /mnt/mtd2
mount -t ubifs /dev/ubi0_0 /mnt/mtd2
tar zxfvp ArchLinuxARM-kirkwood-latest.tar.gz -C /mnt/mtd2
ファイルシステムはインストーラーの説明書にも書かれているubifsにした。
組み込み機器等のnandによく使われるファイルシステムにはjffs2ってのもあって、途中うまくいかなくてubifsが原因かと思ってjffs2の方も試したんだが、
jffs2はブロックデバイスではなく普通にmountできず、使うとしても起動時に全部読み込む必要があるのでubifs使ったほうが良さそう。
nand用のファイルシステムじゃないとウェアレベリングしてくれずに寿命が縮んだりする。
使用する各コマンドは、Arch Linuxだとmtd-utilsパッケージでまとまってるのでpacmanでインストール。
ubifsでは、/dev/ubi0デバイスを作成して/dev/ubi0_0パーティションを作成する感じだが、ボリューム名の設定が必須ぽい。
ubiformatでubifs用にnandパーティションを初期化。
ubiattachでubi0デバイスを作成。
ubimkvolでボリューム名の設定。(-mオプションは最大サイズ)
作成した/dev/ubi0_0をmountしてrootfsを展開だが、これも母艦のapacheに置いてwgetした。


これでu-bootをnandブート用に設定すればnandのArchが起動する。
u-bootの設定は試行錯誤した結果インストーラーでやっちゃったが、
bootargs_root ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs
mtdpartitions mtdparts=orion_nand:0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs)
bootcmd setenv bootargs $(bootargs_console) $(mtdpartitions) $(bootargs_root); nand read.e 0x00800000 0x00100000 0x00400000; bootm 0x00800000
って感じで設定されてるね。
SDブートのは「ext2load mmc 0:1 0x800000 /uImage」でuImageがロードされるが、「nand read.e」でロード。
u-bootでubiデバイスを作成しないといけない?のでパーティションを切ってubiデバイスを作成って感じぽい。

起動しなくなった時はSDブートしたいと思うが、
setenv bootargs_root root=/dev/mmcblk0p2 rootdelay=5
setenv bootargs $(bootargs_console) $(bootargs_root); mmcinit; ext2load mmc 0:1 0x800000 /uImage; bootm 0x00800000
でSD起動すると思う。


起動後の初期設定とアップデート
timedatectl set-timezone Asia/Tokyo
pacman -Syu
SDの時と同じだが、rootの初期パスワードは「root」
タイムゾーンの設定コマンドは初めて知った(最近出来たコマンド?)が、わかりやいね。
PCだとタイムゾーン以外に言語設定とキーボード設定が必要だが、
言語はGUI使わないなら要らないね。
キーボードはシリアルコンソール経由だから?普通に日本語配列で使えてるから要らなそう。

DHCPの有効化
systemctl start dhcpcd@eth0
systemctl enable dhcpcd@eth0
初回起動時は最初からDHCPでネットワークが使えるんだが、システムアップデートするとDHCPが無効化されるぽくて繋がらないので、
dhcpcdの起動と有効化をする必要がある。
SDの時に同じことやってたんで、今回はすぐわかった。

あとpacmanのmirrorを速いところに設定した方が良いかもだが、メイン機でもないし標準でいいかな。

SheevaPlugに良い使い道が欲しいが、
アイドル時でも発熱するから、ルーター用途だと市販品より不安定になっちゃいそうな気がする。
Linuxで使えるワンセグチューナーがあればワンセグTVサーバー用途に良さそうなんだが・・・

SheevaPlugにArch Linux(SDブート)入れてみた

先日SheevaPlugでArch Linuxが動くことを知ったんで、眠ってたSheevaPlugを有効活用できないかと思ってとりあえず入れてみた。

SSHとかが動く状況下ならLANでPCから操作してもいいが、U-BOOTの操作とかはSSHじゃ無理なのでUSBケーブルで繋いでシリアルコンソールで操作する。
まず、以前使ってた時の記事を参考にしてシリアルコンソールの使い方。

以前はUbuntuが母艦だったと思うが、今はArch Linuxが母艦。
シリアルコンソールは以前と同じscreenが公式リポジトリから入れれた。
sudo pacman -S screen
先日までメインPCのroot権限はsuしてから使っていたが、Android関連でroot権限の操作が多くてめんどかったんでsudo導入した。

USBシリアルのデバイスは、SheevaPlugをUSB接続していない状況と接続した状況で、
ls /dev
して確認。
/dev/ttyUSB0
がSheevaPlugなことが判明。

sudo screen /dev/ttyUSB0 115200
でシリアルコンソールで操作できる。
screenの終了の仕方は、「Ctrl+a」押して「k」押して「y/n」の選択が出るから「 y」で終了。

SheevaPlugに入ってるOSは標準のUbuntuだと思うが、標準のrootパスワードは「nosoup4u」

Arch LinuxはSheevaPlugの内蔵NANDに入れようと思ったんだが、端末のNAND書き換えるのにSDブートのOSが必要かな?
というわけで、SheevaPlug標準のUbuntuを取ってきてSDに入れようとした。
http://www.plugcomputer.org/downloads/plug-basic/
から、「Sheeva Plug Installer」を取ってくる。

README.txtを読むと、インストーラーの使い方は、
  1. FAT16かFAT32でフォーマットされたUSBメモリを用意
  2. sheevaplug-installerのtar.gzを母艦の作業用ディレクトリに展開
  3. uboot/uboot-env/uboot-xxx-custom.txtを開いてMACアドレスを修正する
  4. installerディレクトリの下のファイル全てをUSBメモリのルートにコピーする(README.txtだとsudo cp -aしてるんで、その通りにやった方が良さそう?)
  5. 母艦からUSBメモリを外して、母艦とSheevaPlugをケーブルで繋ぐ
  6. 母艦でrunme.phpの場所に移動してroot権限で実行する
らしい。
README.txtではinstaller/uboot-custom.txtとなっているが、そんなファイルは無く、uboot/uboot-env/uboot-xxx-custom.txtにmmc用とnand用の2ファイルがある。
MACアドレスは動作中のSheevaPlugで確認してもいいが、SheevaPlug裏面のシールに記載されている。

runme.phpは引数に「mmc」か「nand」を与えて実行し、U-BOOTを初期化+設定して、OSまで入れてくれるぽい。簡単そう。
と思ったんだが、
まず、READMEだと母艦Linuxにphp-cliをインストールしろと書いてあるが、Archにはphp-cliはないのでphpを入れた。
runme.phpは1行目が「<?」となっているが、「<?php」にしないと動かなかった。
43行目と44行目のroot確認の箇所で突破できなかったんで、そこコメントアウト。
コマンドラインツールなんだからphpじゃなくてperlにしてほしいわ・・・

さらに、libftdi.so.1がないとエラー。
同梱のopenocdを使うようになっているが、Archのリポジトリにあったのでopenocd入れて119行目の「openocd/openocd」を「openocd」に変更してpacmanで入れたopenocdを使うようにしてみたが、
今度は、インストーラーの設定ファイルで使っている機能がダメみたいで無理だった。
pacmanでopenocd入れたらlibftdi.so.1は入ってたんで、runme.phpを元に戻してみたが、やっぱダメ。
pacmanで入れたlibftdi.so.1は64bitのはずだが、インストーラー同梱のopenocdは32bitだろうね・・・
32bitのlibftdi.so.1拾ってきて試してみたが、それもダメ。

ArchのメインPCからインストーラーを使うのは諦めて、Windows用のインストーラーも同梱されてるんでWindows使ってインストールすることにした。
Windowsのインストーラーを使うにはUSBシリアルのドライバを入れる必要がある。
http://sourceforge.net/projects/libusb/
↑ここからLibUSB-Win32というデバイスドライバを取ってきてインストール。
名前が「Win32」とかなってるけど、64bit版も入っててXPの64bitでもインストール可。
bin\inf-wizard.exeを実行するとUSBデバイスの選択画面が出るので、対象のUSBシリアルぽいのを選択して進むとファイルが展開されて、そのままインストールできる。
それっぽいデバイスが2個出てきたんで2回入れた。

コマンドプロンプトから、インストーラーの「runme.exe」を実行するとU-BOOTが再インストールされて設定される。
で、止まる・・・
README.txtを読むと、U-BOOTのインストールが終わったら止まるのが正しい動作で、Ctrl+Cで強制終了するぽい。

SDかNANDにインストーラーがOSインストールしてくれるものと思ってたんだが、U-BOOT関連だけで終わったし、
runme.phpのコード読んでもU-BOOTだけ初期化してOSインストールするコードが無いような・・・


そんなわけで、U-BOOTの再インストールと設定はできたんだが、OSインストールは別の方法で入れることにした。
作業は再びメイン機のArchからscreenでだが、
インストーラーで設定されたboot処理を見ると、SDの1番目のパーティションのuImageがkernel、2番目のパーティションがrootfsになるぽい。
1番目のパーティションはext2にする必要があるようだが、kernelもrootfsもSDのパーティション上にファイルを置くだけでいいぽい。
2番目のパーティションはkernelが対応していれば何でも良い気がするが、インストーラーではext3になってたんで、
32GBのSDを1番目をext2で512MB、2番目をext3で残り全部にすることにした。

で、当初SDにUbuntu入れて、SDブートでNANDにArchを入れようと思ってたが、kernelもrootfsをSD上に置くだけなら、SDもArchにしちゃえば良いね。
http://archlinuxarm.org/platforms/armv5/sheevaplug
↑から「Arch Linux ARM (Latest)」を拾ってくる。
展開はファイルの所有者を維持して行う必要がありそうなんで、
sudo tar zxfvp ArchLinuxARM-kirkwood-latest.tar.gz -C SDカードの2番目のパーティション
としてpオプションをつけてtarでSDの2番目のパーティションに展開。
tarコマンドはpオプションでファイル所有者が維持されるぽい。
cp -a SDカードの2番目のパーティション/boot/* SDカードの1番目のパーティション
で1番目のパーティションにkernelだけコピーした。


SDカードをSheevaPlugに挿してresetしたらArchが起動した。
rootの初期パスワードは「root」になってる。
ネットワークも最初から使えて、
pacman -Syu
でArchアップデートしたんだが、ネットワークが落ちたぽくて途中で死んだ。
熱暴走かな?


市販ルーターがどれも糞すぎるから落ちないルーターをSheevaで自作出来ないかと考えてるが、Sheevaも糞だからダメだねw
ルーター以外の使い道は、USBが1ポートあるから、ワンセグチューナー使えればTVサーバーにしたいな・・・と
前はSDをデータ用ストレージにしてNAS用途にしてたが、SDじゃ遅すぎてダメ。

当初は最終的にNANDにArch入れようと思ってたが、SDでも良いかな?
とも考えてるが、別の用途でSD使う必要がでた時にSheevaの方をNANDブートに切り替えるのも面倒だし、後でやっとくかな。
SDブートでOSが起動できればNANDにインストールするのも簡単と思ってる。