Ubuntu ベースの環境(ラズパイなども含む)にアプリケーションを追加インストールする際には apt コマンドを使います。例えばこんな感じ:
このコマンドは Ubuntu システム標準のソースリポジトリにあらかじめ nginx が登録されていて、その中で具体的に必要なモジュール一式やその導入手順が参照できるようになっていることで実現しています。インストールコマンドとしては上記のたった1行のコマンドで済むようになっていますが、実際には最新バージョンがいくつで、その導入にはどのような依存モジュールのどのバージョンが必要で、現在のシステムに導入済み(インストールの必要ないもの)は何で、、といった情報が参照され、必要なモジュールだけがインストールできるようになっています。
が、たまにこのコマンドだけではインストールできないことがあります。原因はいくつかありますが、その1つが「対象アプリケーションが標準のソースリポジトリに登録されていない」場合があります。要は目的のアプリケーションをインストールする手順や依存ライブラリが標準構成のソースリポジトリには登録されていないのでインストールできない、ということになります。例えば CloudFoundry の CLI ツールである cf (アプリ名としては cf-cli)をそのまま apt コマンドでインストールしようとしても以下のようなエラーになります:
このように標準ソースリポジトリに登録されていないことが原因でインストールできない(が、別のソースリポジトリを登録すればよい)場合は、対象アプリケーションが登録されたリポジトリを登録しなおしてあげればインストールできるようになります。
リポジトリを登録し直す方法はアプリケーションによっても異なるのですが、例えば上述の cf-cli の場合は公式ドキュメントによると以下の手順でリポジトリを登録できるようです:
このコマンドの最後に /etc/apt/sources.list.d/ ディレクトリ内に cloudfoundry-cli.list というファイルを作成して登録しています(apt-add-repository コマンドを使って登録する方法もありますが、その場合も同ディレクトリ内にファイルが追加されます)。
なお、このようにソースリポジトリに変化があった場合はインストール前にキャッシュ内容を更新する必要があります:
更新後は cf-cli がインストール可能です:
ここまでは apt の仕組みなどにあまり詳しくなくても、インストール手順を調べながら詳しく知らずに実行していることもあると思っています。
さて、問題はここからです。自分も知らなかったのですが、このように「標準構成以外に追加登録したリポジトリ」を削除したい、つまり追加登録しなかった状態に戻すにはどのようにしたらいいでしょうか? これ、意外と情報を見つけるのが難しくて苦戦したのでした。その備忘録としての本ブログでもあります。
答は以下です。3段階の手順が必要でした(特に (2) を忘れがち)。
(1) /etc/apt/sources.list.d/ 以下に追加された該当ファイルを削除する
(2) 記録された該当キーを見つけて削除する
(3) リポジトリ更新
無事にリポジトリ情報を削除して、削除した状態で更新できました。めでたしめでたし。
【参考】
https://unix.stackexchange.com/questions/219341/how-to-apt-delete-repository
※ apt の代わりに apt-get を使うこともありますが、現在推奨されているのは apt コマンドらしいです。$ sudo apt install nginx
このコマンドは Ubuntu システム標準のソースリポジトリにあらかじめ nginx が登録されていて、その中で具体的に必要なモジュール一式やその導入手順が参照できるようになっていることで実現しています。インストールコマンドとしては上記のたった1行のコマンドで済むようになっていますが、実際には最新バージョンがいくつで、その導入にはどのような依存モジュールのどのバージョンが必要で、現在のシステムに導入済み(インストールの必要ないもの)は何で、、といった情報が参照され、必要なモジュールだけがインストールできるようになっています。
が、たまにこのコマンドだけではインストールできないことがあります。原因はいくつかありますが、その1つが「対象アプリケーションが標準のソースリポジトリに登録されていない」場合があります。要は目的のアプリケーションをインストールする手順や依存ライブラリが標準構成のソースリポジトリには登録されていないのでインストールできない、ということになります。例えば CloudFoundry の CLI ツールである cf (アプリ名としては cf-cli)をそのまま apt コマンドでインストールしようとしても以下のようなエラーになります:
$ sudo apt install cf-cli Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package cf-cli
このように標準ソースリポジトリに登録されていないことが原因でインストールできない(が、別のソースリポジトリを登録すればよい)場合は、対象アプリケーションが登録されたリポジトリを登録しなおしてあげればインストールできるようになります。
リポジトリを登録し直す方法はアプリケーションによっても異なるのですが、例えば上述の cf-cli の場合は公式ドキュメントによると以下の手順でリポジトリを登録できるようです:
$ wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add - $ echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list
このコマンドの最後に /etc/apt/sources.list.d/ ディレクトリ内に cloudfoundry-cli.list というファイルを作成して登録しています(apt-add-repository コマンドを使って登録する方法もありますが、その場合も同ディレクトリ内にファイルが追加されます)。
なお、このようにソースリポジトリに変化があった場合はインストール前にキャッシュ内容を更新する必要があります:
$ sudo apt update
更新後は cf-cli がインストール可能です:
$ sudo apt install cf-cli
ここまでは apt の仕組みなどにあまり詳しくなくても、インストール手順を調べながら詳しく知らずに実行していることもあると思っています。
さて、問題はここからです。自分も知らなかったのですが、このように「標準構成以外に追加登録したリポジトリ」を削除したい、つまり追加登録しなかった状態に戻すにはどのようにしたらいいでしょうか? これ、意外と情報を見つけるのが難しくて苦戦したのでした。その備忘録としての本ブログでもあります。
答は以下です。3段階の手順が必要でした(特に (2) を忘れがち)。
(1) /etc/apt/sources.list.d/ 以下に追加された該当ファイルを削除する
$ sudo rm /etc/apt/sources.list.d/cloudfoundry-cli.list
(2) 記録された該当キーを見つけて削除する
$ apt-key list (結果の一覧から cloudfoundry-cli のキーを見つける。仮に "1234ABCD" だったとする) $ sudo apt-key del 1234ABCD
(3) リポジトリ更新
$ sudo apt update
無事にリポジトリ情報を削除して、削除した状態で更新できました。めでたしめでたし。
【参考】
https://unix.stackexchange.com/questions/219341/how-to-apt-delete-repository