Consejos para Linux

De WikiBCE

If you have problems reading this document, don't hesitate to ask for a translation. domingobecker@gmail.com

Los problemas aquí documentados, son las soluciones importantes a cuestiones que eran necesarias resolver para una implementación exitosa de linux en una empresa.

Los consejos que va a encontrar en estas páginas y las relacionadas se refieren a las distribuciones Fedora y CentOS. Son las dos distribuciones de linux que usa el autor desde hace muchos años. Comencé con Red Hat Linux 3.1, en el año 1996. Desde entonces uso linux de la línea de Red Hat. Uso Fedora y CentOS porque son libres.

En otras otras distribuciones de linux no creo que sea muy distinto, por lo que no debería tener problemas para implementar las soluciones aquí presentadas en esas distribuciones.

Fedora normalmente lanza 2 versiones nuevas cada año, con lo último del software libre. Esto es bueno y malo a la vez: bueno porque está disponible lo último de lo último para usar, y malo porque a veces no viene probado del todo, por lo que hay que ayudar a corregir los errores probando las nuevas versiones de prueba de los paquetes con problemas. Si usa Fedora, considere ser parte de la solución a los problemas que encuentra, y va a tener mejores resultados.

A medida que vayan apareciendo problemas a resolver, se irán agregando aquí y aparecerán en la tabla de contenidos siguiente.

Con lo que está hasta ahora, tengo muchos clientes y servidores linux funcionando sin problemas, con gente haciendo trabajos de edición de texto y planillas de cálculos con OpenOffice, manejando correo con Evolution, usando mis sistemas bajo linux para trabajos de facturación, administración de empresas, aportes previsionales y liquidación de beneficios, sistema de financieras, etc., sin ningún tipo de problemas.

Si Ud. es un usuario de windows y quiere pasar a linux, el cambio es sencillo, le puede tomar un par de días adaptarse, pero una vez dentro de linux, no extrañará nada de lo anterior. Es más una cuestión de perderle miedo al cambio que los problemas que supuestamente aparecerían.

No entre a linux escapando de windows. Tampoco haga comparaciones que no sean objetivas, sino más bien analice el costo/beneficio. En general, en un mismo equipo Fedora Linux es más lento que un XP, pero más rápido que un Vista, mucho más seguro y estable, y más fácil para programar. A medida que vaya usando y aprendiendo, encontrará cosas que no existen en windows, por ejemplo, el sistema de conexión encriptada a recursos compartidos con sshfs, el sistema beagle para buscar documentos, respuestas más rápida a la corrección de errores del sistema, y, en programación, la camaradería entre los programadores, que no le mezquinarán nada de lo que saben cuando haga preguntas sobre programación, es decir, un programador no se traba en linux porque no tenga información sobre cómo hacer algo. Para un programador, la productividad es exponencial, si usa técnicas de reusabilidad.


Contenido

Instalación

El servidor puede ser un CentOS 5.5 o posterior. Para escritorio usar Fedora 8 o posterior.

Fedora también puede ser usado como servidor.

El DVD de instalación le servirá para instalar el sistema.

Si va a usar clientes windows, a la instalación base agregar los paquetes de servidor y cliente Samba, a saber, samba y samba-client.

Si solamente participan equipos linux, se recomienda usar sshfs, instalar paquete fuse-sshfs. Este funciona mejor que samba, y encima va encriptado, por lo que se puede usar en redes inseguras.

También agregar CrossOver, que debe descargar de aquí.

Este archivo va en /opt/cxoffice/lib/wine en reemplazo del que está ahí.

La configuración ip normal es 192.168.1.1 para el servidor y 192.168.1.2 en adelante para los clientes. Si es posible, configurar el servidor DHCP del linux.

El nombre del equipo servidor debe ser servidor. Se observó que si en hosts se pone una línea como la que sigue:

192.168.1.1  servidor

la búsqueda del nombre servidor es más rápida, lo que resulta en una mayor velocidad de funcionamiento del sistema.

El cortafuego por defecto de Fedora 8 y posterior bloquean todo, incluso cuando está deshabilitado, por lo que conviene abrir los puertos que necesite usar. Para el sistema de facturación debe abrir el puerto 6000 para tcp y udp. También debe declarar como confiable la ethX que esté usando para la red local.

Impresoras

Las impresoras normalmente hace falta configurarlas con CUPS. Si el controlador no está instalado, le va a proponer alguno de los que si están instalados, y puede no funcionar si la impresora es rara. Si no funciona, hay que buscar en internet cuál controlador se recomienda para esa impresora y buscarlo en "Añadir/Quitar software" para agregarlo antes de instalar la impresora.

Las computadoras cliente, si son linux, encontrarán y configurarán automáticamente las impresoras compartidas en la red. Aparentemente, el que hace el descubrimiento es el servicio Avahi.


Modelos usados y Controladores

La siguiente es una lista de los modelos de impresoras que he configurado y los controladores usados. Si el controlador no está instalado, lo que es más probable, instalar con Sistema | Administración | Añadir/Quitar software y buscar por el nombre mismo del controlador. Luego reintentar instalar la impresora o simplemente cambiar el controlador.

  • HP LaserJet 1200: por cable usb y paralelo. Recomiendo usb. Controlador pxlmono
  • HP LaserJet 1150: usb, no usar por paralelo. Controlador hpijs
  • HP LaserJet 1020: usb. Controlador foo2zjs bajado del proveedor y compilado según instrucciones
  • HP LaserJet 1022: usb. Controlador hpijs
  • HP LaserJet M1120 MFP Multifunción: usb. Controlador foo2xqx de RPM Fusion
  • HP LaserJet P1505: usb. Controlador foo2xqx de RPM Fusion.
  • HP Color LaserJet 2600n: por red. Controlador foo2hp
  • KonicaMinolta 1350W: usb. Controlador min12xxw
  • Epson CX45: usb. Controlador gutenprint-ijs-simplified.5.0
  • Epson Stylus C63: usb. Controlador gutenprint-ijs-simplified.5.2

Clientes de Impresión Windows

En clientes windows, instalar impresora de red con URL http://ip_equipo_con_impresora:631/printers/nombre_de_la_impresora

El controlador de impresión a usar lo saca Utilizando Disco, luego de elegir el fabricante.

Si no funciona con el driver provisto, se puede usar la impresora genérica proveedor Microsoft, tipo Imagesetter (postscript).

Pero podría ser rechazado por la impresora, por ejemplo, una HP LaserJet 1150 rechaza los comandos postscript.

Impresora Predeterminada

A veces no se puede cambiar la impresora predeterminada desde Sistema -> Administración -> Impresión. Si esto le pasa, desde una terminal haga como root:

lpoptions -d nombre-de-impresora

donde nombre-de-impresora es el nombre que muestra system-config-printer (Sistema -> Administración -> Impresión) en la lista de impresoras al iniciarse.

Problema de Bloqueo de Impresora en Fedora 10 en adelante

A partir de cups 1.3.10, hay un bloqueo del servidor de impresión cuando resuelve los nombres. Si no logra determinar el nombre de la PC donde está corriendo, se autobloquea cupsd.

Para resolver este problema, agregar

ServerAlias *

al principio del archivo /etc/cups/cupsd.conf. Con esto va a aceptar conexiones con cualquier nombre de servidor.

Impresoras con URIs extraños

Cuando un servidor cups está publicando impresoras de red que ha detectado, cuando los servidores originales de esas impresoras ya no existen o no tienen la impresora configurada puede dejar al servidor cups con la impresora con un URI incorrecto, normalmente /dev/null. Esto hace que a veces detecte mal la impresora nuevamente si es que vuelve a ser configurada.

Como usuario root de Linux, hacer

service cups stop
rm /var/cache/cups/remote.cache
service cups start

Luego de unos segundos deberían aparecer las impresoras correctas.

Impresoras de red

A veces pone un socket extraño para imprimir, funciona a la perfección durante unos días y después de una actualización deja de funcionar.

El URI del dispositivo debe ser

socket://192.168.1.11:9100 

o el número ip que corresponda para su red. Este es mi caso para una HP 2600n color.

SELinux y resolución de problemas

En servidores y clientes conviene tener SELinux habilitado. En servidores es porque necesitamos la máxima seguridad. En clientes, porque necesitamos proteger al linux del cliente y de ataques externos.

SELinux me ayudó a detectar, por ejemplo, un virus que entró en un equipo con windows en una red con Fedora 11 en la puerta de enlace a internet, con un proxy squid corriendo ahí. El virus desde adentro de la red usaba el proxy para hacer sus cosas, y el proxy no estaba bloqueado para usuarios internos, por lo que se tuvo que hacer una configuración más fina de squid.

Usar Linux con la política destinada en modo obediente. Desde Fedora 11 en adelante, la política destinada viene bastante depurada. Y desde entonces está disponible un manual para configurar selinux, la guía del usuario de SELinux, en donde está documentado lo mínimo indispensable para entender y configurar exitosamente selinux.

Cambio de tipos de archivos

Averiguar primero el tipo que debe tener el directorio y los archivos que lo contienen. Por ejemplo, yo tengo el squid en el directorio /cache, y el tipo es squid_cache_t, entonces hay que hacer:

semanage fcontext -a -t squid_cache_t "/cache(/.*)?"

y luego reetiquetar para que quede con el tipo apropiado al reiniciar también:

restorecon -R -v /cache

Agregado de políticas

En el caso del ejemplo del squid de la sección anterior, todavía hay que agregar políticas de acceso debido al cambio de directorio. Para cada error de selinux, copiar los mensajes crudos de auditoría a un archivo de texto. Como root hacer lo siguiente:

cat elarchivo.txt | audit2allow -M mipolitica

luego hay que instalarla, como root hacer:

semodule -i mipolitica.pp

Si desea ver qué ha hecho, hacer

cat mipolitica.te

Con esto puede resolver todos los problemas de SELinux. Pero primero asegúrese de que el error de SELinux obtenido no sea un problema de etiquetado, para no crear políticas potencialmente peligrosas. Asegúrese también de que no sea un intento de ataque.

Poniendo un dominio en modo permisivo

A veces es necesario poner un dominio en modo permisivo para ver lo que habría negado si estaba en modo obediente. Para hacerlo, usar el siguiente comando:

semanage permissive -a httpd_t

en este caso, se pone permisivo el dominio del navegador web.

Para listar qué dominios están en modo permisivo:

semodule -l | grep permissive

Para volverlo a poner en modo obediente:

semanage permissive -d httpd_t

Los mensajes van a parar normalmente a /var/log/messages, los debe sacar de ahí o del asistente de selinux si desea crear una política para permitir el acceso después, como se indica más arriba en Agregado de Políticas.

Compartir Directorios con Samba

Si necesita compartir directorios para acceder a archivos tipo abrir un documento o abrir una planilla de cálculo, le conviene usar NFS 4 y no Samba.

Utilice Samba cuando haya que compartir directorios de una PC Linux para que accedan clientes windows.

Instrucciones para compartir

  1. Instalar samba y sambaclient
  2. Abrir los puertos correspondientes, en Fedora 9 y posterior hay uno para cliente samba y otro para servidor samba.
  3. En /etc/samba/smb.conf tienen que estar las siguientes instrucciones mínimas. Si no están, agréguelas al smb.conf por defecto que viene en el paquete samba.


[global]
	workgroup = GRUPO
	server string = Servidor Samba de Boris Version %v
	interfaces = lo eth0 eth1 
	hosts allow = 127. 192.168. 

	# logs split per machine
	log file = /var/log/samba/log.%m
	# max 50KB per log file, then rotate
	max log size = 50
	
	security = share
      guest ok = yes
      guest account = usuario
	passdb backend = tdbsam
	
	wins support = yes
	wins proxy = yes
	dns proxy = yes

	load printers = yes
	cups options = raw
	printing = cups

#============================ Definiciones de qué se comparte ==============================
	
[printers]
	comment = Todas las Impresoras
	path = /var/spool/samba
 	browseable = no
	guest ok = no
	writable = no
	printable = yes
	
[c]
	comment = Acceso Publico
	path = /home/usuario/compartido
	public = yes
	writable = yes
      browseable = yes
	guest ok = yes
	printable = no

Una vez finalizada la configuración, habilitar el servicio en Sistemas -> Administración -> Servicios.

Desde Nautilus, el explorador de archivos predeterminado de GNOME, se debe escribir

smb://elservidor/c

para listar el directorio compartido como c en elservidor. Puede llegar a tener problemas con los permisos de accesos desde sistemas Linux. Se puede resolver montando automáticamente el recurso compartido.

Conexión Automática al Recurso Compartido

Yo usé cron. En /etc/cron.d agregar un archivo con nombre que Ud. elija, por ejemplo, misdiscos, con el siguiente contenido

/etc/cron.d/misdiscos:

*/2 * * * * usuario /etc/rc.d/discos &> /dev/null

El "&> /dev/null" es para que no mande correo cada vez que lo haga, sino mandaría cada 2 minutos un correo al usuario y el archivo en /var/spool/mail/usuario puede crecer mucho. Luego, en /etc/rc.d/discos hay que montar los directorios. El contenido sería el siguiente:

/etc/rc.d/discos:

#!/bin/bash

if [ ! -r /home/usuario/i/nada.txt ]; then
  mount /home/usuario/i
