有关Varnish对话和VCL精华样本

作者:Ajian 发布时间:May 27, 2009 分类:Varnish

前言:其实使用Varnish真的有一年多的时间了,算是使用较早的了,从原来1.1.4到现在的2.0.4基本每个版本我都用过,而且也为了不同的网站架构做过很多的改动,效果一直都让我很满意。但我一直没有怎么写过文章,的确是因为觉得他还是太简单了,但还是总遇到不少人问,而且中文这方面的资料确实不多,很多都是零散和过时的,也确实是因为用这个的人好像不多。我自己刚开始的时候也是叫天不应的那种情况,没人帮忙,只好自己慢慢测试了。

今天又有一朋友问我,我兴致大发,聊了不少,还是比较懒啊,我直接把对话整理了下,这样也好更直接明了,比直述的强,我想很多人都有这些疑問。对话中如果你仔细的话还会看到一些网站中用到的方案我想都是比较实用的。最后还会附上一个VCL的样本,这段脚本是把不同的网站架构情况集中到了一个上面,而且尽量运用了varnish的一些最新的功能,并且这些都是经过了生产实践后的一个精华浓缩。希望更多的人来研究Varnish让他越来越好。

---------------
首先是大Y问我一个配置方面的问题,问题前半部分削掉看主要的
——————————————————————————————————

大Y
10:44 »
我们这边全部都是走的域名~不允许直接指定IP

Ajian
11:00 »
backend xxxx {
.host = "s01.cache.xxx.com";
.port = "80";
} 这个位置 host最好是用IP 用域名也得做hosts 不然会慢的 域名的 这个地方的IP 跟你说的走域名不允许走IP 是不一样的 是告诉varnish 那个要访问的域名在哪台服务器上而已

后面的配置中才会有域名相关的配置
大Y
11:01 »
用域名也得做hosts 不然会慢的??

Ajian
11:02 »
你想 直接访问一个机器是IP 快还是域名快?

11:03 »
域名还需要走DNS 而你做hosts的会是本地解析 就会相对不做的快些

大Y
11:04 »
但这样会在管理上比较麻烦~
如果后端的机器IP变了~~你可能需要把所有的机器hosts或配置文件改一边~~

Ajian
11:05 »
嗯 这个会有这个麻烦 但这个更改远比你使用得少吧
你每次使用都会降低这个速度

当然你还可以自己内部做DNS
如果你要用域名没有问题 你内部做个DNS会比较好 你要知道 外部的DNS 还经常出问题呢 速度还是个很大的影响

大Y
11:08 »
恩~~我们每段vlan都会做dns服务器:)

---------------

开始聊到vanrish和squid的区别了 varnish的优点和缺点

——————————————————————————————————

大Y
11:07 »
我说这个和squit的对比~:)

Ajian
11:07 »
对比做过 我肯定是喜欢vanrish才一直用它

大Y
11:08 »
你觉得这个相比较好处在那~?

Ajian
11:10 »
好处在于简单 而且速度快 当然这个只能对图片这些小文件来说 对于大文件 我觉得squid的磁盘缓存还是会好些 另外squid的缺点也让他性能不高 使用squid经常要重启 性能是越用越慢
而varnish 我用了很久也不需要去怎么维护他 如果你的网络结构不变的话
也可能我的squid使用得不好

大Y
11:11 »
恩~我现在主要是想用这做图片什么的缓存~

11:12 »
呵呵你实际测试过~大概性能能提升多少:)

Ajian
11:13 »
提升 这样打个比喻吧 缓存的效果 如果在同样的访问量在 varnish 后端的WEB 是100K 流量 而squid后端是10M的流量
当然这个还在于squid的配置水平
但从这一点说明varnish是相当简单 对吧

Ajian
11:20 »
你刚才说的性能问题 我现在用个实例说明下 你对比下你们的squid看下 有没有区别 我们现在一个cache组的总流量出口为最高80M 而后端总共流量不过2M

大Y
11:17 »
对了对于前端反应上~~squit和var区别大么?

Ajian
11:20 »
前端反应?

大Y
11:22 »
恩~~就是用户响应这块~
我们比较关注用户响应~~这块~

Ajian
11:22 »
个人觉得vanrish快

大Y
11:22 »
比方命中率~

Ajian
11:23 »
命中率 你应该从刚才我举的例子来看

当然这个你得看varnish的并发能力 这个我没有具体去压过 因为没有好的压力测试工具 有时间你可以做个詳細的对比测试

