Archive for the ‘ Linux ’ Category

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 Читать полностью

Debian Jessie: Update BIOS Asus C60M1-I by flashrom

Итак, в домашнем использовании имеется материнка Asus C60M1-I. Захотелось глянуть какой там стоит BIOS — вдруг есть обновления? Для просмотра различных параметров «железа» в Linux есть прекрасная утилита — dmidecode. Она была у меня установлена, пользовать так:

root@debian:~# dmidecode --string bios-version
0205
0205
root@debian:~#

На сайте ASUS уже есть версия 0502 — нужно обновить BIOS! Вспомнил что когдато у меня была подобная материнка и я без проблем обновлял BIOS прямо из Windows — это было просто и удобно. Вдруг что-то подобное возможно в Linux? Быстрое гугление показало что это более чем возможно, так как существует множество различных программ нужного функционала. Читать полностью

Debian Jessie: RAID (mdadm) + LVM — «Unable to find LVM volume VG01/root»

При установке Debian Jessie собрал зеркало из двух разделов. На одном md0 — просто /boot в ext4, на втором md1 VG с кучей LV (aka root, home, opt …)
Собственно все работало замечательно, пока не отключил один из винчестеров. После того как система теряет винт — грузится не хочет. Grub отрабатывает, а в initrd ошибка «Unable to find LVM volume VG01/root» и вывал в initrd консоль.

Проблема решается так, в initrd консоли ломаем RAID:

(initrd): mdadm -S /dev/md0
(initrd): mdadm -S /dev/md1

После этого скан:

(initrd): mdadm -A --scan

И вуаля! RAID находит рабочий винчестер, на нем нужные раздеры и собирает md0, md1 в active статусе. Собственно разделы становятся активными и lvm тоже замечательно начинает работать. Читать полностью

Simple Desktop Notifications Jira/Mail: Conky + Perl

На работе внедрили Jira — это такой мега продукт для управления проектами, тиками, багами он же вики и тд и тп … Я как админ там восновном работаю с тикетами которые на меня сыпятся со всех сторон. Но беда в том что софтина web-овская и для человека сидящего целыми днями в консоли не очень удобно держать отдельную вкладку с Jira в браузере и постоянно туда заглядывать. В Jira есть нотификейшены в почту, но опять же, почта web-овская: браузер -> вкладка -> смотреть-смотреть …. не удобно 🙂
Решил сделать себе няшную уведомлялку на десктоп для Jira (интересуют открытые тикеты назначенные на меня), а заодно и для почты (Интересует непрочитанные сообщения в директории INBOX) 🙂 Она же тоже вебовская … зараза.
Jira имеет очень богатый API, он же REST, через который можно совершать любые манипуляции с тикетами: создавать, комментировать, закрывать, переназначать … Но мне многого не надо, всего то отобразить на desktop количество заявок которые «висят на мне».
Есть готовые скрипты для работы с Jira использующие Jira REST. Варианты самые разнообразные как по функционалу так и по языкам: на ruby, python, perl. Я выбрал последний, так как более-менее ориентируюсь в перловке.

Если Jira работает по HTTPS (у нас именно так) то нужны библиотеки для работы с SSL. Их можно установить из репозиториев Linux, у себя в Debian 8 я сделал так:

# apt-get install libssl-dev

Первый раз на рабочей тачке использую Perl CPAN, поэтому нужно его проинитить:

# cpan App::cpanminus​

Теперь установим модуль perl для работы с Jira:

# cpanm JIRA::REST

Все что нужно уже есть, можно создавать скриптик:

#!/usr/bin/env perl

use JIRA::REST;

   my $jira = JIRA::REST->new('https://jira.mycompany.ua', '_my_login_', '_jira_pass_here_');

# Iterate on issues
   my $search = $jira->POST('/search', undef, {
    jql        => 'assignee = "_my_login_" and status != "done"',
    startAt    => 0,
    maxResults => 10,
    fields     => [ qw/summary status assignee/ ],
   });

my $issues_counter = 0;

   foreach my $issue (@{$search->{issues}}) {
    ++$issues_counter;
   }

print "$issues_counter\n";

Сохраняем куда хотите и даем права на выполнение:

# chmod +x /home/some/path/jira_api.pl

Результатом его работы является целое десятичное число заявок которые назначены на _my_login_ и в состоянии «!= done»
Вот пример выполнения:

$ /home/some/path/jira_api.pl​
2
$​

Теперь для отображения на десктопе используем conky
Если не стоит, установим:

# apt-get install conky

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

# Conky settings #

background no
update_interval 5
double_buffer yes
no_buffers yes

# Window specifications #
own_window yes
own_window_type desktop
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_title
own_window_colour black
own_window_argb_visual yes
own_window_argb_value 200

minimum_size 200

# Alignment #
alignment br
gap_x 20
gap_y 50

border_inner_margin 15
border_outer_margin 0

# Graphics settings #
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no

# Text settings #
# Шрифт выбирайте на свой вкус
use_xft yes
xftalpha 0
xftfont Audiowide:size=10
#xftfont Open Sans Light:size=11

# Color scheme #
default_color 666666

color1 0099CC
color2 9933CC
color3 669900
color4 FF8800
color5 CC0000
color6 AAAAAA
color7 DDDDDD

TEXT
$font${color7}Jira Tickets: $font${color1}${execi 120 /home/some/path/jira_api.pl} $font${color7}|| $font${color7}Mail Inbox: $font${color1}${execi 120 /home/some/path/mail_imaps_v2.pl}

Вот листинг скрипта для отображения непрочитанных почтовых сообщений по IMAP (unread, INBOX). Скрипт не мой, нашелся гдето в инете:

#!/usr/bin/env perl

# gimap.pl by gxmsgx
# description: get the count of unread messages on imap

use strict;
use warnings;
use Mail::IMAPClient;
use IO::Socket::SSL;

my $username = 'my_email@company.ua';
my $password = '_my_mail_passwd_';

my $socket = IO::Socket::SSL->new(
  PeerAddr => 'webmail.company.ua',
  PeerPort => 993
 )
 or die "socket(): $@";

my $client = Mail::IMAPClient->new(
  Socket   => $socket,
  User     => $username,
  Password => $password,
 )
 or die "new(): $@";

if ($client->IsAuthenticated()) {
   my $msgct;

   $client->select("INBOX");
   $msgct = $client->unseen_count||'0';
   print "$msgct\n";
}

$client->logout();

И запускаем conky с такими параметрами:

$ conky -d -c /home/some/.conky_line

Получаем вот такой результат на десктопе в правом нижнем углу:
Conky - Jira and Mail

Не забудьте добавить в автостарт своего dm conky.

Хай щастить!