32.8. NFS root файлын систем ашиглан PXE ачаалалт хийх

Бичсэн Крэйг Родригэс.

Intel®-н Preboot eXecution Environment (PXE) буюу Ачаалалтаас өмнө ажиллуулах орчин нь үйлдлийн системийг сүлжээгээр ачаалах боломжийг олгодог. PXE дэмжлэг орчин үеийн эх хавтангуудын BIOS дээр ихэвчлэн хийгдсэн байдаг бөгөөд BIOS тохиргоонуудад үүнийг идэвхжүүлэн сүлжээгээр ачаалах боломжтой болгодог. Бүрэн хэмжээгээр ажиллах PXE тохиргоотой байхын тулд зөв тохируулсан DHCP болон TFTP сервертэй байхыг шаарддаг.

Хост компьютер ачаалахдаа DHCP-с TFTP ашиглан эхний ачаалагч дуудагчийг хаанаас авч болох мэдээллийг авдаг. Энэ мэдээллийг хост компьютер хүлээж авсныхаа дараа ачаалагч дуудагчийг TFTP-р татаж аван ажиллуулдаг. Үүнийг Preboot Execution Environment (PXE)-ийн тодорхойлолт хаягийн 2.2.1 хэсэг бичсэн байгаа. FreeBSD дээр PXE процессын явцад хүлээн авсан ачаалагч дуудагч нь /boot/pxeboot байна. /boot/pxeboot ажилласны дараа FreeBSD-н цөм дуудагддаг бөгөөд FreeBSD-н бусад ачаалалт хийгддэг. FreeBSD-н ачаалах процессын талаар дэлгэрэнгүйг Бүлэг 13 хэсгээс үзнэ үү.

32.8.1. NFS root файлын системд зориулж chroot орчин тохируулах

  1. FreeBSD суулгац байх NFS-р холбож болох санг сонгоно. Жишээ нь /b/tftpboot/FreeBSD/install гэх мэт санг ашиглаж болно.

    # export NFSROOTDIR=/b/tftpboot/FreeBSD/install
    # mkdir -p ${NFSROOTDIR}
    
  2. Хэсэг 30.3.2 хэсэг дэх зааврыг даган NFS серверийг идэвхжүүлнэ.

  3. Дараахийг /etc/exports файлд нэмэн NFS-р санг экспорт хийнэ:

    /b -ro -alldirs
    
  4. NFS серверийг дахин асаана:

    # /etc/rc.d/nfsd restart
    
  5. Хэсэг 30.2.2 хэсэгт заасан алхмуудын дагуу inetd(8)-г идэвхжүүлнэ.

  6. /etc/inetd.conf-д дараах мөрийг нэмнэ:

    tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /b/tftpboot
    
  7. inetd-г дахин асаана:

    # /etc/rc.d/inetd restart
    
  8. FreeBSD-н цөм болон хэрэглэгчийн талбарыг дахин бүтээнэ:

    # cd /usr/src
    # make buildworld
    # make buildkernel
    
  9. NFS-р холбогдсон санд FreeBSD-г суулгана:

    # make installworld DESTDIR=${NFSROOTDIR}
    # make installkernel DESTDIR=${NFSROOTDIR}
    # make distribution DESTDIR=${NFSROOTDIR}
    
  10. TFTP ажиллаж байгааг болон PXE-р дамжин ачаалагч дуудагчийг татаж авч байгаа эсэхийг шалгана:

    # tftp localhost
    tftp> get FreeBSD/install/boot/pxeboot
    Received 264951 bytes in 0.1 seconds
    
  11. ${NFSROOTDIR}/etc/fstab-г засварлан root файлын системийг NFS-р холбох мөрийг үүсгэнэ:

    # Device                                         Mountpoint    FSType   Options  Dump Pass
    myhost.example.com:/b/tftpboot/FreeBSD/install       /         nfs      ro        0    0
    

    myhost.example.com гэдгийг таны өөрийн NFS серверийн IP хаяг эсвэл хостын нэрээр солих хэрэгтэй. Энэ жишээн дээр NFS хэрэглэгчид root файлын системийн агуулгыг устгачих магадлалаас хамгаалж root файлын системийг "зөвхөн унших" эрхээр холбосон байгаа.

  12. chroot(8) орчинд root нууц үгийг тохируулна.

    # chroot ${NFSROOTDIR}
    # passwd
    

    Энэ нь PXE-р ачаалж байгаа хэрэглэгч машинуудад зориулж root нууц үгийг тохируулах болно.

  13. ${NFSROOTDIR}/etc/ssh/sshd_config файлыг засварлан PermitRootLogin гэдгийг идэвхжүүлж PXE-р ачаалж байгаа хэрэглэгч машинуудад зориулж ssh-р дамжин root хэрэглэгч нэвтрэх боломжийг бүрдүүлнэ. Үүнийг sshd_config(5)-д тайлбарласан байгаа.

  14. ${NFSROOTDIR} дахь chroot(8) орчинд бусад өөрчлөлтүүдийг хийнэ. Эдгээр өөрчлөлтүүдэд pkg_add(1) ашиглан багцууд нэмэх, vipw(8), ашиглан нууц үгийн файлыг засварлах, эсвэл автоматаар холбохын тулд amd.conf(5) харгалзааг засварлах зэрэг орж болно. Жишээ нь:

    # chroot ${NFSROOTDIR}
    # pkg_add -r bash
    

32.8.2. /etc/rc.initdiskless ашигладаг Санах Ойн Файлын системийг тохируулах

Хэрэв та NFS root-с ачаалсан бол /etc/rc нь NFS-ээр ачаалсныг мэдэж /etc/rc.initdiskless скриптийг ажиллуулдаг. Юу болж байгааг энэ скрипт доторх тайлбаруудыг уншиж мэдээрэй. Бид /etc болон /var гэсэн санах ой дээр тулгуурласан файлын систем үүсгэх хэрэгтэй, учир нь NFS root сан нь зөвхөн уншигдах эрхтэй бөгөөд эдгээр сангууд нь бичигдэх боломжтой байх ёстой.

# chroot ${NFSROOTDIR}
# mkdir -p conf/base
# tar -c -v -f conf/base/etc.cpio.gz --format cpio --gzip etc
# tar -c -v -f conf/base/var.cpio.gz --format cpio --gzip var

Систем ачаалахад /etc болон /var-д зориулсан санах ойн файлын системүүд үүсч холбогдох бөгөөд cpio.gz файлуудын агуулга тэдгээр рүү хуулагдах болно.

32.8.3. DHCP сервер тохируулах

PXE нь TFTP болон DHCP сервер тохируулсан байхыг шаарддаг. DHCP сервер нь TFTP сервер байгаа машин дээр заавал байх шаардлагагүй бөгөөд таны сүлжээнээс хандаж болох боломжтой байх ёстой.

  1. Хэсэг 30.5.7 заасан зааврын дагуу DHCP серверийг суулгана. /etc/rc.conf болон /usr/local/etc/dhcpd.conf файлуудыг зөв тохируулсан эсэхийг шалгаарай.

  2. /usr/local/etc/dhcpd.conf файлын next-server, filename, болон option root-path тохиргоонуудад TFTP-н IP хаяг, TFTP дэх /boot/pxeboot хүрэх зам болон NFS root файлын системийн замыг зааж өгнө. Жишээ dhcpd.conf файл ийм байна:

    subnet 192.168.0.0 netmask 255.255.255.0 {
       range 192.168.0.2 192.168.0.3 ;
       option subnet-mask 255.255.255.0 ;
       option routers 192.168.0.1 ;
       option broadcast-address 192.168.0.255 ;
       option domain-name-server 192.168.35.35, 192.168.35.36 ;
       option domain-name "example.com";
    
       # IP address of TFTP server
       next-server 192.168.0.1 ;
    
       # path of boot loader obtained
       # via tftp
       filename "FreeBSD/install/boot/pxeboot" ;
    
       # pxeboot boot loader will try to NFS mount this directory for root FS
       option root-path "192.168.0.1:/b/tftpboot/FreeBSD/install/" ;
    
    }
    

