Thứ tư, 14/01/2015 | 00:00 GMT+7

Cách thiết lập hệ thống xây dựng Poudriere để tạo gói cho server FreeBSD của bạn

Hệ thống cổng là một trong những tài sản lớn nhất của FreeBSD cho những user muốn sự linh hoạt và kiểm soát phần mềm của họ. Nó cho phép administrator dễ dàng tạo và duy trì cài đặt dựa trên nguồn bằng cách sử dụng một hệ thống được thiết kế mạnh mẽ và có thể dự đoán được.

Mặc dù những ưu điểm của tính năng này là rất lớn, nhưng một số phàn nàn phổ biến nhất đối với việc quản lý dựa trên cổng là về thời gian và nguồn lực cần thiết để biên dịch từng phần mềm. Điều này càng trở nên khó khăn hơn nếu bạn đang quản lý một số lượng lớn các server , mỗi server đều biên dịch các cổng riêng của bạn . Mặc dù các gói FreeBSD cung cấp một giải pháp thay thế giúp tăng tốc cài đặt, nhưng nó hy sinh quyền kiểm soát mà các cổng cấp.

Để giảm bớt vấn đề này, administrator có thể sử dụng một ứng dụng gọi là poudriere để xây dựng và duy trì các gói tùy chỉnh. Trong khi về mặt kỹ thuật được tạo ra để xây dựng các gói cho nhiều loại kiến trúc khác nhau, poudriere thường được sử dụng làm môi trường xây dựng gói để tạo và lưu trữ các gói cho toàn bộ cơ sở hạ tầng của server FreeBSD.

Bằng cách tận dụng poudriere , administrator có thể tùy chỉnh phần mềm khi cần thiết bằng cách sử dụng hệ thống cổng và biên dịch các gói để dễ dàng cài đặt và quản lý phần mềm. Bất kỳ số lượng server FreeBSD nào cũng có thể sử dụng server có cài đặt poudriere làm nguồn gói của chúng, cho phép chúng download và cài đặt các file thực thi tùy chỉnh, được biên dịch trước một cách nhanh chóng và dễ dàng.

Trong hướng dẫn này, ta sẽ trình bày cách cài đặt server với poudriere làm máy xây dựng. Sau đó, ta có thể sử dụng server này làm repository các gói cho bất kỳ server bổ sung nào. Mặc dù cài đặt này có thể có lợi cho một server duy nhất, nhưng hiệu quả thực sự sẽ đạt được khi các server bổ sung bắt đầu sử dụng cùng một server poudriere làm nguồn gói.

Vì xây dựng cổng là một quá trình sử dụng nhiều tài nguyên, nên việc cài đặt việc này trên một hệ thống mạnh hơn bình thường có thể là điều đáng giá.

Cài đặt phần mềm quản lý cổng cần thiết

Để bắt đầu, ta sẽ cài đặt tất cả các cổng mà ta cần.

Như mọi khi, trước khi bắt đầu bất kỳ tác vụ nào liên quan đến cổng, ta sẽ cập nhật cây cổng của bạn đảm bảo rằng các tham chiếu trên hệ thống file là mới:

sudo portsnap fetch update 

Sau khi cây cổng được cập nhật, ta có thể bắt đầu cài đặt phần mềm. Đầu tiên, ta cần cài đặt chính poudriere . Điều này được tìm thấy trong danh mục ports-mgmt của cây cổng . Để xây dựng và cài đặt, hãy chuyển đến folder đó và sử dụng make để biên dịch và cài đặt:

cd /usr/ports/ports-mgmt/poudriere sudo make install clean 

Hãy chọn bất kỳ tùy chọn nào được trình bày. Đối với một bản dựng tiêu chuẩn, không có gì là cần thiết.

Tiếp theo, nếu bạn chưa cài đặt nó, ta cần cài đặt cổng portmaster . Ta sẽ sử dụng điều này để dễ dàng tạo danh sách phần mềm trên máy của ta mà ta muốn poudriere xây dựng. Điều này cũng nằm trong danh mục ports-mgmt :

cd /usr/ports/ports-mgmt/portmaster sudo make install clean 

Cuối cùng, ta cũng cần cài đặt một web server . Điều này sẽ phục vụ hai mục đích. Đầu tiên, đây sẽ là phương thức mà máy của ta có thể download các gói mà ta sẽ biên dịch. Thứ hai, poudriere cung cấp giao diện web để ta có thể theo dõi quá trình xây dựng và theo dõi log .

Đối với hướng dẫn này, ta sẽ sử dụng nginx làm web server của bạn . Điều này được tìm thấy trong danh mục www của cây cổng:

cd /usr/ports/www/nginx sudo make install clean 

Bạn có thể chấp nhận các giá trị mặc định hoặc tùy chỉnh nếu bạn có nhu cầu cụ thể cho mục đích khác.

Khi bạn hoàn tất quá trình biên dịch và cài đặt phần mềm, hãy đảm bảo đánh giá lại PATH của bạn nếu bạn đang sử dụng shell tcsh hoặc csh mặc định:

rehash 

Bây giờ phần mềm của ta đã được cài đặt, ta có thể bắt đầu cấu hình từng thành phần của bạn .

Tạo certificate SSL và khóa

Khi ta xây dựng các gói với poudriere , ta muốn có thể ký chúng bằng private key . Điều này sẽ đảm bảo tất cả các máy của ta rằng các gói được tạo là hợp lệ và không ai chặn kết nối với máy xây dựng để phục vụ các gói độc hại.

