Em quais distribuições Linux posso confiar na presença de / etc / os-release?

17

Estou tentando encontrar uma maneira de determinar o nome e a versão da distribuição Linux que funcionariam na maioria (ou idealmente, todas) das distribuições modernas. Percebi que /etc/os-releasecontém as informações necessárias nas distribuições que experimentei (CentOS, Debian), mas quão seguro é confiar na presença delas? Comandos como uname -arealmente não contêm as mesmas informações e lsb_releaseaparentemente não estão presentes, por exemplo, no mínimo CentOS.

Existe uma maneira rápida de descobrir exatamente quais distros vêm /etc/os-release? Além disso, é /etc/os-releasegarantido para conter NAME, VERSIONe PRETTY_NAMEcampos?

w128
fonte
1
Ubuntu, Debian, Arch, com certeza. De qualquer forma, eu omitiria detectar a distro dessa maneira. Da última vez que preciso distinguir as distros, verifiquei a presença de gerenciadores de pacotes específicos (por exemplo, pacman -> Arch, apt-get e no pacman -> Ubuntu ou Debian). É uma tarefa meio complicada e eu também gostaria de saber se existe uma solução melhor.
ddnomad
1
Alguém se pergunta por que você precisa saber o nome da distribuição. Isso soa como um caso de detecção do navegador quando você deveria fazer a detecção de recursos .
XDaizu 15/0317
@xDaizu Estou executando scripts em hosts remotos para obter várias informações sobre eles.
w128 15/03/19
@ w128 nesse caso, você não pode verificar se o "recurso" (/ etc / os-release) existe (e fallback para outros métodos, se não), em vez de depender de uma lista estática mutável de distribuições onde funciona?
XDaizu 15/0317
1
@xDaizu voltar a "outros métodos" pode envolver trabalho extra que pode ser desnecessário se eu puder garantir que a solução simples proposta na pergunta seja confiável nas várias distros principais que preciso dar suporte, portanto, uma lista mutável de distribuições suportadas é adequada nesse caso.
w128 15/03/19

Respostas:

14

Qualquer sistema executando o systemd deve ter /etc/os-release, especificado como parte do systemd. Alguns sistemas sem o systemd também podem ter ( por exemplo, Debian 8, em que o systemd é opcional, mas /etc/os-releaseé instalado em todos os casos).

De acordo com a especificação, todos os campos são opcionais e alguns possuem padrões ("Linux" para NAMEe PRETTY_NAME).

Você encontrará mais informações no /etc/os-releaseanúncio .

Stephen Kitt
fonte