DragonFly BSD

environmentquickstart

DragonFly BSD Quick Start

This document describes the DragonFly environment one will find on a newly installed system.

Disk layout

If you chose to install on the HAMMER file system during installation you will be left with a system with the following disk configuration:

# df -h
Filesystem                Size   Used  Avail Capacity  Mounted on
ROOT                      288G    12G   276G     4%    /
devfs                     1.0K   1.0K     0B   100%    /dev
/dev/serno/9VMBWDM1.s1a   756M   138M   558M    20%    /boot
/pfs/@@-1:00001           288G    12G   276G     4%    /var
/pfs/@@-1:00002           288G    12G   276G     4%    /tmp
/pfs/@@-1:00003           288G    12G   276G     4%    /usr
/pfs/@@-1:00004           288G    12G   276G     4%    /home
/pfs/@@-1:00005           288G    12G   276G     4%    /usr/obj
/pfs/@@-1:00006           288G    12G   276G     4%    /var/crash
/pfs/@@-1:00007           288G    12G   276G     4%    /var/tmp
procfs                    4.0K   4.0K     0B   100%    /proc

In this example

The disklabel looks at follows

# disklabel /dev/serno/9VMBWDM1.s1

# /dev/serno/9VMBWDM1.s1:
#
# Informational fields calculated from the above
# All byte equivalent offsets must be aligned
#
# boot space:    1044992 bytes
# data space:  312567643 blocks # 305241.84 MB (320069266944 bytes)
#
# NOTE: If the partition data base looks odd it may be
#       physically aligned instead of slice-aligned
#
diskid: e67030af-d2af-11df-b588-01138fad54f5
label:
boot2 data base:      0x000000001000
partitions data base: 0x000000100200
partitions data stop: 0x004a85ad7000
backup label:         0x004a85ad7000
total size:           0x004a85ad8200    # 305242.84 MB
alignment: 4096
display block size: 1024        # for partition display only

16 partitions:
#          size     offset    fstype   fsuuid
  a:     786432          0    4.2BSD    #     768.000MB
  b:    8388608     786432      swap    #    8192.000MB
  d:  303392600    9175040    HAMMER    #  296281.836MB
  a-stor_uuid: eb1c8aac-d2af-11df-b588-01138fad54f5
  b-stor_uuid: eb1c8aec-d2af-11df-b588-01138fad54f5
  d-stor_uuid: eb1c8b21-d2af-11df-b588-01138fad54f5

The slice has 3 partitions:

When you create a HAMMER file system you must give it a label, here the installer labeled it as "ROOT" and mounted it as

ROOT                      288G    12G   276G     4%    /

A PFS is a Pseudo File System inside a HAMMER file system. The HAMMER file system in which the PFSes are created is referred to as the root file system. You should not confuse the "root" file system with the Label "ROOT", the label can be anything. It is just that the installer labeled it as ROOT because it is mounted as /.

Now inside the ROOT HAMMER file system you find the installed created 7 PFSes from the df -h output above, let us see how they are mounted in /etc/fstab:

# cat /etc/fstab

# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/serno/9VMBWDM1.s1a         /boot           ufs     rw      1       1
/dev/serno/9VMBWDM1.s1b         none            swap    sw      0       0
/dev/serno/9VMBWDM1.s1d         /               hammer  rw      1       1
/pfs/var                /var            null    rw              0       0
/pfs/tmp                /tmp            null    rw              0       0
/pfs/usr                /usr            null    rw              0       0
/pfs/home               /home           null    rw              0       0
/pfs/usr.obj    /usr/obj                null    rw              0       0
/pfs/var.crash  /var/crash              null    rw              0       0
/pfs/var.tmp    /var/tmp                null    rw              0       0
proc                    /proc           procfs  rw              0       0

The PFSes are mounted using a NULL mount because they are also HAMMER file systems. You can read more on NULL mounts here mount_null(8).

You don't need to specify a size for the PFSes like you do for logical volumes inside a volume group for LVM. All the free space in the root HAMMER file system is available to all the PFSs. That is the reason in the df -h output above you saw free space is same for all PFSes and the root HAMMER file system.

Now if you look in /var

# cd /var/
# ls
account   backups   caps   cron    empty   log   msgs   run   spool   yp  at        
cache     crash     db     games   lib     mail  preserve   rwho  tmp

you will find the above directories.

