Quantcast
Channel: Библиотека знаний
Viewing all 1318 articles
Browse latest View live

Проекты для начала разработки на Yii2 - создано

$
0
0

Wine - создано

$
0
0

Wine

$ brew installwine
$ brew install winetricks

system:rsyslog:article1 - создано

$
0
0

Введение rsyslog

Как я уже сказал, rsyslog стал дефолтным пакетом в большинстве дистрибутивов Linux (возможно, во всех). Rsyslog полностью соответствует протоколу syslog, описанному в RFC syslog, а так же содержит некоторые дополнительные фичи. Такие как TCP транспорт, фильтрацию и сортировку сообщений, хранение сообщения в СУБД, шифрование и мн.др. В статье я постараюсь рассмотреть описание конфигурационного файла, описание управления демоном rsyslogd и типовые примеры конфигураций.

Установка rsyslogd

Установка rsyslog (если по какой-то причине он не установлен по умолчанию) сводится к одной команде:

aptitude install rsyslog # в красной шляпе возможен вариант yum install rsyslog Если, конечно, нет желания устанавливать из исходников. Тогда необходимо прочитать install manual. После установки в Debian, мы будем иметь следующее размещение файлов (показаны наиболее важные):

# файл задает опции, передаваемые демону rsyslogd при запуске /etc/default/rsyslog # стартовый скрипт /etc/init.d/rsyslog # настройки ротации логов /etc/logrotate.d/rsyslog # основной конфиг /etc/rsyslog.conf # библиотеки для работы сислога /usr/lib/rsyslog/* # бинарник демона, который работает в фоне /usr/sbin/rsyslogd # файлы документации /usr/share/doc/rsyslog/* Как видно, все элементарно. rsyslog состоит из бинарника и файла конфигурации. Кроме указанных файлов, rsyslog так же использует:

/dev/log - unix сокет для получения локальных логов /var/run/rsyslogd.pid - pid файл для хранения id процесса rsyslogd rsyslog настройка

Перед настройкой какой-либо конфигурации, отличной от той, что используется по умолчанию, необходимо понять логику конфигурационного файла (rsyslog.conf). Структура rsyslog.conf классическая: пустые строки и строки, начинающиеся с # являются комментариями и игнорируются, остальное - параметры в виде $параметр значение. При этом, символ \ в конце строки говорит нам, что это не конец строки и строка продолжается на следующей. Строки, которые содержат ошибки в конфигурации - пропускаются и демон пытается обработать остальные строки (это поведение можно изменить). Итак, конфигурационный файл rsyslog.conf в Debian структурирован по следующему принципу:

Модули (Modules) Конфигурационные директивы (не знаю, как перевести более доступно) (Configuration Directives) Шаблоны (template) Правила сортировки (Rule line) Давайте разберем каждый раздел.

Модули (Modules) rsyslog

Rsyslog имеет модульную архитектуру. Это позволяет удобно расширять функциональность. Модули подразделяются на группы, например некоторые из них:

модули ввода - применяются для использования различных источников сообщений, имена начинаются на im (imfile, etc) модули вывода - используются для записи мессаг в различные места (файл, сокет, СУБД...), имена начинаются на om (omsnmp, ommysql, etc) модули парсинга (анализа содержимого) - используются для анализа содержимого (не понял назначение данных модулей...), имена начинаются на pm (pmrfc5424, etc) фильтрационные (фильтрующие) модули - позволяют фильтровать сообщения в соответствии со специальными правилами, имена начинаются на fm ... ################# #### MODULES #### ################# $ModLoad imuxsock # обеспечивает поддержку локальной системы логирования (читай - из /dev/log) $ModLoad imklog # обеспечивает поддержку журналирования ядра #$ModLoad immark # обеспечивает возможности маркирования сообщений --MARK-- # обеспечивает получение сислог-сообщений через сеть по UDP #$ModLoad imudp #$UDPServerRun 514 # обеспечивает получение по TCP #$ModLoad imtcp #$InputTCPServerRun 514 <...> Модули постоянно добавляются разработчиками и могут быть написаны любым желающим, со списком основных модулей можно ознакомиться на официальном сайте.

Конфигурационные директивы (Configuration Directives)

Конфигурационные директивы иногда называют глобальными директивами, они задают общие параметры работы демона rsyslogd. Директива имеет формат $Директива параметр

########################### #### GLOBAL DIRECTIVES #### ########################### # Задает использование классического timestamp формата (Мес ДД ЧЧ:ММ:СС). # Для включения unix-формата timestamps, необходимо закомментировать строку. $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # # Устанавливает права доступа, владельца и группу по умолчанию для лог-файлов. $FileOwner root $FileGroup adm $FileCreateMode 0640 $DirCreateMode 0755 $Umask 0022 # # Задает размещение spool и статических файлов (для хранения таких файлов, как очередь сообщений) $WorkDirectory /var/spool/rsyslog # # Инклюдит все конфиги в формате *.conf из каталога /etc/rsyslog.d/ $IncludeConfig /etc/rsyslog.d/*.conf С наиболее полным списком глобальных директив можно ознакомиться тут.

Шаблоны (Templates) rsyslog

Очень важной и ключевой особенностью rsyslogd является возможность использования шаблонов. Template позволяет: 1. задавать формат выводимой информации, 2. использовать динамические имена файлов логов на основании какого-либо правила. На самом деле, все выходные сообщения в rsyslogd формируются на основе шаблонов. Тут может возникнуть соответствующий вопрос - как же вывод формируется, если не указать никаких шаблонов в rsyslog.conf (ведь по умолчанию не указано никаких шаблонов)? Все просто. Имеются некоторые шаблоны (взятые из совместимые со старой версии syslog и статично прописанные в исходники rsyslog). Подтверждение этого дела можно найти в файле исходного кода syslogd.c, поиском по строке "template_" (наткнетесь на /* hardcoded standard templates (used for defaults) */). Шаблоны должны быть заданы до использования в правилах.

Cинтаксис template В целом, структуру шаблона можно представить в следующем виде синтаксисе:

$template имя_шаблона,описание_шаблона[,опции(по_необходимости)] Давайте разберем каждый пункт. $template - указывает, что далее пойдет описание шаблона. имя_шаблона - произвольное значение понятно описывающее, что за шаблон и для чего (имя будет использоваться в правилах для обращения к шаблону). опции - может принимать значение sql и sqlstd, это заставляет отформатировать конечный результат выполнения шаблона в вид, пригодный для MySQL или стандартный SQL соответственно (фактически - заменяет некоторые спецсимволы в syslog сообщении в формат, поддерживаемый SQL-сервером). Опции применяются только для шаблонов для вывода в sql.

описание_шаблона заключается в кавычки. В шаблонах в кавычках любой текст воспринимается буквально (как есть), кроме того текста, который заключен в знаки процентов (%текст%). Такой текст является переменной и позволяет "получить доступ" к внутреннему содержимому пришедшего сообщения и тем самым добиться всяких веселых фич по модификации ). Так же, в кавычках может использоваться т.н. escape-последовательности в виде обратной косой черты и некоего символа за чертой (например, \n - новая строка, \7 - ...).

Применение переменных в шаблонах rsyslog Давайте разгребем структуру значений, указываемых в %процентах%.

%имя_proper[:начало_строки:конец_строки:опции[:fieldname]]% имя_proper (оно же имя_свойства, оно же имя_переменной) - задает имя свойства (свойство в данном контексте можно рассматривать как некоторое свойство\поле syslog сообщения, проходящего сквозь демона), вот некоторые наиболее используемые свойства rsyslog:

msg - тело сообщения hostname - имя хоста\ip из сообщения fromhost - имя хоста, от которого пришло сообщение fromhost-ip - адрес хоста, от которого пришло сообщения (127.0.0.1 для локальных сообщений) syslogtag - имя и номер процесса (" rsyslogd[12125]:"), который выдал сообщение (извлекается из сообщения) programname - имя процесса, который выдал сообщение (извлекается из сообщения) pri - источник и приоритет, в виде числа pri-text - декодированные источник и приоритет (facility.priority, например syslog.emer) syslogfacility - только источник в виде числа syslogfacility-text - только декодированный источник ("local0") syslogseverity - только приоритет в виде числа syslogseverity-text - только декодированный уровень ("debug") timegenerated - время получения (с высоким разрешением) timereported - время, извлечённое из сообщения inputname - имя входного модуля $hour, $minute - текущее время $myhostname - имя хоста обработки и еще хуча Как видно, некоторые свойства начинаются с знака доллара - они считаются локальными\системными.

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

Далее - опции. Опции позволяют модифицировать переменную в границе от знака процента до знака процента. Можно применять одновременно несколько опций, через запятую. Если указать несколько противоречащих (например uppercase, lowercase), то будет применена последняя указанная (lowercase). Вот некоторые опции:

uppercase - преобразование к верхнему регистру lowercase - преобразование к нижнему регистру date-mysql - преобразовать в формат даты MySQL space-cc - заменить управляющие символы пробелами drop-cc - удалить управляющие символы и еще куча fieldname - данное поле доступно с версии 6.3.9+ и имеет очень специфичный характер. Можно ее забыть...

Как видно из приведенного выше шаблона переменной, значения из фигурных скобок указываются по желанию, то есть можно указать просто, например %hostname%. Но если будут применяться опции, то необходимо указать и предыдущие пустые поля, например %hostname:::lowercase%. Между двоеточиями пропущены поля начало_строки и конец_строки. При этом, fieldname почему-то в качестве пустого - не указывается.

Шаблоны, которые хардово запрограммированы в rsyslog (но которые можно изменить директивой $ActionFileDefaultTemplate):

RSYSLOG_SyslogProtocol23Format - формат, определённый в проекте стандарта IETF ietf-syslog-protocol-23, соответствует шаблону:

"<%PRI%>1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n\" RSYSLOG_FileFormat - традиционный формат журнала, с добавлением долей секунды и зоны, соответствует шаблону:

"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtagmsg:::sp-if-no-1st-spmsg:::drop-last-lf%\n\" RSYSLOG_TraditionalFileFormat - традиционный формат журнала для записи в файл, соответствует следующему шаблону:

"%TIMESTAMP% %HOSTNAME% %syslogtagmsg:::sp-if-no-1st-spmsg:::drop-last-lf%\n\" RSYSLOG_ForwardFormat - традиционный формат журнала для передачи с добавлением долей секунды и зоны, соответствует шаблону:

"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32msg:::sp-if-no-1st-spmsg%\" RSYSLOG_TraditionalForwardFormat - традиционный формат журнала для передачи на удалённый сервер

"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag:1:32msg:::sp-if-no-1st-spmsg%\" Правила сортировки rsyslog (Rule line)

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

К стандартным возможностям селекторов syslog добавились некоторые дополнительные возможности (напомню, что классически селектор - это источник.приоритет, он же facility.priority). В rsyslog в качестве селектора можно использовать значения переменных. В rsyslog применение переменных в селекторе называется Filters (фильтры). Выше в статье, а так же в первой статье о syslog описан классический подход к фильтрации на основе источник.приоритет (т.н."traditional" severity and facility based selectors). Кроме традиционной фильтрации существует следующие виды фильтрации: RainerScript-based filters (фильтрация на основе языка RainerScript - фактически обычный if - then - else), property-based filters (фильтрация на основе свойств сообщения (как в template)). Давайте рассмотрим оба:

Фильтрация RainerScript (RainerScript-based filters) Как я уже сказал, RainerScript - это классический язык на основе if then else. В rsyslog RainerScript поддерживает вложенность условий, арифметические, логические и строковые операции. В целом, синтаксис следующий:

if условие then блок_действий else блок_действий Соответственно, if, then - это обязательные операторы, определяющие конструкцию условия, else - по необходимости. блок_действий - может содержать одно действие (action), либо вложенный блок условий. Если блок условий содержит несколько действий, то он заключается в скобки. условие - содержит условие отбора сообщений для блока_действий. В условии можно использовать:

логические выражения (and, or, not), а так же группировку данных выражений в виде: not условие0 and (условие1 and условие2). переменные (properties) - переменные указываются в виде $имя_переменной (например $hostname или $msg) операции сравнения (== - равно, != - не равно, > - больше, < - меньше, ⇐ - меньше или равно, >= - больше или равно, (!)contains - (не)содержит, (!)startswith - (не)начинается с) комментарии /* комментарии */ (сомнительный пункт ...нужно ли его экранировать как в bash ???) Описание языка есть на сайте. Маленький пример фильтра на основе RainerScript:

if $syslogfacility-text == 'local7' and $msg startswith 'CISCO' and ($msg contains 'warn' or $msg contains 'emer') then /var/log/cisco-alarm

фильтрация на основе свойств сообщения (property-based filters) Давайте рассмотрим данный вид фильтрации.

:переменная, [!]операция_сравнения, "искомое_значение" действие

Что у нас тут есть: переменная - в соответствии с переменными,(в данном случае - без % или $), действие выполняемое над сообщением. операция_сравнения - может быть:

contains - проверяет соответствие искомое_значение с любой частью строки в переменная isequal - проверяет, совпадает (целиком) ли искомое_значение с переменной isempty - проверяет, является ли переменная пустой (доступна с 6.6.2) startswith - проверяет, начинается ли переменная с искомое_значение regex или ereregex - сравнивает содержимое переменной, заданному в искомое_значение регулярному выражению в соответствии с regular и Extended Regular Expression соответственно Например: :msg, contains, "syslog" будет искать слово syslog в теле.

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

# экономим ресурсы: *.=crit /var/log/somefile & root & /var/log/criticalmessages # фильтруем сообщения *.* /var/log/allmsgs-incl-informational.log :msg, contains, "informational" ~ *.* /var/log/allmsgs-no-informational.log то есть в первом варианте, rsyslogd нет необходимости несколько раз сравнивать селектор. Сообщение просто выполняет 3 действия.

Действия (actions) Действия rsyslog полностью совместимы с действиями syslog. Так же, стоит учитывать, что в действии rsyslog, кроме стандартный значений syslog, добавились дополнительные (выделены цветом):

/путь/к/файлу - отправить сообщения в простой файл (по умолчанию, rsyslogd умеет сам создавать новые файлы) ?имя_шаблона - вместо классического действия (/путь/к/файлу) в rsyslog можно указывать шаблон, в соответствии с которым будет динамически формироваться новый файл по заданному в шаблоне правилу. ?имя_шаблона;шаблон_фильтра - дополнительно, к шаблону имени файла (?имя_шаблона) возможно преобразовать сообщения поступающие в эти файлы в соответствии с заданным шаблоном фильтра (шаблон_фильтра).

/dev/терминал или /dev/консоль - отправить на указанную консоль\терминал @имя-хоста-udp[:порт] - отправить на удаленный хост по UDP @@[модификаторы]имя-хоста-tcp[:порт]- отправить на удаленный хост по TCP, модификаторы указывают: zцифра - задает gzip сжатие отправляемых пакетов с уровнем сжатия заданным цифрой от 0-9 (9-максимальное) список пользователей через запятую - отправить на терминал сообщение указанным пользователям * - отправить всем пользователям (аналог команды wall) :имя_модуля_вывода:параметры_модуля[:имя_шаблона] - отправляет сообщение в модуль вывода с заданными параметрами и заданным шаблоном (по желанию) ~ (тильда) - после данного символа сообщение будет удалено и дальнейшая обработка не продолжится

rsyslog в картинках

После всего прочтенного хотелось бы все это лицезреть в понятном виде. Попробую ка я все это обрисовать.

архитектура прохождения сообщения rsyslog

В данной схеме я постарался отобразить схему движения сообщения "сквозь" логику работы демона rsyslogd. Давайте попробуем разобраться в последовательности. Итак, сообщение пришло в систему с помощью одного из модулей ввода (сеть, файл, /dev/log ...) - оранжевая сноска. Далее, сообщения выстраиваются в главную очередь (если не хватает системных ресурсов ). Очереди rsyslogd это отдельная тема), но для типового понимания этой информации достаточно. Далее, сообщения поступают в обработчик, который использует модули парсинга - фиолетовая сноска. После данного этапа, мессаджи сверяются с фильтрами (читай - с селекторами источник.приоритет), заданными в правилах. Если сообщение подпадает под селектор, то перед применением действия к сообщению применяется соответствующий шаблон (если шаблон для действия не указан, то применяется шаблон по умолчанию, либо тот, который задан в глобальных параметрах). Ну и применяется соответствующее действие. На основании действия, сообщение может быть направлено в соответствующее место, если это место требует применения модуля (например, ommysql, ompgsql), то используются соответствующий модуль вывода.

Вот, собственно и вся схема.

Централизованный сервер rsyslog в Debian

