Это мои заметки по NetBSD. Изначально они были написаны для NetBSD 7, но затем были немного расширены и теперь тажке применым к NetBSD 8 и 9.
Обратите внимание на приглашения:
$ sysctl -a | grep freq machdep.est.frequency.current = 1333 machdep.est.frequency.available = 2167 1667 1333 1000
# sysctl -w machdep.est.frequency.current=1333
/etc/rc.conf:
estd=YES estd_flags="-d -b -M 1667" # ограничение сверху 1667 МГц
СДЕЛАТЬ: Изучить поддержку C-состояния и P-состояния в NetBSD.
# sysctl -w hw.acpi.sleep.state=3
# zzz
Засыпание на диск в {Net|Open|Free}BSD не поддерживается.
# atactl wd0 apm set 254
Примечание: atactl wd0 apm disable не работает.
# atactl wd0 apm set <значение>
# smartctl -g apm /dev/rwd0d APM level is: 254 (maximum performance)
На моей системе управление энергосбережением отключено с помощью команды atactl wd0 apm set 254, которая прописана в /etc/rc.local. Эти настройки сбрасываются после засыпания в память, поэтому эту команду нужно выполнять повторно, например следующим образом:
# zzz; date; sleep 30; date; . /etc/rc.local; smartctl -g apm /dev/rwd0d
Примечание о sleep: после выполнения zzz компьютер всё ещё продолжает рабоать несколько секунд. Без sleep выполнение /etc/rc.local произойдёт перед засыпанием, а не после него. Пауза в 30 секунд подходит для любого компьютера.
Пакет sysutils/intel-microcode-netbsd динамически загружает самый свежий микрокод с сайта Intel.
Ручная загрузка
# /usr/pkg/share/examples/rc.d/intel-microcode onestart
Автозагрузка в процессе загрузки
# cp /usr/pkg/share/examples/rc.d/intel-microcode /etc/rc.d # echo microcode=YES >> /etc/rc.conf
Исходный микрокод на моём компьютере имеет версию 0xC2:
$ cpuctl identify 0 | grep microcode cpu0: microcode version 0xc2, platform ID 1 $ cpuctl identify 1 | grep microcode cpu1: microcode version 0xc2, platform ID 1
Обновлённый микрокод имеет версию 0xE2:
$ cpuctl identify 0 | grep microcode cpu0: microcode version 0xe2, platform ID 1 $ cpuctl identify 1 | grep microcode cpu1: microcode version 0xe2, platform ID 1
$ envstat Current CritMax WarnMax WarnMin CritMin Unit : cpu0/cpu1 temperature: 69.000 99.000 degC :
Таблица температур центральных процессоров cpu0/cpu1 (знойным летним вечером) (после выполнения sysctl -w machdep.est.frequency.target=1000):
Частота | Простой | make-j2 |
---|---|---|
1000 МГц | 47 ℃ | 57 ℃ |
1333 МГц | 51 ℃ | 68 ℃ |
1667 МГц | 56 ℃ | 80 ℃ |
2167 MHz | 65 ℃ | 94 ℃ |
При помощи smartctl из sysutils/smartmontools можно следить за исправностью дисков:
# smartctl -a /dev/rwd0d :
Например:
# smartctl -a /dev/rwd0d | grep Load_Cycle_Count ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 193 Load_Cycle_Count 0x0032 086 086 000 Old_age Always 144467
Отобразить текущее состояние батареи (с помощью пакета graphics/gnuplot):
$ while true; do envstat | grep charge: | cut -b 25-35 >> charge; gnuplot -e "set term xterm; plot [0:][0:] 'charge' using 0:1"; sleep 10; done
В BSD нет файловой системы /sysfs. Получить доступ к интерфейсу ядра из пользовательского пространства можно при помощи команды sysctl. Например, sysctl -a, sysctl -w xxx.yyy.zzz=3.
Время компиляции ядра NetBSD 7.0-RC2 GENERIC на процессоре Core Duo с помощью системного компилятора gcc-4.8.4 при работающей системе X11:
Параллельность | 1000 МГц | 1333 МГц | 1667 МГц | 2167 МГц |
---|---|---|---|---|
make -j1 depend | 4м13.150с | 3м11.536с | 3м14.164с | 2м11.462с |
make -j1 | 25м25.067с | 19м15.233с | 16м16.665с | 12м36.376с |
make -j2 depend | 2м40.423с | 2м10.196с | 1м48.069с | 1м29.399с |
make -j2 | 14м27.399с | 11м20.775с | 9м20.556с | 8м00.394с |
XXX При make -j1 depend есть несоответствие между временем для 1333 и 1667 МГц XXX
См. раздел "Пользовательское пространство". Файл конфигурации - /usr/src/sys/arch/*/conf/GENERIC.
Первоначальное получение исходных текстов из репозитори (-7 - это самая свежая стабильная версия, например 7.0, 7.1 и т.д.):
# cd /usr # export CVS_RSH=ssh # cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot co -r netbsd-7 -P src # cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot co -r netbsd-7 -P xsrc
Последующее обновление исходных текстов инструментов, ядра и пользовательского пространства:
# cd /usr/src # export CVS_RSH=ssh # cvs update -dP
Последующее обновление исходных текстов системы X-Window:
# cd /usr/xsrc # export CVS_RSH=ssh # cvs update -dP
Сборка инструментов, ядра, пользовательского пространства и X-Window [время при 1,667 ГГц][-u: не очищать][-x: также собрать и установить X-Window (это не делается из каталога /usr/xsrc)][MKDEBUG: собрать отладочные символы и установить в каталог /usr/XXX]:
# mkdir /usr/obj /usr/tools # cd /usr/src # PATH=/sbin:/usr/sbin:/bin:/usr/bin ./build.sh -u -O ../obj -T ../tools tools # 24 минуты 08 секунд # PATH=/sbin:/usr/sbin:/bin:/usr/bin ./build.sh -u -O ../obj -T ../tools kernel=GENERIC # 21 минута 57 секунд # PATH=/sbin:/usr/sbin:/bin:/usr/bin ./build.sh -u -O ../obj -T ../tools modules # 29 минут 54 секунды # PATH=/sbin:/usr/sbin:/bin:/usr/bin MKDEBUG=1 MKDEBUGLIB=1 ./build.sh -x -u -O ../obj -T ../tools distribution # 5 часов 15 минут 59 секунд
Установка инструментов, ядра, пользовательского пространства и X-Window:
# cd /usr/src # mv /netbsd /netbsd.old # mv /usr/obj/sys/arch/amd64/compile/GENERIC/netbsd / # PATH=/sbin:/usr/sbin:/bin:/usr/bin ./build.sh -O ../obj -T ../tools installmodules=/ # PATH=/sbin:/usr/sbin:/bin:/usr/bin ./build.sh -x -O ../obj -T ../tools install=/ # rm -rf /usr/tools /usr/obj # shutdown -r now
Сборка и установка всего в одну строку:
PATH=/sbin:/usr/sbin:/bin:/usr/bin ./build.sh -u -O ../obj -T ../tools tools && PATH=/sbin:/usr/sbin:/bin:/usr/bin ./build.sh -u -O ../obj -T ../tools kernel=GENERIC && PATH=/sbin:/usr/sbin:/bin:/usr/bin ./build.sh -u -O ../obj -T ../tools modules && PATH=/sbin:/usr/sbin:/bin:/usr/bin MKDEBUG=1 MKDEBUGLIB=1 ./build.sh -x -u -O ../obj -T ../tools distribution && mv /netbsd /netbsd.old && mv /usr/obj/sys/arch/amd64/compile/GENERIC/netbsd / && PATH=/sbin:/usr/sbin:/bin:/usr/bin ./build.sh -O ../obj -T ../tools installmodules=/ && PATH=/sbin:/usr/sbin:/bin:/usr/bin ./build.sh -x -O ../obj -T ../tools install=/
Мои этапы для исправления ошибки lib/50367:
cscope /usr/src (также проиндексирует подключаемые файлы из каталога /usr/include):
# cd /usr/src # cscope-indexer -r -v
Сборка оптимизированных двоичных файлов и библиотек, а также файлов с отладочными символами:
# cd /usr/src [-u не очищать - пропустите эту опцию при первом запуске] # PATH=/sbin:/usr/sbin:/bin:/usr/bin MKDEBUG=1 MKDEBUGLIB=1 ./build.sh -u -O ../obj -T ../tools distribution
XXX Похоже, что отладочные версии не были установлены - возможно нужно настроить переменную окружения MKDEBUG, а также переменные для установки
# ls /usr/obj/usr.bin/getaddrinfo/ getaddrinfo.c getaddrinfo.o getaddrinfo getaddrinfo.debug
Отладка нового двоичного файла:
# LD_LIBRARY_PATH=/usr/obj/lib/libc gdb getaddrinfo (gdb) set solib-search-path /usr/obj/lib/libc Reading symbols from /usr/obj/lib/libc/libc.so.12.193.1... Reading symbols from /usr/obj/lib/libc/libc.so.12.193.1.debug...
Запуск программы со вновь собранной разделяемой библиотекой:
# LD_LIBRARY_PATH=/usr/obj/lib/libc getaddrinfo heise.de
Сохранение изменений:
# cd /usr/src # cvs diff > changes.diff # Отличия от версии на CVS-сервере # patch -R < changes.diff # Отменяем изменения
/etc/mk.conf, /root/.profile (частично) и /root/.cvsrc. Запускайте все команды в /usr/pkgsrc.
# pkg_admin check
# cvs update
Узнать, какие пакеты нужно обновить (установленные пакеты сравниваются с pkgsrc):
# pkg_chk -u -q
Обновление этих пакетов (а также пересборка зависимых пакетов):
# pkg_chk -u -s
# cvs update -dP -rpkgsrc-2013Q2
# cvs update -dPA
# rm -rf /var/tmp/pkgsrc/ # Это путь WRKOBJDIR в моём файле /etc/mk.conf # rm /usr/pkgsrc/distfiles/* # rm /usr/pkgsrc/packages/All/*
СДЕЛАТЬ. Пока что попробуйте ifconfig wpi0 list scan и wap_gui.
Начиная с NetBSD 9.0 и с pkgsrc версии 2020Q1, в NetBSD появилось ускорение qemu при помощи nvmm [подробности]. Компиляция ядра Linux в гостевой виртуальной машине с Debian 10 по сравнению с обычным qemu ускоряется примерно в 20 раз.
Предоставление доступа к nvmm указанному пользователю, в данном случае sschaeck
# echo "nvmm:*:34:sschaeck" >> /etc/group # chown root:nvmm /usr/pkg/bin/qemu-system-x86_64 # chmod g+s /usr/pkg/bin/qemu-system-x86_64
Настройка во время загрузки (или добавьте имя модуля в /etc/modules.conf):
# modload nvmm
Создание псевдонима для команды (не обязательно):
$ alias qemu="qemu-system-x86_64 -accel nvmm"
qemu 101 (подразумевается использование указанного выше псевдонима)
Загрузка виртуальной машины с образа ISO
$ qemu -m 512M -cdrom /opt/isos/KNOPPIX*.iso
Создание пустого диска объёмом 10 гигабайт
$ qemu-img create -f qcow2 /opt/qemu/debian.img 10G
Установка операционной системы с загрузочного образа ISO на только что созданный пустой диск (загруженный ISO будет видеть пустой диск):
$ qemu -hda /opt/qemu/debian.img -cdrom /opt/isos/firmware-10.3.0-amd64-netinst.iso -boot d -m 512M -netdev user,id=mynet0,host=10.0.2.10 -device e1000,netdev=mynet0
Загрузка операционной сисетмы с диска (IP-адрес в виртуальной машине 10.0.2.15 / SSH с компьютера в виртуальную машину ssh sschaeck@127.0.0.1 -p 7001):
$ qemu -hda /opt/qemu/debian.img -m 512M -netdev user,id=mynet0,host=10.0.2.10,hostfwd=tcp:127.0.0.1:7001-:22 -device e1000,netdev=mynet0
Монтирование виртуальной машины на компьютере (хак, хак, хак):
# mount_psshfs -O Port=7001 sschaeck@127.0.0.1:/ /mnt/tmp ... # umount /mnt/tmp
Управляйте громкостью при помощи mixerctl, например, mixerctl -a; mixerctl -w monitor.output=200.
Запуск приложений X от имени пользователя root или от другого пользователя (который тут называется otheruser).
$ echo $DISPLAY $ xhost local:otheruser $ su - otheruser $ export DISPLAY=:0 # DISPLAY увеличивается при каждом запуске. Отсчёт начинается с команды №1
Поставляются в пакетах fonts/cyberbit-ttf и fonts/kochi-ttf (нужны оба).
СДЕЛАТЬ
NetBSD поддерживает бесшовную эмуляцию Linux. Пакет meta-pkgs/suse* позволяет развернуть в каталоге /usr/pkg/emul/linux[32|64]/ полное пользовательское пространство Linux.
Двоичные файлы для Linux с зависимостями от библиотек из /usr/pkg/emul/linux[32|64]/, скачанные из интернета, можно запускать из такого каталога как /opt/bin/. Однако перед этим нужно сменить корневой каталог на /usr/pkg/emul/linux[32|64]/:
# chroot /usr/pkg/emul/linux32/ /bin/bash bash-3.00# uname -a Linux hostname 3.11.6 #1 SMP PREEMPT Thu Oct 24 16:23:02 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
СДЕЛАТЬ: Попробовать собрать ядро Linux внутри окружения с изменённым корневым каталогом.
В отличие от OpenBSD и FreeBSD, NetBSD не поддерживает полное шифрование диска. Фреймворк шифрования NetBSD, который называется CGD, шифрует все разделы внутри определённого слайса одной парольной фразой. Я зашифровал слайс, содержащий ровно один раздел - раздел /home. Также можно зашифровать раздел подкачки в другом слайсе парольной фразой, которая каждый раз генерируется случайным образом. Это у меня получилось лишь частично.
Обновление: Я узнал о cgdroot для шифрования корневой файловой системы. Но я его не использовал.
Шлите ваши комментарии. Контактные данные указаны на главной странице.
Автор перевода на русский язык: Владимир Ступин