jueves, 19 de abril de 2007

Instalación de webmin

Muchas veces nos podemos perder entre tanto comando, un sudo apt-get, etc, etc, etc.... A veces solo quisieramos tener un programa para poder tener acceso a nuestro servidor desde nuestra estación de trabajo, desde la casa o desde la china, pues e aquí una solución, no es la única, ni la mejor pero a mi me gusta. Se trata de WEBMIN un administrador sobre la web muy facil de instalar y utilizar.


Descomprimimos el archivo “webmin-1.300.tar.gz” (podemos bajarlo desde www.webmin.com)

root@mail:/home/instaladores#tar -zxvf webmin-1.300.tar.gz

Vamos a la carpeta donde se movio webmin

root@mail:/home/instaladores#cd /opt/webmin-1.300

Dentro de la carpeta ejecutamos

root@mail:/opt/webmin-1.300#./setup.sh

En primera instancia webmin nos pregunta en que directorio estarán los archivos de configuración y los archivos log.

De momento vamos a dejar el que nos muestra por defecto, apretamos ENTER sin escribir nada

Config file directory [/etc/webmin]:

Nuevamente apretamos ENTER para el directorio donde estara el log

Log file directory [/var/webmin]:

Ahora nos consulta la ubicación de perl, en mi caso se encuentra en el directorio que webmin lo indica por defecto entonces solo apreto ENTER

Full path to perl (default /usr/bin/perl):

Continuación el puerto de servicio, lo dejamos en el que indica por defecto 10000; apretamos ENTER

Web server port (default 10000):

Seguidamente nos consulta el login (admin por defecto), si se desea se puede cambiar pero yo lo dejare tal como está y apretare ENTER

Login name (default admin):

Ahora escribimos la contraseña y luego ENTER

Login password: ******

Repetimos la contraseña(despues ENTER)

Password again: ******

Luego nos pregunta si usaremos SSL, el cual requiere de los paquetes que ya instalamos con anterioridad openssl y modulo de perl ssl (net::SSLeay), por lo cual le decimos que SI

Use SSL (y/n): n

Continuando, nos pregunta si se iniciara el servicio al iniciar el sistema; le decimos que SI

Start Webmin at boot time (y/n): y

Listo, ahora nuestro webmin se ejecutara en:

http://mail:10000/

Instalación de un servidor de correo en UBUNTU 6.10 (Edgy Eft)

Software a Utilizar:

Database Server: MySQL 5.0

Mail Server: Postfix

DNS Server: BIND9

POP3/IMAP: Courier-POP3/Courier-IMAP.

Requerimientos

Ubuntu 6.10 Server installation CD

(http://www.ubuntu.com/download - http://ftp.cw.net/pub/linux/ftp.ubuntu.com/releases/6.10/ubuntu-6.10-server-i386.iso)

Instalación de softaware requerido

Ahora instalmos paquetes que vamos a necesitar posteriormente, corremos

apt-get install binutils cpp cpp-4.0 fetchmail flex gcc gcc-4.0 libarchive-zip-perl libc6-dev libcompress-zlib-perl libdb4.3-dev libpcre3 libpopt-dev linux-kernel-headers lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev

DNS Server

Correr

apt-get install bind9

Editamos el archivo /etc/default/bind9.

vi /etc/default/bind9

OPTIONS="-u bind -t /var/lib/named"
# Set RESOLVCONF=no to not run resolvconf
RESOLVCONF=yes

Iniciamos BIND, y revisamos /var/log/syslog en busca de errores:

/etc/init.d/bind9 start

Configurando Postfix

Postfix es muy sencillo de ponerlo a andar. Con la configuración que viene por defecto (si no recuerdo mal), ya es capaz de enviar mensajes. Para instalarlo en Woody, basta con:

apt-get install postfix

También vamos a instalar el soporte que tiene postfix para mysql:

apt-get install postfix-mysql

Para l@s que no usen debian, este soporte hay que darselo recompilando postfix con las opciones necesarias de la forma que muestro a continuación:

make -f Makefile.init makefiles \
'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include' \
'AUXLIBS=/usr/local/mysql/lib -lmysqlclient -lz -lm'
make && make install

Sustituyendo /usr/local por la ruta donde tengais dichos archivos en vuestra máquina. A continuación copiamos el archivo virtual del src de postfix al directorio de éste:

cp src/virtual/virtual /usr/libexec/postfix

Una vez instalado, vamos a /etc/postfix y con vuestro editor favorito, abrimos el archivo principal de configuración llamado main.cf, el cual está estupendamente comentado. Además, existen en Internet numerosos y muy buenos documentos sobre cómo configurar postfix desde cero. Os pego a continuación el mío para que podais ir comparando y comento solamente los cambios importantes:

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
myhostname = server1.example.com
mydomain = example.com
myorigin = $myhostname
mydestination = example.com, localhost, localhost.example.com

La siguiente opción nos permite elegir en qué tipo de "formato" postfix va a guardar los mensajes en el buzón de cada usuario. Si elegimos Mailbox, los mensajes se guardan en un único archivo en el que se van encolando los mensajes según van llegando al buzón. El formato Maildir, consiste en un directorio en el que hay tres subdirectorios en el que se van guardando los mensajes en diferentes archivos. Courier-IMAP necesita de esto, por lo que este es el que elegimos (nótese la "/" final):

home_mailbox = Maildir/
mail_spool_directory = /var/spool/mail/
relay_domains = $mydestination
mynetworks = 192.168.1.0/24
smtpd_banner = $myhostname ESMTP $mail_name
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10
debug_peer_level = 2
debugger_command = PATH=/usr/bin:/usr/X11R6/bin xxgdb $daemon_directory/$process_name $process_id & sleep 5
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

Es a partir de aquí donde cambia un poco la cosa. Vamos a ir comentando línea por línea:

Este parámetro, es lo que se le va a poner delante de un valor que tendremos en la BD para conseguir llegar hasta el lugar donde se guarda el buzón del usuario. Vamos a dejarlo con "/"
virtual_mailbox_base=/

Señalamos a postfix que los UserIDs y GroupIDs de los usuarios de correo los obtendrá por medio del archivo indicado, que accederá a MySQL


virtual_uid_maps=mysql:/etc/postfix/ids.cf
virtual_gid_maps=mysql:/etc/postfix/gids.cf

A continuación indicamos que mediante el archivo mysql_virt.cf vamos a acceder a MySQL para ver dónde están los buzones de los usuarios:

virtual_mailbox_maps=mysql:/etc/postfix/mysql_virt.cf local_transport = virtual
program_directory = /usr/lib/postfix

Pasamos a continuación a mostrar el contenido de los ficheros antes referenciados en el main.cf llamados mysql_virt.cf, ids.cf y gids.cf. Todos ellos hacen referencia a una Base de Datos implementada en MySQL, que más adelante detallaremos. En este ejemplo, tanto postfix como MySQL está en la misma máquina, por ello el primero se conectará a la base de datos por medio de los sockets internos de unix/linux. Para ello ponemos el parametro hosts con el valor unix:mysqld.sock. Si estuviesen en máquinas distintas, habría que poner el nombre de la máquina en la que se encuentra MySQL.

mysql_virt.cf
#Usuario y password para acceder al servidor MySQL
user=postfix
password=postfix
#Nombre de la Base de Datos y la tabla
dbname=mail
table=passwd
#El campo que elegimos es maildir (lugar donde está el buzón), donde el id del usuario coincida con el destinatario del mensaje
select_field=maildir
where_field=id
#El host que tiene el MySQL
hosts=unix:mysqld.sock

ids.cf
#Usuario y password para acceder al servidor MySQL
user=postfix
password=postfix
#Nombre de la Base de Datos y la tabla
dbname=mail
table=passwd
#El campo que elegimos es uid
select_field=uid
where_field=id
#El host que tiene el MySQL
hosts=unix:mysqld.sock

gid.cf
#Usuario y password para acceder al servidor MySQL
user=postfix
password=postfix
#Nombre de la Base de Datos y la tabla
dbname=mail
table=passwd
#El campo que elegimos es gid
select_field=gid
where_field=id
#El host que tiene el MySQL
hosts=unix:mysqld.sock

También debemos modificar el archivo master.cf, añadiendo la línea:

virtual unix - n n - - virtual

Antes de que se nos olvide, debemos de cambiar también el archivo /etc/login.defs , descomentando la línea "QMAIL_DIR Mailidir" para indicar, que todos los usuarios que hagan login en nuestro sistema, usarán también el formato Maildir. Debemos de comentar las 2 que aparezcan a su lado, lógicamente.



Configurando MySQL

Hemos visto como Postfix va a hacer uso de MySQL. Vamos pues a instalarlo y configurarlo:

# apt-get install mysql-server

No hay que tocar nada reseñable en la configuración del MySQL. Únicamente, si el servidor va a estar en otra máquina distinta a la máquina donde está postfix, tendremos que abrir un puerto para que pueda "escuchar". Por defecto, esto no es así debido a temas de seguridad. Para hacerlo, basta con comentar la línea skip-networking del fichero /etc/mysql/my.cfg y rearrancar el servidor.

Bien, una vez que lo tenemos instalado, vamos a crear la Base de Datos y la tabla necesaria para guardar toda la información de. Voy a mostrar cómo hacerlo paso por paso:

#Nos conectamos como root en un principio(la contraseña por defecto está en blanco, por lo que bastaria con dar "enter")
mysql -h localhost -u root -p
#Creamos la BAse de Datos llamada mail
mysql>create database mail;
#Vemos si está creada:
mysql>show databases;
#Seleccionamos con la que vamos a trabajar:
mysql>use mail;
#Creamos la tabla en la que guardaremos la información de los usuarios virtuales:
mysql>create table passwd(
id char(128)DEFAULT '' NOT NULL,
clear char(128)DEFAULT '' NOT NULL,
name char(128)DEFAULT '' NOT NULL,
uid int(10) unsigned NOT NULL,
gid int(10) unsigned NOT NULL,
home char(255)DEFAULT '' NOT NULL,
maildir char(255)DEFAULT '' NOT NULL,
KEY id (id(128))
);

#Vemos cómo ha quedado la tabla recién creada:
mysql> describe passwd;

+---------+------------------+------+-----+---------+-------+
| Field   | Type             | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+-------+
| id      | char(128)        |      | MUL |         |       |
| clear   | char(128)        |      |     |         |       |
| name    | char(128)        |      |     |         |       |
| uid     | int(10) unsigned |      |     |         |       |
| gid     | int(10) unsigned |      |     |         |       |
| home    | char(255)        |      |     |         |       |
| maildir | char(255)        |      |     |         |       |
+---------+------------------+------+-----+---------+-------+

#Creamos un usuario postfix y le damos todos los permisos en esta tabla:
mysql>GRANT ALL ON mail.passwd TO postfix@localhost IDENTIFIED BY "postfix";

#Dependiendo de la configuración, quizás haya que crear algún usuario del estilo postfix@HOSTNAME... para que postfix pueda acceder desde otras máquinas por ejemplo.

#Creamos tres entradas de ejemplo:
mysql>insert into passwd (id,clear,name,uid,gid,home,maildir) values("user1@splitfoo.homeip.net","user1pass","usuario1","1003","8","/","/var/spool/mail/user1/Maildir/");
mysql>insert into passwd (id,clear,name,uid,gid,home,maildir) values("user2@splitfoo.homeip.net.net","user2pass","usuario2","1002","8","/","/var/spool/mail/user2/Maildir/");
mysql>insert into passwd (id,clear,name,uid,gid,home,maildir) values("user3@splitfoo.homeip.net","user3pass","usuario3","1004","8","/","/var/spool/mail/user3/Maildir/");
mysql>quit

### NOTA: para cambiar la password root, basta con hacer lo siguiente:
mysql> SET PASSWORD FOR root@localhost=password('nuevapass');
mysql> FLUSH PRIVILEGES;
###

Bien, vamos a explicar todo esto un poco más despacio. Vemos que en la tabla hemos creado una serie de campos, entre ellos id que será el mail del usuario, clear que es su contraseña para autentificarse (puede cifrarse añadiendola de la forma password("contraseña")), uid que es el UserID y al que podemos ir asignándole números secuencialmente (para ello mirar antes /etc/passwd para ver a partir de cuál no está "ocupado"), el gid que en mi caso lo he puesto a 8 y que corresponde con el grupo de "mail" (lo he hecho así para que el usuario pueda escribir en el directorio /var/spool/mail que tiene como grupo propietario a "mail"), home que por ser usuarios "virtuales" lo dejamos a "/" mismo y el maildir o lugar donde se guardará el Maildir del usuario en cuestión. A esta ruta se le añade por delante el valor que habíamos puesto en /etc/postfix/main.cf como virtual_mailbox_base y que era "/". Se puede jugar combinando ambas, pero de esta forma aseguramos la ruta.

Vamos a hacer una pequeña modificación al script de arranque de MySQL, que se situa en /etc/init.d/mysql.
Modificaremos el apartado de "start)" para que quede de la siguiente forma:

'start')
# Start daemon
echo -n "Starting MySQL database server: mysqld"
/usr/bin/safe_mysqld > /dev/null 2>&1 &
for i in 1 2 3 4 5 6; do
if is_mysqld_alive; then break; fi
sleep 1
done
if is_mysqld_alive; then
ln -f /var/run/mysqld/mysqld.sock /var/spool/postfix/mysqld.sock
echo "."
else
echo "...failed."
fi
;;

Esto es debido a que el proceso smtpd de Postfix corre en una "jaula" o chroot y no puede acceder al socket, por ellocreamos el enlace.
Esta línea no haría falta en el caso de que accedamos a MySQL por red, pero en el caso que nos ocupa, hemos dicho que teniamos ambos servicios corriendo en la misma máquina.



Configurando Courier

Nos disponemos a configurar a continuación Courier. En sí, este programa es también un MTA, pero como hemos dicho, para esta función ya tenemos a Postfix. Vamos a usar solamente el courier-imap (también tiene courier-pop), para lo que hacemos:

apt-get install courier-imap courier-authdaemon courier-authmysql courier-base

Con lo que se nos instalará la aplicación y el demonio de autentificación, la autentificación por MySQL... Los archivos de configuración, están situados en /etc/courier/ por lo que debemos dirigirnos allí.

Lo primero que debemos de cambiar es el modo de autentificación de los usuarios al usar IMAP. Para ello, editamos el archivo authdaemonrc y sustituimos la línea authmodulelist="authpam" por authmodulelist="authmysql", por lo que a partir de ahora, ya no se utilizará el módulo PAM, sino MySQL. Lógicamente hay que indicar a courier dónde debe mirar los usernames y passwords; para ello tenemos el archivo authmysqlrc, que queda de la siguiente forma:

MYSQL_SERVER SERVER1
MYSQL_USERNAME postfix
MYSQL_PASSWORD postfix
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE passwd
MYSQL_CLEAR_PWFIELD clear
DEFAULT_DOMAIN example.com
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD id
MYSQL_HOME_FIELD home
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir

En el archivo imapd, tan solo hay que cambiar la última entrada y ponerla a YES (IMAPDSTART), que por defecto viene a NO.



Poniendo en marcha todo esto

Debemos asegurarnos que todos los demonios necesarios están corriendo en la máquina: courier-authdaemon, courier-imap, postfix y mysqld.
Podemos ya entonces a hacer pruebas enviando mails a los usuarios creados en la Base de Datos. No debemos olvidar mirar los logs del sistema para ver los posibles fallos aparecidos. Cuando se envía un mail a un usuario, se deben de crear un directorio con su nombre en /var/spool/mail/ que contendrá el subdirectorio Maildir. Si esto no es así puede que sea por tema de permisos. Asegúrate de de que /var/spool/mail/ tenga como grupo propietario a "mail" (en mi caso) y tenga permisos de escritura.
Otro fallo que puede aparecer al enviar un mail es "Temporary lookup failure"; si nos fijamos en los logs vemos que postfix no puede conectarse a MySQL. Habrá que asegurarse entonces de que realmente nos podemos conectar con el usuario creado en postfix, que tiene los permisos necesarios...

Desde un cliente que soporte IMAP, podemos probar también que se leen bien los mensajes. Al autentificarse, el nombre de usuario, será el id de la tabla passwd de la Base de Datos y la contraseña será el campo clear.



Conclusiones

Con todo esto, en teoría ya deberías poder estar usando Postfix con MySQL y Courier, pero seguramente te encontrarás con más de un problema. Para poder solucionarlos, hay que estar continuamente mirando los logs para ver cuál puede ser la causa. En /var/log/mail.log aparece bastante información cada vez que se manda un mail y puede ayudar bastante.

A modo de resumen, podemos decir que el proceso es el siguiente:
Cuando mandamos un mail por SMTP a un usuario, postfix lo recibe y lo primero que hace es ver si dicho usuario existe en la base de datos de MySQL. Por ello, se conecta a él y lanza una consulta SQL. Si no obtiene resultado, es que dicho user no existe por lo que no es posible enviar el mail. Si la consulta tiene éxito, coge el campo maildir cuyo id corresponde con el destinatario del mail, y mira a ver si existe el directorio Maildir en /var/spool/mail/usuario/. Si no es así lo crea y deposita el mail en dicho directorio, estando ya a disposición del usuario para que lo consulte por vía IMAP a través de Courier.

Todo el tema de usuarios puede ser gestionado fácilmente mediante shell script o por PHP accediendo directamente a la Base de Datos, pudiendo añadir, eliminar, modificar...Lógicamente, a la tabla de usuarios se la puede añadir más campos de información sobre el usuario.



miércoles, 18 de abril de 2007

Por qué programo y no cobro

Acabo de terminar un parche para el Psi. Bueno, en realidad acabo de ver un capítulo de "Aquí no hay quien viva", pero lo anterior lo había hecho justo antes. Estoy echando una manilla. Así en mi tiempo libre. Está muy bien; últimamente me aceptan todos los parches, y pregunto al jefe de proyecto por cosas que están sin hacer y hacen falta, para hacerlas.

Puede resultar gracioso que esté ilusionado porque me dejan trabajar. Puede parecer incluso estúpido, perder mi tiempo, sin recibir nada a cambio, cuando podría estar haciendo algo productivo por mi vida. Trabajando de verdad. Sin embargo tiene sentido. Si lo miras desde el punto de vista correcto, claro.

Esto lo hago porque quiero y me gusta. Es decir, que yo aporto mi tiempo a este proyecto porque me siento bien al usar un programa que, además de ser muy útil, yo he ayudado a hacer. He aprendido y estoy aprendiendo muchas cosas programándolo. Y me llena de orgullo ver que la gente usa un producto que yo he hecho, porque cree que es bueno. Es como cuando alguien mira el cuadro de un pintor, le gusta el edificio que hizo un arquitecto o cuando aplauden a un músico después de un concierto. También soy músico, y creedme cuando digo que se parece. Les gusta tu trabajo. Les gusta tu obra. Y, aunque eso no te dé dinero, es suficiente...

Supongo que es algo natural en el ser humano; la búsqueda del reconocimiento, y tal. No tengo ni idea del trasfondo socio-psicológico que esto puede tener. Lo que sé es que te sientes satisfecho. Útil. Y encima lo haces haciendo algo que te gusta: programar y aprender. Suena a tópico, totalmente. A este punto todo el mundo estará pensando en mi Linux, en mis ideas comunistas sobre la GPL y el antisistema, etcétera, etcétera, etcétera. Seré sincero: me importan un rábano el sistema y el antisistema; me importan un rábano los modelos de negocio; me importan un rábano las licencias y los que las venden y trafican con ellas. Hago esto porque creo en ello. Lo hago sin pedir nada a cambio puesto que esta gente no tiene nada que darme, y yo lo sabía desde un principio. Creo en que lo que hacemos es una obra, no de arte, pero de conocimiento. Una obra de utilidad. Que la gente usará si le gusta.

Me hace gracia que intenten ridiculizar este tipo de trabajos, sencillamente porque no dan dinero. Pobres ineptos. Quién les ha dicho que trabajamos por dinero. Quién les ha metido en la cabeza que todo cero y uno producido se produce a cambio de un cheque. Quién les ha convencido de que las líneas de código se pueden y deben vender, como quien vende sardinas en los mercadillos. Pobres ineptos, repito. Ineptos por ciegos, por pensar que todo el mundo piensa o debería pensar como ellos; que su idea de que las variables y los algoritmos se venden. Pobres, porque en el fondo me dan pena. Por intentar algo tan estúpido como vender ideas, concepciones y estructuras abstractas. Pero como dije anteriormente, a mi plin. Lo respeto y lo comparto. Me parece igualmente loable ganarse la vida así, siempre que sea de forma honrada. Enhorabuena si consiguen salir adelante e incluso triunfar.

Pero por favor, no pongan una sonrisa sarcástica, traten de ridiculizarme y mirarme por encima del hombro, sencillamente porque yo no gano dinero.

No voy a soltar la típica charla sobre "la informática es conocimiento" y "el nuevo modelo de negocio de la informática" que probablemente todo el mundo que lee se sepa ya. Yo lo creo así, y mucha gente lo cree así también, y punto. Pongo mi conocimiento, y acaso mi esfuerzo, sobre la mesa. Porque me produce un beneficio que ningún sueldo paga: reconocimiento, sentimiento de utilidad, orgullo y entusiasmo, cuando lo que haces es usado. Porque me hace feliz ver cosas como Ubuntu, como KDE, como Psi. Que lo hacen todo por el usuario y para el usuario. No por el dinero del usuario.

La diferencia no está en el producto final. La diferencia está en los motivos para hacerlo. La diferencia está en que la gente trabaja por el usuario y porque le gusta, en lugar de hacerlo por el sueldo. Ríanse ahora si quieren. Pero si lo hacen recuerden que mis motivos valen mil veces su sueldo de programador.

* Publicado en Bitácora de sabaoth [Barrapunto]

martes, 17 de abril de 2007

Instalacion de Beryl en Ubuntu EDGY con una tarjeta nvidia

Mira esto


Para que quieres windows vista teniendo esto??? y saben cual es la mejor parte....
Es open .....Les dejo un pequeño manual para instalar Beryl en ubuntu con una tarjeta nvidia click aquí

lunes, 16 de abril de 2007

Instalacion de Mono en Linux (Open suse)

Mi primera entrada, un documento que muestra de manera gráfica la instalación de open suse 10.2, mono, y msql. click aquí

Bienvenidos a OpenEcuador

OpenEcuador no pretende ser más que un blog en donde se pueda compartir con muchas otras otras personas conocimiento y ganas de desarrollar en open source... A todos ustedes sean bienvenidos a esta mi humilde colaboración