Esta pagina se ve mejor con JavaScript habilitado

Acceso GDrive KODI mediante FTP

 ·  🎃 kr0m

En otras ocasiones ya hemos explicado como acceder al contenido de GDrive desde KODI y como acceder a un servidor FTP también desde este. Pero el problema de acceder a contenido 4K desde el addon de KODI es que este resultaba muy lento dando problemas como congelaciones momentáneas o retardos indeseados por otro lado el acceso FTP funciona bien pero requiere de una capacidad de almacenamiento inviable.

En este artículo utilizaremos PlexDrive y la librería pyftpdlib para servir el contenido de GDrive a un KODI instalado en AndroidTV, este escenario es el que mejores resultados me ha dado en mi caso particular con el que no experimento ningún tipo de cuelgue ni retardo.


PlexDrive:

Debemos tener en cuenta que el acceso a GDrive desde PlexDrive es de solo lectura:

Please note that plexdrive doesn't currently support writes (adding new files or modifications), it only supports reading existing files and deletion.

En mi caso voy a utilizar una jail bajo IOCage desde la que importaré el contenido de GDrive y lo serviré por FTP.

Montamos el sistema de ficheros por FUSE en el padre y se lo pasamos a la jail para no tener que modificar permisos especiales en esta.

Instalamos el software necesario:

pkg install fusefs-lkl

Cargamos el módulo fusefs:

kldload fusefs

Ahora debería existir un dispositivo llamado fuse:

ls -la /dev/fuse

crw-rw-rw-  1 root  operator  0xe3 Nov 30 23:28 /dev/fuse

Configuramos el SO para que cargue el módulo de forma automática en cada arranque:

vi /etc/rc.conf

kld_list="fusefs ..."

Averiguamos el drive-id copiándolo desde la URL del navegador mostrada cuando accedemos a GDrive, en mi caso la URL tiene el siguiente aspecto:

https://drive.google.com/drive/folders/0ANN6pzUlNUgXUk9PVA

El drive-id es: 0ANN6pzUlNUgXUk9PVA

Nos bajamos PlexDrive, podemos ver las versiones disponibles en este enlace de github

Creamos el directorio donde montaremos la unidad de GDrive:

mkdir /mnt/gdrive

Arrancamos manualmente PlexDrive:

/root/plexdrive-freebsd-amd64 mount -o allow_other -v 3 –drive-id=0ANN6pzUlNUgXUk9PVA /mnt/gdrive

1. Please go to https://console.developers.google.com/
2. Create a new project
3. Go to library and activate the Google Drive API
4. Go to credentials and create an OAuth client ID
5. Set the application type to 'other'
6. Specify some name and click create
7. Enter your generated client ID: 

Al acceder a la URL mostrada nos aparecerá la siguiente interfaz donde debemos darle al desplegable para crear un proyecto nuevo:


Indicamos un nombre y le damos a crear:

Volvemos a darle al desplegable, pero esta vez veremos nuestro proyecto nuevo, lo seleccionamos:


Ahora ya estamos dentro del proyecto:

Activamos la API de Google drive en el proyecto, para ello accedemos a la biblioteca:

Buscamos Google drive api y clickamos sobre él:

Le damos a habilitar:

Nos aparecerá la siguiente ventana donde debemos crear las credenciales de acceso:

En tipo de API, seleccionamos “Google Drive API”:

Rellenamos los datos solicitados y guardamos:

Agregamos los permisos necesarios:


Ahora deberían aparecer en la lista:

Le damos a Guardar y continuar:

Creamos un ID de cliente OAuth:

Nos mostrará las credenciales generadas:

Finalizamos el proceso:

Ahora veremos un cliente nuevo:

Si clickamos sobre él podremos ver los detalles necesarios para seguir con el asistente de la consola:

Debemos permitir el acceso a la app desde un usuario, Pantalla de consentimiento -> Add user:

Añadimos el usuario:

Ya aparecerá en la lista:

Seguimos con la consola de PlexDrive:

1. Please go to https://console.developers.google.com/
2. Create a new project
3. Go to library and activate the Google Drive API
4. Go to credentials and create an OAuth client ID
5. Set the application type to 'other'
6. Specify some name and click create
7. Enter your generated client ID: XXXXXXXXXXXXXXXXXXXXXXX
8. Enter your generated client secret: YYYYYYYYYYYYYYYYYYY
Go to the following link in your browser https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=167956997929-127t240uu4hiesptm56df953a99136kt.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=state-token

Accedemos a la URL:

Aparecerá el siguiente mensaje donde le damos a continuar:

Le volvemos a dar a continuar:

Nos mostrará un código:

En la consola pegamos dicho código:

Paste the authorization code: ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

Demonizamos el montaje de la unidad de GDrive:

vi /usr/local/etc/rc.d/gdrive

#! /bin/sh
#
# $FreeBSD$
#

# PROVIDE: gdrive
# REQUIRE: DAEMON
# KEYWORD: shutdown 

. /etc/rc.subr

name="gdrive"
rcvar="${name}_enable"
extra_commands="status"

start_cmd="${name}_start"
stop_cmd="${name}_stop"
status_cmd="${name}_status"

gdrive_start(){
    echo "Starting service: ${name}"
    /usr/sbin/daemon -S -p /var/run/${name}.pid -T gdrive -u root /root/plexdrive-freebsd-amd64 mount -o allow_other -v 3 --drive-id=0ANN6pzUlNUgXUk9PVA /mnt/gdrive
}

gdrive_stop(){
    if [ -f /var/run/${name}.pid ]; then
        echo "Stopping service: ${name}"
        kill -s INT $(cat /var/run/${name}.pid)
        sleep 3
    else
        echo "It appears ${name} is not running."
    fi
}

gdrive_status(){
    if [ -f /var/run/${name}.pid ]; then
        echo "${name} running with PID: $(cat /var/run/${name}.pid)"
    else
        echo "It appears ${name} is not running."
    fi
}


load_rc_config ${name}
run_rc_command "$1"

Asignamos los permisos necesarios:

chmod 555 /usr/local/etc/rc.d/gdrive
chown root:wheel /usr/local/etc/rc.d/gdrive

Habilitamos el servicio y lo arrancamos:

sysrc gdrive_enable=“YES”
service gdrive start


Ahora importaremos el directorio /mnt/gdrive del padre a la jail.

Creamos el directorio en la jail:

iocage console GDriveKodiFTP
mkdir /mnt/gdrive
exit

Importamos el directorio mediante el comando fstab de IOCage:

iocage fstab -a GDriveKodiFTP “/mnt/gdrive /mnt/gdrive nullfs rw 0 0”

Successfully added mount to GDriveKodiFTP's fstab

Ahora accedemos a la jail y montamos el servidor FTP, instalamos la librería necesaria para ello:

pip install pyftpdlib

Demonizamos el servicio FTP:

vi /usr/local/etc/rc.d/pyftpdlib

#! /bin/sh
#
# $FreeBSD$
#

# PROVIDE: pyftpdlib
# REQUIRE: DAEMON
# KEYWORD: shutdown 

. /etc/rc.subr

name="pyftpdlib"
rcvar="${name}_enable"
extra_commands="status"

start_cmd="${name}_start"
stop_cmd="${name}_stop"
status_cmd="${name}_status"

pyftpdlib_start(){
    echo "Starting service: ${name}"
    chdir /mnt/gdrive
    /usr/sbin/daemon -S -p /var/run/${name}.pid -T gdrive -u kr0m /usr/local/bin/python -m pyftpdlib -p 2121 -u USERNAME -P PASSWORD -i 192.168.69.14
}

pyftpdlib_stop(){
    if [ -f /var/run/${name}.pid ]; then
        echo "Stopping service: ${name}"
        kill -s INT $(cat /var/run/${name}.pid)
        sleep 3
    else
        echo "It appears ${name} is not running."
    fi
}

pyftpdlib_status(){
    if [ -f /var/run/${name}.pid ]; then
        echo "${name} running with PID: $(cat /var/run/${name}.pid)"
    else
        echo "It appears ${name} is not running."
    fi
}


load_rc_config ${name}
run_rc_command "$1"

Asignamos los permisos necesarios:

chmod 555 /usr/local/etc/rc.d/pyftpdlib
chown root:wheel /usr/local/etc/rc.d/pyftpdlib

Habilitamos el servicio y lo arrancamos:

sysrc pyftpdlib_enable=“YES”
service pyftpdlib start

Comprobamos que el servidor FTP esté activo:

sockstat -46 -l -s|grep 2121

kr0m     python3.8  18969 4  tcp4   192.168.69.14:2121    *:*                                LISTEN

Ahora tan solo debemos importar el contenido en KODI tal y como se indica en este artículo anterior

Si te ha gustado el artículo puedes invitarme a un RedBull aquí