Ubuntu Weekly Recipe

第485回 aptlyで本格的なパッケージリポジトリを作る

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

特定パッケージのミラーリポジトリを作る

例としてUbuntu 16.04 LTSのfcitxパッケージとmozc関連のパッケージのミラーリポジトリを作ってみましょう。aptlyはaptコマンドを経由せず,自分自身の信頼する鍵のリストからリポジトリのメタデータを検証します。これはシステムのリポジトリ公開鍵リストとは独立して管理できるようにするためです。

そこであらかじめUbuntu公式リポジトリの公開鍵を信頼する鍵として取り込んでおきます。公式リポジトリの公開鍵リストはubuntu-keyringパッケージとして提供されています。一般的なインストール方法なら最初からインストールされているはずです。Debianのリポジトリの公開鍵が必要なら,debian-archive-keyringパッケージやdebian-keyringパッケージをインストールしてください。

$ sudo apt install ubuntu-keyring
$ gpg --no-default-keyring \
  --keyring /usr/share/keyrings/ubuntu-archive-keyring.gpg \
  --export | gpg --no-default-keyring --keyring trustedkeys.gpg --import
gpg: 鍵437D05B5: 公開鍵"Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com>"をインポートしました
gpg: 鍵FBB75451: 公開鍵"Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com>"をインポートしました
gpg: 鍵C0B21F32: 公開鍵"Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com>"をインポートしました
gpg: 鍵EFE21092: 公開鍵"Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com>"をインポートしました
gpg: 処理数の合計: 4
gpg:               インポート: 4  (RSA: 2)
gpg: 究極的に信用する鍵C6D7028Bの公開鍵が見つかりません
gpg: 最小の「ある程度の信用」3,最小の「全面的信用」1,PGP信用モデル
gpg: 深さ: 0  有効性:   1  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 1u

では適当なミラーリポジトリを作成してみましょう。-architecutresでミラーするアーキテクチャを制限します。-filterオプションはミラーするパッケージを制限します。いずれも指定しない場合は,フルミラー相当になりますので,かなりのパッケージをダウンロードすることになります。今回の場合,パッケージ名が「fcitx」のパッケージもしくは「mozc-」で始まるパッケージを指定しています。他にも-filterでは,Debianパッケージのフィールドを使ったフィルタリングもできます。たとえば特定のソースパッケージから生成されるバイナリパッケージをミラーしたい場合は$Source (foo)と指定します。詳細は公式ドキュメントのPACKAGE QUERIESを参照してください。

-filter-with-depsは依存するパッケージも一緒にインストールするオプションです。一通りオプションを指定した後ろに任意のリポジトリ名(今回は「ange」⁠を指定した上で,ミラー元のURLやコンポーネント/etc/apt/sources.listに記載している内容)を記述します。今回はxenialコンポーネントのみを指定しています。

$ aptly mirror create -architectures=amd64 -filter='fcitx | Name (~ mozc-*)' \
  -filter-with-deps ange http://jp.archive.ubuntu.com/ubuntu/ \
  xenial main restricted universe multiverse
Config file not found, creating default config at /home/aptly/.aptly.conf

Downloading http://jp.archive.ubuntu.com/ubuntu/dists/xenial/InRelease...
gpgv: 2016年04月22日 08時25分09秒 JSTにDSA鍵ID 437D05B5で施された署名
gpgv: "Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com>"からの正しい署名
gpgv: 2016年04月22日 08時25分09秒 JSTにRSA鍵ID C0B21F32で施された署名
gpgv: "Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com>"からの正しい署名

Mirror [ange]: http://jp.archive.ubuntu.com/ubuntu/ xenial successfully added.
You can run 'aptly mirror update ange' to download repository contents.

ミラーリポジトリを作成したら,aptly mirror updateコマンドで最新のパッケージをダウンロードしましょう。

$ aptly mirror update ange
gpgv: 2016年04月22日 08時25分09秒 JSTにDSA鍵ID 437D05B5で施された署名
gpgv: "Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com>"からの正しい署名
gpgv: 2016年04月22日 08時25分09秒 JSTにRSA鍵ID C0B21F32で施された署名
gpgv: "Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com>"からの正しい署名
Downloading & parsing package files...
Downloading http://jp.archive.ubuntu.com/ubuntu/dists/xenial/main/binary-amd64/Packages.gz...
Downloading http://jp.archive.ubuntu.com/ubuntu/dists/xenial/restricted/binary-amd64/Packages.gz...
Downloading http://jp.archive.ubuntu.com/ubuntu/dists/xenial/universe/binary-amd64/Packages.gz...
Downloading http://jp.archive.ubuntu.com/ubuntu/dists/xenial/multiverse/binary-amd64/Packages.gz...
Applying filter...
Packages filtered: 53837 -> 271.
Building download queue...
Download queue: 271 items (149.93 MiB)
Downloading http://jp.archive.ubuntu.com/ubuntu/pool/main/libd/libdrm/libdrm2_2.4.67-1_amd64.deb...
Downloading http://jp.archive.ubuntu.com/ubuntu/pool/main/u/ucf/ucf_3.0036_all.deb...
(中略)
Downloading http://jp.archive.ubuntu.com/ubuntu/pool/universe/m/mozc/emacs-mozc_2.17.2116.102+gitfd0f5b34+dfsg-1ubuntu1_amd64.deb...
Downloading http://jp.archive.ubuntu.com/ubuntu/pool/main/libx/libxcb/libxcb-render0_1.11.1-1ubuntu1_amd64.deb...

