これが公式ドキュメントっぽい。
RepositoryFormat - Debian Wiki
sources.list
に指定するフォーマットと実際のURL
sources.list
には以下のようなフォーマットで指定します。
deb uri distribution [component1] [component2] [...]
具体的には、たとえばUbuntu 16.04用のRのレポジトリだと、
deb https://cran.rstudio.com/bin/linux/ubuntu xenial/
のようになります(参考:UBUNTU PACKAGES FOR R)
ここで、https://cran.rstudio.com/bin/linux/ubuntu
はレポジトリのルートを示しています。それに続く部分は、レポジトリのルート/dists
以下を示しています。
…って書いてあったから信じてたら、 https://cran.rstudio.com/bin/linux/ubuntu/dists なんていうディレクトリは存在しません。
???
ソースを読む
仕方ないからソースを読みます。
// IndexCopy::ConvertToSourceList - Convert a Path to a sourcelist /*{{{*/ // --------------------------------------------------------------------- /* We look for things in dists/ notation and convert them to <dist> <component> form otherwise it is left alone. This also strips the CD path. This implements a regex sort of like: (.*)/dists/([^/]*)/(.*)/binary-* ^ ^ ^- Component | |-------- Distribution |------------------- Path It was deciced to use only a single word for dist (rather than say unstable/non-us) to increase the chance that each CD gets a single line in sources.list. */
(apt/indexcopy.cc at 349c5c89454ff344e4cf693492e7cb62ff549886 · Debian/apt · GitHub)
曰く、URIに続いて指定されるのが1つか2つ以上かによって実際のURLへの変換の仕方が違っていて、
deb http://example.com ubuntu main
はhttp://example.com/dists/ubuntu/main
になるけど、
deb http://ubuntu.example.com main
はhttp://ubuntu.example.com/dists/main
じゃなくてhttp://ubuntu.example.com/main
になる(dists
を挟まない)ということです。分かりにくすぎる...
Flat Repository Format
とか言ってたら実はちゃんと下の方に載ってました。Flat Repository Formatというらしいです。
A flat repository does not use the dists hierarchy of directories, and instead places meta index and indices directly into the archive root (or some part below it) In sources.list syntax, a flat repository is specified like this:
deb uri directory/
奥が深い。
Release
Release
/InRelease
はインデックスファイルの一覧です。apt
コマンドはまずRelease
かInRelease
をダウンロードします。
2つの違いは署名を含むか含まないかです。Release
は署名を含まずRelease.gpg
という別のファイルとセットになっています。InRelease
は署名を含んでいます。
たとえばこんな感じです。
Architectures: i386 amd64 all source Codename: trusty Components: main Date: Fri, 10 Jun 2016 02:05:25 UTC Description: R packages for Ubuntu Trusy Tahr 14.04 Label: CRAN Origin: CRAN Suite: trusty Version: 14.04 MD5Sum: eb561ec6e89a989519fc418b67e6747a 984776 Packages d5297132500fdee185fc8cf2d36f8113 110749 Packages.bz2 36ad5613ef84b83f397b4b48844b6a5f 174209 Packages.gz 5ea40a65cc0683b8728e855f4ac0d2de 103935 Packages.lzma d41d8cd98f00b204e9800998ecf8427e 0 Release d6482e48d4cd6d84ac0a14f8f3d1fc45 310575 Sources dd3b2f7e789517eb446cbfe72443ae18 84525 Sources.bz2 7414c84593a81c562cebb1ce32507249 100407 Sources.gz f3ab96df9a7e5e90c1ccadc23245b1a3 81775 Sources.lzma SHA256: (...snip...)
(https://cran.rstudio.com/bin/linux/ubuntu/trusty/Release)
ハッシュは、このレポジトリだとMD5Sum
、SHA256
、SHA512
の3種類があります。フォーマットはそれぞれ
ハッシュ値 サイズ Releaseからの相対パス
となっています。
Packages
/Sources
Packages
はバイナリパッケージのリストです。こんな感じです。ここで注意するのはFilename
はさっきと違って、レポジトリのルートからの相対パスである点です。ややこしい。
Package: r-cran-matrix Priority: optional Section: gnu-r Installed-Size: 4978 Maintainer: Dirk Eddelbuettel <...> Architecture: i386 Source: rmatrix Version: 1.2-0-1trusty0 Depends: libblas3 | libblas.so.3, libc6 (>= 2.7), liblapack3 | liblapack.so.3, r-base-core (>= 3.1.3-1trusty), r-cran-lattice (>= 0.12-11.1) Filename: trusty/r-cran-matrix_1.2-0-1trusty0_i386.deb Size: 2993940 MD5sum: 9a25ef9be0feb9310c255227a5de8f7e SHA1: f3170a0e5fbd0ce8f6727721c03487c85ff5bc4c SHA256: cfcbcc52bdff0c186e1eac4f750d5b9340f34b77f81f42160c176afe02364f36 SHA512: 7e28cc626aa13333940929bc9562a7ff51af2f756f71b98687e26f368b35a182c4e83000d140d9a78b396158e8bbce7050c7c047d58c1a764bc92f650d66d205 Description: GNU R package of classes for dense and sparse matrices This CRAN package provides S4 classes and methods for numerical linear algebra using dense or sparse matrices. The sparse matrix implementation uses code from the LDL sparse matrix package and code from the Metis package of partitioning algorithms. Package: r-cran-rjags Priority: optional Section: gnu-r Installed-Size: 190 (...snip...)
(https://cloud.r-project.org/bin/linux/ubuntu/trusty/Packages)
Source
Source
はソースパッケージのリストです。さっきと似たような雰囲気なんですが、とりあえずファイルパスが違います。レポジトリのルートからなのはそうなんですが、Directory
+ Files
という2つのフィールドに分かれています。
(...snip...) Directory: trusty Files: 903faf98ccd4b6cbcce3bb2d600e918b 1546 ess_15.03-1-2trusty1.dsc adff0c94ee7d16c8e0afaba45f12c1c7 2116995 ess_15.03-1.orig.tar.gz 5b0c3a7ad1400971eafbbcf0c68bf258 9348 ess_15.03-1-2trusty1.diff.gz (...snip...)
Contents
Contents
は、どのファイルがどのパッケージに含まれるかを示すものらしいです。こんな感じでした。
(...snip...) FILE LOCATION bin/arc_summary.py contrib/admin/zfsutils-linux bin/arcstat.py contrib/admin/zfsutils-linux bin/dbufstat.py contrib/admin/zfsutils-linux etc/X11/Xsession.d/98vboxadd-xclient contrib/x11/virtualbox-guest-x11 etc/apparmor.d/torbrowser.Browser.firefox contrib/python/torbrowser-launcher (...snip...)
(http://ftp.cz.debian.org/debian/dists/testing/contrib/Contents-amd64.gz)
Translation
Translation
は各ロケールでのパッケージの説明を記したファイルです。
Translation-(ロケール名)
のようになっていて、例えばUbuntuのTranslation-ja
はこんな感じです。Translationなんだから英語を素のまま使ってたらいらないでしょ、と思ったらそんなことはなくてTranslation-en
がダウンロードされます。(Acquire::Languages "none";
を指定しておけば大丈夫らしいですけど)
Package: acct Description-md5: b24f45ef7d67937aa65ecb8e36a7e5a1 Description-ja: アカウントの処理およびログイン用 GNU アカウントユーティリティ GNU Acconting ユーティリティはユーザ接続時間やプロセス実行統計に関するデータの 報告および集計を行うユーティリティ集です。 . "Login acconting" は接続時間に基づくシステムリソース利用量を集計し、 "process accounting" はシステム上で実行されたコマンドに基づく集計を行います。 . 'last' コマンドは sysvinit パッケージにより提供されるため、本パッケージには 含まれません。 (...snip...)
(http://archive.ubuntu.com/ubuntu/dists/xenial/main/i18n/Translation-ja)
圧縮形式
Unless a compression is indicated by the filename of the indices below, and index may be compressed in one or multiple of the following formats:
- No compression (no extension)
- Gzip (.gz extension)
- Bzip2 (.bz2 extension)
Some clients may also support other compression formats, such as:
Servers should have at least one of uncompressed, gzipped or bzip2ed indices and clients should support at least
.gz
,.bz2
and.xz
.
ややこしいですが、
ということみたいです。
.diff
っていうのがあるらしいです。力尽きたのでこれ以上はメモりません。
感想
けっきょくこれが公式ドキュメントなのかよく分からなかった…。もっとちゃんとプロトコルを定めてほしいです。