From the category archives:

Fedora

Revisando memory-sticks abandonados encontré un video de noviembre de 2006 donde grababa una prueba de como me conectaba desde mi máquina XP a mi servidor Linux con KDE y Fedora Core 6. Se puede ver como corría al mismo tiempo un video, un chat 3D escrito en Flash y un programa de demostración 3D de Irrlicht (OpenGL). Desafortunadamente es una de mis primeras pruebas y no transmitía el audio. Al poco rato de hacer este video configuré lo que me hacía falta.

Realmente el desempeño es muy bueno considerando que es una conexión remota. En parte es porque las ordenes OpenGL se corren localmente como se puede ver en el acercamiento a la terminal en la parte final del video.

{ 0 comments }

POP before SMTP con Sendmail y Qpopper

by Jorge Machin on October 26, 2008 · 0 comments

in Fedora, Linux

Ls solución de POP before SMTP que utilizaba en mis años mozos en Interalia estaba basada enpoprelay, qpopper como servidor pop y sendmail como mi servidor SMTP.

Aunque es cierto que la utilizaba hace mucho tiempo (2001?) y actualmente hay muchas otras opciones, se puede comprobar que sigue siendo una opción válida y efectiva.

Instalación de qpopper

Los fuentes se compilan de la siguiente forma:

./configure --enable-specialauth
make
cp popper/popper /usr/local/bin

Finalmente declaramos el servicio en xinetd, creando el archivo /etc/xinetd.d/qpopper :

service pop3
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/local/bin/popper
server_args = qpopper –s
port = 110
}

Y reiniciamos xinetd:

/etc/rc.d/init.d/xinetd restart

Poprelay

El código fuente de Poprelay se pueden encontrar en Sourceforge.

Una vez instalado, para hacerlo funcionar con sendmail, se debe integrar el siguiente código al archivo de configuración /etc/sendmail.mc:

# We probably want the access_db feature enabled.

FEATURE(access_db)dnl

# List of IP addresses we allow relaying from.

Klocalip hash -a<MATCH> /etc/mail/localip
Kpopip hash  -a<MATCH> /etc/mail/popip

LOCAL_RULESETS

SLocal_check_rcpt

# Put the address into cannonical form (even if it doesn't resolve to an MX).

R$*   $: $>Parse0 $>3 $1
R$* <$*> $*  $: $1 <$2 .> $3      Pretend it's canonical.
R$* <$* . .> $*  $1 <$2 .> $3   Remove extra dots.

# Allow relaying if the connected host is a local IP address.

R$*   $: <$&{client_addr}>  Get client IP address.
R<>   $#OK    Local is ok.
R<$* . $-> $*      $(localip $1.$2 $: <$1> . $2 $)    Check last three octets.
R$* <MATCH>  $#OK
R<$-> $*        $: $(localip $1 $: <> $1 $2 $)    Check first octet.
R$* <MATCH>  $#OK

# Allow relaying if the connected host has recently POP3 authenticated.

R$*   $: <$&{client_addr}>  Get client IP address.
R<$*>       $(popip $1 $)   Check full address.
R$* <MATCH>  $#OK

# IP address didn't match.

Recreamos el archivo /etc/sendmail.cf con:

m4 /etc/sendmail.mc> /etc/sendmail.cf

Crear el archivo /etc/mail/localip el cual contiene una lista de todas las direcciones IP y redes que se les va a permitir hacer relay sin autentificacion.

touch /etc/mail/localip

Crear el archivo /etc/mail/popip:

makemap hash /etc/mail/popip </dev/null

Modificar la función scanaddr del archivo /sbin/poprelayd según la versión del servidor de correo POP:

qpoper 2.5X

sub scanaddr ($) {
   local $s, $i, @adressen;
   $s = $_[0];
   $i = index ($s,'popper');
   undef @adressen;
   if ($i>=0){
   ($s =~  /.*?popper.*?POP login.*?(d{1,3}.d{1,3}.d{1,3}.d{1,3})/) && (push (@adressen,$1));     
   }
   return @adressen;
}

qpoper 3.X o posterior:

sub scanaddr ($) {
   local $s, $i, @adressen;
   $s = $_[0];
   $i = index ($s,'popper');
   undef @adressen;
   if ($i>=0){
   ($s =~  /.*?popper.*?(d{1,3}.d{1,3}.d{1,3}.d{1,3})/) && (push (@adressen,$1));     
   }
   return @adressen;
}

En la versión 4 de qpopper se debe agregar esta función:

sub log_parse_qpopper_new ($) {
   local $s,$i,@adressen;
   $s = $_[0];
   $i = index($s,'popper');
   undef @adressen;
   if ($i>=0){
   ($s =~ /.*?popper.*?(d{1,3}.d{1,3}.d{1,3}.d{1,3})/) && (push (@adressen,$1));
   }
   return @adressen;
}

Levantar el demonio y colocarlo en /etc/rc.d/rc.local:

poprelay -d

o bien hacer un archivo de inicialización:

#!/bin/bash
#
# Init file for poprelay server daemon
#
# chkconfig: 2345 55 25
# description: pop/imap client relay deamon
#
# processname: poprelayd
# pidfile: /var/run/poprelayd.pid

# source function library
. /etc/rc.d/init.d/functions

# pull in sysconfig settings

RETVAL=0
POPRD="/sbin/poprelayd";
prog="poprelayd"

start()
{
        echo -n $"Starting $prog:"
        initlog -c "$POPRD -d" && success || failure
        RETVAL=$?
        [ "$RETVAL" = 0 ] && touch /var/lock/subsys/poprelayd
        echo
}

stop()
{
        echo -n $"Stopping $prog:"
        killproc $POPRD -TERM
        RETVAL=$?
        [ "$RETVAL" = 0 ] && rm -f /var/lock/subsys/poprelayd
        echo
}

reload()
{
        echo -n $"Reloading $prog:"
        killproc $POPRD -HUP
        RETVAL=$?
        echo
}

check()
{
        PROCS=`ps -ef | grep "poprelayd -d" | grep -v grep | wc -l`
        if [ $PROCS -ne 1 ]; then
        echo "Restarting dead poprelayd: $PROCS running";
                stop;
                start;
        fi
}

case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        restart)
                stop
                start
                ;;
        reload)
                reload
                ;;
        check)
                check
                ;;
        *)
                echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}"
                RETVAL=1
esac
exit $RETVAL

{ 0 comments }

Medición del Ancho de Banda en Linux

by Jorge Machin on August 10, 2008 · 0 comments

in Fedora, Linux

Un programa muy útil para saber cuanto ancho de banda esta gastando nuestra computadora es vnstat, el cual se puede instalar en Fedora usando yum:

yum install vnstat

Si lo desea compilar de los fuentes, los puede obtener de: http://humdi.net/vnstat/.

Una vez instalado creamos la base de datos para la interfaz que queramos medir, por lo general eth0:

vnstat -u -i eth0

Si se instaló compilandolo a mano, se crea además un cron que se ejecuta cada cinco minutos para llenar la base de datos:

0-55/5 * * * * /usr/bin/vnstat -u

O bien, se quita el comentario (#) en /etc/cron.d/vnstat para habilitarlo si se instaló con yum.

Después de un tiempo, podemos consultar nuestro gasto del dia con:

vnstat -d

O el mensual

vnstat -m

{ 0 comments }

Reviviendo MS-DOS 6.22 con QEMU

by Jorge Machin on June 30, 2008 · 0 comments

in Emuladores, Fedora, Linux, Videojuegos

Al hacer el post de mis videojuegos favoritos, me di cuenta que algunos de ellos ya no los puedo jugar ni usando wine o dosemu. Afortunadamente queda la alternativa de usar un emulador de "PC" e instalar en ellos DOS, Windows 3.11 o Windows95 para disfrutarlos otra vez. Efectivamente, al emular la PC se obtiene una computadora lenta, pero las computadoras de esa época eran igual de lentas y actualmente no se nota la diferencia cuando se juega en una máquina virtual.

Utilicé el conocido emulador QEMU porque funciona en Windows, Linux y Mac y las imágenes creadas son completamente intercambiables.

Instalando QEMU

En Fedora:

La instalación es con yum:

yum install kqemu

Si quiere utilizar aceleración por hardware, QEMU tiene un módulo que ejecuta directamente el código de máquina si se esta en una maquina compatible con los microprocesadores de Intel. Este se levanta como cualquier otro módulo:

modprobe kqemu

En Windows:

Solamente se necesita bajar y descomprimir el archivo zip con los binarios de la siguiente página: http://www.h7.dion.ne.jp/~qemu-win/. No hay archivo de instalación.

En este post se va asumir que todo se hace desde la línea de comando. Si usted prefiere, puede intentar usar el programa Qemu manager.

Si desea utilizar la aceleración por hardware, es necesario que baje e instale el archivo Kqemu-version-install.exe.

Instalado MS-DOS 6.22

El primer paso es crear una imagen del disco duro donde vamos a instalar todo, para ello ejecutamos el comando:

qemu-img create dos622.img 1000M

El nombre de la imagen donde instalaremos es dos622.img y su tamaño es de 1 GB. Es usted libre de cambiar el tamaño a sus necesidades.

El siguiente paso es instalar el MS-DOS. Afortunadamente cuento con unas imágenes de los diskettes de una computadora que tuve. Si usted tiene los diskettes los puede utilizar dando la ruta o creando primero una imagen usando dd o windd. El comando para hacer la imagen de los diskettes sería de la forma:

dd bs=2x80x18b if=/dev/fd0 of=/tmp/disk1.image

Ahora que si no cuenta con un sistema operativo MS-DOS original, podría intentar con FreeDOS o con DR-DOS, que igual y son mejores porque su desarrollo continúa hasta la fecha. Yo utilicé MS-DOS porque los tengo a la mano y usar los originales fue parte de este reto personal.

Con las imagenes o los diskettes a la mano, ejecutamos el comando:

qemu -boot a -fda disk1.img -hda dos622.img

En Windows es necesario agregar el parámetro L al directorio donde esta la instalación. Si estamos sobre el directorio de instalación el comando se transforma en:

qemu -L . -boot a -fda disk1.img -hda dos622.img

Desde aquí se puede seguir la instalación normal del MS-DOS.


¿Evocando pesadillas del pasado?

Los cambios de diskette que pide el instalador se pueden hacer accediendo a la consola, la cual se abre con las teclas 2 y usando el comando:

change floppy0 disk2.img

Si QEMU no conoce el dispositivo floppy0, puede ser porque su sistema lo nombre de otra forma. Para obtener los nombres de los dispositivos, puede ejecutar el siguiente comando y así cambiarlo por el correcto:

info block

Para regresar a la pantalla de instalación se presiona las teclas 1.

Una vez instalado el sistema operativo, se arranca sin la opción -boot y con todo la emulación del hardware que desee:

qemu -L .  -hda dos622.img -cdrom E:

Ahora si lo desea puede configurar a su gusto los archivos CONFIG.SYS y AUTOEXEC.BAT. Los mios tienen esta forma:

CONFIG.SYS:

DEVICE=C:\DOS\SETVER.EXE
DEVICE=C:\WINDOWS\HIMEM.SYS /TESTMEM:OFF
DEVICE=C:\DOS\EMM386.EXE NOEMS
DOS=HIGH
LASTDRIVE=Z
COUNTRY=003,,C:\DOS\COUNTRY.SYS
SHELL=COMMAND.COM /P /e:1024
DEVICE=C:\DOS\DISPLAY.SYS CON=(EGA,,1)
FILES=50

AUTOEXEC.BAT:

@ECHO OFF
PROMPT $p$g
PATH C:\DOS
MODE CON CODEPAGE PREPARE=((850) C:\DOS\EGA.CPI)
MODE CON CODEPAGE SELECT=850
KEYB LA,,C:\DOS\KEYBOARD.SYS
C:\DOS\SMARTDRV.EXE /X
C:\DOS\SHARE.EXE /L:500
C:\DOS\DOSKEY.COM

Si necesita transferir archivos a la partición, en Linux, puede montar la imagen con el siguiente comando:

mount -o loop,offset=32256 dos622 punto_de__montaje

En windows, se pueden crear imágenes iso para leerlas desde QEMU, usar una disketera virtual como VFD o bien ver un directorio de nuestra máquina con el parámetro:

-hdb fat:/mi_directorio

Soporte para CD

Por lo general, los controladores de las unidades de disco compacto se incluían con ellas. Afortunadamente en el sitio 4DOS.infi se puede bajar unos controladores de Acer compatibles con atapi que funcionan correctamente con qemu.

Después de bajar el archivo APICD214.ZIP y transifir VIDE-CDD.SYS a nuestra imagen, se agrega la siguiente línea al archivo CONFIG.SYS:

DEVICE=C:\VIDE-CDD.SYS /D:MSCD001

y esta al AUTOEXEC.BAT:

C:\DOS\MSCDEX.EXE /S /D:MSCD001

Después de reiniciar, ya tenemos acceso a la unidiad de discos.

Soporte para ratón

Podemos usar el controlador CuteMouse que es un ejecutable que podemos agregar al AUTOEXEC.BAT.

Aceleración por hardware

Si ya tiene instalado o cargado los módulos de kqemu, solo necesita agregar la opción -kernel-kqemu

{ 0 comments }

En el pasado, programar aplicaciones en Flash significaba un problema para los usuarios de Linux por el poco soporte que daba Macromedia/Adobe. Afortunadamente, las cosas han cambiado un poco debido a que ahora esta disponible un compilador de AS3 en nuestra plataforma favorita. En este post trato brevemente como hacer películas "swf" en Linux desde la línea de comandos:

Instalación

1. Bajar el Adobe Flex 3 SDK de Adobe (flex_sdk_3.zip) de la siguiente URL: http://www.adobe.com/products/flex/flexdownloads/index.html

2. Como usuario root, desempaquetar el archivo flex_sdk_3.zip y poner algunos permisos para que todos los usuarios lo puedan utilizar:

mkdir /usr/local/bin/flex3
cp flex_sdk_3.zip /usr/local/bin/flex3
cd /usr/local/bin/flex3
unzip flex_sdk_3.zip
chmod a+r * -Rf
chmod a+x bin
chmod a+x bin/*
chmod a+x lib
chmod a+x frameworks
chmod a+x frameworks/libs
chmod a+x frameworks/libs/player
chmod a+x frameworks/locale

O bien, si se quiere evitar problemas, como usuario local en su home:

mkdir flex3
cp flex3_sdk_3.zip flex3
cd flex3
unzip flex3_sdk_3.zip

Escribiendo un programa de prueba

Para ilustrar la compilación, hacemos un pequeño programa de dos archivos que lo único que hace es desplegar un texto y un circulo en la pantalla. El primer archivo llamado SphericCow.as se encargada de dibujar un círculo negro (sobrecargando la clase "Shape"):

package {

    import flash.display.Shape;

    //

    public class SphericCow extends Shape {

       public function SphericCow() {

          graphics.beginFill( 0x000000, 1 );
          graphics.drawCircle( 80 , 70 , 30 );

       }

    }
   
}

El segundo archivo, llamado MyFirstProgram.as, es la aplicación en sí, que utiliza nuestra clase anterior y pone también un pequeño texto:

package {

    import flash.display.Sprite;
    import flash.text.TextField;

   
    //  Main class

    public class MyFirstProgram extends Sprite {
       
        public function MyFirstProgram() {

            var title:TextField = new TextField();
            title.text = "My first Program!";
            addChild(title);

            var sphericCow:SphericCow = new SphericCow( );
            addChild( sphericCow );

        }

    }

}

Compilando nuestro programa

Se compila con:

/usr/local/bin/flex3/bin/mxmlc MyFirstProgram.as

o si lo instalamos en nuestro home:

$HOME/flex3/bin/mxmlc MyFirstProgram.as

El cual creará un archivo MyFirstProgram.swf, el cual podemos arrastrar a nuestro navegador firefox para verlo en acción. Por supuesto, podemos agregar la ruta al archivo .bashrc para evitar el tener que escribir las rutas completas al compilar.

{ 2 comments }