Chương 7. Kiểm tra gói để tìm lỗi

# Chương 7. Kiểm tra gói để tìm lỗi

Việc viết lại tài liệu này với các nội dung cập nhật và nhiều các ví dụ thực tế hơn đã có ở Guide for Debian Maintainers. Vui lòng sử dụng tài liệu mới này như là tài liệu hướng dẫn chính.

Có vài phương pháp bạn nên biết để dò tìm lỗi trong một gói phần mềm trước khi tải nó lên kho phần mềm công cộng.

Thực hiện việc kiểm tra trên một máy khác không phải của bạn cũng là một ý hay. Ban phải quan sát kỹ bất kỳ cảnh báo hoặc lỗi cho tất cả các bài kiểm tra được mô tả ở đây.

## 7.1. Những thay đổi đáng nghi

Nếu bạn tìm thấy một tập tin vá mới được tự động tạo ra như là `debian-changes-*` trong thư mục `debian/patches` sau khi biên dịch gói phần mềm Debian không dựa trên nền tảng máy bạn dưới định dạng `3.0 (quilt)`, rất có thể bạn đã thay đổi vài tập tin vô ý hoặc kịch bản biên dịch đã thay đổi mã nguồn của thượng nguồn. Nếu đây là lỗi của bạn, hãy sửa nó. Nếu đây là lỗi gây ra bởi kịch bản biên dịch, sửa nguyên nhân gốc với lệnh dh-autoreconf như trong Phần 4.4.3, “Tuỳ chỉnh tệp `rules`” hoặc đi vòng qua nó với tập tin `source/options` như trong Phần 5.24, “`source/options`”.

## 7.2. Kiểm tra việc cài đặt của gói phần mềm

Bạn phải kiểm tra gói phần mềm của bạn xem có lỗi trong quá trình cài đặt hay không. Lệnh debi(1) giúp bạn kiểm tra việc cài đặt của tất cả các gói phần mềm nhị phân được tạo ra.

    $ sudo debi gentoo_0.9.12-1_i386.changes

Để tránh vấn đề trong quá trình cài đặt trên các hệ thống khác nhau, bạn phải chắc chắn rằng không có xung đột về tên tập tin với các gói phần mềm khác đang hiện hữu, dùng tập tin `Contents-`i386`` tải về từ kho Debian. Lệnh apt-file có thể rất tiện cho công việc này. Nếu có xung đột, xin hãy hành động để tránh vấn đề thực tế này, dù cho bằng cách thay đổi tên tập tin, bằng cách di chuyển một tập tin chung qua một gói phần mềm khác mà nhiều gói phần mềm có thể dựa trên, bằng các phương pháp thay thế (xem update-alternatives(1)) phối hợp với các nhà bảo trì của các gói phần mềm bị ảnh hưởng khác, hoặc khai báo một mối quan hệ `Conflicts` trong tập tin `debian/control`.

## 7.3. Kiểm tra các kịch bản bảo trì của một gói phần mềm

Tất cả các kịch bản bảo trì (đó là, các tập tin `preinst`, `prerm`, `postinst`, and `postrm`) rất khó để viết đúng cách trừ khi chúng được tạo ra tự động bởi các chương trình `debhelper`. Vì thể đừng sử dụng chúng nếu bạn là một người bảo trì mới vào nghề (xem Phần 5.18, “`{pre,post}{inst,rm}`”).

Nếu gói phần mềm tận dụng các kịch bản bảo trì phức tạp này, hãy chắc chắn rằng bạn kiểm tra không chỉ quá trình cài đặt mà cả công đoạn tháo gỡ phần mềm, xóa hoàn toàn phần mềm, và nâng cấp. Nhiều lỗi kịch bản bảo trì hiện ra khi các phần đã được tháo gỡ hoặc xóa bỏ. Sử dụng lệnh dpkg như sau để kiểm tra:

    $ sudo dpkg -r gentoo
    $ sudo dpkg -P gentoo
    $ sudo dpkg -i gentoo_version-revision_i386.deb

Lệnh đó nên được chạy theo các chuỗi như sau:

- cài đặt phiên bản trước đó (nếu cần thiết).

- nâng cấp nó từ phiên bản trước.

- giảm cấp nó xuống phiên bản thấp hơn (không bắt buộc).

- xóa bỏ hoàn toàn nó.

- cài đặt gói phần mềm mới

- tháo gỡ nó.

- cài đặt nó lại.

- xóa bỏ hoàn toàn nó.

Nếu đây là gói phần mềm đầu tiên của bạn, bạn nên tạo các gói phần mềm giả với các phiên bản khác nhau để kiểm tra gói của bạn trước để tránh các vấn đề trong tương lai.

Hãy nhớ rằng nếu gói phần mềm của bạn đã được tung ra trước đây trong Debian, mọi người sẽ thông thường nâng cấp nó lên gói phần mềm của bạn từ phiên bản vốn nằm trong bản phân phối Debian trước. Hãy nhớ kiểm tra việc nâng cấp từ phiên bản đó.

Mặc dù giảm cấp không được hỗ trợ chính thức, hỗ trợ nó là một cử chỉ thân thiện.

## 7.4. Sử dụng `lintian`

Chạy lintian(1) qua tập tin `.changes` của bạn. Lệnh lintian chạy nhiều kịch bản kiểm tra các lỗi đóng gói thường gặp. [75]

    $ lintian -i -I --show-overrides gentoo_0.9.12-1_i386.changes

Tất nhiên, thay thế tên tập tin với tên của tập tin `.changes` được tạo ra cho gói phần mềm của bạn. Kết quả của lệnh lintian sử dụng các cờ sau:

- `E:` cho lỗi; một lỗi đóng gói hoặc một vi phạm chắc chắn về chính sách.

- `W:` cho cảnh báo; một lỗi đóng gói hoặc một vi phạm có thể liên quan đến chính sách.

- `I:` cho thông tin; thông tin về một số mặt của việc đóng gói.

- `N:` cho ghi chú; a thông điệp chi tiết để hỗ trợ tìm lỗi.

- `O:` cho đè lên ngầm định; một thông điệp bị đè lên bởi các tập tin `lintian-overrides` nhưng hiện ra bởi tham số `--show-overrides`.

Khi bạn thấy các cảnh báo, tùy chỉnh gói phần mềm để tránh chúng hoặc kiểm tra để chắc rang các cảnh báo đó là cảnh báo nhầm. Nếu là nhầm, hãy thiết đặt các tập tin `lintian-overrides` như mô tả trong Phần 5.14, “`{`package`.,source/}lintian-overrides`”.

Ghi chú rằng bạn có thể biên dịch gói phần mềm với dpkg-buildpackage và chạy lintian trên nó trong một dòng lệnh, nếu bạn sử dụng debuild(1) hay pdebuild(1).

## 7.5. Lệnh debc

Bạn có thể liệt kê các tập tin trong gói phần mềm Debian nhị phân với lệnh debc(1).

    $ debc package.changes

## 7.6. Lệnh debdiff

Bạn có thể so sánh nội dung tập tin của hai gói phần mềm Debian chứa mã nguồn với lệnh debdiff(1).

    $ debdiff old-package.dsc new-package.dsc

Bạn có thể so sánh danh sách tập tin trong hai gói phần mềm Debian nhị phân với lệnh debdiff(1).

    $ debdiff old-package.changes new-package.changes

Những lệnh này rất hữu dụng để phát hiện cái gì đã thay đổi trong gói phần mềm nguồn và để tìm ra những thay đổi vô ý tạo ra trong khi cập nhật các gói phần mềm nhị phân, như vô ý đặt tập tin sai địa điểm hoặc vô ý xóa tập tin.

## 7.7. Lệnh interdiff

Bạn có thể so sánh hai tập tin `diff.gz` với lệnh interdiff(1). Lệnh này rất hữu dụng để chắc chắn rằng không có thay đổi vô ý nào được tạo ra trong mã nguồn bởi người bảo trì trong quá trình tạo các gói phần mềm dưới định dạng nguồn cũ `1.0`.

    $ interdiff -z old-package.diff.gz new-package.diff.gz

Định dạng nguồn mới `3.0` lưu trữ những thay đổi trong nhiều tập tin vá như mô tả ở Phần 5.25, “`patches/*`”. Bạn cũng có thể theo dõi những thay đổi của tập tin `debian/patches/*` dùng lệnh interdiff.

## 7.8. Lệnh mc

Rất nhiều thao tác kiểm soát tập tin này có thể được gộp chung vào một quá trình trực quan bởi một trình quản lý tập tin như mc(1) với khả năng cho phép bạn duyệt không chỉ nội dung của các tập tin gói phần mềm `*.deb` mà cả các tập tin `*.udeb`, `*.debian.tar.gz`, `*.diff.gz`, và `*.orig.tar.gz`.

Hãy quan sát cả những tập tin bổ sung không cần thiết và những tập tin không có nội dung, trong cả gói phần mềm nhị phân và nguồn. Thông thường những phần thừa không được dọn dẹp sạch sẽ; thay đổi tập tin `rules` của bạn để bù lại điều này.

[75] Bạn không cần phải cung cấp lintian tham số `-i -I --show-overrides` nếu bạn tùy chỉnh `/etc/devscripts.conf` hoặc `~/.devscripts` như mô tả trong Phần 6.3, “Lệnh debuild”.

Chương 6. Biên dịch gói |  | Chương 8. Cập nhật gói phần mềm