11.2. Суулгалт

Линуксийн хоёртын нийлэмж анхдагчаар идэвхтэй байдаггүй. Энэ ажиллагааг хамгийн хялбараар идэвхжүүлэхийн тулд линукс KLD обьектийг (“Kernel LoaDable обьект”) дуудах явдал юм. Та энэ модулийг дараах тушаалыг root эрхээр ажиллуулж дуудаж болно:

# kldload linux

Хэрэв та Линуксийн нийлэмжийг үргэлж идэвхжүүлэхийг хүсэж байгаа бол дараах мөрийг /etc/rc.conf файлд нэмэх хэрэгтэй:

linux_enable="YES"

KLD дуудагдсан эсэхийг шалгахын тулд kldstat(8) тушаалыг ашиглаж болно:

% kldstat
Id Refs Address    Size     Name
 1    2 0xc0100000 16bdb8   kernel
 7    1 0xc24db000 d000     linux.ko

Хэрэв ямар нэгэн шалтгаанаас болоод та KLD-г хүсэхгүй эсвэл дуудаж чадахгүй байгаа бол options COMPAT_LINUX тохируулгыг өөрийн цөмийн тохиргооны файлдаа нэмж Линуксийн хоёртын нийлэмжийг статикаар холбож болох юм. Дараа нь Бүлэг 9 хэсэгт тайлбарласны дагуу өөрийн шинэ цөмийг суулгах хэрэгтэй.

11.2.1. Линуксийн ажиллах үеийн сангуудыг суулгах нь

linux_base порт юм уу эсвэл тэдгээрийг гараар суулгах гэсэн хоёр аргын аль нэгээр үүнийг хийж болох юм.

11.2.1.1. linux_base портыг суулгаж ашиглах

Ажиллах үеийн сангуудыг суулгахад ашиглах хамгийн хялбар арга нь энэ юм. Энэ нь ямар нэгэн портыг Портын цуглуулгаас суулгаж байгаатай адил юм. Ердөө л доор дурдсаныг хийх хэрэгтэй:

# cd /usr/ports/emulators/linux_base-fc10
# make install distclean

Тэмдэглэл: FreeBSD 8.0-с өмнөх FreeBSD системүүд дээр та emulators/linux_base-f10-ийн оронд emulators/linux_base-fc4 портыг ашиглах ёстой.

Та одоо ажилладаг Линуксийн хоёртын нийлэмжтэй болсон байх ёстой. Зарим програмууд системийн сангуудын буруу бага хувилбаруудын талаар гомдоллож болох юм. Гэхдээ энэ нь ерөнхийдөө асуудал биш байдаг.

Тэмдэглэл: Төрөл бүрийн Линукс тархацуудын янз бүрийн хувилбаруудад тохирох emulators/linux_base портын олон хувилбарууд байж болох юм. Таны суулгахыг хүсэж байгаа Линуксийн програмуудын шаардлагыг аль болох ойр хангаж байгаа тийм портыг та суулгах шаардлагатай.

11.2.1.2. Сангуудыг гараар суулгах

Хэрэв та “портын” цуглуулга суулгаагүй бол сангуудыг гараар суулгаж болно. Програмын хамаардаг Линуксийн хуваалцсан сангууд болон ажиллах үеийн холбогч (linker) танд хэрэгтэй болно. Та бас “сүүдэр root” сан буюу /compat/linux санг өөрийн FreeBSD систем дээр Линуксийн сангуудад зориулж үүсгэх хэрэгтэй болно. FreeBSD дээр ажиллаж байгаа Линуксийн програмуудын онгойлгосон дурын хуваалцсан сангууд энэ модыг эхлээд хайдаг. Тэгэхээр хэрэв Линуксийн програм жишээ нь /lib/libc.so-г дуудвал FreeBSD эхлээд /compat/linux/lib/libc.so-г онгойлгохыг оролдох бөгөөд хэрэв байхгүй бол /lib/libc.so-г оролдох болно. Хуваалцсан сангууд нь Линуксийн ld.so тушаалаар гарч байгаа замуудад биш харин сүүдэр мод /compat/linux/lib-т суулгагдах ёстой.

Ерөнхийдөө таныг Линуксийн програм өөрийн FreeBSD системд суулгах эхний цөөхөн хэдэн удаад зөвхөн Линуксийн хоёртын файлуудын хамаардаг хуваалцсан сангуудыг хайх хэрэгтэй болно. Хэсэг хугацааны дараа та өөрийн систем дээрээ ямар нэгэн илүү ажиллагаагүйгээр шинээр импорт хийгдсэн Линуксийн хоёртын файлуудыг ажиллуулж чадах Линуксийн хуваалцсан сангуудын хангалттай олонлогтой болсон байх болно.

11.2.1.3. Нэмэлт хуваалцсан сангуудыг хэрхэн суулгах вэ

linux_base портыг суулгасан ч гэсэн таны програм хуваалцсан сангууд байхгүй байна гээд гомдоллоод байвал яах вэ? Линуксийн хоёртын файлуудад ямар хуваалцсан сангууд хэрэгтэйг яаж мэдэх вэ, тэдгээрийг хаанаас авах вэ? Үндсэндээ 2 боломж байдаг (эдгээр заавруудыг дагаж байхдаа та өөрийн FreeBSD систем дээрээ root байх хэрэгтэй болно).

Линукс системд хандах боломжтой бол програмд ямар хуваалцсан сангууд хэрэгтэйг мэдээд тэдгээрийг өөрийн FreeBSD систем уруу хуулах хэрэгтэй. Доорх жишээг харна уу:

Та FTP ашиглан Doom гэсэн Линуксийн хоёртын файлыг авч өөрөө хандаж болох Линукс систем дээрээ байрлуулсан гэж үзье. Та тэгээд үүний шаарддаг хуваалцсан сангуудыг ldd linuxdoom тушаал ашиглан иймэрхүүгээр шалгаж болно:

% ldd linuxdoom
libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0
libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0
libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29

Та сүүлийн баганад байгаа бүх файлуудыг авч эхний баганад байгаа нэрсийг тэдгээр уруу заасан симболын холбоосууд болгон /compat/linux дотор байрлуулах хэрэгтэй. Энэ нь та өөрийн FreeBSD системдээ эцсийн эцэст эдгээр файлуудтай болно гэсэн үг юм:

/compat/linux/usr/X11/lib/libXt.so.3.1.0
/compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0
/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29

Тэмдэглэл: Хэрэв та ldd тушаалын гаралтын эхний баганатай Линуксийн хуваалцсан сангийн гол залруулалтын дугаар таарсан тийм Линуксийн хуваалцсан сантай байгаа бол сүүлийн баганад байгаа файлуудыг өөрийн систем уруу хуулах шаардлагагүй бөгөөд танд байгаа чинь ажиллах ёстойг санаарай. Хэрэв шинэ хувилбар бол хуваалцсан санг ямар ч байсан хуулахыг зөвлөдөг. Та шинэ уруу заасан симболын холбоос үүсгэснийхээ дараа хуучинг устгаж болно. Тэгэхээр хэрэв эдгээр сангууд таны өөрийн системд байгаа:

/compat/linux/lib/libc.so.4.6.27
/compat/linux/lib/libc.so.4 -> libc.so.4.6.27

бөгөөд шинэ сан нь ldd тушаалын гаралтын дагуу сүүлийн хувилбарыг шаардана гэж байгааг мэдвэл:

libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29

Хэрэв төгсөж байгаа тоон дээр зөвхөн нэг юм уу эсвэл хоёр хувилбар хуучин байгаа бол /lib/libc.so.4.6.29-г бас хуулж санаагаа зовоогоод хэрэггүй бөгөөд програм нь нэлээн хуучин хувилбартай зүгээр ажиллах ёстой юм. Гэхдээ хэрэв та хүсэж байгаа бол libc.so-г ямар ч байсан гэсэн солихоор шийдэж болох бөгөөд энэ нь таныг доорхтой үлдээх болно:

/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29

Тэмдэглэл: Симболын холбоосын арга нь зөвхөн Линукс хоёртын файлуудад хэрэгтэй байдаг. FreeBSD-ийн ажиллах үеийн холбогч нь таарах гол залруулалтын дугааруудыг хайх талаар өөрөө санаа тавьдаг болохоор та санаа зовох хэрэггүй юм.

11.2.2. Линуксийн ELF хоёртын файлуудыг суулгах

ELF хоёртын файлууд нь заримдаа “branding” буюу “тамгалах” нэмэлт алхмыг шаарддаг. Хэрэв та тамгалаагүй ELF хоёртын файлыг ажиллуулахыг оролдвол доор дурдсантай төстэй алдааг хүлээн авах болно:

% ./my-linux-elf-binary
ELF binary type not known
Abort

FreeBSD цөмд FreeBSD ELF хоёртын файлыг Линуксийн хоёртын файлаас ялгахад туслахын тулд brandelf(1) хэрэгслийг ашиглана.

% brandelf -t Linux my-linux-elf-binary

Өнөөдөр GNU хэрэгслийн цуглуулга нь ELF хоёртын файлуудад автоматаар тохирох тамгалалтын мэдээллийг байрлуулдаг. Тэгэхээр энэ алхам нь ирээдүйд бараг л хэрэггүй болох ёстой юм.

11.2.3. RPM дээр тулгуурласан линуксын програм суулгах

FreeBSD нь өөрийн багцын өгөгдлийн сантай бөгөөд бүх портыг (Linux®-ийн портуудыг бас) хянахад ашиглагддаг. Linux-ийн RPM санг ашигладаггүй (дэмждэггүй).

Гэхдээ хэрэв та Linux-ийн RPM програм суулгах шаардлагатай бол үүнийг доорх аргаар хийж болно:

# cd /compat/linux
# rpm2cpio -q < /path/to/linux.archive.rpm | cpio -id

Дараа нь ELF хоёртын файлуудыг (сангуудыг биш!) brandelf хийх хэрэгтэй. Та суулгаснаа буцаж цэвэрхэн арилгаж чадахгүй боловч энэ нь тест хийхэд чинь хэрэг болж болох юм.

11.2.4. Хостын нэр танигчийг тохируулах

Хэрэв DNS ажиллахгүй байвал эсвэл та ийм мэдэгдэл хүлээн авбал:

resolv+: "bind" is an invalid keyword resolv+:
"hosts" is an invalid keyword

Та дараах мөрүүдийг агуулсан /compat/linux/etc/host.conf файлыг тохируулах хэрэгтэй болно:

order hosts, bind
multi on

Энд байгаа order нь /etc/hosts-г эхлээд хайж дараа нь DNS-ийг хайна гэж зааж байна. /compat/linux/etc/host.conf суугаагүй үед Линуксийн програмууд FreeBSD-ийн /etc/host.conf-г олж нийцгүй FreeBSD-ийн бичлэг байна гэж гомдоллох болно. Хэрэв та /etc/resolv.conf файл ашиглан нэрийн серверийг тохируулаагүй бол bind гэсэн үгийг устгах хэрэгтэй.

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

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