Задать вопрос
  • Фоновый режим bat файла?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Смотреть в сторону утилит типа cmdow.
    Ответ написан
    Комментировать
  • Как узнать id только что отправленного ботом telegram?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В чём проблема? Метод API sendMessage возвращает id отправленного сообщения.
    Ответ написан
  • Каким образом узлы в p2p сетях обходят NAT?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, конечно, возможно.

    Часть сети имеет внешние IP и позволяет прямой коннект к ним. При простейшей реализации p2p коннект возможен только между участниками при условии наличия у одного из них внешнего IP. Если узел А хочет установить коннект с узлом Б без внешнего IP (с закрытым портом и прочее, то что в ed2k называлось LowId, в DC - passive mode - и всё такое подобное), то надо, чтобы Б получил информацию об А и установил с ним коннект сам.

    Например, в ed2k клиент с полноценным внешним IP и возможностью коннекта к нему получает HighId, одинаковый на всех серверах, а неполноценный клиент получает непостоянный уникальный в пределах сервера LowId. Чтобы установить коннект между собой, клиенты А и Б должны находиться на одном сервере, а дальше А просит сервер передать Б просьбу установить коннект. Совсем бессерверно (используя DHT) ed2k может работать только с HighId-клиентами.

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

    Самая большая проблема для децентрализованных сетей - это bootstrap при первом запуске, необходимость найти хотя бы одного участника сети, чтобы узнать адреса других. Для этого обычно бывает какой-то сервер с источником начального списка нод, который пользователь прописывает руками или который опрашивается при первом запуске автоматически.
    Ответ написан
    1 комментарий
  • Книги по математике для машинного обучения?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Смотрю предыдущий вопрос: Что учить для работы в сфере IoT?

    Судя по всему, мы имеем обычный случай "найти себя" в какой-нибудь области. Но если по IoT нужны знания больше инженерно-технические, то в ML нужна настоящая теоретическая подготовка по математике. Если всё же очень хочется - начинать можно с любого вузовского учебника по линейной алгебре.
    Ответ написан
  • Как ускорить docker push?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это невозможно. В принципе. Слой загружается на сервер только целиком, нельзя проверять, что в нём отличается только один файл. Тем более отличаться будет не только файл, но и, например, каталог, в который его положили - у него изменится mtime. Всё это отслеживается через контрольную сумму архива слоя, она от любого нового файла меняется.
    Ответ написан
    Комментировать
  • Можно ли использовать Fail2Ban из докера?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ну как бы это вполне возможно. Нужно --net=host, чтобы fail2ban редактировал iptables на хосте, нужно прокинуть (или загнать в образ) конфиг, нужно прокинуть изучаемые им логи, ну и про privileged mode не забыть. Но зачем? Ему же по сути только конфиг надо настроить один раз и везде использовать, вон уже выше ansible посоветовали для упрощения этой операции.
    Ответ написан
    Комментировать
  • Маршрутизация из одной сети в другую через цепочку Wireguard > OpenVPN?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Когда мы идём с самого сервера 192.168.11.3 в 192.168.1.* и 192.168.2.*, то в качестве исходящего адреса выставляется IP местного конца туннеля, в данном случае 10.8.2.3, поэтому всё и работает. Это легко проверить с помощью команды типа:

    ip route get 192.168.1.77

    Когда же подобный трафик приходит с телефона, у него IP-адрес 10.1.3.2. С таким адресом трафик попадает на astrave-mainsrv и в дальнейшем роутится в openvpn либо не пропускается на astrave-mainsrv (смотря как там настроено). Аналогичная фигня происходит с трафиком из сетей 192.168.11.* и 192.168.12.* - он не будет уходить в туннель с адресом источника 10.8.2.3.

    Решение: на astrave-mainsrv весь трафик, уходящий в openvpn, NATить в 10.8.2.3.

    Вот так (тут tun666 - интерфейс openvpn):

    iptables -t nat -A POSTROUTING -s 10.1.3.0/24 -o tun666 -j SNAT --to 10.8.2.3

    Или даже так (тогда можно не задумываться о том, какой IP на нашей стороне туннеля, особенно если он динамический):

    iptables -t nat -A POSTROUTING -s 10.1.3.0/24 -o tun666 -j MASQUERADE

    Или даже можно не особо разбираться с конкретным адресом (тогда заодно с любых IP типа 192.168.11.* заработает, если трафик от них как-то попадёт на astrave-mainsrv):

    iptables -t nat -A POSTROUTING -o tun666 -j MASQUERADE

    Общий смысл: если компания хочет видеть у себя весь трафик подключающегося по VPN сотрудника c адреса 10.8.2.3, то мы весь трафик должны посылать именно с этого адреса, подменяя адрес источника.
    Ответ написан
  • В каких языках есть встроенная возможность и синтаксис для удаления определенных методов и/или свойств наследуемых классов при создании класса?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Весь смысл наследования в том, что экземпляр класса B можно использовать и как экземпляр класса A (но не наоборот). Если из B удалить какой-то атрибут, то что будет с наследованием? Если просто пытаться его как-то скрыть, то это не поможет - ведь можно приведением типов экземпляр класса B превратить в экземпляр класса A и получить обратно свой доступ к нужному полю.

    И вообще, вот, например, есть библиотека, которая умеет работать с объектами класса A. Библиотека скомпилирована кем-то, её исходный код недоступен. Мы определяем класс-потомок B и далее используем функции библиотеки на объектах этого класса. Всё хорошо, но мы уже не можем запретить библиотеке работать с этим полем.

    PS: В своё время намного лучше понять ООП мне помогло чтение описания внутреннего устройства классов в Turborland Pascal. Устроены классы (в Pascal они называются объектами, но это не столь важно) примерно так:

    1. Ссылка на таблицу виртуальных методов (VMT)
    2. Поле 1.
    3. Поле 2.
    ...

    VMT устроена так:

    1. Ссылка на метод 1
    2. Ссылка на метод 2
    ...

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

    За счёт этого даже уже ранее скомпилированный код, ничего не знающий о наследуемых классах, работает с ними как со своими родными.
    Ответ написан
    5 комментариев
  • Поможете разобраться в принципе маршрутизации в схеме подключения?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Как написано - так и работает.

    Вот, например, правило:

    -A POSTROUTING -s 10.1.3.0/24 -o br0 -j SNAT --to-source 192.168.11.3

    Оно должно подменять source у пакетов, прилетевших с адресов 10.1.3.0/24 на выходе в интерфейс br0. Однако если мы пингуем 192.168.1.72, обратно пакеты приходят с адреса 192.168.1.72 и нигде не подменяются на 10.1.3.0/24. А, собственно, зачем их подменять?

    Решать задачу надо иначе. Надо или сделать SNAT (MASQUERADE) на 192.168.1.44 с адресов не только 10.1.3.0/24, но и 192.168.11.0/24 (в этом случае в wg-туннеле будут ходить адреса 192.168.11.0/24):

    192.168.1.44:
    -A POSTROUTING -s 10.1.3.0/24 -o enp4s0 -j MASQUERADE
    -A POSTROUTING -s 192.168.11.0/24 -o enp4s0 -j MASQUERADE

    Либо надо на 192.168.11.3 делать подмену в туннельные адреса, которые в свою очередь заменяются в местный IP уже на "той" стороне (в этом случае в туннеле будут ходить только адреса 10.1.3.0/24):

    192.168.11.3:
    -A POSTROUTING -o wg0 -j MASQUERADE

    192.168.1.44:
    -A POSTROUTING -s 10.1.3.0/24 -o enp4s0 -j MASQUERADE
    Ответ написан
  • В телеграме не подгружается картинка с Wordpress. Почему?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Телеграм кэширует preview ссылок. Поэтому бесполезно менять что-то на сайте, когда он уже запомнил не то, что нужно.

    Решение: находим бота WebpageBot, вводим ему ссылку - и он обновляет preview на серверах Телеграма. Только что проделал это с указанной ссылкой - и всё заработало.
    Ответ написан
    8 комментариев
  • Что будет, если зарегистрировать брендовый домен?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Очень много может зависеть от юрисдикции организации-владельца доменной зоны и от правил этой зоны. Не обладая юридически обоснованным правом на набор букв, можно как годами не испытывать проблем, так и нарваться на чьи-то зарегистрированные права.

    Например, мне известен совсем недавний случай, когда одна крупная международная компания (представленная и в России), производящая продукты питания и использующая некоторый зарегистрированный бренд из двух слов, потеряла домен первое_слово.company из-за того, что оно само по себе было чьим-то товарным знаком. При этом указанная компания могла бы зарегистрировать в _некоторых_ странах этот товарный знак и всё равно потерять домен по причине невладения таким товарным знаком в США.

    Аналогично может пострадать и Сбер, если домен с его названием будет зарегистрирован в юрисдикции, где у него нет товарного знака. В каком-нибудь Вьетнаме, например. Кстати, вьетнамские домены sber.vn и sberbank.vn свободны (наверняка в домене vn есть ограничения на регистрацию нерезидентами), а индонезийские sber.id и sberbank.id захвачены известным российским киберсквоттером.

    Также можно вспомнить, что в нулевые годы гугл долго не мог заполучить gmail.ru и google.ru, поэтому был вынужден ютиться в домене google.com.ru.

    Так что нет универсального ответа на этот вопрос. Если найдётся свободный домен, похожий на чей-то, то иногда может и прокатить. Но если домен будет не просто простаивать, а использоваться по отношению к тому же самому Сберу и хоть сколько-нибудь заметен, то ему это вряд ли понравится, а уж в США у Сбера вполне может найтись давно зарегистрированный товарный знак в качестве инструмента давления.
    Ответ написан
    Комментировать
  • Facebook api как зарегистрированным пользователям на сайте сделать рассылку на email?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это вопрос не к Facebook.

    Регистрация через Facebook устроена так: пользователь жмёт кнопку, его кидает на сайт Facebook, там его предупреждают, что такие-то данные будут переданы такому-то сайту. Включая e-mail (хотя пользователь может вручную запретить передавать именно его). После согласия Facebook передаёт сайту эти данные, в том числе e-mail, и вот в этот момент его надо сохранить в свою базу, чтобы дальше уже своими инструментами посылать письма.
    Ответ написан
    Комментировать
  • Как вывести ВСЁ закодированное json_encode(в php) содержимое файла в python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Смотрим в сторону модуля json

    import json
    
    data = json.loads(dirtyJson)
    print (data["foo"]["bar"][666])
    Ответ написан
    Комментировать
  • Форматирование строк с округлением вниз?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно вот так сделать:

    math.floor(balance*100)/100
    Ответ написан
  • Как сделать кнопку Viber с шаблоном сообщения?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    viber://chat?number=%2B79123456789

    К сожалению, у Viber всё плохо с нормальным документально обоснованным форматом ссылок, и раньше уже переставали работать некоторые из них, например, viber://contacts больше не работает.

    Есть документация по deep link для ссылок на Public Accounts. Есть также такие официальные:

    viber://keypad?number=%2Bxxxxxx - открывает номеронабиратель Viber с этим номером
    viber://chat?service=xxxxxx - ссылка на Viber Service
    viber://more/qr - открывает QR-сканер
    Ответ написан
    Комментировать
  • Можно ли "разбить зеркало" не угробив систему (mdadm)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если это именно зеркало (raid1), то да, можно работать на половинке зеркала, ведь она идентична второй половинке. Например, если с одним из дисков есть аппаратные проблемы, то его меняют, затем синхронизируют данные, причём всё это можно сделать без остановки системы (при наличии возможности горячей аппаратной замены диска).
    Ответ написан
  • Как вывести содержимое файла имея только команды echo и ls?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Владелец файла неважен, важно наличие доступа. Если доступа на чтение нет, то это всё, приехали.

    Так-то кратчайший вариант тут указали:

    echo `<-text.txt-`

    Но я думаю пользователя волновал именно минус в имени, а не наличие cat, и вот с этим побороться легко:

    cat -- -text.txt-
    cat ./-text.txt-
    Ответ написан
    Комментировать
  • Почему в среде Linux админов Vim - это тру, а Nano - для слабаков?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Вопрос в такой форме в принципе не очень корректен. Понятно, что vim может намного больше и намного круче, чем nano, но в конкретной ситуации важно не то, насколько крут используемый инструмент, а твоё личное умение решать задачи.

    Кто-то может быть и хорошо шпарит всякие клёвые штуки на vim, но элементарные задачи будет решать бездумными копипастами со Stackoverflow, чреватыми получением какого угодно (вплоть до деструктивного) результата. А в это же самое время опытный админ типа одного моего хорошего знакомого быстро и эффективно решит все проблемы в малоизвестном нынче, но весьма популярном лет 20 назад среди пересевших с DOS на UNIX редакторе joe. Ничего предосудительного в этом нет.
    Ответ написан
    Комментировать
  • Возможно ли динамически сформировать файл конфигурации, если требует указать к нему путь?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно сделать как-то так:

    echo some_file_content | command /dev/stdin

    Тогда команда получит в качестве имени файла /dev/stdin, который означает стандартный ввод и будет при чтении возвращать строку some_file_content. Но надо учитывать, что seek по такому файлу невозможен, поэтому если программа не просто читает файл построчно, а пытается перемещаться по нему, то это не сработает.

    Если не хочется занимать stdin или надо передать так несколько псевдофайлов, можно сделать так:

    command <(echo some_file_conten)

    Фактически command получит в качестве аргумента что-то типа /dev/fd/63. Можно убедиться, сделав

    ls -l <(echo hello)

    Но в целом не стоит слишком бояться создавать временные файлы. Это быстро, ведь если генерировать его непосредственно перед запуском, то данные сразу будут в дисковом кэше и прочитаются программой моментально.
    Ответ написан
    1 комментарий
  • Чьи права примонтированной папки в докер? Контейнера или хоста?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это точно один и тот же файл? Можно сделать stat на файл в системе и отдельно в контейнере, зайдя в него по docker exec. Если inode у файла разный - это разные файлы. Возможно, с пробросом в докер что-то напутано.

    Как называется пользователь зависит от содержимого файла /etc/passwd, который в контейнере и на хосте разные. Пользователь в Linux идентифицируется по uid - это просто числовой идентификатор. Соответственно, uid=0 это root, теоретически его можно переименовать, но так никто не делает.
    Ответ написан
    Комментировать