# [solved] Problemi compilazione perl

## caio

Ciao a tutti,

ho deciso di iscrivermi a questo forum perchè ho questo problema a cui non riesco assolutamente a venirne a capo fiducioso del fatto che qualcuno saprà darmi la dritta giusta    :Smile: 

E' ormai da più di una settimana, che questo cavolo di pacchetto dev-lang/perl-5.8.6-r6 mi sta facendo impazzire, ho cercato di installarlo con tutti i modi di questo mondo ma continua a darmi lo stesso errore ogni volta.

Il fatto è che non riesco nemmeno ad aggiornare il sistema (emerge --update --deep world) senza aggiornarlo, e poi mi serve per degli applicativi che lo richiedono.

Cmq, l'errore che mi da è questo:

```
make[2]: Entering directory `/var/tmp/portage/perl-5.8.6-r6/work/perl-5.8.6/x2p'

echo Makefile.SH cflags.SH | tr ' ' '\n' >.shlist

make[2]: Leaving directory `/var/tmp/portage/perl-5.8.6-r6/work/perl-5.8.6/x2p'

Updating makefile...

make[1]: Leaving directory `/var/tmp/portage/perl-5.8.6-r6/work/perl-5.8.6/x2p'

Now you must run 'make'.

If you compile perl5 on a different machine or from a different object

directory, copy the Policy.sh file from this object directory to the

new one before you run Configure -- this will help you with most of

the policy defaults.

`sh  cflags "optimize='-O3 -pipe -march=athlon-xp -fomit-frame-pointer'" miniperlmain.o` -fPIC miniperlmain.c

/bin/sh: -fPIC: command not found

make: *** [miniperlmain.o] Error 127

!!! ERROR: dev-lang/perl-5.8.6-r6 failed.

!!! Function src_compile, Line 268, Exitcode 2

!!! Unable to make

!!! If you need support, post the topmost build error, NOT this status message.

```

Da quel che ho capito sembra che il problema sia il flag fPIC che il compilatore cerca di impostare, ho cercato di compilare utilizzando il flag pic (USE="pic" emerge perl) ma non cambia, ho provato svariate combinazioni di FLAGS ma il risultato è sempre lo stesso; ho cercato anche informazioni su come evitare che il compilatore utilizzi quel "-fPIC" ma non sono stato in grado di trovare informazioni soddisfacenti.

Infine avevo pensato di installare il pacchetto precompilato ma non so dove andare a pigliarlo...idee?Last edited by caio on Wed Nov 16, 2005 3:29 pm; edited 1 time in total

----------

## .:chrome:.

hai verificato (con un emerge -pv) che non sia affermata la flag pic? quella USE deve essere utilizzata solo con profili di compilatore o di sistema "hardened".

verifica poi di aver compilato perl e libperl con le stesse USE-flag

----------

## caio

Emerge -pv mi da questo output

```
These are the packages that I would merge, in order:

Calculating dependencies ...done!

[ebuild  N    ] dev-lang/perl-5.8.6-r6  +berkdb -build -debug -doc +gdbm -ithreads -minimal -perlsuid 0 kB

Total size of downloads: 0 kB
```

e mi sembra che il flag non sia attivo. Mentre mi pare che dovrebbe essere attivo, o quantomeno nell'errore mi da:

```
-fPIC: command not found
```

quando sta provando a compilarlo disattivando il flag (o sbaglio?).

La libperl se provo a compilarla fallisce con lo stesso errore con cui fallisce perl:

```
Finding dependencies for walk.o.

make[2]: Entering directory `/var/tmp/portage/libperl-5.8.6-r1/work/perl-5.8.6/x2p'

echo Makefile.SH cflags.SH | tr ' ' '\n' >.shlist

make[2]: Leaving directory `/var/tmp/portage/libperl-5.8.6-r1/work/perl-5.8.6/x2p'

Updating makefile...

make[1]: Leaving directory `/var/tmp/portage/libperl-5.8.6-r1/work/perl-5.8.6/x2p'

`sh  cflags "optimize='-O3 -pipe -march=athlon-xp -fomit-frame-pointer'" perl.o` -fPIC perl.c

/bin/sh: -fPIC: command not found

make: *** [perl.o] Error 127

!!! ERROR: sys-devel/libperl-5.8.6-r1 failed.

!!! Function src_compile, Line 231, Exitcode 2

!!! Unable to make libperl.so

!!! If you need support, post the topmost build error, NOT this status message.

```