varnish是基于内存的 是直接读取 而squid是从硬盘读取 在工作正常的情况下 你想哪个会比较快?

原理来说 是varnish快 只要varnish 工作正常 而且能够承受够大的并发压力

大Y
11:25 »
恩~我看中var也是因为它是基于内存的~

Ajian
11:26 »
这个有优点 也有一个不好的缺点
一旦你需要更新 或者重启varnish的时候会造缓存丢失

大Y
11:27 »
恩对后端压力大

Ajian
11:27 »
如果你前面的cahce 很多 而且同时重启的话会对后端压力很大

所以一定尽量不要重启他 或者重启他的时候 错开时间 不要同时

你如果真的用上的话 还有一个课题必需要攻克的就是如何清理指定缓存的问题 我现在也在为这个为难 如果是用默认的hash还是可以解决

大Y
11:30 »
我看它这个也支持PURGE来清理指定的缓存~

Ajian
11:30 »
这个只能在默认hash的情况下
hash的规则 像我们站现在的 就加了很多 就无法使用 主要是不清楚他内部的具体机制

大Y
11:33 »
默认hash我看说比较影响性能~~

Ajian
只能说默认的hash少了些东西 网站总有很多特殊的东西
他是最基本的 会少很多东西
如压缩的

---------------

新Varnish的功能

——————————————————————————————————

大Y
11:36 »

我看到了2后支持RR和健康监测~~
呵呵~你做了这么?

Ajian
11:37 »
这个我就用着

不过他的健康状态监测比较的傻 我只能把他当成备份的一种策略来做

大Y
11:39 »
哦他监控检测发现失败后会剔除出去么?

Ajian
11:39 »
健康状态监测很傻 在执行失败后会按你给他的服务器列表挨个跑一遍 直到遇到好的
他有个负载机制 还行

大Y
11:40 »
失败一次后不会以后每次都是挨个走一遍?

Ajian
11:46 »
失败后 会转到你设置的服务器列表 如你配置说如果第一次出错了 就找到哪个服务器 如果再失败了再去哪个服务器 这个就看你怎么设置了 你也可以让他重试几次 ,我现在的策略是 有一台比较差的服务器做备份机 所有出错的都会转给一台机器 减少重试次数

大Y
11:49 »
哦~呵呵~~~

11:51 »
你那有vcl呵呵能发我参考看看么:)

所以我决定还是写一个VCL的样本吧,这个VCL的样本把我原来用的几种情况的VCL都归到一个脚本中了,是经过生产情况的考验的。

环境:有四台WEB,

WEB1-3为提供 www.test.com bbs.test.com 的后端服务器

WEB1-2为负载均衡根据服务器情况设置权重

WEB3为健康状态检测后的备份机 意思就是如果访问WEB1-2其中一台机器出现问题的问题那么转向WEB3服务器再访问
WEB4为theme.abc.com的后端服务器

backend web1 {
  .host = "192.168.0.1";
  .port = "80";
}
backend web2 {
  .host = "192.168.0.2";
  .port = "80";
}
backend web3 {
  .host = "192.168.0.3";
  .port = "80";
}
backend web4 {
  .host = "192.168.0.4";
  .port = "80";
}                            

#负载轮询机制
director default random {
  {
    .backend = web1;
    .weight = 200;  }
    {
      .backend = web2;
      .weight = 300;  }
}
#允许清理缓存控制
acl purge {
  "localhost";
  "127.0.0.1";
  "192.168.0.0"/26;
}
sub vcl_recv {
  if (req.request == "PURGE") {
    if (!client.ip ~ purge) {
      error 405 "Not allowed.";
    }
    elseif(req.url ~ "\.(php|cgi)($|\?)") {
      pass;
    }
    else {
      lookup;
    }
  }
#设置健康状态检测机制,这里实际是使用了一个备份功能
  if((req.http.host ~"^(www.|bbs.)?test.com")&&(req.restarts == 0))  {
    set req.backend = default;
  } elseif(req.restarts == 1) {
    set req.backend = web3;
  }
#另外一个域名的配置
  if(req.http.host ~"^(theme.|special.)?abc.com") {
    set req.backend = web4;
  }
#定义一些缓存的内容 PHP 不缓存
  if (req.request != "GET" && req.request != "HEAD")
  {
    pipe;
  }
  elseif (req.url ~ "\.(php|cgi)($|\?)")
  {
    pass;
  }
  elseif (req.http.Authenticate || req.http.Authorization) {
    pass;
  }
  lookup;
}                                                                      

