Building GNU IceCat From Source On Trisquel 11

13 respuestas [Último envío]
Aku.trisquel
Desconectado/a
se unió: 08/06/2025

Building/Installing GNU IceCat From Source On Trisquel 11 (Aramo)
========================================================================

Hi world, I started attempting to build IceCat from source, and thought, I'd keep some notes that could also be a helpful guide for people.

IceCat is a Firefox fork, or redesign, and it's absolutely one of my favorite web browsers. LibreJS is super cool, and browsing the web in the modern world(~2025) practically requires some management of javascript, adblockers, privacy tweaks, and really, we should also be using virtualization to isolate the browser from our own operating system, because the world wide web is a dangerous place, full of dynamic content and secret systems that threaten people everywhere.

The web browser is like an encapsulated operating system in itself, that is self-sufficient for it's broad goals, which makes it more dangerous; I call it, an Internet Operating System, to distinguish it, as a completely separate operating system, from our own, such as GnuLinux, or Trisquel.

https://directory.fsf.org/wiki/Gnuzilla
"
⚠ Outdated official binary release

Since 2019, IceCat is maintained only as source code. The last IceCat binary release was version 60.7.0, and is no longer supported. Guix and Parabola have up-to-date IceCat binaries. Please ask your distro to package IceCat.
"

The Gnuzilla and IceCat home page: http://www.gnu.org/software/gnuzilla
The sources are hosted on Savannah: http://savannah.gnu.org/projects/gnuzilla
(the actual page where the updated source resides: https://cgit.git.savannah.gnu.org/cgit/gnuzilla.git)

(the version/download link I used for this build: https://cgit.git.savannah.gnu.org/cgit/gnuzilla.git/snapshot/gnuzilla-128.13.0-gnu1.tar.gz)

Finding the right libraries, and figuring out how to build it
========================================================================

~/Desktop/gnuzilla-128.13.0-gnu1/README

# The first thing I did, was actually to follow the readme, and to search for and identify that on my system the listed dependencies, were actually already installed, for other people that may be different.
"
The default configuration of IceCat uses the following libraries:
libpango libpangoxft libpangoft2 libfreetype libxft libgtk2 libx11
"

$ sudo apt search pango
$ sudo apt search freetype
$ sudo apt search libxft
$ sudo apt search libgtk
$ sudo apt search libx11

# So the README provided in the source tarball, is apparently a very old part of the source, and hasn't been updated in awhile. After poking around the source for a bit, reading things, and scratching my head, I finally figured out, that - hey!
# there's a bash script called "makeicecat" in the first directory of the source, and not a make file or a configuration file. So after looking over the script a bit, and finally running it, we are informed we lack the dependencies to build it.

ERROR: This script requires Python 3 jsonschema:
e.g.: 'jsonschema' from the Guix 'python-jsonschema' package
'jsonschema' from the Parabola 'python-jsonschema' package
'jsonschema' from the Trisquel 'python3-jsonschema' package

user@pc:~/Desktop/gnuzilla-128.13.0-gnu1$ sudo apt install python3-jsonschema

user@pc:~/Desktop/gnuzilla-128.13.0-gnu1$ bash ./makeicecat

# and the script proceeds to pull the firefox source, and modify it...

# After the script finishes, we get a new directory:
~/Desktop/gnuzilla-128.13.0-gnu1/output

# which includes the icecat source, and the same readme that was in the original tarball: ~/Desktop/gnuzilla-128.13.0-gnu1/output/icecat-128.13.0/

# At this point, there we're no instructions I could identify that plainly described the correct dependencies for building IceCat-Firefox. Essentially the IceCat source provides a main script (makeicecat) and other tools, to pull in the Firefox source, and modify it, turning it into a new IceCat source directory with a corresponding tarball.

# It took several hours of trial and error, trying to figure out what dependencies Firefox actually required to build, and searching around the internet for answers. I've never built it from source before, but have done it on distributions that provide scripts that automate the whole process.

# Firefox uses a unique build system, to pull in all the required components for building it, and on it's own documentation just says to use "./mach booststrap" to do so.

user@pc:~/Desktop/gnuzilla-128.13.0-gnu1/output/icecat-128.13.0$ ./mach bootstrap

# mach bootstrap failed lacking the package python3-pip, which could be installed on trisquel with apt install python3-pip

# Mainly I sat around, because there was no helpful documentation anywhere in sight,
running ./mach build and letting the build script tell me what dependencies I needed,
and trying to install them like this

user@pc:~/Desktop/gnuzilla-128.13.0-gnu1/output/icecat-128.13.0$ ./mach build

0:02.75 ERROR: Rust compiler 1.75.0 is too old.
0:02.75 To compile Rust language sources please install at least
0:02.75 version 1.76.0 of the 'rustc' toolchain (or, if using nightly,
0:02.75 at least one version newer than 1.76.0) and make sure it is
0:02.75 first in your path.
0:02.75 You can verify this by typing 'rustc --version'.
0:02.75 If you have the 'rustup' tool installed you can upgrade
0:02.75 to the latest release by typing 'rustup update'. The
0:02.75 installer is available from https://rustup.rs/
*** Fix above errors and then restart with "./mach build"

user@pc:~/Desktop/gnuzilla-128.13.0-gnu1/output/icecat-128.13.0$ rustc --version
rustc 1.75.0 (82e1608df 2023-12-21) (built from a source tarball)

# But this process went on for literally three hours of running the ./mach build script,
identifying the missing dependencies, searching for them with sudo apt search, installing them, and trying to juggle version mismatch errors, with rust, clang, llvm

user@pc:~/Desktop/gnuzilla-128.13.0-gnu1/output/icecat-128.13.0$ cargo install cbindgen

warning: be sure to add `/home/user/.cargo/bin` to your PATH to be able to run the installed binaries

0:03.42 ERROR: Could not find clang to generate run bindings for C/C++. Please install the necessary packages, run `mach bootstrap`, or use --with-clang-path to give the location of clang.
*** Fix above errors and then restart with "./mach build"

user@pc:~/Desktop/gnuzilla-128.13.0-gnu1/output/icecat-128.13.0$ sudo apt install node-requirejs

user@pc:~/Desktop/gnuzilla-128.13.0-gnu1/output/icecat-128.13.0$ sudo apt install libpango1.0-dev

0:04.63 ERROR: Package x11-xcb was not found in the pkg-config search path.
0:04.63 ERROR: Perhaps you should add the directory containing `x11-xcb.pc'
0:04.63 ERROR: to the PKG_CONFIG_PATH environment variable
0:04.63 ERROR: No package 'x11-xcb' found
0:04.63 ERROR: Package xrandr was not found in the pkg-config search path.
0:04.63 ERROR: Perhaps you should add the directory containing `xrandr.pc'
0:04.63 ERROR: to the PKG_CONFIG_PATH environment variable
0:04.63 ERROR: No package 'xrandr' found
0:04.63 ERROR: Package xcomposite was not found in the pkg-config search path.
0:04.63 ERROR: Perhaps you should add the directory containing `xcomposite.pc'
0:04.63 ERROR: to the PKG_CONFIG_PATH environment variable
0:04.63 ERROR: No package 'xcomposite' found
0:04.63 ERROR: Package xcursor was not found in the pkg-config search path.
0:04.63 ERROR: Perhaps you should add the directory containing `xcursor.pc'
0:04.63 ERROR: to the PKG_CONFIG_PATH environment variable
0:04.63 ERROR: No package 'xcursor' found
0:04.64 ERROR: Package xdamage was not found in the pkg-config search path.
0:04.64 ERROR: Perhaps you should add the directory containing `xdamage.pc'
0:04.64 ERROR: to the PKG_CONFIG_PATH environment variable
0:04.64 ERROR: No package 'xdamage' found
0:04.64 ERROR: Package xfixes was not found in the pkg-config search path.
0:04.64 ERROR: Perhaps you should add the directory containing `xfixes.pc'
0:04.64 ERROR: to the PKG_CONFIG_PATH environment variable
0:04.64 ERROR: No package 'xfixes' found
0:04.64 ERROR: Package xi was not found in the pkg-config search path.
0:04.64 ERROR: Perhaps you should add the directory containing `xi.pc'
0:04.64 ERROR: to the PKG_CONFIG_PATH environment variable
0:04.64 ERROR: No package 'xi' found

*** Fix above errors and then restart with "./mach build"
user@pc:~/Desktop/gnuzilla-128.13.0-gnu1/output/icecat-128.13.0$ sudo apt search x11-xcb

user@pc:~/Desktop/gnuzilla-128.13.0-gnu1/output/icecat-128.13.0$ sudo apt install libx11-xcb-dev

libxrandr-dev
libxcomposite-dev
libxcursor-dev
libxdamage-dev
libxfixes-dev
libxi-dev

0:05.99 ERROR: Nasm is required to build with AV1, FFVPX, JPEG and VPX, but it was not found.

user@pc:~/Desktop/gnuzilla-128.13.0-gnu1/output/icecat-128.13.0$ sudo apt install nasm

0:05.76 ERROR: Cannot find wasi headers or problem with the wasm compiler. Please fix the problem. Or build with --without-wasm-sandboxed-libraries.
*** Fix above errors and then restart with "./mach build"

# Eventually, after figuring out how to install a newer version of rust, later on, trying to figure out how to upgrade llvm to a newer version, and so that it's relative components were registered for the build system to be capable of identifying them, was a complete and total disaster. How do you properly upgrade llvm (also clang and the "wasi compiler libraries) to llvm-19, and clang-19? I have no idea.

# So then I thought, that since most of the general advice I've seen about GNU Ice Cat recommends using the guix package manager to get it / build it, that I would try to use their build system to do it, and save myself some time (after 4 hours of trying to find documentation for icecat, and firefox, and figuring out how to build them)

user@pc:~$ sudo apt install guix

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
guile-3.0 guile-3.0-libs guile-bytestructures guile-gcrypt guile-git guile-gnutls
guile-json guile-lzlib guile-sqlite3 guile-ssh guile-zlib libgcrypt20-dev libgit2-dev
libgpg-error-dev libguile-ssh13 libhttp-parser-dev liblz-dev liblz1 libsqlite3-dev
libssh-dev libssh2-1-dev nscd
Suggested packages:
guile-3.0-doc libgcrypt20-doc sqlite3-doc libssh-doc
The following NEW packages will be installed:
guile-3.0 guile-3.0-libs guile-bytestructures guile-gcrypt guile-git guile-gnutls
guile-json guile-lzlib guile-sqlite3 guile-ssh guile-zlib guix libgcrypt20-dev libgit2-dev
libgpg-error-dev libguile-ssh13 libhttp-parser-dev liblz-dev liblz1 libsqlite3-dev
libssh-dev libssh2-1-dev nscd
0 upgraded, 23 newly installed, 0 to remove and 0 not upgraded.
Need to get 55.4 MB of archives.
After this operation, 353 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 https://mirror.fsf.org/trisquel aramo/main amd64 guile-3.0-libs amd64 3.0.7-1 [7,538 kB]
Get:2 https://mirror.fsf.org/trisquel aramo/main amd64 guile-3.0 amd64 3.0.7-1 [7,534 B]
Get:3 https://mirror.fsf.org/trisquel aramo/main amd64 guile-bytestructures amd64 1.0.10-3 [226 kB]
Get:4 https://mirror.fsf.org/trisquel aramo/main amd64 libgpg-error-dev amd64 1.43-3+11.0trisquel0 [129 kB]
Get:5 https://mirror.fsf.org/trisquel aramo/main amd64 libgcrypt20-dev amd64 1.9.4-3ubuntu3+11.0trisquel0 [572 kB]
Get:6 https://mirror.fsf.org/trisquel aramo/main amd64 guile-gcrypt amd64 0.3.0-4 [174 kB]
Get:7 https://mirror.fsf.org/trisquel aramo/main amd64 libssh2-1-dev amd64 1.10.0-3 [243 kB]
Get:8 https://mirror.fsf.org/trisquel aramo/main amd64 libhttp-parser-dev amd64 2.9.4-4 [20.4 kB]
Get:9 https://mirror.fsf.org/trisquel aramo-backports/main amd64 libgit2-dev amd64 1.7.2+ds-1ubuntu3+11.0trisquel1 [810 kB]
Get:10 https://mirror.fsf.org/trisquel aramo/main amd64 guile-git amd64 0.5.2-3 [530 kB]
Get:11 https://mirror.fsf.org/trisquel aramo-security/main amd64 guile-gnutls amd64 3.7.3-4ubuntu1.7 [103 kB]
Get:12 https://mirror.fsf.org/trisquel aramo/main amd64 guile-json amd64 4.5.2-3 [55.3 kB]
Get:13 https://mirror.fsf.org/trisquel aramo/main amd64 liblz1 amd64 1.13-1 [37.6 kB]
Get:14 https://mirror.fsf.org/trisquel aramo/main amd64 liblz-dev amd64 1.13-1 [53.3 kB]
Get:15 https://mirror.fsf.org/trisquel aramo/main amd64 guile-lzlib amd64 0.0.2-3 [41.6 kB]
Get:16 https://mirror.fsf.org/trisquel aramo-security/main amd64 libsqlite3-dev amd64 3.37.2-2ubuntu0.5 [847 kB]
Get:17 https://mirror.fsf.org/trisquel aramo/main amd64 guile-sqlite3 amd64 0.1.3-3 [59.1 kB]
Get:18 https://mirror.fsf.org/trisquel aramo/main amd64 libguile-ssh13 amd64 0.13.1-6 [31.1 kB]
Get:19 https://mirror.fsf.org/trisquel aramo/main amd64 guile-ssh amd64 0.13.1-6 [209 kB]
Get:20 https://mirror.fsf.org/trisquel aramo/main amd64 guile-zlib amd64 0.1.0-3 [47.6 kB]
Get:21 https://mirror.fsf.org/trisquel aramo-security/main amd64 libssh-dev amd64 0.9.6-2ubuntu0.22.04.4 [242 kB]
Get:22 https://mirror.fsf.org/trisquel aramo-security/main amd64 guix amd64 1.3.0-4+really1.3.0-5+11.0trisquel1 [43.3 MB]
Get:23 https://mirror.fsf.org/trisquel aramo-security/main amd64 nscd amd64 2.35-0ubuntu3.10+11.0trisquel1 [83.3 kB]
Fetched 55.4 MB in 29s (1,907 kB/s)
Selecting previously unselected package guile-3.0-libs:amd64.
(Reading database ... 260637 files and directories currently installed.)
Preparing to unpack .../00-guile-3.0-libs_3.0.7-1_amd64.deb ...
Unpacking guile-3.0-libs:amd64 (3.0.7-1) ...
Selecting previously unselected package guile-3.0.
Preparing to unpack .../01-guile-3.0_3.0.7-1_amd64.deb ...
Unpacking guile-3.0 (3.0.7-1) ...
Selecting previously unselected package guile-bytestructures.
Preparing to unpack .../02-guile-bytestructures_1.0.10-3_amd64.deb ...
Unpacking guile-bytestructures (1.0.10-3) ...
Selecting previously unselected package libgpg-error-dev.
Preparing to unpack .../03-libgpg-error-dev_1.43-3+11.0trisquel0_amd64.deb ...
Unpacking libgpg-error-dev (1.43-3+11.0trisquel0) ...
Selecting previously unselected package libgcrypt20-dev.
Preparing to unpack .../04-libgcrypt20-dev_1.9.4-3ubuntu3+11.0trisquel0_amd64.deb ...
Unpacking libgcrypt20-dev (1.9.4-3ubuntu3+11.0trisquel0) ...
Selecting previously unselected package guile-gcrypt.
Preparing to unpack .../05-guile-gcrypt_0.3.0-4_amd64.deb ...
Unpacking guile-gcrypt (0.3.0-4) ...
Selecting previously unselected package libssh2-1-dev:amd64.
Preparing to unpack .../06-libssh2-1-dev_1.10.0-3_amd64.deb ...
Unpacking libssh2-1-dev:amd64 (1.10.0-3) ...
Selecting previously unselected package libhttp-parser-dev.
Preparing to unpack .../07-libhttp-parser-dev_2.9.4-4_amd64.deb ...
Unpacking libhttp-parser-dev (2.9.4-4) ...
Selecting previously unselected package libgit2-dev:amd64.
Preparing to unpack .../08-libgit2-dev_1.7.2+ds-1ubuntu3+11.0trisquel1_amd64.deb ...
Unpacking libgit2-dev:amd64 (1.7.2+ds-1ubuntu3+11.0trisquel1) ...
Selecting previously unselected package guile-git.
Preparing to unpack .../09-guile-git_0.5.2-3_amd64.deb ...
Unpacking guile-git (0.5.2-3) ...
Selecting previously unselected package guile-gnutls.
Preparing to unpack .../10-guile-gnutls_3.7.3-4ubuntu1.7_amd64.deb ...
Unpacking guile-gnutls (3.7.3-4ubuntu1.7) ...
Selecting previously unselected package guile-json:amd64.
Preparing to unpack .../11-guile-json_4.5.2-3_amd64.deb ...
Unpacking guile-json:amd64 (4.5.2-3) ...
Selecting previously unselected package liblz1:amd64.
Preparing to unpack .../12-liblz1_1.13-1_amd64.deb ...
Unpacking liblz1:amd64 (1.13-1) ...
Selecting previously unselected package liblz-dev:amd64.
Preparing to unpack .../13-liblz-dev_1.13-1_amd64.deb ...
Unpacking liblz-dev:amd64 (1.13-1) ...
Selecting previously unselected package guile-lzlib.
Preparing to unpack .../14-guile-lzlib_0.0.2-3_amd64.deb ...
Unpacking guile-lzlib (0.0.2-3) ...
Selecting previously unselected package libsqlite3-dev:amd64.
Preparing to unpack .../15-libsqlite3-dev_3.37.2-2ubuntu0.5_amd64.deb ...
Unpacking libsqlite3-dev:amd64 (3.37.2-2ubuntu0.5) ...
Selecting previously unselected package guile-sqlite3.
Preparing to unpack .../16-guile-sqlite3_0.1.3-3_amd64.deb ...
Unpacking guile-sqlite3 (0.1.3-3) ...
Selecting previously unselected package libguile-ssh13.
Preparing to unpack .../17-libguile-ssh13_0.13.1-6_amd64.deb ...
Unpacking libguile-ssh13 (0.13.1-6) ...
Selecting previously unselected package guile-ssh.
Preparing to unpack .../18-guile-ssh_0.13.1-6_amd64.deb ...
Unpacking guile-ssh (0.13.1-6) ...
Selecting previously unselected package guile-zlib.
Preparing to unpack .../19-guile-zlib_0.1.0-3_amd64.deb ...
Unpacking guile-zlib (0.1.0-3) ...
Selecting previously unselected package libssh-dev:amd64.
Preparing to unpack .../20-libssh-dev_0.9.6-2ubuntu0.22.04.4_amd64.deb ...
Unpacking libssh-dev:amd64 (0.9.6-2ubuntu0.22.04.4) ...
Selecting previously unselected package guix.
Preparing to unpack .../21-guix_1.3.0-4+really1.3.0-5+11.0trisquel1_amd64.deb ...
Unpacking guix (1.3.0-4+really1.3.0-5+11.0trisquel1) ...
Selecting previously unselected package nscd.
Preparing to unpack .../22-nscd_2.35-0ubuntu3.10+11.0trisquel1_amd64.deb ...
Unpacking nscd (2.35-0ubuntu3.10+11.0trisquel1) ...
Setting up liblz1:amd64 (1.13-1) ...
Setting up libhttp-parser-dev (2.9.4-4) ...
Setting up guile-3.0-libs:amd64 (3.0.7-1) ...
Setting up libssh-dev:amd64 (0.9.6-2ubuntu0.22.04.4) ...
Setting up libsqlite3-dev:amd64 (3.37.2-2ubuntu0.5) ...
Setting up libgpg-error-dev (1.43-3+11.0trisquel0) ...
Setting up liblz-dev:amd64 (1.13-1) ...
Setting up nscd (2.35-0ubuntu3.10+11.0trisquel1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/nscd.service → /lib/systemd/system
/nscd.service.
Setting up libssh2-1-dev:amd64 (1.10.0-3) ...
Setting up libguile-ssh13 (0.13.1-6) ...
Setting up guile-3.0 (3.0.7-1) ...
update-alternatives: using /usr/lib/x86_64-linux-gnu/guile/3.0/bin/guile to provide /usr/bin/g
uile (guile) in auto mode
Setting up libgit2-dev:amd64 (1.7.2+ds-1ubuntu3+11.0trisquel1) ...
Setting up guile-ssh (0.13.1-6) ...
Setting up guile-lzlib (0.0.2-3) ...
Setting up guile-json:amd64 (4.5.2-3) ...
Setting up guile-bytestructures (1.0.10-3) ...
Setting up guile-sqlite3 (0.1.3-3) ...
Setting up libgcrypt20-dev (1.9.4-3ubuntu3+11.0trisquel0) ...
Setting up guile-git (0.5.2-3) ...
Setting up guile-zlib (0.1.0-3) ...
Setting up guile-gnutls (3.7.3-4ubuntu1.7) ...
Setting up guile-gcrypt (0.3.0-4) ...
Setting up guix (1.3.0-4+really1.3.0-5+11.0trisquel1) ...
Creating group _guixbuild with gid 999.
Creating group _guixbuilder0 with gid 998.
Creating user _guixbuilder0 (Guix build user 0) with uid 998 and gid 998.
Creating group _guixbuilder1 with gid 997.
Creating user _guixbuilder1 (Guix build user 1) with uid 997 and gid 997.
Creating group _guixbuilder2 with gid 996.
Creating user _guixbuilder2 (Guix build user 2) with uid 996 and gid 996.
Creating group _guixbuilder3 with gid 995.
Creating user _guixbuilder3 (Guix build user 3) with uid 995 and gid 995.
Creating group _guixbuilder4 with gid 994.
Creating user _guixbuilder4 (Guix build user 4) with uid 994 and gid 994.
Creating group _guixbuilder5 with gid 993.
Creating user _guixbuilder5 (Guix build user 5) with uid 993 and gid 993.
Creating group _guixbuilder6 with gid 992.
Creating user _guixbuilder6 (Guix build user 6) with uid 992 and gid 992.
Creating group _guixbuilder7 with gid 991.
Creating user _guixbuilder7 (Guix build user 7) with uid 991 and gid 991.
Creating group _guixbuilder8 with gid 990.
Creating user _guixbuilder8 (Guix build user 8) with uid 990 and gid 990.
Creating group _guixbuilder9 with gid 989.
Creating user _guixbuilder9 (Guix build user 9) with uid 989 and gid 989.
Created symlink /etc/systemd/system/guix-daemon.service.wants/gnu-store.mount → /lib/systemd/s
ystem/gnu-store.mount.
Created symlink /etc/systemd/system/multi-user.target.wants/guix-daemon.service → /lib/systemd
/system/guix-daemon.service.
Created symlink /etc/systemd/system/multi-user.target.wants/guix-publish.service → /lib/system
d/system/guix-publish.service.
Processing triggers for libc-bin (2.35-0ubuntu3.10+11.0trisquel1) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for install-info (6.8-4build1) ...

# Guix installed okay, then it was time to update it's database, which takes a long time, like maybe actually 30 minutes...

user@pc:~$ guix pull
...
building /gnu/store/sflmgcfcdwizj7iyd3pfksdvrkc3pskb-config.scm.drv...
building /gnu/store/7k17dvmcrdicjsdxmpvhss4p3i3d70j5-git.scm.drv...
building /gnu/store/j9s3n7iqvh8pqkxkwy91nq3qynr1nby7-hash.scm.drv...
building /gnu/store/b5sv623izy68nvq11iwsl75g9dhfs3ya-module-import.drv...
building /gnu/store/qfrlydlpk7kk3cba3pxvm3flk6ypmb1i-module-import.drv...
building /gnu/store/98g2zb3bps1kc5mlbj05lds496i8nbj0-module-import-compiled.drv...
building /gnu/store/q7dk2wdylkm4mlg0jjrh3nmavaw96fmq-module-import-compiled.drv...
building /gnu/store/7nfllqf881lq5kb2axlnhpdjjvn9xsi6-compute-guix-derivation.drv...
Computing Guix derivation for 'x86_64-linux'... /

# so at this point ...
# "Computing Guix derivation for 'x86_64-linux'... /"
# completely froze, and reading top confirmed, nothing at all was happening
# so guix broke, and attempting to build icecat through the firefox build method also broke
# which left me with no option, but to achieve instant gratification by running a prebuilt binary (after five hours, of trial and error, and searching for unhelpful information)

https://icecatbrowser.org/assets/icecat/128.13.0/icecat_128.13.0esr-1_amd64.deb

user@pc:~/Downloads$ sudo dpkg -i icecat_128.13.0esr-1_amd64.deb

user@pc:~/Downloads$ icecat

# while I was running the prebuilt binary of icecat, trying to force it to enable a new color scheme to make webpages more legible 'guix pull' finally finished giving me this giant error

Computing Guix derivation for 'x86_64-linux'... /
substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0%Backtrace:
substitute: In ice-9/boot-9.scm:
substitute: 1752:10 17 (with-exception-handler _ _ #:unwind? _ # _)
substitute: In unknown file:
substitute: 16 (apply-smob/0 #)
substitute: In ice-9/boot-9.scm:
substitute: 724:2 15 (call-with-prompt _ _ #)
substitute: In ice-9/eval.scm:
substitute: 619:8 14 (_ #(#(#)))
substitute: In guix/ui.scm:
substitute: 2166:12 13 (run-guix-command _ . _)
substitute: In ice-9/boot-9.scm:
substitute: 1752:10 12 (with-exception-handler _ _ #:unwind? _ # _)
substitute: 1752:10 11 (with-exception-handler _ _ #:unwind? _ # _)
substitute: 1747:15 10 (with-exception-handler # …)
substitute: In guix/scripts/substitute.scm:
substitute: 751:18 9 (_)
substitute: 346:26 8 (process-query # _ #:cache-urls _ #:acl _)
substitute: In guix/substitutes.scm:
substitute: 358:27 7 (lookup-narinfos/diverse _ _ # …)
substitute: 315:31 6 (lookup-narinfos "https://ci.guix.gnu.org" _ # _ # _)
substitute: 238:26 5 (fetch-narinfos _ _ #:open-connection _ # _)
substitute: In ice-9/boot-9.scm:
substitute: 1685:16 4 (raise-exception _ #:continuable? _)
substitute: 1685:16 3 (raise-exception _ #:continuable? _)
substitute: 1780:13 2 (_ #<&compound-exception components: (#<&error> #<&orig…>)
substitute: 1685:16 1 (raise-exception _ #:continuable? _)
substitute: 1685:16 0 (raise-exception _ #:continuable? _)
substitute:
substitute: ice-9/boot-9.scm:1685:16: In procedure raise-exception:
substitute: In procedure write_wait_fd: unimplemented
guix pull: error: `/usr/bin/guix substitute' died unexpectedly

# through trial and error I discovered the "resist fingerprinting" in the special IceCat privacy settings forbid changing theme colors
# in 2025 fingerprinting is the least of our worries, so I moved on with it : D

# well, it's a mission failed building gnu icecat firefox from source on Trisquel, and it took me 5 hours searching around, looking for any answers I could find just to fail completely

AdjuntoTamaño
Screenshot_2025-08-10_13-08-20.png435.53 KB
Magic Banana

I am a member!

I am a translator!

Desconectado/a
se unió: 07/24/2010

I believe I recently read on this forum that IceCat is available in Trisquel 12 Ecne and, indeed, here is the package: https://archive.trisquel.org/trisquel/pool/main/i/icecat/icecat_128.13.0-1gnu1+build1-0.12.0trisquel1_amd64.deb

It is not installable on Trisquel 11 though. At least not without tweaks. Indeed GDebi tells me that it "Breaks existing package 'hunspell-en-us' that conflict: "iceweasel'".

Aku.trisquel
Desconectado/a
se unió: 08/06/2025

"
# mach bootstrap failed lacking the package python3-pip, which could be installed on trisquel with apt install python3-pip
"

This is a typo, I don't know how that got in there, it should say "the package python3-pip, which couldn't be installed on trisquel with apt install python3-pip"

Because I couldn't install python3-pip I couldn't run ./mach bootstrap which automatically pulls in the dependencies.

Anyways I got to learn a bit from the process. I had forgotten how involved building firefox was. It's actually a really big program with a lot of dependencies. Plus, it uses a unique build system, "mach build" which I've never even seen or heard of anywhere else.

The thing is, the readme, provided in the icecat tarball on savannah doesn't explain what to do at all, which makes the whole process very confusing, and time consuming. That, plus the web isn't helpful either, directing us to similarly use the mach build system, instead of actually explaining anything. I'd like to actually find, for example, a simple list of it's dependencies, maybe with related packages on a debian based distro, and even a simple outline of the whole build process from source.

Ark74

I am a member!

I am a translator!

Desconectado/a
se unió: 07/15/2009

IceCat for Trisquel 11 might be available after the release of Trisquel 12

Regards

Aku.trisquel
Desconectado/a
se unió: 08/06/2025

So now I've spent another two hours searching around to learn more about this.
But the whole process leaves me with more questions than answers

The firefox build process has been simplified into three basic steps.

From the official firefox linux build docs...

1.1 Install Python
------------------

sudo apt-get install curl python3 python3-pip

1.2 Install Mercurial
---------------------

python3 -m pip install --user mercurial

2. Bootstrap a copy of the Firefox source code

curl https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py -O
python3 bootstrap.py

3. Build
--------

cd mozilla-unified
hg up -C central
./mach build

Congratulations! You've built your own home-grown Firefox!
You should see the following message in your terminal after a successful build:

.. code-block:: console

Your build was successful!
To take your build for a test drive, run: |mach run|
For more information on what to do now, see https://firefox-source-docs.mozilla.org/setup/contributing_code.html

You can now use the ``./mach run`` command to run your locally built Firefox!

If your build fails, please reference the steps in the `Troubleshooting section <#troubleshooting>`_.

Now the fun starts
------------------

Time to start hacking! You should join us on `Matrix `_,
say hello in the `Introduction channel
`_, and `find a bug to
start working on `_.
See the :ref:`Firefox Contributors' Quick Reference` to learn how to test your changes,
send patches to Mozilla, update your source code locally, and more.

Six simple commands, and it's "Time to start hacking!" on firefox apparently.

I did find some good resources to learn about it, but just not from anything firefox provided, instead gnulinux sources actually provided useful information,
like about what packages/dependencies were actually needed in advance, including versioning information. I'm honestly just mad, sitting here looking at all this firefox source code(over 2.7 GB), in the context of years and years, of
commercially driven development, in the name of the "people," and "open source" or "contribution" or whatever they say, honestly anything they write reads to me like static noise, like a commercial on tv, that plays every single day, it's just complete and total nonsense, with a happy, while empty, feeling.

andyprough
Desconectado/a
se unió: 02/12/2015

Don't you need to create a .mozconfig file? I haven't built Firefox in a few years since it has become such a royal pain and the Rust stuff took forever to build and frequently failed. But when I did used to build Firefox and configure it the way I wanted, you had to have a .mozconfig file.

Also, I don't see much need to build IceCat. Ruben, who is one of the IceCat lead devs and is also the Trisquel lead dev, brings all the good stuff from IceCat over and builds Abrowser with it for us. I look at Abrowser as just a more up-to-date version of IceCat.

Aku.trisquel
Desconectado/a
se unió: 08/06/2025

In the upstream defacto build process(firefox) it comes with the configuration already which is just a little 19 line text file in the browser directory...
../gnuzilla-128.13.0-gnu1/output/firefox-128.13.0esr.source/firefox-128.13.0/browser/moz.configure

# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

imply_option("MOZ_PLACES", True)
imply_option("MOZ_SERVICES_HEALTHREPORT", True)
imply_option("MOZ_SERVICES_SYNC", True)
imply_option("MOZ_DEDICATED_PROFILES", True)
imply_option("MOZ_BLOCK_PROFILE_DOWNGRADE", True)
imply_option("MOZ_NORMANDY", True)

with only_when(target_has_linux_kernel & compile_environment):
option(env="MOZ_NO_PIE_COMPAT", help="Enable non-PIE wrapper")

set_config("MOZ_NO_PIE_COMPAT", depends_if("MOZ_NO_PIE_COMPAT")(lambda _: True))

include("../toolkit/moz.configure")

So the defacto build process, which is what I'm trying to learn more about, is basically designed to be totally transparent, which really means invisible, to the end users, reduced to six simple steps I outlined above...

sudo apt-get install curl python3 python3-pip

python3 -m pip install --user mercurial

curl -LO https://raw.githubusercontent.com/mozilla-firefox/firefox/refs/heads/main/python/mozboot/bin/bootstrap.py

python3 bootstrap.py

cd mozilla-unified

hg up -C central

./mach build

the package python3-pip is broken on trisquel 11, so the regular build process doesn't work, and it's really like 7 or 8 steps, including grabbing the tarball, but if it did work, the end user wouldn't have to configure anything, to simply build it and start using it after an hour, of downloading dependencies and compilation probably. The thing is, I don't care about any of that really, I just want to learn more about how it works. At first I just wanted to build IceCat for fun, and now I'm trying to learn more about how firefox is actually put together, and it's like querying a clear glass window, "what's going on in this house Window?" "Well, You can see right through me!"

andyprough
Desconectado/a
se unió: 02/12/2015

I think the best IceCat build instructions are going to be here:
https://icecatbrowser.org/diy.html

Aku.trisquel
Desconectado/a
se unió: 08/06/2025

"I think the best IceCat build instructions are going to be here:
https://icecatbrowser.org/diy.html"

those are the exact, and correct instructions, I was looking for...

thank you

that's exactly what I was talking about, GnuLinux sources are helpful in comparison to the alternative sources of information

Only problem with those instructions are that python3-pip is broken on trisquel 11, and you need the latest versions of clang, llvm, which are called like clang-19, and llvm-19, if you install the latest versions first, it should make the whole process the easiest. then python3-pip can be found as a .deb somewhere for jammy

andyprough
Desconectado/a
se unió: 02/12/2015

>"Only problem with those instructions are that python3-pip is broken on trisquel 11"

Have you looked to see if it's working on Trisquel 12?

Avron

I am a translator!

Desconectado/a
se unió: 08/18/2020

python3-pip is not broken, it is absent because it includes a pip that by default downloads software from PyPI, which includes non-free software, so it is against the GNU FSDG. This is not changed in Trisquel 12.

I have seen https://github.com/ZianElijahSmith/FreePI that tries to make an index of free packages from PyPI, and make it so that pip only fetches packages from that index. From the instructions, it require pip anyway. I don't know whether it is usable yet. If it is, perhaps a patched pip could be made to take this by default, and then included in Trisquel. Or maybe, just put it out of the PATH and make a launching script that sets the repo properly.

Aku.trisquel
Desconectado/a
se unió: 08/06/2025

Im sure it likely does actually, I'd like to try it again, and learn how to modify the firefox source... the thing is such a pain to me, because we basically need firefox to use modern websites, but it's full of "anti-features" or as we say "bloated" Ill try to get it working again soon, but I don't have 12 installed anymore because I'm always hopping around to different systems

Zoma
Desconectado/a
se unió: 11/05/2024

Here's a thought that might help.

qemu-img create -f qcow2 Unknown.qcow2 60G
qemu-system-x86_64 -m 4096 -cdrom Unknown.iso -boot d Unknown.qcow2 --enable-kvm
qemu-system-x86_64 --enable-kvm Unknown.qcow2 -cpu kvm64,+nx -m 4096 -device AC97

the iso is for the OS you want installed

the qcow2 is where it gets installed

I have done this with Gnu systems a lot. Hyperbola most of them, but some devuan and some I won't say even if they have libre licenses.

Point being, you don't have to distrohop, you can also just install on a qcow2 image.

And if need be, you can clone from one too if you bold enough. But I won't suggest that right now.

This stopped some of my distrohopping. The rest? I used multiple drives on one computer. One for one OS and one for another. I have 2 SSDs on a few of my computers

andyprough
Desconectado/a
se unió: 02/12/2015

>"qemu-img create -f qcow2 Unknown.qcow2 60G"

Just make sure you have more than a spare 60GB of hard drive space before running these commands, LOL

I say this because a few folks around here have been running out of available disk space recently.