Chương 2. Những bước đầu tiên

Mục lục

2.1. Luồng làm việc tạo ra gói Debian
2.2. Chọn chương trình của bạn
2.3. Lấy chương trình, và hãy thử nó
2.4. Xây dựng hệ thống đơn giản
2.5. Xây dựng hệ thống phổ biến
2.6. Tên và phiên bản gói
2.7. Thiết lập dh_make
2.8. Khởi tạo gói Debian mới

Hãy bắt đầu bằng cách tạo một gói riêng của bạn (hoặc, thậm chí tốt hơn, chấp nhận một cái hiện tại).

Nếu bạn đang tạo ra một gói Debian từ một chương trình thượng nguồn, quy trình làm việc điển hình của việc xây dựng gói Debian liên quan đến việc tạo ra một số tệp được đặt tên cụ thể cho từng bước như sau:

Xin lưu ý rằng ký tự phân tách packageversion đã thay đổi từ - (dấu trừ) trong tên tệp nén thành _ (gạch dưới) ở trong tên của gói Debian

Trong tên tệp ở trên, hãy thay thế package bằng package name, tên version bằng upstream version, revision thành Debian revision, và arch thành package architecture, như đã định nghĩa trong Debian Policy Manual. [5]

Mỗi bước của phác thảo này được giải thích với các ví dụ chi tiết trong các phần sau.

Có thể bạn đã chọn gói bạn muốn tạo. Điều đầu tiên bạn cần làm là kiểm tra xem gói có trong kho lưu trữ đã được phân phối bằng cách sử dụng như sau:

Nếu một gói đã tồn tại, tốt, hãy cài đặt nó! :-) Nếu lúc cài đặt xuất hiện từ orphaned (điều đó có nghĩa người bảo trì gói đấy đã thiết lập tại Debian QA Group), bạn có thể chọn nó nếu nó vẫn có sẵn. Bạn cũng có thể giúp một gói nếu người bảo trị của gói đó đã tạo một "Request for Adoption" (RFA).[6]

Có một số tài nguyên trạng thái quyền sở hữu gói:

Một lưu ý quan trọng là Debian đã có các gói cho hầu hết các loại chương trình, và số lượng các gói đã có trong kho lưu trữ Debian lớn hơn nhiều so với các cộng tác viên có quyền tải lên. Do đó, đóng góp cho các gói đã có sẵn trong kho lưu trữ luôn được đánh giá cao hơn (và nhiều khả năng nhận tài trợ) bởi các nhà phát triển khác [7]. Bạn có thể đóng góp bằng nhiều cách:

  • Tiếp nhận gói mồ côi, nhưng vẫn đang được sử dụng

  • tham gia vào packaging teams

  • xử lý lỗi của các gói phổ biến

  • chuẩn bị QA or NMU uploads

Nếu bạn có thể nhận bảo trì gói nào, hãy lấy nguồn (bằng các công cụ như apt-get source packagename) và kiểm tra chúng. Tài liệu này tiếc là không bao gồm thông tin toàn diện về việc nhận bảo trì gói. Rất may, bạn không cần phải mất nhiều thời gian khó khăn để tìm hiểu cách gói làm việc, khi đã có ai đó trước đây thực hiện các thiết lập ban đầu cho bạn. Hãy tiếp tục đọc, và; Rất nhiều lời khuyên dưới đây vẫn sẽ được áp dụng cho trường hợp của bạn.

