cdist-backup/cdist/conf/explorer/os
Philippe Grégoire 69c6de9f9c
explorer/os: get ID from /etc/os-release
/etc/os-release was introduced by systemd[1] and is now
more and more common; even on systems without systemd (e.g. lede).
In addition to detecting the OS based on specific attributes,
this file provides the ID marker to describe the OS.

This commit adds support for OS detection via /etc/os-release.
According to [2], it is already lowercase.

[1] http://0pointer.de/blog/projects/os-release
[2] https://www.freedesktop.org/software/systemd/man/os-release.html
2017-08-19 16:41:50 -04:00

151 lines
2.9 KiB
Bash
Executable file

#!/bin/sh
#
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
# Copyright 2017, Philippe Gregoire <pg@pgregoire.xyz>
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# All os variables are lower case. Keep this file in alphabetical
# order by os variable except in cases where order otherwise matters,
# in which case keep the primary os and its derivatives together in
# a block (see Debian and Redhat examples below).
#
if grep -q ^Amazon /etc/system-release 2>/dev/null; then
echo amazon
exit 0
fi
if [ -f /etc/arch-release ]; then
echo archlinux
exit 0
fi
if [ -f /etc/cdist-preos ]; then
echo cdist-preos
exit 0
fi
if [ -d /gnu/store ]; then
echo guixsd
exit 0
fi
### Debian and derivatives
if grep -q ^DISTRIB_ID=Ubuntu /etc/lsb-release 2>/dev/null; then
echo ubuntu
exit 0
fi
if [ -f /etc/debian_version ]; then
echo debian
exit 0
fi
if [ -f /etc/devuan_version ]; then
echo devuan
exit 0
fi
###
if [ -f /etc/gentoo-release ]; then
echo gentoo
exit 0
fi
if [ -f /etc/openwrt_version ]; then
echo openwrt
exit 0
fi
if [ -f /etc/owl-release ]; then
echo owl
exit 0
fi
### Redhat and derivatives
if grep -q ^Scientific /etc/redhat-release 2>/dev/null; then
echo scientific
exit 0
fi
if grep -q ^CentOS /etc/redhat-release 2>/dev/null; then
echo centos
exit 0
fi
if grep -q ^Fedora /etc/redhat-release 2>/dev/null; then
echo fedora
exit 0
fi
if grep -q ^Mitel /etc/redhat-release 2>/dev/null; then
echo mitel
exit 0
fi
if [ -f /etc/redhat-release ]; then
echo redhat
exit 0
fi
###
if [ -f /etc/SuSE-release ]; then
echo suse
exit 0
fi
if [ -f /etc/slackware-version ]; then
echo slackware
exit 0
fi
uname_s="$(uname -s)"
# Assume there is no tr on the client -> do lower case ourselves
case "$uname_s" in
Darwin)
echo macosx
exit 0
;;
NetBSD)
echo netbsd
exit 0
;;
FreeBSD)
echo freebsd
exit 0
;;
OpenBSD)
echo openbsd
exit 0
;;
SunOS)
echo solaris
exit 0
;;
esac
if [ -f /etc/os-release ]; then
# already lowercase, according to:
# https://www.freedesktop.org/software/systemd/man/os-release.html
grep '^ID=' /etc/os-release | sed -e 's|^ID=||'
exit 0
fi
echo "Unknown OS" >&2
exit 1