Kategorie: InneLinux

Synchronizacja z Google Drive w Linuxie

Cześć,

dokładnie to co jest w tytule wpisu było mi potrzebne kilka dni temu, a skoro problem ten rozwiązałem to warto go tu opisać, bo proces może być dla kogoś ciekawy.

Potrzebowałem zrobić na linuxie (dokładniej Fedora 27) synchronizację jednostronną folderu lokalnego z folderem na Google Drive. Jednostronną tzn każdy plik jaki pojawił się w folderze lokalnym miał automatycznie znaleźć się w chmurze.

Użyłem do tego narzędzia gdrive – konsolowy klient do googledrive’a.

Zaczynamy zabawę

Ściągnijmy pierw binarkę ze strony którą podałem wyżej i przenieśmy ją do trochę bardziej odpowiedniego folderu niż 'Pobrane’. Nadajmy też prawa do wykonywania

sudo mv gdrive-linux-x64 /opt/gdrive-linux-x64
sudo chmod -x /opt/gdrive-linux-x64

Żeby łatwiej korzystać z tak uzyskanego programu zróbmy dowiązanie symboliczne do /usr/bin

sudo ln -s /opt/gdrive-linux-x64 /usr/bin/gdrive

daje to wygodę posiadania go w PATHie, tj nie trzeba od teraz podawać całej ścieżki do programu gdy chcę go wykonać tylko po prostu wpisuje „gdrive” i już ładnie można z tego korzystać.

Warto tu dodać że ściąganie gotowych binarek ze stron jest trochę nie bezpieczne.. Bo nigdy nie wiemy co w nich dokładnie jest. No ale tez nie popadajmy w paranoję.

Gdy mamy już program w PATHie to możemy się zalogować do Google Drive z CLI:

gdrive about

W wyniku tej komendy pojawi się link który należy kliknąć, wyrazić zgodę na dostęp tej aplikacji do chmury i kod który się pojawi po owej akceptacji dostępu – wkleić do konsoli.

No i po tym procesie można korzystać w konsoli z dysku google’a:

[mmazurek@mmazurek ~]$ gdrive about
User: Mateusz Mazurek, xxx@yyy.zzz
Used: 2.9 GB
Free: 13.2 GB
Total: 16.1 GB
Max upload size: 5.2 TB

Właściwa synchronizacja

Właściwa komenda do synchronizacji wygląda tak

gdrive sync upload /home/mmazurek/folder_zrodlowy/ fileId

małym problemem natomiast było dowiedzenie się czym jest „fileId” – tzn łatwo się domyśleć że to docelowy folder, ale skąd wziąć jego ID, poklikałem trochę po dysku Google, ale nie było w informacjach po prawej żadnego IDka.

Na szczęście gdrive umożliwia wylistowanie plików wraz z szukanym IDkiem

gdrive list

gdzie szukane ID jest pierwszą kolumną. Z ciekawostek to to ID jest też w linku jak udostępniamy coś – ale o tym dowiedziałem się już później.

Skoro mamy komendę to użyjmy cron’a (linuxowy harmonogram zadań) by zmusić system do kontrolnej synchronizacji. W tym celu wystarczy otworzyć plik

sudo nano /etc/cron.d/googledrive-sync

i zapisać tam

0 * * * * root /usr/bin/gdrive sync upload /home/mmazurek/folder_zrodlowy/ fileId >> /var/log/googlesync.log 2>&1

Co można przetłumaczyć jako „o każdej godzinie, której minuta jest zerem, każdego dnia, uruchom wskazany program i przekieruj całe jego wyjście do pliku w folderze /var/log” – czyli w godzinach 11:00, 12:00 itp

Plik logów zacznie zapełniać się podobnym wpisem:

Starting sync…
Collecting local and remote file information…
Found 38 local files and 38 remote files
Sync finished in 1.376734023s

I jeśli czytaliście wpis o otrzymaniu oprogramowania to wiecie że to słaba informacja, bo nawet daty nie ma a kolejne wywołania się zlewają ze sobą, napiszmy więc kawałek basha który opakuje to wywołanie:

#!/bin/bash
/usr/bin/date +%d-%m-%y/%H:%M:%S
/usr/bin/gdrive sync upload /home/mmazurek/folder_zrodlowy/ fileId
/usr/bin/echo -----

no i wystarczy zmienić wpis w cron’ie na:

0 * * * * root /opt/sync_gd.sh >> /var/log/googlesync.log 2>&1

uprzednio oczywiście zapisując ten kawałek basha w pliku /opt/sync_gd.sh i nadając mu prawa do wykonywania.

Teraz moje logi wyglądają tak:

09-02-19/17:00:01
Starting sync…
Collecting local and remote file information…
Found 38 local files and 38 remote files
Sync finished in 1.470085637s
-----
09-02-19/18:00:01
Starting sync…
Collecting local and remote file information…
Found 38 local files and 38 remote files
Sync finished in 1.368526734s
-----
09-02-19/19:00:01
Starting sync…
Collecting local and remote file information…
Found 38 local files and 38 remote files
Sync finished in 1.376734023s

Dzięki temu jestem w stanie zdebuggować ewentualnie co się zepsuło jeśli z jakiegoś powodu pliki przestaną się pojawiać w chmurze.

Dzięki za wizytę,
Mateusz Mazurek
Mateusz M.

Pokaż komentarze

  • chwilunia... czy ja dobrze widze że ta binarka z crona bedzie odpalana z uprawnieniem superużytkownika?

  • a może masz jakieś podpowiedzi jak 'naprawić' działanie apki bo ostatnio rzuca błędem http 400 w/o body ale body jest puste

  • "Logowanie się przez Google w tej aplikacji jest tymczasowo wyłączone
    Jeszcze nie zweryfikowaliśmy tej aplikacji pod kątem Logowania przez Google."
    Ktos miał taki problem?

  • Żeby działał należy paczkę deb rozpakować i podmienić skompilowany grive z własnymi ID:
    z grive/src/main.cc zamieniamy w linii 49 i 50 odpowiednio:

    const std::string default_id            = "129146822202-mfs98r8gs248g8c13e04jredgfpgq5l0.apps.googleusercontent.com" ;
    const std::string default_secret        = "F8PCKbE6E8tIgMzxPRgpQU5i" ;
    

    Oczywiście secret nie jest prawdziwy, ale tak to ma wyglądać. By zbudować pczakę trzeba kilka *-dev doinstalować, Nie ma znaczenia czy *deb czy kompilacja (zmieni się ścieżka co najwyżej)
    Można również kompilować z flagą:

    cmake .. "-DAPP_ID:STRING=<client_id>" "-DAPP_SECRET:STRING=<client_secret>"
    

    Działa perfecto: 07-2020r.

Ostatnie wpisy

Podsumowanie: maj, czerwiec, lipiec i sierpień 2024

Oj daaawnoo mnie tu nie było. Ale wakacje to był czas dużej liczby intensywnych wyjazdów i tak naprawdę, dopiero jakoś… Read More

2 miesiące ago

Podsumowanie: kwiecień 2024

Cześć! Zapraszam na krótkie podsumowanie kwietnia. Wyjazd do Niemiec A dokładniej pod granicę z Francją. Chrześnica miała pierwszą komunię. Po… Read More

6 miesięcy ago

Podsumowanie: luty i marzec 2024

Ostatnio tygodnie były tak bardzo wypełnione, że nie udało mi się napisać nawet krótkiego podsumowanie. Więc dziś zbiorczo podsumuję luty… Read More

7 miesięcy ago

Podsumowanie: styczeń 2024

Zapraszam na krótkie podsumowanie miesiąca. Książki W styczniu przeczytałem "Homo Deus: Historia jutra". Książka łudząco podoba do wcześniejszej książki tego… Read More

9 miesięcy ago

Podsumowanie roku 2023

Cześć! Zapraszam na podsumowanie roku 2023. Książki Zacznijmy od książek. W tym roku cel 35 książek nie został osiągnięty. Niemniej… Read More

10 miesięcy ago

Podsumowanie: grudzień 2023

Zapraszam na krótkie podsumowanie miesiąca. Książki W grudniu skończyłem czytać Mein Kampf. Nudna książka. Ciekawsze fragmenty można by było streścić… Read More

11 miesięcy ago