環境
OS:Ubuntu 16.04
背景
使用ceph-deploy部署Ceph集羣,調用ceph-deploy install命令在遠端節點安裝ceph環境,執行apt-get update命令時失敗。
Err:1 http://mirrors.163.com/ubuntu xenial InRelease
Temporary failure resolving 'mirrors.163.com'
分析
ceph-deploy的原理,就是ssh免密碼登錄到遠端節點,然後執行各種命令。和剛纔的apt-get命令結合起來,實際執行的是類似“ssh remote_node apt-get update”的命令。於是再回到執行ceph-deploy的admin節點,執行ssh remote_node apt-get update,果然失敗。
直接連接到出問題的節點,執行apt-get update命令,沒有任何問題。這樣看來,應該是一些環境變量的問題了。我的環境中是有網絡代理的,連接外網必須配置http_proxy和https_proxy這兩個環境變量。我將這兩個環境變量設置在/etc/profile配置文件中,然而,ssh使用bash是作爲一個non-login shell的,因此不會加載這個文件。我們可以執行下面的命令,就會發現apt-get可以成功。至於什麼是non-login shell,可以參考login shell。
$ ssh remote_node "bash --login -c 'apt-get update'"
Hit:1 http://mirrors.163.com/ubuntu xenial InRelease
Hit:2 http://mirrors.163.com/ubuntu xenial-security InRelease
Hit:3 http://mirrors.163.com/ubuntu xenial-updates InRelease
Hit:4 http://mirrors.163.com/ubuntu xenial-proposed InRelease
Hit:5 http://mirrors.163.com/ubuntu xenial-backports InRelease
Reading package lists...
Building dependency tree...
Reading state information...
162 packages can be upgraded. Run 'apt list --upgradable' to see them.
解決方法
將http_proxy和https_proxy的配置放到/etc/environment,或者~/.ssh/environment中。再次執行ceph-deploy install,成功。