程序包

程序包管理之编译源代码安装

为什么要进行源代码编译安装?

1.对应的程序包并不能直接获取到;

2.已经编译好的二进制中,尚不包含我们所需要的功能;

3.已经编译好的二进制中,包含的功能太多,我们并不需要;

1.想要使用某个程序包,但是找不到可用的二进制包;

2.想要使用的程序包有二进制格式的,我们所需要的的功能或特性并没有被编译;

程序的源代码包有两种格式:

原始的源代码包:name-VERSION.tar.gz

tar xf命令释放包中的源码文件

rpm封装的源代码包:name-VERSION.release.src.rpm

rpm -ivh 将源代码文件安装到某个目录中;

源代码程序包的组织形式:

多个源代码文件,

同一个文件的不同代码段或者式不同文件的不同代码段之间可能有依赖关系;

在编译源代码的时候,必须要首先编译某些代码段,或者说必须先编译某个文件中的代码段,然后才能进行后续的编译;

在源代码文件之间可能存在跨文件的依赖关系,这种依赖关系只有其作者最为清楚

程序员为了让用户能够比较轻松的了解文件与文件之间,代码段与代码段之间的依赖关系,他们会编写说明性文档;

后来程序员会为每一个源代码文件附加一个头部信息,用以说明文件和代码段的依赖关系,程序员开发了一个工具专门提取此类信息并汇总,结合程序员给提供的配置末班,有针对性的生成按章的说明文档,其中包括:此次编译调用哪个预处理器? 如何进行预处理? 调用哪个编译器? 调用哪个汇编器? 如何进行汇编? 程序需要安装在那个路径下?

源代码项目管理工具

C/C++: make

java:maven

python:buildout

说明性的文档:makefile 这样的文件并不是固定不变的,而是根据用户进行选择而进行不断变化的

makefile文件用makefile.in(makefile.win)的模板生成的

利用configure脚本,接受用户的选择,并且configure脚本会将所有接收来的信息汇总到makefile.in模板上,替换模板中相应的内容,从而生成makefile文件

程序员编写源代码,并且给源代码文件增加头部信息;提供Makefile.in的模版文件;

需要autoconf工具,生成configure脚本;

需要automake工具,并利用configure脚本接受来的所有参数,创建makefile文件

有了正确的makefile文件,可以使用make命令来进行源代码编译

预处理-->编译-->汇编-->链接-->生成可执行的二进制文件

安装二进制文件--将二进制文件复制到正确的目录路径中 在现在的源代码编译过程中如果在源代码包中已经有了configure脚本,我们还需要做下列工作

1.使用./configure脚本根据用户所提供的选项信息生成makefile文件

2.make

3.make install

建议:在真正的安装程序包之前最好先查看源代码包中的install的文件,如果没有这个文件,则查看readme的文件;

如何获得开源程序的源代码包

1.发布程序的官方站点  apache.org  mariadb.org kernel.org

2.代码托管站点

SourceForge

Github.com

code.google.com

在Linux系统上进行源代码编译安装的前提:

1.编译开发环境必须符合要求

centos6系统

yum groupinstall"Development tolls" "server platform development"

centos7系统

yum groups install "Development tolls"

2.编译器要符合要求

gcc,cpp,make,automake...

3.编译时所用到的标准库要完备 glibc,c标准库

满足上述条件之后,接下来可以进行源代码编译安装

1.运行configure脚本

大量的选项:置顶安装过程中所用到的各种路径,启动或关闭的特性等

--help:获取该程序包所支持的所有选项

选项的分类

安装路径选项

--prefix=路径(/PATH/TO/SOFTWARE_INSTALL)

系统类型选项

如果所有的系统类型选项都不选择,则默认在本机的默认操作系统和本级的平台架构基础之上进行编译,也可以在编译的时候选择其他文件系统和其他的平台类型,这种情况通常称为交叉编译;

可选特性选项:

--disable-FEATURE

--enable-FEATURE

在编译源代码的时候,选择启用或禁用某项功能或特性

可选程序包选项:

在编译源代码的时候,源代码中的某些特性可能会依赖其他外部程序包

--with-PACKAGE

--without-PACKAGE

选择使用或不使用外部程序包

上述命令及选项之后会在源代码目录中自动创建出makefile文件

2.make [-j] #(不能超过处理器核心数)

3.make install

源代码安装之后,要做收尾工作

1.到处二进制程序所在的目录到PATH变量中;

在/etc/profile.d/name.sh

export PATH=/PATH/TO/BINARY:$PATH

source /etc/profile.d/name.sh

2.导出库文件:

编辑/etc/ld.so.conf.d/name.conf

/PATH/TO/SOFTWARE_LIBRARY

ldconfig [-v]

3.导出头文件:

创建对应的符号链接

ln -sv /PATH/TO/HEAD_FILE /uer/include/name

4.导出帮助文件

centos7中默认已经导出帮助文件

centos6

编辑/etc/man.config文件,在该文件中添加一个新行

MANPATH=/PATH/TO/MAN_FILE

举例安装httpd-2.4.18

1.首先要解决开发工具环境;

yum groupinstall "Development tools"

2.使用适合httpd-2.4.18版本的apr及apr-util工具;

安装apr工具

~]# tar xf apr-1.5.2.tar.bz2 -C /usr/src

~]# cd /usr/src/apr-1.5.2

~]# ./configure --prefix=/usr/local/apr-1.5.2

~]# make

~]# make install

安装arp-util工具

~]# tar xf apr-util-1.5.4.tar.bz2 -C /usr/src

~]# cd /usr/src/apr-util-1.5.4

~]# ./configure --prefix=/usr/local/apr-util-1.5.4 --with-apr=/usr/local/apr-1.5.2

~]# make

~]# make install

3.需要安装pcre-devel以满足httpd的正则表达式使用需求;

yum -y install pcre-devel

编译安装httpd:

~]# tar xf httpd-2.4.18.tar.gz -C /usr/src

~]# cd /usr/src/httpd-2.4.18

~]# ./configure --with-apr=/usr/local/apr-1.5.2 --with-apr-util=/usr/local/apr-util-1.5.4

~]# make

~]# make install

收尾:

1.导出二进制文件:

vim /etc/profile.d/httpd.sh

export PATH=/usr/local/apache2/bin:$PATH

source /etc/profile.d/httpd.sh

2.导出库文件:

vim /etc/ld.so.conf.d/httpd-x86_64.conf

/usr/local/apache2/modules

ldconfig -v

3.导出头文件:

ln -sv /usr/local/apache2/include /usr/include/httpd

时间: 2024-11-08 09:48:18

程序包的相关文章

学习笔记之Linux程序包管理rpm、yum、编译

无论是Windows系统还是Linux系统,我们用户想要在操作系统上获得更多的乐趣还是更多的功能的话,就需要在一个干净的系统上安装各式各样的软件程序,Linux上的是ELF格式的,目前比较常见的程序包管理器如: Redhat软件包管理器---rpm Debian软件包管理器---dpkg 一.1.RPM 安装:rpm {-i|--install} [install-options] PACKAGE_FILE... -v: verbose,详细信息 -vv: 更详细的输出 -h: hashmark

Linux之Redhat系列程序包管理

安装.升级和卸载应用软件是每个系统不可或缺的一部分:对于在企业使用越来越广泛的Linux操作系统而言,强大而简洁的程序包管理机制为工程师们带来了很大的便利:下文主要介绍在RedHat系列的系统上如何使用RPM/YUM/编译三种方式去管理程序包. 一.RPM程序包管理 PRM全称是Red Hat Package Manager(RedHat 包管理器).Linux RPM软件包的命名有一定的规律:名称-版本-修正版-类型.rpm 例如: RPM命令详解: 功能: 安装.卸载.升级.查询和数据库维护

项目 XXX 的 NuGet 程序包还原失败:找不到“xxx”版本的程序包“xxx”

