LINUX.ORG.RU

Избранные сообщения frunobulax

Где вы храните схемы описания софта, подобные блок-схемам?

Форум — Talks

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

Где вы размещаете подобные схемы и в чем их рисуете?

Хотелось бы держать это близко к коду, чтобы оно не протухало.

Пока вариант Shinx + png + исходник этого png (в любом формате в котором человек его рисовал, например drawio или tikz или svg)

 , ,

omegatype
()

fproxy v80 — локальный прокси-сервер для фильтрации http(s)-трафика

Новости — Интернет
Группа Интернет

Опубликована 80-я версия кэширующего и антиспамного прокси-сервера для персонального использования c гибкими настройками.

( читать дальше... )

>>> Подробности

 , , ,

firkax
()

Ventoy 1.0.67 с поддержкой загрузки образов с локальных накопителей

Новости — Open Source
Группа Open Source

В утилите Ventoy, предназначенной для загрузки ОС ПК и ноутбуков с файлов образов различных дистрибутивов, добавлена полноценная поддержка загрузки файлов ISO/WIM/IMG/VHDx/EFI напрямую с локальных накопителей без необходимости их копирования на загрузочную флешку (клавиша F2 на загрузочном экране Ventoy).

Инструкция по локальной загрузке с использованием специально подготовленных vlink-файлов

Ventoy — это кроссплатформенная утилита для Linux и Windows, созданная с целью заменить такие утилиты как Rufus, UNetbootin, balenaEtcher, ROSA Image Writter, Mac Linux USB Loader, mintstick и прочие проекты, часть из которых заброшена. Поддерживается загрузка образов Windows, WinPE, Linux, ChromeOS, Unix, VMware, и другие. Программа распространяется по лицензии GPLv3.

Ventoy поддерживает таблицы разделов MBR и GPT, Legacy Bios Boot, UEFI, Secure Boot, автоустановочные сценарии для Ubuntu, Debian, RedHat, SUSE и Windows.

В случае, когда необходимо часто создавать загрузочные флешки для различных ОС, использование Ventoy вместо традиционных утилит «Image Writer», поставляемых в составе многих популярных дистрибутивов, продлевает срок службы носителей, так как требует однократной установки, без необходимости постоянного затирания начальных секторов устройства и/или пересоздания таблицы разделов. Для установки Ventoy на флешку предлагается графический интерфейс на GTK3/Qt5. В процессе установки создается раздел exFAT с максимальным размером устройства, на который достаточно просто скопировать ISO файл ОС (НЕ используя утилиты вроде dd, cat). Этим же разделом можно продолжать пользоваться как обычно для хранения/копирования данных без повреждения работоспособности установленной на флешку Ventoy.

>>> Подробности

 , , ,

bhfq
()

Zabbix 6.0 LTS

Новости — Open Source
Группа Open Source

Состоялся выпуск свободной и бесплатной системы мониторинга с полностью открытым исходным кодом Zabbix 6.0 LTS.

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

( читать дальше... )

>>> Подробности

 , ,

alexvl
()

Где добыть на пару дней несколько тестовых виртуалок за дешево?

Форум — Talks

Короче надо: 3 виртуалки на убунте, возможность их быстрой перезаливки/пересоздания, 2 ядра 4 gb ram. Есть идеи что будет самым дешевым?

Вариант развернуть на каком-нибудь виртуалбоксе и снять снапшоты рассматривал, не устраивает что это всё же +- долго на старте и несколько лень.

 ,

phoen
()

Пишем сольник

Галерея — Скриншоты

Скриншот самостоятельной ценности вообще не имеет, поскольку ничего такого на нём нет. ОС ALT P9, Raspberry Pi4, Audacity, lxqt из стартеркита, настроенная по моему испорченному гномом вкусу.

История проекта такова: как-то прошлой весной на карантине, я задумал записать парочку своих песен. Чтобы это сделать, я собрал в кулак свои гитары и понял, что их недостаточно. Докупил полуакустику, 12-струнку и акустический бас. Приправил комбарём Yamaha THR10C. Собрал всё вместе и понял, что всё это нехорошо, потому что комп шумит.

Так я стал обладателем четвёртой малинки с пассивным охлаждением. Четыре гига хватит всем, если в интернет не ходить.

Схема записи такова:

Гитара → Yamaha THR10C → Raspberry Pi4
Микрофон (Октава МК-105)/синтезатор → Allen&Heath ZED12FX → Raspberry Pi4

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

На скриншоте показан процесс записи гитары и вокала. Но сразу скажу, вокал в итоге пришлось писать на нормальной студии, потому что дома микрофон ловит проезжающие за окном троллейбусы. Летом попробую в деревне изолировать чердак, может, будет получше. Песни-то у меня ещё есть :-)

CC-BY-NC: https://disk.yandex.ru/d/SoL9bi5QmyBw2g

 , ,

Aceler
()

Как вы настраиваете частоты для гитар?

Форум — Multimedia

Собственно. Пишу простенькую песенку в Ardour, чисто для пробы, и понимаю, что звук гитар по частотам не очень, надо бы подправить, а то ритм-гитара (в два отдельных трека, по очереди писал) с соло смешивается, да и басуху не очень слышно. Кто какие частоты в эквалайзере выставляет?

sudo cast @AP @sadko4u @R_He_Po6oT @James_Holden

P.S. Linux здесь при том, что всё под ним пишется.

 

Korchevatel
()

Awesome WM + всплывающий терминал

Форум — Desktop

Оставлю свой вариант, вдруг, кому пригодится. Долго искал, пробовал tilda, yakuake, guake, alacritty и просто куски кода... Раньше пользовался tilda в FVWM, но с Awesome WM оно не стыкуется...

Решение в виде коммита, без доп. библиотек, кому нужно, думаю, прикрутит себе. А может кто подскажет, что я идиот и было решение проще. :)

коммит, дубль, скрин.jpg // сначала сделал автоперемещение за мышью / по хоткеям при смене screen/экрана, но потом понял, что неудобно, оставил минимум. После максимизации окна, перемещения/закрытия оно сохраняет размер.

local mywibox_height = 14.5
local function update_quake_console(cli)
    if cli == nil then
        for c in awful.client.iterate(function (c) return c.instance == "QuakeConsole" end)
        do
            cli = c
            break
        end
    end
    if cli == nil then return end

    if (not cli.hidden) then
        cli.floating = true
        if cli.maximized then
            cli.border_width = 0
        else
            cli.border_width = 2
            cli.width=awful.screen.focused().workarea.width * 0.96
            cli.height=awful.screen.focused().workarea.height * 0.7
            cli.x = awful.screen.focused().workarea.width * 0.02
            cli.y = awful.screen.focused().workarea.height * 0.3 + mywibox_height
        end
        cli.ontop = true
        cli:move_to_screen(awful.screen.focused ())
        cli:tags({awful.screen.focused().selected_tag})
        cli.skip_taskbar = true
        client.focus = cli
    end
end

    -- Quake Console --
    awful.key({ modkey }, "grave",
        function ()
            os.execute ("pgrep -O1 -f QuakeConsole || urxvt -name QuakeConsole -title QuakeConsole &")
            for c in awful.client.iterate(function (c) return c.instance == "QuakeConsole" end)
            do c.hidden = not c.hidden end
            update_quake_console(c)
        end,
        {description = "toggle quake console", group = "quake"}
    )

client.connect_signal("manage", function (c)
...
    if c.name == "QuakeConsole" then update_quake_console(c) end

UP1. 3 терминала по ~,-,+: скрин, rc.lua, rc.lua дубль. Размеры окон сохраняются после hide/fullscreen/maximize.

 , ,

backbone
()

Дистрибутив для tmpfs с поддержкой обновления

Форум — General

Собственно сабж. Допустим, файловая система упакована в squashfs. Нужен простой способ обновлять этот образ.
Если взять например обычный debian или убунту, сделать apt-get ..., то изменения естественно будут в оверлее.
Может есть инструменты для автоматизации обновления внутри образа (для какого-нибудь дистрибутива, или специальный дистрибутив)?

 , , ,

TheAnonymous
()

USB-адаптер для Bluetooth 4.0+

Форум — Linux-hardware

Хотел бы узнать, есть ли в наших магазинах USB-адаптеры для bluetooth стандарта 4.0+, без проблем работающие (в основном, для наушников) в линуксе (ubuntu, arch) ?

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

Однако срок доставки 25/05/2020 — это как-то очень долго...

 ,

AlexM
()

booty2 != booty 2.0

Форум — Talks

мемный заголовок))) ладно, теперь серьёзно. >:|

Я вернулся! И начал писать с нуля вторую версию своего имба-поделия под названием Booty. От слова Boot. Цель у этой штуки всего одна: лёгким движением пальцев рук создавать загрузочные образы операционных систем.

https://github.com/sp00f1ng/booty/tree/booty2 // Это пре-альфа версия, многие планируемые функции ещё не реализованы.

Сборка загрузочного образа состоит из трёх ключевых этапов: сборка ядра, сборка initramfs и сборка iso.

Система внутри — всегда ваша, любая, на выбор. Вы можете любую систему установить в директорию, в chroot, а потом закатать её в ISO всего одной командой booty chroot/, либо целиком весь /dev/sda упихать в загрузочный ISO или initrd, не суть важно. При этом, загружается система на ваш выбор, хоть в голое tmpfs, хоть в SquashFS + Overlay FS. Такая главная идея booty. Всё это уже реализовано в первой версии, но сейчас надо сделать _проще_.

Основные отличия от первой версии:

  • booty >= 2.0 теперь самостоятельно собирает ядро, проводя весь процесс «от» и «до»: скачает, распакует, соберёт, аккуратно положит куда надо.
  • Чёткое разделение на API и пользовательский интерфейс, то есть, каждая вызываемая функция теперь самодостаточна и может быть выполнена независимо от контекста: вы можете использовать интерфейс booty >= 2.0 по-отдельности для личных целей, например, собрать ядро последней версии.
  • Самая главная моя задача сделать booty >= 2.0 настолько юзер-френдли, насколько это в принципе возможно. Чтобы поведение предугадывалось и было логичным. Настолько, что запуск booty без каких-либо параметров всё равно выплюнет вам какой-нибудь загрузочный ISO, я пока только не решил, что в него складывать, но дело тривиальное задать все параметры по-умолчанию.

Например, запуск команды booty linux скачает ядро Linux последней версии, распакует, соберёт и установит во временную директорию.

Другие примеры:

booty linux 5.7.12 — соберёт ядро указанной версии.

booty linux --install-path / — соберёт ядро последней версии и установит прямо в /, так что если вы могли бы доверить свой / моей booty, этим можно пользоваться и вне контекста создания загрузочных образов. По-умолчанию же создаётся /tmp директория для --install-path, куда ядро будет установлено в любом случае.

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

booty linux --cache /usr/src

Представим ситуацию:

1) Я хочу собрать 2 образа для сервера, и 8 образов для декстопа.

2) Ядро последней версии.

3) Конфиг разный.

booty linux 5.11.11 for-workgroups --config .config1 --cache /usr/src

booty linux 5.11.11 for-workstations --config .config2 --cache /usr/src

Ядра будут собраны ровно по одному разу, а далее, при повторном запуске сборки образов, они уже будут браться из кэша.

Грубо говоря-мягко выражаясь, запустив в цикле while true; do booty linux --cache /usr/src; done ядро будет загружено и собрано ровно один раз, а далее оно помещается в --cache, и при повторном запуске оно будет просто устанавливаться раз за разом во временную /tmp директорию. Так!

А ещё можно сделать принудительный --force-download и --force-rebuild если надо обновить данные в кэше.

А можно вообще не использовать кэш и каждый раз заново качать-собирать всё с нуля. Такое поведение по-умолчанию. Хозяин барин.

Другие команды:

booty linux_via_http версия имя --force-download --install-path путь, в будущем планируется добавить linux_via_git, но пока http и парсинг html-кода bash-скриптами работает стабильно, это не спеху. )))

booty linux_build директория-с-сорцами --config-file конфиг --install-path путь

booty ramdisk --image initrd.img для создания initramfs-образа, используя родные бинарники прямо из вашей системы. Опциональный busybox и другие плюшки будут прикручены уже апосля.

Вообще в этот раз планируется интерфейс делать примерно таким:

booty новая_папка(1)/ новая_папка(2)/ новая_папка(3)/ --profile overlayfs

И эта команда полностью, от и до, подготовит ядро, и упакует указанные директории в SquashFS, и в финале выплюнет загрузочный ISO с системой.

Простой запуск booty новая_папка(1)/ либо с указанием --profile initramfs приведёт к поведению по-умолчанию: упихать всю «новая_папка(1)» в initramfs-образ.

Теперь я планирую использовать профили, которые пользователи смогут создавать сами и расширять имеющиеся возможности booty.

Но на этом пока всё. Официальная документация — потом! Надо ещё много кода писать. =)

 

Spoofing
()

Простой кросс-платформенный способ обмена файлами

Форум — General

Вот есть у нас набор популярных систем (мобильных и не очень): linux, windows, android, macos, ios и надо перекидываться между ними файлами (небольшими, до 10mb), какой самый простой и универсальный способ (обычный кейс - между своими устройствами, расширенный - еще и чужим иногда скинуть)?

  • Bluetooth - есть не на всех стационарных ПК, последний раз использовал давным-давно на symbian смартфоне, а потом как-то не сложилось
  • Традиционные SMB/FTP/HTTP/NFS - четкое разделение на клиент и сервер, сервер надо еще настроить
  • Облака (gdrive, dropbox, icloud) - давно ими не пользовался, но вроде есть ограничения по числу подключенных устройств, не все есть подо все платформы, из плюсов - у некоторых возможность делиться файлами между аккаунтами без привязки себе чужих устройств. Из минусов - почти все гоняют трафик через сервера (dropbox, вроде умел синхронизировать в пределах локалки) и без доступа в интернет могут отказаться работать.
  • Частные облака (syncthing, seafile, btsync) - скажу по опыту пользования первым. Работает в пределах локалки и без доступа к интернету, но если хочешь перекинуть файлы не на свое устройство, то надо добавлять к себе в «экосистему» и потом выгонять. Ну и все эти облака (включая предыдущий пункт) работают не с файлами, а с катологами в которые надо перекидывать файлы (локально, окей можно симлинкать, но на лопате это не особо удобно делать) и потом ждать синхронизации. Еще вопрос к iOS и их песочницам, какие файлы в системе будут доступны таким внешним приложениям.
  • Чатики - Да-да, те самые telegram, tox и прочие не имеющие проблем с передачей файлов из коробки (xmpp в пролете). Обнаружил, когда надо было передать файл с десктопа на лопату, что qtox+antox самый простой способ это сделать, плюс работает без доступа в интернет. Но если отбросить последний пункт и принять что почти у всех есть какой-то чатик, то самый простой способ обменяться файлами - это именно они (да с копированием через сервер, но изначально речь шла про небольшие: до 10mb, даже до 100mb можно не сильно долго ждать).

К чему это все. Неужели за столько лет не изобрели простенький способ обмениваться файлами между устройсвами (хотя бы своими) по tcp/ip, кроме инструментов изначально заточенных под другие цели (общение)?

 , ,

Kolins
()

Вебные аналого-цифровые индикаторы.

Форум — Web-development

По итогам Есть ли что-то типа Grafana только на порядки легче и проще?

Написал ещё тогда и забыл. Ну пусть новогодний подарочек будет.

Продолжаем делать правильный вебдваноль. Как обычно, всё очень маленькое (2.5kb) и шустрое, на plain JS без каких-либо «фреймворков» и прочего многотонного жирного говна. Легко влезает в эмбедщину всякую и т.п.

Итак…

gauge.js

'use strict'

function Gauges( class_name )
{
    var _ = this;
    _.urls = [];
    var gauge = document.getElementsByClassName( class_name );
    for( var j = gauge.length; j--; )
    {
        var e = gauge.item(j);
        var g = JSON.parse( e.getAttribute( "data-conf" ) );
        if( !g ) return;

        g.id = e.id;
        g.title = e.title;
        e.removeAttribute( 'title' );

        var c = g.size / 2;
        var r = 0.8 * c;
        var l = 2 * Math.PI * r;

        for( var i = _.urls.length; i--; ) { if( _.urls[i].url == g.url ) break; }
        if( i < 0 ) _.urls.push( { url: g.url, gauges: [ g ] } );
        else        _.urls[i].gauges.push( g );

        e.innerHTML =
            '<svg width="' + g.size + '" height="' + g.size + '">'
          + '<circle class="gauge-bg" id="' + g.id + '-bg" cx="' + c + '" cy="' + c + '" r="' + r + '" stroke-dasharray="' + ( 2 * l / 3 ) + " " + ( l / 3 ) + '" stroke-dashoffset="' + ( -5 * l / 12 ) + '"/>'
          + '<circle class="gauge-pnt" id="' + g.id + '-pnt" cx="' + c + '" cy="' + c + '" r="' + r + '" stroke="' + g.color + '" stroke-width="' + ( 0.1 * g.size ) + '" stroke-dasharray="0 1"/>'
          + '<text class="gauge-val" id="' + g.id + '-val" fill="' + g.color + '" x="' + c + '" y="' + ( 1.1 * c ) + '" font-size="' + ( 0.45 * r ) + '" text-anchor="middle"></text>'
          + '<text class="gauge-title" x="' + c + '" y="' + ( c + r ) + '">' + g.title + '</text>'
          + '</svg>';
    }

    _.urls.forEach( function( u )
    {
        _.update( u );
        setInterval( function(){ _.update( u ) }, u.gauges[0].int );
    } );
}

Gauges.prototype.set = function( id, min, max, val )
{
    var e = document.getElementById( id + '-pnt' );
    if( !e ) return;

    var r = e.getAttribute( 'r' );
    var l = 2 * Math.PI * r;
    var v = val < min ? min : val > max ? max : val;
    var dash = ( 2 / 3 ) * l * ( v - min ) / ( max - min );

    e.setAttribute( 'stroke-dasharray', [ dash, l - dash ]);
    e.setAttribute( 'stroke-dashoffset', (-5 / 12) * l );

    document.getElementById( id + "-val" ).textContent = val;
}

Gauges.prototype.update = function( u )
{
    var _ = this;
    var req = new XMLHttpRequest();
    req.onreadystatechange = function()
    {
        if( this.readyState != 4 ) return;
        var obj = JSON.parse( this.responseText );
        if( !obj ) return;
        u.gauges.forEach( function( g )
        {
            var v = g.path.split('.').reduce( function( o, k ) { return o && o[k] }, obj );
            _.set( g.id, g.min, g.max, v.toFixed( g.prec ) );
        } );
    };
    req.open( "GET", u.url );
    req.send();
}

gauge.css

@font-face {
    font-family: "7SEG";
    src: url("DSEG7Classic-BoldItalic.ttf") format("opentype");
}

.gauge-pnt {
  fill: transparent;
}

.gauge-bg {
  stroke: #808080;
  stroke-width: 1px;
  fill: transparent;
}

.gauge-val {
    font-family: "7SEG", serif;
}

.gauge-title {
    text-anchor: middle;
    fill: #C0C0C0;
}

Шрифт DSEG7Classic-BoldItalic.ttf ради прикола, можно из дебиановского пакета fonts-dseg взять. Или в формате woff2, он размером поменьше будет.

Как использовать:

<HTML>
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" content="no-cache">
<META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
<LINK rel="stylesheet" type="text/css" href="gauge.css">
<SCRIPT src="gauge.js" type="text/javascript"></SCRIPT>
<SCRIPT>
var ups_gauges;
window.addEventListener( 'load', function() { ups_gauges = new Gauges( 'ups' ); }, false );
</SCRIPT>
<STYLE>
a.ups { outline: none; }
body { background-color: #000000; color: #c0c0c0; }
</STYLE>
<TITLE>Gauge</TITLE>
</HEAD>
<BODY>
<a href="ups/voltage.html" class="ups" title="UPS Vin, V"  id="Vin" data-conf='{"url":"data/ups.json","path":"Vin","int":20000,"min":0,"max":300,"prec":0,"color":"#40C040","size":150}'></a>
<a href="ups/load.html"    class="ups" title="UPS Load, %" id="Load" data-conf='{"url":"data/ups.json","path":"Load","int":20000,"min":0,"max":100,"prec":0,"color":"#C040C0","size":150}'></a>
<a href="ups/temp.html"    class="ups" title="UPS T, °C"   id="Temp" data-conf='{"url":"data/ups.json","path":"Temp","int":20000,"min":0,"max":100,"prec":1,"color":"#C0C0C0","size":150}'></a>
</BODY>

data/ups.json

{ "Vin": 193.2, "Load": 40, "Temp": 38.0 }

В аттрибут data-conf элемента который превращаем в индикатор пишем JSON где

url - URL источника данных для индикатора в формате JSON
path - "путь" в JSON до нужной величины, например "sensors.0.temp"
int - интервал обновления в миллисекундах
min - минимальное значение аналоговой шкалы индикатора
max - максимальное значение аналоговой шкалы индикатора
prec - число цифр после запятой для цифрового индикатора 
color - цвет индикатора
size - размер индикатора

У элементов превращаемых в индикаторы должен быть установлен аттрибут id.

В аттрибуте title указывается подпись под индикатором.

Элементам индикаторов одной группы присваеваем один класс и его имя передаём в конструктор new Gauges('class_name') когда нужно создать и запустить индикаторы.

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

Выглядит так: http://stanson.ch/gauges.png

Лицнзия WTFPL

 , копрофагия

Stanson
()

Десктоп бати-пенсионера: Linux Mint 18.3 Mate

Галерея — Скриншоты

Еще фото: https://imgur.com/a/dGPCVJd

Старенький ноутбук 2 ядра 1.7 гига Lenovo G580. Своп на zram, disksize=2.6G.

Стренький Минт, уже несколько лет работает. Систему обновляю раз в несколько месяцев.

Основная задача: беспроблемный веб-браузинг: ютуб, яндексы, погода, новости, местные сайты. Доступ к популярным сайтам обеспечивается браузерм c визуальными закладками.

Firefox с одним обработчиком контента для экономии потребления памяти.

Для обработки нехватки памяти используется, конечно, nohang (при обычном браузинге на самом деле до этого никогда не доходит, десятки вкладок можно без проблем открыть).

С веб-браузингом машина вполне справляется, zram помогает делать своппинг безболезненным.

На системном мониторе со старта занято 600М, с браузером с несколькими вкладками - 1G.

Все работает как часы, проблем никаких не было. Батя доволен. Единственный случай был: установщики роутера из Ростелекома предлагали снести эту непонятную систему и установить вместо этого нормальную винду.

 ,

hakavlad
()

Посоветуйте наушники для музыки с ANC

Форум — Talks

Привет, дорогой дневник ЛОР.

А посоветуй мне годные беспроводные музыкальные наушники «на каждый день» с ANC.

Требования:

  • не затычки,
  • качественный звук и качественный ANC (условно, чтоб в метро было тихо),
  • уметь во всякие современные кодеки (в частности, те, в которые умеет iPhone — AAC? что-то ещё?),
  • в целом уметь в интероп с телефонами и быть удобными в повседневном использовании.

Бюджет вторичен, пусть будет до 50к.

Что сейчас в топе по этим критериям? Какие-нибудь WH-1000XM4? Или какие-то менее известные варианты?

 ,

intelfx
()

Какое self-hosted решение для чата, передачи файлов и звонков выбрать для небольшой группы

Форум — General

Сабж. До 20 человек, настоящее e2e шифрование, звонки (можно без видео), стабильная работа, возможность передачи файлов. Глянул на комбайн nextcloud. Нужен php, нужно что-то самому допиливать на нем, нужно ставить сторонние плагины, которые могут дропнуть в любой момент. Приуныл. ☹️

Есть что-то более… простое и надежное? Пусть и не свободное ПО. Разворачиваться будет на vps 4 ядра, 8 Гб, 100 Гб сторэдж. Одновременное общение предполагается не более, чем 10 людям в режиме звонка и не более 5 в режиме конференции. Чаты постоянно. Передачи файлов иногда.

Забыл добавить, что клиент должен быть доступен на ios и android без танцев с бубном.

 , , ,

Entmatix
()

Открытые чертежи мебели, есть что в этой области?

Форум — Talks

На ютубчике один стул-стремянку пересказывают в разных вариациях 5-7 лет с модификациями. Чертежей, чтобы прям распечатать - нет.

Может меня прост в утке забанили? Если кто встречал - буду благодарен за примеры и обзор состояния отрасли.

Linux тут при том, что установлен на заботливо шлифованной и крашенной столешенке, а хочется ещё и кресло подмутить, чтобы к нему пододвигатся и много другого всякого. В магазах продаётся либо дно, либо оверпрайс за прессованные опилки.

 , ,

pon4ik
()

AMDGPU + OpenCL Ubuntu 20.04LTS

Форум — Multimedia

Обновил заголовок, проблема оказалась системной хотя изначально проявилась в Resolve, но в блендере то-же пичаль.
RX570 + Ubuntu 20.04 LTS + radeonsi + OpenCL из amdgpu-pro = ПИЧАЛЬКА :-(

Логи:

glxinfo -B
name of display: :0
display: :0  screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: X.Org (0x1002)
    Device: Radeon RX 570 Series (POLARIS10, DRM 3.38.0, 5.8.0-48-generic, LLVM 11.0.0) (0x67df)
    Version: 20.2.6
    Accelerated: yes
    Video memory: 4096MB
    Unified memory: no
    Preferred profile: core (0x1)
    Max core profile version: 4.6
    Max compat profile version: 4.6
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.2
Memory info (GL_ATI_meminfo):
    VBO free memory - total: 2861 MB, largest block: 2861 MB
    VBO free aux. memory - total: 4027 MB, largest block: 4027 MB
    Texture free memory - total: 2861 MB, largest block: 2861 MB
    Texture free aux. memory - total: 4027 MB, largest block: 4027 MB
    Renderbuffer free memory - total: 2861 MB, largest block: 2861 MB
    Renderbuffer free aux. memory - total: 4027 MB, largest block: 4027 MB
Memory info (GL_NVX_gpu_memory_info):
    Dedicated video memory: 4096 MB
    Total available memory: 8192 MB
    Currently available dedicated video memory: 2861 MB
OpenGL vendor string: X.Org
OpenGL renderer string: Radeon RX 570 Series (POLARIS10, DRM 3.38.0, 5.8.0-48-generic, LLVM 11.0.0)
OpenGL core profile version string: 4.6 (Core Profile) Mesa 20.2.6
OpenGL core profile shading language version string: 4.60
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 4.6 (Compatibility Profile) Mesa 20.2.6
OpenGL shading language version string: 4.60
OpenGL context flags: (none)
OpenGL profile mask: compatibility profile

OpenGL ES profile version string: OpenGL ES 3.2 Mesa 20.2.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
sudo lshw -c video
[sudo] password for orlovsn: 
  *-display                 
       description: VGA compatible controller
       product: Ellesmere [Radeon RX 470/480/570/570X/580/580X/590]
       vendor: Advanced Micro Devices, Inc. [AMD/ATI]
       physical id: 0
       bus info: pci@0000:01:00.0
       logical name: /dev/fb0
       version: ef
       width: 64 bits
       clock: 33MHz
       capabilities: pm pciexpress msi vga_controller bus_master cap_list rom fb
       configuration: depth=32 driver=amdgpu latency=0 mode=1600x1200 visual=truecolor xres=1600 yres=1200
       resources: iomemory:210-20f iomemory:200-1ff irq:159 memory:2100000000-21ffffffff memory:2080000000-20801fffff ioport:e000(size=256) memory:dfe00000-dfe3ffff memory:c0000-dffff
clinfo (c 20.50)
Number of platforms                               1
  Platform Name                                   AMD Accelerated Parallel Processing
  Platform Vendor                                 Advanced Micro Devices, Inc.
  Platform Version                                OpenCL 2.1 AMD-APP (3224.4)
  Platform Profile                                FULL_PROFILE
  Platform Extensions                             cl_khr_icd cl_amd_event_callback cl_amd_offline_devices 
  Platform Host timer resolution                  1ns
  Platform Extensions function suffix             AMD

  Platform Name                                   AMD Accelerated Parallel Processing
Number of devices                                 1
  Device Name                                     Ellesmere
  Device Vendor                                   Advanced Micro Devices, Inc.
  Device Vendor ID                                0x1002
  Device Version                                  OpenCL 1.2 AMD-APP (3224.4)
  Driver Version                                  3224.4
  Device OpenCL C Version                         OpenCL C 1.2 
  Device Type                                     GPU
  Device Board Name (AMD)                         Radeon RX 570 Series
  Device Topology (AMD)                           PCI-E, 01:00.0
  Device Profile                                  FULL_PROFILE
  Device Available                                Yes

В блендере CL валится так:

Read prefs: /home/orlovsn/.config/blender/2.92/config/userpref.blend
LLVM triggered Diagnostic Handler: Illegal instruction detected: VOP* instruction violates constant bus restriction
renamable $vgpr4 = V_CNDMASK_B32_e32 32768, killed $vgpr5, implicit killed $vcc, implicit $exec
LLVM failed to compile shader
radeonsi: can't compile a main shader part
LLVM triggered Diagnostic Handler: Illegal instruction detected: VOP* instruction violates constant bus restriction
renamable $vgpr2 = V_CNDMASK_B32_e32 32768, killed $vgpr2, implicit killed $vcc, implicit $exec
LLVM failed to compile shader
radeonsi: can't compile a main shader part

в Resolve инициализация проходит:

0x7f1391b10640 | GPUDetect            | INFO  | 2021-03-26 19:24:46,736 | Starting GPUDetect 1.1_2-a16
0x7f1391b10640 | GPUDetect            | INFO  | 2021-03-26 19:24:46,778 | Done in 42 ms.
0x7f1391b10640 | GPUDetect            | INFO  | 2021-03-26 19:24:46,778 | Detected System:
0x7f1391b10640 | GPUDetect            | INFO  | 2021-03-26 19:24:46,778 |   - OS: Linux Ubuntu 20.04.2 LTS
0x7f1391b10640 | GPUDetect            | INFO  | 2021-03-26 19:24:46,778 |   - Model: ASUSTeK TUF Z370-PRO GAMING
0x7f1391b10640 | GPUDetect            | INFO  | 2021-03-26 19:24:46,778 |   - System ID: a053c830c13a45748cf7a9521a284462
0x7f1391b10640 | GPUDetect            | INFO  | 2021-03-26 19:24:46,778 |   - CPU: Intel Core i7-8700K, 12 threads, x86-64
0x7f1391b10640 | GPUDetect            | INFO  | 2021-03-26 19:24:46,778 |   - RAM: 1.9 GiB used of 47.0 GiB
0x7f1391b10640 | GPUDetect            | INFO  | 2021-03-26 19:24:46,778 | Detected 1 GPUs:
0x7f1391b10640 | GPUDetect            | INFO  | 2021-03-26 19:24:46,888 |   - "AMD Radeon RX 570 Series" (gpu:c558db0c.f91e8f0c) <- Main Display GPU
0x7f1391b10640 | GPUDetect            | INFO  | 2021-03-26 19:24:46,888 |     Discrete, 103 MiB used of 3.4 GiB VRAM, PCI:1:0.0
0x7f1391b10640 | GPUDetect            | INFO  | 2021-03-26 19:24:46,888 |     Matches: OpenCL, XOrg
0x7f1391b10640 | GPUDetect            | INFO  | 2021-03-26 19:24:46,888 | Detected 1 monitors:
0x7f1391b10640 | Main.GPUConfig       | INFO  | 2021-03-26 19:24:46,889 | Compute API set to automatic, defaulting to OpenCL.
0x7f1391b10640 | Main.GPUConfig       | INFO  | 2021-03-26 19:24:46,889 | Selected compute API: OpenCL
0x7f1391b10640 | Main.GPUConfig       | INFO  | 2021-03-26 19:24:46,889 | Automatic GPU Selection:
0x7f1391b10640 | Main.GPUConfig       | INFO  | 2021-03-26 19:24:46,889 |   - "AMD Radeon RX 570 Series" (gpu:c558db0c.f91e8f0c)
0x7f1391b10640 | IO                   | INFO  | 2021-03-26 19:24:46,889 | RED InitializeSdk with library path at /opt/resolve/libs
0x7f1391b10640 | IO                   | INFO  | 2021-03-26 19:24:46,924 | R3DAPI 8.0.0-49A09 (20201217 Lx64S) R3DSDK 8.0.0-49A09 (20201217 Lx64D C3B1) RED OPENCL 8.0.0-50396 (20201217) [/opt/resolve/libs/] init is successful

но при первом же вызове интеропа валится так:

0x7f1391b10640 | UI.GLContext         | INFO  | 2021-03-26 19:24:47,371 | Creating shared OpenGL context for this thread (1 total).
0x7f1391b10640 | UI.GLContext         | INFO  | 2021-03-26 19:24:47,374 | Initialized OpenGL 4.6 (requested 2.0) on device 'X.Org Radeon RX 570 Series (POLARIS10, DRM 3.38.0, 5.8.0-48-generic, LLVM 11.0.0)'
0x7f1350415700 | GPU.MultiBoardMgr    | INFO  | 2021-03-26 19:24:47,374 | Initializing OpenCL board manager for Main Display GPU gpu:c558db0c.f91e8f0c.
0x7f133201a700 | UI.GLContext         | INFO  | 2021-03-26 19:24:47,374 | Creating shared OpenGL context for this thread (2 total).
0x7f133201a700 | DVIP                 | ERROR | 2021-03-26 19:24:47,541 | Failed to create OpenCL context:

DVIP Exception: OpenCL error
 - API: OpenCL
 - API Error Code: Unknown CL error. (-1000)
 - Call stack:
   1   resolve                                 0x6c9ca72 
   2   resolve                                 0x6d29bd1 
   3   resolve                                 0x6d2926a 
   4   resolve                                 0x6d282f0 
   5   resolve                                 0x6d0cea9 
   6   resolve                                 0x6d10eff 
   7   resolve                                 0x5d8d35e 
   8   resolve                                 0x5d8f420 
   9   resolve                                 0x5d8f96d 
   10  resolve                                 0x5d956c5 
   11  libpthread.so.0                    0x7f13bdce6609 
   12  libc.so.6                          0x7f13a0196293 



==========[CRASH DUMP]==========
#TIME Fri Mar 26 19:24:47 2021 - Uptime 00:00:00 (hh:mm:ss)
#PROGRAM_NAME DaVinci Resolve Studio v17.1.0.0024 (Linux/Clang x86_64)
#BMD_ARCHITECTURE x86_64
#BMD_BUILD_UUID 912a4373-f5b5-4e54-9fc6-b9efab4f47f6
#BMD_GIT_COMMIT 5b371db7cafb184ffaac29f3843b849f765fc644
#BMD_UTIL_VERSION 17.1.0.0024
#OS Linux

/opt/resolve/bin/resolve() [0x47f2969]
/opt/resolve/bin/resolve() [0x47f1b68]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x153c0) [0x7f13bdcf23c0]
/opt/resolve/bin/resolve() [0x5d8d37e]
/opt/resolve/bin/resolve() [0x5d8f420]
/opt/resolve/bin/resolve() [0x5d8f96d]
/opt/resolve/bin/resolve() [0x5d956c5]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x9609) [0x7f13bdce6609]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x43) [0x7f13a0196293]
Signal Number = 11

Если даунгрейдить CL до 20.40 (в раче говорят 20.50 бывает поломан для полярисов а 20.45 сегфолтится на ровном месте) то всё то-же самое, цл при этом меняется:

clinfo 
Number of platforms                               1
  Platform Name                                   AMD Accelerated Parallel Processing
  Platform Vendor                                 Advanced Micro Devices, Inc.
  Platform Version                                OpenCL 2.1 AMD-APP (3180.7)
  Platform Profile                                FULL_PROFILE
  Platform Extensions                             cl_khr_icd cl_amd_event_callback cl_amd_offline_devices 
  Platform Host timer resolution                  1ns
  Platform Extensions function suffix             AMD

  Platform Name                                   AMD Accelerated Parallel Processing
Number of devices                                 1
  Device Name                                     Ellesmere
  Device Vendor                                   Advanced Micro Devices, Inc.
  Device Vendor ID                                0x1002
  Device Version                                  OpenCL 1.2 AMD-APP (3180.7)
  Driver Version                                  3180.7
  Device OpenCL C Version                         OpenCL C 1.2 
  Device Type                                     GPU
  Device Board Name (AMD)                         Radeon RX 570 Series
  Device Topology (AMD)                           PCI-E, 01:00.0
  Device Profile                                  FULL_PROFILE
  Device Available                                Yes
  Compiler Available                              Yes
  Linker Available                                Yes

п.с. на полном стеке amdgpu-pro openCL работает, но немного придурковато:

Хотца обновить резолв до 17ки, два gpu на выбор - 570 в pci-e и родная блекмеджиковская 580 через tb
Пробовал следующее:

  1. RHEL8.3 + AMDGPU-PRO 20.50 + Resolve Studio 17.1 = максимально приближенный к официальному конфигу вариант
    Резолв не может показать «вводный тур» (формально он при этом диагностит гпу и выставляет настройки по нему, но их все можно потом ручками выставить), но запускается ок.
    Проблемы:
  • переодически падает на ровном месте, в логах ничего толкового
  • пропуск кадров при обработке - т.е. покрасили клип, начинаем его играть - в среднем раз-два за секунду проскакивает кадр без применения покраски, притом фиг бы ты с ним в просмотре, при экспорте аналогично в итоговом файле
  • в fairlight не видно треков - черная дыра вместо таймлайна (известная проблема при пользовании gl из pro дров)
  1. Ubuntu 20.04LTS + AMDGPU-PRO 20.50:
    всё то-же самое только вроде не падает особо
  2. Ubuntu 20.04LTS + AMDGPU/RadeonSI (пробовал и с комплектными из бубунты и с не-про с сайта) + OpenCL от AMDGPU-PRO 20.50:
  • в fairlight появляется таймлайн, всё по звуку работает огонь

  • но видео не работает вообще - даже если просто кинуть на голый таймлайн генератор сигнала то его не видно нигде, в логах GLInterop не работает т.к. в самом начале инициализации OpenCL падает с «unknown error -1000»
    CL накатывал через amdgpu-pro-install –opencl=legacy –headless (пробовал и rocr доставлять но смысла от этого вроде нет)
    при этом clinfo говорит что используется именно амуде цл, а glxinfo говорит что используется именно X.org

  • под виндой на этой-же машине всё ок, именно с 17.1 и именно с 570

  • если воткнуть 3060 и накатить дрова невидии то вроде то-же всё ок

т.е. проблема исключительно в районе amdgpu притом похоже что и с GL (черный феирлайт) и с CL (пропуск обработки)
но хотелось бы запустить эту машинку именно на 570 или 580 ибо 3060 для другой машинки

 , ,

rukez
()

Именование дисков (sda, sdb, sdc...). Как поменять порядок?

Форум — General

Всем привет!

Может кто знает, как поменять именование устройств, а конкретно SATA накопителей в системе? Есть мамка Asus Z-87-Pro с двумя контроллёрами SATA, на одном контроллёре 2 порта (ASMedia), на втором 6 (Intel).

Системный диск с Linux на борту я подключил к первому контроллёру (ASMedia), так как на втором контроллёре (Intel) дергаю диски в Hot-plug режиме не останавливая систему. Не знаю, насколько это хорошо, но кажется что система подключенная на другом контроллёре избавит от каких-то задержек или сбоев. В будущем возможно на контроллёре Intel из дисков сделаю массив (контроллер позволяет), а система будет на другом контроллёре (ASMedia), думаю так будет хорошо.

Проблема в том, что не совсем для меня удобно, что система именует устройства начиная с устройств на контроллере Intel, а затем на ASMedia, таким образом системный диск и его наименование (sda,sdb,sdc) всегда является плавающим, самым последним в именовании. Например, если я подключу 2 диска, то системный поименуется как sdc, если один дополнительный диск подключу, то системный станет sdb.

Как сделать так, чтобы не переключая системный диск с контроллёра ASMedia сделать диск в системе sda? Т.е. чтобы Linux именовал вначале устройства с ASMedia конторллера?

 , ,

dva20
()

Стримить музыку по локалке

Форум — Multimedia

Привет.

Я с недавних пор перестал пользоваться онлайн сервисами для прослушивания музыки. Теперь у меня локально хранится моя библиотека на винте, и я ее слушаю. ее же копия хранится на телефоне, на ноуте и на рабочем компе.
Хотелось бы убрать дублирование.

Есть два уровня решения:

  1. В домашней сети есть сервачек, хотелось бы скинуть всю музыку туда и стримить ее по локалке для своих устройств.
  2. Есть vps с настроенным опенвпн сервером, хотелось бы прокинуть линку между домашним сервером и vps и стримить музыку в интернет, чтобы и на работе и в телефоне больше музыку не хранить.

Подскажите, как можно/лучше организовать первый пункт, но с возможностью расширения до второго. В идеале какой-то популярный протокол, чтобы клиенты были на все платформы(желательно не веб-клиент).
Я допускаю, что есть два варианта: аля радио - музыка играется по кругу, скипать нельзя; аля спротифай - можно самому делать плейлисты, скипать песни. Хотелось бы второй вариант, если это возможно.

 , ,

Keltir
()