Я столкнулся с проблемой при автоматической установке сервера.
Вот моя среда: Сервер: centos 7.6 x86_64 (это система kvm) Узел 1: нет системы Узел 2: нет системы
Я хочу автоматизировать установку серверной системы Ubuntu-20.04.3.
На Server1 я установил tftpd,dhcpd,httpd. Вот такая конфигурация:
# tftpd
# cat /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = yes
per_source = 11
cps = 100 2
flags = IPv4
}
# dhcpd
# cat /etc/dhcp/dhcpd.conf
ddns-update-style none;
subnet 10.10.8.0 netmask 255.255.252.0 {
option routers 10.10.11.254;
option domain-name-servers 10.10.9.250;
option subnet-mask 255.255.252.0;
range dynamic-bootp 10.10.11.10 10.10.11.220;
default-lease-time 21600;
max-lease-time 43200;
next-server 10.10.11.245;
filename "pxelinux.0";
}
# httpd
# cat /etc/httpd/conf.d/tftp.conf
<Directory /var/lib/tftpboot>
Options +FollowSymLinks +Indexes
Require all granted
</Directory>
Alias /tftp /var/lib/tftpboot
Файлы в/var/lib/tftpboot
# ll /var/lib/tftpboot/
总用量 1328744
drwxrwxrwx 2 root root 22 12月 8 18:40 grub
-rwxrwxrwx 1 root root 86017541 11月 25 17:40 initrd
-rwxrwxrwx 1 root root 31 11月 25 17:45 meta-data
-rwxrwxrwx 1 root root 336 12月 8 20:03 network.sh
-rwxrwxrwx 1 root root 1435512 4月 16 2020 pxelinux.0
-rwxrwxrwx 1 root root 1261371392 8月 24 17:09 ubuntu-20.04.3-live-server-amd64.iso
-rwxrwxrwx 1 root root 1353 12月 8 20:03 ubuntu_init.sh
-rwxrwxrwx 1 root root 2856 12月 8 20:17 user-data
-rwxrwxrwx 1 root root 11772160 11月 25 17:40 vmlinuz
grub.cfg
# cat grub/grub.cfg
default=autoinstall
timeout=5
timeout_style=menu
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
menuentry "Focal Live Installer - automated" --id=autoinstall {
echo "Loading Kernel...1111"
linux /vmlinuz root=/dev/ram0 ramdisk_size=1500000 root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://10.10.11.245/tftp/ubuntu-20.04.3-live-server-amd64.iso autoinstall ds=nocloud-net\;s=http://10.10.11.245/tftp/ ---
echo "Loading Ram Disk...111"
initrd /initrd
}
menuentry "Focal Live Installer" --id=install {
echo "Loading Kernel...22"
linux /vmlinuz root=/dev/ram0 ramdisk_size=1500000 ramdisk_size=1500000 ip=dhcp url=http://10.10.11.245/tftp/ubuntu-20.04.3-live-server-amd64.iso
echo "Loading Ram Disk...22"
initrd /initrd
}
метаданные
# cat meta-data
instance-id: focal-autoinstall
данные пользователя
# cat user-data
#cloud-config
autoinstall:
apt:
geoip: true
preserve_sources_list: false
primary:
- arches: [amd64, i386]
uri: http://mirrors.aliyun.com/ubuntu
- arches: [default]
uri: http://ports.ubuntu.com/ubuntu-ports
user-data:
timezone: Asia/Shanghai
disable_root: false
chpasswd:
list: |
root:$6$YMYlEcE71$/bcl2qd2rSYePvOkmgAyQR/h/
identity: {hostname: 111, password: $6$ereNXNuj9WVUt77B$.dbpuHaLernNl6qq6r14meIk1W5VAyaMV9.,
realname: 11, username: 11}
keyboard: {layout: us, toggle: null, variant: ''}
locale: en_US.UTF-8
network:
ethernets:
eno12399:
critical: true
dhcp-identifier: mac
dhcp4: true
nameservers:
addresses: [10.10.9.250]
eno12409: {dhcp4: true}
eno12419: {dhcp4: true}
eno12429: {dhcp4: true}
eno8303: {dhcp4: true}
eno8403: {dhcp4: true}
version: 2
proxy: http://mirrors.aliyun.com/ubuntu
ssh:
allow-pw: true
authorized-keys: []
install-server: true
storage:
grub:
reorder_uefi: False
config:
- {ptable: gpt, path: /dev/sda, wipe: superblock-recursive, preserve: false, name: '', grub_device: false,
type: disk, id: disk-sda}
- {device: disk-sda, size: 536870912, wipe: superblock, flag: boot, number: 1,
preserve: false, grub_device: true, type: partition, id: partition-2}
- {fstype: fat32, volume: partition-2, preserve: false, type: format, id: format-2}
- {device: disk-sda, size: -1, wipe: superblock, flag: '', number: 2,
preserve: false, grub_device: false, type: partition, id: partition-3}
- {fstype: xfs, volume: partition-3, preserve: false, type: format, id: format-3}
- {path: /, device: format-3, type: mount, id: mount-3}
- {path: /boot/efi, device: format-2, type: mount, id: mount-2}
updates: security
packages:
- linux-generic
- net-tools
late-commands:
- curtin in-target --target=/target -- /usr/bin/wget -P /root/ http://10.10.11.245/tftp/ubuntu_init.sh
- curtin in-target --target=/target -- /usr/bin/wget -P /root/ http://10.10.11.245/tftp/network.sh
- curtin in-target --target=/target -- /usr/bin/bash /root/ubuntu_init.sh
#- curtin in-target --target=/target -- sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && systemctl restart sshd
#- curtin in-target --target=/target -- systemctl stop ufw.service && systemctl disable ufw.service
#- curtin in-target --target=/target -- echo -e "NTP=ntp1.aliyun.com\nFallbackNTP=ntp.ubuntu.com" >> /etc/systemd/timesyncd.conf && systemctl restart systemd-timesyncd
version: 1
Ubuntu_init.sh
#!/bin/bash
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
systemctl restart sshd
systemctl stop ufw.service
systemctl disable ufw.service
#
echo -e "NTP=ntp1.aliyun.com\nFallbackNTP=ntp.ubuntu.com" >> /etc/systemd/timesyncd.conf
systemctl restart systemd-timesyncd
#
cat >> /etc/security/limits.conf << EOF
* soft nofile 655350
* hard nofile 655350
* soft nproc 655350
* hard nproc 655350
root soft nofile 655350
root hard nofile 655350
root soft nproc 655350
root hard nproc 655350
EOF
########################################
cp /etc/sysctl.conf /etc/sysctl.conf.bak
cat > /etc/sysctl.conf << EOF
vm.swappiness = 0
kernel.sysrq = 1
net.ipv4.neigh.default.gc_stale_time = 120
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_slow_start_after_idle = 0
EOF
/sbin/sysctl -p
Моя проблема
Когда я запускаю автоматическую установку pxe на Dell R750 или других серверах с открытыми службами UEFI, tftp, dhcpd, httpd работают нормально. Но когда сервер выполняет «поздние команды», например wget
или curl
, то выдает сообщение об ошибке. Другие команды bash, которые могут быть выполнены, не выдают ошибок, например echo
, sed
, systemctl start service
и так далее.
когда происходит ошибка автоматической установки, то выводится сообщение об ошибке и эта системная установка прерывается. Я могу wget
загрузить файл bash с моего сервера httpd и выполнить его.
картинка для этого: ошибка фото
Если вы медленно откроете изображение ошибки, вот текстовое описание ошибки:
start: subiquity/Late/run/command_0: curtin in-target --target=/target -- /usr/bin/wget -P /root/ http://10.10.11.245/tftp/ubuntu_init.sh
start: subiquity/Meta/status_GET
finish: subiquity/Late/run/command_0: Command '['system-cat', '--level-prefix=false', '--identifier=subiquity_log.3140', 'sh', 'c', 'curtin in-target --target=/target --/usr/bin/wget -P /root/ http://10.10.11.245/tftp/ubuntu_init.sh']' returned non-zero exit status 8.ip a
журнал httpd
10.10.11.94 - - [13/Dec/2021:15:58:40 +0800] "GET /tftp/ubuntu-20.04.3-live-server-amd64.iso HTTP/1.1" 200 1261371392 "-" "Wget"
10.10.11.94 - - [13/Dec/2021:15:59:01 +0800] "GET /tftp/ubuntu-20.04.3-live-server-amd64.iso HTTP/1.1" 200 1261371392 "-" "Cloud-Init/21.2-3-g899bfaa9-0ubuntu2~20.04.1"
10.10.11.94 - - [13/Dec/2021:15:59:13 +0800] "GET /tftp/ubuntu-20.04.3-live-server-amd64.iso HTTP/1.1" 200 1261371392 "-" "Cloud-Init/21.2-3-g899bfaa9-0ubuntu2~20.04.1"
10.10.11.94 - - [13/Dec/2021:15:59:25 +0800] "GET /tftp/meta-data HTTP/1.1" 200 31 "-" "Cloud-Init/21.2-3-g899bfaa9-0ubuntu2~20.04.1"
10.10.11.94 - - [13/Dec/2021:15:59:25 +0800] "GET /tftp/user-data HTTP/1.1" 200 2772 "-" "Cloud-Init/21.2-3-g899bfaa9-0ubuntu2~20.04.1"
10.10.11.94 - - [13/Dec/2021:15:59:25 +0800] "GET /tftp/vendor-data HTTP/1.1" 404 214 "-" "Cloud-Init/21.2-3-g899bfaa9-0ubuntu2~20.04.1"
10.10.11.94 - - [13/Dec/2021:15:59:26 +0800] "GET /tftp/vendor-data HTTP/1.1" 404 214 "-" "Cloud-Init/21.2-3-g899bfaa9-0ubuntu2~20.04.1"
10.10.11.94 - - [13/Dec/2021:15:59:27 +0800] "GET /tftp/vendor-data HTTP/1.1" 404 214 "-" "Cloud-Init/21.2-3-g899bfaa9-0ubuntu2~20.04.1"
10.10.11.94 - - [13/Dec/2021:15:59:28 +0800] "GET /tftp/vendor-data HTTP/1.1" 404 214 "-" "Cloud-Init/21.2-3-g899bfaa9-0ubuntu2~20.04.1"
10.10.11.94 - - [13/Dec/2021:15:59:29 +0800] "GET /tftp/vendor-data HTTP/1.1" 404 214 "-" "Cloud-Init/21.2-3-g899bfaa9-0ubuntu2~20.04.1"
10.10.11.94 - - [13/Dec/2021:15:59:30 +0800] "GET /tftp/vendor-data HTTP/1.1" 404 214 "-" "Cloud-Init/21.2-3-g899bfaa9-0ubuntu2~20.04.1"
10.10.11.94 - - [13/Dec/2021:15:59:31 +0800] "GET /tftp/vendor-data HTTP/1.1" 404 214 "-" "Cloud-Init/21.2-3-g899bfaa9-0ubuntu2~20.04.1"
10.10.11.94 - - [13/Dec/2021:15:59:32 +0800] "GET /tftp/vendor-data HTTP/1.1" 404 214 "-" "Cloud-Init/21.2-3-g899bfaa9-0ubuntu2~20.04.1"
10.10.11.94 - - [13/Dec/2021:15:59:33 +0800] "GET /tftp/vendor-data HTTP/1.1" 404 214 "-" "Cloud-Init/21.2-3-g899bfaa9-0ubuntu2~20.04.1"
10.10.11.94 - - [13/Dec/2021:15:59:34 +0800] "GET /tftp/vendor-data HTTP/1.1" 404 214 "-" "Cloud-Init/21.2-3-g899bfaa9-0ubuntu2~20.04.1"
10.10.11.94 - - [13/Dec/2021:15:59:35 +0800] "GET /tftp/vendor-data HTTP/1.1" 404 214 "-" "Cloud-Init/21.2-3-g899bfaa9-0ubuntu2~20.04.1"
Я выполняю это вручную без ошибок.
Если кто-нибудь знает, как решить эту проблему, или у кого-то была похожая проблема, пожалуйста, напишите мне, спасибо.
если я выразился неясно, вы можете указать.
решение1
Ваша проблема, скорее всего, вызвана proxy
конфигурацией
proxy: http://mirrors.aliyun.com/ubuntu
Я обнаружил, что если указать прокси, то весь веб-трафик будет использовать этот прокси. wget
Попытка загрузить ваш скрипт отправляется через прокси и терпит неудачу.
Один из способов proxy
использования заключается в том, что переменные среды http_proxy
и https_proxy
будут установлены на ваше proxy
значение в среде установщика. При выполнении веб-запросов wget
использует эти переменные среды для определения прокси. Вот несколько простых командных строк, которые вы можете попробовать в оболочке среды установщика (или на самом деле в любой системе Linux) для проверки.
Это должно сработать, поскольку прокси-сервер не установлен.
http_proxy= wget http://10.10.11.245/tftp/ubuntu_init.sh
Это должно привести к ошибке и завершению работы с кодом возврата, 8
как показано в ваших журналах.
http_proxy=http://mirrors.aliyun.com/ubuntu wget http://10.10.11.245/tftp/ubuntu_init.sh
echo $?
Параметры
Вот несколько доступных способов обойти эту проблему.
- не настраивайте
proxy
. early_commands
похоже, не подвержены влияниюproxy
, поэтому это работает для загрузки скрипта.
early-commands:
- /usr/bin/wget -P /run/ http://10.10.11.245/tftp/ubuntu_init.sh
- отмените установку соответствующей переменной среды в
late-commands
. Это необходимо сделать для каждой команды.
late-commands:
- http_proxy= curtin in-target --target /target -- /usr/bin/wget -P /root/ http://10.10.11.245/tftp/ubuntu_init.sh
Примечания
Я тестировал с помощью установщика Ubuntu 20.04.3
( subiquity 21.08.2
)