1. 程式人生 > >謝煙客---------Linux之程序包管理yum使用和編譯安裝

謝煙客---------Linux之程序包管理yum使用和編譯安裝

linux

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

禁用 GPG 簽名檢查,不檢查完整性和來源合法性

--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使用和編譯安裝