32.8.4. PXE хэрэглэгчийг тохируулах ба холболтын үеийн асуудлуудад дибаг хийх

  1. Хэрэглэгч машин ачаалахдаа BIOS тохиргооны цэс рүү орно. Сүлжээнээс ачаалахыг BIOS-д тохируулна. Хэрэв өмнөх бүх алхмууд зөв бол бүгд "зүгээр л ажиллах ёстой".

  2. PXE ачаалах процессын явцад үүсэх сүлжээний урсгалыг дибаг хийхийн тулд net/wireshark-г ашиглаарай. Үүнийг доорх диаграм дээр дүрсэлсэн байгаа. Хэсэг 32.8.3 хэсэгт жишээ тохиргоог харуулсан бөгөөд DHCP, TFTP ба NFS серверүүд нь нэг машин дээр байна. Гэхдээ эдгээр серверүүд нь өөр өөр машин дээр байж болно.

    Зураг 32-1. NFS root холболт ашиглан PXE ачаалах процесс

    (1)
    Клиент DHCPDISCOVER цацна.
    (2)
    DHCP сервер IP хаяг, next-server, filename, болон root-path-н хамтаар хариу өгнө.
    (3)
    Клиент next-serverfilename-г авахаар TFTP хүсэлт явуулна.
    (4)
    TFTP сервер клиент рүү хариу өгч filename-г илгээнэ.
    (5)
    Клиент filename-г ажиллуулах бөгөөд энэ нь pxeboot(8) юм. pxeboot(8) нь цөмийг дуудна. Цөм ажиллах үед root-path-р заагдсан root файлын систем NFS-р холбогдоно.
  3. pxebootTFTP-р авч болж байгаа эсэхийг шалгаарай. TFTP сервер дээрээ /var/log/xferlog файлыг нээж харан pxeboot файл зөв газраас татагдаж байгаа эсэхийг шалгаарай. Дээрх dhcpd.conf файлын тохиргоог шалгахын тулд:

    # tftp 192.168.0.1
    tftp> get FreeBSD/install/boot/pxeboot
    Received 264951 bytes in 0.1 seconds
    

    tftpd(8) ба tftp(1) гарын авлагын хуудаснуудыг уншаарай. TFTP-н зарим нэг хязгаарлалтуудыг BUGS хэсэгт тайлбарласан байгаа.

  4. root файлын системийг NFS-р холбож болж байгаа эсэхийг шалгаарай. Дээрх dhcpd.conf файлын тохиргоог шалгахын тулд:

    # mount -t nfs 192.168.0.1:/b/tftpboot/FreeBSD/install /mnt
    
  5. boot.nfsroot.server болон boot.nfsroot.path гэх мэт хувьсагчуудыг pxeboot дуудагч хэрхэн тохируулдагийг src/sys/boot/i386/libi386/pxe.c файлын кодыг уншиж ойлгоорой. Эдгээр хувьсагчууд дараагаар нь src/sys/nfsclient/nfs_diskless.c файлын NFS-р дискгүй root холбох кодод ашиглагддаг.

  6. pxeboot(8) болон loader(8) гарын авлагын хуудаснуудыг уншина уу.

Энэ болон бусад баримтуудыг ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ хаягаас татаж авч болно.

FreeBSD-ийн талаар <questions@FreeBSD.org> хаягтай холбоо барихаасаа өмнө баримтыг уншина уу.
Энэ бичиг баримттай холбоотой асуулт байвал <doc@FreeBSD.org> хаягаар цахим захидал явуулна уу.
Энэ бичиг баримтын орчуулгатай холбоотой асуулт байвал <admin@mnbsd.org> хаягаар цахим захидал явуулна уу.