OpenBSD с нуля

Все перечисленное ниже проверено на OpenBSD 5.0 и 5.1. В случае 32х битной системы amd64 нужно заменять на i386

Установка

http://www.lissyara.su/articles/openbsd/syntony/installation_openbsd_4.2/

С 2008 года инсталлятор практически не изменился, наверное он вообще никогда не менялся :)

Русификация

Если при установке выбрать раскладку ru, то инсталлятор сразу пропишет ее в /etc/kdbtype, как и советуют почти во всех хауту. Правда у меня (JB) из за этого были проблемы с xdm и хотя я не уверен в их причине, тем не менее я пошел другим путем - /etc/kbdtype удалил, а в /etc/wsconsctl.conf добавил вот это:

keyboard.encoding=ru # use different keyboard encoding

там же можно указать и клавишу для переключения:

keyboard.map+="keycode 157 = Mode_Lock" # Right Ctrl

далее в /etc/rc.local (что бы консоль могла отображать русские буквы):

wsfontload /usr/share/misc/pcvtfonts/koi8-r-8x16
for cons in 1 2 3 4; do wsconscfg -dF $cons; wsconscfg -t 80x25bf $cons; done
unset cons

и если в wsconsctl.conf не был указан keyboard.map, то сюда же надо добавить wsconsctl -w keyboard.map+="keycode 157=Mode_Lock". А можно добавить и туда и туда

Иксы настраиваются как и везде:

Option	"XkbModel"   "pc105"
Option	"XkbLayout"  "us,ru(winkeys)"
Option	"XkbOptions" "grp_led:scroll,grp:ctrl_shift_toggle"

Еще надо добавить в .xinitrc или .xsession (в случае логина через xdm) вот это:

export LC_COLLATE=C
export LC_CTYPE=ru_RU.KOI8-R
export LC_MONETARY=C
export LC_NUMERIC=C
export LC_TIME=C

Для любителей экспериментов есть возможность использовать в иксах уникодную локаль - http://wiki.openbsd.ru/Русификация_и_UTF-8.html

Сеть

Каждый интерфейс настраивается в отдельном конфиге /etc/hostname.$interface. Например:

$ cat /etc/hostname.alc0
inet 10.0.0.38 255.255.255.0 10.0.0.255
$ cat /etc/hostname.athn0
nwid SSID_точки_доступа
wpakey пассфраза
dhcp

Шлюз указывается в /etc/mygate (в случае с dhcp это не нужно):

$ cat /etc/mygate
10.0.0.1

Что бы применить все изменения на лету без перезагрузки достаточно запустить sh /etc/netstart имя_интерфейса

Порты и пакеты

По умолчанию порты отсутствуют, поэтому скачиваем их вручную и распаковываем:

# ftp http://mirror.corbina.net/pub/OpenBSD/`uname -r`/ports.tar.gz
# cd /usr
# tar zxf /root/ports.tar.gz

Установка и удаление аналогичны портам FreeBSD, единственное что стоит запомнить это скрипт для проверки устаревших установленных портов:

# cd /usr/ports/infrastructure/build/
# ./out-of-date
Collecting installed packages: ok
Collecting port versions: ok
Collecting port signatures: ok
Outdated ports:

net/wget # 1.12p1 -> 1.13.4

# cd /usr/ports/net/wget
# make update

Пакеты ставятся так:

# export PKG_PATH=http://ftp.openbsd.org/pub/OpenBSD/`uname -r`/packages/amd64/
# pkg_add package_name

Для обновления есть ключ -u:

# pkg_add -u package_name

Либо можно обновить все пакеты сразу:

# pkg_add -iu

Что бы не вводить export каждый раз, переменную PKG_PATH можно добавить куда нибудь в .profile, .bash_profile или .zprofile в зависимости от шелла. Можно и в юзерский профиль, а пакеты ставить через sudo

rc.d

Начиная с 4.9 все сторонние сервисы находятся в /etc/rc.d. Для их запуска в /etc/rc.conf есть параметр pkg_scripts:

pkg_scripts="dbus_daemon"

Редактирование /etc/rc.conf

Разработчики рекомендуют избегать правки непосредственно /etc/rc.conf, внося все изменения в /etc/rc.conf.local, переменные в котором имеют приоритет над переменными в /etc/rc.conf. Это имеет смысл, поскольку /etc/rc.conf может быть перезаписан при обновлении системы. Аналогично, изменения /etc/rc следует выносить в /etc/rc.local. Это же касается файлов /etc/daily, /etc/weekly и /etc/monthly — имена файлов с локальными модификациями получают суффикс .local

Пересборка ядра

Качаем тарбол с исходниками и разворачиваем куда надо:

# ftp -C ftp://mirror.corbina.net/pub/OpenBSD/`uname -r`/sys.tar.gz
# cd /usr/src
# gzip -cd | tar xvf - /root/sys.tar.gz

Конфиг лежит в /usr/src/sys/arch/amd64/conf. Можно либо отредактировать GENERIC (тут еще нужно обратить внимание на то, что конфиг для многоядерных или многопроцессорных систем GENERIC.MP состоит по сути из трех строчек - двух параметров отвечающих за SMP и вставки содержимого GENERIC), либо скопировать его под другим именем и править уже его:

# cd /usr/src/sys/arch/amd64/conf
# cp GENERIC PUFFY
# vi PUFFY
# config PUFFY
# cd ../compile/PUFFY
# make clean && make depend && make -j3
# make install
# reboot

Для чего это нужно? Например чтобы включить поддержку bluetooth

Обновление системы

Описание процесса обновления системы до ветки -stable

Обновление до -current, English

Звук

Все манипуляции с микшером делаются с помощью mixerctl, например изменение громкости:

$ mixerctl outputs.master=130,130
outputs.master: 126,126 -> 130,130

На ноутбуках при подключении наушников звук может продолжать идти из колонок. Лечится это так:

$ mixerctl -a | grep output | grep slaves
outputs.master.slaves=dac-0:1,line,hp
$ mixerctl outputs.master.slaves=dac-0:1,line
$ mixerctl outputs.master.mute=on

без второй команды не получится отдельно выключать колонки и наушники, а третья собственно выключает вывод звука на колонки оставляя только наушники. Насчет бескостыльности этого метода я не уверен

Все это можно сохранить в /etc/mixerctl.conf:

$ cat /etc/mixerctl.conf
outputs.master=130,130
outputs.master.slaves=dac-0:1,line
outputs.master.mute=on

ACPI, энергосбережение

Для управления частотой процессора достаточно раскомментировать запуск apmd в /etc/rc.conf:

apmd_flags="-A"

-A - автоматическое управление частотой в зависимости от нагрузки, -C - максимальное энергосбережение

В ждущий режим (suspend-to-ram) система отправляется командой apm -z или просто zzz. Спящий режим (suspend-to-disk) не поддерживается

Изменение частоты парковки головок жесткого диска

Автомонтирование

HAL в OpenBSD отсутствует и udisks тоже, поэтому для автомонтирования хотя бы тех же флешек придется сооружать давно забытые костыли. В первую очередь надо поставить hotplug-diskmount и разрешить запуск hotplugd:

# pkg_add hotplug-diskmount
hotplug-diskmount-0.5p1: ok
# echo "hotplugd_flags=" >> /etc/rc.conf.local
# /etc/rc.d/hotplugd start
hotplugd(ok)
# /usr/local/libexec/hotplug-diskmount init

Потом создать /etc/hotplug/attach с таким содержимым:

#!/bin/sh

DEVCLASS=$1
DEVNAME=$2

case $DEVCLASS in
2)
        /usr/local/libexec/hotplug-diskmount attach -u artem -m 700 "$DEVNAME"
        ;;
esac

разумеется вместо artem подставить свое имя пользователя. И не забыть сделать файл исполняемым - chmod +x /etc/hotplug/attach

Теперь можно вставлять флешку и проверять. По умолчанию все монтируется в /vol/МЕТКА_ТОМА

Разное

  • Что бы научить ls выводить все в цвете нужен пакет fileutils и соответствующие алиас - alias ls="gls --color". Готовый файл раскраски для gls можно взять тут
  • Что бы кнопка Delete в xterm работала именно как Del, а не Backspace в .Xdefaults понадобится такая строчка - XTerm*deleteIsDEL: false
  • xsetbg почему то не дружит с композитингом - при запуске xcompmgr теряется wallpaper. С feh же все нормально
  • По умолчанию запущены службы time, daytime, ident. Что бы лишний раз не палиться в сети это можно отключить в /etc/rc.conf (или /etc/rc.conf.local) - inetd_flags=NO

/* FIXME: мне почему то не помогло - inetd все равно запускался. В качестве воркэраунда можно отредактировать /etc/inetd.conf и закомментировать там все ненужное */