rcmdnk's blog

Link Check Free 1.3

このブログはビルドした後に、Travis CIで LinkChecker というツールを使ってリンク切れ等が無いかチェックしています。

Travis CIでは当然毎回Linkcheckerをインストールしてるわけですが、 最近のビルドからエラーが出てチェック出来なくなっていたので 取り敢えずの処置を入れました。

Sponsored Links

Linchecker

LinkChecker は指定ページや指定サイトにあるリンクを一つ一つチェックして、 リンク切れなどをチェックしてくれるツールです。

このブログは、BitBucketにあるソースをアップデートすると werckerを使ってOctopressなビルドを行って GitHubに出来上がったものを送ってGitHub Pagesで公開していますが、 GitHubのレポジトリに送られると今度はTravis CIでLinkcheckerを走らせて、 リンクチェックをするようにしています。

BitBucketでソースを管理しているのはBitBucketだとプライベートレポジトリが無料で使えるからです。 公開前のドラフトなどは余り見える所に置きたくないので。 Travis CIではプライベートレポジトリで走らせるのは有料になるのでビルドはwerckerにしています。

その後、最後にLinkcheckerはwerckerでも良いのですが、 以前からTravis CIを使ってたのと、失敗したりFixしたりした時の メールの送信設定が多少Travis CIのが賢いのでこんな形になっています。

Linkcheckerの問題

依存モジュールのバージョンチェックに失敗する

LinkcheckerはPython製のプログラムでpipでインストール出来るのですが、 インストール時にrequestsモジュールを要求してインストールされて無ければインストールします。

インストール後、実際走らせてみると

$ linkchecker
This program requires Python requests 2.2.0 or later.

みたいなエラーが出るときがあります。 requestsのインストールに失敗したかな、と思って見てみると

$ pip list 2>/dev/null |grep requests
requests (2.12.4)
requests-cache (0.4.11)

こんな感じでversion 2.12.4がちゃんとインストールされています。2.2.0より新しいバージョン。

なんですが、実はLinkcheckerの中で、バージョンをチェックする時に バージョンを文字列として比較しているので、 "2.3.0" > "2.2.0"なのですが、"2.12.0" < "2.2.0"なので(全体の文字列で比較するので3文字目の12を比較してるので) 上のバージョンだと要求を満たしてないとみなされてしまいます。

ちょっとあれな実装ですが、勿論簡単に解決出来て、 各段階毎に分けてチェックすれば良いわけで(というか普通そうするわけで)、 大分前にレポジトリのコードは直されています。

Linkchecker does not work with requests 2.10.0 (fails with This program requires Python requests 2.2.0 or later.) · Issue #649 · wummel/linkchecker

インストール時にドキュメントが足りなくてエラーが出る

レポジトリ上では直されているので、レポジトリにあるものを直接取ってきて ビルドしてインストールしてみました。

すると、

$ python setup.py install
...
creating build/bdist.macosx-10.12-x86_64/egg/share/linkchecker
copying config/linkcheckerrc -> build/bdist.macosx-10.12-x86_64/egg/share/linkchecker
error: can't copy 'doc/html/lccollection.qhc': doesn't exist or not a regular file

こんな感じのエラーで止まってしまいます。 実際にdocディレクトリにhtmlというディレクトリは無いし、 このファイルを生成するようなコマンドも無いように見えるんですが。

error: can’t copy ‘doc/html/lccollection.qhc’ on OSX · Issue #272 · wummel/linkchecker

Error during install · Issue #243 · wummel/linkchecker

この辺見ても該当するmakeのコマンドもMakefileの中に無いし 作成できません。

fix Travis tests (#681) by PetrDlouhy · Pull Request #694 · wummel/linkchecker

みたいなPull Requestもありましたが、 Travis CIの設定を見るとそもそもinstall等のチェックはしてないので これとはまた別の話な模様。

ということで、取り敢えずドキュメントら辺だけの問題っぽいので、 setup.pyの中で該当の部分を削除した所、取り敢えず自前でビルド&インストールは 出来る様になりました。

removed docs · rcmdnk/linkchecker@de12c01

$ git clone https://github.com/rcmdnk/linkchecker
$ cd linkchecker
$ pip install -r requirements.txt
$ python setup.py install

でインストール出来るはずです。 最後の所はroot権限が必要ならsudoで。もしくは--prefixオプションなどを使って インストールできる場所の指定をしてください。

rcmdnk.github.io/.travis.yml at master · rcmdnk/rcmdnk.github.io

今使ってるのはこんな感じのTravis CI設定。

Linkcheckerの現状

バージョンチェックのコミットは昨年6月に行われてますが、 作者の人がLinkcheckerについてアクティブさを失ったのか、 PyPIへの登録Homepage に載せてるバージョンのアップデートがまだ行われてません。

元々古いバージョンの9.3は2014年にアップされたものでそれ以降 バージョンアップデートは無いわけですが、 レポジトリの更新も昨年の6月のfixコミットで最後になっています。

で、ちょっとissueとかを見ていったらこんなエントリーが。

new organisation to welcome maintainers · Issue #686 · wummel/linkchecker

作者の人に連絡したりしてメンテナンスを皆でやっていこう、という話ですが、 どうも作者の人には連絡がついてないみたいで、このままだと別にフォークして そこでやっていこうかな、というような話に。

メンテナーの募集もしてるのでもしPythonに詳しくてLinkcheckerを使ってる人が居たら是非、と言う感じです。

上で無理やりfixしたドキュメントの所はそのままPull Requestとか出来ないですが、 その辺ちゃんと見て、直したり出来そうならその辺から初めて 出来ればLinkcheckerの手助けもしていきたいな、とも思ってます。

Sponsored Links
Sponsored Links

« CloudflareでGitHub PagesをHTTPS化 Mac Homebrewをstable versionに戻す »