fi 

if [ ! -r /home/usuario/j/nada.txt ]; then
  mount /home/usuario/j
fi

Este archivo tiene que ser ejecutable. En el script se mencionan un subdirectorio i y otro j dentro del directorio del usuario, por lo tanto hay que crearlos. Todos los directorios en donde se montan los recursos compartidos deben estar vacíos.

También se menciona un archivo nada.txt. Debe crear un archivo nada.txt en el directorio compartido de la máquina servidora. Para montar, prueba si el archivo nada.txt es accesible para lectura, si no es accesible, monta el recurso compartido.

Al montar, lo hace solamente con el nombre del directorio, por lo tanto debe estar mencionado en /etc/fstab. Agregue las siguientes líneas para el ejemplo dado arriba:

/etc/fstab (agregar lo siguiente a ese archivo):

//pc1/c  /home/usuario/i  cifs users,credentials=/home/usuario/credsmb,dir_mode=0777,file_mode=0777 0 0
//pc2/c  /home/usuario/j  cifs users,credentials=/home/usuario/credsmb,dir_mode=0777,file_mode=0777 0 0

En esas líneas se ponen explícitamente qué tipos de permisos se necesitan. Menciona también las credenciales a usar, que están en el archivo credsmb.

/home/usuario/credsmb:

username=Invitado
password=

Con esas credenciales, va a funcionar también para computadoras windows compartiendo directorios.

No olvidar crear el archivo nada.txt en //pc1/c y las demás PCs a las que se acceda, para que se pueda probar la existencia del punto de montaje.

Para que esto funcione, se necesita que mount y unmount puedan ser ejecutados por los usuarios normales y no por root únicamente. En una ventana de terminal, como root hacer lo siguiente:

chmod +s `which mount.cifs`
chmod +s `which umount.cifs`

Fuentes Truetype

GNOME busca las fuentes primero en el directorio .fonts del usuario. Entonces hay que copiar los archivos .ttf al directorio ~/.fonts, si no existe el directorio, crearlo.

Para el Sistema BCE, las fuentes utilizadas en windows son las que están en los archivos siguientes

  • Arial
    • arialbd.ttf
    • arialnb.ttf
    • arialbi.ttf
    • arialni.ttf
    • ariali.ttf
    • arialn.ttf
    • arialnbi.ttf
    • arial.ttf
  • Códigos de barras
    • Code128bWin.ttf (Código 128C, numérico)
    • Code128bWinLarge.ttf (Código 128C, numérico)
    • debcbar.ttf (Codabar, numérico)
    • debecker.ttf (Código 39, alfanumérico)
  • Courier New
    • couri.ttf
    • courbi.ttf
    • cour.ttf
    • courbd.ttf
  • Times New Roman
    • times.ttf
    • timesbd.ttf
    • timesbi.ttf
    • timesi.ttf
  • Microsoft Sans Serif
    • micross.ttf

El sistema toma las fuentes al instante. Puede llegar a necesitar salir y volver a entrar para que tome las fuentes recién copiadas al directorio .fonts del usuario.

Rescate de una Instalación de Grub

Cuando se instala linux, se instala grub como gestor de arranque. Al principio, los usuarios miedosos del cambio pueden llegar a instalar linux y windows en la misma PC. El orden de instalación debería ser primero el linux y después el windows. Pero, luego de instalar windows, éste rompe la configuración de grub.

Para recuperar la instalación de grub,

  1. entrar en modo rescate desde el medio de instalación usado (CD, DVD o pendrive)
  2. chroot /mnt/sysimage
  3. grub-install /dev/sda

cambiar /dev/sda por el disco en donde están los sistemas operativos instalados (sda, sdb, sdc, etc.)

Evolution y GNOME Keyring

Evolution es el cliente de correo recomendado. Es muy potente y tiene a spamassassin como antispam. Anda muy bien, lo recomiendo, no va a extrañar para nada el outlook.

El drama es que a veces el cliente cambia la contraseña, entonces evolution se queja de que debe ingresar la clave para habilitar el GNOME Keyring, y debe ingresar la clave anterior.

Para resolver este problema, borrar el directorio ~/.gnome2/keyrings. La próxima vez que ingrese a evolution, le pedirá la clave de usuario, y debe ingresar la misma que usa para ingresar a linux. De esta manera, al coincidir las contraseñas, el GNOME Keyring no le pedirá la clave de nuevo, hasta que la cambie el usuario.

Se me bloquea el teclado numérico

Alt-MayusIzq-BloqNum

OpenSSH

El openssh se utiliza mucho para entrar de una máquina a la otra en modo terminal, sin molestar a los usuarios.

Configuración de OpenSSH

  1. Instalar el paquete openssh.
  2. Agregue en /etc/sshd_config una línea con AllowUsers donde liste todos los usuarios que pueden ingresar
AllowUsers usuario otrousuario
  1. Con ssh-copy-id dar de alta desde la máquina cliente los usuarios que pueden ingresar a este equipo.

Configuración del Cortafuego

El objetivo es bloquear los intentos de acceso por fuerza bruta.

Se debe primero desmarcar ssh de Servicios Confiables.

En Archivos de reglas personalizadas agregar /home/yo/misreglasssh a la tabla filter, para ipv4.

En el archivo /home/yo/misreglasssh, tiene que ir lo siguiente:

-A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set
-A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 60 --hitcount 4 -j DROP
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

La primera es para solicitar rastreo de una ip, la segunda es para incrementar el contador de cuántas veces coincidió, en un intervalo de 60 segundos y que, cuando llegue al cuarto intento, bloquee la conexión. Es decir, dará tres intentos en un minuto, luego negará todos los demás intentos que se den en un intervalo menor a un minuto.

Agregando usuarios clientes

Primero hay que generar una clave dsa o rsa. Yo prefiero dsa por ser libre. Y también prefiero que mis claves dsa no tengan clave de manera que no necesite poner la clave cada vez que haga "ssh usuario@computadora" para entrar a una computadora.

Para generar el par de claves dsa sin contraseña:

ssh-keygen -t "dsa" -P""

el -P"" es password sin password.

Luego, para agregarme como cliente a otra computadora servidora ssh debo hacer:

ssh-copy-id -i ~/.ssh/id_dsa.pub usuario@ip_o_nombre_equipo

Va a pedirle la clave de usuario en el equipo servidor.

Se puede verificar si está tudu legal haciendo

 ssh usuario@ip_o_nombre_equipo ls

Si lista el directorio de inicio de usuario en ese equipo es porque está todo bien.

Copiando claves a otras máquinas

En el apartado "Agregando usuarios clientes" se indicaba como agregarse uno como cliente desde un equipo A a otro equipo B.

Ahora, el problema de sentarse en el equipo B y conectarse como cliente al equipo A, se puede hacer también sin claves copiando directamente las claves desde el equipo A al B. No hace falta generar claves nuevas. Para esto hacer:

scp usuario@equipo_A:~/.ssh/id_dsa* usuario@equipo_B:~/.ssh

Si está sentado en el equipo A se puede hacer de esta otra forma:

scp ~/.ssh/id_dsa* usuario@equipo_B:~/.ssh

Y si está sentado en el equipo B, hay otra alternativa:

scp usuario@equipo_A:~/.ssh/id_dsa* ~/.ssh

Luego, desde el equipo B haciendo

ssh usuario@equipo_A

no debería pedirle clave alguna.

NO OLVIDAR que usuario debe estar en AllowUsers del /etc/ssh/sshd_config del equipo_A, sino no lo dejará entrar. AllowUsers viene normalmente comentado, pero no es recomendable porque le intentarán entrar como root.

Espero que les haya gustado, para mi es de extrema utilidad, cuando se lo combina con sshfs, explicado más adelante.

sshfs

En redes vulnerables, queda claro que una conexión encriptada es la mejor opción. sshfs monta un directorio compartido en una máquina cliente, usando una conexión encriptada con ssh. Es una joya, porque es muy simple y fácil de usar y a prueba de cualquier sniffer, por lo que se puede implementar en redes inseguras brindando una seguridad muy alta. Que alguien me corrija, creo que no existe esto en windows.

Previo a usar sshfs debe aprender cómo configurar OpenSSH. Si OpenSSH está bien configurado en el servidor, conectar como usario y acceder a sus archivos es muy sencillo con sshfs.

Se debe instalar el paquete fuse-sshfs.

Para montar el directorio hacer:

sshfs usuario@servidor:/directorio/subdir /home/yo/dirmnt -o sshfs_sync,cache=no,no_readahead

y para desmontar:

fusermount -u /home/yo/dirmnt

Las opciones especificadas para montar son:

  • sshfs_sync para que sincronice la escritura.
  • cache=no para que no haga cache, lo que es normalmente peligroso cuando hay mucha gente que accede al mismo archivo al mismo tiempo.
  • no_readahead si no hace caché, la prelectura es innecesaria.

Ver con man sshfs las opciones disponibles.

Se puede automatizar el montaje con cron.d, como se especifica en una sección más arriba.

Firma Digital y Encriptación con GPG

Generación de claves y administración

Para generar la clave, en su cuenta de usuario hacer:

gpg --gen-key

Elegir dsa-elgamal.

Hay que generar también un certificado de revocación de la clave:

gpg --output revocar.asc --gen-revoke micuenta@midominio.com

Guardar el archivo revocar.asc, por las dudas quede comprometida la clave.

Exportar la clave pública para que pueda pasárselas a sus posibles destinatarios de correo.

gpg --armor --export micuenta@midominio.com > micuenta.asc

el archivo micuenta.asc es el que debe enviar a sus destinatarios para que puedan autenticar sus mensajes.

Exportar también la clave privada, para guardarla por las dudas se rompa la máquina de trabajo.

gpg --armor --export-secret-key micuenta@midominio.com > micuenta-priv.asc

De más está decir que micuenta-priv.asc no debe caer en manos peligrosas.

Con micuenta-priv.asc y micuenta.asc se puede resolver el problema de reinstalar el linux, para no generar de nuevo y volver a circularizar las claves.

Encriptar archivos

Desde la línea de comando se debe hacer:

gpg -er destinatario@dominio.com.ar archivo

y generará un archivo.pgp en formato binario con la clave pública de destinatario@dominio.com.ar

Si la transferencia es por email o por http, conviene que sea en formato ascii 7 bits. Hacer lo siguiente:

gpg -a -er destinatario@dominio.com.ar archivo

y generará un archivo.asc con el archivo original encriptado en formato ascii.

Desencriptar archivos

Supongamos que le mandan un archivo.zip.pgp, para desencriptar hacer:

gpg -o archivo.zip -d archivo.zip.pgp

y obtendrá el archivo.zip.

Puede ser que le hayan mandado un archivo.zip.asc, en cuyo caso el procedimiento es el mismo.

Configuración de Evolution para Firmas Digitales

Para que Evolution firme los correos y pueda encriptar, debe seleccionar en "Preferencias --> Editar su Cuenta de Correo --> Seguridad" la opción "Firmar siempre los mensajes salientes cuando se use esta cuenta".


Configuración de Conexión para todo el Sistema con NetworkManager

NetworkManager viene configurado para administrar conexiones para el usuario actual, por lo que las mismas no están disponible si algún usuario no ingresó al sistema, lo cual suele ser problemático en conexiones inalámbricas.

Primero modificar en /etc/NetworkManager/nm-system-settings.conf en la sección main para que diga

plugins=keyfile

Por defecto viene plugins=ifcfg-rh para que use la configuración de system-config-network.


Listar Archivos y Sacar Extensión

Por ejemplo, si quiero listar los *.po y sacarles la extensión .po hay que hacer:

ls *.po | sed 's/\.po//g'

Sacar \r de archivos de texto de Windows

En Linux, un fin de línea es \n, en cambio en Windows es \r\n.

Para algunos scripts de bash o sh, a veces el \r da problemas. Para eliminarlo hacer lo siguiente:

sed 's/\r//g' archivofuente.txt > archivodestino.txt

Luego puede reemplazar el archivo fuente con el archivo destino generado.


Servidor CVS con pserver

El CVS anda muy bien, no es difícil configurarlo y tiene muchos años de uso, por lo que debe estar recontraprobado hasta ahora. Maneja archivos binarios sin problemas.

CVS es la solución para el programador que vive de la programación, debido a que le permite rastrear todos los cambios importantes en todos y cada uno de los archivos de su proyecto de programación.

CVS también se puede utilizar en repositorios de archivos de documentos, aunque para estos tipos de archivos puede ser mejor o más práctico un respaldo con rsync.

Instalación del servidor CVS

Instalar xinetd y modificar el /etc/xinetd.d/cvs con las siguientes líneas:

/etc/xinetd.d/cvs:

disable = no
env = /el_dir_del_repositorio_cvs
server_args = -f --allow-root=/el_dir_del_repositorio_cvs pserver

y comentar la línea con bind para que atienda en todas las direcciones de la PC servidora.

Hay que agregar el usuario cvs y que use de shell a /sbin/nologin. El directorio de inicio del usuario cvs debe ser /el_dir_del_repositorio_cvs La clave no importa porque no se usará.

Luego, hay que crear el archivo de claves.

htpasswd -c -d /el_dir_del_repositorio_cvs/CVSROOT/passwd usuario1
htpasswd -c -d /el_dir_del_repositorio_cvs/CVSROOT/passwd usuario2

para cada usuario que agregue le va a pedir contraseñas. Ingresar las que desee el usuario.

Luego, al final de cada línea de usuario en ese archivo passwd, agregar :cvs que significa que pertenece al grupo cvs.

En este punto de la configuración, debe restaurar el respaldo del repositorio cvs en /el_dir_del_repositorio_cvs, si es que así fuere.

Finalmente, se debe hacer

 chown -R cvs:cvs /el_dir_del_repositorio_cvs

para que el usuario cvs pueda acceder a los archivos del repositorio.

Instalación y uso del cliente de CVS

Si es linux, cvs de linux. Si es windows, usar TortoiseCVS.

La primera vez que acceda le pedirá que haga login. Hacer:

cvs -d ":pserver:usuario@IP_o_Nombre:/el_dir_del_repositorio_cvs" login

Luego simplemente laburar. Para bajar módulos del repositorio:

cvs -d ":pserver:usuario@IP_o_Nombre:/el_dir_del_repositorio_cvs" -z9 co el-modulo

Para subir los cambios realizados:

cvs -d ":pserver:usuario@IP_o_Nombre:/el_dir_del_repositorio_cvs" -z9 ci -m "" el-modulo

Yo tengo un archivo script de shell con todo los "cvs co" para bajar y otro con los "cvs ci" para subir los cambios hechos.

También se puede usar un cliente gráfico. Bajo linux, Cervisia funciona muy bien. Bajo windows, TortoiseCVS se integra con el explorador de windows.

MediaWiki

Configuración

Una vez instalado, ir a xxx/wiki/config con un navegador para poder configurar. El directorio config debe tener permiso para que cualqueira pueda escribir durante la configuración. Poner los parámetros adecuados. La base de datos debe estar agregada en MySQL, y el usuario wiki de esa base de datos debe tener todos los permisos para hacer cualquier cosa con esa base de datos, desde cualquier lado.

Se genera un archivo LocalSettings.php en el subdirectorio wiki/config, moverlo a wiki (el directorio padre). Agregar en ese archivo el logo, debajo de $wgSitename. Yo también le agregué wgGroupPermissions para que solamente los usuarios registrados puedan editar las páginas.

$wgLogo = "/milogo.png";
$wgGroupPermissions['*']['edit'] = false;

Y listo, poner de nuevo el directorio config como de solo lectura, para que nadie cambie nada.

Puede necesitar copiar de skins de /usr/share/mediawiki/skins a /var/www/html/wiki/skins. En mi caso, tengo equipos virtuales con una sola ip pública. Lo único que hice fue lo siguiente:

ln -s /usr/share/mediawiki/skins /var/www/html/midir/wiki/skins

No debe haber un archivo ni directorio con nombre skins dentro de midir/wiki, entonces se crea el enlace al lugar adecuado.

A veces, el rpm instala en /var/www en vez de /var/www/html, entonces mover el directorio completo a /var/www/html si lo hace así.

Actualización

Cuando actualiza también hace macanas, rompe todo. Normalmente actualiza a /var/www, por lo tanto hay que mover a /var/www/html o a un subdirectorio de este si es que está haciendo equipos virtuales con apache. Proceder con la configuración, y hacer lo mismo que se hizo al principio.

Respaldo de las Bases de Datos

NO USAR respaldo y restaurar de mysql si cambia de versiones de mediawiki. El procedimiento de respaldo y restaurado con mysql funciona solamente cuando no cambia la versión de mediawiki.

Si va a actualizar mediawiki, se recomienda respaldar primero, porque a veces cambian los formatos de las tablas o se agregan tablas nuevas.

Respaldo con MediaWiki

MediaWiki tiene en páginas especiales una opción para exportar e importar páginas. Usar exportar para sacar respaldo e importar para restaurar respaldo.

Hacer una lista en un archivo de texto de las páginas (los títulos usados) que componen la wiki y ponerlas una por línea. Lamentable esa lista de páginas no las tira el MediaWiki, la tiene que hacer Ud. a medida que va agregando páginas a la wiki.

En exportar, copiar pegar la lista de páginas a exportar. Marcar "Incluye sólo la revisión actual" y "guardar como fichero".

El archivo va a parar en la carpeta de Descargas del usuario actual. Está en formato XML. Con gedit puede ver lo que tiene, está bastante claro.

Para restaurar, hay que importar el archivo XML generado. No carga las páginas que ya existían antes. Si tiene una que ya existía y la quiere superponer con el respaldo, tiene que editar a mano el archivo xml de respaldo, copiar y pegar en la página a cambiar con el editor de mediawiki.

Respaldo con MySQL

Yo uso mysql, por lo tanto, el respaldo es el respaldo normal de mysql. Se lo puede hacer desde mysql administrator.

Restaurar de la forma usual de MySQL. Si es en una instalación nueva de mysql, probablemente necesite agregar el esquema y el usuario de mediawiki a mano, porque no lo agrega al restaurar.

Para respaldar y recuperar una instalación anterior, en un linux nuevo recién instalado:

  • Sacar respaldo de la base de datos y copiarlo a un lugar seguro.
  • Instalar el linux nuevo con mediawiki y mysql.
  • Configurar mediawiki correctamente.
  • Restaurar la base de datos.

Configurar subida de archivos

En MediaWiki 1.14 en Fedora 10 los archivos van a parar a /usr/share/mediawiki/images, cambiar el dueño y grupo a apache.

Crear un enlace simbólico desde /var/www/html/wiki/images a /usr/share/mediawiki/images, habrá que borrar wiki/images si existía, para poder crear el enlace

ln -s /usr/share/mediawiki/images /var/www/html/wiki/images

Editar LocalSettings.php y agregar dos variables:

$wgEnableUploads       = true;
$wgUploadPath       = "{$wgScriptPath}/images";

Probablemente $wgEnableUploads ya esté agregado, cambiar a true.

Y listo, probar subir algo.

MediaWiki con SELinux habilitado

Leer este artículo.

Puede ser que necesite agregar un par de políticas si tiene el paquete mediawiki-nomath instalado.

Para mi configuración tuve que agregar los siguientes tipos:

semanage fcontext -a -t httpd_t "/usr/share/mediawiki/bin(/.*)?"
restorecon -R -v /usr/share/mediawiki/bin

La configuración original de selinux parece que tiene problemas en Fedora 11. En total tuve que agregar 6 políticas para poder permitir que se suban los archivos. Para agregar políticas, ver la sección Consejos para Linux#Agregado de políticas.

Teclado Bloqueado en Modo Gráfico

Esto me pasó una vez, resulta que luego de alguna configuración se me bloqueó el teclado. Luego de hurgar, me dí cuenta que el teclado no estaba en /etc/X11/xorg.conf, por lo que lo tuve que agregar y reiniciar el equipo. Esto lo hice con Ctrl+Alt+1 entrando en modo texto.

Por alguna razón, me había borrado InputDevice en ServerLayout y la sección completa InputDevice con id Keyboard0.

En /etc/X11/xorg.conf tengo actualmente:

# Xorg configuration created by pyxf86config

Section "ServerLayout"
	Identifier     "Default Layout"
	Screen      0  "Screen0" 0 0
	InputDevice "Keyboard0" "CoreKeyboard"
EndSection

Section "Device"
	Identifier  "Videocard0"
	Driver      "intel"
EndSection

Section "InputDevice"
	Identifier "Keyboard0"
	Driver "kbd"
	Option "XkbModel" "pc105"
	Option "XkbLayout" "es"
EndSection

Section "Screen"
	Identifier "Screen0"
	Device     "Videocard0"
	DefaultDepth     24
	SubSection "Display"
		Viewport   0 0
		Depth     24
	EndSubSection
EndSection

Aclaro también que esto lo hago en mi PC de prueba, que es la de este wiki, y por eso se rompió. No actualicen de manera frecuente en su servidor empresarial, menos sin antes probar los cambios en otra PC.


Buscador Beagle

He probado google desktop y me gustó más el beagle-search porque es más eficiente y busca solamente en mi PC. Además hace un manejo incremental de los índices, en donde google desktop hacía que la máquina se ponga realmente lenta.

Los resultados de búsqueda son realmente excelentes, y busca también en cuentas del correo electrónico manejado con evolution para el usuario actual.

  • Instalar beagle, beagle-evolution y beagle-gnome
  • A la partición donde guarda sus documentos, habilitarle los atributos extendidos. Agregarlo en fstab
/dev/hda3     /home     ext3     defaults,user_xattr     1 2
  • Una vez habilitado en fstab, volver a montar la partición
# mount -o remount /home
  • Agregar un lanzador al escritorio que inicie el programa 'beagle-search'. Ese es el buscador en modo gráfico.

Al principio, beagle-search le mostrará que está armando el índice. Puede tomar un par de horas para indexar aproximadamente 1000 archivos de texto .odt o .doc. Durante ese tiempo, la máquina se pondrá un poquito más lento, no tanto como con google-desktop para linux. Luego, solamente hay que buscar. En resumen, una joya, muy útil.


Restaurar una Sesión de GNOME

Esto me pasó el 20 Oct 2008. Estaba trabajando con mi laptop y mi hija me apagó la computadora. Entonces quedaron grabadas las aplicaciones que estaban en ejecución en ese momento, lo que hacía que al volver a entrar a la sesión de GNOME, éste se colgaba y no había forma de que entre.

Lo que hay que hacer, es volver a la configuración predeterminada. Para esto hay que borrar los directorios .gnome2 .gconf .gconfd y .metacity del directorio /home/usuario del usuario en cuestión. Y listo, arranca un GNOME limpito.

Para borrar debe entrar en una terminal con Ctrl-Alt-F1 a F4. Sino, en modo gráfico entrando como root.


Respaldo de Archivos con rsync

En la mayoría de las redes hay máquinas que son puestos importantes con documentos y archivos a respaldar. Al ser puestos importantes no se puede molestar cada tanto para respaldo, sino que conviene que sea automático. Para esto se puede usar rsync combinado con ssh y cron.

La línea de comando para respaldar es:

rsync --progress -avzre ssh usuario@ip-o-nombre-maquina:/home/usuario/doc dir-local-res

-a es archivo, -v que muestre lo que va haciendo, -z que comprima antes de transferir, -r para que inspeccione los subdirectorios también, -e ssh que use el shell ssh. Ver en la configuración de OpenSSH sobre cómo configurar para entrar sin que pida clave. Iría una línea por directorio a respaldar en un archivo de comando, y en /etc/cron.d un archivo con la línea siguiente:

* 13,20 * * * yo /home/yo/respaldos/respaldar

Esta línea significa que en las horas 13 y 20 de cada día, ejecute como usuario 'yo' el archivo respaldar, que tiene todas las líneas con comandos rsync para sacar el respaldo que yo quiero. Ver en 'man 5 crontab' el formato de los archivos que van en /etc/cron.d, para aprender cómo especificar horas y días.

No hace falta aclarar que el tráfico por la red va encriptado gracias a ssh, por lo que los intrusos no podrían interceptar información importante y valiosa con un sniffer.


Actualización de Sistemas con rsync

En un cliente en donde todavía se está desarrollando sistemas, los ejecutables cambian muy a menudo, y llevar un registro de qué computadoras se actualizaron y cuándo es complicado y hasta tedioso, cuando son más de 20 equipos. Entonces, pruebo los ejecutables en un equipo, y luego los desparramo a los demás con rsync. No he encontrado hasta ahora otra forma mejor de hacerlo. Antes usaba wget con unzip, pero había que primero hacer zip de los ejecutables y subirlos a un servidor ftp o http. Con rsync se simplifica el proceso e incluso se puede automatizar.

La línea de comando para coordinar los ejecutables es:

rsync --progress -avze ssh usuario@ip-o-nombre-maquina-prueba:/home/usuario/progs/* ~/progs

-a es archivo, -v que muestre lo que va haciendo, -z que comprima antes de transferir, -e ssh que use el shell ssh. Ver en la configuración de OpenSSH sobre cómo configurar para entrar sin que pida clave. En mi caso, yo uso siempre un directorio progs. Cambiar por el que le guste a Ud. usar.

El comando rsync dado contempla el caso en que en el directorio progs de origen hay menos archivos que en el directorio progs de destino, que es el caso en que sólo se actualizan partes importantes, algo muy frecuente para mí. En el destino no se borra nada.

De más está aclarar que el tráfico por la red va encriptado gracias a ssh.


Deshacer una actualización con yum

Las actualizaciónes en Fedora a veces rompen versiones de programas que funcionaban bien. Por ejemplo, evolution-2.24.1 imprimía bien, pero evolution-2.24.4 se colgaba al intentar imprimir, aparentemente por un error en los desarrolladores de evolution. La corrección al error estaría en la versión 2.24.5, días después de estar disponible la versión 2.24.4.

Para volver atrás, borrar incluyendo las dependencias:

yum remove paquete

Luego, para instalar el anterior:

yum install paquete-version-lanz.arch

e instalar las dependencias inclusives. Si hay problemas al instalar las dependencias, instalarlas una a una a mano con yum install y el nombre completo del paquete, con versión incluída.


Multimedia

De más está decir, gnome-mplayer es el paquete a instalar. Está en rpm fusion. No olvidar instalar los plugins de los formatos a usar. Muy bueno.

Conversión de Formatos Multimedia

Las reuniones de directorio de donde trabajo a la mañana las grabamos para poder luego hacer el acta. Descubrí que es mejor grabar con un celular, por el micrófono bueno que tiene, y luego convertir el formato a mp3 con Mobile Media Converter (una joya), que debería estar en rpm fusion también. Luego, los mp3 los reproducimos con audacious (no olvidar el plugin de mp3) que nos permite ir hacia atrás y hacia adelante para desgrabar la reunión, obviamente se transcribe en un openoffice writer bajo fedora. :-)


Plugin de Firefox para ver páginas con MP3 incluídos

Cuando se abre una página que tiene sonido incorporado, da un error tratando de buscar un complemento decodificador MPEG-1 Layer 3 (MP3). Hay que instalar el paquete gstreamer-plugins-ugly del repositorio RPM Fusion Free (rpmfusion.org), sino lo va a enloquecer con los mensajes de error.


Ver videos .flv y .mp4 en Totem

Se usan los complementos de gstreamer. Instalar el paquete gstreamer-ffmpeg del repositorio nonfree.rpmfusion.org.

Totem está en Aplicaciones -> Sonido y Video -> Reproductor de Películas.

Mandar informe LogWatch a otra computadora en internet

Esto es cuando el ISP bloquea el envío de correo por su smtp que no sea un usuario válido del dominio.

Las instrucciones que están funcionando por el momento (al 06 Nov 2009) son la siguientes.

  • Habilitar SMART_HOST en /etc/mail/sendmail.mc
define(`SMART_HOST', `smtp.midominio.com.ar')dnl
  • Comentar LOCAL_DOMAIN para que lo saque de /etc/hosts al mandar desde esta computadora
dnl LOCAL_DOMAIN(`localhost.localdomain')dnl
  • En el archivo /etc/mail/access agregar lo siguiente:
AuthInfo:smtp.midominio.com.ar "U:usuario@midominio.com.ar" "P:laclave" "M:LOGIN"

U: es el usuario y P: la clave en formato texto plano, tal cual como fue dada de alta la cuenta del usuario en midominio.com.ar

  • Modificar en /etc/hosts la línea de 127.0.0.1 para que se vea como sigue:
127.0.0.1       midominio.com.ar  localhost.localdomain  localhost

Es decir, midominio.com.ar está al comienzo. Entonces, al buscar el nombre de 127.0.0.1, sendmail lo sacará de aquí y armará los correos como de usuario@midominio.com.ar o root@midominio.com.ar

  • Agregar un alias de cuenta al servidor de correo real de midominio.com.ar para que el usuario@midominio.com.ar sea también root@midominio.com.ar. De esta manera no rebotarán los correos automáticos enviados por la computadora con linux que estamos configurando.


Todavía estoy estudiando el efecto que tiene agregar midominio.com.ar a 127.0.0.1, si descubro algo malo lo documentaré aquí.

Estas eran las instrucciones anteriores

Para hacer esto he tenido que descomentar en /etc/mail/sendmail.mc la línea con SMART_HOST. Eliminar el dnl del comienzo y poner ahí el nombre del servidor smtp externo a usar. Arnet bloquea el uso del puerto 25, por lo que poner smtp.arnet.com.ar en una computadora que entra por un adsl de arnet debería funcionar.

Luego hay que enmascarar el dominio con su dominio propio o el de arnet para que no bloquee el envío por chequeo de spam. La opción es MASQUERADE_AS y hay que ponerle el dominio a usar. En arnet debería ser arnet.com.ar para que no bloquee. En mi caso lo uso para un dominio propio.

Consultar una cadena en un paquete

Por ejemplo, la cadena 'hosts detect' en el paquete smolt-server

yumdownloader smolt-server; rpm -ihv smolt-server-1.2-4.2.fc11.noarch.rpm --nodeps; grep 'hosts detect' $(rpm -ql smolt-server)

Error DB_RUNRECOVERY en Berkeley Data Base 4

Trabajando con poEdit, en un momento dado me dió el siguiente error

DB_RUNRECOVERY: Fatal error, run database recovery

Lo que hay que hacer para solucionarlo es:

  • Ubicar el archivo base de datos (.db)
  • Volcarlo en otro archivo de texto:
db_dump archivo.db > archivo.volcado
  • Renombrar o borrar el archivo anterior:
mv archivo.db archivo.db.0
  • Volver a construir el archivo .db:
db_load archivo.db < archivo.volcado

Programación

Programo sistemas en C++ para Linux y Windows. Actualmente uso Borland C++ 5.01 con OWL para Windows en la mayoría de mis sistemas (de a poco voy portando a linux). Y GNU C++ con DialogBlocks y a veces CodeBlocks para Linux y Windows, para los sistemas nuevos. La GUI usada es wxWidgets. DialogBlocks es un editor RAD para esa biblioteca, no es gratis, pero la licencia es de bajo costo. He decidido usar DialogBlocks porque de alguna forma tengo que contribuir al proyecto wxWidgets y a su autor, Julian Smart.

Para los sistemas viejos hechos para windows uso cxoffice, la versión comercial de wine. La versión comercial de wine anda por lejos mucho mejor que wine, y demostró ser muy estable en estos últimos 3 años. Un ejemplo, una computadora con CentOS 5 instalada hace 3 años todavía sigue trabajando como servidor y como cliente de mi sistema. Todavía, al 03 Mar 2009, no fue necesario tocar el CentOS ni el cxoffice, aunque mi sistema recibió innumerables actualizaciones, a un ritmo de 2 a 4 por mes (mejoras, obviamente, se las hace si el cliente paga por el servicio).

Bueno, a continuación algunos consejitos.

DialogBlocks

DialogBlocks es un IDE con RAD para wxWidgets. Es el que actualmente uso para desarrollo en linux/windows.

Configuración para la compilación en DialogBlocks

En la pantalla de Build | Configurations, poner en

en Libraries: %AUTO% -lbce
en Library path: "%AUTO%,../bce/lib" 
y en Include Path: %AUTO% -I"../" -I"../bce/include"

Archivo:DBSettings.png

Uso de libgnomeprintui en impresión en GNOME

Si no se configura, wxWidgets versión anterior a la 3.0 usa una versión propia de postscript para imprimir bajo GTK+.

Al construir la wxWidgets desde el DialogBlocks, hay que especificarle la opción --with-gnomeprint En wxWidgets build command, presionar Expand para ver lo que genera, luego agregar a mano --with-gnomeprint.

Archivo:DBCfgGnomePrintUI.png

Antes de construir la wxWidgets, hay que verificar que estén instalados los paquetes libgnomeprintui22-devel y libgnomeprint22-devel, sino usará su versión propia con postscript.

Hay que limpiar la wxWidgets y volver a construir, para que haga caso al cambio.

Esto inhabilita las demás opciones, por lo que se hace para una sola configuración.

Si necesita volver al modo automático, cambiar el comando por %AUTO%.

CodeBlocks

CodeBlocks es un IDE con RAD para wxWidgets. En el momento en que empecé el desarrollo para linux, en el año 2006, wxSmith, el editor RAD incluído en CodeBlocks, no era lo suficiente profesional como para usarlo para laburos comerciales, por lo que opté por DialogBlocks, aunque haya que pagar. Ahora, 3 años después, ha cambiado mucho, pero no lo he probado como para dar una opinión sobre el editor RAD. En una de esas capaz que es muy bueno, y es FOSS. Tarea pendiente: probar el editor wxSmith de CodeBlocks.

Configuración para la compilación en CodeBlocks para usar BCE

Una vez creado el proyecto, normalmente crea una configuración Debug y otra Release del proyecto. Además hay una configuración global para todo el proyecto.

Para el proyecto global, poner en Search Directories -> Compiler

../bce/include

en Search Directories -> Linker

../bce/lib

Para la sub-configuración Debug, en Linker Settings -> Link Libraries agregar

 bced

y en Release agregar a la lista

 bce

Además, en Settings -> Compiler and Debugger -> Other Settings -> Compiler Logging elegir Full command line. Le ayudará para depurar errores y además aprenderá como compilar a mano si es que hace falta.

Configuración para la compilación en CodeBlocks para usar wxWidgets

Es conveniente usar el paquete de desarrollo que viene con su Linux. Para Fedora se llama wxGTK-devel. Este paquete pone a disposición el programa wx-config que devuelve los parámetros de configuración para la compilación y encadenamiento.

En Project -> Build Options -> Compiler Settings -> Other Options debe ir una línea como la que sigue (con esas comillas simples, son importantes en Linux y CodeBlocks):

`wx-config --inplace --cxxflags`

En Project -> Build Options -> Linker Settings -> Other linker options va lo que sigue:

`wx-config --libs`

Si está usando windows, o está usando otra biblioteca wxWidgets personalizada, hay que buscar el directorio donde generó las bibliotecas. Por ejemplo, si usa DialogBlocks para compilar wxWidgets, el wx-config se encuentra en dir-wxWidgets/GCCBuildReleaseGTK2/, por lo que habrá que poner ese directorio al comienzo de la línea a ingresada.

CVS con Cervisia

Cervisia es el cliente CVS gráfico que más me gusta para Fedora. Está en el paquete kdesdk.

Tiene un sólo problema, crear un módulo nuevo no es tan simple, pero con las instrucciones de abajo deberían alcanzar para superar esto.

Bajar un módulo - cvs checkout

Para bajar un módulo, usar la opción Repository -> Checkout. Completar los datos y presionar Ok. Los datos importantes son el nombre del módulo, el directorio de trabajo (que es el directorio padre de donde se creará el directorio del módulo) y los parámetros de conexión
Archivo:CVSCheckout.png

Crear un módulo nuevo - cvs import

  • Dejar en el directorio a subir los archivos que deben estar en el repositorio CVS.
  • Luego ir a la opción Repository -> Import
    Archivo:CVSImport.png
    Los campos importantes son:
    • Nombre del módulo, el que Ud. elija
    • Carpeta de trabajo, en este caso es el que corresponde al módulo (no el padre de este como en checkout).
    • Release tag, poner el mismo nombre del módulo o alguno que elija Ud.
  • Una vez importado, cambiar el nombre al directorio del proyecto y bajarlo con cvs checkout. Ver arriba. Esto es así en Cervisia, no he encontrado la solución todavía para que se cree la carpeta CVS en la carpeta del proyecto que se acaba de importar. La carpeta renombrada queda como respaldo o la puede borrar.

Conversión float a double

Con GNU C++ no usar este tipo de conversión. Más bien pasar de float a Real2Dec y luego a double, pero no directamente de float a double porque tiene mucho error de redondeo.

Conversión de char * a unicode y viceversa

El problema se presenta en construcciones Unicode para Linux con DialogBlocks, usando la wxWidgets precompilada de la distribución linux. Las cadenas unicode en linux son multibytes, por lo que no funciona el printf tal cual es.

Lo que actualmente estoy usando y funciona para conversiones de cadenas de caracteres de 8 bits a cadena unicode es:

  • para convertir de char * a Unicode
wxString::FromAscii((char *) cad)

cad es un char *, const char * o Ascii0.

  • para convertir de Unicode a const char *
(const char *) cadwx.mb_str()

mb_str() devuelve un wxCharBuffer y esta clase tiene un operador (const char *) que devuelve la versión de 8 bits de la cadena. La clase no tiene un operador (char *), hay que usar (const char *).

Parche para wxHtmlEasyPrinting de wxWidgets

Hay un problema relacionado con el hecho de tener un proyecto cuya ventana principal sea un wxDialog en vez de un wxFrame. El problema es que wxHtmlEasyPrinting no se crea con el atributo wxFRAME_FLOAT_ON_PARENT por lo que el wxDialog principal la superpone y el efecto es indeseado.

Esto fue informado con el ticket #10341 y propuse un parche que no fue aplicado hasta el día de la fecha (03 Ago 2009) en wxGTK 2.8.10.

El parche es el siguiente, por si lo quiere aplicar a mano:

--- htmprint.cpp	2008-09-15 06:34:39.000000000 -0300
+++ htmprint.cpp	2009-01-07 13:00:02.000000000 -0300
@@ -581,13 +581,17 @@
     {
         delete preview;
         return false;
     }
 
+    if (! m_ParentWindow)
+        m_ParentWindow = ::wxGetActiveWindow();
+
     wxPreviewFrame *frame = new wxPreviewFrame(preview, m_ParentWindow,
                                                m_Name + _(" Preview"),
-                                               wxPoint(100, 100), wxSize(650, 500));
+                                               wxPoint(100, 100), wxSize(650, 500),
+                                               wxDEFAULT_FRAME_STYLE|wxFRAME_FLOAT_ON_PARENT);
     frame->Centre(wxBOTH);
     frame->Initialize();
     frame->Show(true);
     return true;
 }

Parche para wxPreviewControlBar para ver con zoom a 150%

Modificar src/common/prntbase.cpp en la línea 1362 de la versión wxGTK 2.8.10 para que quede

   m_currentZoom = 150;

Interfaz CGI

La Interfaz CGI sirve para generar páginas dinámicas HTML a través de programas que corren en el servidor HTTP.

El tema es Extenso por lo que se hizo una página aparte. Haga clic en el enlace para abrir la página que lo documenta.

Herramientas personales