いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

WSLのUbuntu 20.04 LTS を起動すると cannot create /var/lib/ubuntu-release-upgrader/release-upgrade-available: Permission denied って出る件

概要

これ、私の環境だけなのかなーって思ってたのですが、情報を探してみると同じ現象出てる人が他にもいたので、忘れないようにメモメモ。

WSL の Ubuntu 20.04 LTS を起動すると、その日の初回一発目の起動時のみ、Welcomeメッセージの最後に以下が表示されるようになりました。こんな感じ。

Welcome to Ubuntu 20.04 LTS (GNU/Linux 4.4.0-18362-Microsoft x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

...snip...

0 updates can be installed immediately.
0 of these updates are security updates.

/usr/lib/ubuntu-release-upgrader/release-upgrade-motd: 31: cannot create /var/lib/ubuntu-release-upgrader/release-upgrade-available: Permission denied

ネットで情報を探してみると、以下のissueを発見。

github.com

中で、以下のような返信が入っていました。

I ran into the same issue. I resolved it by removing /var/lib/ubuntu-release-upgrader/release-upgrade-available. This causes /usr/lib/ubuntu-release-upgrader/release-upgrade-motd to skip to the second condition, but since I don't login as root it never tries to write the file.

なるほど。/usr/lib/ubuntu-release-upgrader/release-upgrade-motd を見てみると、以下のようになってました。

stamp=/var/lib/ubuntu-release-upgrader/release-upgrade-available
if [ -f "$stamp" ]; then
        # Stamp exists, see if it's expired
        now=$(date +%s)
        lastrun=$(stat -c %Y "$stamp") 2>/dev/null || lastrun=0
        expiration=$(expr $lastrun + 86400)
        if [ $now -ge $expiration ]; then
                # Older than 1 day old, so update in the background
                /usr/lib/ubuntu-release-upgrader/check-new-release -q > "$stamp" &
        elif [ -s "$stamp" ]; then
                # Less than 1 day old, and non-empty, so display now
                cat "$stamp"
                echo
        fi
elif [ "$(id -u)" = 0 ]; then
        # No cache at all, so update in the background
        /usr/lib/ubuntu-release-upgrader/check-new-release -q > "$stamp" &
fi

最初に
/var/lib/ubuntu-release-upgrader/release-upgrade-available が存在するかどうか見ていて、存在する場合はリリースチェックして、存在しない場合は root ユーザかどうか確認して /var/lib/ubuntu-release-upgrader/release-upgrade-available を書き出しにいってますね。

普段、Ubuntu 使っている際に root ログインすることなんて無いので、私の場合、なぜか /var/lib/ubuntu-release-upgrader/release-upgrade-available が存在している状態になってて、一般ユーザでログインしようとしているので、件のエラーが発生していたみたいですね。

なので、私の場合は、上記の人が言ってるように、 /var/lib/ubuntu-release-upgrader/release-upgrade-available を削除するという処置をしました。

$ sudo rm /var/lib/ubuntu-release-upgrader/release-upgrade-available

過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com