1. 程式人生 > 其它 >構建本地yum倉庫

構建本地yum倉庫

rpm包安裝的時候會有很多軟體會出現因為其他依賴包沒有,而導致安裝失敗的情況。一般可以連線外網的時候我們直接使用 yum 進行安裝,可以為我們解決依賴包關係,但是很多工作環境下是沒有外網的,內網情況下就需要我們自行準備軟體包進行安裝,而安裝包較多的情況下可能出現各種情況,甚至僅僅因為看著亂就幹不動的事兒。目前個人的方法還是構建本地的 yum 倉庫,將自己準備的軟體包放到倉庫目錄,然後構建,這樣可以像平常一樣 yum install 就可以直接進行安裝了。

首先是準備各種rpm軟體包,我的方法是用 yum-utils 的 yumdownloader 命令進行本地下載,該命令可以在不安裝的情況下,僅下載安裝包及其需要的其他依賴包,比較好用;

使用語法:yumdownloader --resolve --destdir=儲存路徑 軟體包名稱

還可以修改/etc/yum.conf 配置檔案,將第三行的快取功能開啟:

keepcache=1 (預設是0,關閉狀態,1是開啟,可以在安裝結束後保留其使用的rpm包)

下方操作均在CentOS7上面進行,且確保是一個可以連線外網的網路環境,因為這是下載,順便可以下一些其他服務的rpm包,比如這裡我下載了httpd的安裝包,當然還有一些其他的:

  ##首先安裝必要的下載軟體包 yum-utils
[root@graylog ~]# yum install -y yum-utils

  ##下載安裝 createrepo 所需的安裝包及依賴包
[root@graylog
~]# yumdownloader --resolve --destdir=/opt/createrepo/ createrepo

之後將軟體包轉到需要安裝的機器上,當前我是在同一虛擬機器上做的,所以需要斷網,修改/etc/sysconfig/network-scripts/ 下的網絡卡檔案,註釋閘道器和DNS的行 #GATEWAY、#DNS,之後 systemctl restart network 重啟網絡卡

  ##檢視下載的rpm包(此為當前版本資訊,根據實際情況可能有變化)
  ##在依賴包關係上,是4個包,有時候也會是3個軟體包的,以防萬一,第4個包 libxml2-python-2.9.1-6.el7.5
.x86_64.rpm 也給下載了 [root@graylog ~]# ls /opt/createrepo/ createrepo-0.9.9-28.el7.noarch.rpm libxml2-python-2.9.1-6.el7.5.x86_64.rpm deltarpm-3.6-3.el7.x86_64.rpm python-deltarpm-3.6-3.el7.x86_64.rpm   ##安裝 createrepo   ##一些情況下會提示 libxml2-python 與一個類似的包相沖突(當時上班急於解決問題,忘了是什麼,好像也是一個libxml的包,若發生可以使用 yum erase 該軟體包 解除安裝之後再安裝) [root@graylog ~]# rpm -ivh /opt/createrepo/* Preparing... ################################# [100%] Updating / installing... 1:deltarpm-3.6-3.el7 ################################# [ 25%] 2:python-deltarpm-3.6-3.el7 ################################# [ 50%] 3:libxml2-python-2.9.1-6.el7.5 ################################# [ 75%] 4:createrepo-0.9.9-28.el7 ################################# [100%]   ##命令已經有了 [root@graylog ~]# which createrepo /usr/bin/createrepo

接下來將我們準備構建 yum 倉庫的包放入我們指定的一個目錄下,當前我指定的是/opt/rpm/ :

  ##當前準備了36個rpm包,放到了指定目錄下
[root@graylog ~]# ls /opt/rpm/ | wc -l
36

  ##修改 /etc/yum.repos.d 下的配置檔案
  ##建立一個保留原來配置檔案的目錄,像這種預設的原有配置檔案,其他軟體的也一樣,做個備份,千萬別刪了,再需要的時候麻煩死了
[root@graylog ~]# cd /etc/yum.repos.d/
[root@graylog yum.repos.d]# mkdir backup
[root@graylog yum.repos.d]# mv CentOS-* backup/

  ##之後我們需要建立一個自定義的 yum 配置檔案,這裡名稱暫定 local.repo
  ## name 名稱自定義
  ## baseurl 設定作為yum倉庫的位置,支援 http:// ftp:// file:// 三種,我們是本地目錄,用 file://
  ## enabled 設定是否啟用配置得到yum倉庫,1是啟用,0是關閉,這裡必須是1
  ## gpgcheck 設定是否進行gpg校驗,1是啟用,0是不啟用,我們用0就行
[root@graylog yum.repos.d]# vi local.repo
[local]
name=local
baseurl=file:///opt/rpm
enabled=1
gpgcheck=0

  ##配置檔案完成後,用命令將指定目錄配置為yum倉庫,下面是顯示的資訊
[root@graylog ~]# createrepo -d /opt/rpm/
Spawning worker 0 with 36 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

  ##之後會在該目錄下生成一個 目錄,其中是我們構建完yum倉庫的資訊
[root@graylog ~]# ls /opt/rpm/repodata/
5aac96c5eeec4bcac4711a1477e493b6ba0db8d832815e85c03d6a4f0ee65228-other.xml.gz
76d8434b71546529a5b940ae751bebb378d5d090e5ca7d77d7cf9c09ce7d08fb-filelists.sqlite.bz2
9272d004c79884094a81f66a096acc62099374f5392eabec3e19c1559603a233-primary.xml.gz
9bcfa36ad4df6bb60f7cb7d0eddc5e94e761dab60c839b6500015d07161c393e-primary.sqlite.bz2
c8be56b036a57429f208d31a7907587662bc85a6c0bad2c1387b1f6d0c69ea28-filelists.xml.gz
e40763b7002928663359a73b1c7d090776dd7efc6ecd19fed2b58823d978dbbd-other.sqlite.bz2
repomd.xml

  ##之後我們清除一下現在的yum快取
[root@graylog ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: local
Cleaning up list of fastest mirrors
Other repos take up 349 M of disk space (use --verbose for details)

    ##然後重新建立快取
[root@graylog ~]# yum makecache
Loaded plugins: fastestmirror
Determining fastest mirrors
local | 2.9 kB 00:00:00
(1/3): local/filelists_db | 16 kB 00:00:00
(2/3): local/other_db | 19 kB 00:00:00
(3/3): local/primary_db | 30 kB 00:00:00
Metadata Cache Created

到目前我們的yum倉庫就建立完成了,可以測試一下準備的這些rpm包是否可以正常安裝,我這裡有httpd服務的包,先試下:

    ##進行httpd服務的安裝
[root@graylog ~]# yum install -y httpd

    ##啟動服務,看看是否可以,嘗試訪問一下,沒啥問題
[root@graylog ~]# systemctl start httpd
[root@graylog ~]# systemctl status httpd
[root@graylog ~]# curl 本機IP地址

此時代表我們構建的yum倉庫是沒有問題的。

接下來是更新,我們有的時候會不僅一次使用到本地的yum倉庫來安裝軟體,要是遇到需要更新的情況,還需要我們重新操作一下;

我們需要的是更新我們構建yum倉庫的資訊,就是需要我們重新的 createrepo 一次,並重新整理快取;

之前我沒有將準備的nginx的包放入目錄,在沒更新的狀態下是找不到該包進行安裝的,那麼我們來更新一下,並進行安裝看看:

    ##嘗試安裝一下nginx,失敗了,找不到
[root@graylog ~]# yum install -y nginx
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Nothing to do

    ##將額外更新的rpm包放入yum倉庫目錄下,然後確認下,這時原來36個包變成了44個包,+1是有一個 repodata 目錄
[root@graylog ~]# ls /opt/rpm/ | wc -l
45

    ##之後重新用 createrepo 執行一遍,發現資訊更新了
[root@graylog ~]# createrepo -d /opt/rpm/
Spawning worker 0 with 44 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

    ##此時去安裝是失敗的,我們還需要更新快取,先進行清除
[root@graylog ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: local
Cleaning up list of fastest mirrors
Other repos take up 349 M of disk space (use --verbose for details)

    ##然後重新建立快取
[root@graylog ~]# yum makecache
Loaded plugins: fastestmirror
Determining fastest mirrors
local                                                                | 2.9 kB  00:00:00     
(1/3): local/filelists_db                                            |  17 kB  00:00:00     
(2/3): local/other_db                                                |  22 kB  00:00:00     
(3/3): local/primary_db                                              |  34 kB  00:00:00     
Metadata Cache Created

    ##這時我們再試一下,安裝成功
[root@graylog ~]# yum install -y nginx

    ##啟動服務訪問一下,不過按照我的步驟,之前的httpd服務要關閉,否則爭用80埠,不能啟動
[root@graylog ~]# systemctl stop httpd
[root@graylog ~]# systemctl start nginx
[root@graylog ~]# systemctl status nginx
[root@graylog ~]# curl 本機IP地址

至此我們搭建yum倉庫,並在後續更新yum倉庫 的操作就已經完成了。

對於工作上很多小的,認為很簡單的東西,總是不用,時間長,突然用到的時候,全忘了,適當的作記錄還是有必要的。