開源軟件最初只提供了.tar.gz的打包的源碼文件,用戶必須自已編譯每一個想在GNU/Linux上運行的軟件。爲了更加便利的方法來管理這些軟件,出現了包管理系統。html
軟件包管理器功能:node
將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,利用包管理器能夠方便快捷地實現程序 包的安裝、卸載、查詢、升級和校驗等管理操做mysql
主流的程序包管理器linux
源代碼打包文件命名:c++
name-VERSION.tar.gz|bz2|xzgit
VERSION: major.minor.releasegithub
rpm包命名方式:sql
常見的arch:數據庫
x86: i386, i486, i586, i686ubuntu
x86_64: x64, x86_64, amd64
跟平臺無關:noarch
1)包文件組成 (每一個包獨有)
2)數據庫(公共):/var/lib/rpm
1)系統發版的光盤或官方網站
CentOS鏡像:
https://www.centos.org/download/
Ubuntu 鏡像:
http://cdimage.ubuntu.com/releases/
2)第三方組織提供
https://fedoraproject.org/wiki/EPEL
https://mirrors.aliyun.com/epel/?spm=a2c6h.13651104.0.0.3bc47dfaZpesAr
3)軟件項目官方站點
http://yum.mariadb.org/10.4/centos8-amd64/rpms/
http://repo.mysql.com/yum/mysql-8.0-community/el/8/x86_64/
4)搜索引擎
5)本身製做
將源碼文件,利用工具,如:rpmbuild,fpm等工具製做成rpm包文件
格式:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
選項:
安裝選項【install-options】
注意:因爲rpm命令安裝包大部分會產生包依賴問題,因此通常不使用rpm安裝包
格式:
升級 rpm {-U|--upgrade} [install-options] PACKAGE_FILE... rpm {-F|--freshen} [install-options] PACKAGE_FILE... #upgrade:安裝有舊版程序包,則「升級」,若是不存在舊版程序包,則「安裝」 #freshen:安裝有舊版程序包,則「升級」, 若是不存在舊版程序包,則不執行升級操做 降級 rpm {--oldpackage} [install-options] PACKAGE_FILE...
注意:1.不要對內核作升級操做;Linux支持多內核版本並存,所以直接安裝新版本內核
2.若是原程序包的配置文件安裝後曾被修改,升級時,新版本提供的同一個配置文件不會直接覆蓋老 版本 的配置文件,而把新版本文件重命名(FILENAME.rpmnew)後保留
格式:
rpm {-q|--query} [select-options] [query-options]
【select-options】
【query-options】
和CAPABILITY相關
範例:
[root@centos8 data]# rpm -qf /etc/skel/.bashrc bash-4.4.19-10.el8.x86_64 [root@centos8 data]# rpm -ql tree /usr/bin/tree /usr/lib/.build-id /usr/lib/.build-id/d8 /usr/lib/.build-id/d8/6d516d7cb07fb9334cb268af808119e33a5ac5 /usr/share/doc/tree /usr/share/doc/tree/LICENSE /usr/share/doc/tree/README /usr/share/man/man1/tree.1.gz [root@centos8 data]# rpm -qd tree /usr/share/doc/tree/LICENSE /usr/share/doc/tree/README /usr/share/man/man1/tree.1.gz [root@centos8 data]# rpm -q --scripts bash postinstall scriptlet (using <lua>): nl = '\n' sh = '/bin/sh'..nl ... [root@centos8 data]# rpm -q --whatrequires tree no package requires tree
格式:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
注意:當包卸載時,對應的配置文件不會刪除, 以FILENAME.rpmsave形式保留
範例:強行刪除rpm包,並恢復
[root@centos7 ~]#rpm -e rpm --nodeps #重啓進入rescue模式 #mkdir /mnt/cdrom #mount /dev/sr0 /mnt/cdrom #rpm -ivh /mnt/cdrom/Packages/rpm-4.11.3-40.el7.x86_64.rpm --root=/mnt/sysimage #reboot
在安裝包時,系統也會檢查包的來源是不是合法的
本身校驗步驟:
1.導入所須要公鑰 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #查詢密鑰是否導入成功 rpm -qa 「gpg-pubkey*」 2.檢查包的完整性和簽名 rpm -K|--checksig rpmfile
範例:
[root@centos8 ~]#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial [root@centos8 rpm-gpg]#rpm -K /misc/cd/AppStream/Packages/httpd-2.4.37- 16.module_el8.1.0+256+ae790463.x86_64.rpm /misc/cd/AppStream/Packages/httpd-2.4.37- 16.module_el8.1.0+256+ae790463.x86_64.rpm: digests signatures OK [root@centos8 ~]#rpm -qa "gpg-pubkey*" gpg-pubkey-8483c65d-5ccc5b19
軟件在安裝時,會將包裏的每一個文件的元數據,如:大小,權限,全部者,時間等記錄至rpm相關的數 據庫中,能夠用來檢查包中的文件是否和當初安裝時有所變化
格式:
rpm {-V|--verify} [select-options] [verify-options]
範例:
[root@centos8 data]# vim /etc/issue [root@centos8 data]# cat /etc/issue 111 \S Kernel \r on an \m [root@centos8 data]# rpm -V centos-release S.5....T. c /etc/issue [root@centos8 data]# vim /etc/issue [root@centos8 data]# rpm -V centos-release .......T. c /etc/issue
先在yum服務器上建立 yum repository(倉庫),在倉庫中事先存儲了衆多rpm包,以及包的相關的 元數據文件(放置於特定目錄repodata下),當yum客戶端利用yum/dnf工具進行安裝時包時,會自動 下載repodata中的元數據,查詢遠數據是否存在相關的包及依賴關係,自動從倉庫中找到相關包下載並 安裝。
yum服務器的倉庫能夠多種形式存在:
yum客戶端配置文件:
- /etc/yum.conf #爲全部倉庫提供公共配置 - /etc/yum.repos.d/*.repo: #爲每一個倉庫的提供配置文件 - 幫助參考: man 5 yum.conf
yum的repo配置文件中可用的變量:
- $releasever: 當前OS的發行版的主版本號,如:8,7,6 - $arch: CPU架構,如:aarch64, i586, i686,x86_64等 - $basearch:系統基礎平臺;i386, x86_64 - $contentdir:表示目錄,好比:centos-8,centos-7 - $YUM0-$YUM9:自定義變量
範例:配置文件
[root@centos8 ~]# cat /etc//yum.conf [main] gpgcheck=1 #安裝包前合法性校驗 installonly_limit=3 #容許同時安裝包的個數 clean_requirements_on_remove=True #卸載時是否刪除不使用的包 best=True #升級時自動選擇最新版本,即便缺乏包的依賴 skip_if_unavailable=False # [root@centos8 yum.repos.d]# cat /etc/yum.repos.d/CentOS-Base.repo [BaseOS] #倉庫名稱 name=CentOS-$releasever - Base #倉庫描述 #倉庫路徑 baseurl=http://mirrors.cloud.aliyuncs.com/$contentdir/$releasever/BaseOS/$basearch/os/ gpgcheck=1 #安裝包前合法性校驗 enabled=1 #是否啓用倉庫 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial #校驗文件位置
範例:爲centos8配置其餘兩個經常使用源(epel和Extras源)
[root@centos8 yum.repos.d]# vim CentOS-epel.repo [epel] name=Extra Packages for Enterprise Linux 8 - $basearch baseurl=http://mirrors.cloud.aliyuncs.com/epel/8/Everything/$basearch failovermethod=priority enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 [extras] name=CentOS-$releasever - Extras baseurl=http://mirrors.cloud.aliyuncs.com/$contentdir/$releasever/extras/$basearch/os/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
yum-config-manager命令
用於管理yum倉庫的配置文件
格式:
[root@centos8 ~]# yum provides yum-config-manager Last metadata expiration check: 1:31:04 ago on Thu 21 Jan 2021 10:29:03 AM CST. yum-utils-4.0.17-5.el8.noarch : Yum-utils CLI compatibility layer Repo : BaseOS Matched from: Filename : /usr/bin/yum-config-manager #增長倉庫 yum-config-manager --add-repo URL或file #禁用倉庫 yum-config-manager --disable 「倉庫名" #啓用倉庫 yum-config-manager --enable 「倉庫名」
格式:
yum [options] <command> [<args>...]
常見選項:
格式:
yum repolist [all|enabled|disabled] #顯示倉庫列表,all會列出沒啓用的倉庫 yum list [all | glob_exp1] [glob_exp2] [...] #顯示程序列表,all會列出沒安裝的包
範例:
[root@centos8 ~]# yum repolist repo id repo name AppStream CentOS-8 - AppStream BaseOS CentOS-8 - Base data created by dnf config-manager from file:///data epel Extra Packages for Enterprise Linux 8 - x86_64 extras CentOS-8 - Extras [root@centos8 ~]# yum repolist all repo id repo name status AppStream CentOS-8 - AppStream enabled AppStream-source CentOS-8 - AppStream Sources disabled [root@centos8 ~]# yum list all tree Last metadata expiration check: 2:21:49 ago on Thu 21 Jan 2021 10:29:03 AM CST. Installed Packages tree.x86_64 1.7.0-15.el8 @anaconda [root@centos8 ~]# yum list all httpd Last metadata expiration check: 2:22:00 ago on Thu 21 Jan 2021 10:29:03 AM CST. Available Packages httpd.x86_64 2.4.37-30.module_el8.3.0+561+97fdbbcc AppStrea
格式:
yum install package1 [package2] [...] yum reinstall package1 [package2] [...] #從新安裝
範例:
[root@centos8 data]# yum install [url] Install a package directly from a URL [root@centos8 data]# yum -y install tree ... Installed: tree-1.7.0-15.el8.x86_64 Complete!
格式:
yum remove | erase package1 [package2] [...]
格式:
yum update [package1] [package2] [...] yum downgrade package1 [package2] [...] (降級) yum check-update(檢查可用升級)
範例:
[root@centos7 ~]#yum install samba --disablerepo=updates [root@centos7 ~]#yum update samba #更新全部能夠更新的軟件 [root@centos7 ~]# yum update
3.3.5 查詢
格式:
#查看程序包information: yum info [...] #查看指定的特性(能夠是某文件)是由哪一個程序包所提供: yum provides | whatprovides feature1 [feature2] [...] #查看指定包所依賴的capabilities: yum deplist package1 [package2] [...]
範例:
#注意要寫文件全路徑才能查詢到 [root@centos8 data]# yum provides vsftpd.conf Last metadata expiration check: 2:51:12 ago on Thu 21 Jan 2021 01:31:05 PM CST. Error: No Matches found [root@centos8 data]# yum provides vsftp.conf Last metadata expiration check: 2:50:03 ago on Thu 21 Jan 2021 01:31:05 PM CST. Error: No Matches found [root@centos8 data]# yum provides /etc/vsftpd/vsftpd.conf Last metadata expiration check: 2:50:58 ago on Thu 21 Jan 2021 01:31:05 PM CST. vsftpd-3.0.3-32.el8.x86_64 : Very Secure Ftp Daemon Repo : AppStream Matched from: Filename : /etc/vsftpd/vsftpd.conf [root@centos8 data]# yum info tree Last metadata expiration check: 2:52:35 ago on Thu 21 Jan 2021 01:31:05 PM CST. Installed Packages Name : tree Version : 1.7.0 Release : 15.el8 Architecture : x86_64 Size : 109 k Source : tree-1.7.0-15.el8.src.rpm Repository : @System From repo : BaseOS Summary : File system tree viewer URL : http://mama.indstate.edu/users/ice/tree/ License : GPLv2+ Description : The tree utility recursively displays the contents of directories in a : tree-like format. Tree is basically a UNIX port of the DOS tree : utility. [root@centos8 data]# yum deplist httpd Last metadata expiration check: 2:54:15 ago on Thu 21 Jan 2021 01:31:05 PM CST. package: httpd-2.4.37-30.module_el8.3.0+561+97fdbbcc.x86_64 dependency: /bin/sh provider: bash-4.4.19-12.el8.x86_64 dependency: /etc/mime.types provider: mailcap-2.1.48-3.el8.noarch dependency: httpd-filesystem ...
格式:
#清除目錄/var/cache/yum/緩存 yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] #構建緩存 yum makecache
範例:
[root@centos8 data]# du -sh /var/cache/dnf/ 41M /var/cache/dnf/ [root@centos8 data]# yum clean all 29 files removed [root@centos8 data]# du -sh /var/cache/dnf/ 1.3M /var/cache/dnf/ [root@centos8 data]# du -sh /var/cache/dnf/ 1.3M /var/cache/dnf/ [root@centos8 data]# yum makecache ... Metadata cache created. [root@centos8 data]# du -sh /var/cache/dnf/ 41M /var/cache/dnf/
yum 執行安裝卸載命令會記錄到相關日誌中
#CentOS 7之前版本日誌 /var/log/yum.log #CentOS 8 版本日誌 /var/log/dnf.rpm.log /var/log/dnf.log
命令
yum history [info|list|packages-list|packages-info|summary|addoninfo|redo|undo|rollback|new|sync|stats]
範例:
[root@centos8 data]# yum history ID | Command line | Date and time | Action(s) | Altered ----------------------------------------------------------------------------------------------- 22 | -y install tree | 2021-01-21 16:07 | Install | 1 21 | remove tree | 2021-01-21 16:07 | Removed | 1 20 | -y install yum-utils.noarch | 2021-01-21 12:03 | I, U | 13 [root@centos8 ~]#dnf history undo 22 -y Removed: dnf-utils-4.0.2.2-3.el8.noarch Complete! [root@centos8 ~]#dnf history redo 22 -y
範例:
#該例在內網環境採用光盤掛在方式建立yum源 [root@centos7 os]#mount /data/CentOS-7-x86_64-DVD-2009\(1\).iso /home/centos/7/os/ mount: /dev/loop0 寫保護,將以只讀方式掛載 [root@centos7 os]#ll 總用量 696 -rw-r--r-- 3 root root 14 10月 30 05:14 CentOS_BuildTag drwxr-xr-x 3 root root 2048 10月 27 00:25 EFI -rw-rw-r-- 21 root root 227 8月 30 2017 EULA -rw-rw-r-- 21 root root 18009 12月 10 2015 GPL drwxr-xr-x 3 root root 2048 10月 27 00:26 images drwxr-xr-x 2 root root 2048 11月 3 00:17 isolinux drwxr-xr-x 2 root root 2048 10月 27 00:25 LiveOS drwxr-xr-x 2 root root 673792 11月 4 19:30 Packages drwxr-xr-x 2 root root 4096 11月 4 19:35 repodata -rw-rw-r-- 21 root root 1690 12月 10 2015 RPM-GPG-KEY-CentOS-7 -rw-rw-r-- 21 root root 1690 12月 10 2015 RPM-GPG-KEY-CentOS-Testing-7 -r--r--r-- 1 root root 2883 11月 4 19:36 TRANS.TBL #配置倉庫服務器 [root@centos7 os]#mv CentOS7-Base-163.repo CentOS7-Base-163.repo.bak [root@centos7 os]cat Base.repo [root@centos7 os]#cat /etc/yum.repos.d/Base.repo [BaseOS] name=Centos7 BaseOS baseurl=file:///home/centos/7/os/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [root@centos7 os]#yum repolist 已加載插件:fastestmirror Loading mirror speeds from cached hostfile 源標識 源名稱 狀態 BaseOS Centos7 BaseOS 4,070 repolist: 4,070 #安裝httpd服務 [root@centos7 os]#yum -y install httpd [root@centos7 os]#service httpd start Redirecting to /bin/systemctl start httpd.service [root@centos7 ~]#cp -a /home/centos/7/os/* /var/www/html/centos/7/ #這裏倉庫服務端搭建完畢,修改本機倉庫baseurl [root@centos7 ~]#cat /etc/yum.repos.d/Base.repo [BaseOS] name=Centos7 BaseOS baseurl=http://172.16.60.243/centos/7/ [root@centos7 os]#yum repolist 已加載插件:fastestmirror Loading mirror speeds from cached hostfile 源標識 源名稱 狀態 BaseOS Centos7 BaseOS 4,070 repolist: 4,070 #客戶端配置yum文件測試 [root@localhost yum.repos.d]# yum -y install vim ... 做爲依賴被安裝: gpm-libs.x86_64 0:1.20.7-6.el7 vim-common.x86_64 2:7.4.629-7.el7 vim-filesystem.x86_64 2:7.4.629-7.el7 完畢
範例:下載extras源,製做私有yum源
#安裝下載工具 [root@centos8 ~]# yum -y install yum-utils #配置epel源 [root@centos8 ~]# cat /etc/yum.repos.d/CentOS-Base.repo ... [epelOS] name=CentOS-$releasever - epel #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra baseurl=https://mirrors.aliyun.com/epel/8/Everything/x86_64/ gpgcheck=0 enabled=1 #使用工具下載rpm包和metadata [root@centos8 ~]# yum reposync --repoid=epelOS --download-metadata -p /data #下載完成將包和metadata拷貝至http中www文件夾下,在按照以前方式配置epel倉庫便可
./configure
(1) 經過選項傳遞參數,指定安裝路徑、啓用特性等;執行時會參考用戶的指定以及Makefile.in文 件生成Makefile
(2) 檢查依賴到的外部環境,如依賴的軟件包
make 根據Makefile文件,會檢測依賴的環境,進行構建應用程序
make install 複製文件到相應路徑
解決安裝環境和依賴
第一步:運行 configure 腳本,生成Makefile 文件
獲取其支持使用的選項
第二步:make
第三步:make install
二進制程序目錄導入至PATH環境變量中
編輯文件/etc/profile.d/NAME.sh
導入幫助手冊
編輯/etc/man.config|man_db.conf文件,添加一個MANPATH
範例:編譯安裝 cmatrix
#準備:系統若是沒有相關依賴需先進行安裝 #gcc make autoconf ncurses-devel #1.下載cmatrix https://github.com/abishekvashok/cmatrix/releases #2.解壓 [root@centos8 data]# tar -xf cmatrix-v2.0-Butterscotch.tar -C /usr/local/ #3.配置安裝路徑 [root@centos8 /]# cd /usr/local/src/cmatrix/ [root@centos8 cmatrix]#./configure --prefix=/apps/cmatrix #4.編譯並安裝 [root@centos8 cmatrix]#make && make install #5.配置環境 [root@centos8 ~]#echo 'PATH=/apps/cmatrix/bin:$PATH' > /etc/profile.d/cmatrix.sh [root@centos8 ~]#. /etc/profile.d/cmatrix.sh #或者用軟連接實現 [root@centos8 ~]#ln -sv /apps/cmatrix/bin/cmatrix /usr/local/bin/ #6.實現man幫助 [root@centos8 ~]#vim /etc/man_db.conf MANDATORY_MANPATH /apps/cmatrix/share/man [root@centos8 ~]#man cmatrix