victor_sudakov: (Default)
Parallels Desktop конечно очень хорош, может запускать полноценную VM даже с иксами.

Но если нужно запустить на Маке text mode Linux, я пока не нашёл ничего лучше OrbStack. Это не полноценная VM, как Parallels или VirtualBox c (пара)виртуализацией железа, а нечто ближе к Debootstrap или WSL. Но это настоящая Ubuntu, Centos, Gentoo etc (OrbStack предлагает выбор из 16 дистрибутивов линукса). Файловая система VM при этом доступна с MacOS хоста и наоборот, можно файлы легко копировать в/из VM. Если установить внутри VM сетевое ПО, например NGiNX или Kubernetes с ингрессом, все слушающие порты будут слушать на localhost Мака. Можно выполнять команды Linux из MacOS и наоборот с помощью утилит orb и mac соответственно.

Зачем нужен text mode Linux на Маке, если MacOS это UNIX-подобная ОС и для нее есть Homebrew?

Если вы много занимаетесь администрированием Linux, то отличия CLI Linux и MacOS (которая BSD) будут вам доставлять постоянное неудобство, в том числе при написании скриптов, сравните хотя бы ключи команды date. Конечно, если использовать из MacOS только Терминал для ssh-доступа в облако, то никакой OrbStack не нужен, и даже Homebrew не нужно.

Внутри OrbStack можно запустить настоящий линуксовый docker и Kubernetes, например Kind. Зачем Kind, если для MacOS есть 1) Docker Desktop и 2) Kubernetes встроенный в OrbStack? А затем, что оба они однонодовые, если же нужен multi-node cluster (например потестировать node affinity), надо ставить Kind или K3d.

Виртуальных машин OrbStack можно сделать сколько угодно с разными дистрибутивами Linux, например для любителей пакетного менеджера pacman есть Arch. Файлы с одной VM на другую можно копировать через /mnt/machines.

Из недостатков:

1. Клонировать VM нельзя. Можно автоматизировать настройку новой VM, поддерживается Cloud-init, но мне проще ansible-pull.

2. Иксовые приложения внутри VM просто так не запустишь, но в документации пишут, что можно, если в качестве X-сервера запустить XQuartz на Маке, или Xrdp. Ну или если у вас в сети есть X-terminal, наверное можно $DISPLAY туда отправить, я не пробовал за ненадобностью.

3. USB устройства внутрь VM пока не пробрасываются.
victor_sudakov: (Default)

Можно ли вообще сравнивать docker и jails? Обсуждение

there's a conceit in the FreeBSD community that there's an element of "we had Docker containers years ago but we call them jails." I don't think the comparison is 100% accurate. I like jails, but I believe the tooling and ecosystem around them falls short of that around Docker

И о перспективах

victor_sudakov: (Default)
They're not quite the same as Docker images, but the iocage jail manager supports "plugins", https://iocage.readthedocs.io/en/latest/plugins.html. They're canned instructions for building an image for a particular application, not ready-made images, but they work similarly.

FreeNAS/ixSystem supports a set of about 30 and there's a repository for community plugins: https://github.com/ix-plugin-hub/iocage-plugin-index

There's a nice, recent tutorial that covers creating plugins over on the FreeNAS blog site: https://www.ixsystems.com/blog/plugins-development/

Источник: https://lists.freebsd.org/pipermail/freebsd-questions/2020-February/287879.html
victor_sudakov: (Default)
https://lists.freebsd.org/pipermail/freebsd-questions/2020-March/288184.html

Colin Percival published some root-on-ZFS AMIs a while back -- see
https://lists.freebsd.org/pipermail/freebsd-cloud/2019-February/000200.html

FreeBSD 12.0-RELEASE is now available as AMIs with ZFS root disks in all 16 publicly available EC2 regions:

eu-north-1 region: ami-08b2b0fa1cc85edfe
ap-south-1 region: ami-07764d99979e5ec91
eu-west-3 region: ami-0a836f46bdc4c3518
eu-west-2 region: ami-0e7bce0a20fe3902b
eu-west-1 region: ami-03b5ae82b793bad52
ap-northeast-2 region: ami-069724fe041920a0b
ap-northeast-1 region: ami-09d8e65f85aa017d8
sa-east-1 region: ami-0b28c0109e2f0f44a
ca-central-1 region: ami-0a3fee7dd1f79aaa4
ap-southeast-1 region: ami-043a7940712d24f8d
ap-southeast-2 region: ami-0d9cf4953f3b62f2f
eu-central-1 region: ami-030f799e0a791d922
us-east-1 region: ami-0295763c489ea2d6f
us-east-2 region: ami-054939ebd299da308
us-west-1 region: ami-03f74ad827943414e
us-west-2 region: ami-07489cd9448bfa3d0


