Fix Broken Dependency on FreeBSD

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.

vermaden_2019-03-21_15-47-40.png


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.

EOF

Continue reading...
 
Back
Top