X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=src%2Fidentify-distros;h=011ddb5d7f28d6c9d92a1c9d79917d84cb379e83;hb=6314c835343decaa195019ed2d38a1cb0d5f6a69;hp=0d7a8fe1a9a1eff9b93a178efbe4839871c40c41;hpb=b3f12bb11f16b2bdf52e0d85f000e04b59ba9f1f;p=distro-functions diff --git a/src/identify-distros b/src/identify-distros index 0d7a8fe..011ddb5 100644 --- a/src/identify-distros +++ b/src/identify-distros @@ -13,26 +13,116 @@ # See the License for the specific language governing permissions and # limitations under the License. -distro_name() { +distro-name() { + local x if [[ -f /etc/fedora-release ]]; then echo fedora + elif [[ -e /etc/os-release ]]; then + sed -rn 's/^ID=(.*)/\1/p' /etc/os-release + elif type -p lsb_release &>/dev/null; then + # well, this is more standard, but it's 2 ms vs 200 ms + x=$(lsb_release -si); echo ${x,,} else - grep "^ID=.*" /etc/os-release | sed 's/^ID=//' + echo "unknown distro" + return 1 fi } + +distro-name-compat() { + local x=$(distro-name) + case $x in + trisquel) + echo ubuntu + ;; + *) + echo $x + ;; + esac +} + +distro-name-ver() { + echo `distro-name``debian-archive` +} + +debian-archive() { + isdeb || return 0 + local archive expression pri name highpri shortest + local policy="${1:-$(apt-cache policy)}" + # a = archive + # n = codename + # o = origin + # c = component (licensing component) + # l = label (Debian{,-Security,-Updates}) + local d=$(distro-name) + # goto b for archive lines we are interested in, a for lines we arent + # print priority + archive name. priority is in + # the previous line from the archive line. + # case insensitive, because $d is lower and we are matching with first char upper + read -rd '' expression < ${#name} )); then + shortest=$name + fi + done < <(echo "$policy" | sed -rn "$expression" | sort -rn) + echo "$shortest" + +} + + +isdebian-testing() { + [[ $(debian-archive) == testing ]] +} +# I only do testing or stable. +isdebian-stable() { + [[ $(debian-archive) == stable ]] +} + +debian-codename() { + isdeb || return 0 + local policy="$(apt-cache policy)" + archive=$(debian-archive "$policy") + echo "$policy" | sed -rn "s/^.*a=$archive,n=([a-z]+).*/\1/p;T;q" +} +debian-codename-compat() { + local n=$(debian-codename) + case $n in + flidas) + echo xenial + ;; + *) + echo $n + ;; + esac +} + isfedora() { - local d=$(distro_name) - [[ $d == fedora ]] || return 1 + [[ $(distro-name) == fedora ]] } isdebian() { - local d=$(distro_name) - [[ $d == debian ]] || return 1 + [[ $(distro-name) == debian ]] } -isdeb() { - local d=$(distro_name) - [[ $d == debian || $d == ubuntu ]] || return 1 +isarch() { + [[ $(distro-name) == arch ]] } isubuntu() { - local d=$(distro_name) - [[ $d == ubuntu ]] || return 1 + [[ $(distro-name) == ubuntu ]] +} +istrisquel() { + [[ $(distro-name) == trisquel ]] } +# is debian/apt based +isdeb() { command -v apt-get &>/dev/null; }