Estou tentando criar um script que exija que eu imprima o nome de código debian para que eu possa fazer eco no arquivo sources.list.
Eu estou tentando fazer esse script funcionar em qualquer versão do Debian, então eu esperava definir uma variável bash do codinome de lançamento. Isso seria simples de fazer (com lsb_release -c), no entanto, nossas imagens de implantação não contêm lsb_release por padrão - e com esse script sendo necessário para corrigir o sources.list, instalar o lsb-release com o apt-get não seria uma opção .
Encontrei várias maneiras de obter o número da versão e outras informações sobre o sistema, mas não consigo encontrar um local confiável para obter o nome do código.
Todas as idéias seriam muito apreciadas!
(SO que estou testando é o Debian Squeeze)
lsb_release
Respostas:
Você pode usar
/etc/os-release
:fonte
squeeze não é fornecido com
/etc/os-release
, este é o meu 'hack':fonte
Você pode imprimir o código junto com o número da versão do debian:
OU você pode descobrir o seu nome de código a partir do número e da prefixo:
fonte
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
Você pode obter o codinome da sua distribuição Debian em
/etc/os-release
. Em vez de tentar analisar esse arquivo, você pode originar um arquivo em um ambiente novo, para não impactar o ambiente atual e executar umecho
comando nesse novo ambiente.Para dividir:
env
: Execute um comando em um novo ambiente.-i
: Não herde as variáveis de ambiente do ambiente existente.bash
: Execute o bash para que tenhamos um shell para originar o arquivo os-release e executar o comando echo.-c
: Digabash
que queremos executar um comando em vez de iniciar um shell interativo.. /etc/os-release
: Origem do conteúdoos-release
em nosso novo ambiente.os-release
contém algumas linhas definindo variáveis de ambiente, e isso definirá essas variáveis de ambiente em nosso novo ambiente.;
: Separe este comando e execute o próximo comando.echo $VERSION_CODENAME
: Reproduz o nome do código definido peloos-release
arquivo.fonte
echo "$(. /etc/os-release && echo $VERSION_CODENAME"
, mas notou que não há é$VERSION_CODENAME
nostretch
. Notícias muito tristes.echo "$(. /etc/os-release && echo ${VERSION_CODENAME-stretch})"
que parece ok para a minha tarefa, mas parece ruimPara systemd:
resultado:
fonte
Outra heurística é ver de onde vêm os pacotes para o sistema operacional em execução no momento.
Variante simples (e provavelmente propensa a erros):
Uma maneira mais confiável é analisar os detalhes da saída de
apt-cache policy
(sem mais parâmetros):apt-cache policy
lista todos os repositórios do APT em uso no sistema local. Nós filtramos aqueles que se originam do Debian, que são rotulados apenasDebian
(isto é, não aqueles rotulados, por exemploDebian debug
), então apenas olhamos para o arquivo principal (nãocontrib
ounon-free
) e então selecionamos o valor correspondente.Uma abordagem ainda mais estável seria não confiar na ordem dos elementos e encontrar o
n=
valor na linha restante:Outra possibilidade seria analisar os
/var/lib/apt/lists/*Release
arquivos por conta própria, em vez de permitirapt-cache
:fonte
Minha necessidade era adicionar um URL em sources.list. E para poder colocar dinamicamente o nome do código da versão, uso esse trecho de código (confie no fato de que o nome do código está entre parênteses): Inspirado na resposta @PersianGulf .
grep "VERSION=" /etc/os-release |awk -F= {' print tolower($2)'}|sed s/\.*\(//g | sed s/" ".*\"//g
fonte
Expandindo a resposta do @Costas , esse comando não funcionou para 16.04, onde retornou o nome completo "Xerial Xerus", mas eu só queria "xerial", pois era assim que o repositório que eu estava tentando extrair separava as diferentes versões. Este comando adiciona que somente a primeira palavra será retornada e que todas serão minúsculas:
Isso funciona para "jessie" também
fonte
Apenas usando
grep
:Experimente (saída a partir da redação deste post):
fonte
este pode (ou não) ser uma abordagem alternativa ao que a bcoca escreveu no squeeze do Debian - eu testei o Ubuntu 18.04:
fonte