tag:blogger.com,1999:blog-85584402083697354902024-03-05T03:52:33.927-08:00linux noteswimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.comBlogger159125tag:blogger.com,1999:blog-8558440208369735490.post-12213197126969360952016-04-24T09:38:00.000-07:002016-04-24T09:38:43.798-07:00Восстановление столбца из бекапа MySQL<div dir="ltr" style="text-align: left;" trbidi="on">
Пришел клиент с задачей восстановить определенный столбец в определенной таблице <b>MySQL</b> с тем вариантом, что бы добавленные данные со времени бекапа остались в базе.<br />
<br />
Пишу краткую заметку для себя.<br />
<br />
Мне повезло, клиент бекапил таблицы отдельно и был бекап нужной таблицы, если же у Вас полный бекап базы, то можно получить нужный дамп таблицы, например <a href="https://blog.tsheets.com/2008/tips-tricks/extract-a-single-table-from-a-mysqldump-file">так</a>.<br />
<br />
Берем бекап таблицы users.sql.<br />
Столбец нужно восстановить - <b>status</b>.<br />
Переименовываем в дампе таблицу с users на <b>users2</b>:<br />
<b># sed -i 's/users/users2/g' users.sql</b><br />
<br />
После чего в нашей базе есть таблица <b>users</b> (актуальная версия таблицы) и <b>users2</b> (версия таблицы из бекапа).<br />
<br />
<a name='more'></a><br /><br />
Подключаемся к базе и выполняем запрос:<br />
<b>mysql# UPDATE users SET</b><br />
<b>users.status = (SELECT users2.status </b><br />
<b> FROM users2 </b><br />
<b> WHERE users.id = users2.id);</b><br />
<br />
И удаляем временную таблицу <b>users2</b>:<br />
<b>mysql# DROP TABLE users2;</b><br />
<br />
<br /></div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-85817508151480691782016-04-22T09:50:00.002-07:002016-04-22T09:50:22.046-07:00Установка PHP 5.2 и PHP 5.3 DirectAdmin <div dir="ltr" style="text-align: left;" trbidi="on">
Потребовалось доставить <b>PHP 5.3</b> на сервер с <b>DirectAdmin</b>. Что бы по умолчанию остался <b>PHP 5.2</b>, вот как это делается:<br />
<br />
<b># cd /usr/local/directadmin/custombuild</b><br />
<b># ./build set custombuild 1.2</b><br />
<b># ./build update</b><br />
<b># mkdir -p custom/suphp</b><br />
<b># cp -pf configure/suphp/configure.php5 custom/suphp/configure.php6</b><br />
<b># perl -pi -e 's/php53/phprep/' versions.txt</b><br />
<b># perl -pi -e 's/php6/php53/' versions.txt</b><br />
<b># perl -pi -e 's/phprep/php6/' versions.txt</b><br />
<b># ./build set php5_ver 5.2</b><br />
<b># ./build set php6_cgi yes</b><br />
<b># ./build set php5_cgi no</b><br />
<b># ./build set php5_cli yes</b><br />
<b># ./build php n</b><br />
<br />
<a name='more'></a><br /><br />
Отредактируем, что бы не путаться:<br />
<b># vim /usr/local/suphp/etc/suphp.conf</b><br />
Заменяем:<br />
<b><i>x-httpd-php6="php:/usr/local/php6/bin/php-cgi"</i></b><br />
на:<br />
<b><i>x-httpd-php5="php:/usr/local/php5/bin/php-cgi"</i></b><br />
<br />
<b># vim /etc/httpd/conf/extra/httpd-suphp.conf</b><br />
Заменяем:<br />
<b><i>AddHandler x-httpd-php6 .php6</i></b><br />
<b><i>suPHP_AddHandler x-httpd-php6</i></b><br />
на:<br />
<b><i>AddHandler x-httpd-php5 .php5</i></b><br />
<b><i>suPHP_AddHandler x-httpd-php5</i></b><br />
<br />
Перезагружаем apache:<br />
<b># /etc/init.d/httpd restart</b><br />
<br />
Теперь, что бы у домена был <b>PHP 5.3</b> (можно в любой директории отдельный PHP) создаем в нужном каталоге файл .<b>htaccess</b> с содержимым:<br />
<b><i><FilesMatch "\.php$"></i></b><br />
<b><i>AddHandler x-httpd-php5 .php</i></b><br />
<b><i></FilesMatch></i></b><br />
<b><i><br /></i></b>
<a href="http://forum.directadmin.com/showthread.php?t=35175&mode=linear">Стырено</a></div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-89315266079647575042016-04-10T03:18:00.001-07:002016-04-10T03:18:03.421-07:00Закрыть доступ к файлу/папке с помощью .htaccess<div dir="ltr" style="text-align: left;" trbidi="on">
Что бы запаролить вход к директории, необходимо в директории создать файл <b>.htaccess</b> с таким содержимым:<br />
<b><i>AuthType Basic</i></b><br />
<b><i>AuthName "Restricted area"</i></b><br />
<b><i>AuthUserFile /path/to/folder/where/.htpasswd</i></b><br />
<b><i>Require valid-user</i></b><br />
<br />
Если необходимо запаролить отдельный файл, то так:<br />
<b><i><FilesMatch "filename.php"></i></b><br />
<b><i>AuthType Basic</i></b><br />
<b><i>AuthName "Restricted area"</i></b><br />
<b><i>AuthUserFile /path/to/folder/where/.htpasswd</i></b><br />
<b><i>Require valid-user</i></b><br />
<b><i></FilesMatch></i></b><br />
<div>
<br /></div>
<div>
И сгенерировать файл <b>.htapssswd</b>:<br />
<b># htpasswd -nmb username password >/path/to/folder/where/.htpasswd</b><br />
<br />
Где <b>/path/to/folder/where/.htpasswd</b> - Ваш путь к файлу, где лежит файл с логином и паролем.</div>
</div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-19395154606636776062016-04-07T01:31:00.001-07:002016-04-08T04:16:51.561-07:00Установка SOCKS5 прокси SS5 на CentOS 7<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
1. Подготовим каталог:<br />
<b># mkdir /opt/ss5</b><br />
<b># cd /opt/ss5</b><br />
<br />
2. Скачаем <b>SS5</b>:<br />
<b>wget http://sourceforge.net/projects/ss5/files/ss5/3.8.9-8/ss5-3.8.9-8.src.rpm</b><br />
<b>wget http://sourceforge.net/projects/ss5/files/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz</b><br />
<br />
3. Установим зависимости:<br />
<b># yum groupinstall 'Development Tools'</b><br />
<b># yum install gcc automake autoconf libtool make pam-devel yum-utils openldap-devel openssl-devel</b><br />
<br />
<a name='more'></a><br /><br />
4. Проверим все ли зависимости установлены:<br />
<b># yum-builddep ss5-3.8.9-8.src.rpm</b><br />
<br />
5. Распаковываем исходники <b>SS5</b> и устанавливаем:<br />
<b># tar xvfz ss5-3.8.9-8.tar.gz</b><br />
<b># cd ss5-3.8.9</b><br />
<b># ./configure</b><br />
<b># make</b><br />
<b># make install</b><br />
<b># cd /etc/opt/ss5/</b><br />
<br />
5. Сделаем бекап конфигов:<br />
<b># cp ss5.passwd ss5.passwd.bak</b><br />
<b># cp ss5.conf ss5.conf.bak</b><br />
<br />
6. Настройка <b>SS5</b>:<br />
<b># vim ss5.conf</b><br />
<br />
Несколько примеров настройки:<br />
1) Разрешить без аутентификации доступ к <b>socks-серверу</b> в мир только со следующих адресов:<br />
<b><i>auth 0.0.0.0/0 - -</i></b><br />
<b><i>permit - 192.168.XXX.YYY/32 - 0.0.0.0/0 - - - - -</i></b><br />
<b><i>permit - 10.10.XXX.YYY/32 - 0.0.0.0/0 - - - - -</i></b><br />
<br />
2) Разрешить без аутентификации доступ с <b>socks-сервера</b> в мир со всех адресов (открытый прокси):<br />
<b><i>auth 0.0.0.0/0 - -</i></b><br />
<b><i>permit - 0.0.0.0/0 - 0.0.0.0/0 - - - - -</i></b><br />
<br />
3) Разрешить доступ только с аутентификацией, например, пользователю user с паролем password доступ с <b>socks-сервера</b> в мир<br />
<b><i>auth 0.0.0.0/0 - u</i></b><br />
<b><i>permit u 0.0.0.0/0 - 0.0.0.0/0 - - - - -</i></b><br />
<br />
И надо добавить самого юзера и пароль:<br />
<b># vim ss5.passwd</b><br />
<b><i>user password</i></b><br />
<br />
7. Запуск <b>SS5</b>-сервера и проверка запущен ли он:<br />
<b># ss5 -u root -b 0.0.0.0:1080</b><br />
<b># netstat -tulpan | grep ss5</b><br />
<b><i>tcp 0 0 0.0.0.0:1080 0.0.0.0:* LISTEN 33026/ss5</i></b><br />
<b># ps auxfww | grep ss5 | grep -v grep </b><br />
<b><i>root 33026 0.0 0.2 103324 2128 ? S 03:21 0:00 ss5 -u root -b 0.0.0.0:1080</i></b><br />
<div>
<br /></div>
<div>
Лог работы <b>SS5</b>:</div>
<div>
<b># tail -f /var/log/ss5/ss5.log</b></div>
<div>
<br /></div>
<div>
8. Настройка ротации лога:</div>
<div>
<b># cat /etc/logrotate.d/ss5</b></div>
<div>
<b><i>/var/log/ss5/ss5.log {</i></b></div>
<div>
<b><i>daily</i></b></div>
<div>
<b><i>rotate 3</i></b></div>
<div>
<b><i>dateext</i></b></div>
<div>
<b><i>compress</i></b></div>
<div>
<b><i>missingok</i></b></div>
<b><i>notifempty</i></b><br />
<b><i>copytruncate</i></b><br />
<b><i>}</i></b><br />
<br />
9. Настройка <b>iptables</b>:<br />
Создадим новый чейн:<br />
<b># iptables -N socks</b><br />
<b># iptables -A INPUT -p tcp --dport 1080 -j socks</b><br />
<b># iptables -A socks -j LOG --log-prefix "input socks: "</b><br />
<br />
Если мы настраиваем <b>SS5</b> для доступа только от отдельных IP-адресов, то пишем:<br />
<b># iptables -A socks -s 192.168.XXX.YYY -j ACCEPT</b><br />
<b># iptables -A socks -s 10.10.XXX.YYY -j ACCEPT</b><br />
<br />
И на всякий случай, остальное дропаем:<br />
<b># iptables -A socks -j DROP</b><br />
<br />
Теперь, давайте проверим с другого сервера выполнить запрос через<b> SS5 Proxy</b>:<br />
<b># curl --socks5 IP.IP.IP.IP:1080 --proxy-user user:password http://ipinfo.io/ip</b><br />
<b><i>IP.IP.IP.IP</i></b><br />
<br />
В логе увидим <b>/var/log/ss5/ss5.log</b>:<br />
<b><i>[07/Apr/2016:04:25:13 EDT] [44792] sourc_IP user "CONNECT" STARTED 0 0 0 (source_IP:46794 -> dest_IP:80)</i></b><br />
<b><i>[07/Apr/2016:04:25:14 EDT] [44792] source_IP user "CONNECT" TERMINATED 245 75 2 (source_IP:46794 -> dest_IP:80)</i></b><br />
<div>
<br /></div>
<div>
В логе iptables <b>/var/log/messages</b>:</div>
<b><i>Apr 7 03:40:21 DS823087 kernel: input socks: IN=eth0 OUT= MAC=00:16:3e:1b:f6:c2:00:24:14:4a:a5:80:08:00 SRC=client_IP DST=server_IP LEN=52 TOS=0x00 PREC=0x00 TTL=55 ID=14809 DF PROTO=TCP SPT=28080 DPT=1080 WINDOW=58 RES=0x00 ACK FIN URGP=0 </i></b><br />
<b><i>Apr 7 03:40:21 DS823087 kernel: input socks: IN=eth0 OUT= MAC=00:16:3e:1b:f6:c2:00:24:14:4a:a5:80:08:00 SRC=client_IP DST=server_IP LEN=40 TOS=0x08 PREC=0x00 TTL=55 ID=22507 DF PROTO=TCP SPT=28080 DPT=1080 WINDOW=0 RES=0x00 RST URGP=0 </i></b><br />
<div>
<br /></div>
<div>
<a href="https://kamaok.org.ua/?p=414">Стырено</a></div>
</div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com2tag:blogger.com,1999:blog-8558440208369735490.post-7278210940716698272016-04-02T16:24:00.003-07:002016-04-02T17:04:56.575-07:00Ansible в примерах. Часть 1<div dir="ltr" style="text-align: left;" trbidi="on">
В данный момент я изучаю замечательный инструмент Ansible.<br />
<br />
<b>Ansible</b> — сравнительно молодая система управления конфигурацией, его история насчитывает чуть более четырех лет. Но, несмотря на это, он стремительно и быстро ворвался в мир систем управления конфигурацией, потеснив <b>Chef</b>, <b>Puppet</b> и <b>SaltStack</b>.<br />
<br />
Давайте посмотрим на него внимательно, чтобы понять, почему он так любим технарями.<br />
<br />
Итак, чем же хорош <b>ansbile</b>:<br />
- низкий порог входа;<br />
- декларативный язык описания конфигурации;<br />
- на управляемые узлы не нужно устанавливать никакого дополнительного ПО;<br />
- просто написать дополнительный модуль.<br />
<br />
Установку я описал чуть ранее: <a href="http://blog.asidorov.name/2016/02/ansible-ubuntu-1204.html">http://blog.asidorov.name/2016/02/ansible-ubuntu-1204.html</a><br />
<br />
<a name='more'></a><br /><br />
Добавим в <b>/etc/ansible/hosts</b> новый хост:<br />
<b><i>[test]</i></b><br />
<b><i>ubuntu ansible_ssh_host=192.168.0.102 ansible_connection=ssh ansible_ssh_user=root</i></b><br />
<b><i><br /></i></b>
<br />
<h3 style="text-align: left;">
Пример 1:</h3>
Создадим простой плейбук и проверим его работу:<br />
<b># cat web-notls.yml </b><br />
<b><i>- name: Configure webserver with nginx</i></b> # название плейбука<br />
<b><i> hosts: ubuntu </i></b># хосты к которым будет применен плейбук<br />
<b><i> sudo: True</i></b><br />
<b><i> tasks:</i></b> # Задачи, которые надо выполнить на удаленном хосте<br />
<b><i> - name: Install nginx</i></b> # Название задачи<br />
<b><i> apt: name=nginx update_cache=yes</i></b> # используем модуль apt для обновления кеша пакетов (<b>update_cache=yes</b>) и установки nginx (<b>name=nginx</b>)<br />
<br />
<b><i> - name: copy nginx config file</i></b> # Скопируем файл files/nginx.conf с локального сервера на удаленный хост<br />
<b><i> copy: src=files/nginx.conf dest=/etc/nginx/sites-available/default </i></b><br />
<br />
<b><i> - name: Enable configuration</i></b> # создадим симлинк для включения сайта<br />
<b><i> file: > </i></b><br />
<b><i> dest=/etc/nginx/sites-enabled/default</i></b><br />
<b><i> src=/etc/nginx/sites-available/default</i></b><br />
<b><i> state=link</i></b><br />
<br />
<b><i> - name: copy index.html</i></b> # скопируем с локального сервера файл templates/index.html.j2 с правами доступа 0644<br />
<b><i> template: src=templates/index.html.j2 dest=/usr/share/nginx/html/index.html</i></b><br />
<b><i> mode=0644</i></b><br />
<br />
<b><i> - name: restart nginx</i></b> # Перезапустим nginx<br />
<b><i> service: name=nginx state=restarted</i></b><br />
<br />
Содержимое <b>files/nginx.conf</b>:<br />
<b># cat files/nginx.conf</b><br />
<b><i>server {</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>listen 80 default_server;</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>listen [::]:80 default_server ipv6only=on;</i></b><br />
<b><i><br /></i></b>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>root /usr/share/nginx/html;</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>index index.html index.htm;</i></b><br />
<b><i><br /></i></b>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>server_name ans.com www.ans.com;</i></b><br />
<b><i><br /></i></b>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>location / {</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>try_files $uri $uri/ =404;</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></b><br />
<b><i>}</i></b><br />
<div>
<br /></div>
<div>
Содержимое <b>templates/index.html.j2</b>:</div>
<div>
<div>
<b># cat templates/index.html.j2 </b></div>
<div>
<b><i><html></i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span><head></i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span><title>Welcome to ansible</title></i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span></head></i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span><body></i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span><h1> nginx, configured by Ansible</h1></i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span><p>If you can see this, Ansible successfully installed nginx.</p></i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span><p>{{ ansible_managed }}</p></i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span></body></i></b></div>
<div>
<b><i></html></i></b></div>
</div>
<div>
<br /></div>
Запустим этот плейбук:<br />
<b># ansible-playbook web-notls.yml</b><br />
<b><i><br /></i></b>
<b><i>PLAY [Configure webserver with nginx] ******************************************</i></b><br />
<b><i><br /></i></b>
<b><i>TASK [setup] *******************************************************************</i></b><br />
<b><i>ok: [ubuntu]</i></b><br />
<b><i><br /></i></b>
<b><i>TASK [Install nginx] ***********************************************************</i></b><br />
<b><i>changed: [ubuntu]</i></b><br />
<b><i><br /></i></b>
<b><i>TASK [copy nginx config file] **************************************************</i></b><br />
<b><i>changed: [ubuntu]</i></b><br />
<b><i><br /></i></b>
<b><i>TASK [Enable configuration] ****************************************************</i></b><br />
<b><i>ok: [ubuntu]</i></b><br />
<b><i><br /></i></b>
<b><i>TASK [copy index.html] *********************************************************</i></b><br />
<b><i>changed: [ubuntu]</i></b><br />
<b><i><br /></i></b>
<b><i>TASK [restart nginx] ***********************************************************</i></b><br />
<b><i>changed: [ubuntu]</i></b><br />
<b><i><br /></i></b>
<b><i>PLAY RECAP *********************************************************************</i></b><br />
<b><i>ubuntu : ok=6 changed=4 unreachable=0 failed=0 </i></b><br />
<br />
Так как я задал сервер нейм ans.com и прописал в <b>hosts</b>: <b>192.168.0.102 ans.com</b>, то при заходе на ans.com получаю такую картину:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOvayMJ-PEN81Ly7wVFk8ljjM-mPcuBwJQjkLeFM_bWXhNLlMBz2pF4AizExwtPl5q3l_jxNm8EUm_WVjoM8JJx7QTyuq_1Mw3a-ybsV8-dE_xuGMhWOhFEoY0lL4wztxqQRATz3kEyP8r/s1600/%25D0%2592%25D1%258B%25D0%25B4%25D0%25B5%25D0%25BB%25D0%25B5%25D0%25BD%25D0%25B8%25D0%25B5_068.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="69" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOvayMJ-PEN81Ly7wVFk8ljjM-mPcuBwJQjkLeFM_bWXhNLlMBz2pF4AizExwtPl5q3l_jxNm8EUm_WVjoM8JJx7QTyuq_1Mw3a-ybsV8-dE_xuGMhWOhFEoY0lL4wztxqQRATz3kEyP8r/s320/%25D0%2592%25D1%258B%25D0%25B4%25D0%25B5%25D0%25BB%25D0%25B5%25D0%25BD%25D0%25B8%25D0%25B5_068.png" width="320" /></a></div>
<br />
<h3 style="text-align: left;">
Пример 2:</h3>
Создадим плейбук для настройки nginx с TLS:<br />
<b><i># cat web-tls.yml</i></b><br />
<b><i>- name: Configure webserver with nginx and tls</i></b><br />
<b><i> hosts: ubuntu</i></b><br />
<b><i> sudo: True </i></b><br />
<i style="font-weight: bold;"> vars: </i># Определим переменные для плейбука<br />
<b><i> key_file: /etc/nginx/ssl/nginx.key</i></b><br />
<b><i> cert_file: /etc/nginx/ssl/nginx.crt</i></b><br />
<b><i> conf_file: /etc/nginx/sites-available/default</i></b><br />
<b><i> server_name: ans.com</i></b><br />
<b><i><br /></i></b>
<b><i> tasks:</i></b><br />
<b><i> - name: Install nginx</i></b><br />
<b><i> apt: name=nginx update_cache=yes cache_valid_time=3600</i></b><br />
<b><i><br /></i></b>
<i style="font-weight: bold;"> - name: create directories for ssl certificates </i># Создадим директорию для TLS<br />
<b><i> file: path=/etc/nginx/ssl state=directory</i></b><br />
<b><i><br /></i></b>
# Копируем TLS файлы<br />
<b><i> - name: copy TLS key</i></b><br />
<b><i> copy: src=files/nginx.key dest={{ key_file }} owner=root mode=0600</i></b><br />
<b><i><br /></i></b>
<b><i> - name: copy TLS certificate</i></b><br />
<b><i> copy: src=files/nginx.crt dest={{ cert_file }}</i></b><br />
<b><i><br /></i></b>
<b><i> - name: copy nginx config file</i></b><br />
<b><i> template: src=templates/nginx.conf.j2 dest={{ conf_file }}</i></b><br />
<b><i><br /></i></b>
# Тут добавилось notify: restart nginx - это означает, что необходимо запустить обработчик с именем restart nginx<br />
<b><i> - name: enable configuration</i></b><br />
<b><i> file: dest=/etc/nginx/sites-enabled/default src={{ conf_file }} state=link</i></b><br />
<b><i> notify: restart nginx</i></b><br />
<b><i><br /></i></b>
<b><i> - name: copy index.html</i></b><br />
<b><i> template: src=templates/index.html.j2 dest=/usr/share/nginx/html/index.html mode=0644</i></b><br />
<b><i><br /></i></b>
# Сам обработчик, который перезапускает nginx<br />
<b><i> handlers:</i></b><br />
<b><i> - name: restart nginx</i></b><br />
<b><i> service: name=nginx state=restarted</i></b><br />
<div>
<br /></div>
Генерируем SSL сертификат:<br />
<b># openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -subj /CN=ans.com -keyout files/nginx.key -out files/nginx.crt</b><br />
<b><i>Generating a 2048 bit RSA private key</i></b><br />
<b><i>.........................................................................................+++</i></b><br />
<b><i>..........................+++</i></b><br />
<b><i>writing new private key to 'files/nginx.key'</i></b><br />
<b><i>-----</i></b><br />
<div>
<br /></div>
<div>
Содержимое <b>templates/nginx.conf.j2</b>:</div>
<div>
<div>
<b><i>server {</i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>listen 80 default_server;</i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>listen [::]:80 default_server ipv6only=on;</i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>listen 443 ssl;</i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>root /usr/share/nginx/html;</i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>index index.html index.htm;</i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>server_name {{ server_name }} www.{{ server_name }};</i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>ssl_certificate {{ cert_file }};</i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>ssl_certificate_key {{ key_file }};</i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>location / {</i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>try_files $uri $uri/ =404;</i></b></div>
<div>
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>}</i></b></div>
<div>
<b><i>}</i></b></div>
</div>
<div>
<br /></div>
<div>
Запустим этот плейбук:</div>
<div>
<b># ansible-playbook web-tls.yml</b></div>
<div>
<div>
<div>
<b><i>PLAY [Configure webserver with nginx and tls] **********************************</i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><i>TASK [setup] *******************************************************************</i></b></div>
<div>
<b><i>ok: [ubuntu]</i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><i>TASK [Install nginx] ***********************************************************</i></b></div>
<div>
<b><i>changed: [ubuntu]</i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><i>TASK [create directories for ssl certificates] *********************************</i></b></div>
<div>
<b><i>ok: [ubuntu]</i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><i>TASK [copy TLS key] ************************************************************</i></b></div>
<div>
<b><i>ok: [ubuntu]</i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><i>TASK [copy TLS certificate] ****************************************************</i></b></div>
<div>
<b><i>ok: [ubuntu]</i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><i>TASK [copy nginx config file] **************************************************</i></b></div>
<div>
<b><i>changed: [ubuntu]</i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><i>TASK [enable configuration] ****************************************************</i></b></div>
<div>
<b><i>ok: [ubuntu]</i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><i>TASK [copy index.html] *********************************************************</i></b></div>
<div>
<b><i>ok: [ubuntu]</i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><i>RUNNING HANDLER [restart nginx] ************************************************</i></b></div>
<div>
<b><i>changed: [ubuntu]</i></b></div>
</div>
<div>
<b><i><br /></i></b></div>
<div>
<div>
<b><i>PLAY RECAP *********************************************************************</i></b></div>
<div>
<b><i>ubuntu : ok=9 changed=3 unreachable=0 failed=0 </i></b></div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
</div>
</div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-38915880386515085822016-04-01T16:52:00.001-07:002016-09-06T14:48:21.073-07:00Вопросы с собеседований на позицию Системного Администратора Linux<div dir="ltr" style="text-align: left;" trbidi="on">
Добрый день.<br />
<br />
Так как я работаю системным администратором Linux (в основном хостинг, виртуальные сервера, выделенные сервера). Бывает, что я собеседуюсь в те или иные компании.<br />
Мне нравится само прохождение собеседования, так как частенько задают вопросы, которые заставляют подумать и узнать что-то новое. Вот я и решился наконец выложить вопросы, которые мне задавали на собеседованиях. По ясным причинам я не буду указывать названия компаний, а просто буду их нумеровать.<br />
Так же в силу того, что я специалист не самого высокого класса, я не буду писать свои ответы, но если Вы захотите, я бы с радостью обсудил возможные ответы в комментариях или по почте.<br />
Так же тут будут, как и вопросы, так и тестовые задания. Некоторые вопросы довольно абсурды и очень мало информации, но что же поделать? Какие есть.<br />
Буду рад если Вы скинете вопросы, которые задавали Вам при собеседовании на ту или иную вакансию.<br />
<br />
Хорошая репа с большим количеством вопросов:<br />
<b>https://github.com/chassing/linux-sysadmin-interview-questions</b><br />
<br />
И так, поехали.<br />
<br />
<a name='more'></a><br />
<h2 style="text-align: left;">
Вакансии, на которые собеседовался лично.</h2>
<h3 style="text-align: left;">
Вакансия №1:</h3>
1. Как из обычного сайта на LAMP сделать отказоустойчивый сайт?<br />
2. Как должна выглядеть правильная схема релиза кода сайта из Git репозитория?<br />
3. Чем отличаются способы создания реплики в MySQL, какой их них стоит использовать? Почему?<br />
4. У нас есть крон для отправки SMS сообщений из очереди. Как правильно организовать мониторинг этой подсистемы? Какие метрики будут учитываться?<br />
<br />
<h3 style="text-align: left;">
Вакансия №2:</h3>
1. Как в nginx привязать соеденения для конкретного апстрима<br />
2. Виды репликаций в Mysql,Postresql. Сильные и слабые стороны<br />
3. У меня есть ip адрес как обеспечить отказоустойчивость<br />
4. Клиент жалуется что при заходе на сервер он набирает mc и mc загружется долго. Как диагностировать проблему? В чем может быть проблема<br />
5. Основные отличия между innodb и MyISAM<br />
6. У меня есть файл 600Гб(резервная копия) как мне его скопировать в раздел где свободно только 500 Гб<br />
7. Напешите не большой скрипт который в зависимости от http статуса выводить то или ино сообщение, к примеру если у меня 200 пишет ОК, если 400 то not found, если 500 то Alert<br />
8. Что такое CARP?<br />
<br />
<h3 style="text-align: left;">
Вакансия №3:</h3>
Есть VPS с CentOS 6 и панелью управления VestaCP. Необходимо:<br />
1. Обновить PHP до версии 5.6<br />
2. Проверить работоспособность PhpMyAdmin/RoundCube<br />
3. Обновить ionCube<br />
4. Перевести Apache с prefork на ITK<br />
5. Установить какой-либо socks прокси<br />
<br />
<h3 style="text-align: left;">
Вакансия №4:</h3>
1. Какую технологию ты узнал вчера, на этой неделе, недавно? Естесно связанную с хостингом<br />
2. Можешь мне рассказать о самой большой ошибке которую делал на серверах?<br />
3. Разницу между 0, 1, 5 и 10 рейдом расскажешь кратко? А что такое диск четности?<br />
4. Как посмотреть зону для домена на нужном нс?<br />
5. Расскажи какие LoadAverage в топе светятся и что это такое(la) вообще. Что оно показывает<br />
6. Что такое свап и зачем он нужен? А можно ли отключить свап через sysctl? А в каких ситуациях ты бы рекомендовал вырубать свап?<br />
7. Что такое снмп и приходилось ли использовать? А что он может делать для управления?<br />
8. Что такое chroot jail?<br />
9. Что такое ARP и для чего оно используется? На каком уровне используется этот протокол?<br />
10. В чем разница между пингом и трассировкой<br />
11. В чем разница между tcp и udp? Если я по udp отправляю пакет, я контролирую дошел ли он до получателя?<br />
12. Найди текст test в файлах в папке и всех вложенных. Например хочешь найти пароль к базе данных, а где конфиг не знаешь<br />
<br />
<h3 style="text-align: left;">
Вакансия №5:</h3>
1. В чем недостаток установки софта из исходников?<br />
2. Что такое BBU и есть ли смысл в его использовании?<br />
3. Как настроить новый slave для MySQL для одной БД размером 40Gb, в которой есть как innodb так и myisam?<br />
4. LA 8 это много или мало?<br />
5. Допустим Вам поставлена задача настроить https only сайт example.com в nginx для production. Приведите пример ssl настроек для этого сайта (location, logs, тюнинг не нужны - нужны только опции касающиеся ssl)<br />
6. Есть некая программа без исходников которая раньше работала и вдруг перестала запускаться в какой-то момент.<br />
Условия:<br />
- Попросить помощи у ее разработчиков нет;<br />
- в логах никаких ошибок не пишет;<br />
- просто при запуске сразу возвращает управление;<br />
- как можно попытаться понять причину проблему.<br />
7. Хостинг Провайдер выдал нам сервер с CentOS указав доступ для ssh входа на него.<br />
IP: x.x.x.x (реальный IP)<br />
login: root<br />
pass: qwerty<br />
С чего начнете настраивать сервер?<br />
8. date -d@$[$(date -d '2009-10-25 00:00:00' +%s) + 24*60*60]<br />
Sun Oct 25 23:00:00 EET 2009<br />
Добавили 24 часа а получили 23:00. Как такое могло получится?<br />
9. Чем отличается find -maxdepth 1 -name '*txt' -printf "%f\n" от shopt -s dotglob; ls -dC1a *txt; shopt -u dotglob<br />
и в каких ситуациях вывод будет различаться<br />
Важно именно отличие в выводе STDOUT (не STERR)<br />
Сортировка роли не играет<br />
Есть ситуация в которой эти команды будет выдавать разный результат<br />
10. Есть миллион строк в которых очень много дублей<br />
нужно показать из них уникальные (т.е. убрать дубликаты чтобы вместо всех дубллей была всего одна строка)<br />
<br />
<h3 style="text-align: left;">
Вакансия №6:</h3>
1. Каким образом (командой) можно просмотреть загруженность диска операциями ввода-вывода?<br />
2. Какой командой можно посмотреть общий объем и оставшееся свободное место на диске?<br />
3. Каким образом вы будете делать бэкап базы MySQL объёмом 10 Гб и использующей хранилище InnoDB? А если хранилище MyISAM?<br />
4. Необходимо ограничить процессы пользователя uXXXX, чтобы они потребляли в сумме не более 512 мб памяти. Как это можно сделать?<br />
5. Написать команду вывода файлов в каталоге /var/www/ в тексте которых содержится текст "Button".<br />
6. Запретить всем кроме IP-адреса 1.2.3.4 в файрволе доступ к серверу на порт 22<br />
7. Дан linux сервер. В нём два диска по 250 Gb. Диски собраны в софтовый linux-raid1, поверх рейда используется LVM. На LVM уже созданы разделы для ОС. В качестве ОС стоит proxmox, самый большой раздел на LVM как раз отдан под раздел /var/lib/vz<br />
Нужно заменить в сервере диски на пару по два террабайта и расширить раздел для VPS, чтобы использовать всю доступную ёмкость новых дисков.<br />
Возможно ли это? Можно ли это сделать без перезагрузки, если сервер поддерживает горячую замену дисков? Если возможно, приведите пожалуйста общий алгоритм действий. Можно и примерную последовательность комманд.<br />
8. Есть web-проект (php+mysql) с довольно сложной структурой базs данных. Исторически сложилость, что далеко не все SQL запросы хорошо оптимизированы. Достаточно часто выполняются выборки больших массивов данных с последующей сортировкой без использования индексов, объединение нескольких таблиц (тоже не используя индексы) и т.п. При этом, в выбираемых данных есть поля типа BLOB или TEXT.<br />
Типы таблиц смешанные. Есть как InnoDB,так и MyISAM<br />
На сервере есть 8Gb памяти, один процессор xeon (4 ядря с hyper-threading), 4 диска, собранные в raid10<br />
Используется связка nginx+php-fpm<br />
Какие меры Вы предпримите для обеспечения наиболее оптимального быстродействия как сервера баз данных? Будет отлично, если сможете сделать какие-то замечания и по оптимизации nginx, php-fpm.<br />
9. На приведённый выше сервер идёт атака через крупный ботнет (http-flood). Одновременно на сервер приходит порядка от 20 до 100 тысяч запросов к разным url сайта. Сервер подключен к сети на скорости 100 мегабит в секунду<br />
Можно ли отбить такую атаку только средствами сервера? Если нет, то почему.<br />
Если да, как Вы это будете делать?<br />
<br />
<h3 style="text-align: left;">
Вакансия №7:</h3>
Необходимо развернуть тестовый кластер на контейнерах с опомощью ansible.<br />
Для контейнеров советую использовать proxmox 3.4 можно и 4.0 но раньше ansible с ним не работал из-за изменений в API.<br />
<br />
Например создаете виртуальную машинe в VirtualBox туда ставите proxmox<br />
И с помощью ansible (лучше ставить из git'a только в 2.0 версии сделали плагин для proxmox) написать playbook который будет удалять все контейнеры и создавать заново (образ дефолтного контейнера тоже прийдется сделать самому, инфы в интернете полно по сути нужен контейнер с минимальной версией убунты или дебиан + возможно некоторые пакеты для ansible если они потребуются, мне например потребовался образ с новой версией python'a)<br />
<br />
таким образом можно будет проверять основной playbook для кластера, подготавливая чистое окружение.<br />
<br />
Кластер должен сотсоять из 6ти контейнеров первые 2 это контенеры с nginx, другие 3 это контенеры с php-fpm (весь софт должен устанавливаться с помощью ansible, конфиги и прочее тоже должны генерироваться через ansible и добавление новой ноды в кластер должно быть простое, без внесения изменений в конфиги) каждый nginx должен уметь load-balancing между php-fpm контейнерами. в php контенейры можно добавить какой-нибудь простой php скрипт, который и будет выполняться.<br />
<br />
Т.е у вас должен получится образ 1го контейнера для proxmox на котором чистая ubuntu + минимум пакетов для ansible и playbookов которые разворачивают на основе этого образа кластер.<br />
<br />
<h3 style="text-align: left;">
Вакансия №8:</h3>
1. Развернуть на vps (можно взять любую, с бесплатным тестовым периодом, AWS например) стек mariadb, nginx (proxy to apache vhosts), apache2, php-fpm, php 5.6, exim, memcached. Образ можно использовать последний стабильный debian или ubuntu lts.<br />
2. Настроить кеширование в mysql (mariadb) для любых запросов( result query >=1).<br />
3. Настроить конфигурацию innodb заточенную именно для этой vps (под конкретный размер памяти OЗУ).<br />
4. Предоставить пример конфигурации my.ini для сервера баз данных, если бы у сервера было 32 гигабайта памяти и 16 ядер процессора.<br />
5. Настроить тестовый виртуальный хост на nginx, который проксирует запросы на php-fpm, сделать тестовую станицу index.php которая выводит информацию о конфигруации php (<?php phpinfo(); ?>).<br />
6. Поставить доп модули для php - memcached, pdo_mysql, mongo-db, xdebug (если нет в основном репозитории, подключить сторонний).<br />
7. Включить xdebug в конфигурации, (активация отладки - по куке).<br />
8. Добавить пользователя test, и дать беcпарольный доступ к серверу (ssh key).<br />
9. Настроить sudo и дать доступ выполнение команды apt-get apt-cache пользователю test.<br />
10. Настроить на nginx - кеширование fastcgi запросов (если запрос содержит куку сессии, PHPSESSIONID - не кешировать).<br />
11. Обновить пакеты на сервере.<br />
12. Написать скрипт, который показывает какой скрипт или процесс использует максимально а. Диск, б. Процессор. Отсортировать список по убыванию.<br />
13. Занести измененные файлы конфигурации в git (а еще круче если это будет puppet или другая тузла для централизованного конфигурирования сервера).<br />
<br />
<h3 style="text-align: left;">
Вакансия №9:</h3>
Настроить LAMP + nginx.<br />
Создать виртуальный хост test.domain.com, в index.php поместить вывод<br />
функции phpinfo.<br />
Нужно, чтобы в информации выводился ip, с которого пришел запрос.<br />
Установить memcached и настроить хранение php-сессий в memcached.<br />
Средствами nginx сделать перенаправление любых ссылок на главную страницу, настроить кеширование статики.<br />
Установить Percona Server, настройки оптимизировать под характеристики сервера.<br />
Настроить dkim (ключи для внесения в ДНС выслать).<br />
Добиться, чтобы почта проходила спам-проверку в сервисе verifier.port25.com.<br />
Поставить mutt, проверять ссылкой echo 'test' | mutt -e 'set from='noreply@rosslab.info'' -e 'set realname='User'' -e 'set smtp_url='smtp://localhost:25'' -s 'DKIM' check-auth-ak=southbridge.ru@verifier.port25.com<br />
В качестве основного репозитория рекомендуется использовать тот, который тут http://rpms.southbridge.ru (выбрать подходящий)<br />
<br />
<h3 style="text-align: left;">
Вакансия №10:</h3>
1. Нормальный LA на сервере виртуального хостинга колеблется от 0 до 2. LA резко увеличивается до 50. Как понять причину повышения нагрузки? Напишите команды для анализа проблемы и вероятные причины начиная с самой вероятной.<br />
2. Каким образом можно гарантированно ограничить каждого пользователя виртуального хостинга от выедания им всех ресурсов cpu и памяти linux сервера, учитывая что mod_php/mod_perl не установлены?<br />
3. Какие методы для борьбы с исходящим спамом через web скрипты и sendmail существуют в mta postfix и exim? Spamassasin и другие спам фильтры рассматривать не нужно.<br />
4. Как организовать ежедневное резервное копирование сервера виртуального хостинга создавая при этом минимум нагрузки на него, учитывая, что он содержит около 10-ти миллионов файлов, а общий объем данных около 300Гб?<br />
5. На одного из клиентов виртуального хостинга направлена DDOS атака. Ваши действия по его предотвращению? Как можно настроить linux сервер так, чтобы воздействие ddos атаки на одного клиента минимально сказалось на общей производительности и доступности сервера?<br />
6. На OpenVZ ноде LA достигает 300. Как понять причину повышения нагрузки? Напишите команды для анализа проблемы и вероятные причины начиная с самой вероятной.<br />
7. Как смигрировать Xen domU с одной ноды на другую с минимальным даунтаймом при условии что общее дисковое хранилище не используется и в качестве виртуальных дисков используется lvm? Опишите несколько вариантов.<br />
8. Предложите способы ограничения количества одновременных подключений с одного ip (система: LAMP + nginx)? Каковы условия применимости каждого из указанных способов?<br />
<br />
<h3 style="text-align: left;">
Вакансия №11</h3>
1. Please write iptables rules that will block all incoming traffic and allow outgoing (browsing
from local machine should work, but all incoming connections should be dropped).<br />
2. There is a directory with 2 files that are shown as '???' and '???'. They have different names,
but in console are shown as 3 question marks. How to remove them?<br />
3. If you want to upload some file once per hour to 1 server from 1000 servers, how it can be
done? What special cases should be taken into account?<br />
4. You have a folder that stores backups of a few projects. Each project lays in a separate folder
and each backup is a tarball file with unique name. Write a Python script that removes all
backups for the given project except the last 5.<br />
<br />
<h3 style="text-align: left;">
Вакансия №12</h3>
Задача 1:<br />
- Есть клиенты, которые отдают контент. Клиенты - python+кеширующий nginx.<br />
- За клиентами есть ноды, которые принимают решения и дают инструкции, какой контент отдавать. Ноды на python и чистом tornado.<br />
- Клиенты и ноды общаются с Redis. Клиенты используют его для хранения сессий пользователей и синхронизации друг с другом, ноды используют для хранения и модификации слепков обучения.<br />
- На виртуалке DO (2GB, 2 CPU) они переваривают 300 rps от клиента, дальше начинается рост скорости ответа из-за переполнения пула открытых сокетов. Это ограничение клиента, которое пока не оптимизировалось. Клиент на python видимо медленно закрывает сокеты. Аналогичный клиент на go кладет уже tornado на ноде при 1500 rps. Аналогичный клиент на php без роста скорости ответа работает с 50 rps.<br />
- Ко всем клиентам планируется 100 млн обращений в сутки. Для упрощения задачи будем считать, что доступны только вышеуказанные виртуалки.<br />
- Обращения могут быть из любого региона. Необходимо обеспечить как минимум 4 - AU, US, EU, SG в зависимости от того, откуда пришел пользователь.<br />
- Процентное соотношение обращений из регионов неизвестно и может быть любым. Могут быть пиковые нагрузки, ужимающие весь объем обращений в четырехчасовое окно.<br />
<br />
Необходимо:<br />
- Задать уточняющие вопросы.<br />
- Предложить решение по балансировке.<br />
- Описать и аргументировать модель и количество виртуальных машин для отказоустойчивой модели.<br />
- Описать собственные шаги по созданию инфраструктуры.<br />
Любые мысли, мнения и рассуждения приветствуются.<br />
<br />
Задача 2:<br />
- Есть Clickhouse в качестве основного хранилища событий<br />
- Количество событий для дева 100 млн в сутки, для продакшена 1 млрд в сутки<br />
- Перед Clickhouse стоит RabbitMQ и воркеры на запись, которые пишут события не чаще раза в секунду.<br />
- 1 млн событий занимает 0.150 GB дискового пространства без учета репликаций и бекапов.<br />
- Для дева достаточная скорость отчетов достигается на одной машине 16 GB, 8 ядер. Для продакшена должны быть распределенные SELECT, чтобы уменьшить время отдачи тех же самых выборок в три раза.<br />
- Скорость записи у Clickhouse высокая: 160к строк в секунду на 2GB, 2CPU. Можно принимать это значение за рабочее).<br />
- Данные можно утилизировать через 90 дней хранения.<br />
<br />
Необходимо:<br />
- Предложить минимальную отказоустойчивую конфигурацию, задача которой обеспечить достаточную производительность отчетов, объем хранения и протестировать возможности шардирования, репликации, подъема в случае технических сбоев и отказа одной из машин. При этом для дева допустим полный простой базы в течение 6 часов. Ориентир - минимальная стоимость достаточной конфигурации и высокая скорость реализации инфраструктуры.<br />
- Предложить аналогичную конфигурацию для продакшена, полная потеря работоспособности базы недопустима. Ориентир - максимальная надежность и высокая скорость формирования отчетов.<br />
- Описать и аргументировать конфигурации: характеристики железа, модели шардирования и репликации, модели бекапа и используемые решения, другие способы повышения отказоустойчивости. Можно ссылаться на какие-то определенные хостинги или облачные решения.<br />
- Описать собственные шаги по созданию инфраструктуры.<br />
<div>
<br /></div>
<h2 style="text-align: left;">
Присланные вакансии</h2>
<h3 style="text-align: left;">
Вакансия №1:</h3>
1. Репликация БД. Процесс настройки и запуска.<br />
2. Как установить свою ОС, со своей разбивкой дисков на выделенный сервер в интернете.<br />
3. Что такое VMware vSphere. Какие в него входят компоненты.<br />
4. Что такое RVM.<br />
5. Что такое qemu, xen, openvz. В чем отличия.<br />
6. Синхронизация данных между серверами. Какие есть варианты?<br />
7. Что такое mdadm. Процедура замены диска. Коротко описать.<br />
8. Какой веб сервер подходит лучше для раздачи видео. Почему?<br />
9. Что такое Amazon EC2 и Amazon S3<br />
<br />
<br />
<h2 style="text-align: left;">
Вакансии, найденные на просторах интернета</h2>
<h3 style="text-align: left;">
Вакансия №1:</h3>
1. Как узнать, кто из клиентов потребляет больше резидентной памяти в данный момент своими процессами (построить топ по потреблению). Вывод ps (не полный) выглядит так. Всего в ps процессов несколько сотен:<br />
Исходник:<br />
ps axu<br />
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND<br />
u5867 32518 0.0 0.0 214036 12764 ? S 21:34 0:00 /usr/bin/php-cgi5.2<br />
u425 32532 1.1 0.0 139736 24556 ? S 21:34 0:01 /usr/bin/php-cgi5.3<br />
u6363 32535 1.1 0.0 183444 20240 ? S 21:34 0:01 /usr/bin/php-cgi5.2<br />
u12124 32548 0.2 0.0 174432 28360 ? S 21:34 0:00 /usr/bin/php-cgi5.2<br />
2. По какому принципу работает программа traceroute?<br />
3. Вам понадобилось выделить подсеть размером в 30 ip-адресов. Можете ли в уме посчитать, какой должна быть маска получившейся сети?<br />
4. Расскажите, что такое Path MTU.<br />
5. Расскажите, что такое TCP Window.<br />
6. Какой тип DNS-записи мы будем использовать при указании того, какой сервер отвечает за приём почты определённого домена?<br />
7. Как выглядит HTTP-запрос для проверки корректности работы настроек веб-сервера для отдачи сжатого контента при его поддержке клиентом (на примере /index.html)?<br />
8. Расскажите, в чём заключаются различия между симлинком и хардлинком.<br />
9. Каким образом в sh/bash можно обработать какой-либо сигнал? Например, по завершении скрипта необходимо удалить временные файлы, созданные в процессе работы, причём выполнить это необходимо даже том случае, если выполнение скрипта было прервано извне. Обработку каких сигналов мы не можем выполнить?<br />
10. Вам необходимо обеспечить максимальную доступность одного сервиса (программы). Расскажите, каким образом можно обеспечить автоматический запуск/перезапуск сервиса в случае его внештатного завершения.<br />
11. Для нового сервера, на котором будут работать базы данных, необходимо подготовить дисковую систему. Пожалуйста, расскажите, чем вы будете руководствоваться при настройке дисков, какие настройки raid будете применять, какой io scheduler?<br />
12. Как посмотреть, с какими параметрами запущено ядро linux?<br />
13. Приходилось ли вам сталкиваться с tun/tap устройствами? В чём заключается их различие?<br />
14. Допустимо ли полностью отключать своп на сервере? Почему?<br />
15. Каким образом можно просмотреть загруженность диска операциями ввода-вывода?<br />
16. На сервере настроены два интерфейса: eth0 и eth1. Используемый по умолчанию шлюз доступен через eth0. Запросы поступают на сервер через оба интерфейса. Каким образом можно настроить использование другого шлюза для отправки ответов на пришедшие через eth1 запросы? Предполагается, что запрос может придти с произвольного ip-адреса.<br />
17. Каким образом вы будете делать бэкап базы MySQL объёмом 10 Гб и использующей хранилище InnoDB? А если хранилище MyISAM?<br />
18. С какими трудностями/проблемами вам приходилось сталкиваться при поддержке репликации в MySQL, если есть такой опыт? Каким образом вы чинили развалившуюся репликацию?<br />
<br />
19. Предположим, у вас есть какой-то веб-сайт, работающий под LAMP. На этот сайт началась атака типа http-flood. Какие действия Вы бы предприняли для самостоятельной борьбы с этой атакой?<br />
20. Имеется некоторое большое (несколько десятков) количество одинаковых систем, настроенных под одну задачу (хостинг). Каким образом вы будете производить работы по установке нового ПО, обновлению; следить за актуальностью и однотипностью конфигурационных файлов?<br />
21. В каких ситуация целесообразно применять Jumbo Frames?<br />
22. Если вам была бы поставлена задача построить отказоустойчивый кластер для обеспечения работы веб-сайта на LAMP, какие технологии вы для этого использовали и почему?<br />
23. Необходимо запретить доступ к размещенным на сервере сайтам всем клиентам с User-Agent: MegaXakep. Как бы Вы это сделали?<br />
24. В чем отличие между KVM, XEN и OpenVZ. Какие преимущества и недостатки каждой из этих технологий вы знаете?<br />
25. Необходимо ограничить процессы пользователя uXXXX, чтобы они потребляли в сумме не более 512 мб памяти. Как это можно сделать?<br />
26. Какие режимы репликации изменений базы поддерживаются MySQL?<br />
27. В каких случаях на slave-ах может быть необходимо ведение binlog-а?<br />
Пруф: <a href="http://www.e1.ru/talk/forum/read.php?f=125&t=33520&i=33603&page=1&#33603">http://www.e1.ru/talk/forum/read.php?f=125&t=33520&i=33603&page=1&#33603</a><br />
<br />
<h3 style="text-align: left;">
Вакансия №2:</h3>
В ответах следует учитывать что под ОС Unix может пониматься как Linux так и Solaris/HP UX<br />
<br />
1. У вас на сервере под управлением ОС Unix файловая система из нескольких разделов, смонтированных в несколько точек. Необходимо узнать в какую точку смонтирован каждый раздел и сколько места на каждом разделе свободно/занято (в кб, мб или гб).<br />
2. У вас на сервере под управлением ОС Unix файловая система из нескольких разделов, смонтированных в несколько точек. Внезапно закончилось свободное место на одном из разделов. Вам необходимо определить, какие именно файлы исчерпали место на диске.<br />
3. У вас на сервере под управлением ОС Unix имеется много (>>1000) файлов вида esb_ora_DDDDDD.trc, где DDDDDD - произвольный набор цифр. Необходимо найти все файлы такого вида, узнать их кол-во, размер и удалить все файлы кроме 10 самых новых.<br />
4. Есть два сервера под управлением ОС Unix с ip 10.50.0.3 и 10.50.0.4. С вашей рабочей станции имеется доступ по ssh к обеим машинам. На 10.50.0.4 должен работать веб-сервер на порту 8080 к которому должен быть доступ с 10.50.0.3. Необходимо проверить, что веб-сервер на 10.50.0.4 действительно запущен, слушает правильный порт и с 10.50.0.3 к нему есть доступ.<br />
5. Вам предоставлен доступ по ssh к серверу 10.50.0.3 с вашей рабочей станции и к серверу 10.50.0.4 с сервера 10.50.0.3. Напишите sh скрипт, после запуска которого, вы сможете зайти с 10.50.0.3 на 10.50.0.4 без ввода пароля.<br />
6. На сервере 10.50.0.4 работает управляющая web-консоль сервера glassfish по адресу http://10.50.0.4:4848/. С вашей рабочей станции доступ к порту 4848 закрыт, имеется только доступ по ssh. Необходимо попасть в управляющую консоль.<br />
7. На сервере 10.50.0.3 имеется структура файлов, часть из которых периодически модифицируется. На сервере 10.50.0.4, к которому есть доступ по ssh имеется копия этой структуры. Необходимо периодически (раз в сутки) обновлять файлы на 10.50.0.4 не пересоздавая всю структуру заново.<br />
8. При помощи команд ps, awk, gawk, grep определите суммарный размер памяти, используемой процессами oracle.<br />
9. Поступает жалоба что одно из приложений на сервере приложений glassfish сильно тормозит. Необходимо произвести анализ из-за какого из системных ресурсов (процессор, память, диски и т.д.) приложение тормозит. Так же необходимо собрать статистику потребления системных ресурсов сервера за определенный интервал времени. Ваши действия.<br />
10. Вам необходимо узнать какая из программ, запущенных на сервере сильнее всего нагружает 3-е ядро 4-х ядерного процессора. Как вы это сделаете?<br />
11. Сервер внезапно начал тормозить, предварительный анализ показал, виртуальная и физическая память занята процессами sendmail и остальные приложения работают в swap. Каким образом вы измените приоритет выполнения процессов sendmail на сервере для освобождения памяти?<br />
12. Внезапно происходит отказ одного из модулей памяти, производительность резко падает. В каком файле (файлах) логируются события аппаратных отказов? Какие из ниже перечисленных системных демонов вы остановите для освобождения памяти:<br />
Svc<br />
httpd<br />
nfs<br />
syslogd<br />
xinetd<br />
crond<br />
cupsd<br />
ntpd<br />
snmpd<br />
13. Как вы узнаете процессор с какой арихитектурой используется в сервере.<br />
14. Вы работаете на сервере, где установлен glassfish. БД ORACLE работает на другом физическом сервере. Как вы узнаете с какого сетевого интерфейса сервер, на котором вы работаете, взаимодействует с сервером oracle<br />
15. Как вы можете посмотреть локальную таблицу маршрутизации сервера<br />
16. Какая консольная команд позволяет посылать icmp – запросы на удаленные хосты с целью проверки их доступности.<br />
17. cервер glassfish не может установить соединение с БД Oracle, расположенной на другом физическом сервере в другом сегменте сети. Каким образом вы убедитесь, что запросы с сервера glassfish маршрутизируются корректно и проблема с сервером БД Oracle<br />
Пруф: <a href="http://hydrobiont.livejournal.com/107182.html#cutid1">http://hydrobiont.livejournal.com/107182.html#cutid1</a><br />
<br />
<h3 style="text-align: left;">
Вакансия №3:</h3>
1. Расскажите, пожалуйста, о типах packet filters, о разнице между stateful и<br />
stateless поведением,<br />
о Packet filters в различных системах.<br />
2. Способ организации packet filter rulesets.<br />
Дана машина с одним внешним интерфейсом. Составьте группы правил (в любой<br />
форме, можно в свободной) для следующих<br />
условий: открытые сервисы: ftp, ssh, smtp, named, http. ftp должен работать<br />
как в passive, так и active режиме,<br />
исходящие соединения разрешены.<br />
3. а) Репликация MySQL.<br />
На двух серверах настроена репликация БД. Как убедиться, что с репликацией<br />
всё в порядке?<br />
Что делать, если репликация «сломалась»?<br />
б) Есть база db. В ней 3 таблицы staff(id1, name), phone(id2, number),<br />
office(id3, room).<br />
Как составить 1 запрос, который выводит сотрудников, которые находятся в<br />
комнате 13<br />
и их телефонный номер начинается на 13 в формате «имя, телефон, комната».<br />
4. Приведена tcp сессия. Объясните особенность данной сессии.<br />
Что она означает?<br />
pastebin.com/LawY6C5D<br />
5. На продакшен сервере после нештатной перезагрузки не проходит<br />
проверка дисков и<br />
вы видите сообщение bad superblock. Ваши действия?<br />
6. Приведите небольшой фрагмент вашего кода на Bash с описанием его работы?<br />
7. Вносили ли вы изменения в существующий код чужих программ? Приведите,<br />
пожалуйста, пример (в виде diff).<br />
8. Какими способами можно увеличить производительность web приложений?<br />
Можно ли обслуживать с помощью apache 1000-2000 одновременных коннектов?<br />
Каким образом можно снизить нагрузку на сервер в этом случае?<br />
9. Виртуализация.<br />
а) Какие программные реализации использовали в работе?<br />
б) В чем принципиальное различие между OpenVZ и KVM?<br />
в) Какие тонкие настройки, модификации осуществляли при работе с системами<br />
виртуализации для разграничения использования дисковой подсистемы?<br />
г) Выполняли ли оптимизацию работы с памятью в системе виртуализации KVM? Если да, то какой технологией пользовались?<br />
10. Какие системы контроля версий ПО вы использовали в работе? Какие инструменты<br />
для организации коллективной работы использовали?<br />
Пруф: <a href="https://toster.ru/q/20266">https://toster.ru/q/20266</a><br />
<br /></div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com3tag:blogger.com,1999:blog-8558440208369735490.post-78895025865617201392016-03-30T05:41:00.001-07:002016-03-30T05:51:11.909-07:00Установка Nagios 4.1.1 на Ubuntu 14.04<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
Опишу установку Nagios 4.1.1, Nagios Plugins 2.1.1 NRPE 2.15 на Ubuntu 14.04 на nginx, php-fpm и fcgiwrap:<br />
<br />
1. Установка nginx:<br />
Обновим пакеты:<br />
<b># apt-get update</b><br />
<b># apt-get upgrade</b><br />
<b># apt-get install build-essential</b><br />
<br />
Подключим репозиторий nginx:<br />
<b># cat /etc/apt/sources.list.d/nginx.list</b><br />
<b><i>deb http://nginx.org/packages/ubuntu/ trusty nginx</i></b><br />
<b><i>deb-src http://nginx.org/packages/ubuntu/ trusty nginx</i></b><br />
<br />
Получим ключ репозитория nginx:<br />
<b><i># wget http://nginx.org/keys/nginx_signing.key</i></b><br />
<b><i># apt-key add nginx_signing.key</i></b><br />
<br />
<a name='more'></a><br /><br />
Установим nginx:<br />
<b># apt-get update</b><br />
<b># apt-get install nginx</b><br />
<b># service nginx status</b><br />
<b><i> * nginx is running</i></b><br />
<br />
2. Установка Nagios Core:<br />
<br />
2.1 Установка зависимостей:<br />
<b># apt-get install libgd2-xpm-dev</b><br />
<b># apt-get install php5-fpm</b><br />
<b># apt-get install spawn-fcgi fcgiwrap</b><br />
<b># apt-get install zip</b><br />
<br />
2.2 Добавим пользователя nagios:<br />
<b># adduser --system --no-create-home --disabled-login --group nagios</b><br />
<i><b>Adding system user `nagios' (UID 106) ...</b></i><br />
<i><b>Adding new group `nagios' (GID 113) ...</b></i><br />
<i><b>Adding new user `nagios' (UID 106) with group `nagios' ...</b></i><br />
<i><b>Not creating home directory `/home/nagios'.</b></i><br />
<br />
Добавим в нужные группы:<br />
<b># groupadd nagcmd</b><br />
<b># usermod -G nagcmd nagios</b><br />
<b># usermod -a -G nagcmd www-data</b><br />
<br />
2.3 Установка Nagios Core:<br />
<b># cd /usr/local/src</b><br />
<b># wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.1.1.tar.gz</b><br />
<b># tar xzf nagios-4.1.1.tar.gz</b><br />
<b># cd nagios-4.1.1</b><br />
<br />
Сконфигурируем Nagios Core:<br />
<b># ./configure --prefix=/usr/local/nagios-4.1.1 --sysconfdir=/etc/nagios --with-command-group=nagcmd</b><br />
<b><i> General Options:</i></b><br />
<b><i> -------------------------</i></b><br />
<b><i> Nagios executable: nagios</i></b><br />
<b><i> Nagios user/group: nagios,nagios</i></b><br />
<b><i> Command user/group: nagios,nagcmd</i></b><br />
<b><i> Event Broker: yes</i></b><br />
<b><i> Install ${prefix}: /usr/local/nagios-4.1.1</i></b><br />
<b><i> Install ${includedir}: /usr/local/nagios-4.1.1/include/nagios</i></b><br />
<b><i> Lock file: ${prefix}/var/nagios.lock</i></b><br />
<b><i> Check result directory: ${prefix}/var/spool/checkresults</i></b><br />
<b><i> Init directory: /etc/init.d</i></b><br />
<b><i> Apache conf.d directory: /etc/httpd/conf.d</i></b><br />
<b><i> Mail program: /bin/mail</i></b><br />
<b><i> Host OS: linux-gnu</i></b><br />
<b><i> IOBroker Method: epoll</i></b><br />
<b><i><br /></i></b>
<b><i> Web Interface Options:</i></b><br />
<b><i> ------------------------</i></b><br />
<b><i> HTML URL: http://localhost/nagios/</i></b><br />
<b><i> CGI URL: http://localhost/nagios/cgi-bin/</i></b><br />
<b><i> Traceroute (used by WAP): </i></b><br />
<br />
Установим:<br />
<b># make all</b><br />
<b># make install</b><br />
<b># make install-init</b><br />
<b># make install-config</b><br />
<b># make install-commandmode</b><br />
<br />
Создадим симлинк:<br />
<b># ln -s /usr/local/nagios-4.1.1/ /usr/local/nagios</b><br />
<b><br /></b>
2.4 Создание пользователя<br />
Так как у нас php-fpm, а не Apache, создадим небольшой скрипт для генерации логина и пароля базовой авторизации:<br />
<b># vim /usr/local/bin/htpasswd.pl</b><br />
<b><i>#!/usr/bin/perl</i></b><br />
<b><i> use strict;</i></b><br />
<b><i> if ( @ARGV != 2 ){</i></b><br />
<b><i> print "usage: /usr/local/bin/htpasswd.pl <username> <password>\n";</i></b><br />
<b><i>}</i></b><br />
<b><i>else {</i></b><br />
<b><i> print $ARGV[0].":".crypt($ARGV[1],$ARGV[1])."\n";</i></b><br />
<b><i>}</i></b><br />
<div>
<br /></div>
<b># chmod +x /usr/local/bin/htpasswd.pl</b><br />
<br />
И сгенерируем пару логин пароль:<br />
<b># /usr/local/bin/htpasswd.pl username password >> /etc/nagios/htpasswd.users</b><br />
<b><br /></b>
Отредактируем конфигурационные файлы, заменив nagiosadmin на вновь созданного юзера:<br />
<b># vim /etc/nagios/cgi.cfg </b><br />
<b><i>:%s/nagiosadmin/<username>/g</i></b><br />
<b># vim /etc/nagios/objects/contacts.cfg </b><br />
<b><i>:%s/nagiosadmin/<user>/g</i></b><br />
<br />
2.5 Создание директории для логов:<br />
<b># mkdir /var/log/nagios</b><br />
<b># chown nagios:nagios /var/log/nagios</b><br />
<b># vim /etc/nagios/nagios.cfg</b><br />
<b><i>log_file=/var/log/nagios/nagios.log</i></b><br />
<br />
3. Установка Nagios Plugins 2.1.1:<br />
<br />
3.1. Установим зависимости<br />
<b># apt-get install libssl-dev</b><br />
<b># apt-get install libmysqlclient-dev</b><br />
<b># apt-get install mysql-client</b><br />
<br />
3.2 Соберем Nagios Plugins из исходников:<br />
<b># cd /usr/local/src</b><br />
<b># wget http://www.nagios-plugins.org/download/nagios-plugins-2.1.1.tar.gz</b><br />
<b># tar xzf nagios-plugins-2.1.1.tar.gz</b><br />
<b># cd nagios-plugins-2.1.1/</b><br />
<b># ./configure --with-nagios-user=nagios --with-nagios-group=nagios</b><br />
<b># make</b><br />
<b># make install</b><br />
<br />
4. Установка NRPE 2.15:<br />
<b># cd /usr/local/src</b><br />
<b># wget http://kent.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz</b><br />
<b># tar xzf nrpe-2.15.tar.gz</b><br />
<b># cd nrpe-2.15</b><br />
<b># root@mon:/usr/local/src/nrpe-2.15# ./configure --with-ssl=/usr/bin/openssl --with-ssl-lib=/usr/lib/x86_64-linux-gnu</b><br />
<br />
<br />
5. Настройка<br />
<br />
Добавим в загрузку nagios:<br />
<b># update-rc.d -f nagios defaults</b><br />
<br />
Проверим конфигурационный файл:<br />
<b># /usr/local/nagios/bin/nagios -v /etc/nagios/nagios.cfg </b><br />
<br />
Вывод должен быть примерно таким:<br />
<b><i>Nagios Core 4.1.1</i></b><br />
<b><i>Copyright (c) 2009-present Nagios Core Development Team and Community Contributors</i></b><br />
<b><i>Copyright (c) 1999-2009 Ethan Galstad</i></b><br />
<b><i>Last Modified: 08-19-2015</i></b><br />
<b><i>License: GPL</i></b><br />
<b><i>Website: https://www.nagios.org</i></b><br />
<b><i>Reading configuration data...</i></b><br />
<b><i> Read main config file okay...</i></b><br />
<b><i> Read object config files okay...</i></b><br />
<b><i>Running pre-flight check on configuration data...</i></b><br />
<b><i>Checking objects...</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 8 services.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 1 hosts.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 1 host groups.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 0 service groups.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 1 contacts.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 1 conNagios Core 4.1.1</i></b><br />
<b><i>Copyright (c) 2009-present Nagios Core Development Team and Community Contributors</i></b><br />
<b><i>Copyright (c) 1999-2009 Ethan Galstad</i></b><br />
<b><i>Last Modified: 08-19-2015</i></b><br />
<b><i>License: GPL</i></b><br />
<b><i>Website: https://www.nagios.org</i></b><br />
<b><i>Reading configuration data...</i></b><br />
<b><i> Read main config file okay...</i></b><br />
<b><i> Read object config files okay...</i></b><br />
<b><i>Running pre-flight check on configuration data...</i></b><br />
<b><i>Checking objects...</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 8 services.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 1 hosts.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 1 host groups.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 0 service groups.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 1 contacts.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 1 contact groups.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 24 commands.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 5 time periods.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 0 host escalations.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 0 service escalations.</i></b><br />
<b><i>Checking for circular paths...</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 1 hosts</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 0 service dependencies</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 0 host dependencies</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 5 timeperiods</i></b><br />
<b><i>Checking global event handlers...</i></b><br />
<b><i>Checking obsessive compulsive processor commands...</i></b><br />
<b><i>Checking misc settings...</i></b><br />
<b><i>Total Warnings: 0</i></b><br />
<b><i>Total Errors: 0</i></b><br />
<b><i>Things look okay - No serious problems were detected during the pre-flight checktact groups.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 24 commands.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 5 time periods.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 0 host escalations.</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 0 service escalations.</i></b><br />
<b><i>Checking for circular paths...</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 1 hosts</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 0 service dependencies</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 0 host dependencies</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>Checked 5 timeperiods</i></b><br />
<b><i>Checking global event handlers...</i></b><br />
<b><i>Checking obsessive compulsive processor commands...</i></b><br />
<b><i>Checking misc settings...</i></b><br />
<b><i>Total Warnings: 0</i></b><br />
<b><i>Total Errors: 0</i></b><br />
<b><i>Things look okay - No serious problems were detected during the pre-flight check</i></b><br />
<br />
6. Запустим службы<br />
<b># service nagios start</b><br />
<b># service fcgiwrap restart</b><br />
<b># service php5-fpm restart</b><br />
<br />
7. Создадим конфигурационный файл для nginx:<br />
<b># vim /etc/nginx/conf.d/mon.domain.com.conf</b><br />
<b><i>server {</i></b><br />
<b><i> server_name mon.domain.com www.mon.domain.com;</i></b><br />
<b><i> access_log /var/log/nginx/mon.domain.com.access.log;</i></b><br />
<b><i> error_log /var/log/nginx/mon.domain.com.error.log;</i></b><br />
<br />
<b><i> auth_basic "Private";</i></b><br />
<b><i> auth_basic_user_file /etc/nagios/htpasswd.users;</i></b><br />
<br />
<b><i> root /usr/local/nagios/share;</i></b><br />
<b><i> index index.php index.html;</i></b><br />
<br />
<b><i> location / {</i></b><br />
<b><i> try_files $uri $uri/ index.php /nagios;</i></b><br />
<b><i> }</i></b><br />
<br />
<b><i> location /nagios {</i></b><br />
<b><i> alias /usr/local/nagios/share;</i></b><br />
<b><i> }</i></b><br />
<br />
<b><i> location ~ ^/nagios/(.*\.php)$ {</i></b><br />
<b><i> alias /usr/local/nagios/share/$1;</i></b><br />
<b><i> include /etc/nginx/fastcgi_params;</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>fastcgi_pass unix:/var/run/php5-fpm.sock;</i></b><br />
<b><i> }</i></b><br />
<br />
<b><i> location ~ \.cgi$ {</i></b><br />
<b><i> root /usr/local/nagios/sbin/;</i></b><br />
<b><i> rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;</i></b><br />
<b><i> include /etc/nginx/fastcgi_params;</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span>fastcgi_param AUTH_USER $remote_user;</i></b><br />
<b><i> <span class="Apple-tab-span" style="white-space: pre;"> </span>fastcgi_param REMOTE_USER $remote_user;</i></b><br />
<b><i><span class="Apple-tab-span" style="white-space: pre;"> </span> <span class="Apple-tab-span" style="white-space: pre;"> </span>fastcgi_param SCRIPT_FILENAME /usr/local/nagios/sbin/$fastcgi_script_name;</i></b><br />
<b><i> <span class="Apple-tab-span" style="white-space: pre;"> </span>fastcgi_pass unix:/var/run/fcgiwrap.socket;</i></b><br />
<b><i> }</i></b><br />
<br />
<b><i> location ~ \.php$ {</i></b><br />
<b><i> include /etc/nginx/fastcgi_params;</i></b><br />
<b><i> fastcgi_pass unix:/var/run/php5-fpm.sock;</i></b><br />
<b><i> }</i></b><br />
<b><i>}</i></b><br />
<br />
Проверим не допустили ли ошибок и перезагружаем nginx:<br />
<b># nginx -t</b><br />
<b># service nginx reload</b><br />
<br />
Установка Postfix для отправки уведомлений:<br />
<b># apt-get install postfix (Internet site)</b><br />
<b># apt-get install heirloom-mailx</b><br />
<div>
<br /></div>
<div>
<br /></div>
<div>
Ссылки:</div>
<div>
<a href="http://www.tokiwinter.com/installing-nagios-under-nginx-on-ubuntu-14-04-lts/">http://www.tokiwinter.com/installing-nagios-under-nginx-on-ubuntu-14-04-lts/</a><br />
<a href="https://www.digitalocean.com/community/tutorials/how-to-install-nagios-4-and-monitor-your-servers-on-ubuntu-14-04">https://www.digitalocean.com/community/tutorials/how-to-install-nagios-4-and-monitor-your-servers-on-ubuntu-14-04</a></div>
</div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-85859507902078781482016-03-29T23:49:00.002-07:002016-03-29T23:49:06.130-07:00Debian squeeze backport репозиторий<div dir="ltr" style="text-align: left;" trbidi="on">
Стал получать такую ошибку при подключении бэкпортов к Debian Squeeze:<br />
<b><i>E: Release file for http://backports.debian.org/debian-backports/dists/squeeze-backports/Release is expired (invalid since 9d 21h 41min 25s). Updates for this repository will not be applied.</i></b><br />
<div>
<br /></div>
<div>
Чинится просто:</div>
<div>
<b># vim /etc/apt/apt.conf.d/10no--check-valid-until</b></div>
<div>
<b><i>Acquire::Check-Valid-Until "0";</i></b></div>
<div>
<br /></div>
<div>
И все.</div>
</div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-80488601251456316882016-03-29T06:10:00.001-07:002016-03-29T06:10:04.059-07:00Установка nginx на cPanel<div dir="ltr" style="text-align: left;" trbidi="on">
Клиент попросил установить <b>nginx</b> на <b>cPanel</b>, краткая заметка:<br />
<br />
<b># cd /usr/local/src</b><br />
<b># wget http://nginxcp.com/latest/nginxadmin.tar</b><br />
<b># tar xf nginxadmin.tar</b><br />
<b># cd publicnginx</b><br />
<b># ./nginxinstaller install</b><br />
<i><b>access key doesn't exist</b></i><br />
<i><b>go to WHM > Cluster/Remote Access > Setup Remote Access Key</b></i><br />
<i><b>and click on the Generate New Key button</b></i><br />
<br />
<a name='more'></a><br /><br />
Идем в панель управления сервером <b>cPanel</b> в раздел:<br />
<b><i>Cluster/Remote Access -> Setup Remote Access Key -> Generate New Key</i></b><br />
<br />
И сама установка:<br />
<b># ./nginxinstaller install</b><br />
<br />
Если повалятся ошибки <b>Python</b>, то еще один фикс:<br />
<div>
<b># ./pythonfix</b></div>
<div>
<div>
<b># ./nginxinstaller install</b></div>
</div>
<div>
<br /></div>
<div>
<a href="https://www.internetearnings.com/how-to-install-nginx-on-cpanel-whm-server/">Стырено</a></div>
</div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-17188010699097926262016-03-29T05:57:00.002-07:002016-03-29T05:57:35.399-07:00Смена пароля cPanel<div dir="ltr" style="text-align: left;" trbidi="on">
Получилось так, что зашел на сервер по SSH, а в панель попасть не могу, смена пароля в <b>cPanel</b>:<br />
<b># /scripts/chpass root '2n_sXaJ1BM4!SG'</b><br />
<br />
Однако тут получил ошибку:<br />
<b><i>ERROR: /usr/local/cpanel/scripts/realchpass</i></b><br />
<b><i>Invocation changes only the system</i></b><br />
<b><i>password and does not have any effect</i></b><br />
<b><i>on other services associated with your</i></b><br />
<b><i>cPanel account, including FTP, SSH,</i></b><br />
<b><i>WebDAV, and FrontPage. It is strongly</i></b><br />
<b><i>encouraged for you to change the</i></b><br />
<b><i>password via the WHM & cPanel</i></b><br />
<b><i>interface. You can force a password</i></b><br />
<b><i>change through this script by setting</i></b><br />
<b><i>the environment variable</i></b><br />
<b><i>'ALLOW_PASSWORD_CHANGE=1'.</i></b><br />
<br />
Добавим переменную:<br />
<b># export ALLOW_PASSWORD_CHANGE=1</b><br />
<br />
Теперь все ок:<br />
<b># /scripts/chpass root '2n_sXaJ1BM4!SG'</b><br />
<b>warn [realchpass] Insecure passing of password on ARGV</b><br />
<b>Password for root has been changed</b></div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-9650129898114282872016-03-23T15:45:00.001-07:002016-03-23T15:45:15.279-07:00Настройки подключения к базе данных CMS<div dir="ltr" style="text-align: left;" trbidi="on">
Краткая заметка о том, где в каких CMS находятся настройки подключения к базе данных:<br />
<b>Joomla</b> - configuration.php<br />
<b>WordPress</b> - wp-config.php<br />
<b>Drupal 6</b> - site/default/settings.php<br />
<b>Drupal 7</b> - site/default/settings.php<br />
<b>DLE (DataLife Engine)</b> - engine/data/dbconfig.php<br />
<b>Shop-script </b>- cfg/connect.inc.php<br />
<b>ShopCMS</b> - core/config/connect.inc.php<br />
<b>WebAsys</b> - dblist/логин.xml, kernel/wbs.xml, temp/scdb/.settings.логин<br />
<b>PretaShop</b> - config/settings.inc.php<br />
<b>MODx</b> - manager/includes/config.inc.php<br />
<b>Bitrix</b> - bitrix/php_interface/dbconn.php<br />
<b>CMS PHPShop </b>- phpshop/inc/config.ini<br />
<b>CMS Opencart</b> - config.php, admin/config.php<br />
<b>CMS Magento</b> - app/etc/local.xml<br />
<b>ImageCMS</b> - application/config/database.php</div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-30307167758719555922016-03-22T18:59:00.002-07:002016-03-22T18:59:51.828-07:00Установка nginx proxy<div dir="ltr" style="text-align: left;" trbidi="on">
Краткая заметка по установке <b>nginx</b> прокси сервера, для скрытия IP-адреса <b>backend'а</b> (<b>20.20.20.20</b>), <b>Frontend</b> имеет IP <b>10.10.10.10</b>.<br />
<br />
Установим <b>nginx</b>:<br />
<b># vim /etc/yum.repos.d/nginx.repo</b><br />
<b><i>[nginx]</i></b><br />
<b><i>name=nginx repo</i></b><br />
<b><i>baseurl=http://nginx.org/packages/centos/6/$basearch/</i></b><br />
<b><i>gpgcheck=0</i></b><br />
<b><i>enabled=1</i></b><br />
<br />
<b># yum install nginx</b><br />
<b># mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak</b><br />
<b></b><br />
<a name='more'></a><b><br /></b><br />
<b># vim /etc/nginx/conf.d/default.conf</b><br />
<b><i>server {</i></b><br />
<b><i>listen 80;</i></b><br />
<b><i>server_name default_server;</i></b><br />
<b><i>location / {</i></b><br />
<b><i>access_log /var/log/nginx/access.log;</i></b><br />
<b><i>proxy_pass http://20.20.20.20;</i></b><br />
<b><i>proxy_set_header X-Real-IP $remote_addr;</i></b><br />
<b><i>proxy_set_header Host $host;</i></b><br />
<b><i>proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</i></b><br />
<b><i>}</i></b><br />
<b><i>}</i></b><br />
<br />
<b># nginx -t</b><br />
<b># /etc/init.d/nginx restart</b><br />
<br />
Добавим в файл <b>hosts</b> например запись:<br />
<b>10.10.10.10 test.com www.test.com</b><br />
<br />
Теперь давайте проверим, скрываем ли мы таким образом IP-адрес <b>backend'а</b>:<br />
<br />
Запустим <b>tcpdump</b>:<br />
<b># tcpdump -vv -s0 tcp port 80 -w /tmp/outgoing.pcap</b><br />
<br />
А в другом терминале сделаем <b>curl</b>:<br />
<b># curl http://test.com</b><br />
<br />
И сразу выключим наш <b>tcpdump</b>. Теперь полученный pcap файл удобно посмотреть через <b>tshark</b>:<br />
<b># tshark /tmp/outgoing.pcap</b><br />
<b><i>3 1.563002 192.168.0.102 -> 10.10.10.10 TCP 74 55936 > http [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=5556038 TSecr=0 WS=128</i></b><br />
<b><i>4 1.768934 10.10.10.10 -> 192.168.0.102 TCP 74 http > 55936 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=9957164 TSecr=5556038 WS=32</i></b><br />
<b><i>5 1.769023 192.168.0.102 -> 10.10.10.10 TCP 66 55936 > http [ACK] Seq=1 Ack=1 Win=29312 Len=0 TSval=5556090 TSecr=9957164</i></b><br />
<b><i>6 1.769213 192.168.0.102 -> 10.10.10.10 HTTP 149 GET / HTTP/1.1 </i></b><br />
<b><i>7 1.975268 10.10.10.10 -> 192.168.0.102 TCP 66 http > 55936 [ACK] Seq=1 Ack=84 Win=14496 Len=0 TSval=9957370 TSecr=5556090</i></b><br />
<b><i>8 2.104264 10.10.10.10 -> 192.168.0.102 HTTP 1385 HTTP/1.1 200 OK (text/html)</i></b><br />
<b><i>9 2.104328 192.168.0.102 -> 10.10.10.10 TCP 66 55936 > http [ACK] Seq=84 Ack=1320 Win=31872 Len=0 TSval=5556174 TSecr=9957498</i></b><br />
<b><i>10 2.105242 192.168.0.102 -> 10.10.10.10 TCP 66 55936 > http [FIN, ACK] Seq=84 Ack=1320 Win=31872 Len=0 TSval=5556174 TSecr=9957498</i></b><br />
<b><i>11 2.311546 10.10.10.10 -> 192.168.0.102 TCP 66 http > 55936 [FIN, ACK] Seq=1320 Ack=85 Win=14496 Len=0 TSval=9957706 TSecr=5556174</i></b><br />
<b><i>12 2.311627 192.168.0.102 -> 10.10.10.10 TCP 66 55936 > http [ACK] Seq=85 Ack=1321 Win=31872 Len=0 TSval=5556225 TSecr=9957706</i></b><br />
<br />
Как видим, IP-адрес backend'а никак не палится, чего и хотелось добиться.</div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-85432219142409394812016-03-22T16:37:00.003-07:002016-03-22T16:37:45.889-07:00Не включается квота ISPmanager 4/5<div dir="ltr" style="text-align: left;" trbidi="on">
Столкнулся с проблемой, что на сервере с OpenVZ в контейнере не активируется дисковая квота для пользователей, в логе панели видим такую ошибку:<br />
<b><i><span style="background-color: white; font-family: monospace, fixed; font-size: 12px; line-height: 15.6px;">Mar 22 21:19:40 [961:86161] proc EXTINFO Run '/bin/sh -c setquota\ -g\ 504\ 20480000\ 20480000\ 2343750\ 2343750\ /' pid 19638</span><br style="background-color: white; font-family: monospace, fixed; font-size: 12px; line-height: 15.6px;" /><span style="background-color: white; font-family: monospace, fixed; font-size: 12px; line-height: 15.6px;">Mar 22 21:19:40 [961:86161] proc EXTINFO Process 19638 finished with status 1</span><br style="background-color: white; font-family: monospace, fixed; font-size: 12px; line-height: 15.6px;" /><span style="background-color: white; font-family: monospace, fixed; font-size: 12px; line-height: 15.6px;">Mar 22 21:19:40 [961:86161] quota ERROR Failed to set quota: 'setquota: Cannot stat() mounted device simfs: No such file or directory</span><br style="background-color: white; font-family: monospace, fixed; font-size: 12px; line-height: 15.6px;" /><span style="background-color: white; font-family: monospace, fixed; font-size: 12px; line-height: 15.6px;">setquota: Mountpoint (or device) / not found or has no quota enabled.</span><br style="background-color: white; font-family: monospace, fixed; font-size: 12px; line-height: 15.6px;" /><span style="background-color: white; font-family: monospace, fixed; font-size: 12px; line-height: 15.6px;">setquota: Not all specified mountpoints are using quota.</span></i></b><br />
<br />
Фиксится очень просто.<br />
ISPmanager 5:<br />
<b># ln -s /simfs /usr/local/mgr5/simfs</b><br />
<br />
ISPmanager 4:<br />
<b># ln -s /simfs /usr/local/ispmgr/simfs</b><br />
<br />
<br /></div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-70429705960094862872016-03-22T15:26:00.001-07:002016-03-22T15:26:21.339-07:00DirectAdmin обновить PHP с 5.3 до 5.4<div dir="ltr" style="text-align: left;" trbidi="on">
Краткая заметка по обновлению:<br />
<b># cd /usr/local/directadmin/custombuild</b><br />
<b># ./build update</b><br />
<b># ./build set php5_ver 5.4</b><br />
<b># ./build php n</b><br />
<br />
<a href="https://forum.directadmin.com/showthread.php?t=48853">Стырено</a><br />
<br /></div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-28464051940411940212016-03-19T06:14:00.002-07:002016-03-19T06:14:16.857-07:00DirectAdmin dataskq много процессов<div dir="ltr" style="text-align: left;" trbidi="on">
Обратился знакомый с проблемой, что сайты перестали работать. Зашел на сервер с панелью управления <b>DirectAdmin</b> и увидел очень много процессов <b>dataskq</b> и LA 1200.<br />
Прибил данные процессы и решил поправить крон, что бы такого более не повторялось:<br />
<br />
Отредактируем файл <b>/etc/cron.d/directadmin_cron</b>:<br />
<b># vim /etc/cron.d/directadmin_cron</b><br />
<br />
И строку <b>* * * * * root /usr/local/directadmin/dataskq</b> заменим на:<br />
<b>* * * * * root if [ "`ps ax | grep -v grep | grep -c dataskq`" -eq 0 ]; then /usr/local/directadmin/dataskq; fi;</b><br />
<br />
Теперь, перед запуском <b>dataskq</b> будет проверяться, нет ли других процессов.<br />
<br />
Ссылки:<br />
<a href="http://help.directadmin.com/item.php?id=246">http://help.directadmin.com/item.php?id=246</a><br />
<a href="http://directadminguru.com/directadmin-command-line-tasks-dataskq/">http://directadminguru.com/directadmin-command-line-tasks-dataskq/</a><br />
<a href="http://help.directadmin.com/item.php?id=402">http://help.directadmin.com/item.php?id=402</a></div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-12511209657563343292016-03-14T15:02:00.000-07:002016-03-14T15:02:01.453-07:00Fatal: Error in configuration file /etc/dovecot/sni.conf<div dir="ltr" style="text-align: left;" trbidi="on">
Появилась ошибка на сервере с <b>cPanel</b>:<br />
<b><i>Запускается Dovecot Imap: doveconf: Fatal: Error in configuration file /etc/dovecot/sni.conf line 2: ssl_cert: Can't open file /var/cpanel/ssl/installed/certs/domain_com_ce349_bba83_1486628878_23fec30cbb1f26d45d0cd436432e395c.crt: No such file or directory</i></b><br />
<br />
Такого сертификата и правда не было на сервере по указанному пути, решается ребилдом mail sni:<br />
<b># /scripts/build_mail_sni --rebuild_map_file --rebuild_dovecot_sni_conf</b><br />
<b><i>[*] Rebuilding SNI map file for mail services...</i></b><br />
<b><i>[+] Successfully built SNI map file: /etc/mail_sni_map</i></b><br />
<b><i>[*] Rebuilding Dovecot SNI configuration file...</i></b><br />
<b><i>[+] Successfully built Dovecot SNI configuration: /etc/dovecot/sni.conf</i></b><br />
<div>
<br /></div>
<div>
Теперь все гуд.</div>
<div>
<a href="http://wiki.iphoster.ru/wiki/Cpanel_-_Fatal:_Error_in_configuration_file_/etc/dovecot/sni.conf_line_82:_ssl_cert:_Can't_open_file_/var/cpanel/ssl/installed/certs/">Стырено</a></div>
</div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-28109806461898124922016-03-12T10:54:00.003-08:002016-03-12T10:54:52.971-08:00Проблема с translate data yii2<div dir="ltr" style="text-align: left;" trbidi="on">
Вообщем понадобилось завести сайт на yii2 и для отображения комфортной записи, когда были обновлены данные, однако вместо этого отображалось что-то вроде:<br />
<b>{delta, plural, =1{день} one{день} few{дня} many{дней} other{дня}}</b><br />
<b><br /></b>
На сервере используется панель управления <b>CentOS Web Panel</b> и установка производилась для одной из версий php.<br />
<br />
Пришлось долго повозиться, но рецепт был найден:<br />
<br />
Удаляем пакет с древней версией:<br />
<b># yum remove libicu</b><br />
<br />
Компилим новую версию ICU:<br />
<b># yum install gcc gcc-c++ php-devel php-pear</b><br />
<b># cd /tmp</b><br />
<b># wget http://download.icu-project.org/files/icu4c/54.1/icu4c-54_1-src.tgz</b><br />
<b># tar -xvf icu4c-54_1-src.tgz</b><br />
<b># cd icu/source/</b><br />
<b># ./configure --prefix=/opt/icu4c-54_1 && make && make install</b><br />
<br />
После чего, необходимо пересобрать PHP с опцией:<br />
<b> --with-icu-dir=/opt/icu4c-54_1</b><br />
<br />
<br />
Ставим модуль intl для PHP 5.4:<br />
<b># pecl download intl</b><br />
<b># tar xvfz intl-3.0.0.tgz</b><br />
<b># cd intl-3.0.0</b><br />
<b># /opt/alt/php54/usr/bin/phpize</b><br />
<b># ./configure --with-php-config=/opt/alt/php54/usr/bin/php-config</b><br />
<b># make</b><br />
<b># make install</b><br />
<b># vim /opt/alt/php54/usr/php/php.d/intl.ini</b><br />
<b><i>extension=intl.so</i></b><br />
<br />
<b># /etc/init.d/httpd restart</b><br />
<b><br /></b>
Полезные ссылки:<br />
<a href="http://nitinsharma.info/linux/libicui18n-so-42-cannot-open-shared-object-file-while-enabling-multiple-php-versions-in-parallels-plesk-for-linux/">http://nitinsharma.info/linux/libicui18n-so-42-cannot-open-shared-object-file-while-enabling-multiple-php-versions-in-parallels-plesk-for-linux/</a><br />
<a href="http://yiiframework.ru/forum/viewtopic.php?t=22716#p135719">http://yiiframework.ru/forum/viewtopic.php?t=22716#p135719</a></div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-45416019821615408002016-03-03T23:47:00.001-08:002016-03-03T23:47:17.806-08:00ISPmanager 4 ошибка "Имя базы уже существует"<div dir="ltr" style="text-align: left;" trbidi="on">
Бывает так, что в панели управления базы данных нет, но при попытке ее создания получаем ошибку "<b>Имя базы уже существует</b>", при этом в ispmgr.log видна ошибка:<br />
<b><i>ERROR Exception 2: 'name' already exists</i></b><br />
<div>
<br /></div>
<div>
Сначала проверим, есть ли данная база:</div>
<div>
<b># mysql -uroot -p -e "SHOW DATABASES;" | grep database_name</b></div>
<div>
<br /></div>
<div>
Если и тут ничего нет, то смотрим так:</div>
<div>
<b># mysql -uroot -p</b></div>
<div>
<b>mysql# use mysql;</b></div>
<div>
<b>mysql# SELECT Db FROM db WHERE Db = 'database_name';</b></div>
<div>
<br /></div>
<div>
Тут скорее всего и будет наша пропавшая база данных. Удалим просто эту строку:</div>
<div>
<b>mysql# DELETE FROM Db WHERE Db = 'database_name'; </b></div>
<div>
<br /></div>
<div>
После чего, спокойно создаем базу данных в панели управления.</div>
</div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-89402482308575838972016-03-03T03:17:00.003-08:002016-03-03T03:17:45.125-08:00ERROR 1273 (HY000) at line 25: Unknown collation: 'utf8mb4_unicode_ci'<div dir="ltr" style="text-align: left;" trbidi="on">
Частая ошибка, когда, к примеру дамп с MySQL 5.5+ пытаются влить в MySQL 5.1.<br />
<br />
Обновить MySQL до 5.5 на CentOS 6 легко:<br />
<b># rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm</b><br />
<b># rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm</b><br />
<b># yum install mysql.`uname -i` yum-plugin-replace</b><br />
<b># yum replace mysql --replace-with mysql55w</b><br />
<br />
<a href="https://webtatic.com/packages/mysql55/">стырено</a></div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-38012717216001979972016-03-01T22:33:00.001-08:002016-03-01T22:35:34.724-08:00Установка модуля nginx ngx_pagespeed на CentOS 6<div dir="ltr" style="text-align: left;" trbidi="on">
Клиенту с <b>CentOS 6 </b>и <b>ISPmanager 5</b> понадобилось установить модуль <b>nginx pagespeed</b>.<br />
Краткая заметка по установке:<br />
<br />
Установим зависимости, свежий gcc:<br />
<b># rpm --import https://linux.web.cern.ch/linux/scientific6/docs/repository/cern/slc6X/i386/RPM-GPG-KEY-cern</b><br />
<b># wget -O /etc/yum.repos.d/slc6-devtoolset.repo https://linux.web.cern.ch/linux/scientific6/docs/repository/cern/devtoolset/slc6-devtoolset.repo</b><br />
<b># yum install devtoolset-2-gcc-c++ devtoolset-2-binutils</b><br />
<br />
<b># PS_NGX_EXTRA_FLAGS="--with-cc=/opt/rh/devtoolset-2/root/usr/bin/gcc"</b><br />
<br />
<a name='more'></a><br />
<br />
<b># yum install gcc-c++ pcre-dev pcre-devel zlib-devel make unzip </b><br />
<br />
Загружаем модуль <b>ngx_pagespeed</b>:<br />
<b># cd /usr/src/</b><br />
<b># NPS_VERSION=1.10.33.5</b><br />
<b># wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${NPS_VERSION}-beta.zip -O release-${NPS_VERSION}-beta.zip</b><br />
<b># unzip release-1.10.33.5-beta.zip</b><br />
<b># cd ngx_pagespeed-release-1.10.33.5-beta/</b><br />
<b># wget https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz</b><br />
<b># tar -xzvf ${NPS_VERSION}.tar.gz</b><br />
<br />
Загружаем исходники <b>nginx</b>:<br />
<b># NGINX_VERSION=1.8.1</b><br />
<b># wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz</b><br />
<b># tar -xvzf nginx-${NGINX_VERSION}.tar.gz</b><br />
<b># cd nginx-${NGINX_VERSION}/</b><br />
<br />
Смотрим конфигурацию уже установленного <b>nginx</b> в системе:<br />
<b># nginx -V</b><br />
<b><i>nginx version: nginx/1.6.2</i></b><br />
<b><i>built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) </i></b><br />
<b><i>TLS SNI support enabled</i></b><br />
<b><i>configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_spdy_module --with-cc-opt='-O2 -g'</i></b><br />
<div>
<br /></div>
<div>
Соберем <b>nginx</b> из исходников:</div>
<div>
<b># ./configure __параметры_у_старого_nginx_ --add-module=/usr/src/ngx_pagespeed-release-${NPS_VERSION}-beta ${PS_NGX_EXTRA_FLAGS}</b></div>
<div>
<b># make</b></div>
<div>
<b># make install</b></div>
<div>
<br /></div>
<div>
Проверим, что все ок:</div>
<div>
<div>
<b># nginx -V</b></div>
<div>
<b><i>nginx version: nginx/1.8.1</i></b></div>
<div>
<b><i>built by gcc 4.8.2 20140120 (Red Hat 4.8.2-15) (GCC) </i></b></div>
<div>
<b><i>built with OpenSSL 1.0.1e-fips 11 Feb 2013</i></b></div>
<div>
<b><i>TLS SNI support enabled</i></b></div>
<div>
<b><i>configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_spdy_module --with-cc-opt='-O2 -g' --add-module=/usr/src/ngx_pagespeed-release-1.10.33.5-beta --with-cc=/opt/rh/devtoolset-2/root/usr/bin/gcc</i></b></div>
</div>
<div>
<br /></div>
<div>
Перезапустим <b>nginx</b>:<br />
<b># service nginx restart</b></div>
<div>
<br /></div>
<div>
Так же не забудем, защитить пакет от обновления:<br />
<b># vim /etc/yum.conf </b><br />
и добавим строку: <b>exclude=nginx</b><br />
<br /></div>
<div>
<b>Полезные ссылки:</b></div>
<div>
<a href="https://developers.google.com/speed/pagespeed/module/build_ngx_pagespeed_from_source">https://developers.google.com/speed/pagespeed/module/build_ngx_pagespeed_from_source</a><br />
<a href="http://linuxaria.com/pills/how-to-stop-package-from-being-updated-in-linux">http://linuxaria.com/pills/how-to-stop-package-from-being-updated-in-linux</a></div>
</div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com3tag:blogger.com,1999:blog-8558440208369735490.post-26495695109352878312016-03-01T11:15:00.000-08:002016-03-01T11:15:07.675-08:00Установка GitLab 7.4 на CentOS 6 <div dir="ltr" style="text-align: left;" trbidi="on">
В основе моей установки была запись:<br />
<a href="https://github.com/gitlabhq/gitlab-recipes/tree/master/install/centos">https://github.com/gitlabhq/gitlab-recipes/tree/master/install/centos</a><br />
<br />
Однако, во время установки были некоторые НО.<br />
<br />
1. Для работы с Percona необходимо установить не mysql-devel, а:<br />
<b># yum install Percona-Server-devel-56</b><br />
<br />
2. И установка <b>GitLab Shell</b>, там ошибка с версией.<br />
Вместо:<br />
<b># sudo -u git -H bundle exec rake gitlab:shell:install[v2.1.0] REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production</b><br />
<br />
<br />
<a name='more'></a><br />
Нужна версия 2.0.1:<br />
<b># sudo -u git -H bundle exec rake gitlab:shell:install[v2.0.1] REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production</b><br />
<br />
И установить:<br />
<b># sudo -u git -H bundle exec rake gitlab:shell:setup RAILS_ENV=production</b><br />
<br />
Так же очень помогла проверка:<br />
<b># sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production</b><br />
<b><br /></b>
Вот такие ошибки были при проблемной версии <b>GitLab</b> <b>Shell</b>:<br />
<b><i>fatal: Could not read from remote repository.</i></b><br />
<b><i><br /></i></b>
<b><i>Please make sure you have the correct access rights</i></b><br />
<b><i>and the repository exists.</i></b><br />
<div>
<br /></div>
Полезные ссылки:<br />
<a href="https://github.com/gitlabhq/gitlab-public-wiki/wiki/Trouble-Shooting-Guide">https://github.com/gitlabhq/gitlab-public-wiki/wiki/Trouble-Shooting-Guide</a><br />
<a href="https://github.com/gitlabhq/gitlabhq/issues/3686">https://github.com/gitlabhq/gitlabhq/issues/3686</a><br />
<br /></div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-42791111238181034682016-03-01T02:42:00.002-08:002016-03-01T02:42:09.467-08:00Ошибка при импорте MySQL дампа с полем VARCHAR > 255<div dir="ltr" style="text-align: left;" trbidi="on">
Понадобилось импортнуть дамп, где в таблице было такое поле и движок <b>MyISAM</b>:<br />
<b><i> `title` varchar(400) NOT NULL</i></b><br />
<b><i>ENGINE=MyISAM AUTO_INCREMENT=33525 DEFAULT CHARSET=utf8;</i></b><br />
<br />
Однако столкнулся с такой ошибкой:<br />
<b><i>ERROR 1071 (42000) at line 1817: Specified key was too long; max key length is 1000 bytes</i></b><br />
<br />
Решил проверить, поможет ли уменьшение поля <b>title</b> до <b>255</b>:<br />
<b> `title` varchar(255) NOT NULL</b><br />
<br />
И вуаля дамп загрузился, однако - это<b> плохой вариант ибо могут потеряться данные</b>.<br />
<br />
После поисков в интернете решил попробовать поменять <b>ENGINE</b> на <b>InnoDB</b> и получил ошибку:<br />
<b><i>ERROR 1709 (HY000) at line 1817: Index column size too large. The maximum column size is 767 bytes.</i></b><br />
<br />
<a name='more'></a><br /><br />
В некоторых источниках говорится, что спасет установка параметра <b>innodb_large_prefix</b> в ON:<br />
<b># mysql -uroot -p -e "set global innodb_large_prefix = ON;"</b><br />
<br />
Однако и этот финт ушами не прокатил, тогда нашлось еще решение:<br />
<b># mysql -uroot -p -e "set global innodb_file_format = BARRACUDA;"</b><br />
<br />
И в дампе в строке с <b>ENGINE</b> у таблицы, дописать формат файла:<br />
<b><i> ENGINE=InnoDB AUTO_INCREMENT=33525 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;</i></b><br />
<br />
После чего, дамп успешно загрузился в базу.<br />
Не забудем вернуть параметры взад:<br />
<b># mysql -uroot -p -e "set global innodb_large_prefix = OFF;"</b><br />
<b># mysql -uroot -p -e "set global innodb_file_format = Antelope;"</b> // В моем случае был задан Antelope</div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-27976772837228479392016-02-29T06:44:00.002-08:002016-02-29T06:44:54.037-08:00Error: rpmdb open failed<div dir="ltr" style="text-align: left;" trbidi="on">
Появилась ошибка:<br />
<b># yum</b><br />
<b><i>error: rpmdb: BDB0113 Thread/process 12457/140165805504320 failed: BDB1507 Thread died in Berkeley DB library</i></b><br />
<b><i>error: db5 error(-30973) from dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery</i></b><br />
<b><i>error: cannot open Packages index using db5 - (-30973)</i></b><br />
<b><i>error: cannot open Packages database in /var/lib/rpm</i></b><br />
<b><i>CRITICAL:yum.main:</i></b><br />
<b><i><br /></i></b>
<b><i>Error: rpmdb open failed</i></b><br />
<b><i><br /></i></b>
<b><i></i></b><br />
<a name='more'></a><br />
Решается просто:<br />
<b># rm -f /var/lib/rpm/__db*</b><br />
<b># db_verify /var/lib/rpm/Packages </b><br />
<b><i>BDB5105 Verification of /var/lib/rpm/Packages succeeded.</i></b><br />
<b># rpm --rebuilddb</b><br />
<b># yum clean all</b><br />
<b><i>Loaded plugins: fastestmirror</i></b><br />
<b><i>Cleaning repos: base epel extras ispsystem-base ispsystem-stable updates</i></b><br />
<b><i>Cleaning up everything</i></b><br />
<b><i>Cleaning up list of fastest mirrors</i></b><br />
<div>
<br /></div>
</div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-14123486278300429782016-02-24T07:19:00.000-08:002016-02-24T07:19:05.347-08:00Анализ логов Postfix<div dir="ltr" style="text-align: left;" trbidi="on">
Очень удобный скрипт для получения статистики и анализа лога почтового сервера Postfix.<br />
<br />
<br />
Устанвока:<br />
<b># wget http://jimsun.linxnet.com/downloads/pflogsumm-1.1.1.tar.gz</b><br />
<b># tar -zxf pflogsumm-1.1.1.tar.gz</b><br />
<b># cd pflogsumm-1.1.1</b><br />
<br />
Запуск:<br />
<b># cat /var/log/maillog | ./pflogsumm.pl</b><br />
<br />
Примерный вывод:<br />
<br />
<a name='more'></a><br /><br />
<b><i>Grand Totals</i></b><br />
<b><i>------------</i></b><br />
<b><i>messages</i></b><br />
<b><i><br /></i></b>
<b><i> 494 received</i></b><br />
<b><i> 1181 delivered</i></b><br />
<b><i> 0 forwarded</i></b><br />
<b><i> 18 deferred (238 deferrals)</i></b><br />
<b><i> 118 bounced</i></b><br />
<b><i> 51 rejected (4%)</i></b><br />
<b><i> 0 reject warnings</i></b><br />
<b><i> 0 held</i></b><br />
<b><i> 0 discarded (0%)</i></b><br />
<b><i><br /></i></b>
<b><i> 43601k bytes received</i></b><br />
<b><i> 46991k bytes delivered</i></b><br />
<b><i> 252 senders</i></b><br />
<b><i> 135 sending hosts/domains</i></b><br />
<b><i> 767 recipients</i></b><br />
<b><i> 23 recipient hosts/domains</i></b><br />
<b><i><br /></i></b>
<b><i><br /></i></b>
<b><i>Per-Day Traffic Summary</i></b><br />
<b><i> date received delivered deferred bounced rejected</i></b><br />
<b><i> --------------------------------------------------------------------</i></b><br />
<b><i> Feb 21 2016 42 41 38 2 13 </i></b><br />
<b><i> Feb 22 2016 77 78 40 0 11 </i></b><br />
<b><i> Feb 23 2016 94 93 22 2 4 </i></b><br />
<b><i> Feb 24 2016 281 969 138 114 23 </i></b><br />
<b><i><br /></i></b>
<b><i>Per-Hour Traffic Daily Average</i></b><br />
<b><i> time received delivered deferred bounced rejected</i></b><br />
<b><i> --------------------------------------------------------------------</i></b><br />
<b><i> 0000-0100 2 2 1 0 0 </i></b><br />
<b><i> 0100-0200 0 0 1 0 0 </i></b><br />
<b><i> 0200-0300 2 2 1 0 1 </i></b><br />
<b><i> 0300-0400 5 5 1 0 1 </i></b><br />
<b><i> 0400-0500 4 4 1 0 2 </i></b><br />
<b><i> 0500-0600 4 4 1 0 0 </i></b><br />
<b><i> 0600-0700 4 4 1 0 0 </i></b><br />
<b><i> 0700-0800 3 3 2 0 1 </i></b><br />
<b><i> 0800-0900 3 3 1 0 1 </i></b><br />
<b><i> 0900-1000 3 3 1 0 1 </i></b><br />
<b><i> 1000-1100 4 4 1 0 1 </i></b><br />
<b><i> 1100-1200 5 5 1 1 0 </i></b><br />
<b><i> 1200-1300 7 7 1 0 2 </i></b><br />
<b><i> 1300-1400 4 4 1 0 1 </i></b><br />
<b><i> 1400-1500 11 9 1 4 1 </i></b><br />
<b><i> 1500-1600 13 6 3 10 1 </i></b><br />
<b><i> 1600-1700 12 11 1 5 1 </i></b><br />
<b><i> 1700-1800 16 14 1 5 1 </i></b><br />
<b><i> 1800-1900 11 194 33 6 0 </i></b><br />
<b><i> 1900-2000 1 1 2 0 0 </i></b><br />
<b><i> 2000-2100 1 2 1 0 0 </i></b><br />
<b><i> 2100-2200 4 4 1 0 0 </i></b><br />
<b><i> 2200-2300 2 2 1 0 0 </i></b><br />
<b><i> 2300-2400 6 6 1 0 0 </i></b><br />
<b><i><br /></i></b>
<b><i>Host/Domain Summary: Message Delivery </i></b><br />
<b><i> sent cnt bytes defers avg dly max dly host/domain</i></b><br />
<b><i> -------- ------- ------- ------- ------- -----------</i></b><br />
<b><i> 451 2245k 0 17.5 s 23.0 s mail.ru</i></b><br />
<b><i> 353 39305k 101 2.4 s 120.2 h domain.com</i></b><br />
<b><i> 173 742k 124 6.0 m 10.3 m yandex.ru</i></b><br />
<b><i> 42 3934k 0 6.3 s 17.0 s list.ru</i></b><br />
<b><i> 40 191408 0 6.8 s 7.6 s rambler.ru</i></b><br />
<div>
<br /></div>
</div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0tag:blogger.com,1999:blog-8558440208369735490.post-39428156604383271952016-02-23T06:51:00.000-08:002016-02-23T06:51:09.178-08:00CloudLinux CageFS добавить Git для всех пользователей<div dir="ltr" style="text-align: left;" trbidi="on">
Установим git на сервер:<br />
# yum install git<br />
<br />
Добавим git в CageFS:<br />
# cagefsctl --addrpm git<br />
<br />
И обновим CageFS:<br />
# cagefsctl --force-update<br />
<br /></div>
wimbohttp://www.blogger.com/profile/08095800334088728966noreply@blogger.com0