十一月
9

域名更换为xuplus.com

Author Dominic    Category 生活叫吠     Tags

原来的个人博客使用CN域名,众所周知CN域名相当麻烦,上次转移空间的时候一不小心捡了这个域名,所以就转移到这个域名了xuplus.com,新网站地址:http://xuplus.com,新RSS地址:http://xuplus.com/feed。如有收藏,请重新收藏。

三月
6

安装配置ttserver(Tokyo Cabinet,Tokyo Tyrant) ttserver.c:611错误解决办法

Author Dominic    Category linux, Web应用     Tags ,

最近在尝试安装ttserver来评估一下用于某个SCADA中可行性,在CentOS 6.2下安装Tokyo Tyrant时使用下列命令时出现一个错误:

yum install tokyocabinet tokyocabinet-devel

wget http://fallabs.com//tokyotyrant-1.1.41.tar.gz

tar xvzf tokyotyrant-1.1.41.tar.gz

cd tokyotyrant-1.1.41

make

报错:tokyotyrant-1.1.41/.c:611: undefined reference to `tcadbsetskelmulti`。说是这个函数没有定义过,有人说直接把代码注释掉,这样做不太好。经过查询原来版本兼容性问题。

tcadbsetskelmulti 这个函数是Tokyo Cabinet 1.4.35版本中引入的新函数,这一点可以冲tokyocabinet的ChangeLog中发现,同时加入的新函数还有tcadbmulnew, tcadbmuldel,setskeltran。所以为了使用TokyoTyrant 1.1.41必须使用1.4.35版本及之后的Tokyo Cabinet,那么就换最新版本的Tokyo Cabinet吧。

yum install gcc-c++ zlib-devel bzip2-devel

wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.47.tar.gz

tar xvzf tokyocabinet-1.4.47.tar.gz

cd tokyocabinet-1.4.47

./configure –enable-profile

make

make install

cd

wget http://fallabs.com/tokyotyrant/tokyotyrant-1.1.41.tar.gz

tar xvzf tokyotyrant-1.1.41.tar.gz

cd tokyotyrant-1.1.41

./configure

make

make install

果然顺利安装ttserver

八月
24

智能变电站中在线监测系统一次设备监测参量和IEC 61850模型

分享一下:

1、一次设备监测参量

一次设备 监测参量
主变 顶层油温、底层油温、油箱油位、绕组温度、铁心接地电流、油中溶解气体、中性点直流、主变套管绝缘、环境温湿度、有载调压开关及在线滤油机监测、主变设备热像测温与故障定位巡视系统
GIS 局部放电、SF6气体密度、微水和温度、断路器参数(包括一次电压、一次电流(应可兼容电子式CT)、线圈电流、电机电流、三相同期、重合闸分析、预击穿时间、燃弧时间、触头磨损等)、避雷器泄漏电流和阻性电流
出线开关柜 触头温度、柜内温湿度、电能质量检测
出线并联电抗器 铁心接地电流、绕组温度
出线并联电容器 电容器故障、绝缘降低、电抗器故障、放电线圈故障、过压过流、投切录波

2、基本数据模型

  • 变压器 YPTR

描述 数据名 CDC M/O 备注
模式(Mode) Mode ISC M  
性能(Behaviour) Beh ISI M  
健康(Health) Health ISI M  
铭牌(NamPlt) Name ISI M  
运行小时数(Operation hours) Operh ISI O  
控制量
冷却泵(Cooling Pumps) Pumps ISC O  
冷却风扇(Cooling Fans) Fans ISC O  
测量量
绕组热点温度(Temperature of Winding hot point) HPTemp MV O  
绝缘水平(Level of Insulating Medium) IMLev MV O  
H2 H2 MV O 绝缘液体介质中相对饱和湿度(百分数%表示)
CO2 CO2 MV O  
CO CO MV O  
CH4 CH4 MV O  
C2H6 C2H6 MV O  
C2H4 C4H4 MV O  
C2H2 C2H2 MV O  
微水 MicroH2O MV O  
总烃 TotHyd MV O Total Hydrocarbon
含气量(氧气O2+氮气N2) PctO2N2 MV O 百分数(%)表示单位
Hydran仪复合气体 PctHdrGas MV O 百分数(%)表示单位
总可燃性气体(TCG)等各组分气体浓度 TCGChm MV O 百分数(%)表示单位
相对产气速率 RlvGRte MV O  
绝对产气速率 AltGRte MV O  
油温 OilTmp MV O  
色谱图 CmtGram MV O 表示色谱图的测量值
CmtGramMad SPS O 表示色谱图形成
采样时间 SMTmh MV O 小时单位时间
SMTmm 分钟单位时间
SMTms 秒单位时间
SMTmms 毫秒单位时间
SMTm 其他时间单位
环境温度 EnvTmp MV O  
浓度报警 DenAlm SPS O  
铁心接地电流 CGAmp MV O 电流如果没有三相概念,则采用MV
CGA WYE O 电流如果包含三相,则用WYE
顶层油温 ToOilTmp MV O  
局部放电量最大值 MaxPaDsch MV O  
局部放电量最大值相位 MaxPaDsAng MV O  
局部放电量平均值 AvPaDsch MV O  
越限放电脉冲数 DschPlsOv INS O  
局部放电放电波形 PaDschCrv SPS O 波形已形成
MV O 波形测量值
局部放电谱图 PaDschGrap SPS O 谱图已形成
MV O 波形测量值
  • 变压器分节头YLTC

描述 数据名 CDC M/O 备注
模式(Mode) Mode ISC M  
性能(Behaviour) Beh ISI M  
健康(Health) Health ISI M  
铭牌(NamPlt) Name ISI M  
外部设备健康(External equipment health) EEHealth ISI O  
外部设备铭牌(External equipment name plate) EEName PLATE O  
运行小时数(Operation hours) Operh ISI O  
测量量
压力(Pressure) Pres MV O  
绝缘介质温度(Temperature of Insulating Medium) Lev MV O  
驱动力矩(Drive torque) Torq MV O  
电机驱动电流(Motor drive current) DrvMA MV O  
循环油电机驱动电流(Oil circulation motor drive current) OCMA MV O  
可控点
分接头位置(Tap position) TapPos IST O  
上升(Raise) Raise BST O  
下降(Lower) Lower BST O  
冷却泵(Cooling Pumps) Pumps ISC O  
状态量
分接头上升到达最高档位置(End position raise reached) EndPosR SPS M  
分接头下降到达最低档位置(End position lower reached) EndPosL SPS M  
油过滤(Oil filtration) OilFil SPS M  
最高油位(Oil level maximum) OLMax SPS M  
最低油位(Oil level minimum) OLMin SPS M  
  • 变压器套管YPRB

描述 数据名 CDC M/O 备注
模式(Mode) Mode ISC M  
性能(Behaviour) Beh ISI M  
健康(Health) Health ISI M  
铭牌(NamPlt) Name ISI M  
运行小时数(Operation hours) Operh ISI O  
测量量
泄漏电流 RelA WYE O 电流如果包含三相,则用WYE
RelAmp MV O 非三相电流,则采用MV
介质损耗因数 LosFact MV O  
电容量 React MV M  
电容基值 ReactVal MV O  
  • 局部放电监测和诊断 XPDC

描述 数据名 CDC M/O 备注
模式(Mode) Mode ISC M  
性能(Behaviour) Beh ISI M  
健康(Health) Health ISI M  
铭牌(NamPlt) Name ISI M  
外部设备健康(External equipment health) EEHealth ISI O  
外部设备铭牌(External equipment name plate) EEName PLATE O  
运行小时数(Operation hours) Operh ISI O  
测量量
局放噪声水平,单位db (Acoustic level of partial dischaarge in db) AcuPaDsch MV M  
  • 断路器 XCBR

描述 数据名 CDC M/O 备注
模式(Mode) Mode ISC M  
性能(Behaviour) Beh ISI M  
健康(Health) Health ISI M  
铭牌(NamPlt) Name ISI M  
操作计次数(Operation counter) OperCnt ISI M  
控制量
开关位置(Switch position) Pos DPC M  
闭锁跳闸(Block opening) BlkOpen SPC M  
闭锁合闸(Block opening) BlkClos SPC M  
蓄能电动机允许(Charger motor enabled) ChgmotorEn SPC O  
测量量
分合闸线圈电流(Opening and Closing Coil Current) OpnClsColA MV O  
线路电流(Line Current) OvAVal MV O  
累积I2T(Cumulative I2T) CumI2T MV O  
机械动作时间 McaOpTms MV O 以秒为单位
McaOpTmms MV O 以毫秒为单位
拉弧时间 CATms MV O 以秒为单位
CATmms MV O 以毫秒为单位
开断电流有效值 OpnAmp MV O  
温度 Tmp MV O  
绝对压力 AltPres MV O  
相对湿度 RlvMst MV O  
密度 Den MV O  
压力(20度) Pres MV O  
体积比 VoluRatio MV O  
质量比 QtyRatio MV O  
露点 DewPVal MV O  
储能时间长度 SavPwTms MV O 以秒为单位
SavPwTmms MV O 以毫秒为单位
动作类型 OpTyp INS    
实时电流 RealA WYE O 电流如果包含三相,则用WYE
RealAmp MV O 非三相电流,则采用MV
开关量 NumPwrUp INS O  
剩余电寿命 ResPwr MV O  
累计开断电流 TotOpnAmp MV O  
累计触头磨损量 TotTapLos MV O  
累计开断次数 TotOpnCnt MV O  
波形 WavCrv MV O  
  • 开关(隔离刀闸) XSWI

描述 数据名 CDC M/O 备注
模式(Mode) Mode ISC M  
性能(Behaviour) Beh ISI M  
健康(Health) Health ISI M  
铭牌(NamPlt) Name ISI M  
外部设备健康(External equipment health) EEHealth ISI O  
外部设备铭牌(External equipment name plate) EEName PLATE O  
操作计数(Operation counter) OperCnt ISI M  
控制量
开关位置(Switch position) Pos DPC M  
闭锁跳闸(Block opening) BlkOpen SPC M  
闭锁合闸(Block opening) BlkClos SPC M  
蓄能电动机允许(Charger motor enabled) ChgmotorEn SPC O  
状态量
断路器操作性能力(Circuit breaker operating Capability) SwTyp ISI M  
波形定点切换能力(Point On Wave switching capability) SwOpCap ISI M  
  • 电缆 ZACB

描述 数据名 CDC M/O 备注
模式(Mode) Mode ISC M  
性能(Behaviour) Beh ISI M  
健康(Health) Health ISI M  
铭牌(NamPlt) Name ISI M  
运行小时数(Operation hours) Operh ISI O  
测量量
泄漏电流 RelA WYE O 电流如果包含三相,则用WYE
RelAmp MV O 非三相电流,则采用MV
绝缘电阻 InsRis MV O  
介质损耗因数 LosFact MV O  
局部放电量最大值 MaxPaDsch MV O  
局部放电量最大值相位 MaxPaDsAng MV O  
局部放电量平均值 AvPaDsch MV O  
越限放电脉冲数 DschPlsOv INS O  
局部放电放电波形 PaDschCrv SPS O 波形已形成
MV O 波形测量值
局部放电谱图 PaDschGrap SPS O 谱图已形成
MV O 波形测量值
  • 电容器 ZCAP

描述 数据名 CDC M/O 备注
模式(Mode) Mode ISC M  
性能(Behaviour) Beh ISI M  
健康(Health) Health ISI M  
铭牌(NamPlt) Name ISI M  
外部设备健康(External equipment health) EEHealth ISI O  
外部设备铭牌(External equipment name plate) EEName PLATE O  
运行小时数(Operation hours) Operh ISI O  
控制点
电容器组设备状态(Capacitor bank device status) CapDS SPC M  
状态点
由于放电引起的闭锁(Blocked due to discharge) DschBlk SPS O  
  • 电抗器 ZREA

描述 数据名 CDC M/O 备注
模式(Mode) Mode ISC M  
性能(Behaviour) Beh ISI M  
健康(Health) Health ISI M  
铭牌(NamPlt) Name ISI M  
外部设备健康(External equipment health) EEHealth ISI O  
外部设备铭牌(External equipment name plate) EEName PLATE O  
运行小时数(Operation hours) Operh ISI O  
测量量
H2 H2 MV O 绝缘液体介质中相对饱和湿度(百分数%表示)
CO2 CO2 MV O  
CO CO MV O  
CH4 CH4 MV O  
C2H6 C2H6 MV O  
C2H4 C4H4 MV O  
C2H2 C2H2 MV O  
微水 MicroH2O MV O  
油温 OilTmp MV O  
环境温度 EnvTmp MV O  
浓度报警 DenAlm SPS O  
铁心接地电流 CGAmp MV O 非三相电流,则采用MV
CGA WYE O 电流如果包含三相,则用WYE
顶层油温 ToOilTmp MV O  
局部放电量最大值 MaxPaDsch MV O  
局部放电量最大值相位 MaxPaDsAng MV O  
局部放电量平均值 AvPaDsch MV O  
越限放电脉冲数 DschPlsOv INS O  
局部放电放电波形 PaDschCrv SPS O 波形已形成
MV O 波形测量值
局部放电谱图 PaDschGrap SPS O 谱图已形成
MV O 波形测量值
  • 电流互感器 TCTR

