Dunno about you but I update my packages often … and I have lots of them, more then 1000 actually.
% pkg info | wc -l 1051
… but its not much, they are mostly dependencies to to software that I use.
For example I need Openbox and X11 but to use them I need 300+ dependencies in libraries and protocols, and its OK, that’s how it works … but sometimes after the upgrade one or two applications forbid to start because of missing dependency. I would sa that it happens one in twenty to thirty updates (1/20 – 1/30) which is very rare and even if it happens its very easy to solve. I also happened to me on Linux systems many times so its not FreeBSD only related, its just how open source desktop/laptop market works π
Today’s victim will be Chromium. I generally use Firefox but sometimes when a page behaves strangely in Firefox I verify this behavior in Chromium. I also use Chromium as file opener (or file browser should I say) for the *.htm/*.html/*.chm local files. But this time it forbid to start, so I went to the command line to check what went wrong.
% chrome Shared object "libx264.so.155" not found, required by "libavcodec.so.58"
… a missing dependency in the form of libx264.so.155 library.
Reckless Symlink
This method is considered dangerous or quick and dirty way of fixing such problems – it can also introduce other problems by itself – but still – in many cases it temporary solves the problem.
… and its exactly that – a quick fix till the ffmpeg package finishes its rebuild – it takes longer then pkg upgrade command but when I need Chromium now its NOW, not later when ffmpeg package will be rebuilt. This problem is caused by lack of guts of the FreeBSD project to provide lame package. OpenBSD guys does not have problem with that but FreeBSD guys do, so to have MP3 support in ffmpeg you need to first manually build lame package and then select it as option in ffmpeg and again built is as package … and do that everytime you run pkg upgrade command … which is PITA to say the least.
This is why I use pkg-recompile.sh script for that purpose – to not do that βby handβ everytime I update packages (which is about two times a week). This is the βworkflowβ if I can call it like that:
# pkg upgrade # pkg-recompile.sh build
Lets verify it something else is not missing for Chromium then.
% which chrome /usr/local/bin/chrome % ldd /usr/local/bin/chrome ldd: /usr/local/bin/chrome: not a dynamic executable
So /usr/local/bin/chrome is just a wrapper, let’s see what it contains.
% cat /usr/local/bin/chrome #!/bin/sh SYSCTL=kern.ipc.shm_allow_removed if [ "`/sbin/sysctl -n $SYSCTL`" = 0 ] ; then cat << EOMSG For correct operation, shared memory support has to be enabled in Chromium by performing the following command as root : sysctl $SYSCTL=1 To preserve this setting across reboots, append the following to /etc/sysctl.conf : $SYSCTL=1 EOMSG exit 1 fi ulimit -c 0 exec /usr/local/share/chromium/chrome ${1+"$@"}
So our binary actually is /usr/local/share/chromium/chrome file, lets check it with ldd(8) then.
% ldd /usr/local/share/chromium/chrome
/usr/local/share/chromium/chrome:
libthr.so.3 => /lib/libthr.so.3 (0x809b78000)
libX11.so.6 => /usr/local/lib/libX11.so.6 (0x809da0000)
libX11-xcb.so.1 => /usr/local/lib/libX11-xcb.so.1 (0x80a0df000)
libxcb.so.1 => /usr/local/lib/libxcb.so.1 (0x80a2e0000)
libXcomposite.so.1 => /usr/local/lib/libXcomposite.so.1 (0x80a506000)
libXcursor.so.1 => /usr/local/lib/libXcursor.so.1 (0x80a708000)
libXdamage.so.1 => /usr/local/lib/libXdamage.so.1 (0x80a913000)
libXext.so.6 => /usr/local/lib/libXext.so.6 (0x80ab15000)
libXfixes.so.3 => /usr/local/lib/libXfixes.so.3 (0x80ad26000)
libXi.so.6 => /usr/local/lib/libXi.so.6 (0x80af2b000)
libXrender.so.1 => /usr/local/lib/libXrender.so.1 (0x80b139000)
libXtst.so.6 => /usr/local/lib/libXtst.so.6 (0x80b342000)
libgmodule-2.0.so.0 => /usr/local/lib/libgmodule-2.0.so.0 (0x80b547000)
libglib-2.0.so.0 => /usr/local/lib/libglib-2.0.so.0 (0x80b74a000)
libgobject-2.0.so.0 => /usr/local/lib/libgobject-2.0.so.0 (0x80ba61000)
libgthread-2.0.so.0 => /usr/local/lib/libgthread-2.0.so.0 (0x80bcab000)
libintl.so.8 => /usr/local/lib/libintl.so.8 (0x80beac000)
libnss3.so => /usr/local/lib/nss/libnss3.so (0x80c0b7000)
libsmime3.so => /usr/local/lib/nss/libsmime3.so (0x80c3e3000)
libnssutil3.so => /usr/local/lib/nss/libnssutil3.so (0x80c60d000)
libplds4.so => /usr/local/lib/libplds4.so (0x80c83d000)
libplc4.so => /usr/local/lib/libplc4.so (0x80ca40000)
libnspr4.so => /usr/local/lib/libnspr4.so (0x80cc44000)
libdl.so.1 => /usr/lib/libdl.so.1 (0x80ce83000)
libcups.so.2 => /usr/local/lib/libcups.so.2 (0x80d084000)
libxml2.so.2 => /usr/local/lib/libxml2.so.2 (0x80d315000)
libfontconfig.so.1 => /usr/local/lib/libfontconfig.so.1 (0x80d6a8000)
libdbus-1.so.3 => /usr/local/lib/libdbus-1.so.3 (0x80d8ef000)
libexecinfo.so.1 => /usr/lib/libexecinfo.so.1 (0x80db40000)
libkvm.so.7 => /lib/libkvm.so.7 (0x80dd43000)
libutil.so.9 => /lib/libutil.so.9 (0x80df51000)
libXss.so.1 => /usr/local/lib/libXss.so.1 (0x80e165000)
libwebpdemux.so.2 => /usr/local/lib/libwebpdemux.so.2 (0x80e367000)
libwebpmux.so.3 => /usr/local/lib/libwebpmux.so.3 (0x80e56b000)
libwebp.so.7 => /usr/local/lib/libwebp.so.7 (0x80e775000)
libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x80ea05000)
libjpeg.so.8 => /usr/local/lib/libjpeg.so.8 (0x80ecbb000)
libexpat.so.1 => /usr/local/lib/libexpat.so.1 (0x80ef4e000)
libharfbuzz.so.0 => /usr/local/lib/libharfbuzz.so.0 (0x80f179000)
libdrm.so.2 => /usr/local/lib/libdrm.so.2 (0x80f458000)
libXrandr.so.2 => /usr/local/lib/libXrandr.so.2 (0x80f66b000)
libgio-2.0.so.0 => /usr/local/lib/libgio-2.0.so.0 (0x80f875000)
libavcodec.so.58 => /usr/local/lib/libavcodec.so.58 (0x80fe00000)
libavformat.so.58 => /usr/local/lib/libavformat.so.58 (0x811800000)
libavutil.so.56 => /usr/local/lib/libavutil.so.56 (0x811c52000)
libopenh264.so.4 => /usr/local/lib/libopenh264.so.4 (0x811eca000)
libasound.so.2 => /usr/local/lib/libasound.so.2 (0x8121da000)
libsnappy.so.1 => /usr/local/lib/libsnappy.so.1 (0x8124de000)
libopus.so.0 => /usr/local/lib/libopus.so.0 (0x8126e6000)
libpangocairo-1.0.so.0 => /usr/local/lib/libpangocairo-1.0.so.0 (0x812956000)
libpango-1.0.so.0 => /usr/local/lib/libpango-1.0.so.0 (0x812b63000)
libcairo.so.2 => /usr/local/lib/libcairo.so.2 (0x812db1000)
libGL.so.1 => /usr/local/lib/libGL.so.1 (0x8130d8000)
libpci.so.3 => /usr/local/lib/libpci.so.3 (0x813366000)
libatk-1.0.so.0 => /usr/local/lib/libatk-1.0.so.0 (0x813571000)
libatk-bridge-2.0.so.0 => /usr/local/lib/libatk-bridge-2.0.so.0 (0x81379c000)
libatspi.so.0 => /usr/local/lib/libatspi.so.0 (0x8139cc000)
libFLAC.so.8 => /usr/local/lib/libFLAC.so.8 (0x813bfd000)
libgtk-3.so.0 => /usr/local/lib/libgtk-3.so.0 (0x814000000)
libgdk-3.so.0 => /usr/local/lib/libgdk-3.so.0 (0x8148b9000)
libcairo-gobject.so.2 => /usr/local/lib/libcairo-gobject.so.2 (0x814bb0000)
libgdk_pixbuf-2.0.so.0 => /usr/local/lib/libgdk_pixbuf-2.0.so.0 (0x814db8000)
libxslt.so.1 => /usr/local/lib/libxslt.so.1 (0x814fdb000)
libz.so.6 => /lib/libz.so.6 (0x815218000)
liblzma.so.5 => /usr/lib/liblzma.so.5 (0x815430000)
libm.so.5 => /lib/libm.so.5 (0x815659000)
librt.so.1 => /usr/lib/librt.so.1 (0x815886000)
libc++.so.1 => /usr/lib/libc++.so.1 (0x815a8c000)
libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x815d5a000)
libc.so.7 => /lib/libc.so.7 (0x800823000)
libXau.so.6 => /usr/local/lib/libXau.so.6 (0x815f79000)
libXdmcp.so.6 => /usr/local/lib/libXdmcp.so.6 (0x81617c000)
libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0x816381000)
libpcre.so.1 => /usr/local/lib/libpcre.so.1 (0x81667c000)
libffi.so.6 => /usr/local/lib/libffi.so.6 (0x81691a000)
libgnutls.so.30 => /usr/local/lib/libgnutls.so.30 (0x816b21000)
libavahi-common.so.3 => /usr/local/lib/libavahi-common.so.3 (0x816ed4000)
libavahi-client.so.3 => /usr/local/lib/libavahi-client.so.3 (0x8170e0000)
libcrypt.so.5 => /lib/libcrypt.so.5 (0x8172ef000)
libelf.so.2 => /lib/libelf.so.2 (0x81750e000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x817725000)
libbz2.so.4 => /usr/lib/libbz2.so.4 (0x817934000)
libgraphite2.so.3 => /usr/local/lib/libgraphite2.so.3 (0x817b48000)
libswresample.so.3 => /usr/local/lib/libswresample.so.3 (0x817d71000)
libvpx.so.6 => /usr/local/lib/libvpx.so.6 (0x818000000)
libdav1d.so.1 => /usr/local/lib/libdav1d.so.1 (0x818411000)
libmp3lame.so.0 => /usr/local/lib/libmp3lame.so.0 (0x818732000)
libtheoraenc.so.1 => /usr/local/lib/libtheoraenc.so.1 (0x8189b3000)
libtheoradec.so.1 => /usr/local/lib/libtheoradec.so.1 (0x818be2000)
libvorbis.so.0 => /usr/local/lib/libvorbis.so.0 (0x818df3000)
libvorbisenc.so.2 => /usr/local/lib/libvorbisenc.so.2 (0x819024000)
libx264.so.155 => not found (0)
libx265.so.170 => /usr/local/lib/libx265.so.170 (0x819400000)
libxvidcore.so.4 => /usr/local/lib/libxvidcore.so.4 (0x819b4b000)
libva.so.2 => /usr/local/lib/libva.so.2 (0x819e70000)
libgmp.so.10 => /usr/local/lib/libgmp.so.10 (0x81a096000)
libva-drm.so.2 => /usr/local/lib/libva-drm.so.2 (0x81a316000)
libva-x11.so.2 => /usr/local/lib/libva-x11.so.2 (0x81a518000)
libvdpau.so.1 => /usr/local/lib/libvdpau.so.1 (0x81a71d000)
libpangoft2-1.0.so.0 => /usr/local/lib/libpangoft2-1.0.so.0 (0x81a920000)
libfribidi.so.0 => /usr/local/lib/libfribidi.so.0 (0x81ab36000)
libpixman-1.so.0 => /usr/local/lib/libpixman-1.so.0 (0x81ad4c000)
libEGL.so.1 => /usr/local/lib/libEGL.so.1 (0x81b016000)
libpng16.so.16 => /usr/local/lib/libpng16.so.16 (0x81b24e000)
libxcb-shm.so.0 => /usr/local/lib/libxcb-shm.so.0 (0x81b489000)
libxcb-render.so.0 => /usr/local/lib/libxcb-render.so.0 (0x81b68b000)
libxcb-dri3.so.0 => /usr/local/lib/libxcb-dri3.so.0 (0x81b898000)
libxcb-xfixes.so.0 => /usr/local/lib/libxcb-xfixes.so.0 (0x81ba9b000)
libxcb-present.so.0 => /usr/local/lib/libxcb-present.so.0 (0x81bca2000)
libxcb-sync.so.1 => /usr/local/lib/libxcb-sync.so.1 (0x81bea4000)
libxshmfence.so.1 => /usr/local/lib/libxshmfence.so.1 (0x81c0aa000)
libglapi.so.0 => /usr/local/lib/libglapi.so.0 (0x81c2ab000)
libxcb-glx.so.0 => /usr/local/lib/libxcb-glx.so.0 (0x81c505000)
libxcb-dri2.so.0 => /usr/local/lib/libxcb-dri2.so.0 (0x81c71e000)
libXxf86vm.so.1 => /usr/local/lib/libXxf86vm.so.1 (0x81c922000)
libogg.so.0 => /usr/local/lib/libogg.so.0 (0x81cb26000)
libXinerama.so.1 => /usr/local/lib/libXinerama.so.1 (0x81cd2c000)
libxkbcommon.so.0 => /usr/local/lib/libxkbcommon.so.0 (0x81cf2e000)
libwayland-cursor.so.0 => /usr/local/lib/libwayland-cursor.so.0 (0x81d16b000)
libwayland-egl.so.1 => /usr/local/lib/libwayland-egl.so.1 (0x81d372000)
libwayland-client.so.0 => /usr/local/lib/libwayland-client.so.0 (0x81d573000)
libepoxy.so.0 => /usr/local/lib/libepoxy.so.0 (0x81d782000)
libp11-kit.so.0 => /usr/local/lib/libp11-kit.so.0 (0x81da91000)
libtasn1.so.6 => /usr/local/lib/libtasn1.so.6 (0x81ddb2000)
libnettle.so.6 => /usr/local/lib/libnettle.so.6 (0x81dfc7000)
libhogweed.so.4 => /usr/local/lib/libhogweed.so.4 (0x81e1ff000)
libidn2.so.0 => /usr/local/lib/libidn2.so.0 (0x81e435000)
libunistring.so.2 => /usr/local/lib/libunistring.so.2 (0x81e653000)
libgbm.so.1 => /usr/local/lib/libgbm.so.1 (0x81ea07000)
libwayland-server.so.0 => /usr/local/lib/libwayland-server.so.0 (0x81ec15000)
libepoll-shim.so.0 => /usr/local/lib/libepoll-shim.so.0 (0x81ee28000)
Lots of deps here, lets cut to the point with grep(1) as shown below.
% ldd /usr/local/share/chromium/chrome | grep found
libx264.so.155 => not found (0)
Only one – libx264.so.155 – dependency is missing. Let’s fix it then.
% cd /usr/local/lib % ls -l libx264.so* lrwxr-xr-x 1 root wheel 14 2019.03.19 02:11 libx264.so -> libx264.so.157 -rwxr-xr-x 1 root wheel 2090944 2019.03.19 02:11 libx264.so.157
There is little newer version available libx264.so.157 so we will link to it with our ‘missing’ libx264.so.155 name.
# pwd /usr/local/lib # ln -s libx264.so libx264.so.155 # ls -l libx264.so* lrwxr-xr-x 1 root wheel 14 2019.03.19 02:11 libx264.so -> libx264.so.157 lrwxr-xr-x 1 root wheel 10 2019.03.21 15:26 libx264.so.155 -> libx264.so -rwxr-xr-x 1 root wheel 2090944 2019.03.19 02:11 libx264.so.157
Chromium should be happy now.
% ldd /usr/local/share/chromium/chrome | grep found %
Zero not found results.
Let’s start Chromium then with chrome command.
% chrome
Starts as usual and everything works π
This whole process can be visualized with this simple screenshots below.
Using /etc/libmap.conf File
Instead making ad symlink – which will work globally – you can create the proper libmap.conf file with configuration only for /usr/local/share/chromium/chrome binary.
Here is the fix only for Chromium browser.
# cat /etc/libmap.conf [/usr/local/share/chromium/chrome] libx264.so.155 libx264.so
… and equivalent solution that works globally as symlink would be as follows.
# cat /etc/libmap.conf libx264.so.155 libx264.so
Its also easier to migrate or mass populate such changes instead of copying a symlink.
Fixing Broken Dependency in pkg(8) Database
I already wrote about it in the Less Known pkg(8) Features article but its worth mentioning here for the completeness of options.
There was time when one missing dependency about vulnerable www/libxul19 package started to torture me for some time.
I was even desperate to compile everything with portmaster already.
I started with portmaster --check-depends command, but said no ‘n‘ when asked for fix as it will downgrade a lot of packages needlessly.
# portmaster --check-depends (...) Checking dependencies: evince graphics/evince has a missing dependency: www/libxul19 (...) >>> Missing package dependencies were detected. >>> Found 1 issue(s) in total with your package database. The following packages will be installed: Downgrading perl: 5.14.2_3 -> 5.14.2_2 Downgrading glib: 2.34.3 -> 2.28.8_5 Downgrading gio-fam-backend: 2.34.3 -> 2.28.8_1 Downgrading libffi: 3.0.12 -> 3.0.11 Downgrading gobject-introspection: 1.34.2 -> 0.10.8_3 Downgrading atk: 2.6.0 -> 2.0.1 Downgrading gdk-pixbuf2: 2.26.5 -> 2.23.5_3 Downgrading pango: 1.30.1 -> 1.28.4_1 Downgrading gtk-update-icon-cache: 2.24.17 -> 2.24.6_1 Downgrading dbus: 1.6.8 -> 1.4.14_4 Downgrading gtk: 2.24.17 -> 2.24.6_2 Downgrading dbus-glib: 0.100.1 -> 0.94 Installing libxul: 1.9.2.28_1 The installation will require 66 MB more space 38 MB to be downloaded >>> Try to fix the missing dependencies [y/N]: n >>> Summary of actions performed: www/libxul19 dependency failed to be fixed >>> There are still missing dependencies. >>> You are advised to try fixing them manually. >>> Also make sure to check 'pkg updating' for known issues.
Lets see what pkg(8) shows we have installed.
# pkg info | grep libxul libxul-10.0.12 Mozilla runtime package that can be used to bootstrap XUL+XPCOM apps # pkg info -qoa | grep libxul www/libxul
So the problem is that we have installed www/libxul instead of www/libxul19 and that is why portmaster (and not only) complains about it.
Before pkg(8) was introduced it was easy just to grep -r the entire /var/db/pkg directory with its ‘file database’ but now its quite more complicated as the package database is kept in SQLite database. Using pkg shell command You can connect to that database. Lets check what we can find there.
# pkg shell SQLite version 3.7.13 2012-06-11 02:05:22 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .databases seq name file --- --------------- ---------------------------------------------------------- 0 main /var/db/pkg/local.sqlite sqlite> .tables categories licenses pkg_directories scripts deps mtree pkg_groups shlibs directories options pkg_licenses users files packages pkg_shlibs groups pkg_categories pkg_users sqlite> .header on sqlite> .mode column sqlite> pragma table_info(deps); cid name type notnull dflt_value pk ---------- ---------- ---------- ---------- ---------- ---------- 0 origin TEXT 1 1 1 name TEXT 1 0 2 version TEXT 1 0 3 package_id INTEGER 0 1 sqlite> .quit
So now we know that ‘deps‘ table is probably what we are looking for ;).
As pkg shell is quite limited for SQLite ‘browsing’ I will use the sqlite3 command itself. By limited I mean that You can not type pkg shell "select * from deps;" query, You first need to start pkg shell and then You can type your query.
# sqlite3 -column /var/db/pkg/local.sqlite "select * from deps;" | grep libxul www/libxul19 libxul 1.9.2.28_1 104
The second column is name so lets try to use it.
sqlite3 -header -column /var/db/pkg/local.sqlite "select * from deps where name='libxul';" origin name version package_id ------------ ---------- ---------- ---------- www/libxul19 libxul 1.9.2.28_1 104
So now we have the ‘problematic’ dependency entry nailed, lets modify it a little to the real installed packages state.
# sqlite3 /var/db/pkg/local.sqlite "update deps set origin='www/libxul' where name='libxul';" # sqlite3 /var/db/pkg/local.sqlite "update deps set version='10.0.12' where name='libxul';"
You can of course use the ‘official’ way by using the pkg shell command.
# pkg shell SQLite version 3.7.13 2012-06-11 02:05:22 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> update deps set origin='www/libxul' where name='libxul'; sqlite> update deps set version='10.0.12' where name='libxul'; sqlite> .header on sqlite> .mode column sqlite> select * from deps where name='libxul'; origin name version package_id ---------- ---------- ---------- ---------- www/libxul libxul 10.0.12 104 sqlite> .quit
Now portmaster is happy and does not complain about any missing dependencies.
# portmaster --check-depends (...) Checking dependencies: zenity Checking dependencies: zip Checking dependencies: zsh #
Viola! Problem solved π
… but pkg(8) has a tool for that already π
Its called pkg set and two most useful options from man pkg-set are.
-n oldname:newname, --change-name oldname:newname Change the package name of a given dependency from oldname to newname. (...) -o oldorigin:neworigin, --change-origin oldorigin:neworigin Change the port origin of a given dependency from oldorigin to neworigin. This corresponds to the port directory that the package originated from. Typically, this is only needed for upgrading a library or package that has MOVED or when the default version of a major port dependency changes. (DEPRECATED) Usually this will be explained in /usr/ports/UPDATING. Also see pkg-updating(8) and EXAMPLES.
In our case we would use pkg set -o www/libxul19:www/libxul command.
Not sure if it will solve that problem in the same way as I also updated the version in the database.
Use pkg_libchk from bsdadminscripts2 Package
There is also other way to fix/check for such problems – its the pkg_libchk from the bsdadminscripts2 package. Keep in mind that there are TWO conflicting (!) packages with bsdadminscripts in their name.
# pkg search bsdadmin bsdadminscripts-6.1.1_8 Collection of administration scripts bsdadminscripts2-0.2.1 BSD Administration Scripts 2
Β
… and once you install bsdadminscripts2 you will not be able to install bsdadminscripts because they are conflicting. I already had bsdadminscripts2 installed and wanted to add bsdadminscripts to my system.
# pkg install bsdadminscripts Updating FreeBSD repository catalogue... FreeBSD repository is up to date. All repositories are up to date. Checking integrity... done (1 conflicting) - bsdadminscripts-6.1.1_8 conflicts with bsdadminscripts2-0.2.1 on /usr/local/sbin/distviper Checking integrity... done (0 conflicting) The following 2 package(s) will be affected (of 0 checked): Installed packages to be REMOVED: bsdadminscripts2-0.2.1 New packages to be INSTALLED: bsdadminscripts: 6.1.1_8 Number of packages to be removed: 1 Number of packages to be installed: 1 Proceed with this action? [y/N]: n
Here is the description of the /usr/ports/ports-mgmt/bsdadminscripts2 port/package.
# cat /usr/ports/ports-mgmt/bsdadminscripts2/pkg-descr This is a collection of scripts around the use of ports and packages. It allows you to: - check library dependencies without producing false positives (pkg_libchk) - lets you manage the autoremove flag for leaf packages (pkg_trim) - remove obsolete or damaged distfiles (distviper) - manage build flags (buildflags.conf) - auto-create pkg-plist files taking port options into account (makeplist) WWW: https://github.com/lonkamikaze/bsda2
There are exactly 4 tools in this package.
% pkg info -l bsdadminscripts2 | grep bin /usr/local/sbin/distviper /usr/local/sbin/makeplist /usr/local/sbin/pkg_libchk /usr/local/sbin/pkg_trim
Invoked without any arguments it will check all packages installed in a system.
# pkg_libchk Jobs done: 35 of 1057 bhyve-firmware-1.0_1 bash-5.0.3 beadm-1.2.9_1
… so in order to make the ckecks only for Chromium you will need to specify chromium package with pkg_libchk chromium command.
The pkg_libchk allows you to fetch missing dependencies based on which package provides what files or create a list of the packages that need to be rebuilt.
Use Provides Database
You can also use ‘provides’ database from pkg(8) command.
% pkg provides lib/libx264.so Name : libx264-0.157.2945 Desc : H.264/MPEG-4 AVC Video Encoding (Library) Repo : FreeBSD Filename: /usr/local/lib/libx264.so.155 /usr/local/lib/libx264.so
To learn how to setup ‘provides’ database for pkg(8) command check the Less Known pkg(8) Features article please.
UPDATE 1 – Rework Entire Article
The Roman philosopher Seneca once said – “While we teach, we learn.” – it is very true – especially for this article. After I posted it on various places people reminded my that its not the best way to just create symlink and that its not the best way to do it. I stand corrected and added additional sections and methods of fixing a broken dependency on a FreeBSD (or Linux/Illumos) system.
Interesting example, thanks for posting about it, but IMO this particular case is product of mixing ports and packages.
As you said in “Less Known pkg(8) Features” https://vermaden.wordpress.com/2019/01/17/less-known-pkg8-features/
you are building ffmpeg from ports because you need lame support. Now, multimedia/ffmpeg make will also build multimedia/libx264 and version in ports is libx264-0.157.2945
LikeLike
I posted comment before I did pkg upg. I just updated, ffpmeg had upgrade and ldd ffpmeg is showing libx264 1.57
libx264-0.157.2945.txz 2019-Mar-19 01:19
ffmpeg-4.1.1_10,1.txz 2019-Mar-19 02:33
(quarterly pkgs still have libx264-0.155)
Also, I just installed chromium to check (chromium-72.0.3626.121_1.txz 2019-Mar-19 17:13) and
ldd /usr/local/share/chromium/chrome | grep libx264
libx264.so.157 => /usr/local/lib/libx264.so.157
so maybe there is no need for that ln anymore π
All best π
LikeLike
Thank you for little investigation π
That is exactly the case and I rebuild ffmpeg after pkg upgrade but when I need Chromium now its now, not later when ffmpeg package will be rebuilt – hence the ‘fix’ post – maybe someone find it useful.
Its not actually a solution – its more like – you can try this and in 90% cases it should work, I will make an UPDATE to the post and will try to ‘fix’ that.
Regards,
vermaden
LikeLiked by 1 person
Good job troubleshooting, but sadly, your “fix” was bushleague and could potentially break more things on your next update. Creating willy-nilly symlinks in a pkg-managed prefix like /usr/local is never a good idea. I suggest you read libmap.conf(1).
LikeLike
Thank you for comment, I will update the post with more information and options.
LikeLike
Pingback: Valuable News – 2019/03/25 | ππππππππ
Pingback: In Other BSDs for 2019/03/23 – DragonFly BSD Digest