LINUX.ORG.RU

Сообщения achilles_85

 

Рецепт приготовления домашнего сервера

Всем доброго времени суток. Захотелось организовать для себя домашнее хранилище. Под хранилищем имею в виду облако для фоток, видосов, плюс аудио библиотеку. Поднял funkwhale, transmission. Хочу качать аудио контент transmission'ом и перекладывать в funkwhale. Для этого не хочу лезть в консоль, а прикрутить какой нить гуй. Есть толковый гуй для роли файлового менеджера? Может кто реализовывал такое и подкинет идей как правильно сделать? Может и не нужен гуй, а можно сервис написать , который будет все это дело перекладывать по мере поступления контента.

 , ,

achilles_85
()

Alsa переключение источников

Есть синезуб девайс, подключил его, в .asoundrc прописал

pcm.btheadset {
        type plug
        slave.pcm {
                type bluealsa
                device "MAC"
                profile "a2dp"
        }
        hint {
                show on
                description "Bluetooth Audio ALSA Backend"
        }
}

В deadbeef в устройствах вывода девайс появился, все работает. Но хочется системно переключать вывод с одного девайса на другой. Ось voidlinux, в volumeicon в девайсах не появляется синезуб. Pulse ставить не хочу, с pipewire не знаком. Хотелось бы алсой все разрулить. Попутно второй вопрос. Как можно не привязываться к определенному устройству в конфиге алсы? Выходит захочу подключить другую гарнитуру и придется мак менять

 , ,

achilles_85
()

Bash массивы

Народ, хелпните. Есть массив, в который записываю строки, к примеру первый строка

first check 0
вторая
second check 1
. Теперь надо вывести элементы каждый на новой строке. Не могу это реализовать, эти 2 строки попадая в массив становятся 6ю его элементами и каждый с новой строки. Может вывести в одной строке и как-то обрабатывать в пайпе, скажем после цифры делать новую строку. Подскажите как реализовать.

 , ,

achilles_85
()

Traefik и несколько доменов

Не осилю никак как завести несколько доменов и получением для каждого домена своего сертификата от Letsencrypt. Сейчас имею такой конфиг

cat data/traefik.yml
api:
  dashboard: true

entryPoints:
  web:
    address: :80
    http:
      redirections:
        entryPoint:
          to: websecure

  websecure:
    address: :443
    http:
      middlewares:
        - secureHeaders@file
      tls:
        certResolver: letsencrypt_domain1

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
  file:
    directory: /custom
    watch: true

certificatesResolvers:
  letsencrypt_domain1:
    acme:
      email: admin@domain1.com
      storage: acme_domain1.json
      tlschallenge: true
      httpChallenge:
        entryPoint: web
cat data/custom/dynamic.yml 
http:
  middlewares:
    secureHeaders:
      headers:
        sslRedirect: true
        forceSTSHeader: true
        stsIncludeSubdomains: true
        stsPreload: true
        stsSeconds: 31536000   
             
    user-auth:
      basicAuth:
        users:
          - "admin:pass"
          
tls:
  options:
    default:
      minVersion: VersionTLS12
      curvePreferences:
        - secp521r1
        - secp384r1
      sniStrict: true
cat docker-compose.yml
version: '3'
services:
  traefik:
    image: traefik:v2.3.7
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    networks:
      - web
    ports:
      - 80:80
      - 443:443
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data/traefik.yml:/traefik.yml:ro
      - ./data/acme_domain1.json:/acme_domain1.json
      - ./data/custom/:/custom/:ro
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=web"
      - "traefik.http.routers.traefik.entrypoints=websecure"
      - "traefik.http.routers.traefik.rule=Host(`traefik.domain1.com`)"
      - "traefik.http.routers.traefik.tls.certresolver=letsencrypt_domain1"
      - "traefik.http.routers.traefik.service=api@internal"
      - "traefik.http.routers.traefik.middlewares=user-auth@file"
networks:
  web:
    external: true
Читал документацию, пробовал добавить в traefik.yml раздел
  letsencrypt_domain2:
    acme:
      email: admin@domain1.com
      storage: acme_domain2.json
      tlschallenge: true
      httpChallenge:
        entryPoint: web
но не заводится. Кто нить такое реализовывал?

 , ,

achilles_85
()

Bash скрипт и выбор параметров из файла

Друзья, подскажите как реализовать такое. Обходился до сегодняшнего дня помощью инструкции case, но параметров становится очень много и скрипт ужасающе растет в объеме. Хочу вынести параметры в отдельный файл конфигурации, а скрипт оставить обработчиком.

case $1 in
1)
  status=$(123)
  ;;
2)
  status=$(123)
  ;;
*)
  ;;
esac

if $status(какое то условие); then
 Что то делаем
fi
Примет скрипта. Как параметр $1 взять из конфига? Конфиг прицепить как знаю, . ./conf в той же директории будет лежать. Ещё ньюанс. В обработчике будут условия, что если параметр $1 отбросил неприемлемый результат, то надо пойти в конфиг и взять параметр следующий за $1, т.е. $1+1

 

achilles_85
()

Crontab и переменный

Подскажите как быть. Накидал с кучей переменных, которые лежат в конфигурационном файле. Руками дергаю скрипт - все отрабатывает. В кроне тишина. Он не понимает где переменные? Идти в логи нет возможности, прав нет совсем совсем. В кроне вывод в файл перенаправил, но он пустой.

 , ,

achilles_85
()

Скрип мониторинга состояния запросом в базу

Проблема собственно вот в чем. Сам скрипт написал, но есть сомнения правильности. Идет проверка 2х условий из вывода запроса в базу.

if [[ $(hive -e "blablabla" | grep -A1 "OK" | awk 'NR==1')" = "OK" && $(hive -e "blablabla" | grep -A1 "OK" | awk 'NR==2')" = "1" ]]
Как в таком случае работает bash? Он 2 раза будет идти с запросом в базу? Если да, то подскажите как одним разом обойтись

 , ,

achilles_85
()

Post-up pre-down в systemd

Помогите понять как это сделать на подобии того как это делается в ifupdown. У меня в interfaces скрипты срабатывают в post-up и pre-down. Решил убрать управление сетью в systemd-networkd. А вот как этими скриптами управлять вроде понимаю, но не полностью. Написал сервис

Discription=iproute2 (%i)
Wants=network-online.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/conf.d/iproute2/%i/route up
ExecStop=/etc/conf.d/iproute2/%i/route down

[Install]
WantedBy=sys-subsystem-net-devices-%i.device

Руками он отрабатывает верно, таблицы маршрутизации заполняются. Но если добавить в автозагрузку, то получается бардак. По логу видно что интерфейс не успевает получить настройки, а сервис с маршрутами уже стартует. Конечно же никакие маршруты не прописываются. Как добавить таймаут или же условие, чтоб проверялось наличие ip адреса у интерфейса? Таймаут типа sleep 5 можно конечно в скрипт route добавить, но по мне колхозно это выглядит

 , ,

achilles_85
()

Настройка модема e3372 в стик режиме

Debian 11. Поднимаю соединение так

auto wwan0
iface wwan0 inet dhcp
        pre-up /bin/echo -en 'AT^NDISDUP=1,1,"internet"\r\n' > /dev/cdc-wdm0
        post-down /usr/sbin/ifdown wwan0

При загрузке ОС, при рестарте networking все в порядке, соединение устанавливается. Но если переподключить модем физически - соединение не поднимается. Приходится руками рестартить networking. Думал через правило udev вырулить, но по время загрузки системы udev дергает это правило. Как правильно костыль написать?

 , ,

achilles_85
()

Проблема с доступом к приложениям за роутером

Есть esxi тачка, на ней поднята ВМ в роли роутера с 2мя интерфейсам: один WAN с статичным белым IP, второй локальный. Вторая ВМ с одним локал интерфейсом, на ней крутится вэб приложение. С роутера на вторую вм порты проброшены, из вне вэб приложение доступно. Доступ по доменному имени. Поднял третью ВМ, роль терминального сервера. Из под этой ВМ доступа к вэб приложению нет. В логах вэб приложения тишина в это время. Где грабля? С этой ВМ днс имя резолвится, IP правильный. tcpdump с локального интерфейса роутера в момент запроса

15:57:02.363442 IP 192.168.1.8.54122 > 192.168.1.1.https: Flags [SEW], seq 163423042, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
15:57:02.363508 IP 192.168.1.1.https > 192.168.1.8.54122: Flags [R.], seq 0, ack 163423043, win 0, length 0
15:57:02.363566 IP 192.168.1.8.54123 > 192.168.1.1.https: Flags [SEW], seq 570484814, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
15:57:02.363592 IP 192.168.1.1.https > 192.168.1.8.54123: Flags [R.], seq 0, ack 570484815, win 0, length 0
15:57:02.613794 IP 192.168.1.8.54124 > 192.168.1.1.https: Flags [SEW], seq 3202065249, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
15:57:02.613846 IP 192.168.1.1.https > 192.168.1.8.54124: Flags [R.], seq 0, ack 3202065250, win 0, length 0
15:57:02.862919 IP 192.168.1.8.54122 > 192.168.1.1.https: Flags [S], seq 163423042, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
15:57:02.862971 IP 192.168.1.1.https > 192.168.1.8.54122: Flags [R.], seq 0, ack 1, win 0, length 0
15:57:02.863002 IP 192.168.1.8.54123 > 192.168.1.1.https: Flags [S], seq 570484814, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
15:57:02.863019 IP 192.168.1.1.https > 192.168.1.8.54123: Flags [R.], seq 0, ack 1, win 0, length 0
15:57:03.104906 IP 192.168.1.8.54124 > 192.168.1.1.https: Flags [S], seq 3202065249, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
15:57:03.104955 IP 192.168.1.1.https > 192.168.1.8.54124: Flags [R.], seq 0, ack 1, win 0, length 0
15:57:03.355941 IP 192.168.1.8.54122 > 192.168.1.1.https: Flags [S], seq 163423042, win 8192, options [mss 1460,nop,nop,sackOK], length 0
15:57:03.355999 IP 192.168.1.1.https > 192.168.1.8.54122: Flags [R.], seq 0, ack 1, win 0, length 0
15:57:03.361960 IP 192.168.1.8.54123 > 192.168.1.1.https: Flags [S], seq 570484814, win 8192, options [mss 1460,nop,nop,sackOK], length 0
15:57:03.362020 IP 192.168.1.1.https > 192.168.1.8.54123: Flags [R.], seq 0, ack 1, win 0, length 0
15:57:03.605808 IP 192.168.1.8.54124 > 192.168.1.1.https: Flags [S], seq 3202065249, win 8192, options [mss 1460,nop,nop,sackOK], length 0
15:57:03.605871 IP 192.168.1.1.https > 192.168.1.8.54124: Flags [R.], seq 0, ack 1, win 0, length 0
На WAN тишина в это время. Подозреваю, что косяк в iptables

 ,

achilles_85
()

2 провайдера и разделение трафика

Научите плиз, как это осилить? Хочу из локальной сети запросы в инет на, к примеру, 443 порт отправлять через одного провайдера и получать с него же, все остальное через второго. Добавил 2 таблицы в rt_tables, правила такие

ip route add $PROV1_SUB dev $PROV1 src $IP1 table PROV1
ip route add default via $PROV1_GW table PROV1
ip route add $PROV2_SUB dev $PROV2 src $IP2 table PROV2
ip route add default via $PROV2_GW table PROV2

ip route add $PROV1_SUB dev $PROV1 src $IP1
ip route add $PROV2_SUB dev $PROV2 src $IP2

ip route add default via $PROV1_GW

ip route add from $IP1 table PROV1
ip route add from $IP2 table PROV2

ip route add $LOCAL_SUB dev $LOCAL_IP table PROV1
ip route add $PROV2_SUB dev $PROV2 table PROV1
ip route add 127.0.0.0/8 dev lo table PROV1
ip route add $LOCAL_SUB dev $LOCAL_IP table PROV2
ip route add $PROV1_SUB dev $PROV1 table PROV2
ip route add 127.0.0.0/8 dev lo table PROV2

ip rule add from all fwmark 400 table PROV2
Как в nftables (на худой конец iptables) фильтровать трафик меткой? Никогда этого не делал, нахожу примеры в которых конкретный источник указан, а мне нужно чтоб любой источник из локальной сети был.

 , ,

achilles_85
()

LTE и wireguard в качестве двух провайдеров

Пытаюсь настроить эту связку на домашнем сервере. Написал 2 таблицы маршрутизации для них, трафик ходит каждый по своему интерфейсу. Проблема с WG. Если в конфиге клиента AllowedIPs указать 0.0.0.0/0, то весь трафик уходит с него. Как бы так должно быть. Но мне нужны 2 независимых канала. Опсос по LTE режет торренты и оттуда, отсюда по мелочи (классика). Задумка пускать все порезанное через WG. С AllowedIPs 0.0.0.0/0 WG добавляет 2 свои таблицы маршрутизации и правило в нетфильтр, помечает пакеты. Если пакет на порт WG идет, то отпускает его с LTE интерфейса, все остальное через себя. Как не дать WG создавать эти таблицы? Могу в AllowedIPs указать подсеть внутреннюю до WG, но не понимаю правильно ли это

 , ,

achilles_85
()

MPD

Подскажите, можно ли заставить mpd обновлять базу при подключении/отключении USB флешки? Руками из клиентов база обновляется, но хочу автоматизировать этот процесс. В конфиге опция

auto_update    "yes"
, но толку от нее нет. Права на файлы в примонтированной директории rooo/root 0755.

 , ,

achilles_85
()

pptp ubuntu server

Дано 2 шлюза-клиента,на ubuntu и debian. Оба коннектятся к одному серверу, сервак на freebsd. Проблема в том, что оба сыпят в лог вот такое

anon log[decaps_gre:pptp_gre.c:430]: accepting packet 69307 (expecting 69306, lost or reordered)
Конфиги клиентов одинаковые, приведу пример первого
cat /etc/ppp/peers/prov 
pty "pptp 10.10.10.10 --nobuffer --nolaunchpppd"
user user
password "pass"
require-mppe-128
defaultroute
replacedefaultroute
unit 0
lcp-echo-interval 30
lcp-echo-failure 4
persist
maxfail 0
holdoff 15
file /etc/ppp/options.pptp
ipparam prov
По дефолту iptables дропает весь трафик, вырезка из того что разрешаю
iptables -A INPUT -p gre -j ACCEPT

iptables -A INPUT -p icmp --icmp-type 3/4 -m state --state NEW -j ACCEPT
iptables-A INPUT -p icmp --icmp-type 4 -m state --state NEW -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -m state --state NEW -m limit --limit 2/s --limit-burst 5 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 11/0 -j ACCEPT

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 0:65535 -j TCPMSS --clamp-mss-to-pmtu -i ppp0
Даже с txqueuelen ppp интерфейса играл, выставлял в 1000, результаты везде нулевые. Я б забил на этот срач в логе и вписал бы в конфиг --loglevel 0 (что в итоге и сделал на втором шлюзе), но на шлюзе с убунтой через несколько дней такого лога пропадает инет. Коннект с ppp серваком не пропадает, в логе никаких ошибок нет. Последний кривой пакет из лога становится восьмизначным и ppp перестает работать. Я уже не знаю куда рыть, заменить ось на дебиан можно, но где гарантия что и дебиан у меня не упадет.

Ubuntu

uname -a
Linux gate 4.15.0-128-generic #131~16.04.1-Ubuntu SMP Wed Dec 9 17:33:47 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

pptp --version
pptp version 1.8.0
Debian
uname -a
Linux gate 4.19.0-13-amd64 #1 SMP Debian 4.19.160-2 (2020-11-28) x86_64 GNU/Linux

pptp --version
pptp version 1.10.0

 , ,

achilles_85
()

Парсер плейлиста

Есть плейлист iptv с сылками вида

#EXTINF
https://tv.com/blabla0/variant.m3u8
#EXTINF
https://tv.com/blabla1/variant.m3u8
#EXTINF
https://tv.com/blabla2/variant.m3u8
#EXTINF
https://tv.com/blabla3/variant.m3u8
Лежит где то по http. Каждая ссылка содержит в себе свой плейлист, в котором можно выбрать качество потока, пример
#EXT-X-STREAM-INF:BANDWIDTH=1500000,PROGRAM-ID=1,RESOLUTION=640x360
https://tv.com/1500000/playlist.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1500000,URI="https://tv.com/1500000/playlist.m3u8"

#EXT-X-STREAM-INF:BANDWIDTH=600000,PROGRAM-ID=1,RESOLUTION=384x216
https://tv.com/600000/playlist.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=600000,URI="https://tv.com/600000/playlist.m3u8"
Нужно прочитать каждую ссылку основного плейлиста, если в ссылке есть выбор потока, то в зависимости от
BANDWIDTH
изменить основную ссылку и привести ее к виду
https://tv.com/blabla0/BANDWIDTH/variant.m3u8

Немного не понимаю как реализовать. Такой цикл

for var1 in $(curl -s http://example.com/123 | grep https)
   do
     echo "$var1"
done
выводит строки с https в переменную var1. Но перемменная var1 в итоге хранит в себе последнюю строку. Как работать очередно с каждой строкой? Найти первую строку, сделать в ней sed, записать куда-то и дальше до последней и после все это в файл?

 , ,

achilles_85
()

VoidLinux и web камера

Помогите одолеть. Ноут Lenovo G50-30. Камера как бы работает,но в то же время и нет. Вместо видео просто розовый фон.

lsusb
Bus 001 Device 004: ID 5986:0652 Acer, Inc
Вот такая камера, в приложениях называется Lenovo Easycam. В чем может быть косяк? Есть другая камера, Logitech, с нее без проблем видео транслируется

 ,

achilles_85
()

Привязка OpenVPN/Wireguard к хосту

Добрый день! Есть ли возможность привязать клиенты к хосту/адресу с которого будет подключение к серверу? Гугление на эту тему выдает только выдачу статики для впн клиентов, но это не то.

 ,

achilles_85
()

Мониторинг состояния батареи

Собственно сам скрипт

#!/bin/bash

exec 2>&1
INTERVAL=60 # in seconds

while true
do
if [ ! "$(cat /sys/class/power_supply/BAT0/status)" = "Full" ]; then
        battery_level=$(cat /sys/class/power_supply/BAT0/capacity)
if [ "${battery_level}" -le "20" ]; then
        notify-send "Battery low" "Battery level is ${battery_level}%!"
        elif [ "${battery_level}" -le "10" ]; then
                notify-send "Battery very low" "Battery level is ${battery_level}%! Suspending system in 1 minute."
                sleep 60
                zzz -z
        fi
fi
sleep ${INTERVAL}
done
Как заряд ниже 20 падает появляется уведомление, но оно всплывает каждые 60 сек. Как сделать так, чтоб оно оповестило разок при заряде 20? Можно написать так
-eq "20"
и при 19 процентах уведомления перестанут донимать, но как то это не правильно, один черт этот 1 процент будет глаза мазолить

 , ,

achilles_85
()

Void Linux wifi

Решил попробовать что за демон такой void. Раньше на этом же ноуте был дебиан 9, 10. Теперь void. Все отлично, за исключением мертвого радио модуля после каждого ребута. rfkill лочит его при каждой загрузке, т.е. по дефолту. Приходится хардварной кнопкой включать его. Можно это как-то вылечить? Пытался в modprob.d играть с options rfkill default_state и options rfkill master_switch_mode, но результата нет. Может кто сталкивался с такой ситуацией?

 , ,

achilles_85
()

Sed нет больше моих сил

Выручайте, заманался я с сабжем Есть кривой IPTV плейлист. Мне в нем нужно заменить кривые названия групп на правильные, с этим проблем не возникло. В плейлисте есть мертвые ссылки, хочу удалить такую ссылку и строку над ней. Пример

#EXTINF:-1 group-title="Фильмы",A1
http://iptv.tv/amedia/playlist.m3u8
#EXTINF:-1 group-title="Фильмы HD",A1 HD
http://iptv.tv/amediahd/playlist.m3u8
Нужно вместо Фильмы HD сделать Фильмы и удалить строку по маске amediahd + предыдущую. Скрипт
#!/bin/bash
sed 's/Фильмы|HD/Фильмы/' original.m3u8 >> new.m3u8
Такая конструкция меняет название и пишет все в новый плейлист. Могу в консоли выполнить вторую часть задачи вот так
sed -n '/amediahd/{s/.*//;x;d;};x;p;${x;p;}' original.m3u8 | sed '/^$/d' > new.m3u8
Не могу все это запихнуть в скрипт. Можно создавая промежуточные плейлисты добиться результата, но не хочу. Подскажите кто знает толк в sed или awk

 , ,

achilles_85
()

RSS подписка на новые темы