描述 数据名 CDC M/O 备注
模式(Mode) Mode ISC M  
性能(Behaviour) Beh ISI M  
健康(Health) Health ISI M  
铭牌(NamPlt) Name ISI M  
外部设备健康(External equipment health) EEHealth ISI O  
外部设备铭牌(External equipment name plate) EEName PLATE O  
运行小时数(Operation hours) Operh ISI O  
测量量
泄漏电流 RelA WYE O 电流如果包含三相,则用WYE
RelAmp MV O 非三相电流,则采用MV
介质损耗因数 LosFact MV O  
电容量 React MV M React
电容基值 ReactVal MV O ReactVal
  • 电压互感器 TVTR

描述 数据名 CDC M/O 备注
模式(Mode) Mode ISC M  
性能(Behaviour) Beh ISI M  
健康(Health) Health ISI M  
铭牌(NamPlt) Name ISI M  
运行小时数(Operation hours) Operh ISI O  
测量量
泄漏电流 RelA WYE O 电流如果包含三相,则用WYE
RelAmp MV O 非三相电流,则采用MV
介质损耗因数 LosFact MV O  
电容量 React MV M React
电容基值 ReactVal MV O ReactVal
  • 避雷器 ZATR

描述 数据名 CDC M/O 备注
模式(Mode) Mode ISC M  
性能(Behaviour) Beh ISI M  
健康(Health) Health ISI M  
铭牌(NamPlt) Name ISI M  
外部设备健康(External equipment health) EEHealth ISI O  
外部设备铭牌(External equipment name plate) EEName PLATE O  
运行小时数(Operation hours) Operh ISI O  
测量量
全电流(Total Current) TolCur MV O  
阻性电流(Fundamental Resistive Current) FundRCur MV O  
  • 绝缘子 ZINL

描述 数据名 CDC M/O 备注
模式(Mode) Mode ISC M  
性能(Behaviour) Beh ISI M  
健康(Health) Health ISI M  
铭牌(NamPlt) Name ISI M  
外部设备健康(External equipment health) EEHealth ISI O  
外部设备铭牌(External equipment name plate) EEName PLATE O  
运行小时数(Operation hours) Operh ISI O  
测量量
温度(Temperature) Tmp MV O  
湿度(Humidity) Hum MV O  
报警(Alarm) Alm MV O  
电池电压(Battery Voltage) BatVol MV O  
等值盐密(salt density) ESDD MV O  
平均泄漏电流(Average leakage current) AvAmp MV O  
最大泄漏电流(Maximum leakage current) MaxRelAmp MV O  
七月
4

用Postgresql作为BIND9 数据存储情况下TXT等包含空格记录的处理

Author Dominic    Category linux, Web应用     Tags , ,

前段时间尝试用PostgreSQL 作为BIND9的后端数据存储玩玩,发现真不错,需要的Postgresql数据库表结构简单,查询效率高、及时生效。SOA记录也是一条语句,但发送邮件需要的TXT记录出现了问题,按照SPF格式写入了以下TXT记录:“v=1 ip4:60.166.118.xxx include:xuplus.com -all”,结果使用nslookup查询出来的情况竟然是这样的:

服务器:  google-public-dns-a.google.com
Address:  8.8.8.8

非权威应答:
xuplus.com      text =

        "v=spf1"
        "ip4:60.166.118.xxx"
        "include:xuplus.com"
        "-all"

