Búsqueda de sitios web

UPT: herramienta universal de gestión de paquetes para Linux


¡Un comando para gobernarlos a todos! O más bien un comando para administrar todos los paquetes en todas las distribuciones.

El mundo de los paquetes de software en Linux y otros sistemas basados en Unix es toda una sabana: cada sistema tiene su propio enfoque de gestión de paquetes, lo que hace la vida un infierno para las personas que tienen que lidiar con múltiples plataformas.

Hay Pacman para Arch Linux y derivados, Alpine Package Keeper (también conocido como APK), Advanced Package Tool (también conocido como APT) para Debian GNU/Linux y derivados, Aptitude, una interfaz para APT, Snapcraft para Ubuntu y derivados, Yellowdog Updater Modified (también conocido como Yum) para sistemas basados en RPM, Slackpkg para Slackware, Emerge para Gentoo, el comando guix en Guix y nix-env en NixOS, entre otros, no mencione pkg en FreeBSD, Homebrew para macOS y Scoop para Windows. Cada uno de ellos tiene su propia forma de gestión, lo que te obliga a aprender diferentes formas de hacer lo mismo.

En resumen, es realmente un desastre… ¿o no?

Ingrese UPT

Un desarrollador llamado sigoden ha creado una herramienta universal llamada Universal Package-management Tool, o UPT para abreviar, capaz de unir cosas en esta jungla. Una vez que lo haya instalado, no necesitará aprender de nuevo el estilo de vida de administración de paquetes.

UPT está escrito en Rust, por lo que debe instalar Rust and Cargo en Ubuntu o cualquier distribución de Linux que esté utilizando.

Recomiendo instalar el paquete rustup para su sistema; los sistemas GNU/Linux generalmente tienen un paquete rustup disponible en sus repositorios.

📋
Todos los siguientes comandos están destinados a ser realizados por el usuario root, a menos que se indique lo contrario, así que no olvide ejecutar su sudo -i comando.
# On Debian GNU/Linux and derivatives:
apt install gcc make rustup

# On Arch Linux and derivatives:
packman -S gcc make rustup

# On Alpine:
apk add gcc make rustup
rustup-init
source ~/.cargo/env

# On RPM-based systems:
yum install gcc make rustup

# On macOS with Homebrew (not Linux, obviously)
brew install clang make rustup
📋
Utilizo clang en lugar de gcc , y a mí me funciona igual de bien, solo necesitarás configurar tu CC y < codifique las variables de entornopellcheck="false" style="white-space: pre-wrap;">CPP, si también desea utilizarlas, a clang y clang++ -E respectivamente.

Después de instalar rustup, no olvide agregar $HOME/.cargo/bin a su PATH. Si está utilizando Bash como shell (generalmente el shell predeterminado), debe agregar la siguiente línea a ~/.bash_profile:

export PATH=$HOME/.cargo/bin:$PATH

Si su shell es Zsh, puede agregar la misma línea anterior a ~/.zshrc en su lugar. No olvides recargar el shell.

Ahora puedes instalar la herramienta de comando upt:

rustup default stable
cargo install upt

Si desea utilizar un usuario administrador (por ejemplo, en la rueda o en el grupo sudo), debe realizar los mismos comandos anteriores que el usuario administrador.

¡Todo listo! Ahora tiene una única herramienta de administración de paquetes que puede usar de la misma manera en todos sus sistemas.

Usando UPT

Actualizando el administrador de paquetes:

sudo upt update

Instalación de un paquete:

sudo upt install package_name

Actualizar un paquete:

sudo upt upgrade package_name

Actualización de todos los paquetes instalados:

sudo upt upgrade

Quitar un paquete:

sudo upt remove package_name

Buscando un paquete (vtk por ejemplo):

sudo upt search vtk

Si el mismo paquete está disponible en apt (deb), Snap, Flatpak, etc., ¿cuál debería elegir UPT durante la instalación? Está determinado por el orden que figura en esta tabla.

| Tool        | Install                     | Uninstall                   | Upgrade                         | Search                     | Info                           | Update Index             | Upgrade All              | List Installed                    |
| ----------- | --------------------------- | --------------------------- | ------------------------------- | -------------------------- | ------------------------------ | ------------------------ | ------------------------ | --------------------------------- |
| upt         | upt install $pkg            | upt remove/uninstall $pkg   | upt upgrade $pkg                | upt search $pkg            | upt info/show $pkg             | upt update               | upt upgrade              | upt list                          | 
| apk         | apk add $pkg                | apk del $pkg                | apk upgrade $pkg                | apk search $pkg            | apk info $pkg                  | apk update               | apk upgrade              | apk list -I/--installed           | 
| apt         | apt install $pkg            | apt remove $pkg             | apt install --only-upgrade $pkg | apt search $pkg            | apt show $pkg                  | apt update               | apt upgrade              | apt list -i/--installed           | 
| brew        | brew install $pkg           | brew uninstall $pkg         | brew upgrade $pkg               | brew search $pkg           | brew info $pkg                 | brew update              | brew upgrade             | brew list                         | 
| cards       | cards install $pkg          | cards remove $pkg           | cards install -u/--upgrade $pkg | cards search $pkg          | cards info $pkg                | cards sync               | cards upgrade            | cards list                        | 
| choco       | choco install $pkg          | choco uninstall $pkg        | choco upgrade $pkg              | choco search $pkg          | choco info $pkg                | choco upgrade all --noop | choco upgrade all        | choco list -l/--local-only        | 
| dnf         | dnf install $pkg            | dnf remove $pkg             | dnf upgrade $pkg                | dnf search $pkg            | dnf info $pkg                  | dnf check-update         | dnf update               | dnf list --installed              | 
| emerge      | emerge $pkg                 | emerge --depclean $pkg      | emerge --update $pkg            | emerge --search $pkg       | emerge --info $pkg             | emerge --sync            | emerge -vuDN @world      | qlist -lv                         | 
| eopkg       | eopkg install $pkg          | eopkg remove $pkg           | eopkg upgrade $pkg              | eopkg search $pkg          | eopkg info $pkg                | eopkg update-repo        | eopkg upgrade            | eopkg list-installed              |
| flatpak     | flatpak install $pkg        | flatpak uninstall $pkg      | flatpak update $pkg             | flatpak search $pkg        | flatpak info $pkg              | -                        | flatpak update           | flatpak list                      | 
| guix        | guix install $pkg           | guix remove $pkg            | guix upgrade $pkg               | guix search $pkg           | guix show $pkg                 | guix refresh             | guix upgrade             | guix package -I/--list-installed  | 
| nix-env     | nix-env -i/--install $pkg   | nix-env -e/--uninstall $pkg | nix-env -u/--upgrade $pkg       | nix-env -qaP $pkg          | nix-env -qa --description $pkg | nix-channel --update     | nix-env -u/--upgrade     | nix-env -q/--query --installed    | 
| opkg        | opkg install $pkg           | opkg remove $pkg            | opkg upgrade $pkg               | opkg find $pkg             | opkg info $pkg                 | opkg update              | opkg upgrade             | opkg list --installed             | 
| pacman      | pacman -S $pkg              | pacman -Rs $pkg             | pacman -S $pkg                  | pacman -Ss $pkg            | pacman -Si $pkg                | pacman -Sy               | pacman -Syu              | pacman -Q                         | 
| pkg         | pkg install $pkg            | pkg remove $pkg             | pkg install $pkg                | pkg search $pkg            | pkg info $pkg                  | pkg update               | pkg upgrade              | pkg info -a/--all                 |
| pkg(termux) | pkg install $pkg            | pkg uninstall $pkg          | pkg install $pkg                | pkg search $pkg            | pkg show $pkg                  | pkg update               | pkg upgrade              | pkg list-installed                | 
| pkgman      | pkgman install $pkg         | pkgman uninstall $pkg       | pkgman update $pkg              | pkgman search $pkg         | -                              | pkgman refresh           | pkgman update            | pkgman search -i -a               | 
| prt-get     | prt-get install $pkg        | prt-get remove $pkg         | prt-get update $pkg             | prt-get search $pkg        | prt-get info $pkg              | ports -u                 | prt-get sysup            | prt-get listinst                  | 
| scoop       | scoop install $pkg          | scoop uninstall $pkg        | scoop update $pkg               | scoop search $pkg          | scoop info $pkg                | scoop update             | scoop update *           | scoop list                        |
| slackpkg    | slackpkg install <slackpkg> | slackpkg remove <slackpkg>  | slackpkg upgrade <slackpkg>     | slackpkg search <slackpkg> | slackpkg info <slackpkg>       | slackpkg update          | slackpkg upgrade-all     | ls -1 /var/log/packages           |
| snap        | snap install --classic $pkg | snap remove $pkg            | snap refresh $pkg               | snap find $pkg             | snap info $pkg                 | -                        | snap refresh             | snap list                         |
| urpm        | urpmi $pkg                  | urpme $pkg                  | urpmi $pkg                      | urpmq -y/--fuzzy $pkg      | urpmq -i $pkg                  | urpmi.update -a          | urpmi --auto-update      | rpm -q/--query --all              |
| winget      | winget install $pkg         | winget uninstall $pkg       | winget upgrade $pkg             | winget search $pkg         | winget show $pkg               | -                        | winget upgrade --all     | winget list                       | 
| xbps        | xbps-install $pkg           | xbps-remove $pkg            | xbps-install -u/--update $pkg   | xbps-query -Rs $pkg        | xbps-query -RS $pkg            | xbps-install -S/--sync   | xbps-install -u/--update | qxbps-query -l/--list-pkgs        |
| yum         | yum install $pkg            | yum remove $pkg             | yum upgrade $pkg                | yum search $pkg            | yum info $pkg                  | yum check-update         | yum update               | yum list --installed              | 
| zypper      | zypper install $pkg         | zypper remove $pkg          | zypper update $pkg              | zypper search $pkg         | zypper info $pkg               | zypper refresh           | zypper update            | zypper search -i/--installed-only

Para preferir un paquete instantáneo sobre otro, puede configurar la variable de entorno UPT_TOOL. En la parte inferior de su archivo bashrc, agregue la línea:

export UPT_TOOL='snap'

Ahora, si ejecuta (no use sudo en el siguiente comando):

sudo upt install vlc

Le pedirá una contraseña. Dale y se instalará el paquete instantáneo.

Instalar el paquete instantáneo usando UPT

Puede ver que se ha instalado la versión instantánea de VLC.

Conclusión

Como puede ver, UPT necesita un esfuerzo inicial para instalarse, lo cual no es mucho para usuarios experimentados de Linux.

Desafortunadamente, aunque el administrador de paquetes es el mismo en diferentes sistemas, sigue siendo una interfaz para el administrador de paquetes predeterminado de cada sistema. Eso significa que los nombres de los paquetes siguen siendo los mismos que usa cada distribución, no puede usar un solo nombre de paquete para diferentes sistemas.

Por ejemplo, si desea instalar el paquete de desarrollo Python, necesitará diferentes paquetes para diferentes sistemas:

# On Alpine, Debian GNU/Linux, and derivatives
upt install python3-dev

# On RPM-based systems:
upt install python3-devel

# On Arch Linux
upt install python

Para los usuarios de Ubuntu, existe una herramienta similar llamada Nala que puede interesarles.

Espero que te guste aprender sobre herramientas CLI tan interesantes. Mantente sintonizado para más.

✍️
Rodrigo Montegasppα Cacilhας es un veterano de Linux con más de 25 años de experiencia jugando con sistemas Linux y escribiendo código.