[Из песочницы] Об установке Crashplan в FreeNAS (и решение проблемы с кириллицей)

Аннотация Я всегда рассматривал Хабр как кладезь ценной информации в решении многих проблем. Поэтому, столкнувшись с проблемой и найдя адекватное решение, решил поделиться своим опытом. Я не пытался написать мануал, а скорее руководство к действию, но со своей точки зрения и исходя из своих потребностей. Надеюсь, кому-то пригодится.Что такое Crashplan (и зачем оно нужно)

Предыстория Для самосборного NAS существует много решений, я же остановился на FreeNAS по нескольким причинам: Нативная поддержка ZFS; Хорошая интеграция с AD, LDAP и прочими службами каталогов; Система построена на FreeBSD, а значит есть jail’ы и порты. Пока о своем решении не жалею, так как использую не только дома, но и на работе.Crashplan’ом пользуюсь давно и имею платную подписку. Пользуюсь как перекрестным архивированием, так и архивацией в облако. Пользовался до описанных событий только под Linux и Windows.

Поэтому, когда развернул FreeNAS (9.3), вторым, что попытался сделать после установки VirtualBox — это развернуть Crashplan. И здесь меня ждало несколько сюрпризов. Когда впервые столкнулся с проблемой установки Crashplan, вспомнил о старой Fido’шной шутке о граблях:

Классификация околограбельных персонажей Юзеp — человек, наступающий на гpабли.Чайник — начинающий юзеp, ни pазу не наступавший на гpабли и потому увеpенный, что гpаблей не существует.Ламеp — юзеp, pегуляpно наступающий на гpабли, но по-пpежнему увеpенный что гpаблей не существует.Узкий специалист — юзеp, в совеpшенстве владеющий наступанием на одни и те же гpабли.Шиpокий специалист — юзеp, имеющий на лбу более двух шишек.Пpогpаммеp — тот, для кого в наступании на гpабли важнее всего pезультат. Устав наступать на чужие гpабли, изготавливает свои собственные.Пpодвинутый пpогpаммеp — пpогpаммеp, наступающий на каждые гpабли не более двух pаз.Копиpайт — концепция, огpаничивающая количество доступных для наступания гpаблей финансовыми возможностями юзеpа.Геймеp — тот, для кого в наступании на гpабли важнее всего пpоцесс. Обычно не способен изготовить собственные гpабли.Читеp — pазновидность геймеpа; наступает только на гpабли с поpолоновыми насадками на pучке и обычно не больше одного pаза.Хакеp — тот, кто способен наступить на гpабли, даже если они спpятаны в саpай и запеpты на замок.Хакеp-идеалист — благоpодный боpец за пpаво каждого наступать на неогpаниченное количество гpаблей.Microsoft — коpпоpация, всемиpный лидеp по пpоизводству гpаблейБилл Гейтс — мифическое существо из пpогpаммеpского фольклоpа; злой дух — покpовитель гpаблей.Апгpейд — пpоцесс пеpманентной тpаты денег на покупку все новых гpаблей, каждые из котоpых бьют больнее пpедыдущих.Бета-веpсия — веpсия, в котоpой гpабли видны невооpуженным глазом.Релиз — веpсия, в котоpой гpабли пpисыпаны листьями.Совместимость веpсий — пpинцип, позволяющий новым гpаблям попадать точно по шишке от пpедыдущих.Ассемблеp — язык пpогpаммиpования, позволяющий наступать на гpабли несколько миллионов pаз в секунду.Локальная сеть — технология, позволяющая получить по лбу, даже когда на гpабли наступает кто-то дpугой.Интеpнет — технология, позволяющая наступить на гpабли, находящиеся на дpугой стоpоне земного шаpа.Сетевая конфеpенция — технология, позволяющая каждому наступить не только на свои, но и на чужие гpабли.Русские кодиpовки — подаpочный набоp гpаблей для пользователей интеpнета.Дpужественный интеpфейс — pезиновая накладка на pучку гpаблей.Гибкий (настpаиваемый) интеpфейс — накладка на pучку гpаблей, котоpую можно двигать, подгоняя под высоту своего лба.Гpафический интеpфейс — гpабли, позволяющие pегулиpовать цвет и интенсивность искp после удаpа по лбу.Hенадежная система — гpабли, котоpые бьют вас даже тогда когда вы на них не наступаете.Hадежная система — гpабли, котоpые бьют вас по лбу, даже когда вы стоите к ним спиной.Многозадачность — концепция, позволяющая наступать на несколько гpаблей одновpеменно.Объектно-оpиентиpованное пpогpаммиpование — метод изготовления гpаблей по пpинципу матpешки.Мануал — книга, описывающая pазличные способы наступания на гpабли. Hикогда не используется ламеpами и хакеpами. Пpодвинутые пpогpаммеpы используют ее после того, как наступят на те же гpабли во втоpой pаз.Техподдеpжка — служба, дающая советы, что делать после наступания на гpабли. Обычно пеpвый ее совет — наступить на гpабли еще pаз и сpавнить ощущения.

