Herramientas de usuario

Herramientas del sitio


tecnica:anotaciones_tecnicas

Tabla de Contenidos

Anotaciones técnicas generales

Por el equipo de AXR Sistemas de Informática

Particionamiento de Linux

RedHat - modificado por FMSI:

/dev/hda1 swap
/dev/hda2 swap (Dice Fede que esto disminuye el rendimiento y es innecesario)
/dev/hda3             46M  5.9M   37M  14% /boot
/dev/hda4             extended
/dev/hda5             509M   18M  466M   4% /tmp
/dev/hda6             243M   63M  167M  28% /
/dev/hda7             509M   17M  467M   4% /home (tamaño variable)
/dev/hda8             2.0G  566M  1.3G  30% /usr (en Trustix puede ser de 1GB)
/dev/hda9             2.0G   92M  1.7G   5% /var (tamaño variable)
/dev/hda10            2.4G   47M  2.2G   2% /datos (el resto del disco)

Gentoo:

/dev/hda1 swap
/dev/hda2 swap (Dice Fede que ésto disminuye el rendimiento y es innecesario)
/dev/hda3             46M  5.9M   37M  14% /boot
/dev/hda4             extended
/dev/hda5             509M   18M  466M   4% /tmp
/dev/hda6             243M   63M  167M  28% /
/dev/hda7             509M   17M  467M   4% /home (tamaño variable)
/dev/hda8             2.0G  566M  1.3G  30% /usr (en Trustix puede ser de 1GB)
/dev/hda9             2.0G   92M  1.7G   5% /var (tamaño variable)
/dev/hda10            2.4G   47M  2.2G   2% /datos (el resto del disco)

Mover archivos con un patrón utilizando rsync y manteniendo la estructura del árbol de directorios original en el destino

Este método permite “extraer” archivos que tengan un patrón, de entre otros, y mantener el árbol de directorios original. Lo usé en particular con una infección por malware, para dejar backup de los archivos encriptados, y luego restaurar los válidos desde el backup del día anterior.

rsync -av --remove-source-files --prune-empty-dirs --stats --include='*/' --include='*.mp3' --exclude='*' origen/ destino

Renombrar archivos con caracteres especiales de un charset a otro

A veces, migrando servidores Samba, surge el inconveniente de que los nombres de archivos pueden haber sido grabados en algún formato viejo como cp1250 o cp850 y es preciso renombrarlos en forma masiva utilizando otro charset, por ejemplo UTF8. Hay un comando maravilla en Linux que se ocupa de eso, de manera recursiva.

El comando siguiente informa qué archivos tienen caracteres especiales en el charset dado sin cambiar nada:

convmv -f cp1250 -t utf8 -r

Para convertir los nombres de archivos, se debe agregar el modificador –notest:

convmv -f cp1250 -t utf8 -r --notest

Discos que muestran tamaño incorrecto 33MB o menos

Algunos motherboards como los Gigabyte, pueden tener un error que provoca que un disco puesto como primario se le cambie el tamaño a 33MB (o 0MB), debido a que la BIOS activa una característica llamada HPA (Host Protected Area) y destruya el tamaño físico real del disco. Esto también puede ocurrir por una infección con algún malware.

Para resolverlo, se puede conectar el disco a cualquier máquina con Linux y resolverlo utilizando el utilitario hdparm.

Usar HDPARM para desactivar HPA

Mostrar si HPA está activado y obtener el nuevo valor de sector máximo:

hdparm -N /dev/sdX

Este comando mostrará algo como:

/dev/sdX:
max sectors = 65535/78165360, HPA is enabled

Para desactivar HPA y hacer visible nuevamente toda el área del disco, utilizar el siguiente comando tomando el segundo valor de sectores que se obtuvo con el comando anterior (área visible/máx sectores):

hdparm -N p78165360 /dev/sdx

Notar la “p” precediendo el valor de sectores máximos. Con un nuevo comando hdparm -N /dev/sdX se verá que HPA ha sido desactivado. A continuación, se debe reiniciar el equipo para que la BIOS vuelva a tomar el total del área disponible. Este cambio se puede realizar sólo una vez por reinicio físico del equipo.

Bibliografía

FAT32 - Cluster size and sectors per cluster

Hard disk size Cluster size Sectors per cluster
512 MB to 8 GB 4 KB 8
8 GB to 16 GB 8 KB 16
16 GB to 32 GB 16 KB 32
32 GB and larger 32 KB 64

Grabación de CDs y DVDs

CDs multisesión:

NEXT_TRACK=`cdrecord -msinfo dev=0,6,0` ; echo $NEXT_TRACK

mkisofs -v -r -J -o cd_image2 -C $NEXT_TRACK -M 0,6,0 private_collection/

Crear imagen ISO:

mkisofs -v -r -J -o imagen.iso dir_con_archivos/

Grabar CDs:

cdrecord dev=/dev/hdd -v -dao imagen.iso

Borrar CDRW:

cdrecord blank=fast dev=/dev/hdd

Grabar DVDs al vuelo (directorio):

growisofs -Z /dev/dvd -R -J dir/

Grabar DVDs (ISO):

growisofs -dvd-compat -Z /dev/dvd=imagen.iso

Crear una ISO para DVD a partir de un directorio:

genisoimage -o imagen.iso -R -J dir/

Quemar una ISO en un CD y expulsar inmediatamente el CD:

wodim dev='/dev/sr0' -eject -v -dao imagen.iso

Para resolver el problema de archivos más grandes de 4GB (aún no probado):

genisoimage -udf -f -r -J -allow-limited-size -o /path/de/la/imagen.iso \
/directorio/a/resguardar

Convertir videos MP4 a FLV (Flash)

Instalar repositorio deb-multimedia, agregando en sources.list:

# Deb-multimedia
deb http://www.deb-multimedia.org jessie main non-free

Luego de un aptitude update instalar ffmpeg:

aptitude install ffmpeg

Luego, para convertir el archivo:

ffmpeg -i source.mp4 -c:v libx264 -crf 19 destinationfile.flv

Y si este primer método no funciona, probar:

ffmpeg -i source.mp4 -c:v libx264 -ar 22050 -crf 28 destinationfile.flv

Ahora ya no se usa ffmpeg sino avconv, con la siguiente sintaxis:

avconv -i source.mp4 -c:v libx264  -ar 22050 -crf 28 destinationfile.flv

Un poco más explicado...

ffmpeg -i in.mp4 out.swf

This will default to converting the video to Sorenson Spark (H.263, or known as flv1) and the audio to MP3, using whatever MP3 encoder your FFmpeg has—probably libmp3lame.

If you need to change the video quality, you have two options:

  1. add the -qscale:v option after -i in.mp4 with a value from 1 to 31, where higher means lower quality (try with 2 or 3 first). This is a VBR setting.
  2. add the -b:v option with a bitrate, e.g. 1M or 500K. This is a CBR setting, of course, and might result in lower visual quality per file size.

For audio:

  1. add the -q:a option for VBR MP3, with values between 0 and 7, 0 being the best quality.
  2. add the -b:a option for CBR MP3, e.g. with 192K.

Consider converting your video to an FLV container instead, which will handle a larger variety of codecs than SWF (which only supports H.263, VP6 or Motion JPEG).

This would allow you to use H.264 video and AAC audio, which provide you with better quality at smaller file sizes when compared to the H.263 / MP3 variant in SWF files. You might even have a chance to copy the bitstreams, which would mean no quality reduction at all.

ffmpeg -i in.mp4 -c copy out.flv

If that doesn't work, re-encode:

ffmpeg -i in.mp4 -c:v libx264 -c:a aac -strict experimental -b:a 192K out.flv

This would use the x264 encoder. To change the video quality here, you have the following options:

  1. add the -crf option after -i in.mp4 with a value between 0 and 51, where lower means better quality. Default is 23, and sane values are from 18–28.
  2. add the -b:v option, similar to above for constant bitrate mode.

See the x264 encoding guide on the FFmpeg wiki for more info.

Manejo de grabación de archivos grandes

Para dividir un archivo en pedazos más chicos que quepan en un DVD:

split -d -b 1000m archivo.tgz archivo.tgz.

Dividir un archivo tar.gz en pedazos de un tamaño específico, al vuelo:

tar -cz directorio | split -d -b 1000m - archivo.tgz.

Crear una checksum para asegurarse que los archivos están correctos:

md5sum archivo.tgz.* > archivo.md5

Para restaurar los archivos, seguir los pasos inversos. Primero copiarlos en disco nuevamente, revisar que estén bien, y restaurar el archivo completo:

md5sum -c archivo.md5
cat archivo.tgz.* | tar -xz

VGetty/MGetty

Para convertir un .wav al formato rmd para el vgetty

Módem Zoltrix 33600

-Primero lo paso a un rate de 7200

sox greet.wav -c 1 -r 7200 standard.wav

-Luego lo paso a pvf de 8 bits

wavtopvf -8 standard.wav > standard.pvf

-Finalmente lo convierto a rmd de 4 bits para chipset Rockwell

pvftormd Rockwell 4 < standard.pvf > standard.rmd

-Para listar todos los tipos que maneja el pvftormd:

pvftormd -L
sox greet.wav -r 3800 standard.wav
wavtopvf -32 standard.wav > standard.pvf
pvftormd V253modem 13 < standard.pvf > standard.rmd

Instalar Mgetty-voice en Sarge

1. Primero:

aptitude install mgetty-voice mgetty-pvftools mgetty-docs

2. Agregar en inittab, algo como

T3:23:respawn:/usr/sbin/vgetty ttySL0

3. En voice.conf, poner las siguientes variables para módem SmartLink:

rec_silence_threshold 100 (para modems V253)
rec_compression 6 
receive_gain -1
transmit_gain -1

4. Escuchar un mensaje

rmdtopvf /var/spool/voice/incoming/archivo.rmd | pvfspeed -s 8000 | pvftobasic > /dev/dsp

Copiar un sitio web localmente

wget -w 2 -c -r --convert-links http://www.site.com

Identificar sistemas de archivos de particiones de un disco

file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}

Crear un favicon a partir de tres imágenes

icotool -c -o favicon.ico mysite_16x16.png mysite_32x32.png mysite_64x64.png

Grabar el streaming MP3 en archivos por separados, abriendo el puerto 8000 para poder escuchar con XMMS

streamripper http://sc3.radioseven.se:8500 -r

Logueo automático con SSH sin contraseña

ssh-keygen -t rsa # (no ponerle passphrase a la clave)

Luego agregar el contenido de ~.ssh/id_rsa.pub al ~/.ssh/authorized_keys del equipo al que se desea conectar sin contraseña.

Túnel inverso SSH (SSH tunneling reverse mode)

Si no hay acceso directo a algún servidor, por ejemplo por estar detrás de un router o firewall, se puede crear un túnel a un equipo controlado por nosotros de la siguiente manera:

ssh -N -R 3333:localhost:22 usuario@host

donde:

usuario: un usuario existente y con permisos de acceso por SSH en el servidor “host”

host: es el equipo controlado por nosotros, donde se abrirá el puerto 3333 en la interfaz localhost

3333: es el puerto en localhost (en este caso) por el cual se realizará la conexión al servidor al cual no tenemos acceso directo

localhost: es la interfaz donde va a estar escuchando SSH en el servidor host

22: es el puerto SSH en el servidor host

MySQL

Insertar en una tabla lo seleccionado desde otra

Ej. 1 - Tomar los datos de una tabla similar:

insert into boletinSuscriptoresTemp select 0, apellido, nombre, correoe, clave, 'Texto', temas, 'proagro', 1 from \
suscriptores where correoe like '%.br' and sitio = 'pcv' and activo = 1;

Ej. 2 - Tomar los datos de una tabla distinta, en otra base de datos:

insert into boletinSuscriptoresTemp select 0, lastname, name, email, '', 'HTML', '', 'proagro', 1 from \
datos2.users where ws1014_datos2.users.country = 'AR';

Cambiar contraseñas

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h dbsrv password 'new-password'

Agregar un usuario

# Todas las tablas de una base de datos, para un usuario específico ingresando desde localhost
GRANT ALL PRIVILEGES ON `base_de_datos`.* TO 'usuario'@'localhost' IDENTIFIED BY 'contraseña' WITH GRANT OPTION;
# Todas las tablas de todas las bases de datos, para un usuario específico ingresando desde cualquier host (superuser)
GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'%' IDENTIFIED BY 'contraseña' WITH GRANT OPTION;

Agregar un usuario root

CREATE USER 'root'@'%' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Realizar una copia de resguardo completa de una base de datos

Nota: incluye la opción “–add-drop-table” que elimina la tabla si ésta existe, al restaurar los datos.

mysqldump --add-drop-table --quick -uusuario -ppassword -hservidor base_de_datos | \
gzip > /ruta/a/grabar/base_de_datos-`date +%Y%m%d`.sql.gz

Restaurar una copia de resguardo completa de una base de datos

gunzip < /ruta/a/grabar/base_de_datos-20081115.sql.gz | mysql -u usuario -p password -h servidor base_de_datos

Ver el tamaño de todas las bases de datos

SELECT table_schema AS "Database", ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)" FROM information_schema.TABLES GROUP BY table_schema;

Ver el tamaño de todas las tablas y mostrarlos en orden

SELECT table_name AS "Table", ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)" FROM information_schema.TABLES WHERE table_schema = "database_name" ORDER BY (data_length + index_length) DESC;

Analizar cuánta memoria usa un proceso

PID (Process IDentifier) - Each process (or instance of a running program) has a unique number. This number is called a PID.

PPID (Parent Process IDentifier) - A process (or running program) can create new processes. The new process created is called a child process. The original process is called the parent process. The child process has a PPID equal to the PID of the parent process. There are two exceptions to this rule. The first is a program called “init”. This process always has a PID of 1 and a PPID of 0. The second exception is when a parent process exit all of the child processes are adopted by the “init” process and have a PPID of 1.

VSIZE (Virtual memory SIZE) - The amount of memory the process is currently using. This includes the amount in RAM and the amount in swap.

RSS (Resident Set Size) - The portion of a process that exists in physical memory (RAM). The rest of the program exists in swap. If the computer has not used swap, this number will be equal to VSIZE.

To see how much memory processes are using:

ps -eo pid,ppid,rss,vsize,pcpu,pmem,cmd -ww --sort=pid

Referencia: http://mail.nl.linux.org/linux-mm/2003-03/msg00077.html

Bash shell

Usuarios: operaciones varias

Renombrar un usuario (el ownership de los archivos y la pertenencia a grupos se mantienen porque no se cambia el UID):

usermod --login new_username --move-home --home path_to_the_new_home_dir old_username

Renombrar el grupo de un usuario:

groupmod --new-name new_username old_username

RPM: buscar qué paquete contiene un archivo dado

rpm -qf $(which archivo)

Operaciones matemáticas, incluyendo punto flotante (comando "bc")

echo “34.3425234 * 5.5” | bc -l

Comando at

Para ejecutar tareas en un horario determinado

at 04:15 -f script.sh

o bien:

/path/script.sh | at 04:15

Mostrar salida stdout a la vez que grabarla en un archivo

Comando tee: Copy standard input to each FILE, and also to standard output.

comando | tee archivo.txt

Desactivar/Activar los mensajes de kernel por pantalla en una terminal

setterm -msg off|on

Imprimir páginas MAN (formateado por groff en formato PS)

man comando -t > comando.ps

Buscar quién está usando un archivo

fuser -mv /ruta/al/archivo

o bien:

lsof | grep -i archivo

Envío de mensajes desde scripts

Se puede usar el comando mail del paquete mailx:

echo "Mensaje" | mail -s "Asunto" direccion@dominio.com -b otradireccion@otrodominio.com \
-a "\"Nombre Remitente\" <remitente@dominio.com>"

Si no hay otra cosa, puede usarse un comando mail más primitivo que no tiene la opción “-a”:

echo "Mensaje" | mail -s "Asunto" direccion@dominio.com -- -F "\"Nombre Remitente\"" -f "<remitente@dominio.com>"

Redirección de salida, entrada y error

  1. redirect stdout to a file
    ls -l > ls-l.txt
  2. redirect stderr to a file
    grep da * 2> grep-errors.txt
  3. redirect stdout to a stderr
    grep da * 1>&2
  4. redirect stderr to a stdout
    grep * 2>&1
  5. redirect stderr and stdout to a file
    rm -f $(find / -name core) &> /dev/null
  6. redirect stderr and stdout to stdout
    grep * &>&1
  7. redirect stderr and stdout to stderr
    grep * &>&2

Tomado de: http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html

Comando find: encontrar y ejecutar tareas sobre lo encontrado

Encontrar archivos con un atributo específico, y ejecutar un comando sobre dicho archivo

find /home -uid 501 -exec chown usuario: \{\} \;

Nota: prestar atención al escapado de las llaves y el punto y coma final

Setear permisos rwx para el grupo en todos los directorios

find /home/smb/* -type d -exec chmod g+rwx \{\} \;

Setear permisos rw para el grupo en todos los archivos

find /home/smb/* -type f -exec chmod g+rw \{\} \;

Buscar archivos que NO tengan el permiso de grabación para el grupo

find . ! -perm -g+w

Buscar todos los archivos de un directorio modificados luego del momento indicado, y copiarlos a otro servidor

Nota: el comando find crea un listado de archivos, que luego envía al rsync y éste los copia al destino en una sola conexión. Lo usé en Tascani

find /srv/archivos/DiscoG -type f -newermt '20210101 00:00:00' -print0 | rsync -av --progress -0 --files-from=- / root@172.20.0.1:/srv/archivos

Cancelar mensajes por consola

Si los mensajes por consola no dejan trabajar:

dmesg -n 1

Monitorear los datos de un pipe

Por ejemplo, si se quiere ver el progreso de un dd:

dd if=/dev/hdX bs=10240k | pv -c -b -r -t > /dev/sdX

Combinaciones de teclas y otros trucos

Desactivar XON/XOFF: si se pulsa C-s se bloquea el ingreso por teclado (XOFF); al pulsar C-q se vuelve a activar (XON). El tema es que la combinación C-s es la búsqueda hacia adelante en Bash. Para desactivar definitivamente XON/XOFF, agregar en /etc/profile y en /etc/bash.bashrc la siguiente línea:

stty -ixon

Combinaciones de teclas más comunes:

  • C-l: limpia la pantalla y reescribe la línea actual dejándola en la parte superior
  • A-f: avanza una palabra
  • A-b: retrocede una palabra
  • C-r: búsqueda hacia atrás en el histórico
  • C-s: búsqueda hacia adelante en el histórico
  • C-k: borra todo desde la posición del cursor hasta el final de la línea
  • C-u: borra todo desde la posición del cursor hasta el principio de la línea
  • C-y: restaura lo borrado con alguno de los comandos anteriores

Cómo hacer un hard reset para shutdown o reboot por línea de comandos

Es útil cuando tenemos un servidor totalmente colgado y no podemos reiniciarlo con un shutdown o systemctl normal, pero sabemos que probablemente inicie correctamente luego del reboot.

Primero se sugiere realizar un sync de emergencia de los discos con:

sh -c "echo s > /proc/sysrq-trigger"

Hard shutdown:

sh -c "echo o > /proc/sysrq-trigger"

Hard restart:

sh -c "echo b > /proc/sysrq-trigger"

Manejo de unidades/discos extraíbles

Se puede utilizar el comando udisksctl, que es parte del paquete udisksd.

Mostrar el listado de unidades extraíbles:

udisksctl status

Mostrar información sobre un dispositivo de bloques:

udisksctl info -b /dev/nvme0n1

Apagar una unidad:

udisksctl power-off -b /dev/sdb

X Window System

Para cambiar el punto del teclado numérico, a una coma

Solución a corto plazo (sólo duran lo que dure la sesión):

xmodmap -e "keycode 0x5B = KP_Delete comma"

Soluciones a más largo plazo:

  • En KDM añadir la línea /usr/bin/X11/xmodmap -e “keycode 0x5B = KP_Delete comma” al archivo /etc/kde3/kdm/Xsetup
  • Añadir la linea /usr/bin/X11/xmodmap -e “keycode 0x5B = KP_Delete comma” al fichero /etc/gdm/Sessions/Gnome, justo después de donde se llama a xmodmap desde ese fichero (en mi Sid, es en torno a la linea 120).
  • Esta afecta a usuarios individuales, no a todos. Crear un fichero $HOME/.Xmodmap que contenga la linea keycode 0x5B = KP_Delete comma, y otro fichero /etc/gnome/session.options que contenga la linea allow-user-modmap=yes

Kernel

Cambiar orden de módulos cargados en el inicio

Esto se debe hacer cuando, por ejemplo, hay dos controladoras SATA y en el booteo a veces se invierte el orden de carga. Para obligar al kernel a cargarlos siempre en el orden especificado, se debe realizar los siguiente:

  1. Editar /etc/mkinitrd/mkinitrd.conf y cambiar la línea:
    MODULES=most
    
    por
    
    MODULES=list
  2. Editar /etc/mkinitrd/modules, y agregar los módulos en el orden que se desea sean cargados, por ejemplo:
    ide_core
    sis5513
    scsi_mod
    libata
    sata_sis
    sata_sil
    sd_mod
    xor
    md_mod
    raid456
    dm_mod
    dm_snapshot
    dm_mirror
    reiserfs
    ext3
  3. Ejecutar “dpkg-reconfigure linux-image-<kernel_version>”, por ejemplo:
    dpkg-reconfigure linux-image-2.6.18-4-686
  4. Reiniciar el equipo

Nota: No olvidarse de poner en “modules”, no sólo los drivers de hardware necesarios, sino también los de sistemas de archivos, o RAID, o LVM, o cualquier otro imprescindible para el arranque del sistema operativo.

RAID (viejo)

Nota: actualmente, el soporte para RAID lo brinda mdadm

  1. Kernel –> compilar soporte en el kernel (ver /proc/mdstats)
  2. fdisk –> configurar las particiones que van a formar parte del RAID como tipo “fd” Linux RAID autodetect
  3. /etc/raidtab –> agregar las configuraciones para cada RAID (md0, md1, etc.)
  4. mkraid /dev/md0
  5. Formatear el sistema de archivos, y montar

APT/Debian

Clonar una instalación de Debian (sacado de dpkg(8))

  1. Para hacer una copia local de los estados de la selección de paquetes:
    dpkg --get-selections > mis_selecciones
  2. Se podría copiar este fichero a otra máquina e instalarlo allí con:
    dpkg --set-selections < mis_selecciones
  3. Ejecutar aptitude, actualizar y pulsar g para que actualice/instale todo

Netfilter/IPTables

Procedimientos varios

Ver las conexiones establecidas, incluyendo NAT

cat /proc/net/ip_conntrack

Bloquear una IP con iptables

s=aaa.bbb.ccc.ddd
iptables -I INPUT -s $s -j DROP

Ver las reglas de una tabla, por ejemplo NAT

iptables -L -nv -t nat

Configurar un port forwarding de una dirección IP a un host interno de la intranet (funciona aunque la IP esté en una interfaz virtual)

Obviamente, se debe modificar el valor de -i, -d y –to-destination por lo necesario.

# Aceptar conexiones en un puerto determinado
iptables -I FORWARD -i eth1 -o eth0 -d 192.168.10.5 -p tcp --dport 80 -j ACCEPT
# Port forwarding
iptables -t nat -I PREROUTING -i eth1 -d 200.80.20.28 -j DNAT --to-destination 192.168.10.5

Arno Firewall

Configuración de logs en archivo por separado

  1. En syslog.conf agregar kern.!=debug para los archivos syslog, kern.log, y debug. Estos valores eliminan el logging en esos archivos
  2. En syslog.conf agregar una línea:
    *.=debug                     /var/log/firewall.log

    Esto hace que el logging del firewall ocurra en ese archivo

  3. En el archivo de conf de Arno Firewall:
    # FIREWALL_LOG=/var/log/firewall.log
    LOGLEVEL=debug 

    La primer línea _tiene_ que estar comentada

  4. Reiniciar syslogd, klogd, y arno en este orden

Qemu

Crear el dispositivo para kqemu y cargar el módulo de aceleración:

modprobe kqemu
mknod /dev/kqemu c 250 0
chmod 666 /dev/kqemu

Crear una nueva imagen a partir de un template:

qemu-img create -b winxp02-template.img -f qcow winxp02.img

Montar una imagen Qemu (no qcow):

mount -o loop,offset=32256 winxp02.img /mnt/qemu

Qemu con -net user

Iniciar Windows 2003 con los servicios VNC y RDP:

qemu -kernel-kqemu -vnc 10 -localtime -k es -net user -net nic,model=rtl8139 -redir tcp:5900:10.0.2.15:5900 \
-redir tcp:3389:10.0.2.15:3389 /mnt/virtuals/qemu/w2k301.img

Iniciar Windows XP con los servicios VNC y RDP:

qemu -kernel-kqemu -vnc 11 -localtime -k es -net user -net nic -redir tcp:5901:10.0.2.15:5900 \
-redir tcp:3390:10.0.2.15:3389 /mnt/virtuals/qemu/winxp01.img

Iniciar instalación de FreeBSD con 64MB de RAM:

qemu -localtime -m 64 -net user -net nic -boot d \
-cdrom /mnt/backuprep/bajadas/ISOs/BSDs/FreeBSD-6.1-RELEASE-i386-bootonly.iso -hda /mnt/virtuals/qemu/freebsd.img

Iniciar FreeBSD con 64MB de RAM:

qemu -kernel-kqemu -nographic -m 64 -localtime -net user -net nic \
-redir tcp:5022:10.0.2.15:22 /mnt/virtuals/qemu/freebsd.img

Iniciar Ubuntu Server con 64MB de RAM:

qemu -kernel-kqemu -localtime -m 64 -k es -net user -net nic /mnt/virtuals/qemu/ubuntusrv.img

Qemu con -net tap (notar las diferentes MAC address)

  1. Instalar bridge-utils:
    aptitude install bridge-utils
  2. Configurar la placa de red con bridge, cambiando lo necesario:
    auto br0
    iface br0 inet static
    address xxx.xxx.xxx.xxx
    netmask xxx.xxx.xxx.xxx
    gateway xxx.xxx.xxx.xxx
    bridge_ports eth0
    bridge_stp off
    bridge_maxwait 5
  3. Reiniciar las interfaces de red, cuidando que el bridge levante sin inconvenientes.
  4. El script en /etc/qemu-ifup debe ser algo como:
    #!/bin/sh
    /sbin/ifconfig $1 0.0.0.0 promisc up
    /usr/sbin/brctl addif br0 $1
    sleep 2
  5. Iniciar Qemu con la opción “-net tap”, por ejemplo:
    • Iniciar Windows XP:
      qemu -kernel-kqemu -localtime -k es -net tap -net nic,macaddr=52:54:00:12:34:21 /mnt/virtuals/qemu/winxp01.img
    • Iniciar Windows Windows 2003:
      qemu -kernel-kqemu -localtime -k es -net tap -net nic,model=rtl8139,macaddr=52:54:00:12:34:31 /mnt/virtuals/qemu/w2k301.img

Otros procedimientos

Crear una imagen de disco para instalar el SO que se necesite

qemu-img create -f qcow2 disk01.img 10G

Convertir una imagen .raw (por ejemplo, de Xen) a Qcow2

qemu-img convert hda.raw -O qcow2 hda.qcow2

Convertir una imagen VMWare (.vmdk) a Qcow2

qemu-img convert -O qcow2 test.vmdk test.qcow2

La imagen VMWare debe haber sido creada como un archivo monolítico, y si fue creada como varios archivos, convertirla a monolítica con el siguiente comando, utilizando para ello el primer archivo de imagen (terminada en .vmdk sin número de orden al final del nombre del archivo):

vmware-vdiskmanager -r disco.vmdk -t 0 nuevo-disco.vmdk

Copiar una instalación hecha en un archivo a una unidad LVM

  1. Convertir primero la imagen a raw, si aún no lo es. IMPORTANTE: no copiar directamente la imagen raw usando qemu-img, porque no va a funcionar; usar para ello el comando dd en un segundo paso:
      qemu-img convert disk0.qcow2 -O raw disk0.raw
  2. Copiar la imagen a la unidad LVM. Obviamente la unidad LVM tiene que tener el mismo tamaño que la imagen:
      dd if=/datos2/qemu/winxpsp2-template.img of=/dev/datos2/qemu2 bs=1M

Crear un disco virtual con dd

  • De 10GB (sparse file, es decir archivo que no ocupa espacio hasta que es usado):
    dd if=/dev/zero of=disco.img bs=1 seek=10G count=0
  • De 10GB (archivo común ocupando espacio)
    dd if=/dev/zero of=disco.img bs=1M count=10k

Referencias

KVM: Kernel Virtual Machine

Para configurar la interfaz de red bridge, seguir los pasos descritos para Qemu.

Iniciar una VM con KVM, y bridging:

qemu-system-x86_64 -hda dsrv01.qcow2 -net nic,macaddr=00:16:3E:11:12:11 -net tap,script=/etc/kvm/kvm-ifup

Incrementar el tamaño de discos virtuales:

Tiene que ser una imagen raw o una unidad LVM. Los otros formatos no pueden incrementarse. Con la unidad LVM se procede de similar manera, sólo que se redimensiona la unidad primero y luego se siguen los pasos para redimensionar el disco internamente. El procedimiento sirve incluso si el sistema operativo guest es Windows.

  1. Realizar una copia de resguardo de la imagen
  2. Agrandar la imagen con el comando dd. Por ejemplo, si se quiere llevar el tamaño del disco virtual discovirtual.raw a 15GB, ejecutar:
    dd bs=1 if=/dev/zero of=discovirtual.raw seek=15G count=1 conv=notrunc

    Hecho esto, se puede ver el tamaño nuevo con qemu-img info discovirtual.raw

  3. Luego iniciar con una distro que permita redimensionar las particiones del disco virtual, como System Rescue CD, utilizando como disco virtual el disco con el nuevo tamaño. En esta distribución, se puede usar por ejemplo Gparted
  4. Finalmente, iniciar el sistema operativo guest que estaba en el disco redimensionado para ver si todo quedó correcto. En el caso de Windows, realizará varios reinicios, primero luego de realizar un checkdisk y seguramente luego de reconocer el nuevo tamaño de disco lo hará nuevamente.

Agregado de dispositivos al vuelo

Para que el agregado de dispositivos PCI funcione, en el guest se deben cargar los siguientes módulos:

acpiphp
pci_hotplug

Pueden ponerse en /etc/modules (en Debian GNU/Linux, o el que corresponda a la distribución en cuestión) para que sean cargados en forma automática.

Agregar una unidad de almacenamiento en caliente:

pci_add pci_addr=auto storage file=/kvm/imgs/nuevo.img,if=scsi

También puede usarse if=virtio, pero IDE no es agregable en caliente.

Agregar una tarjeta de red en caliente:

pci_add pci_addr=auto nic model=rtl8139

Cambiar un CD en la compactera (CDROM):

info block  # Muestra el listado de dispositivos de bloques
change ide1-cd0 /kvm/isos/dsl-4.4.10.iso

Bibliografía

VirtualBox

Este instructivo básico explica cómo instalar y utilizar VirtualBox OSE (Open Source Edition) en Debian Etch.

  1. Instalar VirtualBox y el código fuente del módulo de kernel de los repositorios del kernel:
    aptitude install virtualbox virtualbox-ose-source
  2. Configurar, compilar e instalar el módulo de kernel:
    module-assistant prepare
    module-assistant auto-install virtualbox-ose
  3. Cargar el módulo:
    modprobe vboxdrv
  4. Para simplificar el acceso a redes de las máquinas virtuales, configurar un bridge en la máquina host (anfitrión) y luego en las máquinas virtuales configurar acceso por la “Interfaz anfitrion”. En nombre de interfaz tap poner “tap10”, y en la ruta del comando para activarla “/usr/local/bin/vbox-ifup”
  5. El script /usr/local/bin/vbox-ifup es el siguiente:
    #!/bin/bash
    
    # Por FMSI
    # Crea la interfaz tap10 para VirtualBox
    # Se debe configurar la misma en las máquinas virtuales
    # como Interfaz anfitrión > tap10
    # y la ruta a este script para que sea activada automágicamente
    
    tunctl -t tap10
    brctl addif br0 tap10
    ifconfig tap10 up

ACLs: Access Control Lists en sistemas de archivos

Nota: El kernel debe tener soporte para ACLs, y en Debian se debe instalar el paquete “acl”.

En primer lugar, se debe montar el sistema de archivos en cuestión con la opción “acl”, agregándola en /etc/fstab:

/dev/sda5        /home           reiserfs defaults,acl        0       2

y luego remontando en sistema de archivos:

mount -v -o remount /home

Para darle permisos por defecto a un directorio, haciendo que un usuario en particular del grupo pueda acceder y leer, pero no escribir:

setfacl -d --set u::rwx,u:usuario:rx,g::rwx,o::- directorio

Con esto, el usuario “usuario” puede entrar al directorio, leer todos los archivos en modo sólo lectura, pero no puede crear archivos y directorios. Los otros miembros del grupo, en cambio, pueden acceder y modificar los archivos, así como crear archivos y directorios.

Para ver las ACLs de un archivo:

getfacl archivo

Internet Explorer en Linux - Ideal para desarrolladores web y nada mas... :)

Recomiendo usar Fireefox en ves de este ingerto pero es a modo test para poder ver como renderiza ciertas paginas mal echas.

Debian Etch (4.0) necesita algunos pasos antes de poder instalar IEs4Linux:

1) Necesitas una versión bastante reciente de wine (http://www.winehq.org/) y libxxf86dga1, obtenla desde backports.org: en /etc/apt/sources.list, agrega:

#wine

wget -q http://wine.budgetdedicated.com/apt/387EE263.gpg -O- | sudo apt-key add -
sudo wget http://wine.budgetdedicated.com/apt/sources.list.d/etch.list -O /etc/apt/sources.list.d/winehq.list
apt-get update
apt-get install wine libxxf86dga1 libxxf86vm1 cabextract

2) Desloguéate y loguéate con una cuenta de usuario. Descarga e instala IEs4Linux:

wget http://www.tatanka.com.br/ies4linux/downloads/ies4linux-latest.tar.gz
tar zxvf ies4linux-latest.tar.gz
cd ies4linux-*
./ies4linux

Bibliografía

Referencias

SQL Ledger

Migrando a una nueva versión

  1. Realizar una copia de resguardo del directorio de SQL Ledger completa, y una copia de todas las bases de datos con pg_dumpall (ver el manual). Asimismo, detener PostgreSQL y resguardar el directorio completo de PostgreSQL /var/lib/postgresql (sólo por las dudas).
  2. Leer toda la documentación sobre el proceso de upgrade en el sitio oficial, y cualquier README al respecto
  3. Instalar los paquetes necesarios:
    apt-get install libapache2-mod-perl2 acpid libdbi-perl libdbd-pg-perl libmldbm-perl postfix \
    mailutils texlive texlive-fonts-extra texlive-generic-extracups texlive-lang-spanish \
    texlive-generic-extra texlive-humanities texlive-publishers texlive-pstricks \
    texlive-pictures  texlive-metapost texlive-math-extra cups-driver-gutenprint
  4. Bajar del sitio oficial (http://www.sql-ledger.com/) el último setup.pl, grabándolo en el directorio de SQL Ledger. Asignarle permisos de ejecución chown u+x setup.pl
  5. Ejecutar ese script y seguir las instrucciones
  6. Finalizada la actualización, se deben copiar los archivos de imágenes .gif, .png y .eps que se encuentran en images/ y en users/ de la copia de resguardo, en las respectivas ubicaciones de la nueva instalación
  7. Revisar que todo haya quedado bien (o al menos pegar una miradita :)
  8. Loguearse y probar si todo parece funcionar bien. Nota: inmediatamente luego de loguearse por primera vez, el sistema actualizará las bases de datos según los cambios necesarios para la nueva versión

Zona Horaria (time zone/zone data)

  • Para cambiar la zona horaria en Debian, usar tzconfig. En Argentina, se debe usar 12) “None of the above” > GMT+3
  • Para cambiar la zona horaria en Ubuntu, usar dpkg-reconfigure tzdata. Seleccionar Etc > GMT+3

GRUB/LILO boot prompt: modos de video

En la línea del kernel, agregar “vga=<modo>”, donde <modo> es alguno de los siguientes. Nota: generalmente uso los modos en hexadecimal.

Colors ( depth) 640x480 800x600 1024x768 1280x1024 1600x1200
---------------+-------+-------+--------+---------+---------
256 ( 8 bit)   | 769     771     773       775      796
32,768 (15 bit)| 784     787     790       793      797
65,536 (16 bit)| 785     788     791       794      798
16.8M (24 bit) | 786     789     792       795      799

      640x480 800x600 1024x768 1280x1024
----+-------------------------------------
256 | 0x301   0x303   0x305    0x307
32k | 0x310   0x313   0x316    0x319
64k | 0x311   0x314   0x317    0x31A
16M | 0x312   0x315   0x318    0x31B

SMART

  • Ver info SMART en un dispositivo SATA
    smartctl -a -d ata /dev/sda
  • Iniciar un testeo (short/long):
    IDE: smartctl -t short /dev/sda
    SATA: smartctl -t short -d ata /dev/sda

X.org

Para cambiar la resolución en las nuevas versiones de X.org, que no permiten ser reconfiguradas con un simple dpkg-reconfigure xserver-xorg, modificar en el archivo /etc/X11/xorg.conf la sección “Screen”, agregando la subsección “Display”, y configurando lo necesario (DefaultDepth y Modes, generalmente):

Section "Screen"
        Identifier      "Default Screen"
        Device          "nVidia Corporation NV18 [GeForce4 MX 4000]"
        Monitor         "Monitor genérico"
        DefaultDepth    24
        SubSection "Display"
                Depth           1
                Modes           "1024x768" "800x600" "640x480"
        EndSubSection
        SubSection "Display"
                Depth           4
                Modes           "1024x768" "800x600" "640x480"
        EndSubSection
        SubSection "Display"
                Depth           8
                Modes           "1024x768" "800x600" "640x480"
        EndSubSection
        SubSection "Display"
                Depth           15
                Modes           "1024x768" "800x600" "640x480"
        EndSubSection
        SubSection "Display"
                Depth           16
                Modes           "1024x768" "800x600" "640x480"
        EndSubSection
        SubSection "Display"
                Depth           24
                Modes           "1024x768" "800x600" "640x480"
        EndSubSection
EndSection

Más información sobre problemas de resolución y otros inconvenientes con placas de vídeo

Amavis/Postfix/Cyrus

Cuando un mensaje es colocado en cuarentena, por Amavis, para liberarlo, escribir:

amavisd-release <id_mensaje>

donde <id_mensaje> es el nombre asignado al mensaje en cuestión colocado en cuarentena. Ese ID figura en el mensaje que Amavis envía para avisar lo ocurrido, por ejemplo:

The message has been quarantined as: P/banned-P0QmVkWcuUUz

El <id_mensaje> es “P/banned-P0QmVkWcuUUz”.

CUPS

Las impresoras HP, especialmente las que son multifunción, están soportadas por el sistema de software llamado HPLIP, provisto por HP. El mismo está disponible en http://hplipopensource.com/hplip-web/index.html para bajar.

Si la impresora que se desea instalar no está soportada por el software de stock que provee la distribución que se esté usando, se debe instalar el producto manualmente, luego de bajarlo del mencionado sitio web. Se deben seguir para ello los pasos indicados en el instructivo.

Finalmente, se debe configurar la impresora utilizando el utilitario gráfico “hp-setup”, de simple manejo.

CUPS printer commands

Command line printing and options: http://www.cups.org/documentation.php/options.html

More information can be found on the CUPS website: http://www.cups.org/documentation.php

Basic CUPS commands

cancel – Allows you to cancel all jobs, all jobs on a specific printer or individual jobs

lpq – show printer queue status on specific printer, or all printers

lpq -P printername – lists all queued jobs on target printer

accept – accept jobs sent to a destination

reject – reject jobs sent to a destination

lp – show printer queue status on specific printer, or all printers

lpq -P printername – lists all queued jobs on target printer

lp – submits files for printing or alters a pending job

lpadmin – configure cups printers and classes

lpadmin -x printername – deletes target printer

lpinfo – lists the available devices or drivers known to the CUPS server

lpmove – moves the specified job or all jobs from source to destination

lpoptions – display or set printer options and defaults

lprm – cancels print jobs that have been queued for printing

lpstat – displays status information about the current classes, jobs, and printers

lpstat -p -d – Lists printers and default destination

lpstat -t – Lists all printers and all status information

lpstat -a – Lists all printers and accepting state

Printer hangs up on a job

  1. Turn off the printer
  2. Ssh into the print server
  3. lpq -P PrinterName # This will list all jobs queued on the hung printer. In most cases, deleting all submitted jobs is safest
  4. Cancel -a PrinterName # Cancels all submitted jobs on target printer
  5. Restart printer # Check that jobs are printing

Clearing print queues daily

  1. cancel -a `lpstat -t | grep disabled | awk '{print $2}'` # This will list all printers that are currently disabled, and cancel queued jobs on those printers
  2. /usr/bin/enable `lpstat -t | grep disabled | awk '{print $2}'` # This will re-enable the stopped print queues
  3. lpstat -t | grep disabled | awk '{print $2}' # This checks to see that all printers are re-enabled. Should return nothing.

Remove printers from client computer

  1. lpadmin -x `lpstat -a | awk '{printf $1 “ ”}'` # Lists all printers on client, sorts the printer names into a string, then issues lpadmin -x (removal) command to each printer. Command only deletes a printer at a time right now.

Epson: estado de los cartuchos de tinta

Si bien no tiene nada que ver con CUPS, hay un utilitario llamado escputil que permite ver qué nivel de tinta tienen los cartuchos en las impresoras Epson, conectadas por puerto paralelo o USB. Para ver el nivel de tinta de los cartuchos en una impresora conectada por USB:

escputil -i -u -r /dev/usb/lp0

OpenOffice.org

  • Abrir archivos de Microsoft Word 2007 (.docx) en Linux usando OpenOffice: algunos archivos se abrirán sin inconvenientes, pero quizá sea necesario instalar algunas herramientas adicionales, según se describe en el siguiente enlace

http://www.ubuntugeek.com/ubuntu-tip-how-to-openview-docx-files-in-openoffice.html

Palm: utilitarios de backup/restore y otros

Realizar un backup completo de la Palm IIIxe en un directorio:

pilot-xfer -p /dev/ttyS0 -b ~/Palmbackup/

Restaurar un backup en la Palm IIIxe:

pilot-xfer -p /dev/ttyS0 -r ~/Palmbackup/

Instalar un programa en la Palm:

pilot-xfer -p /dev/ttyS0 -i programa.prc

Comando tar: comprimiendo y extrayendo archivos

Nota: en todos los casos, agregar una “v” al listado de parámetros provoca que tar muestre lo que está haciendo (modo verboso), lo cual es extremadamente lento, especialmente si se cuenta con una conexión remota al equipo donde se está trabajando.

Para comprimir un directorio:

tar czf backup.tar.gz /ruta/al/directorio

Para descomprimir un archivo completo:

tar xzf backup.tar.gz

Para extraer un directorio en particular, se debe conocer exactamente la ruta de acceso al directorio en la estructura interna del archivo tar. Por ejemplo, si se desea extraer un directorio “etc” de ese archivo, primero se debe ejecutar un tar en modo test para ver dónde se encuentra el directorio a extraer:

tar tzf backup.tar.gz | grep etc

./etc/
...

Luego, extraerlo de la siguiente forma (notar que no va la barra de directorio al final del nombre):

tar xzf backup.tar.gz ./etc

Si se desea extraer un archivo en particular:

tar xzf backup.tar.gz ./etc/network/interfaces

Clonando particiones

Cuando se necesita un backup completo de una partición, las opciones para realizar la tarea pueden ser: partimage o partclone.

Generalmente usamos SystemRescueCD para operaciones de backup, incluso con particiones Windows. Ésta distro ya incluye ambos utilitarios.

Partimage

Partimage es un utilitario interactivo que mediante ncurses permite configurar la copia de resguardo. En ocasiones es más rápido que partclone, por ejemplo clonando particiones FAT32. La misma interfaz va guiando al usuario, y no se necesita más que marcar y desmarcar opciones, así como indicar dónde realizar la copia, y cómo se va a llamar el archivo en cuestión.

Partclone

Partclone es un utilitario de línea de comandos, por lo tanto útil si se necesita realizar la copia mediante un script.

Las tareas más comunes son realizar el backup y restaurarlo. Citamos a continuación los ejemplos:

Clonar /dev/sda1 to sda1.partclone mostrando información en detalle:

partclone.extfs -c -d -s /dev/hda1 -o hda1.img
            

Restaurar /dev/sda1 desde sda1.partclone mostrando información en detalle:

partclone.extfs -r -d -s hda1.img -o /dev/hda1

Clonar /dev/sda1 to /dev/sdb1 directamente mostrando información en detalle:

partclone.extfs -b -d -s /dev/hda1 -o /dev/hdb1

partclone.extfs es el utilitario para el sistema de archivos ext3. Para FAT o NTFS se debe usar partclone.fat o partclone.ntfs respectivamente.

Clonando y moviendo particiones Windows (NTFS)

Especialmente en máquinas de laboratorio, es necesario en ocasiones clonar instalaciones de Windows, o mover particiones NTFS de un lugar a otro del disco.

Para ello, usaremos un procedimiento que incluye modificar la Registry del Windows en cuestión, y clonar la partición con partclone.ntfs.

  1. Crear/Redimensionar/Preparar las particiones: para ello se puede utilizar gparted, utilitario gráfico de edición de particiones, o parted. Este último es de texto, y es el backend de gparted.
  2. Iniciar Windows para que realice un chequeo de disco: eso ocurre debido a que luego del primer paso, las particiones en cuestión quedan marcadas como “dirty” (sucias) y se debe cambiar ese estado luego de un chequeo de disco dentro de Windows
  3. Preparar Windows XP: se debe editar la Registry desde Windows, para eliminar la información de las particiones montadas. Utilizando regedit, eliminar todas las entradas en “HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices”. Esto no dañará al Windows, ya que esa información será recreada en el próximo reinicio. Nota: Si este paso no se realiza en primer lugar, se puede iniciar el Windows original, eliminar esas entradas, y luego copiar el archivo \Windows\system32\config\system (que es la Registry en sí) en esa misma ubicación en el Windows clonado. Para ello se puede montar ambas particiones con ntfs-3g y copiar con un simple comando cp dicho archivo.
  4. Clonar la partición: utilizando partclone con las siguientes opciones, por ejemplo:
    partclone.ntfs -b -d -s /dev/sda1 -o /dev/sda2

    Para clonar la partición primaria NTFS en una segunda partición primaria.

  5. Adaptar la configuración de GRUB: hecho esto, es necesario crear otra opción de menú de GRUB, por ejemplo:
    title           WXP
    root            (hd0,1)
    makeactive
    unhide (hd0,1)
    hide (hd0,0)
    chainloader     +1
  6. Atención Si Windows se niega a arrancar, por cualquier razón obtusa, generalmente se puede resolver ejecutando el comando:
    partclone.ntfsfixboot -w /dev/sda1

    Lo cual escribe un nuevo sector de inicio.

Windows: clonando MBR

Para el caso en que se necesite clonar un disco con Windows, se debe también clonar el MBR para lograr que dicho sistema operativo inicie desde el disco nuevo. Para ello:

# Guardar el MBR en un archivo
dd if=/dev/sda of=/mnt/tmp/mbr-sda.bak bs=512 count=1

# Restaurar el MBR desde el archivo de backup
dd if=/mnt/tmp/mbr-sda.bak of=/dev/sda bs=512 count=1

# Clonar el MBR de disco a disco
dd if=/dev/sda of=/dev/sdb bs=512 count=1

Bibliografía

Cambiar la MAC address de una placa de red

ifconfig eth0 down
ifconfig eth0 hw ether 00:07:95:35:47:3B
ifconfig eth0 up

Arnet/Telefónica: parámetros DSL

Módem ADSL Arescom NetDSL 1000: IP 10.0.0.1

Módem ADSL Arescom NetDSL 800: IP 192.168.1.1

Speedy (VPI: Virtual Path Identifier; VCI: Virtual Circuit Identifier)

VPI: 8
VCI: 35

Arnet

VPI: 0
VCI: 33
  1. Conectarse: telnet 192.168.1.1
  2. Ver la configuracion de la interfase atmpvc0: show interface atmpvc0
  3. Para cambiar VPI/VCI:
  set interface atmpvc0 vpi 0
  set interface atmpvc0 vci 33
tecnica/anotaciones_tecnicas.txt · Última modificación: 2023/07/28 20:49 por fmolinuevo