If you look at the status of one of the PFSes, e.g. /usr you will see /var/hammer is the default snapshot directory.

# hammer pfs-status /usr/
/usr/   PFS #3 {
    sync-beg-tid=0x0000000000000001
    sync-end-tid=0x0000000117ac6270
    shared-uuid=f33e318e-d2af-11df-b588-01138fad54f5
    unique-uuid=f33e31cb-d2af-11df-b588-01138fad54f5
    label=""
    prune-min=00:00:00
    operating as a MASTER
    snapshots directory defaults to /var/hammer/<pfs>
}

There is no "hammer" directory in /var now. That is because no snapshots are yet taken. You can verify this by checking the snapshots available for /usr

# hammer snapls /usr
Snapshots on /usr       PFS #3
Transaction ID          Timestamp               Note

The best way to take a snapshot of all PFSes is to run the command hammer cleanup. It does a lot of things but the fist thing it does during cleanup of a PFS is to take its snapshots as configured.

# sudo hammer cleanup
cleanup /                    - HAMMER UPGRADE: Creating snapshots
        Creating snapshots in /var/hammer/root
 handle PFS #0 using /var/hammer/root
           snapshots - run
               prune - run
           rebalance - run..
             reblock - run....
              recopy - run....
cleanup /var                 - HAMMER UPGRADE: Creating snapshots
[...]
cleanup /tmp                 - HAMMER UPGRADE: Creating snapshots
[...]
cleanup /usr                 - HAMMER UPGRADE: Creating snapshots
[...]
cleanup /home                - HAMMER UPGRADE: Creating snapshots
[...]
cleanup /usr/obj             - HAMMER UPGRADE: Creating snapshots
[...]
cleanup /var/crash           - HAMMER UPGRADE: Creating snapshots
[...]
cleanup /var/tmp             - HAMMER UPGRADE: Creating snapshots
[...]
cleanup /var/isos            - HAMMER UPGRADE: Creating snapshots
[...]

No snapshots were taken for /tmp, /usr/obj and /var/tmp. This is because the PFSes are flagged as nohistory. HAMMER tracks history for all files in a PFS, naturally this consumes disk space until the history is pruned. To prevent that temporary files on the mentioned PFSes (e.g., object files, crash dumps) consume disk space, the PFSes are marked as nohistory.

In /var will be a new directory called hammer with the following sub directories

# cd hammer/
# ls -l
total 0
drwxr-xr-x  1 root  wheel  0 Oct 13 11:51 home
drwxr-xr-x  1 root  wheel  0 Oct 13 11:42 root
drwxr-xr-x  1 root  wheel  0 Oct 13 11:43 tmp
drwxr-xr-x  1 root  wheel  0 Oct 13 11:51 usr
drwxr-xr-x  1 root  wheel  0 Oct 13 11:54 var

Well let us look inside /var/hammer/usr

# cd usr/
# ls -l
total 0
drwxr-xr-x  1 root  wheel   0 Oct 13 11:54 obj
lrwxr-xr-x  1 root  wheel  25 Oct 13 11:43 snap-20101013-1143 -> /usr/@@0x0000000117ac6cb0

We have a symlink pointing to the snapshot transaction ID shown below.

# hammer snapls /usr
Snapshots on /usr       PFS #3
Transaction ID          Timestamp               Note
0x0000000117ac6cb0      2010-10-13 11:43:04 IST -
#

You can read more about snapshots, prune, reblance, reblock, recopy etc from hammer(8) especially look under the heading "cleanup [filesystem ...]"

You can learn more about PFS mirroring here

In order to correctly map hard disk sernos to device names you can use the 'devattr' command.

# udevd
# devattr -d "ad*" -p serno
Device ad4:
        serno = Z2AD9WN4
Device ad4s1:
Device ad4s1d:

Device ad5:
        serno = 9VMRFDSY
Device ad5s1:
Device ad5s1d:

Device ad3:
        serno = Z2AD9WLW
Device ad3s1:
Device ad3s1a:
Device ad3s1b:
Device ad3s1d:

Or if your disks are 'da', just change it as appropiate.

Configuring and Starting the SSH Server

Described in detail here

Software/Programs and Configuration Files Location

DragonFly default installation contains the base software/programs from the DragonFly project itself and few other software from pkgsrc which is the DragonFly official package management system. Ready to install binary software from pkgsrc is referred to as packages.

The base programs are located in the folders

/bin    /sbin
/usr/bin   /usr/sbin

The configuration files for the base system can be found in /etc. There is also /usr/local/etc which is used by third-party programs. The software/programs from pkgsrc are located in /usr/pkg/bin and /usr/pkg/sbin. Their configuration files are found in /usr/pkg/etc.

Installing Third-party Software

Have a look at the pkgsrc howto for an in-depth description about dealing with third-party pkgsrc packages.

Using pkgin

For those who are new to the DragonFly way of doing things can also have the Debian's apt like way of installing, removing and updating packages. pkgin does things similar to apt-get or aptitude or yum for that matter.

First we need to configure pkgin to use a repository which contains the pkgsrc binary packages. For this example we will use the main DragonFly server. Note: Be sure to use a local mirror for better performance and to reduce load on the main servers. From 3.0 onward this entry should already be there.

# echo "http://mirror-master.dragonflybsd.org/packages/$arch/DragonFly-$osrelease/stable/All/" > \   
         /usr/pkg/etc/pkgin/repositories.conf

Now to update pkgin with the list of latest packages available from that repository.

# pkgin update
cleaning database from
http://mirror-master.dragonflybsd.org/packages/i386/DragonFly-2.8.2/stable/All/
entries...
downloading pkg_summary.bz2: 100%
processing remote summary
(http://mirror-master.dragonflybsd.org/packages/i386/DragonFly-2.8.2/stable/All/)...
updating database: 100%

Now to upgrade packages that are already installed in the system

# pkgin full-upgrade
6 packages to be upgraded: freetype2-2.3.12 gtar-info-1.22
openldap-client-2.4.21 png-1.4.2 python26-2.6.5 tiff-3.9.4
1 packages to be removed: asciidoc-8.6.1
6 packages to be installed: png-1.4.3 python26-2.6.5nb1 tiff-3.9.4nb1
freetype2-2.4.2 gtar-info-1.23 openldap-client-2.4.23 (15M to
download, 59M to install)
proceed ? [y/N] y
downloading packages...
downloading png-1.4.3.tgz: 100%
downloading python26-2.6.5nb1.tgz: 100%
downloading tiff-3.9.4nb1.tgz: 100%
downloading freetype2-2.4.2.tgz: 100%
downloading gtar-info-1.23.tgz: 100%
downloading openldap-client-2.4.23.tgz: 100%
.....

In order to search for a new package, for example rdesktop.

# pkgin search rdesktop
rdesktop-1.6.0 =     Open-source Remote Desktop Protocol client
tsclient-0.132nb25   GNOME2 Frontend for rdesktop

=: package is installed and up-to-date
<: package is installed but newer version is available
>: installed package has a greater version than available package

To search for a package and install it you can do the following. If there are different versions of the package available in the repository it will show you the list and you need to specify one from them explicitly. At the end of the installation it will show you a message if you need any further configuration for the software to work in a particular way.

# pkgin search mysql-client
mysql-client-4.1.22nb4  MySQL 4, a free SQL database (client)
mysql-client-5.0.91  MySQL 5, a free SQL database (client)
mysql-client-5.1.49  MySQL 5, a free SQL database (client)

=: package is installed and up-to-date
<: package is installed but newer version is available
>: installed package has a greater version than available package

# pkgin install mysql-client
there's more than one version available for this package.
please re-run pkgin with a package name matching one of the following:
mysql-client-4.1.22nb4
mysql-client-5.0.91
mysql-client-5.1.49
nothing to do.

# pkgin install mysql-client-5.1.49
calculating dependencies for mysql-client-5.1.49...
nothing to upgrade. 
1 packages to be installed: mysql-client-5.1.49 (7620K to download, 24M to install)
proceed ? [y/N] y
downloading packages...
downloading mysql-client-5.1.49.tgz: 100%
installing packages...
installing mysql-client-5.1.49...
[...]
processing local summary...
updating database: 100%
marking mysql-client-5.1.49 as non auto-removable

To remove a package

# pkgin remove mysql-client
1 packages to delete: mysql-client-5.1.49
proceed ? [y/N] y
removing mysql-client-5.1.49...
processing local summary...
updating database: 100%

pkgin is very similar to apt-get, aptitude , yum, emerge, pacman and friends in the Linux world.

All the pkgin commands can be seen here. pkgin comes installed with the default DragonFly install so you can skip the installation part on that page.

To install a desktop you can read the following Other Docs can be found here.