Làm thế nào để áp dụng một bản vá trong một gói debian?


7

Tôi đưa ra một báo cáo lỗi và đã được yêu cầu áp dụng bản vá trong đó và xem nó có hoạt động không. Tôi đã cố gắng tìm tài liệu về cách thực hiện nó nhưng không rõ ràng.

Gần nhất tôi có thể tìm ra là http: //www.thegeek ware.com/2014/12/patch-command-examples/ .

Tôi đã tải xuống nguồn mới nhất thông qua apt-get trong thư mục có tên dpkg -

$ sudo apt-get source dpkg 

Cái này nó thì trông như thế nào -

[shirish@debian] - [~/games/dpkg] - [5692]
└─[$] pwd

/home/shirish/games/dpkg

Đó là con đường và đây là -

┌─[shirish@debian] - [~/games/dpkg] - [5691]
└─[$] ls

d-m-h-verbose-version-check.patch  dpkg-1.18.15  dpkg_1.18.15.dsc  dpkg_1.18.15.tar.xz

Tôi muốn tạo một bản sao lưu và chạy khô trước khi áp dụng bản vá nhưng cần biết những lệnh và đầu ra nào tôi nên mong đợi. Ngoài ra, tôi thường sử dụng -

$ fakeroot debian/rules build
$ fakeroot debian/rules binary 

để xây dựng một gói deb cục bộ. Điều này có đủ tốt không?

Cập nhật 1 - Điều đó không hiệu quả -

┌─[shirish@debian] - [~/games/dpkg] - [5710]
└─[$] cd dpkg-1.18.15

┌─[shirish@debian] - [~/games/dpkg/dpkg-1.18.15] - [5711]
└─[$] dch -n "Apply d-m-h fix from #844701."

dch: fatal error at line 569:
debian/changelog is not writable!

Vì vậy, tôi cần phải sử dụng sudo để có quyền truy cập ghi HOẶC sử dụng chmod để thay đổi quyền / quyền. Tôi muốn làm điều đó đúng cách.

Cập nhật 2 - Làm lại toàn bộ, đúng cách lần này, bị kẹt ở giai đoạn vá lỗi -

┌─[shirish@debian] - [~/games] - [5750]
└─[$] apt-get source dpkg

Reading package lists... Done
NOTICE: 'dpkg' packaging is maintained in the 'Git' version control system at:
https://anonscm.debian.org/git/dpkg/dpkg.git
Please use:
git clone https://anonscm.debian.org/git/dpkg/dpkg.git
to retrieve the latest (possibly unreleased) updates to the package.
Skipping already downloaded file 'dpkg_1.18.15.dsc'
Skipping already downloaded file 'dpkg_1.18.15.tar.xz'
Need to get 0 B of source archives.
dpkg-source: info: extracting dpkg in dpkg-1.18.15
dpkg-source: info: unpacking dpkg_1.18.15.tar.xz

Sau đó -

┌─[shirish@debian] - [~] - [5755]
└─[$] cp d-m-h-verbose-version-check.patch games/dpkg-1.18.15 

Sau đó -

┌─[shirish@debian] - [~/games/dpkg-1.18.15] - [5758]
└─[$] ls

ABOUT-NLS   ChangeLog      configure     debian                             dpkg-split   m4           NEWS         run-script  t-func
aclocal.m4  ChangeLog.old  configure.ac  d-m-h-verbose-version-check.patch  dselect      Makefile.am  po           scripts     THANKS
AUTHORS     check.am       COPYING       doc                                get-version  Makefile.in  README       src         TODO
build-aux   config.h.in    data          dpkg-deb                           lib          man          README.l10n  t           utils

và sau đó -

┌─[shirish@debian] - [~/games/dpkg-1.18.15] - [5757]
└─[$] patch < ./d-m-h-verbose-version-check.patch

(Stripping trailing CRs from patch; use --binary to disable.)
can't find file to patch at input line 5
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git i/scripts/dpkg-maintscript-helper.sh w/scripts/dpkg-maintscript-helper.sh
|index f20d82647..8db4a4088 100755
|--- i/scripts/dpkg-maintscript-helper.sh
|+++ w/scripts/dpkg-maintscript-helper.sh
--------------------------
File to patch:

Bây giờ bối rối phải làm sao?

Cập nhật 3 -

Đã làm điều đó với -p1tham số và thực hiện các bước còn lại -

Chia sẻ 5 dòng lẻ cuối cùng của bản dựng -

dh_md5sums -i
dh_builddeb -i
dpkg-deb: building package 'dpkg-dev' in '../dpkg-dev_1.18.15+nmu1_all.deb'.
dpkg-deb: building package 'libdpkg-perl' in '../libdpkg-perl_1.18.15+nmu1_all.deb'.
 dpkg-genchanges  >../dpkg_1.18.15+nmu1_amd64.changes
