Как стать автором
Обновить
74.33

*nix *

Хаб про UNIX-подобные операционные системы

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

Как потерять управление оболочкой… Расследование

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

image


Несколько недель назад я занимался хаком языковых серверов в Zed, пытаясь заставить Zed определять, когда заданный бинарник языкового сервера, например gopls, уже присутствует в $PATH. Если так, вместо загрузки нового бинарника Zed должен использовать его.


Трудность: часто $PATH динамически изменяется такими инструментами, как direnv, asdf, mise и другими, которые позволяют в данной папке установить определённый $PATH. Почему эти инструменты так делают? Потому что это даёт возможность, скажем, в начале $PATH добавить ./my_custom_binaries, пока вы находитесь в my-cool-project. Поэтому нельзя просто использовать $PATH, связанный с процессом Zed, нужен $PATH, как он есть, когда выполняется cd в каталог проекта.


Легко, подумал я. Просто запусти $SHELL, выполни cd в проект, чтобы запустить direnv и всё такое, запусти env, сохрани окружение, выбери $PATH, найди в нём бинарники. И это было легко. Вот часть кода, та часть, которая запускает $SHELL, cd и получает env:


fn load_shell_environment(dir: &Path) -> Result<HashMap<String, String>> {
    // Получает $SHELL
    let shell = std::env::var("SHELL")?;

    // Конструирует команду, которую хочется выполнить в $SHELL
    let command = format!("cd {:?}; /usr/bin/env -0;", dir);

    // Запускает $SHELL как интерактивную оболочку (чтобы использовались файлы пользователя rc).
    // и выполняет `command`:
    let output = std::process::Command::new(&shell)
        .args(["-i", "-c", &command])
        .output()?;

    // [... проверка кода выхода, получение stdout, превращение stdout в HashMap и т. д. ...]
}

За исключением одного: после запуска экземпляра Zed в терминале, который выполнял эту функцию, я больше не мог убить Zed, нажав Ctrl-C.

Что?
Всего голосов 15: ↑13 и ↓2 +11
Комментарии 8

Новости

Интернет-связь для российских эмигрантов в Китае: Как мы это сделали 10Gb\s

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

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

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

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

Читать далее
Всего голосов 12: ↑6 и ↓6 0
Комментарии 10

Hello-Packet. Быстрая идентификация mikrotik

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

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

Часто бывает так, что администратор, ответственный за управление сетью в каком-либо филиале, звонит с просьбой о срочной помощи по настройке Ethernet портов, VLAN или Wi-Fi. Он может быть не знаком с моделью роутера, ничего не подписано, и обстановка выглядит довольно запутанно. В таких ситуациях возникают вопросы, особенно если у вас много дел и задача требует немедленного решения.

Процедура идентификации осуществляется путем отправки письма на электронную почту, содержащего следующую информацию: имя устройства, IP-адреса интерфейсов, DynDNS, и время срабатывания. Пользователь нажимает кнопку "MODE", после чего роутер издает одиночный звуковой сигнал, затем собирает данные и отправляет их по протоколу SMTP на указанный адрес. Таким образом, нужный роутер определен, и в общем уравнении остается меньше неизвестных, что позволяет продолжить работу без лишних препятствий.

Читать далее
Всего голосов 2: ↑2 и ↓0 +2
Комментарии 2

Туда<->Сюда, почтовый сервер на Ubuntе (Exim4+Dovecot+Postfixadmin)

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

Приветствую всех читателей. В данной публикации или инструкции хочу максимально подробно разложить "со своей колокольни разумеется" вопрос установки (MTA MDA) сервера.

Наши ресурсы:

Платформу для выполнения задачи взял из маленького одноплатного компьютера Odroid C1+ на базе Ubuntu 20 версии, купленный домен на хостинге в нашем случае medianet.pp.ua, статический ip адрес от интернет провайдера.

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

Установка операционной системы Linux Ubuntu не ниже 18.04 LTS или что‑то Debian подобное.

Читать далее
Всего голосов 9: ↑6 и ↓3 +3
Комментарии 4

Истории

DIY: Ваше собственное облако на базе Kubernetes (часть 3)

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

Вот мы и подобрались к самому интересному: запуску Kubernetes в Kubernetes. В этой статье мы поговорим о таких технологиях, как Kamaji и Cluster API, а также о том, как интегрировать их с KubeVirt.

В прошлых статьях мы уже рассказывали, как мы готовим Kubernetes на bare metal, и о том, как превратить Kubernetes в средство запуска виртуальных машин. Эта статья завершает серию, объясняя, как, используя всё вышеперечисленное, можно построить полноценный managed Kubernetes service и запускать виртуальные Kubernetes-кластеры по клику.

И начнём мы, пожалуй с Cluster API.

Читать далее
Всего голосов 10: ↑10 и ↓0 +10
Комментарии 4

Фаззинг библиотек

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

Ещё недавно, как я начал изучать веб хакинг, я счёл интересным занятие исследовать Linux и Windows на предмет бинарных уязвимостей. Хотя легально заработать в одиночку хакером у нас в России я думаю можно только веб хакингом, я всё равно хочу изучать все интересующие аспекты атакующей и защищающей стороны. Кто знает, вдруг я когда-нибудь буду в red team. Ну а пока я просто грызу гранит науки.

Слегка поразмыслив над решением задачи, я определил что нужно для осуществления моей проблемы. Я не знаю как другие проводят фаззинг библиотек, у которых нет исходных текстов, но додумался до одного варианта. Далее будут два примера для Linux и Windows.

Читать далее
Всего голосов 6: ↑5 и ↓1 +4
Комментарии 31

OpenWrt отмечает 20 лет выпуском собственного маршрутизатора

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


В 2024 году опенсорсному проекту OpenWrt исполняется 20 лет. Разработчики решили отпраздновать этот юбилей дизайном нативного маршрутизатора OpenWrt One/AP-24.XY. Пока что это идея, предложенная на обсуждение сообществу.

В целом, преимущества свободной прошивки OpenWrt для маршрутизаторов хорошо известны. Это улучшенная безопасность и надёжность работы устройства, продвинутые функции блокировки рекламы, точечное перенаправление трафика по спискам доменов (например, для РФ внутри страны, для РФ снаружи и пр.), установка любых необходимых программ под Linux и др.

С выходом нативного маршрутизатора на рынке появится своего рода базовая референсная модель с идеальной программно-аппаратной совместимостью.
Читать дальше →
Всего голосов 41: ↑41 и ↓0 +41
Комментарии 45

Переезд на линукс .NET разработчика. Как изменился линукс за 15 лет

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

Привет, Хабр! После написания двух статей про недостатки Windows и непонимание развития системы, я решил устроить бунт на своем компьютере, пересев на Линукс. Не то, чтобы я прям планировал всерьёз менять операционную систему, но чётко осознавал, что мои «знания» о линуксе сильно устарели, так как помимо хостинга и деплоя, я им пользовался дома очень давно, практически 15 лет назад. Тогда было много проблем со стабильностью как различных приложений, так и графический окружений в частности. Ну и как-то не очень объективно сравнивать современные версии от майкрософт со своими старыми воспоминаниями о линуксе, ведь прогресс не стоит на месте, дистрибутивы развиваются, а интерфейс приложений становится все более дружелюбным и приятным для использования. Так ведь?

Читать далее
Всего голосов 28: ↑25 и ↓3 +22
Комментарии 115

Xv6: учебная Unix-подобная ОС. Глава 6. Блокировки

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

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

Потоки конкурируют за доступ к структуре данных. Ядро кишит структурами, которые потоки используют совместно. Блокировки защищают данные при конкурентном доступе.

Глава расскажет, зачем нужны блокировки, как xv6 реализует и использует блокировки.

Читать далее
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 3

REST API сервер на Bash с использованием сокетов и Apache

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

Всем привет! Ранее рассказывал о том, как создать REST API и Web-сервер на PowerShell для Windows, а также упоминал, что подобный сервер будет работать и в системе Linux, благодаря кроссплатформенной версии PowerShell Core. Безусловно, для подобных целей лучше используются специализированные серверные фреймворки или библиотеки, такие как Flask или Django в Python, но меня не покидала идея реализации похожего сервера, где описание логики будет производиться на языке одного только Bash. Приведу примеры, с помощью которых можно создать такой сервер используя сетевые сокеты netcat , socat и ncat, а также веб-сервера Apache с использованием встроенных модулей.

Читать далее
Всего голосов 19: ↑17 и ↓2 +15
Комментарии 3

Wubuntu: Linux с интерфейсом Windows 11 и возможностью запускать «виндовый» софт. А ещё и Windows 95

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

Дистрибутивов Linux достаточно много — на любой запрос, вероятно, можно найти подходящий вариант. Не так давно появился ещё один дистрибутив, который внешне является почти полной копией Windows 11. Также он способен запускать Windows-программы и работает на относительно старых компьютерах и ноутбуках. Называется он Wubuntu, и подробности о нём — под катом.

Читать далее
Всего голосов 62: ↑52 и ↓10 +42
Комментарии 86

Вперед в будущее: Wayland против X11

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

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


Еще в далеком 2016 году вышла Fedora 25 с окружением GNOME 3.22 на базе дисплейного сервера Wayland. А в RHEL 10 выкинут X11 на мороз. Релиз RHEL 10 намечен на 2025 год, CentOS Stream 10 — на 2024 год. Для обеспечения работы приложений, требующих X11, будет использоваться XWayland. Таким образом, в 2029 году (к моменту окончания первого этапа поддержки RHEL 9) стоит ожидать появление первого аппаратного обеспечения, не поддерживающего X11.


И как я думаю — будущее за Wayland. Но пока X11 является стандартом. Давайте разберем это!


Читать дальше →
Всего голосов 98: ↑91 и ↓7 +84
Комментарии 113

DIY: Ваше собственное облако на базе Kubernetes (часть 1)

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

Мы очень любим Kubernetes и мечтаем чтобы все современные технологии поскорее начали использовать его замечательные паттерны.

А вы когда-нибудь задумывались о том чтобы построить своё собственное облако? Могу поспорить что да. Но можно ли это сделать используя лишь современные технологии и подходы, не покидая уютной экосистемы Kubernetes? Нам по опыту разработки Cozystack пришлось с ним как следует разобраться.

Да, вы могли бы возразить что Kubernetes для этого не предназначен и почему бы не использовать OpenStack для Bare Metal-серверов а внутри него запускать Kubernetes как положено. Но поступив так, вы просто переложите ответственность с ваших рук на руки OpenStack администраторов. Что добавит как-минимум ещё одну сложную и неповоротливую систему в вашу экосистему.

Зачем так всё усложнять? - ведь на данный момент Kubernetes уже имеет всё необходимое для запуска Kubernetes кластеров.

Читать далее
Всего голосов 43: ↑41 и ↓2 +39
Комментарии 10

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

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн

Xv6: учебная Unix-подобная ОС. Глава 5. Прерывания и драйверы устройств

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

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

Устройство прерывает процессор, когда требует внимания. Обработчик прерывания опознает устройство и вызовет процедуру драйвера. В xv6 это делает процедура devintr.

Файл kernel/console.c содержит код драйвера терминала. Драйвер обрабатывает символы из последовательного порта UART на RISC-V, которые человек вводит на клавиатуре.

QEMU эмулирует микросхему 16550 UART и подключает клавиатуру и экран к UART. На реальном компьютере 16550 управляет портом RS232, который работает с терминалом или другим компьютером.

Драйвер накапливает символы в кольцевом буфере cons.buf. Индекс cons.r указывает на первый символ, который прочтет функция consoleread. Буфер хранит строки символов, а индекс cons.w указывает на начало последней строки, которую еще вводит человек. Индекс cons.e указывает позицию курсора в последней строке для ввода следующего символа.

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 0

Поломанные VPN, 2038 год и сертификаты с истёкшим сто лет назад сроком

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

В конце 2010 года Зимми (псевдоним) работал в ИТ-поддержке компании, разрабатывавшей VPN-устройства и операционную систему для них. В понедельник ему позвонил клиент (розничный продавец продукции из США), рассказавший, что в выходные его VPN-оборудование перестало работать.

После изучения отчёта Зимми решил, что проблема возникла в результате сбоя валидации сертификата, о чём он и написал в недавнем посте в Mastodon.

«VPN-устройства моего работодателя управлялись через центральный сервер. На этом сервере работал собственный центр сертификации (CA), который использовался для подписывания сертификатов всех устройств. Конечные точки VPN использовали их для аутентификации на сервере управления (например, при отправке логов) и друг между другом (в основном для VPN). CA — это фундаментальная часть ПО управления».

Зимми сообщил, что предпочёл бы оставить анонимным себя, компанию и клиента.

Валидация оказывалась ошибочной, потому что система не могла проверить certificate revocation list (CRL) — список цифровых сертификатов, отозванных выпустившим их центром.

«Эти устройства аутентифицировали друг друга при помощи сертификатов, похожих на те, которые применяются для HTTPS, но подписанные частным центром сертификации. У каждого клиента был для этого свой CA. В процессе валидации сертификатов CA проверял, не отозван ли сертификат. Валидацию не удавалось выполнить, потому что VPN-устройство не могло скачать certificate revocation list (CRL), чтобы убедиться, что сертификата другого устройства нет в списке. Почему оно не могло скачать CRL?»
Читать дальше →
Всего голосов 58: ↑57 и ↓1 +56
Комментарии 10

Xv6: учебная Unix-подобная ОС. Глава 4. Прерывания и системные вызовы

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

Глава расскажет, как xv6 обрабатывает прерывания на RISC-V и о хитростях виртуальной памяти: как использовать ошибки доступа к страницам, чтобы оптимизировать работу ОС.

Глава расскажет о копировании страниц при записи, ленивой выдаче страниц, выдаче страниц по необходимости и сбросе страниц на диск.

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 0

Запускаем Steam игры в Proton c поддержкой Native Wayland

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

Proton Wayland


Иллюстрации к статье подготовлены нейросетью freepik.com.


В первой части нашей статьи, мы научились собирать Wine с поддержкой Wayland и запустили игру Overwatch 2. Но для большинства геймеров конечно же больший интерес представляет запуск игр Steam, и этот вопрос мы не пройдем стороной. Преимущество нашей сборки Proton будет ещё и в том, что она будет работать напрямую с системными библиотеками и оборудованием, когда обычный Proton и GE Proton Custom загружаются в виртуальном контейнере, подгружают свои библиотеки и драйвера. Тем самым мы получим чуть лучшую производительность и избавимся от еще одного ненужного слоя.


Если вас заинтересовала статья, то добро пожаловать под cut.

Читать дальше →
Всего голосов 30: ↑30 и ↓0 +30
Комментарии 12

Работа с DEB-пакетами

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

Данные инструкции написаны для серии статей под названием «Проект юного DevOps»:

Сборка Deb-пакета

Пересборка Deb-пакета

Читать далее
Всего голосов 1: ↑1 и ↓0 +1
Комментарии 12

Управление памятью в Linux

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

Управление памятью (memory management) является важной подсистемой операционной системы Linux, которая обеспечивает эффективное использование ресурсов физической и виртуальной памяти. В Linux управление памятью в основном подразумевает обработку запросов к памяти от процессов, выделение и освобождение блоков памяти, а также обеспечение ее эффективного использования.

Читать далее
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 12

Запускаем игры под Wine c поддержкой Native Wayland

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

Wine Wayland


Иллюстрации к статье подготовлены нейросетью freepik.com.


Многие люди на планете играют в видеоигры. Игры помогают улучшить когнитивные способности, провести приятно свободное время. Данная статья посвящена тому, как запустить Windows-игры под Linux в Wayland.


Эта статья могла бы быть: ставим Wine(Proton) и XWayland, запускаем игры, успех, но нет. В данном материале мы будем сами собирать Wine, решать проблемы, а так же наш Wine будет работать напрямую с Wayland композитором без прослойки в виде XWayland. Плюсы такого метода — лучшая производительность и меньше инпут лаг. Благодаря Wine 9.0 это стало возможно, но не все так просто, как может показаться читателю с первого взгляда. Для примера мы запустим игры: Overwatch 2 через Battle.net клиент и Aimbeast, KovaaK's, Apex Legends через Steam.


Если вас заинтересовала статья, то добро пожаловать под cut.

Читать дальше →
Всего голосов 41: ↑41 и ↓0 +41
Комментарии 58

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