aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/mn/books/handbook/linuxemu/_index.adoc
blob: cf44b10b6c1092b4ce67ce3b3412a1523c625cff (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
---
title: Бүлэг 11. Линуксийн Хоёртын Нийлэмж
part: хэсэг II. Нийтлэг асуудлууд
prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 14
path: "/books/handbook/linuxemu/"
---

[[linuxemu]]
= Линуксийн Хоёртын Нийлэмж
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 11
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/linuxemu/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[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,shell]
....
# kldload linux
....

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

[.programlisting]
....
linux_enable="YES"
....

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

[source,shell]
....
% 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,shell]
....
# 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,shell]
....
% 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,shell]
....
/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,shell]
....
/compat/linux/lib/libc.so.4.6.27
/compat/linux/lib/libc.so.4 -> libc.so.4.6.27
....

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

[source,shell]
....
libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29
....

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

[source,shell]
....
/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,shell]
....
% ./my-linux-elf-binary
ELF binary type not known
Abort
....

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

[source,shell]
....
% brandelf -t Linux my-linux-elf-binary
....

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

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

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

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

[source,shell]
....
# cd /compat/linux
# rpm2cpio -q < /path/to/linux.archive.rpm | cpio -id
....

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

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

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

[source,shell]
....
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,shell]
....
# sysctl kern.fallback_elf_brand=3
....

Энэ нь тамгалаагүй ELF хоёртын файлууд Линуксийн ABI-г ашиглана гэж бодоход FreeBSD-г хүргэх бөгөөд та суулгагчийг CDROM-оос шууд ажиллуулах боломжтой болох ёстой.

Одоо [.filename]#MathInstaller# файлыг өөрийн хатуу хөтөч уруу хуулах хэрэгтэй:

[source,shell]
....
# 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,shell]
....
# 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,shell]
....
# 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,shell]
....
% 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,shell]
....
# /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,shell]
....
# 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,shell]
....
# chmod +x /usr/local/etc/rc.d/flexlm.sh
....

Та дээрх _username_-г өөрийн систем дээрх зөв хэрэглэгчээр солих ёстой (`root` биш).
======
+
. Лицензийн менежерийг дараах тушаалаар эхлүүлнэ:
+
[source,shell]
....
# /usr/local/etc/rc.d/flexlm.sh start
....
====

[[matlab-jre]]
=== Java(TM)-ийн ажиллах үеийн орчныг холбох

Java(TM) Runtime Environment (JRE) буюу Ажиллах үеийн орчны холбоосыг FreeBSD дээр ажиллаж байгаа уруу зааж өөрчлөх хэрэгтэй:

[source,shell]
....
# 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,shell]
....
# 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,shell]
....
# 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,shell]
....
# 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,shell]
....
# 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 ажиллуулдаг гэж хэлэх нь үнэн биш бөгөөд юу дуудагдсаныг тайлбарлах үг хэрэгтэй байсан болохоор -"Линукс эмулятор" гэсэн үг гарсан юм.