полезное по линуксу и iphone собрано все интересное мне лично (методом copy-paste из инета и не пыхтите насчет копирайта я ссылки на источник ставлю)

суббота, 14 января 2012 г.

Установка htop во FreeBSD


В Ubuntu есть удобная утилита htop, которая визуально более информативна чем штатный top, а также дает возможность совершать больше действий над запущенными процессами.
Во FreeBSD есть порт htop:

1
2
3
4
5
6
7
8
> cd /usr/ports/ && make search name=htop
Port:   htop-0.8.3
Path:   /usr/ports/sysutils/htop
Info:   A better top(1) - interactive process viewer
Maint:  yzlin@FreeBSD.org
B-deps: autoconf-2.62 autoconf-wrapper-20071109 automake-1.9.6_3 automake-wrapper-20071109 libtool-2.2.6b m4-1.4.14_1,1 perl-5.10.1_1 python26-2.6.5
R-deps: lsof-4.84A,5
WWW:    http://htop.sourceforge.net/
Но его установка обычно завершается сообщением об ошибке:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
cd /usr/ports/*/htop
/usr/ports/sysutils/htop > make install clean
.....
===>  Configuring for htop-0.8.3
***********************************************************
htop(1) requires linprocfs(5) to be mounted. If you don't
have it mounted already, please add this line to /etc/fstab
and run `mount linproc`:
linproc /compat/linux/proc linprocfs rw 0 0
***********************************************************
*** Error code 1
 
Stop in /usr/ports/sysutils/htop.
*** Error code 1
Подключаем модули linux во FreeBSD:
1.

1
kldload linux
2. Чтобы загружался постоянно, добавим в /etc/rc.conf

1
echo "linux_enable=YES"  >> /etc/rc.conf.
3. Установим linux_base-fc4

1
2
cd /usr/ports/emulators/linux_base-fc4
make install clean
4. Подключим псевдофайловую систему

1
echo "linproc /compat/linux/proc linprocfs rw  0 0" >> /etc/fstab
5. Смонтируем ее

1
mount linproc
6. И повторим установку htop из портов:

1
2
cd /usr/ports/*/htop
make install clean
7. Обновим кеш шелла и запустим htop

1
rehash && htop
Теперь вместо стандартного top запускаем разноцветный htop под  FreeBSD

четверг, 23 июня 2011 г.

Мониторинг количества активных хостов в сети

Недавно передо мной встала задача определения количества включенных компьютеров в нескольких подсетях нашей организации. Сеть ужасно запущена: нет ни домена, ни средств удаленной установки, поэтому поставить на все компьютеры агент мониторинга не было возможности. С другой стороны, на многих компьютерах был включен файрвол, из-за чего компьютеры не отвечали на ping-запрос.

Для решения этой задачи я использовал замечательную утилиту arping.

Вот что получилось



Arping работает на втором уровне модели OSI и не блокируется файрволом, т.к. компьютер должен отвечать на ARP-запросы, чтобы до него доходили IP-пакеты. Минусом arping по сравнению с ping является то, что arping работает в пределах одной локальной сети и не маршрутизируется. Однако это ограничение можно обойти с помощью проксирования ARP.

Для начала я написал простенький скрипт на PHP (это единственный язык, который я знаю ☺), использующий arping. Задаются сети и маски, и скрипт в цикле пингует каждый IP-адрес в них:


//задаем сети и маски
$subnets = array("192.168.0.0/255.255.255.0", "10.10.8.0/255.255.252.0");

$up = 0; //количество живых хостов
foreach($subnets as $subnet)
{
list($addr, $mask) = explode('/', $subnet);
//вычисляем начальный и конечный адрес
$start = (ip2long($addr) & ip2long($mask)) + 1;
$end = $start + (~ ip2long($mask)) - 1;
//пробегаем все адреса и арпингуем их
for($ip = $start; $ip <= $end; $ip++)
{
$response = shell_exec("arping -c 2 " . long2ip($ip));
if(!strstr($response, '0 packets received')) $up++;
}
}
echo $up . "\r\n";
?>


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

В итоге я переписал скрипт так:
  • Настройки и адреса сетей считываются из ini-файла.
  • «Папа»-скрипт запускает экземпляр дочернего скрипта для каждой сети и контролирует его работу.
  • Дочерний скрипт проверяет все адреса своей сети по кругу и обновляет информацию в Memcached. Помимо количества активных узлов запоминается их mac, dns и netbios имя.
  • Из memcached эти данные можно посмотреть на веб-странице или в zabbix.
