Задачка на #bootstrap
Вот есть у нас shell pipeline, например, "a | b | c".
При этом мы совершенно точно знаем, что, после завершения этого pipeline, shell завершает работу.
Поэтому мы хотим оптимизировать этот pipeline так, чтобы shell закончил свою работу ДО того, как начнет выполняться эта команда.
Звучит дико? Как это, завершить шелл, когда он должен что-то actually do?
У нас есть два инструмента:
* мы знаем, что shell не занимается копированием данных через |. Он просто при старте процессов соединяет их stdin/stdout через pipe.
* у нас есть команда exec, которая умеет заменять shell на другую программу, при этом, новый процесс создан не будет, потому что это эквивалетно вызову exec() ядра.
Семантически я хочу сделать что-то вроде:
exec (a | b| c)
или
a | b | exec c
Понятно, что я имею в виду? Хочется сделать так, чтобы shell "настроил" все, а потом сделал exec в последнюю программу pipeline, и больше не мешался под ногами. Предложенные варианты эту задачу не решают (а почему?)
Предлагайте решения этой задачи. Сразу скажу, что я знаю "красивое" решение для bash, и не знаю для POSIX shell (знаю очень некрасивое).
Вот есть у нас shell pipeline, например, "a | b | c".
При этом мы совершенно точно знаем, что, после завершения этого pipeline, shell завершает работу.
Поэтому мы хотим оптимизировать этот pipeline так, чтобы shell закончил свою работу ДО того, как начнет выполняться эта команда.
Звучит дико? Как это, завершить шелл, когда он должен что-то actually do?
У нас есть два инструмента:
* мы знаем, что shell не занимается копированием данных через |. Он просто при старте процессов соединяет их stdin/stdout через pipe.
* у нас есть команда exec, которая умеет заменять shell на другую программу, при этом, новый процесс создан не будет, потому что это эквивалетно вызову exec() ядра.
Семантически я хочу сделать что-то вроде:
exec (a | b| c)
или
a | b | exec c
Понятно, что я имею в виду? Хочется сделать так, чтобы shell "настроил" все, а потом сделал exec в последнюю программу pipeline, и больше не мешался под ногами. Предложенные варианты эту задачу не решают (а почему?)
Предлагайте решения этой задачи. Сразу скажу, что я знаю "красивое" решение для bash, и не знаю для POSIX shell (знаю очень некрасивое).
Будни #bootstrap, #homelab, #lab
Я тут, раз уж у меня большой парк личного железа в личном ДЦ, запилил новый flavor stal/#ix - server. Включение его выглядит вот так - https://github.com/pg83/ix/blob/main/pkgs/set/system/0/server/ix.sh
А используется вот так - https://github.com/pg83/ix/blob/main/pkgs/set/system/0/unwrap/ix.sh#L6
По сути, немного другой набор софта, собранного с чуть другими флагами. Реально, зачем на сервере нужен console greeter, и зачем на сервере нужен iwd? Вряд ли кто-то в своем уме будет гонять серверные нагрузки через wifi.
Так же там отключены демоны звука, seatd, и так далее.
Чуть более интересна вот эта вот строчка - https://github.com/pg83/ix/blob/main/pkgs/set/system/0/unwrap/ix.sh#L7
Тут написано, что у меня на серверах полностью отсутствуют (штатные) privilege escalation механизмы.
Я несколько раз писал, что у меня нет #suid бинарей вообще, и что для повышения привилегий у меня используется кастомно перепиленный ssh daemon, с авторизацией по ключам. То есть, повысить привилегии может тот, у кого есть правильный ключ, а не пароль от рута. (https://xn--r1a.website/itpgchannel/1544 #suid)
Вот, в серверном варианте я решил, что даже это не надо, и убрал этот механизм из поставки.
Зачем? А не знаю, зачем.
За все время эксплуатации своей #lab мне ни разу не пришлось им воспользоваться. В целом, пакетная система работает очень хорошо, и мне ни разу не пришлось заниматься recovery. А если бы было надо - то у меня временно на vt 1 каждого сервера запущена рутовая консолька, физически доступная только в моем ДЦ.
Поэтому ответ - "а почему бы и нет, попробуем пожить так".
Я тут, раз уж у меня большой парк личного железа в личном ДЦ, запилил новый flavor stal/#ix - server. Включение его выглядит вот так - https://github.com/pg83/ix/blob/main/pkgs/set/system/0/server/ix.sh
А используется вот так - https://github.com/pg83/ix/blob/main/pkgs/set/system/0/unwrap/ix.sh#L6
По сути, немного другой набор софта, собранного с чуть другими флагами. Реально, зачем на сервере нужен console greeter, и зачем на сервере нужен iwd? Вряд ли кто-то в своем уме будет гонять серверные нагрузки через wifi.
Так же там отключены демоны звука, seatd, и так далее.
Чуть более интересна вот эта вот строчка - https://github.com/pg83/ix/blob/main/pkgs/set/system/0/unwrap/ix.sh#L7
Тут написано, что у меня на серверах полностью отсутствуют (штатные) privilege escalation механизмы.
Я несколько раз писал, что у меня нет #suid бинарей вообще, и что для повышения привилегий у меня используется кастомно перепиленный ssh daemon, с авторизацией по ключам. То есть, повысить привилегии может тот, у кого есть правильный ключ, а не пароль от рута. (https://xn--r1a.website/itpgchannel/1544 #suid)
Вот, в серверном варианте я решил, что даже это не надо, и убрал этот механизм из поставки.
Зачем? А не знаю, зачем.
За все время эксплуатации своей #lab мне ни разу не пришлось им воспользоваться. В целом, пакетная система работает очень хорошо, и мне ни разу не пришлось заниматься recovery. А если бы было надо - то у меня временно на vt 1 каждого сервера запущена рутовая консолька, физически доступная только в моем ДЦ.
Поэтому ответ - "а почему бы и нет, попробуем пожить так".
👍17🤔4🆒2
Захотел добавить в свой home #lab инсталляцию #minio.
Ну потому что у меня сейчас зеркало #stal/ix копируется на 3 хоста rsync-ом, для надежности, но, кажется, надо попробовать что-нибудь более индустриальное, с кворумом.
Так что я:
* Выяснил, что конфигурация < 3 хостов, < 3 дисков, меня не устаривает. 3x3 - самое то, с точки зрения выпадения хоста/диска.
* Выяснил, что до требуемого числа дисков мне не хватает "чуть-чуть", но придется разобрать зеркала, и прочие массивы.
* Решил, что а нафиг мне выделенные диски под систему, и решил, что нужно, в срочном порядке, опробовать новую (для меня) схему установки stalix. Я давно хотел попробовать схему "налить универсальную флешку", которую, если вставить в правильный usb порт какого-то хоста, то она дальше все сделает сама - получит нужную конфигурацию, in place переконфигурируется под нужную роль, и продолжит работать. Да, да, система - на внешней флешке, воткнутой в usb port. Наверное, дико, но, с точки зрения введения нового хоста в строй для меня это явная экономия усилий, ну и место не пропадает почем зря.
* Пока учился устанавливать EFI + GRUB на флешку, пару раз убил загрузчик своего ноутбука.
* Выяснил, что, чтобы плавно мигрировать кворумные инсталляции сервисов, мне немного не хватает выразительной мощи язычка описания конфигураций.
* И вот, я здесь, продолжаю информировать почтеннейших слушателей о своих "приключениях"!
Ну потому что у меня сейчас зеркало #stal/ix копируется на 3 хоста rsync-ом, для надежности, но, кажется, надо попробовать что-нибудь более индустриальное, с кворумом.
Так что я:
* Выяснил, что конфигурация < 3 хостов, < 3 дисков, меня не устаривает. 3x3 - самое то, с точки зрения выпадения хоста/диска.
* Выяснил, что до требуемого числа дисков мне не хватает "чуть-чуть", но придется разобрать зеркала, и прочие массивы.
* Решил, что а нафиг мне выделенные диски под систему, и решил, что нужно, в срочном порядке, опробовать новую (для меня) схему установки stalix. Я давно хотел попробовать схему "налить универсальную флешку", которую, если вставить в правильный usb порт какого-то хоста, то она дальше все сделает сама - получит нужную конфигурацию, in place переконфигурируется под нужную роль, и продолжит работать. Да, да, система - на внешней флешке, воткнутой в usb port. Наверное, дико, но, с точки зрения введения нового хоста в строй для меня это явная экономия усилий, ну и место не пропадает почем зря.
* Пока учился устанавливать EFI + GRUB на флешку, пару раз убил загрузчик своего ноутбука.
* Выяснил, что, чтобы плавно мигрировать кворумные инсталляции сервисов, мне немного не хватает выразительной мощи язычка описания конфигураций.
* И вот, я здесь, продолжаю информировать почтеннейших слушателей о своих "приключениях"!
👍22😁9❤4🤩3🤡1
https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/6212
#GNOME #gtk moment
К чувакам пришли с реализацией уже принятого в wayland протокола, на что им, в своей уникальной манере, ответили, что для GTK/GNOME от реализации этого протокола пользы не будет. Речь идет о server side cursor. Попытка решить очень древнюю проблему с неконсистентностью курсовров в разных приложениях (напомню, что поверхность с курсором отдает клиент, и это может быть вообще все, что угодно).
Они, на полном серьезе, сравнивают курсор (который, на минуточку, может быть отрисован не только клиентом, а еще композитором, когда курсор находится вне любого клиента, или клиентом другого DE), и рендеринг шрифтов - https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/6212#note_2056112
Цикл моих заметок про курсоры в Wayland:
https://xn--r1a.website/itpgchannel/185
https://xn--r1a.website/itpgchannel/1214
https://xn--r1a.website/itpgchannel/246
https://xn--r1a.website/itpgchannel/854
https://xn--r1a.website/itpgchannel/1758
Нет слов.
https://www.opennet.ru/opennews/art.shtml?num=60847
А вот "правильный" заход в #Wayland - #SDL говорят, что не будут включать Wayland по дефолту, пока им не запилят два нужных расширения. И тут уж коллегам из Wayland придется прогнуться, потому что один из основных потребителей SDL - Valve, которая сейчас пилит половину десктопного кода под Linux (стек драйверов, компиляторов шейдеров, да и свои компизиторы у них есть https://github.com/ValveSoftware/gamescope). Все #хорошее в графическом стеке Linux делают корпорации!
Будьте уверены, в данном вопросе все пойдет, как по маслу. Потому что одно дело, когда что-то нужно сообществу, тогда можно поломать комедию и повыебываться, а другое дело - когда оно нужно уважаемым людям, которые непосредственно вас кормят.
Вообще, бесит меня этим современный open source, что люди, которые нихуя не делают, а простосидят на трубе обладают паролем от нужного репозитория, палец о палец не пошевелят, пока у задачи не найдется спонсор с деньгами. Если бы эти негодяи просто сами не писали код - это еще полбеды, но они тупо не пропускают нужные изменения в код.
#GNOME #gtk moment
К чувакам пришли с реализацией уже принятого в wayland протокола, на что им, в своей уникальной манере, ответили, что для GTK/GNOME от реализации этого протокола пользы не будет. Речь идет о server side cursor. Попытка решить очень древнюю проблему с неконсистентностью курсовров в разных приложениях (напомню, что поверхность с курсором отдает клиент, и это может быть вообще все, что угодно).
Они, на полном серьезе, сравнивают курсор (который, на минуточку, может быть отрисован не только клиентом, а еще композитором, когда курсор находится вне любого клиента, или клиентом другого DE), и рендеринг шрифтов - https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/6212#note_2056112
Цикл моих заметок про курсоры в Wayland:
https://xn--r1a.website/itpgchannel/185
https://xn--r1a.website/itpgchannel/1214
https://xn--r1a.website/itpgchannel/246
https://xn--r1a.website/itpgchannel/854
https://xn--r1a.website/itpgchannel/1758
Нет слов.
https://www.opennet.ru/opennews/art.shtml?num=60847
А вот "правильный" заход в #Wayland - #SDL говорят, что не будут включать Wayland по дефолту, пока им не запилят два нужных расширения. И тут уж коллегам из Wayland придется прогнуться, потому что один из основных потребителей SDL - Valve, которая сейчас пилит половину десктопного кода под Linux (стек драйверов, компиляторов шейдеров, да и свои компизиторы у них есть https://github.com/ValveSoftware/gamescope). Все #хорошее в графическом стеке Linux делают корпорации!
Будьте уверены, в данном вопросе все пойдет, как по маслу. Потому что одно дело, когда что-то нужно сообществу, тогда можно поломать комедию и повыебываться, а другое дело - когда оно нужно уважаемым людям, которые непосредственно вас кормят.
Вообще, бесит меня этим современный open source, что люди, которые нихуя не делают, а просто
GitLab
wayland: implement cursor_shape_v1 (!6212) · Merge requests · GNOME / gtk · GitLab
This implements https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/194 Let me know if there's a more specific place that _gdk_wayland_cursor_get_enum would fit. Also, would a...
👍12🤯6😭3😢2💯1
"а мне 3 ящика водки, и Михаила обратно" (шутка, понятная узкому кругу лиц, хехе)
🔥41❤9😁6👍2🤔1
commit -m "better"
#vendor Сегодня про еще один механизм де-вендоринга, который я называю "кузькина мать". https://github.com/pg83/ix/blob/main/pkgs/bld/devendor/devendor.sh Этот скрипт я применяю, когда авторы кода не предусмотрели никакой возможности отключить завендоренную…
#vendor
Пришлось на днях снова применить "кузькину мать".
На этот раз по тележеньке - https://github.com/pg83/ix/commit/d64dfd7a674571ee331df253942cef270851f72e
Потому что эти господа, видимо, наслаждаются своей ересью в виде scudo allocator (https://xn--r1a.website/itpgchannel/1494). А мне мил мой #tcmalloc (https://xn--r1a.website/itpgchannel/328), потому что с ним памяти жреть меньше, и скроллинг плавнее.
У меня со scudo allocator тоже собрана пара программ, типа ssh server, который я использую для эскалации привилегий в системе, там это оправдано.
Так как конечный продукт, в итоге, собираю я, то я и навязал свою точку зрения в виде tcmalloc.
Пришлось на днях снова применить "кузькину мать".
На этот раз по тележеньке - https://github.com/pg83/ix/commit/d64dfd7a674571ee331df253942cef270851f72e
Потому что эти господа, видимо, наслаждаются своей ересью в виде scudo allocator (https://xn--r1a.website/itpgchannel/1494). А мне мил мой #tcmalloc (https://xn--r1a.website/itpgchannel/328), потому что с ним памяти жреть меньше, и скроллинг плавнее.
У меня со scudo allocator тоже собрана пара программ, типа ssh server, который я использую для эскалации привилегий в системе, там это оправдано.
Так как конечный продукт, в итоге, собираю я, то я и навязал свою точку зрения в виде tcmalloc.
GitHub
obey my rules · pg83/ix@d64dfd7
ix package manager. Contribute to pg83/ix development by creating an account on GitHub.
👍7❤5😁3
Если у вас, вдруг, есть доступ на машину по ssh, но нет по sftp (а такое зачем-то бывает!), то всегда можно сделать
А так же сюда можно добавить
Так же это работает и в обратную сторону (только не забудьте обрезать message of the day).
Зачем sftp - отдельный протокол, требующий отдельного бинаря, для меня до сих пор загадка.
cat x | gzip | ssh user@host 'gzip -d > x'А так же сюда можно добавить
tar, и вообще все, что угодно.Так же это работает и в обратную сторону (только не забудьте обрезать message of the day).
Зачем sftp - отдельный протокол, требующий отдельного бинаря, для меня до сих пор загадка.
😁8🔥4🤔3👍1
Интересно, зачем в современных 64-битных системах нужна защита памяти?
Казалось бы, поместил программу и ее данные по рандомному адресу, и тогда злоумышленник просто не сможет ее найти во всем адресном пространстве, потому что, каждый раз когда он будет промахиваться, его будут убивать, ну и потому что 64 бит - это ОЧЕНЬ много.
Я понимаю, что современные CPU используют меньше 64 бит, и что надо как-то защищать небольшую часть операционной системы, которая являлась бы gate для входа в нее, но, все же?
Казалось бы, поместил программу и ее данные по рандомному адресу, и тогда злоумышленник просто не сможет ее найти во всем адресном пространстве, потому что, каждый раз когда он будет промахиваться, его будут убивать, ну и потому что 64 бит - это ОЧЕНЬ много.
Я понимаю, что современные CPU используют меньше 64 бит, и что надо как-то защищать небольшую часть операционной системы, которая являлась бы gate для входа в нее, но, все же?
🤡26🤔6💯4🔥1
Forwarded from Programmer memes
This media is not supported in your browser
VIEW IN TELEGRAM
🔥22💯16👍4😢1
https://www.davd.io/posts/2024-03-20-kubernetes-and-back-why-i-dont-run-distributed-systems/
Очередной rant от человека, который не понял, что распределенные системы - это не "проще", а "надежнее", при этом они требуют больше усилий, чтобы только держаться на плаву.
Конечно проще все поставить на один хост, без кворумов, перезапросов, и прочей лабуды.
Очередной rant от человека, который не понял, что распределенные системы - это не "проще", а "надежнее", при этом они требуют больше усилий, чтобы только держаться на плаву.
Конечно проще все поставить на один хост, без кворумов, перезапросов, и прочей лабуды.
davd.io
Kubernetes and back - Why I don't run distributed systems - davd.io
davd.io is a blog featuring various topics related to web development and server operation
👍10😁5🤔3🤣1
https://www.swift.org/blog/adwaita-swift/
https://github.com/AparokshaUI/adwaita-swift
Чуваки запилили биндинги gtk + adwaita к swift.
Идея прикольная, потому что не на С с Vala же gui программирвать, и не на Python.
Я вот для себя совершенно точно знаю, что, если я захочу запилить gui на gtk, то я возьму golang.
Swift кажется тоже годной альтернативой.
https://github.com/AparokshaUI/adwaita-swift
Чуваки запилили биндинги gtk + adwaita к swift.
Идея прикольная, потому что не на С с Vala же gui программирвать, и не на Python.
Я вот для себя совершенно точно знаю, что, если я захочу запилить gui на gtk, то я возьму golang.
Swift кажется тоже годной альтернативой.
Swift.org
Writing GNOME Apps with Swift
Swift is well-suited for creating user interfaces thanks to the clean syntax, static typing, and special features making code easier to write.
Result builders, combined with Swift’s closure expression syntax, can significantly enhance code readability.
Result builders, combined with Swift’s closure expression syntax, can significantly enhance code readability.
👍7🤔6🤯2
commit -m "better"
Я как-то писал, что за каждым успешным oss проектом стоит очередь тех, кто захочет его перехватить, дай upstream хоть какой-то повод для этого - https://xn--r1a.website/itpgchannel/1296
https://www.opennet.ru/opennews/art.shtml?num=60871
В копилочку. #fork
О-че-редь. Огромная очередь. За любым популярным проектом. Стоит лишь раз ошибиться.
И, в целом, это очень хорошо, потому что нехуй набирать пользователей под лозунгом "халява", а потом переобуваться на лету.
Самое интересное, что, кажется, у компаний, которые идут по этому пути, нет особого выбора.
Ну вот захотел бы Редис продаться за деньги большому дяде? Но зачем это большому дяде, если через год он получит это же, но бесплатно, и развивать будет не один, а в несколько компаний? Так к форку и у сообщества доверия больше, чем если бы его пилила одна большая компания.
Такой хороший бесплатный инкубатор идей софта для больших облаков, и ничего личного.
В копилочку. #fork
О-че-редь. Огромная очередь. За любым популярным проектом. Стоит лишь раз ошибиться.
И, в целом, это очень хорошо, потому что нехуй набирать пользователей под лозунгом "халява", а потом переобуваться на лету.
Самое интересное, что, кажется, у компаний, которые идут по этому пути, нет особого выбора.
Ну вот захотел бы Редис продаться за деньги большому дяде? Но зачем это большому дяде, если через год он получит это же, но бесплатно, и развивать будет не один, а в несколько компаний? Так к форку и у сообщества доверия больше, чем если бы его пилила одна большая компания.
Такой хороший бесплатный инкубатор идей софта для больших облаков, и ничего личного.
www.opennet.ru
Amazon, Google, Oracle, Ericsson и Snap основали Valkey, форк СУБД Redis
Организация Linux Foundation объявила о создании проекта Valkey, который продолжит развитие открытой кодовой базы СУБД Redis, распространяемой под лицензией BSD. Проект будет развиваться под эгидой организации Linux Foundation на независимой площадке с привлечением…
👍9😢6🔥4🤔3
commit -m "better"
В целом, мне больше нечего добавить на эту тему, кроме того, что было уже сказано (разгон основной реализации через #uring лучше), и еще раз сказать, что не надо код в ядро тянуть, его надо оттуда убирать.
https://www.opennet.ru/opennews/art.shtml?num=60860 просто оставлю тут очередную #cve про #ksmbd.
(а некоторые меня спрашивают, почему я отказываюсь использовать NFS из ядра)
(а некоторые меня спрашивают, почему я отказываюсь использовать NFS из ядра)
www.opennet.ru
Уязвимости в ядре Linux, позволяющие поднять свои привилегии через nf_tables и ksmbd
В Netfilter, подсистеме ядра Linux, используемой для фильтрации и модификации сетевых пакетов, выявлена уязвимость (CVE-2024-1086), позволяющая локальному пользователю выполнить код на уровне ядра и поднять свои привилегии в системе. Проблема вызвана двойным…
👍7
https://www.phoronix.com/news/Inkscape-Switches-To-GTK4
Inkscape как-то очень быстро и решительно запилили поддержку gtk4.
Я почему-то, смотря на gimp, думал, что они не переедут примерно никогда, потому что переписать с одной версии gtk на другую - ну, чуть мнее сложно, чем переписать вообще на другой тулкит.
Видимо, здесь дело в разнице между сильно типизированным языком (С++), и слабо типизированным (С).
Я, конечно, говорю про то, что указатели в С сами по себе конвертируются в любые другие указатели, и поэтому тупо заменить один тип на другой не выходит, нужно еще аккуратно прочитать все места использования.
Inkscape как-то очень быстро и решительно запилили поддержку gtk4.
Я почему-то, смотря на gimp, думал, что они не переедут примерно никогда, потому что переписать с одной версии gtk на другую - ну, чуть мнее сложно, чем переписать вообще на другой тулкит.
Видимо, здесь дело в разнице между сильно типизированным языком (С++), и слабо типизированным (С).
Я, конечно, говорю про то, что указатели в С сами по себе конвертируются в любые другие указатели, и поэтому тупо заменить один тип на другой не выходит, нужно еще аккуратно прочитать все места использования.
Phoronix
Inkscape Development Version Switches To Using GTK4
The latest upstream development code for the Inkscape vector graphics program has transitioned to using the GTK4 toolkit.
👍8❤1