Aug 23 2011

squid 的header/body编辑功能 续2

Category: 技术ssmax @ 16:57:45

今天终于有时间再搞一下squid的事情了,呵呵

书接上一回,下载GreasySpoon,解压,因为是java包,其实就可以直接运行了。

运行以后自动监听8088端口,这个是管理端口,使用admin/admin登录后就可以进行管理。

界面做的还不错,管理功能也很全面,里面直接就可以写script,有三种方式,EcmaMscript/java/Ruby,我比较熟悉java,所以就直接用java了,呵呵

其中一些script的控制是放在注释头的,具体可以看看

http://greasyspoon.sourceforge.net/scripts_resp.html

修改response还是比较简单的,java封装好了基本的方法,主要用到几个:

httpMessage.deleteHeader

httpMessage.rewriteHeader

httpMessage.addHeader

httpMessage.setBody

这几个基本囊括了修改response头所需的东东了。

服务器默认只是支持

GreasySpoon.mimesupported=html htm xml xhtml wml

可以修改services.properties文件,加上你所想要的文本类型,如:

GreasySpoon.mimesupported=html htm xml xhtml wml css javascript

 

经过查看源代码,这个判断会直接获取content-type 头,然后判断是否contains,所以随便写下就好了,另外最好设置一下

GreasySpoon.mimemagic=off

这样它就不会跑mime的预判,这个预判是对那些头设置错误的请求来说的,一般http请求现在都有正确的content-type 头了,所以关掉还省点资源吧。。。

还有一些配置也是看看代码看看文档就好了,自己懂的语言看代码没有这么痛苦。。。

开启以后,设置一下squid的icap相关参数,直接就成功了,很好很好。哈哈哈


Aug 21 2011

今天修理好一个推拉门

Category: 乱up当秘笈ssmax @ 20:40:42

广海的那个推拉门周六终于不堪重负,坏掉了,拆下来一看,原来下面的滑轮卡死了,从棠石路一直找到二横路,再绕回来四横路,和科韵路,所有的五金店,做门窗的,都找了一遍,终于找到一个差不多的铜皮的,现在新款都是塑胶的,真是越来越差,今天加了点机油,装上去就弄好了,哈哈哈


Aug 17 2011

squid 的header/body编辑功能 续1

Category: 技术ssmax @ 21:02:26

书接上一回,经过一天的测试,发现ecap方式需要用c编译module,自定义的规则用起来不是太方便,遂退而求其次,找了一下icap的服务器实现,找到一下几个,来自wiki:

icap开源实现,其中squid只是客户端:

装了其中python、c、java的实现分别试了一下,最后确定尝试用GreasySpoon配置比较方便,也支持支持java开发,可能就是效率稍差了,先试试吧,呵呵。


Aug 16 2011

squid 的header/body编辑功能

Category: 技术ssmax @ 20:14:34

squid有提供类似apache的substitute_module的内容编辑功能,具体分为以下几种类型:

类型 更改请求Request 更改响应Response
头Header 内容Body 头Header 内容Body
ICAP yes yes yes yes
Client Streams     yes yes
eCAP yes yes yes yes
ACLs yes   del  
code hacks yes yes yes yes

各个的性能对比:

Evaluation Criteria Mechanisms in rough order from “best” to “worst”
Squid independence(独立性,不依赖) ICAP, eCAP, ACLs, Client Streams, code hacks
Processing speed(处理速度) eCAP or Client Streams or ACLs or code hacks, ICAP
Development effort (header adaptation)开发难度(头Header处理) ACLs, code hacks, Client Streams, eCAP, ICAP
Development effort (content adaptation)开发难度(内容Body处理) eCAP, ICAP, Client Streams, code hacks
Versatility(功能支持) code hacks, eCAP, ICAP, Client Streams, ACLs
Maintenance overheads(维护开销) ACLs, eCAP, ICAP, Client Streams, code hacks

总体来说,用squid 3.1之后自带的ECAP支持比较方便,功能也比较强悍,具体研究一下才清楚,呵呵。

原文地址:http://wiki.squid-cache.org/SquidFaq/ContentAdaptation


Aug 13 2011

今天某国家领导来园区参观

Category: 乱up当秘笈ssmax @ 14:17:44

戒严了,早早的在昨晚就躲来了美林,免得进出不方便啊。。。
话说那个规格真是高啊,整个园区基本全部摆满了鲜花,真的是新鲜的哦,放不了几天的那种。。。


Aug 12 2011

