2018年9月15日土曜日

SwissMicros DM15Lのfirmware upgrade (v27)

DM15Lのfirmare v27が公開されていたのでupgradeした。

Upgradeの手順については過去記事 (https://typeinf-memo.blogspot.com/2016/07/swissmicros-dm-15lfirmware-upgrade.html)を参照されたい。

2018年7月16日月曜日

repositoryのprotocol指定が間違っているとhg pullが失敗する

当たり前と言えば当たり前のtitleなのだが。これまでhttpでokだった場合でも、httpsへの移行が進んでいるのだなと。


Mozilla FirefoxなどのsoftwareはMercurialで管理されている。

Firefoxの最新版 (mozilla-central)を取得しようとした所、失敗した:

% hg pull -u
pulling from http://hg.mozilla.org/mozilla-central/
abort: error: Connection reset by peer

もしかしたらrepositoryの場所が移動したり、serverが死んだりしているのかと確認してみたが、普通に生きている。


ふと、protocolがhttpでなくhttpsであると気付きこれを修正してみた。

% vim .hg/hgrc
# example repository config (see 'hg help config' for more info)
[paths]
default = https://hg.mozilla.org/mozilla-central/

正常にpullできるようになった。


2018年7月14日土曜日

VirtualBoxのkernel moduleをdkmsでrebuildする

*** VERR_LDRELF_RELOCATION_NOT_SUPPORTED への対応 ***

2018-07-14現在の情報: Debian unstableでVirtualBox (OSE)を利用している場合、最新版5.2.14-dfsg-4ではerrorが再発してVMを実行できない。5.2.14-dsfg-3か、testing或いはstable版を利用されたい。

以前のunstableのpackageはsnapshot.debian.orgなどから取得可能。

cf. [#902897 - virtualbox: fails to start vm (VERR_LDRELF_RELOCATION_NOT_SUPPORTED) - Debian Bug report logs](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=902897)

2018-07-16 update: 5.2.14-dfsg-5で修正された模様。

2018-07-17 update: 5.2.14-dfsg-7で(ようやく)修正された模様。


dkmsを手動で


自前でbuildしたkernelをinstallした後、VirtualBoxのkernel object (kernel module)がerrorを吐いてloadできなくなったので、手動でkernel moduleをrebuildした。通常はdkmsでkernel moduleをinstallしていれば、packageやkernelのupgradeに伴い自動でrebuildしてくれるので必要ないのだが。

手順


dkms commandを実行する際にmodule nameとかversion numberとかが必要なので、status subcommandで確認しておく。

% sudo dkms status
virtualbox, 5.2.14, 4.17.6, x86_64: installed

man dkmsを見てみるとautoinstallとかそれっぽいsubcommandがあるのだが、実行してみてもrebuildされなかったので、一旦moduleを削除してやり直してみる:

% sudo dkms remove virtualbox/5.2.14 -k 4.17.6

改めてaddし直す:

% sudo dkms add virtualbox/5.2.14 -k 4.17.6

この時点でmoduleは登録されているが、実際のbuildは行われていない。autoinstall subcommandを発行してrebuildさせてみる:

% sudo dkms autoinstall -k 4.17.6

moduleのbuildが終わるとVirtualBoxのkernel moduleがloadされるはずだが、一応serviceでrestartをかける:

% sudo service virtualbox restart


2018年6月16日土曜日

Windows 10 version 1709 → version 1803へupgrade

遂にupdateが降ってきたので適用した。ちなみにWindows 10 Home。

1709のend of service (EOS)自体は2019-04-09まで (cf. https://support.microsoft.com/ja-jp/help/13853/windows-lifecycle-fact-sheet)なのでそれまでにupdateしておけば問題ないと思うが、security関連のpatchが降ってくるかどうかはよく分からない。

例によってあちらこちらで不具合の報告がなされているので不安だったし、Windows PCが使えなくなる時間がそれなりにあるし、一通り設定を見直したり動作確認したりする必要があるしで面倒なことこの上ない。個人的にはWindows PCはゲームをするためにしか使わないのでまだ良いが、これで仕事用とかだと恐しくなる。

取り敢えずやったことをざっと挙げていくと:

* Edgeが犯人かは分からないがlogin後に不要なshortcuts (yahooとか)が作られたので削除
* 「設定」の中にあるものを全部見て不要な物を片っ端から切る (カメラとかマイクのアクセスとか、Timelineの収集とか)
* Spybot Anti-Beaconを入れてtelemetryを全部切る
* 不要なAppsの削除 (特にメニューから消せないやつ) → PowerShellを使って消す
* MS-IMEの「A」とか「あ」とか表示されるが目障りなので消す → メニューから、及びレジストリをいじって消す
* 気休め程度にディスクの最適化 (C:)
* RDPWrapper libraryは入れ直したら動いた (v1.6.2から1803に対応しているらしい)

このあたりのwebsitesが参考になると思う:

* [How to turn off the Timeline and your activity history, in Windows 10 | Digital Citizen](https://www.digitalcitizen.life/how-disable-timeline-activity-history-windows)
* [Windows10標準アプリを削除、再インストールする方法 | Windows10 FAQ](http://windowsfaq.net/settings/delete-application/)
* [Windows10 で画面中央に「あ」「A」と表示されるものを消したい - すなばいじり](http://psn.hatenablog.jp/entry/2017/04/18/090001)

あとは様子見。10日以内であれば1709に戻せるという話だったはず。

SwissMicros DM42のfirmware update (v3.5 → v3.7)

*** 更新履歴 ***

firmware v3.7〜v3.10ではUSB cableを接続した際に一部の個体でfreezeするbugがあったがv3.11で解消された。それ以降のfirmwareへの更新を推奨する。

cf. https://typeinf-memo.blogspot.com/2018/10/swissmicros-dm42firmwarev311usbfreeze.html ※v3.11へのupgradeについて

USB cableを接続した場合freezeするbugに遭遇している場合は、裏蓋を開けてPGM buttonを露出すればbootloader modeに入れるので、そこからv3.11以上のfirmwareにupgradeされたい。

cf. https://typeinf-memo.blogspot.com/2018/09/swissmicros-dm42usbtrouble.html ※裏蓋を開いてPGM buttonでbootloader modeにする手順

2018-09-15現在、v3.7以上のfirmwareにupgradeした場合、稀にDM42にUSB cableを接続するとerror messageが出てfreezeする個体がある。最新版であるv3.9.1でも解決されていないので、不幸にもaffectした場合は裏蓋を開けてRESET+PGMのbuttonsを押してbootloader modeに入り、dfu-utilからv3.5に戻すなどの対処をする必要がある。

cf. https://typeinf-memo.blogspot.com/2018/09/swissmicros-dm42usbtrouble.html

*** 更新履歴ここまで ***


SwissMicros DM42のfirmwareがupdateされていた (v3.5 → v3.7)のでupgradeしてみた。

なお、documentにもhistory.htmlにも、v3.7から2つに分割されたfirmwareの正しいupdateの方法が書かれていない。もしかするとまだbetaとかの扱いなのかも知れないので注意。
※公式documentは更新済み。


準備


用意するもの


* Linux PC (WindowsやMacでも可)
* SwissMicros DM42
* USB A-microUSB B cable
* 細いピン

firmware filesの準備


DM42のfirmwareが置かれているpageから2つのfilesをdownloadする (2018-06-15現在):

* DMCP_flash_3.7.bin
* DM42-3.7.1.pgm


updateの手順


Linux hostからDM42のfirmwareをupdateするにはdfu-utilを使う方法と、DM42に内蔵されているFAT disk (USB memory)からupdateする方法がある。今回はDM42のFAT diskをPCからUSB memoryとしてmountしfirmware filesを書き込んだ後、DM42単独でfirmware updateする。

DM42のinternal FAT diskにfilesを転送


* ON
* [ ] + [0] (SETUP)
* 3. Activate USB Disk -> [ENTER]
* USB cableでDM42とPCを接続
* DM42のFAT diskをmount eg. sudo mount -o rw,noatime,uid=1000,gid=1000 /dev/sdb /mnt/dm42
* Downloadしておいたfiles 2つを転送 eg. cp -i DMCP_flash_3.7.bin DM42-3.7.1.pgm /mnt/dm42
* umount
* cableを外す
* EXIT

Internal FAT diskからfirmware update


DMCP_flash_3.7.bin


* [ ] + [0] (SETUP)
* 4. System ->
* 2. Enter System Menu
* 1. Flash firmware from FAT
* 電池の消耗を防ぐため (&途中で電源が落ちないように) USB cableを繋ぐよう表示される
* cableを接続するとflashが開始される
* しばらく待つとRESETするよう指示が出るので、裏側のRESET buttonを押す
* EXIT

ここまででDMCP_flash_3.7.binの書き込み終了。

DM42-3.7.1.pgm


* まだFree42が起動する状態ではないので何かしらmessageが表示される
* 3.か4.あたりのprogram infoだったかrun programだったかを選択 (空覚え)
* DM42-3.7.1.pgmを選択
* 書き込みが始まるのでしばらく待つ
* RESETするよう指示が出るので、裏側のRESET buttonを押す
* EXIT

DM42-3.7.1.pgmの書き込み終了。以上で計算機が使えるようになっているはず。

Firmwareのversion check


* [ ] + [0] (SETUP)
* 5. About ->
* DM42の値がv3.5あたりからv3.7.1あたりになっているのを確認する
* EXIT

おつかれさまでした。

2018年6月15日金曜日

watchdogを導入したRaspbianでsudoが使えなくなったのでfork bombでrebootさせた話

Raspberry Pi 3 model BにRaspbian (armv7l)を入れて有線routerとして利用しているが、sudoがsegmentation faultを吐いて使えなくなる状況に陥った。

どうやらsudoのpermissionがおかしくなったことが要因らしいが、理由はどうあれRaspbianでsudoが使えないのは致命的である。普通にinstallして特に設定しない場合、Raspbianではrootとしてloginできない。一般userが必要に応じてsudoする運用が前提だからだ。

こうなると、aptでsystem updateも、rpi-updateでfirmware upgradeも、shutdownもできない。最終手段として強制的に電源を切る (=microUSBのcableを引っこ抜く)ぐらいしか思い付かないが、NAND flashのstorageではあまりやりたくない (HDDでも嫌だが)。

そこで、watchdogをinstallしていることを思い出し、fork bombでsystemをdownさせてrebootさせようと思い付いた。つまり:

* fork bombを発動
* watchdogが発動 → reboot
* boot processでfsckが実行される → filesystemが修復されpermissionが回復
* sudoが使えるようになる (はず)

fork bombにはshell scriptで実行する方法と、Cあたりでprogramを書いて実行する方法がある。今回はshell scriptより速く効きそうなCでprogramを書いて実行した。

#include <unistd.h>

int main(void){
  while(1){
    fork();
  }
}
これをforkbomb.cとして保存し、gcc -o forkbomb forkbomb.cでcompile。実行前に気休めとして一応syncを発行しておく。

./forkbombを実行。systemがfreeze → watchdogによりrebootがかかるのを待つ。

無事rebootし、fsckが実行されたのか、sudoは何事もなく使えるようになった。


2018年6月12日火曜日

ZoLのsplがzfsのrepositoryにmergeされた

ZFSはlicenseの問題でmainline kernelに含まれずout-of-treeなので、Linuxで使いたい場合は大きく2つの選択肢がある:

* ZFS on Linux (ZoL)
* ZFS-FUSE

ZoLがkernel moduleとしてのimplementationで、ZFS-FUSEはuserland (FUSE)でのimplementation。

OSがLinuxでなくて良いならillumos (OpenSolaris)やFreeBSD (TrueOS)などを使う手もある (出所的あるいはlicense的にはこっちの方が素直か?)。

さて、この度、ZoLをsource (git)からbuildする手順が簡単になった。これまではzfsをbuildするにはspl (Solaris porting layer)というSolarisとLinuxの違いを吸収するlayerが必要で、それを別途build & installしなければならかった。

それが先日、splのgit repositoryからautogen.shが削除されていたのでどうしたのかと思いgit logを見てみたら、zfsのrepositoryにmergeされたとあった。今後はsplをgit cloneしてautogen.sh→configure→make→make installという手順が不要になった。