Обновить
37.99

*nix *

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

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

Отправь мне в почту файл с сервера

Всем привет!

Есть множество способов скопировать файл или его фрагмент с linux сервера: "копипаста", scp/winscp, "комбайны" типа MobaXterm, php -S ..., python -m http.server ... . Для меня, неожиданно, оказался удобным вариант отправки такого файла, если он не слишком большой, себе на почту, в виде вложения, особенно для дальнейшей пересылки коллегам (архивы журналов, примеры конфигураций ...). Для технической реализации потребуется корпоративный почтовый сервер, упомянутый здесь и bash (даже, точнее, sh :) с утилитами, которые всегда есть "из коробки". Да, никакого специального ПО, предназначенного для работы с электронной почтой, ставить на каждый linux сервер не придется.

За основу были взяты примеры отсюда

Результат выглядит так:

$ nano ~/mail.sh

#!/bin/sh

[ -f "$1" ] || { echo Example: ~/mail.sh attach_file_name; exit 1; }

EMAIL="youremail@yourcorp.ru"
MAILSERVER="mailhub.yourcorp.ru"
FILENAME=$1

{
    sleep 2
    echo "EHLO $MAILSERVER"; sleep 1
    echo "MAIL FROM: <$EMAIL>"; sleep 1
    echo "RCPT TO: <$EMAIL>"; sleep 1
    echo "DATA"; sleep 1
    echo "To: $EMAIL"
    echo "Subject: $FILENAME"
    echo "MIME-Version: 1.0 (mime-construct 1.9)"
    echo "Content-Type: $(/usr/bin/file -bi "$FILENAME"); name=\"$FILENAME\""
    echo "Content-Transfer-Encoding: base64"
    echo
    openssl base64 < "$FILENAME"
    echo '.'
    echo "QUIT"
    echo
} | nc $MAILSERVER 25

$ chmod +x ~/mail.sh

$ ~/mail.sh /etc/os-release

$ sudo ~/mail.sh /var/log/syslog.2.gz

Еще, скрипт наглядно демонстрирует работу протокола SMTP и пример форматирования электронного письма с вложением, о чем мои коллеги рассказывают на занятиях

Буду рад, если кому то пригодится, с наступающим Новым Годом!

Теги:
-1
Комментарии4

Вышла новая версия fq 0.16.0

fq - это инструмент, язык и декодер для работы с двоичными данными. Конечная цель проекта — объединить в одном инструменте функции jq, hexdump, dd и gdb.

Поддерживаем массу форматов, полный список: https://github.com/wader/fq/blob/master/doc/formats.md

Написан на Golang.

Демонстрация работы
Демонстрация работы

GitHub: https://github.com/wader/fq

ChangeLog: https://github.com/wader/fq/releases/tag/v0.16.0

Теги:
+2
Комментарии0

@Regnar, навеяло статьёй

Свалился на меня «последний из 32-битных могикан», но машинка прямо финал возможностей архитектуры — насколько я понял, видит спокойно 8 гигов рамы (PAE во все поля?), слотов не пожалели, в общем, в такое чудо бы камень хотя бы на 2 ядра, но, увы…

Я его практически не смотрел ещё и ХЗ когда посмотрю (вроде не совсем мёртвая), но превентивно задам вопрос. Допустим, поставил я туда 32-битный BunsenLabs. Допустим, я хочу запустить какое-нибудь 64-битное приложение, которое в 32 битах давно уже не обновляется. Допустим, мне пофиг, что там в плане скорости (очень важное допущение, потому что оно как бы понятно, что там будет).

Насколько это реально — настроить для него резервативию… презервацию… короче, специально обученный загон с софтовой эмуляцией 64 бит? Существуют ли решения? Чтобы их установить и отконфигурировать, обязательно пройти все круги ада, как в той статье?

Практического смысла это по понятной причине не несёт — просто пятничное.

Теги:
-2
Комментарии0

Почему я снова вернулся на Debian после Ubuntu 24.04 и Fedora 42

Недавно я купил новый ноутбук и решил использовать это как повод попробовать что-то свежее, кроме привычной Ubuntu.

Сначала я поставил Ubuntu 22.04, но быстро понял, что хочу поэкспериментировать и посмотреть, как себя чувствуют другие дистрибутивы на новом железе.

Я решил обновиться с Ubuntu 22.04 до 24.04 - казалось бы, логичный шаг: свежий LTS, новые пакеты, улучшения в GNOME. Но спустя пару недель я понял, что дистрибутив нужно менять. Расскажу, почему.

Медленная работа с большим количеством файлов

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

Если регулярно работаешь с проектами, папками картинок или архивами — это превращается в настоящий тормоз.

Да, баг могут исправить, но в тот момент он мешал работать каждый день.

Fedora: понравилась, но не подошла под задачи

Первым я решил попробовать Fedora 42.
Впечатления были отличные:

  • система работает быстро,

  • GNOME выглядит аккуратнее без патчей Canonical,

  • Wayland ощущается максимально плавным,

  • окружение ощущается «современным из коробки».

Но очень быстро я столкнулся с проблемой:
часть нужных мне пакетов просто отсутствовала в репозиториях.

Да, что-то можно было поставить, но не все инструменты, которыми я пользуюсь в работе, нашлись. Также наблюдалась проблема обновления некоторых пакетов из России. Получается замкнутый круг.

В итоге я пытался найти нужные программы, но либо я их не там искал, либо их не было, либо которые я нашел не заработали.

Почему я выбрал Debian 13

В этом году как раз вышел Debian 13 с GNOME 48, я решил попробовать его.

И для себя получил:

  • стабильность, к которой привык,

  • современный GNOME без патчей,

  • огромный набор пакетов в репозиториях,

  • отсутствие лишних предустановленных компонентов,

  • а главное — всё, что мне нужно, установилось без танцев.

В итоге Debian остаётся для меня тем самым балансом:

Итог

Ubuntu 24.04 — неплохой релиз, но сейчас он не подходит под мои задачи.

Fedora оставила отличные впечатления — она бы идеально подошла мне «для души».
Но для работы мне нужна система, где всё устанавливается из репозиториев, ничего не ломается после обновлений и не приходится искать обходные решения.

Так я и остановился на Debian 13 с GNOME 48 — и пока это лучший вариант для моего сценария.

А прочитать статью про мой ноутбук, который я приобрел для Линукс за 25000 рублей, вы можете по ссылке:

https://kodprog.ru/noutbuk-dlya-linuks-za-25000

Теги:
+5
Комментарии10

Почему мне не понравился Arch Linux

Однажды я решил попробовать Arch Linux — в качестве эксперимента, чтобы понять, подходит ли он мне как основная система. Спойлер: нет. Хотя я понимаю, почему Arch нравится многим, лично мне он не зашёл. Расскажу коротко — без холивара, просто субъективный опыт.

1. Слишком много ручной настройки

Да, это философия Arch — «собери систему под себя».
Но когда даже базовые вещи требуют:

  • поиска пакета вручную,

  • чтения вики,

  • настройки конфигов,

в какой-то момент это начинает отвлекать от работы.

Мне хотелось просто пользоваться системой, а не постоянно её собирать.

2. Установка превращается в квест

Я понимаю, что сейчас есть Archinstall, но это всё равно:

  • больше шагов,

  • больше точек, где можно ошибиться,

  • больше нюансов, которые надо держать в голове.

Для сравнения: Ubuntu/Debian/Fedora ставятся буквально за 10–15 минут без сюрпризов.
Arch — это отдельный процесс, который каждый раз занимает время, силы и концентрацию.

3. Постоянные обновления и риск поломок

Rolling release — это круто, но это также:

  • риск, что обновление завтра что-то сломает,

  • необходимость держать в голове зависимости,

  • желание обновляться реже, но при этом понимание, что массово обновлять ещё опаснее.

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

4. Много времени уходит на поиск информации

Arch Wiki — одна из лучших в мире, но:

  • почти каждое действие требует чтения документации,

  • часто нужно искать решения на форумах,

  • иногда конфликты пакетов решаются вручную.

Да, можно привыкнуть, но мне не хотелось превращать рабочий компьютер в постоянную учебную площадку.

5. Минимализм оказался минусом

Arch устанавливается «голым».
Ты ставишь:

  • окружение,

  • драйверы,

  • кодеки,

  • шрифты,

  • инструменты,

  • конфигурируешь систему практически с нуля.

Кому-то это даёт свободу.
Мне — лишние часы, которые можно было потратить на реальную работу.

Итог

Я понимаю, за что любят Arch — скорость, свежие пакеты, гибкость. Но для моего сценария использования он требует слишком много времени и внимания. В итоге я вернулся к Debian/Ubuntu: они просто работают, а я могу заниматься задачами, а не конфигами.

Теги:
+2
Комментарии21

Домашняя лаба на ARM64 с Incus на Ubuntu

Я постепенно перевожу свою домашнюю лабораторию с 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?

Помогите, если есть опыт!

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии13

Несколько "каверзных", вопросов для собеседования по Linuх, "подсказанных" практикой

Всем привет!

Наверное, мало кто любит проходить, или проводить собеседования, особенно второе, но, если приходится это делать, хочется что бы вопросы на нем были более “жизненными”, нежели “назовите все ключи команды ls” (сам использую 2-3, “в стрессе” вспомню еще 5-7) и, менее теоретическими, нежели “какими ключом шифруем а каким подписываем сообщение” (обычно эти операции скрыты за интерфейсом и сделать ошибку трудно)

Потому, хочу поделиться подходящими задачками, из своей практики:

Вопрос 1. Объясните вывод на экране, что будет, если повторить команду в третий раз, как избежать такого поведения?

# cp -r /etc /etc_copy
# du -hs /etc_copy
5.0M    /etc_copy

# cp -r /etc /etc_copy
# du -hs /etc_copy
10M     /etc_copy

Осознал этот забавный факт при очередной итерации развертывая kubernetes через kubespray 

Вопрос 2. Команде ping необходимы права для открытия raw socket , почему это не мешает ее использовать “обычным” пользователям?

С времен FreeBSD был уверен, что для этого используется setuid бит, но, оказалось, что в Linux не так:

student@debian:~$ ls -l $(which ping)
-rwxr-xr-x 1 root root 90568 Nov 27  2022 /usr/bin/ping

Обнаружил это, разбираясь, почему не работает модуль icmp в prometheus/blackbox_exporter , с тех пор стараюсь не забывать про POSIX capabilities  и cap_net_raw, в частности

Вопрос 3. Объясните, почему повторный запуск команды приводит к сообщению Permission denied?

debian# tcpdump -niany -w file.dmp not port 22
...
4 packets received by filter
0 packets dropped by kernel

debian# tcpdump -niany -w file.dmp not port 22
...
tcpdump: file.dmp: Permission denied

Расследование приведет к знакомству с AppArmor  - реализацией Linux Security Modules 

Вопрос 4. Объясните вывод на экране:

student@server:~$ su
Password:

server:/home/student# shutdown
bash: shutdown: command not found

Несколько раз встречал такую ошибку на занятиях , что позволяло еще раз рассказать про переменные окружения, команду “su -” и, что лучше вместо нее использовать sudo

Наверное, достаточно задачек из моего субъективного опыта, буду рад, интересным примерам из Вашего, в комментариях, Спасибо!

Теги:
Всего голосов 7: ↑6 и ↓1+5
Комментарии1

Вышел релиз программного обеспечения topalias 3.0.0

topalias 3.0.0
topalias 3.0.0

Установка:
pip3 install -U --upgrade topalias
pipx install --force topalias
python3 -m pip install -U --upgrade topalias
python3.10 -m pip install -U --upgrade topalias

Запуск утилиты topalias:
topalias
python3 -m topalias
python3.10 -m topalias
python3 topalias/cli.py

Изменения:
Поддерживается Ubuntu 25.10/Python 3.13, Kubuntu 22.04/Python 3.10, KDE neon Rolling

Просьба проверить на актуальной версии Python 3.15 в KDE neon

Ссылка на дистрибутив KDE neon Rolling: https://distrowatch.com/table.php?distribution=kdeneon

topalias - утилита для генерации коротких алиасов по истории bash/zsh

На GitHub опубликована открытая утилита для генерации коротких алиасов на основании истории работы в bash или zsh. Утилита анализирует файлы ~/.bash_aliases, ~/.bash_history и ~/.zsh_history с историей выполнения команд в терминале Linux, после чего предлагает короткие аббревиатуры (акронимы) для длинных, долго набираемых и сложно запоминаемых, но часто используемых команд. Также поддерживается вывод статистики по истории работы в командной строке.

Если вы работаете в терминале десятки раз в день, алиасы — это мощный инструмент повышения эффективности. Но с ростом количества проектов и конфигураций .bashrc/.zshrc алиасов становится много: часть дублируется, часть устарела, некоторые перекрывают системные команды. topalias решает три задачи:

  • дать метрику использования алиасов (какие используются чаще всего);

  • упростить создание/удаление/пакетное управление алиасами;

  • находить конфликтные или опасные алиасы и предлагать безопасные альтернативы.

В статье — обзор возможностей, примеры использования, внутренняя архитектура и практические рекомендации для интеграции с bash/zsh/fish.

Ключевые возможности

  • Сбор статистики использования алиасов на основе shell-history.

  • Команда top — список наиболее часто используемых алиасов.

  • Интерактивный режим (TUI) для обзора, включения/выключения и редактирования.

  • Поддержка bash, zsh и fish.

  • Экспорт/импорт в виде конфигурационных файлов и git-репозиториев.

  • Поиск конфликтов (алиас затеняет системную команду) и предупреждения.

  • Генератор «умных» алиасов: на основе частых цепочек команд предлагает сокращения.

  • Пакетная миграция между машинами (pack/unpack).

  • Небольшой daemon/cron для частого обновления статистики (опционально).

# клонируем репозиторий

git clone https://github.com/CSRedRat/topalias.git

cd topalias

# установка в виртуальное окружение (рекомендуется)

python -m venv .venv

source .venv/bin/activate

pip install -e .

# инициализация в shell (одна строчка, добавьте в .bashrc/.zshrc)

topalias init --shell auto >> ~/.topalias-shell-rc && source ~/.topalias-shell-rc

Примечание: init генерирует небольшую обёртку для history-hook, чтобы собирать данные об использовании алиасов без заметной нагрузки.

Подписывайтесь на канал в Telegram: https://t.me/ruopsdev

Второй канал на Телеграм: https://t.me/journal_rbc_pro

  • Просмотр самых часто используемых алиасов:

topalias top
topalias top --limit 20 # или с лимитом
  • Найти алиас по фрагменту:

topalias find git
  • Создать алиас:

topalias add ga='git add --all'
  • Удалить алиас:

topalias rm ga
  • Интерактивный режим (TUI):

topalias ui
  • Экспорт текущих алиасов в файл:

topalias export --format bash > ~/.topalias-export.sh

Импорт из файла:

topalias import ~/.topalias-export.sh

Если вы часто выполняете цепочку:

git add . && git commit -m "WIP" && git push

topalias предложит вариант:

topalias suggest
# suggestion: gpush = git add . && git commit -m "WIP" && git push
topalias add gpush='git add . && git commit -m "WIP" && git push'

Проверим, не перекрывает ли алиас системную команду:

topalias check-conflicts
# output:
# - ls -> aliased to "ls --color=auto" (OK)
# - df -> aliased to "du -h" (DANGER: shadows system df)

Сохраняем пакет алиасов и переносим на другой компьютер:

topalias pack --name work-aliases > work-aliases.tar.gz
# на другом хосте
topalias unpack work-aliases.tar.gz
topalias import unpacked/work-aliases.sh
Теги:
Всего голосов 4: ↑2 и ↓20
Комментарии7

Терминал, командная строка, консоль, shell — как правильно?

Чем эти все термины отличаются друг для друга. Очень нужно понять, чтобы правильно написать мою следующую книгу.

Всем ответившим заранее спасибо.

Теги:
Всего голосов 6: ↑1 и ↓5-3
Комментарии12

Так как мои статьи "на поныть" как выстраивать организационные процессы со своей маленькой колокольни без пап, мам и смс безбожно минусят (хотя считаю, что несправедливо! мне мой подбор слов и их порядок упаковки в предложения очень нравится) я продолжу потихонечку записывать (в основном для себя правда, потому что я немножко рыбка) мои изыскания с администрированием различных операционных систем и поиск решений тупых проблем на уровне "почему оно все не работает".

Кроме удовольствия от переноса многочисленных мыслей в текст, это безобразие меня еще и мотивирует этим заниматься и структурирует тот бардак, который живет у меня в голове. Потому что хочется спасать человечество, искать средство от смерти или думать о вечном, а вот решать проблему, почему очередной раз не выполняется элементарный apt-get update на машинке совсем не хочется. Сразу появляются мыслишки, что я трачу свое время на что-то бессмысленное и глупое и сажусь играть в "собери три предмета в ряд", потому что там в отличие от элементарных проблем с линуксом я не чувствую себя тупой, а при окончании ходов тебе всегда услужливо предлагают посмотреть рекламу за несколько дополнительных, чтобы ты снова чувствовала себя победителем.

По сложившейся традиции моих немногочисленных постов

Мое маленькое ДАНО ХОЧУ:

Установить постгрю на дебианоподобную ОС, чтобы вспомнить, куда она пишет логи и в каком точно файле это место настраивается.

И да, я знаю, что вполне можно нарыть это в тырнетике или спросить у чата жипити, но я опрометчиво решила, что установить ее и посмотреть ручками будет проще, а когда это не получилось командой apt-get install postgres мое самолюбие было уже не остановить и срочно надо было доказать дурацкой базе данных, что я умнее (ну как иначе, то?). Вообще не то, чтобы я никогда не работала с постгрей, в моей голове достаточно смутные воспоминания, что скорее всего она пишет лог в /var/log/, а настройки у нее вообще живут только в двух файлах. Но точных имен я не помню, поэтому имеем, что имеем.

А вот теперь ДАНО:

У меня есть в запасе чистый диски на VirtualBox'e винды и дебиана, вот клон последней и было решено использовать для изысканий.

Шаг 1

Пробуем запустить apt-get install postgres, потому что что может быть проще... учитывая, что в ТЗ даже версия мне безразлична... просто вспомнить название файликов...

На что умный дебиан нам напоминает про безопасность и права (женщины боролись за права с 18 века!!!! а мне до сих пор не хватает =( )

Поэтому заходим под рутом, выполняем apt-get update - радуемся, когда тот успешно выполняется и идем искать нужный нам пакет apt search postgres.

В получившейся портянке ищем саму постгрю, потому что apt-search выдает результаты со словом postgres не только в названии пакета, но и в его описании. Лично мой взор привлекает пакет postgresql-all, где в описании обещают, что это metapackage depending on all PostgreSQL server packages. Его и пробуем поставить.

На удивление пакет (а точнее пакеты) ставится без ошибок, и в цмдушечке появляется заветный psql, который правда говорит, что подключаться ни к чему он не хочет, сокета на 5432 у него нет, а роль root вообще не существует.

Но по крайней мере у меня есть ответ на мой первый вопрос. Основные файлы конфигурации живут в /etc/postgres/ее версия/main/ и зовутся pg_hba.conf и posgresql.conf, где первый отвечает за разрешения подключения к этой самой бдушечки, а второй как раз хранит в себе все переменные ее настройки - в том числе и куда хранить лог "log_directory" которая по умолчанию закомментирована.

Удивительно и невероятное, если запустить apt-get update из под пользователя, у которого нет прав, под рутом этот самый apt-get update выдает обшибку.

Удивительно и невероятновое 2: Почему-то мой быстрый путь тяп ляп и готово по добавлению извера в /etc/sudoers не помог дать ему необходимых прав, а дебиан под ним пакеты не захотел устанавливать.

Но об этом в лучших традициях Скарлетт О'Хара я подумаю завтра, потому что количество букв в посте сильно ограничены.

Теги:
Всего голосов 3: ↑0 и ↓3-3
Комментарии0

Как изменить SSH-пароль для Amnezia VPN

Amnezia - достаточно удобное приложение, которое позволяет в пару кликов (или тапов смартфона) развернуть VPN-сервер на вашем VPS.

Работает это следующим образом: при старте приложения на смартфоне/ПК вы вводите адрес сервера и данные SSH-подключения: user + password/privatekey (лично у меня подключение по ключу не взлетело). После этого приложение подключается к серверу по SSH и скачивает/настраивает VPN.

Приложение запоминает данные SSH-подключения и в дальнейшем они используются для упрощенного администрирования: добавления/удаления VPN-пользователей, установки/удаления дополнительных компонентов и прочего.

Проблемы начинаются тогда, когда вам по какой-то причине нужно поменять реквизиты SSH-подключения: изменить юзера, заменить пароль/ключ, изменить порт. Приложение Amnezia не предосталяет такой возможности (есть даже открытый feature request). Если вы попробуйте поискать информацию по данной теме, то единственным найденным вариантом будет что-то вроде "удалите сервер и разверните заново", что естественно приведет к тому, что ключи всех VPN-пользователей придется генерировать заново.

Итак, как же изменить пароль (или другой атрибут) без редеплоя VPN-сервера?

Инструкция:

  1. В приложении заходим ⚙️ -> Backup -> Make a backup. Получаем JSON-файл.

  2. JSON-файл содержит все параметры в открытом виде, в т.ч. пароль. Меняем пароль на новый и сохраняем файл.

  3. Заходим ⚙️ -> Backup -> Restore from backup, это действие затирает текущую конфигурацию и устанавливает конфигурацию из файла.

  4. Меняем пароль на самом сервере.

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

Вынос тестов Zig в отдельные файлы

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

Выносить тесты в отдельные файлы — хорошая практика. Рассмотрим это на примере проекта https://github.com/ktarasov/zigrep.

Для начала создадим директорию tests в корне проекта и файл unit_tests.zig. Перенесем туда все тесты из src/main.zig. В список зависимостей добавим импорт главного модуля: const main_mod = @import("../src/main.zig");. Вызовы функций и структур в тестах модифицируем, добавив к ним модуль, например: main_mod.parseArgs.

Важно сделать тестируемые функции публичными, иначе тесты не скомпилируются.

Далее нужно сообщить компилятору, что тесты теперь находятся в другом месте. Для этого изменим файл build.zig. После строки run_step.dependOn(&run_cmd.step) добавим создание модуля с тестами:

const unit_test_mod = b.createModule({
  .root_source_file = b.path("tests/unit_tests.zig"),
  .target = target,
  .optimize = optimize,
});

Также изменим блок добавления константы exe_unit_tests, указав unit_test_mod в качестве root_module.

Вроде всё готово. Попробуем скомпилировать и запустить тесты...

О нет, ошибка: "error: import of file outside module path: './src/main.zig'". Компилятор не импортирует файлы за пределами модуля unit_tests.zig.

Придется явно добавить основной модуль в импорт test-модуля. Для этого вернемся в build.zig и добавим после создания exe_unit_tests следующую строку:

exe_unit_tests.root_module.addImport("zigrep", exe_mod);

Снова запустим тесты — и они успешно пройдут!

Итого: мы вынесли тесты в отдельный файл и создали иерархию директорий, разделив основной код и тесты.

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

Вся история SCO: (ex-Microsoft) Xenix, SCO UNIX/ODT, SCO OpenServer 5, SCO UnixWare 7, поглощение SCO Calder'ой, Дарл МакБрайд, суд против Linux, SCO OpenServer 6, банкротство, UnXis/Xinuos, Definitive, Definitive 2018, суд 2021 года против IBM/Red Hat, Definitive 2018 MP1/UP1...

Может показаться, что это готовый промпт для нейросеток, но на самом деле - это краткая версия всей истории одного из (когда-то) крупнейших разработчиков коммерческих UNIX-систем для x86.

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

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

Недавно я задумался, а как создать systemd-timer для текущего пользователя без sudo прав, ведь c cron в этом вопросе проблем не было? Оказывается можно создавать локальные для пользователя systemd таймеры и сервисы и никакой root или sudo не нужны для создания файлов в /etc/systemd/system/ ! И как оказалось это касается не только таймеров и сервисов но и вообще всех сущьностей.

И так у меня есть задача конвертировать записи экрана сделанные с помощью Spectacle из vp9/webm в h264/mp4 и h265/mp4, так как он не умеет ещё в аппаратное энкодирование с GPU , а собственные записи в h264/mp4 крайне плохого кчества о чём был даже баг.

Создаём нужный подкаталог и сервисный файл:

mkdir -p ~/.config/systemd/user 
nano ~/.config/systemd/user/screencast-transcoder.service

Сам screencast-transcoder.service:

[Unit]
Description=Screencast Transcoder Script
After=graphical-session.target

[Service]
Type=simple
ExecStart=/home/user/.local/bin/sc_formater_nvenc.sh
Restart=on-failure
Environment=DEBUG=false

[Install]
WantedBy=default.target

Обновляем список и стартуем сервис:

systemctl --user daemon-reexec
systemctl --user daemon-reload
systemctl --user enable --now screencast-transcoder.service
systemctl --user status screencast-transcoder.service

Если надо, то смотрим логи:

journalctl --user -o short -n 10 -f -u screencast-transcoder.service

---

Если вдруг вам интересно, то скрипт выглядит так:

#!/bin/bash
set -euo pipefail
DEBUG=${DEBUG:-false}
if ${DEBUG}; then
    set -x
fi
DN="${HOME}/Videos/Screencasts"
while true; do
    if FN=$(inotifywait -e close_write,moved_to --format %f "${DN}"); then
        if [[ "${FN##*.}" == "webm" ]]; then
            INPUT="${DN}/${FN}"
            BASENAME="${FN%.webm}"

            # H.264
            ffmpeg \
                -hide_banner \
                -hwaccel cuda \
                -i "${INPUT}" \
                -c:v h264_nvenc \
                -cq 23 \
                -preset p7 \
                -f mp4 "${DN}/${BASENAME}.h264.mp4" &

            # HEVC / H.265
            ffmpeg \
                -hide_banner \
                -hwaccel cuda \
                -i "${INPUT}" \
                -c:v hevc_nvenc \
                -cq 23 \
                -preset p7 \
                -f mp4 "${DN}/${BASENAME}.hevc.mp4" &
        fi
    fi
done
Теги:
Всего голосов 4: ↑3 и ↓1+2
Комментарии6

Научите, как пользоваться Хабром

К примеру, открыл я сайт. Увидел статью (оказалось пост)

Статья и Пост
Статья и Пост

Решил поставить комментарий под постом. Просит залогиниться. Жму залогиниться...

И всё, нет поста. Потерялся видимо в моих "рекомендациях". Необоснованные трудности для пользователя на пустом месте.

При этом пост не имеет простой ссылки открываемой кликом по заголовку или тип того

Решил вопрос, нажав - поделиться, скопировал. Залогинился. Вставил ссылку. Перешёл....

Мне кажется не такой должен быть пользовательский путь

Теги:
Всего голосов 8: ↑7 и ↓1+9
Комментарии3

Личный опыт использования Ubuntu как основной рабочей системы

В последнее время много постов про Linux в контексте использования в качестве рабочей системы, и так получилось, что мне не удалось установить Windows на свой рабочий компьютер, и я вспомнил про Ubuntu, на которой работал лет 15 назад.

Я Data Engineer, работаю удаленно, и у меня очень мало свободного времени, поэтому решаю задачи путем наименьшего сопротивления. То есть, если что-то не работает быстро, сразу перехожу на костыли или игнорирую по возможности.

Итак, Ubuntu 24.04.2 LTS установилась без вопросов на отдельный SSD. После установки я начал смотреть, какой софт для работы есть, а для какого софта нужен будет Wine или виртуальная машина с Windows. С удивлением обнаружил, что такого очень мало.

Железо и периферия работает исправно, включая Bluetooth-наушники с микрофоном.

Программы которые я использую:

  • Outlook Electron Client

  • Microsoft Teams (тоже Electron на базе Chromium)

  • Dbeaver + Azure Data Studio - для работы с базами данных

  • Postman + Bruno - всё что связанно с тестированием API

  • Libre Office - работает сносно

  • VS Code

  • Основной браузер Opera

  • Допольнительные браузеры (Firefox, Vivaldi, Brave, Chromium)

  • 1Password - хранилище паролей (рабочее)

  • Shutter для снимков экрана. Задача стояла в том, чтобы можно было сделать снимок области экрана и что-то нарисовать поверх, не включая отдельный редактор изображений.

  • Slack

  • Zoom

  • AnyDesk

  • draw.io для диаграм - работает плохо, но работает

  • battle.net который работает через Lutris, нормально запускает игры.

То что работает в виртульной машине на Windows

  • разные VPN - Forti/Checkpoint/Global Protect - даже если есть клиент под линукс, у клиентов в политиках безопасности стоит только подключения с Windows

  • Visual Studio + SQL Management Studio - в некоторых проектах используем SSAS (SQL Server Analysis Services) - под линукс не нашел как работать с ним

Не решенные проблемы

  • Переключение языков по Alt + Shift вызывает меню апликаций, закрываеться ещё одним нажатием на Alt.

  • Text Editor при перетаскивании с экрана на экран «плющит», буквально, потом через какое-то время отпускает

  • Иногда отваливаеться второй жесткий диск, лечиться перемонтированием

В общем я доволен, работает стабильно и шустро.

Конфигурация компьютера:

HP Z640 Workstation

  • Процессор - Intel® Xeon® E5-1630 v4 × 8

  • Память - 128 Gb

  • Графическая карта - NVIDIA GeForce GTX 760

  • Диски - система стоит на Samsung SSD 490 GB, дополнительный диск TOSHIBA 3 TB HDD

  • 3 экрана - 32" (FHD) + 27" (FHD) + 22" (2K)

  • tp-link AX3000 - WiFi + Bluetooth

  • Мышь - Logitech Lift Vertical Ergonomic

  • Клавиатура - Das Keyboard 3 Professional

  • Камера

  • Наушники с микрофоном - Logi Zone Vibe 100

Теги:
Всего голосов 5: ↑5 и ↓0+6
Комментарии5

Обновление моего текстового редактора на java

обновлённая версия редактора
обновлённая версия редактора
  • подсветка синтаксиса java пока в процессе(подсветка простая пока только на С++)

  • добавлена панелька для ввода поиска - её можно скрыть

  • добавлен счетчик символов текста в редакторе

  • все панели участницы можно скрыть, менять размер

  • быстрое переключение между консолью и пространством с текстом

  • выбран путь емуляции исполнения процесса это значит * - звёздочку я реализовал сам )

  • табы как пробелы - пока предустановлен размер 2 пробела на 1 таб

  • добавлены хоткеи, покачто их нельзя переназначить

  • покраска ошибок в красный цвет

    радует что редактором уже можно пользоваться, мне самому как криейтеру этого текстового редактора нравится )

    добавлю режим PLAIN text`a, подсветку синтаксиса java, калькулятор простенький, возможно добавлю проигрыватель музыки аля как опция

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии7

Часто в разных скриптах, обрабатывающих серверные TLS-сертификаты, - скажем, для мониторинга, - в качестве источника "целевого" имени при выборе сертификата используется содержание Subject/CN (commonName). Предполагается, что в Subject/CN должно быть доменное имя. Вот типичный пример:

$ openssl x509 -in disruptive.pem -subject -noout -nameopt multiline | awk -F' = ' '/commonName/ {print $2}'
disrupted.zone

Однако, если речь про сертификаты для TLS в современном вебе и про имена, то полагаться тут на Subject нельзя. Нужно использовать другой фрагмент сертификата, а именно - расширение SAN (Subject Alternative Name).

Для извлечения расширения SAN при помощи OpenSSL x509 нужно использовать опцию -ext subjectAltName. Выдача состоит из списка, где каждому значимому элементу соотвествует префикс, обозначающий тип. DNS-имена OpenSSL выводит с префиксом "DNS" (кто бы мог подумать!). Пример:

$ openssl x509 -in google-com.cert.pem -noout -ext subjectAltName
X509v3 Subject Alternative Name: 
    DNS:*.google.com, DNS:*.appengine.google.com
[...]

Кроме "DNS" могут встретиться другие префиксы, обозначающие IP-адреса и т.д. Однако для обработки имён - нужны имена, то есть "DNS". Скрипт, конечно, несколько усложнится. Пример:

$ openssl x509 -in google-com.cert.pem -noout -ext subjectAltName \
> | awk 'NR>1{split($0,A,",");for(k in A){split(A[k],B,":"); if(B[1]~/DNS/){print B[2]}}}' \
> | wc -l
135

Причина использования SAN в том, что имя из поля Subject/CN оконечного (серверного) сертификата браузеры давно не используют в качестве идентификатора при валидации. А чтобы валидация сертификата для веб-узла прошла успешно (в браузере), необходимо наличие подходящего имени в SAN. Более того, современные требования для УЦ по выпуску TLS-сертификатов ("документы CA/B-форума") прямо не рекомендуют использование поля commonName в Subject оконечных сертификатов для веб-узлов. Это значит, что доменного имени в Subject может просто не оказаться, но сертификат (при прочих равных) будет валидным для браузера.

Теги:
Всего голосов 3: ↑3 и ↓0+4
Комментарии0

Праздничный unixporn: python vim ide в контейнере

В разработке на python, особенно в DS/ML проектах, мы все сталкиваемся со сложной схемой зависимостей на специфичной аппаратной платформе. Зачастую, вести разработку удобно в том окружении, в котором в последствии запускается приложение.

Если вы вдруг vim user, то можно просто доставить редактор в контейнер с окружением и разрабатывать прямо там. Такая схема достаточно лекговесна, позволяет относительно просто держать актуальными завистимости при разработке, переиспользовать существующие сборочные конвейеры с небольшим наборов слоёв для самого редактора. Так же это может быть удобно, если вам нужно работать где то на удалённом кластере по ssh.

У меня был некоторый шаблон Dockerfile с добавкой vim с плагинами который кочует из проекта в проект и я решил поделиться с вами этой наработкой.

С Новым годом!

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

Обновление 2024.11.05 сборки DogLinux для тестирования, обслуживания ПК, ноутбуков

Основной состав ПО: FurMark2, GPUTest, Unigine Heaven, CPU-X, GSmartControl, GParted, Partimage, Partclone, TestDisk, ddrescue, WHDD, DMDE.

Linux kernel 5.10-amd64 / 6.10-amd64 / 6.1-i686
nvidia-driver 550.120 / 390.157 / 340.108
mesa 24.2.2-amd64 / 22.3.6-i686

В initrd устранены ошибки и добавлены новые возможности (эти изменения включены в сборочные скрипты основного проекта DogLinux):

  • При запуске можно указать modprobe.blacklist=ahci,nvme и запретить загрузку модулей ядра что иногда требуется при работе с неисправными HDD и SSD. После запуска можно подгрузить необходимые модули ядра вручную.

  • При сетевой PXE загрузке можно переопределить nfs путь по умолчанию /srv/pxe/ с помощью параметра nfspath=

  • Исправлен порядок загрузки модулей ядра broadcom и tg3. Ранее адаптер Broadcom Netlink BCM57780 Ethernet был не работоспособен при загрузке.

  • Уменьшен размер путем исключения из состава initrd не используемых для начальной загрузки модулей.

  • Обеспечена выгрузка не задействованных модулей ATA контроллеров ata_* sata_* pata_*

  • Обновлены пакеты прошивок firmware-nonfree 20240909

  • Добавлены firmware-cirrus (git20241031) для звукового кодека и усилителя Cirrus Logic CS42L43 и CS35L56 которые используются в некоторых ноутбуках Asus, Dell, HP, Lenovo производства 2022г.

  • Обновлены Chromium 130, FurMark 2.4.1.0

  • Исправлен скрипт ddrescue-loop (не работал с SATA устройствами при отсутствии /dev/disk/by-path/)

Теги:
Всего голосов 2: ↑2 и ↓0+3
Комментарии0
1

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