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で提供されていることが多いです。apt
やdnf
で簡単にインストールできるからです。apt
やdnf
でインストールできると依存関係も含めてインストールしたり、sudo apt upgrade
/sudo dnf upgrade
でまとめて最新バージョンにしたりできます。
Apache Arrowはインメモリーデータ分析ソフトウェアの基盤コンポーネントとして広く使って欲しいので、様々な方法で簡単にインストールできるようにしてあります。今回説明するようにapt
やdnf
でインストールできるようにしたり、vcpkgやConanのような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で提供していました。
- Debian用APTリポジトリー: https://apache.jfrog.io/ui/native/arrow/debian/
- Ubuntu用APTリポジトリー: https://apache.jfrog.io/ui/native/arrow/ubuntu/
- AlmaLinux (RHEL)用Yumリポジトリー: https://apache.jfrog.io/ui/native/arrow/almalinux/
- Amazon Linux用Yumリポジトリー: https://apache.jfrog.io/ui/native/arrow/amazon-linux/
- CentOS Stream用Yumリポジトリー: https://apache.jfrog.io/ui/native/arrow/centos/
このURLのプレフィックスhttps://apache.jfrog.io/ui/native/arrow/
が変わります。https://repo1.maven.org/maven2/org/apache/arrow/
になってこうなります。
- Debian用APTリポジトリー: https://repo1.maven.org/maven2/org/apache/arrow/debian/
- Ubuntu用APTリポジトリー: https://repo1.maven.org/maven2/org/apache/arrow/ubuntu/
- AlmaLinux (RHEL)用Yumリポジトリー: https://repo1.maven.org/maven2/org/apache/arrow/almalinux/
- Amazon Linux用Yumリポジトリー: https://repo1.maven.org/maven2/org/apache/arrow/amazon-linux/
- CentOS Stream用Yumリポジトリー: https://repo1.maven.org/maven2/org/apache/arrow/centos/
他はすべて同じです。
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サービスをどうぞ。