А граблей оказалось несколько (как и шишек от них).Первая шишка (или все так плохо с кириллицей) Глянув в список plugin’ов 17c9c324e9e54effa366b0cdbce3d5ee.PNG видим, что в наличии есть плагин Crashplan’а. Значит пробуем его поставить.Берем за основу «How-to: Crashplan & Freenas», шаманим и танцуем с бубном — Update Crashplan, то есть не забываем о необходимости наличия в файле /usr/pbi/crashplan-amd64/share/crashplan/bin/run.conf в обоих строках

такого параметра -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProviderфайл будет выглядеть приблизительно такSRV_JAVA_OPTS=»-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPlan -Xms20m -Xmx512m -Djava.net.preferIPv4Stack=true -Dsun.net.inetaddr.ttl=300 -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.negative.ttl=0 -Dnetworkaddress.cache.negative.ttl=0 -Dc42.native.md5.enabled=false«GUI_JAVA_OPTS=»-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider -Dfile.encoding=UTF-8 -Dapp=CrashPlanDesktop -DappBaseName=CrashPlan -Xms20m -Xmx512m -Djava.net.preferIPv4Stack=true -Dsun.net.inetaddr.ttl=300 -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.negative.ttl=0 -Dnetworkaddress.cache.negative.ttl=0 -Dc42.native.md5.enabled=false»

Подключаемся и видим что кириллица некорректно отображается: видим крякозябры f8d0319a66504458b54363156cfa6e08.PNG Вот и наша «шишка».Поиск решения Поиск решения в лоб (с помощью Google) привел к тому, что я не одинок в своей проблеме: «FreeBSD + CrashPlan + /compat/linux = кракозябры».Вариантов решения назревало несколько: Попытаться настроить корректное отображение кириллицы в plugin’е. Отбросил Plugin’ы делаются как pbi-файлы, которые при разворачивании не используют стандартные каталоги jail’а, а строят дополнительно свои. Попытка разобраться ни к чему не привела, я утонул в сложностях структуры и решил не продолжать.

Установить linux-jail из шаблонов. Отбросил В версии 9.3 шаблоны от 9.2 нормально не заработали (пробовал Debian и CentOS) — сеть в jail’ах никак не хотела работать, а жаль.

Запустить в VirtualBox’е Linux (например Debian). Отложил В VirtualBox’е FreeNAS’а можно запустить только 32-х битное ядро. Это не помеха, но монтировать каталоги к виртуалке как-то надо. Вариантов несколько: nfs (проблема с вложенными датасетами), smb/cifs (наиболее рабочее решение, но требует smb-шары, а это не всегда возможно), share-ресурсы VirtualBox’а (почему-то не всегда работают). Отложил это решение на крайний случай.

Установить чистый jail и в нем запустить Crashplan через BSD-эмулятор Linux. Честно признаюсь, перепробовал все варианты (и в том порядке как указал). Победил п.4, о чем и расскажу.Так есть ли свет в конце туннеля? (новые грабли) Поиск решения привел меня к статье [How-To] CrashPlan in FreeNAS 9.1 Jail (tested on 32bit), которая была взята за основу.И так поехали (или полетели, кому как нравиться).Подготовительные работы Все моменты первичной настройки FreeNAS, после первого запуска, я опущу, об этом написано много.Подключаемся к FreeNAS по ssh. Проверяем загружен ли модуль ядра для Linux: kldstat | grep linux Если увидим что-то подобное: 22 2 0xffffffff81d09000 46855 linux.ko значит мы уже его загрузили, если нет то: kldload linux Включаем linux-compat в системев веб-интерфейсе Включение linux-compat вызывает автоматическую загрузку модуля ядра linux.ko, поэтому параметр linux_load можно не добавлять.9a55f34d2ed94324a9dd4742829a97d4.PNG Создаем jail.создание Настройки по умолчанию, можно не менять. Параметр «VIMAGE» оставляем включенным.17440484ddd1420bb9cce91e798c6c61.PNGfe1ffef704784663a482dfc2ee126969.PNG И ждем окончания установки 124d8178eaff472e8b7a349e2c2c5e90.PNG4909c21288c84872bc912ac0e5bf5b83.PNG Процесс занимает 10–45 мин. Установка Crashplan и всего необходимого в jail Действия выполняем в ssh FreeNAS (если не оговорено иначе).Определяем ID нашего jail’а jls Получаем такой ответ 1971fad0b5554972b991826ccb2c4ea8.PNG Откуда видно что ID jail’а = 2. Подключаемся к jail’у. jexec 2 /bin/tcsh Обновляем в jail’е пакеты и порты pkg update pkg upgrade portsnap fetch extract Ждем завершения. Устанавливаем редактор nano (любители vi пропускают данный пункт) cd /usr/ports/editors/nano make install clean Устанавливаем эмулятор fedora-linux cd /usr/ports/emulators/linux_base-f10/ make install clean Устанавливаем эмулятор procfs cd /usr/ports/sysutils/linux-f10-procps/ make install clean Устанавливаем JRE для linux cd /usr/ports/java/linux-sun-jre17 make install clean и получаем ошибку 5bf3995ce0d2476b862a361a372d5154.PNG Это связано с тем, что Оракл запретил качать этот файл напрямую. Поэтому идем по этой ссылке и скачиваем файл jre-7u75-linux-i586.tar.gz (не забудьте согласиться с их лицензией). Скачанный файл надо положить в директорию /usr/ports/distfiles (путь в jail’е) или в FreeNAS в директорию /<путь к jail'ам>/<название jail'a>/usr/ports/distfiles (например у меня путь /mnt/poolz/jail/crashplan/usr/ports/distfiles)И повторяем cd /usr/ports/java/linux-sun-jre17 make install clean И дожидаемся окончания установки. Монтирование procfs для linux в FreeNASВыходим из jail’а exit Попадаем в командную строку FreeNAS. Перемонтируем корневую ФС в режим записи: mount -uw / Создаем скрипт монтирования procfs: nano /conf/base/etc/rc.d/mountproc Текст скрипта (с учетом изменений) #!/bin/sh # PROVIDE mountproc # REQUIRE LOGIN # BEFORE: ix-jail

. /etc/rc.subr

name=mountproc rcvar=mountproc_enable start_cmd=»${name}_start» stop_cmd=»${name}_stop}»

mountproc_start () { /sbin/mount -t linprocfs linproc /mnt/poolz/jail/crashplan/compat/linux/proc/ }

mountproc_stop () { echo »--- mountproc stopped ---» }

load_rc_config $name run_rc_command »$1»

Важно! Проверьте что бы команда mountproc_start начиналась с первой позиции в строке! Путь /mnt/poolz/jail/crashplan/compat/linux/proc/ меняете на свой (аналогично как в предыдущем пункте).Делаем скрипт исполняемым: chmod +x /conf/base/etc/rc.d/mountproc И включаем автозапуск скриптакак включить 3fdcb3b2d40e4784a585bdfd33f26391.PNG Проверяем все ли правильно сделано (в первую очередь текст скрипта) и перегружаем FreeNAS. После перезагрузки проверяем включены ли наши настройки: kldstat | grep linux mount | grep linprocfs Если после второй команды мы не видим строчку подобную этой: linprocfs on /mnt/poolz/jail/crashplan/compat/linux/proc (linprocfs, local) тогда возвращаемся к пункту создания скрипта и ищем ошибку.Если все хорошо, то продолжаем. Ставим CrashplanЗаходим в jail (аналогично первым двум пунктам): jls jexec /bin/tcsh Переходим в директорию /compat/linux, качаем Crashplan, распаковываем и инсталлируем: cd /compat/linux fetch http://download1.us.code42.com/installs/linux/install/CrashPlan/CrashPlan_3.7.0_Linux.tgz tar -xzf CrashPlan_3.7.0_Linux.tgz cd CrashPlan-install /compat/linux/bin/bash /compat/linux/CrashPlan-install/install.sh Читаем лицензионное соглашение и соглашаемся с ним.В принципе можно все оставить по умолчанию. Если есть желание что-то поменять — меняйте, только внимательно! После инсталляции файл CrashPlan_3.7.0_Linux.tgz и директорию CrashPlan-install из директории /compat/linux можно удалить, они уже не нужны. Редактируем run.conf Crashplan’а. nano /compat/linux/usr/local/crashplan/bin/run.conf В начале каждой строки, после символов SRV_JAVA_OPTS=» и GUI_JAVA_OPTS=» вставляем-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider.В итоге должны получить: SRV_JAVA_OPTS=»-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPlan -Xms20m -Xmx1024m -Djava.net.preferIPv4Stack=true -Dsun.net.inetaddr.ttl=300 -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.negative.ttl=0 -Dnetworkaddress.cache.negative.ttl=0 -Dc42.native.md5.enabled=false» GUI_JAVA_OPTS=»-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider -Dfile.encoding=UTF-8 -Dapp=CrashPlanDesktop -DappBaseName=CrashPlan -Xms20m -Xmx512m -Djava.net.preferIPv4Stack=true -Dsun.net.inetaddr.ttl=300 -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.negative.ttl=0 -Dnetworkaddress.cache.negative.ttl=0 -Dc42.native.md5.enabled=false» Исправляем путь к java на правильный.По умолчанию Crashplan использует путь /usr/local/crashplan/jre/bin/javaМы поменяем на путь java, установленной из портов /usr/local/linux-sun-jre1.7.0/bin/java nano /compat/linux/usr/local/crashplan/install.vars В переменной JAVACOMMON меняем путь на /usr/local/linux-sun-jre1.7.0/bin/javaДолжно получиться так TARGETDIR=/usr/local/crashplan BINSDIR=/usr/local/bin MANIFESTDIR=/usr/local/var/crashplan INITDIR=/etc/init.d RUNLVLDIR=/etc/rc.d INSTALLDATE=20150314 APP_BASENAME=CrashPlan DIR_BASENAME=crashplan JRE_X64_DOWNLOAD_URL=http://download.code42.com/installs/proserver/jre/jre-7u45-linux-x64.tgz JRE_I586_DOWNLOAD_URL=http://download.code42.com/installs/proserver/jre/jre-7u45-linux-i586.tgz

JAVACOMMON=/usr/local/linux-sun-jre1.7.0/bin/java

Проверяем работоспособность.Из jail’а /compat/linux/bin/bash /compat/linux/usr/local/crashplan/bin/CrashPlanEngine start /compat/linux/bin/bash /compat/linux/usr/local/crashplan/bin/CrashPlanEngine status Из FreeNAS jexec /compat/linux/bin/bash /compat/linux/usr/local/crashplan/bin/CrashPlanEngine start jexec /compat/linux/bin/bash /compat/linux/usr/local/crashplan/bin/CrashPlanEngine status Если при запуске получили «ок» и при проверке статуса видим много PID’ов, то все работает. Настройка автозапуска CrashplanЗаходим в jail: jexec /bin/tcsh Создаем скрипт автозапуска: nano /etc/rc.d/crashplan Текст скрипта #!/bin/sh # PROVIDE crashplan # REQUIRE LOGIN

. /etc/rc.subr

name=crashplan rcvar=crashplan_enable start_cmd=»${name}_start» stop_cmd=»${name}_stop}»

#!/bin/sh # PROVIDE crashplan # REQUIRE LOGIN

. /etc/rc.subr

name=crashplan rcvar=crashplan_enable start_cmd=»${name}_start» stop_cmd=»${name}_stop}»

crashplan_start () { /compat/linux/bin/bash /compat/linux/usr/local/crashplan/bin/CrashPlanEngine start }

crashplan_stop () { /compat/linux/bin/bash /compat/linux/usr/local/crashplan/bin/CrashPlanEngine stop }

load_rc_config $name run_rc_command »$1»

Проверяем чтобы команды crashplan_start и crashplan_stop были в первой позиции строки! Делаем скрипт исполняемым: chmod +x /etc/rc.d/crashplan Редактируем скрипт rc.conf. nano /etc/rc.conf Добавляем строку crashplan_enable=«YES» Попутно правим sshd_enable=«YES» hostname=«crashplan» чтобы включить SSH и задать нужно для нас имя хоста. Подключение папок хранилища в jail.Как подключать папки в jail хорошо описано в документации.Важно помнить что корнем файловой системы для Crashplan’a будет не корень jail’а (директория /), а директория /compat/linux!!! То есть надо подключать, например, не в директорию /mnt, а в директорию /compat/linux/mnt, иначе Crashplan не увидит Ваши директории.И не забывайте, что вложенные датасеты надо тоже прописывать! Последний штрих для SSH.Задаем пароль для root’а: passwd Важно! В FreeBSD (и FreeNAS jail) вход root через ssh запрещен. Для входа через ssh нужно или добавлять пользователя (включив его в группу wheel разрешим ему su) или править файл /etc/ssh/sshd_config. С точки зрения первый вариант более грамотный.Как пользоваться командой adduser я рассказывать не буду, а расскажу о втором варианте.Редактируем файл sshd_config: nano /etc/ssh/sshd_config Ищем строки #PermitRootLogin no #PasswordAuthentication no и меняем на PermitRootLogin yes PasswordAuthentication yes Сохраняем и запускаем SSH: service sshd start или перезапускаем: service sshd restart Настройка Crashplan’а Проверяем запущен ли Crashplan, если нет, то запускаем.Само подключение и настройка хорошо описана в USING CRASHPLAN ON A HEADLESS COMPUTER.Если будет кому-то нужно, то могу расписать.И после подключения, смотрим результат.

Ура! Заработало! 901954e10b47412d8b92a09094bd7dcc.PNG После перезагрузки все работает!

P.S. Хотелось бы услышать конструктивную критику.

© Habrahabr.ru