elementaryOSにaptでDockerを入れようとするとRepositoryが「404 Not Found」になる

7 min read読了の目安(約6700字

elementaryOSでDockerを使おうとしたらハマったので、解決策を記録しておく。

こんな人向け

  • elementary OSでapt経由でDockerを追加しようとしたが404 Not Foundなどのエラーが出る

環境

elementary os 5.1.7 Hera

エラーがでた経緯

elementaryOS( Release : 5.1.7 )の環境でDockerを使おうとして、チュートリアル通りにリポジトリを追加しようとした。

elementary OSはUbuntuベースのディストリなので、Install on Ubuntuを実行

そして、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リポジトリを登録できることになる。