2015-8-15[土] WinCE機で NetBSD6.5MIPS系(x86系以外)CPUでの linux/unix環境ほしくて 中古でWinCE 機の Movile Gear II (MC-R730 と sigmarion初代)を入手してのを、やっとこさOS入れてみた。MC-R730 は CF と PCMCIA スロットあり、sigmarion は CF 一つなので基本的に MC-R730 を対象。 ググってみると WinCE 機の場合 linuxはかなり古いモノしかなさそうで、ただし NetBSD は今でも一応サポートされているようなので、これをお試し。 ググって見つかる各種サイトを参考に... 本家サイトでは
今となってはかなりメモリ少ないし(32MB)、GUIはハナッから あきらめ(そもそもインストーラで X 関係は None 扱いになってた)。 正直、linux以上に 知らないosなんで苦労多そう…てか躓きまくってる。WinCE側の事情がよくわかってないせいもあるけれど。
WinCE環境をぶっ壊すので起動のたびにWinCE初期セッティングを要求される… が、公式をみれば SHIFT+Powerで初期セッティング飛ばせるとのことで そんなにひどくはなかった(多少煩わしいけれど)。
また、すべての機種ではないけれど、CFから自動実行する仕組みがある場合もあるようで、運がよければ手間は省けるよう... だが、このへんは、ヒントにある方法で設定を幾つか試しても自動起動ならず...うまくいってません (公式の 対応機種表の boot の欄で *3 ついてるヤツが use hpcboot.exe となってるので、逆に他のYになってるのは自動起動可能なのかなと思ったのだけど…そうではないのか…)
iso ダウンロード7.0はrc2とかrc3のようなので とりあえず 6.1.5 を試す。 ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-6.1.5/iso/
より取ってくるWinCE機用のisoファイルは、netbsd-?.?.?-hpc???.iso なヤツ。 Mips機なので NetBSD-6.1.5-hpcmips.iso を取ってくる.
インストーラでインストール
配布されている iso イメージは、他機種と共通だったり移植当初の状況もあってか、CD(SCSI)から ディスク(CF)へのinstallを想定されている感じ。CDでなくても、2ドライブ構成が前提のよう。 ただWinCE機の場合は Boot セクタ不要(利用できず)で逆に DOS(FAT)パーティション必須なので、予めCF上に DOS(FAT)パーティションを切っておき、そこに install 元イメージを配置すれば 1ドライブ構成でも install できそう... てか出来た。
Windows機で作業する場合、win標準の"ディスクの管理"では CF(フラッシュメモリ)に対しパーティションを切れないので
いづれかの方法を取る必要がある。 ここでは 3番目の方法でパーティションをきってみる。 なお今回 16GBのCFを用い、 MSDOS(FAT)領域 1GB、NetBSD 残り全部、のように割り当ててる。
※mc-r730 基準で書いたけど、結局不安定で実際は sigmarion でほぼinstall, lan関係からをmc-r730で作業した... というふうにインストールしたCFは、MIPS で kern-GENERIC 使うなら他の機種でも動く模様。WinCE側の hpcboot(pbsdboot)で適切に機種を設定する必要はあるけれど、netBsd環境自体に機種固有の設定は(あまり)なさげにみえる。といっても MC-R730 と Sigmarion初代 というどちらも Mobile Gear II な機種でしか試してないので他は未確認。
パーティション分けのためのインストーラ実行(他の方法でパーティション分済ならこの作業は不要) Win機で install 先 CF (16GB) を FAT フォーマット、unetbootin でダンロードした isoイメージ書込む。
WinCE機にそのCFを挿して、 入力欄にインストーラのディレクトリとファイル名を設定。 ディレクトリは
とりあえず他は変更せず、boot ボタンを押す。
Data in memory well be lost.Are you sure?
No symbol and/or string table in binary.(no fatal)
Push YES to boot.
テキストなメニューが出るので、 Installation messages in English を選択.(英語以上に他の言語わからんので) install NetBSD to hard disk を選択. minimam install を選択.(どうせ途中抜けなのでどれでもいいはず)
hdd なパラメータ2つ(63,255)聞かれるけど、Enter 2回押してデフォルトですます。
MBR ・・・を選択。 2ドライブ構成だと、DOSパーティションは hpcboot.exe(pbsdboot.exe)を置くための少量でいいけれど、今回は install元cdイメージを書き込めるサイズは必要だし、ファイルやりとりに使うかもで、16GBあるからざっくり1GBほどを設定。
a: start 1MB: size 1024MB MSDOS b: start 1025MB: size 残り全部 NetBSD c: unused d: unused
NetBSD のパーティションは設定しないとインストール継続できないのでそれも指定。
今回はパーティション分だけなんで、b: のデフォルト選び、その次も x:のデフォルト選んで
Please enter aname for your NetBSD disk[CF Card ]: yes or no で yes を選ぶと、パーティション分け&フォーマット開始。数回 continue待ちキー入力あり。
インストール元の指定のメニューが出てきたら、ここで初回は終了、WinCE機電源off&CF抜く.
Win機にCFを指す。
本番インストールCFのパーティション分が出来たら、本番インストール。 CFのフォーマット済のMSDOS領域に isoイメージを unetbootinで書き込み。
WinCE機にそのCFを挿して、 入力欄にインストーラのディレクトリとファイル名を設定。 ディレクトリは
とりあえず他は変更せず、boot ボタンを押す。
Data in memory well be lost.Are you sure?
No symbol and/or string table in binary.(no fatal)
Push YES to boot. テキストなメニューが出るので、 Installation messages in English を選択.(英語以上に他の言語わからんので) install NetBSD to hard disk を選択. yes or no は yes を選択. 対象CFに間違いなけりゃ Hit enter to continue でキー入力. minimam install か custom install を選択. custom の時は必要な物をマーク
hdd なパラメータ2つ(sectors[63],heads[255])聞かれるけど、Enter 2回押してデフォルトですます。 Edit the MBR partition table を選択。
a: start 1MB: size 1024MB MSDOS b: start 1025MB: size 残り全部 NetBSD c: unused d: unused b: の NetBSD を選んで active と install を Yes にする。 e:でセクター表示に切り替えて、MSDOS領域の開始セクタとサイズをメモする。( 開始2048セクタ 、サイズ 2097152セクタ)。 x: 欄でenterして次へ。
a: Set size of NetBSD partitions b: Use existing partition sizes は b (かaでデフォルトのままか、わかってる人なら都合で変更で) で、その次の一覧では a: ... FFSv1 b: ... swap c: ... NetBSD partition d: ... Whole disk e: 空欄 となってる. NetBSD側でFAT領域アクセス出来るように e: の空欄を MSDOS start 2048セクタ (4MB) size 2097152セクタ (1023MB)
な感じに 先のMSDOSパーティション設定と同じセクタ数を記入する.
Please enter aname for your NetBSD disk[CF Card ]: MyNetBSD これで準備okなら yes or no 確認で yes 後、partition きったり format したりが行われる。途中 Hit enter to continue で確認待ちになるので 入力して継続。
Install from メニュー
Install from メニューに来たら、
Device: wd0e File system msdos Base directory (空欄) Binary set directory /binary/sets Source set directory /source/sets (元のまま) に書き換える。(デフォルト設定は全然 WinCE実機向けじゃないわな)
x:で続けると tgzファイルの展開や MAKEDEV all が行われ途中continue待ち入力有)、うまくいくと 次の Configure Menu が出る。
Install from メニューから先に進めない時の手動インストール
Install from メニューから先に進めない場合は、Exit Install System で抜けて sh に降りて手動で tgz 展開をしてみることにする. (うまく行ってたらここ不要) こちら(hpcmipsみたいな環境でインストーラを使わずにNetBSDをインストールする)を大いに参考... てか 最初からこれに従ったほうがよいかも。
マウント&カレント変更 mount -t ffs /dev/wd0a /targetroot mount -t msdos /dev/wd0e /mnt2 cd /targetroot この段階のshは 人の入力考慮してくれてないので 上下キーによる履歴はおろか左右キーによるカーソル移動も出来ないので慎重に入力. tgz 展開 tar xzfp /mnt2/binary/sets/kern-GENERIC.tgz tar xzfp /mnt2/binary/sets/modules.tgz tar xzfp /mnt2/binary/sets/base.tgz tar xzfp /mnt2/binary/sets/etc.tgz tar xzfp /mnt2/binary/sets/misc.tgz tar xzfp /mnt2/binary/sets/text.tgz tar xzfp /mnt2/binary/sets/man.tgz tar xzfp /mnt2/binary/sets/comp.tgz ログ出力無のほうがよいという話もありそ?だけど どちらでもエラーなる時は頻繁になった。一つのtar実行でファイル出力が終了するまで(hddアクセスランプが無明になるまで) 次のtarを実行しないほうがよさげ?なのかな。あと tar する都度 exit してメニュー戻って すぐ終了(Exit Install System)で sh に戻って、をしてたらマシな気がする...が exitした時点でおかしくなることもあり日によって状況違うので単にハード不安定が濃厚. ※ segmentation fault 等で進行不能なって再起動した場合は fsck -y /dev/wd0a でディスクチェック。
cd /targetroot/dev ./MAKEDEV all する. (この段階で fstab, rc.conf も編集しとくのも手かも)
umount /targetroot umount /mnt2 exit してインストーラのメニューに戻り、Configure Menu を選択。
Configure MenuConfigure Menu では
戻ってきたメニューで 終了を選択して sh に降りる。 対象パーティションをマウントする mount -t ffs /dev/wd0a /targetroot mount -t msdos /dev/wd0e /mnt2 この段階のshは 人の入力考慮してくれてないのでタブキー補完や上下キーによる履歴はおろか左右キーによるカーソル移動も出来ないので慎重に入力. カレント移動して cd /targetroot/etc
fstab を編集. (vi しかないのか...) rc.conf を編集. rc_configured=YES に変更して、 postfix=NO sendmail=NO 追加.(このへんは こちら とか見よう見まね) minimam install してて、他に入れたい tgz があれば このタイミングで展開. tar xzfp /mnt2/binary/sets/misc.tgz tar xzfp /mnt2/binary/sets/text.tgz tar xzfp /mnt2/binary/sets/man.tgz tar xzfp /mnt2/binary/sets/comp.tgz
等.
終わったら exit を実行し shから メニューに戻り、適当に電源offして WinCE再起動。
インストールしたての環境での設定
適当に電源終了して、WinCE再起動。
hpcboot.exe あるいは pbsdboot.exe を実行し、今度は ディレクトリ /, ファイル netbsd にして 自分の機種(NEC MC-R730)を選んで boot。
login: に来たら、root で入り、Configure Menu で設定した password を入力.
普段使うrootになれるユーザーを作成. useradd -s /bin/sh -m -g users -G wheel ユーザ名 passwd ユーザ名 (新しいパスワードを入力)
まだまだ pkgsrc の install とか諸々していかないと駄目なんだろうけど...( pkgsrc の tar.gz 展開でsegmentation fault出まくりとかで)...くたびれたので一旦終了
mc-r730よりマシとはいえ やっぱり 不具合が出ないわけでもない sigmarion での作業時間を思うと、pc に NetBSD いれてそちらで CFにファイル展開とか極力 済ませてしまうのが無難かもしれない。 (ほんと こちらの言われるとおりにやってればこんな手間食わずにすんだかもしれない...)
2015-8-14[金] USL-5P で debianちょっと前にamazonで中古 USL-5P 入手。IO-DATAのUSB-HDD別付のNASで、 SH4 でメモリ64MB の linux 機器。2004~2010年くらいまで売られていた模様。 debian 化が流行ってたのは 2004-7年付近なんでしょうかね? 玄箱の流行りの頃でもあり、当時 玄箱HGユーザーだった身としては SH4に惹かれつつUSB経由でしかHDD繋げられないから遅そう(メモリ64MBしかないし)と思って今一歩な気分だったのだけど、今回は NASとして使う気無しなこともあり、HDDない分 玄箱より断然小さくて白い箱は 今なら Raspberry Pi とかに近い気分。比較するとちょう2つ分くらい。なかなか かわいいヤツです。
USL-5Pの debian 化のページはググれば わりと見つかるけれど、
たぶん LANDISKで漕ぎいでな~♪ の方が用意されたモノを使っている人が多いみたいなので、お手軽にそれを使わせていただきます。 基本的に こちら の方の手順でできた。もちろん他の方々の頁も参考。 てことで焼き直しだけれど、以下 自分用の作業メモ(実際に作業したのは数週間前) 家内lanでのみの ssh(telenet)接続しての ちょっとしたSH4お試し環境としての利用なので、(ファイル/web)サーバー立てたりとかはしないです。
debian(etch) インストールCF(ディスク) の扱いを楽したいので そのへんは linux(mint) 機で作業。(webブラウザや telnet 接続は win機 使用)
あとは諸々install&設定していく。
2015-8-13[木] 中古 zx2000 に linux インストール(遅延書込8/16. 実作業は先月) 先月 amazon で 3万円台だったのでつい 中古の HP zx2000(itanium2 workstation. メモリ1GB) を購入。osとかは無しだけど debian か何かlinuxは対応してるだろう、と到着してから探してみれば debian8 では丁度 IA64 はサポート打ち切られてたという... 他を探してみれば gentoo で新しめのisoイメージあったけれどその他は対応なかったり対応していても結構古そうだったりと面倒そう(NetBSDもFreeBSDもIA64はイマイチ)。 とりあえず debian7.8 と gentoo の CD image 焼いて試してみたところ、どちらも CD 起動途中でbeep音鳴らしてシステムLED赤に変えてリブート... ひょっとして zx2000 対応してないのか? (ちなみに dvdドライブついてたので最初dvdで試したが起動対象にもならなかった) ググってみれば海外サイトで同じ症状の件がいくつか質問に上がっていた。どうも debian の場合 sarge(debian3.1) では動いてたようで etch(debian4) 以後ダメになったような(IDEドライバ?か何かぽい)話。 ただ、sarge から dist-upgrade してetchへの移行はできるようなので、 それを試してみて... いろいろハマったが 結論をいえば sarge からupgradeしていかずとも debian 6(squeeze) を直接 CDでインストールすれば とりあえず動いた。(sargeからupgradeしていくと lenny(debian5) までは無問題だけど 5 から 6 への upgrade が困難、てかうまく行かなかった) ただ debian 6 でも gnome 入れて立ち上げ、そこから logout した時に beep音&LED赤状態になってしまったので、コマンドラインのみにした状態。(ハングがなくても gnome環境すごく遅かったのでコマンドラインのみにしてただろうけど) まあ予定の範囲の結果なんでよかったかな、と。(うるさいし邪魔なので当面 物置部屋のオブジェだけど...)
ちなみにgentoo のほうも古めの cd imageを用いたら beep&reboot なくプロンプトまでこぎつけた。(2007 年版(install-ia64-minimal-2007.0.iso))
2015-7-18[土] n3150b-itx
Asrock n3150b-itx、IDEやFDDは無いけれど背面に プリンタ・ポートやら 232cポートやらがあって微妙にレガシー用途が想定されてるぽいのだけれど、組立ててみると今どきのM/Bでは当たり前?な4(or 8)ピン電源(atx12v)コネクタが盤上になかった。まあCPUの消費電力思えば無しでも当然か……
コレ、pen4より前の、かなり古い(十数年前の)メーカー製パソコンのMB置換にも使えるかも。
もっとも IDEやFDD接続無いしフロントパネルの類とかの接続も工夫か諦めが必要だし なにより古い電源は爆音ぎみなので、コストかけて苦労我慢してまで使えるマシンに復活させたい愛着ある古パソは……早々ないワナ。 (爆音回避でACアダプタ電源にでも取替えられるなら そもそもこのMBでなくてもよく)
2015-7-5[日] 簡易類似画像判定のメモ別件ググってて類似画検索のネタみかけて、だけど特定のモノを(綿密に)探すタイプで、どちらかというと大量のものを分類したいなあ...と、一応 以前 かなり簡易だけれど そういうものを作りかけて放置していたので それをネタに。 キッカケは忘れたけれど、以下のような近似画チェックを思いついて (でもこれは良くない例)
思いついた時はいいアイデアのような気がして作り始めたけれど多少面倒くさくて、実はもう似たようなものがあるかも、とググれば案の定、もっとシンプルで良いものがあった。 こちら等 で 紹介されてる Avarage Hash 法.
画像を8x8サイズに縮小して上記のような64bit整数値(ビットパターン)を得るだけ。再帰する必要なんてなかった。
(以下ビット演算慣れした人には釈迦に説法の類だけど) 画像 a と画像 b の 上記明暗の64ビットパターンを a.ptn と b.ptn とすると、排他的論理和(xor)を用いて uint64_t d_ptn = a.ptn ^ b.ptn; のようにして差異のビットパターン d_ptn を得られる。xorの結果は違う部分のビットが1になっているので、d_ptn 中の 1 になってるbit数が少ないほど 類似している(可能性が高い)ということになる。 64bit値中の1のビットの数を数えるのは、今どきの64bit CPUだと、 __popcnt64 (VC) や __builtin_popcountll (GCC)
でコンパイラがネイティブなマシンコードにインライン展開してくれたりする。
unsigned popcnt64(uint64_t bits) { bits = (bits & 0x5555555555555555UL) + ((bits >> 1) & 0x5555555555555555UL); bits = (bits & 0x3333333333333333UL) + ((bits >> 2) & 0x3333333333333333UL); bits = (bits & 0x0f0f0f0f0f0f0f0fUL) + ((bits >> 4) & 0x0f0f0f0f0f0f0f0fUL); bits = (bits & 0x00ff00ff00ff00ffUL) + ((bits >> 8) & 0x00ff00ff00ff00ffUL); bits = (bits & 0x0000ffff0000ffffUL) + ((bits >> 16) & 0x0000ffff0000ffffUL); return (unsigned)(bits) + (unsigned)(bits >> 32); }
な感じで結構高速に求められる。
if (popcnt64(a.ptn ^ b.ptn) <= 類似とみなす差異ビット数) 類似画像の処理 else 別画像の処理 1回当たりのチェックがこれだけ低コストならば、数千(万)程度の画像数なら、総当りチェックしても 割りと実用的な(ガマンできそうな)速度になりそうで、試してみるとそこそこいい感じだった。 総当りして、違いが少ないもの同士をリンクしておいて、後でリンクされたグループ内で調整して並べなおして... 等ちょっとめんどくさいけれど。
※ 実のところ 総当りチェックせず単純にビットパターンでソートだけでも 結構よかったりする。同一とみなしたもの(8x8縮小画同士の差が0)が連続するだけでなく、画像の上のほうが一緒で違いが下のほうにしかない場合なんかも近くに並ぶので……
もちろん上側が違って下側が似てる場合などは離れてしまっているのだけど。
で、どの程度を近似とみなすか、が面倒、てか肝。 同一判定なら Average Hash 法の説明で書かれている7%ほど(64点だと 4,5個)でよいかもだろうけど、も少し増やすと同一ではないけどちょっと違う類似画像もひっかかりやすくなって.... それなりな結果が出てると欲が出てきてしまうもので、類似判定の精度上げるために、さらに以下のようなチェック等追加
等等 ごちゃごちゃ追加して 判定 重くなってくるわけですが。(の わりにはまだまだ誤判定有)
ちなみに 16x16パターンについては、同一画の判定としては8x8より精度よさそうだけど、類似物を集めるという面ではシビアになりすぎるのか分が悪い感じだった。ので補助的に利用。速度を思えば無しのほうがよさげだけど、この判定でマシになるケースもあるし、で。逆に4x4は荒すぎて結局8x8の判定便りになるぽいから あまり意味なく(でも最初にざっくりとしたソートするのに使ったかも) こういう判定は面白いけれど難しい。いろいろサンプル食わして それなりな線を目指すのだけどサンプル違うとガラッと誤判定多かったりね、手間の割には精度よくならないわな。根本的に簡易なので、もっとよくしたいなら別のアルゴリズムにする/を併用する、ほうがよさそう。けどググって出てくる本格的な類似画判定のアルゴリズムは速度を思うと……(だし、そこまで気合入れて類似画分類処理を作りたいわけでもなく)
お試しプログラム
と、ま、以前 試しに作ってみてたコマンドライン・ツールは これ。
指定したjpegファイル群を調べて、類似のあったファイル名だけ表示したり、全ファイルを類似情報を元に名前付けて copy や move するバッチ生成したり、類似順にファイルの日付を付直したり出来ます。
![]()
![]()
※画像は 株式会社ブリリアントサービスのフリー素材 (タイトル:ジュエルセイバーFREE URL:http://www.jewel-s.jp/) のものを使用。 jewel-s-free100j より適当に13枚を選んでα無 jpg画像にし類似画像の順番がバラけるよう適当に変名した。また うち1枚を、拡大、モノクロ化、文字書込、したものも追加。(ruig-smp.zip)
処理速度については、i7-3770(3.4GHz) mem32GB の win8.1x64 マシンで、適当に寄せ集めたjpeg画像自分で撮った写真や net で拾ったイラストや写真等)を HDD(3TB)に置いて win64用exeで試したところ、
と いう感じだった。
並替準備――画像縮小してソート・キーになるビットパターン生成等――はちょい負荷あるが、 並替自体は 許容できそうな範囲(ただ類似画の量が多いともっと増える)、 主にjpg展開+ファイル読込に時間がかかっている模様。 jpg 展開は libjpeg-turbo を用いて、また、ある程度巨大画像については サムネール機能利用して処理短縮を図っているけどこの時間。(jpg は8x8ピクセルのブロック単位で扱う工程があって最後まできっちり展開せず処理端折って縦横8分の1(1/64縮小)の荒い画像を得ることができる。ただ王道な縮小と誤差はあるので、その誤差も無視できる程度に1/64画像が大きい――比較用8x8画よりも2桁ほど広い――場合のみ利用) (※libjpeg側のサムネール取得関数は1/8とは限ってないので も少し工夫あるのかもしれない) 単純に1スレッドでファイルごとに読込→展開→並替準備をシーケンシャルに繰り返し処理してるので、そのへん並列化できれば少しはマシになりそうな気はする。(劇的には無理だろうけど。ただ画像ビュワー等で自前でサムネール生成保存するような場合なら一緒に類似ソート・キーも保存しておけば そこそこ使えそうな手段な気もする) あ、と、実際にソート結果を反映したrename(move)したりcopyしたりは生成したバッチで行うので それなりに時間かかります。
|