Ho provato anche a compilare eliminando gdbm ("USE=-gdbm" emerge perl) dalle flags perchè avevo letto di qualcuno qui sul forum che con un problema con perl aveva risolto coì, ma non ha funzionato.

Ho ricompilato anche gcc nel dubbio fosse un problema di compilatore ma nisba

 :Question: 

----------

## caio

Nessuno mi sa dire almeno come faccio a emergere il pacchetto senza che il compilatore usi l'opzione "-fPIC" ?

Oppure dove lo trovo un pacchetto precompilato che almeno installo quello?

----------

## .:chrome:.

io credo che tu abbia fatto un o' di casino con il compilatore.

porta per favore l'output di gcc-config -l, emerge info, e la tua architettura

----------

## caio

Beh può anche essere, sono abb. nuovo in gentoo...   :Rolling Eyes: 

Però è strano perchè tutta l'altra roba compila bene, solo perl mi da problemi.

Cmq, ecco l'output

```
painkiller ~ # gcc-config -l

 [1] i686-pc-linux-gnu-3.3.6 *

 [2] i686-pc-linux-gnu-3.3.6-hardened

 [3] i686-pc-linux-gnu-3.3.6-hardenednopie

 [4] i686-pc-linux-gnu-3.3.6-hardenednopiessp

 [5] i686-pc-linux-gnu-3.3.6-hardenednossp
```

```

painkiller ~ # emerge info

Portage 2.0.51.22-r3 (default-linux/x86/2005.0, gcc-3.3.6, glibc-2.3.5-r2, 2.6.12-gentoo-r6 i686)

=================================================================

System uname: 2.6.12-gentoo-r6 i686 AMD Athlon(tm)

Gentoo Base System version 1.6.13

dev-lang/python:     2.3.5-r2, 2.4.2

sys-apps/sandbox:    1.2.12

sys-devel/autoconf:  2.13, 2.59-r6

sys-devel/automake:  1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r1

sys-devel/binutils:  2.15.92.0.2-r10

sys-devel/libtool:   1.5.20

virtual/os-headers:  2.6.11-r2

ACCEPT_KEYWORDS="x86"

AUTOCLEAN="yes"

CBUILD="i686-pc-linux-gnu"

CFLAGS="-O3 -pipe -march=athlon-xp -fomit-frame-pointer"

CHOST="i686-pc-linux-gnu"

CONFIG_PROTECT="/etc /usr/kde/2/share/config /usr/kde/3.4/env /usr/kde/3.4/share/config /usr/kde/3.4/shutdown /usr/kde/3/share/config /usr/lib/X11/xkb /usr/lib/mozilla/defaults/pref /usr/share/config /var/qmail/control"

CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/env.d"

CXXFLAGS="-O3 -pipe -march=athlon-xp -fomit-frame-pointer"

DISTDIR="/usr/portage/distfiles"

FEATURES="autoconfig distlocks sandbox sfperms strict"

GENTOO_MIRRORS="http://www.die.unipd.it/pub/Linux/distributions/gentoo-sources/"

LINGUAS="it en"

MAKEOPTS="-j2"

PKGDIR="/usr/portage/packages"

PORTAGE_TMPDIR="/var/tmp"

PORTDIR="/usr/portage"

SYNC="rsync://rsync.nl.gentoo.org/gentoo-portage"

USE="3dfx 3dnow X alsa apm arts audiofile avi berkdb bitmap-fonts bzip2 cdr crypt cups curl dga directfb divx4linux dvd dvdr eds emboss encode esd ethereal exif expat fam fbcon ffmpeg flac foomaticdb fortran ftp gd gdbm gif glut gpm gstreamer gtk gtk1 gtk2 idn imagemagick imlib ipv6 java jpeg junit kde kdeenablefinal kdexdeltas lcms libg++ libwww lm_sensors mad matroska mikmod mmx mng motif mozilla mp3 mpeg msn ncurses nls ogg oggvorbis opengl oss pam pcre pdflib perl php png ppds python qt qtmt quicktime readline recode samba sdl spell ssl svg svga tcltk tcpd tiff truetype truetype-fonts type1-fonts udev unicode usb vorbis win32codecs wxwindows x86 xine xlib xml xml2 xmms xv xvid zlib linguas_it linguas_en userland_GNU kernel_linux elibc_glibc"

Unset:  ASFLAGS, CTARGET, LANG, LC_ALL, LDFLAGS, PORTDIR_OVERLAY

```

Il Pc è un Athlon Xp mobile su NForce2, 1GB di ram...altro?

----------

## .:chrome:.

io qui non vedo nulla di strano.

sembrerebbe quasi che -fPIC, che è un parametro del compilatore, venga messo nel posto sbagliato della riga di comando, e che quindi appaia al sistema come un comando a sé stante anziché come un parametro...

potrebbe quasi essere un errore dell'ebuild... ma mi chiedo come mai non sia capitato anche ad altri.

fai una prova:

emerge --sync e poi ritenti l'emerge

se l'errore si ripresenta, mascheri quella versione di perl (e libperl) e usi quella appena precedente

----------

## caio

eh l'aggiornamento del portage lo ho già fatto un sacco di volte...cmq riprovo.

Ho anche provato a eliminare manualmente l'ebuild dal portage locale per vedere se non fosse magari quello ma non è cambiato nulla.

Il fatto è che avevo già avuto questo problema in passato, poi avevo mascherato versioni successive alla 5.8.6-r5 (che funzionava) in package.mask e avevo risolto.

Solo che poi ultimamente mi dava errori comunque, forse per il fatto che cercava di aggiornare la libperl, così in un momento di disperazione ho unmergiato la versione funzionante (5.8.6-r5) con il risultato che ora non ne ho nessuna installata.

Ma per installare una versione precedente o successiva come si fa?

Ho provato a fare l'emerge della versione precedente (emerge perl-5.8.6-r5) ma mi dice

```
!!! Problem in dev-lang/perl-5.8.6-r5 dependencies.

!!! "Specific key requires an operator (dev-lang/perl-5.8.6-r5) (try adding an '=')" exceptions

```

Quindi basta mascherare le versioni successive inserendo

```
>dev-lang/perl-5.8.6-r5
```

in package.mask per installare una versione precedente?

----------

## .:chrome:.

si. oppure, come ti ha detto l'ebuild metti un "=" davanti alla versione

----------

## caio

niente, ho provato ad installare la versione precedente inserendo la riga così come l'ho scritta in package.mask ma da lo stesso identico errore   :Crying or Very sad: 

Sono disperato!

Per curiosità ho provato anche ad installare una versione successiva (la 5.8.7) che mi risulta essere mascherata

```
painkiller ~ # emerge perl

Calculating dependencies

!!! All ebuilds that could satisfy "perl" have been masked.

!!! One of the following masked packages is required to complete your request:

- dev-lang/perl-5.8.7 (masked by: ~x86 keyword)

- dev-lang/perl-5.8.6-r6 (masked by: package.mask)

- dev-lang/perl-5.8.6-r5 (masked by: package.mask)

- dev-lang/perl-5.8.7-r1 (masked by: ~x86 keyword)
```

usando # ACCEPT_KEYWORDS="~x86" emerge perl  e inserendo sempre nel package.mask la stringa

```
<=dev-lang/perl-5.8.6-r6

```

ma tutto ciò che ne ho ricavato è lo stesso, stupido, incomprensibile errore.

Ci sarà pur un modo per far si che il compilatore non usi quell'inutile flag?!

----------

## randomaze

Basta guardare dentro l'ebuild per vedere che la flag -fPIC viene impostata direttamente da lui.

 *caio wrote:*   

> `sh  cflags "optimize='-O3 -pipe -march=athlon-xp -fomit-frame-pointer'" miniperlmain.o` -fPIC miniperlmain.c
> 
> /bin/sh: -fPIC: command not found
> 
> make: *** [miniperlmain.o] Error 127

 

Il problema é che in quel comando il backtick viene chiuso prima, o, forse, il comando "sh cflags ..." invece di restituire qualcosa di sensato restituisce una stringa vuota e cosí l'opzione -fPIC viene interpretata come comando.

Hai rpovato a cercare nel forum internazionale, su bugs o con google per vedere se qualcuno ha incontrato il tuo stesso problema?

----------

## caio

ah ok, ho visto che viene impostata dall'ebuild.

