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.
Ś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 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.
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
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
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
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
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
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
Pokaż komentarze
chwilunia... czy ja dobrze widze że ta binarka z crona bedzie odpalana z uprawnieniem superużytkownika?
Hmm, fakt:P nie powinno tak być!
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?
Ja osobiście pierwsze widzę :(
Ż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:
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ą:
Działa perfecto: 07-2020r.
Dzięki! Na bank się przyda komuś!
A jak usuwać starsze pliki niż 7 dni i opróżniać kosz ?
Niestety nie zagłębiałem się w to :(