Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

Travis-CIでapt-get installに失敗する時の対処法

最近はTravisCIでの不可解なエラーのためgem update bundlerを追記する対応が必要になり話題となりましたね。
なんと今度は、今まで動いていたapt-get installが、次のメッセージで失敗するようになりました。

E: Unable to locate package libgeoip-dev

さて、困りました。
早速対処法を探ります。

解決方法

結論としては、.travis.ymlのbefore_installのセクションで、
sudo apt-get updateと記述してリポジトリファイルの更新を行うとエラーが解消します。

エラー内容

リポジトリファイルの読み込みは成功しているが、そこにlibgeoip-devが存在しないようです。

$ sudo apt-get install libgeoip-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package libgeoip-dev
The command "sudo apt-get install libgeoip-dev" failed and exited with 100 during .

Your build has been stopped.

全文はこちらです。 https://travis-ci.org/y-ken/fluent-plugin-geoip/jobs/104577451

調査事項

次の通り消えていません。 https://packages.debian.org/search?keywords=libgeoip-dev

  • 公式ドキュメントを探ると?

なんと、記載がありました。
古いパッケージ情報により、たびたび起こるそうです。

This is often caused by old package database and can be fixed by adding the following to .travis.yml:

before_install:
  - sudo apt-get update

参照元: https://docs.travis-ci.com/user/common-build-problems/#Linux%3A-apt-fails-to-install-package-with-404-error

.travis.yml を更新します

ドキュメントに従い、sudo apt-get updateを追記します。
今回は同時に、NoMethodError: undefined method 'spec' for nil:NilClassを解消するためのgem updateも追加しました。 エラー全文: https://travis-ci.org/y-ken/fluent-plugin-geoip/jobs/104785639

変更前

before_install:
  - sudo apt-get install libgeoip-dev

変更後

before_install:
  - sudo apt-get update
  - sudo apt-get install libgeoip-dev
  - gem update bundler

これにて次のPullRequestの通り、エラーは解消です。
めでたしめでたし。

github.com