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

Posted 超级咖啡猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 搜索应用程序
apt list 列出包含条件的包(支持统配)
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 multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

deb 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 id                                                               repo name
AppStream                                                             CentOS-8 - AppStream - mirrors.aliyun.com
base                                                                  CentOS-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 root  4096 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 id                                                                     repo name
local_base                                                                  test 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.
===========================================================================================================================================================================
 Package                                     Architecture                     Version                                           Repository                            Size
===========================================================================================================================================================================
Installing:
 glibc-devel                                 x86_64                           2.28-164.el8                                      local_base                           1.0 M
Upgrading:
 glibc                                       x86_64                           2.28-164.el8                                      local_base                           3.6 M
 glibc-common                                x86_64                           2.28-164.el8                                      local_base                           1.3 M
 glibc-langpack-en                           x86_64                           2.28-164.el8                                      local_base                           828 k
 glibc-langpack-zh                           x86_64                           2.28-164.el8                                      local_base                           2.2 M
 libxcrypt                                   x86_64                           4.1.1-6.el8                                       local_base                            73 k
Installing dependencies:
 glibc-headers                               x86_64                           2.28-164.el8                                      local_base                           480 k
 kernel-headers                              x86_64                           4.18.0-348.2.1.el8_5                              local_base                           8.3 M
 libxcrypt-devel                             x86_64                           4.1.1-6.el8                                       local_base                            25 k

Transaction Summary
===========================================================================================================================================================================
Install  4 Packages
Upgrade  5 Packages

Total 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 root  2048 Jun  2  2021 AppStream
dr-xr-xr-x. 4 root root  2048 Jun  2  2021 BaseOS
dr-xr-xr-x. 3 root root  2048 Jun  2  2021 EFI
dr-xr-xr-x. 3 root root  2048 Jun  2  2021 images
dr-xr-xr-x. 2 root root  2048 Jun  2  2021 isolinux
-r--r--r--. 1 root root 18092 May 27  2021 LICENSE
-r--r--r--. 1 root root    87 Jun  2  2021 media.repo
-r--r--r--. 1 root root   883 Jun  2  2021 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/
  • 如果看到下面这个网页恭喜你网页服务器的搭建成功了

2.2.4 配置网页内容

复制光盘的rpm包内容到网页目录

cp -a /media/BaseOS /var/www/html/

然后继续网页访问

http://10.0.0.151/BaseOS/
  • 看到这个画面,我们就可以继续下一步,配置repo文件了。

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.
===========================================================================================================================================================================
 Package                                    Architecture                      Version                                          Repository                             Size
===========================================================================================================================================================================
Installing:
 glibc-devel                                x86_64                            2.28-151.el8                                     media_base                            1.0 M
Installing dependencies:
 glibc-headers                              x86_64                            2.28-151.el8                                     media_base                            478 k
 kernel-headers                             x86_64                            4.18.0-305.3.1.el8                               media_base                            7.1 M
 libxcrypt-devel                            x86_64                            4.1.1-4.el8                                      media_base                             25 k

Transaction Summary
===========================================================================================================================================================================
Install  4 Packages

Total download size: 8.6 M
Installed size: 8.2 M
Is this ok [y/N]: 
# 这里看到已经是在使用我们配置的网络仓库了

3 编译安装http2.4

官网:

https://httpd.apache.org/

3.1 环境说明:

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-ld

redhat-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/

如果能看到下面这个图片就表示编译成功,就表示完成启动啦!后续还有一些小调整就不说了。这里主要是说编译软件包的思路。

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

以上是关于apt的使用编译安装http2.4自建yum仓库sed的练习的主要内容,如果未能解决你的问题,请参考以下文章

Linux yum仓库搭建http2.4源码编译和文件系统创建挂载

第四周作业

yum源仓库配置和磁盘管理

从头开始,脚踏实地。(第六周)

Linux云计算就业班第四周作业

文本处理sed&软件管理练习题