- 7.1 应用程序
- 7.2 内存地址空间
- 7.3 软件安装——RPM
- 7.4 软件安装——YUM
- mount /dev/cdrom /media
- yum -y install vsftpd
- systemctl start vsftpd
- systemctl enable vsftpd
- cp -rf /media/ /var/ftp #(这个目录是Linux默认共享的ftp目录)
- mount /dev/ cdrom/media
- yum -y install httpd
- systemctl start httpd
- systemctl enable httpd
- cp -rf /media/ /var/www/html #(这个目录是Linux下默认共享的http目录)
- 7.5软件安装——编译安装
7.1 应用程序
源代码 —— 编译 —— 链接 —— 运行
- 应用程序:具有执行权限的就是。与CPU架构密不可分
- 编译:生成二进制文件(可执行文件),匹配底层架构
链接:
库:静态库和动态库 .so (shared object)
- 静态链接过程:把库文件集成到应用程序中
- 动态链接过程:库文件与应用程序分开,做链接,运行时调用
程序 = 数据 + 指令 应用程序运行时,申请CPU和内存资源
应用程序中包含的内容:
- 二进制文件(可执行程序)(/bin、/ sbin、/usr/bin、/usr/ sbin)
- 库(/usr/lib)
- 配置文件(/etc)
- 帮助文件(/usr/share/)
7.2 内存地址空间
- text:存放指令
- data+bss:data存放数据,bss: block system of symbol 存放初始化为0的变量
- 堆:heap存放运行中临时文件
- 栈:存放应用程序的变量和函数等
7.3 软件安装——RPM
Redhat ,SUSE:RPM
Debian ,Ubuntu:dpt
前端工具:yum apt-get (自行解决依赖关系)
后端工具:RPM dpt (不能自行解决依赖关系)
7.3.1 RPM的优点
- RPM软件包中包含了编译过的程序与配置文件,用户不需要重新编译
- RPM在安装之前,首先会检查硬盘容量,操作系统版本等,避免被错误安装
- RPM使用RPM数据库管理(/var/lib/rpm),数据中记录应用程序的参数,便于升级,卸载,查询等
- RPM本身会提供应用程序版本信息,相关属性,软件名称,用途等。便于用户了解软件
7.3.2 RPM包的组成
RPM命名:
包:组成部分
- 主包:yum-3.4.3-150.e17.centos.noarch.rpm
- 子包:yum-langpacks-0.4.2-7.e17.noarch.rpm
包名格式:
- name-version-release.arch.rpm (noarch代表任何架构都可以使用)
其中的version:
- 主版本号:功能重大改进则改进主版本号
- 次版本号:某个子功能发生重大变化
- 发行号:修正了部分bug,调整了一点功能
RPM的功能:安装、查询、卸载、升级、校验、数据库重建、验证数据包
两种类型的包:
- RPM包:经过源代码编译后的软件包
- .tar.gz:源码包,没有经过编译
RPM的命令:
- 安装:
rpm -ivh name.rpm
- -i :安装
- -h :打印50个#号显示进度条
- -v :显示更详细的信息
- —nodeps:忽略依赖关系,可能导致软件包安装不完整
- —replacepkgs :重新安装,替换原有安装;
- —force:强行安装,可以实现重装或降级;
- 查询:
RPM -q PACKAGE_NAME
: 查询指定的包是否已经安装
- -qa :查询已经安装的所有包
- -qi PACKAGE_NAME:查询指定包的说明信息;
- -ql PACKAGE_NAME:询指定包安装后生成的文件列表;
- -qc PACEAGE_NEME:查询指定包安装的配置文件;
- -qd PACKAGE_NAME:查询指定包安装的帮助文件;
- -qf /path/to/somefile:查询指定的文件是由哪个rpm包安装生成的;
-q —scripts PACKAGE_NAME:查询指定包中包含的脚本
- 脚本:包含软件包安装前(preinstall),安装后(postinstall),卸载前(preuninstall),卸载后(postuninstall)执行的脚本
- 未安装前查询
如果某rpm包尚未安装,我们需查询其说明信息、安装以后会生成的文件:
- rpm -qpi /path/to/package_name 查看未安装软件包信息
- rpm -qpl /path/to/package_name 查看未安装软件包 安装的列表
- 升级
- -Uvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则,则安装;
- -Fvh / PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则,退出;
- -Uvh — oldpackage PACKAGE_NAME:降级
- 卸载
- rpm -e PACKAGE_NAME [— nodeps:忽略依赖关系]
- 校验:验证软件包列表或配置文件的完整性
- rpm -V PACKAGE_NAME
应用程序配置文件完整性破坏后的代码
5 MD5校验和
S 文件大小
L 符号连接
T 修改时间
D 设备
U 用户
G 组
M 模式(包括许可和文件类型)
- 重建数据库
- rpm — rebuilddb :重建数据库,一定会重新建立
- rpm — initdb :初始化数据库,没有才建立,有就不用建立
- 检查来源合法性,及软件包完整性
ls /etc/pki/rpm-gpg/
- RPM-GPG-KEY-redhat-release
rpm -K /path/to/package_file
- dsa ,gpg:验证来源合法性,也即验证签名;可以使用 — nosignature,忽略此项
- sha1,md5:验证软件包完整性;可以使用 —nodigest ,忽略此项
- rpm —import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-7
7.4 软件安装——YUM
YUM 解决依赖关系,RPM进行安装卸载
yum采用C/S架构,依靠yum 仓库(web,ftp,file)
- yum配置文件:/etc/yum.conf
- yum仓库:/etc/yum.repos.d/
7.4.1 yum功能:
install:安装软件包
update:升级软件包
check-update:检查软件包的升级信息
upgrade:更新软件包
remove :卸载软件包
list:显示所有已经安装和未安装的软件包
info:查看软件包信息
clean:清除软件包一些信息和网络源缓存
search:查看指定软件包相关的软件包
deplist:查询软件包依赖关系列表
repolist:查看可用的yum源
repoinfo:查看可用yum源的信息
7.4.2 yum源( /etc/yum.repos.d/
):
//每个仓库分别是一个文件,文件名以.repo结尾
[name] //id
name = //引用变量
baseurl = //yum仓库
enabled = //是否启用该yum仓库
gpgcheck = //是否进行完整性和校验和检测
gpgkey = //完整性和校验和检测文件
yum仓库:
- $releasever:发行版本
- $basearch:CPU架构集
- $arch:CPU架构
yum元数据目录:repodata
- primary.xml.gz :所有RPM列表;依赖关系;软件包安装列表
- filelist.xml.gz :包含所有RPM 包的所有列表
- other.xml.gz :包含软件包其他信息,比如更改记录
- repomd.xml:包含primary/filelist/other时间戳和校验和
- comp.xml:包含软件包组的列表
创建元数据目录
先使用网络源安装createrepo
- yum -y install createrepo
在本地源(包含所有安装包的路径)下,创建元数据目录
- createrepo /opt/repo # 这个目录下提前放置了需要放到源中的安装包
- 直接通过修改repo源,使用本地源即可
7.4.3 创建自己的yum源
两台机器
- yum客户端(个人电脑):192.168.10.20
- ftp: vim ftp.repo
[ftp]
name=file_repo
baseurl=ftp://192.168.10.10/media
enable=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-7
- httpd: vim httpd.repo
[httpd]
name=httpd_repo
baseurl=http://192.168.10.10/media
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
- 本地源: vim file.repo
[httpd]
name=httpd_repo
baseurl=file:///media #光盘挂载的目录
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
注意:在创建本地源时,可能会因为没有元数据目录(repodata)而导致失败,所以要创建元数据目,创建方法看上面 7.2 yum源 —> 创建元数据目录
7.4.4 使用epel源
https://mirrors.tuna.tsinghua.edu.cn/help/epel/
7.5软件安装——编译安装
7.5.1 安装开发工具组
包括gcc、g++等
- yum -y groupinstall “Development Tools”
7.5.2 编译链接工具
- automake ——> makefile.in(半成品) —(通过configure)—> makefile
- autoconf :生成脚本文件:configure,参照makefile.in 生成makefile
- make:不是编译工具,而是项目管理工具,按照makefile文件中的定义,去定义软件中功能向后顺序
- makeinstall:安装
#执行编译安装步骤
1. 获取源代码并解压
# tar xf xxx.tar.gz
# tar xf xxx.tar.bz2
2. 执行configure脚本 (在源码目录中运行) ./configure --...
功能:1.检查应用程序所需要的编译环境 2.生成Makefile 3.定制功能
选项:--help:进行查看脚本帮助信息
--prefix=path:定义应用程序安装路径
--sbin-path=PATH :定义应用程序的二进制程序
--conf-path=PATH :定义应用程序配置文件路径
--enable--xxx:开启某项功能(如应用程序支持该功能,但默认不安装)
--with--xxx:开启某项功能(如应用程序支持该功能,但默认不安装)
--without--xxx:关闭某项功能(如应用程序支持该功能,默认安装,但是我不需要)
--user=USER:指定应用程序执行的用户
--group=GROUP:执行应用程序执行的组
解决configure错误信息
1. 用without关闭这项功能(不建议使用)
2. 安装所需的环境,安装所需环境的开发包
3. 执行make :定义Makefile按照哪种顺序去编译源程序
-j N:多线程编译(速度快)
4. make install :安装应用程序
//编译安装完成后工作:
1:添加应用程序的二进制程序到系统路径:系统查找$PATH
1.1:为二进制程序做链接文件
# 1n -s /usr/ local/tengine/sbin/* /usr/sbin
# ln -s /usr/local/tengine/sbin /usr/sbin/tengine
1.2:修改/etc/profile文件
1.3:在/etc/profile.d/目录中建立name.sh的文件
2:添加应用程序的库文件到系统库文件路径:库文件:/usr/lib /usr/1ib64
2.1:为库文件做链接文件
# ln -s /usr/local/APP_NAME/lib/* /use/lib
# ln -s /usr/local/APP_NAME/lib /usr/lib/APP_NAME
2.2:在 /etc/ld.so.conf.d/ 目录下建立APP_NAME.conf,把应用程序的库文件位置添加进去
# ldconfig
-v :显示加载库文件的过程
3:添加应用程序的头文件到系统头文件路径:系统头文件: /usr/include
3.1:为头文件做链接文件
# ln -s /usr/local/APP_NAME/include/* /usr/include
# ln -s /usr/local/APP_NAME/include /usr/include/APP_NAME
4:添加应用程序的帮助信息
4.1: man -M PATH bin_name :-M 指定帮助信息的位置
4.2: man配置文件:系统默认帮助:/usr/share/man/
centos6:: /etc/man.config 添加:MANPATH [HELP_PATH]
centos7:: /etc/man_db.conf 添加:MANPATH_MAP [HELP_PATH]