我来自 debian-installer,现在尝试使用 Ubuntu 20.04 设置一个新服务器和虚拟机的通用安装环境,并且发现 debian-installer (di) 已被弃用并且不再受支持,我已经开始处理自动安装和 cloud-init,但仍然遇到一些困难。
安装服务器并从 /var/log/installer 复制安装文件并稍加调整后,我可以建立一个非常原始的系统,但仍然缺少以下内容,我可以轻松地用 di 完成。
所以我到目前为止所做的是:使用 Apache2 设置 tftp,以便我可以提供 PXE 映像和 cloud-init 用户数据。
cat /srv/tftp/pxelinux.cfg/default
DEFAULT vesamenu.c32
TIMEOUT 100
ONTIMEOUT local
PROMPT 0
NOESCAPE 1
LABEL local
MENU DEFAULT
MENU LABEL boot-from-local-disk
LOCALBOOT 0
LABEL focal-live-install
MENU label Install focal
KERNEL vmlinuz
INITRD initrd
APPEND root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://172.16.16.41/tftp/ubuntu-20.04.1-live-server-amd64.iso
LABEL focal-live-install-autoinstall
MENU label Install focal - autoinstall
KERNEL vmlinuz
INITRD initrd
APPEND root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://172.16.16.41/tftp/ubuntu-20.04.1-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://172.16.16.41/tftp/cloud-init/
cat /etc/apache2/conf-enabled/tftp.conf
<Directory /srv/tftp>
Options +FollowSymLinks +Indexes
Require all granted
</Directory>
Alias /tftp /srv/tftp
cat /srv/tftp/cloud-init/user-data
#cloud-config
autoinstall:
apt:
geoip: true
preserve_sources_list: false
primary:
- arches: [amd64, i386]
uri: http://de.archive.ubuntu.com/ubuntu
- arches: [default]
uri: http://ports.ubuntu.com/ubuntu-ports
identity: {hostname: localhost, password: <>,
realname: ka_de_ae, username: ka_de_ae}
keyboard: {layout: de, toggle: null, variant: ''}
locale: en_GB
network:
ethernets:
enp3s0: {dhcp4: true}
version: 2
ssh:
allow-pw: true
authorized-keys: []
install-server: true
user-data:
disable_root: false
chpasswd:
root:<>
storage:
config:
- {ptable: gpt, path: /dev/sda, wipe: superblock-recursive, preserve: false, name: '', grub_device: true, type: disk, id: disk-sda}
- {device: disk-sda, size: 1048576, flag: bios_grub, number: 1, preserve: false,
grub_device: false, type: partition, id: partition-sda1}
- {device: disk-sda, size: 2147483648, wipe: superblock, flag: linux, number: 2,
preserve: false, grub_device: false, type: partition, id: partition-sda2}
- {fstype: ext4, volume: partition-sda2, preserve: false, type: format, id: format-0}
- {device: disk-sda, size: -1, wipe: superblock, flag: linux, number: 3,
preserve: false, grub_device: false, type: partition, id: partition-sda3}
- name: vg0
devices: [partition-sda3]
preserve: false
type: lvm_volgroup
id: lvm_volgroup-0
- {name: root, volgroup: lvm_volgroup-0, size: 5368709120B, preserve: false, type: lvm_partition,
id: lvm_partition-0}
- {fstype: ext4, volume: lvm_partition-0, preserve: false, type: format, id: format-1}
- {device: format-1, path: /, type: mount, id: mount-1}
- {name: swap, volgroup: lvm_volgroup-0, size: 4294967296B, preserve: false, type: lvm_partition,
id: lvm_partition-1}
- {fstype: swap, volume: lvm_partition-1, preserve: false, type: format, id: format-2}
- {device: format-2, path: '', type: mount, id: mount-2}
- {name: tmp, volgroup: lvm_volgroup-0, size: 4294967296B, preserve: false, type: lvm_partition,
id: lvm_partition-2}
- {fstype: ext4, volume: lvm_partition-2, preserve: false, type: format, id: format-3}
- {device: format-3, path: /tmp, type: mount, id: mount-3}
- {name: usr, volgroup: lvm_volgroup-0, size: 16106127360B, preserve: false, type: lvm_partition,
id: lvm_partition-3}
- {fstype: ext4, volume: lvm_partition-3, preserve: false, type: format, id: format-4}
- {device: format-4, path: /usr, type: mount, id: mount-4}
- {name: var, volgroup: lvm_volgroup-0, size: 10737418240B, preserve: false, type: lvm_partition,
id: lvm_partition-4}
- {fstype: ext4, volume: lvm_partition-4, preserve: false, type: format, id: format-5}
- {device: format-5, path: /var, type: mount, id: mount-5}
- {name: varlog, volgroup: lvm_volgroup-0, size: 4294967296B, preserve: false,
type: lvm_partition, id: lvm_partition-5}
- {fstype: ext4, volume: lvm_partition-5, preserve: false, type: format, id: format-6}
- {device: format-6, path: /var/log, type: mount, id: mount-6}
- {device: format-0, path: /boot, type: mount, id: mount-0}
swap: {swap: 0}
version: 1
users:
- name: ka_de_ae
shell: /bin/bash
ssh-authorized-keys:
- ssh-rsa <key + comment>
- ssh-rsa <key + comment>
- ssh-rsa <key + comment>
- ssh-rsa <key + comment>
runcmd:
- sed -i -e '/^#PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
- restart ssh
这已经比最初的简单安装领先了一些,但还有很多事情没有进展。
- 主机名:我不想在这里输入固定的主机名,我想从 DNS 中填写,就像 di 所做的那样。但如果我将这里留空,安装程序就会停止,我必须手动执行此操作,而这并不是我想要的。使用“localhost”(如互联网上某些人建议的那样)只会将其设置为 localhost,而不是使用 DNS 服务器中的 DNS 名称。如何实现这一点?
- 将 ssh 公钥放入 authorized_keyfile 不起作用。我尝试了几种方法,但仍然没有找到任何附加公钥的用户。
- 安装后让 root 用户直接使用 authorized_keys。这样很好,但只要我们有一个具有 root 权限的用户,我们就可以从那里使用 Ansible。但让 root 工作还是更好。
- 初始安装后,除了“身份”中的用户之外的其他用户对我来说仍然不起作用。
- 网络接口:我正在测试的服务器有 4 个设备,其中只有一个当前有链接(enp3s0),但这并不总是接口名称,我仍然缺乏一种方法来告诉服务器“选择第一个有链接的设备,尝试 DHCP,当它工作正常时,使用它并暂时忽略所有其他接口”。这里有点缺少 eth0...
- 最好将其放入自己的线程中,但万一它很容易回答:我们还希望服务器拥有自己的镜像,因此我们只需将所有内容下载到中央镜像一次,而不是每个服务器都自行下载。但是使用镜像(只是简单的 apt-mirror)不适用于 cloud-init,因为似乎缺少一些所需的文件夹。
我想,从我读到的内容来看,其中大多数事情应该是相当可行的,但是我确实错过了一些正确做法,因此任何帮助我都会感激不尽。
答案1
对于某些点,我同时找到了正确的语法。
- hostname:仍然无法正常工作。为此我需要一些建议
- ssh 公钥:至少对于安装的一个用户,我现在有可用的 ssh 公钥。我不确定为什么之前尝试的确切语法现在有效,也许这是第一次使用正确的组合(ssh -> 授权密钥,没有用户部分)。请参阅下面的配置
- root:我们放弃了拥有一个可以工作的 root 用户,并决定拥有一个具有管理员权限的用户就足够了,并从这里开始使用 Ansible。
- 其他用户:没有再尝试该部分,因为一个用户就足够了。
- 网络接口:只需在配置中不输入任何内容,即可完成“使第一个工作”的部分。
- 自己的镜像:还有待完成,不确定我们这里遗漏了什么。要清楚的是,如何在 cloud-init 中配置它是已知的,但如何使用自己的镜像来实现这一点,却未知。
对于 HDD 的 LVM 配置,我建议您从头开始手动安装一台服务器,并根据您的需要配置磁盘,然后获取安装日志以确保磁盘部分正确。经过几天的反复试验,我终于做到了这一点,结果发现,您无法按自己的意愿命名分区,最好使用系统会给出的数字,而不是其他任何东西。执行此操作时,将所有保留部分切换为 false,将最后一个分区的大小切换为 -1 以使用整个磁盘空间。
当前有效的用户数据:
#cloud-config
autoinstall:
package_upgrade: true
packages:
- zsh
- tmux
- nmap
- curl
- wget
- git
- htop
- iperf
- fail2ban
- vim
- net-tools
apt:
geoip: true
preserve_sources_list: false
primary:
- arches: [amd64, i386]
uri: http://de.archive.ubuntu.com/ubuntu
- arches: [default]
uri: http://ports.ubuntu.com/ubuntu-ports
identity: {hostname: localhost, password: <password>,
username: ansible, realname: ansible}
keyboard: {layout: de, toggle: null, variant: ''}
locale: en_GB
ssh:
allow-pw: true
install-server: true
authorized-keys:
- ssh-rsa ...
- ssh-rsa ...
user-data:
disable_root: true
storage:
config:
- {ptable: gpt, path: /dev/sda, wipe: superblock-recursive, preserve: false, name: '', grub_device: true, type: disk, id: disk-sda}
- {device: disk-sda, size: 1048576, flag: bios_grub, number: 1, preserve: false,
grub_device: false, type: partition, id: partition-sda1}
- {device: disk-sda, size: 2147483648, wipe: superblock, flag: linux, number: 2,
preserve: false, grub_device: false, type: partition, id: partition-sda2}
- {fstype: ext4, volume: partition-sda2, preserve: false, type: format, id: format-0}
- {device: disk-sda, size: -1, wipe: superblock, flag: linux, number: 3,
preserve: false, grub_device: false, type: partition, id: partition-sda3}
- name: vg0
devices: [partition-sda3]
preserve: false
type: lvm_volgroup
id: lvm_volgroup-0
- {name: root, volgroup: lvm_volgroup-0, size: 5368709120B, preserve: false, type: lvm_partition,
id: lvm_partition-0}
- {fstype: ext4, volume: lvm_partition-0, preserve: false, type: format, id: format-1}
- {device: format-1, path: /, type: mount, id: mount-1}
- {name: swap, volgroup: lvm_volgroup-0, size: 4294967296B, preserve: false, type: lvm_partition,
id: lvm_partition-1}
- {fstype: swap, volume: lvm_partition-1, preserve: false, type: format, id: format-2}
- {device: format-2, path: '', type: mount, id: mount-2}
- {name: tmp, volgroup: lvm_volgroup-0, size: 4294967296B, preserve: false, type: lvm_partition,
id: lvm_partition-2}
- {fstype: ext4, volume: lvm_partition-2, preserve: false, type: format, id: format-3}
- {device: format-3, path: /tmp, type: mount, id: mount-3}
- {name: usr, volgroup: lvm_volgroup-0, size: 16106127360B, preserve: false, type: lvm_partition,
id: lvm_partition-3}
- {fstype: ext4, volume: lvm_partition-3, preserve: false, type: format, id: format-4}
- {device: format-4, path: /usr, type: mount, id: mount-4}
- {name: var, volgroup: lvm_volgroup-0, size: 10737418240B, preserve: false, type: lvm_partition,
id: lvm_partition-4}
- {fstype: ext4, volume: lvm_partition-4, preserve: false, type: format, id: format-5}
- {device: format-5, path: /var, type: mount, id: mount-5}
- {name: varlog, volgroup: lvm_volgroup-0, size: 4294967296B, preserve: false,
type: lvm_partition, id: lvm_partition-5}
- {fstype: ext4, volume: lvm_partition-5, preserve: false, type: format, id: format-6}
- {device: format-6, path: /var/log, type: mount, id: mount-6}
- {device: format-0, path: /boot, type: mount, id: mount-0}
swap: {swap: 0}
version: 1
late-commands:
- echo 'ansible ALL=(ALL) NOPASSWD:ALL' > /target/etc/sudoers.d/ansible