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

Cách cài đặt và quản lý các cổng trên FreeBSD 10.1

FreeBSD là một hệ điều hành mạnh mẽ có khả năng hoạt động với nhiều role khác nhau. Một phần của điều khiến hệ điều hành này trở thành lựa chọn lý tưởng trong nhiều trường hợp là danh tiếng về tính linh hoạt của nó. Một phần lớn cho danh tiếng này đến từ phương pháp được hỗ trợ của FreeBSD để cài đặt phần mềm từ nguồn, được gọi là hệ thống cổng .

Trong hướng dẫn này, ta sẽ thảo luận về một số lợi ích của hệ thống cổng và sẽ trình bày cách sử dụng nó để có được và quản lý phần mềm bổ sung. Ta sẽ trình bày cách cài đặt bằng lệnh make , cách tùy chỉnh các ứng dụng của bạn và cách tận dụng một số công cụ phổ biến để giúp bảo trì cổng dễ dàng hơn.

Yêu cầu

Để làm theo hướng dẫn này, bạn phải có quyền truy cập vào server FreeBSD 10.1 và account user không phải root với các quyền sudo . Hướng dẫn này có thể hỗ trợ bạn đăng nhập vào server FreeBSD và cài đặt môi trường làm việc hợp lý.

Quản lý các loại phần mềm FreeBSD khác nhau

Group FreeBSD duy trì hệ điều hành FreeBSD cơ bản như một khối thống nhất. Các thành phần của nó được cập nhật bằng một công cụ gọi là freebsd-update và hành vi của chúng được kiểm soát chủ yếu thông qua các file cấu hình nằm trong folder /etc Mặc dù bạn có thể cài đặt và sử dụng các phần mềm thay thế cho phần mềm đi kèm, nhưng bạn không thể dễ dàng hoặc an toàn loại bỏ những phần mềm có trong hệ thống cơ sở vì chúng được coi là những phần thiết yếu về mặt chức năng của hệ điều hành.

Ngược lại, phần mềm tùy chọn được quản lý bằng các quy trình, công cụ và vị trí khác nhau trong hệ thống file . Không giống như phần mềm từ hệ thống cơ sở, phần mềm tùy chọn được cấu hình trong folder /usr/local/etc FreeBSD cung cấp hai phương pháp bị xử phạt để download và cài đặt phần mềm bổ sung vào hệ thống.

Hệ thống cổng, mà ta sẽ mô tả trong hướng dẫn này, được quản lý thông qua phân cấp hệ thống file nằm tại /usr/ports phân loại từng phần mềm có sẵn mà FreeBSD biết cách xây dựng. Trong folder này, folder con cấp một phân loại phần mềm chủ yếu theo chức năng hoặc ngôn ngữ. Trong các folder này, các folder tồn tại cho từng phần mềm riêng lẻ. Phần mềm có thể được download , cấu hình, biên dịch và cài đặt thông qua các lệnh make đơn giản hoặc thông qua các tiện ích trợ giúp có sẵn. Phần mềm trong bộ sưu tập cổng bao gồm tất cả các bản vá lỗi cần thiết để xây dựng và chạy ứng dụng trên hệ thống FreeBSD.

Loại cài đặt khác được hệ thống hỗ trợ là các gói , là các file binary phần mềm được biên dịch từ bộ sưu tập các cổng sử dụng các giá trị mặc định hợp lý. Đây là một phương pháp tốt để nhanh chóng có được phần mềm, nhưng nó làm mất đi mức độ tùy biến được cung cấp bởi hệ thống cổng. Bạn có thể tìm hiểu thêm về cách quản lý gói phần mềm trong hướng dẫn này .

Chuẩn bị cây cổng

Cây cổng là tên của cấu trúc phân cấp tồn tại bên dưới folder /usr/ports . Hệ thống phân cấp này chứa các folder tương ứng với các loại cổng, trong đó là các folder khác tương ứng với các cổng riêng lẻ.

Trước khi bắt đầu thao tác với bất kỳ cổng nào, ta nên đảm bảo hệ thống phân cấp này được cập nhật. Việc quên làm mới hệ thống phân cấp cổng có thể dẫn đến lỗi xây dựng vì các cổng cố gắng tìm nạp và tạo file có thể không còn hợp lệ nữa.

Ta có thể cập nhật cây cổng bằng cách sử dụng trình có tên là portsnap . Công cụ này truy vấn server cổng FreeBSD để thay đổi.

Ghi chú về bản cập nhật cuối cùng của ta

Trước khi thực hiện lệnh cập nhật thực tế, ta cần lưu ý dấu thời gian trên một file cụ thể trong cây cổng của ta có tên /usr/ports/UPDATING . Ta có thể sử dụng công cụ stat để xem các dấu thời gian khác nhau được liên kết với file :

stat -x /usr/ports/UPDATING 

Bạn sẽ thấy kết quả giống như sau:

  File: "UPDATING"   Size: 375337       FileType: Regular File   Mode: (0644/-rw-r--r--)         Uid: (    0/    root)  Gid: (    0/   wheel) Device: 0,81   Inode: 2011338    Links: 1 Access: Thu Dec 11 22:24:59 2014 Modify: Thu Dec 11 15:40:12 2014 Change: Thu Dec 11 22:24:59 2014 

