分布式版本控制

Posted by 曹宇伟 on 三月 28th, 2009

Git: http://git-scm.com/

Git is a free & open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

Every Git clone is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on network access or a central server. Branching and merging are fast and easy to do.

Git is used for version control of files, much like tools such as Mercurial, Bazaar, Subversion, CVS, Perforce, and Visual SourceSafe.

Git在苹果系统上非常流行。

Mercurial : http://www.selenic.com/mercurial/wiki/
http://mercurial.selenic.com/

A fast, lightweight Source Control Management system designed for efficient handling of very large distributed projects.

Bazaar : http://bazaar-vcs.org/

Bazaar is a distributed version control system that Just Works. While other systems require you to adapt to their model of working, Bazaar adapts to the way you want to work, and you can try it out in five minutes.

MySQL, Mailman, Launchpad, and the Linux Foundation are among the many projects and organizations using Bazaar.

Bazaar runs on Windows, GNU/Linux, UNIX and Mac OS, and requires only Python 2.4. If you can run Python, you can run Bazaar! It is an official GNU project, licensed under the GPLv2 or later, at your option.

Perforce  : http://www.perforce.com/perforce/products.html

The Perforce Software Configuration Management System features comprehensive SCM capabilities built around a scalable client/server architecture. Users can access the Perforce Server through a range of Perforce client software. Perforce can be deployed quickly and easily, and requires minimal administration even for large or distributed sites

参考:

http://en.wikipedia.org/wiki/Distributed_revision_control

为什么我们要放弃Subversion : http://www.infoq.com/cn/articles/thoughtworks-practice-partiv

使用ssl加密http协议

Posted by 曹宇伟 on 三月 25th, 2009

使用mod_ssl模块,使Apache可以使用SSL协议加密HTTP协议,用来保护HTTP会话。

最简洁的配置样例:

<VirtualHost _default_:443>
ServerName    www.bsdmap.com
DocumentRoot  /opt/httpd/htdocs
SSLEngine      on
SSLCertificateFile        /opt/httpd/conf/ssl/www.bsdmap.com.cert
SSLCertificateKeyFile   /opt/httpd/conf/ssl/www.bsdmap.com.key
</VirtualHost>

SSLEngine                 ON 启动SSL引擎
SSLCertificateFile       指定证书
SSLCertificateKeyFile  指定相关密钥

使用SSL加密分为正式场合,比如网上银行、支付宝等对应用安全要求较高的应用上;另一个为非正试场合,比如自己也可以配置一个SSL的web服务。区别在于,正式场合https应用使用的SSL证书是经过第三方公正颁发的,而非正式应用,则是非正式机构或者是自己制作、签发的。

成生密钥对儿:

在创建证书之前,要有一个共公/私有密钥对儿。以www.bsdmap.com为例:

openssl genrsa -des3 -rand file1:file2:file3 -out www.bsdmap.com.key 1024

genrsa:告诉openssl要生成一个RSA的密钥对儿。

des3:表示私钥应该被一个”pass phrase”编码和保护。

rand:给OpenSSL提供任意的、随机的数据以确保生成的密钥是唯一的和不可预知的。这个开关在Windows里没有必要,在Windows下使用其他的方式获得随机数据。

out:保护位置。

1024:密钥位数。

当使用了-des3选项,成生了受“口令”保护的密钥对儿时,启动apache时需要输入口令才能启动。假如不想要每次都输入“口令”(不安全),可以使用不受“口令”保护的密钥,去掉-des3选项即可,也可以使用下面的命令转换一下:

openssl rsa -in www.bsdmap.com.key -out www.bsdmap.com.key.nopassword

显示密钥文件的信息:

openssl rsa -noout -text -in www.bsdmap.com.key

该命令也可用于查看ssh-key的信息,其实质是一样的。

创建一个证书签署请求(正式应用场合):

正式场合的应用,需要一个经证书颁发机构签署的证书,为此,我们先成生一个证书,提交由第三机构签名认证。使用命令:

openssl req -new -key www.bsdmap.com.key -out www.bsdmap.com.csr

需要填写一些地域、组织机构类的信息。需要特殊说明的是:在一个网站站书里,Common Name (eg, YOUR name)一栏标识完全限定的域名(FQDN),假如此处与以后使用证书的站点名不同,浏览器将发布一个错误,无法访问。

完成之后,证书就存储在www.bsdmap.com.csr里。下面的命令可以显示这个证书的信息:

openssl req -noout -text -in www.bsdmap.com.csr

然后,可以所这个证书签署请求提交给一个CA(证书签署机构)处理。

Verisign和Thawte是两家可以选择的CA:

https://digitalid.verisign.com/server/apacheNotice.htm

https://www.thawte.com/ssl-digital-certificates/buy-ssl-certificates/

创建自签署证书(非正式应用场合):

非正式的应用,可以自己签署自己的证书:

openssl x509 -req -days 365 -in www.bsdmap.com.csr -signkey www.bsdmap.com.key -out www.bsdmap.com.cert

并且,必须使用:chmod 400 www.bsdmap.com.key 来保护密钥文件。

另一个问题:

貌似SSL不能与基于主机名的虚拟主机一同工作。

有一个协议把一个已有的HTTP连接升级到TLS,但是并不是所有的浏览器支持此项功能(RFC 2817)。

参考:
SSL原理解析

http://www.yesky.com/ServerIndex/77125243130347520/20040426/1791592.shtml

SSL原理解密

http://fanqiang.chinaunix.net/a6/b8/20010608/121000441.html

我的GNOME主题

Posted by 曹宇伟 on 三月 19th, 2009

