DragonFly BSD

HandyHints

Handy hints for DragonFly developers

The following is a "cookbook", of sorts; a listing of common forms of commands for working with a DragonFly system, with brief descriptions of what they each do. They might prove useful to anyone who learns easily from examples.

Note: These items are ported from the bsdinstaller wiki and are basically "a cheat sheet" for common commands. Feel free to add to this list.

Note: A backslash at the end of a line indicates a wrapped line; there is no need to actually type it.

Note: You can type your username instead of whoami where it appears in the following example (since your username is what whoami generates anyway.)

Table of contents

CVS

See also: ?CVS

To check out a copy of the DragonFly sources from your local CVS repository in /home/dcvs:

cvs -d /home/dcvs update -Pd src

or even better, create a ~/.cvsrc file with:

cvs -q
diff -u
update -Pd
checkout -P
rtag -a

To add a bunch of files to CVS at once:

find . \! -path '*/CVS*' | xargs cvs add

To add a (simple, non-branch) tag to an entire module:

cvs rtag THE_TAG_NAME the_module

To slip an existing tag to the HEAD revision of a specific file (be careful!):

cvs tag -F THE_TAG_NAME the_file

To completely remove a tag from a file (again, be careful!):

cvs tag -d THE_TAG_NAME the_file

To perform a "repocopy" (which retains history,) in the repository directory on the server:

cp -p file1,v file2,v

XXX add note that old tags need to be removed/renamed so that the newly copied file appears on other branches.

Leaf

The following hints are intended to be used on the developer machine, leaf.dragonflybsd.org. Obviously, access to leaf requires a leaf account.

See also: ?Volume 4: Resources for DragonFly BSD Developers

Note: When connecting to leaf, be sure to use ssh -A to allow for ssh agent forwarding, so that commits to crater can be performed.

To begin, you probably want a work area that looks like a root filesystem, and a directory that looks like a usr partition:

setenv ROOT $HOME/root
mkdir -p $ROOT/usr && cd $ROOT/usr

Note: You cannot use ~ as a shortcut for $HOME in the above.

To check out DragonFly sources, read-only:

cvs -R -d/cvs checkout -P src
cvs -d crater:/cvs commit

To check out DragonFly sources, read/write:

cvs -d crater:/cvs co src
cvs -d crater:/cvs commit

To build world:

setenv ME `id -nu`
setenv US `id -gn`
env - \
    __MAKE_CONF=/dev/null \
    MAKEOBJDIRPREFIX=$ROOT/usr/obj \
    KERNCONFDIR=/where/you/keep/config/files \
    KERNCONF=YOURCONFIG \
  make buildworld buildkernel

If KERNCONF and KERNCONFDIR are omitted, the GENERIC kernel will be used.

To install world:

env - \
    __MAKE_CONF=/dev/null \
    DESTDIR=$ROOT \
    MAKEOBJDIRPREFIX=$ROOT/usr/obj \
    KERNCONFDIR=/where/you/keep/config/files \
    KERNCONF=YOURCONFIG \
    INSTALL="sh `pwd`/tools/install.sh" \
    BINOWN#$ME BINGRP$US SHAREOWN=$ME SHAREGRP=$US \
  make installworld installkernel

Building Releases

Note that each of these requires a copy of the DragonFly source tree checked out to /usr/src. Everything is done within /usr/src/nrelease, so first:

cd /usr/src/nrelease

To fetch the needed packages for making a release:

make fetchpkgs

To build a release:

make release

If you have built world and kernel recently, you can build a release without rebuilding them:

make realquickrel

Versions of the above commands for building a release with the installer on it:

make installer_fetchpkgs
make installer_release
make installer_realquickrel

To install additional packages on the release:

make release EXTRA_PACKAGES="foo-1.0 bar-2.3e"

To install additional packages after a release has already been made, and regenerate the ISO:

make pkgaddiso EXTRA_PACKAGES="foo-1.0 bar-2.3e" && make mkiso

To remove all packages from the release tree, and regenerate the ISO:

make pkgcleaniso EXTRA_PACKAGES="'*'" && make mkiso

Misc

If you're building from CVS or working on pkgsrc ports, you will want debugging symbols in your DragonFly binaries and so libs. Set STRIP to an empty string in /etc/make.conf to prevent install(1) from stripping symbols at installation time.

STRIP=***

To continue an interrupted buildworld without blowing away your progress so far:

make buildworld -DNOCLEAN
make realquickworld -DNOCLEAN

To delete multiple files listed in a textfile:

xargs rm -rf < README.DELETED

To delete from cvs multiple files listed in a textfile:

xargs rm -rf < README.DELETED
xargs cvs rm -rf < README.DELETED

To preview a manual page without installing it:

nroff -t -man foo.8 | more

Booting options

To boot with both serial and vga: (this is also known to boot with serial only on certain boards)

boot -Dh