27 августа 2013 в 15:03

Клиент Яндекс.Диска для Linux. Консольный

Сегодня мы представляем долгожданный клиент Яндекс.Диска для Linux. Можно было бы даже сказать «специально для Хабрахабра», так как ни одно упоминание Диска здесь не обходилось без вопросов о клиенте для Линукса.

У него есть вся основная функциональность, которая есть у клиентов для OS X и Windows, и даже больше (симлинки!), и одна особенность — он консольный.

image

Ниже читайте о том, как он настраивается, что конкретно умеет, и о том, как именно он устроен и что в нём было непросто сделать.


Установить его можно здесь. Сразу после установки пакета в терминале появится команда yandex-disk, через которую в дальнейшем и идет общение с облаком Яндекса. После этого нужно вручную запустить команду setup.

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

Команды


Подготовительная работа окончена, осталось запустить демон одной из команд. Они позволят вам синхронизировать файлы и папки и пользоваться ими везде, где есть интернет.

  • Sync запустит демон, синхронизирует все, находящееся в папке Диска, и остановит демон.
  • Start сделает то же самое, но без остановки демона после завершения синхронизации. При использовании start демон остается запущен и все изменения, происходящие в папке Диска, будут синхронизироваться автоматически.
  • Введя в терминале stop, можно в любой момент остановить запущенный демон, если он вам мешает.
  • Командой status можно узнать, в каком статусе находится ядро синхронизации.

Работать с папкой диска можно как из терминала, так и из Nautilus'a.

Что умеет


Консольный клиент позволяет поделиться файлом или папкой с помощью команды publish (если файл находится не в папке диска, перед публикацией он будет туда скопирован). Ссылка будет доступна в терминале, и любой человек, пройдя по ней, сможет посмотреть или сохранить себе опубликованный вами файл или папку. Если случайно был опубликован не тот файл, с помощью команды unpublish можно закрыть доступ к публичному объекту.

В Яндекс.Диске возможна выборочная синхронизация. Команда exclude позволит исключить папку из синхронизации: все изменения, производимые в ней после этого, не будут отправлены в облако.

Опция read-only позволит менять файлы локально, без заливки их в облако. При возникновении конфликтов с локальными изменениями, последние будут сохранены в переименованных файлах, а изменения из облака будут синхронизированы. Опция overwrite будет перезаписывать локально измененные файлы в режиме read-only.

Не можем не похвастаться самым интересным нововведением в ядре синхронизации — отныне мы поддерживаем синхронизацию симлинков! Если возникнут трудности и вопросы в использовании консольного клиента команды man и help просто и доступно помогут в них разобраться.

Как сделан


Чтобы в будущем код можно было использовать для реализации клиентов под разные ОС, было принято решение писать его на C++. Специфичные для разных операционных систем куски кода мы вынесли в отдельные функции или классы, а под каждую платформу писали свою реализацию. В качестве основных кроссплатформенных библиотек мы взяли Boost, OpenSSL и JsonCpp, а системой контроля версий стал git. Клиент под Linux собирался с помощью autoconf. Код писался и отлаживался в связке KDevelop + консольный gdb, либо в Qt Creator'е (в зависимости от предпочтений разработчика).

Взаимодействие с облаком и синхронизация производятся с помощью библиотеки ядра Яндекс.Диска, которую используют десктопные клиенты сервиса.

Как работает


Консольный клиент состоит из двух частей: демона и клиента. Общаются они посредством текстовых пакетов содержащих json-сообщения, посылаемые через сокеты (на Linux и Mac OS X используются unix-domain сокеты). Асинхронная работа реализована с помощью библиотеки boost::asio. Синхронизация доступа к данным реализуется через boost::asio::io\_service::strand, что позволяет не думать о проблеме одновременного доступа к данным нескольких потоков, а также исключает появление deadlock-ов.

Для локализации мы используем библиотеку boost::locale. Текст внутри клиента закодирован в utf-8 и по необходимости преобразовывается в специфичном для каждой операционной системы коде. Мониторинг файловой системы для Linux использует inotify, прекрасно вписыващийся в асинхронную работу boost::asio.

Как устроена синхронизация


Синхронизация — сердце Яндекс.Диска, его ключевая возможность. Задача синхронизации файлового дерева с облаком делится на несколько независимых частей.

1. Мониторинг файловой системы. Ядро синхронизации Яндекс.Диска проектировалось и создавалось как переносимая абстракция, способная выполнять поставленные задачи на всех поддерживаемых платформах. Но такая проблема, как мониторинг файловой системы не реализуется ни стандартной библиотекой C++, ни даже такими монстрами как boost. Более того, даже используя «родное» API операционной системы, мы получаем набор событий, специфический для каждой платформы.

Для мониторинга файловой системы был спроектирован интерфейс «наблюдателя», способного следить за событиями в определённой директории и возвращающего список событий, произошедших в ней. Причём для каждой поддерживаемой платформы набор этих событий отличается. Например, Mac OS X способна сообщить только о факте какого-то изменения в одной из дочерних директорий без детализации. А вот Windows и Linux возвращают полный набор, включая создание, удаление, модификацию и перемещение объектов. Хотя практика показывала, что событиям на платформе Windows доверять не стоит и самым надёжным вариантом остаётся листинг директории после получения оповещения.

2. Индексация локальных файлов и директорий. Для контроля целостности и реализации дельта-обновления файлов ядро синхронизации Яндекс.Диска использует дайджесты — наборы контрольных сумм файла и отдельных его частей. Для всего файла мы рассчитываем стойкий хэш SHA-256 и набор менее стойких сумм для отдельных блоков. Каждый файл, находящийся в папке Яндекс.Диска и не попадающий в список исключений, должен быть проиндексирован. Но вычисление хэша SHA-256 -достаточно дорогая операция, а расчёт хэшей при каждом запуске ПО был бы непростительной тратой ресурсов. Поэтому после того, как завершается индексация файла, ядро синхронизации сохраняет полученный дайджест в «банке» — специальном хранилище, находящемся в служебной директории Яндекс.Диска. Для поиска дайджестов в хранилище используется уникальный идентификатор файла — inode (размер и время последнего изменения). К сожалению, подобный подход не лишён недостатков. Например, многие файлы-криптоконтейнеры сохраняют время последней модификации неизменным даже после записи.

Наверное, кроме тонкостей работы с символическими ссылками, ничего в листинге директорий не представляет особого интереса. Для успешного завершения синхронизации ядро должно обнаруживать и исключать из синхронизации циклические ветки.

Вообще, символические ссылки — это настоящая «головная боль» для ядра синхронизации. Они могут указывать в произвольные места файловой системы, и ни ко всем из них можно применять одинаковые правила синхронизации. Например, пакеты приложений Mac OS X очень часто содержат в себе символические ссылки на директории системных библиотек, и их синхронизация в облако была бы нежелательна — особенно между разными версиями ОС. Но в то же время возможность синхронизировать дополнительные директории с помощью символических ссылок — очень заманчивая возможность, упускать которую не хотелось.

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

3. Получение дерева облачной файловой системы. Для решения проблемы синхронизации мало иметь локальную файловую структуру и дайджесты файлов — необходимо получить текущее состояние файловой системы в облаке. Если бы ядру синхронизации каждый раз приходилось обходить дерево с помощью метода PROPFIND, то каждый цикл синхронизации занимал бы неоправданно много времени и создавал бы излишнюю нагрузку на канал. Поэтому ПО Яндекс.Диска использует специальный API, который даёт возможность получать текущее состояние дерева файлов в облаке и изменения, произошедшие в нём, начиная с некоторого известного момента, определяемого версией дерева.

