Обновить
256K+

Linux *

Пишем под *nix

375,04
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Путь к ubuntu touch и обратно

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели10K

Квест пройден! Я установил на смартфон линукс, живя в России, в августе 2026 года, без VPN, и теперь у меня Ubuntu Touch 24.04–1 на борту старого доброго Poco X3 NFC. Конечно, в других условиях места или времени можно было бы сделать всё гораздо проще, но… Это был вызов, и я его принял. Не спрашивайте меня, зачем я это сделал — хотел поразвлечься, получить девайс с линуксом, который можно брать с собой куда угодно. Возможно, когда‑нибудь я поделюсь и опытом использования подобных девайсов... Но сейчас, когда квест по установке Ubuntu Touch на смартфон, которому средняя цена на авито пять тысяч рублей, пройден, я хочу поделиться своим опытом его прохождения (возможно, чтобы помочь кому‑то, кто в будущем решит пройти этот квест самостоятельно). И это не просто «подождать неделю, нажать кнопочку в программе — и она всё сама сделает», у меня установка заняла приличное время, не всё оказалось так просто (точнее даже так: всё оказалось совсем не просто). Собрав, пожалуй, все грабли, какие только могут быть встречены простым пользователем (за исключением полного окирпичивания), я готов описать их, а самое главное — поделиться найденными мной способами решения каждой проблемы.

Статья называется «путь к ubuntu touch и обратно» потому, что в ней я опишу не только, как установить на Poco X3 NFC линукс, но и как вернуться с него обратно на андроид, возможно — даже на лучшую версию, чем у вас была раньше. Если вы (вдруг) решите проделать этот путь вместе со мной, сначала прочитайте всё, от первого до последнего слова, хорошенько взвесьте своё решение — потянете ли, и… возможно, вы тоже захотите попасть в клуб владельцев «линуксофонов», который насчитывает от 150 до 250 тысяч активных пользователей (в мире линукс нет скрытой телеметрии, но когда телефон проверяет наличие обновлений, сервер фиксирует уникальный запрос). Итак, пристегните ремни — и… В любом случае сразу хочу предупредить, что все действия со своим смартфоном вы выполняете на свой страх и риск, я здесь ни при чём, я описал свой опыт, если у вас что‑то может пойти не так, оно и пойдёт не так! В общем, если мне не удалось вас испугать — вперёд, поехали!

Читать далее

Make STL Cringe Again: Как я динамические строки на C создавал

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели10K

Привет, Хабр! Однажды я подумал, что вот не умеют разработчики жить. В каждом из языков есть свои напасти (от которых, в принципе, спасаются разве что разработчики-полиглоты). Возьмем хотя бы C++ — даже без его шаблонов, исключений, и т.д., там все еще много мраков. Возьмем хотя бы iostream — он, блин, весит 2 МБ в последней версии GCC при компиляции под Windows! Или, вот, std::string — динамическая строка. Звучит интересно на бумаге, учитывая, что язык не из добрейших, но на практике...

Читать далее

BlocklyKlik — автономный редактор кода с компилятором

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели7.7K

Редактор BlocklyKlik разрабатывается для помощи программирования микроконтроллеров на базе Arduino и ESP32 (эту функцию добавим в будущем) с применением блочного функционала создания кода.

Возможно, вы зададите вопрос: "Так есть же Scratch, mBlock, PictoBlox, да и Arduino ide".

Всё верно, они есть, но в ходе последних лет их использования возникли ряд серьёзных проблем:

Читать далее

Скрипт деплоя отчитался об успехе, а на сервере осталась старая версия: 5 ошибок в bash, которые допускают новички

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели11K

Зелёный пайплайн ещё не означает, что деплой прошёл как надо. В Bash хватает ситуаций, где ошибка теряется, код возврата маскируется, а скрипт спокойно идёт дальше. Разберём типичные ловушки и способы сделать такие сценарии предсказуемее.

Разобрать ошибки

DevToolbox Cheats: шпаргалки всегда под рукой

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели7.6K

Привет, Хабр! В работе почти каждого, кто плотно сидит в Linux, есть один недостаток: одни и те же команды забываются с завидной регулярностью. Я, например, иногда по десять раз лезу в историю, чтобы уточнить - «так как в rsync директорию исключить, но структуру оставить?»

Можно, конечно, вести свои заметки. Можно - дрессировать Ctrl+R. А можно установить небольшую утилиту, которая будет жить в трее и выдавать нужную подсказку за полсекунды. Именно о такой утилите сегодня и расскажу - DevToolbox Cheats.

Читать далее

Криптомайнер на Gitea: 70% нагрузки CPU, RCE в self-hosted Gitea вместо GitLab и как я закрыл уязвимость

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели8.7K

Всё началось с обычного письма от хостинга: VPS слишком долго держит CPU выше 70%. Я открыл Gitea посмотреть, что происходит, а там уже был чужой репозиторий.