ROR redmine + mysql + fcgi + apache

Category: 技术ssmax @ 16:00:42

rubyonrails ROR
这种架构了已经听了非常久了,但是一次都没有试过,这次看中上面一个issue track类的系统redmine,想试试,所以就有了这一次历程,由于各种版本问题,安装还是比较需要经验的,呵呵。

第一步,去看看redmine的文档,发现对ruby和相关组件的版本要求相当多。。。具体如下:

http://www.redmine.org/projects/redmine/wiki/RedmineInstall

The required Ruby and Ruby on Rails versions for a given Redmine version is:

Redmine version Supported Ruby versions Required Rails version Required Rack version
current trunk ruby 1.8.6, 1.8.7 Rails 2.3.11 Rack 1.1.1
trunk from r2887 to r4903 ruby 1.8.6, 1.8.7 Rails 2.3.5 Rack 1.0.1
trunk from r2493 to r2886 ruby 1.8.6, 1.8.7 Rails 2.2.2
trunk before r2493 ruby 1.8.6, 1.8.7 Rails 2.1.2
1.2.x ruby 1.8.6, 1.8.7 Rails 2.3.11 Rack 1.1.1
1.1.x ruby 1.8.6, 1.8.7 Rails 2.3.5 Rack 1.0.1
1.0.x ruby 1.8.6, 1.8.7 Rails 2.3.5 Rack 1.0.1
0.9.x ruby 1.8.6, 1.8.7 Rails 2.3.5 Rack 1.0.1
0.8.x ruby 1.8.6, 1.8.7 Rails 2.1.2

根据redmine最新版1.2.x,确定对应的ruby和相关组件的版本

ruby 1.8.7 / rails 2.3.11 / rack 1.1.1

第二步,去找ruby了,当前最新版本是 ruby 1.9.2 ,好像没找到链接是下载旧版本的(这相当郁闷,后面还有这样的情况)

http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.gz

下载地址反推一下,就找到ftp的下载路径,里面就有所有版本的源代码可以下载了

http://ftp.ruby-lang.org/pub/ruby/

找到1.8.7的最新版,找p数字最大的,p for patch

http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p352.tar.gz

下载,解压,configure ,make,make install

编译ruby之前记得看看自己的openssl-dev 在不在,如果不在的话要装好,要不就没有编译ssl部分的功能了,这样会影响后面的安装。

如果你不安装在标准目录下面,记得自己添加PATH

安装完成后看看版本号?


>ruby -v
 ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]

第三步,安装其他组件,在找文档的过程中,发现ruby的组件有个比较方便的管理器,类似rpm形式的rubygems

找到它的网站

http://rubygems.org/

最新版本1.8.7,这里又是一个大大的陷阱,如果前面看安装文档不注意的话,就按装了gems的最新版了,发现是和rails不兼容的,真是瀑布汗。。。

具体如下:

RubyGems 1.3.7 or higher is required with following limitations :

  • Rails 2.3.5 will fail with RubyGems 1.5.0 or later, stick to previous versions of RubyGems !
  • Rails 2.3.11 will fail with RubyGems 1.7.0 or later, stick to previous versions of RubyGems !

意思就是2.3.11的rails只支持rubygems 1.7.0 以下的,又是一轮寻找旧版的历程,首页也没有直接指进去的

要去到一个叫rubyforge的地方,类似sourceforge吧,找到rubygems项目,找各版本的源代码,如下

http://rubyforge.org/frs/?group_id=126

在其中找到1.6的最新版,1.6.2

http://rubyforge.org/frs/download.php/74445/rubygems-1.6.2.tgz

下载,解压,执行


>ruby setup.rb

会自动判断ruby版本,安装到对应的路径下面

第四步,安装了rubygems以后,就可以用gems命令来管理ruby的组件了

按要求安装rails版本

>gem install rails -v=2.3.11

这个时候会自动帮你安装好所需要的包,和rpm类似了

装好以后会有以下的包

> gem list --local

 actionmailer (2.3.11)
 actionpack (2.3.11)
 activerecord (2.3.11)
 activeresource (2.3.11)
 activesupport (2.3.11)
 rack (1.1.2)
 rails (2.3.11)
 rake (0.9.2)

自动就装好了rack 和 rake,只是希望 rack 1.1.2 不要 太高了,和要求的1.1.1不要有冲突就好,唉。。。

装到这里,还缺少mysql 和 fcgi 的 ruby组件,还有一个叫i18n的组件,这些都是后面出错里面提醒了,都写在这一步安装即可

>gem install i18n -v=0.4.2
>gem install fcgi
>gem install mysql

报错的话自己装好 fastcgi 的dev包和mysql的dev包,其中mysql的随便用yum或者apt-get搞定即可,但是fastcgi的开发包在centos下面貌似没有,yum找不到,apt-get 是有的,那就自己编译咯

最新的fastccgi包,http://www.fastcgi.com/dist/fcgi.tar.gz

下载编译安装,一样的流程,如果不是安装在标准路径的话,gem安装的时候要指定如下:

>gem install fcgi -- --with-fcgi-dir=/home/fastcgi

全部成功之后,看看ruby组件有哪些:

>gem list --local

*** LOCAL GEMS ***

actionmailer (2.3.11)
 actionpack (2.3.11)
 activerecord (2.3.11)
 activeresource (2.3.11)
 activesupport (2.3.11)
 fcgi (0.8.8)
 i18n (0.4.2)
 mysql (2.8.1)
 rack (1.1.2)
 rails (2.3.11)
 rake (0.9.2)

第五步,就是安装redmine了

下载最新版

http://rubyforge.org/frs/download.php/75097/redmine-1.2.1.tar.gz

解压之后就是一个完整的项目结构了。

ok,先访问自己的数据库,建立一个database供其使用

按照安装文件一步步来,先进入你解压出来的目录

>cp config/database.yml.example config/database.yml

编辑 database.yml 中的production配置,设置好你的mysql主机/用户密码和database

production:
adapter: mysql
database: redmine
host: localhost
username: redmine
password: my_password

执行

>rake generate_session_store

创建session目录,会有一些warning,别管它。

>RAILS_ENV=production rake db:migrate

创建数据库,RAILS_ENV的环境变量就指定了要用哪一份配置文件

>RAILS_ENV=production rake redmine:load_default_data

插入初始数据

>ruby script/server webrick -e production

开启webrick服务器,默认端口3000,这样就可以通过http://your_ip:3000/访问你的redmine了

初始的用户名密码是 admin/admin

到这里,测试的话已经够用了,那如果要整合apache呢,看看 pubic/htaccess.fcgi.example

这里就有apache的基本配置了,全部是基于rewrite的,看看你是要cgi还是fcgi实现,就对应

dispatch.fcgi.example

dispatch.cgi.example

两个脚本,这些都是生成好了放在pubic的了,按需要就改名即可,这里解释一下htaccess里面的设置


#判断加载的模块,看看要什么样的处理流程。

<IfModule mod_fastcgi.c>
AddHandler fastcgi-script .fcgi
</IfModule>
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
</IfModule>
<IfModule mod_cgi.c>
AddHandler cgi-script .cgi
</IfModule>

#目录加上跟随链接和可执行cgi
Options +FollowSymLinks +ExecCGI

#打开rewrite

RewriteEngine On

#直接访问根的,跳转到index.html,访问其他没有扩展名的,如xxx,也跳转到对应的xxx.html
#如果请求的文件不存在,就跳转到对应的cgi/fcgi处理,存在的话,就直接访问静态文件。

RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
<IfModule mod_fastcgi.c>
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
</IfModule>
<IfModule mod_fcgid.c>
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
</IfModule>
<IfModule mod_cgi.c>
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
</IfModule>
# 500 服务器错误时候的显示文本。
ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"

如果有apache配置经验的人看到这里基本就都懂得如何配置了,其实原理就是把所有动态的请求都转发到cig/fcgi处理,QSA的意思就是带上所有参数,非常简单明了。

整个安装过程有点长,关键在于各个版本号的兼容性处理上面,很让人头疼,如果没有linux编译经验的人,要完成这个功能的话可能会比较抓狂,呵呵。


Aug 11 2011

JAVA 7 第一次装

Category: 技术ssmax @ 17:12:25

Oracle 收购java以后貌似一直都没啥大动作,今天帮服务器装jdk,上去发现java 7已经是推荐版本了,下载了一个试试看

rpm包就一个 jdk-7-linux-i586.rpm

比以前清爽了一点,以前jdk6的时候是一个自解压包,运行以后装一堆docs啊db啊之类的rpm,看得不爽。

装完以后看看目录结构,没啥大变化

>java -version
java version “1.7.0”
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode, sharing)

>javac -version
javac 1.7.0

看小版本号竟然已经到174了,呵呵

不知道加了些什么新特性,用了这么久好像jdk6的新特性都没怎么用上,唉,老了老了

 

release notes:

http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html

 

看了一下G1 GC仍然是试验阶段,啥时候能转正啊。。。

http://www.oracle.com/technetwork/java/javase/jdk-7-readme-429198.html

Using G1

G1 is still considered experimental and can be enabled with the following two
parameters:

-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC

To set a GC pause time goal, use the following parameter:

-XX:MaxGCPauseMillis =50 (for a pause time target of 50ms)

With G1, a time interval can be specified during which a GC pause should last
no longer than the time given above:

-XX:GCPauseIntervalMillis =200 (for a pause interval target of
200ms)

Note that the above two options represent goals, not promises or guarantees.
They might work well in some situations but not in others, and the GC might not
always be able to obey them.

Alternatively, the size of the young generation can be specified explicitly
to impact evacuation pause times:

-XX:+G1YoungGenSize=512m (for a 512 megabyte young generation)

G1 also uses the equivalent of survivor spaces, which are, naturally, a set
of (potentially non-contiguous) regions. Their size can be specified with the
usual parameters (e.g., -XX:SurvivorRatio=6).

Finally, to run G1 at its full potential, try setting these two parameters
which are currently disabled by default because they may uncover a rare race
condition:

-XX:+G1ParallelRSetUpdatingEnabled
-XX:+G1ParallelRSetScanningEnabled

One more thing to note is that G1 is very verbose compared to other HotSpot
GCs when -XX:+PrintGCDetails is set. This is because it prints per-GC-thread timings and other information very helpful in profiling and trouble-shooting. If you want a more concise GC log, please switch to using -verbosegc (though it is recommended that the more detailed GC log
be obtained).

 

 


Aug 10 2011

Jira 真是越做越失败

Category: 技术ssmax @ 16:15:08

今天要帮别人装一个Jira,下载了最新的4.4 war版,由于平时习惯用resin,所以就直接放在resin4下面了。

按照指引把UserTransation之类的设置好了,试试访问,结果一堆ejb-jar.xml 的定义错误,ok,这个问题其他地方碰到过,在resin4里面不会自动忽略,resin说这个无关紧要,可以删掉的,编辑了几个osxxx和propertyset.jar , 删掉ejb-jar.xml,再试。

这次就报另外一个错误了:

PersistenceUnitInfo propertyset has transactionType JTA, but does not have a jtaDataSource defined.

意思就是propertyset.jar 里面的 persistence.xml 的定义有问题,翻了半天google,发现这个是开发者没有按照EJB开发规范来开发,这里其实是动态提供一个数据源,但是EJB规范里面规定必须显式指定一个,但是新版的jira数据库datasource好像是自己管理了,不需要在服务器里面创建,所以也不知道这里要指定一个什么东东才行。

尝试改成 RESOURCE_LOCAL 结果出来另外一个错误

Exception Description: The attribute [dateValue] from the entity class [class com.opensymphony.module.propertyset.ejb3.PropertyEntry] does not specify a temporal type. A temporal type must be specified for persistent fields or properties of type java.util.Date and java.util.Calendar.

这次真是完全看不懂了,无解。。。最后还是乖乖用standalone版吧,不折腾了。

类似的错误在JBOSS里面也会遇上,jira的开发人员很牛x的讲了一句:

JBoss is no longer a support Application Server. Our recommendation is to use JIRA Standalone or deploy JIRA using Tomcat

也是,人家提供了standalone,你丫的就别想用别的服务器了,哈哈。

https://jira.atlassian.com/browse/JRA-24370


Aug 09 2011

今天凌晨域名被停

Category: 乱up当秘笈ssmax @ 10:24:18

今天凌晨公司门户的域名整个根竟然被注册商停止解释了,好像是由于博客还是相册那边被人上传了没穿衣服的小女孩图片,然后被举报,搞了一把,审核的同学不给力啊,有时候过于依赖机器审核也是会出问题的。。。

刚好昨天晚上密码修复平台的证件上传预览功能也被人搞了一把,马上fix修正,像这些上传文件和sql注入的问题重申过无数次了,还是没有引起重视,非要出事了才知道要关注,唉。


Aug 08 2011

周末去游了个泳

Category: 乱up当秘笈ssmax @ 12:46:07

周末在美林游了个泳,业主是15块一个人,下午4点-晚上9点都可以游

广州的天气非常热啊,游泳池里面都是小孩子,还好家长都是带着小孩子的,所以我去深水池就人很少了

太久没游了,游了一个多小时就有点累了,哈哈


« Previous PageNext Page »