DEBファイルを手動で作成する方法は?


46

DEBファイルを手動で作成したい。インストールするデータを含むフォルダーと、インストール後に実行されるスクリプトを提供したいだけです。

これは可能ですか?


あなたが選択した非常に良い答えはありませんか?
ギガメグ

@Davidは、実際には "dpkg-deb"で作成しました。はるかに簡単です。そのため、Gillesを選択しました。パッケージフォルダー内のファイルを一覧表示することで、そこに配置するファイルを明確に表示できます。だから私は彼の答えが良いと思う
デイジー

パッケージ内のすべてのファイルもリストしています。
ギガメグ

11
@Davidつまり、彼の答えは派生物だと主張することは一つのことですが、「あまり良い答えではない」のですか?ジルの答えは素晴らしい。あなたの答えが最初だったかどうかは関係ありません、彼ははるかに完全です。そして、既存の回答を取得し、それを拡張することには何の問題もありません。それは良いことです
マイケルMrozek

回答:


57

ソースパッケージの作成

ソースパッケージを作成することをお勧めします。build-essentialdebhelperdh-makeをインストールします。インストールするファイルがあるディレクトリに移動し(ディレクトリ名は、Myapp V4.2を初めてパッケージ化する場合などの形式$PACKAGE-$VERSIONである必要がありmyapp-4.2-1ます)、実行しdh_make --createorigます。質問に答える。Debhelperはdebian、いくつかの必須ファイルとオプションファイルのテンプレートの両方と呼ばれるサブディレクトリにファイルを生成することにより、パッケージの構築に必要な基本インフラストラクチャを作成します。これらのファイルの一部を変更する必要がある場合があります。

  • 編集debian/rulesして、ビルドが必要なものをビルドし、適切な場所にファイルをインストールします。いくつかのファイルをコピーするだけで、コンパイルdebian/installする必要がない場合は、ファイルを編集して、どのファイルをどこにインストールする必要があるかを指定してください。
  • 編集debian/copyrightして、パッケージに関するライセンス情報と最新バージョンの入手先に関する情報を追加します(関連する場合)。
  • 編集debian/changelogして、ITPへの参照を削除します(Debianプロジェクトで作業している場合にのみ関連します)。名前debian/postinst.exを変更しdebian/postinst、インストール後のコマンドをそこに追加します。後でパッケージを更新する場合は、実行debchange -iしてchangelogエントリを追加するか、Emacsでファイルを編集します(dpkg-dev-elがインストールされている場合)。

実行dpkg-buildpackage -rfakeroot -us -ucして.debパッケージをビルドします(-us -ucPGPキーでパッケージに署名する場合は削除します)。

バイナリパッケージを直接作成する

ソースパッケージからビルドせずに直接バイナリパッケージを作成することにした場合、プロセスを容易にするツールがそれほど多くないため、それほど簡単ではありません。debパッケージの形式に関する基本的な知識が必要です。Debianポリシーマニュアル、特にchで説明されています3(バイナリパッケージの形式)ch。5(制御ファイル)ch。6(インストールスクリプト)および付録B(バイナリパッケージ操作)

パッケージが期待されるファイル/usr/share/doc/copyright(パッケージの内容のライセンス、およびパッケージの最新バージョンの場所を/usr/share/doc/changelog.Debian.gz含む)および(debパッケージの変更ログを含む)をインストールすることを確認します。パッケージを社内でのみ使用する場合は、これらは必要ありませんが、持っている方が良いでしょう。

Debianおよび派生物について

Debianツールを利用できる場合は、を使用dpkg-debしてパッケージを構築します。インストールするデータを含むディレクトリにDEBIAN、制御ファイルとメンテナースクリプトを含むトップレベルで呼び出されるディレクトリを追加します。

$ ls mypackage-42
DEBIAN etc usr var
$ dpkg-deb -b mypackage-42

難しい方法

Debianツールをお持ちでない場合は、パッケージ化data.tar.gzするファイルのアーカイブを作成し、制御ファイルの別のアーカイブcontrol.tar.gz(サブディレクトリなし)を作成し、テキストファイルを呼び出してテキストを保存debian-binaryします2.0

cd mypackage-42
tar czf ../data.tar.gz [a-z]*
cd DEBIAN
tar czf ../../control.tar.gz *
cd ../..
echo 2.0 > debian-binary
ar r mypackage-42.deb debian-binary control.tar.gz data.tar.gz

あなたは少なくとも必要な制御ファイルのフィールドを持つPackageMaintainerPriorityArchitectureInstalled-SizeVersion、、必要な依存関係の宣言を。

インストール後に実行されるスクリプトが呼び出されpostinstます。必ず実行可能にしてください。それは一緒に行きcontrolます。

バイナリパッケージを別の形式から変換する

別のディストリビューションのバイナリパッケージが既にある場合は、alienを使用して変換できます。


3
IMOそれは私のanwserからのコピーですか?どう思いますか?
ギガメグ

1
答えは、OPがemacsの使用方法を知っていることを前提としています。ここでemacsは本当に必要ですか?変更ログを編集するには、を使用できると思いますdch -i
ファヒムミタ

arそうでtarはないことは何ですか?
mmstick

@mmstickこれは別の形式です。deb形式の設計者がここでarを使用することを選択した理由はわかりません。
ジル 'SO-悪であるのをやめる'

1
dh_make --createorig使用する名前と電子メールを変更する場合は、事前に変更する必要がexport DEBEMAIL="me@example.com"ありexport DEBFULLNAME="Firstname Lastname"ます。
ライアン

10

まず、ビルドフォルダーとファイルのアーカイブを作成する必要があります。 tar czvf data.tar.gz files

次に、ビルドフォルダーで、必要な情報を含む制御ファイルを作成する必要があります。

 Package: xxxxxx
 Version: 0.0.1
 Section: user/hidden 
 Priority: optional
 Architecture: armel
 Installed-Size: `du -ks usr|cut -f 1`
 Maintainer: Your Name <xxx@xxx.xx>
 Description: This is optional, but creates warnings if left out

次に、preinst、postint、prerm、postrmシェルスクリプトを個別に追加して、.debファイルのインストール前後の動作および削除前後の動作を制御し、tarを使用して制御アーカイブを作成できます。 tar czvf control.tar.gz control preinst postinst prerm postrm

次に、debian-binaryファイルが必要ですecho 2.0 > debian-binary。ビルドフォルダーには、次のファイルがdebian-binary control.tar.gzありdata.tar.gzます。

最後にar、.debファイルを作成するパッケージが必要です。ar -r xxx.deb debian-binary control.tar.gz data.tar.gz


1
それについてar -r xxx.deb debian-binary control.tar.gz data.tar.gzは、順序が重要であることを強調する価値があります。データよりも先に制御を行う必要があります。
Hibou57

@Bytemain、トップの投票された回答は、実際にはテキストに部分的に基づいていますが、詳細が追加され、読みやすくなっています。コピー/貼り付けが可能なシーケンスにより、特にハンサムになります。
マリオトモ

3

私は多くのパッケージを実行しますが、完全なパッケージを実行するのは簡単なことではありません。前向きな注意として、ファイルとスクリプトの作業ははるかに少ないです。debreateと呼ばれるツールを使用して、非常に簡単にこのようなパッケージを作成できます。

Debreateは、シンプルなDEBパッケージを作成するための、本当にシンプルなGUIです。ポスト/プレインストール/アンインストールで実行するファイル、実行先、実行するファイルを指定することができます。以前はすべてのパッケージを標準的な方法で実行していましたが、このツールの使用を開始した後は、必要な場合にのみ戻ります。



1

Ubuntuパッケージを使用して、DebianでZimbra 7を実行します。(私は頑固で、Ubuntu専用のZimbraのリリースにもかかわらずDebian> bUbuntuが好きです。)以前どのようにこれを回避したかはわかりません。

mkdir new
for i in *.deb
 do echo `date`: working on $i
 ar x $i
 cd control
 rm * 2> /dev/null
 tar -xzpvf ../control.tar.gz
 tr "_" "-" < control > control2
 mv -v control2 control
 tar -czpvf ../control.tar.gz .
 cd ..
 ar r new/$i debian-binary control.tar.gz data.tar.gz
done
rm -rf debian-binary control.tar.gz data.tar.gz control

すべての新しい.debファイルはにありnew/ます。

:これはsqueezeにありました-wheezyのdpkgには--force-bad-versionがあります。


1

パッケージをすばやく作成するには、checkinstallプログラムを使用できます。プログラムをインストールし、変更を監視し、debまたはrpmパッケージを作成します。


これは、ソースからインストールする必要があるパッケージを追跡するための素晴らしいオプションのように思えます。詳細を教えてください。たとえば、インストールの過程で、シンボリックリンクの変更、ファイルの削除、設定ファイルの編集、デーモンの追加などを行うことができます。出力を簡単に変更して、prermおよびpostrmスクリプトを追加できますか?
AatG

wiki.debian.org/CheckInstallインストール時に物事を変更したい場合は-最も簡単な方法は、セクションをインストール変更するMakefileを修正しています。prerm / postrm-変更する方法が見つかりませんでした。簡単なアンインストールを許可するのは、小さなプログラムのためだけです。
未定義

-4
$ apt-get install build-essential dh-make debhelper devscripts
$ wget http://nmap.org/dist/nmap-LAST.tar.bz2
$ tar xf nmap-LAST.tar.bz2
$ cd nmap-LAST
$ dh_make -s -e youremail@site.org -f ../nmap-LAST.tar.bz2
$ apt-get install libgtk2.0-dev flex bison libpcap0.8-dev \
  libpcre3-dev binutils-dev python-all-dev
$ dpkg-buildpackage
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.