You are not logged in.
( Translated from my original french post, https://forums.archlinux.fr/viewtopic.php?t=17054, sorry for approximate english )
Hi,
Recently I updated my system like this:
yaourt -Syu
It udpated perl to 5.22.0 version.
Since this update, urxvt fails to run and outputs the following error message:
urxvt: symbol lookup error: urxvt: undefined symbol: Perl_xs_apiversion_bootcheck
I'm a real noob with Perl; recent topics about this problem always give this link as a solution: https://lists.archlinux.org/pipermail/a … 27236.html
So I put the two given scripts (find-broken-perl-packages.sh and module-to-dist.pl) in a temp directory, then made them executable, then run ./find-broken-perl-packages.sh. First error I met is that it didn't find module-to-dist.pl. Ok, it's normal, it's not in the PATH. However the script didn't break, and gave the following infos in the specified temp directory:
local-perl-dists.txt: (void)
local-perl-modules.txt: (void)
local-raw.txt: (void)
pacman.txt:
subversion
perl-dists.txt: (void)
perl-modules.txt: (void)
SVN::_Core
SVN::_Repos
SVN::_Wc
SVN::_Fs
SVN::_Delta
SVN::_Client
SVN::_Ra
raw.txt:
/usr/lib/perl5/vendor_perl/auto/SVN/_Core/_Core.so
/usr/lib/perl5/vendor_perl/auto/SVN/_Repos/_Repos.so
/usr/lib/perl5/vendor_perl/auto/SVN/_Wc/_Wc.so
/usr/lib/perl5/vendor_perl/auto/SVN/_Fs/_Fs.so
/usr/lib/perl5/vendor_perl/auto/SVN/_Delta/_Delta.so
/usr/lib/perl5/vendor_perl/auto/SVN/_Client/_Client.so
/usr/lib/perl5/vendor_perl/auto/SVN/_Ra/_Ra.so
I can imagine that, because module-to-dist.pl did not run, the infos given by the script are only partial. As I don't know Perl at all, I wonder if there is any specific directory where to put perl scripts so they run properly. But to be quick by solving my problem, I just added the scripts directory to the PATH variable (export PATH=$PATH:my_dir). But now the script just blocks indefinitely and quietly; the same happens if I run directly module-to-dist.pl (so it's this last script which is blocking). I didn't see this last problem in any topic.
Several topics talk about cpan, advising to recompile some perl modules with it (the ones given by the script above). Some other answers advise NOT to use cpan, or not to mix the use of cpan with pacman... Arghh, I don't even know this tool (cpan) yet, all I need is to be able to use my favourite console again, but not taking some hours to learn how perl works!
In addition, it seems that Perl_xs_apiversion_bootcheck is a perl core symbol, so, a priori, there is nothing to do with modules.
I also tried to downgrade perl, but there was too many dependency conflicts, and some bad souvenirs about broken systems came back to my memories, then I preferred to give up with this idea.
Here is some topics I read, but they didn't help me to solve my problem now (the perl script is blocking):
https://bbs.archlinux.org/viewtopic.php?id=199413
https://bbs.archlinux.org/viewtopic.php?id=199168
https://bbs.archlinux.org/viewtopic.php?id=198700
Could somebody give me ideas please?
Kernel: 4.0.7-2-ARCH x86_64 (64 bit) Desktop: Fluxbox 1.3.7 Distro: Arch Linux
Last edited by yolenoyer (2015-07-06 23:13:39)
Offline
Have you tried rebuilding urxvt-something package you probably have installed from the AUR?
What's the output of
pacman -Qs rxvt
Offline
$ pacman -Qs rxvt
local/rxvt-unicode-patched 9.21-3
Unicode enabled rxvt-clone terminal emulator (urxvt) with fixed font spacing
local/rxvt-unicode-terminfo 9.21-2
Terminfo files for urxvt
local/urxvt-clipboard 2-2
clipboard script for urxvt
local/urxvt-tabbedex 0.4-4
A tabbed extension for rxvt-unicode with several enhancements
Now rxvt-unicode-patched is installed, but the problem was the same with rxvt-unicode.
I just tried to build aur/rxvt-unicode-cvs, replacing rxvt-unicode-patched : the problem is still there
I also removed urxvt-clipboard and urxvt-tabbedex, because they heavily use perl. Now i have:
$ pacman -Qs rxvt
local/rxvt-unicode-cvs 9.20-2
Unicode enabled rxvt-clone terminal
local/rxvt-unicode-terminfo 9.21-2
Terminfo files for urxvt
Tx for reply
Offline
Did you act on the output of the ML scripts? Or just note that they produced output?
Remove the french repo from your pacman.conf, do a full upgrade and restart the process without yaourt: not understanding the difference between supported and unsupported repos is just going to make your life harder.
Offline
@jasonwryan
No I didn't act on the output, mainly because as I explained, the script didn't work really, it blocks itself when module-to-dist.pl is launched. So I'm expecting some help in order to go on.
My pacman.conf looks like the following (no french repo), is anything wrong in it? I didn't change it too much, I remember I recently uncommented the [community-testing] part in it:
#
# /etc/pacman.conf
#
# See the pacman.nf(5) manpage for option and repository directives
#
# GENERAL OPTIONS
#
[options]
# The following paths are commented out with their default values listed.
# If you wish to use different paths, uncomment and update the paths.
#RootDir = /
#DBPath = /var/lib/pacman/
#CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log
#GPGDir = /etc/pacman.d/gnupg/
HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled
#UseDelta = 0.7
Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
#NoExtract =
# Misc options
#UseSyslog
#Color
#TotalDownload
CheckSpace
#VerbosePkgLists
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.
SigLevel = Required DatabaseOptional
LocalFileSigLevel = Optional
#RemoteFileSigLevel = Required
# NOTE: You must run `pacman-key --init` before first using pacman; the local
# keyring can then be populated with the keys of all official Arch Linux
# packagers with `pacman-key --populate archlinux`.
#
# REPOSITORIES
# - can be defined here or included from another file
# - pacman will search repositories in the order defined here
# - local/custom mirrors can be added here or in separate files
# - repositories listed first will take precedence when packages
# have identical names, regardless of version number
# - URLs will have $repo replaced by the name of the current repo
# - URLs will have $arch replaced by the name of the architecture
#
# Repository entries are of the format:
# [repo-name]
# Server = ServerName
# Include = IncludePath
#
# The header [repo-name] is crucial - it must be present and
# uncommented to enable the repo.
#
IgnorePkg = ode
# The testing repositories are disabled by default. To enable, uncomment the
# repo name header and Include lines. You can add preferred servers immediately
# after the header, and they will be used before the default mirrors.
#[testing]
#Include = /etc/pacman.d/mirrorlist
[core]
Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist
[community-testing]
Include = /etc/pacman.d/mirrorlist
[community]
Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repositories as required here.
#[multilib-testing]
#Include = /etc/pacman.d/mirrorlist
[multilib]
Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs
So I made this :
$ sudo pacman -Syu
There is only a dependency problem with virtualbox-host-modules which i have to solve later, and a new update (phpmyadmin)
Last edited by yolenoyer (2015-07-06 17:19:33)
Offline
Even if it doesn't help, I just discovered that it's no use to test module-to-dist.pl without argument, because then it waits for content fron stdin
Offline
Just follow the instructions on the ML: put both scripts in your path and run the first (find-broken-perl-packages.pl). Then, for all of the modules it lists, remove/rebuild them.
Offline
Ok, I think I'm on the good way...
But really, I wonder if there's not a problem with the perl script...
Let me explain:
I don't know anything about perl language, but i recognized easily the for statement which loops over modules. After a quick search, I just added this line into the loop:
print STDERR $module;
Then I started the find-broken-perl-packages.sh script a few times, without changing anything between each run; then I could see that it freezed (forever) randomly at differents modules. Output examples:
$ ./find-broken-perl-packages.sh
SVN::_Repos
SVN::_Wc
SVN::_Fs
SVN::_Delta
(Freezed there, --> Ctrl-C)
$ ./find-broken-perl-packages.sh
SVN::_Repos
SVN::_Wc
SVN::_Fs
SVN::_Delta
SVN::_Client
SVN::_Ra
results are in "/tmp/find-broken-perl-package.qZ4LT0QJ"
- {local-,}raw.txt is a list of files that caused errors
- pacman.txt is a list of packages that need to be rebuilt. Those are likely AUR packages
- local-perl-dists.txt is a list of cpan distributions installed to site_perl. Use cpan to rebuild them
additional files:
- {local-,}perl-modules.txt is a list of cpan modules that caused errors
- perl-dists.txt is a list of cpan distributions that caused errors
( --> exited successfully)
$ ./find-broken-perl-packages.sh
SVN::_Repos
SVN::_Wc
SVN::_Fs
(Freezed there, --> Ctrl-C)
Offline
It works fine for me...
Remove the broken packages and re-run the script. Rinse and repeat until done.
Offline
So, I tried this:
$ sudo pacman -R devtools
$ sudo pacman -R subversion
(still not working), then:
$ sudo cpan
> force install SVN::Core
[...]
Compilation took too much time... I broke it with Ctrl-C.
I'm getting a bit tired about all this stuff, but i think it's after this that I got the following output with the script:
local-perl-dists.txt:
local-perl-modules.txt:
local-raw.txt:
/usr/lib/perl5/site_perl/Alien/SVN/libsvn_subr-1.so
pacman.txt:
perl-dists.txt:
perl-modules.txt:
raw.txt:
After this I moved the "Alien" folder to a backup place; then the script gave me an empty output (each .txt file was empty). Then I tried to reinstall perl, then different versions of urxvt... but... still the same incantation:
urxvt: symbol lookup error: urxvt: undefined symbol: Perl_xs_apiversion_bootcheck
I give up for today, with a big feeling of frustration... I definitely hate upgrading my system...
Offline
$ sudo cpan > force install SVN::Core [...]
Compilation took too much time... I broke it with Ctrl-C.
I give up for today, with a big feeling of frustration... I definitely hate upgrading my system...
Why on earth would you think, when you are already trying to clean up a borked perl setup, to make it worse?
Stop using cpan. Stop using yaourt. Just use pacman.
Offline
@jasonwryan: Thank you again for your help.
To summarize, here is where i am:
/afac $ ls -1
find-broken-perl-packages.sh
module-to-dist.pl
/afac $ ./find-broken-perl-packages.sh
error: no targets specified (use -h for help)
results are in "/tmp/find-broken-perl-package.av5rYtAo"
- {local-,}raw.txt is a list of files that caused errors
- pacman.txt is a list of packages that need to be rebuilt. Those are likely AUR packages
- local-perl-dists.txt is a list of cpan distributions installed to site_perl. Use cpan to rebuild them
additional files:
- {local-,}perl-modules.txt is a list of cpan modules that caused errors
- perl-dists.txt is a list of cpan distributions that caused errors
/afac $ for file in /tmp/find-broken-perl-package.av5rYtAo/*; do echo $file:; cat $file; done
/tmp/find-broken-perl-package.av5rYtAo/local-perl-dists.txt:
/tmp/find-broken-perl-package.av5rYtAo/local-perl-modules.txt:
/tmp/find-broken-perl-package.av5rYtAo/local-raw.txt:
/tmp/find-broken-perl-package.av5rYtAo/pacman.txt:
/tmp/find-broken-perl-package.av5rYtAo/perl-dists.txt:
/tmp/find-broken-perl-package.av5rYtAo/perl-modules.txt:
/tmp/find-broken-perl-package.av5rYtAo/raw.txt:
/afac $ sudo pacman -S rxvt-unicode
warning: rxvt-unicode-9.21-2 is up to date -- reinstalling
[...]
/afac $ sudo pacman -S perl
warning: perl-5.22.0-1 is up to date -- reinstalling
[...]
/afac $ urxvt
urxvt: symbol lookup error: urxvt: undefined symbol: Perl_xs_apiversion_bootcheck
Still looking for a solution
Offline
OK, let's take a different approach. What is the output of `pacman -Qm`? What is in /usr/bin/site_perl/, /usr/lib/perl5/site_perl/, and /usr/share/perl5/site_perl/? How about `which urxvt`?
Last edited by Scimmia (2015-07-06 22:38:04)
Offline
/afac $ ./find-broken-perl-packages.sh error: no targets specified (use -h for help)
I don't know how that error is produced as it is not part of either script (and you are not supposed to call a target anyway)...
Offline
$ which urxvt
/usr/local/bin/urxvt
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/bin:/tools:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
Shame on me!
I built a custom version of urxvt a few month ago, which took priority over all the versions i tried to install today... I was so focused on this perl upgrade, that I totally forgot it...
/usr/bin/urxvt runs without any problem...
Really thank you for your help!
Offline