• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Problem mit "make" bei Postfix - [Linux Magazin Ho

Status
Für weitere Antworten geschlossen.

rhe

Newbie
Hallo,

ich habe ein problem mit dem make befehl bei Postfix 2.0.19.

Unter SuSE 9.1 Prof habe ich das SRC RPM von Postfix 2.0.19 vom SuSE FTP Server installiert. Ich habe dann das Postfix SRC .tar.gz ausgepackt und

"make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -I/usr/include/sasl' \
'AUXLIBS=-L/usr/lib/mysql-lmysqlclient -lz -lm -lsasl2'"

ausgeführt. Dies hat ohne Probleme funktioniert. Danach habe ich make ausgeführt. Hier hab es ein paar Probleme, aber durch die Installation der Quell RPMs konnte ich diese umgehen. Bei einem Problem hänge ich jetzt aber.

##########################################
gcc -Wmissing-prototypes -Wformat -DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -I/usr/include/sasl -DSNAPSHOT -g -O -I. -I../../include -DLINUX2 -o error error.o ../../lib/libmaster.a ../../lib/libglobal.a ../../lib/libutil.a -L/usr/lib/mysql-lmysqlclient -lz -lm -lsasl2 -ldb -lnsl -lresolv
../../lib/libglobal.a(dict_mysql.o)(.text+0x76): In function `dict_mysql_lookup':
/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:219: undefined reference to `mysql_escape_string'
../../lib/libglobal.a(dict_mysql.o)(.text+0x12b):/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:240: undefined reference to `mysql_num_rows'
../../lib/libglobal.a(dict_mysql.o)(.text+0x1a2):/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:251: undefined reference to `mysql_fetch_row'
../../lib/libglobal.a(dict_mysql.o)(.text+0x1f9):/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:258: undefined reference to `mysql_free_result'
../../lib/libglobal.a(dict_mysql.o)(.text+0x258):/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:254: undefined reference to `mysql_num_fields'
../../lib/libglobal.a(dict_mysql.o)(.text+0x27b):/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:268: undefined reference to `mysql_free_result'
../../lib/libglobal.a(dict_mysql.o)(.text+0x3a6): In function `plmysql_query':
/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:326: undefined reference to `mysql_query'
../../lib/libglobal.a(dict_mysql.o)(.text+0x3b7):/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:327: undefined reference to `mysql_store_result'
../../lib/libglobal.a(dict_mysql.o)(.text+0x3e5):/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:335: undefined reference to `mysql_error'
../../lib/libglobal.a(dict_mysql.o)(.text+0x4ba): In function `plmysql_connect_single':
/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:370: undefined reference to `mysql_init'
../../lib/libglobal.a(dict_mysql.o)(.text+0x4d9):/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:371: undefined reference to `mysql_real_connect'
../../lib/libglobal.a(dict_mysql.o)(.text+0x518):/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:377: undefined reference to `mysql_error'
../../lib/libglobal.a(dict_mysql.o)(.text+0x567): In function `plmysql_close_host':
/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:388: undefined reference to `mysql_close'
../../lib/libglobal.a(dict_mysql.o)(.text+0x58a): In function `plmysql_down_host':
/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:399: undefined reference to `mysql_close'
../../lib/libglobal.a(dict_mysql.o)(.text+0x9cd): In function `plmysql_dealloc':
/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:565: undefined reference to `mysql_close'
collect2: ld returned 1 exit status
make: *** [error] Error 1
make: *** [update] Error 1
##########################################

Das MYSQL PAM Modul habe ich vorher erfolgreich kompiliert und installiert.

Danke für die Hilfe :)
 

Desti

Member
Dann scheinen sie aber nicht korrekt installiert zu sein.

Wieso benutzt du nicht das fertig kompillierte Paket ?
 

oc2pus

Ultimate Guru
gcc -Wmissing-prototypes -Wformat -DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -I/usr/include/sasl -DSNAPSHOT -g -O -I. -I../../include -DLINUX2 -o error error.o ../../lib/libmaster.a ../../lib/libglobal.a ../../lib/libutil.a -L/usr/lib/mysql-lmysqlclient -lz -lm -lsasl2 -ldb -lnsl -lresolv
../../lib/libglobal.a(dict_mysql.o)(.text+0x76): In function `dict_mysql_lookup':
/usr/src/packages/SOURCES/postfix/postfix-2.0.19-20040312/src/global/dict_mysql.c:219: undefined reference to `mysql_escape_string'

der Linker findet nicht die richtigen Bibliotheken und hat deshalb undefined references ..
==> also fehlen dir linklibs
==> es fehlen noch weitere devel Pakete

ODER:
du hast zwar alle linklibs, aber die passen nicht zu der Version welche du da kompilieren willst.

Warum verwendest du das src.rpm ?
Welche Postfix Version willst du haben ?
Welche SuSE Version ?

Vielleicht hilft dir dieses Vorgehen:
Variante 1:
/usr/lib/rpmb --rebuild postfix-xxx-y.src.rpm

Varianate 2:
rpm -i postfix-xxx-y.src.rpm
cd /usr/src/packages
cd SOURCES
hier das neue tar.gz hinkopieren
cd ..
cd SPECS
postfix.spec anpassen (Version anpassen, neue Compile-Optionen setzen ..)
cd ..
/usr/lib/rpm/rpmb -bb SPECS/postfix.spec

In beiden Varianten steht das Ergebnis in /usr/src/packages/i[3456]86 als RPM
 
OP
R

rhe

Newbie
ich werd das Paket mal mit YAST deinstallieren und wieder installieren. Ich brauche ein Postfix mit MYSQL support. Deshalb die neukompilierung. Gibt es hier auch einen anderen weg?
 
OP
R

rhe

Newbie
>Warum verwendest du das src.rpm ?

Ich habe im Linux Magazin 12/04 gelesen, dass ich Postfix neukompilieren muss um MYSQL support zu erhalten.

>Welche Postfix Version willst du haben ?

eine Postfix Version mit MYSQL support.

>Welche SuSE Version ?

Ich verwende SuSE 9.1 Prof.
 
OP
R

rhe

Newbie
ich habe jetzt das Problem mit dem Postfix kompilieren so gelöst, dass ich mir ein fertiges RPM mit MYSQL Unterstützung für SuSE 9.1 von http://www.norrbring.biz/SuSE/ geholt habe.

Die Variante 2 von oc2pus habe ich ausprobiert. Allerdings mit dem gleichen Fehler bein ausführen von "/usr/lib/rpm/rpmb -bb SPECS/postfix.spec".

Ich habe jetzt ein neues Problem. Wenn ich in /etc/init.d cyrus starte scheint dieser zu starten. Im Ereignissprotokoll steht dann folgendes:

Jan 18 15:08:45 mail master[3900]: setrlimit: Unable to set file descriptors limit to -1: Operation not permitted
Jan 18 15:08:45 mail master[3900]: retrying with 1024 (current max)


ein "cyrus status" verrät mir, dass cyrus nicht läuft. Hier meine /etc/cyrus.conf:

START {
# do not delete this entry!
recover cmd="ctl_cyrusdb -r"
}
# UNIX sockets start with a slash and are put into /var/lib/imap/socket
SERVICES {
# add or remove based on preferences
imap cmd="imapd" listen="213.252.150.136:imap" prefork=0
imaplocal cmd="imapd -C /etc/imapd-local.conf" listen="127.0.0.1:imap"
prefork=0
imaps cmd="imapd -s" listen="213.252.150.136:imaps" prefork=0
imapslocal cmd="imapd -C /etc/imapd-local.conf" listen="127.0.0.1:imaps"
prefork=0
pop3 cmd="pop3d" listen="pop3" prefork=0
pop3s cmd="pop3d -s" listen="pop3s" prefork=0
sieve cmd="timsieved" listen="213.252.150.136:sieve" prefork=0
sievelocal cmd="timsieved -C /etc/imapd-local.conf listen="127.0.0.1:sieve"
prefork=0
# at least one LMTP is required for delivery
lmtpunix cmd="lmtpd" listen="/usr/lib/cyrus/bin/lmtpd" prefork=0
}
EVENTS {
# this is required
checkpoint cmd="ctl_cyrusdb -c" period=30
# this is only necessary if using duplicate delivery suppression
delprune cmd="ctl_deliver -E 3" period=1440
# this is only necessary if caching TLS sessions
tlsprune cmd="tls_prune" period=1440
}

Bei dem System handelt es sich um ein SuSE 9.1. , Postfix 2.1.4.

Ein "cyradm --user cyrus --server localhost --auth plain" schlägt mit einem cyradm: cannot connect to server fehl.


Danke .....
 

oc2pus

Ultimate Guru
das ist keine Fehlermeldung, sondern ein Hinweis.

dein Problem liegt hier:
Code:
  lmtpunix      cmd="lmtpd" listen="/var/spool/postfix/public/lmtp" prefork=1

Vergleiche diesen Eintrag mit deinem .... wichtig ist das prefork=1 und der korrekte Pfad zu dem lmtpd das ist ein "Socket" KEIN Programm :)


zum compile-Problem:
hat das rpmb -bb keine weiteren RPMs angefordert ?
 
OP
R

rhe

Newbie
ich habe in cyrus.conf den code wie folgt angepasst:

"lmtpunix cmd="lmtpd" listen="/usr/lib/cyrus/bin/lmtpd" prefork=1"

Ein "find / | grep lmtpd" sagt mir, dass lmtpd den folgenden Pfad hat: "/usr/lib/cyrus/bin/lmtpd". Das müsste stimmen.

Wenn ich jetzt cyrus startet, sieht alles nach einem erfolgreichen programmstart aus ("done"). Ein cyrus stop status gibt aber immernoch "dead" als status zurück. Und "cyradm --user cyrus --server localhost --auth plain" nach einem "cyrus start" kann sich trotzdem nicht mit dem server verbinden.

Nachdem ich Cyrus gestartet habe erhalte ich folgenden message Eintrag:

Jan 18 15:51:11 mail master[2548]: setrlimit: Unable to set file descriptors limit to -1: Operation not permitted
Jan 18 15:51:11 mail master[2548]: retrying with 1024 (current max)
Jan 18 15:51:11 mail master[2548]: process started
Jan 18 15:51:11 mail master[2549]: about to exec /usr/lib/cyrus/bin/ctl_cyrusdb
Jan 18 15:51:12 mail ctl_cyrusdb[2549]: recovering cyrus databases
Jan 18 15:51:12 mail ctl_cyrusdb[2549]: skiplist: recovered /var/lib/imap/mailboxes.db (0 records, 144 bytes) in 0 seconds
Jan 18 15:51:12 mail ctl_cyrusdb[2549]: done recovering cyrus databases


Nochmal zum compile-Problem:
rpmb -bb wollte etliche RPMs installiert bekommen. Diese habe ich dann über YAST installiert. Nachdem anscheinend alle benötigten RPMs da waren, habe ich mit dem Rebuild begonnen. Dieser brach aber nach einer ganzen Weile ab. Den genauen Fehlertexte habe ich leider nicht mehr.
 

oc2pus

Ultimate Guru
rhe schrieb:
ich habe in cyrus.conf den code wie folgt angepasst:

"lmtpunix cmd="lmtpd" listen="/usr/lib/cyrus/bin/lmtpd" prefork=1"

Ein "find / | grep lmtpd" sagt mir, dass lmtpd den folgenden Pfad hat: "/usr/lib/cyrus/bin/lmtpd". Das müsste stimmen.
FALSCH
nicht das lmtpd Programm steht dort, sondern der Socket unter welchem cyrus mit anderen Programmen Daten austauscht!

Der korrespondierende Eintrag dazu findet sich in der /etc/postfix/main.cf unter dem Key: mailbox_transport=
d.h. der postfix versucht über diesen Socket seine mails an den cyrus zu übergeben ...
und i.d.R. steht dieser socket im Verzeichnis: /var/spool/postfix/public/
(lmtp = linux-mail-transfer-protokoll)


rhe schrieb:
Nochmal zum compile-Problem:
rpmb -bb wollte etliche RPMs installiert bekommen. Diese habe ich dann über YAST installiert. Nachdem anscheinend alle benötigten RPMs da waren, habe ich mit dem Rebuild begonnen. Dieser brach aber nach einer ganzen Weile ab. Den genauen Fehlertexte habe ich leider nicht mehr.
ok, meine Hoffnung war, das durch das spec-file alle fehlenden Bibliotheken und Pakete installiert würden ... abr ohen die Fehlermeldung ist es jetzt hypothetisch darüber zu diskutieren ;)

kleine Anmerkung am Rande:
Und wir werden jetzt Off-Topic .. es geht jetzt um die Kommunikation postfix - cyrus :(
aber wie immer, keine Disziplin bei den Fragenden ... ich hoffe du hast schon mal hier im Forum gesucht und stundenlang ellenlange mega-threads gelesen ... und nix gefunden. Warum, das so ist .. du gibst dir selbst ein gutes Beispiel ...
 
Status
Für weitere Antworten geschlossen.
Oben