Nếu là một gói mới, và bạn quyết định muốn xem nó trong Debian, thực hiện theo các bước sau:

  • Trước tiên, bạn phải biết rằng chương trình hoạt động như thế nào, và đã thử nó một thời gian để xác nhận tính hữu dụng của nó.

  • Bạn phải kiểm tra xem có ai khác đang làm việc trên gói trên trang Work-Needing và Prospective Packages . Nếu không có ai khác đang làm việc trên nó, hãy gửi báo cáo lỗi ITP (Intent To Package) đến gói wnpp bằng cách sử dụng lệnh reportbug. Nếu ai đó đã làm việc đó rồi, hãy liên hệ với họ nếu bạn cảm thấy cần. Nếu không — hãy tìm một chương trình thú vị mà chưa ai đang duy trì.

  • Phần mềm phải có một giấy phép.

    • Đối với mục main, Chính sách Debian yêu cầu các gói phải tuân thủ hoàn toàn Nguyên tắc về Phần mềm Tự do Debian ( DFSG không yêu cầu một gói nào bên ngoài mục main để biên dịch hay thực thi. Đây là trường hợp bắt buộc.

    • Đối với mục contrib, nó phải tuân thủ DFSG nhưng nó có thể yêu cầu một gói bên ngoài mục main để biên dịch hoặc thực thi.

    • Còn mục non-free, nó có thể không tương thích với DFSG nhưng cần được phân phối .

    • Nếu bạn không chắc chắn về vị trí của gói đó, hãy đăng hỏi về giấy phép trên debian-legal@lists.debian.org và xin tư vấn.

  • Chương trình không nên tác động tới mối quan tâm bảo mật và bảo trì cho hệ thống Debian.

    • Chương trình nên được ghi chép đầy đủ và mã của nó cần phải có thể hiểu được (không làm rối)

    • Bạn nên liên hệ với tác giả của chương trình để kiểm tra nếu họ đồng ý với việc đóng gói nó trở nên thân thiện với Debian. Điều quan trọng là có thể tham khảo ý kiến ​​của tác giả trong trường hợp có bất kỳ vấn đề với chương trình, do đó, không cố gắng với gói phần mềm không còn phát triển/bảo trì từ thượng nguồn

    • Chương trình chắc chắn không nên chạy setuid root, hoặc thậm chí cao hơn, nó không cần phải setuid hoặc setgid để làm bất cứ điều gì.

    • Chương trình không nên là một daemon, hoặc cho vào trong thư mục */sbin, hoặc mở một cổng như là root.

Tất nhiên, cuối cùng chỉ là một biện pháp an toàn, và nhằm cứu bạn khỏi sự kích động của người dùng nếu bạn làm điều gì đó sai trái trong một số daemon setuid… Khi bạn có nhiều kinh nghiệm hơn trong trong gói, bạn sẽ có thể gói phần mềm kiểu như vậy.

Là một người bảo trì mới, bạn được khuyến khích để có được một số kinh nghiệm trong đóng gói với các gói đơn giản và không khuyến khích từ việc tạo ra các gói phức tạp.

  • Gói đơn giản

    • gói nhị phân duy nhất, arch = all (bộ sưu tập dữ liệu như hình nền)

    • gói nhị phân duy nhất, arch = all (các tệp thực thi được viết bằng ngôn thông dịch như POSIX shell)

  • Gói phức tạp trung bình

    • gói nhị phân duy nhất, arch = all (tệp tin thực thi nhị phân của ELF được biên dịch từ các ngôn ngữ như C và C ++)

    • nhiều gói nhị phân, arch = any + all (các gói cho các tập tin thực thi nhị phân ELF + tài liệu)

    • thượng nguồn ở định dạng khác với tar.gz hoặc tar.bz2

    • thượng nguồn chứa nội dung không thể giải quyết

  • Gói phức tạp cao

    • gói chứa các kịch bản được sử dụng bởi các gói khác

    • gói thư viện ELF chung được sử dụng bởi các gói khác

    • nhiều gói nhị phân bao gồm gói thư viện ELF

    • gói nguồn có nhiều thượng nguồn

    • gói module hạt nhân

    • các gói bản vá cho hạt nhân

    • bất kỳ gói nào kịch bản người bảo trì không tầm thường

Đóng gói gói phức tạp cao không phải là quá khó, nhưng nó đòi hỏi một chút kiến ​​thức. Bạn nên tìm kiếm hướng dẫn cụ thể cho từng tính năng phức tạp. Ví dụ, một số ngôn ngữ có tài liệu chính sách phụ của riêng mình:

Có một câu trong tiếng Latinh nói rằng: fabricando fit faber (thực hành làm cho hoàn hảo). Đó là tính cao nhất được đề nghị để thực hành và thử nghiệm với tất cả các bước của gói Debian với các gói đơn giản trong khi đọc hướng dẫn này. Một tarball thượng nguồn đơn giản hello-sh-1.0.tar.gz được tạo như sau có thể cung cấp một điểm khởi đầu tốt: [8]

$ mkdir -p hello-sh/hello-sh-1.0; cd hello-sh/hello-sh-1.0
$ cat > hello <<EOF
#!/bin/sh
# (C) 2011 Foo Bar, GPL2+
echo "Hello!"
EOF
$ chmod 755 hello
$ cd ..
$ tar -cvzf hello-sh-1.0.tar.gz hello-sh-1.0

Vì vậy, điều đầu tiên cần làm là tìm và tải về mã nguồn gốc. Có lẽ bạn đã có tập tin nguồn mà bạn đã chọn ở trang chủ của tác giả. Mã nguồn của các chương trình Unix tự do thường có trong tar+gzip định dạng với phần mở rộng là .tar.gz, tar+bzip2 định dạng với phần mở rộng là .tar.bz2 , hoặc tar+xz định dạng với phần mở rộng là .tar.xz . Các bản nén này thường chứa một thư mục gọi là package -version với tất cả các nguồn bên trong.

Nếu phiên bản mới nhất của mã nguồn có sẵn thông qua Version Control System(VCS) như Git, Subversion hoặc CVS, bạn cần phải lấy nó với git clone, svn co hoặc cvs co và đóng gói lại nó vào tar+gzip định dạng cho mình bằng cách sử dụng tuỳ chọn --exclude-vcs

Nếu mã nguồn chương trình của bạn xuất hiện dưới dạng một số loại lưu trữ khác (ví dụ: tên tập tin kết thúc bằng Z hoặc .zip [9]), Bạn cũng nên giải nén nó bằng các công cụ thích hợp và đóng gói lại nó.

Nếu mã nguồn chương trình của bạn đi kèm với một số nội dung không tuơng thích DFSG, bạn cũng nên giải nén nó để loại bỏ các nội dung đó và đóng gói lại nó bằng một phiên bản chỉnh sửa của thượng nguồn có chứa dfsg.

Với một ví dụ: Tôi sẽ sử dụng chương trình được gọi là gentoo , trình quản lý tệp GTK+. [10]

Tạo một thư mục con trong thư mục home của bạn có tên là debian hoặc deb hoặc bất cứ thứ gì bạn thấy thích hợp (ví dụ như ~/gentoo sẽ là tốt trong trường hợp này). Đặt tệp nén mã nguồn đã tải xuống vào trong đó và giải nén (với tar xzf gentoo-0.9.12.tar.gz ). Đảm bảo không có thông báo cảnh báo lỗi, thậm chí irrelevant, bởi vì các công cụ giải nén của người khác có thể hoặc không thể bỏ qua những dị thường này, vì vậy họ có thể gặp sự cố khi giải nén chúng. Dòng lệnh trình báo của bạn có thể giống như sau:

$ mkdir ~/gentoo ; cd ~/gentoo
$ wget http://www.example.org/gentoo-0.9.12.tar.gz
$ tar xvzf gentoo-0.9.12.tar.gz
$ ls -F
gentoo-0.9.12/
gentoo-0.9.12.tar.gz

Bây giờ bạn có một thư mục con khác, gọi là gentoo-0.9.12 . Đi vào thư mục đó và cẩn trọng đọc tài liệu được cung cấp. Thường có các tệp có README*, INSTALL*, *.lsm hoặc *.html . Bạn phải tìm hướng dẫn về cách biên dịch và cài đặt chương trình (có lẽ họ giả sử rằng bạn sẽ muốn cài đặt chương trình vào thư mục /usr/local/bin), bạn sẽ không làm điều đó, nhưng còn nhiều thứ về sau trong Phần 3.3, “Cài đặt các tệp tin đến đích của chúng”).

