Pull to refresh

Установка FreeBSD на сервер в Hetzner.de

Hosting


После разочарования в Serverloft поиск провайдера был активно продолжен, и после долгих дискуссий было решено остановиться на hetzner.de. Небольшие недостатки есть, но в целом отзывы о нем очень положительные. Разумеется, требование к серверам было то же — возможность установить FreeBSD. Официально Hetzner не поддерживает автоматическую установку FreeBSD, но уважаемый %username% подсказал, что у них в вики есть статья по установке FreeBSD, используя их Rescue систему. Я бегло проглядел статью в вики — вроде все понятно. Итак, сервер приобретен, подготовлены скрипты для деплоя всего и вся, но… Оказалось, что не все так просто…

Спойлер для тех, кому лень читать полностью: негатив в посте отсутствует, много извращений и хеппи-энд присутствуют :)




Шаг 1: Подготовка


Начнем с того, что официально заявляет нам Hetzner — FreeBSD успешно протестирована на следующих серверах: EQ4, EQ6, EQ9, при условии, что они работают на следующих чипсетах:

* MSI K9AG Neo2 (MS-7368)
* MSI K8T Neo2 — F (MS-7032)
* MSI K8MM3-V (MS-7181)
* MSI KA780G (MS-7551)
* MSI K9NBPM2-FID (MS-7252)

Работа этой ОС на других серверах не гарантируется. Я взял EQ6 (Core i7, 12Gb RAM, 2x1.5 TB HDD), работавший на MS-7032. Следовательно все должно быть нормально. Проверить это дело можно из под любого пре-установленного линукса, используя dmidecode:

# dmidecode | grep-A 3 "DMI type 1,"
Handle 0x0001, DMI type 1, 25 bytes
System Information
Manufacturer: MSI
Product Name: MS-7032
#


Шаг 2: Спасите!..


