apt的使用编译安装http2.4自建yum仓库sed的练习

我自横刀向天笑,去留肝胆两昆仑。这篇文章主要讲述apt的使用编译安装http2.4自建yum仓库sed的练习相关的知识,希望能为你提供帮助。
1 apt 1.1 什么是apt?

  • 学过centos的我们知道centos的包称之为rpm,安装rpm包的时候经常出现的问题是rpm包之间可能会相互依赖,我们如果手动一个个去解决依赖关系并不高效,同时我们在寻找rpm包的时候需要自己去网上查找也并不安全、高效。所以为此产生了rpm包的管理器(yum)。centos7后用的是dnf。而这里说到的apt其实就是ubuntu也就是Debian系列的包管理器。
1.2 常用的命令总结
命令 功能
apt install 安装软件包
apt remove 移除软件包(并不是真的完全移除)
apt purge 移除软件包和配置文件(完全移除)
atp update 刷新储存库索引
apt search 搜索应用程序
aptlist 列出包含条件的包(支持统配)
apt edit-sources 编辑源列表
1.3 配置国内源 1.3.1 为什么需要配置
  • 默认系统配置的默认源,可能是国外的服务器,下载速度感人,所以我们要修改为国内的镜像源站加速我们的下载过程。
1.3.2 国内源
列举几个国内比较出名的国内源
阿里云 https://developer.aliyun.com/mirror/ https://mirrors.aliyun.com/163 https://mirrors.163.com/腾讯云 https://mirrors.cloud.tencent.com/

1.3.3 ubuntu如何配置国内源
  • 系统环境介绍:18.04.6 LTS (Bionic Beaver)
配置文件
/etc/apt/sources.list /etc/apt/sources.list.d

查看一下默认配置
root@ubuntu1804:~# grep ^[^#] /etc/apt/sources.list deb http://us.archive.ubuntu.com/ubuntu/ bionic main restricted deb http://us.archive.ubuntu.com/ubuntu/ bionic-updates main restricted deb http://us.archive.ubuntu.com/ubuntu/ bionic universe deb http://us.archive.ubuntu.com/ubuntu/ bionic-updates universe deb http://us.archive.ubuntu.com/ubuntu/ bionic multiverse deb http://us.archive.ubuntu.com/ubuntu/ bionic-updates multiverse deb http://us.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse deb http://security.ubuntu.com/ubuntu bionic-security main restricted deb http://security.ubuntu.com/ubuntu bionic-security universe deb http://security.ubuntu.com/ubuntu bionic-security multiverse

手动修改配置
# ubuntu 18.04(bionic) 配置如下 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse# sed 方法1 sed -r -i.bak s#(.*)us\\.archive\\.ubuntu\\.(com.*)$#\\1mirrors.aliyun.\\2#g /etc/apt/sources.list # sed 方法2 sed -i.bak s/us.archive.ubuntu.com/mirrors.aliyun.com/ /etc/apt/sources.list# 注意,修改完记得执行一下apt update

1.4 常用的命令演示
# 安装 apt install zip # 卸载,注意这个会保留配置文件 apt remove nginx # 全部卸载 apt purge nginx # 更新包索引,有时候安装找不到包建议先更新一下。相当于yum clean all; yum mackcache,修改了apt仓库后必须执? apt update # 升级系统所有已安装且可升级到新版本的软件包,建议先更新包索引再升级。 apt upgrade # apt 列出仓库软件包,等同于yum list apt list # 搜索安装包 apt search nginx # 卸载安装包并解决依赖关系 apt autoremove apache2 # 升级整个系统,必要时可以移除旧软件包。 apt full-upgrade # 查看仓库中软件包有哪些版本可以安装 apt-cache madison nginx # 安装软件包指定安装具体的版本 apt install nginx=1.14.0-0ubuntu1 # 查看文件来自于哪个包,类似redhat中的yum provides < filename> apt-file search string #默认是包含此字符串的文件 apt-file search -x 正则表达式 apt-file search -F /path/file # 显示某个包的信息,可以看到某个包的源、版本等信息 apt show DPKG_NAME apt-cache show DPKG_NAME ### 更详细

1.4.1 查找不存在的文件存在于那个包
# 这个功能依赖一个包,要先安装 apt -y install apt-file # 安装完要更新一下索引 apt update # 注意这里可以跟匹配模式 apt-file search -x "/nginx$"

apt命令操作(如安装和删除软件包)日志文件
/var/log/dpkg.log

2 自建私用yum仓库 2.1 网络下载版本 2.1.1 实验环境准备
说明:系统环境介绍:CentOS Linux release 8.4.2105
# 确定一下我们要下载的repo id # 查看一下repo id ,我们这次尝试搭建base的。 [root@centos8 /etc/yum.repos.d]# dnf repolist repo idrepo name AppStreamCentOS-8 - AppStream - mirrors.aliyun.com baseCentOS-8 - Base - mirrors.aliyun.com extras # 移除所有的yum环境 mkdir /etc/yum.repos.d/down mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/down/

  • 配置一下yum仓库为国内源
# 配置国内源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo # 更新一下repo列表 dnf clean all & & dnf makecache

2.1.2 下载所有yum仓库的相关包和meta 数据
# 创建存放的目录 mkdir /data # centos8 dnf默认集成了这个工具 # 下载rpm包,默认只下载rpm包,是不下载 meta数据,需要指定--download-metadata 才能下载 meta dnf reposync --repoid=base --download-metadata -p /data# 备注:CentOS 7 以前版本,reposync工具来自于yum-utils包 reposync --repoid=REPOID --download-metadata -p /data

2.1.3 创建私有yum仓库元数据:
# 如果没有下载meta数据也没关系可以手动创建 createrepo [options] < directory>

2.1.4 配置本地的yum源
# 通过上面的下载命令我们下载完1786个包后,查看我们的下载目录会看到repodata目录 [root@centos8 /etc/yum.repos.d]# ll /data/base/ total 128 drwxr-xr-x. 2 root root 98304 Dec 12 15:43 Packages drwxr-xr-x. 2 root root4096 Dec 12 15:41 repodata# 现在我们可以手动创建一下,用于测试的repo文件看看下载的本地源是否可以使用 [root@centos8 /etc/yum.repos.d]# vim local_base.repo [local_base] name=test centos 8 localhost BaseOS baseurl=file:///data/base/ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial gpgcheck=1# 查看一下我们配置的源是否生效、同时创建缓存。 [root@centos8 /etc/yum.repos.d]# dnf clean all & & dnf makecache [root@centos8 /etc/yum.repos.d]# dnf repolist repo idrepo name local_basetest centos 8 localhost BaseOS# 尝试安装包,看看是不是走的我们配置的源 [root@centos8 /etc/yum.repos.d]# dnf install glibc-devel Last metadata expiration check: 0:03:06 ago on Sun 12 Dec 2021 03:52:38 PM CST. Dependencies resolved. =========================================================================================================================================================================== PackageArchitectureVersionRepositorySize =========================================================================================================================================================================== Installing: glibc-develx86_642.28-164.el8local_base1.0 M Upgrading: glibcx86_642.28-164.el8local_base3.6 M glibc-commonx86_642.28-164.el8local_base1.3 M glibc-langpack-enx86_642.28-164.el8local_base828 k glibc-langpack-zhx86_642.28-164.el8local_base2.2 M libxcryptx86_644.1.1-6.el8local_base73 k Installing dependencies: glibc-headersx86_642.28-164.el8local_base480 k kernel-headersx86_644.18.0-348.2.1.el8_5local_base8.3 M libxcrypt-develx86_644.1.1-6.el8local_base25 kTransaction Summary =========================================================================================================================================================================== Install4 Packages Upgrade5 PackagesTotal size: 18 M Is this ok [y/N]: # 这里我们看到我们配置的源已经生效了

2.2 光盘版本+网页访问版本2.2.1 先挂载光盘
# 需要先确认一下我的虚拟机光盘是否已经接入了 [root@centos8 ~]# blkid /dev/sda1: UUID="4b29c9a4-43f2-48f9-a98f-90dadf9fd57c" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="9a34323c-01" /dev/sda2: UUID="caae22f6-e5c9-46fb-91d7-671b22ad1529" TYPE="swap" PARTUUID="9a34323c-02" /dev/sda3: UUID="7079192c-882d-4b63-b13c-9aa64e0ac92a" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="9a34323c-03" /dev/sr0: BLOCK_SIZE="2048" UUID="2021-06-01-20-39-18-00" LABEL="CentOS-8-4-2105-x86_64-dvd" TYPE="iso9660" PTUUID="44956b46" PTTYPE="dos" # 可以看到最后一行有光盘 # 那么就挂载上它吧 [root@centos8 ~]# mount /dev/sr0 /media/ mount: /media: WARNING: device write-protected, mounted read-only. [root@centos8 ~]# ll /media/ total 30 dr-xr-xr-x. 4 root root2048 Jun22021 AppStream dr-xr-xr-x. 4 root root2048 Jun22021 BaseOS dr-xr-xr-x. 3 root root2048 Jun22021 EFI dr-xr-xr-x. 3 root root2048 Jun22021 images dr-xr-xr-x. 2 root root2048 Jun22021 isolinux -r--r--r--. 1 root root 18092 May 272021 LICENSE -r--r--r--. 1 root root87 Jun22021 media.repo -r--r--r--. 1 root root883 Jun22021 TRANS.TBL

2.2.2 修改一下国内源
备注:最好修改一下国内源,上面讲过了。这里不仔细讲了。
2.2.2.1 epel源配置备注:这里epel最好也配置上
方法如下:
# 步骤1 yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm # 步骤2 sed -i s|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com| /etc/yum.repos.d/epel* sed -i s|^metalink|#metalink| /etc/yum.repos.d/epel* # 步骤3 yum makecache

2.2.3 安装httpd提供网页服务
安装
yum -y install httpd

启动
systemctl start httpd systemctl enable httpd

排错
# 如果打不开,可能是防火墙问题或者selinux # 防火墙问题 systemctl stop firewalld systemctl disable firewalld iptables -F# 关闭SELinux vim /etc/selinux/config SELINUX=disabled# 最后最好重启一下系统

网页访问虚拟机的ip
http://10.0.0.151/

  • 如果看到下面这个网页恭喜你网页服务器的搭建成功了
apt的使用编译安装http2.4自建yum仓库sed的练习

文章图片

2.2.4 配置网页内容
复制光盘的rpm包内容到网页目录
cp -a /media/BaseOS /var/www/html/

然后继续网页访问
http://10.0.0.151/BaseOS/

  • 看到这个画面,我们就可以继续下一步,配置repo文件了。
apt的使用编译安装http2.4自建yum仓库sed的练习

文章图片

2.2.5 配置repo文件
删除原本的repo配置文件,配置测试的repo文件
# 为了测试方便,我们删除原本的所有配置文件,平时不建议大家这样做 rm -f /etc/yum.repos.d/*.repo# 添加测试用途的repo配置文件 [root@centos8 /etc/yum.repos.d]# vim media_base.repo [media_base] name=test centos 8 media BaseOS baseurl=http://10.0.0.151/BaseOS/ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial gpgcheck=1 # 测试是否配置成功、生成缓存。 [root@centos8 /etc/yum.repos.d]# yum clean all& & yum makecache

验证安装
# 我们尝试安装一个包看看效果 [root@centos8 /etc/yum.repos.d]# dnf install glibc-devel Last metadata expiration check: 0:00:57 ago on Sun 12 Dec 2021 04:24:24 PM CST. Dependencies resolved. =========================================================================================================================================================================== PackageArchitectureVersionRepositorySize =========================================================================================================================================================================== Installing: glibc-develx86_642.28-151.el8media_base1.0 M Installing dependencies: glibc-headersx86_642.28-151.el8media_base478 k kernel-headersx86_644.18.0-305.3.1.el8media_base7.1 M libxcrypt-develx86_644.1.1-4.el8media_base25 kTransaction Summary =========================================================================================================================================================================== Install4 PackagesTotal download size: 8.6 M Installed size: 8.2 M Is this ok [y/N]: # 这里看到已经是在使用我们配置的网络仓库了

3 编译安装http2.4官网:
https://httpd.apache.org/

3.1 环境说明:
  • 系统:CentOS Linux release 8.4.2105
  • 编译的包版本:https://dlcdn.apache.org//httpd/httpd-2.4.51.tar.gz
3.2 环境调整配置一下国内源
# base源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo # epel源 yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm sed -i s|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com| /etc/yum.repos.d/epel* sed -i s|^metalink|#metalink| /etc/yum.repos.d/epel*

防火墙与selinux
# 防火墙关闭 systemctl stop firewalld systemctl disable firewalld iptables -F# 关闭selinux vim /etc/selinux/config SELINUX=disabled# 然后重启一下系统

