package ack-grep 2.12-1 failed to install/upgrade: trying to overwrite `/usr/bin/ack', which is the diverted version of `/usr/bin/ack-grep'
Después de investigar un poco recordé la guía oficial de instalación de ack-grep recomienda renombrar el paquete posterior a su instalación para que sea posible llamar dicho programa simplemente escribiendo ack en lugar de ack-grep, lo que la guía no dice es que esto causará problemas al tratar de actualizar el paquete, al menos es lo que me pasó después de actualizar Ubuntu.
Instalar ack (guía oficial)
Esta es la forma recomendada de instalar ack-grep en Ubuntu (http://beyondgrep.com/install/):Primero necesitamos instalar el paquete:
sudo apt-get install ack-grep
Y luego, por conveniencia, renombramos el paquete instalado:
sudo dpkg-divert --local --divert /usr/bin/ack --rename --add /usr/bin/ack-grep
Este comando causa que el paquete sea renombrado localmente y si se ejecuta sin problemas están listos para usar ackAcerca de dkpg-divert
dpkg-divert crea una "desviación", en este caso local, que cambia el nombre de ack-grep por ack, si ejecutan el siguiente comando:
dpkg-divert --list |grep ack
verán algo como lo siguiente:
desviación local de /usr/bin/ack-grep a /usr/bin/ack
si quieren eliminar dicha desviación puede usar:
sudo dpkg-divert --remove /usr/bin/ack-grep
y deberían ver el siguiente resultado si todo sale bien:
Eliminando `desviación local de /usr/bin/ack-grep a /usr/bin/ack'
Instalar ack (mi recomendación)
El principal problema con la guía oficial es que no dice nada sobre remover la desviación y los posibles problemas que puedes encontrar, y lo cierto es que prefiero usar "ack" antes que "ack-grep" así que usaré un alias.La instalación ack-grep es igual:
sudo apt-get install ack-grep
Ahora vamos a crear un alias y para esto editamos el archivo de configuración de nuestra consola de comandos, por defecto en Ubuntu sería ~/.bashrc
nano ~/.bashrc
y añadimos un línea como la siguiente al final:
alias ack='ack-grep'
Para que el cambio sea visible hay que recargar la terminal, lo cual vuelve a leer el archivo ~/.bashrc, por lo general lo más simple sería cerrar la ventana del emulador de terminal o podemos ejecutar:
exec $SHELL
Y luego debemos poder ejecutar ack de forma normal.
Conclusión
Aunque la guía oficial ofrece una forma simple de hacer que el comando ack esté disponible para todos, crear una desviación local puede causar problemas y a menos que sepamos la forma de usar dpkg-divert podríamos terminar con un paquete roto en nuestro sistema.Mi solución tiene la ventaja de que no afecta futuras actualizaciones y aunque el ejemplo solo afecta la cuenta de un usuario, solo haría falta actualizar el archivo /etc/bash.bashrc (o el equivalente para el shell que esten usando) para hacer este alias accesible a todos los usuarios; cabe resaltar que para mi solución ack está disponible para todos los usuarios si invocan al comando ack-grep sin necesidad de crear un alias.