[Olpc-uruguay] Consulta sobre Rambo

Flavio Danesse fdanesse en gmail.com
Mar Mar 9 16:40:29 EST 2010


Excelente, con eso queda completo el artículo.

Lo puse en mi web:
http://sites.google.com/site/flaviodanesse/programacion-p/rainbow-en-la
y en mi bitacora del jam: http://drupal.ceibaljam.org/?q=node/713


me está quedando aprender:

La red, la interfaz de la camara y el motor de voz.



El 9 de marzo de 2010 18:39, Pablo Moleri <pmoleri en gmail.com> escribió:

> Buenísimo que lo solucionaste y preparaste este resumen con toda la
> información.
>
> Me quedó picando por qué el 0660 y no 660, y resulta que el 0 anterior es
> para que Python lo interpete como octal y se convierta en la máscara binaria
> que estuvimos discutiendo.
>
> Salduos,
>
> Pablo
>
> 2010/3/9 Flavio Danesse <fdanesse en gmail.com>
>
>> *Si, eso era solo una prueba que hice, el tema es que hay un detalle con
>> los permisos, no es 664 sino 0660 (No se que hace el 1º 0).
>>
>> Ya quedó solucionado, todo ok y comprobado, les mado lo que aprendí y
>> luego lo posteo en la web y en la bitacora del jam:*
>>
>> La primera vez que ejecutas una actividad x en la xo, rainbow crea un
>> grupo para ella, por ejemplo 10005
>> Las sucesivas veces que se ejecute esa actividad, rainbow creará un nuevo
>> usuario y lo agregará a ese grupo.
>>
>> La primera vez será 10000, luego 10002 y así sucesivamente de 2 en 2.
>>
>> rainbow genera en /home/olpc/
>> una estructura de directorios /isolation/1/
>> y dentro de ella genera los siguientes directorios:
>>
>> drwxr-xr-x 2 olpc olpc bundle_id_to_gid
>> drwxr-xr-x 2 olpc olpc gid_pool
>> drwxr-xr-x 3 olpc olpc gid_to_data_dir
>> drwxr-xr-x 2 olpc olpc uid_pool
>> drwxr-xr-x 2 olpc olpc uid_to_gid
>> drwxr-xr-x 3 olpc olpc uid_to_home_dir
>> drwxr-xr-x 2 olpc olpc uid_to_instance_dir
>>
>> dentro de: /home/olpc/isolation/1/uid_to_gid/
>>
>> se crea un link: lrwxrwxrwx root root 10000 -> 10005
>>
>> dentro de: /home/olpc/isolation/1/uid_to_instance_dir/
>>
>> se crea un link: lrwxrwxrwx root root 10000 ->
>> /home/olpc/isolation/1/uid_to_home_dir/10000
>>
>> en /home/olpc/isolation/1/uid_to_home_dir/
>>
>> se crea un directorio: drwxrws--- 7 10000 olpc 10000 (la s significa que
>> adquiere los permisos de propietario del archivo o directorio)
>>
>> dentro de este directorio, se crean:
>>
>> lrwxrwxrwx 1 root olpc data ->
>> /home/olpc/isolation/1/gid_to_data_dir/10005
>> lrwxrwxrwx 1 root olpc instance -> .
>> drwx--S--- 2 10000 10005 tmp
>>
>> Cuando se utiliza:
>>
>> os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'])
>>
>> o lo que es igual:
>>
>> os.path.join(activity.get_activity_root())
>>
>> Se devolverá: /home/olpc/isolation/1/uid_to_home_dir/10000
>> Cada vez que ejecutes la actividad, devolverá un directorio diferente,
>> debido a lo explicado al principio de este artículo:
>> /home/olpc/isolation/1/uid_to_home_dir/10000 (este ultimo numero aumenta
>> de 2 en 2 para cada ejecución de la actividad)
>>
>> Rainbow asegura persistencia de datos entre reinicios solo dentro de
>> os.path.join(activity.get_activity_root(), "data").
>> Pero, cada ejecución de la actividad genera un nuevo usuario por lo que
>> os.path.join(activity.get_activity_root(), "data") siempre será diferente.
>> Sin embargo, os.path.join(activity.get_activity_root(), "data"), siempre
>> será un link a /home/olpc/isolation/1/gid_to_data_dir/10005 que es el
>> directorio para persistencia de datos del grupo de usuarios de la actividad.
>> Cualquier archivo almacenado allí, se guardará con los permisos 644
>> *
>> Como ejemplo:*
>> -rw-r--r-- 1 10002 10005 Radios.db
>>
>> (recordar que 10002 varía. Acá 10002 nos indica que el archivo se creó en
>> la segunda instancia de ejecución de la actividad)
>> Para poder modificar estos archivos en diferentes instancias de la
>> actividad, es necesario cambiar sus permisos para que pueda ser modificado
>> por todos los usuarios del grupo al que pertenece la actividad.
>>
>> Se puede cambiar los permisos de estos archivos mediante:
>>
>>
>> directorio_base = os.path.join(activity.get_activity_root(), 'data/')
>> os.chmod(os.path.join(directorio_base, 'Radios.db'), 0660)
>>
>> En este caso, cambiamos los permisos del archivo creado, de 644 a 664 ya
>> que el segundo 6 da permisos de escritura para todo el grupo, el 4 solo daba
>> permisos de lectura al grupo.
>>
>> *De modo que el código de este ejemplo sería:*
>>
>> from sugar.activity import activity
>> from ManejodeBasedeDatos import ManejodeBasedeDatos
>>
>>
>> # Directorio para crear la base de datos
>> directorio_base = os.path.join(activity.get_activity_root(), 'data/')
>> mi_base = os.path.join(directorio_base + "Radios.db")
>>
>> # Si el directorio no existe, crearlo
>> if not os.path.exists(directorio_base):
>>     os.mkdir(directorio_base)
>>
>> # Si la base de datos no existe, crearla
>> if not os.path.exists(mi_base):
>>     BasedeDatos = ManejodeBasedeDatos(mi_base)
>>     BasedeDatos.CrearBasededatos()
>>     BasedeDatos.Llenar_Base()
>>     os.chmod(os.path.join(directorio_base, 'Radios.db'), 0660)
>>
>>
>>
>>
>>
>>
>>
>> El 9 de marzo de 2010 17:00, Pablo Moleri <pmoleri en gmail.com> escribió:
>>
>> Ojo, 644 se traduce como:
>>>           6      4     4
>>> 110  100  100
>>> rwx  rwx  rwx     (read, write, execute)
>>> prop grp  otros
>>> O sea que propietario es el único con acceso de escritura.
>>>
>>> Tengo entendido que en rainbow cada ejecución se hace con un usuario
>>> distinto, por lo tanto en la segunda ejecución ya no es el propietario y por
>>> eso no lo puede modificar. Sin embargo rainbow asegura que para una misma
>>> aplicación el grupo es el mismo, por lo tanto agregando permisos de
>>> escritura al grupo estarías hecho:
>>>
>>> os.chmod(os.path.join(directorio_base, 'Radios.db'), 664)
>>>
>>> Espero que esto te sea de ayuda.
>>>
>>> Saludos,
>>> Pablo
>>>
>>> 2010/3/9 Flavio Danesse <fdanesse en gmail.com>
>>>
>>> No, hay un error en lo que dije en el mail anterior, no es correcto,
>>>> estoy haciendo pruebas ya les cuento que saco en claro.
>>>>
>>>>
>>>>
>>>>
>>>> El 9 de marzo de 2010 16:05, Flavio Danesse <fdanesse en gmail.com>escribió:
>>>>
>>>> Hola gabriel y pablo, gracias por responder y tan rapido.
>>>>>
>>>>> El tema es así:
>>>>>
>>>>> La idea del código es que la primera vez que se ejecute la actividad,
>>>>> busque la base de datos y si no la encuentra la crea ya que las radios están
>>>>> definidas en el código. Las siguientes veces que se ejecute la actividad la
>>>>> base sólo se carga desde ese directorio.
>>>>>
>>>>> La primera vez que ejecuto el código, se crea la base y puedo agregar
>>>>> elementos en ella, pero la proxima vez que ejecute el codigo, accedo a la
>>>>> base pero si intento escribir en ella me dice que es solo lectura.
>>>>>
>>>>> Para probar el tema de los permisos intenté:
>>>>> os.chmod(os.path.join(directorio_base, 'Radios.db'), 644)
>>>>> No funcionó (probé diferentes permisos, incluso todos)
>>>>>
>>>>> No es lo mismo:
>>>>> os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'],'data/')
>>>>> que:
>>>>>
>>>>> os.path.join(activity.get_activity_root(), 'data/')
>>>>>
>>>>> Son diferentes directorios, sin embargo, en la práctica no hay
>>>>> diferencia, pasa lo mismo.
>>>>>
>>>>> Subí el paquete .xo que tengo hasta el momento a:
>>>>> http://sites.google.com/site/sugaractivities/ceibalradio-1-0
>>>>> (para agregar una radio hay que hacer click con boton derecho sobre
>>>>> cualquier radio de las existentes)
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> El 9 de marzo de 2010 11:41, Gabriel Eirea <geirea en gmail.com>escribió:
>>>>>
>>>>> Flavio:
>>>>>>
>>>>>> No sé si tendrá algo que ver, pero para acceder al directorio donde
>>>>>> uno puede escribir en vez de usar activity.get_activity_root() yo uso
>>>>>> la variable de entorno SUGAR_ACTIVITY_ROOT, así:
>>>>>>
>>>>>> os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'],'data')
>>>>>>
>>>>>> También habría que ver como dice Pablo con qué permisos se crea el
>>>>>> archivo, podés mandar el código de la clase ManejodeBasedeDatos?
>>>>>>
>>>>>> Saludos,
>>>>>>
>>>>>> Gabriel
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> El día 8 de marzo de 2010 23:57, Pablo Moleri <pmoleri en gmail.com>
>>>>>> escribió:
>>>>>> > Flavio, no me queda claro si no podés "acceder" o "modificar" la
>>>>>> base de
>>>>>> > datos. En cualquiera de los casos sería bueno que miraras con que
>>>>>> permisos
>>>>>> > queda creado el archivo "Radios.db" (ls -l), es necesario que los
>>>>>> permisos
>>>>>> > del grupo permitan lectura y escritura.
>>>>>> >
>>>>>> > Saludos,
>>>>>> > Pablo
>>>>>> >
>>>>>> > 2010/3/8 Flavio Danesse <fdanesse en gmail.com>
>>>>>> >>
>>>>>> >> Tengo una base de datos que la actividad crea así:
>>>>>> >>
>>>>>> >> # Directorio para crear la base de datos
>>>>>> >> directorio_base = os.path.join(activity.get_activity_root(),
>>>>>> 'data/')
>>>>>> >> mi_base = os.path.join(directorio_base + "Radios.db")
>>>>>> >>
>>>>>> >> # Si el directorio no existe, crearlo
>>>>>> >> if not os.path.exists(directorio_base):
>>>>>> >>     os.mkdir(directorio_base)
>>>>>> >>
>>>>>> >> # Si la base de datos no existe, crearla
>>>>>> >> if not os.path.exists(mi_base):
>>>>>> >>     BasedeDatos = ManejodeBasedeDatos(mi_base)
>>>>>> >>     BasedeDatos.CrearBasededatos()
>>>>>> >>     BasedeDatos.Llenar_Base()
>>>>>> >>
>>>>>> >> Luego, en la actividad tengo código que permite agregar datos a la
>>>>>> base y
>>>>>> >> actualizarla, sin embargo solo funciona la primera vez que ejecuto
>>>>>> la
>>>>>> >> actividad.
>>>>>> >>
>>>>>> >> Es decir:
>>>>>> >>
>>>>>> >> Instalo la actividad.
>>>>>> >> La ejecuto por primera vez, con lo cual se crea la base.
>>>>>> >> Agrego 1 registro y todo funciona perfecto, los datos se almacenan
>>>>>> y se
>>>>>> >> conservan luego de reiniciar.
>>>>>> >>
>>>>>> >> Sin embargo, en instancias sucesivas de la actividad no puedo
>>>>>> modificar la
>>>>>> >> base de datos.
>>>>>> >>
>>>>>> >> _______________________________________________
>>>>>> >> Olpc-uruguay mailing list
>>>>>> >> Olpc-uruguay en lists.laptop.org
>>>>>> >> http://lists.laptop.org/listinfo/olpc-uruguay
>>>>>> >>
>>>>>> >
>>>>>> >
>>>>>> > _______________________________________________
>>>>>> > Olpc-uruguay mailing list
>>>>>> > Olpc-uruguay en lists.laptop.org
>>>>>> > http://lists.laptop.org/listinfo/olpc-uruguay
>>>>>> >
>>>>>> >
>>>>>> _______________________________________________
>>>>>> Olpc-uruguay mailing list
>>>>>> Olpc-uruguay en lists.laptop.org
>>>>>> http://lists.laptop.org/listinfo/olpc-uruguay
>>>>>>
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Olpc-uruguay mailing list
>>>> Olpc-uruguay en lists.laptop.org
>>>> http://lists.laptop.org/listinfo/olpc-uruguay
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Olpc-uruguay mailing list
>>> Olpc-uruguay en lists.laptop.org
>>> http://lists.laptop.org/listinfo/olpc-uruguay
>>>
>>>
>>
>> _______________________________________________
>> Olpc-uruguay mailing list
>> Olpc-uruguay en lists.laptop.org
>> http://lists.laptop.org/listinfo/olpc-uruguay
>>
>>
>
> _______________________________________________
> Olpc-uruguay mailing list
> Olpc-uruguay en lists.laptop.org
> http://lists.laptop.org/listinfo/olpc-uruguay
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://lists.laptop.org/pipermail/olpc-uruguay/attachments/20100309/ccd05be2/attachment-0001.htm 


More information about the Olpc-uruguay mailing list