воскресенье, 12 июля 2015 г.

Выжать все соки или используем Raspberry pi на всю катушку / Хабрахабр


Выжать все соки или используем Raspberry pi на всю катушку

Всем привет!

Долой унылые речи о том, что это мой первый пост и все такое. Пожалуй лучше я расскажу о том, как выжать все соки из маленькой малютки под названием Raspberry PI (далее RPI), ценой $ 35. Я уверен на 146,6% что здесь уже были посты подобного рода, и этот пост не претендует на твердую пять. Скорее это просто вступительное слово о том: «Как я занял себя делом на пару унылых вечеров». Собственно мы получим в итоге Raspberry PI который можно использовать:
  1. как домашний web-сервер (если ты какой-нибудь PHP-разработчик, и тебе не чуждо веселье);
  2. как мультимедийную приставку с популярным XBMC Media Center (или супер-пупер-крутую-шняжку к телевизору за скромные 1800$);
  3. и как ночную торрент качалку, с web-интерфейсом (для ленивых);

Для тех кому стало интересно прошу под кат (Внимание! Трафик).

Подготовка


Итак, что для всего этого понадобится:
  1. Raspberry PI model B
  2. SD карта на 8GB, скорость должна быть высокой. (Подойдут 6 и 10 класс)
  3. USB Flash карта, для того, что бы не забивать и без того малую память SD карты фильмами которые ты захочешь посмотреть
  4. HDMI или SCART-RCA кабель
  5. Блок питания, подойдет любой мини-USB зарядник с выходом 5 В и током до 2А, с MicroUSB выходом или MicroUSB переходник для подключения к компьютеру
  6. Немного свободного времени
  7. Прямые руки (во всяком случае мне они точно понадобились)


Так же нам понадобятся некоторые программы, PUTTY, WinSCP, XMing. Итак, нам необходимо что бы все что мы задумали работало без выключения/перезагрузки RPI, следовательно сборки типа OpenELEC, RaspBMC, XBian можно исключить. Нам нужно что бы XBMC был «внутри» нашей ОС, как плеер, так что мы сделаем что-то подобное. Мы будем использовать Raspbian. Скачать можно с оф. сайта

Дальше все просто. Разархивируем скачанное, подключаем SD карту к компьютеру, далее нам понадобится программа Win32DiskImager. Устанавливаем, запускаем. Указываем путь к .img файлу с ОС на борту, далее в поле «Device» выбираем из списка носителей нашу SD карту и нажимаем «Write». После в появившемся диалоговом окне выбираем «Yes» и готовимся к первому запуску RPI.

Для работы RPI нам нужен телевизор с HDMI выходом, но на крайний случай можно обойтись и обычным. Для этого нам понадобится вместо HDMI кабеля SCART-RCA кабель и обычные USB колонки со своим питанием! Думаю понятно что и куда нужно втыкать. Если все прошло как-по-маслу, мы увидим окно с настройками нашей ОС.

Пункты меню с подробным описанием и фото

После перезагрузки вводим логин pi и пароль который вы сделали (по умолчанию raspberry). Рекомендую сразу поменять рутовый пароль:

sudo passwd root  

Настройка доступа по SSH к файловой системе RPI (из Windows)


Первым делом скачиваем WinSCP. Устанавливаем, настраиваем.
В поле host name вводим ip адрес RPI, у меня 192.168.1.100 (узнать можно с помощью Advanced IP Scaner, либо через роутер, думаю не стоит подробно объяснять как это сделать). В поле user name и password указываем данные для авторизации. Лучше всего пользоваться root'ом, далее Save. Далее все просто, указываем название, жмем чекбокс и OK. Все, теперь мы готовы приступить к следующему шагу.

Xming: X-Server для Windows


Собственно след. шагом будет установка X-Ming. Он нам нужен скорее для мониторинга, ну и это облегчит нам жизнь в будущем, так как мы поставим Conky для мониторинга и MySqlWorkbench для администрирования БД(но это скорее просто прихоть) на RPI. Тем кому это не нужно, могут смело идти к следующему шагу.
Скачиваем, устанавливаем. Параметры установки:

галка Non US keyboard Support
галка XLaunnch wizard
галка Run Unility
Normal PuTTY Link SSH client

В свойствах ярлыка XMing прописываем путь_до_программы\Xming.exe :10 -clipboard -multiwindow
После этого врубаем и можно смело подключаться к RPI посредством SSH, главное напомнить вашему SSH клиенту использовать X-11 Forwarding.

В PuTTY заходим в Connections -> SSH -> X11 -> Включаем X11 Forwarding
X display location — localhost:10.0
Remote X11 authentification protocol — XDM-Authorization-1
Затем сами настройки сессии (Sessions)
HostName (or IP address) — 192.168.1.100 (ваш ip RPI) port 22
Connection type — SSH -> Жмем Save и подключаемся. Запускаем терминал и…

pi@raspberrypi ~ $ lxterminal&  [1] 2997  pi@raspberrypi ~ $  


Установка XBMC на Raspberry Pi под Raspbian


Все приготовления закончены и я думаю мы подошли к главному. Лирическое отступление. До того как я решил сделать так как мы сделаем, я ставил себе и OpenELEC и RaspBMC. Мне это не подошло, потому что приходилось перезагружать RPI что бы запустить или Raspbian или XBMC (В случае с OpenELEC), а с RaspBMC я не смог даже близко сделать что то подобное. Хотя может и найдутся умельцы которые скажут что я дурак, и все такое. Идем дальше. Описание сего процесса не моё, нашлись умельцы которые изобрели колесо за нас, я просто применил на практике. По порядку:

cd /etc/apt/sources.list.d/

deb http://archive.mene.za.net/raspbian wheezy contrib  CTRL + X -> Y -> Enter  

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key 5243CDED  

sudo apt-get update  

sudo apt-get install xbmc  

Добавляем пользователя из под которого планируется запускать XBMC в следующие группы (audio video input dialout plugdev tty) командой:

sudo usermod -a -G имя_группы пользователь  

Затем, меняем настройки группы input командой:

sudo nano /etc/udev/rules.d/99-input.rules  

В файле должно быть:

SUBSYSTEM=="input", GROUP="input", MODE="0660"  KERNEL=="tty[0-9]*", GROUP="tty", MODE="0660"  

Запускать XBMC командой:

xbmc-standalone  

Дождаться загрузки и profit!


Если необходимо сделать Автостарт XBMC то нужно редактировать /etc/default/xbmc и изменить ENABLED to 1:

ENABLED=1  

Плагины которые стоят у меня:
— repository.superrepo.org.frodo.al — Огромное количество всяких дополнений к XBMC
— repository.seppius — Русский репозиторий, с дополнениями «наших» сайтов на подобии LostFilm и Seasonvar и не только. Можно найти на любой вкус
— repository.oneevil — Сервис аддон ACEStream для XBMC и Аддон Torrenter в этом репозитории
— repository.nuismons — TSengine api
— plugin.watch.is.latest — Плагин для сайта watch.is (Сайт по приглашениям!!)
— plugin.video.torrenter.1.1.5.5 — Плагин для потокового воспроизведения торрент фильмов, скажем так.
Так же нужно установить libTorrent, для того что бы стримить фильмы с LostFilm:

sudo apt-get install python-libtorrent  

Все эти плагины можно спокойно найти в интернете, вдаваться в подробности настройки и установки я не буду.
Что бы заработали скреперы — необходимо в настройках TheMovieDB использовать не TMDB а IMDB. Не понял почему так, но после смены у меня заработали скреперы на поиске некоторых русских фильмов, однако некоторые все еще найти не может.


Установка Conky


Он нам нужен для мониторинга за температурой, загрузкой CPU и тд. По порядку:

sudo apt-get install conky  

Затем создаем файл .conkyrc командой:

sudo nano .conkyrc  

и вставляем туда:

alignment top_left  background no  border_width 1  cpu_avg_samples 2  default_color white  default_outline_color white  default_shade_color white  double_buffer yes  draw_borders no  draw_graph_borders yes  draw_outline no  draw_shades no  use_xft yes  xftfont DejaVu Sans Mono:size=12  gap_x 5  gap_y 60  minimum_size 5 5  net_avg_samples 2  no_buffers yes  out_to_console no  out_to_stderr no  extra_newline no  own_window yes  own_window_class Conky  own_window_type desktop  stippled_borders 0  update_interval 1.0  uppercase no  use_spacer none  show_graph_scale no  show_graph_range no    TEXT  ${color grey}Uptime:$color $uptime  ${color grey}Frequency (in MHz):$color $freq  ${color grey}Frequency (in GHz):$color $freq_g  ${color grey}RAM Usage:$color $mem/$memmax - $memperc% ${membar 4}  ${color grey}Swap Usage:$color $swap/$swapmax - $swapperc% ${swapbar 4}  ${color grey}CPU Usage:$color $cpu% ${cpubar 4}  ${color red}Temp: $color ${alignr 4}${color red}${acpitemp}°С$color  ${color grey}Processes:$color $processes  ${color grey}Running:$color $running_processes  $hr  ${color grey}File systems:   / $color${fs_used /}/${fs_size /} ${fs_bar 6 /}  ${color grey}Networking:  Up:$color ${upspeed eth0} ${color grey} - Down:$color ${downspeed eth0}  $hr  ${color grey}Name              PID   CPU%   MEM%  ${color lightgrey} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}  ${color lightgrey} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}  ${color lightgrey} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}  ${color lightgrey} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}  

Запускать командой:

conky  

Все настройки можно найти в интернете и настроить «на свой вкус».


Установка и настройка WebServer-а Apache2.2, php5, mysql, phpmyadmin, mysql-workbench


Просьба за данный пункт сильно не бить. Это не инструкция "как это должно быть", это инструкция "как это работает у меня", конструктивная критика по делу приветствуется, если будут какие-либо дополнения или замечания, приму во внимание, и адаптирую себе для работы.

Перед установкой рекомендую в настройках роутера(на пример, мой ADSL модем 192.168.1.1 — пробросить порты Virtual Rout(Port Forwarding), пробрасываем 80 порт на 80 порт 192.168.1.100(.100 это у меня Raspberry PI))

Итак, поехали. GIT:

sudo apt-get install git  

Апач:

sudo apt-get install apache2 apache2-doc libapache2-mod-scgi  

Теперь php5 с плюшками:

sudo apt-get install php5 libapache2-mod-php5 libapache2-mod-auth-mysql php5 php5-common php5-curl php5-mysql php-image-graph imagemagick  

Ребутим апач:

sudo service apache2 restart  

Проверяем. Заходим в браузере на IP_малинки (в моем примере 192.168.1.100). Если появилась надпись «It works!», то я вас поздравляю, если нет — просьба попробовать включить-выключить сначала. Для тех кто не пробрасывал порты, можно проверить прямо с RPI. Для этого цепляется через SSH и запускаем браузер:

midori&  

Затем вводим localhost/ или localhost/apache2-default. Если появилась надпись «It works!», то я вас поздравляю, если нет — просьба попробовать включить-выключить сначала.

/var/www/ — папочка с вашими сайтами и скриптами.
/etc/php5/ и /etc/apache2/ — тут лежат конфиги php5 и апача.

Далее проверим работоспособность php5, создадим файл test.php:

sudo nano /var/www/phpinfo.php  

В него внесем изменения:

<?php          phpinfo();   ?>  

CTRL + X -> Y -> Enter, заходим по ссылке IP_адрес_малины/test.php (если через RPI то localhost/test.php). Если появилось информация о PHP5 то все хорошо. Далее ставим PHPMyAdmin:

sudo apt-get install phpmyadmin  

Что бы получить доступ к phphmyadmin, необходимо в файл /etc/apache2/apache2.conf

sudo nano /etc/apache2/apache2.conf  

вписать следующее (необходимо только до версии Squeeze, начиная с версии 6,0 это будет включено в сценарий установки пакета /etc/apache2/conf.d/phpmyadmin.conf -> ../../phpmyadmin/apache.conf автоматически):

Include /etc/phpmyadmin/apache.conf  

Перезапускаем апач:

sudo /etc/init.d/apache2 restart  

Проверяем, заходим в браузере 192.168.1.100/phpmyadmin (c RPI localhost/phpmyadmin).
Думаю с установкой веб-сервера закончено. Про настройку DNS в bind9 и VIrtual Hosts в апаче будет в другой статье. Скажу еще то, что для себя я поставил так же RhodeCode на RPI и хотел поставить какой нибудь Issue трекер. Выбор пал на YouTrack от JetBrain, но JavaМашина сильно грузит Raspberry, поэтому не стал заморачиваться. Так как я пользуюсь phpstorm — вот небольшое отступление о том Как подружить phpstorm с нашей БД на RPI:
Врубаем PHPStorm заходим в DataBase (кнопка слева) -> new -> DataBase Source


Database URL — адрес и порт удаленной машины, а так же имя БД
User — имя пользователя БД
Password — пароль пользователя БД


SSH tunnel will be opened on localhost and port — порт обязательно должен быть свободным на машине, с которой нужно подключить phpstorm к mysql на удаленной машине.

Монтируем нашу USB флешку


Втыкаем флешку в RPI, вводим команду:

sudo blkid  

Результат:

/dev/mmcblk0p1: SEC_TYPE="msdos" LABEL="boot" UUID="993B-8922" TYPE="vfat"  /dev/mmcblk0p2: UUID="fc254b57-8fff-4f96-9609-ea202d871acf" TYPE="ext4"  /dev/sda: LABEL="TR16GB" UUID="D29807B898079A5D" TYPE="ntfs"  

Смотрим, запоминаем, TR16GB, тип «ntfs», устанавливаем поддержку ntfs:

sudo apt-get install ntfs-3g  

Создаем каталог, куда будем монтировать нашу флешку:

sudo mkdir /mount/flash  

Открываем файл:

sudo nano /etc/fstab   

Дописываем туда:

"UUID="D29807B898079A5D" /mount/flash ntfs-3g rw,force,exec,users 0 0"  

Где UUID, это уникальный id нашей флешки, который мы посмотрели командой sudo blkid в самом начале. Перезагружаем RPI:

sudo reboot  

Установка Samba


Приступаем к установке, Обновим на всякий случай все что мы тут натворили:

sudo apt-get update && sudo apt-get upgrade  

Установим сервер Samba:

sudo apt-get install samba samba-common-bin  

Теперь откроем /etc/samba/smb.conf и вписываем туда:

[global]  workgroup = WORKGROUP  security = share  guest ok = yes  browseable = yes  [flash]  path = /mount/flash  writeable = yes  readonly = no  browseable = yes  guest ok = yes  

Где workgroup, это рабочая группа, скорее всего у вас WORKGROUP. Доступ к серверу будет осуществляться без авторизации. Если необходимо что бы при подключении надо было запрашивать пароль, то вместо security = share и guest ok = yes напишите security = user. Нужно так же создать нового пользователя, вводим команду sudo smbpasswd -a [имя], где [имя] — это имя пользователя. Сохраняем конфиг, перезагружаем:

sudo /etc/init.d/samba restart  

Я «замапил» себе сетевой диск, для удобства. Можно прямо с компа закидывать фильмы на RPI и смотреть уже на огромном телевизоре, который допустим стоит у вас где-нибудь в гостиной.


Установка rTorrent, Screen, RuTorrent


Сначала поставим rTorrent

sudo aptitude install rtorrent  

Затем создадим папку на нашей флешке, сюда будем качать наши фильмы:

mkdir /mount/flash/Torrent/  

А так же папку, где у нас будет храниться информация о закачках:

mkdir /mount/flash/Torrent/.rt/  

Затем переходим в домашнюю папку юзера, под которым будет работать rtorrent, у меня это /home/pi:

cd /home/pi  

Тут создаем файл ".rtorrent.rc", это настройки нашего rtorrent:

min_peers = 1  max_peers = 30   download_rate = 0  upload_rate = 0  directory = /mount/flash/Torrent/  session = /mount/flash/Torrent/.rt/  port_range = 40890-40890  port_random = no  check_hash = yes  session_save = yes  encryption = allow_incoming,enable_retry,prefer_plaintext  use_udp_trackers = yes  dht = auto  dht_port = 6881  encoding_list = UTF-8  scgi_port = 127.0.0.1:5000  

Описание настроек можно посмотреть здесь. Настроим автозагрузку и установим screen для работы rtorrent в фоне:

sudo aptitude install screen  

sudo wget http://libtorrent.rakshasa.no/attachment/wiki/RTorrentCommonTasks/rtorrentInit.sh?format=raw -O /etc/init.d/rtorrent  

Отредактируем скрип для корректной работы:

sudo nano /etc/init.d/rtorrent  

в строке user="user" пишем user="pi". Сохраняем. Теперь все это дело добавим в автозагрузку и запустим:

sudo chmod 755 /etc/init.d/rtorrent && sudo update-rc.d rtorrent defaults && sudo /etc/init.d/rtorrent start  

Настроим апач, включим модули:

sudo a2enmod scgi  

Отредактируем файл /etc/apache2/apache2.conf — в самом конце файла нужно добавить строку — "SCGIMount /RPC2 127.0.0.1:5000". Перезапускаем апач:

sudo service apache2 restart  

Пришло время ставить web-морду для нашего rtorrent. Я выбрал ruTorrent, т.к. она простенькая и на русском языке. Сначала поставим Subversion:

sudo apt-get install subversion  

Теперь загрузим ruTorrent:

cd /var/www/  

sudo svn checkout http://rutorrent.googlecode.com/svn/trunk/rutorrent  

Выставим права на папку:

sudo chown -R www-data:www-data ./rutorrent/  

Осталось проверить работу нашей web-морды, заходим в браузере ip_адрес_RPI/rutorrent (если с RPI то localhost/rutorrent):


Ну вот вроде и все. Теперь мы имеем готовый к работе RPI, для web-разработчиков, которые в ночь с пятницы на субботу могут поставить качать свой любимый сериал и на следующее утро, лежа на диване смотреть все это дело на огромном телике. Спасибо за внимание.
P.S. Хочу принести извинения за отсутствие некоторых ссылок на сторонние ресурсы, материалом которых я руководствовался т.к. делал я это давно, а опубликовал только сейчас.                      

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

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