lunes, 19 de junio de 2017

Cliente google drive debian

Hace ya algunos años me cambié por completo a una distribución linux, inicié con Ubuntu, sin embargo, al poco tiempo se me hizo pesado, lento (algo como windows), por ello decidí probar con una distro que a lo largo de varios años ha probado ser de las mejores: Debian.

La solución de algunos problemas como tarjetas wifi, drivers de tarjetas gráficas, suelen resolverse instalando algunos drivers libres o privativos y a veces con un poco de más de paciencia, sin embargo, siempre extrañé poder sincronizar mis archivos de Google Drive, si bien dropbox tiene una buena implementación en debian, hasta se pueden correr varias instancias (sí, tengo dos instancias de dropbox sincronizandose al mismo tiempo), los archivos de Google Drive son necesarios para mí.

Durante mucho tiempo ví respuestas parciales, sin embargo, me decidí buscar la manera y la encontré aquí, sin embargo, creo que para usuarios con menos expericiencia, es necesario explicar un poco más los pasos.

1) Creamos una carpeta bin en la carpeta home, allí estará el script sh que hará posible la sincronización de los archivos, al momento de crearla asegurate que no seas root.

mkdir ~/bin
o mkdir /home/user/bin

2) Puedes cerrar sesión o reiniciar y teclea

echo $PATH, verifica que /home/user/bin aparezca.

3) Crea la carpeta donde se sincronizarán los archivos de google drive

mkdir ~/Google_drive

4) Tenemos que instalar grive, muchos comentan que está en repositorios en debian, sin embargo, en este momento no está (rama testing al 19 de junio del 2017) por lo que brindaré los pasos para instalarlo desde los archivos fuente


  • da clic aqui y descarga o da clic aqui
  • descomprime el zip
  • instalemos los paquetes para poder instalar grive 2 mediante un paquete .deb
    como root teclea:

    apt-get install git cmake build-essential libgcrypt11-dev libyajl-dev libboost-all-dev libcurl4-openssl-dev libexpat1-dev libcppunit-dev binutils-dev
  • ahora dirigete a la carpeta donde está grive y teclea:

    dpkg-buildpackage -j4

    el comando anterior obtendrá un paquete .deb para poder instalarlo "mśa sencillo" Si tienes un error Cant exec debian rules, es debido a que descargaste el paquete en una partición (no la del sistema) sólo copia y pega en la partición del sustema, ahora ve a la carpeta donde colocaste grive y estará grivexxxx.deb
quizas te pida algunas dependencias como 

sudo apt-get install pkg-config zlib1g-dev debhelper libstdc++-7-dev libgcrypt20-dev


  • instalalo con la instrucción

    dpkg -i grivexxxxx.deb

    listo!
5) Ahora tecleamos (no root)

cd ~/Google_drive/ &&  grive -a


1 - Go to https://console.developers.google.com/apis/library. Login with your Google account and create a new project on Google Cloud Platform. You can also use an existing one.
2 - Search for Google Drive API and enable it.
3 - Go to API Credentials page (https://console.developers.google.com/apis/credentials)
3 - Create a new OAuth Client credential. You will be provided with a id and a secret. Save both because you gonna need it for grive2.
Then you need to follow this repo README, download grive2, build and install. Then run
grive -a --id [client id] --secret [client secret]
On your Drive folder and it will probably work.
If you want to use your ID and secret to build grive2 instead of using above command, you can edit the keys in
https://github.com/vitalif/grive2/issues/287


aparecerá un link, copialo y pegalo en el navegador, hay que aceptar los permisos de cuenta, te regresará un código que debes pegar en la terminal. Una vez ingresado a la cuenta, empezará a sincornizar los archivos de tu cuenta de google en la carpeta ~/Google_drive, sin embargo, no se sincronizará cuando detecte cambios por lo que continuamos

6) instalar inotify-tools

apt-get install inotify-tools

7) crearemos un archivo sh por ejemplo grive.sh, con el siguiente código

#!/bin/bash
# Google Drive Grive script that syncs your Google Drive folder on change
# This functionality is currently missing in Grive and there are still no
# official Google Drive app for Linux coming from Google.
#
# This script will only detect local changes and trigger a sync. Remote
# changes will go undetected and are probably still best sync on a periodic
# basis via cron.
#
# Kudos to Nestal Wan for writing the excellent Grive software
# Also thanks to Google for lending some free disk space to me
#
# Peter Österberg, 2012

GRIVE_COMMAND_WITH_PATH=/usr/bin/grive   # Path to your grive binary, change to match your system
GDRIVE_PATH=~/Google_drive                      # Path to the folder that you want to be synced
TIMEOUT=60               # Timeout time in seconds, for periodic syncs. Nicely pointed out by ivanmacx

declare -i esta_grive_ejecutando

while true
do
    inotifywait -t $TIMEOUT -e modify -e move -e create -e delete -r $GDRIVE_PATH
    esta_grive_ejecutando=`pidof grive`
    if [[ "$esta_grive_ejecutando" -ne 0 ]]
    then
        echo "Grive está ejecutandose, PID: $esta_grive_ejecutando. Esperando..."
        sleep $TIMEOUT
    else
        cd $GDRIVE_PATH && $GRIVE_COMMAND_WITH_PATH
    fi
done

lo anterior indica que cada 300 segunos se monitorean los archiuvos además se comprueba que se realicen varias instancias de grive.sh

o puedes realizar esta modificación


GRIVE_COMMAND_WITH_PATH=/usr/bin/grive    # Path to your grive binary, change to match your system
GDRIVE_PATH=~/Google_drive       # Path to the folder that you want to be synced
TIMEOUT=300              # Timeout time in seconds, for periodic syncs. Nicely pointed out by ivanmacx

while true
do
    inotifywait -t $TIMEOUT -e modify -e move -e create -e delete -r $GDRIVE_PATH
    cd $GDRIVE_PATH && $GRIVE_COMMAND_WITH_PATH
done

está segunda forma sólo comprueba cada 300 s las modificaciones de archivos.

verificamos los permisos de ejecución

chmod +x grive.sh
9) añadimos grive.sh como nuevo elemento de menu en debian para luego añadirlo a programas de inicio

herramientas-->; menu principal-->; n uevo elemento
herramientas-->; retoques-->; aplicaciones al inicio

10) tecleamos

crontab -e

elegimos la opción 1

y tecleamos

*/10 * * * * cd "$HOME"/Google_drive && grive > /dev/null 2>&1


Con estos pasos podrás sincronizar Google Drive en debian.

Actualización

28/08/2017s

Todo iba perfecto, los archivos y carpetas de google grive se sincronizaban entre dos equipos (una laptop y una desktop), sin embargo, algo raro sucedía con una carpeta que me compartieron y que agregué a mi cuenta de google drive. Los archivos que me compartieron se sincronización (descargaron en ambos equipos), pero los cambios, modificaciones y archivos nuevos que creé en esa carpeta no se sincronizaban. Pensé que era problema de la ejecución de grive con los scripts, revisando el archivo LOG, puede ver que aparecía un error: no se puede sincronizar el archivo XXXXX acceso de solo lectura. Verifiqué los permisos de los archivos en ambos equipos y ambos eran de sól lectura, cambié el permiso y seguía sin poder sincronizarse.

Hasta que dí con la solución, era la carpeta compartida, ya que no era el propietario no la podía modificar, aún y cuando la agregué a mi cuenta, por ello borré la carpeta compartida y cree una nueva y listo, los archivos empezaron a sincronizarse sin problemas.



1 comentario:

  1. Hola, el paso 10 se realiza en una terminal, tal cual escribes el comando.

    el paso 9 en debian es añadir un nuevo elemento en menu principal, y la ruta es

    herramientas--> menu principal--> nuevo elemento

    allí te pedirá el nombre del programa y la ruta del comando a agregar, por ejemplo en mi caso es /home/javier/grive.sh, puedes colocarle también un icono,

    una vez que lo creas, lo colocas como programa que se ejecute al inicio o arranque

    herramientas--> retoques--> aplicaciones al inicio

    la buscas y seleccionas, con ello cada vez que inicies debian, arranque el sincronizador.
    Saludos.

    ResponderEliminar