Показаны сообщения с ярлыком продвинутое. Показать все сообщения
Показаны сообщения с ярлыком продвинутое. Показать все сообщения

суббота, 11 августа 2012 г.

Ezjail - легкое управление клетками в FreeBSD

Плюсы ezjail:

  • экономия места за счет создания базовой клетки на основе которой создаются все остальные (к примеру, директория basejail занимает 1,1 гигабайта, а вновь созданная клетка до запуска - 3 мегабайта), 
  • возможность легкого обновления клеток за счет обновления базовой клетки,
  • возможность базовой конфигурации новых клеток за счет использования шаблонов flavours,
  • автоматическое создание клеток в виртуальных дисках,
  • облегчение административных задач.

Пошаговая инструкция по запуску клеток с помощью ezjail:

1. Обновляем базовую систему из исходников. Кроме того, необходимо все возможные сервисы повесить на конкретные IP-адреса чтобы в будущем не было конфликтов сервисов запущенных в базовой системе и в клетках. Такими сервисами могут быть ftpd, sshd, dhcpd, syslogd, natd и прочие.

2. Устанавливаем ezjail из портов.
cd /usr/ports/sysutils/ezjail
make && make install
3. Создаем шаблон из которого будут создаваться клетки.

понедельник, 18 июня 2012 г.

Ограничение ресурсов jail в FreeBSD (память, процессор, жесткий диск)

При использовании нескольких jail вам может понадобиться ограничить доступные им ресурсы, к примеру, при оказании услуг VDS-хостинга.

Ранее не было встроенных механизмов ограничения доступных частоты процессора и оперативной памяти. В версии FreeBSD версии 9.0 появился механизм управления ресурсами RCTL (Hierarchical Resource Limits). Эта система позволяет ограничивать ресурсы как отдельным пользователям и процессам, так и целым jail.

По умолчанию, rctl не работает. Протестировать это можно командой:

/usr/bin/rctl ; echo $?

Результатом будет:

rctl: rctl_get_rules: Function not implemented
1

Для работы rctl требуется перекомпилировать ядро с определенными опциями:

options RACCT
options RCTL

После того, как система начнет работать с модифицированным ядром будет запущен демон racctd. Та же команда будет выводить результат 0, что будет означать, что функция работоспособна.

Для управления правилами используется утилита rctl. Когда она выполняется без опций, то результатом будет вывод текущих правил на стандартный выход. Существуют следующие параметры команды rctl:

пятница, 15 июня 2012 г.

Настройка и управление jail в FreeBSD.

В файле /etc/sysctl.conf можно задать ряд параметров связаных с jail:

  • security.jail.set_hostname_allowed - разрешает менять имя хоста внутри jail, если задано реальное DNS имя, то лучше запретить,
  • security.jail.socket_unixiproute_only - позволяет создвавать сокеты в jail только для доменов PF_LOCAL, PF_INET или PF_ROUTE, иначе, возвращается ошибка;
  • security.jail.sysvipc_allowed - позволяет получить доступ к глобальному System V IPC;
  • security.jail.getfsstatroot_only - если установлена 1, то в jail можно получить информацию (df) только о той файловой системе на которой создан jail;
  • security.jail.allow_raw_sockets - разрешает создавать raw sockets, что позволяет использовать ping и некоторые другие сетевые утилиты;
  • security.jail.chflags_allow - если задана 1, то в jail появляется возможность модифицировать флаги ФС, если запретить, то можно создавать неизменяемые и неудаляемые файлы.

Все эти параметры могут принимать значения 0 или 1 и записываются, к примеру, так: security.jail.chflags_allow=0.

Параметры команды jail.

Чувствую, тут требуется полный перевод man jail, но мы сделаем лишь частичный:

Start translation mode.

Утилита jail создает новую клетку или меняет существующую, дополнительно заключая в тюрьму текущий процесс внутри неё.

Доступные опции:

-d - разрешает делать изменения в разрушающейся клетке

среда, 13 июня 2012 г.

Создание и настройка jail окружения в FeeBSD

1. Создание jail.

Дабы виртуальная система была чистой и никак не зависела от основной, то создавать её мы будем из исходных текстов, что может занять довольно продолжительное время:

setenv D /usr/jails/base
mkdir -p $D
cd /usr/src
make buildworld
make installworld DESTDIR=$D
make distribution DESTDIR=$D
mount -t devfs devfs $D/dev

То есть переходим в каталог с исходниками, в качестве значения переменной JAIL указываем путь к директории, где будет располагаться jail. Далее создаем эту директорию, создаем "мир", устанавливаем его куда нужно, затем монтируем туда же файловую систему dev. Этот вариант хорош тем, что собрав "мир" один раз, мы можем достаточно быстро установить его в несколько директорий, если будет нужно создать несколько jail.

2. Настройка сети в корневой системе

Необходимо создать алиас сетевого интерфейса корневой системы, на котором будет работать jail. Каждой jail необходим свой алиас.

вторник, 8 мая 2012 г.

FreeBSD управление алиасами сетевых интерфейсов

Чтобы добавить алиас сетевого интерфейса используйте команду вида:

ifconfig em0 inet alias 192.168.0.101 netmask 255.255.255.0

Чтобы удалить алиас:

 ifconfig em0 -alias 192.168.0.101

Чтобы алиасы сетевых интерфейсов создавались автоматически при старте системы, добавьте в /etc/rc.conf строки вида:

ifconfig_em0_alias0="inet 192.168.0.101 netmask 255.255.255.0"
ifconfig_em0_alias1="inet 192.168.0.102 netmask 255.255.255.0"

понедельник, 4 июля 2011 г.

Настройка polling во FreeBSD

Не буду распространятся сильно о том, что такое polling, просто скажу о приносимой им пользе.

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

Для работы polling требуется его поддержка ядром FreeBSD. По умолчанию она отключена, поэтому необходимо перекомпилирвать ядро со следующими параметрами:

options DEVICE_POLLING
options HZ=1000

Второй параметр, в общем-то, не обязателен.

Итак, справка для тех, кто не умеет компилировать ядро FreeBSD. Идем в директорию /usr/src/sys/i386/conf и правим там файл с именем GENERIC добавляя нужные нам параметры. Затем идем в директорию /usr/src/ и выполняем команды:

make -j4 buildkernel
make installkernel
reboot

После перезагрузки можно включить polling для определенных интерфейсов командой вида (для последних версий FreeBSD):

ifconfig re0 polling

Соответственно, стоит добавить параметр polling  в настройки сетевых интерфейсов в файле  /etc/rc.conf чтобы поллинг автоматически включался после перезагрузки.

На моем стареньком селероне это дало снижение нагрузки по обработке прерываний с примерно 40 процентов до примерно одного. Довольно ощутимо.

пятница, 10 июня 2011 г.

FreeBSD обновление программ

Прежде всего следует обновить дерево портов.

Затем можно сравнить версии установленный пакетов с последними версиями из портов. Делается это командой:

pkg_version -v | grep need

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

pkg_deinstall -r mc

Однако это может не сработать и придется удалять все связанные программы по отдельности. После удаления можно установить программу  заново командой

pkg_add -r mc

с параметром -r эта команда скачивает необходимый пакет с сервера и устанавливает его.

Если вам нужно установить определенную программу не заморачиваясь на зависимости, то это можно сделать из портов предварительно выполнив команду make deinstall.

Кроме того, существует возможность автоматически обновить все необходимые программы. Сделать это вам поможет пакет portupgrade, который обновляет программы из портов. Устанавливаем:

cd /usr/ports/ports-mgmt/portupgrade
make && make install

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

portupgrade -a

Чтобы система спрашивала вашего согласия на установку очередной программы добавьте параметр "-i".

четверг, 9 июня 2011 г.

Обновление FreeBSD до 8.2

Обновление происходит из исходных кодов, поэтому прежде всего нам нужно получить необходимую версию исходников. Для этого используется утилита cvsup. Установить её можно из порта /usr/ports/net/cvsup-without-gui классической командой make && make install

Теперь следует создать конфигурационный файл supfile. В общем случае он требует минимум настроек:

*default host=cvsup5.ru.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_8_2_0_RELEASE
*default delete use-rel-suffix compress
src-all

Первая строка определяет сервер с которого будет производится загрузка исходных кодов. Также важен параметр tag= находящийся в четвертой строке. Он определяет исходники какой версии будут загружены. Варианты значений этого параметра можно найти здесь. Более подробно о параметрах конфигурационного файла можно почитать в хэндбуке.

Запуск cvsup осуществляется командой вида:

cvsup -L 2 supfile

После того, как обновятся исходники, можно приступать к обновлению "мира" и ядра.

Вначале команды в необходимой последовательности, а потом комментарии к ним.


cd /usr/src
make -j4 buildkernel
make -j4 buildworld
make installkernel
reboot
shutdown now
mergemaster -p
cd /usr/src
make installworld
mergemaster
reboot

То есть мы компилируем ядро и "мир", устанавливаем ядро, перезагружаемся, переходим однопользовательский режим (также можно сразу загрузиться в этот режим выбрав single user), запускаем утилиту mergemaster чтобы сохранить конфиги, устанавливаем "мир", восстанавливаем конфиги, перезагружаемся.

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

Далее, утилита mergemaster. Она копирует все конфигурационные файлы измененные пользователем и просто важные в указанный каталог. В процессе выполнения показывается имя конфига и отличающиеся строки в новом и старом конфигах. Можно или установить рекомендуемый кнопкой "i" или сравнить построчно оба варианта клавишей "m". Тогда экран разделится на две части, где будут отображаться два варианта конфига. После этого можно будет выбрать какой из них использовать. Придется обработать довольно большое количество файлов и это может быть занудно, поэтом можно выполнить команду mergemaster -iU, что позволит автоматически установить недостающие конфиги и заменит не измененные пользователем.

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

Чтобы убедиться в успешности обновления узнайте текущую версию FreeBSD.

После обновления системы можно обновить установленные программы.