Điểm:1

Làm cách nào để tải xuống và cài đặt gói DPKG thông thường trong tập lệnh khởi tạo trên đám mây?

lá cờ in

Tôi đang quay vòng các thùng chứa nhẹ trên Máy chủ Linux bằng LXD/LXC.

Mục đích duy nhất của các vùng chứa này là lưu trữ "Ứng dụng lõi Dotnet & Dotnet"

Tôi đã sử dụng Ansible được một thời gian, nhưng gần đây tôi thấy rằng tôi thực sự có thể nhúng tập lệnh init vào dữ liệu người dùng của cấu hình vùng chứa và cloud-init sẽ thực thi tập lệnh đó.

Điều này thật tuyệt và cho phép tôi thiết lập một vùng chứa nhất định với chính xác các gói mà nó cần ngoại trừ một vấn đề.

Microsoft

(Tôi biết, tôi biết... hãy để dành những trò đùa và những lời nói tục tĩu :-D)

Không giống như hầu hết các nhà cung cấp gói bên thứ 3, MS đóng gói toàn bộ phần bổ sung nguồn gỡ lỗi và khóa GPG của họ trong một tệp gói dpkg độc lập, tệp gói này không được liệt kê qua các kho lưu trữ thông thường, do đó, về cơ bản, nó phải được "quên" tải xuống và sau đó cài đặt sử dụng lệnh dpkg thông thường.

Ngay bây giờ, đây là cách tôi đang làm mọi việc:

#cloud-config

# áp dụng các bản cập nhật bằng cách sử dụng apt
gói_update: đúng
gói_upgrade: đúng

# đặt tên máy chủ
tên máy chủ: ****
fqdn: ****
quản lý_etc_hosts: đúng

# Cài đặt kho phần mềm của bên thứ 3
# LƯU Ý: Điều này được thực hiện bằng cách sử dụng lệnh chạy do cách microsoft phân phối mọi thứ bằng dpkg thô
chạy cmd:
  - [wget, "https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb", -O, /root/packages-microsoft-prod.deb]
  - dpkg -i /root/packages-microsoft-prod.deb
  - rm /root/packages-microsoft-prod.deb
  - cập nhật thích hợp
  - apt-get cài đặt dotnet-sdk-3.1 -y
  - apt-get cài đặt dotnet-sdk-5.0 -y

# Cài đặt gói tiêu chuẩn
gói:
  - apt-transport-https
  - trăn3
  - python-là-python3
  - mc
  - gnupg
  - nginx
  - git

# Thêm người dùng
người dùng:
  - Tên: ****
    ssh-ủy quyền-key:
      - ssh-rsa **** rsa-key-BLAH
    sudo: ['****']
    nhóm: sudo
    vỏ: /bin/bash

tin nhắn cuối cùng:
  - "Hoàn tất khởi tạo vùng chứa."

Phần quan trọng là phần "runcmd".

Bởi vì tôi đang sử dụng "runcmd", phần này chạy SAU mọi thứ khác, kể cả phần cài đặt gói thông thường nơi tôi đặt tất cả các gói tiêu chuẩn mà tôi cần sử dụng.

Điều tôi lý tưởng nhất là THÍCH làm, là cài đặt tệp dpkg, sau đó chỉ cần thêm tên gói sẽ được cài đặt trong phần gói thông thường, chẳng hạn

# Một cái gì đó ở đây để tải xuống và cài đặt dpkg

# Cài đặt gói tiêu chuẩn
gói:
  - apt-transport-https
  - trăn3
  - python-là-python3
  - mc
  - gnupg
  - nginx
  - git
  - dotnet-sdk-3.1
  - dotnet-sdk-5.0

Tôi đã thử CHỈ đưa bit đó vào runcmd, nhưng vì nó chạy ở bước cuối cùng nên nó khiến phần gói bị lỗi do không cài đặt repo cho dotnet.

Tôi cũng đã thử sử dụng mô-đun "Apt" để cài đặt "microsoft-prod.list" vào "/etc/apt/sources.list.d" nhưng điều đó cũng không thành công vì MS không xuất bản khóa GPG của họ và bổ sung của nguồn gây ra lỗi khi cập nhật apt được thực hiện do đó là nguồn không đáng tin cậy.

Tôi đã tìm kiếm các tài liệu mô-đun cho cloud-init và tôi không thể tìm thấy bất kỳ thứ gì gợi ý rằng có thể tải xuống và thêm tệp dpkg thông thường, do đó tại sao tôi lại hỏi ở đây :-)

lá cờ in
Nếu bạn cần các gói này trong tất cả các vùng chứa của mình, bạn chỉ cần thêm các gói trực tiếp vào hình ảnh.
lá cờ in
Một tùy chọn khác có thể là thêm các gói Microsoft vào tệp .deb theo cách thủ công.
lá cờ in
@GeraldSchneider - tôi đã nghĩ về điều đó, nhưng thật không may, những thùng chứa này không phải lúc nào cũng giống nhau. Hiện tại tôi đang sử dụng ubuntu:20.04, nhưng ở đó được phối hợp thông qua giao diện web nơi các nhà phát triển sử dụng chúng có lựa chọn hình ảnh cơ sở trực tiếp từ Alpine đến Arch đến Ubuntu và mọi thứ ở giữa. Ngoài ra, vâng, tôi cũng sẽ thử điều đó, nhưng tôi không thể nhớ nổi làm cách nào để lấy nội dung của tệp deb ra :-)
lá cờ sa
Cách bạn đang làm có vẻ như là cách tốt nhất. Hiện tại không có mô-đun dành riêng cho việc cài đặt các bản sửa lỗi riêng lẻ.
lá cờ in
@falcojr Không có vấn đề gì, vui lòng thêm câu trả lời đó làm câu trả lời và tôi sẽ chấp nhận nó. Thật đáng để hỏi trong trường hợp ai đó biết điều gì đó mà tôi không biết :-) Tôi có thể phải quay lại sử dụng Ansible cho một số thứ.
Điểm:1
lá cờ sa

Cách bạn đang làm có vẻ như là cách tốt nhất. Hiện tại không có mô-đun dành riêng cho việc cài đặt các bản sửa lỗi riêng lẻ.

Điểm:1
lá cờ cn

Microsoft công bố thông tin về kho linux của mình đây, điều này bao gồm cách lấy khóa gpg của họ

Cấu hình sau sẽ thêm kho lưu trữ microsoft cho Ubuntu 20.04

đúng cách:
    bảo tồn_source_list: đúng
    nguồn:
        Microsoft:
            máy chủ khóa: https://packages.Microsoft.com/keys/Microsoft.asc
            mã khóa: BC52 8686 B50D 79E3 39D3 721C EB3E 94AD BE12 29CF
            nguồn: 'deb https://packages.Microsoft.com/ubfox/20.04/prod tiêu điểm chính'tiêu điểm chính'
lá cờ in
Đẹp .... chắc chắn sẽ phải thử cái này :-)
Mart10 avatar
lá cờ cn
@shawty một điều cần lưu ý là trong tập lệnh gốc, bạn đang sử dụng "https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb" làm liên kết kho lưu trữ gói, nhưng khi tôi viết cái này trả lời rằng liên kết không hoạt động đối với tôi, tôi nghĩ nó không còn được dùng nữa. Cái mới là cái được cung cấp bởi tài liệu chính thức mà tôi liên kết đến
lá cờ in
Điều đó sẽ không làm tôi ngạc nhiên.... Tôi đã phải cập nhật rất nhiều bài đăng trên blog mà tôi đã thực hiện trên jenkins trong nhiều năm, vì lý do chính xác này.... khóa GPG liên tục thay đổi.. :-(

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.