yum的配置和使用總結以及yum私有倉庫的創建


軟件包管理

一、c語言程序的構建過程

1.程序源代碼 --> 預處理 --> 編譯 --> 匯編 --> 鏈接--> 可執行程序

  • 開放源碼:就是程序碼,文本格式的源代碼,寫給人類看的程序語言,但機器並不認識,所以無法執行;
  • 編譯器:將程序碼轉譯成為機器看的懂得語言,就類似翻譯者的角色,生成二進制文件;
  • 鏈接:在Linux上使用ld工具,將o文件和所需的庫文件鏈接起來組成一個可正常工作的可執行程序。鏈接了庫文件之后就可以發起一些系統調用。
    • 靜態編譯:.a
      • 把程序對應的依賴庫復制一份到包
      • libxxx.a
      • 嵌入程序包
      • 升級難,需重新編譯
      • 占用較多空間,遷移容易
    • 動態編譯:.so
      • 只把依賴加做一個動態鏈接
      • libxxx.so
      • “連接指向”
      • 占用較少空間,升級方便
      • 指針指向,軟鏈接
  • 可執行文件:經過編譯器變成二進制程序后,機器看的懂所以可以執行的文件。

2.二進制程序的組成部分:二進制文件、庫文件、配置文件、幫助文件
查看二進制程序所依賴的庫文件:
ldd /PATH/TO/BINARY_FILE

3.包命名規則:

源代碼:name-VERSION.tar.gz | bz2 | xz; VERSION: major.minor.release rpm包:name-VERSION-release.arch.rpm 例:bash-4.2.46-19.el7.x86_64.rpm VERSION: major.minor.release release:release.OS 常見的arch: x86: i386, i486, i586, i686 x86_64: x64, x86_64, amd64 powerpc: ppc 跟平台無關:noarch

一般,源碼都是打包壓縮過的文件,其通常以“.gz”、“.bz2”、“.xz”結尾,源碼包中包含了源碼,還包含了一些有助於制作二進制rpm的文件;rpm包一般以“rpm”結尾,都是已經編譯完成的,安裝rpm包的過程實際上就是將包中的文件復制到Linux上,有可能還會在復制文件的前后執行一些命令,如創建一個必要的用戶,刪除非必要文件等。

4.包管理器:

  • debian:deb文件, dpkg包管理器
  • redhat: rpm文件, rpm包管理器
  • rpm: Redhat Package Manager
    • RPM Package Manager

5.包的分類與拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 開發子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它子包

注意:包之間可能存在依賴關系,甚至循環關系;

解決依賴包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具

6.獲取程序包的途徑:

(1) 系統發版的光盤或官方的服務器;
CentOS鏡像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com

(2) 項目官方站點

(3) 第三方組織:
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL推薦,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/

注意:第三方包要檢查其合法性、完整性!!

7.庫文件
一些查看命令:

ldd  /PATH/TO/BINARY_FILE    # 查看二進制程序所依賴的庫文件 ldconfig -p # 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系

8.程序的配置文件和緩存文件:
配置文件:
/etc/ld.so.conf 全部放到一個文件中,或
/etc/ld.so.conf.d/*.conf 此文件目錄下.cong結尾的文件,方便一個程序寫一個配置文件

緩存文件:
/etc/ld.so.cache

二、rpm管理器

1.程序包管理器:

功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作

包文件組成 (每個包獨有)
RPM包內的文件
RPM的元數據,如名稱,版本,依賴性,描述等
安裝或卸載時運行的腳本

數據庫(公共):/var/lib/rpm
程序包名稱及版本
依賴關系
功能說明
包安裝后生成的各文件路徑及校驗碼信息

ll  /var/lib/rpm/
total 75612   
-rw-r--r--. 1 root root  5521408 Oct 23 18:48 Basenames
-rw-r--r--. 1 root root    12288 Oct 23 18:47 Conflictname
-rw-r--r--. 1 root root    73728 Dec  4 11:57 __db.001
-rw-r--r--. 1 root root   229376 Dec  4 11:57 __db.002
-rw-r--r--. 1 root root  1318912 Dec  4 11:57 __db.003
-rw-r--r--. 1 root root   753664 Dec  4 11:57 __db.004
# 這個rpm包數據庫文件夾中包含着現有已經安裝的包的各種信息,包括安裝版本,安裝時間、升級時間、卸載時間等等非常重要,最好備份

2.rpm命令的使用

CentOS系統上使用rpm命令管理程序包:
安裝、卸載、升級、查詢、校驗、數據庫維護。

2.1 安裝

rpm {-i|--install} [install-options] PACKAGE_FILE… # option -v: verbose -vv: -h: 以#顯示程序包管理執行進度 rpm -ivh PACKAGE_FILE ... # 安裝某程序包 [install-options] --test: 測試安裝,但不真正執行安裝,即dry run模式 --nodeps:忽略依賴關系 --replacepkgs | replacefiles # 對於已經安裝過的包,如果不經過卸載,只是刪除其一些文件,就會導致這個程序無法使用,我們再重新安裝這個程序包時,會顯示此包已經安裝,是因為在/var/lib/rpm這個文件中有該程序的安裝記錄。所以這種情況下要想重新安裝這個程序包就需要rpm -ivh --replacepkgs 這個選項! --nosignature: 不檢查來源合法性 --nodigest:不檢查包完整性 --noscripts:不執行程序包腳本 %pre: 安裝前腳本; --nopre %post: 安裝后腳本; --nopost %preun: 卸載前腳本; --nopreun %postun: 卸載后腳本; --nopostun

注意:

我們在rpm安裝時截圖中紅框位置顯示nokey是因為我們沒有導入RPM-GPG-KEY-CentOS-7這個檢查工具來檢查其合法性,導入后即可顯示
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 (rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 (centos6))導入公鑰即可檢查,這樣在安裝來源合法的程序包時就不在顯示nokey。

2.2 升級

rpm {-U|--upgrade}  [install-options]  PACKAGE_FILE...
upgrade  # 安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝” rpm {-F|--freshen} [install-options] PACKAGE_FILE... freshen # 安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則不執行升級操作 rpm -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ... --oldpackage:降級 --force: 強制安裝

注意:

(1) 不要對內核做升級操作;Linux支持多內核版本並存,因此,對直接安裝新版本內核;

(2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件並不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留。

2.3查詢

rpm {-q|--query} [select-options] [query-options]
[select-options]
    -a: 所有包 -f: 查看指定的文件由哪個程序包安裝生成 -p rpmfile:針對尚未安裝的程序包文件做查詢操作 --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供 --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴 [query-options] --changelog:查詢rpm包的changelog -c: 查詢程序的配置文件 -d: 查詢程序的文檔 -i: information -l: 查看指定的程序包安裝后生成的所有文件 --scripts:程序包自帶的腳本 --provides: 列出指定程序包所提供的CAPABILITY -R: 查詢指定的程序包所依賴的CAPABILITY rpm2cpio 包文件|cpio –itv 預覽包內文件 rpm2cpio 包文件|cpio –id “*.conf” 釋放包內文件

2.4 卸載

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

注意:由於我們在安裝程序包是會同時安裝許多依賴文件,而這種卸載方法只是卸載程序本身,並不同時將依賴文件卸載,所以要想完整卸載的話需要用yum

yum history # 查看歷史記錄,找到是第幾部的操作 yum history undo # # 表示對歷史操作中的第#想進行反操作

2.5 包校驗

rpm {-V|--verify} [select-options] [verify-options] # option S file Size differs M Mode differs (includes permissions and file type) 5 digest (formerly MD5 sum) differs D Device major/minor number mismatch L readLink(2) path mismatch U User ownership differs G Group ownership differs T mTime differs P capabilities differ

導入所需要公鑰
rpm -K|checksig rpmfile 檢查包的完整性和簽名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*”

三、yum

yum工具通過倉庫的方式簡化rpm包的管理。它從倉庫中搜索相關的軟件包,並自動下載和解決軟件包的依賴性,非常方便。yum底層依賴rpm,如果把rpm卸載,那么yum也不能用了。

老王說:
利用yum的主要問題:
(1)配置文件格式語法錯誤;
(2)緩存問題

yum客戶端配置文件:

/etc/yum.conf  # 為所有倉庫提供公共配置 /etc/yum.repos.d/*.repo # 為倉庫的指向提供配置 [root@CentOS7 ~]#cat /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever # 緩存文件夾路徑 $$basearch # cpu架構,X86_64等 $releasever # 系統版本 keepcache=0 # 0代表不緩存rpm包,下載安裝后默認刪除;1為緩存rpm安裝包 debuglevel=2 # logfile=/var/log/yum.log # yum安裝的日志文件 exactarch=1 # obsoletes=1 gpgcheck=1 # 默認1代表安裝包的完整性合法性為nokey是直接拒絕安裝 plugins=1 installonly_limit=5 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum distroverpkg=centos-release # PUT YOUR REPOS HERE OR IN separate files named file.repo # in /etc/yum.repos.d

自己搭建一個yum配置文件

vim /etc/yum.repo.d/base.repo    # 兩個必須:1必須在/etc/yum.repo.d/這個文件夾下;2.文件名必須以.repo結尾;一般習慣將光盤建的yum庫命名為base [base] # 不允許有空格 name=cdrom baseurl=file:///mnt/cdrom/ # 一般是repodata的父目錄,文件路徑不允許有空格,支持http:// https:// ftp:// file:// # 此地址可以添加多個地址,在多個地址的情況下,可以將全部地址保存在一個文本文件中,而此處的baseuer換成 mirrorlist=file:// 文件路徑 gpgcheck=0 # 0默認為不進行gpgcheck檢查完整性 以上這些是必須項, ----------------------------------------------------- 還可以添加: gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-7 # 直接將光盤中的公鑰導入,也可以換成 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # 直接導入配置文件中的公鑰;此項不加的話,gpgcheck=0; enabled=0 # 默認為1,0為臨時禁用該倉庫 failovermethod={roundrobin|priority} # 這個是在baseurl包含多個地址的情況下使用 roundrobin # 意為隨機挑選,默認值 priority # 按順序訪問 cost=1000 # 存在多個倉庫的情況下,越少優先值越高 

也可以通過命令直接生成該配置文件:

yum-config-manager --add-repo=BASEURL # 即自動生成該網址的repo配置文件 yum-config-manager --disable “倉庫名" # 禁用倉庫 yum-config-manager --enable “倉庫名” # 啟用倉庫 

搭建完yum配置文件即可使用yum安裝了。

[aliyunepel] name=aliyun-epel baseurl=https://mirrors.aliyun.com/epel/7/x86_64/ gpgcheck=0 # 這樣就又搭建了一個阿里雲的epel的yum庫

yum的其他一些命令

yum install  PACKAGES    # yum安裝程序包 yum reinstall package1 [package2] [...] # 重新安裝 yum remove PACKAGES # yum卸載程序包 yum remove | erase package1 [package2] [...] yum repolist # 可查看搭建的yum庫有多少個安裝包。 yum repolist all # 顯示所有的倉庫情況 yum clean # 清除yum緩存 cat /var/log/yum.log # 查看yum安裝報的日志文件,包括安裝、卸載、更新等 yum list # 顯示所有庫中所有的包,前帶@說明已經安裝 yum list *ftp* # 支持文件名通配符,列出包含ftp的程序包 yum list [all | glob_exp1] [glob_exp2] [...] # 列出包,支持文件名通配符 yum list {available|installed|updates} [glob_exp1] # 列出可用的、可安裝的、能升級的 yum update [package1] [package2] [...] # 升級,一般不建議升級 yum downgrade package1 [package2] [...] # 降級 yum check-update # 檢查可用升級 yum info [...] # 查詢包信息 yum provides | whatprovides feature1 [feature2] # 查看指定的特性(可以是某文件)是由哪個程序包所提供 yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] # 清除/var/cache/yum/$basearch/$releasever緩存,清楚類型指定,all為所有 yum makecache # 構建緩存 yum search string1 [string2] [...] # 以指定的關鍵字搜索程序包名及summary信息 yum deplist package1 [package2] [...] # 查看指定包所依賴的capabilities 

Alt text
如圖所示,兩個yum庫分別有多少個包均有顯示

注意:yum不允許同時在多個終端同時安裝

yum的repo配置文件中可用的變量:
$releasever: 當前OS的發行版的主版本號
$arch: 平台,i386,i486,i586,x86_64等
$basearch:基礎平台;i386, x86_64
$YUM0-$YUM9:自定義變量

比如:
實例:(針對不同版本的系統)
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i384

對於repo文件我們也可以參考阿里雲,
http://mirrors.aliyun.com/repo/
將其的配置格式直接作為我們自己的配置。
可通過:
wget url....下載配置文件至當前目錄

查看yum歷史事務:

yum history [info|list| packages-list| packages-info| summary | addon-info | redo | undo | rollback | new|sync| stats] yum history # 查看歷史記錄 yum history info 6 # 查看yum歷史記錄第六條的詳細信息 yum history undo 6 # 反向操作yum歷史記錄第六條的操作

利用yum安裝rpg包:

yum install rpmfile1 [rpmfile2] [...] # yum update rpmfile1 [rpmfile2] [...]

利用yum安裝包組

 yum groupinstall group1 [group2] [...] yum groupupdate group1 [group2] [...] yum grouplist [hidden] [groupwildcard] [...] yum groupremove group1 [group2] [...] yum groupinfo group1 [...] yum grouplist # 查看包組列表 

yum的一些命令選項:

yum的命令行選項:
    --nogpgcheck:禁止進行gpg check -y: 自動回答為“yes” -q:靜默模式 yum -y -q :需要分開寫 --disablerepo=repoidglob:臨時禁用此處指定的repo,repo配置文件中[]中的名字 --enablerepo=repoidglob:臨時啟用此處指定的repo --noplugins:禁用所有插件

補充:

systemctl  stop  firewalld   # 關閉防火牆 systemctl disable firewalld # 關閉開機自動啟動防火牆

四、實驗

實驗1:

當知道是哪個庫文件被刪除(以刪除/lib64/libc.so.6這個庫文件為例),導致無法使用命令或系統不能使用時,這么修復:(以CentOS 7為例)
第一步:重啟,從光盤開機,有的系統是開機f2修改,有的是f12,還有的是Esc鍵;
第二步:進入此界面,選擇第三項Troubleshooting進入

再選擇第二項rescure centos system ,進入救援模式;

再選擇第一項continue進入bash shell界面。

通過df命令可以看到,根目錄已經變成/mnt/sysimage;所以,我們在cp丟失的文件時要使用相對路徑。

!!注意:libc.so.6 這個文件是個軟鏈接,也就是說我們實驗時cp到data目錄下的庫文件是個軟鏈接,並不是真正的庫文件,所以這樣的話我們再重新創建個軟鏈接即可。

ln -s libc-2.17.so libc.so.6
(注意,此處要切換至/mnt/sysimage/lib64下,使用相對路徑進行創建軟鏈接)

重啟,正常!(注意,將從光盤啟動改回從硬盤啟動)

實驗2:

像centos6那樣,可以直接依靠/misc/cd 打開光盤文件
第一步:yum install autufs這個包
第二步:systemctl start autofs 打開autofs服務
(注意:centos特有的,可以通過rpm -ql autofs 查看到其有個服務文件,所以需要命令打開它)

第三步:再通過systemctl enable autofs命令讓其開機自動啟動服務
此時,centos7 也可以通過 cd /misc/cd 切換至光盤

實驗3:

用centos7的安裝光盤為centos6的客戶機搭建一個yum庫
第一步:安裝並開啟httpd

yum install httpd      # 安裝httpd systemctl stop firewalld # 關閉防火牆 systemctl disable filewalld # 關閉自動啟動防火牆

打開瀏覽器,在地址欄輸入ip地址,看是否可以連接,如圖所示已經連接成功

第二步:

cd   /var/www/html/ # 切換至該文件夾 mkdir -p epel/{6,7}/x86_64/ # 模仿阿里雲的epel網址格式分別創建6和7兩個文件夾

第三步:掛載光盤

mount   /dev/sr0 /var/www/html/epel/7/x86_64/ # 掛載硬盤至指定目錄,如果是想在centos7上使用這個庫就用7的文件夾 mount /dev/sr0 /var/www/html/epel/6/x86_64/ # 如果是想在centos6上使用這個庫就用6的文件夾

如圖所示,已經可以在瀏覽器中查看到我們掛載的光盤的內容

第四步:后面的就修改 /etc/yum.con.d/ 下的配置文件按正常操作即可。

風雨路遙同珍重,不負塵緣不負卿


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM