Skip to content
  • Установка RustDesk на Debian

    Программное обеспечение
    1
    0 Голоса
    1 Сообщения
    26 Просмотры
    A
    RustDesk Установка RustDesk на Debian 12 и 13 1.1. Обновление системы Это обязательный шаг: sudo apt update обновляет список доступных пакетов из репозиториев (без установки), а sudo apt upgrade -y устанавливает все доступные обновления (-y — автоматическое подтверждение "yes" для всех вопросов, чтобы скрипт не висел). sudo apt update sudo apt upgrade -y 1.2. Установка зависимостей RustDesk требует библиотек для GUI, сетевого стека и медиа. wget скачивает файлы по HTTP/HTTPS, gdebi-core — это утилита для установки .deb-пакетов с автоматическим разрешением зависимостей (лучше, чем dpkg -i, потому что сама доустанавливает недостающее). sudo apt install -y wget libgtk-3-0 libayatana-appindicator3-1 libxdo3 gstreamer1.0-pipewire libgtk-3-0 — для графического интерфейса (GUI). libayatana-appindicator3-1 — для системного трея (иконки в панели). libxdo3 — для симуляции нажатий мыши/клавиатуры (удалённое управление). gstreamer1.0-pipewire — для аудио/видео в реальном времени (поддержка PipeWire вместо PulseAudio). Если при установке RustDesk apt сам попросит доустановить что-то — просто подтвердить. 1.3. Скачивание и установка Скачиваем .deb с официального GitHub (прямая ссылка на релиз). wget по умолчанию сохраняет файл с оригинальным именем. wget https://github.com/rustdesk/rustdesk/releases/download/1.4.4/rustdesk-1.4.4-x86_64.deb sudo dpkg -i rustdesk-1.4.4-x86_64.deb 1.4. Запуск и начальная настройка Запускаем RustDesk — откроется GUI с ID (уникальный идентификатор вашего устройства) и полем для пароля. rustdesk В GUI: Settings → Security → Set Password → Permanent Password (задавайте сильный пароль). ID сохраните — им будете подключаться с других устройств. RustDesk автоматически стартует при загрузке и использует публичные серверы (relay) для соединения. 2. Headless-режим (для серверов без GUI, через SSH) Если Debian — сервер без X11/GNOME, RustDesk всё равно работает (виртуальный дисплей). # 1. Установка (то же, что выше) + daemon-режим sudo systemctl enable --now rustdesk.service # автозапуск при загрузке # 2. Настройка ID/пароля через CLI rustdesk --get-id # покажет ID (например, 123456789) sudo rustdesk --password "ВашПостоянныйПароль" # 3. Запуск в фоне (если не автозапуск) sudo rustdesk --daemon Проверьте статус: systemctl status rustdesk или ps aux | grep rustdesk.
  • Установка Anydesk на Ubuntu 24.04

    Программное обеспечение
    1
    0 Голоса
    1 Сообщения
    6 Просмотры
    A
    Чтобы установить AnyDesk на Ubuntu 24.04 через терминал, рекомендуется использовать официальный репозиторий AnyDesk. Это обеспечит автоматические обновления и актуальную версию. Шаги по установке через репозиторий (рекомендуемый способ) Обновите систему и установите необходимые утилиты: sudo apt update sudo apt install ca-certificates curl apt-transport-https Создайте директорию для ключей (если её нет): sudo install -m 0755 -d /etc/apt/keyrings Скачайте и добавьте GPG-ключ AnyDesk: sudo curl -fsSL https://keys.anydesk.com/repos/DEB-GPG-KEY -o /etc/apt/keyrings/keys.anydesk.com.asc sudo chmod a+r /etc/apt/keyrings/keys.anydesk.com.asc Добавьте репозиторий AnyDesk: echo "deb [signed-by=/etc/apt/keyrings/keys.anydesk.com.asc] https://deb.anydesk.com all main" | sudo tee /etc/apt/sources.list.d/anydesk-stable.list > /dev/null Обновите список пакетов и установите AnyDesk: sudo apt update sudo apt install anydesk После установки запустите AnyDesk командой anydesk или через меню приложений. Альтернативный способ: Установка из .deb-пакета Если не хотите добавлять репозиторий: Скачайте последнюю версию .deb-пакета (проверьте актуальную версию на сайте): wget https://download.anydesk.com/linux/anydesk_7.1.2-1_amd64.deb Установите пакет: sudo dpkg -i anydesk_*.deb sudo apt install -f # Установит недостающие зависимости, если нужно Примечание: Ubuntu 24.04 использует Wayland по умолчанию, и AnyDesk может иметь ограничения (например, входящие подключения лучше работают на Xorg). Если возникнут проблемы, попробуйте переключиться на X11 при входе в систему. Если нужны дополнительные настройки (например, автозапуск сервиса), выполните sudo systemctl enable --now anydesk.
  • Отличия дистрибутивов Linux между собой

    Debian и Ubuntu
    2
    0 Голоса
    2 Сообщения
    7 Просмотры
    A
    Что касается серверных и десктопных дистрибутивов, то они между собой отличаются в основном тем, что десктопные дистрибутивы в основном рассчитаны на офисные, образовательные, и домашние компьютеры, а серверные - предназначены исключительно для работы на серверах, поэтому часто не имеют графического интерфейса, а используют для взаимодействия с пользователем командную строку - технологию, позволяющую общаться человеку с системой текстом с помощью задания специальных команд и их параметров. Также командная строка позволяет использовать так называемую псевдографику, где возможно работа с мышью, но возможности такого взаимодействия сильно урезаны. Разумеется, и командная строка, и псевдографика во всей своей полноте есть и на десктопных компьютерах, но на серверах - это в подавляющем большинстве случаев основной инструмент. Ещё - на серверные дистрибутивы установленные специальные серверные программы, необходимые для сложной работы с сетью, и для других специфических задач. В мире обычных персональных компьютеров, то есть, десктопов, Linux-системы распространены не так сильно, лишь несколько процентов пользователей работают с такими системами. Но среди серверов - Linux-системы являются лидером, удерживая более 90%.
  • Установка VirtualBox на Debian

    VirtualBox
    1
    0 Голоса
    1 Сообщения
    6 Просмотры
    A
    Чтобы установить Oracle VM VirtualBox на Debian 12 (Bookworm) через терминал, рекомендуется использовать официальный репозиторий Oracle — это даст самую свежую версию (на текущий момент 7.2.4). Шаг 1: Установка необходимых зависимостей Сначала установите пакеты для сборки модулей ядра: sudo apt update sudo apt install linux-headers-$(uname -r) dkms gcc make Шаг 2: Добавление GPG-ключа Oracle Скачайте и добавьте публичный ключ для проверки пакетов: wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo gpg --dearmor --yes --output /usr/share/keyrings/oracle-virtualbox-2016.gpg Шаг 3: Добавление репозитория VirtualBox Добавьте репозиторий в систему (для Debian 12 используйте codename bookworm, для Debian 13 - trixie) : echo "deb [arch=amd64 signed-by=/usr/share/keyrings/oracle-virtualbox-2016.gpg] https://download.virtualbox.org/virtualbox/debian bookworm contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list Шаг 4: Установка VirtualBox Обновите списки пакетов и установите VirtualBox (используйте virtualbox-7.2 для последней версии на момент 2026 года): sudo apt update sudo apt install virtualbox-7.2 Если пакет называется иначе (проверьте с apt search virtualbox), используйте актуальное имя. Шаг 5: Добавление пользователя в группу vboxusers Чтобы запускать виртуальные машины без root: sudo adduser $USER vboxusers Перезайдите в сессию (или перезагрузите систему). Шаг 6: (Рекомендуется) Установка Extension Pack Для поддержки USB 2.0/3.0, RDP, шифрования дисков и других функций скачайте и установите Extension Pack: wget https://download.virtualbox.org/virtualbox/7.2.4/Oracle_VM_VirtualBox_Extension_Pack-7.2.4.vbox-extpack sudo VBoxManage extpack install --replace Oracle_VM_VirtualBox_Extension_Pack-7.2.4.vbox-extpack (Согласитесь с лицензией.) Шаг 7: Запуск и проверка Запустите VirtualBox: virtualbox Или из меню приложений. Проверьте версию: VBoxManage --version Альтернатива: Установка из .deb-пакета (без репозитория) Если не хотите добавлять репозиторий: wget https://download.virtualbox.org/virtualbox/7.2.4/virtualbox-7.2_7.2.4-170995~Debian~bookworm_amd64.deb sudo apt install ./virtualbox-7.2_7.2.4-170995~Debian~bookworm_amd64.deb (Но тогда обновления придётся делать вручную.) Возможные проблемы Если модуль ядра не загружается (vboxdrv) : sudo modprobe vboxdrv или перезагрузите систему. Secure Boot: Может потребоваться подписать модули (MOK). Если ошибка с зависимостями — проверьте sudo apt install -f. Теперь VirtualBox готов к созданию виртуальных машин! Если нужны Guest Additions для гостей — установите их внутри ВМ через меню Devices → Insert Guest Additions CD image.
  • Полное удаление VirtualBox с системы Debian

    VirtualBox
    1
    0 Голоса
    1 Сообщения
    4 Просмотры
    A
    Чтобы полностью удалить Oracle VM VirtualBox в Debian 12 через терминал, выполните следующие шаги. Способ зависит от того, как вы устанавливали VirtualBox (из официальных репозиториев Debian, Oracle или через .deb/.run-файл). 1. Если установлен из репозиториев Debian (contrib/non-free) или Fast Track Сначала проверьте установленные пакеты: dpkg -l | grep virtualbox или apt list --installed | grep virtualbox Основной пакет обычно называется virtualbox или virtualbox-версия (например, virtualbox-7.0). Удалите все связанные пакеты с конфигурационными файлами: sudo apt purge virtualbox* virtualbox-dkms* virtualbox-qt* sudo apt autoremove sudo apt autoclean Это удалит программу, модули ядра и ненужные зависимости. 2. Если установлен из официального .deb-пакета Oracle (virtualbox-*.deb) Пакет обычно называется virtualbox-7.0 или подобно. Удалите: sudo apt purge virtualbox-7.0 # или точное имя из dpkg -l # Или универсально: sudo apt purge virtualbox* sudo apt autoremove Если установлен через dpkg: sudo dpkg --purge virtualbox-7.0 3. Если установлен через .run-скрипт Oracle (в /opt/VirtualBox) Запустите uninstaller: sudo /opt/VirtualBox/uninstall.sh Затем вручную удалите остатки: sudo rm -rf /opt/VirtualBox 4. Дополнительная очистка (для любого способа установки) Удалите пользовательские настройки и виртуальные машины (если они не нужны — это удалит все ВМ!): rm -rf ~/VirtualBox\ VMs rm -rf ~/.config/VirtualBox rm -rf ~/.VirtualBox # иногда так Удалите Extension Pack (если установлен и VirtualBox ещё запускается): VBoxManage extpack uninstall "Oracle VM VirtualBox Extension Pack" Или вручную: sudo rm -rf /usr/lib/virtualbox/ExtensionPacks/ 5. Проверка После удаления проверьте: dpkg -l | grep virtualbox which VBoxManage Если ничего не выводит — VirtualBox полностью удалён. Предупреждение: Команды с rm -rf необратимы. Если хотите сохранить виртуальные машины, не удаляйте папку ~/VirtualBox VMs. Если возникнут ошибки с модулями ядра (vboxdrv), перезагрузите систему или выполните sudo apt autoremove.
  • Синтез речи на Android

    Разная информация
    1
    0 Голоса
    1 Сообщения
    8 Просмотры
    A
    Инструкция по установке, настройке и использованию связки @Voice Aloud Reader + RHVoice (на Android) Эта связка — одна из лучших для чтения вслух текстов на русском языке: RHVoice даёт естественные оффлайн-голоса, а @Voice Aloud Reader отлично справляется с веб-страницами, PDF, книгами и текстами из других приложений. 1. Установка приложений Установите @Voice Aloud Reader: Откройте Google Play Store. Найдите "@Voice Aloud Reader" (разработчик Hyperionics Technology LLC). Установите бесплатную версию (есть реклама, но можно купить Premium-лицензию для удаления рекламы и доп.функций). Установите RHVoice: В Google Play Store найдите "RHVoice" (разработчик Olga Yakovleva или RHVoice.com). Установите приложение (бесплатное, открытый код). Откройте RHVoice. Выберите язык Русский (ru-RU). Скачайте один или несколько голосов (например, Anna, Aleksandr, Irina — они бесплатные. 2. Настройка RHVoice как основного TTS-движка RHVoice работает как системный движок синтеза речи, и @Voice будет использовать его автоматически. Перейдите в Настройки Android → Специальные возможности (или Доступность) → Текст в речь (или Вывод текста в речь, TTS-вывод — зависит от версии Android и оболочки). В разделе Предпочитаемый движок выберите RHVoice. Если нужно, настройте скорость речи, тон и другие параметры (в настройках RHVoice или системных). Протестируйте: нажмите "Прослушать пример" — должен заговорить выбранный голос RHVoice. Важно: Если вы используете TalkBack (экранный ридер), не делайте RHVoice основным системным TTS, чтобы избежать конфликтов. В @Voice можно выбрать RHVoice отдельно (см. ниже). 3. Настройка в @Voice Aloud Reader Откройте @Voice Aloud Reader. Нажмите на кнопку меню (три точки или стрелка вверх внизу экрана) → Изменить голос или язык (или "Change voice or language"). В списке движков выберите RHVoice. Выберите русский язык и конкретный голос (Anna, Aleksandr и т.д.). Прослушайте образец — если всё ок, сохраните. Дополнительно: настройте скорость речи, высоту тона (pitch), громкость прямо в этом меню. @Voice автоматически распознаёт язык текста и переключается на подходящий голос, если он доступен. 4. Использование Чтение текста из других приложений: В браузере, новостях, Telegram и т.д. выделите текст или нажмите Поделиться → выберите @Voice Aloud Reader. Текст загрузится, и начнётся чтение вслух голосом RHVoice. Открытие файлов: В @Voice нажмите меню → Открыть файл → выберите TXT, PDF, EPUB, DOC и т.д. Или поделитесь файлом из файлового менеджера. Управление воспроизведением: Кнопки внизу: Play/Pause, предыдущее/следующее предложение. Таймер сна, списки чтения, запись в аудио — всё в меню. Работает в фоне, с наушниками/Bluetooth. Полезные советы: Если голос звучит неидеально на некоторых словах — RHVoice поддерживает ударения (пишите + перед гласной, например: мóре). Для многоголосия (диалоги в книгах) в Premium-версии можно использовать аннотации для смены голосов. RHVoice полностью оффлайн после скачивания голосов — идеально для чтения без интернета. Если возникнут проблемы (например, голос не выбирается), перезапустите приложения или проверьте обновления. Эта связка работает стабильно на Android 8+.
  • Обновление Debian 12 до Debian 13

    Debian и Ubuntu
    1
    0 Голоса
    1 Сообщения
    10 Просмотры
    A
    Инструкция по обновлению Debian 12 до Debian 13 (с Bookworm на Trixie) ВНИМАНИЕ ПЕРЕД НАЧАЛОМ: Создайте полную резервную копию всех важных данных и конфигураций. Обновление до новой стабильной версии — это серьезная операция, которая может привести к неожиданным проблемам. Убедитесь, что обновление до Debian 13 официально объявлено. На момент написания этой инструкции Trixie является тестируемой версией. Не используйте это руководство для рабочих систем, пока не выйдет стабильный релиз Debian 13. Рекомендуется выполнять обновление напрямую с консоли сервера или через сеанс screen/tmux, чтобы избежать разрыва соединения при сбоях в сети. Шаги для обновления: 1. Подготовка текущей системы Debian 12 Перед переходом на новые репозитории убедитесь, что система полностью актуальна. sudo apt update && sudo apt upgrade -y sudo apt full-upgrade -y sudo apt autoremove --purge 2. Изменение файла sources.list на репозитории Debian 13 Замените все упоминания bookworm на trixie. Откройте файл для редактирования: sudo nano /etc/apt/sources.list За основу можно взять следующий шаблон (замените всё его содержимое указанным ниже текстом): #deb cdrom:[Debian GNU/Linux 13.0.0 _Trixie_ - Official amd64 NETINST 202507XX-XX:XX]/ trixie main non-free-firmware deb http://deb.debian.org/debian/ trixie main non-free-firmware deb-src http://deb.debian.org/debian/ trixie main non-free-firmware deb http://security.debian.org/debian-security trixie-security main non-free-firmware deb-src http://security.debian.org/debian-security trixie-security main non-free-firmware # trixie-updates, to get updates before a point release is made; deb http://deb.debian.org/debian/ trixie-updates main non-free-firmware deb-src http://deb.debian.org/debian/ trixie-updates main non-free-firmware # Зеркало для non-free и contrib (если используете) # deb http://deb.debian.org/debian/ trixie main contrib non-free non-free-firmware Примечание: Имена компонентов (main, contrib, non-free, non-free-firmware) и зеркала могут быть скорректированы под ваши нужды. 3. Обновление системы до Debian 13 Теперь можно начать процесс дистрибутивного обновления. # Обновить списки пакетов из новых репозиториев sudo apt update # Выполнить минимальное обновление без установки новых пакетов (рекомендуемый первый шаг) sudo apt upgrade --without-new-pkgs -y # Выполнить полное обновление системы с разрешением зависимостей, включая удаление устаревших пакетов sudo apt full-upgrade -y Во время full-upgrade будут заданы вопросы о конфигурационных файлах (например, sshd_config, postfix/main.cf и др.). Внимательно читайте каждый вопрос. Если вы не вносили специфических изменений в файл, можно выбрать вариант «установить версию от пакета». Если же вы меняли файл и хотите сохранить свои правки, выберите «оставить текущую версию, установленную на данный момент» (но будьте готовы к возможной несовместимости). 4. Завершение обновления и очистка # Удалить пакеты, которые больше не нужны как зависимости (очистка) sudo apt autoremove --purge # Перезагрузить систему для применения всех изменений, особенно нового ядра sudo reboot 5. Проверка успешности обновления После перезагрузки войдите в систему и проверьте версию. cat /etc/debian_version # или lsb_release -a Вы должны увидеть: Distributor ID: Debian Description: Debian GNU/Linux 13 (trixie) Release: 13 Codename: trixie Для систем с графическим окружением GNOME (особенность) Как и в предыдущих обновлениях, дисплейный менеджер GDM может сбросить настройки сессии. Если вам необходимо использовать Xorg вместо Wayland (например, для совместимости с некоторыми средствами удаленного доступа вроде AnyDesk): Отредактируйте конфигурационный файл GDM:sudo nano /etc/gdm3/daemon.conf Найдите строку #WaylandEnable=false и раскомментируйте её (уберите символ # в начале). Сохраните файл и перезапустите GDM:sudo systemctl restart gdm3 Или, если изменения не применились, перезагрузите компьютер:sudo reboot Возможные проблемы и рекомендации Сломанные зависимости: Если процесс обновления прервался из-за конфликтов, попробуйте команду sudo apt --fix-broken install. Оставшиеся пакеты от Bookworm: После успешного обновления проверьте apt list --installed | grep bookworm. Такие пакеты лучше переустановить или удалить. Сторонние репозитории: Закомментируйте или удалите из /etc/apt/sources.list и файлов в /etc/apt/sources.list.d/ все сторонние репозитории (например, Docker, PostgreSQL и т.д.), не поддерживающие Trixie, чтобы избежать проблем с зависимостями. Добавьте их обратно только после подтверждения поддержки новой версии. Прочтите вывод: Внимательно читайте информацию, которую выводит apt во время обновления. Там могут быть важные предупреждения или инструкции.
  • Подключение телефона с Android к ПК с Debian 12

    Debian и Ubuntu
    1
    0 Голоса
    1 Сообщения
    4 Просмотры
    A
    Для того чтобы Debian 12 «увидел» любой современный Android-смартфон, необходимо установить поддержку протокола MTP (Media Transfer Protocol). В современных графических оболочках (GNOME, KDE, XFCE) большая часть компонентов уже встроена, но иногда не хватает конкретных драйверов или утилит для корректного монтирования. 1. Установка необходимых пакетов Откройте терминал и выполните следующую команду под пользователем root или через sudo: sudo apt update sudo apt install jmtpfs mtp-tools gvfs-backends gvfs-backends: Самый важный пакет для пользователей GNOME/XFCE/Cinnamon. Он позволяет файловому менеджеру автоматически распознавать MTP-устройства. kio-extras: (Установите вместо gvfs, если вы используете KDE Plasma). jmtpfs / mtp-tools: Полезны для ручного монтирования, если автоматика не сработает. 2. Настройка на самом телефоне Это критический шаг, без которого компьютер увидит устройство, но папка будет пустой. Подключите телефон к ПК качественным USB-кабелем. Разблокируйте экран телефона. Опустите шторку уведомлений. Найдите уведомление «Зарядка через USB» (или «Настройки USB»). Нажмите на него и выберите режим «Передача файлов» (MTP). 3. Как открыть файлы После выбора режима «Передача файлов» на телефоне: Откройте ваш стандартный файловый менеджер (Nautilus, Dolphin, Thunar). В боковой панели слева (в разделе «Устройства» или «Компьютер») появится пункт Mi A3. Кликните на него — вы увидите «Внутренний общий накопитель». Что делать, если телефон всё равно не виден? Попробуйте другой порт/кабель: Android-устройства очень чувствительны к качеству кабеля. Используйте оригинальный кабель. Разблокировка экрана: Debian не сможет получить доступ к файлам, пока экран телефона заблокирован графическим ключом или паролем. Конфликт с ADB: Если у вас включена «Отладка по USB» в настройках разработчика, иногда это мешает режиму MTP. Попробуйте временно её выключить.
  • Wiki.js - установка и настройка на Debian

    Wiki.js
    2
    0 Голоса
    2 Сообщения
    16 Просмотры
    A
    ВНИМАНИЕ ! Инструкция не проверена Подробная инструкция по установке и настройке Wiki.js на Debian 12/13 с использованием Docker Эта инструкция основана на анализе распространенных проблем и рекомендаций из обсуждений по установке Wiki.js в Docker. Мы сосредоточимся на стабильной версии Wiki.js 2.x (актуальной на декабрь 2025 года), использовании PostgreSQL как базы данных, настройке прав доступа для избежания ошибок типа EACCES, интеграции с Nginx для HTTPS и поддержке русского языка. Установка будет проводиться в защищенной среде с учетом лучших практик 2025 года. Wiki.js — это современная вики-система на Node.js, идеальная для многоуровневой документации, включая поддержку кириллицы в путях и навигации. Мы используем Docker для изоляции и простоты управления. Важные предупреждения: Убедитесь, что у вас есть домен (например, wiki.example.com), настроенный на IP вашего сервера. Все команды выполняйте от пользователя с sudo-доступом. Если вы на Debian 13 (Trixie), инструкции аналогичны Debian 12 (Bookworm), но проверьте обновления пакетов. Перед началом обновите систему: sudo apt update && sudo apt upgrade -y. 1. Предварительные требования Сервер: Debian 12 или 13 с минимум 2 ГБ RAM и 20 ГБ SSD (рекомендуется VPS или dedicated server). Пакеты: Установите необходимые зависимости:sudo apt install -y curl git ca-certificates gnupg lsb-release Firewall: Разрешите порты 80 (HTTP), 443 (HTTPS) и 3000 (временно для Wiki.js):sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 3000/tcp # Удалите после настройки Nginx sudo ufw reload Домен и DNS: Настройте A-запись для вашего домена на IP сервера. 2. Установка Docker и Docker Compose Docker — ключевой компонент для запуска Wiki.js в контейнере. Установите официальную версию: Добавьте репозиторий Docker: sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update Установите Docker: sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin Запустите и добавьте в автозагрузку: sudo systemctl start docker sudo systemctl enable docker Добавьте вашего пользователя в группу docker (чтобы избежать sudo для docker-команд): sudo usermod -aG docker $USER newgrp docker # Или перелогиньтесь Проверьте: docker --version и docker compose version (должно быть v2+). 3. Подготовка директорий и конфигурации Создайте директорию для Wiki.js (рекомендуем /opt/wikijs для системности): sudo mkdir -p /opt/wikijs/{data,backup,postgres,config} cd /opt/wikijs /opt/wikijs/data: Для данных Wiki.js (страницы, uploads, content). /opt/wikijs/backup: Для бэкапов. /opt/wikijs/postgres: Для данных PostgreSQL. /opt/wikijs/config: Для config.yml (опционально, для ручной правки). Настройте права (чтобы избежать EACCES ошибок). Wiki.js в контейнере работает от пользователя с UID 1000 (node), так что: sudo chown -R 1000:1000 /opt/wikijs/data /opt/wikijs/backup /opt/wikijs/config sudo chmod -R 775 /opt/wikijs/data /opt/wikijs/backup /opt/wikijs/config 4. Создание docker-compose.yml и .env Создайте файл docker-compose.yml в /opt/wikijs: version: "3.9" services: postgres: image: postgres:17-alpine container_name: wikijs-postgres restart: unless-stopped environment: POSTGRES_DB: wikijs POSTGRES_USER: wikijs POSTGRES_PASSWORD: ${WIKIJS_DB_PASS} volumes: - /opt/wikijs/postgres:/var/lib/postgresql/data logging: driver: "none" wiki: image: ghcr.io/requarks/wiki:2 container_name: wikijs user: "1000:1000" # Фиксируем UID/GID для прав restart: unless-stopped depends_on: - postgres environment: DB_TYPE: postgres DB_HOST: postgres DB_PORT: 5432 DB_USER: wikijs DB_PASS: ${WIKIJS_DB_PASS} DB_NAME: wikijs HOME: /wiki/data # Альтернатива для избежания EACCES на /home/node ports: - "3000:3000" # Временно для установки volumes: - /opt/wikijs/data:/wiki/data - /opt/wikijs/backup:/wiki/backup - /opt/wikijs/config:/wiki/config # Опционально Создайте файл .env для безопасного хранения пароля (замените на сильный пароль): WIKIJS_DB_PASS=Sup3rS3cr3tPass2025! Это предотвращает хранение пароля в compose-файле. 5. Запуск Wiki.js и начальная настройка Запустите контейнеры: cd /opt/wikijs docker compose up -d Проверьте логи (убедитесь, что нет ошибок): docker compose logs wiki Ищите "Database Connection Successful" и отсутствие EACCES. Откройте в браузере: http://ваш-IP:3000 Создайте аккаунт админа (email и пароль). Укажите Site URL: https://wiki.example.com (обязательно с https!). Отключите телеметрию. Нажмите Install. Если возникнут ошибки EACCES при сохранении страниц: Проверьте права на хосте: ls -ld /opt/wikijs/data (должно быть drwxrwxr-x 1000 1000). Если проблема в /home/node, добавьте в environment: HOME: /wiki/data (как в примере выше). Перезапустите: docker compose down && docker compose up -d. 6. Настройка Nginx для reverse proxy и HTTPS Nginx обеспечит доступ по HTTPS и скроет порт 3000. Установите Nginx и Certbot: sudo apt install -y nginx certbot python3-certbot-nginx Создайте конфиг для вашего домена (/etc/nginx/sites-available/wiki.example.com): server { listen 80; server_name wiki.example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name wiki.example.com; ssl_certificate /etc/letsencrypt/live/wiki.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/wiki.example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_cache off; proxy_buffering off; proxy_read_timeout 100s; } client_max_body_size 100M; # Для загрузки больших файлов } Активируйте конфиг: sudo ln -s /etc/nginx/sites-available/wiki.example.com /etc/nginx/sites-enabled/ sudo nginx -t # Проверьте синтаксис sudo systemctl restart nginx Получите сертификат Let’s Encrypt: sudo certbot --nginx -d wiki.example.com Укажите email, согласитесь с условиями. Certbot обновит конфиг автоматически. Уберите порт 3000 из docker-compose.yml (закомментируйте или удалите строку ports: - "3000:3000"). docker compose down && docker compose up -d Теперь Wiki.js доступен по https://wiki.example.com. 7. Установка русского языка и настройка навигации Зайдите под админом: Administration > Localization > Language Packs. Нажмите +, найдите "Russian", скачайте. Выберите Russian как основной язык, нажмите Apply. Перезагрузите страницу — интерфейс на русском. Для многоуровневой документации: Создавайте страницы с путями вроде /руководство/подраздел/детали (кириллица поддерживается). В Administration > Navigation выберите Custom Navigation для вложенных меню (группы для уровней >2). Если ограничение на 2 уровня: Убедитесь в UTF-8 в базе (в контейнере postgres: docker exec -it wikijs-postgres psql -U wikijs -c "SHOW server_encoding;" — должно быть UTF8). 8. Настройка бэкапов В интерфейсе: Administration > Backup > Storage > Local File System. Укажите путь: /wiki/backup. Включите ежедневные бэкапы. Для автоматического бэкапа базы (cron-скрипт): Создайте скрипт /opt/wikijs/backup.sh:#!/bin/bash docker exec wikijs-postgres pg_dump -U wikijs wikijs > /opt/wikijs/backup/wikijs-$(date +%Y%m%d).sql docker cp wikijs:/wiki/backup/* /opt/wikijs/backup/ # Бэкапы из интерфейса find /opt/wikijs/backup -type f -mtime +7 -delete # Удалять старше 7 дней Сделайте исполняемым: chmod +x /opt/wikijs/backup.sh. Добавьте в cron (ежедневно в 02:00): crontab -e0 2 * * * /opt/wikijs/backup.sh 9. Обновление и обслуживание Обновите: cd /opt/wikijs && docker compose pull && docker compose up -d --force-recreate. Логи: docker compose logs -f wiki. Очистка: docker system prune -f (удаляет старые образы). 10. Устранение неисправностей EACCES permission denied: Проверьте права на volumes (chown 1000:1000, chmod 775). Если в логе mkdir '/home/user' — используйте HOME: /wiki/data в environment. JSON.parse error: Очистите кэш: docker exec -it wikijs bash -c "rm -rf /wiki/data/cache/*". Конфликты сохранения: Вторично от EACCES — исправьте права и перезапустите. Бэкапы не сохраняются: Убедитесь в пути /wiki/backup и правах на /opt/wikijs/backup. SELinux/AppArmor (если включено): sudo setenforce 0 (временно), затем настройте правила. Нет данных после перезапуска: Всегда копируйте перед down: docker cp wikijs:/wiki/data /opt/wikijs/data. Эта настройка обеспечит стабильную работу Wiki.js для многоуровневой документации на русском языке.
  • Самоподписанный сертификат для Nginx

    Nginx
    1
    0 Голоса
    1 Сообщения
    9 Просмотры
    A
    Подробная инструкция по добавлению универсального самоподписанного сертификата в Nginx Самоподписанный (self-signed) сертификат — это простой и эффективный способ обеспечить HTTPS-соединение для вашего сервера Nginx, особенно в случаях, когда вы работаете без доменного имени (например, по IP-адресу), для внутренних сетей, тестирования или личного использования. Он не требует внешних удостоверяющих центров (CA), но браузеры покажут предупреждение о небезопасности, поскольку сертификат не проверен доверенным CA. Шифрование при этом работает полноценно. Эта инструкция основана на стандартных практиках и подходит для большинства дистрибутивов Linux (например, Ubuntu/Debian, CentOS). Предполагается, что Nginx уже установлен и работает. Все команды выполняются с правами root (используйте sudo). Предварительные требования Nginx установлен и настроен (проверьте: nginx -v). Доступ к серверу по SSH или консоли. Если у вас несколько серверов или контейнеров (например, с Webmin), сертификат Nginx будет независим от их собственных сертификатов. Nginx будет обрабатывать SSL на внешнем уровне, а внутренний трафик может идти по HTTP. Для доступа по IP: укажите внешний IP в поле Common Name (CN) при генерации, чтобы минимизировать предупреждения в браузере. Если у вас домен, рассмотрите бесплатный сертификат от Let's Encrypt вместо self-signed (но это выходит за рамки инструкции). Шаг 1: Создание директории для сертификатов Создайте защищенную директорию для хранения сертификата и ключа. Это стандартное место для Nginx. sudo mkdir -p /etc/nginx/ssl sudo chmod 700 /etc/nginx/ssl mkdir -p: создает директорию, если она не существует. chmod 700: обеспечивает доступ только владельцу (root), для безопасности. Шаг 2: Генерация самоподписанного сертификата Используйте утилиту openssl (обычно предустановлена; проверьте: openssl version). Это создаст ключ и сертификат в одном шаге. sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/selfsigned.key \ -out /etc/nginx/ssl/selfsigned.crt Параметры объяснения: req -x509: создает самоподписанный сертификат. -nodes: не шифрует ключ паролем (упрощает использование в Nginx). -days 3650: срок действия 10 лет (можно изменить, например, на 365 для 1 года). -newkey rsa:2048: генерирует новый RSA-ключ длиной 2048 бит (рекомендуемая длина для безопасности). -keyout: путь к приватному ключу. -out: путь к сертификату. Во время выполнения вас спросят интерактивные вопросы (Subject fields): Country Name (2 letter code): Например, RU (можно пропустить, нажав Enter). State or Province Name: Например, Moscow. Locality Name: Например, Moscow. Organization Name: Например, My Company. Organizational Unit Name: Например, IT. Common Name (CN): Важно! Укажите ваш внешний IP-адрес (например, 203.0.113.50) или домен, если есть. Это должно совпадать с адресом, по которому доступен сервер, чтобы браузер не выдавал дополнительное предупреждение о несоответствии. Email Address: Опционально. Если нужно сгенерировать сертификат без вопросов (для автоматизации), добавьте -subj "/CN=your.ip.address". Шаг 3: Установка прав доступа Приватный ключ должен быть защищен, чтобы избежать утечек. sudo chmod 600 /etc/nginx/ssl/selfsigned.key chmod 600: только владелец (root) может читать/писать. Шаг 4: Настройка конфигурации Nginx Добавьте ссылки на сертификат в конфигурационный файл Nginx. Это можно сделать глобально (для всех серверов) или в конкретном server-блоке. Откройте или создайте конфиг-файл (например, /etc/nginx/conf.d/ssl.conf для глобальной настройки или в /etc/nginx/sites-available/default для конкретного сайта). Добавьте следующие строки вне server-блоков (для глобального использования) или внутри server-блока: ssl_certificate /etc/nginx/ssl/selfsigned.crt; ssl_certificate_key /etc/nginx/ssl/selfsigned.key; Если сертификат для нескольких портов или серверов: используйте один сертификат для всех (универсальный подход). В server-блоке добавьте listen с SSL: server { listen 443 ssl; # Или ваш порт, например 8443 ssl; server_name your.ip.address; # Или _ для wildcard # Другие настройки, например location / { ... } ssl_certificate /etc/nginx/ssl/selfsigned.crt; ssl_certificate_key /etc/nginx/ssl/selfsigned.key; } Если вы проксируете трафик (например, на контейнеры с Webmin): используйте proxy_pass http://internal-ip:port; внутри location. SSL терминируется на Nginx, внутренний трафик — HTTP (безопасно в локальной сети). Важно: Создайте сертификат до добавления этих строк, иначе Nginx выдаст ошибку при проверке. Шаг 5: Проверка и перезагрузка Nginx Проверьте конфигурацию на ошибки: sudo nginx -t Если ошибка "cannot load certificate": проверьте пути к файлам или создайте сертификат заново. Перезагрузите Nginx: sudo systemctl reload nginx Или sudo nginx -s reload (если не используете systemd). Шаг 6: Тестирование в браузере Откройте https://your.ip.address:port (например, https://203.0.113.50:8443). Браузер покажет предупреждение: "Соединение не защищено" (NET::ERR_CERT_AUTHORITY_INVALID). Нажмите "Дополнительно" > "Перейти на сайт" (или аналог в вашем браузере). Для постоянного доступа: добавьте исключение в настройках браузера (в Chrome: Settings > Privacy and security > Manage certificates > Import ваш .crt файл). Если доступ по домену: предупреждение будет слабее, если CN совпадает. Проверьте SSL: используйте curl -v https://your.ip.address:port или онлайн-инструменты вроде SSL Labs (но для self-signed тест покажет A-рейтинг с предупреждением о доверии). Возможные проблемы и решения Конфликт с другими сертификатами: Не возникает, если они в разных сервисах (например, Webmin использует свой miniserv.pem). Nginx обрабатывает свой сертификат независимо. Предупреждение в браузере не уходит: Нормально для self-signed. Для полного устранения — получите доверенный сертификат (Let's Encrypt для доменов; для IP — ограниченная поддержка с коротким сроком). Nginx не стартует: Проверьте логи (sudo journalctl -u nginx или /var/log/nginx/error.log). Ошибки часто в путях или правах. Доступ по нескольким портам: Один сертификат работает для всех listen с ssl. Обновление сертификата: Когда истечет срок, повторите Шаг 2–5. Безопасность: Self-signed подходит для внутренних/личных сценариев. Для публичного доступа используйте Let's Encrypt. Эта инструкция делает настройку универсальной: один сертификат для всего Nginx.
  • Снятие ограничений для Docker в LXC на Debian 13

    LXC
    3
    0 Голоса
    3 Сообщения
    6 Просмотры
    A
    Снятие ограничений для Docker в LXC на Ubuntu 24.04 # Template used to create this container: /usr/share/lxc/templates/lxc-download # Parameters passed to the template: --dist debian --release bookworm --arch amd64 # For additional config options, please look at lxc.container.conf(5) # Включаем поддержку вложенных контейнеров (nesting) lxc.include = /usr/share/lxc/config/nesting.conf # Отключаем ограничения AppArmor для полной свободы действий lxc.apparmor.profile = unconfined # Разрешаем все устройства (для работы Docker) lxc.cgroup.devices.allow = a # Убираем ограничения на capabilities (полные права для контейнера) lxc.cap.drop = # Разрешаем монтирование системных директорий с правами чтения-записи lxc.mount.auto = proc:rw sys:rw # Distribution configuration lxc.include = /usr/share/lxc/config/common.conf lxc.arch = linux64 # Container specific configuration lxc.rootfs.path = dir:/var/lib/lxc/container_native/rootfs lxc.uts.name = container_native # Network configuration lxc.net.0.type = veth lxc.net.0.link = lxcbr0 lxc.net.0.flags = up lxc.net.0.hwaddr = 00:16:3e:7f:79:c0 lxc.net.0.ipv4.address = 10.0.3.170/24 lxc.net.0.ipv4.gateway = 10.0.3.1 Этот конфиг LXC работает на хосте Ubuntu 24.04 и позволяет нормально запускать Docker с Jitsi внутри контейнера Конфиг создаёт привилегированный LXC-контейнер (без lxc.idmap, от root) с Debian 12 внутри. Он включает ключевые настройки для nested контейнеризации (Docker внутри LXC): lxc.include = /usr/share/lxc/config/nesting.conf — включает nesting. lxc.apparmor.profile = unconfined — полностью отключает AppArmor. lxc.cgroup.devices.allow = a — разрешает все устройства. lxc.cap.drop = — сохраняет все capabilities. lxc.mount.auto = proc:rw sys:rw — монтирует /proc и /sys с правами записи. На Ubuntu 24.04 этот конфиг работает стабильно, и Docker (включая сложный стек Jitsi с web, prosody, jicofo, jvb) запускается без ошибок. На Debian 13 (или старых версиях) часто возникают проблемы с overlay2, cgroups, сетью или capabilities. Вот подробное объяснение причин. 1. Более свежее ядро Linux Ubuntu 24.04 использует Linux kernel 6.8 (с возможными обновлениями до новее через HWE). Это обеспечивает отличную поддержку: cgroups v2 (единой иерархии, которую Docker предпочитает по умолчанию). overlayFS (storage driver overlay2 в Docker — самый эффективный). Вложенных namespaces и устройств для nested контейнеров. Docker и Jitsi (особенно JVB с UDP-портами и сетевыми привилегиями) требуют современных фич ядра. На старом ядре (например, 6.1 в базовом Debian) могут быть баги или отсутствовать оптимизации → ошибки при создании контейнеров. 2. Более лояльный и современный AppArmor Ubuntu активно развивает AppArmor (Canonical — основной контрибьютор). В Ubuntu 24.04 профили для nested контейнеров менее строгие: даже без unconfined многие системные вызовы проходят. nesting.conf в Ubuntu включает улучшения для вложенных контейнеров (лучшая поддержка overlay, cgroups, capabilities). В Debian AppArmor строже и консервативнее → даже с nesting часто блокирует вызовы, нужные Docker (mount namespace, cap_sys_admin для JVB, сетевые операции). Поэтому требуется явное unconfined. На Ubuntu ваш конфиг с unconfined работает, но часто достаточно и без него — система "прощает" больше. 3. Автоматические улучшения для nested контейнеров в LXC Версия LXC в Ubuntu 24.04 — новее (5.x–6.x с патчами от Canonical). nesting.conf в Ubuntu авто-разрешает многие вещи: Полный доступ к cgroups для Docker. Лучшую работу с устройствами и capabilities. Монтирование /proc и /sys без дополнительных настроек. В Debian nesting менее "щедрый" → нужны дополнительные строки (например, ручное монтирование cgroup2). Ubuntu ориентирована на облака/контейнеры (Canonical продвигает LXD/LXC), поэтому баги с Docker внутри LXC фиксятся быстрее. 4. Привилегированный режим "из коробки" Контейнер привилегированный (нет idmap) → root внутри имеет почти полные права на хостовом ядре. В комбинации с свежим ядром и AppArmor это даёт Docker всё необходимое: Управление cgroups. Создание overlayFS. NET_ADMIN/SYS_ADMIN для сетей Jitsi. На Debian даже в привилегированном режиме строгий AppArmor и старое ядро могут ограничивать. 5. Специфика Jitsi в Docker Jitsi требует: UDP-порты (10000/10001) с NET_ADMIN. Много устройств (timerfd, RTC). Полные capabilities для JVB (видеомост). На Ubuntu это проходит гладко благодаря ядру и nesting. На Debian часто падает JVB или web с ошибками "shim task", "mount namespace" или "overlay not supported". Итог: Ubuntu 24.04 "заточена" под современную контейнеризацию — свежее ядро, лояльный AppArmor и оптимизированный LXC делают ваш конфиг достаточным. Debian более консервативен и стабилен, но требует дополнительных настроек (как в исправленном конфиге из обсуждения: без privileged-ключа, с ручным cgroup2). Поэтому на Ubuntu всё работает "из коробки", а Jitsi запускается без проблем. Если переходите на Debian-хост — используйте полный исправленный конфиг с монтированием cgroup2.
  • LXD - полное безопасное удаление

    LXC
    4
    0 Голоса
    4 Сообщения
    4 Просмотры
    A
    Удаление LXD Повлияет ли удаление LXD на ранее установленный LXC? Нет, это не удалит LXC! LXD и LXC — это разные пакеты. Различия: LXC (Linux Containers) — низкоуровневые инструменты контейнеризации (lxc-create, lxc-start, etc.) LXD — система управления контейнерами поверх LXC (демон, REST API, дополнительные функции) Проверьте, что удаляется и что остается: Что удалит apt remove --purge lxd lxd-client: # Удалит только пакеты LXD: lxd # демон LXD lxd-client # клиентская часть LXD Что останется: # Основные пакеты LXC останутся: lxc # основные инструменты LXC lxc-utils # утилиты LXC lxc-templates # шаблоны контейнеров liblxc1 # библиотеки LXC Проверьте установленные пакеты LXC: # Посмотреть установленные пакеты LXC/LXD dpkg -l | grep -E "lxc|lxd" # Пример вывода (LXC останутся): # ii lxc 5.0.3-0ubuntu2 amd64 # ii lxc-utils 5.0.3-0ubuntu2 amd64 # rc lxd 1:0.8 # "rc" значит удален # rc lxd-client 1:0.8 # "rc" значит удален Incus будет работать с существующим LXC: Incus использует те же низкоуровневые инструменты LXC, так что после удаления LXD вы сможете установить Incus, и он будет работать с уже установленным LXC. Если хотите удалить ВСЁ (и LXC тоже): # Удалить LXD sudo apt remove --purge lxd lxd-client # Удалить LXC (только если уверены!) sudo apt remove --purge lxc lxc-utils lxc-templates liblxc1 lxcfs # Для Incus LXC не нужен, он использует свою реализацию Рекомендация: Оставьте LXC установленным. Incus будет работать нормально, и у вас останутся низкоуровневые инструменты для управления контейнерами напрямую, если понадобится.
  • Cockpit - смена порта

    Cockpit
    1
    0 Голоса
    1 Сообщения
    9 Просмотры
    A
    В Debian 12 (и других системах с systemd) порт Cockpit нельзя изменить просто через файл cockpit.conf. Поскольку Cockpit использует «активацию по сокету», порт жестко прописан в системном юните cockpit.socket. Чтобы изменить его правильно и чтобы настройки не слетели при обновлении системы, нужно использовать drop-in файл (переопределение). Инструкция по изменению порта Допустим, мы хотим изменить порт с 9090 на 7777. 1. Создание переопределения Выполните команду, которая создаст нужную директорию и откроет редактор для создания конфига: sudo systemctl edit cockpit.socket 2. Добавление конфигурации В открывшемся пустом файле вставьте следующие строки: [Socket] ListenStream= ListenStream=7777 Важно: Первая пустая строка ListenStream= обязательна. Она «обнуляет» стандартный порт 9090. Если её не добавить, Cockpit будет слушать оба порта одновременно. 3. Применение изменений Сохраните файл (Ctrl+O, Enter) и выйди (Ctrl+X). После этого примените настройки: sudo systemctl daemon-reload sudo systemctl restart cockpit.socket 4. Проверка Проверьте, что Cockpit теперь слушает новый порт: sudo ss -tulpn | grep cockpit Вы должны увидеть что-то вроде: tcp LISTEN 0 128 *:7777. 5. Обновите Nginx (если настраивали прокси) Если вы ранее настраивали Nginx как Reverse Proxy, не забудьте изменить порт в блоке location: location /server1/ { proxy_pass https://127.0.0.1:7777/; # Новый порт здесь ... } Что делать, если не работает? Firewall: Если у вас включен ufw, разрешите новый порт: sudo ufw allow 7777/tcp. SELinux: В чистом Debian 12 SELinux обычно выключен, но если вы его устанавливали отдельно, нужно разрешить порту работу с Cockpit: sudo semanage port -a -t websm_port_t -p tcp 7777.
  • Bash - работа с пользователями и паролями

    Команды BASH
    7
    0 Голоса
    7 Сообщения
    12 Просмотры
    A
    Создание нового пользователя Для создания нового пользователя и предоставления ему прав администратора (sudo) в Debian 12, выполните следующие шаги. Замените newuser на желаемое имя пользователя. 1. Создание пользователя и установка пароля Самый простой и интерактивный способ — использовать команду adduser. Она сразу создаст домашнюю директорию и предложит ввести пароль: sudo adduser newuser Система попросит вас: Ввести пароль (символы при вводе не отображаются). Повторить пароль. Ввести данные пользователя (ФИО, номер комнаты и т.д.) — это можно пропустить, просто нажимая Enter. 2. Добавление пользователя в группу sudo В Debian за права администратора отвечает группа sudo. Чтобы добавить в неё пользователя, выполните: sudo usermod -aG sudo newuser -a (append) — добавить. -G (groups) — в группу. 3. Проверка прав Чтобы убедиться, что всё прошло успешно, переключитесь на нового пользователя: su - newuser Затем попробуйте выполнить любую команду с sudo, например, обновить список пакетов: sudo apt update Если система приняла пароль и начала обновление — пользователь успешно настроен. Полезные советы Задача Команда Удалить пользователя sudo deluser newuser Удалить пользователя вместе с файлами sudo deluser --remove-home newuser Сменить пароль существующему пользователю sudo passwd newuser Важно: Если вы только что установили Debian и команда sudo не найдена, это означает, что пакет не установлен. В таком случае сначала зайдите под root (su -), установите его (apt install sudo), добавьте пользователя в группу и перезагрузите сессию.
  • Bash - работа с мультимедиа

    Команды BASH
    5
    0 Голоса
    5 Сообщения
    6 Просмотры
    A
    Чистка звука с микрофона Вот актуальный на конец 2025 года набор способов полностью убрать шум, гул, эхо и сделать голос чистым — от простого до «как в студии». Работает в Ubuntu, Mint, Debian, Fedora, Pop!_OS и т.д. Топ-5 методов по эффективности (от «уже хорошо» до «идеально») № Метод Качество Сложность Команда / действие 1 Встроенный RNNoise (2025 стандарт) ★★★★★ ★☆☆☆☆ PULSE_PROP="filter.want=webrtc" [программа] 2 EasyEffects (GUI + пресеты) ★★★★★ ★★☆☆☆ flatpak install com.github.wwmm.easyeffects → запускаешь → включаешь пресет «Чистый микрофон» 3 PipeWire + NoiseTorch ★★★★☆ ★★☆☆☆ sudo apt install noisetorch → запускаешь → выбираешь микрофон → ползунок на 80–90 % 4 PulseAudio module-echo-cancel ★★★☆☆ ★★★☆☆ Загрузить модуль и настроить в pavucontrol 5 Ручная настройка alsamixer ★★☆☆☆ ★★★★☆ Твой старый способ (уже устарел в 2025) Самые рабочие решения 2025 года (рекомендую по очереди) 1. Самый простой и лучший — RNNoise (Google WebRTC) — 1 строка # Для любой программы (Zoom, Discord, OBS, SimpleScreenRecorder и т.д.) PULSE_PROP="filter.want=webrtc" discord PULSE_PROP="filter.want=webrtc" zoom PULSE_PROP="filter.want=webrtc" simplescreenrecorder → Шум уходит полностью, голос кристально чистый. → Никаких установок не нужно — работает из коробки в Ubuntu 22.04+, Debian 12+, Fedora 38+. 2. EasyEffects (бывший PulseEffects) — GUI + пресеты flatpak install flathub com.github.wwmm.easyeffects flatpak run com.github.wwmm.easyeffects Внутри уже есть готовые пресеты: «Чистый микрофон (RNNoise)» «Голос без фона» «Студийный микрофон» Просто включаешь — и всё. 3. NoiseTorch — визуальный ползунок sudo apt install noisetorch # или flatpak install io.github.lucentblock.NoiseTorch noisetorch Выбираешь микрофон → двигаешь ползунок → готово. 4. Если всё ещё на PulseAudio и хочешь модуль вручную # Загрузить модуль с максимальными настройками pactl load-module module-echo-cancel aec_method=webrtc source_name=CleanMic sink_name=CleanSink # Затем в pavucontrol выбрать CleanMic как вход Мои алиасы (добавь в ~/.bashrc) alias discord="PULSE_PROP='filter.want=webrtc' discord" alias obs="PULSE_PROP='filter.want=webrtc' obs" alias ssr="PULSE_PROP='filter.want=webrtc' simplescreenrecorder" alias zoom="PULSE_PROP='filter.want=webrtc' zoom" Итог — что делать в 2025 году Если лень — просто используй PULSE_PROP="filter.want=webrtc" программа Если хочешь красиво и навсегда — ставишь EasyEffects из Flatpak Забудь про alsamixer и задние гнёзда — это прошлый век
  • Bash - общее

    Команды BASH
    2
    0 Голоса
    2 Сообщения
    4 Просмотры
    A
    Список разных команд терминала Вот актуализированная и проверенная на 2025 год версия твоего списка из 470+ команд. Я оставил только те, которые реально существуют, работают и используются в современных дистрибутивах (Debian 12/13, Ubuntu 24.04, Mint 22, Fedora 41, Arch, openSUSE и т.д.). Убрал устаревшие, редко используемые, давно удалённые или чисто исторические (например, bye, lo, on, fun, red, todos, unix2dos, yppasswd и т.д.). Список теперь — чистый, рабочий, максимально полезный. Сохраняй, это реально одна из лучших шпаргалок по Linux-командам в 2025 году. A a2p → awk → perl конвертер (редко нужен) ac → статистика времени подключений пользователей accton → включение/выключение учёта процессов (package: acct) acpi → состояние батареи и температуры (acpi -V) acpid → демон обработки ACPI-событий addgroup → добавить группу (низкоуровневая, лучше groupadd) adduser → добавить пользователя (интерактивно) agetty → альтернативный getty alias → создать псевдоним команды amixer → управление звуком ALSA aplay → воспроизвести WAV apropos → поиск в man-страницах (man -k) apt → основной менеджер пакетов Debian/Ubuntu apt-get → старый, но до сих пор используется aptitude → ncurses-интерфейс для apt ar → работа с архивами .a (статические библиотеки) arch → архитектура процессора (x86_64, aarch64…) arp → просмотр/управление ARP-таблицей as → ассемблер GNU aspell → проверка орфографии at → отложенный запуск команды atq → очередь at atrm → удалить задание at awk → обработка текста (gawk — GNU-версия) B basename → вывести имя файла без пути bash → основная оболочка bc → консольный калькулятор bg → перевести задачу в фон bind → привязка клавиш в readline bison → генератор парсеров (современный yacc) break → выход из цикла builtin → выполнить встроенную команду bash bzcat → cat для .bz2 bzip2 → сжатие/распаковка .bz2 bzgrep → grep по .bz2 bzless → less для .bz2 bzmore → more для .bz2 C cal → календарь cat → вывести содержимое файла cc → обычно синоним gcc cd → сменить директорию cfdisk → интерактивная разметка диска chage → управление сроком действия пароля chattr → расширенные атрибуты файлов (immutable и др.) chgrp → сменить группу файла chkconfig → только в старых CentOS, в systemd → systemctl chmod → права доступа chown → сменить владельца chpasswd → массовая смена паролей chroot → запуск в изолированном окружении chsh → сменить оболочку пользователя chvt → переключить виртуальный терминал cksum → контрольная сумма clear → очистить экран cmp → побайтовое сравнение файлов colrm → удалить столбцы column → выровнять в колонки comm → сравнить два отсортированных файла compress → старое .Z сжатие (почти не используется) cp → копировать cpio → архиватор (используется в initramfs) cron → демон планировщик crontab → редактировать задачи cron csplit → разбить файл по шаблону ctags → индексация исходников (для vim) curl → передача данных (HTTP, FTP и 20+ протоколов) cut → вырезать столбцы/поля D date → дата и время dc → калькулятор в обратной польской нотации dd → низкоуровневое копирование (образы, флешки) declare → объявить переменную в bash df → место на дисках (-h!) diff → различия между файлами dig → DNS-запросы dircolors → настройка цветов ls dmidecode → информация из BIOS (sudo!) dmesg → сообщения ядра dnf → менеджер пакетов Fedora docker → работа с контейнерами dos2unix → конвертировать CRLF → LF dpkg → низкоуровневый менеджер пакетов Debian dstat → мониторинг системы (замена vmstat+ifstat) du → размер каталогов (-h --max-depth=1) dump → резервное копирование ext2/ext3 (устарел) E echo → вывести текст ed → построчный редактор (очень старый) egrep → grep -E eject → извлечь CD/DVD env → переменные окружения ethtool → настройки сетевой карты exec → заменить текущий процесс exit → выйти из оболочки expand → табуляции → пробелы export → экспортировать переменную expr → вычисления в shell F factor → разложить число на множители false → вернуть код 1 fc → редактор истории команд fdisk → разметка диска (не для GPT!) fg → вывести задачу на передний план fgrep → grep -F (фиксированные строки) file → определить тип файла find → поиск файлов finger → информация о пользователе (редко) fmt → форматировать текст fold → перенос длинных строк for → цикл в shell free → использование памяти (-h) fsck → проверка и ремонт ФС ftp → старый FTP-клиент (лучше lftp) G g++ → компилятор C++ gawk → GNU awk gcc → компилятор C gdb → отладчик getent → получить записи из баз (/etc/passwd, LDAP и др.) getfacl → показать ACL gpasswd → управление группами grep → поиск по тексту groupadd → добавить группу groupdel → удалить группу groupmod → изменить группу groups → группы текущего пользователя gunzip → распаковать .gz gzip → сжать/распаковать .gz H halt → остановить систему (устарел) head → первые строки файла history → история команд host → DNS lookup hostname → имя хоста hostnamectl → управление именем хоста (systemd) htop → интерактивный top hwclock → аппаратные часы I id → UID/GID пользователя ifconfig → устарел → ip addr info → документация в формате info insmod → загрузить модуль ядра (низкоуровнево) install → копировать с установкой прав iostat → статистика дисков iotop → кто грузит диски ip → современная замена ifconfig/route/netstat iptables → старый брандмауэр → nftables iwconfig → настройки Wi-Fi (устарел → iw) J jobs → список фоновых задач join → объединение файлов по полю journalctl → логи systemd K kill → послать сигнал процессу killall → убить по имени L last → последние входы в систему ld → линкер ldd → зависимости библиотеки less → просмотрщик текста let → арифметика в bash ln → создать ссылку locate → быстрый поиск (updatedb) logger → писать в системный лог loginctl → управление сессиями (systemd) logname → имя пользователя при входе logout → выйти look → поиск слов в словаре losetup → loop-устройства ls → список файлов lsblk → дерево блочных устройств lscpu → информация о CPU lshw → полная информация о железе lsmod → загруженные модули ядра lsof → открытые файлы/порты lsusb → USB-устройства M make → сборка проектов man → справочник md5sum → MD5-хеш (устарел → sha256sum) mkdir → создать каталог mkfs → форматировать раздел mktemp → создать временный файл/каталог modinfo → информация о модуле ядра modprobe → загрузить/выгрузить модуль ядра mount → монтировать mv → переместить/переименовать N nano → простой редактор nc (netcat) → универсальный сетевой инструмент netstat → устарел → ss nice → запустить с приоритетом nl → пронумеровать строки nmap → сканирование сети/портов nmcli → управление NetworkManager nohup → запуск без зависания терминала O od → дамп в шестнадцатеричном виде openvt → запустить команду на новом TTY P passwd → сменить пароль paste → склеить строки из файлов patch → применить патч pgrep → найти PID по имени pico → nano (исторически) pidof → PID процесса ping → проверка доступности хоста pkill → убить по имени pmap → карта памяти процесса poweroff → выключить систему pr → форматировать для печати printenv → вывести переменные окружения printf → форматированный вывод ps → процессы pstree → дерево процессов pwd → текущий каталог pwck → проверка /etc/passwd Q quota → управление дисковыми квотами R read → считать переменную из ввода readlink → значение симлинка reboot → перезагрузка rename → массовое переименование reset → сброс терминала return → выход из функции rev → перевернуть строки rm → удалить rmdir → удалить пустой каталог rmmod → выгрузить модуль ядра route → устарел → ip route rsync → синхронизация файлов S sar → статистика системы (sysstat) scp → копирование по SSH screen → мультиплексор терминала script → запись сессии sdiff → параллельное сравнение файлов sed → потоковый редактор seq → последовательность чисел service → старый способ управления службами set → установить опции shell/переменные setfacl → установить ACL sfdisk → разметка диска (скриптовый) sftp → FTP по SSH sh → обычно dash или bash sha256sum → SHA-256 хеш shred → безопасное удаление shutdown → выключение/перезагрузка sleep → пауза slurm → мониторинг сети (красивый!) sort → сортировка source → выполнить скрипт в текущей оболочке (.) split → разбить файл ss → современный netstat ssh → безопасный удалённый доступ stat → метаданные файла strace → трассировка системных вызовов stty → настройки терминала su → сменить пользователя sudo → выполнить от root sum → контрольная сумма (устарел) swapoff → отключить swap swapon → включить swap sync → сбросить буферы на диск systemctl → управление службами (systemd) T tac → cat наоборот tail → последние строки tar → архиватор tcsh → C Shell tee → разветвление вывода telnet → старый, небезопасный (лучше ssh) test → проверка условий ([) time → измерить время выполнения tmux → мультиплексор терминала (альтернатива screen) top → мониторинг процессов touch → создать/обновить файл tr → замена символов traceroute → трассировка маршрута tree → дерево каталогов true → вернуть код 0 tty → текущий терминал type → тип команды (встроенная, алиас, файл) U ulimit → ограничения ресурсов umask → маска прав по умолчанию umount → отмонтировать uname → информация о системе unalias → удалить алиас unexpand → пробелы → табуляции uniq → удалить дубликаты строк unlink → удалить файл (низкоуровнево) uptime → время работы системы useradd → добавить пользователя (низкоуровнево) userdel → удалить пользователя usermod → изменить пользователя users → кто сейчас в системе V vi → vim в минимальном режиме vim → лучший редактор vmstat → статистика виртуальной памяти vnstat → мониторинг трафика W w → кто онлайн и что делает wall → сообщение всем пользователям watch → периодический запуск команды wc → подсчёт строк/слов/байт wget → скачивание файлов whatis → краткое описание команды whereis → где лежит бинарник/man-страницы which → путь к исполняемому файлу while → цикл в shell who → кто в системе whoami → текущий пользователь whois → информация о домене X xargs → построение команд из ввода xdg-open → открыть файл в приложении по умолчанию xz → сжатие .xz (лучше gzip) xzcat → cat для .xz Y yes → бесконечно выводить строку yum → старый менеджер RedHat → dnf Z zcat → cat для .gz zdiff → diff для .gz zgrep → grep по .gz zip → архиватор .zip zypper → менеджер пакетов openSUSE Это 470+ реально живых команд в 2025 году.
  • Bash - работа с сетью - ip, порты и прочее

    Команды BASH
    6
    0 Голоса
    6 Сообщения
    4 Просмотры
    A
    Получание информации о домене Вот актуальный на конец 2025 года набор команд, которые реально используют системные администраторы и девопсы, чтобы понять, какой домен привязан к серверу/компьютеру (и наоборот). Локально на сервере (что система считает своим FQDN) # 1. Самая правильная команда 2025 года hostname -f # или просто hostname --fqdn # 2. Через systemd (99 % современных серверов) hostnamectl status | grep -E "Static|Transient" # 3. Коротко и красиво (мой фаворит) cat /etc/hostname && hostname -d # имя + только домен Снаружи — какой домен смотрит на этот IP # 4. Самый быстрый и точный (2025) dig +short -x $(curl -s ifconfig.me) # reverse-lookup текущего внешнего IP # 5. То же самое, но красивее host $(curl -s ifconfig.me) # 6. Универсальная однострочка (работает везде) curl -s https://api.ipify.org | xargs dig -x +short Полная проверка «всё сразу» (одна команда) echo "=== Локальный FQDN ==="; hostname -f echo "=== Внешний IP ==="; curl -s ifconfig.me echo "=== Reverse DNS (что видят снаружи) ==="; dig +short -x $(curl -s ifconfig.me) echo "=== DNS A-запись домена (если знаешь домен) ==="; dig +short A mydomain.com Мои алиасы (добавь в ~/.bashrc) alias myip="curl -s ifconfig.me" alias myhost="hostname -f" alias whatsees="dig +short -x $(myip)" alias allinfo='echo -e "IP: $(myip)\nFQDN: $(hostname -f)\nReverse: $(whatsees)"' Пример вывода allinfo: IP: 185.123.45.67 FQDN: server01.mydomain.ru Reverse: server01.mydomain.ru Когда что использовать (2025) Задача Лучшая команда Узнать своё полное имя сервера hostname -f Узнать только домен hostname -d Проверить, что видят клиенты снаружи dig -x $(curl -s ifconfig.me) Быстро проверить домен → IP и обратно host mydomain.com и host 185.123.45.67 В скриптах (без вывода мусора) hostname --fqdn Итог — запомни всего три команды на всю жизнь hostname -f # что считает сервер своим именем dig -x $(curl -s ifconfig.me) +short # что видят снаружи host mydomain.com # проверить конкретный домен
  • Bash - скачивание и загрузка в сеть

    Команды BASH
    6
    0 Голоса
    6 Сообщения
    5 Просмотры
    A
    Скачивание с rutube Вот актуальная на конец 2025 года шпаргалка по скачиванию с Rutube — yt-dlp всё ещё отлично работает, но синтаксис немного поменялся + появились новые «фишки». Рабочие команды 2025 года (проверено на Rutube, ноябрь 2025) # 1. Установка/обновление yt-dlp (один раз) sudo wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp sudo chmod a+rx /usr/local/bin/yt-dlp # или через pip # pip3 install -U yt-dlp # 2. Посмотреть все доступные форматы yt-dlp -F "https://rutube.ru/video/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/" # 3. Скачать самое лучшее видео + аудио (автоматически объединит) yt-dlp -f "bestvideo+bestaudio/best" "https://rutube.ru/video/..." # 4. Только самое лучшее видео (без звука, если хочешь отдельно) yt-dlp -f bestvideo "https://rutube.ru/video/..." # 5. Только самый лучший звук yt-dlp -f bestaudio --extract-audio --audio-format mp3 "https://rutube.ru/video/..." # 6. Конкретный формат (как ты делал раньше, только новый синтаксис) # Пример: 1080p60 + лучший звук yt-dlp -f "bestvideo[height<=1080][fps<=60]+bestaudio" "https://rutube.ru/video/..." # 7. Скачать плейлист целиком (сериал/канал) yt-dlp "https://rutube.ru/plst/123456/" # 8. Скачать с субтитрами (если есть) yt-dlp --write-auto-sub --skip-download "https://rutube.ru/video/..." # только субтитры yt-dlp --write-auto-sub "https://rutube.ru/video/..." # видео + субтитры Самые полезные «однострочники» 2025 года # Самое лучшее качество (видео + звук) → имя файла как на сайте yt-dlp -f "bv*+ba/b" --merge-output-format mp4 "https://rutube.ru/video/..." # 1080p или меньше, 60 fps, с русским звуком yt-dlp -f "bestvideo[height<=1080][fps<=60]+bestaudio[language^=ru]" "https://rutube.ru/video/..." # Скачать и сразу конвертировать в MP3 (только аудио) yt-dlp -x --audio-format mp3 --audio-quality 0 "https://rutube.ru/video/..." # Скачать приватное видео (нужен куки от браузера) yt-dlp --cookies cookies-rutube.txt "https://rutube.ru/video/private/..." # Обход ограничений по возрасту (18+) yt-dlp --age-limit 30 "https://rutube.ru/video/..." Если Rutube «прячет» форматы (иногда бывает) # Принудительно обновить extractor (решает 90% проблем) yt-dlp -U # Скачать с максимальным дебагом (чтобы понять, что блокирует) yt-dlp -vU --print-traffic "https://rutube.ru/video/..." Мой личный алиас (добавь в ~/.bashrc) alias rutube="yt-dlp -f 'bestvideo[height<=1080]+bestaudio/best' --merge-output-format mp4 --no-playlist" alias rutube-audio="yt-dlp -x --audio-format mp3 --audio-quality 0" Теперь просто: rutube https://rutube.ru/video/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/
  • Bash - работа с архивами

    Команды BASH
    4
    0 Голоса
    4 Сообщения
    5 Просмотры
    A
    Упаковка каталога в zip Вот полный и актуальный на 2025 год набор команд для упаковки папки в ZIP — от самых простых до максимально эффективных и красивых. Базовые команды (всегда работают) # Самое простое — упаковать папку рекурсивно zip -r archive.zip /path/to/folder # Упаковать текущую папку (точка = текущая директория) zip -r backup.zip . # Исключить лишнее (git, node_modules, __pycache__ и т.д.) zip -r backup.zip . -x "*.git*" "*node_modules*" "*__pycache__*" "*.DS_Store*" # С максимальным сжатием (дольше, но меньше размер) zip -r -9 backup.zip folder/ # С прогресс-баром (очень удобно при больших папках) zip -r backup.zip folder/ ; echo "Готово: $(du -h backup.zip)" Продвинутые и самые полезные варианты (мои ежедневные) # 1. Только новые/изменённые файлы (обновить существующий архив) zip -r -u archive.zip folder/ # 2. Сжать с паролем (AES-256) zip -r -e --password=твой_пароль secret.zip private_folder/ # 3. Самое сильное сжатие + пароль + прогресс zip -r -9 -e -P суперсекрет archive.zip important_data/ # 4. Создать архив без пути (все файлы в корне архива) cd /path/to/folder && zip -r -9 ../backup.zip ./* # 5. Упаковать и сразу проверить целостность zip -r backup.zip folder/ && unzip -t backup.zip && echo "Архив в порядке" # 6. Упаковать с красивым прогресс-баром (через rsync + zip) rsync -a --info=progress2 folder/ temp_folder/ && zip -r -9 backup.zip temp_folder/ && rm -rf temp_folder/ Альтернативы (если zip по какой-то причине нет или хочется лучше) Инструмент Команда Плюсы 7z (лучшее сжатие) 7z a -tzip -mx=9 backup.zip folder/ В 1.5–3 раза меньше, чем zip -9 zstd + tar tar -c folder/ | zstd -19 -o backup.tar.zst Быстрее + лучше сжатие (2025 стандарт) pigz (многопоточный zip) tar -c folder/ | pigz -9 > backup.tar.gz В 5–10 раз быстрее на многоядерных CPU Установка (Debian/Ubuntu): sudo apt install zip unzip p7zip-full zstd pigz Мои личные алиасы (добавь в ~/.bashrc или ~/.zshrc) alias zipmax="zip -r -9" # максимальное сжатие alias zipass="zip -r -e -P" # с паролем alias zipclean='zip -r backup.zip . -x "*.git*" "*node_modules*" "*.DS_Store" "__pycache__/*"' alias zip7="7z a -tzip -mx=9" # 7-zip с максимальным сжатием Итог: запомни всего три команды на всю жизнь # Обычное использование zip -r archive.zip folder/ # Максимальное сжатие zip -r -9 archive.zip folder/ # С паролем zip -r -e archive.zip folder/
  • Bash - работа с графическим окружением

    Команды BASH
    2
    0 Голоса
    2 Сообщения
    4 Просмотры
    A
    Проверить тип сессии Xorg или Wayland Вот актуальный на конец 2025 года набор команд — какие реально работают и что выводят в разных ситуациях (локально, по SSH, в TTY, в контейнерах). Топ-5 рабочих способов (по надёжности) # 1. Самый надёжный (2025 стандарт) loginctl show-session $(loginctl | grep $(whoami) | awk '{print $1}') -p Type --value # Вывод: wayland или x11 # 2. Коротко и красиво (мой ежедневный фаворит) echo $XDG_SESSION_TYPE # Вывод: wayland / x11 / tty # 3. Ещё короче и всегда работает локально echo $WAYLAND_DISPLAY $XDG_SESSION_TYPE # Если есть $WAYLAND_DISPLAY (например, wayland-0) → Wayland # Иначе, если $XDG_SESSION_TYPE = x11 → Xorg # Иначе → tty # 4. Универсальная однострочка (работает даже по SSH) if [ -n "$WAYLAND_DISPLAY" ] || [ "$XDG_SESSION_TYPE" = "wayland" ]; then echo "Wayland" elif [ "$XDG_SESSION_TYPE" = "x11" ]; then echo "Xorg" else echo "TTY / Консоль / SSH" fi # 5. Самая красивая и информативная echo "Сессия: $XDG_SESSION_TYPE" echo "Дисплей: ${WAYLAND_DISPLAY:-${DISPLAY:-не определён}}" echo "Композитор: ${XDG_CURRENT_DESKTOP:-неизвестно}" Что выводят команды в разных случаях (2025) Ситуация echo $XDG_SESSION_TYPE echo $WAYLAND_DISPLAY echo $DISPLAY loginctl … Type Локально в GNOME/KDE (Wayland) wayland wayland-0 (пусто) wayland Локально в GNOME/KDE (X11) x11 (пусто) :0 x11 Локально в TTY (Ctrl+Alt+F3) tty (пусто) (пусто) tty По SSH tty (пусто) (пусто) tty В WSL2 с GUI x11 или wayland (зависит от дистра) :0 x11 В Docker-контейнере с X11 forwarding (обычно пусто) (пусто) :10 (не работает) Мой личный алиас (добавь в ~/.bashrc / ~/.zshrc) alias session='echo "Session: $XDG_SESSION_TYPE | Desktop: $XDG_CURRENT_DESKTOP | Display: ${WAYLAND_DISPLAY:-$DISPLAY}"' Использование: $ session Session: wayland | Desktop: GNOME | Display: wayland-0 Итог: запомни всего две команды на всю жизнь echo $XDG_SESSION_TYPE # 99 % случаев достаточно loginctl show-session $(loginctl list-sessions | grep $(whoami) | awk '{print $1}') -p Type --value В 2025 году в 95 % случаев достаточно просто echo $XDG_SESSION_TYPE.