sub vcl_hit
{
  if (req.request == "PURGE") {
    set obj.ttl = 0s;
    error 200 "Purged.";
  }                            

  if (!obj.cacheable)
  {
    pass;
  }                  

  if (obj.http.Vary)
  {
    unset obj.http.Vary;
  }
}                       

sub vcl_miss
{
  if (req.request == "PURGE") {
    error 404 "Not in cache.";
  }
}
#定义hash的值 这个跟清空缓存有很大的关系
#处理压缩情况的内容
sub vcl_hash {
  set req.hash += req.url;
  if (req.http.host) {
    set req.hash += req.http.host;
  } else {
    set req.hash += server.ip;
  }
  if ( req.http.Accept-Encoding ){
    if (req.url ~ "\.(jpg|jpeg|png|gif|rar|zip|gz|tgz|bz2|tbz|mp3|ogg|swf|exe|flv|avi|rmvb|rm|mpg|mpeg|pdf)$") {
    } else {
      set req.hash += req.http.Accept-Encoding;
    }
  }
  hash;
}

sub vcl_fetch
{
#轮询机制的一部分,定义什么时候就restart
  if ((obj.status == 500 || obj.status == 501 ||  obj.status == 502 ||  obj.status == 503) && req.restarts < 2) {
    restart;
  }
  if (!obj.cacheable)
  {
    pass;
  }
#决定哪些头不缓存
  if (obj.http.Pragma ~ "no-cache" || obj.http.Cache-Control ~ "no-cache" || obj.http.Cache-Control ~ "private") {
    pass;
  }

  if (obj.http.Set-Cookie)
  {
    pass;
  }
#定义不同内容的缓存时间
  if (req.request == "GET" && req.url ~ "\.(txt|js|css|html|htm)$") {
    set obj.ttl = 600s;
  }
  else {
    set obj.ttl = 10d;
  }
}

c++编译器Code::Blocks安装(Linux)

作者:Ajian 发布时间:May 27, 2009 分类:Linux软件,openSUSE

最近想写写C 、C++方面的程序,所以想找一个Linux下的编辑器来用用,找了很多也试了不少,最后锁定了CodeBlocks.以下是关于他的介绍和一些安装过程。适用所有的Linux吧。(有时就只是需要一个安装的思路,其它的都差不多一样的)

(摘抄)Code::Blocks,有时也简单打成“CodeBlocks”,是一款全新的C++集成设置环境软件(IDE)。

作为一款C++IDECode::Blocks至少有以下几点非常吸引我。

  • 开源——开源不仅仅意味着免费,但就算是仅仅是免费这一点,就非常重要了,不是吗?
  • 跨平台——我的工作需要写的C++程序,就要求是跨LinuxWindows平台,没有选择Code::Blocks之前,我在Linux下用KDevelop,在Windows下使用Borland Microsoft的软件,由于二者不兼容而要多做的事情太多。或许你暂时并不考虑跨平台,但为了将来,能跨平台总不是坏事,对了Code::Blocks也支持Mac系统呢。
  • C/C++写成——作为一名C++程序员,我“顽固”地保留一点可能并不必要的自尊:写C++程序,还是用C++写的IDE吧。让我选择一款以其它语言写成的IDE来写C++程序,我有那么一点点完全不必要的心理障碍。其实用C++写的程序最大好处是你不用额外安装庞大的运行环境,譬如你不用装.net也不装java
  • 支持多编译器——包括Borland C++,VC++Inter C++等等超过20个不同产家或版本编译器支持。无特定要求下,我还是主要用g++。配对的,调试器也是支持多种。
  • 插件式的框架——插件式的集成开发环境,最著名的是Java编程工具Eclipse了,这种方式让一款IDE保留了良好的可扩展性,应该说,作为一款开源的IDE,这是最合理的选择。Code::Blocks很多核心功能,包括“调试功能”,都通过插件来实现。非核心方面的插件嘛,我用得最多的,是代码格式美化、自动上Google Codes查找……偶尔也会玩玩“俄罗斯方块”以及“贪吃蛇”……
  • 经常更新——几乎每个月都会有更新。开源软件最怕的就是不更新了。
  • 内嵌可视设计——和大家熟悉的VBDelphi/C++Builder相 比,它的可视窗口设计器,其“傻瓜性”差了一大截,其主要原因在在主流的跨平台图形窗口的定位体系,都是采用定位“容器”来实现的,这一点一开始会不太习 惯,但在熟悉之后,设计各种对话框,也非常直观。一点点不直观,换来的是你的程序很容易迁移到别的操作系统,同时还让你对窗口设计更深入了,倒也值。
  • C++扩展库支持——通过它的一个用以支持Dev C++的插件,可以下载大量C++开源的扩展库。比如网络操作,图形算法,压缩、加密等等……我现在最常用到一款就是iconv,用来转换汉字编码。扩展库下载,及使用方法,请见本站相关课程。
  • 多国语言——哈哈,有中文版,支持近40国语言,不过并不是默认支持的,本站对相关语言包进行了部分订正及改进,语言包文件下载及使用方法请见本站相关课程。
  • 众人的选择——顺便说一下,Code::Blocks进入“Sourceforge community choice award 2008年度决赛了。“Sourceforge”是全球最大的开源社区,那这个赛事,可称为“社区最佳选择奖”,最终能不能获奖不好说,不过确实有去投过一票。能有很多用户无私无利的支持以进入决赛,这自然也是我们选择一个参考。

