mod_harbour, ambiente linux, unix(BSD)

75 views
Skip to first unread message

Domenico D'Oria

unread,
Jun 17, 2022, 10:52:22 AM6/17/22
to Harbour supporto utenti in italiano
Buona sera "ragazzi"

Trovo delle difficoltà ad adattare il software in questione, si per la prima versione, che per la versione V2, per i sistemi Linux, e poi pure Unix/BSD.

pur seguendo le istruzioni che trovo nei forum inglese e spagnolo, non riesco a generare ed a farlo funzionare correttamente.

Trovo che la metodologia di creazione e funzionamento attualmente siano basate solo su il windows for linux subsystem , che però nell'ambiente pure Linux, non si riescono a gestire, a parte gli errori di programmazione.

Qualcuno di Voi ha più esperienza di me ?

Matteo Baccan

unread,
Jun 17, 2022, 1:38:53 PM6/17/22
to Harbour supporto utenti in italiano
Ciao

io lo uso in ambiente Windows + Apache, con l'aggiunta di JWT (https://github.com/matteobaccan/HarbourJwt) come backend di un'applicazione VUE

Ad ora funziona, ma su linux non ho provato.

Dove ti blocchi?

ciao
matteo

Domenico D'Oria

unread,
Jun 18, 2022, 3:07:42 AM6/18/22
to Harbour supporto utenti in italiano
Ciao Matteo

grazie per l'interesse

premetto che non faccio il programmatore di professione, lo faccio per passione, il mio ruolo in azienda è diverso, occupandomi di assistenza tecnica hardware e software, in ambiente windows, networks ecc. ecc.

volevo provare il mod_harbour in ambiente linux/BSD, con apache, e l'interprete harbour stile php per intenderci ,  per verificare le prestazioni rispetto ad un ambiente linux/BSD con CGI che per quello che faccio io mi funziona.

Ho tralasciato Windows come sistema sul quale fare le prove, perchè semplicemente è Windows, con tutti i suoi pro e contro.

Ho dato uno sguardo sia alla versione mod_harbour, che alla versione mod_harbour.v2, e mi sono detto , vediamo se funziona.

In ambiente Linux Ubuntu 22.04 lts, non c'è stato verso di compilare il mod_harbour. mentre sono riuscito a compilare il mod_harbour.v2 ma non la libreria di appoggio, pur seguendo le istruzioni sparpagliate nei vari siti, forum,

In ambiente BSD pur riuscendo a compilare entrambi, non funziona, probabilmente essendo il sistema operativo diverso bisogna metterci le mani.

Dal mio punto di vista il problema nasce tutto dal fatto che i file hbp, sono stati progettati , ancora con l'ambiente Windows, con riferimenti a librerie ad include ed ai compilatori msvc microsoft. Mentre in ambiente Linux/Unix BSD abbiamo il gcc ed il clang.

Tieni conto che ho due macchine dedicate, una per Linux Ubuntu 22.04 lts, ed una per FreeBSD. quindi non utilizzo il Windows Subsystem for Linux di Microsoft.

Ho scritto a Diegof che sembra essere il creatore di mod_harbour.v2, il quale mi sembra che lavori anche lui in ambiente Windows  Subsystem for Linux di Microsoft, ma le risposte non sono chiaramente esaustive.

Se serve posso dare l'accesso alla macchina ubuntu sia in ambiente console che in ambiente desktop remoto.

saluti a tutti quelli che vorranno collaborare.

Matteo Baccan

unread,
Jun 20, 2022, 4:47:52 AM6/20/22
to Harbour supporto utenti in italiano
Ciao

partiamo da mod_harbour e da una sua compilazione

- Sul repo github https://github.com/FiveTechSoft/mod_harbour sono presenti già delle action di compilazione
- Se guardi l'esecuzioni delle action della versione per Ubuntu https://github.com/FiveTechSoft/mod_harbour/actions/workflows/modharbour_ubuntu64.yml troverai un build andato a buon fine di un po' di tempo fa https://github.com/FiveTechSoft/mod_harbour/actions/runs/1416189680 . io partirei da questo artifact per provarlo su ubuntu a 64bit .. poi vediamo che problemi incontriamo
- Per BSD, vediamo, non ho trovato un build valido, ma dato che sei riuscito a fare un build: che errori hai?

Fai conto che il maggior  sviluppo di harbour è windows, quindi qualche problema fuori windows non mi sorprente, ma ci si puo' lavorare

ciao
matteo

Domenico D'Oria

unread,
Jun 20, 2022, 11:12:53 AM6/20/22
to Harbour supporto utenti in italiano
buongiorno Matteo e grazie per la risposta.

intanto partiamo da linux ubuntu 22.04  lts

 forse non sono stato chiaro, sto parlando dell'ultima versione di mod_harbour, la v2  che trovi qui


ho comunque seguito le istruzioni e il modulo mod_harbour.v2 sono riuscito a crearlo mentre mi da questo errore quando creo la libreria

hbmk2: Creating dynamic library... output/linux/liblibmhapache.so
hbmk2: Dynamic lib link command:
gcc -shared -o output/linux/liblibmhapache.so 'output/linux/.hbmk/linux/gcc/hbdyn/mh_apache.o' 'output/linux/.hbmk/linux/gcc/hbdyn/ap_func.o' output/linux/.hbmk/linux/gcc/hbdyn/cookies.o 'output/linux/.hbmk/linux/gcc/hbdyn/legacy_func.o' output/linux/.hbmk/linux/gcc/hbdyn/main.o output/linux/.hbmk/linux/gcc/hbdyn/persistence.o output/linux/.hbmk/linux/gcc/hbdyn/prepro.o output/linux/.hbmk/linux/gcc/hbdyn/preproPHP.o output/linux/.hbmk/linux/gcc/hbdyn/trace.o output/linux/.hbmk/linux/gcc/hbdyn/errorsys.o output/linux/.hbmk/linux/gcc/hbdyn/sessions.o 'output/linux/.hbmk/linux/gcc/hbdyn/ap_func_c.o' 'output/linux/.hbmk/linux/gcc/hbdyn/legacy_func_c.o'  @libs.txt -Wl,--start-group -lhbextern -lhbdebug -lhbvmmt -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca -lgtstd -lgttrm -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lm -lpthread -ldl -lrt -lpcre -lz -lgpm   -Wl,--end-group -L/usr/local/lib/harbour

