Esta semana tocó realizar una compilación de Percona Server para RedHat. Hay ocasiones en las que es necesarios realizar una compilación local, ya bien sea por rendimiento, ya bien por que el cliente quiera que todos los paquetes sean locales y no vengan precompilados de otro lado.
Por suerte, Percona ofrece para descarga directa la última versión disponible en formato src.rpm, por lo que tras instalar todas las dependencias se podría realizar sin problema un rpmbuild --rebuild. La sorpresa fue que la compilación no es tan sencilla, ya que había varios fallos.
El primero de los fallos ocurrió al compilar el HandlerSocket-Plugin-for-MySQL. RedHat trae por defecto la versión 5.1 de MySQL y cuando el HandlerSocket requería las librerías, estas no servían y por ello fallaba. Para solucionarlo, bastó con desinstalar todas las librerías de MySQL del sistema y que para la compilación cogiera las que él mismo estaba compilando. Con esto, HandlerSocket ya compiló perfectamente.
El error al que se hace referencia es el que sigue.
libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I/home/javier/rpmbuild/BUILD/Percona-Server-5.5.16-rel22.0/Percona-Server-5.5.16-rel22.0/sql -I/home/javier/rpmbuild/BUILD/Percona-Server-5.5.16-rel22.0/Percona-Server-5.5.16-rel22.0/include -I/home/javier/rpmbuild/BUILD/Percona-Server-5.5.16-rel22.0/Percona-Server-5.5.16-rel22.0/regex -I/home/javier/rpmbuild/BUILD/Percona-Server-5.5.16-rel22.0/Percona-Server-5.5.16-rel22.0 -I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -fPIC -g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -DMY_PTHREAD_FASTMUTEX=1 -DDBUG_OFF -I../libhsclient -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -felide-constructors -fno-exceptions -fno-rtti -I/home/javier/rpmbuild/BUILD/Percona-Server-5.5.16-rel22.0/release/include -Wall -g -fno-rtti -fno-exceptions -fPIC -DPIC -MT handlersocket_la-database.lo -MD -MP -MF .deps/handlersocket_la-database.Tpo -c database.cpp -fPIC -DPIC -o .libs/handlersocket_la-database.o In file included from database.cpp:16: mysql_incl.hpp:43:24: error: mysql_priv.h: No such file or directory database.cpp:99: error: ISO C++ forbids declaration of 'TABLE' with no type database.cpp:99: error: expected ';' before '*' token database.cpp: In constructor 'dena::tablevec_entry::tablevec_entry()': database.cpp:102: error: class 'dena::tablevec_entry' does not have any field named 'table' database.cpp: At global scope: database.cpp:106: error: expected ')' before '*' token database.cpp:124: error: 'Item_string' does not name a type database.cpp:125: error: 'Item_int' does not name a type database.cpp:126: error: 'Item_func_get_lock' does not name a type database.cpp:127: error: 'Item_func_release_lock' does not name a type database.cpp: In member function 'long long int dena::expr_user_lock::get_lock()': database.cpp:118: error: 'lck_func_get_lock' was not declared in this scope database.cpp: In member function 'long long int dena::expr_user_lock::release_lock()': database.cpp:121: error: 'lck_func_release_lock' was not declared in this scope database.cpp: At global scope: database.cpp:150: error: 'TABLE' has not been declared database.cpp:157: error: 'ha_rkey_function' has not been declared database.cpp:158: error: 'TABLE' has not been declared database.cpp:160: error: 'TABLE' has not been declared database.cpp:161: error: 'uchar' has not been declared database.cpp:162: error: 'TABLE' has not been declared database.cpp:163: error: ISO C++ forbids declaration of 'uchar' with no type database.cpp:163: error: expected ',' or '...' before '*' token database.cpp:164: error: 'TABLE' has not been declared database.cpp:165: error: 'TABLE' has not been declared database.cpp:166: error: 'TABLE' has not been declared database.cpp:176: error: ISO C++ forbids declaration of 'THD' with no type database.cpp:176: error: expected ';' before '*' token database.cpp:177: error: ISO C++ forbids declaration of 'MYSQL_LOCK' with no type database.cpp:177: error: expected ';' before '*' token database.cpp: In constructor 'dena::dbcontext::dbcontext(volatile dena::database*, bool)': database.cpp:222: error: class 'dena::dbcontext' does not have any field named 'thd' database.cpp:222: error: class 'dena::dbcontext' does not have any field named 'lock' database.cpp: At global scope: database.cpp:237: error: 'THD' was not declared in this scope database.cpp:237: error: 'thd' was not declared in this scope database.cpp:237: error: expected primary-expression before 'volatile' database.cpp:237: error: initializer expression list treated as compound expression database.cpp:238: error: expected ',' or ';' before '{' token database.cpp:1182: error: expected '}' at end of input database.cpp:1182: error: expected '}' at end of input database.cpp:237: warning: 'dena::::wait_server_to_start' defined but not used make[2]: *** [handlersocket_la-database.lo] Error 1 make[2]: Leaving directory `/home/javier/rpmbuild/BUILD/Percona-Server-5.5.16-rel22.0/Percona-Server-5.5.16-rel22.0/storage/HandlerSocket-Plugin-for-MySQL/handlersocket' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/javier/rpmbuild/BUILD/Percona-Server-5.5.16-rel22.0/Percona-Server-5.5.16-rel22.0/storage/HandlerSocket-Plugin-for-MySQL' make: *** [all] Error 2 error: Bad exit status from /var/tmp/rpm-tmp.fEHBlk (%build)
Una vez solucionado este problema, parece que ya todo estaba solucionado, por lo tanto intentamos nuevamente compilar Percona-Server.
shell> rpmbuild -ba \ --clean \ --with yassl --target x86_64 \ --define "gotrevision 1" \ percona-server-5.5.19.spec
Con esto, obtenemos un nuevo error, por ser un sistema de 64 Bit's.
Processing files: Percona-Server-devel-55-5.5.17-rel22.1.1.rhel6.x86_64
error: File not found: ~/rpmbuild/BUILDROOT/Percona-Server-55-5.5.17-rel22.1.1.rhel6.x86_64/usr/include/handlersocket
error: File not found: ~/rpmbuild/BUILDROOT/Percona-Server-55-5.5.17-rel22.1.1.rhel6.x86_64/usr/lib64/mysql/libmysqlclient.a
error: File not found: ~/rpmbuild/BUILDROOT/Percona-Server-55-5.5.17-rel22.1.1.rhel6.x86_64/usr/lib64/mysql/libmysqlclient_r.a
error: File not found: ~/rpmbuild/BUILDROOT/Percona-Server-55-5.5.17-rel22.1.1.rhel6.x86_64/usr/lib64/mysql/libmysqlservices.a
error: File not found: ~/rpmbuild/BUILDROOT/Percona-Server-55-5.5.17-rel22.1.1.rhel6.x86_64/usr/lib64/mysql/libhsclient.a
error: File not found: ~/rpmbuild/BUILDROOT/Percona-Server-55-5.5.17-rel22.1.1.rhel6.x86_64/usr/lib64/libhsclient.la
RPM build errors:
File not found: ~/rpmbuild/BUILDROOT/Percona-Server-55-5.5.17-rel22.1.1.rhel6.x86_64/usr/include/handlersocket
File not found: ~/rpmbuild/BUILDROOT/Percona-Server-55-5.5.17-rel22.1.1.rhel6.x86_64/usr/lib64/mysql/libmysqlclient.a
File not found: ~/rpmbuild/BUILDROOT/Percona-Server-55-5.5.17-rel22.1.1.rhel6.x86_64/usr/lib64/mysql/libmysqlclient_r.a
File not found: ~/rpmbuild/BUILDROOT/Percona-Server-55-5.5.17-rel22.1.1.rhel6.x86_64/usr/lib64/mysql/libmysqlservices.a
File not found: ~/rpmbuild/BUILDROOT/Percona-Server-55-5.5.17-rel22.1.1.rhel6.x86_64/usr/lib64/mysql/libhsclient.a
File not found: ~rpmbuild/BUILDROOT/Percona-Server-55-5.5.17-rel22.1.1.rhel6.x86_64/usr/lib64/libhsclient.la
Para solucionarlo, añadimos más parámetros al rpmbuild, tal como sigue y la compilación ya es satisfactoria.
shell> rpmbuild -ba \ --clean \ --with yassl \ --target x86_64 \ --define "redhat_version 15" \ --define "gotrevision 1" \ --define "_libdir /usr/lib" \ percona-server-5.5.19.spec
No hay comentarios :
Publicar un comentario