14 октября мы собрались в уютном Failover Bar (г. Санкт-Петербург) 🏠, чтобы по-настоящему прокачать свои навыки в DevOps и кибербезопасности 🚀
Огромное спасибо всем участникам нашего интенсива "Ansible Security CTF – Защищай и Атакуй!" – вы сделали этот вечер незабываемым! 🙏
Что мы делали: 🛡 Писали Ansible playbooks, чтобы мгновенно закрывать уязвимости 🔎 Активно сканировали, подбирали пароли, искали флаги с помощью nmap, hydra и curl 💬 Общались, обменивались опытом и заводили новые знакомства!
🎉 Поздравляем победителей и напоминаем, что еще месяц в Failover Bar можно потренироваться на кейсах из интенсива! 💡В этом вам поможет бот 🤖 для CTF - https://t.me/DebugProCTF_bot
📆 Не хотите пропустить следующие мероприятия? Подписывайтесь на бота 🤖 DebugSkills - https://t.me/DebugProBot
Использую для разных надобностей перешитые TV-боксы, потому что удобные маленькие одноплатники в аккуратных корпусах - а "сделать корпус для своего устройства" - отдельная головная боль, которую в данном случае можно просто избежать.
В частности, неплохая штука - X88-mini, 64-битный 4-ядерный процессор с 4 гигабайтами ОЗУ, для некоторых применений вполне годно. Чтобы не колдовать каждый раз с подбором образа ОС, и методами его помещения туда - слепил что-то вроде дистрибутива.
В основе - Debian bookworm, в минимальной конфигурации, дополнительно установлены только Midnight и Vim. Загрузочный образ - примерно 1.5 гигабайта, можно записать на любую подходящую SD-карту, воткнуть в слот и загрузиться.
Работает только по сети, по ssh, терминал подключать не нужно, да и не заработает. IP получит по DHCP, останется залогиниться и можно настраивать почти под что угодно. Графический интерфейс тоже можно запустить, в отличии от текстовой консоли - но GPU там так себе, это больше для серверных задач подходит: веб, бекенд, автоматика.
И еще одно ограничение - не удалось подобрать нормально работающее ядро, кроме "родного", это ограничивает использование софта, требующего модулей ядра. Если кто подскажет хороший вариант - будет неплохо.
🎯 Что будет: ⚔️ Практический мастер‑класс по автоматизации безопасности 🐳 Развертываем уязвимую инфраструктуру в Docker 🛡 Пишем Ansible playbook для защиты 🏆 CTF‑соревнование — ищем флаги и закрываем уязвимости!
⏰ Формат: 2 часа интенсивной практики
💻 Что взять с собой: ноутбук и желание ломать/защищать системы
🚀 Программа: ✅ 5 реальных сервисов с уязвимостями ✅ Практика с nmap, hydra, curl ✅ Написание продвинутых Ansible playbooks ✅ Система очков и подсказок ✅ Живое общение и нетворкинг
👨💻 Ведущий я: Андрей Чуян DevOps-инженер, автор канала «IT‑волна»
РОСА Хром для интерактивных панелей: отечественная ОС для классов и переговорных
НТЦ ИТ РОСА представила редакцию операционной системыРОСА Хром, адаптированную для интерактивных панелей и сенсорных киосков. Цель — дать образовательным учреждениям и корпоративным командам стабильную, удобную и полностью российскую платформу для совместной работы на большом экране.
ОС уверенно работает на массовых платформах Intel/AMD и на отечественных Байкал-М. Вариант для Байкал-М поддерживает внешние видеокарты, HDMI и аналоговый звук; система корректно запускается на платах российских производителей.
Мы переработали взаимодействие с интерфейсом под большой экран и управление пальцами:
увеличенные элементы (кнопки, заголовки, меню) для точных касаний;
Файловая система Btrfs с подтомами root и home позволяет делать моментальные снимки перед обновлениями и откатываться без потери данных и переустановки (через графическую утилиту).
Работа в графической среде X11 — это гарантирует корректное поведение экранной клавиатуры и сенсора; весь необходимый функционал стабильно доступен уже сейчас.
Кому пригодится
школам и вузам — для занятий, лабораторных и совместной работы;
госучреждениям — для совещаний, обучения и стендов самообслуживания;
компаниям — для переговорных, демонстраций, интерактивных киосков.
Linux Mint 22 - KiCad-5 с GUI и графическим ускорением на карте AMD в Docker-контейтере.
При перезде с Минт-20 на Минт-22 мне захотелось сохранить возможность полноценной работы с проектами выполнеными в KiCad-5, без конвертации их в формат KiCad-9 на который я плавно мигрирую при перезде на Минт-22. Специфика в том, что KiCad-5, в том числе в виде AppImage на Минт-22 запускаться категорически не хочет.
Из возможных вариантов выбрал для себя запуск KiCad-5 в Docker-контейтере, с пробросом графики через X11. За основу взял эту реализацию. Добавил к ней проброс графического ускорения(без него GUI будет подтормаживать) своей карты AMD, русификацию, и Firefox, для плагина InteractiveHtmlBom. В итоге получился вот такой dockerfile:
FROM linuxmintd/mint20-amd64
ENV LANG=ru_RU.UTF-8
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y nano sudo keyboard-configuration software-properties-common x11-apps xdg-utils \
locales language-pack-ru-base language-pack-ru xed xed-dbg firefox firefox-locale-ru && \
update-locale LANG=ru_RU.UTF-8
RUN add-apt-repository --yes ppa:kicad/kicad-5.1-releases && \
apt-get update && \
apt-get install --no-install-recommends -y kicad kicad-locale-ru kicad-doc-ru
# Укажите здесь используемые на вашем хост-компьютере
# имя пользователя, идентификатор пользователя и идентификатор группы.
ENV USER_NAME=vasily
ENV UID=1000
ENV GID=1000
ENV HOME=/home/${USER_NAME}
ENV XDG_RUNTIME_DIR=/tmp/runtime-${UID}
RUN mkdir -p ${HOME} && \
echo "${USER_NAME}:x:${UID}:${GID}:USER_NAME,,,:${HOME}:/bin/bash" >> /etc/passwd && \
echo "${USER_NAME}:x:${UID}:" >> /etc/group && \
echo "${USER_NAME} ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/${USER_NAME} && \
chmod 0440 /etc/sudoers.d/${USER_NAME} && \
chown ${UID}:${GID} -R ${HOME}
USER ${USER_NAME}
# Раскомментируйте программу, которую вы хотите запустить в контейнере.
#ENTRYPOINT ["eeschema"]
ENTRYPOINT ["kicad"]
Обратите внимание, что значения USER_NAME, UID, GID, в строках 17, 18, 19 в dockerfile берутся из вашего аккаунта на хост-машине.
Образ создается как обычно выполненой в открытом в одной директории с dockerfile терминале командой(не забываем пробел и точку в конце команды):
docker build -t kicad5 .
Размер образа получаеться около 800 Мбайт.
Скрипт для старта контейнера на машине с графической картой AMD:
1). Создаете в Минт-22 директорию /usr/share/kicad5 и копируете туда содержимое /usr/share/kicad из Минт-20 с установленным kicad5
2). Копируете содержимое $HOME/.kicad_plugins из Минт-20 с установленным kicad5 в $HOME/.kicad_plugins в Минт-22
3). Копируете содержимое $HOME/.config/kicad/ из Минт-20 с установленным kicad5 в $HOME/.config/kicad в Минт-22
Теперь можете запускать KiCad-5 с GUI и графическим ускорением на карте AMD в Минт-22 и паралельно установить в Минт-22 KiCad-9.
Чтобы заархивировать созданный образ выполняем в терминале:
docker save -o ./my_bac_kicad5_image.tar kicad5
Чтобы развернуть заархивированый образ на другом машине выполняем в терминале, открытом в одной директории с файлом my_bac_kicad5_image.tar, на нее скопированном:
GPT-5 Pro думала 69 минут, чтобы просто ответить «Нет». Пользователь спросил у ИИ, сможет ли он установить CUDA на Linux Ubuntu. Нейронка задумалась на час с лишним, чтобы ответить: «Нет, не сможешь». Самое печальное — ответ оказался неправильный.
В прошлой статье мы пришли к выводу, что QMP — это лучше, чем ничего. Но хочется большего — библиотеку или программу (желательно, уже готовую), которая умеет читать/писать и узнавать об изменении состояния через poll() / pselect() / select() / epoll() / read().
В таком случае для каждой модели GPIO нужен «клей», похожий на тот, что используется с chardev — мы включаем его прямо в модифицированный QEMU. Очевидное название такого «клея» — gpiodev. Вот его основные функции, которые сейчас почти полностью соответствуют GPIO UAPI в Linux:
сообщать количество линий, конфигурацию, название и потребителя каждой линии,
читать и задавать состояние линии,
отслеживать изменения состояния и конфигурации линии (вход/выход, запрос/освобождение).
«Клей» состоит из двух групп, первая — это индивидуальные для каждого модуля GPIO функции, которые gpiodev использует, чтобы запросить специфическую информацию:
LineInfoHandler() — информация о линии: имя, флаги и потребитель,
LineGetValueHandler() — состояние линии: условный 0 или 1,
LineSetValueHandler() — задать состояние линии: 0 или 1.
По аналогии с GPIO UAPI напрашиваются также функции LineGetMultiValueHandler() и LineSetMultiValueHandler() для запроса и выставления линий, но я решил ограничиться минимальным набором.
Можно ли организовать прозрачное взаимодействие с устройствами внутри QEMU — использовать те же библиотеки и инструменты, как и для реальных устройств? Читайте во второй части трилогии о долгом пути до GPIO в QEMU.
Linux 6.16 принесет более быстрые файловые системы, улучшенную поддержку памяти и больше Rust
Linux продолжает развиваться, становясь больше и лучше. Вот что нового и примечательного в релизе 6.16, а также что нужно знать о 6.17. Изменения в последнем ядре Linux, версии 6.16, могут быть небольшими, но среди них есть весьма значимые. Сам Линус Торвальдс охарактеризовал этот релиз как "выглядит хорошо, небольшой и спокойный", но "не слишком интересный (в лучшем смысле этого слова!)".
Появились биндинги Rust к ядру для инфраструктуры драйверов и подсистемы PCI-устройств. Это упростит добавление новых драйверов оборудования, написанных на Rust. Интегрированы новые абстракции Rust в подсистему Direct Rendering Manager (DRM).
Файловые системы
XFS: Теперь поддерживает большие атомарные записи. Это означает, что операции записи, охватывающие несколько блоков, выполняются "атомарно" – либо обновляются все блоки, либо ни один. Усиливает целостность данных и предотвращает ошибки записи. Важно для компаний, использующих XFS в базах данных и системах хранения масштаба предприятия.
Самая популярная файловая система Linux, Ext4, также получает множество улучшений. Эти усовершенствования включают ускоренные пути фиксации (commit paths), поддержку больших фолио (large folio) и атомарные записи, охватывающие несколько блоков файловой системы (fsblocks) для файловых систем с bigalloc.
Прочее
Если вы через ноутбук на Linux проигрываете музыку, еще одна приятная новая функция — теперь вы можете транслировать аудио по USB, даже когда остальная часть системы находится в спящем режиме. Эта возможность была доступна в Android какое-то время, но теперь она стала частью основного (mainline) Linux.
Если безопасность является для вас приоритетом, ядро 6.16 теперь поддерживает Intel Trusted Execution Technology (TXT) и Intel Trusted Domain Extensions (TDX). Это дополнение, наряду с улучшенной поддержкой AMD Secure Encrypted Virtualization и Secure Memory Encryption (SEV-SNP) в Linux, позволяет шифровать память вашего программного обеспечения в рамках так называемых конфиденциальных вычислений (confidential computing). Эта функция повышает безопасность облаков, шифруя память виртуальной машины пользователя, что означает, что злоумышленник, взломавший облако, не сможет получить доступ к вашим данным.
В этом релизе есть и другие улучшения поддержки чипов в Linux. Для начала, Linux теперь поддерживает Intel Advanced Performance Extensions (APX). С APX Linux теперь может использовать 32 общецелевых регистра x86. Это вдвое больше, чем 16 регистров у старых чипов. Это улучшение означает, что вы увидите повышенную производительность от процессоров Intel следующего поколения, таких как Lunar Lake и серверные Granite Rapids Xeon.
Linux 6.16 приносит улучшенную поддержку GPU Nvidia Blackwell. Чипы Blackwell, используемые в основном для ИИ, уже развертываются в высокопроизводительных Linux-рабочих станциях.
На сетевом фронте изменения в работе TCP/IP с DMABUF позволят устройствам, включая GPU и ИИ-ускорители, ускорять свои сетевые операции, не нагружая при этом CPU. Хотя обычный пользователь может не заметить это изменение, пользователи высокопроизводительных сетей увидят ускорение.
И есть шанс, что обычные пользователи увидят преимущества, если они используют OpenVPN. Собственный сетевой протокол OpenVPN по-прежнему не будет работать так же быстро, как WireGuard, но, по крайней мере, даст ему больше шансов в гонке.
С точки зрения пользователя (в данном случае человека, отвечающего за обновления данной Linux-системы) лайвпатч — это просто модуль ядра Linux, в котором содержится как минимум следующее:
исправленный код одной или более функций из vmlinux и/или из модулей ядра,
метаданные, указывающие, как применить эти исправления к соответствующим компонентам ядра Linux.
Чтобы применить лайвпатч-обновление, нужно загрузить этот модуль ядра, например, с помощью insmod или modprobe, а затем активировать его, как правило, через sysfs.
При этом старый код ядра Linux (тот, который хотим обновить) и новый (тот, что в лайвпатч-модуле) сосуществуют в памяти системы. Это дает возможность при необходимости отменить лайвпатч-обновление в runtime: деактивировать его через sysfs, а затем выгрузить лайвпатч-модуль.
Важный момент: если используются средства для работы с лайвпатчами из mainline-ядра, то при активации и деактивации лайвпатч-обновлений работающие процессы не нужно завершать или даже останавливать на сколько-нибудь существенное время.
Примечания:
У TuxCare / KernelCare лайвпатчи поставляются в другом, проприетарном, формате, но мы его рассматривать не будем.
Для некоторых архитектур, например RISC-V, при активации и деактивации патча вызывается stop_machine(), то есть работающие процессы при этом все-таки останавливаются на некоторое время. Начиная с версии 6.16 ядра Linux, для RISC-V stop_machine() уже, вероятно, не будет использоваться в таких ситуациях.
Все, что нужно знать о лайвпатингче для ядра Linux, вы найдете в цикле статей: от подготовки лайвпатча до работы на x86, ARM и RISC-V.
Предлагаю два варианта, которые я условно решил назвать MMIO и PCI. Последний — тоже MMIO, но в QEMU они добавляются разными путями. Начнем с сердца любой MMIO-модели — апертуры.
Апертура и адресное пространство
Как я упоминал в одной из своих статей, любое MMIO-устройство — это MemoryRegion с заданными шириной доступа и размером. Для того, чтобы он был виден CPU или другому устройству, такому как DMA, его нужно разместить в соответствующем адресном пространстве — например, пространстве, назначенном для cpu0:
Фактически это означает, что все семейство инструкций Load/Store будет вызывать mmio_gpio_register_read_memory()/mmio_gpio_register_write_memory() при совпадении адреса чтения/записи с адресом региона в адресном пространстве.
Передаваемые аргументы и возвращаемое значения интуитивно понятны. Отмечу, что hwaddr addr — это адрес относительно начала нашего региона, а не абсолютный адрес.
Нам остается лишь создать устройство и добавить его регион в файле машины:
Почти десять лет назад Никита Шубин, ведущий инженер по разработке СнК в YADRO, сделал возможность чтения и записи GPIO для QEMU. Читайте первую часть трилогии о долгом пути до GPIO в QEMU.
«Поделитесь своим игровым состоянием с друзьями, просто отправив им число! Если переменная $STATE env не установлена, она генерирует новое случайное начальное число. В противном случае состояние доски и все будущие созданные ячейки будут детерминированными»,‑ пояснил автор проекта.
Американский программист и специалист по внутреннему устройству операционной системы Windows Марк Руссинович выложил на личном аккаунте LinkedIn себяшку с Биллом Гейтсом и Линусом Торвальдсом. Также в этой неформальной встрече участвовал не менее легендарный инженер-программист Дэйв Катлер. Как пишет Руссинович, Билл и Линус никогда до этого не встречались.
Это действительно так. Известно, что они могли пересекаться: 20 апреля 1999 года во время выставки COMDEX Гейтс выступал в главном зале, а через полчаса Торвальдс зачитал свою речь в аудитории поменьше. Однако они лишь были двумя спикерами. Нет никаких подтверждений, фотографий или свидетельств очевидцев, что они обмолвились хоть словом, поздоровались издалека или пожали друг другу руки.
В девяностых Торвальдса часто представляли в СМИ в качестве Билла Гейтса, но от мира контркультуры. Линус действительно избегал корпоративных ролей и даже отказался от личного предложения Стива Джобса о найме. Среди требований было отойти от разработки Linux, поэтому Линус не перешёл на работу в Apple. К тому же ядро Mac OS финну не нравилось.
Нельзя сказать, что эта встреча что-то может значить. Microsoft рассматривала операционные системы на базе ядра Linux как угрозу своему доминированию на рынке, но в последние годы даже помогает пользователям запускать Unix-приложения на своей Windows. Сам Билл Гейтс после 2008 года не занимается Microsoft, посвящая себя филантропии, бизнесу и политике.
Как шутит Руссинович, это был ужин, за которым важных решений о ядрах операционных систем не принимали, но в следующий раз всё ого-го как возможно.
Хэндлим обработку некорректного ввода в ZSH для поднятия настроения
Сегодня хочу рассказать о том, как немного разнообразить времяпрепровождение в консоли, добавив немного юмора, если ваша командная оболочка zsh.
Все, кто работает в терминале (эмуляторе терминала, чтобы меня тут не покусали в комментариях :)), думаю, периодически сталкиваются с тем, что вводят команду неправильно. Например, есть шуточная команда sl, которая рисует движущийся поезд, если вы случайно опечатались, когда хотели набрать команду ls. Это служит некой разрядкой и поводом лишний раз улыбнуться. Вот репозиторий этой утилитки на GitHub для любознательных.
А что, если мы хотим, чтобы на ввод любой несуществующей команды, мы получали что-то аналогичное выводу команды sl? По умолчанию в ZSH в этом случае выводится сообщение “command not found”. Давайте это исправим.
Для этого нам понадобится:
непосредственно zsh в качестве командной оболочки;
cowsay - утилита командной строки, которая рисует разные фигурки, которые как бы говорят, наподобие героям комиксов.
lolcat - утилита для разукрашивания текста градиентом, добавления анимации и т.д.
В ZSH предусмотрена возможность переопределять поведение при возникновении каких-то ситуаций, в том числе, переопределение поведения при возникновении ошибок. В нашем случае нам нужно переопределить вывод, когда команда, вводимая пользователем не найдена. Для этого будем использовать метод command_not_found_handler. Добавим в .zshrc файл следующий код:
command_not_found_handler() {
cowsay -f tux "LOL! Command not found: $1" | lolcat -a -s 150
return 127
}
Немного пояснений: первая строка будет рисовать там пингвина, говорящего, что введенная нами команда не найдена, пингвин будет появляться построчно (150 - скорость появления). Более подробно с доступными параметрами lolcat можно ознакомиться, набрав man lolcat. 127 - это код, который zsh отправляет по умолчанию, сохраним это поведение.
Вот так примерно это выглядит:
Ну вот, собственно говоря, и все. Мелкие моменты, которые нас окружают в повседневности, делают нас (по крайней мере меня) чуточку счастливее :)
РТУ МИРЭА совместно с АО «НИЦ» и «РУСИБ» приглашает всех, интересующихся Инфобезом, с 7 апреля по 8 июня принять участие в гибридном хакатоне NeedForFWSpeed на самое быстрое ПО межсетевого экрана и побороться за призовой фонд 0,6 млн рублей.
По просьбам интересующихся хакатоном, организаторы NeedForFWSpeed продлили регистрацию на мероприятие до 31 мая включительно. Если Вас заинтересует этот хакатон, то ещё есть возможность успеть в последний вагон. Пост с краткой информацией размещен здесь. Ниже ссылка на сам сайт хакатона.
Спойлер: принципиальное решение проблемы - найдено. Купил маленькую коробочку на "мейнстримной" архитектуре, на которой все цветет и пахнет.. кроме моего внутреннего(ну и внешнего, че уж там) инженера) Так что решение выкинуть железку - можно не предлагать
Так вот, пока я писал код, и готовил сборочные скрипты ничто не предвещало беды - я спокойно потестил код локально, написал Dockerfile для сборки на poetry. Настало время развернуть это все на NAS - казалось бы ARM уже давно мейнстрим, но тут понеслось
python как всегда лишь удобный биндинг к куче платформозависимого кода) подавляющее большинство python-зависимостей под arm/v7 приходится компилировать
готовых бинарников polars под arm/v7 - тоже нет
Никаких блокеров к тому, чтобы собрать polars под arm/v7 я не нашел. Но скомпилить его нативно на 4Гб ОЗУ - не получится, даже с минимальными оптимизациями. Нужна кросс-компиляция. Благо с rust и maturin(которым собирается polars) - это несложно, target armv7-unknown-linux-gnueabihf в хорошем tier-е поддержки
забегая чуть вперед указываем окружение для сборки аллокатора jemalloc(по умолчанию в polars) под 32k страницу
Итак, усложняем сборку Docker(см. repro) - используем кросс-компиляцию, энв-переменные, QEMU, охапку дров и теперь у нас есть приложка, которая успешно стартует в докере на целевой железке. Вот только за рамками самых примитивных тестов - OOM-ится, причем память точно есть, никакой OOM-киллер процесс не убивает(на всякий случай смотрим лимиты cgoup) - оно "шамо":
memory allocation of 1345920 bytes failed
(подробные логи можно посмотреть по ссылкам в конце поста)
Что же делать?
пробуем mimalloc - он использует для конфигурации рантайм(getconf), эффект - тот же
пробуем env-крутилки, в частности arena_reserve может стоит просто меньше резервировать - но нет, просто больше попыток, но по факту все равно OOM
И вот на этом месте я застрял. Я не большой спец по системному программированию - не понимаю куда копать
Общение с поддержкой QNAP свелось к
Справедливости ради они еще дали советов что попробовать, но это я уже попробовал до них
Пытался отлаживать приложение в gdb - никаких аномальных трейсбэков во время OOM не увидел: rust честно пытается аллоцировать большой raw_vec(трейс есть в вопросе на stackoverflow)
Как-то глубоко копать переменные не получается, т.к. дебаг-символы для бинарника polars получаются слишком большими
BFD: error: /app/.venv/lib/python3.12/site-packages/polars/polars.abi3.so(.debug_str) is too large (0x498a9fd1 bytes)
Я сделал небольшое repro на голом расте - там эта проблема не воспроизводится, значит базово бинарная совместимость - в порядке
Есть несколько гипотез, но я не знаю как их проверить
возможно, кривая вся адресация, но ее проверить я тоже не могу
возможно, стоит чего-нибудь половить в ядре bpf-ом, но что..
кастомное ядро 4.2.8 кастомный дистриб(QTS) не богат средствами отладки - как я понял там запускается busybox набор утилит
А мне бы хотелось все-таки дожать диагностику и однозначно ответить на вопрос: это лыжи не едутя не умею собирать приложения под нужное окружение или все-таки целевая платформа не умеет выполнять корректно собранное? Не потому что эту проблему нельзя решить по-другому, а потому что в том, чем пользуешься - хочется разбираться.
Пишите в комментах ваши соображения. Если что-то удастся прояснить - буду держать читателей поста в курсе
Isar и еще 8 систем сборки для создания дистрибутива на Linux
Isar — система сборки, представляющая собой набор скриптов для создания пакетов и дистрибутивов на базе Debian с возможностью настройки. Организация проекта Isar похожа на Yocto Project, для сборки используется Bitbake.
Перед сборкой можно настроить параметры файловой системы, ядра, модификации списка пакетов (добавление и удаление пакетов, в том числе и собственных, изменение существующих пакетов). Систему сборки разрабатывает компания ilbers GmbH.
Архитектура системы
Так как Isar основан на Bitbake, архитектура решения состоит лишь в нескольких слоях для Bitbake, реализующих сборку и установку пакетов в соответствии с конфигурацией сборки. В основе всех этих слоев и рецептов лежат утилиты Debian Build Toolchain, которые ответственны за непосредственную сборку пакетов, разрешение зависимостей и т.д.
Как проходит процесс сборки дистрибутива в Isar
Особенности решения
Аналогично Yocto требует усилий на начальных этапах для освоения инструмента.
Поддерживает загрузку готовых пакетов из репозиториев Debian.
Подходит для embedded-дистрибутивов, где необходимо сочетание Debian-экосистемы и глубокой конфигурации.
О других embedded- и desktop-решениях решениях рассказали студенты и преподаватели СПБГЭТУ «ЛЭТИ» в обзоре систем для создания Linux-дистрибутивов.
Объявлено решении включить в состав выпуска GNOME 49 видеопроигрыватель Showtime, который станет поставляться под именем GNOME Video Player и будет задействован по умолчанию вместо видеопроигрывателя Totem (GNOME Videos).
Для желающих протестировать Showtime не дожидаясь осеннего релиза GNOME 49 подготовлен пакет в формате flatpak. Программа отличается минималистичным интерфейсом, отображаемым поверх содержимого и скрываемым во время просмотра. Поддерживаются типовые элементы управления, полноэкранный режим, изменение скорости воспроизведения, показ субтитров и создание скриншотов.
Что такое быть Unix-программистом? Быть наполовину сисадмином (и вот почему)
Как вы поняли, этот пост на Хабре начался со смелого заявления. Конкретно в данном случае я не хотел бы раскладывать по полкам абсолютно все навыки, которые нужны Unix-программисту для успешной работы. Их можно получить простым запросом в поисковике или к любому чат-боту типа ChatGPT, DeepSeek и т.д. (на ваш вкус и цвет)
Я же отметил именно те, приобрести которые стоило мне многих набитых шишек. Они связаны с работой в проектах, состоящих из утилит, содержащих по несколько тысяч строк кода каждая.
Итак, навыки, правила, они же житейские мудрости, они же грабли, на которые наступал.
1. Сначала править конфиги и только потом - код. Это база
В течение практически двух лет такой работы, я часто сталкивался с ситуацией: когда возникает проблема, она находится (неожиданно) не в коде, а в конфигурации программы. Спустя десятки выполненных задач на стыке программирования и системного администрирования, я осознал одну очень важную вещь:
Сначала проверь конфигурацию и все её возможные варианты! Если все эти варианты исчерпаны, то только тогда, в последнюю очередь смотри в код!
Я очень долго привыкал к этой мысли, тратя тонны времени на чтение кода, так и не найдя там ошибки. А после приходил коллега-сисадмин, который пошарил конфигурацию, почитал документацию, поиграл с настройками и всё решил.
2. Владеть инструментами командной строки
Логично, но не очевидно на первый взгляд. В отличие от обычного программиста (в сферическом вакууме), когда ты можешь ограничиться пошаговой отладкой или логами, Unix-программист должен уметь работать с командной строкой. Хоть и не обязательно знать все команды и их опции "на зубок", но нужно понимать, для каких случаев какие утилиты полезны.
Сколько было случаев, когда работа над какой-то задачей ускорялась при использовании какой-нибудь утилиты, дающей больше информации об используемых ресурсах.
Например:
- при невозможности пошаговой отладки использовать perf, чтобы проанализировать стек вызовов
- уметь пользоваться grep'ом для поиска и выделения нужной информации из конкретных файлов
- использовать sed для формирования файлов без лишней информации (например в логах убирать строки с наличием отметок времени)
3. Уметь работать с виртуальными машинами, докером, анализаторами трафика
Например, не плодить виртуалки, а делать снэпшоты (вы скажете: "Спасибо, капитан-очевидность!", но я видел на своей практике тех, кто, не зная про снэпшоты, плодил виртуалки). Держать мастер-копии виртуалок с предварительно настроенной конфигурацией для быстрого развертывания новых машин. Понимать, для каких целей проще использовать докер-контейнер и т.д.
4. Работать с огромным количеством открытых одновременно утилит
Как ни странно, я встречал разработчиков, которые задавали вопрос: "Зачем так много всего?"
Ответ прост: когда непонятно поведение программы, нужно принимать во внимание всё.
Резюме: с таким набором навыков в какой-то момент начинаешь себя чувствовать, как оператор из Матрицы.
А какие особенности в Unix-разработке (и не только) подметили вы?
РТУ МИРЭА совместно с АО НИЦ и Ассоциацией РУСИБ приглашает всех, интересующихся Инфобезом, с 7 апреля по 31 мая принять участие в гибридном хакатоне NeedForFWSpeed на самое быстрое ПО межсетевого экрана и побороться за призовой фонд 0,6 млн рублей.
Все конкурсанты будут использовать одинаковые аппаратные платформы и одинаковые датасеты. Так что старт у всех будет с одной линии.
В качестве аппаратной платформы всем предлагается RPi CM4 MilkV с процессором архитектуры RISC V – мы стойкие сторонники OpenSource.
Зато нет никаких ограничений на ПО. Можно взять абсолютно стандартную сборку *nix и пойти с ней. Можно хорошенько пооптимизировать iptables/nftables, сетевые драйверы и настройки IP-стека и получить прирост производительности. В придачу можно поотключать в ОС и всё лишнее, можно собрать свою кастомную сборку и много чего ещё.
Можно взять и операционку полегче, ОС РВ или Нейтрино, и попытаться получить выигрыш за их счёт. Можно вообще написать свой код, взяв за основу исходники IP-стека, так сказать, BareMetal в чистом виде.
По условиям соревнований не важно, сколько человек в команде, один или пять, какой у Вас возраст и образование, какой опыт работы и какой стек технологий – значение имеет только СКОРОСТЬ РАБОТЫ МЕЖСЕТЕВОГО ЭКРАНА. Никаких взвешенных коэффициентов, призов зрительских симпатий и симпатий жюри. От жюри нужно будет одно – подписать итоговый протокол.
Вся интрига заключается в том, что команды не будут знать о планах и результатах соперников до самого последнего дня. Никаких публичных питчей!
Вопросы можно задать и здесь, можно и там. Организаторы опубликуют несколько статей, посвящённых оптимизации ПО межсетевых экранов для помощи в выборе пути интересующимся. Если Вас заинтересовало это мероприятие, то добавьте этот пост в закладки, по выходу материалов мы добавим сюда или в комментарии ссылки.
PS ... и да, среди нас есть фанаты ленты Need For Speed, и скорость межсетевого экрана нам тоже очень нужна.
🗓 14.03.1994 - Выпущeн пepвый cтaбильный peлиз Linux 1.0.0 [вехи_истории]
🗓 14.03.1994 - Выпущeн пepвый cтaбильный peлиз Linux 1.0.0
В этот день был выпущен первый стабильный релиз операционной системы Linux версии 1.0.0. Этот момент стал важной вехой в истории открытого программного обеспечения, поскольку Linux начал завоевывать популярность как надежная и гибкая операционная система.
Разработчиком ядра Linux является Линус Торвальдс, который начал работу над проектом в 1991 году. Первоначально это был экспериментальный проект, но благодаря поддержке сообщества он быстро развивался. Версия 1.0.0 включала 176 000 строк кода и поддерживала архитектуру x86, работу в многозадачном режиме и сетевые соединения. С тех пор Linux стал основой для множества дистрибутивов и широко применяется в серверах, мобильных устройствах (Android), суперкомпьютерах и встроенных системах.
💙 Интересно? Ставим лайк - и будем готовить историю про Linux)
📼 А знаете ли вы, что в основе Android лежит ядро Linux? Удивительная история Android! Вы этого НЕ ЗНАЛИ YouTube | VkVideo