Можно посмотреть список компьютеров в аскетичном веб-интерфейсе:


Также я добавил график в Zabbix (см. начало поста).
Для этого необходимо дописать в файл zabbix_agentd.conf строчку для каждой сети:
UserParameter=network_count.net_name,/usr/local/bin/php /путь до скрипта/get_network_stats.php net_name
На сервере добавить соответствующие item'ы.

И настроить график.
Скрипт get_network_stats.php <имя_сети> выдает количество активных хостов по имени сети. Я думаю, пользователи других систем мониторинга смогут без труда прикрутить к ним этот скрипт.

Исходник приводить не буду, т.к. он большой. Скачайте его — readme прилагается.
Я думаю, кому нужна такая штука, может переписать его под свои нужды: например, можно использовать вместо memcached обычный файл.

Взято http://habrahabr.ru/blogs/sysadm/119112/

вторник, 12 апреля 2011 г.

LVM — это просто!

Собственно, хочется просто и доступно рассказать про такую замечательную вещь как Logical Volume Management или Управление Логическими Томами.Поскольку уже давно пользуюсь LVM-ом, расскажу что он значит именно для меня, не подглядывая в мануалы и не выдёргивая цитаты из wiki, своими словами, чтобы было понятно именно тем кто ничего о нем не знает. Постараюсь сразу не рассказывать о всяческих «продвинутых» функциях типа страйпов, снапшотов и т.п.

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

есть 3 уровня абстракции:
1. PV (Physical Volume) — физические тома (это могут быть разделы или целые «неразбитые» диски)
2. VG (Volume Group) — группа томов (объединяем физические тома (PV) в группу, создаём единый диск, который будем дальше разбивать так, как нам хочется)
3. LV (Logical Volume) — логические разделы, собственно раздел нашего нового «единого диска» ака Группы Томов, который мы потом форматируем и используем как обычный раздел, обычного жёсткого диска.
это пожалуй вся теория. :) теперь практика:
для работы нужны пакеты lvm2 и возможность работать с привелегиями root поэтому:
$ sudo bash
# apt-get install lvm2

допустим у нас в компе есть жёсткий диск на 40Гб и нам удалось наскрести немного денег и наконец-то купить себе ТЕРАБАЙТНИК! :))) Система уже стоит и работает, и первый диск разбит одним разделом (/dev/sda1 как / ), второй — самый большой, который мы только подключили — вообще не разбит /dev/sdb…
Предлагаю немножко разгрузить корневой диск, а заодно ускорить (новый диск работает быстрее старого) и «обезопасить» систему с помощью lvm.
Можно делать на втором диске разделы и добавлять их в группы томов (если нам нужно несколько групп томов),
а можно вообще не делать на диске разделы и всё устройство сделать физическим разделом (PV)

root@ws:~# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created

Создаём группу томов с говорящим названием, например по имени машины «ws», чтобы когда мы перетащим данный диск на другую машину небыло конфликтов с именами групп томов:

root@ws:~# vgcreate ws /dev/sdb
Volume group «vg0» successfully created

желательно внести с корневого раздела такие папки как /usr /var /tmp /home, чтобы не дефрагментировать лишний раз корневой раздел и ни в коем случае его не переполнить, поэтому создаём разделы:

root@ws:~# lvcreate -n usr -L10G ws # здесь мы создаём раздел с именем «usr», размером 10Gb
Logical volume «usr» created
по аналогии делаем то же для /var, /tmp, /home:
root@ws:~# lvcreate -n var -L10G ws
root@ws:~# lvcreate -n tmp -L2G ws
root@ws:~# lvcreate -n home -L500G ws
у нас ещё осталось немного свободного места в группе томов (например для будущего раздела под бэкап)
посмотреть сколько именно можно командой:
root@ws:~# vgdisplay
информацию по созданным логическим томам
root@ws:~# lvdisplay
информацию по физическим томам
root@ws:~# pvdisplay

