DropBox в Funtoo Linux

  • SlimsUA 04.04.2011
    Внимание! Описанные здесь подходы и решения не являются руководством к буквальному следованию. Большая часть приведенных команд выполняются с привилегиями суперпользователя, а потому требуют внимания и четкого понимания. Если Вы не понимаете, что произойдет при выполнении той или иной из приведенных здесь команд - не выполняйте их! Часть, посвященная init-скрипту, предназначена только для для системы Gentoo/Funtoo и, возможно, подходит для некоторых Gentoo-based дистрибутивов. Не забывайте о бэкапе важных данных, в частности о данных хранящихся на Dropbox-аккаунте. В общем, я Вас предупредил и претензии вида: "Я сделал как здесь написано и у меня все поломалось!" - я не принимаю.

    Вдохновившись хвалебными отзывами в интернетах вообще и на этом сайте в частности о сервисе DropBox (https://www.dropbox.com/), я решил тоже попользоваться этим замечательным сервисом.

    Небольшое отступление о моей системе: у меня установлена Funtoo GNU/Linux (http://www.funtoo.org), unstable-ветка, это на 98% та же самая Gentoo, от того же Daniel Robbins, просто с небольшими доработками (Portage на основе git, а не rsync, GBUB2 вместо GRUB-Legacy и еще чуть-чуть). Но в целом, это все та же Gentoo. Ядро я использую 2.6.37-r2, графическое окружение - GNOME-2.32.

    Вернемся к DropBox. В репозитории обнаружилось два с виду подходящих пакета: net-misc/dropbox и gnome-extra/nautilus-dropbox.
    Установка gnome-extra/nautilus-dropbox не увенчалась успехом - одна из зависимостей не собралась из-за проблем с Unicode-ом - да ну и ладно.
    Пробую net-misc/dropbox - вуаля, установка выполнена, но... это просто прекомпилированный пакет, без GUI, без man-page, с одним единственным README, в котором 99% - это текст лицензии. Есть только кучка библиотек, исполняемый файл dropbox, скрипт dropbox-launhcer, который запускает dropbox с пониженным приоритетом и dropdoxd - симлинк на dropbox-launcher. Все это легло в /opt/dropbox. А ну и еще симлинк на dropbox в /opt/bin. Вот и все.

    Запускаю:
    slims@slims-pc ~ $ dropbox <Enter>
    dropbox пытается соединиться, не знает куда и дает ссылку в интернеты. Иду по ссылке, попадаю на сайт DropBox, логин, пароль - ура, "The computer slims-pc was linked to your account". Ну да, сперва я, конечно, создал аккаунт на сервере :)
    Процесс в фон сам не уходит, блокирует терминал, для завершения ждет Ctrl+C (вот это уже настораживает, надо будет добавлять & ).
    Смотрю в домашний каталог - есть dot-папка .dropbox:
    slims@slims-pc ~ $ ls -l .dropbox
    srw------- 1 slims users     0 Апр  4 09:17 command_socket
    -rw-r--r-- 1 slims users  5120 Апр  4 09:17 config.db
    -rw-r--r-- 1 slims users     4 Апр  4 09:17 dropbox.pid
    -rw-r--r-- 1 slims users 22528 Апр  4 09:17 filecache.db
    -rw-r--r-- 1 slims users    69 Апр  4 09:17 host.db
    srw------- 1 slims users     0 Апр  4 09:17 iface_socket
    drwxr-xr-x 2 slims users     6 Апр  4 09:17 l
    -rw-r--r-- 1 slims users 14336 Апр  4 09:17 sigstore.db
    -rw-r--r-- 1 slims users   168 Апр  4 09:17 unlink.db
    Пара сокетов, pid-файл с номером процесса, базы данных SQLite, сплошная бинарщина, ручной правке не подлежит.
    Еще есть папка Dropbox:
    slims@slims-pc ~ $ ls -l Dropbox
    
    -rw-r--r-- 1 slims users 268860 Апр  2 17:18 Getting Started.pdf
    drwxr-xr-x 3 slims users   4096 Апр  2 17:18 Photos
    drwxr-xr-x 2 slims users   4096 Апр  2 17:18 Public
    Ага, вот это и есть синхронизированная папочка. Проверяю: что-то положить, что-то удалить. попробовать восстановить - работает.
    Но что-то все равно напрягает... Запускаю из-под рута - ну, точно: снова ссылка, привязка и у рута в домашней папке своя копия Dropbox и .dropbox. Напрашивается вопрос - зачем мне одному две копии одного и того же?
  • SlimsUA 04.04.2011
    Зачем мне одному две копии одного и того же?

    А и правда зачем? Ведь root - это я, но, естесственно, я под рутом не сижу; slims - тоже я; больше никто на моей машине под "линуксом" не сидит. Делаем ход конем:
    # Создадим отдельную директорию
    root@slims-pc ~ # mkdir -v /home/Dropbox
    root@slims-pc ~ # chown -v root:users /home/Dropbox
    root@slims-pc ~ # chmod -v 775 /home/Dropbox
    Если dropbox запущен - останавливаем (у всех пользователей), для одного из тех, кого линкуем копируем всё из ~/Dropbox в /home/Dropbox, а затем всем пользователям, которых мы хотим привязать к общей папке, выполняем:
    root@slims-pc ~ # cd 
    root@slims-pc ~ # rm -r ~/Dropbox
    root@slims-pc ~ # ln -sv /home/Dropbox
    Теперь у всех пользователей, у которых был создан такой симлинк, dropbox на самом деле будет использовать одну и ту же папку /home/Dropbox.
    Внимание! Следует иметь ввиду, что эти пользователи должны использовать и один на всех аккаунт на сервере Dropbox. Если какой-либо пользователь имеет свой собственный аккаунт - ему симлинк создавать нельзя! Так что, возможно, есть смысл назвать общую папку не /home/Dropbox, а к примеру, /home/Dropbox-slims, или использовать бОльшую вложенность. Опять же, группу и права доступа надо устанавливать согласно своей ситуации и политике безопасности. Например, я мог сделать "chown -v root:slims /home/Dropbox" вместо "chown -v root:users /home/Dropbox". Владельца, наоборот, менять нельзя.
    Можно вообще, для каждого Dropbox-аккаунта создать группу и соответственно им устанавливать права. Короче, думайте :)

    Что же дает такой подход?
    Достоинства:
    - только одна копия синхронизированных файлов для разных профилей пользователя при условии использования ими одного аккаунта Dropbox (пока там лежит десяток фоток - не критично, а когда там 100+ ГБ? );
    - процесс dropbox может (и должен, вообще говоря) быть запущен только из-под одной учетки, все остальные будут синхронизироваться автоматически.

    Недостатки:
    - относительная сложность настройки. Но это же Unix-way, не так ли: все есть файл, у файла есть права, правами управляет root и он знает, что делает ;)

    P.S. В целях сохранности и доступности данных root-у симлинк тоже можно не создавать, т.к. у многих /home смонтирован отдельным разделом, а в однопользовательском режиме (recovery-mode) часто бывает доступен только корневой, а вот данные с Dropbox-а могут и понадобится (особенно, когда сам Dropbox запустить нет возможности).
  • SlimsUA 04.04.2011
    Как настроить Dropbox на автоматический запуск?

    Рассмотрим пути запуска dropbox в Funtoo.
    1. Ручной запуск:
    slims@slims-pc ~ $ dropbox <Enter>
    Процесс стартует, синхронизация выполняется, но терминал блокирован, ждет Ctrl+C. Вывод - плохо, совсем не то, хотя мы точно знаем, что делаем, как и когда.
    2. Ручной фоновый запуск:
    slims@slims-pc ~ $ dropbox & <Enter>
    Процесс стартует, синхронизирует, терминал не блокирован - процесс в фоне, убивать через kill или системный монитор графической оболочки. Вывод - уже лучше, но главное - не забыть запустить.
    3. Ручной запуск из графической оболочки:
    Alt+F2, ввести команду "dropbox", галочку "Запустить в терминале" не ставить. Полностью аналогчно п.2.
    4. Автоматический запуск в графической оболочке.
    Для GNOME: Система -> Параметры -> Запускаемые приложения -> Добавить -> "Имя: Dropbox Service Команда: dropbox Описание: ну сами что-нибудь напишите" -> поставить галочку в списке.
    Вывод: гораздо лучше, сервис стартует вместе с "гномом". Минусы: 1) в случае одновременного графического логина нескольких пользователей с одним Dropbox-аккаунтом возможны конфликты самого "дропбокса" из-за общей папки синхронизации; 2) автозапуск, вероятно, придется настраивать отдельно для каждой графической среды (GNOME, KDE и т.д.); 3) и самое неприятное - в случае невозможности/нежелания графического входа, в голом терминале все равно придется запускать вручную.
    5. Автоматический запуск на уровне инициализации системы.
    В Gentoo/Funtoo (а также Calculate, Sabayon) можно:
    a) использовать файл /etc/conf.d/local
    b) можно написать скрипт, скажем /etc/init.d/dropbox-service, а затем использовать его как любой другой rc-скрипт:
    # rc-update add dropbox-service default

    Вот вариант 5b я использую у себя, о чем и хочу рассказать.

    Начальные условия: у меня есть аккаунт Dropbox и рабочая учетная запись slims, под рутом тоже иногда приходится работать. Поэтому у меня создана общая папка /home/Dropbox, а домашних папках рута и юзера симлинки ~/Dropbox указывают на неё (см. предыдущий пост)

    Итак, из-под рута:
    # Пишем скрипт
    root@slims-pc ~ # echo > /etc/init.d/dropbox-service << EOF
    #!/sbin/runscript
    # Copyright (c) 2011 Sergej Naidjonov <slims.ua@gmail.com>
    # All rights reserved. Released under the 2-clause BSD-license.
    
    depend() {
            need net localmount
    }
    
    start() {
           ebegin "Starting Dropbox service"
           start-stop-daemon --start --quiet --exec /opt/dropdox/dropbox-launcher &
           eend ${?}
    }
    
    stop() {
          ebegin "Stopping DropBox service"
          start-stop-daemon --stop --quiet --pidfile /root/.dropbox/dropbox.pid
          eend ${?}
    }
    EOF
    
    # Разрешаем исполнение скрипта
    root@slims-pc ~ # chmod +x /etc/init.d/dropbox-service
    
    # Проверяем
    root@slims-pc ~ # /etc/init.d/dropbox-service start
    * Starting DropBox service                      [ ok ]
    
    # Если увидели OK, добавляем в автозапуск
    root@slims-pc ~ # rc-update add dropbox-service default

    Несколько пояснений.
    1. need net - сервис dropbox должен запускаться только после сетевых интерфейсов.
    2. need localmount - поскольку у меня /home находится на отдельном разделе и монтируеися через /etc/fstab, то сервис dropbox должен запускаться только после монтирования /home.
    3. start-stop-daemon --stop --quiet --pidfile /root/.dropbox/dropbox.pid - сервис стартует с правами рута, поэтому и pid-файл находится в /root/.dropbox
    Поскольку и /root/Dropbox и /home/slims/Dropbox являются симлинками на одну и ту же папку, то slims может управлять содержимым своей /home/slims/Dropbox, а синхронизироваться она будет процессом рута.
    4. В данном случае юзеры slims можно вообще не запускать dropbox самому и тогда можно ~/.dropbox удалить. После удаления dropbox запускать можно только привязывая его к тому же самому аккаунту.
    5. Пользователям, имеющим другие аккаунты, используя пути запуска 1-4.
  • SlimsUA 04.04.2011
    Надеюсь, эта информация кому-нибудь покажется полезной. С радостью жду комментариев, критики и просто отзывов. Если есть необходимость, то могу попробовать в таком же ключе описать подход к запуску популярного Bittorrent-клиента uTorrent, Linux-версия которого пока существует только в виде прекомпилированного бинарника, да к тому же без GUI, а только сервер+Web-интерфейс.
    С уважением, ваш SlimsUA.
  • AlizeoAlizeo 05.04.2011
    Интересное решение. Только вот малость запутанное и непонятно в принципе зачем это может понадобиться.

    Оставив в стороне подключение нескольких пользователей (именно пользователей, не администраторов, вроде root) на один аккаунт в сервисе, хочется уточнить почему бы просто не заменить директорию Dropbox с файлами в /home/user на симлинк, ведущий на /root/Dropbox?
    При таком варианте мы имеем и доступ рута к файлам в однопользовательском режиме и не плодим дубликаты. Права на просмотр и редактирование вложенных директорий в /root/Dropbox - это не проблема.
    Такой вариант несоизмеримо проще и элегантнее, чем то, что вы предложили.

    Или я что-то упускаю?
  • SlimsUA 05.04.2011
    Alizeo:
    ...непонятно в принципе зачем это может понадобиться...
    Например, запустить таким образом настроенный клиент Dropbox на домашней "безголовой" файлопомойке, а с рабочего "настольника"/ноутбука получать доступ к синхронизированной папке по NFS/Samba не имея на них клиента Dropbox вообще. Тем самым экономя не только место, но и траффик. Я думаю, сервера Amazon-а будут благодарны.
    Alizeo:
    почему бы просто не заменить директорию Dropbox с файлами в /home/user на симлинк, ведущий на /root/Dropbox?.. Такой вариант несоизмеримо проще и элегантнее, чем то, что вы предложили.
    Или я что-то упускаю?
    Отвечу вопросом на вопрос. А как Вы относитесь к пользователям "той самой ОС", которые хранят свои фильмы на рабочем столе? Или ставят многогигабайтные игры в "C:\Program Files"? И как быть, если на одной машине установлены 2 ОС с разными root-разделами, но общим /home-разделом?
  • SlimsUA 05.04.2011
    Вообще, конечно, надо еще разбираться. В частности, сегодня вот увидел проблему: процесс клиента работает с EUID root-а, а потому файлы, полученные с сервера, получают права 644 и владельцем является рут (согласно стандартной маске umask 022), т.е. обычному пользователю доступны только для чтения.
    Но я ведь предупреждал, что это не "руководство к действию", а "руководство к размышлению"
  • AlizeoAlizeo 05.04.2011
    Как раз о правах доступа я сразу и подумал. Но это решается одной строкой. Так что пропустим.

    С доступом через Samba все просто и понятно. Или есть принципиальная разница куда самбой коннектиться?
    А вот в примере с "той самой ОС" неясно ничего: При чем тут их рабочий стол или Program Files? Не станете же вы Program Files синхронизировать через сервис. Да и Рабочий стол суть у каждого свой должен быть.

    В случае с общим /home: ну сделайте там основную директорию, а в /root симлинк поставьте.

    Изначально мы рассматривали вариант когда и root, и пользователь одно лицо, в одной ОС пусть и на разных разделах. И мой вариант с симлинком тут предпочтительнее. В случае с 2 /root и общим /home мы просто переставим местами слагаемые, сумма-то не изменится.
  • SlimsUA 06.04.2011
    Alizeo:
    С доступом через Samba все просто и понятно. Или есть принципиальная разница куда самбой коннектиться?
    Да не принципиально. Я просто описал один из возможных способов использования такого изолирования клиента Dropbox, когда синхронизируется только лишь одна машина (локальная файлопомойка/прокси-сервер), а остальные домашние машины прозрачно синхронизированы с ней (используя локальные коммуникации).
    Alizeo:
    А вот в примере с "той самой ОС" неясно ничего: При чем тут их рабочий стол или Program Files? ... Да и Рабочий стол суть у каждого свой должен быть.
    В "C:\Program Files" акцент делался на на "Program Files", а на "C:\". Рабочий стол (за редкими исключениями) тоже на Це-диске. А использование системного раздела для хранения информации, не относящейся к функционированию этой системы - плохая практика. У меня, например, корневой раздел - всего 2ГБ, т.к. /boot, /home, /usr, /tmp и /var/tmp - вынесены на отдельные разделы, причем все они (кроме /usr) монтируются и в Funtoo, и в LFS.