ZNC боунсер на RPi

от автора

Так получилось, что в последнее время одним из каналов общения для меня стали IRC чаты. Практически сразу стало понятно, что «голый» IRC лишен некоторых удобств, к которым я так привык в скайпе, например:

  • История сообщений, доступная непосредственно из окна чата
  • Возможность подключаться из нескольких точек

Для решения этих проблем через некоторое время у нас в компании появилась виртуалка с IRC боунсером, и все стало гораздо лучше и удобнее. Понятно, что для компании держать виртуалку под такие цели совершенно не проблема, но как быть, если захочется завести такого зверька для личных нужд (а мне в какой-то момент захотелось)? Отбросив варианты с хостингом (не стоит это лишних денег), отдельным компом (ибо нет), и виртуалкой на существующем (100 Вт потребляемые круглосуточно тоже денег стоят) я остановился на RaspberryPi, которая на тот момент выполняла роль как-бы NAS, но по факту большую часть времени бездействовала.

Краткое описание того, на чем все собрано и о чем будет упомяунуто в статье:

  • Платформа — RaspberryPi Model B (512 Mb / Ethernet).
  • ОС — Raspbian.
  • Особенности установки ОС — корневой раздел полностью перенесен на USB 2.0 жесткий диск, на SD карте оставлен только загрузочный раздел. Об этом, к сожалению, ни слова, но могу написать, если будет интересно.
  • Боунсер — ZNC, версия 1.2.
  • Особенности установки боунсера — сборка из тарбола, установка в chroot, сборка модуля modpython (modperl, modtcl по желанию).


В качестве боунсера я выбрал ZNC по следующим причинам:

  • Достаточно распространенный боунсер.
  • Возможность расширения функциональности за счет модулей.
  • Достаточно много этих самых модулей.
  • Возможность писать свои модули на python (а также perl и tcl, хотя это мне было не нужно).
  • После чтения вики проекта еще одним пунктом добавилась возможность простого переноса боунсера в chroot.

Для начала я попробовал поставить ZNC на «нормальную» убунту, просто чтобы посмотреть, как оно должно выглядеть в рабочем состоянии. Все оказалось просто и понятно, так что воодушевленный этим промежуточным успехом я приступил к настройке RPi.

Первым неприятным сюрпризом стало наличие весьма древней сборки ZNC в репозиториях — кажется это была 0.206. Впрочем, это лишь укрепило мое намерение собрать ZNC из тарболла, тем более что процес хорошо описан на вики проекта.

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

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

pi@raspberrypi ~ $ sudo apt-get install build-essential pkg-config libssl-dev 

Если нужно собрать модуль поддержки python, perl или tcl, потребуется установить соответствующие пакеты из списка:

  • modpython — пакет python-dev.
  • modperl — пакет libperl-dev.
  • modtcl — пакет tcl-dev.

Мне нужен только модуль для питона:

pi@raspberrypi ~ $ sudo apt-get install python-dev 

Скачиваем и распаковываем тарболл:

pi@raspberrypi ~ $ wget http://znc.in/releases/znc-1.2.tar.gz pi@raspberrypi ~ $ tar xzvf znc-1.2.tar.gz 

Создаем пользователя для запуска боунсера:

pi@raspberrypi ~ $ sudo adduser bouncer pi@raspberrypi ~ $ sudo passwd bouncer 

Создаем структуру каталогов для chroot (я буду ставить все в /opt/znc):

pi@raspberrypi ~ $ sudo mkdir /opt/znc  pi@raspberrypi ~ $ cd /opt/znc/ pi@raspberrypi /opt/znc $ sudo mkdir -p etc dev usr/lib usr/local/{share,bin,lib} lib home/bouncer pi@raspberrypi /opt/znc $ sudo mkdir -p lib/arm-linux-gnueabihf usr/lib/arm-linux-gnueabihf  pi@raspberrypi /opt/znc $ sudo chown bouncer:bouncer home/bouncer/  pi@raspberrypi /opt/znc $ cd dev/ pi@raspberrypi /opt/znc/dev $ sudo mknod -m 644 random c 1 8 pi@raspberrypi /opt/znc/dev $ sudo mknod -m 644 urandom c 1 9 pi@raspberrypi /opt/znc/dev $ sudo mknod -m 666 null c 1 3  pi@raspberrypi /opt/znc $ sudo cp /etc/hosts etc/ pi@raspberrypi /opt/znc $ sudo cp /etc/resolv.conf etc/ pi@raspberrypi /opt/znc $ sudo cp /lib/arm-linux-gnueabihf/libnss_dns.so.2 lib/arm-linux-gnueabihf/ pi@raspberrypi /opt/znc $ sudo cp /lib/arm-linux-gnueabihf/libresolv.so.2 lib/arm-linux-gnueabihf/  pi@raspberrypi /opt/znc/dev $ cd 

Конфигурируем исходники для сборки. Для сборки модулей для perl или tcl нужно добавить --enable-perl и/или --enable-tcl соответственно:

pi@raspberrypi ~ $ cd znc-1.2/ pi@raspberrypi ~/znc-1.2 $ ./configure --enable-python 

Запускаем сборку (процесс занимает примерно 1.5-2 часа):

pi@raspberrypi ~/znc-1.2 $ make 

Устанавливаем в chroot каталог. При таком способе установки (DESTDIR=/opt/znc) все файлы сразу оказываются в указанном подкаталоге, и не затрагивают основную систему. Кроме того, мы избавляемся от необходимости копировать файлы в chroot, как предлагается в официальном документе:

pi@raspberrypi ~/znc-1.2 $ sudo DESTDIR=/opt/znc make install 

Теперь нужно посмотреть, какие библиотеки необходимы для работы приложения…

pi@raspberrypi ~/znc-1.2 $ ldd /opt/znc/usr/local/bin/znc 

… и скопировать их:

pi@raspberrypi ~/znc-1.2 $ cd /opt/znc/ pi@raspberrypi /opt/znc $ sudo cp /usr/lib/arm-linux-gnueabihf/libcofi_rpi.so ./usr/lib/arm-linux-gnueabihf/libcofi_rpi.so pi@raspberrypi /opt/znc $ sudo cp /lib/arm-linux-gnueabihf/libdl.so.2 ./lib/arm-linux-gnueabihf/libdl.so.2 pi@raspberrypi /opt/znc $ sudo cp /lib/arm-linux-gnueabihf/libz.so.1 ./lib/arm-linux-gnueabihf/libz.so.1 pi@raspberrypi /opt/znc $ sudo cp /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 ./usr/lib/arm-linux-gnueabihf/libstdc++.so.6 pi@raspberrypi /opt/znc $ sudo cp /lib/arm-linux-gnueabihf/libm.so.6 ./lib/arm-linux-gnueabihf/libm.so.6 pi@raspberrypi /opt/znc $ sudo cp /lib/arm-linux-gnueabihf/libgcc_s.so.1 ./lib/arm-linux-gnueabihf/libgcc_s.so.1 pi@raspberrypi /opt/znc $ sudo cp /lib/arm-linux-gnueabihf/libpthread.so.0 ./lib/arm-linux-gnueabihf/libpthread.so.0 pi@raspberrypi /opt/znc $ sudo cp /lib/arm-linux-gnueabihf/libc.so.6 ./lib/arm-linux-gnueabihf/libc.so.6 pi@raspberrypi /opt/znc $ sudo cp /lib/ld-linux-armhf.so.3 ./lib/ld-linux-armhf.so.3 

Осталось только создать несколько симлинков на каталоги znc, чтобы боунсер можно было запускать не только из chroot, но и «как обычно». Это потребуется нам при первом запуске (чтобы создать конфигурационный файл), а также в будущем, если нужно будет запускать компиляцию модулей для ZNC.

Создаем симлинки:

pi@raspberrypi ~ $ sudo ln -sv /opt/znc/usr/local/lib/znc /usr/local/lib/ pi@raspberrypi ~ $ sudo ln -sv /opt/znc/usr/local/share/znc /usr/local/share/ pi@raspberrypi ~ $ sudo ln -sv /opt/znc/usr/local/include/znc /usr/local/include/ 

Прежде чем запускать боунсер, необходимо создать для него начальный конфиг и скопировать полученный конфиг в chroot каталог. Для этого становимся пользователем bouncer, переходим в домашний каталог и запускаем znc c ключом --makeconf:

pi@raspberrypi ~ $ su bouncer bouncer@raspberrypi /home/pi $ cd bouncer@raspberrypi ~ $ /opt/znc/usr/local/bin/znc --makeconf 

Сам процесс настройки достаточно прост благодаря весьма информативным подсказкам. По завершении настройки мы должны получить запущенный работоспособный боунсер. Продолжить настройку можно открыв веб-интерфейс боунсера (если был активирован модуль webadmin), или через IRC клиента.

Последнее, что осталось сделать — это переместить полученный конфиг в chroot и запустить боунсер уже оттуда. Кстати, не стоит редактировать конфиг файл боусера руками. Для этого рекомендуется использовать webadmin.

Сначала останавливаем боунсер. Первая команда сохранит текущую конфигурацию в конфиг файл, а вторая остановит боунсер:

bouncer@raspberrypi ~ $ pkill -SIGUSR1 znc bouncer@raspberrypi ~ $ pkill znc 

Копируем каталог с настройками в chroot:

bouncer@raspberrypi ~ $ cp -r .znc /opt/znc/home/bouncer 

И запускаем уже из chroot каталога командой:

pi@raspberrypi ~ $ sudo start-stop-daemon --chroot /opt/znc/ --chuid bouncer:bouncer --start --exec /usr/local/bin/znc 

Остановить боунсер можно командой:

pi@raspberrypi ~ $ sudo start-stop-daemon --chroot /opt/znc/ --chuid bouncer:bouncer --stop --exec /usr/local/bin/znc 

Ну вот вроде бы и все. Для автоматического запуска боунера при старте системы можно добавить команду запуска в /etc/rc.local.

Как обычно, вопросы и комментарии приветствуются.

Ссылка на сайт проекта: ZNC

ссылка на оригинал статьи http://habrahabr.ru/post/217973/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *