CVS使用手册
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
http://www.chedong.com/tech/cvs_card.html
关键词:CVS CVSWeb CVSTrac WinCVS CVSROOT
内容摘要:
CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。工作模式如下:
CVS服务器(文件版本库)
/ | \
(版 本 同 步)
/ | \
开发者1 开发者2 开发者3
作为一般开发人员挑选2,6看就可以了,CVS的管理员则更需要懂的更多一些,最后还简单介绍了一些Windows下的cvs客户端使用,CVS远程用户认证的选择及与BUG跟踪系统等开发环境的集成问题。
一个系统20%的功能往往能够满足80%的需求,CVS也不例外,以下是CVS最常用的功能,可能还不到它全部命令选项的20%,作为一般开发人员平时会用cvs update和cvs commit就够了,更多的需求在实际应用过程中自然会出现,不时回头看看相关文档经常有意外的收获。
tcsh
setenv CVSROOT /path/to/cvsroot
bash
CVSROOT=/path/to/cvsroot ; export CVSROOT
后面还提到远程CVS服务器的设置:
CVSROOT=:ext:$USER@test.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH
初始化:CVS版本库的初始化。
cvs init
一个项目的首次导入
cvs import -m "write some comments here" project_name vendor_tag release_tag
执行后:会将所有源文件及目录导入到/path/to/cvsroot/project_name目录下
vender_tag: 开发商标记
release_tag: 版本发布标记
项目导出:将代码从CVS库里导出
cvs checkout project_name
cvs 将创建project_name目录,并将最新版本的源代码导出到相应目录中。这个checkout和Virvual SourceSafe中的check out不是一个概念,相对于Virvual SourceSafe的check out是cvs update, check in是cvs commit。
注意:第一次导出以后,就不是通过cvs checkout来同步文件了,而是要进入刚才cvs checkout project_name导出的project_name目录下进行具体文件的版本同步(添加,修改,删除)操作。
将文件同步到最新的版本
cvs update
不制定文件名,cvs将同步所有子目录下的文件,也可以制定某个文件名/目录进行同步
cvs update file_name
最好每天开始工作前或将自己的工作导入到CVS库里前都要做一次,并养成"先同步 后修改"的习惯,和Virvual SourceSafe不同,CVS里没有文件锁定的概念,所有的冲突是在commit之前解决,如果你修改过程中,有其他人修改并commit到了CVS 库中,CVS会通知你文件冲突,并自动将冲突部分用
>>>>>>
content on cvs server
<<<<<<
content in your file
>>>>>>
标记出来,由你确认冲突内容的取舍。
版本冲突一般是在多个人修改一个文件造成的,但这种项目管理上的问题不应该指望由CVS来解决。
确认修改写入到CVS库里
cvs commit -m "write some comments here" file_name
注意:CVS的很多动作都是通过cvs commit进行最后确认并修改的,最好每次只修改一个文件。在确认的前,还需要用户填写修改注释,以帮助其他开发人员了解修改的原因。如果不用写-m "comments"而直接确认`cvs commit file_name` 的话,cvs会自动调用系统缺省的文字编辑器(一般是vi)要求你写入注释。
注释的质量很重要:所以不仅必须要写,而且必须写一些比较有意义的内容:以方便其他开发人员能够很好的理解
不好的注释,很难让其他的开发人员快速的理解:比如: -m "bug fixed" 甚至 -m ""
好的注释,甚至可以用中文: -m "在用户注册过程中加入了Email地址校验"
修改某个版本注释:每次只确认一个文件到CVS库里是一个很好的习惯,但难免有时候忘了指定文件名,把多个文件以同样注释commit到CVS库里了,以下命令可以允许你修改某个文件某个版本的注释:
cvs admin -m 1.3:"write some comments here" file_name
添加文件
创建好新文件后,比如:touch new_file
cvs add new_file
注意:对于图片,Word文档等非纯文本的项目,需要使用cvs add -kb选项按2进制文件方式导入(k表示扩展选项,b表示binary),否则有可能出现文件被破坏的情况
比如:
cvs add -kb new_file.gif
cvs add -kb readme.doc
如果关键词替换属性在首次导入时设置错了怎么办?
cvs admin -kkv new_file.css
然后确认修改并注释
cvs ci -m "write some comments here"
删除文件
将某个源文件物理删除后,比如:rm file_name
cvs rm file_name
然后确认修改并注释
cvs ci -m "write some comments here"
以上面前2步合并的方法为:
cvs rm -f file_name
cvs ci -m "why delete file"
注意:很多cvs命令都有缩写形式:commit=>ci; update=>up; checkout=>co/get; remove=>rm;
添加目录
cvs add dir_name
查看修改历史
cvs log file_name
cvs history file_name
查看当前文件不同版本的区别
cvs diff -r1.3 -r1.5 file_name
查看当前文件(可能已经修改了)和库中相应文件的区别
cvs diff file_name
cvs的web界面提供了更方便的定位文件修改和比较版本区别的方法,具体安装设置请看后面的cvsweb使用
正确的通过CVS恢复旧版本的方法:
如果用cvs update -r1.2 file.name
这个命令是给file.name加一个STICK TAG: "1.2" ,虽然你的本意只是想将它恢复到1.2版本
正确的恢复版本的方法是:cvs update -p -r1.2 file_name >file_name
如果不小心已经加成STICK TAG的话:用cvs update -A 解决
移动文件/文件重命名
cvs里没有cvs move或cvs rename,因为这两个操作是可以由先cvs remove old_file_name,然后cvs add new_file_name实现的。
删除/移动目录
最方便的方法是让管理员直接移动,删除CVSROOT里相应目录(因为CVS一个项目下的子目录都是独立的,移动到$CVSROOT目录下都可以作为新的独立项目:好比一颗树,其实砍下任意一枝都能独立存活),对目录进行了修改后,要求其开发人员重新导出项目cvs checkout project_name 或者用cvs update -dP同步。
项目发布导出不带CVS目录的源文件
做开发的时候你可能注意到了,每个开发目录下,CVS都创建了一个CVS/目录。里面有文件用于记录当前目录和CVS库之间的对应信息。但项目发布的时候你一般不希望把文件目录还带着含有CVS信息的CVS目录吧,这个一次性的导出过程使用cvs export命令,不过export只能针对一个TAG或者日期导出,比如:
cvs export -r release1 project_name
cvs export -D 20021023 project_name
cvs export -D now project_name
cvs tag release_1_0
开始一个新的里程碑:
cvs commit -r 2 标记所有文件开始进入2.x的开发
注意:CVS里的revsion和软件包的发布版本可以没有直接的关系。但所有文件使用和发布版本一致的版本号比较有助于维护。
版本分支的建立
在开发项目的2.x版本的时候发现1.x有问题,但2.x又不敢用,则从先前标记的里程碑:release_1_0导出一个分支 release_1_0_patch
cvs rtag -b -r release_1_0 release_1_0_patch proj_dir
一些人先在另外一个目录下导出release_1_0_patch这个分支:解决1.0中的紧急问题,
cvs checkout -r release_1_0_patch
而其他人员仍旧在项目的主干分支2.x上开发
在release_1_0_patch上修正错误后,标记一个1.0的错误修正版本号
cvs tag release_1_0_patch_1
如果2.0认为这些错误修改在2.0里也需要,也可以在2.0的开发目录下合并release_1_0_patch_1中的修改到当前代码中:
cvs update -j release_1_0_patch_1
常见的登陆格式如下:
cvs -d :pserver:cvs_user_name@cvs.server.address:/path/to/cvsroot login
例子:
cvs -d :pserver:cvs@samba.org:/cvsroot login
不是很安全,因此一般是作为匿名只读CVS访问的方式。从安全考虑,通过系统本地帐号认证并通过SSH传输是比较好的办法,通过在客户机的 /etc/profile里设置一下内容:
CVSROOT=:ext:$USER@cvs.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH
所有客户机所有本地用户都可以映射到CVS服务器相应同名帐号了。
比如:
CVS服务器是192.168.0.3,上面CVSROOT路径是/home/cvsroot,另外一台开发客户机是192.168.0.4,如果 tom在2台机器上都有同名的帐号,那么从192.168.0.4上设置了:
export CVSROOT=:ext:tom@192.168.0.3:/home/cvsroot
export CVS_RSH=ssh
tom就可以直接在192.168.0.4上对192.168.0.3的cvsroot进行访问了(如果有权限的话)
cvs checkout project_name
cd project_name
cvs update
...
cvs commit
如果CVS所在服务器的SSH端口不在缺省的22,或者和客户端与CVS服务器端SSH缺省端口不一致,有时候设置了:
:ext:$USER@test.server.address#port:/path/to/cvsroot
仍然不行,比如有以下错误信息:
ssh: test.server.address#port: Name or service not known
cvs [checkout aborted]: end of file from server (consult above messages if any)
解决的方法是做一个脚本指定端口转向(不能使用alias,会出找不到文件错误):
创建一个/usr/bin/ssh_cvs文件,假设远程服务器的SSH端口是非缺省端口:34567
#!/bin/sh
/usr/bin/ssh -p 34567 "$@"
然后:chmod +x /usr/bin/ssh_cvs
并CVS_RSH=ssh_cvs; export CVS_RSH
注意:port是指相应服务器SSH的端口,不是指cvs专用的pserver的端口
使用的样例可以看:http://www.freebsd.org/cgi/cvsweb.cgi
CVSWEB的下载:CVSWEB从最初的版本已经演化出很多功能界面更丰富的版本,这个是我个人感觉安装设置比较方便的:
原先在:http://www.spaghetti-code.de/software/linux/cvsweb/,但目前已经删除,目前仍可以在本站下载CVSWEB,其实最近2年FreeBSD的CVSWeb项目已经有了更好的发展吧,而当初没有用FreeBSD那个版本主要就是因为没有彩色的文件Diff功能。
下载解包:
tar zxf cvsweb.tgz
把配置文件cvsweb.conf放到安全的地方(比如和apache的配置放在同一个目录下),
修改:cvsweb.cgi让CGI找到配置文件:
$config = $ENV{'CVSWEB_CONFIG'} || '/path/to/apache/conf/cvsweb.conf';
转到/path/to/apache/conf下并修改cvsweb.conf:
CVSWEB可不能随便开放给所有用户,因此需要使用WEB用户认证:
先生成 passwd:
/path/to/apache/bin/htpasswd -c cvsweb.passwd user
修改httpd.conf: 增加
<Directory "/path/to/apache/cgi-bin/cvsweb/">
AuthName "CVS Authorization"
AuthType Basic
AuthUserFile /path/to/cvsweb.passwd
require valid-user
</Directory>
几个常用的缺省文件:
default.php
<?php
/*
* Copyright (c) 2002 Company Name.
* $Header: /home/cvsroot/tech/cvs_card.html,v 1.9 2003/11/09 07:57:11 chedong Exp $
*/
?>
====================================
Default.java: 注意文件头一般注释用 /* 开始 JAVADOC注释用 /** 开始的区别
/*
* Copyright (c) 2002 MyCompany Name.
* $Header: /home/cvsroot/tech/cvs_card.html,v 1.9 2003/11/09 07:57:11 chedong Exp $
*/
package com.mycompany;
import java.;
/**
* comments here
*/
public class Default {
/**
* Comments here
* @param
* @return
*/
public toString() {
}
}
====================================
default.pl:
#!/usr/bin/perl -w
# Copyright (c) 2002 Company Name.
# $Header: /home/cvsroot/tech/cvs_card.html,v 1.9 2003/11/09 07:57:11 chedong Exp $
# file comments here
use strict;
CVS没有文件锁定模式,VSS在check out同时,同时记录了文件被导出者锁定。
CVS的update和commit, VSS是get_lastest_version和check in
对应VSS的check out/undo check out的CVS里是edit和unedit
在CVS中,标记自动更新功能缺省是打开的,这样也带来一个潜在的问题,就是不用-kb方式添加binary文件的话在cvs自动更新时可能会导致文件失效。
$Header: /home/cvsroot/tech/cvs_card.html,v 1.5 2003/03/09 08:41:46 chedong Exp $ $Date: 2003/11/09 07:57:11 $这样的标记在Virsual SourceSafe中称之为Keyword Explaination,缺省是关闭的,需要通过OPITION打开,并指定需要进行源文件关键词扫描的文件类型:*.txt,*.java, *.html...
对于Virsual SourceSafe和CVS都通用的TAG有:
$Header: /home/cvsroot/tech/cvs_card.html,v 1.5 2003/03/09 08:41:46 chedong Exp $
$Author: chedong $
$Date: 2003/11/09 07:57:11 $
$Revision: 1.9 $
我建议尽量使用通用的关键词保证代码在CVS和VSS都能方便的跟踪。
cvs Windows客户端:目前稳定版本为1.2
http://cvsgui.sourceforge.net
ssh Windows客户端
http://www.networksimplicity.com/openssh/
安装好以上2个软件以后:
WinCVS客户端的admin==>preference设置
1 在general选单里
设置CVSROOT: username@192.168.0.123:/home/cvsroot
设置Authorization: 选择SSH server
2 Port选单里
钩上:check for alternate rsh name
并设置ssh.exe的路径,缺省是装在 C:\Program Files\NetworkSimplicity\ssh\ssh.exe
然后就可以使用WinCVS进行cvs操作了,所有操作都会跳出命令行窗口要求你输入服务器端的认证密码。
当然,如果你觉得这样很烦的话,还有一个办法就是生成一个没有密码的公钥/私钥对,并设置CVS使用基于公钥/私钥的SSH认证(在general 选单里)。
可以选择的diff工具:examdiff
下载:
http://www.prestosoft.com/examdiff/examdiff.htm
还是在WinCVS菜单admin==>preference的WinCVS选单里
选上:Externel diff program
并设置diff工具的路径,比如:C:\Program Files\ed16i\ExamDiff.exe
在对文件进行版本diff时,第一次需要将窗口右下角的use externel diff选上。
这里首先说一下CVS的pserver模式下的用户认证,CVS的用户认证服务是基于inetd中的:
cvspserver stream tcp nowait apache /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver
一般在2401端口(这个端口号很好记:49的平方)
CVS用户数据库是基于CVSROOT/passwd文件,文件格式:
[username]:[crypt_password]:[mapping_system_user]
由于密码都用的是UNIX标准的CRYPT加密,这个passwd文件的格式基本上是apache的htpasswd格式的扩展(比APACHE的 PASSWD文件多一个系统用户映射字段),所以这个文件最简单的方法可以用
apache/bin/htpasswd -b myname mypassword
创建。注意:通过htpasswd创建出来的文件会没有映射系统用户的字段
例如:
new:geBvosup/zKl2
setup:aISQuNAAoY3qw
test:hwEpz/BX.rEDU
映射系统用户的目的在于:你可以创建一个专门的CVS服务帐号,比如用apache的运行用户apache,并将/home/cvsroot目录下的所有权限赋予这个用户,然后在passwd文件里创建不同的开发用户帐号,但开发用户帐号最后的文件读写权限都映射为apache用户,在SSH模式下多个系统开发用户需要在同一个组中才可以相互读写CVS库中的文件。
进一步的,你可以将用户分别映射到apache这个系统用户上。
new:geBvosup/zKl2:apache
setup:aISQuNAAoY3qw:apache
test:hwEpz/BX.rEDU:apache
CVSTrac很好的解决了CVSROOT/passwd的管理问题,而且包含了BUG跟踪报告系统和集成WIKIWIKI交流功能等,使用的 CGI方式的安装,并且基于GNU Public License:
在inetd里加入cvspserver服务:
cvspserver stream tcp nowait apache /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver
xietd的配置文件:%cat cvspserver
service cvspserver
{
disable = no
socket_type = stream
wait = no
user = apache
server = /usr/bin/cvs
server_args = -f --allow-root=/home/cvsroot pserver
log_on_failure += USERID
}
注意:这里的用户设置成apache目的是和/home/cvsroot的所有用户一致,并且必须让这个这个用户对/home/cvsroot/下的 CVSROOT/passwd和cvstrac初始化生成的myproj.db有读取权限。
安装过程
修改登录密码,进行BUG报告等,
更多使用细节可以在使用中慢慢了解。
对于前面提到的WinCVS在perference里设置:
CVSROOT栏输入:username@ip.address.of.cvs:/home/cvsroot
Authenitication选择:use passwd file on server side
就可以了从服务器上进行CVS操作了。
CVS的权限管理分2种策略:
Linux上通过ssh连接CVS服务器的多个开发人员:通过都属于apache组实现文件的共享读写
开发人员有开发服务器上的系统帐号:sysuser1 sysuser2,设置让他们都属于apache组,因为通过cvs新导入的项目都是对组开放的:664权限的,这样无论那个系统用户导入的项目文件,只要文件的组宿主是apache,所有其他同组系统开发用户就都可以读写;基于ssh远程认证的也是一样。
apache(system group)
/ | \
sysuser1 sysuser2 sysuser3
Windows上通过cvspserver连接CVS服务器的多个开发人员:通过在passwd文件种映射成 apache用户实现文件的共享读写
他们的帐号通过CVSROOT/passwd和readers writers这几个文件管理;通过cvstrac设置所有虚拟用户都映射到apache用户上即可。
apache(system user)
/ | \
windev1 windev2 windev3
利用CVS WinCVS/CVSWeb/CVSTrac 构成了一个相对完善的跨平台工作组开发版本控制环境。
相关资源:
CVS HOME:
http://www.cvshome.org
CVS FAQ:
http://www.loria.fr/~molli/cvs-index.html
相关网站:
http://directory.google.com/Top/Computers/Software/Configuration_Management/Tools/Concurrent_Versions_System/
CVS--并行版本系统
http://www.soforge.com/cvsdoc/zh_CN/book1.html
CVS 免费书:
http://cvsbook.red-bean.com/
CVS命令的速查卡片 refcards.com/refcards/cvs/
WinCVS:
http://cvsgui.sourceforge.net/
CVSTrac: A Web-Based Bug And Patch-Set Tracking System For CVS
http://www.cvstrac.org
StatCVS:基于CVS的代码统计工具:按代码量,按开发者的统计表等
http://sourceforge.net/projects/statcvs
- 作者: Michael_yrx 2005年03月28日, 星期一 11:38 回复(0) | 引用(0) 加入博采
Linux 指令大全(3)
- 作者: Michael_yrx 2005年03月26日, 星期六 10:01 回复(0) | 引用(0) 加入博采
Linux 指令大全(2)
- 作者: Michael_yrx 2005年03月26日, 星期六 10:00 回复(0) | 引用(0) 加入博采
Linux 指令大全(1)
- 作者: Michael_yrx 2005年03月26日, 星期六 09:59 回复(0) | 引用(0) 加入博采
GCC精彩之旅(二)
- 作者: Michael_yrx 2005年03月26日, 星期六 09:57 回复(1) | 引用(0) 加入博采
GCC精彩之旅(一)
GCC精彩之旅(一)
作者:肖文鹏 发文时间:2004.03.22
- 作者: Michael_yrx 2005年03月26日, 星期六 09:56 回复(0) | 引用(0) 加入博采
走进业务流程(二)
说起业务流程,有几个概念不得不先澄清。语言和文字的发明可以说在本质上影响了人类社会文明的发展,相互的交流,文化的传承,知识的传播,无不是在语言和文字的载体之上。然而很怪的事,现实生活之中总有那么些东西(好像数目还不小)不管我们怎么来描述隐隐约约只能感觉到是那么回事,当我们想要用一种精确的语言来表达是总有一种力不从心的感觉。我们很难用文字来描述《二泉映月》的那种意境,好像也没找到出声音之外能更好传达《大峡谷》的那种空灵。也许有某位文学家或者诗人能表达出来,但我不能,或者说大部分人是不能的。流程应该属于上面所说的事物中的一员。当然需要注明的是,这里我们所讲的流程,包括本文后面出现的流程字样,均指企业业务或者商业业务的一种抽象流程,之所以指明是区别实际的化学流程或者控制器的流程。
说语言文字的表现能力是有限的,并不是我想在这里跟大家讨论表现力的问题。我只是觉得每一种事物在语言文字的基础上总是要借助适合于他自身的一种表现方式。莫奈通过《日出印象》向人们展示了美好的瞬间,莫扎特的《魔笛》通过声音带来了音乐的享受。对于流程而言,人们也一直在寻找一种表现方式,希望能够将抽象的过程通过语言、图像、符号抑或是声音能够完美的表现出来。对这种表现方式的探究人类也已经进行了许多年,清朝的官员如果要面圣,那么他首先必须先得皇上召见,然后才能准备去京城,到了宫门口还得先报个到,如果是骑马的得下马,带刀的刀也得搁宫门口。那么这就是一个流程,它是以一种文书的形式规定下来的,然后大家都会记住,每一个要面圣的都知道该这么做。实际上这个流程在当时已经存在着两种形式:书写下来的以文字一步一步说明的,存在于人们大脑中的一幅画面。对于后一种方式也许是当时人们没有想到可以以图画的形式表示,或者当时尚未意识到这样一种需求。那么今天我们将这流程表现出来,他应该是如下的一个过程:

通过如上的这种表现方式,大家是不是觉得整个过程好像比以前简单了,只要看懂了一下子就知道该怎么办了,当然估计你不会有面圣的机会了。但我想对于这一流程的认识应该说比以前生动也形象了许多吧。
说到这儿大家一定觉得这个纯粹是废话,没有什么表现力。是的,对于上面所举的例子,其实并不想说明什么问题,只有一个目的:给大家一个流程的初步印象。言归正传,所谓流程就是一系列事件的处理过程。一个单独事件的处理不能称为流程,最多只能成为一个动作或者一个过程,而流程是由一系列的动作和过程组成的,要求能过体现活动或过程间逻辑关系。对于简单的事情我们通常不谈流程,而只是说过程,本文之所以这样强调是为了突出流程中所体现的逻辑性,在后面的具体实例建模的时候你将实际的体会到这种区分的重要性。
我们换一种比较离我们近一点的例子,我想大家见不了皇上一定去过银行,我们去银行不管做什么事,如果以前你没办过相同的业务或者你已经忘掉了,那么跨进银行门想做的第一件事一定是我该怎么办,要是有个人能知道一下就好了J。然而多数时候问了半天就是问不到一个能知道全部的人,只能告诉我一句话:排队去!当然现在好多了,基本上进门后总能看到各式各样的类似于下面的图:

有了这个之后你去银行一定觉得方便了很多。
说了这么多废话,忽然发现一个很重要的问题还没说!本文到底会写那些方面的东西了,不能总是在这儿胡扯阿。
这样吧,先把文章的结构安排给大家讲一下。从没这么写过文章,有不到之处大家见谅噢。
一、开篇
二、流程初探
2.1 什么是流程
2.2 为什么要业务流程建模
2.3 为谁建模
2.4 当前较流行的业务流程建模理论体系及建模工具介绍
三、ARIS 业务流程建模
3.1 eEPC的魅力
3.2 从哪儿开始
3.3 实例分析
四、ARIS 业务流程仿真
五、ARIS 业务流程分析
六、ARIS 业务流程重组和改进支持
七、其他建模工具的比较
7.1 BAAN的动态建模DEM
7.2 IGrafx的诱惑
7.3 CaseWise 美国佬的产品
7.4 IBM 蓝色的魅力——工作流程建模
暂时只能想到这么多了,等以后想到了再补上去吧,就这点能不能读写全还不知道,不过我希望我能J。暂时处于失业中,希望在找到工作之前能够完成任务,欢迎大家监督。
注:后面文章的写作顺序可能跟上面的目录不一样,只能想到哪儿写到哪儿了,还希望大家见谅。
Vilen Dank!!!
(今天就写到这儿吧,明天Weit!)
- 作者: Michael_yrx 2005年03月23日, 星期三 14:56 回复(1) | 引用(0) 加入博采
走进业务流程
(走进业务流程)开篇
作者:Michael
搞业务流程方面的研究与开发已经有两年的多时间了,虽然实际水平也不知到底怎么样,可是手总觉得很痒,总想写的什么东西。酝酿着写一篇有关业务流程方面的文章已经很久了,只是一直以来没下的了决心,主要是怕自己没法坚持下去,到时没法跟大家交代。昨晚上经过一个晚上的痛苦挣扎,终于决定动手了J。
有关业务流程管理方面的书籍,就拿国内来讲的话,资料应该是不少的,大家搞这方面的研究也已经有了不少年了吧。然而我个人感觉而言,国内搞研究总感觉有些浮,华而不实的感觉,真正静心作深入研究的人没有几个,大家都是很流行的那几个概念回来,大家相互炒炒,差不多热了就吃了,根本没有入味。当然,这并不代表我跟人好像就好牛,这里我只是把握个人的感觉说出来而已。其实你要是真正了解的话肯定会发现,国内真正能的得到很深入的资料或者文献真的很少很少。我这两年多来基本上都是英文字母里滚出来的。
如果各位对业务流程不是很了解的话,可以先找一些资料看看,个人觉得清华大学CIMS范玉顺老师有几本书作为入门还是很不错的。如果你已经很了解,很想深入的话,那估计你只能去看abcd了J。
写作动机:在互联网上摸爬滚打了五六年了,一直以来总是学别人的东西,看别人的文章,自己很少贡献,连帖子都懒得回(该贬了)。总觉得有点过意不去,一直有一种想做点回报的感觉,想来想去,IT方面牛人已经很多了,自己好像能写得很少,要不咱钻个冷门,写个有关业务流程的吧,毕竟搞这方面的应用研究也有些时日了。希望能够给大家一些帮助。
版权声明:我很讨厌一些网站什么的要找个东西还要注册,还要看不懂的金币,烦死了。所以这篇文章讲完全公开的互联网上,任何人都可以享用,当然前提是得保留咱的版权信息(好歹咱也是一个字一个字的写出来的,呵呵)。
我是很喜欢Bruce Eckel的,从他的Thinking In C++到Thinking In Java都是可以在网上不花分文的取得,我觉得这是一种大度和境界,只有在某个层次上的人才能做出的。当然不是说不尊重版权,相反更是对原作者劳动的一种认可。知识的目的是传播和共享以便能够更好的为这个世界服务。
基于如上的考虑,本文将在类似于GPL的版权信息的保护机制下共享。任何人或组织都可以在保留版权信息的前提下以任何方式复制,传播或引用本文的全部内容。但是,任何个人和组织不得未经许可擅自更改本文的部分或全部内容。
版权信息:Copyright: Michael Yu, 2005-3-22, Shanghai, China. Tongji University CIMS_Reseach_Center
本文中所有涉及的商标,所引用的信息版权归原作者或组织所有,本人不享有任何权利!
致谢:
真诚的感谢给过我很多帮助和指导的 严隽薇 教授 博导 王 坚 研究员 博导 乔 飞 副教授
以及一直以来给予悉心指导的 凌卫青 博士 戴意茹 博士
如果您对本文的任何部分、任何方面有意见或者建议的请致信michael_yrx@yahoo.com.cn
- 作者: Michael_yrx 2005年03月22日, 星期二 16:37 回复(1) | 引用(0) 加入博采
Install Vmware with Xorg against XFree86
看到论坛上很多人包括兄弟我自己在给Vmware上的Fedora Core 3安装vmware tools都出现了问题,我下决心牺牲一个周末休息日来解决它。
一般说来,在Vmware workstaion 4.5.2上安装 Fedora Core 3后,不安装vmware tools也可以正常图像界面启动、图像界面使用。但是不爽之处有:
1:分辨率只有800x600。
2:每次鼠标移动到虚拟机屏幕的边缘时,需要按ctrl+alt才能出来。
安装了vmware tools 后一般会遇到的问题是,startx时会找不到mouse。兄弟我在以前的帖子里说过可以通过修改 /etc/XF86Config,把section "pointer"后面的device"/dev/mouse"改为"/dev/mouse0"就可以了。
但是有的朋友说找不到/etc/XF86Config这个文件。其实,FC3本身没有使用这个文件,而是使用的/etc/X11/xorg.conf这个 文件来配置x windows。但是vmware 4.5.2上的vmware tools不支持这个文件,所以如果为FC3安装了vmware tools,它会自动创建/etc/XF86Config这个文件,而且有些设置与FC3实际的不同。如上述的mouse问题。
修改了之后就可以startx,进入x windows系统了。
但是使用这种方法后却不能以图形界面方式(rhgb)启动了。这点一直让我很不爽。
兄弟我今天在网上一顿狂搜,终于为FC3的vmware tools 安装找到了完美的解决办法:
在安装vmware tools之前,要对 vmware-tools-distrib/bin/vmware-config-tools.pl这个文件做如下修改:
1:把2850行附近的
sub xserver4 {
return xserver_bin() . '/XFree86';
}
改为
sub xserver4 {
return xserver_bin() . '/Xorg';
}
2:把3055行附近的
/X.org Foundation/ ? '4.4.0' : '0.0.0';
改为
/X.org Foundation/ ? '4.4.0' : '4.4.0';
3:把3056行附近的
$xconfig_file_name = $ENV{'XF86CONFIG'};
} elsif (file_name_exist($xconfig_path . '/XF86Config-4')) {
改为
$xconfig_file_name = $ENV{'XF86CONFIG'};
} elsif (file_name_exist($xconfig_path . '/xorg.conf')) {
$xconfig_file_name = 'xorg.conf';
} elsif (file_name_exist($xconfig_path . '/XF86Config-4')) {
4:把3440行附近的
my $keybRegex = 'driver\s+\"keyboard\"';
改为
my $keybRegex = 'driver\s+\"(keyboard|kbd)\"';
5:把3570行附近的
if ($major == 4 && $minor >= 2 &&
file_name_exist($cX4MouseDriverFile)) {
$line =~ s/%MOUSE_DRIVER%/vmmouse/g;
} else {
改为
if ($major == 4 && $minor >= 2 &&
file_name_exist($cX4MouseDriverFile)) {
$line =~ s/%MOUSE_DRIVER%/vmmouse/g;
$line =~ s-/dev/mouse-/dev/input/mice-;
} else {
然后运行vmware-tools-distrib/vmware-install.pl 安装vmware tools。
在安装的时候当提到 compile a vmhgfs module 时,回答 no。
也会提示你改分辨率,输入3,X的分辨率即可设为1024X768。
安装完之后startx,或以runlevel 5启动。一切顺利,你会发现:
分辨率提高了
鼠标在进出虚拟机时不用再按ctrl+alt。
后面的附近是修改后的vmware-config-tools.pl
安装vwware tools之前用它替换 vmware-tools-distrib/bin/vmware-config-tools.pl。
注意替换后要为vmware-config-tools.pl设置好属性:
chown 201 vmware-config-tools.pl
chgrp 201 vmware-config-tools.pl
chmod 555 vmware-config-tools.pl
- 作者: Michael_yrx 2005年03月19日, 星期六 21:01 回复(0) | 引用(0) 加入博采
Installing Vmware
1) First you need to create some folders.
mkdir /etc/rc.d/vmware.d mkdir /etc/rc.d/vmware.d/rc0.d mkdir /etc/rc.d/vmware.d/rc1.d mkdir /etc/rc.d/vmware.d/rc2.d mkdir /etc/rc.d/vmware.d/rc3.d mkdir /etc/rc.d/vmware.d/rc4.d mkdir /etc/rc.d/vmware.d/rc5.d mkdir /etc/rc.d/vmware.d/rc6.d
2) Start the vmware installation
3) When it asks where the directories for rc0.d thru rc6.d are, use /etc/rc.d/vmware.d
3) When it asks where the init directory is, use /etc/rc.d
4) It will probably say that the modules supplied dont match the kernal version and asks you if you want to compile it, do yes.
5) If it complains that the gcc compiler is of a different version and that if you use it, your virtual machines will likely crash, select yes as it seems to work anyway. You cannot complete the installation if you say no to this.
6) The rest of the install should work pretty well.
7) There is now a vmware init script in /etc/rc.d. you can add this to your daemons list if you want. I personally dont do this, but if you intend to use the vmware network's when not actually using vmware, then you will need to do this. You will need to start it before you can run vmware though.
8) To start vmware, you just do vmware from a console window, or create a shortcut or menu item however you like.
Leave the /etc/rc.d/vmare.d/ folders there, because it is needed whenever you perform vmware-config.pl.
Remember, if the kernel is changed or updated, you will need to run vmware-config.pl again.
There is a problem with vmware unable to run correctly after a reboot. I am trying to find a permenant fix to this, but have managed to get by with running vmware-config.pl again each time I reboot. I'll update when I have a better solution.
Solution: edit /etc/rc.d/vmware
find the text below
case "$1" in
start)
and put "rm /etc/vmware/not_configured" without the quotes immediately after that line.
Kernel 2.6 and udev.
Follow the steps above and then:
1 - modify udev config.
edit /etc/udev/rules.d/00-myrules.rules and add 2 lines:
# tty devices KERNEL="tty[0-9]*", NAME="vc/%n", SYMLINK="%k" # floppy devices KERNEL="fd[0-9]*", NAME="floppy/%n" , SYMLINK="fd%n"
2 - start/stop script
it takes care of devices and start vmware, also stop vmware and remove dev entries), call it, for examples, mkvmdev, chmod it 755 and put in /etc/rc.d:
#!/bin/sh
. /etc/rc.conf
. /etc/rc.d/functions
case "$1" in
start)
stat_busy "Creating /dev entries for vmware and start"
mknod /dev/vmnet0 c 119 0
mknod /dev/vmnet1 c 119 1
mknod /dev/vmnet2 c 119 2
mknod /dev/vmnet3 c 119 3
mknod /dev/vmnet4 c 119 4
mknod /dev/vmnet5 c 119 5
mknod /dev/vmnet6 c 119 6
mknod /dev/vmnet7 c 119 7
mknod /dev/vmnet8 c 119 8
mknod /dev/vmnet9 c 119 9
chmod 0600 /dev/vmnet0
chmod 0600 /dev/vmnet1
chmod 0600 /dev/vmnet2
chmod 0600 /dev/vmnet3
chmod 0600 /dev/vmnet4
chmod 0600 /dev/vmnet5
chmod 0600 /dev/vmnet6
chmod 0600 /dev/vmnet7
chmod 0600 /dev/vmnet8
chmod 0600 /dev/vmnet9
mknod /dev/parport0 c 99 0
mknod /dev/parport1 c 99 1
mknod /dev/parport2 c 99 2
mknod /dev/parport3 c 99 3
chmod 0600 /dev/parport0
chmod 0600 /dev/parport1
chmod 0600 /dev/parport2
chmod 0600 /dev/parport3
mknod /dev/vmmon c 10 165
chmod 0660 /dev/vmmon
/etc/rc.d/vmware start
;;
stop)
stat_busy "Removing /dev entries and stop vmware"
/etc/rc.d/vmware stop
rm /dev/vmnet0
rm /dev/vmnet1
rm /dev/vmnet2
rm /dev/vmnet3
rm /dev/vmnet4
rm /dev/vmnet5
rm /dev/vmnet6
rm /dev/vmnet7
rm /dev/vmnet8
rm /dev/vmnet9
rm /dev/parport0
rm /dev/parport1
rm /dev/parport2
rm /dev/parport3
;;
restart)
$0 stop
$0 start
;;
*)
echo "usage: $0 {start|stop|restart}"
esac
exit 02 - Modify /etc/rc.conf
Add mkvmdev to daemons in your rc.conf, and remember to remove vmware from rc.conf. If you prefere delete the lines that launch vmware from mkvmdev and leave in rc.conf, you choose.
- 作者: Michael_yrx 2005年03月18日, 星期五 17:37 回复(0) | 引用(0) 加入博采