× Доки-Токи В поисках... Проекты WebAppDev SecAppDev Об авторе

Разгружая загруженное...

А именно, сервер и перенося все на клиента путем использования формата разметки текста markdown. Корме того, такой способ позволяет быстрее публиковать статьи на WEB-сайте, оставляя оформление текста на CSS.

 

Читать как использовать и отображать markdown на клиентской стороне.

Никогда неявное не приводило к очевидному...

WiFi использует спектр частот 2.4 GHz и 5 GHz не требующих получение разрешения на их использование и отвечает стандарту IEEE 802.11, который имеет несколько вариантов:

При этом существует проблема одновременного использования всех варинтов IEEE 802.11 точкой доступа, которой устанавливается режим 2Ghz-B/G/N – клиентские устройства более двух-трех не могут связаться с точками доступа или отваливаются, когда их становится три и более. Для решения проблемы рекомендуется использовать вариант 802.11g , режим 2Ghz-Only-G при настройки отдельного канала, порядок настройки которого добавил статью КАК ИСПОЛЬЗОВАТЬ И НАСТРАИВАТЬ CAPSMAN в разделе IPNETWORK

О сколько нам открытий чудных... (c) A.C.Пушкин

Готовят побитывые операции в Python, например, побитовая операция НЕ с числом 0xFF00, возня с которым приводит к следующему неожиданному результату:

>>> x = 0xFF00
>>> y = ~x
>>> print ( "x=%5.4x,y=%5.4x" % (x,y) )
x= ff00,y=-ff01
>>> x
65280
>>> y
-65281

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

Настраивая, изменяя и сравнивая...

Vim — широко распространяемый и высоко настраиваемый редактор, позволяющий создавать и изменять эффективно любой текст и включенный в состав многих nix подобных систем, а также Apple OS X

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

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

Подчищая и исправляя...

C момента стабилизации дистрибутива Debian/Bullseye много воды утекло и было выпущено куча обновлений дистриутива, поэтому при попытке установить VIM выползла следующая ошибка:

$ sudo apt install vim
...
dpkg: dependency problems prevent configuration of libappindicator3-1:amd64:
 libayatana-appindicator3-1 (0.5.5-2+deb11u2) breaks libappindicator3-1 (<< 22.04) and is installed.
  Version of libappindicator3-1:amd64 to be configured is 0.4.92-8.

dpkg: error processing package libappindicator3-1:amd64 (--configure):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 libappindicator3-1:amd64
E: Sub-process /usr/bin/dpkg returned an error code (1)

Из которой видно, что эта проблема Ubuntu-пакета libappindicator3-1, который теперь называется в Debianlibayatana-appindicator3-1

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

Объединяя в целое...

Точки доступа Mikrotik через централизованное управление на роуторе можно настроить с использованием менеджера системы управления точкой доступа (Controlled Access Point system MANager, CAPsMAN), принцип которого показан на рисунке.

На рисунке показано, что контроллер CAPsMAN позволяет производить централизованное управление беспроводных сетей и если необходимо выполнять обработку данных. Когда используется функция CAPsMAN, предполагается, что сеть состоит из некоторого числа управляемых точек доступа (Controlled Access Points, CAP)...

Читать далее

Обнуляя сделанное...

При попытке сохранения Git-репозитария firmware/linux-firmware.git в локальном хранилище git.server.local:

LANG=C git push --all new-origin
Enumerating objects: 15054, done.
Counting objects: 100% (15054/15054), done.
Delta compression using up to 4 threads
Compressing objects: 100% (5201/5201), done.
remote: error: object 087fbb748f50af6eac2248a445d25d666cc92c78: zeroPaddedFilemode: contains zero-padded file modes
remote: fatal: fsck error in packed object
error: remote unpack failed: index-pack abnormal exit
To git.server.local:firmware/linux-firmware.git
 ! [remote rejected] main -> main (unpacker error)
error: failed to push some refs to 'git.server.local:firmware/linux-firmware.git'

Был выявлен объект 087fbb748f50af6eac2248a445d25d666cc92c78, содержащий объекты в режиме дополнения файлов нулями (zero-padded file modes), над устранением ошибки c которыми потребовалось немного повозиться — о чем написал в посвященной этому статье.

Выделяя и раскрашивая...

с помощью Code Highlighter исходный код, вставленный в текст документа и редактируемый в программах Writer и Impress офисного набора LibreOffice, как показано на рисунке ниже.

При этом, использовать само расширение Code Highlighter достаточно просто: выделяй и раскрашивай, приукрашивай в нужные цвета синтаксиса применяемого языка программирования. А вот установка потребует немного кропотливости и внимательности: о чем и написал в статье по установке расширения Code Highlighter

Извлекая и получая нужное ...

А именно файлы с данными из отдельно загруженного файла пакета с расширением .deb без установки и использования APT, на примере извлечения файлов пакета версии binutils-2.38:

 
drwxr-xr-x root/root         0 2022-07-14 13:07 ./
drwxr-xr-x root/root         0 2022-07-14 13:07 ./usr/
drwxr-xr-x root/root         0 2022-07-14 13:07 ./usr/share/
drwxr-xr-x root/root         0 2022-07-14 13:07 ./usr/share/doc/
drwxr-xr-x root/root         0 2022-07-14 13:07 ./usr/share/doc/binutils-doc/
-rw-r--r-- root/root     59379 2022-07-14 13:07 ./usr/share/doc/binutils-doc/changelog.Debian.gz
-rw-r--r-- root/root      1970 2022-07-14 13:07 ./usr/share/doc/binutils-doc/copyright
drwxr-xr-x root/root         0 2022-07-14 13:07 ./usr/share/info/
-rw-r--r-- root/root    297514 2022-07-14 13:07 ./usr/share/info/as.info.gz
-rw-r--r-- root/root     71082 2022-07-14 13:07 ./usr/share/info/binutils.info.gz
-rw-r--r-- root/root     21004 2022-07-14 13:07 ./usr/share/info/ctf-spec.info.gz
-rw-r--r-- root/root     34234 2022-07-14 13:07 ./usr/share/info/gprof.info.gz
-rw-r--r-- root/root     33389 2022-07-14 13:07 ./usr/share/info/gprofng.info.gz
-rw-r--r-- root/root    121812 2022-07-14 13:07 ./usr/share/info/ld.info.gz
lrwxrwxrwx root/root         0 2022-07-14 13:07 ./usr/share/doc/binutils-doc/bfd -> ../binutils/bfd
lrwxrwxrwx root/root         0 2022-07-14 13:07 ./usr/share/doc/binutils-doc/gas -> ../binutils/gas
lrwxrwxrwx root/root         0 2022-07-14 13:07 ./usr/share/doc/binutils-doc/gprof -> ../binutils/gprof
lrwxrwxrwx root/root         0 2022-07-14 13:07 ./usr/share/doc/binutils-doc/ld -> ../binutils/ld          

Узнать какой для этого нужно выполнить ряд незатейлевых манипуляций.

Делая устойчивым неустойчивое...

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

host *
        ServerAliveInterval 600
        TCPKeepAlive yes
        IPQoS throughput
        Protocol 2

При этом многие пакеты подтверждения активности (alive message) могут теряться,особенно по моему опыту, в неустойчивых средах передачи данных, к которым относятся, например, использующие транспорт UDP соединения VPN, а также в силу фильтрации пакетов на уровне маршрутизаторов.

Почитать, как выставить настройки SSH соединению в неустойчивых средах передачи данных

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

Что сегодня и происходит с toolsetup, которое порождает пока невинное предупреждение во время выполнения команды python3.8 setup.py install в проекте python-shell-v1.6 и ниже.

$ python3.8 setup.py install
...
/home/user/.sources/Python-3.8.13/build/python-setuptools/setuptools/command/easy_install.py:144: EasyInstallDeprecationWarning: easy_install command is deprecated. Use build and pip and other standards-based tools.
...

Это предупреждение стало появляться недавно, которое лечится отказом от дистрибьюции в формате egg, от использования которого отказался в python-shell-v1.7 в пользу использования формата Wheel, вместе с которым рассказываю также почему была запрещена read_configuration из setuptools.config и что использовать вместо неё.

Из внутри внешне...

Именно, так можно реализовать внутрисетевой обмен (Host-only network — обозначена синим на рисунке ниже) и подсети доступом ко всемирной сети Internet (NAT — обозначена красным на этом же рисунке). При этом обе подсети изолированы друг от друга, если конечно не наладить между ними мостик (обозначен фиолетовым показано там же), который реализуется с использованием подсистемы netfilter на уровне ядра за счет использования того же NAT, но только на уровне ядра гостевой ОС "Debian-11"

Узнать как пользоваться внутрисетевой обмен (Host-only network) с доступом к Internet в Qemu/kvm

Своевременно получая...

Так, получение сведений о доменной информации с сервера имен DNS позволяет узнать адрес IP путем анализа записей NS или сколько доменному имени узлe назначено записей А, как показано ниже, в примере использования dig(1).

~$ dig @10.0.2.3 smtp.google.com. A +noadditional +noauthority
; <<>> DiG 9.16.27-Debian <<>> @10.0.2.3 smtp.google.com. A +noadditional +noauthority
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22039
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;smtp.google.com.		IN	A

;; ANSWER SECTION:
smtp.google.com.	300	IN	A	64.233.165.26
smtp.google.com.	300	IN	A	74.125.131.26
smtp.google.com.	300	IN	A	64.233.164.26
smtp.google.com.	300	IN	A	64.233.164.27
smtp.google.com.	300	IN	A	74.125.131.27

;; Query time: 56 msec
;; SERVER: 10.0.2.3#53(10.0.2.3)
;; WHEN: Sat May 21 09:05:25 MSK 2022
;; MSG SIZE  rcvd: 249    

Распространяя и экспортируя...

запускаемые в gnome-boxes образы гостевых ОС, которые находятся в директории $HOME/.local/share/gnome-boxes/images с сохранением копии из директории $HOME/.config/libvirt/qemu/ конфигурационного файла XML, содержащего настройки эмуляции запуска виртуальной машины.

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

Нет ничего актуальней фактического...

Что и произошло со мной, когда увидел системные требования к окружению разработчика для сборки из исходных кодов демона containerd, которые требуют более свежую версию не ниже 1.17.x для компилятора golang или кратко go, так как в Debian-11 версия пакета golang на момент написания статьи соответствовала go-1.15, как показано ниже.

$ apt search golang-1
Сортировка… Готово
Полнотекстовый поиск… Готово
golang-1.15/stable,stable 1.15.15-1~deb11u4 all
  Go programming language compiler - metapackage

golang-1.15-doc/stable,stable 1.15.15-1~deb11u4 all
  Go programming language - documentation

golang-1.15-go/stable 1.15.15-1~deb11u4 i386
  Go programming language compiler, linker, compiled stdlib

golang-1.15-src/stable 1.15.15-1~deb11u4 i386
  Go programming language - source files

Читать, как привести версию Golang к актуальной

Динамически и строго применяя...

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

pre>
>>> number = 1234.567
>>> phrase = "Python is a dynamic language"
>>> number = phrase
>>> sentence = number + 10
Traceback (most recent call last):
  File "", line 1, in 
TypeError: can only concatenate str (not "int") to str
>>> print ( number )
Python is a dynamic language

А так же рассказываю, как определять является ли тип класса объекта изменяемым или нет, чем отличается экземпляр объекта от класса типа объекта, зачем и почему используется утиная типизация (duck tyiping) в Python

Читать о том, как использовать типизацию в Python

Устремляясь ввысь, отталкиваясь от базы...

Что и демонстрирует рисунок ниже, полученный в результате реализации в Python сложных вычислений с вложенными рекурсиями, которые порождает рекурсивная формула $f(x) = f(x-1) + 2 \times f(x-2) + 1$

Вложенные рекурсии демонстрируют закономерность, что все вычисления начинаются с базового случая, при котором $f(0) = 1 || f(1) = 1$, идут снизу-вверх с ветвлением на вложенные рекурсии и напоминают перевернутое дерево.

Узнать, как использовать и проверять сложные вычисления с вложенными рекурсиями, а сам реализованный код скачать с GitHub в виде файла cmplxrecursion.py

Принципы неизбежно требуют декорирования и аргументации...

По следам недавнего выхода модуля python-shellenv версии 1.6, раскрыл как:

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

class _CommonAction(argparse.Action):
     ...
     @classmethod
     def catcher(cls, **kwargs ) :
         raise argparse.ArgumentTypeError( 'direct call CommonAction.catcher() is illegal!' )         
     ... 
class _GetenvAllRunAction(_CommonAction):
      """
          Defining Action for option --getenv
      """
      def __init__(self, option_strings, dest, nargs=None, **kwargs ):
          super(_OutputAllRunAction, self).__init__( catcher=self.catcher, option_strings=option_strings, dest=dest, nargs=nargs ,**kwargs )

      @classmethod
      def catcher(cls, **kwargs ): 
          vkey = cls._kwargs_get(kwargs,'values')[0]
          ...

 

Выбирая однозначно и многозначно...

Что нашло свое отражение в очередной версии 1.6 модуля python-shellenv, написанного на языке Python, была реализована обработка аргументов комндной строки, список которых можно получить набив в командной строке следующие буковки:

$ py-shellenv --help
usage: shellenv [options]

optional arguments:
  -h, --help        show this help message and exit
  -V, --version     returns help page and exit immediate
  -t, --test        tests all methods for functionality checking
  -O, --output-all  output all of shell enviroment variables
  --getenv GETENV   finds and prints all shell variables on its keyword or 
                    only one variable when it has matched vkey

Где наряду с печатью всех переменных окружения, которые доступны через os.environ, также релизован поиск нескольких переменных, у которых первые символы имени совпадают с GETENV, пример такого использования показан ниже:

$ py-shellenv --getenv GNOME
There was found 4 similar variables that start with an GNOME
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/cec6211a_987a_4c28_b096_8d46ae123456
GNOME_SETUP_DISPLAY=:1
GNOME_TERMINAL_SERVICE=:1.172

Соответственно, опция --getenv не только решает проблему выполнения команды env | grep "GNOME", которая может вернуть и иные переменные, что и выделено жирным:

$ env | grep "GNOME"
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
XDG_CURRENT_DESKTOP=GNOME
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/cec6211a_987a_4c28_b096_8d46ae123456
GNOME_SETUP_DISPLAY=:1
GNOME_TERMINAL_SERVICE=:1.172

Кроме того, опция --getenv может также без проблем найти отдельную переменную, например, только что найденную GNOME_SETUP_DISPLAY :

$ py-shellenv --getenv GNOME_SETUP_DISPLAY
GNOME_SETUP_DISPLAY=:1

При этом, дерево проекта увеличилось всего лишь на один файл cmdlineargs.py, который выделен жирным:

~/Project/python-shellenv$ exa --tree --sort type
.
├── src
│  └── shellenv
│     ├── __init__.py
│     ├── __main__.py
│     ├── cmdlineargs.py
│     ├── shellenv.py
│     └── testrun.py
├── LICENSE
├── README.md
├── buildout.cfg
├── pyproject.toml
├── setup.cfg
└── setup.py

Всегда найдется метод передачи и извлечения данных даже в условиях переменной среды...

Как говорится было бы желание и такая задачка найдется, с которой неожиданно столкнулся во время реализации доступа к некоторым операциям с переменными системного окружения в модуле python-shellenv для получения их состава и значений. В ходе ее решения выяснилось, что необходимо использовать **kwards, указывающий на переменное число параметров с выборкой по ключевому значению атрибутов функции, метода или конструктора класса.

В силу того, что **kwards относится к встроенному в CPython типу dict(inary) — словарь, который обеспечивает ассоциативную выборку значений по ключевым словам, в ранее опубликованную статью про использование dict был добавлен следующий пример такой выборки:

class _CommonAction(argparse.Action):
 ...
 def __init__(self, catcher, **kwargs ) :
        option_strings=self.__kwargs_get(kwargs,'option_strings')
...
@staticmethod
      def __kwargs_get(kws,key): 
          for k in kws.keys():
               if k == key :
                  return kws[k]
          return None     

Свободно собирая, устанавливая и распространяя...

Что нашло отражение в опубликованной версии 1.5 Python-модуля shellenv на GitHub, в которой были исправлены и перенесены в один файл __init__.py именования уровня модуля с двойными и тройными подчеркиваниями (мodule level "dunders"), добавлены метаданные для buildout и setup.py , в том числе в сборку модуля shellenv добавлена генерация дружественного интерфейса вызова в виде одного или нескольких скриптов-оберток, что позволяет вызывать его из командной строки, а не через команду pip -m <module>.

Таким образом, дерево проекта увеличилось на два файла buildout.cfg и setup.py, как показано в дампе ниже.

~/Project/python-shellenv$ exa --tree --sort type
.
├── src
│  └── shellenv
│     ├── __init__.py
│     ├── __main__.py
│     ├── shellenv.py
│     └── testrun.py
├── LICENSE
├── README.md
├── buildout.cfg
├── pyproject.toml
├── setup.cfg
└── setup.py 

Все сделанные изменения, так или иначе связанные с ними, были описаны в следующих статьях :

Как использовать buildout в python
Как использовать setup.py в python

Кроме того, добавлены сведения о том, как использовать именования с двойными и тройными подчеркиваниями (мodule level “dunders”) в статью о том, как использовать конструкции __main__ & __init__ при конструирования структуры пакета.

Также наконец дошли руки сдать топики 2020 года в архив!

Правильно инициализировано — это как верно сказано...

В опубликованной Python-модуля shellenv версии 1.4 на GitHub был исправлен ипморт и выполнение модуля через команду python3 -m shellenv путем внесения конструкций __main__ и __init__, повлекшие соответствующие изменения в структуре пакета модуля:

.
├── LICENSE
├── pyproject.toml
├── README.md
├── setup.cfg
└── src
   └── shellenv
      ├── __init__.py
      ├── __main__.py
      ├── shellenv.py
      └── testrun.py

При этом, был сделан задел для реализации этапа тестирования в непрерывном цикле и развертывания новых версий дистрибутива модуля в виде файла-компонента src/shellenv/testrun.py. Также в ходе реализации конструкций __main__ и __init__ были внесены правки в ранее опубликованную статью, которая описывает как собирать, раздавать и устанавливать проект в среде Python

Читать новую статью о том, как использовать конструкции __main__ & __init__ при конструирования структуры пакета

Ассоциативно связывая и оперируя...

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

 

Читать о том, как использовать словари в Python

Плодотворно творить и размножать...

все написанное на Python не так сложно. Даже несмотря на то, что плод труда программиста не относится к компилируемому или собираемому коду, т.к. выполняется в интерпретаторе бинарного кода CPython и находится в уже относительного виде исполняемых сценариев или подключаемых модулей другими сценариями по ходу выполнения. Поэтому для СPython предусмотрена команда Python Package Index(PIP), с помощью которой мной был собран и установлен пакет python-shellenv, мной же недавно опубликованный и полная структура которого показана ниже.

~/Projects/python-myproj$ exa --tree --ignore-glob="*~|__pycache__|dist|*.egg-info"
.
├── LICENSE
├── pyproject.toml
├── README.md
├── setup.cfg
├── shellenv.py
└── src
   └── shellenv_module
      ├── __init__.py
      ├── shellenv-run.py
      └── shellenv.py

Читать о том, как создавать, собирать, раздавать и устанавливать проект в среде Python

Совмещая очевидное...

В раздел Проекты добавлена реализация в Python операций по созданию, изменению и обеспечению совместимости с аналогами функций семейства getenv(3) для работы с переменными окружения системы.

Этот небольшой проект реализует подключаемый модуль shellenv и демонстрирует возможность дистрибьюции проектов в экосистеме Python, например, с использованием локального индексного репозитарий Python и который в будущем поможет мне реализовать все этапы непрерывной интеграции (continuous integration), являющейся неотъемлемой частью безопасной разработки.

Да не оскудеет рука дающего (Книга Притчей Соломоновых, Глава 28,  стих 27)

И раздающего, локально индексируемые пакеты Python (Python Package Index, PyPI). Почему приватно? Потому что не стоит, на мой взгляд, пугать Интернет своими шедеврами до того момента, как он будет готов это сделать сам. Поэтому решил поделится рецептами по достижению того, чей видимый результат показан на рисунке, ниже.

Как показано на картинке, первым (слева) показан результат обращения к хранилищу Git-репозитариев, вторым (середина) и третьим (справа) – запуск pypiserver в качестве приложения wsgi с помощью Apache2, поднимая виртуальные узлы на сетевых портах 8080 и 8443, при это, также покзывается конфигурация и запуск простейшего сервера pypiserver вместе с примером использования функции так называемой долговременной службы (user_lingering ), которая позволяет запускать службу до входа пользователя в систему.

Читать о том, как разворачивать индексный репозитарий Python

Монтируя по метке...

Например, внешний жесткий диск в пользовательской директории /home/$USER/yocto-poky, которую можно потом использовать в качестве хранения копий нужных файлов и директорий или локального хранилища Git репозитариев, о которой писал ниже.

Читать о том, как монтировать партиции (носителя) по её метке

Локально сберегая...

Допустим, что вы разработчик и работает над собственными проектами, некоторые из которых находятся в совместной разработке по всему миру и находятся на GitHub, или других крупных системах контроля версий (versioning system). Однако, некоторые проекты могут быть настолько маленькими и закрытыми для публичного доступа, что размещение на публичных репозитари является не желательным, потому что они могут быть пропроетарными или предназначенными только для внутреннего использования.[3.1]. Поэтому рано или поздно возникает вопрос о собственном локальном хранилище Git-репозитариев.

Читать о том, как разворачивать хранилище Git-репозитариев

Форкая и запуская...

Рад сообщить, что закончил адаптацию и выложил последние правки на GitHub Gits серверной конфигурации блока Systemd, который позволяет клиенту git(1) создавать соединения с демоном git-daemon на системе debian-11 и совместимых с ней производных дистрибутивов, таких как Ubuntu или AstraLinux. Эта серверная конфигурации блока Systemd была мной форкнута от родительского рецепта, изначально предложенным Джерими Си Фостер (Jeremiah C Foster).

Для получения GitHub Gits серверной конфигурации блока Systemd и запуска, выполните команду и следуйте потом инструкциям в README.md

git clone https://gist.github.com/702b7b79faf34ba3ff2194d0f404760b.git git-daemon && \
cd git-daemon

По сути GitHub Gits — это сервис, который позволяет разработчикам между собой делится мнениями, сделанными на коленке записками, рецептами и фрагментами исходного кода.

Нежданно-негаданно...

Ничто не предвещало неожиданного, когда во время сборки пакета libxcb-native сборочной среды машины Yocto-poky (ветви Warrior) была получена ошибка импорта gcd модуля fractions, написанного на Python:

...
   File "//home/user/yocto-poky.tmp/work/x86_64-linux/libxcb-native/1.13.1-r0/recipe-sysroot-native/usr/lib/pkgconfig/../../../usr/lib/python3.7/site-packages/xcbgen/align.py", line 5, in 
|     from fractions import gcd
| ImportError: cannot import name 'gcd' from 'fractions' (/usr/lib/python3.9/fractions.py)
| make[1]: *** [Makefile:1403: xproto.c] Error 1
| make[1]: *** Waiting for unfinished jobs....
| make[1]: *** [Makefile:1403: composite.c] Error 1
| make[1]: *** [Makefile:1403: dri3.c] Error 1
| make[1]: *** [Makefile:1403: bigreq.c] Error 1
| make[1]: *** [Makefile:1403: dpms.c] Error 1
| make[1]: *** [Makefile:1403: xc_misc.c] Error 1
| make[1]: *** [Makefile:1403: dri2.c] Error 1
| make[1]: *** [Makefile:1403: damage.c] Error 1
| make[1]: Leaving directory '/home/user/yocto-poky.tmp/work/x86_64-linux/libxcb-native/1.13.1-r0/build/src'
| make: *** [Makefile:787: all-recursive] Error 1
| ERROR: oe_runmake failed
| WARNING: exit code 1 from a shell command.
| ERROR: Function failed: do_compile (log file is located at /home/user/yocto-poky.tmp/work/x86_64-linux/libxcb-native/1.13.1-r0/temp/log.do_compile.2130121)
ERROR: Task (virtual:native:/home/user/Build/yocto-poky/poky/meta/recipes-graphics/xorg-lib/libxcb_1.13.1.bb:do_compile) failed with exit code '1'
NOTE: Tasks Summary: Attempted 2206 tasks of which 0 didn't need to be rerun and 1 failed.

В процессе поиска причин возникновения ошибки импорта gcd модуля fractions в модуле python3.7/site-packages/xcbgen/align.py было выявлено отсутствие обратной совместимости Python-3.9 среды функционирования Debian-11 с собираемой версией python-3.7 сборочной машины Yocto/poke

Узнать как исправлять ошибку несовместимости версии Python-3.9 с предыдущими

Нюансы заключаются в методах и их использования!

Прокси-объект позволяет разным процессам ссылаться (иметь доступ) к одному или нескольким объектам, содержащий контейнерный тип данных, с учетом особенностей интегрируемых объектов последовательности данных (list) и ассоциативного массива с выборкой по ключу (dict) определяется каждому из них собственный набор согласно своей реализации, которая показана на рисунке ниже.

Вместе с особенностями применения прокси-объектов привожу некоторые нюансы совместного использования с их встроенными аналогами list() и dict() интерператора бинарного кода CPython

Узнать нюансах и особенностях использования прокси-объектов и интегриуемых в них встроенных типов CPython

Перенаправляя, контролируя и отслеживая ...

Трафик и соединения, на реальном примере обмена двух узлов гостевых ОС, схема взаимодействия которых показана ниже, объясняю как перенаправлять трафик с помощью трех политик DNAT, SNAT и MASQUARADE. Так же на практическом примере того же обмена рассказываю как отслеживать tcp- и udp- соединения с помощью модуля conntrack, являющегося неотъемлемой частью IPTables/NFTables, и контролировать открытые порты c использованием утилиты nmap

Узнать, как перенаправлять трафик с помощью политик NAT, контролировать и отслеживать соединения и их порты

Главное – установить канал связи, а все остальное уже мелочи...

Особенно, если речь идет о путанице между двумя сетевыми интерфейсами на стороне эмулятора Qemu/KVM, конфигурация которой устанавливалась в соответствии с рецептом мультиподдержки сетевых устройств виртуальной машины "ВМ ОС Yocto/poky", которая показана на функциональной схеме организации и движения сетевого трафика с другой виртуальной машиной "ВМ ОС Debian-10", на рисунке ниже.

Вместе с тем, создал новый раздел Network/IPTables, где будут публиковаться подобные статьи, связанные с настройкой и использованию стека TCP/IP в ОС GNU/Linux

Читать о том, как распутывать запутанный обмен между двумя узлами виртуальных машин путем применения политик FORWARD и MASQUERADE в мэжсетевом экране IPTables

И выходит, и входит. Замечательно выходит! (с) м/ф "Винни-Пух и день забот"

Именно, так исходящие и входящие пакеты IP, UDP и TCP циркулируют на сетевых интерфейсах маршрутизатора шлюза, позволяя снять ограничения и сложности, которые связаны с числом маршрутизируемых адресов IP и требований по ограничению внешнего доступа из публичной сети WAN в локальную сеть LAN .

Которые можно решить с помошью политики FORWARD,MASQUERADE и правил NAT, устанавливаемые в iptables, для (ре-)трансляции и перенаправления TCP-,UDP-пакетов по IP-адресу и порту -источника,-приемника между внешней WAN и внутренней сетью LAN

Узнать как использовать FORWARD,MASQUERADE и правила NAT в iptables

От одинарности к множественности...

В статье о мультиподдержки сетевых устройств в эмуляторе QEMU/KVM проекта Yocto/poky рассказывается, как задействовать согласно схеме, показанной ниже, два сетевых устройства в сборочной машине yocto/poky, наследование опциий -net и -nic, а также устранять проблему, связанной IP-Config: Auto-configuration of network failed и возникающей большой задержки по таймауту.

Читать о том, как реализовывать мультиподдержку сетевых устройств в эмуляторе QEMU/KVM проекта Yocto/poky

Разрешая и исправляя...

В поддержку мостовой сети Gnome-box добавил исправление ошибки, показанной ниже в дампе, которая заключалась в дополнительной настройки запуска вспомогательного скрипта qemu-bridge-helper, запускаемого во время инициализации гостевой ОС в виртуальной среде эмулятора Qemu гипервизора KVM, на использование которого построены gnome-boxes

...
qemu-bridge-helper --br=virbr1 --fd=36: failed to communicate with bridge helper: Transport endpoint is not connected
stderr=failed to create tun device: Operation not permitted
...

Читать о том, как исправлять ошибку запуска вспомогательного скрипта qemu-bridge-helper

Галопом по Европам

Только так происходит первое знакомство с тем, что никогда не использовал, а применять надо и очень хочется. Поэтому посвященной RubyGems статье, в темпе вальса предлагаю пробежаться по основам окружения Ruby и коротенко, одним глазком познакомится с архитектурой окружения и структуре пакетов Gem. Также предлагаю узнать, как установить и использовать RubyGems в диструбитиве Debian.

Читать о том, как устанавливать и использовать RubyGems в Debian

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

Именно, такое выяснилось, когда в недавно собранным мной из исходных кодов LibreOffice-7.2 , что вроде бы недавно работающий символ конца строки (\n) регулярного выражения в диалоге "Найти и заменить" вдруг перестал работать, как показано на рисунке ниже.

Читать о том, почему в регулярных выражениях LibreOffice-7.2 символ достяжения поиска конца строки заменил указывающее на её окончание статичное значение

Цель оправдывает средства тогда и только тогда, когда она подтверждается результатами

Как оказалось, что версия LibreOffice версии 7.0 в Debian/Bullseye (на момент первой публикации) не содержала нужной мне функциональности, а именно инспектор стиля (Style Inspector), который показан на рисунке 1.1

Рисунок 1.1

Поэтому решил произвести установку поддерживающей более менее эту функиональность версию LibreOffice-7.2, которая производилась путем получения и развертывания в отдельную локальную директорию, на основе уже имеющегося опыта в сети [3.1] и с привязкой к реальной системе Debain/Bullseye. Что заставило меня покопаться и затратить на достяжение указанной цели время и некоторых усилий, которые были оправданы и подтверждены результатами, которые не удавалось получить с установленной штатной версией LibreOffice-7.0 в Debian/Bullseye, поэтому в данном случае, утверждение "Це́ль опра́вдывает сре́дства" – верна.

Читать о том, как настроить, установить и проанализирвать зависимости версии LibreOffice-7.2

Неожиданности кроятся в давно забытом...

Что и произошло со мной, так как у меня система с дистрибутивом Debian/Bullseye на момент стабилизации простояла уже два года и притерпела многие итерации смены программного обеспечения через процедуру apt update, поэтому во время попытки установки пакета libgtk-3-dev была выявлена ошибка с "битыми" зависимостями, а именно несоответствие версий, как показано на рисунке 1-1

Рисунок 1-1

Читать о том, как можно исправить "битые" зависимости пакетов напримере libthai-dev и libwayland-dev

Ключ к решению всякого рода проблем не всегда кроется в простом чтении документации, а в чем-то большем

Так и произошло в случае, когда потребовалось решить проблему с большими задержками и подвисаниями NFS соединения, создаваемого гостевой ОС для доступа к дисковому пространству центральной машины и которое заключалось в правильной оптимизации настроек NFS на стороне сервера и клиента, а не колдовству и магии, как многие иногда себе неверно представляют.

Не паролем, так по ключу

Начиная с августа 2021 года GitHub запретил выполнять команды Git, подобные "Git push", т.е. вносящие изменения в репозитарий и/или базу исходного кода проекта, по паролю. Поэтому мне стала актуальна, написанная практически год назад статья как применять ключи SSH, в который исправил некоторые ошибки, допущенные ранее.

Временно поверенный, временем провернный!

На конец руки начали добираться до старого материала, опубликованого давным-давно... а именно до статьи Как использовать файловые системы Tmpfs и DevPts в Debian Squeeze, которая была расчитана на версии Debain, делавшие упор на использовании SysV init и ставшей уже историей. Поэтому, чтобы оставаться в контексте дня, в новую версию статьи добавил метод использования юнитов в Systemd для монтирования временных и временем проверенных директорий, которые используются для оптимизации времени работы приложений и хранения временных объектов файловых систем.

Не все, что выглядит простым, является тривиальным!

Что и случилось вроде бы с простой обработкой CSV файла test_c.csv, сформированного синтаксическим анализатором fawfinder и который потребовал бы в SHELL нетривиальную обработку формата представления табличных данных, имеющий разделитель CSV. А почему?

На суть проблемы и её решение отвечает статья: Как на языке программирования Python читать и писать табличные данные файла CSV

Формат – формату рознь!

О чем и рассказывается в статье, в которой рассматривается фактическое различие между двумя форматами хранения сообщений Mailbox и Maildir, как и использовать их в условиях почтового сервера Postfix

Читать об этом более детально...

О призрачном и потустороннем...

А именно, поговорим о том, как сделать явью, на первый взгляд, призрачную поддержку мостовой сети и разрешить защищенный доступ к сети хозяйского узла из виртуальной сети и обратно в запущенной в Gnome Boxes гостевой операционной системе, на примере развернутой в виртуальной среде Qemu/KVM операционной системе GNU/Linux дистрибутива Debian-10.

Читать о том, как это сделать...

Отслеживая и журналируя...

Не многие, особенно начинающие пользователи GNU/Linux, знают, что в существует возможность производить трассировку последовательности выполнения команд и основных утилит, используемых в оболочке BASH/DASH и ее скриптах, а также какие подводные камни ожидают Вас на этом пути.

Читать о том, как производить подобную трассировку и журналирование

Читая и перенаправляя...

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

Читать о том, как проводить такие операции с файлами на Python

Споставляя не сопостовимое...

Что кажется па первый взгляд верным, что сопоставить несопостовимое нельзя, но только не в случае с Python, который позволяет легко и непренужденно, например, за чашечкой утреннего горячего кофе привести реализацию именованного канала Pipe() к устройству стандартного вывода, известного всем как STDOUT

Читать о том, как привести реализацию Pipe() к STDOUT

Снизу звездочки кажутся маленькие-маленькие. Но стоит только нам взять телескоп!...

Именно, такие словами всем известного героя Огурцова из комедии "Карнавальная ночь", мне напомнила возня с паролями в ОС Linux, потому что вооружившись "мы уже видим две звёздочки, три звёздочки, четыре звёздочки… Лучше всего, конечно, пять звёздочек!". Конечно, в нашем случае чем больше количество и инвариантность символов в пароле, тем надежней он становится.

Читать о том, как делать безопасные пароли

Перехватавыя и интерпертируя...

Раздел "Разработка приложений Gnome" пополнилась статьей, рассказывающей о возможности обработки событий нажатия кнопок на клавиатуре во фреймворке (Py)Gtk. Также в ней объясняется вся последовательность преврашений сканкодов клавиш, получаемых от клавиатуры до фактически реализуемых в Gtk.keymap и почему их значения имеют различия.

Читать о нюансах обработки событий клавиатуры в Gtk

Иногда полезно отделять яйца от курицы...

В Статье объясняются общие принципы, подходы и факторы, позволяющие успешно реализовать многозадачное взаимодействие внутри приложений Gtk, функционирующих в среде графического рабочего стола Gnome/Gtk на языке Python (PyGtk). А именно вопросы, связанные с использованием и управлением многозадачностью, блокировки и организации доступа кокурирующих объектов внутри неё и за её пределами к главному циклу событий (Main Event Loop), чтобы избежать факт несанкционированного доступа, который может привести к аварийному завершению или зависанию программы.

Читать о реализации многозадачности в приложениях Gtk на Python

Начинать нужно с главного?!

А именно, с начала премещения всех статей по созданию приложений для окружения графического рабочего стола Gnome в единый раздел, и добавления в него новой статьи, рассказывающей о том как просто и быстро разрабатывать прикладные приложения в этой графической среде под языком программирования Python

В статье "Как начать создавать приложения Gnome на Python" объясняются общие принципы разработки приложений в среде графического рабочего стола Gnome на языке Python, который взаимодействует с фреймвороком (библиотекой) Gtk через так называемые языковые привязки или интроспекцию GObject, и позволяет быстро с минимальными усилиями разрабатывать прикладные приложения и организовывать взаимодействие с пользователем.

Архив: 2017, 2018, 2019, 2020 гг.
Яндекс.Метрика