今天有同事回報在使用 Puppet 做模擬 LAB 的時候,一直出現 OS 版本判別錯誤的問題,安裝 Ubuntu container 卻判定為 Debian,然後少了許多 metadata 可以使用 …
嘗試在 Production 環境測試沒有沒有遇到問題,也在 Vagrant 上跑過。
只好找工程師的好朋友 Google 一下,果然馬上就找到 Puppet ticket「Incorrectly detects OS in docker container」有相同的狀況
When running in a Docker container, facter incorrectly reports the OS.
To reproduce this, start a docker container with the “ubuntu” image, install Facter from the Puppet repository, run “puppet os” and notice it is reported as “Debian”.
這時才想到,Puppet 用來判別版本的資訊其中有包含 lsb-release 這個 package … 而 Container 的特點就是 “什麼都沒有” 所以能抓到的資訊自然就少了很多。
解決方法很簡單,就是安裝 lsb-release,讓環境有 lsb_release 這個 command
$ sudo apt-get install lsb-release
就正常了 …
不過 Puppet 有把該問題列為 bug 並且提出應該要使用 os-release 作為參考依據才對,所以之後要參考 OS 資訊的人可以往這個方向找問題
$ cat /etc/os-release NAME="Ubuntu" VERSION="16.04.5 LTS (Xenial Xerus)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 16.04.5 LTS" VERSION_ID="16.04" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial