【Linux入门】服务安装——源码包安装、RPM包管理工具、YUM本地仓库的建立及手动编辑安装HTTPD

Linux源码包(Source Code Packages)

Linux源码包是Linux系统中软件包的一种形式,它包含了软件的源代码程序,这些程序是由程序员按照特定的格式和语法编写出来的。源码包通常需要经过编译过程,将源代码转换成计算机可以直接执行的二进制程序。

一、源码包的特点

  1. 开源性:源码包是开源的,用户可以查看、修改源代码,这为用户提供了极大的灵活性和定制性。
  2. 可定制性:用户可以根据自己的需求选择安装源码包中的特定功能,或者对源代码进行修改以满足特定的需求。
  3. 兼容性:由于源码包是编译安装的,因此可以更好地适应不同的系统和硬件环境,提高软件的稳定性和效率。
  4. 安装过程复杂:源码包的安装过程相对复杂,需要用户具备一定的编译和安装知识,包括检查系统环境、配置安装选项、编译源代码等步骤。

二、源码包的获取

源码包通常可以从软件的官方网站、开源社区或第三方软件仓库中获取。它们通常以压缩包的形式存在,如tar.gz、tar.bz2等格式。用户可以使用相应的解压缩工具将源码包解压到指定目录。

三、源码包的安装步骤

  1. 下载源码包:从合适的来源下载所需软件的源码包。
  2. 解压缩源码包:使用tar等解压缩工具将源码包解压到指定目录。
  3. 检查系统环境:确保系统中已安装必要的编译工具和依赖库。例如,对于使用C语言编写的源码包,通常需要安装gcc编译器。
  4. 配置安装选项(可选):使用源码包自带的configure脚本配置安装选项,如安装目录、启用的功能等。这一步是可选的,但强烈建议用户根据自己的需求进行配置。
  5. 编译源码:使用make命令编译源码。这一步可能需要较长时间,具体取决于源码的复杂性和系统的性能。
  6. 安装软件:编译完成后,使用make install命令将编译好的程序安装到指定目录。

四、注意事项

  1. 检查依赖关系:在编译源码之前,务必检查源码包的依赖关系,确保所有必要的依赖库都已安装。
  2. 备份重要数据:在安装源码包之前,建议备份重要数据以防万一。
  3. 解决编译错误:如果在编译过程中遇到错误,需要根据错误提示进行相应的解决。这可能需要查阅相关的文档或搜索解决方案。
  4. 卸载源码包:由于源码包没有专门的卸载命令,如果需要卸载已安装的源码包,通常需要手动删除安装目录及其相关文件。

优点与缺点

优点

  1. 高度可定制性
    • 用户可以根据自己的需求编译和安装源码包中的特定功能,去掉不需要的部分,实现高度的个性化定制。
  2. 更好的兼容性和性能
    • 由于源码包是编译安装的,用户可以针对自己的系统和硬件环境进行优化编译,从而获得更好的兼容性和性能表现。
  3. 开源和透明度
    • 源码包是开源的,用户可以查看和修改源代码,理解软件的工作原理,增加对软件的信任度。
  4. 无依赖问题(部分情况下)
    • 对于一些复杂的软件,预编译的二进制包可能依赖于特定的库版本或系统配置。而源码包则允许用户从头开始构建软件,减少了依赖问题。
  5. 安全性
    • 用户可以审查源代码,查找并修复潜在的安全漏洞,从而增强系统的安全性。

缺点

  1. 安装过程复杂
    • 相比预编译的二进制包,源码包的安装过程更加复杂,需要用户具备编译和安装知识,包括检查系统环境、配置安装选项、解决编译错误等。
  2. 编译时间长
    • 编译源码包可能需要较长时间,特别是对于大型项目或性能较低的系统。
  3. 依赖管理复杂
    • 在编译源码包之前,用户需要手动安装所有必要的依赖库和工具,这可能会变得相当繁琐,尤其是在处理具有大量依赖的软件时。
  4. 维护成本高
    • 由于源码包是用户自行编译的,因此在软件更新时,用户需要重新下载源码包、编译并安装新版本,这增加了维护成本。手动安装的源码包可能难以与系统其他软件保持版本一致性,这可能导致兼容性问题或升级困难。
  5. 不适用于所有用户
    • 对于不熟悉编译和安装过程的用户来说,源码包可能不是一个好的选择。与使用包管理器安装的二进制包相比,源码包的安装和管理在自动化运维中更加复杂,不易于版本控制和批量部署。

综上所述,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命令)或源码包中的READMEINSTALL等文档来了解。

5. 编译源码

  • 编译命令:使用make命令进行编译。make命令会根据Makefile文件(通常由configure脚本生成)中的指令来编译源码。

6. 安装软件

  • 安装命令:编译完成后,使用make install命令将软件安装到系统中。如果源码包中有install脚本,也可以使用该脚本来安装软件。
  • 权限问题:安装软件可能需要管理员权限,因此可能需要在make install命令前加上sudo(在基于Debian的系统中)或切换到root用户(在基于RPM的系统中)。

二、安装Git和Nginx示例

安装Git

  1. 下载源码包wget https://www.kernel.org/pub/software/scm/git/git-2.xx.x.tar.gz(替换为实际网页、版本号)
  2. 解压源码包tar -xzvf git-2.xx.x.tar.gz(替换为实际文件名)
  3. 进入源码目录cd git-2.xx.x(替换为实际目录名)
  4. 安装依赖项yum install apr* gcc* pcre* -y (创建本地yum源,后安装依赖环境)
  5. 执行配置命令./configure(可以根据需要添加配置选项)
  6. 编译make
  7. 安装软件sudo make install(需要管理员权限)

安装Nginx

  1. 下载源码包wget https://nginx.org/download/nginx-1.xx.x.tar.gz(替换为实际版本号)
  2. 解压源码包tar -xzvf nginx-1.xx.x.tar.gz(替换为实际文件名)
  3. 进入源码目录cd nginx-1.xx.x(替换为实际目录名)
  4. 安装依赖项yum install apr* gcc* pcre* -y (创建本地yum源,后安装依赖环境)
  5. 执行配置命令./configure(同样可以根据需要添加配置选项,如指定安装路径等)
  6. 编译make
  7. 安装软件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包管理工具的特点

  1. 二进制形式:RPM软件包以二进制形式存在,包含了已经编译过的二进制文件,使得安装过程更为高效。
  2. 依赖关系管理:RPM能够管理软件包之间的依赖关系,确保系统上的软件包之间的相互依赖得到正确处理。
  3. 配置脚本:RPM软件包支持包含在安装、升级或卸载过程中执行的脚本,以配置和管理软件。
  4. 数据库管理:RPM维护一个数据库来记录系统上所有已安装的软件包的信息,便于查询、删除、升级与反安装。

RPM包管理的基本命令

RPM包管理工具提供了一系列命令,用于查询、安装、更新、卸载软件包。

  1. 查询软件包
    • 查询已安装的软件包信息:rpm -q package_name
    • 查询所有已安装的软件包:rpm -qa
    • 查询未安装的软件包信息(需要软件包文件):rpm -qpi filename.rpm
    • 查询软件包的文件列表:rpm -qpl filename.rpm
    • 查询软件包的依赖关系:rpm -qpR filename.rpm
  2. 安装软件包
    • 安装软件包:sudo rpm -ivh package.rpm
      • -i:安装软件包
      • -v:显示详细输出
      • -h:显示安装进度
  3. 卸载软件包
    • 卸载软件包:sudo rpm -e package_name
  4. 升级软件包
    • 升级软件包: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包管理工具的注意事项

  1. 依赖关系:RPM在进行软件管理时,依赖关系非常重要。如果忽略依赖关系强制安装,可能会导致软件无法正常运行。为了解决这个问题,可以使用如yum这样的高级包管理工具,它能够自动处理依赖关系。
  2. 硬件平台兼容性:RPM软件包有特定的硬件平台要求,不同平台的RPM包不能混用。但是,对于源代码包(src.rpm),由于需要在本地编译,因此通常可以在不同系统下安装。
  3. 数据库管理:RPM通过维护一个数据库来记录已安装的软件包信息。如果数据库出现问题,可以使用rpm --initdbrpm --rebuilddb命令来初始化或重建数据库。

yum(Yellow dog Updater,Modified)本地仓库的建立

yum(Yellowdog Updater, Modified)是一种在基于RPM包管理系统的Linux发行版(如Fedora、Red Hat、CentOS等)中广泛使用的软件包管理工具。yum通过简化软件包的安装、更新、删除以及解决依赖关系等操作,极大地提高了系统管理员的工作效率。

yum的工作原理

  1. 仓库配置
    yum通过配置文件(通常位于/etc/yum.repos.d/目录下的.repo文件)来指定软件包仓库(Repository)的位置和访问信息。仓库中包含了软件包的元数据(如名称、版本、依赖关系等)以及软件包文件的位置。这些配置文件使得yum能够知道从哪里下载和安装软件包。
  2. 元数据下载
    当运行yum命令时,yum会首先检查本地缓存中是否有最新的元数据。如果没有或者元数据已经过期,yum会从远程仓库下载最新的元数据信息。这些元数据是yum解析依赖关系和确定软件包安装顺序的基础。
  3. 依赖关系解析
    在确定了需要安装或更新的软件包后,yum会检查这些软件包所依赖的其他软件包是否已经安装。如果依赖关系不满足,yum会自动解析并列出所有需要下载的依赖软件包。这一步骤是yum解决依赖关系问题的关键,它确保了软件包的正确安装和系统的稳定性。
  4. 软件包下载
    一旦yum确定了需要下载的软件包及其依赖关系,它会从远程仓库下载这些软件包文件到本地缓存。如果本地缓存中已经存在所需的软件包,yum将直接使用缓存中的软件包,以提高安装速度并减轻远程仓库的负载。
  5. 安装与更新
    下载完成后,yum会使用RPM包管理器执行软件包的安装或更新操作。RPM负责将软件包解压、安装到系统指定位置,并执行其他必要的配置操作。yum通过调用RPM来完成实际的软件包管理任务。
  6. 本地缓存维护
    yum会在本地维护一个缓存目录(默认为/var/cache/yum/),将最近下载的软件包和元数据保存在本地。这样可以提高后续操作的速度,并减轻远程仓库的负载。用户可以通过yum的清理命令(如yum clean all)来清除本地缓存中的旧软件包和元数据,以释放磁盘空间。
  7. 事务处理
    yum使用事务(Transaction)来管理软件包的安装和更新。事务是一个操作的集合,可以包括多个软件包的安装、更新或删除。yum会在事务中执行所有的操作,以确保软件包的一致性和完整性。如果事务中的某个操作失败,yum会回滚到事务开始前的状态,以保持系统的稳定性。

综上所述,yum通过仓库配置、元数据下载、依赖关系解析、软件包下载、安装与更新、本地缓存维护以及事务处理等步骤来实现对RPM软件包的管理。这些步骤共同构成了yum的工作原理,使得系统管理员能够方便地管理和维护Linux系统中的软件包。

yum本地仓库的建立——centos7.9系统为例

一、准备环境

  1. 下载镜像
  2. 上传ISO镜像到服务器
    • 使用FTP、SCP等工具将下载的ISO镜像文件上传到CentOS 7.9服务器上。

二、挂载ISO镜像

  1. 创建挂载点
    • 在系统中创建一个目录作为挂载点,例如/mnt/cdrom
    mkdir /mnt/cdrom
    
  2. 挂载ISO镜像
    • 使用mount命令将ISO镜像挂载到刚才创建的挂载点。
    mount /dev/cdrom /mnt/cdrom
    
    注意替换/dev/cdrom /mnt/cdrom为您的文件实际路径。
  3. 验证挂载
    • 使用df -h命令查看挂载情况,确认ISO镜像已正确挂载。

三、配置yum仓库

  1. 备份原有yum仓库配置

    • 为了安全起见,先备份原有的yum仓库配置文件,先创建备份目录。
    mkdir repos.bak
    
  2. 复制原有yum仓库配置到备份目录中

    • 复制/etc/yum.repos.d目录下的所有文件到/etc/yum.repos.d/repos.bak/
    mv * repos.bak /etc/yum.repos.d/repos.bak/*
    
  3. 创建新的yum仓库配置文件

    • /etc/yum.repos.d目录下创建一个新的yum仓库配置文件,例如Local-Yum.repo
    vim /etc/yum.repos.d/Local-Yum.repo
    
  4. 编辑新的yum仓库配置文件

    • 在文件中添加以下内容,配置本地yum仓库。
    [Local]
    name=Local
    baseurl=file:///mnt/cdrom
    enabled=1
    gpgcheck=0
    

四、清理并重建yum缓存

  1. 清理yum缓存
    • 使用yum clean all命令清理yum缓存。
    yum clean all
    
  2. 重建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等。这些包管理器可以自动解析和安装软件包的依赖关系。
  • 手动解决:在某些情况下,可能需要手动下载并安装缺失的依赖项。这通常涉及到在网上搜索依赖项的名称,并使用相应的包管理器进行安装。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 26
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值