FreeBSD:
· Clonezilla supports only UFS (and then not very well), but not ZFS
· system partition can be primary partition only, not logical
· PC-BSD (best) or GhostBSD
Create partitions:
· boot to PC-BSD emergency console
· write down list of existing partitions (/dev/ada0s*, /dev/ada1s*)
· boot in Disk Director or other partitioning tool
o create primary partition for system (unformatted)
o create logical partition for swap (unformatted)
· boot to PC-BSD emergency console, check for new partition /dev/ada* names
·
BSD slice (= BIOS
partition) contains BSD partitions:
a = file system
b = swap space
c = whole enclosing slice
d...h = other partitions
e.g. ada0s10b
Install into primary partition
· remove boot space from system partition
· "install bootable MBR" = false
Create swap and change host name
gpart show -p
bsdlabel /dev/ada1s10 (no label yet)
bsdlabel -w /dev/ada1s10 (create label)
export EDITOR=/usr/local/bin/nano
bsdlabel -e /dev/ada1s10 (edit label, change content from "a" to
"b")
bsdlabel /dev/ada1s10 (view result)
glabel label PCBSD64SWAP /dev/ada1s10b (note "b"!!)
glabel status (or glabel list)
edit /etc/fstab: /dev/label/PCBSD64SWAP none swap sw 0 0
hostname hhh
nano /etc/rc.conf and /etc/hosts
in /etc/rc.conf add dumpdev=... (default is AUTO)
reboot
swapinfo [-h]
swapctl -hl
swapctl -s (or -sh)
pstat -s
vmstat -h
systat
swapon /dev/...
swapoff /dev/...
Desktop
properties -> change fonts size
Applications:
Terminal color scheme setup, Terminal -> panel
AppCafe Firefox, add it to panel
Edit /usr/local/etc/sudoers
add at the very end : sergey ALL=(ALL) NOPASSWD: ALL
Keyboard shortcuts:
gnome-system-monitor (Ctrl+Alt+Del)
Terminal (Ctrl-Alt-T)
Change shell to BASH
chsh -s /usr/local/bin/bash
cp .profile
cp .bashrc
export CLICOLOR=true
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
export EDITOR=`which nano`
Enable telnet and ftp
edit /etc/inetd.conf
edit /etc/rc.conf inetd_enable="YES"
/etc/rc.d/inetd start
/etc/rc.d/inetd reload
add telnet and ftp to Firewall Manager (in Control Panel) and restart firewall
Console:
Scroll Lock
Pg Up (or arrows)
Pg Down
Scroll Lock
reset
clear
Ctrl-L (clears)
Install ports:
portsnap fetch
portsnap extract
portsnap update
cd /usr/ports/converters/unix2dos
make install clean
control panel -> system manager -> tasks -> fetch system source
cd /usr/ports/sysutils/lsof
make install clean
Disable automounts by Nautilus (Gnome)
gnome-mount --display-settings -p WINSWAP
gnome-mount --write-settings -p WINSWAP --mount-options noauto
Enable Linux (before PC-BSD 10, only 32-bit executables):
/etc/rc.conf: linux_enable="YES"
kldstat | grep -i linux
kldload linux
cd /usr/ports/emulators/linux_base-f10
make reinstall distclean
more: http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/linuxemu-lbc-install.html
Install SlickEdit
mount -t msdosfs /dev/da0s1 /mnt
CPU temperature sensors:
kldload coretemp
sysctl -a | grep temperature
Create file system:
newfs ...
to label it: tunefs -L mylabel /dev/...
ls /dev/label
glabel status
glabel list
Tools:
ps aux | alx
list threads: ps -H
top
pgrep
dmesg
systat
pstat
vmstat
iostat
lsof
TODO: USB
automount
Building kernel:
cd /usr/src/sys/amd64-or-i386/conf
cp GENERIC MYKERNEL
alternatively, create and edit MYKERNEL as:
include GENERIC
ident MYKERNEL
options WITNESS
options KDB
options DDB
options GDB
options DDB_NUMSYM
options KDB_TRACE
#options KDB_UNATTENDED
(see next page for more options)
see /usr/sys/conf/NOTES
check /usr/src/UPDATING
cd /usr/src
make buildkernel KERNCONF=MYKERNEL
make installkernel KERNCONF=MYKERNEL
("installkernel" copies kernel to /boot/kernel/kernel; old kernel will be moved to /boot/kernel.old/kernel)
mv /boot/kernel.old /boot/kernel.generic
if does not boot, at loader prompt enter "boot kernel.old" or "kernel.generic"
after booting, check /var/log/messages and dmesg
if running a different version of kernel, utilities like ps and vmstat may fail to work
should rebuild and install world with the same version of the source tree as kernel
Loader:
ls -l path
lsdev -v
lsmod -v
more file
boot -s [-v] => boot single-user
unload
set kernel=kernel.my => /boot/kernel/my/...
boot-conf
boot [-s] [-v]
show [variable]
set variable=value
unset variable
read-conf /boot/my.conf
after booting in single-user prompt, Ctrl-D proceeds to multi-user mode
break to DDB: Ctrl-Alt-Esc or boot -d
Kernel build configuration file
include GENERIC
ident MYKERNEL
# available commands: options/nooptions, device/nodevice, cpu/nocpu
# Build kernel with gdb(1) debug symbols
# default in GENERIC
#makeoptions DEBUG=-g
options WITNESS
options KDB
options DDB
options GDB
options DDB_NUMSYM
# print stack trace on panic
# can also be enabled dynamically by sysctl debug.trace_on_panic=1
options KDB_TRACE
# on panic break into debugger
# can also be enabled dynamically by sysctl debug.debugger_on_panic=1
#options KDB_UNATTENDED
# on witness check failure enter debugger (other than printing message)
# can also be enabled dynamically by sysctl debug.witness.kdb=1
#options WITNESS_KDB
# Enable extra checks
options INVARIANT_SUPPORT
options INVARIANTS
# Enable extra-extra checks
options DIAGNOSTIC
# track VNODE locks
options DEBUG_VFS_LOCKS
# debug memory kernel corruption, see memguard (9) and
redzone (9)
# will also need to configure vm.memguard.* in /boot/loader.conf or via sysctl
option DEBUG_MEMGUARD
option DEBUG_REDZONE
# extra assertions for network protocols
#options SOCKBUF_DEBUG
# Enable preemption of non-realtime threads
# May be unreliable: do not turn it on
#options FULL_PREEMPTION
# Enable DTrace
#options KDTRACE_HOOKS
#options KDTRACE_FRAME
# Enable FireWire console (default in GENERIC)
#device dcons
#device dcons_crom
options ALT_BREAK_TO_DEBUGGER
Obtaining crash dump
Kinds:
full memory,
kernel memory (aka minidumps) – default
textdumps (scripted output), see textdump (4)
Configuring dump device (may not be ZFS swap volume):
dumpon /dev/...
or in /etc/rc.conf dumpdev=... set to AUTO (or whatever device)
in /etc/sysctl.conf: kern.coredump=1
Automatically extracting crash dump
mkdir /var/crash
chmod 700 /var/crash
in /etc/rc.conf dumpdir=/var/crash
Manually extracting crash dump
boot in single-user mode (boot -s)
fsck -p
mount -o rw / # remount /var as writable
savecore /var/crash [ /dev/...] =>
/var/crash/vmcore.xx and info.xx (for textdumps, textdump.tar.xx)
exit # to multiuser
Debuggers:
DDB – interactive debugger on live system
(one-machine).
no access to source code.
can run on consoles: interactive, serial, firewire
has built-in commands to dump kernel structures.
no access to source code.
GDB – interactive remote debugger (two-machine) and dump analyzer.
over serial cable and firewire.
no built-in commands to analyze kernel structures.
access to source code and debug symbols.
scriptable.
DDD as visual front-end
To enter DDB:
boot -d
on PC console: Ctrl-Alt-Esc (unless remapped by syscons)
on serial console: BREAK (if BREAK_TO_DEBUGGER is enabled)
sysctl debug.kdb.enter=1
syctll debug.kdb.panic=1
Analyze crash dump with KGDB:
cd /usr/obj/usr/src/sys/MYKERNEL (kernel sources, subdir ident, such as GENERIC or MYKERNEL)
kgdb kernel.debug /var/crash/vmcore.0
Analyze crash dump with KGDB + DDD:
export LANG=C
cd /usr/obj/usr/src/sys/MYKERNEL (kernel sources, subdir ident, such as GENERIC or MYKERNEL)
ddd -- debugger kgdb kernel.debug /var/crash/vmcore.0
Remote debugging with KGDB via serial line:
kernel requires makeoptions DEBUG=-g
Host |
Target |
cd (kenel compile directory) |
|
|
enter DDB by Ctrl-Alt-Esc or
boot-b or sysctl debug.kdb.enter=1 |
entered GDB |
|
Remote debugging with KGDB via firewire (can also use for DDB)
kernel requires makeoptions DEBUG=-g
on target machine (one time):
· kernerl config requires devices dcons, dcons_crom, firewire
· rebuild loader:
o in /etc/make.conf add: LOADER_FIREWIRE_SUPPORT=YES
o cd /sys/boot/i386
o make clean
o make
o make install
·
enable /dev/dcons
in /etc/ttys:
dcons "/usr/libexec/getty std.9600" v100 on secure
·
edit /boot/loader.conf
hw.firewire.phydma_enable=1
dcons_gdb=1
dcons_crom_load="YES"
boot_multicons="YES"
# if dcons was not compiled into kernel statically with “device”
#dcons_load="YES"
#firewire_load="YES"
# force dcons to be high-level console
#hw.firewire.dcons_crom.force_console = 1
on host machine:
kldload firewire
dconschat -br -G 12345 -t target-eui64 => 12345 is gdb connection
port
CSA EUI64: E0-CB-4E-00-00-10-8E-A4
CSB EUI64: E0-CB-4E-00-00-12-00-14
kgdb -r :12345 kernel.my
for DDD:
export LANG=C
remote serial: ddd --debugger kgdb -r
:12345 kernel.my
live core debugging: ddd --debugger kgdb kernel.my
/dev/fwmem.2
key combinations:
disconnect: ~.
ALT-BREAK ~ Ctrl-B or
Ctrl-C
reset target ~ Ctrl-R
suspend dconschat ~ Ctrl-Z
spawn kgdb on this terminal ~ Ctrl-G (implies
dconchat … -N kernel.my)
get console log from the crash dump:
dconschat -1 -M vmcore.0 -N kernel.my
to use full speed of Firewire, optionally disable slow
console drivers on the target:
conscontrol delete ttyd0 # serial consolt
conscontrol delete consolectl # video/keyboard
DDB commands:
expressions:
symbol
[filename:]func:lineno
[filename:]lineno
[filename:]variable
0x... – hex, 0t... – decimal, 0o... – octal
expr op expr, where op is (+-*/)
*expr => indirection
$variable (set $variable expr)
register names: $eax, $rax etc.
examine:
x/[bhl][xou – unsigned zd – signed cs] addres,count
x/m address => unsigned hex + chars
x/i address => instructions
x/a address => display address itself
x/a address => display address itself with line number
xf, xb => examine with step forward, backward
show reg[isters]
p $eax
for example:
x/wx 0xf0133fe0, 40
x/s stringbuf
x/bc termbuf, 10
x/hd db_symtab_space
x ,10 => display next 0x10 items
deposit:
w/[bhl] addr expression => deposit, warning!!! use w/[bhl] addr (expression) in brackets if multiple tokens
w/[bhl] addr expr1 expr2 .... exprN
set $eax new-value
for example:
w/b termbuf 0xa 0xb 0
w/w 0xf0010030 0 0
breakpoints:
break function-name
break 0x...
break function-name + 0x....
show break
del address-expression
del => current breakpoint
del #n => delete breakpoint by number
watchpoints:
hwatch address, size => set hardware watchpoint
dhwatch addr, size => delete hardware watchpoint
watch address, size => set watchpoint
show watches
stepping:
s[tep] – step into (s/p => step and print instruction)
c[ontinue] – until the breakpoint
next – stop when current stack frame returns, next /p => print calls and returns inside
until – stop at the next call or return instruction,
until /p => print depth
call func(arg1, arg2, ... ) – call function, return result is printed
other:
t[race] [pid or tid] [,frame-count] – print stack trace
findstack addr – print thread address for kernel-mode stack containing addr
gdb – toggle between remote GDB and DDB modes
kill sig pid – send signal to process
capture {on,off,reset,status} -- control capture to sysctl debug.ddb.capture.data
print ... – print formatted output from script
search ... – search memory for value
system reset:
halt – halt the system
call boot(0) – cleanly sync and shutdown
reset (reboot) or call cpu_reset() – hard
reset the system
panic; continue
scripting:
script my=trace; show pcpu; show lockedvnods
run my
unscript my
(there are predefined names for system events)
DDB show commands (next page)
DDB show commands:
show all procs [/m] ps [/m] |
process information /m => show per-process VM map addresses only |
show all ttys |
TTY structures |
show allchains |
wait chains |
show alllocks |
all locks currently held |
show allpcpu |
all CPUs state |
show allrman |
interrupt request lines, DMA request lines, IO ports and IO memory addresses |
show apic |
APIC IDT vector mappings |
show buffer |
struct buf structures |
show cbstat |
brief information about TTY system |
show cdev |
cdev table |
show cpusets |
defined affinity sets |
show domain addr |
struct sys/domain.h at addr |
show ffs[addr] |
information about FFS mounts |
show files, show file addr |
struct file |
show freepages |
number of physical pages on each free list |
show geom [addr] |
GEOM topology |
show idt |
IDT vectors |
show inodedeps [addr] |
inodedep structures; if addr is given, then only for fs located at addr |
show inpcb |
IP control block (struct in_pcb) |
show intr |
interrupt handlers |
show intrcnt |
interrupt statistics |
show irqs |
interrupt lines and their respective threads |
show jails |
jails |
show lapic |
local APIC info for this CPU |
show lock addr |
lock information and state |
show lockchain addr |
wait chain for this lock |
show lockedbuf |
every locked struct buf |
show lockedvnodes |
list of all locked vnodes on the system |
show locks |
all locks currently acquired on the system (requires witness) |
show locktree |
|
show malloc |
malloc statistics |
show map [/f] addr |
VM map at addr; /f => full |
show msgbuf |
dmesg |
show mount |
all mounted file systems |
show object [/f] addr |
VM object at addr |
show page |
statistics on VM pages |
show pageq |
VM page queues |
show pciregs |
PCI registers |
show pcpu |
current processor state |
show pgrpdump |
process groups |
show proc [addr] |
current process or process at addr |
show procvm |
process virtual memory layout |
show protosw addr |
struct protosw at addr |
show registers [/u] |
register set; /u = user mode |
show rman addr |
resource manager (struct rman) at addr; see show allrman |
show rtc |
RTC clock value |
show sleepchain |
all threads a thread is waiting on based on sleepable locks |
show sleepq |
sleep queue (struct sleepqueue) |
show socket addr |
struct socket, struct sockbuf |
show sysregs |
system registers (e.g. CR0-CR4) |
show tcpcb addr |
TCP control block, struct tcpcb |
show threads |
all threads or specified thread |
show turnstile addr |
struct turnstile |
show uma |
UMA memory zone allocator statistcs |
show unpcb addr |
UNIX domain socket control block (struct unpcb) |
show vmochk |
check if some VM objects have zero reference count |
show vmopag |
show physical addresses consumed by VM objects (incompatible with witness) |
show vnode [addr] |
struct vnode |
show vnodebufs addr |
clean/dirty buffer lists for vnode at addr |
show witness |
lock acquisition info |