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

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

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

Шеф, все пропало.

Итак, после 2-х месячного отдыха сайт заработал. Все дело было в Mysql, который никак не хотел подниматься. Все писал, что типа "Сan't connect to local mysql server
through socket '/tmp/mysql.sock' (2)". Было очень много танцев вокруг него, перепробавана куча советов. Даже удалял его полностью, обновлялся до версии из testing.
Потом пошла другая ошибка, но уже при обновлении до testing -

update-alternatives: error: alternative path /etc/mysql/mysql.cnf doesn't exist

В обчем, на 2 недели я на него забил. А сегодня решил таки продолжить решать проблему. Делов-то оказывается оставалось на 2 пальца - сделать "ln -s /etc/mysql/my.cnf
/etc/mysql/mysql.cnf" и далее apt-get -f install. Мускул запустился. Правда забекапченая база у меня оказалась немного старовата - не хватает таких постов:

"Взял себе новый маршрутизатор" 22.08.2015
"Доработка мелкой наждачкой темы Twenty Twelve 3" 25.08.2015
"Разбираемся с Gentoo и MAKEOPTS=”-j${core} +1″" 01.09.2015

Пост "Проблема с WordPress 4.3 Media Library" я достал из кэша гугла.

В принципе про Gentoo и значения MAKEOPTS можно восстановить, у меня остался текстовый файл с значениями времени сборки.

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

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

В работе

 

Приключения продолжаются

Видать Кришна не хочет, чтобы я пользовался 29-м ядром. После сборки ядра поставил дайвер для видеокарты (7800 GS) из репозитория. На glxgears произодитеьность упала до 1000-1500 фпс, со скачками до 2000 и 500 фпс – на старом держалось примерно 2000-2500 фпс. Сеть таки отваливается при копировании с NFS шары бука. Потом чудесным образом начал отваливаться LinuxDC, сыпя в консоль "Ошибка шины". Хорошо хоть, что не руля. Почесав репу, надумал просто отформатировать раздел в ext3, откатиться на 25 ядро, в котором хоть все работает нормально.

29-ое ядро

Наконец-то осилил нормально завести 29 ядро. Сетевая не поднималась, т.к. теперь она определяется как eth1. А я по своей тупости не посмотрел ifconfig -a. Далее, захотел поставить драйвер для видеокарты. Скачал, начал ставить – выдает ошибку, что что-то не то в каталоге с ядром. Как выяснилось не надо было делать make clean. Заново пересобрал ядро и модуль нормально собрался и заработал.

Ядро

Нда. Прошла неделя, но так и не разобрался с ядром. Все началось с того, что я заебался ждать, когда выпустят патч для reiser4. Закинул файлы с винта с reiser’om на бук через NFS и форматнул его в ext4. Взял конфиг от старого ядра и собрал 29-е ядро. Все работает, но после того, как я начинал копировать данные обратно через NFS, сеть просто отваливаась. Причем переставал работать и интернет и домашний каталог просто не открывался. Даже просмотреть через ls его нельзя – на экран ничего не выводилось. Такая же история с ssh – соединялся с ноутбуками, начинал обновлять систему и терминал просто "зависал" – т.е. на нем все замирало. И также отваливалось соединение с инетом и невозможно просмотреть свой каталог. Опять пошли ковыряние в ядре, с какого-то перепугу включился в ядре фреймбуфер для видюхи и Nvidia драйвер из-за этого не ставился. Пересобрал. Теперь не работает сеть. Ладно, Иксы и прочее работает нормально. Но через некоторое время (примерно минут 5) отключается клавиатура. Хотя если не запускать Иксы, клавиатура не отключается. В обчем, не осилив 29 ядро, решил вернутся на старое 25-ое, на котором по крайней мере все работало. Вот щас соберется ядро, я очень внимательно просмотрю конфиг 29 ядра, подрехтую его и попробую собрать опять. мало ли, может заработает.

Подключение веб-камеры в Debian Linux

Затарился я веб-камерой, для общения через скайп. Надежда, что все подхватится сразу, после подключения камеры к ноутбуку, быстро развеялась.
Модель камеры – VF0470.Для начала, идем сюда и выбираем модель веб-камеры. Напротив моей камеры нет какого-либо описания для ее подключения, но рядом есть похожая камера  – VF0400 с ссылкой на вики-страницу с описанием подключения и установкой драйвера. Драйвер для моей камеры можно собрать из исходников, либо установить из основного репозитория Debian (также драйвер есть в репозиториях Ubuntu, Ark и Suse) в текущем стейбле – Lenny, он уже есть. Называется он ov51x-jpeg-source. Устанавливается драйвер следующими командами
# aptitude update
# aptitude install ov51x-jpeg-source module-assistant
# module-assistant a-i ov51x-jpeg
Вот и все, осталось только добавить в файл /etc/modprobe.d/options следующую строку
options ov51x-jpeg forceblock=1
Иначе в скайпе вместо изображения будет белый квадрат. Можно подключить камеру и убедится, что все работает. У меня в скайпбыла проблема – невозможно было выбрать видео-устройство, хотя под рутом можно было спокойно выбрать веб-камеру и было изображение. Проблема решилась добавлением пользователя в группу video.