Ho provato anche a modificarla ma ovviamente mi dice che l'MD5 non corrisponde; non sono riuscito nemmeno a "ingannarlo" inserendo i caratteri commentati, come è giusto che sia, visto che l'MD5 viene calcolato sul contenuto del pacchetto.

Sarebbe ragionevole tentare di farlo? Qualcuno sa come si fa?

Ho cercato nel forum internazionale ma ho trovato solo gente che ha avuto vari problemi con la compilazione di perl ma nessuno con lo stesso errore; ho provato anche ad applicare i loro modi di risoluzione (che consistevano nell'omettere USE FLAGS ma non ho ottenuto niente).

Anche il mio consigliere preferito (google) non ha saputo darmi informazioni utili a riguardo, per cui inizio a credere che si tratti di un errore legato alla mia configurazione piuttosto che a un big diffuso.

----------

## randomaze

 *caio wrote:*   

> Ho provato anche a modificarla ma ovviamente mi dice che l'MD5 non corrisponde; non sono riuscito nemmeno a "ingannarlo" inserendo i caratteri commentati, come è giusto che sia, visto che l'MD5 viene calcolato sul contenuto del pacchetto.

 

L'MD5 viene calcolato sul tarball scaricato, non sull'ebuild (a meno di strane recenti modifiche). Peraltro per modificare un ebuild é meglio metterlo in OVERLAY piuttosto che modficare il portage tree, che viene sovrascritto ad ogni sync.

----------

## caio

 *Quote:*   

> L'MD5 viene calcolato sul tarball scaricato, non sull'ebuild (a meno di strane recenti modifiche).

 

Si si hai ragione, x la precisione mi pare di aver capito che sia calcolato su tutti i file compresi nella directory (ebuild compreso), infatti per installare il pacchetto in overlay ho dovuto ricreare l'MD5 di tutti i file della directory   :Smile: 

 *Quote:*   

> 
> 
> Peraltro per modificare un ebuild é meglio metterlo in OVERLAY piuttosto che modficare il portage tree, che viene sovrascritto ad ogni sync.

 

Esattamente quello che ho fatto.

Seguendo l'ottima guida della documentazione ufficiale ho creato la mia buona directory di overlay, copiato modificato (eliminando il flag "-fPIC" che credevo il responsabile del fallimento della compilazione) ecc.. l'ebuild, scompattato & c., solo che al momento della compilazione stavolta mi da un altro errore, cioè:

```
sh  cflags "optimize='-O3 -pipe -march=athlon-xp -fomit-frame-pointer'" miniperlmain.o`  miniperlmain.c

/bin/sh: miniperlmain.c: command not found

make: *** [miniperlmain.o] Error 127

!!! ERROR: dev-lang/perl-5.8.6-r6 failed.

!!! Function src_compile, Line 268, Exitcode 2

!!! Unable to make

!!! If you need support, post the topmost build error, NOT this status message.
```

sempre un errore di sh, quindi il problema non sta forse nell'ebuild ma in qualcos'altro (sh stesso?).

Che dite?

----------

## randomaze

 *caio wrote:*   

> sempre un errore di sh, quindi il problema non sta forse nell'ebuild ma in qualcos'altro (sh stesso?).
> 
> Che dite?

 

Detto sopra:

 *randomaze wrote:*   

> ...il comando "sh cflags ..." invece di restituire qualcosa di sensato restituisce una stringa vuota e cosí l'opzione -fPIC viene interpretata come comando.

 

ora, da dove venga uno script che si chiama cflags non lo so, ma suppongo che stia nel tarball del perl.

Problemi nella sh non credo che ce ne siano... l'utente da cui installi (tipicamente root) tutto sta usando una bash?

----------

## caio

 *randomaze wrote:*   

> 
> 
> Problemi nella sh non credo che ce ne siano... l'utente da cui installi (tipicamente root) tutto sta usando una bash?

 

Credo proprio di si...la variabile d'ambiente $SHELL è settata su /bin/bash

Nel frattempo ho provato a fare un po di cose, ho tentato di installare tutte e 3 le versioni di perl disponibili nel portage (5.8.6-r5, 5.8.6-r6, 5.8.7-r1) dopo averle modificate eliminando i vari -fPIC in giro negli ebuild e nei makefile, ma senza successo.

Ho provato a installare la versione più vecchia (5.8.6-r5) che precedentemente funzionava sul mio sistema dopo aver aggiornato il portage dall'albero ufficiale ma ottengo sempre lo stesso errore.

----------

## makoomba

non è che hai qualche variabile strana nel make.conf ?

posta

```
egrep -v '^#|^\s*$' /etc/make.conf
```

----------

## caio

 *makoomba wrote:*   

> non è che hai qualche variabile strana nel make.conf ?
> 
> posta
> 
> ```
> ...

 

C'è sopra l'emerge info...cmq eccolo:

```
USE="matroska cups foomaticdb ppds usb -gnome oss gtk gtk1 cdr 3dfx bzip2 divx4linux directfb dvdr foomaticdb ftp kdeenablefinal kdexdeltas lm_sensors mp3 msn php quicktime svga unicode 3dnow mmx X dga opengl xv fbcon kde qt qtmt ncurses gif jpeg png tiff avi mpeg alsa dvd xmms ssl crypt mozilla truetype xml pdflib java python samba nls win32codecs wxwindows xine xml2 xlib zlib x86 perl"

CFLAGS="-O3 -pipe -march=athlon-xp -fomit-frame-pointer"

CHOST="i686-pc-linux-gnu"

CXXFLAGS="${CFLAGS}"

MAKEOPTS="-j2"

LINGUAS="it en"

GENTOO_MIRRORS="http://www.die.unipd.it/pub/Linux/distributions/gentoo-sources/"

SYNC="rsync://rsync.de.gentoo.org/gentoo-portage"

SYNC="rsync://rsync.nl.gentoo.org/gentoo-portage"

ALSA_CARDS="intel8x0"

PORTDIR_OVERLAY="/usr/local/portage_unofficial/"
```

----------

## makoomba

ad un altro utente, andava in conflitto una variabile non standard impostata in make.conf con una utilizzata nell'ebuild.

emerge --info mostra solo le variabili usate da portage.

nel tuo caso, però, non vedo nulla di esoterico.

dai 

```
ebuild `equery which perl` compile
```

poi, spostati in

```
/var/tmp/portage/perl-5.8.7-r1/work/perl-5.8.7
```

ed esegui manualmente

```
sh  cflags "optimize='-O3 -pipe -march=athlon-xp -fomit-frame-pointer'" miniperlmain.o
```

posta l'output

----------

## caio

ok..allora:

```
ebuild `equery which perl` compile
```

restituisce lo stesso errore del primo post, solo che il "-fPIC" qui è tutto minuscolo.

```
sh  cflags "optimize='-O3 -pipe -march=athlon-xp -fomit-frame-pointer'" miniperlmain.o
```

Invece mi restituisce semplicemente un bel Segmentation fault  :Shocked: 

Però ho notato che il file  miniperlmain.o non esiste in quella directory, mentre esiste il  miniperlmain.c, ma anche se lancio lo stesso comando su questo mi da cmq seg fault.Last edited by caio on Mon Nov 14, 2005 10:36 am; edited 1 time in total

----------

## makoomba

bingo.

memtest immediato

----------

## caio

 *makoomba wrote:*   

> bingo.
> 
> memtest immediato

 

eh cavolo l'ho fatto abb a lungo proprio la settimana scorsa, senza avere un errore.

Oltretutto compilo anche tutto il resto senza problemi   :Rolling Eyes: 

Cmq ora ritesto il tutto

----------

## caio

Ok, come pensavo non credo che il problema sia legato ad un difetto hardware, poichè ho fatto il memtest per 1ora e 34 minuti senza avere alcun errore

Screen shot memtest

Per escludere eventuali problemi legati al funzionamento in dual channel delle memorie ne ho tolto un banco lasciandone solo 1, ma ho ottenuto comunque lo stesso errore.

Infine per non lasciare nulla di intentato ho provato ad avviare il pc utilizzando un solo banco a 166MHz, il che dovrebbe escludere eventuali problemi legati al malfunzionamento delle memorie, che comunque sono di ottima fattura ( corsair xms 3200XLPRO ), ma ne ho ottenuto lo stesso identico seg. fault.

 :Question:   :Question: 

----------

## randomaze

 *caio wrote:*   

> 
> 
> ```
> sh  cflags "optimize='-O3 -pipe -march=athlon-xp -fomit-frame-pointer'" miniperlmain.o
> ```
> ...

 

Fai i passaggi manualmente e, una volta arrivato a "vedere" il file in questione (cflags) prova a lanciare manualmente con il flag di debug per gli script:

```
sh -x cflags "optimize='-O3 -pipe -march=athlon-xp -fomit-frame-pointer'" miniperlmain.o
```

----------

## caio

 *randomaze wrote:*   

> 
> 
> Fai i passaggi manualmente e, una volta arrivato a "vedere" il file in questione (cflags) prova a lanciare manualmente con il flag di debug per gli script:
> 
> ```
> ...

 

quali passaggi?

Ho provato come prima a recarmi nella dir /var/tmp/portage/perl-5.8.7-r1/work/perl-5.8.7, e da li a lanciare il comando per il debug che mi hai detto tu (il file cflags c'è).

Va in seg. fault dopo pochissimo, ecco l'ultimo passaggio dell'output

```
++ config_arg24=-Di_gdbm

++ config_arg25=-Di_db

++ PERL_REVISION=5

++ PERL_VERSION=8

++ PERL_SUBVERSION=7

++ PERL_API_REVISION=5

++ PERL_API_VERSION=8

++ PERL_API_SUBVERSION=0

++ PERL_PATCHLEVEL=

++ PERL_CONFIG_SH=true

Segmentation fault

```

che sia davvero un problema hardware?

----------

## randomaze

 *caio wrote:*   

> ++ PERL_CONFIG_SH=true
> 
> Segmentation fault

 

Puoi guardare qual'é la riga che segue il settaggio di PERL_CONFIG_SH?

EDIT:

puoi controllare anche l'output dei comandi:

```
$which sh

$ls -l `which sh`

$equery belongs `which sh`
```

----------

## caio

 *randomaze wrote:*   

> 
> 
> Puoi guardare qual'é la riga che segue il settaggio di PERL_CONFIG_SH?

 

ok, a parte il fatto che per qualche strano motivo in tutte le directory temporanee di portage relative a perl (/var/tmp/portage/perl-5.8.7-r1/work/perl-5.8.7) non c'è più nulla   :Shocked:  , sono andato nella directory di libperl (/var/tmp/portage/libperl-5.8.7/work/perl-5.8.7) che comunque mi da lo stesso errore, e questo è ciò che segue PERL_CONFIG_SH nel file cflags:

```

#!/bin/sh

case $PERL_CONFIG_SH in

'')

        if test -f config.sh; then TOP=.;

        elif test -f ../config.sh; then TOP=..;

        elif test -f ../../config.sh; then TOP=../..;

        elif test -f ../../../config.sh; then TOP=../../..;

        elif test -f ../../../../config.sh; then TOP=../../../..;

        else

                echo "Can't find config.sh."; exit 1

        fi

        . $TOP/config.sh

        ;;

