LinuxのPulseAudioのエコーキャンセルモジュールがいい感じ

皆さんオンラインミーティングとかやってますか?私は急にオンラインミーティングに参加する頻度が増えました.
これまでマイクはほとんど使っていなかったのでマイクは気にしていなかったのですが気になるようになりました.

Linuxで使えるリアルタイムノイズキャンセルソフトウェアはあるのだろうかと少し調べるとPulseAudioのモジュールで module-echo-cancel というものがあるのを知りました.

とりあえず規定値の設定は簡単で,/etc/pulse/default.pa`というファイルに`load-module module-echo-cancel`を書いてあげてPulseAudioの再起動でokです.
PulseAudioの再起動は手元の環境では `pulseaudio -k
で停止してすぐ自動起動してきました.

$ echo "load-module module-echo-cancel" | sudo tee -a /etc/pulse/default.pa
$ pulseaudio -k
$ ps ux | grep pulseaudio | grep -v grep || pulseaudio --daemonize=no
Note
追記)

/etc/pulse/default.pa はシステムワイドな設定でroot権限も必要なので自分しか使わないなら ~/.config/pulse/default.pa を使ったほうがいいですね.
そしてデーモンの再起動は上の方法だと乱暴なのでこんな感じかな

$ systemctl --user restart pulseaudio.service

これでマイクを利用したいアプリでオーディオデバイスをecho cancelのものに切り替えればOKです.

discord audio
zoom audio

という感じで簡単に設定できました.
この設定有効なのだろうか?とpavucontrolで見てみました.

以下は特に何も話していないときの様子です.上がマイク直のデバイス,下がecho cancel module のされたデバイスの状態です.

pulseaudio echo cancel

バーの動き的にはなにか効いてる感じです.

Discordで音声チャット中に切り替えて聴き比べてもらうと明らかに良くなってるとのこと.
てことでノイズ源が回りにある人は設定がお手軽なのでおすすめです.

ちなみにKrispというノイズキャンセルアプリケーションがあって評判がいいようです.しかし残念ながらLinuxは対応していません(◞‸◟)
でもChrome拡張機能があるのでChromeのウェブアプリでは利用できそうです.

HDDデータ復旧時にFAT32の制限に嵌ったメモ

2.5インチハードディスクをPCに接続しても認識しなくなったとのことで読めるようにならないか相談を受けました.

元々NotePCに内蔵されていたものをUSB接続の箱に入れて使っていたとのこと.
型番は TOSHIBA MK4058GSX で 約400GB のもの.
USB エンクロージャーは USB3.0 接続で USB A – micro B 3.0 久々に見ました.

復元したデータは一緒に渡された 3.5インチ外付けハードディスクに入れてほしいとのこと.
確認するとFAT32です.権限などは落ちてしまうよなーと確認するとファイルが救えさえすればいいとのこと.

まあディスク認識が出来れば吸い出してloopback mountしてコピーと言う感じかなと思っていたのですがFAT32のおかげで結構面倒でした.

今回は Debian sid amd64 環境でHDDから GNU ddrescue でイメージを吸い出してマウントしてからコピーすることにしました.

Linux環境がなければ SystemRescueCd とかをUSBメモリ起動したりするのがお手軽だと思います.

PCに接続するとキュルキュルカッコンといった異音がします.久々にこういう音をするハードディスクを触りました.

PCに接続して少し時間は掛かりましたが /dev/sdb として認識しました.

認識したところで GNU ddrescue でディスクイメージを吸い出してみます.rateがすごく変動して残り時間が数時間〜数十日で安定しません.幸い1日と少しで最後まで走りきって bad-sector/bad area も見つからなかったので恐らくデータの欠落もなかったようです.

ddrescue
$ time sudo ddrescue -n -v /dev/sdb ./disk.img ./disk.img.log
GNU ddrescue 1.23
About to copy 400088 MBytes from '/dev/sdb' to 'disk.img'
    Starting positions: infile = 0 B,  outfile = 0 B
    Copy block size: 128 sectors       Initial skip size: 7936 sectors
Sector size: 512 Bytes

Press Ctrl-C to interrupt
     ipos:  400088 MB, non-trimmed:        0 B,  current rate:  16015 kB/s
     opos:  400088 MB, non-scraped:        0 B,  average rate:   4225 kB/s
non-tried:        0 B,  bad-sector:        0 B,    error rate:       0 B/s
  rescued:  400088 MB,   bad areas:        0,        run time:  1d  2h 17m
pct rescued:  100.00%, read errors:        0,  remaining time:         n/a
                              time since last successful read:         n/a
Finished

real    1578m2.468s
user    0m35.744s
sys     10m24.384s

吸い出したディスクイメージのパーティションを見るとこんな感じで元PCのリカバリ領域なども残っているようです.

disk partition
$ fdisk -l ./disk.img
Disk ./disk.img: 372.63 GiB, 400088457216 bytes, 781422768 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xcd22cd22

Device      Boot     Start       End   Sectors   Size Id Type
./disk.img1           2048   3074047   3072000   1.5G 27 Hidden NTFS WinRE
./disk.img2 *      3074048 653834239 650760192 310.3G  7 HPFS/NTFS/exFAT
./disk.img3      653834240 758691839 104857600    50G  f W95 Ext'd (LBA)
./disk.img4      758691840 781422591  22730752  10.9G 17 Hidden HPFS/NTFS
./disk.img5      653836288 758691839 104855552    50G  7 HPFS/NTFS/exFAT

Partition table entries are not in disk order.

mount コマンドの offset option で mount することも出来ますが面倒なので kpartx コマンドでデバイスマッピングをしておきます.
これで出来たループバックデバイスを指定してマウントできます.

デバイスマッピング
$ sudo kpartx -av ./disk.img
add map loop8p1 (253:3): 0 3072000 linear 7:8 2048
add map loop8p2 (253:4): 0 650760192 linear 7:8 3074048
add map loop8p3 (253:5): 0 2 linear 7:8 653834240
add map loop8p4 (253:6): 0 22730752 linear 7:8 758691840
add map loop8p5 (253:7): 0 104855552 linear 7:8 653836288
1つ目のパーティションを読み込み専用で /mnt/p1 にマウント
$ sudo mkdir -p /mnt/p1
$ sudo mount -o ro,loop /dev/mapper/loop8p1 /mnt/p1

rsync を使ってコピー.(--modify-window=2 はFAT32対策)

$ rsync -avvc --modify-window=2 --log-file=rsync.log コピー元 コピー先

数時間後.ログが止まってるけど大きいファイル転送中なのかな?
半日後……未だ終わらない.ログ変わってないような?メモしておく.
1日後.画面に変化がないので固まってる!

Ctrl+Cで中断.
再度実行すると同じところで止まる.

なんでだろう?といろいろ試すと転送先の該当ディレクトリにファイルを作成しようとするとエラーとなることがわかりました.

FAT32の問題で1ディレクトリ内のファイル数制限に引っかかったよう.

短いファイル名長で沢山ファイルを作ると65535個まで
$ n=1;while :;do if ! touch ${n};then echo ${n} ;break;fi ;n=$(( n + 1 ));done
touch: cannot touch '65534': No space left on device
65534
$ ls -1A|wc -l
65533
$ ls -1a|wc -l
65535
255文字のファイル名長だと3123個まで
$ n=1;while :;do if ! touch `printf %0255d ${n}`;then echo ${n} ;break;fi ;n=$(( n + 1 ));done
touch: cannot touch '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003121': No space left on device
3121
$ ls -lA|wc -l
3121
$ ls -la|wc -l
3123

--exclude '除外' でとりあえずあとで対応.と --timeout=30 オプションを付けてエラー時に終了するようにして再度実行.

$ rsync -avvc --modify-window=2 --timeout=30 --log-file=rsync.log --exclude '除外' コピー元 コピー先

何度か同じエラーがでたので都度除外リストを伸ばしていく><

終わった後に該当ディレクトリはzipアーカイブ化した.4GBを超えるものについてはzipのSplit archives機能(zip 3.0以上)を利用.

$ zip -9rs 3800m /fat32/hoge.zip source_dir

同様にパーティーション2つ目以降もコピーしていく.

書き出しHDDの空き容量に余裕があったので吸い出したRAW Disk イメージもコピーしておく.
4GB制限があるのでsplitで分割してコピー.

$ split -b 4000000000 ./disk.img

これでとりあえず簡単なドキュメントと一緒に渡して終わりにしました.
その後返信ないけど返信がないってことは多分大丈夫なのかな?

てことでディスクはFAT32 は避けたほうがいいねという.デジカメなどでFAT32にしか対応していないものは仕方がないですが,PCに繋ぐ外付けHDDなどはNTFSやexFatなどにしたら今回のようなトラブルに会いにくいと思います.(Linuxでも読み書きできる)

Bluetooth ヘッドセットが A2DP に切り替えられなくて困る

最近Bluetooth ヘッドセットで A2DP に切り替えが出来なくなっていました.オーディオプロファイルを A2DP にしようとすると変更に失敗します.

20200410 03:04:39 1847144

20200410 03:04:39 1847144 2

有線のヘッドホン(セリア製100円!)で使っていたのですが頭に合わなかったり不自由なので調べることに.
以下のページを見つけました.

どうも PulseAudio の自動切り替えがうまく行っていないようでこれを無効にすることで直りました.

具体的な設定は, /etc/pulse/default.pa ファイルの load-module module-bluetooth-policyauto_switch=false というオプションを付けでデーモンの再起動です.

/etc/pulse/default.pa を修正.
$ sudo git -C /etc diff /etc/pulse/default.pa
diff --git a/pulse/default.pa b/pulse/default.pa
index f670be0..494c1ce 100644
--- a/pulse/default.pa
+++ b/pulse/default.pa
@@ -64,7 +64,7 @@ load-module module-jackdbus-detect channels=2

 ### Automatically load driver modules for Bluetooth hardware
 .ifexists module-bluetooth-policy.so
-load-module module-bluetooth-policy
+load-module module-bluetooth-policy auto_switch=false
 .endif

 .ifexists module-bluetooth-discover.so
daemonを再起動(Pulseaudioは自動復帰した)
$ pulseaudio -k
$ sudo service bluetooth restart

この後ヘッドセットを接続し直すことでA2DPが使えるようになりました.

今使っているヘッドセットは Aukey EP-B26 で長時間使えていたのが良かったのですが,バッテリーがへたってしまっています.今はUSBケーブルで給電しながら使っています.有線なんだけど細いケーブル(100円ショップの巻取りUSB microBの中の線だけにしたもの)で小さなモバイルバッテリーをポケットに入れて使うと結構自由度高い感じです.

でも出来れば新調したいところ.同じものはもう売ってないようなのでこのへんとかかな?

AfterShokz も気になってるけどちょっとお高いですね.

環境
$ dpkg-query -W pulseaudio* bluez* blueman
blueman 2.1.2-1
bluez   5.53-0ubuntu2
bluez-alsa
bluez-audio
bluez-cups      5.53-0ubuntu2
bluez-gnome
bluez-input
bluez-network
bluez-obexd     5.53-0ubuntu2
bluez-serial
bluez-utils
pulseaudio      1:13.99.1-1ubuntu1
pulseaudio-module-bluetooth     1:13.99.1-1ubuntu1
pulseaudio-utils        1:13.99.1-1ubuntu1
$ lsb_release -dr
Description:    Ubuntu Focal Fossa (development branch)
Release:        20.04
$ uname -m
x86_64
$ lsusb -d 0a5c:217f
Bus 001 Device 016: ID 0a5c:217f Broadcom Corp. BCM2045B (BDC-2.1)
$ lspci | grep -i audio
00:1b.0 Audio device: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio (rev 06)

Zoom のLinuxクライアントをFirejail経由で利用する

最近みんなよく使うようになった Zoom ですがみんなが使うようになっていろいろとプライバシーやセキュリティの問題が表層化してきている感じです.

Linux関連だとパッケージング周りがあまりよろしくない感じです(◞‸◟)

それ以外にもLinux版は利用者が少なく見つかっていないだけで問題がありそうな気がします.

とりあえず手元の環境ではpkg版は削除してなるべくウェブブラウザで利用をしておこうかと思っています.Linux版ChromiumではUA偽装が必要という記事も見かけましたが,

2020-04-03 に Version 80.0.3987.162 (Developer Build) built on Debian bullseye/sid, running on Debian bullseye/sid (64-bit) で試したところUA偽装せずに使えました.

$ chromium --temp-profile https://zoom.us/……

でもリソースはデスクトップ版より余計に食いそうです.デスクトップ版にはbinary tar ball もあるのでそれならバッケージングの問題は回避できると思います.
これを試してみます.

少し手間な気がしますが,pkg版の方もリポジトリはないのでアップデート毎にインストールし直しが必要なのであまり手間は代わりません.

ダウンロードしたアーカイブを /opt 以下に展開します.

$ tar tvf ~/Downloads/zoom_x86_64.tar.xz
$ tar xvf ~/Downloads/zoom_x86_64.tar.xz -C /opt

これで,` /opt/zoom/zoom` で起動しようとすると Segmentation fault になってしまいます.zoom.sh かな?と思ったけど中を見ると debug用のようです./opt/zoom/zoomlinux で実行すればokのようです.

次にアプリケーションをサンドボックス内で動かしてセキュリティリスクを軽減できる Firejail 経由で動くか試してみます.

先ずは Firejail を導入します.

$ sudo apt install firejail firejail-profiles

これでとりあえず,firejail /opt/zoom/zoomlinux で Firejail 経由で起動できます :)

$ firejail /opt/zoom/zoomlinux

Firejail の管理下にあるものは firejail --list で確認できます.firejail --tree で pstree のようにプロセスツリーが確認できます.負荷状況は firejail --top で topやvirtop 的な感じで確認できます.

Firejail のプロファイルを確認すると Zoom のものもありました.

$ dpkg -L firejail-profiles | grep zoom
/etc/firejail/zoom.profile

せっかくなのでこれを使います.pkg版のときは zoom という名前で起動するのでそのままでこのプロファイルを使うようですが,zoomlinux で起動すると認識してくれないようなので,zoomlinux 用のプロファイルを用意します.といってもコピーするだけです.

$ mkdir -p ~/.config/firejail
$ cp /etc/firejail/zoom.profile ~/.config/firejail/zoomlinux.profile

/opt/zoom/zoomlinux のようにパスが付いていると認識してくれないので,パスを通して起動します.

$ PATH=/opt/zoom:$PATH firejail zoomlinux
Reading profile /home/matoken/.config/firejail/zoomlinux.profile
  :

若しくは --profile オプションでプロファイルを指定します.(こっちのほうがいいかな?)

$ firejail --profile=zoom /opt/zoom/zoomlinux
Reading profile /etc/firejail/zoom.profile
  :

zoom プロファイル経由で起動できました :)

この状態だとファイルの共有をしようとすると共有するものが何もなかったり,チャットログの保存が出来なかったりします.

Screenshot from 2020 04 09 05 22 18

firejail のプロファイルを編集して許可したいファイルやディレクトリを設定します.以下は ~/Documtnts/Zoom を許可する例です.

$ diff -u /etc/firejail/zoom.profile ~/.config/firejail/zoomlinux.profile
--- /etc/firejail/zoom.profile  2020-01-21 03:53:34.000000000 +0900
+++ /home/matoken/.config/firejail/zoomlinux.profile    2020-04-09 06:35:43.591973723 +0900
@@ -7,6 +7,7 @@

 noblacklist ${HOME}/.config/zoomus.conf
 noblacklist ${HOME}/.zoom
+noblacklist ${HOME}/Documents/Zoom

 include disable-common.inc
 include disable-devel.inc
@@ -16,9 +17,11 @@
 mkdir ${HOME}/.cache/zoom
 mkfile ${HOME}/.config/zoomus.conf
 mkdir ${HOME}/.zoom
+mkdir ${HOME}/Documents/Zoom
 whitelist ${HOME}/.cache/zoom
 whitelist ${HOME}/.config/zoomus.conf
 whitelist ${HOME}/.zoom
+whitelist ${HOME}/Documents/Zoom
 include whitelist-common.inc

 caps.drop all

ということで少しは安全になったかな?
しばらくはこまめに Zoom の情報はアップデートしておこうと思います.

環境
$ /opt/zoom/zoom 2>&1 | grep Version
Linux Client Version is 3.5.382995.0407
$ dpkg-query -W firejail*
firejail        0.9.62-3
firejail-profiles       0.9.62-3
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

ADSLモデムが壊れたのでACアダプタを交換した

スマホにアラートが飛んできました.
自宅サーバが落ちてるとのこと.回線細いので落ちてなくてもたまに来るのですが確認すると実際繋がらない.
ルータを見ると接続中となっているけど外に出られない.再接続しようとすると接続できなくなりました.
機器を見るとADSLモデム-SVIIIの電源が入っていません.電源アダプタを繋ぎ直したりAC側の口を変えても駄目.

WebでADSLモデムの中古を少し探しましたが中古も案外高い.オークションやフリマサイトを見ても4k〜という感じで以前購入したことより値上がりしているようです.
鹿屋に届け物をする用事もあったのでダメ元でハードオフに行ってみました.

IMG 20200305 155518
IMG 20200305 165952

このお店では一度もADSLモデムを見たことがなかったのですがやはり無い.仕方ないので電源ジャンク箱から電気的に合いそうなACアダプタを探してみます.

ADSLモデム-SVIIIの電源アダプタ(WBC 3000MV)の電源は9V 1.5A でプラグはセンターポジティブのもの.

IMG 20200305 024604
IMG 20200305 024633

ぴったりなものは見つかりませんでしたが A が少し大きい 9V 1.6A の物を買ってみました.プラグの形は明らかに違いますが元のものを使うことにします.

IMG 20200305 172117

帰って電源が生きているのを確認しようとしたらテスターの電源が入りません.電池は CR2032 だけど手持ちがない.自転車のフラッシャーに使っているものを入れてみても動かないので壊れているかもしれない…….仕方ないのでジャンク袋LEDから1個出してそれで確認しました.
ケーブルは極性わからないものだったので極性もこれで確認.

IMGP6247

はんだ付けした後熱収縮性チューブも無いのでとりあえず自己融着テープを巻いておきました.見た目はゴツくなったけど絶縁と保護は大丈夫そう.
これで電源を入れてみると復活しました.

IMG 20200306 170152

しばらく使っていますが問題なく使えているようです.
ADSLモデムでPPPoEしようとすると20分以上掛かるし本体も含めそろそろ寿命かもですね…….

環境
  • NTT西日本 フレッツ・ADSL モア40
  • DIX
  • ADSLモデム-SVIII
  • YAMAHA RT57i

Raspberry Pi公式のOS書き込みソフトウェアの Raspberry Pi Imager を少し試す

Instagram の動画がわかりやすいですね.
Raspberry Pi公式のOSイメージ書き込みソフトウェアです.少し試してみました.

導入

ダウンロードページにはWindows/macOSの他 Ubuntu amd64 向けの.debへのリンクしか無いのですが, https://downloads.raspberrypi.org/imager/ にアクセスすると AppImage と .sig がありました.
どちらも amd64 なので他のArchtectureじゃ使えないようです.Raspbianのarmhf版くらいは欲しいですね.

とりあえず Ubuntu 20.04 amd64 では .deb を,Debian sid amd64 では AppImage を試してみました.

debの場合

ダウンロードして署名検証して dpkg -i で導入したのですがpkgが足りなくてエラーが出力されました.足りないパッケージは apt install -f で導入しました.足りなかったパッケージは qml-module-qt-labs-settingslibdleyna-core-1.0-5 でした.(環境により変わるはず)

$ wget https://downloads.raspberrypi.org/imager/imager_amd64.deb https://downloads.raspberrypi.org/imager/imager_amd64.deb.sig
$ gpg --verify ./imager_amd64.deb.sig
gpg: assuming signed data in './imager_amd64.deb'
gpg: Signature made Fri Mar  6 20:49:08 2020 JST
gpg:                using RSA key 54C3DD610D9D1B4AF82A37758738CD6B956F460C
gpg: Good signature from "Raspberry Pi Downloads Signing Key" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 54C3 DD61 0D9D 1B4A F82A  3775 8738 CD6B 956F 460C
$ sudo dpkg -i ./imager_amd64.deb
$ sudo apt install -f
$ sudo rpi-imager
AppImage の場合

ダウンロードして署名検証して実行権を付けるだけです.

$ wget https://downloads.raspberrypi.org/imager/imager_amd64.AppImage https://downloads.raspberrypi.org/imager/imager_amd64.AppImage.sig
$ gpg --verify ./imager_amd64.AppImage.sig
gpg: assuming signed data in './imager_amd64.AppImage'
gpg: Signature made Fri 06 Mar 2020 10:34:08 PM JST
gpg:                using RSA key 54C3DD610D9D1B4AF82A37758738CD6B956F460C
gpg: Good signature from "Raspberry Pi Downloads Signing Key" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 54C3 DD61 0D9D 1B4A F82A  3775 8738 CD6B 956F 460C
$ chmod +x ./imager_amd64.AppImage
$ sudo ./imager_amd64.AppImage
余録).debを展開してとりあえず実行
$ ar x ./imager_amd64.deb
$ tar xf data.tar.xz
$ sudo ./usr/bin/rpi-imager

起動

root権が必要です.一般ユーザでも起動できるのですが,書き込み時にSD cardにアクセスできないエラーが出てしまいます.

20200308 15:03:05 1211621

OS list 取得エラー(一時的なサーバ側の問題)

現在サーバ側でSSLの問題があり大抵以下のようなエラーになります.9回に1回の割合で成功するらしいですが,私は30回ほど試してやっとうまく行きました.数日待てば治るそうなのでしばらく待ってから試す方がいいかもしれません.

20200307 17:03:40 265752

Caleb says:5th Mar 2020 at 3:32 pm
Currently giving me a “Error downloading OS list from Internet” when running it on a raspberry pi 4b

Avatar Gordon Hollingworth says:5th Mar 2020 at 5:05 pm
Yes, that’s because downloads.raspberrypi.org needs its SSL stuff updated. It should happen in the next few days!

Otherwise keep loading it, there’s a 1 in 9 chance you’ll get through to the server that does work!

Gordon

ちなみにOS listが取得できなくても自分でダウンロードしたイメージの書き込みやSD cardの消去は出来ます.

20200307 17:03:24 252063

Imagerの起動

起動するとこんな画面です.「CHOOSE OS」でOSイメージの選択(Raspbian各種とLibreELEC),ユーティリティ,消去,カスタムが選択できます.
「CHOOSE SD CARD」でSD cardやUSBメモリなどが選択できます.

20200307 17:03:12 251909

OSイメージの選択

20200308 15:03:20 1209635
20200308 15:03:02 1210096

SD card等の選択「CHOOSE SD CARD」

この画面を表示してからSD cardやUSBメモリ等を挿入するとリアルタイムに表示さるのでわかりやすいです.内蔵diskは出てきませんが,マウント中のHDDなどは出てくるので間違えないように注意しましょう.
選択できるストレージは1度に1つだけのようです.複数のメディアに書き込む場合は複数回の実行が必要です.

20200308 15:03:27 1210403

OSイメージ書き込み

「WRITE」ボタンを押すことで書き込みが開始されます.SecureEraseを試みてイメージ書き込み,ベリファイを行います.終わるまでしばらく待ちましょう.

20200308 15:03:57 1211527
20200308 15:03:30 1211923
20200308 15:03:30 1215554

自動ダウンロードしたイメージ

deb版の方は ~root/.cache/Raspberry Pi/Imager/lastdownload.cache として 最後に利用したものだけ が残るようです.なので同じイメージであれば2回目はダウンロードせずに済みます.
別のイメージを利用すると上書きされてそのイメージになります.

AppImage は /tmp/runtime-root 以下のようなので再起動したら消えてしまいますね.

QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to ‘/tmp/runtime-root’

rpi-imagerでLibreELEC RPi1を書き込んだ後出来たキャッシュファイルと LibreELEC からダウンロードしたファイルを比較
# sha256sum ./lastdownload.cache
80cd38e0a576f75caaecf511970ae563c5b605896074809643aecfdc91344bcf  ./lastdownload.cache
# wget http://releases.libreelec.tv/LibreELEC-RPi.arm-9.2.0.img.gz
# sha256sum LibreELEC-RPi.arm-9.2.0.img.gz
80cd38e0a576f75caaecf511970ae563c5b605896074809643aecfdc91344bcf  LibreELEC-RPi.arm-9.2.0.img.gz
# diff -as lastdownload.cache LibreELEC-RPi.arm-9.2.0.img.gz
Files lastdownload.cache and LibreELEC-RPi.arm-9.2.0.img.gz are identical

おわりに

てことで応用が聞かない感じなのでRaspberry Piを初めて使う人向けかなーと感じました.LibreELECなんかも同じようなツールを用意しているしOSイメージ書き込みで躓く人が多いのでツールが用意されているのかもしれないですね.
更に面倒だという人はOSイメージ入りのストレージを購入すると良さそうです.

個人的なおすすめは現在だとダウンロードは手動で書き込みには balenaEtcher がいいかなと思います.これもマルチプラットホーム対応で更に同時に複数のストレージに書き込みも可能です.

試した環境

deb版を試したUbuntu環境
$ dpkg-query -W rpi-imager qml-module-qt-labs-settings libdleyna-core-1.0-5
libdleyna-core-1.0-5:amd64
qml-module-qt-labs-settings:amd64       5.12.5-5
rpi-imager      1.0
$ lsb_release -dr
Description:    Ubuntu Focal Fossa (development branch)
Release:        20.04
$ uname -m
x86_64
AppImage版を試したDebian環境
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

Nextcloud 17.0.2 → 18.0.1 upgrade memo

Nextcloudを17.0.2から18.0.1にupgradeしました.

$ sudo -u www-data php ./occ status
  - installed: true
  - version: 18.0.1.3
  - versionstring: 18.0.1
  - edition:

17系のeolは2020-09で18系のeolは2021-01のようです.もうしばらく17でもいいかも.

今回以下のページを参考に updater.phar でupgradeしました.
※実行前に念の為dbバックアップとかしておきましょう.

$ cd $NEXTCLIUDPATH
$ sudo -u www-data php ./updater/updater.phar
Nextcloud Updater - version: v16.0.3-3-ga0c2b25 dirty

Current version is 17.0.2.

Update to Nextcloud 18.0.1 available. (channel: "stable")
Following file will be downloaded automatically: https://download.nextcloud.com/server/releases/nextcloud-18.0.1.zip
Open changelog ↗

Steps that will be executed:
[ ] Check for expected files
[ ] Check for write permissions
[ ] Create backup
[ ] Downloading
[ ] Verify integrityapp:check-code
[ ] Extracting
[ ] Enable maintenance mode
[ ] Replace entry points
[ ] Delete old files
[ ] Move new files in place
[ ] Done

Start update? [y/N] y

Info: Pressing Ctrl-C will finish the currently running step and then stops the updater.

[✔] Check for expected files
[✔] Check for write permissions
[✔] Create backup
[✔] Downloading
[✔] Verify integrity
[✔] Extracting
[✔] Enable maintenance mode
[✔] Replace entry points
[✔] Delete old files
[✔] Move new files in place
[✔] Done

Update of code successful.

Should the "occ upgrade" command be executed? [Y/n] Y
Nextcloud or one of the apps require upgrade - only a limited number of commands are available
You may use your browser or the occ upgrade command to do the upgrade
2020-03-02T19:16:42+00:00 Set log level to debug
2020-03-02T19:16:42+00:00 Repair step: Repair MySQL collation
2020-03-02T19:16:42+00:00 Repair info: All tables already have the correct collation -> nothing to do
2020-03-02T19:16:42+00:00 Repair step: Repair SQLite autoincrement
2020-03-02T19:16:42+00:00 Repair step: Copy data from accounts table when migrating from ownCloud
2020-03-02T19:16:43+00:00 Repair step: Drop account terms table when migrating from ownCloud
2020-03-02T19:16:43+00:00 Updating database schema
2020-03-02T19:16:46+00:00 Updated database
2020-03-02T19:16:46+00:00 Disabled incompatible app: announcementcenter
2020-03-02T19:16:46+00:00 Disabled incompatible app: data_request
2020-03-02T19:16:46+00:00 Disabled incompatible app: external
2020-03-02T19:16:46+00:00 Disabled incompatible app: files_snapshots
2020-03-02T19:16:46+00:00 Disabled incompatible app: fulltextsearch_elasticsearch
2020-03-02T19:16:46+00:00 Disabled incompatible app: gallery
2020-03-02T19:16:46+00:00 Disabled incompatible app: gpxedit
2020-03-02T19:16:46+00:00 Disabled incompatible app: quota_warning
2020-03-02T19:16:46+00:00 Disabled incompatible app: ransomware_protection
2020-03-02T19:16:46+00:00 Disabled incompatible app: sharerenamer
2020-03-02T19:16:46+00:00 Disabled incompatible app: social
2020-03-02T19:16:46+00:00 Disabled incompatible app: socialsharing_diaspora
2020-03-02T19:16:46+00:00 Disabled incompatible app: socialsharing_email
2020-03-02T19:16:46+00:00 Disabled incompatible app: socialsharing_twitter
2020-03-02T19:16:46+00:00 Disabled incompatible app: spreed
2020-03-02T19:16:46+00:00 Updating <accessibility> ...
2020-03-02T19:16:46+00:00 Repair step: Migrate old user config
2020-03-02T19:16:46+00:00 Migrate old user config
2020-03-02T19:16:46+00:00
2020-03-02T19:16:46+00:00  Starting ...
    0/0 [>-]   0%2020-03-02T19:16:46+00:00
 Starting ...
    1/0 [->]   0%2020-03-02T19:16:46+00:00
 Starting ...
    2/0 [-->]   0%2020-03-02T19:16:46+00:00
 Starting ...
    3/0 [--->]   0%2020-03-02T19:16:46+00:00
