2012-10-24 5 views
5

Ola tous les gens intelligents. Je suis confronté à un problème que j'essaie de résoudre mais qui échoue. J'essaye d'installer pg gem sur le serveur qui a l'installation d'Omnibus Chef sur ie http://www.opscode.com/chef/install/pg gem ne parvient pas à installer sur omnibus Chef installation

Fondamentalement le problème a été déjà signalé (http://tickets.opscode.com/browse/COOK-1406) mais I ' Je cherche une solution à ce problème s'il y en a - la solution de contournement suggérée pour installer des paquets à partir de repos Opscode Ubuntu - mais ceux qui viennent avec ruby ​​1.8 - J'espère que je ne dois pas continuer plus loin pourquoi je suis réticent à faire :)

l'erreur que je reçois lors de l'installation gem pg est:

$ sudo /opt/chef/embedded/bin/gem install pg 
Building native extensions. This could take a while... 
ERROR: Error installing pg: 
    ERROR: Failed to build gem native extension. 

     /opt/chef/embedded/bin/ruby extconf.rb 
checking for pg_config... yes 
Using config values from /usr/bin/pg_config 
checking for libpq-fe.h... yes 
checking for libpq/libpq-fs.h... yes 
checking for pg_config_manual.h... yes 
checking for PQconnectdb() in -lpq... no 
checking for PQconnectdb() in -llibpq... no 
checking for PQconnectdb() in -lms/libpq... no 
Can't find the PostgreSQL client library (libpq) 
*** extconf.rb failed *** 
Could not create Makefile due to some reason, probably lack of 
necessary libraries and/or headers. Check the mkmf.log file for more 
details. You may need configuration options. 

Provided configuration options: 
    --with-opt-dir 
    --with-opt-include 
    --without-opt-include=${opt-dir}/include 
    --with-opt-lib 
    --without-opt-lib=${opt-dir}/lib 
    --with-make-prog 
    --without-make-prog 
    --srcdir=. 
    --curdir 
    --ruby=/opt/chef/embedded/bin/ruby 
    --with-pg 
    --without-pg 
    --with-pg-dir 
    --without-pg-dir 
    --with-pg-include 
    --without-pg-include=${pg-dir}/include 
    --with-pg-lib 
    --without-pg-lib=${pg-dir}/lib 
    --with-pg-config 
    --without-pg-config 
    --with-pg_config 
    --without-pg_config 
    --with-pqlib 
    --without-pqlib 
    --with-libpqlib 
    --without-libpqlib 
    --with-ms/libpqlib 
    --without-ms/libpqlib 


Gem files will remain installed in /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/pg-0.14.1 for inspection. 
Results logged to /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/pg-0.14.1/ext/gem_make.out 

Défaillant bits dans le mkmf.log est aussi fo ermet:

have_library: checking for PQconnectdb() in -lpq... -------------------- no 

"gcc -o conftest -I/opt/chef/embedded/include/ruby-1.9.1/x86_64-linux -I/opt/chef/embedded/include/ruby-1.9.1/ruby/backward -I/opt/chef/embedded/include/ruby-1.9.1 -I. -I/opt/chef/embedded/include -I/usr/include/postgresql -I/opt/chef/embedded/include -fPIC conftest.c -L. -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L. -Wl,-rpath,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -rdynamic -Wl,-export-dynamic -L/usr/lib  -Wl,-R -Wl,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -lruby -lpq -lpthread -lrt -ldl -lcrypt -lm -lc" 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0' 
collect2: ld returned 1 exit status 
checked program was: 
/* begin */ 
1: #include "ruby.h" 
2: 
3: #include <libpq-fe.h> 
4: 
5: /*top*/ 
6: int main() {return 0;} 
7: int t() { void ((*volatile p)()); p = (void ((*)()))PQconnectdb; return 0; } 
/* end */ 

"gcc -o conftest -I/opt/chef/embedded/include/ruby-1.9.1/x86_64-linux -I/opt/chef/embedded/include/ruby-1.9.1/ruby/backward -I/opt/chef/embedded/include/ruby-1.9.1 -I. -I/opt/chef/embedded/include -I/usr/include/postgresql -I/opt/chef/embedded/include -fPIC conftest.c -L. -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L. -Wl,-rpath,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -rdynamic -Wl,-export-dynamic -L/usr/lib  -Wl,-R -Wl,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -lruby -lpq -lpthread -lrt -ldl -lcrypt -lm -lc" 
conftest.c: In function ‘t’: 
conftest.c:7:1: error: too few arguments to function ‘PQconnectdb’ 
/usr/include/postgresql/libpq-fe.h:243:16: note: declared here 
checked program was: 
/* begin */ 
1: #include "ruby.h" 
2: 
3: #include <libpq-fe.h> 
4: 
5: /*top*/ 
6: int main() {return 0;} 
7: int t() { PQconnectdb(); return 0; } 
/* end */ 

-------------------- 

have_library: checking for PQconnectdb() in -llibpq... -------------------- no 

"gcc -o conftest -I/opt/chef/embedded/include/ruby-1.9.1/x86_64-linux -I/opt/chef/embedded/include/ruby-1.9.1/ruby/backward -I/opt/chef/embedded/include/ruby-1.9.1 -I. -I/opt/chef/embedded/include -I/usr/include/postgresql -I/opt/chef/embedded/include -fPIC conftest.c -L. -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L. -Wl,-rpath,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -rdynamic -Wl,-export-dynamic -L/usr/lib  -Wl,-R -Wl,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -lruby -llibpq -lpthread -lrt -ldl -lcrypt -lm -lc" 
/usr/bin/ld: cannot find -llibpq 
collect2: ld returned 1 exit status 
checked program was: 
/* begin */ 
1: #include "ruby.h" 
2: 
3: #include <libpq-fe.h> 
4: 
5: /*top*/ 
6: int main() {return 0;} 
7: int t() { void ((*volatile p)()); p = (void ((*)()))PQconnectdb; return 0; } 
/* end */ 

"gcc -o conftest -I/opt/chef/embedded/include/ruby-1.9.1/x86_64-linux -I/opt/chef/embedded/include/ruby-1.9.1/ruby/backward -I/opt/chef/embedded/include/ruby-1.9.1 -I. -I/opt/chef/embedded/include -I/usr/include/postgresql -I/opt/chef/embedded/include -fPIC conftest.c -L. -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L. -Wl,-rpath,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -rdynamic -Wl,-export-dynamic -L/usr/lib  -Wl,-R -Wl,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -lruby -llibpq -lpthread -lrt -ldl -lcrypt -lm -lc" 
conftest.c: In function ‘t’: 
conftest.c:7:1: error: too few arguments to function ‘PQconnectdb’ 
/usr/include/postgresql/libpq-fe.h:243:16: note: declared here 
checked program was: 
/* begin */ 
1: #include "ruby.h" 
2: 
3: #include <libpq-fe.h> 
4: 
5: /*top*/ 
6: int main() {return 0;} 
7: int t() { PQconnectdb(); return 0; } 
/* end */ 

-------------------- 

have_library: checking for PQconnectdb() in -lms/libpq... -------------------- no 

"gcc -o conftest -I/opt/chef/embedded/include/ruby-1.9.1/x86_64-linux -I/opt/chef/embedded/include/ruby-1.9.1/ruby/backward -I/opt/chef/embedded/include/ruby-1.9.1 -I. -I/opt/chef/embedded/include -I/usr/include/postgresql -I/opt/chef/embedded/include -fPIC conftest.c -L. -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L. -Wl,-rpath,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -rdynamic -Wl,-export-dynamic -L/usr/lib  -Wl,-R -Wl,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -lruby -lms/libpq -lpthread -lrt -ldl -lcrypt -lm -lc" 
/usr/bin/ld: cannot find -lms/libpq 
collect2: ld returned 1 exit status 
checked program was: 
/* begin */ 
1: #include "ruby.h" 
2: 
3: #include <libpq-fe.h> 
4: 
5: /*top*/ 
6: int main() {return 0;} 
7: int t() { void ((*volatile p)()); p = (void ((*)()))PQconnectdb; return 0; } 
/* end */ 

"gcc -o conftest -I/opt/chef/embedded/include/ruby-1.9.1/x86_64-linux -I/opt/chef/embedded/include/ruby-1.9.1/ruby/backward -I/opt/chef/embedded/include/ruby-1.9.1 -I. -I/opt/chef/embedded/include -I/usr/include/postgresql -I/opt/chef/embedded/include -fPIC conftest.c -L. -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L. -Wl,-rpath,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -rdynamic -Wl,-export-dynamic -L/usr/lib  -Wl,-R -Wl,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -lruby -lms/libpq -lpthread -lrt -ldl -lcrypt -lm -lc" 
conftest.c: In function ‘t’: 
conftest.c:7:1: error: too few arguments to function ‘PQconnectdb’ 
/usr/include/postgresql/libpq-fe.h:243:16: note: declared here 
checked program was: 
/* begin */ 
1: #include "ruby.h" 
2: 
3: #include <libpq-fe.h> 
4: 
5: /*top*/ 
6: int main() {return 0;} 
7: int t() { PQconnectdb(); return 0; } 
/* end */ 

-------------------- 

Je pense que le problème est que gem pg est lié à une autre lib que celui postgresql a été construite contre et la compilation échoue. Je me demande simplement s'il y a quelque chose que je pourrais faire pour contourner cela? Des esprits brillants? Bravo

Répondre

3

J'ai réussi à obtenir l'installation de pg gem en téléchargeant la source postgresql et en la compilant en compilant les bibliothèques dans/opt/chef/embedded. Ce n'est pas optimale, mais il devrait fonctionner (mise en garde: Je ne l'ai pas essayé dans une recette ou d'un programme de rubis):

apt-get install -y build-essential 
apt-get build-dep -y postgresql 
wget http://ftp.postgresql.org/pub/source/v9.2.1/postgresql-9.2.1.tar.gz 
tar -zxvf postgresql-9.2.1.tar.gz 
cd postgresql-9.2.1 
export MAJOR_VER=9.2 
./configure \ 
    --prefix=/opt/chef/embedded \ 
    --mandir=/opt/chef/embedded/share/postgresql/${MAJOR_VER}/man \ 
    --docdir=/opt/chef/embedded/share/doc/postgresql-doc-${MAJOR_VER} \ 
    --sysconfdir=/etc/postgresql-common \ 
    --datarootdir=/opt/chef/embedded/share/ \ 
    --datadir=/opt/chef/embedded/share/postgresql/${MAJOR_VER} \ 
    --bindir=/opt/chef/embedded/lib/postgresql/${MAJOR_VER}/bin \ 
    --libdir=/opt/chef/embedded/lib/ \ 
    --libexecdir=/opt/chef/embedded/lib/postgresql/ \ 
    --includedir=/opt/chef/embedded/include/postgresql/ \ 
    --enable-nls \ 
    --enable-integer-datetimes \ 
    --enable-thread-safety \ 
    --enable-debug \ 
    --with-gnu-ld \ 
    --with-pgport=5432 \ 
    --with-openssl \ 
    --with-libedit-preferred \ 
    --with-includes=/opt/chef/embedded/include \ 
    --with-libs=/opt/chef/embedded/lib 
make 
sudo make install 
sudo /opt/chef/embedded/bin/gem install pg -- --with-pg-config=/opt/chef/embedded/lib/postgresql/9.2/bin/pg_config 

https://gist.github.com/3954641

+0

C'est ce que nous avons fini par faire. Mais nous n'aimons pas cela pour 2 raisons: 1.) chaque mise à niveau de Postgres signifie recompiler 2.) obtenir ce travail dans le livre de cuisine de postgres exigerait beaucoup de changements et gâcherait généralement des choses. Néanmoins, merci pour votre réponse – gyre

+0

Oui, c'est totalement sous-optimal. C'est seulement un problème si vous voulez utiliser la gem pg dans Chef, comme dans les ressources de base de données de Opscode pour la gestion de bases de données et d'utilisateurs postgresql. Si vous utilisez pg seulement dans votre application, ce n'est pas nécessaire, il suffit d'installer la gemme sous le Ruby votre application utilise (nous ne recommandons pas le Ruby dans le paquet omnibus). – jtimberman

+0

Autrement dit, nous ne recommandons pas le rubis du chef pour votre application, seulement pour le chef :-). – jtimberman

1

Essayez d'ajouter « -lssl -lcrypto » lors de la compilation. Cela a fonctionné pour moi lors de la compilation des applications openssl

Questions connexes