PXE SAN Boot - Debian 8 ja Proxmox
SAN-boot on tekniikka jossa käyttöjärjestelmä voidaan käynnistää verkkotallennusvälineeltä käyttäen hyväksi Preboot Execution Environmentia (PXE). PXE:n avulla palvelimelle ladataan tftp- tai http-palvelimelta boot-image, jonka avulla bootataan käyttöjärjestelmän sisältävä levykuva verkkotallennusvälineeltä. Osa palvelimista tukee suoraan verkkokortin kautta toimivaa SAN-bootia, mutta käyttöjärjestelmän asennusvaiheessa tarvitaan usein PXE-bootia. PXE on yksi Openstack Ironic MaaS-palvelun vaatimuksista. Ironicin ja Senlinin avulla voidaan rakentaa autoskaalautuva pilvipalvelu, jossa kapasiteetin loppuessa reservissä oleva fyysinen-palvelin voidaan ottaa automaattisesti käyttöön. Ironic asentaa palvelimenlle PXE:n avulla käyttöjärjestelmän ja Senlin asentaa ja hallitsee tarvittavat Openstackin osat.
Asennetaan dnsmasq, Apache ja riippuvuudet.
# apt-get install dnsmasq perl gcc apache2 git make gdisk liblzma-dev
Muokataan dnsmasq.confia, johon määritellään dhcp- ja tftp-palvelimien asetukset.
# vi /etc/dnsmasq.conf port=0 bogus-priv dhcp-range=172.29.159.190,172.29.159.195,1h dhcp-option=option:router,172.29.159.1 #PALVELIN dhcp-host=00:ed:F2:BA:c6:67,172.29.159.190 dhcp-host=00:ed:F2:BA:c6:69,172.29.159.191 dhcp-boot=tag:!IPXEBOOT,undionly.kpxe dhcp-match=set:ipxe,175 dhcp-option=175,8:1:1 dhcp-option=tag:IPXEBOOT,17,"iscsi:172.29.159.10::::iqn.2017-07.bar.foo:proxmox" enable-tftp tftp-root=/ftpboot log-dhcp
Käynnistetään palvelut, luodaan hakemistot ja haetaan gitillä ipxe-lähdekoodi.
# systemctl start dnsmasq # systemctl start apache2 # mkdir /ftpboot # cd /ftpboot # git clone git://git.ipxe.org/ipxe.git # cd ipxe/src/
Luodaan sanboot.ipxe -tiedosto, johon määritellään iscsi- ja verkkoasetukset.
# vi sanboot.ipxe #!ipxe ifopen net0 set net0/dns 172.29.140.60 echo ip................: ${ip} echo netmask...........: ${netmask} echo gateway...........: ${gateway} echo dns...............: ${dns} set keep-san 1 set sanhook iscsi:172.29.159.10::3260:0:iqn.2017-07.bar.foo:proxmox sanboot iscsi:172.29.159.10::3260:0:iqn.2017-07.bar.foo:proxmox boot
Käännetään lähdekoodista oma kpxe-tiedosto johon integroidaan sanboot.ipxe-tiedosto.
# make bin/undionly.kpxe EMBED=sanboot.ipxe # cp bin/undionly.kpxe /ftpboot/
Liitetään SAN-tallennusmedia järjestelmään ja luodaan tarvittavat partiot.
# iscsiadm -m discovery -t st -p 172.29.159.10:3260 172.29.159.10:3260,3 iqn.2017-07.bar.foo:proxmox # iscsiadm -m node --targetname iqn.2017-07.bar.foo:proxmox -p 172.29.159.10 --login Logging in to [iface: default, target: iqn.2017-07.bar.foo:proxmox, portal: 172.29.159.10,3260] (multiple) Login to [iface: default, target: iqn.2017-07.bar.foo:proxmox, portal: 172.29.159.10,3260] successful. # gdisk /dev/sda GPT fdisk (gdisk) version 0.8.10 Partition table scan: MBR: not present BSD: not present APM: not present GPT: not present Creating new GPT entries. Command (? for help): n Partition number (1-128, default 1): First sector (34-62914526, default = 2048) or {+-}size{KMGTP}: Last sector (2048-62914526, default = 62914526) or {+-}size{KMGTP}: 80000 Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): ef02 Changed type of partition to 'BIOS boot partition' Command (? for help): n Partition number (2-128, default 2): First sector (34-62914526, default = 81920) or {+-}size{KMGTP}: Last sector (81920-62914526, default = 62914526) or {+-}size{KMGTP}: 61000000 Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): Changed type of partition to 'Linux filesystem' Command (? for help): n Partition number (3-128, default 3): First sector (34-62914526, default = 61001728) or {+-}size{KMGTP}: Last sector (61001728-62914526, default = 62914526) or {+-}size{KMGTP}: Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): 8200 Changed type of partition to 'Linux swap' Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT) to /dev/sda. The operation has completed successfully.
# mkfs.ext4 /dev/sda2 mke2fs 1.42.12 (29-Aug-2014) Discarding device blocks: done Creating filesystem with 7614760 4k blocks and 1905008 inodes Filesystem UUID: c035ab6b-1853-475f-a481-7d5767fbb1a5 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done # mkswap /dev/sda3 Setting up swapspace version 1, size = 956392 KiB no label, UUID=ca3c4af8-1101-458e-94ee-0b6c91bb819e
Asennetaan Debian bootstrapilla.
# mkdir -p /mnt/debian/{sys,proc,dev} # mount /dev/sda2 /mnt/debian # debootstrap stretch /mnt/debian http://ftp.fi.debian.org/debian I: Retrieving Release ... I: Base system installed successfully. # mount -o bind /dev /mnt/debian/dev # mount -o bind /sys /mnt/debian/sys # mount -o bind /proc /mnt/debian/proc # chroot /mnt/debian
chroot # echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list chroot # wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg chroot # apt-get update
Jos palvelimessa on verkkokortti johon ei löydy suoraan ajureita, niin asennus voi vaatia non-free sourcen lisäämisen ja ajureiden asennuksen. Tässä tapauksessa Broadcom NetXtremeII ajurit.
chroot # echo "deb http://deb.debian.org/debian stretch main contrib non-free" >> /etc/apt/sources.list chroot # apt-get update chroot # apt-get install firmware-bnx2 ... The following NEW packages will be installed: firmware-bnx2 ...
Asetetaan verkkortin asetukset manuaalisiksi. Huom. Riipuen verkkokortista, udevd nimeää verkkokortin enoX, enp0sX, enxX tai ethX.
chroot # vi /etc/network/interfaces auto lo iface lo inet loopback auto eno1 iface eno1 inet manual
Asennetaan GRUB, kaivetaan levyjen UUID:t ja muokataan grub löytämään iSCSI-levy bootissa. Huom. Kaikki asetukset GRUB_CMDLINE_LINUX -määritelmässä tulee olla samalla rivillä.
chroot # apt install grub-pc [*] /dev/sda (32212 MB; ???) chroot # blkid /dev/sda2 /dev/sda3 /dev/sda2: UUID="c035ab6b-1853-475f-a481-7d5767fbb1a5" TYPE="ext4" /dev/sda3: UUID="ca3c4af8-1101-458e-94ee-0b6c91bb819e" TYPE="swap" chroot # vi /etc/default/grub ... GRUB_CMDLINE_LINUX_DEFAULT="" GRUB_CMDLINE_LINUX="iscsi_initiator=iqn.2017-07.bar.foo:pve iscsi_target_name=iqn.2017-07.bar.foo:proxmox iscsi_target_ip=172.29.159.10 iscsi_target_port=3260 root=UUID=c035ab6b-1853-475f-a481-7d5767fbb1a5 ip=172.29.159.190::172.29.159.1:255.255.255.0:proxmox:eno1:off" ... chroot # echo 'UUID=c035ab6b-1853-475f-a481-7d5767fbb1a5 / ext4 errors=remount-ro 0 1' >> /etc/fstab chroot # echo 'UUID=ca3c4af8-1101-458e-94ee-0b6c91bb819e none swap sw 0 0' >> /etc/fstab chroot # apt-get install pve-kernel-4.10.17-1-pve pve-headers-4.10.17-1-pve chroot # mkdir /etc/iscsi ; touch /etc/iscsi/initiatorname.iscsi ; touch /etc/iscsi/iscsi.initramfs chroot # apt-get install open-iscsi chroot # echo "InitiatorName=iqn.2017-07.bar.foo:pve" > /etc/iscsi/initiatorname.iscsi chroot # grub-install --recheck /dev/sda chroot # vi /etc/hostname proxmox chroot # passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully chroot # exit # umount /mnt/debian/{dev,sys,proc} # umount /mnt/debian # iscsiadm -m node --targetname iqn.2017-07.bar.foo:proxmox -p 172.29.159.10 --logout Logging out of session [sid: 8, target: iqn.2017-07.bar.foo:proxmox, portal: 172.29.159.10,3260] Logout of [sid: 8, target: iqn.2017-07.bar.foo:proxmox, portal: 172.29.159.10,3260] successful.
Käynnistetään palvelin ja valitaan PXE-boot. DHCP:n antaa IP-osoitteen ja PXE käynnistää SAN-bootin. Kun palvelin on käynnistynyt ja Debian latautunut, korjataan localet ja keybmap
# apt-get install ssh locales ntp console-data # dpkg-reconfigure locales # vi /etc/network/interfaces auto lo iface lo inet loopback auto eno1 iface eno1 inet static address 172.29.159.80 netmask 255.255.255.0 gateway 172.29.159.1 auto eno2 iface eno2 inet static address 172.29.160.190 netmask 255.255.255.0 # vi /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.29.159.190 proxmox # apt-get install proxmox-ve
# vi /etc/iscsi/iscsid.conf node.startup = automatic node.session.timeo.replacement_timeout = 15
# apt-get install multipath-tools # /lib/udev/scsi_id -g -u -d /dev/sda 36d62b9c7616936ab6c4380fa90c35542
# vi /etc/multipath.conf defaults { user_friendly_names yes find_multipaths yes } blacklist { devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" devnode "^hd[a-z]" } multipaths { multipath { wwid 36d62b9c7616936ab6c4380fa90c35542 alias mpath0 path_grouping_policy multibus path_selector "service-time 0" failback immediate rr_weight priorities no_path_retry fail prio alua } }
Riippuen iSCSI-järjestelmän asetuksista, eri aliverkkojen portalit täytyy skannata erikseen.
# systemctl restart multipathd # iscsiadm -m discovery -t st -p 172.29.159.15:3260 # iscsiadm -m discovery -t st -p 172.29.160.15:3260 # iscsiadm -m node -T iqn.2017-07.bar.foo:pms2 --login