Saturday, August 4, 2007

portsnap vs cvsup

portsnap คือคำสั่งที่ใช้ update port ของ FreeBSD เช่นเดียวกับ cvsup แล้วมันต่างกันอย่างไรละ?!?

ความแตกต่างอย่างแรกคือ portsnap ใหม่กว่า cvsup เก่าแล้ว และ portsnap จะมีให้เลยใน FreeBSD 6.x --' (ไร้สาระจริงๆ เลยเรา)

ความแตกต่างคือ (เข้าประเด็นแล้ว)
1. portsnap จะ update ได้ปลอดภัยกว่า โดยมีเป็นการส่งแบบ signed compress snapshot ก็คือ ส่ง snapshot ที่มีการบีบอัด และก็ข้อมูลที่ส่งจะมี signature ทำให้แน่ใจได้ว่าข้อมูลที่ได้รับถูกต้องแน่นอน
2. portsnap จะ update เฉพาะที่มีการเปลี่ยนแปลง ซึ่งเหมาะกับการระบบที่มีการ update บ่อยๆ แต่ cvsup จะ update ทั้ง port tree ซึ่งทำให้ cvsup update port ช้ากว่าและใช้ bandwidth มากกว่า
3. portsnap ใช้ protocol HTTP ในการส่งข้อมูล แต่ cvsup เป็น custom protocol ใช้ port 5999 ซึ่งอาจมีปัญหากับพวก firewall

Note: จากที่ผมเคยลองมา ถ้าทิ้งไว้เป็นเดือนแล้วใช้ portsnap มันนานพอควรเลยแหละ (ไม่ได้จับเวลาทดสอบนะ) ดังนั้นผมก็ไม่รู้เหมือนกันว่าระบบที่ไม่ค่อย update port แบบนี้ควรใช้ cvsup หรือ portsnap

จากข้อดีของ portsnap ที่ได้บอกไปแล้ว ก็ขออธิบายสั้นๆ ละกัน เกี่ยวกับวิธีการใช้งาน portsnap (ถ้าอยากดูเต็มๆ ก็ไปดูที่ http://www.freebsd.org/doc/handbook/portsnap.html)

portsnap จะมีให้เลยใน FreeBSD version ไหนบ้างผมไม่แน่ใจ (ผมเริ่มใช้ตอนมันออก 6.1) แต่ถ้าในเครื่องของคุณไม่มีสามารถติดตั้งโดยใช้ port ports-mgmt/portsnap

snapshot ทั้งหมดของ portsnap ที่ download มาจะเก็บไว้ที่ /var/db/portsnap แต่ถ้าลงจาก port จะอยู่ที่ /usr/local/portsnap/

สำหรับการใช้ portsnap ครั้งแรก
1. ทำการดึง snapshot ทั้งหมดของ port
# portsnap fetch
2. ทำการ extract port ที่ fetch มา
# portsnap extract
Note: ถึงแม้ว่าในเครื่องจะมีการใช้ cvsup ก่อนหน้านี้ ก็ต้องใช้ 2 คำสั่งนี้ เพื่อเป็น baseline ให้ portsnap รู้ว่าครั้งต่อไปต้อง update อะไรบ้าง

การ update port tree ในครั้งต่อๆ ไป ก็ใช้คำสั่งบรรทัดเดียวคือ
# portsnap fetch update
Note: คำสั่งข้างบน เท่ากับ 2 คำสั่งแต่ไปนี้ portsnap fetch; portsnap update

การสั่งให้ portsnap update ด้วย cron ก็คือใช้คำสั่ง portsnap -I cron update โดย -I คือให้ fetch snapshot มา แต่ทำการ update เฉพาะไฟล์ INDEX ของ port ซึ่งจะเห็นว่าต้องสั่ง portsnap update อีกที (ตาม Handbook เหตุผลที่ใช้ -I คือป้องกันการ update port ขณะที่เราทำการติดตั้งโปรแกรม) สรุปก็คือเพิ่มบรรทัดต่อไปนี้ใน /etc/crontab
0 3 * * * root portsnap -I cron update && pkg_version -vIL=

3 August 2007

Reference:
[1] Secure FreeBSD ports tree updating, http://www.daemonology.net/portsnap/
[2] FreeBSD Handbook (A.6 Using Portsnap), http://www.freebsd.org/doc/handbook/portsnap.html

1 comment:

  1. แจ่มแจ้ง /thx
    http://www.sdc36.org

    ReplyDelete