今更なんですけどね、UEFIを触ってみましたよ。
昔AVR用に作ったCP/MエミュレータをUEFI for x86_64向けに改造して、OS無しで直接CP/Mがbootできるようにしてみました。
Ubuntuだったら以下の手順でbuildできます。
% git clone https://github.com/toyoshim/cp-mega88.git
% cd cp-mega88
% sudo apt-get install gnu-efi
% make -f Makefile.uefi
でcpmega88.efiってファイルが出来るので、EFIのパーティションにEFI/Boot/bootx64.efiって名前でコピーするか、EFI Shellから起動するかでCP/Mが起動します。CP/M用のディスクイメージはEFI/cpmega88/sdcard.imgって名前で用意してください。githubのページで詳しく書いてますが、z80pack用のイメージがそのまま使えます。
QEMUが入ってれば以下の手順でも動作確認できます。
% make -f Makefile.uefi install
% qemu-system-x86_64 -bios OVMF.fd -hda fat:.
OVMF.fdはこの辺から入手できます。
USBメモリとかに入れておけば、UEFI対応のPCに挿して起動するだけでCP/Mが動作します。わー、嬉しい!
2015年9月8日火曜日
2015年8月26日水曜日
Take an Android Chrome tracing from laptops with small storage
./tools/profile_chrome.py is our friend to take a great tracing data from Android Chrome and Chromium. But usually it requires to check out the huge chromium repository that is too large, about 8-GB, to have it in some sorts of laptop devices. This is a note to copy small set of files from an existing checkout to run the tool on another laptop device.
The expanded files still need 512-MB of your storage, but would be much better than 8-GB.
desktop % tar zcvf chromium_tools.tgz \
> ./build \
> ./third_party/android_testrunner \
> ./third_party/catapult \
> ./tools
laptop % scp desktop:chromium_tools.tgz /dev/stdout | tar zxv
The expanded files still need 512-MB of your storage, but would be much better than 8-GB.
2015年8月16日日曜日
2015年6月/7月の読書
また溜めちゃったかなぁ、と思ったけど今月はまだ終わってないので2ヶ月だけだった。6月に6冊、7月に3冊の計9冊から……少ないけど、まぁいっか。
SF
天冥の標は読み続けてます。5巻でいよいよ太陽系外生命体について詳しく書かれる事になり、全ての背景設定が出揃った感じ。6巻がいよいよ三部構成で太陽系を舞台にした一大惨事の始まり。これ書いてる時点(8月)ではPART2まで読み終わってますが、今後も目が話せない感じ。
それとは別に伊藤さんのハーモニーも読みました。こっちも完璧だった。虐殺器官の頃のような文体な未熟さもなく素直に面白かった。国家の品格で言うところの近代的合理精神の限界に対する近未来で起きる1つの皮肉な解、あるいはシンギュラリタリアン的発想の人類補完計画。情報インフラってこういう怖さはあるよなぁ、と思う。まぁ、合理的な判断ってモノ自体が幻想だし。生物の進化の根源も非合理やカオスにあるのでその辺は物語として読む感じ。判断ってのは世界をどの切り口で覗きこむかで決まるもので、絶対的な真実があるわけでもないし。ニューロンだって非線形じゃないと学習できない。しかし、著者の若い死が悔やまれる。
それとは別に伊藤さんのハーモニーも読みました。こっちも完璧だった。虐殺器官の頃のような文体な未熟さもなく素直に面白かった。国家の品格で言うところの近代的合理精神の限界に対する近未来で起きる1つの皮肉な解、あるいはシンギュラリタリアン的発想の人類補完計画。情報インフラってこういう怖さはあるよなぁ、と思う。まぁ、合理的な判断ってモノ自体が幻想だし。生物の進化の根源も非合理やカオスにあるのでその辺は物語として読む感じ。判断ってのは世界をどの切り口で覗きこむかで決まるもので、絶対的な真実があるわけでもないし。ニューロンだって非線形じゃないと学習できない。しかし、著者の若い死が悔やまれる。
政治・経済
こっちもシリーズで固定化しちゃったけど池上さんの4と5。追いかけるように読んでるわけだけど、近い将来として書かれた話題が、まさに今の問題になっていて、世界が大きく動いているのがわかる。読んでいて面白くないはずがない。最近、常々思うんだけど、人の一生の50-100年って言うのは人の歴史と比べてもずいぶんと長いんですね。日本の歴史で考えても、ある程度しられているのは1500年程度。その1/15程度をリアルタイムで体験するわけで、その間に歴史が動かないはずがない。
Ubuntuチューニング、良かった・悪かった
HP Stream 11向けにやったチューニング、少し時間経ったので振り返り。
swapfs
zramは状況によりけり。2GBでVMに1GB使う時なんかは、zramは切るか128MB×2くらいの構成にしておかないと使い物にならなかった。まぁ、2GB環境でVM使う事自体がアレな気もするので、普通に使う分にはzramを256MB×2くらいが良いのかなぁ、と思いました。
あと、SD Card上にswap作るのは無しかな。zramとセカンダリの内蔵ディスクが良いバランスな気がしました。Chromeからブログ書いてる今この瞬間の状況はこんな感じ。
% cat /proc/swaps
Filename Type Size Used Priority
/dev/mmcblk0p6 partition 1048572 0 -1
/dev/zram0 partition 242280 133884 5
/dev/zram1 partition 242280 133900 5
% vmstat -s
1938276 K total memory
1455064 K used memory
797620 K active memory
386564 K inactive memory
483212 K free memory
47152 K buffer memory
445900 K swap cache
1533132 K total swap
267812 K used swap
1265320 K free swap
(snip)
仮想記憶の設定
vm.dirty_background, vm.dirty_ratio, vm.swappinessは前回の設定(5, 10, 20)がわりと良好みたい。まぁ、この辺が原因で書き込み頻度が上がってSD Cardが書き込み寿命に達した可能性もあるんだけど。でも、どちらかというとswapに使ってたこと自体が問題だった気はする。tmpfsも使うのを止めてしまったのは以前書いた通り。メモリに余裕がない中で適切なサイズを見積もるのが難しいのと、ディスク溢れを気にするのが精神衛生上良くなさそうなのと。その一方で苦労のわりに体感的に得をしてる気がしなかった。ドライバ周り
カーネルアップデートかかる度にWifiが不安定になって面倒。実は先のディスク復旧時に15.04も試したんだけど、そっちは安定してる。輝度調整や音量調整ボタンなんかも完璧。14.04系だとrtlwifi_newを常時置いといてアップデートかかった度にインストールが必要な感じ。Bluetoothは下手に動かすとWifiが動かなくなったりするので最近は試してない。これはBTとWifiがカニのワンチップだからですね。品番別に読ませるファームのROMが必要っぽくて、古いチップ向けには対応されてるんだけど、rtlwifi_new見てもまだ該当チップ向けのファームが含まれてない。
preload / prelink
これも効果は抜群だったんだけど、Chomeのアップデートがかかる度にコマンド打つのが面倒になってやめてしまった。これなしだとApp Launcherの起動に2秒くらいかかるので、本当は使いたいんだけど。パッケージ作り詳しい人なら、パッケージ更新時に自動的に走るように細工したりできるのかな? あと、App Launcherは手動でアレコレしなくてもChrome 44まではchrome://flags#enable-app-listで有効にできるみたい。45からさらに色々なexperimentalが追加されててフラグ良くわからない状態に……。44までで有効にしとくのが楽です、たぶん。
SD Cardが壊れた話
HP Stream 11ネタ。話題が増えてきたのでラベルHP Stream 11を追加してみた。
まずは該当ディスクに対してbadblocksを-n付きで走らせてみた。見事、全ブロックが書き込み失敗。128GBのディスクだったので完走するには一晩かかりました。まぁ、走らせて寝て起きて確認しただけ。
次にやったのはファイルシステムの確認。読み出しは問題ないので別のLinux上でdd使ってSD Cardのイメージを丸ごとファイルに書き出し。これも時間かかるので注意。dd if=/dev/sda of=sda.imgみたいな感じで。細かいオプションはお気に召すままに。で、ディスクイメージはそのままマウントできないので、以前のストレージ復旧でお世話になったkpartxを使ってパーティションを/dev/mapperに配置。
SD Card故障
以前セットアップしてSD Card上で動かしていたUbuntu 14.04.3なんだけど、VirtualBoxの中でWindows 7にアップデートをガシガシあててたら、なんかディスク不調に。しばらくするとrootfsがread onlyで再マウントされてしまう。当然VM内のWindows 7はディスクに書けずにアップデート異常終了。しばらく原因を調べていると、どうもSD Cardの書き込みができなくなった模様。うっかりLockの爪が……みたいな話なら良かったんだけど、その場合には書き込みはエラーするはずで、今回は成功するものの書けてない。以下、この状況で発生したオモシロ現象。当たり前なんだけど、妙に感心した。- SD Card上のswapにデータが入ると、予想不能の発狂モードに突入。色々なものが次々にSEGV。
- 書き込み量が増えてくると、どこかのタイミングでジャーナリングと実データの矛盾に気づいてEXT4が悲鳴を上げる。こうなるとrootfsはerrors=remount-roでマウントされてるのでread onlyモードに落ちてしまう。
- read onlyモードではfsckが走るので、簡単な論理故障ならfsckかけてrebootで生き返る。けど、今回は修復が走った後にジャーナリングに異常が残ってcleanにできなかった的なエラーが出ました。
- ファイルシステム故障かと思い色々手当するも、再起動後には必ず同じ場所まで巻き戻って、同じように自動でfsckがかかり、同じinodeが修復され、同じような故障状態でbootする。
まずは該当ディスクに対してbadblocksを-n付きで走らせてみた。見事、全ブロックが書き込み失敗。128GBのディスクだったので完走するには一晩かかりました。まぁ、走らせて寝て起きて確認しただけ。
次にやったのはファイルシステムの確認。読み出しは問題ないので別のLinux上でdd使ってSD Cardのイメージを丸ごとファイルに書き出し。これも時間かかるので注意。dd if=/dev/sda of=sda.imgみたいな感じで。細かいオプションはお気に召すままに。で、ディスクイメージはそのままマウントできないので、以前のストレージ復旧でお世話になったkpartxを使ってパーティションを/dev/mapperに配置。
% kpartx -a sda.imgってやれば/dev/loopNにsda.imgをマウントして、中のパーティションが/dev/mappers/loopNpMって形で見えるようになる。使い終わったら-d付きでイメージファイルを渡せば開放される。今回は/dev/mappers/loop0p1がswap、/dev/mappers/loop0p2がext4のrootfs。続けてファイルシステム修復。
% fsck.ext4 -f /dev/mappers/loop0p2で確認したところ、実デバイスで走っていた時と同じような修復が走った。けど、最終的にcleanになった点が故障デバイス上とは違った。実際、二度目を走らせたらエラーは検出されず。
復旧
この時点で一番簡単な復旧は同じメディアを用意してddでコピーする事。新しいメディアに差し替えて起動すれば今までどおりEFI経由で起動するはず。ただ128GBのメディアも安くはないので手元にあった32GBに移植する事にした。128GBでも中身はパンパンだったんだけど、KVM用のイメージだったりChromiumとHaikuのソースコードだったりが大半。こいつらを退避したら32GB以下に収まった。いつも思うけどChromeでかすぎ。で、サイズの違うメディアへのイメージ移植は多少の手間が必要なので忘れないように簡単なメモ。- 小さくしたいファイルシステム内で、目標のサイズに収まるようにファイルを削除していく。パツンパツンでも運用できなくなるので、余裕をもって減らす。
- resize2fsを使ってファイルシステムのサイズを小さくする。
- パーティションテーブルを書き換えて、該当ファイルシステムのパーティションサイズをファイルシステムに一致させる(か、多少大きくても良い)。
- 別メディアを用意して適切なコピー先パーティションを用意する。
- ddで縮小した旧パーティションを別メディアの新パーティションにコピー。
- 新パーティション上でresize2fsを使って、確保したパーティションサイズ目一杯までファイルシステムを拡張(縮小時にピッタリ同じサイズに収めていれば、この手順は不要)。
% fsck.ext4 -f /dev/mappers/loop0p2メッセージはメモとってないけど、ここで実際に何ブロックまで小さくなったか、とブロックサイズ(4KB)が表示されるはず。ブロック数×4096が実パーティションサイズになるので、次のパーティションサイズ変更の参考に。
% resize2fs /dev/mappers/loop0p2 28GB
% sudo parted /dev/loop0
(parted) unit b # 計算のためバイト単位の表示に切り替え
(parted) p # パーティション情報の表示
(parted) resizepart 2 XXX # 2はパーティション、XXXは下で説明
(parted) q # 終了
pコマンドでパーティション一覧が表示される。今回は2つ目のパーティションが対象。Start、End、Sizeがバイト単位で表示されるので、このSizeがresize2fs時のブロック数×4096になるように調整すれば良い。具体的にはresizepartのXXXをStart+ブロック数×4096とする。第一引数はパーティション番号なので、適宜正しい値を使うのを忘れずに。
新しいディスクもEFIで運用するためにGPTで用意する必要がある。
% sudo parted -a optimal /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary ext4 0 100%
(parted) q
optimal付けとくと、ブロックのアライメントをメディアの物理単位に合わせてくれる。性能に影響するし、手動で揃えるのは面倒なので指定しておくのが無難。これで手順4までが完了。ddはif=/dev/mappers/loop0p2 of=/dev/sdb1以下お好み。最後にresize2fs /dev/sdb1を走らせれば確保した新パーティションのサイズ目一杯までファイルシステムを拡張してくれる。あと、古いメディアではswap領域がloop0p1相当の場所にあってfstabにも相当のエントリが存在していたので、複製した/dev/sdb1をマウントしてfstabから不要になったswapエントリを削除した。
EFIで運用していれば、ddでパーティションを複製した際にUUIDもそのまま複製されるので、ブートストラップ周りのディスク名の修正対応に追われないので楽ちん。blkidコマンドはどこかにキャッシュがあるのか、ddによる複製後も古いUUIDを返し続けるが、実際には正しく書き換わっているので混乱しない事。自分はこれに気づかずgrub.confのrootfs指定のUUIDを書き換えてしまい起動時にrootfsが見つからずにinitramfsの中で起動停止。initramfs上でgrub.confを書き換える苦行をするはめに。この中ってviどころかedすら使えないのね。適当な場所にrootfsを手動マウントして/mnt/bin/ed使うくらいしか思いつかなかった。/mnt/usr/bin/vim.basicとかは共有ライブラリ周りをうまく手当してやる必要があるので少し面倒なはず。自分はed使ったほうが早いのでviはさっさと諦めた。
おまけ:吸いだしたイメージをKVMで起動
復旧には直接必要なかったんだけど、吸いだしたディスクイメージが起動するかKVM上で試してみたのでメモ。こちらはEFI対応とかブートストラップの手当とか、わりと面倒だった。記憶で書いてるので不正確な部分もあるかも。
まずはEFI対応の方法。参考にしたのはtire.retireさんのKVMでUEFI環境のゲストを作る。CentOS向けの説明なのでOVMF.fdの置き場所が違うんだけど、他はそのまま。UbuntuではOVMF.fdの置き場所は確か/usr/share/qemuで通ったはず。
次に起動向けのEFI環境の準備。HP Stream 11ではSD CardはEFIから見えないため、例のSD Card環境ではEFIシステムパーティション、/bootは内蔵ディスクにありました。この辺を内蔵ディスクに頼らないように手当してやる必要がある。まずEFIシステムパーティションは新規ディスクイメージを作成してマウントさせる事で対処。
% head -c `expr 8 \* 1024 \* 1024` /dev/zero > efi.img
% parted efi.img
(parted) mklabel gpt
(parted) mkpart primary fat32
(parted) q
% sudo kpart -a efi.img
% sudo mkfs.vfat /dev/mappers/loop1p1
% sudo mount /dev/mappers/loop1p1 target
% sudo mount /dev/mmcblk0p1 original
% sudo mkdir target/EFI
% sudo cp -rfp original/EFI/ubuntu target/EFI
まず、grubの設定を正しく読み込むために、target/EFI/ubuntu/grub.cfgの最初の行、search.fs_uuidに書かれているUUIDを書き換える必要がある。これはblkid /dev/mappers/loop0p2(吸いだしたイメージのrootfsパーティション)の値を使えば良い。
で、次は/bootの対処。/dev/mappers/loop0p2の/bootは空になっているので、内蔵ディスクの該当パーティションからコピー。
% sudo mount /dev/mmcblk0p5 boot
% sudo cp -rfp boot/* target/boot/
target/boot/grub.cfgには最低限の修正を適用。Ubuntuの起動エントリでlinuxとinitrdの項目が/vmlinuz-...と/initrd.imd-...というルート直下のパスになっており、linuxにはroot=UUID=でmmcblk0p5を指定している箇所があるはず。このroot=UUID=を初段で指定したUUIDと同じ/dev/mappers/loop0p2のIDに書き換え、/vmlinuz-...、/initrd-...を/boot/vmlinuz-...等に書き換えれば準備完了。
KVMから起動するとEFI Shellに落ちる。作成したEFIのディスクがFS0として見えたので、
Shell> fs0:
fs0:\> cd EFI\ubuntu
fs0:\EFI\ubuntu\> shimx64.efi
でgrubのメニューが出るはず。まぁ、何か間違っててメニュー読み込み失敗したらgrubの対話モードからconfig file (hd0,gpt2)/boot/grub/grub.cnf とかで読めるはずなので、tabキーと友達になりながらgrub.cnfを探して読んでみてください。僕はこの段階でbootが空になってる事に気づいて、bootディレクトリのコピーとかUUIDの書き換えが必要なのを思い出しました。一度起動しちゃえばupdate-grub、grub-installを走らせれば、この辺の修正は綺麗になるので。まぁ、適当に。
2015年6月15日月曜日
2015年2月〜5月の読書
プライベートで忙しくなった関係でぐっと読書数が落ちてしまいました。2月から5月にかけて、3冊、9冊、3冊、8冊の計23冊。
政治・経済
1月に続けて池上さんの知らないと恥をかく世界の大問題シリーズ2、3。やっぱり面白い。一部では分かりやすく説明するために、無理やり身近な出来事に比喩してる部分もあって、そこまでは必要無いんじゃないかなぁ、とも思える部分はあった。重要なトピックはシリーズ中にも繰り返し出てくるのでわりと記憶に残ります。しかし、世界ってのは全然平和なんかじゃないんだな、と実感します。あと、ギリシャ問題とか見るとゴールドマンサックスがいかに酷い会社なのかわかる。
続けて藤沢数希さんの2冊。この著者、経済の本は読んでいて手応えがあったので、試しに別の分野も読んでみた。まずは反原発の不都合な真実。やはり文章が面白く、理系ということもありデータがしっかりしていて読んでいて安心。例の震災であれだけの事故を起こしたとは言え、冷静に分析すれば他のエネルギーよりも何桁も安全ですよ、という主張。池上さんの本の内容とも被ってくるんだけど、石油の購入ってのは思っている以上に血生臭い話で。採掘に関して人が死にまくってるのもそうなんですが、普通に米軍の第五艦隊の牽制あっての取り引きなんですね。そもそも原発にしたって、それを持つ事自体が軍事的な牽制の意味合いもあったりする。エネルギーって政治なしには語れないのですね。現実的な解になりうる選択としてはメタンハイドレートあたりに期待できるのかもしれませんけど、環境には優しくないですからね。それに近隣諸国との火種にもなりかねない。クリーンなエネルギーとしては地熱とか日本に持ってこいだとは思うんですが。まぁ、原子力村からの圧力はあるのかも。外資系金融の終わりはまぁ、読み物として。どういう仕組みで自分の給料が決まるのか、改めて冷静な視点から考えられるかも。決して実力に比例するものじゃないんですね。
最後は会社が消えた日。これはもう日本のメーカーに残っている人は絶対に読んでおくべき本。ゴールドマンサックスによって会社が食い荒らされていく様子がまざまざと。この本読んだ後だとRolandのMBO問題なんかもちょっと見方かわってくるなぁ。まぁ、家族経営でダメな経営してたという事実は否定しようがないみたいだけど。あと井植会長の話で、日本は仕組み的に創業者が資本家になる事が難しい。だから会社に同族経営としてしがみつくしかないんだ、という話は当事者の話としては説得力があった。あとは会社内の見苦しい潰し合いとか。サラリーマン上がりで経営に参加させてくと、どこも似たり寄ったりだなぁ、と思いました。残念。
という事で、なんかバラバラに読んでた本が、なんとなく線で繋がるようになってきた気がする。
SF
ここのところ小説は1巻だけ流し読みってパタンが多かったんだけど、珍しくシリーズを追って読み進めてます。巻によってまったく違う内容・文体だったりして著者の多彩な才能に驚きました。特に1巻上下読んでから2巻に移った時は、本を間違えたかと思ったくらい。ファンタジーな舞台からいきなり現代の東京に舞台が変わり、軽い男の話から突然パンデミックについての生々しい話に。共通となるのは主人公が医師という点だけ。と言っても、そこがシリーズの歴史を紐解く上でキーワードになるわけで。最後の方になってようやく2巻が物語の始まりを描いたものだとわかります。3巻はまた1巻のノリに戻って。女装の美少年を中心としたアンチオックスの話。で4巻はまるっきりの官能小説(笑)。ハニカム創世記です。電車で読むのはちょっと気が引けた。
読み物
ホリエモンの刑務所なう。A3とこれを読めば刑務所の面会の様子は双方の視点からなんとなくわかるようになる(笑)。しかし、刑務所の経営改善とか、医療の経営改善以上に起こりそうにない事だよなぁ。
せいめいのはなしは分子生物学の専門家である福岡伸一先生が、各方面の知識人と対談し、それをまとめた本。忙しい人は最後の章にまとめがあります。養老先生との昆虫談話が一番記憶に残っているかな。動的平衡とか擬態とか、進化論とかいう単純な言葉では割り切れない味わい深さが生命にはあって面白いな、と思いました。福岡先生のほうは、またどこかで読もうと思います。たぶん動的平衡の本あたり。
喪失と再起の物語は東北の震災を機に書かれた日本人に関する論説。読んで改めて僕らは第二次大戦とその後の戦後復興について何も知らされていないんだな、と思いました。なんとなく現代史は大学受験の中でもうやむやにされちゃうんですよね。もしかしたら意図的なカリキュラムなのかな。戦後復興とか日本人が頑張ったというよりは当時のトップがひねり出した奇策がGHQの裏をかいて功をそうしたみたいな感じに思える。一方で経産省はこの時の成功体験を根拠に自分たちのコントロールで高度経済成長をもう一度、とか思ってるのかな。黒船対策とかは一消費者としても本当にやめてほしいと思う。もはや日本の製造業は農業と同じ感じで。本当に守るべきなの?というところまで来てしまった感はある。
2015年6月12日金曜日
ライブの告知
久々のライブです。Cri☆siSさんの後ろで演奏させてもらったのが2008年で、この年を最後にライブハウスでの演奏はしてない気がします、僕の記憶が確かなら。会社内のイベントではパーティー会場とかニコファーレでボチボチ演奏してはいたんですけどね。で、活動再開だーっと思った矢先に3人目の子供が出来たので……たぶん一時的な復活に終わる気がしていますよ。まぁ、ともかく告知です。
Magical Girls Fes!!3!! @ 2015年7月5日(日)高田馬場CLUB PHASE
女の子イベントですが、バックバンドとして参加します。300人のキャパがある箱で開催される結構大きめなイベントですね。東京女子流のコピーでキーボード担当。Rolandの音源を限界まで駆使して仕込んでます。でも、生演奏を重視したかったのでシーケンスは未使用。オーガニックな味をお楽しみください。
闇の大感謝祭 @ 2015年8月8日(土)浅草KURAWOOD
こっちも300人弱のキャパがある箱。ライブハウス内でおでん、たこ焼きを売ってたりとか、お祭り騒ぎのイベント。今から演奏後に呑んだくれるのが楽しみで仕方がない。
演奏曲ですが、クラウドと言えば雲、雲と言えば八雲。そんなわけでTAKADA BANDでございます。昔から大好きだったんですが、いざ演奏してみるとドフュージョンなキメばかりで変な汗がダラダラと……。こちらはYAMAHAの音源で90年代サウンドを余すところなく再現。再現度という意味ではあらゆる点で海老反り級を目指しております。
とまぁ、そんなところでしょうか。せっかく久々のステージなのでニコファーレで培ったVJ技術を使いまわそうかと思っています。きっとシンセの演奏に合わせて派手に動く映像が僕の横でチカチカしていることでしょう。Powered by Web GL + Web MIDI on Chrome。
(追記)ニコニコに上がってるこの辺の動画がわりと最後の演奏かも。
(追記)ニコニコに上がってるこの辺の動画がわりと最後の演奏かも。
登録:
投稿 (Atom)
