feat: freebsd examples and improved knowledge

This commit is contained in:
Michele Cereda
2023-05-13 16:44:07 +02:00
parent 02dd636ed4
commit 17eba05530
4 changed files with 243 additions and 10 deletions

View File

@@ -16,6 +16,7 @@
"cfengine",
"chattr",
"chezmoi",
"chpass",
"chsh",
"clamav",
"clamd",
@@ -76,6 +77,7 @@
"pinentry",
"pkexec",
"polkit",
"portsnap",
"pvresize",
"radeon",
"replicatedctl",
@@ -91,6 +93,7 @@
"subvolume",
"swapfile",
"swapon",
"sysrc",
"tclsh",
"templating",
"tfvars",

View File

@@ -0,0 +1,36 @@
#!/usr/bin/env sh
if [ "$(id -ru)" -eq 0 ]
then
echo "Run this again as 'root'"
exit 1
fi
# Package management
pkg bootstrap
pkg update
pkg install -y \
'vim' \
'zsh' 'zsh-autosuggestions' 'zsh-completions' 'zsh-navigation-tools' 'zsh-syntax-highlighting'
# Non-'root' user management
pw groupmod 'wheel' -m 'username'
cat > '/home/username/.zshrc' <<-EOF
source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/local/share/zsh-navigation-tools/zsh-navigation-tools.plugin.zsh
HISTFILE=~/.histfile
HISTSIZE=100000
SAVEHIST=100000
bindkey -e
zstyle :compinstall filename ~/.zshrc
autoload -Uz compinit
compinit
EOF
chown 'username':'usergroup' '/home/username/.zshrc'
chmod 'u=rw,go=r' '/home/username/.zshrc'
chpass -s "$(grep 'bin/zsh' '/etc/shells')" 'username'

View File

@@ -0,0 +1,24 @@
#!/usr/bin/env sh
if [ "$(id -ru)" -eq 0 ]
then
echo "Run this again as 'root'"
exit 1
fi
# Package management
# Use 'virtualbox-ose-additions-nox11' for console-only systems.
pkg bootstrap
pkg update
pkg install -y 'virtualbox-ose-additions'
# Start VirtualBox services at boot
sysrc vboxguest_enable="YES"
sysrc vboxservice_enable="YES"
# NTP workaround
# Needed if NTP or NTPDate are used
sysrc vboxservice_flags="--disable-timesync"

View File

@@ -1,34 +1,204 @@
# FreeBSD
## Table of contents <!-- omit in toc -->
1. [TL;DR](#tldr)
1. [Utilities worth noting](#utilities-worth-noting)
1. [The `rc.conf` files](#the-rcconf-files)
1. [Package management](#package-management)
1. [Manage binary packages with `pkg`](#manage-binary-packages-with-pkg)
1. [Manage ports from the Ports collection](#manage-ports-from-the-ports-collection)
1. [Enable time sync for the NTP server](#enable-time-sync-for-the-ntp-server)
1. [VirtualBox Guest Additions](#virtualbox-guest-additions)
1. [Further readings](#further-readings)
1. [Sources](#sources)
## TL;DR
```sh
# Initialize package managers.
portsnap auto
# Read manual pages.
man 5 'rc.conf'
# Search for keywords in the manual page descriptions.
man -k 'mail'
# Edit files.
edit 'path/to/file'
# Become 'root' from user sessions.
# The user must know root's password *and* be member of the 'wheel' group.
# Use '-' at the end to also load root's environment.
su
su -
# Add new members to groups.
pw groupmod 'group_name' -m 'username'
pw groupmod 'group_name' -m 'username_1','username_N'
# Replace all members in groups.
pw groupmod 'group_name' -M 'username'
pw groupmod 'group_name' -M 'username_1','username_N'
# Change users' default shell.
chpass -s 'path/to/shell' 'username'
chpass -s "$(grep 'bin/zsh' '/etc/shells')" 'username'
# Start services at boot.
sysrc ntpd_enable="YES"
sysrc vboxguest_enable="YES"
# Get the current system's version.
freebsd-version
# Upgrade the system.
# Maintains the current version.
freebsd-update fetch && \
freebsd-update install
# Upgrade the system to a newer version.
freebsd-update upgrade -r '13.2-RELEASE' && \
freebsd-update install
# Initialize the package managers.
pkg bootstrap
portsnap auto
# Update the package cache.
pkg update
# Search for packages.
pkg search 'bash'
# Install packages.
pkg install 'vim'
pkg install -y 'zsh' 'zsh-autosuggestions'
# Upgrade packages.
pkg upgrade
pkg install -y 'zsh' 'zsh-autosuggestions'
# Check for known vulnerabilities in *installed* applications.
pkg audit -F
pkg audit -Fr 'sqlite'
```
## Utilities worth noticing
## Utilities worth noting
- `bsdinstall`
- `bsdconfig`
## NTP time sync
## The `rc.conf` files
```conf
# file /etc/rc.conf
ntpd_enable="YES"
ntpd_sync_on_start="YES"
The `rc.conf` files contain information about the local host name, configuration details for any network interfaces and which services should be started up at system boot.<br/>
Options are set with `name=value` assignments using the `sh(1)` syntax, and the files are included by the various generic startup scripts in `/etc` which than make decision about their internal actions according to their contents.
The `sysrc(8)` command provides a scripting interface to programmatically modify system configuration files.
The `/etc/defaults/rc.conf` file specifies the **default** settings for all the available options. At its very end, it sources, in order:
- the `/etc/rc.conf` file, to allow system administrators to override such default values for the local system, and
- the `/etc/defaults/vendor.conf` file, to allow vendors to override system defaults.
In the very same way, the `/etc/rc.conf.local` file is used to override settings in `/etc/rc.conf` for historical reasons.
In addition to `/etc/rc.conf.local`, one can also place smaller configuration files for each `rc(8)` script in the `/etc/rc.conf.d` or `⟨dir⟩/rc.conf.d` directories specified in `local_startup`, all of which will then be included by the `load_rc_config` function.
For jail configurations, one could use the `/etc/rc.conf.d/jail` file to store configuration options specific to jails only.<br/>
If `local_startup` contains `/usr/local/etc/rc.d` and `/opt/conf`, `/usr/local/rc.conf.d/jail` and `/opt/conf/rc.conf.d/jail` will be loaded too. If `⟨dir⟩/rc.conf.d/⟨name⟩` is a directory, all the files in it will be loaded too.
See the contents of `man 5 rc.conf` for more information.
## Package management
Requires:
- [`pkg`][manage binary packages with pkg] if one wants to deal with binary packages;
- the [Ports collection][manage ports from the ports collection] if one wants to compile and install source code in an automated way.
See [Installing applications] for more information.
### Manage binary packages with `pkg`
```sh
# Bootstrap `pkg`.
# Need to be run as 'root'.
pkg bootstrap
# Update the package cache.
pkg update
# Get help on the command.
pkg help
pkg help 'search'
# Search for packages.
pkg search 'bash'
# Install packages.
pkg install 'vim'
pkg install -y 'zsh' 'zsh-autosuggestions'
```
### Manage ports from the Ports collection
TODO
## Enable time sync for the NTP server
```sh
sysrc ntpd_enable="YES"
sysrc ntpd_sync_on_start="YES"
```
## VirtualBox Guest Additions
1. Install the additions.<br/>
Use the `-nox11` package for console-only guests.
```sh
pkg update
pkg install -y 'virtualbox-ose-additions'
```
1. Enable the services at boot:
```sh
sysrc vboxguest_enable="YES"
sysrc vboxservice_enable="YES"
```
1. If `ntp` or `ntpdate` are used, disable the additions' time sync:
```sh
sysrc vboxservice_flags="--disable-timesync"
```
## Further readings
- The [FreeBSD Handbook]
- [`rc.conf`'s man page][rc.conf man page]
- [Installing applications]
- [Using the Ports collection]
## Sources
- [Ports]
All the references in the [further readings] section, plus the following:
- [NTPdate - not updating to current time]
- [Boinc]
- [sbz's FreeBSD commands cheat-sheet]
<!-- project's references -->
[freebsd handbook]: https://docs.freebsd.org/en/books/handbook/
[Installing applications]: https://docs.freebsd.org/en/books/handbook/ports/
[rc.conf man page]: https://man.freebsd.org/cgi/man.cgi?rc.conf(5)
[using the ports collection]: https://docs.freebsd.org/en/books/handbook/ports/#ports-using
<!-- internal references -->
[manage binary packages with pkg]: #manage-binary-packages-with-pkg
[manage ports from the ports collection]: #manage-ports-from-the-ports-collection
<!-- external references -->
[boinc]: https://people.freebsd.org/~pav/boinc.html
[ntpdate - not updating to current time]: https://forums.freebsd.org/threads/ntpdate-not-updating-to-current-time.72847/
[ports]: https://docs.freebsd.org/en/books/handbook/ports/
[sbz's freebsd commands cheat-sheet]: https://github.com/sbz/freebsd-commands