Mostrando entradas con la etiqueta linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta linux. Mostrar todas las entradas

martes, 11 de agosto de 2009

Servidor SVN con usuarios y permisos de repositorios

Hola nuevamente, recientemente he abierto un nuevo blog que se dedicará netamente a lo que es php, dicho blog cuya direccion es http://aprendefacilphp.blogspot.com/ será entonces el lugar donde publique mis codigos de php y muestre lo poco que sé. ;P

Bueno, para empezar con nuestro tema quisiera darles una breve explicación de lo que es el SVN o Sistema de Control de Versiones, este sistema fue "diseñado" para sustituir al CVS (Sistema Concurrente de Versiones). Lo que permite es que varias personas trabajando en un mismo proyecto (ya sea de programación o no) puedan escribir sus respectivos archivos, realizar modificaciones e inclusive solucionar problemas sin temor a que se sobre-escriban los fuentes. Por ej. Yo tengo dos compañeros mas de trabajo, y todos estamos trabajando en un proyecto de desarrollo web, cada uno de nosotros trabaja en un área específica, pero a veces uno encuentra un problema en el código del otro y lo soluciona, pero que ocurre si el otro estaba trabajando en el mismo archivo, pues ahi es donde surge el sistema, Cuando alguien empieza a trabajar en un archivo (en este caso existente) al descargarlo se dice que se descargó en un número de versión digamos en este caso el 89 y al mismo tiempo mi compañero tambien descargó ese mismo número de versión, cuando yo suba mis modificaciones (ya que lo hago primero) el archivo pasará a la versión 90, y cuando mi compañero quiera subir sus cambios, el sistema le notificará que hay una versión mas reciente y que el archivo que el descargó tiene una anterior, notificándole asi que puede haber un conflicto, normalmente el sistema descarga ambos archivos y permite al usuario "corregir" o tomar los cambios de uno sin afectar al otro, una vez solucionado se suben los nuevos cambios y el archivo pasa a pertenecer a la version 91. Ese es sólo un ej. Hay varios mas así por ejemplo, podemos tener branchs o saltos o ramas de versiones que a partir de un número determinado sigue en paralelo al otro, esto por ej, cuando se desarrollan sistemas para clientes, y necesitan ser iguales en la base pero diferentes en algunos detalles, pues este sistema lo facilita, asi como tambien luego permite hacer un merge o mezcla de ambos para obtener una version conjunta de ambos. Bueno, no seguiré explicando porque se hará muy largo esto, no soy muy bueno con la teoría así que les sugiero pregunten a papá google que pueden hacer con el SVN y prueben, que echando a perder se aprende ;P

Bueno, luego de mucho tiempo de haber puesto en práctica este tutorial http://slackdhabyx.wordpress.com/2007/08/28/activar-subversion-con-apache-en-slackware-12/ siempre quise que pudiera haber un cierto tipo de limitación de acceso a los usuarios, es decir. Por ejemplo:

Tengo 7 repositorios con software que es de mi empresa, pero quiero sacar un nuevo proyecto público(nótese que en este caso uso proyecto como repositorio indistintamente) pero quiero que participe más gente y no quiero montarlo en otro servidor, quiero que esté en el mio. Pues como lo tenia según ese tutorial no lo iba a poder hacer, ya que una vez que creo el usuario, este puede acceder a cualquiera de los proyectos y descargarlos sin problemas, pues entonces me puse a investigar con google y econtré este otro tutorial http://svn-access-mana.sourceforge.net/ que sugiere que use un archivo de limitacion de acceso al usuario(no sólo al repositorio sino que inclusive a una carpeta solamente), con este archivo pues, se me facilitó todo, pues puedo restringir el acceso tanto de lectura como de escritura por repositorio.

Bueno a continuación pongo como tengo estructurado mis archivos de configuración:
en mi archivo de configuracion del apache ademas de los modulos del svn que se cita en el primer blog pongo el codigo de la siguiente manera

<Directory "/repositorio/svn">
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
<Location /repositorios>
DAV svn
SVNParentPath /repositorio/svn
#nueva linea
AuthzSVNAccessFile /etc/svn/users-access-file
#fin de nueva linea
SVNListParentPath on
AuthType Basic
AuthName "Repositorio SVN"
AuthUserFile /etc/svn-auth-file
Require valid-user
</Location>
Con esa "nueva linea" que se agregó permito que se restrinja el acceso a los usuarios definidos en el archivo de autenticación svn

y a continuación pongo el script de configuración
/etc/svn/users-access-file

[/]
* =
[repo1:/]
p431i7o = rw
user2 = rw
user3 =
[repo2:/]
p431i7o = rw
user2 = r
user3 = r
[repo3:/]
p431i7o = rw
user2 =
user3 = r
  • con esto en la repo1 tanto yo como el user2 tenemos permiso de lectura y escritura mientras que se le deniega el acceso al user3
  • en la repo2 todos tenemos permiso de lectura pero solo yo puedo escribir
  • y en la repo3 podemos leer solamente el user3 y yo luego el user2 no puede acceder

Puede parecer una pequeñez esto, pero me llevo como 2 horas encontrar esta respuesta (luego de habermelo propuesto) y creo que esto a alguien le servirá.

Una vez mas recomiendo leer previamente el primer blog, para poder tener montado el servidor svn y un repositorio de ejemplo, luego ya podran continuar con este ejemplo :)

Si te gustó el post pues deja un comentario, y si no te gustó igual déjalo que con críticas constructivas podemos mejorar el mundo :)

sábado, 7 de junio de 2008

Levantando la interfaz wireless de mi notebook

Lamento no haber publicado en tanto tiempo pero como sabran estoy con el proyecto de fin de curso en mi facultad y junto con mi laburo se encargan de consumir todo mi tiempo ;)
Bueno pero vayamos al tema...
Tengo una toshiba a205-s5804 que tiene el chip realtek 8187b

root@darkstar:~# lsusb
Bus 002 Device 002: ID 0bda:8197 Realtek Semiconductor Corp. RTL8187B Wireless Adapter
Bus 002 Device 001: ID 0000:0000
Bus 007 Device 001: ID 0000:0000
Bus 006 Device 001: ID 0000:0000
Bus 005 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
root@darkstar:~#
ese es el resultado de ejecutar el comando 'lsusb', bueno, en teoria uno puede ejecutar el ndiswrapper para mapear drivers que no existen para linux desde los .inf y .sys provenientes del fabricante para el SO Windows. Pero me encontraba con la sorpresa que con este chip no funcionaba, pero vayamos primero a la instalacion del ndiswrapper

yo descargue el ndiswrapper de esta direccion del sitio sourceforge.net
http://sourceforge.net/project/showfiles.php?group_id=93482
luego ejecutamos

root@darkstar:/etc#tar -zxvf ndiswrapper-1.53.tar.gz
luego

root@darkstar:/etc#cd ndiswrapper-1.53
root@darkstar:/etc#make distclean
root@darkstar:/etc# make install

con eso en slackware 12.1 ya tenemos instalado el ndiswrapper
luego descargue el driver del realtek 8187b de su pagina
http://www.realtek.com.tw/downloads/downloadsView.aspx?Langid=1&PNid=1&PFid=1&Level=6&Conn=5&DownTypeID=3&GetDown=false&Downloads=true#RTL8187B

ahora si hacemos
root@darkstar:/Win98#ndiswrapper -i net8187b.inf
se instalara el driver lo que normalmente deberia ser suficiente, pero no en el caso de este driver
donde lo que hice fue agregar la direccion especifica del dispositivo

root@darkstar:/Win98#ndiswrapper -a 0bda:8197 net8197b
asi "forzamos" a que el driver se direccione al id del dispositivo, recordemos que ese id es el que se obtiene al ejecutar el comando
root@darkstar:~# lsusb

hasta ahi recien tenemos instalado el dispositivo
ahora tenemos que hacer que este dispositivo este en funcionamiento, o algo asi,
jeje

cargamos el modulo :
root@darkstar:~#modprob ndiswrapper

Agregamos el ndiswrapper a los modulos que se cargan al inicio
root@darkstar:~#echo 'ndiswrapper' | sudo tee -a /etc/modules

linkeamos el alias 'wlan0' a nuestro ndiswrapper
root@darkstar:ndiswrapper -m

luego de esto reinicie la pc, y al hacer el
root@darkstar:~#iwconfig
aun no veia mi interface, entonces recorde un comando que habia probado antes
que esta en la carpeta /etc/rc.d/
root@darkstar:/etc/rc.d#./rc.inet1 wlan0_start
'ANY EESID' o algo asi salio el resultado
pero al ejecutar el iwconfig
ya aparecia mi eth0
el lp0
y mi wlan0 :)
por fin no? pero al probar un ping a google, aun no conseguia lo que necesitaba
entonces segui probando algunas cosas
entre ellas jugar con el ruteo, a proposito, no se como eliminar una ruta dada... osea la sintaxis especifica, en fin ese no es el tema


root@darkstar:~#ifconfig wlan0 192.168.1.154 netmask 255.255.255.0
probe unos pings a unas ip validas de por ahi y me funcionaba, pero al hacer
root@darkstar:~#ping www.google.com
no me daba el ping... eso quiere decir que el dns no estaba configurado
entonces al archivo
/etc/resolv.conf
y le agregue la siguiente linea
nameserver 192.168.1.254
la direccion ip que esta ahi, es la del router wireless que tengo, que como es un servidor dhcp en teoria tambien es servidor dns...

y listo, guarde y ya funcionaba todo, y desde esta computadora con mi querido linux slackware y mi navegador favorito, 'mozilla firefox', es que estoy escribiendo este post
aprovechando que hay muchnisima gente con el mismo problema, pero este credito no es mio basicamente lo que hice fue traducir lo que encontre en las siguientes urls, asi que siquiren ver mi bibliografia asi no se pierden ningun paso :)
http://tiagoboldt.net/blog/toshiba-l40-ndiswrapper-realtek-8187/
http://linuxespanol.com/ftopic231.php


Bueno, me despido hasta un proximo post :) saludos amigos!