🔗 编译 Squid
🔗 我应该下载哪个文件来获取 Squid?
这取决于您选择尝试的 Squid 版本。当前发布的版本列表可以在 https://squid.org.cn/Versions/ 找到。每个版本都有一个发布包页面。通常您想要列为最新发布的版本包。
您必须下载一个形式为 squid-x.y.tar.gz 或 squid-x.y.tar.bz2 的源代码存档文件(例如,squid-2.6.STABLE14.tar.bz2)。
或者,Squid 的主要 WWW 网站 www.squid-cache.org 和 FTP 站点 ftp.squid-cache.org 也提供这些文件。
通常提供上下文差异文件用于升级到新版本。这些可以使用 patch 程序应用(可从 GNU FTP 站点 或您的发行版获取)。
🔗 是否有预编译的二进制文件可用?
🔗 如何编译 Squid?
在运行 make 之前,您必须自己运行 configure 脚本。我们建议您首先调用 ./configure –help 并记下您需要用来支持您打算使用的功能的配置选项。不要编译您认为不需要的功能。
% tar xzf squid-2.6.RELEASExy.tar.gz
% cd squid-2.6.RELEASExy
% ./configure --with-MYOPTION --with-MYOPTION2 etc
% make
% make check
% make install
默认情况下,Squid 会安装到 /usr/local/squid。如果您想安装到其他位置,请参阅 configure 的 –prefix 选项。
🔗 我需要哪种编译器?
您需要一个 C++ 编译器
- 要编译 Squid 4 及更高版本,您需要一个符合 C++11 标准的编译器。大多数最新的 Unix 和 Linux 发行版都预装了支持 C++11 的编译器。
- Squid 6 将需要一个符合 C++17 标准的编译器。这些通常在现代的 Unix 和 Linux 发行版中可用。
如果您不确定您的系统的 C 编译器,GNU C 编译器是广泛可用的,并且几乎在所有操作系统中都有提供。它也经过 Squid 的良好测试。如果您的操作系统没有自带 GCC,您可以从 GNU FTP 站点 下载。除了 gcc 和 g++ 之外,您可能还想要或需要安装 binutils 包以及一些库,具体取决于您想要启用哪些功能集。
Clang 是 gcc 的一个流行替代品,尤其是在 BSD 系统上。它通常也能很好地用于构建 Squid。过去或现在经过测试的其他替代品包括 Intel 的 C++ 编译器和 Sun 的 SunStudio。Microsoft Visual C++ 是 Squid 开发人员的目标之一,但在撰写本文时(2014 年 4 月)仍然有相当大的距离。
请注意,由于 clang 对原子操作的支持存在 bug,Squid 无法在 3.2 之前的 clang 版本上构建。
🔗 编译 Squid 还需要什么?
您将需要 automake 工具集来从 Makefiles 编译。
您需要 Perl 安装在您的系统上。
您选择启用的每个功能可能还需要额外的库或工具来构建。
了解完整 Squid 安装的依赖关系的简便方法是查看用于运行项目 CI/CD 的容器的 Dockerfile。
🔗 如何交叉编译 Squid?
使用 ./configure 选项 –host 来指定 Squid 将安装的机器的交叉编译元组。 autotools 手册 有关于此及其他交叉配置选项的一些简单文档——特别是它们的确切含义是一个非常有用的细节。
此外,Squid 是使用几个自定义工具创建的,这些工具本身是在构建过程中创建的。这需要一个 C++ 编译器来生成可以在构建平台上运行的二进制文件。需要提供 HOSTCXX= 参数来指定该编译器的名称或路径。
🔗 如何应用补丁或 diff?
您需要 patch 程序。在应用补丁之前,您可能应该复制整个目录结构。例如,如果您从 squid-2.6.STABLE13 升级到 2.6.STABLE14,您将运行以下命令:
cp -rl squid-2.6.STABLE13 squid-2.6.STABLE14
cd squid-2.6.STABLE14
zcat /tmp/squid-2.6.STABLE13-STABLE14.diff.gz | patch -p1
Squid-2 补丁需要 -p1 选项。
:information_source:
Squid-3 patches require the **-p0** option.
应用补丁后,您必须从头开始重新构建 Squid,即:
make distclean
./configure [--option --option...]
make
make install
如果您的 patch 程序出现错误或拒绝工作,您应该获取一个更新的版本,例如从 GNU FTP 站点。
理想情况下,您应该使用您的操作系统附带的 patch 命令。
🔗 configure 选项
configure 脚本可以接受许多选项。最有用的是 –prefix,用于将 Squid 安装到不同的目录。默认安装目录是 /usr/local/squid/。要更改默认设置,您可以这样做:
% cd squid-x.y.z
% ./configure --prefix=/some/other/directory/squid
某些操作系统要求将文件安装在特定位置。请参阅下面的特定于操作系统的说明,了解 ./configure 选项,这些选项对于正确进行这些安装是必需的。
输入
% ./configure --help
以查看所有可用选项。您将需要指定其中一些选项来启用或禁用特定功能。一些常用的选项包括:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local/squid]
--enable-dlmalloc[=LIB] Compile & use the malloc package by Doug Lea
--enable-gnuregex Compile GNUregex
--enable-xmalloc-debug Do some simple malloc debugging
--enable-xmalloc-debug-trace
Detailed trace of memory allocations
--enable-xmalloc-statistics
Show malloc statistics in status page
--enable-async-io Do ASYNC disk I/O using threads
--enable-icmp Enable ICMP pinging and network measurement
--enable-delay-pools Enable delay pools to limit bandwidth usage
--enable-useragent-log Enable logging of User-Agent header
--enable-kill-parent-hack
Kill parent on shutdown
--enable-cachemgr-hostname[=hostname]
Make cachemgr.cgi default to this host
--enable-htpc Enable HTCP protocol
--enable-forw-via-db Enable Forw/Via database
--enable-cache-digests Use Cache Digests
see https://squid.org.cn/Doc/FAQ/FAQ-16.html
这些选项对于 Squid-2 也常用,但在 Squid-3 中已成为默认值。
--enable-carp Enable CARP support
--enable-snmp Enable SNMP monitoring
--enable-err-language=lang
Select language for Error pages (see errors dir)
🔗 在 ... 上构建 Squid
🔗 BSD/OS 或 BSDI
已知问题
cache_cf.c: In function `parseConfigFile':
cache_cf.c:1353: yacc stack overflow before `token'
...
您可能需要升级您的 gcc 安装以使用更新的版本。使用 gcc -v 检查您的 gcc 版本。
如果它早于 2.7.2,您可能需要考虑升级。Gcc 2.7.2 非常老旧,支持范围不广。
🔗 CentOS
# You will need the usual build chain
yum install -y perl gcc autoconf automake make sudo wget
# and some extra packages
yum install libxml2-devel libcap-devel
# to bootstrap and build from bzr needs also the packages
yum install libtool-ltdl-devel
以下 ./configure 选项可以正确地将 Squid 安装到 CentOS 结构中。
--prefix=/usr
--includedir=/usr/include
--datadir=/usr/share
--bindir=/usr/sbin
--libexecdir=/usr/lib/squid
--localstatedir=/var
--sysconfdir=/etc/squid
🔗 Debian, Ubuntu
Ubuntu 和 Debian 的许多版本都在我们的 BuildFarm 中经过例行构建和单元测试,并且已知可以正常编译。
Linux 系统布局与 Squid 的默认设置有很大不同。以下 ./configure 选项是必需的,以便将 Squid 安装到 Debian / Ubuntu 标准文件系统位置:`
--prefix=/usr \
--localstatedir=/var \
--libexecdir=${prefix}/lib/squid \
--datadir=${prefix}/share/squid \
--sysconfdir=/etc/squid \
--with-default-user=proxy \
--with-logdir=/var/log/squid \
--with-pidfile=/var/run/squid.pid
当然,还有您可能需要的任何自定义配置选项。
对于 Debian Jesse (8)、Ubuntu Oneiric (11.10) 或更早的 squid3 包;上述 squid 标签应附加 3。
请记住,这些只是默认设置。通过修改 squid.conf,您可以将日志指向正确的路径,而无需变通方法或打补丁。
一如既往,要支持您想构建的功能,可能需要额外的库。可以使用以下命令安装默认的包依赖项:
aptitude build-dep squid
这只需要您的 sources.list 包含 deb-src 仓库以获取源包信息。发行版包不支持的功能将需要进行调查以发现依赖包并进行安装。
通常请求的是 libssl-dev 以支持 SSL。
但是,请注意 Squid-3.5 与 OpenSSL v1.1+ 不兼容。从 Debian Squeeze 或 Ubuntu Zesty 开始,必须改用 libssl1.0-dev 包。这在 Squid-4 包中已解决。
🔗 Fedora
最简单的重建 RPM 二进制包的方法是安装 fedpkg 工具。
yum install fedpkg
克隆包
fedpkg clone -a squid
然后使用 fedpkg mockbuild 重建包。
cd squid
fedpkg mockbuild
🔗 FreeBSD, NetBSD, OpenBSD
通常您只需要 通用构建说明。
但是,如果您希望将 Squid 的补丁与您的其他 FreeBSD 包的补丁集成,最简单的方法可能是从 Ports 集合安装 Squid。截至 FreeBSD 12.2,可用的端口是:
-
/usr/ports/www/squid3- Squid 3.5.28 -
/usr/ports/www/squid3- Squid 4.10
安装 squid-4:
cd /usr/ports/www/squid
make install clean
🔗 Windows
- 这些说明适用于构建 Squid-3.x 及更高版本。
新的 configure 选项
- --enable-win32-service
更新的 configure 选项
- --enable-default-hostsfile
不支持的 configure 选项
- --with-large-files: Cygwin 和 MinGW 都无法提供合适的构建环境,但 –enable-large-files 工作正常。
🔗 使用 Cygwin 编译
本节需要重写。它在编译 Squid 方面内容很少,而关于安装的内容很多。
要编译 Squid,您需要完全安装 Cygwin。
Cygwin 环境的使用与许多 Unix/Linux 环境非常相似,并且必须安装 -devel 版本的库。
默认情况下,Squid 会安装到 /usr/local/squid。如果您想安装到其他位置,请参阅 configure 的 –prefix 选项。
现在,添加一个新 Cygwin 用户 - 请参阅 Cygwin 用户指南 - 并将其映射到 SYSTEM,或者创建一个新的 NT 用户和一个匹配的 Cygwin 用户,它们将成为 squid 的运行用户。
如果您使用 CYGWIN=ntsec,请阅读关于权限的 squid FAQ。
完成后运行
squid -z
如果成功,请尝试:
squid -N -D -d1
Squid 应该会启动。检查是否有任何错误。如果一切看起来都很好,尝试通过 squid 浏览。
现在,配置 cygrunsrv 以您选择的用户名作为服务运行 Squid。您可能需要在此处检查权限。
🔗 使用 MinGW 编译
要使用 MinGW 环境编译 squid,必须安装 MSYS、MinGW 和 msysDTK 包。必须单独下载一些额外的库和工具。
- OpenSSL: Shining Light Productions Win32 OpenSSL
- libcrypt: MinGW 包存储库
- db-1.85: TinyCOBOL 下载区
3.2+ 版本需要更新的 4.6 或更高版本的 libdb。
在构建具有 SSL 支持的 Squid 之前,需要执行一些操作(在以下示例中,OpenSSL 安装在 C:\OpenSSL,MinGW 安装在 C:\MinGW)。
- 将 C:\OpenSSL\lib\MinGW 的内容复制到 C:\MinGW\lib
- 将 C:\OpenSSL\include\openssl 的内容复制到 C:\MinGW\include\openssl
- 将 C:\MinGW\lib\ssleay32.a 重命名为 C:\MinGW\lib\libssleay32.a
像往常一样解压源代码存档并运行 configure。
以下是 Windows 的推荐最小选项:
Squid-3: (需要 Squid-3.5 或更高版本,请参见下面的移植工作部分)
--prefix=c:/squid
--enable-default-hostsfile=none
然后像往常一样运行 make 和 install。
Squid 将安装到 c:\squid。如果您想安装到其他位置,请更改 configure 的 –prefix 选项。
完成后运行
squid -z
如果成功,请尝试:
squid -N -D -d1
- squid 应该会启动。检查是否有任何错误。如果一切看起来都很好,尝试通过 squid 浏览。
现在,要将 Squid 运行为 Windows 系统服务,请运行 squid -n,这将创建一个名为“Squid”的自动启动服务。要启动它,请从命令提示符运行 net start squid 或使用服务管理工具。
请务必查看提供的发行说明以获取任何特定于版本的详细信息。
🔗 RedHat, RHEL
以下 ./configure 选项可以将 Squid 正确安装到 RedHat 结构中。
--prefix=/usr
--includedir=/usr/include
--datadir=/usr/share
--bindir=/usr/sbin
--libexecdir=/usr/lib/squid
--localstatedir=/var
--sysconfdir=/etc/squid
🔗 其他平台
请告知我们您已成功构建 squid 的其他平台。无论成功与否。
请检查 Squid 已知可以编译的 平台页面。
如果您遇到的问题未在上文列出且有解决方案,请通过电子邮件发送给我们 squid-dev,告知您正在尝试的操作、您的 Squid 版本以及您遇到的问题。
🔗 编译 Squid 时看到很多警告。
警告通常不会引起太大担忧,并且对于设计用于跨多个平台运行的软件来说很常见。Squid 3.2 及更高版本应该可以构建而不会产生任何警告;我们投入了大量精力使代码真正具有可移植性。
🔗 未定义的引用:__inet_ntoa
您可能安装了 bind 8.x。
更新:该版本的 bind 现在已正式废弃,并且已知存在严重的基础设施漏洞。应尽快将其升级到 bind 9.x 或替换。
回到 FAQ 索引
导航: 网站搜索、网站页面、分类、🔼 向上