Mirror `ange` has been successfully updated.

xenial以外にもリリース後のアップデートパッケージが格納されるxenial-updatesや,より新しいリリースからのバックポートパッケージが格納されるxenial-backportsのパッケージもミラーしたい場合は,個別にaptly mirror createを実行する必要があります。後ほど説明するスナップショット機能を用いて,作成した複数のミラーリポジトリをひとつのリポジトリに統合する機能もあります。

$ aptly mirror create -architectures=amd64 -filter='fcitx | Name (~ mozc-*)' \
  -filter-with-deps ange-updates http://jp.archive.ubuntu.com/ubuntu/ \
  xenial-updates main restricted universe multiverse
$ aptly mirror update ange-updates

取得したパッケージは~/.aptly/pool/以下にハッシュを元にした接頭辞付きで保存されます。これでリポジトリのミラーが完了しました。なお,このままだとパッケージリポジトリとしては使えません。後述の「リポジトリを公開する」の手順を行う必要があります。

リポジトリの状態を確認する

リポジトリの状態はaptly mirror showで確認できます。

$ aptly mirror show ange
Name: ange
Archive Root URL: http://jp.archive.ubuntu.com/ubuntu/
Distribution: xenial
Components: main, restricted, universe, multiverse
Architectures: amd64
Download Sources: no
Download .udebs: no
Filter: fcitx | Name (~ mozc-*)
Filter With Deps: yes
Last update: 2017-08-17 20:44:26 JST
Number of packages: 271

Information from release file:
Acquire-By-Hash: yes
Architectures: amd64 arm64 armhf i386 powerpc ppc64el s390x
Codename: xenial
Components: main restricted universe multiverse
Date: Thu, 21 Apr 2016 23:23:46 UTC
Description:  Ubuntu Xenial 16.04

Label: Ubuntu
Origin: Ubuntu
Suite: xenial
Version: 16.04

また各リポジトリに格納されているパッケージはaptly mirror searchで検索できます。作成したすべてのリポジトリを検索する場合はaptly package searchです。

$ aptly mirror search ange fcitx
fcitx_1:4.2.9.1-1ubuntu1_all
$ aptly package search fcitx
fcitx_1:4.2.9.1-1ubuntu1.16.04.2_all
fcitx_1:4.2.9.1-1ubuntu1_all

aptly package showを使うと,一致するパッケージの詳細を表示できます。

$ aptly package show fcitx
Package: fcitx
Priority: optional
Section: utils
Installed-Size: 36
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: IME Packaging Team <pkg-ime-devel@lists.alioth.debian.org>
Architecture: all
Version: 1:4.2.9.1-1ubuntu1
Depends: fcitx-bin, fcitx-data, fcitx-modules
Recommends: fcitx-config-gtk | kde-config-fcitx, fcitx-frontend-all | fcitx-frontend-fbterm, fcitx-ui-classic | fcitx-ui-light, im-config (>= 0.5) | im-switch
Suggests: fcitx-m17n, fcitx-tools
Filename: fcitx_4.2.9.1-1ubuntu1_all.deb
Size: 5564
MD5sum: bcb1e9863263b3278aeb5d118f01f478
SHA1: 1ffac1fa939bb95e6a8cb6d61ebdbcafc0eba851
SHA256: 207e18c52efe00471c62923e9ad7e4e5e0421a25321ff27298f373e965f773a7
SHA512: 4a87c92492c42e3181faf21f724d94b8433281d970b6b4645f38b694096432a77ea2c561505c9b23a9138c5899420f2ba0f937aa982c24158c0d5d883e0ff19d
Description: Flexible Input Method Framework
Homepage: https://github.com/fcitx/fcitx
Supported: 5y
Description-Md5: bb21ec6d5296fba56418f43e299b26e5
Task: ubuntu-live, kubuntu-live, lubuntu-desktop, ubuntukylin-desktop
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu

著者プロフィール

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

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

コメント

コメントの記入