以下的安装参考“http://www.boobooke.com/bbs/viewthread.php?tid=5637&extra=page%3D2” 不过他的这个文档中有点点问题,也没有相关的链接。

安装过程:

安装环境: openSUSE 11.1

由于CodeBlocks是基于wxWidgets开发的,需要首先安装wxWidgets,然后才能够安装CodeBlocks。

如果你在你的包管理工具中可以找到wxGTK wxGTK-devel 那你就直接安装包,用不用源码包安装都一样。呵呵,可以找到codeblocks更好,好像一般都没有。

1、wxGTK

http://www.wxwidgets.org/downloads/下载  wxGTK

wget http://nchc.dl.sourceforge.net/sourceforge/wxwindows/wxGTK-2.8.10.tar.gz

tar xzf wxGTK-2.8.10.tar.gz
cd wxGTK-2.8.10
./configure --prefix=/usr --enable-xrc --enable-monolithic --enable-unicode
make
make install

注意如果是包安装一还要安装wxGTK-devel开发包 、安装过很多次软件的人都了解源码包,包含了所有的,而做好的包都是分开的。

openSUSE 加入以下的套件会有wxGTK

ajian:/etc/zypp/repos.d # cat home:accAgon.repo
[home_accAgon]
name=home:accAgon (openSUSE_11.1)
enabled=1
autorefresh=0
baseurl=http://download.opensuse.org/repositories/home:/accAgon/openSUSE_11.1/
type=rpm-md
gpgcheck=1
gpgkey=http://download.opensuse.org/repositories/home:/accAgon/openSUSE_11.1/repodata/repomd.xml.key
keeppackages=1

2、CodeBlocks

http://www.codeblocks.org/downloads/下载

wget http://ncu.dl.sourceforge.net/sourceforge/codeblocks/codeblocks-8.02-src.tar.bz2

tar jxf codeblocks-8.02-src.tar.bz2

cd codeblocks-8.02
./configure --prefix=/usr
make
make install

这里最好是安装在/usr下 如果在/usr/local会提示你有些so的文件找不到 我们都知道 系统包都安装在/usr下 而手功安装的如果不指定默认安装在/usr/local下 如果不指定话会因为PATH不够 无法包含Lib库的情况 当然也可以自己添加。

3、汉化 中文包若需要中文环境还可以从网上找到这个语言包d2school_codeblocks_chinese_locale.7z。

wget http://www.d2school.com/codeblocks/download/d2school_codeblocks_chinese_locale.7z
在Linux下解压后,创建一个目录mkdir -p /usr/share/codeblocks/locale  将解压出来的mo文件复制到下面,再打开就是中文的了,

有人说还需要下面的操作(我没做这一步)

启动Code::Blocks,选择Settings->Enviornment->View->Internationalization->Chinese (Simplified)即可。

4、效果图

CodeBlocks.png

Linux下的游戏同样精彩(安装与介绍)

作者:Ajian 发布时间:May 27, 2009 分类:Linux软件,openSUSE

有人说游戏是windows的天堂,只能说游戏开发商把精力都放在了windows,其实Linux下面的游戏一样有很多不错的,如果以后Linux壮大了,游戏商家都支持Linux了,会跟Windows一样游戏满天飞。

今天介绍几款我最近玩的几个Linux游戏,并且告诉你如何安装,那些小的自带游戏我就不说了 。

关于Linux的更多游戏可以看这个地址 http://linuxdesktop.cn/2008/02/12/top-28-games-on-linux-2008.html 排版不好看,将就下吧^_^

