Translate

domingo, 25 de octubre de 2009

CONVERTIR VIDEO RMVB A AVI

Después de probar varias opciones para convertir vídeo RMVB a AVI, con el comando mencoder, la única forma que pude convertirlo fue la siguiente:

Primero:
Instalar el repositorio medibuntu de la siguiente forma:

sudo wget http://www.medibuntu.org/sources.list.d/$(lsb_release -cs).list --output-document=/etc/apt/sources.list.d/medibuntu.list

sudo apt-get -q update

sudo apt-get --yes -q --allow-unauthenticated install medibuntu-keyring

sudo apt-get -q update


Luego de instalar este repositorio instale los siguientes paquetes:

sudo apt-get install mencoder mplayer librte1 librte-dev non-free-codecs
Por ultimo baje el reproductor Real Player para Linux que baja con extensión bin (RealPlayer11GOLD.bin) al cual hay que darle permisos de ejecucion (chmod 755 RealPlayer11GOLD.bin) y por ultimo en /usr/local/codecs hice un links simbolico desde /opt/real/codecs/ donde se encuentra el archivo drvc.so el cual necesita para convertir el video, sino me probocaba el siguiente error:

csottile@smarcnet:~$ mencoder p-CrossingO778.rmvb -oac mp3lame -lameopts preset=128 -ovc lavc -lavcopts
vcodec=xvid -ofps 25 -of avi -o p-Crossing.avi
MEncoder 2:1.0~rc2-0ubuntu19 (C) 2000-2007 MPlayer Team
CPU: Intel(R) Core(TM)2 CPU T5200 @ 1.60GHz (Family: 6, Model: 15, Stepping: 6)
CPUflags: Type: 6 MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1
Compiled with runtime CPU detection.
success: format: 0 data: 0×0 – 0×1467c56d
REAL file format detected.
Stream description: Audio Stream
Stream mimetype: audio/x-pn-realaudio
[real] Audio stream found, -aid 0
Stream description: Video Stream
Stream mimetype: video/x-pn-realvideo
[real] Video stream found, -vid 1
Stream mimetype: logical-fileinfo
VIDEO: [RV40] 672×272 24bpp 23.000 fps 0.0 kbps ( 0.0 kbyte/s)
[V] filefmt:11 fourcc:0×30345652 size:672×272 fps:23.00 ftime:=0.0435
=================================================
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
AUDIO: 44100 Hz, 2 ch, s16le, 64.1 kbit/4.54% (ratio: 8010->176400)
Selected audio codec: [ffcook] afm: ffmpeg (FFmpeg COOK audio decoder)
=================================================
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
===================================================
Opening video decoder: [realvid] RealVideo decoder
Error: /usr/lib/codecs/drvc.so: cannot open shared object file: No such file or directory
Win32 LoadLibrary failed to load: drvc.so, /usr/lib/win32/drvc.so, /usr/local/lib/win32/drvc.so
Error loading dll
ERROR: Could not open required DirectShow codec drvc.so.
Read the RealVideo section of the DOCS!
VDecoder init failed :(
Opening video decoder: [realvid] RealVideo decoder
Win32 LoadLibrary failed to load: drvc.dll, /usr/lib/win32/drvc.dll, /usr/local/lib/win32/drvc.dll
Error loading dll
ERROR: Could not open required DirectShow codec drvc.dll.
Read the RealVideo section of the DOCS!
VDecoder init failed :(
Opening video decoder: [realvid] RealVideo decoder
Error: /usr/lib/codecs/drv4.so.6.0: cannot open shared object file: No such file or directory
Win32 LoadLibrary failed to load: drv4.so.6.0, /usr/lib/win32/drv4.so.6.0, /usr/local/lib/win32/drv4.so.6.0
Error loading dll
ERROR: Could not open required DirectShow codec drv4.so.6.0.
Read the RealVideo section of the DOCS!
VDecoder init failed :(
Opening video decoder: [realvid] RealVideo decoder
Win32 LoadLibrary failed to load: drv43260.dll, /usr/lib/win32/drv43260.dll, /usr/local/lib/win32/drv43260.dll
Error loading dll
ERROR: Could not open required DirectShow codec drv43260.dll.
Read the RealVideo section of the DOCS!
VDecoder init failed :(
Opening video decoder: [realvid] RealVideo decoder
Error: /usr/lib/codecs/drvc.bundle/Contents/MacOS/drvc: cannot open shared object file: No such file or directory
Win32 LoadLibrary failed to load: drvc.bundle/Contents/MacOS/drvc, /usr/lib/win32/drvc.bundle/Contents/MacOS/drvc, /usr/local/lib/win32/drvc.bundle/Contents/MacOS/drvc
Error loading dll
ERROR: Could not open required DirectShow codec drvc.bundle/Contents/MacOS/drvc.
Read the RealVideo section of the DOCS!
VDecoder init failed :(
Cannot find codec matching selected -vo and video format 0×30345652.
Read DOCS/HTML/en/codecs.html!

Una vez echo este link simbolico, cree un script muy simple que lo llame convertervideo.sh la siguiente linea nada mas:

Opción 1:
mencoder -oac mp3lame -lameopts cbr=128 -ovc xvid -xvidencopts bitrate=1200 video.rmvb -o video.avi

Opción 2:
mencoder -oac mp3lame -lameopts cbr=128 -vf scale=640:272 -ovc xvid -xvidencopts bitrate=1200 -ofps 25 -of avi p-Proposl198.rmvb -o p-Proposl198.avi

le di permiso de ejecucion y lo ejecute y todo esta funcionando correctamente.

REFERENCIAS

:: Repositorio de Mediubuntu:
http://www.medibuntu.org/

:: Para que tenga en cuenta, esta el site de Mplayer donde explica muy bien que significa cada opcion del mencoder y es la siguiente:
http://www.mplayerhq.hu/DOCS/HTML/en/index.html

:: Sitio donde bajar el Real Player
http://spain.real.com/realplayer/other-versions/

:: Los blog's que me ayudaron para llegar a buen puerto:
http://linuxsix.blogspot.com/2008/11/convertir-rmvb-avi-en-gnu-linux.html
http://phyx.wordpress.com/2008/11/10/convertir-rmvb-a-avi-ubuntu/

martes, 18 de agosto de 2009

MYSQL: TIPS BASICOS

Crear usuarios
Para saber hay dos formas de crear usuarios, uno es haciendo que el usuario se acople al IP de tu pc, asiendo que solamente el usuario pueda conectarse desde esa pc solamente.

Si bien es mas seguro, se convierte en incomodo cuando por otras razones no tenemos una pc fija, y debemos conectarnos a nuestra base de datos, es por ello que el usuario debe crear con esa libertad.

Usuario administrador

Para crear un usuario administrador debemos utilizar la siguiente sentencia:

Usuario Admin con restricción de acceso:
Solo puede ingresar desde la pc que tenga la dirección IP: 192.168.1.2

mysql>GRANT ALL PRIVILEGES ON *.* TO admin@192.168.1.2 INDENTIFIED BY 'pswd' WITH GRANT OPTION;
Query OK, 0 rows affected (0.02 sec)


Usuario Admin sin restricción de acceso:

mysql>GRANT ALL PRIVILEGES ON *.* TO admin@'%' INDENTIFIED BY 'passwd' WITH GRANT OPTION;
Query OK, 0 rows affected (0.02 sec)


Usuario con privilegios
Sobre una sola Base de datos (ON namebase.* ):

mysql> GRANT select, insert, update, create, alter, delete, drop ON namebase.* TO users@'%' IDENTIFIED BY 'password';

Usuario sin privilegios:
Para crear un usaremos la sentencia:

mysql> GRANT USAGE ON *.* TO anonimo@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.02 sec)


Referencias
GRANT: Permite crear cuentas de usuario MySQL y darles permisos, al mismo tiempo.
'%': Esto dice que puede el usuario admin acceder desde cualquier IP
ON: Permite privilegios en niveles globales: Database y Tablas
TO: Aqui se detalla el nombre del usuario y el enlace a la IP (Fijo o Movil)
IDENTIFIED BY: Etiqueta donde se coloca la password encerrada entre comillas simples.

domingo, 19 de julio de 2009

IPTABLES: USO PRACTICO

Definiciones previas

:: Iptables trabaja con tres tablas:

INPUT: Para conexiones entrantes
OUTPUT: Para conxciones salientes
FORDWARD: Para reenvió de paquetes a la red

:: La operaciones que podemos realizar con IPTABLES son:

Crear una nueva cadena o tabla:
iptables -N cadena (opciones)

Borrar una cadena:
iptables -X cadena (opciones)

Modificar políticas para una cadena pre-armada:
iptables -P cadena (opciones)

Listar las reglas de una cadena:
iptables -L cadena (opciones)

Vaciar las reglas de una cadena:
iptables -F cadena (opciones)

Resetear contadores de paquetes y bytes de todas las reglas de una cadena:
iptables -Z cadena (opciones)

:: Comandos que manipulan reglas de cadenas:
Agregar un nueva regla a una cadena: -A
Insertar un nueva regla en cierta posición de una cadena: -I
Reemplazar una regla de cierta posición de una cadena: -R
Borrar una regla a cierta posición de un cadena: -D
Borrar la primer regla que se corresponde en una cadena: .D

:: Parámetros de estos comandos:
Destino de paquetes: -j acción 
Donde acción puede ser DROP, ACCEPT o el nombre de otra cadena definida por el usuario

Origen del paquete: -s IP[/BASE]
Donde IP es una dirección 10.0.26.2 y /BASE puede ser la mascara de red expresada en CIDR osea 10.0.26.2/24, pero además /BASE puede ser otra dirección IP para definir un rango osea 10.0.26.2/10.0.26.24

Destino de Red de un paquete: -d IP[/BASE]
Al igual que -s, con la diferencia que esta regla es para los paquetes generados en nuestra red con destino IP[/BASE]

Protocolo de un paquete: -p PROTOCOLO (icmp, udp, tcp, etc).
Todos estos parámetros además pueden contener el símbolo "!" el cual tiene un efecto el cual sera distinto al que especifiquemos, un ejemplo es: -s ! localhost es cualquier paquete que no venga de localhost.

Reglas para utilizarlo mas específicamente

:: Filtrar paquetes desde cierta IP
Hay dos cosas a tener en cuenta IP se debe remplazar por una dirección real y acción por DROP, lo cual hará que los paquetes a esa IP sean descartados , y la otra acción es ACCEPT, haciendo que los paquetes sean aceptados por nuestro firewall:

iptables -A INPUT -s IP -j acción

:: Eliminar regla escrita
Cuando la regla creada ya deja de ser útil a nuestra conveniencia y queremos eliminarla debemos básicamente escribir lo mismo pero con la diferencia que en vez de la opción -A debemos usar -D

iptables -D INPUT -s IP -j acción

:: Filtrar paquetes hacia una IP
iptables -A OUTPUT -d IP -j acción

:: Filtrar el PING
iptables -D INPUT -p icmp -j DROP

:: Filtrar Port 139: NetBIOS Session (TCP), Windows File and Printer Sharing
ipables -A INPUT -i ppp0 -p TCP --dport 139 -j DROP

:: Filtrar TELNET:
iptables -t filter -A INPUT -p all -s red_local -d mi_ip --dport 23 -j ACCEPT
iptables -t filter -A INPUT -p all -s 0/0 -d mi_ip --dport -j DROP


:: Filtrar NIS
iptables -t filter -A INPUT -p all -s red_local -d mi_ip --dport 111 -j ACCEPT
iptables -t filter -A INPUT -p all -s 0/0 -d mi_ip --dport 111 -j DROP

miércoles, 15 de julio de 2009

LENGUAJE SQL: USUARIOS Y PRIVILEGIOS

Hasta ahora hemos usado sólo el usuario 'root', que es el administrador, y que dispone de todos los privilegios disponibles en MySQL.

Sin embargo, normalmente no será una buena práctica dejar que todos los usuario con acceso al servidor tengan todos los privilegios. Para conservar la integridad de los datos y de las estructuras será conveniente que sólo algunos usuarios puedan realizar determinadas tareas, y que otras, que requieren mayor

conocimiento sobre las estructuras de bases de datos y tablas, sólo puedan realizarse por un número limitado y controlado de usuarios.

Los conceptos de usuarios y privilegios están íntimamente relacionados. No se pueden crear usuarios sin asignarle al mismo tiempo privilegios. De hecho, la necesidad de crear usuarios está ligada a la necesidad de limitar las acciones que tales usuarios pueden llevar a cabo.

MySQL permite definir diferentes usuarios, y además, asignar a cada uno determinados privilegios en distintos niveles o categorías de ellos.

Niveles de privilegios

En MySQL existen cinco niveles distintos de privilegios:Globales: se aplican al conjunto de todas las bases de datos en un servidor. Es el nivel más alto de privilegio, en el sentido de que su ámbito es el más general.De base de datos: se refieren a bases de datos individuales, y por extensión, a todos los objetos que contiene cada base de datos.De tabla: se aplican a tablas individuales, y por lo tanto, a todas las columnas de esas tabla.De columna: se aplican a una columna en una tabla concreta.

De rutina: se aplican a los procedimientos almacenados. Aún no hemos visto nada sobre este tema, pero en MySQL se pueden almacenar procedimietos consistentes en varias consultas SQL.
Crear usuarios

Aunque en la versión 5.0.2 de MySQL existe una sentencia para crear usuarios, CREATE USER, en versiones anteriores se usa exclusivamente la sentencia GRANT para crearlos.

En general es preferible usar GRANT, ya que si se crea un usuario mediante CREATE USER, posteriormente hay que usar una sentencia GRANT para concederle privilegios.

Usando GRANT podemos crear un usuario y al mismo tiempo concederle también los

privilegios que tendrá. La sintaxis simplificada que usaremos para GRANT, sin preocuparnos de temas de cifrados seguros que dejaremos ese tema para capítulos avanzados, es:

GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...
ON {tbl_name * *.* db_name.*}
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] ...


La primera parte priv_type [(column_list)] permite definir el tipo de privilegio concedido para determinadas columnas. La segunda

ON {tbl_name *
*.* db_name.*},


permite conceder privilegios en niveles globales, de base de datos o de tablas. Para crear un usuario sin privilegios usaremos la sentencia:

mysql> GRANT USAGE ON *.* TO anonimo IDENTIFIED BY 'clave';
Query OK, 0 rows affected (0.02 sec)


Hay que tener en cuenta que la constraseña se debe introducir entre comillas de forma obligatoria. Un usuario 'anonimo' podrá abrir una sesión MySQL mediante una orden:

C:\mysql -h localhost -u anonimo -p

Pero no podrá hacer mucho más, ya que no tiene privilegios. No tendrá, por ejemplo, oportunidad de hacer selecciones de datos, de crear bases de datos o tablas, insertar datos, etc.
Conceder privilegios

Para que un usuario pueda hacer algo más que consultar algunas variables del sistema debe tener algún privilegio. Lo más simple es conceder el privilegio para seleccionar datos de una tabla concreta. Esto se haría así:

La misma sentencia GRANT se usa para añadir privilegios a un usuario existente.

mysql> GRANT SELECT ON prueba.gente TO anonimo;
Query OK, 0 rows affected (0.02 sec)


Esta sentencia concede al usuario 'anonimo' el privilegio de ejecutar sentencias SELECT sobre la tabla 'gente' de la base de datos 'prueba'.

Un usuario que abra una sesión y se identifique como 'anonimo' podrá ejecutar estas sentencias:

mysql> SHOW DATABASES;
+----------+
Database
+----------+
prueba
+----------+
1 row in set (0.01 sec)

mysql> USE prueba;
Database changed

mysql> SHOW TABLES;

+------------------+
Tables_in_prueba
+------------------+
gente
+------------------+
1 row in set (0.00 sec)


mysql> SELECT * FROM gente;
+----------+------------+
nombre fecha
+----------+------------+
Fulano 1985-04-12
Mengano 1978-06-15
Tulano 2001-12-02
Pegano 1993-02-10
Pimplano 1978-06-15
Frutano 1985-04-12
+----------+------------+
6 rows in set (0.05 sec)
mysql>

Como se ve, para este usuario sólo existe la base de datos 'prueba' y dentro de esta, la tabla 'gente'. Además, podrá hacer consultas sobre esa tabla, pero no podrá añadir ni modificar datos, ni por supuesto, crear o destruir tablas ni bases de datos.

Para conceder privilegios globales se usa ON *.*, para indicar que los privilegios se conceden en todas las tablas de todas las bases de datos.

Para conceder privilegios en bases de datos se usa ON nombre_db.*, indicando que los privilegios se conceden sobre todas las tablas de la base de datos 'nombre_db'.

Usando ON nombre_db.nombre_tabla, concedemos privilegios de nivel de tabla para la tabla y base de datos especificada.

En cuanto a los privilegios de columna, para concederlos se usa la sintaxis

tipo_privilegio (lista_de_columnas), [tipo_privilegio (lista_de_columnas)].


Otros privilegios que se pueden conceder son:

ALL: para conceder todos los privilegios.
CREATE: permite crear nuevas tablas.
DELETE: permite usar la sentencia DELETE.
DROP: permite borrar tablas.
INSERT: permite insertar datos en tablas.
UPDATE: permite usar la sentencia UPDATE.

Para ver una lista de todos los privilegios existentes consultar la sintaxis de la sentencia GRANT.

Se pueden conceder varios privilegios en una única sentencia.
Por ejemplo:

mysql> GRANT SELECT, UPDATE ON prueba.gente TO anonimo IDENTIFIED BY 'clave';
Query OK, 0 rows affected (0.22 sec)
mysql>


Un detalle importante es que para crear usuarios se debe tener el privilegio GRANT OPTION, y que sólo se pueden conceder privilegios que se posean.

Revocar privilegios

Para revocar privilegios se usa la sentencia REVOKE.

REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ...
ON {tbl_name * *.* db_name.*}
FROM user [, user] ...


La sintaxis es similar a la de GRANT, por ejemplo, para revocar el privilegio SELECT de nuestro usuario 'anonimo', usaremos la sentencia:

mysql> REVOKE SELECT ON prueba.gente FROM anonimo;
Query OK, 0 rows affected (0.05 sec)


Mostrar los privilegios de un usuario

Podemos ver qué privilegios se han concedido a un usuario mediante la sentencia SHOW GRANTS. La salida de esta sentencia es una lista de sentencias GRANT que se deben ejecutar para conceder los privilegios que tiene el usuario. Por ejemplo:

mysql> SHOW GRANTS FOR anonimo;
+--------------------------------------------------------------------+
Grants for anonimo@%
+--------------------------------------------------------------------+
GRANT USAGE ON *.* TO 'anonimo'@'%' IDENTIFIED BY PASSWORD '*5...'
GRANT SELECT ON `prueba`.`gente` TO 'anonimo'@'%'
+--------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql>


Nombres de usuarios y contraseñas

Como podemos ver por la salida de la sentencia SHOW GRANTS, el nombre de usuario no se limita a un nombre simple, sino que tiene dos partes. La primera consiste en un nombre de usuario, en nuestro ejemplo 'anonimo'.

La segunda parte, que aparece separada de la primera por el
carácter '@' es un nombre de máquina (host). Este nombre puede ser bien el de una máquina, por ejemplo, 'localhost' para referirse al ordenador local, o cualquier otro nombre, o bien una ip.

La parte de la máquina es opcional, y si como en nuestro caso, no se pone, el usuario podrá conectarse desde cualquier máquina. La salida de SHOW GRANTS lo indica usando el comodín '%' para el nombre de la máquina.

Si creamos un usuario para una máquina o conjunto de máquinas determinado, ese usuario no podrá conectar desde otras máquinas. Por ejemplo:

mysql> GRANT USAGE ON * TO anonimo@localhost IDENTIFIED BY 'clave';
Query OK, 0 rows affected (0.00 sec)

Un usuario que se identifique como 'anonimo' sólo podrá entrar desde el mismo ordenador donde se está ejecutando el servidor. En este otro ejemplo:

mysql> GRANT USAGE ON * TO anonimo@10.28.56.15 IDENTIFIED BY 'clave';
Query OK, 0 rows affected (0.00 sec)


El usuario 'anonimo' sólo puede conectarse desde un ordenador cuyo IP sea '10.28.56.15'. Aunque asignar una constraseña es opcional, por motivos de seguridad es recomendable asignar siempre una.

La contraseña se puede escribir entre comillas simples cuando se crea un usuario, o se puede usar la salida de la función PASSWORD() de forma literal, para evitar enviar la clave en texto legible.

Si al añadir privilegios se usar una clave diferente en la cláusula IDENTIFIED BY, sencillamente se sustituye la contraseña por la nueva.

Borrar usuarios

Para eliminar usuarios se usa la sentencia DROP USER.
No se puede eliminar un usuario que tenga privilegios, por ejemplo:

mysql> DROP USER anonimo;
ERROR 1268 (HY000): Can't drop one or more of the requested users
mysql>


Para eliminar el usuario primero hay que revocar todos sus privilegios:

mysql> SHOW GRANTS FOR anonimo;
+--------------------------------------------------------------------+
Grants for anonimo@%
+--------------------------------------------------------------------+
GRANT USAGE ON *.* TO 'anonimo'@'%' IDENTIFIED BY PASSWORD '*5...'
GRANT SELECT ON `prueba`.`gente` TO 'anonimo'@'%'
+--------------------------------------------------------------------+

2 rows in set (0.00 sec)

mysql> REVOKE SELECT ON prueba.gente FROM anonimo;
Query OK, 0 rows affected (0.00 sec)
mysql> DROP USER anonimo;
Query OK, 0 rows affected (0.00 sec)
mysql>

miércoles, 3 de junio de 2009

CAPTURA DE PANTALLA POR CONSOLA

Scrot es una herramienta de línea de comandos (y escrito en C usando la librería imlib2), por lo que, evidentemente, va a correr en un emulador de terminal.

Para realizar una captura de pantalla en el formato JPEG con un retraso (el tiempo de retraso antes de tomar la captura) de, por ejemplo, 5 segundos.

scrot -d desktop.jpg

Para iniciar la cuenta hacia atrás añade un parámetro al comando. Tan sólo se tiene que escribir:

scrot -d 15 -c desktop.png

Si se desea especificar una ventana o parte de una pantalla (utilizando el ratón para señalar el área seleccionada) se tiene que añadir, a continuación, -s por lo tanto:

scrot desktop.png -s

Captura el área seleccionada por el cursor.

Si se desea crear miniaturas para una galería o usar compresión para ahorrar espacio, siempre queda la opción de hacerlo usando un programa como Gimp. Scrot puede generar una miniatura añadiendo el parámetro -t seguido del porcentaje del tamaño original a la de la miniatura.

Para incluir los bordes del gestor de ventanas, al seleccionar una ventana (parámetro -s), añade -b. Se puede establecer la calidad (tamaño y compresión) con -q seguido de un número entre uno y cien (setenta cinco es el valor por defecto).

Al ejecutar un comando se puede unir su salida hacia otro comando con el símbolo & si el resultado es correcto. Si el comando anterior es ejecutado con éxito, se ejecutará el siguiente comando. En este caso, puede añadir el nombre del programa como se muestra:

scrot -d 5 -q 95 -t 30 screenshot.jpeg -b -s && display screenshot.jpeg"

IPTABLES CERRANDO PORTS

Para una mejor segurirad de nuestros servidores o desktops

iptables -A INPUT -i ppp0 -p TCP --dport 139 -j DROP

CAMBIAR MAC A UNA PLACA DE RED

ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx

viernes, 2 de enero de 2009

INSTALAR LIBRERIA GD

Introducción

:: ¿Que es la Liberia GD?
Permite crear imágenes dinamicamente y manejar automáticamente el dimensionamiento, esto es utilizado en aplicaciones donde debemos mostrar datos en forma gráfica, como podrían ser las estadísticas de un sitio web.

:: Aplicaciones que utilizan estas Librerías
Las aplicaciones que suelen usar esta librería son los CM (Joomla, Drupal, Wordpress, etc) y ademas las plataformas para e-learning (Moodle, Dokeos, etc). También se utilizan para en aplicaciones propietarias, el sistema de seguridad para detectar si el que se registra es una persona física o lo están haciendo por intermedio de robot.

:: Considerandos
Esta explicacion esta basada sobre la instalacion realizado sobre un servidor Redhat 3AS Kernel 2.4 y donde el apache y php estan instalado desde archivos source (.tar), lo obliga a instalar todas las librerias de la misma forma. Pero si instalamos el apache y php con los sistemas yum o archvios rpm (RedHat), apt-get (Debian/Ubuntu), debemos emplear el mismo sistema para la instalacion de las librerias en cuestion.

Instalación

:: Panorama General
Para instalar las librería GD, necesitamos de antemano instalar y configurar las siguiente librerías:

zlib.tar.gz
jpeg-6b.src.tar.gz
libpng-1.2.5.tar.gz
freetype-2.1.3.tar.gz

Una vez listas las librerías mencionadas procedemos a instalar la librería GD en su versión:

gd-2.0.28.tar.gz

Desarrollo de la Instalación

Los paso a seguir son:

1°.- Instalación de librerías para compresión ZLIB

Es una biblioteca de compresion de datos, la cual originariamente fue echa para la libreria de imágenes libpng.
Si el sistema operativo no la tiene instalada debemos hacerlo descargando el archivo source zlib.tar.gz y hacer lo siguiente:

a.- Crear el directorio donde se instalara
b.- Descomprimir el paquete zlib en otro directorio
c.- Ejecutar entonces lo siguiente:

'./configure' \
'--prefix=/usr/local/zlib' \
'--libdir=/usr/local/zlib' \
'--enable-shared' \

Decimos que configure el archvio Makefile para que instale la libreria en el directorio mencionado en el prefix, que ademas el directorio lib (libdir) este dentro del enunciado por el prefix, y que pueda ser compartida con otras librerias (enable shared)

make
make install

2°.- Instalacion de la Libreria para manejo de las imagenes JPEG

Descomprimir el archvio en el lugar donde finalmente quedara instalado, y no neceditamos crear ningun directorio ya que al cuando termina la descompresion genera un directorio llamado "jpeg-6b". En el caso particular de www1 se encuentra en: /usr/local/jpeg-6b

tar zxvf jpeg-6b.src.tar.gz

Ejecutar lo siguiente

./configure
./ltmain.sh (demora bastante - crea el archivo .so)
make
make install

3°.- Instalación de la Liberia para manejo de las imágenes PNG
Descomprimir el archivo libpng-1.2.5 en un directorio creado para tal fin. Ingresar al directorio script y hacer:

cp makefile.linux ../Makefile

Luego modificar el archivo Makefile en las variables donde indica por default donde se intalara, el mejor directorio es en /usr/local/include, ya que por default PHP busca en ese directorio las librerias. Compilar e Instalar:

make
make install

En esta librería no se ejecuta el configure ya que no lo posee y es la forma descripta en la documentación.

4°.- Instalación de la Liberia para manejo de las fuentes Freetype.

Descomprimir el archivo freetype-2.1.3.tar.gz en un directorio creado para tal fin e ingresar al directorio donde se descomprimió el archivo tar y ejecutar lo siguiente:

./configure --libdir=/usr/local/include --with-zlib
make
make install

5°.- Instalación de la Liberia GD para el manejo de imágenes

Una vez instaladas las librerias detalladas arriba, se procederá a con la librería GD, descomprimir el archivo gd-2.0.28.tar.gz en un directorio donde quisieramos, luego creamos el directorio donde se instalara:

mkdir /usr/local/src/gd-2.0.28 (Directorio para descomprimir)
mkdir /usr/local/gd-2.0.28 (Directorio donde se instalara)

Se instala como todo paquete tar, osea con los siguiente pasos:

'./configure' \
'--prefix=/usr/local/gd-2.0.28' \
'--with-png=/usr/local/png' \
'--with-jpeg=/usr/local/jpreg-6b' \
'--with-freetype=/usr/local/include/freetype2' \
'--with-zlib' \

Nota:
Cuando termina de hacer la configuración (./configure ...) nos indica si encontró todas las librerías, caso contrario debemos recopilar nuevamente chequeando que los path son los correctos.

make
make install

Incluyendo GD en PHP

Para que la librería GD sea reconocida se deberá recompilar nuevamente el PHP, como se indica a continuación:

'./configure' \
'--with-apxs2=/usr/local/apache223/bin/apxs' \
'--prefix=/usr/local/apache223/php' \
'--with-pgsql' \
'--with-config-file-path=/usr/local/apache223/php/lib' \
'--enable-force-redirect' \
'--disable-cgi' \
'--with-zlib' \
'--with-zip' \
'--enable-dbase' \
'--enable-calendar' \
'--with-imap' \
'--with-kerberos' \
'--with-imap-ssl' \
'--enable-mbstring' \
'--with-gd' \
'--with-freetype-dir' \
'--with-png-dir' \
'--with-jpeg-dir' \
'--enable-gd-native-ttf' \
'--enable-gd-jis-conv' \
'--with-curl' \
'--with-gettext' \
'--with-ldap-sasl' \
'--with-gettext' \
'--with-gmp' \
'--with-readline' \

En este caso particular si no habilitaba estos dos modulos en php no funcionaba la libreria en el sitio "--enable-gd-native-ttf, --enable-gd-jis-conv".

make
make install

Terminado la instalación probamos en las aplicaciones que nos estaba demandando la libreria. Esto funcionan para Moodle y Drupal con seguridad, ya que fue realizado para que estos funcionen y lo estan haciendo correctamente.