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

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. Надеюсь, мозгоёбство на этом закончится.

Истинный виновник падения 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 карта будет работать.

Внезапно

Отвалился sshd. Я цепляюсь к Cubietruck через ssh, а мне в ответ "Write failed: broken pipe". Прогонял через Strace и GDB, первая кажет, что отваливается на этом:

privsep_preauth: preauth child terminated by signal 11

второй не кажет ничего. При перезапуске через "service" - Segmentation fault. Вручную, через "/etc/init.d/sshd start" запускается, но все равно толку нет. Начал лазить везде, читать всякое. Кто рекомендовал увеличить время ожидания сервера, кто переустановить либы Kerberos'a (libkrb5). Потом я еще решил обновить OpenSSH до версии в Jessie, вдруг заработает. Но поставить не получилось, т.к. ssh по прежнему не перезапускался через команду "service ssh restart", поэтому новая версия не ставилась.

Дальше решил вообще перейти на Jessie, мало ли, вдруг после обновления заработает. Поменял в файле apt.conf  "Default-Release" на "jessie", раскоментировал в source.list строку

"deb http://http.debian.net/debian/ jessie main contrib non-free"

и дальше apt-get upgrade. Обновлялось долго, 253 пакета нужно было обновить, плюс система работает на SD карте. Правда все эти танцы - как мертвому дрочить. При этом еще и Apache начал падать с Segmentation fault.

Поэтому решил перезагрузить кубик, по идее должно решить проблему. Перезагрузил, система загрузилась, хотя в другом посте я очковал по этому поводу. И все заработало, что радует. И да, таки разобрался с конфигом для DDclient, чтобы он обновлял IP адрес для noip.com. Конфиг:

use=web, web=http://ip1.dynupdate.no-ip.com/, web-skip='IP Address'
protocol=noip
login=login
password='password'
hostname

Но вообще думаю в начале апреля зарегать свой собственный домен. Стоит-то копейки, пачка сигарет в месяц, грубо говоря.

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

Наконец-то дошли руки в который раз поднять свой уютный бложек. Только уже на 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 вместе с жестким диском лежит на подоконнике у окна.

В работе