/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Kompilering af mysqli.so på FC4 x86 64
Fra : Per Thomsen


Dato : 07-08-05 20:22

Hejsa

For at gøre en lang historie kortere:

<http://sourceforge.net/tracker/index.php?func=detail&aid=1243853&group_id=23067&atid=377408>

Jeg forsøger nu at kompilere mysqli.so

Jeg har hentet php-5.0.4.tar.bz2 og har pakket den ud i /usr/local/src/

Så har jeg (som root):
cd /usr/local/src/php-5.0.4/ext/mysqli
phpize
aclocal
../configure --enable-mysqli
make

Det går sådan set fint nok, derfor kopierer jeg den nye .so over hvor
den gamle lå, og genstarter apache

cp ./modules/mysqli.so /usr/lib64/php/modules/mysqli.so
apachectl graceful

Og så kommer problemet:

i min /etc/httpd/logs/error_log siger den:

PHP Warning: PHP Startup: Unable to load dynamic library
'/usr/lib64/php/modules/mysqli.so' - /usr/lib64/php/modules/mysqli.so:
undefined symbol: _zval_dtor_func in Unknown on line 0


Jeg har self. googlet, men fandt ikke noget, jeg synes jeg kunne bruge.

Jeg har prøvet et hav af forskellige options til ./configure.

Den seneste ser sådan her ud:
../configure --build=x86_64-redhat-linux --host=x86_64-redhat-linux
--target=x86_64-redhat-linux-gnu --program-prefix= --prefix=/usr
--exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin
--sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include
--libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var
--sharedstatedir=/usr/com --mandir=/usr/share/man
--infodir=/usr/share/info --cache-file=../config.cache
--with-libdir=/usr/lib64 --with-config-file-path=/etc
--with-config-file-scan-dir=/etc/php.d --with-exec-dir=/usr/bin
--with-layout=GNU --enable-sockets --with-apxs2=/usr/sbin/apxs
--with-mysqli=shared,/usr/bin/mysql_config --enable-mysqli

Jeg regner med at det er fordi jeg mangler noget, men jeg kan ikke
gennemskue, hvad det er.

Any1?

MVH Per Thomsen,
http://www.pert.dk/

 
 
Kasper Dupont (08-08-2005)
Kommentar
Fra : Kasper Dupont


Dato : 08-08-05 05:53

Per Thomsen wrote:
>
> Det går sådan set fint nok, derfor kopierer jeg den nye .so over hvor
> den gamle lå, og genstarter apache

Det synes jeg så ikke lyder som nogen god idé. Jeg ville
enten installere det hele med make install eller også
byge en rpm fil udfra .src.rpm filen.

For at modificere og bygge udfra .src.rpm filen skal du
gøre følgende:
1. Opret en ~/.rpmmacros fil med et indhold i stil med:
%_topdir   /home/foo/redhat
2. Opret de nødvendige directories, f.eks. med:
cp -r /usr/src/redhat ~
3. Installer .src.rpm filen. Hvis du fik de første to
skridt udført rigtigt burde installationen forløbe
fint uden at kræve root permissions.
4. Smid den patch du vil teste ind i SOURCES directoriet.
5. Ret i .spec filen i SPECS directoriet, du skal tilføje
navnet på patchen to steder (der er sikkert masser af
eksempler at se på). Jeg plejer at smide patches ind
efter alle de eksisterende. Jeg vil anbefale, at du
tilføjer noget til release nummeret, f.eks. initialer
plus et nummer, som du ændrer hvis du har brug for
flere forsøg.
6. Prøv først at bygge en ny .src.rpm fil med:
rpmbuild -bs whatever.spec
7. Prøv derefter at bygge en .rpm fil med:
rpmbuild -bb whatever.spec
8. Hvis det lykkedes at bygge .rpm filen, så prøv at
installere den på samme måde som du ville gøre med
enhver anden opdatering (kræver naturligvis root).

--
Kasper Dupont
Note to self: Don't try to allocate
256000 pages with GFP_KERNEL on x86.

Per Thomsen (10-08-2005)
Kommentar
Fra : Per Thomsen


Dato : 10-08-05 00:58

Kasper Dupont wrote:
> Per Thomsen wrote:
>
>>Det går sådan set fint nok, derfor kopierer jeg den nye .so over hvor
>>den gamle lå, og genstarter apache
>
>
> Det synes jeg så ikke lyder som nogen god idé. Jeg ville
> enten installere det hele med make install eller også
> byge en rpm fil udfra .src.rpm filen.
>
> For at modificere og bygge udfra .src.rpm filen skal du
> gøre følgende:
> 1. Opret en ~/.rpmmacros fil med et indhold i stil med:
> %_topdir   /home/foo/redhat
> 2. Opret de nødvendige directories, f.eks. med:
> cp -r /usr/src/redhat ~
> 3. Installer .src.rpm filen. Hvis du fik de første to
> skridt udført rigtigt burde installationen forløbe
> fint uden at kræve root permissions.
> 4. Smid den patch du vil teste ind i SOURCES directoriet.
> 5. Ret i .spec filen i SPECS directoriet, du skal tilføje
> navnet på patchen to steder (der er sikkert masser af
> eksempler at se på). Jeg plejer at smide patches ind
> efter alle de eksisterende. Jeg vil anbefale, at du
> tilføjer noget til release nummeret, f.eks. initialer
> plus et nummer, som du ændrer hvis du har brug for
> flere forsøg.
> 6. Prøv først at bygge en ny .src.rpm fil med:
> rpmbuild -bs whatever.spec
> 7. Prøv derefter at bygge en .rpm fil med:
> rpmbuild -bb whatever.spec
> 8. Hvis det lykkedes at bygge .rpm filen, så prøv at
> installere den på samme måde som du ville gøre med
> enhver anden opdatering (kræver naturligvis root).
>

Kanon... så fik jeg det til at virke. Tak for at du pegede mig i
retningen af RPM :)

Nu var det jo ikke fordi jeg havde en patch, men skulle først lave en.
Det jeg endte med at gøre var:

Jeg startede med pkt 1 og 2 i ovenstående.

Jeg hentede og installerede så
<http://fedora.server4you.net/fedora/core/updates/4/SRPMS/php-5.0.4-10.3.src.rpm>

Da jeg havde installeret den, så jeg, at der var en
   ~/redhat/SOURCES/php-5.0.4.tar.gz

Så gjorde jeg følgende:
   cd ~/src
   tar zxvf ~/redhat/SOURCES/php-5.0.4.tar.gz
   cd php-5.0.4/ext/mysqli
   cp mysqli_nonapi.c mysqli_nonapi.c.fix
   
Så rettede jeg det der skulle rettes i mysqli_nonapi.c og:
   cd ~/src
   gendiff php-5.0.4 .fix >php-5.0.4-mysqli-fc4-x86_64.patch
   cp php-5.0.4-mysqli-fc4-x86_64.patch ~/redhat/SOURCES/.

og så var det jeg måtte ind i spec filen (~/redhat/SPECS/php.spec)

Jeg fandt en sektion der startede med kommentaren:
   # Fixes for extension modules
og heri var der linjer af denne type:
   Patch27: php-5.0.4-gd.patch
Jeg tilføjede så
   Patch28: php-5.0.4-mysqli-fc4-x86_64.patch
(den næste sektion startede med Patch30, så 28 var ledig).

Længere nede fandt jeg så linjer af denne art:
   %patch27 -p1 -b .gd
og jeg tilføjede:
   %patch28 -p1 -b .mysqli-fc4-x86_64

(Jeg gik ud fra det var du mente med at der var to steder jeg skulle
rette, for jeg kunne ikke finde andre - og det virker jo).

Så var det jeg gav mig til at rode med Release-numret.
Til at starte med satte jeg Release version for hele rpm'en til
10.3pert1, men det gav mig senere nogle problemer, når jeg forsøgte at
installere php-mysql-5.0.4-10.3pert1.x86_64.rpm (det var jo kun den jeg
ville opdatere).
Den klagede over at den manglede alle mulige *-10.3pert1.x86_64
dependencies (alle sammen fra rpm'en). Jeg kunne måske have installeret
hele pakken, men det var jo ikke det jeg ville :).

Så lod jeg selve pakkens Release-nummer være 10.3
Jeg fandt i stedet for sektionen med:
%package mysql
I denne sektion tilføjede jeg efter "Group: Development/Languages"
   Version: 5.0.4
   Release: 10.3pert1
