2019年5月24日金曜日

Raspbianで/lib/modules以下のfilesがdisk容量を喰っていた

概要


* Raspbianで/lib/modules以下が肥大していた
* 不要なfilesの削除で8GB → 230MBにダイエット成功
* rpi-updateを頻繁にする人は気をつけよう


本編


Raspberry Pi 3 model Bで32GB (≒29.8GiB)のUSB flash memoryを使っているのだが、妙に使用量が多い気がしていた。DE (GNOMEとかKDEとか)をinstallしている訳でもないのに、30GiBのおおよそ半分程度が消費されている。

経験則に過ぎないが、Debian系distributionをCLI環境のみでinstallした場合は2〜3GB程度が良い所だ。そこにちょっと容量を食うdevelopment関連のpackageとか、gitのrepositoryのcloneとかを入れても5〜6GBぐらいだろう。

最初はBME280で取っているlogが消費しているのかとも思っていたのだが、それらをNASに移動しても容量にほぼ変化がなかった。

% sudo du -hc . | sort -h
...
8.0G /lib/modules
8.1G /lib
13G /
13G total

プログラム開発の格言に「何処で時間を消費しているのか計測しないうちから最適化するな」という意味合いの言葉があるけど正にその通り。思い込みって怖いな。

さて、/lib/modules以下に何があるのか?

% ls /lib/modules
...
drwxr-xr-x 3 root root 4.0K May 18 20:54 4.19.42+/
drwxr-xr-x 3 root root 4.0K May 18 20:54 4.19.42-v7+/

とまぁ、こんな感じで過去から現在最新版に至るまでのkernel modulesを収めたdirectoriesがある。古いのは4.9.Xとか4.14.Xなんてのがずらりと並んでいた。

1つのversionに対応するpairで100MiBちょっとあるので、うっかり消し忘れていると膨大な領域が消費され続ける (今回は8Gぐらいだったので、80弱のversionが残っていたようだ)。

なお、最新版と1つ前 (念のため)だけ残して全てrmした後は:

% du -hc /lib/modules
...
229M /lib/modules
229M total

全体で見ても:

% df -h
...
/dev/root        29G  4.5G   23G  17% /
...

rpi-updateでよくupgradeを行う方は注意されたい。

2019年5月18日土曜日

grepでnull character (\x00)を検索する

Raspberry Pi 3で気温・湿度・気圧センサからのデータを記録しているCSVに時折null byteが混じってCSV readerがerrorを吐くので、それを効率的に発見するために調べてみた。せめてPythonのCSV moduleが行番号とか知らせてくれれば良いのに……。

% grep -Pa '\x00' FILE

Optionsの解説:

* -P → patternをPCRE (Perl compatible regular expression)として解釈する
* -a → 指定されたfileをtext fileと見做して処理する

CSV fileが大きいためか-a optionなしだとbinary fileとして該当部分を表示してくれないことがある。

参考にしたURI

cf. [linux - Find files with non-printing characters (null bytes) - Stack Overflow](https://stackoverflow.com/questions/54131197/find-files-with-non-printing-characters-null-bytes)

2019年5月6日月曜日

パスコードでロックされたiPad mini 2をfirmware等の入れ直しで復旧する

これは何?


パスコードロックされた状態のiPad mini 2 (以下、iPad)を、idevicerestoreというtoolで初期化し、Windows 10のiTunesを使ってiOS 12.2にupdate後、新しいApple IDと紐付けた時の記録。

動機と目的


iPad mini 2を譲り受けた。先方で本体内データは削除済みとのことで早速自分のApple IDに紐付けしようとしたが、パスコードを要求されてしまった。先方と相談しながら思い当たるパスコードを入力したのだが結局分からず、最終的に「このiPadは使用不可能」な状態 (=パスコードロック)に陥る。

色々調べてみると、idevicerestoreというtoolでLinux boxからfirmwareなどを書き込んで強制的に初期化&パスコードロック解除できる (勿論内部のデータは消える)と分かったので試してみた。

用意するもの


* Apple iPad mini 2
* USB-A to Lightning cable
* Linux box (w/ Debian GNU/Linux) ※idevicerestoreを利用するためのmachine
* Windows box (w/ Microsoft Windows 10) ※iTunesを利用するためのmachine

手順


idevicerestoreのinstall


Linux boxにidevicerestoreをinstallする

* libusb-devやlibimobiledevice-*あたりをinstallしておく
* idevicerestoreがdependしているlibirecoveryをinstall
* idevicerestoreをinstall

iPadの強制再起動


* Linux boxにiPadを接続する
* iPadをホームボタン+スリープボタン同時長押しで強制再起動する

idevicerestoreでiPadにfirmwareを書き込む


* sudo idevicerestore -l -n ※iPadを認識するかを確認する
* sudo idevicerestore -l -x ※basebandをupdateしない (-x)

iTunesでiPadのiOSをupdateする


iPad単独でもiOSをupdateできるはず、もしくはiTunesでなくてもupdateできるらしいが今回は試していないので割愛。

* Windows 10 machineにApple iTunesをinstallする
* iTunesを立ち上げる
* iPadをWindows boxに接続する
* iTunesがiPadを認識したかを確認し、updateなどに関するwindowが出るのを待つ
* 必要に応じてupdateなどを行う

補遺


* iPadのデータを消したくない場合は別の方法を取る必要がある
* 有料のツールを使うのも手。3000〜4000円ぐらいからあるので、急ぎで確実に行いたいならばそちらを使うのも良いだろう

参照したwebsites


基礎知識について


* [Show UDID of iPhone Using awk, cut, grep, lsusb, sed](https://www.commandlinefu.com/commands/view/9632/show-udid-of-iphone)
* [ECID - The iPhone Wiki](https://www.theiphonewiki.com/wiki/ECID)

Softwareのrepositories


* [GitHub - libimobiledevice/idevicerestore: Restore/upgrade firmware of iOS devices](https://github.com/libimobiledevice/idevicerestore)
* [GitHub - libimobiledevice/libirecovery: Library and utility to talk to iBoot/iBSS via USB on Mac OS X, Windows, and Linux](https://github.com/libimobiledevice/libirecovery)

その他


* [Device never fully restores · Issue #124 · libimobiledevice/idevicerestore · GitHub](https://github.com/libimobiledevice/idevicerestore/issues/124) ※-x option


2019年5月5日日曜日

Firefoxのaddonが証明書の期限切れで使えなくなった問題に対するworkaround

5/5現在、徐々に回復してきているらしいが、引き続き自分の環境はaddonがinstallできない状態は継続しているのでそれに対するworkaroundを。

about:config → xpinstall.signature.required を false にする

このworkaroundにより:

* 起動中のFxで突然無効になったaddonが復活する
* 新たにaddonを入れ直す時に「壊れているのでinstallできない」問題が解決

本質的にはsignatureが正しいものに更新されるのを待つ。修正されたら再びxpinstall.signature.requiredをtrueに戻す方が良いだろう。

なお、動作を確認したのは:

* Mozilla Firefox 68.0a1 (Nightly) @Linux
* Mozilla Firefox 60.6.1esr (ESR) @Linux

という、多数派ではない環境なので留意されたい。