Первым делом, нужно перевести сервер в Rescue-режим. Для этого нужно залогиться в панель управления (https://robot.your-server.de/server), выбрать Main functions -> Servers, нажать на нужный сервер в списке, и на вкладке Rescue выбрать ОС (в нашем случае FreeBSD) и сделать нелегкий выбор между 32 и 64 bit. При нажатии на «Activate Rescue system» система выдаст пароль — его нужно сохранить. Теперь нужно перезагрузить сервер (в панели: Reset -> Execute a automatic hardware-reset), чтобы он вошел в Rescue mode при загрузке.

Итак, сервер ребутнулся. Заходим с юзером root и сохраненным из админки паролем. Видим приглашение:

FreeBSD 8.0-STABLE (GENERIC) #1: Tue Mar 9 12:36:22 UTC 2010

Welcome to mfsBSD, the memory based FreeBSD distribution.


Мы получили сервер с запущеным на нем дистрибутивом mfsBSD — минималистичным дистрибутивом, который полностью работает из оперативной памяти. Казалось бы — осталось запустить sysinstall, тяп ляп и в дамки… Но тут есть небольшая (откровенно говоря — большая) проблема — sysinstall в mfsBSD не загружается на ранних этапах init с нужными флагами, а значит не имеет доступа к разметке дисков. Для нас это означает следующее — для того, чтобы можно было установить систему — на хардах уже должны присутствовать FreeBSD'шные слайсы и диск должен быть предварительно размечен. Следовательно, придется делать это вручную.

Шаг 3: HardЖесть как она есть


Смотрим, какие диски у нас есть:

rescue# ls /dev/ad*
/dev/ad4 /dev/ad4s1 /dev/ad4s1a /dev/ad4s1b /dev/ad6 /dev/ad6s1 /dev/ad6s2 /dev/ad6s3
rescue#


ad4 и ad6. Будем устанавливать на первый — ad4.
Сначала вытираем нулевой сектор и пишем информацию о том, что слайс FreeBSD займет весь диск:

rescue# fdisk -BI /dev/ad4
******* Working on device /dev/ad4 *******
fdisk: Class not found
rescue#


Не пугайтесь ошибки «Class not found», просто проигнорируйте. Теперь устанавливаем загрузчик и делаем лейбл для слайса:

rescue# bsdlabel -wB /dev/ad4s1

Теперь нам предстоит отредактировать файл, в котором описывается разметка диска. Файл откроется в дефолтном редакторе — vi. Если вы с ним не очень дружите — можно переключиться, например, на редактор ee:

setenv EDITOR /usr/bin/ee

Итак, редактируем файл:

rescue# bsdlabel -e /dev/ad4s1

Файл выглядит следующим образом (изначально):

# /dev/ad4s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 2930277089 16 unused 0 0
c: 2930277105 0 unused 0 0 # "raw" part, don't edit


Я счел правильным (для моих задач) разбить диск следующим образом:

/ — 10G
swap — 4196M
/tmp — 10G
/var — 500G
/usr — все остальное

Соответственно, конфигурация получилась такая:

# /dev/ad6s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 10G 16 4.2BSD 0 0
b: 4196M * swap 0 0
d: 10G * 4.2BSD 0 0
e: 500G * 4.2BSD 0 0
f: * * 4.2BSD 0 0


Каждая буква означает раздел (они создаются в «алфавитном» порядке, т.е. «a» будет физически ближе к началу диска, чем «b»). Обратите внимание, что значение «с:» отсутствует. Если я правильно помню — оно зарезервировано под саму таблицу разделов и его нельзя использовать в разметке.
Сохраняем файл и возвращаемся обратно в консоль. Теперь, согласно этим настройкам надо создать файловые системы на диске:

newfs /dev/ad4s1a
newfs /dev/ad4s1b
newfs /dev/ad4s1d
newfs /dev/ad4s1e
newfs /dev/ad4s1f

Если вы хотите использовать SoftUpdates, то добавляйте после newfs флаг -U при создании нужных разделов.

Побегут страшные циферки, и в итоге мы получим диск с файловой системой ufs2. Казалось бы — «ура, даешь sysinstall»? Ан нет, у нас ведь уже есть раздел /, но он принадлежит mfsBSD. А нам нужно, чтобы установка шла на свежеразбитый диск, а не в память. Выход был найден простой — смонтировать диск. Так как мы уже создали нужные разделы, то будем их монтировать, скажем, в /mnt. Для этого надо создать там папки для них:

mkdir /mnt/tmp
mkdir /mnt/var
mkdir /mnt/usr


А теперь маунтим:

mount /dev/ad4s1a /mnt
mount /dev/ad4s1d /mnt/tmp
mount /dev/ad4s1e /mnt/var
mount /dev/ad4s1f /mnt/usr

И только теперь можно запускать sysinstall.

Шаг 4: Sysinstall? О, да!


В sysinstall мы выбираем Custom установку. В ней первым делом идем в Options и меняем путь для установки — параметр «Install Path» — в нашем случае вместо / там надо указать /mnt. Label и Partition трогать не стоит, мы там все уже сделали. В Distributions выбираем Minimal — я так и не понял почему, но так рекомендует hetzner в дебрях своего вики. Далее выбираем Media — откуда устанавливать систему — и тут нас ожидает приятный сюрприз: у Hetzner есть установочные образы FreeBSD на внутреннем NFS сервере. Выбираем NFS и указываем адрес, соответствующий версии, которую хотим установить:

7.2-RELEASE — 32-bit — 213.133.99.100:/nfs/freebsd/7.2_32
7.2-RELEASE — 64-bit — 213.133.99.100:/nfs/freebsd/7.2_64
7.3-RELEASE — 32-bit — 213.133.99.100:/nfs/freebsd/7.3_32
7.3-RELEASE — 64-bit — 213.133.99.100:/nfs/freebsd/7.3_64
8.0-RELEASE — 32-bit — 213.133.99.100:/nfs/freebsd/8.0_32
8.0-RELEASE — 64-bit — 213.133.99.100:/nfs/freebsd/8.0_64

Указав NFS раздел, выбираем 7-й пункт «Commit» и у нас начинается установка. После завершения установки нужно выйти из sysinstall, но ребутиться в готовую систему еще рано…

Шаг 5: А теперь напильничком…


Теперь нужно настроить установленную ОС.

Для этого лучше перейти в файловую систему нашей ОС:

chroot /mnt

Первым делом нужно отредактировать /etc/fstab и прописать в него разметку диска, которую мы сделали раньше, чтобы все разделы подмонтировались при старте. Исходя из конфигурации, которую я сделал, у меня получился следующий /etc/fstab:

/dev/ad4s1a / ufs rw 1 1
/dev/ad4s1b none swap sw 0 0
/dev/ad4s1d /tmp ufs rw 1 1
/dev/ad4s1e /var ufs rw 1 1
/dev/ad4s1f /usr ufs rw 1 1


Затем, нужно переписать дефолтное ядро в нужное место, иначе система при загрузке его не найдет:

cp -Rp /boot/GENERIC/* /boot/kernel/

Теперь нам нужно задать настройки сети. Смотрим ifconfig'ом, какая у нас сетевуха/маска подсети/гейтвей и редактируем rc.conf:

# Задаем хостнейм
hostname="my.server.com"
# Включаем SSH
sshd_enable="YES"
# Настраиваем сетевую карту re0
ifconfig_re0="inet 1.1.1.1 netmask 255.255.255.0"
# Настраиваем гейтвей
defaultrouter="1.1.1.254"


Так же, мы наверняка хотим, чтобы на сервере работал DNS. Для этого создаем /etc/resolv.conf и добавляем в него:

# DNS сервера hetzner.de
nameserver 213.133.98.98
nameserver 213.133.99.99
nameserver 213.133.100.100


Еще неплохо будет подумать, каким образом мы будем логиниться в систему. Есть два варианта:

Unix-way:

Добавляем в систему юзера, которым будем логиниться, используя adduser, и добавляем его в группу wheel.

Dummy-way:

Разрешить доступ руту по SSH (по умолчанию в FreeBSD рут не может логиниться удаленно). Для этого нужно в /etc/ssh/sshd_config установить параметр «PermitRootLogin» в «yes».

Я так же установил в /etc/ssh/sshd_config параметр «UseDNS» в значение «no», т.к. меня раздражает задержка при логине в систему.

И, напоследок, меняем пароль рута на свой:

passwd

Все, настройка закончена. Теперь нужно выйти из чрута (Ctrl + D), отмонтировать разделы:

umount /mnt/tmp
umount /mnt/var
umount /mnt/usr
umount /mnt

И перезагрузить сервер:

init 6

Если все прошло хорошо — через несколько минут загрузится наш сервер, с настроенной FreeBSD.

Шаг 6: Бонус-трек


На сервере, который я устанавливал было два диска, при установке я использовал только один. Со вторым диском есть варианты:

1. Докупить хардверный рейд-контроллер и сделать RAID 1.
2. Сделать софтверный RAID 1.
3. Использовать второй диск для бекапов.

Первый вариант ничего не изменяет в данном руководстве, просто нужно купить контроллер и собрать рейд до начала установки. Второй вариант, имея большой опыт с софтверными рейдами и попытками их восстановления, я счел бесполезным. Я у себя реализовал третий вариант, следующим образом:

Чтобы sysinstall мог создавать разделы на диске из под работающей системы, нужно поменять один параметр в sysctl (меняется динамически):

pluto# sysctl kern.geom.debugflags=16
kern.geom.debugflags: 0 -> 16
pluto#


Теперь запускаем sysinstall, в нем Configure -> Fdisk -> ad6 (или тот диск, который хотим использовать под бекапы). Указываем слайсу занять весь диск (A) и выходим (Q). На вопрос о загрузчике отвечаем «Leave the Master Boot Record untouched». Затем идем в Label, создаем раздел (С), определяем ему точку монтирования (например /backups), создаем файловую систему (W) и выходим (Q).

Разумеется, нужно чтобы раздел монтировался при каждой загрузке сервера, добавляем запись в /etc/fstab:

/dev/ad6s1d /backups ufs rw 1 1

И подключаем его:

mount -a

Теперь, в «df -h» можно любоваться большим разделом /backups и начинать настраивать бекапы.

P.S. При написании статьи были использованы вики хетцнера, и пару статей найденных в гугле, однако они лишь помогли понять направление — многие описанные настройки пришлось узнавать методом научного тыка. В принципе, этот материал можно считать step-by-step руководством по установке, после написания статьи я переустановил свой сервер еще раз, копипастом из этой статьи — все прошло гладко.
P.P.S. Вот и сказочке конец, кто доскроллил — молодец. Спасибо за внимание.
Tags: хостингfreebsdhetzner
Hubs: Hosting
Total votes 71: ↑64 and ↓7 +57
Comments 57
Comments Comments 57

Popular right now