[分享]windows下编译squid的经验(转)
squid是什么我这里就不说了,这不是本文的重点,总之它是一个集:代理、加速、缓存、负载均衡、防盗链、访问控制等多功能的一个超牛X开源软件,如今已经广泛应用于很多领域。对于缓存和加速这一领域,如今各大门户网站都是用它做的CDN服务。
我的网站由于访问量比较大,一台服务器根本支撑不起,所以我研究了一下它,并成功的搭建了CDN服务,由多台服务器组建了一个简单的CDN网络来达 到负载均衡的效果。但同时我也发现了一个问题,squid官方提供的最新稳定版本(squid-2.7stable4)默认的文件描述符(file descriptors)为2048个,一般来说一个HTTP请求会打开一个文件描述符,假如有一个网页,代码里有3个js,1个css,10张图片,那 么每个访问者打开这个页面都将打开15个文件描述符,这样当这台缓存服务器同时被很多人访问时,文件描述符很快就会被用完,接着网站偶尔就会打不开,日志 里会报WARNING! Your cache is running out of filedescriptors这样的错误。
到网上搜了一下,唯一的解决办法是重新编译一下squid的源代码,用参数--with-maxfd。但网上搜到的编译方法都是在linux下的, 我没有看到有哪个在windows下使用squid并且在windows下编译的。我经过大半个月的研究,克服了重重困难和问题,最终成功的在 windows下编译了squid,为了后人不像我这样由于搜不到任何资料,发贴询问也无人能解决,几乎绝望的放弃,所以我把自己成功的经验和走的一些弯 路发出来,希望以后搜索到这篇文章的人可以借鉴和参考。
我下载了官方提供的一份最新的源代码,首先要解决的问题是怎么编译。官方文档全英文的,看得我眼睛疼,看了半天终于看懂了,大致是说有2种环境可以 在windows下编译squid,一种是基于Microsoft Visual C++,另一种是基于MinGW。由于我不是搞C的,也没弄过linux,对于这些简直是七窍通了六窍。在此之前我请了一个搞C++的同事帮我编译,因为 他机器上装有Microsoft Visual C++。可是他说碰到太多错误了,压根通不过编译检测,后来就没弄了,所以我不得已自己硬着头皮研究。因为他是用Microsoft Visual C++没弄出来,所以这次我打算用另一种环境MinGW来编译。
在搭建编译环境这里,我走了许多弯路,比如我是先找到了这个页面
http://squid.acmeconsulting.it/buildenvironment.html
后
来才知道这个文档实际上是老版本的MinGW,需要依次安装多个东西,而新版的只有一个东西,在装的时候自己勾选相应的组件就行了。可我下到的版本却是最
新的,用老的办法去装,反而会使得环境内各组件的版本不一致。我编译的时候碰到了错误,搜google才知道原来是环境问题,后来又重新检查环境,我也不
懂,检查不出什么问题。只好又重新看官方文档,后来才发现了这个页面
http://squid.acmeconsulting.it/SquidNT27.html
也就是对于2.7版本的编译方法。看到这里我才发现原来还有第3种编译环境:Cygwin。不过我已经开始用MSYS + MinGW了,所以就先不考虑Cygwin。
在这个页面上,它讲的是搭建MinGW环境需要安装:
MSYS 1.0.9或更高
MinGW 3.1.0或更高
Windows API 2.4.0或更高
MSYS Developer Tool Kit 1.0.1或更高
这4个东西在官方网站上都有下载,不过我们只需要下124这3个就可以了,第3个Windows
API在安装MinGW时会自动装上。首先是装MinGW,安装路径为C:\msys\1.0\mingw,装的时候勾选MinGW base
tools、g++ compiler、MingW
Make这3个即可。然后装MSYS,按默认的路径C:\msys\1.0装。装完配置时会有3个问题,前2个按y回车,第3个让你输入mingw的路
径,C:/msys/1.0/mingw回车(注意是反斜杠),最后安装msysDTK。这样应该环境就搭建好了。
将下载的squid源代码解压至任何目录(所在路径中不能包含中文),例如c:\squidsrc。从开始菜单>MinGW>MSYS启动msys,在命令提示符下输入cd c:\squidsrc回车,这样就进入到了squidsrc目录。接下来输入
./configure --prefix=c:/squid --with-maxfd=20480 --disable-wccp
--disable-wccpv2 --enable-win32-service --enable-default-hostsfile=none
--prefix=c:/squid表示将程序编译到哪个目录,这个目录也是你发布程序的安装目录。--with-maxfd=20480就是前面
说的文件描述符上限了。这里我把默认的2048改到了20480,应该足够了。--disable-wccp --disable-wccpv2
这2个参数非常重要。我在这个参数上走了很多弯路,主要是没有看到官方最新文档上说,windows下不支持wccp,必须禁掉才能编译。
--enable-win32-service表示可以配置为windows服务,这功能也是必须的,
--enable-default-hostsfile=none表示启用但不设置默认的hosts文件路径。这个命令的含义就解释到这里。如果幸运的
话,我下面这段就可以不用看了。
不过我很不幸,又碰到了很多问题。第一个问题是我运行之后,马上报找不到cfgaux/install-sh这个文件,这个问题整了我很久,因为
cfgaux目录下根本没有install-sh这个文件,我去哪弄一个来呢。我先是自己建了个空的文件取名为install-sh,被我骗过去了,但后
面又出现了许多错误,让我明白骗过这一步是没用的。于是又开始google,在一个英文博客上,一个老外也碰到这个问题,另一个牛人解释说,这个可能是编
译环境的问题,说是缺少了一个是lib,但没说具体的解决办法,后来那家伙自己试了下执行bootstrap.sh这个文件,结果就可以了。于是我也找
bootstrap.sh这个文件,果然就在源代码的根目录下。用命令./bootstrap.sh回车执行成功,果然自动在cfgaux下生成了好几个
文件,其中就有install-sh这个东东。果然重新执行前面的./configure命令,就通过了。
如果配置开始了,但输出一小段后就报错结束了,显示什么gcc....no之类的东西,则说明是环境没有搭建成功。我先前就因为环境问题,一直卡在
这里。问题在于我没有把mingw装在C:\msys\1.0\mingw这个目录里,导致编译器找不到mingw的目录,后来我自己剪切过去了才好。
如果配置通过了,那胜利就在眼前了。接下来输入命令make回车。不过我在这一步也卡了很久,原因是一直报一个undefined
reference
to的错误,找了很久也没找到解决办法。后来无意中看到官方文档说这些文件都是linux下的,在windows下要用dos格式,而我用windows
下的记事本保存过几个源代码文件,尽管没改任何代码,但是一保存文件头就变了,这样导致预编译时将找不到那个文件里的函数,后来我发现只要用
editplus保存就没事了。
如果make也过了,那就接着输入make install命令,就可以把文件编译到c:\squid目录了。这样整个编译过程就大功告成了。
看似简单的几个步骤,但是我却走了很大的弯路,其中最主要的原因是我不懂linux,没搞过C编程,所以这一切对我来说都非常陌生,只有摸着石头过河,所以走弯路也是很正常的。不过,经过我的总结,得出以下经验:
1.网络上搜到的资料也许都是过时了的,一定要注意其发表时间,错误的资料比没有资料更可怕。
2.一定要多看官方文档,哪怕它是全英文的,也得慢慢啃完。当然官方文档也要看最新的,最好别像我这么倒霉,总是先看到过时的
3.linux下的文件格式和windows下不同,如果要编辑,最好用editplus或其他专门的文本编辑软件来编辑和保存。
4.源代码的版本不要下错了。我一开始下到个vc++专用的版本,然后用mingw来编译,完全背道而驰,怎么可能成功呢,因为这个错误浪费了我好几天的时间
5.多问google,别轻易放弃,黄天不会负有心人
[分享]windows下编译squid的经验(转)的更多相关文章
- Windows下编译objective-C
Windows下编译objective-C 2011-08-31 14:32 630人阅读 评论(0) 收藏 举报 windowscocoa工具objective clibraryxcode 目录 ...
- Windows下编译最新版ChezScheme
据说ChezScheme是最快的神级编译器,一秒钟几百万行,王垠说的2秒内编译自身绝不是夸张(看这里<揭秘Chez Scheme>,Scheme中文社区).ChezScheme由美国印第安 ...
- [转] Windows下编译OpenSSL
简述 OpenSSL是一个开源的第三方库,它实现了SSL(Secure SocketLayer)和TLS(Transport Layer Security)协议,被广泛企业应用所采用.对于一般的开发人 ...
- 在Windows下编译FFmpeg详细说明
MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 MinGW,即 Minimalist GNU F ...
- 如何在WINDOWS下编译BOOST C++库 .
如何在WINDOWS下编译BOOST C++库 cheungmine 2008-6-25 写出来,怕自己以后忘记了,也为初学者参考.使用VC8.0和boost1.35.0. 1)下载boost ...
- 在Windows下编译OpenSSL(VS2005和VC6)
需要说明的是请一定安装openssl-0.9.8a . openssl-1.0.0我没有编译成功. 如何在Windows下编译OpenSSL (Vs2005使用Vc8的cl编译器)1.安装Activ ...
- windows下编译java源文件的编码错误
import java.util.Arrays;public class ArrayAsAReference{ public static void main(String[] args) { int ...
- Windows下编译SDL
Windows下编译SDL的理由我就不多说了,无论用VS来编译或调试SDL库都是很方便的.而且SDL源代码中也包含了VC工程,你所要做的只是解压VC工程,进行适当的配置,然后编译.调试. 编译SDL大 ...
- Windows下编译安装 FFmpeg
在Linux/Mac下编译 ffmpeg是非常方便的.但要在 Windows下编译 ffmpeg还真要花点时间.以下就是在 Windowns下编译ffmpeg的步骤: 一.安装Cygwin 在wind ...
随机推荐
- hdu 5101(思路题)
Select Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- (8)C#字符串
一.字符串 为什么说string是一个不可变的字符序列. string a="me"; a="meeeee"; string b="me" ...
- 链式前向星DFS
本文链接:http://www.cnblogs.com/Ash-ly/p/5399057.html 采用链式前向星存图的DFS: #include <iostream> #include ...
- Python与正则表达式[0] -> re 模块的正则表达式匹配
正则表达式 / Regular Expression 目录 正则表达式模式 re 模块简介 使用正则表达式进行匹配 正则表达式RE(Regular Expression, Regexp, Regex) ...
- What makes grep consider a file to be binary?
grep -a worked for me: $ grep --help [...] -a, --text equivalent to --binary-files=text
- 【CodeForces 788B】奇妙的一笔画问题
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=61845295 题目大意 给定n个点m条边的无向图 ...
- iptables实现IP地址重定向(转发)
iptables不单只防火墙这么简单,NAT转发这些都很强大.但是市面上iptables的教程基本都是围绕着CentOS 6来展开的,而对于CentOS 7和Ubuntu又不一样的写法,尤其是Ubun ...
- PHP安全相关的配置
PHP作为一门强大的脚本语言被越来越多的web应用程序采用,不规范的PHP安全配置可能会带来敏感信息泄漏.SQL注射.远程包含等问题,规范的安全配置可保障最基本的安全环境.下面我们分析几个会引发安全问 ...
- sharepoint2010新建网站与网站集
1.以管理员身份运行[sharepoint管理中心] 2.点击创建web应用程序 3.切换用户,我的个人用户不行,需要切换administrator用户 可以看到换成administrator账号 新 ...
- [置顶]
kubernetes资源类型--PetSets/StatefulSet
PetSet首次在K8S1.4版本中,在1.5更名为StatefulSet.除了改了名字之外,这一API对象并没有太大变化. 注意:以下内容的验证环境为CentOS7.K8S版本1.5.2,并部署Sk ...