Để bắt đầu, ta sẽ tạo cấu trúc folder cho khóa và certificate của ta . Vì tất cả cấu hình phần mềm tùy chọn của ta diễn ra trong folder /usr/local/etc và vì phần mềm khác sử dụng vị trí /usr/local/etc/ssl , đây là nơi ta sẽ đặt các file của bạn .

Ta sẽ đảm bảo ta có một ssl folder có chứa hai folder con gọi là keyscerts . Ta có thể thực hiện việc này trong một lệnh bằng lệnh :

sudo mkdir -p /usr/local/etc/ssl/{keys,certs} 

Khóa riêng tư của ta , phải được giữ bí mật, sẽ được đặt trong folder keys . Điều này sẽ được sử dụng để ký các gói mà ta sẽ tạo. Giữ an toàn này là điều cần thiết đảm bảo rằng các gói hàng của ta không bị giả mạo. Ta có thể khóa folder để user không có quyền root hoặc sudo sẽ không thể tương tác với folder hoặc nội dung của nó:

sudo chmod 0600 /usr/local/etc/ssl/keys 

Thư mục certs sẽ chứa certificate có sẵn công khai của ta được tạo bằng khóa. Như vậy, ta có thể để quyền mặc định trên folder đó.

Tiếp theo, ta sẽ tạo một khóa 4096 bit được gọi là poudriere.key và đặt nó vào folder keys của ta bằng lệnh :

sudo openssl genrsa -out /usr/local/etc/ssl/keys/poudriere.key 4096 

Sau khi khóa được tạo, ta có thể tạo public certificate từ khóa bằng lệnh :

sudo openssl rsa -in /usr/local/etc/ssl/keys/poudriere.key -pubout -out /usr/local/etc/ssl/certs/poudriere.cert 

Bây giờ ta có các thành phần SSL ta cần để ký các gói và xác minh chữ ký. Sau đó, ta sẽ cấu hình khách hàng của bạn để sử dụng certificate đã tạo để xác minh gói.

Cấu hình Poudriere

Bây giờ ta đã có certificate SSL và khóa của bạn , ta có thể bắt đầu tự cấu hình poudriere .

Tệp cấu hình chính được đặt tại /usr/local/etc/poudriere.conf . Mở file này với các quyền sudo trong editor của bạn:

sudo vi /usr/local/etc/poudriere.conf 

poudriere cấu hình poudriere được comment rất tốt và có hầu hết các cài đặt ta cần xác định trước. Ta sẽ thực hiện một vài thay đổi cụ thể, nhưng giữ nguyên phần lớn.

Nếu server FreeBSD của bạn đang chạy trên DigitalOcean, hệ thống file sẽ là UFS. Có các tùy chọn dành riêng cho ZFS trong poudriere mà ta không nên đặt. Để cho biết ta đang sử dụng UFS, ta phải đặt cờ NO_ZFS thành “yes” . Tìm và bỏ ghi chú tùy chọn này trong file :

NO_ZFS=yes 

Mặt khác, nếu server của bạn sử dụng ZFS, bạn có thể cấu hình poudriere để sử dụng một group cụ thể bằng cách đặt tùy chọn ZPOOL . Trong group này, bạn có thể chỉ định root mà poudriere sẽ sử dụng cho các gói, log , v.v. với tùy chọn ZROOTFS . Lưu ý không nên đặt hai tùy chọn này nếu bạn có tùy chọn NO_ZFS được đặt thành “yes:

# NO_ZFS=yes ZPOOL=tank ZROOTFS=/poudriere 

Khi xây dựng phần mềm, poudriere sử dụng một loại máy giam để tách hệ thống xây dựng khỏi hệ điều hành chính. Tiếp theo, ta phải điền vào một server lưu trữ hợp lệ nơi máy xây dựng có thể download phần mềm nó cần cho nhà tù. Điều này được cấu hình thông qua tùy chọn FREEBSD_HOST .

Tùy chọn này đã có sẵn, mặc dù nó hiện không được đặt thành server lưu trữ hợp lệ. Bạn có thể thay đổi vị trí này thành vị trí ftp://ftp.freebsd.org mặc định hoặc sử dụng một gương soi gần hơn nếu bạn biết:

FREEBSD_HOST=ftp://ftp.freebsd.org 

Tiếp theo, ta muốn đảm bảo folder dữ liệu của ta trong root poudriere được đặt chính xác. Điều này được kiểm soát bằng tùy chọn POUDRIERE_DATA và nên được đặt mặc định, nhưng ta sẽ bỏ ghi chú tùy chọn này chỉ đảm bảo :

POUDRIERE_DATA=${BASEFS}/data 

Các tùy chọn tiếp theo ta bỏ ghi chú nên là CHECK_CHANGED_OPTIONSCHECK_CHANGED_DEPS tùy chọn. Tùy chọn đầu tiên yêu cầu poudriere xây dựng lại các gói khi các tùy chọn cho nó đã thay đổi. Tùy chọn thứ hai yêu cầu poudriere xây dựng lại các gói khi các phần phụ thuộc đã thay đổi kể từ lần biên dịch cuối cùng.

Cả hai tùy chọn này đều tồn tại ở dạng mà ta muốn chúng có trong file cấu hình. Ta chỉ cần bỏ ghi chú chúng:

CHECK_CHANGED_OPTIONS=verbose CHECK_CHANGED_DEPS=yes 

Tiếp theo, ta sẽ trỏ poudriere đến khóa SSL mà ta đã tạo để nó có thể ký các gói khi nó xây dựng. Tùy chọn được sử dụng để chỉ định điều này được gọi là PKG_REPO_SIGNING_KEY . Bỏ ghi chú tùy chọn này và thay đổi đường dẫn để phản ánh vị trí của khóa SSL bạn đã tạo trước đó:

PKG_REPO_SIGNING_KEY=/usr/local/etc/ssl/keys/poudriere.key 

Cuối cùng, ta có thể đặt chuỗi URL_BASE thành domain hoặc địa chỉ IP nơi server của bạn có thể được truy cập. Điều này sẽ được poudriere sử dụng để xây dựng các liên kết trong kết quả của nó có thể được nhấp vào. Bạn nên bao gồm giao thức và kết thúc giá trị bằng dấu gạch chéo:

URL_BASE=http://server_domain_or_IP/ 

Khi bạn thực hiện xong các thay đổi, hãy lưu file .

Tạo môi trường xây dựng

Tiếp theo, ta cần thực sự xây dựng môi trường xây dựng của bạn . Như đã đề cập trước đó, poudriere sẽ xây dựng các cổng trong một môi trường biệt lập bằng cách sử dụng nhà tù.

Ta sẽ phải tạo nhà tù của bạn và cài đặt poudriere FreeBSD bên trong. Có thể có nhiều nhà tù, mỗi nhà tù có một version FreeBSD khác nhau. Các version FreeBSD bị bỏ tù phải giống hoặc cũ hơn version mà chính server đang chạy. Đối với hướng dẫn này, ta sẽ tập trung vào một tù duy nhất phản ánh kiến trúc và version FreeBSD của hệ thống server .

Ta nên chọn một tên mô tả cho nhà tù mà ta đang tạo. Điều này rất quan trọng vì nó sẽ được sử dụng trong cấu hình repository của ta trên các client , điều này có thể rất quan trọng khi xây dựng cho các version FreeBSD khác nhau. Các trang man cũng hướng dẫn bạn tránh sử dụng dấu chấm trong tên do một số tương tác với các công cụ khác. Ví dụ: trong hướng dẫn này, ta đang hoạt động trên FreeBSD 10.1 trên kiến trúc 64-bit, vì vậy ta sẽ gọi đây là “freebsd_10-1x64”.

Ta chỉ định tên cho jail của ta với -j và ta chỉ ra version FreeBSD để cài đặt bằng cách sử dụng tùy chọn -v . Bạn có thể tìm ra định dạng cho các version hỗ trợ trong “thông cáo” cột của bảng trên này trang. Nếu bạn đang theo dõi -CURRENT hoặc -STABLE thay vì việc phát hành, bạn có thể sử dụng định dạng được tìm thấy trên này trang (ví dụ như 11-CURRENT ).

Đối với mục đích của ta , lệnh xây dựng nhà tù của ta sẽ giống như sau:

sudo poudriere jail -c -j freebsd_10-1x64 -v 10.1-RELEASE 

Quá trình này sẽ mất một lúc để hoàn thành, vì vậy hãy kiên nhẫn. Khi hoàn tất, bạn có thể thấy bản jail đã cài đặt bằng lệnh :

poudriere jail -l 
JAILNAME        VERSION         ARCH  METHOD TIMESTAMP           PATH freebsd_10-1x64 10.1-RELEASE-p3 amd64 ftp    2015-01-06 20:43:48 /usr/local/poudriere/jails/freebsd_10-1x64 

Khi bạn đã tạo jail, ta sẽ phải cài đặt cây cổng. Có thể duy trì nhiều cây cổng để phục vụ các nhu cầu phát triển khác nhau. Ta sẽ cài đặt một cây cổng duy nhất mà nhà tù của ta có thể sử dụng.

Ta có thể sử dụng cờ -p để đặt tên cho cây cổng của ta . Ta sẽ gọi cây của bạn là “HEAD” vì nó tóm tắt chính xác công dụng của cây này (“đầu” hoặc điểm cập nhật nhất của cây). Ta sẽ cập nhật nó thường xuyên để phù hợp với version mới nhất của cây cổng hiện có:

sudo poudriere ports -c -p HEAD 

, thủ tục này sẽ mất một lúc vì toàn bộ cây cổng phải được tìm nạp và extract . Khi hoàn tất, ta có thể xem cây cổng của bạn bằng lệnh :

poudriere ports -l 

Sau khi bước này hoàn tất, bây giờ ta đã có sẵn các cấu trúc để biên dịch các cổng và xây dựng các gói. Tiếp theo, ta có thể bắt đầu tập hợp danh sách các cổng của bạn để xây dựng và cấu hình các tùy chọn ta muốn cho từng phần mềm.

Tạo danh sách xây dựng cổng và cài đặt tùy chọn cổng

Khi biên dịch với poudriere , ta chỉ ra các cổng mà ta muốn xây dựng khi gọi lệnh xây dựng. Có thể chỉ định các cổng riêng lẻ, nhưng đây không phải là giải pháp tốt để quản lý lâu dài. Thay vào đó, ta sẽ tạo một danh sách các cổng mà ta có thể chuyển trực tiếp đến lệnh.

