Архив рубрики: FreeBSD: System

IPFW: Изменение правила по умолчанию без пересборки ядра

Правило по умолчанию: «запретить все, что не разрешено»:

65535 deny ip from any to any

За поведение по умолчанию отвечает системная переменная net.inet.ip.fw.default_to_accept

0 — запретить все
1 — разрешить все

Изменить переменную на лету нельзя, но можно установить ее значение в файле /boot/loader.conf

root@srv: # cat /boot/loader.conf
# SET DEFAULT IPFW’S RULE TO «ALLOW ANY TO ANY»:
net.inet.ip.fw.default_to_accept=1

Потребуется перезагрузка для применения изменений.

FreeBSD: Работа с коллекцией портов

http://pro-voip.com.ua freebsd

Скачать и распаковать коллекцию портов (утилита portsnap):

portsnap fetch extract

-данная команда выполняется один раз после установки свежей ОС, если в процессе установки вы не отметили галочкой установку портов сразу; либо если вы потерли каким-то образом свою коллекцию портов. В последующем же, чтобы установить порт, достаточно выполнить три действия:

1. Обновить коллекцию портов:

portsnap fetch update

2. Найти нужный порт:

cd /usr/ports
make search name=rkhunter

3. Установить нужный порт:

cd /usr/ports/security/rkhunter
make install clean

 

Вся коллекция портов находится в /usr/ports. Все приложения, описаные в коллекции портов, сгруппированы в категории (databases, deskutils, net-mgmt и т.д.).

 

Поиск

Поиск необходимого порта по имени (ищет совпадения в названии порта). Команда выполняется в директории /usr/ports:

make search name=rkhunter

Поиск порта по описанию (ищет совпадения и в названии и в описании порта, полезно, если не помнишь, как приложение называется, но помнишь хоть примерно, что оно должно делать или с чем оно связано). Команда выполняется в директории /usr/ports:

make search key=hunter

 

Описание порта

Пример, порт /usr/ports/security/rkhunter

Порт — директория с набором файлов, в которых находится достаточная информация для сборки и установки приложения. Самих исходных кодов порт не содержит, но знает, где их найти.

  • Makefile — содержит базовые команды и настройки для сборки порта. Здесь же и указывается (в переменной MASTER_SITES=), откуда скачивать исходники (src) приложения . Исходники приложения представляют собой сжатый архив с необходимыми src-файлами для сборки и установки.
  • distinfo — содержит контрольные суммы для файлов, которые скачиваются при сборке порта. Таким образом производится проверка на целосность.
  • files — директория содержит дополнительные патчи и исправления, которые в ходе сборки приложения накладываются на разархивированные исходники.
  • pkg-descr — описание приложения
  • pkg-message — содержит сообщения, адресованое от разработчиков администратору. В нем может указываться поздравление с установкой, необходмые дальнейшие шаги после установки, рекомендации и т.д. Файл pkg-message необязателен.
  • pkg-plist — перечень файлов, которые плодит устанавливает порт в системе.
  • В процессе сборки в директории порта создается рабочая директория work.

 

Описание процесса установки приложения с порта

  1. Конфигурирование опций порта
  2. Загрузка архива с исходными файлами приложения
  3. Проверка загруженых файлов на наличие ошибок
  4. Извлечение исходных файлов с архива в рабочую директорию
  5. Наложение патчей с директории files, если такое имеются и необходимы
  6. Проверка и установка зависимостей
  7. Запуск сценария configure, если такой есть в приложении
  8. Сборка приложения из исходных файлов
  9. Установка приложения (копирование скомпилированных бинарников, файлов конфигурации и т.п. в необходимые места в файловой системе — а что это за файлы и в какие необходимые места, описано в  pkg-plist)
  10. Регистрация приложения в /var/db/pkg — да, у нас получился обыкновенный пекедж.

 

Другие команды

Команды выполняются в директории порта. «make install clean» запускает поочередно цикл команд, которые проводят через все этапы установки приложения, описаные выше. При необходимости можете запускать эти команды вручную. Например, если вам нужно только собрать, но не устанавливать приложение, используем «make build«, который выполнит с 1 по 8-й пункты (см. описание процесса выше). Если нужно только скачать исходники, используем «make fetch«.

