Архив метки: cubietruck

О предыдущем посте

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

В обчем, дело обстоит так.

По поводу NFS. Когда я перезагружал Cubietruck, чтобы загрузить новое ядро, он работал уже какое-то время, и в файловой системе на жёстком диске появились ошибки. Cubietruck перезагружался, диск монтировался, запускалась проверка на наличие ошибок. Проверка проходила успешно, но службы, которые используют данный винт, нужно было после проверки обязательно перезапустить, иначе они не работали. Как например NFS сервер - клиенты просто не могли к нему подключиться. Или тот же Transmission-daemon -  он запускался, но все раздачи были остановлены. Или MiniDLNA не отдавал список файлов - BubbleUPnP видит Cubietruck, цепляется к нему, видит список директорий, но они все пустые.

Итак, с этим всё понятно, дело не в ядрах 😉

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

Я писал, что были ошибки именно файловой системы и ещё ошибки от модуля UAS (USB Attached SCSI), примерно вот такие. Полез я почитать, что же это за модуль такой. На сайте linux-sunxi есть статья о нём. Вкратце, что пишут - это чуть более быстрый протокол доступа к HDD и SSD, является опциональной частью спецификации USB 3.0, но может работать и с USB 2.0, если железа и драйвера совместимы. Ниже идут тесты чтения/записи, с включённым и выключенным модулем UAS. Когда он выключен, время чтения примерно 35 МБ\с, скорость записи 33-34 МБ\с. Когда он включён, скорость чтения около 40 МБ\с, скорость записи 37-38 МБ\с.

Но есть ещё одна деталь - на порт подаётся 900 миллиампер в час, а не 500. И как пишут дальше, из-за этого возможно такая ситуация, что 2,5" жёсткий диск не сможет даже раскрутиться.

Так что я выпилил этот модуль из ядра. Cubietruck работает почти 6 суток, dmesg молчит, никаких ошибок файловой системы.

Снова про обновление ядер 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-х месяцев без перезагрузок. Я больше склоняюсь к тому, что проблема именно в старой файловой системе. Как вариант - отформатировать винт, файлы музыки и фильмов лежат в торрент-клиенте, так что он их просто перекачает.

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

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, а я не помню, менял я её или нет 🙂 Попробую ещё на новых версиях, как их выложат.

Оживить Cubietruck, часть хз какая.

Cubietruck в очередной раз помер, мои надежды не оправдались. Действительно, начала глючить флешка, но я заранее заказал на Aliexpress новый SDD, марки KingDian объёмом 64 Гб.

План был таков - из ноута вытащить старый HDD и поставить его в кубик, а новый SDD поставить в ноут. Был еще вариант купить новую флешку, но посмотрев на цену (хорошая флешка стоила около 1600 рублей, а цена SDD - 2000), этот вариант сразу же отпал. Правда пришлось ещё докупить вот такую коробочку для жёсткого диска, ибо Sata порт кубика port multiplier не поддерживает. Хотя я находил решение, но ссыкотно было его покупать, хрен его знает, может не взлетит.

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

Итак, диск приехал, я сразу метнулся на почту, а следом в магазин за внешним боксом. Подключил 2,5" диски к десктопу, разбил новый диск на партиции через Gparted (не Ъ, да), начал копировать систему посредством rsync. Позже напишу пост, чё да как, очень удобная штука, как выяснилось, плюс про полезные фичи для работы системы на SSD диске.

SDD воткнул в ноут, система нормально загрузилась. Далее поставил (в который раз) Cubian на флешку, скопировал всё на диск, после этого внёс изменения в загрузочный файл (об этом тоже в другом посте), чтобы дальнейшая загрузка шла с диска.

Далее разобрал ту конструкцию, на которой крепилась плата Cubietruck, выкинул батарейку - из-за неё кубик при большой нагрузке на диск отключался. Воткнул всё в ч0рную коробочку, которая также шла в комплекте с Cubietruck. Надеюсь, мозгоёбство на этом закончится.

Cubietruck: обновление ядра Cubian

Итак, для чего мне это нужно. Дело в том, что в качестве торрент-клиента у меня стоит Transmission с веб-мордой. В версии 2.52 в веб-морде нет строки для указания места, куда будет загружаться файл, она появляется только в версии 2.84, папка для загрузки задаётся жёстко в конфиг-файле. И самое прекрасное - обновление из Jessie (нынешний Stable релиз) до этой самой 2.84 тащит за собой ещё и новый udev, а новый udev требует опцию FHANDLE=y в ядре, иначе при следующем запуске система не загрузится, об этом я писал ещё в марте.

Но поцчему-то сам Cubian перестал обновляться, по крайней мере ядро, и последняя новость на сайте - от 8.10.14, когда вышел Cubian X. И так как я не умею пересобирать ядро для архитектуры arm, приходиться юзать уже готовые сборки. Человек на Git'e Cubiana'a задавал такой же вопрос - как обновить ядро? Ему ответили - иди по этой ссылке, читай файл readme.txt и ставь ядро. Хорошо, что я чуть-чуть умею читать по буржуйски , тоже прочитал этот самый readme и начал ставить. Может ещё кому пригодится. Поехали.

Для начала желательно таки прочитать файл readme.txt, там написано, какой последний выпуск ядра и что в него добавлено\убрано, лишним не будет. На момент, когда я этим занимался, самое новое ядро было версии danand_a20_3_4_110_c. Я выбрал первый способ установки, т.к. это первая установка ядра, дальнейшие обновления можно будет делать на работающей системе.

Качаем нужный архив ядра, распаковываем.

Подключаем SD карту с установленным Cubian'ом к компьютеру, автоматически должны примонтироваться 2 раздела - /boot  и / (корень). В директории распакованного ядра 3 поддиректории - boot, firmware, modules. Из boot берем образ ядра uImage и копируем в /boot флешки Cubietruck'a. Причём в /boot уже будет файл uImage, это символическая ссылка на старое ядро uImage-3.4.79-sun7i. Ссылку можно предварительно удалить, она уже не нужна, а вот uImage-3.4.79-sun7i трогать не стоит, пусть лежит, в случае проблем с новым ядром можно будет удалить файл нового ядра и опять сделать символическую ссылку на старое ядро. Итак, здесь закончили.

Выходим из boot, следующая директория firmware, просто копируем отсюда все в /lib/firmware флешки Cubietruck'a. Следом нужно задать владельца и группу root для  директории - chown -R root:root /lib/firmware.

Выходим из директории firmware и заходим в modules. Внутре неё находится поддиректория 3.4.110-sun7i+, у более старого\нового ядра будет своё название. Вот её необходимо скопировать в /lib/modules Cubietruck'a, причём не сами файлы внутри неё, а директорию целиком. После этого задаём владельца и группу root для директории - chown -R root:root /lib/modules/3.4.110-sun7i+.

На этом все, вытаскиваем флешку, пихаем в Cubietruck, включаем, наблюдаем за загрузкой кубика.

Истинный виновник падения Cubian

Как оказалось, причина всему - фуфельная SD карта, которую я достал из старой электронной книжки Texet TB-740HD и на которой до последней переустановки работал Cubian. Теперь поступил по другому - вытащил карту памяти на 16Гб из Samsung Galaxy Tab 10.1 и вставил ее в Cubietruck, а карточку, которая стояла в нем, поставил в Galaxy Tab. И вот, после того, как в очередной раз поставил систему на новую SD карту - она стала шустрее работать, повысилась отзывчивость и т.д., а все потому, что карточки разных классов. Карта, которая теперь стоит в Cubietruck  - 10 класс, а которая в планшете - 4 класс, на что я раньше не обратил внимания. И вот, стал я на эту карту фильмы кидать и всякое такое, чтобы на работе смотреть (в перерывы и обеденное время, конечно). И тут началось самое интересное - смотришь фильм, тут бац - картинка плыть начинает или звук пропадает, артефакты появляются. Проматаешь чуть вперед - опять нормально. Сначала грешил на торрент-клиент, что он криво закачал, или что Cubian опять подлагивать начинает. Или с NFS шары файл криво скопировался. А потом заметил, что лагает только то видео, которое записано на карту памяти. Если кидать в память планшета - то все нормально, никаких проблем.

Прогнал через "badblocks -vw", нашлось 232 покоцанных блока. С опцией -w данные удаляются, т.к. начинатся запись на разые участки диска одинаковых данных и последующее их считывание, чтобы проверить, правильно ли записались данные, если нет - сектор помечается как bad block. Из ArchWiki:

"In case of a HDD the whole sector should get retired. A sector is a subdivision of a track on a storage device and sectors that have become bad cannot be used because they have become permanently damaged (a bad sector can have adverse effects ranging from changing a letter in a text file to causing a binary program to have a segmentation fault). "

На используемой файловой системе, т.е. на которой важна сохранность данных, нужно использовать ключ "-n", проверка будет идти медленнее, но с твоей порнухой, %username, ничего не случится.

В обчем посмотрим, как теперь SD карта будет работать.

Пришла батарейка для Cubietruck

Пришла большая коробченка, размером 20*15*15см. Показалось подозрителным. При вскрытии коробочки обнаружил коробочку поменьше, обернутую в фольгу. Сама коробочка тщательно обложена со всех сторон поролоном и пузырчатой упаковкой. Ободрал фольгу, вскрыл коробочку - там полиэтиленовый мешочек с, как это ни странно, детскими носками. Внутри носка - заветная батарейка, размером 7*3*0,5см. Подключил батерейку к Cubietruck, она подзарядилась, статус заряда и вольтаж можно посмотреть командами

cat /sys/class/power_supply/battery/status

и

cat /sys/class/power_supply/battery/voltage_now

соответственно.

Покупал у этого продавца, правда доставка стоила 373 рубля, а не 568, как сейчас.

Обратно всплыть по рубку.

Наконец-то дошли руки в который раз поднять свой уютный бложек. Только уже на Cubietruck (Cubieboard 3). Однако обо всем попорядку.

Cubietruck пришел ко мне из Китая примерно в конце Октября. В это врямя я был сурьёзно занят употреблением пивных напитков и поэтому занялся этой коробочкой только в 2015 году, а так просто включил, посмотрел, что встроенный Android грузится, выключил, убрал все обратно в коробку и поставил на полку. Где-то в Январе веселье закончилось, я смахнул пыль с убранной на полку коробки и понеслось. Выцарапав из старой электронной книги sd карту объёмом 8 Гб, записал на нее Cubian. Есть еще дистрибутивы, например Lubuntu или Fedora, а так же основанные на Arch'е и Gentoo. Присовокупил внешний жесткий диск 3,5". Запитывал от такого блока питания. Поднял NFS, Nginx-Mysql-Wordpress-PHP, Transmission. Решил обновить Transmission, т.к. в версии 2.52 нельзя указывать путь для сохранения каждого торрента, задается только общий. И подключил Jessie репозиторий. И понеслось. Transmission потащил за собой всякое, конфликты, зависимостей udev, который не хотел ставится из-за старого ядра и т.д. В общем все пропало, форматнул флешку, начал жизнь с чистого листа. Потихоньку обновился, разобрался с udev, поставив новое ядро (правда не знаю, сможет оно загрузится или нет), ну а дальше по накатанной - NFS, Nginx-Mysql-Wordpress-PHP. Вот только теперь Nginx не захотел казать мой бложек. Делал все как в прошлый раз, ничего. Поставил Apache, такая же ситуация (правда я его не настраивал). Ну и плюнул на это дело. А где-то через месяц опять вбил IP моего мега-сервера и вуаля - стандартная страница Apache. Сразу же попробовать потыкать палочкой в Nginx, но он все равно не подавал признаков жизни, поэтому я его хладнокровно aptitude purge nginx. И начал ковыряться в настройках Apache. У него оказалось так же все разбросано по директориям, как и у Nginx (да, это стиль Debian, я знаю, просто когда первый раз ставил Nginx, был не в курсе и был несколько удивлен таким расположением настроек). Все заработало, правда теперь осталось подшаманить с WordPress, т.к. я скопировал конфиги, но не папку с плагинами и темами. Соответственно, при заходе на главную, показывает белый экран и все. Но если зайти на какую-нибудь другую страницу, например настроек, то все сразу отображается. Лечится просто установкой другой темы в настройках.

И да, Plex я не поднял, т.к. его нет в официальном репозитории. Собирать его ручками как-то не хотелось, а на официальном сайте только для ARM 6.x, поэтому остановился на MiniDLNA. Правда чуть-чуть пришлось подшаманить - у меня всё видео раскидано по директориям - Фильмы, Сериалы и, конечно, Аниме. А когда задаешь список путей до файлов в конфиге MiniDLNA, то все смешивается, т.е. телевизор кажет общую папку, где находятся Фильмы, Сериалы и, конечно, Аниме. Поэтому просто создал директорию Media и туда накидал символических ссылок на Фильмы, Сериалы, и, конечно, Понятно-Что.

Итог. За свои деньги (я брал за 3800 на Aliexpress) аппарат кошерный, занимает мало места, не издает шума. Я свой старый системник разобрал на запчасти, корпус упер в гараж, а на его место поставил тумбу. А Cubietruck вместе с жестким диском лежит на подоконнике у окна.

В работе