Как надо (и как не надо) сопровождать вашу систему, GIT и пакеты

10/Январь/2026 zero-trustsecurity

Хороший админ и его сервер
Хороший админ и его сервер 1000x1000
good_admin_and_his_server_exw.jpg

Стандартная ситуация, у вас есть основной рабочий компьютер, на котором у вас три разных проекта.
Один проект на nodejs, второй продакшн на python, а третий ваш личный “pet project”, тоже на python.
А ещё у вас в этой же системе личная+рабочая почта, ну и, скажем, браузер и клиент-банк.
И это всё под вашим пользователем.
Ну не под рутом же! ¯\_(ツ)_/¯
Всё вполне обычно. У многих вполне технически грамотных разработчиков таких проектов могут быть десятки и десятки ключей для ssh или git серверов.

Пример с популярным фреймворком PyTorch


Вполне обыденно Вы пишете свой код, время от времени коммитите, и тут в ваш уютный pet-project с AI прилетает обновление torchtriton.
А после этого из вашей системы улетают следующие наборы данных, в соответствии с основной функцией бинарника, которая делает следующее:

  • Сбор системной информации:
    • nameservers из /etc/resolv.conf
    • hostname из gethostname()
    • текущий логин из getlogin()
    • текущая рабочая директория из getcwd()
    • переменные окружения
  • Чтение следующих файлов:
    • /etc/hosts
    • /etc/passwd
    • Первые 1,000 файлов из $HOME/*
    • $HOME/.gitconfig
    • $HOME/.ssh/*

Обновление прилетело, конфедициальные данные - улетели.
Скомпрометировано не только всё под вашей учётной записью (и, возможно, системой), но и по цепочке всё, чем вы управляли, куда коммитили, куда подключались.

Как надо (и...

Ошибка подключения GitLab Agent: Unauthorized

25/Ноябрь/2025 kubernetesgitlabagentk

Ошибка подключения GitLab Agent 1400x350 kubernetes_gitlab_agent_error.png
Ошибка подключения GitLab Agent

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

1
Nginx stream ingress <> Main Nginx Frontend <> Nginx Backend inside GitLab instance.

Основной фронтенд управляет поддоменом gitlab, который закрыт для внешнего доступа посредством авторизации auth_basic.

Ошибка подключения GitLab...

Почему стандартные плагины jekyll далеки от идеала

11/Март/2025 jekyllstructured-datanginx

В этой заметке я не буду приводить полный код для всех компонентов, только дам сниппеты и подсказки, на что стоит обратить внимание при сборке сайта на jekyll.

Jekyll Structured Data and sitemap.xml 1535x697 jekyll-structured-data-sitemap-and-nginx.png
Jekyll Structured Data and sitemap.xml

Время модификации файла

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

  • ld+json "dateModified": "2025-03-07T15:43:42+00:00"
  • sitemap <lastmod>2025-03-07T15:43:42+00:00</lastmod>
  • headres last-modified: Fri, 07 Mar 2025 15:43:42 GMT
Почему стандартные плагины...

Когда читаешь некоторые pdf-datasheet

22/Декабрь/2020 mediateklow-powerpdfdatasheet

Ищешь “whatever” с низким энергопотреблением.
Находишь модули на mediatek, скачиваешь документацию на SoM (System on Module).
Листаешь в поисках сколько же потребляет чип.

MT7628 данные не введены
MT7628 данные не введены 826x1100
MT7628_no_power_data_exw.png
MT7688 данные не введены
MT7688 данные не введены 826x1169
MT7688_no_mAh_data_exw.png
Когда читаешь некоторые...

Выбор загружаемого ядра в консоли U-Boot через удалённое подключение

29/Август/2018 debianubootcubieboardkerneluart

Что завалилось?

Ручной выбор ядра в U-Boot
Ручной выбор ядра в U-Boot 595x715
u-boot-kernel-select.png


Есть один маленький CubieBoard2 рядом с маленьким роутером.
Физического доступа к ним нет.
В роутер, под управлением LEDE, подключен USB-UART, пины которого подключены к CubieBoard2.
И роутер, и CubieBoard2 доступны по ssh.

Именно наличие UART в сборке и позволило поднять завалившийся CubieBoard2 удалённо.

Как завалилось?

Однажды прилетает штатное обновление ядра дебиана
linux-image-4.9.0-8-armmp-lpae.
После обновления система перестаёт выходить на связь.

Как это делают обычно?

Тут всё просто, вытаскиваешь microsd карточку, ну а дальше можно не описывать.

Выбор загружаемого ядра...