32.8. NFS root файлын систем ашиглан PXE ачаалалт хийх
Өмнөх | Бүлэг 32. Сүлжээний нэмэлт ойлголтууд | Дараах

## 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, FreeBSD-ийн Ачаалах процесс хэсгээс үзнэ үү.

### 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-н тохиргоог хийх» хэсэг дэх зааврыг даган NFS серверийг идэвхжүүлнэ.

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

   /b -ro -alldirs

4. NFS серверийг дахин асаана:

   `#` `service 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-г дахин асаана:

   `#` `service 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 Серверийг Суулгах болон Тохируулах» заасан зааврын дагуу 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 сервер тохируулах» хэсэгт жишээ тохиргоог харуулсан бөгөөд DHCP, TFTP ба NFS серверүүд нь нэг машин дээр байна. Гэхдээ эдгээр серверүүд нь өөр өөр машин дээр байж болно.

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

   | Клиент DHCPDISCOVER цацна.
   | DHCP сервер IP хаяг, `next-server`, `filename`, болон `root-path`-н хамтаар хариу өгнө.
   | Клиент `next-server`-с `filename`-г авахаар TFTP хүсэлт явуулна.
   | TFTP сервер клиент рүү хариу өгч `filename`-г илгээнэ.
   | Клиент `filename`-г ажиллуулах бөгөөд энэ нь pxeboot(8) юм. pxeboot(8) нь цөмийг дуудна. Цөм ажиллах үед `root-path`-р заагдсан root файлын систем NFS-р холбогдоно.

3. `pxeboot`-г TFTP-р авч болж байгаа эсэхийг шалгаарай. 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) гарын авлагын хуудаснуудыг уншина уу.

Өмнөх | Дээш | Дараах
32.7. Дискгүй ажиллагаа | Эхлэл | 32.9. ISDN

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

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