Tệp được tạo phải liệt kê danh mục cổng theo sau là dấu gạch chéo và tên cổng để phản ánh vị trí của nó trong cây cổng, như sau:

port_category/first_port port_category/second_port port_category/third_port  . . . 

Mọi phụ thuộc cần thiết cũng sẽ được tạo tự động, vì vậy đừng lo lắng về việc theo dõi toàn bộ cây phụ thuộc của các cổng mà bạn muốn cài đặt. Bạn có thể tạo file này theo cách thủ công, nhưng nếu hệ thống cơ sở của bạn đã có hầu hết các phần mềm muốn tạo, bạn có thể sử dụng portmaster để tạo danh sách này cho bạn.

Trước khi thực hiện việc này, bạn nên xóa mọi phụ thuộc không cần thiết khỏi hệ thống của bạn để giữ danh sách cổng sạch nhất có thể. Bạn có thể thực hiện việc này bằng lệnh :

sudo pkg autoremove 

Sau đó, ta có thể nhận được danh sách các phần mềm mà ta đã cài đặt rõ ràng trên hệ thống xây dựng của bạn bằng cách sử dụng portmaster . Lệnh portmaster có thể xuất ra danh sách các cổng được cài đặt rõ ràng (không phải các cổng phụ thuộc) ở định dạng chính xác bằng cách sử dụng tùy chọn --list-origins .

Ta có thể sort kết quả này thành sort theo thứ tự bảng chữ cái trong danh sách để giúp tìm các mục dễ dàng hơn. Ta có thể xuất kết quả ra một file trong folder /usr/local/etc/poudriere.d . Ta sẽ gọi file này port-list :

portmaster --list-origins | sort -d | sudo tee /usr/local/etc/poudriere.d/port-list  

Xem lại danh sách. Nếu có bất kỳ cổng nào mà bạn không muốn đưa vào, hãy xóa dòng liên kết của chúng. Đây cũng là cơ hội để thêm các cổng bổ sung mà bạn có thể cần.

Nếu bạn sử dụng các tùy chọn make.conf cụ thể để xây dựng các cổng của bạn , bạn có thể tạo file make.conf cho từng tù trong folder /usr/local/etc/poudriere.d của bạn . Ví dụ: đối với nhà tù của ta , ta có thể tạo file make.conf với tên sau:

sudo vi /usr/local/etc/poudriere.d/freebsd_10-1x64-make.conf 

Bên trong, bạn có thể đặt bất kỳ tùy chọn nào bạn muốn sử dụng khi xây dựng các cổng của bạn . Ví dụ: nếu bạn không muốn xây dựng bất kỳ tài liệu, ví dụ, hỗ trợ ngôn ngữ mẹ đẻ hoặc hỗ trợ X11 nào, bạn có thể đặt:

OPTIONS_UNSET+= DOCS NLS X11 EXAMPLES 

Sau đó, ta có thể cấu hình từng cổng của bạn , điều này sẽ tạo ra các file với các tùy chọn mà ta đã chọn.

Nếu bạn đã tùy chỉnh các cổng trên hệ thống server của bạn , bạn có thể sao chép các cấu hình qua poudriere để sử dụng các cài đặt đó. Để thực hiện việc này, hãy tạo một folder mới trong folder /usr/local/etc/poudriere.d được đặt tên theo tên nhà tù của bạn với -options nối vào cuối. Đối với hướng dẫn của ta , ta có thể thực hiện điều này bằng lệnh :

sudo mkdir /usr/local/etc/poudriere.d/freebsd_10-1x64-options 

Bây giờ, bạn có thể sao chép các tùy chọn bạn đã và đang sử dụng trên hệ thống server của bạn bằng lệnh :

