Ubuntu Weekly Recipe

第489回 ARM向けバックポートリポジトリをaptlyで作る

この記事を読むのに必要な時間:およそ 6 分

バイナリパッケージへの署名

一般的なDebianパッケージの開発フローにおいて,パッケージのメンテナーがバイナリパッケージに署名を行うことはありません。バイナリパッケージへの署名はパッケージをビルドするサーバーが自動的に行うためです。しかしながらaptlyで作ったローカルリポジトリーに自分でビルドしたバイナリパッケージを取り込む場合は,自分で署名を行う必要が出てきます。

もっとも手っ取り早い方法はdevscriptsパッケージに所属するdebsignコマンドを使うことです。

$ debsign tmux_2.5-3build1~ubuntu16.04.1_armhf.changes

これだけで.changesファイルが署名済みのファイルに置き換わります。オプションなどの詳しい使い方についてはdebsignのマニュアルページを参照してください。

あとはソースパッケージと同じように.changesファイルを指定すれば,バイナリパッケージ一式がローカルリポジトリに取り込まれます。

$ aptly repo include -repo=xenial-armhf tmux_2.5-3build1~ubuntu16.04.1_armhf.changes
gpgv: Signature made Mon Sep 18 18:53:32 2017 JST using RSA key ID DF3CCF34
gpgv: Good signature from "Mitsuya Shibata <shibata@example.com>"
Loading repository xenial-armhf for changes file tmux_2.5-3build1~ubuntu16.04.1_armhf.changes...
[+] tmux-dbgsym_2.5-3build1~ubuntu16.04.1_armhf added
[+] tmux_2.5-3build1~ubuntu16.04.1_armhf added

aptly repo showコマンドを使うと,バイナリパッケージも追加されていることがわかります。

$ aptly repo show --with-packages=true xenial-armhf
Name: xenial-armhf
Comment:
Default Distribution: xenial-backports
Default Component: main
Number of packages: 3
Packages:
  tmux_2.5-3build1~ubuntu16.04.1_armhf
  tmux_2.5-3build1~ubuntu16.04.1_source
  tmux-dbgsym_2.5-3build1~ubuntu16.04.1_armhf

パッケージリポジトリを公開状態にする

ローカルリポジトリのデータを元にパッケージリポジトリを作成しましょう。第485回でも説明したように公開するパッケージリポジトリはリポジトリの流儀に沿ってHTTPでアクセス可能なディレクトリツリーです。

まずあらかじめ~/.aptly.confで指定した公開リポジトリ用のディレクトリを作っておきます。

$ sudo mkdir -p /srv/aptly
$ sudo chown aptly: /srv/aptly

さらにローカルリポジトリのスナップショットを作成します。そうすることでローカルリポジトリの状態と公開リポジトリの状態を独立して管理できます。

$ aptly snapshot create xenial-backports-20170918 from repo xenial-armhf

Snapshot xenial-backports-20170918 successfully created.
You can run 'aptly publish snapshot xenial-backports-20170918' to publish snapshot as Debian repository.

最後に作ったスナップショットを公開します。第485回と異なるのは公開するストレージ(エンドポイント)を明示的に指定することです。~/.aptly.confではFileSystemPublishEndpointsとしてpomeraを作成しましたので,エンドポイント名はfilesystem:pomeraになります。

$ aptly publish snapshot xenial-backports-20170918 filesystem:pomera:
Loading packages...
Generating metadata files and linking package files...
Finalizing metadata files...
Signing file 'Release' with gpg, please enter your passphrase when prompted:
Clearsigning file 'Release' with gpg, please enter your passphrase when prompted:

Snapshot xenial-backports-20170918 has been successfully published.
Please setup your webserver to serve directory '/srv/aptly' with autoindexing.
Now you can add following line to apt sources:
  deb http://your-server/ xenial-backports main
  deb-src http://your-server/ xenial-backports main
Don't forget to add your GPG key to apt with apt-key.

You can also use `aptly serve` to publish your repositories over HTTP quickly.

エンドポイントとしてローカルストレージ以外にAmazon S3やOpenStack Swiftといったクラウドストレージも指定可能です。また最後のコロンの後ろにパス名を指定することで,サブディレクトリの下にリポジトリを作ることもできます。

作られたディレクトリの中身は次のような構造になっています。

(メタデータ類)
$ ls /srv/aptly/dists/xenial-backports/
InRelease  Release  Release.gpg  main

(パッケージの実体)
$ ls /srv/aptly/pool/main/t/tmux/
tmux-dbgsym_2.5-3build1~ubuntu16.04.1_armhf.ddeb  tmux_2.5-3build1~ubuntu16.04.1.dsc        tmux_2.5.orig.tar.gz
tmux_2.5-3build1~ubuntu16.04.1.debian.tar.xz      tmux_2.5-3build1~ubuntu16.04.1_armhf.deb

たとえばjp.archive.ubuntu.comの同じディレクトリ見てみると,似たような構造になっていることがわかりますね。ちなみに個々のパッケージファイルは~/.aptly/以下のファイルに対するハードリンクになっているため,ローカルファイルシステムを用いてパッケージを公開するだけであればストレージの使用量は増えません。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入