QEMU 4.0 Q35 и проблемы с пробросом графики

12 Сентября, 2019
Комментарии

После обновления QEMU до 4.0 внезапно отвалилась граф. карточка (NVidia) в виртуалке. Симптомы: BSOD либо карточка не заводится с кодом ошибки 43. Я использовал эмулируемый чипсет q35 (потому что, ну что же ещё?), и, оказывается, в QEMU 4.0 поломали распределение IRQ, а драйвер по умолчанию использует IRQ, а не новомодный MSI. Если совсем вкратце, в коде машины pc-q35-4.0 поменялась настройка обработки IRQ по умолчанию, что ломает INTx на vfio-pci. Апстрим планирует откатить эти изменения в 4.1, ну а пока этого не произошло, вернуть всё как было можно добавив в определение машины q35 параметр kernel-irqchip=on, например:

qemu-system-x86_64 -enable-kvm -m $((16*1024)) \
    -M q35,kernel-irqchip=on \
    # etc

Фильтрация AAAA-записей для домена в Bind 9

29 Января, 2018
Комментарии

Последнее время чудит IPv6 на одном из серверов, а к некоторым сервисам очень хочется иметь доступ если есть хоть какой интернет. Но почему-то все клиенты очень старательно предпочитают брать AAAA-записи из DNS, даже если этот самый IPv6 явно лежит и всё что от него есть это адрес на интерфейсе.

В общем встал вопрос “а как бы убрать AAAA-запись вот для этого домена?” У Bind есть опция filter-aaaa-on-v4, которая заставляет Bind выдавать пустоту на запросы AAAA-записей от IPv4-клиентов (и аналогичная ей filter-aaaa-on-v6, которая делает то же самое для IPv6-клиентов)

Однако эту опцию нельзя применить к домену. Собственно она работает только в блоках options и view. Но можно применить грязный хак. Подробности под катом.

Читать дальше...

Макроклавиши Razer BlackWidow

29 Января, 2018
Комментарии

Решил я как-то в позапрошлом году обзавестись нормальной, кошерной клавиатурой. С приятно щёлкающими механическими Cherry MX Blue. В общем купил Razer BlackWidow (2013 edition). Всё хорошо, но есть у этой клавиатуры 5 макро-клавиш, которые под Linux ну никак не заводятся, ни как макро, ни просто так. Оказывается, хитрый Razer включает их только по команде от “родного” драйвера, который, понятно, под линукс не рассчитан.

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

Читать дальше...

Epson Perfection V10

15 Сентября, 2017
Комментарии

Давным-давно пытался я пользоваться сканером Epson Perfection V10. И была у него одна беда: работал он либо под Windows, либо под i386, а на x86_64 драйверов не было. Недавно достал его с полки, сдул пыль, и решил узнать, не изменилось ли чего. Оказалось – изменилось!

Читать дальше...

Модули VirtualBox 5.1.22 на ядре 4.12

12 Июля, 2017
Комментарии

Проблема: модули ядра VirtualBox текущей версии не дружат с ядром линукс 4.12 (последним на данный момент). В причины углубляться не будем, скажем только что несколько поменялось управление виртуальной памятью. Решение под катом.

Читать дальше...

Экспорт bibTeX

13 Марта, 2017
Комментарии

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

Простой способ получить biblatex-файл, в котором содержатся только использованные в документе ссылки возможно следующим образом:

  • bibexport -o outfile.bib ${document}.aux при использовании непосредственно bibtex
  • biber --output-format=bibtex ${document}.bcf при использовании biber

Определить использование последнего можно по факту наличия bcf-файла после сборки документа.

Кстати, пока не забыл, беспроблемная сборка:

latexmk --outdir=build -f -pdf $document

Closure-Compiler и ghcjs

13 Марта, 2017
Комментарии

Ghcjs оказывается иногда незаменим если хочется Хаскеля в JavaScript-окружении. Однако его выдача имеет нередко просто чудовищные размеры.

Решить (или по крайней мере уменьшить) проблему размера возможно с помощью гугловского closure-compiler. Однако в случае сборки под node.js возникает трудность: ADVANCED_OPTIMIZATIONS ломают названия нодовских функций. И все, привет. Есть, само собой, https://github.com/dcodeIO/ClosureCompiler.js, но он отмечен как outdated.

В общем, можно достичь нужного эффекта руками. Для этого следует клонировать https://github.com/dcodeIO/node.js-closure-compiler-externs и включить параметром --externs все *.js файлы оттуда. Вручную это, конечно, грустно. Поэтому я набросал вот такой вот скрипт:

#!/bin/bash
closure-compiler $1.jsexe/all.js --compilation_level=ADVANCED_OPTIMIZATIONS $(ls node.js-closure-compiler-externs/*.js | sed 's/^/--externs=/') --externs=$1.jsexe/all.js.externs > $1.js

Он, само собой, ужасен, но нужного эффекта достичь позволяет.

Замечание: гарантий, что extern’ы корректные, ни у кого нет. Поэтому что-то в каких-то случаях может ломаться совершенно случайным образом. Используйте на свой страх и риск.

Явное указание внешнего интерфейса у systemd-networkd-wait-online

10 Февраля, 2017
Комментарии

Проблема

При нестандартной конфигурации сети, systemd-networkd-wait-online отваливается с таймаутом.

В логах при этом можно найти что-то такое:

systemd-networkd-wait-online[...]: Event loop failed: Connection timed out

Само собой, сервисы, зависящие от systemd-networkd-wait-online, не стартуюут.

Решение

Решение ситуации – явно указать внешний интерфейс, который должен быть поднят чтобы считать сеть рабочей. Сделать это можно, например, создав файлик /etc/systemd/system/systemd-networkd-wait-online.service.d/exec.conf следующего содержания:

[Service]
ExecStart=
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online -i <interface-name>

Вместо <interface-name> следует вставить название интерфейса, например, br0.

Заодно это решает проблемы на системах с несколькими сетевыми интерфейсами, когда только один из них можно считать “основным”, и если он не поднялся – сети еще, в широком смысле слова, нет.

Как обмануть систему или letsencrypt на shared-хостинге с CPanel

10 Февраля, 2017
Комментарии

С повсеместным пришествием HTTPS в массы, а особенно в связи с тем, что браузеры собираются помечать HTTP-сайты как небезопасные, возникает резонный вопрос: как сделать себе HTTPS задешево.

Раньше был вариант воспользоваться сервисом starttls/startssl, но в новых версиях Google Chrome и Mozilla Firefox их сертификаты блокируются, что еще хуже, чем отсутствие HTTPS вовсе.

С другой стороны, есть новый-модный-молодежный letsencrypt. Но если нет желания каждые три месяца подтверждать домен вручную (что долго и муторно), нужно гонять на целевом сервере утилиту (например, certbot), а это значит как минимум нужен SSH-доступ, ну или на худой конец webshell, которые прямо скажем не так-то просто организовать.

Дополнительно ситуация усугубляется тем, что на shared-хостинге установка certbot, даже при наличии shell-доступа, может быть совсем отдельным развлечением для мсье, знающих толк.

А что делать если у Вас копеечный shared-хостинг, на котором вообще ничего нет кроме CPanel, MySQL и апача?

Читать дальше...

Шпаргалка по xdg-open

8 Марта, 2016
Комментарии

Небольшая заметка про xdg-open. Эта утилита открывает файлы или URI “наиболее подходящим” приложением, как записано в файлах *.desktop.

Увы, как показывает практика, “наиболее подходящим” оказывается нередко какой-нибудь Firefox, что явно не всегда самое удачное решение.

Читать дальше...