3.3 编译过程 3.3.1 下载源码
cd /usr/src wget https://dlcdn.apache.org//httpd/httpd-2.4.51.tar.gz tar xf httpd-2.4.51.tar.gz

3.3.2 开始编译
[root@centos8 /usr/src]# cd httpd-2.4.51/ # 这里演示思路,只是做一次简单的编译。 ./configure --prefix=/usr/local/httpd-2.4.51 --sysconfdir=/etc/httpd --enable-ssl

3.3.3 编译报错解决
# 通常出现报错,大写内容的缺什么我们就包管理工具解决一下,编译通常需要devel结尾的,然后继续configure的步骤# 问题1 [root@centos8 /usr/src/httpd-2.4.51]# ./configure --prefix=/usr/local/httpd-2.4.51 --sysconfdir=/etc/httpd --enable-ssl checking for chosen layout... Apache checking for working mkdir -p... yes checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking build system type... x86_64-pc-linux-gnu checking host system type... x86_64-pc-linux-gnu checking target system type... x86_64-pc-linux-gnu configure: configure: Configuring Apache Portable Runtime library... configure: checking for APR... no configure: error: APR not found.Please read the documentation.# 可以查询一下是否有相关的包 [root@centos8 /usr/src/httpd-2.4.51]# dnf provides apr-devel # 这里解决一下依赖安装apr-devel [root@centos8 /usr/src/httpd-2.4.51]# dnf -y install apr-util-devel# 问题2 configure: configure: Configuring Apache Portable Runtime Utility library... configure: checking for APR-util... yes checking for gcc... gcc checking whether the C compiler works... no configure: error: in `/usr/src/httpd-2.4.51: configure: error: C compiler cannot create executables See `config.log for more details[root@centos8 /usr/src/httpd-2.4.51]# dnf -y install gcc# 问题3 configure: configure: Configuring Apache Portable Runtime Utility library... configure: checking for APR-util... yes checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking how to run the C preprocessor... gcc -E checking for gcc option to accept ISO C99... none needed checking for pcre-config... false configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/[root@centos8 /usr/src/httpd-2.4.51]# dnf -y install pcre-devel# 问题4 adding "-I$(top_srcdir)/modules/session" to INCLUDES checking whether to enable mod_slotmem_shm... shared (most) checking whether to enable mod_slotmem_plain... no checking whether to enable mod_ssl... checking dependencies checking for OpenSSL... checking for user-provided OpenSSL base directory... none checking for OpenSSL version > = 0.9.8a... FAILED configure: WARNING: OpenSSL version is too old no checking whether to enable mod_ssl... configure: error: mod_ssl has been requested but can not be built due to prerequisite failures[root@centos8 /usr/src/httpd-2.4.51]# dnf install openssl-devel# 看到这里我们的makefile文件就生成好了 config.status: creating build/pkg/pkginfo config.status: creating build/config_vars.sh config.status: creating include/ap_config_auto.h config.status: executing default commands configure: summary of build options:Server Version: 2.4.51 Install prefix: /usr/local/httpd-2.4.51 C compiler:gcc CFLAGS:-pthread CPPFLAGS:-DLINUX -D_REENTRANT -D_GNU_SOURCE LDFLAGS: LIBS: C preprocessor: gcc -E # 可以通过$?变量确认是否执行成功 [root@centos8 /usr/src/httpd-2.4.51]# echo $? 0

