IT science

трудовые будни

создание виртуальной машины в synology

А вы знали, что на synology можно создать полноценную виртуальную машину? Можно делать снапшоты по расписанию и это все бесплатно! В платных функциях все гораздо круче, возможность создания кластера, с балансировкой нагрузки и т. д.

Вот пример создания виртуальной машины, поставим windows 10 на synology

ставим пакет Virtual Machine Manager и запускаем его

переходим в «Виртуальные машины» и жмем кнопку «Создать»

в нашем случае выбираем Microsoft Windows

Хранилище — наше хранилище

основные настройки: название виртуальной машины, сколько ядер процессора выделим, сколько оперативной памяти

какого объема диск будем использовать, можно задать сразу много, т. к. диск только в процессе наполнения начнет занимать свободное место, а так почти ничего не весит.

Если нажать на шестерню, то откроются дополнительные настройки, если для вас совсем уж критично свободное пространство, то можно поставить галочку «Реорганизация пространства», тогда при освобождении пространства на виртуальном машине, диск будет «сжиматься».

настройки сети, учтите, что вы можете создать свою изолированную сеть для виртуальных машин, ты и укажете ее, а пока прямой проброс наружу

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

основные настройки виртуальной машины, указываем файл с образом системы для инсталляции (iso), обязательно после установки системы поставьте Guest tools, чтобы не возникало проблем с драйверами, автозапуск — виртуальная машина будет автоматически запускаться после старта сервера synology, остальное в нашем случае оставляем по умолчанию, добавлю лишь USB, чтобы была возможность пробрасывать в виртуалку USB донглы, воткнутые в synology.

далее настройка безопасности и старт виртуальной машины

нажимаем кнопку «Подключиться» и у нас открывается отдельная вкладка в браузере с vnc клиентом, через который мы можем управлять виртуальной машиной.

Все! На все ушло не более 5 минут.

поднимаем свой сервер traccar и настраиваем GPS трекер для работы с ним

Был куплен у китайцев такой трекер:

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

Сразу оговорюсь, содержать свой сервер для одного устройства получится дороже (в моем случае $5 и безграничное количество устройств), чем платить за чужой (от 80 руб. за устройство).

Поискав готовые решения, я наткнулся на проект https://www.traccar.org, проект открытый, есть исходники на github https://github.com/traccar/traccar

для начала я проверил работоспособность прибора, для этого написал короткий скрипт на php, по сути, это сокет сервер, который слушает порт 999 и выводит в консоль всю информацию, которая приходит

<?php
set_time_limit (0);
$address = '127.0.0.1';
$port = 999;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($sock, 0, $port) or die('Could not bind to address');
socket_listen($sock);
while (true) {
    $client =  socket_accept($sock);
    $input =  socket_read($client, 1024000);
    echo "$input\n";
    socket_close($client);
}
socket_close($sock);
?>

через NAT на роутере открыл порт наружу

