手把手教你 Yum 源包下載及離線安裝


點擊上方「藍字」關注咱們node

做者 | 聶砂python

編輯 | 陳婷linux


我行行內如今主推的是 Oracle Linux 7.4 和Centos Linux 7.4 操做系統。只要連上互聯網,這兩個操做系統安裝軟件包均可以使用 yum 命令直接安裝便可,很是簡單。
docker


在國內,訪問阿里雲的 yum 源速度比較快。若是要修改爲從阿里雲的 yum 源下載包,設置方法以下:centos


1. 獲取阿里雲 repo緩存


這一步驟的思路是,將 Centos 系統原有的 yum 源備份並棄用,並使用阿里雲的 repo 文件替換原有文件。操做方法是:在 root 用戶下,執行如下命令便可:安全


cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak微信

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo網絡

cp /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.bak
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
app


2. 清理原來的緩存,從新緩存


這一步驟的思路是,yum 源信息是會緩存在本地的,咱們除了更新 /etc/yum.repos.d/ 下的 repo 文件以外,還須要調用 yum 命令從新生成緩存,這樣配置就會正式生效啦。仍是在 root 用戶下,執行:


yum clean all

yum makecache


按上述步驟配置好後,以安裝或者升級 gcc 爲例,在 root 用戶下,執行如下命令便可:


yum install gcc


若是下載的是對應操做系統完整版的安裝 iso 鏡像,也能夠將 iso 掛載在Centos 中,並作相應的 repo 配置後便可使用。此外,我行測試環境和生產環境均有 yum 源,但可能不如互聯網同步的那麼及時,有些包並無提供。在此不作詳述。


那聰明的同窗們就會問了:若是,在某些連不上外網的環境,yum 命令是否是就沒法生效了呢?


這個問題很是好,咱們來作個試驗。


斷開本機的網絡,安裝 Python3 觀察一下執行 yum install 的信息:


首先執行 yum install python36,的確,在緩存的幫助下,yum 命令很快就知道 Python3 及其所需依賴包的狀況:



可是這真的表示能夠下載了嗎?咱們在提示信息中輸入 y 並回車,看到的信息以下:


顯然,緩存信息只存了包名、依賴信息,並無緩存真正的安裝包。再補充一句,若是連不上外網的機器,即便配置了阿里雲的 yum 源,cache 也是創建不了的。因此,咱們須要找到一種方法,在能連外網的機器中下載安裝包,複製到沒法連上外網的機器來安裝,以實現咱們安裝 yum 包軟件的目的。


咱們再來觀察一下 yum 的使用說明,輸入命令 yum –help,能看到如下信息:


[root@localhost demo]# yum -help

Loaded plugins: fastestmirror, langpacks

Usage: yum [options] COMMAND


List of Commands:


install        Install a package or packages on your system

(此處略去其餘 30 餘個選項)


Options:

(此處略去 223 個詞)

--downloadonly        don't update, just download

--downloaddir=DLDIR   specifies an alternate directory to store packages


Plugin Options:


其中,downloadonly 深深地吸引了我,咱們在立刻鍵入如下命令:


mkdir rpms

yum install --downloadonly --downloaddir=./rpms gcc

這個命令的目的是,把 gcc 相關的安裝包下載到咱們新建的 rpms 目錄中去,效果以下:



咱們檢查一下 rpms 文件夾裏面是否是有相應的包:



看起來很是不錯,這樣把依賴包也都下載好了!咱們斷網試試安裝。斷網後,輸入命令:


rpm -Uvh *.rpm



這樣,依賴包就自動按照依賴順序安裝好了!


下面來作一個更好玩的實驗。


Docker-ce 是 Docker 的社區版本(Community Edition),它的依賴包至關多,咱們試試離線裝 Docker。


首先仍是設置 Docker 的阿里雲 yum 源,咱們這回找一個高大上的命令:


yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

其實這個命令最終效果,仍是把 repo 文件下載並放在 /etc/yum.repos.d/ 文件夾中,咱們確認一下:


ll /etc/yum.repos.d/


的確如咱們所料,最終是在這個目錄中多了這樣的 docker-ce.repo 文件。

而後,就能夠下載 Docker 相關安裝包了:


yum install --downloadonly --downloaddir=./rpms docker-ce

若是碰到有一個包 container-selinux-2.119.1-1.c57a6f9.el7.noarch.rpm 下載不下來,那是由於阿里雲的 yum 源把這個去掉了。


可是官方的 yum 源這個包仍是在的,咱們可使官方的源再生效,就能夠補齊這個 rpm 包:


mv CentOS-Base.repo CentOS-Base.repo.aliyunbak

mv CentOS-Base.repo.bak CentOS-Base.repo

yum clean all && yum makecache

yum install --downloadonly --downloaddir=./rpms docker-ce


下載好後大約是這個樣子:



在這個目錄上,執行:


rpm -Uvh *.rpm



很是順利就執行完成了!


那麼,咱們今天討論的話題到此就結束了嗎?並無~~


咱們再來嘗試一種新的狀況:這些包若是在咱們新的環境,有一部分裝了,有一部分沒裝,咱們還能經過 rpm 命令順利地安裝上去嗎?


爲了驗證一下這個狀況,咱們簡化操做,把 docker-ce 刪掉:


yum remove docker-ce

而後再試試 rpm 安裝命令效果:


rpm -Uvh *.rpm

瓦特?這就裝不上了?咱們再用 yum 命令連外網下載離線包試試看效果呢:



原來,yum 下載離線包,會自動過濾掉當前操做系統已安裝的包,只下載未安裝的包!


事實上,這種狀況仍是比較常見的,咱們外網環境不可能時刻與內網環境安裝的軟件徹底保持同步,很容易多下載或者漏下載。那這種方式下載的包,極可能是沒有辦法在內網環境上成功安裝的!



那麼就沒有辦法解決這個問題了嗎?固然不是。下面隆重介紹兩個 yum 神器:repotrack 和 createrepo。








repotrack


「repotrack」 是一款從 yum 源倉庫下載 rpm 包的神器,咱們能夠看看下載的內容有什麼不一樣。


若是環境中沒有 repotrack 命令,可使用 yum install yum-utils 下載,此處再也不贅述。這個軟件通常就裝載能上網的機器就能夠了。而後咱們下載 docker-ce 的依賴包試試,鍵入如下命令:


repotrack docker-ce


這個命令會在當前文件夾下下載 docker-ce 包的全部依賴。接下來能夠看到超長一串「Downloading xxxx.rpm」的日誌,就不貼長圖了。命令執行完成後,看一看是否下載了全量的依賴包:



這密密麻麻的包,只會多不會少啦!



接下來要解決的第二個問題,是怎麼把這些 rpm 包再安裝起來。還記得以前執行 rpm –ivh 時,報的各類問題不?這時候,能夠想到這樣一個命令:


rpm –ivh *.rpm –force --nodeps


不過,這個命令的「刺激」之處在於,無論以前這些包有沒有、是啥版本、是否是有其餘包衝突,它是把全部 rpm 包照單全裝一遍,若是不是對環境和這些包炒雞瞭解,這個命令使用起來仍是要三思呀~~









createrepo


下面再介紹第二款神器——createrepo。這個工具能夠用來建立本身的 yum 倉庫。若是本機沒有這個命令的話,可使用如下命令進行安裝:


yum Install createrepo


而後,咱們能夠把上面下載的那一堆 rpm 包,放在一個指定的位置,調用 createrepo 命令。在這裏,我就簡單地放在了 /home/demo/rpms 裏面了,執行命令:


createrepo /home/demo/rpms


就能夠將這些 rpm 提取成一個 yum 倉庫所必須的信息,並放在 repodata 目錄中。這個命令生成的倉庫信息,是與絕對路徑相關的。所以,咱們把整個文件夾複製在一個新的環境中時,必須將本文件夾放在如出一轍的地方,纔可使其生效


或者,也能夠確認新環境中有 createrepo 命令,或者將 createrepo 安裝包在新環境中先安裝好並確承認以執行,再執行 createrepo 命令建立倉庫信息。刪除已建立好的 repo 本地倉庫信息時,只須要使用 rm -rf repodata 刪除 repodata 文件夾便可。

最後一步,使這個本地 yum 倉庫生效。在 /etc/yum.repos.d/ 文件夾中新建 local.repo,輸入如下配置信息:


[local]

#yum倉庫的名字

name=local

#倉庫路徑,因爲是放在本地的只能用file協議而不是http

baseurl=file:///home/demo/rpms

#開啓該倉庫

enabled=1

#不作gpg檢查

gpgcheck=0


大功告成!爲了完全驗證這個本地倉是否可用,我此次把全部的其餘 repo 配置都移走,並重建 yum 的 cache:



而後再執行:


yum install docker-ce


看看發生了什麼:



我偷偷地把 container-selinux、containerd.io 也刪掉了,果不其然被「揪」出來了!確認好之後選擇 y,就能夠把這些缺乏的包裝上了。



小記


經過 yum 的工具 repotrack,能夠把依賴包完整地下載到本地;經過 createrepo 方法,能夠建立 yum 本地倉。配置好本地倉之後,yum install 會自動檢測本地環境與待安裝包所需的環境信息差別,將缺乏的依賴包自動補齊安裝。這樣,即便某個軟件依賴關係複雜,也能夠在沒有網的環境,便捷、安全地安裝。


  


猜你喜歡  

建信金科大咖訪談:你所體驗的順滑普惠金融服務背後,咱們有哪些科技創新?
告別祖傳代碼 -Java 8 語境下模板模式的再審視
OCR數據處理(下篇)
政務服務體驗設計背後的故事 | 雲南辦事通 APP 2.0 設計(文末招聘!!!)


近期活動:金科大咖 雲講壇


如何融匯科技,打造數字化轉型引擎?

如何共享資源,主動賦能同業與社會?

如何共建生態,構建無界多維的生態空間?

如何創新引領,成爲新金融的實踐者和先行者?


38金融科技大咖應邀雲端,與你探索將來科技前沿方向。豪華專家師資隊伍,精選38項高端課程,盡在優源匯!



好文!點個在看!

本文分享自微信公衆號 - 金科優源匯(jkyyh2020)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索