Linux 15.070 Themen, 107.540 Beiträge

Ordentliches Installieren , wie?

Frednerk / 11 Antworten / Baumansicht Nickles

Bis jetzt habe ich die *.tar.gz usw. immer mit der bash installiert.
Ausser den berühmten drei Befehlen (configure,make,make install)
nutzte ich auch ls und cd .
Bei zwei drei Paketen geht das auch gut , aber heute wollte
ich das Aktuelle GTK+-2.2.1 installieren .
Dabei führte eins zum anderen , soll heissen :
GTK benötigt drei oder vier zuvor installierte Pakete , ok ,
fange also an die zu installieren;
zwei Pakete davon benötigen wieder drei weitere , ok , heruntergeladen , entpackt und wieder ./configure
und make und ls und cd und...wo , was mach ich hier und welches Paket
sollte ich als nächstes installieren
und welches habe ich bereits installiert ?!

Ich komme also total ins Schleudern und frage mich wie
der erfahrene Linux-User bei mehreren Paketen den Überblick
behält.
Wie macht ihr das , welche Tools oder Befehle,Ordner benutzt ihr
um bei mehreren ,zu installierenden ,tar-balls
den Überblick zu behalten ?

F-)

bei Antwort benachrichtigen
polytaen Frednerk „Ordentliches Installieren , wie?“
Optionen

hmm.
das ist in der Tat ne schwerere Frage. Aber sie ist gut.
Also ich installiere in der Regel alles über dselect (dpkg).
Das kann Dir aber nicht helfen, denn das ist Debian spezifisch. Und da ist alles dabei :)
Wenn ich was kompilieren muss (Licq), sehe ich bei ./configure, welche Packete fehlen.
Diese hole ich mir dann über dselect rein (so was wie rpms :) und das löst ja alle Abhängigkeiten derer Packete.

Also: Wenn Du einen tarball installierst und der z.B. gcc-version weiss ich was verlangt, suchst Du in den rpms deiner Distri. Dann installierst du den gcc der verlangt wird, und rufst danach wieder ./configure von dem Programm auf, das Du installieren willst (WEnn Du rausfindest, dass es mehere andere Sachen brauchst, kannst Du die alle über rpms installieren, in der Regel sollten die bei deiner Distri dabei sein, im Zweifelsfall die developer files).

Allgemein: Wenn ein tarball eine library verlangt, musst Du diese ja nicht auch über einen tarball installieren. Die verlangte kannst Du ja ohne weiteres über deinen Packetmanager installieren.
Debian ist dafür echt prädestiniert, aber ich denke das geht mit allen distris.

Normalerweise arbeite ich dann in mehreren shells parallel. Also: für jeden Compilierungsprozess eine eigene. Das hilft schon mal.

Prog1 verlangt Prog2, 3, 4:
Prog2 bekommt ne eigene shell zum kompilieren. Shell von Prog1 wird "verkleinert"
Prog2 verlangt Prog2a, 2b, 2c
2a, 2b, 2c bekommen eigene shells, in denen diese kompiliert werden, shell von Prog2 wir in der Zeit verkleiner. 2a, 2b und 2c werden parallel kompiliert. Wenn ein Progrmm komplett kompiliert ist, wird dei shell endgültig geschlossen.

Naja, so oder so ähnlich.


HTH
Bis denne
poly

-      .---.        .----------     /     \  __  /     ------    / /     \(  )/    -----   //////   ' \/ `   ---  //// / // :    : --- // /   /  /`    '--//          //..\\       ====MM====MM====           '//||\\`
bei Antwort benachrichtigen
Frednerk polytaen „hmm. das ist in der Tat ne schwerere Frage. Aber sie ist gut. Also ich...“
Optionen

Hi poly,

die Idee mit mehreren shells (bzw.mehrere Fenster in der shell) zu arbeiten ist gut; hätte ich auch drauf kommen können ;)

Mit dieser Methode habe ich heute meinen zweiten Anlauf
gestartet um GTK+-2.2.1.tar.gz zu installieren.

Die Übersicht hatte ich jetzt , aber dafür kam ein neues Problem:

checking for pkg-config... (cached) /usr/bin/pkg-config
checking for GLIB - version >= 2.1.3...
*** 'pkg-config --modversion glib-2.0' returned 2.2.1, but GLIB (2.0.6)
*** was found! If pkg-config was correct, then it is best
*** to remove the old version of GLib. You may also be able to fix the error
*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing
*** /etc/ld.so.conf. Make sure you have run ldconfig if that is
*** required on your system.
*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH
*** to point to the correct configuration files
no
configure: error:
*** Glib 2.1.3 or better is required. The latest version of
*** Glib is always available from ftp://ftp.gtk.org/.


Dieser Auszug erschien in der bash als ich pango1.2.1 configurierte.
Das Problem an dieser message ist nur:

1.) pkg-config und GLIB-2.2.1 hatte ich davor installiert

2.) die tarballs werden anscheinend
in /usr/local/ anstatt in /usr/ installiert.

3.) Mein Fehler war , dass das alte GTK+- noch installiert war ;
ich dachte das würde überinstalliert falls es drauf wäre.

4.) weiss ich momentan nicht mehr....

Fragen:

1.) Muss man solche Pakete vielleicht aus speziellen Ordnern heraus
installieren oder ist das egal ?

2.) Muss man vielleicht den Pfad angeben , wohin "es"
installiert werden soll und wenn ja
woher weiss ich dann den Zielpfad ?


3.) Ist das vielleicht ein Fehler/Eigenheit von Mandrake9.0
wie mit den tarballs umgegangen wird ?

4.) Ist das vielleicht einer der Gründe warum die Puristen auf
Debian schwören ?

schön' Gruss, F-)

bei Antwort benachrichtigen
polytaen Frednerk „Hi poly, die Idee mit mehreren shells bzw.mehrere Fenster in der shell zu...“
Optionen

Hi Fednerk,

*** 'pkg-config --modversion glib-2.0' returned 2.2.1, but GLIB (2.0.6)
*** was found! If pkg-config was correct, then it is best
*** to remove the old version of GLib. You may also be able to fix the error
*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing
*** /etc/ld.so.conf. Make sure you have run ldconfig if that is
*** required on your system.

Hast Du das gemacht?

*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH
*** to point to the correct configuration files
no
configure: error:
*** Glib 2.1.3 or better is required. The latest version of
*** Glib is always available from ftp://ftp.gtk.org/.


Ja, Du hast Die Meldung richtig interpretiert. Er findet deine alte glib. Vielleicht verlangt er aber auch nur die glib-devel version.

Deinstallier doch einfach die alte glib, dann gibts keine Probleme.

Installationspfad: Ist normalerweise Standard. Debian hält sich extrem strikt an diese Standards, deshalb muss ich keinen Pfad angeben. Wie man bei der Installation einen Pfad angibt, findet man mit ./configure --help heraus.
Von wo aus man installiert ist egal!!
Nein, das ist auch keine Eigenheit von Mandrake ;)

Hat den folgenden Sinn: Man kann das machen, was Du gemacht hast, nämlich 2 Versionen eines Programms installieren (hier glib). Wenn man nämlich die alte und die neue braucht.

diese sind bsp.: in /usr/local/a und /usr/local/b installiert.
Wenn ein Programm, das du kompilieren willst, Komponente b braucht (aber a eigentlich der Standardpfad ist) kann man das bei der Konfig des neuen Programms mit angeben:
./configure --with-sdl-config=PATH
Damit zeigt man ./configure dann, welche sdl-config er nehmen soll (nur ein Beispiel eines anderen Programms!!!!)

Wohin installiert man?
./configure --prefix=DIR
!! Hier ist nur das Grundverzeichnis angegeben (z.b. /usr oder /usr/local, meist legen die Prgogramme dann ihre sachen in die bin -Verzeichnisse)

Woher weiss man den Zielpfad? Den kannst Du Dir aussuchen, nach oben genannten Gründen, nur muss man Ordnung halten. Und die Standardpfade sind halt einfacher bei späteren kompilierungen.

um libraries auch zugänglich zu machen, muss man in der Regel noch ldconfig ausführen. Liegt deine pkg-config auch da, wo sie angeblich gefunden wurde?

Schau Dir auch mal die Dateien an (ld.so.conf), die so in der Errormessage angegeben sind.
Ich denke aber, dass mit ldconfig alles erledigt sein wird.

Lösche nach einem erfolglosen ./configure mal immer die Dateien config.cache.

Ja, Debian hält sich extrem an die Pfade, das gefällt mir, und die Packetverwaltung ist excellent. Daher mag ich Debian, weil ich n ur äusserst sleten Probs mit Kompilierungen habe.

Bis denne
wow das war viel ;)
poly

-      .---.        .----------     /     \  __  /     ------    / /     \(  )/    -----   //////   ' \/ `   ---  //// / // :    : --- // /   /  /`    '--//          //..\\       ====MM====MM====           '//||\\`
bei Antwort benachrichtigen
Frednerk polytaen „Hi Fednerk, pkg-config --modversion glib-2.0 returned 2.2.1, but GLIB 2.0.6 was...“
Optionen

hi Poly,

ich versuch's kurz zu machen ;)

>>Liegt deine pkg-config auch da, wo sie angeblich gefunden wurde?

Nun, diesen Punkt habe ich verschwiegen *g*
Die neue pkg-config wurde natürlich auch in /usr/local/ installiert
und konnte nicht gefunden werden , deshalb kopierte ich die neue
pkg-config dahin wo sie gefunden werden konnte (/usr/bin/).

(p.s..: Mandrake ist jetzt wieder jungfräulich installiert)

>> Make sure you have run ldconfig if that is
*** required on your system.
Hast Du das gemacht?

Hatte ich beim ersten Mal natürlich nicht gemacht, weil ich das
kleine "L" für ein grosses "i" hielt und somit natürlich nicht funktionierte (ich dachte Id=identification).

Bei meiner vorletzten Mandrake-Neuinstallation habe ich es mit "L"
getestet und der "L"dconfig Befehl wurde anscheinend
(keine Meldung o.ä.) auch durchgeführt , trotzdem wurde die neue glib nicht erkannt.


>diese sind bsp.: in /usr/local/a und /usr/local/b installiert.
>Wenn ein Programm, das du kompilieren willst, Komponente b braucht >(aber a eigentlich der Standardpfad ist) kann man das bei der Konfig >des neuen Programms mit angeben:
>./configure --with-sdl-config=PATH
>Damit zeigt man ./configure dann, welche sdl-config er nehmen soll >(nur ein Beispiel eines anderen Programms!!!!)

Das finde ich sehr interessant !
Und ich denke das ist der Schlüssel des Problems, aber irgendwie klappt das nicht bei mir:

AUSGANGSLAGE:

1.)pkg-config0.14 ist installiert in /usr/local/bin/

2.)altes pkg-config in /usr/bin/

3.)glib-2.2.1 benötigt pkg-config0.14 findet aber mit "./configure"
das "alte" pkg-config

4.) Also gebe ich nach deinem Beispiel an , mit welchem pkg-config
sich glib configurieren soll:


[root@localhost glib-2.2.1]#
./configure --with-pkg-config=/usr/local/bin/
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking whether make sets ${MAKE}... yes
checking for working aclocal-1.4... found
checking for working autoconf... found
checking for working automake-1.4... found
checking for working autoheader... found
checking for working makeinfo... missing
checking whether to enable maintainer-specific portions of Makefiles... no
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking for the BeOS... no
checking for Win32... no
checking whether to enable garbage collector friendliness... no
checking whether to disable memory pools... no
checking for gcc... gcc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking for c++... no
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking for a BSD-compatible install... /usr/bin/install -c
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... 64
checking for _LARGE_FILES value needed for large files... no
checking for pkg-config... /usr/bin/pkg-config
configure: error: *** pkg-config too old; version 0.14 or better required.


und trotzdem findet er nur das alte pkg-config in /usr/bin/ :(


irgend eine Idee ?


F-)

bei Antwort benachrichtigen
polytaen Frednerk „hi Poly, ich versuch s kurz zu machen Liegt deine pkg-config auch da, wo sie...“
Optionen

HI Frednerk,

Die neue pkg-config wurde natürlich auch in /usr/local/ installiert
und konnte nicht gefunden werden , deshalb kopierte ich die neue
pkg-config dahin wo sie gefunden werden konnte (/usr/bin/).

Das war nicht gut. Mach das rückgängig. Das ist auch unnötig.

AUSGANGSLAGE:

1.)pkg-config0.14 ist installiert in /usr/local/bin/
gut zu wissen :)

2.)altes pkg-config in /usr/bin/
auch gut zu wissen.

3.)glib-2.2.1 benötigt pkg-config0.14 findet aber mit "./configure"
das "alte" pkg-config

Ja, genau. weil das der erste Pfad in deiner $PATH (pfadvariable) ist.
Wenn du echo $PATH eingibst, siehst Du, wie deine Pfade nacheinander abgesucht werden.

4.) Also gebe ich nach deinem Beispiel an , mit welchem pkg-config
sich glib configurieren soll:
[root@localhost glib-2.2.1]#
./configure --with-pkg-config=/usr/local/bin/


Ja, das ist zwar schön, aber leider (nehme ich an) falsch.
Das mit dem sdl-config war nur ein Beispiel aus einer anderen Compilierung.

Was Du tun musst ist folgendes:
Schau dir den outpot von ./configure --help an. Suche dort nach der Option, wie man dem configure sagen muss, wo die pkg liegt. Das mit dem --with-pkg-config=PATH ist zwar gut, aber wenn das irgendwie anders heissen muss, muss es halt anders heissen. War gut übertragen, aber halt leider falsch.

Also ./configure --help und dann nach pkg suchen (oder pkg-config) und dann suchen, wie man das angeben muss.

Wenn Du nicht weiterweisst, gib einfach den output von ./configure --help wieder, dann koennen wir nochmal schauen.

Wenn ./configure --help zuviel Kram ausgibt, probier einfach
./configure --help | grep pgk oder
./configure --help | more

den | bekommst Du mit [AltGr + pipe.

HTH
Bis denne
poly

p.s.: Du bist auf dem richtigen weg, aber bald hast Du es :).
Dann hast Du aber auch viel gelernt. Und: freue Dich auf die nächste Fehlermeldung *SCNR*

-      .---.        .----------     /     \  __  /     ------    / /     \(  )/    -----   //////   ' \/ `   ---  //// / // :    : --- // /   /  /`    '--//          //..\\       ====MM====MM====           '//||\\`
bei Antwort benachrichtigen
Frednerk polytaen „HI Frednerk, Die neue pkg-config wurde natürlich auch in /usr/local/...“
Optionen

Hi Poly,

erstmal ein *Danke* für deine Geduld.

Von glib-2.2.1 sehen die ./configure-Optionen
so aus:


[root@localhost glib-2.2.1]# ./configure --help
`configure' configures this package to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print `checking...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or `..']

Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]

By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc. You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--datadir=DIR read-only architecture-independent data [PREFIX/share]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--infodir=DIR info documentation [PREFIX/info]
--mandir=DIR man documentation [PREFIX/man]

Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names

System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]

Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer
--enable-debug=no/minimum/yes turn on debugging default=$debug_default
--enable-gc-friendly turn on garbage collector friendliness default=no
--disable-mem-pools disable all glib memory pools
--enable-ansi turn on strict ansi default=no
--enable-threads turn on basic thread support default=yes
(=no will override --with-threads)
--disable-rebuilds disable all source autogeneration rules
--disable-largefile omit support for large files
--enable-static=PKGS build static libraries default=no
--enable-shared=PKGS build shared libraries default=yes
--enable-fast-install=PKGS optimize for fast installation default=yes
--disable-libtool-lock avoid locking (might break parallel builds)
--enable-included-printf use included printf default=auto
--enable-gtk-doc use gtk-doc to build documentation default=auto

Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-libiconv=no/gnu/native use the libiconv library
--with-gnu-ld assume the C compiler uses GNU ld default=no
--with-pic try to use only PIC/non-PIC objects default=use both
--with-threads=none/posix/dce/solaris/win32 specify a thread implementation to us
--with-html-dir=PATH path to installed docs

Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L

bei Antwort benachrichtigen
polytaen Frednerk „Hi Poly, erstmal ein Danke für deine Geduld. Von glib-2.2.1 sehen die...“
Optionen

Hmm.
Da muss ich erst mal drüber nachdenken....
Werds mir nochmal ansehen. Vielleicht musst Du doch die alte überschreiben.....Mal sehen

Bis denne
poly

-      .---.        .----------     /     \  __  /     ------    / /     \(  )/    -----   //////   ' \/ `   ---  //// / // :    : --- // /   /  /`    '--//          //..\\       ====MM====MM====           '//||\\`
bei Antwort benachrichtigen
hasw Frednerk „Ordentliches Installieren , wie?“
Optionen

Ich lass die installierten Sourcen weiter unter /usr/src.
Dann muss ich nur ls /usr/src machen und seh was installiert ist.

Wenn ich mal Platz brauch loesch ich alles unterhalb des Sourcecode-Ordner.

Wenn nun ein Programm von einem weiteren abhaengig ist was noch nicht installiert ist, entpacke ich das in den Pfad des ersten, usw.
Ansonsten geh ich nach der Reihenfolge in der README/INSTALL vor, wenns um mehrere Abhaengigkeiten geht.

Ausserdem log ich noch mit was make install wo hininstalliert um es mal wieder deinstallieren zu koennen.

bei Antwort benachrichtigen
Frednerk hasw „Ich lass die installierten Sourcen weiter unter /usr/src. Dann muss ich nur ls...“
Optionen

meinst du mit Scourcen die entpackten tarballs und
installierst du die dann immer aus /usr/src heraus ?

Was/wo ist der scourcecode-Ordner ?

Woher weiss man wo was hinstalliert werden muss
und wie lautet dafür ein Beispielbefehl ?

Danke schonmal, F-)

bei Antwort benachrichtigen
hasw Frednerk „meinst du mit Scourcen die entpackten tarballs und installierst du die dann...“
Optionen

Bsp.:

Ich entpacke prog-4.3.tar.bz2 nach /usr/src.
Jetzt hab ich den Ordner /usr/src/prog-4.3 (den mein ich mit Sourcecode-Ordner).
Das prog-4.3 brauch nun lib-1.2 und ich entpacke lib-1.2 nach /usr/src/prog-4.3

Das ist natuerlich Geschmacksache und kommt auf die Funktion der Libraries an, groessere entpacke ich auch mal nach /usr/src.

Normalerweise muss man sich nicht drum kuemmern wo was hininstalliert wird, dass macht "make install" alleine. Man kann die Pfade aber auch selber festlegen z.B. ./configure --prefix=/usr --sysconfdir=/etc

Dann kopierts bei "make install" die Binaries nach /usr/bin und die Konfigdateien nach /etc.

bei Antwort benachrichtigen
Frednerk hasw „Bsp.: Ich entpacke prog-4.3.tar.bz2 nach /usr/src. Jetzt hab ich den Ordner...“
Optionen

ok danke,

aber wenn make install wirklich weiss was es tut,
dann fummel ich da doch lieber nicht dran rum

F-))

bei Antwort benachrichtigen