私はすでにそれを見ましたDEBの解凍、ポストインストの編集、DEBの再パッケージ化- ただし、元の .deb ファイルを一部変更する場合は、.deb バージョン番号を正しく変更する方法については、ドキュメントに記載されていません。
たとえば、Ubuntu 14.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
...
...これを使用すると、パッケージのバージョン1:2.1-0ubuntu1.4をダウンロードしたことがわかりますが、必ずしもapt-get download...
ディレクトリ内のバージョンである必要はありませんunpack-hostapd
。ディレクトリに抽出した元の.debのパッケージバージョンを知らせるコマンドはありますかunpack-hostapd
?
これで、以前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番目の質問dch -i
例:.debパッケージのバージョン番号を変更して解凍した.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マッチで動作するはずですが、どうすればいいのかわかりません...
答え1
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
。
答え2
どのような手動編集が私に役立つかは次のとおりです。しかし、これは盲目的な推測なので、システムを知っている人から答えを得ることをお勧めします。
# 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