LINUX.ORG.RU

Сообщения Xintrea

 

Как сделать вычислимую переменную в /group_vars/all.yml в зависимости от os.path.isdir() ?

 ,

В jinja - шаблонах нельзя использовать привычные методы стандартных Python-модулей, например os.path.isdir(...). Вместо этого предлагается выполнить задачу с модулем stat, в ней вычислить значение, а потом его использовать:

https://stackoverflow.com/questions/43522337/defining-os-path-in-ansible-jinj...

А как тогда установить значение переменной в файле /group_vars/all.yml в зависимости от результата работы stat? Ведь синтаксис этого файла не предполагает исполнение задачи, и в нем только устанавливаются значения переменных?



Перемещено hobbit из general

Xintrea
()

Почему grep не фильтрует сообщения dd?

 , , , ,

Даю такую команду:

$ dd if=/dev/zero count=10000 bs=50000 of=/tmp/zero.bin | grep 10000
10000+0 записей получено
10000+0 записей отправлено
500000000 байт (500 MB, 477 MiB) скопирован, 5,00764 s, 99,8 MB/s
И ожидаю что третьей строки не будет видно, она же не попадает под выражение в grep.

Но третья строка все равно выводится в консоль.

Почему?

Xintrea
()

Почему systemctl list-units не показывает сервис ntp, хотя он есть?

 , systemctp, ,

Обычно чтобы понять, какие сервисы есть в системе, я всегда пользовался командой:

systemctl list-units --all

Но сейчас выяснилось, что эта команда показывает не все сервисы. Например, она не покажет сервис ntp, хотя он существует:
systemctl status ntp
● ntp.service - LSB: Start NTP daemon
   Loaded: loaded (/etc/init.d/ntp; generated; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:systemd-sysv-generator(8)

Почему полный список юнитов не отображает все юниты? Чем юнит ntp так отличается от других?

Xintrea
()

Восстановить работу gitweb. Случайно грохнул /etc/apache2/conf-enabled/gitweb.conf

 , gitweb, ,

Пришел сегодня ранёхонько, стал ремонтировать вот это: Apache показывает ошибку 403 на некоторых файлах

Увидел, что в файле /etc/apache2/conf-enabled/gitweb.conf кривоватенькая регулярка, которая, видимо, отвечала за доступ/обработку dot-каталогов ".git" или что-то в этом роде (сервер настраивал не я). Чтобы проверить, что проблема в Apache-модуле gitweb, решил его временно отключить. И вместо того чтоб удалить линк в /conf-enabled, спросоня удалил основной файл в /conf-available.

Отключить раздел чтоб восстановить файл не могу, на сервере куча всего крутится. Поэтому восстановил файл из пакета. И теперь его надо настроить «как было».

По-дефолту он выглядит так:

<IfModule mod_alias.c>
  <IfModule mod_mime.c>
    <IfModule mod_cgi.c>
      Define ENABLE_GITWEB
    </IfModule>
    <IfModule mod_cgid.c>
      Define ENABLE_GITWEB
    </IfModule>
  </IfModule>
</IfModule>

<IfDefine ENABLE_GITWEB>
  Alias /gitweb /usr/share/gitweb

  <Directory /usr/share/gitweb>
    Options +FollowSymLinks +ExecCGI
    AddHandler cgi-script .cgi
  </Directory>
</IfDefine>


Единственное что я помнил, что репозитарии размещены в каталоге /home/git (этот каталог так же прописан и в /etc/gitweb.conf). А обращение к главной странице в браузере должно происходить по наш_домен/git. Поэтому я подправил настройки:
<IfDefine ENABLE_GITWEB>
  Alias /git /home/git

  <Directory /home/git>
    Options +FollowSymLinks +ExecCGI
    AddHandler cgi-script .cgi
  </Directory>
</IfDefine>

Перезапускаю Apache2 (версия 2.4, вестимо). И получаю 403 ошибку:
Forbidden
You don't have permission to access this resource.

В общем, судорошно соображал что как крутить, курил логи, не одмин я совсем, Апач лет десять назад запускал... Наконец заставил работать веб-морду. Конфиг получился такой:
<IfDefine ENABLE_GITWEB>

  # Turning on mod rewrite
  RewriteEngine on

  # Make the front page an internal rewrite to the gitweb script
  RewriteRule ^/git/$  /cgi-bin/gitweb.cgi [L,PT]

  # Make access for "dumb clients" work
  RewriteRule ^/git/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /cgi-bin/gitweb.cgi%{REQUEST_URI}  [L,PT]

  Alias /git /home/git
  <Directory /home/git>
    Options +FollowSymLinks +ExecCGI
    AddHandler cgi-script .cgi

    Require all granted

    # DirectoryIndex gitweb.cgi
    DirectoryIndex /cgi-bin/gitweb.cgi

  </Directory>
</IfDefine>

Но теперь осталась проблема: недоступны ресурсы типа картинок, js-файлов и css-сок. Например, запросы:

http://наш_сервер/git/static/gitweb.css
http://наш_сервер/git/static/gitweb.js

Возвращают ошибку 404.

Вопрос: Как докрутить конфиг, чтобы эти ресурсы стали доступны?

Xintrea
()

Apache показывает ошибку 403 на некоторых файлах

 , , ,

Привет, народ.

Имеется репозитарий, который выложен на HTTP сервере. Проблема в том, что некоторые файлы Apache не отдает с ошибкой 403. Например:

http://192.168.10.251/astra_rep/se17devupdate2/pool/main/libr/libreoffice/libreoffice-wiki-publisher_1.2.0+LibO7.2.7-0ubuntu0.21.10.1~bpo20.04.1+ci202207041218+astra4_all.deb

http://192.168.10.251/astra_rep/se17devupdate2/pool/main/l/linux-firmware/linux-firmware_20220329.git681281e4-0ubuntu1+ci202207182106+astra2_all.deb

Первый файл, с более длинным именем и путем - отдается. А второй файл, с более коротким именем и путем - нет. Какая-то дичь. Я не могу понять почему. Наткнулся на это ошибку из-за того, что apt-get install не мог получить именно второй пакет:
Ошб:1 http://192.168.10.251/astra_rep/se17devupdate2 1.7_x86-64/main amd64 linux-firmware all 20220329.git681281e4-0ubuntu1+ci202207182106+astra2
  403  Forbidden [IP: 192.168.10.251 80]
E: Не удалось получить http://192.168.10.251/astra_rep/se17devupdate2/pool/main/l/linux-firmware/linux-firmware_20220329.git681281e4-0ubuntu1+ci202207182106+astra2_all.deb  403  Forbidden [IP: 192.168.10.251 80]
E: Не удалось получить некоторые архивы; возможно, нужно запустить apt-get update или попытаться повторить запуск с ключом --fix-missing?
Чтение списков пакетов… Готово

Вот как происходит получение файлов через wget (первый - нормально, второй - с ошибкой):
$ wget "http://192.168.10.251/astra_rep/se17devupdate2/pool/main/libr/libreoffice/libreoffice-wiki-publisher_1.2.0+LibO7.2.7-0ubuntu0.21.10.1~bpo20.04.1+ci202207041218+astra4_all.deb"
--2022-11-17 16:39:46--  http://192.168.10.251/astra_rep/se17devupdate2/pool/main/libr/libreoffice/libreoffice-wiki-publisher_1.2.0+LibO7.2.7-0ubuntu0.21.10.1~bpo20.04.1+ci202207041218+astra4_all.deb
Подключение к 192.168.10.251:80... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 1613088 (1,5M) [application/x-debian-package]
Сохранение в: «libreoffice-wiki-publisher_1.2.0+LibO7.2.7-0ubuntu0.21.10.1~bpo20.04.1+ci20220704
1218+astra4_all.deb»
libreoffice-wiki-publisher_1.2.0+L 100%[=============================================================>]   1,54M  --.-KB/s    in 0,1s
2022-11-17 16:39:46 (11,9 MB/s) - «libreoffice-wiki-publisher_1.2.0+LibO7.2.7-0ubuntu0.21.10.1~bpo20.04.1+ci202207041218+astra4_all.deb» сохранён [1613088/1613088]

$ wget "http://192.168.10.251/astra_rep/se17devupdate2/pool/main/l/linux-firmware/linux-firmware_20220329.git681281e4-0ubuntu1+ci202207182106+astra2_all.deb"
--2022-11-17 16:39:56--  http://192.168.10.251/astra_rep/se17devupdate2/pool/main/l/linux-firmware/linux-firmware_20220329.git681281e4-0ubuntu1+ci202207182106+astra2_all.deb
Подключение к 192.168.10.251:80... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 403 Forbidden
2022-11-17 16:39:56 ОШИБКА 403: Forbidden.


Я проверил, файл linux-firmware_20220329.git681281e4-0ubuntu1+ci202207182106+astra2_all.deb существует, путь правильный.

Права на файлы идентичные:
$ ls -l ./pool/main/libr/libreoffice/libreoffice-wiki-publisher_1.2.0+LibO7.2.7-0ubuntu0.21.10.1~bpo20.04.1+ci202207041218+astra4_all.deb
-rw-r--r-- 1 security security 1613088 сен 29 14:06 ./pool/main/libr/libreoffice/libreoffice-wiki-publisher_1.2.0+LibO7.2.7-0ubuntu0.21.10.1~bpo20.04.1+ci202207041218+astra4_all.deb

$ ls -l ./pool/main/l/linux-firmware/linux-firmware_20220329.git681281e4-0ubuntu1+ci202207182106+astra2_all.deb
-rw-r--r-- 1 security security 214471224 сен 29 14:04 ./pool/main/l/linux-firmware/linux-firmware_20220329.git681281e4-0ubuntu1+ci202207182106+astra2_all.deb


Права на дикретории идентичные:
$ ls -l ./pool/main/libr | grep "libreoffice$"
drwxr-xr-x 2 security security 16384 окт  4 20:13 libreoffice

$ ls -l ./pool/main/l | grep "linux-firmware$"
drwxr-xr-x 2 security security 4096 окт  4 20:12 linux-firmware


Но почему-то один файл отдается, второй - нет. Что еще и где надо проверить, чтобы понять почему Apache на этом файле спотыкается?

Xintrea
()

Посоветуйте монитор 1920x1200, аналог HP Z24n G2

 , ,

Нынче нет в продаже моников HP Z24n G2. В свое время не купил, теперь найти не могу. В DNS есть HP Z24n G4, но у него вертикальное разрешение меньше - 1920x1080.

Основные требования:

- разрешение 1920x1200
- матрица IPS
- управление подсветкой по току, а не ШИМ, чтобы не мерцало
- желательно (но не критично) наличие разъема DVI

Или подскажите где можно купить именно модель HP Z24n G2. Чтобы можно было прийти, открыть коробку, включить, проверить наличие битых пикселей, и только потом взять. А то по почте пришлют с матрицей на которой 3 пикселя будут гореть на постоянку, и менять не будут, типа это допустимо. Локация СПБ.

Xintrea
()

Непонятки с репозитариями Astra Linux

 , , ,

Привет, народ.

Имеется вот такая страница в официальной Astra Linux Wiki:

https://wiki.astralinux.ru/pages/viewpage.action?pageId=158598882

На этой странице имеются http-ссылки на репозитарии и прочие ресурсы, например такие:

https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main/
https://dl.astralinux.ru/astra/frozen/1.7_x86-64/1.7.1/iso/

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

1. Согласно информации из приложенной статьи ссылки репозиториев не должны быть доступны для Astra Linux Special Edition.

2. Доступность по протоколам HTTPS и HTTP обеспечивает доступность всех файлов репозитория по прямым ссылкам, что позволяет использовать для установки и обновления пакетов из этих репозиториев стандартные программы.

3. Помимо доступности протоколов HTTPS и HTTP для того, чтобы было возможно открыть ссылку в браузере и просмотреть содержимое репозитория так, как это делается в файловом менеджере, в репозитории должна быть включена автоматическая индексация содержимого (autoindex). Автоматическая индексация поддерживается в репозиториях Astra Linux Common Edition и не поддерживается в репозиториях Astra Linux Special Edition.



И я ничего не могу понять из этой белиберды.

Абзац 1 - с чего бы ссылки репозитариев «не должны быть доступны для Astra Linux Special Edition»? Ссылки вообще-то доступны кому угодно у кого есть интернет. Что значит недоступны для Astra Linux SE? Что они хотели сказать этим предложением?

Абзац 2 и 3 техподдержка тупо скопировала в разделе Протоколы передачи интернет-репозиториев Astra Linux с той же страницы официальной Wiki.

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

Чтобы проверить это предположение, я проверил ссылки на файлы:

https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main/Release
https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main/Release.gpg
https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main/binary-amd64/Packages.gz
https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main/binary-amd64/Release

https://dl.astralinux.ru/astra/stable/1.7_x86-64/main/Release
https://dl.astralinux.ru/astra/stable/1.7_x86-64/main/Release.gpg
https://dl.astralinux.ru/astra/stable/1.7_x86-64/main/binary-amd64/Packages.gz
https://dl.astralinux.ru/astra/stable/1.7_x86-64/main/binary-amd64/Release

Но все они возвращают 404. Может я неправильно предположил какие файлы могут быть. А может быть, путь, начинающийся с https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main/... действительно не существует. Как это можно однозначно проверить?



Перемещено hobbit из general

Xintrea
()

15 лет без кулхацкеров: наконец-то кто-то засунул троян. Но как?

 , ,

Имею старенький сайто с 9-м Debian Linux и nginx + php-fpm. Сайт самописный, не имеет всяких wordpress-сов или jooml-ов. Фреймверк - Codeigniter-2. Из стороннего - имеется форум punBB 1.4.6 с самодельной капчей.

Обнаружил случайно, что 27 октября 2022 в /tmp каталоге сайта каким-то образом оказался интересный файл с именем phphaATEM. Пользователь и группа у него www-data.

Вот что про него сказал trendmicro посредством virustotal:

https://www.trendmicro.com/vinfo/us/threat-encyclopedia/malware/Backdoor.PHP....

Свеженькая хреновина, от October 18, 2022.

Посмотрел access-лог по времени создания файла, там ничего сверхестественного не увидел, сплошные GET-запросы, один POST-запрос какого-то робота:

https://pastebin.com/raw/8Cuh755E

Я расковырял всякие обфускации, достал PHP-шный код. Оказалось что это кулхацкерская консоль управления файлами через WEB. Никаких ссылок в коде не обнаружил, деструктивного кода тоже. Вот собственно сам код:

https://hastebin.com/qujigumadu.php

Я его даже скопировал в каталог web-сервера и зашел на эту страницу. Открылась web-консоль. Ну консоль как консоль: управление файлами, запуск шелл-команд, информация о хосте, прочие дополнительные инструменты.

Собственно, вопрос: как понять, каким макаром эта штука оказалась на хосте? Что нужно донастроить, чтоб убрать дырку? Обновиться до Debian 11 не могу, потому что в нем уже PHP5 нет, а код весьма старый.

Вопрос второй - а можно ли узнать, смогли ли этой консолью воспользоваться? Я посмотрел логи - нигде доступа к /tmp или phpha* нет. Файлы самого сайта вроде как нетронутые.

Xintrea
()

Почему не создаются каталоги из DEBIAN/dirs?

 , , dpkg-deb,

Создаю deb-пакет через dpkg-deb.

В каталоге исходных файлов deb-пакета имеется файл ./DEBIAN/dirs.

В нем прописан каталог:

/var/log/ourProgramm

Однако данный каталог не создается при установке пакета. Я конечно могу прописать создание каталога в postinst, но непонятно почему он автоматически не создается?

Xintrea
()

Ошибка CMake Error: The following variables are used in this project, but they are set to NOTFOUND.

 , ,

Пытаюсь собрать far2l (https://github.com/elfmz/far2l/), и получаю следующую ошибку cmake:

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
/home/xi/work/develop/cpp/far2l/colorer/XERCESC_INCLUDE_DIR
   used as include directory in directory /home/xi/work/develop/cpp/far2l/colorer
/home/xi/work/develop/cpp/far2l/colorer/src/Colorer-library/src/XERCESC_INCLUDE_DIR
   used as include directory in directory /home/xi/work/develop/cpp/far2l/colorer/src/Colorer-library/src

-- Generating done
CMake Generate step failed.  Build files cannot be regenerated correctly.

Искал-искал в тыртырнете как можно исправить, ничего не понял, внятных объяснений из-за чего она и что с ней делать не нашел. Как исправить?

Xintrea
()

Как увидеть лог в старом PHP-проекте? Не помню где лог-файл... Не вижу лога ошибок...

 , , ,

Имеется старый рабочий проект, назовем его my-site.ru, написанный на Codeigniter 2. Он крутится на VPS под PHP 5.6. Используется nginx + php5-fpm. Система Debian Linux 9.

Я сделал минимальный контроллер, и он работает. Затем я создаю в нем ошибку:

./ci_application/controllers/hello.php

<?php
  itIsErrorString
  echo "Hello Codeigniter";
  // phpinfo();
?>

Явно тут парсер должен выдавать в лог ошибку типа:
PHP Parse error:  syntax error, unexpected 'echo' (T_ECHO) in .../ci_application/controllers/hello.php on line 3

И куда-то эту ошибку он должен писать. Но я не могу найти лог-файла с ошибкой!

В файле /etc/php5/fpm/php.ini стоит опция:
log_errors = On

Там же я ставил error_log = syslog (и перегружал nginx и php5-fpm) чтобы гарантированно увидеть ошибку в сислоге /var/log/syslog, но нет, туда ошибка не попадает.

В лог-файле самого Codeigniter тоже нет ошибок. В конфиге Codeigniter-а уровень ошибок 1 (1 = Error Messages including PHP errors):
$config['log_threshold'] = 1;


То есть, ошибки должны логироваться.

Я проверял файлы:

/var/log/php5-fpm.log
/var/log/syslog
/var/log/messages
/var/log/debug
/var/log/nginx/error.log
/var/www/my-site.ru/log/* - это каталог лога Codeigniter

Нигде ошибок скрипта не вижу.

Где блин еще искать лог?


Если это важно, вот выхлоп phpinfo() в браузере: https://hastebin.com/raw/wazayuluxi

Xintrea
()

Как добавить данные в БД только если БД пустая?

 ,

База данных PostgreSQL 9.6.

Имеется две SQL-команды.

Первая создает таблицу в БД только если такой таблицы еще нет (if not exists):

create table roles if not exists (
 id serial primary key,
 name varchar(20)
); 


Вторая должна добавлять данные в эту таблицу только, если таблица пустая. Вот заготовка для такой команды:
insert into roles (name) values
 ('user'),
 ('security'),
 ('admin');

Вопрос: как можно доработать эту команду, чтобы добавление произошло только если в таблице ничего нет? Видимо, можно получить COUNT() на SELECT, но как сравнить значение COUNT() с нулем, и если ноль - то выполнить команду? Возможно ли такое сделать только лишь синтаксисом SQL?

Xintrea
()

Как организовать выполнение временных SQL-скриптов при инсталляции DEB-пакета?

 , postinst,

Делаю самосборный DEB-пакет.

Имеется несколько SQL-скриптов, которые должны выполниться в момент инсталляции DEB-пакета, но после инсталляции нигде в системе не болтаться.

Понятно, что их вызов должен происходит в скрипте DEBIAN/postinst. Но непонятно где и как разместить сами эти скрипты.

Вот здесь написано следующее:

https://unix.stackexchange.com/questions/711654/setting-up-a-postinst-to-run-...

If sqlfile.sql is a temporary file, then install it to /usr/lib/mypkg/sqlfile.sql and use it from there in your postinst:

mysql ... < /usr/lib/mypkg/sqlfile.sql

Хм, но тогда файлы останутся в системе в каталоге /usr/lib/mypkg.

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

Как поступают в таких случаях?

Xintrea
()

Что-то мой сайт недоступен. Что за?

 , ,

Пинги на webhamster.ru не проходят.

Трейсроут ничем не заканчивается:

>traceroute webhamster.ru
traceroute to webhamster.ru (193.124.188.214), 30 hops max, 60 byte packets
 1  router.lan (192.168.88.1)  0.364 ms  0.397 ms  0.454 ms
 2  10.189.208.1 (10.189.208.1)  2.514 ms  2.923 ms  2.579 ms
 3  5.18.4.250 (5.18.4.250)  3.755 ms  2.804 ms  2.866 ms
 4  188x234x76x196.dynamic.omsk.ertelecom.ru (188.234.76.196)  11.142 ms  11.124 ms  11.198 ms
 5  188x234x76x197.dynamic.omsk.ertelecom.ru (188.234.76.197)  12.809 ms  12.103 ms  12.083 ms
 6  highspeed-peer.highspeednetwork.ru (92.63.203.97)  12.305 ms str147-peer.highspeednetwork.ru (92.63.203.107)  22.349 ms str147-5-peer.highspeednetwork.ru (92.63.203.59)  22.311 ms
 7  * * *
 8  * * *
 9  * * *

В чем может быть проблема? Недавно переносил домен с r01 на beget.com, может из-за этого? Кто виноват, что крутить?

Xintrea
()

ARM ассемблер - не пойму, заинлайнилась ли функция?

 , , ,

Пишу под STM32 (BluePill).

Есть вот такая функция:

__attribute__((always_inline, section(".ramfunc")))
uint16_t readAddressBus()
{
    // Для ускорения адрес вначале считается 32-х битным чтобы проще работать
    // с 32-х битным регистром PA, и только в конце он один раз преобразуется в 16 бит
    uint32_t addr = 0;

    // Установка на мультиплексоре сегмента адреса 00
    GPIOB->BSRR = 0 | (GPIO_BSRR_BR3_Msk | GPIO_BSRR_BR4_Msk );

    // Считывается и запоминается значение ножек сегмента 0
    addr = ((GPIOA->IDR & 0x0F00) >> 8);


    // Установка на мультиплексоре сегмента адреса 01
    GPIOB->BSRR = 0 | (GPIO_BSRR_BS3_Msk | GPIO_BSRR_BR4_Msk );

    // Считывается и запоминается значение ножек сегмента 1
    addr = addr | ((GPIOA->IDR & 0x0F00) >> 4);


    // Установка на мультиплексоре сегмента адреса 10
    GPIOB->BSRR = 0 | (GPIO_BSRR_BR3_Msk | GPIO_BSRR_BS4_Msk );

    // Считывается и запоминается значение ножек сегмента 2
    addr = addr | (GPIOA->IDR & 0x0F00);


    // Установка на мультиплексоре сегмента адреса 11
    GPIOB->BSRR = 0 | (GPIO_BSRR_BS3_Msk | GPIO_BSRR_BS4_Msk );

    // Считывается и запоминается значение ножек сегмента 3
    addr = addr | ((GPIOA->IDR & 0x0F00) << 4);

    return (uint16_t) addr;
}

Она вызывается из main loop:
__attribute__((noinline, section(".ramfunc")))
void mainLoop()
{
    ...
            // Нужно получить текущий адрес с ША
            uint16_t addr=readAddressBus();
    ...
}

В дизассемблере ARM это дело представлено таким образом:
Disassembly of section .ramfunc:

080004d0 <readAddressBus>:
 80004d0:	f44f 13c0 	mov.w	r3, #1572864	; 0x180000
 80004d4:	490d      	ldr	r1, [pc, #52]	; (800050c <readAddressBus+0x3c>)
 80004d6:	4a0e      	ldr	r2, [pc, #56]	; (8000510 <readAddressBus+0x40>)
 80004d8:	480e      	ldr	r0, [pc, #56]	; (8000514 <readAddressBus+0x44>)
 80004da:	610b      	str	r3, [r1, #16]
 80004dc:	6893      	ldr	r3, [r2, #8]
 80004de:	6108      	str	r0, [r1, #16]
 80004e0:	6890      	ldr	r0, [r2, #8]
 80004e2:	f3c3 2303 	ubfx	r3, r3, #8, #4
 80004e6:	0900      	lsrs	r0, r0, #4
 80004e8:	f000 00f0 	and.w	r0, r0, #240	; 0xf0
 80004ec:	4318      	orrs	r0, r3
 80004ee:	4b0a      	ldr	r3, [pc, #40]	; (8000518 <readAddressBus+0x48>)
 80004f0:	610b      	str	r3, [r1, #16]
 80004f2:	6893      	ldr	r3, [r2, #8]
 80004f4:	f403 6370 	and.w	r3, r3, #3840	; 0xf00
 80004f8:	4318      	orrs	r0, r3
 80004fa:	2318      	movs	r3, #24
 80004fc:	610b      	str	r3, [r1, #16]
 80004fe:	6893      	ldr	r3, [r2, #8]
 8000500:	011b      	lsls	r3, r3, #4
 8000502:	f403 4370 	and.w	r3, r3, #61440	; 0xf000
 8000506:	4318      	orrs	r0, r3
 8000508:	4770      	bx	lr
 800050a:	bf00      	nop
 800050c:	40010c00 	andmi	r0, r1, r0, lsl #24
 8000510:	40010800 	andmi	r0, r1, r0, lsl #16
 8000514:	00100008 	andseq	r0, r0, r8
 8000518:	00080010 	andeq	r0, r8, r0, lsl r0

0800051c <mainLoop>:
 800051c:	e92d 47f0 	stmdb	sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
 8000520:	2100      	movs	r1, #0
 8000522:	f44f 15c0 	mov.w	r5, #1572864	; 0x180000
 8000526:	f04f 0c18 	mov.w	ip, #24
 800052a:	f44f 3480 	mov.w	r4, #65536	; 0x10000
 800052e:	f04f 0e01 	mov.w	lr, #1
 8000532:	4a20      	ldr	r2, [pc, #128]	; (80005b4 <mainLoop+0x98>)
 8000534:	4820      	ldr	r0, [pc, #128]	; (80005b8 <mainLoop+0x9c>)
 8000536:	4e21      	ldr	r6, [pc, #132]	; (80005bc <mainLoop+0xa0>)
 8000538:	4f21      	ldr	r7, [pc, #132]	; (80005c0 <mainLoop+0xa4>)
 800053a:	f8df 8088 	ldr.w	r8, [pc, #136]	; 80005c4 <mainLoop+0xa8>
 800053e:	6893      	ldr	r3, [r2, #8]
 8000540:	f013 0fc0 	tst.w	r3, #192	; 0xc0
 8000544:	d005      	beq.n	8000552 <mainLoop+0x36>
 8000546:	2900      	cmp	r1, #0
 8000548:	d0f9      	beq.n	800053e <mainLoop+0x22>
 800054a:	f8c2 e010 	str.w	lr, [r2, #16]
 800054e:	2100      	movs	r1, #0
 8000550:	e7f5      	b.n	800053e <mainLoop+0x22>
 8000552:	6115      	str	r5, [r2, #16]
 8000554:	6883      	ldr	r3, [r0, #8]
 8000556:	6116      	str	r6, [r2, #16]
 8000558:	f3c3 2a03 	ubfx	sl, r3, #8, #4
 800055c:	6883      	ldr	r3, [r0, #8]
 800055e:	6117      	str	r7, [r2, #16]
 8000560:	ea4f 1913 	mov.w	r9, r3, lsr #4
 8000564:	6883      	ldr	r3, [r0, #8]
 8000566:	f009 09f0 	and.w	r9, r9, #240	; 0xf0
 800056a:	f8c2 c010 	str.w	ip, [r2, #16]
 800056e:	f403 6370 	and.w	r3, r3, #3840	; 0xf00
 8000572:	ea49 090a 	orr.w	r9, r9, sl
 8000576:	ea43 0909 	orr.w	r9, r3, r9
 800057a:	6883      	ldr	r3, [r0, #8]
 800057c:	011b      	lsls	r3, r3, #4
 800057e:	f403 4370 	and.w	r3, r3, #61440	; 0xf000
 8000582:	ea43 0309 	orr.w	r3, r3, r9
 8000586:	f483 4900 	eor.w	r9, r3, #32768	; 0x8000
 800058a:	f1b9 0f04 	cmp.w	r9, #4
 800058e:	bf8f      	iteee	hi
 8000590:	f04f 0988 	movhi.w	r9, #136	; 0x88
 8000594:	4443      	addls	r3, r8
 8000596:	f5a3 4300 	subls.w	r3, r3, #32768	; 0x8000
 800059a:	f893 9000 	ldrbls.w	r9, [r3]
 800059e:	6893      	ldr	r3, [r2, #8]
 80005a0:	b29b      	uxth	r3, r3
 80005a2:	ea43 2309 	orr.w	r3, r3, r9, lsl #8
 80005a6:	60d3      	str	r3, [r2, #12]
 80005a8:	2900      	cmp	r1, #0
 80005aa:	d1c8      	bne.n	800053e <mainLoop+0x22>
 80005ac:	6114      	str	r4, [r2, #16]
 80005ae:	2101      	movs	r1, #1
 80005b0:	e7c5      	b.n	800053e <mainLoop+0x22>
 80005b2:	bf00      	nop
 80005b4:	40010c00 	andmi	r0, r1, r0, lsl #24
 80005b8:	40010800 	andmi	r0, r1, r0, lsl #16
 80005bc:	00100008 	andseq	r0, r0, r8
 80005c0:	00080010 	andeq	r0, r8, r0, lsl r0
 80005c4:	20000000 	andcs	r0, r0, r0

И я вижу, что код функции readAddressBus() оттранслировался в отдельные адреса. Но я нигде не вижу вызова этой функции. При этом я вижу искаженный код данной функции внутри mainLoop(), значит readAddressBus() вроде как заинлайнилась.

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

Исходник на Си: https://github.com/xintrea/mikroshamem/blob/c00c10606dca71d3531c45f70b1169732...
Ассемблер: https://pastebin.com/gpc4tA03

Xintrea
()

Как сделать мигающую иконку в Telegram?

 , , , ,

Не могу нормально пользоваться Telegram из-за того, что все время про него забываю. Люди мне пишут, а я даже этого не вижу. Ну висит иконка и висит в трее с 100500 непрочитанными сообщениями. Зайду туда раз в неделю, посмотрю что там, может кому-то отвечу. Люди обижаются, что сразу не отвечаю. А я не вижу что мне кто-то что-то написал.

Хотелось бы как в ICQ/Miranda, если пришло личное сообщение - на иконке мигает конвертик. Если ответили в конференции - еще один конвертик другого цвета. Если и там и там - два конвертика.

DE использую LXDE.

Можно ли как-то это дело организовать на Telegram Desktop? Посмотрел на исходники - там сборка через docker, а изучать еще одну сущность - это выше моих способностей. Может, есть что-то готовое?

Xintrea
()

QML - последовательность вызовов onAccepted(), onRejected(), onClose().

 , , , ,

Сделал окошечко на базе Dialog, сделал две кнопки [OK] и [Cancel] плюс в уголку кнопка закрытия [X].

[OK] - вызывает accept()
[Cancel] - вызывает reject()
[X] - вызывает close()

И, естественно, прописал диалогу обработчики:

onAccepted() { ... Действие 1 ... }
onRejected() { ... Действие 2 ... }
onClose() { ... Действие 3 ... }

Проблема в том, что если нажать OK или Cancel, то вначале QML сгенерирует вызов onClose(), и только потом onAccepted() или onRejected().

Получается, что хочу я того или не хочу, при нажатии OK будет выполнено:

Действие 3
Действие 1

А при нажатии Cancel будет выполнено:

Действие 3
Действие 2

Но в моей программе важна последовательность действий. И мне нужно, в идеале, как-то сделать, чтобы при нажатии OK или Cancel срабатывал только тот код, который написан в их обработчике.

Если это невозможно, то хотя бы сделать так, чтобы для ОК выполнялось:

Действие 1
Действие 3

А для Cancel выполнялось:

Действие 1
Действие 2

Как этого добиться?

Другими словами: в onClose() надо каким-то образом узнать, это «чистое» закрытие окна, или закрытие через кнопку OK/Close. И дело усложняется тем, что onClose() вызывается ПЕРЕД onAccepted()/onRejected(), то есть невозможно выставить, например, переменную-флаг, на которую можно было бы ориентироваться.

Xintrea
()

Передача ассоциативного массива из QML в C++. Преобразование QJSValue в QVariantMap

 , , , ,

Имеется Qt 5.11.

Вызываю функцию из QML через JavaScript. В качестве параметра передается ассоциативный массив (индексы - строки и значения - строки).

var a;
a["one"]=odin;
a["two']=dva;

ourExemplar.ourMethod(a);

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

https://doc.qt.io/qt-5/qtqml-cppintegration-data.html

Однако все, что я могу вытащить из QJSValue - это QVariantList (это алиас QList<QVariant>). Да и то этот список будет нуливого размера.

Вот код:
void OurClass::ourMethod(QJSValue jsVal)
{
    qDebug() << Q_FUNC_INFO << "Слот ourMethod()";

    qDebug() << "Результат isObject(): "  << jsVal.isObject();
    qDebug() << "Результат isQObject(): " << jsVal.isQObject();
    qDebug() << "Результат isArray(): "   << jsVal.isArray();
    qDebug() << "Результат isVariant(): " << jsVal.isVariant();

    qDebug() << "QJSValue содержит тип " << jsVal.toVariant().userType();
    qDebug() << "Тип QVariant "     << qMetaTypeId<QVariant>();
    qDebug() << "Тип QVariantList " << qMetaTypeId<QVariantList>();
    qDebug() << "Тип QVariantMap "  << qMetaTypeId<QVariantMap>();
    qDebug() << "Тип QJSValue: "    << qMetaTypeId<QJSValue>();

    QVariantList list=jsVal.toVariant().toList();
    qDebug() << "Длинна list: " << list.size();

Вот результат:
void OurClass::ourMethod(QJSValue) Слот ourMethod()
Результат isObject():  true
Результат isQObject():  false
Результат isArray():  true
Результат isVariant():  false
QJSValue содержит тип  9
Тип QVariant  41
Тип QVariantList  9
Тип QVariantMap  8
Тип QJSValue:  1056
Длинна list:  0

Здесь видно, что isObject() и isArray() одновременно выдают true. Не знаю, должно ли так быть.

Узнать какой тип содержится в QVariant элемента списка я не могу придумать как, так как нет даже первого элемента, ведь список пустой.

В общем, задача - передать ассоциативный массив из QML в C++, но я не могу разобраться как это сделать. Везде пишется как конвертить из C++ в QML, а мне надо наоборот. У буржуев нашел вот такое:

https://lists.qt-project.org/pipermail/development/2014-September/018513.html

Но тут тоже направление из C++ в QML. Как будто из QML в C++ никто ничего структурированного не передает.

Xintrea
()

Использование Linux в качестве цифровой музыкальной студии для записи гитары (видео)

 , ,

Группа Мультимедиа

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

Linux для ГИТАРИСТА 🎸 Вместо ИМПОРТОЗАМЕЩЕНИЯ

По словам автора, он два года решал задачу использовать Linux для своего творчества, и наконец у него получилось. Поэтому он решил поделиться своими весьма специфичными знаниями с аудиторией гитарного Ютуба.

В качестве стенда используется достаточно слабый двухядерный процессор Intel E2180 без технологии Hyper Threading (т. е. всего два аппаратных потока) в рабочей станции HP DC5800 образца 2007 года. Но для задач обработки звука такой аппаратуры, на удивление, хватает.

В видео демонстрируется использование Linux в качестве гитарного процесора, показывается настройка ALSA и сервера Jack, рассказывается как настраивать задержку обработки звука в единицы миллисекунд. Так же рассказывается о запуске проприетарных и свободных программ: ToneLib, Cadense, Catia, Reaper. Автор даже смог одновременно работать в связке ALSA+Jack+PulseAudio и у него ничего не трещало. Очень подробно автор рассказал про настройку звуковой коммутации внутри Linux.

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

>>> Подробности (youtube.com)

Xintrea
()

Четыре ошибки «Нет маршрута до узла» а потом «соединение установлено» - что это?

 , , , ,

Что-то мой VPS-хостер крутил в своей сети, зачем-то вчера перегрузил мою VPS-ку, и стал мой сайт работать медленно.

Nginx показывает ошибку 504 Gateway Time-out.

В логах ошибки вида:

[error] 440#440: *103214 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 193.124.188.214, server: webhamster.ru, request: "GET /mytetrashare/index/mtb0/1510587037z3ybjqq0cv HTTP/1.0", upstream: "fastcgi://unix:/var/run/php5-fpm.sock", host: "webhamster.ru"
Проц не нагружен, памяти половина не используется, I/O небольшой, все в порядке, не знал на что грешить.

И походу нашел проблему. Фишка в том, что мои скрипты активно берут информацию с raw.githubusercontent.com. И я решил со своего сервера взять какой-нибудь файл:

И мне в ответ:
> wget https://raw.githubusercontent.com/xintrea/mytetra_syncro/master/base/0000003425/text.html             
--2022-09-08 13:53:07--  https://raw.githubusercontent.com/xintrea/mytetra_syncro/master/base/0000003425/text.html                                                                                                    
Распознаётся raw.githubusercontent.com (raw.githubusercontent.com)… 2606:50c0:8000::154, 2606:50c0:8001::154, 2606:50c0:8002::154, ...                                                                                
Подключение к raw.githubusercontent.com (raw.githubusercontent.com)|2606:50c0:8000::154|:443... ошибка: Нет маршрута до узла.                                                                                         
Подключение к raw.githubusercontent.com (raw.githubusercontent.com)|2606:50c0:8001::154|:443... ошибка: Нет маршрута до узла.                                                                                         
Подключение к raw.githubusercontent.com (raw.githubusercontent.com)|2606:50c0:8002::154|:443... ошибка: Нет маршрута до узла.                                                                                         
Подключение к raw.githubusercontent.com (raw.githubusercontent.com)|2606:50c0:8003::154|:443... ошибка: Нет маршрута до узла.                                                                                         
Подключение к raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... соединение установлено.                                                                                                   
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 8105 (7,9K) [text/plain]
Сохранение в: «text.html»                                                                                  
text.html 100%[=======================================>]   7,92K  --.-KB/s in 0,001s
2022-09-08 13:53:19 (12,0 MB/s) - «text.html» сохранён [8105/8105]

Похоже из-за этого подвисают веркеры php5-fpm, и весь сайт начинает тормозить.

Вопрос: что теперь надо крутить, чтобы соединение с raw.githubusercontent.com устанавливалось нормально? Раньше такой проблемы не было. Смогу ли я решить проблему, конфигурируя свой сервер, или без пинания хостера не обойтись? Тогда что требовать от хостера? Проблема на моей стороне? У кого-то DNS кривой? Что-то еще?

Xintrea
()

RSS подписка на новые темы