虽说Ubuntu的界面已经比其它发行版要美观很多,然而系统自带的几个主题,始终不能让我满意。

抱怨了几句之后,不得不自己想办法解决问题--这似乎又成了“无所事事”的起因。

顺着GNOME的帮助,来到了 http://art.gnome.org/themes

大致了解到GNOME的“主题”分为五个(可自定义)的部分,分别是:

  • Controls
  • Window Borders
  • Icons
  • Splash Screens
  • Login Window

从系统的控制面板里,大致也能看到影子,“自定义主题”里,有五项内容可以自定义,分别是:

  • 控件
  • 颜色
  • 窗口边框
  • 图标
  • 指针

这五项与网站的五项,并不是对应的。但是并不影响我们对GNOME主题的理解。

试来试去,发现自己还是比较钟意刚接触Linux时的界面:

MCity-4DWM
4DWM
Mcity-AmigaRelief
AmigaRelief
MCity-MWM-Th
MWM
Amiga
Amiga
Carved2
Carved2
pOS
pOS
Graphite
Graphite

和几套有意思的图标:

ICON-Liha-TH
ICON-Liha-TH
YattaBlues-Th
YattaBlues
gartoon-th
Gartoon

“窗口边框“,可以通过控制面板里的”安装“,自动安装到系统,也可将其解压到HOME目录下的 .themes 目录下,图标直接解压到 HOME 目录下的 .icons 目录下,然后通过“外观”里进行自定义设置即可。

GNOME Theme

我的桌面

细读crontab手册

Posted by 曹宇伟 on 三月 11th, 2009

一句话总结crontab(指这个应用、这个机制)的作用:”run this command at this time on this day”,在指定的日期、时间,运行指定的命令。下面是Linux 上crontab手册中的知识点,小结如下:

1. crontab文件“正式行”的开始

空行、以空格或者“tab”开行的行,被cron(daemon)忽略。

以#开始的行,作为注释被cron(daemon)忽略。

“注释”不允许与“命令”放在同一行(作为命令的注释),会被作为“第六段”,被cron(daemon)执行。

同样的,也不能放在设置环境变量的同一行。

2. 在crontab文件中指定环境变量

设置变量使用

name = value

这样的格式,”=”号左右的空格不是必须的。

几个变量默认已经被设置,比如:

SHELL=/bin/sh
HOEM=/home/nnix
LOGNAME=nnix

其中SHELL和HOME可以重新设定,LOGNAME则不可(大概跟确定crontab文件的位置有关)。

默认,crontab会把执行的输出发送给crontab的所有者,除非重新设定变量:

MAILTO=other_or_email

另外,当crontab发送输入时的邮件编码,可以通过设置变量 CONTENT_TYPE 和 CONTENT_TRANSFER_ENCODING 来使用正确的编码来发送邮件。

3. crontab 文件的分段

依次分别是

  • 分(0-59)
  • 时(0-23)
  • 日(1-31)
  • 月(1-23,或者英文名)
  • 周(0-7,或者英文名,0和7均表示周日)
  • 要执行的内容   

4. 前五段:时间和日期

1)表示任意:* 号表示 “任意”(first-last)。

2)指定数字,表示指定的时间。

3)指定段,表示“开始-结束”内包含的数:比如3-6,表示3,4,5,6

4)指定列表:比如 “1,2,3,4″,”0-4,8-12″

5)指定“步长”:8-14/2 表示8,10,12,14

5. 模糊的第六段:

1)除去前五段,从第六段开始到换行符或者“%”为止,为要执行的命令。

2)默认第六段将被/bin/sh执行,除非在crontab文件中指定了非/bin/sh的SHELL变量。

3)第六段中的”%”号,除非前面加”\”号转交,否则,“%”号将结束命令行、换行的意义,并且其后的内容会被做为标准输入发送给前面的命令。

6. 冲突的逻辑

日期可以用月限定,也可以用“星期”指定,如果两个段有冲突(比如这两段不同时为“*”),那么,第六段的命令将在匹配任何一个的情况下运行,比如

“30 4 1,15 * 5″,将在每月的1号和15号 加 每个周五,上午4:30运行。

7. crontab文件中的神密符号“%”

可能会遇到的一个问题是,在第六段中需要使用date生成日志文件名,比如:

0   4   *   *   *   /opt/cron/mysql_dump.sh    > /srv/logs/`date +%y-%m-%d`.dump.log

这时会发现crontab怎么也不运行这个mysql_dump.sh,也看不到有日志生成。这是因为在crontab文件中,”%”是有特殊含义的。假如不需要“%”的特殊作用,需要使用转义符转义。上面应该写成:

0   4   *   *   *   /opt/cron/mysql_dump.sh    > /srv/logs/`date +\%y-\%m-\%d`.dump.log

“%”在crontab文件中,有“结束命令行”、“换行”、“重定向”的作用,比如:

0  22  * * 1-5  mail -s “It’s 10:00 pm” joe%Joe,%%Where are your kids?%

将会在周一至周五的22:00发送一分内容为:

Joe,<换行>
<换行>
Where are your kids?<换行>

8. 不能理解的特殊用法

       @reboot    :    Run once, at startup.

为了达到在开机后运行,且只运行一次的目的,除了这个,恐怕无法通过前五段的设置来实现吧?

服务器时间与HTTPD关系

Posted by 曹宇伟 on 三月 1st, 2009

发现服务器时间与HTTP应用有关。

当服务器时间慢于标准时间时(也可能是服务器时间是Last-Modified时间的过去时间时),会导致客户端缓存失效,从而产生不必要的流量。


Copyright © 2007 花开的地方. All rights reserved.