Давайте рассмотрим простой конфиг централизованного сервера rsyslog, который будет сортировать файлы логов по ip адресу источника сообщения. Редактировать файлы можно с помощью vim или другого текстового редактора. ip адрес сервера rsyslog примем за 10.0.0.1, на него необходимо натравить всех клиентов syslog. Для корректной работы rsyslogd необходимо разрешить получение syslog сообщений из сети, подключив соответствующий модуль и задав правило, т.к. по умолчанию, UDP и TCP транспорт на сервере отключен (приведу только измененные\добавленные строки):

~ # cat /etc/rsyslog.conf <...> ################# #### MODULES #### ################# <...> # раскомментируем параметры подключения модуля, позволяющего собирать информацию по UDP: $ModLoad imudp # раскомментируем номер порта для сервера - можно заменить на свой (не забудьте о клиентах) $UDPServerRun 514

# раскомментируем параметры подключения модуля, позволяющего собирать информацию по TCP (по жаланию): #$ModLoad imtcp # раскомментируем номер порта для сервера (по желанию - можно заменить на свой (не забудьте о клиентах) #$InputTCPServerRun 514

########################### #### GLOBAL DIRECTIVES #### ########################### <...> ############### #### RULES #### ############### <...> # удаленное журналирвание # Зададим шаблон создания имен файлов (на основании IP адреса клиента) $template FILENAME,"/var/log/%fromhost-ip%/syslog.log"

# Укажем сохранять сообщения от любого источника (*) с любым приоритетом (*) в файл, заданный шаблоном # Например, клиенты (10.0.0.2,10.0.0.3...) будут раскладываться в соответствующие каталоги /var/log/10.0.0.2/syslog.log *.* ?FILENAME

# как вариант, возможно рассмотреть вот такой вид сортировки: # шаблон, раскидывающий по имени хоста, году, месяц, дню # $template RemoteHost,"/var/log/%HOSTNAME%/%$YEAR%/%$MONTH%/%$DAY%/syslog.log" # правило, использующее шаблон # *.* ?RemoteHost После задания указанных параметров, необходимо перезапустить\перечитать конфигурационный файл (service rsyslog restart). При этом, netstat нам должен показать, что сислог стал слушать соответствующий порт:

~ # netstat -nap | grep 514 udp 0 0 0.0.0.0:514 0.0.0.0:* 21017/rsyslogd Конечно, мы можем не указывать параметры хранения, а лишь раскомментировать параметры $ModLoad imudp и $UDPServerRun 514, тогда rsyslogd будет размещать сообщения в стандартных выходных файлах (messages, syslog, etc), согласно правил по умолчанию. Необходимо учитывать, что указание только загрузки модуля (например $ModLoad imudp) недостаточно для приема сообщений по сети. Обязательно нужно указывать так же и соответствующий порт для прослушки (например, $UDPServerRun 514).

Настройка клиентов syslog

Linux (rsyslog)

Для отправки syslog сообщений с linux-клиента, необходимо добавить в конфигурационный файл следующие строки:

# отправлять от любого источника (*) с любым приоритетом (*) по UDP на 10.0.0.1 *.* @10.0.0.1

# отправлять от любого источника (*) с любым приоритетом (*) по TCP на 10.0.0.1 *.* @@10.0.0.1 Ну и после этого - рестарт rsyslog. Если нужно настроить разграничение отправки сообщений по приоритетам, то нужно заменить *.* на свое значение в соответствии со статьей syslog, описывающей принципы сортировки.

Cisco

as53xx231#conf t Enter configuration commands, one per line. End with CNTL/Z. as53xx231(config)#logging 10.0.0.1 as53xx231(config)#exit VMware ESXi

Для старенького гипервизора:

В /etc/syslog.conf необходимо добавить следующее:

*.* @10.0.0.1 # в файерволе необходимо разрешить syslog и сохранить это: esxcfg-firewall -o 514,udp,out,syslog esxcfg-firewall -l # перезапускаем syslog service syslog restart В последних версиях гипервизора все делается через гуишного клиента. В настройках гипервизора Advansed → Syslog → remote указать адрес rsyslog сервера.

Хранение журнала rsyslog в СУБД MySQL

В Debian настройка хранения в базе данных мега простая (почти как в вендовозе ) ). В целом, достаточно установить пакет rsyslog-mysql. При этом, установщик кладет модуль ommysql.so в каталог /usr/lib/rsysloul/spang/ и запускает мастер настройки, который запрашивает пароль администратора MySQL, создает отдельного пользователя и просит указать для него пароль. Создает соответствующую базу из скрипта /usr/share/dbconfig-common/data/rsyslog-mysql/install/mysql. Получившиеся настройки кладет в /etc/rsyslog.d/mysql.conf. Конфиг получается из 2х строчек::

# подключение модуля: $ModLoad ommysql # отправлять все сообщения в MySQL (вспомните выше Действия (actions) ) *.* :ommysql:адрес_сервера,имя_базы,имя_пользователя,пароль Веб интерфейс для rsyslog

В качестве веб-интерфейса будем настраивать Loganalizer от adiscon. Установка веб интерфейса довольно проста. Заключается в скачивании архива, распаковке в каталог веб сервера и запуск графического мастера настройки. Итак, отсюда (http://loganalyzer.adiscon.com/downloads) качаем архив с файлами (Например: http://download.adiscon.com/loganalyzer/loganalyzer-3.5.6.tar.gz). Перед настройкой, конечно же должен быть установлен Web сервер и модуль php5 (aptitude install apache2 libapache2-mod-php5). А да, еще php5-gd для отображения отчетов.

~ # # Скачиваем архив: ~ # wget http://download.adiscon.com/loganalyzer/loganalyzer-3.5.6.tar.gz ~ # # распаковываем архив: ~ # tar xf loganalyzer-3.5.6.tar.gz В текущем каталоге появится каталог loganalyzer-3.5.6, который содержит некоторую информацию, достойную прочтения:

~ # ls -l итого 12 drwxr-xr-x 3 root root 4096 Сен 20 22:51 . drwx------ 13 root root 4096 Сен 20 23:01 .. drwxrwxr-x 5 root root 4096 Сен 10 17:26 loganalyzer-3.5.6 ~ # ls -l loganalyzer-3.5.6/ итого 112 -rw-rw-r-- 1 root root 41186 Сен 10 17:26 ChangeLog drwxrwxr-x 2 root root 4096 Сен 20 23:01 contrib -rw-rw-r-- 1 root root 35497 Сен 10 17:26 COPYING drwxrwxr-x 2 root root 4096 Сен 10 17:34 doc -rw-rw-r-- 1 root root 8449 Сен 10 17:26 INSTALL drwxrwxr-x 14 root root 4096 Сен 10 17:34 src ~ # # из каталога src нам необходимо скопировать содержимое в /var/www/loganalyzer: ~ # mkdir /var/www/loganalyzer ~ # cp -r loganalyzer-3.5.6/src/* /var/www/loganalyzer ~ # # далее,необходимо создать пустой файл конфигурации, ~ # # который будет заполнен автоматически - установщиком ~ # touch /var/www/loganalyzer/config.php ~ # # зададим права на запись (после установки эти права можно убрать) ~ # chmod 666 /var/www/loganalyzer/config.php Далее, пытаемся зайти на http://10.0.0.1/loganalyzerи видим чудо:

rsyslog web интерфейс

жмахаем here

установка rsyslog на дебиан

Видим, для чего мы давали права 666, нажимаем Next

настройка rsyslog.conf

Здесь выбираем желаемые настройки. Отдельного внимания требует параметр Enable User Database. Если выбрать его, то будет создана отдельная база для хранения настроек Веб-интерфейса. Так же, будет доступна возможность создавать пользователей и группы. Жмем next.

настройка источников syslog

Странно, но куда то пропало 6 шагов. (это потому что на прошлом шаге мы не выбрали хранение настроек в базе). На данном шаге выбираем источник сообщений (файл, sql) и указываем соответствующие параметры.

установлен rsyslog

Это все. Ниже пару скриншотов того, что получилось:

rsyslog log анализатор

rsyslog отчеты

Есть маленькое дополнение - веб сервер не имеет доступа к обычным файлам в каталоге /var/log/. Поэтому, журнал может не отображаться. Чтобы решить данную проблему, необходимо добавить пользователя www-data в группу adm:

~ # usermod -G adm www-data Кроме Loganalyzer существует так же - Logzilla, обладающая тем же функционалом. Ее тоже стоит попробовать установить, если есть желание.

Некоторые типсы и триксы для rsyslog

Иногда, когда rsyslog является сетевым сервисом для сбора удаленных логов, хранение сообщений по имени хоста неудобно или непроизводительно или может еще что-то. Чтобы отключить резолвинг ip адресов в хостнеймы, необходимо добавить параметр -x:

~ # cat /etc/default/rsyslog RSYSLOGD_OPTIONS="-c5 -x" Для того чтобы разрешить в нетфильтре прохождение udp пакетов, необходимо использовать команду:

~ # iptables -A INPUT -p udp -s подсеть_источник --dport 514 -i интерфейс -j ACCEPT Некоторые примеры правил с комментариями:

# если создаете селектор вот такого типа: if $fromhost-ip startswith '10.0.1.' then /что/то # стоит обратить внимание на последнюю точку в адресе, # иначе под правило подпадут адреса из подсети 10.0.111.0, 10.0.12.0 и другие Для централизованного сервера сбора логов с сетевых устройств, можно на сетевых устройствах установить источник (facility) в какое-либо значение из local0-local7. Это позволит удобно сортировать сообщения, пример:

# cisco: net-device-cisco#conf t Enter configuration commands, one per line. End with CNTL/Z. <...> net-device-cisco(config)#logging facility local2 <...> # rsyslog-server local2.* /var/log/remote-cisco.log & ~ Таким образом, можно удобно фильтровать локальные сообщения от удаленных.

Вот некоторый конфиг, который позволяет отправлять почтовые уведомления о событиях (!!! почтовый сервер должен принимать сообщения без аутентификации):

$ModLoad ommail $ActionMailSMTPServer адрес_smtp $ActionMailSMTPPort 25 $ActionMailFrom адрес@отправителя $ActionMailTo адрес@получателя $template mail_subject,"On host %hostname%, Error-level by serverity" $template mail_body,"Facility.Serverity: %syslogfacility%.%syslogpriority% at %timegenerated% on host: %HOSTNAME%\r\n %msg%" $ActionMailSubject mail_subject # интервал времени (пауза между письмами) $ActionExecOnlyOnceEveryInterval 10 # фильтр отбора и действие if not ($msg contains 'что_то'\

       or $msg contains 'еще_что_то'\
       or $msg contains 'может_еще_что_то' )\
     and ($syslogseverity-text =='err'\
       or $syslogseverity-text =='crit'\
       or $syslogseverity-text =='alert'\
       or $syslogseverity-text =='emerg' )\

