整合環境:
JDeveloper OAF in Windows 8:
Patch 17888411 for Oracle EBS R12.2.3
PC IP: 192.168.3.116
CVS Server in Oracle Linux:
R6.4 Kernel: 2.6.39-400.17.eluek.x86_64
Server IP: 192.168.3.50
HostName: oradb12clinux
一、安裝CVS
一般 Oracle Linux 已經內含 CVS 的套件[ cvs-1.11.xx(x86_64) & cvs-inetd-1.11.x(noarch) ],在安裝時記得勾選即可,若忘記勾選,等系統安裝完再從光碟安裝也可以。
1.先查看是否安裝 cvs,一般安裝在 /usr/bin/cvs
# which cvs
/usr/bin/cvs
# rpm -qa | grep cvs
cvs-1.11.23-15.el6.x86_64
cvs-inetd-1.11.23-16.el6.noarch
二、建立 Users and Groups
1. 建立cvs user group,便於管理cvs User
#groupadd cvs
2. 建立cvsroot User,屬於 cvs 群組,根目錄為/opt/cvs,不允許 login
# useradd -M -g cvs -s /sbin/nologin cvs <- 建立 cvs 的帳戶, 不建立 User Home: /home/cvs
3. 若需要建立 anonymous 帳號
# useradd -M -s /sbin/nologin anonymous
4. 將系統內其他會使用到 cvs 的 User 加入到 cvs 的 Group 中
# vi /etc/group
cvs:x:501:polinwei,anonymous,cvs
三、設定環境變數
# vi /etc/profile.d/cvs.sh
export CVSROOT=/opt/cvs_root
export CVS_RSH=ssh (為了在 Windows 平台上的 JDeveloper 連入, 使用 SSH 連結較安全)
立即生效此環境變數
1) 重新登入
2) # export CVSROOT=/opt/cvs_root
四、建立目錄,改變/opt/cvs_root 的目錄屬性
# mkdir /opt/cvs_root
# chmod 775 /opt/cvs_root
五、初始化 Repository
# cvs init ( 或 # cvs -d /opt/cvs_root init ) <- 此指令會呼叫 $CVSROOT 環境變數,並在目錄 /opt/cvs_root 下建立目錄 CVSROOT
# chown -R root:cvs /opt/cvs_root
若是沒有指定 $CVSROOT 環境變數則使用下列參數
# cvs -d :localhost:/opt/cvs_root init
因為用 local 的模式在用 cvs,所以不用登入(login)
-d 是指定 CVSROOT 路徑,如果沒設環境變數就要使用此參數
init 代表要初始化 /opt/cvs 這個目錄
六、設定 xinetd
1) 在 /etc/xinetd.d/ 內已有 cvs 的設定檔
# vi /etc/xinetd.d/cvs
service cvspserver
{
disable = no
port = 2401
socket_type = stream
protocol = tcp
wait = no
user = root
passenv = PATH
server = /usr/bin/cvs
env = HOME=/opt/cvs_root
server_args = -f --allow-root=/opt/cvs_root pserver
bind = 192.168.3.50
}
紅色的部份要注意,env 參數必須跟你所放置 CVS 目錄的位置一樣,server_args為登入時會用到的目錄名,bind 的 IP 改成您 Linux Server 的 IP。
2) 重新啟動 xinetd 並啟動 CVS Server
# service xinetd restart
# chkconfig cvs on
3) 檢查cvspserver服務是否已經啟動
# netstat -l |grep cvspserver
其結果如下:
tcp 0 0 oradb12clinux:cvspserver *:* LISTEN
七、登入
若要使用其它使用者的話,指令: cvs -d :pserver:user_name@ip_address:/opt/cvs login
# cvs -d :pserver:polinwei@localhost:/opt/cvs_root login
Logging in to :pserver:cvs@localhost:2401/opt/cvs
CVS password:
cvs [login aborted]: connect to [localhost]:2401 failed: Connection refused
# cvs -d:pserver:polinwei@oradb12clinux:/opt/cvs_root login
Logging in to :pserver:polinwei@oradb12clinux:2401/opt/cvs_root
CVS password:
[root@oradb12clinux CVSROOT]#
若正確則會直接回到 # 提示符號,表示 CVS Server 已正常運作
八、Windows Client 程式端 JDeveloper 的設定
1) 設定CVS連結
注意: Repository Path 是設定 Linux 主機端上的目錄,為 /opt/cvs_root
2) 將 oracle 的 workplace 當作 CVS 的 module 滙入 (import) 及 匯出 (Checkout)
CVS 的匯入其實是將整個目錄下的資料 import 進來
選擇那些檔案不要匯入
滙入完後是否執行 checkout
輸入Linux主機上此帳號的密碼
因在 import 後有執行 Checkout,發現在 JDevloper 上的 程式架構都亂七八糟了。沒關係,先將這些都移除
3) 將 CVS 的 Module: toolbox 滙出至 %JDEV_USER_HOME% 目錄下
將這些再從 JDeveloper 中再移除一次, 將檔仍會留在 %JDEV_USER_HOME%/toolbox 目錄下
從目錄 %JDEV_USER_HOME%/toolbox 再將 toolbox.jws 加入
就可以看到已有 CVS 程式序號控制了.
可以發現為何 test_fwktutorial.jsp 沒有序號控制呢? 那是因為這些共用程式是放在 %JDEV_USER_HOME%/myhtml 下的.
A. 額外進階設定:pserver (Password Server) 帳號/密碼設定
1) 為避免其它人經由 cvs 來 try password,建議可以 cvs 帳號和系統帳號分開。
# vi /opt/cvs/CVSROOT/passwd <- 該檔原本並不存在
格式為:帳號:密碼:系統帳號
ex: jdev_user:xxxxxx:usercvs
a. jdev_user 為登入 cvs 的帳號,/etc/passwd 內不需要有這個帳號
b. xxxxxx 為登入的密碼,經由 md5 編碼過,由此密碼可以建立 /opt/cvs/passwdgen.pl 來產生,如果需要密碼為:123456,則敲入# /opt/cvs/CVSROOT/passwdgen.pl "123456" ,回傳即可得到加密密碼,用其替換 passwd 檔中的 xxxxxx
c. cvs 登入後對應到 /etc/passwd 內這個帳號的權限
/opt/cvs/passwdgen.pl 檔案建立:
# su - cvs
> vi /opt/cvs/passwdgen.pl
#!/usr/bin/perl
srand (time());
my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
my $plaintext = shift;
my $crypttext = crypt ($plaintext, $salt);
print "${crypttext}\n";
改變權限及owner
#chmod 755 passwdgen.pl
#chown cvs:cvs passwdgen.pl
2) 編輯 /opt/cvs/CVSROOT/config
將 #SystemAuth=no 前的注解拿掉,該行的意思是登入的帳號不在 cvs 的 passwd 裡時,是否要對應到系統帳號。
設定 CVS 執行時所需的 lock 的目錄:LockDir=/opt/cvs_root/lock,並建立及改變此目錄權限
# pwd
/opt/cvs_root
# mkdir lock
# chmod -R 775 lock
# chown -R root:cvs lock
# service xinetd restart
3) 增加 anonymous 登入
新增 anonymous:md5密碼:nobody 至 /opt/cvs/CVSROOT/passwd 中
表示 anonymous 登入的權限是 nobody
若新增此行則 /cvs 需修改權限
#chmod o+rx /cvs
4) 設定 anonymous 權限為唯讀
# vi /opt/cvs/CVSROOT/readers
anonymous <- 新增 anonymous,該檔列表內所有帳號都只有唯讀權限,格式為一行一個帳號。
B. 指令模式
cvs -d "CVSROOT" command
若有用環境變數指定 CVSROOT,則可省略 -d "CVSROOT" 的參數
CVSROOT 通常為 ":pserver:user_name@ip_address:cvs_path" 的格式,如:# export CVSROOT=:pserver:jdev_user@localhost:/opt/cvs
cvs -d "CVSROOT" login:登入
cvs -d "CVSROOT" import profile:將 profile 這個專案新增到 server 上
cvs -d "CVSROOT" checkout profile:將 server 上 profile 專案整個抓下來
cvs -d "CVSROOT" logout:登出
cvs status <project>:列出該 project 內每個檔案的記錄
cvs history <project>:列出該 project 內每個檔案的修改歷史記錄
cvs annotate <pooject>:列出該 project 內每個檔案最後一次修改的記錄
參考:
http://blog.yam.com/gavint/article/2590383
http://forums.gentoo.org/viewtopic-t-55659-start-0.html
http://www.chedong.com/tech/cvs_card.html
http://www.crazysquirrel.com/computing/debian/servers/cvs.jspx
