Programare

Vezi cu -v mai multe detalii; e posibil ca unele biblioteci să fie linkate de 2 ori (se întâmplă dacă sunt folosite de alte biblioteci care au fost linkate static în ELF dar cu alți parametri).

Poți să cauți bibliotecile alea și în /etc/ld.so.conf (posibil să fie un tree în /etc/ld.so.conf.d/*, așa că grep libmbed -r /etc/ld.so.conf*)
 
Nu exista -v sau -u pe router iar pe host nu merge probabil fiindca e pentru arm, nu x86. Zice ca "not a dynamic executable".
/etc/ld.so.conf indica:
/opt/lib
/opt/usr/lib
/lib
/usr/lib
 
PS: Cred ca am gasit problema.
Firmware-ul routerului e facut cu uclibc. Dar in /opt este instalat Entware care foloseste glibc.
Hiawatha instaleaza mbed TLS in /opt/lib/hiawatha (uclibc). Dar in /opt/lib se afla mbed TLS de la Entware (glibc), ca are nevoie Midnight Commander de ele.
Am incercat cu LD_LIBRARY_PATH=/opt/lib/hiawatha hiawatha si merge. Deci ceva e gresit cu adresa de unde isi ia mbed TLS by default, ca incarca .so-urile gresite din /opt/lib, nu /opt/lib/hiawatha.
 
PS2: Problema se impute.
- Am dezinstalat mc si mbed tls din Entware, dar tot nu merge. Pun LD_LIBRARY_PATH - merge.
- Caut pe net despre CMAKE. Aflu ca in executabilele compilate ar trebui sa existe RPATH si RUNPATH care spun unde se gasesc .so-urile.
- Citesc manualul CMAKE despre RPATH si RUNPATH. Aflu ca se poate.
- Asadar studiez sursele Hiawatha 2 ore. Nimic in neregula. RPATH sunt la locul lor.
- Caut in programul compilat dupa RPATH si /opt/lib/hiawatha - nimic!
- Incep sa banuiesc ceva... :hmm: Caut pe net banuiala.
- Constat ca uclibc nu foloseste RPATH sau RUNPATH. E batut in cap si cauta doar in LD_LIBRARY_PATH.
- F*CK!!! :kill: :bash: :capu: :mad2:

Concluzie:
- Nu pot avea Hiawatha cu RPATH daca folosesc toolchain-ul router-ului (uclibc).
- Daca pun mbed TLS cu uclibc in /opt/lib, nu merge, ca mbed incearca sa ia uclibc din /opt/lib prima data (conform ld.so.conf) unde da peste glibc si crapa.
- Si chiar daca puteam pune mbed in /opt/lib, ar crapa hiawatha, ca incearca exact acelasi lucru.
- Nu pot modifica ld.so.conf ca e read-only.
- Nu-mi dau seama cum de programele din firmware merg in configuratia asta.
- Dar si daca mi-as da seama cum de merg, nu ma ajuta ca nu pot pune hiawatha in firmware, ca e read-only
- Deci inca o data: F*CK!!! :kill: :bash: :capu: :mad2:
 
Nu mi-e clar de ce nu poți folosi LD_LIBRARY_PATH și gata (separat pentru fiecare tool).
 
Pentru ca iese o varza? Pentru ca e incomod sa-l scriu de fiecare data cand testez configuratia serverului? Pentru ca n-o sa-mi aduc aminte de el cand o sa fac upgrade/update?

Update:
A mers modificata un pic configuratia pentru cmake sa faca mbedtls static => merge. :majoreta:
Case closed.
 
Păi oricum pare o varză care nu poate fi migrată (ai un script care să refacă toate modificările pe care le-ai făcut router-ului până acum? ai backups la toate modificările pe care le-ai făcut surselor ca să meargă compilate? ce se întâmplă dacă crapă router-ul?)
 
Am! Ca am mai patit! :biggrin: Acum sunt frumos organizate in directoare si .tar.gz-uri. Si toolchain-urile sunt pe discuri virtuale frumos organizate si ele, cu tot cu repository, in caz ca am nevoie de vreo versiune veche.

Hai alta:
Incerc PHP + Hiawatha => fail
Hiawatha apeleaza /opt/bin/php-cgi cu adresa .php-ului de interpretat ca prim argument si urmatorul environment:
Code:
DOCUMENT_ROOT=/opt/www/10
GATEWAY_INTERFACE=CGI/1.1
HTTPS=off
HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_ENCODING=gzip, deflate
HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.5
HTTP_CONNECTION=keep-alive
HTTP_COOKIE=clickedItem_tab=2; asus_token=ZBzHecCuL3OnoAXB2sx0H7Bd9Lrlg7p; CoreTmpUnit=0; bw_rtab=INTERNET
HTTP_DNT=1
HTTP_HOST=172.27.143.1
HTTP_RETURN_CODE=200
HTTP_SCHEME=http
HTTP_UPGRADE_INSECURE_REQUESTS=1
HTTP_USER_AGENT=Mozilla/5.0 (Windows NT 5.2; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
PWD=/tmp/mnt/2G/entware/www/10              <=== de mentionat ca /opt este symlink catre /tmp/mnt/2G/entware, 2G fiind stick-ul USB, deci directorul asta e corect
REDIRECT_STATUS=200
REMOTE_ADDR=172.27.143.2
REQUEST_METHOD=GET
REQUEST_URI=/Main.php
SCRIPT_FILENAME=/opt/www/10/Main.php
SCRIPT_NAME=/Main.php
SERVER_ADDR=0.0.0.0
SERVER_BINDING=Main
SERVER_NAME=marius95.go.ro
SERVER_PORT=80
SERVER_PROTOCOL=HTTP/1.1
SERVER_SOFTWARE=Hiawatha v10.10
SHLVL=1
PHP-ul raspunde cu :
Code:
Status: 404 Not Found
X-Powered-By: PHP/7.4.3
Content-type: text/html; charset=UTF-8

No input file specified.

Ce-i gresit ?
Evident, acel /opt/www/10/Main.php exista si este accesibil tuturor cu 777.
 
PS:
php-cgi ignora argumentul.
Variabila cu problema este SCRIPT_NAME=/Main.php. Cu ea da eroarea asta: PHP Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0
Daca i-o sterg, merge. De ce?

Evident, e de la doc_root. Daca ii setez doc_root = "/opt/www/10" merge, dar daca ii setez doc_root = "/opt/www" nu mai merge. WTF?!?!?
Extraordinar cum poate o porcarie de program sa iti iroseasca ziua!
 
Last edited:
Ce ai în php.ini? Că nu toate alea se suprascriu cu ce-i dai în env - dacă ai document root ca /opt/www/10 în php.ini, n-o să vrea /opt/www în env, pentru că e problemă de securitate.
 
Pai se pare ca daca scriu /opt/www, nu vrea /opt/www/10, deci :bash:. Vezi postul anterior.
----------
Sa inteleg ca dupa 25 de ani de MySQL si nenumarate forks/variante, InnoDB ramane singura optiune cu foreign keys?! :facepalm:
 
Vezi că InnoDB-ul din MariaDB nu mai e compatibil cu cel din MySQL, au mai lucrat la el. Și mai ai XtraDB, care e tot un fork. În rest ifecare și-a făcut storage specializat pe nevoile proprii, că innodb functionează destul de bine pentru o bază de date normală.
 
Păi și la innodb poți muta fișierele, fără pierderi dacă baza de date e oprită (cu baza de date pornită n-o să scapi fără pierderi în toate bazele de date tranzacționale serioase). De-aia există conceptul de backup, care nu se bazează pe "las' că iau fișîerele și le mut".
 
MySQL / MariaDB si asta:
Code:
ALTER TABLE tInterp ADD CONSTRAINT nooverlap CHECK (
    NOT EXISTS (
        SELECT * FROM tInterp A WHERE NEW.cDID=A.cDID AND NEW.cIID !=A.cIID AND .... bla bla bla
    )   
);

Function or expression 'select ...' cannot be used in the CHECK clause of `nooverlap`
:what:
 
Back
Top