make config
— конфигурирование порта — если есть опциональные параметры, или дополнительные модули, здесь их можно включить/исключить.

make config-recursive
— конфигурирование порта и его зависимостей. Процесс сборки бывает длительным, и зависимостей бывает много. Для того чтобы перед установкой зависимостей каждый раз процесс не прерывался и не ждал от вас решения установить те или иные параметры для зависимостей, хорошо сразу все сконфигурить и оставить приложение собираться в одиночку.

make showconfig
— посмотреть, какие параметры выбраны.

make rmconfig
— удалить выставленные пользователем параметры, т.е. сбросить конфиг в дефолт — отмеченные изначально останутся отмечеными, отмеченные пользователем — удаляются.

make fetch
— загрузка архива с исходниками.

make fetch-recursive
— загрузка архивов с исходниками порта и зависимостей.

Откуда загрузка? — указано в Makefile в переменной MASTER_SITES=. Путей может быть несколько.
Куда загружаются исходники? — в /usr/ports/distfiles

make checksum
— проверка целосности скачаного архива с исходными файлами приложения

make extract
— извлечение скачаного архива — директории порта создается рабочий каталог work, куда и извлекаются исходники.

make patch
наложение или накладывание? Применение патчей с директории files.

make depends
— проверка зависимостей.

make configure
— если в приложении есть свой сценарий configure, он выполняется

make build
— компиляция кода.

make install
— установка приложения и регистрация его в /var/db/pkg.

make clean
— удаление рабочей директории work (архив с исходниками остается в /usr/ports/distfiles).

make distclean
— удалить архив с исходниками.

 

Источники информации

https://www.freebsd.org/doc/handbook/ports-using.html
http://freebsdguide.ru/_11/_6/

FreeBSD: Custom kernel — Создаем «свое» ядро

 

1. Наличие исходников

Перед тем как создавать свое ядро, необходимо загрузить исходники системы, например, с помощью subversion. Или же загрузить исходники при установке… В общем, неважно как, но они должы появиться у вас в системе.

Проверяем директорию /usr/src — если она пустая, то исходников нет (если, конечно, вы их не переместили куда-нибудь).

В /usr/src/sys находятся поддиректории с названиями поддерживаемых системой архитектур — amd64, i386,powerpc и др. Все, что находится в определенной поддиректории, относится только к определенной архитектуре. В каждой такой поддиректории находится поддиректория conf, которая содержит GENERIC конфигурацию ядра для этой архитектуры.

 

2. Файл конфигурации ядра

 

— Если нужно урезать конфигурацию ядра:

Советуют не редактировать GENERIC, а сделать копию и производить изменения уже над копией. Существует соглашение использовать для названия заглавные буквы.

 

— Если нужно расширить конфигурацию ядра:

Можно также скопировать GENERIC в свой файл и дописать нужные опции, а можно поступить следующим образом:

создать  свой файл конфигурациии ядра — например, PROVOIP — там указать только дополнительные опции и подключить к нему  файл GENERIC с помощью директивы include.

/usr/src/sys/amd64/conf/PROVOIP

 

3. Сборка и установка Custom kernel

Собираем с указанием конфигурационного файла ядра:

Устанавливаем тоже с указанием конфигурационного файла ядра:

-эта команда скопирует новое ядро в /boot/kernel/kernel, а старое сохранит в /boot/kernel.old/kernel.

Перезагружаемся и загружаемся с новым ядром.

03 — Сервер на флешке. Jails

1. Обновляем коллекцию портов:

2. Обновляем дерево исходных кодов:

3. Добавляем опции в /etc/make.conf:

4. Собираем мир:

5. Редактируем конфиг ezjail.conf:

6. Создаем basejail в ezjail-admin:

7. Разворачиваем шаблоны для jail:

8. Разворачиваем дерево портов в basejail:

9. Создаем jail в ezjail предварительно зацепив IP алиасом:

10. Запускаем джейлы:

 

02 — Сервер на флешке. ZFS

Размечаем дисковое пространство и создаем зеркало ZFS

Я использую для этого формат размещения таблицы разделов GUID Partition Table (GPT).

Для разметки с использованием GPT применяется утилита gpart.

1. Убираем старую схему разметки:

2. Создадим схему GPT на диске:

3. Создаем партиции с ZFS:

4. Создаем zpool mirror:

5. Создаем файловые системы:

01 — Сервер на флешке. NanoBSD

NanoBSD. Начало

NanoBSD — утилита для создания образа FreeBSD для последующего его использования на Flash-картах памяти.

Вкратце, как этим пользоваться.

nanobsd — это скрипт nanobsd.sh, находится здесь: /usr/src/tools/tools/nanobsd/. С помощью этого скрипта и дополнительных файлов кастомизации (или без них) создается образ FreeBSD, который потом заливаем с помощью dd (или pv) на флешку.

После этих манипуляций флешка делится на 3 части по умолчанию:

  • образ NanoBSD #1
  • образ NanoBSD #2
  • партиция конфигурационных файлов, которая монтируется в /cfg директорию.

Эти партиции монтируются в режиме read-only при загрузке системы, с /cfg копируются конфигурационные файлы в /etc, затем /cfg отмонтируется.

/etc и /var директории — это md — (malloc) диски памяти — виртуальные диски в оперативной памяти.

Если в процессе работы необходимо сделать изменения в конфигурационных файлах директории /etc, эти изменения будут работать ровно до перезагрузки сервера, поскольку изменения затрутся файлами из директории /cfg. Чтобы сохранить изменения, нужно смонтировать директорию в режиме read-write, скопировать измененные файлы туда и отмонтировать /cfg. Чтобы автоматизировать данные  действия существует скриптик «wr«.

Минимальный набор команд для создания образа:

Custom configuration file

Праметры образа можно настроить, подключив к сценарию сборки nanobsd.sh свой конфигурационный файл:

Конфигурационный файл состоит из конфигурационных опций, являющимися переменными по умолчанию.

Наиболее важные следующие:

  • NANO_NAME=MS_9.2.CLANG — Имя, которое вы присваиваете сборке NanoBSD. Это имя NanoBSD использует для присвоения имен рабочим каталогам и файлу образа диска.
  • NANO_SRC=/usr/src — Местоположение дерева исходного кода, который NanoBSD использует для создания образов дисков. Если вам требуется указать другое местоположение, измените этот параметр.
  • NANO_TOOLS=tools/tools/nanobsd — Сценарии и файлы NanoBSD считаются частью исходного кода FreeBSD. Это означает, что при обновлении исходников файлы NanoBSD, естественно, также обновятся. Если вы внесете какие-либо изменения в файлы NanoBSD, они затрутся. При изменении базовых компонентов NanoBSD желательно скопировать каталог NanoBSD куда-нибудь за пределы дерева исходного кода.
  • CONF_BUILD=’ ‘ — Любые параметры, определенные здесь, будут использованы на этапе make buildworld. Полный список параметров, допустимых в вашей версии FreeBSD, вы найдете на странице руководства src.conf(5).
  • CONF_INSTALL=’ ‘ — Любые параметры, определенные здесь, будут использованы на этапе make installworld. Полный список допустимых параметров вы также найдете на странице руководства src.conf(5).
  • CONF_WORLD=’ ‘ — Значение этого параметра используется как ключи в ходе всего процесса сборки.
  • NANO_KERNEL=GENERIC — если захотите собрать нестандартное ядро для своего образа NanoBSDкажите его здесь. Это должно быть имя файла в каталоге /usr/src/sys/i386/conf.
  • NANO_DRIVE=da0 — Нужно указать имя файла устройства, соответствующего flash-диску. Чтобы узнать это, можно загрузить целевое устройство и посмотреть, под каким именем оно видит эту карту.
  • NANO_MEDIASIZE=15665140 — Емкость вашего flash-диска в 512-байтовых секторах.
  • NANO_IMAGES=2 — NanoBSD позволяет создать несколько образов операционной системы на одном flash-диске. Это может упростить обновление, но требует в два раза больше пространства. Поскольку в наши дни flash-диски достаточно емки и способны вместить практически любой образ FreeBSD, который вы можете собрать, можно и не изменять это значение.
  • NANO_CONFSIZE=204800 — Дополнительно NanoBSD создает дисковый участок для хранения конфигурационных файлов, как показано ниже. Данный параметр определяет размер этого участка в 512-байтовых секторах. 204800 секторов эквивалентно 100 МБ.
  • NANO_RAM_ETCSIZE=204800 — Объем дискового пространства в 512-байтовых секторах, выделяемого для каталога /etc.
  • NANO_RAM_TMPVARSIZE=204800 — Объем дискового пространства, выделяемого для каталогов /var и /tmp.
  • NANO_SECTS=63; NANO_HEADS=255 — Здесь определяется геометрия используемого flash-диска.
  • NANO_BOOTLOADER=»boot/boot0″