sudo cp -r /var/db/ports/* /usr/local/etc/poudriere.d/freebsd_10-1x64-options 

Nếu bạn hoàn thành bước trên, bạn sẽ có cơ sở cho các tùy chọn mà ta sẽ cấu hình , nhưng nhiều phần phụ thuộc của bạn sẽ vẫn cần được cấu hình .

Bạn có thể cấu hình bất kỳ thứ gì chưa được cấu hình bằng lệnh options . Ta nên chuyển vào cả cây cổng mà ta đã tạo (sử dụng tùy chọn -p ) và tù ta đang đặt các tùy chọn này (sử dụng tùy chọn -j ). Ta cũng phải chỉ định danh sách các cổng mà ta muốn cấu hình bằng tùy chọn -f .

Lệnh của ta sẽ giống như sau:

sudo poudriere options -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list 

Bạn sẽ thấy một hộp thoại cho mỗi cổng trong danh sách và bất kỳ phần phụ thuộc nào không có các tùy chọn tương ứng được đặt trong folder -options . Các thông số kỹ thuật trong file make.conf của bạn sẽ được chọn trước trong màn hình lựa chọn. Chọn tất cả các tùy chọn bạn muốn sử dụng.

Nếu bạn muốn cấu hình lại các tùy chọn cho các cổng của bạn trong tương lai, bạn có thể chạy lại lệnh ở trên với tùy chọn -c . Điều này sẽ hiển thị cho bạn tất cả các tùy chọn cấu hình có sẵn, dù bạn đã lựa chọn trước đây hay chưa:

sudo poudriere options -c -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list 

Xây dựng các cổng

Bây giờ, ta cuối cùng đã sẵn sàng để bắt đầu xây dựng các cổng .

Điều cuối cùng ta cần làm là đảm bảo cả cây tù và cổng của ta đều được cập nhật. Đây có lẽ sẽ không phải là vấn đề trong lần đầu tiên bạn xây dựng các cổng vì ta vừa tạo cả cây cổng và nhà tù, nhưng bạn nên có thói quen làm điều này mỗi khi bạn chạy một bản dựng.

Để cập nhật tù của bạn, hãy nhập:

sudo poudriere jail -u -j freebsd_10-1x64 

Để cập nhật cây cổng của bạn, hãy nhập:

sudo poudriere ports -u -p HEAD 

Sau khi hoàn tất, ta có thể bắt đầu quá trình xây dựng hàng loạt.

Lưu ý : Đây có thể là một quá trình chạy rất lâu. Nếu bạn được kết nối với server của bạn qua SSH, ta khuyên bạn nên cài đặt screen và bắt đầu một phiên:

cd /usr/ports/sysutils/screen sudo make install clean  rehash screen 

Để bắt đầu xây dựng, ta chỉ cần sử dụng lệnh bulk và trỏ đến tất cả các phần riêng lẻ mà ta đã cấu hình . Nếu bạn đang sử dụng các giá trị từ hướng dẫn này, lệnh sẽ giống như sau:

sudo poudriere bulk -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list 

Thao tác này sẽ khởi động một số công nhân (tùy thuộc vào file poudriere.conf của bạn hoặc số lượng CPU có sẵn) và bắt đầu xây dựng các cổng.

Bất kỳ lúc nào trong quá trình xây dựng, bạn có thể nhận thông tin về tiến trình bằng cách giữ CTRL và nhấn t :

CTRL-t 

Một số phần của quy trình sẽ tạo ra nhiều sản lượng hơn những phần khác.

Nếu bạn cần phải bước đi, bạn có thể tách các phiên màn hình bằng cách nhấn CTRL với a để di chuyển điều khiển screen , tiếp theo là d key để tách phiên họp:

CTRL-a d 

Khi bạn muốn quay lại phiên, có thể chạy lệnh:

screen -x 

Cài đặt Nginx để phân phát giao diện user và repository

Trong khi các gói của bạn đang xây dựng, ta có thể tận dụng cơ hội để cấu hình Nginx. Mở một terminal khác, tách phiên screen của bạn như được hiển thị ở trên hoặc bắt đầu một cửa sổ screen mới bằng lệnh CTRL-a c (bạn có thể chuyển đổi giữa các cửa sổ bằng lệnh CTRL-a nCTRL-a p ).

Web server sẽ được sử dụng cho hai mục đích riêng biệt:

  • Nó sẽ phục vụ repository thực tế mà các server khác có thể sử dụng để download các gói đã biên dịch tùy chỉnh của bạn
  • Nó sẽ phục vụ giao diện người poudriere web poudriere được dùng để giám sát quá trình xây dựng

Ta đã cài đặt Nginx ở phần đầu của hướng dẫn này, nhưng chưa cấu hình nó.

Để bắt đầu, hãy kích hoạt dịch vụ bằng cách thêm dòng nginx_enable="YES" vào file /etc/rc.conf . Thao tác này sẽ khởi động server khi khởi động và sẽ cho phép ta sử dụng các lệnh service thông thường để quản lý quy trình:

sudo sh -c "echo 'nginx_enable="YES"' >> /etc/rc.conf" 

Bây giờ, ta có thể điều chỉnh file cấu hình mặc định. Mở nó với các quyền sudo trong editor của bạn:

sudo vi /usr/local/etc/nginx/nginx.conf 

Trong file này, ta sẽ xóa mọi thứ khỏi khối server {} và thay thế nó bằng cấu hình của riêng ta . Đảm bảo rằng bạn để nguyên các dấu ngoặc nhọn (“{” và “}”) đảm bảo rằng file của bạn hợp lệ.

Trong ngữ cảnh server , ta có thể cài đặt một số chỉ thị cơ bản để cho phép web server của ta phản hồi với truy cập HTTP thông thường trên cổng 80 và phản hồi với domain hoặc địa chỉ IP của server . Ta cũng sẽ đặt root tài liệu của server vào folder web poudriere có tại /usr/local/share/poudriere/html . Thay đổi giá trị của lệnh server_name bên dưới để trùng với domain hoặc địa chỉ IP của server của bạn:

# http context  . . .      server {         listen 80 default;         server_name server_domain_or_IP;         root /usr/local/share/poudriere/html;     }  } 

Tiếp theo, ta sẽ thêm hai khối location .

Mặc dù chỉ thị root cơ bản mà ta đã xác định ở trên sẽ xử lý phần lớn giao diện web, nhưng ta cần cho Nginx biết folder nào ta lưu trữ log và dữ liệu thực tế. Poudriere sẽ sử dụng điểm cuối /data cho việc này. Các bản ghi của ta đều được ghi vào một folder cụ thể, vì vậy ta có thể bật chỉ thị autoindex cho vị trí này để ta có thể xem danh sách các bản ghi.

Cuối cùng, khối location đầu tiên của ta sẽ trông như thế này:

# http context  . . .      server {         listen 80 default;         server_name server_domain_or_IP;         root /usr/local/share/poudriere/html;          location /data {             alias /usr/local/poudriere/data/logs/bulk;             autoindex on;         }     } } 

Điều này sẽ làm cho giao diện web của ta hoạt động chính xác (sau khi sửa đổi bổ sung đối với file mime.types mà ta sẽ thực hiện trong giây lát). Tiếp theo, ta cần thêm khối vị trí thứ hai sẽ được sử dụng để phục vụ các gói thực tế mà ta đã và đang xây dựng.

Các gói sẽ được lưu trữ lại trong folder dưới /usr/local/poudriere , lần này là trong data/packages . Ta có thể cung cấp điều này tại địa chỉ /packages . , ta có thể bật autoindex để xem nội dung của folder , cho phép ta xem các file trong trình duyệt web.

Khi sửa đổi cuối cùng này hoàn tất, khối server sẽ trông giống như sau:

#http context  . . .      server {         listen 80 default;         server_name server_domain_or_IP;         root /usr/local/share/poudriere/html;          location /data {             alias /usr/local/poudriere/data/logs/bulk;             autoindex on;         }          location /packages {             root /usr/local/poudriere/data;             autoindex on;         }     } } 

Lưu file khi bạn hoàn tất.

Tiếp theo, ta sẽ thực hiện một sửa đổi nhỏ đối với file mime.types của ta . Với cài đặt hiện tại, nếu bạn nhấp vào log trong trình duyệt web, nó sẽ download file thay vì hiển thị dưới dạng văn bản thuần túy. Ta có thể thay đổi hành vi này bằng cách đánh dấu các file kết thúc bằng .log là file văn bản thuần túy.

Mở file Nginx mime.types với quyền sudo trong editor của bạn:

sudo vi /usr/local/etc/nginx/mime.types 

Tìm mục nhập chỉ định loại nội dung text/plain nội dung text/plain và thêm log vào cuối danh sách các loại file hiện tại, được phân tách bằng dấu cách:

. . .  text/mathml                         mml; text/plain                          txt log; text/vnd.sun.j2me.app-descriptor    jad;  . . . 

Lưu file khi bạn hoàn tất.

Bây giờ, hãy kiểm tra cú pháp của các file cấu hình của bạn bằng lệnh :

sudo service nginx configtest 

Nếu bạn có lỗi nào, hãy sửa chúng trước khi tiếp tục. Nếu kiểm tra cấu hình của bạn báo cáo không có lỗi cú pháp, hãy khởi động Nginx bằng lệnh :

sudo service nginx start 

Nếu bạn đã bật firewall , hãy nhớ cấu hình các luật của bạn để cho phép lưu lượng truy cập đến cổng 80 và khởi động lại dịch vụ.

Bây giờ, bạn có thể xem giao diện web poudriere bằng cách truy cập domain hoặc địa chỉ IP của server trong trình duyệt web :

http://server_domain_or_IP 

Bạn sẽ thấy trang poudriere chính:

Trang chính của Poudriere

Nếu bạn nhấp qua, bạn có thể xem quá trình hoặc kết quả xây dựng cổng của bạn . Bạn cũng có thể nhấp qua log của bất kỳ bản dựng nào đã hoàn thành.

Nếu bạn muốn xem các gói đã biên dịch của bạn trong trình duyệt, các gói đó sẽ có sẵn thông qua hệ thống phân cấp bắt đầu tại /packages :

Gói Poudriere repo

Bạn có thể phải đợi cho đến khi toàn bộ bản dựng hoàn tất để xem các gói. Nhấp qua các liên kết sẽ hiển thị cho bạn các gói đã biên dịch mà bạn đã tạo bằng lệnh xây dựng hàng loạt poudriere của bạn .

Cấu hình khách hàng gói

Đến đây bạn đã xây dựng các gói và một repository được cấu hình để phục vụ các gói của bạn , bạn có thể cấu hình client của bạn để sử dụng server của bạn làm nguồn các gói của họ.

Cấu hình server xây dựng để sử dụng gói repo riêng của nó

Ta có thể bắt đầu bằng cách cấu hình server xây dựng để sử dụng các gói mà nó đã xây dựng.

Đầu tiên, ta cần tạo một folder để chứa các file cấu hình repository của bạn :

sudo mkdir -p /usr/local/etc/pkg/repos 

Bên trong folder này, ta có thể tạo file cấu hình repository của bạn . Nó phải kết thúc bằng .conf , vì vậy ta sẽ gọi nó là poudriere.conf để phản ánh mục đích của nó:

sudo vi /usr/local/etc/pkg/repos/poudriere.conf 

Ta sẽ xác định tên repository là poudriere . Bên trong định nghĩa, ta sẽ trỏ đến vị trí trên đĩa nơi các gói của ta được lưu trữ. Đây phải là một folder kết hợp tên tù và tên cây cổng của bạn bằng một dấu gạch ngang. Kiểm tra hệ thống file của bạn để chắc chắn. Ta cũng sẽ cài đặt xác thực chữ ký cho các gói của bạn bằng cách trỏ đến certificate mà ta đã tạo.

Cuối cùng, file của bạn sẽ trông giống như sau:

poudriere: {     url: "file:///usr/local/poudriere/data/packages/freebsd_10-1x64-HEAD",     mirror_type: "srv",     signature_type: "pubkey",     pubkey: "/usr/local/etc/ssl/certs/poudriere.cert",     enabled: yes } 

Lúc này, bạn cần đưa ra quyết định. Nếu bạn muốn thích các gói đã biên dịch của bạn hơn và yêu thích các gói được cung cấp bởi các repository FreeBSD chính, bạn có thể đặt mức độ ưu tiên tại đây, yêu cầu nó thích các gói từ kho này hơn. Điều này sẽ khiến repository local của ta được ưu tiên hơn các repository chính thức.

Lưu ý trộn các gói theo cách này có thể gây ra một số hậu quả phức tạp. Nếu các repository chính thức có version gói cao hơn version repository local của bạn, gói đã biên dịch của bạn có thể được thay thế bằng gói chung từ các kho chính thức (cho đến khi bạn xây dựng lại bằng poudriere và cài đặt lại bằng pkg ). Ngoài ra, các gói chính thức có thể giả định các gói phụ thuộc được xây dựng theo một cách nhất định và có thể không hoạt động khi kết hợp với các gói tùy chỉnh của bạn.

Nếu bạn chọn kết hợp hai nguồn gói này, hãy chuẩn bị để kiểm tra cẩn thận từng cài đặt đảm bảo rằng bạn không vô tình gây ra hành vi không mong muốn.

Để kết hợp các gói, hãy thêm cài đặt priority vào định nghĩa repository của bạn, chỉ định rằng repository local có mức độ ưu tiên cao hơn:

poudriere: {     url: "file:///usr/local/poudriere/data/packages/freebsd_10-1x64-HEAD",     mirror_type: "srv",     signature_type: "pubkey",     pubkey: "/usr/local/etc/ssl/certs/poudriere.cert",     enabled: yes,     priority: 100 } 

Lưu file khi bạn hoàn tất.

Nếu bạn chỉ chọn cài đặt các gói mà bạn đã tự xây dựng tùy chỉnh (con đường an toàn hơn), bạn có thể bỏ cài đặt ưu tiên, nhưng bạn cần vô hiệu hóa các repository mặc định . Bạn có thể thực hiện việc này bằng cách tạo một file repository khác overrides file repository mặc định và vô hiệu hóa nó:

sudo vi /usr/local/etc/pkg/repos/freebsd.conf 

Bên trong, sử dụng tên FreeBSD để phù hợp với định nghĩa repository mặc định . Vô hiệu hóa repository bằng cách xác định nó như sau:

FreeBSD: {     enabled: no } 

Lưu file khi bạn hoàn tất.

Dù lựa chọn cấu hình của bạn là gì, bây giờ bạn đã sẵn sàng để sử dụng repository của bạn . Cập nhật danh sách gói của bạn bằng lệnh :

sudo pkg update 

Bây giờ, server của bạn có thể sử dụng lệnh pkg để cài đặt các gói từ repository local của bạn.

Cấu hình client từ xa để sử dụng repository trên máy xây dựng của bạn

Một trong những lý do thuyết phục nhất để cài đặt poudriere trên máy xây dựng là sử dụng server đó làm repository cho nhiều máy khác. Tất cả những gì ta cần làm để thực hiện công việc này là download certificate SSL công khai từ máy xây dựng của ta và cài đặt định nghĩa repository tương tự.

Để kết nối với server lưu trữ xây dựng của ta từ các client của ta , bạn nên bắt đầu một đại lý SSH trên máy tính local của bạn để lưu trữ thông tin đăng nhập SSH key của bạn.

OpenSSL đi kèm với một tác nhân SSH có thể được khởi động bằng lệnh vào máy tính tại nhà của bạn:

eval $(ssh-agent) 

Tiếp theo, bạn cần thêm SSH key của bạn vào nó bằng lệnh :

ssh-add 

Sau đó, bạn có thể chuyển tiếp thông tin đăng nhập SSH local của bạn tới các client khi bạn kết nối bằng cách sử dụng cờ -A . Điều này sẽ cho phép bạn truy cập bất kỳ máy nào từ client của bạn như thể bạn đang truy cập nó từ server của bạn :

ssh -A freebsd@client_domain_or_IP 

Khi bạn đang ở trên client từ xa của bạn , bước đầu tiên là tạo cấu trúc folder (nếu nó không tồn tại) để bạn lưu trữ certificate . Ta sẽ tiếp tục và tạo một folder cho các khóa để ta có thể sử dụng nó cho các việc trong tương lai:

sudo mkdir -p /usr/local/etc/ssl/{keys,certs} 

Bây giờ ta có thể kết nối với máy xây dựng của bạn bằng SSH và chuyển file certificate trở lại client của ta . Vì ta đã chuyển tiếp thông tin đăng nhập SSH của bạn , ta sẽ có thể thực hiện việc này mà không bị nhắc nhập password :

ssh freebsd@server_domain_or_IP 'cat /usr/local/etc/ssl/certs/poudriere.cert' | sudo tee /usr/local/etc/ssl/certs/poudriere.cert 

Lệnh này sẽ kết nối với máy xây dựng từ client của bạn bằng thông tin đăng nhập SSH local của bạn. Sau khi kết nối, nó sẽ hiển thị nội dung của file certificate của bạn và chuyển nó qua tunnel SSH trở lại client từ xa của bạn. Từ đó, ta sử dụng tổ hợp sudo tee để ghi certificate vào folder của ta .

Sau khi hoàn tất, ta có thể tạo cấu trúc folder repository của bạn giống như ta đã làm trên chính máy xây dựng:

sudo mkdir -p /usr/local/etc/pkg/repos 

Bây giờ, ta có thể tạo một file repository rất giống với file ta đã sử dụng trên máy xây dựng:

sudo vi /usr/local/etc/pkg/repos/poudriere.conf 

Sự khác biệt là vị trí URL và loại phản chiếu. , ta có thể chọn kết hợp các gói hoặc chỉ sử dụng các gói được biên dịch tùy chỉnh của ta . Các cảnh báo tương tự cũng được áp dụng liên quan đến việc trộn các nguồn gói.

Nếu bạn muốn kết hợp các gói tùy chỉnh của bạn với các gói của repository chính thức, file của bạn sẽ trông giống như sau:

poudriere: {     url: "http://server_domain_or_IP/packages/freebsd_10-1x64-HEAD/",     mirror_type: "http",     signature_type: "pubkey",     pubkey: "/usr/local/etc/ssl/certs/poudriere.cert",     enabled: yes,     priority: 100 } 

Nếu bạn chỉ muốn sử dụng các gói đã biên dịch của bạn , file của bạn sẽ trông giống như sau:

poudriere: {     url: "http://server_domain_or_IP/packages/freebsd_10-1x64-HEAD/",     mirror_type: "http",     signature_type: "pubkey",     pubkey: "/usr/local/etc/ssl/certs/poudriere.cert",     enabled: yes 

Ngoài ra, nếu bạn chỉ đang sử dụng các gói của riêng mình, hãy nhớ tạo một file cấu hình repository khác để overrides cấu hình repository FreeBSD mặc định:

sudo vi /usr/local/etc/pkg/repos/freebsd.conf 

Đặt nội dung sau vào file để vô hiệu hóa các repository chính thức:

FreeBSD: {     enabled: no } 

Sau khi hoàn tất, hãy cập nhật database pkg của bạn để bắt đầu sử dụng các gói đã biên dịch tùy chỉnh của bạn:

sudo pkg update 

Quy trình này có thể được lặp lại trên nhiều client FreeBSD như bạn muốn.

Xây dựng lại các gói của bạn khi có bản cập nhật

Đến đây bạn poudriere chạy toàn bộ cài đặt poudriere của bạn . Tuy nhiên, bạn cần phải xây dựng lại các gói của bạn theo thời gian khi có các bản cập nhật mới, đặc biệt nếu chúng liên quan đến bảo mật.

May mắn là thủ tục để xây dựng lại các gói khá đơn giản. Đầu tiên, bạn nên cập nhật bản jail FreeBSD của bạn để các gói của bạn được xây dựng dựa trên hệ điều hành cập nhật. Bạn có thể thực hiện bằng cách gõ:

sudo poudriere jail -u -j freebsd_10-1x64 

Tiếp theo, bạn nên cập nhật cây cổng của bạn để version mới nhất của mỗi cổng có sẵn cho tù của bạn. Bạn có thể thực hiện bằng cách gõ:

sudo poudriere ports -u -p HEAD 

Sau khi cập nhật cây tù và cổng, bạn có thể sửa đổi danh sách cổng của bạn nếu có bất kỳ thay đổi nào bạn muốn thực hiện:

sudo vi /usr/local/etc/poudriere.d/port-list 

Nếu bạn cần điều chỉnh bất kỳ tùy chọn make.conf nào, bạn có thể thực hiện bằng cách chỉnh sửa file được liên kết với bản dựng của bạn:

sudo vi /usr/local/etc/poudriere.d/freebsd_10-1x64-make.conf 

Bạn có thể kiểm tra bất kỳ tùy chọn mới nào cho các cổng của bạn bằng lệnh :

sudo poudriere options -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list 

Thay vào đó, nếu bạn muốn xem lại tất cả các tùy chọn cho các cổng của bạn , bạn có thể thêm cờ -c . Điều này có thể hữu ích khi khắc phục sự cố bản dựng hoặc thời gian chạy:

sudo poudriere options -c -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list 

Khi bạn đã hoàn thành các bước chuẩn bị trên, bạn có thể biên dịch lại bất kỳ cổng nào đã bị thay đổi hoặc đã được cập nhật bằng lệnh :

sudo poudriere bulk -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list 

Hãy theo dõi tiến trình trong giao diện web. Sau khi các gói mới được biên dịch, bạn có thể cập nhật các gói trên mỗi máy bằng lệnh :

sudo pkg upgrade 

Điều này sẽ cho phép bạn cập nhật các gói tùy chỉnh của bạn trên toàn bộ cơ sở hạ tầng FreeBSD khá dễ dàng.

Kết luận

Trong hướng dẫn này, ta đã trình bày cách cấu hình poudriere để biên dịch và đóng gói một bộ cổng tùy chỉnh cho cả máy xây dựng và client bên ngoài của ta . Thoạt nhìn, quá trình này có vẻ dài dòng, nhưng nó khá đơn giản để quản lý một khi bạn đã cài đặt và chạy nó.

Bằng cách tận dụng poudriere , bạn có thể tận dụng cả hai hệ thống quản lý phần mềm tùy chọn của FreeBSD. Đối với nhiều user , điều này tạo thành điều tốt nhất của cả hai thế giới. Hệ thống xây dựng poudriere cho phép bạn tùy chỉnh phần mềm khi bạn thấy phù hợp trên một máy duy nhất trong khi sử dụng hệ thống pkg nhanh để cài đặt và quản lý thực tế.


Tags:

Các tin liên quan