---
id: 12
title: 'Membangun *BSD CVSup Mirror'
date: 2003-01-23T03:45:55+00:00
author: hky
layout: post
guid: http://lostfocus.org/blog/?p=12
permalink: /membangun-bsd-cvsup-mirror/
dsq_thread_id:
  - 581953959
tags:
  - Lab
---
Membangun *BSD CVSup Mirror

Hengky Anwar < hky@corebsd.or.id >

Artikel ini menerangkan tentang bagaimana cara membangun CVSup Mirror Server untuk *BSD (FreeBSD, NetBSD and OpenBSD).

Dan tidak menutup kemungkinan dijadikan sebagai acuan untuk memirror software lainnya melalui cvsup.
  
Kritikan dan saran silahkan kirimkan melalui email yang tertera di atas.
  
Artikel ini berdasarkan artikel dari Motoyuki Konno. Tentunya dengan penyesuian, sesuai dengan kebutuhan.

1. Pendahuluan.

Terutama sebagai pengguna Operating System *BSD, tentu sudah akrab dengan CVSup (bagi yang belum mengenalnya silahkan jalan-jalan ke situs www.cvsup.org). Rata rata permasalahaan yang kita hadapi di Indonesia adalah kekurangan bandwith. Yang menyebabkan proses update baik source ataupun ports/pkgsrc akan memakan waktu cukup lama, karena harus konek ke server yang ada di luar Indonesia. Karena memang server CVSup untuk keluarga BSD belum satupun yang ada di Indonesia. Karena itu kami baru-baru ini mencoba membangun sebuah CVSup Mirror di Indonesia. Dengan koneksi Internet dari IconPLN. Operating System yang kami gunakan adalah OpenBSD

Mengapa CVSup ?
  
CVSup adalah protokol kumunikasi yang tercepat dengan arsitektur multithread yang sangat baik khususnya untuk update dan mirror. 

2. Persyaratan Hardware ,Software dan Koneksi Internet.

a. Software

* CVSup binaries (cvsup and cvsupd)
  
Seperti biasanya di keluarga BSD anda dapat menginstall software dengan 2 cara. Pertama dengan menginstall Binary package yang sudah disediakan. Atau dengan menggunakan ports/pkgsrc.
  
Packages
  
Kami menyarankan gunakan package yang dibuild dengan flavor tanpa X (no_x11 atau without-gui)
  
Lokasi Ports
  
&#8211; FreeBSD (i386 and alpha) = /usr/ports/net/cvsup-without-gui
  
&#8211; NetBSD (i386) = /usr/pkgsrc/devel/cvsup
  
&#8211; OpenBSD (i386) = /usr/ports/net/cvsup or binary package

b. Hardware

* Minimal memory fisik 256 Mb.
  
* Hardisk dengan kondisi dan kecepatan yang bagus, dengan kapasitas minimal adalah 10 G.
  
Alokasinya adalah sebagai berikut :
  
FreeBSD = 4,9 G ( 1.7GB for CVS repository, 3,2GB for all (CVS repository, GNATS DB, mailing list archives, etc.)
  
NetBSD = 2.2GB
  
OpenBSD = 1.8GB

c. Koneksi Internet

Minimal bandwith (internasional dan iix masing masing) adalah 1 Mbps

3. Setup

3.1. Setup Awal
  
3.1.1. User cvsup dan cvsupd

Masukkan user beserta group cvsup dan cvsupd ke system anda. Bisa dilakukan dengan command adduser ataupun vipw.
  
Contoh /etc/master.passwd :
  
cvsup:*:10001:10001::0:0:CVSup Owner:/d/cvsup:/sbin/nologin
  
cvsupd:*:10002:10002::0:0:CVSupd Owner:/d/cvsupd:/sbin/nologin

Contoh /etc/group :
  
cvsup:*:10001:
  
cvsupd:*:10002:

3.1.2. Mempersiapkan direktori (sebagai root)

\# mkdir /core/cvsup # home direktori cvsup
  
\# mkdir /core/cvsupd # home direktori cvsupd
  
\# chown root:wheel /core/cvsup /core/cvsupd
  
\# chmod 755 /core/cvsup /core/cvsupd
  
\# cd /core/cvsupd
  
\# mkdir prefixes # tempat koleksi data cvsupd
  
\# mkdir scan # direktori scan file
  
\# chown root:wheel prefixes scan
  
\# chmod 755 prefixes scan
  
\# cd /core/cvsup
  
\# ln -s ../cvsupd/scan sup
  
\# mkdir log # direktori log cvsup
  
\# mkdir lock # direktori tempat file lock cvsupd
  
\# chown cvsup:cvsup /core/cvsup/log /core/cvsup/lock
  
\# chmod 755 /core/cvsup/log /core/cvsup/lock

catatan : Proses diatas bisa anda automatisasikan dengan membuat shell skrip.

3.2. Mengambil FreeBSD CVS repository dengan menggunakan CVSup
  
3.2.1. Mempersiapkan direktori

\# cd /core/cvsupd
  
\# mkdir prefixes/FreeBSD.cvs # CVS repository
  
\# mkdir prefixes/FreeBSD-gnats.current # GNATS DB
  
\# mkdir prefixes/FreeBSD-mail.current # mailing list archive
  
\# mkdir prefixes/FreeBSD-www.current # www.FreeBSD.org data
  
\# mkdir prefixes/distrib.self # CVSup config file
  
\# chown cvsup:cvsup /core/cvsupd/prefixes/*
  
\# chmod 755 /core/cvsupd/prefixes/*
  
\# mkdir scan/cvs-all
  
\# mkdir scan/gnats
  
\# mkdir scan/www
  
\# mkdir scan/mail-archive
  
\# mkdir scan/distrib
  
\# chown cvsup:cvsup /core/cvsupd/scan/*
  
\# chmod 755 /core/cvsupd/scan/*
  
\# ln -s prefixes/distrib.self/sup sup

3.2.2. Membuat file cvsup refuse

lokasi : /core/cvsupd/scan/distrib/refuse.self
  
owner : root
  
file mode : 0444

*.sh
  
cvsupd.access
  
cvsupd.passwd
  
prefixes
  
sup.client
  
supfile*

3.2.3. Membuat file supfile-freebsd

lokasi : /core/cvsup/supfile-freebsd.
  
owner : cvsup
  
file mode : 0644

\# Supfile FreeBSD CVSup mirror
  
*default host=cvsup.jp.FreeBSD.org
  
*default base=/core/cvsup
  
*default delete use-rel-suffix umask=002
  
cvs-all release=cvs prefix=/core/cvsupd/prefixes/FreeBSD.cvs
  
gnats release=current prefix=/core/cvsupd/prefixes/FreeBSD-gnats.current
  
www release=current prefix=/core/cvsupd/prefixes/FreeBSD-www.current
  
mail-archive release=current prefix=/core/cvsupd/prefixes/FreeBSD-mail.current
  
distrib release=self prefix=/core/cvsupd/prefixes/distrib.self

3.2.4. Membuat skrip update

lokasi : /core/cvsup/update-freebsd.sh
  
owner : cvsup
  
file mode : 0700

#!/bin/sh
  
export PATH=/bin:/usr/bin:/usr/local/bin
  
export LANG=C
  
SUPFILE=/core/cvsup/supfile-freebsd
  
LOCK=/core/cvsup/lock/freebsd.lock
  
LOG=/core/cvsup/log/freebsd.log
  
ADMIN=&#8221;admin@corebsd.or.id&#8221;
  
S_TIME=0430
  
if [ x\`date &#8220;+%H%M&#8221;\` = x$S_TIME ]; then
         
SFLAG=
  
else
         
SFLAG=-s
  
fi
  
(
         
echo
         
echo &#8220;========== CVSup $SFLAG started at \`date\`&#8221;
         
if ! cvsup $SFLAG -g -L 2 -r 1 -l $LOCK $SUPFILE; then
                 
tail $LOG |\
                 
mail -s &#8220;CVSup FreeBSD failed&#8221; $ADMIN
         
fi
         
echo &#8220;========== CVSup $SFLAG ended at \`date\`&#8221;
  
) >> $LOG

3.2.5. Jalankan skrip update

Jalankan skrip di atas sebagai user cvsup, anda bisa menggunakan bantuan su ataupun sudo.

\# sudo -u cvsup update-freebsd.sh

Catatan : lamanya proses tersebut tergantung koneksi anda. Kami membutuhkan waktu sekitar 2 hari.
  
Jika proses tersebut berjalan lancar, anda bisa memasukkan skrip update tersebut ke dalam crontab sebagai user cvsup.

#sudo crontab -u cvsup -e
  
0 \*/2 \* \* \* /bin/sh /core/cvsup/update-freebsd.sh

Artinya : update source akan berjalan setiap 2 jam sekali.

3.3.Mengambil NetBSD CVS repository dengan menggunakan CVSup

3.3.1. Mempersiapkan directori

\# cd /core/cvsupd
  
\# mkdir prefixes/NetBSD.cvs

\# mkdir prefixes/NetBSD-distrib.self
  
\# chown cvsup:cvsup /d/cvsupd/prefixes/*
  
\# chmod 755 /core/cvsupd/prefixes/*
  
\# mkdir scan/netbsd
  
\# mkdir scan/netbsd-distrib
  
\# chown cvsup:cvsup /d/cvsupd/scan/*
  
\# chmod 755 /core/cvsupd/scan/*
  
\# ln -s prefixes/NetBSD-distrib.self/sup-netbsd sup-netbsd

3.3.2. create cvsup refuse file

lokasi : /core/cvsupd/scan/netbsd-distrib/refuse.self
  
owner : root
  
file mode : 0444

*.sh
  
cvsupd.access
  
cvsupd.passwd
  
prefixes
  
sup.client
  
supfile*

3.3.3. Membuat file supfile-netbsd

lokasi /core/cvsup/supfile-netbsd
  
owner : cvsup
  
file mode : 0644

\# Supfile NetBSD CVSup mirror
  
*default host=cvsup.de.NetBSD.org
  
*default base=/d/cvsup
  
*default delete use-rel-suffix umask=002
  
netbsd release=cvs prefix=/core/cvsupd/prefixes/NetBSD.cvs
  
netbsd-distrib release=self prefix=/core/cvsupd/prefixes/NetBSD-distrib.self

3.3.4. Membuat skrip update

lokasi : /core/cvsup/update-netbsd.sh
  
owner : cvsup
  
file mode : 0700

#!/bin/sh
  
export PATH=/bin:/usr/bin:/usr/local/bin
  
export LANG=C
  
SUPFILE=/core/cvsup/supfile-netbsd
  
LOCK=/core/cvsup/lock/netbsd.lock
  
LOG=/core/cvsup/log/netbsd.log
  
ADMIN=&#8221;admin@corebsd.or.id&#8221;
  
S_TIME=0430
  
if [ x\`date &#8220;+%H%M&#8221;\` = x$S_TIME ]; then
         
SFLAG=
  
else
         
SFLAG=-s
  
fi
  
(
         
echo
         
echo &#8220;========== CVSup $SFLAG started at \`date\`&#8221;
         
if ! cvsup $SFLAG -g -L 2 -r 1 -l $LOCK $SUPFILE; then
                 
tail $LOG |\
                 
mail -s &#8220;CVSup NetBSD failed&#8221; $ADMIN
         
fi
         
echo &#8220;========== CVSup $SFLAG ended at \`date\`&#8221;
  
) >> $LOG

3.3.5. Jalankan update skrip

Jalankan skrip di atas sebagai user cvsup, anda bisa menggunakan bantuan su ataupun sudo.

\# sudo -u cvsup update-netbsd.sh

Catatan : lamanya proses tersebut tergantung koneksi anda. Kami membutuhkan waktu sekitar 2 hari.
  
Jika proses tersebut berjalan lancar, anda bisa memasukkan skrip update tersebut ke dalam crontab sebagai user cvsup.

#sudo crontab -u cvsup -e
  
0 \*/2 \* \* \* /bin/sh /core/cvsup/update-netbsd.sh

3.4. Mengambil OpenBSD CVS repository dengan menggunakan CVSup
  
3.4.1.Mempersiapkan direktori

\# cd /core/cvsupd
  
\# mkdir prefixes/OpenBSD.cvs
  
\# mkdir prefixes/OpenBSD-distrib.self
  
\# chown cvsup:cvsup /d/cvsupd/prefixes/*
  
\# chmod 755 /core/cvsupd/prefixes/*
  
\# mkdir scan/OpenBSD-all
  
\# mkdir scan/OpenBSD-distrib
  
\# chown cvsup:cvsup /core/cvsupd/scan/*
  
\# chmod 755 /core/cvsupd/scan/*
  
\# ln -s prefixes/OpenBSD-distrib.self/sup-openbsd sup-openbsd

3.4.2. Membuat file refuse

lokasi : /core/cvsupd/scan/OpenBSD-distrib/refuse.self
  
owner : root
  
file mode : 0444

*.sh
  
cvsupd.access
  
cvsupd.passwd
  
prefixes
  
sup.client
  
supfile*

3.4.3. Membuat file supfile-openbsd

lokasi /core/cvsup/supfile-openbsd.

owner : cvsup
  
file mode : 0644

\# Supfile OpenBSD CVSup mirror
  
*default host=rt.fm
  
*default base=/core/cvsup
  
*default delete use-rel-suffix umask=002
  
OpenBSD-all release=cvs prefix=/core/cvsupd/prefixes/OpenBSD.cvs

3.4.4.Membuat skrip update

lokasi : /core/cvsup/update-openbsd.sh
  
owner : cvsup
  
file mode : 0700

#!/bin/sh
  
export PATH=/bin:/usr/bin:/usr/local/bin
  
export LANG=C
  
SUPFILE=/core/cvsup/supfile-openbsd
  
LOCK=/core/cvsup/lock/openbsd.lock
  
LOG=/core/cvsup/log/openbsd.log
  
ADMIN=&#8221;admin@corebsd.or.id&#8221;
  
S_TIME=0430
  
if [ x\`date &#8220;+%H%M&#8221;\` = x$S_TIME ]; then
         
SFLAG=
  
else
         
SFLAG=-s
  
fi
  
(
         
echo
         
echo &#8220;========== CVSup $SFLAG started at \`date\`&#8221;
         
if ! cvsup $SFLAG -g -L 2 -r 1 -l $LOCK $SUPFILE; then
                 
tail $LOG |\
                 
mail -s &#8220;CVSup OpenBSD failed&#8221; $ADMIN
         
fi
         
echo &#8220;========== CVSup $SFLAG ended at \`date\`&#8221;
  
) >> $LOG

3.4.5. Jalankan skrip update

Jalankan skrip di atas sebagai user cvsup, anda bisa menggunakan bantuan su ataupun sudo.

\# sudo -u cvsup update-openbsd.sh

Catatan : lamanya proses tersebut tergantung koneksi anda. Kami membutuhkan waktu sekitar 2 hari.
  
Jika proses tersebut berjalan lancar, anda bisa memasukkan skrip update tersebut ke dalam crontab sebagai user cvsup.

#sudo crontab -u cvsup -e
  
0 \*/2 \* \* \* /bin/sh /core/cvsup/update-openbsd.sh

3.5. Setup CVSup daemon

3.5.1 Membuat file cvsupd.access

lokasi : /core/cvsupd/cvsupd.access.

Contohnya seperti di bawah ini:
  
\# ============================================================
  
\# tiap host hanya dibolehkan 1 koneksi untuk 1 kali waktu
  
\# ============================================================
  
-0.0.0.0/0/32 1
  
\# ============================================================
  
\# selalu ijinkan akses dari localhost (atau ssh port forwarding)
  
\# ============================================================
  
+localhost
  
\# ============================================================
  
\# batasi untuk total 10 koneksi pada waktu yang bersamaan
  
\# ============================================================
  
-0.0.0.0/0 10
  
\# ============================================================
  
\# izinkan anonymous untuk mengakses
  
\# ============================================================
  
+0.0.0.0/0

3.5.2 Log

Anda bisa memantau log via /var/log/messages
  
#tail -f /var/log/messages

3.5.3 Membuat skrip CVSup Daemon startup

lokasi : /core/cvsupd/cvsupd.sh

#!/bin/sh
  
export PATH=/usr/bin:/usr/local/bin
  
export LANG=C
  
exec nice -10 cvsupd -C 128 -l @local0 -b /core/cvsupd -s scan \
         
-c sup:sup-netbsd:sup-openbsd

Tambahkan baris berikut pada file /etc/rc.local:

#CVSupD
  
if [ -x /core/cvsupd/cvsupd.sh ]; then
         
echo -n &#8216; cvsupd&#8217;; su -m cvsupd -c /core/cvsupd/cvsupd.sh
  
fi

4. Server statistik

Untuk mengetahui statistik koneksi anda bisa menggunakan MRTG.

5. Tuning CVSup server

5.1. Filesystem

Gunakan option softupdates dalam filesistem anda.
  
Contoh /etc/fstab :

/dev/wd0h /core ffs rw,softdep 1 2

6. Security
  
6.1. cvsup
  
CVSup Client (cvsup) membutuhkan hak write untuk direktori di bawah ini. Pastikan selain direktori atau file yang tertera di bawah ini tidak bisa di write oleh cvsup user.
  
-CVS repository directories (/core/cvsupd/prefixes/*)
  
-scan files directory (/core/cvsupd/scan/*)
  
-log files directory (/core/cvsup/log)
  
-lock files directory (/core/cvsup/lock)

6.2. cvsupd
  
Daemon CVSup (cvsupd) tidak membuat ataupun menulis direktori atau file apapun.
  
Pastikan tidak ada file ataupun direktori yang bisa di write oleh user cvsupd
  
6.3 Firewall
  
OpenBSD menggunakan PF sebagai firewall. Berikut adalah contoh skrip firewall dengan menggunakan PF

Contoh /etc/pf.conf

#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
  
\# GORILLA : Firewall Configuration
  
#
  
\# service allowed to this machine : ssh, cvsup, http, ident(?)
  
#
  
\# hky@corebsd.or.id
  
#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;

block in log all
   
pass in on sis0 proto tcp from any to sis0 port 22 keep state
   
pass in on sis0 proto tcp from any to sis0 port 80 keep state
   
pass in on sis0 proto tcp from any to sis0 port 113 keep state
   
pass in on sis0 proto tcp from any to sis0 port 5999 keep state

pass out on sis0 proto { tcp, udp } all keep state

#EOF &#8211; 25022003

7. TODO

8. Referensi

http://motoyuki.bsdclub.org/BSD/cvsup.html
  
http://www.cvsup.org

Copyright(c) 20032 Hengky Anwar, All rights reserved.