我试图通过packer提供Ubuntu20.04,并尝试使用packer的http服务器来提供云-init配置。在Ubuntu 18.04上,我可以通过使用d-i (debian-installer)预置IP来做到这一点,这似乎已经过时了,但我不知道如何使用Ubuntu 20。据我所知,Ubuntu 20.04可以使用dhcp,但我对分配静态ip感兴趣,这样VM就可以连接到http服务器了。我有什么办法做到这一点吗?或者这种做法可能是错误的?
这就是packer在引导过程中(在实际安装程序之前)运行的内容:
"/casper/vmlinuz/ ",
"initrd=/casper/initrd debug= ",
"autoinstall ds=nocloud-net;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ ",
"--- "
操作系统冻结在“主机和网络名称查找”目标(就在云-init加载/初始化之前)。这是云init的内容:
#cloud-config
autoinstall:
version: 1
locale: en_US
keyboard:
layout: fr
ssh:
install-server: true
allow-pw: true
packages:
- qemu-guest-agent
storage:
layout:
name: direct
swap:
size: 0
user-data:
package_upgrade: true
timezone: Europe/Paris
users:
- name: username
passwd: $6$xyz$1D0kz5pThgRWqxWw6JaZy.6FdkUCSRndc/PMtDr7hMK5mSw7ysChRdlbhkX83PBbNBpqXqef3sBkqGw3Rahs..
groups: [adm, cdrom, dip, plugdev, lxd, sudo]
lock-passwd: false
sudo: ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
ssh_authorized_keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJEXrziuUOCpWPvwOsGuF4K+aq1ufToGMi4ra/1omOZb
(密码散列是在互联网上公开发现的,请不要讨论:)
实际上,这与封隔器没有严格的关系。我只想知道如何确保Ubuntu20.04安装能够远程连接到web服务器以检索云-init配置。基本上是这样的:)
谢谢!我的设置是proxmox6.4-9、packer 1.7.4 (运行在apple m1上)和Ubuntu20.04.3
之后我所做的就是将它添加到内核cli中:
ip=10.88.88.159:10.88.88.126:255.255.255.0::eth0:off autoinstall ds=nocloud-net;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/
我使用的是eth0
,因为在转换为ens18
之前,这似乎是接口的名称。然而,安装程序不断抱怨说,它无法识别该设备。当然,我试过这两个名字都没有用。
发布于 2021-08-30 22:05:16
我能够通过在内核命令行中添加ip=
指令来解决这个问题。这就是boot_command
现在的样子:
"boot_command": [
" ",
"",
"ip={{ user `vm_ip` }}::{{ user `vm_gateway` }}:{{ user `vm_netmask` }}::::{{ user `vm_dns` }} ",
"autoinstall ds=nocloud-net;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ ",
"--- "
]
这是语法:
client-ip>:::::::
:::...
参考资料:https://git.kernel.org/pub/scm/libs/klibc/klibc.git/tree/usr/kinit/ipconfig/README.ipconfig
因此,我跳过了以下内容:服务器-ip(用于nfs -不需要),然后主机名,设备(这是网络接口-不需要它,它只会导致更多的混乱)和自动more,我在网关的网络掩码之后添加了dns0。例如:
ip=192.168.0.20::192.168.0.1:255.255.255.0::::8.8.8.8
因此,对于任何感兴趣的人,完整的命令应该是(虚拟IP):
initrd=/casper/initrd quiet ip=192.168.0.20::192.168.0.1:255.255.255.0::::8.8.8.8 autoinstall ds=nocloud-net;s=http://192.168.0.50:80 ---
---
很重要,因为以后编写的任何内容都会在proc (/proc/cmdline
)中持续存在,因此它意味着它将在引导时一遍又一遍地运行。您可能不希望使用自动安装和网络配置(无论如何,它将被自动复制到云init中,所以这种情况仍然存在)。
也许这会对某人有帮助。我还需要了解自己的很多事情:)
更新:对于Ubuntu 22.04
,我已经按如下方式更新了boot_command:
"boot_command": [
"",
"",
"",
"ip={{ user `vm_ip` }}::{{ user `vm_gateway` }}:{{ user `vm_netmask` }}::::{{ user `vm_dns` }} ",
"autoinstall 'ds=nocloud-net;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/' ",
""
]
主要的区别在于我将ds=nocloud...
放在引号中,并且直接编辑grub配置(所以这是一种稍微不同的方法。F6乍一看似乎不起作用,所以我根本就不再费心了)。
https://askubuntu.com/questions/1360674
复制相似问题