Swipl PPA or snap on Chromebook Linux? (Debian "bullseye")

Is there a trick for installing the latest swipl on Chromebooks?
When I tried, this is what happened:

peter@penguin:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
Codename:       bullseye
peter@penguin:~$ uname -a
Linux penguin 5.4.151-16908-gff376e5d5ee1 #1 SMP PREEMPT Sat Dec 11 19:28:06 PST 2021 x86_64 GNU/Linux

peter@penguin:~$ sudo apt-add-repository ppa:swi-prolog/devel
 More info: https://launchpad.net/~swi-prolog/+archive/ubuntu/devel
Press [ENTER] to continue or ctrl-c to cancel adding it

gpg: keybox '/tmp/tmpgdywg1xt/pubring.gpg' created
gpg: /tmp/tmpgdywg1xt/trustdb.gpg: trustdb created
gpg: key EF8406856DBFCA18: public key "Launchpad PPA for SWI Prolog" imported
gpg: Total number processed: 1
gpg:               imported: 1
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
gpg: no valid OpenPGP data found.

peter@penguin:~$ sudo apt update
Hit:1 https://deb.debian.org/debian bullseye InRelease                                                                     
Ign:2 http://ppa.launchpad.net/swi-prolog/devel/ubuntu jammy InRelease                                                     
Ign:3 https://storage.googleapis.com/cros-packages/96 bullseye InRelease                                                   
Hit:4 https://storage.googleapis.com/cros-packages/96 bullseye Release                                           
Err:6 http://ppa.launchpad.net/swi-prolog/devel/ubuntu jammy Release                                     
  404  Not Found [IP: 2001:67c:1560:8008::19 80]
Get:7 https://security.debian.org bullseye-security InRelease [44.1 kB]
Get:8 https://security.debian.org bullseye-security/main amd64 Packages [100 kB]
Get:9 https://security.debian.org bullseye-security/main Translation-en [62.7 kB]
Reading package lists... Done             
E: The repository 'http://ppa.launchpad.net/swi-prolog/devel/ubuntu jammy Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

The only available package is rather old (8.2.4):

eter@penguin:~$ sudo apt install swi-prolog
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 27.6 kB of archives.
After this operation, 52.2 kB of additional disk space will be used.
Get:1 https://deb.debian.org/debian bullseye/main amd64 swi-prolog amd64 8.2.4+dfsg-1 [27.6 kB]
Fetched 27.6 kB in 1s (31.5 kB/s)     
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package swi-prolog.
(Reading database ... 57352 files and directories currently installed.)
Preparing to unpack .../swi-prolog_8.2.4+dfsg-1_amd64.deb ...
Unpacking swi-prolog (8.2.4+dfsg-1) ...
Setting up swi-prolog (8.2.4+dfsg-1) ...

snapd doesn’t seem to work either:

peter@penguin:~$ sudo snap install --edge swi-prolog
error: system does not fully support snapd: cannot mount squashfs image using "squashfs": mount:
       /tmp/sanity-mountpoint-652048469: mount failed: Operation not permitted.

Of course, I can rebuild (it was easy and surprisingly fast, especially compared to running in the Windows Subsystem for Linux), but others might also want to run swipl on a Chromebook without having to deal with github.

Looks like the answer is at linux - ChromeOS: error: system does not fully support snapd: cannot mount squashfs image using "squashfs": mount: - Stack Overflow

Can’t test it. Anyway, for Ubuntu we have PPAs. For other Linuxes we have snap and for everything we have the source code. And Docker, but that is more useful for servers. I don’t really see what more we can realistically do.

Is the solution more complicated than creating a “Release” file? It seems that somebody has done this for Debian “bullseye”, but hasn’t updated to the latest stable release.

(My ignorance of PPAs is almost total)

PS: the answer for snapd at StackOverflow doesn’t work. But thanks for the pointer – somehow I missed that one and am following up there.

Yes. Debian has maintainers that look at upstream software. They have a (rather conservative) release cycle where upstream software is added to the next Debian release in the various stages of maturity. All goes through rather rigid tests for portability to all their platforms, conformance of all license statements, etc. This typically takes a few iterations to get it right. This of course also includes the impact on software that depends on a Debian package.

In contrast, the Ubuntu PPA system works from the same specification for building the package and the package has the same .deb format. There is no central authority though. Anyone can register for building PPAs and uploads build specifications. These are built on Ubuntu’s build servers and available in a few minutes. The downside is that you must trust the party uploading the specs. They are built for all currently maintained Ubuntu releases. Sometimes they may work on other systems, but often shared library dependencies do not match.

The dependency problem is resolved by snap, which uses technology similar to Docker to realise an image that includes all dependencies by composing layers. Now the entire thing only depends on the kernel (and CPU) which has a great representation when it comes to compatibility. AFAIK, flatpack does something similar.

If you want a Linux system with up-to-date software, checkout one of the rolling releases such as gentoo swi-prolog package

Last but not least, build from source …

Unfortunately, I don’t get to choose the Linux distro on a Chromebook. And using a 2nd package manager (e.g., gentoo’s Portage) sounds dangerous. I have no problem building from source; but not everyone is comfortable doing that. Also, many Chromebooks are pretty weak (I was lucky to find a fast machine with lots of memory at a really good price)

In the end, I was able to install swi-prolog-nox on a Chromebook using these files that I copied from a Ubuntu system:



$ cat /etc/apt/sources.list.d/swi-prolog-ubuntu-devel-focal.list
deb http://ppa.launchpad.net/swi-prolog/devel/ubuntu focal main
# deb-src http://ppa.launchpad.net/swi-prolog/devel/ubuntu focal main

So, it might make sense to add “manual” installation instructions similar to those here: Installing Bazel on Ubuntu - Bazel main
This would require having the public key available in its “ASCII-armored” form (I’m guessing that this would be done with gpg --armor --export).

My attempt to install swi-prolog-x failed with
Depends: libjpeg8 (>= 8c) but it is not installable … the other dependencies (libx11-6, libxft2) are no problem. Debian seems to come with libjpeg.so.62.3.0, but I don’t know how to trick apt into accepting it (assuming the older version of the library suffices).

I haven’t tried this in a while, but in chromeos it should work if you install the squashfs packages. I’m not sure they’re installed by default with snapd.

sudo apt install libsquashfuse0 squashfuse fuse

snapd doesn’t seem to work on Chromebooks, even with libsquashfus0, squashfuse, fuse (I added this comment at stackoverflow and so far nobody has proposed a solution; and I’m loathe to change the ownership of the this directory without understanding what it does):
Failed to write 'change' to '/sys/devices/LNXSYSTM:00/uevent': Permission denied
and the relevant directory:
rwxr-xr-x 5 nobody nogroup 0 Dec 19 09:15 /sys/devices/LNXSYSTM:00/

BTW, when I built swipl on a Chromebook (using cmake/ninja), it passed all the tests and X11-related things seemed to work fine (e.g, gtrace/0, edit/1).