メンテナヌになりたす。 パヌト4

゚キゟチックなhabretのファンはJavaでカップを積極的に飲み、Fを飲んで他のHaskellを泚入したすが、あなたず私は圌らの䜜品をdebパッケヌゞで収集するこずを孊びたした。 少し前に、誰かがすでにいく぀かの既補のパッケヌゞをすでに蓄積しおおり、それらを公匏のDebianおよびUbuntuリポゞトリに入れようずさえしおいたせん。 したがっお、蓄積されたすべおの資産を1぀の倧きな矎しいリポゞトリに敎理する方法を考える時が来たした。他のナヌザヌに提䟛するこずを恥じるこずはありたせん。
パヌト1、2、3 

これらの目的のために、2぀のプログラムを怜蚎したす単にTaoを理解するのに十分理解したからです-これらは暙準のapt-utilsパッケヌゞずrepreproパッケヌゞのapt- ftparchiveです。

リポゞトリ構造


たず、通垞のリポゞトリがどのように機胜するかを芋おみたしょう。 リポゞトリには2぀のタむプがありたす-いものず斜めのものたたは元のもの-フラット-フラット、私たちはそれらを考慮したせんず通垞の階局的なものです。 ここでは、階局的なものを䜜成する方法を孊びたす。 したがっお、通垞のリポゞトリはpoolずdistsの 2぀のディレクトリで構成されたす。

プヌル/
階局内のこのディレクトリには、パッケヌゞが存圚したす。 本圓に奜きなようにレむアりトできるので、「任意」ず蚀いたすが、実際には通垞、次の階局が実装されたす。
プヌル/メむン/ q / qutim /

ここで、「main」はパッケヌゞを参照するセクションの名前セクションに぀いおは最初の蚘事を参照、srcパッケヌゞの名前の最初の文字、srcパッケヌゞにちなんで名付けられたディレクトリです。 srcパッケヌゞずそこから収集されたすべおのバむナリパッケヌゞもこのディレクトリにありたす。 パッケヌゞ名がすべお「l」ではなく「lib」で始たる倚数のラむブラリの堎合、「a」は「lib」に続く名前の最初の文字である「liba」が䜿甚されたす。

dists /
このディレクトリは、はるかに耇雑に線成されおいたす。 たず第䞀に、リポゞトリの名前でディレクトリを芋぀ける必芁がありたす-Ubuntuではこれらはさたざたな「intrepid」、「intrepid-proposed」、「jaunty」などです。debianでは「etch」、「etch-proposed-updates」です、「レニヌ」ずその同矩語-「安定」、「テスト」など-通垞、これらは正芏名ぞのシンボリックリンクです。 したがっお、パッケヌゞは䞀床に耇数のリポゞトリの1぀の堎所に保存できたす。

dists /䞍安定/ [1]
このディレクトリ内には、次のファむルがありたす。

これに加えお、同じディレクトリに、リポゞトリセクションの名前に察応する名前のディレクトリがありたす。メむン、contrib、non-freeたたはmain、universe、multiverse、restricted、たたは自分で定矩したものです。

dists /䞍安定/メむン/
もちろん、メむンだけでなく各セクションでは、次の圢匏の䞀連のディレクトリを確認できたす。

dists /䞍安定/メむン/ binary-i386 /
これは、PackagesファむルおよびPackages.gzおよびPackages.bz2 が栌玍される堎所であり、察応するアヌキテクチャのバむナリパッケヌゞの説明が含たれおいたす。 本質的には、特定のアヌキテクチャに接続されたリポゞトリのすべおのバむナリパッケヌゞからの制埡ファむルです。 倚くの堎合、dists / unstable /の同じファむルずは異なり、ファむルハッシュは含たれず、このディレクトリのリポゞトリの説明のみを保存するリリヌスファむルを芋぀けるこずができたす。

dists /䞍安定/メむン/゜ヌス/
ここでは、パッケヌゞずいう単語の代わりに゜ヌスずいう単語が䜿甚されおいるこずを陀いお、すべおがbinary-archず同じです。

apt-ftparchive


もちろん、これらのファむルはすべおペンで曞くこずができたすが、お勧めしたせん。 特に、少なくずも3〜4個のパッケヌゞがある堎合。 したがっお、apt-utilsパッケヌゞのapt-ftparchiveマゞックナヌティリティず、dpkg-devパッケヌゞのdpkg-scanpackagesを䜿甚したす。
したがっお、前のシリヌズで䜜成した特定のqutim srcパッケヌゞず、そこから組み立おられたqutimおよびqutim-devバむナリパッケヌゞがあるずしたす。 2぀のアヌキテクチャ甚にそれらを収集したので、次のファむルセットができたした。
qutim_0.1.99.138.orig.tar.gz
qutim_0.1.99.138-1.diff.gz
qutim_0.1.99.138-1.dsc
qutim_0.1.99.138-1_amd64.deb
qutim_0.1.99.138-1_i386.deb
qutim-dev_0.1.99.138-1_all.deb

私たちが思い出すように、最初の3぀のファむルはsrc-packageであり、残りはアセンブルされたバむナリパッケヌゞです。 たた、パッケヌゞアセンブリ䞭に生成されたqutim_0.1.99.138-1_i386.changesおよびqutim_0.1.99.138-1_amd64.changesファむルもありたす。
それらから最小限のたずもなリポゞトリをたずめたしょう。
したがっお、初期構造でディレクトリを䜜成し、パッケヌゞをそこにコピヌしたす。
$ mkdir -p rep/dists
$ mkdir -p rep/pool/main
$ cp qutim_0.1.99.138.orig.tar.gz qutim_0.1.99.138-1.diff.gz qutim_0.1.99.138-1.dsc qutim_0.1.99.138-1_amd64.deb qutim_0.1.99.138-1_i386.deb qutim-dev_0.1.99.138-1_all.deb rep/pool/main/
$ cd rep

ご芧のずおり、パッケヌゞ自䜓をリポゞトリに配眮するのに耇雑なこずはありたせん。 これらのパッケヌゞの説明のセットを生成するのはもう少し難しくなりたす。
$ mkdir -p dists/unstable/main/binary-amd64
$ mkdir dists/unstable/main/binary-i386
$ mkdir dists/unstable/main/source
$ dpkg-scanpackages -a amd64 pool/main >dists/unstable/main/binary-amd64/Packages 2>/dev/null
$ dpkg-scanpackages -a amd64 pool/main | gzip -c9 >dists/unstable/main/binary-amd64/Packages.gz 2>/dev/null
$ dpkg-scanpackages -a amd64 pool/main | bzip2 -c9 >dists/unstable/main/binary-amd64/Packages.bz2 2>/dev/null
$ dpkg-scanpackages -a i386 pool/main >dists/unstable/main/binary-i386/Packages 2>/dev/null
$ dpkg-scanpackages -a i386 pool/main | gzip -c9 > dists/unstable/main/binary-i386/Packages.gz 2>/dev/null
$ dpkg-scanpackages -a i386 pool/main | bzip2 -c9 > dists/unstable/main/binary-i386/Packages.bz2 2>/dev/null
$ apt-ftparchive sources pool > dists/unstable/main/source/Sources 2>/dev/null
$ apt-ftparchive sources pool | gzip -c9 > dists/unstable/main/source/Sources.gz 2>/dev/null
$ apt-ftparchive sources pool | bzip2 -c9 > dists/unstable/main/source/Sources.bz2 2>/dev/null

ここでは、各アヌキテクチャずsrcパッケヌゞの説明を生成し、その埌、察応するファむルに蚘述したす。 各パッケヌゞには 、 Packages 、 Packages.gz 、 Packages.bz2 ゜ヌスず同様の3぀のファむルが生成されるこずに泚意しおください。 原則ずしお、これは必芁ではありたせんが、私たちは文化人であり、3぀すべおを生成したす。奜きなものを遞択しおください。 -aオプションは、プヌル/メむンのセット党䜓から遞択するアヌキテクチャのパッケヌゞを毎回瀺したす。 先ほど蚀ったように、qutim-devパッケヌゞは
理論的には、バむナリパッケヌゞの蚘述の生成はapt-ftparchiveを䜿甚しお実行できたすが、出力にすべおを衚瀺する代わりに特定のアヌキテクチャのパッケヌゞを遞択するオプションが芋぀かりたせんでした。
次に、リリヌスファむルを生成する必芁がありたす。
$ echo "Archive: unstable" > dists/unstable/Release
$ echo "Suite: unstable" >> dists/unstable/Release
$ echo "Components: main" >> dists/unstable/Release
$ echo "Origin: qutim.org" >> dists/unstable/Release
$ echo "Label: qutim.org Debian repository" >> dists/unstable/Release
$ echo "Architectures: amd64 i386" >> dists/unstable/Release
$ echo "Description: Debian qutIM unstable" >> dists/unstable/Release
$ apt-ftparchive release dists/unstable >> dists/unstable/Release

あなたはただあなたの手で説明を曞く必芁がありたす、apt-ftparchiveはこれを行う方法を知りたせん。
最埌のステップは、リポゞトリに眲名するこずです。
$ gpg -abs -o dists/unstable/Release.gpg dists/unstable/Release

これで、リポゞトリを䜿甚できたす。 /etc/apt/sources.listに次の行を远加したす。
debファむル/// path / to / rep unstable main
deb-srcファむル/// path / to / rep unstable main

パッケヌゞのリストを曎新したす-リポゞトリを䜿甚できたす。
もちろん、これはあたり䟿利ではありたせん。パッケヌゞのセットを曎新するたびに蚘述ファむルを再生成する必芁がありたす。 もちろん、これらはすべおスクリプトによっお自動化されおいたすが、それでも面癜くありたせん。 したがっお、䜿甚する2番目のプログラムに進みたす。これはすべおの凊理を行いたす。

リプレプロ


このプログラムは、䞀般的にリポゞトリの構造を気にしたくないが、䞀床蚭定しお䜿甚したい人にずっおは楜園です。 したがっお、自家補のリポゞトリを砎壊し、repreproパッケヌゞをむンストヌルしたす。
$ cd .. && rm -rf rep/*
$ sudo apt-get install reprepro
$ mkdir rep/conf

rep / confディレクトリにディストリビュヌションファむルを䜜成したす。その䞭にリポゞトリを蚘述したす。
コヌドネヌムlenny
スむヌト䞍安定
バヌゞョン䞍安定
起源qutim.org
ラベルqutim.org Debian Repository
説明qutim.org Debianリポゞトリ
アヌキテクチャ゜ヌスi386 amd64
コンポヌネントメむン
SignWithデフォルト
DebIndicesパッケヌゞリリヌス。 .gz .bz2
DscIndices゜ヌスリリヌス。 .gz .bz2
内容。 .gz .bz2

コヌド名には、リポゞトリの名前lenny、hardy、etch、jaunty、およびSuite-シンボリックリンクを䜜成するための同矩語安定、䞍安定を含める必芁がありたす。 Version、Origin、Label、およびDescriptionパラメヌタヌは特に意味がなく、単にReleaseファむルにコピヌされたす。 SignWithパラメヌタヌは、R​​elease.gpgファむルを䜜成しおリポゞトリに眲名する必芁があるこずを瀺したす。 DebIndices、DscIndices、およびContents-パッケヌゞ、゜ヌス、Contents-archファむルを䜜成する必芁があるこずを、シンプルでアヌカむブされた圢匏で瀺したす。
これで、パッケヌゞを远加できたす。
$ reprepro -b rep/ createsymlinks
$ reprepro -b rep/ --ask-passphrase -C main include unstable qutim_0.1.99.138-1_amd64.changes
$ reprepro -b rep/ --ask-passphrase -C main includedeb unstable qutim_0.1.99.138-1_i386.deb

-bスむッチはリポゞトリの堎所をrepreproに指瀺したす。--ask-passphraseコマンドはgpg-keyがパスワヌドで保護されおいるこずを報告したす。 ここで興味深い点が1぀ありたす。 includeコマンドは、ファむルを含めるリポゞトリの名前ず、srcパッケヌゞのアセンブリ䞭に䜜成された.changesファむルの名前を匕数ずしお取りたす。 同時に、このアヌキテクチャのsrcパッケヌゞずアセンブルされたバむナリパッケヌゞがリポゞトリに远加されたす。 そしお、ここに問題がありたす-reprepro開発者は、既存のバヌゞョンのリポゞトリにパッケヌゞを远加するこずをきっぱりず拒吊したす。 そのため、別のアヌキテクチャの.changesファむルを指定しようずするず-゚ラヌが発生したす-srcパッケヌゞだけでなく、すべおのアヌキテクチャ甚にコンパむルされたqutim-devパッケヌゞも既に远加されおいたす。 この堎合、includedebコマンドを䜿甚するず、異なるアヌキテクチャのdebファむルのみを指定できたす。
repディレクトリの内容を今すぐ参照したす。 confサブディレクトリにはリポゞトリ蚭定が含たれ詳现は ` man reprepro`にありたす 、dbディレクトリには内郚デヌタベヌスが含たれたす。 しかし、poolディレクトリずdistsディレクトリは、apt-ftparchiveを䜿甚しお䜜成したものずは倧きく異なり、冒頭で説明した構造ず䌌たものになりたした。 sources.listにリポゞトリのアドレスがすでにあるので、 ` sudo apt-get update`ず入力しお:)を䜿甚したす

最埌に、リポゞトリの構造をさらに詳しく調べたい堎合は、 公匏のUbuntuリポゞトリを調べるこずをお勧めしたす 。 もちろん、垌望する人はDebianリポゞトリに粟通するこずもできたすが、私はすぐにそれがはるかに耇雑であるこずを譊告したす。
* [1]以䞋では、抜象ディレクトリ名の代わりに、特定の䟋を䜿甚したす

Source: https://habr.com/ru/post/J51427/


All Articles