Thanks Renaud!

Yes it helps!

On Mon, Oct 2, 2017 at 2:57 AM, Renaud de Villemeur
<renaud.devillem...@free.fr> wrote:
> Hi
>
> I managed to get Sqlite work with Pharo under linux (Fedora), in both 32 and
> 64 bit. The setup has nothing to do with LD_LIBRARY_PATH. I'll use those
> example under fedora linux.
>
> First, of course, you need to install either UDBCSqlite or Garage-Sqlite
> drivers
>
> You first need to have sqlite3 libs installed on your system
> $ rpm -qa | grep sqlite
> sqlite-3.20.1-1.fc26.x86_64
> sqlite-libs-3.20.1-1.fc26.x86_64
> => for 64 bits version
>
> sqlite-3.20.1-1.fc26.i686
> sqlite-libs-3.20.1-1.fc26.i686
> => for 32 bits version
>
> Then find the path of your library
>
> $ rpm -ql sqlite-libs.i686
> /usr/lib/libsqlite3.so.0 -> this is your path in 32 bits
> /usr/lib/libsqlite3.so.0.8.6
> /usr/share/doc/sqlite-libs
> /usr/share/doc/sqlite-libs/README.md
> gnome@rdv:~
> $ rpm -ql sqlite-libs.x86_64
> /usr/lib64/libsqlite3.so.0 -> this is your path in 64 bits
> /usr/lib64/libsqlite3.so.0.8.6
> /usr/share/doc/sqlite-libs
> /usr/share/doc/sqlite-libs/README.md
>
>
> Under Linux, you have to give the library path inside Pharo Image, or link
> the library from pharo VM folder:
>
> 1. Update library path from pharo image
>
> Using UDBDSQLite, update to return the path of the library on your system
>
> UDBCSQLite3Library >> library
>
> Smalltalk os isMacOS ifTrue: [ ^ #sqlite3 ].
>
> ^ 'sqlite3'
>
> to
>
> UDBCSQLite3Library >> library
>
> Smalltalk os isMacOS ifTrue: [ ^ #sqlite3 ].
>
> ^ '/usr/lib/libsqlite3.so.0'
>
>
> If you are using Garage,Update:
>
> GASqlite3FFI >> library
>
> ^ '/usr/lib/libsqlite3.so.0'
>
> 2. link the library from VM folder:
>
> ln -s /usr/lib/libsqlite3.so.0 libsqlite3 or ln -s
> /usr/lib64/libsqlite3.so.0 sqlite3 if the module name is sqlite3 in your
> library method.
>
>
> Then your test should pass green.
>
> The reason it pass under windows is because the method library return by
> default sqlite3, which is the dll name you put under pharo VM directory to
> get it work.
> On linux, unless you link your library in the VM folder, the image has no
> clue where to find sqlite3.
>
> Hope this helps.
> Renaud
>
>
> 2017-09-30 17:16 GMT-04:00 Herby Vojčík <he...@mailbox.sk>:
>>
>> p...@highoctane.be wrote:
>>>
>>> Is https://pharo.fogbugz.com/f/cases/19990 showing again?
>>>
>>> What is the module being loaded ?
>>
>>
>> This seems to be the important question. It seems FFI for some reason
>> struggles with 'lib' and/or '.so.0' things in linux (even if LD_LIBRARY_PATH
>> is properly set).
>>
>> I had to do this:
>>
>> TARGETDIR=`find . -type f -name SqueakSSL.so -print0 | xargs -0 dirname`
>> ln -s `/sbin/ldconfig -p | sed -e 's|[^/]*||' | grep sqlite3`
>> ${TARGETDIR}/sqlite3.so
>>
>> (so, link in plugin directory, and the name is plain 'sqlite3.so'). With
>> that, things work. Maybe, libsqlite.so would do the trick as well, but I got
>> no nerve to play with it more.
>>
>> But, frankly, do not tell me this is what ppl need to do to load external
>> libs in linux. :-/
>>
>> Herby
>>
>>> Phil
>>>
>>>
>>> On Sat, Sep 30, 2017 at 1:28 PM, Herby Vojčík <he...@mailbox.sk
>>> <mailto:he...@mailbox.sk>> wrote:
>>>
>>>     p...@highoctane.be <mailto:p...@highoctane.be> wrote:
>>>
>>>         What about
>>>
>>>         LD_LIBRARY_PATH=<sqlite3place>;$LD_LIBRARYPATH  ./pharo-ui
>>>         some.image
>>>
>>>         Phil
>>>
>>>
>>>     Thanks for answer, did not help.
>>>
>>>     In fact it must be something different. As can be seen in the stack,
>>>     it fails during finalizers, and as can be seen by looking at
>>>     UDBCSQLite3DatabaseExternalObject class>>finalizeResourceData: code,
>>>     the method it calls is sqlite close. It is hardly the first method
>>>     that is should call...
>>>
>>>     I suspect something around image save / load. Again. Lots of errors
>>>     in those parts. But may be something else, as it kicks in only when
>>>     SQLite-using tests starts to run. :-(
>>>
>>>     Herby
>>>
>>>     P.S.: I saw there is a similar thread out there, but it has problems
>>>     with 32bit loaded by 64bit vm; but here, I have 32bit linux, so the
>>>     vm installed should be 32bit.
>>>
>>>         On Thu, Sep 28, 2017 at 7:40 PM, Herby Vojčík <he...@mailbox.sk
>>>         <mailto:he...@mailbox.sk>
>>>         <mailto:he...@mailbox.sk <mailto:he...@mailbox.sk>>> wrote:
>>>
>>>              Hello!
>>>
>>>              I try to deploy UDBCSQLite-using image in a 32bit ubuntu
>>>         16.04.3.
>>>
>>>              I do have libsqlite3:
>>>
>>>              root@32bit-agent:~# find / -name '*libsqlite*' -type f
>>>         2>>/dev/null
>>>              /usr/lib/i386-linux-gnu/libsqlite3.so.0.8.6
>>>              /var/lib/dpkg/info/libsqlite0.list
>>>              /var/lib/dpkg/info/libsqlite3-0:i386.postinst
>>>              /var/lib/dpkg/info/libsqlite3-0:i386.md5sums
>>>              /var/lib/dpkg/info/libsqlite3-0:i386.shlibs
>>>              /var/lib/dpkg/info/libsqlite0.postrm
>>>              /var/lib/dpkg/info/libsqlite3-0:i386.symbols
>>>              /var/lib/dpkg/info/libsqlite3-0:i386.list
>>>              /var/lib/dpkg/info/libsqlite3-0:i386.triggers
>>>
>>> /var/cache/apt/archives/libsqlite0_2.8.17-12fakesync1_i386.deb
>>>
>>>              but I get this in the output of the CI:
>>>
>>>              17:16:54.233 + ../pharo/pharo ./filmtower.image
>>>         conf/run-tests.st <http://run-tests.st>
>>>         <http://run-tests.st>
>>>              17:16:54.508 pthread_setschedparam failed: Operation not
>>>         permitted
>>>              17:16:54.509 This VM uses a separate heartbeat thread to
>>>         update its
>>>              internal clock
>>>              17:16:54.509 and handle events.  For best operation, this
>>>         thread
>>>              should run at a
>>>              17:16:54.509 higher priority, however the VM was unable to
>>>         change
>>>              the priority.  The
>>>              17:16:54.509 effect is that heavily loaded systems may
>>>         experience
>>>              some latency
>>>              17:16:54.509 issues.  If this occurs, please create the
>>>         appropriate
>>>              configuration
>>>              17:16:54.509 file in /etc/security/limits.d/ as shown below:
>>>              17:16:54.509
>>>              17:16:54.509 cat <<END | sudo tee
>>>         /etc/security/limits.d/pharo.conf
>>>              17:16:54.509 *      hard    rtprio  2
>>>              17:16:54.509 *      soft    rtprio  2
>>>              17:16:54.509 END
>>>              17:16:54.509
>>>              17:16:54.509 and report to the pharo mailing list whether
>>> this
>>>              improves behaviour.
>>>              17:16:54.512
>>>              17:16:54.512 You will need to log out and log back in for
>>>         the limits
>>>              to take effect.
>>>              17:16:54.512 For more information please see
>>>              17:16:54.512
>>>
>>> https://github.com/OpenSmalltalk/opensmalltalk-vm/releases/tag/r3732#linux
>>>
>>> <https://github.com/OpenSmalltalk/opensmalltalk-vm/releases/tag/r3732#linux>
>>>
>>> <https://github.com/OpenSmalltalk/opensmalltalk-vm/releases/tag/r3732#linux
>>>
>>> <https://github.com/OpenSmalltalk/opensmalltalk-vm/releases/tag/r3732#linux>>
>>>              17:16:54.785
>>>              17:16:54.786 TowergameSyncTests
>>>              17:16:54.831 Error: External module not found
>>>              17:16:54.832 ExternalLibraryFunction(Object)>>error:
>>>              17:16:54.832
>>>         ExternalLibraryFunction(Object)>>externalCallFailed
>>>              17:16:54.833
>>>
>>> ExternalLibraryFunction(ExternalFunction)>>invokeWithArguments:
>>>              17:16:54.833 UDBCSQLite3DatabaseExternalObject
>>>              class>>finalizeResourceData:
>>>              17:16:54.834 FFICalloutAPI>>function:module:
>>>              17:16:54.834 UDBCSQLite3Library(Object)>>ffiCall:module:
>>>              17:16:54.835 UDBCSQLite3DatabaseExternalObject
>>>              class>>finalizeResourceData:
>>>              17:16:54.836 FFIExternalResourceExecutor>>finalize
>>>              17:16:54.836 WeakFinalizerItem>>finalizeValues
>>>              17:16:54.845 [ each finalizeValues ] in [ :each | [ each
>>>              finalizeValues ] on: Exception fork: [ :ex | ex pass ] ] in
>>>              WeakRegistry>>finalizeValues in Block: [ each finalizeValues
>>> ]
>>>              17:16:54.846 BlockClosure>>on:do:
>>>              17:16:54.852 [ Processor terminateActive ] in [ :ex |
>>>              17:16:54.852 | copy onDoCtx process handler bottom thisCtx |
>>>              17:16:54.852 onDoCtx := thisContext.
>>>              17:16:54.852 thisCtx := onDoCtx home.
>>>              17:16:54.852
>>>              17:16:54.852 "find the context on stack for which this
>>>         method's is
>>>              sender"
>>>              17:16:54.852 [ onDoCtx sender == thisCtx ]
>>>              17:16:54.852    whileFalse: [ onDoCtx := onDoCtx sender.
>>>              17:16:54.852            onDoCtx
>>>              17:16:54.852                    ifNil: [ "Can't find our
>>> home
>>>              context. seems like we're already forked
>>>              17:16:54.852                            and handling another
>>>              exception in new thread. In this case, just pass it through
>>>              handler." ^ handlerAction cull: ex ] ].
>>>              17:16:54.852 bottom := [ Processor terminateActive ]
>>> asContext.
>>>              17:16:54.853 onDoCtx privSender: bottom.
>>>              17:16:54.853 handler := [ handlerAction cull: ex ]
>>> asContext.
>>>              17:16:54.853 handler privSender: thisContext sender.
>>>              17:16:54.853 (Process forContext: handler priority:
>>> Processor
>>>              activePriority)
>>>              17:16:54.853    resume.
>>>              17:16:54.853
>>>              17:16:54.853 "cut the stack of current process"
>>>              17:16:54.853 thisContext privSender: thisCtx.
>>>              17:16:54.853 nil ] in BlockClosure>>on:fork: in Block: [
>>>         Processor
>>>              terminateActive ]
>>>              17:16:54.989
>>>
>>>              Look like pharo was not able to find the sqlite3 lib.
>>>
>>>              Any help?
>>>
>>>              Thanks, Herby
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>

Reply via email to