Table of Contents
To read the NetBSD sources from your local disk or to build the system or parts of it, you need to download the NetBSD sources. This chapter explains how to get the NetBSD source using a number of different ways, although the preferred one is to get the tarballs and then update via cvs(1).
Kernel and userland sources are usually placed in
/usr/src
. This directory is not present by
default in the NetBSD installation and you will need to create it
first. As it is in a system directory, you will need root access
to create the directory and make sure your normal user account
can write to it. For demonstration purposes, it is assumed that
the non-root login is carlo
.
Please replace it with a valid login name on your system:
$
su
Password:*****
#
mkdir /usr/src
#
chown
<carlo>
/usr/src
Also, if you want X11R6 sources, you can prepare
/usr/xsrc
:
#
mkdir /usr/xsrc
#
chown
<carlo>
/usr/xsrc
Please note that for the subsequent steps, root access is neither needed nor recommended, so this preparation step should be done first. All CVS operations can (and should) be done as normal user and you don't need root privileges any more:
#
exit
$
Before starting to fetch or download the required files, you may want to know the definitions of “Formal releases”, “Maintenance branches” and other related terms. That information is available under the NetBSD release glossary and graphs.
It is sometimes faster to download a tarball and then continue updating with cvs(1). You can download tarballs (see tar(1)) from ftp.NetBSD.org (or any other mirror) for a number of releases or branches.
The only drawback is that the tarballs are updated less often. Normally, every three days.
Also, please note that these tarballs include the
CVS
directories, so you can download them
and then update your source tree using cvs(1), as explained
in the CVS section.
The tarball files for the sources of a specific release are
available under
/pub/NetBSD/NetBSD-
on ftp.NetBSD.org (or a mirror),
where <RELEASE-NUMBER>
/source/sets/<RELEASE-NUMBER>
is the release you want to
fetch (for example, 4.0).
To fetch the sources of a NetBSD release using tarballs, simply do:
$
ftp -i ftp://ftp.NetBSD.org/pub/NetBSD/NetBSD-4.0/source/sets/
Trying 2001:4f8:4:7:2e0:81ff:fe21:6563... Connected to ftp.NetBSD.org. 220 ftp.NetBSD.org FTP server (NetBSD-ftpd 20070809) ready. 331 Guest login ok, type your name as password. [...] 250 CWD command successful. 250 CWD command successful. 250 CWD command successful. ftp>mget *.tgz
local: gnusrc.tgz remote: gnusrc.tgz 229 Entering Extended Passive Mode (|||58302|) 150 Opening BINARY mode data connection for 'gnusrc.tgz' (79233899 bytes). [...] ftp>quit
221- Data traffic for this session was 232797304 bytes in 5 files. Total traffic for this session was 232803039 bytes in 6 transfers. 221 Thank you for using the FTP service on ftp.NetBSD.org.
You should now have 5 files:
$
ls *.tgz
gnusrc.tgz sharesrc.tgz src.tgz syssrc.tgz xsrc.tgz
You now must extract them all:
$
foreach file (*.tgz)
?tar -xzf $file -C /usr/src
?end
$
ftp -i ftp://ftp.NetBSD.org/pub/NetBSD/NetBSD-release-4-0/tar_files/src/
Trying 2001:4f8:4:7:2e0:81ff:fe21:6563... Connected to ftp.NetBSD.org. 220 ftp.NetBSD.org FTP server (NetBSD-ftpd 20070809) ready. 331 Guest login ok, type your name as password. [...] 250 CWD command successful. 250 CWD command successful. 250 CWD command successful. 250 CWD command successful. ftp>mget *.tar.gz
local: bin.tar.gz remote: bin.tar.gz 229 Entering Extended Passive Mode (|||56011|) 150 Opening BINARY mode data connection for 'bin.tar.gz' (914202 bytes). [...] ftp>quit
221- Data traffic for this session was 149221420 bytes in 22 files. Total traffic for this session was 149231539 bytes in 23 transfers. 221 Thank you for using the FTP service on ftp.NetBSD.org.
You should now have 22 files:
$
ls *.tar.gz
bin.tar.gz doc.tar.gz libexec.tar.gz tools.tar.gz config.tar.gz etc.tar.gz regress.tar.gz top-level.tar.gz contrib.tar.gz games.tar.gz rescue.tar.gz usr.bin.tar.gz crypto.tar.gz gnu.tar.gz sbin.tar.gz usr.sbin.tar.gz dist.tar.gz include.tar.gz share.tar.gz distrib.tar.gz lib.tar.gz sys.tar.gz
You now must extract them all:
$
foreach file (*.tar.gz)
?tar -xzf $file -C /usr/src
?end
To download the NetBSD-current tarballs, located under
/pub/NetBSD/NetBSD-current/tar_files/src
,
just follow the same steps as in the previous section, but
now on a different directory.
You may also want to fetch the X11R6 source, available under:
/pub/NetBSD/NetBSD-current/tar_files/xsrc
.
CVS (Concurrent Versions System) can be used to fetch the NetBSD source tree or to keep the NetBSD source tree up to date with respect to changes made to the NetBSD sources. There are three trees maintained for which you can use cvs(1) to obtain them or keep them up to date:
The list of currently maintained branches is available under
src/doc/BRANCHES
(see the
“Status” entry on “Release branches”
section).
Before you can do an initial (full) checkout of the NetBSD sources via anonymous CVS, you first have to set some environment variables. For the C-Shell, type:
$
setenv CVS_RSH ssh
$
setenv CVSROOT anoncvs@anoncvs.NetBSD.org:/cvsroot
Or, the same for the bourne shell:
$
export CVS_RSH="ssh"
$
export CVSROOT="anoncvs@anoncvs.NetBSD.org:/cvsroot"
We will also use the -P
option in the examples
below since it is used to prune empty directories.
A release is a set of particular versions of source files, and once released does not change over time.
To get the NetBSD (kernel and userland) sources from a specific release, run the following command after the preparations done above:
$
cd /usr
$
cvs checkout -r
<BRANCH>
-P src
Where <BRANCH>
is the
release branch to be checked out, for example,
“netbsd-3-1-RELEASE” or
“netbsd-4-0-RELEASE”. If you want to
fetch a different patchlevel, you would use
“netbsd-3-0-1-RELEASE” or
“netbsd-3-0-2-RELEASE”.
For example, in order to fetch “netbsd-4-0-RELEASE” you would use:
$
cvs checkout -r netbsd-4-0-RELEASE -P src
To fetch the X11R6 source, just “checkout” the “xsrc” module. For example:
$
cvs checkout -r netbsd-4-0-RELEASE -P xsrc
NetBSD stable branches are also called “Maintenance branches”. Please consult the Section 29.2, “Terminology”.
If you want to follow a stable branch, just pass the
branch name to the cvs(1) -r
option.
For example, if you want to fetch the most recent version of “netbsd-4”, you just need to use that tag:
$
cd /usr
$
cvs checkout -r netbsd-4 -P src
And for the “xsrc” module:
$
cvs checkout -r netbsd-4 -P xsrc
If you have checked out sources from a stable branch in
/usr/src
and want
to update them to get the latest security-fixes and bug-fixes,
run:
$
cd /usr/src
$
cvs update -Pd
The same applies to the “xsrc” module, but in
that case you will have to change your working directory to
/usr/xsrc
first.
Be sure to take care in selecting the correct and desired branch tag so you don't accidently downgrade your source tree.
To obtain the NetBSD-current source just omit
“-r
<BRANCH>
”
and replace it by “-A
”:
$
cd /usr
$
cvs checkout -A -P src
The “xsrc” is also available:
$
cd /usr
$
cvs checkout -A -P xsrc
To update your NetBSD-current source tree, add the
-A
flag:
$
cd /usr/src
$
cvs update -A -Pd
If you find yourself typing some options to cvs over and over
again, you can as well put them into a file
.cvsrc
in your home directory.
It is useful for just typing
cvs update on a directory with a branch
checked out to update it (adding -A
would revert
the branch to the -current branch, which is not what one usually
wants!), For unified diffs, transfers should be compressed and
“cvs update” should be mostly quiet:
If you prefer to download (and maybe burn) a CD-ROM image
with the NetBSD source, just fetch
sourcecd-
from ftp.NetBSD.org or any other mirror.<RELEASE-NUMBER>
.iso
The sourcecd-
file is located under /pub/NetBSD/iso/<RELEASE-NUMBER>
.iso<RELEASE>
,
where <RELEASE-NUMBER>
is a release of NetBSD, for example,
3.1 or 4.0:
ftp://ftp.NetBSD.org/pub/NetBSD/iso/3.1/sourcecd-3.1.iso ftp://ftp.NetBSD.org/pub/NetBSD/iso/4.0/sourcecd-4.0.iso
The next step is to burn the ISO image or mount it with the help of vnconfig(8). Please see Chapter 13, Using removable media as it explains in detail how to do it.
Assuming you have mounted the CD under
/mnt
, /mnt/source/sets
should have everything you need to extract:
$
ls /mnt/source/sets
BSDSUM MD5 gnusrc.tgz src.tgz xsrc.tgz CKSUM SYSVSUM sharesrc.tgz syssrc.tgz
All tarballs should be extracted to the root file system
(/
). The following command will do it:
$
foreach file (*.tgz)
?tar -xzf $file -C /
?end
After that, you should have /usr/src
and /usr/xsrc
populated with the NetBSD
sources.