Debian Jessie: Торрентокачалка с WEB интерфейсом (rtorrent + php5-fpm + rutorrent + nginx)

Итак, давно хочу на свой самосборный простенький NAS на Intel Atom поставить торентокачалку с WEB интерфейсом. NAS стоит высоко под потолком, ни монитора ни клавиатуры не имеет, поэтому WEB управлялка — то что надо 🙂
Вот решил немного покнопкодавить с толком и настроить rtorrent + rutorrent. Для тех кто не в курсе что это, коротко опишу:
rtorrent — консольный torrent-клиент, имеет встроенный RPC, весьма гибок в настройке и функционален
rutorrent — WEB интерфейс для rtorrent написанный на PHP, JS и jQuery и еще бог знает чем … ох уж эти современные WEB-решения 🙂

Напомню что эта статья из цикла Debian Jessie: Мой маленький HowTo, для полноты понимания рекомендую пролистать статьи 1, 2, 3.

Сначала в настройках своей локальной DNS зоны я создал запись A — torrent.my.local, если у вас нету DNS сервера или вы не хотите его использовать, есть 2 варианта:
1. прописать в файле hosts пару ip — name для корректного резолва будущего сервера торрентов
2. ходить на web-интерфейс будущего торент-сервера по ip
Рекомендую всетаки установить и настроить bind и использовать DNS 🙂

Как и положено вначале — установим базово необходимые пакеты rtorrent и screen:

nas:~$ sudo apt-get install rtorrent screen

В Unix есть хорошее правило — запускать процессы от специально созданных для этого пользователей, я тоже стараюсь ему следовать.
Создадим юзера torrent, «под ним» будет работать rtorrent, пул php-fpm и rutorrent:

nas:~$ sudo useradd --comment "User for Torrent" --create-home --shell /usr/sbin/nologin torrent

На просторах инета валяется готовый init скрипт для запуска rtorrent в screen-е в виде сервиса linux. Он правда чуть устарел, в идеале надо будет соорудить такойже для systemd, но попервах сгодится и он. Вариант более чем рабочий!

Переходим в директорию /etc/init.d:

nas:~$ cd /etc/init.d

Качаем init-скрипт:

nas:/etc/init.d$ sudo wget -c https://wtorrent.googlecode.com/files/rtorrentInit.sh

Даем ему права на выполнение:

nas:/etc/init.d$ sudo chmod +x rtorrentd

Минимально необходимые правки — поменять юзера, по умолчанию root, что не есть гуд!:

nas:/etc/init.d$ sudo vim rtorrentd
#Do not put a space on either side of the equal signs e.g.
# user = user
# will not work
# system user to run as
user="torrent"

Добавляем в автозагрузку, чтобы стартовало при загрузке системы:

nas:/etc/init.d$ sudo update-rc.d rtorrentInit.sh defaults

Создаем файл конфигурации приложения rtorrent, программа ищет его в хомя пользователя, поэтому такой путь:

nas:~$ sudo vim /home/torrent/.rtorrent.rc

Минимально рабочий конфиг rtorrent, возможно в процессе использования чтото будет меняться — закину сюда:

# Диапазон рабочих портов torrent клиента
# Если вы за NAT не забываем "пробросить" порты
port_range = 32001-32001

# Включаем DHT
dht = auto

# UDP порт для DHT
dht_port = 32000

# Обмен пирами
peer_exchange = yes

# Использовать ли UDP трекеры
use_udp_trackers = yes

# Директория в которую по-умолчанию будут загружаться файлы
directory = /srv/hitachi/torrents

# Глобальные ограничения по скорости
upload_rate = 80
download_rate = 800

# "Шифруемся" если это возможно
encryption = allow_incoming,try_outgoing,enable_retry

# Директория для записи сессий rTorrent
session = /srv/seagate/.torrent_sessions

# Задаем путь к сокету RPC для управления через WEB
scgi_local = /home/torrent/.sockets/scgi.socket

## @@ Shedules @@ ##
# Периодически проверка и удаление сесий, если торрент удален
schedule = watch_untied,5,5, ((remove_untied))
# Остановить загрузки если Free Disk Space < 1024MB
schedule = low_diskspace,5,60,close_low_diskspace=1024M

По конфигу поясню чуть с путями, у меня в NAS 3 винчестера:
один под систему,
второй /srv/hitachi — для мусора, туда и буду качать торренты
третий /srv/seagate — тоже для мусора, для уменьшения нагрузки на диск я рознес по разным винтам директории сессий и файлов

