ここでいうリソースってのはhttp://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu
みたいなやつのことを指す リソースのほうが正しいかも?
何がやりたいか
例えばnginxをインストールしようってなったときに、
# apt-cache madison nginx nginx | 1.14.0-1~bionic | https://nginx.org/packages/ubuntu bionic/nginx amd64 Packages nginx | 1.14.0-0ubuntu1 | http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 Packages nginx | 1.14.0-0ubuntu1 | http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/main Sources nginx | 1.14.0-1~bionic | https://nginx.org/packages/ubuntu bionic/nginx Sources
って状況のUbuntuで、公式レポジトリのhttp://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu
を無視してhttps://nginx.org/packages/ubuntu
からのみのインストールに限定したいとき用
発端
システムの関係上、Ubuntu 18.04にNodejsのバージョン6をインストールすることになった。
2018年7月17日現在では10が一番新しい安定版になているが、ありがたいことに6.xのパッケージがNodeSourceから公開されている。
早速レポジトリを追加
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - apt install nodejs
インストール完了 見てみるか
# node -v v8.10.0
は?????
原因
これ、一見nodesourceのバグかと思うけどnodesource側は何も悪くなくて、利用可能なパッケージを見てみると
# apt-cache madison nodejs nodejs | 8.10.0~dfsg-2 | http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 Packages nodejs | 6.14.1-1nodesource1 | https://deb.nodesource.com/node_6.x bionic/main amd64 Packages nodejs | 8.10.0~dfsg-2 | http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/universe Sources
とでる。つまりUbuntu的には8.10 > 6.14となり公式レポジトリの8.xが優先されてインストールされてしまった。ということ(至極当然の判断
が、今回はあくまで6系の最新版をインストールしたかった
解決策1
apt install時にバージョンを指定する。今回の場合だと
apt install nodejs=6.14.1-1nodesource1
で6がインストールされる。が、毎回バージョンを確認しないといけないのもダルいし、次にapt upgrade
すると結局8がインストールされてしまう。
解決策2
Debian系にはApt-Pinningという機能があって、指定したパッケージのバージョン固定とかインストールの管理ができるようになっている。
今回はこの機能を使って公式が出している側のNodejsレポジトリを無効化した
/etc/apt/preferences.d/nodejs.pref を以下作成
Package: nodejs Pin: release c=universe Pin-Priority: -1
release c
でコンポーネント名を指定する。c=コンポーネント名で今回無効化したいのは↑一覧よりbionic/universe
なのでuniverseと記述
で、apt update
したのちにapt install nodejs
これで
# node -v
v6.14.1
やったぜ