[Olpc-uruguay] Consulta sobre Rambo

Pablo Moleri pmoleri en gmail.com
Mar Mar 9 15:39:35 EST 2010


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
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://lists.laptop.org/pipermail/olpc-uruguay/attachments/20100309/e48dcb1d/attachment.htm 


More information about the Olpc-uruguay mailing list