Debian

在 Debian Squeeze 上安裝 Openjdk7

  • March 29, 2013

我有一台執行 Debian Squeeze 的伺服器,升級到 Wheezy 不是一種選擇。我需要安裝 JRE 的第 7 版,因為那裡有一些我需要的錯誤修復。我的選擇是:

  • 從 wheezy 包儲存庫安裝 openjdk-7-jre
  • 安裝oracle 7 jre

我們最好安裝 openjdk,但我發現它非常困難。我嘗試使用 apt-get openjdk-7-jre 安裝並得到以下響應:

Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
openjdk-7-jre : Depends: openjdk-7-jre-headless (= 7u3-2.1.3-1) but it is not going to be installed
            Depends: libfontconfig1 (>= 2.9.0) but 2.8.0-2.1 is to be installed
            Depends: libgdk-pixbuf2.0-0 (>= 2.22.0) but it is not going to be installed
            Depends: libjpeg8 (>= 8c) but 8b-1 is to be installed
            Depends: libpulse0 (>= 0.99.1) but 0.9.21-3+squeeze1 is to be installed
            Depends: libatk-wrapper-java-jni (>= 0.30.4-0ubuntu2) but it is not going to be installed
E: Broken packages

然後我嘗試了 aptitude 並得到了以下響應:

0 packages upgraded, 76 newly installed, 0 to remove and 0 not upgraded.
Need to get 56.9 MB of archives. After unpacking 171 MB will be used.
The following packages have unmet dependencies:
 libnss3: Conflicts: libnss3-1d (< 2:3.13.4-2) but 3.12.8-1+squeeze6 is installed.
 openjdk-7-jre: Depends: libfontconfig1 (>= 2.9.0) but 2.8.0-2.1 is installed.
            Depends: libjpeg8 (>= 8c) but it is not going to be installed.
            Depends: libpulse0 (>= 0.99.1) but it is not going to be installed.
 libgdk-pixbuf2.0-0: Depends: libglib2.0-0 (>= 2.31.18) but 2.24.2-1 is installed.
                 Depends: libjpeg8 (>= 8c) but it is not going to be installed.
                 Depends: libtiff4 (>= 3.9.5-2) but 3.9.4-5+squeeze8 is installed.
                 Breaks: libgtk2.0-0 (< 2.21.3) but 2.20.1-2 is installed.
                 Breaks: libgtk2.0-bin (< 2.21.3) but 2.20.1-2 is installed.
 icedtea-7-jre-cacao: Depends: libstdc++6 (>= 4.6) but 4.4.5-8 is installed.
 libatk-wrapper-java-jni: Depends: libglib2.0-0 (>= 2.31.8) but 2.24.2-1 is installed.
 openjdk-7-jre-headless: Depends: libjpeg8 (>= 8c) but it is not going to be installed.
                     Depends: libfontconfig1 (>= 2.9.0) but 2.8.0-2.1 is installed.
                     Depends: libglib2.0-0 (>= 2.26.0) but 2.24.2-1 is installed.
The following actions will resolve these dependencies:

    Keep the following packages at their current version:   
1)     icedtea-7-jre-cacao [Not Installed]                   
2)     icedtea-7-jre-jamvm [Not Installed]                   
3)     libatk-wrapper-java-jni [Not Installed]               
4)     libgdk-pixbuf2.0-0 [Not Installed]                    
5)     libnss3 [Not Installed]                               
6)     openjdk-7-jre [Not Installed]                         
7)     openjdk-7-jre-headless [Not Installed]                
8)     openjdk-7-jre-lib [Not Installed]                     

    Leave the following dependencies unresolved:            
9)     libatk-wrapper-java recommends libatk-wrapper-java-jni

Accept this solution? [Y/n/q/?] 

接受解決方案的結束如下:

No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.

對不起,冗長的輸出,我是這方面的新手。

無論如何,從我讀過的內容來看,在擠壓上安裝 openjdk-7 非常困難——我想我正在尋找靈丹妙藥!有人做過嗎?我應該放棄並獲得oracle嗎?

乾杯,

詹姆士

我不知道您的嘗試失敗的具體原因(它可能與 APT conf 等有關),但我設法很容易地在擠壓上安裝了 openjdk7,到目前為止沒有任何明顯的副作用。

在這裡需要警告一句:混合來自不同版本(例如穩定版和測試版)的包是有風險的。從另一個版本安裝的包可能與其他包不兼容,甚至可能破壞其他包。升級像 libc 這樣的關鍵軟體包特別危險,在這種情況下會升級。

首先,您需要設置包優先級,以便 APT 不會開始從測試中提取所有內容。有關更多資訊,您可以參考 apt_preferences(5) 手冊頁和Debian 管理員手冊

  1. 在 sources.list 中包含 wheezy(我假設你已經這樣做了)
  2. 設置優先級

將擠壓設置為預設版本

$ cat /etc/apt/apt.conf.d/local  
APT::Default-Release "squeeze";

這有效地為擠壓包設置了優先級 990。

通過進行模擬升級,我注意到 APT 正在嘗試從測試中升級一些包。apt-cache policy解釋了從後端安裝的軟體包會發生這種情況(已安裝的軟體包優先級為 100,而測試中可用的軟體包為 500)。不確定這是否是最好的做法,但要解決這個問題(避免使用來自測試的版本升級來自後端的軟體包)我最小化了測試優先級(如果你不使用後端,你不必這樣做)

$ cat /etc/apt/preferences.d/wheezy 
Package: *
Pin: release n=wheezy
Pin-Priority: 10

“10”只是我選擇的一個任意數字,它小於 100。我猜想用這個 pin 安全更新不會為從測試安裝的包獲取(尚未測試),解決這個問題也很有趣. 3. 安裝 openjdk7 選擇 wheezy 作為目標版本

# apt-get install -t wheezy openjdk-7-jdk

由於基本庫將在升級過程中準備好重新啟動一些服務(將在您同意的情況下自動重新啟動)。而且我不建議在圖形會話中執行此操作 - 我被指示在升級 libc 之前停止我的顯示管理器。

引用自:https://serverfault.com/questions/465741