コンテンツへスキップ
GitHub リポジトリ フォーラム RSS ニュースフィード

新しい apt および rpm リポジトリの発表

Brian J. Cardiff

更新: 2021-05-01 現在、bintray リポジトリは利用できなくなりました。ディストリビューションパッケージは、現在 Open Build Service でホストされています。最近のブログ記事を参照してください。

公式の deb および rpm リポジトリの状態を改善するために取り組んできました。

主な成果は、次のことが可能になることです。

  • 安定版、不安定版、およびナイトリーパッケージの公開
  • ユーザーがインストールする Crystal のバージョンを選択できるようにする
  • 必要に応じて依存関係を調整できるようにする(例:libevent2-devel と libevent-devel に関する CentOS 6 と他のもの)
  • 現在のところ deb/rpm で動作する単一のインストールスクリプトを導入する

これにより、次のことが可能になります。

  • エンドユーザーにとってより快適な体験
  • 最新の Crystal リリースだけでなく、apt および rpm リポジトリに依存すること
  • Docker または Snap を必要とせずにナイトリーパッケージをテストする
  • 当社の Docker イメージが適切でない場合に、他の CI システムでの採用を簡素化する
  • バージョンの採用に関する統計を取得する
  • 最終的には、現在のパッケージをコンパイラ、シャード、およびおそらくツールに分割する

これらのパッケージは、https://bintray.com/crystal でホストします。

dist.crystal-lang.org の現在の apt および rpm パッケージは、移行期間として 2020 年 11 月まで利用可能で、安定版の更新を受け取ります。

インストールスクリプトを使用すると、デフォルトで最新の安定版をインストールできます。

$ curl -fsSL https://crystal.dokyumento.jp/install.sh -o install.sh
$ chmod +x install.sh
$ sudo ./install.sh

# Or, to run it directly
$ curl -fsSL https://crystal.dokyumento.jp/install.sh | sudo bash

# Or, if you prefer wget
$ sudo bash -c "$(wget -O - https://crystal.dokyumento.jp/install.sh)"

たとえば、ナイトリーパッケージを選択する場合は、チャネルを選択します。

$ sudo ./install.sh --channel=nightly

# Or, to run it directly
$ curl -fsSL https://crystal.dokyumento.jp/install.sh | sudo bash -s -- --channel=nightly

# Or, if you prefer wget
$ sudo bash -c "$(wget -O - https://crystal.dokyumento.jp/install.sh)" -s -- --channel=nightly

major.minor.patchmajor.minor、またはmajor.minor.patch-iterationとして特定のバージョンをインストールします。

$ sudo ./install.sh --crystal=0.35

# Or, to run it directly
$ curl -fsSL https://crystal.dokyumento.jp/install.sh | sudo bash -s -- --crystal=0.35

# Or, if you prefer wget
$ sudo bash -c "$(wget -O - https://crystal.dokyumento.jp/install.sh)" -s -- --crystal=0.35

一般に、インストールスクリプトはオプションの引数を受け入れます。

  • --crystalmajor.minor.patchmajor.minor、または major.minor.patch-iteration の値
  • --channelstableunstable、または nightly の値

Linux ディストリビューションを特定し、yum または apt を使用します。

インストールスクリプトには、gnupgca-certificates、および apt-transport-https パッケージが必要であり、セットアップで既に使用可能になっている可能性があります。また、root として実行する必要があります。

apt/rpm 経由で Crystal が既にインストールされている場合はどうなりますか?

インストールスクリプトは、すべての実行時に /etc/apt/sources.list.d/crystal.list および /etc/yum.repos.d/crystal.repo を上書きします。これらは、以前の公式の apt および rpm リポジトリで使用されていたものと同じファイルです。

既に最新バージョンの Crystal (0.35.1) があり、インストールスクリプトを実行すると、次のようになります。

# Debian/Ubuntu
... stripped ...
crystal is already the newest version (0.35.1-1).
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.

# CentOS/Fedora
... stripped ...
Package crystal-0.35.1-1.x86_64 already installed and latest version
Nothing to do

これは、新しいリポジトリに新しいバージョンがない場合に発生します。ナイトリーチャネルに切り替えると、1.0.0-dev が取得されます。

現在のインストールされている Crystal を削除してからインストールスクリプトを実行するには、apt -y remove crystal または rpm -e crystal を実行できます。

注意点

インストールスクリプトは、新しい Crystal にアップグレードしますが、ダウングレードはしません。

既に 0.35.1 があり、最新の 0.34 にダウングレードしたい場合は、次の出力が得られます。

$ ./install.sh --crystal=0.34

# Debian/Ubuntu
... stripped ...
Selected version '0.34.0-1' (Bintray:all [amd64]) for 'crystal'
Suggested packages:
  libxml2-dev libgmp-dev libyaml-dev libreadline-dev
The following packages will be DOWNGRADED:
  crystal
0 upgraded, 0 newly installed, 1 downgraded, 0 to remove and 2 not upgraded.
E: Packages were downgraded and -y was used without --allow-downgrades.

# CentOS/Fedora
... stripped ...
Package matching crystal-0.34.0-1.x86_64 already installed. Checking for update.
Nothing to do

インストールスクリプトでダウングレードを強制する代わりに、ダウングレードする前に Crystal を明示的にアンインストールする必要があります。

# Debian/Ubuntu
$ apt -y remove crystal
$ ./install.sh --crystal=0.34

# CentOS/Fedora
$ rpm -e crystal
$ ./install.sh --crystal=0.34

チャネルを切り替える場合は、キャッシュされたメタデータをクリアする必要がある場合があります。

$ yum clean metadata



以下は、ドキュメントのために、これらのリポジトリがどのように配置されているかの説明です。

deb リポジトリ

deb_distribution=all および deb_component で宣言された deb リポジトリは、チャネルに使用されます。

deb https://dl.bintray.com/crystal/deb all stable
deb https://dl.bintray.com/crystal/deb all unstable
deb https://dl.bintray.com/crystal/deb all nightly

幸いなことに、すべての deb ディストリビューションの依存関係は同じであり、少なくとも今のところ区別する必要はありません。

amd64 および i386 用のパッケージが公開されます。

リポジトリのメタデータは、Bintray 共有 GPG キーで署名されています。

$ apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 379CE192D401AB61

安定版および不安定版チャネルの deb パッケージは、独自の GPG キーで署名されています。

ナイトリーチャネルの deb パッケージは署名されていません。

apt 経由でインストールする場合、リポジトリのメタデータ署名のみがチェックされるため、一般に独自のキーを追加する必要はありません。

$ curl -sL "https://keybase.io/crystal/pgp_keys.asc" | apt-key add -

rpm リポジトリ

rpm リポジトリには、もう少し微調整が必要でした。リポジトリの URL は https://dl.bintray.com/crystal/rpm/{DISTRO}/{ARCH}/{CHANNEL} です。Bintray の構成に関しては、yum_metadata_depth=3 を使用します。

{DISTRO} 値として、el6all の 2 つを使用します。これは、CentOS 6/7/8、Fedora をサポートするのに十分です。(注: CentOS 6/7 に rpm >= 4.13 が同梱されている場合、依存関係として libevent-devel >= 2.0 or libevent2-devel を使用すると、単一のパッケージで十分でした)。

rpm でサポートされている唯一の {ARCH}x86_64 です。

また、{CHANNEL} は、stableunstable、または nightly のいずれかです。

前述のように、リポジトリのメタデータは Bintray 共有 GPG キーで署名され、パッケージはナイトリーチャネルを除き、独自のキーで署名されます。

{DISTRO}{CHANNEL} を置き換えるだけで、すべて完了です。

[crystal]
name=Crystal
baseurl=https://dl.bintray.com/crystal/rpm/{DISTRO}/x86_64/{CHANNEL}
gpgcheck=0
repo_gpgcheck=1
gpgkey=http://bintray.com/user/downloadSubjectPublicKey?username=bintray



次のステップ

不安定版 1.0.0-pre1 をリリースする予定であるため、タグ付けされた不安定版リリースがどのようにアドバタイズされるかを正式化する必要がありました。1.0.0-pre1 リリースは、現在空の不安定版チャネルに着陸する最初のリリースになります。

また、.tar.gz がチャネルでどのようにアドバタイズされるかを正式化するためのいくつかの草案があります。

アドバタイズされたインストール方法は、これらの新しいリポジトリを反映するように更新されます。

CI の統合も更新され、特定の Crystal バージョンとチャネルを選択するための新機能が含まれる可能性があります。