博客 / 詳情

返回

Ubuntu JDK PPA 安裝失敗的解決辦法

最後一次更新於 2019/08/05

報錯

我大概是半年沒用 Ubuntu 了, 今天剛想升級 Java JDK 就得到了下方的報錯:

正在連接 download.oracle.com (download.oracle.com)|23.196.196.76|:443... 已連接。
已發出的 HTTP 請求, 正在等待迴應... 404 Not Found
2019-08-05 18:03:51 錯誤 404: Not Found.

download failed
Oracle JDK 8 is NOT installed.
dpkg: 處理軟件包 oracle-java8-installer (--configure)時出錯:
 子進程 已安裝 post-installation 腳本 返回錯誤狀態 1

錯誤排查

我尋思半天,經過反覆嘗試,最終確認是 Oracle 爸爸要坑我。不知道為啥 Google 搜索裏沒搜到這個錯誤出現的原因,所以我今天跟大家解釋一下,幫助大家避一下坑。

首先得從 wget 説起。簡單來説它是個 HTTP GET 請求,在以前個大網站不設安全驗證的時期相當高效好用。Oracle 爸爸告訴你: 不,你以後想都別想。

那麼"想都別想"的這一天從什麼時候開始呢?肯定跟這一天有關係:
License Update

Oracle 為了確保 JDK 不被濫用,強制要求下載前必須登錄 Oracle 賬户。給不瞭解 HTTP 請求的朋友們稍微科普一下, GET 請求是直接訪問對應 URL 的,處於無賬户狀態。而 POST 請求在訪問對應 URL 的同時,會附帶 json 數據,在這裏指的就是 Oracle 賬户的用户名和密碼。

因此 Oracle 根本就不讓用户通過 wget 下載資源,才會報出 404。通過從瀏覽器點擊原本要訪問的下載地址確定了 Oracle 不讓未登入個人賬號的用户獲取資源,以下是通過匿名形式訪問 Oracle 獲得的截圖:
An unauthorized request
Sorry!

解決辦法

  1. 首先進入 /var/lib/dpkg/info 目錄

    cd /var/lib/dpkg/info
  2. 更改 Java 版本

    去官網下載 JDK

    sudo sed -i 's|JAVA_VERSION=在wget裏下載失敗的版本|JAVA_VERSION=在 Oracle 官網手動下載成功的版本|' oracle-java8-installer.*
  3. 更改下載鏈接

    下圖僅為事例命令,請根據自己安裝的版本情況填寫相應參數:

    sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/|' oracle-java8-installer.*

    有人會問 e758a0de34e24606bca991d704f6dcbf0da788060d494f5095bf8624735fa2f1 都是從哪裏來的呢?

    第一串字符是從 wget 的下載 URL 裏獲得的:
    terminal

    但是第二串字符來歷就有點講究了,要去官網打開開發者工具獲得。這個操作,有點騷:
    developer tool

  4. 更改安裝包的 sha256sum 值

    不用管從 wget 的下載的版本的 sha256sum 值, 直接填 .* (不區分的意思)就行。

    但是獲取我們手動下載的 .tar.gz 文件的 sha256sum 值還是很簡單的:

    首先定位到文件下載的地址:

    cd 安裝包存放的絕對地址

    輸入計算命令:

    sha256sum 你下載的安裝包的名稱

    最後根據獲取到的值填寫下方相應的參數:

    sudo sed -i 's|SHA256SUM_TGZ=".*"|SHA256SUM_TGZ="你獲得的值"|' oracle-java8-installer.*
  5. 更改 JDK 版本

    這個比較簡單了:

    sudo sed -i 's|J_DIR=jdk1.8.0_(wget安裝失敗的版本號)|J_DIR=jdk1.8.0_(手動下載成功的版本號))|' oracle-java8-installer.*
  6. 刪除安裝失敗的文件,將手動下載的安裝包放入 /var/cache/oracle-jdk8-installer 文件夾下

    sudo rm jdk-8u(安裝失敗的版本號)-linux-x64.tar.gz
    sudo mv jdk-8u(手動下載的版本號)-linux-x64.tar.gz /var/cache/oracle-jdk8-installer/
  7. 重新安裝 oracle-java8-installer

    sudo apt-get install oracle-java8-installer

完成這 7 步才算搞定了。因為 Oracle 爸爸, 用 PPA 還不如手動安裝省事呢。

原鏈接

如果我的文章可以幫到您,勞煩您點進源碼點個 ★ Star 哦!
https://hexang.org/miaocai/or...

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.