# NetBSD

# Storage

# Managing LVM

# raw device is important, if not set like this, you'll have an error.
lvm pvcreate /dev/rwd0e
lvm vgcreate store /dev/rwd0e
for i in home src pkgsrc pkg
do
  lvm lvcreate -n $i -L10G store
  if [ "$i" = home] 
  then
    echo "/dev/mapper/store-$i /home ffs rw 0 0" >> /etc/fstab
  elif [ "$i" = pkgsrc ] || [ "$i" = src ] || [ "$i" = pkg ]
  then
    echo "/dev/mapper/store-$i /usr/$i rw 0 0" >> /etc/fstab
  fi
done

mount -a
lvm lvextend -L +50G /dev/vg/lv
umount /dev/vg/lv
resize_ffs /dev/vg/lv
mount /dev/vg/lv

# Managing GPT

dd if=/dev/zero of=/dev/device count=1 bs=1024
gpt create /dev/device
gpt add -i1 -llabel /dev/device

netbsd has a static representation of harddrive and partition. You need to use dkctl to create a new wedge.

dkctl /dev/device addwedge storage 34 976773101 $partition_type

argument 34 (start partition) and 976773101 (partition size) can be find with gpt show /dev/device.

# FAQ

# How to initialize repository?

cd /usr
cvs -z3 -danoncvs@anoncvs.fr.netbsd.org:/cvsroot co -Prnetbsd-7-0  src
cd /usr
cvs -z3 -danoncvs@anoncvs.fr.netbsd.org:/cvsroot co -Pr2016Q3 pkgsrc

# How to set kernel options?

list of kernel options with description are available in options (opens new window) man page.

# How to build a Generic kernel?

cd /usr/src/sys/arch/amd64/conf
config GENERIC
cd ../../GENERIC
make depend
make

or by using build.sh

cd /usr/src
./build.sh -O /usr/obj -T /usr/tools kernel=GENERIC

# How to build a Xen kernel?

cd /usr/src/sys/arch/amd64/
config XEN_DOM0
cd ../compile/XEN_DOM0
make depend
make
make install

# How to build world?

cd /usr/src
./build.sh -T /usr/tools -O /usr/obj build
./build.sh -T /usr/tools -O /usr/obj release
./build.sh -T /usr/tools -O /usr/obj install

# How to crossbuild a system

cd /usr/src
./build.sh -a $ARCH -T /usr/tools/$ARCH -O /usr/obj/$ARCH build

# How to use pkgsrc?

cd /usr/pkgsrc/bootstrap
./bootstrap
cd /usr/pkgsrc/sysutils/xentools46
make

# How to find a package in pkgsrc?

# How to add a flavor?

Here an example with asterisk.

cd /usr/pkgsrc/comms/asterisk

# show options list
make show-options

# add new options in mk.conf for asterisk 
echo 'PKG_OPTIONS.asterisk= ldap' >> /etc/mk.conf

# make it
make

# How to compile without X11?

echo "PKG_OPTIONS = -x11" >> /etc/mk.conf

# How to install SSL Certificate Authorities?

by default netbsd doesn't support any Certificate Authority. If you want root certificate, you can download it manually (see openssl faq) or using mozilla certificate from pkgsrc:

cd /usr/pkgsrc/security/mozilla-rootcerts
make
make install
mozilla-rootcerts install

# How to activate /etc/rc.conf.local?

if [ -r /etc/rc.conf.local ]; then
        . /etc/rc.conf.local
fi

# How to print script starting order?

rcorder /etc/rc.d/*
service -lv

# How to enable services?

service -e

# How to create an init script?

touch /etc/rc.d/nsd
chmod +x /etc/rc.d/nsd
#!/bin/sh

# PROVIDE: nsd
# REQUIRE: DAEMON
# BEFORE:  LOGIN
# KEYWORD: chrootdir

$_rc_subr_loaded . /etc/rc.subr

name="nsd"
rcvar=$name
command="/usr/pkg/sbin/${name}"
pidfile="/var/nsd/run/${name}.pid"
required_files="/var/nsd/etc/nsd.conf"

_check_conf() {
  ${command}-checkconf -f ${required_files}
}

nsd_precmd() {
  _check_conf
}

load_rc_config $name
run_rc_command "$1"

# How to create a rump kernel?

MODULES_PATH="/stand/amd64/7.0/modules"
rump_server -lrumpvfs -m ${MODULES_PATH}/tmpfs/tmpfs.kmod unix://sock
export RUMP_SERVER=unix://sock
rump.sysctl -a
rump.halt

# How to execute a command in rump kernel?

MODULES_PATH="/stand/amd64/7.0/modules"
rump_server -lrumpvfs -m ${MODULES_PATH}/tmpfs/tmpfs.kmod unix://sock
export RUMP_SERVER=unix://sock

# loading hijack library
export LD_PRELOAD=/usr/lib/librumphijack.so

# you can now execute everything on rump kernel
# if you are in rump kernel, you can find /rump:
ls /rump

# else, you have an error "not found"
export LD_PRELOAD=""
ls /rump

# in our case, if you have load tmp, you'll find
# /rump/tmp mounted, you can create some files on it
touch /rump/tmp/test
dd if=/dev/zero of=/rump/tmp/test bs=16k cound=20

# How to list all available rump library?

#!/usr/bin/env perl

use strict;
use warnings;

my @test = glob("/usr/lib/librump*");
my %hash;
foreach my $lib (@test) {
  $lib =~ s!/usr/lib/lib!!;
  $lib =~ s!\..*$!!;
  $hash{$lib}="";
}

foreach my $key (sort keys %hash) {
  printf("%s\n", $key);
}

# How to create a network dedicated rump kernel?

rump_server -lrumpnet -lrumpnet_local -lrumpnet_net \
            -lrumpnet_virtif -lrumpnet_bridge -lrumpclient \
            -lrumpnet_netinet -lrumpnet_netinet6 -lrumpnet_shmif \
            -m
            unix://sock
export LD_PRELOAD="/usr/lib/librumphijack.so"
rump.ifconfig
rump.ifconfig lo0 alias 127.0.0.2
rump.ifconfig bridge0 create

# How to load a kernel module in rump?

rump_server -lrumpvfs -lrumpclient -m/stand/amd64/7.0/modules/crypto \
            unix://sock

# How to mount a filesystem with rump?

rump_server -lrumpvfs -d "key=/dev/fs,hostpath=/path/to/your/file,size=2m" \
            unix://sock
export LD_PRELOAD="/usr/lib/librumphijack.so"
ls /rump/dev/fs
rump_msdos /rump/dev/fs /home/youruser/your/path
ls /home/youruser/your/path
umount /home/youruser/your/path
RUMP_SERVER=unix://sock rump.halt
export LD_PRELOAD=""

# How to manage network in rump kernel?

# start rump server
export RUMP_SERVER=unix://here
rump_all_server ${RUMP_SERVER}

# create tap0 interface in host kernel
ifconfig tap0 create
ifconfig tap0 alias 10.1.1.1/24

# create virt0 interface in rump kernel
rump.ifconfig virt0 create
rump.ifconfig virt0 alias 10.1.1.2/24

# you can try it!
rump.ping -c 3 10.1.1.1

# add default route
rump.route add default 10.1.1.1

# How to make rump tool suite with debug symbol?

TOOLDIR=/usr/obj/tooldir/
cd /usr/src/usr.bin/rump_server
make clean
make MKDEBUG=yes TOOLDIR=${TOOLDIR}
make install

You can also build all executable tool with debugging symbol.

# How to examine a core file?

gdb rump_server rump_server.core

# References and Resources