Octave für Linux
Octave wird unter der GPL (GNU Public License) weitergegeben und ist ein bekanntes und erfolgreiches Open Source Produkt. Viele Linux Distributionen (wie z.B. die beliebte SuSE-Distribution) enthalten standardmäßig Octave, allerdings oft in der letzten (stabilen) Version 2.0.16. Octave wird einfach genau so installiert wie auch die anderen Pakete, bei SuSE z.B. über YaST2. Bei Vorhandensein des RPM (RPM Package Manager) wird Octave folgendermaßen installiert:
su rpm -Uhv octave-*-rpm
Häufig ist es besser, Octave selber zu übersetzen. Dieses macht Sinn, wenn eine neuere Version gewünscht ist, oder wenn Octave-forge mitinstalliert werden soll. Im folgenden beschreiben wir die Installation von Octave 2.1.50 und Octave-forge in der Version vom 02.06.2003.
Installationen erfolgen unter Linux meist mittels des bekannten Linux Dreisatzes
configure; make; make install
Ich bevorzuge alternativ, vorher checkinstall
zu installieren,
um dann den erweiterten Dreisatz
configure; make; checkinstall
auszuführen. Durch dieses Vorgehen kann man dann während der Installation RPM- oder deb-Pakete erzeugen, die an Kommilitonen weitergegeben werden können.
Anmerkungen zur Installation
Der folgende Abschnitt beschreibt transparent meine Vorgehensweise bei der Installation von Octave 2.1.50 und Octave-forge in der Version vom 02.06.2003 (und einigen anderen Goodies) auf einer SuSE 9.0 Professional Linux Box und resultiert in einigen RPM Dateien und einer (sehr ausführlichen) Installationsbeschreibung, respektive Installationsanleitung. Da diese Anleitung in voller Länge etwas schwer zu überblicken ist, folgt (bevor es an die Feinheiten geht) eine kurze Zusammenfassung der Vorgehensweise bei der Installation:
- Es ist sinnvoll, immer die Bleeding Edge Version (aktuell: Version 2.1.51, ich habe noch die Version 2.1.50 verwendet) zu installieren, auch wenn diese (wie bei Unix/Linux üblich) durch die ungerade Versionsnummer 2.1.x als unstabil gekennzeichnet ist. GNU Octave hat ziemlich viel Funktionalität dazu gewonnen, und der nächste Release "stabilen" Version 2.2.x kann noch länger auf sich warten lassen. (Für eine unstabile Version ist Octave 2.1.50 ist bemerkenswert stabil.)
- Es ist sinnvoll, immer Octave-Forge mit zu installieren. Dazu muß Octave mit einer bestimmten Konfiguration übersetzt werden, da sonst keine dynamischen Dateien aufgerufen werden können. Diese bilden aber einen Teil des Rückgrates von Octave-Forge.
- Um den vollen Zuwachs an Funktionalität durch die Installation von Octave-forge genießen zu können, sollte man ruhig auch noch GiNaC vorher installieren, dann steht auch noch eine Möglichkeit zur Verfügung, unter Octave symbolisch zu rechnen. Dazu wird noch das Paket CLN benötigt, das ebenfalls vorher installiert werden sollte.
- Noch mehr Funktionalität kommt mit der Installation der Pakete Qhull (dieses muß von http://www.thesa.com/software/qhull/ heruntergeladen werden) und SuperLU (die Homepage von SuperLU ist http://crd.lbl.gov/~xiaoye/SuperLU/, SuperLU ist in einer modifizierten Version bereits in Octave-forge enthalten) hinzu.
- Was das "Look & Feel" angeht, so kann man unter KDE 3 die Installation von kOctave erwägen. Damit ist man den heutigen Matlab Versionen deutlich näher.
Und jetzt meine Erlebnisse bei der Installation.
Installation unter SuSE 9.0
Diese Beispielinstallation beschreibt meine Erlebnisse bei der Installation von Octave 2.1.50 (bleeding-edge) mit Octave-forge (code-freeze vom 2003.06.02) und einigen Zusätzen (GMP, CLN, GiNaC, Qhull, SuperLU, kOctave) und einigen (wohl typischen) Problemen (und auch deren Lösung) unter SuSE 9.0 Professional. Die Schritt für Schritt vorgestellte Installationsanleitung resultierte einerseits in einigen RPM Dateien, die hier zum Download angeboten werden, sollte aber auch genug Informationen bereit stellen, um es jedem zu ermöglichen, selbst alle genannten Pakete (auch unter Verwendung einer anderen Distribution) zu kompilieren und zu installieren.
Aufräumen und Vorsorge treffen
In einem ersten Schritt sollte man eventuell bereits installierte Versionen von Octave deinstallieren, dieses gilt insbesondere für die (aufgrund einer fehlenden Klammer im Makefile) von SuSE bei Version 9.0 mitgelieferten korrupten Octave Version 2.1.49:
su rpm -q octave rpm -e octave
Kleine Anmerkug dazu: ausgerechnet in dieser Version (meines Wissens die erste 2.1.x Version, die bei SuSE mitgeliefert wurde) wurde von den Octave Entwicklern eine schließende Klammer in einem Makefile vergessen. Siehe hierzu die Mail mit dem Subject typo in liboctave/Makefile.in for install-lib (shared) von der Mailinglist bug-octave.
Installation von Octave 2.1.50
Jetzt kann die Installation von Octave in der Version 2.1.50 (bleeding-edge)
beginnen. Dazu von der Seite ftp://ftp.octave.org/pub/octave/bleeding-edge
die Datei octave-2.1.50.tar.bz2
herunterladen, auspacken, in das Verzeichnis wechseln und
configure
aufrufen wie folgt:
tar jxvf octave-2.1.50.tar.bz2 cd octave-2.1.50/ ./configure --enable-shared --enable-dl
Die Flags sind dazu notwendig, daß anschließend Octave-forge angebunden werden kann.
Dabei stellte sich heraus daß ich einige Pakete nachinstallieren
musste, da einige Programme (respektive deren Header) nicht Bestandteil meiner
Installation waren. Diese Programme, respektive Pakete waren
readline
(Paket readline-devel
) und
runtest
(Paket DejaGNU
). Nach der Nachinstallation
genannter Pakete lief
./configure --enable-shared --enable-dl
klaglos durch und erzeugte die folgende Ausgabe:
Octave is now configured for i686-pc-linux-gnu Source directory: . Installation prefix: /usr/local C compiler: gcc -mieee-fp -g -O2 C++ compiler: g++ -mieee-fp -g -O2 -Wall Fortran compiler: g77 -O Fortran libraries: -L/usr/lib/gcc-lib/i586-suse-linux/3.3.1 -L/usr/lib/gcc-lib/i586-suse-linux/3.3.1/\ ../../../../i586-suse-linux/lib -L/usr/lib/gcc-lib/i586-suse-linux/3.3.1/\ ../../.. -lfrtbegin -lg2c -lm -lgcc_s BLAS libraries: -llapack -lblas FFTW libraries: HDF5 libraries: MPI libraries: LIBS: -lreadline -lncurses -ldl -lm Default pager: less gnuplot: gnuplot Do internal array bounds checking: false Build static libraries: true Build shared libraries: true Dynamic Linking: true (dlopen) Include support for GNU readline: true
Eine Anmerkung zur Zeile
Do internal array bounds checking: false
Diese Einstellung läßt sich zwar auch über ein Flag an
./configure
ändern, es ist aber anscheinend besser, dieses nicht zu setzen, ich
hatte beim ersten Versuch nämlich Probleme mit main/sparse
(verwendet SuperLU, Teil von Octave-forge). Meine Vermutung: Wenn man dieses
Flag anders setzt, klappt es anschließend nicht mit der Installation von
Octave-forge.
Nach der (hoffentlich) erfolgreichen Konfiguration ruft man
make
auf (und geht ruhig einen Kaffee oder Tee kochen und trinken). Wenn
make
durchgelaufen ist, kann man
make check
aufrufen (dafuer haben wir DejaGNU installiert). Dieser Test erzeugte bei mir die folgende Bildschirmausgabe:
Test Run By zemke on Tue Nov 4 21:03:06 2003 Native configuration is i686-suse-linux === octave tests === Schedule of variations: unix Running target unix Using /usr/share/dejagnu/baseboards/unix.exp as board description\ file for target. Using /usr/share/dejagnu/config/unix.exp as generic interface\ file for target. Using ./config/unix.exp as tool-and-target-specific interface\ file. Running ./octave.test/args/args.exp ... Running ./octave.test/arith/arith.exp ... Running ./octave.test/audio/audio.exp ... Running ./octave.test/contin/contin.exp ... Running ./octave.test/control/control.exp ... Running ./octave.test/diffeq/diffeq.exp ... Running ./octave.test/error/error.exp ... Running ./octave.test/eval-catch/eval-catch.exp ... FAIL: octave.test/eval-catch/eval-catch-9.m FAIL: octave.test/eval-catch/eval-catch-10.m Running ./octave.test/eval/eval.exp ... Running ./octave.test/for/for.exp ... Running ./octave.test/global/global.exp ... Running ./octave.test/if/if.exp ... Running ./octave.test/image/image.exp ... Running ./octave.test/index/dfi-f/index.exp ... Running ./octave.test/index/dfi-t/index.exp ... Running ./octave.test/infnan/infnan.exp ... Running ./octave.test/io/io.exp ... Running ./octave.test/linalg/linalg.exp ... Running ./octave.test/matrix/matrix.exp ... Running ./octave.test/nonlin/nonlin.exp ... Running ./octave.test/number/number.exp ... Running ./octave.test/optim/optim.exp ... Running ./octave.test/plot/plot.exp ... Running ./octave.test/poly/poly.exp ... Running ./octave.test/prefer/prefer.exp ... Running ./octave.test/quad/quad.exp ... Running ./octave.test/recursion/recursion.exp ... Running ./octave.test/return/return.exp ... Running ./octave.test/set/set.exp ... Running ./octave.test/signal/signal.exp ... Running ./octave.test/stats/stats.exp ... Running ./octave.test/string/string.exp ... Running ./octave.test/struct/struct.exp ... Running ./octave.test/switch/switch.exp ... Running ./octave.test/system/system.exp ... Running ./octave.test/transpose/transpose.exp ... Running ./octave.test/try/try.exp ... FAIL: octave.test/try/try-9.m FAIL: octave.test/try/try-10.m Running ./octave.test/unwind/unwind.exp ... Running ./octave.test/while/while.exp ... Running ./octave.test/zero-one/ff/zero-one.exp ... Running ./octave.test/zero-one/ft/zero-one.exp ... Running ./octave.test/zero-one/tf/zero-one.exp ... Running ./octave.test/zero-one/tt/zero-one.exp ... === octave Summary === # of expected passes 1278 # of unexpected failures 4 ../src/octave version 2.1.50 (i686-pc-linux-gnu). Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002,\ 2003 John W. Eaton. This is free software; see the source code for copying\ conditions. There is ABSOLUTELY NO WARRANTY; not even for\ MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. Report bugs to <bug-octave@bevo.che.wisc.edu>.
Anmerkung: Es scheint bei 2.1.50 unumgänglich, viermal
FAIL
zu bekommen. Nicht wundern, das macht nichts.
Als Abschluss habe ich dann statt make install
folgendes
initialisiert:
su checkinstall
Die neueste Version von checkinstall
ist auf der SuSE DVD
(SuSE CD). Als Beschreibung habe ich
octave - A high level programming language
gewählt. Ich hatte die Konstruktion eines RPM Paketes ausgewählt,
welches checkinstall
unter
/usr/src/packages/RPMS/i386/octave-2.1.50-1.i386.rpm
ablegte. Die enstandene RPM Datei octave-2.1.50-1.i386.rpm kann hier heruntergeladen werden. Um diese zu installieren, gebe man als root
rpm -Uhv octave-2.1.50-1.i386.rpm
ein (diese Variante ist sicherer als ein bloßes rpm
-i
).
Auspacken von Octave-forge
Jetzt geht es an die Installation von Octave-forge. Dazu habe ich von der Seite http://sourceforge.net/project/showfiles.php?group_id=2888 die Datei octave-forge-2003.06.02.tar.gz heruntergeladen und entpackt,
tar zxvf octave-forge-2003.06.02.tar.gz cd octave-forge-2003.06.02/
Dann habe ich mir die Datei INSTALL
zu Gemüte
geführt. Dort stand folgendes zu lesen:
Prerequisites Octave must be installed before building octave-forge. Some functions in octave-forge depend on external libraries: * convhull, voronoi and delaunay need Qhull. If you need these functions, then see main/geometry/README for instructions on downloading, building and installing libqhull.so and <qhull/*.h>. * symbolic expressions and variable precision arithmetic need GiNaC, which in turn depends on cln and gmp. If you need these functions, then see http://www.ginac.de for instructions for installing GiNaC, cln and gmp. * sparse matrices need SuperLU. A modified version of SuperLU is included in octave-forge/main/sparse. This will be built automatically when you build octave-forge.
Also habe ich mich zu erst einmal um Qhull, CLN und GiNaC gekümmert.
Qhull, GMP, CLN, GiNaC, SuperLU ...
Angefangen habe ich mit Qhull. Die Installation von Qhull ist in der Datei
README
im Octave-forge Verzeichnis main/geometry/
beschrieben, also
cd main/geometry/ less README
Die Ausgabe der Datei brachte folgende Informationen zu Tage:
These are some function for computational geometry. They depend on the qhull library [1]. Build Instructions ------------------ First you need the qhull library. a.) install the qhull program from [2]. Add the following target to src/Makefile: libqhull.so: $(OBJS) c++ -shared -Xlinker -soname -Xlinker $@ -o libqhull.so $(OBJS) Build the shared library make libqhull.so Install the lib to place where the linker can find it. cp libqhull.so /usr/local/lib ldconfig -v. Copy all the header files where the C compiler can find them mkdir /usr/local/include/qhull cp qhull/src/*.h /usr/local/include/qhull b.) Download a qhull 'lite' package from my homepage. [3] make make install The lite package contains only the files needed to build the lib and a adapted Makefile. I have removed all docfiles, too. So, if you want to develop with qhull choose the package from [2]. Next you need to build the geometry toolbox. a.) if you are using this package as part of OctaveSF, return the root of the OctaveSF tree and follow the instructions in INSTALL b.) if you are using this package independently, just type make and either copy the m-files and oct-files from the current directory onto your octave LOADPATH or update your LOADPATH to include the current directory. [1] http://www.geom.umn.edu/software/qhull/ [2] ftp://ftp.geom.umn.edu/pub/software/qhull.tar.Z [3] http://user.berlin.de/~kai.habel/libqhull.tar.gz Kai Habel kai.habel@gmx.de 2001-09-19 Paul Kienzle * Instructions for build within unified octaveSF tree 2002-11-14 Andy Adler Note: As of 14 Nov 2002, these links no longer seem to work. Code is available from here [1] http://www.geom.umn.edu/software/qhull/qhull2002.1.tgz [2] ftp://ftp.geom.umn.edu/pub/software/qhull.tar.gz
Eine Anmerkung dazu, da auch ich DAU genug war, um eine Zeile falsch zu
lesen. Natürlich ist in ldconfig -v.
der Punkt zuviel. Das
kommt dabei heraus, wenn man grammatikalisch korrekt sein will. Lange Rede,
kurzer Sinn: Qhull besorgen, dann auspacken,
tar zxvf qhull-2002.1.tgz cd qhull2002.1/src/
Dann habe ich das Makefile modifiziert (lokale Kopie des modifizierten Makefiles), Qhull übersetzt und installiert,
make make libqhull.so su checkinstall
Dabei ist die zweite Zeile make libqhull.so
wichtig, denn ich
habe das Hauptziel bei make
nicht verändert. Bei
checkinstall
habe ich wieder die Generierung einer RPM Datei
ausgewählt, und als Namen den String
Qhull - Qhull library for computational geometry
gewählt. Wer das alles selber nachvollziehen will, sollte auch noch den
Namen zweimal öfter ändern, bei provides
und
name
(Punkte 2 und 10). Die so gebastelte RPM Datei qhull-20031120-2.i386.rpm wird nach
/usr/src/packages/RPMS/i386/qhull-20031120-2.i386.rpm
geschrieben
und kann hier heruntergeladen werden. Die Installation gestaltet sich dann
recht einfach,
rpm -Uhv qhull-20031120-2.i386.rpm
Danach habe ich (in Ermangelung der Erkenntniss, das beide Pakete Teil der SuSE Distribution sind) CLN und GiNaC heruntergeladen und übersetzt, zuerst CLN (hier noch ohne GMP, CLN sollte mit GMP schneller sein, aber naja, man kann nicht alles gleich richtig machen)
tar zxvf cln-1.1.5.tar.gz cd cln-1.1.5/ ./configure make make check
Die Ausführung von make
dauert mal wieder etwas
länger (noch'n Kaffee/Tee gefällig?) und make check
erzeugt die folgende Ausgabe:
./tests Testing test_I_abs... Testing test_I_compare... Testing test_I_plus... Testing test_I_minus... Testing test_I_plus1... Testing test_I_minus1... Testing test_I_mul... Testing test_I_div... Testing test_I_gcd... Testing test_I_xgcd... Testing test_I_ash... Testing test_I_evenp... Testing test_I_oddp... Testing test_I_lognot... Testing test_I_logand... Testing test_I_logandc1... Testing test_I_logandc2... Testing test_I_logior... Testing test_I_logorc1... Testing test_I_logorc2... Testing test_I_logxor... Testing test_I_lognand... Testing test_I_lognor... Testing test_I_logeqv... Testing test_I_boole... Testing test_I_logbitp... Testing test_I_logtest... Testing test_I_ldb... Testing test_I_ldb_test... Testing test_I_mask_field... Testing test_I_dpb... Testing test_I_deposit_field... Testing test_I_logcount... Testing test_I_integer_length... Testing test_I_ord2... Testing test_I_power2p... Testing test_I_isqrt... Testing test_I_sqrtp... Testing test_I_GV... Testing test_MI_canonhom... Testing test_MI_plus... Testing test_MI_minus... Testing test_MI_mul... Testing test_MI_recip... Testing test_MI_div... Testing test_MI_expt... Testing test_nt_jacobi... Tests passed.
So lobe ich es mir. Dann folgt die abschließende Installation mittels
su checkinstall
Bei checkinstall
Auswahl einer RPM Datei, Beschreibung als
CLN - CLN Class Library for Numbers
Checkinstall erzeugt die Datei
/usr/src/packages/RPMS/i386/cln-1.1.5-1.i386.rpm
. Dann habe ich
noch GMP von der SuSE DVD installiert, und dann alles nochmal gemacht (Ich kann
inzwischen keinen Tee mehr sehen ..)
make distclean ./configure make make check
Die Ausgabe von make check
sah ziemlich ähnlich aus:
./tests Testing test_I_abs... Testing test_I_compare... Testing test_I_plus... Testing test_I_minus... Testing test_I_plus1... Testing test_I_minus1... Testing test_I_mul... Testing test_I_div... Testing test_I_gcd... Testing test_I_xgcd... Testing test_I_ash... Testing test_I_evenp... Testing test_I_oddp... Testing test_I_lognot... Testing test_I_logand... Testing test_I_logandc1... Testing test_I_logandc2... Testing test_I_logior... Testing test_I_logorc1... Testing test_I_logorc2... Testing test_I_logxor... Testing test_I_lognand... Testing test_I_lognor... Testing test_I_logeqv... Testing test_I_boole... Testing test_I_logbitp... Testing test_I_logtest... Testing test_I_ldb... Testing test_I_ldb_test... Testing test_I_mask_field... Testing test_I_dpb... Testing test_I_deposit_field... Testing test_I_logcount... Testing test_I_integer_length... Testing test_I_ord2... Testing test_I_power2p... Testing test_I_isqrt... Testing test_I_sqrtp... Testing test_I_GV... Testing test_MI_canonhom... Testing test_MI_plus... Testing test_MI_minus... Testing test_MI_mul... Testing test_MI_recip... Testing test_MI_div... Testing test_MI_expt... Testing test_nt_jacobi... Tests passed.
Dann mal wieder eine Installation,
su checkinstall
Bei Checkinstall wieder RPM Datei, und Beschreibung
CLN - CLN Class Library for Numbers
mit der Änderung des Releases auf 2. Damit habe ich dann die RPM Datei
/usr/src/packages/RPMS/i386/cln-1.1.5-2.i386.rpm
erzeugt und
installiert,
rpm -Uhv cln-1.1.5-2.i386.rpm
Anschließend habe ich GiNaC installiert (dauert, aber macht absolut keine Probleme),
tar jxvf GiNaC-1.1.4.tar.bz2 cd GiNaC-1.1.4/ ./configure make make check
Die Ausgabe von make check
ergab folgenden Text:
GiNaC will now take an exam with specific input (like a pupils' exam): examining several historic failures just out of paranoia........\ ....... passed examining consistency of numeric types...... passed examining power laws..... passed examining consistency of symbolic functions.... passed examining consistency of nestedsums functions. passed examining symbolic differentiation....... passed examining polynomial GCD computation......... passed examining rational function normalization.... passed examining series expansion............ passed examining symbolic matrix manipulations....... passed examining linear solve...... passed examining indexed objects........ passed examining color objects... passed examining clifford objects..... passed examining archiving system. passed examining hash maps............ passed examining miscellaneous other things........ passed PASS: run_exams GiNaC will now run through some rather costly random consistency checks: checking consistency of numeric types.. passed checking consistency of symbolic functions.... passed checking symbolic matrix manipulations..... passed checking linear solve.......... passed PASS: run_checks GiNaC will now run through some basic timings: timing commutative expansion and substitution.... passed size: 50 100 200 400 time/s: 0.029 0.16 0.68 3.14 timing Laurent series expansion of Gamma function.... passed order: 10 15 20 25 time/s: 0.02 0.13 0.589 2.41 timing determinant of univariate symbolic Vandermonde matrices.... passed dim: 6x6 8x8 10x10 12x12 time/s: 0.006 0.059 0.489 4.469 timing determinant of polyvariate symbolic Toeplitz matrices.... passed dim: 6x6 7x7 8x8 9x9 time/s: 0.027 0.119 0.489 1.939 timing hash map operations.... passed size: 10000 50000 100000 500000 insert/s: 0.02 0.11 0.24 1.13 find/s: 0.01 0.06 0.12 0.64 erase/s: 0.01 0.04 0.09 0.47 timing Lewis-Wester test A (divide factorials). passed 0.35s timing Lewis-Wester test B (sum of rational numbers). passed 0.004s timing Lewis-Wester test C (gcd of big integers). passed 0.059s timing Lewis-Wester test D (normalized sum of rational fcns). passed 0.14s timing Lewis-Wester test E (normalized sum of rational fcns). passed 0.11s timing Lewis-Wester test F (gcd of 2-var polys). passed 0.014s timing Lewis-Wester test G (gcd of 3-var polys). passed 0.369s timing Lewis-Wester test H (det of 80x80 Hilbert). passed 1.61s timing Lewis-Wester test I (invert rank 40 Hilbert). passed 0.49s timing Lewis-Wester test J (check rank 40 Hilbert). passed 0.26s timing Lewis-Wester test K (invert rank 70 Hilbert). passed 3.18s timing Lewis-Wester test L (check rank 70 Hilbert). passed 1.53s timing Lewis-Wester test M1 (26x26 sparse, det). passed 0.08s timing Lewis-Wester test M2 (101x101 sparse, det) disabled timing Lewis-Wester test N (poly at rational fcns) disabled timing Lewis-Wester test O1 (three 15x15 dets)... passed 10.846s (average) timing Lewis-Wester test P (det of sparse rank 101). passed 0.38s timing Lewis-Wester test P' (det of less sparse rank 101). passed 0.989s timing Lewis-Wester test Q (charpoly(P)). passed 21.17s timing Lewis-Wester test Q' (charpoly(P')). passed 42.24s timing computation of antipodes in Yukawa theory...... passed 12.56s (total) timing Fateman's polynomial expand benchmark. passed 41.869s PASS: run_times ================== All 3 tests passed ==================
Die abschliessende Installation von GiNaC:
su checkinstall
Bei Checkinstall: RPM Datei und Beschreibung
GiNaC - GiNaC is Not a CAS (computer algebra system)
erzeugt
/usr/src/packages/RPMS/i386/GiNaC-1.1.4-1.i386.rpm
. Installation
der RPM Datei mittels
rpm -Uhv GiNaC-1.1.4-1.i386.rpm
Damit gab es dann ein Problem: Octave und GiNaC haben die Top-Info Node dir
in /usr/local/info/
:
/usr/local/info/dir --> file /usr/local/info/dir from install of GiNaC-1.1.4-1 conflicts with file from package octave-2.1.50-1 ...
Also habe ich die Installation mittels
rpm -i --force GiNaC-1.1.4-1.i386.rpm
gewählt, das ist gewiss nicht sehr sauber, ich weiss. Da das Problem sich von selber löst, wenn man die auf der SuSE DVD mitgelieferten RPM Pakete für GMP, CLN und GiNaC verwendet, ist das Interesse an einer Lösung natürlich teilweise rein akademischer Natur. Allerdings hat nicht jeder eine SuSE 9.0 Distribution. Also hat vielleicht ein Leser dieser Seite konstruktive Vorschläge?
SuperLU ist wie oben erwähnt in der Octave-forge Version dabei.
Der Vollständigkeit halber habe ich mir dann die nicht automatisch zur Installation selektierten Pakete anzeigen lassen, und zwar mittels:
find . -name NOINSTALL -print
Auf meiner Maschine generierte das die folgende Liste:
./extra/NaN/NOINSTALL ./extra/engine/NOINSTALL ./extra/fake-sparse/NOINSTALL ./extra/patches/NOINSTALL ./extra/perl/NOINSTALL ./extra/tk_octave/NOINSTALL ./extra/ver20/NOINSTALL ./main/parallel/NOINSTALL ./nonfree/gpc/NOINSTALL ./nonfree/splines/NOINSTALL
Ich habe selber nichts davon ausgewählt. Vor allem bei den im
Verzeichnis nonfree
enthaltenen Paketen sollte man sich die
jeweiligen Lizenzen durchlesen und in jedem Falle befolgen.
Jetzt kann die eigentliche Installation von Octave-forge beginnen.
Installation von Octave-forge
Octave-forge ist ja schon ausgepackt, und durch die im vorherigen Abschnitt besprochenen Installtionen wurde zusätzliche Funktionalität gewonnen. Jetzt folgt die Konfiguration,
./configure
Auf meiner Maschine wurde Octave-forge folgendermassen konfiguriert:
octave-forge is configured with octave: octave (version 2.1.50) mkoctfile: mkoctfile for Octave 2.1.50 X11 support: yes audio capture: yes Makeinfo: makeinfo --no-split Texi2dvi: texi2dvi --clean Texi2html: texi2html -split_chapter -number geometry toolbox: yes read/write JPEG: yes have term.h or termcap.h: yes symbolic toolbox: yes
Die Symbolische Toolbox verwendet GiNaC, die Geometrische Toolbox verwendet Qhull. Jetzt folgt die Übersetzung und ein anschließender Test von Octave-forge mittels
make make check
Leider lief zuerst der Test schief, und zwar am Ende in
main/sparse
:
octave -q batch_test.m [main/optim] >leval [extra/linear-algebra] >chol [main/comm] >comms << Random Signals Package >> Signal Creation: PASSED Signal Analysis: PASSED << Source Coding Package >> PCM Functions: Not tested Quantization Functions: PASSED << Block Coding Package >> Cyclic Coding: PASSED Hamming Coding: PASSED BCH Coding: PASSED Reed-Solomon Coding: PASSED << Convolutional Coding Package >> Utility functions: Not tested Coding: Not tested Viterbi: Not tested << Modulation Package >> Analog Modulation: PASSED Digital Mapping: PASSED Digital Modulation: Not tested << Special Filters Package >> Hankel/Hilbert: Not tested Raised Cosine: Not tested << Galois Fields Package >> Find primitive polynomials: PASSED Create Galois variables: PASSED Access Galois structures: PASSED Miscellaneous functions: PASSED Unary operators: PASSED Arithmetic operators: PASSED Logical operators: PASSED Polynomial manipulation: PASSED Linear Algebra: PASSED Signal Processing functions: PASSED [main/signal] >medfilt >remez [main/general] >bitand >bitor >bitxor >bitmax [main/image] >conv2 >cordflt2 >bwlabel >jpgwrite >jpgread [main/splines] >trisolve(d,e,b) >trisolve(l,d,u,b) >trisolve(d,e,b,cl,cu) >trisolve(l,d,u,b,cl,cu) [main/strings] >regexp >[m,b]=regexp [main/struct] >getfield >setfield [main/specfun] >ellipj [main/sparse] error: operator -: nonconformant arguments (op1 is 6x1, op2 is 3x1) error: evaluating binary operator `-' near line 231, column 47 error: evaluating binary operator `<' near line 231, column 63 error: evaluating argument list element number 1 error: evaluating argument list element number 1 error: evaluating binary operator `+' near line 231, column 23 error: evaluating assignment expression near line 231, column 10 error: evaluating for command near line 30, column 1 error: near line 791 of file `main/sparse/sp_test.m' make: *** [check] Fehler 1
Meine Original Mitschrift lautet: [grftjx. Probleme mit SuperLU ...]. Also habe ich mit verschiedenen Installationen von SuperLU gespielt, u.a. das Paket superlu von der SuSE DVD installiert ... und hatte keine Chance.
Dann habe ich angefangen nachzudenken. Das führte dazu, das ich eine
neue Zeile in die Test Routine main/sparse/sp_test.m
eingebaut
habe, und zwar zwischen Zeile 230 und 231 die neue Zeile
sp_values= sp_values(~isnan(sp_values) & ~isinf(sp_values));
Dann lief die Übersetzung klaglos durch. Genauer:
zemke@atum:[..]/octave-forge-2003.06.02> make check octave -q batch_test.m [main/optim] >leval [extra/linear-algebra] >chol [main/comm] >comms << Random Signals Package >> Signal Creation: PASSED Signal Analysis: PASSED << Source Coding Package >> PCM Functions: Not tested Quantization Functions: PASSED << Block Coding Package >> Cyclic Coding: PASSED Hamming Coding: PASSED BCH Coding: PASSED Reed-Solomon Coding: PASSED << Convolutional Coding Package >> Utility functions: Not tested Coding: Not tested Viterbi: Not tested << Modulation Package >> Analog Modulation: PASSED Digital Mapping: PASSED Digital Modulation: Not tested << Special Filters Package >> Hankel/Hilbert: Not tested Raised Cosine: Not tested << Galois Fields Package >> Find primitive polynomials: PASSED Create Galois variables: PASSED Access Galois structures: PASSED Miscellaneous functions: PASSED Unary operators: PASSED Arithmetic operators: PASSED Logical operators: PASSED Polynomial manipulation: PASSED Linear Algebra: PASSED Signal Processing functions: PASSED [main/signal] >medfilt >remez [main/general] >bitand >bitor >bitxor >bitmax [main/image] >conv2 >cordflt2 >bwlabel >jpgwrite >jpgread [main/splines] >trisolve(d,e,b) >trisolve(l,d,u,b) >trisolve(d,e,b,cl,cu) >trisolve(l,d,u,b,cl,cu) [main/strings] >regexp >[m,b]=regexp [main/struct] >getfield >setfield [main/specfun] >ellipj [main/sparse] 208 operations tested sucessfully for 100 iterations Solving Finite Element sparse eqn, n=725 nnz=9085 density=0.017284 Time per iteration= 0.033029 s Your machine is 134.729272 faster than a 486dx100! ===================== all tests completed successfully
Wer sagt's denn .. Allerdings beobachtet man manchmal (eher oft) ein Verhalten der Art
operation #196 in sp_test.m exceeds error tolerance with probability 1.00%
oder ähnlich. Dieses Verhalten verursacht aber keine weiteren
Probleme. Damit nicht jeder die Datei main/sparse/sp_test.m
selber
patchen muss, kann man hier die verbesserte Version
von sp_test.m
herunterladen.
Da Octave-forge auch (und vor allem) erweiterte Plot Funktionalität hinzufügt, gibt es noch den Test
make icheck
Allerdings hatte ich bei make icheck
folgendes
Fehlerverhalten:
[..snip..] click on the graph to place "hello" warning: gtext: could not capture button events. use left mouse to zoom the graph, right to unzoom, middle to exit warning: gzoom: could not capture button events.
Ergo: main/plot/gtext
und gzoom
funktionieren bei
mir nicht. Aber man kann ja nicht alles haben. Hilfreiche Vorschläge?
Die abschliessende Installation mit Checkinstall erzeugte mir die Datei
/usr/src/packages/RPMS/i386/octave-forge-2003.06.02-1.i386.rpm
welche hier als octave-forge-2003.06.02-1.i386.rpm heruntergeladen werden kann, die Installation erfolgt dann über
rpm -Uhv octave-forge-2003.06.02-1.i386.rpm
Am Ende müssen eventuell noch die Pfade aktualisiert werden,
ldconfig rehash export PATH=$PATH:/usr/local/bin
Das sollte es für Octave, Octave-forge (+Zusätze) gewesen sein. Aber es gibt ja auch noch das graphische Frontend kOctave.
Installation von kOctave
Das graphische Frontend kOctave läßt sich im Internet von http://bubben.homelinux.net/~matti/koctave/ herunterladen. Zur Installation danach auspacken, konfigurieren, übersetzen und installieren:
tar jxvf koctave3-0.65.tar.bz2 cd koctave3-0.65/ ./configure
Bei mir fehlten erst einmal die KDE Header (kdelibs3-devel, kdebase3-devel + dependencies). Also nachinstallieren und nochmal,
./configure make
Ich bekam den folgenden Fehler beim Übersetzen:
cc1plus: Warnung: "-Wbad-function-cast" is valid for C/ObjC but not for C++
Das scheint aber keine weiteren Auswirkungen zu haben, also weiter im Text,
make check su checkinstall
kOctave installiert sich defaultmäßig unter
/usr/local/kde/bin/koctave3
. Dann muss man eventuell noch den Pfad
ändern. Wie man die Dokumentation von Octave von kOctave aus aufruft, habe
ich allerdings noch nicht herausgefunden. Ich habe laut
Installationsanweisungen die Datei commands.lst
nach
~/.commands.lst
kopiert, aber das zeigte keinerlei Wirkung. In
meine .profile
Datei habe ich noch den Pfad für kOctave
angepasst:
export PATH=$PATH:/usr/local/kde/bin
Das war es dann für kOctave. Also noch viel Spass mit Octave + Octave-forge + kOctave.
Die RPM basierte Installation
Diese Installation basiert auf den von SuSE gelieferten und den von mir während meiner Installationsabenteuer erzeugten RPM Dateien. Benötigt werden meine RPM Dateien
Diese müssen dann (in dieser Reihenfolge) mittels
rpm -Uhv octave-2.1.50-1.i386.rpm rpm -Uhv qhull-20031120-2.i386.rpm rpm -Uhv octave-forge-2003.06.02-1.i386.rpm
installiert werden. Dieses Bundle läuft stabil unter SuSE 9.0 (wenn die
benötigten Pakete wie texinfo
alle installiert sind).
RPM Dateien aus dem Internet
Es geht natürlich auch über fertige RPM Pakete anderer aus dem Netz (dabei aber Vorsicht vor Root-Kits und ähnlichen Schweinereien walten lassen), so brachte die Suche über rpmfind.net (http://www.rpmfind.net) eine erkleckliche Anzahl fertiger RPM-Pakete für diverse Distributionen:
Ebenso findet man unter rpmseek.com (http://www.rpmseek.com) viele fertige Pakete.