Làm thế nào để xây dựng một gói Debian / Ubuntu từ nguồn?


116

Tôi có nguồn của một chương trình (lấy từ cvs / svn / git / ...) và tôi muốn xây dựng một gói Debian / Ubuntu cho nó. Gói có trong kho, nhưng:

  • Nó là một phiên bản cũ hơn (thiếu các tính năng tôi cần)
  • Tôi cần các tùy chọn biên dịch hơi khác so với mặc định.

Cách dễ nhất để làm điều đó là gì? Tôi lo lắng về một vài điều

  • Làm cách nào để kiểm tra xem tôi đã liệt kê tất cả các phần phụ thuộc một cách chính xác chưa? (Tôi có thể nhận được một số gợi ý bằng cách xem phiên bản cũ phụ thuộc vào những gì, nhưng các phụ thuộc mới có thể đã được thêm vào.)
  • Làm cách nào để ngăn hệ thống cập nhật cài đặt phiên bản cũ hơn trong kho lưu trữ trên bản cập nhật?
  • Làm cách nào để ngăn hệ thống cài đặt phiên bản mới hơn (khi nó hết hạn), ghi đè gói tùy chỉnh của tôi?

Câu trả lời:


78

bạn có thể sử dụng gói đặc biệt "checkinstall" cho tất cả các gói thậm chí chưa có trong debian / ubuntu.

Bạn có thể sử dụng "uupdate" ( apt-get install devscripts) để tạo một gói từ nguồn với các nguồn debian hiện có:

Ví dụ cho libdrm2:

apt-get build-dep libdrm2
apt-get source libdrm2
cd libdrm-2.3.1
uupdate ~/Downloads/libdrm-2.4.1.tar.gz
cd ../libdrm-2.4.1
dpkg-buildpackage -us -uc -nc

Cảm ơn! Tôi vừa sử dụng cái này để chuyển Subversion 1.6.6 sang bản cài đặt Ubuntu chỉ có 1.6.5 là phiên bản mới nhất hiện có và nó hoạt động hoàn hảo. Đã tiết kiệm cho tôi kha khá giờ mày mò! :)
Carlos Villela

Bạn có thể cung cấp thêm một chút bối cảnh xung quanh các lệnh này không? libdrm-2.3.1Chính xác là ở đâu? Ngoài ra, libdrm-2.4.1.tar.gznguồn gốc từ đâu (giả định ban đầu của tôi là tệp nhị phân đã biên dịch của ứng dụng mà chúng tôi muốn đóng gói trong bản deb, nhưng thay thế phiên bản hiện có, điều đó có chính xác không?)
wheeler

Nếu bạn gặp lỗi You must put some 'source' URIs in your sources.list, hãy bỏ ghi chú các dòng deb-src trong của bạn/etc/apt/sources.list
Christian

27

Đầu tiên, câu hỏi tiêu đề: Giả sử đã có thư mục debian, hãy ở trong thư mục nguồn (thư mục chứa thư mục debian) và gọi dpkg-buildpackage. Tôi muốn chạy nó với các tùy chọn sau:

dpkg-buildpackage -us -uc -nc

có nghĩa là không ký kết quả và không làm sạch.

Làm cách nào để kiểm tra xem tôi đã liệt kê tất cả các phần phụ thuộc một cách chính xác chưa?

Lấy các phụ thuộc là một nghệ thuật đen. Cách "chính thức" là kiểm tra sự phụ thuộc vào bản dựng là nếu gói xây dựng chỉ với hệ thống cơ sở, các gói "bản dựng cần thiết" và các phụ thuộc bản dựng mà bạn đã chỉ định. Không biết câu trả lời chung cho Phụ thuộc thông thường, chỉ cần lội vào :)

Làm cách nào để ngăn hệ thống cập nhật cài đặt phiên bản cũ hơn trong kho lưu trữ trên bản cập nhật? Làm cách nào để ngăn hệ thống cài đặt phiên bản mới hơn (khi nó hết hạn), ghi đè gói tùy chỉnh của tôi?

Kiến thức của tôi có thể đã lỗi thời về vấn đề này, nhưng để giải quyết cả hai: Sử dụng dpkg --set-selices. Giả sử nullidentd là gói bạn muốn giữ nguyên, hãy chạy dưới dạng root

echo 'nullidentd hold' | dpkg --set-selections

Ngoài ra, vì bạn đang xây dựng từ nguồn, bạn có thể sử dụng kỷ nguyên để đặt số phiên bản cao một cách giả tạo và không bao giờ bị làm phiền nữa. Để sử dụng một kỷ nguyên, hãy thêm một mục nhập mới vào tệp debian / changelog và đặt 99: vào trước số phiên bản. Với ví dụ nullidentd của tôi, dòng đầu tiên của bảng thay đổi được cập nhật của bạn sẽ đọc:

nullidentd (99:1.0-4) unstable; urgency=low

Liên kết của Bernard rất tốt, đặc biệt nếu bạn phải tự tạo thư mục debian - cũng hữu ích là tài liệu tham khảo dành cho nhà phát triểntrang tài nguyên chung . Liên kết của Adam cũng có vẻ tốt nhưng tôi không quen với nó.


1
"dpkg --set-selices" vẫn hoạt động, nhưng một phương pháp tốt hơn ngày nay sẽ là "aptitude hold nullidentd".
Mark Baker

6

Đối với những gì bạn muốn làm, bạn có thể muốn sử dụng khác biệt nguồn debian, vì vậy gói của bạn tương tự như gói chính thức ngoại trừ phiên bản ngược dòng được sử dụng. Bạn có thể tải xuống nguồn khác từ pack.debian.org hoặc có thể tải nó cùng với .dsc và kho lưu trữ nguồn gốc bằng cách sử dụng "apt-get source".

Sau đó, bạn giải nén phiên bản mới của nguồn ngược dòng, thay đổi vào thư mục đó và áp dụng khác biệt mà bạn đã tải xuống bằng cách thực hiện

zcat ~/downloaded.diff.gz | patch -p1
chmod +x debian/rules

Sau đó, thực hiện các thay đổi bạn muốn để biên dịch các tùy chọn và xây dựng gói bằng cách thực hiện

dpkg-buildpackage -rfakeroot -us -uc


3
  • đặt thư mục "debian" từ gói gốc vào thư mục nguồn của bạn
  • sử dụng " dch " để cập nhật phiên bản của gói
  • sử dụng "debuild" để xây dựng gói

2

Tôi tin rằng đây là 'kinh thánh' của gói Debian.

Chà, đó là hướng dẫn dành cho người bảo trì mới Debian, vì vậy nhiều phần trong số đó sẽ không thể áp dụng được, nhưng chúng bao gồm những gì sẽ xảy ra.



1

Đây là hướng dẫn xây dựng gói Debian.

Về cơ bản, bạn cần:

  1. Thiết lập cấu trúc thư mục của bạn
  2. Tạo tệp điều khiển
  3. Tùy chọn tạo tập lệnh postinst hoặc prerm
  4. Chạy dpkg-deb

Tôi thường làm tất cả những điều này trong Makefile của mình, vì vậy tôi có thể chỉ cần gõ lệnh make để lấy ra tệp nhị phân và đóng gói nó trong một lần.


1

Làm cách nào để kiểm tra xem tôi đã liệt kê tất cả các phần phụ thuộc một cách chính xác chưa?

Đây pbuilderlà một công cụ tuyệt vời để kiểm tra cả phụ thuộc xây dựng và phụ thuộc bằng cách thiết lập một hệ thống cơ sở sạch trong môi trường chroot. Bằng cách biên dịch gói trong pbuilder, bạn có thể dễ dàng kiểm tra các phụ thuộc của bản dựng và bằng cách kiểm tra nó trong môi trường trình tạo, bạn có thể kiểm tra các phụ thuộc.


1

Nếu bạn muốn cài đặt các phụ thuộc bản dựng một cách nhanh chóng và dễ dàng, hãy sử dụng:

apt-get build-dep

Điều này cài đặt các phụ thuộc. Bạn cần các dòng nguồn trong sources.list của mình cho việc này:

deb-src http://ftp.nl.debian.org/debian/ squeeze-updates main contrib non-free

Nếu bạn đang hỗ trợ các gói từ thử nghiệm sang ổn định, xin lưu ý rằng các phần phụ thuộc có thể đã thay đổi. Lệnh apt-get build-deb cài đặt các phần phụ thuộc cho các gói nguồn trong kho lưu trữ hiện tại của bạn.

Nhưng tất nhiên, dpkg-buildpackage -us -uc sẽ hiển thị cho bạn mọi phụ thuộc đã gỡ cài đặt.

Nếu bạn muốn biên dịch thường xuyên hơn, hãy sử dụng cowbuilder.

apt-get install cowbuilder

Sau đó, tạo một khu vực xây dựng:

sudo DIST = bóp ARCH = trình xây dựng amd64 --create

Sau đó, biên dịch một gói nguồn:

apt-get source cowsay

# do your magic editing
dpkg-source -b cowsay-3.03+dfsg1              # build the new source packages
cowbuilder --build cowsay_3.03+dfsg1-2.dsc    # build the packages from source

Xem nơi người xây dựng đặt gói kết quả.

Chúc may mắn!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.