Также в конфигурационный файл можно добавлять свои функции (например, функция add_port (), представленная в нижеследующем примере).

Пример конфигурационного файла nanobsd.conf.custom:

Каталог сборки NanoBSD

Для сборки NanoBSD используется подкаталог каталога /usr/obj, имя которого задано параметром NANO_NAME. NanoBSD использует файлы, имена которых начинаются с _., как маркеры, протоколы и временные каталоги. Несмотря на лаконизм сообщений, наблюдаемых в процессе сборки, в действительности NanoBSD не скрывает вывод используемых команд, просто он перенаправляется в другие файлы (_.bk — лог процесса сборки ядра, _.bw — лог процесса сборки мира etc).

Лог создается для каждого действия, выполненного скриптом — например, про установку порта ftp/wget можно узнать из файла _.cust.add_port_ftp_wget.

_.disk.full — полученый образ системы.

Если после завершения работы скрипта вы не увидите в папке /usr/obj/имя_образа образа _.disk.full, значит процесс сборки потерпел неудачу. Причину нужно искать в логах.

 

Некоторые моменты

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

В nanobsd.sh есть пара ключей, которые могут упростить нам жизнь, пропуская ресурсоемкие задачи:

  • -k — пропустить процесс сбоки ядра
  • -w — пропустить процесс сбоки мира
  • -b — пропустить процесс сбоки и ядра, и мира

 

Спасибо следующим сайтам за предоставленную информацию:

http://freebsd.org
http://freebsdguide.ru

00 — Сервер на флешке. Дано

Дано:

Hardware:
Dell PowerEdge R210
Processor: Intel Xeon X3430 2.40GHz
Hard: 2 x WDC WD1003FZEX-00MK2A0 1ТБ
RAM: DDR3 2 x 2048 MB
Network: 2 x Broadcom NetXtreme II BCM5716 1000Base-T

Flash card:
JetFlash Transcend 8GB

Ожидаемый результат:

  • Базовая система FreeBSD на флешке;
  • Зеркальный массив (zpool mirror) с двух дисков (по 1ТБ каждый), файловая система ZFS;
  • Виртуализация представлена jail’ами, реализация с помощью ezjail; каждый jail под определенную задачу (mail, hosting etc.)

 

Обновление системы

1. Устанавливаем subversion:

2. Качаем исходники:

3. Собираем новый мир со свежих исходников. Прежде всего соберется новый компилятор с нужными ему библиотеками, а затем и все базовое программное обеспечение. Результаты сборки помещаются в /usr/obj:

4. Собираем ядро:

5. Устанавливаем ядро:

6. Перезагружаемся и загружаемся в однопользовательском режиме:

7. Если система отформатирована в UFS, выполняем следующие действия: монтируем корень в режиме read-write, затем монтируем все остальные файловые системы и подключаем swap:

8. Запускаем mergemaster для обновления конфигов системы; mergemaster сравнивает файлы в каталоге /etc, с новыми файлами /usr/src/etc, выявляет различия между ними и спрашивает, что делать — устанавливать новые файлы, оставить старые или отложить этот вопрос на потом.

mergemaster запускаем 2 раза — один раз перед установкой мира, чтобы удостовериться, что система может установить новые бинарники без ошибок, второй раз — после установки мира для синхронизации остальных конфигурационных файлов.

Ключ -p  задает режим предварительной оценки. Система в том числе проверяет наличие необходимых для установки мира пользователей и групп:

mergemaster устанавливает временный каталог /etc в /var/tmp/temproot, где сохраняются новые конфигурационные файлы, которые затем будут сравниваться с существующими.

9. Устанавливаем мир:

10. Запускаем mergemaster второй раз:

11. Перезагружаемся в систему с новым ядром и новым миром:

!!! Важно соблюдать порядок сборки и установки ядра и мира !!!