1. 程式人生 > >程序包管理(二)yum

程序包管理(二)yum

yum configure createrepo 編譯安裝 yum倉庫

一、yum簡介
二、客戶端配置文件
三、yum命令使用
四、*.repo的配置文件變量
五、使用本地光盤當做yum倉庫
六、創建yum倉庫
七、程序包的編譯安裝
八、開源程序的源代碼的獲取與安裝
九、configure腳本十、後續步驟

前言
rpm弊端:依賴關系,yum會自動解決依賴關系
Centos:yum,dnf
debian:apt-get
suse:zypper

一、yum簡介
C/S架構:yelow dog Update Modifer
S:文件服務器,放置rpm包,共享到外部主機
描述性信息{元數據文件}:版本,包名,依賴關系

c:支持rpm包的基本功能和yum工具
安裝程序的時候:先下載描述性信息到本地緩存中//查看是否存在目標程序,分析依賴關系,下載,安裝,刪除程序包,但是不會刪除元數據
//問題:元數據本地的和server可能沒有同步,方法:每一次使用yum的時候,同步校驗碼(元數據)是否相同,判斷是否更新
同一個服務器,多個網站地址:鏡像列表

yum弊端:假如安裝過程中斷的話,恢復後,無法繼續,需要重新開始
dnf主要用於解決該問題
yum僅僅是rpm的前端工具

要素:
yum命令
配置文件
倉庫存在
createrepo:創建元數據文件,自動分析依賴關系
//分組:xml格式的
yum repository:yum repo 倉庫
存儲了眾多的rpm包,以及包的相關的元數據文件(放置於特定目錄下,repodata)
文件服務器:
ftp://
http://
nfs://
file://
[[email protected] ~]# rpm -qc yum
/etc/logrotate.d/yum //日誌滾動
/etc/yum.conf //主配置文件
/etc/yum/version-groups.conf
多個倉庫:yum會分析所有倉庫的元數據,都有目標程序的時候,yum會安裝最新的

二、客戶端配置文件
/etc/yum.conf :為所有倉庫提供公共配置
[main] //倉庫名 repositoryid
exactarch=1 //是否做嚴格的平臺匹配,i386,x86..
installonly_limit=5 //一次同時安裝幾個程序包
//man yum.conf //查看配置文件幫助手冊
/etc/yum.repo.d/*.repo 為倉庫的指向提供配置
[repositoryid] //唯一
name=隨意啟用
baserurl=[ftp|http|file|]://path/to/repository
url://server1/paht/to/repository
url://server1/paht/to/repository //查找根據順序查找
mirrorlist= //以鏡像方式,在線共享的文件
//yum需要支持插件功能,baseurl和mirrorlist選擇一個使用
enabled=1/0 //是否啟用
gpgcheck=0/1 //是否檢查其完整性和來源合法性
repo_gpgcheck=0/1 //檢查倉庫的元數據的GPG簽名
gpgkey=URL //密鑰文件所在地
enablegroups=0/1 //默認支持,是否基於組批量管理程序包
failovermethod=roundrobin/priority 故障轉移方法,輪訓(隨機抽取)|根據優先級
//多個倉庫的查找順序,默認為roundrobin:隨機
timeout //超時時間,默認30s
username
password //指明賬號和密碼
cost= 默認都是1000
https://mirrors.aliyun.com/centos/7/os/x86_64/ //這個路徑下有repodata目錄,指定到這裏就可以

問題:baseurl和mirrorlist的區別
baseurl:相對穩定
mirrorlist也是一個網址,在這個網址裏能下到更新源列表
mirrorlist是從上面查找最近的更新源

三、yum命令使用
註意:yum是具有事務的概念的,同時只能啟動一個
* repolist [all|enabled|disabled]
* repoinfo [all|enabled|disabled]
list all|通配符 //glob風格的通配符,默認只列出未安裝的包
available|通配符 //尚未安裝的
updates |通配符 //可用的升級包
installed |通配符//已經安裝的
extras|通配符 //拓展的倉庫內容
obsoletes|通配符 //廢棄的包
recent|通配符 //最近添加到repository中的
grouplist
search string1 [string2] [...] //搜索包名和summary信息
reinstall|install pk1 pk2 安裝
yum reinstall zsh --enablerepo=base、
update pk1 pk2 升級
check-update 檢查更新
remove|erase pk1 pk2 卸載
info 簡要信息
clean 清理本地緩存
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
deplist //顯示依賴關系
provides | whatprovides feature1 [feature2] [...] //查看指定的特性(可以是某文件)是由哪個程序包提供的
yum whatprovides /bin/ls
makecache [fast]
downgrade package1 [package2] [... //降級安裝
version grouplist | groupinfo | installed | available | all
history [summary] //安裝和更新的事務,只查看摘要信息
[info|list| package-list|package-info|summary|addon-info|redo|undo|rollback|new|sync| stats]

localinstall/localupdate //本地安裝,而不是倉庫中的包,現在直接使用intall和update都可以了
grouinstall
groupupdate
grouplist
groupremove
groupinfo

指定repo安裝:--enablerepo=base
降級安裝:yum downgrade zsh


四、*.repo的配置文件變量
$releasever:代表發行版的版本,從[main]部分的distroverpkg獲取,如果沒有,則根據redhat-release包進行判斷。
$arch:cpu體系,如i686,athlon等
$basearch:cpu的基本體系組,如i686和athlon同屬i386,alpha和alphaev6同屬alpha。

http://mirrors.173.com/centos/6/i386/os
http://mirrors.173.com/centos/7/x86_64/os
http://mirrors.173.com/centos/7/i686/os
http://mirrors.173.com/centos/$releasever/$basearch/os


$releasever == [6|7|8| r //主版本號,6.7是6,7.1是7
$arch == 平臺
$basearch 基礎平臺,i386,i686的基礎平臺都是i386
$YUM0-$YUM9 //自定義了10個變量,供用戶使用
http://updates/$releasever/$basearch
  http://updates/$releasever/$basearch
  http://updates/$releasever/$basearc

yum install yum-priorities
priority=N (N為1到99的正整數,數值越小越優先)

五、使用本地光盤當做yum倉庫
mount -r -t iso9660 /dev/cdrom /mnt
創建repo文件

        [cdrom]
        name=
        baseurl=
        gpgcheck=
        gpgkey=
        enabled=

yum install zsh --nogpgcheck
-y 自動回答為yes
-q quiet靜默模式
--disablerepo,--enablerepo ;臨時禁止或者啟用repo
--disableplugin=plugin 禁用某個插件
--noplugin 禁用插件

六、創建yum倉庫
yum install createrepo
mkdir /tmp/test //repo所在地,復制部分rpm包到該文件中

    -x 排除某些包
    -g 指明groupfile
    -v 顯示過程
    -c cachedir
    --basedir rpm所在位置

cd /tmp/test ; createrepo ./ //直接在本目錄創建
createrepo /tmp --basedir=tmp/test

七、程序包的編譯安裝
testapp-VERSION-release.src.rpm -->安裝後,使用rpmbuild命令制作成二進制的rpm包,而後在安裝
源代碼組織格式:
多文件:文件中的代碼之間,很可能存在跨文件依賴關系
C、C++:make:依賴於(mkefile.in-->makefile)文件
//makefile.in是一個模板,例如安裝路徑,啟用功能等,
//configure允許傳遞選項,指定編譯參數,到makefile.in文件,生成makefile
jave:maven
源代碼--->預處理--->編譯(gcc)--->匯編(匯編器)--->鏈接(鏈接器)-->執行

編譯安裝三步驟:
./confiure //生成makefile文件
(1)通過選項傳遞參數,指定啟用特性,安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成makefile文件
(2)檢查依賴到的外部環境
make //make將源代碼翻譯成二進制,但是需要調用gcc實現
根據makefile文件,構建應用程序
make install
使用cp命令也可以實現
開發工具:自動生成makefile.in
autoconf:生成confiure腳本 //也要結合一個腳本實現,腳本中描述程序的功能等
automake:生成makefile.in //依賴於一個腳本,腳本中包括了,各種依賴關系,編譯器版本等
建議:安裝前查看INSTALL,README文件

八、開源程序的源代碼的獲取與安裝
官方自建站點
apache.org
mariadb.org
...
代碼托管點:
SourceForge:
Github.com
code.google.com

c/c++ :gcc (GNU C Complier) :功能強悍
編譯C源代碼:
前提:提供開發工具及開發環境
開發工具:make,gcc等
開發環境:開發庫,頭文件
glibc:標準庫,兼容posix的標準
通過“包組”提供開發組件
Centos 6:“Development Tools",“Server Platform Development”
註意:老版本的程序和新版本的程序在不同的OS上可能要求環境不一樣導致無法安裝

九、configure腳本
選項:指定安裝位置,指定啟用的特性
--help:獲取支持的選項
選項分類:
安裝路徑設定:
--prefix=/PATH/TO/SOMEWHERE :指定默認安裝位置,默認/usr/local
--sysconfdir=/PATH/TO/SOMEWHERE:配置文件路徑
System types:編譯的操作可以執行交叉編譯:在本平臺編譯其他平臺的程序
Optional Features:可選特性
--disable-Feature:禁用該特性
--enable-Feature:啟用該特性
Some influential environment variables:可能會產生影響的環境變量
OPtional Packages:可選程序包,它依賴的包
--with-PACKAGE[=ARG] :使用該包,需要指定路徑
--without-PACKAGE:不使用該包
--with-include-apr
make && make install

十、後續步驟
/usr/local/apache/ man,lib和頭文件
1.到處二進制程序目錄至PATH環境變量中
/etc/profile.d/NAME.sh
export PATH=$PATH:/usr/local/apache/
2.導出庫文件路徑
編輯/etc/ld.so.conf.d/NAME.conf
/usr/local/apache/lib
讓系統重新生成緩存:ldconfig -v
3.到處頭文件//基於鏈接的方式實現
ln -sv /usr/local/apache/include /usr/include
4.導出幫助手冊
/etc/man.config
添加一條MANPATH
MANPATH /usr/local/apache/man
CentOS 6:/etc/man.config ;
## CentOS 7: /etc/man_db.conf

練習:
1.yum的配置和使用,包括yum repository
2.編譯安裝apache 2.2 ;啟動此服務


本文出自 “黑馬騰空” 博客,請務必保留此出處http://hmtk520.blog.51cto.com/12595610/1950172

程序包管理(二)yum