4. Получение оповещений об изменении облачной файловой системы. Синхронизация файлов в реальном времени требует своевременного получения оповещений об изменениях, произошедших с файлами в облаке. Можно было бы использовать периодический опрос сервера клиентами, но, оценив возможное количество клиентов, мы пришли к выводу, что такой подход окажется слабо масштабируемым и приведёт к быстрой перегрузке инфраструктуры сервиса. После недолгих поисков мы остановились на протоколе XMPP. Одна из его реализаций уже долгое время работает в Яндексе. Она была разработана командой, которая позже занимались созданием сервера WebDAV для проекта Яндекс.Диск, поэтому сложностей с интеграцией этого протокола не возникло.

Сейчас пуш-оповещения, обрабатываемые ядром синхронизации, включают в себя не только события, произошедшие непосредственно с файлами или папками в облаке Яндекс.Диска, но и различные сервисные сообщения. Например о выдаче дополнительного места или действиях других пользователей в общих папках. Добавление этих событий к имеющемуся протоколу не вызвало больших сложностей благодаря расширяемости XMPP, что в очередной раз подтвердило правильность нашего выбора.

5. Создание списка операций синхронизации. После того как в распоряжении ядра синхронизации оказываются оба дерева файлов — локальное и удалённое — можно приступать к самой процедуре синхронизации. Для этого применяется специальный алгоритм сравнения деревьев, принимающий на вход кроме двух упомянутых деревьев, ещё и третье — последнее синхронизированное. В результате работы алгоритма получается список операций, которые необходимо произвести над локальными и удалёнными файлами и директориям для приведения деревьев к общему виду.

6. Обработка очереди операций синхронизации. Создание списка операций для локального и удалённого деревьев происходит независимо. В результате могут появиться конфликтующие операции. Например, удаление в облаке файла, который был в нём изменён и ещё не синхронизирован локально, или изменение файла одновременно локально и в облаке. Конфликты модификации/удаления всегда разрешаются ядром в пользу модификации, а конфликты двойной модификации разрешаются переименованием одной из версий файла. Таким образом мы можем гарантировать сохранность данных и даём возможность после завершения синхронизации самому пользователю решить, какое из изменений больше ему подходит в каждом конкретном случае.

Операции синхронизации должны подчиняться строгому порядку, нельзя передавать файл, пока не создана его родительская директория. Так же директорию нельзя удалять, пока внутри неё остаются файлы, которые нужно переместить на новое место. Алгоритм сравнения деревьев уже создаёт операции в нужном порядке, но при возникновении ошибок он может нарушиться. Для предотвращения этой ситуации у каждой операции есть список зависимостей — набор операций, которые должны завершиться до начала её выполнения, и набор операций, которые не должны начаться, пока она не будет выполнена.

Кроме зависимостей на порядок выполнения операций оказывает влияние её приоритет. Например, операции передачи файлов выполняются в зависимости от размеров файлов — от маленьких к большим.

Все эти задачи выполняются одновременно, накладывая дополнительные требования на качество синхронизации параллельных процессов и распределение ресурсов внутри ядра синхронизации Яндекс.Диска. Если у вас ещё нет Я.Диска, завести его можно здесь, а установить для Linux — здесь: repo.yandex.ru/yandex-disk.
+169
62855
306
marcel 6,0
Похожие публикации
Математика аукционов. Лекция в Яндексе вчера в 19:00
Курс от Яндекса о том, что должен знать каждый разработчик, который хочет делать большие системы. Модное слово DevOps и другое 15 декабря в 15:58
Яндекс открывает новое направление своей деятельности — Yandex Data Factory 9 декабря в 16:23
Краткая история хакерства. Рассказ от руководителя информационной безопасности Яндекса 30 ноября в 14:08
Будущее [отсутствие] интерфейсов браузеров от Яндекса 27 ноября в 20:34
Как мы измеряем скорость загрузки Яндекс.Почты 26 ноября в 16:36
Интерактивное голосовое редактирование текста с помощью новых речевых технологий от Яндекса 24 ноября в 14:06
Как и для чего Яндекс отключает собственные дата-центры 17 ноября в 13:56
Как в Яндексе используют PyTest и другие фреймворки для функционального тестирования 10 ноября в 16:47
Как инкрементальные обновления влияют на скорость загрузки. Опыт Яндекс.Почты 6 ноября в 14:18

Комментарии (216)

+16
Nordvind #
GUI к нему планируется? Не всегда даже линукс пользователи хотят возиться с консолью.
+40
animasola #
Мы думаем о такой возможности. Думаете, он правда очень нужен?
+7
kaliostro #
а в чем проблема? Вы сами пишите, что использовали Qt Creator. Там кнопочек накидать — дело одного дня, имея код консольного клиента. Мне бы удобнее было гуем пользоваться, нежели консолью.
+7
naum #
Использование QtCreator'а не говорит об использовании Qt, само собой. Вы про кнопочки зря так.
+10
BlackRaven86 #
Написать хороший GUI — это несколько больше работы чем
кнопочек накидать — дело одного дня
–1
Shultc #
Хороший — да.
Но многим и плохой сойдёт, для того, чтобы лишний раз не лезть в консоль…
+18
Extremum #
Сделают плохой и их обязательно ткнут на Хабре носом в то, какой он плохой)
+1
Shultc #
Да и не только на Хабре. Разумеется приличной компании не подобает делает мелкие левые программки с убогим дизайном. Но, если они дадут какой-то инструментарий, чтобы простой смертный мог прикрутить к их консольному приложению GUI…
Да, или просто сделать этот GUI не официально и выложить куда-нибудь, если на красивый и стильный GUI выделение средств в компании в ближайшее время не запланировано…

Просто нужно помнить, что Linux уже давно не чисто гиковская среда. Его часто устанавливают своим родителям/бабушкам/сёстрам. А такие люди наврядли будут пользоваться консольными приложениями.
+2
ParkeTg #
А можно и отдельно сделать.
Вот что у меня получилось.
Оболочка (Tkinter)
#!/usr/bin/python2.7


from Tkinter import *
from tkFileDialog import *
import subprocess

def yandex_disk(Command,  Option):
	print Command, Option
	check = subprocess.check_output(["yandex-disk", "%s" % Command, "%s" % Option]).replace("\r","")
	text.insert(END, "%s" % check)
	buttonstate()

def buttonstate():
	check = subprocess.check_output(["ls -l /tmp/yandex-disk* | grep daemon | wc -l"], shell=True).replace("\n", "")
	print check
	if (check != "0"):
		button3['state']=NORMAL
		button4['state']=NORMAL
		button5['state']=NORMAL
		button2['state']=DISABLED
	else:
                button3['state']=DISABLED
                button4['state']=DISABLED
                button5['state']=DISABLED
                button2['state']=NORMAL
	

root = Tk()
root.title("Yandex-Disk")
frame = Frame(root)
frame.pack()

file_opt = options = {}
options['defaultextension'] = ''
options['filetypes'] = ''
options['initialdir'] = '/home/'
options['initialfile'] = '*.*'
options['parent'] = root
options['title'] = 'Select File'


button1 = Button(frame, text="sync", width=10, command=lambda: yandex_disk("sync",""))
button1.grid(row=0, column=0)

button2 = Button(frame, text="start", width=10, command=lambda: yandex_disk("start",""))
button2.grid(row=1, column=0)

button3 = Button(frame, text="publish", width=10, command=lambda: yandex_disk("publish",askopenfilename(**file_opt)))
button3.grid(row=2, column=0)

button4 = Button(frame, text="status", width=10, command=lambda: yandex_disk("status",""))
button4.grid(row=3, column=0)

button5 = Button(frame, text="stop", width=10, command=lambda: yandex_disk("stop",""))
button5.grid(row=4, column=0)

buttonstate() 

text = Text(frame, width=80, height=10)
text.grid(row=0, column=1, rowspan=5)

root.mainloop()




Хотел было еще сделать радиокнопки, для каждой из опций, да надоело. Мне консоль роднее.
+17
zednight #
За консоль спасибо, но поддерживаю — нужен.
+2
anton #
А расскажите, что именно от него нужно? Он же должен быть максимально незаметным.
+12
alexbyk #
Примерно то же, что и от Ubuntu One или DropBox клиента. Цель — чтобы пользователь мог ничего не изучая (не все линукс пользователи манокуры и любители консоли) быстро нащелкать/настроить мышкой — и все работало, иногда что-то в трее сообщало, все ли ок или нет.

Тоже присоединяюсь — GUI нужен
+3
dlinyj #
Ну плюс в дропбоксе естьу добная фича — кликнуть по файлу и расшарить его. Пока богаче и удобнее дропбокса ничего нет.
0
dlinyj #
Кто ставит минус, аргументируйте альтернативы под Linux!
–3
konkere #
Эта фича только в наутилусе. Наверное поэтому.
+2
dlinyj #
Хорошо, а какие есть альтернативы? (я молчу, что можно поставить наутилус)
+1
konkere #
А я что? Я тоже дропбокс использую. Хоть и без наутилуса с фичей.
Поставить наутилусь? И тонну зависимостей к нему? Ну уж нет.
0
dlinyj #
Тогда зачем ставить минус? Каждому своё, тема отдельного холивара.
0
kedobear #
Когда-то в 2011-ом году у меня были KDE и Dolphin. И в нем, почему-то, все прекрасно работало.
–1
kedobear #
Ах да, там нужно было пять минут пошаманить ручками, какой ужас! Проще ныть про зависимости наутилуса.
0
Cancel #
0
konkere #
1. Стороннее.
2. Даже с дольфином они не единственные файломенеджеры.
3. Да, пропустил появление, виноват.
4. Это было предположение, очевидно.
0
Tairesh #
А вот под Thunar
+17
zednight #
Ну так есть же трей. И собственно все облачные сервисы обычно там и светятся. Что нужно:
1) клик на значек трея, который бы показала состояние клиента (текущие операции)
2) Показал бы занятое/свободное пространство
3) Инструмент публикаций
4) Настройки
5) Открытие файлового менеджера на директории с облачными данными
Почему имеенно GUI и почему именно в трее:
1) Потому что удобней сделать два клика для получения информации, чем вводить команду
2) Потому что не все пользователи линукс умеют работать с консолью (мои родные занимаются веб-серфинингом и смотрят кино, им не нужна консоль)
3) Потому что при работе под Иксами консоль — тоже окно (конечно можно от этого отойти, но по умолчанию я запускаю терминал и он — окно)
4) Потому что консоль — преимущество над виндоус, а отсутсвие gui — преимущество windows (Исключительно идейный аргумент, но он имеет место быть)
+9
marcel #
Спасибо за столь подробное описание кейсов, для которых важен GUI.
–3
foxmuldercp #
Спасибо, Ваши кейсы для GUI ЯДа помогли мне в описании немного другой задачи.

Простите, но пункт 4 с выходом первой версии Powershell актуальность потерял, А после выхода третьей — стал развлечением для изучения дури программирования в .Net нескольких моих знакомых, в ИТ совсем не подкованных. Молчу уже про то, что например, консоль Exchange чуть ли не надстройка над Powershell для управления почтовым сервером.
+6
EvilShadow #
Топик про клиент под Linux, откуда там Powershell и .Net?
–2
foxmuldercp #
конкретно к 4му «идейному» пункту, о чем, я собственно сразу написал.
.Net кстати, как Mono вполне присутствует.
С количеством упоминания я, пожалуй, действительно переборщил
0
EvilShadow #
А, теперь понял. Не обратил внимания на то, что там два четвёртых пункта.
+7
Nordvind #
Ну мне положим, хватило бы и консоли, но обычные юзеры в консоль не полезут. Кстати, пользовательское соглашение не запрещает самому создать GUI-обертку вокруг утилиты?

P.S. За то что поддерживаете альтернативные (свободные) платформы — спасибо.
0
marcel #
Вы можете создавать приложения, использующие CLI Диска, при соблюдении условий лицензии.
+4
konkere #
Не очень.
Или хотя бы безгуёвую версию не убивайте.
0
CheGevara #
GUI нужен полюбому, не только красноглазики юзают linux, особенно Ubuntu
–1
thebestzorro #
Мне не нужен. Все отлично сделали.
–1
Grawl #
Действительно, вопрос: нужен ли UI?
+5
anton #
Кажется, клиент для сервиса вроде Диска должен быть максимально незаметным. И консольный выполняет эту задачу лучше всех.

Какую особенную пользу мог бы принести GUI?
+7
nazarpc #
Он был бы более дружелюбным к «не гикам», да и многим гикам было бы удобнее видеть состояние/уведомления клиента не только в консоли.
+1
zednight #
Раз он так распространен, значит какую-то пользу приносит…
+1
Elsedar #
Использую всплывающие подсказки от иконки dropbox-а в трее при наведении на нее. Чтобы узнавать текущее состояние(все ОК/идет загрузка/т.п.). А так GUI не нужен.
+13
Djamah #
я вот не просил клиент для линукса, но внимательно читал и очень надеялся. И вот, ура, но… я его так ждал потому, что у моей девушки убунта, понимаете, у девушки…
–5
OnYourLips #
И как ей удается пользоваться Линуксом без консоли?
+5
Mezomish #
Думаю, так же, как и моей жене: с легкостью и без напрягов ;)
+2
Shultc #
А что ей может понадобиться в консоли?
Что вообще может понадобиться в консоли большинству людей — которые в основном сёрфят интернет и смотрят фильмы?
0
OnYourLips #
Mezomish, Shultc, например поставить драйвер на какой-нибудь дигитайзер.
Это посложнее, чем Next, Next, Install.
+3
Shultc #
Знаете, есть у меня смутное подозрение, что мои знакомые девушки (да и многие другие знакомые), если будет нужно поставить драйвер на какой-нибудь дигитайзер, всё равно скорее обратятся ко мне, чем сделают это сами, и не важно, работают они под Linux, под Windows, или под Mac OS…
0
OnYourLips #
В чем разница установки драйвера от какого-нибудь скайпа или любой другой программы?
Чисто принципиально не будут ваши знакомые девушки их ставить?
Навыков для этого надо меньше, чем разобраться с интерфейсом какой-нибудь популярной социальной сети.
+1
Shultc #
Да нет. Просто есть люди, которые сами знают, что не отличат официальный источник драйверов, от левого сайта с вирусами… В общем, перестраховываются так люди. А кто-то просто обучаться не хочет… Большинство людей предпочитает чтобы просто «всё работало», не углубляясь в суть. Точно так же, кто-то на машинах меняет колёса и тормоза самостоятельно, а кто-то в таких случаях прибегает к помощи специалистов. Хотя операция тоже не из самых сложны.
+1
Mezomish #
Сегодня вечером обязательно спрошу у жены, не хочет ли она поставить драйвер на какой-нибудь дигитайзер, и обязательно напишу вам ее ответ.
+1
mcdebugger #
Так что ответила-то? :)
+1
Mezomish #
Ответ состоял из одного слова: «Чего?», сопровождавшегося примерно вот таким выражением лица: «о_О»

