Pull to refresh

Запуск FreeBSD в облаке Microsoft Azure

Reading time4 min
Views10K
Поскольку FreeBSD 10 наконец-то имеет поддержку Hyper-V уже в стандартной поставке релиза x64 ( для x86 требуется кое-что подправить ), но в Microsoft Azure прямой поддержки создания виртуальной машины на базе FreeBSD пока не присутствует, я решил рассказать — как установить FreeBSD 10 в azure. Ничего особо сложного нет, разве что заливать много в облако придётся. И так — по порядку.

Брать iso и ставить с нуля смысла я не вижу, так как FreeBsd комьюнити выпускает готовые образы виртуальных машин с последними/стабильными релизами. Там и возьмём нужный нам, уже инсталированый образ в *.VHD формате. Имейте ввиду — *.VDHX azure пока не поддерживает.
С другой стороны, если у вас уже есть установленная система — можно использовать и её.

И так, берём x64 релиз FreeBSD 10 в формате *.VHD с ftp.FreeBSD.org, x86 сборка просто так не запустится — имейте ввиду.
Выбор образов там большой, можно и stable и current и даже 11 попробовать, но нам же для дела. Берём release. Кстати, образы доступны и в форматах QEMU и VMWARE.

Первое с чем мы столкнёмся — диск для azure должен быть fixed, а не dynamic. То есть он должен быть ровно такого размера, как в нём записано. Динамическое расширение не поддерживается azure. Наш образ Freebsd распакованным занимает ~900mb, а диск там размечен как 20gb.
Хорошая новость в том, что команда Add-AzureVHD из Azure PowerShell умеет налету преобразовывать dynamic в fixed. Залить 900mb вместо 20gb — большая разница. Ей мы и будем пользоваться в конце.

Второе. Поскольку образ «голый», надо его немного настроить для работы в azure. Для этого можно использовать встроенный в Windows гипервизор Hyper-V или Oracle VirtualBox. У меня процессор SLAT не поддерживает (Windows 8 требует SLAT для гипервизора, а ставить только ради этого Windows Server 2012R2 не хотелось), потому был выбран VirtualBox. Но видимо qemu ( комьюнити freebsd похоже использует его для создания VHD образа) или VirtualBox как-то между собой не дружат. Приходится пересобирать диск с помощью сторонней утилиты VhdResize. В ней мы меняем размер диска с 20480mb на 1mb больше, до 20481mb. При этом мы оставляем тип диска как Dynamic. Процесс это не долгий, так что ничего страшного. Потребуется данная ерунда только для VirtualBox — вполне возможно, что Hyper-V подцепит диск и так (не могу проверить).

Создаём виртуальную машину с нашим, уже модифицированным диском и загружаемся в FreeBSD.

И тут у нас появляется выбор. Мы можем создать vm image (виртуальную машину — шаблон), которая будет сама настраиваться под azure или vm disk — тут вы сами отвечаете за конфигурацию системы под azure.

И так, что нам надо для создания диска, где мы сами всё настроим:

Создаём файл /etc/rc.conf и пишем там:

ifconfig_hn0="SYNCDHCP"
hostname="yourvmname.cloudapp.net"
sshd_enable="YES"

hn0 — это будет интерфейс виртуального сетевого адаптера в azure (в VirtualBox'е он будет em0, на случай если вам надо что-то загрузить из сети при настройке).
yourvmname — это имя, которое вы потом дадите виртуальной машине в azure. Потом можно поменять, так что именно в rc.conf его выбрать можно наобум.
sshd_enable=«YES» — без этого не запустится sshd демон. И так понятно.

редактировать можно через редактор ee (vi уж сильно заморочный редактор):

cd /etc
ee rc.conf

далее идём в /etc/ssh и правим sshd_config на предмет разрешения логина для рута. Ищем #PermitRootLogin no, раскомментируем и пишем yes, получаем PermitRootLogin yes. Иначе толку от sshd не будет — под рутом не зайдём.
Также надо установить пароль для рута через passwd. По умолчанию его нет.

Смотрите сами по поводу разрешения логина для рута — можете создать пользователя для ssh и логин рута не разрешать.

Вот и всё для создания vm disk'a.

Если же вы решаете желаете делать vm image (образ), что в идеологии запуска машин в облаке наиболее правильное решение, нам потребуется совсем другое.

Берём WALinuxAgent. Он нужен для связи виртуальной машины с гипервизором azure и настройки системы (provision). Устанавливаем в систему: python27, py27-asn1, sudo, копируем в систему waagent в папку /usr/sbin и устанавливаем его: /usr/sbin/waagent -install.
Более подробно о том, что делает WALinuxAgent можно почитать на их страничке на github.

в rc.conf нам потребуется добавить только запуск sshd и сеть:

ifconfig_hn0="SYNCDHCP"
sshd_enable="YES"


waagent сам добавит запуск своего демона в rc.conf при инсталяции.

Вот и всё для создания vm image.

На данный момент waagent стартует с некоторыми проблемами (не всё делает) и команда его активно фиксит по найденным мной багам.

Если вы хорошо разбираетесь в FreeBSD — сами всё под себя можете донастроить. Я, например, убираю задержку при загрузке системы — зачем ждать загрузки лишние 10 секунд если никто всё равно ничего там нажать не сможет.

Для этого надо будет создать файл loader.conf в папке /boot и добавить в него:

beastie_disable="YES"
autoboot_delay="-1"

И так, заканчиваем настройку и shutdown -p now

Третье. Нам надо залить этот наш диск в azure. Заходим в azure -> storage -> создаём storage account (если нет) -> контейнер (если нет).

Открываем Azure PowerShell, авторизуемся (мне показалось, что удобнее всего через Certificate method).

И заливаем диск в azure storage:

Add-AzureVhd -Destination http://вашstorage.blob.core.windows.net/имяконтейнера/имядиска.vhd -LocalFilePath с:\vhd\имядиска.vhd


Четвёртое. Всё просто. Заходим в Virtual Machines -> Disk или VM Image и создаём диск или образ из того файла, что мы залили в storage.

Создание диска:

image

Создание vm образа:



Далее переключаемся в virtual machines и создаём машину с нашим диском/образом. Всё должно теперь работать.

Если вы изначально создавали vm imаge, не создавайте с ним дисков — не сможете зайти в систему. Она запустится, но будет недоступна из вне. И наоборот тоже не надо. В скором времени я надеюсь сделать порт для WALinuxAgent.

А вот и готовый образ в Microsoft Depot. Берём, ставим и никаких гвоздей.

Вот собственно и все сложности с установкой FreeBSD в azure.
Tags:
Hubs:
Total votes 28: ↑22 and ↓6+16
Comments17

Articles