четверг, 25 декабря 2014 г.

ISPmanager 4. Fatal error: Request is too big

# vim /usr/local/ispmgr/etc/ispmgr.conf
MaxPostSize 1000000
# killall -9 ispmgr
# rm -rf /usr/local/ispmgr/var/.xmlcache/*

вторник, 23 декабря 2014 г.

Защита SSH с помощью fail2ban

# yum install fail2ban
(в CentOS 6, для установки fail2ban нужно подключить репозиторий EPEL):
# rpm -ivh http://download.fedoraproject.org/pub/epel/6/$(arch)/epel-release-6-8.noarch.rpm

# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# vim /etc/fail2ban/jail.local
... 
[ssh-iptables] 
# включаем защиту ssh (по умолчанию включена) 
enabled = true 
filter = sshd 
# блокируем с помощью IPTables 
action = iptables[name=SSH, port=ssh, protocol=tcp] 
# настройки почтовых уведомлений 
sendmail-whois[name=SSH, [email protected], [email protected], sendername="Fail2Ban"] 
# пишем лог в /var/log/secure logpath = /var/log/secure 
# максимально 5 попыток
maxretry = 5 
# бан на 24 часа 
bantime = 86400

# service fail2ban start
# iptables -L fail2ban-SSH

Разблокировать IP адрес из бана:
# fail2ban-client set JAIL unbanip IP
Пример:
# fail2ban-client set ssh-iptables unbanip 192.168.0.100

пятница, 19 декабря 2014 г.

ISPmanager не работает fastcgi

После отключения nginx в возможностях ISPmanager и включения его заново, не работает fcgid.
В итоге я оставил один только апач, восстановил конфиг apache.conf из бэкапа.
И тут возникала первая проблема, порт apache2 после связки с nginx остался 81, это решить просто:
# vim /etc/apache2/ports.conf
Listen 80

# service apache2 restart

Однако после включения апача модуль fcgid не работал, хотя был подключен, решается это так:
# vim /etc/apache2/mods-available/php5.conf
#<FilesMatch ".+\.ph(p[345]?|t|tml)$">
#    SetHandler application/x-httpd-php
#</FilesMatch>

# service apache2 restart

via

четверг, 11 декабря 2014 г.

Вывод прав доступа в восьмеричном виде

$ stat -c "%a %A %n" /usr/bin/python*
777 lrwxrwxrwx /usr/bin/python
777 lrwxrwxrwx /usr/bin/python2
755 -rwxr-xr-x /usr/bin/python2.6
755 -rwxr-xr-x /usr/bin/python2.7

via

среда, 10 декабря 2014 г.

fork-бомбы и ISPmanager

На шаред хостинге пользователем была запущена fork-бомба. Скрывалась она за обычным сайтом на Joomla.
Дело было так.
Упал сервер, ни по http, ни по ssh он не отвечал, только ping шел. Мне удалось ловить микромоменты, чтобы вывести список процессов. Последнее что успела засечь моя сессия по ssh примерно такое:
user_11   1088  0.0  0.0      0     0 ?        Z    22:27   0:00 /bin/bash /var/www/user_11/data/www/site.ru/cli/submiss
user_11   1089  0.0  0.0      0     0 ?        Z    22:27   0:00 [bash] <defunct>
и таких процессов было очень много.
На любые попытки что либо сделать с сервером, шел ответ:
bash: fork: Ресурс временно недоступен

среда, 3 декабря 2014 г.

Ошибка #1100 - Table 'pma_column_info' was not locked with LOCK TABLES

# vim /etc/phpmyadmin/config.inc.php
$cfg['Servers'][$i]['controluser'] = root;
$cfg['Servers'][$i]['controlpass'] = password;

понедельник, 1 декабря 2014 г.

CentOS 6: Transaction Check Error

Бывает такая ошибка при установке munin, связанная с использованием нескольких репозиториев, в частности rpmforge:
# yum install munin-node
Transaction Check Error:
  file /usr/share/man/man3/XML::SAX::Base.3pm.gz conflicts between attempted installs of perl-XML-SAX-0.96-7.el6.noarch and perl-XML-SAX-Base-1.04-1.el6.rf.noarch
  file /usr/share/man/man3/XML::SAX::Exception.3pm.gz conflicts between attempted installs of perl-XML-SAX-0.96-7.el6.noarch and perl-XML-SAX-Base-1.04-1.el6.rf.noarch

Решается это так:
# vim /etc/yum.repos.d/rpmforge.repo
   exclude=perl-XML-SAX-Base

# yum update
# yum install munin-node

воскресенье, 30 ноября 2014 г.

Установка dokuwiki

Установка производится на свежеустановленную Ubuntu 14.04:
# apt-get purge apache2 && apt-get update
# apt-get install nginx php5-fpm php5-gd

# service nginx start

# vim /etc/php5/fpm/php.ini
cgi.fix_pathinfo=0

# service php5-fpm restart

четверг, 20 ноября 2014 г.

Дополнительные возможности phpMyAdmin не настроены в полной мере

В phpMyAdmin появилось предупреждение:
The phpMyAdmin configuration storage is not completely configured, some extended features have been deactivated
на русском:
Дополнительные возможности phpMyAdmin не настроены в полной мере, некоторые функции были отключены

Такая ошибка появилась:

Решение:
# gunzip /usr/share/doc/phpmyadmin/examples/create_tables.sql.gz 
# mysql -u root -h localhost -p
Enter password:
mysql> source /usr/share/doc/phpmyadmin/examples/create_tables.sql
Query OK, 1 row affected (0.00 sec)
...
mysql> quit
Bye

И перезайти в phpmyadmin.

вторник, 18 ноября 2014 г.

Руководство по созданию и управлению контейнерами на базе OpenVZ

В руководстве описывается установка и настройка системы виртуализации OpenVZ на базе Linux-дистрибутива CentOS 6.
Вкратце описал различия между типами виртуализации, работу с контейнерами, управлением ресурсами, бэкапами.

Краткое содержание:
1. Введение в виртуализацию
2. Подготовительные действия
3. Создание и настройка нового сервера VPS
4. Управление ресурсами
5. VPN в контейнере
6. Резервное копирование и восстановление
7. ploop
8. Управление VPS через Web-браузер
9. Рекомендации по работе с системой
Список литературы
A Установка CentOS 6

Исходники (LaTeX) на github: https://github.com/Amet13/openvz-tutorial

Предложения и исправления приветствуются.

среда, 12 ноября 2014 г.

Редирект с URL домена в директорию

Нужно сделать так, чтобы при переходе на domain.com был редирект на domain.com/subfolder.

Содержимое файла .htaccess:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$
RewriteCond %{REQUEST_URI} !^/subfolder/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /subfolder/$1
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$
RewriteRule ^(/)?$ subfolder/index.php [L]

domain.com и subfolder/, естественно заменить на нужный домен и директорию.
via.

суббота, 1 ноября 2014 г.

Обновление Linux Mint 16 до 17 (LTS)

Имеется Linux Mint 16 MATE, нужно обновиться до 17.

Обновление:
$ sudo apt update
$ sudo apt upgrade
$ sudo sed -i 's/saucy/trusty/' /etc/apt/sources.list.d/official-package-repositories.list
$ sudo sed -i 's/petra/qiana/' /etc/apt/sources.list.d/official-package-repositories.list
$ sudo apt update
$ sudo apt dist-upgrade -y
В процессе обновления будут заданы вопросы, о том, оставить те или иные настройки и конфигурационные файлы или заменить на новые, вводить везде y/Y

$ sudo apt autoremove
$ sudo reboot

У меня почему-то на панели стало отображаться два индикатора сети.

Убрать это можно просто. В параметрах запускаемых приложений убрать галочку напротив одного индикатора.

И перезагрузиться после этого.

среда, 22 октября 2014 г.

Установка PSCyr в LaTeX

Долго мучался с установкой PSCyr для LaTeX.
Этот пакет нужен для отображения красивых кириллических шрифтов, ибо стандартные шрифты в LaTeX не очень.
После долгих поисков набрёл на deb-пакет, он вполне себе свежий (2010 года). Устанавливается просто:
$ dpkg -i tex-pscyr_0.4d~beta9-1_all.deb

Установилось и работает хорошо (Linux Mint 17).

понедельник, 6 октября 2014 г.

Оформление исходного кода в LaTeX

Для оформления исходного кода в LaTeX можно воспользоваться пакетом listings.

$ cat main.tex
%!TEX TS-program = xelatex

\documentclass[a4paper,12pt]{article}

\usepackage[english,russian]{babel}
\usepackage{fontspec}
\defaultfontfeatures{Ligatures={TeX},Renderer=Basic}
\setmainfont[Ligatures={TeX,Historic}]{Times New Roman}
\setsansfont{Arial}
\setmonofont{Courier New}

% подключаем пакеты
\usepackage{listings}
\usepackage{color}

суббота, 20 сентября 2014 г.

Олимпиада по администрированию Linux (Симферополь 20.09.2014)

Задания 2-го (очного) тура Олимпиады в номинации Администрирование Linux:
0. В каталоге /var/olymp создать текстовый файл с именем user.txt, содержащий две строки в кодировке utf8:
Ф.И.О. участника (полностью)
Название учебного заведения (полностью, без сокращений)

воскресенье, 14 сентября 2014 г.

Блокировка пользователей с TOR

Задача: блокировать всех пользователей, которые обращаются к сайтам сервера через TOR.

Тут есть два способа (по крайней мере я нашёл):
1. С помощью ipset (предпочтительно)
2. С помощью скрипта, найденного тут: https://github.com/ddasilva/block-tor-iptables

1. С помощью ipset
# apt-get install ipset
# ipset -N tor iphash

# vim /root/tor_check.sh
#!/bin/bash
wget -q https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=ваш_ip_адрес -O -|sed '/^#/d' | while read IP
do
   ipset -q -A tor $IP
done

# chmod +x /root/tor_check.sh
# /root/tor_check.sh

# iptables -A INPUT -m set --match-set tor src -j DROP
# crontab -e
* */5 * * * /root/tor_check.sh
Проверка:
# ipset -L

2. С помощью скрипта
# iptables -N TOR
# iptables -I INPUT 1 -j TOR

# vim /root/cron-service.sh
Тут содержимое скрипта: https://github.com/ddasilva/block-tor-iptables/blob/master/cron-service.sh

# chmod +x cron-service.sh
# crontab -e
30 02 * * * /root/cron-service.sh 80 6667

пятница, 12 сентября 2014 г.

Печать библиографического списка без упоминания источников в тексте

Достаточно в тексте указать \nocite{*}:
\usepackage[backend=biber,bibencoding=utf8,sorting=ynt,maxcitenames=2,style=authoryear]{biblatex}
\addbibresource{bib1.bib}
...
\begin{document}
...
\nocite{*}
\printbibliography{}
...
\end{document}
и перекомпилировать документ.

воскресенье, 7 сентября 2014 г.

Выявление "плохих" запросов в БД MySQL

Основную часть ресурсов на веб-сервере (apache+nginx+php+mysql) использует MySQL.
Иногда бывает так, что MySQL не хватает по каким-либо причинам ресурсов, забивается полностью память, система уходит в swap. В этом виноваты длинные запросы, которые очегь сильно нагружают MySQL. Так случилось и со мной. Дальше я расскажу, как обнаружить проблему и как ей противостоять.

Ограничение на загрузку файлов на FTP по расширению файлов

Позволим анонимам загружать на ftp-сервер только файлы с расширением pdf, djvu и txt:
# vim /etc/protftpd/proftpd.conf
...
<Anonymous /srv/ftp.mydomain.com/>
...
<Directory incoming/*>
   Umask 022  022
   <Limit STOR MKD>
      Order deny, allow
      AllowFilter "\\.(pdf|djvu|txt)$"
   </Limit>
</Directory>
...
</Anonymous>

вторник, 26 августа 2014 г.

Защита от DDoS. Скрипт (D)DoS Deflate

UPD: 18.02.2015
Я немного допилил скрипт, инструкция по установке на GitHub: https://github.com/Amet13/ddos-deflate
Все что описано ниже, я делал гораздо раньше.

На днях  сервер упал под DDoS. До этого момента защищался от них только самопальным скриптом и модулем GeoIP для nginx. Однако в этот раз нагрузка была слишком большая, поэтому скрипт и nginx не справились.
В связи с этим я нашёл в интернете скрипт, который позволяет защититься от некоторых видов DDoS, от заказных атак он конечно не спасёт, но большинство отразить он способен.
В своей основе скрипт использует команду:
# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
141 1.2.3.4
 26 5.4.3.2
 20 8.7.6.5
...
которая выявляет число открытых соединений с каждого адреса, и в случае если соединений много, то адрес блокируется на определённое время.

суббота, 2 августа 2014 г.

Установка и настройка Munin

Цель: установить и настроить мониторинг для четырёх серверов: monitor (localhost), главный сервер (main-server) и 2 DNS сервера (DNS1, DNS2).
На всех четырёх машинах Debian 7.
До этого я устанавливал Nagios, теперь данные с серверов решил разбавить графиками.

четверг, 31 июля 2014 г.

Восстановление пароля MySQL

Останавливаем службу MySQL:
# service mysql stop

Запускаем службу с опцией --skip-grant-tables:
# mysqld_safe --skip-grant-tables &
[1] 6518
Starting mysqld daemon with databases from /var/lib/mysql
mysqld_safe[5722]: started


Или в конфиге my.cnf прописываем:
skip-grant-tables

Подключаемся с серверу MySQL при помощи клиента mysql:
# mysql -u root
mysql>


Вводим новый пароль для root:
mysql> use mysql;
mysql> update user set password=PASSWORD("NEW-PASS") where User='root';
mysql> flush privileges;
mysql> quit


В Percona 5,7 например это будет выглядить так:
mysql> update user set authentication_string=password('NEW-PASS') where user='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

Останавливаем сервер MySQL:
# ps aufx | grep mysql | awk '{print $2}' | xargs kill -9

Запускаем MySQL-сервер и логинимся с новым паролем:
# service mysql start
# mysql -u root -p
Enter password: NEW-PASS

понедельник, 7 июля 2014 г.

Обнаружение источника спама с сервера и устранение проблемы

В связи с многочисленными уязвимостями в некоторых плагинах популярных CMS, сервер был подвержен вводу в систему вредоносного скрипта.
Скрипт отправлял письма (как правило прон-содержания) с генерируемых адресов, а-ля [email protected], [email protected] домена взломанного сайта. Таких взломанных сайтов было несколько.

В этой заметке я опишу, как я выявлял источник спама и боролся с последствиями работы вредоносных скриптов.

воскресенье, 6 июля 2014 г.

Оптимизация PHP. apc и memcache

Четвёртая, скорее всего последняя заметка из цикла оптимизации веб-сервера на базе apache+nginx+mysql+php.

Сервер работает в режиме CGI. Локальные конфиги создаются в ISPmanager.

среда, 2 июля 2014 г.

Оптимизация nginx

Третья заметка из цикла оптимизации веб-сервера на базе apache+nginx+mysql+php.

Перед изменением конфигурационного файла необходимо сделать его резервную копию:
# cp nginx.conf nginx.conf.bak

Для замера производительности до оптимизации и после можно использовать этот сервис: developers.google.com/speed/pagespeed/insights

вторник, 1 июля 2014 г.

Скрипт блокировки брутфорсеров WordPress и Joomla

Я где-то писал, как можно блокировать ip-адреса с помощью nginx. Я смотрел адреса, которые имеют больше всего запросов за время ротации лога, вручную смотрел к каким страницам идёт соединение и если это были админки WordPress или Joomla, добавлял их в чёрный список и отдавал ошибку.
Автоматизировать это я решил самописным скриптом.
Скрипт анализирует лог, выделяет ip-адреса, которые более 3000 раз обращались к админке WordPress и Joomla и если этих ip-адресов ещё нет в чёрном списке, то добавляет их туда.
Скрипт запускается каждый час кроном.

воскресенье, 29 июня 2014 г.

Защита nginx от Китая и Индии с помощью GeoIP, apache или nginx

Как правило, большое количество брутфорсеров находятся в Китае и Индии. Так как мои сайты не расчитаны на эту аудиторию, то ip'шники из Китая и Индии можно спокойно блокировать. В этом нам поможет модуль GeoIP для apache или nginx.

nginx:
Для использования этого модуля необходимо чтобы nginx был скомпилирован с поддержкой модуля http_geoip_module.
Проверить это можно так:
# nginx -V
nginx version: nginx/1.2.1
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-pcre-jit --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/tmp/buildd/nginx-1.2.1/debian/modules/nginx-auth-pam --add-module=/tmp/buildd/nginx-1.2.1/debian/modules/nginx-echo --add-module=/tmp/buildd/nginx-1.2.1/debian/modules/nginx-upstream-fair --add-module=/tmp/buildd/nginx-1.2.1/debian/modules/nginx-dav-ext-module

Если же этого нет, то nginx нужно перекомпилировать с поддержкой данного модуля.

понедельник, 23 июня 2014 г.

Оптимизация Apache2

Вторая заметка из цикла оптимизации веб-сервера на базе apache+nginx+mysql+php.

В интернете полно статей на эту тему, поэтому находил информацию с разных источников и соединял это воедино.

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

На сервере установлен восьмиядерный процессор Xeon и 24Гб оперативной памяти, на котором работает более 200 сайтов, в основном на Joomla и WordPress.

воскресенье, 22 июня 2014 г.

Подключение самописного плагина в Nagios

После установки Nagios, мониторить сервера стало куда проще. Однако остались вещи, которые из коробки в Nagios нет, например просмотр очереди писем в Postfix. Плагин check_mailq рабоатет неправильно. В интернете есть несколько уже написанных плагинов для этого дела, поэтому я не стал придумывать своё и лишь немного доработал чужой скрипт (исправил 3-4 строчки, для наглядности вывода выполнения команды).

Скрипт взят отсюда: exchange.nagios.org/directory/Plugins/Email-and-Groupware/Postfix/check_postfix_queue/details

Обозначать машины буду так:
server - то, что мы будем мониторить. в данном случае почтовый сервер;
monitor - сервер, на котором установлен Nagios, в данном случае сервер мониторинга.

суббота, 21 июня 2014 г.

Оптимизация MySQL

Заметка из цикла оптимизации веб-сервера на базе apache+nginx+mysql+php.

Первым делом решил заняться именно оптимизацией MySQL.

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

На сервере установлен восьмиядерный процессор Xeon и 24Гб оперативной памяти, на котором работает более 200 сайтов, в основном на Joomla и WordPress.

MySQL версии 5.1

четверг, 19 июня 2014 г.

Установка и настройка Nagios 4

Цель: установить и настроить на базе Nagios мониторинг для четырёх серверов: monitor (localhost), главный сервер (server, main-server) и 2 DNS сервера (DNS1, DNS2).
На всех четырёх машинах Debian 7.

Устанавливается версия Nagios Core 4.0.7, Nagios Plugins 2.0.2, Nagios NRPE 2.15.

суббота, 7 июня 2014 г.

Защита nginx от брутфорсеров

В логах было замечено то, что к разным сайтам на WordPress (и не только) поступает очень много запросов.
Было решено такое блокировать на корню, а именно средствами nginx reject'ить их.
Позже может запилю скрипт какой-нибудь или использую готовое решение.

Смотрим ip-адреса с наибольшим числом запросов (ip-адреса специально не изменяю даже):
# cat /var/log/nginx/access.log | cut -f1 -d" " | sort | uniq -c | sort -n
...
13018 173.252.202.2
24134 195.206.253.8
33300 5.100.249.163
33626 199.102.67.201

Создадим файл, в котором будут прописаны все "плохие" ip-адреса:
# vim /etc/nginx/blockips.conf
deny 173.252.202.2;
deny 195.206.253.8;
deny 5.100.249.163;
deny 199.102.67.201;
allow all;

Правило такое:
"плохим" запрещаем доступ;
остальным разрешаем;

В секцию http главного конфига nginx подключим ранее созданный файл:
# vim /etc/nginx/nginx.conf
http {
...
include blockips.conf;
...
}

Проверим конфиг nginx на ошибки:
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

И перезагрузим сервис:
# service nginx reload

Скрипт для всего этого тут: http://blog.amet13.name/2014/07/wordpress-joomla.html

пятница, 6 июня 2014 г.

Неправильное отображение даты в LaTeX

До того, пока не наступил июнь-месяц я ничего об ошибке не знал. Потом увидел, что вместо "июнь", почему-то пишется "iюнь".

В новых патчах TeX Live это пофиксили, но автоматически обновления не выкатываются.
В связи с этим нужно установить патч вручную.

Для Windows:
Нужно в ручную скачать с http://www.ctan.org/tex-archive/macros/latex/contrib/babel-contrib/russian файл russianb.ldf и заменить им файл в каталоге:
c:\texlive\2013\texmf-dist\tex\generic\babel-russian\
(если дистрибутив устанавливался в каталог по умолчанию).

В GNU/Linux можно установить патч так:
$ cd /tmp
$ wget http://mirrors.ctan.org/macros/latex/contrib/babel-contrib/russian/russianb.ldf
$ sudo cp russianb.ldf /usr/share/texlive/texmf-dist/tex/generic/babel-russian/russianb.ldf

Подготовка среды к работе с LaTeX

Установка в Debian/Ubuntu TeXstudio и компонентов LaTeX:
$ sudo apt-get install texlive-base texlive-binaries texlive-latex-extra texlive-lang-cyrillic texstudio biber pgf latex-xcolor texlive-doc-ru texlive-latex-base texlive-latex-recommended texlive-xetex latex-beamer texlive-bibtex-extra fonts-lmodern lmodern texlive-pstricks texlive-science texlive-generic-extra texlive-fonts-extra texlive-math-extra

Эти пакеты нужны для работы с библиографией, графикой, кириллицей, XeLaTeX, ModernCV, barcode и TeXstudio.

Для использования шрифтов типа Times New Roman, необходимо их установить:
$ sudo apt-get install ttf-mscorefonts-installer

Я по умолчанию вместо устаревшего движка PdfLaTeX использую XeLaTeX. Для того, чтобы включить его по умолчанию в TeXstudio, нужно в меню выставить:
Options -> Configure TeXstudio -> Build -> Default Compiler -> XeLaTeX

Вместо TeXstudio можно использовать LaTeXila:
$ sudo apt-get install latexila

Для использования minted, нужно установить python-pygments:
$ sudo apt-get install python-pygments

четверг, 5 июня 2014 г.

Решение проблемы "Can't access Secondary GPU" в NVIDIA

В 17й версии Linux Mint драйвера nvidia-current не хотят работать.

$ optirun glxgears
[ERROR]Cannot access secondary GPU - error: [XORG] (EE) NVIDIA(0): Failed to initialize the NVIDIA GPU at PCI:1:0:0. Please

[ERROR]Aborting because fallback start is disabled.

После многочисленных попыток правки конфига xorg.conf и bumblebee.conf и подключении модулей i915 и bbswitch к initramfs было найдено решение. А оказалось оно простым. Нужно вместо драйвера nvidia-current использовать nvidia-331-updates.

Если не установлен bumblebee, то устанавливаем:
$ sudo add-apt-repository ppa:bumblebee/stable
$ sudo apt-get update
$ sudo apt-get install bumblebee bumblebee-nvidia primus linux-headers-generic
$ sudo apt-get install bbswitch-dkms mesa-utils


Установка драйвера:
$ sudo apt-get install nvidia-331-updates

Редактируем конфиг bumblebee под новый драйвер:
$ sudo gedit /etc/bumblebee/bumblebee.conf
...
[driver-nvidia]
KernelDriver=nvidia-331-updates
PMMethod=auto
LibraryPath=/usr/lib/nvidia-331-updates:/usr/lib32/nvidia-331-updates
XorgModulePath=/usr/lib/nvidia-331-updates/xorg,/usr/lib/xorg/modules
XorgConfFile=/etc/bumblebee/xorg.conf.nvidia
...

Для применения новых настроек нужно перезагрузиться:
$ sudo shutdown -r now

Проверка:
$ optirun glxgears
286 frames in 5.0 seconds = 57.146 FPS
300 frames in 5.0 seconds = 59.979 FPS
300 frames in 5.0 seconds = 59.982 FPS

четверг, 29 мая 2014 г.

Настройка openDKIM

Установка:
# apt-get install opendkim opendkim-tools

Приводим основной конфиг в такое состояние:
# vim /etc/opendkim.conf
KeyTable           /etc/opendkim/KeyTable
SigningTable       /etc/opendkim/SigningTable
ExternalIgnoreList /etc/opendkim/TrustedHosts
InternalHosts      /etc/opendkim/TrustedHosts
# Optional - To show more information in logs
LogWhy yes

четверг, 22 мая 2014 г.

Шпаргалка по git для меня

$ git config --global user.email "[email protected]"
$ git config --global user.name "Name"
$ git config --global color.ui true
$ mkdir Directory
$ git init
$ cp files/ Directory/

push:
$ git add *
$ git commit -m "init"
$ git remote add origin https://github.com/UserName/RepoName.git
$ git push -u origin master

pull:
$ git pull -u https://github.com/UserName/RepoName.git
$ git commit -m "fxd"
$ git push -u origin master

Создать новую ветку:
$ git checkout -b 2017-09-02_test1
$ git add .
$ git commit -am "commitname"
$ git branch --set-upstream-to=origin/2017-09-02_test1 2017-09-02_test1
$ git push origin 2017-09-02_test1

.gitignore:
$ vim .gitignore
*.log
*.tex~
*.aux
*.fls
*.out
*.synctex.gz
*.fdb_latexmk
.gitignore

$ git rm -r -f --cached .
$ git add .
$ git commit -m "Убрали логи"

Удаленные ветки:
$ git branch
$ git branch -a
$ git checkout origin/ветка

Слияние ветки test в master:
$ git checkout master
$ git merge test

Force pull из удаленного репозитория:
$ git fetch --all
$ git reset --hard origin/master
$ git pull origin master

воскресенье, 18 мая 2014 г.

Быстрое удаление правила iptables по его номеру

Вывод правил цепочки INPUT с указанием номеров:
$ iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       tcp  --  anywhere             anywhere             tcp dpt:http STRING match  "/forbot" ALGO name kmp TO 65535
2    DROP       tcp  --  anywhere             anywhere             tcp dpt:http STRING match  "/tobot" ALGO name kmp TO 65535
3    DROP       tcp  --  anywhere             anywhere             tcp dpt:http STRING match  "save" ALGO name kmp TO 65535

Удаление правила с указанным номером:
$ iptables -D INPUT номер_правила

Запрет логгирования запросов в nginx

Боты стучатся на уже не существующую страничку на сайте и периодически надоедают своими длинными а-ля:
/example/item/3-%D0%BE-%D0%B4%D0%B5%D1%8F%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8-%D0%BF%D0%BE-%D0%B2%D0%B7%D1%8B%D1%81%D0%BA%D0%B0%D0%BD%D0%B8%D1%8E-%D0%BF%D1%80%D0%BE%D1%81%D1%80%D0%BE%D1%87%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9-%D0%B7%D0%B0%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8/3-%D0%BE-%D0%B4%D0%B5%D1%8F%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8-%D0%BF%D0%BE-%D0%B2%D0%B7%D1%8B%D1%81%D0%BA%D0%B0%D0%BD%D0%B8%D1%8E-%D0%BF%D1%80%D0%BE%D1%81%D1%80%D0%BE%D1%87%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9-%D0%B7%D0%B0%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8.html
запросами.

Решение такое: запретить логгирование каждого запроса на данную страничку.
# vim /etc/nginx/nginx.conf
server {
   server_name example.com
   ...
   location /example/item/3-.*.html {
      access_log off;
      error_log off;
   }
}

воскресенье, 11 мая 2014 г.

Команды работы с Postfix

Просмотр текущего конфига:
# postconf

Просмотр стандартного конфига:
# postconf -d

Просмотр значения заданного параметра конфига:
# postconf <param>

Просмотр текущей очереди:
# postqueue -p

Повтор отправки писем из очереди:
# postsuper -r ALL

Удаление всех писем из очереди:
# postsuper -d ALL

Удаление всех временных файлов, после падения системы или самого postfix:
# postsuper -p

Удаление писем определённого адресата из очереди:
# postqueue -p | grep [email protected] | cut -f1 -d " " | postsuper -d -

Скрипт для этого:
#!/bin/bash
queuecount=`postqueue -p | tail -1 | cut -d " " -f5`
if [ $queuecount -ge 100 ]
then
   postqueue -p | grep example.com | cut -f1 -d " " | postsuper -d -
fi

четверг, 8 мая 2014 г.

Установка и настройка Roundcube 1.0.0

Установка будет производиться на Debian, однако в любом дистрибутиве настройка будет точно такой же или очень похожей.
На сервере уже установлен ISPmanager с дефолтным SquirrelMail, именно вместо SquirrelMail я и устанавливаю roundcube.
Используется rouncube-1.0.0 (на данный момент последней версии), естественно из сорцов.

суббота, 3 мая 2014 г.

Отсутствует звук в Skype (Pulseaudio 4)

После обновления десктопа с Mint 15 на Mint 16, перестал работать skype с новой версией pulseaudio.
Я где-то читал, что pulseaudio запилили непонятно-какой код, который ломает skype (что-то связано с автоматической задержкой). В связи с этим skype работает через раз.

Решение проблемы, запустить skype с задержкой pulseaudio:
PULSE_LATENCY_MSEC=60

То есть, строка запуска skype будет выглядить так:
$ env PULSE_LATENCY_MSEC=60 skype %U

среда, 9 апреля 2014 г.

Использование нескольких учётных записей skype

Иногда такое бывает нужно, например дома один компьютер, а пользователей несколько.
По дефолту при первом запуске skype создаёт каталог ~/.Skype в котором хранятся пользовательские настройки.

То есть для другого пользователя логично создать такой же каталог с его данными, для этого есть параметр --dbpath который указывает на каталог нового пользователя:
$ skype --dbpath ~/.Skype2

После этого можно запускается ещё один экземпляр skype, в котором можно логиниться под отличным от первого пользователем.

четверг, 3 апреля 2014 г.

Удалённая настройка iptables

Иногда бывает необходимость настройки iptables на удалённом хосте.
Мне недавно пришлось столкнуться с этим на олимпиаде и на своей VPS'ке.
Часто правильные правила iptables получается получить с некоторым использованием метода тыка и против таких случаев нужно страховаться.
Тут я опишу как можно безболезненно настроить iptables так, чтобы в случае перекрытия доступа самому себе, этот доступ можно было бы получить заново.

суббота, 29 марта 2014 г.

Перенаправление трафика с интерфейса на интерфейс в iptables

Все пакеты приходят на интерфейс eth0 нужно их все перенаправить на eth1:
# echo 1 > /proc/sys/net/ipv4/ip_forward 
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE 
# iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
# iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

Интересно было бы знать, не пропустил ли я ничего?

Настройка почтового сервера: Postfix+Dovecot+MySQL+SASL в Debian 7 Wheezy

В ходе настройки почтового сервера попал на статью по настройке связки Postfix+Dovecot.

Всё хорошо описано, делал всё согласно инструкции, вроде даже оно работало (делал для задания олимпиады).
Заметка ещё довольно свежая и ещё хорошо то, что она подходит для версии Dovecot 2.
Копипастить не буду, поэтому оставлю только ссылку.

Тут статья: http://blog.xelfaer.ru/?p=492

Запрет входа от root, кроме определённых ip в ssh

# vim /etc/ssh/sshd_config
...
# запрещаем вход от root всем логинам
PermitRootLogin no
...
# разрешаем ip ниже входить от root

Match host 192.168.0.10,111.222.111.222
   PermitRootLogin yes


# service ssh restart

После этого от пользователя root, в систему смогут заходить только с ip-адресов 192.168.0.10 и 111.222.111.222.

среда, 19 марта 2014 г.

Олимпиада по администрированию Linux (19.03.2014)

Задание Олимпиады IT-Планета-2014 в номинации Администрирование Linux.

Конкурсное задание Олимпиады IT-Планета-2014 в номинации Администрирование Linux выполняется участником на виртуальном сервере, подключенном к сети Интернет.
Организаторы предустанавливают дистрибутив Debian GNU/Linux на виртуальных серверах участников в конфигурации по умолчанию, выбор остального используемого ПО остается целиком на усмотрение участника.

суббота, 22 февраля 2014 г.

Мультизагрузочная флешка с Linux и grub2

Дабы сто раз не перезаписывать флешку для установки того или иного дистрибутива Linux, решено было сделать её мультизагрузочной.
Порядок действий таков: скачиваем нужные образы дистрибутивов, устанавливаем на флешку grub2, копируем образы на флешку.
Далее подробная инструкция.

пятница, 21 февраля 2014 г.

Возвращаем страницу приложений в новой вкладке Google Chrome

В 33й версии Google Chrome под Linux сделали так, что при открытии новой вкладки уже нельзя выбирать между страницей установленных приложений из Chrome Store и между часто посещаемыми сайтами. Поэтому я захотел вернуть страницу приложений при открытии новой вкладки.
1. Устанавливаем плагин отсюда;
2. Заходим в Menu - Tools - Extensions - или 
chrome://extensions/ 
в адресной строке, далее ищем плагин Replace New Tab Page - Options;
3. Прописываем в строке:
chrome://apps/

Если есть идеи поизящнее, то жду.

четверг, 16 января 2014 г.

Авторизация в ssh по ключу

Все действия происходят на машине-клиенте, который хочет подсоединиться к серверу mydomain.name по ssh.
Работаем от пользователя myuser, соответственно ключ сохраняется в его домашнем каталоге.

Генерируем ключ:
$ ssh-keygen

Заменяем пароль на ключ:
$ ssh-keygen -p

Копируем закрытый ключ на сервер (-p 221 - порт, если он не отличается от 22, то можно не указывать):
$ ssh-copy-id -p 221 [email protected]
тут нужно один раз ввести пароль.

Проверка:
$ ssh -p 221 mydomain.name

Запроса пароля не будет.

вторник, 7 января 2014 г.

Поиск процессов с помощью pgrep

Утилита pgrep, по сути является альтернативой команды:
$ ps aux | grep "имя_процесса"

Например, для того чтобы подсчитать количество запущенных процессов apache с помощью ps, grep и wc:
$ ps aux | grep apache2 | wc -l
и с помощью pgrep:
$ pgrep -c apache2

Без использования параметров, утилита на выходе дает PID процесса.

Применений утилиты множество, в мане достаточно ясно все описано.

Примеры.
Вывод процессов (PID и имя) принадлежащих группе mygroup:
$ pgrep -lG mygroup

Вывод процессов (PID и имя) не принадлежащих пользователю root:
$ pgrep -lvu root

Вывод PID и полного имени процесса:
$ pgrep -fl thunderbird

man pgrep

понедельник, 6 января 2014 г.

Отключение нумерации первой страницы в LibreOffice

Для того чтобы пронумеровать страницы:
1. Щелкаем в нижний колонтитул и добавляем Footer
2. В Menu - Insert - Fields выбираем Page Number, внизу появится номер страницы, его можно отформатировать по своему желанию

Так как нумерация на первой странице не нужна, нужно сделать:
1. Нажать F11, появится окно стилей
2. Щелкнуть курсором в любое место первой страницы
3. В окне стилей выбираем Page Styles - First Page (двойной щелчок)

После этого все страницы, кроме первой, пронумерованы.