esac

: syntax: cflags [optimize=XXX] [file[.suffix]]

: displays the compiler command line for file
```

 *Quote:*   

> EDIT:
> 
> puoi controllare anche l'output dei comandi:
> 
> ```
> ...

 

ok, ecco l'output

```
painkiller perl-5.8.7 # which sh

/bin/sh

```

```
painkiller perl-5.8.7 # ls -l `which sh`

lrwxrwxrwx  1 root root 4 Aug 13 22:21 /bin/sh -> bash
```

```
painkiller perl-5.8.7 # equery belongs `which sh`

[ Searching for file(s) /bin/sh in *... ]

app-shells/bash-3.0-r12 (/bin/sh -> bash)
```

----------

## randomaze

Il binario della shell sembra essere a posto...

 *caio wrote:*   

> 
> 
> ```
> #!/bin/sh
> 
> ...

 

Quello che accade é che il file config.sh viene trovato e viene regolarmante eseguito:

```
. $TOP/config.sh
```

il file config.sh, da me termina con le linee:

```
PERL_API_SUBVERSION=0

PERL_PATCHLEVEL=

PERL_CONFIG_SH=true
```

Ora, non capisco se il segfault avviene al ritorno dal ". $TOP/config.sh", all'uscita del case o quando fa:

```
: syntax: cflags [optimize=XXX] [file[.suffix]]
```

(nota bene, ':' é un comando nullo).

io proverei a mettere un:

```
echo "sono qui"
```

in fondo al file config.sh, uno subito dopo ". $TOP/config.sh" e uno subito prima ": syntax"

Tu non hai messo alias strani sui due punti e/o su esac, vero?

----------

## caio

Ok, anche il mio config.sh è come il tuo.

Ho messo questi echo nel codice in cflags 

```
#!/bin/sh