Возьму на себя смелость перевести на литературный русский: «Нет, я не хочу ставить драйвер на какой-нибудь дигитайзер, и более того: я понятия не имею, что это такое и зачем это может понадобиться».
+2
matiouchkine #
Антон, скажи, а в Win-версии есть GUI? И если да, то зачем ты задаешь вопросы про «каким он должен быть» и «какую пользу он мог бы принести?
+2
maseal #
Сразу меркантильный вопрос: за приглашенных людей, которые установят не win-клиента, а вот этого, будут начислять бонусное пространство?
+3
animasola #
Простите, не правильно вас поняла. Да, конечно, должны!
+12
nazarpc #
Вы круты, не только пишете о том, что сделали, но и немного о том, как.
Ждём GUI)
+37
iSodeska #
Потрясно, долго этого ждал. Гугл до сих пор не может сделать подобное для Гугл.Диск, а Яндекс смогли. Молодцы ребята!
0
wolandtel #
Если не ошибаюсь, у гугля даже вебдава нет.
0
maseal #
Нету. Именно по этой причине для не которых вещей использую именно яндекс-диск.
Один из сценариев использования, которые я счел полезными для себя:
Все пароли храню в keepass (для него есть клиенты под все платформы). Долгое время data-файл keepass хранил в папочке, которая синхронизировалась через dropbox, Сейчас пришел к другой схеме, которая показалось чуть более удобной и не требует установленного dropbox-клиента:
Использую для keepass небольшой плагин позволяющий работать с базой паролей через webdav (или если не получается, то с последней закэшированной). Из популярных облачных клиентов без танцев с бубном только яндекс диск заработал. Очень удобно.
+1
jeppeQue #
Где можно почитать про такое решение?
+6
cbone #
Спасибо, мне хватает и консольной версии. Очень рад что сделали и работает как часы. Жена хочет GUI, так что тема думаю актуальна.
Было бы не плохо иметь под рукой какой-нибудь виджет/иконку в статусбаре, которая отобразит yandex-disk status.
0
Wernisag #
А какой нибудь корпоративный тариф планируется? так что бы юзеров можно было подключать/отключать, распределять между ними место и прочее?
0
Natalykh #
Пока корпоративные тарифы не планируем. Видимо, вопрос не столько про тарифы, сколько про разные уровни доступа, да?
0
VBKesha #
Отличная новость!
А нет возможности синхронизировать отдельно взятую папку на клиенте, с папкой яндекс.диска?
0
marcel #
Если вы про подпапку, то сейчас прямого способа это сделать нет.
+3
hellman #
Супер, а планируется просмотр истории/откат изменений? Очень полезная фича была бы.
+1
Natalykh #
Это второй любимый вопрос на Хабре к Диску. После вопроса про наличие Linux-клиента. :)
Думаем. Спасибо.
0
Djulbars #
Хоть и оффтоп, но думается пользователей ПДД которые жду яндекс диск больше, чем пользователй Linux, с теми же ожиданиями. Ждем яндекс диск для пользователей ПДД!
+2
oWeRQ #
В голову приходит только одна расшифровка ПДД, но она явно никак не связана с я.диск, можно поинтересоваться, кто такие «пользователи ПДД»?
+2
hell0w0rd #
0
Natalykh #
Почта для доменов
–8
temujin #
Спасибо, конечно., но всё-это и из rsync прекрасно работает, если диск смонтирован. Или он что-то еще умеет? Как насчёт поддержки прокси?
+6
hell0w0rd #
После этого в папке .config, расположенной в домашнем каталоге, будет создан конфиг, в котором можно будет настроить путь к папке синхронизации (можно указать в консоли вручную), прописать путь к файлу токена, указать папки, которые будут или не будут синхронизироваться, и прописать настройки прокси-сервера.

Статью не читай, быстрее комментируй;)
0
Slightfox #
Планируются ли deb- и rpm-пакеты под процессорные архитектуры, отличные от i386 и amd64, например, powerpc?
0
marcel #
Под какую конкретно архитектуру и дистрибутив вам нужен Яндекс.Диск? Если не сложно, расскажите, пожалуйста, зачем вам нужна такая экзотическая платформа?
0
Slightfox #
Конкретно интересует powerpc и Debian. Использую WD MyBookLive, пытался подключить Яндекс.Диск по WebDAV, но не удалось, подробнее можно посмотреть здесь.
+1
marcel #
Мы подумаем.
+7
kibergus #
А еще arm. Под ним последнее время все более и более интересные железки появляются, например odroid.
0
slayerhabr #
и MIPS
0
marcel #
Про MIPS не думали. А где вы хотите использовать Диск под MIPS?
0
slayerhabr #
NAS'ы и роутеры, они сейчас заметно добавили мощности.
0
resetnow #
Под armv7. Уточнение — armhf. Экзотической платформой является мой нетбук Toshiba AC100.
0
ParkeTg #
можно попробовать запустить под qemu-user. Но не знаю, насколько медленно это будет.
0
resetnow #
Это будет катастрофически медленно :)
+5
Areso #
Также интересует ARM.
0
hostmaster #
палец вверх за ARM, davfs на raspberry pi не радует.
0
KorP #
Круто, жду ebuild, можно будет наконец то особо важные и не большие вещи бэкапить в облако!
0
mcdebugger #
Ога :) Ждём ебилдов!
0
DancingOnWater #
проще самому написать
+9
Anakros #
А сорцов не будет?
0
marcel #
Пока нет.
+2
Johann #
а когда будут?
+1
powerman #
Если честно, в Hardened Gentoo очень раздражает невозможность собирать приложение самостоятельно, используя hardened-gcc. Особенно когда приложение написано на C/C++ и активно работает с сетью (а значит может содержать удалённо эксплуатируемые уязвимости).
+9
Leshyk #
Очень рад возможности использовать Диск под линукс.

Возможно я что-то пропустил, но по-моему опыту работы с Dropbox, в синхронизаторах не хватает возможности создавать фильтры, например так, как это сделано в Git. Т.е. создается файлик в директории, в котором для всех поддиректорий прописывается что файлы например с расширением *.obj не должны синхронизовываться. Знает ли кто какие-то принципиальные ограничения для таких систем на это опцию?

Такая штука могла бы стать киллер-фичей ;)…
+4
Mezomish #
Вот это реально была бы мега-фича! И с точки зрения реализации совершенно несложно: прочитать файл с масками, и перед синхронизацией дополнительно прогонять через фильтр на предмет соответствия маскам.
0
marcel #
Вы говорите об одном файле в корне Диска?
0
Leshyk #
Можно один хотя бы. Можно о файлках в любой папке, действующей в глубь с возможностью отмены фильтров в родительских папках. Самый лучший пример это технологии файлы ".gitignore" в CVS Git.
–3
Darka #
А зачем он нужен, если оно через WebDAV работает с чем угодно?
–2
anton #
Быстрее и больше возможностей. Собственно, это описано в посте.
0
ansmirnov #
Интернет бывает не всегда и не везде
+1
ploop #
С тем же успехом можно веб-интерфейсом пользоваться (если не нужно монтирование к ФС).
Клиент позволяет синхронизировать файлы, которые всегда доступны в оффлайне.
0
ababo #
Насколько я понимаю, данные в облаке не шифруются? Или шифруются доступным вам ключём? В первом случае о безопасности хранимых данных говорить вообще не приходится. Во втором — есть вероятность их слива компетентным органам.
0
anton #
Когда это нужно — что мешает зашифровать данные со своей стороны?
0
ababo #
геморойность и негибкость этого подхода.
+1
ivlad #
Ну, извините, безопасность требует некоторых усилий. И она всегда обратно пропорциональна удобству.
0
ababo #
Тогда зачем все эти заморочки. Можно и на ftp кидать зашифрованный файл.
0
ababo #
Я хочу сервис, где расшифровка происходит у меня локально. Желательно, чтобы исходники были открыты и контроллируемы сообществом. Клиент можно было собрать у себя локально. Таким образом я точно буду знать, что мои данные, лежащие где-то в неподконтрольном мне облаке, хранятся безопасно.

