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_updateTù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_upgradenâ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 packagestù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_requiredchọ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 .

  1. APT

Trong cloud-config, apttù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 sourcestùy chọn trong một aptkhối. sourcesTù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 sourcechuỗ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 keytù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_repostù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_reposchọ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 ( namebaseurl, và enabled) dành riêng cho cloud-init yum_repos. Tuy nhiên, yum_reposcũ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 repolistlệ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.logvớ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 listlệ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 --upgradablechọ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 upgradevà 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.
...

listTùy chọn của lệnh cung --installedcấ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-installedchọ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-updatelệ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 greptì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.

Nguồn: https://www.linode.com/docs/guides/install-and-update-software-with-cloud-init/?tabs=almalinux-centos-fedora-rocky-linux%2Ccentos-8%2Cyumdnf