2020-03-02T19:16:46+00:00 Updated <accessibility> to 1.4.0
2020-03-02T19:16:46+00:00 Updating <federatedfilesharing> ...
2020-03-02T19:16:46+00:00 Updated <federatedfilesharing> to 1.8.0
2020-03-02T19:16:46+00:00 Updating <files_pdfviewer> ...
2020-03-02T19:16:47+00:00 Updated <files_pdfviewer> to 1.7.0
2020-03-02T19:16:47+00:00 Updating <files_rightclick> ...
2020-03-02T19:16:47+00:00 Updated <files_rightclick> to 0.15.2
2020-03-02T19:16:47+00:00 Updating <files_videoplayer> ...
2020-03-02T19:16:47+00:00 Updated <files_videoplayer> to 1.7.0
2020-03-02T19:16:47+00:00 Updating <logreader> ...
2020-03-02T19:16:47+00:00 Updated <logreader> to 2.3.0
2020-03-02T19:16:47+00:00 Updating <password_policy> ...
2020-03-02T19:16:47+00:00 Updated <password_policy> to 1.8.0
2020-03-02T19:16:47+00:00 Updating <privacy> ...
2020-03-02T19:16:48+00:00 Updated <privacy> to 1.2.0
2020-03-02T19:16:48+00:00 Updating <provisioning_api> ...
2020-03-02T19:16:48+00:00 Updated <provisioning_api> to 1.8.0
2020-03-02T19:16:48+00:00 Updating <recommendations> ...
2020-03-02T19:16:48+00:00 Updated <recommendations> to 0.6.0
2020-03-02T19:16:48+00:00 Updating <serverinfo> ...
2020-03-02T19:16:48+00:00 Updated <serverinfo> to 1.8.0
2020-03-02T19:16:48+00:00 Updating <support> ...
2020-03-02T19:16:49+00:00 Updated <support> to 1.1.0
2020-03-02T19:16:49+00:00 Updating <survey_client> ...
2020-03-02T19:16:49+00:00 Updated <survey_client> to 1.6.0
2020-03-02T19:16:49+00:00 Updating <text> ...
2020-03-02T19:16:49+00:00 Updated <text> to 2.0.0
2020-03-02T19:16:49+00:00 Updating <twofactor_backupcodes> ...
2020-03-02T19:16:49+00:00 Repair step: Add background job to check for backup codes
2020-03-02T19:16:49+00:00 Updated <twofactor_backupcodes> to 1.7.0
2020-03-02T19:16:49+00:00 Updating <updatenotification> ...
2020-03-02T19:16:50+00:00 Updated <updatenotification> to 1.8.0
2020-03-02T19:16:50+00:00 Updating <federation> ...
2020-03-02T19:16:50+00:00 Updated <federation> to 1.8.0
2020-03-02T19:16:50+00:00 Updating <lookup_server_connector> ...
2020-03-02T19:16:50+00:00 Updated <lookup_server_connector> to 1.6.0
2020-03-02T19:16:50+00:00 Updating <oauth2> ...
2020-03-02T19:16:50+00:00 Repair step: Update OAuth token expiration times
2020-03-02T19:16:50+00:00 Updated <oauth2> to 1.6.0
2020-03-02T19:16:50+00:00 Updating <files> ...
2020-03-02T19:16:51+00:00 Updated <files> to 1.13.1
2020-03-02T19:16:51+00:00 Updating <activity> ...
2020-03-02T19:16:52+00:00 Updated <activity> to 2.11.0
2020-03-02T19:16:52+00:00 Updating <cloud_federation_api> ...
2020-03-02T19:16:52+00:00 Updated <cloud_federation_api> to 1.1.0
2020-03-02T19:16:52+00:00 Updating <dav> ...
2020-03-02T19:16:52+00:00 Repair step: Fix component of birthday calendars
2020-03-02T19:16:52+00:00 Repair info: 4 birthday calendars updated.
2020-03-02T19:16:52+00:00 Repair step: Regenerating birthday calendars to use new icons and fix old birthday events without year
2020-03-02T19:16:52+00:00 Repair info: Repair step already executed
2020-03-02T19:16:52+00:00 Repair step: Fix broken values of calendar objects
2020-03-02T19:16:52+00:00  Starting ...
    0/0 [>-]   0%2020-03-02T19:16:52+00:00 Fix broken values of calendar objects
2020-03-02T19:16:52+00:00
2020-03-02T19:16:52+00:00
2020-03-02T19:16:52+00:00 Repair step: Registering building of calendar search index as background job
2020-03-02T19:16:52+00:00 Repair info: Repair step already executed
2020-03-02T19:16:52+00:00 Repair step: Registering background jobs to update cache for webcal calendars
2020-03-02T19:16:52+00:00 Repair info: Added 0 background jobs to update webcal calendars
2020-03-02T19:16:52+00:00 Repair step: Registering building of calendar reminder index as background job
2020-03-02T19:16:52+00:00 Repair info: Repair step already executed
2020-03-02T19:16:52+00:00 Repair step: Clean up orphan event and contact data
2020-03-02T19:16:52+00:00 Repair info: 0 events without a calendar have been cleaned up
2020-03-02T19:16:52+00:00 Repair info: 0 properties without an events have been cleaned up
2020-03-02T19:16:52+00:00 Repair info: 0 changes without a calendar have been cleaned up
2020-03-02T19:16:52+00:00 Repair info: 0 cached events without a calendar subscription have been cleaned up
2020-03-02T19:16:52+00:00 Repair info: 0 changes without a calendar subscription have been cleaned up
2020-03-02T19:16:52+00:00 Repair info: 0 contacts without an addressbook have been cleaned up
2020-03-02T19:16:52+00:00 Repair info: 0 properties without a contact have been cleaned up
2020-03-02T19:16:52+00:00 Repair info: 0 changes without an addressbook have been cleaned up
2020-03-02T19:16:52+00:00 Repair step: Remove activity entries of private events
2020-03-02T19:16:53+00:00 Repair info: Removed 0 activity entries
2020-03-02T19:16:53+00:00 Updated <dav> to 1.14.0
2020-03-02T19:16:53+00:00 Updating <encryption> ...
2020-03-02T19:16:53+00:00 Repair step: Write default encryption module configuration to the database
2020-03-02T19:16:53+00:00 Updated <encryption> to 2.6.0
2020-03-02T19:16:53+00:00 Updating <files_external> ...
2020-03-02T19:16:53+00:00 Updated <files_external> to 1.9.0
2020-03-02T19:16:53+00:00 Updating <files_sharing> ...
2020-03-02T19:16:54+00:00 Repair step: Fix the share type of guest shares when migrating from ownCloud
2020-03-02T19:16:54+00:00 Repair step: Copy the share password into the dedicated column
2020-03-02T19:16:54+00:00 Repair step: Set existing shares as accepted
2020-03-02T19:16:54+00:00 Updated <files_sharing> to 1.10.1
2020-03-02T19:16:54+00:00 Updating <files_trashbin> ...
2020-03-02T19:16:54+00:00 Updated <files_trashbin> to 1.8.0
2020-03-02T19:16:54+00:00 Updating <files_versions> ...
2020-03-02T19:16:54+00:00 Updated <files_versions> to 1.11.0
2020-03-02T19:16:54+00:00 Updating <sharebymail> ...
2020-03-02T19:16:55+00:00 Updated <sharebymail> to 1.8.0
2020-03-02T19:16:55+00:00 Updating <workflowengine> ...
2020-03-02T19:16:56+00:00 Repair step: Populating added database structures for workflows
2020-03-02T19:16:56+00:00 Updated <workflowengine> to 2.0.0
2020-03-02T19:16:56+00:00 Updating <admin_audit> ...
2020-03-02T19:16:56+00:00 Updated <admin_audit> to 1.8.0
2020-03-02T19:16:56+00:00 Updating <comments> ...
2020-03-02T19:16:56+00:00 Updated <comments> to 1.8.0
2020-03-02T19:16:56+00:00 Updating <firstrunwizard> ...
2020-03-02T19:16:56+00:00 Updated <firstrunwizard> to 2.7.0
2020-03-02T19:16:56+00:00 Updating <nextcloud_announcements> ...
2020-03-02T19:16:57+00:00 Updated <nextcloud_announcements> to 1.7.0
2020-03-02T19:16:57+00:00 Updating <notifications> ...
2020-03-02T19:16:57+00:00 Updated <notifications> to 2.6.0
2020-03-02T19:16:57+00:00 Updating <systemtags> ...
2020-03-02T19:16:57+00:00 Updated <systemtags> to 1.8.0
2020-03-02T19:16:57+00:00 Updating <theming> ...
2020-03-02T19:16:57+00:00 Updated <theming> to 1.9.0
2020-03-02T19:16:57+00:00 Checking for update of app accessibility in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "accessibility" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app activity in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "activity" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app admin_audit in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "admin_audit" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app bruteforcesettings in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "bruteforcesettings" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app calendar in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "calendar" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app camerarawpreviews in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "camerarawpreviews" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app carnet in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "carnet" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app checksum in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "checksum" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app cloud_federation_api in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "cloud_federation_api" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app cms_pico in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "cms_pico" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app comments in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "comments" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app dav in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "dav" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app encryption in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "encryption" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app federatedfilesharing in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "federatedfilesharing" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app federation in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "federation" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app files in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "files" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app files_antivirus in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "files_antivirus" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app files_external in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "files_external" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app files_markdown in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "files_markdown" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app files_mindmap in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "files_mindmap" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app files_pdfviewer in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "files_pdfviewer" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app files_rightclick in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "files_rightclick" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app files_sharing in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "files_sharing" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app files_trashbin in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "files_trashbin" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app files_versions in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "files_versions" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app files_videoplayer in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "files_videoplayer" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app firstrunwizard in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "firstrunwizard" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app forms in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "forms" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app gpxpod in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "gpxpod" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app logreader in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "logreader" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app lookup_server_connector in appstore
2020-03-02T19:17:02+00:00 Checked for update of app "lookup_server_connector" in appstore
2020-03-02T19:17:02+00:00 Checking for update of app mail in appstore
2020-03-02T19:17:02+00:00 Update app mail from appstore
2020-03-02T19:17:13+00:00 Repair step: Purify and migrate collected mail addresses
2020-03-02T19:17:13+00:00 Purify and migrate collected mail addresses
2020-03-02T19:17:13+00:00
2020-03-02T19:17:13+00:00  Starting ...
    0/0 [>-]   0%2020-03-02T19:17:13+00:00
