Solaris IPS:pkg 依賴錯誤與實際問題無關/如何最好地診斷 IPS 依賴失敗?
我正在執行 Solaris 11.3(目前來自非契約版本 repo)。我有大量的 Solaris 10 經驗,但我是 11 的新手,並且仍在努力提高對 IPS 的信心。
我的問題是我經常發現我在診斷包依賴失敗時遇到了嚴重的問題,因為 的輸出
pkg install
似乎與實際問題無關。事實上,我現在想知道這是否是由一些錯誤或儲存庫問題引起的,我將在最後解釋。以下是我最近遇到的兩個問題範例,其中失敗
pkg
命令的輸出似乎與實際問題完全無關。在第一個例子中,這導致我花了幾天時間追逐紅鯡魚,直到我最終偶然發現了所需的修復。全域版本是 Oracle Solaris 11.3.1.5.1(
pkg/entire
版本0.5.11-0.175.3.1.0.5.1
。)全域是從 USB 文本安裝程序安裝的,從那時起,我已經解鎖並更新了預設情況下安裝在全域中的所有 FOSS 包(根據Oracle docs here),並額外安裝了一些額外的支持包(vim
、screen
、tmux
等)在寫這篇文章時,我從新安裝的
solaris-small-server
區域的位置重新創建了兩個範例,沒有其他更改;我上面描述的 FOSS 更新僅發生在全域中,而不發生在用於重新執行以下範例並擷取錯誤輸出的區域中。下面列出的命令實際上是從預設區域 AI 清單創建後在測試區域中執行的第一個命令。範例 1:我一直在嘗試在非全域區域中安裝一個正常工作的 Gnome 桌面,而不必在我的全域中安裝我一直希望保持精簡和乾淨的包。
zlogin zone pkg install --accept -v solaris-desktop
: 失敗,因為driver/audio/audio-usb
說它還必須安裝在全域區域中。- 我創建了一個
solaris-desktop
名為 called的自定義版本,solaris-desktop-zone
它刪除了所有driver/*
包,以及任何依賴於全域的包(我通過呼叫pkg contents -mr
每個包的腳本刪除了它並刪除了任何引用的包feature/package/dependency/self
。)我將它安裝到我的本地 repo,它是.pkg/mirror
_http://pkg.oracle.com/solaris/release/
- 安裝我修改過的包會導致這個 pastebin中顯示的一長串依賴失敗,這些似乎主要與 Python 包有關。
- 我花了一天的時間來解決這些錯誤:手動和遞歸地分析各種 Python 包及其依賴項,並刪除我在
solaris-desktop-zone
包中可以找到的任何提及它們的內容。最終,我只好刪除成群的包,直到找到一個可以通過 Solver 階段的版本,然後從那裡向後工作以辨識一個包並最終了解原因。解決方案?
x11/server/xorg/driver/xorg-video
這取決於也具有feature/package/dependency/self
依賴關係的 NVidia 驅動程序。事後看來,我可以通過遞歸搜尋該自依賴來更快地發現這一點 - 即不僅檢查我的包所依賴的所有solaris-desktop-zone
包,還檢查它們的所有依賴項。但是我當然陷入了困境,從錯誤中相信問題與 Python 包或依賴於它們的包有關。範例 2:
gcc-5
zlogin testdesktop pkg install --accept -nv gcc-5
產生這個輸出。同樣的奇怪 Python 錯誤列表,同樣,解決方案完全不相關:我需要解鎖一些與 GCC 相關的版本:
pkg change-facet version-lock.system/library/gcc/gcc-c-runtime=false \ version-lock.system/library/gcc/gcc-c++-runtime=false \ version-lock.system/library/gcc/gcc-gfortran-runtime=false \ version-lock.system/library/gcc/gcc-gobjc-runtime=false
謝天謝地,我通過 Google 很快找到了這個(在 Unix StackExchange 上)。但是我仍然感到困惑,因為回答它的人描述的診斷與我所看到的不符 - 他的文章中列出的 pkg 錯誤對問題給出了可以理解的描述(
Reason: This version is excluded by installed incorporation..
)。我的又出現了這些不相關的 Python 錯誤!現在,當我寫這篇文章時,我想知道在 Solaris 11.3 發行版儲存庫中是否發生了一些奇怪的事情,可能是由一個 SRU 修復的,我在獲得契約之前無法訪問。也許這就是為什麼我得到這些奇怪的錯誤而不是可以理解的、可調試的錯誤?
在這方面,我確實注意到 Dbus Python 可能存在一些錯誤 - 我在兩個範例中看到的錯誤之一都
python-dbus-27
與dbus-python-27
. 但dbus-python-27
在 repo 中不存在。所以這可能是一個回購問題。但即使是這樣,為什麼我只有在遇到其他完全不相關的問題時才會看到這些錯誤?這是由回購問題引起的錯誤嗎?
我將不勝感激確認是否是這種情況,並且總體上了解有關用於調試和解決包依賴性問題的建議方法和工具的更多資訊。鑑於我得到的錯誤,我是否可以在不訴諸暴力檢查每個依賴包的情況下更快地解決這個問題?
提前致謝。
首先,如果某些配置安裝在非全域區域中,則需要將它們安裝到全域區域中。這是通過使用“父”依賴項來完成的,正如我在另一個回復中提到的那樣:Solaris 11.3 non-global zone not inheriting IPS facet changes (to version-lock)
對於 solaris-desktop 包的依賴項通常是這樣,因為它依賴於只有全域區域才能執行的服務(因為只有全域區域有實際的核心),例如驅動程序、NFS 或其他特定服務。
’no version’ ‘can be found’ 錯誤是相當字面的;它基本上意味著在配置儲存庫中沒有滿足包依賴關係的版本。
不幸的是,您似乎發現了一些評估包的問題。你沒有做錯任何事,只是現在行不通。這是必須首先在內部解決的問題。
我認為沒有人測試過基本 11.3 版本與評估包的組合併嘗試同時安裝“solaris-desktop”。這需要一些時間來解決,所以請耐心等待。
同時,如果您想要一個桌面配置的系統,最好的選擇是不要嘗試使用評估包,而是先在全域區域中安裝 solaris-desktop,然後再在非全域區域中安裝。這是迄今為止最簡單的選擇。
目前解決此問題的唯一方法是修改並重新發布給您帶來問題的軟體包,但目前我無法指導您完成該過程。可以說,這將涉及在您要修改的每個軟體包上使用 pkgrecv –raw,然後使用 pkgsend 將每個軟體包重新發佈到您自己的本地儲存庫。