...

вторник, 17 марта 2015 г.

[Из песочницы] Об установке 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'ов



видим, что в наличии есть плагин 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"





Подключаемся и видим что кириллица некорректно отображается:

видим крякозябры





Вот и наша «шишка».

Поиск решения




Поиск решения в лоб (с помощью Google) привел к тому, что я не одинок в своей проблеме: «FreeBSD + CrashPlan + /compat/linux = кракозябры».

Вариантов решения назревало несколько:


  1. Попытаться настроить корректное отображение кириллицы в plugin'е.
    Отбросил

    Plugin'ы делаются как pbi-файлы, которые при разворачивании не используют стандартные каталоги jail'а, а строят дополнительно свои. Попытка разобраться ни к чему не привела, я утонул в сложностях структуры и решил не продолжать.




  2. Установить linux-jail из шаблонов.
    Отбросил

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




  3. Запустить в VirtualBox'е Linux (например Debian).
    Отложил

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




  4. Установить чистый jail и в нем запустить Crashplan через BSD-эмулятор Linux.




Честно признаюсь, перепробовал все варианты (и в том порядке как указал). Победил п.4, о чем и расскажу.

Так есть ли свет в конце туннеля? (новые грабли)




Поиск решения привел меня к статье [How-To] CrashPlan in FreeNAS 9.1 Jail (tested on 32bit), которая была взята за основу.

И так поехали (или полетели, кому как нравиться).
Подготовительные работы



Все моменты первичной настройки FreeNAS, после первого запуска, я опущу, об этом написано много.


  1. Подключаемся к FreeNAS по ssh.

  2. Проверяем загружен ли модуль ядра для Linux:

    kldstat | grep linux




    Если увидим что-то подобное:

    22 2 0xffffffff81d09000 46855 linux.ko




    значит мы уже его загрузили, если нет то:

    kldload linux


  3. Включаем linux-compat в системе

    в веб-интерфейсе
    Включение linux-compat вызывает автоматическую загрузку модуля ядра linux.ko, поэтому параметр linux_load можно не добавлять.





  4. Создаем jail.

    создание
    Настройки по умолчанию, можно не менять. Параметр «VIMAGE» оставляем включенным.








    И ждем окончания установки







    Процесс занимает 10-45 мин.


Установка Crashplan и всего необходимого в jail



Действия выполняем в ssh FreeNAS (если не оговорено иначе).


  1. Определяем ID нашего jail'а

    jls




    Получаем такой ответ





    Откуда видно что ID jail'а = 2.

  2. Подключаемся к jail'у.

    jexec 2 /bin/tcsh




  3. Обновляем в jail'е пакеты и порты

    pkg update
    pkg upgrade
    portsnap fetch extract




    Ждем завершения.

  4. Устанавливаем редактор nano (любители vi пропускают данный пункт)

    cd /usr/ports/editors/nano
    make install clean




  5. Устанавливаем эмулятор fedora-linux

    cd /usr/ports/emulators/linux_base-f10/
    make install clean




  6. Устанавливаем эмулятор procfs

    cd /usr/ports/sysutils/linux-f10-procps/
    make install clean




  7. Устанавливаем JRE для linux

    cd /usr/ports/java/linux-sun-jre17
    make install clean




    и получаем
    ошибку





    Это связано с тем, что Оракл запретил качать этот файл напрямую. Поэтому идем по этой ссылке и скачиваем файл 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




    И дожидаемся окончания установки.

  8. Монтирование 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




    И включаем автозапуск скрипта

    как включить





  9. Проверяем все ли правильно сделано (в первую очередь текст скрипта) и перегружаем FreeNAS.

  10. После перезагрузки проверяем включены ли наши настройки:

    kldstat | grep linux
    mount | grep linprocfs




    Если после второй команды мы не видим строчку подобную этой:

    linprocfs on /mnt/poolz/jail/crashplan/compat/linux/proc (linprocfs, local)




    тогда возвращаемся к пункту создания скрипта и ищем ошибку.

    Если все хорошо, то продолжаем.

  11. Ставим Crashplan

    Заходим в jail (аналогично первым двум пунктам):

    jls
    jexec <jail_id> /bin/tcsh




    Переходим в директорию /compat/linux , качаем Crashplan, распаковываем и инсталлируем:

    cd /compat/linux
    fetch http://ift.tt/1Eqwyqs
    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 можно удалить, они уже не нужны.

  12. Редактируем 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"




  13. Исправляем путь к 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://ift.tt/1CmcAhB
    JRE_I586_DOWNLOAD_URL=http://ift.tt/1Eqwyqw

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








  14. Проверяем работоспособность.

    Из 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 <jail_id> /compat/linux/bin/bash /compat/linux/usr/local/crashplan/bin/CrashPlanEngine start
    jexec <jail_id> /compat/linux/bin/bash /compat/linux/usr/local/crashplan/bin/CrashPlanEngine status




    Если при запуске получили «ок» и при проверке статуса видим много PID'ов, то все работает.

  15. Настройка автозапуска Crashplan

    Заходим в jail:

    jexec <jail_id> /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 и задать нужно для нас имя хоста.

  16. Подключение папок хранилища в jail.

    Как подключать папки в jail хорошо описано в документации.

    Важно помнить что корнем файловой системы для Crashplan'a будет не корень jail'а (директория / ), а директория /compat/linux !!!

    То есть надо подключать, например, не в директорию /mnt , а в директорию /compat/linux/mnt , иначе Crashplan не увидит Ваши директории.

    И не забывайте, что вложенные датасеты надо тоже прописывать!

  17. Последний штрих для 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.

Если будет кому-то нужно, то могу расписать.

И после подключения, смотрим результат.


Ура! Заработало!



После перезагрузки все работает!


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


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


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

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