Identificar el administrador de paquetes del sistema

12

¿Hay alguna forma (desde un script) de identificar el administrador de paquetes del sistema predeterminado?

Para aclarar, lo que quiero hacer es ejecutar un comando dado y, en Debian o cualquiera de sus derivados, devolverá algo así como "apt", en openSUSE devolverá "zypp", en Fedora y otros devolverá "mmm", en Arch Linux devolverá "pacman", etc.

Sé que puedo hacer esto con algo como lo siguiente, me preguntaba si había un método más robusto que no se rompa tan pronto como haya un ejecutable con el mismo nombre.

which apt >/dev/null 2>&1
if [ $? -eq 0 ]
then
    echo "apt"
fi
# etc...
DrAl
fuente

Respuestas:

9

Comience con la respuesta aceptada a esta pregunta: ¿Cómo puedo obtener el nombre de distribución y el número de versión en un script de shell simple? . Luego, decida qué administrador de paquetes desea utilizar en función de la distribución detectada.

Jim Paris
fuente
¿Existe una lista disponible de gestores de paquetes para diferentes distribuciones? Hay muchos clones debian en particular.
DrAl
No estoy seguro acerca de una lista fácilmente disponible, pero todos los clones de Debian usarán apt-get.
Jim Paris
Sí, me doy cuenta de eso; mi problema no es tanto identificar la distribución (aunque su enlace ciertamente lo hará más fácil), es descubrir cómo vincular un nombre de distribución como (elegir uno al azar) "SolusOS" con apt sin mantener una lista de cada distribución eso existe.
DrAl
Hágalo de manera automática: compruebe si funciona. Por cierto, que una distribución use apt significa que es un pariente de Debian (y son un grupo bastante compacto), encontrar yum no significa que las convenciones de empaquetado (divididas en biblioteca / desarrollo, un gran bloque de Perl o paquetes individuales fuera) CPAN, ...) son lo mismo. Ni siquiera intente instalar un paquete de Fedora en CentOS (hay al menos 3 o 4 años de sesgo de versión, simplemente no funcionará).
vonbrand
La detección de la distribución solo funcionará para los populares. Una lista blanca no se puede actualizar para todas las distribuciones menos conocidas. Probar directamente la presencia de las herramientas es la única forma de hacer que funcione. Si parece un pato, nada como un pato y grazna como un pato, entonces probablemente sea un pato.
liberforce
8

En lugar de identificar programas binarios, debe comenzar por identificar distribuciones,

Solo le doy algunas líneas que funcionan en bash scripting:

declare -A osInfo;
osInfo[/etc/redhat-release]=yum
osInfo[/etc/arch-release]=pacman
osInfo[/etc/gentoo-release]=emerge
osInfo[/etc/SuSE-release]=zypp
osInfo[/etc/debian_version]=apt-get

for f in ${!osInfo[@]}
do
    if [[ -f $f ]];then
        echo Package manager: ${osInfo[$f]}
    fi
done

Aunque no se puede confiar en estas partes, en general la gente no lo hará.

margarita
fuente
1

Opté por seguir esta ruta después de revisar los otros. Esto se me ocurrió cuando ejecuté muchos contenedores acoplables y necesité curl / jq y no pude confiar en lo que estaba disponible de un trabajo a otro.

script:
 - if [ -x "$(command -v apk)" ]; then apk add --no-cache curl jq; fi
 - if [ -x "$(command -v apt-get)" ]; then apt-get install curl jq; fi
 - if [ -x "$(command -v dnf)" ]; then dnf install curl jq; fi
 - if [ -x "$(command -v zypper)" ]; then zypper install curl jq; fi
marca
fuente