Archivo de octubre, 2013
Montar imagenes de dispositivos de bloques
Como suele ser habitual, muchas de las imagenes para Raspberry-PI, vienen creadas mediante un volcado completo a traves del comando «dd» en Linux. Este volcado completo incluye todas las particiones, las cuales pueden llegar a tener dificil acceso mediante el uso del comando «mount».
Si hacemos un volcado sobre una particion no hay problemas para montar luego la imagen, pero si se hace el volcado sobre el dispositvo completo, las opciones habituales del mount no nos valen para acceder a las particiones, impidiendo de esta forma, que se puedan montar.
Existen varios metodos para extraer o montar una partición de un volcado de disco completo, pero en esta ocasión nos vamos a centrar en «losetup». Por general, este comando viene instalado por defecto en todas las distros de Linux, pero de no tenerlo en nuestro sistema, tan solo habria que buscar el paquete que lo contiene e instalarlo.
Losetup nos permite montar un archivo de imagen obtenido mediante dd, en un dispositivo al estilo /dev/loopX. Posteriormente se puede utilizar /dev/loopX como si fuera un disco mas en el sistema.
Los pasos a realizar serian los siguientes:
- Volcar una imagen completa de una SD o bien bajar una para nuestras Raspberry’s.
- Para montar en /dev ejecutamos: losetup -f imagen.dd
Una vez en este punto, tenemos nuestra imagen completa sobre /dev/loop0, el cual podemos tratar como un disco mas del sistema. Podemos ejecutar fdisk o cualquier otra utilidad de disco.
Para montar la particion primera, ejecutariamos:
root@ubuntu:~# mount -t ext3 /dev/loop0p1 /mnt |
Una vez que hemos hecho todo lo que queriamos, primero tenemos que desmontar el punto de montaje que se ha montado con anterioridad y despues ejecutar:
root@ubuntu:~# losetup -d /dev/loop0 |
Esta utilidad vale tanto para tarjetas de memoria, Pendrives, discos duros, etc… Resumiendo, para cualquier tipo de dispositivo de bloques.
Conexión a MySQL desde App PHP
PHP soporta compatibilidad con accesos a múltiples sistemas de bases de datos, sin embargo, el modo de programación sobre cada tipo de base de datos, no presenta, como en otros casos, la misma nomenclatura. PHP utiliza funciones de nombre genérico, pero precedidas normalmente por el nombre del sistema de base de datos, de modo que las funciones que ofrece el lenguaje para el acceso a cada tipo de base de datos son diferentes.
Un ejemplo sencillo de lo que puede ser una conexión a MySQL desde PHP es el siguiente:
<?php // Conectamos con MySQL $conexion = mysql_connect("host","usuario","passwd_bbdd") or die ("Fallo en el establecimiento de la conexion."); // Seleccionamos la base de datos a usar mysql_select_db("test") or die("Error en la seleccion de la base de datos."); // ////////////////////////////////////////////////////// // // Aqui insertaremos las consultas sobre la base de datos // // ////////////////////////////////////////////////////// // // Cerramos la conexión con MySQL mysql_close($conexion); ?> |
Si lo que hemos creado es una aplicación para que sea ejecutada desde un terminal, podemos ejecutarlo mediante el siguiente codigo, de lo contrario, podremos probarlo via Web y Apache.
root@ubuntu:~# php conexion_bbdd.php |
Conexión a MySQL desde App Java
A continuación ponemos un ejemplo sencillo de una conexión a MySQL desde Java.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | /* * PruebaMySQL.java * * Programa de prueba para conectar a una base de datos de MySQL. * Se presupone que el servidor de base de datos esta arrancado, disponible * y en el puerto por defecto. * El usuario y password de conexion la base de datos debe cambiarse. * En la base de datos se supone que hay una base de datos llamada test y que * tiene una tabla persona con tres campos, de esta manera: * mysql> create database test; * mysql> use test; * mysql> create table persona (id smallint auto_increment, nombre varchar(60), * nacimiento date, primary key(id)); */ import java.sql.*; /** * Clase de prueba de conexion una base de datos MySQL */ public class PruebaMySQL { /** * Crea una instancia de la clase MySQL. */ public PruebaMySQL() { // Se mete todo en un try por los posibles errores de MySQL try { // Se registra el Driver de MySQL DriverManager.registerDriver(new org.gjt.mm.mysql.Driver()); // Se obtiene una conexion la base de datos. Hay que cambiar // el usuario "usuario" y la clave "passwd_bbdd" por las // adecuadas a la base de datos que estemos usando. Connection conexion = DriverManager.getConnection ( "jdbc:mysql://localhost/test", "usuario", "passwd_bbdd"); // Se crea un Statement, para realizar la consulta Statement s = conexion.createStatement(); // Se realiza la consulta. Los resultados se guardan en el // ResultSet rs ResultSet rs = s.executeQuery ("select * from persona"); // Se recorre el ResultSet, mostrando por pantalla los resultados. while (rs.next()) { System.out.println (rs.getInt ("Id") + " " + rs.getString (2)+ " " + rs.getDate(3)); } // Se cierra la conexion la base de datos. conexion.close(); } catch (Exception e) { e.printStackTrace(); } } /** * Metodo principal, instancia una clase PruebaMySQL * * @param args the command line arguments */ public static void main(String[] args) { new PruebaMySQL(); } } |
Posteriormente, podemos compilar el codigo y probarlo mediante los siguientes comandos.
root@ubuntu:~# javac PruebaMySQL.java root@ubuntu:~# java PruebaMySQL |
Instalar Apache Tomcat 7 y driver JDBC para MySQL en Ubuntu
En esta ocasión, vamos a instalar Apache Tomcat con soporte JDBC para MySQL. La instalación es muy sencilla, y vamos a partir de que ya tenemos Java instalado, como hemos comentado en la entrada de Instalar Java 7 de Oracle en Ubuntu via PPA.
Para ello ejecutamos como root el siguiente comando:
root@ubuntu:~# apt-get install tomcat7 |
A continuación, vamos a instalar el driver JDBC de MySQL, que por suerte lo podemos encontrar dentro de los repositorios de Ubuntu.
root@ubuntu:~# apt-get install libmysql-java |
Por último, debemos cambiar el CLASSPATH de Java para que encuentre la libreria JDBC y nuestras aplicaciones Java puedan realizar la conexión al servidor MySQL sin problemas. Para ello editaremos el archivo de variables de entorno, que en Ubuntu se encuentra en /etc/environment
root@ubuntu:~# vi /etc/environment |
Y añadimos lo siguiente:
1 2 | CLASSPATH=".:/usr/share/java/mysql-connector-java.jar" JAVA_HOME="/usr/lib/jvm/java-7-oracle/jre/bin" |
Ahora tan solo hay que reiniciar la maquina para ver si todo funciona correctamente, o si no queremos reiniciar, cargamos la variable CLASSPATH en el terminal de la siguiente forma:
root@ubuntu:~# export CLASSPATH="$CLASSPATH:/usr/share/java/mysql-connector-java.jar:." |
Ahora nuestro servidor Tomcat ya estaría funcionando y escuchando en el puerto 8080. La ruta local del servidor donde se desplegaran las aplicaciones es /var/lib/tomcat7/webapps.
NOTA IMPORTANTE: Aunque Tomcat 7 viene mas seguro por defecto que en versiones anteriores, deberiamos configurar los usuarios y contraseñas para acceder al Manager. El archivo en cuestión se localiza en /etc/tomcat7/tomcat-users.xml y con todo cambio que hagamos en la configuración, tendremos que reiniciar el servicio.
Instalar Apache2 y PHP con soporte MySQL en Ubuntu
La instalación del servidor Web Apache con soporte para PHP y a su vez, con MySQL, es bien sencilla. Tan solo tenemos que ejecutar los siguientes comandos en un Terminal como root:
root@ubuntu:~# apt-get install apache2 php5 php5-mysql |
De esta sencilla forma, ya tenemos instalado todo lo necesario para empezar a montar una pagina web con PHP y ademas poder hacer la conexión contra una Base de Datos MySQL.
La ruta por defecto para desplegar las aplicaciones es /var/www. En otra ocasión explicaremos como cambiar todos estos parámetros e incluso crear VirtualHost’s.
Instalar Java 7 de Oracle en Ubuntu via PPA
A continuación se detalla como instalar el paquete de Oracle que nos proporciona Java 7, incluyendo el JRE, el JDK y el plugin para el navegador.
Lo primero de todo es añadir los repositorios de PPA (Personal Packages Archives) en Ubuntu (versiones 13.10, 13.04, 12.10, 12.04 y 10.04), después actualizar la lista de paquetes de los repositorios y por ultimo instalar el paquete en cuestión. Para ello usaremos los siguientes comandos:
root@ubuntu:~# add-apt-repository ppa:webupd8team/java root@ubuntu:~# apt-get update root@ubuntu:~# apt-get install oracle-java7-installer |
Despues de ejecutar estos comandos, podemos comprobar que tenemos Java 7 correctamente instalado ejecutando:
root@ubuntu:~# java -version java version "1.7.0_40" Java(TM) SE Runtime Environment (build 1.7.0_40-b43) Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode) |
¿Por qué hay que realizar estos pasos y no ejecutamos directamente un apt-get install? Lo más probable es que no necesitemos Oracle Java en absoluto, pero podemos vernos en la necesidad de instalarlo y esto es un problema, ya que fue retirado de los repositorios «partner» por la revocación de la anterior licencia de distribuidor de Java (JDL).
Alternativamente, podemos instalar OpenJDK que nos proporcionara lo mismo que instalar Java de Oracle. Se puede hacer la instalación instalando el paquete openjdk-7-jdk.
root@ubuntu:~# apt-get install openjdk-7-jdk |
Instalación y configuración simple de MySQL en Ubuntu
Lo primero de todo, y como ya hemos aprendido en la entrada anterior, para instalar paquetes en Debian o Ubuntu, utilizaremos apt-get. Hoy vamos a instalar un servidor de Bases de Datos para despues poder conectarnos a ella mediante PHP o Java, por ejemplo.
Para ello ejecutamos lo siguiente:
root@ubuntu:~# apt-get install mysql-server |
A continuación nos mostrara la lista de dependencias que se van a instalar, las cuales aceptamos y continuamos. Una vez que el proceso de descarga de paquetes haya finalizado y comience el proceso de configuración de los mismos, nos pedira la clave de root (administrador) de MySQL. Tecleamos una pero que no se nos olvide. En otra ocasión escribiremos como poder cambiar la contraseña de root de MySQL en el caso de que se nos olvide.
Para probar que todo funciona correctamente, podemos conectarnos con el cliente MySQL que se ha instalado automaticamente al instalar el servidor, ejecutando lo siguiente:
root@ubuntu:~# mysql -u root -h localhost -p |
Enter password: [introducimos el password] Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 43 Server version: 5.5.32-0ubuntu0.13.04.1 (Ubuntu) Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> |
Nos pedira el password y ahora ya podemos ejecutar nuestras sentencias SQL desde la linea de comandos.
Una cosa que podemos hacer a mayores, y que nos puede venir bien en algunas ocasiones, es hacer que el servidor MySQL escuche en todas las direcciones IP y no solo en localhost, permitiendo de esta manera que se pueda acceder a nuestro servidor de Bases de Datos desde cualquier lugar del mundo, siempre y cuando creemos usuarios de MySQL que tengan esos permisos, cosa que tambien explicaremos.
Lo primero es editar el archivo /etc/mysql/my.cnf con nuestro editor favorito.
root@ubuntu:~# vi /etc/mysql/my.cnf |
Y posteriormente, buscamos la linea en la que pone bind-adress (sobre la línea 47 aproximadamente), y podemos comentarla o poner la IP 0.0.0.0 para que escuche en todas las direcciones IP, o podemos ponerla una IP especifica que tenga la maquina para que de esta manera solo se pueda acceder mediante dicha IP.
45 46 47 | # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 0.0.0.0 |
Una vez hecho cambios en el archivo de configuración, deberemos reiniciar el servicio:
root@ubuntu:~# service mysql restart |
Ahora, ya podemos volver a entrar al servidor MySQL con el comando que hemos explicado mas arriba, y ejecutar la siguiente sentencia para dar permisos a un usuario acceder a una Base de Datos.
mysql> GRANT ALL PRIVILEGES ON test.* TO usuario@'%' IDENTIFIED BY 'password'; |
OJO! Con esa sentencia. Aunque en alguna ocasión nos pueda venir genial debido a que el cliente con el que nos conectamos al servidor tiene IP dinamica, lo que aquí estamos haciendo es permitir al usuario identificado con ese password, que acceda con total privilegios a la base de datos test desde cualquier ubicación. Quizas son demasiadas facilidades para que si alguien con mala intención ataca nuestro servidor de bases de datos, y a su vez, no hemos puesto una contraseña fuerte ni securizado bien, pueda entrar y robarnos datos.
Es por ello por lo que aconsejamos que el servidor MySQL escuche solo en las IPs por las que recibe conexiones, y dar privilegios a los usuarios a tan solo las IPs por las que se van a recibir esas conexiones.