Если у вас один винчестер — не переживайте, все это может жить и на одном винчестере. Просто создайте в том же хомяке пользователя torrent директорию для загруженных файлов и для сессий, поправьте в конфиге rtorrent и вуаля … Это я уже с жиру бешусь 🙂

Не забываем на роутере (в моем случае он тоже на Debian Jessie) «пробросить» порт указанный в port_range. В конфиг с правилами iptables впишите для таблицы nat такое:

# NAT Table Rules
*nat
# Torrent Forwarding to NAS UDP/TCP
-A PREROUTING -i eth1 -p udp -m udp --dport 32001 -j DNAT --to-destination 192.168.0.100
-A PREROUTING -i eth1 -p tcp -m tcp --dport 32001 -j DNAT --to-destination 192.168.0.100
COMMIT

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

nas:~$ sudo mkdir /home/torrent/.sockets

поскльку и конфиг и директорию для сокетов мы создавали от рута (использовали sudo) — поправим права:

nas:~$ sudo chown -R torrent.torrent /home/torrent

Создадим директорию для сессий и сразу права:

nas:~$ sudo mkdir /srv/seagate/.torrent_sessions
nas:~$ sudo chown -R torrent.torrent /srv/seagate/.torrent_sessions

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

nas:~$ sudo mkdir /srv/hitachi/torrents
nas:~$ sudo chown torrent.torrent /srv/hitachi/torrents

Итак, все упомянутые выше директории мы создали, пробуем стартовать rtorrent:

nas:~$ sudo /etc/init.d/rtorrentInit.sh start
Starting rtorrent: rtorrent.
nas:~$

Теперь нужно настроить web часть, для этого нам потребуется nginx и php-fpm.
Установим:

nas:~$ sudo apt-get install git-core php5-fpm php5-curl php5-xcache nginx-full

Переходим в домашнюю директорию пользователя torrent, туда розместим web-приложение rutorrent:

nas:~$ cd /home/torrent/

создадим необходимые директории:

nas:/home/torrent$ sudo mkdir {htdocs,logs}

в директорию htdocs клонируем последнюю стабильную версию ruTorrent:

nas:/home/torrent$ sudo git clone https://github.com/Novik/ruTorrent.git htdocs/

выходим с директории /home/torrent:

nas:/home/torrent$ cd
nas:~$

не забываем снова поправить права:

nas:~$ sudo chown -R torrent.torrent /home/torrent

Настройка php-fpm довольно простая.
Переходим в конфиг пулов:

nas:~$ cd /etc/php5/fpm/pool.d/

по умолчанию есть дефолтный пул www, убедимся в этом:

nas:/etc/php5/fpm/pool.d$ ls -l
total 20
-rw-r--r-- 1 root root 18324 Jun  5 07:19 www.conf
nas:/etc/php5/fpm/pool.d$

он нам пригодится в качестве шаблона, ну а дальше он не нужен — выключаю:

nas:/etc/php5/fpm/pool.d$ sudo cp www.conf torrent.conf
nas:/etc/php5/fpm/pool.d$ sudo mv www.conf www.disabled

вот что получилось в итоге:

nas:/etc/php5/fpm/pool.d$ ls -l
total 40
-rw-r--r-- 1 root root 18324 Jun 30 05:44 torrent.conf
-rw-r--r-- 1 root root 18324 Jun  5 07:19 www.disabled
nas:/etc/php5/fpm/pool.d$

вперед настраивать пул torrent:

nas:/etc/php5/fpm/pool.d$ sudo vim torrent.conf

достаточно простейших настроек, у меня вышло так:

[torrent]
user = torrent
group = torrent

listen = /home/torrent/.sockets/php5-fpm.socket
listen.owner = torrent
listen.group = www-data
listen.mode = 0660

pm = dynamic
pm.max_children = 5
pm.start_servers = 0
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.process_idle_timeout = 60s;

chdir = /

php_admin_value[error_log] = /var/log/php-fpm_torrent.log

выходим из директории настройки пулов php-fpm:

nas:/etc/php5/fpm/pool.d$ cd
nas:~$

и запускаем сервис:

nas:~$ sudo systemctl restart php5-fpm.service

В результате у нас должен создаться сокет php-fpm по заданному в конфиге пути, проверяем его наличие:

nas:~$ ls -l /home/torrent/.sockets/
total 0
srw-rw---- 1 torrent www-data 0 Jun 30 06:42 php5-fpm.socket
srwxr-xr-x 1 torrent torrent  0 Jun 30 06:41 scgi.socket
nas:~$

Теперь настройка nginx
Переходим в директорию с настройками:

nas:~$ cd /etc/nginx/
nas:/etc/nginx$

Открываем основной конфиг текстовым редактором vim:

nas:/etc/nginx$ sudo vim nginx.conf

следуя логике минимализма конфигурации и нагрузки на сервер (у меня же Intel Atom!), в основном конфиге я изменил только 3 параметра:

1. Нагрузки на nginx никакой не будет, зачем 4 воркера жрущих память?
worker_processes 1;

2. SSL включен по умолчанию, у меня доверенная локалка — SSL мне не нужен — комментим

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

Вот такой получился конфиг:

user www-data;
worker_processes 1;
pid /run/nginx.pid;

events {
    worker_connections 768;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    gzip on;
    gzip_comp_level 1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Теперь к настройке конфига приложения, розмещаем по классике в /etc/nginx/sites-available и потом включаем симлинком в sites-enabled.
Напомню что я изначально в своей внутренней зоне создал в DNS запись A для торрента — torrent.my.local

переходим в директорию с конфигами сайтов:

nas:/etc/nginx$ cd sites-available/

И сочиняем конфиг:

nas:/etc/nginx/sites-available$ sudo vim torrent_my_local.conf

у меня получился такой:

server {
   listen 80;
   # Если у вас нету DNS имени сервера и вы будете ходить на сервер по ip
   # используйте следующую опцию, вместо моей:
   # server_name _;
   # а также предварительно выключите дефолтный конфиг:
   # sudo rm /etc/nginx/sites-enabled/default
   server_name torrent.my.local;

   access_log /var/log/nginx/torrent-access.log;
   error_log /var/log/nginx/torrent-error.log;

   root /home/torrent/htdocs;
   index index.html;

   # Very rarely should these ever be accessed outside of your lan
   location ~* \.(txt|log)$ {
    allow 127.0.0.0/8;
    deny all;
   }

   # Deny to any .* files. Like ".git", ".svn" ... etc
   location ~ (^|/)\. {
    return 403;
   }

   location / {
    index index.html;
   }

   # rTorrent RPC
   location /RPC2 {
    include scgi_params;
    scgi_pass unix:/home/torrent/.sockets/scgi.socket;
   }

   # PHP Files
   location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/home/torrent/.sockets/php5-fpm.socket;
    #fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   }

   # Static Files
   location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ {
    access_log off;
    expires max;
   }
}

для включения конфига, переходим в директорию /etc/nginx/sites-enabled и создаем симлинк на конфиг torrent_my_local.conf:

nas:/etc/nginx/sites-available$ cd ../sites-enabled/
nas:/etc/nginx/sites-enabled$ sudo ln -s ../sites-available/torrent_my_local.conf

вот что должно получиться в итоге (еще раз, если хотите ходить на сервер по ip, удалите симлинк default из директории /etc/nginx/sites-enabled):

nas:/etc/nginx/sites-enabled$ ls -l
total 0
lrwxrwxrwx 1 root root 34 Jun 30 04:53 default -> /etc/nginx/sites-available/default
lrwxrwxrwx 1 root root 41 Jun 30 06:21 torrent_my_local.conf -> ../sites-available/torrent_my_local.conf
nas:/etc/nginx/sites-enabled$

переходим в хомяк:

nas:/etc/nginx/sites-enabled$ cd
nas:~$

проверяем конфигурацию nginx и перезапускаем его:

nas:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nas:~$

теперь можно и перезапустить сервис nginx:

nas:~$ sudo systemctl restart nginx.service

если вы все верно настроили, можно попробовать перейти на сайт torrent.my.local, там уже должна корректно открыться главная страничка rutorrent
Правда web-ка rutorrent ругается:

[30.06.2015 10:54:39] WebUI started.
[30.06.2015 10:54:40] No connection to rTorrent. Check if it is really running. Check $scgi_port and $scgi_host settings in config.php and scgi_port in rTorrent configuration file.

Что вполне логично, так как rutorrent также нуждается в минимальной настройке.
Необходимо внести кое-какие правки в основной конфиг приложения rutorrent:

nas:~$ sudo vim /home/torrent/htdocs/conf/config.php

я поменял там всего несколько параметров:

        $log_file = '/home/torrent/logs/rutorrent-errors.log';
        // Закоментим, так как у нас для RPC используется socket
        //$scgi_port = 5000;
        //$scgi_host = "127.0.0.1";
        // Собственно вот он наш сокет
        $scgi_port = 0;
        $scgi_host = "unix:///home/torrent/.sockets/scgi.socket";
        $profileMask = 0755;

После сохранения файла, идем в браузер и снова открываем нашу страничку rutorrent, теперь видим такую ругань во вкладке log:

[30.06.2015 11:01:55] WebUI started.
[30.06.2015 11:01:55] rss: Some functionality will be unavailable. Webserver user can't access external program (curl).
[30.06.2015 11:01:55] mediainfo: Plugin will not work. rTorrent user can't access external program (mediainfo).
[30.06.2015 11:01:55] rss: Some functionality will be unavailable. rTorrent user can't access external program (curl).
[30.06.2015 11:01:55] screenshots: Plugin will not work. rTorrent user can't access external program (ffmpeg).
[30.06.2015 11:01:58] Unpack plugin: rTorrent user can't access 'unzip' program.
[30.06.2015 11:01:58] Unpack plugin: rTorrent user can't access 'unrar' program.

Для начала поставим программы curl, unzip и unrar:

nas:~$ sudo apt-get install unzip unrar

Снова F5 на вебке, уже ругани меньше:

[30.06.2015 11:08:12] WebUI started.
[30.06.2015 11:08:12] rss: Some functionality will be unavailable. Webserver user can't access external program (curl).
[30.06.2015 11:08:12] mediainfo: Plugin will not work. rTorrent user can't access external program (mediainfo).
[30.06.2015 11:08:12] screenshots: Plugin will not work. rTorrent user can't access external program (ffmpeg).

ffmpeg я точно ставить не буду, просто выключу плагин. Mediainfo — не знаю надо ли оно, поживем-увидим.
Вцелом закинул туда для теста .torrent файлик — качает 🙂 Значит готово. Возможно в процессе эксплуатации вылезут какието баги или в комментариях ктото чтото толковое посоветует — допишу в статью.

Хай щастить!

CentOS 6/Oracle Linux 6 — Installing VMware Guest Additions

В одной из предыдущих заметок я описал процесс установки VMware Guest Additions для RHEL 7 based дистрибутивов. Сейчас коротко опишу как это делается в RHEL 6 семействе дистрибутивов (CentOS, Oeacle Linux … etc).

Добавляем ключи официального репозитария VMware:

user$ sudo rpm --import http://packages.vmware.com/tools/keys/VMWARE-PACKAGING-GPG-DSA-KEY.pub
user$ sudo rpm --import http://packages.vmware.com/tools/keys/VMWARE-PACKAGING-GPG-RSA-KEY.pub

Добавляем в систему yum репозитарий. Для этого создаем редактором такой вот файл:

user$ sudo vim /etc/yum.repos.d/vmware-tools.repo

И помещаем в него вот что:

[vmware-tools]
name=VMware Tools
baseurl=http://packages.vmware.com/tools/esx/5.5latest/rhel6/$basearch
enabled=1
gpgcheck=1

Сохраняем файлик и поехали дальше … Читать полностью

PXE Boot: Добавляем утилиту Memtest+

Сдох сервак, ругается на память. Нужен Memtest. Решил добавить в свой PXE (я писал ранее статью про настройку PXE Boot) отдельным пунктом Memtest, как оказалось — это весьма просто.

Все действия выполняются на сервере где розвернут TFTP сервис.
Переходим в рутовую директорию TFTP:

cd /var/lib/tftpboot

Создаем отдельную директорию для memtest:

$ sudo mkdir memtest

и переходим в нее:

$ cd memtest

Качаем бинарь memtest-а:

memtest$ sudo wget -c http://www.memtest.org/download/5.01/memtest86+-5.01.bin

в главный конфиг меню нужно добавить вот такой пунктик:

LABEL Memtest
        MENU LABEL Memtest86+
        KERNEL memtest/memtest86+-5.01.bin

Сохраняем конфиг меню и пользуем 🙂

P.S. Оказалось что сервак просто задолбался работать и требовал немного внимания … после чистки, мойки заработал как ни в чем не бывало.

Хай щастить!

Debian Jessie: Установка Erlang OTP от Erlang Solutions

Начал изучать Erlang. Мой Гуру посоветовал установить релиз Erlang из репозитория Erlang Solutions. Судя по доке данного ресурса, это проще простого, но прикол в том что у меня Debian Jessie, а в доке описан процесс максимум для Wheezy. На самом деле репозиторий содержит сборку для Jessie, просто доку, как это обычно бывает, забыли/не успели обновить. Такчто «идем по приборам» 🙂
Итак, репозитарий добавляется очень просто:

srv:~$ sudo sh -c 'echo "deb http://packages.erlang-solutions.com/debian jessie contrib" > /etc/apt/sources.list.d/erlang_solutions.list'

Добавляем ключ репозитария:

srv:~$ sudo wget -c -O - http://packages.erlang-solutions.com/debian/erlang_solutions.asc |sudo apt-key add -

Ну и дальше стандартно, перечитываем репозитории и устанавливаем нужный пакет (erlang-base):

srv:~$ sudo apt-get update
....
srv:~$ sudo apt-get install erlang-base

После установки проверяем erlang запуском интерпретатора:

srv:~$ erl
Erlang/OTP 17 [erts-6.4.1] [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false]

Eshell V6.4.1  (abort with ^G)
1> io:format("~s~n", ["Hello World!"]).
Hello World!
ok
2>

Ну и как говорится — «Изучай Erlang во имя добра!»

Хай щастить!

Debian Jessie: Установка и настройка FTP сервера (proftpd + mod-geoip)

Поскольку я планирую использование данного FTP сервера только в географических пределах своей страны — то логично ограничить к серверу доступ с помощью GeoIP. Это снизит бесполезную нагрузку создаваемую брутфорсерами, а также улучшит безопасность сервиса и сервера. Поскольку у меня всего пара-тройка пользователей FTP и те имеют отдельные системные аккаунты — авторизация будет PAM (системная).

Установим необходимые пакеты:

deb$ sudo apt-get install proftpd-basic proftpd-mod-geoip geoip-database

Пакеты установили — вперед к настройке … Читать полностью

Debian Jessie: Настройка базовых сервисов (ssh, ntp)

После установки и базовой настройки системы Debian GNU Linux, рекомендую настроить пару важных системных сервисов — ssh и ntp.

1. sshd:
открываем основной конфиг:

deb:~$ sudo vim /etc/ssh/sshd_config

И смотрим все что там есть … Я обращаю внимание на следующие опции:

Port 22
Protocol 2
PermitRootLogin without-password
StrictModes yes
TCPKeepAlive yes

На удивление, все настроено как мне нравится по умолчанию — обожаю Debian.
Если вы чтото изменили в конфиге, сохраните его и не забудьте перегрузить сервис после настройки:

deb:~$ sudo systemctl restart ssh.service

2. ntpd:
Время тоже важная штука, особенно на сервере. Для постоянной синхронизации с серверами точного времени в Интернете рекомендую установить и настроить ntp-server.
Установим:

deb:~$ sudo apt-get install ntp

Открываем основной конфиг:

deb:~$ sudo vim /etc/ntp.conf

и приводим в такое состояние:

driftfile /var/lib/ntp/ntp.drift

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

server 0.ua.pool.ntp.org iburst
server 1.ua.pool.ntp.org iburst
server 2.ua.pool.ntp.org iburst
server 3.ua.pool.ntp.org iburst

restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery

# разрешаем localhost в качестве клиента синкать время
restrict 127.0.0.1
restrict ::1
# Если хотим разрешить использование сервиса ntp
# для локальной сети, розкомментировать строчку
# и вписать свою сеть по образу и подобию:
#restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap

Перезаапускаем сервис (он автоматически запускается после инсталяции):

deb:~$ sudo systemctl restart ntp.service

Добавляем сервис в автозагрузку:

deb:~$ sudo systemctl enable ntp.service
Synchronizing state for ntp.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d ntp defaults
Executing /usr/sbin/update-rc.d ntp enable
deb:~$

Проверить статус работы ntp-server-а можно так:

deb:~$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*exb-gate.dgma.d 62.149.0.30      2 u   46   64    1   22.416   10.433   0.030
 91.218.89.74    207.3.130.6      2 u   46   64    1    6.653   11.025   0.796
 ns1.rx-name.net 232.213.183.238  3 u   45   64    1   10.493   12.001   0.043
 82.193.117.90.i 140.203.204.77   2 u   45   64    1    1.656   11.772   0.063
deb:~$

Если вместо циферок delay, offset, jitter вы видите прочерки или пустоту — значит чтото настроено не верно. Проверяйте сеть, firewall, конфиг ntp.conf и тд

Хай щастить!

Debian Jessie: Мой маленький HowTo

Скопился целый ворох мелких howto по настройке всякой всячины в Debian Jessie. Решил объединить их в виде некоего мини-туториала.
Список того что будет опубликовано в ближайшее время:
0. Чтото вместо вступления. Тут же простенькое ТЗ и топология сети.
1. Начальная настройка системы (disable IPv6, timezone, APT sources.list, APT tuning)
2. Решение мелких проблем после установки (firmware realtek, some lvm+mdadm trick)
3. Настройка базовых сервисов (sshd, ntpd, smartd)
4. Настройка DNS сервера (bind9)
5. Базовая настройка фаервола (iptables)
6. Установка и настройка FTP сервера с поддержкой GeoIP (proftpd)
7. Установка и настройка DHCP сервера (isc-dhcp-server)
8. Установка, настройка и backup баз mysql-server (mariadb-server)
9. Установка и базовая настройка компонентов вэб сервера (Apache2, Nginx, PHP5-FPM)
10. WEB сервер на любой вкус:
— вариант №1 (nginx + apache2 + mod_php5)
— вариант №2 (nginx + php5-fpm)
— вариант №3 (nginx + php5-fpm in chroot)
11. «Ускоряем» WEB-сервер (memcached, xcache)
12. Трюки вокруг доступа к sshd (iptables, ipset, geoip)
13. Установка и настройка backup сервера (bacula)
14. Установка и настройка Mail сервера с WEB интерфейсом (exim4, dovecot, postfixadmin, roundcube)
— этап №1 — подготовка
— этап №2 — настройка postfixadmin
— этап №3 — настройка dovecot
— этап №4 — настройка exim4
— этап №5 — настройка roundcube
15. Домашний NAS на основе Debian Jessie (NFS, Samba)
16. Домашний NAS на Debian Jessie — установка и настройка Torrent клиента с WEB интерфейсом

Хай щастить!

MySQL — Восстановление таблиц Innodb

Шеф! Все пропало! База упала, данные пропали!

mysql> USE helldb;
mysql> SELECT * FROM cheaters;
ERROR 1146 (42S02): TABLE 'helldb.cheaters' doesn't exist
mysql>

Или это может выглядеть вот так, при попытке забекапить базу mysqldump -ом:

[red@hellsrv ~]$ mysqldump -uroot -p helldb > helldb.sql
Enter password:
mysqldump: Got error: 1146: Table 'helldb.cheaters' doesn't exist when using LOCK TABLES
[red@hellsrv ~]$

Перед любыми действиями с базой, обязательно сделайте ее бэкап! Читать полностью

CentOS 7/Oracle Linux 7 — Installing VMware Guest Additions

Необходимо установить гостевые дополнения для OS CentOS7 (ничем не отличается от Oracle Linux 7.x)
Приступим! Для этого нам нужны vmware-репозитории для yum. Но чтобы они красиво работали — сначала нужно установить ключи GPG.

Устанавливаем ключи для необходимых репозиториев:

user@red5:~$ sudo rpm --import http://packages.vmware.com/tools/keys/VMWARE-PACKAGING-GPG-DSA-KEY.pub
user@red5:~$ sudo rpm --import http://packages.vmware.com/tools/keys/VMWARE-PACKAGING-GPG-RSA-KEY.pub

Добавляю yum-репозиторий, для этого создаю файлик:

user@red5:~$ sudo vim /etc/yum.repos.d/vmware-tools.repo

и помещаю туда:

[vmware-tools]
name = VMware Tools
baseurl = http://packages.vmware.com/packages/rhel7/x86_64/
enabled = 1
gpgcheck = 1

Теперь установка нужных пакетов:

user@red5:~$ sudo yum install open-vm-tools-deploypkg
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.mirohost.net
 * extras: mirror.mirohost.net
 * updates: mirror.mirohost.net
Resolving Dependencies
--> Running transaction check
---> Package open-vm-tools-deploypkg.x86_64 0:9.4.10-3 will be installed
--> Processing Dependency: open-vm-tools < 9.5 for package: open-vm-tools-deploypkg-9.4.10-3.x86_64
--> Processing Dependency: open-vm-tools >= 9.4 for package: open-vm-tools-deploypkg-9.4.10-3.x86_64
--> Processing Dependency: libmspack for package: open-vm-tools-deploypkg-9.4.10-3.x86_64
--> Running transaction check
---> Package libmspack.x86_64 0:0.0.20040308alpha-2 will be installed
---> Package open-vm-tools.x86_64 0:9.4.0-6.el7 will be installed
--> Processing Dependency: libicuuc.so.50()(64bit) for package: open-vm-tools-9.4.0-6.el7.x86_64
--> Processing Dependency: libicui18n.so.50()(64bit) for package: open-vm-tools-9.4.0-6.el7.x86_64
--> Processing Dependency: libicudata.so.50()(64bit) for package: open-vm-tools-9.4.0-6.el7.x86_64
--> Processing Dependency: libdnet.so.1()(64bit) for package: open-vm-tools-9.4.0-6.el7.x86_64
--> Running transaction check
---> Package libdnet.x86_64 0:1.12-13.1.el7 will be installed
---> Package libicu.x86_64 0:50.1.2-11.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===============================================================================================================================================================
 Package                                       Arch                         Version                                   Repository                          Size
===============================================================================================================================================================
Installing:
 open-vm-tools-deploypkg                       x86_64                       9.4.10-3                                  vmware-tools                        21 k
Installing for dependencies:
 libdnet                                       x86_64                       1.12-13.1.el7                             base                                31 k
 libicu                                        x86_64                       50.1.2-11.el7                             base                               6.9 M
 libmspack                                     x86_64                       0.0.20040308alpha-2                       vmware-tools                        26 k
 open-vm-tools                                 x86_64                       9.4.0-6.el7                               base                               430 k

Transaction Summary
===============================================================================================================================================================
Install  1 Package (+4 Dependent packages)

Total size: 7.4 M
Installed size: 26 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : libmspack-0.0.20040308alpha-2.x86_64                                                                                                        1/5
  Installing : libicu-50.1.2-11.el7.x86_64                                                                                                                 2/5
  Installing : libdnet-1.12-13.1.el7.x86_64                                                                                                                3/5
  Installing : open-vm-tools-9.4.0-6.el7.x86_64                                                                                                            4/5
  Installing : open-vm-tools-deploypkg-9.4.10-3.x86_64                                                                                                     5/5
  Verifying  : open-vm-tools-deploypkg-9.4.10-3.x86_64                                                                                                     1/5
  Verifying  : libdnet-1.12-13.1.el7.x86_64                                                                                                                2/5
  Verifying  : libicu-50.1.2-11.el7.x86_64                                                                                                                 3/5
  Verifying  : libmspack-0.0.20040308alpha-2.x86_64                                                                                                        4/5
  Verifying  : open-vm-tools-9.4.0-6.el7.x86_64                                                                                                            5/5

Installed:
  open-vm-tools-deploypkg.x86_64 0:9.4.10-3                                                                                                                    

Dependency Installed:
  libdnet.x86_64 0:1.12-13.1.el7      libicu.x86_64 0:50.1.2-11.el7      libmspack.x86_64 0:0.0.20040308alpha-2      open-vm-tools.x86_64 0:9.4.0-6.el7    

Complete!
user@red5:~$

Запускаем сервис и добавляем его в автозагрузку:

user@red5:~$ sudo systemctl restart vmtoolsd.service
user@red5:~$ sudo systemctl enable vmtoolsd.service

После этого в VmWare Vsphere Client видим вот такую картинку:
VmWare - Install Guest Additions

Хай щастить!

Debian Jessie: «W: Possible missing firmware /lib/firmware/rtl_nic/… for module r8169»

В новомодном Debian Jessie возникла вот такая проблемка:

root@debian:~# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-3.16.0-4-amd64
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168g-3.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168g-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8106e-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8106e-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8411-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8411-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8402-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168f-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168f-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8105e-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-3.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-1.fw for module r8169
mdadm: Cannot get exclusive access to /dev/md0:Perhaps a running process, mounted filesystem or active volume group?
mdadm: Cannot get exclusive access to /dev/md1:Perhaps a running process, mounted filesystem or active volume group?
root@debian:~#

Это не ошибка, просто предупреждение. Убрать его очень просто — достаточно установить пакетик firmware-realtek Читать полностью