
點擊上方「藍字」關注咱們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 |

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」 是一款從 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。這個工具能夠用來建立本身的 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 會自動檢測本地環境與待安裝包所需的環境信息差別,將缺乏的依賴包自動補齊安裝。這樣,即便某個軟件依賴關係複雜,也能夠在沒有網的環境,便捷、安全地安裝。



猜你喜歡
近期活動:金科大咖 雲講壇
如何融匯科技,打造數字化轉型引擎?
如何共享資源,主動賦能同業與社會?
如何共建生態,構建無界多維的生態空間?
如何創新引領,成爲新金融的實踐者和先行者?
38位金融科技大咖應邀雲端,與你探索將來科技前沿方向。豪華專家師資隊伍,精選38項高端課程,盡在優源匯!
本文分享自微信公衆號 - 金科優源匯(jkyyh2020)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。