четверг, 3 мая 2018 г.

Минималистичная проверка tcp порта

Частенько приходится проверять доступность того или иного ресурса в сети. Как правило достаточно убедиться что его имя резолвится в ip адрес и получается подключиться на порт. Если на хосте не установлено нету netcat, socat, nmap или telnet, то выручить может bash

$ host ya.ru
ya.ru has address 87.250.250.242
ya.ru has IPv6 address 2a02:6b8::2:242
ya.ru mail is handled by 10 mx.yandex.ru.

$ bash -c 'cat < /dev/null > /dev/tcp/ya.ru/80'

Если bash завершился без ошибок, то порт доступен.

понедельник, 2 апреля 2018 г.

Увеличение размера диска VirtualBox содержащего снапшоты

Столкнулся с нехваткой свободного места на диске при установке довольно объемного справочника на семи DVD дисках в виртуальную машину VirtualBox. Изначальный размер единственного диска виртуальной машины был 40G и я понадеялся на то, что будет устанавливаться только часть данных относящихся к русскому языку. Вместо этого я столкнулся с нехваткой свободного места на предпоследнем диске.

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

$ cd ~/vbox/win7
$ VBoxManage modifyhd win7.vdi --resize 80000
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
$ VBoxManage modifyhd Snapshots/\{7bab8995-fe72-4805-8863-8833068098b3\}.vdi --resize 80000
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
$ VBoxManage modifyhd Snapshots/\{c3250adc-b14d-433c-86d9-37987ca2a246\}.vdi --resize 80000
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

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

Чтобы проверить что подобное увеличение диска и снапшотов ничего не сломало пробую удалить последний снапшот.

$ VBoxManage snapshot win7 delete 37c59b83-2eac-4af8-98fc-c207bf1a4168
0%...
Progress state: NS_ERROR_OUT_OF_MEMORY
VBoxManage: error: Snapshot operation failed
VBoxManage: error: Unable to merge storage '/home/andrey/vbox/win7/win7.vdi'. Not enough free storage space
VBoxManage: error: Details: code NS_ERROR_OUT_OF_MEMORY (0x8007000e), component SessionMachine, interface IMachine
VBoxManage: error: Context: "RTEXITCODE handleSnapshot(HandlerArg*)" at line 533 of file VBoxManageSnapshot.cpp

Ошибка из-за нехватки свободного места на локальном диске. Очистить диск быстро не получится и я перекинул виртуальную машину на сервер и смонтировал директорию через gvfs:

$ gvfs-mount -a //server/share
$ mv ~/vbox/win7{,~}
$ ln -s /run/user/1000/gvfs/smb-share:server=server,share=share/tmp/win7 ~/vbox/win7
$ cd ~/vbox/win7
$ VBoxManage snapshot win7 delete 37c59b83-2eac-4af8-98fc-c207bf1a4168
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...
Progress state: VBOX_E_FILE_ERROR
VBoxManage: error: Snapshot operation failed
VBoxManage: error: Could not merge the medium '/home/andrey/vbox/win7/Snapshots/{7bab8995-fe72-4805-8863-8833068098b3}.vdi' to '/home/andrey/vbox/win7/Snapshots/{c3250adc-b14d-433c-86d9-37987ca2a246}.vdi'.
VBoxManage: error: VD: error VERR_NET_OPERATION_NOT_SUPPORTED opening image file '/home/andrey/vbox/win7/Snapshots/{c3250adc-b14d-433c-86d9-37987ca2a246}.vdi' (VERR_NET_OPERATION_NOT_SUPPORTED)
VBoxManage: error: Details: code VBOX_E_FILE_ERROR (0x80bb0004), component MediumWrap, interface IMedium
VBoxManage: error: Context: "RTEXITCODE handleSnapshot(HandlerArg*)" at line 533 of file VBoxManageSnapshot.cpp

Тут написано, что проблема в несовместимости VirtualBox и gvfs/libsmbclient. Перемонтировал раздел через mount:

$ gvfs-mount -u smb://server/share
$ rm ~/vbox/win7
$ sudo mount -t cifs //server/share /mnt/tmp -o guest,uid=1000,gid=1000
$ ln -s /mnt/tmp/tmp/win7 ~/vbox/win7
$ VBoxManage snapshot win7 delete b6a1fbf4-b4ba-41da-8ce2-bcd861b4b67b
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

Остается вернуть файлы виртуальной машины на локальный диск.

среда, 28 марта 2018 г.

Закрывается Digg Reader

Сегодня пришло письмо о том, что закрывается Digg Reader, которым я стал пользоваться после закрытия Google Reader.
Какое-то время назад я перешел на использования News в составе Nextcloud и эта новость воспринимается не так болезненно как в случае с Google Reader.

воскресенье, 11 февраля 2018 г.

XScreenSaver 5.38

Использую Xfce4 и xscreensaver в качестве блокировщика экрана. Настройки питания и энергосбережения через xfce-power-manager. С одной стороны это позволяет иметь различные настройки энергосбережения экрана в зависимости от источника питания (батарея или сеть), а с другой не возиться с настройкой heartbeat'а (xscreensaver-command -deactivate) в различных программах.

Моя проблема заключается в настройке dpmsEnabled в xscreensaver - если она выключена, то xscreensaver полностью отключает поддержку DPMS, а не прекращает управлять ее настройками.

Чтобы отучить xscreensaver трогать настройки DPMS я собираю отдельный пакет с опцией --without-dpms-ext и патчем, который чинит эту опцию

--- a/driver/prefs.h
+++ b/driver/prefs.h
@@ -27,11 +27,13 @@
 extern char *format_hack (Display *, screenhack *, Bool wrap_p);
 char *make_hack_name (Display *, const char *shell_command);

+#ifdef HAVE_DPMS_EXT
 /* From dpms.c */
 extern void sync_server_dpms_settings (Display *, Bool enabled_p,
                                        Bool dpms_quickoff_p,
                                        int standby_secs, int suspend_secs,
                                        int off_secs,
                                        Bool verbose_p);
+#endif

 #endif /* __XSCREENSAVER_PREFS_H__ */

И набор изменений относительно 5.36 из Debian Sid

diff -urNp xscreensaver-5.36/debian/patches/30_hacks_xanalogtv.patch xscreensaver-5.38/debian/patches/30_hacks_xanalogtv.patch
--- xscreensaver-5.36/debian/patches/30_hacks_xanalogtv.patch 2018-02-11 20:19:38.000000000 +0300
+++ xscreensaver-5.38/debian/patches/30_hacks_xanalogtv.patch 2018-02-11 15:11:49.333414388 +0300
@@ -2,10 +2,10 @@
 # logo-50-bad.xpm is a stripped down (64 colors) version
 # Fix for bug #304344
 #
-Index: xscreensaver-5.04/hacks/xanalogtv.c
+Index: xscreensaver-5.38/hacks/xanalogtv.c
 ===================================================================
---- xscreensaver-5.04.orig/hacks/xanalogtv.c 2006-03-31 09:21:41.000000000 +0200
-+++ xscreensaver-5.04/hacks/xanalogtv.c 2007-12-08 17:47:00.000000000 +0100
+--- xscreensaver-5.38.orig/hacks/xanalogtv.c    2018-02-11 15:07:01.202559754 +0300
++++ xscreensaver-5.38/hacks/xanalogtv.c 2018-02-11 15:08:23.705607677 +0300
 @@ -42,7 +42,7 @@
  #include "xpm-pixmap.h"
  #include "analogtv.h"
@@ -15,12 +15,12 @@ Index: xscreensaver-5.04/hacks/xanalogtv
  
  /* #define DEBUG 1 */
  /* #define USE_TEST_PATTERNS */
-@@ -170,7 +170,7 @@
-   ypos += st->ugly_font.char_h*5/2;
+@@ -172,7 +172,7 @@ update_smpte_colorbars(analogtv_input *i
  
-   analogtv_draw_xpm(st->tv, input,
--                    logo_50_xpm, xpos - 100, ypos);
-+                    logo_50_bad_xpm, xpos - 100, ypos);
+   if (! st->colorbars_only_p)
+     analogtv_draw_xpm(st->tv, input,
+-                      logo_50_xpm, xpos - 100, ypos);
++                      logo_50_bad_xpm, xpos - 100, ypos);
  
    ypos += 58;
  
diff -urNp xscreensaver-5.36/debian/xscreensaver.install.stub xscreensaver-5.38/debian/xscreensaver.install.stub
--- xscreensaver-5.36/debian/xscreensaver.install.stub 2018-02-11 20:19:38.000000000 +0300
+++ xscreensaver-5.38/debian/xscreensaver.install.stub 2018-02-11 16:08:35.060847317 +0300
@@ -2,7 +2,6 @@ usr/bin/xscreensaver
 usr/bin/xscreensaver-command
 usr/bin/xscreensaver-demo
 usr/share/applications/xscreensaver-properties.desktop
-usr/share/locale/ca/LC_MESSAGES/xscreensaver.mo
 usr/share/locale/da/LC_MESSAGES/xscreensaver.mo
 usr/share/locale/de/LC_MESSAGES/xscreensaver.mo
 usr/share/locale/es/LC_MESSAGES/xscreensaver.mo
@@ -25,7 +24,6 @@ usr/share/locale/vi/LC_MESSAGES/xscreens
 usr/share/locale/wa/LC_MESSAGES/xscreensaver.mo
 usr/share/locale/zh_CN/LC_MESSAGES/xscreensaver.mo
 usr/share/locale/zh_TW/LC_MESSAGES/xscreensaver.mo
-usr/share/locale/nb/LC_MESSAGES/xscreensaver.mo
 usr/share/man/man1/xscreensaver.1
 usr/share/man/man1/xscreensaver-command.1
 usr/share/man/man1/xscreensaver-demo.1

Забрать пакеты xscreensaver 5.38 для Debian Stretch (amd64) можно в моем репозитарии.

вторник, 6 февраля 2018 г.

Просмотр изображений с расширением HEIC в Linux

Столкнулся с проблемой просмотра фотографий с расширением HEIC. Это новый формат HEIF (High Efficiency Image Format) от Apple, которым они решили заменить JPEG. Перебрал несколько вариантов (display, eog, gimp), но ни одна из программ не знает про этот формат.

Поиск в интернете вывел на tifig. С помощью этой утилиты получилось сконвертировать фотографии в JPEG.

$ find /path/to/photos -type f -iname '*.heic' -exec ~/tmp/tifig -i '{}' -o '{}.JPG' \;
$ rename 's/.HEIC.JPG/.JPG/' *.HEIC.JPG

К слову разница в размере не в пользу JPEG:

$ ls -l IMG_0513.*
-rw-r--r-- 1 andrey andrey 1360434 Feb  6 13:11 IMG_0513.HEIC
-rw-r--r-- 1 andrey andrey 2077232 Feb  6 13:26 IMG_0513.JPG

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

суббота, 13 января 2018 г.

Прошивка ESPEasy для ESP8266

Открыл для себя прошивку ESPEasy от Let's Control It для ESP8266. ESPEasy собирается с разным набором модулей и доступна для различных объемов flash памяти. Я буду заливать прошивку в ESP-12S, который купил ранее и мне нужно узнать какой объем flash памяти установлен на моих чипах.

$ ./esptool.py --port /dev/ttyUSB0 --baud 115200 flash_id
Connecting...
Manufacturer: ef
Device: 4016

Согласно информации проекта CoreBoot в модуле установлен чип Winbond W25Q32, содержащий 4MB памяти.

Если проверить модули ESP-01, с которых я начинал знакомство с ESP8266, то выдает следуещее:

$ ./esptool.py --port /dev/ttyUSB0 --baud 115200 flash_id
Connecting...
Manufacturer: c8
Device: 4013

Если верить CoreBoot, то должна быть установлена GigaDevice GD25Q40, и в подтверждение тому на плате стоит GD25Q41BT, имеющая объем flash памяти 4Mb или 512kB.

Скачать прошивку с GitHub можно здесь. Я брал ESP_Easy_v2.0-20180113_test_ESP8266_4096.bin чтобы была поддержка датчика углекислого газа MH-Z19.

Для заливки прошивки можно использовать esptool из Arduino или esptool.py. Я использую первый из них.

$ ~/.arduino15/packages/esp8266/tools/esptool/0.4.8/esptool -vv -cd nodemcu -cb 115200 -cp /dev/ttyUSB0 -ca 0x00000 -cf ~/tmp/ESP_Easy_v2.0-20180113_test_ESP8266_4096.bin
esptool v0.4.8 - (c) 2014 Ch. Klippel
 setting board to nodemcu
 setting baudrate from 115200 to 115200
 setting port from /dev/ttyUSB0 to /dev/ttyUSB0
 setting address from 0x00000000 to 0x00000000
 espcomm_upload_file
 espcomm_upload_mem
opening port /dev/ttyUSB0 at 115200
 tcgetattr
 tcsetattr
 serial open
opening bootloader
resetting board
trying to connect
 setting character timeout 0
 done
 setting character timeout 1
 done
 espcomm_send_command: sending command header
 espcomm_send_command: sending command payload
trying to connect
 setting character timeout 0
 done
 setting character timeout 1
 done
 espcomm_send_command: sending command header
 espcomm_send_command: sending command payload
 espcomm_send_command: receiving 2 bytes of data
 espcomm_send_command: receiving 2 bytes of data
 espcomm_send_command: receiving 2 bytes of data
 espcomm_send_command: receiving 2 bytes of data
 espcomm_send_command: receiving 2 bytes of data
 espcomm_send_command: receiving 2 bytes of data
 espcomm_send_command: receiving 2 bytes of data
 espcomm_send_command: receiving 2 bytes of data
Uploading 566528 bytes from to flash at 0x00000000
 erasing flash
 size: 08a500 address: 000000
 first_sector_index: 0
 total_sector_count: 139
 head_sector_count: 16
 adjusted_sector_count: 123
 erase_size: 07b000
 espcomm_send_command: sending command header
 espcomm_send_command: sending command payload
 setting timeout 15000
 setting character timeout 150
 done
 setting timeout 1
 setting character timeout 1
 done
 espcomm_send_command: receiving 2 bytes of data
 writing flash
..................................................
starting app without reboot
 espcomm_send_command: sending command header
 espcomm_send_command: sending command payload
 espcomm_send_command: receiving 2 bytes of data
closing bootloader

После сброса в сети появится новая точка доступа с именем "ESP_Easy_0" (пароль "configesp"). При подключении к ней телефон определил captivate portal в котором предлагается настроить подключение к WiFi.

К одному из модулей у меня подключены BME280 и MH-Z19, а ко второму SI7021. Оба датчика показывают очень близкие значения температуры и влажности, когда находятся рядом, но BME280 примерно в два раза дороже.

К обоим модулям подключены OLED экраны разрешением 128x64 на базе контроллера SSD1306. Данные передаются по MQTT в Mosquitto из которого Munin забирает их для построения графиков. В дальнейшем хочу перейти на что-то вроде MajorDomo, OpenHAD или Domoticz.


Для защиты от выгорания экран включается на 15 секунд по нажатию на кнопку flash (подключена к gpio-0).


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

Основная информация по работе прошивки.


Настройки прошивки: название юнита, настройки WiFi, статическая конфигурация сети (если нужно).


Настройки контроллеров. Я использую MQTT брокер Mosquitto.


Настройки выходов при загрузке.


Конфигурация подключенных датчиков. На этом модуле сконфигурирован экран SSD1306, BME280 и MH-Z19.


Нотификации я не использую, т.к. для этого у меня есть Nagios и Munin.


Раздел с инструментами. Из интересного /log и /json. Оба можно использовать для мониторинга устройства.


Прошивка выглядит очень интересной. Надеюсь проблем со стабильностью ее работы также не возникнет.

воскресенье, 19 ноября 2017 г.

Стоит разбить экран и смартфон становится бесполезных хламом

Недавно LG Nexus 5 неудачно спланировал с высоты примерно 1.5 метров на пол. Результат разбитый сенсор и экран, показывающий ворох цветных линий.


Ремонтировать такой телефон экономически невыгодно - за неоригинальный экран в Минске просят 60-70 рублей (примерно 35$). А еще его нужно заменить, не угробив телефон окончательно. Б/у Nexus 5 стоит 150-200 рублей в зависимости от состояния. В общем имеет смысл скопировать информацию, очистить телефон и продать на запчасти.

Подключаю телефон к компу, но файлов не вижу - по-умолчанию включен режим заряда от USB. Изменить это поведение можно в настройках разработчика, но сначала нужно попасть в эти настройки.

Подключил мышку через USB-OTG переходник и экспериментальным путем нашел точку на экране, нажатие на которую дает небольшую область слева, где с трудом, но можно прочесть текст. Вращая телефон между альбомной и портретной ориентациями "нащупал" нужную опцию и сбросил файлы.

Данные с телефона стер через веб-версию Play Market, использую функцию поиска телефона.

Я пробовал установить софт проде AirDroid для управления телефоном с компьютера, но не смог запустить этот софт удаленно. Включить ADB тоже оказалось непросто, т.к. при попытке использования выскакивает запрос в центре экрана, а эту область увидеть не получилось.

Есть возможность подключить телефон к телевизору или монитору через HDMI, но у меня нет такого переходника:


Теперь остался вопрос - что взять на замену. Скорее всего буду брать еще один Xiaomi Mi4c и прошивать его на LineageOS 14.1.