понедельник, 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 процентов до примерно одного. Довольно ощутимо.

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

Как узнать сколько свободного места на жестком диске?

Я нашел единственный способ узнать сколько свободного места осталось на жестких дисках. Это команда df -H

Если у вас несколько жестких дисков и вы хотите узнать сколько суммарно свободного места осталось, то выполните команду с параметром "-c", то есть df -Hc

пятница, 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.

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

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

Настройка dhcp клиента dhclient в FreeBSD

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


ifconfig_fxp0="DHCP"

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

dhcp_program="/sbin/dhclient"
dhcp_flags=""

Также существует ряд параметров командной строки:


-b Заставляет dhclient перейти в режим фоновой работы.
-c file Определяет альтернативное положение конфигурационного файла.
-d Заставляет dhclient всегда работать на переднем плане.
-l file Определяет альтернативное положение файла с данными о предыдущих полученных конфигурациях.
-q Заставляет dhclient быть менее многословным при загрузке.
-u Заставляет dhclient не принимать конфигурации с неизвестными параметрами в них. По умолчанию, DHCP клиент принимает такие конфигурации.

Напомню, что настройки клиента по умолчанию находится в файле /etc/dhclient.conf А предыдущие полученные настройки сетевых интерфейсов в файлах /var/db/dhclient.leases.IFNAME, где IFNAME - имя интерфейса.

Более подробно о параметрах файла dhclient.conf можно прочитать в мане dhclient.conf(5).

Можете обратить своё внимание на мой пост про настройку DHCP сервера в FreeBSD.

воскресенье, 5 июня 2011 г.

Изменение mac адреса в FreeBSD

Для того чтобы изменить mac адрес сетевой карты я всегда прописывал команду
ifconfig re0 ether 00-00-00-00-00-01
в какой-нибудь стартовый скрипт, к примеру в /etc/rc.d/ipnat

Но оказалось все проще, можно задавать этот параметр прямо из /etc/rc.conf следующим образом
ifconfig_re0="ether 00:00:00:00:00:01"

Настройка dhcp сервера freebsd

Если вы давно ничего не устанавливали, то прежде всего стоит обновить порты.

После этого переходим в каталог /usr/ports/net/isc-dhcp41-server (последняя версия на момент написания заметки) и выполняем классическую команду:

make && make install

После того, как процесс установки dhcp сервера закончится, необходимо перейти к его конфигурации. Для этого правим файл /usr/local/etc/dhcpd.conf
Стоит закомментировать все строки и сконфигурировать сеть с нуля. Выглядит это все примерно так:

subnet 192.168.0.0 netmask 255.255.255.0 {
   range 192.168.0.100 192.168.0.200;
   option routers 192.168.0.55;
   option domain-name-servers 172.16.1.40, 172.16.1.41;
   default-lease-time 36000;
   max-lease-time 72000;
}

То есть вы указываете подсеть, маску, диапазон адресов, роутер(ы) по умолчанию, DNS сервера, время, на которое выдается адрес хосту.

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

host username {
   hardware ethernet 00:00:00:00:00:00;
   fixed-address 192.168.0.11;
}

Узнать MAC интерфейсов компьютера можно с помощью команды ifconfig. А если вы хотите определить MAC другой системы в сети, то зная её IP можно обратиться к команде arp -a.

После того, как все закончили правку конфигурационного файла, пропишем пару строк в файл /etc/rc.conf

dhcpd_enable="YES"
dhcpd_ifaces="dc0"

Вторая строка определяет на каком интерфейсе будет раздавать адреса наш DHCP сервер.

Наконец, стартуем:

/usr/local/etc/rc.d/isc-dhcpd start

Вот и все. Успешной работы!

суббота, 4 июня 2011 г.

Как узнать версию freebsd?

Чтобы узнать версию установленной операционной системы FreeBSD можно воспользоваться командой:

uname -a
Это может пригодится, к примеру, при обновлении ОС или для установки патчей.

четверг, 24 декабря 2009 г.

freebsd отключить sendmail

Собственно проблемма в том, что на моем сервере sendmail не нужен, а он ставится на фряху по умолчанию и мне хотелось бы его выключить, чтобы не валил кучу лишних уведомлений. Также может понадобиться отключить sendmail если вы хотите установить другой MTA, например postfix.

Итак, как написано в руководстве по freebsd, необходимо прописать следующие строки в файле /etc/rc.conf

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
ежели вы хотите использовать sendmail только для исходящей почты и не принимать входящую, то достаточно поставить только строку
sendmail_enable="NO"

четверг, 19 ноября 2009 г.

Настройка виртуальных хостов на одном айпи с использованием связки apache и nginx

У меня настроена связка Апача и Nginx на системе с одним выделенным айпи адресом, где Апач обрабатывает динамику, а Nginx выдает статику, то есть Нгиникс проксирует данные для Апача. Подробнее о настройке веб сервера вы можете прочитать в соответствующей статье в этом блоге. Требовалось завести в системе пачку хостов с различием по доменным именам, например, host.ru, host2.ru и так далее.

Порывшись в интернете не нашел адекватно простых способов сделать это. Оказалось все еще проще простого. Для выполнения задачи необходимо завести виртуальные хосты как в апаче, так и в нгниксе. Каждый хост имеет относящуюся к нему директорию на жестком диске, для определения принадлежности, хосты различаются по имени (а не по айпи).

Настройка виртуальных хостов в Nginx.

server {
listen 85.249.???.???:80;
server_name host.spb.ru www.host.spb.ru;
location / {
proxy_pass http://85.249.???.???:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* \.(html|jpeg|jpg|gif|png|css|js|pdf|txt|tar)$ {
root /usr/local/www/apache22/data/host.spb.ru;
}

Как видно, у нас прописан адрес и порт, на котором будет слушать нгиникс, имя хоста и имя хоста с www, это необходимо для корректного индексирования сайта поисковиками (по крайней мере, это верно для моей системы). Далее идут настройки для связки с Апачем. В строчке location указываются расширения файлов, которые будет выдавать Nginx, строка root указывает путь до директории, где хронятся файлы, относящиеся к данному хосту.

Настройка виртуальных хостов в Апаче.


DocumentRoot "/usr/local/www/apache22/data/host.spb.ru/"
ServerName host.spb.ru
ServerAlias www.host.spb.ru


Прописываем сетевой адрес, на котором будет слушать Апач, директорию на винчестере, где лежат файлы хоста, имя сервера и алиас к нему (имя сервера с www).

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

www.host.spb.ru CNAME host.spb.ru

Чтобы запросы с www отправлялись на этот же сервер.

Если вы нигде не ошиблись, то все должно работать! :-) Удачи!