Bạn nên bắt đầu đóng gói với một thư mục mã nguồn hoàn toàn sạch sẽ (nguyên sơ), hoặc chỉ đơn giản với mã nguồn mới được giải nén

Các chương trình đơn giản thường có một Makefile và có thể được biên dịch chỉ bằng cách chạy lệnh make. [11] Một số còn hỗ trợ make check, nhằm tự kiểm tra điều kiện biên dịch. Để cài đặt chương trình vào thư mục đích thường được thực hiện với make install.

Bây giờ hãy thử biên dịch và chạy chương trình của bạn, để đảm bảo nó hoạt động đúng và không làm hỏng cái gì khác trong khi cài đặt hoặc chạy.

Ngoài ra, bạn có thể chạy make clean (hoặc tốt hơn nữa là make distclean) để dọn dẹp thư mục build. Đôi khi thậm chí còn hỗ trợ kịch bản gỡ cài đặt, make uninstall được sử dụng để xóa tất cả các tập tin đã cài đặt.

Rất nhiều chương trình phần mềm tự do được viết bằng ngôn ngữ CC++. Nhiều trong số đó sử dụng Autotools hoặc CMake để làm cho chúng dễ dàng biên dịch đối với các nền tảng khác nhau. Các công cụ xây dựng này cần được sử dụng để tạo tệp Makefile từ tệp nguồn bắt buộc khác. Sau đó, các chương trình dễ dàng được xây dựng bằng cách sử dụng make; make install .

Autotools là hệ thống xây dựng GNU bao gồm Autoconf, Automake, Libtool, và gettext. Bạn có thể nhận ra các nguồn như vậy bằng các tệp configure.ac, Makefile.am, và Makefile.in.[12]

Bước đầu tiên của quy trình làm việc với Autotools thường là chạy với bản thượng nguồn autoreconf -i -f trong thư mục nguồn và các tệp được tạo ra cùng với mã nguồn.

configure.ac-----+-> autoreconf -+-> configure
Makefile.am -----+        |      +-> Makefile.in
src/Makefile.am -+        |      +-> src/Makefile.in
                          |      +-> config.h.in
                      automake
                      aclocal
                      aclocal.m4
                      autoheader

Việc chỉnh sửa các tệp configure.acMakefile.am yêu cầu vài kiên thức về autoconfautomake. Xem info autoconfinfo automake.

Bước thứ hai của quy trình làm việc Autotools thường là chúng ta sẽ có được các tệp mới sinh ra và chỉ cần chạy ./configure && make trong thư mục nguồn để biên dịch thành chương trình binary.

Makefile.in -----+                +-> Makefile -----+-> make -> binary
src/Makefile.in -+-> ./configure -+-> src/Makefile -+
config.h.in -----+                +-> config.h -----+
                 |
  config.status -+
  config.guess --+

Bạn có thể thay đổi nhiều thứ trong Makefile; ví dụ bạn có thể thay đổi thư mục mặc định để cài đặt tệp bằng cách sử dụng tùy chọn ./configure --prefix=/usr.

Mặc dù không bắt buộc, việc cập nhật cấu hình configure và các tệp khác với autoreconf -i -f có thể cải thiện tính tương thích của mã nguồn. [13]

CMake là một hệ thống xây dựng thay thế. Bạn có thể nhận ra các nguồn như vậy bằng tệp CMakeLists.txt.

Nếu mã nguồn thượng nguồn là gentoo-0.9.12.tar.gz, bạn có thể dùng gentoo làm nguồn (source) tên gói0.9.12phiên bản thượng nguồn. Chúng được mô tả trong tệp debian/changelog chi tiết tại Phần 4.3, “changelog.

Mặc dù phương pháp tiếp cận đơn giản này là chủ yếu, bạn có thể cần phải điều chỉnh tên góiphiên bản thượng nguồn bằng cách đổi tên thượng nguồn theo Chính sách Debian và quy ước hiện hành.

Bạn phải chọn tên gói chỉ bao gồm các chữ thường (a-z), chữ số (0-9, dấu cộng (+) dấu trừ (-), và dấu chấm (.). Phải có ít nhất hai ký tự, phải bắt đầu bằng một ký tự chữ hoặc số, và không được giống với tên đã tồn tại. Bạn nên giữ chiều dài của nó trong vòng 30 ký tự. [14]

Nếu thượng nguồn sử dụng một số thuật ngữ chung chung như test-suite cho tên của nó, bạn nên đổi tên nó để xác định rõ ràng nội dung của nó và cũng tránh làm rối không gian tên. [15]

Bạn nên chọn phiên bản thượng nguồn chỉ bao gồm alphanumerics (0-9A-Za-z), dấu cộng ( + ), dấu ngã ( ~ ), và dấu chấm (. ). Nó phải bắt đầu bằng một chữ số (0-9). [16]Tốt nhất nên giữ chiều dài của nó trong vòng 8 ký tự nếu có thể. [17]

Nếu thượng nguồn không sử dụng cấu trúc phiên bản bình thường như 2.30.32 mà lại sử dụng một số kiểu như 11Apr29, một chuỗi tên mã ngẫu nhiên, hoặc một giá trị băm VCS như một phần của phiên bản, hãy chắc chắn loại bỏ chúng khỏi phiên bản thượng nguồn. Thông tin này có thể được ghi lại trong tệp debian/changelog. Nếu bạn cần tạo mới ra một chuỗi phiên bản, nên sử dụng định dạng YYYYMMDD như là 20110429 cho phiên bản thượng nguồn. Điều này đảm bảo rằng dpkg hiểu các phiên bản sau này chính xác như cho việc nâng cấp phiên bản. Nếu bạn cần đảm bảo chuyển đổi suôn sẻ sang cấu trúc phiên bản bình thường như 0.1 trong tương lai, hãy sử dụng định dạng 0~YYMMDD như 0~110429 cho phiên bản thượng nguồn.

Các tên phiên bản [18] có thể được so sánh bằng cách sử dụng dpkg(1) như sau:

$ dpkg --compare-versions ver1 op ver2

Quy tắc so sánh phiên bản có thể được tóm tắt như sau:

  • Chuỗi được so sánh từ đầu đến cuối chuỗi.

  • Các chữ cái lớn hơn chữ số.

  • Số được so sánh như số nguyên.

  • Các chữ cái được so sánh theo thứ tự mã ASCII.

  • Có các quy tắc đặc biệt cho các dấu chấm (.), cộng (+), ngã (~), như sau:

    0.0 < 0.5 < 0.10 < 0.99 < 1 < 1.0~rc1 < 1.0 < 1.0+b1 < 1.0+nmu1 < 1.1 < 2.0

Một trường hợp có thể xảy ra khi các bản phát hành thượng nguồn có phiên bản là gentoo-0.9.12-ReleaseCandidate-99.tar.gz nó là phiên bản trước của gentoo-0.9.12.tar.gz. Bạn cần đảm bảo rằng việc nâng cấp vẫn hoạt động bằng cách đổi tên nguồn thượng nguồn thành gentoo-0.9.12~rc99.tar.gz.

Thiết lập các biến môi trường shell $DEBEMAIL$DEBFULLNAME để các công cụ bảo trì Debian nhận biết địa chỉ email và tên của bạn cho việc sử dụng cho các gói .[19]

$ cat >>~/.bashrc <<EOF
DEBEMAIL="your.email.address@example.org"
DEBFULLNAME="Firstname Lastname"
export DEBEMAIL DEBFULLNAME
EOF
$ . ~/.bashrc

Các gói Debian thường là các gói non-native Debian được tạo từ các chương trình thượng nguồn. Nếu bạn muốn tạo gói Debian mới từ nguồn của một nguồn thượng nguồn gentoo-0.9.12.tar.gz, bạn có thể tạo một gói Debian đầu tiên bằng cách sử dụng lệnh dh_make như sau:

$ cd ~/gentoo
$ wget http://example.org/gentoo-0.9.12.tar.gz
$ tar -xvzf gentoo-0.9.12.tar.gz
$ cd gentoo-0.9.12
$ dh_make -f ../gentoo-0.9.12.tar.gz

Tất nhiên, hãy thay tên tệp bằng tên của bản lưu trữ gốc của bạn. [20] Xem dh_make(8) để biết chi tiết.

Bạn sẽ thấy một số câu hỏi về loại gói bạn muốn tạo. Gentoo là một gói nhị phân duy nhất — nó chị tạo ra một gói nhị phân, tức chỉ cần một tập tin .deb— vì vậy chúng ta sẽ chọn tùy chọn đầu tiên (với s), kiểm tra thông tin trên màn hình và xác nhận bằng cách nhấn ENTER. [21]

Việc thực hiện dh_make sẽ tạo một bản sao của tarball thượng nguồn gentoo_0.9.12.orig.tar.gz trong thư mục cha để phù hợp với việc tạo ra gói nguồn non-native Debian với tên debian.tar.gz sau này:

$ cd ~/gentoo ; ls -F
gentoo-0.9.12/
gentoo-0.9.12.tar.gz
gentoo_0.9.12.orig.tar.gz

Vui lòng lưu ý hai điểm chính của tên tệp tin này gentoo_0.9.12.orig.tar.gz:

  • Tên gói và phiên bản phân cách nhau bởi kí tự _ (gạch dưới)

  • Thành phần .orig được chèn trước .tar.gz

Bạn cũng nên lưu ý rằng nhiều tệp mẫu đã được tạo ra trong thư mục debian Chúng được giải thích ở Chương 4, Các tệp yêu cầu trong thư mục debianChương 5, Các tệp khác trong thư mục debian. Bạn cũng nên hiểu rằng việc đóng gói không thể là một quá trình tự động hoàn toàn. Bạn sẽ cần phải chỉnh sửa thượng nguồn cho Debian (xem Chương 3, Sửa đổi mã nguồn). Sau đó, bạn phải cần sử dụng phương pháp thích hợp cho công việc xây dựng gói Debian (Chương 6, Biên dịch gói), kiểm thử chúng (Chương 7, Kiểm tra gói để tìm lỗi), vả đẩy chúng lên máy chủ (Chương 9, Tải gói phần mềm lên). Tất cả các bước sẽ được giải thích.

Nếu bạn vô tình xoá một số tệp khuôn mẫu trong khi đang làm việc với chúng, bạn có thể khôi phục chúng bằng cách chạy dh_make với tùy chọn --addmissing trong thư mục mã nguồn đang làm việc

Cập nhật cho một gói hiện sẽ có thể phức tạp vì nó có thể sử dụng các kỹ thuật cũ. Khi học những điều cơ bản, vui lòng gắn bó với việc tạo ra một gói theo kỹ thuật mới; Giải thích thêm được đưa ra trong Chương 8, Cập nhật gói phần mềm.

Vui lòng lưu ý rằng mã nguồn không cần chứa bất kỳ hệ thống xây dựng nào đã thảo luận trong Phần 2.4, “Xây dựng hệ thống đơn giản”Phần 2.5, “Xây dựng hệ thống phổ biến”. Nó có thể chỉ là một tập hợp các dữ liệu đồ hoạ,... Việc cài đặt các tệp có thể được chỉ thực hiện bằng các tập tin cấu hình debhelper như là debian/install (xem Phần 5.11, “install).



[4] Đối với các gói mã nguồn Debian kiểu cũ với định dạng 1.0, package_version-revision.diff.gz được sử dụng để thay thế.

[5] Xem 5.6.1 "Source", 5.6.7 "Package", và 5.6.12 "Version".kiến trúc gói theo Debian Policy Manual, 5.6.8 "Architecture" và đuợc tự động ký bởi tiến trình xây dựng gói.

[7] Có thể nói rằng, sẽ luôn có những chương trình mới sẽ thật sự cần đóng gói mới

[8] Đừng lo lắng về việc thiếu tệp Makefile . Bạn có thể cài đặt lệnh hello bằng cách sử dụng debhelper như trong Phần 5.11, “install, hoặc bằng cách sửa đổi nguồn thượng nguồn để thêm tệp Makefile với mục install như trong Chương 3, Sửa đổi mã nguồn.

[9] Bạn có thể xác định định dạng lưu trữ bằng sử dụng lệnh file khi phần mở rộng tệp là không đủ thông tin.

[10] Chương trình này đã được đóng gói. phiên bản hiện tại sử dụng Autotools làm cấu trúc xây dựng nên sẽ khác với các ví dụ sau dựa trên phiên bản 0.9.12.

[11] Nhiều chương trình hiện đại đi kèm với một kịch bản configure mà khi thực hiện tạo tệp Makefile tùy chỉnh linh hoạt đối với hệ thống của bạn.

[12] Autotools là công cụ quá lớn để giải quyết trong hướng dẫn nhỏ này. Phần này chỉ nhằm cung cấp các từ khoá và tham khảo. Hãy đảm bảo đọc Autotools Tutorial và bản sao cục bộ của /usr/share/doc/autotools-dev/README.Debian.gz, nếu bạn cần sử dụng nó.

[13] Bạn có thể tự động hoá việc này bằng cách sử dụng gói dh-autoreconf. Xem Phần 4.4.3, “Tuỳ chỉnh tệp rules.

[14] Độ dài của trường tên gói mặc định trong aptitude là 30. Và có hơn 90% gói có độ dài tên dưới 24 ký tự.

[15] Nếu bạn theo dõi Debian Developer's Reference 5.1. "New packages", quá trình ITP thường sẽ bắt lỗi loại vấn đề này.

[16] Quy tắc chặt chẽ hơn này sẽ giúp bạn tránh nhầm lẫn tên tập tin.

[17] Độ dài của trường phiên bản mặc định trong aptitude là 10. Phiên bản Debian với dấu gạch nối trước thường tiêu tốn 2. Đối với hơn 80% gói, phiên bản thượng nguồn ít hơn 8 ký tự và phiên bản Debian có ít hơn 2 ký tự. Đối với hơn 90% gói, phiên bản thượng nguồn ít hơn 10 ký tự và phiên bản Debian ít hơn 3 ký tự.

[18] Các chuỗi tên phiên bản có thể là upstream version (version), Debian revision (revision), hoặc version (version-revision). Xem Phần 8.1, “Phiên bản tu chỉnh Debian mới” để biết cách mà Debian revision hoạt động

[19] Ví dụ dưới đây giả định bạn đang sử dụng Bash là shell đăng nhập mặc định của bạn. Nếu bạn sử dụng một số shell đăng nhập khác như Z shell, hãy sử dụng các file cấu hình tương ứng thay vì ~/.bashrc.

[20] Nếu thượng nguồn đã cung cấp thư mục debian và cả nội dung của nó, hãy chạy lệnh dh_make với tùy chọn thêm --addmissing. Định dạng nguồn 3.0 (quilt) là đủ mạnh để không làm hỏng các gói này. Bạn có thể cần phải cập nhật các nội dung được cung cấp bởi phiên bản thượng nguồn cho gói Debian của bạn.

[21] Có vài sự lựa chọn bao gồm: s cho Single binary package, i cho arch-Independent package, m cho Multiple binary packages, l cho Library package, k cho Kernel module package, n cho kernel patch package, và b cho cdbs package. Tài liệu này tập trung vào sử dụng câu lệnh dh (từ gói debhelper) để tạo một single binary package, nhưng cũng nói tới làm sao sử dụng nó cho arch-independent hay multiple binary packages. Gói cdbs cung cấp các nền tảng kịch bản khác nhau cho lệnh dh và cả nằm ngoài phạm vi tài liệu này.