martes, 5 de abril de 2016

Instalar servidor de SVN con servicio web en Ubuntu

Comenzamos
  1. Actualizamos el sistema
  2. sudo apt-get update
    
  3. Instalamos los paquetes de apache y los modulos de svn
  4. sudo apt-get install subversion subversion-tools apache2 libapache2-svn apache2-utils
    
  5. Habilitamos los modulos de svn para apache
  6. sudo a2enmod dav
    sudo a2enmod dav_svn
    
  7. Creamos el directorio donde pondremos el repositorio de svn
  8. sudo mkdir -p /var/svn
    
  9. Creamos el repositorio de svn
  10. sudo svnadmin create /var/svn/proyecto1
    
  11. Le damos permiso de acceso y escritura a usuario de Apache; en este caso el usuario es www-data
  12. sudo chown -R www-data:www-data /var/svn
    
  13. Creamos el site en apache; para ello creamos un fichero llamado repo1.conf en /etc/apache2/sites-available
  14. 
      DAV svn
      SVNPath /var/svn/proyecto1
    
    
    repo1 es el lugar al que accederemos desde la web, es decir, en este caso, para acceder al repositorio desde el navegador escribiremos.
    
    http://localhost/repo1
    
    Pero todavía no.....faltan un par de pasos más
  15. Habilitamos el sitio recien creado
  16. sudo a2ensite repo1
    
  17. Reiniciamos apache
  18. sudo service apache2 reload
    
  19. Finalmente, accedemos al repositorio a través del navegador
  20. http://localhost/repo1
Y veremos esto:

Uso del repositorio

Nos descargamos el repositorio recien creado
svn co http://localhost/repo1
Accedemos al repositorio
cd repo1
Creamos los directorios trunk, tags y branches y creamos un fichero de ejemplo:
mkdir trunk tags branches
cd trunk
echo "contenido del fichero" > ejemplo.txt
Añadimos los ficheros creados
cd ..
svn add *
Obtenemos la siguiente salida:
A         branches
A         tags
A         trunk
A         trunk/ejemplo.txt
Y confirmamos los cambios
svn ci -m "comentarios"
Obtenemos la siguiente salida:
Añadiendo      branches
Añadiendo      tags
Añadiendo      trunk
Añadiendo      trunk/ejemplo.txt
Transmitiendo contenido de archivos .
Committed revision 1.
Si comprobamos los cambios desde el navegador web, veremos:
y esto

Añadir seguridad al repositorio con acceso por usuario y contraseña

Para ello, crearemos los usuarios que van a acceder al repositorio en el servidor con useradd
Estos usuarios necesitan permisos de escritura sobre los ficheros del repositorio, por lo que tenemos que añadir los usuarios al grupo www-data, ya que este grupo es el grupo propietario de los ficheros de repositorio.
sudo usermod -G www-data usuario
Modificamos el fichero /etc/apache2/sites-available/repo1.conf y lo dejamos asi:

  DAV svn
  SVNPath /var/svn/proyecto1
  AuthType Basic
  AuthName "Test Repo"
  AuthUserFile /etc/dav_svn.passwd
  Require valid-user

Creamos el fichero /etc/dav_svn.passwd en el que añadimos los usuarios que van a utilizar el svn.
Este fichero se crea con el comando htppasswd.
La primera vez con:
sudo htpasswd -c /etc/apache2/dav_svn.passwd usuario
Si queremos añadir mas usuarios, la segunda y siguientes veces los añadiremos con:
sudo htpasswd -a /etc/apache2/dav_svn.passwd usuario2
Reiniciamos apache:
sudo service apache2 reload

Acceso por web a multiples repositorios

Con lo hecho hasta ahora, tenemos acceso a un unico repositorio.
Si queremos tener acceso a varios repositorios tenemos que realizar los siguientes pasos:
  1. Creamos el resto de repositorios
  2. cd /var/svn
    sudo svnadmin create /var/svn/proyecto2
    sudo svnadmin create /var/svn/proyecto3
    
  3. Cambiamos el propietario y grupo de los nuevos repositorios
  4. sudo chown -R www-data:www-data /var/svn
    
  5. Creamos el nuevo site en apache; para ello creamos un nuevo fichero llamado repositories.conf en /etc/apache2/sites-available
  6. 
      DAV svn
      SVNParentPath /var/svn
      SVNListParentPath On
      AuthType Basic
      AuthName "Test Repo"
      AuthUserFile /etc/dav_svn.passwd
      Require valid-user
    
    
    Es importante la directiva 'SVNListParentPath' junto con la 'SVNParentPath'
  7. Habilitamos el sitio recien creado
  8. sudo a2ensite repositories
    
  9. Reiniciamos apache
  10. sudo service apache2 reload
    
  11. Finalmente, accedemos al reposotioro a través del navegador
  12. http://localhost/repositories
    
Y veremos esto:
Fuentes:
https://www.howtoforge.com/how-to-install-and-use-svn-with-apache-dav_svn-on-ubuntu-14.04
http://www.krizna.com/ubuntu/setup-svn-server-on-ubuntu-14-04/
https://desarrollophpsenior.wordpress.com/2012/04/07/instalar-servidor-de-svn-en-ubuntu/
http://superuser.com/questions/274183/how-to-overcome-svn-could-not-open-the-requested-svn-file-system
http://www.wandisco.com/svnforum/forum/opensource-subversion-forums/general-setup-and-troubleshooting/4583-problem-setting-up-repository-with-apache
http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html

domingo, 17 de marzo de 2013

Programar en Java y C++ con Eclipse

Eclipse tiene distintas versiones para programar en Java y C++.
Si queremos desarrollar programas en Java y C++ con una única versión de Eclipse tenemos que instalar la version Eclipse Standard (http://www.eclipse.org/downloads/) e instalar el plugin CDT.
Esto está explicado en esta entrada de mi blog. Eclipse, CDT y Cygwin. Programar en C++ con Elipse 
Los plugins se instalan en la versión de Install New Software...
La url de algunos plugins interesantes son:
Windows Builder para desarrollo de GUIs en Java en http://download.eclipse.org/windowbuilder/WB/integration/4.3/


domingo, 25 de noviembre de 2012

Obtener el nombre del host y la ip de una maquina con C++ y boost

Para obtener la direccion IP de una máquina en C++:
#include <netdb.h>
#include <arpa/inet.h>

char szBuffer[1024];
if(gethostname(szBuffer, sizeof(szBuffer)) != 0)
{
    std::cout << "error en gethostname" << std::endl;
}
else
{
    struct hostent *host = gethostbyname(szBuffer);
    if(host == NULL)
    {
        std::cout << "error en gethostbyname" << std::endl;
    }
    else
    {
        char * szLocalIP;
        szLocalIP = inet_ntoa (*(struct in_addr *)*host->h_addr_list);
        std::cout << "mi nombre de host es "<< host->h_name <<" y mi ip con c++   es " << szLocalIP << std::endl;
    }
}

Con boost:
#include "boost/asio.hpp"
using boost::asio::ip::tcp;

boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(boost::asio::ip::host_name(), "");
tcp::resolver::iterator iter = resolver.resolve(query);
tcp::resolver::iterator end; // End marker.
while (iter != end)
{
    tcp::endpoint ep = *iter++;
    std::cout << "mi nombre de host es " << boost::asio::ip::host_name() << " y mi ip con boost es " << ep.address() << std::endl;
}

viernes, 9 de noviembre de 2012

Convertir std:string a mayusculas o minusculas con stl

#include <algorithm>
#include <string>

//Para convertir a minuscula:

std::string str("Hola Caracola"),final("");
final.resize(str.length());
std::transform(str.begin(),str.end(),final.begin(),::tolower);
std::cout << "str= \"" << str << "\" final = \"" << final << "\""<< std::endl;


//Para convertir a mayuscula:
std::transform(str.begin(),str.end(),final.begin(),::toupper);
std::cout << "str= \"" << str << "\" final = \"" << final << "\"" << std::endl;


Salida:
str= "Hola Caracola" final = "hola caracola"
str= "Hola Caracola" final = "HOLA CARACOLA"
  

sábado, 3 de noviembre de 2012

Limpieza imposible. Error 46 en Brother MFC-540CN

Problema:

Al encender la impresora Brother MFC-540CN salía en pantalla el mensaje "Limpieza imposible" o "Error 46".

Solución:

Para resolver el problema de "Limpieza imposible" en la Brother MFC-540CN solo debemos resetear el contador de impresión, para ello hacemos lo siguiente:

1.- Desconectamos el cable usb de la impresora y también el de alimentación.
2.- Presionamos el botón de "Menú" y lo mantenemos pulsado, sin soltarlo conectamos el cable de alimentación y la impresora se encenderá, cuando veamos el mensaje "MAINTENANCE" soltamos el botón de "Menú".
3.- Pulsamos la tecla "arriba" hasta que veamos en pantalla el número "8" y pulsamos "Fijar".
4.- Pulsamos la tecla "arriba" hasta que veamos "0" y pulsamos "Fijar".
5.- Pulsamos la tecla "Inicio/Negro" hasta que veamos "PURGE:06414".
6.- Pulsamos la tecla "arriba" hasta que veamos en pantalla el número "2" y pulsamos "Fijar". Repetimos este paso con el número "7", "8", "3".
7.- Veremos que el contador ahora pone "PURGE:00000". Pulsamos el botón "Detener/Salir".
8.- Pulsamos la tecla "arriba" hasta que veamos en pantalla el número "9" y pulsamos "Fijar", repetimos este paso, también con el número "9".

La Brother DCP-115C se reiniciará y desaparecerá el error de "Limpieza imposible" o "Error 46".

fuente: http://www.diariomatica.com/2011/07/115-limpieza-imposible-error-46-brother.html

domingo, 21 de octubre de 2012

Clonar particion de Windows con clonezilla de imagen en DVD a disco duro

  1. Arrancar con cd de arranque de clonezilla (en el mimo cd/dvd esta la imagen de clonezilla a clonar). Si no está en el mismo cd/dvd, debemos arrancar con clonezilla con un usb y meter en el lector de cd/dvd el cd/dvd con la imagen de clonezilla
  2. Elegir tipo y distribucion de teclado
  3. Clonezilla => device/image
  4. Montar directorio de imagen clonezilla => skip
  5. Comprobar en otro terminal ( Ctrl + Alt + F2 y convertirse en root con sudo su), que clonezilla ha montado el cd/dvd en /live/image. Si no lo ha hecho, hacerlo a mano con mount /dev/cdrom /live/image. Si no existe /dev/cdrom, poner /dev/sr0
  6. Crear un enlace simbolico en /home/partimag del directorio que contiene la imagen de clonezilla en el cd/dvd con "cd /home/partimag; ln -s /live/image/directorio_imagen ."
  7.  Volvemos al terminar 1 con Ctrl + Alt + F1
  8. Clonezilla - OpenSource Clone System =>Beginner
  9. Elegir Modo => restoreparts
  10. Imagen de clonezilla => debe salir el contenido de /home/partimag
  11. Elegir particion destino => en mi caso /dev/sda1
  12. Yes al resto de preguntas.

domingo, 30 de septiembre de 2012

Clonar discos duros o particiones con dd en Linux

Voy a explicar como clonar un disco duro en otro o una particion de un disco duro en otra partición de otro disco duro en Linux con el comando dd.
¿Para qué nos sirve esto? Cuando una partición de un disco A se nos ha quedado pequeña y queremos pasar todos los datos de esa partición a otra particion de otro disco duro B con mas espacio.
Lo primero que necesitamos es arrancar con cualquier distribucion Live CD de Linux (Ubuntu, Knoppix,...etc  cualquiera sirve porque todas tiene en comando dd).
Supongamos que tenemos una particion 1 en un disco duro A con los datos que queremos copiar a la otra particion del disco duro B.
Y también tenemos otro disco duro B nuevo (sin particiones)
Lo primero que tenemos que hacer es crear una partición en el disco duro B con (MUY IMPORTANTE) al menos el mismo espacio o más que la particion 1 del disco duro A.
Ahora necesitamos distinguir claramente cuales son las particiones del disco duro A y las del B.
Algunas ditribuciones (como el Mini Linux de HBCD y otras muchas) al arrancar nos meten en el fichero /etc/fstab una entrada por cada particion de cada disco duro que ha encontrado; haciendo cat /etc/fstab veremos esta informacion. Por ejemplo podria se algo asi:
/dev/sda1      /mnt/sda1   .......
/dev/sda2      /mnt/sda2  ........
/dev/sdb1      /mnt/sda1   ......
La primera linea indica que ha encontrado la primera particion del disco 1 en /dev/sda y se puede montar para ver sus datos en el directorio /mnt/sda1. Para montar esta particion y poder ver los datos podemos ejecutar mount /dev/sda1 y entrando en /mnt/sda1 veremos los datos de esta partición. Igual con las demás.

Supongamos que queremos pasar los datos de la particion del disco sda1 a la del disco sdb1. Pues para esto ejecutamos:
dd if=/dev/sda1 of=/dev/sdb1 bs=1M
Si la particion sda1 era una particion de arranque y queremos quitar el disco duro A y dejar solo el B, tenemos que copiar tambien el MBR(Master Boot Record) en la particion sdb1.
Esto se hace con el comando:
dd if=/dev/sda1 of=/dev/sdb1 bs=1M count=1 bs=512
Con esto ya podriamos arrancar solo con el disco duro B que contiene exactamente lo que contenía A pero tiene mas espacio.
El comando tambien sirve para otras cosas como :
-Copiar un disco duro entero (con todas sus particiones) en otro:
dd if=/dev/sda of=/dev/sdb bs=1M
-Crear una imagen de una particion de un disco duro en un fichero:
dd if=/dev/sda1 of=particion_sda1.bin
-Crear la imagen comprimida:
dd if=/dev/sda1 | gzip > of=particion_sda1.bin.gz
-Crear una imagen de un CD o DVD con problemas de lectura debido a que esté rayado:
dd if=/dev/cdrom of=/tmp/dvd_recuperado.iso conv=noerror,sync
-Eliminar el MBR sin alterar la tabla de particiones. Esto sirve para eliminar del disco el GRUB sin tocas las particiones:
dd if=/dev/zero of=/dev/sda bs=446 count=1