Category: it

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

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
white

Пост про тесты

Ребенок тут взялся программировать какой-то тест по обществознанию.
А я тут в процессе обсуждения вспомнил что некий подобный тест на общую эрудиию когда-то сочинил его дедушка, а я потом запрограммировал. Поискал по диску, нашел Tcl/Tk скрипт, датированный 7 июля 1999 года. Более 20 лет назад.

Попытался запустить. Пришлось LANG=ru_RU.KOI8-R ему вывставить - ну не принято тогда было юникодную локаль использовать. Но при этой единственной модификаии окружающей среды, код, которому 20 лет, взял и заработал.

Я аж сам удивился.

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

Цена эмуляции

Попробовал тут собирать пакеты в chroot с архитектурой arm64 с использованием qemu-user-emulation.
Все работает, пакетики собираются. Но...

Общее время сборки postgrespro standard 11.6.1 200 минут. Vs 10 минут 34 секунды нативного. В 20 раз.
И это еще без оверхеда на sbuild.

В случае использования system emulation будет еще хуже по-моему. Так у нас хотя бы ядро в нативном режиме работает.

В общем, подожду я пожалуй пока доедет уже заказанная реальная машинка с amd64. А пока мультиархитектурные репозитории буду отлаживать на ppc-шных пакетах. Они хоть и в chroot-е собираются, но на нативной архитектуре.

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

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

Ретропакетирование

Нетривиальная задача - собрать под Debian 10 (выпущенный в этом году) rpm-пакет так, чтобы он ставился на Alt Linux 8 (выпущенный пару лет назад). Вот под RHEL 6 (выпущенный уже 10 лет как) - проблем нет. Там проблемы начинаются в RHEL 5, который давно мертв и закопан.


Ключевая проблема - надо сделать, чтобы оно использовало совместимые (т.е. устаревшие) алгоримты сжатия и хэширования. Для чего в spec-файле нужно добавить два макроса.
%define _binary_payload w9.gzdio
%define _binary_filedigest_algorithm 1


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

Атака на NGINX

На LOR пишут, что
Компания Рамблер, в котрой 15 лет назад работал И. Сысоев, предъявила претензии на авторские права на код NGINX.

В офисе компании NGINX происходит обыск, а И. Сысоева и М.Коновалова задержали.

Насколько я понимаю, дело в том Рамблере собственник поменялся.

Руководство Рамблера в то время, когда там работал Сысоев совершенно не интересовалось правами на этот код. И следующие 15 лет не интересовалось.

См так же на /.,
на хабре и
в блоге [personal profile] beldmit.

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

Запуск hasher внутри schroot

Да, это напоминает "почему мой эмулятор 8-битной игровой коноли для 16-битной DOS звпущенный в 32-битной виртуальной машине с Windows работающей на 64-битом хосте не издает звуков?"

Но иногда приходится.

Потому что есть логин на машинку с относительно древним RHEL (7.5) и на ней хочется собирать пакеты для кучи разных дистрибутивов. Потому что у этой машинке архитектура ppc64le. Такую за копейки на aliexpress не купишь.
(впрочем, arm64 который покупается за копейки на aliexpress, для сборки пакетов тоже пригоден не слишком. Хотя надо попробовать укупить там что-то побыстрее RaspBerry PI 3B)

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

К сожалению, вот просто так взять и поставить хэшер на RHEL - мероприятие, не слишком простое и очевидное.

А вот schroot есть в EPEL.

Как оказалось, делать это следует следующим способом

  1. Качаем образ минимальной системы требуемой архитектуры с альта.
  2. Распаковываем ее в /srv/chroot/altlinux9
  3. Пишем близкий к тривиальному конфиг schroot в /etc/schroot/chroot.d
    [altlinux9]
    descriotion=AltLinux 9 with hasher
    type=directory
    directory=/srv/chroot/altlinux9
    users=vitus
    


  4. Копируем в chroot /etc/sudoers
  5. Заходим в chroot рутом (sudo schroot -c altlinux8)
    и делаем apt-get install sudo, потому что в минимальной системе sudo нет
  6. Далее, из под рута же выполняем инструкцию
  7. Выходим из chroot и копируем из chroot-а /etc/passwd, /etc/group и /etc/shadow в хост-систему
    (потому что schroot их копирует из хост-системы при каждом входе. Это можно отключить но не нужно. так как простейший chroot свойства юзера, включая членство в группе наследует из хост-системы.)
  8. Выходим из хост-системы и заходим обратно, после чего заходим в chroot уже юзером и выполняем ту часть инструкции, которая из-под юзера.

Ура, можно пересобирать пакеты.

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