Mercurial教程2:团队协作

建立本地服务器

hg serve

克隆远端仓库

hg clone <url> <foldername> #建立一个新目录并从远端克隆

推送到远端仓库

hg outgoing #查看待推送的修改集
hg push

如果远端仓库有本地没有的修改集会有下面的提示

abort: push creates new remote heads!
(did you forget to merge? use push -f to force)

千万不要使用push -f,你应该先将修改合并到本地

hg incoming #查看待获取的修改集
hg pull
hg merge #合并后应该查看哪些文件被修改并做必要的测试
hg commit -m "merge message"
hg ...

View comments.

more ...

Mercurial教程1:入门

你要做的第一件事就是设置用户名。可以通过编辑或创建~/.hgrc(Windows系统下则是%USERPROFILE%\Mercurial.ini)并加入如下内容

[ui]
username = John Doe <[email protected]>

试着键入hg

分布式软件配置管理工具 - 水银

基本命令:

 add   add the specified files on the next commit
 annotate  show changeset information by line for each file
 clone make a copy of an existing repository
 commitcommit the specified files ...

View comments.

more ...

Python的依赖问题

Python有大量的库可供使用,这将会对我们的开发有着很大的帮助,但是分发或部署应用时依赖问题的解决是个大麻烦。

Python的很多库都有C写的Extension,当你使用pip安装库的时候,pip会对这些扩展进行编译。那么问题来了。

在Linux系统下,这些扩展的编译通常有几个依赖python-dev, libxxx, libxxx-dev, python-xxx。同时通过系统的包管理安装的python库(也就是python-xxx)通常版本较旧,满足不了依赖),更新这些东西到需要的版本可不是一件容易的事,virtualenv也只能解决Python库的问题,至于系统中的其他库引发的版本冲突,解决起来就麻烦了。

在Windows下安装Python库则是一个噩梦,想要编译那些C扩展真是让人痛不欲生。你可以读读我之前写的解决在Windows下安装Fabric遇到的错误的博文。幸好一些常用的库已经有人编译好了,你可以在这些地方找到。

Go语言在这个问题上表现的不错,把一个可执行文件丢到服务器上去后就可以跑一个网站,这是多么美好啊。

View comments.

more ...

SSH公匙指纹很关键

很多人在连接上服务器时,看见关于SSH公匙指纹的警告不以为然,直接确认,殊不知,这中间藏有巨大的安全隐患。

确保公私匙体系安全的关键在于防范中间人攻击,在于对方给的公匙的是否正确。

你可以通过以下命令了解本机的OpenSSH公匙的指纹:

ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub #RSA Key 2048
ssh-keygen -lf /etc/ssh/ssh_host_dsa_key.pub #DSA key 1024
ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub #ECDSA Key 256

但是有些主机商缺乏安全意识,所有的虚拟机共用一套模板,导致所有机器的Key都是一样的。这就意味着你手上的私匙可以解密他人的SSH通信。遇到这类主机,我们有必要重新生成OpenSSH密匙。(以下命令仅适用于Debian系Linux系统)

sudo /bin/rm -v /etc/ssh/ssh_host_*
sudo ...

View comments.

more ...

iptables端口转发

首先要修改内核参数

sudo nano /etc/sysctl.conf

net.ipv4.ip_forward=1

然后sudo sysctl -p

最简单:

iptables -t nat -I PREROUTING -p tcp --dport 源端口 -j REDIRECT --to-ports 目标端口
iptables -t nat -I PREROUTING -p udp --dport 源端口 -j REDIRECT --to-ports 目标端口

可以分网卡控制:

iptables -t nat -A PREROUTING -i eth0 -p ...

View comments.

more ...