Compilar icecat para ubuntu jammy con docker
1. Introducción:
Esta página es un intento de ordenar las notas que tomé mientras compilaba icecat. No es un paso a paso, sino que simplemente detallo pasos en los que tuve problemas, estuve atascado y su solución. La manera de hacerlo es seguir el readme incluido en el icecat. Ha sido probado usando la versión 102.9.0
La ventaja de usar un Docker para esto es no tener que instalar un montón de paquetes (y algunos que están fuera del sistema de paquetes, como el cbindgen) que solamente hacen falta para compilar el icecat y mantenemos de este modo el sistema libre de archivos innecesarios, pues podemos borrar limpiamente la imagen del docker al terminar. También permite compilar para otra versión de GNU/Linux distinta a la que tenemos instalada.
El mejor consejo es leer atentamente el README.icecat. Atención que hay una sección titulada «CROSSCOMPILING FOR WINDOWS, ANDROID AND MACOS» que es fundamental también si se compila para GNU/Linux.
2. Pasos previos: docker
Partiendo de este Dockerfile:
Dockerfile
Se construye entonces así docker build -t icecarr .
Es conveniente fijarse en los parámetros uid y gid de la creación de usario y grupo en el docker, que coincidan con el del usuario local de la carpeta externa al docker.
Si hubiera mirado los programas que hay en data/buildscripts
, podría haber simplificado este Dockerfile, gracias al build-gnulinux.sh
y sobre todola línea aptitude -q -y build-dep firefox
. Idealmente habría que integrar el build-gnulinux.sh
en el Dockerfile anterior. Pero lo que hice fue entrar en el docker y ejecutar a mano el build-gnulinux.sh
.
Entrar en el docker. Se trata de hacer una instancia, un contenedor de la imagen:
╰─>$ docker run -i --name icecarbuilt -t -v /home/fresno/dev/icecat/gnuzilla-xx:/home/prueba/icar --user root icecat
ó
╰─>$ docker run -i --name icecarbuilt -t -v /home/fresno/dev/icecat/gnuzilla-xx:/home/prueba/icar --user prueba icecarr
según los permisos que necesitemos (root o usuario normal, aunque el usuario creado tiene permitido sudo).
Si hace falta guardar la imagen, por ejemplo tras ejecutar el build-gnulinux.sh
, entonces hay que consignar la imagen antes de borrar el contenedor:
docker commit -m "falla el elfhack no usa el gcc-toolchain" icecarbuilt icecarr
y ya luego
╰─>$ docker rm icecarbuilt
para poder volver a ejecutarlo con el docker run de más arriba.
Probablemente hace falta añadir al path a mano tras instalar el cbindgen: PATH=${PATH}:/home/prueba/.cargo/bin
3. Ejecución:
Lo 1.º es hacer makeicecat
. Es posible ahorrar tiempo haciendo que no descargue todos los locales editando en ese archivo las líneas 226-227 (función fetch_l10n
):
# download only one language-pack in devel mode [[ "$(echo ${lang} | cut -d' ' -f1)" == "es-ES" ]] || continue
Si es hecho esto, también hay que borrar las carpetas que no hagan falta en data/files-to-append/l10n
Una vez termine de descargar, se trata de compilar como si fuera el firefox original, pero antes hay que preparar el archivo output/icecat-102.9.0/mozconfig
. Si hemos usado el build-gnulinux.sh
de más arriba ya habrá un mozconfig generado que funciona bien. El mío aprovecha bibliotecas del sistema que ya están instaladas y alguna cosilla más que vi de las opciones obtenibles mediante python3 ./configure.py --help
El paquete acaba al final en la carpeta output/icecat-102.9.0/obj-gnulinux/dist
y los idiomas en output/icecat-102.9.0/obj-gnulinux/dist/linux-x86_64/xpi