Pregunta:
Principalmente uso paquetes en FreeBSD, porque la mayoría de ellos me quedan bien. Sin embargo, algunos no me convienen, como el paquete vim
, que no incluye un gvim
gráfico.
No hay problema. Puedo instalar el puerto en su lugar, usando portmaster editors/vim
y seleccionando la opción GTK2
. Esto funciona bien.
Sin embargo, cuando ejecuto pkg upgrade
después de un tiempo, se me presenta lo siguiente:
Reinstalling vim-7.4.110_3 (options changed)
¿Lo que da? No cambié ninguna opción y no hay una nueva versión (tampoco en los puertos). ¿Está comparando mi puerto instalado con la versión remota sin GTK2
?
Por supuesto, puedo dejar que pkg upgrade
haga su trabajo e instalar el puerto nuevamente después, pero esto es estúpido. ¿Cuál es la forma recomendada de actualizar una combinación de paquetes y puertos?
Respuesta:
pkg
recordar que pkg
y los puertos registran el software instalado en el mismo lugar (una base de datos SQLite en /var/db/pkg
). Ninguno de los sistemas registra información adicional de que un software en particular se instaló como un paquete precompilado o como un puerto. Por lo tanto, una vez que se instala una pieza de software mediante cualquiera de los enfoques, las herramientas no tienen forma de saber cómo se instaló.
Cuando seleccionó la compatibilidad con GTK2 para el puerto editors/vim
, se registró en la base de datos del paquete. Cuando más tarde ejecutó la pkg upgrade
, pkg
miró los datos del paquete para vim
y descubrió que el soporte GTK2 se había habilitado en la versión instalada, mientras que no está habilitado en el paquete precompilado. pkg upgrade
está haciendo exactamente lo que debería: encontrar paquetes instalados que sean diferentes de los paquetes precompilados disponibles e intentar actualizarlos. Esas diferencias pueden estar en el número de versión, el gráfico de dependencia, las opciones de tiempo de compilación, etc.
La forma correcta de evitar que pkg
considere un puerto o paquete (una vez instalado, no hay diferencia, en lo que respecta a las herramientas) que desea proteger es usar el comando pkg lock
.
Alternativamente, si se encuentra cambiando las opciones en varios puertos, podría considerar instalar poudriere
y mantener su propio repositorio de paquetes. Se necesita un poco de configuración y funciona mejor si su host de compilación tiene un grupo de almacenamiento ZFS, aunque funcionará si no tiene ZFS; es una forma muy flexible y conveniente de administrar compilaciones de software personalizadas.