Làm thế nào để có được các cờ biên dịch được sử dụng để xây dựng các nhị phân trong gói (.deb)?


7

Tôi biết rằng apt-get source <package_name>cung cấp cho bạn các gói nguồn. Nó chứa một debianthư mục với một tập tin được gọi là rules. Nếu tôi hiểu chính xác, tệp này mô tả cách gói nguồn có thể được chuyển đổi thành .debgói, bao gồm các cờ trình biên dịch nào sẽ được sử dụng.

Hai câu hỏi:

  1. Làm thế nào để tôi có được các cờ biên dịch thực sự được sử dụng? Có cần thiết phải chạy make -n(nếu điều này thậm chí có thể) hoặc tôi có thể lấy chúng bằng cách nào đó bằng cách phân tích (các) tài liệu không?
  2. Đưa ra trường hợp của một gói nguồn từ một kho lưu trữ chính thức. Các trình biên dịch có gắn cờ 100% được xác định bởi rulestệp hay chúng phụ thuộc vào hệ thống mà việc .debtạo được thực hiện? Tôi có cần 'phản chiếu' hệ thống xây dựng chính thức để có được những lá cờ giống như đã được sử dụng trong .debquy trình xây dựng chính thức không? Tôi có thể làm cái này như thế nào?

Tôi đã học được ở đây , debian không có chính sách chính thức mà cờ trình biên dịch được sử dụng cho các nhị phân đóng gói .deb.

Câu trả lời:


5

Các cờ biên dịch được sử dụng là một chức năng của

  • các debian/rulestập tin,
  • tập tin xây dựng của gói (vì tác giả ngược dòng cũng có thể chỉ định các cờ ở đó),
  • hệ thống xây dựng được sử dụng ( dh, cdbsv.v.),
  • cài đặt trình biên dịch mặc định.

Để xem các cờ được sử dụng, bạn cần phải biên dịch gói một cách hiệu quả:

debian/rules build

Đang thử những thứ như

debian/rules -n

nói chung sẽ không đưa bạn đi rất xa; ví dụ trên dhgói dựa trên nó sẽ chỉ nói

dh build

hoặc một cái gì đó tương tự; yêu cầu dhcho thấy những gì sẽ làm (với --no-act) sẽ sản xuất

dh_testdir
dh_auto_configure
dh_auto_build

và như thế.

Không có cách nào dễ chứng minh, dễ giải thích để xác định các cờ xây dựng bằng cách đọc debian/rules; bạn có thể có được một số ý tưởng bằng cách tìm kiếm các cờ được đặt ở đó, và cũng (nếu thích hợp) bằng cách tìm kiếm các tùy chọn cho dpkg-buildflags(chẳng hạn như DEB_BUILD_MAINT_OPTIONS) và chạy nó. Đối với nhiều gói, cách dễ nhất để xem cờ nào được sử dụng là xem nhật ký xây dựng cho các gói được gửi trong kho lưu trữ, bắt đầu từ https://buildd.debian.org . Ví dụ các bản ghi cho coreutilstrêni386 cho thấy những lá cờ được sử dụng là -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -fstack-protector-strong -Wformat -Werror=format-securitycho biên soạn, và -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wl,--as-needed -Wl,-z,relrođể liên kết (nhờ Faheem Mitha để chỉ ra sau này!).


@StephenKitt Bạn viết: "Để xem các cờ được sử dụng một cách hiệu quả, bạn cần phải biên dịch gói ít nhất : debian/rules build." Tôi có thể bằng cách nào đó đảm bảo rằng kết quả này trong cùng một cờ được sử dụng như trong bản dựng chính thức không? Sử dụng một vanilla debian của cùng một phiên bản?
langlauf.io

@StephenKitt: Tôi thích đề xuất của bạn để xem nhật ký của máy chủ xây dựng chính thức. Tuy nhiên, không phải lúc nào chúng cũng ở đó, ví dụ như openssl, xem buildd.debian.org/status/package.php?p=openssl&suite=sid , chỉ có một bản ghi 'cũ' từ năm 2011 cho bản dựng amd64. Đây có phải là một lỗi?
langlauf.io

@stackoverflowwww, liên quan đến tính khả dụng của nhật ký, nếu người bảo trì tải trực tiếp các tệp nhị phân thì sẽ không có bất kỳ nhật ký nào trên máy chủ; nhưng các cờ phải giống nhau trên một số kiến ​​trúc, chắc chắn amd64i386trong phần lớn các trường hợp, vì vậy nếu thiếu một trong hai bạn có thể nhìn vào cái khác.
Stephen Kitt

1
(Đối với những người thực sự tò mò, hãy Dpkg/Vendor/Debian.pmđưa ra các biến thể liên quan đến kiến ​​trúc trong các cờ xây dựng.)
Stephen Kitt

2
@stackoverflowwww, đảm bảo bạn sử dụng các cờ xây dựng giống như xây dựng chính thức là khá khó khăn, vì gói chính thức sẽ sử dụng bất kỳ cờ nào được cung cấp tại thời điểm nó được xây dựng, unstabletrong hầu hết các trường hợp, có thể nhiều năm trước. Nếu bạn xây dựng bằng vani unstablebây giờ, bạn có thể chắc chắn rằng bạn sẽ nhận được các cờ giống như được sử dụng cho một bản dựng chính thức mới; tương tự như vậy trong testinghoặc stablecho một bản dựng chính thức trong bộ backports có liên quan. Bạn có thể làm điều này pbuilderngay cả trong các bản phân phối phái sinh
Stephen Kitt
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.