まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:repo

Ubuntu ベースの環境(ラズパイなども含む)にアプリケーションを追加インストールする際には apt コマンドを使います。例えばこんな感じ:
$ sudo apt install nginx
※ apt の代わりに apt-get を使うこともありますが、現在推奨されているのは apt コマンドらしいです。

このコマンドは 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



このエントリの続きです:
レッドハットの開発者向けサブスクリプション(無料)を使ってみた


上記エントリで、レッドハット社が開発者向けに無料で提供を開始した RHEL 7.2 の導入方法を紹介しました。普通に導入して使うまでであれば、この方法で問題なくできるはずです。

が、この状態から新しいツールを yum でインストールしようとして躓きました。ライセンスを購入して利用しているわけではないので、標準のレポジトリを使うことができず、結局 yum の利用ができないのです:
2016042701


というわけで、インストール時に使ったメディア DVD(iso)を使って yum のリポジトリを作り、そこから yum でツールを導入できるようにしてみます。


まずはインストールメディアを RHEL システム内にマウントします。DVD で所有している場合はトレイに入れるだけで自動的にマウントしてくれるはずです。iso ファイルで所有している場合は、以下のコマンドを使ってマウントします(この例では /root/rhel-server-7.2-x86_64-dvd.iso ファイルを /mnt/iso にマウントします):
# mount -t iso9660 -o loop /root/rhel-server-7.2-x86_64-dvd.iso /mnt/iso

次に /etc/yum.repos.d/localdvd.repo ファイルを以下の内容で新規に作成します。マウントした iso(または DVD)をリポジトリとするための記述になってます:
[localdvd]
name=RHEL 7.2 x86_64 DVD
baseurl=file:///mnt/iso/
enabled=1
gpgcheck=0
gpgkey=file:///mnt/iso/RPM-GPG-KEY-redhat-release

そしてリポジトリリストを更新します:
# yum repolist all

これで DVD(iso) の中にあるパッケージファイルが yum で導入できるようになりました。普通に yum install コマンドなどが使えるようになっている、はず:
# yum install screen


このページのトップヘ