View previous topic :: View next topic |
Author |
Message |
axisofadvance n00b
Joined: 22 Oct 2018 Posts: 12
|
Posted: Mon Oct 22, 2018 8:17 pm Post subject: [Solved] Shared library linking issue |
|
|
Hi everyone,
I'm a first-time poster and fairly new to Gentoo, so please excuse my ignorance.
I'm running 4.9.95 x86_64 with KDE5 and have had a rock-solid system for a while now. Today I was in search of a UML designer and downloaded BOUML 7.7.1 which stupidly I proceeded to unpack in /usr/bin/ instead of something like ~/usr/local/
Upon trying to launch the application, it complained of a missing Qt3 library, which was present on the system, so I ran ldconfig.
Shortly thereafter, I noticed that I couldn't invoke any programs, like urxvt. I rebooted and now I can't start KDE either. Startx complains that kstartupconfig5 does not exist or fails. The error code is 127.
Quote: | kstartupconfig5: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory.
xinit: connection to X server lost. |
This missing library problem extends to portage as well.
Code: | $ whereis emerge
emerge: /usr/bin/emerge /usr/share/man/man1/emerge.1.bz2
#env-update -h
-su: env-update: command not found
#emerge
-su: emerge: command not found
|
I've searched the forum, but so far haven't found any posts to guide me out of this mess.
Any guidance, wisdom, etc. is greatly appreciated. Thank you all in advance for your time and patience.
P.S. The filesystem is clean according to fsck.
Last edited by axisofadvance on Mon Oct 29, 2018 2:02 am; edited 1 time in total |
|
Back to top |
|
|
ct85711 Veteran
Joined: 27 Sep 2005 Posts: 1791
|
Posted: Mon Oct 22, 2018 8:35 pm Post subject: |
|
|
Well, 2 things I'd check is first see if those programs will run if call it directly, so try like
Code: | /usr/bin/emerge --info |
By specifying the full path to the program, the system doesn't need to look for it and ensure it still works.
The other part to check, is the contents of the PATH variable, it specifies where the system looks for a program/command. You can check the value with a simple
On my system, it should look like this for a regular user
Code: | $ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin |
For a root user (using regular su not su -), I get this for my system
Code: | # echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin
|
|
|
Back to top |
|
|
axisofadvance n00b
Joined: 22 Oct 2018 Posts: 12
|
Posted: Mon Oct 22, 2018 9:42 pm Post subject: |
|
|
Quote: | Well, 2 things I'd check is first see if those programs will run if call it directly, so try like... |
Code: |
$ls -la /usr/bin/
lrwxrwxrwx 1 root root 31 Jun 23 18:31 emerge -> ../lib/python-exec/python-exec2
$/usr/bin/emerge --info
-bash: /usr/bin/emerge: No such file or directory
|
Quote: | The other part to check, is the contents of the PATH variable, it specifies where the system looks for a program/command. |
PATH seems ok:
Code: | /usr/x86_64-pc-linux-gnu/gcc-bin/7.3.0:/usr/lib/llvm/5/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin |
The PATH variable for root looks identical to yours. |
|
Back to top |
|
|
axisofadvance n00b
Joined: 22 Oct 2018 Posts: 12
|
Posted: Mon Oct 22, 2018 10:12 pm Post subject: |
|
|
In the case of Portage, it looks like I have a broken link:
Quote: | $readlink emerge
../lib/python-exec/python-exec2
$file emerge
emerge: broken symbolic link to ../lib/python-exec/python-exec2 |
It seems that this isn't the only broken slink in /usr/bin/:
Quote: | $find -xtype l
./ebuild
./pip2.7
./mesontest
./trial
./mesonintrospect
./egencache
./pyuic5
./cython
...
...
./emerge
./compton-convgen |
There are about 73 total.
If I try to get some info on the links and link targets, they all seem to point to ../lib/python-exec/python-exec2.
Code: | $find -L . -type l -printf "%l %h/%f\n"
../lib/python-exec/python-exec2 ./ebuild
../lib/python-exec/python-exec2 ./pip2.7
...
../lib/python-exec/python-exec2 ./emerge |
Does this make sense? I'm also confused in what I have done that would have blown away all these links? |
|
Back to top |
|
|
khayyam Watchman
Joined: 07 Jun 2012 Posts: 6227 Location: Room 101
|
Posted: Mon Oct 22, 2018 10:24 pm Post subject: |
|
|
axisofadvance ...
re-merge python-exec:
Code: | # /usr/lib/python-exec/python2.7/emerge --oneshot dev-lang/python-exec |
best ... khay |
|
Back to top |
|
|
axisofadvance n00b
Joined: 22 Oct 2018 Posts: 12
|
Posted: Mon Oct 22, 2018 11:27 pm Post subject: |
|
|
To me it looked like all the symlinks were erroneously pointing to ../lib/python-exec/python-exec2, am I misinterpreting what I'm seeing?
Along the same train of thought, I tried to recreate the Portage symlink as per the Wiki:
Code: | # ln -sf ../lib/portage/bin/emerge /usr/bin/emerge |
However I'm still unable to run emerge.
EDIT:
It also seems I'm missing /usr/bin/python-exec/ in it's entirety, as changing Python from 3.5 to 2.7 and attempting to invoke /usr/lib/python-exec/python2.7/emerge shows [Errno 2] No such file or directory. |
|
Back to top |
|
|
axisofadvance n00b
Joined: 22 Oct 2018 Posts: 12
|
Posted: Tue Oct 23, 2018 12:39 am Post subject: |
|
|
Hey khay,
Fast fingers, sorry. I did run the command as you wrote it... seems the problem is with the python-exec wrapper.
Quote: | # /usr/lib/python-exec/python2.7/emerge --oneshot dev-lang/python-exec
bash: /usr/lib/python-exec/python2.7/emerge: No such file or directory |
This looks like that reoccurring pip problem, no? At this point I'm looking at a manual Portage re-install? |
|
Back to top |
|
|
khayyam Watchman
Joined: 07 Jun 2012 Posts: 6227 Location: Room 101
|
Posted: Tue Oct 23, 2018 9:09 am Post subject: |
|
|
axisofadvance wrote: | This looks like that reoccurring pip problem, no? At this point I'm looking at a manual Portage re-install? |
axisofadvance ... pip (if run as root) will normally break python-exec, the solution is to re-merge python-exec by providing the full path to emerge (as shown above). Doing this should fix the symlinks, and resolve the issue. Those links (ie, /usr/bin/emerge) should point to python-exec2 ... that's the normal state of affairs, it's python-exec's job to decide what python version is run, and where the (actual) python code can be found. In your case something else seems broken, probably python, can you provide the output of the following:
Code: | # ls -ld /usr/{bin,lib}/python*
# eselect python list |
You may be able still to fix this, so hold off on the reinstall. BTW, I'm busy packing, and may not get back to answer you later, hopefully someone else will step in if that should be the case.
best ... khay |
|
Back to top |
|
|
axisofadvance n00b
Joined: 22 Oct 2018 Posts: 12
|
Posted: Tue Oct 23, 2018 11:46 am Post subject: |
|
|
Hey khay, I really appreciate your help - thank you.
The output of is as follows:
Code: | ls:cannot access '/usr/lib/python*': No such file or directory |
Followed by the following list, including the 3 broken symlinks:
/usr/bin/python -> python-exec2c
/usr/bin/python2 -> python-exec2c
/usr/bin/python2.7
/usr/bin/python2.7-config
/usr/bin/python2-config -> ../lib/python-exec/python-exec2
/usr/bin/python3 -> python-exec2c
/usr/bin/python3.5 -> python3.5m
/usr/bin/python3.5-config -> python3.5m-config
/usr/bin/python3.5m
/usr/bin/python3.5m-config
/usr/bin/python3.6 -> python3.6m
/usr/bin/python3.6-config -> python3.6m-config
/usr/bin/python3.6m
/usr/bin/python3.6m-config
/usr/bin/python3-config -> ../lib/python-exec/python-exec2
/usr/bin/python-config -> ../lib/python-exec/python-exec2
/usr/bin/python-exec2c
EDIT:
Quote: | # eselect python list |
Available Python interpreters, in order of preference:
[1] python2.7 (this was a recent change by me while troubleshooting this, it was a fallback version previously)
[2] python3.5
[3] python3.6 (fallback) |
|
Back to top |
|
|
khayyam Watchman
Joined: 07 Jun 2012 Posts: 6227 Location: Room 101
|
Posted: Tue Oct 23, 2018 2:07 pm Post subject: |
|
|
axisofadvance wrote: | Code: | ls:cannot access '/usr/lib/python*': No such file or directory |
|
axisofadvance ... gahh, I wasn't accounting for the renaming for 64bit that happened recently, so that lib is in fact probably lib64 ... please try again with the following:
Code: | # ls -ld /usr/{bin,lib*}/python* |
best ... khay |
|
Back to top |
|
|
axisofadvance n00b
Joined: 22 Oct 2018 Posts: 12
|
Posted: Tue Oct 23, 2018 2:11 pm Post subject: |
|
|
Hey khay,
Here's the updated output:
Code: | /usr/lib64/python2.7
/usr/lib64/python3.5
/usr/lib64/python3.6
/usr/lib64/python-exec |
As I mentioned in an edit to my last reply, python3.6 is currently set as a fallback, 2.7 and 3.5 are preferred (in that order).
Thanks again! |
|
Back to top |
|
|
khayyam Watchman
Joined: 07 Jun 2012 Posts: 6227 Location: Room 101
|
Posted: Tue Oct 23, 2018 2:58 pm Post subject: |
|
|
axisofadvance ... that established, you can now run the command with the correct path:
Code: | # /usr/lib64/python-exec/python2.7/emerge --oneshot dev-lang/python-exec |
That I expect to resolve the issue.
best ... khay |
|
Back to top |
|
|
axisofadvance n00b
Joined: 22 Oct 2018 Posts: 12
|
Posted: Tue Oct 23, 2018 3:56 pm Post subject: |
|
|
That got Portage fired up, but alas, it reports:
Quote: |
Failed to emerge dev-lang/python-exec-2.4.6
Jobs: 0 of 1 complete, 1 failed
*Messages or package dev-lang/python-exec-2.4.6:
<none>
|
One step closer... |
|
Back to top |
|
|
khayyam Watchman
Joined: 07 Jun 2012 Posts: 6227 Location: Room 101
|
Posted: Tue Oct 23, 2018 5:00 pm Post subject: |
|
|
axisofadvance wrote: | Code: | Failed to emerge dev-lang/python-exec-2.4.6 |
|
axisofadvance ... can you pastebin the build.log, and post the output of 'emerge --info =dev-lang/python-exec-2.4.6'
best ... khay |
|
Back to top |
|
|
axisofadvance n00b
Joined: 22 Oct 2018 Posts: 12
|
Posted: Tue Oct 23, 2018 6:44 pm Post subject: |
|
|
Quote: | can you pastebin the build.log |
My /var/tmp/portage is empty... would build.log be found elsewhere?
Quote: | 'emerge --info =dev-lang/python-exec-2.4.6' |
Code: | Portage 2.3.40 (python 2.7.14-final-0, default/linux/amd64/17.0/desktop/plasma, gcc-7.3.0, glibc-2.26-r7, 4.9.95-gentoo x86_64)
=================================================================
System Settings
=================================================================
System uname: Linux-4.9.95-gentoo-x86_64-Intel-R-_Core-TM-_i5-3210M_CPU_@_2.50GHz-with-gentoo-2.4.1
KiB Mem: 16334980 total, 16075916 free
KiB Swap: 0 total, 0 free
Timestamp of repository gentoo: Tue, 23 Oct 2018 16:00:01 +0000
Head commit of repository gentoo: dd8f100553ea700651c448ed0101194b7b7e1831
sh bash 4.4_p12
ld GNU ld (Gentoo 2.30 p2) 2.30.0
app-shells/bash: 4.4_p12::gentoo
dev-lang/perl: 5.24.3-r1::gentoo
dev-lang/python: 2.7.14-r1::gentoo, 3.5.5::gentoo, 3.6.5::gentoo
dev-util/cmake: 3.9.6::gentoo
dev-util/pkgconfig: 0.29.2::gentoo
sys-apps/baselayout: 2.4.1-r2::gentoo
sys-apps/openrc: 0.34.11::gentoo
sys-apps/sandbox: 2.13::gentoo
sys-devel/autoconf: 2.13::gentoo, 2.69-r4::gentoo
sys-devel/automake: 1.15.1-r2::gentoo
sys-devel/binutils: 2.30-r2::gentoo
sys-devel/gcc: 7.3.0-r3::gentoo
sys-devel/gcc-config: 1.8-r1::gentoo
sys-devel/libtool: 2.4.6-r3::gentoo
sys-devel/make: 4.2.1::gentoo
sys-kernel/linux-headers: 4.13::gentoo (virtual/os-headers)
sys-libs/glibc: 2.26-r7::gentoo
Repositories:
gentoo
location: /usr/portage
sync-type: rsync
sync-uri: rsync://rsync.gentoo.org/gentoo-portage
priority: -1000
sync-rsync-verify-jobs: 1
sync-rsync-verify-metamanifest: no
sync-rsync-extra-opts:
sync-rsync-verify-max-age: 24
ACCEPT_KEYWORDS="amd64"
ACCEPT_LICENSE="*"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-O2 -pipe"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/lib64/libreoffice/program/sofficerc /usr/share/config /usr/share/gnupg/qualified.txt"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo"
CXXFLAGS="-O2 -pipe"
DISTDIR="/usr/portage/distfiles"
EMERGE_DEFAULT_OPTS="--jobs 4"
ENV_UNSET="DBUS_SESSION_BUS_ADDRESS DISPLAY PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR"
FCFLAGS="-O2 -pipe"
FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync multilib-strict news nostrip parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"
FFLAGS="-O2 -pipe"
GENTOO_MIRRORS="ftp://mirror.csclub.uwaterloo.ca/gentoo-distfiles/ http://mirror.csclub.uwaterloo.ca/gentoo-distfiles/"
LANG="en_US"
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
MAKEOPTS="-j5"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git"
PORTAGE_TMPDIR="/var/tmp"
USE="X a52 aac acl acpi activities alsa amd64 apache2 berkdb bluetooth branding bzip2 cairo cdda cdr cjk cli consolekit crypt cups curl cxx dbus declarative dri dts dvd dvdr emboss encode exif fam flac fortran gd gdbm gif glamor gnome gpm gtk i3 iconv icu infinality ipv6 jpeg kde kipi kwallet lcms ldap libnotify libtirpc mad mng mp3 mp4 mpd mpeg multilib mysql ncurses network nls nptl ogg opengl openmp pam pango pcre pdf phonon php plasma png policykit ppds python qml qt5 readline sdl seccomp semantic-desktop spell ssl startup-notification svg tcpd tiff truetype udev udisks unicode upower usb vorbis widgets wxwidgets x264 xattr xcb xcomposite xft xml xv xvid zlib" ABI_X86="64" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="karbon plan sheets stage words" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="mmx mmxext sse sse2" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock isync itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf skytraq superstar2 timing tsip tripmate tnt ublox ubx" GRUB_PLATFORMS="efi-64" INPUT_DEVICES="libinput keyboard mouse" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-6 php7-1" POSTGRES_TARGETS="postgres9_5 postgres10" PYTHON_SINGLE_TARGET="python3_6" PYTHON_TARGETS="python2_7 python3_6" RUBY_TARGETS="ruby23" USERLAND="GNU" VIDEO_CARDS="intel i915 i965" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
Unset: CC, CPPFLAGS, CTARGET, CXX, INSTALL_MASK, LC_ALL, LINGUAS, PORTAGE_BINHOST, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS |
|
|
Back to top |
|
|
khayyam Watchman
Joined: 07 Jun 2012 Posts: 6227 Location: Room 101
|
Posted: Tue Oct 23, 2018 7:02 pm Post subject: |
|
|
khayyam wrote: | can you pastebin the build.log |
axisofadvance wrote: | My /var/tmp/portage is empty... would build.log be found elsewhere? |
axisofadvance ... do you have '--fail-clean=y' in EMERGE_DEFAULT_OPTS? ... if not then the /var/tmp/portage should contain the build tree, and build.log. Please repeat with the following:
Code: | # /usr/lib64/python-exec/python2.7/emerge --oneshot --fail-clean=n =dev-lang/python-exec-2.4.6 |
Actually, are you sure it failed? Did you run 'emerge --info' or '/usr/lib64/python-exec/python2.7/emerge --info'?
best ... khay |
|
Back to top |
|
|
axisofadvance n00b
Joined: 22 Oct 2018 Posts: 12
|
Posted: Tue Oct 23, 2018 8:32 pm Post subject: |
|
|
Quote: | do you have '--fail-clean=y' in EMERGE_DEFAULT_OPTS? ... if not then the /var/tmp/portage should contain the build tree, and build.log. |
My EMERGE_DEFAULT_OPTS just contains a --jobs parm.
Quote: | Actually, are you sure it failed? Did you run 'emerge --info' or '/usr/lib64/python-exec/python2.7/emerge --info'? |
I ran the latter, as the former doesn't work. Bash reports emerge: command not found. PATH issue or still broken symlinks?
Yes, unfortunately it fails without displaying a message.
Code: |
>>> Verifying ebuild manifests
>>> Emerging (1 of 1) dev-lang/python-exec2.4.6::gentoo
>>> Failed to emerge dev-lang/python-exec2.4.6
>>> Jobs: 0 of 1 complete, 1 failed
* Messages for package dev-lang/python-exec-2.4.6:
|
|
|
Back to top |
|
|
khayyam Watchman
Joined: 07 Jun 2012 Posts: 6227 Location: Room 101
|
Posted: Tue Oct 23, 2018 9:58 pm Post subject: |
|
|
axisofadvance ... something else if going on here (other than the unpacking of this tarball), why would you have the following:
axisofadvance wrote: | Code: | /usr/bin/python2-config -> ../lib/python-exec/python-exec2 |
|
... yet all your (package installed) python is in lib64. Those broken symlinks weren't created by the tarball, they were created by the package manager, yet, everything python is in lib64, and by the above 'ls -ld' you have no /usr/lib (that is, if you run the exact command I posted). So, what could explain this, well, I'm not sure, but I can't see how unpacking this tarball could have done this, this has to be something you've done, or omited to do ... I can only guess. So, what had you done prior to this occuring?
best ... khay |
|
Back to top |
|
|
Hu Moderator
Joined: 06 Mar 2007 Posts: 21631
|
Posted: Wed Oct 24, 2018 1:47 am Post subject: |
|
|
axisofadvance wrote: | My EMERGE_DEFAULT_OPTS just contains a --jobs parm. | Per man emerge, --jobs implies --quiet-build=y, which explains why Portage is so terse when the failure happens. It does not explain why you cannot find the failure logs though.
khayyam wrote: | axisofadvance ... gahh, I wasn't accounting for the renaming for 64bit that happened recently, so that lib is in fact probably lib64 ... please try again with the following: | That has not happened yet, for the system in question:
axisofadvance wrote: | Code: | Portage 2.3.40 (python 2.7.14-final-0, default/linux/amd64/17.0/desktop/plasma, gcc-7.3.0, glibc-2.26-r7, 4.9.95-gentoo x86_64) |
| The renaming is part of the 17.1 profile series. He has not converted yet, so his lib should be a symlink to lib64. That it is not a link is an important clue, so it's actually quite helpful that you (khayyam) picked the command he did. Observe: Code: | #!/bin/bash
set -e
cd ${TMPDIR:/tmp}
rm -r a b
mkdir a b a/lib b/lib64
ln -s lib64 b/lib
ls -l a b
tar -C a -c -f - . | tar -C b -x -f -
ls -l a b
| For those who do not want to run at home, this demonstrates that tar can and will replace a symlink lib -> lib64 with a directory lib, if the input archive has a directory named lib. Most likely, OP destroyed his lib symlink with the bad unpack, so now anything that expects lib to be an alias for lib64 is broken. As a short term fix, moving aside lib and restoring the symlink should help. If anything of value has been installed into the directory lib, that will need to be corrected afterward. |
|
Back to top |
|
|
khayyam Watchman
Joined: 07 Jun 2012 Posts: 6227 Location: Room 101
|
Posted: Wed Oct 24, 2018 8:54 am Post subject: |
|
|
Hu wrote: | For those who do not want to run at home, this demonstrates that tar can and will replace a symlink lib -> lib64 with a directory lib, if the input archive has a directory named lib. Most likely, OP destroyed his lib symlink with the bad unpack, so now anything that expects lib to be an alias for lib64 is broken. As a short term fix, moving aside lib and restoring the symlink should help. If anything of value has been installed into the directory lib, that will need to be corrected afterward. |
Hu ... bingo, that explains everything, so axisofadvance:
Code: | # mv /usr/lib /usr/lib-tmp
# ln -s /usr/lib64 /usr/lib |
You can then move the contents of lib-tmp to /usr/local/lib64.
best ... khay |
|
Back to top |
|
|
axisofadvance n00b
Joined: 22 Oct 2018 Posts: 12
|
Posted: Wed Oct 24, 2018 11:27 am Post subject: |
|
|
Khay and Hu: Thank you both for your patience, time and effort.
I'm happy to report that I'm back up and running. Despite the frustration I felt at times attempting to get to the bottom of this, the lesson(s) learned are invaluable and are a testament to this community's true worth.
I hope to someday be able to lend a helping hand to another noob as you've lent yours to me. Cheers! |
|
Back to top |
|
|
|