IntelのOpenCLSDKをインストールしようとしていますが、DEBファイルはRPMからのバグのある変換です(を参照)。 ここに興味があります)。提供されているDEBのpostinst
スクリプトを編集する必要があります。
既存のDEBを取得し、コンテンツ(制御情報を含む)を抽出してから、後でコンテンツを再パッケージ化して新しいDEBを作成しますか?ファイルを編集するだけで、ファイルを追加または削除することはありません。
コメント
回答
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.1
は1.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:gid
を0: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
apt install mc
)— debファイルでEnterキーを押すだけです