Có khả năng thay vào đó bạn sẽ nhận được lỗi như sau:

stat: /usr/ports/UPDATING: stat: No such file or directory 

Nếu bạn thấy điều này, điều đó nghĩa là bạn chưa khởi tạo cây cổng trên hệ thống của bạn . Nếu đúng như vậy, hãy tiếp tục phần tiếp theo để tìm hiểu cách extract một cây cổng ban đầu vào hệ thống của bạn bằng cách sử dụng portsnap .

Các giá trị ta muốn chú ý đến là thời gian "Sửa đổi" và "Thay đổi", được đánh dấu trong kết quả ở trên. Trong trường hợp này, dấu thời gian “Sửa đổi” sẽ là lần mới nhất mà người bảo trì cổng đã sửa đổi file với thông tin quan trọng. Dấu thời gian “Thay đổi” sẽ là lần cuối cùng file được đồng bộ hóa với server của bạn.

Ta cần nhớ dấu thời gian để biết mình cần chú ý đến những ghi chú cập nhật nào sau khi làm mới cây cổng của bạn . Ta có thể lưu chúng vào một file trong folder chính của ta bằng lệnh :

stat -x /usr/ports/UPDATING > ~/last_update 

Bây giờ ta đã ghi lại thông tin này, ta có thể tiếp tục và cập nhật cây cổng của bạn .

Cập nhật cây cổng với Portsnap

Khi bạn đã biết rõ về thời điểm cây cổng được cập nhật lần cuối, bạn có thể đồng bộ cây cổng của bạn với thông tin mới nhất từ trang web của dự án FreeBSD. Để làm điều này, ta sẽ sử dụng một công cụ có tên là portsnap .

Nếu bạn không có bất kỳ thông tin nào trong folder /usr/ports (nếu bạn gặp phải lỗi ta đã đề cập trong phần trước), bạn có thể download và extract toàn bộ cây cổng vào folder đó bằng portsnap . Quá trình này có thể mất khá nhiều thời gian, nhưng nó chỉ cần thiết nếu folder /usr/ports của bạn trống, một tình huống chỉ nên xảy ra một lần. Nếu server FreeBSD của bạn ở trên DigitalOcean, cây cổng của bạn đã được khởi tạo:

sudo portsnap fetch extract 

Thao tác này sẽ download và extract toàn bộ cây cổng vào folder /usr/ports .

Nếu bạn đã có cây cổng được xây dựng trong folder /usr/ports (nếu bạn có thể ghi lại dấu thời gian trong phần cuối cùng), bạn có thể cập nhật file lên version mới nhất của chúng bằng lệnh này:

sudo portsnap fetch update 

Lệnh này sẽ chỉ extract những file khác với những file trong cấu trúc /usr/ports , vì vậy sẽ mất ít thời gian hơn đáng kể so với biến thể extract của lệnh. Đây là định dạng nên được sử dụng trong các bản cập nhật hàng ngày của cây cổng.

Sau khi cây cổng của bạn được xây dựng hoặc cập nhật, bạn có thể bắt đầu quản lý và làm việc với các cổng trên hệ thống của bạn .

Tìm kiếm cây cổng cho ứng dụng

Đến đây bạn đã cập nhật hệ thống phân cấp cây cổng trên hệ thống của bạn , bạn có thể bắt đầu xem xét phần mềm có sẵn cho mình. Có một số cách để làm điều này, mỗi cách đều có lợi thế của nó.

Tìm kiếm với whereis

Cách dễ nhất để tìm kiếm ứng dụng là theo tên bằng lệnh whereis . Thao tác này sẽ tìm kiếm lệnh trên hệ thống của bạn và trong cây cổng. Nếu tìm thấy một điểm trùng khớp, nó sẽ trả về thông tin đường dẫn liên quan cho ứng dụng trên hệ thống.

Thông thường, nếu ứng dụng không được cài đặt nhưng tìm kiếm một cổng hợp lệ, nó sẽ trả về đường dẫn đến cổng trong cây cổng. Nếu ứng dụng được cài đặt, nó thường sẽ trả về đường dẫn đến file thực thi, cổng và thường là trang man :

Ví dụ: ta có thể tìm kiếm tiện ích wget bằng lệnh sau:

whereis wget 

Nếu cổng chưa được cài đặt, ta sẽ thấy thông tin như sau:

wget: /usr/ports/ftp/wget 

Vì đường dẫn bắt đầu bằng /usr/ports , ta biết rằng đây là một port có thể cài đặt được. Ta có thể sử dụng đường dẫn được trả về nếu ta muốn cài đặt cổng này.

Nếu lệnh wget đã được cài đặt, ta có thể thấy kết quả giống như sau:

wget: /usr/local/bin/wget /usr/local/man/man1/wget.1.gz /usr/ports/ftp/wget 

Điều này bao gồm đường dẫn đến file thực thi được cài đặt thực tế, file trang man dùng cho ứng dụng và vị trí của cổng trong cây cổng.

Tìm kiếm bằng lệnh echo trên Hệ thống file phân cấp

Trong Sổ tay FreeBSD , các tác giả cũng đề xuất một cách tìm kiếm khá mới lạ chỉ sử dụng lệnh echo và cấu trúc có sẵn của cây cổng.

Cây cổng được cài đặt với tất cả các file và folder có liên quan trong folder /usr/ports . Trong hệ thống file , mỗi cổng được biểu diễn bằng một folder riêng biệt chứa tất cả thông tin cần thiết để xây dựng và cài đặt phần mềm trên hệ thống FreeBSD.

Để hỗ trợ tổ chức, các cổng này được group theo chức năng trong các folder danh mục bên trong /usr/ports . Vì vậy, trong ví dụ wget ở trên, ta thấy rằng lệnh wget đã được phân loại trong group ftp . Vì vậy, folder /usr/ports chứa /usr/ports folder danh mục, đến lượt nó, chứa các folder cho các cổng.

Ta có thể khai thác cấu trúc nhất quán này thông qua việc sử dụng lệnh echo và các ký tự đại diện. Vì ta có thể không biết danh mục mà cổng sẽ tồn tại, ta sẽ thay thế cấp folder đó bằng dấu hoa thị. Ta cũng có thể đặt chúng trước và sau cụm từ tìm kiếm của bạn nếu ta muốn linh hoạt hơn trong việc đối sánh. Vì vậy, ta có thể tìm kiếm các chương trình liên quan đến wget bằng lệnh :

echo /usr/ports/*/*wget* 

Kết quả sẽ trả về một cái gì đó tương tự như sau:

/usr/ports/ftp/gwget /usr/ports/ftp/wget /usr/ports/www/ruby-wgettsv /usr/ports/www/wgetpaste 

Lệnh này có thể linh hoạt hơn một chút so với lệnh whereis vì nó không yêu cầu khớp chính xác.

Tìm kiếm bằng cách sử dụng các mục tiêu make sẵn

Cách mạnh nhất để tìm kiếm các cổng là sử dụng lệnh make .

Đây cũng là lệnh được sử dụng để xây dựng và cài đặt các cổng vào hệ thống, nhưng nói chung là một công cụ linh hoạt được dùng để dễ dàng thực thi các việc phức tạp đã được xác định trong file cấu hình. Các nhà phát triển đã tạo ra FreeBSD make “mục tiêu” (định nghĩa nhiệm vụ) sẽ thực hiện tìm kiếm của cây cổng cho tiêu chí khác nhau.

Để sử dụng chức năng này, trước tiên bạn phải di chuyển đến cơ sở của cây cổng. Đây là nơi các mục tiêu make được xác định:

cd /usr/ports 

Cú pháp chung để thực hiện tìm kiếm là:

make [search|quicksearch] [searchtype]=[searchquery] [modifiers] 

Hai make mục tiêu thiết kế để tìm kiếm cây cổng đang searchquicksearch . Chúng có chức năng hoàn toàn giống nhau, chỉ khác nhau ở màn hình mặc định.

Mục tiêu search sẽ trả về thông tin về tên của cổng, đường dẫn trong cây cổng, mô tả chung và sau đó là thông tin chi tiết về bản dựng bao gồm email của người bảo trì, bản phụ thuộc, chạy phần phụ thuộc và URL ngược dòng. Các quicksearch mục tiêu chỉ trả lại tên cổng , đường dẫn, và mô tả.

Các loại tìm kiếm có thể là bất kỳ loại nào sau đây:

  • name : Chỉ tìm kiếm trong trường tên của cổng.
  • key : Tìm kiếm trong các trường tên, comment và phụ thuộc của cổng.
  • path : Tìm kiếm một đường dẫn cụ thể trong hệ thống phân cấp cổng.
  • thông tin : Tìm kiếm trong trường thông tin (mô tả) của cổng .
  • Maint: Tìm kiếm bằng địa chỉ email duy trì.
  • cat : Tìm kiếm dựa trên danh mục của cổng .
  • bdeps : Tìm kiếm dependencies vào thời gian xây dựng của mỗi cổng.
  • rdeps : Tìm kiếm phụ thuộc thời gian chạy của mỗi cổng.
  • www : Tìm kiếm trang web của các cổng .

Bạn cũng có thể thêm dấu “x” trước bất kỳ danh mục nào ở trên để xóa các kết quả thỏa mãn kết quả khớp. Ví dụ: nếu tìm kiếm của bạn bao gồm xname=apache , bất kỳ cổng nào có chuỗi “apache” trong trường tên của nó sẽ không được trả về.

Hãy xem qua một số ví dụ nhanh. Dưới đây, bạn có thể thấy sự khác biệt trong kết quả của mục tiêu searchsearch quicksearch . Mục tiêu search bao gồm đầy đủ thông tin về các trận đấu:

make search name=htop 
Port:   htop-1.0.3 Path:   /usr/ports/sysutils/htop Info:   Better top(1) - interactive process viewer Maint:  gaod@hychen.org B-deps: autoconf-2.69 autoconf-wrapper-20131203 automake-1.14_1 automake-wrapper-20131203 gettext-runtime-0.19.3 indexinfo-0.2.2 libexecinfo-1.1_3 libffi-3.0.13_3 libiconv-1.14_6 m4-1.4.17_1,1 ncurses-5.9.20141213 perl5-5.18.4_11 python2-2_3 python27-2.7.9 readline-6.3.8 R-deps: libexecinfo-1.1_3 lsof-4.89.b,8 ncurses-5.9.20141213 WWW:    http://htop.sourceforge.net/ 

Mặt khác, quicksearch mục tiêu chỉ hiển thị các thông tin cần thiết về các trận đấu mà nó tìm thấy:

make quicksearch name=htop 
Port:   htop-1.0.3 Path:   /usr/ports/sysutils/htop Info:   Better top(1) - interactive process viewer 

Có thể kết hợp nhiều kiểu tìm kiếm khác nhau để thu hẹp kết quả. Ví dụ: nếu ta tìm kiếm trình theo dõi mạng ntop , ta có thể thấy kết quả giống như sau:

make quicksearch name=ntop 
Port:   ntopng-zmq-3.2.3_1 Path:   /usr/ports/devel/ntopng-zmq Info:   NTOPNG specific ZMQ library  Port:   diveintopython-5.4_1 Path:   /usr/ports/lang/diveintopython Info:   Free Python tutorial book that is "not For Dummies(tm)"  Port:   ntop-5.0.1_8 Path:   /usr/ports/net/ntop Info:   Network monitoring tool with command line and web interfaces  Port:   ntopng-1.2.1_1 Path:   /usr/ports/net/ntopng Info:   Network monitoring tool with command line and web interfaces  Port:   sntop-1.4.3_1 Path:   /usr/ports/net/sntop Info:   Monitor status of network nodes using fping 

Ở đây, ta có thể thấy rằng hầu hết các kết quả đều liên quan đến ntop , nhưng ta cũng có một cuốn sách về học Python. Ta có thể lọc thêm bằng cách thêm đặc tả đường dẫn:

make quicksearch name=ntop path=/net 
Port:   ntop-5.0.1_8 Path:   /usr/ports/net/ntop Info:   Network monitoring tool with command line and web interfaces  Port:   ntopng-1.2.1_1 Path:   /usr/ports/net/ntopng Info:   Network monitoring tool with command line and web interfaces  Port:   sntop-1.4.3_1 Path:   /usr/ports/net/sntop Info:   Monitor status of network nodes using fping 

Ta cũng có thể sửa đổi hành vi của tìm kiếm theo một số cách khác nhau. Một số công cụ sửa đổi hợp lệ là:

  • icase : Đặt giá trị này thành “1” để bật tính năng phân biệt chữ hoa chữ thường. Đây là mặc định. Để tìm kiếm phân biệt chữ hoa chữ thường, hãy đặt giá trị này thành “0”.
  • display : Đây là danh sách các trường, được phân tách bằng dấu phẩy, để hiển thị trong kết quả .
  • keylim : Chỉ giới hạn tìm kiếm (sử dụng kiểu tìm kiếm “key”) đối với những trường được hiển thị. Bật tính năng này bằng cách đặt thành “1”.

Ví dụ: ta có thể tìm kiếm các mô tả hoặc đường dẫn có chứa chuỗi viết hoa “Dán” bằng lệnh :

make search key=Paste display=path,info keylim=1 icase=0 
Path:   /usr/ports/devel/pear-SebastianBergmann_PHPCPD Info:   Copy/Paste Detector (CPD) for PHP code  Path:   /usr/ports/devel/py-zope.copypastemove Info:   Copy, Paste, and Move support for content components  Path:   /usr/ports/german/bsdpaste Info:   Pastebin web application to upload and read text on a webserver  Path:   /usr/ports/www/p5-WWW-Pastebin-PastebinCom-Create Info:   Paste to http://pastebin.com from Perl  Path:   /usr/ports/www/p5-WebService-NoPaste Info:   Pastebin web application to upload snippets of text  Path:   /usr/ports/www/py-django-dpaste Info:   Pastebin Django application that powers dpaste.de  Path:   /usr/ports/www/wgetpaste Info:   Paste to several pastebin services via bash script 

Một tình huống nữa mà bạn có thể gặp trong các tìm kiếm của bạn là một cổng đã bị di chuyển hoặc bị xóa. Các kết quả này trông như thế này:

make quicksearch name=wget 
. . .  Port:   ftp/emacs-wget Moved: Date:   2011-05-02 Reason: Has expired: Upstream disappeared and distfile is no longer available  Port:   ftp/wgetpro Moved: Date:   2011-10-14 Reason: Vulnerable since 2004-12-14  Port:   www/wget4web Moved: Date:   2012-01-01 Reason: Has expired: Depends on expired www/apache13 

Nếu một cổng đã được chuyển đến một vị trí mới, trường “Đã di chuyển” sẽ chứa vị trí mới mà cổng có thể được tìm thấy. Nếu trường này có, nhưng trống, cổng đã bị xóa.

Mặc dù chúng đã bị xóa, chúng vẫn sẽ hiển thị trong kết quả tìm kiếm của bạn. Nếu bạn muốn ngăn các cổng đã di chuyển hoặc đã xóa hiển thị, bạn có thể đặt biến môi trường PORTSEARCH_MOVED thành “0”.

Ví dụ: để đặt biến này thành “0” chỉ cho lệnh theo sau, sử dụng tcsh mặc định, ta có thể nhập:

env PORTSEARCH_MOVED=0 make quicksearch name=wget 
Port:   gwget-1.0.4_9 Path:   /usr/ports/ftp/gwget Info:   GNOME wget front-end  Port:   wget-1.16 Path:   /usr/ports/ftp/wget Info:   Retrieve files from the Net via HTTP(S) and FTP  Port:   ruby20-ruby-wgettsv-0.95 Path:   /usr/ports/www/ruby-wgettsv Info:   Collect WWW resources and generate TSV data  Port:   wgetpaste-2.25 Path:   /usr/ports/www/wgetpaste Info:   Paste to several pastebin services via bash script 

Như bạn thấy , tất cả các mục đã được di chuyển hoặc xóa hiện đã được lọc ra khỏi kết quả của ta . Nếu bạn muốn đặt điều này làm hành vi mặc định, bạn có thể đặt PORTSEARCH_MOVED=0 trong file make.conf của bạn :

sudo sh -c 'echo "PORTSEARCH_MOVED=0" >> /etc/make.conf' 

Cài đặt các cổng bằng Make

Khi bạn đã tìm thấy một cổng mà bạn muốn cài đặt, bạn có thể dễ dàng download các file cần thiết, tạo file binary và cài đặt bằng lệnh make .

Để cài đặt một cổng, hãy thay đổi folder của cổng trong cây cổng. Bạn có thể tìm thấy vị trí này thông qua bất kỳ phương pháp tìm kiếm nào ở trên. Để chứng minh điều này, ta sẽ cài đặt một cổng có tên là portmaster , cổng mà ta cần ở phần sau của hướng dẫn này.

Đầu tiên, hãy thay đổi vị trí cổng. Cổng portmaster được giữ trong danh mục ports-mgmt :

cd /usr/ports/ports-mgmt/portmaster 

Bây giờ, ta có thể dễ dàng download , cấu hình, biên dịch và cài đặt cổng bằng cách sử dụng make target. Vì các hoạt động này ảnh hưởng đến hệ thống của ta , ta cần sử dụng sudo . Cách lâu dài để làm điều này là thông qua các cuộc gọi cá nhân để make , như thế này. Đừng nhập các lệnh này, ta sẽ hiển thị cho bạn version ngắn hơn nhiều trong giây lát:

sudo make config sudo make fetch sudo make checksum sudo make depends sudo make extract sudo make patch sudo make configure sudo make build sudo make install 

Ta có thể rút ngắn điều này một chút bằng cách liệt kê từng mục tiêu sau một lệnh make duy nhất như sau:

sudo make config fetch checksum depends extract patch configure build install 

Tuy nhiên, điều này luôn không cần thiết. Mỗi mục tiêu được liệt kê ở trên sẽ gọi bất kỳ mục tiêu nào trước đó cần thiết để hoàn thành nhiệm vụ. Vì vậy, những điều trên có thể đơn giản được cô đọng thành:

sudo make install 

Thông thường, ta muốn mở rộng chuỗi lệnh này một chút đảm bảo rằng ta đã cấu hình mọi thứ một cách chính xác. Ta thường muốn chỉ định config-recursive , một tùy chọn không có trong đường dẫn trên, trước mục tiêu install để quản lý cấu hình cho cổng này và bất kỳ phụ thuộc nào khi bắt đầu cài đặt. Nếu không, quá trình xây dựng có thể tạm dừng và chờ user nhập một phần thông qua việc xây dựng các phụ thuộc cần thiết.

Ta cũng thường muốn dọn dẹp một chút sau khi cài đặt để lấy lại không gian đĩa và giữ cho hệ thống sạch sẽ. Ta có thể làm điều này với clean hoặc distclean mục tiêu. Mục tiêu clean sẽ xóa mã nguồn được extract được sử dụng để xây dựng cổng này và bất kỳ cổng phụ thuộc nào. distclean cũng thực hiện điều này, nhưng cũng xóa repository nguồn nén cho gói này khỏi folder /usr/ports/distfiles .

Vì vậy, một lệnh cài đặt điển hình có thể trông giống như sau:

sudo make config-recursive install distclean 

Điều này sẽ nhắc bạn cấu hình cổng và bất kỳ phụ thuộc nào khi bắt đầu quá trình. Sau đó, nó sẽ download và xác minh tính toàn vẹn của repository nguồn. Sau đó, nó sẽ thay đổi ngữ cảnh để đáp ứng mọi phụ thuộc bị thiếu. Khi quá trình đó hoàn tất, nó sẽ trở lại cổng được đề cập, extract repository , áp dụng bất kỳ bản vá lỗi cần thiết nào và cấu hình nó theo các tùy chọn bạn đã chọn. Sau đó, nó sẽ biên dịch ứng dụng và cài đặt nó trên hệ thống. Sau đó, nó sẽ xóa open-souce rộng cho cổng này và bất kỳ phần phụ thuộc nào. Sau đó, nó sẽ xóa repository nguồn cho cổng này.

Thực thi lệnh trên trong folder /usr/ports/ports-mgmt/portmaster :

sudo make config-recursive install distclean 

Bạn sẽ thấy một hộp thoại duy nhất cho ứng dụng. Nếu bạn đang sử dụng một trong các shell được liệt kê, bạn có thể chọn cấu hình hoàn thành shell cho công cụ tại đây:

Cấu hình cổng FreeBSD

Cổng portmaster cổng không có bất kỳ phụ thuộc nào, nhưng nếu có, các tùy chọn cấu hình cho phụ thuộc sẽ được trình bày trực tiếp sau cấu hình của cổng đích ở trên. Cổng sẽ được download , cấu hình và cài đặt.

Nếu bạn đang sử dụng tcsh mặc định, bạn cần quét lại PATH của bạn sau mỗi lần cài đặt để môi trường shell của bạn biết tất cả các ứng dụng đã cài đặt:

rehash 

Nếu quá trình trên thành công, bạn đã cài đặt thành công cổng đầu tiên của bạn .

Trong khi hệ điều hành chính và cấu hình được thực hiện ở các vị trí thông thường, phần mềm tùy chọn được cài đặt thông qua hệ thống cổng được cài đặt trong phân cấp /usr/local .

Điều này nghĩa là để cấu hình phần mềm tùy chọn, bạn sẽ phải tìm trong folder /usr/local/etc Bản thân các file thực thi được lưu giữ chủ yếu trong các folder /usr/local/bin/usr/local/sbin . Hãy nhớ điều này khi bạn đang cấu hình hoặc khởi động các ứng dụng.

Lưu ý về các ứng dụng chạy dưới dạng dịch vụ

Một điều cần lưu ý là nếu bạn đang cài đặt một cổng sẽ được chạy như một dịch vụ, thì quy trình cài đặt sẽ không tự động khởi động dịch vụ. Trên thực tế, có một số bước mà bạn phải thực hiện để bắt đầu các dịch vụ trong FreeBSD.

Nếu bạn muốn bắt đầu một dịch vụ một lần, bạn có thể thực hiện bằng cách nhập:

sudo service servicename onestart 

Ví dụ, để khởi động MySQL, bạn có thể gõ:

sudo service mysql-server onestart 

Giả sử rằng bất kỳ cấu hình cần thiết nào đã hoàn tất, điều này sẽ bắt đầu dịch vụ một lần duy nhất. Nếu bạn muốn dừng dịch vụ sau này, có thể chạy lệnh:

sudo service mysql-server onestop 

Mặc dù điều này hoạt động cho các bài kiểm tra nhanh, nhưng nó không phải là cách lý tưởng để quản lý các dịch vụ trong FreeBSD. Để cấu hình dịch vụ của bạn khởi động mỗi lần khởi động, bạn phải kích hoạt nó. Để làm như vậy, bạn phải thêm một dòng vào file /etc/rc.conf .

Các file init chỉ định cách các dịch vụ tùy chọn được bắt đầu được lưu giữ trong folder /usr/local/etc/rc.d . Trong mỗi file init này, một biến được gọi là rcvar cho hệ thống init biết biến nào trong file /etc/rc.conf cần tìm để xác định có khởi động dịch vụ hay không. Đối với mỗi dịch vụ tùy chọn, bạn có thể tìm thấy dòng thích hợp để thêm vào file /etc/rc.conf bằng lệnh :

grep rcvar /usr/local/etc/rc.d/* 

Bạn sẽ nhận được một danh sách giống như sau:

/usr/local/etc/rc.d/avahi-daemon:rcvar=avahi_daemon_enable /usr/local/etc/rc.d/avahi-dnsconfd:rcvar=avahi_dnsconfd_enable /usr/local/etc/rc.d/dbus:rcvar=dbus_enable /usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable 

Phần được đánh dấu của kết quả hiển thị biến mà ta cần đặt thành “CÓ” để kích hoạt từng dịch vụ này.

Ví dụ, để kích hoạt dịch vụ daemon rsync , ta có thể thêm dòng này vào /etc/rc.conf :

rsyncd_enable="YES" 

Dòng thích hợp phải nằm trong file /etc/rc.conf trước khi sử dụng các lệnh quản lý dịch vụ thông thường. Ví dụ: bạn có thể thêm dòng trên vào cuối file /etc/rc.conf bằng editor của bạn hoặc bằng lệnh :

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

Điều này sẽ làm cho daemon rsync được khởi động mỗi lần khởi động. Đến đây bạn có thể kiểm soát dịch vụ bằng lệnh service mà không có tiền tố “một”. Ví dụ: bạn có thể bắt đầu dịch vụ bằng lệnh :

sudo service rsyncd start 

Bạn có thể dừng dịch vụ lại bằng lệnh :

sudo service rsyncd stop 

Xóa một cổng đã cài đặt

Nếu bạn đã cài đặt một cổng mà bạn không cần nữa, bạn có thể xóa ứng dụng khỏi hệ thống của bạn bằng quy trình tương tự nhưng dễ hiểu hơn.

Ta có thể sử dụng deinstall mục tiêu để loại bỏ một ứng dụng từ hệ thống của ta . , hãy thay đổi folder trong cây cổng được liên kết với ứng dụng bạn muốn xóa:

cd /usr/ports/ports-mgmt/portmaster 

Bạn có thể xóa ứng dụng khỏi hệ thống của bạn bằng lệnh :

sudo make deinstall 

Nếu bạn cũng muốn xóa các tùy chọn bạn đã cấu hình cho cổng này, bạn có thể thực hiện bằng cách nhập:

sudo make rmconfig 

Để xóa các tùy chọn cấu hình cho cổng này và tất cả các phụ thuộc của nó, hãy nhập:

sudo make rmconfig-recursive 

Nếu bạn đã xóa portmaster bằng các lệnh trên, hãy cài đặt lại bằng lệnh :

sudo make reinstall distclean 

Cập nhật ứng dụng

Đến đây bạn đã biết cách cài đặt hoặc gỡ bỏ các chương trình, ta sẽ trình bày cách giữ cho các ứng dụng của bạn luôn được cập nhật.

Kiểm tra file CẬP NHẬT để biết các ghi chú cập nhật quan trọng

Ở phần đầu của hướng dẫn này, ta đã lưu dấu thời gian cho file /usr/ports/UPDATING trước khi ta sử dụng portsnap để làm mới cây cổng của bạn .

Tệp /usr/ports/UPDATING chứa các ghi chú quan trọng từ người bảo trì cổng về các cập nhật và thay đổi có thể yêu cầu administrator thực hiện thêm các bước thủ công. Việc không đọc file này và áp dụng lời khuyên trước khi cập nhật ứng dụng có thể khiến hệ thống của bạn ở trạng thái không sử dụng được hoặc ảnh hưởng đến chức năng của ứng dụng.

Trước tiên, hãy kiểm tra dấu thời gian mà ta đã lưu vào file trong folder chính của ta :

cat ~/last_update 
  File: "/usr/ports/UPDATING"   Size: 375337       FileType: Regular File   Mode: (0644/-rw-r--r--)         Uid: (    0/    root)  Gid: (    0/   wheel) Device: 0,81   Inode: 2011338    Links: 1 Access: Thu Dec 11 22:24:59 2014 Modify: Thu Dec 11 15:40:12 2014 Change: Thu Dec 11 22:24:59 2014 

Lưu ý , dấu thời gian “Sửa đổi” cho biết lần cuối cùng file CẬP NHẬT trên hệ thống của ta đã được sửa đổi bởi người bảo trì cổng và dấu thời gian “Thay đổi” cho biết thời gian đồng bộ hóa cuối cùng của ta . Thông tin trên là các dấu thời gian cũ. Từ thông tin này, ta có thể nói rằng ta cần chú ý đến bất kỳ mục nhập nào từ ngày 11 tháng 12 cho đến ngày hiện tại.

Mở file UPDATING được làm mới ngay bây giờ:

less /usr/ports/UPDATING 

Tệp sẽ trông giống như sau:

This file documents some of the problems you may encounter when upgrading your ports.  We try our best to minimize these disruptions, but sometimes they are unavoidable.  You should get into the habit of checking this file for changes each time you update your ports collection, before attempting any port upgrades.  20150101:   AFFECTS: users of net/unison and net/unison-nox11   AUTHOR: madpilot@FreeBSD.org    Unison has been upgraded to version 2.48, which uses a different wire   protocol than 2.40 did.  In order to support synchronization with   other computers where Unison is still at version 2.40, a new port   net/unison240 has been created.  It provides unison240 and if that is   GTK2-enabled, also unison240-text.  This unison240 port can be   installed in parallel with the existing net/unison port.  20141230:   AFFECTS: users of deskutils/xpad   AUTHOR: jgh@FreeBSD.org    deskutils/xpad has been moved to deskutils/xpad3, since 4.x has been around   for a while.    Should you wish to stick with legacy branch at this time;    # portmaster -o deskutils/xpad deskutils/xpad3  . . . 

Tệp này chứa mọi thay đổi có thể vi phạm cho mọi cổng khả dụng từ năm 2008. Bạn chỉ cần chú ý đến các thông báo rằng:

  • Đã được thêm vào kể từ lần cuối cùng bạn cập nhật các cổng của bạn
  • Tham gia vào các cổng bạn đã cài đặt trên hệ thống của bạn

Vì vậy, đối với ví dụ này, ta chỉ cần chú ý đến các thông báo đã được thêm vào từ ngày 11 tháng 12 liên quan đến các cổng đã cài đặt của ta . Nếu bạn không biết cổng nào được cài đặt trên hệ thống của bạn , bạn có thể sử dụng portmaster để tạo danh sách đầy đủ:

portmaster -l 
===>>> Root ports (No dependencies, not depended on) ===>>> dialog4ports-0.1.5_2 ===>>> pkg-1.4.0 ===>>> pkgconf-0.9.7 ===>>> portmaster-3.17.7 ===>>> rsync-3.1.1_3 ===>>> 5 root ports  ===>>> Trunk ports (No dependencies, are depended on) ===>>> ca_root_nss-3.17.3_1 ===>>> expat-2.1.0_2  . . . 

Đầu ra sẽ được chia thành các phần theo mối quan hệ phụ thuộc của chúng. Sử dụng thông tin này để kiểm tra các ghi chú CẬP NHẬT.

Nếu cần bất kỳ bước thủ công nào, hãy hoàn thành các bước đó trước khi tiếp tục với phần còn lại của bản cập nhật.

Kiểm tra các lỗ hổng đã biết

Một lưu ý khác cần lưu ý khi cập nhật là liệu phần mềm được cài đặt trên hệ thống của bạn có bất kỳ lỗ hổng bảo mật nào đã biết hay không.

FreeBSD duy trì một database về lỗ hổng bảo mật mà bạn có thể kiểm tra xem có bất kỳ cổng hoặc gói nào của bạn có vấn đề về bảo mật hay không. Chức năng này có trong công cụ pkg . Chạy kiểm tra bảo mật bằng lệnh :

sudo pkg audit -F 

Thao tác này sẽ download version mới nhất của database lỗ hổng bảo mật từ server của dự án FreeBSD. Sau đó, nó sẽ kiểm tra các version của tất cả các cổng hoặc gói đã cài đặt của bạn và so sánh chúng với các mục nhập trong database bảo mật.

Nếu bất kỳ cổng hoặc gói nào được cài đặt trên hệ thống của bạn có lỗ hổng đã biết trong database , bạn sẽ được cảnh báo. Thông thường, chúng sẽ có sẵn ít nhất một cổng cập nhật để vá lỗi.

Dưới đây, ta sẽ thảo luận về cách cập nhật tất cả các cổng trên hệ thống của bạn hoặc chỉ một tập hợp con. Dù chiến lược cập nhật của bạn là gì, điều cần thiết là bạn phải cập nhật ít nhất các cổng có lỗ hổng bảo mật đã biết.

Cập nhật các cổng đã cài đặt

Sau khi bạn đã thực hiện bất kỳ bước thủ công nào được nêu trong file CẬP NHẬT, bạn có thể cập nhật phần mềm của bạn .

Để xem những cổng nào có sẵn bản cập nhật, bạn có thể sử dụng lệnh portmaster với cờ -L :

portmaster -L 
===>>> Root ports (No dependencies, not depended on) ===>>> dialog4ports-0.1.5_2 ===>>> pkg-1.4.0         ===>>> New version available: pkg-1.4.3 ===>>> pkgconf-0.9.7 ===>>> portmaster-3.17.7 ===>>> rsync-3.1.1_3 ===>>> 5 root ports  ===>>> Trunk ports (No dependencies, are depended on) ===>>> ca_root_nss-3.17.3_1 ===>>> expat-2.1.0_2  . . .  ===>>> 44 total installed ports         ===>>> 4 have new versions available 

Điều này cung cấp kết quả tương tự như biến thể chữ thường của tùy chọn mà ta đã sử dụng trước đó, nhưng nó cũng kiểm tra các bản cập nhật có sẵn. Ở đây, ta có thể thấy rằng cổng pkg đã có một version mới. Ta có thể thấy rằng có tổng cộng 4 cổng có version mới.

Để nâng cấp một cổng, bạn có thể đi tới vị trí folder của cổng trong cây cổng và cài đặt lại version mới của phần mềm:

sudo make deinstall reinstall 

Bạn cũng có thể thực hiện điều tương tự với lệnh portmaster . Bạn phải cung cấp danh mục và tên cổng. Ví dụ, để nâng cấp lệnh wget , ta có thể gõ:

sudo portmaster ftp/wget 

Lệnh trên cũng được dùng để cài đặt các cổng. Nhiều user đến từ các nền tảng khác thấy portmaster là một trải nghiệm quản lý phần mềm quen thuộc hơn so với việc sử dụng các mục tiêu make mà ta đã nêu ở trên.

Mặc dù có thể nâng cấp các cổng một cách độc lập, nhưng tốt nhất là bạn nên cập nhật tất cả phần mềm cùng một lúc. Bạn có thể thực hiện việc này với portmaster bằng cờ -a :

sudo portmaster -a 

Thao tác này sẽ cập nhật tất cả các cổng trên hệ thống lên version mới nhất. Mọi tùy chọn cấu hình mới sẽ được hiển thị cho bạn khi bắt đầu quá trình. Nếu bạn có gói nào được cài đặt với pkg với các version mới hơn có sẵn thông qua hệ thống cổng, chúng cũng sẽ được cập nhật và chuyển đổi sang các cổng.

Kết luận

Bây giờ, bạn đã nắm khá rõ về cách làm việc với các cổng trên hệ thống FreeBSD. Các cổng cực kỳ linh hoạt, cho phép bạn dễ dàng tùy chỉnh phần lớn các ứng dụng trên server của bạn mà không tốn nhiều công sức.

Nhiều administrator hoan nghênh việc đánh đổi giữa thời gian biên dịch và tăng cường kiểm soát, nhưng nhu cầu của bạn có thể khác nhau. Tuy nhiên, tìm hiểu về hệ thống cổng là một khoản đầu tư tốt dù chiến lược phần mềm của bạn trên FreeBSD. Đôi khi các bản cập nhật quan trọng có thể chưa có sẵn gói và có một số phần mềm nhất định không thể được phân phối ở định dạng đóng gói do các hạn chế cấp phép. Những trường hợp này yêu cầu sử dụng các cổng dù sở thích của bạn.


Tags:

Các tin liên quan