Cloud-init cung cấp phương pháp tiếp cận đa nền tảng, phân phối chéo để tự động khởi tạo máy chủ. Với dịch vụ Metadata của Akamai , bạn có thể tận dụng cloud-init để triển khai Compute Instances, sử dụng các tập lệnh dữ liệu người dùng tùy chỉnh để xác định thiết lập mong muốn của bạn.
Trong hướng dẫn này, hãy tìm hiểu cách quản lý các gói trên máy chủ mới bằng cloud-init. Cho dù bạn muốn nâng cấp các gói hệ thống, cài đặt các gói trong quá trình khởi tạo hay quản lý kho lưu trữ của mình, hướng dẫn này sẽ chỉ cho bạn cách thực hiện.
Trước khi bắt đầu, bạn nên xem lại hướng dẫn của chúng tôi về cách sử dụng Cloud-Init để tự động cấu hình và bảo mật máy chủ của bạn . Ở đó, bạn có thể xem cách tạo tệp cloud-config, tệp mà bạn cần làm theo cùng với hướng dẫn hiện tại. Khi bạn đã sẵn sàng triển khai cloud-config, hướng dẫn được liên kết ở trên sẽ chỉ cho bạn cách thực hiện.
Gói nâng cấp
Cloud-init bao gồm một mô-đun để quản lý các bản cập nhật và nâng cấp gói trong quá trình khởi tạo. package_update
Tùy chọn này, khi được đặt thành true
, sẽ áp dụng các bản cập nhật cho các gói đã cài đặt và cập nhật kho lưu trữ gói. Tùy chọn này thường hữu ích để đảm bảo máy chủ đang hoạt động từ các tham chiếu gói mới nhất.
package_update: true
Tùy chọn này package_upgrade
nâng cấp các gói đã cài đặt lên phiên bản mới nhất. Trừ khi bạn cần các phiên bản gói cụ thể, việc chạy tùy chọn này trong quá trình khởi tạo sẽ giúp hệ thống của bạn ổn định và an toàn hơn.
package_upgrade: true
Ngoài ra, cloud-config có tùy chọn đảm bảo hệ thống khởi động lại cho bất kỳ nâng cấp hoặc cài đặt gói nào yêu cầu. Với tùy chọn này, bạn đảm bảo rằng các nâng cấp và cài đặt gói đã sẵn sàng để sử dụng ngay sau khi quá trình cloud-init hoàn tất.
package_update: true
package_upgrade: true
package_reboot_if_required: true
Cài đặt các gói
Để cài đặt các gói với cloud-init, hãy sử dụng packages
tùy chọn trong cloud-config. Cung cấp cho tùy chọn danh sách tên gói và cloud-init xử lý cài đặt trong quá trình khởi tạo.
Dưới đây là các ví dụ cài đặt các thành phần chính của ngăn xếp LAMP, một thiết lập ứng dụng web phổ biến. Cloud-config yêu cầu tên gói chính xác, có thể khác nhau giữa các bản phân phối, cũng như các điều kiện tiên quyết chung cho một thiết lập. Để chứng minh, các ví dụ dưới đây cho thấy thiết lập sẽ trông như thế nào giữa hai bản phân phối khác nhau.
Tìm hiểu thêm về ngăn xếp LAMP và các điều kiện tiên quyết của gói trong hướng dẫn của chúng tôi về Cách cài đặt ngăn xếp LAMP . Sử dụng menu thả xuống ở đầu hướng dẫn đó để xem các bản phân phối khác nhau.
Ubuntu:
packages:
- apache2
- mysql-server
- php
- libapache2-mod-php
- php-mysql
Centos8:
packages:
- httpd
- mariadb-server
- php
- php-pear
- php-mysqlnd
Ghi chú: Tùy package_reboot_if_required
chọn được đề cập trong phần trước cũng ảnh hưởng đến cài đặt gói. Nếu được đặt thành true
, nó đảm bảo rằng hệ thống khởi động lại nếu bất kỳ gói mới cài đặt nào yêu cầu.
Thêm kho phần mềm
Trong số các công cụ quản lý gói nâng cao hơn trong cloud-init là khả năng thêm kho lưu trữ tùy chỉnh trong quá trình khởi tạo. Cloud-init sử dụng các mô-đun cụ thể để quản lý các trình quản lý gói khác nhau, do đó các bước sẽ khác nhau tùy thuộc vào bản phân phối của bạn. Nội dung sau đây đề cập đến hai trong số những công cụ phổ biến nhất: APT , thường thấy nhất trên các hệ thống Debian và Ubuntu, và Yum / DNF , chủ yếu được tìm thấy trên CentOS, Fedora và các bản phân phối dựa trên RHEL khác.
Ngoài ra, cloud-init còn hỗ trợ trình quản lý gói Zypper , được sử dụng trên các bản phân phối openSUSE. Bạn có thể tìm hiểu về cách thêm kho lưu trữ cho Zypper trong tài liệu tham khảo mô- đun Zypper Add Repo của cloud-init .
- APT
Trong cloud-config, apt
tùy chọn này cho phép quản lý chi tiết trình quản lý gói APT. Bạn có thể tìm hiểu thêm về phạm vi tính năng thông qua tham chiếu mô-đun APT Configure của cloud-init .
Để thêm kho lưu trữ của bên thứ ba vào APT, hãy sử dụng sources
tùy chọn trong một apt
khối. sources
Tùy chọn này là một từ điển, với một hoặc nhiều mục nhập kho lưu trữ. Mỗi mục nhập kho lưu trữ cần một source
chuỗi, chỉ ra vị trí kho lưu trữ và một tập hợp các tùy chọn liên quan đến khóa, cung cấp khóa GPG cho kho lưu trữ.
Có hai cách để thêm kho lưu trữ, dựa trên cách bạn muốn cung cấp khóa GPG:
Để sử dụng máy chủ khóa GPG, bạn có thể cung cấp ID khóa và vị trí máy chủ như trong ví dụ này
apt:
sources:
docker:
source: deb [arch="amd64"] https://download.docker.com/linux/ubuntu $RELEASE stable
keyid: 8D81803C0EBFCD88
keyserver: 'https://download.docker.com/linux/ubuntu/gpg'
Trong trường hợp này, ID khóa được lấy từ khóa công khai GPG bằng cách sử dụng bộ lệnh này:
wget https://download.docker.com/linux/ubuntu/gpg -O docker.gpg.pub.key gpg --list-packets docker.gpg.pub.key | awk '/keyid:/{ print $2 }'
Tùy chọn khác là thêm khóa GPG theo cách thủ công, sử dụng key
tùy chọn như trong ví dụ này. Thay thế chuỗi GPG mẫu bằng khóa công khai GPG đầy đủ, giống như khóa được lấy bằng lệnh wget
ở trên.
apt:
sources:
docker:
source: deb [arch="amd64"] https://download.docker.com/linux/ubuntu $RELEASE stable
key: |
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFit2ioBEADhWpZ8/wvZ6hUTiXOwQHXMAlaFHcPH9hAtr4F1y2+OYdbtMuth
lqqwp028AqyY+PRfVMtSYMbjuQuu5byyKR01BbqYhuS3jtqQmljZ/bJvXqnmiVXh
38UuLa+z077PxyxQhu5BbqntTPQMfiyqEiU+BKbq2WmANUKQf+1AmZY/IruOXbnq
...
jCxcpDzNmXpWQHEtHU7649OXHP7UeNST1mCUCH5qdank0V1iejF6/CfTFU4MfcrG
YT90qFF93M3v01BbxP+EIY2/9tiIPbrd
=0YYh
-----END PGP PUBLIC KEY BLOCK-----
Với cả hai phương pháp, bạn có thể xác minh kho lưu trữ đã thêm vào hệ thống mới bằng lệnh như sau:
sudo apt-cache policy
Package files:
100 /var/lib/dpkg/status
release a=now
500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
release o=Docker,a=jammy,l=Docker CE,c=stable,b=amd64
origin download.docker.com
...
2.YUM
Cloud-config sử dụng yum_repos
tùy chọn chuyên dụng để quản lý kho lưu trữ trong Yum và DNF. Mỗi kho lưu trữ được thêm vào trình quản lý gói sẽ có một mục bên dưới tùy yum_repos
chọn, với mã định danh, URL và thông tin khác.
Ví dụ ở đây bổ sung kho lưu trữ Extra Packages for Enterprise Linux (EPEL), một kho lưu trữ phổ biến để truy cập nhiều gói hơn trên các hệ thống dựa trên RHEL:
yum_repos:
epel-release:
name: Extra Packages for Enterprise Linux 8 - Release
baseurl: http://download.fedoraproject.org/pub/epel/8/Everything/$basearch
enabled: true
failovermethod: priority
gpgcheck: true
gpgkey: http://download.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-8
Ba tùy chọn đầu tiên ( name
, baseurl
, và enabled
) dành riêng cho cloud-init yum_repos
. Tuy nhiên, yum_repos
cũng hỗ trợ việc sử dụng các tùy chọn cấu hình kho lưu trữ riêng của Yum, mà các tùy chọn còn lại ở trên tận dụng.
Sau khi quá trình khởi tạo hoàn tất, bạn có thể xác minh kho lưu trữ đã thêm bằng repolist
lệnh Yum/DNF:
sudo dnf repolist
repo id repo name
...
epel-release Extra Packages for Enterprise Linux 8 - Release
...
Xác minh Cập nhật và Cài đặt
Cloud-init lưu trữ một bản ghi tại /var/log/cloud-init-output.log
với tất cả đầu ra từ các bước khởi tạo của cloud-init. Ví dụ, đầu ra ví dụ bên dưới hiển thị phần nhật ký cho APT cài đặt gói apache2
.
sudo cat /var/log/cloud-init-output.log
...
The following additional packages will be installed:
apache2-bin apache2-data apache2-utils libapache2-mod-php8.1 libapr1
libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libcgi-fast-perl
libcgi-pm-perl libclone-perl libencode-locale-perl libevent-pthreads-2.1-7
libfcgi-bin libfcgi-perl libfcgi0ldbl libhtml-parser-perl
libhtml-tagset-perl libhtml-template-perl libhttp-date-perl
libhttp-message-perl libio-html-perl liblua5.3-0 liblwp-mediatypes-perl
libmecab2 libprotobuf-lite23 libtimedate-perl liburi-perl mecab-ipadic
mecab-ipadic-utf8 mecab-utils mysql-client-8.0 mysql-client-core-8.0
mysql-common mysql-server-8.0 mysql-server-core-8.0 php-common php8.1
php8.1-cli php8.1-common php8.1-mysql php8.1-opcache php8.1-readline
ssl-cert
Suggested packages:
apache2-doc apache2-suexec-pristine | apache2-suexec-custom www-browser
php-pear libdata-dump-perl libipc-sharedcache-perl libbusiness-isbn-perl
libwww-perl mailx tinyca
The following NEW packages will be installed:
apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php
libapache2-mod-php8.1 libapr1 libaprutil1 libaprutil1-dbd-sqlite3
libaprutil1-ldap libcgi-fast-perl libcgi-pm-perl libclone-perl
libencode-locale-perl libevent-pthreads-2.1-7 libfcgi-bin libfcgi-perl
libfcgi0ldbl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl
libhttp-date-perl libhttp-message-perl libio-html-perl liblua5.3-0
liblwp-mediatypes-perl libmecab2 libprotobuf-lite23 libtimedate-perl
liburi-perl mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client-8.0
mysql-client-core-8.0 mysql-common mysql-server mysql-server-8.0
mysql-server-core-8.0 php php-common php-mysql php8.1 php8.1-cli
php8.1-common php8.1-mysql php8.1-opcache php8.1-readline ssl-cert
0 upgraded, 49 newly installed, 0 to remove and 11 not upgraded.
...
Mặc dù mức độ chi tiết cao của nhật ký hữu ích cho việc gỡ lỗi, nhưng nó khiến việc xác minh các gói đã nâng cấp và cài đặt trở nên hơi cồng kềnh. Thay vào đó, hãy sử dụng các lệnh dành riêng cho trình quản lý gói của hệ thống để xác minh các gói nâng cấp và cài đặt. Dưới đây, bạn có thể tìm thấy các bước để thực hiện việc đó trên các hệ thống Debian/Ubuntu (sử dụng APT) và các hệ thống dựa trên RHEL như CentOS và Fedora (sử dụng DNF hoặc Yum).
Debian ubuntu:
Trình quản lý gói APT bao gồm một list
lệnh cung cấp các chức năng hữu ích để xem xét các gói. Sử dụng tùy --upgradable
chọn với lệnh sẽ hiển thị danh sách các gói có bản nâng cấp khả dụng.
sudo apt list --upgradable
Lý tưởng nhất là đầu ra sẽ trống, nhưng hệ thống của bạn thường có một vài gói không được nâng cấp bằng apt upgrade
. Thông thường, điều này là do sự phụ thuộc. Nếu đúng như vậy, lệnh upgrade
và nhật ký cloud-init sẽ chỉ ra các gói chưa được nâng cấp.
...
0 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
...
list
Tùy chọn của lệnh cung --installed
cấp danh sách toàn diện các gói được cài đặt với trình quản lý gói APT. Tuy nhiên, danh sách này có thể khó điều hướng để xác minh vì nó cũng bao gồm tất cả các gói được cài đặt dưới dạng phụ thuộc. Để chỉ xem các gói đã được cài đặt rõ ràng, hãy sử dụng tùy --manual-installed
chọn thay thế.
sudo apt list --manual-installed
Ví dụ cài đặt gói trước đó trong hướng dẫn này chỉ có một vài gói, do đó bộ lọc văn bản ngắn thậm chí có thể rút ngắn đầu ra hơn nữa. Lệnh bên dưới thực hiện điều này bằng cách chuyển hướng đến grep
. Mỗi lệnh \|
tách một thuật ngữ tìm kiếm và mỗi thuật ngữ tìm kiếm xác định một hoặc nhiều gói được chỉ định trong cloud-config.
sudo apt list --manual-installed | grep 'apache2\|mysql-server\|php'
apache2/jammy-updates,now 2.4.52-1ubuntu4.6 amd64 [installed]
libapache2-mod-php/jammy,now 2:8.1+92ubuntu1 all [installed]
mysql-server/jammy-updates,jammy-security,now 8.0.34-0ubuntu0.22.04.1 all [installed]
php-mysql/jammy,now 2:8.1+92ubuntu1 all [installed]
php/jammy,now 2:8.1+92ubuntu1 all [installed]
AlmaLinux, CentOS, Fedora, Rocky Linux
Với trình quản lý gói Yum/DNF, check-update
lệnh chuyên dụng sẽ hiển thị bất kỳ gói nào có bản nâng cấp khả dụng. Sau khi khởi tạo cloud-init, đầu ra sẽ trống, cho biết tất cả các gói đã cài đặt đều được cập nhật.
Ghi chú: Các ví dụ trong phần này sử dụng rõ ràng dnf
, vì các hệ thống mới hơn thường sử dụng trình quản lý gói DNF thay vì Yum. Tuy nhiên, nếu hệ thống của bạn sử dụng Yum thay thế, các lệnh tương tự sẽ hoạt động, chỉ cần thay thế dnf
bằng yum
.
sudo dnf check-update
Thông thường, ngay sau khi khởi tạo, cách trực tiếp nhất để xác minh các gói đã cài đặt là thông qua lệnh history
. Đầu ra hiển thị các lệnh gần đây do trình quản lý gói chạy, bao gồm các bản cập nhật và cài đặt.
sudo dnf history
ID | Command line | Date and time | Action(s) | Altered
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2 | -y install httpd mariadb-server php php-pear php-mysqlnd | 2023-08-09 12:12 | Install | 76
1 | -y upgrade | 2023-08-09 12:11 | I, U | 132
Với Yum/DNF, bạn cũng có thể kiểm tra cụ thể hơn các gói đã cài đặt bằng lệnh list installed
. Dưới đây là một ví dụ cũng chuyển kết quả đến grep
tìm kiếm văn bản, cho phép bạn thu hẹp đầu ra chỉ để khớp với tên gói. Ở đây, mỗi thuật ngữ tìm kiếm được phân tách bằng \|
. Điều này có thể hữu ích khi bạn chỉ muốn xác minh một phạm vi giới hạn các gói đã cài đặt.
sudo dnf list installed | grep 'httpd\|mariadb-server\|php'
httpd.x86_64 2.4.37-62.module_el8+657+88b2113f @appstream
httpd-filesystem.noarch 2.4.37-62.module_el8+657+88b2113f @appstream
httpd-tools.x86_64 2.4.37-62.module_el8+657+88b2113f @appstream
mariadb-server.x86_64 3:10.3.28-1.module_el8.3.0+757+d382997d @appstream
mariadb-server-utils.x86_64 3:10.3.28-1.module_el8.3.0+757+d382997d @appstream
php.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @appstream
php-cli.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @appstream
php-common.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @appstream
php-fpm.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @appstream
php-mysqlnd.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @appstream
php-pdo.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @appstream
php-pear.noarch 1:1.10.5-9.module_el8.2.0+313+b04d0a66 @appstream
php-process.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @appstream
php-xml.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @appstrea
Thông tin thêm
Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.
- Tài liệu Cloud-init – Tham chiếu mô-đun: Gói Cập nhật Nâng cấp Cài đặt
- Tài liệu Cloud-init – Ví dụ về Cloud-config: Cài đặt các gói tùy ý
Nguồn: https://www.linode.com/docs/guides/install-and-update-software-with-cloud-init/?tabs=almalinux-centos-fedora-rocky-linux%2Ccentos-8%2Cyumdnf