ビデオ会議システムのAroundを少し試してみた(Linuxウェブアプリ版)

多分backspace.fm #379で初めてAroundを知りました.

Podcastでは招待制と言ってたけどGet startedとあるからからメールアドレスを登録できるので参加できるのではと思ったらメールアドレスを登録しても何も起こりません.FAQページを見ると招待制で順番待ちになるよう.

How do I sign up for Around?
Around is currently in beta and invite-only. Please click “Get Started” on the upper right hand corner and enter your email to be added to our waitlist.

around auth

気長にまとうと思ったのですが,いつの間にか登録可能になっていました.Get startedからGoogle/Slack/Apple等で認証することで参加できました.

#この数日後に登録していたメールアドレスに参加メールが届きました.

鹿児島らぐのアフターや自分一人で少し試したのでメモしておきます.(2021-02-17〜2021-02-28頃試した内容です)

Linuxでの参加方法

WindowsとmacOS版アプリが存在しますが,Linuxの場合現在はウェブアプリ版でウェブブラウザで参加することになります.Google Chomreが推奨されますが,Chromiumでも参加できました.
Firefoxでアクセスするとこのようなメッセージが出て参加できません.

Around app for
Linux is coming soon
In the meantime, you can join the meeting in a Google Chrome or Microsoft Edge browser.

ちなみにFAQページを見るとmobileとLinux版アプリについては開発中のようでcoming soonとなっています.期待して待ちましょう.

Do you have a mobile app?
Our mobile app is coming soon – stay tuned!

Do you have a Linux app?
Our Linux app is coming soon – stay tuned!

Android のGoogle Chrome で参加してみると,「We are on mobile yet!」とか言われますが,「PC 版サイト」にすると利用できました.iOSは未確認です.

管理画面と部屋への参加

around lobby

アカウントを持っている方は https://meet.around.co/ からミーティングを開始したり部屋を作ったり出来ます.ミーティング中の部屋は参加者のアイコンが表示されていま人が要るなというのがわかります.

around room ng

部屋は複数作成(3つまでは確認)できて,URLも変更できます.流石にLinuxとかは無理でしたが,matokenは取得できました :)
この辺は早いものがちみたいですね.

部屋をクリックすると部屋に入れます.右上の「Copy Meeting Link」を押して https://meet.around.co/r/ルームID といったミーティングURLをコピーして参加者に伝えます.このときの参加者はAroundのアカウントを持っていなくても参加できます.

around join

IDを入力して参加します.

around roomlock

既定値では許可待ちになるのでしばらく待ちます.

around roomaccept

管理者は許可してあげます.(設定でいきなり参加できるようにも出来ます)

around createaccount

参加するとAroundに登録していない人は右下にアカウント登録のポップアップが出るのでそこから登録が可能です.

Echo Terminator

around echo terminator

同じネットワークから複数人で参加しようとすると「Echo Terminator」を使うか聞いてきます.これを有効にすると同じ部屋でマイクとスピーカーを有効にしてもハウリングなどが起こらずに利用できるようです.私は未だ未確認ですがちゃんと動けばとても有用そうな機能です.この機能は特許出願中のようです.

メニュー

around main

ミーティング画面の上の方にメニューがいくつかあります.「Fliating Mode」はWebアプリ版では利用できません.(これが使えるとサブモニタがなくても結構便利そうな気がします.)「Campfire Mode」は顔がサークル状に表示されるモード,「Notes」はみんなで1つのノートを編集するモード,「Image Sharing」は画像共有モード(画像以外も共有できた),「Screen Sharing」は画面共有ができます.

around settings

右上の歯車⚙アイコンから各種設定が出来ます.ショートカットも書かれているので便利です.

カメラ

自分のカメラの映像は各参加者に転送された後顔の周りが丸くくり抜かれて表示されます.顔の位置が変わっても自動的に追従してくれます.(素人考えではローカルで自分のかをくり抜いてそれを転送したほうが良さそうだけど転送先で追尾するみたい)

デスクトップアプリでは「Floating mode」でこのカメラアイコンをフローティング表示することが可能なようです.これを使えるとシングルモニタでも画面を広く使えて便利そうです.

自分のカメラ映像をクリックすると虹🌈のアイコンが表示されるのでそれをクリックして右側にポップアップする「Enable video filters?」の「Enable」でフィルタが有効になります.このあとアイコンをクリックしたり F keyでフィルタが切り替わります.フィルタなしを含めて軽いものから強いものまで12種類あるようです.(寝癖直してないとかお化粧してないとかいったときにも有効そう?)

絵文字

around emoji gif

around emoji

下のテキストボックスの横に🖐のアイコンがあります.これを押すと挙手で,自分のアイコン横に表示されます.テキストボックスをクリックすると他の絵文字もポップアップしてきて好きな絵文字を押すとビデオの上に 一時的に 表示されます.テキストボックスに単語を入力することで絵文字のインクリメンタル検索も出来ます.