Это было бы действительно конкурентным преимуществом, а не фигня, типа на n GB больше.
+2
Rayslava #
Использую encfs поверх яндекс.диска по webdav.
Открыты все исходники, какие только можно. Всё, вроде бы, безопасно.
–3
ababo #
Да какой толк в открытых исходниках, когда данные передаются на сервер незашифрованными (ну или ключ в руках у администраторов облака). Попровьте меня, если я ошибаюсь.
+2
Rayslava #
ещё раз — encfs. Шифрование локально. Моим ключом. На сервер уезжают уже шифрованные данные.
–1
ababo #
Я понял. Просто сначала подумал, что это встроенный функционал.
+2
BlackRaven86 #
Есть такой сервис — SpiderOak. Шифрует на стороне клиента, есть клиенты под разные ОС, может не только синхронизировать, но и просто делать бэкап.
Если зарегистрироваться по моей реферальной ссылке, дадут на 1 ГБ больше ;)
0
ababo #
а они исходники клиента распостраняют? чтобы самому собрать?
0
BlackRaven86 #
Часть открыта, но пока не все. Пишут, что в планах есть сделать открытым клиент.
0
VolCh #
Таким образом я точно буду знать, что мои данные, лежащие где-то в неподконтрольном мне облаке, хранятся безопасно.

Вы специалист по СКЗИ и обладаете навыком анализа криптоалгоритмов на уязвимости? Завидую по белому. Моих навыков хватает только на то, чтобы проверить что вроде бы алгоритм имплементирован без явных закладок и не более. Пускай даже я точно знаю, что алгоритм имплементирован без закладок и ошибок. Но вот точно знать, что в алгоритме нет ошибок и уязвимостей мне не дано :(
0
ababo #
Я точно не специалист, но если исходники будут открыты, велика вероятность, что кто-то из сообщества найдёт закладку. По крайней мере будут стабильные проверенные версии исходников с хешами, которые не вызывают нареканий у сообщества уже несколько месяцев. И этому можно будет доверять.
0
VolCh #
Доверять, но не точно знать.
0
ababo #
Ну то что земля круглая мы тоже точно не знаем, просто доверям и это даёт положительные результаты на практике.
+12
simbajoe #
Здорово, что интерфейс не гуёвый!
+2
maxp #
Яндексу большой плюс за такой поворот событий!

Например, я теперь вполне реально рассматриваться, как альтернатива Дропбоксу.

По поводу GUI выскажусь «за», не смотря на то, что «гикам достаточно консоли».
Да, действительно достаточно, но что-то подобное в трей, как у того же Дропбокса совсем не помешало бы.

А для «не гиков» это просто глоток свежего воздуха.
0
konkere #
У дропбокса демон вполне себе с иконкой в области уведомлений, например.
+1
maxp #
Вот я как раз про то же.

Но возможность запуска голой консоли на какой-нибудь впске без гуя тоже очень важна.

В общем, это два важных фактора.
–2
ErgoZru #
у меня яндекс диск подключен уже наверное пол года (как и некоторые другие хранилища), как бы davfs никто не отменял. Поэтому не вижу смысла менять шило на мыло.
–10
sam002 #
11 метров, а проект минимум от 19 июня начат, да ещё и unstable. Скажите честно, это кто-то из сотрудников в свободное время сделал?
+5
marcel #
Яндекс.Диск для Linux такой же полноценный клиент с точки зрения разработки, развития и поддержки, как остальные наши десктопные клиенты.
0
mudasobwa #
Да ну? А сроки выпуска — они давно не входят в равенство приоритетов?
+2
janatem #
Вопрос по клиентскому интерфейсу. Можно ли было его реализовать иначе, с тем чтобы использовать стандартные линуксовые инструменты для виртуальных файловых систем, такие как fuse, и тем самым сделать Яндекс.Диск «прозрачным»? Например, по этому принципу сделаны gmailfs (проект не гугловый и к настоящему времени вроде бы загнулся) и sshfs.

Я понимаю, что самый смак в эффективной и гибкой синхронизации, так что все потроха совсем спрятать от пользователя не удастся. Но можно было бы сделать соответствующий набор утилит (а также атрибуты файлов) опциональным, чтобы для пользователя, который не гонится за эффективностью, Яндекс.Диск был бы полностью изоморфен sshfs.
+2
encyclopedist #
Так Яндекс Диск с самого начала поддерживал WebDAV, с соответственно может быть подмонтирован с помощью davfs, без автоматической синхронизации. (если я правильно понял о чём вы)
0
janatem #
А можно ли управлять синхронизацией поверх davfs? В частности, можно ли скормить ему нетривиальный конфиг-файл?

Насколько я понимаю, сейчас предлагается два варианта использования Яндекс.Диска: с помощью утилиты yandex-disk и через davfs, и они совершенно независимы.
+1
kibergus #
В случае davfs синхронизация не нужна: все обращения идут на сервер. Оно вообще не будет работать без сети и будет медленным. Но зато данные всегда актуальны и это стандартный протокол.
А если есть синхронизация, то надо где-то эти файлы хранить на локальной ФС. зачем тогда городить fuse, если их все равно класть на локальную ФС?
0
janatem #
Насчет davfs я плохо знаю матчасть. Раз с его помощью нельзя локально кэшировать, предыдущий вопрос снимаю.

зачем тогда городить fuse, если их все равно класть на локальную ФС?

Почему «городить»? Как раз fuse тем и хорош, что городить ничего не надо — со стороны выглядит как обычная подмонтированная ФС, все приложения могут работать с файлами, не зная, что они то ли в облаке, то ли в локальном кэше.

И, кстати, неверно, что файлы надо класть на локальную ФС. Кэш может быть устроен сколь угодно хитро, не обязательно в виде доступных пользователю файлов. Для этого и нужна прослойка в виде виртуальной ФС, чтобы сквозь нее казалось, что у нас есть настоящие файлы.

Разумеется, в идеале система, как я ее вижу, должна работать и без сети. Когда говоришь fusermount, должно показываться закэшированное состояние. При этом впоследствии могут возникнуть проблемы синхронизации, если с менять состояние из нескольких разных мест, но это уже универсальная проблема.
+2
kibergus #
Почему «городить»? Как раз fuse тем и хорош, что городить ничего не надо — со стороны выглядит как обычная подмонтированная ФС, все приложения могут работать с файлами, не зная, что они то ли в облаке, то ли в локальном кэше.

Так файлы на ФС тоже выглядят как файлы на обычной подмонтированной ФС. Стороние приложения не знают, что эти файлы синхронизуются.
fuse разве что позволил бы сделать синхронизацию on demand. Приносить новый файл не когда он появился на сервере, а когда приложение захотело его открыть. Но зачем?
И, кстати, неверно, что файлы надо класть на локальную ФС. Кэш может быть устроен сколь угодно хитро, не обязательно в виде доступных пользователю файлов.

Это верно, но нужно ли делать хитроый кэш? Если данные хранятся на диске не в виде доступных пользователю файлов, это всего-лишь значит, что они хранятся в некой самописной ФС, располагающейся в файле. Зачем делать какие-то усложнения и писать свою ФС?
0
ivlad #
подмонтируйте davfs и синхронизируйте туда rsync с каким угодно конфигом.
+2
Dganic #
В Status не хватает отдельной строчки просто с объёмом диска, а ещё хотелось бы команду которая выдает ссылки на все публичные файлы в диске.
0
marcel #
Да, добавим показ объема Диска.
А как вы будете использовать команду, которая выдает ссылки на все публичные файлы в диске? Какой use-case?
0
konkere #
В скриптах, например.
0
Dganic #
для меня было бы вполне достаточно команда которая выводит в консоль, путь относительно каталога синхронизации, название файла, даты, и ссылку, чтобы без труда можно было бы найти нужный фаил и ссылку на него, просто отсортировав тем же grep-ом по нужному параметру.
0
marcel #
Да, хорошая идея.
+1
marcel #
Ой, ну туда ответил. Яндекс.Диск для Linux такой же полноценный клиент с точки зрения разработки, развития и поддержки, как остальные наши десктопные клиенты.
0
konkere #
Репозиторий самопрописывается неправильно. dist.yandex.ru/repo.yandex.ru/yandex-disk/deb/ вместо repo.yandex.ru/yandex-disk/deb
И с socks что-то работать не хочет: Проверка прокси-сервера...Segmentation fault (core dumped)
+2
marcel #
Спасибо, что нашли баг c репозиторием. Уже поправили.
По второй проблеме, пожалуйста, отправьте нам через форму feedback2.yandex.ru/disk/desktop/other/ ссылку в Диске на core dump.
0
konkere #
Пульнул.
+3
powerman #
Было бы неплохо, если бы помимо deb/rpm вы выложили и обычный tgz, и вместо -latest использовали номер версии (а -latest можно и симлинком сделать) — это бы упростило создание пакетов для других дистрибутивов (вроде Gentoo).
0
EvilShadow #
Арчу хватает и deb-пакетов: aur.archlinux.org/packages/yandex-disk/. Gentoo этого недостаточно?
+2
powerman #
При необходимости нужные файлы можно выковырять из чего угодно. На моей машине из 1415 установленных пакетов только один использует .deb и два .rpm в качестве исходников, все остальные — обычные архивы. Был бы tar — я бы может сам ebuild сделал, а так лениво лезть разбираться как правильно работать с deb/rpm в ebuild-ах.

Кроме того есть общепринятые стандарты: должен быть доступен .tar с файлами приложения и README/INSTALL-инструкцией как их устанавливать, это программа-минимум. А предоставить дополнительно готовые пакеты для популярных дистрибутивов — это уже бонус. Более того, учитывая то, что большинство дистрибутивов всё-равно работают со своими репозиториями, и что их разработчики зачастую более корректно соберут пакеты под свой дистрибутив нежели разработчики конкретного приложения, реальная необходимость и польза от этих deb/rpm сомнительна — лучше бы разработчики приложения связались с разработчиками дистрибутивов и добились добавления своего приложения в стандартные репозитории — это было бы гораздо удобнее пользователям, чем скачивать deb/rpm с сайта приложения.
+2
pbashinsky #
+1 за -ver-arch.tar.gz и минимальную документацию как установить и куда багрепортить, и в этом случае попасть во все дистрибутивы поможет комьюнити. Хотя открытость, это тоже немаловажный фактор, кроме вопроса о совместимости лицензий, контрибьюторам прийдется прибивать гвоздями зависимости к библиотекам. Changelog тоже «пустоват», учитывая тот фак, что в комментариях выше речь шла о исправлении некоторых багов. И судя по всему, не должно возникнуть сложности собрать пакет для mac os x, для установки через port.
0
VolCh #
учитывая тот фак, что в комментариях выше речь шла о исправлении некоторых багов.

Живо представил картину — marcel говорит коллегам «Фак — у нас баг» :)
0
pbashinsky #
0
marcel #
Да, tgz будет полезен.
–1
Vasily_Pupkin #
А исходники то где? O_o
+1
savostin #
0
savostin #
Вот только тапками не кидайте:
> rpm -Uvh --nodigest --nosignature http://repo.yandex.ru/yandex-disk/yandex-disk-latest.i386.rpm
...
Missing Dependency: libc.so.6(GLIBC_2.10) is needed by package yandex-disk-0.1.1.279-1.fedora.i386
> uname -a
Linux 2.6.18-348.6.1.el5 #1 SMP Tue May 21 15:34:22 EDT 2013 i686 i686 i386 GNU/Linux
Package glibc-2.5-107.el5_9.5.i686 already installed and latest version

Под CentOS 5.9 не светит?
0
savostin #
Ага, нашел, не светит :(
+2
Zegaldis #
Но лучше бы сделать, 5.9 еще живая как никогда
+1
marcel #
Мы подумаем.
0
savostin #
Подумайте пжалста — обновление на 6-ю версию та еще неприятность — никак не решусь.
+2
amarao #
Теперь поверх этой штуки спокойно прикручивается encryptfs и отличный синкер. Кстати, можно писать даже не на эту fs, а синкать зашифрованный home (в шифрованном виде).

Попробую на днях, оценю.
+1
bezgubov #
Чтобы ставить и потом обновлять через apt-get можно прописать в /etc/apt/sources.list

#Yandex-disk
deb repo.yandex.ru/yandex-disk/deb stable main

Кто-нибудь знает как добавить ключик, чтобы не получать такую ошибку при обновлении списка пакетов?

$ apt-get update
Get:1 repo.yandex.ru stable Release.gpg [490 B]

W: GPG error: repo.yandex.ru stable Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY EFC4571D7C90E5AF
+4
animasola #
Импорт GPG-ключа для пакета .deb
wget -O YANDEX-DISK-KEY.GPG repo.yandex.ru/yandex-disk/YANDEX-DISK-KEY.GPG
sudo apt-key add YANDEX-DISK-KEY.GPG

Подробнее можно почитать в нашей Помощи —  help.yandex.ru/disk/cli-clients.xml#cli-install
0
bezgubov #
хм, что-то у меня dist.yandex.ru добавился, это же вроде внетренний ресурс?

Err dist.yandex.ru stable Release.gpg
Could not connect to dist.yandex.ru:80 (84.201.156.230). — connect (110: Connection timed out)
Ign dist.yandex.ru stable Release
Ign dist.yandex.ru stable/main TranslationIndex
Err dist.yandex.ru stable/main amd64 Packages
Unable to connect to dist.yandex.ru:http:
Err dist.yandex.ru stable/main i386 Packages
Unable to connect to dist.yandex.ru:http:
Err dist.yandex.ru stable/main Translation-en
Unable to connect to dist.yandex.ru:http:
Err dist.yandex.ru stable/main Translation-ru
Unable to connect to dist.yandex.ru:http:
Fetched 4997 B in 1min 3s (79 B/s)
W: Failed to fetch dist.yandex.ru/repo.yandex.ru/yandex-disk/deb/dists/stable/Release.gpg Could not connect to dist.yandex.ru:80 (84.201.156.230). — connect (110: Connection timed out)

W: Failed to fetch dist.yandex.ru/repo.yandex.ru/yandex-disk/deb/dists/stable/main/binary-amd64/Packages Unable to connect to dist.yandex.ru:http:

W: Failed to fetch dist.yandex.ru/repo.yandex.ru/yandex-disk/deb/dists/stable/main/binary-i386/Packages Unable to connect to dist.yandex.ru:http:

W: Failed to fetch dist.yandex.ru/repo.yandex.ru/yandex-disk/deb/dists/stable/main/i18n/Translation-en Unable to connect to dist.yandex.ru:http:

W: Failed to fetch dist.yandex.ru/repo.yandex.ru/yandex-disk/deb/dists/stable/main/i18n/Translation-ru Unable to connect to dist.yandex.ru:http:

E: Some index files failed to download. They have been ignored, or old ones used instead.
0
konkere #
Я выше писал, они репозиторий неправильно прописывали.
+3
Andruh #
Супер! По описанию, клиент сделан умно и очень верно. Код тоже интересно было бы увидеть. У меня есть немного вопросов по реализации, если можно:
1. Так ли нужны strand-ы? У меня стойкое ощущение, что можно было бы обойтись одним потоком, обслуживающим boost::asio::io_service — код, думаю, проще без strand-ов. Нагрузка на процессор там минимальная, OpenSSL хеши считает очень быстро.
2. boost::asio подразумевает массированное использование callback-ов. Боролись ли вы с этим, не было ли попытки использовать корутины, чтобы асинхронный код выглядел последовательным, а не разорванным на несколько callback-ов?
3. Сколько человековремени ушло на разработку клиента?
Спасибо.
0
marcel #
1. У нас много потоков. Strand'ы позволяют нам упростить синхронизацию, сделать ее более прозрачной.
И такая система проще масштабируется.
2. Нет, не использовали. Собираемся посмотреть на них. Мы использовали имеющееся ядро синхронизации от десктопных приложений, которое было написано на версии Boost, где еще не было корутинов.
0
Lorien_Elf #
Огромное спасибо!

А почему Диск не хочет использовать системные переменные для прокси-сервера и ему их надо кормить отдельно? Тем же грешит и виндовый клиент. Для меня очень неудобно — я часто катаю ноутбук по разным заказчикам, у всех разные настройки прокси.
+1
marcel #
Резонное замечание. Так и надо делать. :)
+6
mifistor #
Раз уж клиент консольный, то пожалуй стоит добавить к посту установку для ленивых пользователей Ubuntu. Ниже приведенная цепочка команд добавит репозиторий Яндекса в список источников, скачает и установит GPG ключ от яндекса, обновит список пакетов и без лишних вопросов поставит консольный клиент:

echo "deb http://repo.yandex.ru/yandex-disk/deb/ stable main" | sudo tee -a /etc/apt/sources.list.d/yandex.list > /dev/null && wget http://repo.yandex.ru/yandex-disk/YANDEX-DISK-KEY.GPG -O- | sudo apt-key add - && sudo apt-get update && sudo apt-get install -y yandex-disk
0
marcel #
Спасибо, добавим в Help. Будет полезно для очень ленивых людей. :)
+1
Glebcha #
Позволю себе озвучить мечты:

— хранение конфигов десктопных версий для каждой платформы в своем аккаунте (чтобы если вдруг не задумался о переезде на новый компьютер, то смог бы из веб интерфейса скачать установочный пакет конфига, который разложит все по местам или пакет клиента с интегрированными конфигами для соответствующей платформы);

— перетаскивание на иконку в трее для расшаривания и/или виджет;

— анализ текущего контента в Яндекс.Диске (по типу, размеру и так далее) и хотя бы жуть какой примерный прогноз в веб-интерфейсе и в виде уведомления (например «вам хватит места еще на 100 документов»);

— совместное редактирование документов (а вдруг, тогда бы это стало решающим аргументом в моем переходе с гуглосервисов);

— определение категорий и расшаривание любой категории с ассоциированным контентом в один клик (например все текстовые файлы в категории документы я расшариваю для того, чтобы все ознакомились с документацией по проекту).

Мечты конечно, ну а вдруг что-то реализуете.
0
marcel #
Да, хорошие мечты. Правильно ли я понимаю, что большая часть все таки про GUI для Linux?
+1
Glebcha #
Про трей можно применительно и к OS X. Также хотелось бы иметь возможность ставить цветовые метки и определять приватные группы (один раз отправляю из приложения приглашения всем кому надо из соц. сетей или по почте, а потом они имеют доступ к открытым для них файлам).
К веб-интерфейсу большая просьба добавить возможность оставлять комментарии с уведомлениями, например «фотографии печенья с шоколадом маленького размера нам больше не нужны, можешь удалять из исходников».
Немного разошелся в мечтаниях)
+1
moscow_beast #
Раз уж клиент консольный, неплохо-бы автокомплит прикрутить, как у git'а и других. Или можно самому что-нибудь сколхозить?
0
Mezomish #
Думаю, можно поковырять в этом направлении.
0
marcel #
Да, не плохо было бы. Следите за обновлениями на repo.yandex.ru/yandex-disk.
0
ParkeTg #
Возник следующий вопрос. Вот допустим я загружаю файл на сервер. Синхронизирую, он появляется в моей yandex-папке. Далее, я его из этой папки удаляю. На сервере он все еще есть, и удалится только после очередной синхронизации, но, допустим, я передумал, и хочу синхронизироваться таким образом, чтобы файл снова появился в папке. Как этого добиться?

yandex-disk sync --overwrite

Не помогает, причем мало того, после такой синхронизации файл также удаляется с сервера.

Ну, и поделюсь своим PKGBUILD, для Арчеводов.
PKGBUILD
pkgname=yandex.disk
pkgver=0.1.1.279
pkgrel=1
pkgdesc="Yandex.Disk console client."
url=http://disk.yandex.ru/
arch=(x86_64 i386)
makedepends=(binutils coreutils)
license=(custom)

if test "$CARCH" == x86_64; 
then
  ARCHT="amd64"
else
  ARCHT="i386"
fi

source=("http://repo.yandex.ru/yandex-disk/yandex-disk_latest_$ARCHT.deb")
md5sums=('e795bb2d91259eada77c746ceb26a9f3')
 
build() {
	tar xf data.tar.gz	
}
package() {
	mv usr/ $pkgdir
}



0
ParkeTg #
Прошу меня извинить, в выложенном PKGBUILD сумма посчитана только для amd64 пакетов.
Поправил:
PKGBUILD
pkgname=yandex.disk
pkgver=0.1.1.279
pkgrel=1
pkgdesc="Yandex.Disk console client."
url=http://disk.yandex.ru/
arch=(x86_64 i386)
makedepends=(coreutils tar)
license=(custom)

if test "$CARCH" == x86_64;
then
  ARCHT="amd64"
  md5sums=('e795bb2d91259eada77c746ceb26a9f3')
else
  ARCHT="i386"
  md5sums=('c8ca93e7ae951db2601074336a4c7563')
fi

source=("http://repo.yandex.ru/yandex-disk/yandex-disk_latest_$ARCHT.deb")

build() {
        tar xf data.tar.gz
}
package() {
        mv usr/ $pkgdir
}


0
Kolonist #
В AUR уже есть пакет. Единственное, там ссылка не на последнюю версию, так что надо вручную поправить PKGBUILD при установке.
0
ParkeTg #
Посмотрел, и правда есть. Я какой-то не внимательный последнее время, перед тем, как писать свой PKGBUILD, глядел же в AUR.
0
marcel #
Правильная команда такая: yandex-disk sync --read-only
0
ParkeTg #
ЧЯДНТ
[svon@arch Ydisk]$ cat ~/.config/yandex-disk/config.cfg | grep dir
dir="/home/svon/Ydisk"

[svon@arch Ydisk]$ pwd
/home/svon/Ydisk

[svon@arch Ydisk]$ ls
1.jpg  1.png  arch_wallpaper0.png  IMG_29082013_032219.png  

[svon@arch Ydisk]$ rm 1.jpg 

[svon@arch Ydisk]$ ls
1.png  arch_wallpaper0.png  IMG_29082013_032219.png 

[svon@arch Ydisk]$ yandex-disk sync --read-only
Starting daemon process...Done
Syncing directory: /home/svon/Ydisk
Directory synced                                      

[svon@arch Ydisk]$ ls
1.png  arch_wallpaper0.png  IMG_29082013_032219.png  




Демон не поднят. Синхронизирую вручную.
+2
Imhotep #
Спасибо за клиент, вещь нужная. Скажите пожалуйста, а нет в планах сделать сохранение даты изменения файлов? Сейчас с удобством было синхронизировал файлы на двух машинах, но заметил, что даты не сохранились.
0
marcel #
Мы думаем над этим.
+1
bo883 #
а я рад что консольный клиент, огромное спасибо вам. Я люблю консоль.
0
emagdnim #
Простите за откровенно ламерский вопрос. А как ему скормить папку YandexDisk ранее созданную в винде? Указываю в настройках путь к этому каталогу, а апплет не желает его есть, создавая копию папки с названием yandexdisk (маленькие буквы) и копируя туда содержимое с облака.
0
marcel #
Покажите, пожалуйста, конфиг (если настроено через setup) или командную строку. Можно прислать это в службу поддержки feedback2.yandex.ru/disk/desktop/other/.
+1
Borro #
А для FreeBSD будет пакет?
0
marcel #
Пока не думали об этом.
0
alex_www #
Как из консоли увидеть ссылки на опубликованые файлы?
0
marcel #
Сейчас список вывести нельзя. Но можно второй раз опубликовать, тогда ссылка не изменится и выведется в консоль.
0
alex_www #
Очень логично было бы если можно.
0
ParkeTg #
Как вариант — завести специальную папку ( например с именем public ).
Тогда ссылки на файлы внутри этой папки можно получить вот так:

(DIR=$(cat ~/.config/yandex-disk/config.cfg | awk '/dir/{split($0, a, "="); gsub("\"","",a[2]); print a[2]}'); for i in $DIR/public/*; do echo $(basename $i); yandex-disk publish $i | grep -E "^http"; echo ""; done;)


Это однострочный скрипт для bash. Можно выполнять из любой папки. Выводит сслыки на файлы в папке public, которая расположенна в яндекс-папке текущего пользователя.
Внимание, наличие папки public не проверяется.
0
alex_www #
Очевидные недостатки это скрипта думаю понятны и Вам. Не то что бы критично, но хочется официального решения. По правде говоря публичными ссылками как-то не пользуюсь — по-страринке шлю pdf атачами. Но если бы был такой функционал, слал бы просто ссылки. Важно именно иметь одну и ту же ссылку, потому что репаблиш делает старую неактивной.
0
ParkeTg #
Конечено понятны. И я так же понимаю, что официальное решение было бы предпочтительней, но на безрыбье и рак рыба. Если хорошенько подумать, можно написать строчку чуть посложнее, которая будет решать уже большинство проблем.

Если я правильно понял, то репаблиш не делает старую неактивной. В случае, если файл уже и так на я-диске и публичен просто выводится ссылка на него.
+3
ilembitov #
О, а раз он весь такой гиковый и консольный, то, может, и под ARMv5/ARMv6 скомпилите? Чтобы можно было юзать на всяких Raspberry Pi и NAS-ах?
0
marcel #
Вот здесь отвечал на все вместе.
+1
starius #
Нужная вещь для бекапов. Похоже на клиент для Dropbox. WebDAV неудобно для этого использовать, особенно с дурным каналом.

Раньше на Яндекс.Диск запрещалось выкладывать архивы и зашифрованные файлы. Сохраняется ли это ограничение сейчас? Выше собираются использовать encfs + Яндекс.Диск. Не против ли Яндекс? Что будет, если зарегистрировать 100 аккаунтов и получить таким образом бесплатно хранилище в 1ТБ? Ещё и клиент адаптировать, чтобы сам раскидывал данные по разным аккаунтам.

Я бы хотел сам собрать клиент из исходников, благо все используемые библиотеки есть. Планируется ли публикация исходного кода клиента?
0
animasola #
В настоящий момент нет ограничений на хранение зашифрованных данных. Подробнее, можно почитать в Условиях использования Диска.
По поводу исходников было выше обсуждение.
+2
Cord #
Вот это реально ШАГ.
Красавцы
+3
ValdikSS #
0
Angel2S2 #
Команда exclude позволит исключить папку из синхронизации...
$ yandex-disk exclude
Ошибка: неизвестная команда 'exclude'

Что-то тут не так…

$ yandex-disk -v
Яндекс.Диск 0.1.1.281
–1
Angel2S2 #
Хотя есть опция --exclude-dirs=DIR1,DIR2.
Поправьте в посте.
0
RaJa #
А под Windows не планируете сделать поддержку хардлинков и симлинков? Skydrive вот поддерживает и это удобно, потому что структуру папок перетаскивать из разных мест файловой системы в папку Яндекс диска неудобно, но сам яндекс-диск нравится и пользуюсь. Вот если бы он синхронизировал содержимое созданных в папке яндекс-диска линков, то это было бы замечательно.
0
marcel #
Исследуем этот вопрос.
0
RaJa #
Будем ждать :)
+1
nikonor #
Если нет исходников, то может быть как-то можно получить бинарники под МакОС? Было бы очень круто.

Место в верхнем меню освободить никогда не мешает.
0
marcel #
В настоящий момент такой сборки нет.
0
freude #
Удобная должно быть вещь, надо будет попробовать. Во всяком случае у меня потребность в консольном клиенте есть. Я до этого вот этим пользовался dropbox+python
+1
aim #
GUI не нужен. нужна интеграция с основными файловыми менеджерами — thunar, nautilus, dolphin. что там ещё?
0
Grawl #
Советую образаться к ребятам, которые выкладывают расширения на сайты вроде opendesktop.org.
0
TL1 #
Молодцы, что ещё сказать. Теперь начну пользоваться ;-)

Добавьте ещё +1 за GUI. Как минимум, в нотификационной области должно быть видно состояние синхронизации (не идёт, идёт, нет связи, место кончилось) и состояние места.
0
KorP #
Когда же уже исходники то появятся? Я с gentoo негодую :(
0
wolandtel #
Огромное спасибо. Никогда ещё удалённое хранилище не было таким удобным.
0
Blekel #
а нет ли проблем с работой на NTFS-разделах?

например, у меня данные Я.Диска находятся на разделе, общем для Windows и Linux, и сначала все было ОК, но с каких-то пор процесс при запуске start или sync начал бесконечно молотить (вроде на одном ядре ЦП) совместно с /sbin/mount.ntfs, без использования сети.
пробовал заново синхронизировать в чистую папку — то же самое.
в каком логе можно посмотреть, что он вообще делает?

вывод strace: pastebin.com/iBtrt0AH
0
wolandtel #
Кстати, регулярно падает на одной из машин. Подозреваю, что из-за симлинков.
0
007 #
Только что поставил, Ubuntu 13.04.4 x64 — через несколько часов ест 5,2 гигабайта оперативной памяти (всего 8 RAM и система стала тормозить) — я папку для синхронизации такого размера и поставил. CPU ~ 130% ядра.
0
deex #
Как можно вызвать клиент из python-скрипта, запущенного как cgi?

Питон с помощью subprocess пытается выполнить:
yandex-disk publish --dir=/home/user/yadisk/ --auth=/home/user/.config/yandex-disk/passwd /home/user/yadisk/README.txt

если запускать python-скрипт из баша — получаем ссылку на опубликованный файл.

Если же скрипт запущен как cgi апачем от того же юзера:

Error: failed to connect to daemon process

Не понимаю, что ему мешает подключиться к демону?
Может логи где-то есть с более подробной информацией об ошибках?
+1
bezumkin #
Очень удобный и хороший клиент, но есть 2 замечания:

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

2. Очень нужна возможность синхронизировать только определенные директории, а не исключать все остальные.

У меня в корне Диска лежит дескколько директорий: Backup, Изображения, Загрузки и т.д. Синхронизировать с сервером мне нужно только Backup/Server1, и получается, что я должен перечислить все остальные в exclude-dirs:
exclude-dirs="Изображения/,Загрузки/,Backup/Server2/,Backup/Server3/, и т.д."

Выходит, что если я добавлю еще какие-то директории, то нужно бежать на все серверы и исключать их из конфига, иначе они будут выгружаться. Это очень неудобно.
0
volos #
установил клиент. Настроил.
Изменения которые вношу через веб-интерфей, мгновенно появляются на пк. Если делаю изменения на ПК (добавляю новые файлы или папки) — ничего не меняется, команда status показывает, что всё синхронизировано.
Что я делаю нет так?

тех инфа
volos@ubuntu-35:~/Yandex.Disk$ yandex-disk -v
Yandex.Disk 0.1.4.504
© 2013 YANDEX
volos@ubuntu-35:~/Yandex.Disk$ uname -a
Linux ubuntu-35 3.5.0-25-generic #39~precise1-Ubuntu SMP Tue Feb 26 00:07:14 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux


0
ConstSe #
Вы бы еще рассказали, как корзину Яндекс-диска из консоли очистить — вообще бы цены не было.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.