[Olpc-uruguay] Consulta sobre Rambo

Flavio Danesse fdanesse en gmail.com
Mar Mar 9 21:16:26 EST 2010


Si anita, la red es todo un tema, a mi me ganó el primer round pero ya
volveré sobre ella.

Si te interesa leer algo sobre los permisos de archivo en linux, tengo un
pequeño resumen acá:

http://sites.google.com/site/flaviodanesse/gnu-linux/permisos-de-archivos-y-directorios





El 9 de marzo de 2010 22:07, ana <ana.cichero en gmail.com> escribió:

> Felicitaciones listeros !
>
> Este hilo es un libro abierto :)  Es un lujo leérlos.
>
> Les confieso, que siempre leo lo que escriben,  aunque a veces no entienda
> nada o casi. Supongo no soy la única que lo hace.
> En fin, por casa, tema permisos linux pronto ;) , muy lindo diagrama 644
> pm...  y con rambo... algo mas que nada, jaja.
>
> Gracias de corazón y Sigan Adelante con la red. La mesh andando es un
> golazo para proponer cosas en clase.
>
> muchos sds.
>
>
> 2010/3/9 Flavio Danesse <fdanesse en gmail.com>
>
>> 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
>>>
>>>
>>
>> _______________________________________________
>> 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/20100310/f536654a/attachment-0001.htm 


More information about the Olpc-uruguay mailing list