og ændrede:
   Requires: php = %{version}-%{release}
til:
   Requires: php = %{version}-10.3

Måske kunne jeg godt have undværet "Version: 5.0.4", men det virkede, så
jeg lod den være.

Så:
   cd ~/redhat/SPECS
   rpmbuild -bs php.spec
   rpmbuild -bb php.spec
   su -
   cd /home/pert/redhat/RPMS
   rpm -U --test php-mysql-5.0.4-10.3pert1.x86_64.rpm

Den brokkede sig ikke over noget (det var den der brokkede sig over
versionnumret tidligere), derfor:
   rpm -U php-mysql-5.0.4-10.3pert1.x86_64.rpm
   tail -f /etc/httpd/logs/error_log
og i en ny terminal:
   apachectl graceful

og sørme... ingen klager i error_log.
Så rettede jeg mit tidligere patch af phpMyAdmin tilbage, og startede
det op... og heller ingen klager der.

Tusind tak for hjælpen.

Og skulle nogen være interesseret:
http://www.pert.dk/RPMS/php-mysql-5.0.4-10.3pert1.x86_64.rpm

MVH Per Thomsen,
http://www.pert.dk/

Kasper Dupont (09-08-2005)
Kommentar
Fra : Kasper Dupont


Dato : 09-08-05 07:29

Per Thomsen wrote:
>
> Kanon... så fik jeg det til at virke. Tak for at du pegede mig i
> retningen af RPM :)

Glimrende. Jeg var lidt betænkelig ved om min forklaring
var grundig nok.

>
> Så rettede jeg det der skulle rettes i mysqli_nonapi.c og:
> cd ~/src
> gendiff php-5.0.4 .fix >php-5.0.4-mysqli-fc4-x86_64.patch

Jeg kendte faktisk ikke gendiff scriptet, men det
kan da være jeg selv vil bruge det i fremtiden.
Det ser ud til at være lidt nemmere end at skulle
lave to directories og så bruge diff -u på dem.

>
> (Jeg gik ud fra det var du mente med at der var to steder jeg skulle
> rette, for jeg kunne ikke finde andre - og det virker jo).

Ja, det er korrekt.

>
> Så var det jeg gav mig til at rode med Release-numret.
> Til at starte med satte jeg Release version for hele rpm'en til
> 10.3pert1, men det gav mig senere nogle problemer, når jeg forsøgte at
> installere php-mysql-5.0.4-10.3pert1.x86_64.rpm (det var jo kun den jeg
> ville opdatere).
> Den klagede over at den manglede alle mulige *-10.3pert1.x86_64
> dependencies (alle sammen fra rpm'en). Jeg kunne måske have installeret
> hele pakken, men det var jo ikke det jeg ville :).

Har du aldrig lagt mærke til hvordan Red Hat gør når
de selv frigiver opdateringer? Alle pakker bygget
udfra samme .src.rpm fil bliver opdateret på en gang,
også selvom det er en lillebitte ændring, der kun
påvirker en af .rpm filerne. (Og så må vi bare finde
os i, at der nogen gange skal downloades adskillige
MB for en one-liner).

>
> Så lod jeg selve pakkens Release-nummer være 10.3
> Jeg fandt i stedet for sektionen med:
> %package mysql
> I denne sektion tilføjede jeg efter "Group: Development/Languages"
> Version: 5.0.4
> Release: 10.3pert1
> og ændrede:
> Requires: php = %{version}-%{release}
> til:
> Requires: php = %{version}-10.3

Tja, sådan kan man jo også gøre.

>
> Og skulle nogen være interesseret:
> http://www.pert.dk/RPMS/php-mysql-5.0.4-10.3pert1.x86_64.rpm

Smider du ikke også lige et link til patch filen?

Nu synes jeg da du skal overveje at gå ind på
https://bugzilla.redhat.com/ og raportere fejlen,
hvis den ikke allerede er der.


(Og bemærk hvor hurtig jeg er til at svare. Mit
svar er postet 17 timer før den posting jeg
svarer på )

--
Kasper Dupont
Note to self: Don't try to allocate
256000 pages with GFP_KERNEL on x86.

