Chương 5. Các tệp khác trong thư mục `debian`

# Chương 5. Các tệp khác trong thư mục `debian`

The dh_make command had major updates since this old document was written. So some parts of this document aren't applicable any more.

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.

The debmake command is used in place of the dh_make command in my new Guide for Debian Maintainers.

Để kiểm soát hầu hết những gì `debhelper` thực hiện khi xây dựng gói, bạn thêm các tệp cấu hình tuỳ chọn trong thư mục `debian`. Chương này sẽ cung cấp một cái nhìn tổng quan về những tệp tin này và định dạng của nó. Vui lòng tham khảo thêm Debian Policy Manual và Debian Developer's Reference.

The dh_make command will create some template configuration files under the `debian` directory. Take a look at all of them.

Trong chương này, các tệp tin trong thư mục `debian` được đề cập đến mà không có `debian/` để đơn giản hóa bất cứ khi nhắc tới.

Một số tệp cấu hình mẫu cho `debhelper` có thể không được tạo bởi lệnh dh_make. Trong các trường hợp này, bạn cần phải tự tạo chúng bằng trình soạn thảo.

Nếu bạn muốn hoặc cần kích hoạt bất kỳ tệp nào, hãy làm như sau:

- Đổi tên các tệp cấu hình để sử dụng tên gói thực sự của thay cho ``package``;

- sửa đổi nội dung tệp mẫu theo ý bạn muốn;

- loại bỏ các tập tin mẫu mà bạn không cần;

- sửa đổi tệp `control` (xem Phần 4.1, “`control`”), nếu bạn cần;

- chỉnh sửa tệp `rules` (xem Phần 4.4, “`rules`”), nếu bạn cần.

Bất kỳ tệp tin cấu hình `debhelper` nào mà không có tiền tố ``package``, chẳng hạn như `install` , sẽ áp dụng cho gói nhị phân đầu tiên. Khi có nhiều gói nhị phân, các cấu hình của chúng được xác định bằng các tệp chứa tiền tố là tên gói nhị phân đấy như ``package-1`.install`, ``package-2`.install`, vân vân.

## 5.1. `README.Debian`

Bất kỳ chi tiết bổ sung hoặc sự khác biệt giữa gói gốc ban đầu và phiên bản Debian của bạn nên được ghi lại ở đây

dh_make đã tạo ra một tệp mặc định, giống như thế này:

    gentoo for Debian
    -----------------
    <possible notes regarding this package - if none, delete this file>
     -- Josip Rodin <joy-mg@debian.org>, Wed, 11 Nov 1998 21:02:14 +0100

Nếu bạn không có gì để ghi chú, hãy xoá tệp này. Xem dh_installdocs(1).

## 5.2. `compat`

Tệp `compat` định nghĩa mức độ tương thích với `debhelper`. Hiện tại, bạn nên để nó là `debhelper` v10 như sau:

    $ echo 10 > debian/compat

Bạn có thể sử dụng mức v9 trong trường hợp nhất định sự tương thích với các hệ thống cũ. Tuy nhiên, sử dụng bất kỳ mức nào dưới 9 là không khuyến kích và nên là bị chặn cho các gói mới.

## 5.3. `conffiles`

Một trong những điều gây phiền phức nhất về phần mềm là khi bạn đã dành rất nhiều thời gian và nỗ lực để cấu hình một chương trình, và khi nâng cấp phần mềm thì mọi thay đổi của bạn bị đè. Debian giải quyết vấn đề này bằng cách gọi các tập tin cấu hình trong gói là conffiles. [54] Khi bạn nâng cấp một gói, bạn sẽ được hỏi rằng bạn có muốn giữ các tệp cấu hình cũ (hiện tại) hay không.

dh_installdeb(1) tự động đánh dâu bất kỳ tệp nào trong thư mục `/etc` là conffiles, vậy nếu chương trình của bạn có conffiles ở đây, bạn không cần thiết phải thêm chúng vào trong tệp này. Hầu hết các loại gói, nơi lưu trữ conffiles duy nhất nên là `/etc`, và vì thế tệp này không cần thiết phải tồn tại

