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