Category: Linux

26
Сен
2021

Как уменьшить таймаут SSL_accept?

Ошибка такая. У меня приложение на ssl шифровании. Я решил попробовать и посмотреть что будет, если подключиться с помощью обычного nc. Результат не понравился. nc намертво вешает SSL_accept и все. Пробовал уменьшить таймаут ssl, но не пом…

26
Сен
2021

Как уменьшить таймаут SSL_accept?

Ошибка такая. У меня приложение на ssl шифровании. Я решил попробовать и посмотреть что будет, если подключиться с помощью обычного nc. Результат не понравился. nc намертво вешает SSL_accept и все. Пробовал уменьшить таймаут ssl, но не пом…

26
Сен
2021

Как уменьшить таймаут SSL_accept?

Ошибка такая. У меня приложение на ssl шифровании. Я решил попробовать и посмотреть что будет, если подключиться с помощью обычного nc. Результат не понравился. nc намертво вешает SSL_accept и все. Пробовал уменьшить таймаут ssl, но не пом…

22
Сен
2021

Подскажите пожалуйста библиотеку для чтения и запись в оперативную память на Python

Если какая нибудь библиотека на Python что бы можно было прочитать значение по адрессу в памяти и записать туда новое значение ? Просто работал с C++ на windows там это встроенные функции, не нашёл решения как читать память с помощью C++ н…

21
Сен
2021

Как правильно разворачивать spring boot приложения на windows и на linux

Понимаю, что можно просто выполнить команду java -jar *, но вряд ли это самый правильный вариант(в windows при действии в консоли приложение стопорится, а в линуксе при подключении через ssh приложение будет активно пока активна сессия).
К…

09
Сен
2021

Linux AHCI-драйвер с модифицированными операциями ввода/вывода

Я хочу изменить в существующем примере AHCI-драйвера из репозитория Linux операции ввода/вывода и установить этот драйвер на определенный SATA-диск. В частности я хочу изменить операции ввода/вывода так, чтобы части данных читались и запис…

09
Сен
2021

Отвалился доступ к файлам на сервере линукс

По каким-то причинам пропал доступ к файлам на русском языке в подмонтированной директории по протоколу SMB, причем 404 статус у файлов только с кодировкой KOI8-R,
/static/quality_cert/Ess%20Betain%2002%200220.jpg
Такой урл прекрасно наход…

08
Сен
2021

баш поиск картинки на imdb

есть такое приложение, https://aur.archlinux.org/packages/imdb-thumbnailer/, делает эскизы к видеофайлам по их имени, подставляя соответствующую картинку(постер) с imdb.com, я его немного подредактировал и оно исправно работало с файловым …

08
Сен
2021

баш поиск картинки на imdb

есть такое приложение, https://aur.archlinux.org/packages/imdb-thumbnailer/, делает эскизы к видеофайлам по их имени, подставляя соответствующую картинку(постер) с imdb.com, я его немного подредактировал и оно исправно работало с файловым …

07
Сен
2021

Разница между Hardware MTU и IP MTU?

Встретил недавно ссылку на хабре, об HW MTU и IP MTU. Частично вроде все понятное, но целой картины я не могу увидеть.

Зачем нам вообще HW MTU, единственное в чем вижу смысл так это что он не будет пропускать с тегами в L2?

В Linux, как …

02
Сен
2021

По каким причинам может отваливаться примонтированная директория?

Есть директория, которая монтируется к серверу, по каким-то причинам она отваливается на чтение, хотя если я физический зайду на сервер, то я вижу и папку и файлы. Чтобы снова появился доступ на чтение необходимо только перемонтировать дир…

31
Авг
2021

В чем уязвимость access в С/C++?

Я находил похожий вопрос на stackoverflow, но я так и не понимаю в чем смысл подмены ?
Вот мы хотим проверить что файл доступен для чтения и если доступен -> открыть. Отлично, мы проверили, файл доступен -> открыли. Другая ситуация: …

30
Авг
2021

Выделение user space памяти из Linux Kernel

Всем привет. Можно ли выделить область памяти пользовательского пространства и вернуть указатель на него из модуля ядра Linux? Я знаю, что пользовательские процессы используют виртуальную память и виртуальное адресное пространство, для выд…

19
Авг
2021

Как искать, отличать, перемещать, "измерять" файлы JPEG в директориях Linux используя C

Требуется организовать следующий алгоритм (C, linux):

Пройти по всем подпапкам директории, найти все JPG файлы (они переименованы, на расширение в названии посмотреть нельзя) и переместить те из них, что имеют самую часто встречающуюся ши…

19
Авг
2021

Демон не отображает требуемый контент, не смотря на статус active

Я написал простой Python скрипт, который обращается к Gmail API раз в несколько секунд и выводит сообщение в уведомление, если оно ранее не было получено.
import the required libraries
from googleapiclient.discovery import build
from googl…

16
Авг
2021

🐧 Терминал для тестировщика: консольные команды Unix/Linux, которые нужно знать наизусть

С тобой сложно, но без тебя невозможно. Посвящается текстовой консоли, работе в командной строке и причинам, по которым эту премудрость стоит освоить начинающему инженеру по Quality Assurance.

Первые шаги: 40 основных команд

Мое знакомство с терминалом началось немного раньше чем путь в тестирование. Скорее всего с установки системы на спор, а потом как-то прижился Linux, и сейчас винда вызывает некоторое подвисание.

Толчок в развитии дала статья «40 основных команд» и книга Скотта Гараннемана «Linux/ Необходимый код и команды. Карманный справочник» (в магазинах доступно ее 2-е издание).


Нагугилшь команду, а перейти в нужную папку забудешь. Или перепутаешь направление dd (команда поблочного переноса данных) и все, здравствуй вечер переустановки системы и потеря данных. Справочники – это хорошо, но основы работы в командной строке Unix/Linux нужно знать наизусть.

У меня получился примерно такой список необходимых внутренних команд оболочки Bourne shell (командные процессоры sh, bash и т.д.) и внешних утилит. Вызываются они одинаково:

  • Навигация по каталогам и файлам: cd, ls, pwd.
  • Работа с файлами и каталогами: rm, mv, cp, mkdir, cat, more, grep, sort, touch, tail, head, less, find.
  • Повышение привилегий: su, sudo.
  • Управление правами: chmod, chown, chgrp.
  • Текстовые редакторы: vi, vim, nano.
  • Архивация и разархивирование: tar, unzip, zip.
  • Установка программ: apt, yum.
  • Информация о командах: man, опция -h (–help).
  • История ранее выполняемых команд: history.
  • Работа с сетью: curl, ping, nslookup, netstat, wget, telnet, ifconfig, ip, ss.
  • Информация о системе и процессах: top, du, df, ps.
  • Управление процессами: kill.

Конечно команд больше, но эти мне пригодились мне в самом начале пути. Расскажу подробнее о самых необходимых.

Совершенствуем чтение логов

Первое, для чего тестировщик откроет терминал и начнет в нем работать – это логи (от англ. logs – файлы журналов, обычно текстовые). Потому что об аргумент «у меня все работает» разбиваются все доводы и с таким трудом найденные шаги воспроизведения. Можно достать файл целиком с помощью WinSCP и приложить его к багу, но не факт, что его откроют (и хорошо еще, если правильно настроено порционирование логов и файл весит не так уж и много).

Начать можно с простого. Команда tail показывает окончание файла (аналогично команда head читает данные с начала), а если добавить ключ -n, то можно увидеть заданное количество строк:

        tail -n 300 console.log
    

С ключом -f команда будет показывать дозапись в файл в реальном времени:

        tail -f console.log
    

Команда tail помогает, если ошибка произошла только что и ее найти в последних строках, или она воспроизводится прямо сейчас. Если нужно просмотреть весь журнал и найти определенные события (строки по шаблону), можно воспользоваться командой grep:

        grep -i ‘error’ console.log
# где i - регистронезависимый поиск

    

В данном случае будут найдены все строки в которых есть строка ‘error’ без зависимости от регистра. У команды гораздо больше возможностей, чем я показала. Про grep можно писать отдельную статью. Вот вариант поиска классов, логи которых включены на уровне DEBUG и сортировка их с помощью утилиты sort (один из примеров, который понадобился в реальной работе):

        grep DEBUG console-main.log | grep -oP '[a-z\.]+\.[A-Z][a-zA-Z0-9]*' | sort | uniq -c
    

Третий способ чтения логов – команда less. Работа в ней схожа с работой в редакторе vim, но с возможностью только чтения и поиска по файлу:

        less console.log # откроет файл на просмотр.

# Для навигации можно и нужно пользоваться клавишами:
#	Shift+g - для перемещения в конец файла
#	Shift+f - для перехода в режим чтения дозаписи файла
#	/ + “text” - для поиска значения вниз от курсора
#	? + “text” - для поиска значений вверх от курсора
#	Q - выход

    

Для чтения логов можно пользоваться любым их этих трех способов, но самый удобный – less. Он упрощает работу с большими файлами журналов и отслеживание ошибки, например, по одному треду.

Спасаем показ: подключаемся к базе данных

Рано или поздно в жизни тестировщика наступает сдача проекта. Бессонные ночи, правки на прод за час до релиза, написание ПМИ и постоянный перетест. И вот уже почти конец, остался показ.

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

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

        psql -h localhost -U <user>
