Очистка портов | FreeBSD

Периодически возникает желание пройтись по дереву портов и очистить те порты в которых забыл сделать make clean. Если сделать make clean в корне (/usr/ports) – начнется нудный процесс прохода по всем портам. Нашел в сети строку:

find /usr/ports/ -name 'work' -type d -exec make clean -C "{}/../" \;

Найдет все порты с каталогом work и запустить в них make clean.

PS: Вот ещё полезная строчка:

du -hd 1 /var

Покажет какой каталог занимает сколько места (глубина прохода 1).

autobackupmysql.sh автоматизируем бэкап Mysql | FreeBSD, MYSQL

Процесс резервного копирования разделяют на два типа – условно скажем – на физический и логический. Физический применим в таблицам типа myisam – когда мы можем просто заблокировать таблицы и скопировать файлы (MYD, MYI, frm). Этот тип выполняется к примеру скриптом mysqlhotcopy.

/usr/home/mysqlhotcopy.sh -u user -p pass --allowold --keepold --quiet database /path_to_back

Для «логического» бэкапа (бэкапа который генерирует логическую труктуру таблиц и запросы к базе, способные воссоздать таблицы) используется mysqldump.

mysqldump -uUSER -pPASS --databases base_name > /path_to_back/database.sql

Собственно для второго типа бэкапа есть скрипт autobackupmysql.sh – клон скрипта automysqlbackup.sh. Есть в портах, требует bash.

Поскольку в сети информации описывающей этот скрипт не нашел – пишем для себя.

Продолжить чтение →

Не собирается glib с ошибкой ./de.po:15: keyword “msgctxt” | FreeBSD

Поймал ошибку при сборке glib (установка mc).

./de.po:15: keyword "msgctxt" unknown
./de.po:15:8: parse error

Посоветовали обновить gettext. Помогло.

Не собирается порт ./m4.texinfo: Unknown command. | FreeBSD

Столкнулся с ошибкой в процессе апгрейда портов с помощью portupgrade. Попробовал обновить порты на которые ругался portupgrade руками, что-то поломал и получил не собирающиеся порты с ошибками типа:

./m4.texinfo:3499 Unknown command.

Нашел в сети способ который оказался более менее универсальным.
Продолжить чтение →

Восстановление баз mysql из бинарных логов | FreeBSD, MYSQL

Грохнул по нечаяности базу (говорили мне не используй phpmyadmin делай все руками) :)
Надо восстанавливать. В бэкапе – неверно настроенная кодировка – следовательно в таблицах – знаки вопроса вместо букв. Хорошо что бинарный лог не отключен, и имеется полный набор логов.
Продолжить чтение →

unsupported dictionary type: mysql, Inappropriate file type or format | FreeBSD, Postfix

После обновления postfix (посредством portupgrade) поймал ошибки:

postfix/trivial-rewrite[87453]: warning: virtual_alias_domains lookup failure
postfix/trivial-rewrite[87453]: warning: mysql:/usr/local/etc/postfix/mysql/mysql_virtual_alias_maps.cf 
is unavailable. unsupported dictionary type: mysql

База пользователей у меня хранится в mysql и ругань возникла поскольку я не отметил поддержку mysql во время обновления – а по дефолту порт предложил собраться только с поддержкой pcre. :)
Продолжить чтение →

Автоматизация jpegtran | FreeBSD

Решил заняться оптимизацией изображений на вебсервере – jpegtran и подобные утилиты позволяют уменьшить размер изображений без потери качества – удаляют мета информацию и т.д.

Вызов такой:

jpegtran -copy none -optimize -perfect -outfile outfile.jpeg sourcefile.jpeg

или

jpegtran -copy none -optimize -perfect source.jpg > dest.jpg

Все хорошо, но для оптимизации работы хорошо бы написать скрипт для автоматизации работы – указать целевую папку и запланировать в крон.
Продолжить чтение →

There are suspended jobs. | FreeBSD

Если при попытке выйти из консоли получаем сообщение:

#exit
#There are suspended jobs.

Смотрим список:

# jobs
[1]  + Suspended                     mysql -u root -p

Выводим задачу на консоль командой fg N (где N – номер задания):

#fg 1
mysql -u root -p (wd: /usr/local/etc/rc.d)

И завершаем работу.

Оптимизируем php. Eaccelerator | FreeBSD

Для кэширования динамического контента и оптмизации php решил поставить eaccelerator. Ставится просто.

#cd /usr/ports/www/eaccelerator
#make install clean

Далее создаем папку для кэша, даем права.

#mkdir /tmp/eaccelerator
#chown www /tmp/eaccelerator
#chmod 0700 /tmp/eaccelerator

Далее открываем /usr/local/etc/php/extensions.php и добавляем строку:

extension="eaccelerator.so"

И в /usr/local/etc/php.ini:

eaccelerator.shm_size="0"
  eaccelerator.cache_dir="/tmp/eaccelerator"
  eaccelerator.enable="1"
  eaccelerator.optimizer="1"
  eaccelerator.check_mtime="1"
  eaccelerator.debug="0"
  eaccelerator.filter=""
  eaccelerator.shm_max="0"
  eaccelerator.shm_ttl="0"
  eaccelerator.shm_prune_period="0"
  eaccelerator.shm_only="0"
  eaccelerator.compress="1"
  eaccelerator.compress_level="9"
 eaccelerator.content  = "shm_and_disk"

eaccelerator.shm_size=»0″ – задает огрничение выделяемой памяти,
eaccelerator.content = «shm_and_disk» – кэшировать контент – в память и на диск

Перезапускаемся. В моем случае это lighttpd + spawn-fcgi:

/usr/local/etc/rc.d/spawn-fcgi restart

Смотрим все ли ок:

# php -v
PHP 5.3.9 with Suhosin-Patch (cli) (built: Jan 25 2012 13:04:50)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
    with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator

Включаем кэширование запросов в mysql | FreeBSD, MYSQL

Проверить включено ли кэширование запросов у вас на сервере можно запросом:

mysql> show variables like 'query_cache%';
+------------------------------+-----------+
| Variable_name                | Value     |
+------------------------------+-----------+
| query_cache_limit            | 1048576   |
| query_cache_min_res_unit     | 4096      |
| query_cache_size             | 134217728 |
| query_cache_type             | ON        |
| query_cache_wlock_invalidate | OFF       |
+------------------------------+-----------+
5 rows in set (0.00 sec)

Продолжить чтение →

Сжимаем трафик lighttpd с помощью mod_compress | FreeBSD, Lighttpd

По дефолту лайти не сжимает файлы которые отдает. Настроим модуль mod_compress который позволит отдавать клиентам сжатые версии файлов (css, xml, javascript, html, txt).
Продолжить чтение →

Настройка виртуального хоста (simple_vhost) в Lighttpd | FreeBSD, Lighttpd

Понадобилась настройка виртуальных хостов в lighttpd. В лайти есть три модуля которые отвечают за виртуальные хосты – я использовал самый простой – simple_vhost. Поскольку с поисковиках внятного мануала по быстрой настройке быстро не нашел – пишу себе на заметку.

Итак – первое – в modules.conf расскоментируем строку:

include "conf.d/simple_vhost.conf"

В комментариях к конфигу сказано что мы можем использовать только один модуль. Ну и хорошо – будем использовать simple_vhost.

Далее все просто. Если мы не хотим описывать каждый vhost в конфиге просто правим в simple_vhost.conf несколько переменных:

simple-vhost.server-root   = "/usr/local/www/vhosts/"
simple-vhost.default-host  = "example.com"
simple-vhost.document-root = "/"

Соответсвенно директория /usr/local/www/vhosts/ должна существовать, права выставляем для пользователя под которым работает лайти.

Что дает эта инструкция. Мы поределяем директорию где лежат папки с файлами вирт хостов. Создавая папку /usr/local/www/vhosts/my.example.com мы создаем вирт хост. Никаких дополнительных настроек не нужно (ну естественно кроме настройки ДНС, но к лайти это отношения не имеет). Лайти сам просмотрит директорию вирт хостов, найдет папку совпадающую с именем запроса (http://my.example.com) и обслужит запрос. Если папку с фалами вирт хоста не обнаружат – то выдаст дефолтный хост.
Подробнее о том как формируется путь к дефолтному хосту и вся логика можно посмотреть на странице вики lighttpd: http://redmine.lighttpd.net/wiki/1/Docs:ModSimpleVhost

Другой путь – описать виртуальный хост в конфиге lighhtpd.conf. Синтаксис следующий:

$HTTP["host"] == "test3.example.com" {
server.document-root = "/usr/local/www/vhosts/test3.example.com"
server.errorlog = "/var/log/lighttpd/test3.error.log"
accesslog.filename = "/var/log/lighttpd/test3.access.log"
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/usr/local/www/vhosts/.htpasswd"
            auth.require = ("/" => (
           "method"  => "basic",
           "realm"   => "Valid users only",
            "require" => "valid-user"
               ))
}

Здесь описан вирт хост c именем test3.example.com, его файлы определяем в папке /usr/local/www/vhosts/test3.example.com, логи, и закрываем весь хост паролем (plain auth).

Маршрутизация ESXi. Подключение NFS из удаленной сети. | FreeBSD, Linux, VMware

Подняли изолированный хост ESXi в DMZ. Выход в сеть через шлюз. Шлюз на FreeBSD, подключен к DMZ (сеть 172.16.5.0/24) и основной LAN 10.0.0.0/24 (в лан – vSphere, остальные хосты esxi, файловый сервер (NFS). Задача – заставить хост ESXi в изолированной сети работать с NFS хранилищем в удаленной сети.

Шлюз. FreeBSD. KernelNAT:

${fwcmd} add nat 1 ip from any to any

Эта строка в ipfw позволяет роутить и натить все на всех трех интерфейсах – интерфейс в интернет, и два интерфейса – в DMZ и локальную общую сеть.

Далее ESXi. Для работы с маршрутами в ESXi есть команда esxcfg-route. Из GUI – в консоли и через vSphere мы можем настроить дефолтный шлюз. Чтобы настроить дополнительный маршрут – нужен ssh (или наверное через CLI тоже можно). Я делал в ssh.

Просмотр маршрутов:

#esxcfg-route --list

Добавляем маршрут в LAN сеть:

#esxcfg-route -a 10.0.0.0/24 172.16.5.1

172.16.5.1 – айпи шлюза в ДМЗ. Командой говорим – все что для 10.0.0.0/24 шлем на 172.16.5.1.
После этого можно пинговать интерфейс шлюза в сети 10.0.0.0/24 (у меня это 10.0.0.2).

Далее. Теперь для того чтобы хост из LAN (NFS сервер в нашем случае) знаку куда отправлять ответные пакеты настраиваем маршрут на нем.

Пусть это хост 10.0.0.10. У меня это CentOS. Делаем:

#route add -net 172.16.5.0 netmask 255.255.255.0 gw 10.0.0.2
Указываем именно gw (просто указания интерфейса недостаточно).

Все. После этого пинг будет проходить от хоста из ДМЗ до NFS сервера и обратно.
Далее правим exports для того чтобы дать доступ к NFS машинам из сети DMZ (172.16.5.0/24).

/storage 172.16.5.0/24(rw,insecure,async,no_root_squash)

И применим изменения:

#exportfs -r

Теперь идем на наш xост ESXi и подключившись клиентом (через шлюза по впн) добавляем NFS хранилище. Все должно подмонтироваться без проблем.

PS: На винде маршрут к удаленной сети добавляем командой (пример):

route add 10.0.0.0 172.16.5.1

Date летнее/зимнее время на FreeBSD | FreeBSD

В связи с отменой перехода на зимнее летнее время появилась необходимость обновить информацию о временных зонах на серверах FreeBSD. Почитал что пишут в сети – копипастим то, что работает. :)
Простое обновление времени типа #ntpdate ntp2.imvp.ru нам не поможет.
Значит обновляем порты.

#portsnap fetch update

Ставим порт zoneinfo:

#make -C /usr/ports/misc/zoneinfo install clean

или:

code>#cd /usr/ports/misc/zoneinfo
#make install clean

Запускаем настройку временной зоны (это как в процессе установки):

#tzsetup

Выбираем свою зону. Время должно встать на свое место.

Русская кодировка в консоли FreeBSD и putty | FreeBSD

Знаю что в сети полно рецептов по настройке русского языка в консоли FreeBSD, но запишу себе на заметку быстрый способ «на один раз» – вобще русский в консоли мне не нужен, но иногда, чтобы поправить lang файл в каком-нибудь веб пректе бывает полезен на один раз.

Итак все просто. В консоли под текущим пользовтелем делаем:

setenv LANG ru_RU.UTF-8
setenv LC_ALL ru_RU.UTF-8

И в нстройках putty правим в текущей сессии настрйки Translation – выставляем UTF-8. Теперь можно писать по русски в файл.
Кому нужен русский в консоли постоянно, и кто готов поковыряться с псевдографикой, к примеру, в mc – можно найти более основательную инструкцию. :)