DEBの解凍、ポストインストの編集、DEBの再パッケージ化

DEBの解凍、ポストインストの編集、DEBの再パッケージ化

IntelのOpenCL SDKをインストールしようとしましたが、DEBファイルがRPMから変換されるというエラーが発生します。ここ気になる方のために)。postinst彼らが提供するDEBでスクリプトを編集する必要があります。

既存のDEBをインポートしてコンテンツ(制御情報を含む)を抽出し、コンテンツを再パッケージして新しいDEBを作成するにはどうすればよいですか?ファイルの編集だけでファイルの追加や削除は行いません。

答え1

debパッケージを操作する主なコマンドは次のとおりです。dpkg-deb

パッケージを解凍するには、空のディレクトリを作成してそのディレクトリに変更してから、実行してdpkg-deb制御情報とパッケージファイルを抽出します。パッケージを再構築するために使用されますdpkg-deb -b

mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb

スクリプトを root として実行しないと、抽出段階でファイルの権限と所有権が破損します。これを防ぐ1つの方法は、以下のスクリプトを実行することです。fakeroot。プロセスはそのまま作成できないファイルの権限を持つメモリを保持するため、各シーケンスを個別に実行するのではなく、シーケンス全体を実行する必要がありfakerootます。dpkg-debfakeroot

fakeroot sh -c '
  mkdir tmp
  dpkg-deb -R original.deb tmp
  # edit DEBIAN/postinst
  dpkg-deb -b tmp fixed.deb
'

権限を操作する代わりに、データアーカイブをそのまま維持し、制御アーカイブのみを変更できます。dpkg-debこれを行う方法は提供されません。幸いなことに、debパッケージは標準形式に従います。arファイル。したがって、を使用arして制御アーカイブを抽出し、そのファイルを変更してから、ar制御アーカイブを新しいバージョンに置き換えることができます。

mkdir tmp
cd tmp
ar p ../original.deb control.tar.gz | tar -xz
# edit postinst
cp ../original.deb ../fixed.deb
tar czf control.tar.gz *[!z]
ar r ../fixed.deb control.tar.gz

あなたはする必要があります1つ追加ログエントリの変更そして変化バージョン番号パッケージの内容を変更した場合。 Debianパッケージを運用するためのインフラストラクチャは、両方のパッケージの名前とバージョンが同じ場合は同じパッケージであると想定しています。サフィックスの追加debian_revisionバージョン番号の末尾の部分。注文の理由から、サフィックスはで始まる~必要1.2.3-4.1があります1.2.3-4.1~johnjumper1

シェルツールを使用する代わりにEmacsを使用できます。これdpkg-dev-elパック(これはデフォルトのDebianパッケージなので、独自のアップストリームです。).debファイル編集とDebian変更ログを編集するためのモードが含まれています。 Emacsはインタラクティブに使用することも、スクリプトとして使用することもできます。

答え2

あなたはそれを使用することができますフッ素PMオプションで、スクリプトを次のように--after-install置き換えることができます。postinst

fpm -e --after-install ../DEBIAN/postinst.new -s deb -t deb ../old.deb

答え3

.debファイルからファイルを抽出したい場合は、7-Zipが便利です。 7-Zipは「ar」ファイルの「圧縮解除」のみをサポートします。 (ファイル名を変更する必要はありません。*.debが「ar」で開き、内部的に「data.tar」と表示されます。)

関連情報