
Теперь у меня возникла проблема с Маасом:
Я сделал пользовательскую конфигурацию для своей установки Ubuntu 16.04 (так как в моем случае требуется разное разбиение на разделы и конфигурация дисков). На наших серверах есть несколько жестких дисков, два из которых выделены для системы (обычно два самых маленьких). Поэтому я создал пользовательскую конфигурацию для такой конфигурации, которая использует некоторые скрипты для определения двух самых маленьких дисков. После этого мы используем пользовательское разбиение на разделы, включая создание программных рейдов. Пока все работает, но в некоторых случаях установка завершается сбоем при установке grub. Вопрос: мне нужно изменить конфигурацию grub в curtin, чтобы он мог получить правильные устройства для установки grub или полностью отключить раздел grub. Мой custom_userdata_ubuntu сейчас выглядит так:
#cloud-config
debconf_selections:
maas: |
{{for line in str(curtin_preseed).splitlines()}}
{{line}}
{{endfor}}
early_commands:
01_get_device_list_script: wget -O /bin/list-devices http://10.7.36.1/list-devices
02_get_smallest_drives_script: wget -O /tmp/root_disk.sh http://10.7.36.1/root_disk.sh
03_chmod_list_devices: chmod 755 /bin/list-devices
04_set_drive_1: /bin/bash /tmp/root_disk.sh raid1_2_disk1 >/tmp/drive1
05_set_drive_2: /bin/bash /tmp/root_disk.sh raid1_2_disk2 >/tmp/drive2
partitioning_commands:
builtin: []
01_apt_get_update: apt-get update
02_install_gdisk: apt-get -y install gdisk mdadm kpartx
02_stop_raid_devices: for i in `ls /dev | grep -P 'md[0-9+]'`; do mdadm --stop /dev/$i; done
02_wait_for_device_to_settle: sleep 10; echo "Devices should be settled"
03_erase_metadata_drive_1: for i in 2 3 4 5 6 7; do mdadm --zero-superblock $(cat /tmp/drive1)${i} || /bin/true; done
03_erase_metadata_drive_2: for i in 2 3 4 5 6 7; do mdadm --zero-superblock $(cat /tmp/drive2)${i} || /bin/true; done
04_start_partitioning: echo Starting partitioning; sleep 10
05_set_drive1_label: /sbin/parted $(cat /tmp/drive1) -s mklabel gpt
06_set_drive2_label: /sbin/parted $(cat /tmp/drive2) -s mklabel gpt
07_set_boot_part_1: /sbin/parted -s $(cat /tmp/drive1) unit s mkpart biosboot 2048 4095
08_set_bios_boot_1: /sbin/parted -s $(cat /tmp/drive1) set 1 bios_grub on
09_mk_swap_1: /sbin/parted -s $(cat /tmp/drive1) mkpart primary 2098K 32G
10_parted_mk_root_1: /sbin/parted -s $(cat /tmp/drive1) mkpart primary ext4 32G 52G
11_parted_: /sbin/parted -s $(cat /tmp/drive1) mkpart primary ext4 52G 72G
12_parted_: /sbin/parted -s $(cat /tmp/drive1) mkpart primary ext4 72G 92G
13_parted_: /sbin/parted -s $(cat /tmp/drive1) mkpart primary ext4 92G 112G
14_parted_: /sbin/parted -s $(cat /tmp/drive1) mkpart primary ext4 112G 100%
141_start_copy_partitioning: echo Starting Partitioning copy process
15_sgdisk_copy_table: /sbin/sgdisk -R $(cat /tmp/drive2) $(cat /tmp/drive1)
16_sgdisk_generate_uuid: /sbin/sgdisk -G $(cat /tmp/drive2)
17_parted_set_raid_1_2: /sbin/parted $(cat /tmp/drive1) set 2 "raid" on
18_parted_set_raid_1_3: /sbin/parted $(cat /tmp/drive1) set 3 "raid" on
19_parted_set_raid_1_4: /sbin/parted $(cat /tmp/drive1) set 4 "raid" on
20_parted_set_raid_1_5: /sbin/parted $(cat /tmp/drive1) set 5 "raid" on
21_parted_set_raid_1_6: /sbin/parted $(cat /tmp/drive1) set 6 "raid" on
22_parted_set_raid_1_7: /sbin/parted $(cat /tmp/drive1) set 7 "raid" on
23_parted_set_raid_2_2: /sbin/parted $(cat /tmp/drive2) set 2 "raid" on
24_parted_set_raid_2_3: /sbin/parted $(cat /tmp/drive2) set 3 "raid" on
25_parted_set_raid_2_4: /sbin/parted $(cat /tmp/drive2) set 4 "raid" on
26_parted_set_raid_2_5: /sbin/parted $(cat /tmp/drive2) set 5 "raid" on
27_parted_set_raid_2_6: /sbin/parted $(cat /tmp/drive2) set 6 "raid" on
28_parted_set_raid_2_7: /sbin/parted $(cat /tmp/drive2) set 7 "raid" on
28_let_devices_settle: sleep 10; echo "and again devices should be settled"
29_mdadm_create_swap: yes | mdadm --create /dev/md0 --level=1 --force --raid-disks=2 --metadata=0.90 $(cat /tmp/drive2)2 $(cat /tmp/drive1)2
30_mdadm_create_root: yes | mdadm --create /dev/md1 --level=1 --force --raid-disks=2 --metadata=0.90 $(cat /tmp/drive2)3 $(cat /tmp/drive1)3
31_mdadm_create_usr: yes | mdadm --create /dev/md2 --level=1 --force --raid-disks=2 --metadata=0.90 $(cat /tmp/drive2)4 $(cat /tmp/drive1)4
32_mdadm_create_var: yes | mdadm --create /dev/md3 --level=1 --force --raid-disks=2 --metadata=0.90 $(cat /tmp/drive2)5 $(cat /tmp/drive1)5
33_mdadm_create_home: yes | mdadm --create /dev/md4 --level=1 --force --raid-disks=2 --metadata=0.90 $(cat /tmp/drive2)6 $(cat /tmp/drive1)6
34_mdadm_create_data: yes | mdadm --create /dev/md5 --level=1 --force --raid-disks=2 --metadata=0.90 $(cat /tmp/drive2)7 $(cat /tmp/drive1)7
35_mkswap: mkswap /dev/md0
36_mkfs_root: mkfs -t ext4 /dev/md1
37_mkfs_usr: mkfs -t ext4 /dev/md2
38_mkfs_var: mkfs -t ext4 /dev/md3
39_mkfs_home: mkfs -t ext4 /dev/md4
40_mkfs_data: mkfs -t ext4 /dev/md5
41_mount_root: mount /dev/md1 ${TARGET_MOUNT_POINT}
42_mkdirs: mkdir ${TARGET_MOUNT_POINT}/usr ${TARGET_MOUNT_POINT}/var ${TARGET_MOUNT_POINT}/home ${TARGET_MOUNT_POINT}/data; mkdir -p ${TARGET_MOUNT_POINT}/boot/grub
43_mount_usr: mount /dev/md2 ${TARGET_MOUNT_POINT}/usr
44_mount_var: mount /dev/md3 ${TARGET_MOUNT_POINT}/var
45_mount_home: mount /dev/md4 ${TARGET_MOUNT_POINT}/home
46_mount_data: mount /dev/md5 ${TARGET_MOUNT_POINT}/data
47_fstab_root: echo "/dev/md1 / ext4 errors=remount-ro 0 1" >> $OUTPUT_FSTAB
48_fstab_usr: echo "/dev/md2 /usr ext4 defaults 0 2" >> $OUTPUT_FSTAB
49_fstab_var: echo "/dev/md3 /var ext4 defaults 0 1" >> $OUTPUT_FSTAB
50_fstab_home: echo "/dev/md4 /home ext4 defaults 0 2" >> $OUTPUT_FSTAB
51_fstab_data: echo "/dev/md5 /data ext4 defaults 0 2" >> $OUTPUT_FSTAB
52_fstab_swap: echo "/dev/md0 none swap sw 0 0" >> $OUTPUT_FSTAB
53_make_device_map_dir: for i in 0 1 2 3 4 5; do echo "(md/$i) /dev/md$i)" >>${TARGET_MOUNT_POINT}/boot/grub/device.map; done
swap:
filename: swap.img
size: 0
late_commands:
maas: [wget, '--no-proxy', '{{node_disable_pxe_url}}', '--post-data', '{{node_disable_pxe_data}}', '-O', '/dev/null']
40_create_grub_config: ["curtin", "in-target", "--", "sh", "-c", "/usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg"]
41_install_bootloader_drive_1: ["curtin", "in-target", "--", "sh", "-c", "grub-install $(cat /tmp/drive1)"]
42_install_bootloader_drive_1: ["curtin", "in-target", "--", "sh", "-c", "grub-install $(cat /tmp/drive2)"]
51_fill_mdadm: ["curtin", "in-target", "--", "sh", "-c", "mdadm --examine --scan >/etc/mdadm/mdadm.conf"]
52_update_initramfs: ["curtin", "in-target", "--", "sh", "-c", "update-initramfs -u -k all"]
Проблема в том, что в некоторых случаях, когда у нас есть два системных HDD и включен JBOD на контроллере RAID, установка не удаётся, из-за чего grub пытается установить себя на /dev/sda, который в этом случае может быть не системным диском, а диском jbod, который ядро установило как sda, и он пуст. Есть ли способ сказать maas установить grub на другой диск изнутри (или отключить установку grub, как у меня в позднем разделе конфигурации)?
Также есть еще вопросы о поведении MAAS после установки:
- При освобождении сервера Maas выключает его - как отключить такое поведение?
- Кроме того, после релиза Maas не меняет загрузочное устройство с PXE, поэтому первая загрузка после этого завершается неудачей, поскольку конфигурация PXE больше не существует.
- После успешного развертывания сервера Maas не отображает IP-адрес сервера в разделе интерфейсов. Как это исправить?
решение1
Теперь, я просмотрел код Maas и онлайн-ссылки, поэтому я создал новую конфигурацию, может быть, кому-то она понравится. Что работает: 1. Определение самых маленьких дисков, если у нас есть два диска одинакового размера, то мы создаем программные рейды с точками монтирования для /, /usr, /var, /home 2. Grub корректно устанавливает себя, когда устройство не sda/sdb.
Что не работает так, как задумано, так это конфигурация resolv.conf, я думаю, это либо dnsmasq, либо что-то вроде этого, которое игнорирует мою конфигурацию сети и помещает 127.0.0.1 в resolv.conf, хотя я это и изучу. Также следует изменить на что-то вроде example.org. Также я добавил поздние команды из моей конфигурации в этот листинг (хотя я пропустил некоторые из них), которые добавляют факты для puppet, устанавливают puppet-agent и запускают его (после запуска puppet есть также раздел killall - он должен был освободить chroot-окружение, так как в противном случае установка не удалась, потому что временный каталог остается занятым и не может быть размонтирован).
#cloud-config
debconf_selections:
maas: |
{{for line in str(curtin_preseed).splitlines()}}
{{line}}
{{endfor}}
early_commands:
01_empty_command: echo INSTALLATION STARTED
{{py:
import operator
deviceListTmp = node.blockdevice_set.all()
deviceList = sorted(deviceListTmp, key=operator.attrgetter('size'))
has_raid = False
if (len(deviceList) > 1):
bootdrive_1 = deviceList[0]
bootdrive_2 = deviceList[1]
if bootdrive_1.size == bootdrive_2.size:
has_raid = True
else:
bootdrive_1 = deviceList[0]
}}
{{if has_raid}}
storage:
version: 1
config:
- id: {{bootdrive_1.name.strip()}}
type: disk
ptable: gpt
path: /dev/{{bootdrive_1.name.strip()}}
name: boot_drive_1
grub_device: 1
wipe: superblock-recursive
- id: bios_boot_partition_1
type: partition
size: 1MB
device: {{bootdrive_1.name.strip()}}
flag: bios_grub
- id: {{bootdrive_1.name.strip()}}2
type: partition
size: 30G
device: {{bootdrive_1.name.strip()}}
- id: {{bootdrive_1.name.strip()}}3
type: partition
size: 19G
device: {{bootdrive_1.name.strip()}}
- id: {{bootdrive_1.name.strip()}}4
type: partition
size: 19G
device: {{bootdrive_1.name.strip()}}
- id: {{bootdrive_1.name.strip()}}5
type: partition
size: 19G
device: {{bootdrive_1.name.strip()}}
- id: {{bootdrive_1.name.strip()}}6
type: partition
size: 19G
device: {{bootdrive_1.name.strip()}}
- id: {{bootdrive_2.name.strip()}}
type: disk
ptable: gpt
path: /dev/{{bootdrive_2.name.strip()}}
name: boot_drive_2
grub_device: 1
wipe: superblock-recursive
- id: bios_boot_partition_2
type: partition
size: 1MB
device: {{bootdrive_2.name.strip()}}
flag: bios_grub
- id: {{bootdrive_2.name.strip()}}2
type: partition
size: 30G
device: {{bootdrive_2.name.strip()}}
- id: {{bootdrive_2.name.strip()}}3
type: partition
size: 19G
device: {{bootdrive_2.name.strip()}}
- id: {{bootdrive_2.name.strip()}}4
type: partition
size: 19G
device: {{bootdrive_2.name.strip()}}
- id: {{bootdrive_2.name.strip()}}5
type: partition
size: 19G
device: {{bootdrive_2.name.strip()}}
- id: {{bootdrive_2.name.strip()}}6
type: partition
size: 19G
device: {{bootdrive_2.name.strip()}}
- id: mddevice0
name: md0
type: raid
raidlevel: 1
devices:
- {{bootdrive_1.name.strip()}}2
- {{bootdrive_2.name.strip()}}2
- id: mddevice1
name: md1
type: raid
raidlevel: 1
devices:
- {{bootdrive_1.name.strip()}}3
- {{bootdrive_2.name.strip()}}3
- id: mddevice2
name: md2
type: raid
raidlevel: 1
devices:
- {{bootdrive_1.name.strip()}}4
- {{bootdrive_2.name.strip()}}4
- id: mddevice3
name: md3
type: raid
raidlevel: 1
devices:
- {{bootdrive_1.name.strip()}}5
- {{bootdrive_2.name.strip()}}5
- id: mddevice4
name: md4
type: raid
raidlevel: 1
devices:
- {{bootdrive_1.name.strip()}}6
- {{bootdrive_2.name.strip()}}6
- id: md_swap
type: format
fstype: swap
volume: mddevice0
- id: md_root
type: format
fstype: ext4
volume: mddevice1
- id: md_usr
type: format
fstype: ext4
volume: mddevice2
- id: md_var
type: format
fstype: ext4
volume: mddevice3
- id: md_home
type: format
fstype: ext4
volume: mddevice4
- id: mount_swap
type: mount
device: md_swap
- id: mount_root
type: mount
path: /
device: md_root
- id: mount_usr
type: mount
path: /usr
device: md_usr
- id: mount_var
type: mount
path: /var
device: md_var
- id: mount_home
type: mount
path: /home
device: md_home
grub:
install_devices:
- /dev/{{bootdrive_1.name.strip()}}
- /dev/{{bootdrive_2.name.strip()}}
{{else}}
storage:
version: 1
config:
- id: {{bootdrive_1.name.strip()}}
type: disk
ptable: gpt
path: /dev/{{bootdrive_1.name.strip()}}
name: boot_drive_1
grub_device: 1
wipe: superblock-recursive
- id: bios_boot_partition
type: partition
size: 1MB
device: {{bootdrive_1.name.strip()}}
flag: bios_grub
- id: {{bootdrive_1.name.strip()}}2
type: partition
size: 30G
device: {{bootdrive_1.name.strip()}}
- id: {{bootdrive_1.name.strip()}}3
type: partition
size: 19G
device: {{bootdrive_1.name.strip()}}
- id: {{bootdrive_1.name.strip()}}4
type: partition
size: 19G
device: {{bootdrive_1.name.strip()}}
- id: {{bootdrive_1.name.strip()}}5
type: partition
size: 19G
device: {{bootdrive_1.name.strip()}}
- id: {{bootdrive_1.name.strip()}}6
type: partition
size: 19G
device: {{bootdrive_1.name.strip()}}
- id: fs_swap
type: format
fstype: swap
volume: {{bootdrive_1.name.strip()}}2
- id: fs_root
type: format
fstype: ext4
volume: {{bootdrive_1.name.strip()}}3
- id: fs_usr
type: format
fstype: ext4
volume: {{bootdrive_1.name.strip()}}4
- id: fs_var
type: format
fstype: ext4
volume: {{bootdrive_1.name.strip()}}5
- id: fs_home
type: format
fstype: ext4
volume: {{bootdrive_1.name.strip()}}6
- id: mount_swap
type: mount
device: fs_swap
- id: mount_root
type: mount
path: /
device: fs_root
- id: mount_usr
type: mount
path: /usr
device: fs_usr
- id: mount_var
type: mount
path: /var
device: fs_var
- id: mount_home
type: mount
path: /home
device: fs_home
grub:
install_devices:
- /dev/{{bootdrive_1.name.strip()}}
{{endif}}
network:
version: 1
config:
- type: nameserver
address:
- 10.121.10.1
- 192.168.121.1
search:
- <domainname>
swap:
filename: swap.img
size: 0
late_commands:
12_reconfigure_openssh: ["curtin", "in-target", "--", "sh", "-c", "dpkg-reconfigure openssh-server"]
13_add_puppet_key: ["curtin", "in-target", "--", "sh", "-c", "wget -O /tmp/puppet.key http://apt.puppetlabs.com/DEB-GPG-KEY-puppet && apt-key add /tmp/puppet.key"]
14_add_puppet_repo: ["curtin", "in-target", "--", "sh", "-c", "echo 'deb http://apt.puppetlabs.com xenial PC1' >/etc/apt/sources.list.d/puppetlabs-pc1.list && apt-get update"]
15_run_fix: ["curtin", "in-target", "--", "sh", "-c", "apt-get -y -f install"]
18_install_puppet_and_requrements: ["curtin", "in-target", "--", "sh", "-c", "apt-get -y install puppet-agent lsof jq ipmiutil wget python-requests parted strace tcpdump mc net-tools lsb-release"]
20_add_team_fact: ["curtin", "in-target", "--", "sh", "-c", "wget -O /tmp/smdb_data.py http://10.7.36.1/smdb_data.py && python /tmp/smdb_data.py && rm -f /tmp/smdb_data.py"]
21_run_puppet: ["curtin", "in-target", "--", "sh", "-c", "/opt/puppetlabs/bin/puppet agent -t --server puppet4.<domain>; killall -9 splunkd; killall -9 zabbix_agentd; killall -9 mdadm; lsof /proc"]
22_display_network_config: cat $OUTPUT_NETWORK_CONFIG