Skip to content

Instantly share code, notes, and snippets.

@natefoo
Last active April 30, 2024 13:50
Show Gist options
  • Star 77 You must be signed in to star a gist
  • Fork 15 You must be signed in to fork a gist
  • Save natefoo/814c5bf936922dad97ff to your computer and use it in GitHub Desktop.
Save natefoo/814c5bf936922dad97ff to your computer and use it in GitHub Desktop.
Linux Distribution Detection

Distribution Detection

I am working on adding support for building and distributing (via PyPI) Python Wheels with C Extensions to the Python wheel and pip packages. The discussion on Distutils-SIG continues, but I believe it is fairly certain that some effort to correctly identify Linux distributions will need to be made. I've begun efforts to add this support to wheel.

How you can help

If you have a Linux distribution or version of a listed distribution not in this gist, or one of the ones I have not directly verified, I could use the following:

  • The contents of /etc/os-release, if it exists
  • Whether or not the lsb_release program is installed, and whether it's part of a "default" install
  • The output of lsb_release -a if installed
  • The contents of /etc/lsb-release, if it exists
  • The contents of any other /etc/*-release files
  • Any other reliable way to determine the flavor and version of your Linux distribution, especially if none of the above exist

And finally, you can test the platform detection on your platform by downloading and installing (e.g. in a virtualenv) lionshead and running:

% python -c 'import lionshead; print lionshead.get_specific_platform()'

e.g.:

% pip install -e 'hg+https://bitbucket.org/natefoo/wheel#egg=wheel'
% python -c 'import wheel.pep425tags; print wheel.pep425tags.get_platforms()'
['linux_x86_64_ubuntu_14_04', 'linux_x86_64', 'any']

If lsb_release is optional on your system and especially if /etc/os-release does not exist, it'd be even more helpful to run the above prior to installing lsb_release, and again afterward.

Amazon Linux

Amazon Linux 2016.09

/etc/os-release

NAME="Amazon Linux AMI"
VERSION="2016.09"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2016.09"
PRETTY_NAME="Amazon Linux AMI 2016.09"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2016.09:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"

lsb-release -a

lsb_release is not installed as part of a base system, but is available in the redhat-lsb-core package.

LSB Version:	:base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID:	AmazonAMI
Description:	Amazon Linux AMI release 2016.09
Release:	2016.09
Codename:	n/a

/etc/lsb-release

Does not exist

Distro-specific files

/etc/system-release:

Amazon Linux AMI release 2016.09

get_specific_platform()

SpecificPlatform(dist='amzn', major_vers='2016.09', full_vers='2016.09', stability='stable')

Arch

I have not verified this information on an Arch install, I gathered the information from the web.

Arch

/etc/os-release

Via the filesystem package

NAME="Arch Linux"
ID=arch
PRETTY_NAME="Arch Linux"
ANSI_COLOR="0;36"
HOME_URL="https://www.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://bugs.archlinux.org/"

lsb-release -a

lsb_release is not installed as part of the base system, but is available in the lsb-release package.

Just guessing based on looking at the package source:

Distributor ID:	Arch
Description:	Arch Linux
Release:	rolling
Codename:	????

/etc/lsb-release

/etc/lsb-release is installed with the lsb-release package. I believe these would be its contents:

LSB_VERSION=1.4-14
DISTRIB_ID=Arch
DISTRIB_RELEASE=rolling
DISTRIB_DESCRIPTION="Arch Linux"

Distro-specific files

/etc/arch-version:

It is an empty file, but its existence indicates that the distro is Arch.

get_platforms()

Untested, should be:

['linux_x86_64_arch_rolling', 'linux_x86_64', 'any']

CentOS

CentOS 7

/etc/os-release

NAME="CentOS Linux"                                                                                                        
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

lsb-release -a

lsb_release is not installed as part of a base system, but is available in the redhat-lsb-core package.

Distributor ID:	CentOS
Description:	CentOS Linux release 7.1.1503 (Core) 
Release:	7.1.1503
Codename:	Core

/etc/lsb-release

Does not exist

Distro-specific files

/etc/centos-release:

CentOS Linux release 7.1.1503 (Core) 

/etc/redhat-release and /etc/system-release are symlinks to /etc/centos-release.

get_platforms()

['linux_x86_64_centos_7', 'linux_x86_64', 'any']

CentOS 6

/etc/os-release

Does not exist

lsb-release -a

lsb_release is not installed as part of a base system, but is available in the redhat-lsb-core package.

Distributor ID:	CentOS
Description:	CentOS release 6.7 (Final)
Release:	6.7
Codename:	Final

/etc/lsb-release

LSB_VERSION=base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch

Distro-specific files

/etc/centos-release:

CentOS release 6.7 (Final)

/etc/redhat-release and /etc/system-release are symlinks to /etc/centos-release.

get_platforms()

With lsb_release installed:

['linux_x86_64_centos_6_7', 'linux_x86_64_centos_6', 'linux_x86_64', 'any']

Without:

['linux_x86_64_centos_6_7', 'linux_x86_64_centos_6', 'linux_x86_64', 'any']

CentOS 5

/etc/os-release

Does not exist

lsb-release -a

lsb_release is not installed as part of a base system, but is available in the redhat-lsb package.

Distributor ID:	CentOS
Description:	CentOS release 5.11 (Final)
Release:	5.11
Codename:	Final

/etc/lsb-release

Does not exist

Distro-specific files

/etc/redhat-release:

CentOS release 5.11 (Final)

get_platforms()

With lsb_release installed:

['linux_x86_64_centos_5_11', 'linux_x86_64_centos_5', 'linux_x86_64', 'any']

Without:

['linux_x86_64_centos_5_11', 'linux_x86_64_centos_5', 'linux_x86_64', 'any']

Debian

Debian stretch

/etc/os-release

Doesn't include a version or version_id, so this results in reading the distro name from /etc/os-release but version detection falls through to the "legacy" method of reading from /etc/debian_version.

PRETTY_NAME="Debian GNU/Linux stretch/sid"
NAME="Debian GNU/Linux"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support/"
BUG_REPORT_URL="https://bugs.debian.org/"

lsb-release -a

lsb_release is not installed as part of a base system, but is available in the lsb-release package.

Distributor ID:	Debian
Description:	Debian GNU/Linux testing (stretch)
Release:	testing
Codename:	stretch

/etc/lsb-release

Does not exist

Distro-specific files

/etc/debian_version:

stretch/sid

get_platforms()

['linux_x86_64_debian_stretch_sid', 'linux_x86_64', 'any']

Debian 8 (jessie)

/etc/os-release

PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=debian
HOME_URL="http://www.debian.org/"
SUPPORT_URL="http://www.debian.org/support/"
BUG_REPORT_URL="https://bugs.debian.org/"

lsb-release -a

lsb_release is not installed as part of a base system, but is available in the lsb-release package.

Distributor ID:	Debian
Description:	Debian GNU/Linux 8.1 (jessie)
Release:	8.1
Codename:	jessie

/etc/lsb-release

Does not exist

Distro-specific files

/etc/debian_version:

8.1

get_platforms()

['linux_x86_64_debian_8', 'linux_x86_64', 'any']

Debian 7 (wheezy)

/etc/os-release

PRETTY_NAME="Debian GNU/Linux 7 (wheezy)"
NAME="Debian GNU/Linux"
VERSION_ID="7"
VERSION="7 (wheezy)"
ID=debian
ANSI_COLOR="1;31"
HOME_URL="http://www.debian.org/"
SUPPORT_URL="http://www.debian.org/support/"
BUG_REPORT_URL="http://bugs.debian.org/"

lsb-release -a

lsb_release is not installed as part of a base system, but is available in the lsb-release package.

Distributor ID:	Debian
Description:	Debian GNU/Linux 7.8 (wheezy)
Release:	7.8
Codename:	wheezy

/etc/lsb-release

Does not exist

Distro-specific files

/etc/debian_version:

7.8

get_platforms()

['linux_x86_64_debian_7', 'linux_x86_64', 'any']

Debian 6 (squeeze)

/etc/os-release

Does not exist

lsb-release -a

lsb_release is not installed as part of a base system, but is available in the lsb-release package.

Distributor ID:	Debian
Description:	Debian GNU/Linux 6.0.10 (squeeze)
Release:	6.0.10
Codename:	squeeze

/etc/lsb-release

Does not exist

Distro-specific files

/etc/debian_version:

6.0.10

get_platforms()

With lsb_release installed:

['linux_x86_64_debian_6_0_10', 'linux_x86_64_debian_6', 'linux_x86_64', 'any']

Without:

['linux_x86_64_debian_6_0_10', 'linux_x86_64_debian_6', 'linux_x86_64', 'any']

Fedora

Fedora 22

/etc/os-release

NAME=Fedora
VERSION="22 (Twenty Two)"
ID=fedora
VERSION_ID=22
PRETTY_NAME="Fedora 22 (Twenty Two)"
ANSI_COLOR="0;34"
CPE_NAME="cpe:/o:fedoraproject:fedora:22"
HOME_URL="https://fedoraproject.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=22
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=22
PRIVACY_POLICY_URL=https://fedoraproject.org/wiki/Legal:PrivacyPolicy

lsb-release -a

lsb_release is not installed as part of a base system, but is available in the redhat-lsb-core package.

Distributor ID:	Fedora
Description:	Fedora release 22 (Twenty Two)
Release:	22
Codename:	TwentyTwo

/etc/lsb-release

Does not exist

Distro-specific files

/etc/fedora-release:

Fedora release 22 (Twenty Two)

/etc/redhat-release and /etc/system-release are symlinks to /etc/fedora-release.

get_platforms()

Tested through all 3 paths:

['linux_x86_64_fedora_22', 'linux_x86_64', 'any']

openSUSE

openSUSE Tumbleweed

As of 2014-08-25

/etc/os-release

NAME=openSUSE
VERSION="20150725 (Tumbleweed)"
VERSION_ID="20150725"
PRETTY_NAME="openSUSE 20150725 (Tumbleweed) (x86_64)"
ID=opensuse
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:opensuse:20150725"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://opensuse.org/"
ID_LIKE="suse"

lsb_release -a

lsb_release is not installed as part of a base system, but is available in the lsb-release package. It's worth noting that lsb_release on modern versions of openSUSE just read from /etc/os-release.

Distributor ID:	openSUSE project
Description:	openSUSE 20150725 (Tumbleweed) (x86_64)
Release:	20150725
Codename:	n/a

/etc/lsb-release

Does not exist

Distro-specific files

/etc/SuSE-release:

openSUSE 20150725 (x86_64)
VERSION = 20150725
CODENAME = Tumbleweed
# /etc/SuSE-release is deprecated and will be removed in the future, use /etc/os-release instead

get_platforms()

Tested via all three paths:

['linux_x86_64_opensuse_20150725', 'linux_x86_64', 'any']

openSUSE 13.2

/etc/os-release

Per the SLES 11 Release Notes, it was added in SLES 11, which I assume means it should also be in openSUSE 11+

NAME=openSUSE
VERSION="13.2 (Harlequin)"
VERSION_ID="13.2"
PRETTY_NAME="openSUSE 13.2 (Harlequin) (x86_64)"
ID=opensuse
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:opensuse:13.2"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://opensuse.org/"
ID_LIKE="suse"

lsb_release -a

lsb_release is not installed as part of a base system, but is available in the lsb-release package.

Distributor ID:	openSUSE project
Description:	openSUSE 13.2 (Harlequin) (x86_64)
Release:	13.2
Codename:	Harlequin

/etc/lsb-release

Does not exist

Distro-specific files

/etc/SuSE-release:

openSUSE 13.2 (x86_64)
VERSION = 13.2
CODENAME = Harlequin
# /etc/SuSE-release is deprecated and will be removed in the future, use /etc/os-release instead

get_platforms()

Tested via all three paths:

['linux_x86_64_opensuse_13_2', 'linux_x86_64_opensuse_13', 'linux_x86_64', 'any']

Scientific Linux

Scientific Linux 7

/etc/os-release

NAME="Scientific Linux"
VERSION="7.1 (Nitrogen)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="7.1"
PRETTY_NAME="Scientific Linux 7.1 (Nitrogen)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:7.1:GA"
HOME_URL="http://www.scientificlinux.org//"
BUG_REPORT_URL="scientific-linux-devel@listserv.fnal.gov"

REDHAT_BUGZILLA_PRODUCT="Scientific Linux 7"
REDHAT_BUGZILLA_PRODUCT_VERSION=7.1
REDHAT_SUPPORT_PRODUCT="Scientific Linux"
REDHAT_SUPPORT_PRODUCT_VERSION=7.1

lsb-release -a

lsb_release is not installed as part of a base system, but is available in the redhat-lsb-core package.

LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	Scientific
Description:	Scientific Linux release 7.1 (Nitrogen)
Release:	7.1
Codename:	Nitrogen

/etc/lsb-release

Does not exist

Distro-specific files

/etc/redhat-release:

Scientific Linux release 7.1 (Nitrogen)

/etc/sl-release and /etc/system-release are symlinks to /etc/redhat-release.

get_platforms()

['linux_x86_64_rhel_7_1', 'linux_x86_64_rhel_7', 'linux_x86_64', 'any']

Scientific Linux 6

/etc/os-release

Does not exist

lsb-release -a

lsb_release is not installed as part of a base system, but is available in the redhat-lsb-core package.

LSB Version:	:base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID:	Scientific
Description:	Scientific Linux release 6.7 (Carbon)
Release:	6.7
Codename:	Carbon

/etc/lsb-release

LSB_VERSION=base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch

Distro-specific files

/etc/redhat-release:

Scientific Linux release 6.7 (Carbon)

/etc/system-release is a symlink to /etc/redhat-release.

get_platforms()

Both with and without lsb_release installed:

['linux_x86_64_scientific_6_7', 'linux_x86_64_scientific_6', 'linux_x86_64', 'any']

Slackware

Slackware 14.1

/etc/os-release

From this thread on Slackware's linuxquestions.org forum, it's included since Slackware 14.0

NAME=Slackware
VERSION="14.1"
ID=slackware
VERSION_ID=14.1
PRETTY_NAME="Slackware 14.1"
ANSI_COLOR="0;34"
CPE_NAME="cpe:/o:slackware:slackware_linux:14.1"
HOME_URL="http://slackware.com/"
SUPPORT_URL="http://www.linuxquestions.org/questions/slackware-14/"
BUG_REPORT_URL="http://www.linuxquestions.org/questions/slackware-14/"

lsb_release -a

It is not installed on (at least) a base Slackware 14.1 system. I do not know if it's available.

/etc/lsb-release

Does not exist

Distro-specific files

/etc/slackware-version:

Slackware 14.1

get_platforms()

Untested, on 14.1 it should be:

['linux_x86_64_slackware_14_1', 'linux_x86_64_slackware_14', 'linux_x86_64', 'any']

Slackware 13.37

/etc/os-release

Does not exist

lsb_release -a

It is not installed on (at least) a base Slackware 13.37 system. I do not know if it's available.

/etc/lsb-release

Does not exist

Distro-specific files

/etc/slackware-version:

Slackware 13.37.0

get_platforms()

Untested, on 13.37 it should be:

['linux_x86_64_slackware_13_37_0', 'linux_x86_64_slackware_13', 'linux_x86_64', 'any']

SLES

I have not verified this information on a SLES install, I gathered the information from the web.

SLES

/etc/os-release

Per the SLES 11 Release Notes, it was added in SLES 11.

Contents for 12 from saltstack/salt#24019:

NAME="SLES"
VERSION="12"
VERSION_ID="12"
PRETTY_NAME="SUSE Linux Enterprise Server 12"
ID="sles"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:suse:sles:12"

lsb_release -a

I do not know if lsb_release is part of the base system. It is available from the lsb-release package.

Again from salt#24019:

Distributor ID:     SUSE LINUX
Description:        SUSE Linux Enterprise Server 12
Release:    12
Codename:   12

/etc/lsb-release

???

Distro-specific files

/etc/SuSE-release:

Again from salt#24019:

SUSE Linux Enterprise Server 12 (x86_64)
VERSION = 12
PATCHLEVEL = 0
# This file is deprecated and will be removed in a future service pack or release.
# Please check /etc/os-release for details about this release.

get_platforms()

Untested, on 12 it should be:

['linux_x86_64_sles_12', 'linux_x86_64', 'any']

Ubuntu

Ubuntu 14.04 (trusty)

/etc/os-release

NAME="Ubuntu"
VERSION="14.04, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

lsb-release -a

lsb_release is installed as part of a base system, via the lsb-release package.

Distributor ID:	Ubuntu
Description:	Ubuntu 14.04 LTS
Release:	14.04
Codename:	trusty

/etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"

Distro-specific files

/etc/debian_version:

jessie/sid

get_platforms()

['linux_x86_64_ubuntu_14_04', 'linux_x86_64', 'any']

Ubuntu 12.04 (precise)

/etc/os-release

Does not exist

lsb-release -a

lsb_release is installed as part of a base system, via the lsb-release package.

Distributor ID:	Ubuntu
Description:	Ubuntu 12.04 LTS
Release:	12.04
Codename:	precise

/etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04 LTS"

Distro-specific files

/etc/debian_version:

wheezy/sid

get_platforms()

['linux_x86_64_ubuntu_12_04', 'linux_x86_64', 'any']
@ColdGrub1384
Copy link

thanks, just what I need

@Wuodan
Copy link

Wuodan commented Jun 15, 2018

Thanks. I forked and added data for Gentoo:
https://gist.github.com/Wuodan/52d9761a77331ca3b8d044a50b910f52

Had a syntax error running your script ... and unless I'm wrong your fork of wheel is way behind upstreams - which moved to github.

@ajaguilarbravo-ent
Copy link

Awesome!!! What i was looking for.

@joelbarker2011
Copy link

MX Linux

  • The contents of /etc/os-release, if it exists
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
  • Whether or not the lsb_release program is installed, and whether it's part of a "default" install
    Default install.

  • The output of lsb_release -a if installed

No LSB modules are available.
Distributor ID:	MX
Description:	MX 18.3 Continuum
Release:	18.3
Codename:	Continuum
  • The contents of /etc/lsb-release, if it exists
PRETTY_NAME="MX 18.3 Continuum"
DISTRIB_ID=MX
DISTRIB_RELEASE=18.3
DISTRIB_CODENAME=Continuum
DISTRIB_DESCRIPTION="MX 18.3 Continuum"
  • The contents of any other /etc/*-release files
### /etc/initrd-release ###
NAME="MX"
VERSION="18.3 (Continuum)"
ID="mx"
VERSION_ID="18.3"
PRETTY_NAME="MX 18.3 (Continuum)"
ANSI_COLOR="0;34"
HOME_URL="https://mxlinux.org"
BUG_REPORT_URL="https://mxlinux.org"

Any other reliable way to determine the flavor and version of your Linux distribution, especially if none of the above exist

### /etc/antix-version ###
MX-18.3_x64 Continuum May 26, 2019

### /etc/mx-version ###
MX-18.3_x64 Continuum May 26, 2019

### /etc/live/version/antiX ###
Distro name:MX
Version:18.3
antiX flavour:mx
Kernel:4.19.0-5-amd64
Code name:Continuum
Release date:May 26, 2019
Made by:build-iso version 1.00.08 (Mon Oct 23 10:16:23 MDT 2017)

### /etc/live/version/linuxfs.ver ###
=== 3c5cf14ffb909be6178a936578904031

title: Original MX 18.3 x64
creation date: 25 May 2019 19:15:39 EDT
kernel: 4.19.0-5-amd64
inxi version: MX-18.3_x64 Continuum May 26, 2019
  • And finally, you can test the platform detection on your platform by downloading and installing (e.g. in a virtualenv) lionshead and running:
$ python3 -c 'import lionshead; print(lionshead.get_specific_platform())'
['linux_x86_64_debian_9', 'linux_x86_64', 'any']

@aayla-secura
Copy link

aayla-secura commented Oct 25, 2019

Kali

Rolling, 2019.2

  • The contents of /etc/os-release, if it exists
PRETTY_NAME="Kali GNU/Linux Rolling"
NAME="Kali GNU/Linux"
ID=kali
VERSION="2019.2"
VERSION_ID="2019.2"
ID_LIKE=debian
ANSI_COLOR="1;31"
HOME_URL="https://www.kali.org/"
SUPPORT_URL="https://forums.kali.org/"
BUG_REPORT_URL="https://bugs.kali.org/"
  • Whether or not the lsb_release program is installed, and whether it's part of a "default" install
    It is installed by default
  • The output of lsb_release -a if installed
Distributor ID:	Kali
Description:	Kali GNU/Linux Rolling
Release:	2019.2
Codename:	n/a
  • The contents of /etc/lsb-release, if it exists
DISTRIB_ID=Kali
DISTRIB_RELEASE=kali-rolling
DISTRIB_CODENAME=kali-rolling
DISTRIB_DESCRIPTION="Kali GNU/Linux Rolling"
  • The contents of any other /etc/*-release files
    No other such files

@tpanj
Copy link

tpanj commented Oct 27, 2019

Mageia

Mageia 7

/etc/os-release

NAME="Mageia"
VERSION="7"
ID=mageia
VERSION_ID=7
ID_LIKE="mandriva fedora"
PRETTY_NAME="Mageia 7"
ANSI_COLOR="1;36"
HOME_URL="http://www.mageia.org/"
SUPPORT_URL="http://www.mageia.org/support/"
BUG_REPORT_URL="https://bugs.mageia.org/"
PRIVACY_POLICY_URL="https://wiki.mageia.org/en/Privacy_policy"

lsb-release -a

LSB Version:    *
Distributor ID: Mageia
Description:    Mageia 7
Release:        7
Codename:       mga7

/etc/lsb-release

LSB_VERSION=
DISTRIB_ID="Mageia"
DISTRIB_RELEASE=7
DISTRIB_CODENAME=mga7
DISTRIB_DESCRIPTION="Mageia 7"

Distro-specific files

/etc/mageia-release:

Its existence indicates that the distro is Mageia.

get_platforms()

Untested, should be:

['linux_x86_64_mageia_rolling', 'linux_x86_64', 'any']

@tpanj
Copy link

tpanj commented Oct 27, 2019

I want to help!

Hello!
I started to build small but strong foundation for helping everyday living in bash - maybe suitable for this gist.
Please let me know if there is something I can include or
improve at https://github.com/tpanj/bash4all

Best Regards,
Tadej

@bwolfbarn
Copy link

bwolfbarn commented Nov 29, 2020

Debian buster on WSL2

The contents of /etc/os-release, if it exists

PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Whether or not the lsb_release program is installed, and whether it's part of a "default" install

The output of lsb_release -a if installed

-bash: lsb_release: command not found

The contents of /etc/lsb-release, if it exists

cat: /etc/lsb-release: No such file or directory

The contents of any other /etc/*-release files

$ ls /etc/*-release
... /etc/os-release -> ../usr/lib/os-release

@bwolfbarn
Copy link

Raspberry OS (Debian) on Raspberry Pi

The contents of /etc/os-release, if it exists

$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

Whether or not the lsb_release program is installed, and whether it's part of a "default" install

yes, default

The output of lsb_release -a if installed

$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

The contents of /etc/lsb-release, if it exists

cat: /etc/lsb-release: No such file or directory

The contents of any other /etc/*-release files

ls /etc/*-release -l
... /etc/os-release -> ../usr/lib/os-release

@Galacticai
Copy link

Very useful thanks

@mikefaille
Copy link

mikefaille commented Mar 15, 2022

Oracle Linux 6.8

NAME="Oracle Linux Server" 
VERSION="6.8" 
ID="ol" 
VERSION_ID="6.8" 
PRETTY_NAME="Oracle Linux Server 6.8" 
ANSI_COLOR="0;31" 
CPE_NAME="cpe:/o:oracle:linux:6:8:server"
HOME_URL="https://linux.oracle.com/" 
BUG_REPORT_URL="https://bugzilla.oracle.com/" 

ORACLE_BUGZILLA_PRODUCT="Oracle Linux 6" 
ORACLE_BUGZILLA_PRODUCT_VERSION=6.8 
ORACLE_SUPPORT_PRODUCT="Oracle Linux" 
ORACLE_SUPPORT_PRODUCT_VERSION=6.8

Oracle Linux 7.1

NAME="Oracle Linux Server"
VERSION="7.1"
ID="ol"
VERSION_ID="7.1"
PRETTY_NAME="Oracle Linux Server 7.1"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:7:1"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://bugzilla.oracle.com/"

ORACLE_BUGZILLA_PRODUCT="Oracle Linux 7"
ORACLE_BUGZILLA_PRODUCT_VERSION=7.1
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=7.1

@duzhuoshanwai
Copy link

Debian bookworm /etc/os-release

PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

@saizai
Copy link

saizai commented Nov 7, 2023

Synology DSM

Synology doesn't have /etc/*-release or lsb_release.

info

It's a custom GNU/Linux kernel. See:

detection

Detectable by lots of /etc/syno*, /usr/syno/*, /proc/syno*, etc. files.

On a Synology 1621+ NAS device, which has V1000 CPU architecture, if it's running DSM version 7.0-41890 (which has a modified Linux kernel 4.4.180), you get this (custom name and serial redacted with identical format):

/usr/bin/uname -a

Linux CustomNASNameHere 4.4.180+ #41890 SMP Thu Jul 15 03:42:45 CST 2021 x86_64 GNU/Linux synology_v1000_1621+

Relevant extracts of files:

/etc/synoinfo.conf

upnpdevicetype="Synology NAS"
upnpfriendlyname="Synology NAS Device"
upnpmodeldescription="Synology NAS UPnP Device"
upnpmodelname="DS1621+"
company="synology"
product="Synology NAS"
synobios="v1000"
unique="synology_v1000_1621+"

/etc/avahi/services/dsminfo.service

<txt-record>vendor=Synology</txt-record>
<txt-record>model=DS1621+</txt-record>
<txt-record>serial=1234A5BCDEFGH</txt-record>
<txt-record>version_major=7</txt-record>
<txt-record>version_minor=0</txt-record>
<txt-record>version_build=41890</txt-record>

/etc/VERSION

majorversion="7"
minorversion="0"
major="7"
minor="0"
micro="0"
productversion="7.0"
buildphase="GM"
buildnumber="41890"
smallfixnumber="0"
nano="0"
base="41890"
builddate="2021/07/15"
buildtime="18:42:50

/proc/cpuinfo

vendor_id       : AuthenticAMD
cpu family      : 23
model           : 17
model name      : AMD Ryzen Embedded V1500B

/proc/syno_cpu_arch

AMD, Ryzen, V1500B, 4

/proc/syno_platform

V1000

/proc/version

Linux version 4.4.180+ (root@build17) (gcc version 7.5.0 (GCC) ) #41890 SMP Thu Jul 15 0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment