aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/el/books/handbook/linuxemu/_index.adoc
blob: f7de3ec5ebc2e51e419b003af3de03f905d68dca (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
---
title: Κεφάλαιο 11. Συμβατότητα με Εκτελέσιμα του Linux
part: Μέρος II. Βασικές Εργασίες
prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 14
path: "/books/handbook/"
---

[[linuxemu]]
= Συμβατότητα με Εκτελέσιμα του Linux
: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 παρέχει binary συμβατότητα (εκτελέσιμων) με αρκετά άλλα λειτουργικά τύπου UNIX(R), συμπεριλαμβανομένου και του Linux. Σε αυτό το σημείο, μπορεί να αναρωτιέστε γιατί ακριβώς χρειάζεται το FreeBSD να μπορεί να τρέξει εκτελέσιμα Linux; H απάντηση σε αυτή την ερώτηση είναι αρκετά απλή. Πολλές εταιρίες και προγραμματιστές αναπτύσσουν εφαρμογές μόνο για Linux, μια και είναι πολύ "της μόδας" στο κόσμο των υπολογιστών. Αυτό αναγκάζει εμάς τους υπόλοιπους, που χρησιμοποιούμε το FreeBSD, να πιέζουμε τις ίδιες αυτές εταιρίες και προγραμματιστές να δημιουργήσουν κανονικές εκδόσεις των εφαρμογών τους για FreeBSD. Το πρόβλημα είναι, ότι οι περισσότερες από αυτές τις εταιρίες δεν αντιλαμβάνονται πραγματικά πόσοι περισσότεροι άνθρωποι θα χρησιμοποιούσαν το προϊόν τους αν είχαν εκδόσεις και για FreeBSD, και οι περισσότερες συνεχίζουν να αναπτύσσουν μόνο για Linux. Άρα τι μπορεί να κάνει ένας χρήστης του FreeBSD; Εδώ έρχεται να βοηθήσει η binary συμβατότητα του FreeBSD με το Linux.

Εν συντομία, η συμβατότητα επιτρέπει στους χρήστες του FreeBSD να εκτελέσουν περίπου το 90% όλων των Linux εφαρμογών χωρίς μετατροπές. Αυτό περιλαμβάνει εφαρμογές όπως το StarOffice(TM), την Linux έκδοση του man:getenv[3], Adobe(R) Acrobat(R), RealPlayer(R), Oracle(R), WordPerfect(R), Doom, Quake, και περισσότερα. Έχει επίσης αναφερθεί ότι σε κάποιες περιπτώσεις, τα εκτελέσιμα του Linux έχουν καλύτερη απόδοση στο FreeBSD από ότι στο Linux.

Υπάρχουν ωστόσο κάποια συγκεκριμένα για το Linux στοιχεία του λειτουργικού που δεν υποστηρίζονται στο FreeBSD. Τα εκτελέσιμα του Linux δεν θα δουλέψουν στο FreeBSD αν χρησιμοποιούν πολλές εξειδικευμένες κλήσεις i386(TM), όπως για παράδειγμα την ενεργοποίηση της εικονικής κατάστασης 8086.

Αφού διαβάσετε αυτό το κεφάλαιο, θα ξέρετε:

* Πως να ενεργοποιήσετε την συμβατότητα εκτελέσιμων με το Linux στο σύστημα σας.
* Πως να εγκαταστήσετε πρόσθετες κοινόχρηστες βιβλιοθήκες του Linux.
* Πως να εγκαταστήσετε εφαρμογές του Linux στο FreeBSD.
* Τις λεπτομέρειες της υλοποίησης της συμβατότητας με το Linux στο FreeBSD.

Πριν διαβάσετε αυτό το κεφάλαιο, θα πρέπει:

* Να γνωρίζετε πως θα εγκαταστήσετε πρόσθετο λογισμικό τρίτου κατασκευαστή (crossref:ports[ports,Εγκατάσταση Εφαρμογών: Πακέτα και Ports]).

[[linuxemu-lbc-install]]
== Εγκατάσταση

Η συμβατότητα με εκτελέσιμα του Linux δεν είναι ενεργή εξ' αρχής. Ο ευκολότερος τρόπος για να ενεργοποιήσετε αυτή τη λειτουργία είναι να φορτώσετε το KLD (άρθρωμα) `linux` ("Kernel LoaDable object"). Μπορείτε να φορτώσετε αυτό το άρθρωμα στον πυρήνα δίνοντας τη παρακάτω εντολή ως `root`:

[source,shell]
....
# kldload linux
....

Αν θέλετε να έχετε πάντα ενεργοποιημένη τη συμβατότητα με Linux, τότε θα χρειαστεί να προσθέσετε τη παρακάτω γραμμή στο [.filename]#/etc/rc.conf#:

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

Η εντολή man:kldstat[8] μπορεί να χρησιμοποιηθεί για να ελεγχθεί αν το KLD είναι φορτωμένο:

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

Αν για κάποιο λόγο δεν θέλετε ή δε μπορείτε να φορτώσετε το KLD, τότε μπορείτε να συνδέσετε στατικά την υποστήριξη εκτελέσιμων του Linux στον πυρήνα με το να προσθέσετε την επιλογή `options COMPAT_LINUX` στο αρχείων ρυθμίσεων του πυρήνα. Στη συνέχεια μπορείτε να εγκαταστήσετε τον νέο πυρήνα όπως περιγράφεται στο crossref:kernelconfig[kernelconfig,Ρυθμίζοντας τον Πυρήνα του FreeBSD].

=== Εγκατάσταση των Linux Runtime Libraries

Αυτό μπορεί να γίνει με δύο τρόπους. Είτε με τη χρήση του <<linuxemu-libs-port,linux_base-fc4>> port, ή με <<linuxemu-libs-manually,χειροκίνητη>> εγκατάσταση τους.

[[linuxemu-libs-port]]
==== Εγκατάσταση μέσω του linux_base Port

Αυτός είναι κατά γενική ομολογία ο ευκολότερος τρόπος για την εγκατάσταση των runtime libraries. Είναι η ίδια διαδικασία εγκατάστασης που ακολουθείται και για οποιοδήποτε άλλο port από τη crossref:ports[ports,Συλλογή των Ports]. Απλά κάντε το παρακάτω:

[source,shell]
....
# cd /usr/ports/emulators/linux_base-f10
# make install distclean
....

[NOTE]
====
Αν χρησιμοποιείτε κάποια έκδοση του FreeBSD πριν την 8.0, θα πρέπει να εγκαταστήσετε το port package:emulators/linux_base-fc4[] αντί για το package:emulators/linux_base-f10[].
====

Θα πρέπει τώρα να έχετε κανονική συμβατότητα με εκτελέσιμα του Linux. Μερικά προγράμματα παραπονιούνται ότι οι βιβλιοθήκες συστήματος (system libraries) δεν είναι στη τελευταία τους έκδοση. Γενικά όμως, αυτό δεν αποτελεί κανένα πρόβλημα.

[NOTE]
====
Μπορούν να υπάρχουν πολλαπλές εκδόσεις του package:emulators/linux_base[], που να αντιστοιχούν στις διαφορετικές εκδόσεις των διανομών Linux. Θα πρέπει να κάνετε εγκατάσταση των ports που προαπαιτούνται από τις εφαρμογές Linux τις οποίες θέλετε να εγκαταστήσετε.
====

[[linuxemu-libs-manually]]
==== Χειροκίνητη εγκατάσταση των Libraries

Αν δεν έχετε εγκαταστήσει την συλλογή των "ports", μπορείτε να εγκαταστήσετε τις βιβλιοθήκες χειροκίνητα. Θα χρειαστείτε τα Linux shared libraries τα οποία απαιτεί το πρόγραμμα. Επίσης, θα χρειαστεί να δημιουργήσετε και έναν κατάλογο "shadow root", [.filename]#/compat/linux#, για τις βιβλιοθήκες Linux που θα υπάρχουν στο FreeBSD. Οποιαδήποτε κοινές βιβλιοθήκες (shared libraries) οι οποίες χρησιμοποιούνται από εφαρμογές Linux και εκτελούνται στο FreeBSD θα κοιτάξουν πρώτα σε αυτόν τον κατάλογο. Επομένως, αν μια εφαρμογή Linux φορτώσει για παράδειγμα το [.filename]#/lib/libc.so#, το FreeBSD θα προσπαθήσει να φορτώσει πρώτα το [.filename]#/compat/linux/lib/libc.so#, και αν αυτό δεν υπάρχει, τότε θα προσπαθήσει να φορτώσει το [.filename]#/lib/libc.so#. Τα shared libraries θα πρέπει να εγκατασταθούν στο shadow tree [.filename]#/compat/linux/lib# αντί για τις τοποθεσίες που αναφέρει το `ld.so` στο Linux.

Γενικά, τουλάχιστον στις πρώτες σας εγκαταστάσεις εφαρμογών Linux, θα χρειαστεί να ψάξετε για τις κοινές βιβλιοθήκες από τα αντίστοιχα εκτελέσιμα. Μετά από κάποιο διάστημα θα έχετε ένα ικανοποιητικό αριθμό Linux shared libraries στο σύστημά σας και πλέον δε θα χρειάζεται επιπλέον εργασία πέρα από την εγκατάσταση της εφαρμογής.

==== Εγκατάσταση Πρόσθετων Shared Libraries

Και τι γίνεται στη περίπτωση που έχετε εγκαταστήσει το [.filename]#linux_base# port και οι εφαρμογές σας ακόμη παραπονιούνται για shared libraries που λείπουν; Πώς μπορείτε να ξέρετε ποια shared libraries χρειάζεται κάποια εφαρμογή, και που μπορείτε να τα βρείτε; Βασικά, υπάρχουν 2 επιλογές (για να ακολουθήσετε τις παρακάτω οδηγίες θα πρέπει να είστε `root` στο σύστημά σας).

Αν έχετε πρόσβαση σε κάποιο μηχάνημα Linux, ρίξτε μια ματιά στα shared libraries που χρειάζεται μια εφαρμογή, και αντιγράψτε τα στο FreeBSD. Δείτε το παρακάτω παράδειγμα:

Ας υποθέσουμε ότι κατεβάσατε μέσω FTP το εκτελέσιμο του Doom για το Linux, και το βάλατε στο Linux σύστημα στο οποίο έχετε πρόσβαση. Μπορείτε στη συνέχεια να ελέγξετε ποια shared libraries χρειάζεται η εφαρμογή με την εντολή `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#, και να δημιουργήσετε προς αυτά τους αντίστοιχους συμβολικούς δεσμούς (symbolic links) με τα ονόματα της πρώτης στήλης. Αυτό σημαίνει ότι πρακτικά, θα έχετε αυτά τα αρχεία στο σύστημα σας:

[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]
====
Σημειώστε ότι αν έχετε ήδη κάποιο Linux shared library που ο αριθμός έκδοσης είναι ο ίδιος με αυτόν της πρώτης στήλης του `ldd`, δε θα χρειαστεί να αντιγράψετε το αρχείο όπως αυτό ονομάζεται στη τελευταία στήλη, τα υπάρχοντα αρχεία θα πρέπει να κάνουν τη δουλειά τους. Σας συμβουλεύουμε όμως να αντιγράψετε το shared library αν είναι κάποια νεότερη έκδοση. Μπορείτε να διαγράψετε τα παλιά αρχεία, αρκεί όμως να ανανεώσετε τους συμβολικούς δεσμούς ώστε να οδηγούν στα νέα αρχεία. Επομένως, αν έχετε τις παρακάτω βιβλιοθήκες στο σύστημά σας:

[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]
====
Ο μηχανισμός των συμβολικών συνδέσμων χρειάζεται _μόνο_ για τις εφαρμογές του Linux. Ο runtime linker του FreeBSD κοιτάει μόνος του για τις πιο πρόσφατες εκδόσεις των βιβλιοθηκών και έτσι δε χρειάζεται να σας απασχολεί. 
====

=== Εγκατάσταση των Linux ELF Binaries

Τα ELF binaries χρειάζονται μερικές φορές ένα ακόμα βήμα, το "branding". Αν προσπαθήσετε να τρέξετε ένα εκτελέσιμο ELF χωρίς branding, τότε θα σας εμφανιστεί το παρακάτω σφάλμα:

[source,shell]
....
% ./my-linux-elf-binary
ELF binary type not known
Abort
....

Για να βοηθήσετε τον πυρήνα του FreeBSD να ξεχωρίσει ένα ELF του FreeBSD από ένα του Linux, χρησιμοποιήστε την εντολή man:brandelf[1]. 

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

To GNU toolchain, ομάδα πρόγραμμα GNU, τοποθετεί πλέον αυτόματα τα κατάλληλα χαρακτηριστικά στα εκτελέσιμα ELF, επομένως το παραπάνω βήμα θα χρειάζεται όλο και λιγότερο στο μέλλον. 

=== Εγκατάσταση μιας Τυχαίας Linux RPM Εφαρμογής

Το FreeBSD διαθέτει την δική του βάση δεδομένων για τα πακέτα, η οποία χρησιμοποιείται για όλα τα ports (και για αυτά που προέρχονται από το Linux(R)). Για το λόγο αυτό, η βάση δεδομένων Linux(R) RPM δεν χρησιμοποιείται (δεν υποστηρίζεται).

Αν ωστόσο χρειάζεται να εγκαταστήσετε μια οποιαδήποτε εφαρμογή του Linux(R) που βασίζεται σε πακέτο RPM, μπορείτε να το επιτύχετε με τον παρακάτω τρόπο:

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

Χρησιμοποιήστε την man:brandelf[1] για να τυποποιήσετε κατάλληλα τα εκτελέσιμα (όχι τις βιβλιοθήκες!) ως εφαρμογές Linux(R). Δεν θα μπορείτε να απεγκαταστήσετε τις εφαρμογές με καθαρό τρόπο, αλλά θα μπορέσετε να κάνετε τις δοκιμές που επιθυμείτε.

=== Ρύθμιση του Hostname Resolver

Αν το 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
....

Η σειρά εδώ δηλώνει ότι αρχικά ελέγχεται το αρχείο [.filename]#/etc/hosts# και στη συνέχεια ο DNS server. Όταν το [.filename]#/compat/linux/etc/host.conf# δεν είναι διαθέσιμο, οι εφαρμογές Linux χρησιμοποιούν το [.filename]#/etc/host.conf# του FreeBSD και παραπονιούνται ότι η σύνταξη του αρχείου δεν είναι σωστή. Θα πρέπει να αφαιρέσετε την αναφορά στο `bind` αν δεν έχετε ρυθμίσει ένα name server μέσω του [.filename]#/etc/resolv.conf#.

[[linuxemu-mathematica]]
== Εγκαθιστώντας το Mathematica(R)

Το κείμενο αυτό περιγράφει τη διαδικασία εγκατάστασης της έκδοσης Linux του Mathematica(R) 5.X σε ένα σύστημα FreeBSD.

Μπορείτε να αγοράσετε την κανονική ή μαθητική έκδοση του Mathematica(R) για Linux, απευθείας από τη Wolfram στο http://www.wolfram.com/[http://www.wolfram.com/].

=== Το Πρόγραμμα Εγκατάστασης του Mathematica(R)

Αρχικά, θα πρέπει να πείτε στο FreeBSD ότι τα εκτελέσιμα για Linux του Mathematica(R) κάνουν χρήση του Linux ABI. Ο ευκολότερος τρόπος για να το κάνετε αυτό είναι να ορίσετε τον τύπο του ELF ως Linux σε όλες τις εφαρμογές που δεν είναι ήδη branded, κάνοντας χρήση της εντολής:

[source,shell]
....
# sysctl kern.fallback_elf_brand=3
....

Αυτό θα κάνει το FreeBSD να υποθέσει ότι τα εκτελέσιμα ELF που δεν είναι branded, κάνουν χρήση του Linux ABI και έτσι θα μπορείτε να τρέξετε το πρόγραμμα της εγκατάστασης απευθείας από το CDROM.

Τώρα, αντιγράψτε το αρχείο [.filename]#MathInstaller# στον σκληρό σας δίσκο:

[source,shell]
....
# mount /cdrom
# cp /cdrom/Unix/Installers/Linux/MathInstaller /localdir/
....

Ανοίξτε το αρχείο και αντικαταστήστε το `/bin/sh` στη πρώτη γραμμή με το `/compat/linux/bin/sh`. Αυτό θα σιγουρέψει ότι το πρόγραμμα εγκατάστασης θα τρέχει με την έκδοση man:sh[1] για Linux. Στη συνέχεια, αντικαταστήστε όλες τις εγγραφές `Linux)` με `FreeBSD)` χρησιμοποιώντας έναν συντάκτη κειμένου ή με το παρακάτω script στην επόμενη ενότητα. Αυτό θα πει στο πρόγραμμα εγκατάστασης του Mathematica(R), το οποίο τρέχει την εντολή `uname -s` για να διαπιστώσει το λειτουργικό σύστημα, να αντιμετωπίσει το FreeBSD σαν ένα λειτουργικό παρεμφερές με το Linux. Η εκτέλεση του `MathInstaller` θα ξεκινήσει τώρα την εγκατάσταση του Mathematica(R).

=== Τροποποιώντας τα Εκτελέσιμα του Mathematica(R)

Τα shell scripts τα οποία δημιουργεί το Mathematica(R) κατά τη διαδικασία της εγκατάστασης πρέπει να τροποποιηθούν πριν χρησιμοποιηθούν. Αν επιλέξετε το [.filename]#/usr/local/bin# ως τον κατάλογο για τα εκτελέσιμα του Mathematica(R), θα βρείτε εκεί συμβολικούς δεσμούς (symlinks) προς τα αρχεία [.filename]#math#, [.filename]#mathematica#, [.filename]#Mathematica#, και [.filename]#MathKernel#. Σε κάθε περίπτωση από τις παραπάνω, αντικαταστήστε τις εγγραφές `Linux)` με `FreeBSD)` με κάποιον συντάκτη κειμένου ή με το παρακάτω shell script:

[.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) για πρώτη φορά, θα ερωτηθείτε για έναν κωδικό. Αν δεν έχετε κάποιον κωδικό σε αυτό το στάδιο, τρέξτε το πρόγραμμα `mathinfo` που βρίσκεται στον κατάλογο εγκατάστασης για να σας δοθεί το "machine ID". Το "machine ID" είναι εξ' ολοκλήρου βασισμένο στη διεύθυνση MAC της κάρτας δικτύου που έχετε. Αυτό σημαίνει ότι δεν μπορείτε να τρέξετε το Mathematica(R) σε άλλους υπολογιστές. 

Όταν εγγραφείτε στη Wolfram, με e-mail, τηλέφωνο ή fax, θα χρειαστεί να δώσετε το "machine ID" και θα σας απαντήσουν με έναν αντίστοιχο κωδικό που θα αποτελείται από μια σειρά αριθμών. 

=== Τρέχοντας το Mathematica(R) Frontend μέσω Δικτύου

Το Mathematica(R) κάνει χρήση κάποιων ειδικών γραμματοσειρών για να εμφανίσει χαρακτήρες οι οποίοι δεν υπάρχουν στα συνηθισμένα σετ (ολοκληρώματα, αθροίσματα, Ελληνικά γράμματα, κλπ). To πρωτόκολλο X απαιτεί αυτές οι γραμματοσειρές να υπάρχουν στο _τοπικό_ σύστημα. Αυτό σημαίνει ότι θα χρειαστεί να αντιγράψετε τις γραμματοσειρές αυτές από το CDROM ή από από κάποιον άλλον υπολογιστή που έχει το Mathematica(R). Συνήθως αυτές οι γραμματοσειρές μπορούν να βρεθούν μέσα στο κατάλογο [.filename]#/cdrom/Unix/Files/SystemFiles/Fonts# του CDROM, ή στον κατάλογο [.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
....

Τώρα προσθέστε τους νέους καταλόγους με τις γραμματοσειρές στο font path:

[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# shell script από το μέσο εγκατάστασης που έχετε. Επιλέξτε "RedHat" όταν ερωτηθείτε από το πρόγραμμα εγκατάστασης. Ο τυπικός κατάλογος είναι ο [.filename]#/usr/local/maple#. 
. Αν δεν έχετε αγοράσει ακόμη κάποια άδεια για το Maple(TM), αγοράστε μία από το Maple Waterloo Software (http://register.maplesoft.com/[http://register.maplesoft.com/]) και αντιγράψτε το αρχείο που θα σας δοθεί στο [.filename]#/usr/local/maple/license/license.dat#. 
. Εγκαταστήσετε το FLEXlm license manager εκτελώντας το [.filename]#INSTALL_LIC# shell script το οποία παρέχεται μαζί με το Maple(TM). Δώστε το βασικό όνομα του υπολογιστή σας το οποίο απαιτείται από τον εξυπηρετητή διαχείρισης των αδειών (license server).
. Χρησιμοποιήστε το παρακάτω patch στο αρχείο [.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"|\` δεν πρέπει να εμφανίζεται άλλο κενό διάστημα.
+ 
Το patch αυτό οδηγεί το Maple(TM) να αναγνωρίσει το "FreeBSD" σαν ένα σύστημα Linux. Το [.filename]#bin/maple# shell script καλεί το [.filename]#bin/maple.system.type# shell script, το οποίο με τη σειρά του καλεί την εντολή `uname -a` προκειμένου να εντοπιστεί το όνομα του λειτουργικού συστήματος. Αναλόγως με το ποιο λειτουργικό βρεθεί, θα χρησιμοποιηθούν και τα αντίστοιχα εκτελέσιμα αρχεία.
. Εκκινήστε τον license server.
+ 
Ένας βολικός τρόπος για να εκκινήσετε το `lmgrd` είναι το ακόλουθο script που βρίσκεται στο [.filename]#/usr/local/etc/rc.d/lmgrd.sh#:
+
[.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
....

+ 
Σε αυτό το σημείο θα πρέπει να είναι όλα έτοιμα και να μην έχετε κανένα πρόβλημα. Μην ξεχάσετε όμως να στείλετε ένα e-mail στη Maplesoft και να τους πείτε ότι θέλετε μια έκδοση που να υποστηρίζεται επίσημα στο FreeBSD.

=== Συνηθισμένα Προβλήματα

* Ίσως δυσκολευτείτε με την λειτουργία του FLEXlm license manager. Επιπλέον τεκμηρίωση μπορείτε να βρείτε στο http://www.globetrotter.com/[http://www.globetrotter.com/]. 
* Το `lmgrd` είναι γνωστό ότι θέλει το αρχείο της άδειας να έχει συγκεκριμένη μορφή αλλιώς η εκτέλεση του θα αποτύχει. Ένα σωστό αρχείο άδειας χρήσης πρέπει είναι σε γενικές γραμμές όπως το παρακάτω:
+
[.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)

Το κείμενο αυτό περιγράφει τη διαδικασία εγκατάστασης της Linux έκδοσης του MATLAB(R) 6.5 σε ένα σύστημα FreeBSD. Δουλεύει αρκετά καλά, με εξαίρεση το Java Virtual Machine(TM) (δείτε στο <<matlab-jre>>).

Η Linux έκδοση του MATLAB(R) μπορεί να αγοραστεί απευθείας από την εταιρεία The MathWorks στο http://www.mathworks.com[http://www.mathworks.com]. Σιγουρευτείτε ότι πήρατε και το αρχείο που περιέχει την άδεια χρήσης ή οδηγίες για το πως να το δημιουργήσετε. Μια και θα επικοινωνήσετε με την εταιρεία, πείτε τους ότι θα θέλατε να υπάρχει επίσης υποστήριξη για το FreeBSD. 

=== Εγκατάσταση του MATLAB(R)

Για να εγκαταστήσετε το MATLAB(R), κάντε τα παρακάτω:

[.procedure]
. Εισάγετε το CD και προσαρτήστε το στο σύστημα σας. Συνδεθείτε ως χρήστης `root`, όπως συνιστά το script της εγκατάστασης. Για να ξεκινήσετε το script της εγκατάστασης δώστε την εντολή:
+

[source,shell]
....
# /compat/linux/bin/sh /cdrom/install
....

+
[TIP]
====

Το πρόγραμμα της εγκατάστασης είναι σε γραφικό περιβάλλον. Αν λαμβάνετε σφάλματα σχετικά με την οθόνη, δώστε την εντολή: `setenv HOME ~USER`, όπου _USER_ είναι ο χρήστης από όπου δώσατε την εντολή man:su[1].
====

. Όταν ερωτηθείτε για τον κατάλογο του MATLAB(R), δώστε: `/compat/linux/usr/local/matlab`.
+
[TIP]
====

Για ευκολότερη διαδικασία εγκατάστασης, ορίστε το παρακάτω: `set MATLAB=/compat/linux/usr/local/matlab` στη γραμμή εντολών του κελύφους σας.
====

. Τροποποιήσετε το αρχείο της άδειας (license file) σύμφωνα με τις οδηγίες που λάβατε με την άδεια του MATLAB(R).
+
[TIP]
====

Μπορείτε να ετοιμάσετε εκ των προτέρων το αρχείο αυτό και να το αντιγράψετε στο [.filename]#$MATLAB/license.dat#, πριν καν σας πει το πρόγραμμα εγκατάστασης να το τροποποιήσετε.
====

. Ολοκλήρωση της Εγκατάστασης

Σε αυτό το σημείο, η εγκατάσταση του MATLAB(R) έχει ολοκληρωθεί. Τα επόμενα βήματα χρειάζονται για να μπορέσετε να το δουλέψετε σωστά με το FreeBSD.

=== Εκκίνηση του License Manager

[.procedure]
. Δημιουργία συμβολικών συνδέσμων για τα scripts του license manager:
+

[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#. Οι αλλαγές είναι στις τοποθεσίες των αρχείων, και στην εκκίνηση του license manager στο περιβάλλον εξομοίωσης Linux του FreeBSD .
+
[.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`).
====

. Εκκινήστε τον license manager με την εντολή:
+

[source,shell]
....
# /usr/local/etc/rc.d/flexlm.sh start
....

[[matlab-jre]]
=== Σύνδεση με το Περιβάλλον του Java(TM) Runtime Environment

Αλλάξτε τον σύνδεσμο τουJava(TM) Runtime Environment (JRE) σε έναν ο οποίος θα δουλεύει στο FreeBSD:

[source,shell]
....
# cd $MATLAB/sys/java/jre/glnx86/
# unlink jre; ln -s ./jre1.1.8 ./jre
....

=== Δημιουργήστε το Script Εκκίνησης του MATLAB(R)

[.procedure]
. Τοποθετήστε το παρακάτω script στο [.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[], που έχετε, μπορεί να εμφανιστούν μερικά σφάλματα όταν τρέξετε το script. Για να το αποφύγετε αυτό, τροποποιήστε το αρχείο [.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
....

====

=== Δημιουργία Script Τερματισμού του MATLAB(R)

Τα επόμενα βήματα χρειάζονται για να λύσετε ένα πρόβλημα που υπάρχει με τον τερματισμό του MATLAB(R).

[.procedure]
. Δημιουργήστε το αρχείο [.filename]#$MATLAB/toolbox/local/finish.m#, και μέσα σε αυτό προσθέστε μόνο τη γραμμή:
+
[.programlisting]
....
! $MATLAB/bin/finish.sh
....

+
[NOTE]
====
To `$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 για Linux σε ένα σύστημα FreeBSD.

=== Εγκατάσταση του Περιβάλλοντος Linux

Σιγουρευτείτε ότι έχετε εγκαταστήσει τα package:emulators/linux_base[] και package:devel/linux_devtools[] από τη συλλογή των Ports. Αν αντιμετωπίζετε δυσκολίες με τα παραπάνω, ίσως χρειαστεί να τα εγκαταστήσετε από πακέτα ή από παλιότερες εκδόσεις της συλλογής των Ports.

Αν θέλετε να τρέξετε τον intelligent agent, θα χρειαστεί να εγκαταστήσετε και το πακέτο Red Hat Tcl: [.filename]#tcl-8.0.3-20.i386.rpm#. Η εντολή για την εγκατάσταση μέσω του επίσημου RPM port (package:archivers/rpm[]) είναι:

[source,shell]
....
# rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm package
....

Η εγκατάσταση του _package_ θα πρέπει να γίνει ομαλά και χωρίς προβλήματα.

=== Ρυθμίζοντας το Περιβάλλον για την Oracle(R)

Πριν την εγκατάσταση της Oracle(R), θα πρέπει να ρυθμίσετε σωστά το περιβάλλον του συστήματός σας. Το παρακάτω κείμενο περιγράφει τι _ακριβώς_ πρέπει να κάνετε για να εκτελέσετε την Oracle(R) για Linux στο FreeBSD, και δεν περιγράφει ότι υπάρχει ήδη στον οδηγό εγκατάστασης της Oracle(R).

[[linuxemu-kernel-tuning]]
==== Ρύθμιση του Πυρήνα

Όπως περιγράφει ο οδηγός εγκατάστασης της Oracle(R), θα πρέπει να ορίσετε τις τιμές της shared memory στο μέγιστο. Μην χρησιμοποιήσετε το `SHMMAX` στο FreeBSD. Το `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` είναι ότι χρειάζεται να του δώσετε ένα κέλυφος Linux. Προσθέστε το `/compat/linux/bin/bash` στο [.filename]#/etc/shells# και ορίστε το κέλυφος του χρήστη `oracle` σε [.filename]#/compat/linux/bin/bash#.

[[linuxemu-environment]]
==== Το Περιβάλλον

Εκτός των συνηθισμένων μεταβλητών της Oracle(R), όπως οι `ORACLE_HOME` και `ORACLE_SID` θα πρέπει να ορίσετε και τις ακόλουθες μεταβλητές περιβάλλοντος:

[.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)

Λόγω μια μικρής έλλειψης στον εξομοιωτή του Linux, θα χρειαστεί να δημιουργήσετε έναν κατάλογο με το όνομα [.filename]#.oracle# μέσα στο [.filename]#/var/tmp#, πριν ξεκινήσετε το πρόγραμμα εγκατάστασης. Ο κατάλογος αυτός θα πρέπει να ανήκει στον χρήστη `oracle`. Θα πρέπει τώρα να πραγματοποιήσετε την εγκατάσταση της Oracle(R) δίχως κανένα πρόβλημα. Αν αντιμετωπίζετε όμως ακόμη προβλήματα, ελέγξτε την έκδοση της Oracle(R) που έχετε ή/και τις ρυθμίσεις σας! Αφότου έχετε πραγματοποιήσει την εγκατάσταση της Oracle(R), εφαρμόστε τα patches που περιγράφονται στις δύο παρακάτω ενότητες.

Ένα συχνό πρόβλημα είναι ότι δεν γίνεται σωστή εγκατάσταση του προσαρμογέα του πρωτοκόλλου TCP. Αυτό έχει ως αποτέλεσμα να μην μπορείτε να ξεκινήσετε τους TCP listeners. Οι ακόλουθες οδηγίες θα σας βοηθήσουν να λύσετε αυτό το πρόβλημα.:

[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`, καταγράφονται σε ένα shell script που λέγεται [.filename]#root.sh#. Το script αυτό δημιουργείται στον κατάλογο [.filename]#orainst#. Εφαρμόστε το παρακάτω patch στο [.filename]#root.sh#, για να μπορέσει να βρει και να χρησιμοποιήσει το `chown`. Εναλλακτικά, τρέξτε το script μέσα από ένα κέλυφος Linux.

[.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 για την εγκατάσταση, μπορείτε να περάσετε το patch για το [.filename]#root.sh#, στην πηγή εγκατάστασης. To αρχείο ονομάζεται [.filename]#rthd.sh# και βρίσκεται στον κατάλογο [.filename]#orainst#.

[[linuxemu-patch-tcl]]
==== Διόρθωση του genclntsh

To script `genclntsh` χρησιμοποιείται για να δημιουργήσει μια shared client library. Τρέξτε το παρακάτω patch για να σβήσετε το καθορισμένο `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) σαν να βρισκόσασταν σε ένα σύστημα Linux. 

[[linuxemu-advanced]]
== Προχωρημένα Θέματα

Αν έχετε την απορία πως λειτουργεί η συμβατότητα με εφαρμογές Linux, τότε θα πρέπει να διαβάσετε τη παρακάτω ενότητα. Τα περισσότερα από όσα έχουν γραφτεί είναι βασισμένα στην {freebsd-chat} και έχουν γραφτεί από τον Terry Lambert mailto:tlambert@primenet.com[tlambert@primenet.com] (Message ID: `<199906020108.SAA07001@usr09.primenet.com>`). 

=== Πως Λειτουργεί;

Το FreeBSD περιέχει ένα επίπεδο αφαίρεσης (abstraction) που ονομάζεται "execution class loader". Αυτό βασίζεται στο man:execve[2].

Αυτό που συμβαίνει είναι ότι το FreeBSD έχει μια λίστα φορτωτών (loaders), αντί για ένα που να καταφεύγει σε περίπτωση αποτυχίας στο `#!` για να τρέξει κάποιο shell interpreter ή shell script.

Ιστορικά, ο μόνος φορτωτής στη πλατφόρμα του UNIX(R) έλεγχε τον μαγικό αριθμό (γενικά τα πρώτα 4 ή 8 bytes του αρχείου) για να δει αν είναι κάποιο εκτελέσιμο / εφαρμογή γνωστό στο σύστημα, και στην περίπτωση αυτή να καλέσει τον αντίστοιχο φορτωτή.

Αν το αρχείο δεν ήταν εκτελέσιμο με βάση τον τύπο του συστήματος, η κλήση στο man:execve[2] επέστρεφε κάποιο σφάλμα, και το shell προσπαθούσε να εκτελέσει το αρχείο σαν shell script.

Η γενική ιδέα ήταν "αν δεν είναι εκτελέσιμο, προσπάθησε να το τρέξεις ως shell script με βάση το τρέχον shell ".

Αργότερα, βρέθηκε ένας έξυπνος τρόπος ώστε το man:sh[1] να ελέγχει τους πρώτους δύο χαρακτήρες, και αν ήταν `:\n`, τότε καλούσε το shell man:csh[1] (πιστεύουμε πως η λύση αυτή βρέθηκε αρχικά από τη SCO).

Αυτό που κάνει τώρα το FreeBSD είναι να διατρέχει τη λίστα με όλους τους φορτωτές, με ένα γενικό φορτωτή `#!` ο οποίος αναγνωρίζει ως διερμηνέα (interpreter) τους χαρακτήρες από το επόμενο κενό μετά το `!` και μέχρι το τέλος, ενώ αν δεν αναγνωριστεί κάποιος, χρησιμοποιείται ως έσχατη λύση το [.filename]##/bin/sh##.

Για την υποστήριξη του Linux ABI, το FreeBSD βλέπει τον μαγικό αριθμό του ELF binary (δε αναγνωρίζει τη διαφορά ανάμεσα σε FreeBSD, Solaris(TM), Linux, ή κάποιο άλλο λειτουργικό σύστημα το οποίο χρησιμοποιεί αρχεία τύπου ELF).

Ο φορτωτής ELF κοιτάει για ένα ειδικό _brand_, το οποίο είναι μια ενότητα σχολίων μέσα στο ELF image, και το οποίο δεν υπάρχει σε ELF binaries για SVR4/Solaris(TM)

Για να λειτουργήσουν τα εκτελέσιμα του Linux, θα πρέπει να γίνουν _branded_ (μαρκαριστούν) ως `Linux` μέσω της man:brandelf[1]:

[source,shell]
....
# brandelf -t Linux file
....

Όταν γίνει αυτό, ο φορτωτής ELF θα βλέπει το `Linux` brand πάνω στο αρχείο.

Όταν ο φορτωτής ELF δει το `Linux` brand, θα αντικαταστήσει έναν δείκτη μέσα στη δομή `proc`. Όλες οι κλήσεις του συστήματος ταξινομούνται μέσα από αυτόν τον δείκτη (σε ένα παραδοσιακό σύστημα UNIX(R), ο δείκτης θα ήταν ο πίνακας `sysent[]`, που περιέχει τις κλήσεις του συστήματος (system calls)). Επιπλέον, η διεργασία σημειώνεται για ειδική μεταχείριση του trap vector και άλλες (μικρές) διορθώσεις, τις οποίες χειρίζεται το άρθρωμα πυρήνα της συμβατότητας Linux.

Το system call vector του Linux περιέχει, μεταξύ άλλων, μια λίστα με τα δεδομένα του `sysent[]` των οποίων οι διευθύνσεις βρίσκονται μέσα στο άρθρωμα του πυρήνα.

Όταν γίνεται μια κλήση συστήματος από μια εφαρμογή Linux, ο κώδικας (trap code) τροποποιεί τον δείκτη της μέσω της δομής που έχει εγγραφεί στο `proc`, και αλλάζει την διεύθυνση ώστε να δείχνει στο σημείο εισόδου της συνάρτησης του Linux, και όχι του FreeBSD.

Επίσης, το σύστημα συμβατότητας με Linux μπορεί και προσαρμόζει δυναμικά τις τοποθεσίες αναζήτησης. Ουσιαστικά αυτό κάνει και η επιλογή `union` κατά την προσάρτηση ενός συστήματος αρχείων (_δεν_ εννοούμε εδώ το σύστημα αρχείων `unionfs`!). Αρχικά, γίνεται απόπειρα να βρεθεί το αρχείο στον κατάλογο [.filename]#/compat/linux/original-path#, _και μόνο_ αν αυτό αποτύχει, θα γίνει αναζήτηση στον κατάλογο [.filename]#/original-path#. Με τον τρόπο αυτό σιγουρεύουμε ότι τα εκτελέσιμα που χρειάζονται άλλα εκτελέσιμα θα τρέξουν (για παράδειγμα, το σύνολο εργαλείων του Linux μπορεί να εκτελεστεί μέσω της υποστήριξης του Linux ABI). Επίσης σημαίνει ότι τα εκτελέσιμα του Linux μπορούν να φορτώσουν και να εκτελέσουν αρχεία του FreeBSD αν δεν μπορούν να εντοπίσουν τα αντίστοιχα αρχεία στο Linux. Μπορείτε επίσης να τοποθετήσετε μια εντολή man:uname[1] μέσα στο [.filename]#/compat/linux# προκειμένου τα αρχεία του Linux να μη μπορούν να αναγνωρίσουν ότι δεν χρησιμοποιούνται πραγματικά σε Linux.

Ουσιαστικά, υπάρχει ένας πυρήνας Linux μέσα στον πυρήνα του FreeBSD. Οι διάφορες λειτουργίες οι οποίες υλοποιούν όλες τις υπηρεσίες που παρέχονται από τον πυρήνα είναι ίδιες τόσο στον πίνακα κλήσεων συστήματος του FreeBSD όσο και στον αντίστοιχο του Linux: λειτουργίες του συστήματος αρχείων, εικονική μνήμη, διαχείριση σημάτων, System V IPC κλπ. Η μόνη διαφορά είναι ότι το εκτελέσιμα του FreeBSD κάνουν χρήση των συναρτήσεων _glue_ του FreeBSD, ενώ τα εκτελέσιμα του Linux, κάνουν χρήση των συναρτήσεων _glue_ του Linux (πολλά από τα παλιά λειτουργικά είχαν τις δικές τους συναρτήσεις _glue_: οι διευθύνσεις των συναρτήσεων βρίσκονταν στο στατικό πίνακα `sysent[]`, αντί να διευκρινίζονται μέσω ενός δυναμικού δείκτη στη δομή `proc` της διεργασίας που πραγματοποιεί την κλήση).

Ποιο είναι όμως το εγγενές FreeBSD ABI; Δεν έχει και πολύ σημασία. Η μόνη βασική διαφορά είναι (κάτι το οποίο μπορεί εύκολα να αλλάξει σε μελλοντικές εκδόσεις, και πολύ πιθανόν να αλλάξει) ότι οι συναρτήσεις _glue_ του FreeBSD είναι στατικά συνδεδεμένες στο πυρήνα, ενώ οι αντίστοιχες του Linux μπορούν είτε να είναι συνδεδεμένες στατικά, είτε να είναι προσβάσιμες μέσω ενός αρθρώματος πυρήνα.

Είναι αυτό όμως πραγματική εξομοίωση; Όχι. Είναι μια υλοποίηση του ABI, όχι εξομοίωση. Δεν υπάρχει καμία εξομοίωση (ή προσομοίωση, για να προλάβουμε την επόμενη σας ερώτηση).

Τότε γιατί μερικές φορές μιλάμε για "εξομοίωση Linux"; Για να δυσκολευτεί η προώθηση του FreeBSD! Η αρχική υλοποίηση έγινε την εποχή όπου δεν υπήρχε άλλη λέξη που να μπορούσε να περιγράψει το τι ακριβώς γινόταν. Το να λέγαμε ότι το FreeBSD έτρεχε εκτελέσιμα Linux δεν θα ήταν αλήθεια, μια και χρειαζόταν να ενσωματωθεί κάποιος κώδικας στον πυρήνα, ή να φορτωθεί κάποιο άρθρωμα. Χρειαζόταν κάποια λέξη που να περιγράφει τι φορτωνόταν-έτσι προέκυψε ο "εξομοιωτής Linux".