martes, 2 de abril de 2013

Cuando no se puede escribir a un dispositivo de bloques particionado con NTFS...

Intentando hacer un backup de mi /home, esta mañana me encontré con que no podía escribir a mi disco rígido portátil. Este último estaba formateado como NTFS, tal como muchos dispositivos extraíbles hoy en día.
Cuando esto sucede, se puede montar el dispositivo y ver sus contenidos, pero no escribir en el mismo, salvo que... se tenga el paquete ntfs-3g instalado:
 gacanepa@Gabriel-PC:~$ aptitude show ntfs-3g  
 Package: ntfs-3g               
 State: not installed  
 Version: 1:2010.3.6-1  
 Priority: optional  
 Section: otherosfs  
 Maintainer: Adam Cécile (Le_Vert) <gandalf@le-vert.net>  
 Uncompressed Size: 209 k  
 Depends: libc6 (>= 2.3), libntfs-3g75  
 Description: read-write NTFS driver for FUSE  
  The ntfs-3g driver is an open source, GPL licensed, third generation Linux NTFS  
  driver which was implemented by the Linux-NTFS project. It provides full  
  read-write access to NTFS, excluding access to encrypted files, writing  
  compressed files, changing file ownership, access right.   
  Technically it's based on and a major improvement to the third generation Linux  
  NTFS driver, ntfsmount. The improvements includes functionality, quality and  
  performance enhancements.   
  ntfs-3g is based on FUSE (userspace filesystem framework for Linux), thus you  
  will have to prepare fuse kernel module to be able to use it.   
  Fuse is available in any recent kernel. No need to prepare a kernel module if  
  you are already running Debian Etch kernel or newer.  
 Homepage: http://www.ntfs-3g.org/  
De otra manera, el dispositivo es montado con el módulo NTFS del kernel, que no brinda permisos de escritura.
Después de instalar dicho paquete, pude proceder a hacer el backup necesario en mi disco portátil.

viernes, 22 de marzo de 2013

Configurando NIS (Network Information Service) - Parte 2: El cliente

Continuando con la implementación de NIS, ahora pasamos a configurar un cliente que podrá utilizar la información contenida en /etc/passwd (situado en el servidor). Los detalles de cada operación se pueden ver en la primera parte (Configurando el servidor):

1) Instalar portmap.

2) Actualizar portmap.

3) Instalar y configurar NIS con el nombre de dominio elegido anteriormente.

4) Editar el archivo /etc/hosts agregando el nombre del servidor de NIS y su FQDN (Fully Qualified Domain Name) para resolver nombres en caso de no utilizar DNS o de una falla en dicho servicio:
192.168.0.10    debian  debian.gorditolinuxero.com.ar
5) Editar el archivo /etc/yp.conf
# ypserver ypserver.network.comdomain gorditolinuxero.com.ar server debian.gorditolinuxero.com.ar
(salvo la línea que está comentada, el resto debe ir en la misma línea)
6) Editar el archivo /etc/nsswitch.conf
passwd:         nis compatgroup:          nis compatshadow:         nis compat
7) Modificar los permisos por defecto del directorio /home (esto se puede retocar luego!) para que Nautilus (o el explorador de archivos que corresponda) y XWindows permitan a los usuarios loguearse mediante una interfaz gráfica: chmod 777 /home

LISTO :).

Configurando NIS (Network Information Service) - Parte 1: El servidor

Nota: La práctica desarrollada en este post está basada en Setting up NIS (Part 1 of 2): Configuring a NIS SERVER
NIS (Network Information Service = Servicio de Información de Red) permite distribuir la información contenida en los archivos /etc/passwd y /etc/groups de un servidor a todos los demás equipos de la red, haciendo que la misma parezca transparente para los usuarios; es decir, que toda la red se comporte como si fuera un solo equipo. También permite distribuir los datos de resolución de nombres contenidos en el archivo /etc/hosts del servidor cuando por la simplicidad de la red no se considere necesario la puesta en marcha de un servicio de DNS dedicado.
Originalmente, NIS fue desarrollado por Sun Microsystems bajo el nombre de Yellow Pages, pero debido a que Yellow Pages es una marca registrada de British Telecom, luego se le cambió el nombre; sin embargo, las siglas "yp" todavía se encuentran en varios de los comandos relacionados con NIS.
Funcionalmente, NIS utiliza demonios (servicios, o procesos no interactivos) y una base de datos para proveer autenticación centralizada en una arquitectura cliente-servidor en sistemas basados en Unix, como GNU/Linux, de manera similar que Active Directory en Microsoft Windows.
Una vez puesto en marcha NIS, es importante asegurarlo mediante cifrado y la configuración apropiada utilizando los archivos hosts.allow y hosts.deny.

PASOS PARA CONFIGURAR EL SERVIDOR (ejecutar los comandos como root o con privilegios de superusuario)

1) Instalar portmap: aptitude install portmap

2) Actualizar la configuración por defecto de portmap: update-rc.d portmap defaults 10
El comando update-rc.d nos permite automatizar el proceso de creación y borrado de enlaces a los scripts de inicio, con en fin de iniciar/parar servicios. El argumento "10" se utiliza para hacer que arranque antes que NIS, que según el listado del directorio /etc/rc2.d (correspondiente al nivel de ejecución o runlevel 2 que es con el que inicia Debian por defecto):
S15nis -> ../init.d/nis
Según el man page the update-rc.d:
Si  se  usa la opción defaults entonces update-rc.d creará enlaces para arrancar los servicios en los niveles de ejecución  2345  y  parar  los servicios  en  los  niveles  de  ejecución  016.  Por omisión todos los enlaces tendrán el código de secuencia 20, pero  esto  puede  cambiarse especificando  uno  o  dos argumentos NN.  Un argumento cambia el valor por omisión del código de secuencia tanto para los enlaces de  arranque como para los de parada, y si se proporcionan dos argumentos el primero cambia el código de los enlaces de arranque y  el  segundo  el  de  los enlaces de parada.
Si el comando anterior arroja el siguiente error:
insserv: warning: current start runlevel(s) (2 3 4 5 S) of script `portmap' overwrites defaults (2 3 4 5).
hay que ejecutar antes
update-rc.d -f portmap remove
para quitar el enlace simbólico de portmap al script de inicio (/etc/init.d/portmap), y luego recrearlo utilizando:
update-rc.d portmap defaults 10
3) Instalar NIS: aptitude install nis
Al realizar la instalación, se pedirá ingresar el nombre del dominio que se utilizará:


4) Editar el archivo /etc/defaults/nis: modificar las líneas indicadas con los cambios que sean necesarios

# Are we a NIS server and if so what kind (values: false, slave, master)?
NISSERVER=master

# Are we a NIS client?
NISCLIENT=false

5) Editar el archivo /etc/ypserv.securenets: modificar la línea indicada con los cambios que sean necesarios
# This line gives access to everybody. PLEASE ADJUST!
255.255.255.0   192.168.0.0

6) Editar el archivo /var/yp/Makefile: modificar la línea indicada con los cambios que sean necesarios
ALL =   passwd shadow group hosts rpc services netid protocols netgrp

7) Reiniciar portmap: service portmap restart

8) Reiniciar NIS: service nis restart

9) Invocar /usr/lib/yp/ypinit -m para construir la lista de los hosts que van a ser los servidores NIS en la red:

At this point, we have to construct a list of the hosts which will run NIS
servers.  debian.gorditolinuxero.com.ar is in the list of NIS server hosts.  Please continue to add
the names for the other hosts, one per line.  When you are done with the
list, type a <control D>.
next host to add:  debian.gorditolinuxero.com.ar
next host to add:

10) Agregar en el servidor los usuarios y los grupos que los clientes van a usar en toda la red. Esto se lleva a cabo mediante la creación común de usuarios, incluida la asignación de contraseñas.

11) Compilar los usuarios, los grupos, y las contraseñas en la base de datos de NIS: cd /var/yp; make

LISTO :). Ahora a configurar los clientes.

viernes, 15 de marzo de 2013

Configurar disposición de teclado en Debian Squeeze

1) Ejecutar con permisos administrativos el siguiente comando: dpkg-reconfigure keyboard-configuration. Se abrirá la pantalla para elegir el tipo de teclado que tenemos:


2) Presionando Enter en la pantalla anterior pasamos a la siguiente, en la que podremos elegir el layout o disposición de nuestro teclado. En "Other" hay una lista bastante extensa de opciones para escoger:


3) Nuevamente con Enter seguimos adelante para configurar a) el comportamiento de la tecla AltGr, y b) el seteo de una tecla de composición, que permite interpretar combinaciones de teclas para producir algún caracter no disponible en el teclado:



4) Reiniciar el equipo para que tome los cambios.

Para más información:

viernes, 8 de febrero de 2013

Ejecutar consulta SQL guardada en un archivo

Esta semana se presentó en mi trabajo la necesidad de hacer dos consultas a una base de datos Oracle (Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production) para crear un reporte de producción que permitiera visualizar ciertos campos no disponibles mediante el menú estándar en el sistema.
Estas son las dos consultas y los comentarios sobre lo que aprendí al escribirlas. Para ejecutar el contenido del archivo, se escribe @nombredearchivo.sql desde el prompt del frontend del RDBMS (Relational Database Management System).
Para bases MySQL (no hace mucho adquirida por Oracle), la sintaxis es parecida, aunque reemplazando "@" por la palabra clave "source": source nombredearchivo.sql.

PRIMER CONSULTA: Uso de la función TO_DATE() para comparar fechas y SPOOL/SPOOL OFF para guardar los resultados en un archivo de texto.


SEGUNDA CONSULTA: Uso de la función TRUNC(sysdate) para obtener los registros pertenecientes a un intervalo de tiempo fijo (pero configurable).


El sitio donde aprendí lo necesario para hacer estas consultas es Burleson Consulting. Se trata de una consultora que brinda soporte y aplicaciones de Oracle (aunque indican que no están afiliados con ellos).

lunes, 28 de enero de 2013

Montando un RAID1 (mirror) en Debian

RAID (Redundant Array of Inexpensive Disks) es una tecnología de almacenamiento que combina varios unidades de disco en una misma unidad lógica. Los datos se distribuyen en los discos en una de varias formas denominadas "Niveles RAID", dependiendo en los requisitos de redundancia y de rendimiento que se necesiten.

Los diferentes esquemas (o niveles) se nombran utilizando la palabra RAID seguida de un número (por ejemplo, RAID0, RAID1, etc); cada uno de ellos provee un balance diferente entre los objetivos principales: confiabilidad, disponibilidad, rendimiento, y capacidad. Los niveles RAID mayores que RAID0 proveen protección contra errores irrecuperables, tanto en sectores aislados como en todo el disco.

En RAID1 (espejo sin paridad), los datos se escriben idénticamente en dos unidades (generalmente, aunque se pueden utilizar más unidades), produciendo de esa manera un "conjunto espejo". Cuando se hace una petición de lectura, la información es devuelta por cualquiera de las dos unidades independientes que la contienen. De manera similar, cuando se escribe en el conjunto, se actualiza el estado de ambos discos. El RAID1 continúa operando mientras al menos una unidad que lo compone se mantiene en funcionamiento.
  • El RAID1 crea una copia exacta (o espejo) de un conjunto de datos en dos o más discos.
  • Puede ser tan grande como el más pequeño de sus discos.
  • El rendimiento de lectura se incrementa aproximadamente como múltiplo lineal del número de unidades (puede estar leyendo de manera simultánea dos datos diferentes en dos discos separados)
  • En algunos entornos 24x7, es posible "dividir" el espejo: marcar un disco como inactivo, hacer una copia de seguridad de dicho disco, y luego "reconstruir" el espejo. 
La herramienta que se utiliza para administrar los RAIDs en Linux es mdadm, y está disponible desde los repositorios de Debian:


Voy a utilizar las unidades sdc y sdd que se muestran en el siguiente listado:


PRIMER PASO: Creo las particiones en las unidades (se muestra solamente para /dev/sdd):


SEGUNDO PASO: Creo el array:


(el progreso de creación del raid1 puede verse leyendo el archivo /proc/mdstat). En el caso de que este archivo indique resync=PENDING, se puede forzar el build del RAID1 con el comando: mdadm --readwrite /dev/md0.


Y cuando ya está listo:


TERCER PASO: Formateo el RAID:


CUARTO PASO: Montar el RAID y verificaciones:

  1. Línea 1: Tiro un listado detallado del contenido de mi home. Se puede ver en la línea 12 que hay un directorio llamado raid1 que será donde montaré el dispositivo /dev/md0 recién formateado y que utilizaré como RAID1.
  2. Línea 20: Monto el RAID1. No es necesario especificar el tipo de sistema de archivos ya que lo formateé como ext3 en el TERCER PASO.
  3. Línea 21: Muestro los sistemas de archivos montados actualmente. Veo que /dev/md0 está montado en /home/gacanepa/raid1 (línea 33).
  4. Línea 34: Intento copiar el archivo cliente.tar dentro de raid1, pero recibo el mensaje de "Permiso denegado" (línea 35) debido a que el usuario root se convirtió en dueño de ese directorio al montar el dispositivo /dev/md0 en él. Cambio el usuario dueño y el grupo del directorio (línea 36) e intento realizar la operación nuevamente (37), sin problemas esta vez.
  5. Línea 39: Veo el contenido del directorio en cuestión y se puede ver que el archivo fue copiado al mismo.
  6. Línea 41: Salgo del directorio para desmontar el filesystem (42). Luego de hacerlo, vuelvo al mismo (43) y veo su contenido (44), el cual no muestra nada ya que el dispositivo fue desmontado, y es en el mismo donde reside el archivo que había copiado anteriormente.
  7. Línea 46: Vuelvo a montar el RAID y veo su contenido (48).
  8. Línea 51: Marco como fallado uno de los dispositivos que componen el RAID para simular una falla de hardware, y veo en /proc/mdstat (53) el estado actual del RAID ([_U] indica que la primera unidad del RAID está fallada).
  9. Línea 59: Quito ("remuevo físicamente") "en caliente" la unidad que presenta problemas. Aun así, el contenido del RAID no se modifica (68-69) y puede accederse a su contenido.
  10. Línea 70: Muestro el espacio ocupado y disponible en cada filesystem activo del equipo. En (78) puedo ver el detalle del RAID.
  11. Línea 79: Reemplazo la unidad que presentaba fallos con una de similares características y la vuelvo a agregar al conjunto, luego de lo cual comienza a resincronizarse nuevamente (85). Mientras tanto, el contenido del RAID continúa siendo accesible (89).


¿Qué puede salir mal?

1) Al intentar crear el RAID, uno de los dispositivos puede estar ocupado (siendo utilizado por un proceso). En este caso, se puede identificar dicho proceso mediante lsof | grep nombreDeDispositivo, y luego matarlo utilizando su PID con el comando kill PID (o kill -9 PID, si con el anterior se resiste ;).

2) Para que el RAID esté disponible al reiniciar el equipo (persistencia), se debe configurarlo mediante la siguiente línea del archivo /etc/default/mdadm:


Si además de tener disponible el arreglo, se desea montarlo cuando arranca el sistema, se le debe asignar un punto de montaje y sus correspondientes opciones en el archivo /etc/fstab.

Si a alguien se le ocurre (o se encuentre con) otro problema que pueda surgir, deje un comentario y lo vemos :).

jueves, 24 de enero de 2013

Instalación de GNU/Linux Mint 14 "Nadia"

Hasta el momento, tenemos la PC familiar en casa con dual boot: GNU/Linux Debian Squeeze y Windows 7. A este último sistema operativo lo uso muy de vez en cuando para programar en Visual C# y usar el SQL Management Studio por cuestiones de trabajo.

Hace un par de días me dio ganas de probar personalmente GNU/Linux Mint 14 "Nadia", que es la última versión de Mint, y el escritorio Cinnamon. Personalmente me considero más fanático de la consola, pero para el resto de la familia quise instalar una "linda" distro con una interfaz gráfica más "llamativa" o "user-friendly" que la que provee Debian.

PRIMER PASO: Documentación de aplicaciones agregadas luego de la instalación original y determinación de la necesidad de las mismas actualmente.
  • Teamviewer (asistencia remota) - Descarga (archivo .deb, v.7.0.9377) disponible desde aquí. Versión actual:
  • Google Chrome (navegador de Internet) - Descarga (archivo .deb) disponible desde aquí. Versión actual:
  • FileZilla (cliente ftp) - Disponible desde los repositorios
  • Sane (API para uso de escáneres) - Disponible desde los repositorios
  • Terminator (múltiples terminales en una misma ventana) - Disponible desde los repositorios
  • Aptitude (gestor de paquetes) - Disponible desde los repositorios
  • CUPS (Sistema Común de ImPresión de Unix) - Disponible desde los repositorios
  • Smb-cliente (cliente Samba) - Disponible desde los repositorios
  • Jedit (editor de archivos de texto) - Disponible desde los repositorios
 Como ejemplo, al buscar los paquetes que contienen la palabra "samba", obtuve lo siguiente:


(Una descripción de la información anterior puede encontrarse en man aptitude, y en este link)

SEGUNDO PASO: Backup de directorios seleccionados dentro de /home, y de los favoritos de Google Chrome (en formato html).



CONTINUARÁ...