標籤:
今天把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中輸入,會自動安裝)也能正常使用,皆大歡喜。
總結
在低版本的系統上,可能會有各種各樣想不到的坑。再次做個記錄留作備忘,也給將來可能踩坑的同學借鑒經驗。
Windows 2003上 salt 和 psutil 可能存在的問題及解決