then :ommail:;mail_body Траблешуттинг

Для диагностики работы syslog отлично помогает tcpdump, пример команды для мониторинга:

~ # tcpdump -vvv -nn -i интерфейс udp port 514 Ну и, конечно же сам /var/log/syslog.

Что еще почитать

https://www.suse.com/releasenotes/x86_64/SUSE-SLES/11-SP2/ - rsyslog внедряется в SuSe http://www.debian.org/releases/lenny/i386/release-notes/ch-whats-new.en.html#system-changes - rsyslog внедряется в Debian https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/5/html-single/5.2_Release_Notes/index.html#sect-Red_Hat_Enterprise_Linux-Release_Notes-Feature_Updates - rsyslog внедряется в RedHat http://www.bog.pp.ru/work/syslog.html#linux - очень много русифицированных параметров и директив http://www.rsyslog.com/doc - документация от разработчика http://www.rsyslog.com/doc/rsyslog_conf_modules.html - модули rsyslog http://tools.ietf.org/html/rfc3164 - RFC syslog http://wiki.rsyslog.com/index.php/Configuration_Samples - примеры конфигураций http://www.rsyslog.com/tag/more-complex-scenarios/ - многие примеры брал отсюда http://www.rsyslog.com/doc/property_replacer.html - переменные в конфиге, такие как hostname $year ...

Rsyslog - сервер регистрации лог файлов - [Проект]

Vue Js Framework - [Vue Js Framework]

$
0
0

Vue Js Framework

https://vuejs.org/

В отличие от фреймворков-монолитов, Vue создан пригодным для постепенного внедрения. Его ядро в первую очередь решает задачи уровня представления (view), что упрощает интеграцию с другими библиотеками и существующими проектами. С другой стороны, Vue полностью подходит и для создания сложных одностраничных приложений (SPA, Single-Page Applications)

Документация

Интерактивное обучение

Примеры

Видео

RU

En

Обещания / Promises - создано

$
0
0

Контекст - [Контекст]

$
0
0

Контекст

From an instance context:

function A(){this.getClass=function(){return window[this.constructor.name];} 
    this.getNewInstance=function(){returnnew window[this.constructor.name];}} 
var a =new A();
console.log(a.getClass());//  function A { // etc... } 
// you can even:var b =new a.getClass();
b instanceof A;// true

From static context:

function B(){}; 
B.getClass=function(){return window[this.name];} 
B.getInstance(){returnnew window[this.name];}

Классы - создано

$
0
0

Классы

function Foo(){}var foo =new Foo(); 
typeof Foo;// == "function"typeof foo;// == "object" 
foo instanceof Foo;// == true
foo.constructor.name;// == "Foo"
Foo.name// == "Foo"     
Foo.prototype.isPrototypeOf(foo);// == true 
Foo.prototype.bar=function(x){return x+x;};
foo.bar(21);// == 42

Пример JS.Include - создано

$
0
0

Пример JS.Include

Html:

<scripttype="text/javascript">var STATICVER = 83;</script>

Java-script:

try{
  js ={"STATICVER": STATICVER};} catch(e){ js ={};}; 
js.include=function(path){if(typeof(this.STATICVER)=="undefined"){
		this.STATICVER =newDate().getUTCDate();}
	document.write('<script type="text/javascript" src="'+ path.replace('STATICVER', this.STATICVER)+'"></sc'+'ript>');} 
js.dynamicInclude =function(path, callback){if(typeof(this.STATICVER)=="undefined"){
		this.STATICVER =newDate().getUTCDate();}
	$.ajax({
		dataType:"script",
		cache:true,
		url:"/js/"+ this.STATICVER +"/"+ path
	}, callback);} 
js.include('/js/STATICVER/crimea.js');

Функции

$
0
0

Функции

# Функция с определенным кол-вом параметров
function f(a, b, c, d){ console.log(a + b + c + d)} 
# Обычный способ вызова
f(1,2,3,4); 
# f.call()
# Метод call жёстко фиксирует количество аргументов, через запятую
f.call(context,1,2,3,4); 
# Вызов функции при помощи func.apply работает аналогично func.call, но принимает массив аргументов вместо списка:
f.apply(context,[1,2,3,4]);

При помощи call/apply можно легко взять метод одного объекта, в том числе встроенного, и вызвать в контексте другого.

function sayHi(){ 
  # Используем эту технику для упрощения манипуляций с arguments. Как мы знаем, это не массив, а обычный объект.. Но как бы хотелось вызывать на нём методы массива.
  arguments.join=[].join;// одолжили метод (1) 
  var argStr = arguments.join(':');// (2) 
  alert(argStr);// сработает и выведет 1:2:3 
} 
sayHi(1,2,3);

Лямбда функции

+function(y){return y+1;}(6);

Замыкания - создано

Прототипное наследование - создано

$
0
0

Прототипное наследование

Webpack - создано

Java-Script - [Библиотеки]

$
0
0

Компоненты для vuejs - [Widgets / Виджеты]


Yii2 Framework projects / Проекты - [CMF / CMS / CRM]

$
0
0

Yii2 Framework projects / Проекты

Поиск проектов / Каталоги / Репозитории

Поиск

Репозитории

Проекты

Списки проектов

CMF / CMS / CRM

Ticket

Hosting panels

Social

Invoices

Ecom / Shop

Компании / Разработчики

Themes

Статистика

Torrent

UI + Vue - [UI + Vue]

Exim4 Smtp Server / Установка и настройка - [Настройка]

$
0
0

Exim4 Smtp Server / Установка и настройка

  • aptitude install exim4
  • dpkg-reconfigure exim4-config

Debian

  • nano /etc/exim4/update-exim4.conf.conf

Настройка

Или запустить

$ dpkg-reconfigure exim4-config
  • Mail Server configuration: internet site; mail is sent and received directly using SMTP
  • System mail name:желательно вписываем сюда обратную зону для вашего IP интерфейса eth0. Либо просто full hostname сервера (mail.debian.pro, например)
  • IP-addresses to listen on for incoming SMTP connections: 127.0.0.1 (нам же не нужен open relay?)
  • Other destinations for which mail is accepted:вписываем через пробел домены, от имени которых нам нужно отправлять письма с этого сервера.
  • Domains to relay mail for:если не знаете зачем оно, то оставляйте пустое поле
  • Machines to relay mail for:аналогично, если не знаем — оставляем пустым
  • Keep number of DNS-queries minimal (Dial-on-Demand)? No
  • Delivery method for local mail: Maildir
  • Split configuration into small files?По желанию. Я ставлю No.
  • Root and postmaster mail recipient:Вбиваем email, если желаем на него перенаправлять почту адресованную postmaster и root

Статьи / Настройки / Документация

Команды

Информация по очередям (Queue)

Вывести информацию по колличеству писем в очереди

exim -bpc

Вывести список сообщений в очереди (время в очереди, размер, идентификатор сообщения, отправитель, получатель)

exim -bp
 1m  3.4K 1avKHb-0000RN-3n <> *** frozen ***
          noreply@host.ru

 1m  3.4K 1avKHb-0000RU-HJ <> *** frozen ***
          noreply@host.ru

 0m   555 1avKKR-0000Vl-Gq <my-email@yandex.ru>
          my-email@yandex.ru

Отображение всех сообщений в очереди (количество, объем, старых, новых, области, и итоги)

exiwhat

50591 daemon: -q30m, listening for SMTP on [127.0.0.1]:25 [62.210.189.100]:25 [::1]:25

Отображает текущую очередь, с группировкой по имени хоста

exim -bp | exiqsumm

Показывает что делаю процессы сервера exim

  
Count  Volume  Oldest  Newest  Domain
-----  ------  ------  ------  ------

1    3481      3d      3d  altaiautoservice.ru
2    2560     19h     19h  jmail.com
8    27KB      7m      7m  mail.ru
1    5427      3d      3d  meil.ru
1    3481      4d      4d  motortula.ru
1    3481      3d      3d  razvalanet.ru
1    5427      4d      4d  tandex.ru
2    6963      7m      7m  yandex.ru
---------------------------------------------------------------
17    57KB      4d      7m  TOTAL

Поиск сообщений в очереди exiqgrep

Поиск в очереди сообщения от определенного отправителя

exiqgrep -f [user]@example.com

Поиск в очереди сообщений для конкретного получателя/домена

exiqgrep -r [user]@example.com

Вывод только Message-ID, как результат одного из двух поисковых запросов выше

exiqgrep -i [ -r | -f ] ...

Вывод количества сообщений, как результат одного из поисковых запросов выше

exiqgrep -c [ -r | -f ] ...

Вывод только Message-ID очереди

exiqgrep -i

Для поиска только среди заблокированных( замороженных ) сообщений, используйте ключ -z, или -x для поиска только среди не заблокированных. Еще несколько ключей отвечающих за вывод результатов поиска

Ключи

  • -f Поиск в очереди сообщений для конкретного отправителя
  • -z Поиск в очереди замороженных сообщений
  • -x Поиск в очереди только не замороженных сообщений
  • -r Поиск сообщений для определенного адресата
  • -o Поиск сообщений, старее, указанного количества секунд.

Флаги exiqgrep

Просмотр сообщений в очереди

Просмотр заголовков сообщения в очереди

exim -Mvh

Просмотр тела сообщения в очереди

exim -Mvb

Просмотр лога сообщения

exim -Mvl

Управление очередью exim

Начать процесс выполнения очереди :!:

exim -q -v

Начать процесс выполнения только для локальных получателей :!:

exim -ql -v

Удалить сообщение из очереди

exim -Mrm

Удалить все сообщения, которые старше, чем Х секунд из очереди (например, 5 дней будет 432 000 секунд)

exiqgrep -o 432000 -i | xargs exim -Mrm

Удалить все сообщения поподающие под выражение

exiqgrep -i -f sdmo-generators.com | xargs exim -Mrm

Заморозить все сообщения в очереди от отправителя

exiqgrep -i -f email@example.com | xargs exim -Mf

Разморозить сообщения

exim -Mt <message id> <message id> ... 

Просмотр заголовков сообщения в очереди

exim -Mvh <message id>

Просмотр тела сообщения в очереди

exim -Mvb <message id>

Просмотр лога сообщения

exim -Mvl <message id>

Удалить все сообщения из очереди

exiqgrep -i | xargs exim -Mrm

Утилиты

  • “exiwhat” - список, что делают процессы exim'a
  • “exiqgrep” - выбор из очереди
  • “exiqsumm” - суммирование очереди
  • “exigrep” - поиск по главному логу
  • “exipick” - выбор сообщений по различным критериям
  • “exicyclog” - ротация лог-файлов
  • “eximstats” - выбор статистики из логов
  • “exim_checkaccess” - проверка приёма адреса с данного IP
  • “exim_dbmbuild” - сборка файла DBM
  • “exinext” - извлечение информации повторов
  • “exim_dumpdb” - дамп БД подсказок
  • “exim_tidydb” - очистка БД подсказок
  • “exim_fixdb” - правка БД подсказок
  • “exim_lock” - блокировка файла почтового ящика (mailbox)

Аунтефикация / SPAM

Сервис проверки почтового сервера

Сервис проверки наличия в Blacklist

Скрипт установки для Debian 9 - [Установка]

$
0
0

Скрипт установки для Debian 9

$ apt install php5-cgi php5-cli php5-common php5-curl php5-dev php5-fpm php5-gd php5-intl php5-json php5-mcrypt php5-memcache php5-memcached php5-mongo php5-mysql php5-readline php5-redis php5-sqlite php5-xsl php5-geoip php5-ssh2

Описание

Установка

# nano debian-install.sh
# bash ./debian-install.sh

В debian-install.sh вставляем ниже следующий текст и нащимаем Ctrl-x, затем y (сохраняем и выходим)

Для Debian 9, чтоб работал php5, необходимо добавить в /etc/apt/sources.list
deb http://ftp.debian.org/debian jessie main contrib
deb-src http://ftp.debian.org/debian jessie main contrib

deb http://security.debian.org/ jessie/updates main contrib
deb-src http://security.debian.org/ jessie/updates main contrib
#!/bin/shdistrib="stretch" 
function info 
{echo" "echo-e"--> $1"echo" "} 
function check_result(){if[$1-ne0]; thenecho"Error: $2"exit$1fi} 
function promptyn (){whiletrue; doread-p"$1" yn
        case$ynin[Yy]*)return0;;[Nn]*)return1;;*)echo"Please answer yes or no.";;esacdone} 
function prompt (){whileread-p"$1" variable &&[[-z"$variable"]] ; doecho"$1"done 
    echo$variable;
} 
function installpkg(){for pkg in $@doif[ $(dpkg-query -W-f='${Status}'$pkg2>/dev/null |grep-c"ok installed")-eq0];
  thenecho"Install $pkg ..."apt-get install$pkg;
  fidone} 
function set_default_value(){evalvariable=\$$1if[-z"$variable"]; theneval$1=$2fiif["$variable"!= 'yes']&&["$variable"!= 'no']; theneval$1=$2fi} 
function h(){history|grep"$@";
} 
function install_elasticsearch(){VERSION=$1es_memory='1024m' 
    apt-get install openjdk-8-jdk
    rm/etc/alternatives/javaln-s/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java/etc/alternatives/java 
    exportJAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    exportPATH=$JAVA_HOME/bin:$PATH 
    if[!-f elasticsearch-$VERSION.deb ]; thenwget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-$VERSION.deb  
    fi 
    sudodpkg-i elasticsearch-$VERSION.deb
 
    # be sure you add "action.disable_delete_all_indices" : true to the config!! 
    info "Configuring ElasticSearch ${VERSION}" 
    sed-i"/LimitFSIZE=infinity/a LimitMEMLOCK=infinity"/usr/lib/systemd/system/elasticsearch.service
    sed-i"s/#bootstrap.memory_lock: true/bootstrap.memory_lock: true/"/etc/elasticsearch/elasticsearch.yml
    sed-i"s/#network.host: 192.168.0.1/network.host: 0.0.0.0/"/etc/elasticsearch/elasticsearch.yml
    sed-i"s/#MAX_LOCKED_MEMORY=unlimited/MAX_LOCKED_MEMORY=unlimited/"/etc/default/elasticsearch
    sed-i"s/-Xms2g/-Xms${es_memory}/"/etc/elasticsearch/jvm.options
    sed-i"s/-Xmx2g/-Xmx${es_memory}/"/etc/elasticsearch/jvm.options
 
    # enabled
    update-rc.d elasticsearch defaults
 
    # start script
    service elasticsearch restart
 
    if[-f/usr/bin/plugin ]; thenrm/usr/bin/plugin
    fi 
    sudoln-s/usr/share/elasticsearch/bin/elasticsearch-plugin /usr/bin/plugin
} 
if["x$(id -u)"!= 'x0']; then
    check_result 1"Script can be run executed only by root"fi 
apt-get update&&apt-get upgrade-y
installpkg apt apt-utils wgetsudonano rename debconf-utils pwgen mailutils curl dirmngr -y 
default_pass=$(pwgen -s181-n-c-s -y) 
hostname=$(prompt "Enter the Internet domain name (e.g. nixcraft.com) : ");
 
if promptyn "Do you wish to install default programs? [mc, git, etc] " ; then
    info "Install default programs";
    installpkg mc git mercurial bash-completion bzip2 numactl dnsutils -yfi 
if promptyn "Do you wish to install developers programs? [gcc, g++, etc] "; then
    info "Install development soft";
    installpkg checkinstall gcc build-essential g++ libboost-dev libboost-program-options-dev libboost-all-dev libevent-dev uuid-dev clang cmake -yfi 
if promptyn "Do you wish to install system monitors? [htop, iptraf] "; then
    info "Install system monitors";
    installpkg htop iptraf jnettop iftop -yfi 
if promptyn "Do you wish to uninstall systemd and install systemv? "; then
    installpkg sysvinit-core sysvinit-utils -ycp/usr/share/sysvinit/inittab /etc/inittab
fi 
if promptyn "Do you wish to install FTP Server (PRO-Ftpd)? "; then
    installpkg proftpd -yfi 
if promptyn "Do you wish to install MySql? "; then
    installpkg software-properties-common -yif promptyn "Do you wish to install MySql (Percona) (y) or Mariadb (n)?"; then 
        apt-key adv--recv-keys--keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
 
        echo"
        # Percona
        #deb http://repo.percona.com/apt ${distrib} testing
        #deb-src http://repo.percona.com/apt ${distrib} testing
        ">/etc/apt/sources.list.d/mysql.list
        apt-get update 
        installpkg percona-server-server-5.7 percona-server-client-5.7 percona-server-common-5.7 percona-toolkit -y
        sevice mysql start
        check_result $?"mysql start failed" 
        info "[client]\npassword='$f'\n">/root/.my.cnf
        chmod600/root/.my.cnf
        mysql -e"SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${default_pass}');"
        mysql -e"UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND host = 'localhost';"
        mysql -e"DELETE FROM mysql.user WHERE User=''"
        mysql -e"DROP DATABASE test">/dev/null 2>&1
        mysql -e"DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'"
        mysql -e"DELETE FROM mysql.user WHERE user='' or password='';"
        mysql -e"FLUSH PRIVILEGES" 
        info "Install MySQL (Percona)"
        update-rc.d mysql defaults
        set_default_value 'mysql''true' 
    else# for sid       apt-key adv--recv-keys--keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
        # for jessieapt-key adv--recv-keys--keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
 
        echo"
        # MariaDB 10.1 repository list - created 2016-08-05 19:23 UTC
        # http://downloads.mariadb.org/mariadb/repositories/
        deb [arch=amd64,i386] http://mirror.timeweb.ru/mariadb/repo/10.1/debian ${distrib} main
        deb-src http://mirror.timeweb.ru/mariadb/repo/10.1/debian ${distrib} main
        ">/etc/apt/sources.list.d/mysql.list
        apt-get update 
        installpkg mariadb-server mariadb-client mariadb-common --allow-unauthenticated
        service mysql start
        check_result $?"mysql start failed" 
        info "[client]\npassword='${default_pass}'\n">/root/.my.cnf
        chmod600/root/.my.cnf
        mysql -e"SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${default_pass}');"
        mysql -e"UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND host = 'localhost';"
        mysql -e"DELETE FROM mysql.user WHERE User=''"
        mysql -e"DROP DATABASE test">/dev/null 2>&1
        mysql -e"DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'"
        mysql -e"DELETE FROM mysql.user WHERE user='' or password='';"
        mysql -e"FLUSH PRIVILEGES" 
        info "Install MySQL (Mariadb)"
        update-rc.d mysql defaults
        set_default_value 'mysql''true'fifi 
if promptyn "Do you wish to install PostgreSql? "; then
    installpkg postgresql-9.6 postgresql-contrib-9.6-yecho"ALTER USER postgres WITH ENCRYPTED PASSWORD '${default_pass}';"|sudo-u postgres psql
    echo"
local      all     postgres     md5
">>/etc/postgresql/9.6/main/pg_hba.conf
 
    service postgresql restart
 
fi 
if promptyn "Do you wish to install Nginx? "; thenwget-q http://nginx.org/keys/nginx_signing.key -O-|apt-key add -
 
    echo"
    # nginx
    deb http://nginx.org/packages/debian ${distrib} nginx
    deb-src http://nginx.org/packages/debian ${distrib} nginx
    ">/etc/apt/sources.list.d/nginx.list
    apt-get update 
    service nginx stop >/dev/null 2>&1
    installpkg nginx -y
    service nginx start
    check_result $?"nginx start failed" 
    info "Install Nginx"
    update-rc.d nginx defaults
    set_default_value 'nginx''true'fi 
if promptyn "Do you wish to install PHP-FPM? "; thenwget-q http://www.dotdeb.org/dotdeb.gpg -O-|apt-key add -
 
    php_ver=$(prompt "Please select php version like 5, 7.0, 7.1: ") 
    echo"
    # php-fpm dotdeb
    deb http://packages.dotdeb.org ${distrib} all
    deb-src http://packages.dotdeb.org ${distrib} all
    ">/etc/apt/sources.list.d/php-fpm.list
    apt-get update 
    service php${php_ver}-fpm stop >/dev/null 2>&1 
    if["$php_ver" == 5]; then
          installpkg -u-t stable php${php_ver} php${php_ver}-dev php${php_ver}-sqlite php${php_ver}-mcrypt php${php_ver}-xsl php${php_ver}-cli php${php_ver}-common php${php_ver}-mysql php${php_ver}-gd php${php_ver}-fpm php${php_ver}-cgi php-pear php${php_ver}-curl php${php_ver}-pgsql php${php_ver}-mbstring-yfi 
    if["$php_ver" == "7.0"]; then
          installpkg -u-t stable php${php_ver} php${php_ver}-dev php${php_ver}-sqlite php${php_ver}-mcrypt php${php_ver}-xsl php${php_ver}-cli php${php_ver}-common php${php_ver}-mysql php${php_ver}-gd php${php_ver}-fpm php${php_ver}-cgi php-pear php${php_ver}-curl php${php_ver}-redis php${php_ver}-pgsql php${php_ver}-mbstring-yfi 
    if["$php_ver" == "7.1"]; then
          installpkg -u-t stable php${php_ver} php${php_ver}-dev php${php_ver}-sqlite php${php_ver}-mcrypt php${php_ver}-xsl php${php_ver}-cli php${php_ver}-common php${php_ver}-mysql php${php_ver}-gd php${php_ver}-fpm php${php_ver}-cgi php-pear php${php_ver}-curl php${php_ver}-redis php${php_ver}-pgsql  php${php_ver}-mbstring-yfi 
    echo"cgi.fix_pathinfo = 0">>/etc/php/${php_ver}/fpm/php.ini
    service php${php_ver}-fpm start
    check_result $?"php${php_ver}-fpm start failed" 
    info "Install PHP-FPM"
    update-rc.d php${php_ver}-fpm defaults
    set_default_value "php${php_ver}-fpm"'true' 
    curl -sS https://getcomposer.org/installer | php ----install-dir=/usr/local/bin --filename=composer
fi 
if promptyn "Do you wish to install RabbitMQ? "; thenwget-q http://packages.erlang-solutions.com/debian/erlang_solutions.asc -O-|apt-key add -
    wget-q https://www.rabbitmq.com/rabbitmq-signing-key-public.asc -O-|apt-key add -
 
    echo"
    # Erlang
    deb http://packages.erlang-solutions.com/debian ${distrib} contrib
 
    # RabbitMq
    deb http://www.rabbitmq.com/debian/ testing main
    ">/etc/apt/sources.list.d/rabbitmq.list
    apt-get update 
    service rabbitmq-server start
    installpkg rabbitmq-server -y
    check_result $?"rabbitmq-server start failed" 
    info "Install RabbitMQ"
    update-rc.d rabbitmq-server defaults
    set_default_value 'rabbitmq-server''true'fi 
if promptyn "Do you wish to install Redis server? "; then
    installpkg redis-server -y
    service redis-server start
    check_result $?"redis-server start failed" 
    info "Install Redis"
    update-rc.d redis-server defaults
    set_default_value 'redis-server''true'fi 
if promptyn "Do you wish to install Elasticsearch server? "; then
    info "Elasticsearch versions you can see here: https://github.com/elastic/elasticsearch"elasticsearch_ver=$(prompt "Please select Elasticsearch version like 5.6.4, 5.6.6, 6.1.1: ")
    install_elasticsearch $elasticsearch_verfi 
if promptyn "Do you wish to install DNS server? "; thenif promptyn "Do you wish to install bind (y) or pdns (n) server?"; then
        installpkg bind9 bind9utils bind9-libs -y
        service bind9 start
        info "Install DNS Server"
        set_default_value 'bind''true'else
        installpkg pdns-server pdns-backend-mysql pdns-recursor -y
        info "Install DNS Server"
        set_default_value 'pdns''true'fifi 
if promptyn "Do you wish to install Shorewall? "; then
    installpkg shorewall -yfi 
if promptyn "Do you wish to install Postfix/Exim4? "; then
    installpkg exim4-daemon-heavy mailutils -y
    service exim4 stop >/dev/null 2>&1
    gpasswd -a Debian-exim mail
 
    touch/etc/exim4/exim4.conf.template
    touch/etc/exim4/dnsbl.conf
    touch/etc/exim4/spam-blocks.conf
    touch/etc/exim4/white-blocks.conf
    chmod640/etc/exim4/exim4.conf.template
    rm-rf/etc/exim4/domains
    mkdir-p/etc/exim4/domains
 
    rm-f/etc/alternatives/mta
    ln-s/usr/sbin/exim4 /etc/alternatives/mta
    service sendmail stop >/dev/null 2>&1 
    service postfix stop >/dev/null 2>&1
    service exim4 start
 
    check_result $?"exim4 start failed"
    update-rc.d exim4 defaults
    set_default_value 'exim''true' 
    dpkg-reconfigure exim4-config
fi 
if promptyn "Do you wish to install Dovecot? "; then
    gpasswd -a dovecot mail
    chown-R root:root /etc/dovecot*
    service dovecot stop >/dev/null 2>&1
    installpkg dovecot-imapd dovecot-pop3d dovecot-common -y
    service dovecot start
 
    check_result $?"dovecot start failed"
    update-rc.d dovecot defaults
    set_default_value 'dovecot''true'fi 
if promptyn "Do you wish to install fail2ban? "; then
    installpkg fail2ban -y 
    if["$exim" = 'no']; thenfline=$(cat/etc/fail2ban/jail.local |grep-n exim-iptables -A2)fline=$(echo"$fline"|grep enabled |tail-n1|cut-f1-d -)sed-i"${fline}s/true/false/"/etc/fail2ban/jail.local
    fi 
   update-rc.d fail2ban defaults
    service fail2ban start
    check_result $?"fail2ban start failed"fi 
if promptyn "Do you wish to install Mysql backup system? "; then
    info "Install MySql backup system";
 
    apt-get update
    installpkg git-ygit clone https://github.com/Mirocow/mysql_utils.git /root/mysql_utils
 
    echo'
 
    # Run MySql backup system
    25 6    * * * root /bin/bash  ~/mysql_utils/backup.sh --dir="/var/backups/mysql" --compress=bzip2 --exclude="mysql" --lifetime="3 day ago"
    '>>/etc/crontab   
fi 
if promptyn "Do you wish to install create site script? "; then
    info "Install create site scriptm";
    wget https://raw.githubusercontent.com/Mirocow/site-create/master/site-create.sh -O/root/site-create.sh
fi 
rm/var/cache/apt/archives/*.deb -f 
if promptyn "Do you wish to set default shell settings? "; then
    info "Base system configure"echo'
    '>> ~/.bashrc
    source ~/.bashrc
 
    echo'
    set tabsize "2"
    '>> ~/.nanorc
fi 
apt-get autoremove-y

Скрипт установки для Debian 8 - [Описание]

$
0
0

Скрипт установки для Debian 8

$ apt install php5-cgi php5-cli php5-common php5-curl php5-dev php5-fpm php5-gd php5-intl php5-json php5-mcrypt php5-memcache php5-memcached php5-mongo php5-mysql php5-readline php5-redis php5-sqlite php5-xsl php5-geoip php5-ssh2

Описание

Установка

# nano debian-install.sh
# bash ./debian-install.sh

В debian-install.sh вставляем ниже следующий текст и нащимаем Ctrl-x, затем y (сохраняем и выходим)

#!/bin/shdistrib="jessie"hostname=""default_pass="" 
check_result(){if[$1-ne0]; thenecho"Error: $2"exit$1fi} 
promptyn (){whiletrue; doread-p"$1" yn
	    case$ynin[Yy]*)return0;;[Nn]*)return1;;*)echo"Please answer yes or no.";;esacdone} 
prompt (){whileread-p"$1" variable &&[[-z"$variable"]] ; doecho"$1"done 
	echo$variable;
} 
installpkg(){for pkg in $@doif[ $(dpkg-query -W-f='${Status}'$pkg2>/dev/null |grep-c"ok installed")-eq0];
  thenecho"Install $pkg ..."apt-get install-y$pkg;
  fidone} 
set_default_value(){evalvariable=\$$1if[-z"$variable"]; theneval$1=$2fiif["$variable"!= 'yes']&&["$variable"!= 'no']; theneval$1=$2fi} 
if["x$(id -u)"!= 'x0']; then
    check_result 1"Script can be run executed only by root"fi 
apt-get update&&apt-get upgrade-y
installpkg apt apt-utils wget chkconfig sudonano rename debconf-utils pwgen
 
default_pass=$(pwgen -s71) 
hostname=$(prompt "Enter the Internet domain name (e.g. nixcraft.com) : ");
 
if promptyn "Do you wish to install default programs? [mc, git, etc] " ; then 
	echo-e"Install default programs";
	installpkg mc git mercurial bash-completion bzip2 numactl dnsutils -y 
fi 
if promptyn "Do you wish to install developers programs? [gcc, g++, etc] "; then 
	echo-e"Install development soft";
	installpkg checkinstall gcc build-essential g++ libboost-dev libboost-program-options-dev libboost-all-dev libevent-dev uuid-dev clang cmake -y 
fi 
if promptyn "Do you wish to install system monitors? [htop, iptraf] "; then 
	echo-e"Install system monitors";
	installpkg htop iptraf jnettop iftop -y 
fi 
if promptyn "Do you wish to uninstall systemd and install systemv? "; then 
	installpkg sysvinit-core sysvinit-utils -ycp/usr/share/sysvinit/inittab /etc/inittab
 
fi 
if promptyn "Do you wish to install FTP Server (PRO-Ftpd)? "; then
	installpkg proftpd
fi 
if promptyn "Do you wish to install MySql? "; then 
	installpkg software-properties-common
 
	if promptyn "Do you wish to install MySql (Percona) (y) or Mariadb (n)?"; then 
		apt-key adv--recv-keys--keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
 
		echo"
		# Percona
		#deb http://repo.percona.com/apt ${distrib} testing
		#deb-src http://repo.percona.com/apt ${distrib} testing
		">/etc/apt/sources.list.d/mysql.list
		apt-get update 
		installpkg percona-server-server-5.7 percona-server-client-5.7 percona-server-common-5.7 percona-toolkit -y
		sevice mysql start
		check_result $?"mysql start failed" 
		mysqladmin -u root password $default_passecho-e"[client]\npassword='$f'\n">/root/.my.cnf
		chmod600/root/.my.cnf
		mysql -e"DELETE FROM mysql.user WHERE User=''"
		mysql -e"DROP DATABASE test">/dev/null 2>&1
		mysql -e"DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'"
		mysql -e"DELETE FROM mysql.user WHERE user='' or password='';"
		mysql -e"FLUSH PRIVILEGES" 
		echo-e"Install MySQL (Percona)"
		chkconfig mysql on
		set_default_value 'mysql''true' 
	else# for sid		apt-key adv--recv-keys--keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
		# for jessieapt-key adv--recv-keys--keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
 
		echo"
		# MariaDB 10.1 repository list - created 2016-08-05 19:23 UTC
		# http://downloads.mariadb.org/mariadb/repositories/
		deb [arch=amd64,i386] http://mirror.timeweb.ru/mariadb/repo/10.1/debian ${distrib} main
		deb-src http://mirror.timeweb.ru/mariadb/repo/10.1/debian ${distrib} main
		">/etc/apt/sources.list.d/mysql.list
		apt-get update 
		installpkg mariadb-server mariadb-client mariadb-common mytop -y
		service mysql start
		check_result $?"mysql start failed" 
		mysqladmin -u root password $default_passecho-e"[client]\npassword='$default_pass'\n">/root/.my.cnf
		chmod600/root/.my.cnf
		mysql -e"DELETE FROM mysql.user WHERE User=''"
		mysql -e"DROP DATABASE test">/dev/null 2>&1
		mysql -e"DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'"
		mysql -e"DELETE FROM mysql.user WHERE user='' or password='';"
		mysql -e"FLUSH PRIVILEGES" 
		echo-e"Install MySQL (Mariadb)"
		chkconfig mysql on
		set_default_value 'mysql''true' 
  fi 
fi 
if promptyn "Do you wish to install Nginx? "; then 
	wget-q http://nginx.org/keys/nginx_signing.key -O-|apt-key add -
 
	echo"
	# nginx
	deb http://nginx.org/packages/debian ${distrib} nginx
	deb-src http://nginx.org/packages/debian ${distrib} nginx
	">/etc/apt/sources.list.d/nginx.list
	apt-get update 
	service nginx stop >/dev/null 2>&1
	installpkg nginx -y
	service nginx start
	check_result $?"nginx start failed" 
	echo-e"Install Nginx"
	chkconfig nginx on
	set_default_value 'nginx''true' 
fi 
if promptyn "Do you wish to install PHP-FPM? "; then 
	wget-q http://www.dotdeb.org/dotdeb.gpg -O-|apt-key add -
 
	php_ver=$(prompt "Please select php version like 5, 6.0, 7.0, 7.1: ") 
	echo"
	# php-fpm dotdeb
	deb http://packages.dotdeb.org ${distrib} all
	deb-src http://packages.dotdeb.org ${distrib} all
	">/etc/apt/sources.list.d/php-fpm.list
	apt-get update 
	service php${php_ver}-fpm stop >/dev/null 2>&1
	installpkg -u-t stable php${php_ver} php${php_ver}-dev php${php_ver}-sqlite php${php_ver}-mcrypt php${php_ver}-xsl php${php_ver}-cli php${php_ver}-common php${php_ver}-mysql php${php_ver}-gd php${php_ver}-fpm \
	        php${php_ver}-cgi php-pear php${php_ver}-curl php${php_ver}-xcache php5-redis -yecho"cgi.fix_pathinfo = 0">>/etc/php${php_ver}/fpm/php.ini
	service php${php_ver}-fpm start
	check_result $?"php${php_ver}-fpm start failed" 
	echo-e"Install PHP-FPM"
	chkconfig php${php_ver}-fpm on
	set_default_value "php${php_ver}-fpm' 'true" 
fi 
if promptyn "Do you wish to install RabbitMQ? "; then 
	wget-q http://packages.erlang-solutions.com/debian/erlang_solutions.asc -O-|apt-key add -
	wget-q https://www.rabbitmq.com/rabbitmq-signing-key-public.asc -O-|apt-key add -
 
	echo"
	# Erlang
	deb http://packages.erlang-solutions.com/debian ${distrib} contrib
 
	# RabbitMq
	deb http://www.rabbitmq.com/debian/ testing main
	">/etc/apt/sources.list.d/rabbitmq.list
	apt-get update 
	service rabbitmq-server start
	installpkg rabbitmq-server -y
	check_result $?"rabbitmq-server start failed" 
	echo-e"Install RabbitMQ"
	chkconfig rabbitmq-server on
	set_default_value 'rabbitmq-server''true' 
fi 
if promptyn "Do you wish to install Redis server? "; then 
	installpkg redis-server -y
	service redis-server start
	check_result $?"redis-server start failed" 
	echo-e"Install Redis"
	chkconfig redis-server on
	set_default_value 'redis-server''true' 
fi 
if promptyn "Do you wish to install DNS server? "; then 
	if promptyn "Do you wish to install bind (y) or pdns (n) server?"; then
		installpkg bind9 bind9utils bind9-libs -y
		service bind9 start
		echo-e"Install DNS Server"
		set_default_value 'bind''true'else
		installpkg pdns-server pdns-backend-mysql pdns-recursor -yecho-e"Install DNS Server"
		set_default_value 'pdns''true'fi 
fi 
if promptyn "Do you wish to install Shorewall? "; then 
	installpkg shorewall -y 
fi 
if promptyn "Do you wish to install Postfix/Exim4? "; then 
	installpkg exim4-daemon-heavy mailutils postfix -y
	service exim4 stop >/dev/null 2>&1
	gpasswd -a Debian-exim mail
 
	touch/etc/exim4/exim4.conf.template
	touch/etc/exim4/dnsbl.conf
	touch/etc/exim4/spam-blocks.conf
	touch/etc/exim4/white-blocks.conf
	chmod640/etc/exim4/exim4.conf.template
	rm-rf/etc/exim4/domains
	mkdir-p/etc/exim4/domains
 
	rm-f/etc/alternatives/mta
	ln-s/usr/sbin/exim4 /etc/alternatives/mta
	service sendmail stop >/dev/null 2>&1 
	service postfix stop >/dev/null 2>&1
	service exim4 start
 
	check_result $?"exim4 start failed"
	chkconfig exim4 on
	set_default_value 'exim''true' 
fi 
if promptyn "Do you wish to install Dovecot? "; then 
	gpasswd -a dovecot mail
	chown-R root:root /etc/dovecot*
	service dovecot stop >/dev/null 2>&1
	installpkg dovecot-imapd dovecot-pop3d dovecot-common -y
	service dovecot start
 
	check_result $?"dovecot start failed"
  chkconfig dovecot on
	set_default_value 'dovecot''true' 
fi 
if promptyn "Do you wish to install fail2ban? "; then 
	installpkg fail2ban -y 
	if["$exim" = 'no']; thenfline=$(cat/etc/fail2ban/jail.local |grep-n exim-iptables -A2)fline=$(echo"$fline"|grep enabled |tail-n1|cut-f1-d -)sed-i"${fline}s/true/false/"/etc/fail2ban/jail.local
	fi 
	chkconfig fail2ban on
	service fail2ban start
	check_result $?"fail2ban start failed" 
fi 
if promptyn "Do you wish to install Mysql backup system? "; then 
	echo-e"Install MySql backup system";
 
	apt-get update
	installpkg git-ygit clone https://github.com/Mirocow/mysql_utils.git /root/mysql_utils
 
	echo'
 
	# Run MySql backup system
	25 6    * * * root /bin/bash  ~/mysql_utils/backup.sh --dir="/var/backups/mysql" --compress=bzip2 --exclude="mysql" --lifetime="3 day ago"
	'>>/etc/crontab	
 
fi 
if promptyn "Do you wish to install create site script? "; then 
	echo-e"Install create site scriptm";
	wget https://raw.githubusercontent.com/Mirocow/site-create/master/site-create.sh -O/root/site-create.sh
 
fi 
rm/var/cache/apt/archives/*.deb -f 
if promptyn "Do you wish to set default shell settings? "; then 
echo-e"Base system configure"echo'
 
#
# My config
#
 
#search in history with arrows
bind '"\e[A": history-search-backward' 2>/dev/null
bind '"\e[B": history-search-forward' 2>/dev/null
 
alias nano="nano -u -w "
alias ls="ls --color=always"
alias grep='grep--color=auto'
alias fgrep='fgrep--color=auto'
alias egrep='egrep--color=auto'
HISTSIZE=50000
HISTFILESIZE=50000
export HISTCONTROL=ignoreboth
shopt -s cmdhist
shopt -s histappend
shopt -s checkwinsize
shopt -s extglob
ulimit -c 0
 
#
# Functions
#
 
#-----------------------------------
# Функции работы с историей комманд
#-----------------------------------
 
function h(){
  history| grep "$@";
}
 
# Включение магии bash
if [ -f /etc/bash_completion ]; then
  . /etc/bash_completion
fi
 
'>> ~/.bashrc
source ~/.bashrc
 
echo'
set tabsize "2"
'>> ~/.nanorc		
fi 
apt-get updateapt-get upgradeapt-get autoremove-y
Viewing all 1318 articles
Browse latest View live