pythonrpm
『壹』 Linux Centos YUM 與 python 的重裝損壞修復記錄
系統版本:CentOS 7.4
在嘗試安裝 Python3 時,不慎刪除了 Python2,導致 yum 壞損,Python2 也被移除。經過國內外網路搜索,花費三天時間才解決此問題。
由於本人對 yum 命令和 Python 的了解有限,以下是在處理過程中總結的關鍵點,供參考:
1. yum 命令由 Python 編寫(Python 2),因此沒有安裝 Python 2 無法使用,通常使用 Python 2.7。
2. Python 2 的安裝方法有兩種:下載源碼編譯安裝或使用 rpm 命令安裝。嘗試了多種方法後,最終通過 rpm 安裝成功。
3. 在重裝 yum 和 Python 之前,請先刪除殘留文件,參考以下命令:
4. 開始安裝前,先下載依賴包。由於沒有 yum,需要手動下載,以下為所需包,版本號和文件名可能有所不同,但主名稱一致。下載時注意系統版本(含 x86_64 的文件名)。
下載的包如下:
這些文件放置在同一目錄下,但仍可能缺少依賴包。可能是版本太新或太舊,導致各種問題。請參考下一步操作。
5. 使用 rpm 命令安裝,遇到提示缺少依賴包的錯誤時,到源鏡像中查找所需依賴包,下載到目錄中。
6. 如果所有 *.rpm 文件都安裝完成後,說明安裝已完成,但可能無法使用。由於 yum 是 Python 編寫的軟體(解釋型開發語言可以直接查看源碼),因此必須先確保 Python 安裝成功後再安裝 yum。執行 python -V 大概率不會有問題。如果出現問題,請先解決 rpm 安裝 Python2.7 的問題。
如果此時輸入 yum 命令,可能會直接報錯。錯誤原因可能如下:
1. 查看 /usr/bin 目錄下是否所有 python 命令都存在,執行 ls python* 查看結果,應有 python、python2、python2.7 等命令,可以執行查看是否有問題。如有問題,請先解決 rpm 安裝 Python2.7 的問題。
2. 可能是 Python 系統環境變數未設置。請參考以下操作:(非常重要的一步)
如果這一步不正確,會有各種缺少 Python 模塊的提示:No mole named xxxxxxx。
3. 以上步驟設置不正確,因此調試了 vi /usr/bin/yum 代碼,查看 sys.path 路徑。從另一台伺服器查看路徑後,在 /usr/bin/yum 中增加代碼,強制指定目錄,如下:
在 import sys 後增加路徑,最後兩行被注釋的 print... 和 exit... 代碼用於調試對比目錄,可以嘗試修改。
4. 將 Python 庫路徑添加到配置,不知道這一步是否有用,可以嘗試。
5. 此時執行 yum 命令時,可能仍會出現相同問題,例如報缺:No mole named sos.plugins 或 from yum import Errors 缺 No mole named Errors 等。在 vi /usr/share/yum-cli/yummain.py 代碼中,我在 import yum 後用 print(yum) 列印出來,顯示類似以下內容:
會顯示 import yum 的文件位置,.pyc 格式文件是做什麼的,可以自行搜索。現在這步【【【【很重要】】】,我把這個文件重命名了,然後 yum 命令就恢復了,哈哈。
6. 實際測試發現,yum 命令只恢復了一半,因為各種 yum 命令執行一半時會報錯,例如:No mole named urlgrabber.grabber。這是因為另一個地方的環境變數未設置正確。參考第 3 步強制添加的環境變數目錄的方法,將 sys.path 添加到該文件:vi /usr/libexec/urlgrabber-ext-down。
7. 此時應該已恢復,使用 python 命令安裝 pip 吧。有自動化安裝腳本,可以下載。
8. 總結:
1. Python 2.7 是基礎,在安裝 yum 和 pip 之前必須先解決 Python 問題。安裝 Python 的難點在於 rpm 的依賴包;安裝 yum 的關鍵在於系統環境目錄的設置,因為 yum 使用到 Python 的模塊。
2. 國內找到的解決方案基本相同,但無法解決我的問題。感覺像是疑難雜症。在國外網站上找到解決思路後,感覺過程非常折騰!
『貳』 如何編寫 RPM 的 spec 文件
深入解析 RPM 的構建指令,一切從 spec 文件開始。-- Ankur Sinha "franciscod"(作者)
上篇文章介紹了源 RPM 的構成,其中 spec 文件是關鍵。本文將詳細探討,以 fpaste 為例,教你如何編寫和理解 spec 文件。首先,理解你要打包的軟體是基礎,fpaste 是個 Python 單文件腳本,版本可在 Pagure 上查看: pagure.io/releases/fpas...
fpaste 當前版本為 0.3.9.2,你需要熟悉其源文件內容和安裝位置。標簽如 Name、Version 等在 RPM 中具有特定含義,不能隨意編寫。特別是對於 fpaste,元數據會顯示 RPM 的基本信息。
接下來,我們進入 spec 文件的構建指南。第一部分概述軟體的常規信息,包括名稱、版本和許可等。第二部分是 %prep 部分,用於准備軟體構建,對於 fpaste,僅需提取源文件。這里涉及的宏和標簽是 RPM 特有的解釋機制。
在 %build 部分,fpaste 由於是純 Python,無需構建。構建通常會用到特定的構建系統命令,如 Autotools 或 Setuptools。這部分對構建工具的了解至關重要。
然後是 %install 部分,RPM 會創建 buildroot 來隔離安裝,確保系統安全。這里安裝fpaste 到 %{_bindir} 目錄,並使用 Makefile 進行安裝。
接下來是 %files 部分,列出要打包的所有文件,以及 %doc 和 %license 命令的文件夾管理。RPM 能自動識別安裝的文件,但未列出會提醒用戶。
最後是 %changelog,記錄所有變更,確保社區了解軟體包的更新歷史。至此,我們完成了基本的 spec 文件編寫,可以構建 RPM 了。
要開始構建,按照上文設置環境,然後創建源 RPM。通過構建過程,你可以看到每個步驟的詳細輸出,這對於解決構建問題至關重要。
總結,spec 文件是構建 RPM 的核心,雖然本文未詳盡闡述,但已給出入門指引。如果你有興趣貢獻,可以從這里加入 Fedora 社區維護者。如有疑問,開發者郵件列表是你的資源。參考資源包括fedoramagazine.org 的文章。
本文由 LCTT 原創編譯,Linux中國 推出。