软件包介绍

开源软件最初只提供了.tar.gz的打包的源码文件,用户必须自已编译每个想在GNU/Linux上运行的软件。用户急需系统能提供一种更加便利的方法来管理这些软件,当Debian诞生时,这样一个管理工具dpkg也就应运而生,可用来管理deb后缀的"包"文件。从而著名的“package”概念第一次出现在GNU/Linux系统中,稍后Red Hat才开发自己的rpm包管理系统

软件包中的文件分类

二进制文件

库文件

配置文件

帮助文件

范例:利用cpio工具查看包文件列表

rpm2cpio 包文件|cpio –itv 预览包内文件

rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件

程序包管理器

软件包管理器功能:

将编译好的应用程序的各组成文件打包一个或几个程序包文件,利用包管理器可以方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作

主流的程序包管理器

redhat:rpm文件, rpm 包管理器,rpm:Redhat Package Manager,RPM Package Manager

debian:deb文件, dpkg 包管理器

包命名

源代码打包文件命名:

name-VERSION.tar.gz|bz2|xz

VERSION: major.minor.release

范例:Linux 最新内核的C源码的行数

[root@centos8 ~]#tar xvf linux-5.7.2.tar.xz

[root@centos8 ~]#cd linux-5.7.2/

[root@centos8 linux-5.7.2]#for file in `find -name "*.c"`;do line=`cat $file|wc -l`;let sum+=line;done;echo $sum

19517994

[root@centos8 linux-5.7.2]#cat `find -name "*.c"` |wc -l

19517994

[root@centos8 linux-5.7.2]#find -name "*.c" | xargs cat |wc -l

19517994

常见的arch:

x86: i386, i486, i586, i686

x86_64: x64, x86_64, amd64

powerpc: ppc

跟平台无关:noarch

范例:

bash-3.2-32.el5_9.1.i386.rpm

bash-4.2.46-19.el7.x86_64.rpm

bash-4.4.19-7.el8.x86_64.rpm

bash-4.4.19-7.el8.aarch64.rpm

bash-4.4.19-7.el8.ppc64le.rpm

bc_1.07.1-2_amd64.deb

bc_1.07.1-2_s390x.deb

范例:统计rpm的架构类型及相应的包数量

[19:55:26 root@centos8 Packages]#ls | grep -Eo '[^.]+\.rpm$' |grep -Eo '^[^.]+' |sort |uniq -c

389 i686

208 noarch

1060 x86_64

[19:57:56 root@centos8 Packages]#ls | rev | cut -d. -f2 |rev |sort |uniq -c |sort -nr |head -3

1060 x86_64

389 i686

208 noarch

[19:59:59 root@centos8 Packages]#ls | grep -Eo '[^.]+\.rpm$' | cut -d. -f1 |sort |uniq -c

389 i686

208 noarch

1060 x86_64

分类和拆包

软件包为了管理和使用的便利,会将一个大的软件分类,放在不同的子包中。

包的分类

Application-VERSION-ARCH.rpm: 主包

Application-devel-VERSION-ARCH.rpm 开发子包

Application-utils-VERSION-ARHC.rpm 其它子包

Application-libs-VERSION-ARHC.rpm 其它子包

包的依赖

软件包之间可能存在依赖关系,甚至循环依赖,即:A包依赖B包,B包依赖C包,C包依赖A包安装软件包时,会因为缺少依赖的包,而导致安装包失败

解决依赖包管理工具:

yum:包管理器的前端工具

dnf:Fedora 18+ rpm包管理器前端管理工具,CentOS 8 版代替

yumapt:deb包管理器前端工具

zypper:suse上的rpm前端管理工具

程序包管理器相关文件

1.包文件组成 (每个包独有)

包内的文件

元数据,如:包的名称,版本,依赖性,描述等

可能会有包安装或卸载时运行的脚本

2.数据库(公共):/var/lib/rpm

程序包名称及版本

依赖关系

功能说明包

安装后生成的各文件路径及校验码信息

获取程序包的途径

软件包需要事先将源码进行编译后打包形成,获取包的途径如下:

系统发版的光盘或官方网站

CentOS镜像:

Ubuntu 镜像:

第三方组织提供

软件项目官方站点

搜索引擎

注意:第三方包建议要检查其合法性,来源合法性,程序包的完整性

自己制作

将源码文件,利用工具,如:rpmbuild,fpm等工具制作成rpm包文件

包管理器rpm

CentOS系统上使用rpm命令管理程序包

功能:

安装、卸载、升级、查询、校验、数据库维护

安装

格式

rpm {-i|--install} [install-options] PACKAGE_FILE...

选项

-i 安装软件包

-v: 详细心思

-vv: 更详细的信息

-h: 以#显示程序包管理执行进度

-q 查询软件是否安装,支持通配符

-e 卸载软件包

常用组合

rpm -ivh PACKAGE_FILE ...

rpm包安装[install-options]

--test: 测试安装,但不真正执行安装,即dry run模式

--nodeps:忽略依赖关系

--replacepkgs | replacefiles 覆盖原有的包

--nosignature: 不检查来源合法性

--nodigest:不检查包完整性

--noscripts:不执行程序包脚本

%pre: 安装前脚本--nopre

%post: 安装后脚本--nopost

%preun: 卸载前脚本 --nopreun

%postun: 卸载后脚本--nopostun

升级和降级

rpm包升级

rpm {-U|--upgrade} [install-options] PACKAGE_FILE...

rpm {-F|--freshen} [install-options] PACKAGE_FILE...

对应选项:

upgrade:安装有旧版程序包,则“升级”,如果不存在旧版程序包,则“安装”

freshen:安装有旧版程序包,则“升级”,如果不存在旧版程序包,则不执行升级操作

--oldpackage:降级

--force: 强制安装

常用组合

rpm -Uvh PACKAGE_FILE ...

rpm -Fvh PACKAGE_FILE ...

升级注意项:

(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核

(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件不会直接覆盖老版本的配置文件,而把新版本文件重命名(FILENAME.rpmnew)后保留

包查询

rpm {-q|--query} [select-options] [query-options]

[select-options]

-a:所有包

-f:查看指定的文件由哪个程序包安装生成

-p rpmfile:针对尚未安装的程序包文件做查询操作

[query-options]

--changelog:查询rpm包的changelog

-c:查询程序的配置文件

-d:查询程序的文档

-i:information

-l:查看指定的程序包安装后生成的所有文件

--scripts:程序包自带的脚本

#和CAPABILITY相关

--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供

--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖

--provides:列出指定程序包所提供的CAPABILITY

-R:查询指定的程序包所依赖的CAPABILITY

常用查询语法

-qa 查看所有安装包

-q PACKAGE

-qi PACKAGE 查看程序包的详细信息

-qc PACKAGE

-ql PACKAGE 查看程序包安装后生成的所有文件

-qd PACKAGE

-q --scripts PACKAGE

-qf FILE 查看指定文件由哪个程序包安装生成

-qpi PACKAGE_FILE

-qpl PACKAGE_FILE, ...

包卸载

格式

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

注意:当包卸载时,对应的配置文件不会删除,以FILENAME.rpmsave形式保留

范例:强行删除rpm包,并恢复

[root@centos7 ~]#rpm -e rpm --nodeps

#重启进入rescue模式

#mkdir /mnt/cdrom

#mount /dev/sr0 /mnt/cdrom

#rpm -ivh /mnt/cdrom/Packages/rpm-4.11.3-40.el7.x86_64.rpm --root=/mnt/sysimage

#reboot

包校验

在安装包时,系统也会检查包的来源是否是合法的

检查包的完整性和签名

rpm -K|--checksig rpmfile

在检查包的来源和完整性前,必须导入所需要公钥

范例:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

rpm -qa “gpg-pubkey*”

范例:CentOS 8

[20:15:00 root@centos8 Packages]#rpm -K /mnt/AppStream/Packages/httpd-2.4.37-11.module_el8.0.0+172+85fc1f40.x86_64.rpm

/mnt/AppStream/Packages/httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64.rpm: digests SIGNATURES NOT OK

[20:24:22 root@centos8 Packages]#cat /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

-----BEGIN PGP PUBLIC KEY BLOCK-----

Version: GnuPG v2.0.22 (GNU/Linux)

mQINBFzMWxkBEADHrskpBgN9OphmhRkc7P/YrsAGSvvl7kfu+e9KAaU6f5MeAVyn

rIoM43syyGkgFyWgjZM8/rur7EMPY2yt+2q/1ZfLVCRn9856JqTIq0XRpDUe4nKQ

8BlA7wDVZoSDxUZkSuTIyExbDf0cpw89Tcf62Mxmi8jh74vRlPy1PgjWL5494b3X

5fxDidH4bqPZyxTBqPrUFuo+EfUVEqiGF94Ppq6ZUvrBGOVo1V1+Ifm9CGEK597c

aevcGc1RFlgxIgN84UpuDjPR9/zSndwJ7XsXYvZ6HXcKGagRKsfYDWGPkA5cOL/e

f+yObOnC43yPUvpggQ4KaNJ6+SMTZOKikM8yciyBwLqwrjo8FlJgkv8Vfag/2UR7

JINbyqHHoLUhQ2m6HXSwK4YjtwidF9EUkaBZWrrskYR3IRZLXlWqeOi/+ezYOW0m

vufrkcvsh+TKlVVnuwmEPjJ8mwUSpsLdfPJo1DHsd8FS03SCKPaXFdD7ePfEjiYk

nHpQaKE01aWVSLUiygn7F7rYemGqV9Vt7tBw5pz0vqSC72a5E3zFzIIuHx6aANry

Gat3aqU3qtBXOrA/dPkX9cWE+UR5wo/A2UdKJZLlGhM2WRJ3ltmGT48V9CeS6N9Y

m4CKdzvg7EWjlTlFrd/8WJ2KoqOE9leDPeXRPncubJfJ6LLIHyG09h9kKQARAQAB

tDpDZW50T1MgKENlbnRPUyBPZmZpY2lhbCBTaWduaW5nIEtleSkgPHNlY3VyaXR5

QGNlbnRvcy5vcmc+iQI3BBMBAgAhBQJczFsZAhsDBgsJCAcDAgYVCAIJCgsDFgIB

Ah4BAheAAAoJEAW1VbOEg8ZdjOsP/2ygSxH9jqffOU9SKyJDlraL2gIutqZ3B8pl

Gy/Qnb9QD1EJVb4ZxOEhcY2W9VJfIpnf3yBuAto7zvKe/G1nxH4Bt6WTJQCkUjcs

N3qPWsx1VslsAEz7bXGiHym6Ay4xF28bQ9XYIokIQXd0T2rD3/lNGxNtORZ2bKjD

vOzYzvh2idUIY1DgGWJ11gtHFIA9CvHcW+SMPEhkcKZJAO51ayFBqTSSpiorVwTq

a0cB+cgmCQOI4/MY+kIvzoexfG7xhkUqe0wxmph9RQQxlTbNQDCdaxSgwbF2T+gw

byaDvkS4xtR6Soj7BKjKAmcnf5fn4C5Or0KLUqMzBtDMbfQQihn62iZJN6ZZ/4dg

q4HTqyVpyuzMXsFpJ9L/FqH2DJ4exGGpBv00ba/Zauy7GsqOc5PnNBsYaHCply0X

407DRx51t9YwYI/ttValuehq9+gRJpOTTKp6AjZn/a5Yt3h6jDgpNfM/EyLFIY9z

V6CXqQQ/8JRvaik/JsGCf+eeLZOw4koIjZGEAg04iuyNTjhx0e/QHEVcYAqNLhXG

rCTTbCn3NSUO9qxEXC+K/1m1kaXoCGA0UWlVGZ1JSifbbMx0yxq/brpEZPUYm+32

o8XfbocBWljFUJ+6aljTvZ3LQLKTSPW7TFO+GXycAOmCGhlXh2tlc6iTc41PACqy

yy+mHmSv

=kkH7

-----END PGP PUBLIC KEY BLOCK-----

[20:26:05 root@centos8 Packages]#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centostesting

[20:28:19 root@centos8 Packages]#rpm -K /mnt/AppStream/Packages/httpd-2.4.37-11.module_el8.0.0+172+85fc1f40.x86_64.rpm

/mnt/AppStream/Packages/httpd-2.4.37-11.module_el8.0.0+172+85fc1f40.x86_64.rpm: digests signatures OK

[20:29:02 root@centos8 Packages]#rpm -qa "gpg-pubkey*"

gpg-pubkey-8483c65d-5ccc5b19

[20:15:00 root@centos8 Packages]#rpm -qi gpg-pubkey-8483c65d-5ccc5b19

Name : gpg-pubkey

Version : 8483c65d

Release : 5ccc5b19

Architecture: (none)

Install Date: Wed 29 Jul 2020 04:02:56 PM CST

Group : Public Keys

Size : 0

License : pubkey

Signature : (none)

Source RPM : (none)

Build Date : Fri 03 May 2019 11:15:37 PM CST

Build Host : localhost

Relocations : (not relocatable)

Packager : CentOS (CentOS Official Signing Key)

Summary : gpg(CentOS (CentOS Official Signing Key) )

Description :

-----BEGIN PGP PUBLIC KEY BLOCK-----

Version: rpm-4.14.2 (NSS-3)

mQINBFzMWxkBEADHrskpBgN9OphmhRkc7P/YrsAGSvvl7kfu+e9KAaU6f5MeAVyn

rIoM43syyGkgFyWgjZM8/rur7EMPY2yt+2q/1ZfLVCRn9856JqTIq0XRpDUe4nKQ

8BlA7wDVZoSDxUZkSuTIyExbDf0cpw89Tcf62Mxmi8jh74vRlPy1PgjWL5494b3X

5fxDidH4bqPZyxTBqPrUFuo+EfUVEqiGF94Ppq6ZUvrBGOVo1V1+Ifm9CGEK597c

aevcGc1RFlgxIgN84UpuDjPR9/zSndwJ7XsXYvZ6HXcKGagRKsfYDWGPkA5cOL/e

f+yObOnC43yPUvpggQ4KaNJ6+SMTZOKikM8yciyBwLqwrjo8FlJgkv8Vfag/2UR7

JINbyqHHoLUhQ2m6HXSwK4YjtwidF9EUkaBZWrrskYR3IRZLXlWqeOi/+ezYOW0m

vufrkcvsh+TKlVVnuwmEPjJ8mwUSpsLdfPJo1DHsd8FS03SCKPaXFdD7ePfEjiYk

nHpQaKE01aWVSLUiygn7F7rYemGqV9Vt7tBw5pz0vqSC72a5E3zFzIIuHx6aANry

Gat3aqU3qtBXOrA/dPkX9cWE+UR5wo/A2UdKJZLlGhM2WRJ3ltmGT48V9CeS6N9Y

m4CKdzvg7EWjlTlFrd/8WJ2KoqOE9leDPeXRPncubJfJ6LLIHyG09h9kKQARAQAB

tDpDZW50T1MgKENlbnRPUyBPZmZpY2lhbCBTaWduaW5nIEtleSkgPHNlY3VyaXR5

QGNlbnRvcy5vcmc+iQI3BBMBAgAhBQJczFsZAhsDBgsJCAcDAgYVCAIJCgsDFgIB

Ah4BAheAAAoJEAW1VbOEg8ZdjOsP/2ygSxH9jqffOU9SKyJDlraL2gIutqZ3B8pl

Gy/Qnb9QD1EJVb4ZxOEhcY2W9VJfIpnf3yBuAto7zvKe/G1nxH4Bt6WTJQCkUjcs

N3qPWsx1VslsAEz7bXGiHym6Ay4xF28bQ9XYIokIQXd0T2rD3/lNGxNtORZ2bKjD

vOzYzvh2idUIY1DgGWJ11gtHFIA9CvHcW+SMPEhkcKZJAO51ayFBqTSSpiorVwTq

a0cB+cgmCQOI4/MY+kIvzoexfG7xhkUqe0wxmph9RQQxlTbNQDCdaxSgwbF2T+gw

byaDvkS4xtR6Soj7BKjKAmcnf5fn4C5Or0KLUqMzBtDMbfQQihn62iZJN6ZZ/4dg

q4HTqyVpyuzMXsFpJ9L/FqH2DJ4exGGpBv00ba/Zauy7GsqOc5PnNBsYaHCply0X

407DRx51t9YwYI/ttValuehq9+gRJpOTTKp6AjZn/a5Yt3h6jDgpNfM/EyLFIY9z

V6CXqQQ/8JRvaik/JsGCf+eeLZOw4koIjZGEAg04iuyNTjhx0e/QHEVcYAqNLhXG

rCTTbCn3NSUO9qxEXC+K/1m1kaXoCGA0UWlVGZ1JSifbbMx0yxq/brpEZPUYm+32

o8XfbocBWljFUJ+6aljTvZ3LQLKTSPW7TFO+GXycAOmCGhlXh2tlc6iTc41PACqy

yy+mHmSv

=kkH7

-----END PGP PUBLIC KEY BLOCK-----

[20:18:33 root@centos8 Packages]#rpm -K /mnt/AppStream/Packages/httpd-2.4.37-11.module_el8.0.0+172+85fc1f40.x86_64.rpm

/mnt/AppStream/Packages/httpd-2.4.37-11.module_el8.0.0+172+85fc1f40.x86_64.rpm: digests signatures OK

范例:校验包文件

[20:31:39 root@centos8 Packages]#rpm -K tree-1.7.0-15.el8.x86_64.rpm

tree-1.7.0-15.el8.x86_64.rpm: digests signatures OK

[20:32:10 root@centos8 Packages]#cp tree-1.7.0-15.el8.x86_64.rpm /data

[20:32:18 root@centos8 Packages]#cd /data

[20:32:22 root@centos8 data]#ll

total 68

-r--r--r-- 1 root root 60780 Aug 12 20:32 tree-1.7.0-15.el8.x86_64.rpm

[20:32:26 root@centos8 data]#echo >> tree-1.7.0-15.el8.x86_64.rpm

[20:32:41 root@centos8 data]#cd

[20:32:53 root@centos8 ~]#rpm -K /data/tree-1.7.0-15.el8.x86_64.rpm

/data/tree-1.7.0-15.el8.x86_64.rpm: DIGESTS SIGNATURES NOT OK

软件在安装时,会将包里的每个文件的元数据,如:大小,权限,所有者,时间等记录至rpm相关的数据库中,可以用来检查包中的文件是否和当初安装时有所变化

rpm {-V|--verify} [select-options] [verify-options]

示例:

[20:37:21 root@centos8 ~]#rpm -qf /etc/issue

centos-release-8.0-0.1905.0.9.el8.x86_64

[20:38:17 root@centos8 ~]#rpm -V centos-release-8.0-0.1905.0.9.el8.x86_64

S.5....T. c /etc/issue

S.5....T. c /etc/yum.repos.d/CentOS-Base.repo

S 文件大小不同

M 模式不同(包括权限和文件类型)

5 摘要(以前的MD5和)不同

D 设备主/副号码不匹配

L 路径不匹配

U 用户所有权不同

G 组所有权不同

T 修改文件时间不同

P 能力不同

. (点) 表示当前位置代表的字符含义一致

#c 所在的位置表示文件类型

c 配置文件

d 文件数据文件

g 该文件不属于某个文件(少数情况)

l 许可证文件(license file)

r 自述文件(READ ME)

范例:

[20:45:33 root@centos8 ~]#cat /etc/issue

\S

Kernel \r on an \m

\l

\t

\n

[20:46:36 root@centos8 ~]#rpm -V centos-release

S.5....T. c /etc/issue

S.5....T. c /etc/yum.repos.d/CentOS-Base.repo

[20:46:54 root@centos8 ~]#vim /etc/issue

[20:47:49 root@centos8 ~]#cat /etc/issue

\S

Kernel \r on an \m

[20:47:58 root@centos8 ~]#rpm -V centos-release

.......T. c /etc/issue

S.5....T. c /etc/yum.repos.d/CentOS-Base.repo

[20:48:45 root@centos8 ~]#rpm -ql centos-release

/etc/centos-release

/etc/centos-release-upstream

/etc/dnf/vars/contentdir

/etc/dnf/vars/infra

/etc/issue

/etc/issue.net

/etc/os-release

/etc/pki/rpm-gpg

/etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

/etc/pki/rpm-gpg/RPM-GPG-KEY-centostesting

/etc/redhat-release

/etc/rpm/macros.dist

/etc/system-release

/etc/system-release-cpe

/etc/yum.repos.d/CentOS-AppStream.repo

/etc/yum.repos.d/CentOS-Base.repo

/etc/yum.repos.d/CentOS-CR.repo

/etc/yum.repos.d/CentOS-Debuginfo.repo

/etc/yum.repos.d/CentOS-Extras.repo

/etc/yum.repos.d/CentOS-Media.repo

/etc/yum.repos.d/CentOS-PowerTools.repo

/etc/yum.repos.d/CentOS-Sources.repo

/etc/yum.repos.d/CentOS-Vault.repo

/etc/yum.repos.d/CentOS-centosplus.repo

/etc/yum.repos.d/CentOS-fasttrack.repo

/usr/lib/systemd/system-preset/85-display-manager.preset

/usr/lib/systemd/system-preset/90-default.preset

/usr/lib/systemd/system-preset/99-default-disable.preset

/usr/share/centos-release/EULA

/usr/share/doc/centos-release/Contributors

/usr/share/doc/centos-release/GPL

/usr/share/doc/redhat-release

/usr/share/redhat-release

[20:50:02 root@centos8 ~]#rpm -Va

.M....... g /var/log/dnf.librepo.log

.M....... g /var/log/dnf.log

.M....... g /var/log/dnf.rpm.log

.M....... g /var/log/hawkey.log

.M....G.. g /var/log/lastlog

.M....... g /var/cache/dnf/packages.db

.M....... g /etc/udev/hwdb.bin

.M....... g /var/lib/systemd/random-seed

.......T. c /etc/issue

S.5....T. c /etc/yum.repos.d/CentOS-Base.repo

.M....... /mnt

.......T. c /etc/kdump.conf

.M....... c /etc/rc.d/rc.local

.M.....T. /usr/bin/chmod

.M....... g /run/dbus

.M....G.. g /var/log/lastlog

.M....... c /etc/machine-id

missing c /etc/systemd/system/dbus-org.freedesktop.resolve1.service

.M....... g /var/cache/private

.M....... g /var/lib/private

.M....... g /var/log/btmp

.M....... g /var/log/private

S.5....T. c /var/lib/unbound/root.key

.M....... d /usr/share/info/dir.old

.M....... g /var/lib/plymouth/boot-duration

.....UG.. g /var/lib/sss/mc/group

.....UG.. g /var/lib/sss/mc/initgroups

.....UG.. g /var/lib/sss/mc/passwd

.M....... /var/log/audit

.M.....T. c /etc/default/useradd

.M....... g /boot/System.map-4.18.0-80.el8.x86_64

.M....... g /boot/initramfs-4.18.0-80.el8.x86_64.img

数据库

rpm包安装时生成的信息,都放在rpm数据库中

/var/lib/rpm

可以重建数据库

rpm {--initdb|--rebuilddb}

initdb: 初始化,如果事先不存在数据库,则新建之,否则,不执行任何操作

rebuilddb:重建已安装的包头的数据库索引目录

程序包编译

源码编译介绍

程序包编译安装:

源代码-->预处理-->编译-->汇编-->链接-->执行

多文件:文件中的代码之间,很可能存在跨文件依赖关系

虽然有很多开源软件将软件打成包,供人们使用,但并不是所有源代码都打成包,如果想使用开源软件,可能需要自已下载源码,进行编译安装。另外即使提供了包,但是生产中需要用于软件的某些特性,仍然需要自行编译安装。但是利用源代码编译安装是比较繁琐的,庆幸的是有相关的项目管理工具可以大大减少编译过程的复杂度

开源程序源代码获取

项目官方自建站点:

​ apache.org (ASF:Apache Software Foundation)

​ mariadb.org

​ ...

代码托管:

​ Github.com

​ gitee.com

​ SourceForge.net

​ code.google.com

编译源码的项目工具

C、C++的源码编译:使用 make 项目管理器

configure脚本 --> Makefile.in --> Makefile

相关开发工具:

autoconf: 生成configure脚本

automake:生成Makefile.in

java的源码编译: 使用 maven

C语言源代码编译安装过程

利用编译工具,通常只需要三个大的步骤

./configure

(1) 通过选项传递参数,指定安装路径、启用特性等;执行时会参考用户的指定以及Makefile.in文件生成Makefile

(2) 检查依赖到的外部环境,如依赖的软件包

make 根据Makefile文件,会检测依赖的环境,进行构建应用程序

make install 复制文件到相应路径

注意:安装前可以通过查看README,INSTALL获取帮助

编译安装准备

准备:安装相关的依赖包

开发工具:make, gcc (c/c++编译器GNU C Complier)

开发环境:开发库(glibc:标准库),头文件,可安装开发包组 Development Tools

软件相关依赖包

生产实践:基于最小化安装的系统建议安装下面相关包

yum install gcc make autoconf gcc-c++ glibc glibc-devel pcre pcre-devel opensslopenssl-devel systemd-devel zlib-devel vim lrzsz tree tmux lsof tcpdump wget net-tools iotop bc bzip2 zip unzip nfs-utils man-pages

编译安装

第一步:运行 configure 脚本,生成 Makefile 文件

其选项主要功能:

可以指定安装位置

指定启用的特性

获取其支持使用的选项

./configure --help

选项分类:

安装路径设定

--prefix=/PATH:指定默认安装位置,默认为/usr/local/

--sysconfdir=/PATH:配置文件安装位置

System types:支持交叉编译

软件特性和相关指定:

Optional Features: 可选特性

--disable-FEATURE

​ --enable-FEATURE[=ARG]

Optional Packages: 可选包

​ --with-PACKAGE[=ARG] 依赖包

​ --without-PACKAGE 禁用依赖关系

注意:通常被编译操作依赖的程序包,需要安装此程序包的“开发”组件,其包名一般类似于name-devel-VERSION

第二步:make

第三步:make install

安装后的配置

二进制程序目录导入至PATH环境变量中

​ 编辑文件/etc/profile.d/NAME.sh

export PATH=/PATH/TO/BIN:$PATH

相关用户及文件

​ 有些开源软件编译完成后,还需要创建相关的用户及文件

导入帮助手册

​ 编辑/etc/man.config|man_db.conf文件,添加一个MANPATH

编译安装实战实例

官网下载并编译安装新版 tree

范例:CentOS 7 编译安装 tree1.8

#1 安装相关的依赖包

[14:15:04 root@centos7 ~]#yum install -y gcc make

#2 下载源码并解压

[root@centos7 ~]#tar xvf tree-1.8.0.tgz

#3 进入解压缩的目录,README和INSTALL

[root@centos7 ~]#cd tree-1.8.0/

[root@centos7 tree-1.8.0]#cat README

[root@centos7 tree-1.8.0]#cat INSTALL

#4 修改源码的版本号

[root@centos7 tree-1.8.0]#sed -i 's#v1\.8\.0#v.8.8.8#' tree.c

#5 编译准备

[root@centos7 tree-1.8.0]#vim Makefile

prefix = /apps/tree

#6 编译

[root@centos7 tree-1.8.0]#make

#7 安装

[root@centos7 tree-1.8.0]#make install

#8 修改PATH变量

#默认无法直接运行tree

[root@centos7 ~]#tree-bash: tree: command not found

[root@centos7 ~]#echo 'PATH=/apps/tree/bin:$PATH' > /etc/profile.d/tree.sh

[root@centos7 ~]. /etc/profile.d/tree.sh

#或者利用软链接实现

[root@centos7 ~]#ln -s /apps/tree/bin/tree /usr/local/bin

#9 验证结果

[root@centos7 ~]#tree --versiontree

v8.8.8 (c) 1996 - 2018 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro

#10 添加man帮助

#默认无法查看man

[root@centos7 ~]#man tree

No manual entry for tree

[root@centos7 ~]#vim /etc/man_db.conf

MANDATORY_MANPATH /apps/tree/man

[root@centos7 ~]#man tree

#11 运行tree查看生成的文件列表

[root@centos7 ~]#tree /apps/tree

/apps/tree

├── bin

│ └── tree

└── man

└── man1

└── tree.1

3 directories, 2 files

编译安装 cmatrix

范例:CentOS 8 编译安装 cmatrix

#1 安装相关包[root@centos8 ~]#dnf install gcc make autoconf ncurses-devel

#2 下载并解压缩包[root@centos8 ~]#cd /usr/local/src

[root@centos8 src]#wget

https://github.com/abishekvashok/cmatrix/releases/download/v2.0/cmatrix-v2.0-Butterscotch.tar

[root@centos8 src]#tar xvf cmatrix-v2.0-Butterscotch.tar

#3 配置

[root@centos8 ~]#cd cmatrix

[root@centos8 cmatrix]#./configure --prefix=/apps/cmatrix

#4 编译并安装

[root@centos8 cmatrix]#make && make install

#5 配置环境

[root@centos8 ~]#echo 'PATH=/apps/cmatrix/bin:$PATH' > /etc/profile.d/cmatrix.sh

[root@centos8 ~]#. /etc/profile.d/cmatrix.sh

#或者用软链接实现

[root@centos8 ~]#ln -sv /apps/cmatrix/bin/cmatrix /usr/local/bin/

#6运行

[root@centos8 ~]#cmatrix -a -b -C yellow7

#帮助

[root@centos8 ~]#vim /etc/man_db.conf

MANDATORY_MANPATH /apps/cmatrix/share/man

[root@centos8 ~]#man cmatrix

编译安装 httpd2.4

范例:centos8 编译安装 httpd-2.4.46

#安装前准备:关闭防火墙和SELinux

#1 安装相关包

[root@centos8 ~]#dnf install gcc make autoconf apr-devel apr-util-devel pcre-devel openssl-devel redhat-rpm-config

#2 下载并解压缩包

[root@centos8 ~]#wget https://mirror.bit.edu.cn/apache//httpd/httpd-2.4.46.tar.bz2[root@centos8 ~]#tar xvf httpd-2.4.46.tar.bz2 -C /usr/local/src

#3 配置

[root@centos8 ~]#cd /usr/local/src/httpd-2.4.43/

[root@centos8 httpd-2.4.46]#./configure --prefix=/apps/httpd --sysconfdir=/etc/httpd --enable-ssl

#4 编译并安装

[root@centos8 httpd-2.4.46]#make -j 4 && make install

#5 配置环境

[root@centos8 ~]#echo 'PATH=/apps/httpd/bin:$PATH' > /etc/profile.d/httpd.sh

[root@centos8 ~]#. /etc/profile.d/httpd.sh

#6 运行

[root@centos8 ~]#apachectl start

#7 指定用apache用户运行

[root@centos8 ~]#useradd -r -s /sbin/nologin -d /var/www -c Apache -u 48 apache

[root@centos8 ~]#vim /etc/httpd/httpd.conf

user apache

group apache

#8 配置生效和验证

[root@centos8 ~]#apachectl restart

#9 查看进程

[root@centos8 ~]#ps aux

#10 用浏览器打开以下地址,可以看下面页面

linux系统软件包分类,Linux软件包管理和编译安装相关推荐

  1. 基于Linux系统的KingbaseES数据库软件安装指南(3. 安装前准备工作)

    3. 安装前准备工作 硬件环境要求 软件环境要求 安装包准备 检查和配置环境 预安装工作 3.1. 硬件环境要求 金仓数据库管理系统KingbaseES V8.6 支持通用X86_64.龙芯.飞腾.鲲 ...

  2. 基于 Linux 系统的 KingbaseES 数据库软件安装指南(5. 安装后检查)

    5. 安装后检查 在安装完成后,您可以通过以下几种方式进行安装正确性验证: 查看安装日志 在 ${安装目录}/install/Logs 目录下,存在名称如 "KingbaseES_V8_安装 ...

  3. 『无欲则无求』Linux软件包管理 — 39、Linux系统软件包介绍

    文章目录 1.Linux系统软件包分类 2.源码包 (1)什么是源码包 (2)源码包的优点 (3)源码包的缺点 3.二进制包 (1)二进制包分类 (2)RPM包的优点: (3)RPM包的缺点: 4.R ...

  4. linux软件包管理 pdf,中标麒麟Linux系统软件包管理介绍(22页)-原创力文档

    中标麒麟Linux服务器操作系统培训系列 中标麒麟Linux系统软件包管理介绍 技术创新,变革未来 本章目标 •了解中标麒麟Linux服务器操作系统中应用程序的 组成: •了解中标麒麟Linux服务器 ...

  5. 【Java从0到架构师】Linux 应用 - 软件包管理、软件安装

    Linux 应用 - 软件包管理.软件安装 软件包管理器 rpm yum 软件的安装 jdk 1.8 mysql 5.7 tomcat8 Java 从 0 到架构师目录:[Java从0到架构师]学习记 ...

  6. Alpine linux 小内存版,Alpine Linux系统-Alpine Linux系统【轻量级Linux】下载v3.11.0 最新版-西西软件下载...

    Alpine Linux系统[轻量级Linux],Alpine Linux其实就是一个清凉版的Linux系统,通过牺牲一些不常用的功能和特性来达到更加轻巧的体积以及更快的响应速度.Alpine Lin ...

  7. 电脑安装linux系统需要下载什么软件,教你如何在Linux中安装应用软件

    新的操作系统装好了,安装一些新的软件那是难免的.但是在Linux中,安装应用软件和Windows下有些不同哦.而且对于Linux初学者来说,安装软件是一件很让人头疼的事情.由于很多Linux应用软件都 ...

  8. Linux网卡图形化,Linux系统无线网络图形化软件(LinSSID)使用方法

    LinSSID是款无线网络图形化的软件,我们可以使用它来设置宽带网络与无线网络搜索,是Linux系统中非常实用的工具,那么Linux系统下又该如何使用LinSSID软件呢?一起来看看豆豆给大家整理的使 ...

  9. Linux系统软件包的管理   3月30日课程

    Linux系统软件包的管理 一. rpm工具 rpm Redhat Package Manager, 设计理念是开放的,不仅仅是在RedHat平台上,在SUSE上也是可以使用的. rpm包名字构成由- ...

最新文章

  1. “新SaaS”引爆产业奇点《2017中国SaaS用户研究报告》
  2. Istio1.5 Envoy 数据面 WASM 实践
  3. tomcat9-jenkins:insufficient free space available after evicting expired cache entries-consider
  4. python经济_python生成器——懒到欠揍,但很经济
  5. linux apache php显示源码,linux 源码安装apache PHP 问题
  6. 使用 position: sticky 达到粘性元素区域悬浮效果
  7. NeurIPS2021 VALUE:快来刷榜吧!微软提出视频多模态新基准,同时含检索、caption、QA等多个任务!...
  8. torch各个版本镜像_如何解决在cuda上安装torch后torch.cuda.is_available()返回False
  9. 关于SO引用的过滤:abiFilters
  10. [项目回顾]基于Annotation与SpringAOP的缓存简单解决方案
  11. NFS rhel 7
  12. 如何用PS将一张图片裁剪成圆形?
  13. 网易云音乐每日推荐自动保存为新歌单
  14. iphonex 测试电池软件,iPhoneX电池容量多大 iPhoneX电池性能评测【详解】
  15. 【组合数学】递推方程 ( 常系数线性齐次递推方程 | 常系数、线性、齐次 概念说明 | 常系数线性齐次递推方程公式解法 | 特征根 | 通解 | 特解 )
  16. 360 os3.0 android7.1,【360 N6】360OS安卓7.1系统V3.0.070付费纯净版ROOT刷机包
  17. webstorm 激活破解方法
  18. 记录一次使用Redis中ZSet和List分页
  19. 土地利用数据分类过程教学/土地利用分类/遥感解译/地理数据获取
  20. latex中的三种字体格式

热门文章

  1. BCH正式升级,智能合约,逐梦而来!
  2. Spring boot ----RestTemplate学习笔记
  3. C#开发中碰到的问题------Uncaught TypeError: Cannot read property 'style' of undefined
  4. prototype中顶层元素的测试
  5. lvs keepalived的tcp 长连接的问题解决办法
  6. [Node] 重要外部模块
  7. 艾伟:WCF从理论到实践(11)-异步
  8. 快排--java实现
  9. 移动端监听安卓手机返回键
  10. jsp/servlet与ajax实现简单局部日期时间更新