User Tools

Site Tools


freebsd:freebsd

FreeBSD Experience

This page is about my experience using FreeBSD.

Note: Since I have decided to stick with Linux for now, I will be gearing my FreeBSD usage towards GUI-centric experience.

Update20200428: I want to get back to FreeBSD (FuryBSD?) after I am done with my current project (may take a while, but I am certain of trying FreeBSD again). Just some notes: (1) try lumina desktop [BSD licensed, written for TrueOS], (2) port all my software to BSD :p, (3) try mingw32-gcc to cross-compile windows program

FreeBSD Installation

My installation notes…

Note: When using VirtualBox on a Linux host, make sure the virtual machine is NOT using Intel HD Audio! It creates an 'interrupt storm' (irq21 - whatever that is…) and makes the system unusable m(

Getting FreeBSD

The official way to do this is, of course, to get it from freebsd.org.

Standard Installation

Latest: Installing FreeBSD-12.0-RELEASE-amd64 on VirtualBox

Base System

  • fresh install using memstick image file
  • install kernel and base only
  • added my main user account to {wheel,operator} group
    • for desktop use, all users need to be in video or wheel
    • so normal users should be in video group
    • normal users should also be in operator group to be able to shutdown from mate desktop
  • enable sshd, enable ntpdate(on-boot), disable sendmail

Desktop (GUI)

  • use binary package management tool pkg
    • by default, even that is not installed… ^_^
  • install x server
    pkg install -y xorg
  • install desktop environment
    pkg install -y gnome3
  • enable stuffs in /etc/rc.conf:
      hald_enable="YES"
      dbus_enable="YES"
      gdm_enable="YES"
      gnome_enable="YES"
  • desktop environment requires procfs - insert into /etc/fstab:
      proc          /proc       procfs  rw  0  0
  • enable sound in /boot/loader.conf:
      snd_driver_load="YES"
  • enable switching virtual consoles during X session, edit /boot/loader.conf:
    kern.vty=vt
  • reduce auto-boot delay, edit /boot/loader.conf:
    autoboot_delay="3"
  • VBOX install virtualbox additions
    pkg install -y virtualbox-ose-additions
  • VBOX enable virtualbox start script, edit /etc/rc.conf:
      vboxguest_enable="YES"
      vboxservice_enable="YES"
  • VBOX disable host time synchronization, edit /etc/rc.conf:
      vboxservice_flags="--disable-timesync"

Utility

  1. install useful stuffs
    • avahi & multicast dns
      pkg install -y avahi-app nss_mdns
    • enable avahi daemon in /etc/rc.conf:
        avahi_daemon_enable="YES"
    • modify the hosts: line in /etc/nsswitch.conf:
        hosts: files dns mdns
    • network manager
      pkg install -y networkmgr
    • configure doas - create /usr/local/etc/doas.conf:
        permit nopass keepenv :wheel cmd netcardmgr
        permit nopass keepenv :wheel cmd detect-nics
        permit nopass keepenv :wheel cmd detect-wifi
        permit nopass keepenv :wheel cmd ifconfig
        permit nopass keepenv :wheel cmd service
        permit nopass keepenv :wheel cmd wpa_supplicant

Application

  • development
    pkg install -y git geany
  • console multitasking
    pkg install -y screen
  • office & browser
    pkg install -y libreoffice firefox

User Account

  • by default root shell is csh and user is sh - edit .shrc to get prettier prompt
      PS1="`whoami`@\H:\w\$ "
  • (IF using slim) to enable x environment after slim login, create ~/.xinitrc for each user:
      exec /usr/local/bin/mate-session

Custom Installation

Network Configuration

Note DHCP client is dhclient - simply run dhclient <interface> when booting to console and using something like USB tethering.

Configure (wireless) network interface (in case was not done during installation)

  • FreeBSD has network interface name - based on the driver name (e.g. sis, re)
    • to find this, use pciconf -lv
  • for normal wired connection (e.g. re0), add to '/etc/rc.conf'
    ifconfig_re0="DHCP"
  • for a wireless connection (e.g. ath0), add in
    wlan_ath0="wlan0"
      ifconfig_wlan0="DHCP"
  • for a secured wireless connection (e.g. WPA protected), add in
    wlan_ath0="wlan0"
      ifconfig_wlan0="WPA SYNCDHCP"

    also, append '/etc/wpa_supplicant.conf'

      network={
          ssid="the_ssid"
          psk="the_psk"
      }
  • not sure why but wlan0 was not auto-created?
    • from official handbook, do ifconfig wlan0 create wlandev ath0
    • to start up and scan, do ifconfig wlan0 up scan
    • or just scan, do ifconfig wlan0 list scan

Graphics

Driver for ASUS E5450 Graphics Card (based on Radeon 5450?)

  • install driver
    pkg install -y xf86-video-ati
  • to load on startup, edit /etc/rc.conf:
    kld_list="radeonkms"

For Intel Graphics (Asus H81M-K Motherboard)

  • install driver
    pkg install -y xf86-video-intel
  • to load on startup, edit /etc/rc.conf:
    kld_list="i915kms"
  • install something? (for kernel?)
    pkg install -y drm-kmod
    • some older ones require drm-fake-kmod instead

Server

Web Server (Apache)

  • find apache package(s)
    pkg search apache2 | grep -e "^apache2"
  • install apache package(s)
    pkg install -y php56 mod_php56 php56-mbstring php56-mcrypt php56-zlib php56-curl php56-gd php56-json
  • to load on startup, edit /etc/rc.conf:
    apache24_enable="YES"
  • default document path is /usr/local/www/apache24/data/

Server Script (PHP)

  • find php package(s)
    pkg search php5 | grep -e "^php5"
  • install php package(s)
    pkg install -y apache24
  • configure /usr/local/etc/apache24/Includes/php.conf:
      <IfModule dir_module>
        DirectoryIndex index.php index.html
        <FilesMatch "\.php$">
          SetHandler application/x-httpd-php
        </FilesMatch>
        <FilesMatch "\.phps$">
          SetHandler application/x-httpd-php-source
        </FilesMatch>
      </IfModule>
  • copy template configuration file # cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

Database (mysql/mariadb)

  • install package(s)
    pkg install mariadb103-server mariadb103-client php56-mysqli
  • to load on startup, edit /etc/rc.conf:
    mysql_enable="YES"
  • by default, it listens to remote request at port 3306. to check:
    # lsof -i4 -i6
    # sockstat -4 -6
  • to allow local access only, edit /etc/rc.conf:
    mysql_args="--bind-address=127.0.0.1"
  • now, to make sure all is okay:
    # lsof -i4 -i6 | grep mysql
    # netstat -an | grep 3306
    # sockstat -4 -6 | grep 3306

Offline Installation

Note: Need to test this… :-P

  • Get the desired packages on a FreeBSD machine with internet connection
      # mkdir /root/offline
      # pkg fetch -d -o /root/offline xorg mate slim firefox
    • -d for dependencies
    • -o specifies destination path for the fetched packages
  • Copy those files to a portable USB drive
  • On the target machine, copy everything to /var/cache/pkg
  • Then, do a
      # pkg -U install xorg mate slim firefox git geany networkmgr
    • -U is the short form for –no-repo-update

USB Thumb-Drive Installation

I want to try to install to a USB thumb-drive… from my FreeBSD virtual machine (VirtualBox). I have a 16GB USB3 Kingston Data Traveller drive, and already installed FreeBSD 12 on a virtual machine.

To prepare the drive layout, checkout here. I'm going to prepare for UEFI boot on a GPT formatted disk.

- plug in usb drive

  • find device name (i.e. /dev/???)
  • usually da0 is the first usb drive?

- refer to this

to be continued…

Dual-Boot on UEFI Systems

Find boot1.efi as place it in EFI System Partition. It will look for first partition with type freebsd-ufs (which can even be on another disk) and load loader.efi.

FreeBSD Maintenance

Maintaining the system…

System Upgrade/Update

For example, upgrading 10.1-RELEASE to 10.2-RELEASE

freebsd-update -r 10.2-RELEASE upgrade

Then run

freebsd-update install

To update within a release, do a

freebsd-update fetch

before running 'install'.

Hint hit 'q' when prompted

Package Upgrade/Update

Install package

pkg install <pkg_name> [...]

Note: include '-y' to override prompts

Delete package

pkg delete <pkg_name> [...]

Update catalogue

pkg update

Upgrade software

pkg upgrade

List installed packages

pkg info

Remove all packages and start over

pkg delete --all --force

Clean all package cache

pkg clean

Remove orphaned package(s)?

pkg autoremove

If pkg installation quits due to size mismatch or something,

pkg clean
rm -rf /var/cache/pkg/*
pkg update -f

Using ports system

Will most probably need these at some point…

To get it,

portsnap fetch extract

To update,

portsnap fetch update

To manage, use portmaster

Using portmaster

To build portmaster,

cd /usr/ports/ports-mgmt/portmaster/ && make install clean

To setup portmaster,

# cp /usr/local/etc/portmaster.rc.sample /usr/local/etc/portmaster.rc
# ee /usr/local/etc/portmaster.rc

To update all ports

portmaster -a

To search updates

portmaster -L | grep "New version available:"

To cleanup

portmaster --clean-distfiles{-all}

To remove port

portmaster -e target_port

To rebuild port

portmaster -r target_port

Dumping ground - from portmaster man page…

     Build a port locally but use packages for build dependencies, then	delete
     the build dependencies when finished:
	   portmaster --packages-build --delete-build-only fooport-1.23

     Update a system using only	packages that are available locally:
	   portmaster -PP --local-packagedir=<path> -a

     Update all	ports that need	updating:
	   portmaster -a

     Update all	ports that need	updating, and delete stale distfiles after the
     update is done:
	   1. portmaster -aD
	   2. portmaster --clean-distfiles

Minor Tweaks

  1. 'git log' output does not show colorized output
    • can see the escape sequence
    • so, as user, type
      git config --global core.pager "ls -r"

Useful Stuffs

Creating Disk Layout for Bootable USB

Using GPT

freebsd_gpt_disk_layout.txt
creating disk layout (gpt) for freebsd
- assuming disk is da0 (change accordingly for other designation)
 
0- clean existing partitions/slices
 
# gpart destroy -F da0
 
(manual op) 
find total sector count using diskinfo
# diskinfo -v da0
backup/secondary gpt table is at the last 34 sector
# echo '<total> - 34' | bc
<offset>
# dd if=/dev/zero of=/dev/da0 bs=512 seek=<offset>
 
1- create gpt and bios boot scheme
 
# gpart create -s gpt da0
da0 created
# gpart add -t freebsd-boot -l gpboot -b 40 -s 1004K da0
da0p1 added
# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 da0
partcode written to da0p1
bootcode written to da0
 
2- create efi partition
 
# gpart add -t efi -l gpefiboot -s 127M da0
da0p2 added
# newfs_msdos /dev/da0p2
...
 
3- copy efi binary
 
# mount -t msdosfs /dev/da0p2 /mnt
# mkdir -p /mnt/EFI/BOOT
# cp /boot/boot1.efi /mnt/EFI/BOOT/
# umount /mnt
 
4- create partition/slice for root and swap
 
# gpart add -t freebsd-ufs -l gprootfs -s 14G da0
da0p3 added
# gpart add -t freebsd-swap -l gpswap da0
da0p4 added
 
5- format/prepare fs for root
 
# newfs -U /dev/da0p3

Using MBR (just in case… :p)

freebsd_mbr_disk_layout.txt
# gpart create -s mbr da0
# gpart bootcode -b /boot/mbr da0
# gpart add -t freebsd da0
# gpart set -a active -i 1 da0
# gpart create -s bsd da0s1
# gpart bootcode -b /boot/boot da0s1
2023/08/29 13:04

Label for Partitions/Slices

This is nice to have in /etc/fstab when device assignment may change (e.g. usb drive on different machine may be assigned differently)

For ufs,

# tunefs -L <label> /dev/da0p?

To check if assigned,

# ls /dev/ufs

For swap,

# glabel label <label> /dev/da0p?

To check if assigned,

# ls /dev/label

Then, /etc/fstab entry can be like,

/dev/label/<label>	none	swap	sw	0	0
/dev/ufs/<label>	/		ufs		rw	1	1

Disk Utility ''gpart''

Show partition

# gpart show

Resize partition

# gpart resize -i 3 da0

Not really gpart stuff, but don't forget to grow FS to fit new size

# growfs /dev/da0p3

Access to Linux ExtFS

At the moment, full R/W access for Ext2, Journal-less for Ext3 and R/O for Ext4.

# kldload ext2fs
# mount -t ext2fs /dev/<slice> <mount-path>

Install on SSD

Note: Generally, it seems that this is no longer an issue - some just did a normal install and have no problems at all. But, I want to put this here anyways.

Creating partitions (from: https://www.wonkity.com/~wblock/docs/html/ssd.html)

# gpart create -s gpt ada0
# gpart add -t freebsd-boot -s 1m -a 4k -l ssdboot ada0
# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i1 ada0

# gpart add -t freebsd-ufs -l ssdroot -b 1m -s 4g ada0
# gpart add -t freebsd-ufs -l ssdvarfs -a 1m -s 2g ada0
# gpart add -t freebsd-ufs -l ssdusrfs -a 1m ada0

# newfs -U -t /dev/gpt/ssdrootfs
# newfs -U -t /dev/gpt/ssdvarfs
# newfs -U -t /dev/gpt/ssdusrfs

create fstab (save as /tmp/bsdinstall_etc/fstab)

# Device	Mountpoint	FStype	Options	Dump	Pass#
/dev/gpt/ssdroot	/	ufs	rw	1	1
/dev/gpt/ssdvarfs	/var	ufs	rw	2	2
/dev/gpt/ssdusrfs	/usr	ufs	rw	2	2
tmpfs	/tmp	tmpfs	rw,mode=01777	0	0

FreeBSD on RasPi400

  • got FreeBSD13 arm64 aarch64 image
  • write to microsd card
  • boot issue
    • ok if boot from usb (note: starting pi4, usb boot is possible!)
    • need to update u-boot binary (look for that in forum)
  • console display is not ok when using on tv (high res?)
    • edit config.txt and comment out hdmi_safe=1

going for dwm

  • pkg install libX11 libXft libXinerama
  • pkg install git

work in progress…

freebsd/freebsd.txt · Last modified: 2023/08/29 10:43 by 127.0.0.1