Архив метки: freebsd

Создание ссылки на каталог при помощи ln

Бывает такая беда. Часто… Создал разделы на ж/д и не рассчитал их размеры.. А потом ходишь, ходишь в школу, а потом БАЦ! И место неожиданно кончилось. И лишнего с раздела удалить нечего или нельзя…

Поможет чудная команда ln, которая может создать ссылку с одного раздела на другой так, что другие программы даже не заметят того, что на самом деле работают уже с другим диском или разделом.

Например: перенесем папку /var/log на другой раздел, который находится..ну скажем в /backup . Для этого:

  1. Физически переместим папку /log из /var в /backup
  2. Выполним команду:
ln -s /backup/log /var

Профит. Всё работает. Никто подмены не заметил..

Newsyslog во FreeBSD. Организация ротации логов

freebsdВо FreeBSD за ротацию логов отвечает утилита newsyslog, запускаемая из крона, настройки которой лежат в /etc/newsyslog.conf

Вот для примера кусок настроек:

# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
/var/log/all.log                        600  7     *    @T00  J
/var/log/amd.log                        644  7     100  *     J
/var/log/auth.log                       600  7     100  *     JC
/var/log/console.log                    600  5     100  *     J

Описание:

  • лог-файл – абсолютный путь к лог-файлу;
  • [владелец:группа] — необязательный параметр, который указывает newsyslog’у кто должен являться владельцом данного лог-файла ;
  • права — права, которые необходимо выставить на файл;
  • количество — максимальное количество заархивированных лог-файлов;
  • размер — по достижению какого размера архивировать лог-файл;
  • когда — время, через которое архивировать лог-файл;
  • флаги — некоторые дополнитпараметры, для лог-файлов:
    • B — по умолчанию, newsyslog добавляет в новый лог-файл сообщение о том, что лог-файл был ротирован, но если лог-файл бинарный, то это сообщение испортит лог, с параметром B newsyslog не будет добавлятьт никаких сообщений в лог
    • C — если лог-файл не существует, то его необходимо создать.
    • G — если указан данный флаг, то в названии лог-файла можно использовать стандартные шаблоны(например *)
    • J — сжимать лог-файл, используя bzip2
    • N — Не предупреждать никакой процесс, о ротации лог-файла
    • W — если используете флаги Z или J, то newsyslog должен подождать, пока заверщиться процесс архивации.
    • Z — сжимать лог, использую gzip.

Предлагаю рассмотреть более подробно синтаксис конфигурационного файла.

logfilename — указывается полное имя файла журнала, например /var/log/httpd-error.log. Здесь все понятно

[owner:group] — как уже писалось — необязательная опция. Это список из владельца и группы файла, разделенных двоеточием. Вот так: «root:wheel». Newsyslog может изменять владельца и группу также и старых файлов журналов. По умолчанию владельцем устаревших журналов является пользователь root, группы wheel. Эту возможность вы можете с успехом применять на многопользовательских машинах. Также есть возможность указать изменение только владельца, или только группы. В этом случае необходимо использовать двоеточие с пустым местом там, где должен находиться неизменяемый параметр. Например «:www» сменит группу на «www», а «username:» заменит владельца на «username».

mode — здесь проблем не должно быть. Указываем режим доступа к устаревшим файлам журналов в стандартном трехциферном Unix-формате.

count — счетчик, указывающий newsyslog на количество хранимых устаревших журналов. Newsyslog начинает отсчет файлов с нуля. В то время как большинство программ начинают считать с нуля, newsyslog включает 0 «по умолчанию», и считает файлы не учитывая нулевой. По умолчанию для журнала /var/log/massages счетчик равен пяти, при этом /var/log содержит следующие файлы:

messages
messages.0.gz
messages.1.gz
messages.2.gz
messages.3.gz
messages.4.gz
messages.5.gz

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

size  и when — поля конфигурационной записи указывают newsyslog размер и/или  время, при наступлении которых указанный файл необходимо подвергнуть ротации. Можно осуществлять ротацию по достижении определенного объема файла, или при наступлении определенного времени, или в обоих случаях. Если указаны оба условия, то ротация будет происходить при выполнении любого из них.

Если размер или время не важны, то устанавливаем «*», то есть «любое значение». Например, если вы хотите проводить ротацию независимо от размера файла, то вместо указания размера необходимо поставить звездочку «*».

Поле size используется для указания размера в килобайтах. Когда newsyslog запускается он сравнивает размер файла с указанным, если файл больше, то производится его ротация.

Поле when, указывающее время, заставляет плакать новичков в системном администрировании. Поле времени может содержать данные четырех типов: «звездочку», число или два различных формата даты.

Если вы не хотите производить ротацию журналов в определенное время, просто поставьте в это поле «звездочку».

Если в поле будет число, то newsyslog будет проводить ротацию по прошествии указанного количества часов. Например, если вы хотите, что бы ротация проводилась каждые 24 часа, и вам не важно в какое именно время, то просто поставьте в это поле число «24».

Если поле начинается символом «@», то считается что время представлено в формате ISO-8601. Этот стандарт используется newsyslog в большинстве Unix-подобных операционных систем. Этот формат использовался первой версией newsyslog разработанной в MIT (Массачусетский Технологический Институт – прим. переводчика). На первый взгляд этот формат не совсем понятен. Но, поскольку это стандарт, FreeBSD его поддерживает.

Полная запись даты в формате ISO-8601 состоит из 16 цифр с буквой «T» в середине. Первые четыре цифры означают год, следующие две – месяц, и еще две – день месяца. Буква «T» идет после даты, отделяя ее от времени, как десятичная точка в вещественных числах отделяет дробную часть от целой. После буквы «T» идут две цифры часа, затем две цифры минут и наконец две цифры секунд. Например дата 2 февраля 2002 года, 21:15:08, в формате ISO-8601будет выглядеть следующим образом:

20020202T211508

Вы обязательно должны ставить букву «T» в ISO-8601-дате.

Указание полных дат в формате ISO-8601 просто и очевидно. Путаница начинается, когда вы не пишете полную дату. Вы можете указать поля даты только рядом с буквой «T», оставив остальное место незаполненным. Все неуказанные поля не будут учитываться при сравнении.

Например T23 значит – любой день в году, 23:00. Если вы напишете в newsyslog.conf @T23, то ротация этого журнала будет проводиться каждый день, ровно в 23:00. Запись 4T00 значит полночь 4 числа каждого месяца, таким образом @4T00 будет запускать ротацию в это время.

Так же как при работе с crontab вам следует уточнить часы ротации. Указание даты типа @7T будет запускать ротацию один раз в час, каждый час седьмого числа каждого месяца. Таким образом такая дата будет запускать ротацию раз в час на протяжении целого дня. Это может быть полезно для отладки, но вряд ли пригодится в реальной жизни.

Эта система имеет одну серьезную проблему – она не дает простого способа задавать ежедневно выполняемые задачи. Желание запустить ротацию журнала по понедельникам, не является чем-то необычным. Запустить ротацию журнала в последний день месяца таким образов вообще не удастся. Тут на помощь приходит второй формат времени.

Если запись времени начинается со знака доллара «$», то считается, что время задается в специфическом FreeBSD-формате «месяц-неделя-день». Это очень похоже на cron и позволяет вам установить конкретные дни недели для выполнения задачи.

Этот формат использует три буквенных идентификатора: M (день месяца), W (день недели), H (час дня). После каждого из них идет число, указывающее точное время запуска. Часы находятся в интервале от 0 до 23, дни недели от 0 (воскресенье), до 6 (суббота). Дни месяца: от 1 и до количества дней в конкретном месяце.

Например для запуска ротации каждое воскресение в 8 утра вам следует задать время как $W0H8. Если вы захотите ротировать журналы в полдень 5 числа каждого месяца, то напишите $M5H12.

Одна интересная функция этой системы позволяет вам автоматически задавать ротацию на последний день месяца используя специальный «день месяца» – «L» (от last – последний). Без этого знака было бы очень трудно задать ротацию журнала в последний день месяца без написания скрипта, который бы вставлял количество дней в конкретном месяце. Если вы хотите запустить ротацию вашего журнала аккаунтов за два часа до начала нового месяца, вы должны использовать запись $MLH22.

flags — это поле необязательно для большинства журналов, однако для некоторых оно жизненно важно.

Newsyslog вставляет сообщение «logfile turned over» в каждый вновь созданный файл журнала. Если журнал ведется в двоичном виде (как например /var/log/wtmp), то добавление такого сообщения обязательно его испортит. Флаг «B» запрещает newsyslog’у вставлять это сообщение.

Большинство журналов ведется в текстовом формате. Сжатие таких файлов сохранит много пространства на вашем диске. Флаг «Z» укажет newsyslog, что старые журналы следует сжать gzip’ом.

Одновременно допускается использовать только один из этих флагов.

[/pid_file] — задает путь к «pid-файлу» процесса пишущего журнал. Использование pid-файлов является простым способом записи поля ID процесса в системе, так что бы другие программы могли его легко прочитать. Большинство программ хранят свои pid-файлы в каталоге /var/run – поглядите них у себя на машине. Если в этом поле вы укажете полный путь к pid-файлу, то newsyslog будет посылать сигнал этому процессу когда будет производиться ротация. Например веб-сервер Apache должен быть оповещен при ротации его журналов. Записав в этом поле полный путь к его pid-файлу вы заставите newsyslog посылать процессу Apache сигнал kill -1, что бы он запустил свою часть обработки ротации журналов.

[sig_num]  — большинство программ поддерживают ротацию журналов сигналом kill -1 или SIGHUP. Некоторые программы требуют специального сигнала, когда их файлы ротируют. Если вы используйте программу такого типа, то укажите номер необходимого сигнала в последнем поле.

Давайте соберем все сказанное вместе, в самом худшем случае, в примере, в который трудно поверить. Итак у вас есть журнал базы данных, который вы хотите ротировать в 23 часа в последний день каждого месяца. В документации базы данных сказано, что вы должны послать процессу базы сигнал прерывания (SIGINT или сигнал номер 2) после ротации. Вы хотите, что бы архивные журналы принадлежали пользователю «dbmanager» и читать их мог только он. Более того, журналы – двоичные файлы и должны быть не тронуты newsyslog’ом. Ваш newsyslog.conf должен выглядеть следующим образом:

/var/log/database dbmanager: 600 30 * $MLH23 B /var/run/db.pid 2

Стырено здесь.

Установка расширений php при помощи pkg install во FreeBSD

1. Сначала ищем в портах. Зачем? Чтобы узнать в каком пакете лежит нужное расширение. Более простого решения не попалось

whereis php56-curl
php56-curl: /usr/ports/ftp/php56-curl

2. Устанавливаем из пакетов:

pkg install ftp/php56-curl

Очистка каталога /usr/ports в FreeBSD

freebsdПостепенно /usr/ports засоряется ненужными файлами, которые только занимают место на диске, даже при использовании опции make clean при установке новых портов.

Решение:

# pkg install portupgrade

Очистить все рабочие директории (каталоги,в которых происходит сборка порта перед его установкой в систему):

# portsclean -C

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

# portsclean -D

Удалить все файлы, на которые более не используются ни одним из установленных портов:

# portsclean -DD

У меня например ушло больше 1 гигабайта..

Настройка отправки почты во FreeBSD используя ssmtp

В /etc/mail/mailer.conf создаем алиасы основных сервисов на ssmtp:

sendmail	/usr/local/sbin/ssmtp
send-mail	/usr/local/sbin/ssmtp
mailq		/usr/local/sbin/ssmtp
newaliases	/usr/local/sbin/ssmtp
hoststat	/usr/local/sbin/ssmtp
purgestat	/usr/local/sbin/ssmtp

В /usr/local/etc/ssmtp/ssmtp.conf изменяем настройки для отправки почты:

#
# /etc/ssmtp.conf -- a config file for sSMTP sendmail.
#

# The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. root=billing@yarteleservice.ru www=support@yarteleservice.ru # The place where the mail goes. The actual machine name is required # no MX records are consulted. Commonly mailhosts are named mail.domain.com # The example will fit if you are in domain.com and your mailhub is so named. mailhub=mail.ewfwece.ru # Example for SMTP port number 2525 # mailhub=mail.your.domain:2525 # Example for SMTP port number 25 (Standard/RFC) # mailhub=mail.your.domain # Example for SSL encrypted connection # mailhub=mail.your.domain:465 # Where will the mail seem to come from? rewriteDomain=erfrvice.ru # The full hostname hostname=mydomain # Set this to never rewrite the "From:" line (unless not given) and to # use that address in the "from line" of the envelope. #FromLineOverride=YES # Use SSL/TLS to send secure messages to server. #UseTLS=YES # Use SSL/TLS certificate to authenticate against smtp host. #UseTLSCert=YES # Use this RSA certificate. #TLSCert=/usr/local/etc/ssmtp/ssmtp.pem # Get enhanced (*really* enhanced) debugging information in the logs # If you want to have debugging of the config file parsing, move this option # to the top of the config file and uncomment Debug=YES AuthUser=bwerfewr@yfwerfwevice.ru AuthPass=fuieorf