CoreBSD Wiki

Membangun *BSD CVSup Mirror

Hengky Anwar
hky.at.corebsd.or.id
copyright © 2003 Hengky Anwar

Pendahuluan.

Di (mantan) network yang saya maintain, bandwith merupakan yang hal terbatas. Sementara saya mempunyai beberapa server yang menggunakan operating system basis BSD. Akan sangat memakan waktu dan bandwith ketika saya melakukan update untuk 2 buah box yang menjalankan sistem operasi OpenBSD.

Dari kasus ini terpikir untuk membuat sebuah repositori server, khususnya untuk BSD. Karena selain OpenBSD terdapat juga FreeBSD, NetBSD.Berdasarkan artikel ini, anda juga bisa memirror repositori lainnya, misal KDE dan lain lain. Terutama sebagai pengguna Operating System *BSD, tentu anda 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 melakukan koneksi ke server yang ada di luar Indonesia. Karena memang server CVSup untuk keluarga BSD belum 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. Untuk lebih lengkapnya silahkan baca artikel http://www.cvsup.org/howsofast.html. Dan tentu saja anda bisa membandingkan secara langsung, dengan menghitung waktu yang diperlukan untuk mengupdate source sebuah repository, jika tersedia protokol lain selain CVSup (misalkan : AnonCVS, rsync, dsb.

Persyaratan Software, Hardware dan Koneksi Internet.

Software

  • CVSup (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. Jika menggunakan package, kami menyarankan gunakan package yang dibuild dengan flavor tanpa X (no_x11 atau without-gui). Lokasi Ports:

  • FreeBSD (i386 and alpha) = /usr/ports/net/cvsup-without-gui
  • NetBSD (i386) = /usr/pkgsrc/devel/cvsup
  • OpenBSD (i386) = /usr/ports/net/cvsup or binary package

Hardware

  • Memory 256 Mb.
  • Hardisk dengan kondisi dan mempunyai RPM > 7200 , dengan kapasitas minimal adalah 10 G.

Alokasinya adalah sebagai berikut :

  • FreeBSD = 4,9 GB ( 1.7GB for CVS repository, 3,2GB for all (CVS repository, GNATS DB, mailing list archives, etc.)
  • NetBSD = 2.2 GB
  • OpenBSD = 1.8 GB

Total : 8.9 G

Koneksi Internet

Pada waktu awal pembuatan CVSup server, akan dibutuhkan bandwith yang banyak, karena ukuran repository nya yang begitu besar. Selanjutnya untuk proses sinkronisasi, kebutuhan bandwith ini akan sangat berkurang. Bisa dihitung sendiri, berapa lama waktu yang dibutuhkan untuk mendownload repositori berdasarkan jumlah repositori yang ada di atas.

Setup

Partisi

Pada saat menginstall Operating System yang akan digunakan untuk Mirror ini. Pastikan anda mempunyai sebuah partisi yang didedikasikan khusus untuk tempat penyimpanan yang cukup besar. Pada kasus ini kami mengalokasikan sebuah partisi dengan ukuran 10 GB untuk membuat mirror ini.

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:

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.

Mengambil FreeBSD CVS repository dengan menggunakan CVSup

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

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*

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

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="[email protected]"
S_TIME=0430
if [ x`date "+%H%M"` = x$S_TIME ]; then
SFLAG=
else
SFLAG=-s
fi
(
echo
echo "========== CVSup $SFLAG started at `date`"
if ! cvsup $SFLAG -g -L 2 -r 1 -l $LOCK $SUPFILE; then
tail $LOG |\
mail -s "CVSup FreeBSD failed" $ADMIN
fi
echo "========== CVSup $SFLAG ended at `date`"
) >> $LOG

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.

Mengambil NetBSD CVS repository dengan menggunakan CVSup

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

Buat 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*

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

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="[email protected]"
S_TIME=0430
if [ x`date "+%H%M"` = x$S_TIME ]; then
SFLAG=
else
SFLAG=-s
fi
(
echo
echo "========== CVSup $SFLAG started at `date`"
if ! cvsup $SFLAG -g -L 2 -r 1 -l $LOCK $SUPFILE; then
tail $LOG |\
mail -s "CVSup NetBSD failed" $ADMIN
fi
echo "========== CVSup $SFLAG ended at `date`"
) >> $LOG

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

Mengambil OpenBSD CVS repository dengan menggunakan CVSup

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

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*

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

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="[email protected]"
S_TIME=0430
if [ x`date "+%H%M"` = x$S_TIME ]; then
SFLAG=
else
SFLAG=-s
fi
(
echo
echo "========== CVSup $SFLAG started at `date`"
if ! cvsup $SFLAG -g -L 2 -r 1 -l $LOCK $SUPFILE; then
tail $LOG |\
mail -s "CVSup OpenBSD failed" $ADMIN
fi
echo "========== CVSup $SFLAG ended at `date`"
) >> $LOG

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

Setup CVSup daemon

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

Log

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

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 ' cvsupd'; su -m cvsupd -c /core/cvsupd/cvsupd.sh
fi

Statistik Server

Untuk mengetahui statistik koneksi anda bisa menggunakan MRTG.

Tuning CVSup server

Filesystem

Gunakan option softupdates dalam filesistem anda. Contoh etc/fstab: /dev/wd0h /core ffs rw,softdep 1 2

Security

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)

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

Firewall

OpenBSD menggunakan PF sebagai firewall. Berikut adalah contoh skrip firewall dengan menggunakan PF Contoh /etc/pf.conf

#--------------------------------------------------------------------------
# GORILLA : Firewall Configuration
#
# service allowed to this machine : ssh, cvsup, http, ident(?)
#
# [email protected]
#--------------------------------------------------------------------------
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 - 25022003

TODO

Skrip untuk automatisasi setup cvsup server.

Download

Jika anda memerlukan skrip automasi untuk setup CVSup mirror ini, silahkan hubungi saya

Referensi

coreartikel/membangun.cvsup.mirror.txt · Last modified: by 127.0.0.1