16ed033beSMatthew Dillon.\" Copyright (c) 1998, Matthew Dillon. Terms and conditions are those of 26ed033beSMatthew Dillon.\" the BSD Copyright as specified in the file "/usr/src/COPYRIGHT" in 36ed033beSMatthew Dillon.\" the FreeBSD source tree. 46ed033beSMatthew Dillon.\" 56ed033beSMatthew Dillon.\" $FreeBSD$ 66ed033beSMatthew Dillon.\" 76ed033beSMatthew Dillon.Dd December 21, 2002 86ed033beSMatthew Dillon.Dt DEVELOPMENT 7 96ed033beSMatthew Dillon.Os 106ed033beSMatthew Dillon.Sh NAME 116ed033beSMatthew Dillon.Nm development 126ed033beSMatthew Dillon.Nd introduction to development with the FreeBSD codebase 136ed033beSMatthew Dillon.Sh DESCRIPTION 146ed033beSMatthew DillonThis manual page describes how an ordinary sysop, unix admin, or developer 156ed033beSMatthew Dilloncan, without any special permission, obtain, maintain, and modify the 166ed033beSMatthew DillonFreeBSD codebase as well as how to maintainin a master build which can 176ed033beSMatthew Dillonthen be exported to other machines in your network. This manual page 186ed033beSMatthew Dillonis targeted to system operators, programmers, and developers. 196ed033beSMatthew Dillon.Pp 206ed033beSMatthew DillonPlease note that what is being described here is based on a complete 216ed033beSMatthew DillonFreeBSD environment, not just the FreeBSD kernel. The methods described 226ed033beSMatthew Dillonhere are as applicable to production installations as it is to development 236ed033beSMatthew Dillonenvironments. You need a good 12-17GB of disk space on one machine to 246ed033beSMatthew Dillonmake this work conveniently. 256ed033beSMatthew Dillon.Sh SETTING UP THE ENVIRONMENT ON THE MASTER SERVER 266ed033beSMatthew DillonYour master server should always run a stable, production version of the 276ed033beSMatthew Dillon.Fx 286ed033beSMatthew Dillonoperating system. This does not prevent you from doing -current 296ed033beSMatthew Dillonbuilds or development. The last thing you want to do is to run an 306ed033beSMatthew Dillonunstable environment on your master server which could lead to a situation 316ed033beSMatthew Dillonwhere you lose the environment and/or cannot recover from a mistake. 326ed033beSMatthew Dillon.Pp 336ed033beSMatthew DillonCreate a huge partition called /FreeBSD. 8-12GB is recommended. This 346ed033beSMatthew Dillonpartition will contain nearly all the development environment, 356ed033beSMatthew Dillonincluding the CVS tree, broken-out source, and possibly even object files. 366ed033beSMatthew DillonYou are going to export this partition to your other machines via a 376ed033beSMatthew DillonREAD-ONLY NFS export so do not mix it with other more security-sensitive 386ed033beSMatthew Dillonpartitions. 396ed033beSMatthew Dillon.Pp 406ed033beSMatthew DillonYou have to make a choice in regards to /usr/obj. You can put /usr/obj in 416ed033beSMatthew Dillon/FreeBSD or you can make /usr/obj its own partition. I recommend making 426ed033beSMatthew Dillon/usr/obj its own partition for safety (it's being constantly modified) as 436ed033beSMatthew Dillonwell as to make certain things easier in the development environment which 446ed033beSMatthew DillonI describe down the line. I recommend a /usr/obj partition of at least 5GB. 456ed033beSMatthew Dillon.Pp 466ed033beSMatthew DillonOn the master server, use cvsup to automatically pull down and maintain 476ed033beSMatthew Dillonthe 486ed033beSMatthew Dillon.Fx 496ed033beSMatthew DillonCVS archive once a day. The first pull will take a long time, 506ed033beSMatthew Dillonit's several gigabytes, but once you have it the daily syncs will be quite 516ed033beSMatthew Dillonsmall. 526ed033beSMatthew Dillon.Bd -literal -offset 4n 536ed033beSMatthew Dillonmkdir /FreeBSD/FreeBSD-CVS 546ed033beSMatthew Dillonrm -rf /home/ncvs 556ed033beSMatthew Dillonln -s /FreeBSD/FreeBSD-CVS /home/ncvs 566ed033beSMatthew Dillon.Ed 576ed033beSMatthew Dillon.Pp 586ed033beSMatthew DillonThe cron job should look something like this (please randomize the time of 596ed033beSMatthew Dillonday!). Note that you can use the cvsup file example directly from 606ed033beSMatthew Dillon/usr/share/examples without modification by supplying appropriate arguments 616ed033beSMatthew Dillon to cvsup. 626ed033beSMatthew Dillon.Bd -literal -offset 4n 636ed033beSMatthew Dillon33 6 * * * /usr/local/bin/cvsup -g -r 20 -L 2 -h cvsup.freebsd.org /usr/share/examples/cvsup/cvs-supfile 646ed033beSMatthew Dillon.Ed 656ed033beSMatthew Dillon.Pp 666ed033beSMatthew DillonRun the cvsup manually the first time to pull down the archive. It could take 676ed033beSMatthew Dillonall day depending on how fast your connection is! Once you have 686ed033beSMatthew Dillonit, use cvs to checkout a -stable source tree and a -current source tree, 696ed033beSMatthew Dillonas well as ports and docs, to create your initial source environment. 706ed033beSMatthew DillonKeeping the broken-out source and ports in /FreeBSD allows you to export 716ed033beSMatthew Dillonit to other machines via read-only NFS. This also means you only have to 726ed033beSMatthew Dillonedit/maintain files in one place and all your clients automatically pick 736ed033beSMatthew Dillonup the changes. 746ed033beSMatthew Dillon.Bd -literal -offset 4n 756ed033beSMatthew Dillonmkdir /FreeBSD/FreeBSD-4.x 766ed033beSMatthew Dillonmkdir /FreeBSD/FreeBSD-current 776ed033beSMatthew Dillon 786ed033beSMatthew Dilloncd /FreeBSD/FreeBSD-4.x 796ed033beSMatthew Dilloncvs -d /home/ncvs checkout -rRELENG_4 src 806ed033beSMatthew Dillon 816ed033beSMatthew Dilloncd /FreeBSD/FreeBSD-current 826ed033beSMatthew Dilloncvs -d /home/ncvs checkout src 836ed033beSMatthew Dilloncvs -d /home/ncvs checkout ports 846ed033beSMatthew Dilloncvs -d /home/ncvs checkout doc 856ed033beSMatthew Dillon.Ed 866ed033beSMatthew Dillon.Pp 876ed033beSMatthew DillonNow create a softlink for /usr/src and /usr/src2. On the main server I 886ed033beSMatthew Dillonalways point /usr/src at -stable and /usr/src2 at -current. On client 896ed033beSMatthew Dillonmachines I usually do not have a /usr/src2 and I make /usr/src point 906ed033beSMatthew Dillonat whatever version of FreeBSD the client box is intended to run. 916ed033beSMatthew Dillon.Bd -literal -offset 4n 926ed033beSMatthew Dilloncd /usr 936ed033beSMatthew Dillonrm -rf src src2 946ed033beSMatthew Dillonln -s /FreeBSD/FreeBSD-4.x/src src (could be -current on a client) 956ed033beSMatthew Dillonln -s /FreeBSD/FreeBSD-current/src src2 (MASTER SERVER ONLY) 966ed033beSMatthew Dillon.Ed 976ed033beSMatthew Dillon.Pp 986ed033beSMatthew DillonNow you have to make a choice for /usr/obj. Well, hopefully you made it 996ed033beSMatthew Dillonalready and chose the partition method. If you chose poorly you probably 1006ed033beSMatthew Dillonintend to put it in /FreeBSD and, if so, this is what you want to do: 1016ed033beSMatthew Dillon.Bd -literal -offset 4n 1026ed033beSMatthew Dillon(ONLY IF YOU MADE A POOR CHOICE AND PUT /usr/obj in /FreeBSD!) 1036ed033beSMatthew Dillonmkdir /FreeBSD/obj 1046ed033beSMatthew Dilloncd /usr 1056ed033beSMatthew Dillonrm -rf obj 1066ed033beSMatthew Dillonln -s /FreeBSD/obj obj 1076ed033beSMatthew Dillon.Ed 1086ed033beSMatthew Dillon.Pp 1096ed033beSMatthew DillonAlternatively you may chose simply to leave /usr/obj in /usr. If your 1106ed033beSMatthew Dillon/usr is large enough this will work, but I do not recommend it for 1116ed033beSMatthew Dillonsafety reasons (/usr/obj is constantly being modified, /usr is not). 1126ed033beSMatthew Dillon.Pp 1136ed033beSMatthew DillonNote that exporting /usr/obj via read-only NFS to your other boxes will 1146ed033beSMatthew Dillonallow you to build on your main server and install from your other boxes. 1156ed033beSMatthew DillonIf you also want to do builds on some or all of the clients you can simply 1166ed033beSMatthew Dillonhave /usr/obj be a local directory on those clients. You should never 1176ed033beSMatthew Dillonexport /usr/obj read-write, it will lead to all sorts of problems and issues 1186ed033beSMatthew Dillondown the line and presents a security problem as well. It is far easier to 1196ed033beSMatthew Dillondo builds on the master server and then only do installs on the clients. 1206ed033beSMatthew Dillon.Pp 1216ed033beSMatthew DillonI usually maintain my ports tree via CVS. It's sitting right there in the 1226ed033beSMatthew Dillonmaster CVS archive and I've even told you to check it out (see above). With 1236ed033beSMatthew Dillonsome fancy softlinks you can make the ports tree available both on your 1246ed033beSMatthew Dillonmaster server and on all of your other machines. Note that the ports 1256ed033beSMatthew Dillontree exists only on the HEAD cvs branch, so its always -current even 1266ed033beSMatthew Dillonon a -stable box. This is what you do. 1276ed033beSMatthew Dillon.Bd -literal -offset 4n 1286ed033beSMatthew Dillon(THESE COMMANDS ON THE MASTER SERVER AND ON ALL CLIENTS) 1296ed033beSMatthew Dilloncd /usr 1306ed033beSMatthew Dillonrm -rf ports 1316ed033beSMatthew Dillonln -s /FreeBSD/FreeBSD-current/ports ports 1326ed033beSMatthew Dillon 1336ed033beSMatthew Dilloncd /usr/ports (this pushes into the softlink) 1346ed033beSMatthew Dillonrm -rf distfiles (ON MASTER SERVER ONLY) 1356ed033beSMatthew Dillonln -s /usr/ports.distfiles distfiles (ON MASTER SERVER ONLY) 1366ed033beSMatthew Dillon 1376ed033beSMatthew Dillonmkdir /usr/ports.distfiles 1386ed033beSMatthew Dillonmkdir /usr/ports.workdir 1396ed033beSMatthew Dillon.Ed 1406ed033beSMatthew Dillon.Pp 1416ed033beSMatthew DillonSince /usr/ports is softlinked into what will be read-only on all of your 1426ed033beSMatthew Dillonclients, you have to tell the ports system to use a different working 1436ed033beSMatthew Dillondirectory to hold ports builds. You want to add a line to your /etc/make.conf 1446ed033beSMatthew Dillonfile on the master server and on all your clients: 1456ed033beSMatthew Dillon.Bd -literal -offset 4n 1466ed033beSMatthew DillonWRKDIRPREFIX=/usr/ports.workdir 1476ed033beSMatthew Dillon.Ed 1486ed033beSMatthew Dillon.Pp 1496ed033beSMatthew DillonYou should try to make the directory you use for the ports working directory 1506ed033beSMatthew Dillonas well as the directory used to hold distfiles consistent across all of your 1516ed033beSMatthew Dillonmachines. If there isn't enough room in /usr/ports.distfiles and 1526ed033beSMatthew Dillon/usr/ports.workdir I usually make those softlinks (since this is on /usr 1536ed033beSMatthew Dillonthese are per-machine) to where the distfiles and working space really are. 1546ed033beSMatthew Dillon.Sh EXPORTING VIA NFS FROM THE MASTER SERVER 1556ed033beSMatthew DillonThe master server needs to export /FreeBSD and /usr/obj via NFS so all the 1566ed033beSMatthew Dillonrest of your machines can get at them. I strongly recommend using a 1576ed033beSMatthew Dillonread-only export for both security and safety. The environment I am 1586ed033beSMatthew Dillondescribing in this manual page is designed primarily around read-only 1596ed033beSMatthew DillonNFS exports. Your exports file on the master server should contain 1606ed033beSMatthew Dillon the following lines: 1616ed033beSMatthew Dillon.Bd -literal -offset 4n 1626ed033beSMatthew Dillon/FreeBSD -ro -alldirs -maproot=root: -network YOURLAN -mask YOURLANMASK 1636ed033beSMatthew Dillon/usr/obj -ro -alldirs -maproot=root: -network YOURLAN -mask YOURLANMASK 1646ed033beSMatthew Dillon.Ed 1656ed033beSMatthew Dillon.Pp 1666ed033beSMatthew DillonOf course, NFS server operations must also be configured on that machine. 1676ed033beSMatthew DillonThis is typically done via your /etc/rc.conf: 1686ed033beSMatthew Dillon.Bd -literal -offset 4n 1696ed033beSMatthew Dillonnfs_server_enable="YES" 1706ed033beSMatthew Dillonnfs_server_flags="-u -t -n 4" 1716ed033beSMatthew Dillon.Ed 1726ed033beSMatthew Dillon.Sh THE CLIENT ENVIRONMENT 1736ed033beSMatthew DillonAll of your client machines can import the development/build environment 1746ed033beSMatthew Dillondirectory simply by NFS mounting /FreeBSD and /usr/obj from the master 1756ed033beSMatthew Dillonserver. 1766ed033beSMatthew DillonA typical /etc/fstab 1776ed033beSMatthew Dillonentry on your client machines will be something like this: 1786ed033beSMatthew Dillon.Bd -literal -offset 4n 1796ed033beSMatthew Dillonmasterserver:/FreeBSD /FreeBSD nfs ro,bg 0 0 1806ed033beSMatthew Dillonmasterserver:/usr/obj /usr/obj nfs ro,bg 0 0 1816ed033beSMatthew Dillon.Ed 1826ed033beSMatthew Dillon.Pp 1836ed033beSMatthew DillonAnd, of course, you should configure the client for NFS client operations 1846ed033beSMatthew Dillonvia /etc/rc.conf. In particular, this will turn on nfsiod which will improve 1856ed033beSMatthew Dillonclient-side NFS performance: 1866ed033beSMatthew Dillon.Bd -literal -offset 4n 1876ed033beSMatthew Dillonnfs_client_enable="YES" 1886ed033beSMatthew Dillon.Ed 1896ed033beSMatthew Dillon.Pp 1906ed033beSMatthew DillonEach client should create softlinks for /usr/ports and /usr/src that point 1916ed033beSMatthew Dilloninto the NFS-mounted environment. 1926ed033beSMatthew DillonIf a particular client is running -current, /usr/src 1936ed033beSMatthew Dillonshould be a softlink to /FreeBSD/FreeBSD-current/src. If it is running 1946ed033beSMatthew Dillon-stable, /usr/src should be a softlink to /FreeBSD/FreeBSD-4.x/src. I 1956ed033beSMatthew Dillondo not usually create a /usr/src2 softlink on clients, that is used as 1966ed033beSMatthew Dillona convienent shortcut when working on the source code on the master server 1976ed033beSMatthew Dillononly and could create massive confusion (of the human variety) on a client. 1986ed033beSMatthew Dillon.Bd -literal -offset 4n 1996ed033beSMatthew Dillon(ON EACH CLIENT) 2006ed033beSMatthew Dilloncd /usr 2016ed033beSMatthew Dillonrm -rf ports src 2026ed033beSMatthew Dillonln -s /FreeBSD/FreeBSD-current/ports ports 2036ed033beSMatthew Dillonln -s /FreeBSD/FreeBSD-XXX/src src 2046ed033beSMatthew Dillon.Ed 2056ed033beSMatthew Dillon.Pp 2066ed033beSMatthew DillonDon't forget to create the working directories so you can build ports, as 2076ed033beSMatthew Dillonpreviously described. If these are not good locations, make them softlinks 2086ed033beSMatthew Dillonto the correct location. Remember that /usr/ports/distfiles is exported by 2096ed033beSMatthew Dillonthe master server and is therefore going to point to the same place 2106ed033beSMatthew Dillon(typically /usr/ports.distfiles) on every machine. 2116ed033beSMatthew Dillon.Bd -literal -offset 4n 2126ed033beSMatthew Dillonmkdir /usr/ports.distfiles 2136ed033beSMatthew Dillonmkdir /usr/ports.workdir 2146ed033beSMatthew Dillon.Ed 2156ed033beSMatthew Dillon.Sh BUILDING KERNELS 2166ed033beSMatthew DillonHere is how you build a -stable kernel (on your main development box). 2176ed033beSMatthew DillonIf you want to create a custom kernel, cp GENERIC to YOURKERNEL and then 2186ed033beSMatthew Dillonedit it before configuring and building. The kernel configuration file 2196ed033beSMatthew Dillonlives in /usr/src/sys/i386/conf/KERNELNAME. 2206ed033beSMatthew Dillon.Bd -literal -offset 4n 2216ed033beSMatthew Dilloncd /usr/src 2226ed033beSMatthew Dillonmake buildkernel KERNCONF=KERNELNAME 2236ed033beSMatthew Dillon.Ed 2246ed033beSMatthew Dillon.Pp 2256ed033beSMatthew DillonWARNING! If you are familiar with the old config/cd/make method of building 2266ed033beSMatthew Dillona -stable kernel, note that the config method will put the build 2276ed033beSMatthew Dillonenvironment in /usr/src/sys/compile/KERNELNAME instead of in /usr/obj. 2286ed033beSMatthew Dillon.Pp 2296ed033beSMatthew DillonBuilding a -current kernel 2306ed033beSMatthew Dillon.Bd -literal -offset 4n 2316ed033beSMatthew Dilloncd /usr/src2 (on the master server) 2326ed033beSMatthew Dillonmake buildkernel KERNCONF=KERNELNAME 2336ed033beSMatthew Dillon.Ed 2346ed033beSMatthew Dillon.Sh INSTALLING KERNELS 2356ed033beSMatthew DillonInstalling a -stable kernel (typically done on a client. Only do this on 2366ed033beSMatthew Dillonyour main development server if you want to install a new kernel for 2376ed033beSMatthew Dillonyour main development server): 2386ed033beSMatthew Dillon.Bd -literal -offset 4n 2396ed033beSMatthew Dilloncd /usr/src/sys/compile/KERNELNAME 2406ed033beSMatthew Dillonmake install 2416ed033beSMatthew Dillon.Ed 2426ed033beSMatthew Dillon.Pp 2436ed033beSMatthew DillonInstalling a -current kernel (typically done only on a client) 2446ed033beSMatthew Dillon.Bd -literal -offset 4n 2456ed033beSMatthew Dillon(remember /usr/src is pointing to the client's specific environment) 2466ed033beSMatthew Dilloncd /usr/src 2476ed033beSMatthew Dillonmake installkernel KERNCONF=KERNELNAME 2486ed033beSMatthew Dillon.Ed 2496ed033beSMatthew Dillon.Sh BUILDING THE WORLD 2506ed033beSMatthew DillonThis environment is designed such that you do all builds on the master server, 2516ed033beSMatthew Dillonand then install from each client. You can do builds on a client only 2526ed033beSMatthew Dillonif /usr/obj is local to that client. Building the world is easy: 2536ed033beSMatthew Dillon.Bd -literal -offset 4n 2546ed033beSMatthew Dilloncd /usr/src 2556ed033beSMatthew Dillonmake buildworld 2566ed033beSMatthew Dillon.Ed 2576ed033beSMatthew Dillon.Pp 2586ed033beSMatthew DillonIf you are on the master server you are running in a -stable environment, but 2596ed033beSMatthew Dillonthat does not prevent you from building the -current world. Just cd into the 2606ed033beSMatthew Dillonappropriate source directory and you are set. Do not accidently install it 2616ed033beSMatthew Dillonon your master server though! 2626ed033beSMatthew Dillon.Bd -literal -offset 4n 2636ed033beSMatthew Dilloncd /usr/src2 2646ed033beSMatthew Dillonmake buildworld 2656ed033beSMatthew Dillon.Ed 2666ed033beSMatthew Dillon.Sh INSTALLING THE WORLD 2676ed033beSMatthew DillonYou can build on your main development server and install on clients. 2686ed033beSMatthew DillonThe main development server must export /FreeBSD and /usr/obj via 2696ed033beSMatthew Dillonread-only NFS to the clients. 2706ed033beSMatthew Dillon.Pp 2716ed033beSMatthew DillonNOTE!!! If /usr/obj is a softlink on the master server, it 2726ed033beSMatthew Dillonmust also be the EXACT SAME softlink on each client. If /usr/obj is a 2736ed033beSMatthew Dillondirectory in /usr or a mount point on the master server, then it must 2746ed033beSMatthew Dillonbe (interchangeably) a directory in /usr or a mount point on each client. 2756ed033beSMatthew DillonThis is because the 2766ed033beSMatthew Dillonabsolute paths are expected to be the same when building the world as when 2776ed033beSMatthew Dilloninstalling it, and you generally build it on your main development box 2786ed033beSMatthew Dillonand install it from a client. If you do not setup /usr/obj properly you 2796ed033beSMatthew Dillonwill not be able to build on machine and install on another. 2806ed033beSMatthew Dillon.Bd -literal -offset 4n 2816ed033beSMatthew Dillon(ON THE CLIENT) 2826ed033beSMatthew Dillon(remember /usr/src is pointing to the client's specific environment) 2836ed033beSMatthew Dilloncd /usr/src 2846ed033beSMatthew Dillonmake installworld 2856ed033beSMatthew Dillon.Ed 2866ed033beSMatthew Dillon 2876ed033beSMatthew Dillon.Sh DOING DEVELOPMENT ON A CLIENT (NOT JUST INSTALLING) 2886ed033beSMatthew DillonDevelopers often want to run buildkernel's or buildworld's on client 2896ed033beSMatthew Dillonboxes simply to life-test the box. You do this in the same manner that 2906ed033beSMatthew Dillonyou buildkernel and buildworld on your master server. All you have to 2916ed033beSMatthew Dillondo is make sure that /usr/obj is pointing to local storage. If you 2926ed033beSMatthew Dillonfollowed my advise and made /usr/obj its own partition on the master server, 2936ed033beSMatthew Dillonthen it is typically going to be an NFS mount on the client. Simply 2946ed033beSMatthew Dillonunmounting /usr/obj will leave you with a /usr/obj that is a subdirectory 2956ed033beSMatthew Dillonin /usr which is typically local to the client. You can then do builds 2966ed033beSMatthew Dillonto your heart's content! 2976ed033beSMatthew Dillon 2986ed033beSMatthew Dillon.Sh MULTIPLE VERSIONS OF THE SOURCE TREE 2996ed033beSMatthew DillonI have described how to maintain two versions of the source tree, a stable 3006ed033beSMatthew Dillonversion in /FreeBSD/FreeBSD-4.x and a current version 3016ed033beSMatthew Dillonin /FreeBSD/FreeBSD-current. There is absolutely nothing preventing you 3026ed033beSMatthew Dillonfrom breaking out other versions of the source tree 3036ed033beSMatthew Dilloninto /FreeBSD/XXX. In fact, my /FreeBSD partition also contains OpenBSD, 3046ed033beSMatthew DillonNetBSD, and various flavors of Linux. You may not necessarily be able to 3056ed033beSMatthew Dillonbuild non-FreeBSD operating systems on your master server, but being able 3066ed033beSMatthew Dillonto collect and manage source distributions from a central server is a very 3076ed033beSMatthew Dillonuseful thing to be able to do and you can certainly export to machines 3086ed033beSMatthew Dillonwhich can build those other operating systems. 3096ed033beSMatthew Dillon 3106ed033beSMatthew Dillon.Sh UPDATING VIA CVS 3116ed033beSMatthew DillonThe advantage of using cvsup to maintain an updated copy of the CVS 3126ed033beSMatthew Dillonrepository instead of using it to maintain source trees directly is that you 3136ed033beSMatthew Dilloncan then pick and choose when you bring your source tree (or pieces of your 3146ed033beSMatthew Dillonsource tree) up to date. By using a cron job to maintain an updated 3156ed033beSMatthew DillonCVS repository, you can update your source tree at any time without any 3166ed033beSMatthew Dillonnetwork cost as follows: 3176ed033beSMatthew Dillon.Bd -literal -offset 4n 3186ed033beSMatthew Dillon(on the main development server) 3196ed033beSMatthew Dilloncd /usr/src 3206ed033beSMatthew Dilloncvs -d /home/ncvs update 3216ed033beSMatthew Dilloncd /usr/src2 3226ed033beSMatthew Dilloncvs -d /home/ncvs update 3236ed033beSMatthew Dilloncd /usr/ports 3246ed033beSMatthew Dilloncvs -d /home/ncvs update 3256ed033beSMatthew Dillon.Ed 3266ed033beSMatthew Dillon.Pp 3276ed033beSMatthew DillonIt is that simple, and since you are exporting the whole lot to your 3286ed033beSMatthew Dillonclients, your clients have immediately visibility into the updated 3296ed033beSMatthew Dillonsource. Maintaining the CVS repository also gives you far more flexibility 3306ed033beSMatthew Dillonin regards to breaking out multiple versions of the source tree. It 3316ed033beSMatthew Dillonis a good idea to give your /FreeBSD partition a lot of space (I recommend 3326ed033beSMatthew Dillon8-12GB) precisely for that reason. If you can make it 15GB I would do it. 3336ed033beSMatthew Dillon.Pp 3346ed033beSMatthew DillonI generally do not cvs update via a cron job. This is because I generally 3356ed033beSMatthew Dillonwant the source to not change out from under me when I am developing code. 3366ed033beSMatthew DillonInstead I manually update the source every so often... when I feel it's 3376ed033beSMatthew Dillona good time. My recommendation is to only keep the cvs repository 3386ed033beSMatthew Dillon synchronized via cron. 3396ed033beSMatthew Dillon.Sh SEE ALSO 3406ed033beSMatthew Dillon.Xr tuning 8 , 3416ed033beSMatthew Dillon.Xr firewall 8 , 3426ed033beSMatthew Dillon.Xr diskless 8 3436ed033beSMatthew Dillon.Sh HISTORY 3446ed033beSMatthew DillonThe 3456ed033beSMatthew Dillon.Nm 3466ed033beSMatthew Dillonmanual page was originally written by 3476ed033beSMatthew Dillon.An Matthew Dillon 3486ed033beSMatthew Dillonand first appeared 3496ed033beSMatthew Dillonin 3506ed033beSMatthew Dillon.Fx 4.8/5.0 , 3516ed033beSMatthew DillonDecember 2002. 352