разделы что мы создали появятся в папке /dev/[имя_vg]/, точнее там будут ссылки на файлы,
lrwxrwxrwx 1 root root 22 2009-08-10 18:35 swap -> /dev/mapper/ws-swap
lrwxrwxrwx 1 root root 21 2009-08-10 18:35 tmp -> /dev/mapper/ws-tmp
lrwxrwxrwx 1 root root 21 2009-08-10 18:35 usr -> /dev/mapper/ws-usr
lrwxrwxrwx 1 root root 21 2009-08-10 18:35 var -> /dev/mapper/ws-var
и т.д…

дальше lvm уже почти кончается… форматируем наши разделы в любимые файловые системы:
root@ws:~# mkfs.ext2 -L tmp /dev/ws/tmp
root@ws:~# mkfs.ext4 -L usr /dev/ws/usr
root@ws:~# mkfs.ext4 -L var /dev/ws/var
root@ws:~# mkfs.ext4 -L home /dev/ws/home

кстати, не плохо было бы сделать раздел подкачки:
root@ws:~# lvcreate -n swap -L2G ws
root@ws:~# mkswap -L swap /dev/ws/swap
root@ws:~# swapon /dev/ws/swap

создаём папку и подключая по очереди новообразовавшиеся тома, копируем в них нужное содержимое:
root@ws:~# mkdir /mnt/target
root@ws:~# mount /dev/ws/home /mnt/target
копируем туда всё из папки /home своим любимым файловым менеджером (с сохранением прав доступа), например так ;):
root@ws:~# cp -a /home/* /mnt/target/
root@ws:~# umount /mnt/target/
кстати, для папки temp необходимо только поправить права, копировать туда что-либо необязательно:
root@ws:~# mount /dev/ws/tmp /mnt/target && chmod -R a+rwx /mnt/target && umount /mnt/target/
добавляем нужные строчки в /etc/fstab, например такие:
/dev/mapper/ws-home /home ext4 relatime 0 2
/dev/mapper/ws-tmp /tmp ext2 noatime 0 2
/dev/mapper/ws-swap none swap sw 0 0
и перезагружаемся… (продвинутые господа могут обойтись без перезагрузки ;))

На вкусное, хочу предложить более продвинутую штуку:
допустим у нас есть система с разделом на LVM, а жёсткий диск начал сбоить, тогда мы можем без перезагрузки переместить всю систему на другой жёсткий диск/раздел:

# On-line добавление/удаление жёстких дисков с помощью LVM (пример)

root@ws:~# pvcreate /dev/sda1 # наш эмулятор сбойного диска
Physical volume "/dev/sda1" successfully created

root@ws:~# pvcreate /dev/sdb1 # наш эмулятор спасательного диска
Physical volume "/dev/sdb1" successfully created

root@ws:~# vgcreate vg0 /dev/sda1 # создаю группу томов vg0
Volume group «vg0» successfully created

root@ws:~# lvcreate -n test -L10G vg0 #создаю раздел для «важной» инфы
Logical volume «test» created

root@ws:~# mkfs.ext2 /dev/vg0/test # создаю файловую систему на разделе
root@ws:~# mount /dev/mapper/vg0-test /mnt/tmp/ #монтирую раздел
… # заполняю его информацией, открываю на нем несколько файлов и т.п.

root@ws:~# vgextend vg0 /dev/sdb1 # расширяю нашу групу томов на «спасательный» диск
Volume group «vg0» successfully extended

root@work:~# pvmove /dev/sda1 /dev/sdb1 #передвигаю содержимое с «умирающего» диска на «спасательный»
/dev/sda1: Moved: 0.9%
/dev/sda1: Moved: 1.8%

/dev/sda1: Moved: 99.7%
/dev/sda1: Moved: 100.0%

root@work:~# vgreduce vg0 /dev/sda1 # убираю «умирающий» диск из группы томов.
Removed "/dev/sda1" from volume group «vg0»

Итого:
Я создал логический раздел, отформатировал его, примонтировал и заполнил нужными данными, затем переместил его с одного устройства на другое, при этом раздел остался примонтирован и данные всё время оставались доступны!
Подобным образом мне удавалось без перезагрузки перенести всю систему с умирающего диска на рэид-массив. :)

А это моя любимая ссылка по LVM: xgu.ru/wiki/LVM

P.S. Ах, да!!! Самое главное и самый большой минус LVM — он не читается grub'ом
поэтому раздел /boot должен находиться вне LVM на отдельном разделе жёсткого диска,
иначе система не загрузится.

Взято с http://habrahabr.ru/blogs/linux/67283/