dpkg-genchanges: info: including full source code in upload
 dpkg-source --after-build dpkg-1.18.15+nmu1
dpkg-source: info: using options from dpkg-1.18.15+nmu1/debian/source/options: --compression=xz
dpkg-buildpackage: info: full upload; Debian-native package (full source is included)

và đã có thể cài đặt cái mới nhất -

┌─[shirish@debian] - [~/games] - [5812]
└─[$] sudo dpkg -i dpkg_1.18.15+nmu1_amd64.deb dpkg-dev_1.18.15+nmu1_all.deb dpkg-dbgsym_1.18.15+nmu1_amd64.deb dselect_1.18.15+nmu1_amd64.deb dselect-dbgsym_1.18.15+nmu1_amd64.deb libdpkg-perl_1.18.15+nmu1_all.deb libdpkg-dev_1.18.15+nmu1_amd64.deb

D000001: ensure_diversions: new, (re)loading
D000001: ensure_statoverrides: new, (re)loading
(Reading database ... 1207494 files and directories currently installed.)
Preparing to unpack dpkg_1.18.15+nmu1_amd64.deb ...
D000001: process_archive oldversionstatus=installed
D000001: cmpversions a='0:1.18.15+nmu1' b='0:1.16.1' r=2
D000001: cmpversions a='0:1.18.15+nmu1' b='0:1.16.2' r=2
D000001: ensure_diversions: same, skipping
Unpacking dpkg (1.18.15+nmu1) over (1.18.10) ...
D000001: cmpversions a='0:1.18.15+nmu1' b='0:1.16.2' r=2
D000001: ensure_diversions: same, skipping
D000001: process_archive updating info directory
D000001: generating infodb hashfile
Preparing to unpack dpkg-dev_1.18.15+nmu1_all.deb ...
D000001: process_archive oldversionstatus=unpacked but not configured
D000001: ensure_diversions: same, skipping
Unpacking dpkg-dev (1.18.15+nmu1) over (1.18.15+nmu1) ...
D000001: process_archive updating info directory
D000001: generating infodb hashfile
Preparing to unpack dpkg-dbgsym_1.18.15+nmu1_amd64.deb ...
D000001: process_archive oldversionstatus=unpacked but not configured
Unpacking dpkg-dbgsym (1.18.15+nmu1) over (1.18.15+nmu1) ...
D000001: process_archive updating info directory
D000001: generating infodb hashfile
Preparing to unpack dselect_1.18.15+nmu1_amd64.deb ...
D000001: process_archive oldversionstatus=installed
D000001: ensure_diversions: same, skipping
Unpacking dselect (1.18.15+nmu1) over (1.18.15+nmu1) ...
D000001: process_archive updating info directory
D000001: generating infodb hashfile
Preparing to unpack dselect-dbgsym_1.18.15+nmu1_amd64.deb ...
D000001: process_archive oldversionstatus=installed
Unpacking dselect-dbgsym (1.18.15+nmu1) over (1.18.15+nmu1) ...
D000001: process_archive updating info directory
D000001: generating infodb hashfile
Preparing to unpack libdpkg-perl_1.18.15+nmu1_all.deb ...
D000001: process_archive oldversionstatus=unpacked but not configured
Unpacking libdpkg-perl (1.18.15+nmu1) over (1.18.15+nmu1) ...
D000001: process_archive updating info directory
D000001: generating infodb hashfile
Preparing to unpack libdpkg-dev_1.18.15+nmu1_amd64.deb ...
D000001: process_archive oldversionstatus=installed
Unpacking libdpkg-dev:amd64 (1.18.15+nmu1) over (1.18.15+nmu1) ...
D000001: process_archive updating info directory
D000001: generating infodb hashfile
D000001: process queue pkg dpkg:amd64 queue.len 6 progress 1, try 1
Setting up dpkg (1.18.15+nmu1) ...
D000001: deferred_configure updating conffiles
D000001: ensure_diversions: same, skipping
D000001: process queue pkg dpkg-dev:all queue.len 5 progress 1, try 1
D000001: process queue pkg dpkg-dbgsym:amd64 queue.len 5 progress 2, try 1
Setting up dpkg-dbgsym (1.18.15+nmu1) ...
D000001: deferred_configure updating conffiles
D000001: process queue pkg dselect:amd64 queue.len 4 progress 1, try 1
Setting up dselect (1.18.15+nmu1) ...
D000001: deferred_configure updating conffiles
D000001: process queue pkg dselect-dbgsym:amd64 queue.len 3 progress 1, try 1
Setting up dselect-dbgsym (1.18.15+nmu1) ...
D000001: deferred_configure updating conffiles
D000001: process queue pkg libdpkg-perl:all queue.len 2 progress 1, try 1
Setting up libdpkg-perl (1.18.15+nmu1) ...
D000001: deferred_configure updating conffiles
D000001: process queue pkg libdpkg-dev:amd64 queue.len 1 progress 1, try 1
Setting up libdpkg-dev:amd64 (1.18.15+nmu1) ...
D000001: deferred_configure updating conffiles
D000001: process queue pkg dpkg-dev:all queue.len 0 progress 1, try 1
Setting up dpkg-dev (1.18.15+nmu1) ...
D000001: deferred_configure updating conffiles
Processing triggers for man-db (2.7.5-1) ...
D000001: ensure_diversions: same, skipping
D000001: cmpversions a='0:2016.03.30' b='0:2016.05.24' r=-2
D000001: cmpversions a='0:1.18.15+nmu1' b='0:1.16' r=2
D000001: cmpversions a='0:1.18.15+nmu1' b='0:1.16' r=2
D000001: cmpversions a='0:1.18.15+nmu1' b='0:1.16' r=2

