LXF160:Raspberry Pi: Строим NAS
|
|
|
Осваиваем новый карманный компьютер
Содержание |
Raspberry Pi: Строим NAS
В нашем втором учебнике по RPi Грэм Моррисон проясняет для вас основы управления пакетами, эмуляцию и сетевые хранилища данных.
Месяц назад мы открыли коробку с Raspberry Pi, запустили операционную систему и подключили периферийные устройства, а также изменили разделы на SD-карте, чтобы освободить место (если вы пропустили первую часть, обратитесь к PDF-версии на DVD). Теперь мы нырнем с этой точки глубже, погрузившись в то, что Linux может предложить Pi, от удаленного управления и установки пакетов до прослушивания музыки и использования его в качестве сервера файлов и контента для компьютеров сети. Pi можно превратить в очень дешевое и невероятно гибкое сетевое хранилище данных, потратив сумму, равную стоимости внешнего USB-диска.
Но для начала мы включим SSH. SSH – «безопасная оболочка [secure shell]», с помощью которой мы получим доступ к командной строке Pi через сеть. Для Pi это особенно важно, потому что место перед телевизором – не самое удачное для работы. С SSH можно работать из любой другой системы Linux, Windows или OS X, и хотя он был предусмотрен по умолчанию в дистрибутиве Debian, который мы установили, но не запущен. Для его запуска войдите в систему на своем Pi (по умолчанию используются имя пользователя «pi» и пароль «raspberry») и введите команду:
sudo service ssh start
Новичкам в Linux эта строка может показаться китайской грамотой, но если вдуматься, то понять ее несложно. Отдельные слова в командной строке обычно запускают одноименную утилиту или дают этой утилите дополнительные указания о том, что ей делать. В приведенной выше команде, sudo – утилита, позволяющая запускать другие команды с привилегиями администратора, service – утилита для запуска скрипта из каталога /etc/init.d, а ssh start – дополнительная информация, необходимая для запуска service: сначала указывается сам сервис – ssh, затем действие, которое нужно выполнить – start [запустить]. Также возможны действия stop [остановить] или restart [перезапустить]. Массу дополнительной информации о каждой команде можно получить, набрав man и имя команды. Например, чтобы разузнать о команде sudo, наберите man sudo. Мы также хотим, чтобы SSH запускалась при загрузке Pi, и для этого нам нужна другая команда:
sudo insserv ssh
man insserv покажет, что это команда автоматического запуска скрипта при загрузке системы, а раз SSH настроен и запущен, можно даже не подключать к Pi клавиатуру, мышь и монитор. Пока Pi подключен к сети, с помощью SSH им можно управлять удаленно. Но для этого нужно знать IP-адрес устройства. Raspberry Pi сообщает свой IP-адрес в конце журнала загрузки, но его можно определить и командой ifconfig, посмотрев число справа от inet addr в разделе eth0. ifconfig – мощная команда: с ее помощью можно изменить множество сетевых настроек, а также просмотреть текущие. Устройство ‘lo’ в порту Ethernet – это виртуальное устройство обратной петли, удобное при доступе к сервисам, запущенным на Pi, с самого Pi.
Теперь у нас есть IP-адрес Pi. С другого компьютера той же сети выполните команду ssh pi@192.168.1.25 – только замените IP-адрес на свой. У вас спросят пароль, после чего вы окажетесь в точно такой же командной строке, как на самом компьютере, и сможете делать все то же самое через SSH-соединение. Добро пожаловать в мир удаленной работы!
Управление пакетами
Даже в системе, установленной по умолчанию, можно сделать многое. Но рано или поздно возникает желание установить добавочное ПО. В Linux это делается с помощью так называемого менеджера пакетов, который по сути похож на магазин приложений. Вы выбираете нужные программы, и они загружаются автоматически. В Linux загружаются и все зависимости – это все библиотеки и приложения, необходимые для запуска программы, которую вы хотите установить. Так как операционная система нашего Raspberry Pi – Debian, а менеджеры пакетов могут зависеть от дистрибутива, мы будем пользоваться менеджером пакетов Debian. Для взаимодействия с ним используется утилита apt (advanced package tool – продвинутая утилита управления пакетами). Так как Debian лежит в основе Ubuntu, то в ней используется та же схема управления пакетами (но пакеты другие), поэтому вы скорее всего уже имели с ней дело, хотя, наверное, не из командной строки. Для установки пакета достаточно ввести
apt-get install packagename
Есть, однако, и гораздо более простая альтернатива: утилита под названием aptitude. Ею можно пользоваться в командной строке для поиска и установки пакетов (aptitude search <имя пакета> и aptitude install <имя пакета>), но в ней есть и примитивный интерфейс командной строки. Для его появления наберите aptitude, и вы убедитесь, что работать в нем гораздо проще, чем в командной строке. После запуска утилиты обновляется кэш пакетов, и окно делится на три части. Наверху находится меню, под ним – список пакетов, по которому можно перемещаться с помощью клавиш управления курсором, а под списком – результаты ваших действий. Для поиска пакета перейдите в верхнее меню. Если подключена мышь, должен сгодиться и щелчок, даже при работе через SSH, но можно переключить фокус ввода в меню и вручную, нажав Ctrl+T. Список найденных пакетов обновляется в реальном времени, и по нему можно перемещаться клавишами управления курсором или клавишами PageUp и PageDown.
Эти пакеты загружаются из так называемого «репозитория». Репозиторий по умолчанию в Debian довольно строг: в нем нет ничего, кроме компонентов операционной системы Debian. Но это ограничение можно обойти, добавив новые репозитории, что мы сейчас и сделаем. Список репозиториев находится в текстовом файле /etc/apt/sources.list, и его нужно открыть с правами системного администратора. Для этого в командной строке наберите sudo nano /etc/apt/sources.list. Когда файл откроется, добавьте слово contrib в конец первой строки (оканчивающейся на squeeze main). Архив contrib содержит свободные пакеты, которые зависят от пакетов в несвободном архиве, репозитории, который уже должен быть в файле sources.list.
Добавив новый репозиторий, обновите список пакетов: просто введите команду
sudo apt-get update
Теперь вам будут доступны для установки множество пакетов, ранее отсутствовавших. Например, мы установили Vice, эмулятор Commodore 64, тем самым связав Pi с его предками – домашними компьютерами из 1980-х. Чтобы сделать это на своем Pi, наберите apt-get install vice (раньше эта команда бы не сработала). По завершении установки скачайте прошивки (ROMs), необходимые для нормальной работы эмулятора. Они входят в версию Vice для Windows, но их сомнительная легальность не позволяет включить их в пакеты Debian. Если вы имеете право на эти действия, распакуйте образы из версии Windows и поместить их в нужный каталог следующими командами:
tar xvf vice-1.5-roms.tar.gz
sudo cp -a vice-1.5-roms/data/* /usr/lib/vice/
Теперь можно запустить эмулятор, набрав x64. Эмулятором можно пользоваться только при подключенном мониторе, а не через SSH, но благодаря простому интерфейсу Vice достаточно щелкнуть в меню файлов, чтобы открыть нужный образ и запустить игру. Рекомендуем добавить параметр auto-start-: благодаря ему вам не придется набирать LOAD “*”,8,1 и RUN для запуска игры по умолчанию на любом образе диска. Нам удалось достичь хорошей производительности эмулятора, и в большинство игр мы поиграли на почти стопроцентной скорости. Даже когда частота кадров падала ниже 10 %, игры шли все еще терпимо.
Добьемся звучания
Причина, по которой не работает звук, по крайней мере в ранней версии Debian, которой мы пользуемся – не загружен драйвер для поддержки звуковых устройств. Драйверы Linux отличаются от драйверов Windows точно так же, как пакеты отличаются от загружаемых исполняемых файлов, и драйверы обычно являются частью ядра, а не отдельными файлами, которые нужно загружать и устанавливать. Поэтому так много устройств работает без ручного вмешательства – ядро обнаруживает их и автоматически загружает нужный драйвер. Драйверы, динамически подгружаемые таким образом, называются «модулями», и набрав в командой строке sudo lsmod, вы увидите список загруженных модулей. Однако, поскольку дистрибутивы для Raspberry Pi точно «знают», с какими устройствами работают, им не нужны большинство модульных драйверов. Кроме звукового. В нашей системе загружен всего один модуль – fuse; он позволяет динамически монтировать удаленные файловые системы. Звуковой модуль должен входить в состав вашего дистрибутива, и для его загрузки нужно выполнить команду
sudo modprobe snd_bcm2835
Снова набрав lsmod, вы увидите, что этот модуль был загружен вместе со всеми зависимостями. Эти модули необходимы для работы звукового драйвера. Теперь можно проверить, что звук работает, вставив наушники или колонки в аудиовыход Pi и запустив приложение Music Player из меню Sound & Video [Звук и видео]. В установке Debian есть даже тестовый фрагмент музыки для проверки. Теперь звук работает, и нужно снова включить его в эмуляторе Vice. Так как это приблизит нагрузку процессора к предельной, мы также рекомендуем снизить частоту кадров, увеличить размеры буфера и фрагмента, а также отключить эмуляцию фильтра в меню настройки Vice.
Звуковой модуль в Raspberry Pi мы сочли довольно шатким: аудиоприложения иногда зависали. Возможно, поэтому он и не включен по умолчанию; но если вы хотите, чтобы модуль загружался при загрузке системы, просто добавьте в текстовом редакторе имя модуля (snd_bcm2835) в /etc/modules. Для изменения этого файла вам потребуются права системного администратора, но после перезапуска Pi модуль будет загружен автоматически. Чтобы модуль больше не загружался, удалите строку из этого файла, а чтобы выгрузить модуль из системы, скомандуйте rmmod snd_bcm2835.
Разделение файлов
Напоследок мы превратим Raspberry Pi в сетевое хранилище данных (NAS). Это позволит подключить к нему внешний USB-диск и получать общий доступ к этим файлам по сети. Добавьте сюда возможность воспроизведения музыки, и Pi станет центром медиа-хаба – с общим доступом к файлам и воспроизведением музыки через удаленное соединение. В центре этого функционала – программа под названием Samba, стабильная и широко используемая реализация сетевого протокола Microsoft.
Так как этот протокол используется для удаленного доступа к файлам в Windows, OS X и Linux, то с ним лучше всего организовать файловый сервер, доступ к которому возможен из любой операционной системы. Для установки Samba достаточно одной команды:
sudo apt-get install samba
По завершении установки будут запущены два фоновых процесса. Такие процессы, как и сервер SSH, который мы запустили до этого, обычно называются «демонами», и они будут автоматически обрабатывать любые запросы, проходящие по сети. Теперь нужно определить, где в файловой системе мы будем хранить файлы. Так как мы будем пользоваться внешним диском, подключенным через USB, нужно создать соответствующую точку в файловой системе и сделать ее постоянной. После подключения USB-диска наберите dmesg. Эта команда отображает вывод системных журналов, и в конце вы должны увидеть сообщения, относящиеся к подключению USB-диска. Поищите нечто вроде sda: sda1; будет либо именно так, либо это может быть sdb. В любом случае, это ваше устройство в виртуальной файловой системе, используемой для управления устройствами в Linux. В /dev/ находится огромный список доступных устройств.
Чтобы добавить устройство в систему, сначала создайте новую папку, которая будет выступать в качестве корневой для этого устройства. Мы создали подкаталог share в существующем каталоге /mnt, командой mkdir /mnt/share. Чтобы этот каталог монтировался при загрузке системы, добавьте следующую строку в /etc/fstab:
/dev/sda1 /mnt/share vfat defaults 0 0
Эта строка состоит из источника (это наше USB-устройство с именем устройства, взятым из вывода dmesg), места назначения (это только что созданный каталог), типа файловой системы, ключевого слова ‘defaults’ и двух нулей. Сомнения вызывает только тип файловой системы, так как диск, вероятно, будет отформатирован как в Microsoft (тип vfat, на языке файловых систем).
Гораздо лучше переформатировать устройство точно так же, как мы переформатировали карты в прошлой статье, и воспользоваться «родной» файловой системой Linux, такой как ext3. Если вы это сделаете, укажите соответствующий тип файловой системы. Сохраните изменения в fstab и проверьте, что все работает, набрав sudo mount /mnt/share. Если все прошло успешно, то для просмотра содержимого USB-устройства достаточно открыть в браузере или в командной строке каталог /mnt/share.
Чтение и запись
Если что-то не работает, посмотрите на новые сообщения в dmesg, чтобы понять, в чем проблема. В противном случае USB-диск должен автоматически монтироваться при каждом запуске Pi. Теперь мы хотим сделать так, чтобы каждый мог читать и записывать файлы в общем каталоге. Это можно сделать из командной строки двумя следующими командами:
sudo chown -R root:users /mnt/share
sudo chmod -R ug+rwx /mnt/share
Первая изменяет владельца всех файлов на диске (аргумент -R означает, что изменения будут применяться рекурсивно). Фрагмент root:users делает владельцем пользователя root (администратора системы), но также и группу users. В терминах Linux это означает, что у любого пользователя из группы users тоже будет доступ к этим файлам. Наберите в командной строке groups, и вы увидите список групп, членом которых является текущий пользователь. Если вы работаете как пользователь pi, в списке групп будет и users. Вторая команда делает файлы доступными для чтения (r), записи (w) и исполнения (x) пользователю и группе, связанным с файлами. Теперь мы создадим пользователя, от имени которого будем работать с общим каталогом. Для этого сначала создадим новую учетную запись в системе, а затем свяжем ее с Samba. Имя пользователя и пароль, создаваемые на данном этапе, вы будете вводить каждый раз для доступа к каталогу Samba с удаленного компьютера. Сделать это можно двумя следующими командами:
sudo useradd smbaccess -m -G users
sudo passwd smbaccess
sudo smbpasswd -a smbaccess
Сначала мы добавили пользователя smbaccess и сделали его членом группы users. Затем задали пароль для этой учетной записи перед добавлением его в Samba. Затем мы просим Samba организовать общий доступ к указанной точке монтирования по сети, но для этого нужно добавить следующие параметры в конец /etc/samba/smb.conf.
[public]
comment = Public
path = /mnt/share
valid users = @users
force group = users
create mask = 0660
directory mask = 0771
read only = no
Последний этап – перезапустить Samba, и для этого мы вернемся к первой команде этой статьи: sudo service samba restart. Теперь у нас есть доступ к файлам с любого компьютера в сети. Для этого укажите протокол smb и IP-адрес Raspberry Pi. Например, в KDE можно набрать smb://smbuser@192.168.133.111 в командной строке или в файловом менеджере.
Вы увидите свои файлы и каталоги и сможете читать и записывать их с любого компьютера в сети. |
Удаленные рабочие столы
Работать на Raspberry Pi, усевшись с клавиатурой и мышью перед телевизором, неудобно, поэтому мы установили сервер SSH для удаленного управления. Однако можно пойти дальше и получить полноценный доступ к рабочему столу через сеть. Это значит, что вы сможете настраивать свой Pi с дивана или даже из офиса. Идея состоит в установке сервера VNC. VNC – общий протокол доступа к рабочему столу, который «упаковывает» ваш рабочий стол в серию изображений формата JPEG и воссоздает его на клиенте, обрабатывая ввод с клавиатуры и мыши. Для установки сервера введите команду apt-get install tightvncserver, а для запуска нового сеанса сервера – команду vncserver:1. У вас запросят пароль, который нужен клиенту для подключения. Советуем также запускать сервер на Pi без X: это сэкономит ценную память. На удаленном компьютере нужно установить клиент VNC – впрочем, и в Gnome, и в KDE клиенты встроены. Введите IP-адрес своего Pi с портом 5901, затем пароль, и через несколько секунд вы получите полноценный Pi на своем компьютере/планшете/телефоне.