LINUX.ORG.RU

Сообщения letitbe

 

Docker сетевое взаимодействие между контейнерами

Долгое время пользуюсь https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion для всех своих сервисов И радости моей не было предела, и в кишки я не влезал, в общих чертах восхитился системой и пользовался. Пока не захотелось мне поднять у себя jupyter notebook который при прочих равных на отрез отказывался открываться из за nginx-proxy-companion с ошибкой 503. Стал копать, понял, что нет у меня достаточного понимания сетевого взаимодействия. Из nginx контейнера не могу курлом вытащить из контейнера юпитера.

Следуя инженерному подходу решил избавится от всего лишнего, вооружился netcat. И воспроизвёл поведение которое не укладывается у меня в голове как валидное. Что я делаю не так?

Шаг 1 Создал сетку внутри докера :

docker network create myownnetwork

Шаг 2 Запустил контейнер который слушает порт:

$ docker rm container1 ; docker run --name container1 --network myownnetwork ubuntu /bin/bash -c 'apt update && apt install -y netcat net-tools && ifconfig && nc -l -vvv 8080;'
...
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.2  netmask 255.255.0.0  broadcast 172.18.255.255
        ether 02:42:ac:12:00:02  txqueuelen 0  (Ethernet)
        RX packets 4149  bytes 17361595 (17.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3951  bytes 336864 (336.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 6  bytes 674 (674.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6  bytes 674 (674.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

8080: inverse host lookup failed: Unknown host
listening on [any] 46581 ...

Шаг 3 Запустил контейнер который подключается к порту:

docker rm container2 ; docker run --name container2 --network myownnetwork ubuntu /bin/bash -c 'apt update && apt install -y netcat net-tools && ifconfig && nc 172.18.0.2 8080'
...
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.3  netmask 255.255.0.0  broadcast 172.18.255.255
        ether 02:42:ac:12:00:03  txqueuelen 0  (Ethernet)
        RX packets 3042  bytes 17288445 (17.2 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2742  bytes 203702 (203.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 6  bytes 674 (674.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6  bytes 674 (674.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

(UNKNOWN) [172.18.0.2] 8080 (?) : Connection refused

Почему эти 2 контейнера не могут друг с другом общаться? Вроде в одной сети, файрволов внитри докеровской убунты нет.

 , ,

letitbe
()

SweetHome3d поломаный UI

Ищу приложение в котором могу нормально и просто спроэктировать дизайн дома\комнаты.

Поиск вывел меня на SweetHome3d.

Но UI у приложения полностью поломан (судя по всему приложение использует Swing) любое движение вышкой приводит к черноте экрана, наложению эллементов друг на друга и т.д. https://imgur.com/a/ejoHqBn

Пробовал по Gnome\Xfce Xorg\Wayland ...

Кто подскажет как можно поправить?

 , , ,

letitbe
()

Завершение потока с блокирующим вызовом внутри

Уже всю голову сломал, Хотя проблема вроде тривиальная.

Предположим система предоставляет такие API:

 Receive(context); // blocking call until external event or Close
 Close(context); 

Close снимает с receive.

Есть функция потока и деструктор, который должен этот поток остановить :

thread() {
  while (!stop) {
    // ... (code 1)
    Receive(context);
    // ... (code 2)
  }
}

~() {
  stop = true;
  Close(context);
}

Деструктор должен дождаться завершения потока. Но как это сделать?

Ирония в том что если послать Close когда поток будет в состоянии (code1), то вызов Receive всё равно повиснет на бесконечном ожидании внешнего события.

Значит нужно послать Close или в состоянии Receive или в состоянии (code 2). Но как гарантировано дождаться входу в функцию Receive. Если вставить mutex и разблокировать его перед Receive, то состояние гонки всё ещё актуально ( между разблокировкой mutex и вызовом Receive может вызваться преславутый Close).

Найденный мной вариант решения проблемы - греть процессор :

thread() {
  Lock
  while (!stop) {
    // ... (code 1)
    Receive(context);
    Unlock
    // ... (code 2)
    Lock
  }
}

~() {
  stop = true;
  while !Try_lock() {
    Close(context);
  }
}

Таким образом из деструктора я буду долбить Close пока не попаду в code(2). И всё бы хорошо, но Close падает с segmentation fault на повторном вызове, и это ломает всю концепцию.

 , , ,

letitbe
()

Легковесный VPN для коммуникации 2х устройств

Есть проблема.

Нужно с одного устройства ( назовём его клиент) несколько раз подключится по TCP к другому (назовём его сервер).

Но серверное устройство должно считать, что к нему подключились с разных ip адресов (будто разные устройства)

Единственное, что я придумал, это создание нескольких VPN с разными адресами и соответствущая настройка iptables на хостовом устройстве.

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

PS: решение должно быть кросс платформенным в среде UNIX (QNX, Linux).

 , , ,

letitbe
()

Внешнее устройство для Machine Learning

Привет. Стал увлекаться машинным обучением, тренировкой нейронных сетей и всего такого.

У меня достаточно мощный ноут i7 32gb со встроеной видюхой. Более чем достаточно для всех задач, кроме обучения нейронок.

Покупать десктопную машину или ноут с дискретной видюхой не охота.

Есть ли варианты внешнего устройства для машинного обучения?

Всё, что я нешел это вот такая штуковина https://3dnews.ru/978171 Но мощность этого свистка непонятна, в комментариях пишут, что для обучения нейронок тоже маловато.

 

letitbe
()

2 сети в docker compose, одна из которой - хостовая

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

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

Но одному из сервисов так-же нужен доступ во внешнюю (локальную) сеть, он там должен уметь делать discovery.

А во внутреннюю сеть контейнер должен предоставлять REST API.

Но как сделать такое с помошью docker compose я так и не нашел. Сейчас у меня вот такой файл получился.

version: "3"
services:
  telegram-bot:
    container_name : telegram
    image :  basic
    tty: true
    networks:
      - internal
  broadlink-rest:
    container_name : broadlink
    image :  basic
    tty: true
    network_mode: host
    hostname: broadlink-rest
networks:
  internal:
    internal: true

Проблемы которые я не знаю как решить :

1. Из контейнера telegram-bot я могу пинговать ip адресса моей локальной сети, несмотря на то, что она internal: true

2. Контейнер broadlink-rest видит ВСЕ сетевые интерфейсы моей хостовой машины, а я бы хотел, чтоб видел только один.

3. Внутри сети контейнеры динамически получают свои ip адресса. Каждому контейнеру во внутренней сети желательно присвоить какой-то hostname по которому его будут трогать другие контейнеры.

П.С : Буду так-же благодарен за какой-то не наколеночный материал - книгу именно по сетевому взаимодействию докер контейнеров.

 , , , ,

letitbe
()

Разница между man 2 и man 3

Столкнулся с очень неприятной проблемой.

Если одна и та-же функция описана как секции мануала 2 - Unix and C system calls так и в 3 - C library routines for C programs.

Но описание поведеня у функции разное. Как определить поведение у себя в программе? Или как явно сообщить что я хочу использовать именно systemCall или C library function? Ведь и там и так одна и таже сигнатура функции и одни и теже инклуды.

Конкретно я столкнулся в функцией waitpid.

В man 2 говорится так :

The waitpid() system call suspends execution of the calling process until a child specified by pid argument has changed state.

В man 3 говорится так :

The wait() function shall suspend execution of the calling thread until status information for one of the terminated child processes of the calling process is available ... The waitpid() function shall be equivalent to wait() if the pid argument is (pid_t)-1 and the options argument is 0.

Я сначала был уверен в том, что на waitpid уснут потоки моего процесса (согластно man2), а по факту усыпал только один ( согластно man3)

 , , , ,

letitbe
()

Отловить событие монтирования любой флешки

Привет, я бы хотел повестить скриптик на событие монтирования флешки.

Нашел 3 способа : udev, systemd, dbus

Udev завести не удалось, он отлично отлавливает подключение устройства, но монтирование не ловит. А мне нужно именно монтирование

KERNEL=="sd?",ACTION=="mount",RUN+="/home/alex/scripts/backup.sh"
Может я тут что-то делаю не так.

В systemd я нашел как повесить хук ка монтирование конкретной флешки

[Unit]
Description=Triggers backup script when usb backup drive is mounted
RequiresMountsFor=/user/media/alex/BackupFlash

[Service]
ExecStart=/usr/bin/env bash /home/alex/scripts/backup.sh

[Install]
WantedBy=user-media-alex-BackupFlash.mount
Но бы хотел хук на монтирование любой флешки.

Многообещающим был Dbus. И он даже работает почти. За исключением, что он ловит сигналы MountAdded и MountRemoved от интерфейса org.gtk.Private.RemoteVolumeMonitor только для файловой системы /run/media

Это значит, что если я делаю mount руками к примеру в /mnt, то никаких сигналов не тригерится. Ещё мне немного не нравится решение с dbus так как прийдётся зависеть олт glib, а не особо этого хочу.

Может ли мне кто-то подсказать как бы повесить скрипт на монтирование любой флешки с получением пути, к которому примонтирована флешка?

 , , , ,

letitbe
()

Запись выступления с презентацией и внещним микрофоном(Linux)

Привет, форумчане.

ПОдскажите софт для записи доклада с презентацией и внешним микрофоном (на голове или теле выступающего будет)

Какую программу под Linux(ArchLInux) можно использовать? Как захватить видео с камеры, как захватить звук с микрофона, и слайды что переключает выступающий. ЧТоб всё это объеденить в оду видеозапись. Как это обычно на cppcon или в лекциях яндекса.

 , , , ,

letitbe
()

Force update notify-send

Привет,

Использую openbox хочу настроить нотификацию об изменении уровня яркости экрана и громкости. Хотеки прилепил. Думал использовать notify-send. Notification deamon использую xfce4-notifyd.

Думал сделать как-то так

➜  ~ cat ~/scripts/volume_controll.sh 
amixer set Master $1 unmute &&  ~/scripts/get_volume.sh  | head -n 1 | xargs notify-send "Volume level"
➜  ~ cat ~/scripts/get_volume.sh 
amixer get Master | awk -F"[][]" '/%/ { print $2 }'
Но notify-send ставит изменения громкойти в длинную очередь выглядит это совсем не так как я хотел. Хотелось бы, чтоб по каждому клику хотекя изменения громкойти\яркости на экране отображалось значение. Как бы это провернуть?

 , , ,

letitbe
()

Пропадает Wifi после suspend, hibenate, закрытия и открытия крышки ноута

Привет,

Wifi:

  *-network
       description: Wireless interface
       product: QCA6174 802.11ac Wireless Network Adapter
       vendor: Qualcomm Atheros
       physical id: 0
       bus info: pci@0000:03:00.0
       logical name: wlp3s0
       version: 32
       serial: 9c:b6:d0:03:0f:89
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress bus_master cap_list ethernet physical wireless
       configuration: broadcast=yes driver=ath10k_pci driverversion=4.6.4-1-ARCH firmware=WLAN.RM.2.0-00180-QCARMSWPZ-1 ip=192.168.1.4 latency=0 link=yes multicast=yes wireless=IEEE 802.11abgn
       resources: irq:279 memory:dd200000-dd3fffff

uname -a is
Linux alienware 4.6.4-1-ARCH #1 SMP PREEMPT Mon Jul 11 19:12:32 CEST 2016 x86_64 GNU/Linux


Во время обычной работы 
➜  ~ dmesg| grep wlp
[    5.621623] ath10k_pci 0000:03:00.0 wlp3s0: renamed from wlan0
[   15.325012] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   22.189997] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   24.548511] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   34.757782] wlp3s0: authenticate with 68:a0:f6:36:be:54
[   34.794823] wlp3s0: send auth to 68:a0:f6:36:be:54 (try 1/3)
[   34.796359] wlp3s0: authenticated
[   34.797361] wlp3s0: associate with 68:a0:f6:36:be:54 (try 1/3)
[   34.801220] wlp3s0: RX AssocResp from 68:a0:f6:36:be:54 (capab=0x431 status=0 aid=3)
[   34.804622] wlp3s0: associated
[   34.804648] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready

➜  ~ ifconfig | grep wlp
wlp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

После закрытия\открытия крышки ноута

➜  ~ ifconfig | grep wlp    
➜  ~ dmesg| grep wlp        
[    5.621623] ath10k_pci 0000:03:00.0 wlp3s0: renamed from wlan0
[   15.325012] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   22.189997] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   24.548511] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   34.757782] wlp3s0: authenticate with 68:a0:f6:36:be:54
[   34.794823] wlp3s0: send auth to 68:a0:f6:36:be:54 (try 1/3)
[   34.796359] wlp3s0: authenticated
[   34.797361] wlp3s0: associate with 68:a0:f6:36:be:54 (try 1/3)
[   34.801220] wlp3s0: RX AssocResp from 68:a0:f6:36:be:54 (capab=0x431 status=0 aid=3)
[   34.804622] wlp3s0: associated
[   34.804648] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready
[ 2815.523222] wlp3s0: deauthenticating from 68:a0:f6:36:be:54 by local choice (Reason: 3=DEAUTH_LEAVING)

Попытка выгрузить и загрузить драйвер ath10k_pci ничего не даёт

➜  ~ sudo rmmod ath10k_pci
➜  ~ sudo modprobe ath10k_pci
➜  ~ dmesg| tail            
[ 2816.896879] psmouse serio1: synaptics: queried min coordinates: x [1282..], y [1160..]
[ 2817.043835] usb 1-7: reset full-speed USB device number 3 using xhci_hcd
[ 2817.370704] [drm] RC6 on
[ 2818.247277] PM: resume of devices complete after 2249.224 msecs
[ 2818.247389] usb 1-8:1.0: rebind failed: -517
[ 2818.247392] usb 1-8:1.1: rebind failed: -517
[ 2818.247707] PM: Finishing wakeup.
[ 2818.247710] Restarting tasks ... done.
[ 2818.277244] bbswitch: disabling discrete graphics
[ 2818.277252] ACPI Warning: \_SB.PCI0.RP01.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20160108/nsarguments-95)
➜  ~ ifconfig | grep wlp

Полный лог воспроизведения проблемы ( с полными dmesg можно тут увидеть http://pastebin.com/tg8cEBwp)

 , , , ,

letitbe
()

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