Блог о Gentoo и около-линуксовым штукам

Показаны сообщения с ярлыком Софт. Показать все сообщения
Показаны сообщения с ярлыком Софт. Показать все сообщения

9 января 2022 г.

Wireguard 'сервер' в OpenWRT

18:47 Опубликовал Дмитрий Исаенко , Нет комментариев

Сегодня настраиваем Wireguard через luci на OpenWRT чтобы ходить в домашнюю локальную сеть и дальше в интернеты. 

В первую очередь с андроедо-фона, так что на его примере и разберём. OpenWRT у нас версии 21.02.01. На старых (15ых, например) скорее всего беда, так как вряд ли в те времена в ядре была поддержка.
К сути!
Спрева заходим на http://openwrt. Далее "Система" -> Software", жмём "Update lists" и устанавливаем:
* wireguard-tools
* kmod-wireguard
* luci-app-wireguard
* luci-proto-wireguard
* qrencode
И локализацию заодно:
* luci-i18n-wireguard-ru

 

Утанавливаем, перезагружаем.
Заходим в "Сеть" -> "Интерфейсы"

Жмём "Добавить новый интерфейс". Название даём какое-угодно. Wireguard например, или wg.
Протокол выбираем "Wireguard VPN" (у меня эта опция в списке появился после перезагрузки).
"Устройство" − без изменений.
Жмём "Создать интерфейс" и открывается окно изменений-настроек.
В новом окне отмечаем "Запустить при загрузке".
Жмём "Сгенерировать ключ". Поле "Приватный ключ" теперь заполнено
"Порт для входящих соединений" ставим - 51820 (по-умолчанию именно он выделен для wireguard)
"IP-адреса" ставим 192.168.42.1/32 (тут я не особо разбирался почему надо указывать подсеть и почему бы не влепить /24).
"Не создавать маршруты" оставляем пустым.

Переходим в "Дополнительные настройки"
И.. в общем тут всё ок. Хотя я отключил делегирование IPv6 префиксов потому что оно не очень нужно =)

Далее "Настройки межсетевого экрана"
Тут в выпадающем меню объеденяем wireguard и lan в одну зону.

На вкладке "DHCP-сервер" можно отметить (оставить отмеченным?) "Игнорировать интерфейс".
"Настройки IPv6" по прежнему не интересно.
Сохраняем, применяем. Пока здесь всё.

Настроки Firewall

Открываем "Сеть" -> "Межсетевой экран"

Заходим во вкладку "Traffic Rules" (или как она называется, если ставить локализацию.. см. картинку).

Крутим вниз, жмём "добавить"
"Название" -  "WireGuard-Allow-Input" или "Kittens-jumps-over-the-rainbow"
"Протокол" - "UDP"
"Source zone" -  "WAN"
"Зона назначения" - "Устройство (ввод)"
"Порт назначения" - "51820"
"Action" - "ACCEPT"
Сохраняем, применяем


Настройки Android устройства здесь и там

Заходим в "Состояние" -> "WireGuard"
Жмём "Показать/скрыть QR-код". Для этого мы и ставили пакет "qrencode".
Берём телефончик. Ставим Wireguard на андроед. Запускаем, жмём "+" -> "Сканировать QR-код" и.. сканируем!
Вводим название туннеля.
Открываем только что созданную запись и жмём кнопку правки вверху
Вводим адрес в блоке "Интерфейс": 192.168.42.3/32 (или 192.168.42.4 или 192.168.42.254 или ещё какой. Его надо запомнить, чуть позже он нам пригодится)
Переходим к блоку "Пир"
Вводим адрес роутера OpenWRT на котором всё это настраивалось в поле "Конечная точка" и порт 51820.
Например example.com:51820
Жмём на поле "Публичный ключ" чтобы он скопировался.
Жмём сохранить.

Возвращаемся в интерфейс OpenWRT.
Вновь заходим а "Сеть"->"Интерфейсы"
Находм Wireguard в списке
Жмём "Изменить"
Переходим в последнюю вкладку "Узлы (peers)"
Жмём "Добавить узел (peer)"
Вводим "Публичный ключ" который мы скопирвали в телефоне. Сами придумайте как.. Лучше перепечатать. Хуже всего отправить себе письмом.
Отмечаем "Маршрутизировать разрешенные IP-адреса"
Указываем IP адрес в поле "Разрешенные IP-адреса" (тот же, что указан на клиенте в блоке "Интерфейс").
Сохраняем, применяем.

Дальше всё должно работать :)


13 июня 2018 г.

Заметка по настройке exim4 на работу с Gmail @ Debian

02:21 Опубликовал Дмитрий Исаенко , Нет комментариев
При сбоях в работе демонов часто внутри них есть возможность слать письма. Мне бы хотелось бы получать отчёты на почту в случае чего-то непредвиденного. Раньше я пользовался ssmtp и он действительно хорош для embedded-систем, но Debian советует использовать exim4. Ну что же, я его попробовал и он действительно хорош. 
Ниже краткая заметка (конспект с материалов сайта wiki Debian, см.в конце) как быстро прикрутить зарегестрированный адрес в gmail для передачи сообщений в мир.

Для начала ставим exim4:
# aptitude install exim4-daemon-light exim4-config
Настраиваем exim4:
# dpkg-reconfigure exim4-config
1. Общий тип почтовой конфигурации: «отправка почты через smarthost; приём по SMTP или через fetchmail»
2. Почтовое имя системы: «localhost»
3. IP-адреса, с которых следует ожидать входящие соединения SMTP: «127.0.0.1»
4.Другие места назначения, для которых должна приниматься почта: оставить пустым
5. Машины, для которых доступна релейная передача почты:
 оставить пустым
6. IP-адрес или имя хоста являющегося исходящим smarthost: «smtp.gmail.com::587»
7. Скрывать локальное почтовое имя в исходящей почте? НЕТ
8. Сокращать количество DNS-запросов до минимума (дозвон по требованию)? НЕТ
9. Метод доставки локальной почты: mbox формат в /var/mail/
10. Разделить конфигурацию на маленькие файлы? ДА (или НЕТ)
Редактируем пароль для аккаунта в gmail
# vim /etc/exim4/passwd.client
 *.google.com:имя_пользователя_gmail@gmail.com:y0uRpaSsw0RD

Добавим правило для перезаписи имени отправителя (/etc/email-addresses ):
(В данный момент это не требуется, но мейнтейнеры exim говорят, что будет не лишним.)
# echo 'локальное_имя_пользователя: имя_пользователя_gmail@gmail.com' >> /etc/email-addresses
# echo 'локальное_имя_пользователя@localhost: имя_пользователя_gmail@gmail.com' >> /etc/email-addresses
# echo 'локальное_имя_пользователя@hostname1: имя_пользователя_gmail@gmail.com' >> /etc/email-addresses
# echo 'локальное_имя_пользователя@hostname1.localdomain: имя_пользователя_gmail@gmail.com' >> /etc/email-addresses
Применяем изменения:
# update-exim4.conf
# invoke-rc.d exim4 restart
# exim4 -qff
Говорим что вся почта, которую система будет генерировать и пытаться отправить root должна посылаться на адрес gmail (например на тот же, с которого происходит отправка. Или другой.):
vim /etc/aliases
root: имя_пользователя_gmail@gmail.com
Протестируем:
echo "Мудрое сообщение"|mail -s 'Значимый заголовок' root
Также может понадобиться разрешить gmail работу с непроверенными источниками. Это та фича, которая при попытке привязать новый почтовый клиент спрашивает разрешения. При её отключении спрашивать перестанет.

Всё. Проще чем казалось :)

Ссылки:
https://wiki.debian.org/GmailAndExim4

10 апреля 2018 г.

NoWOL: питание ПК через интернет. Часть 2.

05:55 Опубликовал Дмитрий Исаенко , , Нет комментариев
Продолжаем! Для проекта NoWOL есть Android-приложение с виджетом.

Вообще, там всё весьма просто. Как будет возможность (не лень), загружу исходники в GitHub. Пока же там лежит вполне готовая к использованию APK'шка.
Из ключевых моментов: внутри используется библиотека Volley; работает приложение под Android 4.0 и выше (minSdkVersion 14, target 26).

UPD: Исходники https://github.com/developersu/NoWOL-APK
Архитектура проста донельзя. Приложение отправляет HTTP-запросы по указанному адресу и парсит ответы.

А теперь скриншоты!

После установки станет доступно основное приложение, а в разделе виджетов появится новый виджет с одноимённым названием «NoWOL».

Что касается приложения, то в нём доступно несколько состояний: неизвестно, онлайн, офлайн, нет ответа (от хоста). Обновить состояние можно нажав на кнопочку в верхней панели.


Если нажать на шестерёнку на верхней панели, всплывёт окно для указания IP хоста в сети. Следует обратить внимание на формат записи. Защиты от дурака там, к сожалению, не так много как хотелось бы. Вот хороший пример:

  

При добавлении виджета появится окно конфигуратора. Как видно, в нём нет указателя на адрес хоста. Он настраивается внутри приложения, поэтому сперва стоит запустить его.
Зато в конфигураторе можно выбрать задний фон (белый или чёрный) с альфа-каналом и уровень его прозрачности.
UI немного неочевиден и меняется в зависимости от выбора "галочки". Я знаю, так делать нехорошо.


В итоге, после добавления, виджет будет выглядеть как-то так (см. ниже). В его верхней строке может отображаться один из трёх возможных статусов. В отличии от приложения, там нет варианта "неизвестно". Зато вдалеке от домашней сети будет красоваться "нет ответа".

Забавный момент: если ПК в режиме ожидания, то статус будет или "онлайн" или "офлайн" в зависимости от того, мигнула ли лампочка в момент запроса состояния :)

Принудительно обновить статус можно ловко попав по верхнему правому углу, или через приложение — оно передаст полученные данные в виджет. 
Вообще, статус обновляется сам каждые пол часа (если мне не изменяет память, но уж точно не чаще). Сделано это только для того, чтобы не сажать батарею телефона почём зря.


В общем-то на этом всё. Надеюсь, вам понравилось =)

22 марта 2018 г.

mplayer4anime

03:25 Опубликовал Дмитрий Исаенко , , Нет комментариев
mplayer4anime — это фронт-энд к плееру mplayer. Если ищите удобный способ запускать mkv и mka одновременно — это как раз оно!
Задача проста, заменить bash-скрипты для запуска связок mkv+mka+субтитров. Почему это нужно? Ну, например, чтобы продолжать раздавать торренты в том виде, в котором они были скачаны. Конечно, в интересах удобства сразу в голову придёт идея объединить mkv и mka в один контейнер используя mkvmerge, но тогда не получится посидеть на раздаче или придётся жертвовать свободным местом на диске.

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

GUI, ня!


Системные требования: JRE-1.8 (8) или выше.
Протестировано в Gentoo (virtual/jre 1.8.0-r1) и Debian Stretch (стандартный образ + openjfx).

Лицензия: GNU GPL v3.
Пиктограммы: material design.
Прочая графика: работы находящиеся в общественном достоянии или распространяющиеся по лицензии CC0 + собственные работы.

Версия на данном этапе вполне рабочая, но некоторые экстра-плюшки всё ещё не реализованы, например drag-n-drop.

И ещё, работает всё именно с mplayer а не с mpv или smplayer (хотя хотелось бы), так что подучите команды mplayer (f - полноэкранный режим, enter - закрыть, пробел - пауза).
Линка: https://github.com/developersu/mplayer4anime

Ах да, в будующих релизах будет добавлена поддержка Windows и, вероятно, безшовный запуск (отдельно устанавливать javaFX/JRE не потребуется). На macOS должно и так работать. Скажите мне если вдруг решитесь попробовать!

Ооо.. вот ещё, если вам вдруг понравилось, оставьте коммент! А даже если не понравилось, то тоже можно =)

1 марта 2018 г.

Заметки о вытаскивании дорожек из mkv и создании mka

00:50 Опубликовал Дмитрий Исаенко , 3 коммент.
Есть задача — вытащить аудио-дорожку из одного mkv файла и сделать из неё mka файл. Таким образом можно было бы использовать экспортированный дубляж в другом, более качественном видео-файле. Итак, нам понадобится mkvtoolnix. Ставим:
# emerge media-video/mkvtoolnix
Далее получаем информацию о файле-доноре. В нём ищем информацию о звуковых дорожках внутри матрёшки.
$ mkvinfo ./anime.mkv
+ Заголовок EBML
|+ Версия EBML: 1
...
...
| + Дорожка
|  + Номер дорожки: 2 (идентификатор дорожки для mkvmerge и mkvextract: 1)
|  + UID дорожки: 16263157260285453471
|  + Тип дорожки: audio
|  + Идентификатор кодека: A_MPEG/L3
|  + Продолжительность по умолчанию: 24.000ms (41.667 кадров/полей в секунду для видеодорожки)
|  + Язык: und
|  + Audio track
|   + Частота дискретизации: 48000
|   + Каналы: 2
|+ EbmlVoid (размер: 1095)
|+ Кластер
Тут важно обратить внимание на то, что подсвечено красным. В данном примере используется mp3 файл который имеет идентификатор 1 для mkvextract. Сейчас мы этим и воспользуемся. Вытаскиваем аудиодорожку в файл file.mp3.
$ mkvextract tracks ./anime.mkv 1:file.mp3
Извлечение дорожки 1 с CodecID 'A_MPEG/L3' в файл 'file.mp3'. Формат контейнера: MPEG-1 Audio Layer 2/3
Обработано: 100%
Также можем наверстать скриптик, который сделает рекурсивный обход всех файлов в папке и извлечёт из них заданые дорожки:
# vim script.sh
#!/bin/bash
for f in *.mkv
do
    mkvextract tracks "$f" 1:"$f".mp3
done

# chmod +x script.sh
# script.sh
Теперь воспользуемся GUI обёрткой над mkvtoolnix (mkvtoolnix-gui). Вы же собрали пакет с флагом qt5, верно? ;)
Выбираем файл (правой кнопкой клик на поле «Исходные файлы». Далее ставим нужный язык в одноимённом поле и жмём «Выполнить сборку».
На выходе получаем mka-файл. В моём случае подгонка по таймлайнам не требовалась, так что всё сразу заработало.

На этом всё!

14 декабря 2017 г.

ovpnWrapper

05:07 Опубликовал Дмитрий Исаенко , , , Нет комментариев
При использовании OpenVPN удобнее всего выдавать пользователю один файл со всеми настройками, ключами и необходимыми сертификатами. К счастью, их легко встроить в файл .ovpn. 
Итак встраивать, как известно, нужно:
ca.crt
client.crt
client.key
Не плохо было бы автоматизировать процесс. Для этого и написан ovpnWrapper. Это достаточно простой скрипт на python для генерирования и/или агрегирования всех необходимых файлов в один. (Ссылка в конце.)
Используется он в паре с easyrsa3 (семантика более ранних версий не поддерживается). Его нужно поместить в ту же папку, что и easyrsa и немного настроить.

Рассмотрим поближе.
В первой строке необходимо указать путь до интерпретатора python 3. 
#!/usr/bin/python3.5
Далее нам интересна строка, где мы указываем путь до папки, в которой хотим хранить сгенерированные файлы .ovpn.
ovpnFolder = os.environ['HOME']+"/ovpn/"
Как видно, по-умолчанию она указывает на папку ovpn/ в домашней директории.
Исправим serverCA, который определяет полный путь к файлу ca.crt
serverCA = '/etc/openvpn/server/ca.crt'
Исправим также commonTLS который должен указывать на нужный файл  (добавлено в версии 0.2. Если вам это не нужно, используйте 0.1)
commonTLS = '/etc/openvpn/server/tls.ta'
И последнее, но не по значимости, head. Тут указываются все предопределённые настройки.
head = "\
client                                     \n\
tls-client                                 \n\
dev tun                                    \n\
proto udp                                  \n\
remote your.host.name.located.here.! 1194  \n\
cipher AES-256-CBC                         \n\
resolv-retry infinite                      \n\
nobind                                     \n\
persist-tun                                \n\
persist-key                                \n\
verb 3                                     \n\                                                                                                                                                                                          
" 
Теперь меняем права файлику:
# chmod +x ovpnWrapper.sh
И запускаем, передавая в качестве единственного параметра имя для файлов-сертификата, ключа и сгенерированного .ovpn.
# ./ovpnWrapper.sh client42
Он проверит, не существует ли уже сгенерированных ключа+сертификата клиента, и если нет, то создаст их. Если есть — просто создаст .ovpn файл в указанной выше директории.
Всё что требуется, читать вывод скрипта (Будьте бдительны: английский).
Вообще у меня easyrsa на каком-то этапе ругался на openssl-1.1.0f но всё что нужно генерировал.

На этом всё. Приложение качать отсюда: https://github.com/developersu/ovpnWrapper/releases/

23 апреля 2017 г.

ECM to ISO в Linux

18:56 Опубликовал Дмитрий Исаенко , , Нет комментариев
В последнее время покачиваю образы с old-games.ru, а там формат bin.ecm. Сегодня будет рецепт конвертации в каноничный ISO.
Для начала, как обычно, надо поставить себе нативный ecm. Похоже, проект уже загнулся и сайт их не работает. Так что в SRC_URL будет линка на интернет архив. Но в любом случае это работает, так что переживать не о чем :)
Добавим ebuild в домашний оверлей:
# mkdir /usr/local/portage/app-cdr/
# mkdir /usr/local/portage/app-cdr/ecm
# vim ecm-1.0.0.ebuild

# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI=2

inherit versionator
MY_P=$(delete_all_version_separators ${P})

DESCRIPTION="ECM prepares CD images (BIN, ISO, etc.) so that they'll compress far better"
HOMEPAGE="http://www.neillcorlett.com/ecm/"
SRC_URI="https://web.archive.org/web/20091021035854/http://www.neillcorlett.com/downloads/${MY_P}.zip"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE=""

DEPEND="app-arch/unzip"

src_unpack() {
        mkdir "${S}"
        unzip -d "${S}" "${DISTDIR}"/${MY_P}.zip
}

src_compile() {
        gcc ${CFLAGS} -o ecm ecm.c || die "ecm compilation failed"
        gcc ${CFLAGS} -o unecm unecm.c || die "unecm compilation failed"
}

src_install() {
        dobin ecm unecm
        dodoc format.txt readme.txt
}                      

# chown -R portage:portage /usr/local/portage/
# repoman manifest
# eix update 
И установим его, плюс ещё bchunk, который тоже понадобиться
# emerge app-cdr/ecm app-cdr/bchunk
Теперь открываем какой-нибудь архив с сайта, и делаем следующее:
# unecm image.bin.ecm 
# bchunk <image.bin> <image.cue> <image_name>
# mount -o loop ./image_name.iso /media/something/
Готово!

См.также: https://github.com/developersu/loperOverlay

29 марта 2017 г.

loperIRCLogBot

07:47 Опубликовал Дмитрий Исаенко , Нет комментариев
loperIRCLogBot - очередной бот для записи логов на канале IRC. Написан на С. Использует слегка модифицированную libircclient. Он может заходить на 1 сервер, 1 канал и писать всё что там происходит. Может собираться под openWRT и наверное под много чего ещё. В общем все подробности чуть ниже. Этот пост (наверное) будет обновляться по мере выхода новых версий.
Написанное верно для версии: 1.1.
А теперь документация в виде FAQ.
Он работает под Windows?
Нет.

А если я его соберу под Windows?
Всё ещё нет.

OS X, BSD, AIX?
Не знаю, может быть. Попробуй и расскажи потом.

Как собирать?
$ make

Оно не работает, и тут нет ./configure. Что мне делать? Почему это происходит со мной?
Измени Makefile и ./files/Makefile. Они там простые. Я не особо разбираюсь в том, что есть ./configure поэтому его там нет.

При компиляции я вижу "warning:". Это норма?
Ну, вроде того. Я тоже иногда вижу подобное. Надо будет найти время и что-то с этим сделать.

Где исполняемый файл? Что запускать?
$ ./bin/loperIRCLogBot

Что с лицензиями?
Исходный код, который фактически является лишь файлом loperIRCLogBot.c распространяется под лицензией GNU General Public License v.3. Ты можешь прочесть текст лицензии в файле LICENSE, (распространяется вместе с кодом) или посетив сайт https://www.gnu.org/ (там он определённо должен быть). Также приложение использует (немного) модифицированную libircclient написанную George Yunaev. Libircclient распространяется под лицензией GNU Lesser General Public License v.3 или более поздней.

Можно ли (собрать и) использовать эту программу вместе с динамической библиотекой libircclient, которая у меня уже установлена?
Нет. Эта маленькая модификация, которая нужна для работы loperIRCLogBot не позволяет использовать оригинальную немодифицированную библиотеку. Посмотри на патч в директории ./files (в нём вся суть).

Где указывать настройки и как?
В файле ./bin/bot.conf. Ты можешь сгенерировать шаблон выполнив 
$ ./loperIRCLogBot -g
Файл настроек должен храниться (и будет сгенерирован) в той же директории, что и исполняемый файл. Пока это единственный вариант.
Из файла настроек приложение читает лишь первые 15 строк, так что удостоверься, что ты не прописал ничего важного ниже первых 15 строк.
Вот пример:
server:          irc.example.com
channel:         #channel
port:            6667
nick:            awesome_nick_here
username:        usrname
realname:        realname
password:        0 
maxNickLength:   30
logPath:         0 
link:            http://localhost:8080/logs/
reJoin:          yes
'server' должен быть установлен в описанном выше формате. Никаких irc://, слэшей и бэкслешей быть не должно.
'channel' это канал, к которому нужно подключиться. Должен начинаться с символа решетки '#'.
'port' порт сервера
'nick' ник на сервере. Ограничен параметром 'maxNickLength'. Т.е. длина ника не должна превышать число символов, определённое в maxNickLength.
'username'  имя пользователя, которое устанавливается вторым параметром в нике-сервера. Например nick!~[USERNAME]@ip_adress
'realname' это реальное имя. Не спрашивай, просто поставь тут что-то, ладно?
'password' это пароль от ника. Он передаётся серверу в виде '/nickserv IDENTIFY [password]'. Если установлен '0', то пароль не передаётся.
'maxNickLength' это максимальная длина ника. Различные серверы ограничивают максимальную длину ника. Значения в '30' символов тут будет достаточно. Максимально допустимое значение - 128, но я не уверен что тебе следует использовать максимальное значение, потому, что если сервер не поддерживает ники подобной длины, то программа может выполняться неправильно.
'logPath' путь к директории ./logs где хранятся логи. Если '0' то они все будут храниться  в той же папке, что и исполняемый файл. Обрати внимание, что путь должен быть абсолютным, а не относительным. Недопустимо указывать что-то типа ~/logs или ../../logs.
'link' это ссылка, которая будет служить ответом, когда кто-то на канале начинает своё сообщения с ника бота. Если '0', то в ответ никакой ссылки они не получат. Только смайлик.
'reJoin' определяет, следует ли автоматически заходить на канал после кика. Если 'yes' то следует, если 'no' то нет.

Есть ли какие-то ещё опции у приложения?
Да. Когда ты запускаешь приложение, ему можно передать следующие ключи:
-g, --genconf — создаёт шаблон конфигурационного файла. ОСТОРОЖНО! Это действие перезапишет существующий конфигурационный файл.
-n, --nomessage — подавляет вывод сообщений (на stdin, stderr).
-v, --version — показывает версию программы.
--help — показывает помощь по ключам.
Обратите внимание, что '-n' просто отключает вывод сообщений. Там нет всяких специфичных для демонов опций. Пока.

Можно как-то зайти больше чем на один канал?
Неа.

Если пропадёт соединение, сможет ли бот переподключиться? Если да, то когда это произойдёт?
Да. Через 20 минут. Возможно раньше. Зависит от активности на канале и пингов от сервера. Предсказание этого сейчас реализовано крайне криво.