这里的安装以我的本本系统为主,其它的系统也没有精力去试,我想只要有一个名词,有google就可以解决了。

环境:

操作系统 openSUSE 11.1

安装:

最好有安装源  如果源码安装还是会很麻烦 因为很多游戏是相当大的

我这里提供一个源,是我无意中找到的
ajian:/etc/zypp/repos.d # cat games.repo
[games]
name=Games (openSUSE_11.1)
type=rpm-md
baseurl=http://download.opensuse.org/repositories/games/openSUSE_11.1/
gpgcheck=1
gpgkey=http://download.opensuse.org/repositories/games/openSUSE_11.1/repodata/repomd.xml.key
enabled=1
另外一些套件中也会有
ajian:/etc/zypp/repos.d # cat Taiwan-Packman.repo
[Taiwan-Packman]
name=Taiwan-Packman
enabled=1
autorefresh=1
baseurl=http://ftp.twaren.net/Linux/Packman/suse/11.1/
path=/
type=rpm-md
keeppackages=0
只要添加了上面这些源基本下面介绍的游戏都能安装,还有很多游戏我还没有一一去尝试,有兴趣你可以多玩玩。

介绍

推荐一、智力游戏 Word of Goo 粘粘世界

(先来一段摘抄)这个由2D BOY开发的另类益智游戏曾经在美国独立游戏节上包揽多项大奖。根据2D BOY官网的消息,World of Goo支持Mac/Linux操作系统。这是一个基于物理和建筑原理的益智游戏,数以百万的黏性球体物质居住在一个不知名的 美丽世界,它们在这个游戏中显得非常可口。

(个人感受)这个游戏的流畅度相当不错,设计的游戏环节也是相关的有趣。考基于物理和建筑原理的一个智力游戏。这个游戏在上面那个介绍25款经典游戏是没有的,我觉得有点可惜。我把他做为第一个力荐的游戏。这个其实是在参加SUSE enterprise 11的大会上看到的游戏,呵呵。

先看几个截图:

game_1.png

game_2.png

game_3.png

这个游戏可以在这里下载 http://worldofgoo.com/dl2.php?lk=demo

推荐二、竞技游戏 Nexuiz

(先来段专业评语)(Linux, Windows, Mac) Nexuiz 已经被一个Lee Vermeulen为首叫做 Alientrap的 业余编程爱好者团队开发了近5年,.它们的目标是创建一个免费的可以和商业游戏相媲美的动作游戏. 它是一个完全通过网络完成的3D对抗游戏 ,目的是为了让游戏回到起点 ,加上完美的武器平衡和快节奏的动作,使它于现实种的枪手完全不同. 它使用Evil Lair开发的HFX纹理 ,现在呢有27的地图可供选择.通过高级的用户接口,可以在15个玩家模式之间选择, 每模式有两个皮肤, 可以来连接到主服务器和世界各国的玩家同场竞技. 这个游戏开源,跨平台,FPS.

(个人感受)个人玩这个游戏觉得不逊于CS,更灵活的操作,更夸张的先进武器,外表够酷的角色,更要说的是游戏的流畅度也是相关不错的。但唯一要注意的是游戏打外了CPU温度会上升太大,造成你的机器自动关机,这个完全是我的本本的问题,至于游戏是否控制好了CPU的使用,就不得而知了。这个游戏还可以联网,实现完美的CS感受。

截图:

game_4.png

game_5.png

game_6.png

推荐三、赛车 Vdrift

(专业术语介绍)(Linux, Windows, Mac) VDrift是一个跨平台开源的模拟驾驶游戏.他有16个跑道和29个车型. 它使用一个简单的网络多用户模式连战.您可以使用鼠标,键盘和手柄来控制. 游戏中可以任意的改变游戏和车型的设置,对比赛回放,也有多种的模式

(个人感受) 这个可能比极品飞车还是差了些 ,也可能我还没有怎么玩的原因,呵呵,不过他的选择真的很多 ,完全可以过过赛车的瘾。

截图:

game_8.png

game_9.png

游戏就先介绍这到,有好的游戏 ,也来告诉我一下哦,丰富一下生活。

给openSUSE系统减肥

作者:Ajian 发布时间:May 11, 2009 分类:管理监控维护,openSUSE

前言:最近我的系统越来越肥了,从原来刚安装的4个G到现在的13个G,都番了三倍了。再“肥”下去,我的要根目录磁盘空间都装不下了。决定一定要给他“减肥”。google上一搜系、这类文章太少了,Ubuntu的到是不少。还是自己来吧。以下的步骤和大部分方法适合所有的linux系统垃圾清理.

一、查看哪些目录占用的空间最大

cd /
du -sh *

以下是我的系统减肥前的大小情况(不包括挂载的)

8.4M    bin
14M     boot
220K    dev
59M     etc
4.0K    home
90M     lib
16K     lost+found
40K     media
4.0K    mnt
398M    opt
0       proc
2.0G    root
12M     sbin
21M     srv
0       sys
399M    tmp

5.0G    usr
4.8G      var
从上面可以看到 root opt tmp usr var这几个目录是占用最大的 ,挨个分析

root 目录是我的根目录(我习惯直接用root用户),会有大量的自己的文件在这里面,如下载直接在某个目录,另外就是大量程序的缓存文件。

opt 是一些程序的暂时没有找到减的方法

tmp 不用说就是临时文件的存放地,这么大肯定是可以减的,至于有人说是否直接删除,肯定也是不好的,有些正在使用的东西也在里面。

usr 安装程序的地方 大量占用的都是lib 和share ,其实难点就在这里怎么删除孤立的函数库文件和旧的已安装的程序。这里請求大家的方法,我没有找到好的方法有文章说用清理命令:urpme --auto-orphans (http://www.linuxsir.org/bbs/showthread.php?p=1981847#post1981847),我查过基本没有这个软件 不知道是否真有。

var  这里主要是zypp的下载的安装包、还有日志文件

所以我接下来要清理的主要是1、临时文件 2、缓存文件 3、日志文件 4、zypp下载的安装包
二、具体清理过程

1、手动清除临时文件

如果是手动清楚的话最好是根据时间来清除,最基本用到一个命令tmpwatch

默认没有安装   各种发行版本下载地:http://rpm.pbone.net/index.php3/stat/3/srodzaj/1/search/tmpwatch

安装文件 ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/elvigia/openSUSE_11.1/i586/tmpwatch-2.9.13-5.2.i586.rpm

命令 : tmpwatch --mtime --all 168 /tmp

168=7*24

临时文件的目录有/tmp /var/tmp

另外注意:如果你安装了tmpwatch 那么在/etc/cron.daily下自动安装了tmpwatch的自动清理临时文件的脚本

ajian:/etc/cron.daily # cat tmpwatch
#! /bin/sh
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
        -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix 10d /tmp
/usr/sbin/tmpwatch "$flags" 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
    if [ -d "$d" ]; then
        /usr/sbin/tmpwatch "$flags" -f 30d "$d"
    fi
done

默认是保留一个月内的
你也可以更改时间更长或者更短

2、清理日志文件

日志文件并非都是无用的,一般都是用logrotate 来压缩分割日志,

ajian:/etc/cron.daily # cat logrotate
#!/bin/sh

# exit immediately if there is another instance running
if checkproc /usr/sbin/logrotate; then
        /bin/logger -t logrotate "ALERT another instance of logrotate is running - exiting"
        exit 1;
fi;

TMPF=`mktemp /tmp/logrotate.XXXXXXXXXX`

/usr/sbin/logrotate /etc/logrotate.conf 2>&1 | tee $TMPF
EXITVALUE=${PIPESTATUS[0]}

if [ $EXITVALUE != 0 ]; then
    # wait a sec, we might just have restarted syslog
    sleep 1
    # tell what went wrong
    /bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
    /bin/logger -t logrotate -f $TMPF
fi

rm -f $TMPF
exit 0

这个一般默认是有的,如果想改动的话 只要更改这个脚本来进行你的定制。
但还是会生成一些压缩包,如果这些旧的日志不需要的话就完全都可以手动删除。
目录为/var/log

另外还可以自制脚本进行清理

#!/bin/bash
# Clean the log directory
#date:20090510
#create by Ajian
#http://www.OhLinux.com
LOGDIR=/var/log

cd $LOGDIR
tar -cz *  /root/cleanlog-`date +%B`.tar.gz

# Clean files
for i in $LOGDIR/*; do
         if [ -f $i ]; then
              echo "" > $i 2>;/dev/null
          fi
done

# Clean files in directories
for i in $LOGDIR/*; do
          if [ -d $i ]; then
               cd $i
           if [ $? != 0 ]; then
                exit 1
           fi
    for f in *; do
       echo "" > $f 2 >/dev/null
        done
   fi
done
exit 0
3、清理缓存文件 使用工具

缓存文件有很多,系统的 程序的 在不同的目录下不同的缓存方式,如果你一个个去尝试找的话也都可以完成,不过那样太费事了

这里使用一个工具,也可以实现前面两种情况的清理工作

bleachbit
http://bleachbit.sourceforge.net/download.php


这个软件可以满足大部分的Linux发行版本、安装相应的版本软件后打开 界面相当的简单 第一次打开还会提示配置,有中文的选项不过选择了好像没有用

bleachbit

左侧是各种清除的项目 右侧为显示栏

如果你对他不够信任,完全可以选择后preview下看下是否没有删除重要的内容 这个工具可以清理缓存、临时、日志文件包括系统和他所包含应用程序的。

这个工具算是比较方便了,我实验了好几个、还是比较的安全。

4、清理zypp下载保存的包

这点没有想到包管理工具下载保存的包达到了5G、而且很傻的是原来撤掉的repo不会删除、增长更新的软件版本不会清除以前较旧的,所有的都保留了,这里做得不是很好。

所以我自己写了个脚本、实现了清理已经删除的repo 产生保存的文件、保留规定时间内下载的软件包 (其实我原想实现的是保存同软件最近的一两个版本,删除较旧的版本软件)
如果想调试该脚本 请把注释掉的echo 打开 关闭删除命令

#!/bin/bash
# Clean the zypp packages
#date:20090510
#create by:Ajian
#http://www.OhLinux.com

CACHEDIR=/var/cache/zypp/packages
REPODIR=/etc/zypp/repos.d
#the unit is the day
TIME=7
# Clean old files in directories
tmpwatch --mtime --all  $[$TIME*24] $CACHEDIR
#Clean unused directories
for i in $CACHEDIR/*; do
  if [ -d "$i" ]; then
    DIRNAME=`echo "$i" |awk -F\/ '{ print $NF }'| sed -e 's/\_/\:/g'`.repo

    if [ ! -f "$REPODIR"/"$DIRNAME" ] ; then
#Debug
#      echo "$i   --->   $DIRNAME  is not exist!"
#Do the delet option
       rm -rf $i
    fi
fi
  done
exit 0

使用脚本跑完后/var/cache/zypp/packages由原来的5.3G减到381M

另外如果你的网速够快 或者有自信不用在本地保存安装包在本地完成可以去掉这个功能
cd /etc/zypp/repos.d
编辑文件装keeppackages改成0 就不会保存了

[KDE_42]

name=KDE 4.2.x Packages (openSUSE_11.1)

enabled=1

autorefresh=1

baseurl=http://download.opensuse.org/repositories/KDE:/42/openSUSE_11.1/

type=rpm-md

gpgcheck=1

gpgkey=http://download.opensuse.org/repositories/KDE:/42/openSUSE_11.1/repodata/repomd.xml.key

keeppackages=1

三、系统减肥結果

系统减肥之前

e5a4a7e5b08f

系统减肥之后

e5a4a7e5b08f2

root 目录有1G多的文件是自己的文档文件

所以系统现在占用不到7G 比原来减少了一半,但比起刚装完的系统 还是有点肥 , 最后的难点还是在删除孤立的包和旧的程序上面,这点如果谁有好的点子可以分享下,谢谢。

openSUSE trac 安装使用

作者:Ajian 发布时间:May 7, 2009 分类:Linux软件,openSUSE

前言:之前用过一段时间的TRAC 还不错,首先主要是研究来管理项目的,现在也用来管理自己的资料,windows版本的和ubuntu centos版本的都安装过,不过有很长一段时间间隔没有使用了,现在在opensuse上安装,总还是会碰不少壁,都有点不记得了,之前也没有写詳細的文档。今天就大概的记录下。

需要基础:LAMP  SVN相关安装配置基础

安装环境:centos5.2  openSUSE 11.1 (windows的就不说了,有专门的文档,以openSUSE11.1为主、其实思路方法都差不多)

需要软件:Trac apache subversion python

安装过程:

注意:这里主要以openSUSE为主、直接用yast安装 如果是centos 用yum安装 主要是讲配置方面的,源码包安装就要注意各版本的需求不一定都是最高版本就最好,新的有些还没有支持。

1、安装LAMP:詳細见http://en.opensuse.org/LAMP

其实这里只要安装apache 如果用mysql来存储trac的东西 也可以把mysql安装上,但是现在官方都说对mysql支持不好

如果你完全可以用trac自己的WEB ,连apache也不需要安装。

这里只是为方便自己多安装些 反正以后还要用LAMP的时候  yast -i apache2 apache2-mod_python apache2-mod_php5 mysql php5 php5-gd php5-mbstring php5-mysql  (最开始的两个一定要安装)

2、安装python:trac是用python写的,yast -i python

3、安装数据库:采用sqlite, yast -i sqlite3

4、安装subversion: yast -i subversion subversion-python    (如果想安装的SVN用apache来进行提交 还需要配置apache的SVN mod )

添加trac的源:http://en.opensuse.org/TRAC

yast -i trac python-setuptools python-genshi

配置过程:

1、配置SVN库

如果以前配置过 根本不用说了 只是要注意一些SVN创建和使用 配置文件的细节问题,可以见我的另外一篇文章

svnadmin create /LinuxShare/svn/MyProject

ajian:/LinuxShare/svn/MyProject/conf # cat authz | grep -v "#"

[aliases]
[groups]
admins = admin
[/]
@admins = rw
* = r

authz这一段注意的就是[/] 这个路径 看你的配置具体而定 有个人总结得不错 可以看下 http://www.subversion.org.cn/bbs/viewthread.php?tid=520&pid=2969&page=1&extra=#pid2969

ajian:/LinuxShare/svn/MyProject/conf # cat svnserve.conf | grep -v "#"
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

启动服务(我这里没有用http的方式):
svnserve -d --root=/LinuxShare/svn/MyProject/
注意:看你启动服务root的位置 如果是这样那么CO的时候就是 svn co svn://127.0.0.1/
如果是
svnserve -d
那么 svn co svn://127.0.0.1/LinuxShare/svn/MyProject/

2、创建trac

按照刚才apache配置的地址初始化trac

trac-admin /LinuxShare/trac/MyProject   initenv

 Project Name [My Project]; study
 Database connection string [sqlite:db/trac.db]t;  回车默认
 Repository type [svn];  回车默认
 Path to repository [/path/to/repos]; /LinuxShare/svn/MyProject   svn库地址
 Templates directory [/LinuxShare/trac/MyProject/templates];  回车默认

3、配置apache

如果是用yast和源码包安装的不一样 如果是rpm安装的apache的配置文件分得很细,有/etc/apache2/conf.d/trac.conf单独的文件 默认是两种访问的方式

trac有三种访问方式

  • TracStandalone if you use the standalone server, tracd. 如果用这个就不用apache了 现在你就可以访问了,但官方对这个还是处于完善阶段
  • TracCgi if you use the CGI or FastCGI methods.用traccgi这个方式是官方最不推荐的方式,太慢
  • TracModPython if you use the mod_python method.  因为想用到apache 综合考虑用mod_python的方式
ajian:/etc/apache2/conf.d # cat trac.conf | grep -v "#"

        ScriptAlias /study/ "/LinuxShare/trac/MyProject"

                SetHandler mod_python
                PythonInterpreter main_interpreter
                PythonHandler trac.web.modpython_frontend
                PythonOption TracEnvParentDir /LinuxShare/trac/
                PythonOption TracUriRoot /study
                Order allow,deny
                Allow from all

                AuthType Basic
                AuthName "Trac"
                AuthUserFile /LinuxShare/trac/trac_passwd
                Require valid-user

配置用户密码
htpasswd2 -c /LinuxShare/trac/trac_passwd admin

4、访问

启动apache服务

http://127.0.0.1/study/

就可以看到MyProject这个了 点击进行就可以看到trac的界面

trac_1

5、添加trac用户管理

Trac /LinuxShare/trac/MyProject  permission add admin TRAC_ADMIN

就可以在界面上多一个admin 可以点击进入进行一些管理
6、添加插件

插件到官方去找http://trac-hacks.org/

安装方式就好也看官方上的文档

总结下来有三种方法

A、用easy_install

例:easy_install http://svn.edgewall.com/repos/trac/sandbox/spam-filter

B、下载zip的文件下来之后解压 用

python setup.py bdist_egg            没有setup.py文件的时候
./setup.py install                             有些可以把 setup.py加上可执行权限 这样来安装 但不是所有的都可以
python setup.py install           最好是这样来安装
例:

wget http://trac-hacks.org/changeset/latest/themeengineplugin?old_path=/&filename=themeengineplugin&format=zip

unzip themeengineplugin-r5596.zip

cd themeengineplugin/0.11

python setup.py bdist_egg

python setup.py install

重启apache

有些还需要重新数据库

trac-admin /LinuxShare/trac/MyProject upgrade

再到后台去配置 也可以配置trac.ini

C、在后台安装 也需要下载 就不举例了

trac_3