#	где psql - утилита для работы с бд постгрес
#	     h - хост подключения к бд
#	     U - пользователь для подключения к бд

    

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

Ошибка не на нашей стороне: связанность, курлы и интеграции

Тестирование интеграций – одна из самых интересных в сфере Quality Assurance. Поиск возможных ошибок всегда усложняется тем, что не понятно, на чьей они стороне, есть ли связанность и на тот ли тестовый стенд настроено каждое приложение.

Прежде чем перейти к собственно тестированию, я провожу проверку связности.

Начнем с проверки сетевой доступности сервиса, с которым вы интегрируетесь (действия производятся с машины, на которой поднят интегрирующийся сервис):

        ping <host>
    

Пинг проходит, значит на той стороне как минимум поднят стенд (противоположный результат ни о чем не говорит, поскольку пакеты ICMP может резать сетевой экран – прим. ред.). Теперь нужно проверить, открыты ли нужные порты:

        telnet <ip> <port>
# Например:
telnet checkip.dyndns.org 80

    

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

        
curl <host>| jq # jq для структурированного просмотра ответа, если используется формат json

    

Например:

        curl 'https://proglib.io/api/paging/live'| jq
    

Ответ 200, значит можно приступать к тестированию. Минимальные условия для проверки выполнены.

Перезагрузка приложений и изменение настроек

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

В проектах настройки лежат в файлах application.properties (конфигурация приложения может описываться в самых разных файлах и даже с использованием языков разметки – прим.ред.). Чтобы найти их и открыть файл, воспользоваться командой locate:

        locate application.properties
    
Команда locate проводит поиск в специальной базе данных (не стоит путать ее с сервером SQL), которая периодически обновляется через планировщик. Для немедленного обновления нужно запустить команду updatedb с администраторскими полномочиями (su, sudo).

После нахождения пути, по которому лежат настройки, их можно открыть в vim или в другом текстовом редакторе:

        vim <path>/application.properties

    

После изменения и сохранения :wq настроек, нужно перезагрузить приложение. Рестарт приложения в Linux обычно выполняется командой (если в нем реализована вся необходимая обвязка, иначе придется убивать процессы с помощью kill и запускать программу заново – прим. ред.):

        sudo systemctl restart <serviceName>.service
    

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

        sudo systemctl stаtus <serviceName>.service
    
Прим. ред.
Этот метод сработает, если в приложении реализована вся скриптовая обвязка, в противном случае воспользуйтесь командой ps.


Приложение должно быть запущено, иначе лучше вернуть старые настройки и заново его рестартовать.

Нужно ли это тестировщику?

Терминал – инструмент, позволяющий решать множество мелких проблем, не прибегая к помощи других людей и программ. Конечно, есть вероятность сломать с его помощью систему или стереть нужные файлы, можно попасть в глупое положение, можно снести все. Однако сделать это можно и не используя терминал, поэтому почему бы не попробовать?

Удачи в обучении!

16
Авг
2021

Интерпретатор Python обращается не к тому модулю

В процессе ознакомления с модулем pyautogui, при попытке просто найти позицию курсора интерпретатор почему-то обращается к tkinter, который даже не упоминается в коде.
Код:
import pyautogui as pag

print(pag.position())

Ответ интерпретато…

03
Авг
2021

Посчитать день месяца

Есть задача, нужно посчитать день месяца имея:

Год
Месяц
Номер недели в месяце
Номер дня в неделе

Даты меньше 2021 года не учитываются в задаче.
Пример: При подаче 2021 год, Август, Первая неделя, Вторник результат будет 3
Думал использо…

29
Июл
2021

Для чего обычно используют переменную envp/environ в Си коде?

Вот не могу придумать для себя сценарий использования данной переменной.
Наткнулся на такую штуку https://opensource.apple.com/source/OpenSSH/OpenSSH-209/openssh/openbsd-compat/setproctitle.c.auto.html
Хочу разобраться в сценариях использо…

27
Июл
2021

🐧 Проектирование контейнеров (часть 3): как пространство пользователя влияет на ваше приложение?

Продолжаем публиковать перевод цикла публикаций о проектировании контейнеров с сайта RedHat. В очередной статье речь пойдет о влиянии выбора пользовательского пространства на развертывание и обслуживание приложений.

27
Июл
2021

Можно ли изменить версию php в консоли относительно папки проекта

На сервере есть несколько проектов, и у каждого своя версия php (где-то 8, 7.3 і т.д.), и у некоторых проектов есть консольные команды, выполнять которые нужно от разных версий php, есть ли возможность перелинковать /usr/bin/php7.3 в папке…