もう䞀床debパッケヌゞに぀いお

Debパッケヌゞは、特に䜿甚方法がわかっおいる堎合に非垞に䟿利なツヌルです。 この件に関する私自身の経隓を共有しようず思いたす。

準備する


debパッケヌゞの䜜成を開始するには、いく぀かのパッケヌゞをむンストヌルする必芁がありたす。

$ sudo apt-get install dh_make 

゜ヌスフォルダヌの準備


dh_makeおよびその他のナヌティリティが゜ヌスフォルダヌで機胜するためには、特定の圢匏にする必芁がありたす。

フォルダヌの名前はパッケヌゞ名にする必芁がありたす。 ぀たり プログラムバヌゞョン0.1のPluginsフォルダヌがある堎合、 plugins-0.1ずいうフォルダヌを䜜成したす。

 $ ls VKSPlugins $ mv VKSPlugins/ libvksplugins-0.1 $ ls libvksplugins-0.1 

次に、このフォルダヌでアヌカむブを䜜成する必芁がありたす。 アヌカむブには、名前に* .orig.tar.gzが含たれおいる必芁がありたす。

 $ tar -zcf libvksplugins_0.1.orig.tar.gz libvksplugins-0.1 $ ls libvksplugins-0.1 libvksplugins_0.1.orig.tar.gz 

最埌の準備手順は、゜ヌスフォルダヌに倚くのナヌティリティファむルを含むdebianフォルダヌを䜜成するこずです。 これを行うには、次のコマンドを実行する必芁がありたす。

 $ cd libvksplugins-0.1/ $ dh_make Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch? [s/i/m/l/k/n] l Maintainer name : User Name Email-Address : user@name.ru Date : Wed, 19 Aug 2015 14:55:53 +0300 Package Name : libvksplugins Version : 0.1 License : blank Type of Package : Single Hit <enter> to confirm: Skipping creating ../libvksplugins_0.1.orig.tar.gz because it already exists Done. Please edit the files in the debian/ subdirectory now. plugins uses a configure script, so you probably don't have to edit the Makefiles. 

このコマンドを実行するプロセスでは、䜜成するアヌカむブの皮類に぀いお質問されたす。最も単玔なものは単䞀です。

パッケヌゞタむプに぀いお
実際、ドキュメントには、1぀のオプションのみが遞択されおいるず曞かれおいたす。 なぜなら タむプラむブラリのパッケヌゞのすべおの芁件を理解するこずはできたせんでしたが、結果に満足しおいたす 。タむプラむブラリのパッケヌゞに぀いおの説明が続きたす 。

パッケヌゞのセットアップ


すべおのパッケヌゞ蚭定は、 debianディレクトリ内のファむルを線集するこずにより行われたす。 䜿甚するファむルを怜蚎しおください。


これらのファむルに加えお、倚くの* .exファむルがdebianフォルダヌに䜜成されたすが、これはさたざたな蚭定の䟋ですが、それらは䜿甚しないため、削陀する必芁がありたす。

倉曎ログ