По логам восстановил атаку почти по секундам: регистрация, repository, diffpatch, Git hook, RCE. От первого запроса до proof прошло около 11 секунд.

А дальше обнаружился loader крипто-майнера. Покажу, как это произошло и что пришлось переделать на сервере.

Читать разбор

С++20 и асинхронный ввод-вывод для обработки крашей приложения

Уровень сложностиСредний
Время на прочтение23 мин
Охват и читатели6.9K

Как асинхронно отправить диагностическую информацию на удалённые сервера для дальнейшей диагностики в условиях очень ограниченной среды? Корутины C++20 без динамической памяти и исключений, а также некоторые другие вещи, о которых вы бы никогда не подумали, что они вам нужны.

Читать далее

Что делать, если сервер доступен по SSH, а сайт не открывается

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели16K

Мониторинг шлёт тревогу, пользователи пишут, что «всё лежит», но SSH пускает на сервер. Значит, машина включена и 22-й порт доступен. О домене, портах 80 и 443, TLS, веб-сервере и приложении это пока ничего не говорит… Кажется, что нужно просто перезапустить nginx, но перезапуск стирает часть следов и может превратить частичную аварию в полную беду. Под катом расскажу, как пройти путь запроса сверху вниз и найти место, где он остановился.

Читать

NVMe выдаёт 600 000 записей в секунду, а база коммитит 180

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели7.1K

NVMe показывает сотни тысяч IOPS, а база упирается в пару сотен коммитов в секунду — знакомая ситуация, если ориентироваться на обычные тесты записи.

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

Читать разбор

Я дал AI-агенту доступ к своему Telegram. Вот что из этого получилось

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели7.1K

Вы когда нибудь задумывались, что можно узнать о вас и про вас из вашей истории переписки в Telegram?

Я подключил к Hermes пользовательскую Telegram-сессию. После этого агент смог искать в моих чатах, читать нужные фрагменты истории, находить контакты, выгружать выбранные переписки в JSONL и, после моего подтверждения, писать от моего имени.

Последний пункт звучит эффектно и немного тревожно. Так и должно быть. Личный Telegram хранит годы разговоров, договорённостей, файлов и случайных деталей, которые я давно забыл. Доступ к аккаунту даёт агенту контекст заметной части моей жизни. Заодно он даёт возможность совершить очень убедительную ошибку от моего имени.

Так начался эксперимент с MTProto, Pyrogram, tgcli и SKILL.md для Hermes. Польза обнаружилась быстро. Ограничения пришлось придумывать почти так же быстро, ещё до первой реальной отправки.

Какие знания можно вытащить из твоего tg

Сервер стал вдвое мощнее, а хвост задержек вырос втрое

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели7.2K

Сервер стал мощнее, а p99 внезапно вырос втрое — при свободной памяти и почти пустом CPU. В статье разбираем, как NUMA влияет на задержки, где искать удалённые обращения к памяти и когда привязка к узлу помогает, а когда только мешает.

Читать разбор

Оптимизируем код решения СЛАУ методом Гаусса под процессор Эльбрус‑8СВ

Уровень сложностиСредний
Время на прочтение34 мин
Охват и читатели11K

Здравствуйте, друзья, меня зовут Ерохин Кирилл, я программист-любитель, а по совместительству популяризатор российского программного и аппаратного обеспечения, и в этом сентябре я провожу второе (теперь ежегодное) соревнование по алгоритмическому программированию на C/C++ для платформы Эльбрус (e2k), для студентов и выпускников со всей России «Кубок СЭРПАС 2026». Сегодня мне нужно дать участникам соревнования пример оптимизации кода под процессор Эльбрус-8СВ, а Хабр мне в этом поможет, ему не впервой.

Читать далее

Уменьшали как могли: сделали микроминиатюрный SOM на базе Linux (NAPI Slot) и промышленный шлюз на его основе

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели11K

Когда речь идет о промышленном сборе данных, даже компьютер-одноплатник иногда избыточен по габаритам. Если устройство встраивается в щиток, в корпус датчика или в готовый прибор стороннего производителя, каждый лишний сантиметр платы —  это переделка корпуса. Для таких случаев мы разработали миниатюрный модуль — NAPI Slot, и еще несколько решений на его основе (мини-компьютер, коммутатор, мини-мрашрутизатор, шлюз). А сторонние разработчики могут сконструировать нужную плату c этим SOM под свои задачи.

Читать далее

Ближайшие события

v1.10: роли, личности и снова этот WardLink…

Уровень сложностиПростой
Время на прочтение1 мин
Охват и читатели10K

Не буду повторятся и заново объяснять что такое ONYX, в этой статье я уже все подробно описал. Это обзор нового обновления.

Читать далее

Мы проверяли, что устройство работает. Оказалось — мы проверяли не то

Уровень сложностиСложный
Время на прочтение12 мин
Охват и читатели7.5K

Исправное устройство успешно обновилось, доказало своё здоровье, а через два перезапуска откатилось на старую прошивку. Причина оказалась вообще не в обновлении: в тот раз наш бэкенд отвечал три минуты вместо одной.

У нас парк ARM‑устройств: удалённое обновление ядра, A/B‑слоты, автоматический откат. Казалось бы, схема известная, готовые движки есть, документация написана. Сам движок действительно поехал за неделю. Потом полтора месяца мы выковыривали дефекты, которые не падали, ничего не писали в лог и не ловились обычными тестами.

Ниже — семь самых поучительных случаев. И у всех одна форма: каждая проверка утверждала больше, чем на самом деле доказывала.

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

В итоге — как с нашим правительством: свою работу оценили на отлично, а эксперимент, очевидно, неудачный.

И чё?

Чужой код, свои патчи. Зачем компании инвестируют в open source

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели7.9K

Open source компонент редко остается неизменным после того, как попадает в большой продукт. Если команде не хватает нужной функции, библиотека плохо стыкуется с внутренней системой или выпуск обновления безопасности не укладывается в запланированные сроки, то в ход идет доработка собственными силами. Часть изменений в таком случае отправляется в исходный репозиторий, тогда как остальные годами живут в отдельной ветке.

В конце 2025 года Linux Foundation Research опросила 567 специалистов о том, как их организации работают с такими изменениями. Результаты вошли в февральский отчет «ROI for Open Source Software Contribution». Формально исследование посвящено финансовой выгоде от вложений в open source, но нас в отчете больше всего заинтересовала практическая часть. По таблицам из отчета можно понять, что именно компании дорабатывают, когда отправляют код авторам проекта и в каких случаях сохраняют собственный форк.

Читать далее

ПЛК перестает быть закрытой коробкой. Зачем контроллеру Linux?

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели8.3K

Когда мы говорим про ПЛК, обычно представляем достаточно закрытое устройство: подключили модули ввода-вывода, написали программу на ST или LD, загрузили проект - и контроллер годами выполняет один и тот же цикл.

Но современные контроллеры все чаще совмещают PLC-runtime и Linux-среду, в которой можно запускать базы данных, MQTT, VPN, приложения на Python и C++, web-сервисы и даже контейнеры. Разберемся, зачем производители идут в эту сторону, что такая архитектура дает пользователю и какие новые риски создает.

Читать далее

Ubuntu 26.04 как маршрутизатор для GNS3: настраиваем NAT, DHCP и DNS в Hyper-V

Время на прочтение10 мин
Охват и читатели7.5K

Как дать узлам внутри GNS3 доступ в интернет, не используя встроенный NAT Hyper-V?

В этой статье превратим Ubuntu 26.04 в маршрутизатор лабораторного стенда. Настроим NAT, DHCP и DNS только средствами Linux.

В результате Alpine получит сетевые параметры по DHCP, выйдет в интернет и мы установим на него клиент OpenSSH.

Заодно разберем неочевидную проблему с маршрутом по умолчанию в Windows, из-за которой трафик физического хоста может попасть в петлю.

Настраиваем стенд

Как ядро Linux решает, какой процесс «убить» при нехватке памяти

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели15K

В сентябре 2004 года разработчик Томас Хабетс вернулся к рабочей станции и обнаружил, что его экран разблокирован. Память закончилась, OOM Killer выбрал жертву и завершил xlock... Для того, чтобы больше такого не произошло Хабетс предложил список процессов, которые Linux запрещено убивать даже в такой ситуации. Его патч в ядро не вошёл, но позже разработчики добавили настройку приоритетов, поддержку cgroups и отдельный поток для быстрого освобождения памяти. 

Несмотря на это, OOM Killer всё равно может снести важный процесс, ведь ядро видит только объём памяти и заданные администратором правила. Если правил нет, то Linux сам решает, кого «убить». Почему и что делать, чтобы этого не произошло — в статье.  

Читать

Как я написал PID 1 для контейнеров на чистом ассемблере: x86-64 и ARM64

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели12K

Не потому, что контейнерному миру срочно нужен ещё один init. Есть Tini, есть docker run --init, и для большинства production-сценариев я бы по-прежнему начал именно с них.

Мне скорее хотелось разобрать задачу до самого нижнего уровня: без libc, без runtime, напрямую через Linux syscalls. Заодно проверить, насколько сильно будет отличаться одна и та же реализация на x86-64 и ARM64.

В итоге из небольшого эксперимента получился mini-init-asm: PID 1, который запускает приложение в отдельной process group, передаёт сигналы всей группе, собирает zombie-процессы и умеет корректно завершать контейнер с exit code приложения.

Позже туда добавились subreaper mode и простой restart-on-crash. А сам проект в итоге доехал сначала до Debian unstable, а затем и до testing.

Но началось всё с вопроса: что вообще должен уметь нормальный PID 1 внутри контейнера?

Читать далее