2012-10-24 11 views
5

Ola wszystkich mądrych ludzi. Mam do czynienia z problemem, który próbuję rozwiązać, ale się nie uda. Próbuję zainstalować pg gem na serwerze, na którym zainstalowano Omnibus Chef na to: http://www.opscode.com/chef/install/pg gem nie instaluje się na omnibusie Instalacja Chef

Zasadniczo problem został już zgłoszony (http://tickets.opscode.com/browse/COOK-1406), ale ja ' Poszukuję rozwiązania tego problemu, jeśli jest jakakolwiek - obejście sugeruje instalację pakietów z repozytoriów Ubuntu w Opscode - ale te pochodzą z ruby ​​1.8 - mam nadzieję, że nie będę musiał kontynuować dalej, dlatego czuję niechęć do tego :)

błąd dostaję podczas instalowania gem pG:

$ 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 

błąd bitów w mkmf.log jest fo llows:

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 */ 

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

Myślę, że problemem jest to, że pg gem jest związany przeciwko innym lib niż jeden PostgreSQL został zbudowany przed i kompilacji zawiedzie. Zastanawiam się tylko, czy jest coś, co mógłbym zrobić, aby obejść ten problem? Jakieś niesamowite umysły? Pozdrowienia

Odpowiedz

3

Udało mi się zdobyć pg gem do zainstalowania, pobierając źródło postgresql i kompilując je przez budowanie vs bibliotek w/opt/chef/embedded. To nie jest optymalna, ale to powinno działać (uwaga: nie próbowałem go w recepturze lub programu rubinowy):

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

Tak właśnie zrobiliśmy. Ale nie podoba nam się to z dwóch powodów: 1.) każda aktualizacja Postgres oznacza rekompilację 2.) uruchomienie tej pracy w książce kucharskiej postgres wymagałoby wielu zmian i ogólnie rzecz biorąc pomogło. Mimo to dziękuję za odpowiedź. – gyre

+0

Tak, jest całkowicie nieoptymalna. Jest to tylko problem, jeśli chcesz używać gem pg w Chef, np. W bazie książek kucharskich bazy danych Postscresql i zarządzania użytkownikami. Jeśli używasz PG tylko w swojej aplikacji, nie jest to wymagane, po prostu zainstaluj klejnot pod Ruby, z której korzysta twoja aplikacja (nie zalecamy Rubiego w pakiecie zbiorczym). – jtimberman

+0

Oznacza to, że nie polecamy rubinu szefa kuchni dla twojej aplikacji, tylko dla szefa kuchni :-). – jtimberman

1

spróbuj dodać „-lssl -lcrypto” podczas kompilacji. To zadziałało dla mnie podczas kompilowania aplikacji opartych na openssl

Powiązane problemy