case $PERL_CONFIG_SH in

'')

        if test -f config.sh; then TOP=.;

        elif test -f ../config.sh; then TOP=..;

        elif test -f ../../config.sh; then TOP=../..;

        elif test -f ../../../config.sh; then TOP=../../..;

        elif test -f ../../../../config.sh; then TOP=../../../..;

        else

                echo "Can't find config.sh."; exit 1

        fi

        . $TOP/config.sh

        echo "sono qui TOP in clags"

        ;;

esac

echo "sono qui prima di sintax"

: syntax: cflags [optimize=XXX] [file[.suffix]]

echo "sono qui subito dopo sintax"

: displays the compiler command line for file

```

e quello che ottengo debuggando l'esecuzione del file è:

```
++ PERL_PATCHLEVEL=

++ PERL_CONFIG_SH=true

++ echo 'sono qui config.sh'

sono qui config.sh

+ echo 'sono qui TOP in clags'

sono qui TOP in clags

+ echo 'sono qui prima di sintax'

sono qui prima di sintax

Segmentation fault

```

per cui va in crash proprio li prima dei : di sintax.

Non ho messo alias strani ne altro...   :Sad: 

EDIT:

ho provando ad eliminare il "syntax:" e non cambia niente.

Invece ho notato che togliendo il [file[.suffix]] non va in segfault.

Ora non so cosa faccia quella stringa (forse aggiunge il suffisso al file?), ma se non è importante quasi quasi la toglierei   :Smile: 

EDIT2:

Sto provando con un altra stecca di ram, diversa dalle altre, con cpu impostata a 166x10, ma va in segfault lo stesso, per cui a questo punto escluderei definitivamente il dubbio problema hardware.

----------

## randomaze

Cosa succede se provi a dare la linea:

```
: syntax: cflags [optimize=XXX] [file[.suffix]]
```

direttamente sulla linea di comando della bash?

 *Quote:*   

> Sto provando con un altra stecca di ram, diversa dalle altre, con cpu impostata a 166x10, ma va in segfault lo stesso, per cui a questo punto escluderei definitivamente il dubbio problema hardware.

 

Concordo pienamente... il problema sembra essere qualche strana impostazione per la bash.

----------

## caio

 *randomaze wrote:*   

> Cosa succede se provi a dare la linea:
> 
> ```
> : syntax: cflags [optimize=XXX] [file[.suffix]]
> ```
> ...

 

Fa una cosa strana...mi chiude la shell.

Infatti se sono connesso come root mi slogga facendomi tornare utente normale, mentre, come in questo caso che sono connesso via ssh, se lo lancio da utente normale, mi chiude la shell e quindi la connessione.

Tutto ciò non avviene invece se dal comando tolgo la parte "[file[.suffix]]", cioè non mi viene restituito alcun output, ma non viene nemmeno chiusa.

----------

## randomaze

 *caio wrote:*   

> Tutto ciò non avviene invece se dal comando tolgo la parte "[file[.suffix]]", cioè non mi viene restituito alcun output, ma non viene nemmeno chiusa.

 

Prova a mettere solo la parentesi quadra aperta.

Anzi, prova a dare il comando:

```
# [ -d /tmp ] && echo $?
```

Nota: "/usr/bin[" dovrebbe essere un eseguibile regolare (oppure é un link a /usr/bin/test)

----------

## caio

 *randomaze wrote:*   

> 
> 
> Anzi, prova a dare il comando:
> 
> ```
> ...

 

Mi restituisce "0".

 *Quote:*   

> 
> 
> Nota: "/usr/bin[" dovrebbe essere un eseguibile regolare (oppure é un link a /usr/bin/test)

 

ma esiste?

io non ho nulla di ciò in usr   :Rolling Eyes: 

----------

## randomaze

 *caio wrote:*   

> ma esiste?
> 
> io non ho nulla di ciò in usr  

 

Beh se il comando di prima di ha detto 0 si esiste... forse é un builtin della bash... a casa controllo!

----------

## caio

capisco......e come mai mi chiude la shell?

Forse è quello il problema?

----------

## randomaze

 *caio wrote:*   

> capisco......e come mai mi chiude la shell?
> 
> Forse è quello il problema?

 

Si, ma continuo a non capire.... se fosse stato un malfunzionamento di quel comando avrebbe dovuto avere lo stesso effetto (e quindi uscire dalla bash)...

Ottieni lo stesso uno zero se usi le doppie parentesi quadre?

```
# [[ -d /tmp ]] && echo $? 
```

e prova anche a lanciare una bash dentro l'altra e a dare il comando che incarta:

```
# bash

# : syntax: cflags [optimize=XXX] [file[.suffix]]
```

vediamo se almeno così dice qualcosa....

----------

## caio

 *randomaze wrote:*   

> 
> 
> Si, ma continuo a non capire.... se fosse stato un malfunzionamento di quel comando avrebbe dovuto avere lo stesso effetto (e quindi uscire dalla bash)...
> 
> Ottieni lo stesso uno zero se usi le doppie parentesi quadre?
> ...

 

Si, sempre uno "0"

 *randomaze wrote:*   

> e prova anche a lanciare una bash dentro l'altra e a dare il comando che incarta:
> 
> ```
> # bash
> 
> ...

 

Ok, il comando manda in segfault il sistema che di conseguenza chiude la shell

```
root@painkiller:~$ : syntax: cflags [optimize=XXX] [file[.suffix]]

Segmentation fault

painkiller ~ #    
```

----------

## randomaze

 *caio wrote:*   

> Ok, il comando manda in segfault il sistema che di conseguenza chiude la shell
> 
> ```
> root@painkiller:~$ : syntax: cflags [optimize=XXX] [file[.suffix]]
> 
> ...

 

Un piccolo passo avanti quindi.

Con quali USE/CFLAGS hai compilato bash?

Quali aggiunte hai fatto a /etc/profile?

Hai provato a riemergerla?

Eventualmente prova anche a usare strace sulla bash:

```
# strace -o bash.log bash

# : syntax: cflags [optimize=XXX] [file[.suffix]]
```

a questo punto il file bash.log dovrebbe contenere le chiamate di sistema... non é sempre comprensibile o leggibile ma alle volte qualcosa si riesce a capire

----------

## caio

[quote="randomaze"] *caio wrote:*   

> 
> 
> Con quali USE/CFLAGS hai compilato bash?

 

Con queste:

```
painkiller ~ # equery uses bash

[ Searching for packages matching bash... ]

[ Colour Code : set unset ]

[ Legend    : Left column  (U) - USE flags from make.conf              ]

[           : Right column (I) - USE flags packages was installed with ]

[ Found these USE variables for app-shells/bash-3.0-r12 ]

 U I

 + + nls        : <unknown>

 - - build      : !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used for creating build images and the first half of bootstrapping.

 - - bashlogger : Log ALL commands typed into bash; should ONLY be used in restricted environments such as honeypots

```

 *Quote:*   

> Quali aggiunte hai fatto a /etc/profile?
> 
> Hai provato a riemergerla? 

 

 :Confused:   :Shocked:   :Surprised:   :Rolling Eyes:   :Exclamation:   :Idea:   :Very Happy:   :Twisted Evil: 

FINALMENTE!!

cazzo va  :Very Happy: 

Evidentemente era la versione della shell che era incompatibile con queste versioni di Perl, dopo averla riemersa la compilazione è andata a buon fine, anche se comunque la versione installata risulta la stessa   :Rolling Eyes: 

Grazie davvero per l'aiuto la pazienza e il tempo che mi avete dedicato, ve ne sono estremamente grato   :Wink: 

P.S. Direi che si può aggiungere un "solved" al titolo   :Smile: 

----------

## randomaze

 *caio wrote:*   

> Evidentemente era la versione della shell che era incompatibile con queste versioni di Perl, dopo averla riemersa la compilazione è andata a buon fine, anche se comunque la versione installata risulta la stessa   

 

Si, é comunque strano. Ma l'importante é aver risolto il problema...

 *Quote:*   

> P.S. Direi che si può aggiungere un "solved" al titolo  

 

Si... per farlo basta che vai nel primo post del thread e premi il bottone "edit". A quel punto puoi modificare anche il subject  :Wink: 

----------