дальше приступаем к настройкам трекера (брал с этого сайта http://miradmin.ru/gps-tracker-sinotrack-st-901/), далее транслирую то что использовал сам (команды отправляются смс сообщениями)

  1. Регистрируем номер телефона, с которого будем управлять устройством
    899977777770000 1
    89997777777 — номер телефона
    0000 — пароль (по умолчанию четыре ноля)
    1 — номер ячейки (можно зарегистрировать до 3 телефонов)
  2. Меняем пароль, конечно же
    77712340000
    777 — команда
    1234 — новый пароль
    0000 — старый пароль
  3. Меняем часовой пояс
    8960000E03
    896 — команда
    0000  — пароль
    E03 — часовой пояс Москвы
  4. Выбираем режим передачи данных (SMS или GPRS)
    7100000
    710 — команда для GPRS
    0000  — пароль
  5. Настройка точки доступа для GPRS
    Мегафон: 8030000 internet gdata gdata
    МТС: 8030000 internet.mts.ru mts mts
    Билайн: 8030000 internet.beeline.ru beeline beeline
    ТЕЛЕ2: 8030000 internet.tele2.ru
    0000  — пароль
  6. Задаем интервалы отправки сообщений на сервер при включенном зажигании и в режиме оффлайн
    800000 5
    каждые пять секунд при включенном зажигании
    8090000 300
    каждые пять минут при выключенном
    0000  — пароль
  7. Настройка спящего режима
    SLEEP0000 5
    после выключения зажигания через пять минут устройство «заснет», перестанет присылать сообщения на сервер, но будет реагировать на смс и звонки
    0000  — пароль
  8. Настройка сервера данных
    8040000 123.123.123.123 999
    123.123.123.123 — ip адрес сервера
    999 — порт сервера
    0000  — пароль

после указанных настроек я стал получать сообщения с трекера:

*HQ,9170631826,V1,105509,A,5576.7575,N,03761.0545,E,000.13,000,210919,FBFF9FFF,250,99,27914,55187#
*HQ,9170631826,V1,105509,A,5576.7578,N,03761.0548,E,000.13,000,210919,FBFF9FFF,250,99,27914,55187#
*HQ,9170631826,V1,105554,A,5576.7577,N,03761.0548,E,000.23,000,210919,FBFFBBFF,250,99,27914,55187#
*HQ,9170631826,V1,105624,A,5576.7575,N,03761.0549,E,001.05,000,210919,FBF7BBFF,250,99,27914,31740#

отлично! осталось создать сервер и транслировать данные туда

для начала я выбрал площадку для размещения виртуального сервера, делал на DigitalOcean
если хотите помочь нам и получить $25 на счет, воспользуйтесь реферальной ссылкой https://m.do.co/c/74f25c68fa79

используйте самый дешевый Droplet за $5 в месяц с ubuntu на борту

дальше в сжатой форме будут только команды для установки недостающих компонент и настройки конфигураций

$ apt-get update
$ apt-get upgrade
$ apt-get install mc

ставим java

$ apt-get install default-jdk

ставим mysql

$ apt-get install mysql-server mysql-client

далее запускаем mysql, настраиваем пароль пользователя root и создаем базу с пользователем для работы traccar

не забудьте указать свои
root_password — пароль root
user_password — пароль пользователя traccar_user

$ mysql -u root -p

USE mysql;
UPDATE USER SET authentication_string=PASSWORD(«root_password») WHERE USER=’root’;
FLUSH PRIVILEGES;

CREATE DATABASE traccar DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER ’traccar_user’@’localhost’ IDENTIFIED BY ’user_password’;
GRANT ALL ON traccar.* TO ’traccar_user’@’localhost’;
FLUSH PRIVILEGES;
EXIT;

качаем и устанавливаем сервер

$ cd /tmp

на момент написания статьи была актуальная версия 4.6, посмотреть версию можно тут https://github.com/traccar/traccar/releases/

$ wget https://github.com/traccar/traccar/releases/download/v4.6/traccar-linux-64-4.6.zip
$ unzip traccar-linux-64-4.6.zip

$ ./traccar.run
$ cd /opt/traccar/conf

настраиваем конфиг, приводим к виду ниже, не забудьте заменить user_password на тот, который указывали выше

$ mcedit traccar.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE properties SYSTEM 'http://java.sun.com/dtd/properties.dtd'>
<properties>
    <entry key='config.default'>./conf/default.xml</entry>
    <entry key='database.driver'>com.mysql.jdbc.Driver</entry>
    <entry key='database.url'>jdbc:mysql://localhost:3306/traccar?useSSL=false&amp;allowMultiQueries=true&amp;autoReconnect=true&amp;useUnicode=yes&amp;characterEncoding=UTF-8&amp;sessionVariables=sql_mode=''</entry>
    <entry key='database.user'>traccar_user</entry>
    <entry key='database.password'>user_password</entry>
</properties>

запускаем службу

$ service traccar start

смотрим запустился ли сервис

$ service traccar status

если все хорошо, получаем следующий вывод

● traccar.service - traccar
   Loaded: loaded (/etc/systemd/system/traccar.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-09-24 07:44:48 UTC; 1 day 3h ago
 Main PID: 8519 (java)
    Tasks: 30 (limit: 1152)
   CGroup: /system.slice/traccar.service
           └─8519 /opt/traccar/jre/bin/java -jar tracker-server.jar conf/traccar.xml

теперь можно подключиться непосредственно к web интерфейсу
http://ip_адрес_droplet:8082

по-умолчанию вводим:
Email: admin
Пароль: admin

не забудьте настроить наше устройство для передачи данных на сервер, для этого отправьте СМС
8040000 123.123.123.123 5013
123.123.123.123 — ip адрес нашего Droplet
5013 — порт сервера
0000  — пароль трекера

Важно! Трекер Sinotrack ST-901 использует протокол H02? соответственно указываем порт 5013!!!

В web интерфейсе добавляем устройство (левый верхний угол)

Имя: имя нашей машинки
Идентификатор: номер трекера (ID под штрих кодом)

через некоторое время машина появится на карте

Все! Для работы этого более чем достаточно!

Дальше пойдет дополнительная информация (необязательные опции)

  1. Для начала создал нового пользователя, чтобы не подключаться все время как admin
  2. Изменил единицы измерения скорости (в узлах скорость не очень)
    зашел Аккаунт — Атрибуты — добавить
  • Имя: Единица скорости
  • Значение: км/ч
  1. Сервер — Слой карты указал «Яндекс Карты», работают быстрее и стабильнее

Важная для меня опция — это ssl подключение к web интерфейсу, не хочется чтобы мой трафик мог видеть или менять оператор связи. Для этого вам понадобится доменное имя, и доступ к настройкам DNS, подтверждённый ssl сертификат не получится выпустить на ip адрес.

Для начала, создаем в DNS запись A, где для нашего домена (например, car.domain.ru) ассоциируем ip адрес нашего Droplet.

настраиваем nginx в режиме reverse proxy и подключаем Let’s Encrypt

$ apt-get install nginx
$ cd /etc/nginx
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/cert.key -out /etc/nginx/cert.crt

приводим конфиг к следующему виду, не забудьте заменить в четырех местах car.domain.ru на ваш домен

$ mcedit /etc/nginx/sites-enabled/default

server {
    listen 80;
    server_name car.domain.ru;
    return 301 https://$host$request_uri;
}

server {
    listen 443;
    server_name car.domain.ru;
    ssl_certificate           /etc/nginx/cert.crt;
    ssl_certificate_key       /etc/nginx/cert.key;
    ssl on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;
    access_log            /var/log/nginx/car.domain.ru.access.log;
    client_max_body_size 10M;
    client_body_buffer_size 128k;

    location / {
      proxy_set_header        Host $host;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";

      proxy_pass          http://localhost:8082;
      proxy_read_timeout  90;

      proxy_redirect      http://localhost:8082 https://car.domain.ru;
      proxy_redirect ws://localhost:8082/api/socket /api/socket;
      proxy_send_timeout 86400s;
    }
}

Важно сделать именно так, в web интерфейсе используется WebSocket, который тоже надо правильно транслировать через прокси.

$ service nginx restart

Теперь вы можете открывать в браузере вашу карту по имени https://car.domain.ru и весь трафик к серверу и обратно будет шифроваться.

И самая малость, сделаем красиво, добавим подтвержденный сертификат. Нам поможет certbot (https://certbot.eff.org).

$ apt-get install software-properties-common
$ add-apt-repository universe
$ add-apt-repository ppa:certbot/certbot
$ apt-get update

$ apt-get install certbot python-certbot-nginx
$ certbot —nginx

далее будет предложено указать e-mail, выбрать найденные домены из конфигурации и сделать редирект http на https автоматически.

проверим автоматический выпуск сертификата:

$ certbot renew —dry-run

не забудьте добавить задание в crontab для автоматического перевыпуска сертификатов.

$ crontab -e

Например, каждого первого числа месяца, в 3 часа 12 минут будет попытка перевыпустить сертификат.
Добавьте строчку в конце (не забудьте, что в crontab нужно оставлять последнюю пустую строку).

12 3 1 * * /usr/bin/certbot renew

 Нет комментариев    147   1 мес   GPS   Sinotrack   ST-901   traccar

проверяем запущена ли служба в windows и если надо — запускаем

Ну, что же... бывают случаи, когда какая нибудь важная служба (сервис, service) тормознула, с разработчиком связи нет, а сам продукт является «черным ящиком». На выручку нам приходит очередной «костыльный» метод. Задача: в кроне шедулере сделать проверку, жива ли служба и если померла — стартануть.

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

Но, учтите, писать надо именно display name (выводимое имя).

net start | find /i %1 
if errorlevel==1 net start %1

удаляем дубликаты с помощью fdupes

Накопилось за несколько лет море фотографий, и столкнулся я с тем, что некоторые фотографии продублированы. Думал, телефон несколько раз выгрузил их на сервер, но оказалось их немало, да в разных папках и это неприятный факт, т. к. руками перелопатить миллионы фотографий — нереально... а сравнивать по содержимому процесс очень ресурсоемкий. Порывшись на просторах, нашел интересную утилитку fdupes, написал ее Андриан Лопес (Adrian Lopez), за что ему огромное спасибо. Программа сравнивает размер файла и MD5 хэш, и после сравнения начинает сверку по-байтно.

fdupes /home/user/photos

ищет дубликаты в указанном каталоге

-r — рекурсивный поиск

fdupes -r /home/user/photos > duplicate_list.txt

сохранит в файле список дубликатов

а, дальше с помощью awk отфильтруем дублирующиеся файлы для дальнейшего удаления

awk 'BEGIN{d=0} NF==0{d=0} NF>0{if(d)print;d=1}' duplicate_list.txt > delete_list.txt

а затем удаляем по списку

rm `cat delete_list.txt`

или так

xargs rm < delete_list.txt
 Нет комментариев    43   3 мес   fdupes   linux

find и суммарный объем данных

объем этих файлов, как это сделать?
Задача нетривиальная, нашлось два решения (их может быть и больше)

первое, используем du:

find параметры_поиска -exec du -b {} + | awk ’{sum = sum+$1 }; END { print sum }’

пример:

find /volume1/photo/ -maxdepth 1 -type f -exec du -b {} + | awk ’{sum = sum+$1 }; END { print sum }’

второе, используем ls:

find параметры_поиска -ls | awk ’{sum = sum+$7 }; END { print sum }’

пример:

find /volume1/photo/ -maxdepth 1 -type f -ls | awk ’{sum = sum+$7 }; END { print sum }’

 Нет комментариев    26   3 мес   find   linux
Ранее Ctrl + ↓