Mikrotik IP Cloud и Multiple WAN

Есть в Mikrotik такая замечательная штука как IP Cloud, которая позволяет обновлять А запись доменного имени в зависимости от выданного провайдеров внешнего адреса (Dynamic DNS). Как выяснилось в случае в двумя WAN она не работает нормально, не смотря на все мои ухищрения (PBR на основе порта на который отправляется UDP пакет). Точнее работает, но только есть делать force-update, что нам конечно же не подходит. Появилась идея скрипта, который будет проверять текущий cloudip и текущий ip на нужном wan интерфейсе, и при их различии запускать force-update. Получилось вот что:

:local wanint «ether1»
:local currentipmask [ /ip address get [/ip address find interface=$wanint ] address ]
:local cloudip [/ip cloud get public-address]
:local currentip [:pick $currentipmask 0 [:find $currentipmask «/»]]
:if ($currentip != $cloudip) do={
:log info («IP update need: old $cloudip, new $currentip»)
/ip cloud force-update
}

Добавляем скрипт в планировщик и радуемся.

PS. Конечно же нужна корректно настроенная маршрутизация до cloud.mikrotik.com либо PBR (UDP/15252).

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Обновление Raspberry Pi

Что мы имеем:

  • Raspberry Pi  с убитой системой Raspabian Jessie, не подлежащей восстановлению.
  • Флэшка со свежей Raspberry Pi Stretch + картридер.
  • Отсутствие монитора с HDMI входом.

Итак вставив флэшку со свежей системой, мы сталкиваемся с тем, что там по умолчанию отключен SSH. Изложу кратко решение.

  1. Загружаем изначальную поврежденную систему, втыкаем флэшку с новой системой в картридер, подключаем к raspberry.
  2. Монтируем её куда-нибудь.
  3. Делаем chroot в эту директорию.
  4. Включаем SSH, устанавливаем пароль пользователя pi.
  5. Вынимаем флэшку из картридера, втыкаем её в raspberry, и загружаемся с неё.
  6. Успешно заходим в SSH.
Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Почему важна команда

Всем привет. Да я тут решил что-то написать в свой блог.

Всю свою жизнь я проработал в различных командах в подразделениях компании МТС. Последние пару интересные задачи в регионах стали уменьшаться. Да и на многие технические решения в инфраструктуре я никак не мог повлиять. В итоге понял, что я начал деградировать, делая ежедневно то, что мне перестало нравиться и в конце февраля 2018 года я принял решение уйти из компании.

В итоге я устроился в компанию Cart-Power. Казалось бы вот то, что я искал. Я один, все инфраструктурные решения принимаю сам и никто на них не влияет. Если окажусь заложником технологий, то в этом буду виноват я сам. Но уже сейчас я могу точно сказать, что это была ошибка.

Я недооценил влияние команды на развитие каждого из её составляющих людей. Работая в одиночку ты на самом деле становишься заложником своих убеждений и твоё развитие очень замедляется. Ты что-то делаешь и считаешь, что всё делаешь правильно. А так ли это? Никто тебе не скажет: «Эй чувак, ты делаешь это не так!». Нет, ну правда, я об этом раньше как-то не думал.

Вот и сейчас проработав 4 месяца в компании Cart-Power я принял решение уйти. Вины компании на мой взгляд тут нет. Просто хочу, чтобы меня окружали профессионалы именно по моему профилю. Это очень сильно мотивирует и помогает в работе, ты начинаешь чётче видеть свои цели и идти по пути самореализации.

Спасибо компании Cart-Power, за интересные задачи и понимание моего решения.

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Опыт мониторинга SMART жёстких дисков при помощи Zabbix

Задача: мониторить критические параметры SMART жёстких дисков с автообнаружением самих дисков.

Системные требования: наличие sg модуля ядра Linux, интерпретатор python.

Для Debian: apt-get install sg3-utils python3

Сначала сам скрипт автообнаружения /etc/zabbix/scripts/sg_discovery.py:

#!/usr/bin/python3
import os
disks = os.popen("sg_map |awk '{print $1'}").read()
disks = disks.split('\n')
devtypes=('sat','scsi','ata')
k=0
print('{\n\t\"data\":[')
for i in disks:
        for j in devtypes:
                if (i and j):
                        line='smartctl -d {0} -a {1} > /dev/null'.format(j,i)
                        exit_code=os.system(line)
                        if not exit_code:
                                if k:
                                        print(',')
                                newline='\t\t{ "{#DEVNAME}":"%s", "{#DEVTYPE}":"%s" }'
                                print(newline %(i,j))
                                k=k+1