# 接下来开始编译、安装 [root@centos8 /usr/src/httpd-2.4.51]# make & & make install# 问题1 gcc: error: /usr/lib/rpm/redhat/redhat-hardened-ld: No such file or directory make[4]: *** [/usr/src/httpd-2.4.51/modules/aaa/modules.mk:2: mod_authn_file.la] Error 1 make[4]: Leaving directory /usr/src/httpd-2.4.51/modules/aaa make[3]: *** [/usr/src/httpd-2.4.51/build/rules.mk:117: shared-build-recursive] Error 1 make[3]: Leaving directory /usr/src/httpd-2.4.51/modules/aaa make[2]: *** [/usr/src/httpd-2.4.51/build/rules.mk:117: shared-build-recursive] Error 1 make[2]: Leaving directory /usr/src/httpd-2.4.51/modules make[1]: *** [/usr/src/httpd-2.4.51/build/rules.mk:117: shared-build-recursive] Error 1 make[1]: Leaving directory /usr/src/httpd-2.4.51 make: *** [/usr/src/httpd-2.4.51/build/rules.mk:75: all-recursive] Error 1# 查一下缺的文件在那个包里面 [root@centos8 /usr/src/httpd-2.4.51]# dnf provides /usr/lib/rpm/redhat/redhat-hardened-ld Repository extras is listed more than once in the configuration Last metadata expiration check: 0:12:11 ago on Sun 12 Dec 2021 04:36:41 PM CST. redhat-rpm-config-125-1.el8.noarch : Red Hat specific rpm configuration files Repo: AppStream Matched from: Filename: /usr/lib/rpm/redhat/redhat-hardened-ldredhat-rpm-config-125-1.el8.noarch : Red Hat specific rpm configuration files Repo: appstream Matched from: Filename: /usr/lib/rpm/redhat/redhat-hardened-ld# 通过查询我们安装对应的包,然后继续make & & make install [root@centos8 /usr/src/httpd-2.4.51]# dnf -y install redhat-rpm-config [root@centos8 /usr/src/httpd-2.4.51]# make & & make install Installing header files mkdir /usr/local/httpd-2.4.51/include Installing build system files mkdir /usr/local/httpd-2.4.51/build Installing man pages and online manual mkdir /usr/local/httpd-2.4.51/man mkdir /usr/local/httpd-2.4.51/man/man1 mkdir /usr/local/httpd-2.4.51/man/man8 mkdir /usr/local/httpd-2.4.51/manual make[1]: Leaving directory /usr/src/httpd-2.4.51 [root@centos8 /usr/src/httpd-2.4.51]# echo $? 0 # 这里我们看到编译已经完成,同时也把文件复制到我们规定的目录了。

3.3.4 启动前最后调整
# 做个软连接方便迭代 ln -s /usr/local/httpd-2.4.51/ /usr/local/httpd # 输出路径 echo export PATH=/usr/local/httpd/bin:$PATH > /etc/profile.d/httpd.sh # 重读环境变量 source /etc/profile.d/httpd.sh

3.3.5 启动httpd
[root@centos8 /usr/src/httpd-2.4.51]# apachectl start [root@centos8 /usr/src/httpd-2.4.51]# echo $? 0

尝试访问
http://10.0.0.151/

如果能看到下面这个图片就表示编译成功,就表示完成启动啦!后续还有一些小调整就不说了。这里主要是说编译软件包的思路。
【apt的使用编译安装http2.4自建yum仓库sed的练习】
apt的使用编译安装http2.4自建yum仓库sed的练习

文章图片

3.4 经验总结
  1. 通过configure我们生成makefile文件
    1. 启用的功能越多可能需要解决的依赖越多,尤其是第一次在最小化安装的系统上。
    2. 注意看版本依赖,有可能系统上安装的版本不足,需要升级、编译更高版本的包来解决依赖问题。
    3. 如果依赖都解决了还是无法进行下去,建议把编译目录删除,重新解压编译。
  2. makefile结束后,make过程可能也需要解决依赖,道理同上。
  3. make的过程支持多线程 ,请用-j #(#代表启动多少个线程),可以提高效率。
  4. configure和make都建议在结尾的时候通过变量$?来确认命令是否执行成功。
4 sed的小练习
  1. 利用sed 取出ifconfig命令中本机的IPv4地址
[root@centos8 ~]# ifconfig |sed -nr 2s/.*inet (.*)netmask.*$/\\1/p 10.0.0.151

  1. 删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
[root@centos8 ~]# sed -r s/^#[[:space:]]+(.*)$/\\1/ /etc/fstab

  1. 处理/etc/fstab路径,使用sed命令取出其目录名和基名
取基名 [root@centos8 ~]# echo /etc/fstab |sed -r s#.*/([^/]+)$#\\1# fstab 取基名,结尾带/的 [root@centos8 ~]# echo /etc/fstab/ |sed -r s#.*/([^/]+)/?$#\\1# fstab取目录名 [root@centos8 ~]# echo /etc/fstab |sed -r s#(.*)/[^/]+$#\\1# /etc 取目录名,结尾带/的 [root@centos8 ~]# echo /etc/fstab/ |sed -r s#(.*)/[^/]+/?$#\\1# /etc


    推荐阅读