今天把salt安裝在windows 2003上,發現無法啟動,隨之而來的是一個有一個的坑,讓我們一起逐個排查。
問題一(salt無法啟動)
salt無法啟動,錯誤結果如圖:
解決
這種錯誤完全無厘頭呀,本着相信salt的原則,我們看看python能不能正常啟動,由此產生新的問題。
問題二(python無法啟動)
啟動C:\salt\bin\python,發現仍舊無法啟動。這就奇怪了,我有理由相信這可能是salt自帶的python的問題。那么從Python的官網下載個新包Python2.7.12看看,安裝后發現官網的Python啟動正常。莫非是初始化了一些環境變量?回過頭來再去看salt中的python能不能用,奇跡般地好了~
解決
重新安裝一次官網的Python,然后再啟動salt中的python試試。
原因在於,這台windows 2003原來裝過python,但可能因為后來卸載不徹底,以及中間各種軟件安裝影響了一些環境變量,導致salt中python無法正常啟動。
問題三(缺少MSCVCR100.dll)
既然python啟動問題已經搞定,那就再去啟動salt-minion吧。這次開啟debug模式,看看能否正常啟動,啟動不了也會有詳細信息。執行C:\salt\salt-minion-debug.bat,結果沒過多久報了這個錯:
解決
既然windows 2003這位老先生明確告訴我們缺少了MSVCR100.dll這個動態鏈接庫,那就找到它吧。這個庫是vc++2010里的,所以從微軟的官網下載Microsoft Visual C++ 2010 可再發行組件包 (x86), 安裝完畢后,再啟動salt-minion就不會報錯了。
問題四(psutil中 ‘from . import _psutil_windows as cext’ 報錯)
由於項目中用到psutil,自然想到要檢驗下salt自帶的python第三方psutil能否正常使用,結果很遺憾:
這是什么鬼?不能導入的原因太模糊了吧,dll導入失敗?!哪個dll?
去報錯相應的目錄下看看吧,也就是C:\salt\bin\lib\site-packages\psutil\下,發現要導入的_psutil_windows包其實是_psutil_windows.pyd這個鏈接庫。導入這個鏈接庫失敗,那么就看看這個鏈接庫到底鏈接了什么東西。
使用dependency walker去瞅瞅,發現是這樣的問題:
解決
把缺失的這兩個dll(msvcr90.dll, msjava.dll)補上?補上后仍然有問題,看下文。
問題五(At least one module has an unresolved import ...)
補上兩個dll后,還顯示一個錯誤:
根據圖片中的顯示,大概是iphlpapi.dll和kernel32.dll的導入或被導入出現了問題。但是這兩個是系統的呀,能奈之何?
先不管這個錯誤,嘗試運行下python,然后import psutil,看看會不會報錯:
看來還是老錯誤,無法避免。
會不會是salt預裝的psutil有問題?去C:\salt\bin\scripts\下,pip uninstall psutil卸載掉再重裝試試,結果還是不行。
這就非常奇怪,突發奇想該不會是高版本的psutil不支持低版本的系統導致的吧?於是再次卸載掉psutil,裝了個1.x版本試驗了下,結果可以了。
解決
安裝一個低版本的psutil試試,注意你用到的psutil的功能在低版本中可能不存在。
問題六(salt模塊依賴的wmi可以用嗎?)
從salt官網上看到關於windows 2003這樣的描述:
貌似是wmi需要額外安裝。
那就先看看wmi能不能正常導入吧:
很好,wmi庫可以正常導入,項目要用到的wmic(第一次在cmd中輸入,會自動安裝)也能正常使用,皆大歡喜。
總結
在低版本的系統上,可能會有各種各樣想不到的坑。再次做個記錄留作備忘,也給將來可能踩坑的同學借鑒經驗。