doc/documentation/content/mn/books/handbook/linuxemu/_index.adoc
Sergio Carlavilla Delgado 989d921f5d Migrate doc to Hugo/AsciiDoctor
I'm very pleased to announce the release of
our new website and documentation using
the new toolchain with Hugo and AsciiDoctor.

To get more information about the new toolchain
please read the FreeBSD Documentation Project Primer[1],
Hugo docs[2] and AsciiDoctor docs[3].

Acknowledgment:
Benedict Reuschling <bcr@>
Glen Barber <gjb@>
Hiroki Sato <hrs@>
Li-Wen Hsu <lwhsu@>
Sean Chittenden <seanc@>
The FreeBSD Foundation

[1] https://docs.FreeBSD.org/en/books/fdp-primer/
[2] https://gohugo.io/documentation/
[3] https://docs.asciidoctor.org/home/

Approved by:    doceng, core
2021-01-26 00:31:29 +01:00

855 lines
57 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Бүлэг 11. Линуксийн Хоёртын Нийлэмж
part: хэсэг II. Нийтлэг асуудлууд
prev: books/handbook/printing
next: books/handbook/partiii
---
[[linuxemu]]
= Линуксийн Хоёртын Нийлэмж
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
:skip-front-matter:
:toc-title: Гарчиг
:table-caption: Хүснэгт
:figure-caption: Зураг
:example-caption: Жишээ
:xrefstyle: basic
:relfileprefix: ../
:outfilesuffix:
:sectnumoffset: 11
ifeval::["{backend}" == "html5"]
:imagesdir: ../../../images/books/handbook/linuxemu/
endif::[]
ifeval::["{backend}" == "pdf"]
:imagesdir: ../../../../static/images/books/handbook/linuxemu/
endif::[]
ifeval::["{backend}" == "epub3"]
:imagesdir: ../../../../static/images/books/handbook/linuxemu/
endif::[]
include::shared/authors.adoc[]
include::shared/releases.adoc[]
include::shared/mn/mailing-lists.adoc[]
include::shared/mn/teams.adoc[]
include::shared/mn/urls.adoc[]
toc::[]
[[linuxemu-synopsis]]
== Ерөнхий агуулга
FreeBSD нь Линуксийг оруулаад хэд хэдэн бусад UNIX(R) төст үйлдлийн системүүдтэй хоёртын нийлэмжтэй байдаг. Та магадгүй FreeBSD яагаад Линукс хоёртын файлуудыг ажиллуулж чаддаг байх хэрэгтэй вэ? гэж өөрөөсөө асууж болох юм. Энэ асуултын хариулт их энгийн. Линукс нь тооцоолох ертөнц дэх хамгийн сүүлийн үеийн "халуун зүйл" болохоор олон компаниуд болон хөгжүүлэгчид зөвхөн Линуксд зориулж хөгжүүлдэг. Тэгэхээр бидний FreeBSD хэрэглэгчид эдгээр компаниуд болон хөгжүүлэгчдээс өөрсдийн програмууддаа зориулж FreeBSD-ийн хувилбарууд бичихийг шалгаахаас өөр аргагүйд хүргэдэг. Гол асуудал нь эдгээр компаниудын ихэнх нь өөрсдийнх нь бүтээгдэхүүн бас FreeBSD дээрх хувилбартай байсан бол хэр олон хүмүүс ашиглахыг яг үнэндээ бодож байгаагүй бөгөөд ихэнх нь зөвхөн Линуксд зориулж хөгжүүлэлт хийсээр байдаг. Тэгэхээр FreeBSD хэрэглэгчид юу хийх вэ? Яг энэ үед Линуксийн хоёртын нийлэмж хэрэг болдог билээ.
Товчхондоо нийлэмж нь FreeBSD хэрэглэгчдэд Линуксийн бүх програмуудын ойролцоогоор 90%-ийг засваргүйгээр ажиллуулах боломжийг олгодог. Эдгээрт StarOffice(TM), man:getenv[3]-ийн Линуксийн хувилбар, Adobe(R) Acrobat(R), RealPlayer(R), Oracle(R), WordPerfect(R), Doom, Quake зэрэг олон програмууд орно. Зарим тохиолдолд Линуксийн хоёртын файлууд нь Линукс дээр байгаагаас илүү хурдан FreeBSD дээр ажилладаг тохиолдол гарсан байна.
Гэхдээ зарим нэг Линуксд зөвхөн зориулагдсан үйлдлийн системийн боломжууд FreeBSD дээр дэмжигдээгүй байдаг. Хэрэв Линуксийн хоёртын файлууд нь виртуал 8086 горимыг идэвхжүүлэх зэрэг зөвхөн i386(TM)-д зориулсан дуудлагуудыг ихээр ашиглаж байгаа үед ажилладаггүй.
Энэ бүлгийг уншиж дууссаны дараа та дараах зүйлсийг мэдэх болно:
* Өөрийн систем дээр Линуксийн хоёртын нийлэмжийг хэрхэн идэвхжүүлэх талаар.
* Линуксийн нэмэлт хуваалцсан сангуудыг хэрхэн суулгах талаар.
* Өөрийн FreeBSD систем дээр Линуксийн програмуудыг хэрхэн суулгах талаар.
* FreeBSD дээрх Линуксийн нийлэмжийн шийдлийн нарийн учруудын талаар.
Энэ бүлгийг уншихаасаа өмнө, та дараах зүйлсийг мэдэх шаардлагатай:
* Гуравдагчдын бүтээсэн програм хангамжуудыг хэрхэн суулгах талаар мэдэх (crossref:ports[ports,Програм суулгах. Багцууд болон портууд]).
[[linuxemu-lbc-install]]
== Суулгалт
Линуксийн хоёртын нийлэмж анхдагчаар идэвхтэй байдаггүй. Энэ ажиллагааг хамгийн хялбараар идэвхжүүлэхийн тулд `линукс` KLD обьектийг ("Kernel LoaDable обьект") дуудах явдал юм. Та энэ модулийг дараах тушаалыг `root` эрхээр ажиллуулж дуудаж болно:
[source,bash]
....
# kldload linux
....
Хэрэв та Линуксийн нийлэмжийг үргэлж идэвхжүүлэхийг хүсэж байгаа бол дараах мөрийг [.filename]#/etc/rc.conf# файлд нэмэх хэрэгтэй:
[.programlisting]
....
linux_enable="YES"
....
KLD дуудагдсан эсэхийг шалгахын тулд man:kldstat[8] тушаалыг ашиглаж болно:
[source,bash]
....
% kldstat
Id Refs Address Size Name
1 2 0xc0100000 16bdb8 kernel
7 1 0xc24db000 d000 linux.ko
....
Хэрэв ямар нэгэн шалтгаанаас болоод та KLD-г хүсэхгүй эсвэл дуудаж чадахгүй байгаа бол `options COMPAT_LINUX` тохируулгыг өөрийн цөмийн тохиргооны файлдаа нэмж Линуксийн хоёртын нийлэмжийг статикаар холбож болох юм. Дараа нь crossref:kernelconfig[kernelconfig,FreeBSD цөмийг тохируулах нь] хэсэгт тайлбарласны дагуу өөрийн шинэ цөмийг суулгах хэрэгтэй.
=== Линуксийн ажиллах үеийн сангуудыг суулгах нь
<<linuxemu-libs-port,linux_base>> порт юм уу эсвэл тэдгээрийг <<linuxemu-libs-manually,гараар>> суулгах гэсэн хоёр аргын аль нэгээр үүнийг хийж болох юм.
[[linuxemu-libs-port]]
==== linux_base портыг суулгаж ашиглах
Ажиллах үеийн сангуудыг суулгахад ашиглах хамгийн хялбар арга нь энэ юм. Энэ нь ямар нэгэн портыг crossref:ports[ports,Портын цуглуулга]ас суулгаж байгаатай адил юм. Ердөө л доор дурдсаныг хийх хэрэгтэй:
[source,bash]
....
# cd /usr/ports/emulators/linux_base-fc10
# make install distclean
....
[NOTE]
====
FreeBSD 8.0-с өмнөх FreeBSD системүүд дээр та package:emulators/linux_base-f10[]-ийн оронд package:emulators/linux_base-fc4[] портыг ашиглах ёстой.
====
Та одоо ажилладаг Линуксийн хоёртын нийлэмжтэй болсон байх ёстой. Зарим програмууд системийн сангуудын буруу бага хувилбаруудын талаар гомдоллож болох юм. Гэхдээ энэ нь ерөнхийдөө асуудал биш байдаг.
[NOTE]
====
Төрөл бүрийн Линукс тархацуудын янз бүрийн хувилбаруудад тохирох package:emulators/linux_base[] портын олон хувилбарууд байж болох юм. Таны суулгахыг хүсэж байгаа Линуксийн програмуудын шаардлагыг аль болох ойр хангаж байгаа тийм портыг та суулгах шаардлагатай.
====
[[linuxemu-libs-manually]]
==== Сангуудыг гараар суулгах
Хэрэв та "портын" цуглуулга суулгаагүй бол сангуудыг гараар суулгаж болно. Програмын хамаардаг Линуксийн хуваалцсан сангууд болон ажиллах үеийн холбогч (linker) танд хэрэгтэй болно. Та бас "сүүдэр root" сан буюу [.filename]#/compat/linux# санг өөрийн FreeBSD систем дээр Линуксийн сангуудад зориулж үүсгэх хэрэгтэй болно. FreeBSD дээр ажиллаж байгаа Линуксийн програмуудын онгойлгосон дурын хуваалцсан сангууд энэ модыг эхлээд хайдаг. Тэгэхээр хэрэв Линуксийн програм жишээ нь [.filename]#/lib/libc.so#-г дуудвал FreeBSD эхлээд [.filename]#/compat/linux/lib/libc.so#-г онгойлгохыг оролдох бөгөөд хэрэв байхгүй бол [.filename]#/lib/libc.so#-г оролдох болно. Хуваалцсан сангууд нь Линуксийн `ld.so` тушаалаар гарч байгаа замуудад биш харин сүүдэр мод [.filename]#/compat/linux/lib#-т суулгагдах ёстой.
Ерөнхийдөө таныг Линуксийн програм өөрийн FreeBSD системд суулгах эхний цөөхөн хэдэн удаад зөвхөн Линуксийн хоёртын файлуудын хамаардаг хуваалцсан сангуудыг хайх хэрэгтэй болно. Хэсэг хугацааны дараа та өөрийн систем дээрээ ямар нэгэн илүү ажиллагаагүйгээр шинээр импорт хийгдсэн Линуксийн хоёртын файлуудыг ажиллуулж чадах Линуксийн хуваалцсан сангуудын хангалттай олонлогтой болсон байх болно.
==== Нэмэлт хуваалцсан сангуудыг хэрхэн суулгах вэ
[.filename]#linux_base# портыг суулгасан ч гэсэн таны програм хуваалцсан сангууд байхгүй байна гээд гомдоллоод байвал яах вэ? Линуксийн хоёртын файлуудад ямар хуваалцсан сангууд хэрэгтэйг яаж мэдэх вэ, тэдгээрийг хаанаас авах вэ? Үндсэндээ 2 боломж байдаг (эдгээр заавруудыг дагаж байхдаа та өөрийн FreeBSD систем дээрээ `root` байх хэрэгтэй болно).
Линукс системд хандах боломжтой бол програмд ямар хуваалцсан сангууд хэрэгтэйг мэдээд тэдгээрийг өөрийн FreeBSD систем уруу хуулах хэрэгтэй. Доорх жишээг харна уу:
Та FTP ашиглан Doom гэсэн Линуксийн хоёртын файлыг авч өөрөө хандаж болох Линукс систем дээрээ байрлуулсан гэж үзье. Та тэгээд үүний шаарддаг хуваалцсан сангуудыг `ldd linuxdoom` тушаал ашиглан иймэрхүүгээр шалгаж болно:
[source,bash]
....
% 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
....
Та сүүлийн баганад байгаа бүх файлуудыг авч эхний баганад байгаа нэрсийг тэдгээр уруу заасан симболын холбоосууд болгон [.filename]#/compat/linux# дотор байрлуулах хэрэгтэй. Энэ нь та өөрийн FreeBSD системдээ эцсийн эцэст эдгээр файлуудтай болно гэсэн үг юм:
[source,bash]
....
/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
....
[NOTE]
====
Хэрэв та `ldd` тушаалын гаралтын эхний баганатай Линуксийн хуваалцсан сангийн гол залруулалтын дугаар таарсан тийм Линуксийн хуваалцсан сантай байгаа бол сүүлийн баганад байгаа файлуудыг өөрийн систем уруу хуулах шаардлагагүй бөгөөд танд байгаа чинь ажиллах ёстойг санаарай. Хэрэв шинэ хувилбар бол хуваалцсан санг ямар ч байсан хуулахыг зөвлөдөг. Та шинэ уруу заасан симболын холбоос үүсгэснийхээ дараа хуучинг устгаж болно. Тэгэхээр хэрэв эдгээр сангууд таны өөрийн системд байгаа:
[source,bash]
....
/compat/linux/lib/libc.so.4.6.27
/compat/linux/lib/libc.so.4 -> libc.so.4.6.27
....
бөгөөд шинэ сан нь `ldd` тушаалын гаралтын дагуу сүүлийн хувилбарыг шаардана гэж байгааг мэдвэл:
[source,bash]
....
libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29
....
Хэрэв төгсөж байгаа тоон дээр зөвхөн нэг юм уу эсвэл хоёр хувилбар хуучин байгаа бол [.filename]#/lib/libc.so.4.6.29#-г бас хуулж санаагаа зовоогоод хэрэггүй бөгөөд програм нь нэлээн хуучин хувилбартай зүгээр ажиллах ёстой юм. Гэхдээ хэрэв та хүсэж байгаа бол [.filename]#libc.so#-г ямар ч байсан гэсэн солихоор шийдэж болох бөгөөд энэ нь таныг доорхтой үлдээх болно:
[source,bash]
....
/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29
....
====
[NOTE]
====
Симболын холбоосын арга нь _зөвхөн_ Линукс хоёртын файлуудад хэрэгтэй байдаг. FreeBSD-ийн ажиллах үеийн холбогч нь таарах гол залруулалтын дугааруудыг хайх талаар өөрөө санаа тавьдаг болохоор та санаа зовох хэрэггүй юм.
====
=== Линуксийн ELF хоёртын файлуудыг суулгах
ELF хоёртын файлууд нь заримдаа "branding" буюу "тамгалах" нэмэлт алхмыг шаарддаг. Хэрэв та тамгалаагүй ELF хоёртын файлыг ажиллуулахыг оролдвол доор дурдсантай төстэй алдааг хүлээн авах болно:
[source,bash]
....
% ./my-linux-elf-binary
ELF binary type not known
Abort
....
FreeBSD цөмд FreeBSD ELF хоёртын файлыг Линуксийн хоёртын файлаас ялгахад туслахын тулд man:brandelf[1] хэрэгслийг ашиглана.
[source,bash]
....
% brandelf -t Linux my-linux-elf-binary
....
Өнөөдөр GNU хэрэгслийн цуглуулга нь ELF хоёртын файлуудад автоматаар тохирох тамгалалтын мэдээллийг байрлуулдаг. Тэгэхээр энэ алхам нь ирээдүйд бараг л хэрэггүй болох ёстой юм.
=== RPM дээр тулгуурласан линуксын програм суулгах
FreeBSD нь өөрийн багцын өгөгдлийн сантай бөгөөд бүх портыг (Linux(R)-ийн портуудыг бас) хянахад ашиглагддаг. Linux(R)-ийн RPM санг ашигладаггүй (дэмждэггүй).
Гэхдээ хэрэв та Linux(R)-ийн RPM програм суулгах шаардлагатай бол үүнийг доорх аргаар хийж болно:
[source,bash]
....
# cd /compat/linux
# rpm2cpio -q < /path/to/linux.archive.rpm | cpio -id
....
Дараа нь ELF хоёртын файлуудыг (сангуудыг биш!) brandelf хийх хэрэгтэй. Та суулгаснаа буцаж цэвэрхэн арилгаж чадахгүй боловч энэ нь тест хийхэд чинь хэрэг болж болох юм.
=== Хостын нэр танигчийг тохируулах
Хэрэв DNS ажиллахгүй байвал эсвэл та ийм мэдэгдэл хүлээн авбал:
[source,bash]
....
resolv+: "bind" is an invalid keyword resolv+:
"hosts" is an invalid keyword
....
Та дараах мөрүүдийг агуулсан [.filename]#/compat/linux/etc/host.conf# файлыг тохируулах хэрэгтэй болно:
[.programlisting]
....
order hosts, bind
multi on
....
Энд байгаа order нь [.filename]#/etc/hosts#-г эхлээд хайж дараа нь DNS-ийг хайна гэж зааж байна. [.filename]#/compat/linux/etc/host.conf# суугаагүй үед Линуксийн програмууд FreeBSD-ийн [.filename]#/etc/host.conf#-г олж нийцгүй FreeBSD-ийн бичлэг байна гэж гомдоллох болно. Хэрэв та [.filename]#/etc/resolv.conf# файл ашиглан нэрийн серверийг тохируулаагүй бол `bind` гэсэн үгийг устгах хэрэгтэй.
[[linuxemu-mathematica]]
== Mathematica(R) суулгах нь
Энэ баримт нь Mathematica(R) 5.X-ийн Линукс хувилбарыг FreeBSD систем уруу суулгах процессийг тайлбарлах болно.
Mathematica(R) эсвэл Mathematica(R) for Students-ийн Линуксийн хувилбарыг http://www.wolfram.com/[http://www.wolfram.com/] дэх Wolfram-аас захиалж болно.
=== Mathematica(R) суулгагчийг ажиллуулах
Эхлээд Mathematica(R)-ийн Линукс хоёртын файлууд Линуксийн ABI-г ашиглана гэдгийг та FreeBSD-д хэлж өгөх хэрэгтэй. Ингэж хийх хамгийн хялбар арга бол бүх тамгалаагүй хоёртын файлуудын хувьд анхдагч ELF тамгалалтыг Линукс болгон дараах тушаалаар тохируулах явдал юм:
[source,bash]
....
# sysctl kern.fallback_elf_brand=3
....
Энэ нь тамгалаагүй ELF хоёртын файлууд Линуксийн ABI-г ашиглана гэж бодоход FreeBSD-г хүргэх бөгөөд та суулгагчийг CDROM-оос шууд ажиллуулах боломжтой болох ёстой.
Одоо [.filename]#MathInstaller# файлыг өөрийн хатуу хөтөч уруу хуулах хэрэгтэй:
[source,bash]
....
# mount /cdrom
# cp /cdrom/Unix/Installers/Linux/MathInstaller /localdir/
....
бөгөөд энэ файл дахь эхний мөрний `/bin/sh`-г `/compat/linux/bin/sh` гэж солих хэрэгтэй. Энэ нь суулгагч man:sh[1]-ийн Линуксийн хувилбарыг ажиллуулахаар болгож байгаа юм. Дараа нь `Linux)` гэсэн бүгдийг `FreeBSD)` гэдгээр текст засварлагчаар юм уу эсвэл доорх дараагийн хэсэгт байгаа скриптээр солих хэрэгтэй. Үйлдлийн системийг тодорхойлохын тулд `uname -s` тушаалыг дууддаг Mathematica(R) суулгагчид FreeBSD-г Линукс төст үйлдлийн систем гэж үзэхийг энэ нь хэлж өгнө. `MathInstaller`-г ажиллуулахад одоо Mathematica(R)-г суулгах болно.
=== Mathematica(R)-ийн ажиллуулах боломжтой файлуудыг өөрчлөх
Суулгах явцад Mathematica(R)-ийн үүсгэсэн бүрхүүлийн скриптүүдийг ашиглахаасаа өмнө өөрчлөх хэрэгтэй. Хэрэв та Mathematica(R)-ийн ажиллуулах боломжтой файлуудыг байрлуулах санд [.filename]#/usr/local/bin#-г сонгосон бол та энэ санд [.filename]#math#, [.filename]#mathematica#, [.filename]#Mathematica#, болон [.filename]#MathKernel# гэж нэрлэгдсэн файлууд уруу заагдсан симболын холбоосуудыг олох болно. Эдгээр бүрт `Linux)` гэдгийг `FreeBSD)` гэдгээр текст засварлагчаар юм уу эсвэл доорх бүрхүүлийн скриптээр солих хэрэгтэй:
[.programlisting]
....
#!/bin/sh
cd /usr/local/bin
for i in math mathematica Mathematica MathKernel
do sed 's/Linux)/FreeBSD)/g' $i > $i.tmp
sed 's/\/bin\/sh/\/compat\/linux\/bin\/sh/g' $i.tmp > $i
rm $i.tmp
chmod a+x $i
done
....
=== Өөрийн Mathematica(R) нууц үгийг олж авах
Mathematica(R)-г эхний удаа эхлүүлэхэд танаас нууц үг асуух болно. Хэрэв та Wolfram-аас нууц үгээ авч амжаагүй байгаа бол өөрийн "машины ID"-г авахын тулд суулгацын санд `mathinfo`-г ажиллуулах хэрэгтэй. Энэ машины ID нь таны эхний Ethernet картны MAC хаяг дээр тулгуурласан болохоор Mathematica(R)-ийн өөрийн хуулбарыг та өөр машинууд дээр ажиллуулж чадахгүй юм.
Wolfram-д цахим захидлаар ч юм уу эсвэл утас, факсаар бүртгүүлэх үедээ та "машины ID"-аа тэдэнд өгөх бөгөөд тэд бүлэг тоонуудаас тогтох харгалзах нууц үг бүхий хариу өгөх болно.
=== Mathematica(R) нүүрэн хэсгийг сүлжээгээр ажиллуулах
Mathematica(R) нь тэмдэгтүүдийг үзүүлэхийн тулд аль ч стандарт үсгийн маягуудын олонлогуудад байдаггүй тусгай үсгийн маягуудыг ашигладаг (интегралууд, нийлбэрүүд, Грек үсгүүд гэх мэт.). X протокол нь эдгээр үсгийн маягуудыг _өөр дээрээ_ локалаар суулгахыг шаарддаг. Энэ нь CDROM юм уу эсвэл Mathematica(R) суулгагдсан хостоос эдгээр үсгийн маягуудын хуулбарыг өөрийн локал машин уруу хуулна гэсэн үг юм. Эдгээр үсгийн маягууд нь CDROM-ийн [.filename]#/cdrom/Unix/Files/SystemFiles/Fonts# сан, эсвэл таны хатуу хөтчийн [.filename]#/usr/local/mathematica/SystemFiles/Fonts# санд ихэвчлэн хадгалагддаг. Үсгийн жинхэнэ маягууд нь [.filename]#Type1# болон [.filename]#X# дэд сангуудад байрладаг. Доор тайлбарласан тэдгээрийг ашиглах хэд хэдэн аргууд байдаг.
Эхний арга нь тэдгээрийг [.filename]#/usr/X11R6/lib/X11/fonts# дахь байгаа үсгийн маягийн сангуудын аль нэг уруу хуулах явдал юм. Энэ нь үсгийн маягийн нэрсийг нэмж, эхний мөрөн дээр үсгийн маягуудын тоог өөрчилж [.filename]#fonts.dir# файлыг засварлахыг шаардана. Мөн өөрөөр та тэдгээрийг хуулсан санд man:mkfontdir[1] тушаалыг ажиллуулж бас чадах ёстой юм.
Үүнийг хийх хоёр дахь арга нь сангуудыг [.filename]#/usr/X11R6/lib/X11/fonts# уруу хуулах явдал юм:
[source,bash]
....
# cd /usr/X11R6/lib/X11/fonts
# mkdir X
# mkdir MathType1
# cd /cdrom/Unix/Files/SystemFiles/Fonts
# cp X/* /usr/X11R6/lib/X11/fonts/X
# cp Type1/* /usr/X11R6/lib/X11/fonts/MathType1
# cd /usr/X11R6/lib/X11/fonts/X
# mkfontdir
# cd ../MathType1
# mkfontdir
....
Одоо шинэ үсгийн маягийн сангуудаа өөрийн үсгийн маягийн замдаа нэмнэ:
[source,bash]
....
# xset fp+ /usr/X11R6/lib/X11/fonts/X
# xset fp+ /usr/X11R6/lib/X11/fonts/MathType1
# xset fp rehash
....
Хэрэв та Xorg серверийг ашиглаж байгаа бол эдгээр үсгийн маягийн сангуудыг өөрийн [.filename]#xorg.conf# файлдаа нэмэн автоматаар дуудагдахаар тохируулж болно.
Хэрэв танд [.filename]#/usr/X11R6/lib/X11/fonts/Type1# гэгдсэн сан _байхгүй_ байгаа бол та дээрх жишээн дээрх [.filename]#MathType1# сангийн нэрийг [.filename]#Type1# болгон өөрчилж болно.
[[linuxemu-maple]]
== Maple(TM) суулгах нь
Maple(TM) нь Mathematica(R)-тай төстэй арилжааны зориулалтын математикийн програм юм. Та энэ програмыг http://www.maplesoft.com/[http://www.maplesoft.com/]-с худалдан авч дараа нь тэндээ лицензийн файл авахын тулд бүртгүүлэх хэрэгтэй. Энэ програм хангамжийг FreeBSD дээр суулгахын тулд эдгээр хялбар алхмуудыг дагана уу.
[.procedure]
====
. [.filename]#INSTALL# бүрхүүлийн скриптийг бүтээгдэхүүний тархацаас ажиллуулна. Суулгац програмаас хүсэхэд "RedHat" тохируулгыг сонгоорой. Ердийн суулгацын сан нь [.filename]#/usr/local/maple# байж болох юм.
. Хэрэв та тэгж хийгээгүй бол Maple Waterloo Software (http://register.maplesoft.com/[http://register.maplesoft.com/]) компаниас Maple(TM)-д зориулж лиценз захиж түүнийгээ [.filename]#/usr/local/maple/license/license.dat# сан уруу хуулах хэрэгтэй.
. Maple(TM)-тай цуг ирдэг [.filename]#INSTALL_LIC# суулгацын бүрхүүлийн скриптийг ажиллуулж FLEXlm лиценз менежерийг суулгах хэрэгтэй. Лицензийн серверт зориулж өөрийн машиныхаа анхдагч хостын нэрийг зааж өгнө.
. [.filename]#/usr/local/maple/bin/maple.system.type# файлыг доор дурдсанаар нөхөөс хийх хэрэгтэй:
+
[.programlisting]
....
----- snip ------------------
*** maple.system.type.orig Sun Jul 8 16:35:33 2001
--- maple.system.type Sun Jul 8 16:35:51 2001
***************
*** 72,77 ****
--- 72,78 ----
# the IBM RS/6000 AIX case
MAPLE_BIN="bin.IBM_RISC_UNIX"
;;
+ "FreeBSD"|\
"Linux")
# the Linux/x86 case
# We have two Linux implementations, one for Red Hat and
----- snip end of patch -----
....
+
`"FreeBSD"|\` мөрийн дараа ямар ч хоосон зай байх ёсгүйг санаарай.
+
Энэхүү нөхөөс нь "FreeBSD"-г Линукс системийн төрөл маягаар танихыг Maple(TM)-д заадаг. [.filename]#bin/maple# бүрхүүлийн скрипт нь [.filename]#bin/maple.system.type# бүрхүүлийн скриптийг дуудаж тэр нь эргээд үйлдлийн системийн нэрийг олохын тулд `uname -a` тушаалыг дууддаг. OS-ийн нэрээс хамаараад энэ нь аль хоёртын файлуудаа ашиглахаа олох болно.
. Лицензийн серверийг эхлүүлнэ.
+
[.filename]#/usr/local/etc/rc.d/lmgrd.sh# гэж суулгагдсан дараах скрипт нь `lmgrd`-г эхлүүлэх хялбар арга юм:
+
[.programlisting]
....
----- snip ------------
#! /bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin
PATH=${PATH}:/usr/local/maple/bin:/usr/local/maple/FLEXlm/UNIX/LINUX
export PATH
LICENSE_FILE=/usr/local/maple/license/license.dat
LOG=/var/log/lmgrd.log
case "$1" in
start)
lmgrd -c ${LICENSE_FILE} 2>> ${LOG} 1>&2
echo -n " lmgrd"
;;
stop)
lmgrd -c ${LICENSE_FILE} -x lmdown 2>> ${LOG} 1>&2
;;
*)
echo "Usage: `basename $0` {start|stop}" 1>&2
exit 64
;;
esac
exit 0
----- snip ------------
....
. Maple(TM)-ийг тестээр эхлүүлнэ:
+
[source,bash]
....
% cd /usr/local/maple/bin
% ./xmaple
....
+
Одоо ажиллаж байх ёстой. Maplesoft уруу та FreeBSD-ийн эх хувилбарыг хүсэж байгаагаа бичихээ мартуузай!
====
=== Түгээмэл асуудлууд
* FLEXlm лицензийн менежертэй ажиллахад төвөгтэй байж болох юм. Энэ тухай нэмэлт баримтыг http://www.globetrotter.com/[http://www.globetrotter.com/] хаягаас олж болно.
* `lmgrd` нь лицензийн файлыг хэтэрхий голж шилдэг, бас хэрэв ямар нэгэн асуудал байвал core файл үүсгэх дуртайгаараа алдартай програм юм. Зөв лицензийн файл иймэрхүү харагдах ёстой:
+
[.programlisting]
....
# =======================================================
# License File for UNIX Installations ("Pointer File")
# =======================================================
SERVER chillig ANY
#USE_SERVER
VENDOR maplelmg
FEATURE Maple maplelmg 2000.0831 permanent 1 XXXXXXXXXXXX \
PLATFORMS=i86_r ISSUER="Waterloo Maple Inc." \
ISSUED=11-may-2000 NOTICE=" Technische Universitat Wien" \
SN=XXXXXXXXX
....
+
[NOTE]
====
Энд сериал дугаар болон түлхүүрийг 'X' болгосон байна. `chillig` нь хостын нэр юм.
====
+
Лицензийн файлыг засварлахдаа "FEATURE" мөрийг (энэ нь лицензийн түлхүүрээр хамгаалагдсан байдаг) оролдохгүй бол ямар ч асуудал гарахгүй ажиллах болно.
[[linuxemu-matlab]]
== MATLAB(R) суулгах нь
Энэ баримт нь MATLAB(R) version 6.5-ийн Линуксийн хувилбарыг FreeBSD систем уруу суулгах процессийг тайлбарлах болно. Java Virtual Machine(TM)-г тооцохгүй юм бол энэ нь маш сайн ажилладаг (<<matlab-jre>>-г үзнэ үү).
MATLAB(R)-ийн Линуксийн хувилбарыг http://www.mathworks.com[http://www.mathworks.com] дэх MathWorks-с шууд захиалж болно. Лицензийн файлыг авах юм уу эсвэл хэрхэн үүсгэх зааврыг бас авахаа мартуузай. Тэнд байхдаа тэдний програм хангамжийн FreeBSD хувилбарыг хүсэж байгаагаа мэдэгдээрэй.
=== MATLAB(R) суулгах нь
MATLAB(R)-г суулгахын тулд доор дурдсаныг хийнэ:
[.procedure]
====
. Суулгацын CD-г хийж холбоно. Суулгацын скриптийн зөвлөснөөр `root` болно. Суулгах скриптийг эхлүүлэхийн тулд доор дурдсаныг бичнэ:
+
[source,bash]
....
# /compat/linux/bin/sh /cdrom/install
....
+
[TIP]
======
Суулгагч нь график орчных юм. Хэрэв та дэлгэц онгойлгож чадахгүй байна гэсэн алдаанууд авбал `setenv HOME ~USER` гэж бичих хэрэгтэй бөгөөд энд байгаа _USER_ нь таны man:su[1] хийсэн хэрэглэгч юм.
======
+
. MATLAB(R)-ийн root санг асуухад доор дурдсаныг бичнэ: `/compat/linux/usr/local/matlab`.
+
[TIP]
======
Суулгах процессийн үлдсэн хэсэгт хялбараар бичдэг байхын тулд өөрийн бүрхүүлийн хүлээх мөрөн дээр үүнийг бичнэ: `set MATLAB=/compat/linux/usr/local/matlab`
======
+
. MATLAB(R) лицензийг авч байхдаа зааварласны дагуу лицензийн файлыг засварлана.
+
[TIP]
======
Өөрийн дуртай засварлагчаа ашиглан та энэ файлыг урьдчилан бэлдэж, суулгагч танаас үүнийг засварлахыг асуухаас өмнө [.filename]#$MATLAB/license.dat# уруу хуулна.
======
+
. Суулгах процессийг гүйцээнэ.
====
Энд хүрэхэд таны MATLAB(R) суулгалт дууссан байна. Үүнийг таны FreeBSD систем уруу холбохын тулд дараах алхмууд нь "хийж" өгдөг.
=== Лицензийн Менежерийн эхлүүлэлт
[.procedure]
====
. Лицензийн менежерийн скриптүүдэд зориулж симболын холбоосуудыг үүсгэнэ:
+
[source,bash]
....
# ln -s $MATLAB/etc/lmboot /usr/local/etc/lmboot_TMW
# ln -s $MATLAB/etc/lmdown /usr/local/etc/lmdown_TMW
....
+
. [.filename]#/usr/local/etc/rc.d/flexlm.sh#-т эхлүүлэх файлыг үүсгэнэ. Доорх жишээ нь түгээгдсэн [.filename]#$MATLAB/etc/rc.lm.glnx86#-ийн өөрчлөгдсөн хувилбар юм. Өөрчлөлтүүд нь файлын байрлалууд болон Линуксийн эмуляц доор ажиллах лицензийн менежерийн эхлүүлэлт байна.
+
[.programlisting]
....
#!/bin/sh
case "$1" in
start)
if [ -f /usr/local/etc/lmboot_TMW ]; then
/compat/linux/bin/sh /usr/local/etc/lmboot_TMW -u username && echo 'MATLAB_lmgrd'
fi
;;
stop)
if [ -f /usr/local/etc/lmdown_TMW ]; then
/compat/linux/bin/sh /usr/local/etc/lmdown_TMW > /dev/null 2>&1
fi
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
....
+
[IMPORTANT]
======
Файлыг ажиллуулахаар болгох ёстой:
[source,bash]
....
# chmod +x /usr/local/etc/rc.d/flexlm.sh
....
Та дээрх _username_-г өөрийн систем дээрх зөв хэрэглэгчээр солих ёстой (`root` биш).
======
+
. Лицензийн менежерийг дараах тушаалаар эхлүүлнэ:
+
[source,bash]
....
# /usr/local/etc/rc.d/flexlm.sh start
....
====
[[matlab-jre]]
=== Java(TM)-ийн ажиллах үеийн орчныг холбох
Java(TM) Runtime Environment (JRE) буюу Ажиллах үеийн орчны холбоосыг FreeBSD дээр ажиллаж байгаа уруу зааж өөрчлөх хэрэгтэй:
[source,bash]
....
# cd $MATLAB/sys/java/jre/glnx86/
# unlink jre; ln -s ./jre1.1.8 ./jre
....
=== MATLAB(R)-ийн эхлүүлэх скриптийг үүсгэх
[.procedure]
====
. Дараах эхлүүлэх скриптийг [.filename]#/usr/local/bin/matlab#-д байрлуулна:
+
[.programlisting]
....
#!/bin/sh
/compat/linux/bin/sh /compat/linux/usr/local/matlab/bin/matlab "$@"
....
+
. Тэгээд `chmod +x /usr/local/bin/matlab` тушаалыг бичнэ.
====
[TIP]
====
Таны package:emulators/linux_base[] хувилбараас шалтгаалаад энэ скриптийг ажиллуулахад алдаа гарч болох юм. Үүнээс сэргийлэхийн тулд [.filename]#/compat/linux/usr/local/matlab/bin/matlab# файлыг засварлаж доорх:
[.programlisting]
....
if [ `expr "$lscmd" : '.*->.*'` -ne 0 ]; then
....
(13.0.1 хувилбар дээр энэ нь 410-р мөрөнд байна) мөрийг ингэж өөрчлөх хэрэгтэй:
[.programlisting]
....
if test -L $newbase; then
....
====
=== MATLAB(R)-ийн зогсоох скриптийг үүсгэх
MATLAB(R)-ийн зөв дуусдаггүй асуудлыг шийдэхэд дараах зүйлсийг хийх хэрэгтэй.
[.procedure]
====
. [.filename]#$MATLAB/toolbox/local/finish.m# файл үүсгэж түүнд ганц мөр нэмнэ:
+
[.programlisting]
....
! $MATLAB/bin/finish.sh
....
+
[NOTE]
======
`$MATLAB` нь үг юм.
======
+
[TIP]
======
Тэр сан дотроо гарахаас өмнө өөрийн ажлын талбарыг хадгалах боломжийг олгох [.filename]#finishsav.m# болон [.filename]#finishdlg.m# файлуудыг та олох болно. Хэрэв та тэдгээрийн аль нэгийг ашиглаж байгаа бол дээрх мөрийг `save` тушаалын дараа нэн даруй оруулах хэрэгтэй.
======
+
. доор дурдсаныг агуулсан [.filename]#$MATLAB/bin/finish.sh# файлыг үүсгэнэ:
+
[.programlisting]
....
#!/compat/linux/bin/sh
(sleep 5; killall -1 matlab_helper) &
exit 0
....
+
. Файлыг ажиллах боломжтой болгоно:
+
[source,bash]
....
# chmod +x $MATLAB/bin/finish.sh
....
====
[[matlab-using]]
=== MATLAB(R)-ийг ашиглах
Энд хүрэхэд та `matlab` гэж бичин үүнийг ашиглаж эхлэхэд бэлэн болсон байна.
[[linuxemu-oracle]]
== Oracle(R) суулгах нь
=== Оршил
Энэ баримт нь Линуксд зориулсан Oracle(R) 8.0.5 болон Oracle(R) 8.0.5.1 Enterprise Edition-г FreeBSD машин уруу суулгах процессийг тайлбарлах болно.
=== Линуксийн орчныг суулгах
Та package:emulators/linux_base[] болон package:devel/linux_devtools[] програмууд портын цуглуулгаас суусан эсэхийг шалгаарай. Та эдгээр портын хувьд асуудалтай байгаа бол багцууд юм уу эсвэл портын цуглуулгад байгаа хуучин хувилбаруудыг ашиглах хэрэгтэй болж болох юм.
Хэрэв та ухаалаг агентийг ажиллуулахыг хүсэж байгаа бол Red Hat Tcl багц: [.filename]#tcl-8.0.3-20.i386.rpm#-г бас суулгах хэрэгтэй болно. Албан ёсны RPM порттой (package:archivers/rpm[]) багцуудыг суулгах ерөнхий тушаал бол:
[source,bash]
....
# rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm package
....
_package_-ийн суулгалт ямар ч алдаа үүсгэх ёсгүй.
=== Oracle(R) орчныг үүсгэх
Oracle(R)-г суулгахаасаа өмнө та тохирох орчныг тохируулах хэрэгтэй. Энэ баримт нь Oracle(R)-г суулгах зааварт тайлбарласныг биш Линуксд зориулсан Oracle(R)-г FreeBSD дээр ажиллуулахын тулд _яг_ юу хийхийг зөвхөн тайлбарладаг.
[[linuxemu-kernel-tuning]]
==== Цөмийг тааруулах
Oracle(R)-г суулгах зааварт тайлбарласнаар хуваалцсан санах ойн хамгийн их хэмжээг тохируулах хэрэгтэй. FreeBSD дээр `SHMMAX`-г битгий ашиглаарай. `SHMMAX` нь ердөө л `SHMMAXPGS` болон `PGSIZE`-с тооцоологдон гаргагддаг. Тийм болохоор `SHMMAXPGS`-г тодорхойл. Бусад бүх тохируулгууд зааварт тайлбарласны дагуу ашиглагдаж болно. Жишээ нь:
[.programlisting]
....
options SHMMAXPGS=10000
options SHMMNI=100
options SHMSEG=10
options SEMMNS=200
options SEMMNI=70
options SEMMSL=61
....
Эдгээр тохируулгуудыг өөрийн Oracle(R)-ийн хэрэглээнд тааруулж тохируулах хэрэгтэй.
Мөн цөмийн тохиргооны файлдаа дараах тохируулгуудтай байгаа эсэхээ бас шалгаарай:
[.programlisting]
....
options SYSVSHM #SysV shared memory
options SYSVSEM #SysV semaphores
options SYSVMSG #SysV interprocess communication
....
[[linuxemu-oracle-account]]
==== Oracle(R) бүртгэл
Өөр бусад бүртгэл үүсгэдэг шигээ `oracle` бүртгэл үүсгэнэ. `oracle` бүртгэл нь Линуксийн бүрхүүл өгөх шаардлагатай цорын ганц тусгай бүртгэл юм. [.filename]#/etc/shells# файлд `/compat/linux/bin/bash`-г нэмээд `oracle` хэрэглэгчийн бүрхүүлийг [.filename]#/compat/linux/bin/bash# гэж тохируулна.
[[linuxemu-environment]]
==== Орчин
`ORACLE_HOME` болон `ORACLE_SID` зэрэг ердийн Oracle(R) хувьсагчуудаас гадна та дараах орчны хувьсагчуудыг тохируулах ёстой:
[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Хувьсагч
| Утга
|`LD_LIBRARY_PATH`
|`$ORACLE_HOME/lib`
|`CLASSPATH`
|`$ORACLE_HOME/jdbc/lib/classes111.zip`
|`PATH`
|`/compat/linux/bin /compat/linux/sbin /compat/linux/usr/bin /compat/linux/usr/sbin /bin /sbin /usr/bin /usr/sbin /usr/local/bin $ORACLE_HOME/bin`
|===
Бүх орчны хувьсагчуудыг [.filename]#.profile#-д тохируулахыг зөвлөдөг. Гүйцэд жишээ бол дараах байна:
[.programlisting]
....
ORACLE_BASE=/oracle; export ORACLE_BASE
ORACLE_HOME=/oracle; export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH
ORACLE_SID=ORCL; export ORACLE_SID
ORACLE_TERM=386x; export ORACLE_TERM
CLASSPATH=$ORACLE_HOME/jdbc/lib/classes111.zip
export CLASSPATH
PATH=/compat/linux/bin:/compat/linux/sbin:/compat/linux/usr/bin
PATH=$PATH:/compat/linux/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin
PATH=$PATH:/usr/local/bin:$ORACLE_HOME/bin
export PATH
....
=== Oracle(R)-ийг суулгах
Линуксийн эмуляторын хайхрамжгүй бүрэн бүтэн бус байдлаас болоод суулгагчийг эхлүүлэхээсээ өмнө та [.filename]#.oracle# санг [.filename]#/var/tmp# дотор үүсгэх хэрэгтэй болдог. Үүнийг `oracle` хэрэглэгч эзэмшихээр болгох хэрэгтэй. Та Oracle(R)-г ямар ч асуудалгүйгээр суулгаж чадах ёстой. Хэрэв танд асуудлууд учирвал эхлээд өөрийн Oracle(R) тархац ба/эсвэл тохиргоог шалгах хэрэгтэй! Oracle(R)-г суулгасныхаа дараа та дараах хоёр дэд хэсэгт тайлбарласан нөхөөсүүдийг хийж өгөх хэрэгтэй.
Байнга учирдаг асуудал бол TCP протоколын хувиргагч зөв суулгагдаагүй байдаг явдал юм. Үүнээс болоод та ямар ч TCP сонсогч эхлүүлж чадахгүй. Дараах үйлдлүүд нь энэ асуудлыг шийдэхэд тусалдаг:
[source,bash]
....
# cd $ORACLE_HOME/network/lib
# make -f ins_network.mk ntcontab.o
# cd $ORACLE_HOME/lib
# ar r libnetwork.a ntcontab.o
# cd $ORACLE_HOME/network/lib
# make -f ins_network.mk install
....
[.filename]#root.sh#-г дахин ажиллуулахаа битгий мартаарай!
[[linuxemu-patch-root]]
==== root.sh-д нөхөөс хийх
Oracle(R)-г суулгаж байхад `root` эрхээр хийгдэх шаардлагатай зарим үйлдлүүд [.filename]#root.sh# гэж нэрлэгдсэн бүрхүүлийн скриптэд бичигдсэн байдаг. Энэ скрипт нь [.filename]#orainst# санд бичигдсэн байдаг. `chown` тушаалын зөв байрлалыг ашиглахаар болгож дараах нөхөөсийг [.filename]#root.sh#-д хийх хэрэгтэй, эсвэл өөрөөр скриптийг Линуксийн эх бүрхүүл дээр ажиллуулах хэрэгтэй.
[.programlisting]
....
*** orainst/root.sh.orig Tue Oct 6 21:57:33 1998
--- orainst/root.sh Mon Dec 28 15:58:53 1998
***************
*** 31,37 ****
# This is the default value for CHOWN
# It will redefined later in this script for those ports
# which have it conditionally defined in ss_install.h
! CHOWN=/bin/chown
#
# Define variables to be used in this script
--- 31,37 ----
# This is the default value for CHOWN
# It will redefined later in this script for those ports
# which have it conditionally defined in ss_install.h
! CHOWN=/usr/sbin/chown
#
# Define variables to be used in this script
....
CD-ээс Oracle(R)-г та суулгахгүй үед [.filename]#root.sh#-д зориулсан эхийг нөхөж болно. Үүнийг [.filename]#rthd.sh# гэдэг бөгөөд эх модны [.filename]#orainst# санд байрладаг.
[[linuxemu-patch-tcl]]
==== genclntsh-д нөхөөс хийх
`genclntsh` скрипт нь хуваалцсан ганц клиентийн санг үүсгэхэд ашиглагддаг. Үзүүлбэрүүдийг бүтээж байхад үүнийг ашигладаг. `PATH`-н тодорхойлолтыг тайлбар болгохын тулд дараах нөхөөсийг хийх хэрэгтэй:
[.programlisting]
....
*** bin/genclntsh.orig Wed Sep 30 07:37:19 1998
--- bin/genclntsh Tue Dec 22 15:36:49 1998
***************
*** 32,38 ****
#
# Explicit path to ensure that we're using the correct commands
#PATH=/usr/bin:/usr/ccs/bin export PATH
! PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH
#
# each product MUST provide a $PRODUCT/admin/shrept.lst
--- 32,38 ----
#
# Explicit path to ensure that we're using the correct commands
#PATH=/usr/bin:/usr/ccs/bin export PATH
! #PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH
#
# each product MUST provide a $PRODUCT/admin/shrept.lst
....
=== Oracle(R)-г ажиллуулах
Заавруудыг дагасны дараа та Oracle(R)-г Линукс дээр ажиллуулж байгаа юм шиг ажиллуулж чадах ёстой.
[[linuxemu-advanced]]
== Нэмэлт сэдвүүд
Хэрэв та Линуксийн хоёртын нийлэмж хэрхэн ажилладгийг мэдэхийг хүсэж байгаа бол энэ хэсэг нь таны уншихыг хүсэж байгаа хэсэг юм. Доор бичигдсэн зүйлийн ихэнх нь Тэрри Лэмбэрт mailto:tlambert@primenet.com[tlambert@primenet.com]-ийн {freebsd-chat} руу бичсэн цахим захидал (Message ID: `<199906020108.SAA07001@usr09.primenet.com>`) дээр тулгуурласан байгаа.
=== Хэрхэн ажилладаг вэ?
FreeBSD нь "execution class loader" буюу ажиллуулах ангилал дуудагч гэгддэг хийсвэрлэлттэй байдаг. Энэ нь man:execve[2] системийн дуудлага уруу хийгдэх шаантаг юм.
Юу болдог вэ гэхээр FreeBSD нь ямар нэгэн бүрхүүлийн тайлбарлагчид эсвэл бүрхүүлийн скриптүүдийг ажиллуулахын тулд `#!` дуудагч уруу ордог нэг дуудагчийн оронд дуудагчдын жагсаалттай байдаг.
Уламжлалаар бол UNIX(R) тавцангийн дуудагч нь хоёртын файлыг системд мэдэгдэж байгаа эсэхийг мэдэхийн тулд шидэт тоог (ерөнхийдөө файлын эхний 4 эсвэл 8 байт) шалгадаг бөгөөд хэрэв мэдэгдэж байвал хоёртын дуудагчийг ажиллуулдаг ганц дуудагч юм.
Хэрэв энэ нь системд зориулагдсан хоёртын төрөл биш бол man:execve[2] дуудлага амжилгүй болон буцаж бүрхүүл үүнийг бүрхүүлийн тушаалууд маягаар ажиллуулж эхлэхийг оролддог.
"Тухайн үеийн бүрхүүл ямар байгаа" түүнийг анхдагч гэж таамагладаг.
Дараа нь эхний хоёр тэмдэгтүүдийг шалгах засварыг (hack) man:sh[1]-д зориулж хийсэн бөгөөд хэрэв тэдгээр нь `:\n` бол энэ нь man:csh[1] бүрхүүлийг ажиллуулдаг (энэ засварыг SCO анхлан хийсэн гэж бид итгэдэг).
Төгсгөлийн дараах дараагийн хоосон зайны дараа байдаг тэмдэгтүүдийн дараа [.filename]#/bin/sh# уруу буцдаг тэмдэгтүүд байдаг болохоор одоо FreeBSD юу хийдэг вэ гэхээр дуудагчдын жагсаалтаар тайлбарлагчдын талаар мэддэг ерөнхий `#!` дуудагчтай явдаг.
Линуксийн ABI дэмжлэгийн хувьд FreeBSD нь шидэт тоог ELF хоёртын файл гэж хардаг (одоогоор энэ нь FreeBSD, Solaris(TM), Линукс болон ELF дүрсний төрөл бүхий бусад OS-ийг хооронд нь ялгадаггүй).
ELF дуудагч нь тусгай _тамга_ хайдаг бөгөөд энэ нь ELF дүрс дэх тайлбар хэсэг юм. Энэ нь SVR4/Solaris(TM) ELF хоёртын файлуудад байдаггүй.
Линукс хоёртын файлууд нь ажиллахын тулд тэдгээр нь man:brandelf[1]-ээр `Линукс` гэж _тамгалагдах_ ёстой байдаг:
[source,bash]
....
# brandelf -t Linux file
....
Үүнийг хийсний дараа ELF дуудагч нь файлд `Линукс` тамгыг харах болно.
ELF дуудагч `Линукс` тамгыг харах үед дуудагч `proc` бүтэц дэх заагчийг сольдог. Энэ заагчаар бүх системийн дуудлагууд индекслэгддэг (уламжлалт UNIX(R) систем дээр энэ нь системийн дуудлагуудыг агуулах `sysent[]` бүтцийн массив байх юм). Үүнээс гадна процесс нь дохионы трамплиний кодонд зориулсан занга векторыг тусгайлан зохицуулахад болон Линуксийн цөмийн модулиар зохицуулагддаг бусад хэд хэдэн (жижиг) засваруудад зориулагдаж тэмдэглэгддэг.
Линукс системийн дуудлагын вектор нь бусад зүйлүүдээс гадна цөмийн модульд хаягууд нь байдаг `sysent[]` оруулгуудын жагсаалтыг агуулдаг.
Системийн дуудлага Линуксийн хоёртын файлаар дуудагдахад занга код системийн дуудлагын функц заагчийн хаягийг `proc` бүтцээс авч FreeBSD-ийн биш Линуксийн системийн дуудлагын оруулгын цэгүүдийг авдаг.
Мөн Линукс горим нь хайлтыг динамикаар _дахин эхлүүлдэг_; энэ нь файлын системийн холболтууд дахь `union` тохируулга (`unionfs` файлын системийн төрөл _биш_!) хийдэг тэр зүйл юм. Эхлээд [.filename]#/compat/linux/original-path# сан дахь файлыг хайх бөгөөд _дараа нь_ хэрэв энэ нь амжилтгүй болвол хайлт [.filename]#/original-path# санд хийгддэг. Энэ нь бусад хоёртын файлуудыг шаарддаг хоёртын файлуудыг ажиллаж чадахаар (өөрөөр хэлбэл Линуксийн хэрэгслийн цуглуулга бүгдээрээ Линуксийн ABI дэмжлэгийн доор ажиллаж чаддаг байхаар) болгодог. Линуксийн хоёртын файлууд нь тохирох Линуксийн хоёртын файлууд байхгүй бол FreeBSD-ийн хоёртын файлуудыг дуудаж ажиллуулж бас чадна гэсэн үг бөгөөд Линуксийн хоёртын файлуудыг Линукс дээр ажиллахгүй байгааг нь хэлж чадахааргүй болгохын тулд та man:uname[1] тушаалыг [.filename]#/compat/linux# санд байрлуулж болно гэсэн үг юм.
Үндсэндээ Линуксийн цөм FreeBSD цөмд байдаг; цөмийн үзүүлдэг бүх үйлчилгээнүүдийг хийдэг, доор нь орших төрөл бүрийн функцууд нь FreeBSD-ийн системийн дуудлагын хүснэгтийн оруулгууд болон Линуксийн системийн дуудлагын хүснэгтийн оруулгуудтай ижил байдаг: файлын системийн үйлдлүүд, виртуал санах ойн үйлдлүүд, дохио хүргэлт, System V IPC, гэх мэт... Цорын ганц ялгаа нь FreeBSD-ийн хоёртын файлууд FreeBSD-ийн _цавуу_ функцуудыг, Линуксийн хоёртын файлууд Линуксийн _цавуу_ функцуудыг авдаг явдал юм (ихэнх хуучин OS-үүд зөвхөн өөрсдийн _цавуу_ функцуудтай байсан: дуудлага хийж байгаа процессийн `proc` бүтэц дэх динамикаар эхлүүлэгдсэн заагчаар хийгдсэн функцуудын хаягуудын оронд статик глобал `sysent[]` бүтцийн массив дахь функцуудын хаягуудтай байсан).
Аль нь эх FreeBSD ABI вэ? Энэ нь хамаагүй юм. Үндсэндээ цорын ганц ялгаа нь (зөвхөн одоогоор; эдгээр нь ирээдүйн хувилбаруудад амархан өөрчлөгдөж болох бөгөөд магадгүй үүний дараагаар хийгдэх байх) FreeBSD-ийн _цавуу_ функцууд нь цөмд статикаар холбогдсон байдаг бөгөөд Линуксийн _цавуу_ функцууд нь статикаар холбогдож эсвэл тэдгээрт цөмийн модулийн тусламжтайгаар хандаж болдог явдал юм.
Тиймээ, гэхдээ энэ нь жинхэнэ эмуляц мөн үү? Үгүй ээ. Энэ нь ABI шийдэл болохоос эмуляц биш юм. Ямар ч эмулятор (эсвэл дүр үзүүлэгч (simulator) (дараагийн асуултыг асуулгахгүйн тулд)) оролцоогүй.
Тэгэхээр яагаад энэ нь заримдаа "Линукс эмуляц" гэгддэг юм бэ? FreeBSD-г худалдахад хэцүү болгохын тулд! Тиймээ, юу болж байгааг тайлбарлаж байгаагаас өөр зүйлгүй байх тэр үед уламжлалт шийдэл хийгдсэн болохоор тэр юм; хэрэв та кодыг эмхэтгээгүй эсвэл модулийг дуудаагүй бол Линуксийн хоёртын файлуудыг FreeBSD ажиллуулдаг гэж хэлэх нь үнэн биш бөгөөд юу дуудагдсаныг тайлбарлах үг хэрэгтэй байсан болохоор -"Линукс эмулятор" гэсэн үг гарсан юм.