вторник, 27 ноября 2018 г.

Автоматизация процессов. Запуск и остановка в Linux клиента pCloud по расписанию через скрипты bash

Если Вы ещё не знаете про pCloud, то можете почитать эту публикацию.

pCloud для Linux предлагает приложение синхронизации для Linux в виде appimage (самую свежую версию можно взять здесь). Решение на первый взгляд простого вопроса автоматизации процесса "запуск клиента – синхронизация – выключение клиента" привело к необходимости решения нескольких задач, связанных с особенностями работы клиента pCloud. Решение приводится применительно к графическому окружению xfce.

В конечном счёте решение по автоматизации автоматизация процесса вылилось в запуск двух или трёх заданий по расписанию (см. пользовательское задание cron).

Запуск клиента pCloud

Для запуска клиента используется простой скрипт, например pcloud1.sh

#!/bin/bash
/путь_до_файла/pcloud

А команда пользовательского задания представляет из себя

export DISPLAY=:0 && /path/pcloud1.sh

path – путь до скрипта pcloud1.sh

Первоначальное добавление в pcloud1.sh строки exit (завершение pcloud1.sh) не привело к желаемому результату. В диспетчере задач наблюдалось 2 процесса:

pcloud1.sh
sh -c export DISPLAY=:0 && /path/pcloud1.sh

Чтобы pcloud1.sh "не висел" в менеджере задач был создан скрипт pcloud2.sh, запускаемые по расписанию через минуту после запуска pcloud1.sh  Скрипт представляет из себя "просьбу" завершить все имеющиеся процессы с наименованием pcloud1.sh

#!/bin/bash
killall -s TERM pcloud1.sh
sleep 1 && exit

Остановка клиента pCloud

Данный скрипт, с точки зрения его создания, явился наиболее трудоёмким, что объясняется двумя причинами.

Вопрос 1. Работа клиента стала сопровождаться несколькими процессами. Например, при запуске клиента и следующим за ним автоматическим открытием всех окон в диспетчере задач можно увидеть 6 процессов pcloud:


После закрытия основного окна клиента и экземпляра менеджера файлов, отображающего содержимое облака pCloudDrive в диспетчере задач останется 5 процессов pcloud:


Так как терминальной команды для завершения работы клиента не существует, то по аналогии с MEGA и Облако@Mail.Ru можно применить решение по "мягкому" завершению процесса pcloud по его значению pid, то есть командой kill -15 pid_pcloud

Но если запросить pid процесса pcloud, то в результате будет получено либо 6 групп цифр, соответствующих pid процессам pcloud (пример: 16129 16103 16077 16048 16036 16032), либо 5 групп (пример: 29419 29398 29352 29324 29320). Данные значения pid будут каждый раз меняться.

Количество процессов (5 или 6) зависит от того, открыты ли у Вас все окна, открываемые автоматически при запуске клиента, либо эти окна закрыты и активен только значок состояния на подставке рабочего стола (системной панели, трее).

Возникает закономерный вопрос: а какой именно процесс необходимо выключать?

Вопрос 2. При запуске клиента pCloud автоматически открываются 2 окна, одно из которых является окном клиента, а второе экземпляром файлового менеджера, соответствующего открытому каталогу pCloudDrive, содержание которого составляет контент смонтированного в него пространства облака учётной записи pCloud, например:



Если после выключения клиента pCloud окно клиента (верхний рисунок) изчезнет, то второе окно так и останется открытым. Содержимое второго окна будет пустым, так как в процессе завершения работы клиента облако pCloud было размонтировано.

Вопрос: и как его автоматически закрыть?

Примечание. Вопрос о закрытии открытого окна приложения pCloud не ставится, так как в xfce значок на панели (системном лотке, трее) отображает только состояние "синхронизировано" или "синхронизируется". Сведения о количестве загружаемых или скачиваемых файлов, а также скорости процесса отображаются в нижней части открытого окна приложения pCloud.

Отвечать на поставленные вопросы будем последовательно.

