
現在,我對 Maas 有這個問題:
我已經為我的 Ubuntu 16.04 安裝進行了自訂配置(因為我的情況需要不同的分割區和磁碟機配置)。我們的伺服器有多個硬碟,其中兩個專用於系統(通常是最小的兩個)。因此,我為此類配置建立了自訂配置,它使用一些腳本來確定最小的兩個磁碟機。之後我們使用自訂分區,包括軟體突襲創建。到目前為止,一切正常,但在某些情況下,grub-install 安裝失敗。問題是:我需要更改 curtin 中的 grub 配置,以便它可以獲得正確的 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"]
問題是,在某些情況下,我們有兩個系統硬碟,並且在raid 控制器上啟用了JBOD 安裝失敗,導致grub 嘗試將自身安裝在/dev/sda 上,在這種情況下可能不是系統磁碟,而是jbod 磁碟該核心設定為 sda 並且它是空的。有沒有辦法告訴 maas 從內部將 grub 安裝到另一個磁碟上(或停用安裝 grub,因為我在配置的後面部分有它)?
另外還有關於安裝後 maas 行為的另一個問題,它們是:
- 釋放伺服器 Maas 時會將其關閉 - 如何停用此類行為?
- 此外,在發布後,Maas 不會更改 PXE 的啟動設備,因此第一次啟動失敗後會導致 PXE 配置不再存在。
- 成功部署伺服器 Maas 後,介面部分不顯示伺服器 IP 位址,我們該如何解決這個問題?
答案1
現在,我一直在瀏覽 Maas 程式碼和線上參考,所以我創建了新的配置,也許有人會喜歡它。如何運作: 1. 偵測最小的驅動器,如果我們有兩個大小相同的驅動器,則我們使用/、/usr、/var、/home 的安裝點建立軟體raid 2. 當裝置不是sda/sdb 時,Grub正確安裝自身。
無法如預期運作的是 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