Instalar Firebird 2.xx sobre RaspBerry
Saludos …
Hace un tiempo realizamos una pequeña aplicación en Python sobre una Raspberry Pi con firebird en linux. El servidor está montado en Windows con una versión de Firebird 2.1. En su día, cuando instalamos el paquete de firebird en la Raspberry con el comando Código:
Pip install fdb El caso es que ahora, cuando intentamos reinstalar el firebird en un dispositivo nuevo con el mismo comando, nos instala la versión 3.0 de firebird y algunas consultas nos devuelven errores. Alguien conoce la forma de poder instalar una versión 2.xx de firebird en una ReapBerry Pi?? Gracias y saludos a todos |
Supongo que necesitarás instalar la versión correspondiente de libfbclient2, pero debe ser siempre la misma versión de cliente que la del servidor. No mezcles versiones.
|
En si pip install fdb no te instala libfbclient2 ese lo tienes que instalar vía
apt-get install libfbclient2 Por lo que se me hace raro que digas que te instala la versión 3.0. Con fdb puedes acceder a los 2.1, 2.5,3.0 dependiendo de la librería libfbclient2.so que esté instalada en tu sistema. La última versión de armbian viene con la versión 2.5.4 de libfbclient2 En la raspberry pi puedes ver de que versión dispones ejecutando el siguiente comando apt-cache show libfbclient2 Si algunas consultas devuelven errores ha de ser por otra razón, y las pistas te las van a dar el tipo de consultas que te regresen el error. No conozco firebird, pero por lo poco que acabo de leer maneja 3 dialectos sql, ¿Podría ser ese el problema?. Por defecto la función connect pone el parámetro sql_dialect=3, prueba cambiando ese parámetro a 1. |
Cita:
Por supuesto, al igual que el cliente debe ser la misma versión que el servidor, también sql_dialect debe ser el mismo que la base de datos. |
Gracias compañeros por vuestra ayuda....Problema resuleto
Casimiro. Teníamos versiones diferentes en el cliente y en el servidor... y por tanto, problemas como bien comentas. tsk Efectivamente, la foma correcta de instalar el cliente era: Código:
apt-get install libfbclient2 Tenemos 60 raspberry atacando una base de datos Firebird. Alguien tiene experiencia en este tipo de instalaciones?? |
En primera instancia no le veo problema en que 60 raspberry pi hagan transacciones a la base de datos, por lo general todas ellas no se hacen al mismo tiempo, a menos que la forma en que se conectan tenga periodicidad, por lo que tendrías que preguntar cuantas transacciones por segundo puede manejar Firebird,y creo que esa respuesta te la puedan dar aquí.
Otro aspecto es si estás buscando mostrar los datos provenientes de las Raspberry Pi, a uno o varios clientes, en tiempo real. |
Cita:
|
Cita:
|
Cita:
|
Efectivamente, las transacciones de los terminales no son continuas y consideramos que con firebird no vamos a tener problemas en lo que respecta a BD.
Otra cosa será la fiabilidad de los terminales Raspberry. El idea surgió hace un tiempo cuando nos propusieron desarrollar el software necesario para la puesta en marcha de un nuevo proyecto relacionado con la venta al mayor en almacenes de fruta y verdura. Es un nuevo sistema autoservicio patentado del cual os dejo un enlace por si alguien le quiere echar un vistazo… Considero que no es publicidad, es la presentación que nos hicieron del proyecto en su día. https://vimeo.com/156380116 Saludos.... |
He visto variaciones del mismo tipo de sistema a varios niveles, así que no se que tan patentable sea, más si aun no saben como se cuecen las habas.
¿Raspberry Pi Confiable? Al mismo grado que puede ser una computadora. ¿Lo haría con una Raspberry Pi? Definitivamente respondería con un No rotundo, porque es como ir a cazar patos a cañonazos. Hablan de reducir gastos, pero planean gastar bastantes euros tan sólo en las raspberry pi. Piensa en lo siguiente: 1.- El sistema requiere Galgas para obtener el peso, por lo general las galgas son analógicas, pero el Raspberry Pi no cuenta con conversor analógico a digital, por lo que tendrían que adquirir uno que se comunique por medio de i2c o spi y de preferencia uno que tenga los drivers en el kernel de Linux. Ya ese es un gasto extra a lo contemplado inicialmente, Ahí ya son por lo menos unos 3 a 4 euros más, pero se puede incrementar a más de 20, dependiendo de los requerimientos. Aunque esto se puede diluir, en parte, cuando usan una escala por USB. 2.- Consumo Energético. Estamos hablando de estar conectados las 24 horas del día, son por lo menos alrededor de 29Watts por día tan sólo del RPi. Parece poco pero si juntas 60 de ellos son 1.7KWatt por día, cuando el usar otras opciones podría dar tan sólo una fracción de ese consumo. 3.- Estamos hablando de un Sistema Operativo instalado en una memoria micro SD y un sistema de ficheros, que como cualquier otro, se puede corromper. Las NAND Flash pueden generar bloques defectuosos más fácilmente que las NOR Flash. Si es un sistema que debe de permanecer sin ningún tipo de mantenimiento por años y que esté funcionando las 24 horas del día esto es algo a tomar en cuenta. También no es lo mismo el consumo de una memoria micro SD a una memoria NOR Flash que va por SPI. 4.- Si falla algo, lo más seguro es que tener otro Raspberry Pi de respaldo como FailSafe aumentaría el costo del sistema, además de incrementar el consumo energético (bueno si están pensando en un uso sin interrupciones). 5.- Tipo de comunicación y los costos asociados por su consumo energético. No es lo mismo a usar lo que comúnmente conocemos como Wifi a usar otro método también inalámbrico como lo pudiera ser con el nrf24l01 que consume menos potencia, es más económico y además tiene mayor cobertura, por lo que en almacenes grandes reduces la cantidad de repetidores. Y cabe mencionar que no es la única forma de hacerlo. 6.- ¿Que tanto necesita un control en tiempo real de las variables como temperatura, humedad, etc.? Mencionan que puede escalar a miles de establecimientos en todo el mundo, pero no está implícito si el software será local o ellos lo controlaran de forma global. De ahí la diferencia entre generar un arquitectura usando una base de datos central con Firebird, a usar protocolos que están pensados para ser ligeros y escalar a miles (sino es que millones) de conexiones concurrentes y con baja latencia. También implica la integración del sistema a sistemas previos que el cliente ya tenga (ERPs), o piensan crear su propio ERP y hacerlos migrar. Lo más cuerdo es dejarlo genérico y no tratar de monopolizar y forzar a que cambien el sistema. Aquí me imagino su integración con ERPs como Odoo. Saludos. |
Muchas gracias tsk por tus apreciaciones y perdona por el retraso en contestarte.
En cuanto a lo de “pantentable”, no sabría que decirte. Es lo que dice el cliente y se explica en el video. No entro en si hay sistemas similares ya funcionando. La instalación que tenemos ahora en funcionamiento es un prototipo y no se descartan cambios en función de su resultado. Ahora, la conexión de red está cableada y la conexión con las básculas es a través de un puerto serie. Tomo nota de alguno de tus comentarios que me han parecido muy interesantes. Gracias de nuevo por la ayuda … |
A lo que me refiero es que muchas veces patentan cosas como "Método para venta y re abastecimiento de productos en anaqueles y exhibidores" pero todos manejan el mismo principio de funcionamiento y la misma metodología, donde llega el cliente, se sirve sólo y paga. Esto lo vemos aplicado mucho en tiendas en línea como amazon, donde vía web tu te sirves, pagas y hay robots que llevan los artículos de tu pedido para el área de empaque. También he visto anaqueles de supermercado que le indican a la persona encargada, la cantidad de producto en el anaquel y cuando re surtir. Otro ejemplo que vi fue de un proyecto de un bar, donde usando pulseras vas y te sirves las bebidas de forma automática, te lleva el conteo de lo que has bebido y al final pagas.
Probablemente sea porque veo las cosas de una forma muy general que me parece lo mismo pero con distinto maquillaje, donde el mismo concepto lo puedo aplicar a infinidad de cosas. Recuerdo hace tiempo, que intentaron hacer que firmara un NDA para un proyecto en el que el planteamiento era tan escueto, que con sólo leer que querían que el sistema fuera confiable, a prueba de fallos ya me estaban dando todo lo necesario para que lo que hiciera pasara a ser parte de su propiedad intelectual. No tenían ni la menor idea como hacer un sistema de ese tipo, pero la idea de que fuera confiable y a prueba de fallos era completamente de ellos, como si el concepto no existiera antes que ellos y no pudiera existir sin ellos. Muy distinto es cuando te dicen quiero (requerimientos) a cuando te dicen como hacerlo (especificaciones). ¿Entonces cual propiedad intelectual se está poniendo al servicio de la "propiedad intelectual" de otro? Saludos. |
Hola, disculpas que vuelvo sobre este tema. Capaz alguno pueda ayudarme. Tengo una aplicación con bases de datos Firebird 2.1 en un servidor y Raspberries que funcionan como terminales de captura de datos que envían por red al servidor. Debe existir la posibilidad de que ante una caída de conexión con el servidor, caída de red, o caída del servidor, la Raspberry funcione localmente contra una base de datos local hasta que se recupere la conexión, y luego cuando se restablece la conexión traslade la data local al servidor.
El problema es que desde los repositorios de Raspbian: En Raspberry Pi3B solo está disponible el motor de base de datos Firebird 2.1/2.5 En Raspberry Pi3B+ y Raspberry Pi4 solo puede instalarse el motor Firebird 3.0 Preferiría no tener que llevar todo a Firebird 3.0, por un lado porque ya tengo muchas RBPi3B instaladas, y además tendría que rehacer todas las aplicaciones administrativas y de las terminales llevando todo a Firebird 3.0 cuando hoy todo anda de maravillas con Firebird 2.1/2.5 La consulta es: hay alguna manera de bajar el instalador del motor Firebird 2.1/2.5 para instalarlo "a mano" en una RaspberrypI3B+ ?? Gracias de antemano. |
Disculpa BlackPrince, pero hay algo que se me escapa:
¿Porqué la necesidad de instalar Firebird3.0? ¿No puedes continuar con las Pi3B? ¿Con que tienes programada la aplicación cliente que corre sobre los terminales? ¿Como te planteas guardar los datos en local cuando pierdas la conexión con el servidor? |
Hola manelb, gracias por responder. La necesidad es que tengo que instalar un motor de base de datos local en la Raspberry. Esto es posible, pero sucede que en las RaspberryPi3B desde el repositorio está disponible solamente la versión 2.1 o 2.5 de Firebird. Mientras que en las Raspberry Pi3B+ y 4, solamente está disponible Firebird 3.0.
Justamente mi consulta es si habrá una manera de bajar de algun lado un instalador del motor Firebird 2.5 para instalarlo en Raspberry Pi3B+ o Pi4. Mi aplicación está instalada en varios clientes donde hay diversidad de Raspberrys modelos 3B y 3B+. Hasta ahora todo anda de maravillas porque la base de datos es única y está en un servidor, y es una Firebird 2.1, y en todas las Raspi es posible instalar el cliente libfbclient2 para acceder a una base externa. El problema es cuando quiero instalar un motor local. No están todas las versiones disponibles, vuelvo a decir. Si uno hace "sudo apt-cache firebird" desde una RBPi3B te trae los motores 2.1 y 2.5, y desde una RBPi3B+ o RBPi4 te mestra que solo está disponible Firebird3.0, La aplicación de las terminales está desarrollada en Lazarus. Ya he probado usar los componentes de sqldb y zeos satisfactoriamente para acceder a datos tanto de bases de datos locales como remotas. También he probado acceder desde un servidor a las bases locales de cada raspberry, no hay problemas por ese lado... El sistema trabaja con dos bases de datos, una de configuración y otra de producción. La de configuración dice lo que debe ejecutarse en cada terminal, y la de producción mantiene solo registros de trazabilidad de todas las operaciones hechas en las terminales. La idea es tener replicas de las bases de datos de configuración del sistema en cada raspberry, que se mantendrían actualizadas/sincronizadas con la base de datos maestra del servidor, de eso se encargaría una aplicación que correría en el servidor. En cuanto se cayera el servidor, el sistema detectaría la perdida de conexión y le pregunta al operador si desea seguir trabajando en modo local, entonces mientras dure la pérdida de conexión, los datos de producción se grabarían localmente como instrucciones pendientes de ejecución. Las aplicaciones de administración del sistema y la del servidor de momento están hechas en Delphi6, y estaría planeando migrarlas a Lazarus. |
En teoría, la descargas de firebirdsql.org y la instalas.
|
Hola Casimiro. Lo único que veo disponible para ARM es la versión Firebird3.0. Alguien podría decirme cómo encontrar en el sitio de firebird la versión 2.1 o 2.5 para Raspbian? Gracias
|
Cita:
De todas formas, seguramente puedas descargarlo o extraerlo de una imagen iso debian para la raspberry. Creo recordar que en la web de debian estaban todas las versiones. |
Y si lo compilas?
Código:
git clone https://github.com/FirebirdSQL/firebird.git De esta forma para tu aplicación sería transparente el acceso a la base de datos. |
Hola, gracias por colaborar. Les cuento lo último que descubrí. En la RBPi3B tengo un Raspbian Jessie, desde ahí está disponible para instalar de repositorios el Firebird2.1 y 2.5. En las RBPi3B+ tengo Raspian Stretch, y desde ahí solo se puede instalar Firebird 3.0 de repositorios. Por lo tanto el problema es de OS. Entonces quise correr un Raspbian Jessie en una Raspi3B+, con una SD con el OS original Jessie pero el hardware no la reconoce... no bootea.
Seguí las instrucciones de tsk y obtuve los siguientes resultados (con errores): pi@raspberrypi:~ $ git clone blablabla (no me deja poner el link) Cloning into 'firebird'... remote: Enumerating objects: 22, done. remote: Counting objects: 100% (22/22), done. remote: Compressing objects: 100% (19/19), done. remote: Total 445106 (delta 9), reused 9 (delta 3), pack-reused 445084 Receiving objects: 100% (445106/445106), 146.45 MiB | 308.00 KiB/s, done. Resolving deltas: 100% (371078/371078), done. Checking out files: 100% (3130/3130), done. pi@raspberrypi:~ $ cd firebird pi@raspberrypi:~/firebird $ git checkout origin/B2_5_Release Checking out files: 100% (5710/5710), done. Note: checking out 'origin/B2_5_Release'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at b7bbaa70a7... increment build number pi@raspberrypi:~/firebird $ ./autogen.sh AUTORECONF=autoreconf **Warning**: I am going to run `configure' with no arguments. If you wish to pass any to it, please specify them on the `./autogen.sh' command line. Running autoreconf ... autoreconf: Entering directory `.' autoreconf: configure.in: not using Gettext autoreconf: running: aclocal -I . --force aclocal: warning: autoconf input should be named 'configure.ac', not 'configure.in' autoreconf: configure.in: tracing autoreconf: running: libtoolize --copy --force libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'builds/make.new/config'. libtoolize: copying file 'builds/make.new/config/ltmain.sh' libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'. libtoolize: copying file 'm4/libtool.m4' libtoolize: copying file 'm4/ltoptions.m4' libtoolize: copying file 'm4/ltsugar.m4' libtoolize: copying file 'm4/ltversion.m4' libtoolize: copying file 'm4/lt~obsolete.m4' libtoolize: Consider adding '-I m4' to ACLOCAL_AMFLAGS in Makefile.am. aclocal: warning: autoconf input should be named 'configure.ac', not 'configure.in' autoreconf: running: /usr/bin/autoconf --force autoreconf: running: /usr/bin/autoheader --force autoreconf: configure.in: not using Automake autoreconf: Leaving directory `.' Re-running libtoolize ... libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'builds/make.new/config'. libtoolize: copying file 'builds/make.new/config/config.guess' libtoolize: copying file 'builds/make.new/config/config.sub' libtoolize: copying file 'builds/make.new/config/install-sh' libtoolize: copying file 'builds/make.new/config/ltmain.sh' libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'. libtoolize: copying file 'm4/libtool.m4' libtoolize: copying file 'm4/ltoptions.m4' libtoolize: copying file 'm4/ltsugar.m4' libtoolize: copying file 'm4/ltversion.m4' libtoolize: copying file 'm4/lt~obsolete.m4' libtoolize: Consider adding '-I m4' to ACLOCAL_AMFLAGS in Makefile.am. Running ./configure ... checking whether make sets $(MAKE)... yes checking build system type... armv7l-unknown-linux-gnueabihf checking host system type... armv7l-unknown-linux-gnueabihf checking target system type... armv7l-unknown-linux-gnueabihf checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for /proc/self/maps... yes checking whether everything is installed to the same prefix... no checking whether binary relocation support should be enabled... no checking for the pthreads library -lpthreads... no checking whether pthreads work without any flags... no checking whether pthreads work with -Kthread... no checking whether pthreads work with -kthread... no checking for the pthreads library -llthread... no checking whether pthreads work with -pthread... yes checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE checking if more special flags are required for pthreads... no checking for cc_r... gcc checking for readline in -ledit... no checking for readline in -leditline... no checking for readline in -lreadline... no configure: WARNING: --with-system-editline specified, not found. Using bundled editline checking for gawk... gawk checking for gcc option to accept ISO C99... none needed checking for gcc option to accept ISO Standard C... (cached) none needed checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking whether gcc needs -traditional... no checking for g++... g++ checking whether we are using the GNU C++ compiler... yes checking whether g++ accepts -g... yes checking how to run the C preprocessor... gcc -E checking for a BSD-compatible install... /usr/bin/install -c checking whether ln -s works... yes checking whether make sets $(MAKE)... (cached) yes checking how to print strings... printf checking for a sed that does not truncate output... /bin/sed checking for fgrep... /bin/grep -F checking for ld used by gcc... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B checking the name lister (/usr/bin/nm -B) interface... BSD nm checking the maximum length of command line arguments... 1572864 checking how to convert armv7l-unknown-linux-gnueabihf file names to armv7l-unknown-linux-gnueabihf format... func_convert_file_noop checking how to convert armv7l-unknown-linux-gnueabihf file names to toolchain format... func_convert_file_noop checking for /usr/bin/ld option to reload object files... -r checking for objdump... objdump checking how to recognize dependent libraries... pass_all checking for dlltool... dlltool checking how to associate runtime and link libraries... printf %s\n checking for ar... ar checking for archiver @FILE support... @ checking for strip... strip checking for ranlib... ranlib checking command to parse /usr/bin/nm -B output from gcc object... ok checking for sysroot... no checking for a working dd... /bin/dd checking how to truncate binary pipes... /bin/dd bs=4096 count=1 checking for mt... mt checking if mt is a manifest tool... no checking for ANSI C header files... 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... yes checking for dlfcn.h... yes checking for objdir... .libs checking if gcc supports -fno-rtti -fno-exceptions... no checking for gcc option to produce PIC... -fPIC -DPIC checking if gcc PIC flag -fPIC -DPIC works... yes checking if gcc static flag -static works... yes checking if gcc supports -c -o file.o... yes checking if gcc supports -c -o file.o... (cached) yes checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes checking whether -lc should be explicitly linked in... no checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking for shl_load... no checking for shl_load in -ldld... no checking for dlopen... no checking for dlopen in -ldl... yes checking whether a program can dlopen itself... yes checking whether a statically linked program can dlopen itself... no checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes checking how to run the C++ preprocessor... g++ -E checking for ld used by g++... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes checking for g++ option to produce PIC... -fPIC -DPIC checking if g++ PIC flag -fPIC -DPIC works... yes checking if g++ static flag -static works... yes checking if g++ supports -c -o file.o... yes checking if g++ supports -c -o file.o... (cached) yes checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes checking dynamic linker characteristics... (cached) GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking for dirent.h that defines DIR... yes checking for library containing opendir... none required checking for ANSI C header files... (cached) yes checking for sys/wait.h that is POSIX.1 compatible... yes checking assert.h usability... yes checking assert.h presence... yes checking for assert.h... yes checking ctype.h usability... yes checking ctype.h presence... yes checking for ctype.h... yes checking errno.h usability... yes checking errno.h presence... yes checking for errno.h... yes checking fcntl.h usability... yes checking fcntl.h presence... yes checking for fcntl.h... yes checking grp.h usability... yes checking grp.h presence... yes checking for grp.h... yes checking pwd.h usability... yes checking pwd.h presence... yes checking for pwd.h... yes checking libio.h usability... yes checking libio.h presence... yes checking for libio.h... yes checking locale.h usability... yes checking locale.h presence... yes checking for locale.h... yes checking math.h usability... yes checking math.h presence... yes checking for math.h... yes checking pthread.h usability... yes checking pthread.h presence... yes checking for pthread.h... yes checking for sys/types.h... (cached) yes checking for sys/stat.h... (cached) yes checking sys/uio.h usability... yes checking sys/uio.h presence... yes checking for sys/uio.h... yes checking for sys/wait.h that is POSIX.1 compatible... (cached) yes checking whether time.h and sys/time.h may both be included... yes checking sys/time.h usability... yes checking sys/time.h presence... yes checking for sys/time.h... yes checking sys/timeb.h usability... yes checking sys/timeb.h presence... yes checking for sys/timeb.h... yes checking sys/param.h usability... yes checking sys/param.h presence... yes checking for sys/param.h... yes checking sys/mount.h usability... yes checking sys/mount.h presence... yes checking for sys/mount.h... yes checking sys/ioctl.h usability... yes checking sys/ioctl.h presence... yes checking for sys/ioctl.h... yes checking sys/select.h usability... yes checking sys/select.h presence... yes checking for sys/select.h... yes checking limits.h usability... yes checking limits.h presence... yes checking for limits.h... yes checking setjmp.h usability... yes checking setjmp.h presence... yes checking for setjmp.h... yes checking stdarg.h usability... yes checking stdarg.h presence... yes checking for stdarg.h... yes checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking signal.h usability... yes checking signal.h presence... yes checking for signal.h... yes checking sys/signal.h usability... yes checking sys/signal.h presence... yes checking for sys/signal.h... yes checking sys/siginfo.h usability... no checking sys/siginfo.h presence... no checking for sys/siginfo.h... no checking termio.h usability... yes checking termio.h presence... yes checking for termio.h... yes checking termios.h usability... yes checking termios.h presence... yes checking for termios.h... yes checking for dirent.h that defines DIR... (cached) yes checking for library containing opendir... (cached) none required checking for unistd.h... (cached) yes checking varargs.h usability... no checking varargs.h presence... no checking for varargs.h... no checking crypt.h usability... yes checking crypt.h presence... yes checking for crypt.h... yes checking netinet/in.h usability... yes checking netinet/in.h presence... yes checking for netinet/in.h... yes checking rpc/rpc.h usability... yes checking rpc/rpc.h presence... yes checking for rpc/rpc.h... yes checking netconfig.h usability... no checking netconfig.h presence... no checking for netconfig.h... no checking for rpc/xdr.h... yes checking aio.h usability... yes checking aio.h presence... yes checking for aio.h... yes checking mntent.h usability... yes checking mntent.h presence... yes checking for mntent.h... yes checking mnttab.h usability... no checking mnttab.h presence... no checking for mnttab.h... no checking sys/mntent.h usability... no checking sys/mntent.h presence... no checking for sys/mntent.h... no checking sys/mnttab.h usability... no checking sys/mnttab.h presence... no checking for sys/mnttab.h... no checking sys/ipc.h usability... yes checking sys/ipc.h presence... yes checking for sys/ipc.h... yes checking sys/file.h usability... yes checking sys/file.h presence... yes checking for sys/file.h... yes checking socket.h usability... no checking socket.h presence... no checking for socket.h... no checking sys/socket.h usability... yes checking sys/socket.h presence... yes checking for sys/socket.h... yes checking sys/sockio.h usability... no checking sys/sockio.h presence... no checking for sys/sockio.h... no checking winsock2.h usability... no checking winsock2.h presence... no checking for winsock2.h... no checking sys/resource.h usability... yes checking sys/resource.h presence... yes checking for sys/resource.h... yes checking sys/sem.h usability... yes checking sys/sem.h presence... yes checking for sys/sem.h... yes checking semaphore.h usability... yes checking semaphore.h presence... yes checking for semaphore.h... yes checking float.h usability... yes checking float.h presence... yes checking for float.h... yes checking atomic.h usability... no checking atomic.h presence... no checking for atomic.h... no checking atomic_ops.h usability... no checking atomic_ops.h presence... no checking for atomic_ops.h... no checking utime.h usability... yes checking utime.h presence... yes checking for utime.h... yes checking poll.h usability... yes checking poll.h presence... yes checking for poll.h... yes checking linux/falloc.h usability... yes checking linux/falloc.h presence... yes checking for linux/falloc.h... yes checking for library containing dlopen... -ldl checking for main in -lm... yes checking for tgetent in -lcurses... no checking for tgetent in -lncurses... no checking for tgetent in -ltermcap... no checking for tgetent in -ltinfo... no configure: error: termcap support not found pi@raspberrypi:~/firebird $ make make: *** No se especificó ningún objetivo y no se encontró ningún makefile. Alto. pi@raspberrypi:~/firebird $ sudo make install make: *** No hay ninguna regla para construir el objetivo 'install'. Alto. pi@raspberrypi:~/firebird $ |
Echa un vistazo a la documentación, parece que está esperando un parámetro para saber qué ¿versión/sistema/cpu/bits? se va a compilar:
Cita:
|
A mi me parece que te faltan dependencias:
Cita:
|
instala libncurses-dev
Código:
sudo apt install libncurses-dev Código:
./configure |
tsk... estoy pensando en qué clase de genio eres tú... jajaj
Te cuento, sin leer tu edición del post, instalé libncurses-dev y luego ejecuté el ./autogen.sh lo que parece haberse ejecutado bien... pues dice qu el Paquete Firebird 2 fue configurado como ClassicServer... ejecuté el make y me dio otra vez un error, entonces encontré tu edición y ejecuté ./configure y luego make, pero me volvió a dar error: ...The Firebird2 package has been configured with the following options: Architecture : ClassicServer Debug : disabled 64 bit I/O for 32-bit platforms : enabled Raw devices : enabled Service name : gds_db Service port : 3050 GPRE modules : c_cxx.cpp Install Dir : /usr/local/firebird pi@raspberrypi:~/firebird $ make make -C gen firebird make[1]: se entra en el directorio '/home/pi/firebird/gen' make CFLAGS=" -pthread" -j1 -f ../gen/Makefile.extern.editline make[2]: se entra en el directorio '/home/pi/firebird/gen' make[2]: No se hace nada para 'libeditline'. make[2]: se sale del directorio '/home/pi/firebird/gen' (cd ..; ./src/misc/writeBuildNum.sh rebuildHeader) files are identical make boot_phase1_build make[2]: se entra en el directorio '/home/pi/firebird/gen' make -j1 -f ../gen/Makefile.boot.gpre gpre_boot make[3]: se entra en el directorio '/home/pi/firebird/gen' g++ -DBOOT_BUILD -I../src/include/gen -I../src/include -I../src/vulcan -DNAMESPACE=Vulcan -O3 -DNDEBUG -DLINUX -DARM -pipe -p -MMD -fPIC -fsigned-char -fmessage-length=0 -DFB_SEND_FLAGS=MSG_NOSIGNAL -pthread -c ../src/jrd/gds.cpp -o ../temp/boot/jrd/gds.o In file included from ../src/include/../common/classes/alloc.h:43:0, from ../src/include/../common/classes/fb_string.h:39, from ../src/jrd/../jrd/os/path_utils.h:31, from ../src/jrd/gds.cpp:47: ../src/include/../common/classes/fb_atomic.h:521:2: error: #error AtomicCounter: implement appropriate code for your platform! #error AtomicCounter: implement appropriate code for your platform! ^~~~~ In file included from ../src/include/../common/classes/fb_string.h:39:0, from ../src/jrd/../jrd/os/path_utils.h:31, from ../src/jrd/gds.cpp:47: ../src/include/../common/classes/alloc.h:207:2: error: ‘AtomicCounter’ does not name a type AtomicCounter mst_usage; ^~~~~~~~~~~~~ ../src/include/../common/classes/alloc.h:210:2: error: ‘AtomicCounter’ does not name a type AtomicCounter mst_mapped; ^~~~~~~~~~~~~ ../src/include/../common/classes/alloc.h: In constructor ‘Firebird::MemoryStats::MemoryStats(Firebird::MemoryStats*)’: ../src/include/../common/classes/alloc.h:187:25: error: class ‘Firebird::MemoryStats’ does not have any field named ‘mst_usage’ : mst_parent(parent), mst_usage(0), mst_mapped(0), mst_max_usage(0), mst_max_mapped(0) ^~~~~~~~~ ../src/include/../common/classes/alloc.h:187:39: error: class ‘Firebird::MemoryStats’ does not have any field named ‘mst_mapped’ : mst_parent(parent), mst_usage(0), mst_mapped(0), mst_max_usage(0), mst_max_mapped(0) ^~~~~~~~~~ ../src/include/../common/classes/alloc.h: In member function ‘size_t Firebird::MemoryStats::getCurrentUsage() const’: ../src/include/../common/classes/alloc.h:193:42: error: ‘mst_usage’ was not declared in this scope size_t getCurrentUsage() const { return mst_usage.value(); } ^~~~~~~~~ ../src/include/../common/classes/alloc.h: In member function ‘size_t Firebird::MemoryStats::getCurrentMapping() const’: ../src/include/../common/classes/alloc.h:195:44: error: ‘mst_mapped’ was not declared in this scope size_t getCurrentMapping() const { return mst_mapped.value(); } ^~~~~~~~~~ ../src/include/../common/classes/alloc.h: At global scope: ../src/include/../common/classes/alloc.h:270:2: error: ‘AtomicCounter’ does not name a type AtomicCounter used_memory; ^~~~~~~~~~~~~ In file included from ../src/include/../common/classes/fb_string.h:40:0, from ../src/jrd/../jrd/os/path_utils.h:31, from ../src/jrd/gds.cpp:47: ../src/include/../common/classes/RefCounted.h:59:3: error: ‘AtomicCounter’ does not name a type AtomicCounter m_refCnt; ^~~~~~~~~~~~~ ../src/include/../common/classes/RefCounted.h: In member function ‘virtual int Firebird::RefCounted::addRef()’: ../src/include/../common/classes/RefCounted.h:38:13: error: ‘m_refCnt’ was not declared in this scope return ++m_refCnt; ^~~~~~~~ ../src/include/../common/classes/RefCounted.h: In member function ‘virtual int Firebird::RefCounted::release()’: ../src/include/../common/classes/RefCounted.h:44:25: error: ‘m_refCnt’ was not declared in this scope const int refCnt = --m_refCnt; ^~~~~~~~ ../src/include/../common/classes/RefCounted.h:45:9: error: in argument to unary ! if (!refCnt) ^~~~~~ ../src/include/../common/classes/RefCounted.h: In constructor ‘Firebird::RefCounted::RefCounted()’: ../src/include/../common/classes/RefCounted.h:51:18: error: class ‘Firebird::RefCounted’ does not have any field named ‘m_refCnt’ RefCounted() : m_refCnt(0) {} ^~~~~~~~ In file included from ../src/jrd/../jrd/jrd.h:88:0, from ../src/jrd/gds.cpp:150: ../src/jrd/../jrd/../jrd/flu.h: At global scope: ../src/jrd/../jrd/../jrd/flu.h:46:14: error: ‘AtomicCounter’ in namespace ‘Firebird’ does not name a type Firebird::AtomicCounter useCount; ^~~~~~~~~~~~~ ../src/jrd/../jrd/../jrd/flu.h: In member function ‘void Jrd::Module::InternalModule::acquire()’: ../src/jrd/../jrd/../jrd/flu.h:82:7: error: ‘useCount’ was not declared in this scope ++useCount; ^~~~~~~~ ../src/jrd/../jrd/../jrd/flu.h: In member function ‘int Jrd::Module::InternalModule::release()’: ../src/jrd/../jrd/../jrd/flu.h:88:14: error: ‘useCount’ was not declared in this scope return --useCount; ^~~~~~~~ In file included from ../src/jrd/../jrd/../jrd/Database.h:54:0, from ../src/jrd/../jrd/jrd.h:93, from ../src/jrd/gds.cpp:150: ../src/jrd/../jrd/../jrd/../common/classes/PublicHandle.h: At global scope: ../src/jrd/../jrd/../jrd/../common/classes/PublicHandle.h:46:3: error: ‘AtomicCounter’ does not name a type AtomicCounter astDisabled; // When >0 - AST returns taking no actions ^~~~~~~~~~~~~ In file included from ../src/jrd/../jrd/../jrd/Database.h:65:0, from ../src/jrd/../jrd/jrd.h:93, from ../src/jrd/gds.cpp:150: ../src/jrd/../jrd/../jrd/../lock/lock_proto.h:488:26: error: field ‘m_waitingOwners’ has incomplete type ‘Firebird::AtomicCounter’ Firebird::AtomicCounter m_waitingOwners; ^~~~~~~~~~~~~~~ ../src/jrd/../jrd/../jrd/../lock/lock_proto.h:300:8: note: forward declaration of ‘class Firebird::AtomicCounter’ class AtomicCounter; ^~~~~~~~~~~~~ In file included from ../src/jrd/../jrd/jrd.h:93:0, from ../src/jrd/gds.cpp:150: ../src/jrd/../jrd/../jrd/Database.h:98:27: error: field ‘useCount’ has incomplete type ‘Firebird::AtomicCounter’ Firebird::AtomicCounter useCount; ^~~~~~~~ In file included from ../src/jrd/../jrd/../jrd/Database.h:65:0, from ../src/jrd/../jrd/jrd.h:93, from ../src/jrd/gds.cpp:150: ../src/jrd/../jrd/../jrd/../lock/lock_proto.h:300:8: note: forward declaration of ‘class Firebird::AtomicCounter’ class AtomicCounter; ^~~~~~~~~~~~~ In file included from ../src/jrd/../jrd/jrd.h:93:0, from ../src/jrd/gds.cpp:150: ../src/jrd/../jrd/../jrd/Database.h:228:27: error: field ‘waiters’ has incomplete type ‘Firebird::AtomicCounter’ Firebird::AtomicCounter waiters; ^~~~~~~ In file included from ../src/jrd/../jrd/../jrd/Database.h:65:0, from ../src/jrd/../jrd/jrd.h:93, from ../src/jrd/gds.cpp:150: ../src/jrd/../jrd/../jrd/../lock/lock_proto.h:300:8: note: forward declaration of ‘class Firebird::AtomicCounter’ class AtomicCounter; ^~~~~~~~~~~~~ ../gen/make.rules:112: fallo en las instrucciones para el objetivo '../temp/boot/jrd/gds.o' make[3]: *** [../temp/boot/jrd/gds.o] Error 1 make[3]: se sale del directorio '/home/pi/firebird/gen' Makefile:233: fallo en las instrucciones para el objetivo 'gpre_boot' make[2]: *** [gpre_boot] Error 2 make[2]: se sale del directorio '/home/pi/firebird/gen' Makefile:227: fallo en las instrucciones para el objetivo '../gen/firebird/bin/gpre_static' make[1]: *** [../gen/firebird/bin/gpre_static] Error 2 make[1]: se sale del directorio '/home/pi/firebird/gen' Makefile:6: fallo en las instrucciones para el objetivo 'firebird' make: *** [firebird] Error 2 |
Código:
../src/include/../common/classes/fb_atomic.h:521:2: error: #error AtomicCounter: implement appropriate code for your platform! Código:
libatomic-ops-dev - A library for atomic operations (development files) |
... ahora aparecieron estos errores (estamos cada vez más cerca)
make[2]: se entra en el directorio '/home/pi/firebird/gen' make -j1 -f ../gen/Makefile.boot.gpre gpre_boot make[3]: se entra en el directorio '/home/pi/firebird/gen' g++ -DBOOT_BUILD -I../src/include/gen -I../src/include -I../src/vulcan -DNAMESPACE=Vulcan -O3 -DNDEBUG -DLINUX -DARM -pipe -p -MMD -fPIC -fsigned-char -fmessage-length=0 -DFB_SEND_FLAGS=MSG_NOSIGNAL -pthread -c ../src/common/classes/alloc.cpp -o ../temp/boot/common/classes/alloc.o ../src/common/classes/alloc.cpp: In function ‘void* operator new(size_t)’: ../src/common/classes/alloc.cpp:2232:7: error: declaration of ‘void* operator new(size_t) throw (std::bad_alloc)’ has a different exception specifier void* operator new(size_t s) THROW_BAD_ALLOC ^~~~~~~~ In file included from ../src/common/classes/alloc.cpp:32:0: ../src/include/../common/classes/alloc.h:497:7: note: from previous declaration ‘void* operator new(std::size_t)’ void* operator new(size_t s) THROW_BAD_ALLOC; ^~~~~~~~ ../src/common/classes/alloc.cpp:2236:7: error: declaration of ‘void* operator new [](size_t) throw (std::bad_alloc)’ has a different exception specifier void* operator new[](size_t s) THROW_BAD_ALLOC ^~~~~~~~ In file included from ../src/common/classes/alloc.cpp:32:0: ../src/include/../common/classes/alloc.h:498:7: note: from previous declaration ‘void* operator new [](std::size_t)’ void* operator new[](size_t s) THROW_BAD_ALLOC; ^~~~~~~~ ../gen/make.rules:112: fallo en las instrucciones para el objetivo '../temp/boot/common/classes/alloc.o' make[3]: *** [../temp/boot/common/classes/alloc.o] Error 1 make[3]: se sale del directorio '/home/pi/firebird/gen' Makefile:233: fallo en las instrucciones para el objetivo 'gpre_boot' make[2]: *** [gpre_boot] Error 2 make[2]: se sale del directorio '/home/pi/firebird/gen' Makefile:227: fallo en las instrucciones para el objetivo '../gen/firebird/bin/gpre_static' make[1]: *** [../gen/firebird/bin/gpre_static] Error 2 make[1]: se sale del directorio '/home/pi/firebird/gen' Makefile:6: fallo en las instrucciones para el objetivo 'firebird' make: *** [firebird] Error 2 |
Según aquí
https://sourceforge.net/p/firebird/m...sage/35899241/ Deberías forzar compilar con el estandar C++98 Cita:
Código:
make clean_all Código:
make clean_all Código:
./autogen.sh --with-system-editline=yes --with-system-icu Porque no quiso compilar el ICU que viene con firebird, es cuestión que pruebes en la Raspberry Pi, aunque si quieres usar --with-system-icu, tienes que estar seguro que tienes instalado las icu-devtools Código:
sudo apt install icu-devtools |
PD: Ambas terminaron la compilación, tanto con icu 53 como con el 60
|
Estimado tsk, muchísimas gracias por tanto tiempo dedicado. Ya conseguí que funcione!!!. Hay una solución muy simple: Desde una RaspberryPi3B+ con Stretch, agregar los repositorios de Jessie. Los méritos de esta solución son de mi amigo Charly. Lo quería dejar acá paso a paso pero el foro no me deja pegar links, si lo quieren ver busquen "Firebird2.5-xxx in Raspbian Stretch" en www raspberrypi org barra forums, ahí soy el usuario cgd, y acabo de escribirlo.
Saludos a todos y muchas gracias por la ayuda !! Ojalá esto sirva a otros |
Puedes poner los links con "trampa", y un moderador lo editará después.
Simplemente, en lugar de http, pon ttp, o htt, o h-ttp, cualquier cosa así. Estaría bien que pusieras todo el proceso para compilarlos, para quien le haga falta después. Saludos. |
De acuerdo, prestar atención a q los links no estarán bien escritos,
Esta es una solución de cómo instalar Firebird2.5 en una RaspberryPi3B+ con Debian Stretch Abrir una terminal y editar accesos a repositorios: $ sudo nano /etc/apt/sources.list (agregar las siguientes dos lineas) deb http://archive.raspbian.org/raspbian jessie main contrib non-free deb-src http://archive.raspbian.org/raspbian jessie main contrib non-free presionar Ctrl-X para salir y S para salvar sources.list $ wget https://archive.raspbian.org/raspbian.public.key -O - | sudo apt-key add - $ sudo apt update $ sudo apt-cache search firebird (Verificar que Firebird2.5 ahora está disponible) $ sudo apt install firebird2.5-super (definir SYSDBA password) $ sudo dpkg-reconfigure firebird2.5-super (y finalmente para verificar que Firebird está corriendo:) ps axu | grep firebird y no olvidar aplicar permisos, por ejemplo si tu base de datos es mibase.gdb y está el directorio /home/pi/db, entonces: cd /home/pi/db sudo chown firebird.firebird mibase.gdb instalar flamerobin para probar: sudo apt-get install flamerobin Saludos cordiales !! |
^\||/^\||/^\||/
|
La franja horaria es GMT +2. Ahora son las 15:39:04. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi