Обновить
350.34

Linux *

Пишем под *nix

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

Разработка и эксплуатация ядра Linux в нашей инфраструктуре. Доклад Яндекса

Время на прочтение13 мин
Количество просмотров9.6K
Внутреннее облако Яндекса состоит из сотен тысяч серверов в нескольких дата-центрах России и Европы. Все эти серверы работают под управлением ядра Linux. Из доклада старшего разработчика Дмитрия Монахова вы узнаете, как и зачем Яндекс разрабатывает и эксплуатирует ядро, в чем уникальная специфика ядерных задач, которые нужно решать на наших масштабах, и почему мы выбрали стратегию максимальной открытости ядра.

— Здравствуйте, все! Забавно: в последний раз я выступал в Яндексе несколько лет назад, работал в другой компании, но тоже рассказывал про фрагментацию, правда файловых систем. Сейчас рассказываю про ядро Linux.
Читать дальше →

Обзор Kali Linux 2021.2

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

В начале июня состоялся релиз дистрибутива для цифровой криминалистики и тестирования систем безопасности Kali Linux 2021.2. Эта операционная система является клоном Debian, используя репозиторий Testing с наиболее свежими пакетами. Новые iso образы становятся доступными для загрузки каждые три месяца, предыдущим релизом был 2021.1, а следующим будет 2021.3. Собственные наработки, созданные в рамках проекта, выложены на Гитлабе.
Узнать подробности

Зачем уметь работать в командной строке?

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

Сегодня мы поговорим о том, зачем учить операционную систему GNU/Linux, о преимуществах работы в командной строке и о том, как это все связано с философией Unix.

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

Читать далее

Kq: продолжаем обрабатывать JSON

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

...на Kotlin разумеется. В комментариях к предыдущей статье было задано несколько вопросов, как сделать конвертацию в tsv, почему утилита собрана в Docker образ и предложение использовать нативный образ GraalVM.

В этой статье содержится ответ на них и заодно рассказывается о последнем обновлении функций утилиты. Кто по работе часто занимается процессингом JSON - добро пожаловать под кат.

Читать далее

Архитектура контейнеров, часть 1. Почему важно понимать разницу между пространством пользователя и пространством ядра

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

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

Читать далее

Современный JSON процессор

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

Вместо тысячи слов... Хотели бы вы обрабатывать json в терминале таким образом?

Если да, то вам под кат.

gRPCurl — curl для gRPC-серверов

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


gRPC — современный фреймвок для удалённого вызова процедур, разработанный Google в 2015 году. Им начинает пользоваться всё большее количество компаний по всему миру. В России, например, это Яндекс. gRPCurl — инструмент командной строки, написанный на Go. Он разработан компанией FullStory и позволяет взаимодействовать с gRPC серверами. В этой статье будут раскрыты особенности проекта и описаны основные кейсы для его применения.
Читать дальше →

Интеграция пресетов CMake в Visual Studio и Visual Studio Code

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

В CMake 3.19 и 3.20 был зарелижен CMakePresets.json, который позволяет пользователям указывать общие параметры настройки, сборки и тестирования и делиться ими с другими пользователями. Мы добавили поддержку CMakePresets.json в Visual Studio и создали расширение CMake Tools для Visual Studio Code. Теперь вы можете вызывать CMake с CMakePresets.json в Visual Studio, в Visual Studio Code, в конвейере непрерывной интеграции и из терминалов в Windows, Linux и macOS.

Интеграция CMake Presets теперь доступна в Visual Studio 2019 16.10 Preview 2 и CMake Tools 1.7.

Читать далее

Linux kernel: просто снять снапшот не просто

Время на прочтение12 мин
Количество просмотров16K
image

Привет. Сегодня я бы хотел рассказать про проблему снятия снапшота для бэкапа, про свежее ядро Linux, и что мы на нём потеряли. Так что если вы используете Linux и делаете резервные копии — вам просто необходимо это знать. В противном случае вы можете оказаться без резервных копий.

Если кто не в курсе, то Veeam Software предлагает средства для резервного копирования. Список платформ и решений довольно внушительный, но я не об этом. Когда наша команда взялась за проект Veeam Agent for Linux (а в первой версии он назывался Linux Endpoint), то первый вопрос, который мы поставили перед собой: «Как снять снапшот?». И пришлось поресёрчить… А почему? Потому что open source. В Linux нет одного хорошего решения какой-то проблемы. Есть несколько, и все со своими «граблями». Но давайте по порядку.
Читать дальше →

Rust в ядре Linux

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


В более ранней публикации  компания Google объявила, что в Android теперь поддерживается язык программирования Rust, применяемый в разработке этой ОС как таковой. В связи с этим авторы данной публикации также решили оценить, насколько язык Rust востребован в разработке ядра Linux. В этом посте на нескольких простых примерах рассмотрены технические аспекты этой работы.

На протяжении почти полувека C оставался основным языком для разработки ядер, так как C обеспечивает такую степень управляемости и такую предсказуемую производительность, какие и требуются в столь критичном компоненте. Плотность багов, связанных с безопасностью памяти, в ядре Linux обычно весьма низка, поскольку код очень качественный, ревью кода соответствует строгим стандартам, а также в нем тщательно реализуются предохранительные механизмы. Тем не менее, баги, связанные с безопасностью памяти, все равно регулярно возникают. В Android уязвимости ядра обычно считаются серьезным изъяном, так как иногда позволяют обходить модель безопасности в силу того, что ядро работает в привилегированном режиме.
Читать дальше →

angelspie — управление окнами в X11, глобальные и не только горячие клавиши

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

Название - отсылка к devilspie, похожей утилитой. Она примечательна тем, что конфиг пишется на диалекте лисп, несмотря на это у неё весьма ограниченные возможности. Тем более у утилит типа wmctl и т.п.

С помощью библиотеки wnck можно делать куда больше, а ещё больше если задействовать gdk.

Для глобальный горячих клавиш я использовал libkeybinder, раньше я делал такое на "голой" xlib, но так удобней(и переносимей). Впрочем xlib/xtest тоже используется - чтобы эмулировать нажатие кнопок. Но эти функции опциональны.

В качестве формата конфига я выбрал yaml. Более старые версии использовали конфиг на питоне, но я решил что yaml удобней конечным пользователям. Тем более в него можно встраивать код на python и sh.

В детали реализации я вдаваться не буду. Там много магии и метапрограммирования, часть кода сгенерирована.

Лучше покажу пример конфига, который использует часть возможностей. Кстати, новые правила можно генерировать из командной строки, оно возьмет name и class_group активного окна.

Читать далее

Свой лунапарк TFTP с блэкджеком и С++17

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

image


Преамбула


Я работаю в команде разработки встраиваемого ПО на базе GNU Linux для телекоммуникационного оборудования. В ходе разработки у нашей команды появляется огромное количество прошивок для нашего оборудования: релизные версии, предрелизные версии, тестовые отладочные сборки, сборки для разных веток из трекера задач — и все это для разных аппаратных платформ.


Прошивка, в данном случае, это ...

набор бинарных файлов, размером до 70Мб, представляющих собой:


  • доработанный Das u-boot;
  • доработанное ядро GNU Linux;
  • файловая система, в которой содержится множество скомпилированных исполняемых файлов, конфигураций и пр., например, корневая файловая система GNU Linux;
  • кортеж комбинаций всего перечисленного;

Для идентификации файлов прошивки в системе документооборота и трекере используются MD5 хеши в файлах *.md5. В итоге имеем несколько деревьев в файловой системе для хранения прошивок.


Обновление ПО, а именно передача прошивки в изделие, происходит через протокол TFTP.


Постановка задачи


Необходимо избавиться от "головной боли" при поиске и идентификации нужной прошивки, для чего необходимо чтобы сервер TFTP осуществлял поиск и выгрузку файлов используя их md5-хеш, осуществляя рекурсивный поиск по нескольким каталогам.

Читать дальше →

Внутренности Linux: как /proc/self/mem пишет в недоступную для записи память

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

Странная причудливость псевдофайла /proc/*/mem заключается в его «пробивной» семантике. Операции записи через этот файл будут успешными даже если целевая виртуальная память помечена как недоступная для записи. Это сделано намеренно, и такое поведение активно используется проектами вроде компилятора Julia JIT или отладчика rr.

Но возникают вопросы: подчиняется ли привилегированный код разрешениям виртуальной памяти? До какой степени оборудование может влиять на доступ к памяти ядра?

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

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

Floppinux — Linux, умещенный на дискету

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

Новость по этому поводу уже была, время подавать и сам перевод. В своем руководстве Кристиан подробно излагает каждый шаг процесса создания дистрибутива и его записи на дискету формата 3.5". В конечном итоге работает такой дистрибутив даже на старых ПК с i486DX и вполне может выполнять скомпилированные приложения.

Gentoo/Arch/LFS как путь в мир Linux

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

Долго держался, не публиковал этот материал. Последний каплей стало вот это: Как Unix-way убивает десктопный Linux


Попалось мне обсуждение на habr Q&A habr Q&A
Очень понравился вот этот ответ от пользователя xolst9.


Стал вспоминать свой опыт и решил развернуто выразить свой взгляд на проблему.
В основном буду писать о Gentoo-linux, но во многом это верно и для Arch linux. С ним у меня опыт по-меньше, но этот дистриб я также считаю отличной учебной партой.

Читать дальше →

Релиз Linux 5.12, подробности для локалхоста

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

В самом начале последней недели апреля увидела свет новая версия ядра Linux. Особенностью данного релиза стал сам факт того, что понадобился RC8. Помимо того в течении апреля произошла совершенно невероятная история с исправлениями из Университета Миннесоты, о которых следует рассказать отдельно, когда немного осядет пыль и полностью будет восстановлен ущерб от преднамеренно неисправных патчей.
Читать дальше →

Заметки о Unix: надёжная работа с API C-библиотеки Unix возможна только из программ, написанных на C

Время на прочтение3 мин
Количество просмотров9K
Для того чтобы полностью реализовать требования системы верификации источника системных вызовов, разработчики OpenBSD хотят, чтобы Go выполнял бы системные вызовы через C-библиотеку, а не напрямую, из собственной среды выполнения (а у Go есть некоторые причины поступать именно так). На первый взгляд это кажется не особенно серьёзной проблемой. Это, конечно, немного неудобно, но у языка вроде Go должна быть возможность просто выполнять вызовы обычных функций из C-библиотеки, вроде open() (и использовать ABI вызова C-функций). К сожалению, не так всё просто, так как очень часто фрагменты обычного API C-библиотеки, на самом деле, реализованы в препроцессоре C. Из-за этого API C-библиотеки нельзя надёжно использовать для решения обычных задач без написания собственного связующего кода на C.


Читать дальше →

Thunderbird, RNP и важность хорошего API

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


Недавно мне довелось побеседовать с разработчиком Thunderbird о проектировании API. В ходе этой беседы я поделился соображениями о RNPновой реализации OpenPGP, которую Thunderbird недавно стал использовать вместо GnuPG.

Собеседник скептически отнесся к моему тезису о том, что API RNP нуждается в улучшении, и спросил, «разве это не субъективно – какие API лучше, а какие хуже?». Согласен, у нас нет хороших метрик для оценки API. Но не соглашусь, что мы в принципе не в силах судить об API.

На самом деле, подозреваю, что большинство опытных программистов узнают плохой API, если увидят его. Думаю, далее в этой статье получится разработать хорошую эвристику, которую я попытаюсь выстроить на моем собственном опыте работы с (и над) GnuPG, Sequoia и RNP. Затем я рассмотрю API RNP. К сожалению, этот API не только можно запросто использовать неправильно – он к тому же обманчив, поэтому пока его не следует использовать в контекстах, где принципиальная роль отводится соблюдению безопасности. Но целевая аудитория Thunderbird – это люди, известные своей уязвимостью, в частности, журналисты, активисты, юристы и их партнеры, отвечающие за коммуникацию; все эти люди нуждаются в защите. На мой взгляд, это означает, что в Thunderbird должны лишний раз подумать, стоит ли использовать RNP.
Читать дальше →

Nix: воспроизводимая сборка

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


Привет, Хаброюзеры!


Сегодня мы продолжим наш цикл статей о Nix и как мы в Typeable его используем.


Первый пост из серии, рассказывающий об основах языка Nix, можно прочитать здесь.


Так как мы очень любим и много используем Haskell для разработки, пример приложения будет на этом языке, но знание Haskell здесь никак не требуется. С лёгким допиливанием, код из примеров можно использовать и для сборки проектов на других языках.


Весь код для этой статьи можно найти в репозитарии на Github.

Читать дальше →

Управляем контактами GPIO из C# .NET 5 в Linux на одноплатном компьютере Banana Pi M64 (ARM64) и Cubietruck (ARM32)

Время на прочтение27 мин
Количество просмотров21K
dotnet libgpiod

Когда заходит речь про программирование на C# .NET для одноплатных компьютеров, то разговоры крутятся только в основном вокруг Raspberry Pi на Windows IoT. А как же Banana/Orange/Rock/Nano Pi, Odroid, Pine64 и другие китайские одноплатные компьютеры работающие на Linux? Так давайте это исправим, установим .NET 5 на Banana Pi BPI-M64 (ARM64) и Cubietruck (ARM32), и будем управлять контактами GPIO из C# в Linux. В первой части серии постов, подключим светодиод и кнопку для отработки прерываний и рассмотрим библиотеку Libgpiod (спойлер, библиотеку так же можно использовать в C++, Python) для доступа к контактам GPIO.

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