ククログ

株式会社クリアコード > ククログ > Apache Arrow 20.0.0からAPT/Yumリポジトリーが変わるよ!

Apache Arrow 20.0.0からAPT/Yumリポジトリーが変わるよ!

Apache Arrowの開発に参加している須藤です。そろそろApache Arrow 20.0.0がフィーチャーフリーズされて、4月の中旬から下旬くらいには20.0.0がリリースされます。そんな20.0.0で予定されている変更の1つであるAPT/Yumリポジトリーに関する変更を紹介します。

互換性があるように変更するのでいきなり動かなくなることはないはずですが、長い目で見ると変更に追従しておいて欲しい、といった変更になります。

Apache ArrowのAPT/Yumリポジトリー

Apache Arrowが提供しているライブラリーの中にはC++で実装されているライブラリーがあります。C++実装のライブラリーのパッケージは、LinuxではdebやRPMで提供されていることが多いです。aptdnfで簡単にインストールできるからです。aptdnfでインストールできると依存関係も含めてインストールしたり、sudo apt upgrade/sudo dnf upgradeでまとめて最新バージョンにしたりできます。

Apache Arrowはインメモリーデータ分析ソフトウェアの基盤コンポーネントとして広く使って欲しいので、様々な方法で簡単にインストールできるようにしてあります。今回説明するようにaptdnfでインストールできるようにしたり、vcpkgConanのようなC++用のパッケージマネージャーでインストールできるようにしたりといった具合です。

どのパッケージマネージャーもだいたい「リポジトリー」のようなパッケージの集合を指す概念があります。基本的に、デフォルトのリポジトリーに登録してある状態にするのが一番簡単にインストールできます。サードパーティーのリポジトリーを登録する必要がないからです。vcpkgやConanではパッケージマネージャーの開発者と協力してデフォルトのリポジトリーを更新しています。しかし、APT/Yumリポジトリーは各ディストリビューションのデフォルトのAPT/Yumリポジトリーでパッケージを更新するのではなく、サードパーティーのAPT/Yumリポジトリーを提供しています。

どうしてかというと。。。大変だからです。あとは、リリースタイミングが合わないという理由があります。

たとえば、Debianのデフォルトのリポジトリーに入れるにはDebian開発者やDebianメンテナーに助けてもらわないといけません。私の身近(?)にも何人かそんな人たちがいるのでなんどか相談してちょっと見てもらったりしたのですが、残念ながらデフォルトのリポジトリーに入るまではいきませんでした。Apache Arrowのメーリングリストにやる気のある人が来たこともありましたが、このときもデフォルトのリポジトリーに入るまではいきませんでした。

難しいポイントは依存ライブラリーが多いことです。必須な依存ライブラリーではないので、まずは最小限の機能でパッケージにするということはできるのですが、フル機能をがんばろうとすると依存ライブラリーを芋づる式でパッケージングしなければいけなくなって大変になります。

Apache Arrowのdeb/RPMは私が作って私がメンテナンスしているのでよく知っている方なのですが、Apache Arrowの方で管理しているdeb/RPMはパッケージになっていない依存ライブラリーは一緒にビルドしてしまっています。これは一般的に行儀のよくない方法です。同じライブラリーがいろんなパッケージで個別にビルドされてしまうかもしれないからです。そうすると脆弱性対応のときなどに困ります。

ということで、パッケージになっていない依存ライブラリーがそれなりに多いことが大変です。

それ以外の理由であるリリースタイミングが合わないというのは、ディストリビューションのリリースタイミングとApache Arrowのリリースタイミングが合わない、ということです。基本的に、デフォルトのリポジトリー内のパッケージのバージョンはディストリビューションリリース時に固定され、数年間は大きく変わることはありません。しかし、Apache Arrowは3-4ヶ月ごとに新しいバージョンをリリースしています。デフォルトのリポジトリーで配布すると、数年前のバージョンを提供し続けることになり、ディストリビューションの新しいバージョンが出るまでバージョンアップできなくなります。

ということで、deb/RPMに関しては独自のリポジトリーとしてApache ArrowのAPT/Yumリポジトリーを提供しています。(ディストリビューションのリポジトリーに入れたくないというわけじゃないから、ディストリビューションのリポジトリーに入れるか!という人がいたら相談してください!)

変更点:リポジトリーのURLが変わる

前置きが終わったので、20.0.0でなにが変わるかを説明します。APT/YumリポジトリーのURLが変わります。

従来は以下のURLで提供していました。

このURLのプレフィックスhttps://apache.jfrog.io/ui/native/arrow/が変わります。https://repo1.maven.org/maven2/org/apache/arrow/になってこうなります。

他はすべて同じです。

sudo apt install -y -V libarrow-devでApache Arrow C++の開発用パッケージをインストールできますし、sudo dnf upgradeでアップグレードもできます。

ただ、今後はhttps://apache.jfrog.io/ui/native/arrow/にあるAPT/Yumリポジトリーは更新しないので、sudo apt upgradeで最新バージョンに更新できなくなります。できなくなるんですが、なぜかできている。。。!?というようにはします。

なぜかできている。。。!?

なにを言っているかわからないと思うのですが、更新されないはずのhttps://apache.jfrog.io/ui/native/arrow/を使っていたと思っていたのに気づいたら新しいhttps://repo1.maven.org/maven2/org/apache/arrow/を使うようになっていた、という仕組みを用意しておきました。

公式のインストール手順にある通り、APTリポジトリーの場合はapache-arrow-apt-source.debを、Yumリポジトリーの場合はapache-arrow-release.rpmをインストールする手順になっています。このパッケージの中にはAPT/Yumリポジトリーの情報が入っていて、パッケージをインストールするとAPT/Yumリポジトリーが登録されるという仕組みになっています。このパッケージがこの「なぜかできている。。。!?」を実現している秘密です。

20.0.0では、このパッケージはhttps://apache.jfrog.io/ui/native/arrow/ではなく、https://repo1.maven.org/maven2/org/apache/arrow/を使うようになります。これは既存のhttps://apache.jfrog.io/ui/native/arrow/のURLで配布しているapache-arrow-apt-source.deb/apache-arrow-release.rpmでもそうなります。つまり、先程言った「https://apache.jfrog.io/ui/native/arrow/は更新しない」は正確ではありません。https://apache.jfrog.io/ui/native/arrow/apache-arrow-apt-source.deb/apache-arrow-release.rpmだけ更新します。

これにより、従来の手順でhttps://apache.jfrog.io/ui/native/arrow/apache-arrow-apt-source.deb/apache-arrow-release.rpmを使ってAPT/Yumリポジトリーをセットアップしても、新しいhttps://repo1.maven.org/maven2/org/apache/arrow/を使うようになります。

また、すでにAPT/Yumリポジトリーをセットアップ済みの場合でもsudo apt upgrade/sudo dnf upgradeで新しいapache-arrow-apt-source/apache-arrow-releaseに更新されるようになっています。つまり、sudo apt upgrade/sudo dnf upgradeをすると、新しいAPT/Yumリポジトリーを参照するようになって、もう1回sudo apt upgrade/sudo dnf upgradeをすると新しいAPT/Yumリポジトリーにある最新のバージョンに更新できます。

ということで、初回セットアップ方法はそのままでもすぐに新しいAPT/Yumリポジトリーを使うようになるし、すでにセットアップ済みの場合でも一度sudo apt upgrade/sudo dnf upgradeしたら新しいAPT/Yumリポジトリーを使うようにしておきました。

なお、すでに新しいAPT/Yumリポジトリーにはデータをコピーしてあるので、今からでも新しいAPT/Yumリポジトリーを使うことはできます。

ということで、今のままでも動くようにはしておきましたが、最初から新しいAPT/Yumリポジトリーを使うようにしておいた方がよいので、都合のよいタイミングでスクリプト化してある手順を更新しておいてください。https://apache.jfrog.io/ui/native/arrow/という文字列をhttps://repo1.maven.org/maven2/org/apache/arrow/に置換するだけです。

どうして変更したのか

クールなURIは変わらないので、できればAPT/YumリポジトリーのURLを変えたくはなかったのですが、 https://apache.jfrog.io/ が年に一回不安定になりがちだったのでバイナリー配布サービスを変更しました。

不安定になる理由はサービス更新の遅延です。詳しいことはわかっていないのですが、たぶん、 https://apache.jfrog.io/ はJFrogさんがApache Software Foundationに寄付をしているんじゃないかと思います。それでもって、1年単位で寄付するような話になっているんじゃないかと思います。そのため、1年経つ前に次の更新の話が終わっていないと、数日くらい https://apache.jfrog.io/ が使えなくなります。今年の分は去年の期限が切れる前に更新されたので今年はこれが原因でダウンすることはなさそうです。しかし、毎年、今年は大丈夫かな?とビクビクするのはアレなので、バイナリー配布サービスを変更しました。

どのサービスに変更したかというと、新しいURLhttps://repo1.maven.org/maven2/org/apache/arrow/を見るとわかるとおり、Mavenのリポジトリーです。このURLはCDNで、実体はhttps://repository.apache.org/content/groups/public/org/apache/arrow/です。私はapache.orgのURLの方がいいなぁと思っていたので、この実体のURLを使おうと思っていたのですが、なんと、Apache Software FoundationのSite-wide ban policyに次のように書かれていました。

Neither repository.apache.org nor people.apache.org are general purpose Maven repositories, and should only be used for the testing of pre-production ASF code artifacts.

APT/YumリポジトリーをMavenのリポジトリーに置くのは気持ち悪いのですが、どんなファイルも置ける設計になっていたのでここを使うことにしました。

まとめ

Apache Arrow 20.0.0で予定されているAPT/YumリポジトリーのURL変更について詳細や対応方法や背景などを説明しました。従来の手順のままでもいい感じに動き続ける仕組みを入れておいたのですぐになにかしなくても大丈夫なようにはなっていますが、最終的には全員新しいAPT/Yumリポジトリーに移行して欲しいので、都合のよいタイミングで変更しておいてください。

ところで、2025年4月11日(金)にApache Arrow東京ミートアップを開催します!これまではApache Arrowユーザー限定で募集していましたが、もうApache Arrowユーザーの参加は増えなそうなので、Apache ArrowユーザーでなくてもApache Arrowに興味がある人は参加できることにしました!4人のApache Arrow開発者が東京に集まる機会はそうそうないのでこの機会をお見逃しなく!実は、これを宣伝したくてこの記事を書いたのでした。

Apache Arrowのパッケージまわりも見ている私にApache Arrow関連のサポートを頼みたいという場合はクリアコードのApache Arrowサービスをどうぞ。