Nếu chương trình của bạn sử dụng các tệp cấu hình nhưng cũng viết lại chúng như là cơ sở dư liệu, tốt nhất bạn không nên định nghĩa chúng là conffiles vì ​​dpkg sẽ nhắc nhở người dùng xác minh các thay đổi mọi lúc.

Nếu chương trình bạn đang đóng gói đòi hỏi mỗi người dùng chỉnh sửa các tập tin cấu hình trong thư mục `/etc`, có hai cách phổ biến để định nghĩ chúng không phải là conffiles, giữ dpkg yên tĩnh:

- Tạo một liêt kết tượng trưng trong thư mục `/etc` trỏ tới tệp ở thư mục `/var` được sinh ra bởi maintainer scripts.

- Tạo một tệp bở maintainer scripts dưới thư mục `/etc`.

Để biêt thêm thông tin về maintainer scripts, xem Phần 5.18, “`{pre,post}{inst,rm}`”.

## 5.4. ``package`.cron.*`

Nếu gói của bạn yêu cầu các tác vụ được lên lịch thường xuyên để hoạt động đúng, bạn có thể sử dụng các tệp này để làm điều đó. Bạn có thể thiết lập các tác vụ thường xuyên hoặc xảy ra hàng giờ, hàng ngày, hàng tuần, hàng tháng, hoặc bất cứ lúc nào bạn muốn. Các tên tập tin là:

- ``package`.cron.hourly` - Được cài đặt tại `/etc/cron.hourly/`package``; chạy mỗi giờ một lần.

- ``package`.cron.daily` - Được cài đặt tại `/etc/cron.daily/`package``; chạy mỗi ngày một lần.

- ``package`.cron.weekly` - Được cài đặt tại `/etc/cron.weekly/`package``; chạy mỗi tuần một lần.

- ``package`.cron.monthly` - Được cài đặt tại `/etc/cron.monthly/`package``: chạy mỗi tháng một lần.

- ``package`.cron.d` - Được cài đặt tại `/etc/cron.d/`package``: cho bất kỳ thời gian khác.

Hầu hết các tệp này là kịch bản shell, ngoại trừ tệp trong ``package`.cron.d` tuân thủ theo định dạng của crontab(5).

Không cần chỉ định tệp `cron.*` cho cài đặt ghi chép nhật ký (log rotation); để làm điều này, xem dh_installlogrotate(1) and logrotate(8).

## 5.5. `dirs`

Tệp này chỉ định bất kỳ thư mục nào chúng ta cần nhưng không tạo theo quy trình cài đặt thông thường (`make install DESTDIR=...` được gọi bởi `dh_auto_install`). Điều này có nghĩa sẽ có vấn đề với `Makefile`.

Các tệp này được liệt kê trong tệp `install` không cần thư mục của chúng đuợc tạo trước. Xem Phần 5.11, “`install`”.

Tốt nhất là thử cài đặt trước và chỉ sửa dụng điều này nếu bạn gặp rắc rối. Không có dấu gạch chéo trước tên thư mục được liệt kê trong `dirs`

## 5.6. ``package`.doc-base`

Nếu gói của bạn có tài liệu khác với trang hướng dẫn sử dụng và thông tin (man, info), bạn nên sử dụng tệp `doc-base` để đăng ký, để người dùng có thể tìm thấy nó bằng như: dhelp(1), dwww(1), or doccentral(1).

Thường bao gồm các tệp HTML, PS và PDF, được đặt tại `/usr/share/doc/`packagename`/`.

Đây là tệp doc-base của gói `gentoo` `gentoo.doc-base` trong giống như sau:

    Document: gentoo
    Title: Gentoo Manual
    Author: Emil Brink
    Abstract: This manual describes what Gentoo is, and how it can be used.
    Section: File Management
    Format: HTML
    Index: /usr/share/doc/gentoo/html/index.html
    Files: /usr/share/doc/gentoo/html/*.html

Thông tin về định dạng tệp tin này, xem install-docs(8) và the Debian `doc-base` manual ở bản copy `/usr/share/doc/doc-base/doc-base.html/index.html` trên máy của bạn được cung cấp bởi gói `doc-base` .

Để biết thêm chi tiết về cài đặt tài liệu bổ sung, vui lòng xem Phần 3.3, “Cài đặt các tệp tin đến đích của chúng”

## 5.7. `docs`

Tệp này chỉ định tên tệp của các tệp tài liệu mà chúng ta có thể dh_installdocs(1) cài đặt vào thư mục tạm thời cho chúng.

Mặc định, nó sẽ bao gồm tất cả các tệp tồn tại ở trong thư mục top-level (không tính thư mục con) của mã nguồn bao gồm `BUGS`, `README*`, `TODO` vân vân.

Cho `gentoo`, vài tệp tin cũng được bao gồm:

    BUGS
    CONFIG-CHANGES
    CREDITS
    NEWS
    README
    README.gtkrc
    TODO

## 5.8. `emacsen-*`

Nếu gói của bạn cung cấp các tệp Emacs có thể được cài tại thời điểm cài đặt gói, bạn có thể sử dụng những tệp này để thiết lập nó.

Chúng được cài đặt vào thư mục tạm thời bởi dh_installemacsen(1).

Nếu bạn không cần, hãy xoá chúng đi

## 5.9. ``package`.examples`

Lệnh dh_installexamples(1) cài các tệp và thư mục được liệt kê trong tệp này như là các tệp mẫu.

## 5.10. ``package`.init` và ``package`.default`

Nếu gói của bạn là một daemon cần được chạy tại thời điểm start-up của hệ thống, bạn bỏ qua đề xuất ban đầu của mình, phải không ?

Please read dh_installinit(1) dh_installsystemd(1) to provide startup script.

The ``package`.default` file will be installed as `/etc/default/`package``. This file sets defaults that are sourced by the init script. This ``package`.default` file is most often used to set some default flags or timeouts. If your init script has certain configurable features, you can set them in the ``package`.default` file, instead of in the init script itself.

Nếu chương trình của bạn cung cấp một tệp cho kịch bản init, bạn cũng có thể sử dụng nó hoặc không. Nếu bạn không sử dụng kịch bản init của họ thì hãy tạo một tệp là ``package`.init`. Tuy nhiên nếu kịch bản init của thượng nguồn trông ổn và để đúng vị trí, bạn vẫn cần cài đặt liên kết tượng trưng `rc*`. Để làm điểu này bạn cần phải ghi đè dh_installinit trong tệp `rules` với các dòng sau:

    override_dh_installinit:
            dh_installinit --onlyscripts

Nếu bạn không cần nó, hãy xoá những tệp này.

## 5.11. `install`

Nếu những tệp tin này cần được cài đặt vào trong gói của bạn nhưng `make install` của bạn sẽ không làm điều đó. Vậy hãy đặt các tên tập tin và đích của nó vào tệp `install` này, chúng sẽ được cài đặt bởi dh_install(1).[55] Bạn nên kiểm tra có hay không cách khác cụ thể hơn để sử dụng trước. Ví dụ, các tài liệu nên đặt ở `docs` chứ không phải trong tệp này.

Mỗi dòng trong tệp `install` thể hiện cho mỗi tệp được cài đặt, mỗi dòng bắt đầu với tên của tệp nguồn (tương đối với thư mục build) sao đó một dấu cách (phím space) và tiếp theo là vị trí thư mục đích sẽ được cài đặt (tương đối với thư mục cài đặt). Một ví dụ như tệp nhị phân `src/`bar`` muốn cài đặt; tệp `install` trông giống như sau:

    src/bar usr/bin

Nghĩa là khi gói này được cài đặt, sẽ có một lệnh thực thi ở `/usr/bin/`bar``.

Ngoài ra, tệp `install` có thể chứa tên của tệp tin mà không có thư mục đích để cài đặt khi thư mục tương đối không thay đổi. Định dạng này thường được sử dụng cho một gói lớn phân chia đầu ra của gói của nó thành nhiều gói nhị phân bằng cách sử dụng ``package-1`.install`, ``package-2`.install`, vân vân.

Lệnh dh_install sẽ tìm laị trong thư mục `debian/tmp`, nếu nó không tìm thấy chúng trong thư mục hiện tại, (hoặc bạn đã nói với nó qua tuỳ chọn `--sourcedir`).

## 5.12. ``package`.info`

Nếu gói của bạn có các trang thông tin, bạn nên cài chúng bởi dh_installinfo(1) bằng cách liệt kê chúng trong tệp ``package`.info`.

## 5.13. ``package`.links`

Nếu bạn cần tạo các liên kết tượng trưng trong thư mục gói như người bảo trì gói, bạn nên cài chúng bởi dh_link(1) bằng cách liệt kê đường dẫn đầy đủ của nguồn và đích trong tệp ``package`.links`.

## 5.14. `{`package`.,source/}lintian-overrides`

Nếu chương trình `lintian` báo có một chuẩn đoán về lỗi cho trường hợp khi Debian policy chấp nhận ngoại lệ cho một số quy tắc, bạn có thể sử dụng tệp ``package`.lintian-overrides` hoặc `source/lintian-overrides` để không còn báo lỗi từ lintian. Vui lòng đọc Lintian User's Manual (`https://lintian.debian.org/manual/index.html`) và tránh lạm dụng điều này.

``package`.lintian-overrides` cho gói nhị phân có tên là ``package`` và được cài đặt vào `usr/share/lintian/overrides/`package`` bởi lệnh dh_lintian.

`source/lintian-overrides` là cho gói nguồn. Nó không phải cho cài đặt.

## 5.15. `manpage.*`

Các chương trình của bạn nên có một trang hướng dẫn (manual page). Nếu không có, bạn có thể tạo mới chúng. Lệnh dh_make tạo vài mẫu tệp cho các trang hướng dẫn. Chúng cần được sao chép và chỉnh sửa cho mỗi lệnh thiếu trong trang hưỡng dẫn. Vui lòng đảm bảo xoá các mẫu không sử dụng.

### 5.15.1. `manpage.1.ex`

Các trang hướng dẫn thường viết bằng nroff(1). Mẫu `manpage.1.ex` cũng được viết bằng nroff. Xem trang hướng dẫn man(7) để biết mô tả ngắn gọn về cách chỉnh sửa tệp đó.

Cuối cùng, tên của tệp trang hướng dẫn nên là tên của chương trình mà tệp đó mô tả, vậy chúng ta sẽ đổi tên nó từ `manpage` thành `gentoo`. Tên tệp cũng bao gồm `.1` là đuôi cho loại một, điều đó có nghĩa là một trang hướng dẫn cho lệnh của người dùng. Hãy chắc chắn xác minh rằng mục này chính xác.Đây là một danh sách ngắn của các mục:

Mục | Mô tả | Ghi chú
--- | --- | ---
1 | Các lệnh người dùng | Lệnh hoặc kịch bản thực thi
2 | Lời gọi Hệ thống | Chức năng được cung cấp từ nhân
3 | Lời gọi Thư viện | Chức năng trong thư viện hệ thống
4 | Các tệp đặc biệt | Thường xuyên là tệp tại `/dev`
5 | Định dạng tệp | Ví dụ định dạng `/etc/passwd`
6 | Các trò chơi | Trò chơi hoặc chương trình giải trí
7 | Gói Macro | Ví dụ như macros man
8 | Quản trị hệ thống | Các chương trình chỉ thực thi bởi root
9 | Chương trình của nhân | Các lời gọi không theo chuẩn

Vì vậy trang man của `gentoo` nên được gọi là `gentoo.1`. Nếu không có tệp `gentoo.1` trong thượng nguồn, bạn nên tạo nó bằng cách đổi tên template `manpage.1.ex` thành `gentoo.1` và chỉnh sửa nó bằng cách sử dụng thông tin từ các ví dụ và tài liệu thượng nguồn.

Bạn có thể sử dụng lệnh help2man để tạo một manpage mới, help2man sử dụng các dữ liệu từ tuỳ chọn `--help` và `--version` của chương trình để tạo ra manpage. [56]

### 5.15.2. `manpage.sgml.ex`

Mặt khác, nếu bạn thích viết SGML thay vì nroff, bạn có thể sử dụng tệp mẫu `manpage.sgml.ex`. Nếu bạn làm điều này, bạn phải:

- đổi tên tệp tin thành `gentoo.sgml`.

- cài đặt gói `docbook-to-man`

- thêm `docbook-to-man` vào dòng `Build-Depends` của tệp `control`

- thêm mục target `override_dh_auto_build` vào tệp `rules`:

      override_dh_auto_build:
              docbook-to-man debian/gentoo.sgml > debian/gentoo.1
              dh_auto_build

### 5.15.3. `manpage.xml.ex`

Hoặc nếu bạn yêu thích XML hơn là SGML, bạn có thể sử dụng mẫu `manpage.xml.ex` . Nếu bạn làm điều này, bạn phải:

- đổi tên thành `gentoo.1.xml`

- cài đặt gói `docbook-xsl` và một XSLT processor như `xsltproc` (khuyên dùng)

- thêm tên các gói `docbook-xsl`, `docbook-xml`, và `xsltproc` vào dòng `Build-Depends` trong tệp `control`

- thêm mục target `override_dh_auto_build` vào tệp `rules`:

      override_dh_auto_build:
              xsltproc --nonet \
               --param make.year.ranges 1 \
               --param make.single.year.ranges 1 \
               --param man.charmap.use.subset 0 \
               -o debian/ \
      http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl\
              debian/gentoo.1.xml
              dh_auto_build

## 5.16. ``package`.manpages`

Nếu gói của bạn có các trang hướng dẫn, bạn nên cài đặt chúng bởi dh_installman(1) bằng cách liệt kê chúng trong tệp ``package`.manpages`.

Để cài đặt `docs/gentoo.1` như một tệp manpage cho gói `gentoo`, hãy tạo tệp `gentoo.manpages` như sau:

    docs/gentoo.1

## 5.17. `NEWS`

Lệnh dh_installchangelogs(1) sẽ cài đặt điều này.

## 5.18. `{pre,post}{inst,rm}`

Các tệp `postinst`, `preinst`, `postrm` và `prerm` [57] được gọi là maintainer scripts. Chúng là các kịch bản được đặt trong vùng điều khiển của gói và sẽ được chạy bởi dpkg khi gói của bạn được cài đặt, nâng cấp hoặc xóa.

Là một chuyên gia bảo trì, bạn nên tránh bất kỳ chỉnh sửa thủ công các tập lệnh bảo trì vì chúng dễ xảy ra vấn đề. Để biết thêm thông tin, hãy tham khảo Debian Policy Manual, 6 "Package maintainer scripts and installation procedure", và xem các tệp ví dụ được cung cấp bởi dh_make.

Nếu bạn không lắng nghe tôi và đã tạo ra tập lệnh bảo trì tuỳ chỉnh cho một gói, bạn nên chắc chắn kiểm tra chúng không chỉ với install và upgrade mà còn remove và purge.

Nâng cấp lên phiên bản mới nên silent (lặng lẽ, ổn định) và không phá vỡ (để các người dùng không cần chú ý nâng cấp ngoại trừ việc phát hiện ra rằng lỗi cũ đã được khắc phục và có thể có các tính năng mới).

Khi sự nâng cấp cần thiết việc xâm nhập (ví dụ: các tập tin cấu hình rải rác thông qua các thư mục chính của người dùng với cấu trúc hoàn toàn khác), và bạn có thể coi đây là phương án cuối cùng để chuyển gói sang trạng thái dự phòng an toàn (ví dụ như vô hiệu hóa dịch vụ) và cung cấp tài liệu thích hợp theo yêu cầu của chính sách (`README.Debian` và `NEWS.Debian`). Đừng làm phiền người dùng với các câu hỏi debconf được gọi từ các tập lệnh bảo trì để nâng cấp.

Gói `ucf` cung cấp conffile-like xử lý hạ tầng để ngăn người dùng thay đổi các tệp mà không được gắn nhãn conffiles chẳng hạn như những tài liệu được quản lý bởi các kịch bản bảo trì. Điều này sẽ giảm thiếu các vấn đề phát sinh.

Các kịch bản bảo trì nằm trong số các cải tiến Debian nhằm giải thích tại sao mọi người chọn Debian. Bạn phải thật cẩn thận để không biết chúng thành nguồn gây phiền toái.

## 5.19. ``package`.symbols`

Việc đóng gói một thư viện là không dễ dàng cho người bảo trì mới làm quen và nên tránh. Còn nếu gói của bạn có các thử viện, bạn nên có tệp `debian/`package`.symbols`. Xem Phần A.2, “Quản lý `debian/`package`.symbols`”.

## 5.20. `TODO`

Lệnh dh_installdocs(1) cài đặt tệp này.

## 5.21. `watch`

Định dạng tệp `watch` là tài liệu uscan(1). Tệp `watch` cấu hình chương trình uscan (có trong gói `devscripts`) để theo dõi trang web mà bạn lấy nguồn. Nó cũng được sử dụng bởi dịch vụ Debian Package Tracker.

Đây là nội dung của nó:

    # watch control file for uscan
    version=3
    http://sf.net/gentoo/gentoo-(.+)\.tar\.gz debian uupdate

Thông thường với một tệp `watch`, đường dẫn URL tại `http://sf.net/gentoo` được tải về và tìm kiểm cho các liên kết theo biểu mẫu `<a href=...>`. Tên (phần phía sau của đường dẫn `/`) của mỗi liên kết URL được so sánh với mẫu biểu thức chính quy Perl (xem perlre(1))`gentoo-(.+)\.tar\.gz`. Trong số các tệp phù hợp, tệp đượctải xuống có số phiên bản lớn nhất và chương trình uupdateđược chạy để tạo một bản nguồn đã được cập nhật.

Mặc dù điều này là đúng cho vài trang web, dịch vụ tải của SourceForge tại http://sf.net là một ngoại lệ. Khi tệp `watch` chứa một đường dẫn URL khớp với biểu thức chính quy Perl `^http://sf\.net/`, chương trình uscan thay thế nó với `http://qa.debian.org/watch/sf.php/` và sau đó áp dụng quy tắc này. Dịch vụ chuyển hướng URL tại http://qa.debian.org/ được thiết kế để cung cấp dịch vụ ổn định đến tệp mong muốn với bất kỳ `watch` mẫu biểu thức `http://sf.net/`project`/`tar-name`-(.+)\.tar\.gz`. Điều này giải quyết các vấn đề liên quan đế thay đổi định kỳ các đường dẫn SourceForge.

Nếu thượng nguồn cung cấp chữ ký mật mã của tarball, bạn nên xác minh tính xác thực của nó bằng cách sử dụng tùy chọn `pgpsigurlmangle` như mô tả trong uscan(1).

## 5.22. `source/format`

Trong tệp `debian/source/format`, nên có một dòng chỉ định định dạng mong muốn cho gói nguồn (kiểm tra dpkg-source> (1) để có danh sách đầy đủ). Sau phiên bản `squeeze`, cần chỉ ra rằng:

- `3.0 (native)` cho các gói Debian native hoặc

- `3.0 (quilt)` cho mọi thứ khác.

Định dạng `3.0 (quilt)` mới sẽ ghi lại các sửa đổi trong một loạt bản vá lỗi quilt trong thư mục `debian/patches` . Những thay đổi này sau đó sẽ tự động được áp dụng trong quá trình giải nén gói nguồn. [58] Các sửa đổi Debian chỉ đơn giản được lưu trữ trong kho lưu trữ `debian.tar.gz` chứa tất cả các tệp tin trong thư mục `debian`. Định dạng mới này hỗ trợ đưa các tệp tin nhị phân như các biểu tượng PNG của người bảo trì gói mà không yêu cầu thủ thuật. [59]

Khi dpkg-source giải nén một gói nguồn trong định dạng nguồn `3.0 (quilt)`, nó sẽ tự động áp dụng tất cả các bản vá được liệt kê trong `debian patches/series`. Bạn có thể bỏ qua việc áp dụng các bản vá ở cuối quá trình giải nén với tùy chọn `--skip-patches`.

## 5.23. `source/local-options`

Khi bạn muốn quản lý các hoạt động đóng gói Debian bằng VCS, bạn thường tạo một nhánh (ví dụ. `upstream`) để theo dõi thượng nguồn và một nhánh khác (thường là `master` đối với Git) để theo dõi gói Debian. Đối với trường hợp thứ hai, bạn thường xuyên muốn có thượng nguồn chưa được vá lỗi với các tệp của bạn `debian/*` để dễ dàng hợp nhất với mã nguồn mới của thượng nguồn.

Sau khi bạn xây dựng một gói, nguồn thường đã được vá. Bạn cần phải gỡ vá bằng tay bằng cách chạy `dquilt pop -a` trước khi đẩy hết vào nhánh `master`. Bạn có thể tự động hóa việc này bằng cách thêm tệp tin tuỳ chọn `debian/source/local-options` để chứa các `unapply-patches`. Tệp này không được bao gồm trong gói nguồn đã tạo và chỉ thay đổi hành vi xây dựng cục bộ. Tệp này có thể chứa `abort-on-upstream-changes`, (xem thêm dpkg-source ( 1 )).

    unapply-patches
    abort-on-upstream-changes

## 5.24. `source/options`

Các tệp được tự động sinh trong cây nguồn có thể gây khó chịu cho đóng gói vì chúng tạo ra các tệp vá lỗi không có ý nghĩa. Có các mô đun tùy chỉnh như dh_autoreconf nhằm giải quyết các vấn đề này như mô tả trong Phần 4.4.3, “Tuỳ chỉnh tệp `rules`”.

Bạn có thể cung cấp một biểu thức chính quy Perl là đối số của tùy chọn `--extend-diff-ignore` khi chạy dpkg-source (1) để bỏ qua các thay đổi được thực hiện đối với các tệp được tạo tự động trong khi tạo gói nguồn.

Như một giải pháp chung để giải quyết vấn đề của các tệp tự động tạo mới, bạn có thể lưu trữ một đối số tùy chọn dpkg-source trong tệp tin `source/options` . Ví dụ sau sẽ bỏ qua việc tạo tệp vá cho `config.sub`, `config.guess` và `Makefile`.

    extend-diff-ignore = "(^|/)(config\.sub|config\.guess|Makefile)$"

## 5.25. `patches/*`

Định dạng nguồn cũ `1.0` tạo một tệp `diff.gz` duy nhất có chứa tệp bảo trì gói trong `debian` và các tệp vá cho nguồn. Một gói như vậy hơi rườm rà để kiểm tra và hiểu cho mỗi thay đổi cây nguồn sau đó. Vì thế đây không phải định dạng tốt.

Định dạng mới `3.0 (quilt)` sẽ lưu các bản vá lỗi vào các tệp `debian/patches/*` bằng cách sử dụng công cụ quilt. Các bản vá này và các dữ liệu gói khác nằm trong thư mục `debian` được đóng gói dưới dạng tệp `debian.tar.gz`. Do lệnh dpkg-source có thể xử lý dữ liệu vá lỗi định dạng của quilt trong định dạng `3.0 (quilt)` mà không cần tới gói `quilt`, nó không cần `quilt` ở trong mục `Build-Depends`. [60]

Lệnh quilt được giải thích trong quilt(1). Nó ghi chép lại các thay đổi của mã nguồn và tạo thành các bản vá `-p1` trong thư mục `debian/patches` và cây mã nguồn không bị ảnh hưởng ngoại trừ thư mục `debian`. Trình tự áp dụng bản vá được ghi lại tại tệp `debian/patches/series`. Bạn có thể áp dụng (=push), un-apply (=pop), và làm mới một các dễ dàng. [61]

Đối với Chương 3, Sửa đổi mã nguồn, chúng tôi đã tạo ba bản vá lỗi trong `debian/patches`.

Vì các bản vá lỗi của Debian được đặt trong `debian/patches`, hãy đảm bảo thiết lập lệnh dquilt đúng như mô tả trong Phần 3.1, “Cài đặt quilt”.

Khi mọi người (kể cả bạn) cung cấp một bản vá lỗi mới ``foo`.patch` cho mã nguồn, áp dụng cho mã nguồn định dạng gói nguồn `3.0 (quilt)` khá đơn giản:

    $ dpkg-source -x gentoo_0.9.12.dsc
    $ cd gentoo-0.9.12
    $ dquilt import ../foo.patch
    $ dquilt push
    $ dquilt refresh
    $ dquilt header -e
    ... describe patch

Các bản vá được lưu trữ trong phiên bản mới `3.0 (quilt)` phải là fuzz tự do. Bạn có thể đảm bảo điều này với `dquilt pop -a; while dquilt push; do dquilt refresh; done`.

[54] Xem dpkg(1) và Debian Policy Manual, "D.2.5 Conffiles".

[55] Tệp này sẽ thay thế lệnh dh_movefiles(1) không được dùng nữa, được cấu hình bởi tệp `files` .

[56] Lưu ý rằng lệnh help2mansẽ yêu cầu nhiều tài liệu chi tiết hơn có sẵn trong hệ thống info. Nếu thiếu lệnh này trong trang info, bạn nên tạo nó bằng cách sử dụng lệnh help2man.

[57] Mặc dù việc sử dụng biểu thức viết tắt bash `{pre,post}{inst,rm}` để chỉ ra các tệp này, bạn nên sử dụng cú pháp POSIX cho các maintainer scripts tương thích với dash như trình shell của hệ thống

[58] Xem DebSrc3.0 để biết tổng quan việc chuyển đổi sang các địng dạng mã nguồn mới `3.0 (quilt)` and `3.0 (native)`.

[59] Trên thực tế, định dạng mới này cũng hỗ trợ nhiều tarballs thượng nguồn và các phương pháp nén khác. Những điều này nằm ngoài phạm vi của tài liệu này.

[60] Một số phương pháp bảo trì bộ vá đã được đề xuất và đang được sử dụng cho các gói Debian. Hệ thống quilt là hệ thống bảo trì được ưa thích sử dụng. Các hệ thống khác bao gồm dpatch, dbs, và cdbs. Nhiều trong số này giữ các bản vá như các tệp tin `debian/patches/*`.

[61] Nếu bạn đang yêu cầu một nhà tài trợ để tải lên gói của bạn, cầm làm rõ ràng và viết tài liệu của những thay đổi của bạn là rất quan trọng để tiến hành xem xét gói bởi nhà tài trợ.

Chương 4. Các tệp yêu cầu trong thư mục `debian` |  | Chương 6. Biên dịch gói