X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=src%2Fidentify-distros;h=c3cfc723c585d9737d958a874026eb54146482bf;hb=HEAD;hp=a62889ee4541f08d5c569cafc105ba3abf8520e2;hpb=1550d2b551dd02700d4e3e1317d34f2fa25a2192;p=distro-functions diff --git a/src/identify-distros b/src/identify-distros index a62889e..88b31fc 100644 --- a/src/identify-distros +++ b/src/identify-distros @@ -1,5 +1,12 @@ #!/bin/bash -# Copyright (C) 2014 Ian Kelling +# I, Ian Kelling, follow the GNU license recommendations at +# https://www.gnu.org/licenses/license-recommendations.en.html. They +# recommend that small programs, < 300 lines, be licensed under the +# Apache License 2.0. This file contains or is part of one or more small +# programs. If a small program grows beyond 300 lines, I plan to switch +# its license to GPL. + +# Copyright 2024 Ian Kelling # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -29,24 +36,32 @@ distro-name() { } distro-name-compat() { - local x=$(distro-name) + local x + x=$(distro-name) case $x in trisquel) echo ubuntu ;; *) - echo $x + printf "%s\n" "$x" ;; esac } distro-name-ver() { - echo $(distro-name)$(debian-archive) + printf "%s\n" "$(distro-name)$(debian-archive)" } distro-num() { - # subshell keeps environment clean - ( . /etc/os-release; echo ${VERSION_ID%%.*}; ) + local os_id ver_id + os_id=$(awk -F = '$1 == "ID" { print $2 }' /etc/os-release) + ver_id=$(awk -F = '$1 == "VERSION_ID" { print $2 }' /etc/os-release | sed 's/"//g') + # of VERSION_ID.x, the x matters in ubuntu but not trisquel + if [[ $os_id == ubuntu ]]; then + printf "%s\n" "$ver_id" + else + printf "%s\n" "$ver_id" | sed 's/\..*//' + fi } debian-archive() { @@ -58,7 +73,8 @@ debian-archive() { # o = origin # c = component (licensing component) # l = label (Debian{,-Security,-Updates}) - local d=$(distro-name) + local d + 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. @@ -76,7 +92,7 @@ EOF shortest=$name continue fi - if [[ $pri != $highpri ]]; then + if [[ $pri != "$highpri" ]]; then break fi if (( ${#shortest} > ${#name} )); then @@ -84,9 +100,36 @@ EOF fi done < <(echo "$policy" | sed -rn "$expression" | sort -rn || [[ $? == 141 ]]) echo "$shortest" - } +# formatted for use in pfile() in package-manager-abstractions +positive-origins() { + isdeb || return 0 + local archive expression pri name highpri shortest policy + # In theory we might want a policy subset, we could alter this to pass + # it in. + policy="(apt-cache policy)" + # a = archive + # n = codename + # o = origin + # c = component (licensing component) + # l = label (Debian{,-Security,-Updates}) + read -rd '' expression < 0 )); then + if [[ ! $origins ]]; then + origins=$name + else + origins+=,$name + fi + fi + done < <(echo "$policy" | sed -rn "$expression" | sort -rn || [[ $? == 141 ]]) + echo $origins +} isdebian-testing() { [[ $(debian-archive) == testing ]] @@ -98,12 +141,14 @@ isdebian-stable() { debian-codename() { isdeb || return 0 - local policy="$(apt-cache policy)" || return $? + local policy + policy="$(apt-cache policy)" archive=$(debian-archive "$policy") - echo "$policy" | sed -rn "s/^.*a=$archive,n=([a-z]+).*/\1/p;T;q" || [[ $? == 141 ]] + printf "%s\n" "$policy" | sed -rn "s/^.*a=$archive,n=([a-z]+).*/\1/p;T;q" || [[ $? == 141 ]] } debian-codename-compat() { - local n=$(debian-codename) + local n + n=$(debian-codename) case $n in flidas) echo xenial @@ -111,6 +156,12 @@ debian-codename-compat() { etiona) echo bionic ;; + nabia) + echo focal + ;; + aramo) + echo jammy + ;; *) echo $n ;;