Chương 1. Bắt đầu Đúng cách

# Chương 1. Bắt đầu Đúng cách

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.

Tài liệu này mô tả việc xây dựng một gói Debian cho người dùng Debian bình thường và các nhà phát triển tiềm năng. Nó sử dụng ngôn ngữ khá phi kỹ thuật, và được mô tả với các ví dụ. Có một câu nói Latin cổ đại: Longum iter est per praecepta, breve et efficax per exempla (Đó là một chặng đường dài bởi các quy tắc, nhưng ngắn và hiệu quả với các ví dụ).

Tài liệu này đã được cập nhật cho bản phát hành Debian `jessie`. [1]

Một trong những điều làm cho Debian trở thành một hệ thống gói phần mềm hàng đầu. Mặc dù có một lượng lớn phần mềm đã có trong định dạng Debian, đôi khi bạn cần phải cài đặt phần mềm mà nó không có. Bạn tự hỏi làm thế nàođể bạn có thể tạo gói cho riêng bạn; Và có lẽ bạn nghĩ đó là một nhiệm vụ rất khó khăn. Vâng, nếu bạn là người mới làm quen trên Linux, thật khó, nhưng nếu bạn là một tân binh, bạn sẽ không đọc tài liệu này bây giờ :-) Bạn cần biết một chút về lập trình Unix nhưng bạn chắc chắn không cần phải là một cao thủ. [2]

Tuy nhiên một điều chắc chắn là: để tạo và duy trì đúng các gói Debian phải mất nhiều giờ. Không mắc sai lầm, vì hệ thống của chúng tôi làm việc bảo trì cần phải có cả kỹ thuật có thẩm quyền và cả sự siêng năng.

Nếu bạn cần trợ giúp về đóng gói, vui lòng đọc Phần 1.4, “Nơi để yêu cầu trợ giúp”.

Các phiên bản mới hơn của tài liệu này luôn sẵn sàng trực tuyến tại http://www.debian.org/doc/maint-guide/ và trong gói `maint-guide`. Bản dịch có thể có sẵn trong các gói như `maint-guide-es`. Xin lưu ý rằng tài liệu này có thể đã lỗi thời.

Vì đây là một hướng dẫn, tôi chọn để giải thích từng bước chi tiết cho một số chủ đề quan trọng. Một số người trong số họ có thể không có liên quan đến bạn. Làm ơn hãy kiên nhẫn. Tôi cũng đã cố ý bỏ qua một số trường hợp góc và chỉ cung cấp con trỏ để giữ tài liệu này đơn giản.

## 1.1. Động lực xã hội của Debian

Dưới đây là một số quan sát về động lực xã hội của Debian, được trình bày với hy vọng rằng nó sẽ chuẩn bị cho bạn tương tác với Debian:

- Tất cả chúng ta đều là tình nguyện viên.

  - Bạn không thể áp đặt lên những người khác phải làm gì.

  - Bạn nên có động cơ để làm việc một mình.

- Hợp tác thân thiện là động lực.

  - Đóng góp của bạn không nên quá căng thẳng người khác.

  - Đóng góp của bạn chỉ có giá trị khi những người khác đánh giá cao nó.

- Debian không phải là trường học của bạn mà bạn nhận được sự chú ý tự động của giáo viên.

  - Bạn sẽ có thể tự học hỏi nhiều điều.

  - Sự chú ý của các tình nguyện viên khác là một nguồn lực khan hiếm.

- Debian đang không ngừng cải tiến.

  - Bạn sẽ phải tạo ra các gói chất lượng cao.

  - Bạn nên thích nghi với chính mình để thay đổi.

Có nhiều người tương tác với Debian với các vai trò khác nhau:

- upstream author: người đã tạo ra chương trình gốc.

- upstream maintainer: người hiện đang duy trì bảo trì chương trình gốc.

- maintainer: người tạo ra gói Debian cho chương trình.

- sponsor: một người giúp đỡ người bảo trì tải các gói lên kho lưu trữ Debian chính thức (sau khi kiểm tra nội dung của chúng).

- mentor: người giúp những người mới làm quen với bảo trì gói vv

- Debian Developer (DD): thành viên của dự án Debian với quyền tải đầy đủ lên kho lưu trữ Debian chính thức.

- Debian Maintainer (DM): người có quyền tải lên giới hạn về kho lưu trữ gói Debian chính thức.

Xin lưu ý rằng bạn không thể trở thành một Debian Developer (DD) chính thức qua 1 đêm, vì nó đòi hỏi nhiều kỹ năng hơn. Xin đừng nản lòng vì điều này. Nếu nó là hữu ích cho người khác, bạn vẫn có thể tải gói của bạn hoặc như là một maintainer thông qua một sponsor hoặc như một Debian Maintainer.

Xin lưu ý rằng bạn không cần tạo bất kỳ gói mới nào để trở thành Nhà phát triển Debian chính thức. Đóng góp cho các gói hiện có cũng có thể cung cấp một con đường để trở thành Nhà phát triển Debian chính thức. Có nhiều gói đang chờ người bảo dưỡng tốt (xem Phần 2.2, “Chọn chương trình của bạn”).

Vì chúng ta chỉ tập trung vào các khía cạnh kỹ thuật của đóng gói trong tài liệu này, vui lòng tham khảo những điều dưới đây để tìm hiểu cách các chức năng của Debian và cách bạn có thể tham gia:

- Debian: 17 năm của Phần mềm Tự do,"do-ocracy", và dân chủ (Các trang giới thiệu)

- Làm thế nào bạn có thể giúp Debian? (chính thức)

- Câu hỏi Thường Gặp về Debian GNU / Linux, Chương 13 -"Góp phần Dự án Debian" (bán chính thức)

- Debian Wiki, HelpDebian (bổ sung)

- Trang web thành viên của Debian (chính thức)

- Câu hỏi thường gặp của trợ giảng của Debian (bổ sung)

## 1.2. Các chương trình cần thiết cho sự phát triển

Trước khi bạn bắt đầu bất cứ điều gì, bạn nên chắc chắn rằng bạn đã cài đặt đúng một số gói bổ sung cần thiết cho sự phát triển. Lưu ý rằng danh sách không chứa bất kỳ gói nào được đánh dấu `essential` hoặc `required` - chúng tôi mong rằng bạn đã cài đặt xong.

Các gói sau đi kèm với cài đặt Debian tiêu chuẩn, do đó có lẽ bạn đã có chúng rồi (cùng với bất kỳ gói bổ sung nào mà chúng phụ thuộc). Tuy nhiên, bạn nên kiểm tra chúng bằng gói `aptitude show `pakage`` hoặc với `dpkg -s `package``.

Gói phần quan trọng nhất để cài đặt trên hệ thống phát triển của bạn là gói `build-essential`. Một khi bạn cố gắng cài đặt nó, nó sẽ pull in gói khác cần thiết để có một môi trường xây dựng cơ bản.

Đối với một số loại bao bì, đó là tất cả những gì bạn cần; Tuy nhiên, có một bộ gói khác mà mặc dù không cần thiết cho tất cả các gói được xây dựng rất hữu ích để cài đặt hoặc có thể được yêu cầu bởi gói của bạn:

- `autoconf`, `automake`, và `autotools-dev` - nhiều chương trình mới hơn sử dụng các tập lệnh cấu hình và `Makefile` các tệp tin được xử lý trước với sự trợ giúp của các chương trình như thế này (xem `info autoconf`, `info automake`). `autotools-dev` giữ các phiên bản cập nhật của các tệp tin tự động nhất định và có tài liệu về cách tốt nhất để sử dụng các tệp đó.

- `debhelper` và `dh-make` - `dh-make` là cần thiết để tạo ra bộ xương của gói ví dụ của chúng tôi, Và nó sẽ sử dụng một số công cụ `debhelper` để tạo các gói. Chúng không cần thiết cho mục đích này, nhưng được đánh giá cao được đề xuất cho người bảo trì mới. Nó làm cho toàn bộ quá trình rất dễ dàng để bắt đầu, và để kiểm soát sau đó. (Xem dh_make(8), debhelper(1).) [3]

  Công cụ mới `debmake` có thể sử dụng thay thế cho tiêu chuẩn `dh-make`. Nó làm nhiều hơn và đi kèm thêm tài liệu HTML với các mẫu ví dụ đóng gói thêm trong `debmake-doc`.

- `devscripts` - gói này chứa một số kịch bản hữu ích có thể giúp ích cho người bảo trì, nhưng chúng cũng không cần thiết cho việc xây dựng các gói. Các gói đề nghị và đề xuất bởi gói này rất đáng để xem xét. (Xem `/usr/share/doc/devscripts/README.gz`.)

- `fakeroot` - công cụ tiện ích này cho phép bạn giả lập root khi cần thiết cho một số phần của quá trình xây dựng. (Xem fakeroot(1).)

- `file` - chương trình tiện ích này có thể xác định loại tập tin là gì. (Xem file(1).)

- `gfortran` - trình biên dịch GNU Fortran 95, sẽ là cần thiết nếu chương trình của bạn được viết bằng Fortran. (Xem gfortran(1).)

- `git` - gói này cung cấp một hệ thống quản lý phiên bản phổ biến được thiết kế để xử lý các dự án rất lớn với tốc độ và hiệu quả; Nó được sử dụng cho nhiều dự án mã nguồn mở lớn, nhất là nhân Linux. (Xem git(1), Tài liệu git (`/usr/share/doc/git-doc/index.html`).)

- `gnupg` - một công cụ cho phép bạn dùng chữ ký số để ký gói. Điều này đặc biệt quan trọng nếu bạn muốn phân phối các gói cho người khác, và chắc chắn bạn sẽ làm điều đó khi tác phẩm của bạn được đưa vào phân phối Debian. (Xem gpg(1).)

- `gpc` - trình biên dịch Pascal GNU, cần thiết nếu chương trình của bạn được viết bằng Pascal. Đáng lưu ý ở đây là `fp-compiler`, Free Pascal Compiler, cũng tốt trong nhiệm vụ này. (Xem gpc(1), ppc386(1).)

- `lintian` - đây là trình kiểm tra gói Debian, để cho bạn biết về bất kỳ lỗi phổ biến nào sau khi bạn xây dựng gói và giải thích các lỗi được tìm thấy. (Xem lintian(1), Hướng dẫn sử dụng Lintian .)

- `patch` - tiện ích hữu ích này sẽ lấy một tệp có chứa sự thay đổi (được sản sinh bởi chương trình diff) và áp dụng nó vào tệp gốc, tạo ra một phiên bản vá. (Xem patch(1).)

- `patchutils` - gói này chứa một số tiện ích để làm việc với các bản vá như lsdiff, interdiff và lệnh filterdiff .

- `pbuilder` - gói này chứa các chương trình được sử dụng để tạo và duy trì môi trường chroot. Xây dựng gói Debian trong môi trường chroot này sẽ kiểm tra sự phụ thuộc thư viện phù hợp và tránh lỗi FTBFS (Fails To Build From Source). (Xem pbuilder ( 8) và pdebuild ( 1 ))

- `perl` - Perl là một trong những ngôn ngữ lập trình được sử dụng phổ biến nhất trên các hệ thống Unix ngày nay, thường được gọi là Unix's Swiss Army Chainsaw. (Xem perl(1).)

- `python` - Python là một trong những ngôn ngữ kịch bản thông dịch được sử dụng nhiều nhất trên hệ thống Debian, kết hợp sức mạnh vượt trội với cú pháp rất rõ ràng. (Xem python( 1 ).)

- `quilt` - gói này giúp bạn quản lý một số lượng lớn các bản vá lỗi bằng cách theo dõi những thay đổi mà mỗi bản vá lỗi tạo ra. Các bản vá lỗi có thể được áp dụng, không áp dụng, làm mới và nhiều hơn nữa. (Xem quilt(1) và `/usr/share/doc/quilt/quilt.pdf.gz` .)

- `xutils-dev` - một vài chương trình, thường xây dựng cho X11, sử dụng chương trình này để tạo ra các tệp tin `Makefile` từ các cài đặt của các hàm macro. (Xem imake(1), xmkmf(1).)

Các mô tả ngắn được đưa ra ở trên chỉ phục vụ để giới thiệu cho bạn những gì mỗi gói thực hiện. Trước khi tiếp tục, hãy đọc tài liệu của mỗi chương trình có liên quan, bao gồm cả những chương trình được cài đặt thông qua sự phụ thuộc gói như make, ít nhất, cho việc sử dụng tiêu chuẩn. Có vẻ như bây giờ kiến thức khá nặng, nhưng sau đó bạn sẽ rất vui vì bạn đã đọc nó. Nếu bạn có câu hỏi cụ thể sau này, tôi sẽ đề nghị đọc lại các tài liệu đã đề cập ở trên.

## 1.3. Tài liệu cần thiết cho sự phát triển

Sau đây là tài liệu rất quan trọng mà bạn nên đọc cùng với tài liệu này:

- `debian-policy` - Debian Policy Manual bao gồm các giải thích về cấu trúc và nội dung của kho lưu trữ Debian, một số vấn đề thiết kế hệ điều hành, Filesystem Hierarchy Standard (FHS, nơi mà mỗi tập tin và thư mục phải là),vv .Đối với bạn, điều quan trọng nhất là nó mô tả các yêu cầu mà mỗi gói phải đáp ứng để được đưa vào trong phân phối. (Xem bản sao địa phương của `/usr/share/doc/debian-policy/policy.pdf.gz` and `/usr/share/doc/debian-policy/fhs/fhs-3.0.pdf.gz`.)

- `developer-reference` - Debian Developer's Refrence mô tả tất cả các vấn đề không cụ thể về các chi tiết kỹ thuật của gói, như cấu trúc của kho lưu trữ, cách đổi tên, mồ côi, hoặc nhận các gói, làm thế nào để làm NMUs, làm thế nào để quản lý lỗi, cách thức đóng gói tốt nhất, khi nào và ở đâu để tải lên vv (Xem bản sao của địa phương của `/usr/share/doc/developers-reference/developers-reference.pdf`.)

Sau đây là tài liệu quan trọng mà bạn nên đọc cùng với tài liệu này:

- Autotools Tutorial cung cấp một huớng dẫn rất tốt cho GNU Build System được biết như là GNU Autotools là thành phần quan trọng nhất cho Autoconf, Automake, Libtool, and gettext.

- `gnu-standards` - gói này chứa hai phần tài liệu từ dự án GNU: GNU Coding Standards, và Information for Maintainers of GNU Software. Mặc dù Debian không yêu cầu những điều này được tuân theo, những điều này vẫn còn hữu ích như các hướng dẫn và thông thường. (Xem bản sao địa phương của `/usr/share/doc/gnu-standards/standards.pdf.gz` và `/usr/share/doc/gnu-standards/maintain.pdf.gz`.)

Nếu tài liệu này mâu thuẫn với bất kỳ tài liệu nào được đề cập ở trên, nếu chúng là đúng. Vui lòng gửi một báo cáo lỗi trên `maint-guide` gói bằng cách sử dụng reportbug.

Sau đây là một tài liệu hướng dẫn thay thế mà bạn có thể đọc cùng với tài liệu này:

- Debian Packaging Tutorial

## 1.4. Nơi để yêu cầu trợ giúp

Trước khi bạn quyết định đặt câu hỏi của mình ở nơi công cộng, vui lòng đọc tài liệu tốt

- Các tệp trong gói `/usr/share/doc/`package`` cho tất cả các gói phù hợp

- Nội dung của lệnh `man `command`` cho tất cả các lệnh thích hợp

- Nội dung của lệnh `info `command`` cho tất cả các lệnh thích hợp

- các nội dung tại debian-mentors@lists.debian.org mailing list archive

- các nội dung tại debian-devel@lists.debian.org mailing list archive

Bạn có thể sử dụng công cụ tìm kiếm web hiệu quả hơn bằng cách bao gồm các chuỗi tìm kiếm như `site:lists.debian.org` để hạn chế tên miền.

Làm một gói thử nghiệm nhỏ là một cách hay để tìm hiểu chi tiết về đóng gói. Kiểm tra các gói đã được duy trì tốt hiện tại là cách tốt nhất để tìm hiểu làm thế nào người khác đóng các gói

Nếu bạn vẫn có câu hỏi về đóng gói mà bạn không thể tìm thấy câu trả lời trong tài liệu sẵn có và tài nguyên web, bạn có thể nhờ họ tương tác:

- debian-mentors@lists.debian.org mailing list. (Danh sách gửi thư này dành cho người mới bắt đầu.)

- debian-devel@lists.debian.org mailing list. (Danh sách gửi thư dành cho chuyên gia)

- IRC ví dụ như `#debian-mentors`.

- Các đội tập trung vào một bộ gói cụ thể. (Danh sách đầy đủ tại https://wiki.debian.org/Teams)

- Danh sách gửi thư cụ thể theo ngôn ngữ ví dụ như debian-devel-{french,italian,portuguese,spanish}@lists.debian.org hoặc debian-devel@debian.or.jp. (Danh sách đầy đủ tại https://lists.debian.org/devel.html và https://lists.debian.org/users.html)

Các nhà phát triển giàu kinh nghiệm của Debian sẽ sẵn sàng giúp bạn, nếu bạn hỏi đúng cách sau khi thực hiện những nỗ lực bắt buộc của bạn.

Khi bạn nhận được báo cáo lỗi (vâng, lỗi thực sự!), Bạn sẽ biết rằng đã đến lúc bạn phải khai thác vào Debian Bug Tracking System và đọc tài liệu ở đó, để được có khả năng giải quyết các báo cáo hiệu quả. Tôi rất khuyên bạn nên đọc Debian Developer's Reference, 5.8. "Handling bugs".

Ngay cả khi tất cả đều hoạt động tốt, đó là thời gian để bắt đầu cầu nguyện. Tại sao? Bởi vì chỉ trong vài giờ (hoặc ngày) người dùng từ khắp nơi trên thế giới sẽ bắt đầu sử dụng gói của bạn và nếu bạn mắc một số lỗi nghiêm trọng, bạn sẽ nhận được mailbombed bởi nhiều người dùng Debian tức giận …... Đùa thôi :-)

Hãy thư giãn và sẵn sàng cho các báo cáo lỗi, vì còn rất nhiều việc phải làm trước khi gói của bạn hoàn toàn phù hợp với các chính sách của Debian và các hướng dẫn thực hành tốt nhất của nó (một lần nữa đọc tài liệu thật chi tiết). Chúc may mắn!

[1] Tài liệu giả định bạn đang sử dụng `jessie` hoặc hệ thống mới hơn. Nếu bạn cần phải làm theo các văn bản này trong một hệ thống cũ hơn (bao gồm cả một hệ thống Ubuntu cũ hơn vv), bạn phải cài đặt ít nhất các gói `dpkg` và `debhelper`.

[2] Bạn có thể tìm hiểu về cách xử lý cơ bản của một hệ thống Debian từ Debian Reference. Nó cũng chứa một số gợi ý để tìm hiểu về lập trình Unix.

[3] Ngoài ra còn có một số gói chuyên dụng hơn nhưng tương tự như `dh-make-perl`, `dh-make-php`, v.v.

Debian New Maintainers' Guide |  | Chương 2. Những bước đầu tiên