Posts Tagged ‘ Debian

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 ~]$

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

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.

Хай щастить!

Linux/Unix — App’s debug

На днях прокачал свой скил в Linux 🙂 Как дебажить программу или службу? Проще не придумаешь — используй strace!
Install:

# apt-get install strace

Usage:

$ strace -e trace=open,read,close,connect  -p <pid>
$ strace -e trace=open,read,close,connect  <app>

Читать полностью

ssh — Ограничение доступа по GeoIP

Последнее время обьем говнотрафика в Интернете вырос в разы. Если раньше auth.log насчитывал примерно до 10 SSH ботов в сутки, то на данный момент этот показатель вырос до сотен уникальных ip. Боты в основном из Китая/Тайвани/Кореи… Фаервол конечно спасает, но хочется чегото изощреннее …
На просторах Интернета когдато нашел рецепт ограничения доступа к sshd по GeoIP. Решил опробовать.
Задача: дать доступ по SSH только ip адресам из Украины — остальным зась!
Для начала установил необходимые пакеты:

root@host:~# apt-get install geoip-bin geoip-database

И поехали ваять скрипты … настраивать конфиги!
Читать полностью

Zabbix — CPU Time & Memory Usage для процесса

Задача — мониторить zabbix-ом Memory и CPU Time Usage для конкретного процесса в Linux/Unix.
Больше конкретики …
Есть вот такой процесс:

black@linux9:~$ sudo ps aux |grep java
bioc 8607 40.4 1.2 11097680 418576 pts/0 Sl Feb25 423:27 /usr/java/jdk1.7.0_67/bin/java -classpath /opt/bioc/maven/boot/plexus-classworlds-2.4.jar -Dclassworlds.conf=/opt/bioc/maven/bin/m2.conf -Dmaven.home=/opt/bioc/maven org.codehaus.plexus.classworlds.launcher.Launcher tomcat7:run
black@linux9:~$

Как узнать сколько ресурсов он потребляет? И не просто узнать, но еще и запихнуть в zabbix для сбора статистики и накручивания триггеров.
Процессор!
CPU Time процесса — в дефолте Zabbix не умеет собирать агентом этот параметр. Но есть возможность написать свой UserParameter в конфиг zabbix-agent. Вот мой вариант:

UserParameter=proc.cputime.fc[*],CPUS=$$(grep -c ^processor /proc/cpuinfo); /bin/ps -A --no-headers -o user:16,cputime,args | /usr/bin/awk -v CPU_C="$$CPUS" 'BEGIN {SUM=0; SNAME="$3"; COMM="$2"; USER="$1"} {if (($$9 ~ SNAME || SNAME == "") &amp;&amp; ($$3 ~ COMM || COMM == "") &amp;&amp; ($$1 == USER || USER == "")) {d[1]=0; d[2]=0; split($$2, d,"-"); if (d[2] != 0) {split(d[2], t, ":"); SUM+=86400*d[1]+3600*t[1]+60*t[2]+t[3]} else {split($$2, t, ":"); SUM+=3600*t[1]+60*t[2]+t[3]}; }} END''{printf "%.1f", 100*SUM/CPU_C}'

На zabbix-server можно использовать Item «proc.cputime.fc» с дополнительными параметрами которые нужны для выборки awk:
USER=$1 — username, в моем случае «bioc»
COMM=$2 — command name, в моем случае «java»
SNAME=$3 — some unique parameter, в моем случае «tomcat7»
В моем случае это:

black@linux9:~$ /bin/ps -A --no-headers -o user:16,cputime,args |grep bioc |awk '{print $1,$3,$9}'
bioc /usr/java/jdk1.7.0_67/bin/java tomcat7:run
black@linux9:~$

Тоесть в моем конкретном случае Item выглядит так: proc.cputime.fc[bioc,java,tomcat7]

А что с памятью?
Поскольку я при настройке сервисов руководствуюсь правилом — один сервис на одного юзера, то в моем случае достаточно иметь Item для сбора использования памяти пользователем. В Zabbix версии 2.4 есть возможность получить от zabbix-client используемую память юзером, но к сожалению только VSZ. А я хочу еще и RSS! Тут опять поможет дополнительный UserParameter в zabbix-agent:

UserParameter=proc.mem.rss[*],/opt/zabbix/scripts/mem_ps_rss.pl "-p" "$1"

Он ведет к скрипту, а вот его листинг:

#!/usr/bin/perl
# Author: Tom Llewellyn-Smith
# Date: 10/12/2012
#
# Comment: simple perl script which sums all rss memory used by a given process (-p)
# tested on linux ps, easily modified to run with BSD ps.
#
# Copyright: © Onix Consulting Limited 2012-2012. All rights reserved.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.
#
use strict;
use warnings;
use Getopt::Std;

my $PS='/bin/ps';
my %opts;
getopts('h:p:', \%opts);
my $total_rss = 0;

sub usage
{
print "$0:\n\t-h displays this message\n\t-p [process name]\n";
exit 1;
}

unless ($opts{'p'})
{
# As a side-effect of not having -p set, -h also display help message.
&amp;usage;
}

# Loop over all processes and add to total_rss counter if process matches regex.
foreach my $proc (`$PS -eF`)
{
if ($proc =~ /$opts{'p'}/)
{
my (undef,$pid,undef,undef,undef,$rss) = split(/\s+/,$proc);
# Do not include current script process as it will also match.
unless ($pid == $$)
{
$total_rss += $rss;
}
}
}

print $total_rss;

Этот скрипт был найден на просторах Интернета. Не помню менял я в нем чтото или нет …. Но суть не в том. Так что там с памятью? А вот что:
Memory Usage by Process (RSS) Item — proc.mem.rss[tomcat7]
Memory Usage by User (VSZ) Item — proc.mem[,bioc]

MySQL — online change storage engine.

Достались мне в наследство некоторые MySQL базы. Случайно обратил внимание что таблицы а базе используют MyISAM Engine. Поскольку базы создавались «за царя Гороха», а свежий MySQL Server был жестко оптимизирован конфигом под InnoDB Engine — решено сменить storage engine с MyISAM на InnoDB «на лету».
Делается это очень просто … Читать полностью

DHCP+PXE+TFTP — Boot/Netinstall для CentOS 6.6/CentOS 7/Debian Stable/Ubuntu 14.04

Задача: настроить в сети предприятия сетевую установку CentOS 6.6 minimal, CentOS 7 DVD + minimal, Debian Stable (Wheezy), Ubuntu 14.04 LTS
Для этого нам понадобится DHCP сервер (в моей сети уже был настроен isc-dhcp-server), TFTP сервер и:
— HTTP/FTP сервер (на выбор, кому что больше нравится) для локальной установки по сети CentOS;
— NFS сервер для локальной установки по сети Debian/Ubuntu
Почему так? Да потому что Debian based & RHEL based дистры они хоть и линукс … но между ними пропасть всяческих различий, в частности это одно из них 🙂 Сразу скажу, в моем случае приоритет был именно на RHEL, поэтому инсталяхи CentOS я выложил в локальную сеть по HTTP с помощью nginx. С Debian/Ubuntu особо заморачиваться указания не было так как инстал данных дистрибутивов будет выполняться намного реже. Их в меню добавил, но настроил на сетевую установку через Интернет.
Поехали … Читать полностью