小型PC BXNUC10I3FNH へUbuntu20.04を導入したので環境整備中なのだが16.04とは随分違うので思うように進まない。特に今までのMotif風のThemeがまだ使えるようになっていないのでGnomeのclassicも諦めてYaruを使っているがスマホみたいで馴染めない。
そんな中で何ができて何が出来ないか確認していたところxnp2-0.86.tar.bz2がコンパイルできないことに気づいた。
Ubuntu20.04に導入されてるc++とxnp2-0.86のコードとで型の不一致が多発。いっぱいあったので深堀する気が起きなかった。
てことで、最新のコードはどうなっているのか探してみたところNeko Project II (NP2) 改変を発見。
早速GitHubからコードをDLしてコンパイルしてみたところいきなり通らない。orz
コードを展開したディレクトリ配下にbuildディレクトリを作成してしてその中でcmake .. -D BUILD_X=ONするのだが色々足りていない様子。あれ?入れ忘れたかなと不思議に思いつつapt installで関連モジュールを入れ直してみてもやっぱりだめ。
よくよくエラーを読むとFindSDL2_mixer.cmakeが提供されていないからSDL2_mixerConfig.cmakeかsdl2_mixer-config.cmakeを配置してパスを通せということらしい。確かにFindSDL2_mixer.cmakeは/usr/share/cmake-3.16/Modules/にも無いし、プロジェクトにも含まれていない。
"-D USE_SDL2=OFF"を付けてその場しのぎって手もあるがあんまりなので以下のファイルをGitHubからDLしてきてコードを展開したディレクトリのcmakeディレクトリ下に配置。
FindSDL2.cmake
FindSDL2_mixer.cmake
FindSDL2_ttf.cmake
再度 cmake .. -D BUILD_X=ON を実行すると通った。
( 実際には1エラー1ファイル発見だったので3回繰り返した)
manファイルをgzip化してman1以下へ配置し直しつつSPECファイルを書いてRPMを作成。alienでdeb化して導入完了。この方法が正しかったのかどうかわからないが少なくとも普通に使えるほどには動いている。(ように見える)
最近でもNP2のコードをメンテし続けている「Neko Project II (NP2) 改変」に感謝。これがなければUbuntu20.04では諦めていたかもしれない。
小型PCは何台か持っており、最も稼働率の高いLiva Zの処理能力に近頃は不満を感じるようになってきていた。このPCにはホストOSをとしてUbuntu16.04が入っており、その上でマイクラサーバとしてUbuntu16.04の仮想マシンをVirtualBoxで稼働させていた。
CPUはN4200、メモリ16GB、SSD512GBの構成でそこそこ動くのだがごく一部の処理で若干パワー不足のようだ。大したことではないがマイクラでの描画が若干追いつかないという問題。
おそらくシングルスレッド処理能力とIO性能を向上させれば改善するとは予想していたが静かで小さくて熱くないPCという機種条件ではなかなか絞り込めなかった。
そこで、FANがあることを妥協して第10世代Core i3-10110Uを搭載したBXNUC10I3FNHを購入することにした。この用途では熱とシングルスレッド処理能力の妥協点はCore i3だろうとの考え。ストレージもなるべく熱を持たずに高速なWD Black SN750の500GBとしてメモリは前と同じ8x2の16GB。
OSはUbuntu20.04を入れて現在稼働中。CPU負荷7%前後の通常状態でCPU温度は50度前後、M.2はアクセスがないと25度、アクセスがあると一気に40度になりその中間で推移することはあまりない。
微妙にFANの音がするが机の下に置いたので今のところはなんとか許容範囲。
マイクラの応答はかなり改善された。エリトラで飛んでも地上の描画がちゃんと追いついてる。
普段使いのPCにはUbuntu16.04が入っており、本日時点ではVirtualbox6.1.10が導入されている。その上で各種実験OSが動いているのだが、CentOS7、Ubuntu16.04、18.04などのゲストマシンが起動に失敗していた。
当初はホストOSのボリュームをnfsでゲストOSへ見せていたのだが、SSD換装のタイミングでホストOSを最近入れ直した際にexportをすっかり忘れていたなど構成上の問題を色々疑っていたのだがそうでないことがようやくわかった。
これまではゲストマシンのディスプレイ設定でグラフィックスコントローラーをVboxVGAにしていたのだがVMSVGAにしたところ正常に起動できるようになった。
たったこれだけのことに気づくのに何週間もかかってしまった。orz
注文していた Intel Core i9-9900Kとマザーボード、DIMM、その他諸々が届いた。
こんな梱包は初めて見た。
諸々。
グラフィックカードやストレージ周りももこのタイミングに合わせて変更する。グラフィックカードはMSI のGeForce RTX2070。
しかし、今回買ったマザーボードはASUSのROG STRIX Z390-F GAMINGといことでATXサイズ。 自分の使っている倒立式MB搭載型のミドルタワーPCケースはSilverStone SST-PS07BでありMicroATX用ときたもんだ。
すっかり忘れていた。
てことでMicroATXのマザーボードを買い直すか、ケースを買うか考えていたが、まずは一旦ケースを買ってみる。
名古屋ではGateway2000のフルタワー2台とその他色々を使っているが、川崎では机が小さいのでとにかくコンパクトなケースがいい。
SilverStone SST-PS07Bは倒立式のため排気はケース下方からが中心となり、排気の流れも周りの障害物も避けられとても都合が良い。こんな小さいのにCore I7 4770空冷クーラー + GTX1060 + RAIDカード + 3.5HDDx5台 + 2.5SSDx2台で夏でもびくともしない。Gateway2000のフルタワーケースでは稼働10分ともたないだろう。
そんな中で先程注文したメースはANTEC P7 Silent、かなり妥協が入った。
大きささえ許容できればFractal Design R5にしたかったが、奥行きが長すぎた。
組むまでに少し時間ができたので新HDDとM.2 SSDにLVMでボリュームを作成して先程ストレージのデータも仮想マシンからDBのインスタンスまで一通り移行させた。
これで明日の組み立てへの準備は万端。
たぶん。
自宅には古いPCがいくつかある。・・・いや、全部古いかも。
取り分け古い物として、かつての国民機PC-9801が物置部屋に保管してある。正確にはPC-9801ES2というIntel 80386SX 16MHzを搭載した3.5FDD仕様の98。
はじめはN88DISK Basicで訳も分からずピポピポやってたが、ゲームやDOSの世界に首を突っ込むようになってパソコンの使い方が一変した。太平洋の嵐DXやシュバルツシルドで無敵になるためにmasmやsymdebを駆使してFDDから吸い上げたデータの解析から修正ユーティリティの作成などを通してパソコンの使い方を覚えていった。このスキルは後にIBM PS/55+3270+MS-Networks環境でのコンベンションメモリ確保ややDOS/V時代のIRQ/IO portの把握に大いに役立った。
という経緯もあり、時々ふとPC-9801を思い出す。
で、ふと思い出して九十九でPC-9821Xsの在庫処分品を買ったこともあるが、今回は「C言語でロボットを制御してビルを建てるゲームあったよな?」と余計なことも思い出した。こうなるともう止まらない。ゲーム名はアートディングから発売されていたHR2ということは比較的すぐ判明した。しかし中古店やYahooオークションを探しても全然売ってるの見つからない。半年くらいしつこく覚えていた甲斐も有って最近になってリサイクル店で販売されているのを見つけて即座に購入した。
しかし普段は名古屋ではなく川崎に居る。そこにはPC-9801は無い。ということで持ってくるのも面倒なのでUbuntuにPC-9801エミュレータを導入する。覚書ということでたまにはPCネタを書いてみよう。
普段使用しているPCのOSはUbuntu 12.04.5 LTSと、これまた古い物使ってる。
linux版ではxnp2というエミュレータが利用できるようだ。しかしUbuntuの公式パッケージでは
ないので自分でビルドする必要が有る。ソースからのビルドはSlackwareやRedHatで散々やったがUbuntuを使うようになってからはそんなことした記憶が殆ど無い。ただのmake installじゃ管理上マズいがdebパッケージの作り方も知らないのでrpmを作成してalienで変換して導入することにした。
まずは以下サイトからソースをDLする。
https://www.nonakap.org/np2
今回DLしたソースは xnp2-0.86.tar.bz2 というファイル。
ビルドに必要なのはgccとGTK+2.6以降とあるが、SDLやXFree86-VidModeExtension、libusb-1.0も事前にapt-getで入れておく。
手順としては、
1)動作するまで仮導入先でコンパイル手順やソース、Makefileの修正を繰り返す。
2)動作するようになったらオリジナルソースとのdiffを取る。
3)rpmのビルドデイレクトリにソースとspecファイルを配置してrpmbuildが通るまでspecファイルを修正する。
4)alienを使ってrpmファイルをdebファイルへ変換する。
1)仮導入
作業用ディレクトリにソースを展開する。
tar xvf xnp2-0.86.tar.bz2
展開されたディレクトリ名称をxnp2-0.86からxnp2-0.86.orgに変更し、もう一度ソースを展開して2つのソース展開ディレクトリを用意する。
作業ディレクトリ配下にこの2つの展開デイレクトリを用意する。
xnp2-0.86 ←作業するのはこのデイレクトリ
xnp2-0.86.org
xnp2-0.86の下のx11というデイレクトリでビルド作業を行う。
cd xnp2-0.86/x11
ビルドに当たってのオプションを確認する。
./configure --help
~~~~~~~~~~中略~~~~~~~~~~~~~~~~~~~~~~~~~
--enable-gtk3 Use GTK+-3 library [default=no]
--enable-sdl Use SDL 1.2 library [default=yes]
--enable-sdl2 Use SDL 2.0 library [default=yes]
--enable-sdlmixer Use SDL_mixer library [default=yes]
--enable-libusb1 Use libusb-1.0 library [default=yes]
--enable-xf86vidmode Use XF86VidMode extension [default=yes]
--enable-ia32 Use IA-32 emulation [default=no]
--enable-build-all Build xnp2(i286 emulation) and xnp21(IA-32
emulation) programs [default=no]
--enable-debug Enable debugging [default=no]
--enable-warning Enable warning [default=no]
--enable-gtk-deprecated-api
Enable GTK+ deprecated API [default=yes]
--disable-sdltest Do not try to compile and run a test SDL program
~~~~~~~~~~中略~~~~~~~~~~~~~~~~~~~~~~~~~
--enable-build-all というオプションを選択すればPC-9801とPC-9821のバイナリがコンパイルされることがわかった。今回はこれを採用する。
CFLAGS="-Ofast" ./configure --prefix=/usr --enable-build-all
これによりMakefileが生成されるのでmakeを実行する。
make -j3 2>ERR.log (エラーを確認したいのでエラーだけリダイレクトさせておく)
すると案の定「cc1plus: エラー: 認識できないコマンドラインオプション ‘-std=c++11’ です」というエラー発生。
c++のオプションに -std=c++11 は無効なようだ。使っているgccのバージョンは4.6.4のため-std=c++11 ではなく-std=c++0x を指定する。機能上ダメかもしれないが通ればラッキーといことでMakefileの該当個所2ヶ所を修正して再度コンパイル。
make clean; make -j3 2>ERR.log
OKだった。生成されたバイナリを実行するとちゃんと画面が表示されたのでよしとする。
-std=c++0xはパラメータ引き渡しがうまくいかなかったのでMakefile.amとMakefile.inの2つのファイルの該当個所を修正してconfigureを実行してMakefileに反映されるようにした。
2)diff作成
修正箇所をパッチファイルにするため、オリジナルディレクトリと作業ディレクトリの差分を取る。
xnp2-0.86とxnp2-0.86.orgを配下にもつ作業ディレクトリから
diff -urpN xnp2-0.86.org xnp2-0.86 > xnp2.patch
というようにパッチファイル作成する。
3)作業記録を兼ねてrpmbuildでビルド作業を自動化。
rpm作業ディレクトリ配下のSOURCESにDLしたxnp2-0.86.tar.bz2と上記で作成しxnp2.patchを置く。
SPECディレクトリで普通にspecファイルを書いて
rpmbuild -ba xnp2.spec
として実行バイナリパッケージとソースパッケージを作成する。
するとxnp2-0.86-1k1.x86_64.rpmとxnp2-0.86-1k1.src.rpmが作成される。
このsrpmをとっておけばどんな作業したか一目瞭然。
4)debパッケージへ変換
作成した実行バイナリのrpmファイルをdeb形式へ変換する。
alien xnp2-0.86-1k1.x86_64.rpm
するとxnp2_0.86-2_amd64.debというパッケージが生成される。
これをdpkgコマンドでUbuntuへインストールする。akienに-i オプションを付けて変換と同時にインストールも可能だがdebパッケージが導入後に消えてしまう。
若干記憶を頼りに書いているところもあるので不正確かもしれないけどこんな感じでxnp2を導入できる。
98用のDOSは2.11から5.0までかろうじて何本か取ってあった。IBM PC-DOSを加えると何本あることやら。98用はこれ以外にWindows3.1とWindows95もある。メディアはFDだけど。
DOSを起動したところ。
HR2も起動OK。
けど、ゲームやってる時間が無い。orz
久々の更新となるが、備忘録を兼ねてlinuxネタをちょっと書いてみる。
リモートホストのXウィンドウをローカルへ引っ張ってくるなんて最近はほとんどしなくなった。
たまたまCOBALT CUBE改へlubuntuをインストしていて、久々にそうした方が便利な状況になったのでやってみたら全然できない。orz
どうもtelnet + XFree86の頃とは勝手が違うようだ。
環境はローカル:Ubuntu12.04、リモート:lubuntu14.04。
ローカル側で "xhost +" で接続を許可し、sshでリモートへ接続し "export DISPLAY=自分のホスト:0.0" と環境変数を設定。続いてリモートでXアプリを起動すると、
Error: Can't open display: 自分のホスト:0.0
とエラーになる。ディスプレイ番号が違うのかと色々試したがダメ。色々調べるとssh経由では根本的にやり方が違う。Xでの直接転送ではなくsshで転送するためsshデーモンの設定が必要なことが分かった。
1)sshの設定
リモートホスト側の /etc/ssh/sshd_config の設定を確認する。
X11Forwarding yes →yesとなっていること
X11DisplayOffset 10 →これがDISPLA番号
2)環境変数DISPLAYの確認
リモートホスト側で "echo $DISPLAY" を叩くと次のようにローカルを指していること。
localhost:10.0
3)リモートアプリの起動
引数で "-display hogehoge:0.0" のように指定はしない。そのまま起動させる。
例えば "xeyes &" のように。
するとリモート側のポート6000 に X11DisplayOffset値10が加わった6010がsshでローカルへ転送されてローカルディスプレイに表示される。
4) Mozilla Firefox の場合
これはちょっと勝手が違う。リモート側で "firefox &" などと起動させるとローカルのFirefoxが立ち上がってしまう。これを防ぐにはリモートホスト側で "export MOZ_NO_REMOTE=1" と環境変数を設定する。
すると、リモートのfirefoxの画面をちゃんと引っ張ってこれるようになる。
5)リモートXでの日本語入力
これもssh接続するとまっさらなのでリモートホストで環境変数を設定する。自分の環境のインプットメソッドはibusなので次のようになる。
"export XMODIFIERS=@im=ibus"
これで続けてアプリを起動すれば日本語入力が可能になる。
今回は以上これだけ。
先週末、またPCがイカれてしまった。何を行うにもやたら遅い。
また仮想マシンファイルが逝ったか?と思ったがlinuxネイティブのホスト環境でも遅い。
logを確認すると、
hptiop_reset(6/0/0) scp=ffff8802ed4db100
てなkernel警告がずらり。何の警告か良くわからないが、RAIDカードで良くないことが
起こっていることは俺に十分伝わった。それくらいの空気は読める。(`・ω・´)
で、RAIDカードのユーティリティで確認するとDISK2に不良セクタの代替処理が9回発生していた。このためIOが異常に遅くなりUbuntuの起動に20分とかアホな状況に陥っていた。
RAIDを構成していても不良セクタの発生は非常にやっかいだ。
Amazonで新品DISKを1本購入、昨日届いたのでRAIDをバックグラウンドでリビルド。
不良セクタの発生したDISKは何かに再利用できないかなと不良セクタのスキャン開始。
badblocks -c 32 -o /tmo/bblock.txt -v -s -w /dev/sde
を実行してelapsd time 29:32:27経過、まだ更新中。いつ終わるんだ?まだ不良セクタ登録しないといけないのに。
ところで、以前はWD5000BEVTx2台でのオンボードRAID0で適当に構成していて、VMwareなど使い始めたらIO性能のプアさに嫌気が差して現在の構成はこうなっている。
[HW]
MB:ASUS P5N7A-VM
HBA:HighPoint RocketRAID4310 x 1 + BBU-04(バックアップバッテリ)
HDD:日立0S03191 x 4 (2TB SATA600 7200rpm)
メモリ:12GB
[システム]
Ubuntu 10.04 64bit
VirtualBox
今後は仮想マシン主体に使うから前回の反省を踏まえて、今回はストレージ設計をもう少しまじめに行った。HDD4台でのRAID5(3D+1P)とし、IO性能とパーティション用途を考慮したスライスになるよう次のようにRaidグループを分ける。
R/G SIZE Block
RG1 1TB 64KB
RG2 1TB 64KB
RG3 2TB 256KB
RG4 2TB 256KB
先頭シリンダ寄りの1TBは高速性を活かしてOSやVM用などシステム用に割り当てる。
残りはデータ用として、細かいファイル用と大サイズ用でチャンクを64KBと256KBに分けた。しかし、パーソナル利用でこんなに容量要らない・・・
HighPointのIOプロセッサ付きRAIDボード買ったの初めてだけど、あまり細かい設定はできないようだ。オプション見てたらBCVなんて項目もあり、一瞬ニコっとしたがTimeFinderなど動くはずもない。
移行やサルベージのためにトリプルブート用にパーティションを切る。
システム用ボリュームの内容。
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 1 4177 33551721 7 HPFS/NTFS
/dev/sda2 * 4178 7310 25165822+ 83 Linux
/dev/sda3 7311 10443 25165822+ 83 Linux
/dev/sda4 10444 121576 892675792 5 拡張領域
/dev/sda5 10444 114876 838858041 8e Linux LVM
/dev/sda6 114877 118009 25165791 7 HPFS/NTFS
/dev/sda7 118010 118270 2096451 b W95 FAT32
/dev/sda8 118271 120009 13968486 7 HPFS/NTFS
/dev/sda9 120010 121576 12586896 82 Linux スワップ
※/dev/sdb~/dev/sddはデータ用なので大雑把に1TBづつパーティショニング。
sda1は素のWindowsを導入。
sda2はルートパーティションとしてUbuntu Server 10.04を導入。
sda3はVine6用に確保したがインストーラがハングするためもうひとつUbuntu Server 10.04を導入。
/homeや/var/log、VM用のボリュームなど必要に応じてLVMから切り出すため全てVGを作成。
PV VG Fmt Attr PSize PFree
/dev/sda5 SysVG3201 lvm2 a- 799.97g 291.97g
/dev/sdb1 DataVG3201 lvm2 a- 931.31g 557.31g
/dev/sdc1 DataVG12801 lvm2 a- 931.25g 0
/dev/sdc2 DataVG12801 lvm2 a- 931.25g 662.50g
/dev/sdd1 DataVG12801 lvm2 a- 931.25g 931.25g
/dev/sdd2 DataVG12801 lvm2 a- 931.25g 931.25g
VG #PV #LV #SN Attr VSize VFree PEsize
DataVG12801 4 1 0 wz--n- 3.64t 2.47t 128MB
DataVG3201 1 3 0 wz--n- 931.31g 557.31g 32MB
SysVG3201 1 2 0 wz--n- 799.97g 291.97g 32MB
サルベージや互換性を考えてファイルシステムはxfsはやめてext4とした。
ext4のファイルシステムはバカチョンフォーマットせず各RAIDグループに合わせてパフォーマンスを最適化すべくオプションを指定。
ex.) mkfs.ext4 -b 4096 -E stride=16,stripe-width=48 /dev/sdaXX
チャンクサイズ64KBの場合、4096byteブロック16個分なのでstrideは16、RAIDは3D+1Pなのでstripe-widthはstride x 3DataDisk =48。
チャンク256KBの場合はそれぞれ64、192となる。
これら作成されたファイルシステムのマウントもオプションを指定する。
/etc/fstabにstripeを指定。ここではmkfsでのstrideと同じ意味でチャンクをfsのブロックサイズで割ったものをstripeに指定する。
fstabの例)
/dev/SysVG3201/SysLV02 /opt/virtual ext4 stripe=16 0 1
/dev/DataVG3201/DataLV04 /SRV/Share ext4 data=writeback,stripe=16,noatime 0 1
ブロックサイズ、チャンクサイズ、ストリップサイズ、ストライプサイズとメーカーで呼び方がバラバラなのでややこしい。この状態でのIO性能を確認するためhdparmで計測したが、before/afterの計測データをどこへ保管したか忘れた。
こうなったらたぶんもう見つからない。
ただ、仮想マシンを4つや5つ起動したくらいではビクともしないからまぁOKでしょ。
TintriやIsilon、LeftHand、Panasasなどの面白いNASが世の中にはあるのに個人環境ではこんな面倒なことして頑張らなければいけない。トホホ。
パソコンのDISKのパフォーマンスがあまり良いという感じがしない。
安全性は気にせずマザーボードのオンボードraidを利用したRAID0上にUbuntuを導入し、ハイパーバイザーとしてVMwareServerを導入、その上でWindows他をゲストに使用している。
まぁ、そんなにお金掛けてない仕様だから複数のIOが走る状況にあまり強くないのは仕方が無い。
また、vmdkのようにGB級のファイルを扱うシーンではファイルシステムでパフォーマンスに大きく差が出るから基本はxfsだけど、小さめなファイルの更新・削除が多発するところはext3を使用してbenchではなく普段使うシーンでの体感速度を優先してる。
しかしだ、特にvmdkのバックアップにはアホかと思えるくらい時間がかかる。
ストアー先はUSB外付けDISKなんだけど・・・
ファイルアクセスに関しては玉を増やして分散ミラーのようなDISK構成としてバックアップにはdeduplicationが利用できたらな~とネットを徘徊していたらやっぱ世の中広い!まだ詳しく見ていないけど一応あるんだ。
・duplicating filesystem
<lessfs>
http://www.lessfs.com/wordpress/
<opendedupe>
http://www.opendedup.org/
・分散ミラー
<Raid-x>
http://csce.uark.edu/~aapon/courses/ioparallel/presentations/Raid-x.ppt
IBM社のストレージXIVの仮想化グリッド・アーキテクチャーとそっくりに見える。
イスラエル軍のエリート養成プログラム「Talpiot」第14期卒業生と関係あるのかな?
これと同様と呼んではいけないらしいけど製品としてはこれでしょう。
SATAでも全然OK、RAIDリビルドも桁違いに速い画期的なSANストレージだと思うんだけどな。
http://www.xivstorage.com/
http://www-03.ibm.com/systems/storage/disk/xiv/index.html
DeDupeはともかく分散ミラーは週末にちょっとやってみようのレベルじゃないよな。
当然製品なんて買えないし、部屋にも置けないし。