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

[gelöst] Problem bei inst. von Squidguard - make bricht ab

toady

Newbie
Hallo zusammen,

ich hab ein Problem bei der Installation von SquidGuard:

nach dem ./configure, das Fehlerfrei durchläuft, bricht der make-Befehl ab, weil er unter /usr/local/BerkleyDB/include ein Verzeichnis "lex.yy.c vermutet, es aber nicht findent (is übringens auch gar nicht da!).

Auf squidguard.org steht dazu, dass man die Meldung ignorieren kann, wenn man mit gcc -Wall compiliert. Aha???

Kann mir jemand was dazu sagen??
Ich komm da irgendwie nicht weiter!

Dank euch!!
Gruß,
toady
 
OP
toady

toady

Newbie
bitteschön:

linux:/tmp/src/squidGuard-1.2.0 # ./configure
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 executable suffix...
checking for object suffix... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking how to run the C preprocessor... gcc -E
checking whether make sets ${MAKE}... yes
checking for a BSD compatible install... /usr/bin/install -c
checking for bison... no
checking for byacc... no
checking for flex... no
checking for lex... no
checking for yywrap in -lfl... no
checking for yywrap in -ll... no
checking for lynx... false
checking for perl... /usr/bin/perl
checking for db_version in -ldb... yes
checking for ANSI C header files... yes
checking for db.h... yes
checking for regex.h... yes
checking for unistd.h... yes
checking for gcc option to accept ANSI C... none needed
checking for an ANSI C-conforming const... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... (cached) yes
checking for size_t... yes
checking whether struct tm is in sys/time.h or time.h... time.h
checking for regcomp... yes
checking for regerror... yes
checking for regexec... yes
checking for strdup... yes
checking for strerror... yes
checking for vsprintf... yes
checking for sigaction... yes
checking for signal... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating src/sg.h
config.status: creating doc/Makefile
config.status: creating test/Makefile
config.status: creating test/test1.conf
config.status: creating test/test2.conf
config.status: creating samples/Makefile
config.status: creating samples/sample.conf
config.status: creating samples/squidGuard.cgi
config.status: creating samples/squidGuard-simple.cgi
config.status: creating contrib/Makefile
config.status: creating contrib/squidGuardRobot/squidGuardRobot
config.status: creating contrib/sgclean/sgclean
config.status: creating contrib/hostbyname/hostbyname
config.status: creating src/config.h
linux:/tmp/src/squidGuard-1.2.0 #


Gruß,
toady
 
OP
toady

toady

Newbie
sorry:

making all in squidGuard-1.2.0
make[1]: Entering directory `/tmp/src/squidGuard-1.2.0/src'
making all in src
gcc -I.. -I. -I. -I/usr/local/BerkeleyDB/include -DHAVE_CONFIG_H -g -O2 -I/usr/local/BerkeleyDB/include -c main.c
gcc -I.. -I. -I. -I/usr/local/BerkeleyDB/include -DHAVE_CONFIG_H -g -O2 -I/usr/local/BerkeleyDB/include -c sgLog.c
gcc -I.. -I. -I. -I/usr/local/BerkeleyDB/include -DHAVE_CONFIG_H -g -O2 -I/usr/local/BerkeleyDB/include -c sgDb.c
gcc -I.. -I. -I. -I/usr/local/BerkeleyDB/include -DHAVE_CONFIG_H -g -O2 -I/usr/local/BerkeleyDB/include -c sgDiv.c
yacc -d sg.y || (cp y.tab.c.bison y.tab.c && cp y.tab.h.bison y.tab.h)
/bin/sh: yacc: command not found
gcc -I.. -I. -I. -I/usr/local/BerkeleyDB/include -DHAVE_CONFIG_H -g -O2 -I/usr/local/BerkeleyDB/include -c y.tab.c
: sg.l || cp lex.yy.c.flex lex.yy.c
gcc -I.. -I. -I. -I/usr/local/BerkeleyDB/include -DHAVE_CONFIG_H -g -O2 -I/usr/local/BerkeleyDB/include -c lex.yy.c
gcc: lex.yy.c: No such file or directory
gcc: no input files
make[1]: *** [lex.yy.o] Error 1
make[1]: Leaving directory `/tmp/src/squidGuard-1.2.0/src'
make: *** [all] Error 1
linux:/tmp/src/squidGuard-1.2.0 #
 

snaewe

Hacker
Klar!
Bison und Yacc ist doch fast das gleiche...Warst du noch nie im Zoo?
Dort gibt es auch GNUs...
...
..
.
Nee, im Ernst: Bison ist GNU's Version von Yacc (Yet Another Compiler Compiler).
 
OP
toady

toady

Newbie
Haha... *g*

ich hätte hier den bison-Parsergenerator zu bieten.

und wie bring ich dem Ganzen dann bei, den bison zu nehmen??
 

snaewe

Hacker
Wenn du bison installierst, wird da nicht auch ein 'yacc' mit installiert ?
Ein neuer 'configure'-Lauf sollte bison aber auch erkennen.
Oder du legst dir ein /usr/bin/yacc mit folgendem Inhalt an
Code:
#!/bin/sh
exec bison -y "$@"
 
OP
toady

toady

Newbie
da steht jetzt, das er den GNU C compiler benutzt...

und in den Abhängigkeiten steht nur "m4"
 

snaewe

Hacker
Doch. Gibt's.
Bei dir sollte da jetzt aber
Code:
checking for bison... bison -y
stehen.

Du musst übrigens wahrscheinlich auch noch 'flex' installieren.
 
OP
toady

toady

Newbie
tatsächlich!!

jetzt klapp et!!!

am flex hat's gelegen.

allerdings hat er unter /usr/local/ keinen Ordner squidGuard angelegt... das bemängelt er jetzt beim starten. Oder muss man das selber machen?

Aber wenn du mir jetzt noch kurz erläutern könntest, warum und was wir jetzt gemacht haben, wär ich dir sehr verbunden!!

Ein neuer Compiler, gut... aber warum?
 

snaewe

Hacker
Also gut...

squidGuard benutzt einen Parser-Generator um einen Parser für eine bestimmte Syntax zu erzeugen (für die Config-Datei, nehm ich an).
Der Parser-Generator heisst urprünglich (UNIX, alt) YACC.
Zusätzlich wird noch ein Lexer-Generator benutzt der halt weiss welche 'TOKEN' in der Syntax vorkommen dürfen/können. Diese TOKEN werden dann an den Parser weitergereicht, der widerum bei bestimmten TOKEN bestimme Dinge macht (d.h. Code ausführt).
Der Lexer heisst ursprünglich Lex.
Bei dir fehlten sowohl Lexer (GNU-Version: Flex) und Parser-Generator (GNU-Version: Bison).

Es wird also quasi eine Meta-Sprache benutzt (eigentlich zwei), die mithilfe von Lex/Yacc (Flex/Bison) in C-Code übersetzt wird. GCC wird dann als normaler C-Compiler benutzt um aus C was ausführbares zu machen.

Du hast übrigens die Hinweise aus der squidGuard-Doku falsch verstanden. Dort steht, dass eventuelle Warnungen beim Übersetzen der generierten Dateien ignoriert werden können.
Bei dir wurden aber keine Dateien aus sg.l und sg.y (Ja, das sind die Lexer- und Parser-Beschreibungen) erzeugt weil Lex und Yacc fehlten.

So, das war's...
 
OP
toady

toady

Newbie
aha! Danke!!

und das hier:

linux:/usr/local/bin # squidGuard start
2005-04-06 15:08:09 [17309] squidGuard: can't write to logfile /usr/local/squidGuard/log/squidGuard.log
2005-04-06 15:08:09 [17309] squidGuard: can't open configfile /usr/local/squidGuard/squidGuard.conf
2005-04-06 15:08:09 [17309] going into emergency mode

oder muss man das immer selber machen?
 

snaewe

Hacker
Was muss man immer selber machen ?

Gibt's das Log-Verzeichnis denn ?
Und die Config-Datei ? Die musst du auf jeden Fall selbst erstellen.
 
OP
toady

toady

Newbie
das meinte ich ja.

An dieser Stelle gibt's nämlich gar kein Squid oder SquidGuard-Verzeichnis.

Dann mach ich mir grad eins.

Dank dir!!!
toady
 

snaewe

Hacker
Hab übrigens gerade gesehen, dass du nur drei Dateien hättest umbenennen müssen. Die generierten Dateien werden nämlich mitgeliefert.
Naja, hast vielleicht was gelernt dabei...
 
Oben