/usr/bin/ld: /usr/local/lib/harbour/libhbvmmt.a(hvmall.o): relocation R_X86_64_TPOFF32 against `hb_stack_ptr' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: failed to set dynamic section sizes: bad value
collect2: error: ld returned 1 exit status
hbmk2[libmhapache]: Error: Running dynamic lib link command. 1

gcc -shared -o output/linux/liblibmhapache.so 'output/linux/.hbmk/linux/gcc/hbdyn/mh_apache.o' 'output/linux/.hbmk/linux/gcc/hbdyn/ap_func.o' output/linux/.hbmk/linux/gcc/hbdyn/cookies.o 'output/linux/.hbmk/linux/gcc/hbdyn/legacy_func.o' output/linux/.hbmk/linux/gcc/hbdyn/main.o output/linux/.hbmk/linux/gcc/hbdyn/persistence.o output/linux/.hbmk/linux/gcc/hbdyn/prepro.o output/linux/.hbmk/linux/gcc/hbdyn/preproPHP.o output/linux/.hbmk/linux/gcc/hbdyn/trace.o output/linux/.hbmk/linux/gcc/hbdyn/errorsys.o output/linux/.hbmk/linux/gcc/hbdyn/sessions.o 'output/linux/.hbmk/linux/gcc/hbdyn/ap_func_c.o' 'output/linux/.hbmk/linux/gcc/hbdyn/legacy_func_c.o'  @libs.txt -Wl,--start-group -lhbextern -lhbdebug -lhbvmmt -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca -lgtstd -lgttrm -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lm -lpthread -ldl -lrt -lpcre -lz -lgpm   -Wl,--end-group -L/usr/local/lib/harbour

e non genera la libreria, tieni conto che ho costruito harbour con il flag -fPIC e teoricamente dovrebbe funzionare.

nel caso come faccio a creare la libreria libhbvmmt.a con quel flag ?

saluti

Domenico

Matteo Baccan

unread,
Jun 20, 2022, 1:18:15 PM6/20/22
to Harbour supporto utenti in italiano
Ciao

anche in questo caso c'è un action che ti restituisce già la versione pronta per ubuntu64


Se segui il workflow associato


C'è tutta la sequenza corretta per creare sia

libmhapache.so
mod_harbour.v2.so

e l'artefatto dove poter prendere i 2 file che, se non ho capito male, sono quelli che ti servono per Ubuntu64

Gardando l'errore, mi viene da pensare che possa dipendere dalla versione di harbour usata. Nel mod_harbour v2 viene usato un prebuild di DiegoFazio https://github.com/diegofazio/harbour_binaries/tree/master/Linux

In generale: se l'action funziona e ricrea sia mod_harbour che  libmhapache: non ti serve rifarlo, ma se vuoi, ricontrolla se stai usando la stessa sequenza di operazioni.

ciao
matteo

Domenico D'Oria

unread,
Jun 22, 2022, 3:42:00 AM6/22/22
to Harbour supporto utenti in italiano
buongiorno matteo, intanto un ringraziamento.

Ho seguito i tuoi consigli, devo ancora fare la prova di funzionamento, ti/vi aggiornerò in seguito.

rimane il fatto che noi utenti harbour dobbiamo essere in grado di compilare, sempre che siano rilasciati i sorgenti del caso, il software in ogni sistema operativo supportato.

Quindi dall'errore che ti ho rilasciato , ti chiedo o chiedo a chiunque sappia darmi una risposta come si fa a compilare e/o creare la singola libreria in questione in ambiente Linux Ubuntu con il flag -fPIC
la libreria è la seguente :

libhbvmmt.a(hvmall.o):  recompile with -fPIC

ringrazio in anticipo

Matteo Baccan

unread,
Jun 22, 2022, 3:51:26 AM6/22/22
to harbo...@googlegroups.com
Ciao

non sono un esperto bsd, ma se mi dai una shell sul tuo bsd di test provo a dare una ricompilata

Fai conto che è vero che Harbour dovrebbe essere ricompilabile su tutti i sistemi supportati, ma solo windows e Ubuntu hanno un continuous building, gli altri non ho idea se hanno qualcuno che li segue ancora

Ciao
Matteo

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Harbour supporto utenti in italiano" di Google Gruppi.
Per annullare l'iscrizione a questo argomento, visita https://groups.google.com/d/topic/harbourITA/kaUiccUpySY/unsubscribe.
Per annullare l'iscrizione a questo gruppo e a tutti i suoi argomenti, invia un'email a harbourITA+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/harbourITA/5b8bcadf-7f5b-445e-bf94-29873fdf2f35n%40googlegroups.com.
--

Domenico D'Oria

unread,
Jul 1, 2022, 12:29:02 PM7/1/22
to Harbour supporto utenti in italiano
Alla fine ci sono riuscito a creare mod_harbourv2.so e libmhapache.so su ubuntu 22.04 lts, ho configurato il server come riportato su github ed ora almeno i Samples funzionano.

come ho fatto :

prima di tutto ho scaricato gli elementi essenziali

$ sudo apt-get install bash git gcc binutils fakeroot debhelper valgrind upx uncrustify

mi sono spostato nella cartella /opt

$ cd /opt

da li poi ho eseguito il seguente comando


poi ho eseguito i seguenti comandi

for gtcrs terminal lib: $ sudo apt-get install libncurses-dev
for gtsln terminal lib: $ sudo apt-get install libslang2-dev OR $ sudo apt-get install libslang1-dev
for gtxwc terminal lib: $ sudo apt-get install libx11-dev
for console mouse support: $ sudo apt-get install libgpm-dev OR $ sudo apt-get install libgpmg1-dev
for contrib/gtalleg lib: $ sudo apt-get install liballegro4.2-dev
for contrib/hbcairo lib: $ sudo apt-get install libcairo2-dev
for contrib/hbcups lib: $ sudo apt-get install libcups2-dev
for contrib/hbcurl lib: $ sudo apt-get install libcurl4-openssl-dev OR $ sudo apt-get install libcurl4-gnutls-dev
for contrib/hbfbird lib: $ sudo apt-get install firebird2.1-dev OR $ sudo apt-get install libfirebird2.0-dev
for contrib/hbfimage lib: $ sudo apt-get install libfreeimage-dev
for contrib/hbgd lib: $ sudo apt-get install libgd2-xpm-dev OR $ sudo apt-get install libgd-xpm-dev
for contrib/hbgs lib: $ sudo apt-get install libgs-dev
for contrib/hbmagic lib: $ sudo apt-get install libmagic-dev
for contrib/hbmysql lib: $ sudo apt-get install libmysqlclient15-dev
for contrib/hbodbc lib: $ sudo apt-get install unixodbc-dev
for contrib/hbpgsql lib: $ sudo apt-get install libpq-dev
for contrib/hbqt lib: $ sudo apt-get install libqt5-dev

for bzip2 support: $ sudo apt-get install libbz2-dev
for zlib support: $ sudo apt-get install zlib1g-dev
for pcre (regex) support: $ sudo apt-get install libpcre3-dev
for contrib/hbsqlit3 lib: $ sudo apt-get install libsqlite3-dev
for contrib/hbexpat lib: $ sudo apt-get install libexpat1-dev

una volta scaricati ed adattate le librerie riportate qua sopra

ho eseguito i seguenti comandi :

$ sudo chown -R <utente> harbour
$ sudo chgrp -R <utente> harbour

questi fanno in modo che il possessore della cartella harbour non sia root ma bensi l'utente

mi sono creato questo piccolo programma bash

echo build harbour for apache and mod_harbour.v2
$ sudo apt-get update
$ sudo apt install libcurl4-openssl-dev libssl-dev apache2-dev gcc
$ sudo cp -r /usr/include/x86_64-linux-gnu/curl /usr/include
echo stop install
$ HB_BUILD_CONTRIBS=
$ export HB_BUILD_CONTRIBS
$ HB_USER_CFLAGS="-fPIC"
$ export HB_USER_CFLAGS
$ HB_WITH_PCRE=no
$ export HB_WITH_PCRE
$ echo $HB_BUILD_CONTRIBS
$ echo $HB_USER_CFLAGS
$ echo $HB_WITH_PCRE

$ sudo -E make clean install


con l'ultimo comando del bash creo harbour e le sue librerie in maniera "dinamica"

poi mi sono spostato dento la cartella /opt/harbour/contrib

li ho scaricato con git


sono entrato nella cartella

$ cd /opt/harbour/contrib/mod_harbour.v2/source

ho modificato il file mod_harbour.c ( lo potete fare con qualsiasi editor

inserendo la riga

#pragma gcc diagnostic ignored "-Wreturn-type"

questa istruzione evita il controllo di una funzione void che invece erroneamente ritorna un valore

è un errore di programmazione.

poi ho letteralmente copiato dalla action  le seguenti istruzioni

$ sudo apt-get update
$ sudo apt install libcurl4-openssl-dev libssl-dev apache2-dev gcc

$ sudo cp -r /usr/include/x86_64-linux-gnu/curl /usr/include

sono importanti perchè installano le librerie necessarie a far funzionare il mod_harbour.v2

sono ritornato alla cartella
$ cd /opt/harbour/contrib/mod_harbour.v2

mi sono costruito un altro programma bash

echo Build library mod_harbour.v2
hbmk2 mod_harbour.v2.1.hbp -I/usr/include/apache2 -I/usr/include/apr-1.0

lanciato

e poi eseguito

$ mv /opt/harbour/contrib/mod_harbour.v2/output/linux/libmod_harbour.v2.so /opt/harbour/contrib/mod_harbour.v2/output/linux/mod_harbour.v2.so

$ mv /opt/harbour/contrib/mod_harbour.v2/output/linux/liblibmhapache.so /opt/harbour/contrib/mod_harbour.v2/output/linux/libmhapache.so

questi comandi rinominano i files creati

poi ho spostato come da istruzioni

$ sudo cp /opt/harbour/contrib/mod_harbour.v2/output/linux/mod_harbour.v2.so  /usr/lib/apache2/modules/mod_harbour.v2.so

e poi ho spostato

$ sudo cp /opt/harbour/contrib/mod_harbour.v2/output/linux/libmhapache.so  /var/www/html/libmhapache.so

poi ho eseguito le seguenti modifiche nel file /etc/apache2.conf :

LoadModule mod_harbourV2_module /usr/lib/apache2/modules/mod_harbour.v2.so
MH_LIBRARY /var/www/html/libmhapache.so
MH_NVMS 10

<FilesMatch "\.(prg|hrb|view)$">
      SetHandler harbour
</FilesMatch>

e nel file etc/apache2/mods-enabled/mpm_event.conf
ho modificato secondo le istruzione

StartServers 1

et voila

lanciato apache con il comando

$ sudo systemctl start apache2

e da qualsiasi browser prima ho verificato se funziona apache


viene fuori la default page di Apache2

e poi con l'istruzione


è saltata fuori la classica

Info Platform
OS

Linux 5.15.0-40-generic x86_64

Harbour

Harbour 3.2.0dev (r2104281802)

Build date

Jun 29 2022 13:39:02

Compiler

GNU C 11.2 (64-bit)
Capabilities
RDD

DBF, DBFFPT, DBFNTX, DBFNSX, DBFBLOB, SIXCDX, DBFCDX, SDF, DELIM, FCOMMA
Version Harbour
00

HB_VERSION_HARBOUR

Harbour 3.2.0dev (r2104281802)

01

HB_VERSION_COMPILER

GNU C 11.2 (64-bit)

02

HB_VERSION_MAJOR

3

03

HB_VERSION_MINOR

2

04

HB_VERSION_RELEASE

0

05

HB_VERSION_STATUS

dev

06

HB_VERSION_REVISION

2104281802

07

HB_VERSION_CHANGELOG_LAST

2021-04-28 20:02 UTC+0200 Aleksander Czajczynski (hb fki.pl)

08

HB_VERSION_CHANGELOG_ID

4643587824552fd877e7f02ad11596e0b30c465d

09

HB_VERSION_PCODE_VER

3

10

HB_VERSION_PCODE_VER_STR

PCode version: 0.3

11

HB_VERSION_BUILD_DATE_STR

Jun 29 2022 13:39:02

12

HB_VERSION_BUILD_DATE

20220629

13

HB_VERSION_BUILD_TIME

13:39:02

14

HB_VERSION_BUILD_PLAT


15

HB_VERSION_BUILD_COMP

-fPIC

16

HB_VERSION_FLAG_PRG


17

HB_VERSION_FLAG_C

64

18

HB_VERSION_FLAG_LINKER

1

19

HB_VERSION_BITWIDTH

true

20

HB_VERSION_ENDIANNESS

true

21

HB_VERSION_MT

LINUX

22

HB_VERSION_SHARED

linux

23

HB_VERSION_UNIX_COMPAT

gcc

24

HB_VERSION_PLATFORM

x86-64

25

HB_VERSION_CPU

false

26

HB_VERSION_COMPILER_CPP

false

27

HB_VERSION_MAX_

https://github.com/harbour/core/

risultato ok

da oggi in poi si programma con harbour per il web !!!

se volete informazioni cercherò di aiutarVi come posso

come consiglio personale vi dico lasciate perdere gli ambienti ibridi , quindi niente WSL prendete un catorcio di computer installate su Ubuntu 22.04 lts e li divertitevi.

saluti e buon week end

domenico
Reply all
Reply to author
Forward
Message has been deleted
0 new messages