Ubuntu 24.04 и Nvidia-driver-390 на ядре 6.8
Есть умельцы или информация кто смог победить эту напасть?
Есть умельцы или информация кто смог победить эту напасть?
Есть ли те кто использует powershell на линуксе?
С какими подводными камнями столкнулись?
Суть - моя компания очень активно избавляется от винды - а вот переписывать кучу автоматизаций с шелла на тот же питон - я не горю желанием.
Если совместимость неплохая - то скрипты сохраняться только потеряв виндозависимую часть
На reddit тоже спрашивал - но ценной информации ноль....
Приветствую!
Сей UPD является продолжением статьи "Проброс видеокарты в виртуальную машину".
На полноценную публикацию для Хабра не тянет, но описанный ниже момент для кого-то может оказаться полезным.
Итак, краткие исходные данные таковы (полный расклад в статье по ссылке выше):
1) 2 видеокарты: "Lexa PRO [Radeon 540/540X/550/550X / RX 540X/550/550X]" (используется для ВМ с Win10) и "Park [Mobility Radeon HD 5430]" (используется для хост-системы);
2) "Radeon HD 5430" (старенькая видюха) воткнута в первый pcie-слот материнки, а "Lexa PRO" (железяка поновее) - во второй (кстати, в статье этот момент описан не совсем корректно);
Видеокарту "Radeon HD 5430" понадобилось перекинуть с хост-системы на ВМ, а "Lexa PRO" - на хост-систему.
Чтобы это сделать корректно, необходимо карту из первого слота явно отвязать от хост-системы. Небольшая сложность тут в том, что она идёт первой в очереди на инициализацию хост-системой.
Очерёдность инициализации выводится посредством получения содержимого procfs-файла "/proc/fb" (fb = framebuffer). Выглядеть это будет, например, так
0 efifb vga
1 amdgpudrmfb
Чтобы не использовать видеокарту в хост-системе для передачи в ВМ в статье было задействовано как изменение параметров ядра (grub) при загрузке, так и механизм подгружаемых модулей ядра (modprobe), т.е.
1) добавление параметров «intel_iommu=on iommu=on rd.driver.pre=pci-stub pci-stub.ids=1002:67ff,1002:aae0» (идентификаторы "Lexa PRO") в grub
и
2) «blacklist amdgpu» и «options pci-stub ids=1002:699f,1002:aae0» -> «/etc/modprobe.d/local.conf».
Т.к. первой хост-система (ОС AlmaLinux8) захватывала "Radeon HD 5430", то проблем в рамках описанной в статье конфигурации не было.
В случае же, когда есть необходимость в ВМ прокинуть карту, находящуюся в более приоритетном слоте, в параметры загрузки мы должны прописать явный запрет на захват целевой карты. Делается это посредством добавления подстроки "video=efifb:off" (подстрока "efifb" взята из вывода "cat /proc/fb") в параметр GRUB_CMDLINE_LINUX ("/etc/default/grub") и последущим исполнением команд grub2-mkconfig + dracut + перезагрузка.
Итого, файл "/etc/default/grub" должен иметь примерно такой вид.
1002:68e1,1002:aa68 - идентификаторы "Radeon HD 5430"
В файле «/etc/modprobe.d/local.conf» также меняем идентификаторы, но не отправляем в блэк-лист драйвер "radeon", т.к. оный необходим ОС при загрузке. В общем, файл "local.conf" должен содержать только одну строку - "options pci-stub ids=1002:68e1,1002:aa68".
Давно витала в голове мысль вынести эксперименты с нейросетями на отдельный компьютер, и тут подвернулась редкая удача. Попал мне в руки интересный девайс, а именно Nvidia Tesla A2 аж на 16 гб видео памяти.
Значит хватит отлынивать, тем более привалили майские выходные, короче «нейросерверу» быть! А для повседневных задач собрать компактный, тихий системничек в microATX формате. Но, это потом…
Так как это всё-таки сервер нужна серверная ОС. Качаем Ubuntu 24.04
Ставим.
Подробно на этом останавливаться не буду, сейчас установка Linux проста до безобразия, отмечу только два момента. Ставил в минималке и под /home примонтирован отдельный, быстрый ssd - > за подробной инструкцией в интернет, там есть.
Далее, далее, далее... Готово.
Подключаемся по SSH
Дабы протестировать карточку установим Stable Diffusion WebUI от AUTOMATIC1111
Здесь начинается полезное для общественности. Поехали!
Обновляемся
sudo apt update
sudo apt upgrade
Устанавливаем необходимое
sudo apt install git bc google-perftools screen nano
Ставим драйвер Nvidia
sudo apt install libnvidia-common-535 libnvidia-gl-535 nvidia-driver-535
Ребутимся
sudo reboot
Проверяем GPU
nvidia-smi
Есть контакт
Для корректной работы SD нам потребуется Python версии 3.10 (на момент написания)
Ставим пакет пакетов: sudo apt install build-essential gdb lcov pkg-config libbz2-dev libffi-dev libgdbm-dev liblzma-dev libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev lzma lzma-dev tk-dev uuid-dev zlib1g-dev libgdbm-compat-dev (это список пакетов, вводится в одну строку)
Идем на python.org и ищем что у них есть из свежих тридесятых питонов, ага! Есть 3.10.14 Копируем ссылку возвращаемся в консоль
Скачиваем
Распаковываем
tar -xzf Python-3.10.14.tgz
Заходим в директорию
cd Python-3.10.14
Собираем интерпретатор в .local пользователя, займет какое то время (разверните консоль во весь экран и почувствуйте себя кулхацкером)
./configure --prefix=$HOME/.local --enable-optimizations
make -j4
make install
Возвращаемся в папку пользователя
cd ~
Проверяем все ли хорошо
~/.local/bin/python3.10 --version
~/.local/bin/pip3.10 --version
Всё норм
Скачиваем WebUI
Переходим в созданную директорию
cd stable-diffusion-webui
Создаём окружение Python
~/.local/bin/python3.10 -m venv venv
Запускаем
./webui.sh
Ждём загрузки библиотек и базовых моделей и вуаля!
Работает
Осталось продумать систему охлаждения и подобрать параметры
Моя доволен!
Привет, устал в любой непонятной ситуации писать SUDO, а что это "drwxr-xr-x" такое вообще не знаешь?
Тогда рекомендую моё новое видео! А так-же мой ТГ с фотками чехлов на паспорт которые я учась делать, не ну а чо
Теперь у меня есть сервер на двух Е5640, с восьми лотками для жестких дисков. Ко мне он попал случайным образом. Теперь думаю как бы с помощью него заработать. Есть две идеи. Развернуть DDNS сервис. Создать хранилище с записью RTSP потока в архив
В наше время, из-за санкций одноплатники стали стоить каких-то «конских» денег. Даже б/у RaspberryPi Zero стоит 2-3 тысячи рублей на барахолках, что, мягко скажем, не совсем лояльная цена для «самого дешевого одноплатного компьютера в мире». Конечно, Orange Pi Zero всё ещё можно купить в пределах 1.500-2.000 рублей, но как по мне и эта цена не слишком лояльна за те характеристики, который предлагает такой одноплатник. С другой стороны, Android-планшеты 10-летней давности продаются на барахолках по 100-300 рублей, что выглядит гораздо привлекательнее, причём на некоторые устройства практически без костылей можно установить полноценный дистрибутив Linux! Вероятно, многие читатели скажут мол «автор бомж» и будут правы: ведь в рамках этой статьи, я хочу рассказать о том, как использовать полурабочий древний планшет в качестве полноценного одноплатника путём подключения его к микроконтроллеру и выводу GPIO! Сегодня мы с вами: узнаем, как подключить микроконтроллер к шине UART в планшете и научимся работать с последовательной шиной в Android прямо из Java и нативных программ. Интересна моя концепция антикризисного одноплатника? Тогда добро пожаловать под кат!
Пожалуй, нельзя сказать, что подобная концепция пристраивания старых планшетов — вопрос исключительно цены. 2-3 тысячи рублей не такие уж и большие деньги и при желании можно купить хотя-бы Б/У, но всё таки полноценный одноплатник с нормальной GPIO-гребенкой. Однако здесь стоит вопрос не столько дешевизны, сколько E-Waste: зачем выкидывать в помойку потенциально рабочие планшеты с живым процессором, если их можно пристроить куда-то ещё?
На самом деле, планшеты с ROOT-доступом уже из коробки могут выполнять весьма полезные задачи, как, например, хостинг http-сервера для домашней страницы, работать как панель с часиками и погодой, или, например, работать в качестве HMI-панели для оформления заказов в шаурмечной. Кроме того, многие планшеты на базе смартфонных чипсетов (MediaTek, Spreadtrum) имеют полноценный Bluetooth-модуль, что позволяет «подружить» планшет с микроконтроллером через радиоканал, что значительно расширяет возможный спектр применений.
Преимуществ у такого подхода много: у «пожилого» планшета уже есть большой, достаточно качественный (хороший TN, либо даже IPS) дисплей с тачскрином, который поддерживает мультитач, GPU для вывода 3D-графики, 3.5мм для вывода звука + встроенные динамики, а также весьма неплохое, по сравнению с дешевыми одноплатниками, железо. Звучит весьма вкусно для цены в 300 рублей: собрать хоть немного похожую конфигурацию на базе RPi выйдет в 10-15 тысяч рублей (учитывая дороговизну MIPI-матриц с тачскринами + цену самой «малинки» и обвязки для аудиотракта).
Но при всех перечисленных достоинствах, атрибутом любого полноценного одноплатника является наличие GPIO — и даже здесь мы сможем с вами выкрутится! Первый способ, о котором я чуть выше вскользь рассказал, позволяет реализовать общение с МК и «ногодрыг» через BT-радиоканал, но минусы такого подхода очевидны (МК с BT дороже, радиоканал потребляет дополнительную энергию, некоторые могут посчитать BT небезопасным). Однако есть и второй подход, который заключается в использовании диагностических пятачков UART на плате устройства для наших личных целей!
С таким подходом можно использовать как «голый» Linux, используя концепцию, которую я представил в этой статье, так и взаимодействовать из Java-приложений для Android (что даёт уже, как минимум, удобный GUI-фреймворк). Сегодняшняя статья будет «без воды», только чистая конкретика, поэтому давайте перейдем к реализации!
Как я уже говорил выше — в рамках данной статьи мы рассмотрим использование UART в планшете для наших собственных целей. UART — это двунаправленная полнодуплексная цифровая шина, которая позволяет обеспечить стабильную передачу данных при относительно невысокой скорости, измеряемой вбодах. То есть, быстро стримить картинку с её помощью вы не сможете, но сможете, например, получить состояние входов МК, прочитать что-то на шине I2C, используя мост UART -> I2C или, например, прочитать показания датчиков, которые МК предварительно опросил.
Сама по себе концепция очень простая: многие китайские производители планшетов и смартфонов не только разводят UART в виде отдельного пятачка на плате, но и подписывают его, задействуя UART-канал как вывод для логов ядра, а иногда и предоставляя доступ к рутовой консоли! В свою очередь, из юзерспейса мы можем получить доступ к UART с помощью устройства/dev/ttyS<x>на подавляющем числе чипсетов и/dev/ttyMT<x>на MediaTek. Однако учтите, что в некоторых случаях придется патчить загрузчик, дабы редиректнуть логи ядра в /dev/null.
Однако наличие UART на плате — не всегда признак того, что он сконфигурирован в системе верно. Например, на смартфонах с чипсетами SC6820 нормально завести UART я так и не смог, а на некоторых устройствах на базе MT657x нужно патчить загрузчик, дабы он «увидел» нужный канал UART! В моём случае, героем статьи стал планшет Prestigio, у которого отказал тачскрин, но был доступен UART:
Конкретно в моём случае, после установки последней официальной прошивки планшет перестал слать логи на UART и устройство /dev/ttyMT3 оказалось доступным для наших операций, в вашем же случае может потребоваться настройка devicetree, или просто патчинг загрузчика, дабы редиректнуть консоль на другой вывод UART. Кроме того, необходимо обязательно получить root-доступ хотя-бы к adb shell, поскольку доступ к /dev/tty устройствам возможен только от имени суперпользователя. Как же проверить UART на возможность чтения/записи? Сначала нам необходимо взять ESP32 или любой UART-USB преобразователь, припаять сигнальные линии RX/TX и использовать любую программу для работы с последовательным портом, например Putty. Заходим в adb shell, и пишем что-нибудь в консоль:
Вуаля! Всё работает :)
Работает? Замечательно, значит мы сможем использовать планшет вместе с микроконтроллером! Переходим к практической реализации нашего приложения!
Я специально решил выделить для Java-подхода отдельный раздел, поскольку просто взять и открыть /dev/ttyMT3 с помощью FileInputStream не выйдет. Дело в том, что даже несмотря на наличие root-доступа, по факту ни одно Android-приложение его не имеет (за исключением подписанных системных в папке /system/app/) и для всех операций, требующих повышенных привилегий, либо распаковывают и запускают внешнюю нативную программу из под суперпользователя, либо с помощью специального костыля с запуском sh-программ читают/пишут нужные блочные устройства сами. Связано это с тем, что все Android-приложения работают в хост-процессе app_process, который форкается (отпочковывается) от «главного» процесса, который запущен из под «простого» пользователя, который не находится в группе system.
Здесь концепция также очень простая: su имеет аргумент -c, который позволяет запустить команду от имени root-пользователя и возвращает объект процесса, дабы мы потом могли перехватить stdout:
Таким образом, для чтения текстовых данных из UART'а нам достаточно лишь периодически «слушать» stdout команды cat и обрабатывать данные:
Костыль, но со вкусом :) Если вас не устраивает такой подход или ваше приложение значительно более комплексное, вы можете использовать UART и из под нативных программ.
Работа с последовательными портами в Linux не отличается от работы с любыми другими файлами и устройствами: вызовов open, read, write и close обычно хватает и лишь иногда к ним в довесок нужен ioctl.
int fd = open("/dev/ttyMT3", O_RDWR);
int result = write(fd, command, strlen(command));
Для работы с терминалом необходимо использовать модуль termio который предоставляет все необходимые структуры для настройки режима работы терминала, в т.ч и бодрейт. Дело в том, что изначально последовательное устройство настроено на режим работы в качестве терминала, т.е драйвер отдаст данные только после того, как устройство на UART пошлёт \n, или превысит размер внутреннего буфера для сообщения. Если вам нужно работать с бинарными данными и получать их «на лету» — необходимо настроить последовательный порт в «binary» режим:
tcgetattr(modemFd, &tio);
tio.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
tio.c_oflag &= ~(OPOST);
tio.c_cflag |= (CS8);
tio.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
tcsetattr(modemFd, TCSAFLUSH, &tio);
Если же вам достаточно текстового терминального режима, то можно продолжить как есть и использовать fgets, fscanf и прочие удобные функции из libc! О том, как собрать нативную программу для смартфона и как вообще выбросить Android из него, читайте в моей отдельной статье.
Вот таким образом можно использовать проводную шину в планшете для собственных нужд! Как видите, совершенно ничего сложного и используя эти наработки, я реализовал уже не один проект! Надеюсь, материал вам был интересен и полезен :) Пишите своё мнение, можно ли использовать дешевые планшеты по 300 рублей в качестве одноплатников?
Статья была подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, дабы не пропускать новые статьи каждую неделю! Ну а больше подробностей о будущем контенте, как обычно, в первом комменте! Также у меня есть свой Telegram-канал, куда я выкладываю свои мысли, советы по ремонту и моддингу различных гаджетов, а также вовремя публикую ссылки на новые статьи!
Думаю, люди, которые часто работают с формулами в офисных редакторах, не понаслышке знают, что это такое.
Я и формулы в моих и чужих документах
Все время думал - ну почему нельзя просто вставлять формулы в формате LaTeX?
Оказывается можно! Наткнулся на такое замечательное расширение для LO, как TexMath. Эта штука прямо очень порадовала. Принцип работы прост как табуретка - берется формула в TeX, собирается pdflatex-ом, экспортируется в svg или png и вставляется в документ. Исходник хранится в alt text, что работает везде и отображается одинаково.
Установить можно различными способами, я использовал пакетный менеджер:
$ pamac install libreoffice-extension-texmaths
Внимание, таким образом подтянется и texlive, это неизбежно) Если расширение не стартует и крашится с ошибкой BASIC - нужно очистить профиль LO:
$ mv ~/.config/libreoffice ~/.config/libreoffice.bak
Иконки появятся на панели. Очень рекомендую настроить хоткей:
Хоткей открывает редактор, и преобразует формулы прямо из выделения в тексте
Редактор выглядит так:
Редактор и кое-какие настройки
Естественно, поддерживается как odt, так и вордовские форматы, т.к. используется просто картинка с alt text. Из минусов можно отметить, что формула будет не редактируема за пределами LO. Расширение можно поставить и на винду, для работы потребуется MikTeX.
Очевидно, что всех проблем это не решает, но как по мне - нормальное компромиссное решение, чтобы формулы рисовались одинаково везде.