print("\n\t]\n}")

Теперь конфиг Zabbix агента /etc/zabbix/zabbix-agent.conf:

UserParameter=sg.discovery,sudo /etc/zabbix/scripts/sg_discovery.py
UserParameter=sg.get[*],sudo /usr/sbin/smartctl -a -d $1 $2 |grep $3 | awk ‘{ print $ 10; }’
UserParameter=sg.model[*],sudo /usr/sbin/smartctl -a -d $1 $2 |grep «Device Model» | awk ‘{ print $ 3; }’
UserParameter=sg.serial[*],sudo /usr/sbin/smartctl -a -d $1 $2 |grep «Serial Number» | awk ‘{ print $ 3; }’

И наконец шаблон для Zabbix:sg_stat

В sudoers должно быть:

zabbix ALL = NOPASSWD: /usr/sbin/smartctl
zabbix ALL = NOPASSWD: /etc/zabbix/scripts/sg_discovery.py

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Скрипт создания json объектов для zabbix

#!/bin/bash
# Formating discovering device list to JSON format for zabbix

echo -e «{\n\t\»data\»:[«
LN=0
while read -r -a attribute; do
if [[ $LN != 0 ]]; then
echo «,»
fi
echo -e «\t\t{ \»{#DEVNAME}\»:\»${attribute[0]}\», \»{#DEVTYPE}\»:\»${attribute[1]}\» }\c»
LN=1
done < /dev/stdin
echo -e «\n\t]\n}»

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Скрипт создания резервных копий mysql

#!/bin/bash
backuppath=»/mnt/backup/mysql»
username=»логин»
password=»пароль»
count=3
date=`date +%d%m%y`
dbs=`mysql -u $username -p$password -e ‘show databases;’ | grep -v information_schema | grep -v Database |grep -v mysql |grep -v performance_schema`

for i in $dbs ; do
cd $backuppath
mkdir -p $i
cd $backuppath/$i
mysqldump -u $username -p$password $i > $date.sql
gzip $date.sql && rm -f $date.sql
old=`ls -t $backuppath/$i`
x=1
for j in $old ; do
if [ $x -le $count ] ; then
((x++))
continue
fi
# echo $j
rm $backuppath/$i/$j
done
done

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Обновление серверов на Debian с помощью Ansible

Добрый день. Как очень просто обновить сразу много серверов на Debian? Конечно же используем систему управления конфигурациями. Например Ansible.

Пишем сценарий в файл debian-update.yml:

# debian-update.yml

— hosts: debian_upd
user: root

tasks:
— name: Update apt cache
apt: update_cache=yes
sudo: no

— name: Install latest updates
apt: upgrade=dist
sudo: no

Создаём файл hosts с хостами:

[debian_upd] localhost ansible_connection=local # локальный
192.168.0.1 ansible_connection=ssh # сервер 1
192.168.73.2 ansible_connection=ssh # сервер 2
192.168.1.10 ansible_connection=ssh # сервер 3

Создаём файл ansible.cfg:

[defaults] hostfile = hosts

Запускаем: ansible-playbook debian-update.yml.

PS Должна быть настроена аутентификация по ключу ssh под пользователем, который указан в сценарии debian-update.yml. Также можно использовать sudo (смотрим всё тот же сценарий).

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Почему Ваша Windows так долго ищет обновления?

А вот почему! Смотрим скрин ниже. В системе 12 ядер, на каждом ядре 2 потока. Идёт загрузка только одного ядра, то есть система простаивает.

PS Винда чистая, этот поиск обновлений-первый.

updates

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Погодная станция на Raspberry Pi

Доброго дня! Не буду подробно писать как мониторить температуру и давление окружающей среды на Raspberry Pi. Скажу лишь, что мы используем датчики DHT22, и BMP085. Также используется библиотеки pigpio и AdaFruit.

Данные можно посмотреть здесь: http://weather.ircclub.net. Данные хранятся на narodmon.ru.

Для тех, кто хочет подробные графики, можно воспользоваться нашим сервером мониторинга, зайти на него в качестве гостя: https://zbx.ircclub.net

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Первая запись

Доброго дня всем. Решил попробовать начать вести свой блог с нуля. Буду писать обо всех интересностях в работе и дома :)). Может опять заброшу. Но надеюсь всё будет хорошо!

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники