우분투에 대한 Maas 사용자 정의 구성

우분투에 대한 Maas 사용자 정의 구성

이제 Maas에는 다음과 같은 문제가 있습니다.

Ubuntu 16.04 설치를 위한 사용자 정의 구성을 만들었습니다(제 경우에는 다른 파티션 및 드라이브 구성이 필요함). 우리 서버에는 여러 개의 하드 드라이브가 있으며 그 중 2개는 시스템 전용입니다(보통 가장 작은 2개). 그래서 저는 이러한 구성을 위해 일부 스크립트를 사용하여 가장 작은 두 개의 드라이브를 결정하는 사용자 정의 구성을 만들었습니다. 그 후에는 소프트웨어 RAID 생성을 포함한 사용자 정의 파티셔닝을 사용합니다. 지금까지는 모든 것이 작동하지만 경우에 따라 grub-install에서 설치가 실패합니다. 질문: curtin에서 grub 구성을 변경해야 합니다. 그러면 grub-install에 대한 올바른 장치를 얻거나 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가 있고 RAID 컨트롤러 설치에 JBOD가 활성화되어 있는 경우 grub이 /dev/sda에 자체 설치를 시도하게 된다는 것입니다. 이 경우 시스템 디스크가 아니라 jbod 디스크일 수 있습니다. 그 커널은 sda로 설정되어 있고 비어 있습니다. maas에게 내부에서 다른 디스크에 grub을 설치하도록 지시할 수 있는 방법이 있습니까(또는 구성의 후반부 섹션에 있는 것처럼 grub 설치를 비활성화합니다)?

또한 설치 후 maas 동작에 대한 또 다른 질문이 있습니다.

  1. 서버 Maas를 해제하면 전원이 꺼집니다. 이러한 동작을 어떻게 비활성화합니까?
  2. 또한 릴리스 후 Maas는 PXE에서 부팅 장치를 변경하지 않으므로 첫 번째 부팅이 실패하면 PXE 구성이 더 이상 존재하지 않습니다.
  3. 서버 Maas를 성공적으로 배포한 후 인터페이스 섹션에 서버 IP 주소가 표시되지 않습니다. 이 문제를 어떻게 해결합니까?

답변1

이제 Maas 코드와 온라인 참조 자료를 살펴보며 새로운 구성을 만들었습니다. 아마도 누군가가 좋아할 것입니다. 작동 방식: 1. 가장 작은 드라이브를 감지합니다. 크기가 같은 두 개의 드라이브가 있는 경우 /, /usr, /var, /home에 대한 마운트 지점이 있는 소프트웨어 RAID를 생성합니다. 2. 장치가 sda/sdb가 아닐 때 Grub이 올바르게 설치됩니다.

의도한 대로 작동하지 않는 것은 resolv.conf 구성입니다. 제 생각에는 dnsmasq 또는 이와 유사한 것 같습니다. 이는 내 네트워크 구성을 무시하고 resolv.conf에 127.0.0.1을 넣어서 조사해 보겠습니다. 또한 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

관련 정보