IntelのOpenCLSDKをインストールしようとしていますが、DEBファイルはRPMからのバグのある変換です(を参照)。 ここに興味があります)。提供されているDEBのpostinstスクリプトを編集する必要があります。

既存のDEBを取得し、コンテンツ(制御情報を含む)を抽出してから、後でコンテンツを再パッケージ化して新しいDEBを作成しますか?ファイルを編集するだけで、ファイルを追加または削除することはありません。

コメント

  • 解凍部分は深夜の司令官(apt install mc)— debファイルでEnterキーを押すだけです

回答

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-debは、ファイルのアクセス許可のメモリをそのまま保持するプロセス。

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を使用してコントロールアーカイブを新しいバージョンに置き換えます。

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 

変更ログエントリを追加し、 バージョン番号 パッケージ内の何かを変更した場合。Debianパッケージを操作するインフラストラクチャは、2つのパッケージに同じ名前とバージョン、それらは同じパッケージです。バージョン番号の最後にある debian_revision 部分にサフィックスを追加します。並べ替えの理由から、サフィックスは~で始まる必要があります。例: 1.2.3-4.11.2.3-4.1~johnjumper1になります。

シェルツールを使用する代わりに、Emacsを使用できます。 dpkg-dev-elパッケージ(これはネイティブDebianパッケージであるため独自のアップストリームです)には、

ファイルとDebian変更ログの編集。 Emacsはインタラクティブに使用することもスクリプトで使用することもできます。

コメント

  • -eスイッチを使用することもできます。 fpm を使用して、制御ファイルを変更します:fpm -e -s deb -t deb ../old.deb。これにより、エディタで制御ファイルが開きます。
  • ところで、fakeroot bashコマンドを発行しようとすると、所有権に関しては機能しません。arメソッドは大きなdebファイルに対して信じられないほど高速です!
  • ありがとう。これは役に立ちました。 dpkg-deb -Rを使用すると、モードは維持され、dpkg-deb -bは抽出されたファイルのuid:gid0:0。 '偽のルートは必要ありませんでした(アーカイブ内にset {u、g} idファイルがある場合は問題が発生する可能性がありますが、それは' tです。
  • @PSkocik setxidファイルだけでなく、たとえば/etcまたは/var特定のグループに属する必要があります。
  • すばらしい回答をありがとうございます。再構築されたパッケージと元のパッケージのmd5sumが同じであることを確認する方法はありますか?

回答

fpm をividで使用できます次のように、postinstスクリプトを置き換える= “42b9be306a”>

オプション:

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

コメント

  • Debian / Ubuntuにfpmをインストールするには:sudo apt-get install ruby-dev build-essential; sudo gem install fpm

回答

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

コメント

  • サイトへようこそ、そしてあなたの貢献に感謝します。OPが特に" DEBを解凍…およびDEB "を再パックするように要求したことに注意してください。 おそらく、投稿を編集してそのテーマに対処することもできます。