Category: it

Category was added automatically. Read all entries about "it".

white

К вопросу о статической валидации

Оказывается, бывают статические валидаторы не только для C или Go, но и для шелловских скриптов.
ТУт вот у Раймодна вчера вычитал, что
существует shellcheck и в дистрибутиве он с незапамятных времен есть. И даже в EPEL - и то есть.

Надо, пожалуй, начать пользоваться. К pylint я уже приучился, надо и к этому.

This entry was originally posted at https://vitus-wagner.dreamwidth.org/2148954.html. Please comment there using OpenID. Now there are comment count unavailable comments
white

К вопросу о всеобщем онлайне

В пятницу запускали тесты, тесты на Astra Linux common edition отвалились потому, что у сайта downloads.astralinux.ru заэкспайрился HTTPS сертификат. Сегодня запускали тесты, тесты на RedOS и Goslinux отвалились потому, что поломался DNS домена red-soft.ru. Интересно у кого что-нибудь сломается завтра - у Редхата или у в Альт?

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

This entry was originally posted at https://vitus-wagner.dreamwidth.org/2145887.html. Please comment there using OpenID. Now there are comment count unavailable comments
white

Раймонда в OSI забанили

http://esr.ibiblio.org/?p=8609

Найти в биографии Раймонда случаи сексуального харрасмента (как поступили со Столлманом) им не удалось. У Раймонда жена есть. Поэтому пришлось расчехлисться и в качестве формального повода для исключения выставить
жесткую позицию, занятую им против отмены пунктов 5 и 6 Open Source Definition.

5. No Discrimination Against Persons or Groups

The license must not discriminate against any person or group of persons.

6. No Discrimination Against Fields of Endeavor

The license must not restrict anyone from making use of the program in a specific field of endeavor. For example, it may not restrict the program from being used in a business, or from being used for genetic research.


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

Вообще, я уже очень давно говорю что по мере того, как производительные способности человечества позволяют накормить досыта всех, экономика голода меняется на экономику иррационального запрета. Если раньше можно было почувствовать себя круче других, демонстрируя своё богатство тем или иным способом (в том числе иногда и путем создания общественно полезных штуковин), то сейчас основной способ продемонстрировать свою крутизну - это возможность кому-то что-то безнаказно запрещать. Началось это в конце 70-х с копирайта. Теперь вот уже проникло в open source тусовку в виде Codes of Conduct.

This entry was originally posted at https://vitus-wagner.dreamwidth.org/2144752.html. Please comment there using OpenID. Now there are comment count unavailable comments
white

Атомизация интернета

Lets Encrypt празднует выдачу миллиардного сертификата. И с гордостью сообщает, что сейчас 81% траффика в мире идет по https.
Мозилла планирует включить поддержку DNS over HTTPS.

Все дружно радуются. А по-моему, и то и другое - ПЛОХИЕ новости.

HTTPS вместо HTTP, это значит прощай кэширующие прокси, прощай антивирусы и баннерорезалки на роутерах.

DNS over HTTPS в БРАУЗЕРЕ это еще хуже. Это значит что мы не доверяем не только роутеру нашей локальной сети, нои и локальному DNS-резолверу того устройства, на котором запущен браузер. Зато доверем каким-то хренам с горы в Cloudflare.

У меня, между прочим на работе 80% запросов к веб-страницам это запросы к внутренним ресурсам локальной сети. И получается что если я не прослежу за настройками в резолвере при апгрейде файрфокса, он начнет с помощь DNS over HTTPS закладывать в CloudFlare структуру нашей корпоративной локальной сети.

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

Upd:
echo "local=/use-application-dns.net/" >/etc/dnsmasq.d/stop-doh.conf && service dnsmasq restart


This entry was originally posted at https://vitus-wagner.dreamwidth.org/2144330.html. Please comment there using OpenID. Now there are comment count unavailable comments
white

Про screen - 2

Общими усилиями в предыдущей дискуссии мы нашли решение, которое меня более-менее устраивает.

Удалось добиться следующего:

1. При входе по ssh автоматически запускается screen. Вернее, подцепляется старый если он есть или запускается новый, если нет.
2. При открытии окна терминала в сессии LXDE наиболее привычным для меня способом, это окно тоже подцепляется к существующему screen (открывая внутри него новое окно). Чтобы получить чистый xterminal без screen нужно сделать на пару кликов мышкой больше.

Соответсвенно, при обрыве связи, падении X-сервера или необходимости выйти из X-сессии, процессы запущенные в терминалах продолжают работать.

При этом в screen доступен ssh-agent последней начавшейся сессии (GUI-шной или ssh-ной).
Заморачиваться и делать стэк сессий. чтобы если последнюю сессию закрыли раньше предпоследней, ssh-агент от предпоследней продолжал работать, я не стал.

Недостатки у получившегося решения следующие:

1. Не работает полоса прокрутки у LXTerminal. Прокручивать вывод приходится средствами screen.
2. Если у нас много машин с таким сетапом и мы постоянно ходим с одной через другую на третью, то
придется долго думать сколько букв a нажимать между Ctrl-A и d. Все усложняется тем, что у меня есть несколько машин, на которых я могу сидеть в сессии LXDE за локальным экраном, и на все из этих машин я могу зайти по ssh из сессии на другой машине.
3. Распихивать эту конструкцию по пяти десяткам виртуалок и контейнеров - лень. Может и правда собраться и сделать там bind-mounted ${HOME}?
4. И совсем уж засада если есть машины куда несколько человек ходит одним и тем же пользователем. [personal profile] beldmit, помнишь казахскую HP/UX с "Warning, you are igus" в /etc/issue?

Делается это так:

1. В .profile (для входа по ssh) и в .xsessionrc (для lxde) если определена переменная SSH_AUTH_SOCK, делается симлинк с этого сокета на сокет с фиксированным именем. (если у вас ${HOME} используется на нескольких машинах, то либо включайте в это имя $(hostname), либо выбирайте его в /tmp или /run)
2. Переменная переустанавливается, чтобы показывала на это фиксированное имя.
3. Последней строчкой в .profile пишется exec screen -xRR
4. Шорткат в GUI-сессии, через который чаще всего открывается окно терминала, переопределяется так чтобы сразу запускал в этом терминале screen -x -p +

security implications у этого, как мне кажеется, минимальные. Если кто-то может читать аутентификационный сокет ssh-agent, то этот кто-то с тем же самом успехом прочитает /proc/*/environ и найдет там значение SSH_AUTH_SOCK для нужного ему пользователя.

Конечно, если у нас NFS-mounted ${HOME} (у меня таких, к счастью, нет), то придется либо создавать симлинк на сокет за пределами ${HOME}, в /tmp или /run, либо вписывать в его имя $(hostname).

This entry was originally posted at https://vitus-wagner.dreamwidth.org/2140734.html. Please comment there using OpenID. Now there are comment count unavailable comments
white

Про screen

На старости лет, наконец, научился запускать screen в detached mode
В смысле чтобы он сразу в бэкграунд уходил а потом можно было подцепиться и посмотреть что он там делает.
screen -d -m команда

Осталось собраться и прикрутить это к какому-нибудь стартап-скрипту.

Теперь бы еще ключиком -x выучиться пользоваться.

И поигтаться с
ssh-agent screen -D -m команда


(потому что -D и -d это разные вещи, равно как -r, -R и -RR).

Вот бродит у меня мысль что кнопка открытия окна терминала по умолчанию должна запускать не просто shell, а

screen -x -p +


Это правда не спасет от того, что по завершению сеанса LXDE накроется агент.

This entry was originally posted at https://vitus-wagner.dreamwidth.org/2139279.html. Please comment there using OpenID. Now there are comment count unavailable comments
white

Чего только люди не знают

Что-то периодически меня приводят в полный ступор пробелы в знаниях у коллег.
Ну ладно, когда инженер-саппортер не знает какие права должны быть у /dev/null. Он в конце концов, не сисадмин, и даже не совсем DBA, а почти продажник.

Но когда человек, использующихй в качестве рабочего места ubuntu и явно имеющий опыт админстрирования веб-серверов, не знает зачем команде tail ключик -f, и чем полезна команда less...

Самое интересное я сегодня обнаружил объясняя, как получить доступ по ssh к виртуальной машине qemu с -net user, человеку который уже успел себя в моих глазах зарекомендовать как очень неплохой разработчик.
Когда я объянял как с помощью опции hostfwd прокинуть некий порт хоста на 22-й порт виртуалки, я получил можно скахать поддых вопрос "а откуда известно, что порт должен быть 22?". То есть понятие well-known ports в современное высшее IT-образование не входит. Надо вообще будет девочку спросить, знает ли она что такое IANA и чем эта организация занимается.

(три абзаца в этом посте про трех разных коллег)

This entry was originally posted at https://vitus-wagner.dreamwidth.org/2137620.html. Please comment there using OpenID. Now there are comment count unavailable comments
white

Свободу семерке

https://www.fsf.org/windows/upcycle-windows-7

Тут fsf опубликовала петицию к Микрософт с призываом открыть код Windows 7.
Мол, раз вы не собираетесь поддерживать это, позвольте юзерам делать это самим.

Но что-то энтузимазма у народа оно не вызывает. Больше суток уже висит, и меньше тысячи подписалось.

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

This entry was originally posted at https://vitus-wagner.dreamwidth.org/2134994.html. Please comment there using OpenID. Now there are comment count unavailable comments
white

Этот жуткий язык C

Имеем следующую структуру данных
typeed enum {
    ST_A,
    ST_B,
    ST_C} status_status;
typedef int id_type;
typedef struct state {
    id_type id;
    status_type status;
} state_type

state_type *status_array = malloc(nmember*sizeof(state_type)); /* ну на самом деле там palloc, но не будем придираться */

Далее где-то далеко в коде
memcmp(status_array1, status_array2, nmember*sizeof(state_type)


Все замечательно. Но вот меняем определение id_type на long, и...

Оказывается что в конце каждого элемента массива у нас 32 неинициализрованных бита. И в случае совпадения
первых элементов массивов результат сравнения не определен.

На самом деле все еще интереснее - допустим у нас там был long. Под виндой и на 32-битном Linux все нормально, там sizeof(int)==sizeof(long)==sizeof(enum). Но приходим на 64-битный Linux и ба-бах...

Хорошо, что есть valgrind, который такие штуки ловит.

Призовая игра - что дороже жизнь или сэкономленная минута тратить время на зачистку выделенной памяти calloc-ом (palloc0) и сравнивать на четверть больше байт, но используя крайне оптимизированный авторами стандартной библиотеки memcmp, или написать свою функцию сравнения, которая будет аккуратно обходить неинициализированные байты?

This entry was originally posted at https://vitus-wagner.dreamwidth.org/2133982.html. Please comment there using OpenID. Now there are comment count unavailable comments
white

Все врут календари.

Поразвлекался еще тут немного с не самым мейнстримным календарным софтом - vCalendar plugin к claws-mail
и calcurse.

Задача, которую хочется решить - это обеспечить нормальную синхронизацию между андродидным календарем и десктопным с использованием своего caldav сервера (в качестве которог у меня radicale).

То есть получается следуюая картина:

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

vCalendar plugin умеет импортировать ics. И даже автоматически его обновалять. В режиме чтения все нормально.
Но вот создавать новые события он будет не в импортированном календаре а в своем собственном (они выглядят в дереве папок как две соседние папки внутри vCalendar).

Он умеет экспортировать свой календарь в .ics-файл. Но в другой. И даже вызывать указанную программу после экспорта. И при этом:

1. Делает его нечитаемым для питоновского модуля vobject, на базе котрого сделан radicale. Путем добавления туда некоторых полей с датой 0000000T000000 на которые питон весьма обоснованно ругается "не бывает нулевого месяца".
2. экспортирует не только новые события но и те, которые были эксполртированы.
3. Таймзону ставит GMT.

Следовательно, если я хочу обратно засинхронизировать события, измененные в claws-mail в radicale, мне нужно
0. Перед разбором средствами модуля vobject удалить поля с некорректной датой.
1. Выцепить из экспортированного файла новые события
2. Поменять им временную зону на ту, которую использует radicale
3. Скопировать их в тот календарь, который синхронизирует vdirsyncer.

В принципе все это на питоне через тот же vobject делается в два экрана. Но может быть лучше взять исходники плагина и поправить. (хотя это -то придется делать на C++).

Что касается calcurse, то при всех его симпатичных свойствах он использует собственный формат хранения, а не ics. И при повтороном импорте изменившегося ics-файла дублирует события - отфильтровать по uid не догадыватеся.
Зато его можно повесить обработчиком mime-тип text/calendar в текстовый почтовый клиент вроде mutt.
Но только если этот клиент у вас единственный и ни с чем синхронизировать его вы не хотите. Или по крайней мере все остальные календари будут read-only.

Возникает мысль взять питоновские модули curses и написать программму с интерфейсмо в точности как у calcurse, но использующую в качестве backend-хранилища ics-файл, синхронизируемый vdirsyncer-ом.

This entry was originally posted at https://vitus-wagner.dreamwidth.org/2127183.html. Please comment there using OpenID. Now there are comment count unavailable comments