Estoy tratando de crear una secuencia de comandos que requiera que imprima el nombre en código de Debian para poder repetirlo en el archivo sources.list.
Estoy tratando de hacer que este script funcione en cualquier versión de Debian, por lo que esperaba establecer una variable bash del nombre en código de la versión. Esto sería simple de hacer (con lsb_release -c), sin embargo, nuestras imágenes de implementación no contienen lsb_release de forma predeterminada, y con este script requerido para arreglar sources.list, instalar lsb-release con apt-get no sería una opción .
He encontrado numerosas formas de obtener el número de versión y otra información sobre el sistema, pero no puedo encontrar un lugar confiable para obtener el nombre en clave.
Cualquier idea sería muy apreciada!
(El sistema operativo con el que estoy probando esto es Debian Squeeze)
lsb_release
, consulte su código fuente y vea si está dispuesto a reinventar todo esoRespuestas:
Puedes usar
/etc/os-release
:fuente
squeeze no se envía con
/etc/os-release
, este es mi 'hack':fuente
Puede imprimir el código junto con el número de versión de debian:
O puede desnudar su nombre en clave del número y psensar:
fuente
awk -F= '/VERSION=/ {gsub(/"/,""); print $2}' /etc/os-release
awk -F"[=\"]+" '/VERSION=/ {print $2}' /etc/os-release
awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release
Puede obtener el nombre en clave de su distribución de Debian
/etc/os-release
. En lugar de intentar analizar este archivo, puede obtenerlo en un entorno nuevo, para no afectar su entorno actual, y ejecutar unecho
comando en ese nuevo entorno.Para desglosarlo:
env
: Ejecuta un comando en un nuevo entorno.-i
: No herede las variables de entorno del entorno existente.bash
: Ejecute bash para que tengamos un shell para obtener el archivo os-release y para ejecutar el comando echo.-c
: Indiquebash
que queremos ejecutar un comando en lugar de iniciar un shell interactivo.. /etc/os-release
: Fuente de los contenidos deos-release
nuestro nuevo entorno.os-release
contiene algunas líneas que establecen variables de entorno, y esto establecerá esas variables de entorno en nuestro nuevo entorno.;
: Separe este comando y ejecute el siguiente comando.echo $VERSION_CODENAME
: Echo el nombre de código establecido por elos-release
archivo.fuente
echo "$(. /etc/os-release && echo $VERSION_CODENAME"
pero noté que no hay nada$VERSION_CODENAME
adentrostretch
. Muy triste noticia.echo "$(. /etc/os-release && echo ${VERSION_CODENAME-stretch})"
que parece estar bien para mi tarea, pero se ve malPara systemd:
salida:
fuente
Otra heurística es ver de dónde provienen los paquetes para el sistema operativo actualmente en ejecución.
Variante simple (y probablemente propensa a errores):
Una forma más confiable es analizar los detalles de la salida de
apt-cache policy
(sin más parámetros):apt-cache policy
enumera todos los repositorios APT en uso en el sistema local. Filtramos los que se originan en Debian, que están etiquetados soloDebian
(es decir, no aquellos etiquetados, por ejemploDebian debug
), luego solo miramos el archivo principal (nocontrib
onon-free
) y luego seleccionamos el valor correspondiente.Un enfoque aún más estable sería no confiar en el orden de los elementos y encontrar el
n=
valor en la línea restante:Otra posibilidad sería analizar los
/var/lib/apt/lists/*Release
archivos usted mismo en lugar de dejarapt-cache
que haga eso:fuente
Mi necesidad era agregar alguna URL en sources.list. Y para poder poner dinámicamente el nombre del código de la versión, utilizo este código (confío en el hecho de que el nombre del código está entre paréntesis): inspirado por la respuesta @PersianGulf .
grep "VERSION=" /etc/os-release |awk -F= {' print tolower($2)'}|sed s/\.*\(//g | sed s/" ".*\"//g
fuente
Ampliando la respuesta de @Costas , ese comando no funcionó para 16.04 donde devolvió el nombre completo "Xerial Xerus", pero solo quería "xerial", ya que así es como el repositorio que estaba tratando de extraer separó las diferentes versiones. Este comando agrega que solo se devolverá la primera palabra y que será todo en minúsculas:
Esto también funciona para "Jessie"
fuente
Solo usando
grep
:Pruébalo (salida al escribir esta publicación):
fuente
este podría (o no) ser un enfoque alternativo a lo que bcoca escribió en Debian squeeze: lo probé Ubuntu 18.04:
fuente