安裝postgresql的依賴問題
這是我在 Debian 伺服器上安裝 postgresql 所遵循的步驟:
- 添加反向埠
deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free
到/etc/apt/sources.list
- 跑
sudo apt-get update
- 跑
apt-get -t squeeze-backports install postgresql-9.1
我在第 3 步遇到依賴錯誤:
The following packages have unmet dependencies: postgresql-9.1 : Depends: postgresql-common (>= 115~) but it is not going to be installed
當我添加 add postgresql-common 並執行
apt-get -t squeeze-backports install postgresql-9.1 postgresql-common
時,我得到以下依賴錯誤:The following packages have unmet dependencies: postgresql-common : Breaks: logrotate (>= 3.8) but 3.8.1-4 is to be installed
是我的系統有問題,還是安裝步驟不正確?刪除
logrotate
並postgresql
安裝所需的是否安全?這是輸出
apt-cache policy postgresql-9.1 postgresql-common logrotate
: 這是我的輸出/etc/apt/sources.list
: 而且我沒有/etc/apt/preferences
:
-t
首先,使用switch 和switch之間有一個微妙但重要的區別$package/$suite
:
apt-get install <package>/squeeze-backports
- 這將從squeeze-backports和stable的依賴項安裝apt-get -t squeeze-backports install <package>
- 這將安裝來自擠壓反向埠的依賴項。就像第一次嘗試將
$package/$suite
開關設置為 apt-get 一樣,然後嘗試從擠壓反向埠安裝 postgresql 和 postgresql-common,但不安裝它的依賴項(在本例中為 logrotate)。我沒有要測試的 Squeeze 系統,但我認為這就是正在發生的事情:
Squeeze 不再是 Stable 的目前版本,現在是oldstable。Squeeze-backports 從當時的測試版本 (Wheezy) 中提取其包,該版本現在是目前的穩定版。您嘗試安裝的 postgresql 版本實際上來自目前版本的穩定版,但設計為使用 oldstable 的大部分依賴項執行(即,與 logrotate 3.8.1 相比,來自 oldstable/squeeze 的 logrotate 3.7.8-6- 4 來自 stable/wheezy),但由於使用 squeeze-backports 和 wheezy 大致類似
-t
switch 意味著它出於某種原因試圖從 wheezy 的儲存庫中提取 logrotate,而不是對包含在 oldstable/squeeze 中的 3.7.8-6 版本感到滿意。通常,這是由於使用錯誤的 apt-pinning 策略設置顯式添加了 wheezy 儲存庫,或者您的儲存庫指向發布類型(穩定/測試/不穩定)而不是發布(擠壓/喘息),在這種情況下你有一個更大的問題。您應該努力通過升級到 Wheezy 來解決您的問題,因為它是 Stable 的目前版本。出於多種原因,這是最佳解決方案。如果您不能或不願意這樣做,請嘗試使用
-t
開關,這樣您就不會從 backports 中提取 postgresql 的依賴項,或者使用 apt-pinning 從 Wheezy 中提取所需的東西。我猶豫是否將 Debian 更新為 Wheezy,因為我很容易破壞伺服器上的一些重要內容。
不幸的是,你遲早要升級到 Wheezy。Debian 安全團隊只為 oldstable 提供了大約一年的安全更新檔,所以你現在真的應該已經計劃升級到 Wheezy。請不要採取這種錯誤的方式,但如果您沒有進行升級的專業知識,您應該尋找並僱用有能力的人。
我認為您有兩種方法:您可以進行從 Squeeze 到 Wheezy 的就地升級,或者您可以建構一個新的基於 Wheezy 的伺服器並從一個遷移到另一個。只要您有一個健康的系統開始,就地升級實際上非常簡單。我見過一些經過三到四個不同發布週期升級的盒子,它們工作得很好。確保您仔細閱讀發行說明,並在您的生產伺服器(大概就是我們正在談論的伺服器)上進行升級之前,在您的開發環境中測試升級過程和您的應用程序。但是,聽起來我們並沒有使用健康的伺服器,所以我建議您採用遷移路徑,因為您將獲得一個不錯的干淨狀態。
不用說,無論您選擇 Wheezy 的路徑如何,您都應該已經擁有經過驗證的備份和恢復程序。
如果有更簡單的方法來解決我的問題
是的。有一種更簡單的方法可以解決您目前的問題,但它不能解決根本原因,而專業人員會解決根本原因。
查看您的 apt-cache 策略結果。您正在從非 debian apt.postgresql.org儲存庫中提取 postgresql 和 postgresql-common,但看起來您為 Ubuntu (precise-pgdg) 添加了這些,而不是 Debian Squeeze (squeeze-pgdg)不同的依賴集。在 logrotate 的情況下,它是 3.7.8-6ubuntu5 而不是 oldstable/squeeze 的 3.7.8-6。
Logrotate 是從 Debian Stable 儲存庫中提取的,這意味著來自 Wheezy,它可能與您的 oldstable/squeeze 系統的其餘部分不同步。您來自 Ubuntu Precise 的 postgresql 軟體包正在尋找 3.7.8-6ubuntu5,但您擁有的最接近的是來自 stable/wheezy 的 3.8.1-4。
您需要 1)在使用 Debian 時停止使用 Ubuntu 儲存庫,以及 2)確定您實際執行的版本(Squeeze 或 Wheezy)並將其更改
Stable
為該版本。我懷疑這會解決你的問題。話雖這麼說,您
/etc/apt/sources.list
的配置完全不正確,而且您的伺服器很可能很混亂。如果您使用的是 Debian,則不應擁有 Ubuntu 儲存庫。Ubuntu 基於 Debian,但它們是兩個獨立的野獸,不幸的是,Internet 上有大量建議建議如果您需要某個版本的軟體包或 Ubuntu PPA 中存在但 Debian 儲存庫中不存在的軟體包添加 Ubuntu PPA。這是錯誤的。請不要這樣做或聽取推薦它的人。您還在跟踪發布類型(穩定)而不是發布(擠壓或喘息)。這意味著一旦 Wheezy 以 Stable 形式發布,所有這些軟體包都可用。您可能已經在執行 Wheezy 或 Squeeze 和 Wheezy 的可怕合併。這也很糟糕。
我真的建議您進行全新安裝並在那裡遷移您的應用程序。
它被不同的人多次修改
RCS 的設置和使用非常簡單。我衷心推薦它用於最小的安裝。它將有助於在未來緩解這些問題。