謝煙客---------Linux之程序包管理yum使用和編譯安裝
yum命令及倉庫創建與配置
YUM
原理
安裝、卸載、查詢、升級、檢查,本地緩存、重裝、降級、歷史、獲取幫助
倉庫
變量、事務、URL、開銷、鏡像、元數據存儲方式及組成
createrepo作用、命令、lftp命令
編譯安裝
目的
原理
開發工具及開發環境
編譯後的處理
獲取程序包源代碼的途徑
YUM
Redhat二次發行版 Yellow Dog Linux,上使用的yum(Yellowdog Update Modifier),由yellow dog 研發
yum命令的工作原理
1、接收用戶命令
2、yum扮演為客戶端,請求啟用的倉庫(yum.repos.d/*.repo)中URL對應的文件服務器,下載元數據(repodata),保存至緩存中。
3、yum命令分析元數據,找出將要安裝的程序包所依賴的程序包且在系統中沒有安裝的程序包列表,並向文件服務器請求下載程序包,保存至緩存中。
4、根據緩存中的程序包,先安裝被依賴的程序包。
5、安裝後,刪除程序包,保留元數據。
1、接收命令
2、請求下載repodata目錄中元數據校驗碼:repomd.xml文件
3、比對repomd.xml
相同:用本地的元數據
不相同:重復首次安裝過程
Yum作用
1、rpm前端管理工具,自動解決程序包安裝/卸載時的依賴關系。
2、C/S架構:C:yum程序所在的電腦,S:文件服務器
3、基於插件,提供眾多功能,工作機制或設計體系存在問題,安裝過程中半道中止時,下次重啟yum命令不能夠解決。
4、dnf命令能夠解決Yum命令存在的問題,使用方法基本同yum
5、yum支持proxy,color,ssl
yum命令
獲取幫助: man yum
獲取子命令的幫助:yum help [SUB_COMMAND]
yum [OPTIONS...] [SUB_COMMAND]
OPTIONS
-y 交互式詢問,自動回答為yes
-q 靜默模式,grep , xz , zip,不顯示程序包的依賴信息
--nogpgcheck
--disablerepo=REPO 倉庫中如果enabled=1,本次安裝忽略由REPO指定的倉庫
--enablerepo=REPO 倉庫中如果enabled=0,本次安裝啟用由REPO指定的倉庫
--noplugins 本次安裝禁用所有插件
使用示例 -y 1、不加-y [[email protected] ~]# yum install zsh 總下載量:2.4 M 安裝大小:5.6 M Is this ok [y/d/N]: 將交互式的顯示是否安裝 2、加-y [[email protected] ~]# yum install -y zsh 總下載量:2.4 M 安裝大小:5.6 M Downloading packages: -q 1、不加 [[email protected] ~]# yum remove zsh 已加載插件:fastestmirror 正在解決依賴關系 --> 正在檢查事務 ---> 軟件包 zsh.x86_64.0.5.0.2-25.el7 將被 刪除 --> 解決依賴關系完成 [[email protected] ~]# yum -q remove zsh ======================================================================================== Package 架構 版本 源 大小 ======================================================================================== 正在刪除: zsh x86_64 5.0.2-25.el7 @base 5.6 M 事務概要 ======================================================================================== 移除 1 軟件包 是否繼續?[y/N]: 依賴關系解決 2、加 [[email protected] ~]# yum -q remove zsh ======================================================================================== Package 架構 版本 源 大小 ======================================================================================== 正在刪除: zsh x86_64 5.0.2-25.el7 @base 5.6 M 事務概要 ======================================================================================== 移除 1 軟件包 是否繼續?[y/N]: --disablerepo=REPO [[email protected] ~]# yum repolist 已加載插件:fastestmirror Loading mirror speeds from cached hostfile * epel: mirrors.neusoft.edu.cn 源標識 源名稱 狀態 base CentOS-7 - Base - mirrors.aliyun.com 9,363 epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 11,769 repolist: 21,132 [[email protected] ~]# yum --disablerepo=base repolist 已加載插件:fastestmirror Loading mirror speeds from cached hostfile * epel: mirrors.neusoft.edu.cn 源標識 源名稱 狀態 epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 11,769 repolist: 11,769 --enablerepo=REPO [[email protected] ~]# yum --enablerepo=extras repolist 已加載插件:fastestmirror Loading mirror speeds from cached hostfile * epel: mirrors.neusoft.edu.cn * extras: mirrors.aliyun.com 源標識 源名稱 狀態 base CentOS-7 - Base - mirrors.aliyun.com 9,363 epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 11,769 !extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 449 repolist: 21,581 --noplugins 1、加載插件 [[email protected] ~]# yum install zsh-4.3.11-4.el6.centos.2.i686.rpm 已加載插件:fastestmirror 2、不加載插件 [[email protected] ~]# yum --noplugins install zsh-4.3.11-4.el6.centos.2.i686.rpm 正在檢查 zsh-4.3.11-4.el6.centos.2.i686.rpm: zsh-4.3.11-4.el6.centos.2.i686
SUB_COMMAND
安裝:install,localinstall,groupinstall
install package ...
localinstall package ... (centos 5安裝rpm必須)
groupinstall GROUP ...
1、直接給出: yum install gcc 默認安裝最新
2、給出版本: yum install gcc-1.2.3 指定安裝版本
1、查看當前系統版本: [[email protected] ~]# cat /etc/centos-release CentOS Linux release 7.3.1611 (Core) 說明安裝rpm文件,用install即可 2、安裝rpm文件 [[email protected] ~]# yum -y install zsh-5.0.2-25.el7_3.1.x86_64.rpm 已加載插件:fastestmirror 正在檢查 zsh-5.0.2-25.el7_3.1.x86_64.rpm: zsh-5.0.2-25.el7_3.1.x86_64 zsh-5.0.2-25.el7_3.1.x86_64.rpm 將被安裝 正在解決依賴關系 ....
重裝: reinstall
reinstall package ...
1、安裝程序包,報錯,已經安裝的程序包 [[email protected] ~]# yum -y install zsh-5.0.2-25.el7_3.1.x86_64.rpm 已加載插件:fastestmirror 正在檢查 zsh-5.0.2-25.el7_3.1.x86_64.rpm: zsh-5.0.2-25.el7_3.1.x86_64 zsh-5.0.2-25.el7_3.1.x86_64.rpm:不更新已安裝的軟件包。 錯誤:無須任何處理 2、重新安裝 [[email protected] ~]# yum -y reinstall zsh-5.0.2-25.el7_3.1.x86_64.rpm [[email protected] ~]# ls /etc/zsh* /etc/zshenv /etc/zshrc 不會生成其他文件
查詢:list/repolist grouplist info whatprovides
倉庫信息:安裝、可用
repolist [all|enabled|disabled] 默認為enabled(啟用和禁用)
程序包:
顯示: list [all|available|installed|extras|obsoletes|recent] [glob_expr1] ...
搜索:search STRING ... (STRING由Glob通配符和純文本字符組成)
查看指定CAPABILITY(文件/功能)由哪個程序包所提供
whatprovides CAPABILITY
包內
信息: info package ...
yum repolist 顯示啟用 倉庫id 倉庫name 程序包的數量 yum list 包名 release號 倉庫id yum search yum 搜索程序包及簡要信息 yum whatprovides /bin/ls 顯示功能或文件由哪個倉庫或程序包來提供 yum info yum 類似rpm -q -i 顯示程序包的內容 Name : yum Arch : noarch Version : 3.4.3 Release : 150.el7.centos Size : 5.5 M Repo : installed From repo : base Summary : RPM package installer/updater/manager URL : http://yum.baseurl.org/ License : GPLv2+ Description
卸載: remove,groupremove
remove package ...
groupremove GROUP ...
[[email protected] ~]# yum remove yum
升級: update,groupupdate
update package ...
groupupdate GROUP ...
1、檢查可用升級 [[email protected] ~]# yum --enablerepo=updates check-update 2、升級: [[email protected] ~]# yum --enablerepo=updates update
檢查升級: check-update
check-update
降級: downgrade
downgrade package ...
本地緩存
清理: clean [headers|packages|metadata|dbcache|plugins|expire-cache|all]
構建: makecache
1、清理程序包 yum clean packages 2、清理頭文件 yum clean headers 3、清理元數據 yum clean metadata 4、清理插件 yum clean plugins 5、清理過期緩存 yum clean expire-cache 6、清理所有 yum clean all 7、構建緩存 yum makecache
歷史: history [info|list|packages-list|summary|addon-info|redo|undo|rollback|new]
[[email protected] ~]# yum history #### 相當於yum history list Loaded plugins: fastestmirror ID | Command line | Date and time | Action(s) | Altered ------------------------------------------------------------------------------- 104 | install zsh-4.3.11-4.el6 | 2017-08-16 18:44 | Install | 1 103 | remove zsh | 2017-08-16 18:44 | Erase | 1 102 | -y reinstall zsh-5.0.2-2 | 2017-08-16 18:24 | Reinstall | 1 101 | install zsh-5.0.2-25.el7 | 2017-08-16 18:22 | Install | 1 100 | --nogpgcheck remove zsh | 2017-08-16 18:18 | Erase | 1 99 | install --nogpgcheck zsh | 2017-08-16 18:17 | Install | 1 98 | remove --nogpgcheck zsh | 2017-08-16 18:16 | Erase | 1 97 | install zsh-4.3.11-4.el6 | 2017-08-16 18:15 | Install | 1 96 | remove zsh | 2017-08-16 18:14 | Erase | 1 95 | --nogpgcheck install zsh | 2017-08-16 18:13 | Install | 1 94 | remove zsh | 2017-08-16 18:13 | Erase | 1 93 | install zsh-4.3.11-4.el6 | 2017-08-16 18:12 | Install | 6 < 92 | install -y zsh | 2017-08-16 18:08 | Install | 1 >< 91 | install createrepo | 2017-08-16 10:01 | Install | 56 >< 90 | install zsh | 2017-08-15 11:58 | Install | 40 >< 89 | install zsh-4.3.11-4.el6 | 2017-08-15 11:05 | Install | 2 > 88 | install mdadm | 2017-08-11 17:14 | Install | 2 87 | install tigervnc-server | 2017-07-31 22:24 | Install | 22 P< 86 | install libtermcap-devel | 2017-07-31 15:54 | Install | 1 >< 85 | -y install sendmail mail | 2017-07-31 15:49 | Install | 4 > Warning: RPMDB altered outside of yum. history list [[email protected] ~]# yum history summary Loaded plugins: fastestmirror Login user | Time | Action(s) | Altered ------------------------------------------------------------------------------- root <root> | Last day | E, I, R | 74 root <root> | Last week | Install | 44 root <root> | Last 3 months | E, I, U | 469 System <unset> | Last 6 months | I, U | 288 root <root> | Last 6 months | I, U | 206 history summary [[email protected] ~]# yum history info Loaded plugins: fastestmirror Transaction ID : 104 Begin time : Wed Aug 16 18:44:57 2017 Begin rpmdb : 100:e66a5c3b4265234fa222836dc108212efe773c48 End time : 18:44:58 2017 (1 seconds) End rpmdb : 101:d0ae5b619911556d572b14f912f0be9bdd0a9ba7 ** User : root <root> Return-Code : Success Command Line : install zsh-4.3.11-4.el6.centos.2.i686.rpm Transaction performed with: Installed rpm-4.11.3-21.el7.x86_64 @base Installed yum-3.4.3-150.el7.centos.noarch @base Installed yum-plugin-fastestmirror-1.1.31-40.el7.noarch @base Packages Altered: Install zsh-4.3.11-4.el6.centos.2.i686 @/zsh-4.3.11-4.el6.centos.2.i686 history info
版本: version
[[email protected] ~]# yum version ##rpmdb的版本 Loaded plugins: fastestmirror Warning: RPMDB altered outside of yum. Installed: 7/x86_64 101:db92c5ee1a848d4268e09e1b87f10e6808a76af1 Group-Installed: yum 15:396f07de8170b01350e3ca880e428c054b68573d version
配置文件
ini風格: [] 表示一個配置段
獲取幫助:
man的章節: 1: 普通用戶 8:管理員 2:syscall 3:libcall 4:設備 5:配置文件 6:game 7:雜項
1)查看幫助手冊所有的章節: whatis yum
2)查看幫助: man 5 yum.conf
獲取配置文件
rpm -q -c yum
yum.conf ## 所有倉庫通用的配置
yum.repos.d/*.conf ## 每個倉庫獨有的配置
配置文件格式
yum.conf [main] 表示主配置段 cachedir 緩存文件的位置(程序包+元數據信息) keepcache 緩存使用後是否保留 1保留 0刪除 debuglevel 調試級別 logfile yum安裝程序包的安裝日誌文件路徑 exactarch 是否精確平臺匹配 1是 0否 (當前rhl6,程序包rhl7能否安裝?) obsolutes 是否廢棄 gpgcheck 安裝包時是否檢查來源合法性及完整性 1檢查 (yum --nogpgcheck本次不檢查) plugins 是否支持插件機制 1支持 (yum --noplugins 本次關閉) installonly_limit 同時安裝幾個程序包 bugtrack_url 追蹤bug的URL distroverpkg 發行版 版本號 獲取位置: centos / redhat
[repositoryid] 倉庫ID:多個倉庫ID不能相同:base表示安裝光盤提供的基本安裝樹 name= 倉庫的名字 fail over method={roundrobin|priority} 故障轉移方法roundrobin: 隨機,priority: 從上而下 baseurl=URL repodata目錄所在的目錄:是倉庫指向的路徑 URL ... enabled={1|0} 默認啟用 gpgcheck={1|0} gpgkey=URL 指向能訪問密鑰文件的訪問路徑 repo_gpgcheck={1|0} 是否檢查元數據信息repodata enablegroups={1|0} 默認啟用,是否支持在此倉庫上使用組批量管理程序包 cost= 設定開銷:默認1000 keepalive 遠程為http1.1時,是否使用保持連接 bandwidth 帶寬 username 用戶名 password 密碼
用URL定義倉庫指向,baseurl=URL
URL: schema://服務器IP或域名/URL路徑(指向一個文件或目錄文件)
URL schema: ftp:// http:// https:// nfs:// file:///
變量:簡化、統一用戶配置yum源
$releasever: 當前OS的發行版的主版本號
$arch: 平臺
$basearch: 基礎平臺(x86平臺,統一識別為i386)
$YUM0-YUM9 自定義變量
開銷:服務器距離主機的距離,網絡的延遲
鏡像:同類倉庫出現多個時,yum基於插件,同一個倉庫指向一堆服務。不同站點同時提供同類倉庫
程序包選擇:
1、多個版本時,安裝新的版本。
2、多個鏡像站點,有相同的程序包,選擇cost低的服務器
倉庫配置及生成
倉庫配置
1、掛載光盤
2、配置倉庫
倉庫的生成
抽取rpm包中元數據(rpm內部文件的清單,CAPABILITY信息),制作repodata文件,放在repodata文件中及元數據的特征碼。用createrepo命令實現
createrepo命令
createrepo [OPTIONS...] DIR -o DIR 將repodata目錄輸出至 -x rpmfile ... 將目錄中的rpm包排除 -i rpmfile ... 只對目錄中的rpm包生成元數據及特殊碼 --basedir=DIR # createrepo -o /tmp /root /tmp/repodata repomd.xml 存放元數據的指紋信息
元數據的存儲的位置
壓縮後存儲於文件
sqllite接口存儲,便於查詢
1、清空目錄 [[email protected] ~]# ls /tmp [[email protected] ~]# 2、創建元數據 [[email protected] ~]# createrepo -o /tmp /root Spawning worker 0 with 5 pkgs Workers Finished Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs lSqlite DBs complete 3、查看元數據位置 [[email protected] ~]# ls /tmp repodata 4、查看元數據的組成 [[email protected] ~]# ls /tmp/repodata/ 24bff8236c43b8cce77ca9809b2b1e88bfd1e8fdfd74aef81ca79f93581ca228-primary.xml.gz 2f2effdd5cfd0a15456308e7f519c71981c5b6b0a022f1e727c753fd9d0b9257-filelists.sqlite.bz2 511b71f4b3d7d7a45a0578ca8e9afd8afaaed9ec6bc807245b47a70c3d0f02b1-other.sqlite.bz2 6fdabd5af8661afc931075fde9bc87f1859f78819fae135832918a2548ed7c9b-other.xml.gz 9c564d97a9a0ecd0b8d244b14c9cc22fffb62279989b041e66c8a2df1551c730-primary.sqlite.bz2 b0ab6c6ab987d2d530ca3faf2c7c3b725375a156df2130e77ccbc911b1ecc752-filelists.xml.gz repomd.xml ##以上數據的校驗碼信息
lftp命令
lftp> !STRING 執行shell命令 lftp> lcd DIR 本地執行切換目錄 lftp> mget file ... 批量下載文件
編譯安裝
目的:
1、提供的rpm功能不全
2、新功能,rpm包還沒有制作
原理: 源代碼 -- 預處理(預處理器) -- 編譯(編譯器gcc) -- 匯編代碼 -- 匯編(匯編器) -- 二進制指令 -- 鏈接(鏈接器)
源代碼命名: testapp-1.2.3-1.操作系統平臺.src.rpm
編譯:
靜態: 共享庫編譯進程序,運行時不調用共享庫,不鏈接,占內存。
共享庫:在編譯成二進制程序後,需要用鏈接器,鏈接庫。運行時,調用共享庫。節約內存。
源代碼中有多個文件間存在依賴關系,為了簡化難度提供項目管理工具
java源程序: maven
c,c++程序: make
C,C++代碼編譯的步驟:
1、獲取程序包源代碼的途徑
1)、官方自建的站點
apache.org(ASF:Apache Software Fundition)
mariadb.org
2)、代碼托管站點
SourceForge
Github.com
code.google.com
2、
1)、手動提供開發環境及工具
開發工具
autoconf 生成confiugre腳本
automake 生成Makefile.in文件
make
gcc
開發環境
glibc(Gnu C標準庫)、頭文件
2)、CentOS包組
6 "Development Tools" "Server Platform Development"
7 "Development Tools"
3、展開查看INSTALL,README幫助手冊:獲取安裝方式
1)只需要make
2)只需要make install
3) 直接使用
4、安裝後檢驗gcc是否安裝完畢: gcc version
5、編譯
獲取編譯可指定的選項: ./configure --help
1)指定選項
--prefix=DIR 程序默認安裝位置,便於卸載(只有此選項時,所有其他目錄均在DIR目錄下)
--sysconfdir=CONF_DIR 配置文件安裝
--disable-FATURE 默認啟用,不想用時,才禁用
--enable-FATURE 默認禁用,想用時,才啟用
--with-PACKAGE=PATH 指定當前程序包依賴的包及其所在的路徑
--without-PACKAGE 指定當前程序包不依賴的包
2)make 當./configure成功後,生成Makefile文件後,方可make
**註意Make後error信息**
3)make install 調用install命令,完成復制文件(dd,cp,install)
6、編譯後的處理
PATH變量輸出、庫路徑輸出、頭文件路徑輸出、man手冊路徑輸出
1)導出二進制程序至PATH環境變量
環境變量: profile類
全局: /etc/profile 、 /etc/profile.d/*.sh
個人: ~/.bash_profile
2)導出庫文件路徑
查看庫: ldconfig -p
配置庫: /etc/ld.so.conf 、 /etc/ld.so.conf.d/*.conf
重新生成緩存: ldconfig [-v]
查看程序依賴的庫:
# ldd path
3)導出頭文件
ln -sv /path/to/include /usr/include/NAME
4)導出幫助手冊
MANPATH /PATH/TO/man
不導出時:
man -M /PATH/TO/man COMMAND
本文出自 “Reading” 博客,請務必保留此出處http://sonlich.blog.51cto.com/12825953/1956834
謝煙客---------Linux之程序包管理yum使用和編譯安裝