Hi,

Lately a lot of i686 packages are broken due to missing libraries.
This is what typically happens:
> $ vlc
> vlc: error while loading shared libraries: libidn.so.11: cannot open
> shared object file: No such file or directory

There are also some cases where the missing libraries don't prevent
running the main program as they only affect plugins.

I've run lddd on my system and made a script to parse its output into
something more digestible by a human.

On my i686 machine the following packages are broken and most probably
need to be rebuilt:
- 0ad (a23-4.0)
- abiword (3.0.2-8.parabola2)
- alsa-tools (1.1.6-3.0)
- ardour (5.12-6.0)
- armv7l-unknown-linux-gnueabihf-gcc (6.2.1-1)
- bctoolbox (0.6.0-2.0)
- blender (17:2.79.b.git3.32432d91-1.parabola1)
- bluez-utils (5.50-3.0)
- brasero (3.12.2-2)
- calibre (3.28.0-2.parabola1)
- ceph (12.2.2-1.0)
- ceph-libs (12.2.2-1.0)
- command-not-found (0.6.1-2)
- deja-dup (38.0-1.0)
- dnsmasq (2.79-1.0)
- efl (1.21.1-1.0)
- eog (3.28.3-1.0)
- epiphany (3.28.3.1-2.parabola1)
- evince (3.28.2-1.0)
- evolution (3.28.5-1.0)
- evolution-bogofilter (3.28.5-1.0)
- evolution-data-server (3.28.5-2.0)
- folks (0.11.4+26+g2c992227-1.0)
- frameworkintegration (5.48.0-1.0)
- frei0r-plugins (1.6.1-5.0)
- gegl02 (0.2.0-8.0)
- ghostscript (9.24-5.0)
- gimp (2.10.4-2.0)
- gloox (1.0.21-1.0)
- gmic (2.3.6-1.0)
- gmime3 (3.2.0-1.0)
- gnustep-gui (0.26.2-1)
- goffice (0.10.41-1.0)
- gpgmepp (16.08.3-1)
- graphviz (2.40.1-13.0)
- grilo (0.3.6-1.0)
- gstreamer0.10-base (0.10.36-3)
- gthumb (3.6.1-2.0)
- gvfs (1.36.2-3.0)
- gwenview (18.08.1-2.1)
- handbrake (1.0.7-3.parabola1)
- handbrake-cli (1.0.7-3.parabola1)
- icecat (52.6.0_gnu1-4)
- icedove (1:52.7.0-3)
- iceweasel (1:61.0.2-1.parabola3)
- iproute2 (4.18.0-1.4)
- jdk8-openjdk (8.u181-1.0)
- jitsi (2.10.5550-4)
- jre7-openjdk (7.u171_2.6.13-1.0)
- jre7-openjdk-headless (7.u171_2.6.13-1.0)
- jre8-openjdk-headless (8.u181-1.0)
- js38 (38.8.0-5.0)
- kdebase-runtime (17.08.3-1.parabola1)
- kdegraphics-thumbnailers (18.08.1-1.1)
- kdelibs (4.14.38-1.parabola1)
- kdepimlibs4 (4.14.10-11)
- kio (5.48.0-1.parabola1)
- kio-extras (17.12.3-2.parabola1)
- krita (4.1.1-1.0)
- libkdcraw (18.08.1-1.1)
- libkexiv2_4 (15.08.3-2)
- libmagick (7.0.8.12-1.0)
- libmagick6 (6.9.10.11-1.0)
- libphonenumber (8.9.10-2.0)
- libpurple (2.13.0-4.0)
- libreoffice-fresh (6.1.1-1.0)
- libsigrokdecode (0.5.1-1.0)
- libspectre (0.2.8-1.1)
- libtracker-sparql (1.12.1-1)
- loudmouth (1.5.3-1)
- lynx (2.8.9-1.0)
- mate-utils (1.20.1-1.0)
- mcabber (1.1.0-1)
- mlt (6.10.0-1.0)
- mplayer (38101-1.parabola2)
- multipath-tools (0.7.4-1)
- okular (17.12.3-1.parabola1)
- openimageio (1.8.14-1.0)
- openmpi (3.1.1-1.0)
- openscenegraph (3.4.1-3.0)
- openshadinglanguage (1.9.9-5.0)
- openvdb (5.1.0-4.0)
- pidgin (2.13.0-4.0)
- plasma-workspace (5.13.5-1.0)
- podofo (0.9.5-2)
- postgresql (10.5-1.0)
- pulseview (0.4.0-4.0)
- python (3.7.0-3.0)
- python-pyqt5 (5.11.3-1.par1)
- python2-pyqt5 (5.11.3-1.par1)
- qca (2.1.3-1.0)
- qt5-base (5.11.1-3.1)
- scribus (1.5.4-1.0)
- smbclient (4.8.5-1.0)
- sox (14.4.2-3.1)
- strigi (0.7.8-9)
- totem (3.26.2-1.0)
- totem-plparser (3.26.1-1.0)
- tracker (2.1.3-1.0)
- unar (1.10.1-8.2)
- vlc (3.0.3-2.0)
- vtk (8.1.1-1.0)
- webkitgtk (2.4.11-6)
- xine-lib (1.2.9-7.0)

I've attached the script and its output for more in-depth details.

Given the amount of affected packages, opening a new bug for each
affected package doesn't seem to be a good idea.

Denis.

Attachment: lddd-sort.log
Description: Binary data

#!/usr/bin/env python3
# Copyright (C) 2018 Denis 'GNUtoo' Carikli <gnu...@cyberdimension.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#
import os
import re
import subprocess

results = {}

is_not_found_re = re.compile('found')
is_local_re = re.compile('^/usr/local')

"""
@returns [library array] or None
"""
def ldd_get_not_found(path):
    libraries = []

    ldd = subprocess.Popen(["sh", "-c", "ldd {0}".format(path)], stdout=subprocess.PIPE, stderr=None)
    output = str(ldd.communicate()[0])
    for line in output.replace('\\t','').split('\\n'):
        if not re.search(is_not_found_re, line):
            continue
        library = line.split(' => ')[0]
        libraries.append(library)
    if len(libraries) > 0:
        return libraries
    else:
        return None

"""
@returns [package name] [package version] or None
"""
def pacman_get_package(path):
    pacman = subprocess.Popen(["pacman", "-Q", "-o", path], stdout=subprocess.PIPE, stderr=None)
    output = str(pacman.communicate()[0])
    package = output.split('is owned by ')[1].replace("\\n'", '').split(" ")
    if len(package) > 0:
        return package
    else:
        return None

def main():
    affected_files = open('affected-files.txt')
    for path in affected_files:
        path=path.replace('\n','')
        if re.match(is_local_re, path):
            continue

        not_found_libs = ldd_get_not_found(path)
        if not_found_libs == None:
            continue

        package = pacman_get_package(path)
        if package == None:
            continue

        package_name = package[0]
        package_version = package[1]

        if package_name not in results.keys():
            results[package_name] = {'version': package_version, 'files' : {}}

        results[package_name]['files'][path] = not_found_libs

    for package_name in results.keys():
        print ("{0} ({1}):".format(package_name, results[package_name]['version']))
        for path in results[package_name]['files'].keys():
            libs_line = ""
            libs_line += "\t{0}:".format(path)
            for lib in results[package_name]['files'][path]:
                libs_line +=" {0}".format(lib)
            print(libs_line)

if __name__ == '__main__':
    main()

Attachment: pgpfIiejCTjMO.pgp
Description: OpenPGP digital signature

_______________________________________________
Dev mailing list
Dev@lists.parabola.nu
https://lists.parabola.nu/mailman/listinfo/dev

Reply via email to