Closed badetitou closed 1 year ago
About your idea: we need to have different versions with linked to local libC or not and probably several different install processes that also check what is present but this is a lot of work. But the move to OBS and Cmake was a step in that direction.
Hi @badetitou it is a problem of dependencies, you can try installing pharo using the libraries in the system though the packaging system of your distribution, as explained in https://pharo.org/download.html
This will not work directly with the launcher, but in the launcher you can define an external VM.
My problem is not to install Pharo It is to use the Pharo Launcher to install Pharo.
Do you know if it is possible to configure the Pharo Launcher to change the location in which it downloads an image?
@badetitou Yes - there is a setting
Sorry, I wrote incorrectly, I mean. Is it possible to configure the Pharo Launcher to change the location from which it downloads an image?
I would like to modify the PL in a way that, when I want to download a VM for P9, it downloads the VM coming with all dependencies (given by @tesonep ) (https://software.opensuse.org/download.html?project=devel:languages:pharo:latest&package=pharo9-ui)
How do you please make the Arch package to install?
Thanks for the report. We will check and reply to you.
How do you please make the Arch package to install?
I confirm the issue with my new installation of Arch linux in Virtualbox
We are puzzled :) because this is the distribution esteban is daily using.
I was able to install it using
pacman -S pharo9-ui --overwrite '*'
But there seems to be another issues. There is now a pharo99.0 folder, is this expected?. Extracting the zst files gives:
[kotshie@razer-stealth Downloads]$ tar -I zstd -xvf pharo9-9.0.0-0-x86_64.pkg.tar.zst
.BUILDINFO
.MTREE
.PKGINFO
usr/
usr/bin/
usr/bin/pharo
usr/lib64/
usr/lib64/pharo99.0/
usr/lib64/pharo99.0/bin/
usr/lib64/pharo99.0/bin/pharo
usr/lib64/pharo99.0/lib/
usr/lib64/pharo99.0/lib/libB2DPlugin.so
usr/lib64/pharo99.0/lib/libBitBltPlugin.so
usr/lib64/pharo99.0/lib/libDSAPrims.so
usr/lib64/pharo99.0/lib/libFileAttributesPlugin.so
usr/lib64/pharo99.0/lib/libFilePlugin.so
usr/lib64/pharo99.0/lib/libJPEGReadWriter2Plugin.so
usr/lib64/pharo99.0/lib/libJPEGReaderPlugin.so
usr/lib64/pharo99.0/lib/libLargeIntegers.so
usr/lib64/pharo99.0/lib/libLocalePlugin.so
usr/lib64/pharo99.0/lib/libMiscPrimitivePlugin.so
usr/lib64/pharo99.0/lib/libPharoVMCore.so
usr/lib64/pharo99.0/lib/libSocketPlugin.so
usr/lib64/pharo99.0/lib/libSqueakSSL.so
usr/lib64/pharo99.0/lib/libSurfacePlugin.so
usr/lib64/pharo99.0/lib/libTestLibrary.so
usr/lib64/pharo99.0/lib/libUUIDPlugin.so
usr/lib64/pharo99.0/lib/libUnixOSProcessPlugin.so
usr/lib64/pharo99.0/lib/pharo
usr/lib64/pharo99.0/pharo
And when installing it /usr/bin/pharo-ui symlink is broken. It points to /pharo9.0/pharo-ui ?
lrwxrwxrwx 1 root root 18 Aug 6 09:56 /usr/bin/pharo-ui -> /pharo9.0/pharo-ui
Following the advice of @tesonep, I achieve to package a VM that works in ArchLinux 90-x64-Arch.zip
You only have to unzip it.
Then, you can use ./pharo
for the version with UI
And ./pharo-headless
for the version without UI
No need to unzip at a special location
Until a better solution, I hotfix the launcher to use this VM for people using the aur pharo launcher repository
So, It is now possible to use P9 in archlinux using the aur repo
Thanks benoit
I had to install libgit2 separately (although git is installed), but after that it works well. Thank you all
Pablo told me that he updated the dependencies so we will see.
I have the same problem on arch. I installed libgit2 from the official repository, but it didn't help. After launching pharo 9/10 from the launcher installed via AUR, I get the same error. This did not allow me to install Seaside to try to write a REST service.
So I think its pretty critical problem. Do I need to do something specifically in the launcher itself?
UPD: I'm not sure what exactly made everything work, I deleted Pharo and all the files associated with it, installed it again and now everything works.
I took the Pharo Launcher and used the linuxdeploy
tool to bundle and patch all dependencies starting from an openSUSE 15.2. Despite using the bundled libgit2 that seems to have all deps fulfilled, I am getting the following stacktrace:
primitive #primLoadSymbol:module: in TFFIBackend failed
TFFIBackend(ProtoObject)>>primitiveFailed:
TFFIBackend(ProtoObject)>>primitiveFailed
TFFIBackend>>primLoadSymbol:module:
TFFIBackend>>loadSymbol:module:
ExternalAddress class>>loadSymbol:module:
TFExternalFunction>>validate
TFSameThreadCall>>executeOn:withArguments:
TFSameThreadRunner>>invokeFunction:withArguments:
LGitLibrary>>libgit2_init
TFCalloutAPI(FFICalloutAPI)>>function:library:
TFCalloutAPI(FFICalloutAPI)>>function:module:
LGitLibrary(FFILibrary)>>ffiCall:
LGitLibrary>>libgit2_init
[ self libgit2_init.
self recordInitializationSuccess ] in LGitLibrary>>initializeLibGit2 in Block: [ self libgit2_init....
FullBlockClosure(BlockClosure)>>on:do:
LGitLibrary>>initializeLibGit2
LGitLibrary class>>startUp:
ClassSessionHandler>>startup:
[ :each | each startup: isImageStarting ] in WorkingSession>>runStartup: in Block: [ :each | each startup: isImageStarting ]
[aBlock value: each] in [ :each |
[aBlock value: each]
on: Exception
do: [ :error | self errorHandler handleError: error] ] in WorkingSession>>runList:do: in Block: [aBlock value: each]
FullBlockClosure(BlockClosure)>>on:do:
[ :each |
[aBlock value: each]
on: Exception
do: [ :error | self errorHandler handleError: error] ] in WorkingSession>>runList:do: in Block: [ :each | ...
Array(SequenceableCollection)>>do:
WorkingSession>>runList:do:
WorkingSession>>runStartup:
WorkingSession>>start:
SessionManager>>launchSnapshot:andQuit:
[ isImageStarting := self launchSnapshot: save andQuit: quit.
wait signal. ] in SessionManager>>snapshot:andQuit: in Block: [ isImageStarting := self launchSnapshot: save and...etc...
[self value.
"IMPORTANT: Do not step over next line of code. See method comments for details"
Processor terminateRealActive] in FullBlockClosure(BlockClosure)>>newProcess in Block: [self value....
PrimitiveFailed: primitive #primLoadSymbol:module: in TFFIBackend failed
TFFIBackend(ProtoObject)>>primitiveFailed:
TFFIBackend(ProtoObject)>>primitiveFailed
TFFIBackend>>primLoadSymbol:module:
TFFIBackend>>loadSymbol:module:
ExternalAddress class>>loadSymbol:module:
TFExternalFunction>>validate
TFSameThreadCall>>executeOn:withArguments:
TFSameThreadRunner>>invokeFunction:withArguments:
LGitLibrary>>libgit2_init
TFCalloutAPI(FFICalloutAPI)>>function:library:
TFCalloutAPI(FFICalloutAPI)>>function:module:
LGitLibrary(FFILibrary)>>ffiCall:
LGitLibrary>>libgit2_init
[ self libgit2_init.
self recordInitializationSuccess ] in LGitLibrary>>initializeLibGit2 in Block: [ self libgit2_init....
FullBlockClosure(BlockClosure)>>on:do:
LGitLibrary>>initializeLibGit2
LGitLibrary class>>startUp:
ClassSessionHandler>>startup:
[ :each | each startup: isImageStarting ] in WorkingSession>>runStartup: in Block: [ :each | each startup: isImageStarting ]
[aBlock value: each] in [ :each |
[aBlock value: each]
on: Exception
do: [ :error | self errorHandler handleError: error] ] in WorkingSession>>runList:do: in Block: [aBlock value: each]
FullBlockClosure(BlockClosure)>>on:do:
[ :each |
[aBlock value: each]
on: Exception
do: [ :error | self errorHandler handleError: error] ] in WorkingSession>>runList:do: in Block: [ :each | ...
Array(SequenceableCollection)>>do:
WorkingSession>>runList:do:
WorkingSession>>runStartup:
WorkingSession>>start:
SessionManager>>launchSnapshot:andQuit:
[ isImageStarting := self launchSnapshot: save andQuit: quit.
wait signal. ] in SessionManager>>snapshot:andQuit: in Block: [ isImageStarting := self launchSnapshot: save and...etc...
[self value.
"IMPORTANT: Do not step over next line of code. See method comments for details"
Processor terminateRealActive] in FullBlockClosure(BlockClosure)>>newProcess in Block: [self value....
Maybe this helps the devs?
I think I have solved this problem In the class LGitLibrary (package LibGit-Core), I have modified the method unix64LibraryName adding the following code at the beginning of the method
^ FFIUnix64LibraryFinder findAnyLibrary: #(
"This name is wrong, but some versions of the VM has this library shipped with the bad name"
'libgit2.so.1.4'
'libgit2.so.1.4.0'
'libgit2.so'
...
after I have installed the package libgit2 from pacman.
Now, when I try to clone a project, pharo crashes and the file "crash.dmp" is the following crash.txt
i see the same issues with pharo 9 & 10 on aws-linux.
Until a better solution, I hotfix the launcher to use this VM for people using the aur pharo launcher repository
So, It is now possible to use P9 in archlinux using the aur repo
I tried this solution for the same issue I was getting with Pharo 10, but the fix did apply to Pharo 9. I am thrown the exact same error.
EDIT: adding crash and debug logs (now on Pharo 10 since last edit) PharoDebug.txt crash.txt
Actually I have the same problem for what i understand in Archlinux (Pharo 9 to 11). But i manage to fix it : First from the Pharo execption stack i find there was a problem with provided libgit2.1.0.0.so in ~/Pharo/vms/110-x64/lib By checking with ldd i get this result:
linux-vdso.so.1 (0x00007ffcf9bda000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f1756fb1000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f1756f90000)
libssl.so.1.0.0 => /usr/lib/libssl.so.1.0.0 (0x00007f1756f22000)
libcrypto.so.1.0.0 => /usr/lib/libcrypto.so.1.0.0 (0x00007f1756cb0000)
libpcre.so.3 => not found
libpcreposix.so.3 => not found
libz.so.1 => /usr/lib/libz.so.1 (0x00007f1756c94000)
libssh2.so.1 => /usr/lib/libssh2.so.1 (0x00007f1756c53000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f1756a87000)
/usr/lib64/ld-linux-x86-64.so.2 (0x00007f175739c000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f1756a80000)
libssl.so.1.1 => /usr/lib/libssl.so.1.1 (0x00007f17569ee000)
libcrypto.so.1.1 => /usr/lib/libcrypto.so.1.1 (0x00007f175670d000)
NOTE: libpcre.so.3 and libpcreposix.so.3 not found. After searching on internet i find a forum post explaining that there a wierd name change in Debian of the filname of pcre library: https://www.gamingonlinux.com/articles/tibia-is-a-free-to-play-mmo-that-has-supported-linux-for-a-long-time-fix-included-for-ubuntu.10810/comment_id=108806
So i do a piggy solution:
sudo ln -s /usr/lib/libpcre.so /usr/lib/libpcre.so.3
and
sudo ln -s /usr/lib/libpcreposix.so /usr/lib/libpcreposix.so.3
I know it's dirty but it fixed my problem no more problem with (Pharo 11 10 and 9)
Hoping it can help others Regards.
So i do a piggy solution:
sudo ln -s /usr/lib/libpcre.so /usr/lib/libpcre.so.3
andsudo ln -s /usr/lib/libpcreposix.so /usr/lib/libpcreposix.so.3
I know it's dirty but it fixed my problem no more problem with (Pharo 11 10 and 9)
It works! @SmallCoder37 . Thanks.
Thanks for your find @SmallCoder37.
I'm experiencing a similar issue on Gentoo thanks to the names of the libraries. To avoid changing stuff in system directories, I would recommend linking from your system libraries to pharo-vm/lib
. I did it like so, and bringing in those two libraries seemed to be enough.
ln -s /lib64/libpcre.so.1 libpcre.so.3
ln -s /lib64/libpcre2-posix.so.3 libpcreposix.so.3
I am on Manjaro Linux (arch-based) but it may applies to other linux.
Launching a fresh Pharo image 9, 10, 11 raise an exception at startup. symbol git_libgit2_init not found in 'libgit2.so.1.0.0'
ldd libgit2.1.0.0.so
linux-vdso.so.1 (0x00007fff7e1ad000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007efeafe2c000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007efeafe27000)
libssl.so.1.0.0 => /usr/lib/libssl.so.1.0.0 (0x00007efeafdb9000)
libcrypto.so.1.0.0 => /usr/lib/libcrypto.so.1.0.0 (0x00007efeaf78e000)
libpcre.so.3 => not found
libpcreposix.so.3 => not found
libz.so.1 => /usr/lib/libz.so.1 (0x00007efeafd9d000)
libssh2.so.1 => /usr/lib/libssh2.so.1 (0x00007efeaf74d000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007efeaf541000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007efeafd98000)
libssl.so.1.1 => /usr/lib/libssl.so.1.1 (0x00007efeaf4ac000)
libcrypto.so.1.1 => /usr/lib/libcrypto.so.1.1 (0x00007efeaf1cc000)
/usr/lib64/ld-linux-x86-64.so.2 (0x00007efeafe5e000)
We cannot install them:
$ pacman -F libpcreposix.so.3
<nothing> => there is no Arch package that provides it
Looking for another version of libprce:
$ pacman -F libpcre.so
core/pcre 8.45-1 [installed]
usr/lib/libpcre.so
multilib/lib32-pcre 8.45-1
usr/lib32/libpcre.so
Install it:
$ sudo pacman -S libpcre.so
$ pacman -Fl pcre | egrep 'so$' ✔
pcre usr/lib/libpcre.so
pcre usr/lib/libpcre16.so
pcre usr/lib/libpcre32.so
pcre usr/lib/libpcrecpp.so
pcre usr/lib/libpcreposix.so
Add local (not system-wide, just in case) links to make the pharo vm happy:
$ cd <vm_dir>/lib
$ ln -s /usr/lib/libpcre.so libpcre.so.3
$ ln -s /usr/lib/libpcreposix.so libpcreposix.so.3
The Pharo VM 10 is shipped with multiple versions of libgit:
$ ls libgit*
libgit2.1.0.0.so libgit2.so libgit2.so.0.25.1 libgit2.so.25
I had to install some system packages to resolve libgit2.so
dependencies on my system:
sudo pacman -S libcurl3-gnutls
And then, I modified the libgit library name used by Pharo:
LGitLibrary>>unix64LibraryName
^ FFIUnix64LibraryFinder findAnyLibrary: #(
'libgit2.so'
'libgit2.1.0.0.so'
"kept for compatibility"
'libgit2.so.1.0.0'
'libgit2.so.1.0'
'libgit2.so.1.1'
'libgit2.so.1.2'
'libgit2.so.1.3'
'libgit2.so.1.4'
'libgit2.so.0.25.1')
Pull request here: https://github.com/pharo-vcs/libgit2-pharo-bindings/pull/64
I do not know how to propagate it in Pharo9 10 11
Thank you LucFabresse for your patch, it works for me (Arch 64bit with Pharo 11).
Another approach for the solution 2 is to preload libgit2 like:
LD_PRELOAD=Pharo/vms/110-x64/lib/libssl.so.1.0.0:Pharo/vms/110-x64/lib/libcrypto.so.1.0.0:Pharo/vms/110-x64/lib/libgit2.so ./vms/110-x64/bin/pharo ./images/<path to pharo image>
Since Pharo is shipped with several versions of libgit2, it could try to load each library file found until one succeed.
Another approach would be to let pharo-installer select the right library, either when downloading the image or using a post install script.
One more solution: simply to rename the file libgit2.so into libgit2.1.0.0.so in the vms/XXX/lib directory.
Le mar. 9 août 2022, 22:50, Ludovic Guegan @.***> a écrit :
Since Pharo is shipped with several versions of libgit2, it could try to load each library file found until one succeed.
This is what it does IIRC.
Another approach would be to let pharo-installer select the right library,
either when downloading the image or using a post script install.
— Reply to this email directly, view it on GitHub https://github.com/pharo-project/pharo/issues/9729#issuecomment-1209880605, or unsubscribe https://github.com/notifications/unsubscribe-auth/AADJO4A7N5DRMBT5EMTULO3VYLAAFANCNFSM5BPIPMUA . You are receiving this because you commented.Message ID: @.***>
Hi Luc, when I looked at it, it seems the behavior is to search for a list of libraries. If a file is found, the search stops and it tries to load it. If it fails to load it, it doesn't retry with other librairies. That's my understanding.
ok, this solved now (you have an OBS job that build the VM for arch)
Bug description when I tried to run image based on Pharo 9, I got error:
PrimitiveFailed: primitive #primLoadSymbol:module: in TFFIBackend failed
.To Reproduce Steps to reproduce the behavior:
Expected behavior Should work without any error
Screenshots
Idea Why the libgit version could not be linked to "generic" lib as explained in: https://github.com/micropython/micropython-lib/issues/25
Version information:
Additional context More information in the Pharo Launcher aur repo of archlinux: https://aur.archlinux.org/packages/pharo-launcher/#news