上一篇復盤和總結了Linux下容易發生的意外損壞情況、如何提前檢測和預防的思路。
Linux系統一般在以下方面出現潛在問題而影響正常工作:
- 硬件故障;
- 內核錯誤;
- 文件系統損壞;
- 軟件沖突;
- 系統更新問題;
- 惡意軟件;
- 過度負載;
- 配置錯誤。
本文繼續分析第4-8的問題。
軟件沖突
Linux下的軟件沖突有哪些表現?
軟件沖突1:依賴庫缺失,軟件找不到依賴的函數
比如很多開發人員,從源碼編譯方式安裝了一些基礎的類庫到自定義庫路徑下,然后發現系統和桌面的其他軟件啟動異常。以下是 QT 相關的軟件啟動失敗的報錯日志:
…… libQt5XcbQpa.so.5: undefined symbol: FT_Property_Set
根據關鍵詞搜索得到一大堆結果,大家往往發現網上有各種有效、無效的解決辦法,各說一套
對此,我的觀點是,建議Linux的使用者要知其然,知其所以然,要深入理解Linux問題的根源。并從根源上解決,舉一反三在發生類似問題后,也能自主解決。
比如上面的錯誤日志,如果是新安裝了自己編譯的庫文件到系統目錄后發生的問題,那么往往跟QT軟件依賴的庫(如libfreetype.so)被替換為不兼容的版本引起的。FT_Property_Set 關鍵詞,可幫我們確定問題范圍與freetype相關 也可受到 /etc/ld.so.conf.d/.conf 的文件中的。
可以判斷這個問題不是libfreetype.so庫被刪引起的,因為若是系統庫libfreetype.so被刪,那么Qt的報錯將會類似required libfreetype.so library not found。
如何避免?可通過在局部使用LD_LIBRARY_PATH ,比如在腳本內、在命令行前面 以LD_LIBRARY_PATY=自定義庫的路徑 +命令的這種方式調用軟件。就可以避免不同環境和庫的相互干擾、污染的問題。
采用conda環境隔離、python的venv 環境隔離等方式;使用docker 容器環境運行不同軟件、甚至在virtualbox等虛擬機運行不同軟件;這些方式也可以幫助避免軟件沖突的問題。
安裝時的軟件包沖突2:
比如centos的yum方式安裝軟件包時,提示錯誤嘗過添加"--skip-broken"來跳過無法安裝的軟件包 或'--nobest'來不只使用軟件包的最佳候選)
這類問題往往由于軟件源配置存在多個不同版本的軟件源,需要避免/etc/yum.d/*.repo文件中存在重復的不同版本的倉庫:
否則通過yum安裝指定軟件名時,將提示版本沖突。
系統更新問題
Linux系統更新失敗而導致的軟件沖突,一旦發生,往往是比較嚴重的問題。所以小編建議,當大版本更新前,一定要做好系統配置文件和數據文件的異機備份。
一個好消息是,Deepin、Ubuntu等發行版,對系統升級、內核加裝新版本等重大更新,更新后不會替換原始文件,而是在系統啟動時另起一個引導菜單入口,這樣新引導啟動的系統就會是更新后的系統;老版本的系統內容仍然可在舊的引導入口進入。在新軟件系統發生異常后,可以進入老系統軟件繼續使用。
惡意軟件問題
惡意軟件的問題、過度負載問題,往往運維人員遇到比較多。惡意軟件也是系統過載、網絡流量異常的元兇。惡意軟件的入侵,除了人為安裝了惡意軟件,還有主動入侵,比如網站代碼漏洞、系統軟件對外服務漏洞(如nginx或nodejs軟件漏洞)就可以被外界利用,向系統植入惡意軟件。
對此,小編建議,在Linux下,啟用防火墻、關閉非必要的對外端口、不要使用弱密碼、及時更新已知存在漏洞的軟件到安全的版本、不訪問危險站點、通過容器等隔離工具進行存在風險的訪問操作。
配置錯誤
Linux用戶最常遇到的配置錯誤導致的系統問題,往往是添加修改了環境變量文件,影響了正常變量的訪問效果。
對于Linux系統,環境變量分為系統級別變量、用戶級別變量、腳本范圍內的運行時環境變量。
寫在/etc/profile中的 屬于系統級別的全局腳本和環境變量。寫在~/.bashrc文件里的腳本和環境變量,將在用戶shell或桌面登錄后生效。而類似tomcat 的startup.sh等控制jvm啟動過程的腳本內的變量,將只影響腳本范圍內的軟件。因此不會影響系統或用戶其他軟件的正常運行。例如pycharm 的安裝包,內涵 pycharm.sh[1],就是一個.sh文件,pycharm 的啟動腳本,也是.sh文件,它把pycharm運行所需的庫所在路徑,通過腳本內的環境變量,讓 pycharm 的最終二進制文件感知、從pycharm的當前子目錄加載(如./lib/libmy.so)。
寫在 /etc/ld.so.conf.d/xxxx.conf 里的會作用域 整個系統的 LD_LIBRARY_PATH 變量等效的動態庫文件搜索路徑。
總之,系統級別的配置文件盡量少改動,除非很清楚系統配置文件的內容原理。用戶級別的配置文件可以改,修改后多測試。軟件級別的配置文件可以按需改,因為不影響其他用戶。
TIPs:
懂得軟件開發的朋友們,還可以利用git功能,在修改配置之前,做一下版本管理。以備配置文件錯誤后,及時恢復。
參考資料:
[1]pycharm 的安裝包,內涵 pycharm.sh :https://download.jetbrains.com.cn/python/pycharm-community-2023.2.5.tar.gz