Score:0

การใช้ Packer เพื่อปรับใช้ Ubuntu 20.04 กับ Proxmox

ธง us

ปัญหา

TLDR: ฉันได้ทำเช่นนี้กับ AutoInstall ส่วนใหญ่แล้ว (ฉันคิดว่า?) แต่มันยังคงแสดงการติดตั้ง GUI หลังจากที่ผ่าน AutoInstall แล้ว กำลังมองหาข้อมูลว่าทำไมมันถึงแสดง GUI ขึ้นมา /TLDR

เวอร์ชันที่ยาวขึ้น: ฉันกำลังพยายามหาวิธีปรับใช้ Ubuntu (และในที่สุด distros อื่น ๆ ) กับ Proxmox โดยใช้ Hashicorp Packer ฉันมีการตั้งค่าและใช้งาน configs ส่วนใหญ่แล้ว... "ปรับใช้" สำเร็จแล้ว แต่ไม่สามารถตั้งค่าเริ่มต้นให้เสร็จสิ้นได้ มันยังคงดำเนินการติดตั้งอัตโนมัติ แต่จากนั้นก็ยังนำการติดตั้ง GUI ขึ้นมา จากการก้าวผ่าน GUI ด้วยตนเอง หลังจากเสร็จสิ้นส่วนการติดตั้งอัตโนมัติแล้ว ดูเหมือนว่าทุกอย่างจะถูกกรอกเรียบร้อยแล้ว (ลบส่วนข้อมูลประจำตัวผู้ใช้ เช่น ชื่อเต็ม/ชื่อผู้ใช้/อื่นๆ) ดูเหมือนว่าไม่จำเป็นต้องหา IP addr ด้วยซ้ำ เช่น เมื่อคุณผ่านแค่ GUI ฉันคิดว่า DHCP ทำงานได้ดีใช่ไหม

ฉันได้ลองดูคำถามที่คล้ายกันสองสามข้อแล้ว แต่วิธีแก้ปัญหาของพวกเขายังไม่ได้ผลสำหรับฉัน (ยัง)

ทฤษฎี

ฉันมีทฤษฎีสองสามทฤษฎี แต่ดูเหมือนว่าไม่มีทฤษฎีใดที่ออกมาถูกต้องเลย หรือฉันไม่แน่ใจว่าจะทดสอบอย่างไร

  1. ฉันลืมบางอย่างใน ข้อมูลผู้ใช้ (yaml) และพยายามดึง GUI ขึ้นมาเพราะเหตุนี้
  2. ฉันไม่มีพารามิเตอร์การกำหนดค่าบางอย่างในไฟล์ .pkr.hcl ไฟล์ที่จำเป็นสำหรับ proxmox เพื่อตั้งค่า vm อย่างถูกต้องหรือไม่
  3. มีบางอย่างแปลก ๆ กับเวอร์ชัน Ubuntu ที่ฉันใช้ บางทีฉันอาจต้องการ ISO อื่น แต่เท่าที่อ่านมาบอกว่า. Cloud-init คุณสมบัติเพียงแค่แลกเปลี่ยนมรดก preseed.cfg สำหรับ ข้อมูลผู้ใช้ (yaml) ดังนั้นฉันจึงสงสัยเกี่ยวกับทฤษฎีนี้
  4. ฉันต้องตั้งค่าคุณลักษณะเคอร์เนลบางอย่างหรือไม่ จริง ๆ แล้วไม่แน่ใจว่าจะเริ่มตรงไหนดี ฉันก็ค่อนข้างแน่ใจว่าถ้าเป็นกรณีนี้ ฉันคงได้เห็นบางอย่างเกี่ยวกับมันที่อื่น แต่เดี๋ยวก่อน บางทีฉันอาจจะดูผิดที่รึเปล่า?
  5. เดอะ ข้อมูลผู้ใช้ ไม่ได้โหลดไฟล์ลงใน Ubuntu อย่างถูกต้องหรือไม่

ผลลัพธ์ที่คาดหวัง

  1. หากคุณรู้จักซอสวิเศษโปรดช่วยฉันด้วย :)
  2. หากคุณรู้วิธีทำให้ Ubuntu 20.04 เปลี่ยนเส้นทางบันทึกบางส่วนระหว่างการติดตั้ง เพื่อให้ฉันสามารถมองลึกลงไปได้ นั่นจะดีมาก! เหมือนกันสำหรับการบันทึก packer ที่ดีขึ้น (นอกเหนือจาก -debugฉันได้ลองแล้ว) ฉันพยายามแล้ว /var/log/ตัวติดตั้งแต่ฉันไม่คิดว่าฉันมีความเข้าใจที่ชัดเจนเกี่ยวกับสิ่งที่เกิดขึ้น แต่ฉันไม่เห็นความล้มเหลวใดๆ นอกจากข้อผิดพลาดของคีย์ SSH และฉันไม่เห็นข้อบ่งชี้ใดๆ ข้อมูลผู้ใช้ ดาวน์โหลดหรือดาวน์โหลดไม่สำเร็จ
  3. หากคุณมีความคิดเห็นเกี่ยวกับวิธีทดสอบทฤษฎีบางอย่างของฉัน หรือทฤษฎีอื่นๆ ฉันชอบที่จะรับฟังพวกเขา!
  4. หากคุณเห็นว่าฉันทำอะไรผิดในไฟล์ปรับแต่งด้านล่าง โปรดชี้ให้เห็น! ฉันพยายามทำสิ่งนี้ใน SILO มา 2-3 วันแล้ว และกำลังเผชิญกับกำแพง ฉันไม่รู้ว่าจะเอาชนะได้อย่างไร

การอัปเดต (กำลังดำเนินการ)

  1. พบ เมล็ดจาก http://192.168.0.144:80/user-data ไม่รองรับโดย DataSourceNoCloud [seed=None][dsmode=net] ใน /var/log/cloud-init.log ดูว่าทำไมมันถึงกลับมา คำแนะนำใด ๆ ที่จะได้รับการชื่นชม :)
  2. โอเค ฉันทราบแล้วว่าทำไมข้อผิดพลาดข้างต้นจึงเกิดขึ้น ดูเหมือนว่าข้อผิดพลาดจะอยู่ในรูปแบบ YAML ไม่ถูกต้อง ฉันเพิ่งทิ้งไฟล์ลงในฟอร์แมตเตอร์ YAML จากนั้นคัดลอกและวางกลับเข้าไปในไฟล์เป้าหมายของฉัน
  3. ตอนนี้ข้อผิดพลาดคือไฟล์ YAML ที่โหลดว่างเปล่า /var/lib/cloud/seed/nocloud/user-dataอีกครั้งฉันขอขอบคุณคำแนะนำใด ๆ :)

คำใบ้

หากคุณเจ๋งพอที่จะลองจำลองสิ่งนี้ หรือหากคุณพบสิ่งนี้หลังจากที่ (หวังว่า) ได้รับคำตอบแล้ว ให้ทำให้ชีวิตของคุณง่ายขึ้นโดยใช้ ตัวอย่าง auto.pkrvars.hcl ไฟล์.

รุ่น

พรอกซ์ม็อกซ์: Proxmox VE 7.1-4
หน้าต่าง: วินโดวส์ 10 โปร : 10.0.19043.0
แพ็คเกอร์: 1.7.10

Example.pkr.hcl

ผู้บรรจุหีบห่อ {
  ปลั๊กอินที่จำเป็น {
    พร็อกม็อกซ์ = {
      รุ่น = " >= 1.0.1"
      ที่มา = "github.com/hashicorp/proxmox"
    }
  }
}

แหล่งที่มา "proxmox-iso" "proxmox-ubuntu-20" {
  proxmox_url = "https://proxmox.lan:8006/api2/json"
  vm_name = "แพ็คเกอร์อูบุนตู-20"
  iso_url = "http://iso.repo.lan/ubuntu-20.04.3-live-server-amd64.iso"
  iso_checksum = "f8e3086f3cea0fb3fefb29937ab5ed9d19e767079633960ccb50e76153effc98"
  ชื่อผู้ใช้ = "${var.pm_user}"
  รหัสผ่าน = "${var.pm_pass}"
  โทเค็น = "${var.pm_token}"
  โหนด = "proxmox"
  iso_storage_pool = "ในเครื่อง"

  ssh_username = "${var.ssh_user}"
  ssh_password = "${var.ssh_pass}"
  ssh_timeout = "20m"
  ssh_pty = จริง
  ssh_handshake_attempts = 20

  boot_wait = "5 วินาที"
  http_directory = "http" # เริ่มเซิร์ฟเวอร์ http ในเครื่อง ให้บริการไฟล์ Preseed
  boot_command = [
    "<esc><รอ><esc><รอ><f6><รอ><esc><รอ>",
    "<bs><bs><bs><bs><bs>",
    "ip=${cidrhost("192.168.0.0/24", 9)}::${cidrhost("192.168.0.0/24", 1)}:${cidrnetmask("192.168.0.0/24")}: :::${cidrhost("192.168.0.0/24", 1)} ",
    "ติดตั้งอัตโนมัติ ds=nocloud-net;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/",
    "---<ป้อน>"
  ]

  ไม่ปลอดภัย_skip_tls_verify = จริง

  template_name = "packer-ubuntu-20"
  template_description = "packer สร้าง ubuntu-20.04.3-server-amd64"
  unmount_iso = จริง

  พูล = "แพ็คเกอร์"
  หน่วยความจำ = 4096
  แกน = 1
  ซ็อกเก็ต = 1
  ระบบปฏิบัติการ = "l26"
  qemu_agent = จริง
  cloud_init = จริง
  #scsi_controller = "virtio-scsi-pci"
  ดิสก์ {
    พิมพ์ = "scsi"
    disk_size = "30G"
    storage_pool = "local-lvm"
    storage_pool_type = "lvm"
    รูปแบบ = "ดิบ"
  }
  อะแดปเตอร์เครือข่าย {
    บริดจ์ = "vmbr0"
    รุ่น = "virtio"
    ไฟร์วอลล์ = จริง
    #vlan_tag = 1
  }
}

สร้าง {
  แหล่งที่มา = ["source.proxmox-iso.proxmox-ubuntu-20"]
  ผู้จัดเตรียม "เชลล์" {
    อินไลน์ = [
      "ในขณะที่ [ ! -f /var/lib/cloud/instance/boot-finished ]; ทำ echo 'Waiting for cloud-init...'; sleep 1; done",
      "ล/"
    ]
  }
}

vars.pkr.hcl

ตัวแปร "pm_user" {
  พิมพ์ = สตริง
  คำอธิบาย = "ชื่อผู้ใช้ Proxmox"
  ค่าเริ่มต้น = "packer@pam!<api-tag>"
}
ตัวแปร "pm_pass" {
  พิมพ์ = สตริง
  คำอธิบาย = "รหัสผ่านผู้ใช้ Proxmox"
  ค่าเริ่มต้น = "ผู้บรรจุหีบห่อ"
}
ตัวแปร "pm_token" {
  พิมพ์ = สตริง
  คำอธิบาย = "โทเค็น Proxmox API"
}
ตัวแปร "ssh_user" {
  พิมพ์ = สตริง
  คำอธิบาย = "ผู้ใช้ SSH"
  ค่าเริ่มต้น = "ผู้บรรจุหีบห่อ"
}
ตัวแปร "ssh_pass" {
  พิมพ์ = สตริง
  คำอธิบาย = "รหัสผ่าน SSH"
  ค่าเริ่มต้น = "ผู้บรรจุหีบห่อ"
}
ตัวแปร "vm_name" {
  พิมพ์ = สตริง
  คำอธิบาย = "ชื่อ VM"
  ค่าเริ่มต้น = "packer_hostname"
}

http/ข้อมูลผู้ใช้

ติดตั้งอัตโนมัติ:
  รุ่น: 1
  ภาษา: en_US.UTF-8
  แป้นพิมพ์:
    รูปแบบ: th
    ตัวแปร: เรา
  ตัวตน:
    ชื่อโฮสต์: packer-ubuntu-20
    รหัสผ่าน: "$6$exDY1mhS4KUYCE/2$zmn9ToZwTKLhCw.b4/b.ZRTIZM30JZ4QrOQ2aOXJ8yk96xpcCof0kxKwuX1kqLG/ygbJ1f8wxED22bTL4F46P0" #ubuntu
    ชื่อผู้ใช้: อูบุนตู
    ชื่อจริง: อูบุนตู
  โปรแกรมติดตั้งรีเฟรช: 
    อัปเดต: เท็จ
  ssh:
    ติดตั้งเซิร์ฟเวอร์: ใช่
    อนุญาต pw: ใช่
  แพ็คเกจ:
    - qemu-แขก-ตัวแทน
  พื้นที่จัดเก็บ:
    รูปแบบ:
      ชื่อ: โดยตรง
    แลกเปลี่ยน:
      ขนาด: 0

แหล่งที่มา

https://www.aeralls.eu/posts/ubuntu-server-2004-image-packer-subiquity-for-proxmox/
https://ubuntu.com/server/docs/install/autoinstall-reference
https://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html
https://cloudinit.readthedocs.io/en/latest/topics/modules.html#write-files
https://cloudalbania.com/posts/2022-01-homelab-with-proxmox-and-packer/

Score:0
ธง us

ตอบ

โชคดีที่ฉันกำลังค้นหาไปในทิศทางที่ผิดพลาดโดยสิ้นเชิง SMH
ประเด็นคือไม่ได้อ่าน Cloud-init คำถามที่พบบ่อย อย่างใกล้ชิดนั่นเอง ทั้งหมดที่ฉันต้องทำคือเพิ่ม #cloud-config เป็นบรรทัดแรกในของฉัน ข้อมูลผู้ใช้ ไฟล์.

การกำหนดค่าด้านล่างจะใช้งานได้สำหรับทุกคนที่สนใจ

ฉันใส่เอกสารทั้งหมดที่นี่ อย่าลังเลที่จะอ่านหากสนใจ https://github.com/aRustyDev/packer

Example.pkr.hcl

ผู้บรรจุหีบห่อ {
  ปลั๊กอินที่จำเป็น {
    พร็อกม็อกซ์ = {
      รุ่น = " >= 1.0.1"
      ที่มา = "github.com/hashicorp/proxmox"
    }
  }
}

แหล่งที่มา "proxmox-iso" "proxmox-ubuntu-20" {
  proxmox_url = "https://proxmox.lan:8006/api2/json"
  vm_name = "แพ็คเกอร์อูบุนตู-20"
  iso_url = "http://iso.repo.lan/ubuntu-20.04.3-live-server-amd64.iso"
  iso_checksum = "f8e3086f3cea0fb3fefb29937ab5ed9d19e767079633960ccb50e76153effc98"
  ชื่อผู้ใช้ = "${var.pm_user}"
  รหัสผ่าน = "${var.pm_pass}"
  โทเค็น = "${var.pm_token}"
  โหนด = "proxmox"
  iso_storage_pool = "ในเครื่อง"

  ssh_username = "${var.ssh_user}"
  ssh_password = "${var.ssh_pass}"
  ssh_timeout = "20m"
  ssh_pty = จริง
  ssh_handshake_attempts = 20

  boot_wait = "5 วินาที"
  http_directory = "http" # เริ่มเซิร์ฟเวอร์ http ในเครื่อง ให้บริการไฟล์ Preseed
  boot_command = [
    "<esc><รอ><esc><รอ><f6><รอ><esc><รอ>",
    "<bs><bs><bs><bs><bs>",
    "ip=${cidrhost("192.168.0.0/24", 9)}::${cidrhost("192.168.0.0/24", 1)}:${cidrnetmask("192.168.0.0/24")}: :::${cidrhost("192.168.0.0/24", 1)} ",
    " ติดตั้งอัตโนมัติ ds=nocloud-net;s=http://httpd.proxmox.local:80/preseed/ubuntu-20/ ",
    "---<ป้อน>"
  ]

  ไม่ปลอดภัย_skip_tls_verify = จริง

  template_name = "packer-ubuntu-20"
  template_description = "packer สร้าง ubuntu-20.04.3-server-amd64"
  unmount_iso = จริง

  พูล = "แพ็คเกอร์"
  หน่วยความจำ = 4096
  แกน = 1
  ซ็อกเก็ต = 1
  ระบบปฏิบัติการ = "l26"
  qemu_agent = จริง
  ดิสก์ {
    พิมพ์ = "scsi"
    disk_size = "30G"
    storage_pool = "local-lvm"
    storage_pool_type = "lvm"
    รูปแบบ = "ดิบ"
  }
  อะแดปเตอร์เครือข่าย {
    บริดจ์ = "vmbr0"
    รุ่น = "virtio"
    ไฟร์วอลล์ = จริง
  }
}

สร้าง {
  แหล่งที่มา = ["source.proxmox-iso.proxmox-ubuntu-20"]
  ผู้จัดเตรียม "เชลล์" {
    อินไลน์ = [
      "ในขณะที่ [ ! -f /var/lib/cloud/instance/boot-finished ]; ทำ echo 'Waiting for cloud-init...'; sleep 1; done",
      "ล/"
    ]
  }
}

vars.pkr.hcl

ตัวแปร "pm_user" {
  พิมพ์ = สตริง
  คำอธิบาย = "ชื่อผู้ใช้ Proxmox"
  ค่าเริ่มต้น = "packer@pam!<api-tag>"
}
ตัวแปร "pm_pass" {
  พิมพ์ = สตริง
  คำอธิบาย = "รหัสผ่านผู้ใช้ Proxmox"
  ค่าเริ่มต้น = "ผู้บรรจุหีบห่อ"
}
ตัวแปร "pm_token" {
  พิมพ์ = สตริง
  คำอธิบาย = "โทเค็น Proxmox API"
}
ตัวแปร "ssh_user" {
  พิมพ์ = สตริง
  คำอธิบาย = "ผู้ใช้ SSH"
  ค่าเริ่มต้น = "ผู้บรรจุหีบห่อ"
}
ตัวแปร "ssh_pass" {
  พิมพ์ = สตริง
  คำอธิบาย = "รหัสผ่าน SSH"
  ค่าเริ่มต้น = "ผู้บรรจุหีบห่อ"
}
ตัวแปร "vm_name" {
  พิมพ์ = สตริง
  คำอธิบาย = "ชื่อ VM"
  ค่าเริ่มต้น = "packer_hostname"
}

http/ข้อมูลผู้ใช้

#cloud-config
ติดตั้งอัตโนมัติ:
  รุ่น: 1
  ภาษา: en_US.UTF-8
  แป้นพิมพ์:
    รูปแบบ: th
    ตัวแปร: เรา
  ตัวตน:
    ชื่อโฮสต์: packer-ubuntu-20
    รหัสผ่าน: "$6$exDY1mhS4KUYCE/2$zmn9ToZwTKLhCw.b4/b.ZRTIZM30JZ4QrOQ2aOXJ8yk96xpcCof0kxKwuX1kqLG/ygbJ1f8wxED22bTL4F46P0" #ubuntu
    ชื่อผู้ใช้: อูบุนตู
    ชื่อจริง: อูบุนตู
  โปรแกรมติดตั้งรีเฟรช: 
    อัปเดต: เท็จ
  ssh:
    ติดตั้งเซิร์ฟเวอร์: ใช่
    อนุญาต pw: ใช่
  แพ็คเกจ:
    - qemu-แขก-ตัวแทน
  พื้นที่จัดเก็บ:
    รูปแบบ:
      ชื่อ: โดยตรง
    แลกเปลี่ยน:
      ขนาด: 0
David avatar
cn flag
คำตอบไม่รวมโฆษณา โปรดลบออก

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา