Задать вопрос
  • Как подключиться к Windows через SSH под доменным пользователем без связи с доменом?

    @MaxKozlov
    Вот, похоже, ваша проблема, нерешённая
    https://github.com/PowerShell/Win32-OpenSSH/issues/1889

    Судя по описанию, может проявляться если вдруг у вас в sshd ещё и GSSAPIAuthentication yes
    можно попробовать отключить

    Можно ещё посмотреть на
    GSSAPICleanupCredentials
    Specifies whether to automatically destroy the user's credentials cache on logout.
    The default is yes.
    По дефолту как раз yes - отключить
    Ответ написан
    1 комментарий
  • Как разделить интерфейсы wifi (Captive Portal)?

    @Zailox Автор вопроса
    Нашёл решение! (причем на офф сайте OpenWRT)

    Вот оно

    Ещё пришлось донастроить, так как интерфейс 192.168.2.1 не открывался:

    6787c0e0278e2949875341.png
    6787c0e7127e6975403983.png

    Этот кфг нужен конкретно для nds

    Интерфейс Radio0 или Radio1 нужно выбрать в зависимости от сети (5/2.4 GHz)

    И в конфиге NDS (/etc/config/nodogsplash) после туториала нужно сменить

    option gatewayinterface 'br-lan'

    На

    option gatewayinterface 'br-guest'

    Имена интерфейсов и других опций оставил как в туториале, так что всё должно работать.
    Ответ написан
    3 комментария
  • Почему может быть утечка памяти?

    @falconandy
    Используете GoLand? Он подсказывает:
    Possible resource leak, 'defer' is called in the 'for' loop.

    A "defer" statement invokes a function whose execution is deferred to the moment the surrounding function returns, either because the surrounding function executed a return statement , reached the end of its function body , or because the corresponding goroutine is panicking .

    Предупреждение говорит о том, что defer код будет выполнен только при завершении функции, а не итерации цикла. В вашем случае это предупреждение неактуально, но проще немного переписать код, чтобы не было "ругани":

    func (app App) Shutdown() {
    	for _, shutdown := range app.onShutdown {
    		if err := shutdown(); err != nil {
    			log.Println(err)
    		}
    	}
    }
    ...
    defer app.Shutdown()
    Ответ написан
    Комментировать
  • Подключение мышки к FPGA плате DE2-115?

    15432
    @15432
    Системный программист ^_^
    Ну что ж, если задача стоит именно так, то:

    1. Сделать проект с софт-процом NIOS-II
    2. Добавить в него драйвер CY7C67200 для работы с USB устройствами
    3. Добавить USB стек (инициализация устройств, работа с эндпоинтами)
    3. Добавить драйвер HID (парсинг дескрипторов, определение что за устройство подключили)
    4. Добавить драйвер мыши (с колбэками на нажатие кнопок и передвижение)
    5. Написать небольшую программку и скомпилить под NIOS-II для реакции на мышиные кнопки
    6. Соединить это всё в один проект и залить в ПЛИСину

    Где это всё взять - хз, может есть готовые примеры. Несмотря на то, что звучит просто, каждый из пунктов может занять дни, недели, месяцы. С мышью PS/2 всё сильно проще, поэтому уточнил в комменте.
    Ответ написан
    2 комментария
  • Как оптимально организовать сеть ПК клуба на 64 места (выбор оборудования, схема сети)?

    Afranius
    @Afranius
    Из говорящих дольше живут те, что говорят меньше.
    Если вопрос только в шейпинге трафика, то он по сути решён.
    Для прочего рекомендую два свитча: на 48 и 24 порта (с аплинками)
    24 - на вип-зону, 48 - на всё остальное. Аплинки к роутеру.

    Странно, что мест только 64 насчитали, а не 71
    Ответ написан
    2 комментария
  • Может ли соединение между 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
    Дома с переломом ноги
    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 надежнее, чем привычная нам ФС. Лечит сама себя. Если будут ошибки чтения/записи – она сама сообщит вам об этом и даже покажет, какие файлы могли пострадать. Надо только попросить.
    Ответ написан
    Комментировать
  • Как организовать отправку сообщений в множество микросервисных нод?

    Берете какой-нибудь брокер сообщений.
    Например, 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 через него поднять можно (штатным инструментом)
    Ответ написан
    Комментировать