Ответ 1.  Экспериментально было установлено, что для выхода клиента pcloud необходимо выключать процесс pcloud с самым маленьким значением pid, что соответствует процессу pCloud Drive (см. диспетчер задач). Поэтому самой трудной задачей автоматизации будет являться выборка из полученных значений наименьшего pid, чтобы потом его назначить переменной.

Как оказалось, эту задачу можно решить, по крайней мере, четырьмя способами. Кроме того, "мягкое" выключение всех процессов pcloud можно осуществить командой killall c указанием имени процесса. Так как все решения, которых набирается 5, ведут к одному и тому же результату, то ниже следует их перечисление.

1 вариант:  killall -s TERM pcloud

Здесь всё понятно. Выдаётся команда на завершение всех процессов pcloud.

Следующие три способа представляют из себя ряд последовательных операций. Сначала производится получение значений pid всех экземпляров pcloud и их запись в файл (например pcloud.txt). Содержание файла представляет из себя последовательность из 5-ти или 6-ти групп цифр (см. пояснение выше). Далее "вылавливается" последняя группа (5 цифр) из полученного ряда значений pid и присваивается переменной (например VAR). Заключительное действие является выполнением команды kill -15 $VAR, что равносильно выполнению kill -15 с указанием наименьшего значения pid из файла pcloud.txt

2, 3, 4 варианты:

pidof pcloud> ~/pcloud.txt
VAR=`cat ~/pcloud.txt | grep -o [0-9]*$`
kill -15 $VAR

pidof pcloud> ~/pcloud.txt
VAR=`cat ~/pcloud.txt | awk '{print $NF}'`
kill -15 $VAR

pidof pcloud> ~/pcloud.txt
VAR=`cat ~/pcloud.txt | rev | cut -d' ' -f 1 | rev
kill -15 $VAR

Варианты 1–4 были предложены пользователи форума Linuxmint.com.ru с никами slant (2), Chocobo (3 и 4), demonlibra (1). Пользуясь случаем, хотелось бы ещё раз выразить им свою благодарность.

5 вариант

При получении списка pid процессов pcloud командой pgrep результат в файле pcloud.txt будет представлен "в столбик", то есть каждое значение pid будет располагаться в новой строке в порядке их возрастания, например:

29320
29324
29352
29398
29419

Следующим шагом будет являться присвоение переменной значения самой первой строки файла pcloud.txt

pgrep pcloud> ~/pcloud.txt
VAR=`sed -n '1p' ~/pcloud.txt`
kill -15 $VAR

Содержание файла pcloud.txt будет перезаписываться при каждом выполнении команды pidof pcloud> ~/pcloud.txt  Но если наличие этого "один раз нужного" файла слишком нервирует, то для его удаления можно добавить команду rm ~/pcloud.txt

Ответ 2.  Несмотря на кажущуюся простоту команды закрытия активного окна Thunar командой thunar -q (получена после выполнения в терминале thunar --help), в рассматриваемом случае она не срабатывает.

После рассмотрения дерева процессов обнаружено, что в перечне активных процессов имеется Thunar --daemon :


Закрыть открытое клиентом pCloud окно Thunar можно тремя способами:

а) завершить все активные процессы Thunar   killall -s TERM /usr/bin/Thunar ;

б) получить pid процесса Thunar, записать его в переменную и завершить его командой kill -15 значение_переменной

OUTPUT="$(pidof /usr/bin/thunar)"
kill -15 ${OUTPUT}

в) получить pid процесса Thunar, записать его в файл, присвоить переменной значение, полученное из чтения файла и завершить его командой kill -15 значение_переменной

pidof /usr/bin/Thunar> ~/thunar.txt
VAR2=`cat ~/thunar.txt`
kill -15 $VAR2

Содержание файла thunar.txt будет перезаписываться при каждом выполнении команды pidof /usr/bin/Thunar> ~/thunar.txt  Но если наличие этого "один раз нужного" файла слишком нервирует, то для его удаления можно добавить команду rm ~/thunar.txt

Все варианты равнозначны. Результатом их выполнения является завершение процессов thunar --daemon и Thunar (соответствует открытому окну с содержимым каталога pCloudDrive).

По вопросу "важности" процесса thunar --daemon на англоязычном форуме была найдена информация, что на функциональность Thunar и системы в целом это существенного влияния не оказывает. Единственный минус заключается в том, что без этого процесса подсоединённый съёмный носитель (например, флэшка) автоматически смонтирован будет только при открытом окне Thunar. Если никакого экземпляра Thunar не запущено, то съёмный носитель автоматически не монтируется. В этом случае придётся открыть Thunar и осуществить монтирование вручную, например:


В любом случае после очередного запуска системы thunar --daemon будет запущен автоматически


что определяется содержанием файла

/etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml  (см. --daemon)

<property name="Client2_PerScreen" type="bool" value="false"/>
      <property name="Client3_Command" type="array">
        <value type="string" value="Thunar"/>
        <value type="string" value="--daemon"/>
      </property>

Итого, скрипт завершения работы клиента pCloud (например pcloud3.sh) может быть следующего содержания (выбирается один вариант и один способ):

#!/bin/bash
вариант  1, 2, 3, 4, 5
sleep 5
способ   а, б, с
sleep 5 && exit

Команда 5-секундной паузы slеep 5 была введена в целях тестирования  скрипта для наблюдения за процессами. В рабочем скрипте её можно не использовать.


Пример пользовательского задания cron для ежедневной 40-минутной автоматической синхронизации с облаком pCloud с 21:40 до 22:20

40 21 * * * export DISPLAY=:0 && /home/user/Tools/scripts/pcloud1.sh
41 21 * * * /home/user/Tools/scripts/pcloud2.sh
20 22 * * * /home/user/Tools/scripts/pcloud3.sh

Если ограничиться только скриптами запуска и выключения, то есть pcloud1.sh и pcloud3.sh, то скрипт pcloud3.sh должен выключать pcloud c процессом pid не наименьшим, а на единицу больше, то есть из полученного ряда значений, например,

28354 28355 28359 28371 28399 28426 28449 28684 ,

должно быть выбрано второе (28355). Объясняется тем, то 28354 соответствует активному скрипту pcloud1.sh.

Соответственно, в этом случае для выключения процессов pcloud будет использоваться такой код:

pgrep pcloud> ~/pcloud.txt
VAR=`sed -n '2p' ~/pcloud.txt`
kill -15 $VAR

Тогда пользовательское задание приобретает вид, например:

40 21 * * * export DISPLAY=:0 && /home/user/Tools/scripts/pcloud1.sh
20 22 * * * /home/user/Tools/scripts/pcloud3.sh

воскресенье, 25 ноября 2018 г.

Про попытки обновления прошивки MikroTik RB931-2nD

В качестве преамбулы (вступления) отмечу, что уже больше трёх лет в домашних условиях как шлюз для доступа в Интернет мной используется маршрутизатор MikroTik 951-2n. Причём причиной для его использования стала необходимость контролировать из дома работу установленного в компании ПО 1С8, которое по закону "подлости" имело свойство "зависать" в утренние часы.

Ряд работников компании имели привычку приходить на работу на час раньше начала рабочего времени и затем при невозможности полноценной работы с 1С8 периодически выставлять претензии.

Поэтому после настройки на MikroTik возможности подключения к локальной сети компании по протоколу L2tp IpSec появилась возможность перезапуска "зависшего" сервера до появления на рабочем месте категории работников "ранняя пташка".

Работа MikroTik всегда получала от меня наивысшую оценку. Если также своевременно обновлять и его прошивку (установленную версию ПО), то за безопасность своей домашней локальной сети можно быть абсолютно спокойным (в случае, конечно, грамотной настройки сетевого экрана маршрутизатора).


Использующийся дома MikroTik RB951-2n

В этом году на мероприятии MikroTik MUM участникам был выдан подарочный MikroTik RB931-2nD, представляющий из себя устройство класса hAP mini.



Подарочный MikroTik RB931-2nD

После его включения с целью проверки и перенастройки для использования нужд домашней сети было обнаружено, что установленная версия 6.40.4 является устаревшей и было принято решение её обновить до актуальной на тот момент версии 6.42.7

Так как чётко оформленных намерений по применению RB931-2nD пока не имелось, то он был снова упакован в коробку. После обновления прошивки RB951-2n до актуальной 6.43.4 было решено обновить и прошивку RB931-2nD.


На роутере для загрузки пакета не хватает свободного места

Но не тут то было. При попытке загрузки новой версии ПО через меню Winbox "System – Packages – Check For Updates" появилось сообщение, что на устройстве недостаточно свободного места. И действительно, при сравнении устройств было установлено, что для RB951-2n Storage size составляет 64 Mб а для RB931-2nD – 16 Мб. При этом на RB931-2nD требовалось примерно 10,1 Мб, а в наличии было только 7,6-7,9 Мб свободного дискового пространства. Попытки очистки всех файлов Log не принесли желаемого результата.

Но свой запрос в Support MikroTik о возможности осуществления обновления прошивки данной модели был получен ответ, что данную операцию можно осуществить через netinstall.

Не буду описывать данную операцию, так как информации по данному вопросу достаточно и при желании её можно без проблем найти (пример). Отмечу только, что netinstall возможно осуществить только на узле с проводным соединением (то есть должна быть и сетевая карта, а не только WiFi). Провод от сетевой карты необходимо соединять с интерфейсом ether1 микротика, а адреса сетевой карты узла и Client IP микротика устанавливать из сети 192.168.88.0 с маской 255.255.255.0  Также следует обратить внимание на то, что для RB931-2nD нужен пакет npk под именем routeros-smips, который берётся из второй секции загрузок ПО MikroTik.


Ещё одно замечание связано к кнопкой Reset, которую по инструкции необходимо зажимать. Кнопки у RB931-2nD выполнены в виде выступающих клавиш на днище устройства. Для того чтобы рассмотреть надписи на них пришлось взять лупу. Нужная кнопка расположена ближе к широкой части корпуса. Рядом с ней находится какое-то прямоугольное отверстие, назначение которого мне выяснить не удалось. Вторая кнопка, которая расположена ближе к узкой части корпуса, имеет надпись MODE.


Сюрприз

После обновления прошивки и последующей перезагрузке устройства подключение в нему установить не удалось. Перепрошивка была повторена 5 раз! Пока не посетила "светлая" мысль попробовать соединиться по MAC-адресу.

Вот после этого и было выяснено, что мой MikroTik – самый чистый MikroTik в мире. Ни одного активного интерфейса, ни одной активной службы ... вообще ничего. Пришлось все настройки прописывать ручками. Потом "хорошая мысля пришла апасля", что, наверное, нужно было в настройках netinstall поставить галочку в поле "Keep old Configuration".


Обновление через помещённый на MikroTik пакет

Как эксперимент прошивка была обновлена до версии 6.42.10 (Long-term). При просмотре свойств пакета routeros-smips-6.42.10.npk установлено, что он имеет размер в 7,5 Мб. Самая свежая версия routeros-smips-6.43.4.npk – 7,6 Мб.

Так как всё равно "издевательства" над устройством уже имели место, то было принято решение попробовать обновить прошивку через помещение на MikroTik в Files пакета routeros-smips-6.43.4.npk и дать устройству команду Reboot.

Шут его знает, может и помогло сэкономить какое-то место, но был деактивирован ряд возможностей ПО:



Так как доступ по Winbox осуществлялся из вышестоящего MikroTik, то в правила firewall была внесена возможность доступа по Winbox и ftp из вышестоящей домашней сети:





192.168.237.128/29 – сеть RB931-2nD ;

192.168.224.80/28 – сеть RB951-2n (вышестоящий).

Пакет routeros-smips-6.43.4.npk был успешно загружен через ftp:


После перезагрузки видно, что новая версия ПО успешно установлена:


И в качестве завершающего шага можно ещё и обновить Firmware (обратиться в Winbox к System – Routerboard). После обновления прошивки в Upgrade Firmware будет значение версии установленной прошивки.


Для обновления Firmware нажать на кнопку "Upgrade":


После перезагруки MikroTik версия ПО и версия Firmware будут совпадать.


Чтобы не делать лишних "телодвижений" при очередном обновлении ПО можно установить галочку для обновления Firmware автоматически.


После всех произведенных операций доступные ресурсы RB931-2nD составили:


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

Product code RB931-2nD
10/100 Ethernet ports 3
Antenna gain 1.5
CPU QCA9533
CPU core count 1
CPU nominal frequency 650 MHz
Dimensions 48 x 78 x 81mm
License level 4
Max Power consumption 3.5W
Number of chains 2
Operating System RouterOS
Power Jack 1
Size of RAM 32 MB
Storage size 16 MB
Storage type FLASH
Supported input voltage 5 V - 5 V
Wireless chip model QCA9533
Wireless standards 802.11b/g/n

Кстати говоря, в последующем обновление прошивки стандартным способом (через System – Packages) происходило без проблем. На момент правки данной заметки последняя установленная прошивка на RB931-2nD – 6.43.8

пятница, 23 ноября 2018 г.

Linux Mint и Ubuntu: клиент hubiC не соединяется с облаком

Последняя версия клиента Linux (1.2.4) датирована 1 ноября 2017 года. После его установки в систему при попытке соединения с облаком командой

hubic login e-mail /home/user/folder

где e-mail – это адрес электронной почты (логин), а /home/user/folder – полный путь к каталогу hubiC для синхронизации (user – домашний каталог пользователя).

в терминале отображается сообщение о невозможности входа

[Error] Timeout
Command failed: System.InvalidOperationException: Cannot log in.

При просмотре протокола работы приложения ~/.config/hubiC/application.log имеется сообщение о сетевой ошибке:

at System.Threading.Tasks.TaskFactory`1[TResult].FromAsyncCoreLogic (IAsyncResult iar, System.Func`2 endFunction, System.Action`1 endAction, System.Threading.Tasks.Task`1 promise, Boolean requiresSynchronization) <0x7f2ab548e4f0 + 0x00088> in <filename unknown>:0
[WARN | 23.11.2018 12:40:36 | Ovh.Hubic.Sync.Model.OnLogin] Can't connect: Ovh.Hubic.Interface.Exceptions.NetworkError: Timeout
  at Ovh.Hubic.Backend.HttpWebRequestWrapper.GetResponse () <0x40308670 + 0x00677> in <filename unknown>:0
  at Ovh.Hubic.Backend.ReplayableHttpRequest.GetResponse () <0x403797d0 + 0x00042> in <filename unknown>:0

"Лечение" найдено на одном из франкоязычных форумов и заключается в установке дополнительного пакета  sudo apt install ca-certificates-mono

После многих строчек, пробежавших в терминале,


можно узнать, что установлено 148 новых корневых сертификатов.

После данного действия вход в свою учётную запись успешно осуществляется и  данные начинают синхронизироваться.

hubiC 2018

После некоторого периода "затишья" при попытке создания ещё одной учётной записи облачного хранилища hubiC на странице регистрации обнаружено, что создание новых учётных записей прекращено. Как говорится на странице регистрации,

The hubiC service is now closed to new subscriptions.

In 2011, an experimental ‘Lab’ on storage technologies was met with a rapid and unexpected degree of success, so we developed this solution further and offered a more sophisticated version of it for sale...


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

В настоящее время  в облаке hubiC пользователи осуществляют хранение более 100 ПБ данных, что эквивалентно 25 млрд. файлов формата mp3 или 300 млн. часов видео.

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

hubiC не полагается только на свои технологии хранения. Существует ряд других аспектов, которые необходимо обновлять и отслеживать.

Вследствие этого, hubiC далее будет развивать только коммерческие решения. Несмотря на это, обслуживание существующих бесплатных учётных записей продолжается.

четверг, 22 ноября 2018 г.

Thunar: команда "выполнить скрипт" в контекстном меню


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

Выберите "Правка – Особые действия":


В следующем разделе настроек нажмите "Добавить":


В поле "Имя" укажите наименование пункта, которое будет отображаться в меню, а в поле "Команда" впишите sh %f :


В условиях полявления укажите файлы *.sh :


Теперь при выделении файла с расширением sh в правом контекстном меню отобразится указанное наименование команды:


вторник, 20 ноября 2018 г.

Расширение Thunar для облака MEGA

В менеджере пакетов Synaptic нашлось полезное дополнение, расширяющее возможности работы файлового менеджера Thunar с облаком MEGA. Пакет дополнения называется thunar-megasync.

Почему-то для 64-битной Linux Mint 18.3 данный пакет найден только i386, в то время как в Linux Mint 19 данный пакет, похоже, 64-битный.


Пакет для Linux Mint 18.3


Пакет для Linux Mint 19

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


Загрузить 1 каталог


Загрузить 1 файл


Загрузить 3 каталога


Загрузить 3 файла

После активизации данного пункта правого контекстного меню Thunar будет вызвано окно загрузки. По умолчанию выбранный контент будет загружаться в папку MEGAsync Uploads облака MEGA.


Если такой папки на Вашем облаке MEGA не существует, то она будет создана автоматически. Однако загрузка именно в эту папку не является обязательной. Папку загрузки можно изменить и даже переназначить на другую папку по умолчанию. Для этого нажмите на красный логотип MEGA (на рисунке выше справа) и укажите другую папку Вашего облака MEGA.


Процесс помещения выбранного контента на облако MEGA можно наблюдать по состоянию значка клиента синхронизации (отображение чёрного кружочка).


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


После выключения клиента синхронизации соответствующие пункты в правом контекстном меню Thunar отображаться не будут.

понедельник, 19 ноября 2018 г.

Цитаты в терминале


Приведенное публикуется после ознакомления с публикацией "Добавить афоризмы в терминал Linux (Это интересно)".

Действительно, получилось интересно:


Ниже приводится список цитат, отображённых у меня за последнее время:

ЧЕТВЕРТЫЙ ЗАКОН ПРОВЕРКИ
 Как бы кропотливо и тщательно вы ни готовили выборку, вам всегда могут
 сказать, что она неправильна и неприменима к данной проблеме.

Принятие нужных мер, всегда обходится дешевле, чем принятие решительных.
-- Евгений Кащеев

Три минуты удовольствия не стоят трёх часов хорошего разговора.
-- Р. Дэйнджерфилд

Нет ни в чем Вам благодати,
Со счастием у Вас разлад:
И прекрасны Вы некстати,
И умны Вы невпопад.
-- А.С.Пушкин

Не порицайте женщину. Ибо цель мужчины истина, а цель женщины довольство собой.

Если Вам понравилось, то выполните в терминале

sudo apt install -y fortune-mod fortunes-ru && xed ~/.bashrc (Linux Mint)

sudo apt install -y fortune-mod fortunes-ru && gedit ~/.bashrc (Ubuntu)

В результате у Вас будет установлено соответствующее ПО и откроется текстовый редактор с содержимым файла ~/.bashrc, в который необходимо дописать строку fortune:


Сохраните изменение в файле  ~/.bashrc

Соответственно, для удаления выполните в терминале

sudo apt purge -y fortune-mod fortunes-ru && xed ~/.bashrc (Linux Mint)

sudo apt purge -y fortune-mod fortunes-ru && gedit ~/.bashrc (Ubuntu)

В открывшемся текстовом редакторе удалите строку fortune (см. выше) и сохраните файл.

Отображаемые цитаты расположены в файлах без расширения в каталоге /usr/share/games/fortunes/ru (можно, например, открыть отмеченный файл amur)


Выбирая из этих файлов понравившееся можно составить свой цитатник для использования в переписке по E-mail или общении.