无法递归的五点半

for_each(day.begin(),day.end(),bind2nd(Add(),me))

导航

<2010年9月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

相册

收藏夹

C++

Unix/Linux

个人主页

其他

软件工程

网络管理

综合

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

2010年2月20日 #

cron配置

那天用Cron配置了一个MySQL数据库自动备份。几天下来才发现没有运行。瞎搞了半天,没有结果。最后在需要执行的命令下加个 > /tmp/b.log 2>&1。一看错误日志。哦,原来找cron不知道mysqldump在哪儿。恍然大悟。
cron在运行的时候可能PATH变量没有那么多,所以好多命令需要在脚本中加入完整的路径。其实我已经是第2次遇到这个问题了!真是不长记性啊,所以一定要记下!!
还有怎么没有一开始就把日志输出。UNIX管理员不看日志,看什么呢?这两天过年肥肉吃多了说。日志!切记啊!

posted @ 2010-02-20 15:30 五点半 阅读(48) | 评论 (0)编辑 收藏

2009年12月2日 #

OpenSSH下SFTP的配置

OpenSSH网站上那只SSH刺河豚将FTP埋葬

有关sftp有人推荐www.ssh.com的实现,不过我更喜欢开源的产品,特别是Open系列的安全产品。

需求

首先我们明确我们的目标,我们是希望通过SFTP代替FTP,需求是这样的:
  1. 这些用户只能通过SFT访问服务器
  2. 用户要锁定在相应的目录下
我想通常的思路是这样的:
  1. 打开OpenSSH的SFTP
  2. 将这些用户设置在一个
  3. 让OpenSSH识别这个组,只允许这些用户使用SFTP
  4. 最后系统要自动的将用户chroot在用户目录下

配置

我开始都觉得是不是要求太高,不过OpenSSH可以解决以上所有问题。话说回来,如果不能解决怎么可以把FTP埋葬呢。

SSHD_CONFIG

sshd通常是打开了sftp的,不过我们应该使用internal-sftp在sshd_conf中作如下配置:
 1 # Subsystem sftp /usr/lib/openssh/sftp-server # 注释掉
 2 Subsystem sftp internal-sftp
 3 
 4 ##
 5 Match group sftponly
 6     ChrootDirectory /sftphome/%u
 7     X11Forwarding no
 8     AllowTcpForwarding no
 9     ForceCommand internal-sftp
10 
解释一下:当sshd匹配到sftponly组中的用户,就会强制使用sftp(ForceCommand的作用),并将用户限定在/sftphome/下相应用户的目录下(ChrootDirectory的作用)。

创建用户

我们需要创建相应的用户了:

#useradd -G sftponly -d /sftphome/sftpuser  -s /usr/sbin/nologin sftpuser
#tail /etc/password

sftpuser:x:
1000:1000::/sftphome/sftpuser:/usr/sbin/nologin
#passwd sftpuser
你可以在其他机器上用sftp登录试试了。你的连接将会被reset!去看看sshd的日志,你会发现pam.d的认证是通过了的,但是chroot失败了。按网络上的说法
#chown root /sftphome/sftpuser
#chmod 
755 /sftphome/sftpuser
再试,可以登录。新的问题是不能在此目录下写入。对的嘛,755对于组用户是不能写啊。再试试775,刚才的问题就来又了,chroot失败。

以上内容网络上一google一大把。

可以登录不能写这个问题真让人困惑!后来我想可能应该这样理解:既然要chroot,那个目录不属于root肯定是不行的(说错了,猛拍砖)。那我们就不能为用户提供完整的sftp服务了吗?我想可以这样
#mkdir /sftphome/sftpuser/space
#chown sftpuser.sftpuser /sftphome/sftpuser/space
由系统管理员为sftp用户提供一个目录,并设置其用户属性,用户在这个目录下用户是可写的。当然可以创建很多个。

这样算不算解决这个问题呢?暂且如此吧。如果您有好方法,一定告知哦。


posted @ 2009-12-02 21:04 五点半 阅读(496) | 评论 (1)编辑 收藏

2009年8月14日 #

应用中的MySQL服务器部署Replication

