てきとうなメモ

本の感想とか技術メモとか

Linuxのディストリビューションのバージョンを取得

例えばCentOSだと/etc/redhat-release→/etc/centos-releaseを見ればわかるのだが、世の中的にはどうしているのかなと思ってAnsibleのコードとか読んでみたけど、やっぱり/etc/redhat-release見ているだけだった。

ansibleはplatform.dist()[1]を取得していて、platform.dist()は/etcからリリースファイルにマッチするファイルを読み込んで、ファイルの内容に対してさらに正規表現でバージョンなどを取得している。リリースファイルの正規表現やリリース情報の正規表現は以下。

_release_filename = re.compile(r'(\w+)[-_](release|version)')
_lsb_release_version = re.compile(r'(.+)'
                                   ' release '
                                   '([\d.]+)'
                                   '[^(]*(?:\((.+)\))?')
_release_version = re.compile(r'([^0-9]+)'
                               '(?: release )?'
                               '([\d.]+)'
                               '[^(]*(?:\((.+)\))?')

結構泥臭い。あと、platform.distは3.5でdeprecatedになっていて3.7で削除されるらしいので、Ansible側のコードは書き直しが必要になってくるのかな。