Diskless Linux boot over iSCSI
A step-by-step example of a Linux configuration to configure iSCSI diskless booting.
These steps can also be used for diskless NFS booting.
In our instructions, we will configure and load the IBM 8247-22L server, ppc64le architecture.
The OS we will be loading will be Ubuntu 14.04.
Fedora 18, x86 architecture will act as the OS on which the image connected via iSCSI (iscsi target) will live.
It is also possible to use Ubuntu 15.04 and any other new version of Fedora - 20, 21, 22, etc.
The instruction assumes that iscsi target will be on x86 architecture, and iscsi initiator on ppc64le,
it is better for you if you have everything the same.
We will follow these steps:
These steps can also be used for diskless NFS booting.
In our instructions, we will configure and load the IBM 8247-22L server, ppc64le architecture.
The OS we will be loading will be Ubuntu 14.04.
Fedora 18, x86 architecture will act as the OS on which the image connected via iSCSI (iscsi target) will live.
It is also possible to use Ubuntu 15.04 and any other new version of Fedora - 20, 21, 22, etc.
The instruction assumes that iscsi target will be on x86 architecture, and iscsi initiator on ppc64le,
it is better for you if you have everything the same.
We will follow these steps:
- Create a disk.
- Set up and run iSCSI target.
- Install Ubuntu on a USB flash drive.
- Let's take the data we need from the flash drive system.
- Install Ubuntu on a remote iSCSI drive.
- Create an initrd image with iSCSI support.
- Let's configure the PXE server as part of the DHCP server.
- Let's configure the PXE server in the TFTP server part.
- Finally, boot from PXE via iSCSI.
Configuring iSCSI target
We connect our server with a network cable to the machine where Fedora is installed, let the name of the network interface be em1 here.
Also, let the IP of this machine on em1 be 169.254.2.140.
On this machine, create a 10GiB container:
Also, let the IP of this machine on em1 be 169.254.2.140.
On this machine, create a 10GiB container:
ifconfig em1 169.254.2.140/24 up dd if=/dev/zero of=/disk1.iscsi bs=1M count=10240Configuring, connecting and launching iSCSI target:
tgtadm --lld iscsi --op new --mode target --tid 1 -T server1:disk1 tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /disk1.iscsi tgtadm --lld iscsi --op bind --mode target --tid 1 -I 169.254.2.148 tgtadm --lld iscsi --op show --mode target #to check
The latter command allows access to the address 169.254.2.148, this is the address of the server we connected.
The tgtadm utility lives in the scsi-target-utils package.If we use complex iptables rules, redirection, masquerade, do not forget to allow packet forwarding:
vi /etc/sysctl.conf net.ipv4.ip_forward = 1
Hint for loopback mount
After I have the data in this file:
parted /disk1.iscsi (parted) u Unit? [compact]? B (parted) print Model: (file) Disk /disk1.iscsi: 4294967296B Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1048576B 8388607B 7340032B boot 2 8388608B 4048551935B 4040163328B ext4 3 4048551936B 4293918719B 245366784B mount -o loop,ro,offset=8388608 /disk1.iscsi /mnt/
Installing the OS on a USB flash drive
Download the Ubuntu 15.04 (or other) image for our server http://cdimage.ubuntu.com/releases/15.04/release/ -- use PowerPC64 Little-Endian server install image.
* For POWER8 Little-Endian computers, such as Power Systems S8xxL Linux-only servers.
We will write this image to a USB flash drive or to a CD-ROM.
Then install the image from the CD-ROM to FLASH, or from one FLASH to another, from CD-ROM or FLASH to the hard disk.
We will need this installation in order to:
* For POWER8 Little-Endian computers, such as Power Systems S8xxL Linux-only servers.
We will write this image to a USB flash drive or to a CD-ROM.
Then install the image from the CD-ROM to FLASH, or from one FLASH to another, from CD-ROM or FLASH to the hard disk.
We will need this installation in order to:
- After loading into it to form initrd with iSCSI support.
- Also, get the kernel image from here.
- Also, get the pxelinux.0 file from here.
Create an initrd image with iSCSI support, copy the kernel image and the necessary data
mkdir /out/ cp -ia /boot/vmlinux-3.13.0-24-generic /out/ #copying kernel aptitude install -y syslinux-common cp -ai /usr/lib/syslinux/pxelinux.0 /out/ aptitude install sysv-rc-conf echo "iscsi" >> /etc/initramfs-tools/modules aptitude install open-iscsi # This indicator file makes mkinitramfs copy the necessary # scripts and utilities in the initrd image. touch /etc/iscsi/iscsi.initramfs aptitude install initramfs-tools mkinitramfs -o /out/initrd.img-3.13.0-24-generic # Delete the indicator file, otherwise our system will be from a flash drive # next time try to boot via iSCSI. rm /etc/iscsi/iscsi.initramfs
To install packages, you need to bring the OS to the Internet.
Installing Ubuntu on a Remote iSCSI Disk
In the "Ununut" installer, you can select the option to connect extended drives.
Having selected it, you need to specify the iSCSI target name as server1:disk1.
Specify 169.254.2.140 as the IP address, as the port 3260.
After which, as usual, partition the remote disk and install Ubuntu again.
Having selected it, you need to specify the iSCSI target name as server1:disk1.
Specify 169.254.2.140 as the IP address, as the port 3260.
After which, as usual, partition the remote disk and install Ubuntu again.
Set up a PXE server
We need to configure DHCP and TFTP server.
For Fedora, the names of the packages we need are:
initrd.img-3.13.0-24-generic pxelinux.0 vmlinux-3.13.0-24-generic
copy to: chmod 644 /var/lib/tftpboot/.
Then we set the world-readable rights:
For Fedora, the names of the packages we need are:
yum install dhcp tftp-serverIf for some reason you raise your iSCSI "target" to Ubuntu, then:
aptitude install isc-dhcp-server tftpd-hpa
/bin/systemctl start dhcpd.service /bin/systemctl status dhcpd.service vi /etc/xinetd.d/tftp change this: disable = yes to this: disable = no /bin/systemctl restart xinetd.service /bin/systemctl start xinetd.service /bin/systemctl status xinetd.service
You can listen to all the commands going to the TFTP server like this: tcpdump -nnn -i em1 port 69
vi /etc/dhcp/dhcpd.conf allow booting; allow bootp; subnet 169.254.2.0 netmask 255.255.255.0 { range 169.254.2.148 169.254.2.148; option broadcast-address 169.254.2.255; option routers 169.254.2.140; option domain-name-servers 8.8.8.8; filename "/pxelinux.0"; } host client { # There should be a MAC address of the client’s network card (interface) written through colons. hardware ethernet xx:xx:xx:xx:xx:xx; fixed-address 169.254.2.148; }Now PXE configuration:
mkdir /var/lib/tftpboot/pxelinux.cfg # Instead of xx-xx-xx-xx-xx-xx, it is necessary to substitute the MAC address of the network card of our server, # written in lowercase, with a dash between octets. # You need to take the MAC name of the standard interface (not the MGMT port) and add "01-" to it at the beginning of the file name vi /var/lib/tftpboot/pxelinux.cfg/01-xx-xx-xx-xx-xx-xx DEFAULT linux label linux kernel vmlinux-3.13.0-24-generic append initrd=initrd.img-3.13.0-24-generic root=/dev/sda2 ip=dhcp iscsi_initiator=iqn.com.domain.client:default iscsi_target_name=server1:disk1 iscsi_target_ip=169.254.2.140 iscsi_target_port=3260 iscsi_username= iscsi_password= ipappend 2
In arguments, the adra may need to specify console=tty0 if you see the kernel loading, but you do not see initrd starting and loading the system.
You may need to change root=/dev/sda2 if you partitioned the drive using iSCSI differently.Previously copied to flash drive into the /out/ files
initrd.img-3.13.0-24-generic pxelinux.0 vmlinux-3.13.0-24-generic
copy to: chmod 644 /var/lib/tftpboot/.
Then we set the world-readable rights:
chmod 644 /var/lib/tftpboot/* /var/lib/tftpboot/pxelinux.cfg/* chmod 755 /var/lib/tftpboot/pxelinux.cfg
Everything ready to boot from the PXE server.
We load the server on PXE from iSCSI disk
In the case of the IBM servers, when they start, a boot manager named Petitboot is loaded.
It scans the network and local media for download sources, in our case
our network boot with the name Linux will be displayed, here is what it will look like
settings:
Petitboot Option Editor ────────────────────────────────────────────────────────────────────────────── Device: (*) Specify paths/URLs manually Kernel: tftp://169.254.2.140/vmlinux-3.13.0-24-generic Initrd: tftp://169.254.2.140/initrd.img-3.13.0-24-generic Device tree: Boot arguments: initrd=initrd.img-3.13.0-24-generic root=/dev/sda2 ip=dhcp iscsi_initiator=iqn.com.domain.client:default iscsi_target_name=server1:disk1 iscsi_target_ip=169.254.2.140 iscsi_target_port=3260 console=tty0 iscsi_username= iscsi_password= BOOTIF=xx:xx:xx:xx:xx:xx