Python 使用ssl去连接smtp服务器

smtp服务器是postfix, 如果我们只是简单的配置main.cf,如下

smtpd_tls_security_level = encrypt
smtpd_tls_key_file = /etc/pki/tls/private/localhost.key
smtpd_tls_cert_file = /etc/pki/tls/certs/localhost.crt
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_session_cache_database = btree:/var/spool/postfix/smtpd_tls_cache
tls_random_source = dev:/dev/urandom
smtpd_tls_auth_only = yes

这样在会出现以下exception

SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol ...
more ...

编译sqlcipher 到 python 安装程序

环境:

操作系统: MacOSX, Ubuntu Python: 2.7

编译sqlcipher

./configure --disable-tcl --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto" --prefix="python_install_path”

修改python 源代码下的setup.py

#sqlite_inc_paths = [ '/usr/include',
#                     '/usr/include/sqlite',
#                     '/usr/include/sqlite3',
#                     '/usr/local/include',
#                     '/usr/local/include/sqlite',
#                     '/usr/local/include/sqlite3',
#                   ]
sqlite_inc_paths = [ '/opt/recro_qtapp/include/sqlcipher',
]

#        for d_ in inc_dirs ...
more ...

Virtualenv

安装

用easy_install或者pip安装

easy_install -U virtualenv
pip install -U virtualenv

什么是virtualenv

如果我们的机器中只有一个python环境,所有的人都往里面安装库,这样会导致依赖和版本的问题, 试想一下,如果你有一个应用要使用LibFoo的版本1,另外的一个应用要使用版本2,如何运行这 两个程序。把一切的库都往/usr/lib/python2.7/site-packages里装,这样要因为一个程序要 升级某个库的时候可能会导致其他引用这个库的程序运行出错。

另一个问题是如果你没有权限往全局的site-packages里面安装库呢? 这个时候,我们就要使用到virtualenv。

要创建virtualenv环境很简单

virtualenv ENV

ENV是这个环境的名字,你可以命名为django_env, pyramid_env,或者就是env。

命令完后,会创建以下的目录结构,在Linux中Scripts由bin代替。

xxx_env
      |- etc
      |- Lib
      |- Scripts

在virtualenv环境中运行程序

Windows

在cmd中运行即可进入virtualenv的shell

Scripts\activate.bat

Linux ...

more ...

Python废弃的modules

NOTE: Python 2.7 only

  • strop, use string module or string object instead
  • interpolation > str.format > string.template.substitute, 0.10 > 0.14 > 0.95 but str.format is more pythoninc
more ...

Redis删除过期的数据

使用以下就可以了

/usr/local/bin/redis-cli -p LISTENING_PORT -a PASSWORD -h 10.0.x.xx keys  "*" | while read LINE ; do TTL=`/usr/local/bin/redis-cli -a XXXX -p LISTENING_PORT -h 10.0.x.xx ttl $LINE`; if [$TTL  -eq -1 ]; then echo "Del $LINE"; RES=`/usr/local/bin/redis-cli -a PASSWORD ...
more ...

Redis 的安全设置

修改配置文件,默认在/etc/redis下面

bind 127.0.0.1                                                  
requirepass foobar

password最好足够长,因为redis的效能太高,穷举很方便

注意,为redis增加了密码之后,如果想用redis的init script去stop 的话,可能 一直会报一下错误

Waiting for Redis to shutdown ...
Waiting for Redis to shutdown ...

我们需要修改一下/etc/init.d/redis, 修改成以下内容,这样stop的时候要输入密码,就可以了

            echo "Stopping ..."
            read -s -p "Enter redis password:" token
            echo
            $CLIEXEC ...
more ...

Ubuntu 下安装 Redis

环境:

  • Ubuntu: 12.04.1
  • Redis: 2.6.9

默认是redis-server是2.2.2版本的,咱不要。

sudo apt-get install make gcc
wget http://redis.googlecode.com/files/redis-2.6.9.tar.gz
tar zxvf redis-2.6.9.tar.gz
cd redis-2.6.9
make MALLOC=libc
sudo make install

cd utils/
sudo ./install_server ...
more ...

KVM环境下增大分区大小

首先停止要修改的虚拟机

virsh shutdown vmname

virsh edit vmnane

修改boot节点, 并在disk节点下增加

<boot dev='cdrom'/>

....
<disk type='file' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <source file='/vms/iso/gparted-live-0.14.1-6-i486.iso'/>
  <target dev='hdc'/>
  <readonly/>
</disk>

重启后进入gparted的系统,用其将要增加的分区resize, 在其terminal中poweroff,

然后将boot节点改回原来的

<boot dev='hd'/>

启动虚拟机,查看是否修改成功

df -H

参考: * http://itsignals.cascadia ...

more ...

SQLServer减少数据库文件大小

清理历史记录

BACKUP LOG DateBaseName WITH TRUNCATE_ONLY
DBCC ShrinkDatabase(DateBaseName)

设定数据库自动缩小, 默认值为OFF

ALTER DATABASE DateBaseName SET AUTO_SHRINK ON
more ...

SQLServer开启TCP监听

刚安装的SQL server是不会默认开启tcp监听的。

运行SQL Server Configuation Manager,打开SQL Server 20xx

Network Configuration -> Protocols for xxx

设置TCP/IP为enable, 右键选properties, IP Addresses,

将IP1和IP2都改enable, port改为1433,IP ALL的port也改为1433

SQL Native client configuation -> client protocols -> TCP/IP,

改为enable, 右键选properties, Default Port改为1433, Enabled改为yes.

重启SQL server服务就可以了。

telnet localhost 1433
more ...