วันอังคาร, กรกฎาคม 05, 2548

HOWTO CVS server

จากที่ผ่านๆ มาเคยมีคนถามๆ ว่า cvs มันคืออะไร ใช้ยังไงเคยบอกผ่านๆ หลายคนอยู่ แต่วันนี้ เรามาลอง setup cvs server กันดูซักทีดีกว่าไหม ขั้นตอนง่ายๆ ไม่ยุ่งยากมากมาย
  1. download cvsd มาจากที่นี่ http://tiefighter.et.tudelft.nl/~arthur/cvsd/
  2. ทำการ install ทำตามนี้ (ในที่นี่ผมทำการ download และแตก file ใน /usr/local/src)

    $ tar -zxvf cvsd-x.x.x.tar.gz
    $ cd cvsd-x-x-x
    $ ./configure --prefix=/usr --with-cvs=/usr/bin/cvs --with-perl=/usr/bin/perl --with-libwrap --sysconfdir=/etc
    $ make
    $ su -
    # make -C /usr/local/src/cvsd-x.x.x install

  3. หลังจากนี้เราจะได้ cvs server มาใช้งานเรียบร้อย แต่ยังไม่เสร็จ เราต้องทำการ build cvsroot ขึ้นมาใช้งานก่อน รวมถึง confgiuration ตัว server ให้เรียบร้อย

    ในที่นี้ ผมแนะนำว่าควรใช้งาน cvs server ผ่าน jailroot ซึ่งแล้วแต่ว่าเราจะ config ว่าให้ไปอยู่ที่ไหน ขึ้นกับความต้องการ และความเหมาะสมของตัวคุณเอง สมมุติว่าผมเอาไปไว้ที่ /export/home/cvs และ repository เป็น /export/home/cvs/Repos สั่งตามต่อไปนี้

    # addgroup cvsd
    # mkdir /export/home/cvs
    # adduser -c "cvs pserver daemon" -s /bin/false -g cvsd -r -d /export/home/cvs cvsd
    # cvs -d /export/home/cvs/Repos init
    # cvsd-buildroot /export/home/cvs
    # cd /export/home/cvs
    # mkdir -p var/lock

  4. คราวนี้เราจะได้ cvsd พร้อมจะใช้งานแล้ว แต่ว่าในบางครั้งการ ทำ buildroot ของ cvs อาจจะไม่เรียบร้อยหรือมีการลงที่ไม่เรียบร้อยควรสั่งเพิ่มดังนี้

    cp /lib/ld-* /export/home/cvs/lib/
    cp /lib/libdl.so.2 /export/home/cvs/lib/

  5. ต่อไปมาจัดการแก้ไขเกี่ยวกับ config ของ cvsd กัน ซึ่ง config ของ cvsd นั้นจะอยู่ที่ /etc/cvsd/cvsd.conf ตามที่เรา compile ไว้แต่แรก
    RootJail /export/home/cvs
    Uid cvsd
    Gid cvsd
    CvsCommand /bin/cvs
    Nice 1
    Umask 027
    PidFile /var/run/cvsd.pid
    MaxConnections 10 << ส่วนนี้อยากตั้งเท่าไรก็ตามใจ แต่ถ้าตั้งเป็น 0 คือ unlimit
    Log /var/log/cvsd.log info << แนะนำควรนำไปใส่เพิ่มใน logrotate service ด้วย
    Repos /Repos
  6. ขั้นต่อมาทำการสร้าง user เพื่อใช้งาน cvs server โดยจะมี file ที่เกี่ยวข้องกับ permission อยู่ 2 ตัวคือ writes และ readers โดยจะความแตกต่างกันคือ หากนำชื่อของ user ไปใส่ใน readers จะทำให้สามารถอ่านได้เพียงอย่างเดียว แต่หากนำไปใส่ใน writers จะสามารถอ่านและเขียนได้

    # cvsd-passwd /export/home/cvs/Respo YOUR_USER_HERE
    # cd /export/home/cvs/Respo/CVSROOT
    # touch readers writers
    # chown cvsd:cvsd readers writers
    # echo "YOUR_USER" > writers

  7. อันดับต่อไปให้ทำการแก้ไข file: /export/home/cvs/Respo/CVSROOT/config ตามนี้
    SystemAuth=no
    LockDir=/var/lock/cvs

    # mkdir -p /export/home/cvs/Repos/var/lock/cvs


  8. แก้ file: /export/home/cvs/Repos/CVSROOT/cvswrappers ดังนี้
    *.jpeg -k 'b'
    *.midi -k 'b'
    *.jpg -k 'b'
    *.bpgr -k 'b'
    *.zip -k 'b'
    *.exe -k 'b'
    *.o -k 'b'
    *.jnp -k 'b'
    *.ram -k 'b'
    *.aiff -k 'b'
    *.xpi -k 'b'
    *.asf -k 'b'
    *.obj -k 'b'
    *.snp -k 'b'
    *.png -k 'b'
    *.mid -k 'b'
    *.eargrp -k 'b'
    *.class -k 'b'
    *.rar -k 'b'
    *.sar -k 'b'
    *.au -k 'b'
    *.rpt -k 'b'
    *.jds -k 'b'
    *.wav -k 'b'
    *.jpe -k 'b'
    *.gif -k 'b'
    *.cab -k 'b'
    *.dcu -k 'b'
    *.war -k 'b'
    *.ejbgrp -k 'b'
    *.ejbgrpx -k 'b'
    *.library -k 'b'
    *.jar -k 'b'
    *.jpgr -k 'b'
    *.rmf -k 'b'
    *.asx -k 'b'
    *.ear -k 'b'
    *.bin -k 'b'

  9. ต่อมาให้ทำการ change permission/ownership ให้เป็น cvsd ซะ และทำการ start service อาจจะรวมถึงต้องการ add ลงใน runlevel ก็แล้วแต่

    # cd /export/home
    # chown -R cvsd:cvsd cvs
    # chmod -R 775 cvs/var
    # /etc/init.d/cvsd start

    Add to runlevel
    # redhat distro base
    chkconfig cvsd on

    # gentoo distro base
    rc-update add cvsd default

    ส่วนที่เหลือ เช่น freeBSD ทำยังไงผมไม่แน่ใจ ต้องลองหาดูแล้วกัน


Reference:
http://gentoo-wiki.com/HOWTO_CVS_Server
http://blogs.application-servers.com/roller/page/undx
http://powell.chem.ox.ac.uk:1974/wiki/index.php/CVS_setup

4 ความคิดเห็น:

takasungi กล่าวว่า...

สรุปแล้วมันคือไรอ่ะพี่ cvs อ่ะ ไว้ทำไรเหรอ หุหุ

bact' กล่าวว่า...

cvs เอาไว้เก็บบันทึกการเปลี่ยนแปลงของไฟล์ต่าง ๆ
ส่วนใหญ่จะเอาไว้เก็บซอร์สโค้ดกัน
จะช่วยบอกได้ว่า ใครเปลี่ยนอะไรตรงไหนของไฟล์ไหนไปบ้าง เมื่อไหร่

zendz กล่าวว่า...

ขอบคุณ bact' มากครับที่ช่วยตอบ พอดีช่วงนี้ไม่ค่อยว่าง กำลังวุ่นๆ เรื่องงานอยู่พอดี

Patrickz กล่าวว่า...

ไม่เจอกับตัวไม่รู้สึก
ผมว่าจะเอามาใช้อยู่เหมือนกัน แต่ไม่มีเวลา

วันก่อน coding อยู่ เกือบต้องเสีย source code ไป ไอ้ที่มีอยู่ ก็ backup ไว้สองสามวันที่แล้ว โชคดีแก้กลับมาได้