このファむルには、パッケヌゞの倉曎履歎ず珟圚のパッケヌゞバヌゞョンが含たれおいたす。 その内容を芋おみたしょう

 $ cat changelog libvksplugins (0.1-1) unstable; urgency=low * Initial release (Closes: #nnnn) <nnnn is the bug number of your ITP> -- User Name <user@name.ru> Wed, 19 Aug 2015 15:03:51 +0300 

最初はパッケヌゞの名前-libvksplugins 、次にそのバヌゞョンです。 バヌゞョンは、蚘号「-」で2぀の郚分に分かれおいたす。 最初の郚分はパッケヌゞ内のプログラムのバヌゞョンを瀺し、2番目の郚分はパッケヌゞの「リビゞョン」を瀺したす。 リビゞョンはパッケヌゞバヌゞョンです。 そのようなパッケヌゞが以前になかった堎合、リビゞョンは1です。このバヌゞョンのプログラムを含むパッケヌゞがすでに存圚しおいたが、そこに倉曎があった堎合、リビゞョンは増加したす。

䞍安定ずいう蚀葉は、パッケヌゞが安定しおいないこずを瀺したす。 ナヌザヌマシンでは適切にテストされおいたせん。

urgency = lowずいう語は、倉曎の緊急性を瀺したす。 なぜなら 緊急性がない堎合、倀は䜎くなりたす。 深刻な脆匱性たたぱラヌを修正するパッケヌゞを䜜成しおいる堎合、倀をhighに蚭定できたす。

最初の行が空の行の埌に、最初の゚ントリが続きたす。

 * Initial release (Closes: #nnnn) <nnnn is the bug number of your ITP> 

Debianでは、゜フトりェア補品の゚ラヌ远跡システムの゚ラヌを自動的に閉じるためにchangelogが䜿甚されたす。 なぜなら この堎合、私はそのようなシステムを䜿甚せず、この行は次の圢匏を取りたす。

* Initial release

発蚀
lintianプログラムでパッケヌゞをチェックするずき、 Closes#XXXXがないず゚ラヌず芋なされたす。

最埌の行は、録音を行った人の眲名です。 名前ず䜏所、および倉曎日が含たれおいたす。

debパッケヌゞをむンストヌルするず、倉曎ログファむルが次の堎所にむンストヌルされたす。

/usr/share/doc/<>/changelog.Debian.gz

制埡


debian /制埡ファむルは、debパッケヌゞを䜜成するずきのメむン蚭定です。 そのようなファむルの䟋を次に瀺したす。

 $ cat control Source: libvksplugins Priority: optional Maintainer: User Name <user@name.ru> Build-Depends: debhelper (>= 9), cmake Standards-Version: 3.9.5 Section: libs Homepage: <insert the upstream URL, if relevant> #Vcs-Git: git://anonscm.debian.org/collab-maint/plugins.git #Vcs-Browser: http://anonscm.debian.org/?p=collab-maint/plugins.git;a=summary Package: libvksplugins-dev Section: libdevel Architecture: any Depends: libvkspluginsBROKEN (= ${binary:Version}), ${misc:Depends} Description: <insert up to 60 chars description> <insert long description, indented with spaces> Package: libvkspluginsBROKEN Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: <insert up to 60 chars description> <insert long description, indented with spaces> 

ファむルは空の行を䜿甚しおセクションに分割されおいるこずがわかりたす。 各セクションでは、゜ヌスフォルダヌから䜜成された1぀のパッケヌゞに぀いお説明したす。 それらを順番に考えおみたしょう

゜ヌスこのセクションでは、゜ヌスパッケヌゞを䜜成する必芁があるず述べおいたす。 指定されたパラメヌタヌはlibvksplugins です 。぀たり、゜ヌスパッケヌゞはlibvkspluginsず呌ばれたす 。

優先床このセクションでは、パケットの優先床を蚭定したす。 なぜなら システムは新しいパッケヌゞがなくおもうたくいくので、セクション倀はoptionalに蚭定されたす 。 ぀たり このパッケヌゞはむンストヌルには必芁ありたせん。 優先順䜍に぀いおはこちらをご芧ください 。

メンテナヌこのセクションでは、パッケヌゞの䜜成者の連絡先に぀いお説明したす。 その圢匏は非垞に単玔で、远加の説明は䞍芁です。

Build-Dependsパッケヌゞの䟝存関係をむンストヌルする最も重芁なセクションの1぀。 パッケヌゞをアセンブルするには、このセクションで指定された䟝存関係を満たす必芁がありたす。 ぀たり アセンブリずむンストヌルの䟝存関係のリストは異なる堎合がありたす。

䟝存関係はdebhelper> = 9、cmakeであるこずがわかりたす。 debhelper䟝存関係> = 9は 、デフォルトですべおのパッケヌゞに蚭定されおいたす。 dh_ *圢匏のプログラムを正しく動䜜させるために必芁です。

゜ヌスフォルダヌにCMakeLists.txtファむルが含たれおいたため、2番目のcmake芁玠が远加されたした。 アセンブリには、 CMakeアセンブリシステムが䜿甚されたす。 プログラムの䟝存関係を調べるには、そのドキュメントを読むこずができたす。 たたは、 dpkg-depcheckコマンドを䜿甚できたす。 このコマンドは次のように実行する必芁がありたす。

 $ dpkg-depcheck -d ./configure 

しかし、なぜなら CMakeを䜿甚する堎合、構成スクリプトはありたせん。次のように䜿甚したす。

 $ mkdir build && cd build $ dpkg-depcheck -d cmake ../ ..... Packages needed: libxml2:amd64 cmake libkrb5support0:amd64 language-pack-ru-base libnettle4:amd64 ..... libedit2:amd64 libtasn1-6:amd64 qt4-qmake libgssapi-krb5-2:amd64 libhcrypto4-heimdal:amd64 ..... libroken18-heimdal:amd64 libsqlite3-0:amd64 libqt4-dev libssl1.0.0:amd64 ..... 

ここで泚目すべき点は次のずおりです。

cmake
qt4-qmake
libqt4-dev

残りはデヌタの䟝存関係です。 さらに、cmakeはすでにビルドの䟝存関係のリストに含たれおいたす。 原則ずしお、そのたたにするか、䜿甚するバヌゞョンを指定できたす。

 $ apt-cache show cmake | grep Version: Version: 2.8.12.2-0ubuntu6 

同時に、䜿甚するcmakeのバヌゞョンがCMakeLists.txtに瀺されたす。

 $ cat CMakeLists.txt | grep cmake_minimum cmake_minimum_required(VERSION 2.8.4) 

開発者の方がよく知っおいるず思うので、CMakeLists.txtからバヌゞョンを瀺したす。 Qt 4では、バヌゞョン番号ですべおが明確になっおいたすが、良心を明確にするために、バヌゞョンを確認したす。

 $ apt-cache show qt4-qmake | grep Version: Version: 4:4.8.6+git49-gbc62005+dfsg-1ubuntu1.1 Version: 4:4.8.6+git49-gbc62005+dfsg-1ubuntu1 $ apt-cache show libqt4-dev | grep Version: Version: 4:4.8.6+git49-gbc62005+dfsg-1ubuntu1.1 Version: 4:4.8.6+git49-gbc62005+dfsg-1ubuntu1 

぀たり Qt 4では、バヌゞョン4.8.6を指定したす。

 Build-Depends: debhelper (>= 9), cmake (>= 2.8.4), qt4-qmake (>= 4.8.6), libqt4-dev (>= 4.8.6) 

Standards-Versionファむルが䜜成された暙準のバヌゞョン。 この倀を倉曎する必芁はありたせん。

セクション パッケヌゞのセクション、぀たり 単䞀のタスクを実行するパッケヌゞのグルヌプ。 Debianポリシヌセクション2.4は、この問題をより詳现に説明しおいたす。

ホヌムペヌゞプロゞェクトホヌムペヌゞ 。 なぜなら このコヌドを䜜成したしたが、ペヌゞはありたせん。この行を削陀しおください。

Vcs- *プロゞェクトリポゞトリぞのリンク。 どちらも持っおいないので、これらの行を削陀したす。

その他のパッケヌゞ゜ヌスパッケヌゞが蚘述されおいるファむルセクションの埌に、゜ヌスパッケヌゞから䜜成された他のパッケヌゞを蚘述するセクションがありたす。 パッケヌゞ䜜成スキヌム



図から、プログラムの゜ヌスから、4぀のパッケヌゞを取埗したいこずがわかりたす。


問題は、なぜそんなに倚くのパッケヌゞがあるのですか stackoverflow.comの関連する議論を読んだ堎合、パヌティションの䞻なアむデアは、ほずんどのナヌザヌがヘッダヌファむルずドキュメントを必芁ずしないずいうこずです。そのため、これらのファむルを分離するこずで、プログラムのネットワヌク負荷ずむンストヌル速床を枛らすこずができたす。

この質問に察する私の個人的な答えは、そのようなパヌティションは、それをどのように䜿いたいかに応じおプログラムを構造化するのに圹立぀ずいうこずです。 開発のために、devパッケヌゞを配眮したすが、䜿甚するためではありたせん。

䞊蚘のパッケヌゞに加えお、プログラムのデバッグビルドでdbgパッケヌゞを䜜成できたす。 これは、プログラムがクラッシュし、手元にデバッガがある堎合に䟿利です。 しかし、私はただこれを行う方法を理解できたせんでした。 ドキュメントはこの質問に答えおいたせん。 あなたがそれで説明されおいるようにするず、空のパッケヌゞを取埗するか、アセンブリ䞭に倧量の゚ラヌを取埗したす。

䞊の図の図は、゜ヌスパッケヌゞがlibvksplugins_sourceず呌ばれおいるこずを瀺しおいたすが、制埡ファむルは゜ヌスパッケヌゞがlibvkspluginsず呌ばれるこずを瀺しおいたす。 実際、実際にはlibvkspluginsず呌ばれ、バむナリを含むパッケヌゞはlibvksplugins ... debず呌ばれたす 。 この混乱の本質は、゜ヌスパッケヌゞがtarアヌカむブずサヌビスファむルであり、バむナリパッケヌゞがdeb拡匵子を持぀アヌカむブであるこずです。

ラむブラリパッケヌゞの構成ラむブラリパッケヌゞの説明を泚意深く芋おみたしょう。

Package: libvksplugins
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Library for creating plugins with VKS 2
This library provides a mechanism for creating plugins
to use in project VKS 2.

Architectureパラメヌタヌは、ビルドされるパッケヌゞのアヌキテクチャを蚭定したす。 倀anyは、バむナリをアセンブルした埌、必芁なアヌキテクチャがビルドシステムに眮き換えられるこずを意味したす。 ぀たり 64ビットマシンでは、パッケヌゞ..._ amd64 ...を取埗し、32ビットマシンでは..._ i386 ...を取埗したす。

スクリプトたたはテキストを含むパッケヌゞの堎合、倀をallずしお指定する必芁がありたす。

3行目は、䜜成されるパッケヌゞの䟝存関係を説明しおいたす。 Debian初心者向け開発者ガむドの第4章で説明されおいる方法は次のずおりです。
dh_shlibdepsナヌティリティは、共有ラむブラリのバむナリパッケヌゞの䟝存関係を蚈算したす。 ELF実行可胜ファむルず共有ラむブラリのリストを生成し、各バむナリパッケヌゞに぀いお芋぀けたす。 このリストは、 $ {shlibsDepends}の代わりに䜿甚されたす。

dh_perlナヌティリティは、Perlの䟝存関係を蚈算したす。 各バむナリパッケヌゞのperlたたはperlapi䟝存関係のリストを生成したす。 このリストは、 $ {perlDepends}に眮き換えられたす。

䞀郚のdebhelperパッケヌゞコマンドは、生成されたパッケヌゞに䟝存関係を远加する堎合がありたす。 各コマンドは、各バむナリパッケヌゞに必芁なパッケヌゞのリストを生成したす。 このリストは
$ {miscDepends} 。

dh_gencontrolナヌティリティは、バむナリパッケヌゞごずにDEBIAN /制埡ファむルを生成し、 $ {shlibsDepends} 、 $ {perlDepends} 、 $ {miscDepends}などを結果の倀に眮き換えたす。

぀たり この行は、パッケヌゞコレクタヌが䟝存関係を決定するこずを瀺しおいたす。

このセクションの最埌のセクションは、パッケヌゞの説明です。 最初の行には簡単な説明が含たれ、埌続の行にはより詳现な説明が含たれたす。 詳现な説明には、特定の圢匏が必芁です。


ヘッダヌファむルパッケヌゞのセットアップヘッダヌファむルを含むパッケヌゞはlibvksplugins-devず呌ばれたす。その説明は次のずおりです。

Package: libvksplugins-dev
Section: libdevel
Architecture: any
Depends: libvksplugins (= ${binary:Version}), ${misc:Depends}
Description: Development package for libvksplugins
This package provides development files for
library libvksplugins.
.
Also, it contains pkg-config file, to use.

この䟋では、 Depends行が興味深いです。 このパッケヌゞはlibvkspluginsラむブラリのパッケヌゞに䟝存するこずを瀺し、 = $ {binaryVersion} は、バむナリパッケヌゞず開発パッケヌゞのバヌゞョンの厳密な䞀臎が必芁であるこずを瀺したす。 ヘッダヌファむルはバむナリに厳密に察応する必芁があるため、これは重芁なポむントです。

ドキュメントパッケヌゞのセットアップラむブラリず䞀緒にドキュメントが提䟛されるため、個別のパッケヌゞになりたす。その説明を远加したす。

Package: libvksplugins-doc
Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Documentation for libvksplugins
Package contains html documentation files for libvksplugins

ここですべおが明確になるはずです。

ルヌル


このファむルは、パッケヌゞをビルドするためのMakefileに類䌌しおいたす。 デフォルトでは、次の圢匏で䜜成されたす。

 $ cat rules #!/usr/bin/make -f # See debhelper(7) (uncomment to enable) # output every command that modifies files on the build system. #DH_VERBOSE = 1 # see EXAMPLES in dpkg-buildflags(1) and read /usr/share/dpkg/* DPKG_EXPORT_BUILDFLAGS = 1 include /usr/share/dpkg/default.mk # see FEATURE AREAS in dpkg-buildflags(1) #export DEB_BUILD_MAINT_OPTIONS = hardening=+all # see ENVIRONMENT in dpkg-buildflags(1) # package maintainers to append CFLAGS #export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic # package maintainers to append LDFLAGS #export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed # main packaging script based on dh7 syntax %: dh $@ # debmake generated override targets # This is example for Cmake (See http://bugs.debian.org/641051 ) #override_dh_auto_configure: # dh_auto_configure -- \ # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH) 

これは、Makefile構文のbashスクリプトであるこずがわかりたす。 ここで唯䞀面癜いデザむンは

 %: dh $@ 

これは、すべおの目的でdhコマンドを呌び出しお匕数を枡すテンプレヌトです。 パッケヌゞをビルドするには、テキストdh $ @をタブ文字で読むこずが重芁です。 ぀たり むンデントはスペヌスではなく、集蚈です。

なぜなら ゜ヌスはCMakeビルドシステムを䜿甚するため、この゚ントリを次のように倉曎する必芁がありたす。

 %: dh $@ --buildsystem=cmake 

パッケヌゞ内容


debian / controlでどのパッケヌゞを受け取りたいかを指定した埌、どのファむルをどのパッケヌゞに入れるかを指定する必芁がありたす。 これを行うには、 制埡ファむルのパッケヌゞ名ごずに、 debianフォルダヌに2぀のファむルを䜜成する必芁がありたす。 最初のパッケヌゞはパッケヌゞ 、 Dirs 、2番目のパッケヌゞはInstallず呌ばれたす 。 ファむルの本質は、最初にパッケヌゞ甚に䜜成するフォルダヌを瀺し、2番目にパッケヌゞに含めるファむルを瀺すこずです。

それらの内容を芋おみたしょう

 $ cat libvksplugins-dev.dirs usr/lib usr/include $ cat libvksplugins-dev.install usr/include/* usr/lib/lib*.a usr/lib/lib*.so usr/lib/pkgconfig/* usr/share/pkgconfig/* 

重芁なポむントは、パスに最初の分数がないこずず、フォルダヌぞのパスの最埌に分数がないこずです。 CMakeがラむブラリファむルをむンストヌルする堎所を確認した埌、次のファむルを䜜成できたす。

 $ for item in $(ls libvksplugins*); do echo "$item:"; cat $item; done libvksplugins-dev.dirs: usr/include/dep572 usr/lib/pkgconfig libvksplugins-dev.install: usr/include/dep572/plugins/* usr/lib/dep572/lib*.so usr/lib/pkgconfig/* libvksplugins.dirs: usr/lib/dep572 libvksplugins-doc.dirs: usr/share/doc/libplugins-0.1 libvksplugins-doc.install: usr/share/doc/libplugins-0.1/*.tgz libvksplugins.install: usr/lib/dep572/lib*.so.* 

セットアップの完了


なぜなら 私の゜ヌスでは、远加の説明や著䜜暩の制限はないので、debianディレクトリからすべおの䜙分なファむルを削陀したす。

パッケヌゞアセンブリ


蚭定埌、パッケヌゞのアセンブリは非垞に簡単です。プロゞェクトフォルダヌdebianサブフォルダヌを含むでコマンドを実行する必芁がありたす。

 $ dpkg-buildpackage -rfakeroot -us -uc 

-us -ucオプションは、䜜成されたパッケヌゞにgpgキヌで眲名する必芁がないこずを瀺したす。 デフォルトのgpg眲名キヌが蚭定されおいる堎合、これらは省略できたす。 デフォルトの眲名キヌの指定方法がわかりたせんでした。 すべおがうたくいけば、䞊のフォルダにたくさんのパッケヌゞがありたす

 $ ls -l ../  748 drwxrwxr-x 10 user user 4096 . 20 10:46 libvksplugins-0.1 -rw-rw-r-- 1 user user 2210 . 20 10:47 libvksplugins_0.1-1_amd64.changes -rw-r--r-- 1 user user 6418 . 20 10:47 libvksplugins_0.1-1_amd64.deb -rw-rw-r-- 1 user user 1504 . 20 10:46 libvksplugins_0.1-1.debian.tar.xz -rw-rw-r-- 1 user user 1008 . 20 10:46 libvksplugins_0.1-1.dsc -rw-rw-r-- 1 user user 36713 . 19 14:52 libvksplugins_0.1.orig.tar.gz -rw-r--r-- 1 user user 3262 . 20 10:47 libvksplugins-dev_0.1-1_amd64.deb -rw-r--r-- 1 user user 699564 . 20 10:47 libvksplugins-doc_0.1-1_all.deb 

おわりに


ここたで読んだこずがあれば、読むのが倧奜きです。

このテキストは、職堎でdebパッケヌゞを実装した私の経隓の結果です。 ネットワヌクリポゞトリrepreproの存圚ず泚意深いバヌゞョントラッキングにより、Astra Linux 1.3、1.4、およびElbrus OSシステムを備えた30台のマシンでさたざたな゜フトりェアバヌゞョンを簡単に曎新およびテストできるこずが経隓からわかっおいたす。

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


All Articles