一連のファイルをインストールするdebパッケージを作成する方法


23

一連のファイルをインストールする新しいdebパッケージを作成したいと思います。可能な限り、これらのファイルを含むフォルダーをインストールの一部として既知のフォルダーの場所に展開したいと思います。それに失敗すると、ソースフォルダーとファイルをパッケージ化する方法についての知識が非常に役立ちます。

質問は-これは可能ですか?もし可能なら-どのように?

例を挙げましょう:

~/mypluginfolder/には、というファイルが含まれていますxyサブフォルダーは、という名前のabc別のファイルですz

このフォルダーをtarしたい: tar -cvf myfiles.tar ~/mypluginfolder

私のdebianパッケージは次のようになると思います

myfiles.tar.gz
myfiles+ppafoss_0.1-1/
   myfiles.tar
   DEBIAN
      changelog, compat, control, install, rules source

myfiles.tarたとえば、既知のフォルダーの場所に何らかの方法で展開することは可能ですか?

/usr/share/rhythmbox/plugins/

したがって、最終結果は次のようになります。

/usr/share/rhythmbox/plugins/mypluginfolder
/usr/share/rhythmbox/plugins/mypluginfolder\x
/usr/share/rhythmbox/plugins/mypluginfolder\y
/usr/share/rhythmbox/plugins/mypluginfolder\abc\z

ランチパッドがソースを必要とする場合、ソースフォルダーとファイルをdebパッケージ構造のどこにドロップすべきかについてのアドバイスが求められます。


これは最終的に一連の個別のランチパッドPPAパッケージになります。

私が好むのは(しかし達成できないかもしれません...)私のパッケージを最小限に保つことです-テンプレートから一連のパッケージを作成し、最小限の変更を行います(変更ログなど+ tarファイル/ファイル&フォルダ構造) 。


ええと...なぜ.debでtar抽出を行うのですか?なぜtar からソースコード取得し、ソースで最初からdebを作成しないのですか?
トーマス区

2
可能性としては、別の場所、Adobe Flashスタイルからtarballを取得することです。
jrg

@jrg。これは、tarballではなく.binインストーラーをダウンロードします。Adobeパッケージスタイルはソース(そのクローズドソース)を提供しません。ただし、概念はまだ同じです。他の場所からコードをダウンロードしてから、展開/インストールします(ここではnit = pickyをここに:P)
トーマスウォード

@LordofTime同じ違い。; p
jrg

回答:


31

以下では、ソースが開いている(Pythonスクリプトなど)ため、アーキテクチャ(amd64またはi386など)にバインドされていないため、「すべて」であると想定しています。Cソースがある場合Architecture: amd64 i386は、ソースcontrolファイルで使用する必要があります。


Launchpadの準備ができたパッケージの作成

これは最終的に一連の個別のランチパッドPPAパッケージになります。

私が好むのは(しかし達成できないかもしれませんが...)パッケージを最小限に保つことです-テンプレートから一連のパッケージを作成し、最小限の変更(changelogなど+ tarファイル)を調整します。

ランチパッドはソースパッケージのみを受け入れるためrules、正しい場所にファイルをインストールするを作成します。便宜上、debhelperを使用します。ファイルのあるディレクトリは次のようになります。

debian/changelog
debian/control
debian/rules
debian/compat
mypluginfolder/...

debian/copyrightファイルは、パッケージに関連付けられたライセンスをユーザーに知らせるために有用である可能性があります。postinst一部のファイルを抽出するだけでよいので、スクリプトは必要ないと思います。compat「8」と言うdebhelper互換性レベルを含める必要があります。(詳細については、debhelperのマニュアルページを参照しください)

changelogファイルがで編集することができますdchから、利用可能なコマンド、devscriptsパッケージ。rules(使用してdebhelperのは)含まれている必要があります。

#!/usr/bin/make -f
%:
    dh $@
override_dh_install:
    dh_install mypluginfolder/ /usr/share/rhythmbox/plugins

を使用して実行可能にしchmod 755 debian/rulesます。ソースパッケージは、を使用してビルドできますdebuild -S。必ずという名前のディレクトリに配置してください<package-name>-<version>override_動作とdhコマンドの詳細については、マニュアルページを参照してください

Debian新メンテナガイドは、私がこれを理解することが推奨読書だ、非常に貴重でした。パッケージの例はhttps://github.com/Bumblebee-Project/bumblebee-ppaにあります


既存のファイルツリーからパッケージを作成する

dpkg-deb -b既存のファイルツリーからtarballを作成するために使用できます。最初に、パッケージにちなんだ名前のディレクトリの作成から始めます。名前mypluginを付けて入れたいと思うでしょう/usr/share/rhythmbox/plugins/mypluginfolder。さらに、DEBIANパッケージ情報を保存するためのディレクトリ(大文字!)を作成します。

mkdir -p myplugin/usr/share/rhythmbox/plugins/mypluginfolder
mkdir myplugin/DEBIAN

ファイルをコピーします。

cp -r ~/mypluginsfolder myplugin/usr/share/rhythmbox/plugins

次に、パッケージを説明するいわゆる制御ファイルが必要にmyplugin/DEBIAN/controlなります。このようなファイルの内容は次のとおりです。

Package: myplugin
Version: 1.0-1
Maintainer: You <whatever@contact.address>
Architecture: all
Description: plugins for Rhythmbox
 Longer description here
 .
 As you can see, new paragraph are split by a single dot,
 and lines have to be indented by one space.

これで、オプションでパッケージの内容を確認できます。次のコマンドは、ファイルおよびディレクトリエントリの内容を一覧表示しますmyplugin

find myplugin -ls

満足したら、現在のディレクトリにパッケージをビルドします。

dpkg-deb -b myplugin .

<package>_<version>_<architecture>.debこの例のように名前が付けられた新しいファイルが表示されますmyplugin_1.0-1_all.deblessプログラムを使用して、ファイルを覗くことができます。たとえば、less myplugin_1.0-1_all.deb


3
絶対的な天才+1-お礼を言います。ありがとう!
fossfreedom

この大きな助けをありがとう!制御ファイルに問題がありましたが、最終的には機能しましたが、どうすればよいか聞かれません;)
ゲルハルトバーガー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.