Mục lục
Sau khi bạn tung ra một gói phần mềm, bạn sẽ sớm cần phải cập nhật nó.
Hãy giả sử là một báo cáo lỗi được gửi về gói phần mềm của bạn như
#654321
, và nó mô tả một vấn đề mà bạn có thể xử lý. Đây
là những gì bạn cần làm để tạo một bản tu chỉnh mới của gói phần mềm:
Nếu nó sẽ được ghi lại như là một bản vá, hãy làm như sau:
dquilt new
để
đặt tên cho bản vá;
bugname.patch
dquilt add
để khai
báo tập tin sẽ được điều chỉnh;
buggy-file
Sửa vấn đề trong nguồn của gói phần mềm cho một lỗi từ thượng nguồn
dquilt refresh
để ghi lại vào
;
bugname.patch
dquilt header -e
để thêm vào mô tả của nó;
Nếu nó dùng để cập nhật một bản vá đang tồn tại, hãy làm như sau:
dquilt pop
để hủy bỏ
bản vá hiện tại foo.patch
;
foo.patch
Sửa vấn đề trong bản cũ
;
foo.patch
dquilt refresh
để cập nhật
;
foo.patch
dquilt header -e
để cập nhật mô tả của nó;
while dquilt push; do dquilt refresh; done
để áp dụng tất
cả bản vá trong khi tháo bỏ fuzz;
Thêm một bản tu chỉnh mới vào đầu của tập tin Debian
changelog
, ví dụ như chạy lệnh dch
-i
, hoặc cụ thể hơn với lệnh dch -v
và sau đó chèn ghi chú vào bằng trình soạn thảo văn bản bạn thích.
[77]
version
-revision
Chèn một đoạn mô tả ngắn của lỗi và giải pháp trong mục nhật ký thay đổi,
theo sau bởi Closes: #654321
. Bằng cách đó, báo cáo lỗi
sẽ được tự động đóng bởi phần mềm bảo trì kho lưu trữ
ngay lúc gói phần mềm của bạn được nhận vào kho lưu trữ của Debian.
Lặp lại những gì bạn đã làm phía trên để sửa nhiều lỗi trong quá trình cập
nhật tập tin Debian changelog
với lệnh
dch
nếu cần thiết.
Lặp lại những gì bạn đã làm ở Phần 6.1, “(Tái) biên dịch toàn bộ” và Chương 7, Kiểm tra gói để tìm lỗi.
Khi bạn đã hài lòng, bạn nên thay đổi giá trị bản phân phối trong tập tin
changelog
từ UNRELEASED
sang giá trị
bản phân phối đích unstable
(hoặc thậm chí
experimental
).[78]
Tải lên gói phần như ở Chương 9, Tải gói phần mềm lên. Sự khác biệt là lần này, tập tin nén chứa mã nguồn nguyên vẹn ban đầu sẽ không được đính kèm, bởi vì nó không có thay đổi gì và nó đã tồn tại trong kho lưu trữ của Debian.
Một tình huống khó có thể xảy ra khi bạn tạo một gói phần mềm tại chỗ để thí
nghiệm với quá trình đóng gói trước khi tải phiên bản bình thường lên kho
lưu trữ chính thức, ví dụ như
.
Để nâng cấp trơn tru hơn, sẽ là một ý hay nếu tạo một chỉ mục trong tập tin
1.0.1
-1
changelog
với phiên bản là một chuỗi ký tự như
.
Bạn có thể sắp xếp lại nội dung tập tin 1.0.1
-1~rc1
changelog
bằng
cách gộp nhiều chỉ mục nhật ký thay đổi được tạo ra tại chỗ thành một chỉ
mục duy nhất cho gói phần mềm chính thức. Xem Phần 2.6, “Tên và phiên bản gói” để
biết thêm về thứ tự của các chuỗi ký tự dành cho phiên bản.
Khi chuẩn bị các gói phần mềm của một phiên bản mới được phát hành từ thượng nguồn cho kho lưu trữ Debian, bạn phải kiểm tra bản phát hành mới từ thượng nguồn trước tiên.
Bắt đầu bằng việc đọc tập tin thượng nguồn changelog
,
NEWS
, và bất kỳ tài liệu nào khác họ có thể vừa phát
hành với phiên bản mới.
Bạn có thể tiếp theo thẩm định những thay đổi giữa mã nguồn của bản cũ và bản mới từ thượng nguồn như sau, quan sát kỹ những gì đáng nghi:
$ diff -urNfoo
-oldversion
foo
-newversion
Những thay đổi liên quan tới một vài tập tin tự động được tạo ra bởi
Autotools như là missing
,
aclocal.m4
, config.guess
,
config.h.in
, config.sub
,
configure
, depcomp
,
install-sh
, ltmain.sh
, và
Makefile.in
có thể bị phớt lờ. Bạn có thể xóa nó đi
trước khi chạy lệnh diff trên mã nguồn để thẩm định.
Nếu một gói phần mềm
được cấu hình
đúng cách theo các định dạng mới foo
3.0 (native)
or
3.0 (quilt)
, đóng gói một phiên bản thượng nguồn mới chủ
yếu chỉ là di chuyển thư mục debian
cũ sang mã nguồn
mới. Công việc này có thể được thực hiện bằng cách chạy lệnh tar
xvzf
/
tại nơi giải nén mã nguồn mới. [79] Dĩ
nhiên, bạn cần phải làm một số công việc chắc chắn phải làm sau:
path
/to
/foo
_oldversion
.debian.tar.gz
Tạo một bản sao của mã nguồn từ thượng nguồn như là tập tin
foo_
.
newversion
.orig.tar.gz
Cập nhật tập tin Debian changelog
với lệnh dch
-v
.
newversion
-1
Tạo một mục mới với chuỗi ký tự New upstream release
Mô tả cụ thể những thay đổi trong bản phát hành mới từ thượng
nguồn sửa được các lỗi đã báo cáo và đóng các lỗi đó bằng việc
chèn thêm Closes: #
.
bug_number
Mô tả cụ thể những thay đổi xảy ra bởi người bảo trì đối với bản
phát hành từ thượng nguồn mà sửa được các lỗi đã báo cáo và đóng
các lỗi đó bằng hành động chèn thêm Closes:
#
.
bug_number
while dquilt push; do dquilt refresh; done
để áp dụng tất
cả các bản vá trong lúc tháo chúng ra fuzz.
Nếu bản vá/ghép không áp dụng được sạch sẽ, thẩm định tình hình (gợi ý được
để trong các tập tin .rej
).
Nếu một bản vá bạn đã áp dụng với mã nguồn được ghép vào mã nguồn từ thượng nguồn,
chạy lệnh dquilt delete
để tháo bỏ nó ra.
Nếu một bản vá bạn đã áp dụng vào mã nguồn xung đột với những thay đổi mới đến từ mã nguồn mới của thượng nguồn,
dquilt push -f
để áp dụng những bản vá cũ trong khi ép
buộc các từ chối vá từ tập tin
.
baz
.rej
Sửa tập tin
bằng tay để
có được hiệu quả mong muốn của tập tin
baz
.
baz
.rej
dquilt refresh
để cập nhật bản vá
Tiếp tục như bình thường với while dquilt push; do dquilt refresh;
done
.
Quá trình này có thể được tự động hóa bằng cách chạy lệnh uupdate(1) như sau:
$ apt-get sourcefoo
... dpkg-source: info: extractingfoo
infoo
-oldversion
dpkg-source: info: unpackingfoo
_oldversion
.orig.tar.gz dpkg-source: info: applyingfoo
_oldversion
-1.debian.tar.gz $ ls -Ffoo
-oldversion
/foo
_oldversion
-1.debian.tar.gzfoo
_oldversion
-1.dscfoo
_oldversion
.orig.tar.gz $ wget http://example.org/foo
/foo
-newversion
.tar.gz $ cdfoo
-oldversion
$ uupdate -vnewversion
../foo
-newversion
.tar.gz $ cd ../foo
-newversion
$ while dquilt push; do dquilt refresh; done $ dch ... document changes made
Nếu bạn tạo một tập tin debian/watch
như được mô tả ở
Phần 5.21, “watch
”, bạn nên bỏ qua lệnh wget. Bạn
đơn giản chỉ chạy lệnh uscan(1) trong thư mục
thay vì lệnh uupdate. Hành động này tự
động tìm mã nguồn mới, tải về, và chạy lệnh
uupdate. [80]
foo
-oldversion
Bạn có thể phát hành mã nguồn mới này bằng việc lặp lại những gì bạn đã làm ở Phần 6.1, “(Tái) biên dịch toàn bộ”, Chương 7, Kiểm tra gói để tìm lỗi, và Chương 9, Tải gói phần mềm lên.
Cập nhật cách đóng gói không phải là một hành động bắt buộc cho việc cập
nhật một gói phần mềm. Tuy nhiên, làm vậy sẽ cho phép bạn sử dụng toàn bộ
khả năng của hệ thống debhelper
hiện
đại và định dạng gói nguồn 3.0
. [81]
Nếu bạn cần tái tạo những tập tin khuôn mẫu đã bị xóa vì lý do gì đó, bạn có
thể chạy lệnh dh_make lại trong cây thư mục của gói phần
mềm nguồn Debian với tham số --addmissing
option. Sau đó
điều chỉnh chúng cho phù hợp.
Nếu gói phần mềm không được cập nhật để sử dụng cú pháp debhelper
v7+ dh cho tập tin
debian/rules
, cập nhật nó để sử dụng
dh. Cập nhật tập tin debian/control
tương ứng.
Nếu bạn muốn cập nhật tập tin rules
được tạo với cơ chế
đính kèm Makefile
của Common Debian Build System
(cdbs
) (Hệ Thống Biên Dịch Chung
Debian) lên cú pháp dh, xem phần sau để hiểu các biến cấu
hình DEB_*
.
bản sao tại chỗ của /usr/share/doc/cdbs/cdbs-doc.pdf.gz
Nếu bạn có một gói phần mềm nguồn với định dạng 1.0
mà
không có tập tin
, bạn có thể cập
nhật nó lên định dạng nguồn foo
.diff.gz3.0 (native)
mới hơn bằng
việc tạo tập tin debian/source/format
chứa dòng
3.0 (native)
. Các tập tin debian/*
còn lại có thể được sao chép sang.
Nếu bạn có một gói phần mềm nguồn với định dạng 1.0
mà
không có tập tin
, bạn có thể cập
nhật nó lên định dạng nguồn foo
.diff.gz3.0 (native)
mới hơn bằng
việc tạo tập tin debian/source/format
chứa dòng
3.0 (native)
. Các tập tin debian/*
còn lại có thể được sao chép sang. Nhập tập tin
big.diff
được tạo ra bởi lệnh filterdiff -z -x
'*/debian/*'
vào hệ thống quilt của bạn, nếu cần thiết. [82]
foo
.diff.gz > big.diff
Nếu nó được đóng gói bằng một hệ thống vá khác như là dpatch
, dbs
, hay cdbs
với -p0
,
-p1
, or -p2
, chuyển đổi nó sang
quilt
bằng việc sử dụng
deb3
tại http://bugs.debian.org/581186.
Nếu nó được đóng gói với lệnh dh với tham số
--with quilt
hay với các lệnh
dh_quilt_patch và dh_quilt_unpatch, bỏ
những thứ này và buộc nó sử dụng định dạng gói nguồn 3.0
(quilt)
mới hơn.
Bạn nên kiểm tra DEP - Debian Enhancement Proposals(Những đề nghị cải tiến Debian) và sử dụng những đề nghị đã được CHẤP THUẬN.
Bạn cũng cần phải thực hiện các công việc khác mô tả ở Phần 8.3, “Phiên bản phát hành mới từ thượng nguồn.”.
Nếu các văn bản thượng nguồn được mã hóa theo kiểu mã hóa cũ, chuyển đổi nó sang UTF-8 là một ý hay.
Sử dụng iconv(1) để chuyển đổi mã hóa của các tập tin văn bản thô.
iconv -f latin1 -t utf8foo_in.txt
>foo_out.txt
Sử dụng w3m(1) để chuyển đổi các tập tin HTML sang các tập tin văn bản thô UTF-8. Khi bạn làm điều này, hãy chắc chắn rằng bạn chạy nó dưới môi trường UTF-8.
LC_ALL=en_US.UTF-8 w3m -o display_charset=UTF-8 \ -cols 70 -dump -no-graph -T text/html \ <foo_in.html
>foo_out.txt
Sau đây là vài nhắc nhở cho việc cập nhật các phần mềm:
Bảo tồn các chỉ mục cũ trong tập tin changelog
(nghe có
vẻ quá dĩ nhiên, nhưng đã có các tình huống nhiều người đánh lệnh
dch
trong khi họ đáng lẽ phải đánh dch
-i
.)
Các thay đổi Debian hiện tại cần phải được đánh giá lại; ném đi những thứ thượng nguồn đã tích hợp (dưới kiểu này hay kiểu khác) và ghi nhớ giữ những thứ mà thượng nguồn chưa tích hợp, trừ khi có một lý do đáng để không làm thế.
Nếu bất kỳ thay đổi nào được tạo ra đối với hệ thống biên dịch (hi vọng bạn
sẽ biết từ việc thẩm định các thay đổi từ thượng nguồn), hãy cập nhật các
điều kiện biên dịch của debian/rules
và
debian/control
nếu cần thiết.
Kiểm tra Debian Bug Tracking System (BTS) (Hệ thống theo dõi lỗi Debian) để xem có ai đã cung cấp bản vá cho các lỗi đang mở.
Kiểm tra những nội dung của tập tin .changes
để chắc
chắn rằng bạn đang tải lên đúng bản phân phối, các lỗi được đóng đúng cách
được liệt kê trong trường Closes
, trường
Maintainer
và Changed-By
phải khớp,
tập tin phải được ký bằng GPG, v.v.
[77] Để lấy thông tin ngày dưới định dạng bị bắt buộc, dùng LANG=C date
-R
.
[78] Nếu bạn sử dụng lệnh dch -r
để tạo thay đổi cuối này, vui
lòng đảm bảo bạn đã lưu tệp changelog
một cách rõ ràng
bởi trình soạn thảo
[79] Nếu một gói phần mềm
được đóng gói
theo định dạng cũ foo
1.0
, công việc này có thể được hoàn
thành bằng việc chạy lệnh zcat
/
path
/to
/foo
_oldversion
.diff.gz|patch
-p1
[80] Nếu lệnh uscan tải về mã nguồn mới nhưng nó không chạy
lệnh uupdate, bạn nên sửa tập tin
debian/watch
để có dòng debian
uupdate
tại cuối của đường dẫn URL.
[81] Nếu nhà tài trợ của bạn hoặc các nhà bảo trì khác phản đối việc cập nhật cách đóng gói hiện tại, đừng phí thời gian tranh cãi. Có nhiều việc quan trọng hơn cần phải làm.
[82]
Bạn có thể chặt tập tin big.diff
ra nhiều bản vá nhỏ
liên tiếp dùng lệnh splitdiff.