最後一次更新於 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 爸爸告訴你: 不,你以後想都別想。
那麼"想都別想"的這一天從什麼時候開始呢?肯定跟這一天有關係:
Oracle 為了確保 JDK 不被濫用,強制要求下載前必須登錄 Oracle 賬户。給不瞭解 HTTP 請求的朋友們稍微科普一下, GET 請求是直接訪問對應 URL 的,處於無賬户狀態。而 POST 請求在訪問對應 URL 的同時,會附帶 json 數據,在這裏指的就是 Oracle 賬户的用户名和密碼。
因此 Oracle 根本就不讓用户通過 wget 下載資源,才會報出 404。通過從瀏覽器點擊原本要訪問的下載地址確定了 Oracle 不讓未登入個人賬號的用户獲取資源,以下是通過匿名形式訪問 Oracle 獲得的截圖:
解決辦法
-
首先進入
/var/lib/dpkg/info目錄cd /var/lib/dpkg/info -
更改 Java 版本
去官網下載 JDK
sudo sed -i 's|JAVA_VERSION=在wget裏下載失敗的版本|JAVA_VERSION=在 Oracle 官網手動下載成功的版本|' oracle-java8-installer.* -
更改下載鏈接
下圖僅為事例命令,請根據自己安裝的版本情況填寫相應參數:
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.*有人會問
e758a0de34e24606bca991d704f6dcbf和0da788060d494f5095bf8624735fa2f1都是從哪裏來的呢?第一串字符是從
wget的下載 URL 裏獲得的:
但是第二串字符來歷就有點講究了,要去官網打開開發者工具獲得。這個操作,有點騷:
-
更改安裝包的 sha256sum 值
不用管從
wget的下載的版本的 sha256sum 值, 直接填.*(不區分的意思)就行。但是獲取我們手動下載的 .tar.gz 文件的 sha256sum 值還是很簡單的:
首先定位到文件下載的地址:cd 安裝包存放的絕對地址輸入計算命令:
sha256sum 你下載的安裝包的名稱最後根據獲取到的值填寫下方相應的參數:
sudo sed -i 's|SHA256SUM_TGZ=".*"|SHA256SUM_TGZ="你獲得的值"|' oracle-java8-installer.* -
更改 JDK 版本
這個比較簡單了:
sudo sed -i 's|J_DIR=jdk1.8.0_(wget安裝失敗的版本號)|J_DIR=jdk1.8.0_(手動下載成功的版本號))|' oracle-java8-installer.* -
刪除安裝失敗的文件,將手動下載的安裝包放入
/var/cache/oracle-jdk8-installer文件夾下sudo rm jdk-8u(安裝失敗的版本號)-linux-x64.tar.gzsudo mv jdk-8u(手動下載的版本號)-linux-x64.tar.gz /var/cache/oracle-jdk8-installer/ -
重新安裝 oracle-java8-installer
sudo apt-get install oracle-java8-installer
完成這 7 步才算搞定了。因為 Oracle 爸爸, 用 PPA 還不如手動安裝省事呢。
原鏈接
如果我的文章可以幫到您,勞煩您點進源碼點個 ★ Star 哦!
https://hexang.org/miaocai/or...