-
2007年05月29日
失望,Linuxer编辑的认识高度
摘:(Fireshort即偶的观点,Rainking是linuxer杂志编辑的观点)
Fireshort:
《Struts,一个开源的MVC实现》是一篇好文章,然而,却是too old了,记忆中很久很久以前已经看过了,一google,发现是ibm dw上文章:
http://www-128.ibm.com/developerworks/cn/java/j-struts/
时间是2001 年 2 月 23 日!
作为一本Linux方面的杂志,用了差不多10页来说一个Java框架,感觉像是充字数的,而且
时效性太差。这一点从文章中struts的版本也很容易看出,明显还是struts1的,编辑都没有搞Java开发的?如果是这样,我可以代为审核,确保Java方面的文章不至于太out。不过还是建议不要大篇幅的出现只谈Java的文章。Rainking:
据我所知,目前绝大多数公司在开发java程序的时候选择的jdk版本是1.4.2,很多目前还未发售的游戏(地狱之门等等)是用MFC开发的.
out?过时?个人的态度而已.
去年暑假候捷给我们上课的时候,用的是win98+word97.out?过时?
超多的经典教材,多到我都懒得一个个报名字,都是上个世纪的产物,难道都out?过时?too old?
ok,不想再讨论时限的问题,大家都明白我的意思.
至于为何花10页的篇幅写struts,是因为1 它是开源的 2 无数读者想看开发的,技术的文章 抛砖引玉 看看读者态度而已
Linuxer要扩展文章的类型了,以linux为主打,开源的文章也可以上,就这样Fireshort:
“目前绝大多数公司在开发java程序的时候选择的jdk版本是1.4.2”这个倒是我孤陋寡闻了。
经典的教材跟一个开发的框架没有可比性。有一句话说,总有一些东西值得我们的后代去记取,然而,却绝对不是上面这篇介绍struts1的文章。对于 Java Web开发的初学者,我宁愿他先学会基本的Servlet+Jsp,然后投入学习更好的web框架,而不是学习deprecated的struts1。后 发者要发挥后发者的优势,不要浪费时间照着别人的错误再错一次,吸取教训就可以了。 -
2007年01月17日
CVS服务器设置指南
第二次配置CVS服务器体会:
1、要用清醒的头脑做事情,不然很容易犯低级错误。
2、Linux可能比Window更像woman:出错了,你不知道哪里错,我也不会告诉你。首先确保系统安装有cvs:
[root@mail xinetd.d]# rpm -qa|grep cvs
cvs-1.11.1p1-3
如果命令输出类似于上面的输出则说明系统已经安装有cvs,否则就需要从安装光盘中安装cvs的rpm包。一 创建CVS属主用户(用于管理CVS,做CVS操作):
useradd -d /deke/cvscore/ cvs
chmod 771 /deke/cvscore/
二、建立CVS仓库(初始化cvs)
# su cvs
$ cvs -d /deke/cvscore/ init
$exit
#
三、启动cvs服务器
在Linux上CVS服务可以通过inetd、xinetd或tcpwrapper等来启动,其中inetd由于安全理由在许多场合已经被xinetd所取代了。这里我们使用xinetd来启动CVS服务。
在/etc/xinetd.d/目录下创建文件cvs,内容如下:
# default: on
# description: The cvs server sessions;
service cvspserver
{
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root= /deke/cvscore/ pserver
log_on_failure += USERID
}
注:
1)pserver表示是口令认证的访问方式,这是最常用的方式,其他还有gserver,kserver,ext,如果想要更高的安全性可以使用ssh来加密口令和数据流,不过这里为了用户使用的方便,仍然选的是pserver
2)--allow-root是指定Repository的目录,可以建立多个Repository
3)请注意每行等号左右都有一个空格,否则无法启动服务。修改该文件权限:
# chmod 644 cvs
然后重新启动xinetd:
# /etc/rc.d/init.d/xinetd restart
然后察看cvs服务器是否已经运行:
[root@mail xinetd.d]# netstat -lnp|grep 2401
tcp 0 0 0.0.0.0:2401 0.0.0.0:* LISTEN 7866/xinetd
则说明cvs服务器已经运行。四、创建用来访问cvs的用户
前面创建的cvs用户是cvs仓库管理用户,而为了让用户访问则还需要一个访问用户:
# useradd cvspub
# usermod -G cvs cvspub
这里添加了一个用户cvspub,并且将该用户添加到cvs组中。五、管理cvs服务器
CVS默认使用系统用户登录,为了系统安全性的考虑也可以使用独立的用户管理。CVS用户名和密码保存在CVSROOT目录下的passwd文件中,格式为:
用户名:密码:系统用户
也就是说,它把CVS用户映射到系统用户,这样我们就可以通过系统用户的权限设置来分配给用户不同的权限,而不需要让用户知道系统用户名和密码。注意:CVS用户不能跟系统用户重名,否则会提示没有权限之类错误。
passwd文件默认并不存在,我们必须自己创建。文件中的密码字段使用MD5加密,不幸的是CVS没有提供添加用户名的命令,所以我们借用Apache的命令来完成这项工作:
#htpasswd passwd username
这个命令为username指定密码,并保存在passwd中,文件不存在时会自动创建。htpasswd命令不是为CVS而设,因此总有一些遗憾,它不能自动添加映射到的用户名,不过没关系,我们设置好密码后,自己把这部分加上。我的做法是映射到cvspub用户,如果需要映射其他的用户,请注意给相应的目录设置好权限,否则CVS用户可能无法访问源代码仓库。
要彻底防止使用系统帐号登陆,可以编辑CVSROOT目录下的config文件,把代码:
#SystemAuth=no这一行前面的#去掉,CVS就不会验证系统用户了,否则当用户名不在passwd文件中时,CVS会进行系统用户的验证。
此外还必须配置读写权限,使用CVSROOT目录下的readers和writers文件进行这个工作。这2个文件默认也是没有的,没关系,自己创建就可以了。readers文件记录拥有只读权限的用户名,每行一个用户;writers文件记录拥有读写权限的用户名,也是每行一个用户。注意, readers文件比writers优先,也就是说出现在readers中的用户将会是只读的,不管writers文件中是否存在该用户。
readers、writers有没有效果?
六、源代码仓库的备份和移动
基本上,CVS的源代码仓库没有什么特别之处,完全可以用文件备份的方式进行备份。需要注意的只是,应该确认备份的过程中没有用户提交修改,具体的做法可以是停止CVS服务器或者使用锁等等。恢复时只需要把这些文件按原来的目录结构存放好,因为CVS的每一个模块都是单独的一个目录,与其他模块和目录没有任何瓜葛,相当方便。甚至只需要在仓库中删除一个目录或者文件,便可以删除该模块的一些内容,不过并不建议这么做,使用CVS的删除功能将会有一个历史记录,而对仓库的直接删除不留任何痕迹,这对项目管理是不利的。移动仓库与备份相似,只需要把该模块的目录移动到新的路径,便可以使用了。
如果不幸在备份之后有过一些修改并且执行了提交,当服务器出现问题需要恢复源代码仓库时,开发者提交新的修改就会出现版本不一致的错误。此时只需要把CVS相关的目录和文件删除,即可把新的修改提交。







