Все потоки
Поиск
Написать публикацию
Обновить
193.52

Linux *

Пишем под *nix

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

Делаем кроссплатформенное нативное десктоп приложение на Angular

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

angular-nodegui


Как вы уже наверно знаете, Angular уже есть во многих платформах:



Ну и, конечно, здесь не хватало десктопа (не будем пока про Electron).

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

CreateRemoteThread для Linux

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

Мицуха несёт новые потокиВ WinAPI есть функция CreateRemoteThread, позволяющая запустить новый поток в адресном пространстве другого процесса. Её можно использовать для разнообразных DLL-инъекций как с нехорошими целями (читы в играх, кража паролей, и т. д.), так и для того, чтобы на лету исправить баг в работающей программе, или добавить плагины туда, где они не были предусмотрены.


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


Я подробно расскажу о том, как с помощью спецификации ELF, некоторого знания архитектуры x86_64 и системных вызовов Linux написать свой маленький кусочек отладчика, способный загрузить и исполнить произвольный код в уже запущенном и работающем процессе.


Для понимания текста потребуются базовые знания о системном программировании под Linux: язык Си, написание и отладка программ на нём, осознание роли машинного кода и памяти в работе компьютера, понятие системных вызовов, знакомство с основными библиотеками, навык чтения документации.

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

Большая часть суперкомпьютеров работают под управлением Linux — обсуждаем ситуацию

Время на прочтение3 мин
Количество просмотров25K
Начиная с 2018 года, пятьсот самых высокопроизводительных систем в мире работают на Linux. Обсуждаем причины сложившейся ситуации и приводим мнения экспертов.

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

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

Время на прочтение3 мин
Количество просмотров36K
image
Photo by Kevin Horvat
Все 12 лет своей карьеры я работал с .NET и был крепко привязан к Windows и проприетарным инструментам разработки. Но, спасибо Microsoft, .NET Core все изменил и теперь разрабатывать для .NET можно почти на чем угодно и в чем угодно. Дело за малым — перетащить на Core свои проекты. Не так давно я решил и этот вопрос и завел трактор для полного переезда на Ubuntu.

Результат очень понравился — все взлетело, разрабатывать легко, а Docker и Kubernetes сделали процесс переезда намного легче. Но из-за слабого знания ОС, bash и запутанности вариантов установки некоторых инструментов (например, того же Docker) изначальная настройка заняла больше дня. То есть процесс довольно долгий и местами запутанный.

Дабы сэкономить время будущему себе и тем, кто также планирует попробовать разработку под Linux, я оформил все в виде скриптов. Их можно запустить на чистой Ubuntu и они все настроят пока ты сидишь и пьешь чаек. Также, при желании, их легко допилить под свои нужды.

Если для вас это звучит полезно — добро пожаловать под кат.
Читать дальше →

Так все же, зачем нужен make?

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


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

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

Systemd, интерактивные скрипты и таймеры

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


Введение


При разработке под linux возникают задачи создания интерактивных скриптов, выполняемых при включении или завершении работы системы. В system V это делалось легко, но с systemd вносит коррективы. Зато оно умеет свои таймеры.

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

Linux Kernel Library: ядро Linux в форм-факторе so или dll

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

Когда-то читал статью о выборе файловых систем «чтоб везде-везде работало». В ней в очередной раз увидел жалобы, что 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

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


История задачи


Небольшие по размеру фирмы с одной стороны, нуждаются в качественном мониторинге своей инфраструктуры (особенно в свете повсеместной виртуализации ), с другой стороны, для них финансово тяжело закупать новое оборудование. Также часто встречаются проблемы с серверной/аппаратной: зачастую стоит 1-3 tower-сервера рядом с пользовательскими рабочими местами или в небольшой нише/чулане.


Проще использовать уже готовую сборку(дистрибутив), который достаточно залить на microSD-карту и вставить в распространенный одноплатный компьютер (beaglebone, семейства raspberry pi и orange pi, asus tinker board). Кроме того, такое оборудование стоит недорого и может быть установлено в любом месте.

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

Функция buildargv с помощью Ragel

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

Забавное использование Ragel State Machine Compiler для создания функции разбора строки на int argc, char *argv[].


Все началось с того, что понадобилась функция buildargv, чтобы разбирать строку для последующей передачи в


int main (int argc, char *argv[]) { body }

Ну ладно подумал я, не может быть, чтобы нигде нельзя было позаимствовать, сейчас найдем… И не нашёл...


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

Крутые лайфхаки для работы с WSL (Подсистема Windows для Linux )

Время на прочтение3 мин
Количество просмотров42K
Я глубоко погружен в WSL (Windows Subsystem для Linux), и теперь, когда WSL2 доступен в Windows Insiders, это отличное время, чтобы по-настоящему изучить доступные опции. Очень интересная фича, которую я нашел в WSL, — возможность «чисто» перемещать данные между мирами. Это не тот опыт, который вы легко можете получить с полноценными виртуальными машинами, и он говорит о тесной интеграции Linux и Windows.

Под катом подробнее о некоторых интересных вещах, которые вы можете делать, смешивая арахисовое масло и шоколад!

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

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

Время на прочтение3 мин
Количество просмотров14K
image
Рисунок 1 — Плата устройства

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

Пишем USB-драйверы для заброшенных устройств

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


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

Получив посылку, я подключил устройство, но оно даже не подумало появиться в системе как UVC. Что не так?

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

Проблема Linux — в плохом маркетинге

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


Классический культовый фильм «Офисное пространство» язвительно критикует жизнь программистов в ферме из кубиклов, и часто очень точно отображает реальность, иногда даже ненамеренно. Примером одного из таких случаев служит Том Смыковски, персонаж, чья работа заключается в том, чтобы «разбираться с клиентами, чтобы этого не приходилось делать программистам». В фильме вся роль Тома сводится к этому краткому определению, но на самом деле его роль крайне важна для большинства реальных предприятий, полагающихся на работу программистов, делающих их ключевой продукт.

У инженеров и программистов могут быть трудности при общении с клиентами, и часто у них просто нет времени (и желания) с ними взаимодействовать. Клиенты могут испытывать раздражение от попыток понять программистов или чётко донести до них свои идеи. Наличие такого человека, как Том Смыковски, часто необходимо для того, чтобы закрыть этот разрыв и сгладить все углы, но в мире Linux существует слишком мало таких Томов. Клиентам, или пользователям, во многих ситуациях приходится напрямую вести дела с программистами, и результаты оказываются неудовлетворительными с точки зрения представителей обеих групп. У Linux есть проблема с маркетингом, и ему нужно маркетинговое решение, если он хочет увеличить долю рынка в мире ПК.
Читать дальше →

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

Собираем в rpm WireMock — утилиту для создания заглушек над веб-сервисами в Fedora COPR аналоге PPA в Ubuntu

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

WireMock — утилита, библиотека на java для создания заглушек над веб-сервисами. Он создает HTTP-сервер, к которому мы могли бы подключиться, как к реальному веб-сервису.


Fedora COPR — это бесплатный хостинг для размещения пользовательских репозиториев (аналог AUR в Arch Linux или PPA в Ubuntu). Из особенностей встроенная возможность собирать rpm пакеты указав имя PIP и RubyGems.


В этом посте напишу как собирать rpm из вашего репозитория по коммиту в Fedora COPR.

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

Криптографический АРМ на базе стандартов с открытым ключом. Конфигурирование токенов PKCS#11

Время на прочтение4 мин
Количество просмотров2.2K
Еще раз просмотрев функционал утилиты 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

Время на прочтение14 мин
Количество просмотров5K
Руслан Ароматов, главный разработчик, МКБ



Привет, Хабр! Я работаю бэкенд-разработчиком в Московском кредитном банке, и за время работы у меня накопился некоторый опыт, которым я хотел бы поделиться с сообществом. Сегодня я расскажу, как мы писали свой собственный сервис кэша для фронт-серверов наших клиентов, использующих мобильное приложение «МКБ Онлайн». Статья может быть полезна тем, кто занимается проектированием сервисов и знаком с микросервисной архитектурой, in-memory базой данных Tarantool и библиотекой ZeroMQ. В статье практически не будет примеров кода и объяснения основ, а только описание логики работы сервисов и их взаимодействия на конкретном примере, работающем у нас на бою уже более двух лет.
Читать дальше →

Необычные системные вызовы на Linux

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

ls /usr/share/man/man2/


Что видит программист, начиная работать с языком C? Он видит fopen, printf, scanf и ещё много других функций. Видит он и всякие open и mmap — казалось бы, зачем их выделять? Но, в отличие от первой группы, эти две функции при выполнении на ядре Linux являются системными вызовами (на самом деле нет, почти никогда системный вызов нельзя просто вызвать как функцию, и поэтому libc содержит обёртки, перепаковывающие аргументы и иногда, как в случае с тем же open, заменяющие старые системные вызовы более общими новыми). Вообще, в отличие от тысяч библиотечных функций, доступных на типичной GNU/Linux системе, интерфейс ядра имеет довольно ограниченное количество точек входа — порядка нескольких сотен, зато то, что для user space — crash (например, обращение к отсутствующей странице), для ядра — default mode of operation.


В этой статье я расскажу некоторые интересные на мой взгляд факты. В ней не будет futex-ов и прочих скучных (наверное) деталей реализации. Будет преимущественно то, что вызывало у меня реакцию «А что, так можно было?!?».

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

Обработка системных вызовов посредством LD_PRELOAD с единой точкой входа

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

Делая пере-реализацию QInst на LLVM, я столкнулся с такой проблемой: QEMU в режиме эмуляции одного процесса естественным образом перехватывает все «гостевые» системные вызовы. В итоге плагин инструментации имеет единую точку входа для их предобработки, где можно по номерам SYS_* и значениям аргументов принимать решения. Это довольно удобно. Проблема в том, что все системные вызовы делает, в основном, libc и, переписывая код статически, мы просто до этой части в большинстве случаев не доберёмся. Конечно, можно было бы использовать ptrace, который как раз предназначен и для этого в том числе. Но тогда не уверен, что получилось бы обойтись без отдельного процесса, а семантика QInst предполагала тривиальный «синхронный» перехват — пришлось бы как-то инжектить вызов обработчика, а это сильно сложнее привычного LD_PRELOAD. Можно оборачивать каждый системный вызов — но это, как минимум, неудобно (к тому же, можем что-нибудь пропустить, ведь в этом случае мы перехватываем на самом не системные вызовы, а их конкретные обёртки).


Под катом — решение, не привязанное к LLVM, но заточенное под Linux на x86_64 (но адаптируемое для Linux на других архитектурах).


Примечание: в этой статье не представлено универсального готового решения — оно лишь подходит для достаточно широкого списка случаев. Зато эту статью можно считать обзорно-пятничной: интересная (надеюсь) новая (для большинства?) информация, щепотка брутфорс-программирования и рабочие примеры. И пусть нашу пятницу не омрачает даже тот факт, что сегодня четверг!

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

Что нужно знать о Red Hat OpenShift Service Mesh

Время на прочтение5 мин
Количество просмотров7.8K
Переход на Kubernetes и Linux-инфраструктуры при цифровой трансформации организаций приводит к тому, что приложения все чаще начинают строиться на основе микросервисной архитектуры и, как следствие, очень часто обрастают сложными схемами маршрутизации запросов между сервисами.



В Red Hat OpenShift Service Mesh мы выходим за рамки традиционной маршрутизации и предлагаем компоненты для трассировки и визуализации таких запросов, чтобы сделать взаимодействие сервисов более простым и надежным. Введение специального логического уровня управления, так называемой сервисной сетки service mesh, помогает упростить подключение, контроль и оперативное управление на уровне каждого отдельного приложения, развернутого на Red Hat OpenShift, ведущей Kubernetes-платформе корпоративного класса.
Читать дальше: Red Hat OpenShift Service Mesh

Разработка с Docker на Windows Subsystem for Linux (WSL)

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



Для полноценной работы с проектом на docker'е в WSL необходима установка WSL 2. На момент написания заметки ее использование возможно только в рамках участия в программе предварительной оценки Windows (WSL 2 доступна в сборках 18932 и выше). Так же отдельно стоит упомянуть, что необходима версия Windows 10 Pro для установки и настройки Docker Desktop.


Важно! В WSL 2 пропала острая необходимость в Docker Desktop для Windows 10. Как обходиться без него описано в пункте Про Docker в Ubuntu.


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

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