我自横刀向天笑,去留肝胆两昆仑。这篇文章主要讲述apt的使用编译安装http2.4自建yum仓库sed的练习相关的知识,希望能为你提供帮助。
1 apt
1.1 什么是apt?
- 学过centos的我们知道centos的包称之为rpm,安装rpm包的时候经常出现的问题是rpm包之间可能会相互依赖,我们如果手动一个个去解决依赖关系并不高效,同时我们在寻找rpm包的时候需要自己去网上查找也并不安全、高效。所以为此产生了rpm包的管理器(yum)。centos7后用的是dnf。而这里说到的apt其实就是ubuntu也就是Debian系列的包管理器。
命令 | 功能 |
---|---|
apt install | 安装软件包 |
apt remove | 移除软件包(并不是真的完全移除) |
apt purge | 移除软件包和配置文件(完全移除) |
atp update | 刷新储存库索引 |
apt search | 搜索应用程序 |
aptlist | 列出包含条件的包(支持统配) |
apt edit-sources | 编辑源列表 |
- 默认系统配置的默认源,可能是国外的服务器,下载速度感人,所以我们要修改为国内的镜像源站加速我们的下载过程。
列举几个国内比较出名的国内源
阿里云
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/
- 如果看到下面这个网页恭喜你网页服务器的搭建成功了
文章图片
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.
===========================================================================================================================================================================
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
# 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的练习】
文章图片
3.4 经验总结
- 通过configure我们生成makefile文件
- 启用的功能越多可能需要解决的依赖越多,尤其是第一次在最小化安装的系统上。
- 注意看版本依赖,有可能系统上安装的版本不足,需要升级、编译更高版本的包来解决依赖问题。
- 如果依赖都解决了还是无法进行下去,建议把编译目录删除,重新解压编译。
- makefile结束后,make过程可能也需要解决依赖,道理同上。
- make的过程支持多线程 ,请用-j #(#代表启动多少个线程),可以提高效率。
- configure和make都建议在结尾的时候通过变量$?来确认命令是否执行成功。
- 利用sed 取出ifconfig命令中本机的IPv4地址
[root@centos8 ~]# ifconfig |sed -nr 2s/.*inet (.*)netmask.*$/\\1/p
10.0.0.151
- 删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
[root@centos8 ~]# sed -r s/^#[[:space:]]+(.*)$/\\1/ /etc/fstab
- 处理/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
推荐阅读
- #yyds干货盘点# nginx实现动静分离的负载均衡集群配置方法
- 文本处理sed&软件管理练习题
- Shell脚本小实验
- 小红书教资行业项目简介
- Linux vi删除移动复制命令
- Linux第四周
- #yyds干货盘点#查看linux硬件资源信息
- #yyds干货盘点# 网络高级配置和多网卡绑定实现
- K8S持久化存储PV和PVC使用