这样的记录是没有办法使用的,使用SPF记录测试工具(http://www.openspf.org/Tools)是没有办法通过。查阅了一番资料发现无法解决这个问题,翻阅bind9 源代码发现在rdata.c文件的dns_rdata_tofmttext函数中使用了的linebreak就是空格字符,那么向spf这种需要包含空格的记录怎么办呢?经过尝试可以添加斜线(\)作为转义字符,由于数据库记录中斜线也需要转义,所以将记录对应的rdata字段值改成 ‘v=spf1\\ ip4:60.166.118.xxx\\ include:xuplus.com\\ -all’这样的即可,这样之后再次nslookup就可以发现结果正常了:

服务器:  cache2.ahwhtel.net.cn
Address:  202.102.199.68

非权威应答:
xuplus.com      text =

        "v=spf1 ip4:60.166.118.xxx include:xuplus.com -all"

xuplus.com      nameserver = dns2.xuplus.com
xuplus.com      nameserver = dns1.xuplus.com
dns1.gi-rms.com internet address = 60.166.118.xxx
dns2.gi-rms.com internet address = 60.166.118.xxx

9也有转移字符:斜线(\)。

三月
26

PostgreSQL 9.0基于streaming replication的Primary/Standby集群安装典型配置文件

最近给PostgreSQL搞伤了,Debian 5默认PostgreSQL是8.4,本身是不支持Primary/Standby集群的。在经历尝试Slony的超级复杂配置和pgpool无法按照步骤成功的痛苦经历情况下,将PostgreSQL升级到9.0,但是根据网上一些手册还是配置不成功,经过摸索终于成功配置了,并将配置文件公布出来供参考。

安装指令如下,其中192.168.0.212作为Primary服务器,192.168.0.211作为Standby服务器

两台服务器共同执行部分:

  • 修改apt源

vim /etc/apt/sources.list

在最后加入:

deb http://backports.debian.org/debian-backports lenny-backports main

deb http://backports.debian.org/debian-backports lenny-backports-sloppy main

apt-update

  • 安装PostgreSQL数据库服务

wget http://ftp.us.debian.org/debian/pool/main/o/ossp-uuid/libossp-uuid15_1.5.1-1.1+b1_i386.deb

wget http://ftp.us.debian.org/debian/pool/main/o/ossp-uuid/libossp-uuid-dev_1.5.1-1.1+b1_i386.deb

dpkg -i libossp-uuid*.deb

apt-get install -t lenny-backports -common

apt-get install -t lenny-backports-sloppy postgresql-9.0 postgresql-client-9.0 postgresql-contrib-9.0 postgresql-server-dev-9.0

  • 修改访问控制

vim /etc/postgresql/9.0/main/pg_hba.conf

最后加一行

host all all 192.168.0.0/24 md5

  • 修改监听范围

vim /etc/postgresql/9.0/main/postgresql.conf

修改listen_addresses = ‘localhost’为listen_addresses = ‘*’,如果前面有#号则需要删除#号

  • 重新启动postgresql服务

/etc/init.d/postgresql restart

212 Primary服务器配置

  • 设置同步账号

su – postgres

psql

create user repl superuser log in password ‘replpwd’ ;

  • 修改访问控制

vim /etc/postgresql/9.0/main/pg_hba.conf

最后添加以下内容

host replication repl 192.168.0.211/32 md5

  • 修改postgresql服务配置文件

vim /etc/postgresql/9.0/main/postgresql.conf

主要配置修改如下:

wal_level = hot_standby

archive_mode = on

archive_command = ‘cp -i %p /var/lib/postgresql/9.0/archivedir/%f </dev/null’

archive_timeout = 600

max_wal_senders = 5

wal_keep_segments = 32

  • 建立归档目录

su – postgres

mkdir /var/lib/postgresql/9.0/archivedir/

  • 重启服务

/etc/init.d/postgresql stop

/etc/init.d/postgresql start

211Standby服务器配置

  • 修改postgresql服务配置文件

vim /etc/postgresql/9.0/main/postgresql.conf

主要配置修改如下:

wal_level = hot_standby

hot_standby = on

vim /etc/postgresql/9.0/main/recovery.conf

内容如下:

restore_command = ‘cp /var/lib/postgresql/9.0/archivedir/%f %p’ archive_cleanup_command = ‘pg_archivecleanup /var/lib/postgresql/9.0/archivedir %r’

standby_mode = ‘on’

primary_conninfo = ‘host=192.168.0.212 port=5432 user=repl password=replpwd’

trigger_file = ‘/var/lib/postgresql/9.0/trigger_activestb’

cp /etc/postgresql/9.0/main/recovery.conf /var/lib/postgresql/9.0/main/

  • 停止服务

/etc/init.d/postgresql stop

  • 删除原数据目录下数据文件

su – postgres

cd /var/lib/postgresql/9.0/

rm –R –f main

mkdir main

chmod –R 700 main

传送数据文件到StandBy并启动集群

  • 从212服务器中传送文件(在212服务器执行)

su – postgres

psql -c "SELECT pg_start_backup(‘label’,true);"

rsync -avz /var/lib/postgresql/9.0/main/* postgres@192.168.0.211:/var/lib/postgresql/9.0/main/

注意:这里rsync是没有办法执行的,需要先建立两个服务器之间关于postgres之间的ssh 密钥文件交换。

  • 211服务器删除pid文件(在211服务器执行)

rm /var/lib/postgressql/9.0/main/postgresql.pid

/etc/init.d/postgresql restart

  • 212服务器正式启动主从模式(在212服务器执行)

su – postgres

psql -c "SELECT * from pg_stop_backup();"

exit

/etc/init.d/postgresql restart

测试

在Primary服务器上建立一个数据库或者修改一个数据表,可以在StandBy数据库上看到同样的修改操作发生了。

配置参考文件

可直接使用的配置参考文件见:。注意前缀分别代表在那台服务器上的配置文件。

三月
26

给CodeIgniter 2.0.1中的PostgreSQL 数据库驱动打两个补丁

Author Dominic    Category PHP     Tags ,

近期帮朋友用CodeIgniter基于PostgreSQL做了个小东西,发现CodeIgniter2.0.0在实现PostgreSQL数据库驱动是有两个小缺陷。

一个是CI的数据库通用接口insert_batch,CI2.0发布包中的PosgreSQL驱动实现,并没有实现该接口,可以在system\database\drivers\postgre\postgre_driver.php文件中的_insert函数下添加如下函数。

// -------------------------------------------------------------------- /** * Insert_batch statement * * Generates a platform-specific insert string from the supplied data * * @access public * @param string the table name * @param array the insert keys * @param array the insert values * @return string */ function _insert_batch($table, $keys, $values) { return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES ".implode(', ', $values); } // --------------------------------------------------------------------

另一个是insert_id()函数,该函数如果在数据表没有serial字段可能无法返回数值,导致问题,特别是主从表而从表不需要serial字段的情况下。

如果碰到这个问题可以把原来的:

elseif ($table != null && $column != null && $v >= '8.0') { $sql = sprintf("SELECT pg_get_serial_sequence('%s','%s') as seq", $table, $column); $query = $this->query($sql); $row = $query->row(); $sql = sprintf("SELECT CURRVAL('%s') as ins_id", $row->seq); }

修改成:

elseif ($table != null && $column != null && $v >= '8.0') { $sql = sprintf("SELECT pg_get_serial_sequence('%s','%s') as seq", $table, $column); $query = $this->query($sql); $row = $query->row(); if($row->seq!='') $sql = sprintf("SELECT CURRVAL('%s') as ins_id", $row->seq); else $sql='SELECT LASTVAL() as ins_id'; }

二月
9

2011年兔年个人计划

Author Dominic    Category 生活叫吠     Tags

虎年平稳结束,在2010年发生了两件重要的事情,进入兔年后,正式迈入奔四时代,古人云:“三十而立”,而我马上就三十周岁了确什么也没有立起来,这就是2010年我焦虑了一整年的原因。2011年还是需要做很多事情的,写下来到龙年到来的时候看看做到了哪些。

1、工作方面

    • 向电力自动化方向转型
    • 进行个人收入、职位、能力方面提升
    • 寻找下一个方向工作机会

2、家庭方面

    • 敦促老婆完成两项资格考试和尝试新的方向
    • 给小贝壳添置一台iPad或者平板作为她个人电脑
    • 搞定父母一个人的养老保险
    • 帮助表弟找一份工作
    • 确保在老婆转型过程中家庭总收入不下降

3、个人方面

    • 完成信息系统项目管理师之后的高级项目经理或者项目经理认证
    • 进行一级建造师考试
    • 添置一台新笔记本和替换现有手机
    • 开始Android或者iOS开发学习
一月
18

CentOS下redmine、apache、svn配置安装心得

Author Dominic    Category Web应用, 软件应用     Tags , ,

CentOS默认开启了SELinux,安装Redmine、apache、svn之类的还是蛮复杂的,经过几次折腾之后,终于顺利将redmine折腾成功了,有些心得记录下来备查:

集成方案大体为:

a) svn和apache集成,通过http协议访问svn,svn使用域名svn.test.com,仓库访问路径为:http://.test.com/XXXX

b) svn通过Perl和redmine的数据库集成提供身份和权限认证,仓库访问用户名和密码由redmine中创建的用户和密码访问,可访问项目仓库受redmine控制

