пятница, 14 сентября 2018 г.

Расширение размера диска на Ubuntu

Так получилось, что нарезали мне 100GB виртуалку не пустую, а из древнего шаблона, в котором изначально размер диска был 27GB. Вывод команды df -h был следующий:

Filesystem                1K-blocks     Used Available Use% Mounted on
udev                        1003072        0   1003072   0% /dev
tmpfs                        204812    13604    191208   7% /run
/dev/mapper/US16--vg-root  28269296 19417032   7502520  73% /
tmpfs                       1024052        0   1024052   0% /dev/shm
tmpfs                          5120        0      5120   0% /run/lock
tmpfs                       1024052        0   1024052   0% /sys/fs/cgroup
/dev/sda1                    482922   111019    346969  25% /boot
tmpfs                        204812        0    204812   0% /run/user/0


И вывод lvdisplay:

  --- Logical volume ---
  LV Path                /dev/US16-vg/root
  LV Name                root
  VG Name                US16-vg
  LV UUID                af1M0G-A0zc-fcGN-JsyM-ETuc-DOTW-YhH771
  LV Write Access        read/write
  LV Creation host, time US16, 2016-08-02 10:06:50 +0300
  LV Status              available
  # open                 1
  LV Size                <27,52 GiB
  Current LE             7044
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

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

 echo 1 > /sys/block/sda/device/rescan


дальше выполняем команду:

parted
p
(затем команду p)

Вывод: parted  (p)

GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type      File system  Flags
 1      1049kB  512MB   511MB   primary   ext2         boot
 2      513MB   21,5GB  21,0GB  extended
 5      513MB   21,5GB  21,0GB  logical                lvm

Необходимо увеличить размер видимый ОС (21,5GB) до реального (107GB)
надо запомнить всё выделено зеленым и вставлять как параметры при выполнеии следующих команд:

Видно что существует extended партиция и в ней размещен логический диск
Сначала увеличим размер  extended партиции где 2 и 5 номера разделов, а 107G из отмеченных зеленым параметров, полученных ранее:

parted
(parted)  resizepart 2
End?  [21,5GB]? 107GB

(parted)  resizepart 5
End?  [21,5GB]? 107GB
(parted) quit

Затем выполняем (только для logical диска):

 pvresize  /dev/sda5

Вывод:  Physical volume "/dev/sda5" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized

Запустим на этом этапе:

 df -h

Вывод: 
Filesystem                 Size  Used Avail Use% Mounted on
udev                       980M     0  980M   0% /dev
tmpfs                      201M   16M  185M   8% /run
/dev/mapper/US16--vg-root   27G   19G  7,1G  73% /
tmpfs                     1001M     0 1001M   0% /dev/shm
tmpfs                      5,0M     0  5,0M   0% /run/lock
tmpfs                     1001M     0 1001M   0% /sys/fs/cgroup
/dev/sda1                  472M  109M  339M  25% /boot
tmpfs                      201M     0  201M   0% /run/user/0

Запусти команду ("/dev/mapper/US16--vg-root"  берем из  отмеченного зеленым, ранее):

 lvextend -r -l +100%FREE /dev/mapper/US16--vg-root

Вывод команды: 
  Size of logical volume US16-vg/root changed from <27,52 GiB (7044 extents) to <107,17 GiB (27435 extents).
  Logical volume US16-vg/root successfully resized.
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/mapper/US16--vg-root is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 7
The filesystem on /dev/mapper/US16--vg-root is now 28093440 (4k) blocks long.

Запустим снова:

 df -h
Filesystem                 Size  Used Avail Use% Mounted on
udev                       980M     0  980M   0% /dev
tmpfs                      201M   16M  185M   8% /run
/dev/mapper/US16--vg-root  106G   19G   83G  19% /
tmpfs                     1001M     0 1001M   0% /dev/shm
tmpfs                      5,0M     0  5,0M   0% /run/lock
tmpfs                     1001M     0 1001M   0% /sys/fs/cgroup
/dev/sda1                  472M  109M  339M  25% /boot
tmpfs                      201M     0  201M   0% /run/user/0

ОС увидела дополнительное место.
Перед началом каких-либо действий с дисковым пространством обязательно надо сделать snapshot виртуальной машины.







Установка Zabbix на Ubuntu

Появилась необходимость развернуть новый Zabbix под отдельный сектор мониторинга.
Т.к. прежний zabbix ставил давно и уже не помню тонкостей, решил оформить пост об актуальном процессе инсталляции.
Решаемые задачи:
1) Обновление ОС.
2) Установка необходимых компонентов ПО (mysql, apache, snmp, traceroute, nmap и т.д.)
3) Конфигурирование  mysql
4) Конфигурирование  apache
5) Конфигурирование  zabbix (zabbix.conf, глобальная автоинвентаризация, )
6) Составление списка хостов для мониторинга (nmap)
7) Настройка профилей автообнаружения (autodiscovery)
8) Настройка и запуск автообнаружения.

1.
Обновляем ubuntu по предыдущему сообщению. Дополнительно пропишем в файле
/etc/hosts названия хоста на которой будем ставить zabbix (в моем случае hostname машины был "zabbix")

127.0.0.1 zabbix
"your lan ip" zabbix

2.
Ставим утилиты snmp:

apt-get install snmp snmp-mibs-downloader

В файле /etc/snmp/snmp.conf
комментируем секцию "mibs :" (добавляем перед ней "#"):

# mibs :

запускаем скачивание mibs

sudo download-mibs
-------------------
Так получилось, что дистрибутив zabbix оказался с включенным в него mysql, я решил ставить в расчете, что mysql будет полностью изначально подготовлен для связки с zabbix (но это не так). Поэтому можно ставить mysql как обычно, если в zabbix не включает mysql:

sudo apt install mysql-server mysql-client

ввести пароль пользователя mysql "root", если спросит при инсталляции, или поставить его позже.
----------------
Если apache не стоит, то ставим (у меня уже стоял)

sudo apt install apache2
-------------------
Качаем дистрибутив zabbix:

wget https://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+bionic_all.deb

dpkg -i zabbix-release_3.4-1+bionic_all.deb

apt update

apt install zabbix-server-mysql zabbix-frontend-php zabbix-agent
----------------
ставим остальные утилиты:

apg-get install traceroute

(если ругается, то можно добавлять  ключ --fix-missing при любой инсталляции пакетов)

apt install inetutils-traceroute --fix-missing
apt install nmap

3.
Конфигурирование Mysql. Необходимо создать БД для zabbix и наделить пользователя zabbix необходимыми правами:

если при инсталляции mysql не был задан пароль для root, то установим его сначала:
зайдем  клиентом mysql:
mysql -u root -p
получим приглашение:
mysql>

use mysql;
update user set authentication_string=PASSWORD("root-pass") where User='root';

создадим БД для zabbix:

create database zabbix character set utf8 collate utf8_bin;

дадим права:

grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix-pass';
quit;

Установим структуру таблиц для БД zabbix (я расcчитывал, что они там уже будут, если я устанавливал zabbix в одном дистрибутиве с mysql, но это было не так):

cd /usr/share/doc/zabbix-server-mysql/
gzip -d create.sql.gz
mysql -u zabbix -p zabbix < create.sql

-----------------
4.
Конфигурирование Apache:
надо раcкоментарить и установить правильную date.timezone в файле /etc/zabbix/apache.conf:
<IfModule mod_php5.c>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
php_value date.timezone Europe/Moscow
</IfModule>
<IfModule mod_php7.c>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
php_value date.timezone Europe/Moscow
</IfModule>

5.
Конфигурирование zabbix. По умолчанию zabbix имеет минимальные настройки для своей работы, поэтому их надо сразу увеличивать, чтобы он быстро определял новые узлы и не ругался на отсутствие ресурсов. В файле /etc/zabbix/zabbix_server.conf увеличить до ~:

StartPollers=50
StartPreprocessors=64
StartPollersUnreachable=10
StartDiscoverers=64
CacheSize=128M
HistoryCacheSize=64M
HistoryIndexCacheSize=16M
TrendCacheSize=16M
ValueCacheSize=32M

Затем надо все компоненты перестартовать и зайти через веб интерфейс http://"your lan ip"/zabbix
логин: Admin (c заглавной буквы!)
пароль: zabbix
далее откроется "мастер" который запросит имя БД, пользователя БД и его пароль.
после чего zabbix начнет работать.

6.
Составим список хостов. (Хоть zabbix и имеет функционал поиска хостов по маске сети, но работает очень медленно, даже если интервал автообнаружения выставлен минимальный, 10-20 сек.). Опытным путем выяснилось, что он быстро находит хосты если они ему подаются в виде списка конкретных IP адресов. Поэтому этот список составим отдельной процедурой, используя NMAP (мне нужны были устройства Cisco):

nmap 192.168.0-255.1-254 -A -O -sU -p U:161 -oG - | grep -i cisco | awk '/161\/open/{print $2","}'

будет ответ типа:
192.168.1.1,
192.168.2.1,
и т.д. , запятые нужны чтобы их не вставлять самому, т.к. заббиксу они нужны.

7.
Настройка профилей автообнаружения
а) В глобальных настройках: Administaration>General>Other
указать: Default host inventory mode - Automatic
(это нужно, что бы обнаруженные хосты вносили свои инвентарные данные (название узла, версия софта, шасси и т.д.) в таблицу сразу, иначе в каждый хост
придется заходить и править эту опцию).


б) Создадим профили автообнаружения:
для начала создадим "host group", это нужно чтобы увидеть его на главном дашборде.
Сonfiguration> host groups> create host group
назовем его "Discovered hosts"
Затем создадим шаблон: configuration> host groups> create template
Назовем его: "1-auto-discover"
в нем укажем, что он принадлежит хост группе "Discovered hosts"
в  "linked templates" выбрать "Template Net Cisco IOS SNMPv2" (в нем все для Cisco, что мне нужно),
затем в "Macros" добавить {$SNMP_COMMUNITY} , если community  отличается от "public".

Теперь настроим правило автообнаружения:
Сonfiguration>Discovery>Create riscovery rule
назовем его "routers"
"Update interval" укажем 20
в поле "Check" добавим snmp v2 agent и укажем community
в OID  укажем "SNMPv2-MIB::sysDescr.0",
создадим и второй "Check" с OID  "SNMPv2-MIB::sysName.0"
в "IP range" вставляем наш список полученный NMAP, с запятыми (после последнего ip адреса ставить ничего не надо)
ОБЯЗАТЕЛЬНО убираем галочку "Enable".

Создадим будущее действие с обнаруженными хостами (поэтому и не включали ещё правило обнаружение):
Сonfiguration>Actions>Create action
Назовем его: "Auto discovery routers move to 1-auto-discover"
Type of calculation - AND
Conditions  -
A) discovery rule routers
B) Discovery status = Up
C) Service type = SNMPv2 agent

переходим  в секцию "Operations"
Operations:
Add to host groups: Discovered hosts
Link to templates: auto-1-cisco
Добавляем-сохраняем, проверяем что  галочка Еnable на данном Action "Auto discovery routers move to 1-auto-discover" установлена.
затем переходим снова на Сonfiguration>Discovery> Разрешаем наше правило обнаружения "routers"
переходим на дашборд и ожидаем появления обнаруженных хостов в группе "Discovered hosts"


четверг, 6 сентября 2018 г.

обновление bind в ubuntu

Обновление версий конкретного пакета в линуксах, и убунту в часности, приводит к необходимости полного апдейта всей операционной системы, т.к. зависимости нового пакета часто касаются и системных библиотек. В устаревшей системе, как правило репозитории тоже устарели и новых версий пакетов в них нет. В Убунту у каждого релиза есть кодовое имя, а сервера с дистрибутивами одни и те же. Т.о. первым делом надо обновить файл:
 /etc/apt/sources.list
(обновлять надо последовательно, от версии к версии, если Убунта не говорит прямо что можно перескакивать через несколько версий , проверить можно  здесь:
https://help.ubuntu.com/community/UpgradeNotes
т.е. сценарий перехода с 15.04 к 18.04 будет следующим: 15.04 -> 16.04 -> 18.04)

закоментарить старые записи и внести новые, взять их можно здесь (для 18.04):
https://gist.github.com/jackw1111/d31140946901fab417131ff4d9ae92e3
или по аналогии поиском.
Затем убедиться что репо подхватились командой:
apt-get update
затем:
apt-get upgrade -f bind9  --fix-missing
(опцию fix-missing добавляем , если вдруг не захочет ставиться)
затем:
do-release-upgrade (если понадобится)

проверить релиз можно командой:
lsb_release -r

проверить версию bind можно:
apt-cache policy bind9

Замечание, в избежании неожиданностей, при предложении заменить конфигурационные файлы, лучше отказаться, чтобы они не обнулились. Если с ними возникнут проблемы, при перезапуске bind9 надо заглянуть в логи на предмет возможных ошибок.

Затем надо перезагрузиться с консоли и удостовериться что всё загрузилось и работает штатно.