Cómo usar "ccache" para compilar en PkgSrc de SmartOS
Utilizo muy frecuentemente el entorno de compilación PkgSrc para SmartOS y voy personalizándolo poco a poco para mejorar mi experiencia y ajustarlo mejor a mi forma de trabajar.
Estudiando la documentación de PkgSrc, me encuentro un capítulo interesante: Speeding up pkgsrc builds with ccache and distcc. Yo utilizo ccache en muchos de mis entornos y poder utilizarlo también en PkgSrc me resulta atractivo.
Los pasos descritos en esa web son generales para PkgSrc, pero, en el caso concreto de SmartOS, sus actualizaciones trimestrales, su entorno chroot, etc, encuentro más fácil meter esos cambios como variables de entorno que modificar ficheros de configuración (tendría que cambiar un fichero en cada uno de los branches que utilizo). Una forma simple de hacerlo en SmartOS es modificar el fichero /data/pkgbuild/scripts/run-sandbox [1] y añadirle lo siguiente en la creación del fichero .bashrc para el entorno chroot:
# Ver el comentario en # https://wiki.netbsd.org/tutorials/pkgsrc/build_ccache_distcc/ export CCACHE_DIR=/root/.ccache/ export PKGSRC_COMPILER=ccache gcc
Obsérvese el detalle de definir CCACHE_DIR de forma explícita. La razón se explica en el comentario de Speeding up pkgsrc builds with ccache and distcc que, resumiendo, indica que si no se hace así, cada compilación utiliza una caché separada y, por tanto, no se reutiliza y no sirve de nada.
Con estos cambios, cuando intentemos compilar algo, se instalará ccache y se utilizará automáticamente.
Advertencia
Por algún motivo, la primera vez que compilamos algo con esta configuración nos va a salir el siguiente error:
checking for x86_64-sun-solaris2.11-gcc... gcc checking whether the C compiler works... no configure: error: C compiler cannot create executables See `config.log' for more details *** Error code 77
Haciendo bmake clean y volviéndolo a intentar, ya funciona bien.
Esto es algo a estudiar en el futuro.
¿Cuánto ganamos utilizando ccache? El efecto se nota más cuanto más larga es la compilación:
normal | ccache | |
Apache | 1:29 | 0:49 |
tor | 3:25 | 1:02 |
python39 | 6:02 | 1:36 |
[1] | Para estos cambios utilizo Ansible. No los hago a mano, que sería un coñazo cada vez que reprovisiono la zona SmartOS. |
Actualización 20220824: Tal vez te interese leer "ccache" persistente en el PkgSrc de SmartOS.
Actualización 20230123: Más sobre este tema en Cómo usar "ccache" para compilar en PkgSrc de SmartOS (II).