ฉันกำลังหมุนคอนเทนเนอร์น้ำหนักเบาบนโฮสต์ Linux โดยใช้ LXD/LXC
จุดประสงค์เดียวของคอนเทนเนอร์เหล่านี้คือการโฮสต์ "แอพหลักของ Dotnet และ Dotnet"
ฉันใช้ Ansible มาระยะหนึ่งแล้ว แต่เมื่อเร็ว ๆ นี้ฉันพบว่าฉันสามารถฝังสคริปต์ init ลงในข้อมูลผู้ใช้ของการกำหนดค่าคอนเทนเนอร์ได้ และ cloud-init จะดำเนินการดังกล่าว
มันยอดเยี่ยมมากและช่วยให้ฉันตั้งค่าคอนเทนเนอร์ที่กำหนดด้วยแพ็คเกจที่ต้องการยกเว้นปัญหาเดียว
ไมโครซอฟท์
(ฉันรู้ ฉันรู้... บันทึกเรื่องตลกและคำสบถ :-D)
ซึ่งแตกต่างจากผู้ให้บริการแพ็คเกจบุคคลที่สามส่วนใหญ่ MS ทำแพ็คเกจการเพิ่มแหล่งที่มาของ deb และคีย์ GPG ทั้งหมดของพวกเขาในไฟล์แพ็คเกจ dpkg แบบสแตนด์อโลน ไฟล์แพ็คเกจนี้ไม่ได้อยู่ในรายการผ่าน repos ปกติ ดังนั้นจึงต้องดาวน์โหลด "wget" และติดตั้ง โดยใช้คำสั่ง dpkg ปกติ
ตอนนี้ นี่คือวิธีที่ฉันทำสิ่งต่างๆ:
#cloud-config
# ใช้การอัปเดตโดยใช้ apt
package_update: จริง
package_upgrade: จริง
#ตั้งชื่อโฮสต์
ชื่อโฮสต์: ****
Fqdn: ****
Manage_etc_hosts: จริง
# ติดตั้ง repos ซอฟต์แวร์บุคคลที่สาม
# หมายเหตุ: สิ่งนี้ทำได้โดยใช้คำสั่ง run เนื่องจากวิธีที่ Microsoft แจกจ่ายสิ่งต่าง ๆ โดยใช้ dpkg แบบดิบ
เรียกใช้ 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
- ปรับปรุงฉลาด
- apt-get ติดตั้ง dotnet-sdk-3.1 -y
- apt-get ติดตั้ง dotnet-sdk-5.0 -y
# ติดตั้งแพ็คเกจมาตรฐาน
แพ็คเกจ:
- apt-ขนส่ง-https
- หลาม 3
- หลามเป็นงูหลาม3
- มค
- งุบงิบ
- จิงซ์
- คอมไพล์
# เพิ่มผู้ใช้
ผู้ใช้:
- ชื่อ: ****
ssh-อนุญาตคีย์:
- ssh-rsa **** rsa-key-BLAH
sudo: ['****']
กลุ่ม: sudo
เชลล์: /bin/bash
ข้อความสุดท้าย:
- "การเริ่มต้นคอนเทนเนอร์เสร็จสมบูรณ์"
ส่วนที่สำคัญคือส่วน "runcmd"
เนื่องจากฉันใช้ "runcmd" สิ่งนี้จึงทำงานหลังจากทุกอย่างรวมถึงส่วนการติดตั้งแพ็คเกจปกติที่ฉันใส่ในแพ็คเกจมาตรฐานทั้งหมดที่ฉันต้องใช้
สิ่งที่ฉันต้องการจะทำคือติดตั้งไฟล์ dpkg จากนั้นเพิ่มชื่อแพ็คเกจที่จะติดตั้งในส่วนแพ็คเกจปกติเช่น
# ดาวน์โหลดและติดตั้ง dpkg ที่นี่
# ติดตั้งแพ็คเกจมาตรฐาน
แพ็คเกจ:
- apt-ขนส่ง-https
- หลาม 3
- หลามเป็นงูหลาม3
- มค
- งุบงิบ
- จิงซ์
- คอมไพล์
- ดอทเน็ต-sdk-3.1
- ดอทเน็ต-sdk-5.0
ฉันลองใส่บิตนั้นใน runcmd เท่านั้น แต่เนื่องจากมันทำงานเป็นขั้นตอนสุดท้าย มันทำให้ส่วนของแพ็คเกจล้มเหลว เนื่องจากไม่ได้ติดตั้ง repo สำหรับ dotnet
ฉันยังลองใช้โมดูล "Apt" เพื่อติดตั้ง "microsoft-prod.list" ใน "/etc/apt/sources.list.d" แต่นั่นก็ล้มเหลวเช่นกัน เนื่องจาก MS ไม่เผยแพร่คีย์ GPG และนอกจากนี้ ของแหล่งที่มาทำให้เกิดความล้มเหลวเมื่อทำการอัปเดต apt เนื่องจากเป็นแหล่งที่ไม่น่าเชื่อถือ
ฉันได้ขัดถูเอกสารโมดูลสำหรับ cloud-init แล้ว และฉันไม่พบสิ่งใดที่ดูเหมือนว่าจะแนะนำให้ดาวน์โหลดและเพิ่มไฟล์ dpkg ปกติ ด้วยเหตุนี้ฉันจึงถามที่นี่ :-)