Задать вопрос
  • Может ли соединение между 2 серверами на Linux быть одновременно и локальной сетью и мостом?

    @rPman
    Сетевые устройства типа link/ether могут быть объединены в bridge и полученное устройство так же будет типа link/ether и ему можно назначить ip адрес (собственно у него будет полноценный mac и он получит его автоматически), по факту сетевой мост это виртуальный неуправляемый коммутатор (свитч), которые могут быть подключены каскадно (только кольца не нужно делать).

    Если у тебя есть какой-либо vpn, так же создающий link/ether (pppoe это тоже), то его можно добавить в сетевой мост и он так же будет работать как ожидается. Т.е. у тебя может быть сетевой мост на нескольких компьютерах в сети, каждый компьютер может поднять свой vpn ether, и добавить его в этот сетевой мост. в итоге все эти vpn сети будут объеденены в одну локальную сеть, без настроек маршуртизации и дополнительных шевелений.

    p.s. могут быть нюансы с arp таблицами, например при создании сетевого туннеля типа ethernet с помощью ssh, и объединение его tap0 в сетевой мост с физическим устройством из локальной сети будет работать, но с задержкой (примерно в 20 секунд) с момента подключения, пока информация об удаленных устройствах сети доедет до локальной (по крайней мере я эту проблему понял именно так), по каким то причинам, передобавление устройства в мост эту таблицу у bridge в других компьютерах локальной сети сбрасывает
    Ответ написан
    Комментировать
  • Как запускать программу если она постоянно отключается?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Если программа консольная - засуньте ее в сервис, с настройкой авторестарта
    с помощью sc.exe (специально пишу с расширением, поскольку в Posh - sc это алиас для коммандлета set-content)
    или используйте nssm
    Ответ написан
    Комментировать
  • Как подстраховаться на будущее?

    CityCat4
    @CityCat4 Куратор тега VPN
    //COPY01 EXEC PGM=IEBGENER
    ky0 дал единственный правильный ответ. Частично. Поскольку РК в будущем будет входить в "красный" сегмент, если принципиально важен доступ к сайтам Европы и Штатов, то РК - транзитный узел на пути куда-нибудь в Европу/Америку/Австралию etc (которые будут входить соответственно в "радужный").

    Распад тырнета на сегменты - к сожалению ближе, чем мы все думаем. Причем нынешняя эпопея VPN - она его ускоряет.

    Еще минутка "оптимизма".

    Как я вижу будущее тырнета (не ближайшее, но увы, уже ближнее):
    - внутри страны - без ограничений (ну в смысле с ограничениями местного РКН)
    - вне страны - либо просто болт (если белый список), либо "зарегистрировать VPN" в местной Конторе и пользоваться им (зная, что "Родина слышит, Родина знает...")
    Ответ написан
  • Почему busybox wget не работает, пока не запустить вручную openssl?

    @rPman
    По больше бы таких интересных вопросов.

    Задал ваш вопрос openai:o1-preview, ответ выглядит очень логичным:
    Вызвано недостаточной энтропией в генераторе случайных чисел (RNG) вашей минимальной системы.
    В системах Linux безопасные операции, такие как установление SSL/TLS-соединений, требуют случайных чисел, сгенерированных из системного пула энтропии.
    В вашей минимальной системе очень мало активности для генерации энтропии (например, нет дискового ввода-вывода, сетевой активности, пользовательского ввода), поэтому пул энтропии мал.

    Когда `wget` пытается установить HTTPS-соединение, он полагается на эту энтропию. Если ее недостаточно, библиотека SSL не может сгенерировать необходимые случайные значения, что приводит к сбоям соединения, таким как «Сброс соединения одноранговым узлом».
    ...
    Когда вы запускаете `openssl s_client`, он выполняет операции, которые помогают накапливать энтропию.

    **Как это исправить:**

    1. **Убедитесь, что `/dev/random` и `/dev/urandom` существуют:**
    - Убедитесь, что в вашей системе есть эти устройства:
    ```sh
    ls -l /dev/random /dev/urandom
    ```
    - Если их нет, создайте их:
    ```sh
    mknod -m 666 /dev/random c 1 8
    mknod -m 666 /dev/urandom c 1 9
    ```

    2. **Заполните пул энтропии при запуске:**
    - **Используйте демон сбора энтропии:**
    - Включите в свою сборку такой инструмент, как `haveged` или `rng-tools`. Эти демоны генерируют энтропию на основе таймеров или аппаратных ГСЧ.
    - Например, с `haveged`:
    - Скомпилируйте и установите `haveged` в свою систему.
    - Запустите его при запуске:
    ```sh
    haveged -w 1024
    ```
    - **Ручное заполнение энтропии (менее безопасно):**
    - Если добавление демона невозможно, вы можете вручную заполнить энтропию (обратите внимание, что это менее безопасно и не рекомендуется для производства):
    ```sh
    dd if=/dev/urandom of=/dev/random bs=1 count=512
    ```
    - Эта команда записывает случайные данные обратно в `/dev/random`, помогая заполнить пул энтропии.

    3. **Проверьте уровни энтропии:**
    - Отслеживайте доступную энтропию:
    ```sh
    cat /proc/sys/kernel/random/entropy_avail
    ```
    - Значение ниже 100 может привести к блокировке или сбою операций SSL.

    4. **Используйте аппаратный генератор случайных чисел (если доступен):**
    ...

    Посмотри, что показывает cat /proc/sys/kernel/random/entropy_avail
    Ответ написан
    3 комментария
  • Как определить MAC-адрес в ОС AstraLinux активной сетевой карты?

    ip --json link | jq -r '.[]|select(.operstate=="UP").address'
    Ответ написан
    Комментировать
  • Как сделать эффект текста на кривой безье?

    @garbagecollected
    Математика трансформаций очень простая.

    Отрендерить текст на изображение можно используя
    https://opentype.js.org/

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

    Либо использовать эту же библиотеку для того, чтобы получить path data для каждой буквы.

    Если ваша трансформация сводится к аффинным преобразованиям, то можно рассчитывать координаты не каждой точки изображения буквы, а только точки, которые участвуют в path data. Таким образом трансформируя все точки path data вы получите такую же path data, используя которую вы начертаете шрифты в любом месте на любом изображении. Это может дать очень выгодный прирост к производительности (потенциально до 1000х раз). Кроме того, линии path data "рисуется" с правильным расчетом межпиксельного пространства, и вам не надо будет делать ресамплинг, как при работе с трансформированием изображений.

    Но рисовать шрифты по безье - это не всегда можно свести к аффинным преобразованиям.

    На верхней иллюстрации у вас используется искажение по оси X: skewX()

    Получить координаты каждой точки можно умножив матрицу с исходными точками на матрицу CTM.
    https://www.w3.org/TR/SVG11/coords.html#TransformM...

    Сама матрица CTM - это произведение матриц всех трансформаций. То есть, чтобы не умножать матрицу точек на матрицы каждой трансформации, сначала вычисляется произведение матриц всех трансформаций, которое называется CTM.

    По ссылке выше вы найдёте матрицы с формулами аффинных преобразований в двухмерном пространстве. Матрицы имеют вид (3х3) из которых 6 чисел значимые, 3 числа - статичные (всегда [0, 0, 1]).

    Для 3D-преобразований используются матрицы 4х4 из которых 12 чисел значимые, 4 числа - статичные (всегда [0, 0, 0, 1]):
    https://drafts.csswg.org/css-transforms-2/#mathema...

    Для расчета 3d-трансформаций с учетом перспективы используются матрицы 8х8.

    На нижней иллюстрации у вас используются трехмерные искажения.

    Про математику 3D искажении с перспективой можно прочитать тут
    https://www.cs.cmu.edu/~ph/texfund/texfund.pdf
    Там рассматриваются и формулы получения координат на плоскости и ресамплинг (чтобы, например, не было пикселизации шрифтов после трансформации).

    Для перемножений матриц можно использовать функцию

    const multiply = (a, b) => a.map((_, r) => b[0].map((_, c) => a[r].reduce((s,_,i) => s + a[r][i] * b[i][c], 0)));


    Рассчитать координаты безье можно функциями (соответственно, квадратичная и кубическая безьё):

    // [p0x, p0x] - are coordinates of origin point
    // [p1x, p1y] - are coordinates of single control point
    // [p2x, p2y] - are coordinates of destination point
    // T - is number of points that needs to draw the curve
    const quadratic = ([p0x,p0y], [p1x,p1y], [p2x,p2y], T = 60) => {
      const x = t => (1 - t)**2 * p0x + 2 * (1 - t) * t * p1x + t**2 * p2x;
      const y = t => (1 - t)**2 * p0y + 2 * (1 - t) * t * p1y + t**2 * p2y;
      return Array.from({ length: T+1 }).map((_, t) => [x(t / T), y(t / T)]);
    };
    
    // [p0x, p0x] - are coordinates of origin point
    // [p1x, p1y] - are coordinates of first control point
    // [p2x, p2y] - are coordinates of second control point
    // [p3x, p3y] - are coordinates of destination point
    // T - is number of points that needs to draw the curve
    const cubic = ([p0x, p0y], [p1x, p1y], [p2x, p2y], [p3x, p3y], T = 60) => {
      const y = t => (1 - t)**3 * p0y + 3 * (1 - t)**2 * t * p1y + 3 * (1 - t) * t**2 * p2y + t**3 * p3y;
      const x = t => (1 - t)**3 * p0x + 3 * (1 - t)**2 * t * p1x + 3 * (1 - t) * t**2 * p2x + t**3 * p3x;
      return Array.from({ length: T+1 }).map((_, t) => [x(t / T), y(t / T)]);
    };
    Ответ написан
    1 комментарий
  • Полноценная Убунта поверх WSL?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Это https://apps.microsoft.com/detail/9pn20msr04dw?hl=... и есть полноценная Ubuntu внутри WSL.
    Для того, чтобы в ней запускались графические приложения - нужно обновить версию wsl до 2 https://learn.microsoft.com/en-us/windows/wsl/install последнего релиза
    https://github.com/microsoft/WSL/releases
    И она работает так же хорошо, как и отдельно стоящая ОС, а также решает проблемы с тормозами docker в Windows.
    Ответ написан
    7 комментариев
  • Вопрос по надежности ZFS. Как лучше делать датасеты: со сжатием или без?

    @elbrus56
    Не очень понятно: речь о сжатии или шифровании пула.

    Если речь о сжатии, то значения не имеет, так как даже для страйпа пишется два блока метаданных. А если хочется, то можно настроить хранение копии блоков данных на том же диске. Что касается так называемых суперблоков, в которых хранится критически важная информация о структуре данных на диске, то ZFS по умолчанию старается разнести их подальше друг от друга на диске.

    ZFS надежнее, чем привычная нам ФС. Лечит сама себя. Если будут ошибки чтения/записи – она сама сообщит вам об этом и даже покажет, какие файлы могли пострадать. Надо только попросить.
    Ответ написан
    Комментировать
  • Как настроить WireGuard для нескольких клиентов на Микротике?

    @AlexVWill
    А ключи для каждого клиента (для каждого пира) уникальные? Проверь мануал, я точно не помню как там должно быть, давно не пользовался, но по идее пира только публичный ключ должен совпадать с интерфейсом, а приватные должны быть разные для всех клиентов. Просто если нет, подключение второго аналогичного может вышибать первый подключенный, если я верно проблему уловил.
    Ответ написан
    Комментировать
  • Как организовать отправку сообщений в множество микросервисных нод?

    Берете какой-нибудь брокер сообщений.
    Например, Rabbitmq.
    Там создаёте exchange с типом fanout. Туда будете слать сообщения из сервиса-отправителя.
    Каждый сервис-получатель будет подключаться к этому exchange и для каждого будет создаваться своя очередь, куда будут попадать все сообщения. И каждый сервис спокойно сам вычитает свою очередь. И даже если он упадёт, то дочитает их после того, как подымется.
    https://youtu.be/P_EtQ-s-hiU?si=tavSDSzTnGpqQrAY
    Ответ написан
    2 комментария
  • Какой отечественный linux выбрать для веб-разработки?

    @atabrakadabra
    любой линукс для десктопа не годится
    Ответ написан
  • Возможно ли переписать это на PowerShell?

    @d-stream
    Готовые решения - не подаю, но...
    вот скормил ии и он даже на cmd сотворил
    for %%F in ("%source_folder%\*") do (
        call rling "%%~fF" "%compare_folder%"
        type result.txt >> %output_file%
        del /q result.txt


    на powershell
    if (!(Test-Path $outputFile)) {
        New-Item -Path $outputFile -Force | Out-Null
    }
    Get-ChildItem -Path $sourceFolder -File | ForEach-Object {
        & rling $_.FullName $compareFolder
        Get-Content -Path '.\result.txt' | Add-Content -Path $outputFile
        Remove-Item -Path '.\result.txt' -ErrorAction SilentlyContinue
    }


    ну и да, если предварить каждую команду в исходном тремя буковками wsl - то тоже будет результат)

    p/s/ кстати интересная логика у ии)
    Ответ написан
    4 комментария
  • Домашний сервер или NAS - чем обойтись?

    @TheBigBear
    СтарОдмины мы
    Самое простое решение:
    Ставьте обычный, не серверный Windows - 10 или 11 - не важно, главное версия Pro а не Home
    1. Расшарьте нужную папку - у Вас появится сетевой ресурс, который Вы сможете подключить на ноуте как сетевую папку. У не серверной ОС ограничение на 20 одновременных подключений - вам хватит за глаза
    2. Параметры - Система - включить удаленный рабочий стол
    Это позволит подключаться к Вашему "серверу" удаленно по протоколу RDP с помощью программы "удаленный рабочий стол" и работать с установленными на нём программами как на своем компьютере
    3. Параметры - Система - дополнительные компоненты - другие компоненты Windows - добавить Hyper-V
    Получите виртуальный сервер и сможете установить на него Home Assistant. Ну или еще какие нужно серверы - лишь бы памяти хватило.
    4. iVMS от HiWatch или любую другую CMS (если камеры поддерживают ONVIF - непринципиально) - вот и сервер видеонаблюдения готов
    Ответ написан
    1 комментарий
  • Как создать навык для Алисы для проигрывания аудиопотока?

    the_house
    @the_house
    Full stack разработчик
    import logging
    from flask import Flask, request, jsonify
    
    app = Flask(__name__)
    
    @app.route('/api/v1/skill', methods=['POST'])
    def skill():
            request_json = request.json
            if 'request' in request_json:
                    command = request_json['request']['command']
            if 'Включи аудио стрим' in command:
                    response_text = 'Включаю аудио стрим'
                    url = 'http://you.site/stream.mp3'
                    return jsonify({
                            "version": request_json['version'],
                            "response": {
                                    "text": response_text,
                                    "tts": response_text,
                                    "buttons": [],
                                    "end_session": False
                            },
                            "session": request_json['session'],
                            "user_id": request_json['session']['user_id'],
                            "audio": {
                                    "url": url
                            }
                    })
            return jsonify({'status': 'error'})
    
    if __name__ == '__main__':
            app.run(host='0.0.0.0', port=5000)
    Ответ написан
    2 комментария
  • Установка прав доступа на все файлы?

    @rPman
    Правильное решение - не работать из под root, копирование файлов производить под тем же пользователем (или пользователем в той же группе что и скачивающий), тогда проблем с настройками прав не возникнет.

    p.s. на сколько я знаю в каких то ftp серверах была возможность принудительно задать пользователя, под которым сервер будет запущен и авторизован, а авторизация пользователя ftp не будет соответственно авторизации ОС, тогда запущенный под root сервер решил бы твою проблему, но это огромная дыра, так давно уже не поступают.

    p.p.s. ftp на столько устаревший протокол, что удобные решения для него уже мало кем поддерживаются (т.е. для галочки базовый сервер еще входит в репозитарии, но нафиг никому не нужен)

    пользуйтесь sftp/scp, который встроен по умолчанию в ssh сервер, который есть для любой ОС на планете, стандарт безопасного подключения, на столько многофункционален. что даже vpn через него поднять можно (штатным инструментом)
    Ответ написан
    Комментировать
  • Как вывести имя компьютера на экран входа в систему?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Да, это достаточно легко сделать. В любом формошлёпе клепаете простейшую форму и в ней выводите имя машины, окну ставите стиль ToolWindow (WS_EX_TOOLWINDOW), без бордера (а еще хорошо бы отключить системное меню и закрытие через Alt+F4). Устанавливаете вот этот Windows-logon сервис, а в настройках указываете ранее созданное приложение.
    Ответ написан
    9 комментариев
  • Как совместить traefik в докере и nginx на хосте?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    1. Не делайте expose port для докер контейнера
    2. Не запускайте контейнер с network=host
    и ваш контейнер не будет занимать порты nginx.
    Ответ написан
    Комментировать
  • Какая версия MacOs лучшая для MacBook Pro 2018?

    xez
    @xez
    TL Junior Roo
    Последняя лучшая
    Ответ написан
    Комментировать