
Linux *
Пишем под *nix
Девелопишь на .NET Core? Го в Ubuntu, я создал

Photo by Kevin Horvat
Все 12 лет своей карьеры я работал с .NET и был крепко привязан к Windows и проприетарным инструментам разработки. Но, спасибо Microsoft, .NET Core все изменил и теперь разрабатывать для .NET можно почти на чем угодно и в чем угодно. Дело за малым — перетащить на Core свои проекты. Не так давно я решил и этот вопрос и завел трактор для полного переезда на Ubuntu.
Результат очень понравился — все взлетело, разрабатывать легко, а Docker и Kubernetes сделали процесс переезда намного легче. Но из-за слабого знания ОС, bash и запутанности вариантов установки некоторых инструментов (например, того же Docker) изначальная настройка заняла больше дня. То есть процесс довольно долгий и местами запутанный.
Дабы сэкономить время будущему себе и тем, кто также планирует попробовать разработку под Linux, я оформил все в виде скриптов. Их можно запустить на чистой Ubuntu и они все настроят пока ты сидишь и пьешь чаек. Также, при желании, их легко допилить под свои нужды.
Если для вас это звучит полезно — добро пожаловать под кат.
Так все же, зачем нужен make?

Все началось, казалось бы, с простого вопроса, который сначала ввел меня в ступор — "Зачем нужен make? Почему нельзя обойтись bash скриптами?". И я подумал — Действительно, зачем нужен make? (и самое важное) Какие проблемы он решает?
Systemd, интерактивные скрипты и таймеры

Введение
При разработке под linux возникают задачи создания интерактивных скриптов, выполняемых при включении или завершении работы системы. В system V это делалось легко, но с systemd вносит коррективы. Зато оно умеет свои таймеры.
Linux Kernel Library: ядро Linux в форм-факторе so или dll
Когда-то читал статью о выборе файловых систем «чтоб везде-везде работало». В ней в очередной раз увидел жалобы, что Ext4 замечательная файловая система, но на Windows есть только кривые неточные проприетарные драйверы. Но отмотаем ленту ещё на пару лет назад: тогда на Хабре (а в те времена — Гиктаймсе) пролетала новость про LibOS — попытку превратить Linux kernel в обычную библиотеку пользовательского режима. Упор там делался на вынос сетевого стека в user space. Как-то раз я решил поглядеть, а жив ли вообще проект, и в их блоге увидел ссылку на своего рода конкурента — проект Linux Kernel Library (LKL). По сути, это порт ядра, так сказать, на аппаратную архитектуру «библиотека пользовательского режима POSIX / Win32».
Чем интересна LKL? Во-первых тем, что она живёт и здравствует, пусть и не в основной кодовой базе ядра. Во-вторых, это более-менее честная поддержка «архитектуры», автоматически делающая доступной бОльшую часть ядра. Более того, прямо в комплекте идут утилиты-примеры: cptofs/cpfromfs, fs2tar, lklfuse. В этой статье мы протестируем LKL на хостовом Linux, заглянем в файл с образом Ext4 (Btrfs, XFS...) без рута и виртуалок и коротко обсудим, как её можно попробовать на Windows.
Buildroot: Создание кроссплатформенной прошивки с zabbix-server

История задачи
Небольшие по размеру фирмы с одной стороны, нуждаются в качественном мониторинге своей инфраструктуры (особенно в свете повсеместной виртуализации ), с другой стороны, для них финансово тяжело закупать новое оборудование. Также часто встречаются проблемы с серверной/аппаратной: зачастую стоит 1-3 tower-сервера рядом с пользовательскими рабочими местами или в небольшой нише/чулане.
Проще использовать уже готовую сборку(дистрибутив), который достаточно залить на microSD-карту и вставить в распространенный одноплатный компьютер (beaglebone, семейства raspberry pi и orange pi, asus tinker board). Кроме того, такое оборудование стоит недорого и может быть установлено в любом месте.
Функция buildargv с помощью Ragel
Забавное использование Ragel State Machine Compiler для создания функции разбора строки на int argc, char *argv[].
Все началось с того, что понадобилась функция buildargv, чтобы разбирать строку для последующей передачи в
int main (int argc, char *argv[]) { body }Ну ладно подумал я, не может быть, чтобы нигде нельзя было позаимствовать, сейчас найдем… И не нашёл...

Крутые лайфхаки для работы с WSL (Подсистема Windows для Linux )
Под катом подробнее о некоторых интересных вещах, которые вы можете делать, смешивая арахисовое масло и шоколад!

Разработка IoT-шлюза на базе Raspberry CM3+

Рисунок 1 — Плата устройства
Большой опыт работы в сфере промышленной автоматизации и АСУТП, казалось бы, должен способствовать тому, что со временем уже много всего видел и много всего знаешь. Но не тут-то было. Оказывается, иногда могут возникать задачи и проекты, которые трудно реализовать стандартными средствами. Так под один крупный проект по мониторингу и управлению в «облаке» одного небезызвестного завода N требовалось найти подходящее железо. Однако оказалось, что в России по требованиям помехозащищенности устройства и открытости системы ничего подходящего не существует. Попытка заказать идеально подходящее нам устройство из-за рубежа провалилась, поскольку на территорию нашей страны оборудование с пометкой «IoT» весьма трудно ввести в промышленных масштабах. Другие же поставщики не устроили сроками доставки в 12 недель при небольших объемах и ценой. Поэтому в голове родилась и плотно осела мысль о создании своего устройства. Причем такого, чтобы оно было универсальным и подходило не только конкретно под этот один проект, а под множество других. В итоге от момента зарождения идеи, подбора поставщиков и корпуса, разработки платы, её отладки и тестирования, написания инструкций и технической документации прошло весьма много времени. Но зато теперь я держу с легким трепетом в руках полностью законченное и рабочее устройство, и могу заявлять, что мы это сделали!
Пишем USB-драйверы для заброшенных устройств

Недавно на eBay мне попалась партия интересных USB-девайсов (Epiphan VGA2USB LR), которые принимают на вход VGA и отдают видео на USB как веб-камера. Меня настолько обрадовала идея, что больше никогда не придётся возиться с VGA-мониторами, и учитывая заявленную поддержку Linux, я рискнул и купил всю партию примерно за 20 фунтов (25 долларов США).
Получив посылку, я подключил устройство, но оно даже не подумало появиться в системе как UVC. Что не так?
Я изучил сайт производителя и обнаружил, что для работы требуется специальный драйвер. Для меня это была новая концепция, ведь в ядре моего дистрибутива Linux обычно есть драйверы для всех устройств.
Проблема Linux — в плохом маркетинге

Классический культовый фильм «Офисное пространство» язвительно критикует жизнь программистов в ферме из кубиклов, и часто очень точно отображает реальность, иногда даже ненамеренно. Примером одного из таких случаев служит Том Смыковски, персонаж, чья работа заключается в том, чтобы «разбираться с клиентами, чтобы этого не приходилось делать программистам». В фильме вся роль Тома сводится к этому краткому определению, но на самом деле его роль крайне важна для большинства реальных предприятий, полагающихся на работу программистов, делающих их ключевой продукт.
У инженеров и программистов могут быть трудности при общении с клиентами, и часто у них просто нет времени (и желания) с ними взаимодействовать. Клиенты могут испытывать раздражение от попыток понять программистов или чётко донести до них свои идеи. Наличие такого человека, как Том Смыковски, часто необходимо для того, чтобы закрыть этот разрыв и сгладить все углы, но в мире Linux существует слишком мало таких Томов. Клиентам, или пользователям, во многих ситуациях приходится напрямую вести дела с программистами, и результаты оказываются неудовлетворительными с точки зрения представителей обеих групп. У Linux есть проблема с маркетингом, и ему нужно маркетинговое решение, если он хочет увеличить долю рынка в мире ПК.
Собираем в rpm WireMock — утилиту для создания заглушек над веб-сервисами в Fedora COPR аналоге PPA в Ubuntu
WireMock — утилита, библиотека на java для создания заглушек над веб-сервисами. Он создает HTTP-сервер, к которому мы могли бы подключиться, как к реальному веб-сервису.
Fedora COPR — это бесплатный хостинг для размещения пользовательских репозиториев (аналог AUR в Arch Linux или PPA в Ubuntu). Из особенностей встроенная возможность собирать rpm пакеты указав имя PIP и RubyGems.
В этом посте напишу как собирать rpm из вашего репозитория по коммиту в Fedora COPR.
Криптографический АРМ на базе стандартов с открытым ключом. Конфигурирование токенов PKCS#11
Еще раз просмотрев функционал утилиты cryptoarmpkcs, обратил внимание на то, что она, в основном работая с криптографическими токенами/смаркартами PKCS#11, не имеет встроенного функционала для их конфирурирования. Речь идет об инициализации токенов, установки PIN-кодов и т.п. И было решено добавить этот функционал. Первым делом для этого пришлось расширить функционал пакета TclPKCS11, библиотека которого написана на языке Си. Новые функции пакета TclPKCS11
В пакете появились три новые функции:
::pki::pkcs11::inittoken <handle> <slotId> <SO-pin> <label for token>::pki::pkcs11::inituserpin <handle> <slotId> <SO-pin> <USER-pin>::pki::pkcs11::setpin <handle> <slotId> <so | user> <oldpin> <newpin>Ближайшие события
Умный сервис кэша на базе ZeroMQ и Tarantool

Привет, Хабр! Я работаю бэкенд-разработчиком в Московском кредитном банке, и за время работы у меня накопился некоторый опыт, которым я хотел бы поделиться с сообществом. Сегодня я расскажу, как мы писали свой собственный сервис кэша для фронт-серверов наших клиентов, использующих мобильное приложение «МКБ Онлайн». Статья может быть полезна тем, кто занимается проектированием сервисов и знаком с микросервисной архитектурой, in-memory базой данных Tarantool и библиотекой ZeroMQ. В статье практически не будет примеров кода и объяснения основ, а только описание логики работы сервисов и их взаимодействия на конкретном примере, работающем у нас на бою уже более двух лет.
Необычные системные вызовы на Linux
Что видит программист, начиная работать с языком C? Он видит fopen, printf, scanf и ещё много других функций. Видит он и всякие open и mmap — казалось бы, зачем их выделять? Но, в отличие от первой группы, эти две функции при выполнении на ядре Linux являются системными вызовами (на самом деле нет, почти никогда системный вызов нельзя просто вызвать как функцию, и поэтому libc содержит обёртки, перепаковывающие аргументы и иногда, как в случае с тем же open, заменяющие старые системные вызовы более общими новыми). Вообще, в отличие от тысяч библиотечных функций, доступных на типичной GNU/Linux системе, интерфейс ядра имеет довольно ограниченное количество точек входа — порядка нескольких сотен, зато то, что для user space — crash (например, обращение к отсутствующей странице), для ядра — default mode of operation.
В этой статье я расскажу некоторые интересные на мой взгляд факты. В ней не будет futex-ов и прочих скучных (наверное) деталей реализации. Будет преимущественно то, что вызывало у меня реакцию «А что, так можно было?!?».
Обработка системных вызовов посредством LD_PRELOAD с единой точкой входа
Делая пере-реализацию QInst на LLVM, я столкнулся с такой проблемой: QEMU в режиме эмуляции одного процесса естественным образом перехватывает все «гостевые» системные вызовы. В итоге плагин инструментации имеет единую точку входа для их предобработки, где можно по номерам SYS_* и значениям аргументов принимать решения. Это довольно удобно. Проблема в том, что все системные вызовы делает, в основном, libc и, переписывая код статически, мы просто до этой части в большинстве случаев не доберёмся. Конечно, можно было бы использовать ptrace, который как раз предназначен и для этого в том числе. Но тогда не уверен, что получилось бы обойтись без отдельного процесса, а семантика QInst предполагала тривиальный «синхронный» перехват — пришлось бы как-то инжектить вызов обработчика, а это сильно сложнее привычного LD_PRELOAD. Можно оборачивать каждый системный вызов — но это, как минимум, неудобно (к тому же, можем что-нибудь пропустить, ведь в этом случае мы перехватываем на самом не системные вызовы, а их конкретные обёртки).
Под катом — решение, не привязанное к LLVM, но заточенное под Linux на x86_64 (но адаптируемое для Linux на других архитектурах).
Примечание: в этой статье не представлено универсального готового решения — оно лишь подходит для достаточно широкого списка случаев. Зато эту статью можно считать обзорно-пятничной: интересная (надеюсь) новая (для большинства?) информация, щепотка брутфорс-программирования и рабочие примеры. И пусть нашу пятницу не омрачает даже тот факт, что сегодня четверг!
Что нужно знать о Red Hat OpenShift Service Mesh

В Red Hat OpenShift Service Mesh мы выходим за рамки традиционной маршрутизации и предлагаем компоненты для трассировки и визуализации таких запросов, чтобы сделать взаимодействие сервисов более простым и надежным. Введение специального логического уровня управления, так называемой сервисной сетки service mesh, помогает упростить подключение, контроль и оперативное управление на уровне каждого отдельного приложения, развернутого на Red Hat OpenShift, ведущей Kubernetes-платформе корпоративного класса.
Разработка с Docker на Windows Subsystem for Linux (WSL)

Для полноценной работы с проектом на docker'е в WSL необходима установка WSL 2. На момент написания заметки ее использование возможно только в рамках участия в программе предварительной оценки Windows (WSL 2 доступна в сборках 18932 и выше). Так же отдельно стоит упомянуть, что необходима версия Windows 10 Pro для установки и настройки Docker Desktop.
Важно! В WSL 2 пропала острая необходимость в Docker Desktop для Windows 10. Как обходиться без него описано в пункте Про Docker в Ubuntu.
Криптографический АРМ на базе стандартов с открытым ключом. Функции разбора и просмотра ASN1-структуры
Основной работой при создании утилиты cryptoarmpkcs было не разработка кода или графического интерфейса, а работа с ASN1-структурами. Именно в этих структурах хранятся сертификаты x509v3, электронные подписи документов (PKCS#7, CMS), запросы на сертификаты (PKCS#10, CSR), открытые и закрытые ключи, защищенные контейнеры PKCS#12/PFX, списки отозванных сертификатов CRL и штампы времени для электронной подписи, запросы и ответы OCSP и так далее и тому подобное. Постоянно приходилось просматривать уже имеющиеся структуры для понимания того как это делали другие, просматривать только что собранные самим AN1-структуры. Процесс понятен. Но поскольку я работаю на Linux (сейчас это Mageia, и код для Windows тоже готовлю на Linux), то под рукой из доступных средств разбора ASN1-структур были утилиты openssl и derdump из пакета NSS. Лично мои предпочтения были на стороне derdump. Именно она и стала прототипом рассматриваемой здесь утилиты derdump.tcl/tclderdump для просмотра ASN1-структур. И если вы сравните вывод утилиты derdump из пакета NSS и утилиты derdump.tcl, то вы практически не увидите различий:Опыт участия в GSoC: как двое (трое) студентов реально улучшили код CRIU

Вклад авторов
dlinyj 1092.6Seleditor 1084.0unxed 1071.5artyomsoft 858.0Bright_Translate 852.3bodyawm 700.0Andrey2008 679.2ru_vds 572.6m1rko 537.2
