寻觅生命中的那一片浅草......

文章属于类别 应用软件

Nginx备忘两例

Nginx reload会有影响长连接吗?

不会,处理长连接的worker会处于「is shutting down」的状态,这种状态是会完成已有连接,不接受新连接

另外,Nginx始终会保持配置中定义的可用worker数量,例如你定义了4个worker,就是除了上述处于「is shutting down」的进程外, 依然有4个进程

Nginx reload时CPU飙高

版本太旧导致,是1.4.x版本,nginx reload的时候会遍历所有连接引起的,连接不多的时候感觉不出来,大量的时候就很明显。cpu会飙到100%,1.9.4版本修复

感谢微信群里的朋友。

Zimbra:更新收件人地址栏的提示

我们遭遇的问题

我们用的是Zimbra系统,大家在发邮件的时候,收件人地址自动完成,有3个地方来做

  1. GAL:全称是Global Address List,就是全局地址列表,这个优先级更高一些
  2. mailbox ranking table,这个存在于各个账号中,当你在填入收件人的时候,选择了其中一个地址,那么这个地址就会缓存在这个table中
  3. 个人邮箱中的「联系人」

当某个账号修改了姓名,在发邮件的时候,在地址栏输入地址,显示的姓名还是旧的,这时需要处理上面所 列的3个地方

解决办法

更新下GAL

将LDAP的信息同步到GAL,其中zimbra需要根据具体的设置来修改,默认就是zimbra或者InternalGAL

zmgsautil forceSync -a galsync@example.com -n zimbra
zmgsautil fullSync -a galsync@example.com -n zimbra

更新GAL这一步实际不是必须,因为系统会每天同步一次的,假设你是修改后一天之后才发现还是就的,那么这里就不需要这一步,具体可以去后台看看,或者命令行也可以,不过我没有去查命令怎么看

配置 -> 域名 -> 齿轮图标 -> 设置GAL

Clear mailbox ranking table

这是要逐个清理的,也就是你有100个账号,那么你就要遍历100个账号去处理

for i in `cat  /tmp/all_account.txt`
do
    echo $i;zmsoap -z -m $i RankingActionRequest/action @op=reset
done

# 上面每处理一个账号都会返回如下信息
<RankingActionResponse xmlns="urn:zimbraMail"/>

其中all_accout.txt的格式是

user1
user2

联系人

如果执行了这个操作,显示的还是旧的,那估计是该账号的「联系人」里保存的是旧的了,此时只能让该用户自行修改「联系人」中保存的信息了

其他知识

  • GAL的信息是来自galsync@example.com这个邮箱账号,登录进去可以看到,不建议直接修改这里
  • 检查GAL,就是看我输入user,那么GAL会返回什么给我
zmmailbox -z -m user@example.com autoComplete -v user

svn合并无法记录mergeinfo的问题

问题

命令行

svn 1.8.15,1.8.16,1.9.4这3个版本

svn merge trunk 到branch

合并成功的,但设置不了合并信息,就是通过 但通过下面的指令获取不了已经合并过的版本号

svn pget svn:mergeinfo

发现正常的合并应该有下面的日志才对

Recording mergeinfo for merge of

svn 1.7.17

可以设置并获取到

win

TortoiseSVN 1.9 合并成功,可以设置并获取到合并信息

解决

在svn服务器上执行下面的指令即可

sudo svnadmin upgrade svn_repos_dir
# 上面的指令会导致svn_repos_dir目录下部分文件变为root所有
# 需要还原目录权限
sudo chown -R apache.apache svn_repos_dir

上次从1.6升级到1.8,没有做处理(也不知道要处理)

SVN服务器升级

一、问题

  • SVN仓库通过Apache发布出来,为了增强安全性,还使用了https,Subversion版本是subversion-1.6.11-12.el6_6.x86_64
  • pre-commit等钩子有做一些检查,如果有问题就echo错误信息,但出错信息是中文的,svn客户端无法显示,提示如下
Error output could not be translated from the native locale to UTF-8.

这个问题持续了大概有3-4年的时间了,虽然在出错后,可以问问旁边的同事是什么原因,但始终不够直观,我们尝试过以下方法,但都没有解决

  • 修改pre-commit的编码,修改LANG
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
  • 修改Apache的编码
AddDefaultCharset UTF-8
  • 采用http发布,而不是https

我们最终得出的结论是:网上的解决方案只对svn://这种直接用svnserve发布出来的仓库才有效

二、 终极解决方案

Subversion 1.8特性

前天,项目组又问起这个事,就Google了下, 发现Subversion 1.8之后,加了一个新的特性

SVNUseUTF8 On

它的作用就是使得Apache的mod_dav_svn模块,在和pre-commit等钩子通讯的时候,使用utf-8编码,可以参考mod_dav_svn

升级

我们系统是CentOS 6.2,比较简单,有个第三方,走了Subversion 1.8的rpm包,yum即可,主要是更新了2个rpm包

  • subversion-1.8.15-1.x86_64
  • mod_dav_svn-1.8.15-1.x86_64

具体升级操作

cat > /etc/yum.repos.d/wandisco-svn.repo <<EOF
[WandiscoSVN]
name=Wandisco SVN Repo
baseurl=http://opensource.wandisco.com/centos/6/svn-1.8/RPMS/\$basearch/
enabled=1
gpgcheck=0
EOF

yum install subversion

修改httpd.conf并重启httpd

<IfModule mod_dav_fs.c>
    # Location of the WebDAV lock database.
    DAVLockDB /var/lib/dav/lockdb
    SVNUseUTF8 On
</IfModule>

/etc/init.d/httpd graceful

升级后的测试

需要做些测试,确保升级后不会有问题,测试列表如下

  • commit
  • update
  • log
  • merge
  • copy签出版本

注意问题

客户端版本

服务器版本是1.8,如果客户端是1.6,则只能checkout,不能update,1.7没有问题,建议客户端至少1.8

CentOS 5上的svn 1.8

WandiscoSVN也提供了5.5上的升级,但无法满足我们的场景的需求,主要是因为CentOS5上提供的openssl是0.9.8版本,不支持SNI,所以需要手动安装

完整的安装脚本,可以参考我们svn上的脚本

install_svn_1.8.sh

svn合并无法记录mergeinfo的问题

# 在svn服务器上执行
sudo svnadmin upgrade svn_repos_dir

详细参考:svn合并无法记录mergeinfo的问题

ZZ:Let’s Encrypt,免费好用的 HTTPS 证书

很早之前我就在关注 Let’s Encrypt 这个免费、自动化、开放的证书签发服务。它由 ISRG(Internet Security Research Group,互联网安全研究小组)提供服务,而 ISRG 是来自于美国加利福尼亚州的一个公益组织。Let’s Encrypt 得到了 Mozilla、Cisco、Akamai、Electronic Frontier Foundation 和 Chrome 等众多大公司的支持,发展十分迅猛。

全文见:Let’s Encrypt,免费好用的 HTTPS 证书

2018年十一月
« 2月    
 1234
567891011
12131415161718
19202122232425
2627282930