helloSystem / docs

This repository builds the documentation for hello
https://hellosystem.github.io/docs/
BSD 2-Clause "Simplified" License
20 stars 22 forks source link

Explain compatiblity libraries #24

Open probonopd opened 3 years ago

probonopd commented 3 years ago

Documentation currently says

Applications compiled on one major version of FreeBSD are expected to run on subsequent major versions of FreeBSD if compatiblity libraries are installed. Example: An application compiled on FreeBSD 3.2 is expected to run on FreeBSD 14 if compatiblity libraries are installed.

We should explain this using a practical example. https://www.cinelerra-gg.org/freebsd-package/ seems to require siome libraries in versions older than what currently ships with helloSystem.

What are the exact steps to make it run?

Related: https://github.com/helloSystem/launch/issues/1#issuecomment-798869996

crees commented 3 years ago

Unfortunately, you can't without dragging archived packages out. You could use (shameless plug) ports-mgmt/portdowngrade to get them, but actually cinelerra should be in ports. I'll get in touch with them to find out their scripts.

probonopd commented 3 years ago

Well. Actually I am just using Cinelerra as an example here for the many (not super-fat) .app bundles that may see the light of day.

probonopd commented 3 years ago

I suspect that http://pkg.freebsd.org/FreeBSD:12:amd64/release_0/All/ might have the needed libraries but it gives me 403 Forbidden.

probonopd commented 3 years ago

On IRC this explanation was given to me by Zirias:

the only way to get them is compile yourself from an older ports tree.

but... why? someone must already have compiled the older versions? and i _suspect_ them to be in release_0 yep, and they're deleted from the repo as soon as a new version is there ports are "rolling release". you have latest and one quarterly snapshot. that's it. what happens with the older quarterly snapshots? /dev/null they stay in subversion of course. you can always build yourself.

So, what is __release_0__ then?

probonopd commented 3 years ago

I suspect that http://pkg.freebsd.org/FreeBSD:12:amd64/release_0/All/ might have the needed libraries but it gives me 403 Forbidden.

Is there a safe way to use the pkg command to find this out, without any risk to my existing system?

mkdir -p /usr/local/etc/pkg/repos

Then write to /usr/local/etc/pkg/repos/release_0.conf:

release_0: {
  url: "pkg+http://pkg.FreeBSD.org/${ABI}/release_0",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}

Then pkg -vv should show:

Repositories:
  FreeBSD: { 
    url             : "pkg+http://pkg.FreeBSD.org/FreeBSD:12:amd64/quarterly",
    enabled         : yes,
    priority        : 0,
    mirror_type     : "SRV",
    signature_type  : "FINGERPRINTS",
    fingerprints    : "/usr/share/keys/pkg"
  }
  release_0: { 
    url             : "pkg+http://pkg.FreeBSD.org/FreeBSD:12:amd64/release_0",
    enabled         : yes,
    priority        : 0,
    mirror_type     : "SRV",
    signature_type  : "FINGERPRINTS",
    fingerprints    : "/usr/share/keys/pkg"
  }

Then do sudo pkg update.

Then do

% pkg search openexr         
gstreamer1-plugins-openexr-1.16.2_5 GStreamer OpenExr codec plugin
openexr-2.5.5                  High dynamic-range (HDR) image file format
gstreamer1-plugins-openexr-1.12.3_2 GStreamer OpenExr codec plugin
openexr-2.3.0                  High dynamic-range (HDR) image file format
py27-openexr-1.2.0_8           Python module for ILM's OpenEXR image format and library
probonopd commented 3 years ago

Then download the tgz with

sudo pkg fetch --repository release_0  -o . openexr

Then we have /var/cache/pkg/openexr-2.3.0.txz.

Which indeed contains

libIlmImf-2_3.so.24         libIlmImf.so                libIlmImfUtil.a
libIlmImf-2_3.so.24.0.0     libIlmImfUtil-2_3.so.24     libIlmImfUtil.so
libIlmImf.a                 libIlmImfUtil-2_3.so.24.0.0
probonopd commented 3 years ago

With a lot_ of manual work, this is the result:

image

So it can be done but it is way too cumbersome at the moment.

We need an automated way to "download the required compatibility libraries".