Как стать автором
Поиск
Написать публикацию
Обновить
410.13

Linux *

Пишем под *nix

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

Не пора ли валить с gnu libc на что‑то другое?

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров21K

Пользуюсь открытым ПО значительное время. Сижу на Линуксе.

Но в последнее время настолько часто сталкиваюсь с различными багами, что думается иногда, а как оно вообще в принципе работает?

Последний эпизод коснулся совсем уж системного кода - стандартной библиотеки libc от GNU. Системнее может быть только ядро.

История такая. Собрал Хромиум (не быстро). Когда наконец сборка завершилась с попутным решением проблем, думал: ну вот наконец щас запущу, посмотрю как работают интересующие меня вещи. И тут произошёл облом. Хром падал почти в самом начале запуска с ошибкой доступа к памяти. Довольно быстро удалось выяснить, что падение происходит из-за ошибки обращения по нулевому указателю. И происходит оно в динамическом загрузчике, то бишь в libdl, при загрузке библиотеки через dlopen. libdl.so является одной из компонент пакета стандартной библиотеки и понятно, самой системной библиотекой в ОС. Подробности всей ситуации я описал в вопросе на stackoverflow.

Вкратце: при загрузке библиотеки libXcursor.so подтягиваются непонятно откуда взявшиеся зависимости, не имеющие никакого отношения к упомянутой библиотеке. И зависимости эти не инициализированы корректно. Откуда и происходит обращение по нулевому указателю. Впоследствии выяснилось, что проблема начинается с несовпадающих версий библиотек libQt5Core, в результате чего libdl делает полный отбой с попыткой отката всех изменений.

Но, видимо, этот откат реализован из рук вон плохо, поскольку после него начинают происходить весьма странные вещи. И загрузка неинициализированной зависимости с нулевыми указателями лишь одна из них. Я ещё сделал пробник в виде простого приложения, которое пытается воспроизвести ситуацию. И в этом пробнике также происходил сбой, но уже при инициализации (вызов init или конструктор в их терминологии) либы libpthread.so (тоже очень системная) - потерян адрес глобального на процесс хранилища либ.

Читать далее

Устройство GPIO-драйверов в Linux

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

Рассмотрим, как устроены GPIO-драйверы в Linux, и почему это сделано именно так. Поймем, почему для простого мигания светодиодом в этой операционной системе надо пройти через N слоев абстракции.

Читать далее

Разбираемся с Bluetooth Low Energy на примере превращения USB-клавиатуры в беспроводную

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров20K


Меня давно интересовало, как работают беспроводные клавиатуры, но как-то не сильно вдавался в подробности, пока не возникла идея превратить свою механическую клавиатуру в беспроводную. Честно говоря, не думал, что узнаю так много нового и интересного.

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

Не имея навыков пайки, вы сможете создать полезное Bluetooth-устройство, а ваше понимание Bluetooth и Linux уже не будет прежним, если вы, конечно, не являетесь экспертом в этих областях.

Данная статья ставит целью на примере разработки собственной Bluetooth-клавиатуры помочь разобраться в базовых понятиях Bluetooth, так как чтение скучных спецификаций и статей с введением в технологию даёт мало пользы.
Читать дальше →

Как я уменьшил размер образа docker на 40%

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

Ежедневно по работе я сталкиваюсь с Dockerfile, написал несколько из них самостоятельно, создавал контейнеры и всё такое. Но я никогда не публиковал их в реестре docker hub. Мне хотелось создать ugit — инструмент для отмены команд git (написанный в виде шелл-скрипта), который бы могли использовать люди, не любящие устанавливать случайные шелл-скрипты из Интернета.

Да-да, знаю. НАДО ПЕРЕПИСАТЬ ЕГО НА GO/RUST/ЕЩЁ КАКОМ-ТО ВОЛШЕБНОМ ЯЗЫКЕ. Сейчас скрипт состоит из пятисот с лишним строк Bash, поэтому я перепишу его на другой язык только под страхом смертной казни. Кроме того в ugit уже есть практически все функции (осталось реализовать отмену лишь небольшого количества команд, используемых не так часто).

В этой статье я расскажу о том, как написал официальный Dockerfile для ugit (шелл-скрипта) и снизил размер образа почти на 40% (с 31,4 МБ до 17,6 МБ), выполняя пошаговые попытки работы по инструкции. Надеюсь, это замотивирует других любителей шелла тоже публиковать свои скрипты в виде образов docker!

Читать далее

Мигель де Икаса и его мечта — Linux на десктопах

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров19K

Мигель де Икаса, 2014 г. Фото: he San Diego Union-Tribune

Как известно, гении предпочитают общаться и работать с равными себе, они притягивают друг друга. И если вы хотите что-то узнать о человеке — посмотрите, кто его друзья. Например, взять выдающегося Фабриса Беллара, о котором мы публиковали несколько статей. Его не очень волнует мирская суета (карьера, деньги, известность и прочие атрибуты «успеха» у обывателей), а только интересная работа. В интернете всего две фотографии Фабриса, и одна из них — с компьютерной конференции, где он сфотографировался с Мигелем де Икаса, основателем проектов GNOME и Mono.

Сразу понятно, кто достоин уважения с точки зрения Беллара.
Читать дальше →

Замешиваем файлы в тэги. Часть 4

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

Продолжаем создавать модуль ядра в Линукс на примере виртуальной файловой системы.

Часть 1: Описание задачи, Модуль ядра

...

Часть 3: Inode, Lookup

Часть 4: Inode-операции: symlink, unlink

Продолжаем разбираться

Что нового в IMSProg?

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров3.6K

Пару месяцев назад я писал историю создания программатора микросхем CH341a для Linux систем. Благодаря вашим отзывам и комментариям программа изменилась, надеюсь в лучшую сторону.

Читать далее

Библиотека контролов для Avalonia UI

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

Последний год наша команда работала над кроссплатформенной версией САПР Delta Design. В результате этой работы была создана своя библиотека UI контролов для Avalonia, которая поддерживает как ОС Windows, так и ряд систем Linux, включая российские АстраЛинукс, РедОс, а также их модификации под Эльбрус.

Создание единой библиотеки контролов EremexControls.NET позволило компании ЭРЕМЕКС значительно ускорить темпы разработки и показать мультиплатформенную версию САПР Delta Design раньше обещанного срока. Применение готовых типовых блоков дало возможность инженерам фокусироваться на предметной области, не отвлекаясь на другие задачи. Сейчас библиотека контролов используются в трех внутренних проектах компании.

Под катом обзорная статья по новому продукту от компании ЭРЕМЕКС – библиотека компонентов EremexControls.NET для Avalonia UI.

Читать далее

Библиотека Helium от проекта tauOS

Время на прочтение7 мин
Количество просмотров1.5K

В настоящее время существует множество самых разных операционных систем на базе ядра Linux. Далеко не все разработчики заморачиваются созданием собственных приложений для своих дистрибутивов. Если кто-то и озаботится написанием парочки программ, то они, как правило, пользуются уже готовыми библиотеками для разработки приложений. 

Ребята из tauOS решили, что существующих библиотек в мире явно недостаточно, и запилили еще одну. Так появилась библиотека виджетов под названием Helium. Она основана на GTK и предоставляет разработчикам некоторое количество готовых компонентов для создания графического интерфейса пользователя.

В этой статье я хочу немного рассказать о компонентах библиотеки Helium, о том как запускать приложения, написанные с ее помощью, и как на ней разрабатывать свои программы. Репозиторий библиотеки можно найти здесь. Все действия, приведенные в этой статье, выполнялись в Fedora Linux 39 (Workstation Edition).

Читать далее

Apache Maven — введение в автоматизированную сборку проектов (часть 1)

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров13K

Добрый день Хабр, в данной статье мы разберём один из сборщиков проектов Apache Maven. Начнём с установки, настройки и сборки нашего первого проекта.

Apache Maven - это фреймворк по автоматизации и сборки Java-проектов. Обычно просто называют Maven.

Самую подробную информацию вы всегда можете найти на официальном сайте Maven.

А также центральный репозиторий Maven где собрано всё самое необходимое для работы с Maven.

Читать далее

Старая ошибка Unix, которую вы можете совершить при сигнале init (PID 1)

Уровень сложностиСредний
Время на прочтение2 мин
Количество просмотров4.5K

Init — традиционное имя для программы, которая выполняется как process ID 1, главный наследник всех процессов Unix, исторически отвечающий за управление системой. Process ID 1 настолько критичен для системы, что его или невозможно убить, или система перезапускается при выходе из него (или и то, и другое, тогда этот перезапуск — хак). Сегодня в Linux PID 1 необязательно оказывается двоичным файлом и процессом с именем init в буквальном смысле, в отличие от *BSD, где init остаётся двоичным файлом.

Исторически сложилось так, что по множеству причин системный администратор отправляет сигналы в init, что задокументировано для современных систем Unix, например, на странице руководства к  init(8) FreeBSD. Одна из причин заключается в том, чтобы считывать заново список последовательных портов. Традиционно и даже сегодня это выполнялось отправкой init сигнала SIGHUP.

Программа kill долгое время поддерживала отправку сигналов по имени, но сисадмины ленивы и мы обычно запоминали что SIGHUP — это сигнал 1 (а сигнал 9 — это SIGKILL). Поэтому довольно часто мы вводили kill -1 1 для отправки сигнала 1 (SIGHUP) к process ID 1 (init). Однако эта версия немного опасна, потому что она лишь на один символ отличается от версии с совершенно другими эффектами.

Читать далее

Как реализовать поведенческий анализ в Linux на уровне гипервизора

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

Привет, Хабр! Меня зовут Алексей Колесников, я работаю в отделе обнаружения вредоносного ПО экспертного центра безопасности Positive Technologies (PT Expert Security Center, PT ESC). Недавно я выступил на международной конференции AVAR 2023, которая проходила в Дубае. Рассказывал про новые плагины, разработанные PT Expert Security Center для опенсорсной системы динамического анализа вредоносного программного обеспечения DRAKVUF, и показывал, как с их помощью в песочнице PT Sandbox детектировать актуальные угрозы для Linux.

Под катом мини-обзор популярных инструментов для мониторинга вредоносов в Linux, о работе наших плагинов в DRAKVUF и анализ ВПО с их использованием.

Читать далее

Стабильный релиз Wine 9.0? Спустя год он всё-таки появился — вместе с 7 000 изменений

Время на прочтение5 мин
Количество просмотров23K

Привет, Хабр! Кажется, мы действительно дождались стабильного релиза Wine 9.0. Спустя год времени и 26 промежуточных версий представлена официальная версия Wine 9.0. Разработчики внесли несколько тысяч изменений, так что здесь есть что обсудить. Основные нововведения — архитектура WoW64 для запуска 32-разрядных программ в 64-разрядном окружении, интеграция архитектуры ARM64, а также добавление драйвера для поддержки Wayland. Конечно, есть и другие новинки. Подробнее о них — под катом.

Читать далее

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

Создание deb-пакета для самых маленьких. Из простого проекта с разделяемыми библиотеками

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров9.9K

Краткая инструкция с некоторыми опущениями о том, как собрать deb-пакет из собственного проекта быстро, без регистрации и смс

Ну-ка помацаем, кто у нас тут....

Можно ли использовать DMA вместо memcpy в Linux

Время на прочтение7 мин
Количество просмотров5.2K

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

Linux – DMA memcpy operation in Linux

Давайте попробуем разобраться, как можно использовать интерфейс к DMA для реализации стандартной операции копирования memcpy и есть ли в этом смысл.

Читать далее

Загрузка драйверов в ядре Linux

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

Почти все знают, как написать простой драйвер под Linux. На эту тему много материалов в сети. Очень мало информации о том, что находится "под капотом" у процедуры загрузки драйверов.

Читать далее

Эльфы и пингвины: что такое ELF и как он работает в Linux?

Уровень сложностиПростой
Время на прочтение37 мин
Количество просмотров32K

image


Всем привет! С вами как всегда я, Аргентум. Сегодня я расскажу и поведаю вам древние тайны, которые хранят горные старцы-сисадмины — тайны об эльфах, и как они взаимодействуют с древним народцем пингвинов. Дамы и господа, встречайте — статья о работе ELF и двоичных файлов в Linux!


Что такое ELF? Чем он отличается от PE в Windows? И многие другие ответы на ваши вопросы.


Перед тем как погрузиться в технические детали, будет нелишним объяснить, почему понимание формата ELF полезно. Это позволяет изучить внутреннюю работу операционной системы. Когда что-то пошло не так, эти знания помогут лучше понять, что именно случилось, и по какой причине. Также возможность изучения ELF-файлов может быть ценна для поиска дыр в безопасности и обнаружения подозрительных файлов. И наконец, для лучшего понимания процесса разработки. Даже если вы программируете на высокоуровневом языке типа Go или Rust, вы всё равно будет лучше знать, что происходит за сценой.


Итак, зачем изучать ELF?


  • Для общего понимания работы операционной системы
  • Для разработки ПО
  • Цифровая криминалистика и реагирование на инциденты (DFIR)
  • Исследование вредоносных программ (анализ бинарных файлов)
Читать дальше →

Строим свой SSO. Часть 4: Vue.js, Регистрация, Сброс пароля

Уровень сложностиСредний
Время на прочтение44 мин
Количество просмотров13K

Всем привет!
Мы продолжаем строить собственный SSO Server. Сегодня мы детально разберем Vue.js приложение, а также спроектируем и реализуем долгожданные механизмы регистрации и сброса пароля. Как всегда, дополнительно мы разберём ряд интересных общесистемных решений, которые наверняка Вам пригодятся в дальнейшем.

Читать далее

Переезд на Астра Линукс

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

Бывает ситуация, когда вот стоит нормальный, не ветхий дом с жильцами, с работающими коммуникациями. И простоял бы он так еще много лет. Но принято решение проложить новую магистраль и дом ей мешает. Можно снести дом, недалеко построить новый и жильцов туда переселить. А можно переместить в нужное место сам этот дом прямо вместе с жильцами и тараканами.

Такая аналогия приходит на ум после принятия решения о переходе с платформы Windows на пока единственную сертифицированную альтернативу – ОС Астра Линукс. Как жильцы гипотетического дома не могли отменить решение о магистрали, так и мы не можем отменить это решение. Придется переходить. Однако легко сказать «перейти». Когда я познакомился с IBM-PC/XT, какой-нибудь Торвальдс еще школу не кончил. За эти годы (чего уж там годы - десятилетия) появилось много привычек, приемов, навыков. Жалко все это оставлять ради принудительного перехода в другую среду. И приходит мысль – попытаться переехать, так сказать, всем домом, а не строить новый.

Читать далее

Выделение памяти для DMA в Linux

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров4.6K

Это перевод Поста Allocating Memory for DMA in Linux

В этом посте мы рассмотрим распределение памяти в Linux с использованием очень больших страниц с тем, чтобы совместно использовать эту память с устройствами PCIe, использующими DMA.

Читать далее

Вклад авторов