私はすでに見ました 簡単にDEBを解凍し、postinstを編集し、DEBを再パックします -しかし、元の.debを変更したい場合、.debバージョン番号を適切に変更する方法を説明していませんファイル。
私はUbuntu14.04を使用していますが、例としてhostapd
を取り上げましょう。
$ mkdir /tmp/debtest
$ cd /tmp/debtest/
$ apt-get download hostapd
Get:1 http://dk.archive.ubuntu.com/ubuntu/ trusty-updates/universe hostapd AMD64 1:2.1-0ubuntu1.4 [423 kB]
Fetched 423 kB in 1s (361 kB/s)
$ ls -la hostapd_1%3a2.1-0ubuntu1.4_AMD64.deb
-rw-rw-r-- 1 myuser myuser 422846 Nov 10 2015 hostapd_1%3a2.1-0ubuntu1.4_AMD64.deb
これで、上記のリンクのように開梱できます。
$ mkdir unpack-hostapd
$ dpkg-deb -R hostapd_1%3a2.1-0ubuntu1.4_AMD64.deb unpack-hostapd
$ ls -la unpack-hostapd/
total 20
drwxr-xr-x 5 myuser myuser 4096 Jan 26 11:31 .
drwxrwxr-x 3 myuser myuser 4096 Jan 26 11:31 ..
drwxr-xr-x 2 myuser myuser 4096 Nov 9 2015 DEBIAN
drwxr-xr-x 6 myuser myuser 4096 Nov 9 2015 etc
drwxr-xr-x 4 myuser myuser 4096 Nov 9 2015 usr
ささいな変更を加えたいとしましょう。たとえば、README.Debianに1行のテキストを追加します。
echo "Just a test line" >> unpack-hostapd/usr/share/doc/hostapd/README.Debian
...そして今、これを新しい.debとして再パックしたいと思います。
最初の質問-開梱された状態からパッケージの現在の(古い)バージョンを取得する方法はありますか?私はファイル名を信頼していないので、通常は次のようにします。
$ apt-cache policy hostapd
hostapd:
Installed: (none)
Candidate: 1:2.1-0ubuntu1.4
...
...これは、apt-get download...
を使用したときにパッケージのバージョン1:2.1-0ubuntu1.4をダウンロードしたことを示していますが、必ずしもunpack-hostapd
ディレクトリ内のバージョンは何ですか。 unpack-hostapd
ディレクトリに解凍された元の.debのパッケージバージョンを教えてくれるコマンドはありますか?
これまで、バージョン番号を自動インクリメントするためにdebchange
をdch -i
として使用しましたが(他のソースプロジェクトでは)、ここで試してみると次のようになります。
$ cd unpack-hostapd
$ pwd
/tmp/debtest/unpack-hostapd
$ dch -e
dch: fatal error at line 580:
Cannot find debian/changelog anywhere!
Are you in the source code tree?
(You could use --create if you wish to create this file.)
$ find . -name 'changelog*'
./usr/share/doc/hostapd/changelog.Debian.gz
$ dpkg -c ../hostapd_1%3a2.1-0ubuntu1.4_AMD64.deb | grep changelog
-rw-r--r-- root/root 2126 2015-11-09 14:56 ./usr/share/doc/hostapd/changelog.Debian.gz
...しかし、ここではそれを変更することはできません。
したがって、私の2番目の質問は次のとおりです:.debパッケージのバージョン番号を変更する簡単な方法(dch -i
はソースパッケージ用です)はありますか? 、そしておそらく変更ログを、このような解凍された.debパッケージに追加しますか?
もちろん、最終的には、この新しいバージョンを.debパッケージとして再パックしたいと思います。上記のリンクは、dpkg-deb -b unpack-hostapd hostapd_1%3a2.1-0ubuntu1.4_AMD64.deb
のようなものを示唆しています。ただし、ここではバージョン1:2.2
を使用したいので、最終的にはdpkg-deb -b unpack-hostapd hostapd_1%3a2.2_AMD64.deb
のようなファイル名を使用します。ただし、そのバージョンは.deb内に記録されているものとも一致する必要があり、私はしません。それを行う方法を知っています...
バージョンは、DEBIAN/control
を使用するときにdpkg-deb -R
で抽出されるバイナリ制御ファイルで定義されます。 Version:
フィールドを探します。
Version: 1:2.5.2+v2.4-3+b1
ここで、新しいパッケージのバージョン番号を編集します。 (オプションで、usr/share/doc/hostapd/changelog.Debian.gz
の変更ログに変更ログエントリを追加できます。)次に、次のようにパッケージを再構築して、dpkg-deb
が正しいファイル名を決定するようにします。
mkdir newpkg
dpkg-deb -b hostapd newpkg
これにより、適切な名前が付けられた新しいパッケージがnewpkg
ディレクトリに生成されます。
理想的には、新しいバイナリのライブラリ要件を確認し、control
の依存関係情報も更新する必要があります。
これが私にとってどのような手動編集が機能したかです-しかし、これは一種の盲目的な推測だったので、システムを理解している誰かからの答えを得るのはまだいいです:
# decompress changelog.Debian.gz
unpack-hostapd$ gzip -d usr/share/doc/hostapd/changelog.Debian.gz
# edit the uncompressed changelog.Debian:
# add this on top:
# wpa (2.2) trusty-security; urgency=medium
#
# * whatever
#
# wpa (2.1-0ubuntu1.4) trusty-security; urgency=medium
# ....
unpack-hostapd$ nano usr/share/doc/hostapd/changelog.Debian
# repack changelog.Debian.gz
unpack-hostapd$ gzip -9 usr/share/doc/hostapd/changelog.Debian
# change DEBIAN/control - Source: and Version:
# change to:
# Source: wpa (2.2)
# Version: 1:2.2
unpack-hostapd$ nano DEBIAN/control
# repack .deb:
unpack-hostapd$ cd ..
$ dpkg-deb -b unpack-hostapd hostapd_1%3a2.2_AMD64.deb
# now can install the deb
Sudo dpkg -i hostapd_1%3a2.2_AMD64.deb