軟體包管理概述
安裝/查詢/卸載
一、軟體的型別
A. 原始碼包 需要編譯 nginx-1.8.1.tar.gz
B. 二進制包 已編譯 mysql-community-common-5.7.12-1.el7.x86_64.rpm
常見二進制包
系統平臺 包型別 工具 在線安裝(自動解決依賴關系)
RedHat/Centos RPM rpm,rpmbuild yum
Ubuntu/Debian DPKG dpkg apt
注意: 不管是原始碼包,還是二進制包,安裝時都可能會有依賴關系!
二、RPM包管理
主要獲得RPM包途徑:
1. RedHat光碟或官方網站 ftp://ftp.redhat.com
2. rpmfind.net
3. 相應軟體官方網站如 http://www.mysql.com
認識RPM包:
ntfs-3g-2011.4.12-5.el5.x86_64.rpm 套件名
ntfs-3g-2011.4.12-5.el6.i686.rpm 套件名
ntfs-3g-2011.4.12-5.el6.x86_64.rpm 套件名
yum-rhn-plugin-0.9.1-40.el6.noarch.rpm 套件名
yum-utils-1.1.30-14.el6.noarch.rpm 套件名
mysql-community-common-5.7.12-1.el7.i686.rpm
mysql-community-common-5.7.12-1.el7.x86_64.rpm vsy
mysql-community-embedded-devel-5.7.12-1.el6.x86_64.rpm
php-5.6.20-1.fc23.x86_64.rpm
php-5.6.20-1.fc23.ppc64p7.rpm IBM 小型機CPU Power
軟體包名 版本號(Version) 發布版本(Release) 系統平臺
ntfs-3g 2011.4.12 5.el6 i386
ntfs-3g 2011.4.12 5.el6 x86_64
yum-utils 1.1.30 14.el6 noarch
php 5.6.20 1.fc23 x86_64
php 5.6.20 1.fc23 ppc64p7
[root@CentOS7 ~]# uname -m
x86_64
[root@CentOS7 ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
==========================================================
yum管理RPM 包
YUM使用官方源
====================================================================================
http://mirrors.aliyun.com/
http://mirrors.163.com/
Base/Extras/Updates: 默認(國外源)
mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/{*.repo,backup}
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo (aliyun)
yum clean all
yum makecache
EPEL:
yum -y install epel-release (國外源)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo (aliyun)
Nginx:
[root@CentOS7 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
MySQL:
yum -y install https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
Zabbix:
# rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

openstack:

使用YUM管理RPM包
自動解決包的依賴關系
==查看可用倉庫
[root@CentOS7 ~]# yum clean all //清空快取及其它檔案
[root@CentOS7 ~]# yum makecache //重建快取
[root@CentOS7 ~]# yum repolist //查詢可用的倉庫
==安裝
# yum -y install httpd vsftpd *vnc
# yum -y reinstall httpd
# yum -y update httpd
# yum -y update
# yum -y install /root/OpenIPMI-2.0.19-11.el7.x86_64.rpm //從本地安裝
# yum -y install https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
# yum -y groupinstall mariadb
# yum -y remove httpd
# yum -y groupremove mariadb
==查詢(從本地 rpm資料庫 和 yum源 中查詢)
# yum list httpd
# yum list *vnc*
# yum list |grep vnc
# yum list installed
# yum info httpd
# yum group list
# yum grouplist
# yum groupinfo mariadb
==卸載
[root@CentOS7 ~]# yum -y remove mysql-server
[root@CentOS7 ~]# yum -y groupremove mysql-server
==history
# yum history
# yum history info 4
# yum history undo 4
擴展查詢:
例1: 從包名和包描述中查找帶有關鍵字chinese的包
# yum list |grep chinese
# yum list |grep piny
# yum search chinese
例2:查找/etc/vsftpd/vsftpd.conf屬由哪個包提供?
[root@server0 ~]# yum provides /etc/vsftpd/vsftpd.conf
Loaded plugins: langpacks
vsftpd-3.0.2-9.el7.x86_64 : Very Secure Ftp Daemon
Repo : classroom_content_rhel7.0_x86_64_dvd_
Matched from:
Filename : /etc/vsftpd/vsftpd.conf
[root@server0 ~]# yum -y install vsftpd-3.0.2-9.el7.x86_64
例3:查找vsftpd.conf屬由哪個包提供?
[root@server0 ~]# yum provides */vsftpd.conf
例4:查找命令gnuplot屬由哪個包提供?
[root@server0 ~]# gnuplot
bash: gnuplot: command not found...
[root@server0 ~]#
[root@server0 ~]# yum provides gnuplot
Loaded plugins: langpacks
gnuplot-4.6.2-3.el7.x86_64 : A program for plotting mathematical expressions and data
Repo : classroom_content_rhel7.0_x86_64_dvd
例5:查找命令pip屬由哪個包提供?
[root@server0 ~]# pip
bash: pip: command not found...
[root@server0 ~]# yum -y install pip
使用自建源
Base源 [centos7光碟檔案]
第三方軟體源 [yum快取]
建議:
剛安裝好系統 Base/Extras/Updates: yum -y update
zabbix,nginx: yum -y install zabbix --downloadonly
綜合案例:建立YUM服務器
1. 提供基礎軟體包Base [光碟]
2. 提供update軟體包 [yum快取]
3. 提供其它軟體包如nginx, zabbix, docker, hadoop, openstack [yum快取]
配置防火墻
[root@yangs ~]# firewall-cmd --permanent --add-service=ftp
[root@yangs ~]# firewall-cmd --reload
關閉SELinux
[root@yangs ~]# setenforce 0
[root@yangs ~]# vim /etc/sysconfig/selinux
SELINUX=disabled
FTP
[root@yangs ~]# yum -y install vsftpd
[root@yangs ~]# systemctl start vsftpd
[root@yangs ~]# systemctl enable vsftpd
實作目標1:提供基礎軟體Base
掛載centos鏡像
[root@yangs ~]# mkdir /var/ftp/{centos6u6,centos7u2}
[root@yangs ~]# mount -o loop /home/centos7u2.iso /var/ftp/centos7u2
[root@yangs ~]# echo “mount -o loop /home/centos7u2.iso /var/ftp/centos7u2” >> /etc/rc.local
[root@yangs ~]# chmod +x /etc/rc.d/rc.local
實作目標2: 提供其它軟體包如nginx, zabbix
復制已快取的Nginx 及依賴包 到自定義YUM倉庫目錄中:
[root@CentOS7 ~]# mkdir /var/ftp/{nginx,zabbix}
YUM快取:
1. 配置nginx及zabbix源
[root@CentOS7 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
2. 啟動yum快取安裝nginx
[root@yangs ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1
debuglevel=2
[root@yangs ~]# yum clean all
[root@yangs ~]# yum -y install nginx
[root@yangs ~]# find /var/cache/yum/x86_64/7/ -iname "*.rpm" -exec cp -rf {} /var/ftp/nginx
2. downloadonly
[root@aliyun ~]# yum -y install nginx --downloadonly
3. 創建reopdata:
[root@yangs ~]# yum -y install createrepo
[root@yangs ~]# createrepo /var/ftp/nginx //如果加入新軟體包,重新創建
[root@CentOS7 ~]# ls /var/ftp/nginx/
nginx-1.8.1-1.el6.ngx.x86_64.rpm repodata
客戶端使用YUM源:
[root@client ~]# vim /etc/yum.repos.d/centos7.repo //指向基礎源
[centos7]
name=centos7
baseurl=ftp://x.x.x.x/centos7u2
gpgcheck=0
[root@client ~]# vim /etc/yum.repos.d/nginx.repo //指向nginx源
[nginx]
name=nginx
baseurl=ftp://x.x.x.x/nginx
gpgcheck=0
[root@client ~]# yum -y install nginx
1000臺client使用自定義源:
1. Shell script
2. Saltstack, Asible, Puppet
YUM使用簽名檢查機制
rpm軟體提供組織例如redhat在構建rpm包時,使用其private key對rpm進行簽名
client在使用其rpm時,為了驗證其合法性,可以使用redhat提供的public key進行簽名檢查
方法一: 事先匯入公鑰
[root@CentOS7 ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 //redhat
[root@CentOS7 ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
方法二: 指定公鑰的位置
[root@CentOS7 ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
額外選項:
--nogpgcheck //不檢查軟體包的簽名
本地源:例如使用安裝光碟 [了解]
掛載安裝光碟(臨時):
[root@CentOS7 ~]# mount /dev/cdrom /media
[root@CentOS7 ~]# mount -o loop centos7u2.iso /media
[root@CentOS7 ~]# vim /etc/yum.repos.d/dvd.repo
[dvd]
name=dvd
baseurl=file:///media
gpgcheck=0
使用RPM工具管理RPM包
需要手動解決包的依賴關系
==安裝
rpm -ivh local_path
rpm -ivh url_path
[root@CentOS7 ~]# rpm -ivh dos2unix-3.1-37.el6.x86_64.rpm 套件名
[root@CentOS7 ~]# rpm -ivh ntfs-3g-2010.5.22-1.el6.x86_64.rpm 套件名
[root@CentOS7 ~]# rpm -Uvh ntfs-3g-2011.4.12-5.el6.x86_64.rpm 套件名
[root@CentOS7 ~]# rpm -ivh ftp://rpmfind.net/linux/atrpms/sl6-x86_64/atrpms/stable/puppet-3.2.4-3.el6.noarch.rpm
[root@CentOS7 ~]# rpm -ivh rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
額外選項:
--nosignature //不檢驗軟體包的簽名
--force //強制安裝軟體包
--nodeps //忽略依賴關系
RPM包安裝資訊存盤到本地RPM資料庫中,,,
==查詢
(從本地的rpm資料庫)
[root@CentOS7 ~]# rpm -q ntfs-3g //查詢指定包是否安裝
[root@CentOS7 ~]# rpm -qa |grep ntfs
[root@CentOS7 ~]# rpm -ql ntfs-3g //查詢ntfs-3g安裝的檔案
[root@CentOS7 ~]# rpm -qf /usr/bin/ntfs-3g //查詢該檔案屬于哪個rpm包
[root@CentOS7 ~]# rpm -qi ntfs-3g //查詢包的information
[root@CentOS7 ~]# rpm -qc ntfs-3g //查詢某個包安裝的組態檔
[root@CentOS7 ~]# rpm -qd vsftpd //查安裝的幫助檔案
(從rpm套件中查詢)
擴展知識: 針對沒有安裝的包,直接從套件中查詢
[root@CentOS7 ~]# rpm -e ntfs-3g
[root@CentOS7 ~]# rpm -qip ntfs-3g-2011.4.12-5.el6.x86_64.rpm
[root@CentOS7 ~]# rpm -qlp ntfs-3g-2011.4.12-5.el6.x86_64.rpm
[root@CentOS7 ~]# rpm -qcp ntfs-3g-2011.4.12-5.el6.x86_64.rpm
[root@CentOS7 ~]# rpm -qdp ntfs-3g-2011.4.12-5.el6.x86_64.rpm
==卸載
[root@CentOS7 ~]# rpm -e ntfs-3g
[root@CentOS7 ~]# rpm -e ntfs-3g --nodeps
案例1:安裝系統光碟上的rpm包
[root@CentOS7 ~]# mount /dev/cdrom /media
[root@CentOS7 ~]# df
檔案系統 1K-塊 已用 可用 已用% 掛載點
/dev/sr0 3632776 3632776 0 100% /media
案例2: 使用iso鏡像檔案
[root@CentOS7 ~]# mount -o loop /home/centos7.iso /media
案例3:安裝如下軟體包
vsftpd
samba
nfs-utils
httpd
dhcp
postfix
mysql-server
php
lftp
dos2unix
unix2dos
tigervnc
[root@CentOS7 Packages]# pwd
/media/cd/Packages
[root@CentOS7 Packages]# rpm -ivh samba-3.0.33-3.37.el5.i386.rpm samba-common-3.0.33-3.37.el5.i386.rpm
rpm工具管理軟體包總結:
1. 很難解決包依賴關系
2. 如果某個檔案沒有,很難知道它由哪個rpm包提供,例如 semanage 或 tree 命令是由哪個包提供?
原始碼包管理
1. 獲得原始碼包途徑
官方網站,可以獲得最新的軟體包
Apache: www.apache.org
Nginx: www.nginx.org
Tengine: tengine.taobao.org
2. 安裝原始碼包
準備作業
1. 編譯環境如編譯器gcc、make
2. 準備軟體 tengine-2.2.0.tar.gz
部署Tengine
pcre: 支持正則運算式,地址重寫rewrite
# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel
Tengine:
# useradd www
# tar xvf tengine-2.2.0.tar.gz
# cd tengine-2.2.0
# ./configure \
> --user=www \
> --group=www \
> --prefix=/usr/local/nginx \
> --with-http_stub_status_module \
> --with-http_sub_module \
> --with-http_ssl_module \
> --with-pcre
# make
# make install
# /usr/local/nginx/sbin/nginx //啟動nginx服務器
# systemctl stop firewalld
3. 詳解原始碼安裝三步曲
# ./configure
a. 指定安裝路徑,例如 --prefix=/usr/local/nginx
b. 啟用或禁用某項功能, 例如 --enable-ssl, --disable-filter --with-http_ssl_module
c. 和其它軟體關聯,例如--with-pcre
d. 檢查安裝環境,例如是否有編譯器gcc,是否滿足軟體的依賴需求
最終生成:Makefile
# make //按Makefile檔案編譯,可以使用-j 2指定兩顆CPU編譯,優化編譯器引數
# make install //按Makefile定義的檔案路徑安裝
原始碼安裝錯誤:
error1:
./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.
解決方案:
# yum -y install zlib-devel
error2:
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.
解決方案:
# yum -y install openssl-devel
error3:
checking for C compiler ... not found
./configure: error: C compiler cc is not found
解決方案:
# yum -y install gcc gcc-c++ make
error4:
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
解決方案:
# yum -y install pcre-devel
安裝原始碼的技巧:
README
INSTALL
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/146877.html
標籤:Linux
上一篇:檔案查找
下一篇:網路管理基礎
