web-dev-qa-db-ja.com

簡単にデブを開梱し、新しいバージョンでデブを再梱包します

私はすでに見ました 簡単に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のパッケージバージョンを教えてくれるコマンドはありますか?

これまで、バージョン番号を自動インクリメントするためにdebchangedch -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内に記録されているものとも一致する必要があり、私はしません。それを行う方法を知っています...

1
sdbbs

バージョンは、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の依存関係情報も更新する必要があります。

3
Stephen Kitt

これが私にとってどのような手動編集が機能したかです-しかし、これは一種の盲目的な推測だったので、システムを理解している誰かからの答えを得るのはまだいいです:

# 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
1
sdbbs