c) redmine用mongrel_rails 运行于3000端口

d) apache使用proxy模块将pms.image-pro.com.cn的80端口反向代理到redmine的3000端口

e) 每5分钟通过cron的形式将redmine中项目信息同步到svn中

1、不要使用passenger集成Apache,使用反向代理方式集成Apache

官方指南中使用passenger来和Apache集成,但是passenger跟SELinux集成是很困难正常运行的,解决办法需要将SELinux更改为permissive模式(编辑

/etc/sysconfig/selinux文件修改为SELINUX=permissive),然而使用Apache的反向代理向rails转发却简单得多。

这种方式需要开启redmine的“启用用于版本库管理的Web Service”功能,设置方式为安装完成之后,用admin账号登陆redmine,进入“管理”->“配置”->“版本库”设置页面开启“启用用于版本库管理的Web Service”选项,并生成一个API Key,这个API key有用。

相关virtualhost配置节点如下:

<VirtualHost *:80> ServerAdmin bbs@test.com DocumentRoot "/var/www/" ServerName pms.test.com ErrorLog "logs/pms.test.com-error.log" CustomLog "logs/pms.test.com-access.log" combined <Location /sys> Order deny,allow Allow from 127.0.0.1 Deny from all </Location> ProxyPass / http://localhost:3000/ ProxyPassReverse / http://localhost:3000/ </VirtualHost>

注意:如果/etc/hosts文件中没有解析相关域名到127.0.0.1的话,最好在Allow from后面添加一行让服务器ip可以正常访问。

2、使用两个virtualhost,分别安装redmine和svn,并使用一个location配置svn

这样的好处是明显的,svn单独访问也足够间接,不使用svn和svn-private两个Location配置来分别供给SVN客户端和redmine使用。

相关virtualhost配置节点如下:

<VirtualHost *:80> ServerAdmin svn@test.com ServerName svn.test.com ErrorLog "logs/dummy-svn.test.com-error.log" CustomLog "logs/dummy-svn.test.com-access.log" combined PerlLoadModule Apache2::Redmine <Location /> DAV svn SVNParentPath "/var/svn" Order deny,allow Deny from all Satisfy any PerlAccessHandler Apache::Authn::Redmine::access_handler PerlAuthenHandler Apache::Authn::Redmine::authen_handler AuthType Basic AuthName "Redmine SVN Repository" #read-only access <Limit GET PROPFIND OPTIONS REPORT> Require valid-user Allow from 127.0.0.1 # Allow from another-ip Satisfy any </Limit> # write access <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> ## for mysql RedmineDSN "DBI:mysql:database=redmine;host=localhost" RedmineDbUser "redmine" RedmineDbPass "password" </Location> </VirtualHost>

这里Allow from跟上面说的一样,最好添加服务器的ip通过,这样一个Location节点即可完成SVN设置,保证redmine中看到的svn仓库地址和SVN客户端(例如:TortoiseSVN)中使用的svn仓库地址一致(都是http://svn.test.com/XXXXX,而不是一个/svn-private/XXX,一个/svn/XXXX),而且svn仓库地址也够简洁。

3、如果邮件使用GMail的服务,则需要使用ruby 1.8.7,rails要求2.3.5

如果默认安装的是ruby 1.8.6则发送邮件的时候会报错,要求先自行starttls命令。必须升级到1.8.7

相关命令:

ftp ftp.ruby-lang.org cd /pub/ruby get ruby-1.8.7.pXXX.tar.gz tar zxvf ruby-1.8.7.pXXX.tar.gz ruby-1.8.7.pXXX cd ruby-1.8.7.pXXX ./configure --prefix=/usr make make install ruby -v which ruby cd ..

这里XXX是对应的发布版本号,当前是330,需要注意的是有些版本不一定能够正常编译通过,我在测试的时候p160编译就通过不了。

4、相关SELinux权限设置

执行以下命令赋予相关目录正确的SELinux属性:

chcon -u system_u -R -t httpd_log_t /var/www/redmine/log chcon -u system_u -R -t httpd_tmpfs_t /var/www/redmine/tmp chcon -u system_u -R -t httpd_sys_script_rw_t /var/www/redmine/files chcon -u system_u -R -t httpd_sys_script_rw_t /var/www/redmine/public/plugin_assets

由于svn版本库的SELinux设置比较复杂,可以通过以下命令直接处理完毕

chcon -u system_u -R -h -t httpd_sys_script_rw_t /var/svn

5、redmine跟svn之间有关版本库通过可以通过cron来完成

cron执行内容如下:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/bin/ruby /var/www/redmine/extra/svn/reposman.rb --redmine pms.test.com -k apikey --svn-dir /var/svn --owner apache --url http://svn.test.com/ >> /var/log/reposman.log

其中apikey内容为redmine后台生成的API key,这样每5分钟都会将redmine中的版本库信息同步到svn中(自动创建版本库)

6、redmine使用mongrel自启动

安装mongrel之后,使用cron来确保在启动时候自动启动mongrel_rails来启动redmine。

cron执行内容如下:

@reboot cd /var/www/redmine; rm -f log/mongrel.pid; /usr/bin/mongrel_rails start -p 3000 -d -e production

7、使用ImageMagick绘制甘特图,需要rMagick 1.5.17版本

执行以下命令:

yum install ImageMagick -y yum install ImageMagick-devel -y yum install freetype -y yum install gd-devel -y wget http://www.osresources.com/files/centos-windows-fonts/msfonts.tbz mkdir /usr/share/fonts/default/TrueType tar xvjpf msfonts.tbz -C /usr/share/fonts/default/TrueType/ gem install rmagick -v=1.15.17

8、Redmine.pm存放文字需要根据实际情况来定

x64位操作系统perl库文件位置是/usr/lib64/perl5下,perl5.10版本库位置不再是/perl5.8.8,最后位置也不一定是Apache目录,例如:我机器上就是复制到/usr/lib64/perl5/Apache2目录下,所以具体目录应该根据实际情况决定,拷贝完毕之后Apache的相关VirtualHost配置加载的模块语句就有变化了(如上我的变成了Apache::Redmine)。

 

整体来说,安装过程需要仔细,特别是SELinux在某种程度上来说是设置的羁绊,但RedHat等公司开发它肯定有他的安全必要性,所以我们还是完成SELinux环境下安装比较好。

相关可参考官方资源和文档:

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

How To Automate repository creation:http://www.redmine.org/projects/redmine/wiki/HowTo_Automate_repository_creation

Repositories access control with apache, mod_dav_svn and mod_perl:http://www.redmine.org/projects/redmine/wiki/HowTo_configure_Redmine_for_advanced_Subversion_integration

Email Configuration:http://www.redmine.org/projects/redmine/wiki/EmailConfiguration

, Subversion and mod_svn:http://ejohansson.se/archives/2007/11/04/selinux-subversion-and-mod_svn/

一月
11

我修改的可正常使用的Live Writer SkyDrive插件

Author Dominic    Category 软件应用     Tags , , ,

微软的LiveWriter是不错的离线博客写作工具,同时微软也提供了25G的SkyDrive空间,对于存放博客附件来说,放在SkyDrive还是不错的选择,毕竟如果附件放在自己的博客主机上,有时候很容易流量超标。

2007年的时候Scott发布了一个SkyDrive插件(http://plugins.live.com/writer/detail/skydrive-embed-plugin),几年过去微软升级了SkyDrive,和office.live.com进行了整合,直接导致了SkyDrive插件不能使用,首先是文件夹浏览不能使用,再就是直接插入URL(包含office.live.com)时报错。我花了一点时间对这个插件做了一些hack。

主要hack内容有:

1、处理office.live.com和skydrive.live.com两种情况;

2、修改useiframe选择框不能使用情况,改用直接连接对应的url而不用Live Writer的插件函数;(这样就要求ie的代理设置必须保证可以正常访问网络);

3、更正浏览共享文件夹是不能显示共享者名字和不能正常获取文件夹下文件的问题;

4、获取文件夹下文件改用RSS方式,加快获取速度。

使用方法,下载附件中的文件替换skydrive embed plugin的文件或者直接放在Writer的Plugin目录下。

image

下载地址:

一月
9

分享某公司负责IT运维的部门工作量统计文档和技术人员考核文档

Author Dominic    Category IT服务     Tags , ,

前一段时间帮朋友要来这两个文档给他参考,该公司的IT运维部门的流程规范性还是比较好,有关工作量统计文档和考核文档都是比较齐全的,分享出来给大家参考参考。

第一个文档是 “服务工单质量监及工作量统计表”,包含服务工单质量监控评审记录表、工单工作量统计表、工作任务明细三张表,如下所示:

image

image

image

第二个文档是“技术人员考核表”,按照工作负荷、工作任务、工作质量、工作技能、工作态度与责任感、协调性、纪律性七个方面进行考核。如下:

image

两个文档可以从SkyDrive下载:

服务工单质量监及工作量统计表:

技术人员考核表:

一月
7

VMWare 中虚拟机报错“eth0 设备的 MAC 地址与预想的不符,忽略。”解决办法

Author Dominic    Category 软件应用     Tags ,

今天拷贝了一个CentOS做测试,打开虚拟机的时候我选择了“I copied it.”,结果启动的时候,CentOS报错“eth0 设备的 MAC 地址与预想的不符,忽略。 ",进入系统使用ifup eth0命令也不能启用网卡,还是报同样错:

image

使用ifconfig -a命令可以看到eth0当前MAC地址为:00:0C:29:12:8A:3C :

image

 

打开虚拟机的配置文件CentOS.vmx可以看到记载的MAC地址为:00:0c:29:12:8a:3c

image

显然,我选择”I copied it.“之后VMWare 重新分配了一个新MAC,问题就在这里,修改一下eth0的MAC地址跟vmx文件一致应该可以解决问题。

执行vi /etc/sysconfig/network-scripts/ifcfg-eth0,将最后一行的MAC地址更改为00:0c:29:12:8a:3c,然后再启用网卡/sbin/ifup eth0,果然解决了这个问题。

有关VMWare虚拟机的网卡MAC地址说明,以及修改方式可以参考:http://hi.baidu.com/china_lantian/blog/item/4b5ef8d60d97132a06088ba0.html

专题推荐

标签

分类目录

新浪微博

存档

近期文章

近期评论

友情链接

分享按钮