本文记录如何给一台应用中的MySQL服务器部署Replication。

安装环境

现有MySQL
现有MySQL服务器的特点:
  1. 没有专门为Replication环境配置
  2. MySQL为编译安装
  3. MySQL处于运行状态,不可长时间停机
目的

将现有服务器作为Master服务器,配置并运行一台新的MySQL服务器作为Slave服务器

准备
  1. 服务器硬件
  2. 现有主服务器的安装代码包(mysql-5.x.xxx.tar.gz)

主服务器的配置和数据准备

Master服务器的必须配置
要使用Replication必须将Master的binlog打开,并设置服务器ID。最简单的配置如下:
log-bin     =  mysql-bin
server-id = 1
当然关于MySQL Bin Log的配置还有很多设置,可以参考相关手册
数据备份
现在需要将Master的数据备份出来要注意的是要记住 备份点的binlog日志和postion 。Master数据备份的方式可以是停机冷备份,如果安装了LVM可以使用LVM的Snapshot。下面使用mysqldump 导出数据。在导出数据之前我们应该Flush表,并锁住表,比允许数据写入。
mysql> FLUASH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000157 | 18757860 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
使用mysqldump导出数据
mysql:~# mysqldump -uroot -p --all-databases > dump.sql
解锁
mysql> UNLOCK TABLES;
安装参数的提取
需要在Slave主机编译安装MySQL要了解Master安装时的编译参数,可以通过如下方式获得:
mysql:~# cat /usr/local/mysql/bin/mysqlbug | grep CONFIGURE
repl用户创建
在Master服务器中创建repl用户,用于在Slave 数据库中访问Master数据
mysql> GREANT REPLICATION SLAVE ON *.* to 'repl'@'IP.SLAVE.SERVER' identified by 'repl_passwd';

Slave服务器的安装

MySQL的安装
  • 按前面提取的configure参数对源代码进行编译(./configure; make; make install;)
  • 安装初始化数据库:
#mysql_install_db --datadir=/data --user=mysql
  • 参照@{mysql-src}/support-files/目录中my.cnf文件在/etc/下创建@my.cnf
  • 参照@{mysql-src}/support-files/mysql.server@文件在@/etc/init.d/下配置@mysqldb
  • 可尝试启动mysql。 /etc/init.d/mysqldb start
数据的导入
mysql# mysql -uroot -p < dump.sql

如果导入出现超出最大数据包错误可以尝试修改my.cnf中的max_allow_packet

在my.cnf中配置slave
在my.cnf中配置:
server-id       =  2
master-host = master_ip
master-user = repl
master-password = repl_passwd
在Slave服务器上启动Slave
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO
MASTER_HOST='masterip',
 MASTER_USER='repl',
 MASTER_PASSWORD='repl_passwd',
 MASTER_LOG_FILE='mysql-bin.000157',
MASTER_LOG_POS=18757860 ;
mysql> START SLAVE;

posted @ 2009-08-14 22:39 五点半 阅读(78) | 评论 (0)编辑 收藏

2009年3月20日 #

Hatta Wiki试用

大辉推荐了一个网站www.wikimatrix.org。去看了看虽然一直用Wiki进行一些文档的协作,但那么多Wiki还是第一次哈。于是想找一个用Python开发的wiki(wikimatrix上面有一个Wizard可以帮助您找到想要的)。除了老牌的plone,著名的MoinMoin,还发现了一个叫hatta的。安装了一下,真还不错。
hatta的实现就一个python文件,功能简单,没有权限管理,没有用户管理,作者认为Wiki就是要欢迎天南地北的兄弟都可以修改。hatta的使用简单,按照语法编辑,然后提交了事。中文化也非常简单,Wiki内容本身就可以输入中文,如果觉得页面也应该是中文的也很简单,改改po文件即可。我觉得如果您对Wiki的需求如下就可以考虑使用:
  1. 内部使用。如果部署在外网,好事者乱改一气还是比较麻烦的,特别是放一些不该放的。
  2. 需要版本控制的文档协作
  3. 要在文档中嵌入程序代码,代码需要高亮
  4. 需要在文档中嵌入数学公式。hatta使用latex语法输入公式,生成的公式非常漂亮




posted @ 2009-03-20 16:55 五点半 阅读(78) | 评论 (0)编辑 收藏

2008年11月20日 #

Debian rootkit检查

今天维护服务器。一查看/var/log/auth.log,哦!天南地北的朋友都想登录到我们的破服务器。虽然都未成功,但动物凶猛啊。现实残酷,黑客无情,安全第一。还是安装个rootkit检查工具为妙:
#aptitude install chkrootkit rkhunter
#chkrootkit
.....
#rkhunter -c -sk
.....
还好。

posted @ 2008-11-20 20:25 五点半 阅读(63) | 评论 (0)编辑 收藏

2008年5月28日 #

Jazz 试用

最近一直在试用Jazz。IBM宣传Jazz是下一代的软件交付平台,IBM开发者网站上一大堆的文档,看来IBM对这个软件还是非常重视的。试用体会:
  1. IBM或者说Rational对软件工程的研究是非常深入的,IBM Rational系列软件可以充分体现IBM对软件过程的理解。Jazz中集成了各种软件开发过程(时下流行的Srcum也在其中)。Jazz充分认识到了敏捷的重要性,所以敏捷的思想贯穿整个软件。
  2. 虽然IBM提供的比较丰富的文档,学习曲线还是有些陡峭。特别对于没有使用过Rational软件的开发人员。推荐初学者先看看这个文档
  3. Jazz的版本控制源于CC不是很喜欢,如果可以用SVN代替就好了。
  4. Jazz的客户端是开源的,但服务端只有90天试用。具体的价格也要6月份才出来。

posted @ 2008-05-28 11:37 五点半 阅读(144) | 评论 (0)编辑 收藏

2008年5月19日 #

在tex缺省安装上添加新的.cls .sty文件

还是记录在这吧。
现在在Debian下安装tex很方便了。如果一些宏包没有下载下来可以安装在系统上。步骤:
  1. 在/usr/share/texmf/tex/latex下建一个目录mkdir xxpackage
  2. 把宏包解压在这里
  3. texhash

posted @ 2008-05-19 17:03 五点半 阅读(448) | 评论 (0)编辑 收藏

2008年4月19日 #

Quixote笔记

又是Python。呵呵。谁叫人家帅呢

Quixote的部署

    在Quixote官方白皮书中已经详细描述了Quixote的工作模式。Quixote可以使用Python自代的http_server(主要用于开发调试)和与Apache(或lighttpd)配合使用。
    Quixote与Apache配合使用方式如下:
  1. 使用CGI,文档中称为egular CGI。被认为效率最低的一种方式,因为每一个请求都会创建一个新的进程。
  2. 使用fastCGI,CGI可以运行fastCGI一定是可以应用的。这也是豆瓣采用的方式。在Quixote作者的一个PPT中,他认为fastCGI是buggy的。哦:(也不至于啊。我们正在寻找使用fastCGI的部署经验。
  3. 使用mod_python,将python代码嵌入到Apache中。
  4. 使用SCGI,这是作者推荐的。使用Apache SCGI module scgi_mod将遵循SCGI协议Apache将请求发送到相应的Socket如localhost:3001。而这个Socket由本地运行的一个 Python程序打开。这个Python程序将处理请求,并返回结果。

SCGI的配置

    Quixote的网站上对SCGI的描述:SCGI协议是CGI协议的替代。它是一种应用程序与HTTP服务接口标准。它有些像FastCGI但他的设计更容易实现。

    配置SCGI过程如下:
  • 安装各个模块不在话下,debian让程序员有了懒惰的美德:
      #aptitude install libapache2-mod-scgi python-scgi python-quixote

  • Apache的配置,添加配置到apache.conf。(有些教程中加入了SetHandler scgi-handler ,但这个加上就很本不会和3000通信。可能是版本的问题。最好不用。)
      <Location "/qx">
           SCGIServer localost:3000
           SCGIHandler On
      </Location> 

  • 重启Apache
    配置完成。SCGI的好处在于,修改了Python程序,不用重启Apache,只要重启SCGI就可以了。

第一个Quixote程序

    一切就绪,我们来一次Quixote的完整之旅。

  • scgi程序要求有一个服务打开3000端口。启动scgi的程序如下:
 1 
 2 #!/usr/bin/python
 3 # -*- coding: utf-8 -*-
 4 
 5 from scgi.quixote_handler import QuixoteHandler, main
 6 from quixote import enable_ptl
 7 from quixote.publish import Publisher
 8 enable_ptl() #启动PTL
 9 
10 def create_publisher():
11     from ourroot import RootDirectory
12     return Publisher(RootDirectory(), display_exceptions='plain')
13 
14 if __name__ == '__main__':
15     from quixote.server import scgi_server
16     scgi_server.run(create_publisher, port=3000, script_name="/qx")
17 

  • 程序结构是比较简单的,使用的是scgi_server的run方法。要注意的是run方法中的script_name和前面apache 的配置Location是一样的。程序的关键是导入了ourroot这样一个ptl 。下面是我们的第一个ptl程序。
 1 
 2 # -*- coding: utf-8 -*-
 3 """这个是我们第一个例子的根目录
 4 """
 5 from quixote.directory import Directory
 6 
 7 class RootDirectory(Directory):
 8     _q_exports = [""]
 9     def _q_index [html] (self):
10         print "debug message from the index page"
11         """
12         <html>
13         <head>
14         <meta http-equiv="Content-Type" content="text/html charset=UTF-8" />
15         <title>第一个例子</title>
16         </head>
17         <body>
18         <h1>第一个例子有中文!</h1>
19         </body>
20         </html>
21         """
22 

  • 现在在浏览器中输入http://localhost/qx就可以看到结果了。
  • 除了运行上面的python脚本,也可以采用这样的方式运行scgi:
  • python /var/lib/python-support/python2.5/quixote/server/scgi_server.py \
        --factory
    =FirstApp.create_publisher \
        --script-name
    =/qx  --port=3000


Quixote 中文化的要点

    Quixote的中文设置好像很麻烦。其实随着python、Quixote版本的推进,现在这个问题已经很简单了。字符集使用的是utf-8。使用gb2312可能也是可以的。

  1. 所有源代码使用utf-8在程序的开始加上# -*- coding: utf-8 -*-
  2. ptl的html模板加上content="text/html charset=UTF-8"
  3. 关键:在quixote的安装路径下有__init__.py,将其中的DEFAULT_CHARSET = 'iso-8859-1'改成 'utf-8'
  4. 也可以不修改__init__.py,使用Publisher的时候把Publisher扩展一下:
1 class UTF8Publisher(Publisher):
2     quixote.DEFAULT_CHARSET = "utf-8"

posted @ 2008-04-19 15:11 五点半 阅读(2070) | 评论 (5)编辑 收藏

2008年4月18日 #

久违了

很久没有更新了。
敏捷时代似乎已经到了,将更多的时间花在了Python和Ruby上。C++好些地方使不上劲呢:(。
前段时间研究了一下boost.python,还真不错,就是文档太少啊。有时间将其整理一下。
pongba的这个论坛还真不错。天天在上面泡着。


posted @ 2008-04-18 11:33 五点半 阅读(51) | 评论 (0)编辑 收藏

2007年10月18日 #

MySQL Proxy

    大型的数据库厂商在数据可用性上下足了功夫一会儿负责均衡,一会儿分布式数据库,不时还发明一些术语吓唬用户。而开源社区总是让人感到创意十足。夹在数据库和用户端之间的中间层产品大家一定见得多了,今年6月发布的MySQL Proxy名字看上去一般般,但其功能确很Cool。
    MySQL Proxy 可以作负载均衡,可以艰苦,分析,客户端和服务器之间的通讯。最Cool的是可以使用嵌入到系统中的Lua。呵呵,现在不来点脚本语言好像就不入流呢。最近InfoQ上一篇文章《用MySQL Proxy实现读写分离》可能是时下现实的一种应用。原理很简单看看图就一目了然:

posted @ 2007-10-18 16:29 五点半 阅读(462) | 评论 (3)编辑 收藏

仅列出标题  下一页