informatica:linux:escaner
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | Next revisionBoth sides next revision | ||
informatica:linux:escaner [2012/06/08 16:31] – javi | informatica:linux:escaner [2012/06/08 16:33] – javi | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ====== |
- | virtualizacion | + | sane scanner escaner gscan2pdf scanadf scanimage |
- | http:// | + | Aquí voy a recopilar toda la información relativa a la digitalización de imágenes en linux |
- | ===== Instalar | + | ===== scanadf |
- | 1. Entrar en la BIOS del sistema y asegurarse de que el soporte de virtualización está activado | + | scanadf -v --source ADF --mode Color |
- | 2. Instalar un sistema GNU/Linux reciente (yo pruebo con Debian 6.x= | + | gscan2pdf pdf scanner sane xsane hp |
- | 3. Comprobar que el sistema operativo soporta virtualizacion: | + | Herramienta gráfica para digitalizar documentos y convertirlos, |
- | sudo egrep ' | + | Una tabla orientativa para tamaños, resoluciones... |
- | En caso de que SI soporte virtualizacion veremos lo siguiente: | + | ^ Tipo ^ Limpiar imágenes ^ Modo de escaneo ^ Resolución |
- | < | + | | Texto | No | Color | 100 | 103 | 1Mb | |
- | flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm lahf_lm tpr_shadow vnmi flexpriority | + | | Texto | No | Color | 200 | 206 | 6Mb | |
- | flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm lahf_lm tpr_shadow vnmi flexpriority | + | |
- | </ | + | |
- | Con la palabra | + | (1) Una vez digitalizadas las imágenes, pulsar |
- | 4. Instalar los siguientes paquetes: | + | El documento digitalizado tiene un tamaño de 825x1138px |
- | sudo aptitude install qemu-kvm libvirt-bin virtinst qemu-utils | + | ===== Manual ===== |
- | **Nota**: qemu-utils es necesario para exportar de discos raw a qcow2 | + | No se por que gscan2pdf me junta 2 paginas en 1 cuando uso ADF Duplex, asi que he escrito este guion: |
- | + | ||
- | 5. Anyadir el usuario X al grupo: | + | |
- | + | ||
- | sudo adduser | + | |
- | + | ||
- | 6. Comprobar | + | |
< | < | ||
- | ps ax | grep libvirt | + | #!/bin/bash |
- | 4149 ? Sl | + | |
- | </ | + | |
+ | RESOLUTION=" | ||
+ | AUX_DIR="/ | ||
+ | SCANNER=" | ||
- | ===== Crear VM desde la linea de comando (probar) | + | STRING=`scanimage -L | grep $SCANNER | cut -d " " -f2` |
+ | DEVICE=${STRING/ | ||
+ | DEVICE=${DEVICE/ | ||
+ | SCAN_FILE_EXT=" | ||
+ | PIXELS_HEIGHT_DINA4=" | ||
+ | COUNTER=1 | ||
+ | SCAN_FILE_NAME=" | ||
+ | LIST_FILES_CONCATENATE="" | ||
+ | FINAL_FILE=" | ||
+ | WIDTH=" | ||
+ | HEIGHT=" | ||
+ | PER_WIDTH=" | ||
+ | PER_HEIGHT=" | ||
- | Lanzar los comandos desde el hipervisor. | + | rm -fr $AUX_DIR |
+ | mkdir $AUX_DIR | ||
+ | cd $AUX_DIR | ||
+ | scanimage -d " | ||
- | Debian estable desde red configurada con NAT, 512MB de RAM y 2 GB de disco duro: | + | cd $AUX_DIR |
+ | for f in $AUX_DIR* | ||
+ | do | ||
+ | file=`basename $f` | ||
+ | convert $file -resize $PER_WIDTH%x$PER_HEIGHT% file_reduced.pnm | ||
- | < | + | if [ `expr $COUNTER % 2` -eq 0 ] |
- | virt-install \ | + | |
- | -n vm1 \ | + | |
- | -r 512 \ | + | |
- | --vcpus=2 \ | + | else |
- | --os-variant=debiansqueeze \ | + | mv file_reduced.pnm $SCAN_FILE_NAME$COUNTER.pnm |
- | --disk / | + | fi |
- | --nographics \ | + | |
- | --network user \ | + | |
- | -l http://ftp.debian.org/ | + | |
- | -x console=ttyS0, | + | |
- | </ | + | |
- | Debian estable desde red configurada con bridge, 512MB de RAM y 2 GB de disco duro: | + | COUNTER=`expr $COUNTER + 1` |
+ | done | ||
- | < | + | convert $LIST_FILES_CONCATENATE $FINAL_FILE |
- | virt-install \ | + | |
- | -n vm1 \ | + | |
- | -r 512 \ | + | |
- | --vcpus=2 \ | + | |
- | --os-variant=debiansqueeze \ | + | |
- | --disk / | + | |
- | --nographics \ | + | |
- | --bridge br0 \ | + | |
- | -l http:// | + | |
- | -x console=ttyS0, | + | |
</ | </ | ||
- | |||
- | |||
- | vmbuilder | ||
- | |||
- | http:// | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ===== Administrar KVM (y VM) desde una GUI en el cliente ===== | ||
- | |||
- | Escenario: NO quiero instalar las X en el hipervisor, y quiero administrar gráficamente el hipervisor y las máquinas virtuales desde otra máquina (cliente) con las X instaladas | ||
- | |||
- | 1. (Hipervisor) Instalar los siguientes paquetes: | ||
- | |||
- | sudo aptitude update; sudo aptitude install netcat socat -R | ||
- | |||
- | 2. (Hipervisor) Crear el siguiente archivo: | ||
- | |||
- | sudo vim / | ||
- | |||
- | Con el siguiente contenido: | ||
- | |||
- | #!/bin/bash | ||
- | socat - unix-client: | ||
- | |||
- | 3. (Hipervisor) Darle permisos | ||
- | |||
- | sudo chmod +x / | ||
- | |||
- | 4. (Cliente) Instalar paquetes: | ||
- | |||
- | sudo aptitude update; sudo aptitude install virt-manager ssh-askpass -R | ||
- | |||
- | 5. (Cliente) Conectarse al hipervisor: | ||
- | |||
- | virt-manager -c qemu+ssh:// | ||
- | |||
- | |||
- | ===== Conectarse a la consola de VM sin GUI ===== | ||
- | |||
- | 1. (VM) Editar | ||
- | |||
- | sudo vim / | ||
- | |||
- | Y anyadir: | ||
- | |||
- | T0: | ||
- | |||
- | 2. (VM) Editar | ||
- | |||
- | sudo vim / | ||
- | |||
- | Y dejar la linea tal que asi: | ||
- | |||
- | GRUB_CMDLINE_LINUX=" | ||
- | |||
- | 3. (VM) Recargar grub: | ||
- | |||
- | sudo update-grub | ||
- | |||
- | 4. (Hipervisor) Conectarse a la consla de la VM: | ||
- | |||
- | < | ||
- | sudo virsh console template | ||
- | |||
- | Connected to domain template | ||
- | Escape character is ^] | ||
- | </ | ||
- | |||
- | Toca un tecla (por ejemplo enter) y aparecera el prompt: | ||
- | |||
- | < | ||
- | Debian GNU/Linux 6.0 template ttyS0 | ||
- | |||
- | template login: | ||
- | </ | ||
- | |||
- | 5. Para finalizar la conexion CTRL + ] | ||
- | |||
- | ===== Comandos varios ===== | ||
- | |||
- | * Listar todas las Maquinas Virtuales (VM): | ||
- | |||
- | < | ||
- | virsh list --all | ||
- | | ||
- | ---------------------------------------------------- | ||
- | | ||
- | </ | ||
- | |||
- | * Eliminar por completo una VM: | ||
- | |||
- | < | ||
- | virsh undefine vm2 | ||
- | Domain vm2 has been undefined | ||
- | </ | ||
- | |||
- | |||
- | |||
- | |||
- | ===== Salir de la consola (virt-manager) ===== | ||
- | |||
- | CTRL + ALT + F7 | ||
- | |||
- | |||
- | ===== Errores ===== | ||
- | |||
- | * **Cannot recv data: Host key verification failed. : Connection reset by peer** | ||
- | |||
- | Sucede al lanzar: | ||
- | |||
- | virt-manager -c qemu+ssh:// | ||
- | |||
- | **Solucion**: | ||
- | |||
- | ssh usuario@hipervisor | ||
- | |||
- | * **Error starting network ' | ||
- | |||
- | Suce al intentar activar o crear una nueva red virtual desde virt-manager debido a un bug de libvirt. | ||
- | |||
- | **Solucion**: | ||
- | |||
- | 1. Editar: | ||
- | |||
- | sudo vim / | ||
- | |||
- | Y anyadir la siguiente linea: | ||
- | |||
- | deb http:// | ||
- | |||
- | 2. Actualizar la cache de paquetes: | ||
- | |||
- | sudo aptitude update | ||
- | |||
- | 3. Instalar la version de backports de los siguientes paquetes: | ||
- | |||
- | sudo aptitude -t squeeze-backports install libvirt-bin libvirt0 python-libvirt dnsmasq-base -R | ||
- | |||
- | 4. Reiniciar el demonio libvirtd: | ||
- | |||
- | sudo / | ||
- | |||
- | |||
- | ===== Renombrar VM ===== | ||
- | |||
- | < | ||
- | sudo su - | ||
- | |||
- | cd / | ||
- | |||
- | virsh dumpxml dns-1.test.jj.com > dns-1.dev.jj.com.xml | ||
- | |||
- | Apagar la VM si no lo esta | ||
- | |||
- | Asegurar que NO tiene snapshot | ||
- | |||
- | virsh undefine dns-1.test.jj.com | ||
- | |||
- | vim dns-1.dev.jj.com.xml | ||
- | |||
- | (cambios) | ||
- | |||
- | virsh define dns-1.dev.jj.com.xml | ||
- | |||
- | </ | ||
- | |||
- | ====== Discos ====== | ||
- | |||
- | Acronimos: | ||
- | |||
- | | LVM | Logical Volume Manager | | ||
- | | PV | Physical Volume | | ||
- | | VG | Volume Group | | ||
- | | LV | Logical Volume | | ||
- | |||
- | |||
- | ===== (qcow2 + LVM) agrandar disco ===== | ||
- | |||
- | La estrategia es extender el disco, crear una nueva particion en el nuevo espacio, crear un PV, anyadirlo al VG, extender el LV y redimensionar el sistema de archivos (EXT4...). | ||
- | |||
- | Para este ejemplo clonaremos una VM pre-existente (template_lvm) de 2GB a una nueva (test7). Necesitaremos por comodidad tener habilitada la consola ([[kvm# | ||
- | |||
- | 1. Clonar la VM. Original: template_lvm, | ||
- | |||
- | sudo virt-clone --connect=qemu:/// | ||
- | Clon ' | ||
- | |||
- | 2. Extender el disco: | ||
- | |||
- | sudo qemu-img resize / | ||
- | Image resized. | ||
- | |||
- | 3. Arrancar la nueva VM: | ||
- | |||
- | sudo virsh start test7 | ||
- | Domain test7 started | ||
- | |||
- | 4. Conectarse a la consola de la VM: | ||
- | |||
- | < | ||
- | sudo virsh console test7 | ||
- | [sudo] password for usuario: | ||
- | Connected to domain test7 | ||
- | Escape character is ^] | ||
- | |||
- | Debian GNU/Linux 6.0 template ttyS0 | ||
- | |||
- | template login: | ||
- | </ | ||
- | |||
- | 5. Comprobar que el Sistema Operativa ve el nuevo espacio (10 GB): | ||
- | |||
- | sudo fdisk -l | ||
- | |||
- | < | ||
- | Disk /dev/vda: 10.7 GB, 10737418240 bytes | ||
- | 16 heads, 63 sectors/ | ||
- | Units = cylinders of 1008 * 512 = 516096 bytes | ||
- | Sector size (logical/ | ||
- | I/O size (minimum/ | ||
- | Disk identifier: 0x00031f27 | ||
- | |||
- | | ||
- | / | ||
- | Partition 1 does not end on cylinder boundary. | ||
- | / | ||
- | Partition 2 does not end on cylinder boundary. | ||
- | / | ||
- | |||
- | Disk /dev/dm-0: 1753 MB, 1753219072 bytes | ||
- | 255 heads, 63 sectors/ | ||
- | Units = cylinders of 16065 * 512 = 8225280 bytes | ||
- | Sector size (logical/ | ||
- | I/O size (minimum/ | ||
- | Disk identifier: 0x00000000 | ||
- | |||
- | Disk /dev/dm-0 doesn' | ||
- | |||
- | Disk /dev/dm-1: 134 MB, 134217728 bytes | ||
- | 255 heads, 63 sectors/ | ||
- | Units = cylinders of 16065 * 512 = 8225280 bytes | ||
- | Sector size (logical/ | ||
- | I/O size (minimum/ | ||
- | Disk identifier: 0x00000000 | ||
- | |||
- | Disk /dev/dm-1 doesn' | ||
- | </ | ||
- | |||
- | 6. Crear una nueva particion | ||
- | |||
- | sudo fdisk /dev/vda | ||
- | |||
- | 2 opciones: | ||
- | |||
- | a) DOS-compatible mode | ||
- | |||
- | n | ||
- | p | ||
- | 3 | ||
- | 4160 | ||
- | Enter | ||
- | w | ||
- | |||
- | a) Deshabilitar DOS-compatible mode (RECOMENDADO) | ||
- | |||
- | c | ||
- | u | ||
- | n | ||
- | p | ||
- | 3 | ||
- | 4192256 | ||
- | enter | ||
- | w | ||
- | |||
- | En 'First cylinder' | ||
- | |||
- | 7. Aqui hay que reiniciar para que la particion sea usable por el Sistema Operativo: | ||
- | |||
- | sudo shutdown -r now | ||
- | |||
- | 8. Crear un PV con la nueva particion: | ||
- | |||
- | sudo pvcreate /dev/vda3 | ||
- | Physical volume "/ | ||
- | |||
- | 9. Anyadir ese PV al VG. Primero obtener el nombre del VG y del PV: | ||
- | |||
- | sudo vgscan | ||
- | |||
- | < | ||
- | Reading all physical volumes. | ||
- | Found volume group " | ||
- | </ | ||
- | |||
- | sudo pvscan | ||
- | |||
- | < | ||
- | PV / | ||
- | PV / | ||
- | Total: 2 [9.76 GiB] / in use: 1 [1.76 GiB] / in no VG: 1 [8.00 GiB] | ||
- | </ | ||
- | |||
- | Anyadimos el PV '/ | ||
- | |||
- | sudo vgextend template /dev/vda3 | ||
- | Volume group " | ||
- | |||
- | 10. Extendemos el VL. Primero los listamos: | ||
- | |||
- | sudo lvscan | ||
- | |||
- | ACTIVE | ||
- | ACTIVE | ||
- | |||
- | Vamos a extender el LV '/ | ||
- | |||
- | sudo lvextend -l +100%FREE / | ||
- | Extending logical volume root to 9.63 GiB | ||
- | Logical volume root successfully resized | ||
- | |||
- | 11. Extendemos el sistema de archivos. El proceso tarda 1 minuto para 8GB: | ||
- | |||
- | sudo resize2fs / | ||
- | |||
- | < | ||
- | resize2fs 1.41.12 (17-May-2010) | ||
- | Filesystem at / | ||
- | old desc_blocks = 1, new_desc_blocks = 1 | ||
- | Performing an on-line resize of / | ||
- | The filesystem on / | ||
- | </ | ||
- | |||
- | Comprobamos que todo ha ido bien: | ||
- | |||
- | df -h | ||
- | |||
- | < | ||
- | Filesystem | ||
- | / | ||
- | 9.5G 565M 8.5G 7% / | ||
- | tmpfs | ||
- | udev 244M 108K 244M 1% /dev | ||
- | tmpfs | ||
- | / | ||
- | </ | ||
- | |||
- | ====== Snapshots ====== | ||
- | |||
- | http:// | ||
- | |||
- | Caracteristicas/ | ||
- | |||
- | * Virt-manager (0.9.1) NO soporta snapshots, por lo que tenemos que hacerlo desde la lina de comandos | ||
- | * Solo el formato de disco virtual qcow2 soporta snapshots | ||
- | * Se puede tomar un snapshot con la VM corriendo (2GB disco tarda 3m14.810s) | ||
- | * **Se puede restaurar un snapshot con la VM corriendo** (creo que Virtualbox NO lo soporta) | ||
- | |||
- | |||
- | ===== Tomar snapshot / migrar formato de disco raw a qcow2 ===== | ||
- | |||
- | 1. Conectarse al hipervisor. Yo por simplicidad lo hago a traves de SSH, pero a lo mejor es posible conectarse desde el cliente con un virsh -c URL | ||
- | |||
- | ssh usuario@hipervisor | ||
- | |||
- | 2. Crear un archivo .xml con informacion sobre el snapshot: | ||
- | |||
- | sudo vim / | ||
- | |||
- | Con el siguiente contenido: | ||
- | |||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | |||
- | Grabar y salir | ||
- | |||
- | 3. **IMPORTANTE**: | ||
- | |||
- | sudo virsh edit test2 | ||
- | |||
- | De la informacion que muestra nos fijamos en el disco: | ||
- | |||
- | < | ||
- | ... | ||
- | <disk type=' | ||
- | <driver name=' | ||
- | <source file='/ | ||
- | <target dev=' | ||
- | <address type=' | ||
- | </ | ||
- | ... | ||
- | </ | ||
- | |||
- | Si intentamos tomar el snapshot veremos que NO lo soporta (:q! para salir de la ventana de edicion): | ||
- | |||
- | sudo virsh snapshot-create test2 / | ||
- | error: Requested operation is not valid: Disk '/ | ||
- | |||
- | Por lo que volvemos a editar: | ||
- | |||
- | sudo virsh edit test2 | ||
- | |||
- | Y dejamos la seccion de disco tal que asi (solo cambiar qcow2): | ||
- | |||
- | < | ||
- | ... | ||
- | <disk type=' | ||
- | <driver name=' | ||
- | <source file='/ | ||
- | <target dev=' | ||
- | <address type=' | ||
- | </ | ||
- | ... | ||
- | </ | ||
- | |||
- | Grabar y salir | ||
- | |||
- | Domain test2 XML configuration edited. | ||
- | |||
- | **TODO**: quiza hay un comando para cambiar el formato del disco | ||
- | |||
- | 4. Convertir el disco de formato raw a qcow2. La VM debe estar apagada | ||
- | |||
- | sudo qemu-img convert -f raw -O qcow2 -o preallocation=metadata / | ||
- | sudo chown libvirt-qemu: | ||
- | |||
- | 5. Volver a tomar el snapshot: | ||
- | |||
- | sudo virsh snapshot-create test2 / | ||
- | Domain snapshot test2_snapshot_01_160520121140 created from '/ | ||
- | |||
- | Para verlo: | ||
- | |||
- | < | ||
- | sudo virsh snapshot-list test2 | ||
- | | ||
- | ------------------------------------------------------------ | ||
- | | ||
- | </ | ||
- | |||
- | **RENDIMIENTO** si tomamos el snapshot de una VM corriendo (2GB de disco duro) me tomo 03' | ||
- | |||
- | 6. Arrancar la VM y verificar que funciona correctamente | ||
- | |||
- | sudo virsh start test2 | ||
- | Domain test2 started | ||
- | |||
- | 7. Si ha arrancado correctamente, | ||
- | |||
- | sudo rm -fr / | ||
- | |||
- | ===== Script para tomar snapshot ===== | ||
- | |||
- | * Requiere python 2 | ||
- | * Se tiene que ejecutar como root | ||
- | * Ejecutar 'sudo ./ | ||
- | |||
- | < | ||
- | # | ||
- | |||
- | import sys, commands, time, os, datetime | ||
- | |||
- | # Variables | ||
- | |||
- | path_snapshots = '/ | ||
- | header = [' | ||
- | snapshot_template = """ | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | """ | ||
- | |||
- | # Code | ||
- | |||
- | if not os.geteuid() == 0: | ||
- | print "You aren't root. Goodbye." | ||
- | sys.exit() | ||
- | |||
- | output = commands.getoutput(' | ||
- | print output | ||
- | list_vm = [line for line in output.split(' | ||
- | row_number_list_vm = int(raw_input(' | ||
- | | ||
- | |||
- | line = list_vm[row_number_list_vm-1] | ||
- | print 'You selected " | ||
- | |||
- | description = raw_input(' | ||
- | |||
- | aux = line.split(' | ||
- | vm_name = aux[len(aux)-1] | ||
- | snapshot_name = vm_name + ' | ||
- | |||
- | snapshot_xml_path = path_snapshots + snapshot_name + ' | ||
- | snapshot_xml = snapshot_template.replace(' | ||
- | |||
- | file = open(snapshot_xml_path, | ||
- | file.write(snapshot_xml) | ||
- | file.close() | ||
- | |||
- | print " | ||
- | print datetime.datetime.today() | ||
- | |||
- | output = commands.getstatusoutput(' | ||
- | if output[0] != 0: | ||
- | print 'Error %s' %(str(output)) | ||
- | |||
- | print datetime.datetime.today() | ||
- | </ | ||
- | |||
- | ===== Restaurar snapshot ===== | ||
- | |||
- | 1. Conectarse al hipervisor. Yo por simplicidad lo hago a traves de SSH, pero a lo mejor es posible conectarse desde el cliente con un virsh -c URL | ||
- | |||
- | ssh usuario@hipervisor | ||
- | |||
- | 2. Listar las snapshots que tenemos (nuestra VM se llama ' | ||
- | |||
- | < | ||
- | sudo virsh snapshot-list test2 | ||
- | | ||
- | ------------------------------------------------------------ | ||
- | | ||
- | | ||
- | | ||
- | </ | ||
- | |||
- | 3. Restaurar por ejemplo segunda (test2_snapshot_02): | ||
- | |||
- | sudo virsh snapshot-revert test2 test2_snapshot_02 | ||
- | |||
- | Tarda un par de segundos | ||
- | |||
- | ===== Borrar snapshot ===== | ||
- | |||
- | Los snapshots soportan como parametros --children, pero si no se le ha pasado en el momento de tomarlo, son considerados totalmente independientes, | ||
- | |||
- | sudo virsh snapshot-delete test2 test2_snapshot_02 | ||
- | Domain snapshot test2_snapshot_02 deleted | ||
- | |||
- | |||
- | ====== Clonar ====== | ||
- | |||
- | * Se puede hacer tanto desde GUI (no lo he probado) como desde linea de comandos | ||
- | * Requiere pausar (mejor) o apagar la VM | ||
- | * Para una maquina de 2 GB de disco duro .qcow2 provisionado por completo el proceso completo tarda unos 20" | ||
- | |||
- | 1. Conectar al hipervisor | ||
- | |||
- | ssh USUARIO@HIPERVISOR | ||
- | |||
- | 2. Pausar la VM a clonar. Durante este tiempo consume recursos pero NO es accesible | ||
- | |||
- | sudo virsh suspend template | ||
- | Domain template suspended | ||
- | |||
- | 3. Clonar la VM: | ||
- | |||
- | < | ||
- | sudo virt-clone | ||
- | Asignando ' | ||
- | |||
- | Clon ' | ||
- | </ | ||
- | |||
- | 4. Reanudar la VM: | ||
- | |||
- | sudo virsh resume template | ||
- | Domain template resumed/ |
informatica/linux/escaner.txt · Last modified: 2021/03/01 10:41 by jose