elementaryOSにaptでDockerを入れようとするとRepositoryが「404 Not Found」になる
elementaryOSでDockerを使おうとしたらハマったので、解決策を記録しておく。
こんな人向け
- elementary OSでapt経由でDockerを追加しようとしたが
404 Not Found
などのエラーが出る
環境
elementary os 5.1.7 Hera
エラーがでた経緯
elementaryOS( Release : 5.1.7 )の環境でDockerを使おうとして、チュートリアル通りにリポジトリを追加しようとした。
そして、sudo apt update
を実行すると
$ sudo apt update
ヒット:1 http://jp.archive.ubuntu.com/ubuntu bionic InRelease
ヒット:2 http://jp.archive.ubuntu.com/ubuntu bionic-updates InRelease
ヒット:3 http://dl.google.com/linux/chrome/deb stable InRelease
ヒット:4 http://jp.archive.ubuntu.com/ubuntu bionic-backports InRelease
ヒット:5 http://packages.elementary.io/appcenter bionic InRelease
ヒット:6 http://ppa.launchpad.net/elementary-os/stable/ubuntu bionic InRelease
ヒット:7 http://repository.spotify.com stable InRelease
ヒット:8 https://typora.io/linux ./ InRelease
ヒット:9 https://brave-browser-apt-release.s3.brave.com stable InRelease
ヒット:10 http://security.ubuntu.com/ubuntu bionic-security InRelease
ヒット:11 http://packages.microsoft.com/repos/code stable InRelease
ヒット:13 http://ppa.launchpad.net/elementary-os/os-patches/ubuntu bionic InRelease
無視:14 https://download.docker.com/linux/ubuntu hera InRelease
ヒット:15 https://packages.microsoft.com/repos/ms-teams stable InRelease
エラー:16 https://download.docker.com/linux/ubuntu hera Release
404 Not Found [IP: 2600:9000:20e4:f600:3:db06:4200:93a1 443]
ヒット:12 https://packagecloud.io/slacktechnologies/slack/debian jessie InRelease
パッケージリストを読み込んでいます... 完了
E: リポジトリ https://download.docker.com/linux/ubuntu hera Release には Release ファイルがありません。
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。
無視
ログとエラー
ログが出る。(以下該当箇所)
無視:14 https://download.docker.com/linux/ubuntu hera InRelease
...
エラー:16 https://download.docker.com/linux/ubuntu hera Release
404 Not Found [IP: 2600:9000:20e4:f600:3:db06:4200:93a1 443]
...
E: リポジトリ https://download.docker.com/linux/ubuntu hera Release には Release ファイルがありません。
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。
解決策
原因はUbuntuだから成立していたコマンドをelementaryでそのまま行っていることだった。以下は解決策。
以下のコマンドを実行
$ cat /etc/os-release
出力を確認
NAME="elementary OS"
VERSION="5.1.7 Hera"
ID=elementary
ID_LIKE=ubuntu
PRETTY_NAME="elementary OS 5.1.7 Hera"
LOGO=distributor-logo
VERSION_ID="5.1.7"
HOME_URL="https://elementary.io/"
SUPPORT_URL="https://elementary.io/support"
BUG_REPORT_URL="https://github.com/elementary/os/issues/new"
PRIVACY_POLICY_URL="https://elementary.io/privacy-policy"
VERSION_CODENAME=hera
UBUNTU_CODENAME=bionic
最後のUBUNTU_CODENAME
を覚えておく。この場合のコードネームはbionic
です。
一度入れてしまったリポジトリを削除(64bit PCのコマンド)
$ sudo add-apt-repository -r "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
さっきのコードネーム(bionic)版のdockerリポジトリを登録
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
bionic \
stable"
sudo apt update
してみる
$ sudo apt update
ヒット:1 http://jp.archive.ubuntu.com/ubuntu bionic InRelease
取得:2 http://jp.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
ヒット:4 http://ppa.launchpad.net/elementary-os/stable/ubuntu bionic InRelease
ヒット:5 http://packages.microsoft.com/repos/code stable InRelease
ヒット:6 http://dl.google.com/linux/chrome/deb stable InRelease
ヒット:7 https://brave-browser-apt-release.s3.brave.com stable InRelease
ヒット:8 https://download.docker.com/linux/ubuntu bionic InRelease
ヒット:9 http://packages.elementary.io/appcenter bionic InRelease
ヒット:10 https://typora.io/linux ./ InRelease
ヒット:11 https://packages.microsoft.com/repos/ms-teams stable InRelease
ヒット:12 http://repository.spotify.com stable InRelease
ヒット:13 http://ppa.launchpad.net/elementary-os/os-patches/ubuntu bionic InRelease
ヒット:14 http://security.ubuntu.com/ubuntu bionic-security InRelease
ヒット:15 https://packagecloud.io/slacktechnologies/slack/debian jessie InRelease
163 kB を 3秒 で取得しました (50.1 kB/s)
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
直った。
原因
ここに辿り着くまでに時間を溶かしてしまったが、色々調べてすべてを理解したあとに改めてドキュメントを読んだらしっかりと注意が記載されていた。
Note: The lsb_release -cs sub-command below returns the name of your Ubuntu distribution, such as xenial. Sometimes, in a distribution like Linux Mint, you might need to change $(lsb_release -cs) to your parent Ubuntu distribution. For example, if you are using Linux Mint Tessa, you could use bionic. Docker does not offer any guarantees on untested and unsupported Ubuntu distributions.
簡単に読むと、
「lsb_release -cs
っていうサブコマンドはあなたが使用しているUbuntuディストリビューションの名前を返すので、Linux Mintとか使ってる人は$(lsb_release)
の部分を、元になったUbuntuディストリビューションに変更してね」
との記載。
elementaryやMintなどのUbuntuベースのディストリを利用している人は、$(lsb_release -cs)
を実行すると、Ubuntuではなく使っているディストリの名前が返ってくる。
$ lsb_release -a
No LSB modules are available.
Distributor ID: elementary
Description: elementary OS 5.1.7 Hera
Release: 5.1.7
Codename: hera
$ lsb_release -cs
hera
これを考慮することなく
echo \
"deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
を実行してしまうと、システムはUbuntuのHera
用のリポジトリを探しに行くが、もちろんそんなものは存在しないので404 Erorr
になる。
$ cat /etc/os-release
を実行し、ベースになったUbuntuのディストリ名を手に入れてから$(lsb_release -cs)
の部分を置き換えると、OSに対応しているかつ存在しているDockerリポジトリを登録できることになる。
Discussion