Windows 2003上 SaltStack/Salt 和 psutil 可能存在的問題及解決


  今天把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中輸入,會自動安裝)也能正常使用,皆大歡喜。

 

總結

  在低版本的系統上,可能會有各種各樣想不到的坑。再次做個記錄留作備忘,也給將來可能踩坑的同學借鑒經驗。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM