среда, 27 января 2016 г.

Rapberry Pi сетевой аудиоплеер на TinyCore




Перевод статьи http://www.gerrelt.nl/RaspberryPi/wordpress/tutorial-unpluggable-squeezelite-player-on-tinycore/

Введение

Когда я установил Squeezelite на мой Raspberry Pi, я использовал операционную систему Raspbian. Все работало довольно хорошо. Но когда я установил Raspberry в поративный старый радиоприемник, плеер стал поративным. Это означало что он мог быть установлен где угодно. Все работало хорошо но была проблема с выключением. Мне было необходимо подключаться по SSH (используя ServerAssistant на моем телефоне) и выполнять комманду shutdown. Это было не совсем удобно.
Но потом я для себя открыл piCore. Это портированная на Raspberry Pi операционная система “TinyCore“. Это версия линукса оторая всегда загружаеться в оперативную память. Это означало что SD карта используеться толькол для чтения (за исключением случая когда нужно сделать бекап).
Результатом стала возможность выключения Raspberry без команды shutdown!

 

piCorePlayer

На форуме Raspberry Pi пользователь “sbp” разработал piCore образ с предустановленным плеером Squeezelite. Образ называеться piCorePlayer и располагается по следующему адресу:

 

Здесь можете найти обсуждение на форуме Raspberry Pi:
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=35&t=29539

В использовании piCorePlayer очень прост. Просто запишите образ на SD карту и истановите ее в ваш Raspberry Pi, более подробные инструкции можете найти на сайте.
Но если вы любитель сделать все своими руками, в этом посте я вам расскажу как установить squeezelite самостоятельно. Но для начала вам нужно будет разобраться с частью функциональности piCorePlayer.
Но возможно вы узнаете что то новое по ходу работы.

 

Что нам необходимо

Смотри эту страницу.
Так же стоит прочитать эти Советы новичкам по использованию Putty, если мы не знакомы с Putty.

 

Начало инструкции

Скачайте заархивированный образ:
http://tinycorelinux.net/6.x/armv6/releases/6.0/piCore-6.0-SSH.zip
Распакуйте содержимое в папку. В папке должен оказаться .img файл. Этот файл нужно записан на SD карту используя Win32DiskImager, так же как вы это делали с Raspbian.
Вставте SD карту в ваш Raspberry, подключите к сети и включите устройство. Узнайте IP адрес Raspberry Pi используя панель усправления вашим роутером, и подключитесь к Raspberry по протоколу SSH  (используя на пример Putty). Имя пользователя “tc”, пароль “piCore” (= обратите внимание на регистр букв!).

 

Увеличение второго раздела

Первое что вы сейчас должны сделать это увеличить второй раздел на SD карте. Этот раздел предназначен для хранения расширений, программ и домашней папки.
Этот метод так же описан в README файле поставляемым вместе с образом системы.

Выполните комманду:

sudo fdisk /dev/mmcblk0

Команда fdisk перейдет в командный режим. Вы сможете управлять командами нажимая буквы. Для начала нажмите “p“, это должно привести к примерно таким результатам: 

Command (m for help): p

Disk /dev/mmcblk0: 4025 MB, 4025483264 bytes
 4 heads, 16 sectors/track, 122848 cylinders
 Units = cylinders of 64 * 512 = 32768 bytes

Device Boot      Start         End      Blocks  Id System
 /dev/mmcblk0p1         33         672       20480   c Win95 FAT32 (LBA)
 /dev/mmcblk0p2        673         917        7840  83 Linux

Теперь пометьте значние start второго раздела /dev/mmcblk0p2. В моем случае оно равно 673.
Мы удалим второ раздел и создадим его снова но большего размера. Нажмите букву “d“, далее выберите второй раздел нажав цифру “2“. Это должно выглядеть так:

Command (m for help): d
Partition number (1-4): 2

После этого мы должны создать новый раздел. Сделаем это нажав “n” а потом “p” ('p' для создания раздела primary), далее “2” (указываем второй раздел), далее вводим значение “start number” которое мы запомнили ранее на предыдущем шаге (в моем случае это 673) и жмем enter для установление значения по умолчанию для последнего цилиндра.
Должно выглядеть примерно так:

Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1-122848, default 1): 673
Last cylinder or +size or +sizeM or +sizeK (673-122848, default 122848): Using default value 122848

Далее мы должны задать тип раздела как “linux”. Нажмите “t“, затем “2” (рабоатем со вторым разделом) и введите “83” это значние  файловой системы Linux. 

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 83

Нажмите “w” для записи всех изменений и выходите из fdisk. 

Command (m for help): w

Перезагрузите raspberry:

sudo reboot

Когда raspberry загрузиться, подключитесь по SSH снова и введите команду:

sudo resize2fs /dev/mmcblk0p2

Теперь ваш второй раздел увеличен до размера SD карты.

 

Поиск  и установка расширения NANO

Вы не можете жить без текстового редактора в операционной системе Linux (или любой другой операционной системе... :-) ). По умолчанию доступен редактор “vi” на piCore (портированная наRaspberry Pi операционная система TinyCore). Я работал с vi много лет но так и не привык к нему. Я всегда забывал сочетания лавиш для замены и других полезных функций. Конечно vi очень мощный инструмент но я очень доволен тектовым редактором “nano”, который доступен как расширение для piCore!
Я так же его использую как пример поиска и установки расширений для piCore.
Выполните команду:

tce

Это перенес вас в коммандную строку tce. Нажмите “s“, для поиска, и затем введите “nano“. Это должно отобразить следующий результат:
 
tce - Tiny Core Extension browser

         1. nano-doc.tcz
         2. nano-locale.tcz
         3. nano.tcz

Enter selection ( 1 - 3 ) or (q)uit:

Вам нужен “nano.tcz”, так что нажмем “3” и далее нажмем ввод (enter). Эта команда перенесет на на страницу описания расширения. Что бы выйти нажмите “q“, и далее нажмите “i“, чтобы установить nano.
После завершения установки нажмите “q” чтобы выйти из tce. Теперь у вас установлен nano.
И теперь вы знаете как искать расширения.

Из за того что таким образом очень накладно искать и устанавливать расширения, есть сокращенная команда, что бы все сделать в одну строчку:

tce-load -wi nano.tcz

Намного быстрее правда? :-) Я буду использовать эту команду в остальной части руководства.
Теперь снова перезагрузимся:

sudo reboot

Примечание: На образе piCore SSH, приложение MidnightCommander так же доступно. Это приложение во многом похоже на старый “Norton Commander” файловый менеджер, который был популярен во времена DOS. Он может быть использован как файловый менеджер, но он так же содержит текстовый редактор.
Приложение можно запустить командой “mc“. Очень удобно перемещать между папками и редактировать файлы.

 

Сохранение изменений/новые файлы

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

filetool.sh -b

Эта очень важная команда, вы должны выполнять ее каждый рах когда нужно что то сохранить.
Сейча вы возможно заметили сообщения о безопасности в Putty (или другом вашем любимом SSH клиенте) при каждом подлючении к piCore. Сообщение спрашивает вас каждый раз принять ключи. Это из за того что SSH ключи генерируються при каждой загрузке ОС и из за того что вы до сих пор не воспользовались командой filetool.sh -b. Так что выполните эту команду.
Если вы добавили новые файлы, вам необходимо сказать piCore что эти фалы необходимо сохранить. Иначе после перезагрузки эти фалы будут утеряны. Что бы этого не произошло выполните команду filetool.sh -b.
Есть файл в котором перечислены все директории и файлы, сохраняемые этой командой. Этот файл называется .filetool.lst (да он начинается с точки).
Его можно открыть с помощью nano:

sudo nano /opt/.filetool.lst

И вы увидите этот список файлов:

usr/local/etc/ssh/ssh_host_dsa_key
usr/local/etc/ssh/ssh_host_dsa_key.pub
usr/local/etc/ssh/ssh_host_ecdsa_key
usr/local/etc/ssh/ssh_host_ecdsa_key.pub
usr/local/etc/ssh/ssh_host_rsa_key
usr/local/etc/ssh/ssh_host_rsa_key.pub

Это пути к файлам содержащих SSH ключи. Обратите внимание что пути не начинаютья со слеша “/”, по какой то причине он не разрешен здесь.
Закройте файл без сохранения, мы не собиаремся что либо в нем менять пока. Я вам расказал про него только в обучающих целях. :-)

 

Меняем Hostname

Мы будем использовать имя хоста Raspberry Pi  как имя плеера для Squeezebox. Это позволит нам легко найти Raspberry Pi в списке DHCP клиентов на вашем роутере.
Откройте этот файл:

sudo nano /opt/bootsync.sh

И измените эту строку поменяв “box” на название вашего будущего плеера squeezebox:

/usr/bin/sethostname box

Будьте Осторожны: Вы можете использовать только латинские буквы, цифры и минус (-)!

Сохраните и выйдите из редактора, после чего сохраните изменения на SD карту коммандой:

filetool.sh -b

И перезагрузите Raspberry Pi.

 

Активация встроенной звуковой карты

Если вы будете использовать USB звуковую карту (я так и рекомендую в виду лучшего качества звука), тогда можете пропустить этот шаг. Если вы хотите использовать встроенный  3.5мм разъем, тогда вам нужно активировать звуковую карту на устройстве. Сначала вы должны выполнить следующие команды:

sudo mount /dev/mmcblk0p1
sudo nano /mnt/mmcblk0p1/config.txt

Это откроет файл config.txt в текстовом редакторе nano. Теперь поищите строки которые начинаються с “dtparam=” и добавтье “,audio=on” в конец строки. Должно получиться следующим образом:

dtparam=i2c=on,spi=on,i2s=on,audio=on

Сохраните файл и перезагрузитесь:

sudo reboot

 

Установка Alsa

Установим Alsa с помощью tce:


tce-load -wi alsa.tcz
tce-load -wi alsa-config.tcz

Нам необходимо установить уровень громкости который будет устанавливаться при запуске. Для установки уровня громкости запустим alsamixer:

sudo alsamixer

И использую клавишу F6 выберем нужную аудиокарту (Я использую USB звуковую карту), и затем установим уровень громкости клавишами со стрелками. Установите уровень громкости настолько высокий насколько это возможно без выхода в красныую зону.
Я также установил громкость мирофона на минимум для уверености что он не повлияет ни на что.
Если вы перезагрузитесь сейчас вы потеряете изменения. Что бы сохранить настройки вы должны выполнить следующие команды:

sudo alsactl store
sudo echo "var/lib/alsa" >> /opt/.filetool.lst

Первая команда сохраняет все в файл настроек, а вторая команда говорит piCore сохранить всю дерикторию alsa на SD карту огда будет вызвана команда filetool.sh -b. Вторая оманда добавляет строку “var/lib/alsa” в конец файла .filetool.lst.
Так же нам нужно указать piCore чтобы аудио настройки востанавливались после перезагрузки. Откройте файл содержащий команды выполняемые при загрузке:

sudo nano /opt/bootlocal.sh

И добавите эту команду в конец файла:

alsactl restore

Сохраните файл и выйдите из редактора. Не забудьте сохранить все изменения с помощью команды:

filetool.sh -b

И перезагрузите Raspberry Pi.

 

Установка Squeezelite

Следующим шагом установим Squeezelite, это програмная версия Squeezebox. Скачать собрать и запустить можно с помощью этих коммнад:

wget -O squeezelite-armv6hf http://ralph_irving.users.sourceforge.net/pico/squeezelite-armv6hf-noffmpeg
sudo mv squeezelite-armv6hf /mnt/mmcblk0p2/tce
chmod u+x /mnt/mmcblk0p2/tce/squeezelite-armv6hf

(Спасибо Ralphy за предоставленный исполняемый файл squeezelite доступный для загрузки!)

Вам необходимо установить некоторые библиотеки:

tce-load -wi flac.tcz
tce-load -wi libmad.tcz
tce-load -wi libvorbis.tcz

Из за того что я использую USB звуковую карту, мне наобходимо сказать squeezelite какое устройство нужно использовать для вывода звука. Что бы просмотреть список всех устройств выполните следующую команду:

/mnt/mmcblk0p2/tce/squeezelite-armv6hf -l

Результат должен быть похожим на следующее:

Output devices:
null                      - Discard all samples (playback) or generate...
default:CARD=ALSA         - bcm2835 ALSA, bcm2835 ALSA - Default Audio D...
sysdefault:CARD=ALSA      - bcm2835 ALSA, bcm2835 ALSA - Default Audio D...
default:CARD=Set          - C-Media USB Headphone Set, USB Audio - Defau...
sysdefault:CARD=Set       - C-Media USB Headphone Set, USB Audio - Defau...
front:CARD=Set,DEV=0      - C-Media USB Headphone Set, USB Audio - Front...
surround40:CARD=Set,DEV=0 - C-Media USB Headphone Set, USB Audio - 4.0 S...
surround41:CARD=Set,DEV=0 - C-Media USB Headphone Set, USB Audio - 4.1 S...
surround50:CARD=Set,DEV=0 - C-Media USB Headphone Set, USB Audio - 5.0 S...
surround51:CARD=Set,DEV=0 - C-Media USB Headphone Set, USB Audio - 5.1 S...
surround71:CARD=Set,DEV=0 - C-Media USB Headphone Set, USB Audio - 7.1 S...
iec958:CARD=Set,DEV=0     - C-Media USB Headphone Set, USB Audio - IEC95...

Второе и третье устройство указывают на вывод звука на встроенную свуковую карту Raspberry. Качество звучания этого устройства не очень хорошее,  поээтому я воспользуюсь внешней звуковой картой USB. Моя USB зуковая карта представленна остальными устройстваим в списке которые можно распознать по “C-Media”. Моя Logilink USB звуковая карта содержит “C-Media” чип.
Я хочу использовать только фронтальные динамики, поэтому я скажу squeezelite использовать “front:CARD=Set,DEV=0” .
Выбранное вами устройство запонмите или запишите в текстовый файл.

 

Запуск Squeezelite при загрузке

Я написал скрипт-демон для запуска Squeezelite при загрузке.
Этот скрипт использует отдельный скрипт содержащий настройки “squeezelite_settings.sh”.
Срипт использует bash. Это значит что мы должны установить bash:

tce-load -wi bash.tcz
sudo ln -s /tmp/tcloop/bash/usr/local/bin/bash /bin/bash
sudo echo "bin/bash" >> /opt/.filetool.lst

(symbolic link необходим так как Raspbian bash находиться в другой директории)
Скрипт-демон доступен на моем сайте, следующие комнды скачивают его и перемещают в нужную директорию и добавляют их в filetool.lst:

sudo wget http://www.gerrelt.nl/RaspberryPi/squeezelitehf.sh
sudo mv squeezelitehf.sh /usr/local/etc/init.d/squeezelite
sudo chmod a+x /usr/local/etc/init.d/squeezelite
sudo wget http://www.gerrelt.nl/RaspberryPi/squeezelite_settings.sh
sudo mv squeezelite_settings.sh /usr/local/bin
sudo chmod a+x /usr/local/bin/squeezelite_settings.sh

#add to .filetool.lst:
sudo echo "usr/local/etc/init.d/squeezelite" >> /opt/.filetool.lst
sudo echo "usr/local/bin/squeezelite_settings.sh" >> /opt/.filetool.lst

Вы должны записать настройки звуковой карты в срипте настроек.
Откройте файл натроек с помощью nano:

sudo nano /usr/local/bin/squeezelite_settings.sh

И найдите линию:

SL_SOUNDCARD="sysdefault:CARD=ALSA"

Измените “sysdefault:CARD=ALSA” на выбранную вами ранее звуоквую карту (в мое случаае я измени ее на “front:CARD=Set,DEV=0?).
Если вы хотите использовать встроенную звуковую карту Raspberry, вам не нужно ничего менять.
Другие настройки также могут быть изменены, смотрите коментарии для болей информации.
Для проверки настроек вы должны запустить squeezelite командой:

sudo /usr/local/etc/init.d/squeezelite start

Для того что бы piCore запускал squeezelite каждый раз при запуске Raspberry, мы должны вызнвать squeezelite скрипт из файла bootlocal.sh. Откроем его:

sudo nano /opt/bootlocal.sh

И добавим следующие строки в конец:

# when using wifi, connect to wifi before this line
/usr/local/etc/init.d/squeezelite start

Сохраните и выйдите из редактирования файла.
Сохраним все на SD карту:

filetool.sh -b

И перезагрузимся:

sudo reboot

После перезагрузки squeezelite должен запустить и работать.
Но у Raspberry все еще проводное подключение к сети, что не совсем удобно для поративного устройства. Следующим шагом мы настроим WiFi.

 

Создание подключения к беспроводной сети

Для работы WiFi нам необходимо установить wifi расширение и коекакие другие пакеты:

tce-load -wi wifi.tcz
# patch script for slow scanning wifi adapters
sudo wget -P /usr/local/bin http://www.gerrelt.nl/RaspberryPi/tinycore/wifi_g.sh
sudo chmod a+x /usr/local/bin/wifi_g.sh
sudo echo usr/local/bin/wifi_g.sh >> /opt/.filetool.lst
filetool.sh -b
tce-load -wi usbutils.tcz
tce-load -wi firmware-ralinkwifi.tcz
tce-load -wi firmware-rtlwifi.tcz

Последние три комнды не обязательны но без них может быть плохо.
И перезегрузимся:

sudo reboot

Теперь проверим доступность WiFi:

iwconfig

Если на выходе вы видете “wlan0“ в списке, то все работает хорошо.
Для настройки WiFi запустите:

sudo /usr/local/bin/wifi_g.sh -w

Следуйте за инструциями скрипта, чтобы выбрать правильную юеспроводную сеть.
Теперь у вас есть беспроводное подключение, но оно исчезнет после перезагрузки. Мы должны записаеть его в файл bootlocal.
Откроем файл:

sudo nano /opt/bootlocal.sh

И добавим эти строчки перед запуском squeezelite:

/usr/local/bin/wifi_g.sh -a -w 2>&1 > /tmp/wifi.log

Сохраним файл и не апудем выполнить эти строчки:

filetool.sh -b

Перезагрузите ваш Raspberry и все готово.
Наслаждайтесь! 
??

Комментариев нет:

Отправить комментарий