Note
この手のアイコンの色はアカウントを作成して肌のトーンを設定することがえきます.(https://meet.around.co/ → 右上の自分の名前 → Prefarences )
around skin tone

アニメーションGIF

インターネットミーム的な画像がたくさん

around gif

テキストボックスをクリックすると他の絵文字の右にアニメーションGIFも表示されます.好きな画像をクリックすると ビデオの代わりに その画像が表示されます.ビデオ上にマウスカーソルを移動して表示される☓アイコンをクリックすることでビデオに戻ります.アニメーションGIFも文字列でインクリメンタル検索できます.

Note
このサービスは「GIPHY」というサービスを使っているようです.そして,DMCA受け付けてるようです.
GIPHY | Search All the GIFs & Make Your Own Animated GIF
GIPHY DMCA Copyright Policy – GIPHY

メッセージやリンクの投稿

around message

メッセージや,リンクを投稿できます.投稿した文字列は自分のアイコンの上に表示されます.過去の投稿はミーティング中には恐らく確認できません.
このとき投稿したメッセージの中でリンクの含まれているものについてはミーティング終了後にメールで届きます.

ノート機能

around note

参加者みんなで1つのノートを編集できます.編集中はカーソル位置に編集者の名前が表示されますが,その時以外は誰がどの部分を編集したかはわからないようです.
このノートはアカウント登録者にはミーティング終了後に投稿されたリンクと一緒にメールで送られてきます.

画像共有(ファイル共有)

around file shareing

「Image sharing」で画像に関わらずファイルの共有が出来ます.このファイルはミーティング終了後に破棄されてしまうようです.必要なファイルはダウンロードしておきましょう.

画面共有

around screenview

画面共有されると,自分の環境に合わせて共有サイズを変更できます.

around screenshare

画面共有者は,「See what I’m sharing」をOnにすることで現在共有している画面をプレビューで見ることが出来ます.間違った画面を共有してしまうといった事故が減らせそうです.

まとめメール

around note mail

ミーティング終了後にアカウント登録者にまとめメールが届きます.時間や参加者,ノートとコメントに書いたリンクURLが1通のメールにまとめられて届きます.
コメントに書いた文章は添付されませんが,URLやURLの含まれるコメントは添付されます.

招待コード

around invites

https://meet.around.co/ → 「Extra invites to Around」を見ると5つ持っているようです.今の時点では誰でも登録できるようだけどまた制限されたときに使えるのかもしれません.

もし招待コードが欲しい人が居たら以下のフォームから教えてください.

まとめ

大抵のビデオミーティングでは顔が大きく表示され結構疲れます.慣れてくるとビデオをOffにしがちですがそうすると反応がわからず辛いです.Aroundだとビデオがアイコンだったりフィルタを使うと顔出しの抵抗が薄れるけど反応はわかる感じがしてチームなどで日常的に使うのに剥いている気がします.デスクトップアプリ版だと顔がポップアップできるのでマルチモニタ環境でなくてもそんなにビデオが邪魔にならず作業しながら使えそうです.
Echo Terminatorを使うと難しい複数拠点間でのミーティングも楽にできそうです.

Linux対応もする予定らしいのでそうするとポップアップモードが使えるようになったり,PCへの負荷も低くなると思うので期待しています.(Linuxネイティブクライアントのあるビデオミーティングサービスは少ないです.現在よく使われるものはSkypeとZoom.usくらい?)
(後はベータが終わると有料になると思うのでその値段がどのくらいになるのか……)

鹿児島Linux勉強会2021.02に参加

鹿児島Linux勉強会 2021.02は予定取り02/21(日)に開催されました.参加者は8人ほどでオンライン(Discord)で開催されました.

以下のような話題で盛り上がりました.

・スマートフォンをLinuxデスクトップのスピーカーに(してビデオ会議中に離席しても話に付いていけるようにする)
・GNU Radioの環境設定
・How to use Sourcetrail for kernel analysis
・はじめての980円ジャンクガラホ改造,UserLAndとUbuntu,ArchLinux
・摂氏と華氏をグラフにしてみた

終了後Aroundのテストがてら雑談をしました.Linux版クライアントももうすぐとのことなので気になっています.🐧

次回は03/06(土)のオープンソースカンファレンス2021 Online/Spring 2日目内で開催です.


以下はchatに出てきたリンク集です

https://kagolug.connpass.com/event/203393/
http://167.86.112.42:19001/p/kagolug-2021.02
https://gitlab.com/matoken/kagolug-2021.02/-/blob/master/slide/slide.asciidoc
https://github.com/matoken/kagolug-2021.02/releases/tag/1
https://avatars.githubusercontent.com/u/582400?s=400&v=4
https://www.asus.com/jp/Networking/RT-AC59U/
https://www.sanwa.co.jp/seihin_joho/thunderguard/index.html#kiso
https://www.youtube.com/watch?v=PZh5hzibdsk&vl=ja
https://www.youtube.com/channel/UCGhudK3AIG152KrfURCSb2Q
https://www.youtube.com/watch?v=PZh5hzibdsk
https://youtu.be/DVY-O4QOoMI
https://youtu.be/B496P9AuuOY
https://twitter.com/ichiken_make
https://amzn.to/2Wv56Yb
https://github.com/alanbjohnston/CubeSatSim/wiki/CubeSat-Simulator-Lite
https://repository-images.githubusercontent.com/149884796/82b70f00-6f07-11e9-9e3e-61ed89d9cb02
https://fosdem.org/2021/
https://fosdem.org/2021/news/2021-02-11-videos-on-fosdem/
https://fosdem.org/2021/schedule/track/free_software_radio/
https://fosdem.org/2021/schedule/event/fsr_gnu_radio_on_embedded_using_buildroot/
https://techlog.kishiro.com/2018/12/linuxfriio.html
https://matoken.org/nextcloud_cat.cgi?https://files.matoken.org/index.php/s/MiRMKyWWbZyxkZG/download
https://garapon.tv/pr_201703pc-app/
http://akiba.jpn.org/?p=37910
http://foltia.com/ANILOC/
https://www.amazon.co.jp/PLEX-PX-W3U4-USB%25E6%258E%25A5%25E7%25B6%259A-%25E5%259C%25B0%25E4%25B8%258A%25E3%2583%2587%25E3%2582%25B8%25E3%2582%25BF%25E3%2583%25AB%25E3%2583%25BBBS%25E3%2583%25BBCS%25E5%25AF%25BE%25E5%25BF%259CTV%25E3%2583%2581%25E3%2583%25A5%25E3%2583%25BC%25E3%2583%258A%25E3%2583%25BC/dp/B01MR4SLB6/ref=sr_1_23?__mk_ja_JP=%25E3%2582%25AB%25E3%2582%25BF%25E3%2582%25AB%25E3%2583%258A&dchild=1&keywords=Linux&qid=1613889374&s=computers&sr=1-23
https://www.hikaritv.net/
https://tailscale.com/
https://www6.nhk.or.jp/anime/program/detail.html?i=montana
https://rnavi.ndl.go.jp/research_guide/entry/post-442.php
https://www.nhk.or.jp/archives/
https://www.sourcetrail.com/
https://www.sourcetrail.com/documentation/#AppImage
https://deskreen.com/
https://appinventor.mit.edu/
https://connpass.com/event/201059/
http://www.kernelvm.org/
https://meet.around.co/r/kagolug
https://kagolug.connpass.com/event/203393/presentation/
https://www.youtube.com/watch?v=xdgNNP8j4gY
https://www.youtube.com/channel/UCxNoKygeZIE1AwZ_NdUCkhQ
https://forms.gle/KALd9U7fKmE6TNjQ7
https://twitter.com/pyconjptv
https://tv.pycon.jp/

Linux Kernel 5.11 をセルフビルドしたメモ

Linux Kernel 5.11 がリリースされました.

F2FSの圧縮周りもアップデートがあるようなので試してみたくなりました.ということでセルフビルドしたらこれまで出なかったエラーが出たのでメモしておきます.

Warning
Debian sid amd64の 5.10.0-3-amd64 環境でビルドしました.Linux 5.9はビルドしたことがあるけれど,Linux 5.10はビルドしたことのない環境です.

Linux 5.11 build時にエラー( BTF: .tmp_vmlinux.btf: pahole (pahole) is not available )

以下のようなエラーが発生しました.

$ make -j`nproc` bindeb-pkg
〜省略〜
BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
Failed to generate BTF for vmlinux
Try to disable CONFIG_DEBUG_INFO_BTF
〜省略〜
$ grep CONFIG_DEBUG_INFO_BTF ./.config
CONFIG_DEBUG_INFO_BTF=y

CONFIG_DEBUG_INFO_BTF を無効にすることも可能ですが, dwarves パッケージでDWARF utilitiesを導入するとこで解決しました.

$ sudo apt install dwarves

その他,DKMSでのVirtualBox moduleのビルドも失敗しました.これはVirtualBoxの対応待ちかなと思います.

ということで,以下のような感じで大丈夫そうです.

Linux 5.11のビルド

必要なパッケージの導入
$ sudo apt install build-essential linux-source bc kmod cpio flex libncurses5-dev libelf-dev libssl-dev dwarves
ソースの入手,確認と展開
$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.11.tar.xz \
https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.11.tar.sign (1)
$ unxz ./linux-5.11.tar.xz (2)
$ gpg --verify ./linux-5.11.tar.sign (3)
gpg: assuming signed data in './linux-5.11.tar'
gpg: Signature made Mon 15 Feb 2021 06:11:32 PM JST
gpg:                using RSA key 647F28654894E3BD457199BE38DBBDC86092693E
gpg: Good signature from "Greg Kroah-Hartman <gregkh@linuxfoundation.org>" [unknown]
gpg:                 aka "Greg Kroah-Hartman (Linux kernel stable release signing key) <greg@kroah.com>" [undefined]
gpg:                 aka "Greg Kroah-Hartman <gregkh@kernel.org>" [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: 647F 2865 4894 E3BD 4571  99BE 38DB BDC8 6092 693E
$ tar tvf ./linux-5.11.tar | lv (4)
$ tar xf ./linux-5.11.tar (5)
$ cd linux-5.11
  1. sourceと署名を入手
  2. 解凍
  3. 署名確認(署名はこちらで確認)
  4. アーカイブ確認
  5. アーカイブ展開
configファイルの用意とビルド
$ cp /boot/config-`uname -r` ./.config (1)
$ yes "" | make oldconfig (2)
$ tar xf ../linux_5.10.9-1.debian.tar.xz debian/certs/ (3)
$ time make -j`nproc` bindeb-pkg (4)
  :
dpkg-deb: building package 'linux-libc-dev' in '../linux-libc-dev_5.11.0-1_amd64.deb'.
dpkg-deb: building package 'linux-image-5.11.0' in '../linux-image-5.11.0_5.11.0-1_amd64.deb'.
dpkg-deb: building package 'linux-image-5.11.0-dbg' in '../linux-image-5.11.0-dbg_5.11.0-1_amd64.deb'.
 dpkg-genbuildinfo --build=binary
 dpkg-genchanges --build=binary >../linux-5.11.0_5.11.0-1_amd64.changes
dpkg-genchanges: info: binary-only upload (no source code included)
 dpkg-source --after-build .
dpkg-buildpackage: info: binary-only upload (no source included)
$ ls -1s ../linux*.deb (5)
  7932 ../linux-headers-5.11.0_5.11.0-1_amd64.deb
728724 ../linux-image-5.11.0-dbg_5.11.0-1_amd64.deb
 52136 ../linux-image-5.11.0_5.11.0-1_amd64.deb
  1124 ../linux-libc-dev_5.11.0-1_amd64.deb
$ sudo apt install ../linux-image-5.11.0_5.11.0-1_amd64.deb ../linux-libc-dev_5.11.0-1_amd64.deb ../linux-headers-5.11.0_5.11.0-1_amd64.deb (6)
  1. 現在のkernel configをコピーする
  2. 新しい設定を既定値で設定
  3. Debianのkernel sourceから証明書をコピー(若しくは CONFIG_SYSTEM_TRUSTED_KEYS="" する)
  4. cpu数を指定してビルド開始
  5. 出来上がったパッケージの確認
  6. 出来上がったパッケージを導入
Machine Owner Key(MOK)で署名する(セキュアブートを有効にしている場合にのみ必要な処理)
$ sudo sbsign --key ~/MOK.priv --cert ~/MOK.pem /boot/vmlinuz-5.11.0 --output vmlinuz-5.11.0 (1)
$ sudo mv ./vmlinuz-5.11.0 /boot/vmlinuz-5.11.0
$ find /lib/modules/5.11.0/updates/dkms/ -type f | xargs -n1 sudo ./scripts/sign-file sha256 ~/MOK.priv ~/MOK.der (2)
  1. kernelに署名
  2. DKMSで作成したmoduleに署名

このあたりの処理は自動化できると思うんだけど未確認.
MOKの作成や,セキュアブートについては以下のページが参考になる.

環境

$ dpkg-query -W build-essential linux-source bc kmod cpio flex libncurses5-dev libelf-dev libssl-dev dwarves sbsign
tool
bc      1.07.1-2+b2
build-essential 12.9
cpio    2.13+dfsg-4
dwarves 1.20-1
flex    2.6.4-8
kmod    28-1
libelf-dev:amd64        0.183-1
libncurses5-dev:amd64   6.2+20201114-2
libssl-dev:amd64        1.1.1j-1
linux-source    5.10.13-1
sbsigntool      0.9.2-2
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -mr
5.10.0-3-amd64 x86_64
再起動後
$ uname -mr
5.11.0 x86_64

FirefoxとYoutube-dlでTVerの動画をダウンロードする

Tip
投稿時の2020-02-20時点のTVerと youtube-dl version 2021.02.10 では以下の手順は必要なく,youtube-dlで直接ダウンロードできるようになっています.
$ wget https://yt-dl.org/downloads/latest/youtube-dl
$ chmod u+x youtube-dl
$ ./youtube-dl $URL

先日TVerで見られる番組が見たくなりました.動画は再生途中で止まったりするのが嫌なので一旦ローカルにダウンロードしてから視聴することが多いです.

よく使うYoutube-DLではダウンロードできませんでした.

ERROR: Unsupported URL: https://tver.jp/episode/NNNNNNNN

siteのsourceを見るとbrightcoveを使っていて,brightcoveはyoutube-dlで対応しているようです.

ちなみにLinuxのChromiumで開くと推奨環境外と判定されて閲覧できません.Google ChromeやFirefoxだとそのまま,Chromimだとユーザーエージェントを変更することで閲覧できます.今回はFirefoxを利用しました.

推奨環境について
ご利用の環境はTVerの推奨環境ではございません。

推奨環境以外では、動画再生できないなど正常に動作しない場合がございます。
推奨環境でのご利用をお願い致します。

録画したいURLをFirefoxで開いて F12Ctrl + Shift + I 若しくは,メニューから「ウェブ開発」→「開発ツールを表示」で開発ツールを表示します.
Ctrl + f で検索ボックスを表示して data-account , data-video-id の値をメモします.

TVerDownload fx inspector

メモした値を以下のURLに埋め込みます.

後はこのURLを youtube-dl に渡してダウンロードできました.

環境
$ youtube-dl --version
2019.01.17
$ dpkg-query -W firefox
firefox 85.0.1-1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

TTY TwitterクライアントのTTYtterからOysttyerに乗り換え

TTYtterというPerl製でcliで動作するTwitter clientがあります.自作Twitter投稿scriptがアカウントをBANされてAPI keyが使えなくなった後これを使って自動投稿などをしていたのですが,Debian busterから無くなっています.
開発元を見るとOysttyerというものが変わりに存在するようなのでそちらに乗り換えました.

TTYtterからOysttyerに乗り換えるには認証鍵などを作り直す必要があるようです.
-oauthwizard オプションで認証ができるようです.
既定値では認証情報は ~/.oysttyerkey に保存されますが,複数のTwitterアカウントで利用したいので -key=認証情報格納ファイル オプションを付けて区別します.

Note
-keyf のパスに ~ を使うとエラーになるようです.今回は代わりに $HOME を使いました.
$ oysttyer -keyf=$HOME/.oysttyerkey_kagolug_ml -oauthwizard (1)
-- using SSL for default URLs.
trying to find cURL ... /usr/bin/curl
-- Streaming API disabled (no -dostream) (oysttyer will use REST API only)
-- no version check performed (use /vcheck, or -vcheck to check on startup)

+------------------------------------------------------------------------------+
|| WELCOME TO oysttyer: Authorize oysttyer by signing into Twitter with OAuth ||
+------------------------------------------------------------------------------+
Looks like you're starting oysttyer for the first time, and/or creating a
keyfile. Welcome to the most user-hostile, highly obfuscated, spaghetti code
infested and obscenely obscure Twitter client that's out there. You'll love it.

oysttyer generates a keyfile that contains credentials for you, including your
access tokens. This needs to be done JUST ONCE. You can take this keyfile with
you to other systems. If you revoke oysttyer's access, you must remove the
keyfile and start again with a new token. You need to do this once per account
you use with oysttyer; only one account token can be stored per keyfile. If you
have multiple accounts, use -keyf=... to specify different keyfiles. KEEP THESE
FILES SECRET.

** This wizard will overwrite ~/.oysttyerkey_kagolug_ml
Press RETURN/ENTER to continue or CTRL-C NOW! to abort.
(2)
Request from https://api.twitter.com/oauth/request_token ... SUCCEEDED!

1. Visit, in your browser, ALL ON ONE LINE,

https://api.twitter.com/oauth/authorize?oauth_token=lfqqTgAAAAAAixnPABABd7YG56I (3)

2. If you are not already signed in, fill in your username and password.

3. Verify that oysttyer is the requesting application, and that its permissions
are as you expect (read your timeline, see who you follow and follow new
people, update your profile, post tweets on your behalf and access your
direct messages). IF THIS IS NOT CORRECT, PRESS CTRL-C NOW!

4. Click Authorize app.

5. A PIN will appear. Enter it below.

Enter PIN> 0901765 (4)

Request from https://api.twitter.com/oauth/access_token ... SUCCEEDED!
Written keyfile /home/mk/.oysttyerkey_kagolug_ml

Now, restart oysttyer to use this keyfile.
(To choose between multiple keyfiles other than the default .oysttyerkey,
tell oysttyer where the key is using -keyf=... .)
  1. 認証ファイルを指定して認証処理実行
  2. Enterで続行
  3. URLをコピーしてウェブブラウザにて認証したいTwitterアカウントで許可する
  4. ウェブブラウザに表示されるPINを入力してEnter

これで認証情報が指定ファイルに格納されます.

TTYtterではScript中から以下のようにして投稿を行っていました.

ttytter -keyf=/home/mk/.ttytterkey-kagolug_ml -location -lat=31.5775639 -long=130.6667937 -status="$MESSAGE"

Oysttyerのユーザガイドのコマンドラインオプションを確認するとそのまま使えそうです.

コマンドと認証鍵ファイルを変更するだけで動作しました.

$ oysttyer -keyf=/home/mk/.oysttyerkey_kagolug_ml -location -lat=31.5775639 -long=130.6667937 -status="投稿テスト📮"
-- using SSL for default URLs.
trying to find cURL ... /usr/bin/curl
test-login SUCCEEDED!
post attempt -- using lat/long: (31.5775639, 130.6667937)
SUCCEEDED!

Scriptも同様にコマンドと鍵ファイルを書き換えました.これでbuster以降でも大丈夫なはずです :)

環境
$ dpkg-query -W oysttyer chromium
chromium        88.0.4324.146-1~deb10u1
oysttyer        2.10.0-1
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10
$ uname -m
x86_64

小さな静的htmlのKanban boardのNullboardを少し試す

静的htmlでローカルで完結するBanban board の Nullboard を知ったので少し試してみました.

ローカルにcloneして開くか, https://nullboard.io/preview にアクセスして試せます.

はじめはマニュアルやTipsの書かれたボードが表示されます.右上のメニューから「Add new board…​」を選んで新しいボードを作ってみます.

nullboard01

ボードが出来たら次はボードタイトルの右のメニューから「+List」でリストを追加出来ます.

nullboard02

リストのメニューから「+Note」でノートを追加したり,リストの移動が出来ます.移動はドラッグ&ドロップでも可能です.

nullboard03

日本語や絵文字も大丈夫です.

nullboard04

右上のメニューからデータのエクスポート,インポートが可能です.

どうやってローカルでデータを保存しているんだろうと思ったら,Local Storageで実現しているようです.

Nullboardの機能では手動でデータエクスポート,インポートが可能ですが自動でできるといいなと思ってデータの場所を探してみました.chromiumでは ` ~/.config/chromium/Profile\ 1/Local\ Storage/leveldb/000485.ldb` というファイルの中にNullboardに書いたデータがありました.

恐らくLevelDBというもののようです.自動バックアップするようにすると安心そうです.

Kanbanbordは色々ありますがNullboardはオフラインでローカルのみでも動作するのが面白いです.ただ,データの保管場所がLocalStorageなのでデータが消えてしまうのが怖いのでコマ目にバックアップを取ったほうが安心そうです.

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

軽量TwitterフロントエンドのNitterをセルフホスト

NitterというTwitterのフロントエンドがあります.最近はTwitterが重くてなにか検索しようと思っても待ち長かったり画像読み込み失敗したりといったこともよくあります(PCのスペックと回線が細いせいも大きいですが).軽量ブラウザを使ったりもしてみましたがそうすると見た目や使い勝手がいまいち.

そして現在そういった軽量ブラウザは利用もできなくなりました.

This browser is no longer supported.
Please switch to a supported browser to continue using twitter.com. You can see a list of supported browsers in our Help Center.

そこで Nitter を試してみたところ軽くていい感じです.

現在ログイン機能はないので,投稿や非公開Tweetや非公開リストなどは使えませんが,イベントのハッシュタグを追ったり,過去のtweetを検索といったことをするのに便利です.

RSS形式での出力にも対応しています.

軽量で便利なのでロカールマシンでNitterを動かして外にURLを共有するときは https://nitter.net/ を利用していました.

という話を以前オープンソースカンファレンス2020福岡内の鹿児島らぐのコマで発表しました.

しかし,最近は https://nitter.net/ がTwitterの制限に掛かって利用できないことが多くなってきました.なので自分のVPS上にホストしてみました.

Note
同じ手順で Raspberry Pi OS buster armhf や Debian sid(nimはDebinaパッケージのもの利用)でも動作しました.

Nitterのインストール環境の用意

Nitterが依存している Redislibsass を導入しておきます.

$ sudo apt install redis-server libsass-dev

Nitterを専用アカウントで動かしたいので nitter ユーザ,グループを作ってそのユーザで操作します.

$ sudo groupadd nitter (1)
$ sudo useradd -m -g nitter nitter (2)
$ sudo -iu nitter (3)
  1. nitter グループを作成
  2. nitter ユーザを作成
  3. nitter ユーザのシェルを開く

nimの用意

Nitterはnim-langで出来ています.Nitterのコンパイルにはnim 1.2.0以上が必要ですが,Debian busterのパッケージ版のnimは 0.19.4 でコンパイル出来ません.buster-backports も 1.0.4-1~bpo10+1 と対応していません.(bullseyeは1.4.2)

$ nimble build -d:release
  Verifying dependencies for nitter@0.1.0
       Tip: 2 messages have been suppressed, use --verbose to show them.
     Error: Unsatisfied dependency: nim (>= 1.2.0)
$ dpkg-query -W nim
nim     0.19.4-1

とりあえずnimの公式サイトのバイナリを利用してコンパイルすることにします.

$ wget https://nim-lang.org/download/nim-1.4.2-linux_x64.tar.xz \
https://nim-lang.org/download/nim-1.4.2-linux_x64.tar.xz.sha256 (1)
$ sha256sum -c ./nim-1.4.2-linux_x64.tar.xz.sha256 (2)
nim-1.4.2-linux_x64.tar.xz: OK
$ tar tvf nim-1.4.2-linux_x64.tar.xz | lv (3)
$ tar xvf nim-1.4.2-linux_x64.tar.xz (4)
  1. nimのバイナリをダウンロード
  2. hash確認
  3. アーカイブ確認
  4. アーカイブ展開

Nitterのコンパイル

Nitterのsourceをcloneしてさっきダウンロードして展開したnimでコンパイルします.

$ git clone https://github.com/zedeus/nitter
$ cd nitter
$ PATH=~/nim-1.4.2/bin:$PATH nimble build -d:release
$ PATH=~/nim-1.4.2/bin:$PATH nimble scss
$ mkdir ./tmp

Redis が起動しているのを確認して nitter を起動してみます.この状態で 8080 ポートにアクセスして Nitter が利用できるのを確認します.ポート番号などは nitter.conf で変更できます.

$ ps -ef|grep -i redis (1)
redis    11786     1  0 Feb11 ?        00:15:28 /usr/bin/redis-server 127.0.0.1:6379
$ ./nitter & (2)
$ w3m http://localhost:8080/ (3)
$ kill %1 (4)
$ exit (5)
  1. Redisが動いているのを確認
  2. Nitterを起動
  3. Nitterの動作を確認
  4. Nitterを終了
  5. nitter アカウントから抜ける

Nitterの起動設定

次にNitterに起動設定を行います.Systemd環境なので以下のようなサービスファイルを用意しました.

/etc/systemd/system/nitter.service
[Unit]
Description=Nitter (An alternative Twitter front-end)
After=syslog.target
After=network.target

[Service]
Type=simple

# set user and group
User=nitter
Group=nitter

# configure location
WorkingDirectory=/home/nitter/nitter
ExecStart=/home/nitter/nitter/nitter

Restart=always
RestartSec=15

[Install]
WantedBy=multi-user.target

サービスを有効にしてNitterを起動します.

$ sudo systemctl enable --now nitter.service
$ systemctl status nitter
● nitter.service - Nitter (An alternative Twitter front-end)
   Loaded: loaded (/etc/systemd/system/nitter.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2021-02-17 01:13:07 JST; 34s ago
 Main PID: 19702 (nitter)
    Tasks: 1 (limit: 4696)
   Memory: 3.6M
   CGroup: /system.slice/nitter.service
           └─19702 /home/nitter/nitter/nitter
$ w3m http://localhost:8080/

外に公開せず,ローカルで動作させる場合はここまでの手順でOKです.

ドメインとSSL証明書の用意

※この手順はローカルで動かす場合は必要ありません.

今回はサブドメインを用意しました.DNSを設定して nitter.matoken.org を用意しました.設定ミスしたときにリカバリしやすいようにTTlを短く設定してうまく行ったらいつもの長さにします.

証明書はcertbotを使いLet’s encryptで作成しました.

$ sudo certbot certonly -d nitter.matoken.org

apache httpdの用意

※この手順はローカルで動かす場合は必要ありません.

Nitterをそのまま外に公開するのはセキュリティ的に良くないということで,apache httpdでhttpdの処理をしてNitterの8080に転送するようにしました.

Nitter用のapache httpd設定ファイルを用意します.

/etc/apache2/sites-available/nitter.matoken.org.conf
<VirtualHost *:80>
        ServerName nitter.matoken.org
        Redirect permanent / https://nitter.matoken.org/
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName nitter.matoken.org
        ServerAdmin webmaster@matoken.org

        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>

        ProxyPreserveHost On
        ProxyPass / http://127.0.0.1:8080/ nocanon
        ProxyPassReverse / http://127.0.0.1:8080/
        AllowEncodedSlashes On

        ErrorLog ${APACHE_LOG_DIR}/error.nitter.matoken.org.log
        CustomLog ${APACHE_LOG_DIR}/access.nitter.matoken.org.log combined

        SSLCertificateFile /etc/letsencrypt/live/nitter.matoken.org/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/nitter.matoken.org/privkey.pem

</VirtualHost>
</IfModule>

設定を有効にしてテスト後反映します.

$ sudo a2ensite nitter.matoken.org.conf (1)
$ sudo apache2ctl configtest (2)
$ sudo systemctl reload apache2 (3)
  1. 設定ファイルを有効にする
  2. 設定ファイルのテスト
  3. apache httpdの設定反映

この状態で http://nitter.matoken.org/ 及び https://nitter.matoken.org/ にアクセスしてみて Nitter が利用できたらOKです.

とりあえず一般公開しておきますが,今の https://nitter.net みたいにアクセス制限がしょっちゅうかかるようになったら制限するかもしれません.

環境

$ git -C ~nitter/nitter log -1
commit f392b6ca37e66c7c759aa98db23e0bdc62b39c3d (HEAD -> master, origin/master, origin/HEAD)
Author: Lukas Winkler <github@lw1.at>
Date:   Sun Feb 14 12:49:09 2021 +0100

    run optipng -o 9 on all images (#337)
$ dpkg-query -W apache2 redis* libsass-dev certbot
apache2 2.4.38-3+deb10u4
certbot 0.31.0-1+deb10u1
libsass-dev:amd64       3.5.5-4
redis-server    5:5.0.3-4+deb10u2
redis-tools     5:5.0.3-4+deb10u2
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10
$ uname -m
x86_64

AndroidスマートフォンをLinuxデスクトップのスピーカーにしてビデオ会議中に離席しても話に付いていけるようにする

以下の記事で「AudioRelay」というアプリを知りました.

ちょっと飲み物を取ってくるとかいうときなどに便利そう.
しかしこれはWindowsからAndroidへ転送するもので他の環境では動作しません.Linuxでも動作するものを探してみました.

「SoundWire」

SoundWireはWindow若しくはLinux x64_64(64bit)/x86(32bit),Raspberry Pi OSからAndroidへオーディオを転送してくれるようです.

バイナリが配布されているので対応するそれを入手して展開,実行してAndroidアプリから接続すればオーディオが転送されます.デスクトップファイルやアイコンも同梱されているので必要に応じて登録すると便利そうです.

$ tar tvf SoundWire_Server_linux64.tar.gz (1)
drwxrwxrwx Georgie/None      0 2020-01-26 21:22 SoundWireServer/
-rwxrwxrwx Georgie/None   2913 2020-01-16 09:00 SoundWireServer/INSTALL.txt
-rwxrwxrwx Georgie/None   1393 2020-01-16 08:46 SoundWireServer/license.txt
-rwxrwxrwx Georgie/None   2235 2014-09-16 09:08 SoundWireServer/opus_license.txt
-rwxrwxrwx Georgie/None   1583 2014-09-16 09:09 SoundWireServer/readerwriterqueue_license.txt
-rwxrwxrwx Georgie/None   6915 2020-01-26 21:22 SoundWireServer/README.txt
-rwxrwxrwx Georgie/None    448 2019-12-31 11:00 SoundWireServer/SoundWire-Server.desktop
-rwxrwxrwx Georgie/None 1611672 2020-01-16 11:55 SoundWireServer/SoundWireServer
-rwxrwxrwx Georgie/None  237351 2012-11-22 17:28 SoundWireServer/sw-icon.xpm
$ tar xf SoundWire_Server_linux64.tar.gz (2)
$ clamscan SoundWireServer/SoundWireServer (3)
$ ha512sum SoundWireServer/SoundWireServer
a0c1da0afad9e94aef82e19b2555ccf33494ec56fdbd6193a838beae31cec58ca75cae1949f520db84c6793bab13c9c3283b519416bebb1c54bbd66b5c489676  SoundWireServer/SoundWireServer
$ SoundWireServer/SoundWireServer (4)
  1. アーカイブの確認
  2. アーカイブの展開
  3. 念の為手動でもウィルス確認
  4. 実行

ソースは公開されていないようです.

ファイアウォールを利用している場合は,UDP:59010, 59011 を開放する必要があるようです.(起動オプションや環境変数でカスタマイズ可能)
その他, -nogui オプションでX無しでも動作します.

SoundWire PC

SoundWire Android

「WifiAudio」

「WifiAudio」はWindows若しくはLinux x86_64(64bit)からAndroidへオーディオを転送してくれるようです.

PC側は以下のページでバイナリが配布されているのですが,ダウンロードするにはフォーラムに登録が必要のようです.登録には氏名,メールアドレス,生年月日などを求められます.

$ clamscan ./wifiaudio_linux (1)
$ sha512sum ./wifiaudio_linux
6c78f47066ad550b988468c74e9bd56e099393a61a11ffffeda31fc181c60cbd5209763e80da9000d6453fef5cc829b9329b26d46993cc3f00c0bb76ffc81864  ./wifiaudio_linux
$ chmod u+x ./wifiaudio_linux (2)
$ ./wifiaudio_linux (3)
  1. 念の為手動でもウィルス確認
  2. 実行権付与
  3. 実行
$ lsof -i | grep wifiaudio
wifiaudio 1818239 matoken   12u  IPv4 15191466      0t0  UDP *:32000

利用ポートを確認すると UDP:32000 のようなのでファイアウォールを利用している場合は開放しておきます.

WiFiAudio PC
WiFiAudio Android

「ffmpegとVLC」

クローズドソースのものしか見当たらないなということで例によってffmpegで試してみます.
アプリケーションの音声をキャプチャしてmp3形式でスマートフォンのipアドレスに配信します.

$ pactl list short sources (1)
0       alsa_output.pci-0000_00_1b.0.analog-stereo.monitor      module-alsa-card.c      s16le 2ch 44100Hz       RUNNING
1       alsa_input.pci-0000_00_1b.0.analog-stereo       module-alsa-card.c      s16le 2ch 48000Hz       RUNNING
2       alsa_input.pci-0000_00_1b.0.analog-stereo.echo-cancel   module-echo-cancel.c    float32le 1ch 32000Hz   RUNNING
3       alsa_output.pci-0000_00_1b.0.analog-stereo.echo-cancel.monitor  module-echo-cancel.c    float32le 1ch 32000Hz   RUNNING
4       alsa_input.hw_Loopback_1_0      module-alsa-source.c    s16le 1ch 16000Hz       RUNNING
$ ffmpeg -f pulse -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -ac 2 -acodec libmp3lame -f rtp rtp://10.42.0.90:1234/ (2)
  1. PulseAudioのデバイスを確認
  2. ffmpegでAndroidのIPに対してmp3形式で配信

この状態でVLC等で rtp://@:1234 を再生するとLinuxDesktopの音が流れてきます.

ffmpegのオプションについてはこのあたりを.

AndroidでmDNSが使えればいいのですが,使えなさそうなのでIPアドレスを確認するのがちょっとめんどうですね.固定IPにしたりマルチキャスト配信してしまってもいいかもしれません.

とりあえずはarpでごまかしてみました.

#!/bin/bash

MONITOR=`pactl list short sources | grep analog-stereo.monitor | cut -f2 -d'    '`
PHONE_MAC=18:d6:1c:00:00:00
PHONE_IP=`arp -i wlp3s0 | grep ${PHONE_MAC} | cut -f1 -d' '`
PORT=1234

ffmpeg -f pulse -i ${MONITOR} -acodec libmp3lame -ar 22050 -f rtp rtp://${PHONE_IP}:${PORT}/

VLC Android

「ffmpegとicecast2」

Wi-Fiの届く自宅内であればこれまでのものでいいですが,長丁場でご飯買いにコンビニまで行ってこようというような時には使えません.

外のサーバーに投げてストリーミングしてみます.今回はicecast2を利用しています.

$ ffmpeg -f pulse -i alsa_output.platform-snd_aloop.0.analog-stereo.monitor -loglevel 31 -stats -f adts -content_type audio/aac icecast://$USER:PASS@example.com:8000/stream

Androidでicecast2のurlを開くとLinuxデスクトップの音が聞こえてきます :)
ffmpegの部分をOBS StudioにするとGUIなのでとっつきやすいかもしれませんね.

帯域が気になる場合はビットレートを落とすといいと思います.このままだと128kbps程ですが, -ar 22050 として 64kbps, -ar 11025 をつけると32kbpsになります.
32kbpsはちょっと音が悪い感じなので,64kbps以上は欲しいかな?

icecast2などはこのあたりでも

ちなみに,VPSなどのサウンドカードのない計算機の場合以下のようにダミーデバイスを読み込むことで同じことが出来て便利です.
帯域が細かったりPCのスペックが足りないけど音声だけでも聞きたいといったときなどに使えます.

$ sudo modprobe -v snd-dummy
insmod /lib/modules/4.19.0-14-amd64/kernel/sound/drivers/snd-dummy.ko

終わりに

SoundWireとWifiAudioではLinuxではSoundWireの方がいいかなという感じです.しかしffmpeg+VLCでいいのではという感じも.
PC側の操作ですが,ボリュームは反映されず音量0でも配信されますが,ミュートすると聞こえなくなるので注意が必要です.
再生デバイスに迷った場合は pavucontrol などで Recordicg タブでプルダウンメニューからデバイスを順番に試していくといいと思います.音は出るけどノイズが多い場合はスピーカーからの音を拾っているマイクデバイスを選んで要る可能性があります.

そして現在自宅のWi-Fiは去年の台風時に壊れてNotePCをAPにしていて部屋を出ると電波が届かず実際は家の中ではどれも使えないという問題が.家を出て少し行くとmobile回線使えるんですけどね…….

環境

PC環境
$ SoundWireServer/SoundWireServer -nogui
    :
SoundWire Server v3.0
    :

$ dpkg-query -W ffmpeg lsof
ffmpeg  7:4.3.1-8
lsof    4.93.2+dfsg-1.1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64
Android環境
SoundWire (free)
Version 3.0
WiFiAudio
Version 2.0
VLC
Version 3.3.4
本体
Rakuten mini(C330)
Android
9(セキュリティ アップデート:2020年12月5日)

Nextcloud 18 -> 19 アップグレード時のセキュリティ&セットアップ警告を解決

Nextcloud 18 がEoL になっていたので,Nextcloud 18.0.14 から Nextcloud 19.0.7 にアップグレードしました.

表 1. Maintenance and Release Schedule · nextcloud/server Wiki
release date end of life current version next version

20

2020-10-03

2021-10

20.0.7 (2021-02-02)

20.0.8 (2021-02-25)

19

2020-06-03

2021-06

19.0.8 (2021-01-27)

19.0.9 (2021-02-25)

18

2020-01-16

2021-01

18.0.14 (2021-01-27)

End of Life

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

以前実行したときと比べて「セキュリティ&セットアップ警告」の内容が違っていたのでメモしておきます.

警告を解決

警告メッセージ全体
セキュリティ&セットアップ警告
サーバーのセキュリティとパフォーマンスにとって重要なことは、すべてが正確に設定されていることです。あなたの助けとなるよう、Nextcloudでは一部の自動チェックを行っています。詳細な情報は、リンク先のドキュメントを参照してください。

セットアップに関して警告がいくつかあります。
PHPのメモリ制限が推奨値の512MB以下です。
"Strict-Transport-Security" HTTPヘッダが最低でも "15552000" 秒に設定されていません。セキュリティを強化するには、セキュリティTips ↗で解説しているHSTSを有効にすることを推奨します。
Webサーバーは適切にホスト名 "/.well-known/caldav" が引けるように設定されていません。より詳しい情報については、ドキュメントを参照ください。
Webサーバーは適切にホスト名 "/.well-known/carddav" が引けるように設定されていません。より詳しい情報については、ドキュメントを参照ください。
メモリキャッシュが設定されていません。可能であれば、パフォーマンスを向上するため、memcacheを設定してください。より詳しい情報はドキュメントで参照できます。
データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 "occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。
テーブル "oc_calendarobjects_props"のインデックス "calendarobject_calid_index"が見つかりません。
テーブル "oc_schedulingobjects"のインデックス "schedulobj_principuri_index"が見つかりません。
テーブル "oc_properties"のインデックス "properties_path_index"が見つかりません。
データベースにはオプションのカラムがいくつかありません。大きなテーブルにカラムを追加するには時間がかかるため、オプションのカラムは自動的に追加されませんでした。"occ db:add-missing-columns"を実行することで、不足しているカラムはインスタンスの実行中に手動で追加することができます。カラムが追加されると、応答性や使い勝手が改善される可能性があります。
テーブル "oc_comments" にオプションのカラム "reference_id" が存在しません。
このインスタンスには推奨されるPHPモジュールがいくつかありません。 パフォーマンスの向上と互換性の向上のために、それらをインストールすることを強くお勧めします。
intl
bcmath
gmp
データベース内のいくつかの列で、big intへの変換が行われていません。 大きなテーブルでカラムタイプを変更すると時間がかかることがあるため、自動的には変更されませんでした。 'occ db:convert-filecache-bigint'を実行することによって、それらの保留中の変更は手動で適用できます。 この操作は、インスタンスがオフラインの間に行う必要があります。 詳細についてはこれに関するドキュメントページを読んでください。
filecache_extended.fileid
mounts.storage_id
mounts.root_id
mounts.mount_id
インストールガイド ↗を再確認して、 ログ にあるすべてのエラーや警告を確認してください。

「このインスタンスには推奨されるPHPモジュールがいくつかありません。」

php

このインスタンスには推奨されるPHPモジュールがいくつかありません。 パフォーマンスの向上と互換性の向上のために、それらをインストールすることを強くお勧めします。
intl
bcmath
gmp

該当パッケージを導入してhttpdを再読込します.

$ sudo apt install php-intl php-bcmath php-gmp (1)
$ sudo service apache2 reload (2)
  1. 対応パッケージの導入
  2. apache httpd 再読込

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

データベースにいくつかのインデックスがありません。

db index

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

メッセージの通りoccコマンドでインデックスを作成します.メッセージそのままコピーすると:がマルチバイト文字になっているので注意しましょう.

$ sudo -u www-data php $NEXTCLOUDPATH/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.
Check indices of the oc_properties table.
Adding properties_path_index index to the oc_properties table, this can take some time...
oc_properties table updated successfully.

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

「データベースにはオプションのカラムがいくつかありません。」

db collum

データベースにはオプションのカラムがいくつかありません。大きなテーブルにカラムを追加するには時間がかかるため、オプションのカラムは自動的に追加されませんでした。"occ db:add-missing-columns"を実行することで、不足しているカラムはインスタンスの実行中に手動で追加することができます。カラムが追加されると、応答性や使い勝手が改善される可能性があります。
テーブル "oc_comments" にオプションのカラム "reference_id" が存在しません。

メッセージの通りoccコマンドでカラムを追加します.メッセージそのままコピーすると:がマルチバイト文字になっているので注意しましょう.

$ sudo -u www-data php $NEXTCLOUDPATH/occ db:add-missing-columns
Check columns of the comments table.
Adding additional reference_id column to the comments table, this can take some time...
Comments table updated successfully.

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

「データベース内のいくつかの列で、big intへの変換が行われていません。」

db big init

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

メッセージの通りoccコマンドでbig intへの変換をします.メッセージそのままコピーすると:がマルチバイト文字になっているので注意しましょう.
途中時間がかかる旨のメッセージが表示されます.y を指定することで処理を続行します.siteの規模や利用状況によって実行時間を考えましょう.

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

* filecache_extended.fileid
* 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

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

「PHPのメモリ制限が推奨値の512MB以下です。」

php memory

PHPのメモリ制限が推奨値の512MB以下です。

phpの memory_limit の値を /etc/php/7.4/apache2/php.ini を編集して修正します.その後httpdの再読込を行います.

$ sudo vim /etc/php/7.4/apache2/php.ini (1)
$ sudo git -C /etc diff /etc/php/7.4/apache2/php.ini (2)
diff --git a/php/7.4/apache2/php.ini b/php/7.4/apache2/php.ini
index ef89b713..407ee04d 100644
--- a/php/7.4/apache2/php.ini
+++ b/php/7.4/apache2/php.ini
@@ -406,7 +406,7 @@ max_input_time = 60

 ; Maximum amount of memory a script may consume (128MB)
 ; http://php.net/memory-limit
-memory_limit = 128M
+memory_limit = 512M

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Error handling and logging ;
$ php --php-ini /etc/php/7.4/apache2/php.ini -i | grep memory_limit (3)
memory_limit => 512M => 512M
$ sudo service apache2 reload (4)
  1. vimで設定ファイルを修正
  2. 編集内容確認
  3. 設定確認
  4. apache httpd を再読込

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

「”Strict-Transport-Security” HTTPヘッダが最低でも “15552000” 秒に設定されていません。」

hsts

"Strict-Transport-Security" HTTPヘッダが最低でも "15552000" 秒に設定されていません。セキュリティを強化するには、セキュリティTips ↗で解説しているHSTSを有効にすることを推奨します。
$ sudo vi /etc/apache2/sites-available/nextcloud.conf (1)
$ sudo git -C /etc diff /etc/apache2/sites-available/nextcloud.conf (2)
diff --git a/apache2/sites-available/nextcloud.conf b/apache2/sites-available/nextcloud.conf
index 2844232c..4a064d52 100644
--- a/apache2/sites-available/nextcloud.conf
+++ b/apache2/sites-available/nextcloud.conf
@@ -135,6 +135,10 @@
                #               nokeepalive ssl-unclean-shutdown \
                #               downgrade-1.0 force-response-1.0

+               <IfModule mod_headers.c>
+                       Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
+               </IfModule>
+
        </VirtualHost>
 </IfModule>

$ sudo apache2ctl configtest (3)
Syntax OK
$ sudo service apache2 reload (4)
  1. apacheの該当のサイト設定修正
  2. 設定確認
  3. 文法チェック
  4. apache httpd再読込

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

「Webサーバーは適切にホスト名が引けるように設定されていません。」

well known

Webサーバーは適切にホスト名 "/.well-known/caldav" が引けるように設定されていません。より詳しい情報については、ドキュメントを参照ください。
Webサーバーは適切にホスト名 "/.well-known/carddav" が引けるように設定されていません。より詳しい情報については、ドキュメントを参照ください。

専用のドメインではなくサブディレクトリ( nextcloud )で運用しているNextcloud なので,ドメインのドキュメントルートに以下のような .htaccess ファイルを用意します.caldav/carddavだけでなく一緒に他のものも設定しました.専用の(サブ)ドメインならこの問題は出ないと思います.

$ sudo -u www-data vi $HTTPROOTPATH/.htaccess (1)
$ cat $HTTPROOTPATH/.htaccess (2)
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^\.well-known/host-meta /nextcloud/public.php?service=host-meta [QSA,L]
  RewriteRule ^\.well-known/host-meta\.json /nextcloud/public.php?service=host-meta-json [QSA,L]
  RewriteRule ^\.well-known/webfinger /nextcloud/public.php?service=webfinger [QSA,L]
  RewriteRule ^\.well-known/carddav /nextcloud/remote.php/dav/ [R=301,L]
  RewriteRule ^\.well-known/caldav /nextcloud/remote.php/dav/ [R=301,L]
</IfModule>
  1. NextcloudのhttpdのROOT直下の .htaccess ファイルを編集
  2. 編集内容を確認.

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

「メモリキャッシュが設定されていません。」

memcache

メモリキャッシュが設定されていません。可能であれば、パフォーマンスを向上するため、memcacheを設定してください。より詳しい情報はドキュメントで参照できます。
A memcache is not required and you may safely ignore the warning if you prefer.

この設定は必須ではなさそうですが,RAMは余っているので設定します.

いくつか種類があるようですが,今回はAPCuを設定しました.

$ sudo apt install php-apcu (1)
$ sudo -u www-data vim $NEXTCLOUDPATH/config/config.php (2)
$ sudo git --git-dir=/var/git/nextcloud --work-tree=. diff config/config.php (3)
diff --git a/config/config.php b/config/config.php
index f62133e..62d137d 100644
--- a/config/config.php
+++ b/config/config.php
@@ -41,4 +41,5 @@ $CONFIG = array (
   array (
   ),
   'mail_sendmailmode' => 'smtp',
+  'memcache.local' => '\OC\Memcache\APCu',
 );
  1. APCuのパッケージを導入
  2. Nextcloudの設定ファイルを編集して設定を追加
  3. 設定確認

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

「すべてのチェックに合格しました。」

ok

:)

環境

今回のホストの環境はUbuntu 20.04 LTS amd64のapache httpd 2.4, mysql server 8, php 7.4です.

$ dpkg-query -W php7.4-common php7.4-apcu apache2 mysql-server
apache2 2.4.41-4ubuntu3.2
mysql-server    8.0.23-0ubuntu0.20.04.1
php7.4-apcu
php7.4-common   7.4.3-4ubuntu2.4
$ lsb_release -dr
Description:    Ubuntu 20.04.2 LTS
Release:        20.04
$ uname -m
x86_64

Git学習ゲームの「Oh My Git!」

git game01

先週あったFOSDEM 2021のライトニングトーク(といっても1コマ20分)で知ったのですが,「Oh My Git!」というGit学習ゲームがあるそうです.

マルチプラットホームでWindows/macOS/Linux版が用意されています.バイナリはitch.ioで入手できます.

Note
itch.ioについてはこのあたりを.

ゲーミングプラットホームのitch – Speaker Deck

お題が出てきて,それにあった操作のカードを切ってgitの操作をしていきます.実際のコマンド内容も表示され,リポジトリも実際にローカルマシンに作られます.

git game02

ツリーがグラフィックで表現されてわかりやすいしキーボードに慣れていない人でもカードで操作だし入門に良さそうな感じです.後はローカライズされると勧めやすくなるかな.