Per Thomsen (09-08-2005)
Kommentar
Fra : Per Thomsen


Dato : 09-08-05 16:07

Kasper Dupont wrote:
> Per Thomsen wrote:
[klip]
>
>
>>Så var det jeg gav mig til at rode med Release-numret.
>>Til at starte med satte jeg Release version for hele rpm'en til
>>10.3pert1, men det gav mig senere nogle problemer, når jeg forsøgte at
>>installere php-mysql-5.0.4-10.3pert1.x86_64.rpm (det var jo kun den jeg
>>ville opdatere).
>>Den klagede over at den manglede alle mulige *-10.3pert1.x86_64
>>dependencies (alle sammen fra rpm'en). Jeg kunne måske have installeret
>>hele pakken, men det var jo ikke det jeg ville :).
>
>
> Har du aldrig lagt mærke til hvordan Red Hat gør når
> de selv frigiver opdateringer? Alle pakker bygget
> udfra samme .src.rpm fil bliver opdateret på en gang,
> også selvom det er en lillebitte ændring, der kun
> påvirker en af .rpm filerne. (Og så må vi bare finde
> os i, at der nogen gange skal downloades adskillige
> MB for en one-liner).
>

Nej, det har jeg faktik ikke lige bidt mærke i, jeg plejer bare at køre
en 'yum update' en gang imellem, uden egentlig at holde øje med, hvad
den laver.

[klip]

>>Og skulle nogen være interesseret:
>>http://www.pert.dk/RPMS/php-mysql-5.0.4-10.3pert1.x86_64.rpm
>
>
> Smider du ikke også lige et link til patch filen?

Selfølgelig:
<http://www.pert.dk/patches/php-5.0.4-mysqli-fc4-x86_64.patch>


>
> Nu synes jeg da du skal overveje at gå ind på
> https://bugzilla.redhat.com/ og raportere fejlen,
> hvis den ikke allerede er der.

Jeg startede jo med at rapportere en bug og submitte en
'work-around'-patch til phpMyAdmin. lem9 fra phpMyAdmin har haft kontakt
med folkene bag mysqli, og det var faktisk derfra vi fik selve
rettelsen. De har selv implementeret det i CVS HEAD på php, så på et
tidspunkt kommer den jo med til en update til php pakken (formoder jeg).

Mener du så stadig, jeg bør rapportere det til Redhat?

>
>
> (Og bemærk hvor hurtig jeg er til at svare. Mit
> svar er postet 17 timer før den posting jeg
> svarer på )
>

Ja, jeg havde vist lidt problemer med min NTP server i går.
Det skulle gerne være blevet bedre nu.

MVH Per Thomsen,
http://www.pert.dk/


Kasper Dupont (09-08-2005)
Kommentar
Fra : Kasper Dupont


Dato : 09-08-05 21:13

Per Thomsen wrote:
>
> Selfølgelig:
> <http://www.pert.dk/patches/php-5.0.4-mysqli-fc4-x86_64.patch>

Nå, det var bare en simpel one-liner. Jeg undrer mig
lidt over at de skulle ændre både typen og værdien,
men jeg ved heller ikke noget om, hvordan mysql er
opbygget.

>
> Mener du så stadig, jeg bør rapportere det til Redhat?

Så kommer det jo lidt an på, hvor vigtig rettelsen er.
Hvis den er så vigtig, at de gider udsende nye rpm
filer til FC4, så bør de da lige gøres opmærksom på
problemet. Men hvis det er næsten ligegyldigt og
sagtens kan vente til FC5, så behøver du nok ikke.

>
> >
> >
> > (Og bemærk hvor hurtig jeg er til at svare. Mit
> > svar er postet 17 timer før den posting jeg
> > svarer på )
> >
>
> Ja, jeg havde vist lidt problemer med min NTP server i går.
> Det skulle gerne være blevet bedre nu.

Ja, det er åbenlyst blevet bedre. For din sidste
posting er sendt før den næstsidste.

(NNTP registrerer sædvanligvis ikke nogen
tidsstempler, så jeg har ikke meget at
sammenligne med.)

--
Kasper Dupont
Note to self: Don't try to allocate
256000 pages with GFP_KERNEL on x86.

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste