Google Drive csatolása szerveren / Nextcloud integráció

Kellett egy ilyen megoldás, és az lett volna a legkényelmesebb módja, hogy a Nextcloudomon legyen leszinkronizálva az egyik Google Drive accountom. A Next már az összes eszközömön van, így az amúgy csak ritkán használt Google Drive-t nem kell minden egyes gépen felvenni, elég csak az itthoni szerveren.

Na, nyilván van erre Nextcloud alkalmazás... nincs. :O Miért lenne. Csak olyan van, ami egyszer lerántja a Drive tartalmát.

Google Drive <-> helyi gép

Mit lehet mit tenni : rclone vagy ocamlfuse, és majd az szinkronizél egy könyvtárba, amit a Nexctloud külső tárhelyként lát. Már macera. :DDD Természetesen Debian Testingre nincs rclone, így fel kellett venni a Trixie tárolóit, és abból feltenni. Előbb-utóbb amúgy lesz, azt ígérték. És kelleni fog egy rclone egy olyan gépen is, amin van böngésző. (Érdemes megjegyezni, hogy az rclone nagyon sok mindent ismer, Amazontól az akármiig, míg pl. egy EC3 tárhelyet maga a Nextcloud is fel tud csatolni.(

Szóval:
apt update; apt install rclone

/etc/fuse.conf -ban az allow_other elől kivenni a #-t. Ez talán nem kell, ha nem kell a Nextcloud szinkron, csak a Google drive tartalmát akarod látni, de valószínűleg amúgy még egy mezei SMB-hez is kelleni fog. (Egyszerűen ha ez nincs, akkor nem fogja más user látni a könyvtár tartalmát, mindegy, milyen Unix permission-ök vannak rajta, mert az rclone fuse-t használ, és az nem engedi :D )

Létrehozni egy könyvtárat valahol, amibe a szinkron menni fog. (Esetemben ez /data/gdrive.)

rclone config

Hirdetés

Menü-szerű izét kell végignyomkodni. A Client secret és a Client ID maradhat üres (elvileg ezt lehet szerezni Google Cloud konzolból, és akkor gyorsabban fog működni az egész cucc), a Google drive írható-olvasható szinkron a 18-as. Auto config no.
Kidob egy parancsot, rclone authorize "driveneve" "dsfdsfdsfdsfdstokenee34432" , ezt le kell futtatni a böngészős gépen, és behitelesíteni a Google-hoz. A kapott tokent visszamásolni a szerverre, és kész is. A rclone konfig file-jában letárolja a hosszú tokent. (Nem tudom, mi van, ha ez lejár, vagy meddig érvényes :S )

Így még nem lesz szinkron, ez még csak annyi, hogy a rclone be tud menni majd a Google Drive-ra.

A konkrét szinkronizálásra több lehetőség is van, pl.
rclone bisync /data/gdrive gdrive:
(Itt a /data/gdrive helyett bármi megadható, nem tárolódik le a rclone konfigban.) Ez viszont egyszeri szinkron, ha folyamatost szeretnénk, akkor pl. cronból kell időzítve futtatni. (Lehet egyirányú, meg read-only szinkronizálás is.)

Vagy lehet mountolni, én ezt választottam. Ez mondjuk elvileg kevésbé golyóálló :
rclone mount gdrive: /data/gdrive --vfs-cache-mode full --daemon --dir-perms 0777 --uid 33 --gid 33 --allow-other

Itt az uid és gid, akkor kell, ha nem a saját usered alól akarsz hozzáférni a könyvtár tartalmához, mert a felmountolt könyvtáron már nem lehet jogokat állítani nekem az Apache szervert futtató user azonosítóit kellett a könyvtárra.

fusermount -u /könyvtár a lecsatolás :D

Az rclone --daemon kapcsolója azt jelenti, hogy a háttérben indul el a cucc, így többet nem kell vele foglalkozni, csak működik.
És mivel Fuse az egész alapja, így se a mounthoz, se a szinkron futtatásához nem kellenek emelt jogok, ez a része egész biztonságos. A mountoló parancs mehet a user crontabjába, @reboot paraméterrel, így reboot után sem kell vele csinálni semmit.
Ez a része tök jó, ha csak egy könyvtárba akarjuk lerántani a Google Drive-ra feltöltött file-okat, akkor itt meg is lehet állni. (Pl. ha csak SMB-n akarjuk elérni a letöltött cuccot.) Teljesen gyors, pár másodpercen belül megjelennek a változások a könyvtárban, vagy ha ott változik valami, akkor a kliens eszközökön. Nyilván azért, mert így nem kerülnek a file-ok a helyi gépre, csak látszanak, és ugyanúgy dolgozhatunk velük, mintha helyben lennének.

Látsszon a Nextcloudon is

Ez volt a macerásabb :D A Nextcloudon alapból tiltva van az External storage alkalmazás. Engedélyezzük. A Nextcloud config.php-ben a 'filesystem_check_changes' => 1,  
'filelocking.enabled' => false,  kívánatos, bár lehet, hogy ezek nélkül is működne. (Az utóbbi a gáz, ha szoktak a userek fileokat szerkeszteni egyszerre, ez itthon nem fordul elő.) Aztán mehetünk az admin felületre, és felvehetjük a Google drive könyvtárat :

A külső tárolóban az a jó, hogy egyes usereknek saját könyvtárakat lehet megadni a szerveren, szóval többeknek, vagy több szolgáltatásról való szinkronizáláshoz is megfelel. Csak az a feltétel, hogy lássa a webszervert futtató user annak a könyvtárnak a tartalmát (tudjon bele írni). A ... menüben a véglegesítő pipa mellett meg lehet adni, hogy a könyvtár minden megnyitáskor scannelje végig annak tartalmát.

Csak az a baj, hogy nem teszi :O :W

Szóval megint kókányolni kell, és a Nextcloud webszerverét futtató user crontabjába ( nálam ez a www-data )
*/2 * * * * cd /data/www_nextcloud2/www_nextcloud && /usr/bin/php occ files:scan --all --no-interaction --quiet
Ez 2 percenként scanneli az új fileokat. Lehetne --all helyett --unscanned is, de az se működik.
A www-data crontabját pedig így lehet szerkeszteni :
sudo -u www-data crontab -e

Így már értelmezhető időn belül megjelennek a Google Drive-ra feltöltött file-ok a Nextcloudban.

Lehetséges, hogy a rclone polling interval-jával kéne szórakozni (hint : nem, kipróbáltam, nem jobb, de amúgy se nagyon számítana, mert onnantól kezdve, hogy Fuse egy filerendszert felcsatol, már a NC-n múlik minden) , és akkor magától is megjelennének, de tkp. nekem ez így elég volt. Sokkal kényelmesebb, mint böngészőből bemászkálni a Google Drive-ra, ha onnan kell valami, vagy oda töltenék fel, és bárhol vagyok, elérem.

Kivételesen ez nem volt akkora macera, hibakereséssel és szerencsétlenkedéssel együtt is hamar megvolt.

Tovább a fórumba.