Проверил ami-054939ebd299da308 - работает. 12.1-RELEASE AMI вроде пока недоступны.
victor_sudakov: (Default)
Может пригодиться, например, для тестирования графических desktop environments. В качестве оболочки к bhyve использован sysutils/vm-bhyve, в качестве VNC клиента - net/tightvnc.

Поскольку framebuffer console доступна только при загрузке гостевой ОС в режиме UEFI (а в режиме bhyveload недоступна), то нужно установить гостевую FreeBSD в режиме UEFI.

I. В конфиге новой VM должны присутствовать параметры
loader="uefi"
graphics="yes"
graphics_wait="auto"
graphics_res="1280x720"
xhci_mouse="no"

II. Запускаем установку как обычно для UEFI гостей:
vm install test1 FreeBSD-12.1-RELEASE-amd64-disc1.iso
vncviewer 192.168.1.1:5900

В EFI консоли дожидаемся FreeBSD boot menu, нажимаем 3 (Escape to loader prompt). В консоли лоадера
set boot_serial=NO
boot

При установке Auto (ZFS) нужно выбрать "Partition Scheme GPT(UEFI)", bsdinstall создаст EFI раздел и положит туда загрузчик. При установке на UFS придется вручную создать EFI раздел и наполнить его содержимым из /boot/boot1.efifat.

III. На последнем шаге установки (Manual Configuration):
echo 'boot_serial="NO"' >> /boot/loader.conf

IV. Устанавливаем иксы и нужный desktop environment:
pkg install xorg gnome3

V. В /usr/local/etc/X11/xorg.conf.d/driver-scfb.conf добавляем секцию:
Section "Device"
        Identifier    "Card0"
        Driver        "scfb"
EndSection

Это важно! Если не добавить, X-server не найдет framebuffer-ную консоль.

VI. Запускаем нужную графическую среду
sysrc dbus_enable=YES
sysrc hald_enable=YES
sysrc gdm_enable=YES
apply "service %1 start" dbus hald gdm

Источники:
https://wiki.freebsd.org/bhyve/UEFI
Тред в https://lists.freebsd.org/pipermail/freebsd-virtualization/2019-December/007944.html
victor_sudakov: (Default)
Мем "Pets vs Cattle" применительно к серверам существует уже несколько лет, но я только недавно услышал.

Pet - это один сервер или отказоустойчивый кластер из 2 серверов. К "домашним любимцам" индивидуальный подход, им дают собственные имена, любовно настраивают и бэкапят, при отказе аккуратно чинят, потому что отказ приводит к остановке сервиса.

"Скоту" дают цифровые имена типа backend0012, генерят их обычно автоматически в количестве >2, внутри они почти идентичны, при выходе из строя их сносят и заменяют на новые, причем выход из строя даже нескольких штук считается штатной ситуацией (designed for failure).

С распространением виртуализации, распределенных вычислений и облаков "скот" стал использоваться всё чаще, но "домашние любимцы" никуда не делись. Типична ситуация, когда гипервизор или балансировщик нагрузки - pet, а многочисленные виртуалки или блейды - cattle.

От себя добавлю, что и в мире сетевых технологий, в связи с распространением таких технологий, как например Cisco SD-Access и SD-WAN, индивидуальные маршрутизаторы и коммутаторы превращаются из pets в cattle.
victor_sudakov: (Default)
Алгоритм взаимодействия apcupsd с системой при её выключении не менялся уже 17 лет. По умолчанию apcupsd запускается с ключом --kill-on-powerfail, что означает: при исчерпании заряда аккумулятора в ИБП, послать ИБП команду "уснуть" и одновременно запустить процедуру doshutdown из /usr/local/etc/apcupsd/apccontrol. В ИБП обычно предусмотрена задержка (так называемый grace delay) 10-40 секунд исполнения команд "выключиться" и "уснуть". В этом месте начинается race: что случится раньше, shutdown успеет корректно завершиться или ИБП выключится?

В прежние времена, наверное, это всех устраивало, потому что выключение системы проходило быстро и shutdown успевал всё завершить до выключения питания. Хотя напомню, что значение по умолчанию rcshutdown_timeout="90" заведомо больше grace delay любого ИБП. Так что race condition никуда не девался на самом деле.

