やりたいこと
AWS CodeBuildやGitLab-CIのようなCIプラットホームのスクリプト中で各種シングルバイナリのソフトウェアをインストールするときに、aptやらyumが使える場合は良いが、そうでなくてパッケージを取得しなければいけないケースがある。
もちろん、該当のソフトウェアの特定バージョンのパッケージのURLを直打ちすることも可能だが、Trivyのようなセキュリティ系のソフトウェアについては、できれば最新版を使っていきたいので、動的にlatestを引っ張ってきたい。
今回は、そういったときの対応手順を簡単にまとめておく。
解決策: GitHubのAPIを使う
結論を言うと、GitHubのAPIを使うことで、最新版パッケージのバージョンを確認することができる。
たとえば、セキュリティ診断ツールであるTrivyは以下のAPIで取得が可能だ。
$ curl --silent https://api.github.com/repos/aquasecurity/trivy/releases/latest
これを実行すると、JSONで各種アーキテクチャにおけるパッケージ名を確認することが可能だ。
今回欲しいのは、最新版バージョンのタグ名なので、以下のコマンドでtag_name
とその値を抽出する。
そうすると、この記事執筆時点での最新バージョンである0.53.0
が取得できる。
$ curl --silent https://api.github.com/repos/aquasecurity/trivy/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/'
0.53.0
これを変数に食わせてダウンロードのURLを構築すれば良い。
例えばhadolintのようにバイナリを圧縮せず直接置いているようなものであれば、
$ wget -q https://github.com/hadolint/hadolint/releases/download/v${VERSION}/hadolint-Linux-x86_64 -O ${HADOLINT_PATH} && chmod 755 ${HADOLINT_PATH}
と書けば良いし、TrivyのようにRPMのパッケージを置いているケースであれば、
$ rpm -ivh https://github.com/aquasecurity/trivy/releases/download/v${VERSION}/trivy_${VERSION}_Linux-64bit.rpm
と書けばよい。パッケージによってパスの組み方は違うので、それに合わせてコマンドを組み立てよう。