项目 XXX 的 NuGet 程序包还原失败:找不到“xxx”版本的程序包“xxx” 编译新下载的代码出错 修改包管理器的源为 http://www.nuget.org/api/v2/ .重试后成功 记得打勾

谢烟客---------Linux之程序包管理yum使用和编译安装

yum命令及仓库创建与配置 YUM 原理 安装.卸载.查询.升级.检查,本地缓存.重装.降级.历史.获取帮助 仓库 变量.事务.URL.开销.镜像.元数据存储方式及组成 createrepo作用.命令.lftp命令 编译安装  目的 原理 开发工具及开发环境 编译后的处理 获取程序包源代码的途径 YUM Redhat二次发行版 Yellow Dog Linux,上使用的yum(Yellowdog Update Modifier),由yellow dog 研发 yum命令的工作原理 1.接收用户命

磁盘配额,程序包

磁盘配额 文件服务器:共享存储空间,让用户能够随时存储数据 FTP SMB 网盘 磁盘配额:主要是针对这类文件服务器进行用户的磁盘空间使用限制而提出的. 磁盘配额的设定对象: 1.能够实施读写操作的块设备 2.要有正确的文件系统 磁盘配额限制哪些人的访问行为: 1.用户 为指定的用户限制磁盘使用量 1.磁盘空间(块)  一个block的限制,代表1KB的存储空间 2.inode的使用量 2.组 限制指定组中所有成员的磁盘使用量的总和 磁盘配额的类型: soft limit:软限制 当用户的磁盘使

CentOS程序包管理器之rpm前端管理器

CentOS的程序包管理器: 首先,我们要来了解一下程序包(源代码包)的命名规则: software_name-VERSION.tar.gz VERSION:major.minor.release major:主版本号,通常代表重大功能改进的版本分支: minor:次版本号,通常代表在某个版本的分支中的某个功能发生变化: release:发行版本号,修复了某些bug或者对某段代码进行了优化: 例如:apache-tomcat-7.0.63.tar.gz 而rpm程序包命名规则为: 源码包:sou

rpm程序包管理器详解

1. 程序包管理器的功能 我们知道,由程序员编写并提供的程序源代码要转换成目标二进制格式才能在计算机上运行起来,但用户要在平台上使用时需要手动编译安装后才能使用,对于普通用户来说有一定难度.因此为了降低普通用户对应用程序的使用难度,程序员可在提供源代码的同时提供已在特定环境下编译好的程序文件,只要用户的平台环境和程序员的平台环境相同,就可以通过解压程序员提供的二进制格式文件即可使用,而无需自己手动编译安装. 一个已编译好的程序由二进制程序.库文件.配置文件和帮助手册等组成,而程序包管理器的功能就

解决红帽6.8无法使用前端包管理工具YUM安装程序包问题

红帽的YUM源需要注册用户才能更新使用,由于CentOS和RHEL基本没有区别,并且CentOS已经被REHL收购.所以将RHEL的YUM源替换为CentOS即可: 问题描述: 看安装提示信息 [[email protected] ~]# yum install httpd Loaded plugins: product-id, search-disabled-repos, security, subscription-manager This system is not registered 

linux 程序包管理

如何实现在linux安装,更新程序. 硬件--内核(系统调用接口)--库调用接口(32位,64位) API:Application Programming Interface POSIX:可移植系统,源代码级别各系统都是兼容的. 程序的源代码文件--预处理--编译--汇编--链接 静态编译:不依赖外部环境 共享编译:直接调用lib .so 文件 linux支持elf,windows支持exe,因为ABI不同(应用二进制接口) 库级别虚拟化,WINE 可以在linux跑windows程序,CYWI

10 Linux程序包管理

CentOS系统上rpm命令管理程序包:        安装.卸载.升级.查询.校验.数据库维护          安装:               rpm {-i|--install} [install-options] PACKAGE_FILE ...                      -v: verbose                      -vv: -h: 以#显示程序包管理执行进度:每个#表示2%的进度                        rpm -ivh