LINUX.ORG.RU

Сообщения wandrien

 

Операционная система Атлант

Красноярские программисты создали на базе Linux собственную операционную систему «Атлант», не имеющую аналогов: она позволяет удаленно управлять парком из тысяч персональных компьютеров и дистанционно обновлять на них софт без остановки рабочих процессов. Newslab поговорил с главой фирмы-разработчика и выяснил, как им удалось совершить прорыв в мире IT-бизнеса.

В общем, если без пафоса, то они сделали ПО для управления Linux-машинами в домене и продают лицензии на него.

Презентация: https://rutube.ru/video/b662f26954f52be0a7a7da819644c49f/

Интервью с разрабами: https://newslab.ru/article/999309

Официальный сайт: https://applite.ru/atlant

Что думаете?

 

wandrien ()

killall больше не killall

Расскажите мне, чего я не знаю. После апдейта ОС команды killall и pgrep перестали видеть firefox:

vadim@aquila:~$ killall -KILL firefox 
firefox: процесс не найден
Status: 1
vadim@aquila:~$ pgrep firefox 
Status: 1
vadim@aquila:~$ ps -A -o cmd | grep firefox | head -3
/usr/lib/firefox/firefox -ProfileManager --new-instance
/usr/lib/firefox/firefox -contentproc -parentBuildID 20211121002925 -prefsLen 1 -prefMapSize 253532 -appdir /usr/lib/firefox/browser 5002 true socket
/usr/lib/firefox/firefox -contentproc -childID 2 -isForBrowser -prefsLen 197 -prefMapSize 253532 -jsInit 278680 -parentBuildID 20211121002925 -appdir /usr/lib/firefox/browser 5002 true tab
vadim@aquila:~$ 

 

wandrien ()

Как прекрасен юникс-вей в 2020-х...

…не зря Майкрософт еще в 80-х хотела с ДОСа мигрировать на Юникс. Но не вышло у пацанов, не фартануло.

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

Большая часть действий делается через тупой GUI, в котором надо лазить по меню и натыкивать галки. Если нужно изменить конфиг, проверить и в случае чего вернуть как было, или протестировать разные варианты, то сидишь и надрачиваешь мышь. Система была рассчитана на людей, которые не могут выразить команду высшим достижением эволюции: человеческим языком.

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

Система всё время ставит палки в колеса, если нужно часть действий выполнить от имени администратора. Типа, запускаю ФМ с полными правами админа. Создаю в нём файл. Открываю его в Notepad++ — а всё, Notepad++ уже работает не с полными правами админа. Может это, конечно, баг самого NPP, я хз.

Интерфейсы для работы с правами доступа находятся глубоко в категории «рисовал программист» и не обновлялись со времён NT. Там под виндой даже не столько сама система прав доступа сложная, сколько GUI к ней убогий.

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

Чтобы сделать аналог линуксового «запуск фиксированной команды через sudo без пароля», нужно добавлять задание в тамошний аналог крон!. А чтобы сделать аналог «запуск фиксированной команды через sudo без пароля, но только для конкретной группы пользователей», я вообще не знаю, что делать. Тут моих навыков гуглёжки не хватило.

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

Если ты хочешь взять обычный Блокнот и написать в нём cmd-скрипт, то хрен там ночевал - Блокнот сохраняет файлы в кодировке 1251, а запускается скрипт в кодировке 866!!!! КАКОГО ХРЕНА?!

А если ты берешь весь из себя такой знаменитый Notepad++ с поддержкой кодировок и хочешь перекодировать уже написанный файл, то он не умеет конвертировать между этими кодировками!

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

Когда что-то гуглишь по вопросам системной конфигурации, обычно попадаешь или на ВИО, где отвечающий тупее вопрощающего, или на официальные места поддержки, где ответ чаще всего «такая штука в Windows не поддерживается, но вы можете попробовать самостоятельно станцевать в гамаке на лыжах», или на поисковый спам.

Эта шляпа еще и на HDD стояла, а я уже забыл, что такое 64-битная винда на HDD. Это ад и израиль, сраный лагодром с загрузками по 5 минут, во время которых пытаются просраться несколько десятков системных сервисов и еще куча говнокода в пользовательском сеансе. И пока они не просрутся, Проводник висит, и весь гуй вместе с ним. Да по сравнению с этим что systemd, что до-systemd-шная баше-лапша - просто вершины архитектуры и топ производительности.

Кен Томпсон, Деннис Ритчи, Ричард Столлман, Линус Торвальдс, и вся Red Hat целиком, и все остальные причастные к Линуксу, и еще разработчики всех BSD, и даже почившая Sun Microsystems с Солярой, СПАСИБО вам всем! Что мы имеем технологичную, конфигурируемую, понятную ОС, и даже целое множество разных ОС. И не привязаны к этой жалкой пародии на OpenVMS, мутировавшей на отравленных землях MS-DOS-а, и по какой-то злой шутке судьбы дожившей до 2020-х!

…уф. Выдохнул.

 , ,

wandrien ()

Почему gimp рендерит лютое ШГ?

В качестве примера шрифт Play, 12 pt. На самом деле с любым шрифтом та же шляпа.

Вот картинка: https://ibb.co/BstPQmd

Вот пояснения к картинке, сверху вниз:

  1. XPaint. Да-да, древнее как мамонт иксовое приложение на тулките xaw!
  2. AzPainter.
  3. Pinta. Тормозит при работе с выпадающим списком шрифтов адски. Но рендерит нормально.
  4. Gimp. По мнению gimp-а, вот так выглядит шрифт 12 pt. На самом деле при переключении между px и pt ничего не меняеется. Gimp считает, что один пункт равен одному экранному пикселю.
  5. Снова Gimp в размере 16 px / 16 pt.
  6. Inkscape.
  7. Dia. Никаких настроек DPI не нашел. 12 pt по мнению Dia выглядят так.

У меня, чёрт возьми, есть вопрос. Точнее два.

Почему gimp рендерит шрифты как говно? И как это исправить?

 ,

wandrien ()

Потокобезопасность system(3) в glibc

При чтении документации glibc обнаружил, что system(3) заявлена как потокобезопасная. Что противоречит интуитивно ожидаемому: функция манипулирует обработчиками сигналов, следовательно должна быть MT-Unsafe. Это побудило подробнее изучить вопрос и сравнить реализации в разных ОС.

Возможно пригодится кому:

 , , , ,

wandrien ()

При работе в VirtualBox мышь упирается в вертикальные стены

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

Резко кидаешь налево до упора и потом вправо - иногда разглючивает, а иногда стена просто возникает в другом месте.

Баг устойчиво воспроизводится на постоянной основе.

Куда копать?

Нагуглить не смог.

 

wandrien ()

Оформление Firefox

Обновился файрфокс и теперь выглядит как кусок чего-то неприглядного: https://ibb.co/3dpzsYX

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

Но кроме этого также бардак с меню:

  • Оформление меню не следует дефолтным цветам тулкита. В частности в данный момент - Адвайты.
  • При этом контекстное меню страницы и классическое меню по Alt остались старыми - GTK3-шными, с ними всё нормально.
  • А меню-бутерброд и меню закладок - новые в нестандартном оформлении.

Действительно, в 20-х годах XXI-го века следовать оформлению тулкита не модно. Теперь мы сами с усами, теперь у нас СТИЛЛЛЬ.

Но пока у дизайнеров СТИЛЛЛЬ, простому пользователю надо это как-то фиксить.

По панели табов решение очевидно - усилить контраст. Я перебрал десяток готовых тем, но ни в одной сочетание цветов мне не понравилось. Точнее сказать, в некоторых табы становятся ничего, но вносятся «конструктивные» измненеия в цвет строки адреса, которые мне не нужны.

С меню ситуация хуже. Во всём десятке тем ни нашлось не одной, которая меняет серенький цвет подсветки активного пункта меню на что-то другое. Цвет фона меняют, цвет текста меняют, а цвет заливки выделения - нет.

У меня начали формироваться смутные подозрения, что этот цвет прошит в лису и изменению через стили не подлежит.

Ну тем хуже для лисы - если так, придётся патчить.

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

Всем этим я займусь, наверное, на выходных.

А пока может у кого-то есть конструктивные предложения? Кто как решал эти затруднения?

 , ,

wandrien ()

Снова аппаратное шерето

Пока вы тут фантазируете про tiinn и Альфу, в эту вашу компьютерную безопасность снова постучали и сверху, и снизу.

 

wandrien ()

Браузер — это ОС :)

Я просто оставлю это здесь: http://www.windows93.net/

 

wandrien ()

Разыскивается тема оформления для Jekyll

…которая не будет выглядеть ни как SEO-шный лэндинг, ни как «хакерский блог» без стиля и оформления.

Что-то стиле блога EXL: http://exlmoto.ru

Сверху узкая шапка, сбоку лаконичное меню, по центру ясно видимый текст. Что-то в таком духе.

Что-то полистал списки готовых тем, и там всё печально.

 

wandrien ()

Программистских баек тред

Давайте, что ли, откроем локальный филиал башорга и твиттера на тему разработки. Можно рассказывать занимательные и не очень истории из жизни, байки, мемы и просто «как я провел день».

Начну.

История первая.

У меня кусок админки управляет кучкой фоновых процессов. Не напрямую, а через прослойку-супервизора. Прослойку я написал на PHP, чтобы задействовать уже готовые функции админки. А чтобы управлять фоновыми процессами, потребовалось на php из подручных средств соорудить аналог pidfile_open (3). Вот такой:

function readPidfile($pidfile) {
    /* XXX: Race conditions are everywhere. But who cares? */

    if (!file_exists($pidfile)) {
        /* No such file - daemon not running */
        return false;
    }

    $f = fopen($pidfile, "r");
    if (!$f) {
        /* Failed to open file - daemon probably not running */
        return false;
    }

    if (flock($f, LOCK_EX | LOCK_NB)) {
        /* Able to acuire lock - daemon not running */
        fclose($f);
        return false;
    }

    /* Return PID */
    $pid = fgets($f);
    return $pid;
}

Вот смотрю и думаю: какое-то нецелевое использование «макропроцессора для HTML-страниц». Ну а почему бы и нет. Работает же.

История вторая.

Сегодня пришлось повоевать с кодировками в icecast. icecast к кодировкам оказался не очень приспособлен. Вот написал им, может замерджат мой патч: https://gitlab.xiph.org/xiph/icecast-server/-/issues/2423

Но что-то сомнительно. Ход очевидный, но почему-то сами они его не делали.

 ,

wandrien ()

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

Знаю про вот такую программу для этих целей: https://github.com/fsquillace/kyrat

Есть ли более проработанный аналог?

 ,

wandrien ()

Отлаживаю кодогенератор

В свободное время попиливаю компилятор ЯП для разминки мозгов и чтобы не забыть ассемблер окончательно.

По семантике ЯП Си-подобный, по синтаксису больше похож на что-то из линейки Паскаль/Модула/Оберон.

За основу брал Context Хохлова, но перепилил практически все сорцы.

Компилятор многопроходный. Сначала строится синтаксическое дерево. Потом на нём выполняются некоторые простые оптимизации. Потом запускается бэкэнд. (Другой подход применён, например, в tcc, где программа компилируется за один проход — ради скорости компиляции.)

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

word Not(word P)
	switch Node[P].ID of
	case iOR:   Node[P].ID = iAND; Not(Node[P].pLeft); Not(Node[P].pRight);
	case iAND:  Node[P].ID = iOR;  Not(Node[P].pLeft); Not(Node[P].pRight);
	case iXOR:  Node[P].ID = iEQV;
	case iEQV:  Node[P].ID = iXOR;
	case iLT:   Node[P].ID = iGE;
	case iLE:   Node[P].ID = iGT;
	case iEQ:   Node[P].ID = iNE;
	case iNE:   Node[P].ID = iEQ;
	case iGE:   Node[P].ID = iLT;
	case iGT:   Node[P].ID = iLE;
	default:
		word P2 = Peek();
		Node[P2].ID    = iNOT;
		Node[P2].pLeft = P;
		return P2;
	end:switch

	return P;
end

Бэкэнд не строит промежуточного представления, на котором можно было бы гонять умные алгоритмы, соответственно 90% оптимизаций, описанных в «Книге дракона» невозможны. Пока я пытаюсь выжать максимум из компиляции на основе синтаксического дерева.

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

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

Оптимизация умножения на константу при помощи add, shl и lea. Пример умножения на 15 при помощи lea:

        mov     EAX,  dword [EBP-24]
        lea     EAX,  [EAX*2+EAX]
        lea     EAX,  [EAX*4+EAX]
        push    EAX
        call    @10013

Компиляция выражения put_word(v100 * 18 + v1 * 27);:

        mov     EAX,  dword [EBP-24]
        lea     EAX,  [EAX*8+EAX]
        add     EAX,  EAX
        mov     EBX,  dword [EBP-8]
        lea     EBX,  [EBX*2+EBX]
        lea     EBX,  [EBX*8+EBX]
        add     EAX,  EBX
        push    EAX
        call    @10013

Здесь умножения заменены более оптимальными инструкциями и разумно распределены регистры.

Компиляция выражения word v500 = v2 * v100 + v3 * v100;:

        mov     EAX,  dword [EBP-12]
        mul     dword [EBP-24]
        push    EAX
        mov     EAX,  dword [EBP-16]
        mul     dword [EBP-24]
        pop     EBX
        add     EAX,  EBX
        mov     dword [EBP-32], EAX

Более оптимальным кодом был бы вариант:

        mov     EAX,  dword [EBP-12]
        mul     dword [EBP-24]
        mov     EBX, EAX
        mov     EAX,  dword [EBP-16]
        mul     dword [EBP-24]
        add     EAX,  EBX
        mov     dword [EBP-32], EAX

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

Компиляция выражения put_word(v500 - v100 * v5);:

        mov     EAX,  dword [EBP-24]
        mul     dword [EBP-20]
        mov     EBX,  dword [EBP-32]
        xchg    EAX,  EBX
        sub     EAX,  EBX
        push    EAX
        call    @10013

Компилятор требует от выражения результат во вполне определённом регистре. Поэтому столкнувшись с тем, что операнды оказались в обратном порядке, он вынужден вставлять лишний xchg. Ситуацию можно решить, если разрешить выражению в ряде случаев свободно выбирать регистр для результата. Тогда код был бы таким:

        mov     EAX,  dword [EBP-24]
        mul     dword [EBP-20]
        mov     EBX,  dword [EBP-32]
        sub     EBX,  EAX
        push    EBX
        call    @10013

Компиляция выражения put_word((v500 * 2 + v2) + (v200 & v1) + (v200 - 100) * 10 - 100 - v200 - v100);:

        mov     EAX,  dword [EBP-32]
        add     EAX,  EAX
        add     EAX,  dword [EBP-12]
        mov     EBX,  dword [EBP-28]
        and     EBX,  dword [EBP-8]
        add     EAX,  EBX
        mov     EBX,  dword [EBP-28]
        sub     EBX,  100
        lea     EBX,  [EBX*4+EBX]
        add     EBX,  EBX
        add     EAX,  EBX
        sub     EAX,  100
        sub     EAX,  dword [EBP-28]
        sub     EAX,  dword [EBP-24]
        push    EAX
        call    @10013

Пример компиляции ветвлений для блока switch (табличная реализация switch пока отсутствует) :

        mov     EAX,  dword [@@DATA+EAX+7177840]
        sub     EAX, 0xD
        je      @11097
        sub     EAX, 0x3
        je      @11098
        sub     EAX, 0xFFFFFFFE
        je      @11099
        dec     EAX
        je      @11100
        sub     EAX, 0x5
        je      @11101
        dec     EAX
        je      @11102
        dec     EAX
        je      @11103
        dec     EAX
        je      @11104
        dec     EAX
        je      @11105
        dec     EAX
        je      @11106
        jmp     @11107

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

	word v0 = 0;
	word v1 = 1;
	word v2 = 2;
	word v3 = 3;
	word v5 = 5;
	word v100 = 100;
	word v200 = 200;
        xor     EAX,  EAX
        mov     dword [EBP-4], EAX
        inc     EAX
        mov     dword [EBP-8], EAX
        inc     EAX
        mov     dword [EBP-12], EAX
        inc     EAX
        mov     dword [EBP-16], EAX
        mov     EAX,  5
        mov     dword [EBP-20], EAX
        mov     EAX,  100
        mov     dword [EBP-24], EAX
        add     EAX,  EAX
        mov     dword [EBP-28], EAX

Сам компилятор полностью работоспособен, запускается в 32-разрядном режиме под виндой и линуксом и, в принципе, легко может быть портирован на другие ОС. Написан на самом себе (self-hosted) и частично обвешан тестами. Далее в планах научить его генерировать код для какой-нибудь другой системы команд. ARM, MIPS, RISC-V… что-то из этого.

Задавайте ваши вопросы.

 , ,

wandrien ()

ненормальное программирование

 , ,

wandrien ()

The letter Q in Firefox stands for Quality

Просто скормите ему бесконечный html файл с сервера, и он сожрёт сначала всю память, затем весь своп, и потом повиснет, почему-то не убившись об OOM Killer.

/me пристально смотрит на год в календаре

АААААА!

 

wandrien ()

Safely iterating over WeakKeyDictionary and WeakValueDictionary

Интернеты пишут:

It is actually safe to iterate over a WeakKeyDictionary, WeakValueDictionary, or WeakSet in Python 2.7 or Python 3.1+. They put in an iteration guard that prevents weakref callbacks from removing references from the underlying dict or set during iteration all the way back in 2010, but the docs never got updated.

With the guard in, if an entry dies before iteration reaches it, iteration will skip that entry, but it won’t result in a segfault or a RuntimeError or anything. Dead entries will be added to a list of pending removals and handled later.

Мда? Это, мять, тогда что?!

  File "/root/src/Site/SiteHelpers.py", line 84, in processReqs
    for key, req in self.peer_reqs.items():
  File "/usr/lib/python3.8/weakref.py", line 208, in items
    for k, wr in self.data.items():
RuntimeError: dictionary changed size during iteration

Не верьте интернетам.

Вариант с for k,v in list(d.items()) тоже не прокатит. На последней итерации сборщик мусора может хлопнуть list() и следом начать удалять слабые ссылки из словаря.

list() нужно хранить отдельно на протяжении итерирования:

items = list(d.items())
for k,v in items:

 

wandrien ()

Терминологическое

Подскажите, существует ли общеупотребительное название для класса уязвимостей, когда программа не фильтрует .. в пути, и атакующий получает возможность читать/писать файлы вне разрешенного каталога?

Мне надо этот кейс в документации описать, и что-то я не соображу, как этот тип бага называется.

 ,

wandrien ()

Центосей расплодилось

Пишут вот:

Компания Virtuozzo, разрабатывающая серверное ПО для виртуализации на основе открытых проектов, опубликовала выпуск дистрибутива Virtuozzo Linux 8.4, построенного путём пересборки исходных текстов пакетов Red Hat Enterprise Linux 8.4. Дистрибутив полностью бинарно совместим и идентичен по функциональности с RHEL 8.4, и может использоваться для прозрачной замены решений на базе RHEL 8 и CentOS 8. Для загрузки доступны iso-образы, размером 1.6 ГБ и 4.2 ГБ.

Virtuozzo Linux позиционируется как замена CentOS 8, готовая для рабочих внедрений. Ранее дистрибутив применялся в качестве базовой операционной системы для развиваемой компанией Virtuozzo платформы виртуализации и различных коммерческих продуктов. Теперь Virtuozzo Linux поставляется без ограничений, бесплатен и развивается при участии сообщества. Цикл сопровождения соответствует циклу выпуска обновлений для RHEL 8.

Изменения в Virtuozzo Linux 8.4 полностью соответствуют изменениям в RHEL 8.4, включая поддержку работы поверх TCP в VPN IPsec на базе Libreswan, стабилизацию декларативного API nmstate для управления сетевыми настройками, Ansible-модули для автоматизации управления доступом на основе ролей (RBAC) в IdM (Identity Management), AppStream-модули с новыми ветками Python 3.9, SWIG 4.0, Subversion 1.14, Redis 6, PostgreSQL 13, MariaDB 10.5, GCC Toolset 10, LLVM Toolset 11.0.0, Rust Toolset 1.49.0, Go Toolset 1.15.7.

В качестве альтернатив классическому CentOS 8, кроме VzLinux, также позиционируются AlmaLinux (развивается компанией CloudLinux, совместно с сообществом), Rocky Linux (развивается сообществом под руководством основателя CentOS при поддержке специально созданной компании Ctrl IQ) и Oracle Linux. Кроме того, компания Red Hat предоставила возможность бесплатного использования RHEL в организациях, развивающих открытое ПО, и в окружениях индивидуальных разработчиков, насчитывающих до 16 виртуальных или физических систем.

(https://www.opennet.ru/opennews/art.shtml?num=55445)

Я из криокамеры про такую даже не слышал. Про Oracle Linux давно знаю, про AlmaLinux и Rocky Linux тоже знаю.

В чем актуальные различия между этим формально совместимым друг с другом зоопарком? И на что теперь ориентироваться?

 , , , ,

wandrien ()

LibreOffice: выделить текст, имеющий заданное форматирование

  1. Курсор стоит внутри фрагмента текста с некоторым форматированием. Хотелось бы по хоткею иметь возможность выделить весь фрагмент, имеющий это форматирование.

  2. Курсор стоит внутри фрагмента текста с некоторым форматированием. Хотелось бы по хоткею найти все другие вхождения такого же форматирования в документе. (Ну или по одному хотя бы.)

Есть готовые решения для этого?

 ,

wandrien ()

leave, ну какой нафиг оффтопик?

В поисках любой удалённой работы

@leave, я там топикстартеру дал рабочий совет, как искать работу, которая ему нужна.

Тем не менее, это, значит, оффтопик, а то что там другие модераторы флудят не по делу — это всё нормально.

Какого черта?

 ,

wandrien ()

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