Centos7.2安装Clamav-0.101.2

ClamAV防病毒软件安装与配置
本文详细介绍了在Linux环境下从源码编译安装ClamAV防病毒软件的过程,包括下载安装包、解压编译、创建软连接、配置文件修改、用户授权、启动服务及定时任务设置等关键步骤。

步骤一:下载编译安装包

[root@liang /root 20:00:48]#cd /server/Package/
[root@liang /server/Package 20:00:50]#wget http://www.clamav.net/downloads/production/clamav-0.101.2.tar.gz

步骤二:解压编译安装clamav

[root@liang /server/Package 20:01:05]#tar zxf clamav-0.101.2.tar.gz
[root@liang /server/Package 20:01:20]#cd clamav-0.101.2
[root@liang /server/Package/clamav-0.101.2 20:02:24]#yum install gcc-c++ openssl openssl-devel -y
[root@liang /server/Package/clamav-0.101.2 11:07:27]#./configure --prefix=/usr/local/clamav-0.101.2
[root@liang /server/Package/clamav-0.101.2 11:07:49]#make && make install

步骤三:添加软连接

[root@liang /server/Package/clamav-0.101.2 11:10:30]#ln -s /usr/local/clamav-0.101.2/ /server/clamav
[[root@liang /server/Package/clamav-0.101.2 11:10:30]#lln -s /usr/local/clamav-0.101.2/bin/* /usr/local/bin/
[root@liang /server/Package/clamav-0.101.2 11:10:30]#lln -s /usr/local/clamav-0.101.2/sbin/* /usr/local/sbin/

步骤四:创建相关文件

[root@liang /server/Package/clamav-0.101.2 11:10:56]#cd /server/clamav/
[root@liang /server/clamav 11:11:09]#mkdir logs
[root@liang /server/clamav 11:11:31]#touch logs/clamd.log
[root@liang /server/clamav 11:11:44]#touch logs/freshclam.log
[root@liang /server/clamav 11:11:53]#mkdir updata

步骤五:修改配置文件

[root@liang /server/clamav/etc 11:12:40]#ls
clamd.conf.sample freshclam.conf.sample
[root@liang /server/clamav/etc 11:12:40]#cp clamd.conf.sample clamd.conf
[root@liang /server/clamav/etc 11:12:57]#cp freshclam.conf.sample freshclam.conf
[root@liang /server/clamav/etc 11:14:07]#cat >> clamd.conf<<-eof
> LocalSocket /server/clamav/clamd.socket
> PidFile /server/clamav/updata/clamd.pid
> DatabaseDirectory /server/clamav/updata
> LogFile /server/clamav/logs/clamd.log
> eof
[root@liang /server/clamav/etc 11:15:08]#cat >>freshclam.conf<<-eof
> DatabaseDirectory /server/clamav/updata
> UpdateLogFile /server/clamav/logs/freshclam.log
> PidFile /server/clamav/updata/freshclam.pid
> eof
[root@liang /server/clamav/etc 11:17:02]#grep -n “#Example” clamd.conf freshclam.conf
clamd.conf:8:#Example #原本是未注释的,添加#进行注释
freshclam.conf:8:#Example #原本是未注释的,添加#进行注释

步骤六:创建clamav用户并授权

[root@liang /server/clamav/etc 11:18:15]#useradd -M -s /sbin/nologin clamav
[root@liang /server/clamav/etc 11:19:10]#chown -R clamav:clamav /usr/local/clamav-0.101.2/

步骤七:启动clamd

[root@liang /server/clamav/etc 11:20:56]#clamd start
LibClamAV Error: cl_load(): No such file or directory: /server/clamav/updata
ERROR: Can’t get file status
启动报错,提示的意思是 /server/clamav/updata目录中没有东西,需要freshclam 更新病毒库
[root@liang /server/clamav/etc 11:41:18]#freshclam
ClamAV updata process started at Wed Jun 26 11:41:26 2019
main.cvd is up to date (version: 58, sigs: 4566249, f-level: 60, builder: sigmgr)
nonblock_recv: recv timing out (30 secs)
WARNING: getfile: Download interrupted: Operation now in progress (IP: 104.16.219.84)
WARNING: Can’t download daily.cvd from database.clamav.net
Trying again in 5 secs…
main.cvd is up to date (version: 58, sigs: 4566249, f-level: 60, builder: sigmgr)
Downloading daily.cvd [100%]
daily.cvd updatad (version: 25492, sigs: 1602058, f-level: 63, builder: raynman)
Downloading bytecode.cvd [100%]
bytecode.cvd updatad (version: 328, sigs: 94, f-level: 63, builder: neo)
Database updatad (6168401 signatures) from database.clamav.net (IP: 104.16.219.84)
[root@liang /server/clamav/etc 12:00:32]#clamd start
[root@liang /server/clamav/etc 12:01:31]#clamd start
[root@liang /server/clamav/etc 12:04:51]#ps -ef|grep clamd
root 5645 1 0 12:02 ? 00:00:00 clamd start
root 5688 5545 0 12:05 pts/0 00:00:00 grep --color=auto clamd

步骤八:添加定时任务,扫描会占用IO

[root@liang /server/clamav/etc 12:04:51]#crontab -l
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1
00 00 * * * /usr/local/bin/freshclam
00 00 * * * /usr/local/bin/clamscan -r /tmp/ --remove

<think>我们正在解决Docker构建过程中`yum localinstall`跳过`php72w-mysqlnd.rpm`包的问题。根据引用[2]和引用[3]的信息,我们可以推测用户可能是在一个基于CentOS 7的Docker镜像中安装PHP 7.2以及相关扩展,而`php72w-mysqlnd`是PHP连接MySQL所需的驱动。 问题分析: 1. `yum localinstall`命令在安装本地目录的RPM包时,可能会因为依赖关系而跳过某些包的安装2. 特别是`php72w-mysqlnd`这个包,它可能依赖于其他PHP核心包或者特定的库。 解决方案: 步骤1:确保先安装PHP 7.2的核心包 步骤2安装`php72w-mysqlnd`所需的依赖(如`php72w-common`等) 步骤3:使用`yum localinstall`安装本地RPM包,并确保依赖已经满足 具体操作: 1. 在Dockerfile中,我们可能已经通过某种方式(比如从Webtatic仓库)安装了PHP 7.2的核心包。如果没有,则需要先添加Webtatic仓库(如引用[3]所示)并安装基础PHP包。 2.安装本地RPM包之前,确保已经安装了必要的依赖。我们可以先尝试安装`php72w-common`(通常包含了一些基础依赖)以及`php72w-mysqlnd`可能依赖的其他包。 3. 使用`yum localinstall`安装本地RPM包时,可以加上`--skip-broken`参数跳过无法安装的包,但这并不是我们想要的。相反,我们应该确保所有依赖都被满足。 4. 另一种方法是,先安装依赖,再安装目标包。如果`php72w-mysqlnd`包在本地目录中,我们可以单独安装它,并让yum自动解决依赖(前提是依赖包在仓库中可用)。 但是,由于我们是在离线环境(Docker构建时,可能没有网络)下安装本地RPM包,所以需要提前下载所有依赖。如果依赖没有全部包含在`/tmp/*.rpm`中,那么安装就会失败。 因此,我们需要: - 确保`/tmp`目录下包含了`php72w-mysqlnd`及其所有依赖的RPM包。 -安装时,使用`yum localinstall`同时安装多个包,让它们相互解决依赖。 然而,如果我们的RPM包集合中缺少某个依赖,那么安装就会失败。 替代方案:使用`rpm`命令强制安装(不推荐,因为可能破坏依赖关系): ```bash rpm -ivh --nodeps /tmp/php72w-mysqlnd-*.rpm ``` 但这样可能导致运行时错误。 更好的做法:在构建Docker镜像之前,在一个与目标环境相同的系统中,使用`yumdownloader`下载所有依赖,包括`php72w-mysqlnd`及其依赖链。 在Dockerfile中,我们可以这样写: ```dockerfile # 首先,添加必要的仓库(如Webtatic仓库,用于PHP7.2) RUN rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm # 然后,将所有的RPM包复制到/tmp目录 COPY *.rpm /tmp/ # 安装本地RPM包,使用yum localinstall(它会自动解决依赖,但前提是依赖包在仓库中或者也在/tmp中) RUN yum localinstall -y /tmp/*.rpm ``` 但是,如果我们的RPM包中包含了仓库中已有的包,那么`yum localinstall`可能会优先使用本地包,如果本地包与仓库中的包版本不一致,可能会导致依赖问题。 因此,我们可能需要明确指定安装本地目录中的特定包,而其他依赖则从仓库安装: ```dockerfile # 先安装仓库中可用的依赖(比如php72w-common等) RUN yum install -y php72w-common # 这样,当安装php72w-mysqlnd时,依赖已经满足 # 再安装本地的php72w-mysqlnd包(假设我们只把php72w-mysqlnd.rpm放在/tmp,其他包已经通过仓库安装) RUN rpm -ivh /tmp/php72w-mysqlnd-*.rpm ``` 但是,如果`php72w-mysqlnd`有不在仓库中的特殊依赖,那么这种方法也会失败。 因此,最可靠的方法是将所有相关的RPM包(包括依赖)都下载到本地,并复制到镜像的/tmp目录,然后使用`yum localinstall`一次性安装。 如果问题仍然存在,我们可以尝试以下步骤: 1. 在Dockerfile中添加调试命令,查看/tmp目录下的文件: ```dockerfile RUN ls -l /tmp/ ``` 2. 尝试单独安装`php72w-mysqlnd`包,并查看错误信息: ```dockerfile RUN yum localinstall -y /tmp/php72w-mysqlnd-*.rpm ``` 3. 根据错误信息,安装缺失的依赖。 考虑到用户可能是在离线环境下构建,我们建议在准备阶段使用`yumdownloader`下载所有依赖。 操作步骤(在准备RPM包的机器上执行): ```bash # 启用必要的仓库 yum install -y epel-release rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm # 下载php72w-mysqlnd及其依赖 yum install yum-utils yumdownloader --resolve php72w-mysqlnd ``` 这会将所有依赖的RPM包下载到当前目录,然后将这些RPM包复制到Docker构建上下文中。 在Dockerfile中: ```dockerfile # 复制所有RPM包 COPY *.rpm /tmp/ # 安装所有RPM包 RUN yum localinstall -y /tmp/*.rpm ``` 如果仍然有包被跳过,可能是因为这些包已经在仓库中存在更高版本,而本地包版本较低。此时可以尝试在yum命令中启用旧版本安装: ```dockerfile RUN yum localinstall -y --setopt=obsoletes=0 /tmp/*.rpm ``` 总结:关键是要确保所有依赖的RPM包都在本地目录中,并且没有版本冲突。 如果用户遇到特定错误信息,我们可以根据错误信息进一步调整。 最后,提供一个完整的Dockerfile片段示例: ```dockerfile FROM centos:7 # 修复基础仓库(因为CentOS7官方源已迁移) RUN rm -f /etc/yum.repos.d/CentOS-*.repo && \ curl -o /etc/yum.repos.d/CentOS-Base.repo https://vault.centos.org/centos/7/os/x86_64/CentOS-Base.repo && \ sed -i 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-*.repo && \ sed -i 's|^#baseurl=|baseurl=|g' /etc/yum.repos.d/CentOS-*.repo && \ sed -i 's|baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*.repo # 添加EPEL仓库和Webtatic仓库(用于PHP7.2) RUN yum install -y epel-release && \ rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm # 复制所有RPM包(包括php72w-mysqlnd及其依赖) COPY *.rpm /tmp/ # 安装本地RPM包,并忽略已安装的包(如果有)以及处理obsoletes RUN yum localinstall -y --setopt=obsoletes=0 /tmp/*.rpm # 清理缓存和临时文件 RUN yum clean all && rm -rf /tmp/*.rpm ``` 注意:由于CentOS 7官方源已经迁移到vault.centos.org,因此我们首先修复了基础仓库。 如果问题依旧,请提供具体的错误信息,以便进一步分析。 相关问题: 1. 如何在没有网络的系统中使用yum安装软件包及其所有依赖? 2. Docker构建过程中如何解决yum仓库失效问题? 3. 如何为离线环境下载RPM包及其所有依赖? 4. 如何解决yum安装过程中出现的包冲突问题?</think>### 解决 Docker 构建中 `yum localinstall` 跳过 `php72w-mysqlnd.rpm` 的完整方案 #### 问题原因分析 1. **依赖冲突**:`php72w-mysqlnd` 需要特定版本的 PHP 核心包(如 `php72w-common`),若本地目录缺少依赖包会被跳过[^2] 2. **包优先级问题**:系统默认仓库可能包含更新的 PHP 包,导致 yum 优先选择仓库版本而非本地 RPM 3. **签名验证失败**:未导入 GPG 密钥会导致本地 RPM 安装被拒绝 4. **包名冲突**:MySQL 官方源与 Webtatic 源的包名冲突(如 `mysql-community-server` vs `php72w-mysqlnd`)[^1][^3] --- ### 解决方案 #### 1️⃣ 强制指定本地包优先级(推荐) ```dockerfile # 在 yum 命令中明确排除仓库中的冲突包 RUN yum localinstall -y --disablerepo=* \ /tmp/php72w-*.rpm \ /tmp/php72w-mysqlnd.rpm ``` > **原理**:`--disablerepo=*` 禁用所有在线仓库,强制只使用本地 RPM 安装[^4] #### 2️⃣ 解决依赖链问题 ```dockerfile # 分步安装核心依赖 RUN yum localinstall -y /tmp/php72w-common.rpm \ /tmp/php72w-cli.rpm \ /tmp/php72w-devel.rpm # 再安装目标包 RUN yum localinstall -y /tmp/php72w-mysqlnd.rpm ``` #### 3️⃣ 处理 GPG 签名验证 ```dockerfile # 导入 GPG 密钥(需提前将密钥文件放入构建上下文) COPY RPM-GPG-KEY-webtatic /tmp/ RUN rpm --import /tmp/RPM-GPG-KEY-webtatic && \ yum localinstall -y --nogpgcheck /tmp/php72w-mysqlnd.rpm ``` > **注意**:可从 [Webtatic 官网](https://webtatic.com/projects/yum-repository/)获取 GPG 密钥 #### 4️⃣ 完整 Dockerfile 示例 ```dockerfile FROM centos:7 # 修复基础仓库(必需) RUN rm -f /etc/yum.repos.d/CentOS-*.repo && \ curl -o /etc/yum.repos.d/CentOS-Base.repo https://vault.centos.org/centos/7/os/x86_64/CentOS-Base.repo # 添加 Webtatic 仓库(PHP 7.2) RUN rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm # 复制所有 RPM 到 /tmp COPY *.rpm /tmp/ # 安装核心依赖 RUN yum localinstall -y \ /tmp/php72w-common-7.2.34-1.w7.x86_64.rpm \ /tmp/php72w-cli-7.2.34-1.w7.x86_64.rpm # 强制安装 mysqlnd 驱动(跳过仓库检查) RUN yum localinstall -y --disablerepo=* \ --nogpgcheck /tmp/php72w-mysqlnd-7.2.34-1.w7.x86_64.rpm # 验证安装 RUN rpm -qa | grep php72w-mysqlnd && \ php -m | grep mysqlnd ``` --- ### 关键排查技巧 1. **检查依赖树**: ```bash # 在构建前检查依赖关系 rpm -qpR /path/to/php72w-mysqlnd.rpm ``` 输出示例: ``` php72w-common(x86-64) = 7.2.34 libc.so.6(GLIBC_2.14)(64bit) ``` 2. **构建时调试**: ```dockerfile # 在失败命令前添加测试步骤 RUN ls -l /tmp/*.rpm && \ rpm -qpi /tmp/php72w-mysqlnd*.rpm ``` 3. **版本兼容性检查**: - 确认所有 `php72w-*` RPM 来自同一仓库和版本(如都是 Webtatic 的 7.2.34) - 避免混合使用不同来源的 PHP 包(如 Remi 和 Webtatic) --- ### 替代方案:直接使用仓库安装 若不需要自定义 RPM,推荐直接使用仓库: ```dockerfile # 添加 Webtatic 仓库 RUN rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm # 直接安装所需模块 RUN yum install -y \ php72w \ php72w-mysqlnd \ php72w-opcache ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值