1451 lines
56 KiB
XML
1451 lines
56 KiB
XML
<?xml version="1.0" encoding="ISO-8859-7" standalone="no"?>
|
||
<!--
|
||
|
||
Το Εγχειρίδιο του FreeBSD: Συμβατότητα με Εκτελέσιμα του Linux
|
||
|
||
The FreeBSD Greek Documentation Project
|
||
|
||
$FreeBSD$
|
||
|
||
%SOURCE% en_US.ISO8859-1/books/handbook/linuxemu/chapter.sgml
|
||
%SRCID% 38826
|
||
|
||
-->
|
||
|
||
<chapter id="linuxemu">
|
||
<chapterinfo>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>Jim</firstname>
|
||
<surname>Mock</surname>
|
||
<contrib>Αναδομήθηκε και μέρη του ανανεώθηκαν από τον </contrib>
|
||
</author>
|
||
<!-- 22 Mar 2000 -->
|
||
</authorgroup>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>Brian N.</firstname>
|
||
<surname>Handy</surname>
|
||
<contrib>Αρχική συνεισφορά από τον </contrib>
|
||
</author>
|
||
<author>
|
||
<firstname>Rich</firstname>
|
||
<surname>Murphey</surname>
|
||
</author>
|
||
</authorgroup>
|
||
</chapterinfo>
|
||
|
||
<title>Συμβατότητα με Εκτελέσιμα του Linux</title>
|
||
|
||
<sect1 id="linuxemu-synopsis">
|
||
<title>Σύνοψη</title>
|
||
<indexterm>
|
||
<primary>Συμβατότητα με εκτελέσιμα (binary) Linux</primary>
|
||
</indexterm>
|
||
<indexterm>
|
||
<primary>binary συμβατότητα</primary>
|
||
<secondary>Linux</secondary>
|
||
</indexterm>
|
||
<indexterm>
|
||
<primary>συμβατότητα εκτελέσιμων Linux</primary>
|
||
</indexterm>
|
||
<indexterm>
|
||
<primary>συμβατότητα εκτελέσιμων</primary>
|
||
<secondary>Linux</secondary>
|
||
</indexterm>
|
||
|
||
<para>Το &os; παρέχει binary συμβατότητα (εκτελέσιμων) με αρκετά άλλα
|
||
λειτουργικά τύπου &unix;, συμπεριλαμβανομένου και του Linux. Σε αυτό
|
||
το σημείο, μπορεί να αναρωτιέστε γιατί ακριβώς χρειάζεται το &os; να
|
||
μπορεί να τρέξει εκτελέσιμα Linux; H απάντηση σε αυτή την ερώτηση είναι
|
||
αρκετά απλή. Πολλές εταιρίες και προγραμματιστές αναπτύσσουν εφαρμογές
|
||
μόνο για Linux, μια και είναι πολύ <quote>της μόδας</quote> στο
|
||
κόσμο των υπολογιστών. Αυτό αναγκάζει εμάς τους υπόλοιπους, που
|
||
χρησιμοποιούμε το &os;, να πιέζουμε τις ίδιες αυτές εταιρίες και
|
||
προγραμματιστές να δημιουργήσουν κανονικές εκδόσεις των εφαρμογών
|
||
τους για &os;. Το πρόβλημα είναι, ότι οι περισσότερες από αυτές τις
|
||
εταιρίες δεν αντιλαμβάνονται πραγματικά πόσοι περισσότεροι άνθρωποι θα
|
||
χρησιμοποιούσαν το προϊόν τους αν είχαν εκδόσεις και για &os;, και οι
|
||
περισσότερες συνεχίζουν να αναπτύσσουν μόνο για Linux. Άρα τι μπορεί να
|
||
κάνει ένας χρήστης του &os;; Εδώ έρχεται να βοηθήσει η binary
|
||
συμβατότητα του &os; με το Linux.</para>
|
||
|
||
<para>Εν συντομία, η συμβατότητα επιτρέπει στους χρήστες του &os; να
|
||
εκτελέσουν περίπου το 90% όλων των Linux εφαρμογών χωρίς μετατροπές.
|
||
Αυτό περιλαμβάνει εφαρμογές όπως
|
||
το <application>&staroffice;</application>, την Linux έκδοση
|
||
του <application>&netscape;</application>,
|
||
<application>&adobe; &acrobat;</application>,
|
||
<application>&realplayer;</application>,
|
||
<application>&oracle;</application>,
|
||
<application>&wordperfect;</application>,
|
||
<application>Doom</application>,
|
||
<application>Quake</application>, και περισσότερα. Έχει επίσης
|
||
αναφερθεί ότι σε κάποιες περιπτώσεις, τα εκτελέσιμα του Linux έχουν
|
||
καλύτερη απόδοση στο &os; από ότι στο Linux.</para>
|
||
|
||
<para>Υπάρχουν ωστόσο κάποια συγκεκριμένα για το Linux στοιχεία του
|
||
λειτουργικού που δεν υποστηρίζονται στο &os;. Τα εκτελέσιμα του Linux
|
||
δεν θα δουλέψουν στο &os; αν χρησιμοποιούν πολλές εξειδικευμένες
|
||
κλήσεις &i386;, όπως για παράδειγμα την ενεργοποίηση της εικονικής
|
||
κατάστασης 8086.</para>
|
||
|
||
<para>Αφού διαβάσετε αυτό το κεφάλαιο, θα ξέρετε:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Πως να ενεργοποιήσετε την συμβατότητα εκτελέσιμων με το Linux
|
||
στο σύστημα σας.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Πως να εγκαταστήσετε πρόσθετες κοινόχρηστες βιβλιοθήκες του
|
||
Linux.</para>
|
||
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Πως να εγκαταστήσετε εφαρμογές του Linux στο &os;.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Τις λεπτομέρειες της υλοποίησης της συμβατότητας με το Linux στο
|
||
&os;.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Πριν διαβάσετε αυτό το κεφάλαιο, θα πρέπει:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Να γνωρίζετε πως θα εγκαταστήσετε πρόσθετο λογισμικό
|
||
τρίτου κατασκευαστή (<xref linkend="ports"/>).</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
</sect1>
|
||
|
||
<sect1 id="linuxemu-lbc-install">
|
||
<title>Εγκατάσταση</title>
|
||
|
||
<indexterm><primary>KLD (kernel loadable object)</primary></indexterm>
|
||
|
||
<para>Η συμβατότητα με εκτελέσιμα του Linux δεν είναι ενεργή εξ' αρχής. Ο
|
||
ευκολότερος τρόπος για να ενεργοποιήσετε αυτή τη λειτουργία είναι να
|
||
φορτώσετε το KLD (άρθρωμα) <literal>linux</literal> (<quote>Kernel
|
||
LoaDable object</quote>). Μπορείτε να φορτώσετε αυτό το άρθρωμα στον
|
||
πυρήνα δίνοντας τη παρακάτω εντολή ως <username>root</username>:</para>
|
||
|
||
<screen>&prompt.root; <userinput>kldload linux</userinput></screen>
|
||
|
||
<para>Αν θέλετε να έχετε πάντα ενεργοποιημένη τη συμβατότητα με Linux,
|
||
τότε θα χρειαστεί να προσθέσετε τη παρακάτω γραμμή στο
|
||
<filename>/etc/rc.conf</filename>:</para>
|
||
|
||
<programlisting>linux_enable="YES"</programlisting>
|
||
|
||
<para>Η εντολή &man.kldstat.8; μπορεί να χρησιμοποιηθεί για να ελεγχθεί
|
||
αν το KLD είναι φορτωμένο:</para>
|
||
|
||
<screen>&prompt.user; <userinput>kldstat</userinput>
|
||
Id Refs Address Size Name
|
||
1 2 0xc0100000 16bdb8 kernel
|
||
7 1 0xc24db000 d000 linux.ko</screen>
|
||
<indexterm>
|
||
<primary>kernel options</primary>
|
||
<secondary>COMPAT_LINUX</secondary>
|
||
</indexterm>
|
||
|
||
<para>Αν για κάποιο λόγο δεν θέλετε ή δε μπορείτε να φορτώσετε το KLD,
|
||
τότε μπορείτε να συνδέσετε στατικά την υποστήριξη εκτελέσιμων του Linux
|
||
στον πυρήνα με το να προσθέσετε την επιλογή <literal>options
|
||
COMPAT_LINUX</literal> στο αρχείων ρυθμίσεων του πυρήνα. Στη συνέχεια
|
||
μπορείτε να εγκαταστήσετε τον νέο πυρήνα όπως περιγράφεται στο
|
||
<xref linkend="kernelconfig"/>.</para>
|
||
|
||
<sect2>
|
||
<title>Εγκατάσταση των Linux Runtime Libraries</title>
|
||
<indexterm>
|
||
<primary>Linux</primary>
|
||
<secondary>εγκατάσταση βιβλιοθηκών Linux</secondary>
|
||
</indexterm>
|
||
|
||
<para>Αυτό μπορεί να γίνει με δύο τρόπους. Είτε με τη χρήση του
|
||
<link linkend="linuxemu-libs-port">linux_base-fc4</link> port, ή
|
||
με <link linkend="linuxemu-libs-manually">χειροκίνητη</link>
|
||
εγκατάσταση τους.</para>
|
||
|
||
<sect3 id="linuxemu-libs-port">
|
||
<title>Εγκατάσταση μέσω του linux_base Port</title>
|
||
<indexterm><primary>Ports Collection</primary></indexterm>
|
||
|
||
<para>Αυτός είναι κατά γενική ομολογία ο ευκολότερος τρόπος για την
|
||
εγκατάσταση των runtime libraries. Είναι η ίδια διαδικασία
|
||
εγκατάστασης που ακολουθείται και για οποιοδήποτε άλλο port από
|
||
τη <link linkend="ports">Συλλογή των Ports</link>. Απλά κάντε το
|
||
παρακάτω:</para>
|
||
|
||
<screen>&prompt.root; <userinput>cd /usr/ports/emulators/linux_base-f10</userinput>
|
||
&prompt.root; <userinput>make install distclean</userinput></screen>
|
||
|
||
<note>
|
||
<para>Αν χρησιμοποιείτε κάποια έκδοση του &os; πριν την 8.0, θα
|
||
πρέπει να εγκαταστήσετε το port <filename
|
||
role="package">emulators/linux_base-fc4</filename>
|
||
αντί για το <filename
|
||
role="package">emulators/linux_base-f10</filename>.</para>
|
||
</note>
|
||
|
||
<para>Θα πρέπει τώρα να έχετε κανονική συμβατότητα με εκτελέσιμα του
|
||
Linux. Μερικά προγράμματα παραπονιούνται ότι οι βιβλιοθήκες
|
||
συστήματος (system libraries) δεν είναι στη τελευταία τους έκδοση.
|
||
Γενικά όμως, αυτό δεν αποτελεί κανένα πρόβλημα.</para>
|
||
|
||
<note><para>Μπορούν να υπάρχουν πολλαπλές εκδόσεις
|
||
του <filename role="package">emulators/linux_base</filename>, που να
|
||
αντιστοιχούν στις διαφορετικές εκδόσεις των διανομών Linux. Θα
|
||
πρέπει να κάνετε εγκατάσταση των ports που προαπαιτούνται από τις
|
||
εφαρμογές Linux τις οποίες θέλετε να εγκαταστήσετε.</para></note>
|
||
|
||
</sect3>
|
||
|
||
<sect3 id="linuxemu-libs-manually">
|
||
<title>Χειροκίνητη εγκατάσταση των Libraries</title>
|
||
|
||
<para>Αν δεν έχετε εγκαταστήσει την συλλογή των <quote>ports</quote>,
|
||
μπορείτε να εγκαταστήσετε τις βιβλιοθήκες χειροκίνητα. Θα
|
||
χρειαστείτε τα Linux shared libraries τα οποία απαιτεί το πρόγραμμα.
|
||
Επίσης, θα χρειαστεί να δημιουργήσετε και έναν κατάλογο
|
||
<quote>shadow root</quote>, <filename>/compat/linux</filename>, για
|
||
τις βιβλιοθήκες Linux που θα υπάρχουν στο &os;. Οποιαδήποτε κοινές
|
||
βιβλιοθήκες (shared libraries) οι οποίες χρησιμοποιούνται από
|
||
εφαρμογές Linux και εκτελούνται στο &os; θα κοιτάξουν πρώτα σε
|
||
αυτόν τον κατάλογο. Επομένως, αν μια εφαρμογή Linux φορτώσει για
|
||
παράδειγμα το <filename>/lib/libc.so</filename>, το &os; θα
|
||
προσπαθήσει να φορτώσει πρώτα το
|
||
<filename>/compat/linux/lib/libc.so</filename>,
|
||
και αν αυτό δεν υπάρχει, τότε θα προσπαθήσει να φορτώσει
|
||
το <filename>/lib/libc.so</filename>. Τα shared libraries θα πρέπει
|
||
να εγκατασταθούν στο shadow
|
||
tree <filename>/compat/linux/lib</filename> αντί για τις τοποθεσίες
|
||
που αναφέρει το <command>ld.so</command> στο Linux.</para>
|
||
|
||
<para>Γενικά, τουλάχιστον στις πρώτες σας εγκαταστάσεις εφαρμογών
|
||
Linux, θα χρειαστεί να ψάξετε για τις κοινές βιβλιοθήκες από τα
|
||
αντίστοιχα εκτελέσιμα. Μετά από κάποιο διάστημα θα έχετε ένα
|
||
ικανοποιητικό αριθμό Linux shared libraries στο σύστημά σας και
|
||
πλέον δε θα χρειάζεται επιπλέον εργασία πέρα από την εγκατάσταση της
|
||
εφαρμογής.</para>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title>Εγκατάσταση Πρόσθετων Shared Libraries</title>
|
||
<indexterm><primary>shared libraries</primary></indexterm>
|
||
|
||
<para>Και τι γίνεται στη περίπτωση που έχετε εγκαταστήσει
|
||
το <filename>linux_base</filename> port και οι εφαρμογές σας ακόμη
|
||
παραπονιούνται για shared libraries που λείπουν; Πώς μπορείτε να
|
||
ξέρετε ποια shared libraries χρειάζεται κάποια εφαρμογή, και που
|
||
μπορείτε να τα βρείτε; Βασικά, υπάρχουν 2 επιλογές (για να
|
||
ακολουθήσετε τις παρακάτω οδηγίες θα πρέπει να είστε
|
||
<username>root</username> στο σύστημά σας).</para>
|
||
|
||
<para>Αν έχετε πρόσβαση σε κάποιο μηχάνημα Linux, ρίξτε μια ματιά στα
|
||
shared libraries που χρειάζεται μια εφαρμογή, και αντιγράψτε τα στο
|
||
&os;. Δείτε το παρακάτω παράδειγμα:</para>
|
||
|
||
<informalexample>
|
||
<para>Ας υποθέσουμε ότι κατεβάσατε μέσω FTP το εκτελέσιμο του
|
||
<application>Doom</application> για το Linux, και το βάλατε
|
||
στο Linux σύστημα στο οποίο έχετε πρόσβαση. Μπορείτε στη
|
||
συνέχεια να ελέγξετε ποια shared libraries χρειάζεται η εφαρμογή
|
||
με την εντολή <command>ldd linuxdoom</command>, όπως:</para>
|
||
|
||
<screen>&prompt.user; <userinput>ldd linuxdoom</userinput>
|
||
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</screen>
|
||
|
||
<indexterm><primary>symbolic links</primary></indexterm>
|
||
<para>Θα χρειαστεί να πάρετε όλα τα αρχεία από τη τελευταία στήλη,
|
||
και να τα αντιγράψετε στον
|
||
κατάλογο <filename>/compat/linux</filename>, και να δημιουργήσετε
|
||
προς αυτά τους αντίστοιχους συμβολικούς δεσμούς (symbolic links)
|
||
με τα ονόματα της πρώτης στήλης. Αυτό σημαίνει ότι πρακτικά,
|
||
θα έχετε αυτά τα αρχεία στο σύστημα σας:</para>
|
||
|
||
<screen>/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</screen>
|
||
|
||
<blockquote>
|
||
<note>
|
||
<para>Σημειώστε ότι αν έχετε ήδη κάποιο Linux shared library
|
||
που ο αριθμός έκδοσης είναι ο ίδιος με αυτόν της πρώτης στήλης
|
||
του <command>ldd</command>, δε θα χρειαστεί να αντιγράψετε το
|
||
αρχείο όπως αυτό ονομάζεται στη τελευταία στήλη, τα υπάρχοντα
|
||
αρχεία θα πρέπει να κάνουν τη δουλειά τους. Σας συμβουλεύουμε
|
||
όμως να αντιγράψετε το shared library αν είναι κάποια νεότερη
|
||
έκδοση. Μπορείτε να διαγράψετε τα παλιά αρχεία, αρκεί όμως να
|
||
ανανεώσετε τους συμβολικούς δεσμούς ώστε να οδηγούν στα νέα
|
||
αρχεία. Επομένως, αν έχετε τις παρακάτω βιβλιοθήκες στο
|
||
σύστημά σας:</para>
|
||
|
||
<screen>/compat/linux/lib/libc.so.4.6.27
|
||
/compat/linux/lib/libc.so.4 -> libc.so.4.6.27</screen>
|
||
|
||
<para>και βρείτε μια εφαρμογή η οποία ζητάει μια νεότερη έκδοση
|
||
μέσω του <command>ldd</command>:
|
||
</para>
|
||
|
||
<screen>libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29</screen>
|
||
|
||
<para>Αν η διαφορά της έκδοσης στο τελευταία ψηφίο είναι μόνο
|
||
μίας ή δύο εκδόσεων, τότε μην σας απασχολεί η αντιγραφή του
|
||
<filename>/lib/libc.so.4.6.29</filename>, γιατί το πρόγραμμα
|
||
θα πρέπει να τρέχει κανονικά και με τη λίγο παλαιότερη έκδοση.
|
||
Παρ' όλα αυτά, αν θέλετε, μπορείτε να αντικαταστήσετε το
|
||
<filename>libc.so</filename> και έτσι θα έχετε το παρακάτω:
|
||
</para>
|
||
|
||
<screen>/compat/linux/lib/libc.so.4.6.29
|
||
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29</screen>
|
||
</note>
|
||
</blockquote>
|
||
|
||
<blockquote>
|
||
<note>
|
||
<para>Ο μηχανισμός των συμβολικών συνδέσμων χρειάζεται
|
||
<emphasis>μόνο</emphasis> για τις εφαρμογές του Linux. Ο
|
||
runtime linker του &os; κοιτάει μόνος του για τις πιο
|
||
πρόσφατες εκδόσεις των βιβλιοθηκών και έτσι δε χρειάζεται να
|
||
σας απασχολεί.
|
||
</para>
|
||
</note>
|
||
</blockquote>
|
||
</informalexample>
|
||
</sect3>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Εγκατάσταση των Linux ELF Binaries</title>
|
||
<indexterm>
|
||
<primary>Linux</primary>
|
||
<secondary>ELF binaries</secondary>
|
||
</indexterm>
|
||
|
||
<para>Τα ELF binaries χρειάζονται μερικές φορές ένα ακόμα βήμα, το
|
||
<quote>branding</quote>. Αν προσπαθήσετε να τρέξετε ένα
|
||
εκτελέσιμο ELF χωρίς branding, τότε θα σας εμφανιστεί το παρακάτω
|
||
σφάλμα:</para>
|
||
|
||
<screen>&prompt.user; <userinput>./my-linux-elf-binary</userinput>
|
||
ELF binary type not known
|
||
Abort</screen>
|
||
|
||
<para>Για να βοηθήσετε τον πυρήνα του &os; να ξεχωρίσει ένα ELF του
|
||
&os; από ένα του Linux, χρησιμοποιήστε την εντολή &man.brandelf.1;.
|
||
</para>
|
||
|
||
<screen>&prompt.user; <userinput>brandelf -t Linux my-linux-elf-binary</userinput></screen>
|
||
|
||
<indexterm><primary>GNU toolchain</primary></indexterm>
|
||
<para>To GNU toolchain, ομάδα πρόγραμμα GNU, τοποθετεί πλέον αυτόματα τα
|
||
κατάλληλα χαρακτηριστικά στα εκτελέσιμα ELF, επομένως το παραπάνω βήμα
|
||
θα χρειάζεται όλο και λιγότερο στο μέλλον.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Εγκατάσταση μιας Τυχαίας Linux RPM Εφαρμογής</title>
|
||
|
||
<para>Το &os; διαθέτει την δική του βάση δεδομένων για τα πακέτα,
|
||
η οποία χρησιμοποιείται για όλα τα ports (και για αυτά που
|
||
προέρχονται από το &linux;). Για το λόγο αυτό, η βάση δεδομένων
|
||
&linux; RPM δεν χρησιμοποιείται (δεν υποστηρίζεται).</para>
|
||
|
||
<para>Αν ωστόσο χρειάζεται να εγκαταστήσετε μια οποιαδήποτε εφαρμογή
|
||
του &linux; που βασίζεται σε πακέτο RPM, μπορείτε να το επιτύχετε
|
||
με τον παρακάτω τρόπο:</para>
|
||
|
||
<screen>&prompt.root; <userinput>cd /compat/linux</userinput>
|
||
&prompt.root; <userinput>rpm2cpio -q < /path/to/linux.archive.rpm | cpio -id</userinput></screen>
|
||
|
||
<para>Χρησιμοποιήστε την &man.brandelf.1; για να τυποποιήσετε
|
||
κατάλληλα τα εκτελέσιμα (όχι τις βιβλιοθήκες!) ως εφαρμογές &linux;.
|
||
Δεν θα μπορείτε να απεγκαταστήσετε τις εφαρμογές με καθαρό τρόπο,
|
||
αλλά θα μπορέσετε να κάνετε τις δοκιμές που επιθυμείτε.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Ρύθμιση του Hostname Resolver</title>
|
||
|
||
<para>Αν το DNS δε δουλεύει ή αν σας εμφανίζεται το παρακάτω
|
||
σφάλμα:</para>
|
||
|
||
<screen>resolv+: "bind" is an invalid keyword resolv+:
|
||
"hosts" is an invalid keyword</screen>
|
||
|
||
<para>Θα χρειαστεί να ρυθμίσετε
|
||
το <filename>/compat/linux/etc/host.conf</filename> ώστε να περιέχει:
|
||
</para>
|
||
|
||
<programlisting>order hosts, bind
|
||
multi on</programlisting>
|
||
|
||
<para>Η σειρά εδώ δηλώνει ότι αρχικά ελέγχεται το
|
||
αρχείο <filename>/etc/hosts</filename> και στη συνέχεια ο DNS server.
|
||
Όταν το <filename>/compat/linux/etc/host.conf</filename> δεν είναι
|
||
διαθέσιμο, οι εφαρμογές Linux χρησιμοποιούν το
|
||
<filename>/etc/host.conf</filename> του &os; και παραπονιούνται ότι
|
||
η σύνταξη του αρχείου δεν είναι σωστή. Θα πρέπει να αφαιρέσετε
|
||
την αναφορά στο <literal>bind</literal> αν δεν έχετε ρυθμίσει ένα
|
||
name server μέσω του <filename>/etc/resolv.conf</filename>.</para>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<sect1 id="linuxemu-mathematica">
|
||
<sect1info>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>Boris</firstname>
|
||
<surname>Hollas</surname>
|
||
<contrib>Ανανεώθηκε για το Mathematica 5.X από τον </contrib>
|
||
</author>
|
||
</authorgroup>
|
||
</sect1info>
|
||
<title>Εγκαθιστώντας το &mathematica;</title>
|
||
|
||
<indexterm>
|
||
<primary>applications</primary>
|
||
<secondary><application>Mathematica</application></secondary>
|
||
</indexterm>
|
||
|
||
<para>Το κείμενο αυτό περιγράφει τη διαδικασία εγκατάστασης της έκδοσης
|
||
Linux του <application>&mathematica; 5.X</application> σε ένα
|
||
σύστημα &os;.</para>
|
||
|
||
<para>Μπορείτε να αγοράσετε την κανονική ή μαθητική έκδοση του
|
||
<application>&mathematica;</application> για Linux, απευθείας από τη
|
||
Wolfram στο <ulink url="http://www.wolfram.com/"></ulink>.</para>
|
||
|
||
<sect2>
|
||
<title>Το Πρόγραμμα Εγκατάστασης του &mathematica;</title>
|
||
|
||
<para>Αρχικά, θα πρέπει να πείτε στο &os; ότι τα εκτελέσιμα για Linux
|
||
του <application>&mathematica;</application> κάνουν χρήση του Linux
|
||
ABI. Ο ευκολότερος τρόπος για να το κάνετε αυτό είναι να ορίσετε τον
|
||
τύπο του ELF ως Linux σε όλες τις εφαρμογές που δεν είναι ήδη
|
||
branded, κάνοντας χρήση της εντολής:</para>
|
||
|
||
<screen>&prompt.root; <userinput>sysctl kern.fallback_elf_brand=3</userinput></screen>
|
||
|
||
<para>Αυτό θα κάνει το &os; να υποθέσει ότι τα εκτελέσιμα ELF που δεν
|
||
είναι branded, κάνουν χρήση του Linux ABI και έτσι θα μπορείτε να
|
||
τρέξετε το πρόγραμμα της εγκατάστασης απευθείας από το CDROM.</para>
|
||
|
||
<para>Τώρα, αντιγράψτε το αρχείο <filename>MathInstaller</filename>
|
||
στον σκληρό σας δίσκο:</para>
|
||
|
||
<screen>&prompt.root; <userinput>mount /cdrom</userinput>
|
||
&prompt.root; <userinput>cp /cdrom/Unix/Installers/Linux/MathInstaller /localdir/</userinput></screen>
|
||
|
||
<para>Ανοίξτε το αρχείο και αντικαταστήστε το <literal>/bin/sh</literal>
|
||
στη πρώτη γραμμή με το <literal>/compat/linux/bin/sh</literal>. Αυτό
|
||
θα σιγουρέψει ότι το πρόγραμμα εγκατάστασης θα τρέχει με την έκδοση
|
||
&man.sh.1; για Linux. Στη συνέχεια, αντικαταστήστε όλες τις εγγραφές
|
||
<literal>Linux)</literal> με <literal>&os;)</literal> χρησιμοποιώντας
|
||
έναν συντάκτη κειμένου ή με το παρακάτω script στην επόμενη ενότητα.
|
||
Αυτό θα πει στο πρόγραμμα εγκατάστασης του
|
||
<application>&mathematica;</application>,
|
||
το οποίο τρέχει την εντολή <command>uname -s</command> για να
|
||
διαπιστώσει το λειτουργικό σύστημα,
|
||
να αντιμετωπίσει το &os; σαν ένα λειτουργικό παρεμφερές με το Linux.
|
||
Η εκτέλεση του <command>MathInstaller</command> θα ξεκινήσει τώρα την
|
||
εγκατάσταση του <application>&mathematica;</application>.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Τροποποιώντας τα Εκτελέσιμα του &mathematica;</title>
|
||
|
||
<para>Τα shell scripts τα οποία δημιουργεί
|
||
το <application>&mathematica;</application> κατά τη διαδικασία της
|
||
εγκατάστασης πρέπει να τροποποιηθούν πριν χρησιμοποιηθούν. Αν
|
||
επιλέξετε το <filename class="directory">/usr/local/bin</filename> ως
|
||
τον κατάλογο για τα εκτελέσιμα του
|
||
<application>&mathematica;</application>, θα βρείτε εκεί
|
||
συμβολικούς δεσμούς (symlinks) προς τα αρχεία
|
||
<filename>math</filename>, <filename>mathematica</filename>,
|
||
<filename>Mathematica</filename>, και
|
||
<filename>MathKernel</filename>. Σε κάθε περίπτωση από τις παραπάνω,
|
||
αντικαταστήστε τις εγγραφές
|
||
<literal>Linux)</literal> με <literal>&os;)</literal> με κάποιον
|
||
συντάκτη κειμένου ή με το παρακάτω shell script:</para>
|
||
|
||
<programlisting>#!/bin/sh
|
||
cd /usr/local/bin
|
||
for i in math mathematica Mathematica MathKernel
|
||
do sed 's/Linux)/&os;)/g' $i > $i.tmp
|
||
sed 's/\/bin\/sh/\/compat\/linux\/bin\/sh/g' $i.tmp > $i
|
||
rm $i.tmp
|
||
chmod a+x $i
|
||
done</programlisting>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Αποκτώντας Κωδικό για το &mathematica;</title>
|
||
|
||
<indexterm>
|
||
<primary>Ethernet</primary>
|
||
<secondary>MAC address</secondary>
|
||
</indexterm>
|
||
|
||
<para>Όταν εκκινήσετε το <application>&mathematica;</application> για
|
||
πρώτη φορά, θα ερωτηθείτε για έναν κωδικό. Αν δεν έχετε κάποιον
|
||
κωδικό σε αυτό το στάδιο, τρέξτε το πρόγραμμα
|
||
<command>mathinfo</command> που βρίσκεται στον κατάλογο εγκατάστασης
|
||
για να σας δοθεί το <quote>machine ID</quote>. Το "machine ID" είναι
|
||
εξ' ολοκλήρου βασισμένο στη διεύθυνση MAC της κάρτας δικτύου που
|
||
έχετε. Αυτό σημαίνει ότι δεν μπορείτε να τρέξετε το
|
||
<application>&mathematica;</application> σε άλλους υπολογιστές.
|
||
</para>
|
||
|
||
<para>Όταν εγγραφείτε στη Wolfram, με e-mail, τηλέφωνο ή fax, θα
|
||
χρειαστεί να δώσετε το <quote>machine ID</quote> και θα σας απαντήσουν
|
||
με έναν αντίστοιχο κωδικό που θα αποτελείται από μια σειρά αριθμών.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Τρέχοντας το &mathematica; Frontend μέσω Δικτύου</title>
|
||
|
||
<para>Το <application>&mathematica;</application> κάνει χρήση κάποιων
|
||
ειδικών γραμματοσειρών για να εμφανίσει χαρακτήρες οι οποίοι δεν
|
||
υπάρχουν στα συνηθισμένα σετ (ολοκληρώματα, αθροίσματα, Ελληνικά
|
||
γράμματα, κλπ). To πρωτόκολλο X απαιτεί αυτές οι
|
||
γραμματοσειρές να υπάρχουν στο <emphasis>τοπικό</emphasis> σύστημα.
|
||
Αυτό σημαίνει ότι θα χρειαστεί να αντιγράψετε τις γραμματοσειρές αυτές
|
||
από το CDROM ή από από κάποιον άλλον υπολογιστή που έχει
|
||
το <application>&mathematica;</application>. Συνήθως αυτές οι
|
||
γραμματοσειρές μπορούν να βρεθούν μέσα στο κατάλογο
|
||
<filename>/cdrom/Unix/Files/SystemFiles/Fonts</filename> του
|
||
CDROM, ή στον κατάλογο
|
||
<filename>/usr/local/mathematica/SystemFiles/Fonts</filename> στον
|
||
τοπικό σκληρό δίσκο. Οι πραγματικές γραμματοσειρές βρίσκονται σε
|
||
υποκαταλόγους όπως <filename>Type1</filename> και
|
||
<filename>X</filename>. Υπάρχουν αρκετοί τρόποι
|
||
να τις χρησιμοποιήσετε, οι οποίοι περιγράφονται στη συνέχεια.</para>
|
||
|
||
<para>Ο πρώτος τρόπος είναι να τις αντιγράψετε μέσα σε έναν υπάρχοντα
|
||
κατάλογο στο <filename>/usr/X11R6/lib/X11/fonts</filename>. Θα
|
||
χρειαστεί όμως να τροποποιήσετε το
|
||
αρχείο <filename>fonts.dir</filename>, ώστε να προσθέσετε τα ονόματα
|
||
των γραμματοσειρών μέσα σε αυτό, και να αλλάξετε τον αριθμό των
|
||
γραμματοσειρών στη πρώτη γραμμή. Εναλλακτικά, είναι συνήθως αρκετό
|
||
να εκτελέσετε απλώς την εντολή &man.mkfontdir.1; μέσα στον κατάλογο
|
||
που έχετε αντιγράψει τις γραμματοσειρές.
|
||
</para>
|
||
|
||
<para>Ο δεύτερος τρόπος είναι να αντιγράψετε τους παραπάνω καταλόγους
|
||
μέσα στο <filename>/usr/X11R6/lib/X11/fonts</filename>:</para>
|
||
|
||
<screen>&prompt.root; <userinput>cd /usr/X11R6/lib/X11/fonts</userinput>
|
||
&prompt.root; <userinput>mkdir X</userinput>
|
||
&prompt.root; <userinput>mkdir MathType1</userinput>
|
||
&prompt.root; <userinput>cd /cdrom/Unix/Files/SystemFiles/Fonts</userinput>
|
||
&prompt.root; <userinput>cp X/* /usr/X11R6/lib/X11/fonts/X</userinput>
|
||
&prompt.root; <userinput>cp Type1/* /usr/X11R6/lib/X11/fonts/MathType1</userinput>
|
||
&prompt.root; <userinput>cd /usr/X11R6/lib/X11/fonts/X</userinput>
|
||
&prompt.root; <userinput>mkfontdir</userinput>
|
||
&prompt.root; <userinput>cd ../MathType1</userinput>
|
||
&prompt.root; <userinput>mkfontdir</userinput></screen>
|
||
|
||
<para>Τώρα προσθέστε τους νέους καταλόγους με τις γραμματοσειρές στο
|
||
font path:</para>
|
||
|
||
<screen>&prompt.root; <userinput>xset fp+ /usr/X11R6/lib/X11/fonts/X</userinput>
|
||
&prompt.root; <userinput>xset fp+ /usr/X11R6/lib/X11/fonts/MathType1</userinput>
|
||
&prompt.root; <userinput>xset fp rehash</userinput></screen>
|
||
|
||
<para>Αν χρησιμοποιείτε το <application>&xorg;</application>, μπορείτε
|
||
να φορτώνετε τις γραμματοσειρές αυτές αυτόματα, προσθέτοντας τους
|
||
νέους καταλόγους στο αρχείο <filename>xorg.conf</filename>.
|
||
</para>
|
||
|
||
<indexterm><primary>fonts</primary></indexterm>
|
||
|
||
<para>Αν <emphasis>δεν</emphasis> έχετε ήδη έναν κατάλογο με το
|
||
όνομα <filename>/usr/X11R6/lib/X11/fonts/Type1</filename>, μπορείτε να
|
||
αλλάξετε το όνομα του <filename>MathType1</filename> από το παραπάνω
|
||
παράδειγμα σε <filename>Type1</filename>.</para>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<sect1 id="linuxemu-maple">
|
||
<sect1info>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>Aaron</firstname>
|
||
<surname>Kaplan</surname>
|
||
<!-- <address><email>aaron@lo-res.org</email></address> -->
|
||
<contrib>Συνεισφορά του </contrib>
|
||
</author>
|
||
</authorgroup>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>Robert</firstname>
|
||
<surname>Getschmann</surname>
|
||
<!-- <address><email>rob@getschmann.org</email></address> -->
|
||
<contrib>Ευχαριστίες στον </contrib>
|
||
</author>
|
||
</authorgroup>
|
||
</sect1info>
|
||
<title>Εγκαθιστώντας το &maple;</title>
|
||
|
||
<indexterm>
|
||
<primary>applications</primary>
|
||
<secondary><application>Maple</application></secondary>
|
||
</indexterm>
|
||
|
||
<para>Το <application>&maple;</application> είναι μία εμπορική εφαρμογή
|
||
μαθηματικών παρόμοια με το <application>&mathematica;</application>. Θα
|
||
πρέπει να αγοράσετε το λογισμικό από
|
||
το <ulink url="http://www.maplesoft.com/"></ulink> και στη συνέχεια να
|
||
κάνετε αίτηση για μια άδεια χρήσης. Για να εγκαταστήσετε το λογισμικό
|
||
στο &os;, ακολουθήστε τα παρακάτω απλά βήματα.
|
||
</para>
|
||
|
||
<procedure>
|
||
<step>
|
||
<para>Εκτελέστε το <filename>INSTALL</filename> shell script από το
|
||
μέσο εγκατάστασης που έχετε. Επιλέξτε <quote>RedHat</quote> όταν
|
||
ερωτηθείτε από το πρόγραμμα εγκατάστασης. Ο τυπικός κατάλογος
|
||
είναι ο <filename class="directory">/usr/local/maple</filename>.
|
||
</para>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Αν δεν έχετε αγοράσει ακόμη κάποια άδεια για
|
||
το <application>&maple;</application>, αγοράστε μία από το
|
||
Maple Waterloo Software
|
||
(<ulink url="http://register.maplesoft.com/"></ulink>) και
|
||
αντιγράψτε το αρχείο που θα σας δοθεί
|
||
στο <filename>/usr/local/maple/license/license.dat</filename>.
|
||
</para>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Εγκαταστήσετε το <application>FLEXlm</application> license
|
||
manager εκτελώντας το <filename>INSTALL_LIC</filename> shell
|
||
script το οποία παρέχεται μαζί με
|
||
το <application>&maple;</application>. Δώστε το βασικό όνομα του
|
||
υπολογιστή σας το οποίο απαιτείται από τον
|
||
εξυπηρετητή διαχείρισης των αδειών (license server).</para>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Χρησιμοποιήστε το παρακάτω patch στο αρχείο
|
||
<filename>/usr/local/maple/bin/maple.system.type</filename>:
|
||
</para>
|
||
|
||
<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 -----</programlisting>
|
||
|
||
<para>Σημειώστε ότι μετά το <literal>"FreeBSD"|\</literal>
|
||
δεν πρέπει να εμφανίζεται άλλο κενό διάστημα.</para>
|
||
|
||
<para>Το patch αυτό οδηγεί το <application>&maple;</application> να
|
||
αναγνωρίσει το <quote>&os;</quote> σαν ένα σύστημα Linux.
|
||
Το <filename>bin/maple</filename> shell script καλεί το
|
||
<filename>bin/maple.system.type</filename> shell script, το οποίο με
|
||
τη σειρά του καλεί την εντολή <command>uname -a</command>
|
||
προκειμένου να εντοπιστεί το όνομα του λειτουργικού
|
||
συστήματος. Αναλόγως με το ποιο λειτουργικό βρεθεί, θα
|
||
χρησιμοποιηθούν και τα αντίστοιχα εκτελέσιμα αρχεία.</para>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Εκκινήστε τον license server.</para>
|
||
|
||
<para>Ένας βολικός τρόπος για να εκκινήσετε το<command>lmgrd</command>
|
||
είναι το ακόλουθο script που βρίσκεται στο
|
||
<filename>/usr/local/etc/rc.d/lmgrd.sh</filename>:</para>
|
||
|
||
<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 ------------</programlisting></step>
|
||
|
||
|
||
<step>
|
||
<para>Δοκιμή του <application>&maple;</application>:</para>
|
||
|
||
<screen>&prompt.user; <userinput>cd /usr/local/maple/bin</userinput>
|
||
&prompt.user; <userinput>./xmaple</userinput></screen>
|
||
|
||
<para>Σε αυτό το σημείο θα πρέπει να είναι όλα έτοιμα και να μην έχετε
|
||
κανένα πρόβλημα. Μην ξεχάσετε όμως να στείλετε ένα e-mail στη
|
||
Maplesoft και να τους πείτε ότι θέλετε μια έκδοση που να
|
||
υποστηρίζεται επίσημα στο &os;.</para>
|
||
</step>
|
||
</procedure>
|
||
|
||
<sect2>
|
||
<title>Συνηθισμένα Προβλήματα</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Ίσως δυσκολευτείτε με την λειτουργία του
|
||
<application>FLEXlm</application> license manager. Επιπλέον
|
||
τεκμηρίωση μπορείτε να βρείτε
|
||
στο <ulink url="http://www.globetrotter.com/"></ulink>.
|
||
</para></listitem>
|
||
|
||
<listitem>
|
||
<para>Το <command>lmgrd</command> είναι γνωστό ότι θέλει το αρχείο
|
||
της άδειας να έχει συγκεκριμένη μορφή αλλιώς η εκτέλεση του θα
|
||
αποτύχει. Ένα σωστό αρχείο άδειας χρήσης πρέπει είναι σε γενικές
|
||
γραμμές όπως το παρακάτω:</para>
|
||
|
||
<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</programlisting>
|
||
|
||
<note>
|
||
<para>Ο σειριακός αριθμός και το κλειδί φαίνονται εδώ με
|
||
'X'. Το <hostid>chillig</hostid> είναι το όνομα του
|
||
συστήματος.</para>
|
||
</note>
|
||
|
||
<para>Μπορείτε να τροποποιήσετε το αρχείο της άδειας χρήσης, αρκεί
|
||
να μην αλλάξετε την γραμμή <quote>FEATURE</quote> (η οποία
|
||
προστατεύεται από το κλειδί της άδειας).</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<sect1 id="linuxemu-matlab">
|
||
<sect1info>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>Dan</firstname>
|
||
<surname>Pelleg</surname>
|
||
<contrib>Συνεισφορά του </contrib>
|
||
</author>
|
||
<!-- daniel+handbook@pelleg.org -->
|
||
</authorgroup>
|
||
</sect1info>
|
||
<title>Εγκαθιστώντας το &matlab;</title>
|
||
|
||
<indexterm>
|
||
<primary>applications</primary>
|
||
<secondary><application>MATLAB</application></secondary>
|
||
</indexterm>
|
||
|
||
<para>Το κείμενο αυτό περιγράφει τη διαδικασία εγκατάστασης της Linux
|
||
έκδοσης του <application>&matlab; 6.5</application> σε ένα σύστημα &os;.
|
||
Δουλεύει αρκετά καλά, με εξαίρεση
|
||
το <application>&java.virtual.machine;</application> (δείτε στο
|
||
<xref linkend="matlab-jre"/>).</para>
|
||
|
||
<para>Η Linux έκδοση του <application>&matlab;</application> μπορεί να
|
||
αγοραστεί απευθείας από την εταιρεία The MathWorks
|
||
στο <ulink url="http://www.mathworks.com"></ulink>. Σιγουρευτείτε ότι
|
||
πήρατε και το αρχείο που περιέχει την άδεια χρήσης ή οδηγίες για το πως
|
||
να το δημιουργήσετε. Μια και θα επικοινωνήσετε με την εταιρεία, πείτε
|
||
τους ότι θα θέλατε να υπάρχει επίσης υποστήριξη για το &os;.
|
||
</para>
|
||
|
||
<sect2>
|
||
<title>Εγκατάσταση του &matlab;</title>
|
||
|
||
<para>Για να εγκαταστήσετε το <application>&matlab;</application>, κάντε
|
||
τα παρακάτω:</para>
|
||
|
||
<procedure>
|
||
<step>
|
||
<para>Εισάγετε το CD και προσαρτήστε το στο σύστημα σας. Συνδεθείτε
|
||
ως χρήστης <username>root</username>, όπως συνιστά το script της
|
||
εγκατάστασης. Για να ξεκινήσετε το script της εγκατάστασης δώστε
|
||
την εντολή:</para>
|
||
|
||
<screen>&prompt.root; <userinput>/compat/linux/bin/sh /cdrom/install</userinput></screen>
|
||
|
||
<tip>
|
||
<para>Το πρόγραμμα της εγκατάστασης είναι σε γραφικό
|
||
περιβάλλον. Αν λαμβάνετε σφάλματα σχετικά με την οθόνη, δώστε
|
||
την εντολή: <command>setenv HOME ~<replaceable>USER</replaceable></command>,
|
||
όπου <replaceable>USER</replaceable> είναι ο χρήστης από όπου
|
||
δώσατε την εντολή &man.su.1;.</para>
|
||
</tip>
|
||
</step>
|
||
|
||
<step>
|
||
<para>
|
||
Όταν ερωτηθείτε για τον κατάλογο
|
||
του <application>&matlab;</application>, δώστε:
|
||
<userinput>/compat/linux/usr/local/matlab</userinput>.</para>
|
||
|
||
<tip>
|
||
<para>Για ευκολότερη διαδικασία εγκατάστασης, ορίστε το παρακάτω:
|
||
<command>set MATLAB=/compat/linux/usr/local/matlab</command>
|
||
στη γραμμή εντολών του κελύφους σας.</para>
|
||
</tip>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Τροποποιήσετε το αρχείο της άδειας (license file) σύμφωνα με
|
||
τις οδηγίες που λάβατε με την άδεια
|
||
του <application>&matlab;</application>.</para>
|
||
|
||
<tip>
|
||
<para>Μπορείτε να ετοιμάσετε εκ των προτέρων το αρχείο αυτό και να
|
||
το αντιγράψετε στο <filename>$MATLAB/license.dat</filename>,
|
||
πριν καν σας πει το πρόγραμμα εγκατάστασης να το
|
||
τροποποιήσετε.</para>
|
||
</tip>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Ολοκλήρωση της Εγκατάστασης</para>
|
||
</step>
|
||
</procedure>
|
||
|
||
<para>Σε αυτό το σημείο, η εγκατάσταση
|
||
του <application>&matlab;</application> έχει ολοκληρωθεί. Τα επόμενα
|
||
βήματα χρειάζονται για να μπορέσετε να το δουλέψετε σωστά με το
|
||
&os;.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Εκκίνηση του License Manager</title>
|
||
<procedure>
|
||
<step>
|
||
<para>Δημιουργία συμβολικών συνδέσμων για τα scripts του license
|
||
manager:</para>
|
||
|
||
<screen>&prompt.root; <userinput>ln -s $MATLAB/etc/lmboot /usr/local/etc/lmboot_TMW</userinput>
|
||
&prompt.root; <userinput>ln -s $MATLAB/etc/lmdown /usr/local/etc/lmdown_TMW</userinput></screen>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Δημιουργήστε το αρχείο
|
||
εκκίνησης <filename>/usr/local/etc/rc.d/flexlm.sh</filename>. Το
|
||
παράδειγμα παρακάτω είναι μια τροποποιημένη έκδοση του
|
||
<filename>$MATLAB/etc/rc.lm.glnx86</filename>. Οι αλλαγές
|
||
είναι στις τοποθεσίες των αρχείων, και στην εκκίνηση του license
|
||
manager στο περιβάλλον εξομοίωσης Linux του &os; .</para>
|
||
|
||
<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 <replaceable>username</replaceable> && 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</programlisting>
|
||
|
||
<important>
|
||
<para>Το αρχείο πρέπει να είναι εκτελέσιμο:</para>
|
||
|
||
<screen>&prompt.root; <userinput>chmod +x /usr/local/etc/rc.d/flexlm.sh</userinput></screen>
|
||
|
||
<para>Πρέπει επίσης να αντικαταστήσετε το παραπάνω
|
||
<replaceable>username</replaceable> με ένα υπαρκτό όνομα
|
||
χρήστη του συστήματος σας (και να μην είναι ο
|
||
<username>root</username>).</para>
|
||
</important>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Εκκινήστε τον license manager με την εντολή:</para>
|
||
|
||
<screen>&prompt.root; <userinput>/usr/local/etc/rc.d/flexlm.sh start</userinput></screen>
|
||
</step>
|
||
</procedure>
|
||
</sect2>
|
||
|
||
<sect2 id="matlab-jre">
|
||
<title>Σύνδεση με το Περιβάλλον του &java; Runtime Environment</title>
|
||
|
||
<para>Αλλάξτε τον σύνδεσμο του<application>&java;</application> Runtime
|
||
Environment (JRE) σε έναν ο οποίος θα δουλεύει στο &os;:</para>
|
||
|
||
<screen>&prompt.root; <userinput>cd $MATLAB/sys/java/jre/glnx86/</userinput>
|
||
&prompt.root; <userinput>unlink jre; ln -s ./jre1.1.8 ./jre</userinput></screen>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Δημιουργήστε το Script Εκκίνησης του &matlab; </title>
|
||
|
||
<procedure>
|
||
<step>
|
||
<para>Τοποθετήστε το παρακάτω script στο
|
||
<filename>/usr/local/bin/matlab</filename>:</para>
|
||
|
||
<programlisting>#!/bin/sh
|
||
/compat/linux/bin/sh /compat/linux/usr/local/matlab/bin/matlab "$@"</programlisting>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Στη συνέχεια δώστε την εντολή
|
||
<command>chmod +x /usr/local/bin/matlab</command>.</para>
|
||
</step>
|
||
</procedure>
|
||
|
||
<tip>
|
||
<para>Ανάλογα με την έκδοση του
|
||
<filename role="package">emulators/linux_base</filename>, που έχετε,
|
||
μπορεί να εμφανιστούν μερικά σφάλματα όταν τρέξετε το
|
||
script. Για να το αποφύγετε αυτό, τροποποιήστε το αρχείο
|
||
<filename>/compat/linux/usr/local/matlab/bin/matlab</filename>,
|
||
και αλλάξτε τη γραμμή που λέει:</para>
|
||
|
||
<programlisting>if [ `expr "$lscmd" : '.*->.*'` -ne 0 ]; then</programlisting>
|
||
|
||
<para>(στην έκδοση 13.0.1 βρίσκεται στη γραμμή 410) σε αυτή τη
|
||
γραμμή:</para>
|
||
|
||
<programlisting>if test -L $newbase; then</programlisting>
|
||
</tip>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Δημιουργία Script Τερματισμού του &matlab; </title>
|
||
|
||
<para>Τα επόμενα βήματα χρειάζονται για να λύσετε ένα πρόβλημα που
|
||
υπάρχει με τον τερματισμό του &matlab;.</para>
|
||
|
||
<procedure>
|
||
<step>
|
||
<para>Δημιουργήστε το
|
||
αρχείο <filename>$MATLAB/toolbox/local/finish.m</filename>, και
|
||
μέσα σε αυτό προσθέστε μόνο τη γραμμή:</para>
|
||
|
||
<programlisting>! $MATLAB/bin/finish.sh</programlisting>
|
||
|
||
<note>
|
||
<para>To <literal>$MATLAB</literal> γράψτε το ακριβώς
|
||
όπως το βλέπετε.</para>
|
||
</note>
|
||
|
||
<tip>
|
||
<para>Στον ίδιο κατάλογο, θα βρείτε τα
|
||
αρχεία <filename>finishsav.m</filename>
|
||
και <filename>finishdlg.m</filename>, τα οποία θα σας δίνουν τη
|
||
δυνατότητα να σώζετε την εργασία σας πριν κλείσετε το πρόγραμμα.
|
||
Αν πρόκειται να χρησιμοποιήσετε κάποιο από αυτά, προσθέστε του
|
||
την παραπάνω γραμμή αμέσως μετά την εντολή
|
||
<literal>save</literal> .</para></tip>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Δημιουργήστε το
|
||
αρχείο <filename>$MATLAB/bin/finish.sh</filename>, το οποίο θα
|
||
περιέχει τα παρακάτω:</para>
|
||
|
||
<programlisting>#!/compat/linux/bin/sh
|
||
(sleep 5; killall -1 matlab_helper) &
|
||
exit 0</programlisting>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Κάντε το αρχείο εκτελέσιμο:</para>
|
||
|
||
<screen>&prompt.root; <userinput>chmod +x $MATLAB/bin/finish.sh</userinput></screen>
|
||
</step>
|
||
</procedure>
|
||
</sect2>
|
||
|
||
<sect2 id="matlab-using">
|
||
<title>Χρησιμοποιώντας το &matlab;</title>
|
||
|
||
<para>Σε αυτό το σημείο θα πρέπει να είστε έτοιμοι να δώσετε την
|
||
εντολή <command>matlab</command> και να αρχίσετε να χρησιμοποιείτε την
|
||
εφαρμογή.</para>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<sect1 id="linuxemu-oracle">
|
||
<sect1info>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>Marcel</firstname>
|
||
<surname>Moolenaar</surname>
|
||
<contrib>Συνεισφορά του </contrib>
|
||
</author>
|
||
<!-- marcel@cup.hp.com -->
|
||
</authorgroup>
|
||
</sect1info>
|
||
<title>Εγκατάσταση της &oracle;</title>
|
||
|
||
<indexterm>
|
||
<primary>applications</primary>
|
||
<secondary><application>Oracle</application></secondary>
|
||
</indexterm>
|
||
|
||
<sect2>
|
||
<title>Εισαγωγή</title>
|
||
|
||
<para>Το κείμενο αυτό περιγράφει τη διαδικασία εγκατάστασης
|
||
των <application>&oracle; 8.0.5</application>
|
||
και <application>&oracle; 8.0.5.1 Enterprise Edition</application> για
|
||
Linux σε ένα σύστημα &os;.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Εγκατάσταση του Περιβάλλοντος Linux</title>
|
||
|
||
<para>Σιγουρευτείτε ότι έχετε εγκαταστήσει
|
||
τα <filename role='package'>emulators/linux_base</filename>
|
||
και <filename role='package'>devel/linux_devtools</filename> από τη
|
||
συλλογή των Ports. Αν αντιμετωπίζετε δυσκολίες με τα παραπάνω, ίσως
|
||
χρειαστεί να τα εγκαταστήσετε από πακέτα ή από παλιότερες εκδόσεις της
|
||
συλλογής των Ports.</para>
|
||
|
||
<para>Αν θέλετε να τρέξετε τον intelligent agent, θα χρειαστεί να
|
||
εγκαταστήσετε και το πακέτο Red Hat
|
||
Tcl: <filename>tcl-8.0.3-20.i386.rpm</filename>. Η εντολή για την
|
||
εγκατάσταση μέσω του επίσημου <application>RPM</application> port
|
||
(<filename role='package'>archivers/rpm</filename>) είναι:</para>
|
||
|
||
<screen>&prompt.root; <userinput>rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm <replaceable>package</replaceable></userinput></screen>
|
||
|
||
<para>Η εγκατάσταση του <replaceable>package</replaceable> θα πρέπει να
|
||
γίνει ομαλά και χωρίς προβλήματα.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Ρυθμίζοντας το Περιβάλλον για την &oracle; </title>
|
||
|
||
<para>Πριν την εγκατάσταση της <application>&oracle;</application>, θα
|
||
πρέπει να ρυθμίσετε σωστά το περιβάλλον του συστήματός σας. Το
|
||
παρακάτω κείμενο περιγράφει τι <emphasis>ακριβώς</emphasis> πρέπει να
|
||
κάνετε για να εκτελέσετε την <application>&oracle;</application> για
|
||
Linux στο &os;, και δεν περιγράφει ότι υπάρχει ήδη στον οδηγό
|
||
εγκατάστασης της <application>&oracle;</application>.</para>
|
||
|
||
<sect3 id="linuxemu-kernel-tuning">
|
||
<title>Ρύθμιση του Πυρήνα</title>
|
||
<indexterm><primary>kernel tuning</primary></indexterm>
|
||
|
||
<para>Όπως περιγράφει ο οδηγός εγκατάστασης
|
||
της <application>&oracle;</application>, θα πρέπει να ορίσετε τις
|
||
τιμές της shared memory στο μέγιστο. Μην χρησιμοποιήσετε
|
||
το <literal>SHMMAX</literal> στο &os;. Το <literal>SHMMAX</literal>
|
||
υπολογίζεται απλώς από το <literal>SHMMAXPGS</literal> και το
|
||
<literal>PGSIZE</literal>. Επομένως καθορίστε το
|
||
<literal>SHMMAXPGS</literal>. Όλες οι άλλες επιλογές μπορούν να
|
||
οριστούν όπως περιγράφεται στον οδηγό. Για παράδειγμα:</para>
|
||
|
||
<programlisting>options SHMMAXPGS=10000
|
||
options SHMMNI=100
|
||
options SHMSEG=10
|
||
options SEMMNS=200
|
||
options SEMMNI=70
|
||
options SEMMSL=61</programlisting>
|
||
|
||
<para>Ορίστε τις τιμές των επιλογών έτσι ώστε να ταιριάζουν στη χρήση
|
||
της <application>&oracle;</application> που θέλετε να κάνετε.</para>
|
||
|
||
<para>Επίσης, επιβεβαιώστε ότι έχετε ενεργοποιήσει τις παρακάτω
|
||
επιλογές στις ρυθμίσεις του πυρήνα:</para>
|
||
|
||
<programlisting>options SYSVSHM #SysV shared memory
|
||
options SYSVSEM #SysV semaphores
|
||
options SYSVMSG #SysV interprocess communication</programlisting>
|
||
</sect3>
|
||
|
||
<sect3 id="linuxemu-oracle-account">
|
||
|
||
<title>Ο Χρήστης &oracle;</title>
|
||
|
||
<para>Δημιουργήστε ένα χρήστη συστήματος με
|
||
όνομα <username>oracle</username>, με τον ίδιο τρόπο που θα
|
||
δημιουργούσατε και οποιονδήποτε άλλον χρήστη. Το μόνο ιδιαίτερο
|
||
χαρακτηριστικό του χρήστη <username>oracle</username> είναι ότι
|
||
χρειάζεται να του δώσετε ένα κέλυφος Linux. Προσθέστε
|
||
το <literal>/compat/linux/bin/bash</literal>
|
||
στο <filename>/etc/shells</filename> και ορίστε το κέλυφος του
|
||
χρήστη <username>oracle</username>
|
||
σε <filename>/compat/linux/bin/bash</filename>.</para>
|
||
</sect3>
|
||
|
||
<sect3 id="linuxemu-environment">
|
||
<title>Το Περιβάλλον</title>
|
||
|
||
<para>Εκτός των συνηθισμένων μεταβλητών
|
||
της <application>&oracle;</application>, όπως
|
||
οι <envar>ORACLE_HOME</envar> και <envar>ORACLE_SID</envar> θα
|
||
πρέπει να ορίσετε και τις ακόλουθες μεταβλητές περιβάλλοντος:</para>
|
||
|
||
<informaltable frame="none" pgwide="1">
|
||
<tgroup cols="2">
|
||
<colspec colwidth="1*"/>
|
||
<colspec colwidth="2*"/>
|
||
<thead>
|
||
<row>
|
||
<entry>Μεταβλητή</entry>
|
||
|
||
<entry>Τιμή</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><envar>LD_LIBRARY_PATH</envar></entry>
|
||
|
||
<entry><literal>$ORACLE_HOME/lib</literal></entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry><envar>CLASSPATH</envar></entry>
|
||
|
||
<entry><literal>$ORACLE_HOME/jdbc/lib/classes111.zip</literal></entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry><envar>PATH</envar></entry>
|
||
|
||
<entry><literal>/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</literal></entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>Σας συνιστούμε να ορίσετε όλες τις μεταβλητές περιβάλλοντος στο
|
||
αρχείο <filename>.profile</filename>. Ένα ολοκληρωμένο παράδειγμα
|
||
είναι το παρακάτω:</para>
|
||
|
||
<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</programlisting>
|
||
</sect3>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Εγκατάσταση της &oracle;</title>
|
||
|
||
<para>Λόγω μια μικρής έλλειψης στον εξομοιωτή του Linux, θα χρειαστεί να
|
||
δημιουργήσετε έναν κατάλογο με το όνομα <filename>.oracle</filename>
|
||
μέσα στο <filename>/var/tmp</filename>, πριν ξεκινήσετε το πρόγραμμα
|
||
εγκατάστασης. Ο κατάλογος αυτός θα πρέπει να ανήκει
|
||
στον χρήστη <username>oracle</username>. Θα πρέπει τώρα να
|
||
πραγματοποιήσετε την εγκατάσταση
|
||
της <application>&oracle;</application> δίχως κανένα πρόβλημα. Αν
|
||
αντιμετωπίζετε όμως ακόμη προβλήματα, ελέγξτε την έκδοση
|
||
της <application>&oracle;</application> που έχετε ή/και τις
|
||
ρυθμίσεις σας! Αφότου έχετε πραγματοποιήσει την εγκατάσταση
|
||
της <application>&oracle;</application>, εφαρμόστε τα patches που
|
||
περιγράφονται στις δύο παρακάτω ενότητες.</para>
|
||
|
||
<para>Ένα συχνό πρόβλημα είναι ότι δεν γίνεται σωστή εγκατάσταση του
|
||
προσαρμογέα του πρωτοκόλλου TCP. Αυτό έχει ως αποτέλεσμα να μην
|
||
μπορείτε να ξεκινήσετε τους TCP listeners. Οι ακόλουθες οδηγίες θα
|
||
σας βοηθήσουν να λύσετε αυτό το πρόβλημα.:</para>
|
||
|
||
<screen>&prompt.root; <userinput>cd $ORACLE_HOME/network/lib</userinput>
|
||
&prompt.root; <userinput>make -f ins_network.mk ntcontab.o</userinput>
|
||
&prompt.root; <userinput>cd $ORACLE_HOME/lib</userinput>
|
||
&prompt.root; <userinput>ar r libnetwork.a ntcontab.o</userinput>
|
||
&prompt.root; <userinput>cd $ORACLE_HOME/network/lib</userinput>
|
||
&prompt.root; <userinput>make -f ins_network.mk install</userinput></screen>
|
||
|
||
<para>Μη ξεχάσετε να τρέξετε ξανά το <filename>root.sh</filename></para>
|
||
|
||
<sect3 id="linuxemu-patch-root">
|
||
<title>Διόρθωση του root.sh</title>
|
||
|
||
<para>Όταν εγκαθιστάτε την <application>&oracle;</application>,
|
||
κάποιες ενέργειες, οι οποίες χρειάζονται να γίνουν
|
||
ως <username>root</username>, καταγράφονται σε ένα shell script που
|
||
λέγεται <filename>root.sh</filename>. Το script αυτό δημιουργείται
|
||
στον κατάλογο <filename>orainst</filename>. Εφαρμόστε το παρακάτω
|
||
patch στο <filename>root.sh</filename>, για να μπορέσει να βρει και
|
||
να χρησιμοποιήσει το <command>chown</command>. Εναλλακτικά, τρέξτε
|
||
το script μέσα από ένα κέλυφος Linux.</para>
|
||
|
||
<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</programlisting>
|
||
|
||
<para>Όταν δεν κάνετε χρήση του CD για την εγκατάσταση, μπορείτε να
|
||
περάσετε το patch για το <filename>root.sh</filename>, στην πηγή
|
||
εγκατάστασης. To αρχείο ονομάζεται <filename>rthd.sh</filename> και
|
||
βρίσκεται στον κατάλογο <filename>orainst</filename>.</para>
|
||
</sect3>
|
||
|
||
<sect3 id="linuxemu-patch-tcl">
|
||
<title>Διόρθωση του genclntsh</title>
|
||
|
||
<para>To script <command>genclntsh</command> χρησιμοποιείται για να
|
||
δημιουργήσει μια shared client library. Τρέξτε το παρακάτω patch για
|
||
να σβήσετε το καθορισμένο <envar>PATH</envar>:</para>
|
||
|
||
<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</programlisting>
|
||
</sect3>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Εκτέλεση της &oracle;</title>
|
||
|
||
<para>Αφού έχετε ακολουθήσει αυτές τις οδηγίες, θα πρέπει να μπορείτε
|
||
να εκτελέσετε την <application>&oracle;</application> σαν να
|
||
βρισκόσασταν σε ένα σύστημα Linux.
|
||
</para>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<sect1 id="linuxemu-advanced">
|
||
<title>Προχωρημένα Θέματα</title>
|
||
|
||
<para>Αν έχετε την απορία πως λειτουργεί η συμβατότητα με εφαρμογές Linux,
|
||
τότε θα πρέπει να διαβάσετε τη παρακάτω ενότητα. Τα περισσότερα από όσα
|
||
έχουν γραφτεί είναι βασισμένα στην &a.chat; και έχουν γραφτεί από τον
|
||
Terry Lambert <email>tlambert@primenet.com</email> (Message ID:
|
||
<literal><199906020108.SAA07001@usr09.primenet.com></literal>).
|
||
</para>
|
||
|
||
<sect2>
|
||
<title>Πως Λειτουργεί;</title>
|
||
<indexterm><primary>execution class loader</primary></indexterm>
|
||
|
||
<para>Το &os; περιέχει ένα επίπεδο αφαίρεσης (abstraction) που
|
||
ονομάζεται <quote>execution class loader</quote>. Αυτό βασίζεται στο
|
||
&man.execve.2;.</para>
|
||
|
||
<para>Αυτό που συμβαίνει είναι ότι το &os; έχει μια λίστα φορτωτών
|
||
(loaders), αντί για ένα που να καταφεύγει σε περίπτωση αποτυχίας
|
||
στο <literal>#!</literal> για να τρέξει κάποιο shell interpreter ή
|
||
shell script.</para>
|
||
|
||
<para>Ιστορικά, ο μόνος φορτωτής στη πλατφόρμα του &unix; έλεγχε τον
|
||
μαγικό αριθμό (γενικά τα πρώτα 4 ή 8 bytes του αρχείου) για να δει αν
|
||
είναι κάποιο εκτελέσιμο / εφαρμογή γνωστό στο σύστημα, και στην
|
||
περίπτωση αυτή να καλέσει τον αντίστοιχο φορτωτή.</para>
|
||
|
||
<para>Αν το αρχείο δεν ήταν εκτελέσιμο με βάση τον τύπο του συστήματος,
|
||
η κλήση στο &man.execve.2; επέστρεφε κάποιο σφάλμα, και το shell
|
||
προσπαθούσε να εκτελέσει το αρχείο σαν shell script.</para>
|
||
|
||
<para>Η γενική ιδέα ήταν <quote>αν δεν είναι εκτελέσιμο,
|
||
προσπάθησε να το τρέξεις ως shell script με βάση το τρέχον shell
|
||
</quote>.</para>
|
||
|
||
<para>Αργότερα, βρέθηκε ένας έξυπνος τρόπος ώστε το &man.sh.1; να
|
||
ελέγχει τους πρώτους δύο χαρακτήρες, και αν ήταν
|
||
<literal>:\n</literal>, τότε καλούσε το shell &man.csh.1;
|
||
(πιστεύουμε πως η λύση αυτή βρέθηκε αρχικά από τη SCO).</para>
|
||
|
||
<para>Αυτό που κάνει τώρα το &os; είναι να διατρέχει τη λίστα με όλους
|
||
τους φορτωτές, με ένα γενικό φορτωτή <literal>#!</literal> ο οποίος
|
||
αναγνωρίζει ως διερμηνέα (interpreter) τους χαρακτήρες από το επόμενο
|
||
κενό μετά το <literal>!</literal> και μέχρι το τέλος, ενώ αν δεν
|
||
αναγνωριστεί κάποιος, χρησιμοποιείται ως έσχατη λύση το
|
||
<filename>/bin/sh</filename>.</para>
|
||
|
||
<indexterm><primary>ELF</primary></indexterm>
|
||
<para>Για την υποστήριξη του Linux ABI, το &os; βλέπει τον μαγικό
|
||
αριθμό του ELF binary (δε αναγνωρίζει τη διαφορά ανάμεσα σε
|
||
&os;, &solaris;, Linux, ή κάποιο άλλο λειτουργικό σύστημα το οποίο
|
||
χρησιμοποιεί αρχεία τύπου ELF).</para>
|
||
|
||
<indexterm><primary>Solaris</primary></indexterm>
|
||
<para>Ο φορτωτής ELF κοιτάει για ένα ειδικό <emphasis>brand</emphasis>,
|
||
το οποίο είναι μια ενότητα σχολίων μέσα στο ELF image, και το οποίο
|
||
δεν υπάρχει σε ELF binaries για SVR4/&solaris;</para>
|
||
|
||
<para>Για να λειτουργήσουν τα εκτελέσιμα του Linux, θα πρέπει να
|
||
γίνουν <emphasis>branded</emphasis> (μαρκαριστούν) ως
|
||
<literal>Linux</literal> μέσω της &man.brandelf.1;:</para>
|
||
|
||
<screen>&prompt.root; <userinput>brandelf -t Linux file</userinput></screen>
|
||
|
||
<para>Όταν γίνει αυτό, ο φορτωτής ELF θα βλέπει το
|
||
<literal>Linux</literal> brand πάνω στο αρχείο.</para>
|
||
<indexterm>
|
||
<primary>ELF</primary>
|
||
<secondary>branding</secondary>
|
||
</indexterm>
|
||
|
||
<para>Όταν ο φορτωτής ELF δει το <literal>Linux</literal> brand, θα
|
||
αντικαταστήσει έναν δείκτη μέσα στη δομή <literal>proc</literal>.
|
||
Όλες οι κλήσεις του συστήματος ταξινομούνται μέσα από αυτόν τον
|
||
δείκτη (σε ένα παραδοσιακό σύστημα &unix;, ο δείκτης θα ήταν ο
|
||
πίνακας <literal>sysent[]</literal>, που περιέχει τις κλήσεις
|
||
του συστήματος (system calls)). Επιπλέον, η διεργασία σημειώνεται για
|
||
ειδική μεταχείριση του trap vector και άλλες (μικρές) διορθώσεις,
|
||
τις οποίες χειρίζεται το άρθρωμα πυρήνα της συμβατότητας Linux.</para>
|
||
|
||
<para>Το system call vector του Linux περιέχει, μεταξύ άλλων, μια λίστα
|
||
με τα δεδομένα του <literal>sysent[]</literal> των οποίων
|
||
οι διευθύνσεις βρίσκονται μέσα στο άρθρωμα του πυρήνα.</para>
|
||
|
||
<para>Όταν γίνεται μια κλήση συστήματος από μια εφαρμογή Linux, ο
|
||
κώδικας (trap code) τροποποιεί τον δείκτη της μέσω της δομής που έχει
|
||
εγγραφεί στο <literal>proc</literal>, και αλλάζει την διεύθυνση ώστε
|
||
να δείχνει στο σημείο εισόδου της συνάρτησης του Linux, και όχι του
|
||
&os;.</para>
|
||
|
||
<para>Επίσης, το σύστημα συμβατότητας με Linux μπορεί και προσαρμόζει
|
||
δυναμικά τις τοποθεσίες αναζήτησης. Ουσιαστικά αυτό κάνει και η
|
||
επιλογή <option>union</option> κατά την προσάρτηση ενός συστήματος
|
||
αρχείων (<emphasis>δεν</emphasis> εννοούμε εδώ το σύστημα
|
||
αρχείων <literal>unionfs</literal>!). Αρχικά, γίνεται απόπειρα να
|
||
βρεθεί το αρχείο στον κατάλογο
|
||
<filename>/compat/linux/<replaceable>original-path</replaceable></filename>, <emphasis>και μόνο</emphasis>
|
||
αν αυτό αποτύχει, θα γίνει αναζήτηση στον κατάλογο
|
||
<filename>/<replaceable>original-path</replaceable></filename>. Με
|
||
τον τρόπο αυτό σιγουρεύουμε ότι τα εκτελέσιμα που χρειάζονται άλλα
|
||
εκτελέσιμα θα τρέξουν (για παράδειγμα, το σύνολο εργαλείων του
|
||
Linux μπορεί να εκτελεστεί μέσω της υποστήριξης του Linux ABI). Επίσης
|
||
σημαίνει ότι τα εκτελέσιμα του Linux μπορούν να φορτώσουν και να
|
||
εκτελέσουν αρχεία του &os; αν δεν μπορούν να εντοπίσουν τα αντίστοιχα
|
||
αρχεία στο Linux. Μπορείτε επίσης να τοποθετήσετε μια εντολή
|
||
&man.uname.1; μέσα στο <filename>/compat/linux</filename> προκειμένου
|
||
τα αρχεία του Linux να μη μπορούν να αναγνωρίσουν ότι δεν
|
||
χρησιμοποιούνται πραγματικά σε Linux.</para>
|
||
|
||
<para>Ουσιαστικά, υπάρχει ένας πυρήνας Linux μέσα στον πυρήνα
|
||
του &os;. Οι διάφορες λειτουργίες οι οποίες υλοποιούν όλες τις
|
||
υπηρεσίες που παρέχονται από τον πυρήνα είναι ίδιες τόσο στον πίνακα
|
||
κλήσεων συστήματος του &os; όσο και στον αντίστοιχο του Linux:
|
||
λειτουργίες του συστήματος αρχείων, εικονική μνήμη, διαχείριση
|
||
σημάτων, System V IPC κλπ. Η μόνη διαφορά είναι ότι το εκτελέσιμα
|
||
του &os; κάνουν χρήση των συναρτήσεων <emphasis>glue</emphasis> του
|
||
&os;, ενώ τα εκτελέσιμα του Linux, κάνουν χρήση των συναρτήσεων
|
||
<emphasis>glue</emphasis> του Linux (πολλά από τα παλιά λειτουργικά
|
||
είχαν τις δικές τους συναρτήσεις <emphasis>glue</emphasis>: οι
|
||
διευθύνσεις των συναρτήσεων βρίσκονταν στο στατικό πίνακα
|
||
<literal>sysent[]</literal>, αντί να διευκρινίζονται μέσω ενός
|
||
δυναμικού δείκτη στη δομή <literal>proc</literal> της διεργασίας που
|
||
πραγματοποιεί την κλήση).</para>
|
||
|
||
<para>Ποιο είναι όμως το εγγενές &os; ABI; Δεν έχει και πολύ σημασία.
|
||
Η μόνη βασική διαφορά είναι (κάτι το οποίο μπορεί εύκολα να
|
||
αλλάξει σε μελλοντικές εκδόσεις, και πολύ πιθανόν να αλλάξει) ότι
|
||
οι συναρτήσεις <emphasis>glue</emphasis> του &os; είναι στατικά
|
||
συνδεδεμένες στο πυρήνα, ενώ οι αντίστοιχες του Linux μπορούν είτε να
|
||
είναι συνδεδεμένες στατικά, είτε να είναι προσβάσιμες μέσω ενός
|
||
αρθρώματος πυρήνα.</para>
|
||
|
||
<para>Είναι αυτό όμως πραγματική εξομοίωση; Όχι. Είναι μια υλοποίηση
|
||
του ABI, όχι εξομοίωση. Δεν υπάρχει καμία εξομοίωση (ή προσομοίωση,
|
||
για να προλάβουμε την επόμενη σας ερώτηση).</para>
|
||
|
||
<para>Τότε γιατί μερικές φορές μιλάμε για <quote>εξομοίωση
|
||
Linux</quote>; Για να δυσκολευτεί η προώθηση του &os;! Η αρχική
|
||
υλοποίηση έγινε την εποχή όπου δεν υπήρχε άλλη λέξη που να μπορούσε
|
||
να περιγράψει το τι ακριβώς γινόταν. Το να
|
||
λέγαμε ότι το &os; έτρεχε εκτελέσιμα Linux δεν θα ήταν αλήθεια,
|
||
μια και χρειαζόταν να ενσωματωθεί κάποιος κώδικας στον πυρήνα, ή να
|
||
φορτωθεί κάποιο άρθρωμα. Χρειαζόταν κάποια λέξη που να περιγράφει τι
|
||
φορτωνόταν—έτσι προέκυψε ο <quote>εξομοιωτής Linux</quote>.
|
||
</para>
|
||
</sect2>
|
||
</sect1>
|
||
</chapter>
|