一、软件包管理
1.1 软件包管理
API:Application Programming Interface 应用程序开发接口;程序员面对的编程接口
POSIX:portable operating system:可移植操作系统接口
v 程序源代码 –> 预处理 –> 编译 –> 汇编 –> 链接
静态编译: 共享编译:.so
ABI:Application Binary Interface 应用程序的二进制接口;程序应用者面对运行程序接口
二进制文件接口Windows 与Linux 不兼容 :ELF(Executable and Linkable Format);PE(Portable Executable)
库级别的虚拟化:Linux: WINE ;Windows: Cywin
1.2 包管理器
二进制应用程序的组成部分:二进制文件、库文件、配置文件、帮助文件
程序包管理器:debian :deb 文件, dpkg 包管理器 ;redhat: rpm 文件, rpm 包管理器
rpm: Redhat Package Manager ;RPM Package Manager
1.2.1 包命名
源代码:name -VERSION.tar.gz|bz2|xz ;VERSION(版本号): major.minor.release(开发版)minor为偶数是稳定版
rpm 包命名方式:name -VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
VERSION: major.minor.release ; release :release.OS
常见的arch(架构):x86: i386, i486, i586, i686 ,x86_64: x64, x86_64, amd64 ;powerpc: ppc
跟平台无关:noarch
1.2.2 包命名和工具
1包:分类 和 拆包
Application-VERSION-ARCH.rpm: 主包 ; Application-devel-VERSION-ARCH.rpm 开发子包
Application-utils-VERSION-ARHC.rpm 其它子包 ; Application-libs-VERSION-ARHC.rpm 其它子包
v 包之间:可能存在依赖关系,甚至循环依赖
解决依赖包管理工具:yum :rpm 包管理器的前端工具
apt-get :deb 包管理器前端工具 ;zypper: suse 上的rpm 前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具
1.2.3 库文件
查看二进制程序所依赖的库文件: ldd /PATH/TO/BINARY_FILE
管理及查看本机装载的库文件:idconfig
/sbin/idconfig –p:显示本机已经缓存的所有可用库文件名及文件名的路径映射关系
库文件配置文件:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf
库文件缓存文件:/etc/ld.do.cache
1.2.4 程序包管理器
功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作:
1 、包文件组成 ( 每个包独有):RPM包内的文件;RPM 的元数据,如名称,版本,依赖性,描述等
安装或卸载时运行的脚本
2 、数据库( 公共):程序包名称及版本;依赖关系;功能说明包;包安装后生成的个文件路径及校验码信息
程序包的来源
管理程序包的方式: 使用包管理器:rpm ;使用前端工具:yum,dnf
获取程序包的途径:
(1)系统发版的光盘或官方的服务器;CentOS 镜像:
https://www.centos.org/download/ ; http://mirrors.aliyun.com
http://mirrors.sohu.com ; http://mirrors.163.com
(2)项目官方站点
(3)第三方组织:Fedora-EPEL:Extra Packages for Enterprise Linux ; Rpmforge:RHEL 推荐,包很全
搜索引擎:http://pkgs.org ;http://rpmfind.net ;http://rpm.pbone.net ;https://sourceforge.net/
v (4) 自己制作
v 注意:检查其合法性( 来源合法性, 程序包的完整性)
二、rpm包管理
CentOS系统上使用rpm命令管理程序包:安装、卸载、升级、查询、校验、数据库维护
2.1 安装软件包
rpm –ivh PACKAGE-FILE…
rpm {-i|–install}[install-options] PACKAGE_FILE
[install-options]:-test: 测试安装,但不真正执行安装;dry run 模式
–nodeps :忽略依赖关系 ;–replacepkgs | replacefiles:重复覆盖安装 ;–nosignature: 不检查来源合法性
–nodigest :不检查包完整性 ;–noscripts :不执行 程序包脚本
%pre: ; 安装前脚本; –nopre ; %post: ; 安装后脚本; –nopost
%preun: ; 卸载前脚本; –nopreun ; %postun: 卸载后脚本; –nopostun
2.2 软件包升级
rpm {-U|–upgrade}[install-options] PACKAGE_FILE
rpm {-F|–freshen} [install-options] PACKAGE_FILE
upgrade :安装有旧版程序包,则“升级” ; 如果不存在旧版程序包,则“安装”
freshen :安装有旧版程序包,则“升级” ; 如果不存在旧版程序包,则不执行升级操作
rpm -Uvh PACKAGE_FILE … ; rpm -Fvh PACKAGE_FILE …
–oldpackage :降级 ; –force:强行升级
升级注意项:(1)不要对内核做升级操作;linux支持多内核版本并存,因此,只需要直接安装新内核版本
(2)如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个 配置文件并不会直接覆盖老 版本的配置文件,而是把新版本的文件重命名(FILENAME.rpmnew)后保留
2.3 rpm包查询(query)
rpm {-q|–query} [select-options] [query-options]
v [select-options]
-a: 所有包 ;-f: 查看指定的文件由哪个程序包安装生成 ;-p rpmfile :针对尚未安装的程序包文件做查询操作;
–whatprovides CAPABILITY :查询指定的 CAPABILITY由哪个包所提供
–whatrequires CAPABILITY :查询指定的 CAPABILITY 被哪个包所依赖
v rpm2cpio 包文件|cpio –itv 预览包内文件
v rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件
[query-options]
–changelog :查询rpm 包的changelog
-c: 查询程序的配置文件 ; -d: 查询程序的文档 ; -i: information:查询包的信息
-l: 查看指定的程序包安装后生成的所有文件 ; -R: 查询指定的程序包所依赖的 的CAPABILITY
–scripts :程序包自带 的脚本 ; –provides: 列出指定程序包所提供的 的CAPABILITY
2.3.1 组合查询
-q:仅查询,后面接的软件名是否安装 ; -qa:列出所有的已经安装在本机Linux上面的所有软件名称
-qi:列出该软件的详细信息(information) ; -ql:列出该软件所有的文件与目录所在完整文件名
–qc:列出该软件的所有配置(config)文件(/etc/下面的文件名) ;-qd:列出该软件的所有帮助软件(man)
-qR:列出该软件有关的依赖软件所含的文件(Required) ;–qf:后接文件名找出此文件属于哪一个已安装的软件
-qp [ icdlR]:查询某个RPM的信息,而非已安装软件的信息。
2.4 rpm包卸载
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
2.5 rpm包校验
包来源合法性验正及完整性验正:
完整性验正:SHA256 ; 来源合法性验正:RSA
v 公钥加密:(1)对称加密:加密、解密使用同一密钥; (2)非对称加密:密钥是成对儿的
public key: 公钥,公开所有人 ; secret key: 私钥, 不能公开
导入所需要公钥:rpm –import / etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
rpm -K|checksig rpmfile 检查包的完整性和签名
rpm -qa gpg-pubkey*
CentOS 7 发行版光盘提供: RPM-GPG-KEY-CentOS-7
2.6 数据库重建
vim /var/lib/rpm ldd :查询二进制执行命令所调用的库如:ldd /bin/ls ldd /bin/cat
rpm {–initdb|–rebuilddb}
initdb: 初始化 如果事先不存在数据库,则新建之;否则,不执行任何操作
rebuilddb :重建已安装的包头的数据库
三、yum
yum(yellowdog update modifier)依赖于rpm CentOS安装包的命令: yum, dnf
YUM: Yellowdog Update Modifier ,rpm 的前端程序,用来解决软件包相关依赖性,
可以在多个库之间定位软件包, up2date 的替代工具
3.1 yum仓库
yum依赖于数据库,要使用yum,必须要建立yum仓库(yum repository: yum repo):存储了众多rpm包,以及rpm包的相关的元数据文件(放置于特定目录repodata 下)里面包括:包之间的依赖性、校验、查询、等信息。
元数据存放在:文件服务器:ftp:// ;http://; file://;在本机中以后可以用命令自动生成,只需要有包文件。
yum 客户端配置文件:不同终端只能一个人使用yum
/etc/yum.conf :为所有仓库提供公共配置 ; /etc/yum.repos.d/*.repo :为仓库的指向提供配置
3.1.2 yum仓库指向的定义
元数据文件repodata的父目录即为仓库指向的路径
[repositoryID]如:[CentOS]】 ; name=Some name for this repository(为仓库指名) ;
baseurl=url://path/to/repository/; [ftp:// ;http://; file:///mnt/yum(本机/mnt/yum下)];
enabled={1|0} (0表示仓库禁用) ; gpgcheck={1|0}(0表示不检查合法性–-import) ;
(开放源代码密钥)gpgkey=URL ; enablegroups={1|0} (是由支持用户组)
failovermethod={roundrobin|priority},默认为:roundrobin ,意为多个url随机挑选;
cost= 默认为1000(可以建多个仓库,cost代表价格,cost值越低,优先级越高)
3.1.3 yum客户端的建立
生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo repo镜像文件
yum-config-manager –add-repo=http://172.16.0.1/cobbler/ks_mirror/CentOS-X-x86_64/
v yum-config-manager –disable “ 仓库名" 禁用仓库
v yum-config-manager –enable “ 仓库名”启用仓库 (适用于交互式脚本)
显示仓库列表:yum repolist [all|enabled|disabled] 显示所有可安装的包
3.1.4 yum程序包管理
yum list 查看包的列表 yum info 查看包的信息:包含的内容
yum list [all | glob_exp1] [glob_exp2] […]
yum list {available|installed|updates} [glob_exp1] […]
v 安装程序包:相对于rpm,yum能简便安装,不用考虑依赖性,直接安装所依赖的包
yum install package1 [package2] […]
yum reinstall package1 [package2] […] ( 重新安装)
升级程序包:
yum update [package1] [package2] […]
yum downgrade package1 [package2] […] ( 降级)
v 检查可用升级:
yum check-update
v 卸载程序包:不能卸载所依赖的包,导致卸载不干净,留下垃圾。
yum remove | erase package1 [package2] […]
用 cat /var/log/yum.log 查看yum的安装卸载日志
3.1.5 查看程序包information
yum info […]
v 查看指定的特性( 可以是某文件) 是由哪个程序包所提供:
yum provides | whatprovides feature1 [feature2][…] ——》rpm -qf
v 清理本地缓存:cat /etc/yum.conf à 得到cachedir=var/cache/yum/… 一般缓存元数据和其他的数据
yum clean [ packages | metadata | expire-cache(过期缓存) |rpmdb | plugins | all ]
如果遇到新安装的yum报错,而且配置文件没啥问题,那就清除一下缓存(以前yum的配置文件缓存)
v 构建缓存:yum makecache
搜索:yum search string1 [string2] […]:以指定的关键字搜索程序包名及summary 信息
v 查看指定包所依赖的capabilities:
yum deplist package1 [package2] […]
v 查看yum 事务历史:
yum history [info|list|packages-list|packages-info|summary|addon-info|redo(重做)|undo(撤销)|
rollback|new|sync|stats]
yum history = cat /var/log/yum.log
yum history info 6
yum history undo 6
查看历史上安装的包,指定第6个(info),撤销安装的第6个,这个相当于能直接卸载依赖性的包
v日志文件存放:/var/log/yum.log
安装及升级本地程序包:
yum localinstall rpmfile1 [rpmfile2] […] ( 用install 替代)
yum localupdate rpmfile1 [rpmfile2] […] ( 用update 替代)
3.1.6包组管理的相关命令
yum groupinstall group1 [group2] […] (安装CentOS的安装选项 如:Development tools)
yum groupupdate group1 [group2] […]
yum grouplist [hidden] [groupwildcard] […]查看包组的列表
yum groupinfo group1 […] 查看包组的信息,包含的内容:必选包组,默认,可选
查看显示“=”代表随着包组一块安装的
yum groupremove group1 [group2] […]
四、如何使用光盘当作本地yum 仓库
(1) 挂载光盘至某目录,例如/media/cdrom
# mount /dev/cdrom /media/cdrom
(2) 创建配置文件
[CentOS7] name= baseurl= gpgcheck= enabled=
4.1 yum仓库示例
[centos7]
baseurl=http://172.18.0.1/cobbler/ks_mirror/CentOS-7-1511-x86_64/
#gpgcheck=0
gpgkey=http://172.18.0.1/cobbler/ks_mirror/CentOS-7-1511-x86_64/RPM-GPG-KEY-CentOS-7
enabled=1
4.2 yum 的命令行选项
–nogpgcheck :禁止进行gpg check
-y: 自动回答为“yes” -q :静默模式
–disablerepo=repoidglob :临时禁用此处指定的repo –enablerepo=repoidglob :临时启用此处指定的repo
–noplugins
yum 的repo 配置文件中可用的变量
$releasever: 当前OS 的发行版的主版本号 $arch: 架构平台,i386,i486,i586,x86_64等
$basearch :基础平台;i386,x86_64
$YUM0-$YUM9: 自定义变量
v 实例:
http://server/centos/$releasever/$basearch/ 不管操作系统的版本5,6,7直接能够找到对应版本所需的仓库
http://server/centos/7/x86_64 http://server/centos/6/i384
v 自己创建yum 仓库:首先要拿到rpm包,
rpm -ivh /misc/cd/Packages/vsftpd-2.2.2-21.el6.x86_64.rpm
再创建元数据:createrepo [options] <directory>
4.3 光盘的自动挂载/misc/cd
cat /etc/yum.repos.d/wang.repo (查看yum仓库的配置文件)
yum -y install autofs 下载autofs软件
systemctl enable autofs === centos7 chkconfig autofs on === centos6 开通autofs服务
reboot 重启
cat /etc/yum.repos.d/wang.repo 查看yum仓库的配置文件是否如下:
[base] baseurl=file:///misc/cd/ gpgcheck=0
五、ftp服务
创建yum仓库,为网络客户服务
rpm -ivh /misc/cd/Packages/vsftpd-3.0.2-10.el7.x86_64.rpm 下载vsftpd服务软件包,自动创建/var/ftp/pub目录。
systemctl start vsftpd === centos7 systemctl enable vsftpd === centos7(下次启动继续执行)
service vsftpd start === centos6 chkconfig vsftpd on === centos6 (启动ftp服务)
iptables -F (清空防火墙) setenforce 0 禁用selinux守护 策略
rpm –ivh /misc/cd/Packages/createrepo….rpm 下载创建仓库元数据的软件包createrepo
cp *.rpm /var/ftp/pub/7 复制软件包到/var/ftp/pub/7目录下
createrepo /var/ftp/pub/7 (创建 /var/ftp/pub/7/repodata元数据 文件)之后才能访问ftp共享文件。
在客户端上:
[root@centos7 ~]# cat /etc/yum.repos.d/base.repo
[base]
baseurl=ftp://172.16.253.230/pub/$releasever/
gpgcheck=0
mount -o loop /root/CentOS-6.8-x86_64-bin-DVD1.iso /var/ftp/pub/6 挂载iso镜像文件到/var/ftp/pub/6下v
六、http服务
6.1程序包编译安装
v Application-VERSION-release.src.rpm –> 安装后,使用rpmbuild 命令制作成二进制格式的rpm包,而后 再安装
v 源代码–> 预处理–> 编译–> 汇编–> 链接–> 执行
v 源代码组织格式:多文件:文件中的代码之间,很可能存在跨文件依赖关系。
6.1.1 编译C 源代码
准备: 提供开发工具及开发环境 (yum groupinstall “Development Tools”)
开发工具:make, gcc等 开发环境:开发库,头文件(glibc :标准库)
实现:通过 “包组”提供开发组件
CentOS 6: Development Tools Server Platform Development
CentOS 7: Development Tools Development and Creative Workstation
C 、C++ :make ( 项目管理器,configure(增加参数) –>Makefile.in (模版文件)–> makefile)
java: maven相当于c 代码的编译安装三步骤
6.1.2 C代码编译安装三步骤
1 、./configure:执行命令必须在解压缩的目录下
(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及makefile.in 文件生成makefile
(2) 检查依赖到的 外部环境,如依赖的软件包
2 、make :根据makefile 文件,构建应用程序,最文件终生成二进制文件
3 、make install: 复制文件到相应路径
开发工具:autoconf: 生成configure 脚本 ; automake :生成Makefile.in
v 注意:安装前用 configure – -help 查看cat INSTALL ,README。
开源程序源代码的获取:
(1)官方自建站点:apache.org (ASF :Apache Software Foundation) ; mariadb.org ; …
(2)代码托管:SourceForge.net Github.com code.google.com
c/c++ 编译器: gcc (GNU C Complier)
第一步:configure 脚本
选项:指定安装位置、指定启用的特性 –help: 获取其支持使用的选项
选项分类:
安装路径设定:–prefix=/PATH: 指定默认安装位置, 默认为/usr/local/ –sysconfdir=/PATH :配置文件安装位置
System types: 系统类型
Optional Features: 可选特性 –disable-FEATURE –enable-FEATURE[=ARG]
Optional Packages: 可选包, –with-PACKAGE[=ARG], 依赖包 –without-PACKAGE, 禁用依赖关系
v第二步:make
v第三步:make install
6.1.3 安装后的配置
(1) 二进制程序目录导入至PATH 环境变量中;
编辑文件/etc/profile.d/NAME.sh export PATH=/PATH/TO/BIN:$PATH
(2) 导入库文件路径
编辑/etc/ld.so.conf.d/NAME.conf 添加新的库文件所在目录至此文件中
让系统重新生成缓存: ldconfig [-v]
(3) 导入头文件
基于链接的方式实现: ln -sv
(4) 导入帮助手册:编辑/etc/man.config|man_db.conf 文件
添加一个MANPATH
七、完整安装编译安装http服务
1 yum groupinstall "Development Tools" 获取开发(make)编译(gcc)工具,获取开发环境(开发库,头文件)
2 yum install lftp 使用ftp服务下载 http 安装包
lftp 172.16.0.1/pub/Sources/sources/httpd/httpd-2.2.29.tar.bz2
get httpd-2.2.29.tar.bz2 (下载) bye:退出当前模式
tar xvf httpd-2.2.29.tar.bz2(解压)
必须要ping通172.16.0.1,可以检查路由设置,设置默认路由:route add default eth0 ;route -n
3 cat README INSTALL 查看帮助,建立文档
4 yum install gcc 必须要先确定有编译工具gcc
./configure –help 生成makefile文件
./configure –prefix=/usr/local/wanghttp 默认安装目录 –sysconfdir=/etc/wanghttp/ 设置默认安装配置文件
5 make (根据makefile 文件,构建应用程序,最文件终生成二进制文件)
6 make install 复制二进制文件到相应路径
7 vim /etc/profile.d/wanghttp.sh 编辑全局profile.d文件 ,设置自动执行的环境变量
PATH=$PATH:/usr/local/wanghttp/bin
8 vim /etc/man.config(CentOS6) | man_db.conf (CentOS7)
导入帮助手册路径 MANPATH /usr/local/wanghttp/man
9 vim /etc/ld.so.conf.d/wanghttp.conf
/usr/local/wanghttp/lib 创建数据库 ; ldconfig (加载库)
10 ln -s /usr/local/wanghttp/include/ /usr/include/wanghttp(指向链接的头文件)
11 apachectl start
以前安装的httpd冲突,需要卸载
如果不成的话就把hash -r,看是不是路径问题
netstat -ant 查看80端口(http的默认端口)
iptables -F 清空防火墙
12 测试查看网页:links ip 172.16.222.222 、 curl ip 172.16.222.222
13 切换到编辑网页路径:cd /usr/local/wanghttp/htdocs
echo "welcome to mage" > index.html 更改内容
原创文章,作者:lyx,如若转载,请注明出处:http://www.178linux.com/61084