В нынешнее время с распространением виртуальных машин во время выключения хоста включено время выключения виртуалок, которое может быть весьма значительным. Я например устаналиваю rcshutdown_timeout="240" и kern.init_shutdown_timeout="300" и то виндовые VM выключиться не успевают. Понятно, что в UPS grace delay не укладываемся точно.

Поэтому предлагаю новый алгоритм выключения системы посредством apcupsd, и открыл на эту тему ПР https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=237600 Суть нового (не очень нового, на самом деле, в Linux используется подобный) алгоритма:

Запускаем apcupsd с ключом --term-on-powerfail
apcupsd_enable="YES"
apcupsd_flags="--term-on-powerfail"

это значит после запуска процедуры shutdown и создания флага /var/run/powerfail apcupsd должен выйти и не путаться пока под ногами.

А в конце /etc/rc.shutdown вписываем строчку
test -f /var/run/powerfail && /usr/local/sbin/apcupsd --hibernate
или
test -f /var/run/powerfail && /usr/local/sbin/apcupsd --power-off

(кому как удобнее, в зависимости от требуемого поведения ИБП после восстановления питания).

Это означает, что только после отработки всех rc.d скриптов с параметром stop в ИБП будет послана команда "уснуть" или "выключиться" соответственно.

UPD A brief summary in English.

My final conclusion. The default way apcupsd is started by the port (with --kill-on-powerfail) is wrong. You cannot rely on the UPS grace shutdown delay even with the default setting of rcshutdown_timeout="90", while using virtual machines necessitates making rcshutdown_timeout even longer. A race between the UPS grace delay and the FreeBSD shutdown procedure must be eradicated.

The only feasible way of doing it is:

1. Starting apcupsd with apcupsd_flags="--term-on-powerfail" so that the daemon exits once it has started the doshutdown procedure and does not send any commands to the UPS at this stage.

2. Putting the line
"test -f /var/run/powerfail && /usr/local/sbin/apcupsd --hibernate"
or
"test -f /var/run/powerfail && /usr/local/sbin/apcupsd --power-off"

(depending on the desired behaviour of the UPS after the mains is restored) at the very end of the /etc/rc.shutdown script, after the "Insert other shutdown procedures here" line.

Thus the shutdown procedure started by "apcupsd --term-on-powerfail" can proceed at its own tempo, with "apcupsd --hibernate" being called when all the daemons and VMs have been safely shut down.

UPD 2. Ещё предлагают такой способ: http://www.wfido.ru/m/RU.UNIX.BSD/grosbein.net+c3b53b4f который призван исключить достаточно маловероятную, но неприятную ситуацию, если питание успело восстановиться после завершения apcupsd, но до killpower.
victor_sudakov: (Default)
Если виртуальный Windows никак не хочет выключаться, несмотря на подаваемый гипервизором сигнал ACPI shutdown, то это может быть из-за того, что ни один пользователь в него не залогинен: https://serverfault.com/questions/871792/acpi-shutdown-does-not-always-work-on-a-windows-server-virtual-machine

Выставить "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\shutdownwithoutlogon" в 1
victor_sudakov: (Default)
bhyve и некоторые другие гипервизоры (похоже что VirtualBox тоже) в режиме EFI не поддерживают эмуляцию NVRAM для сохранения efi variables между перезагрузками. Это может привести к проблеме: гостевая ОС установится штатно, а после перезагрузки получаем сообщение от EFI наподобие
Boot Failed. EFI DVD/CDROM
Failed to set MokListRT: Invalid Parameter
Failed to open \EFI\BOOT\grubx64.efi - Not Found
Failed to load image \EFI\BOOT\grubx64.efi: Not Found
start_image() returned Not Found
Boot Failed. EFI Misc Device
.

Это происходит оттого, что инсталлятор при установке ОС сохранил в efi variables путь к загрузчику (например "\EFI\centos\grubx64.efi"), а после перезагрузки гостевой системы настройка забылась и гипервизор начинает пытаться грузить нечто другое, что заложено в него по умолчанию или по эвристике.

Решений может быть несколько.

Первое тупое. Подмонтировать как-нибудь efi-раздел установленной гостевой ОС (например из другой виртуалки, или из LiveCD в той же виртуалке) и положить нужный загрузчик в то место, где его ищет и не может найти гипервизор: например подложить его в качестве "\EFI\BOOT\BOOTX64.EFI", или как в примере выше, скопировать из \EFI\centos\grubx64.efi в \EFI\BOOT\grubx64.efi.

Второе более интересное. После неудачной загрузки дождаться EFI interactive shell и создать файл startup.nsh, это типа такой autoexec.bat:

fs0:
edit startup.nsh


А в нем уже прописать тот загрузчик, который нужен гостевой ОС, например строчку "\EFI\centos\grubx64.efi".

Третье фантастическое. Запинать авторов UEFI-EDK2 firmware реализовать поддержку сохранения efi variables между перезагрузками.

UPDATE. Вот на ту же тему https://www.centos.org/forums/viewtopic.php?p=278745#p278745

UPDATE 2. А инсталлятор FreeBSD уже сразу создает в EFI-разделе startup.nsh c нужным загрузчиком. Молодцы!
victor_sudakov: (Default)
Если кто будет искать себе сабж, посмотрите на vultr. Сам пользуюсь аккаунтом за $5/мес, пока нравится.

По ссылке http://www.vultr.com/?ref=7014869 промо предложение.
victor_sudakov: (Default)
Где взять и как собрать http://justinholcomb.me/blog/2016/05/28/bhyve-uefi-gop-support.html
svn co svn://svn.freebsd.org/base/projects/bhyve_graphics
cd bhyve_graphics
make BHYVE_SYSDIR=/usr/src -m /usr/src/share/mk
make BHYVE_SYSDIR=/usr/src -m /usr/src/share/mk install
pkg install uefi-edk2-bhyve-20160704_1
ln -s /usr/local/share/uefi-firmware/BHYVE_UEFI.fd $vm_dir/.config/
victor_sudakov: (Default)
Дали ссылки. Пока не проверял.

Appendix B. Automating the installation using preseeding

Automatic Installation Using Kickstart

Ubuntu Server, в отличие от Ubuntu Desktop, сохранил text mode инсталлятор. Так что при отсутствии видеокарты (bhyve) можно поставить Ubuntu Server через COM-порт, а потом превратить его в десктоп командой "apt-get install ubuntu-desktop"
victor_sudakov: (Default)
Чтобы права на создаваемые и удаляемые "на лету" устройства были такие как надо:

В /etc/rc.conf.local
devfs_system_ruleset="localrules"

В /etc/devfs.rules
[localrules=10]
add path 'nmdm*' mode 0660 group dialer

/etc/rc.d/devfs restart

/dev/nmdmN[AB] удобно использовать для доступа к консолям виртуальных машин в bhyve.
victor_sudakov: (Default)
Если нежелательно бриджевать NIC виртуальной машины в bhyve с какой-то из реальных NIC хоста, то можно сделать на хосте "ifconfig tap0 192.168.1.1/30", а в соответствующей виртуалке "ifconfig vtnet0 192.168.1.2/30". Пакеты будут передаваться через tap. Но еще удобнее сделать так:

Host:

cloned_interfaces="tap0 tap1 tap2 tap3 tap4 bridge0"
ifconfig_bridge0="192.168.1.1/24 up"
autobridge_interfaces="bridge0"
autobridge_bridge0="tap*"   
dhcpd_ifaces="bridge0"


Guest:

ifconfig_vtnet0="DHCP"


Интерфейс tap(4) имеет неприятное (но документированное в мане) свойство терять IP адрес, когда виртуальная машина останавливается и соответствующий ей /dev/tapN закрывается. Назначение IP адреса на bridge(4) решает эту проблему, а заодно позволяет сделать общий LAN для виртуальных машин.

Не забывать только про sysctl net.link.tap.up_on_open=1

Еще можно использовать в bhyve vmnet вместо tap, т.к. vmnet не теряет адрес. Но вариант с bridge удобнее во всех отношениях.
victor_sudakov: (Default)
Документация на syslinux-6.01 предлагает такой пример для выбора WDS из PXE меню:

label WDS
 menu LABEL Windows Deployment Service
 com32 pxechn.c32
 append 10.1.1.4::boot\x86\wdsnbp.com -W


Так вот такой способ не работает из-за баги в pxelinux, в результате которой pxechn.c32 не понимает, что 10.1.1.4 является IP адресом, пытается его резолвить как имя в DNS, потом искать локальный файл с именем "10.1.1.4::boot\x86\wdsnbp.com", а потом возвращает ошибку "pxechn.c32: Attempting to load '10.1.1.4::boot\x86\wdsnbp.com': 2:No such file or directory"

Workaround. Если указать не адрес, а DNS имя WDS сервера, то всё работает:

label WDS
 menu LABEL Windows Deployment Service
 com32 pxechn.c32
 append wds01.your.domain.ru::boot\x86\wdsnbp.com  -W


UPD а если PXE клиент в DHCP запросе не запрашивает option 6 (например так делает реализация PXE в Oracle VirtualBox), то он ее и не получит в DHCP ACK, поэтому информация о DNS серверах не будет доступна pxelinux-у, и всё вышеописанное работать не будет.
victor_sudakov: (Default)
Если после установки VirtualBox на Windows 7 перестали приходить мультикастовые пакеты, можно увидеть командами "netsh interface ip show joins" и "netstat -rn", что все членства в мультикастовых группах переехали на виртуальный сетевой адаптер виртуалбокса. Естественно из реальной сети никакие мультикасты при этом не приходят.

Отключение виртуального адаптера VirtualBox в свойствах сети помогает (я всё равно использую только bridged режим).
netsh interface set interface "VirtualBox Host-Only Network" DISABLED

Если кто подскажет, как в Windows принудительно назначить сетевой адаптер, который будет join-иться в мультикастовые группы, welcome.
victor_sudakov: (Default)
Вторая часть: http://nuclight.livejournal.com/128712.html

Тут же помещаю свой комментарий для памяти, вдруг не пройдет модерацию у [livejournal.com profile] nuclight 

IMHO вся проблема с монолитной базовой системой надумана. Мне не мешают ни sendmail, ни bind в базовой системе, при нынешних-то объёмах дисков. Поэтому я изложу те проблемы, которые на мой взгляд более серьёзны.

1. Обновление на следующий релиз.

В пределах одного major release утилиты freebsd-update, portsnap и portmaster обеспечивают беспроблемное, технологичное поддержание системы и софта в актуальном состоянии (в том числе и jail нормально бинарно обновляются снаружи через "freebsd-update -b"). Но поддержка security ветки имеет неприятное свойство кончаться, и вот тут начинается кошмар. "freebsd-update upgrade" разве уже пригоден к применению? Единственный рабочий способ обновления - через make world. После чего применимость freebsd-update к получившейся системе уже под вопросом, а "freebsd-update IDS" ломается полностью. Отдельный вопрос - mergemaster, IMHO он слишком сложен, скажем я не представляю, как по нему тех. карту расписать. Но это всё цветочки. Самое страшное - это то, что обновление мира влечёт пересборку всех портов и никаких гарантий, что после пересборки всё будет работать как работало. У меня на домашней системе был случай, когда после работы portmaster появились дубликаты в /var/db/pkg, пришлось сносить весь /usr/local и строить заново по заранее сохраненному `portmaster --list-origins`.

Можно конечно не делать "make delete-old" после пересборки мира, но тогда не стоило и систему обновлять вообще.

2. Виртуализация

Не хватает развитых средств виртуализации. В jail нет лимитов на CPU, память и прочее, нет и нормальной инфраструктуры создания/удаления джейлов (в качестве примера хорошей инфраструктуры см. Solaris zones)

Меня также напрягает, что из VMWare ESX нельзя послать на FreeBSD guest сигнал выключиться. Не знаю почему, и можем ли мы что-то с этим сделать.

3. cvsup поломали

Наверное в связи с переходом на SVN теперь все исходники cvsup-ятся только целиком, в результате вывод "csup -L0" оказался замусорен.

src/etc/Makefile,v: Checksum mismatch -- will transfer entire file
src/sys/kern/vfs_mount.c,v: Checksum mismatch -- will transfer entire file
src/usr.bin/catman/catman.c,v: Checksum mismatch -- will transfer entire file
victor_sudakov: (Default)
В винде в отличие от Solaris или FreeBSD нет драйверов вроде lofi или md, поэтому задача смонтировать образ дискетки или жесткого диска не решается стандартными встроенными средствами. Для монтирования образов дискет мне подсказали очень удобную утилиту Virtual Floppy Drive 2.1. Ценна возможностью управления из командной строки, например у меня в автозапуск вставлен ярлык:

"C:\Program Files\vfd21-080206\vfdwin.exe" /open a: "%USERPROFILE%\Img\a.flp" /q

Видится как полноценный флоппи-диск, даже из VirtualBox доступен как 'Host Drive A:'

Profile

victor_sudakov: (Default)
Виктор Судаков

December 2024

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 11th, 2025 12:10 am
Powered by Dreamwidth Studios