2020-03-02T19:17:13+00:00 Repair step: Make Mail itinerary extractor executable
2020-03-02T19:17:13+00:00 Repair step: Migrate Mail provisioning config from config.php to the database
2020-03-02T19:17:13+00:00 Repair info: No old config found
2020-03-02T19:17:13+00:00 Repair step: Create or update provisioned Mail accounts
2020-03-02T19:17:13+00:00 Repair info: No Mail provisioning config set
2020-03-02T19:17:13+00:00 Checked for update of app "mail" in appstore
2020-03-02T19:17:13+00:00 Checking for update of app maps in appstore
2020-03-02T19:17:13+00:00 Update app maps from appstore
2020-03-02T19:17:19+00:00 Checked for update of app "maps" in appstore
2020-03-02T19:17:19+00:00 Checking for update of app metadata in appstore
2020-03-02T19:17:19+00:00 Checked for update of app "metadata" in appstore
2020-03-02T19:17:19+00:00 Checking for update of app nextcloud_announcements in appstore
2020-03-02T19:17:19+00:00 Checked for update of app "nextcloud_announcements" in appstore
2020-03-02T19:17:19+00:00 Checking for update of app notes in appstore
2020-03-02T19:17:19+00:00 Checked for update of app "notes" in appstore
2020-03-02T19:17:19+00:00 Checking for update of app notifications in appstore
2020-03-02T19:17:19+00:00 Checked for update of app "notifications" in appstore
2020-03-02T19:17:19+00:00 Checking for update of app oauth2 in appstore
2020-03-02T19:17:19+00:00 Checked for update of app "oauth2" in appstore
2020-03-02T19:17:19+00:00 Checking for update of app password_policy in appstore
2020-03-02T19:17:19+00:00 Checked for update of app "password_policy" in appstore
2020-03-02T19:17:19+00:00 Checking for update of app phonetrack in appstore
2020-03-02T19:17:19+00:00 Checked for update of app "phonetrack" in appstore
2020-03-02T19:17:19+00:00 Checking for update of app polls in appstore
2020-03-02T19:17:19+00:00 Update app polls from appstore
2020-03-02T19:17:22+00:00 Checked for update of app "polls" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app privacy in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "privacy" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app provisioning_api in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "provisioning_api" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app recommendations in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "recommendations" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app registration in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "registration" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app richdocuments in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "richdocuments" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app serverinfo in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "serverinfo" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app settings in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "settings" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app sharebymail in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "sharebymail" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app support in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "support" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app survey_client in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "survey_client" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app systemtags in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "systemtags" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app tasks in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "tasks" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app text in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "text" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app theming in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "theming" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app twofactor_backupcodes in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "twofactor_backupcodes" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app twofactor_totp in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "twofactor_totp" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app updatenotification in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "updatenotification" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app viewer in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "viewer" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app workflowengine in appstore
2020-03-02T19:17:22+00:00 Checked for update of app "workflowengine" in appstore
2020-03-02T19:17:22+00:00 Checking for update of app announcementcenter in appstore
2020-03-02T19:17:22+00:00 Update app announcementcenter from appstore
2020-03-02T19:17:24+00:00 Repair step: Add read permissions for existing announcements
2020-03-02T19:17:24+00:00 Add read permissions for existing announcements
2020-03-02T19:17:24+00:00
2020-03-02T19:17:24+00:00  Starting ...
    0/0 [>-]   0%2020-03-02T19:17:24+00:00
2020-03-02T19:17:24+00:00 Checked for update of app "announcementcenter" in appstore
2020-03-02T19:17:24+00:00 Repair step: Add read permissions for existing announcements
2020-03-02T19:17:24+00:00 Add read permissions for existing announcements
2020-03-02T19:17:24+00:00
2020-03-02T19:17:24+00:00  Starting ...
    0/0 [>-]   0%2020-03-02T19:17:24+00:00
2020-03-02T19:17:24+00:00 Checking for update of app data_request in appstore
2020-03-02T19:17:24+00:00 Update app data_request from appstore
2020-03-02T19:17:27+00:00 Checked for update of app "data_request" in appstore
2020-03-02T19:17:27+00:00 Checking for update of app external in appstore
2020-03-02T19:17:27+00:00 Update app external from appstore
2020-03-02T19:17:29+00:00 Repair step: Copy default images to the app data directory
2020-03-02T19:17:29+00:00 Repair info: Icon %s already exists
2020-03-02T19:17:29+00:00 Repair info: Icon %s already exists
2020-03-02T19:17:29+00:00 Repair info: Icon %s already exists
2020-03-02T19:17:29+00:00 Checked for update of app "external" in appstore
2020-03-02T19:17:29+00:00 Repair step: Copy default images to the app data directory
2020-03-02T19:17:29+00:00 Repair info: Icon %s already exists
2020-03-02T19:17:29+00:00 Repair info: Icon %s already exists
2020-03-02T19:17:29+00:00 Repair info: Icon %s already exists
2020-03-02T19:17:29+00:00 Repair step: Copy default images to the app data directory
2020-03-02T19:17:29+00:00 Repair info: Icon %s already exists
2020-03-02T19:17:29+00:00 Repair info: Icon %s already exists
2020-03-02T19:17:29+00:00 Repair info: Icon %s already exists
2020-03-02T19:17:29+00:00 Checking for update of app files_snapshots in appstore
2020-03-02T19:17:29+00:00 Checked for update of app "files_snapshots" in appstore
2020-03-02T19:17:29+00:00 Checking for update of app fulltextsearch_elasticsearch in appstore
2020-03-02T19:17:29+00:00 Update app fulltextsearch_elasticsearch from appstore
2020-03-02T19:17:32+00:00 Checked for update of app "fulltextsearch_elasticsearch" in appstore
2020-03-02T19:17:32+00:00 Checking for update of app gallery in appstore
2020-03-02T19:17:32+00:00 Checked for update of app "gallery" in appstore
2020-03-02T19:17:32+00:00 Checking for update of app gpxedit in appstore
2020-03-02T19:17:32+00:00 Update app gpxedit from appstore
2020-03-02T19:17:34+00:00 Checked for update of app "gpxedit" in appstore
2020-03-02T19:17:34+00:00 Checking for update of app quota_warning in appstore
2020-03-02T19:17:34+00:00 Update app quota_warning from appstore
2020-03-02T19:17:36+00:00 Checked for update of app "quota_warning" in appstore
2020-03-02T19:17:36+00:00 Repair step: Add background jobs for existing users
2020-03-02T19:17:36+00:00 Add background jobs for existing users
2020-03-02T19:17:36+00:00
2020-03-02T19:17:36+00:00  Starting ...
    0/0 [>-]   0%2020-03-02T19:17:36+00:00
 Starting ...
    1/0 [->]   0%2020-03-02T19:17:36+00:00
 Starting ...
    2/0 [-->]   0%2020-03-02T19:17:36+00:00
 Starting ...
    3/0 [--->]   0%2020-03-02T19:17:36+00:00
2020-03-02T19:17:36+00:00 Checking for update of app ransomware_protection in appstore
2020-03-02T19:17:36+00:00 Update app ransomware_protection from appstore
2020-03-02T19:17:38+00:00 Checked for update of app "ransomware_protection" in appstore
2020-03-02T19:17:38+00:00 Checking for update of app sharerenamer in appstore
2020-03-02T19:17:38+00:00 Checked for update of app "sharerenamer" in appstore
2020-03-02T19:17:38+00:00 Checking for update of app social in appstore
2020-03-02T19:17:38+00:00 Checked for update of app "social" in appstore
2020-03-02T19:17:38+00:00 Checking for update of app socialsharing_diaspora in appstore
2020-03-02T19:17:38+00:00 Update app socialsharing_diaspora from appstore
2020-03-02T19:17:39+00:00 Checked for update of app "socialsharing_diaspora" in appstore
2020-03-02T19:17:39+00:00 Checking for update of app socialsharing_email in appstore
2020-03-02T19:17:39+00:00 Update app socialsharing_email from appstore
2020-03-02T19:17:41+00:00 Checked for update of app "socialsharing_email" in appstore
2020-03-02T19:17:41+00:00 Checking for update of app socialsharing_twitter in appstore
2020-03-02T19:17:41+00:00 Update app socialsharing_twitter from appstore
2020-03-02T19:17:43+00:00 Checked for update of app "socialsharing_twitter" in appstore
2020-03-02T19:17:43+00:00 Checking for update of app spreed in appstore
2020-03-02T19:17:43+00:00 Update app spreed from appstore
2020-03-02T19:17:46+00:00 Repair error: Repair step 'OCA\Talk\Migration\FixNamespaceInDatabaseTables' is unknown
2020-03-02T19:17:46+00:00 Repair info: No repair steps available
2020-03-02T19:17:46+00:00 Repair error: Repair step 'OCA\Talk\Migration\CreateHelpCommand' is unknown
2020-03-02T19:17:46+00:00 Repair error: Repair step 'OCA\Talk\Migration\ClearResourceAccessCache' is unknown
2020-03-02T19:17:46+00:00 Repair info: No repair steps available
2020-03-02T19:17:46+00:00 Checked for update of app "spreed" in appstore
2020-03-02T19:17:46+00:00 Repair error: Repair step 'OCA\Talk\Migration\FixNamespaceInDatabaseTables' is unknown
2020-03-02T19:17:46+00:00 Repair info: No repair steps available
2020-03-02T19:17:46+00:00 Repair error: Repair step 'OCA\Talk\Migration\CreateHelpCommand' is unknown
2020-03-02T19:17:46+00:00 Repair error: Repair step 'OCA\Talk\Migration\ClearResourceAccessCache' is unknown
2020-03-02T19:17:46+00:00 Repair info: No repair steps available
2020-03-02T19:17:46+00:00 Repair error: Repair step 'OCA\Talk\Migration\CreateHelpCommand' is unknown
2020-03-02T19:17:46+00:00 Repair info: No repair steps available
2020-03-02T19:17:47+00:00 Repair step: Repair MySQL collation
2020-03-02T19:17:47+00:00 Repair info: All tables already have the correct collation -> nothing to do
2020-03-02T19:17:47+00:00 Repair step: Repair mime types
2020-03-02T19:17:47+00:00 Repair step: Clean tags and favorites
2020-03-02T19:17:47+00:00 Repair info: 0 tags of deleted users have been removed.
2020-03-02T19:17:47+00:00 Repair info: 0 tags for delete files have been removed.
2020-03-02T19:17:47+00:00 Repair info: 0 tag entries for deleted tags have been removed.
2020-03-02T19:17:47+00:00 Repair info: 0 tags with no entries have been removed.
2020-03-02T19:17:47+00:00 Repair step: Repair invalid shares
2020-03-02T19:17:47+00:00 Repair step: Move .step file of updater to backup location
2020-03-02T19:17:47+00:00 Repair info: .step file exists
2020-03-02T19:17:47+00:00 Repair info: .step-previous-update removed
2020-03-02T19:17:47+00:00 Repair info: .step file moved to .step-previous-update
2020-03-02T19:17:47+00:00 Repair step: Fix potential broken mount points
2020-03-02T19:17:47+00:00 Repair info: No mounts updated
2020-03-02T19:17:47+00:00 Repair step: Add log rotate job
2020-03-02T19:17:47+00:00 Repair step: Clear frontend caches
2020-03-02T19:17:47+00:00 Repair info: Image cache cleared
2020-03-02T19:17:47+00:00 Repair info: SCSS cache cleared
2020-03-02T19:17:47+00:00 Repair info: JS cache cleared
2020-03-02T19:17:47+00:00 Repair step: Clear every generated avatar on major updates
2020-03-02T19:17:47+00:00 Repair step: Add preview background cleanup job
2020-03-02T19:17:47+00:00 Repair step: Queue a one-time job to cleanup old backups of the updater
2020-03-02T19:17:47+00:00 Repair step: Cleanup invalid photocache files for carddav
2020-03-02T19:17:47+00:00 Repair step: Add background job to cleanup login flow v2 tokens
2020-03-02T19:17:47+00:00 Repair step: Remove potentially over exposing share links
2020-03-02T19:17:47+00:00 Repair info: No need to remove link shares.
2020-03-02T19:17:47+00:00 Repair step: Clear access cache of projects
2020-03-02T19:17:47+00:00 Repair step: Switches from deprecated "production" to "stable" update channel
2020-03-02T19:17:47+00:00 Repair step: Sets the enterprise logo
2020-03-02T19:17:47+00:00 Repair info: Repair step already executed
2020-03-02T19:17:47+00:00 Repair step: Reset generated avatar flag
2020-03-02T19:17:47+00:00 Starting code integrity check...
2020-03-02T19:17:59+00:00 Finished code integrity check
2020-03-02T19:17:59+00:00 Update successful
2020-03-02T19:17:59+00:00 Maintenance mode is kept active
2020-03-02T19:17:59+00:00 Reset log level

Keep maintenance mode active? [y/N] y
Maintenance mode kept active
$ sudo -u www-data php occ maintenance:mode --off
Maintenance mode disabled

アプリも最新にしておきます.

$ sudo -u www-data php ./occ app:update --all

セキュリティ&セットアップ警告を確認します.管理権限ユーザでログインして, index.php/settings/admin/overview にアクセスします.

2つの警告が表示されたので対処します.

Security & Setup warnings

1つ目の警告

データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 "occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。
テーブル "oc_calendarobjects_props"のインデックス "calendarobject_calid_index"が見つかりません。
テーブル "oc_schedulingobjects"のインデックス "schedulobj_principuri_index"が見つかりません。

案内の通り occ db:add-missing-indices でokでした.
(メッセージの : 部分は になっているのでコピペする場合は注意)

$ sudo -u www-data php ./occ db:add-missing-indices
Check indices of the share table.
Check indices of the filecache table.
Check indices of the twofactor_providers table.
Check indices of the login_flow_v2 table.
Check indices of the whats_new table.
Check indices of the cards table.
Check indices of the cards_properties table.
Check indices of the calendarobjects_props table.
Adding calendarobject_calid_index index to the calendarobjects_props table, this can take some time...
calendarobjects_props table updated successfully.
Check indices of the schedulingobjects table.
Adding schedulobj_principuri_index index to the schedulingobjects table, this can take some time...
schedulingobjects table updated successfully.

2つ目の警告

データベース内のいくつかの列で、big intへの変換が行われていません。 大きなテーブルでカラムタイプを変更すると時間がかかることがあるため、自動的には変更されませんでした。 'occ db:convert-filecache-bigint'を実行することによって、それらの保留中の変更は手動で適用できます。 この操作は、インスタンスがオフラインの間に行う必要があります。 詳細についてはこれに関するドキュメントページを読んでください。
mounts.storage_id
mounts.root_id
mounts.mount_id

こちらも案内どおりでok

$ sudo -u www-data php ./occ db:convert-filecache-bigint
Following columns will be updated:

* mounts.storage_id
* mounts.root_id
* mounts.mount_id

This can take up to hours, depending on the number of files in your instance!
Continue with the conversion (y/n)? [n] y

セキュリティ&セットアップ警告ページを再読込して警告が消えるのを確認します.

OK

OpenSSHで使えるRSA鍵ペアをOpenSSLで生成する

OpenSSH 7.1/7.1p1でRSA鍵長は最低1024bitになりました.

 * Refusing all RSA keys smaller than 1024 bits (the current minimum
   is 768 bits)

1024bitより短い鍵長の鍵を作ろうとすると怒られます.

$ ssh-keygen -t rsa -b 768
Invalid RSA key length: minimum is 1024 bits

以下のMLで古い機器が1024bitに対応していない場合の相談でOpenSSLでOpenSSHで利用できるRSA鍵ペアが作れるのを知りました.

You can use openssl to generate a shorter key:

	$ openssl genprsa -out key.pem 768
	$ ssh-keygen -y -f key.pem > key.pub # optional to get public key

This works with a 768-bit RSA key (client: OpenSSH_7.2p2, OpenSSL
1.0.2g; server: OpenSSH_7.2p2, OpenSSL 1.0.2g) but not a 256-bit RSA
key: I can generate the shorter key but the server requires a minimum of
768-bits.

使うことがあるかわからないけど手元の環境で試してみました.

opensslでRSA 768の秘密鍵の作成
$ openssl genrsa -out id_rsa768 768
Generating RSA private key, 768 bit long modulus (2 primes)
........+++++++
................................+++++++
e is 65537 (0x010001)
パスフレーズありのRSA 768の秘密鍵の作成
$ openssl genrsa -out id_rsa768 -aes256 768
Generating RSA private key, 768 bit long modulus (2 primes)
..+++++++
..........+++++++
e is 65537 (0x010001)
Enter pass phrase for id_rsa768:
Verifying - Enter pass phrase for id_rsa768:

OpenSSLから書き出された鍵ファイルのパーミッションはumaskに関係なく(0000でも)600になっています :)

秘密鍵の確認
$ openssl rsa -text < id_rsa768

秘密鍵が出来たので続いてペアとなる公開鍵を作ります.
MLの例と同じように ssh-keygen を使うと鍵の長さで怒られます.

$ ssh-keygen -y -f id_rsa768 > id_rsa768.pub
Load key "id_rsa768": Invalid key length

公開鍵もOpenSSLで作ります.

OpenSSL公開鍵を作る
$ openssl rsa -pubout < id_rsa768 > id_rsa768.pub
writing RSA key
公開鍵の確認
$ openssl rsa -text -pubin < id_rsa768.pub
出来上がった鍵ペアでログインを試みると鍵長のせいで認証に失敗
$ ssh -v -i ~/.ssh/id_rsa768 localhost
   :
debug1: Trying private key: /home/matoken/.ssh/id_rsa768
Load key "/home/matoken/.ssh/id_rsa768": Invalid key length

てことで使いみちがなさそうですがメモしておきます.
#今ならed25519使いますしね…….

ちなみに1024bitより長い鍵なら普通に使えてssh-keygenでコメントを書き換えたりパスフレーズを書き換えたりでしました.

RSA 4096の鍵
$ openssl genrsa -out id_rsa4096 -aes256 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
................++++
.....................................................................................................++++
e is 65537 (0x010001)
Enter pass phrase for id_rsa4096:
Verifying - Enter pass phrase for id_rsa4096:
$ ssh-keygen -c -C 'OpenSSL generate key' -f ./id_rsa4096
Enter passphrase:
No existing comment
Comment 'OpenSSL generated key' applied
$ ssh-keygen -p -f ./id_rsa4096
Enter old passphrase:
Key has comment 'OpenSSL generated key'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.
環境
$ dpkg-query -W openssl openssh-client openssh-server
openssh-client  1:8.1p1-2
openssh-server  1:8.1p1-2
openssl 1.1.1d-2
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

Megatoolsを新規アカウントで利用しようとするとエラーとなる( ERROR: Can’t login to mega.nz: API call ‘us’ failed: Server returned error ENOENT )

Mega.nz のサービスをコマンドラインで行うためのツール群の Megatools というものがあります.

これを新規アカウントで利用しようとするとこのようなエラーになります.

$ megadf
ERROR: Can't login to mega.nz: API call 'us' failed: Server returned error ENOENT

これは Mega.nz のユーザ登録の仕様が変わったせいなようで新規に Mega.nz のウェブから登録したアカウントで起こるらしいです.

仕様変更前に登録したアカウントや,現在でも Megatools の megareg コマンドで登録したアカウントならMegatools が利用できるようです.

ということで megareg コマンドでアカントを登録し直して試してみました.

megareg コマンドにユーザー名、メールアドレス、パスワードを指定する

$ megareg --register -n 'REALNAME' -e 'EMAIL' -p 'PASSWORD'
Registration email was sent to EMAIL. To complete registration, you must run:

  megareg --verify 7e2c96BDD0DFnrlfo2hXmg==:/Lw2hwBBBBBBBBBBF2Lk1B==:5ceaxAEvkXQ @LINK@

(Where @LINK@ is registration link from the 'MEGA Signup' email)

登録確認メールが届くので、上の例の @LINK@ 部分をそのメールに書かれているURLに書き換えて megareg --verify を実行する

$ megareg --verify 7e2c96BDD0DFnrlfo2hXmg==:/Lw2hwBBBBBBBBBBF2Lk1B==:5ceaxAEvkXQ 'https://mega.nz/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
Account registered successfully!

利用できるか試してみる

$ megadf -u 'EMAIL' -p 'PASSWORD'
Total: 53687091200
Used:  0
Free:  53687091200

うまく行きました.

毎回コマンドの引数にアカウント情報は書きたくないので設定ファイルを用意して使います.

設定ファイルは, ~/.megarc, ./.megarc 若しくは --config $CONFIGFILE で指定します.設定ファイルの内容は最低限以下のような感じで詳細は man megarc を参照.

[Login]
Username = your@email
Password = yourpassword
環境1
$ dpkg-query -W megatools
megatools       1.10.2-1
$ lsb_release -dr
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
$ uname -m
armv7l
環境2
$ dpkg-query -W megatools
megatools       1.10.2-1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

Google Chrome / Chromium 79でバックグラウンドタブのリソース消費を減らす Tab Freeze を試す

Google Chrome/Chromium の 79 で Tab Freeze という機能が入ったようです.これはバックグラウンドの利用していないタブを停止してリソース消費を抑えるというもののようです.

似たようなもので The Great Suspender という拡張機能があり,タブをつい開きっぱなしにしてしまう私はこれで大分助かっています.(この拡張機能はタブのCPUだけでなくメモリも開放されます.その代わり復帰に時間がかかります.)

今回の Tab Freeze で似たようなことが標準でできるようになっていそうなので試してみました.

この機能は未だ実験的な機能でDisabled になっているので手動で設定変更する必要があります.

設定の前に The Great Suspender は競合しそうなので一旦削除しておきます.(類似のものを入れている場合はやはり消しておいたほうがいいと思う)

設定変更はアドレスバーに chrome://flags/#proactive-tab-freeze と入力してアクセスした項目で設定変更します.

chrome://flags/#proactive-tab-freeze

いくつか選択項目がでてきます.

Tab Freeze Value

Enabled Freeze - Unfreeze 10 seconds every 15 minutes, だと少しするとChromium が落ちてしまいました.
Enabled, Enabled Freeze - No Unfreeze だと落ちないと思ったのですが, Shift + Esc でタスクマネージャを起動すると落ちてしまいました.

てことで手元の環境では未だ不安定で使えないようでした.残念.またバージョンが上がったら試してみようと思います.

この辺の機能はOperaの省電力機能があって気になっているのですが,中国企業の奇虎360(Qihoo)に買収されてから怖いなと…….

環境
$ dpkg-query -W chromium
chromium        79.0.3945.79-1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64