Dockerfile で apt-get upgrade しよう

Dockerfile apt-get upgrade などでググると、apt-get upgrade してはいけないという記事がいくつか出てきます。

見てみると

公式のbest practicesに載っていたようです。
以下は、少し古い日本語訳。
Dockerfile のベストプラクティス — Docker-docs-ja 1.9.0b ドキュメント

RUN apt-get upgrade や dist-upgrade の実行は避けてください。
ベース・イメージに含まれる重要パッケージは、権限が与えられていないコンテナ内ではほとんど更新できないからです。
ベース・イメージ内のパッケージが古くなっていたら、開発者に連絡をとってください。
foo というパッケージを更新する必要があれば、 apt-get install -y foo を利用してください。
これによってパッケージは自動的に更新されます。

ということが書かれています。
へー、そうなのかと思い、最新版を見てみると、記述がなくなっていました。
Best practices for writing Dockerfiles | Docker Documentation.

どういうことか

こちらのissueで対応が入っていました。
Stop telling people not to install security updates by itamarst · Pull Request #12571 · docker/docker.github.io · GitHub.

リンクが載せられています。
The worst so-called “best practice” for Docker
 
root権限が無い場合の話は、rootに変更して実施することが可能だし、 ベース・イメージはすぐに対応してくれないし、 手動でバージョン固定にしちゃうことが実害になることはないというようなことが書かれています。

結論

apt-get upgrade はやりましょう。

Rails 6.0.4 has been released

Rails 6.0.4 has been released | Riding Rails

Rails6.0.4 がリリースされました。 これみて、あれ?なぜ6.0系だけなんだと疑問に思って少し調べてみました。

Action Packの変更点を見ると

Release 6.0.4 · rails/rails · GitHub

Accept base64_urlsafe CSRF tokens to make forward compatible.

In Rails 5.2.5, the CSRF token format is accidentally changed to urlsafe-encoded.
If you upgrade apps from 5.2.5, set the config urlsafe_csrf_tokens = true.

Rails6.1で有効になった新しいCSRF tokenのエンコード方式が利用できるようになっています。 どうも、5.2.5で誤って有効化されたようで、6.0系にupgradeする時に問題となるため 6.0でも有効化するような対応が入ったようです。

該当のPR

[6-0-stable] Backport Upgrade-safe URL-safe CSRF tokens #39076 by kamipo · Pull Request #41806 · rails/rails · GitHub

ちなみに

5.2のstableブランチには、default falseにする対応が入っていますが、 5.2.6をリリースするかどうかは未定なようです。 [5-2-stable] Backport Upgrade-safe URL-safe CSRF tokens #39076 by kamipo · Pull Request #41797 · rails/rails

壊れた動画をuntruncで救出する

スマホで動画撮ってたんだけど、電池なくなってそのまま撮影終了し、充電後動画を確認しましたが、再生できなくなってました。

なんか救済する方法はないかと調べてみたところ、 ponchio/untrunc というOSSがあり、こちらを試してみました。
動画だけじゃなく音声も救えるそうです。

MacのInstallはエラー

Mac OSX用のinstallationも記載されていたので、実施してみたのですが、Big Surには対応してないのか g++ でエラーとなりました。  

しかしDockerfileが

なんとDockerfileが用意されていて、プロジェクトをcloneして、記載の通りにdocker build & run することですんなり動きました。 buildが環境によって通らなくなる可能性のあるプロジェクトは、Dockerfile置いてくれてるととても助かります。

ということで、untrunc が利用できました。
後半は写ってなかったですが、前半部分は救出できました。