文章目录
Linux源码包(Source Code Packages)
Linux源码包是Linux系统中软件包的一种形式,它包含了软件的源代码程序,这些程序是由程序员按照特定的格式和语法编写出来的。源码包通常需要经过编译过程,将源代码转换成计算机可以直接执行的二进制程序。
一、源码包的特点
- 开源性:源码包是开源的,用户可以查看、修改源代码,这为用户提供了极大的灵活性和定制性。
- 可定制性:用户可以根据自己的需求选择安装源码包中的特定功能,或者对源代码进行修改以满足特定的需求。
- 兼容性:由于源码包是编译安装的,因此可以更好地适应不同的系统和硬件环境,提高软件的稳定性和效率。
- 安装过程复杂:源码包的安装过程相对复杂,需要用户具备一定的编译和安装知识,包括检查系统环境、配置安装选项、编译源代码等步骤。
二、源码包的获取
源码包通常可以从软件的官方网站、开源社区或第三方软件仓库中获取。它们通常以压缩包的形式存在,如tar.gz、tar.bz2等格式。用户可以使用相应的解压缩工具将源码包解压到指定目录。
三、源码包的安装步骤
- 下载源码包:从合适的来源下载所需软件的源码包。
- 解压缩源码包:使用tar等解压缩工具将源码包解压到指定目录。
- 检查系统环境:确保系统中已安装必要的编译工具和依赖库。例如,对于使用C语言编写的源码包,通常需要安装gcc编译器。
- 配置安装选项(可选):使用源码包自带的configure脚本配置安装选项,如安装目录、启用的功能等。这一步是可选的,但强烈建议用户根据自己的需求进行配置。
- 编译源码:使用make命令编译源码。这一步可能需要较长时间,具体取决于源码的复杂性和系统的性能。
- 安装软件:编译完成后,使用make install命令将编译好的程序安装到指定目录。
四、注意事项
- 检查依赖关系:在编译源码之前,务必检查源码包的依赖关系,确保所有必要的依赖库都已安装。
- 备份重要数据:在安装源码包之前,建议备份重要数据以防万一。
- 解决编译错误:如果在编译过程中遇到错误,需要根据错误提示进行相应的解决。这可能需要查阅相关的文档或搜索解决方案。
- 卸载源码包:由于源码包没有专门的卸载命令,如果需要卸载已安装的源码包,通常需要手动删除安装目录及其相关文件。
优点与缺点
优点
- 高度可定制性:
- 用户可以根据自己的需求编译和安装源码包中的特定功能,去掉不需要的部分,实现高度的个性化定制。
- 更好的兼容性和性能:
- 由于源码包是编译安装的,用户可以针对自己的系统和硬件环境进行优化编译,从而获得更好的兼容性和性能表现。
- 开源和透明度:
- 源码包是开源的,用户可以查看和修改源代码,理解软件的工作原理,增加对软件的信任度。
- 无依赖问题(部分情况下):
- 对于一些复杂的软件,预编译的二进制包可能依赖于特定的库版本或系统配置。而源码包则允许用户从头开始构建软件,减少了依赖问题。
- 安全性:
- 用户可以审查源代码,查找并修复潜在的安全漏洞,从而增强系统的安全性。
缺点
- 安装过程复杂:
- 相比预编译的二进制包,源码包的安装过程更加复杂,需要用户具备编译和安装知识,包括检查系统环境、配置安装选项、解决编译错误等。
- 编译时间长:
- 编译源码包可能需要较长时间,特别是对于大型项目或性能较低的系统。
- 依赖管理复杂:
- 在编译源码包之前,用户需要手动安装所有必要的依赖库和工具,这可能会变得相当繁琐,尤其是在处理具有大量依赖的软件时。
- 维护成本高:
- 由于源码包是用户自行编译的,因此在软件更新时,用户需要重新下载源码包、编译并安装新版本,这增加了维护成本。手动安装的源码包可能难以与系统其他软件保持版本一致性,这可能导致兼容性问题或升级困难。
- 不适用于所有用户:
- 对于不熟悉编译和安装过程的用户来说,源码包可能不是一个好的选择。与使用包管理器安装的二进制包相比,源码包的安装和管理在自动化运维中更加复杂,不易于版本控制和批量部署。
综上所述,Linux源码包在提供高度可定制性和透明度的同时,也带来了安装过程复杂、编译时间长等挑战。用户需要根据自己的需求和技能水平来选择是否使用源码包。
源码包的下载与安装步骤
从源码包安装软件的步骤相对固定,主要包括下载源码包、解压源码包、进入源码目录、执行配置和编译命令、以及安装软件等步骤。以下以安装Git和Nginx为例进行说明。
一、从源码包安装软件的步骤
1. 下载源码包
- 来源:源码包通常可以从软件的官方网站、版本控制系统(如GitHub)或Linux发行版的官方源中获取。
可以有官方来提供服务,也可以由第三方来提供,
比如国内的阿里云,搜狐云,还有一些非盈利组织比如学校等。
官方的源一般在国外,下载速度肯定有限,手动更改成国内的云可以大幅提升下载速度。
2. 解压源码包
- 解压命令:使用
tar
命令解压下载的源码包。例如,tar -xzvf git-2.xx.x.tar.gz
(注意替换为实际文件名)。
3. 进入源码目录
- 进入命令:使用
cd
命令进入解压后的源码目录。例如,cd git-2.xx.x
(注意替换为实际目录名)。
4. 执行配置命令
- 配置命令:源码包中通常包含一个
configure
脚本,用于检查编译环境、配置安装参数等。执行./configure
命令进行配置。 - 配置选项:
configure
脚本支持多种选项,用于指定安装路径、启用或禁用特定功能等。具体选项可以通过查看configure
脚本的帮助信息(通常使用./configure --help
命令)或源码包中的README
、INSTALL
等文档来了解。
5. 编译源码
- 编译命令:使用
make
命令进行编译。make
命令会根据Makefile
文件(通常由configure
脚本生成)中的指令来编译源码。
6. 安装软件
- 安装命令:编译完成后,使用
make install
命令将软件安装到系统中。如果源码包中有install
脚本,也可以使用该脚本来安装软件。 - 权限问题:安装软件可能需要管理员权限,因此可能需要在
make install
命令前加上sudo
(在基于Debian的系统中)或切换到root用户(在基于RPM的系统中)。
二、安装Git和Nginx示例
安装Git
- 下载源码包:
wget https://www.kernel.org/pub/software/scm/git/git-2.xx.x.tar.gz
(替换为实际网页、版本号) - 解压源码包:
tar -xzvf git-2.xx.x.tar.gz
(替换为实际文件名) - 进入源码目录:
cd git-2.xx.x
(替换为实际目录名) - 安装依赖项:
yum install apr* gcc* pcre* -y
(创建本地yum源,后安装依赖环境) - 执行配置命令:
./configure
(可以根据需要添加配置选项) - 编译:
make
- 安装软件:
sudo make install
(需要管理员权限)
安装Nginx
- 下载源码包:
wget https://nginx.org/download/nginx-1.xx.x.tar.gz
(替换为实际版本号) - 解压源码包:
tar -xzvf nginx-1.xx.x.tar.gz
(替换为实际文件名) - 进入源码目录:
cd nginx-1.xx.x
(替换为实际目录名) - 安装依赖项:
yum install apr* gcc* pcre* -y
(创建本地yum源,后安装依赖环境) - 执行配置命令:
./configure
(同样可以根据需要添加配置选项,如指定安装路径等) - 编译:
make
- 安装软件:
sudo make install
(需要管理员权限)
注意:在执行上述步骤时,请确保您的系统已经安装了编译所需的依赖包,如gcc、make、相关的库文件等。这些依赖包的具体名称和安装方式可能因Linux发行版而异。如果缺少依赖包,configure
脚本会报错并提示您安装缺失的依赖项。
RPM包管理工具
RPM包管理工具(Red Hat Package Manager)是Linux系统中一个非常重要且强大的软件包管理工具,特别是在基于Red Hat的发行版如Red Hat Enterprise Linux (RHEL)、Fedora、CentOS等中广泛应用。RPM主要用于软件包的版本管理、安装、配置、卸载的自动化问题,通过提供一系列命令和工具来方便地管理.rpm格式的软件包。
RPM包管理工具的特点
- 二进制形式:RPM软件包以二进制形式存在,包含了已经编译过的二进制文件,使得安装过程更为高效。
- 依赖关系管理:RPM能够管理软件包之间的依赖关系,确保系统上的软件包之间的相互依赖得到正确处理。
- 配置脚本:RPM软件包支持包含在安装、升级或卸载过程中执行的脚本,以配置和管理软件。
- 数据库管理:RPM维护一个数据库来记录系统上所有已安装的软件包的信息,便于查询、删除、升级与反安装。
RPM包管理的基本命令
RPM包管理工具提供了一系列命令,用于查询、安装、更新、卸载软件包。
- 查询软件包
- 查询已安装的软件包信息:
rpm -q package_name
- 查询所有已安装的软件包:
rpm -qa
- 查询未安装的软件包信息(需要软件包文件):
rpm -qpi filename.rpm
- 查询软件包的文件列表:
rpm -qpl filename.rpm
- 查询软件包的依赖关系:
rpm -qpR filename.rpm
- 查询已安装的软件包信息:
- 安装软件包
- 安装软件包:
sudo rpm -ivh package.rpm
-i
:安装软件包-v
:显示详细输出-h
:显示安装进度
- 安装软件包:
- 卸载软件包
- 卸载软件包:
sudo rpm -e package_name
- 卸载软件包:
- 升级软件包
- 升级软件包:
sudo rpm -Uvh package.rpm
-U
:升级已安装的软件包
- 升级软件包:
补充:
基础命令 | 查询已安装的rpm软件信息 |
---|---|
rpm -q 软件名 | 查询指定软件是否已安装 |
rpm -qi 软件名 | #显示已安装的指定软件的详细信息 |
rpm -ql 软件名 | 显示已安装的指定软件的文件列表 |
rpm -qc 软件名 | 列出已安装的指定软件的配置文件 |
rpm -qd 软件名 | 列出已安装的指定软件的软件包文档所在位置 |
rpm -qR 软件名 | 列出已安装的指定软件的依赖的软件包及文件 |
rpm -qf 文件或目录 | 查询已安装的指定软件属于哪个安装包 |
rpm -qa | 显示当前系统中以 rpm方式安装的所有软件列表 |
rpm -qa 管道符 grep postfix | 查询软件postfix是否已安装 |
基础命令 | 查询未安装的 RPM 软件包文件中信息 |
---|---|
rpm -qpi RPM包文件名 | 查询指定软件包的详细信息 |
rpm -qpl RPM包文件名 | 查询指定软件包的文件列表 |
rpm -qpc RPM包文件名 | 查询指定软件包的配置文件 |
rpm -qpd RPM包文件名 | 查询指定软件包的软件包文档的位置 |
安装、升级、卸载 RPM 软件包
格式:
rpm [选项] RPM包文件
常用选项 | 含义 |
---|---|
i | 安装一个新的 RPM 软件包 |
U | 升级某个软件包,若未安装过,则进行安装 |
F | 升级某个软件包,若未安装过,则放弃安装 |
h | 在安装或升级软件包的过程中,以“#”号显示安装进度 |
v | 显示软件安装过程中的详细信息 |
e | 卸载软件 |
–force | 强制安装某个软件包,比如要安装版本更旧的软件包 |
RPM包管理工具的注意事项
- 依赖关系:RPM在进行软件管理时,依赖关系非常重要。如果忽略依赖关系强制安装,可能会导致软件无法正常运行。为了解决这个问题,可以使用如yum这样的高级包管理工具,它能够自动处理依赖关系。
- 硬件平台兼容性:RPM软件包有特定的硬件平台要求,不同平台的RPM包不能混用。但是,对于源代码包(src.rpm),由于需要在本地编译,因此通常可以在不同系统下安装。
- 数据库管理:RPM通过维护一个数据库来记录已安装的软件包信息。如果数据库出现问题,可以使用
rpm --initdb
或rpm --rebuilddb
命令来初始化或重建数据库。
yum(Yellow dog Updater,Modified)本地仓库的建立
yum(Yellowdog Updater, Modified)是一种在基于RPM包管理系统的Linux发行版(如Fedora、Red Hat、CentOS等)中广泛使用的软件包管理工具。yum通过简化软件包的安装、更新、删除以及解决依赖关系等操作,极大地提高了系统管理员的工作效率。
yum的工作原理
- 仓库配置
yum通过配置文件(通常位于/etc/yum.repos.d/
目录下的.repo文件)来指定软件包仓库(Repository)的位置和访问信息。仓库中包含了软件包的元数据(如名称、版本、依赖关系等)以及软件包文件的位置。这些配置文件使得yum能够知道从哪里下载和安装软件包。 - 元数据下载
当运行yum命令时,yum会首先检查本地缓存中是否有最新的元数据。如果没有或者元数据已经过期,yum会从远程仓库下载最新的元数据信息。这些元数据是yum解析依赖关系和确定软件包安装顺序的基础。 - 依赖关系解析
在确定了需要安装或更新的软件包后,yum会检查这些软件包所依赖的其他软件包是否已经安装。如果依赖关系不满足,yum会自动解析并列出所有需要下载的依赖软件包。这一步骤是yum解决依赖关系问题的关键,它确保了软件包的正确安装和系统的稳定性。 - 软件包下载
一旦yum确定了需要下载的软件包及其依赖关系,它会从远程仓库下载这些软件包文件到本地缓存。如果本地缓存中已经存在所需的软件包,yum将直接使用缓存中的软件包,以提高安装速度并减轻远程仓库的负载。 - 安装与更新
下载完成后,yum会使用RPM包管理器执行软件包的安装或更新操作。RPM负责将软件包解压、安装到系统指定位置,并执行其他必要的配置操作。yum通过调用RPM来完成实际的软件包管理任务。 - 本地缓存维护
yum会在本地维护一个缓存目录(默认为/var/cache/yum/
),将最近下载的软件包和元数据保存在本地。这样可以提高后续操作的速度,并减轻远程仓库的负载。用户可以通过yum的清理命令(如yum clean all
)来清除本地缓存中的旧软件包和元数据,以释放磁盘空间。 - 事务处理
yum使用事务(Transaction)来管理软件包的安装和更新。事务是一个操作的集合,可以包括多个软件包的安装、更新或删除。yum会在事务中执行所有的操作,以确保软件包的一致性和完整性。如果事务中的某个操作失败,yum会回滚到事务开始前的状态,以保持系统的稳定性。
综上所述,yum通过仓库配置、元数据下载、依赖关系解析、软件包下载、安装与更新、本地缓存维护以及事务处理等步骤来实现对RPM软件包的管理。这些步骤共同构成了yum的工作原理,使得系统管理员能够方便地管理和维护Linux系统中的软件包。
yum本地仓库的建立——centos7.9系统为例
一、准备环境
- 下载镜像:
- 上传ISO镜像到服务器:
- 使用FTP、SCP等工具将下载的ISO镜像文件上传到CentOS 7.9服务器上。
二、挂载ISO镜像
- 创建挂载点:
- 在系统中创建一个目录作为挂载点,例如
/mnt/cdrom
。
mkdir /mnt/cdrom
- 在系统中创建一个目录作为挂载点,例如
- 挂载ISO镜像:
- 使用
mount
命令将ISO镜像挂载到刚才创建的挂载点。
注意替换mount /dev/cdrom /mnt/cdrom
/dev/cdrom /mnt/cdrom
为您的文件实际路径。 - 使用
- 验证挂载:
- 使用
df -h
命令查看挂载情况,确认ISO镜像已正确挂载。
- 使用
三、配置yum仓库
-
备份原有yum仓库配置:
- 为了安全起见,先备份原有的yum仓库配置文件,先创建备份目录。
mkdir repos.bak
-
复制原有yum仓库配置到备份目录中:
- 复制
/etc/yum.repos.d
目录下的所有文件到/etc/yum.repos.d/repos.bak/
。
mv * repos.bak /etc/yum.repos.d/repos.bak/*
- 复制
-
创建新的yum仓库配置文件:
- 在
/etc/yum.repos.d
目录下创建一个新的yum仓库配置文件,例如Local-Yum.repo
。
vim /etc/yum.repos.d/Local-Yum.repo
- 在
-
编辑新的yum仓库配置文件:
- 在文件中添加以下内容,配置本地yum仓库。
[Local] name=Local baseurl=file:///mnt/cdrom enabled=1 gpgcheck=0
四、清理并重建yum缓存
- 清理yum缓存:
- 使用
yum clean all
命令清理yum缓存。
yum clean all
- 使用
- 重建yum缓存:
- 使用
yum makecache
命令重建yum缓存。
yum makecache
- 使用
手动编译安装 - httpd
1.准备环境
- 主程序软件包——httpd-2.24.6.tar.bz2
- 程序运行的依赖环境
gcc*
pcre*
apr*
2.解压主程序软件包
- 解压 tar -xf httpd-2.24.6.tar.bz2
- 进行程序的相关配置
configure
可执行程序
配置项:
工作目录——prefix=/usr/local/htppd
指定程序的管理目录——user
指定程序的管理组——group
加载——--with
表示程序按照何种规则来安装和运行 - 编译和安装(依赖环境一定要事先搞定,不然报错,安装失败且产出遗留文件很麻烦
./configre --prefix=/usr/local/htppd
make && make install
- 在工作目录下调整程序的启动配置,尝试启动程序
/usr/local/htppd/bin/apachectl start
- 检测启动是否成功
检查端口是否开启:
netstat -natp | grep PORT_ID
访问测试:
curl (相当于模拟http请求) HOST_IP/ domain/server name(域名 www.baidu.com)
直接打开网页输入IP或者域名测试访问
其他优化操作
- 安装好后,建立合适的软连接文件,让系统能够识别,eg:
ln -s /usr/local/httpd/bin/* /usr/local/bin
- 更优化的管理服务,可以将httpd添加给systemctl工具来进行管理
system
工具是可以识别并且管理/lib/systemd/system/*.service
为结尾的程序文件
定义/lib/system/httpd.serice
文件
可以直接用systemcl
来管理httpd
补充
依赖关系
Linux源码包的依赖关系是一个复杂而重要的概念,它涉及到多个层面,包括内核与用户空间程序的依赖、库之间的依赖、模块之间的依赖以及软件包之间的依赖。
1. 内核与用户空间程序的依赖
- 内核代码:Linux系统的内核是系统的核心部分,负责硬件管理、进程调度、内存管理等基础功能。内核代码中包含了许多用户空间代码所需要的函数和数据结构。
- 用户空间程序:这些程序运行在用户空间,通过系统调用与内核进行交互。系统调用的实现需要内核代码的支持,因此用户空间程序对内核有一定的依赖关系。
2. 库之间的依赖
- 基本库:如glibc(GNU C库)是Linux系统中最基本的库之一,它包含了大量用户空间代码所需的函数和数据结构。其他库,如X11库、GTK库、Qt库等,也各自提供了特定的功能。
- 依赖关系:这些库之间往往存在复杂的依赖关系。一个库可能需要调用另一个库中的函数或数据结构,从而形成了库之间的依赖网络。
3. 模块之间的依赖
- 模块:在Linux系统中,模块是一种可以在运行时插入或移除的代码,用于添加或删除特定的功能或驱动程序。
- 依赖关系:模块之间也可能存在依赖关系。例如,一个模块可能需要调用另一个模块中的函数,因此需要在代码中进行依赖声明。
4. 软件包之间的依赖
- 软件包:在Linux系统中,软件包是软件的分发单位,包含了软件的源代码、编译后的二进制文件、配置文件等。
- 依赖关系:每个软件包都有其依赖关系列表,列出了该软件包运行所必需的其他软件包或库。这些依赖关系可以是运行时依赖(即软件包在运行时需要的其他软件包或库)或构建时依赖(即编译或构建软件包时所需的其他软件包或库)。
5. 依赖关系的解决
- 包管理器:大多数Linux发行版都提供了包管理器,如Debian/Ubuntu的APT、Red Hat/CentOS的YUM/DNF、OpenSUSE的ZYPP等。这些包管理器可以自动解析和安装软件包的依赖关系。
- 手动解决:在某些情况下,可能需要手动下载并安装缺失的依赖项。这通常涉及到在网上搜索依赖项的名称,并使用相应的包管理器进行安装。