Linux – Bash – Récupère les valeurs $ releasever et $ basearch?

J’écris un script bash pour extraire les paquets des repos distants, en utilisant reposync. Je peux donc orienter mes nœuds pour qu’ils extraient localement. En tant que tel, j’essaie de garder les configurations de repo locales aussi similaires que possible aux configurations de repo usptream, comme ceci:

# upstream baseurl=http://mirror.freedomvoice.com/centos/$releasever/os/$basearch/ # local baseurl=http://user:[email protected]/centos/stable/$releasever/os/$basearch/ 

Dans le script bash, existe-t-il une méthode plus propre pour obtenir les valeurs $ releasever et $ basearch? Je pensais faire ce qui suit:

 yum_metadata=$(yum version nogroups) 

Qui retourne:

 Loaded plugins: versionlock Installed: 6/x86_64 360:6167019baac7e76f94c26320424dc41a7f046a70 version 

Puis regexing pour les valeurs 6 / x86_64. Un peu de désordre et à la recherche d’une approche plus élégante.

La plupart des dissortingbutions utilisent la version distroverpkg pour obtenir le libérateur et la recherche de base.

Si vous regardez /etc/yum.conf, vous verrez que distrover est défini sur redhat-release (pour RHEL), enterpriselinux-release (pour OEL) et autres.

Pour obtenir le nom du package:

 distro=$(sed -n 's/^distroverpkg=//p' /etc/yum.conf) 

Pour obtenir le libérateur:

 releasever=$(rpm -q --qf "%{version}" -f /etc/$distro) 

Pour obtenir la recherche de base:

 basearch=$(rpm -q --qf "%{arch}" -f /etc/$distro) 

Le nouveau code ci-dessus va essayer d’obtenir le paquet associé à un fichier /etc/$distro . Certains Linux ajoutent /etc/redhat-release à leur version de paquet.

Si vous obtenez un file not owned by any package utilisez le fichier /etc/*-release fourni avec votre dissortingbution. C’est probablement /etc/centos-release .

Vous pouvez vérifier la version appropriée de /etc/*-release pour ce code en vérifiant quel fichier est fourni avec centos.

 rpm -qf /etc/*-release 

Ensuite, utilisez ce fichier au lieu de la première ligne ci-dessus.

 distro=/etc/centos-release 

Voici un exemple de langage OEL dans lequel /etc/redhat-release est fourni en tant que version d’ enterprise-release .

 rpm -q --qf "%{name}" -f /etc/redhat-release 

Sortie:

 enterprise-release