Снова про обновление ядер Cubietruck и наболевшем Nouveau

Итак, сначала о Nouveau - после обновления ядра с ветки 4.9 на 4.14, фризы начали происходить чаще, что раздражает. Поэтому просто переехал на nvidia-drivers-340.04 (надо было сделать это с самого начала и не парить себе мозги), с которыми нормально работает и фреймбуфер и suspend2ram, плюс отличная производительность в играх.

Далее, про обновление ядер для Cubietruck. Ранее я писал, что пресобранные ядра не грузились, что возможно проблема в опции bootz заместо bootm и т.д.

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

Оно уже было собрано, версии 4.9.68. И я подумал - а почему бы не обновиться, на kernel.org уже лежало, если мне не изменяет память, 4.14.13. Скачал, подсунул конфиг от 68-го, всё прекрасно собралось. Но после перезагрузки выяснилось, что система не видит внешний жёсткий диск, т.е. даже не реагирует на его подключение. Так же дело обстояло и флешкой. Насколько я понял, просто не подавалось питание на USB порты. Обновлял и старое ядро, которое ветки 4.9. Ставил и 4.9.77 и 4.9.80, всё работало, но внешние компьютеры просто не цеплялись к NFS шарам Cubietruk'a. Следом поставил версию 4.15.1, но собирал не со старым конфигом, а через опцию make ARCH=arm sunxi_defconfig.

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

Но тут стоит добавить - диск работал более 3-х лет в режиме 24/7, плюс файловая система на нём не проверялась. А проблемы начались, после внезапного отключения электричества, когда Cubietruck проработал больше 2-х месяцев без перезагрузок. Я больше склоняюсь к тому, что проблема именно в старой файловой системе. Как вариант - отформатировать винт, файлы музыки и фильмов лежат в торрент-клиенте, так что он их просто перекачает.

Возможно, на следующих выходных так и сделаю.

Nvidia GTX 660 + Nouveau + Nvidia-firmware

Не так давно я писал, что Nouveau фризит систему с картой GTX 660. И вот на днях я решил более подробно поискать про баги в связке nouveau + GTX 660. На форуме дистрибутива Fedora нашёл вот такой совет - нужно установить прошивку, вытащенную из проприетарного драйвера Nvidia. Хотя, это вроде как нарушает лицензию, но кому какое дело 🙂 И в Gentoo эта прошивка находится в портеже, что не может не радовать.

Итак, всё просто - устанавливаем nvidia-firmware, файлы будут находится в /lib/firmware/nouveau

Все команды нужно выполнять от root.

Эта запись говорит модулю ядра, что нужно использовать проприетарный бинарный блоб:

echo "options nouveau config=NvGrUseFW=1" | tee -a /etc/modprobe.d/nouveau.conf

Далее подготавливаем конфигурационные файлы для Dracut, который будет создавать образ initramfs:

echo 'install_optional_items+="$(find /lib/firmware/{nouveau,nvidia} -printf "%p ")"' | tee /etc/dracut.conf.d/nouveau_firmware.conf

Пересборка initramfs для текущего ядра с изменениями в modprobe.d и включением прошивки:

dracut -f

Можно перезагружать систему.

Далее пишут, что не совсем победил фризы, но они стали намного реже. Хотя здесь сообщают, что установка прошивки решила проблему, но вылезла другая - пропадают чекбоксы, полосы прокрутки и т.д. в GTK3 приложениях. У меня всё нормально, он писал это практически 2 года назад, за это многое поменялось. В обчем, будем посмотреть.

Hearthstone и Wine

Смотрел я на Youtube всякое и на глаза попало видео о игре Hearthstone, что она такая интересная, замечательная и т.д. Я не слоупок, знаю, что она давно вышла, и видел летсплеи с ней, просто как-то не цепляло. Ну, думаю, надо установить, посмотреть, чем она так прекрасна. На Linux её не портировали, поэтому будем запускать через Wine.

И вот тут начинаются пляски. Я находил мануал от 2015-го года, но в нём ничего сложного не было - через winetricks установить wininet и в winecfg отключить библиотеку gbdhelp, а у библиотеки msvcp100 поменять значение на "сторонняя\встроенная".

Изначально я так и сделал, клиент Battle.net запустился, но при авторизации возникала ошибка под непростым названием BLZBNTBGS8000000B. Но клиент всё равно вроде как разрешал скачать игру. И ключевое слово здесь - вроде, т.к. после нажатия на кнопку "Скачать" выдавалось сообщение, что для игры нужна минимум Windows 7, а установлена XP. Ок, ребята, без проблем, поменял в winecfg XP на Windows 10. Перезапустил клиент, опять жму заветную кнопочку "Скачать". А мне говорят - тебе же сказали, что нужна минимум Windows 7, а у тебя установлена Windows 10. Вот на этом моменте меня начали терзать смутные сомнения насчёт того, что всё будет легко и просто. Раз игра так принципиальна, сменил операционную систему на Windows 7. Теперь-то ей деваться некуда, Windows 7, всё как положено. Но не тут-то было - у вас установлена Windows 7 Service Pack 1, а нужна Windows 7 как минимум. Вот такие дела.

Вооружившись Гуглом, приступил к поискам решения. Нашёл вот такую статью. Дальше будет что-то типа сжатого пересказа этой статьи с убиранием ненужных действий, например в статье и комментариях говорят, что нужно через winetricks поставить vcrun2015, corefonts и forcemono. Я их не устанвливал и всё прекрасно работает.

Сначала скачиваем клиент Battle.Net.

Обязательно нужен wine со staging, без него игра играться не будет.

Далее, для игры нужен 32-х битный префикс Wine. В комментариях к статье, пишут, что нужно удалить директорию .wine и создать заново. Этого делать точно не следует, т.к. пропадут все установленные Windows приложения. Проще создать отдельную директорию:

env WINEPREFIX=~/.wine32 WINEARCH=win32 winecfg

В Winecfg переходим на вкладку Staging и ставим все галочки, кроме последней, про Gallium (её может и не быть, как у меня). А на вкладке Библиотеки добавляем d3d11 и locationapi и отключаем их.

Объясняем Wine, что будем использовать для установки директорию .wine32

export WINEPREFIX=/.wine32

Переходим в директорию с установщиком Battle.Net и запускаем его:

wine Battle.net-Setup.exe

После установки клиента логинимся, скачиваем игру и играем.

Обратно про Nouveau

Как и писал ранее, заменил я видеокарту на старенькую GeForce 210 и всё, никаких зависаний. В плане графики она конечно не ахти, но пока всё устраивает. Нужно искать решение проблемы с nvidia драйвером и suspend'om и желательно фреймбуфером .

Недолго Nouveau играла

Сообщаю, что пересборка qtwebengine результатов не принесла, kmail всё так же падает. И теперь появились рандомные фризы системы, т.е. графика полностью подвисает, только курсор мыши ездит по экрану, переключение в виртуальный терминал не работает. Нашёл такой баг, всё точно так, как у меня, даже видеокарта такая же.

Достал старую видюшку, не помню, что за модель, посмотрим, как будет работать.

Переехал на Nouveau и проблемы с Kmail

Наконец-то избавился от nvidia-drivers. Причин было несколько, например не работал  фреймбуфер при переключении в констоль по Ctrl+Alt+Fn и не работала гибернация, т.е. suspend2ram. С nouveau всё прекрасно работает, за исключением Kmail, он крашится через несколько секунд после запуска. Как пишут на bugs.gentoo.org, нужно задать $CFLAGS и $CXXFLAGS опцию"-fno-delete-null-pointer-checks" и пересобрать пакет QtWebEngine. В данный момент электронный болван гудит, аки пылесос, пересобирая его. Будем посмотреть, поможет или нет.

Debian Stretch и новое ядро на Cubietruck

Сидел как-то я, обновлял Debian на Cubietruck и вдруг в голову пришла мысль - а когда следующая версия? Наверное, в следующем году должна выйти. Полез в Википедию, удовлетворить своё любопытство. Как оказалось, уже полгода, как вышла.

Начал искать статьи про обновление до Debian Stretch, вдруг какие-нибудь подводные камни вылезут, все таки не rolling-release, как, например, Gentoo.

Нашёл эту статью. В принципе, ничего не изменилось, ничего сложного.

Обновился, но вот вылезла такая проблема - не запускался Apache, MySQL, TOR, и еще какой-то сервис. При запуске Apache выдавал такую ошибку:

systemd: apache2.service: Control process exited, code=exited status=226

Failed at step NAMESPACE spawning /usr/sbin/httpd: Bad file descriptor
Aug 27 22:48:39 cubie2 systemd: apache2.service: Main process exited, code=exited, status=226/NAMESPACE

На Cubieforums нашёл тему, у человека была такая же проблема, только не было решения.

А решение относительно простое - нужно обновить ядро. Начнём с того, что изначально на Cubietruck был установлен Cubian. Но постепенно я переехал на Debian Jessie, т.к. Cubian перестал обновляться. И при обновлении с Cubian/Wheeze до Jessie так же пришлось обновлять ядро, про это я уже писал.

Инструкция ниже, это смесь из нескольких статей с linux-sunxi.org - Mainline Kernel Howto, Display, и инструкции Miklós Aurél Rónai - Compiling mainline kernel for CubieBoard2 and CubieTruck ну и немного моих знаний 😉

Мой Cubietruck используется исключительно как домашний сервер, поэтому мультимедийные опции в ядре мне не нужны. По поводу загрузки - система начинает загружаться с SD карты, дальше загрузка идёт с HDD. Так же через USB подключён внешний жёсткий диск.

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

Всё делается на Cubietruck'e через SSH. Создаём директорию src для удобства работы и переходим в неё:

mkdir src && cd src

Прежде всего, установим U-boot:

wget ftp://ftp.denx.de/pub/u-boot/u-boot-2017.11.tar.bz2
bzip2 -d u-boot-2017.11.tar.bz2
tar xf u-boot-2017.11.tar
cd u-boot-2017.05
make Cubietruck_defconfig
make

Пока с u-boot всё. Переходим обратно в директорию src, скачиваем исходники ядра и распаковываем их:

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.68.tar.xz
xz -d linux-4.9.68.tar.xz
tar xf linux-4.9.68.tar

Устанавливаем пакеты для сборки ядра:

apt install gcc build-essentials swig libpython-dev libfdt-dev gcc-6-plugin-dev libncurses5-dev

Переходим с каталог linux-4.9.68 и конфигурируем ядро перед сборкой:

cd linux-4.9.68
make ARCH=arm sunxi_defconfig

Обязательно нужно поставить ARCH=arm перед menuconfig, иначе пропадут все специфичные для arm опции (следовательно, ядро не загрузится). Если забыли - нужно снова выполнить make ARCH=arm sunxi_defconfig

make ARCH=arm menuconfig

Ядро нужно обязательно сконфигурировать, по умолчанию в этой конфигурации нет поддержки NFS-сервера, устройств хранения USB, фреймбуфера, Bluetooth, Wi-FI, PPPoE, поддержки мыши, батареи и т.д. В общем много чего отключено по умолчанию.

Так же нет поддержки NAND - обязательно включите, если система загружается с NAND, а не с SD карты Device Drivers > Memory Technology Device (MTD) support > NAND Device Support > Support for NAND on Allwinner SoCs (*). Обязательно должен быть в ядре, а не собран модулем.

NFS сервер:

File Systems > Network File Systems > NFS Server Support (Собираем как модуль (М) или он будет прямо в ядре (*), кому как больше нравится)

Выходим обратно в File Systems, здесь ещё нужно активировать файловые системы, с которыми будет работать Cubietruck. По умолчанию включены лишь Ext4 с поддержкой Ext2 и FAT. Если будут подключаться диски/флешки с другими файловыми системами, их нужно включить здесь.

Работа с USB накопителями:

Device Drivers > SCSI device support > SCSI disk support (*)

Выходим обратно в Device Drivers > USB Support > USB Mass Storage Support (M) - можно собрать и модулем.

Выше можно включить OTG:

OTG Support.

Если не нужна поддержка звука и мультимедии:

Снять галочки с Sound Card Support и Multimedia Support.

Включение Framebuffer в консоли:

Device Drivers > Graphics support > Frame buffer Devices > Simple framebuffer support и в этом же меню включить Support for frame buffer devices > Enable firmware EDID.

В общем всё, настройка закончена, если кому нужно что-то еще подключить\отключить - всё в ваших руках, ничего сложного здесь нет.

Сохраняем конфиг. файл и выходим из menuconfig

Собираем ядро, dts, модули ядра и устанавливаем их:

# make zImage dtbs modules modules_install

Сборка на Cubietruck с таким конфигом займёт около 3-х часов.

После сборки ядра нужно подготовить SD карту к работе с новым ядром.

Если хотите очистить SD карту, сохранив таблицу разделов:

dd if=/dev/zero of=/dev/mmcblk0 bs=1k count=1023 seek=1

Если хотите очистить SD карту вместе с таблицой разделов:

dd if=/dev/zero of=/dev/mmcblk0 bs=1M count=1

Лично я выбрал первый вариант. Далее, создаём таблицу разделов на SD карте, первый раздел будет смещён на 1МБ от "начала" SD карты (в это место будет записан загрузчик) и размером 16Мб, а второй займёт всё оставшееся место на карте.

blockdev --rereadpt /dev/mmcblk0
cat <<EOT | sfdisk /dev/mmcblk0
1M,16M,c
,,L
EOT

Создаём файловые системы:

mkfs.vfat /dev/mmcblk0p1
mkfs.ext4 /dev/mmcblk0p2

Теперь нужно установить загрузчик (u-boot). Возвращаемся обратно  в директорию u-boot-2017.11:

cd ../u-boot-2017.11

Записываем ранее скомпилированный загрузчик на SD карту:

dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8

Монтируем загрузочный раздел SD карты и копируем туда dtb файл и образ ядра:

mkdir /mnt/bootprt
mount /dev/mmcblk0p1 /mnt/bootprt
cp linux-4.9.68/arch/arm/boot/zImage /mnt/bootprt
cp linux-4.9.68/arch/arm/boot/dts/sun7i-a20-cubietruck.dtb /mnt/bootprt

Переходим в примонтированный загрузочный раздел и создаём файл boot.cmd со следующим содержимым:

fatload mmc 0 0x46000000 zImage
fatload mmc 0 0x49000000 sun7i-a20-cubietruck.dtb
setenv bootargs console=tty0 hdmi.audio=EDID:0 disp.screen0_output_mode=EDID:1920x1080p60 root=/dev/sda2 rootwait panic=10 ${extra}
bootz 0x46000000 - 0x49000000

Поменять здесь можно опцию root - в данный момент она указывает, что корневой раздел находится на /dev/sda2. Опция disp.screen0_output_mode устанавливает разрешение фреймбуфера.

И последняя команда, которая создаёт файл boot.scr:

mkimage -C none -A arm -T script -d boot.cmd boot.scr

Всё, можно перезагружать систему.

Так же можно скачать готовые скомпилированные ядра и модули отсюда. Они для десктопа, с поддержкой всякого - собиралось такое ядро на Cubietruck около 12 часов.

Правда у меня они так и не завелись, возможно я что-то не так делал. Грешу на файл boot.cmd и образ ядра - uImage, а не zImage. Для загрузки uImage ипользуется команда bootm, а я не помню, менял я её или нет 🙂 Попробую ещё на новых версиях, как их выложат.

Установка Qemu и Raspbian

Как и писал в предыдущем посте, приехал до меня Raspberry Pi3. Заказывал на AliExpress, в наборе ещё был внешний бокс, HDMI кабель, радиаторы и блок питания. Ссылка на комплект будет в описании к видео на YouTube, которое я расположу в конце поста.

Брал я его для того, чтобы сделать из него медиацентр посредством Kodi. Но до этого я хотел запустить сам дистрибутив Raspbian на компьютере, чтобы посмотреть, как вообще все это будет работать.

Нашёл статьи по подготовке запуска Raspbian в Quemu - раз и два.

Но в Gentoo подобных дистрибутивах нужно ещё собрать Qemu c флагом QEMU_SOFTMMU_TARGETS="arm"

В принципе в статьях всё подробно расписано, но нужны небольшие изменения. Вот команда запуска уже подготовленного Qemu из вышеприведённых статей, но они немного различаются:

В первой статье написано так:

qemu-system-arm -kernel ./qemu-rpi-kernel/kernel-qemu-4.4.26-jessie -cpu arm1176 -m 1024 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" -hda rpi.img

А во второй так:

qemu-system-arm -kernel /kernel-qemu -cpu arm1176 -m 256 -M versalitepb -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda <путь_к_образу_Rapbian>

Итак, красным обозначены ошибки в опции, синим - правильно написание.

Опция -m задаёт количество выделяемой памяти для виртуальной машины. Но есть одно но - библиотека versatilepb не может работать с больше, чем 256 Мб оперативной памяти, это захардкожено в её коде. Во втором примере написано верно (-m 256), но ошибка в написании имени библиотеки. А строка init=/bin/bash не нужна - с ней не будет загружаться графический интерфейс.

А так всё работает, правда подлагивает 🙂

Ещё нашёл видео на YouTube, где просто и понятно рассказывается про настройку Kodi на Raspberry Pi3.

Raspberry Pi, WordPress и плагин WP Statistics

Хотел написать о покупке Raspberry Pi, но перед этим решил обновить WordPress. Обновил, захожу на страницу обновления плагинов, обновил и их заодно. Перезагружаю страницу для проверки и на тебе - белый экран. Сначала почему-то грешил на тему оформления, что это все из-за неё. Дальше отключил все плагины - страница загрузилась. Путём перебора выяснилось, что проблемы создаёт плагин WP Statistics. И судя по этой ссылке, это ещё цветочки - версия 12.3 жрёт память и отказывается считать статистику. Так что пока пусть будет отключён, до выпуска другой версии.

Запуск The Sims 4 и Origin через Wine

От скуки решил скачать The Sims 4, чтобы устроить там чад кутежа и кровавого угара. Запускается он через Origin, но так как я собирался поиграть от силы пару часов, то скачал взломанную версию.

Вот только при запуске игры вылезает ошибка, что мол Origin не запущен, запустите его и попробуйте снова. Почитал комменты на трекере - у некоторых людей такая же проблема, причём на Windows. Скачал другую раздачу - всё тоже самое. И тут в одной раздаче увидел в комментариях совет - мол, поставьте Origin, но не регистрируйтесь там, просто установите, и когда игра запустится - появится окно Origin для ввода логина и пароля, а дальше пойдёт сама игра.

Лады, скачаю, поставлю. Скачал, давай ставить - запуск установщика крашится, ругаясь на DirectX11, примерно как в игре Beholder. Полез на сайт Wine, там и нашёл решение - нужно создать 32-х битный префикс, скачать Legacy версию Origin, выставить в winecfg совместимость с Windows XP для скачанного файла, и установить его. Legacy версия позволяет только загружать игры, но нельзя просматривать сам магазин игр или бесплатные игры, но нам этого вполне хватит, мы же не собираемся ничего там покупать ;).

После этого The Sims 4 без проблем запускается и работает.