İçeriğe geç

NetBoot Server Kurulumu – 1

Bazı bilgisayar ağlarının, birkaç fiziksel makinede aynı yazılım kurulumlarını ve yapılandırmalarını sürdürmesi gerekir. Böyle bir ortam bir okul bilgisayar laboratuarı olacaktır. Bir  netboot Sunucu, istemci bilgisayarların bir merkezi konumdan yapılandırılabilir böylece bir ağ üzerinden tüm bir işletim sistemini hizmet etmek için ayarlanabilir. Bu eğitimde bir netboot sunucusu oluşturmanın bir yöntemi gösterilecektir.

Bu eğitimin 1. kısmı, netboot sunucusu ve imaj oluşturmayı kapsayacaktır. Bölüm 2, Kerberos kimliği doğrulanmış giriş dizinlerinin netboot yapılandırmasına nasıl ekleneceğini gösterecektir.

Başlangıç ​​konfigürasyonu

Fedora Server’ın netinst iso larından birini indirerek , CD’ye yazarak ve yeniden biçimlendirilecek sunucuyu açarak başlayın  . Başlangıç ​​noktamız için sadece Fedora Server’ın tipik bir “Minimal Install” ına ihtiyacımız var ve kurulum bittikten sonra gereken ek paketleri eklemek için komut satırını kullanacağız.

NOT: Bu eğitim için Fedora 28 kullanacağız. Diğer sürümler, “Minimal Install” larında biraz farklı paketler içerebilir. Farklı bir Fedora sürümüyle başlarsanız, beklenen bir dosya veya komut mevcut değilse, sorun gidermeniz gerekebilir.

Minimum Fedora Server kurulumunuzu başlatıp çalıştırdıktan sonra  , şu komutu kullanarak giriş yapın ve daha sonra root olun :

$ sudo -i

Ana bilgisayar adını ayarlayın:

# MY_HOSTNAME=server-01.example.edu
# hostnamectl set-hostname $MY_HOSTNAME

NOT: Red Hat, hem statik hem de geçici adların, host.example.com (Ana Bilgisayar Adlarını Anlama ) gibi DNS’de makine için kullanılan tam etki alanı adıyla (FQDN) eşleşmesini önerir .

NOT: Özelleştirmeniz gerekebilecek herhangi bir değer, kalan komutları çalıştırmadan önce ince ayar yapabileceğiniz bir MY_ * değişkeni olarak belirtilecektir. Oturumu kapatırsanız değişken atamalarının silineceğini unutmayın.

NOT: Fedora 28 Server, varsayılan olarak konsola bir çok günlük çıkışı koyma eğilimindedir. Konsol günlüğü kaydını geçici olarak devre dışı bırakmak isteyebilirsiniz: sysctl -w kernel.printk = 0

Sonra, sunucumuzda statik bir ağ adresine ihtiyacımız var. Aşağıdaki komut dizisi, varsayılan ağ bağlantınızı uygun şekilde bulmalı ve yeniden yapılandırmalıdır:

# MY_DNS1=192.0.2.91 
# MY_DNS2=192.0.2.92
# MY_IP=192.0.2.158
# MY_PREFIX=24
# MY_GATEWAY=192.0.2.254
# DEFAULT_DEV=$(ip route show default | awk '{print $5}') # DEFAULT_CON=$(nmcli d show $DEFAULT_DEV | sed -n '/^GENERAL.CONNECTION:/s!.*:\s*!! p')
# nohup bash << END nmcli con mod "$DEFAULT_CON" connection.id "$DEFAULT_DEV"
nmcli con mod "$DEFAULT_DEV" connection.interface-name "$DEFAULT_DEV"
nmcli con mod "$DEFAULT_DEV" ipv4.method disabled
nmcli con up "$DEFAULT_DEV"
nmcli con add con-name br0 ifname br0 type bridge
nmcli con mod br0 bridge.stp no
nmcli con mod br0 ipv4.dns $MY_DNS1,$MY_DNS2
nmcli con mod br0 ipv4.addresses $MY_IP/$MY_PREFIX
nmcli con mod br0 ipv4.gateway $MY_GATEWAY
nmcli con mod br0 ipv4.methodmanual
nmcli con up br0
nmcli con add con-name br0-slave0 ifname "$DEFAULT_DEV" type bridge-slave
master br0
nmcli con up br0-slave0
END

NOT: Yukarıdaki son komutlar geçici olarak ağ bağlantısını devre dışı bırakacağı için “nohup” betiğine yazılmıştır. Nohup komutu nmcli komutlarının ssh bağlantınız kapalıyken bile çalışmayı bitirmesine izin vermelidir. Bağlantının tekrar başlaması 10 saniye kadar sürebilir ve sunucunun IP adresini değiştirdiyseniz yeni bir ssh bağlantısı başlatmanız gerekeceğinden emin olun.

NOT: Yukarıdaki ağ yapılandırması , varsayılan bağlantının üstündebir ağ köprüsü oluşturur , böylece daha sonra test etmek üzere sanal makine örneğini doğrudan sunucuda çalıştırabiliriz. Netboot görüntüsünü doğrudan sunucuda test etmek istemiyorsanız, köprüyü oluşturmayı atlayabilir ve statik IP adresini doğrudan varsayılan ağ bağlantınıza ayarlayabilirsiniz.

NFS4’ü Kurma ve Yapılandırma

Nfs-utils paketini yükleyerek başlayın:

# dnf install -y nfs-utils

NFS dışa aktarımı için üst düzey bir sözde dosya sistemi oluşturun ve onu ağınızla paylaşın:

# MY_SUBNET=192.0.2.0 
# mkdir /export
# echo "/export -fsid=0,ro,sec=sys,root_squash $MY_SUBNET/$MY_PREFIX" > /etc/exports

SELinux netboot sunucusunun çalışmasını engelleyecektir. Bunun için istisnaları yapılandırmak bu eğitimin kapsamı dışındadır, bu nedenle devre dışı bırakacağız:

# sed -i '/GRUB_CMDLINE_LINUX/s/"$/ audit=0 selinux=0"/' /etc/default/grub # grub2-mkconfig -o /boot/grub2/grub.cfg
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
# setenforce 0


NOT: Grub komut satırını düzenlemek gerekli olmamakla birlikte, test sırasında Fedora Server 28’in yeniden başlatılması sırasında / etc / sysconfig / selinux ifadesinin etkisiz kaldığı, bu nedenle “selinux = 0” bayrağı burada iki kat emin olarak ayarlandı.


Şimdi, yerel güvenlik duvarına NFS hizmeti için bir istisna ekleyin ve NFS hizmetini başlatın:

# firewall-cmd --add-service nfs 
# firewall-cmd --runtime-to-permanent
# systemctl enable nfs-server.service
# systemctl start nfs-server.service

Netboot İmajı Oluşturma

Artık NFS sunucumuz çalışıyor ve çalışıyor, istemci bilgisayarlara sunmak için bir işletim sistemi görüntüsü sağlamamız gerekiyor. Çok az görüntü ile başlayacağız ve her şey çalıştıktan sonra ekleyeceğiz.

İlk olarak, imajı depolanacağı yeni bir dizin oluşturun:

# mkdir / fc28

Görüntüyü yeni dizinin altına yalnızca birkaç temel pakette oluşturmak için “dnf” komutunu kullanın:

# dnf -y --releasever=28 --installroot=/fc28 install fedora-release systemd passwd rootfiles sudo dracut dracut-network nfs-utils vim-minimal dnf

“Çekirdek” paketlerinin yukarıdaki komuttan çıkarılması önemlidir. Yüklenmeden önce, çekirdek ilk yüklendiğinde otomatik olarak oluşturulan “initramfs” görüntüsüne dahil edilecek sürücü kümesini ayarlamamız gerekir. Özellikle, “hostonly” modunu devre dışı bırakmamız gerekiyor, böylece initramfs görüntüsü daha geniş donanım platformlarında çalışacak ve ağ oluşturma ve NFS için destek eklememiz gerekecek:

# echo 'hostonly=no' > /fc28/etc/dracut.conf.d/hostonly.conf 
# echo 'add_dracutmodules+=" network nfs "' > /fc28/etc/dracut.conf.d/netboot.conf


Şimdi çekirdeği kurun:

# dnf -y --installroot=/fc28 install kernel

Çekirdeğin güncellenmesini önlemek için bir kural belirleyin:

# echo 'exclude = kernel- *' >> /fc28/etc/dnf/dnf.conf

Yerel ayarı ayarlayın:

NOT: Yerel ayar düzgün yapılandırılmadığında bazı programlar (örn. GNOME Terminali) çalışmaz.

Kullanıcının ana bilgisayar adını ayarlayın:

# MY_CLIENT_HOSTNAME=client-01.example.edu 
# echo $MY_CLIENT_HOSTNAME > /fc28/etc/hostname

Konsola giriş yapmayı devre dışı bırak:

# echo 'kernel.printk = 0 4 1 7' > /fc28/etc/sysctl.d/00-printk.conf

Netboot görüntüsünde yerel bir “liveuser” tanımlayın:

# echo 'liveuser:x:1000:1000::/home/liveuser:/bin/bash' >> /fc28/etc/passwd # echo 'liveuser::::::::' >> /fc28/etc/shadow 
# echo 'liveuser:x:1000:' >> /fc28/etc/group
# echo 'liveuser:!::' >> /fc28/etc/gshadow

“Liveuser” un sudo yapmasına izin ver:

# echo 'liveuser ALL = (ALL) NOPASSWD: ALL'> /fc28/etc/sudoers.d/liveuser

Otomatik giriş dizini oluşturmayı etkinleştir:

# dnf install -y --installroot=/fc28 authselect oddjob-mkhomedir 
# echo 'dirs /home' > /fc28/etc/rwtab.d/home
# chroot /fc28 authselect select sssd with-mkhomedir --force
# chroot /fc28 systemctl enable oddjobd.service

Birden fazla istemci imajı eşzamanlı olarak çekeceği için, imajı salt okunur modda çalışacak şekilde yapılandırmamız gerekir:

# sed -i 's/^READONLY=no$/READONLY=yes/' /fc28/etc/sysconfig/readonly-root


Kalıcı depolama yerine RAM’e yüklenmesi için yapılandırın:

# sed -i 's/^#Storage=auto$/Storage=volatile/' /fc28/etc/systemd/journald.conf


DNS’yi yapılandırın:

# MY_DNS1=192.0.2.91 
# MY_DNS2=192.0.2.92
# cat << END > /fc28/etc/resolv.conf nameserver
$MY_DNS1 nameserver
$MY_DNS2
END

Salt okunur kök dosyaları için var olan birkaç hata hakkında çalışma ( BZ1542567 ):

# echo 'dirs /var/lib/gssproxy' > /fc28/etc/rwtab.d/gssproxy 
# cat << END > /fc28/etc/rwtab.d/systemd
dirs /var/lib/systemd/catalog
dirs /var/lib/systemd/coredump
END


Son olarak, imajımız için NFS dosya sistemini oluşturabilir ve onu alt ağımızla paylaşabiliriz:

# mkdir /export/fc28 
# echo '/fc28 /export/fc28 none bind 0 0' >> /etc/fstab
# mount /export/fc28
# echo "/export/fc28 -ro,sec=sys,no_root_squash $MY_SUBNET/$MY_PREFIX" > /etc/exports.d/fc28.exports
# exportfs -vr

Önyükleme Yükleyicisini Oluşturun

Şimdi netboot için kullanılabilecek bir işletim sistemimiz var, istemci sistemlerinde onu başlatmak için bir önyükleyici gerekiyor. Bu kurulum için iPXE kullanacağız .Burada kullanıcı hesabınıza giriş yapmalısınız, root değil  .

NOT: Bu bölüm ve aşağıdaki bölüm – QEMU ile test etme – ayrı bir bilgisayarda yapılabilir; netboot sunucusunda çalıştırılmak zorunda değiller.

Git’i yükleyin ve iPXE’i indirmek için kullanın:

$ sudo dnf install -y git 
$ git clone http://git.ipxe.org/ipxe.git
$HOME/ipxe


Şimdi bootloader’ımız için özel bir başlangıç ​​betiği oluşturmamız gerekiyor:

$ cat << 'END' > 
$HOME/ipxe/init.ipxe
#!ipxe prompt --key 0x02 --timeout 2000 Press Ctrl-B for the iPXE command line... && shell ||
dhcp || exit
set prefix file:///linux chain ${prefix}/boot.cfg || exit
END


“Dosya” indirme protokolünü etkinleştirin:

$ echo '#define DOWNLOAD_PROTO_FILE' > $HOME/ipxe/src/config/local/general.h


C derleyicisini ve ilgili araç ve kütüphaneleri kurun:

sudo dnf groupinstall -y "C Development Tools and Libraries"


Önyükleme yükleyicisini oluşturun:

$ cd $HOME/ipxe/src 
$ make clean
$ make bin-x86_64-efi/ipxe.efi EMBED=../init.ipxe

Yeni derlenen yükleme yükleyicisinin nerede olduğunu not edin. Bir sonraki bölüm için buna ihtiyacımız olacak:

$ IPXE_FILE="$HOME/ipxe/src/bin-x86_64-efi/ipxe.efi"

QEMU ile Test Etme

Bu bölüm isteğe bağlıdır, ancak netbooting için yapılandırmak üzere fiziksel makinelerinizde aşağıda gösterilen EFI sistem bölümünün dosya düzenini çoğaltmanız gerekir .


NOT: Ayrıca, tamamen disksiz bir sistem istiyorsanız, dosyaları bir TFTP sunucusuna kopyalayabilir ve DHCP’den bu sunucuya başvurabilirsiniz.

Açılış yükleyicimizi QEMU ile test etmek için yalnızca EFI sistem bölümünü ve başlangıç ​​dosyalarımızı içeren küçük bir disk görüntüsü oluşturacağız.

EFI sistem bölümü için gerekli dizin düzenini oluşturarak ve önceki bölümde oluşturduğumuz önyükleme yükleyicisini kopyalayarak başlayın:

$ mkdir -p $HOME/esp/efi/boot 
$ mkdir $HOME/esp/linux
$ cp $IPXE_FILE $HOME/esp/efi/boot/bootx64.efi


Aşağıdaki komut netboot imajımızın kullandığı çekirdek versiyonunu tanımlamalı ve kalan konfigürasyon direktiflerinde kullanılmak üzere bir değişkende saklamalıdır:

$ DEFAULT_VER=$(ls -c /fc28/lib/modules | head -n 1)


İstemci bilgisayarlarımızın kullanacağı önyükleme yapılandırmasını tanımlayın:

$ MY_DNS1=192.0.2.91 
$ MY_DNS2=192.0.2.92
$ MY_NFS4=server-01.example.edu $ cat << END >
$HOME/esp/linux/boot.cfg
#!ipxe
kernel --name kernel.efi \${prefix}/vmlinuz-$DEFAULT_VER
initrd=initrd.img ro ip=dhcp rd.peerdns=0
nameserver=$MY_DNS1 nameserver=$MY_DNS2 root=nfs4:$MY_NFS4:/fc28 console=tty0 console=ttyS0,115200n8 audit=0 selinux=0 quiet initrd --name initrd.img \${prefix}/initramfs-$DEFAULT_VER.img
boot || exit
END

NOT: Yukarıdaki önyükleme betiği, iPXE’in netboot Linux’a nasıl yükleneceğine ilişkin çok az bir örnek gösterir. Çok daha karmaşık yapılandırmalar mümkündür. En önemlisi, iPXE, varsayılan bir seçim ve bir zaman aşımı ile yapılandırılabilen etkileşimli önyükleme menülerini destekler. Daha gelişmiş bir iPXE betiği, örneğin, bir işletim sistemini yerel diskten önyüklemek için varsayılan ayar olabilir ve yalnızca bir geri sayım sayacı sıfıra ulaşmadan önce bir kullanıcı bir tuşa basarsa netboot işlemine gidebilir.

Linux çekirdeğini ve ilişkili initramfs’i EFI sistem bölümüne kopyalayın:

$ cp $(find /fc28/lib/modules -maxdepth 2 -name 'vmlinuz' | grep -m 1 $DEFAULT_VER) $HOME/esp/linux/vmlinuz-$DEFAULT_VER 
$ cp $(find /fc28/boot -name 'init*' | grep -m 1 $DEFAULT_VER) $HOME/esp/linux/initramfs-$DEFAULT_VER.img


Sonuçta ortaya çıkan dizin düzenimiz şöyle görünmelidir:

esp 
├── efi
│ └── boot
│ └── bootx64.efi
└── linux
├── boot.cfg
├── initramfs-4.18.18-200.fc28.x86_64.img
└── vmlinuz-4.18.18-200.fc28.x86_64

EFI sistem bölümümüzü QEMU ile kullanmak için, onu içeren küçük bir “uefi.img” disk görüntüsü oluşturmalı ve bunu birincil önyükleme sürücüsü olarak QEMU’ya bağlamamız gerekir.

Gerekli araçları yükleyerek başlayın:

$ sudo dnf install -y parted dosfstools


Şimdi “uefi.img” dosyasını oluşturun ve “esp” dizinindeki dosyaları içine kopyalayın:

$ ESP_SIZE=$(du -ks $HOME/esp | cut -f 1) 
$ dd if=/dev/zero of=$HOME/uefi.img count=$((${ESP_SIZE}+5000)) bs=1KiB $ UEFI_DEV=$(sudo losetup --show -f $HOME/uefi.img)
$ sudo parted ${UEFI_DEV} -s mklabel gpt mkpart EFI FAT16 1MiB 100% toggle 1 boot
$ mkfs -t msdos ${UEFI_DEV}p1
$ mkdir -p $HOME/mnt
$ sudo mount ${UEFI_DEV}p1 $HOME/mnt $ cp -r $HOME/esp/* $HOME/mnt
$ sudo umount $HOME/mnt
$ sudo losetup -d ${UEFI_DEV}

NOT: Fiziksel bir bilgisayarda, dosyaları yalnızca “esp” dizininden bilgisayarın mevcut EFI sistem bölümüne kopyalamanız gerekir.Fiziksel bir bilgisayarı önyüklemek için “uefi.img” dosyasına ihtiyacınız yoktur.

NOT: Fiziksel bir bilgisayarda, bu ada sahip bir dosya zaten varsa, “bootx64.efi” dosyasını yeniden adlandırabilirsiniz, ancak yaparsanız, muhtemelen bilgisayarın BIOS ayarlarını düzenlemeniz ve yeniden adlandırılan efi dosyasını önyüklemeye eklemeniz gerekir. liste.

Daha sonra qemu paketini kurmamız gerekiyor:

$ sudo dnf install -y qemu-system-x86


QEMU’nun bu eğitimin “İlk Yapılandırma” bölümünde oluşturduğumuz köprüye erişmesine izin verin:

$ sudo su - 
# echo 'allow br0' > /etc/qemu/bridge.conf
# exit


Sanal makinemizin kalıcı BIOS ayarlarını saklamak için “OVMF_VARS.fd” görüntüsünün bir kopyasını oluşturun:

$ cp /usr/share/edk2/ovmf/OVMF_VARS.fd $HOME


Şimdi sanal makineyi çalıştırın:

$ qemu-system-x86_64 -machine accel=kvm -nographic -m 1024 -drive if=pflash,format=raw,unit=0,file=/usr/share/edk2/ovmf/OVMF_CODE.fd,readonly=on -drive if=pflash,format=raw,unit=1,file=$HOME/OVMF_VARS.fd -drive if=ide,format=raw,file=$HOME/uefi.img -net bridge,br=br0 -net nic,model=virtio

Her şey yolunda giderse, aşağıdaki resimde gösterilene benzer sonuçlar görmelisiniz:


Sanal makineden çıkmak ve sunucuya geri dönmek için “shutdown” komutunu kullanabilirsiniz:

sudo shutdown -h now

İmaj Eklemek

İmaj eklemek, sunucudaki imaja chroot yapmak ve “dnf install <package_name>” çalıştıran basit bir konu olmalıdır.

Netboot görüntüsüne ne yüklenebileceğinin bir sınırı yoktur. Tam grafiksel kurulum mükemmel çalışmalıdır.

Minimal netboot imajımızı tam bir grafik kurulum haline getirmenin bir örneği:

# for i in dev dev/pts dev/shm proc sys run; do mount -o bind /$i /fc28/$i; done 
# chroot /fc28 /usr/bin/bash --login
# dnf -y groupinstall "Fedora Workstation"
# dnf -y remove gnome-initial-setup
# systemctl disable sshd.service
# systemctl enable gdm.service
# systemctl set-default graphical.target
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
# logout
# for i in run sys proc dev/shm dev/pts dev; do umount /fc28/$i; done


İsteğe bağlı olarak, “live user” hesabı için otomatik giriş özelliğini etkinleştirmek isteyebilirsiniz:

# sed -i '/daemon/a AutomaticLoginEnable=true' /fc28/etc/gdm/custom.conf 
# sed -i '/daemon/a AutomaticLogin=liveuser' /fc28/etc/gdm/custom.conf

Kaynak

Tarih:Linux