Pobawiłem się odrobinę Ubuntu One - usługą synchronizacji plików autorstwa firmy Ubuntu, którą od wersji 9.10 swojej dystrybucji domyślnie instalują.
W największym skrócie: Dropbox to nie jest i jeśli komuś zależy na wygodnej i efektywnej synchronizacji plików, nadal polecam Dropboksa. Widać też, że Ubuntu One to wczesne i trochę jeszcze niedopracowane oprogramowanie. Ale jest w nim parę ciekawych elementów.
Co to jest
Ubuntu One jest usługą synchronizacyjną.
Podstawą jest synchronizacja plików: wszystkie dane umieszczone w
zadanym katalogu (domyślnie ~/Ubuntu One
) są synchronizowane z
serwerem Ubuntu a także z innymi podpiętymi do tego samego konta
komputerami.
Na doczepkę zawartością katalogu można zarządzać (włącznie z ściąganiem i wgrywaniem plików) przez przeglądarkę WWW, dzięki czemu można się do nich dostać także z innych niż Ubuntu systemów operacyjnych.
Protokół wygląda na otwarty. Wraz z graficznym klientem instalują się biblioteki klienckie a także programy command-line. Nieco więcej o nich - niżej.
Ubuntu One na tym się jednak nie kończy, wyraźnie dążąc także do obsługi synchronizacji danych na poziomie konkretnych aplikacji. W tej chwili można synchronizowac kontakty z evolution, zakładki a także notatki Tomboya (potencjalnie bardzo cenna funkcja, czyniąca z tak synchronizowanego Tomboya konkurencję dla sieciowych notesów, osobistych wiki czy nawet list zadań).
Instalacja
Po upgrade do Ubuntu 9.10 graficzny klient Ubuntu One jest
domyślnie zainstalowany (są to pakiety ubuntuone-client
oraz
ubuntuone-client-gnome
). Uruchomić go można z menu
(Programy/Internet/Ubuntu One) albo poleceniem
ubuntuone-client-applet
.
Na pasku pojawia się ikonka rozłączonego dysku, równocześnie w przeglądarce WWW zostaje otwarta strona logowania Ubuntu One, wymagająca posiadania konta na Launchpadzie (developerskim serwerze Ubuntu).
Zakładania konta opisywać nie będę, swoje założyłem dość dawno przy okazji zgłaszania błędów.
Ciekawostka: logowanie do Ubuntu One odbywa się przy pomocy OpenID (ale musi być to OpenID z launchpada, nie znalazłem możliwości użycia własnego).
Launchpadowego OpenID można za to używać do logowania na dowolne serwisy obsługujące taką formę logowania (np. autoryzować się launchpadowym hasłem na stackoverflow czy osnews). Aby sprawdzić swoje id trzeba wejść na launchpad.net, zalogować się i kliknąć swój pseudonim w prawym górnym rogu strony. Zostanie wyświetlona formatka danych konta zawierająca min. pole OpenID login. Tą wartość wpisujemy jako swój identyfikator.
Na jednej z maszyn miałem z powyższym ekranem problem - po każdym zatwierdzeniu pojawiał się ponownie. Jak się okazało, winne było ustawienie plików cookie, które akceptowałem tylko z odwiedzanego serwisu. Po włączeniu zgody na wszystkie cookie autoryzacja przebiegła poprawnie.
Następny krok - upoważnianie klienta (komputera) do dostępu do sieciowego dysku Ubuntu One - także odbywa się przy pomocy standardowego protokołu: OAuth.
Poza estetyką ma to rozwiązanie praktyczną zaletę: podłączające się komputery nie muszą zapisywać launchpadowego hasła a jedynie autoryzacyjny token OAuth. Dlatego by taki dostęp odebrać (np. po zgubieniu netbooka) wystarczy w webowym interfejsie usunąć upoważnienie dla danego komputera (odpowiednia lista jest w zakładce Account). Nie ma potrzeby zmieniania hasła, nie ma potrzeby rekonfigurowania innych podłączonych maszyn.
Dodatkowo, na maszynie klienckiej ów token zapisywany jest w bazie kluczy (zabezpieczonej hasłem logowania). To akurat sprawia pewne problemy (konsolowy klient odpalany przez ssh nie może się do bazy kluczy dostać, ogólnie - całość jest ściśle związana z uruchomionym GNOME).
Na koniec trzeba jeszcze kliknąć Połącz (albo w menu kontekstowym
apletu albo w nautilusie wyświetlającym zawartość
katalogu ~/Ubuntu One
).
Uwaga: aplet ma dwa menu, jedno otwierane lewym klawiszem myszy (łączenie/rozłączanie) a drugie prawym (preferencje, otwarcie strony webowej, zakończenie). Niewygodne i mylące.
Używanie
Po skonfigurowaniu, po prostu korzystamy z synchronizowanego
katalogu - kopiując doń pliki, edytując je bezpośrednio itp.
Aplet od czasu do czasu sygnalizuje przeprowadzanie synchronizacji.
Poprawnie wykrywane są zarówno operacje w nautilusie, jak konsolowe
(pliki tworzone cp
czy edytowane vi
też są poprawnie kopiowane).
Można się też rozłączyć (czy to explicite, klikając opcję Rozłącz, czy to odpinając się od sieci), wszystkie dane pozostają i można ich używać, synchronizacja nastąpi po powtórnym połączeniu.
Niestety ... działa to kapryśnie. W ciągu paru godzin używania kilkakrotnie musiałem klikać Rozłącz i Połącz by wymusić synchronizację, która sama z siebie nie chciała nastąpić. Mam też wrażenie, że synchronizacja w ogóle nie działa gdy desktop jest zablokowany. Robiłem prosty eksperyment (oba komputery z podłączonym, działającym Ubuntu One synchronizowanym z tym samym kontem):
- blokowałem ekran na desktopowym komputerze (Zablokuj ekran),
- przesiadałem się na laptopa,
- logowałem się z laptopa na desktop po ssh,
- tworzyłem (na zablokowanym desktopie) plik w katalogu Ubuntu One.
Mimo kilkunastu minut oczekiwania plik ten nie został zsynchronizowany na laptopa ani na serwer Ubuntu. To samo w drugą stronę - pliki stworzone na laptopie poprawnie pojawiły się w interfejsie webowym ale nie pojawiły się na desktopie. Nie mam pewności, czy chodzi tu o blokadę ekranu, może za krótko czekałem albo brak synchronizacji wynikał z jakichś błędów ale mimo paru prób nie udało mi się zobaczyć udanej synchronizacji w tych warunkach. A obrazki parę godzin temu wrzucone na laptopa (i widoczne także w interfejsie webowym czyli obecne na serwerze Ubuntu) ciągle na zablokowany desktop nie trafiły.
Dla porównania: pliki wrzucone do katalogu Dropboksa zsynchronizowały się (w obie strony) w przeciągu sekundy.
Zresztą, Dropbox góruje zdecydowanie też samą szybkością synchronizacji, tak po zalogowaniu (notyfikację o zakończeniu synchronizacji danych dropboksowych oglądam zazwyczaj jeszcze zanim aplet Ubuntu One w ogóle zdoła się uruchomić) jak w trakcie pracy.
Jest też gruba różnica funkcjonalna - Ubuntu One nie obsługuje wersjonowania plików, pamięta tylko ostatnią, najnowszą wersję. Przypomnę, że Dropbox przechowuje historię zmian i pozwala odzyskać starszą wersję (np. po przypadkowym skasowaniu lub uszkodzeniu pliku).
Udostępniania plików innym nie testowałem.
Ustawienia
Ubuntu One ma okienko preferencji - standardowo uruchamiane z
kontekstowego menu apletu, jeśli tej nie widać, dostępne w formie
polecenia ubuntuone-client-preferences
.
Jest mało frapujące:
O ile ograniczanie pasma może mieć czasami sens, o tyle pozostałe dwie opcje uważam za zwyczajnie zbędne. Zagadkę co oznacza pamiętaj ostatni stan w ustawieniu czy łączyć po zalogowaniu pozostawię czytelnikom, za to ikona na pasku, choć chciałem by się pokazywała zawsze, jest wyjątkowo kapryśna i nieraz już mi znikała.
Brakuje tu za to konfigurowania częstotliwości synchronizacji, nie ma też opcji zmiany lokalizacji synchronizowanego katalogu.
To ostatnie próbowałem ćwiczyć (nazwa Ubuntu One
nie trafiła mi do
przekonania), zakładając katalog gdzie indziej, kopiując dotychczasową
zawartośc i przerabiając Ubuntu One
na symlink do właściwej
lokalizacji. Uruchomiony aplet sobie z tą sytuacją nie poradził, po prostu
przestał działać nie sygnalizując błędów (musiałem go ubić i uruchomić
ponownie), co więcej - po ponownym uruchomieniu musiałem od nowa
przejść proces autoryzowania komputera, który pojawił się na liście
maszyn z nowym, innym haszem (dodatkowy ciąg cyfr identyfikujący
udział).
Później odkryłem inną, sensowniejszą metodę (której jednak już
nie ćwiczyłem). W pliku /etc/xdg/ubuntuone/syncdaemon.conf
jest między innymi ustawienie:
root_dir.default = ~/Ubuntu One
Nie próbowałem zmieniać, z default wnioskuję, iż trzeba by to zrobić przed pierwszym uruchomieniem apletu (na danym koncie).
Plik
syncdaemon.conf
jest dość interesującą lekturą. Wygląda na to, że można tam zhardcodować dane autoryzacyjne OAuth (obchodząc w ten sposób konieczność używania bazy kluczy i być może zyskując możliwość używania Ubuntu One w bardziej serwerowych zastosowaniach) - patrz parametroauth.metavar
. Widać też dużą ilość ustawień debuggingowych (kilka rodzajów logów, profiling, monitor zużycia pamięci) - wyraźny ślad intensywnych prac developerskich.
Poza środowiskiem graficznym
Po zainstalowaniu pakietu ubuntuone-client-tools
:
$ sudo apt-get install ubuntuone-client-tools
pojawiają się programy u1sync
oraz u1sdtool
. Dokumentacja w formie
stron man jest dość szczątkowa ale ten pierwszy wygląda na narzędzie
do aktywowania synchronizacji na dowolnie wybranym katalogu i - być
może - jej używania bez GUI (tu pasuje też realizujący podstawową funkcjonalność
ubuntuone-syncdaemon
- aplet jest tylko nakładką monitorującą jego działanie).
Nie będąc pewny co i jak ma tu działać, bałem się wykonywać przy
pomocy u1sync
i u1sdtool
aktywne operacje, pasywne
(--list-shares
itp) natomiast albo niczego nie znajdowały albo
zgłaszały błędy. Trzeba poczekać ale widać, że narzędzia
konsolowe także mają być rozwijane.
Wreszcie, elementem instalacji są także biblioteki -
python-ubuntuone-client
oraz python-ubuntuone-storageprotocol
.
Daje to pewne nadzieje na pisanie alternatywnych programów
klienckich czy - szerzej - nietypowe zastosowania Ubuntu One.
Jak już z powyższego można się domyślić, Ubuntu One jest
zaimplementowane w Pythonie (nawet aplet jest aplikacją Pythonową -
pygtk
, tylko dodatek do nautilusa jest biblioteką dzieloną). Dla
mnie szczególnie interesująca jest następujący wiersz kodu:
from twisted.internet import gtk2reactor
Tak, mamy tu aplikację zrobioną w parokrotnie przeze mnie wspominanym frameworku Twisted.
Może być to interesujący kod do poczytania (ech, w wolnej chwili).
Konflikty
Ze względu na opisywany wyżej problem opóźniającej się synchronizacji miałem kłopot z pełnym przetestowaniem konfliktu, czyli równoczesnej edycji tego samego pliku na dwóch maszynach. Zdecydowałem się na wariant uproszczony, tj. test konfliktu między lokalną edycją a uploadem do interfejsu webowego. W tym celu:
- stworzyłem nowy plik w katalogu Ubuntu One i poczekałem, by się zsynchronizował (weryfikując jego obecność w interfejsie webowym),
- rozłączyłem Ubuntu One (odpowiednią opcją w menu apletu),
- przeedytowałem ten plik na jeden sposób (na boku) i wgrałem via interfejs webowy przy pomocy opcji Upload (i zweryfikowałem, że wgrał się poprawnie),
- podedytowałem ten sam plik w katalogu Ubuntu One,
- połączyłem Ubuntu One z powrotem.
Efekt? Nie było żadnej informacji o konflikcie, wygrała ta druga
wersja (prawdopodobnie dlatego, że była późniejsza). Niedobrze.
Przypomnę, że Dropbox w takiej sytuacji tworzy kopię (moj_plik
(ramanujan's conflicted copy 2009-11-10).txt
), pozwalając obejrzeć
oba pliki i w ten czy inny sposób rozwiązać problem bez utraty danych.
Planowałem jeszcze inne próby (np. skasowanie pliku z jednej i edycja z drugiej strony) ale jak widać Ubuntu One w ogóle nie próbuje sobie z konfliktami radzić.
Przy próbie ściągania plików interfejs webowy wielokrotnie traktował mnie następująco:
Problem dotyczy chyba tylko ściągania, przy innych operacjach błędów nie widziałem. Za to przy download jest bardzo częsty, zwłaszcza późnym wieczorem (prawdopodobnie czas większej aktywności użytkowników w USA).
Synchronizacja notatek
Dla odmiany spróbowałem synchronizacji notatek Tomboya - potencjalnie najbardziej dla mnie interesującej funkcji (obecnie używam trochę Zima ale Tomboy z synchronizacją byłby poważną konkurencją).
Proces konfiguracji to po prostu:
- uruchomienie Tomboya (Programy/Akcesoria/Notatnik Tomboy),
- wybranie Preferencje z kontekstowego menu jego ikony,
- wybranie w zakładce Synchronizacja opcji Tomboy Web i zachowanie domyślnie podsuwanego adresu
https://one.ubuntu.com/notes
, - przejście w przeglądarce akceptacji dostępu OAuth (tu z niewiadomych powodów nie jest, jak to było przy plikach, podsuwana nazwa maszyny).
Zrzuty wszystkich ekranów po kolei są na stronie tutoriala.
W tym wypadku nie ma automatycznej synchronizacji. Robimy ją explicite, wybierając z menu Tomboya (prawy klawisz na ikonce apletu) opcję Synchronizuj. Pojawia się okienko z informacją o trwającym kopiowaniu a następnie podsumowanie.
Oczywiście mamy tu tylko synchronizację Tomboya z aktualnie używanej maszyny z notatkami na serwerze, by zsynchronizować innego Tomboya musimy powtórzyć operację na tamtej maszynie.
Pod spodem jest to API.
Notatki można edytować także bezpośrednio w webowym interfejsie. Jest dość spartański (nie ma żadnego wyszukiwania w notatkach czy ich organizacji) ale tekst pojedynczej notatki edytuje się dość poręcznie.
Także tutaj nie ma żadnego rozwiązania ewentualnych konfliktów, późniejsza zmiana wygrywa.
Dopisek po dłuższych testach: interfejs webowy nie obsługuje notatników (Tomboyowych kontenerków do grupowania notatek) - w ogóle nie ma w nim takiego pojęcia. Między komputerami notatniki synchronizują się poprawnie.
Synchronizacja kontaktów z evolution i zakładek firefoksa
Na zabawę tymi funkcjami nie znalazłem na razie czasu - zresztą, problem synchronizacji zakładek rozwiązałem w sposób, z którego jestem bardzo zadowolony.
Ciekawostka techniczna: w ramach mechanizmu do synchronizacji kontaktów pojawia się nazwa CouchDB. Mamy tam tak naprawdę lokalną implementację książki adresowej w lokalnym CouchDB i synchronizację tego ostatniego z serwerem Ubuntu. Smakowite, bardzo mnie ciekawi, jak efektywnie będzie to działało.
CouchDB jest używane w Ubuntu One szerzej, także przy przechowywaniu plików czy notatek ale w przypadku kontaktów (a chyba także zakładek) jest najbardziej widoczne.
Podsumowanie
Ubuntu One nie stanowi w tej chwili - jako narzędzie synchronizacji plików - żadnej konkurencji dla Dropboksa. Ustępuje mu wszystkim - funkcjonalnością, wydajnością, niezawodnością, jakością interfejsu (nie wspominając już o przenośności). Jest to ewidentnie produkt w fazie beta i wiele pracy trzeba włożyć by dogonił konkurencję (nie tylko Dropboksa, przyzwoitych sieciowych dysków jest wiele). Sama preinstalacja to mało, zresztą - aktywacja wymaga rejestracji na launchpadzie, przejścia logowań OpenID i OAuth, w efekcie ... uruchomienie preinstalowanego Ubuntu One wymaga więcej klikania niż zainstalowanie Dropboksa.
Większe perspektywy widzę dla Ubuntu One w obsłudze synchronizacji danych aplikacji - czego zaczątkiem są opisywane notatki, zakładki czy kontakty (i co w wielu wypadkach wymaga granulacji na poziomie rekordów/elementów a nie całych plików). Tutaj wymagana jest ścisła integracja z desktopem (i wiedza co na nim działa) i trudno byłoby komukolwiek z Ubuntu konkurować. A dobra synchronizacja danych między aplikacjami desktopowymi byłaby cechą bardzo pożądaną (przecież to jej brak napędza popularność aplikacji przeglądarkowych).
Projekt jest też naprawdę interesujący technicznie, do tego wykorzystuje otwarte standardy, kod aplikacji jest dostępny jako open-source. Mam zamiar zerkać na jego rozwój.
A synchronizowanego Tomboya spróbuję trochę poużywać.