|
| 1 | +# Gestión de paquetes |
| 2 | + |
| 3 | +## Introducción |
| 4 | + |
| 5 | +En los sistemas Linux existen varios métodos para instalar programas en el sistema. La opción más primitiva y abierta es descargar el código fuente del programa, compilarlo e instalarlo asegurándonos previamente que tenemos todas las dependencias instaladas. Este método de instalación provee generalmente de un fichero `Makefile` con el listado de instrucciones para ser usadas por el comando `make` para compilar e instalar. |
| 6 | + |
| 7 | +La otra opción para manejar la gestión de aplicaciones es usar un gestor de paquetes. Un gestor de paquetes es un conjunto de programas que se encargan de instalar, actualizar y eliminar aplicaciones del sistema de forma automática. |
| 8 | + |
| 9 | +Los programas en Linux vienen empaquetados (y comprimidos) en un único fichero donde además de la funcionalidad del programa trae información sobre sí mismo, dependencias, hash de verificación, distribuidor, versión, etc. Existen diferentes formatos de paquetes que están enfocados en distribuciones específicas como `.deb` o `.rpm`. Las más generales utilizan `.tar.gz` o `.tar.xz` |
| 10 | + |
| 11 | +El gestor de paquetes puede variar en función de la distribución que estemos usando, pero todos cumplen la misma funcionalidad común. |
| 12 | + |
| 13 | +Ejemplos de gestores de paquetes: |
| 14 | + |
| 15 | +- `zypper` - utilizados en sistemas SUSE y openSUSE entre otros. |
| 16 | +- `dpkg`, `apt-get` y compañía - utilizados en sistemas basados en Debian (existen muchos basados en estos como `snap`, `aptitude`, `synaptic`, etc). |
| 17 | +- `pacman` - utilizados en sistemas basados en Arch (`yay` y derivados para el repositorio AUR). |
| 18 | +- `rpm`, `yum` y su sucesora `dnf` - utilizados en sistemas basados en Red Hat Enterprise Linux. |
| 19 | +- `nix` - gestor de paquetes sin distribución específica |
| 20 | +- `portage` - utilizados en sistemas basadaos en Gentoo |
| 21 | + |
| 22 | +Las distribuciones que utilizan gestores de paquetes obtienen sus paquetes de **repositorios**. Los repositorios son servidores públicos cuyo objetivo es almacenar paquetes a disposición de los usuarios. Existen repositorios oficiales y no oficiales. Los paquetes que provienen de repositorios oficiales son mantenidos por las entidades que crearon la distribución. Los repositorios no oficiales son mantenidos por la comunidad para aportar paquetes que los creadores de la distribución no admiten como paquetes core por diversos motivos (por ejemplo, filosofía OpenSource). |
| 23 | + |
| 24 | +> Los siguientes ejemplos están basados sobre una máquina Ubuntu, cuyo gestor de paquetes oficial más utilizado es `apt`. |
| 25 | +> Todos los ejemplos de comandos precedidos con un `#` indican que requieren de permisos de superusuario para ser ejecutados. Los que empiezan por `$` pueden ser ejecutados por cualquier usuario común. |
| 26 | +
|
| 27 | +## Gestión de paquetes en Ubuntu. |
| 28 | + |
| 29 | +El gestor de paquetes `apt` está separado en diferentes programas independientes: |
| 30 | + |
| 31 | +- `apt-get`: Encargado de instalar, desinstalar, actualizar paquetes y sincronizar la lista de paquetes con los repositorios. |
| 32 | +- `apt-cache`: Encargado de servir información relacionada con los paquetes (buscar paquetes, mostrar información de paquetes, etc). |
| 33 | +- `apt`: Sucesor de `apt-get` y `apt-cache` cuya API aún no es del todo estable, pero es bastante funcional. |
| 34 | +- `apt-key`: Encargado de manipular la lista de claves para autenticar paquetes. Útil si utilizamos repositorios externos, ya que las claves de los repositorios oficiales son manejadas automáticamente. Cuando descargamos un paquete está firmado digitalmente para asegurar su autenticifidad. |
| 35 | +- `add-apt-repository`: Encargado de añadir o eliminar un repositorio de la lista de repositorios. |
| 36 | + |
| 37 | +El listado de repositorios habilitados se encuentra en `/etc/apt/sources.list`. |
| 38 | + |
| 39 | +### Sincronizar caché de paquetes con los repositorios |
| 40 | + |
| 41 | +Para saber qué paquetes están disponibles en los repositorios junto con sus versiones hace falta sincronizarse con los repositorios que tengamos configurados. Este proceso es importante a la hora de instalar paquetes ya que sin él podríamos requerir un paquete que ya no exista o sea demasiado antiguo. |
| 42 | + |
| 43 | +Para actualiza la caché de paquetes utilizamos el comando: |
| 44 | + |
| 45 | +```shell |
| 46 | +# apt-get update |
| 47 | +``` |
| 48 | + |
| 49 | +O con `apt`: |
| 50 | + |
| 51 | +```shell |
| 52 | +# apt update |
| 53 | +``` |
| 54 | + |
| 55 | +### Instalar y actualizar paquetes específicos |
| 56 | + |
| 57 | +Para instalar paquetes utilizamos el comando: |
| 58 | + |
| 59 | +```shell |
| 60 | +# apt-get install <package1> <package2> ... <packageN> |
| 61 | +``` |
| 62 | + |
| 63 | +Ejemplo: |
| 64 | + |
| 65 | +```shell |
| 66 | +# apt-get install nodejs npm |
| 67 | +``` |
| 68 | + |
| 69 | +Admite varias opciones como `-q` para instalación silenciosa, `-s` para realizar simulación de instalacíon sin realmente añadirlo al sistema o `-y` para que no nos pida confirmación de instalación. |
| 70 | + |
| 71 | +Si intentamos instalar un paquete que esté instalado ya en el sistema intentará actualizarlo si existiesen nuevas versiones del mismo. En caso de no haber actualizaciones no realizará cambios en el sistema a menos que utilicemos los flags que empiezan por `--allow` (man apt-get) para forzar una reinstalación. También podemos especificar que sólo actualice paquetes sin añadirlos en caso de que no estuviese previamente instalados con el flag `--only-upgrade`. |
| 72 | + |
| 73 | +También podemos utilizar `apt`: |
| 74 | + |
| 75 | +```shell |
| 76 | +# apt install nodejs npm |
| 77 | +``` |
| 78 | + |
| 79 | +### Actualizar todos los paquetes: |
| 80 | + |
| 81 | +Para actualizar todos los paquetes con versiones nuevas disponibles sin tener que especificar uno por uno utilizaremos el comnado: |
| 82 | + |
| 83 | +```shell |
| 84 | +# apt-get upgrade |
| 85 | +``` |
| 86 | + |
| 87 | +O utilizando `apt`: |
| 88 | + |
| 89 | +```shell |
| 90 | +# apt upgrade |
| 91 | +``` |
| 92 | + |
| 93 | +Para obtener un listado de paquetes con actualizaciones nuevas podemos ejecutar: |
| 94 | + |
| 95 | +```shell |
| 96 | +$ apt list --upgradable |
| 97 | +``` |
| 98 | + |
| 99 | +Con `apt-get` no existe una forma simple de ver este listado, pero una opción es utilizar la opción `-s` para simular la actualización y así ver los paquetes: |
| 100 | + |
| 101 | +```shell |
| 102 | +$ apt-get upgrade -s |
| 103 | +``` |
| 104 | + |
| 105 | +### Eliminar paquetes: |
| 106 | + |
| 107 | +Para eliminar paquetes utilizaremos el comando: |
| 108 | + |
| 109 | +```shell |
| 110 | +# apt-get remove <package1> <package2> ... <packageN> |
| 111 | +``` |
| 112 | + |
| 113 | +Ejemplo: |
| 114 | + |
| 115 | +```shell |
| 116 | +# apt-get remove nodejs npm |
| 117 | +``` |
| 118 | + |
| 119 | +Admite diversos flags como `-y` para no pedir confirmación, `-s` para simular el borrado, etc. |
| 120 | + |
| 121 | +Si añadimos el signo `+` al final del nombre del paquete lo instalará en vez de borrar. Por ejemplo, `nodejs+` instalará `nodejs` en vez de borrarlo. |
| 122 | + |
| 123 | +Es importante saber que `apt-get remove` elimina los paquetes pero deja los ficheros de configuración en el sistema. Para eliminar también sus ficheros de configuración utilizaremos `apt-get purge`: |
| 124 | + |
| 125 | +```shell |
| 126 | +# apt-get purge nodejs npm |
| 127 | +``` |
| 128 | + |
| 129 | +Si utilizamos `apt` tenemos tanto `apt remove` y `apt purge` para las dos operaciones mencionadas. |
| 130 | + |
| 131 | +Si por algún motivo tenemos alguna dependencia _huérfana_ de paquetes, es decir, dependencias que no han sido eliminadas al desinstalar un paquete utilizaremos el siguiente comando para eliminarlas: |
| 132 | + |
| 133 | +```shell |
| 134 | +# apt-get autoremove |
| 135 | +``` |
| 136 | + |
| 137 | +O utilizando `apt`: |
| 138 | + |
| 139 | +```shell |
| 140 | +# apt autoremove |
| 141 | +``` |
| 142 | + |
| 143 | +### Buscar paquetes en los repositorios: |
| 144 | + |
| 145 | +Para buscar paquetes en los repositorios utilizaremos: |
| 146 | + |
| 147 | +```shell |
| 148 | +$ apt-cache search <package> |
| 149 | +``` |
| 150 | + |
| 151 | +Esto buscará en los repositorios los paquetes que tengan relación directa o indirecta con el nombre del paquete que hayamos puesto o paquetes con nombres similares. |
| 152 | + |
| 153 | +Ejemplo: |
| 154 | + |
| 155 | +```shell |
| 156 | +$ apt-cache search npm |
| 157 | +``` |
| 158 | + |
| 159 | +Utilizando `apt`: |
| 160 | + |
| 161 | +```shell |
| 162 | +$ apt search npm |
| 163 | +``` |
| 164 | + |
| 165 | +### Ver datos de un paquete: |
| 166 | + |
| 167 | +Para obtener información de uno o varios paquetes utilizaremos: |
| 168 | + |
| 169 | +```shell |
| 170 | +$ apt-cache show <package1> <package2> ... <packageN> |
| 171 | +``` |
| 172 | + |
| 173 | +Ejemplo: |
| 174 | + |
| 175 | +```shell |
| 176 | +$ apt-cache show npm |
| 177 | +``` |
| 178 | + |
| 179 | +O si utilizamos `apt`: |
| 180 | + |
| 181 | +```shell |
| 182 | +$ apt show npm |
| 183 | +``` |
| 184 | + |
| 185 | +### Mostrar paquetes instalados |
| 186 | + |
| 187 | +La interfaz de `apt-cache` no tiene ningún flag para obtener un listado de paquetes instalado, pero el comando `dpkg` sí: |
| 188 | + |
| 189 | +```shell |
| 190 | +$ dpkg -l |
| 191 | +``` |
| 192 | + |
| 193 | +Todos los paquetes que comiencen por `ii` están instalados en el sistema. |
| 194 | + |
| 195 | +Utilizando `apt`: |
| 196 | + |
| 197 | +```shell |
| 198 | +$ apt list --installed |
| 199 | +``` |
0 commit comments