[opensuse-es] Bloqueo de archivos en GNU/Linux
Hola a tod@s: Ahora me ha surgido un nuevo reto: requiero que los archivos fuente de unos desarrollos que realizan varios programadores, no puedan ser editados por dos o más usuarios (desarrolladores) al mismo tiempo. Al mejor estilo del mocosoft office, que cuando se abre algún archivo que ha sido abierto por otro usuario en la red, me impide modificarlo y me notifica cuando el archivo ha sido cerrado por el usuario que previamente lo había abierto, para que a su vez yo pueda utilizarlo. Lo ideal es que sea un proceso transparente (no chown, no chmod, ni ningún otro artilugio similar en que deba verse implicado el usuario) para los desarrolladores; simple y llanamente: si el desarrollador X va a editar un archivo que ha sido abierto previamente por el desarrollador Z, que solo pueda visualizarlo (no editarlo) hasta que el desarrollador Z haya terminado su labor con el archivo en cuestión. Los desarrolladores trabajarán en modo de ejecución remota (desde terminales M$-Windos y GNU/Linux) en servidores GNU/Linux. Quedo atento a sus comentarios, sugerencias, indicaciones. Cordialmente, Cuervo Linuxero -- No recibo/envío información elaborados en/para M$-Word, M$-Excel, M$-PowerPoint, M$-Outlook o formatos privativos similares. Le invito a leer mis razones: http://www.gnu.org/philosophy/no-word-attachments.es.html -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 El 2008-10-03 a las 09:58 -0500, RŌNIN escribió:
Ahora me ha surgido un nuevo reto: requiero que los archivos fuente de unos desarrollos que realizan varios programadores, no puedan ser editados por dos o más usuarios (desarrolladores) al mismo tiempo.
Herramientas como el SVN o el CVS permiten eso (no se cual(es)). Te sacas una copia del archivo y lo bloqueas, explícitamente (no automáticamente).
Al mejor estilo del mocosoft office, que cuando se abre algún archivo que ha sido abierto por otro usuario en la red, me impide modificarlo y me notifica cuando el archivo ha sido cerrado por el usuario que previamente lo había abierto, para que a su vez yo pueda utilizarlo.
No te sirve ese tipo de bloqueo. No te sirve porque el programador tiene que cerrar el fichero para compilarlo o probar la sintaxis, y en ese momento el bloqueo se quita. Si al hacer la prueba el desarrollador decide volver atrás y corregir, y mientras alguien le ha quitado el archivo... la has liado. Necesitas bloqueos manuales. - -- Saludos Carlos E.R. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEARECAAYFAkjmOjkACgkQtTMYHG2NR9VWiwCfUcvZpO4ZL48+GstBKzz0Q/wy qpsAn0P34ztOlYCl07+vRUABWq+BfUV3 =gW52 -----END PGP SIGNATURE-----
Hola Carlosy colister@s: El día 3 de octubre de 2008 10:28, Carlos E. R. escribió:
Necesitas bloqueos manuales.
Tal como lo has dicho, lo he logrado (parcialmente): Los desarrolladores acceden a los archivos mediante samba y por medio de Putty modifican el propietario del archivo (mediante chown), lo cual hace que otro desarrollador no pueda editarlo, pero he descubierto que como todos los desarrolladores se hallan en el mismo rango (todos están en sudoers), otro programador puede cambiar nuevamente el propietario del archivo ... y ya estamos de vuelta en el principio. Lo intenté con un chattr +i y los demás usuarios no pueden cambiar el propietario del archivo (hasta aquí, todo va a pedir de boca) ... pero es tan fuerte que ni el mismo usuario que pone el atributo logra escribir en el archivo que ha asegurado =:S Hay alguna forma de lograr activar algo como el chattr +i, ¿pero que deje escribir a quien pone el atributo (que a su vez es el propietario del archivo) ? -- No recibo/envío información elaborados en/para M$-Word, M$-Excel, M$-PowerPoint, M$-Outlook o formatos privativos similares. Le invito a leer mis razones: http://www.gnu.org/philosophy/no-word-attachments.es.html -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
El vie, 03-10-2008 a las 17:16 -0500, RŌNIN escribió: Te empeñas en montar algo bastante raro. ¿No puedes trabajar contra un SVN? Eso va bastante bien, aunque no sea lo que tu estas queriendo hacer. -- Saludos Lluis
Hola Luis y colister@s:
El día 3 de octubre de 2008 17:20, lluis
El vie, 03-10-2008 a las 17:16 -0500, RŌNIN escribió: Te empeñas en montar algo bastante raro. ¿No puedes trabajar contra un SVN? Eso va bastante bien, aunque no sea lo que tu estas queriendo hacer. --
Gracias por el aporte, hasta donde sé ... acá hay un SVN funcionando. Pero ya sabes como son los jefes: quieren que de los carbones, saque diamantes ... y que estén lo antes posible; de lo contrario, van a sacar...me de mi puesto. El jefe está empeñado en que la dupla GNU/Linux & samba debe funcionar para este caso como funciona el m$-office para los documentos, hojas electrónicas y demás (en red y fuera de ella), así que trato de hacer lo mejor que puedo. Espero hayas comprendido mi posición. Cordialmente, Cuervo Linuxero -- No recibo/envío información elaborados en/para M$-Word, M$-Excel, M$-PowerPoint, M$-Outlook o formatos privativos similares. Le invito a leer mis razones: http://www.gnu.org/philosophy/no-word-attachments.es.html
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 El 2008-10-03 a las 17:46 -0500, RŌNIN escribió:
Te empeñas en montar algo bastante raro. ¿No puedes trabajar contra un SVN? Eso va bastante bien, aunque no sea lo que tu estas queriendo hacer. --
Gracias por el aporte, hasta donde sé ... acá hay un SVN funcionando.
El SVN es lo que se usa, o equivalente, con la ventaja de que si alguien la caga en un punto, puedes retroceder y recuperar cualquier versión anterior.
Pero ya sabes como son los jefes: quieren que de los carbones, saque diamantes ... y que estén lo antes posible; de lo contrario, van a sacar...me de mi puesto.
El jefe está empeñado en que la dupla GNU/Linux & samba debe funcionar para este caso como funciona el m$-office para los documentos, hojas electrónicas y demás (en red y fuera de ella), así que trato de hacer lo mejor que puedo.
Pero es que ni siquiera una herramienta de programación de windows haría eso. Los editores normales no mantienen bloqueado ningún fichero, no se hace.
Espero hayas comprendido mi posición.
Ya... pero no veo cómo puedas hacerlo de esa forma. No puedes obligar a los programadores a trabajar de esa forma si no quieren. Un programador es un experto, recuerda. - -- Saludos Carlos E.R. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEARECAAYFAkjmqJoACgkQtTMYHG2NR9VXVgCcCgKH7iSNyl1F1uE7wnghSTc7 B5gAoI81SoMe8ts45gZZVz97K2GsZv5X =BD/j -----END PGP SIGNATURE-----
El Sábado, 4 de Octubre de 2008, RŌNIN escribió:
Los desarrolladores acceden a los archivos mediante samba y por medio de Putty modifican el propietario del archivo (mediante chown), lo cual hace que otro desarrollador no pueda editarlo, pero he descubierto que como todos los desarrolladores se hallan en el mismo rango (todos están en sudoers), otro programador puede cambiar nuevamente el propietario del archivo ... y ya estamos de vuelta en el principio.
Lo intenté con un chattr +i y los demás usuarios no pueden cambiar el propietario del archivo (hasta aquí, todo va a pedir de boca) ... pero es tan fuerte que ni el mismo usuario que pone el atributo logra escribir en el archivo que ha asegurado =:S
Hay alguna forma de lograr activar algo como el chattr +i, ¿pero que deje escribir a quien pone el atributo (que a su vez es el propietario del archivo) ?
* tal como te he puesto en otro envio del hilo los bloqueos de escritura es algo "corriente" pero cuando lo consiguas con veto lock , la pretension de su funcionalidad propia, funcionara, pero para el enfoque de la utilizacion que quieres "inventar" es una chapuza, lease su uso en un entorno de desarrollo, ya te han comentado algo "para el desarrollo" que es lo apropiado, svn centralizado, git distribuido, etc , etc , que hay a docenas incluso con front-ends tipo cms. * Samba es un mero sistema de exportacion de ficheros en red-local no es un entorno de desarrollo centralizado o distribuido, para el desarrollo es "fundamental" el control de versiones (vuelta atras, etc) , no el bloqueo.
El Sábado, 4 de Octubre de 2008 21:45, jose maria escribió:
* Samba es un mero sistema de exportacion de ficheros en red-local no es un entorno de desarrollo centralizado o distribuido, para el desarrollo es "fundamental" el control de versiones (vuelta atras, etc) , no el bloqueo.
A parte de lo bien que te lo vas a pasar cuando algun cliente se caiga y deje unos cuantos ficheros bloqueados, tendras que desbloquearlos a manita. -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
RŌNIN escribió:
Hola a tod@s:
Ahora me ha surgido un nuevo reto: requiero que los archivos fuente de unos desarrollos que realizan varios programadores, no puedan ser editados por dos o más usuarios (desarrolladores) al mismo tiempo.
Puedes usar GIT, SVN, CVS, BZR, darcs, mercurial.. etc... -- "A computer is like an Old Testament god, with a lot of rules and no mercy. " Cristian Rodríguez R. Platform/OpenSUSE - Core Services SUSE LINUX Products GmbH Research & Development http://www.opensuse.org/
Hola a tod@s: Se me ha ocurrido una solución que teóricamente funciona, pero igual, me he encontrado con un atasco. La solución ha sido crear una rutina en bash que ejecute los cambios de propietario de archivo, algo como: #bin/bash USUARIO=$(whoami) ---> Identifica el usuario que ingresa a cambiar el archivo en cuestión echo "Introduzca Nombre de Archivo" ---> Mensaje solicitando el nombre de archivo a bloquear temporalmente read ARCHIVO ---> Almacena en la variable ARCHIVO el nombre que ingrese el usuario en la solicitud anterior find /dirensayo -name $ARCHIVO ---> Busca en el directorio dado, el nombre del archivo al cual cambiarle el propietario. Ahora, lo pendiente: necesito hacer una comparativa (if ... else) que active el chown si el propietario del archivo es nobody, si es diferente a nobody que informe al usuario que no se puede realizar el cambio solicitado. Supongo que una vez resuelto lo anterior, podré crear un segundo script (o una continuación) que me permita retornar el propietario cambiado a nobody. Mi conocimiento se limita a que con ls -l se pueden ver MUCHOS datos sobre un archivo, pero solo necesito almacenar en una variable el propietario, ¿Cómo puedo hacer eso desde un script en bash? Quedo atento a sus respuestas, indicaciones, comentarios. Cordialmente, Cuervo Linuxero -- No recibo/envío información elaborados en/para M$-Word, M$-Excel, M$-PowerPoint, M$-Outlook o formatos privativos similares. Le invito a leer mis razones: http://www.gnu.org/philosophy/no-word-attachments.es.html -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 El 2008-10-06 a las 16:02 -0500, RŌNIN escribió:
Mi conocimiento se limita a que con ls -l se pueden ver MUCHOS datos sobre un archivo, pero solo necesito almacenar en una variable el propietario, ¿Cómo puedo hacer eso desde un script en bash?
Mmm... Esto es marear la perdiz, pero en fin, tu verás... Puedes usar stat. En la cuarta linea tienes permisos y propietarios. O puedes usar "ls -l fichero", y extraer la segunda palabra, que es el propietario. O puededes intentar hacer "su - usuario -c chown usuario fichero". Si el fichero no es de "usuario" no te dejará hacerlo si pertenece a otro usuario, pero supongo que sí te dejará si es de "nobody" (no probado). Puedes también jugar con "find", porque con "-user name" sólo debe encuentrar ficheros de ese usuario. Puedes también probar "test -O FILE" - el porqué en el manual. - -- Saludos Carlos E.R. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEARECAAYFAkjqgyEACgkQtTMYHG2NR9XvFQCfam+QhsgBvoEE/cbGgPII5AH4 lV8AnjNWKK9CsKiLSzR/ag8OaWNkDqnT =IiJG -----END PGP SIGNATURE-----
Hola Carlos y Colister@s: El día 6 de octubre de 2008 16:29, Carlos E. R. escribió:
Puedes usar stat. En la cuarta linea tienes permisos y propietarios.
Gracias a tu valiosa ayuda, ésto parece acercarse a su fin, mi script ha quedado así: #bin/bash USUARIO1=$(whoami) USUARIO2=nobody echo "Introduzca Nombre de Archivo" read ARCHIVO OWNER=$(stat -c %U $ARCHIVO) if $OWNER==$USUARIO2 then su -c $USUARIO1 chown $USUARIO1 $ARCHIVO else printf "El archivo está bloqueado por %s \n", OWNER fi Aunque algo me sigue fallando, pues al final me dijo en la prueba que realicé: ./ensayo.sh: line 7: nobody==nobody: orden no encontrada El archivo está bloqueado por OWNER Y ya entrado en gastos, me surge una pregunta más: ¿Cómo puedo continuar con la línea 6, si el archivo al que requiero ubicar su propietario se encuentra en un subdirectorio? ... pues hasta ahora estoy probando con un archivo que tengo en el mismo directorio donde se encuentra almacenado el script. Quedo atento a sus respuestas, comentarios, sugerencias. Cordialmente, Cuervo Linuxero -- No recibo/envío información elaborados en/para M$-Word, M$-Excel, M$-PowerPoint, M$-Outlook o formatos privativos similares. Le invito a leer mis razones: http://www.gnu.org/philosophy/no-word-attachments.es.html -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 El 2008-10-06 a las 17:14 -0500, RŌNIN escribió:
Hola Carlos y Colister@s:
El día 6 de octubre de 2008 16:29, Carlos E. R. escribió:
Puedes usar stat. En la cuarta linea tienes permisos y propietarios.
Gracias a tu valiosa ayuda, ésto parece acercarse a su fin, mi script ha quedado así:
Huy, lo dudo. Lo de "fin", digo. >>:-) (sonrisa muy malvada :-p )
#bin/bash USUARIO1=$(whoami) USUARIO2=nobody echo "Introduzca Nombre de Archivo" read ARCHIVO OWNER=$(stat -c %U $ARCHIVO) if $OWNER==$USUARIO2 then su -c $USUARIO1 chown $USUARIO1 $ARCHIVO else printf "El archivo está bloqueado por %s \n", OWNER fi
Voy a ser malo. Supongo que ese guión puede ser ejecutado por más de una persona. Suponte que dos personas tratan de usar el mismo fichero casi al mismo tiempo. ¿Dará error y cual?
Aunque algo me sigue fallando, pues al final me dijo en la prueba que realicé:
./ensayo.sh: line 7: nobody==nobody: orden no encontrada El archivo está bloqueado por OWNER
Yo suelo usar "test" y no me da ese problema. Está tratando de ejecutar la comparación, pues la entiende como una orden más.
Y ya entrado en gastos, me surge una pregunta más: ¿Cómo puedo continuar con la línea 6, si el archivo al que requiero ubicar su propietario se encuentra en un subdirectorio? ... pues hasta ahora estoy probando con un archivo que tengo en el mismo directorio donde se encuentra almacenado el script.
Pues que falle diciendo que no existe, y que tu usuario se rasque la cabeza y especifique el camino correcto. Con test puedes averiguar si existe antes de abrirlo y salir grácilmente. Claro que puedes encontrarlo tu mismo. Puedes usar find o locate, pero suponte que encuentras otra copia en otro sitio y le das la copia que no quiere. No, que trabajen ellos. Te voy a tener que regalar un látigo >.-) - -- Saludos Carlos E.R. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEARECAAYFAkjqkkIACgkQtTMYHG2NR9U5EACggXJOHlBg9I2Ojn7V3X4ARDUm +0YAn1eIwsbLhXPbx+nQaIIcnOs6UtDw =g1nQ -----END PGP SIGNATURE-----
Hola Carlos y Colister@s: El día 6 de octubre de 2008 17:33, Carlos E. R. escribió:
Huy, lo dudo. Lo de "fin", digo. >>:-) (sonrisa muy malvada :-p )
Al parecer, te dejaré la sonrisa congelada: Eureka !!!! El código final, por si a alguien le sirve (Agradecimientos totales a Carlos Robin por su invaluable orientación e interés): #bin/bash USUARIO1=$(whoami) USUARIO2=nobody echo "Introduzca Nombre de Archivo" read ARCHIVO OWNER=$(stat -c %U $ARCHIVO) if [ "$OWNER" = "$USUARIO2" ]; then sudo chown $USUARIO1 $ARCHIVO else printf "El archivo está bloqueado por %s \n", $OWNER fi
Voy a ser malo.
Supongo que ese guión puede ser ejecutado por más de una persona. Suponte que dos personas tratan de usar el mismo fichero casi al mismo tiempo. ¿Dará error y cual?
Supongo que alguno de los dos lo ejecutará primero y el error que aparecerá es: "El archivo está bloqueado por (el usuario que lo haya ejecutado primero)".
Yo suelo usar "test" y no me da ese problema. Está tratando de ejecutar la comparación, pues la entiende como una orden más.
Como verás, he corregido el código ... y me ha ido, de perlas ;)
Claro que puedes encontrarlo tu mismo. Puedes usar find o locate, pero suponte que encuentras otra copia en otro sitio y le das la copia que no quiere. No, que trabajen ellos. Te voy a tener que regalar un látigo >.-)
Uuuhhmmm ... ya luego me pondré a con esas variantes que me planteas,
por ahora voy a que el jefe me condecore ;)
Por cierto, le había enviado a Mel Gibson un mensaje para ofertarle
por esos modelos de látigo que usó en la Pasión de Cristo ... ¿crees
que puedas superar esos diseños?
:-D
Cordialmente, Cuervo Linuxero -- No recibo/envío información elaborados en/para M$-Word, M$-Excel, M$-PowerPoint, M$-Outlook o formatos privativos similares. Le invito a leer mis razones: http://www.gnu.org/philosophy/no-word-attachments.es.html -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 El 2008-10-06 a las 17:58 -0500, RŌNIN escribió:
Hola Carlos y Colister@s:
El día 6 de octubre de 2008 17:33, Carlos E. R. escribió:
Huy, lo dudo. Lo de "fin", digo. >>:-) (sonrisa muy malvada :-p )
Al parecer, te dejaré la sonrisa congelada: Eureka !!!!
Huy, no era por eso; no cantes victoria tan rápido, estoy pensando en otra cosa y a largo plazo, un año o dos >:-)
El código final, por si a alguien le sirve (Agradecimientos totales a Carlos Robin por su invaluable orientación e interés):
#bin/bash USUARIO1=$(whoami) USUARIO2=nobody echo "Introduzca Nombre de Archivo" read ARCHIVO
Usa "test" con if para comprobar si existe antes de leerlo y cantar un error.
OWNER=$(stat -c %U $ARCHIVO) if [ "$OWNER" = "$USUARIO2" ]; then sudo chown $USUARIO1 $ARCHIVO else printf "El archivo está bloqueado por %s \n", $OWNER fi
Voy a ser malo.
Supongo que ese guión puede ser ejecutado por más de una persona. Suponte que dos personas tratan de usar el mismo fichero casi al mismo tiempo. ¿Dará error y cual?
Supongo que alguno de los dos lo ejecutará primero y el error que aparecerá es: "El archivo está bloqueado por (el usuario que lo haya ejecutado primero)".
Eso es si la cosa va bien, es decir, si un guión le da tiempo a terminar su parte crítica antes que al otro. Si se intercalan, ¿que?
Yo suelo usar "test" y no me da ese problema. Está tratando de ejecutar la comparación, pues la entiende como una orden más.
Como verás, he corregido el código ... y me ha ido, de perlas ;)
Ya :-)
Claro que puedes encontrarlo tu mismo. Puedes usar find o locate, pero suponte que encuentras otra copia en otro sitio y le das la copia que no quiere. No, que trabajen ellos. Te voy a tener que regalar un látigo >.-)
Uuuhhmmm ... ya luego me pondré a con esas variantes que me planteas, por ahora voy a que el jefe me condecore ;)
Yo de ti no estaría tan contento, pero no te preocupes, no es tu responsabilidad.
Por cierto, le había enviado a Mel Gibson un mensaje para ofertarle por esos modelos de látigo que usó en la Pasión de Cristo ... ¿crees que puedas superar esos diseños?
:-D
Huy, la marina inglesa era muy sofisticadas con sus látigos aka gatos de siete colas. Y los "cómitre" españoles de galeras no les irían muy a la zaga con los suyos, tenían práctica en azotar a las chusma, aka masas trabajadoras, para que dieran el máximo >:-) - -- Saludos Carlos E.R. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEARECAAYFAkjqpoIACgkQtTMYHG2NR9XaCACfb3IG1srFRLOnlLkWXTT5K4lU OCoAnjOv6W3zkIQ+mS/iaI/ezQ7lOZ2M =FKk7 -----END PGP SIGNATURE-----
El Martes, 7 de Octubre de 2008 02:00, Carlos E. R. escribió:
Voy a ser malo.
Supongo que ese guión puede ser ejecutado por más de una persona. Suponte que dos personas tratan de usar el mismo fichero casi al mismo tiempo. ¿Dará error y cual?
Bueno ahora le toca afinarlo e implementar un bloqueo para que no se ejecute dos veces al mismo tiempo el script. Anda que si se sigue asi no salen if ni nada -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
participants (6)
-
Carlos E. R.
-
Cristian Rodríguez
-
francisco f
-
jose maria
-
lluis
-
RŌNIN