Và cuối cùng -

┌─[shirish@debian] - [/usr/share/doc/dpkg] - [5815]
└─[$] zcat changelog.Debian.gz | less

dpkg (1.18.15+nmu1) UNRELEASED; urgency=medium

  * Non-maintainer upload.
  * Apply d-m-h fix from #844701

 -- shirish <shirish@debian>  Mon, 21 Nov 2016 01:04:02 +0530

dpkg (1.18.15) unstable; urgency=medium

Điều này có nghĩa là nó đã được cài đặt chính xác.

[$] apt-show-versions dpkg dpkg-dbgsym dpkg-dev libdpkg-perl libdpkg-dev dselect dselect-dbgsym                                     
dpkg:amd64 1.18.15+nmu1 newer than version in archive
dpkg-dbgsym:amd64 1.18.15+nmu1 newer than version in archive
dpkg-dev:all 1.18.15+nmu1 newer than version in archive
dselect:amd64 1.18.15+nmu1 newer than version in archive
dselect-dbgsym:amd64 1.18.15+nmu1 newer than version in archive
libdpkg-dev:amd64 1.18.15+nmu1 newer than version in archive
libdpkg-perl:all 1.18.15+nmu1 newer than version in archive

Câu trả lời:


8

Bắt đầu với tình huống bạn có:

cd dpkg-1.18.15
patch -p1 < ../d-m-h-verbose-version-check.patch

sẽ áp dụng các bản vá. Trước khi xây dựng, hãy thêm một mục thay đổi NMU (điều này sẽ tránh việc phiên bản vá của bạn dpkgbị ghi đè bởi apt& co., Nhưng sẽ đảm bảo phiên bản của bạn được nâng cấp lên dpkgbản phát hành tiếp theo khi có sẵn):

dch -n "Apply d-m-h fix from #844701."

Điều này sẽ đổi tên thư mục hiện tại (vì dpkglà gói gốc), vì vậy bạn cần thay đổi lại thư mục:

cd ../dpkg-1.18.15+nmu1

Để xây dựng, tôi có xu hướng sử dụng

dpkg-buildpackage -us -uc

Điều đó sẽ tạo ra các .debtệp khác nhau trong thư mục cha; bạn có thể cài đặt chúng bằng cách sử dụng dpkgnhư bình thường.

(Gọi debian/rulescác mục tiêu rõ ràng cũng hoạt động; nhưng bạn không nên sử dụng fakerootcho debian/rules build, chỉ cho debian/rules cleandebian/rules binary.)

Thêm một mục thay đổi NMU cũng đảm bảo rằng nguồn bạn đã tải xuống không bị ảnh hưởng, điều này giải quyết các mối quan tâm sao lưu của bạn. Điều đó cũng có nghĩa là cài đặt lại phiên bản 1.18.15 sẽ khôi phục phiên bản Debian mà không cần bản vá của bạn.


đã cập nhật truy vấn của tôi.
shirish

1
Tôi đã không nhận thấy bạn đã sử dụng sudovới apt-get source; bạn không cần điều đó Bạn nên chown -Rtất cả các dpkgtập tin cho chính mình.
Stephen Kitt

Cập nhật lại.
shirish

Bạn quên -p1tham số cho patch.
Stephen Kitt

Tôi cần nó, bây giờ nó nằm trong cùng thư mục với phần còn lại của mọi thứ. Xin lỗi nên đã giải thích thêm. Đã cập nhật lại, tôi không sử dụng -p1tham số cho bản vá vì theo tôi hiểu, -p1 hoặc p $ về cơ bản là để chia sẻ đường dẫn tương đối từ thư mục nguồn đến bản vá.
shirish
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.