[Olpc-uruguay] Consulta sobre Rambo
Flavio Danesse
fdanesse en gmail.com
Mar Mar 9 15:04:07 EST 2010
*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
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://lists.laptop.org/pipermail/olpc-uruguay/attachments/20100309/056db465/attachment-0001.htm
More information about the Olpc-uruguay
mailing list