Иногда самые полезные вещи - это вовсе не большие системы и не новые фреймворки, а маленькие утилиты, которые внезапно делают жизнь проще. На днях вспомнил про одну такую находку и решил поделиться.
Наверняка знакомо ощущение: смотришь логи через tail -f, делаешь какое-то действие - рестарт сервиса, деплой, правку конфига - и потом пытаешься глазами понять, где закончился старый вывод и началось новое. Спойлер: это не всегда просто.
Она вставляет визуальные разделители прямо в поток вывода и отлично работает в реальном времени. Без магии, без лишних настроек - просто аккуратно отделяет "было" от "стало".
В итоге это неожиданно удобно:
при отладке,
при сопровождении сервисов,
при поиске изменений в логах после конкретных действий.
Отдельный плюс - минимализм. Никаких зависимостей, ничего лишнего: скачал, поставил, используешь. Именно тот случай, когда инструмент делает ровно одну вещь - и делает её хорошо.
_________________
Хватит читать DevOps-статьи от людей без продакшена. Я рассказываю про свой реальный опыт в своем Telegram-канале DevOps Brain 🧠 ↩
Пост о наболевшем. Clawd и как же им пользоваться.
В общем два дня уже потратил на то чтобы развернуть Clawd bot, естественно в бесплатном формате, по началу шло все хорошо, развернул бота на локальном компе Linux Mint 22.2, создал бота в Телеграмме, привязал к нему Clawdbot.
Так как у clawd нет своей нейронки, ему нужно прикрутить свои мозги. Сначала запросил API ключ в Gemini. Обычная модель, даже самая простая не запускалась. Затем тыкнул в Google Antigravity, который как оказалось имитирует думающую модель Claude 4.5 пуская один и тот же запрос в себя по кругу. Эта штука быстро отвалилось, но успел немного поразвлекаться с ней.
Перебрал половину представленных в списке Clawd моделей, например тот же Deepseek дает API только разработчикам, но в него можно получить доступ через такие сервисы (из списка Clawd), как Openrouter. Openrouter в свою очередь выдал ключ, но выбирая из списка модели, даже с пометкой free ничего не взлетало. На этом я уже устал если честно, поэтому обращаюсь к хабру, дабы развернуть актуальную дискусиию, может накидаете вариантов решения или альтернатив Clawd, а то уж очень захотелось поиграть в агента.
Успел спросить у него, с мозгом Google Antigravity, что он может:
🔧 Код и файлы — Читать, писать, редактировать код и документы — Запускать команды в терминале, работать с git
🌐 Интернет — Искать в вебе, парсить страницы — Управлять браузером (автоматизация, скрейпинг)
📅 Организация — Напоминания и cron-задачи — Вести заметки, память между сессиями
💬 Коммуникация — Telegram (вот тут и сидим), можно подключить другие каналы — Могу отправлять сообщения, реагировать
🏠 Умный дом / устройства — Если подключишь ноды — камеры, уведомления на телефон
🤖 Сложные задачи — Могу запускать саб-агентов на длинные задачи в фоне
По сути — твой персональный ассистент-разработчик, который живёт в терминале и мессенджерах.
И соответсвенно мой список вопросов: Стоит ли брать платную модель? И какую брать если, уж брать? Насколько я понимаю штука супер небезопасная, а если запускать из песочницы, то все равно прийдется давать какие-то доступы? Какие есть альтернативы? Уж очень понравился способ взаимодействия через ТГ
“Наши руки не для скуки” (с). Я давно хотел накидать скрипт для супер быстрой диагностики Linux. Конечно, это не замена полноценному мониторингу. Это дополнительный инструмент, который вы можете использовать в своем арсенале чтобы упростить себе жизнь. Самое главное что он сэкономит кучу времени.
В отчете вы получите:
Системную информацию - версия ОС, ядро, архитектура, uptime, внешний IP
Аппаратные ресурсы - CPU, RAM, Swap, температура процессоров
Дисковое пространство - занятое место, inodes, SMART статус
Тест скорости дисков - скорость записи/чтения (100MB тест)
Сетевые интерфейсы - статус, ошибки, активные соединения
Тест сети - ping до шлюза, ya.ru и 8.8.8.8 (по 10 пакетов каждый), скорость интернета
Пример запуска (можно без sudo - но там не будет всех показателей):
curl -o ~/linux-diag-script.sh https://gist.githubusercontent.com/itcaat/45edeaf15f2d508bee766daa9a97400c/raw/linux-diag-script.sh
chmod +x ./linux-diag-script.sh
sudo ./linux-diag-script.sh
# Одной командой
curl https://gist.githubusercontent.com/itcaat/45edeaf15f2d508bee766daa9a97400c/raw/linux-diag-script.sh | sudo bash
Бонусом в скрипте встроена возможность получать Telegram уведомления и сам отчет при обнаружении проблем. Для этого надо создать бота и добавить в выполнение скрипта в cron.
Теперь можешь добавить в cron (подставь свой botToken и chatId) и будешь получать уведомление в telegram если будет обнаружена какая то проблема.
# Проверка каждые 6 часов
0 */6 * * * root TELEGRAM_BOT_TOKEN="your_token" TELEGRAM_CHAT_ID="your_chat_id" /usr/local/bin/linux-diag-script.sh >/dev/null 2>&1
Актуальная версия скрипты доступна на GitHub Gist. Вы можете модифицировать его под свои нужды, добавлять новые проверки или как то интегрировать в runbook-и.
Пишите что еще можно добавить - я добавлю.
---
Хватит читать DevOps-статьи от людей без продакшена. Я рассказываю про свой реальный опыт в своем Telegram-канале DevOps Brain 🧠 ↩
Если тебе надо быстро потыкать что-то из Linux / контейнеров / сетей / namespaces / cgroups, но при этом не хочется поднимать VM, ставить Docker, ковырять окружение, то iximiuz labs playgrounds - это прям топ штука.
Это набор готовых интерактивных лаб, где ты заходишь в браузере и просто:
запускаешь контейнеры
смотришь namespace’ы
играешься с сетью
Причём самое классное, что там не “прочитай статью”, а прям сценарий + терминал + что делать. То есть зашёл → запустил → увидел результат → понял, как оно работает.
---
Хватит читать DevOps-статьи от людей без продакшена. Я рассказываю про свой реальный опыт в своем Telegram-канале DevOps Brain 🧠 ↩
Устранена проблему, из-за которой установщики Adobe Creative Cloud для Windows не могли работать в Linux через Wine из-за некоторых несовместимостей Wine с MSXML3 и MSHTML. После этого открытого фикса Adobe Photoshop 2021 и Photoshop 2025 могут быть установлены и запущены в Linux через Wine.
Скрипт устанавливает и настраивает dumbproxy c TLS-сертификатами от LetsEncrypt, выпущенными прямо на IP-адрес сервера, без домена.
Настройка браузеров и прочих клиентов уже обсуждалась в одной из предыдущих статей. Добавлю только, что на сегодняшний день в качестве клиента для Android я бы выбрал NekoBox.
Геймер спрятал ПК в конструктиве 50-килограммовой викторианской батареи отопления. Это сделано для экстремального охлаждения компьютера. Никакого корпуса не нужно - чугунный радиатор XIX века работает как гигантский пассивный теплоотвод. Снизу батареи поместилась материнская плата, видеокарта и блок питания. Энтузиаст даже аккуратно спрятал проводку и сохранил «антикварный» внешний вид.
Еще один вариант маршрутизации трафика через два сетевых интерфейса на основе списка доменных имен.
Сразу оговорюсь: все лучшие и хорошие варианты решения этой проблемы уже были рассмотрены на Хабре. Но для тех, кто использует linux и кого существующие варианты почему-либо не устраивают, предлагаю рассмотреть еще один.
Краткое содержание: ставим локальный dns resolver с плагином на python, который, при разрешении имени в адрес, устанавливает маршрут через альтернативный интерфейс, если адрес соответствует регулярному выражению. Для использования решения требуется умение сконфигурировать и запустить сервис в вашем любимом дистрибутиве/сервис-менеджере, готового пакета для установки нет.
Для реализации идеи нужен ДНС сервер, который позволяет достаточно просто писать плагины/хуки. Первым попавшимся на глаза был PowerDNS Recursor, который позволяет писать плагины на lua. И первая реализация была для него. Но lua это больше про компактность, чем про удобство, например, поддержку регулярных выражений можно так назвать только из вежливости. Тем не менее, всё работало как предполагалось, и достаточно надежно, пока не был найден Unbound DNS который позволяет писать плагины на python, и, в итоге, был написан аналог на питоне, который и предлагаю вашему вниманию.
Файл reroute.conf: пример файла конфигурации ДНС сервера. 192.168.0.1 и 172.16.17.1 — это адреса маршрутизаторов для первого и второго интерфейсов, соответственно. /etc/unbound/reroute.py — собственно плагин выполняющий основную работу. Из существенных моментов: chroot необходимо отключить, чтобы могли нормально работать скрипты на python и сервис должен работать от root чтобы добавлять маршруты.
Файл reroute.py — плагин, который выполняет необходимые дествия, reroute_conf.py — файл конфигурации для плагина, можно записать оба параметра прямо в плагин и обойтись без него. Вся работа выполняется в функции do_reroute, весь остальной код взят, практически без изменений, из документации unbound dns.
Файл rrdomains.txt — список регулярных выражений в формате python regex, при совпадении с которыми для всех ip-адресов разрешаемого доменного имени выполняется установка альтернативного маршрута.
Файл bashrc содержит определение функции reroute. Если во время работы наткнулись на сайт, для которого необходима маршрутизация через второй интерфейс, можно воспользоваться быстрым перенаправлением с помощью команды reroute в терминале. Или добавить доменное имя или регулярное выражение для него в rrdomains.txt и перезапустить dns сервер.
Свалился на меня «последний из 32-битных могикан», но машинка прямо финал возможностей архитектуры — насколько я понял, видит спокойно 8 гигов рамы (PAE во все поля?), слотов не пожалели, в общем, в такое чудо бы камень хотя бы на 2 ядра, но, увы…
Я его практически не смотрел ещё и ХЗ когда посмотрю (вроде не совсем мёртвая), но превентивно задам вопрос. Допустим, поставил я туда 32-битный BunsenLabs. Допустим, я хочу запустить какое-нибудь 64-битное приложение, которое в 32 битах давно уже не обновляется. Допустим, мне пофиг, что там в плане скорости (очень важное допущение, потому что оно как бы понятно, что там будет).
Насколько это реально — настроить для него резервативию… презервацию… короче, специально обученный загон с софтовой эмуляцией 64 бит? Существуют ли решения? Чтобы их установить и отконфигурировать, обязательно пройти все круги ада, как в той статье?
Практического смысла это по понятной причине не несёт — просто пятничное.
Привет, Хабр! Наступила очередная пятница, поэтому я несу полезные материалы на выходные для тех, кто хочет получше освоить Ubuntu. Информация по ссылкам довольно базовая, для начинающих. Все бесплатно, без регистрации и смс. Поехали!
Установка и настройка FTP-сервера на Ubuntu — разбираемся с установкой, настройкой, созданием пользователей, настройкой SSL/TLS и проверками подключений. Все разбираем на примере VSFTPD (Very Secure FTP Daemon).
Установка и настройка Jitsi Meet на Ubuntu 22.04 — рассмотрим настройку публичного сервера видеоконференций Jitsi Meet, доступного из интернета, с выпуском TLS-сертификата и обязательной авторизацией.
Я постепенно перевожу свою домашнюю лабораторию с x86 на ARM последние несколько месяцев. Причины простые: на ежедневной машине у меня Mac на Apple Silicon, так что разработка под ARM64 воспринимается естественно; инстансы на Graviton обычно дешевле; и ARM64 машины намного экономичнее по энергопотреблению, что делает круглосуточную домашнюю лабораторию дешевле по электричеству и выделяет значительно меньше тепла. После нескольких лет работы с мини‑ПК Shuttle на Intel я решил перейти всерьёз и сразу после релиза заказал два Minisforum MS‑R1 - в каждом 12‑ядерный ARM64 SoC и 64 ГБ ОЗУ.
Машины приехали 29 ноября. В тот же день вышел Incus 6.19. Я хотел как можно быстрее поднять хотя бы одну коробку, поэтому установил Ubuntu 24.04.3 (arm64), поставил Incus 6.19 и потратил пару часов, чтобы контейнеры запускались и вели себя как надо. Для повседневной работы с контейнерами переход оказался удивительно плавным.
Но железо редко ведёт себя с первого раза так, как ожидаешь. MS‑R1 идет с двумя RTL8127 10‑Gbit сетевыми картами, и из коробки стандартное ядро Ubuntu их не увидело. Первой мыслью было поставить mainline ядро - я установил 6.16, драйверы RTL появились, начали мигать сетевые индикаторы, и я с облегчением выдохнул.
Это облегчение оказалось недолгим. Используемое мной mainline ядро устроено так, что опция MODULES в kernel не включена, чтобы DKMS смог собрать модуль ZFS, который мне нужен для Incus. Пересобирать всё ядро показалось чрезмерным, пока я не обнаружил, что у Zabbly (разработчик Incus) есть собственный репозиторий кастомных ядер для Ubuntu и соответствующие пакеты ZFS. Переход на ядро от Zabbly решил 2 проблемы: драйвер RTL8127 и пакеты ZFS, которые устанавливаются через DKMS. В этот момент Incus, сеть и ZFS pool заработали нормально.
Остались две проблемы - обе странные, обе упрямые и обе порождают больше вопросов, чем ответов.
Первая касается локального дисплея. После загрузки с ядром Zabbly система жива и доступна по SSH, но подключённый HDMI‑монитор не обновляется дальше стартового изображения BIOS. Экран зависает на заставке BIOS, в то время как ядро и userspace тихо продолжают загрузку в фоне. Пока не нашёл явных сообщений об ошибках в привычных логах, которые указывали бы на конкретный драйвер.
Вторая проблема - с виртуальной машиной Windows 11. Я попытался поставить Windows 11 ARM64 под Incus по тем же шагам, что и на x86‑64 хостах. Процесс VM стартует, но зависает на экране BIOS/UEFI и не доходит до инсталлятора. Моя первая гипотеза - отсутствует или неправильно сконфигурирована aarch64 UEFI прошивка, либо нужна какая‑то конкретная опция machine/cpu для Windows on ARM. Но ещё не пришёл к выводу, падает ли прошивка молча или она просто ждёт чего‑то, чего я не передал.
Что пробовал уже - практично, но пока не окончательно. Установка mainline ядра решила проблему с NIC; переход на ядро Zabbly решил и NIC, и ZFS. Могу подключиться по SSH к хосту при зависшем дисплее, значит это не полная паника ядра. Для ВМ вижу процесс qemu, но экран не двигается дальше BIOS.
Если кто‑то сталкивался с подобным, буду признателен за опыт и решения. Несколько конкретных вопросов, по которым надеюсь на помощь сообщества:
Кто‑нибудь видел ситуацию, когда HDMI‑дисплей после переключения на кастомное ядро arm64 "замораживается" на заставке BIOS и не обновляется дальше, хотя ОС при этом загружается?
Что я упустил для запуска Windows 11 (aarch64) под Incus/QEMU на Ubuntu?
Привет, Хабр! Новая пятница — новые знания для начинающий специалистов! Сегодня у нас небольшая подборка инструкций по работе с командами в Linux. Пригодится будущим и начинающим системным администраторам. Как всегда, все материалы доступны бесплатно и без регистрации. Поехали!
Команда grep в Linux — снова изучаем синтаксис, знакомимся с регулярными выражениями, смотрим на примеры использования команды.
Команды kill и killall в Linux — подробная инструкция по принудительному завершению и настройке процессов, а также управлению их приоритетами.
И просто напоминание, что в Академии Selectel есть курс по системному администрированию с нуля. Он тоже бесплатный, но там все же придется зарегистрироваться, так что на ваше усмотрение.
Самый простой способ сообщить об успешном подключении по SSH
Всем привет! Вообще-то, обычно решают обратную задачу - сообщить о неудачных попытках подключения по SSH, а еще лучше - сразу заблокировать. С этим прекрасно справляет, например, Fail2ban, но, рассказ не о нем. Может оказаться полезно получать уведомления именно об успешных подключениях, особенно, в тот момент, когда сам НЕ подключаешься. Так же, хочется сделать это с наименьшими усилиями, без написания скриптов, без установки специфического ПО, что бы было легко "скопипастить" решение на множество систем. Так же, хочется знать не тoлько о подключениях, получивших shell, но и о удаленном выполнении команд, или копировании файлов по протоколу SSH.
Все есть в этом решении:
$ sudo apt install curl
$ sudo nano /etc/pam.d/sshd
оставьте, все, что было в этом файле и добавьте в конец:
Как оказалось, curl умеет отправлять почту, в сообщении будут присутствовать все подробности, кто, когда, откуда подключился, и, даже, когда отключился. Правда, в этом решении требуется корпоративный почтовый сервер (mailhub.yourcorp.ru в нашем "однострочнике"), готовый принять письмо без аутентификации. Это допустимо, если он же является конечным сервером с ящиком пользователя, или, есть разрешение пересылки писем из корпоративной сети (в этом случае можно использовать любой другой почтовый адрес, вместо yourlogin@yourcorp.ru). Однако, такой сервер не всегда имеется, и решение не годится для персонального использования.
В этом случае, предлагаю Вам вебинар , демонстрирующий решение той же задачи, с отправкой сообщений в Telegram
На этом все, спасибо, буду рад ответить на вопросы!
Linux Mint 22 - KiCad-5 с GUI и графическим ускорением на карте AMD в Docker-контейтере.
При перезде с Минт-20 на Минт-22 мне захотелось сохранить возможность полноценной работы с проектами выполнеными в KiCad-5, без конвертации их в формат KiCad-9 на который я плавно мигрирую при перезде на Минт-22. Специфика в том, что KiCad-5, в том числе в виде AppImage на Минт-22 запускаться категорически не хочет.
Из возможных вариантов выбрал для себя запуск KiCad-5 в Docker-контейтере, с пробросом графики через X11. За основу взял эту реализацию. Добавил к ней проброс графического ускорения(без него GUI будет подтормаживать) своей карты AMD, русификацию, и Firefox, для плагина InteractiveHtmlBom. В итоге получился вот такой dockerfile:
FROM linuxmintd/mint20-amd64
ENV LANG=ru_RU.UTF-8
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y nano sudo keyboard-configuration software-properties-common x11-apps xdg-utils \
locales language-pack-ru-base language-pack-ru xed xed-dbg firefox firefox-locale-ru && \
update-locale LANG=ru_RU.UTF-8
RUN add-apt-repository --yes ppa:kicad/kicad-5.1-releases && \
apt-get update && \
apt-get install --no-install-recommends -y kicad kicad-locale-ru kicad-doc-ru
# Укажите здесь используемые на вашем хост-компьютере
# имя пользователя, идентификатор пользователя и идентификатор группы.
ENV USER_NAME=vasily
ENV UID=1000
ENV GID=1000
ENV HOME=/home/${USER_NAME}
ENV XDG_RUNTIME_DIR=/tmp/runtime-${UID}
RUN mkdir -p ${HOME} && \
echo "${USER_NAME}:x:${UID}:${GID}:USER_NAME,,,:${HOME}:/bin/bash" >> /etc/passwd && \
echo "${USER_NAME}:x:${UID}:" >> /etc/group && \
echo "${USER_NAME} ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/${USER_NAME} && \
chmod 0440 /etc/sudoers.d/${USER_NAME} && \
chown ${UID}:${GID} -R ${HOME}
USER ${USER_NAME}
# Раскомментируйте программу, которую вы хотите запустить в контейнере.
#ENTRYPOINT ["eeschema"]
ENTRYPOINT ["kicad"]
Обратите внимание, что значения USER_NAME, UID, GID, в строках 17, 18, 19 в dockerfile берутся из вашего аккаунта на хост-машине.
Образ создается как обычно выполненой в открытом в одной директории с dockerfile терминале командой(не забываем пробел и точку в конце команды):
docker build -t kicad5 .
Размер образа получаеться около 800 Мбайт.
Скрипт для старта контейнера на машине с графической картой AMD:
1). Создаете в Минт-22 директорию /usr/share/kicad5 и копируете туда содержимое /usr/share/kicad из Минт-20 с установленным kicad5
2). Копируете содержимое $HOME/.kicad_plugins из Минт-20 с установленным kicad5 в $HOME/.kicad_plugins в Минт-22
3). Копируете содержимое $HOME/.config/kicad/ из Минт-20 с установленным kicad5 в $HOME/.config/kicad в Минт-22
Теперь можете запускать KiCad-5 с GUI и графическим ускорением на карте AMD в Минт-22 и паралельно установить в Минт-22 KiCad-9.
Чтобы заархивировать созданный образ выполняем в терминале:
docker save -o ./my_bac_kicad5_image.tar kicad5
Чтобы развернуть заархивированый образ на другом машине выполняем в терминале, открытом в одной директории с файлом my_bac_kicad5_image.tar, на нее скопированном:
Selectel выпустил заключительную часть курса «Системный администратор Linux»
Модули курса выходили постепенно, и недавно вышел последний — теперь обучение доступно целиком. Финальная часть посвящена настройке сетей, управлению пакетами и логами, а также работе с контейнерами.
Курс полностью бесплатный и не привязан к датам — можно изучать материалы в комфортном темпе.
После завершения вы получите сертификат. Как его оформить — рассказываем в последнем уроке.
С точки зрения пользователя (в данном случае человека, отвечающего за обновления данной Linux-системы) лайвпатч — это просто модуль ядра Linux, в котором содержится как минимум следующее:
исправленный код одной или более функций из vmlinux и/или из модулей ядра,
метаданные, указывающие, как применить эти исправления к соответствующим компонентам ядра Linux.
Чтобы применить лайвпатч-обновление, нужно загрузить этот модуль ядра, например, с помощью insmod или modprobe, а затем активировать его, как правило, через sysfs.
При этом старый код ядра Linux (тот, который хотим обновить) и новый (тот, что в лайвпатч-модуле) сосуществуют в памяти системы. Это дает возможность при необходимости отменить лайвпатч-обновление в runtime: деактивировать его через sysfs, а затем выгрузить лайвпатч-модуль.
Важный момент: если используются средства для работы с лайвпатчами из mainline-ядра, то при активации и деактивации лайвпатч-обновлений работающие процессы не нужно завершать или даже останавливать на сколько-нибудь существенное время.
Примечания:
У TuxCare / KernelCare лайвпатчи поставляются в другом, проприетарном, формате, но мы его рассматривать не будем.
Для некоторых архитектур, например RISC-V, при активации и деактивации патча вызывается stop_machine(), то есть работающие процессы при этом все-таки останавливаются на некоторое время. Начиная с версии 6.16 ядра Linux, для RISC-V stop_machine() уже, вероятно, не будет использоваться в таких ситуациях.
Все, что нужно знать о лайвпатингче для ядра Linux, вы найдете в цикле статей: от подготовки лайвпатча до работы на x86, ARM и RISC-V.
Настройка КриптоПро HSM Client на Suse/RedHat/ROSA Linux
Подготовили пошаговую подробнейшую инструкцию со скриншотами для разработчиков информационных систем со встроенными СКЗИ по настройке КриптоПро HSM Client на Suse, RedHat и ROSA Linux (включая ошибки, которые позволяет обойти данное руководство) для того, чтобы использовать HSM как самостоятельный криптографический провайдер с выполнением всей математики на борту или в качестве надежного хранилища ключевого материала.
Хэндлим обработку некорректного ввода в ZSH для поднятия настроения
Сегодня хочу рассказать о том, как немного разнообразить времяпрепровождение в консоли, добавив немного юмора, если ваша командная оболочка zsh.
Все, кто работает в терминале (эмуляторе терминала, чтобы меня тут не покусали в комментариях :)), думаю, периодически сталкиваются с тем, что вводят команду неправильно. Например, есть шуточная команда sl, которая рисует движущийся поезд, если вы случайно опечатались, когда хотели набрать команду ls. Это служит некой разрядкой и поводом лишний раз улыбнуться. Вот репозиторий этой утилитки на GitHub для любознательных.
А что, если мы хотим, чтобы на ввод любой несуществующей команды, мы получали что-то аналогичное выводу команды sl? По умолчанию в ZSH в этом случае выводится сообщение “command not found”. Давайте это исправим.
Для этого нам понадобится:
непосредственно zsh в качестве командной оболочки;
cowsay - утилита командной строки, которая рисует разные фигурки, которые как бы говорят, наподобие героям комиксов.
lolcat - утилита для разукрашивания текста градиентом, добавления анимации и т.д.
В ZSH предусмотрена возможность переопределять поведение при возникновении каких-то ситуаций, в том числе, переопределение поведения при возникновении ошибок. В нашем случае нам нужно переопределить вывод, когда команда, вводимая пользователем не найдена. Для этого будем использовать метод command_not_found_handler. Добавим в .zshrc файл следующий код:
command_not_found_handler() {
cowsay -f tux "LOL! Command not found: $1" | lolcat -a -s 150
return 127
}
Немного пояснений: первая строка будет рисовать там пингвина, говорящего, что введенная нами команда не найдена, пингвин будет появляться построчно (150 - скорость появления). Более подробно с доступными параметрами lolcat можно ознакомиться, набрав man lolcat. 127 - это код, который zsh отправляет по умолчанию, сохраним это поведение.
Вот так примерно это выглядит:
Ну вот, собственно говоря, и все. Мелкие моменты, которые нас окружают в повседневности, делают нас (по крайней мере меня) чуточку счастливее :)
Isar и еще 8 систем сборки для создания дистрибутива на Linux
Isar — система сборки, представляющая собой набор скриптов для создания пакетов и дистрибутивов на базе Debian с возможностью настройки. Организация проекта Isar похожа на Yocto Project, для сборки используется Bitbake.
Перед сборкой можно настроить параметры файловой системы, ядра, модификации списка пакетов (добавление и удаление пакетов, в том числе и собственных, изменение существующих пакетов). Систему сборки разрабатывает компания ilbers GmbH.
Архитектура системы
Так как Isar основан на Bitbake, архитектура решения состоит лишь в нескольких слоях для Bitbake, реализующих сборку и установку пакетов в соответствии с конфигурацией сборки. В основе всех этих слоев и рецептов лежат утилиты Debian Build Toolchain, которые ответственны за непосредственную сборку пакетов, разрешение зависимостей и т.д.
Как проходит процесс сборки дистрибутива в Isar
Особенности решения
Аналогично Yocto требует усилий на начальных этапах для освоения инструмента.
Поддерживает загрузку готовых пакетов из репозиториев Debian.
Подходит для embedded-дистрибутивов, где необходимо сочетание Debian-экосистемы и глубокой конфигурации.
О других embedded- и desktop-решениях решениях рассказали студенты и преподаватели СПБГЭТУ «ЛЭТИ» в обзоре систем для создания Linux-дистрибутивов.