jueves, 4 de mayo de 2017

sh rearranque.sh

          Las cosas básicas de la vida son las que nos llevan de a poco a cosechar grandes obras. Lo que voy a intentar escribiendo y redactando es plasmar a manera de una bitácora-manual de referencia algunas de mis actividades así como de conocimientos adquiridos igual que algunas experiencias en mi vida laboral.

          Trataré de ser breve y conciso en medida de como me sea posible ya que no dejaré de negar que me fascina escribir líneas y leerlas una y otra vez para adecuarlas de la mejor manera.

bein

viernes, 25 de mayo de 2012

FEDORA | CENTOS | CSRF Security Error


En algún proyecto llegue a ocupar DWR,
para ayudarnos ahi en el FRONT-END a conectar algunas cosas de BACK-END, por cuestiones
de seguridad en DWR combinado con TOMCAT7.

 En el siguiente enlace podemos encontrar más información con respecto a la seguridad
de DWR.
json-is-not-as-safe-as-people-think-it-is
 La línea que necesitamos es la siguiente línea en /<TOMCAT_HOME>/conf/context.xml:
 
 <Context useHttpOnly="false">

 
Saludos
bein

lunes, 21 de mayo de 2012

UNLINK | FEDORA | CENTOS


Por esa maldita mania de tener todo en orden y hasta donde la más mínima
mancha te causa ruido quizás te interese hacer unlink a algunos enlaces que 
se quedan muertos o sin uso.

 SITUACIÓN
 Tengo una carpeta la cual por alguna razón me conviene crear un enlace, creo
un enlace simbolico:
 
   ln -s <ORIGEN> <DESTINO>
   
 PROBLEMA
 ¿Qué pasa con ese enlace si, mi carpeta destino la elimino o la renombro
o la muevo?
 El enlace esta muerto y desde consola se puede apreciar por esos colores tan 
llamativos que el SO le pone, pues procedo a eliminar el enlace:

 1. Primero valido que la carpeta <ORIGEN> no exista mas, ya sea por cambio
  de nombre o por eliminación
 2. Aplico un:

   unlink <DESTINO>
   
 Listo en enlace se ha ido y los colores rojos y el ruido de haber creado
algo que ya no me sirve, tambien ya se fue. 

 El mundo puede seguir girando tranquilo.
 
 
saludos
bein

jueves, 10 de mayo de 2012

SSH | CENTOS 6.2


     Después de instalar CENTOS, por diversas situaciones tenemos la necesidad de monitorear, ejecutar procesos, y/o simplemente manejar archivos en esa máquina, y quizás un servicio de SSH con acceso restringido para el usuario root(con esto no quiere decir que ya tenemos mucha seguridad, pero algo es algo); es decir sólo le damos acceso al usuario(s) que nosotros definamos en el archivo sshd_config.


Pasos:

1. Verificamos que el servicio de sshd este activo
 chkconfig --list
   buscando una linea similar a esta:
   
   sshd            0:desactivado 1:desactivado 2:activo 3:activo 4:activo 5:activo 6:desactivado
   
2. Validamos en que runlevel debe estar activo el servicio de sshd(en mi caso es el 5)
 cat /etc/inittab
   donde la siguiente línea me indica mi runlevel:
   
   id:5:initdefault:

3. Editar el archivo:
 vi /etc/ssh/sshd_config
   Con las siguientes líneas:
 PermitRootLogin no
 AllowUsers <usuario>
 
4. Dar de alta el servicio
 chkconfig sshd on
5. Parar el servicio:
 service sshd stop
6. Arrancar el servicio:
 service sshd start


     Después de estos pasos, lo único que nos resta es validar desde otro equipo en nuestra red LAN si ya tenemos acceso mediante un cliente SSH(PuTTY)




Saludos, bein.

martes, 10 de abril de 2012

TOMCAT : bin | JAVA : java.lang.OutOfMemoryError: Java heap space

Siguiendo con el Tema de TOMCAT, y después de 
haber instalado el TOMCAT post anterior,
lo que ire detallando post a post es la importancia de algunos archivos y la configuración de estos; esto para, un mejor desempeño de nuestro servidor de aplicaciones.
La realidad es que no se a la fecha 
el funcionamiento al 100% de todos y cada uno de los archivos que contiene el TOMCAT, pero lo que si se y he
aprendido día con día es lo que manifiesto en estas entradas, y en lo personal con eso es suficiente para 
tener un TOMCAT estable.

PROBLEMA:
 Mi TOMCAT no soporta mas de "n" conexiones se traba, no responde, etc. Una cosa es la mala programación
 y otra es que no nos metamos en archivos de configuración, en lo personal la Shell Programming, era algo que 
 siempre me causaba ruido, y simplemente veia las cosas como una caja negra y punto, me funcionaba y para que 
 quería meterme en esas tripas. Obviamente la cantidad de usuarios finales, el número de conexiones simultaneas
 son cosas con las que uno tiene que lidiar día con día.

NOTA Windows xp / windows 7:
 Apache TOMCAT viene configurado por default para tomar los siguientes valores
 --JvmMs 128 --JvmMx 256 (Línea 128)
 Esto es en el archivo service.bat ubicado en la carpeta bin del apache-tomcat; donde literalmente esta
 destinando hasta 256 Mb. de memoria RAM para el TOMCAT
 
NOTA Linux(Centos):
 Aquí, como estamos en GNU/Linux tenemos que editar a mano el archivo catalina.sh con las siguientes lineas:
 
#!/bin/sh
JRE_HOME="/usr/local/jdk1.6.0_30/jre"
JAVA_OPTS=" -server "
export JAVA_OPTS
CATALINA_OPTS="-Xmn256M -Xms512M -Xmx1024M -XX:+UseParallelOldGC -XX:ParallelGCThreads=2 -XX:MaxPermSize=128m"


SOLUCIÓN

 Windows
  Modificar los siguientes datos en el archivo service.bat:
  --JvmMs 128 --JvmMx 256 (Línea 128) Por Default
  Otros valores para ir probando
  --JvmMs 256 --JvmMx 512
  --JvmMs 512 --JvmMx 768
  --JvmMs 768 --JvmMx 1024
 
  Si lo notan son valores incrementados a razón de 256 siempre siendo multiplos de 2^n
  
 Linux
  Modificar los siguientes datos en el archivo catalina.sh:
  CATALINA_OPTS="-Xmn256M -Xms512M -Xmx1024M -XX:+UseParallelOldGC -XX:ParallelGCThreads=2 -XX:MaxPermSize=128m"
  
  
Aquí ya sólo resta que hagan pruebas y visualicen en el tomcat manager

viernes, 16 de marzo de 2012

SQL SERVER 2008 | STORE | ERROR | Ad Hoc Distributed Queries

Como gestor de base de datos por restricciones de usuario estoy utilizando:
  
--------------------------------------------------------------------------
Microsoft SQL Server Management Studio      10.50.1617.0
Microsoft Data Access Components (MDAC)      6.1.7601.17514
Microsoft MSXML      3.0 4.0 6.0 
Microsoft Internet Explorer      9.0.8112.16421
Microsoft .NET Framework      2.0.50727.5448
Sistema operativo      6.1.7601
--------------------------------------------------------------------------

 ¿Y esto que?
 Pues por la necesidad de crear y ejecutar un store procedure, al ejecutarlo
la respuesta es:

Mens. 15281, Nivel 16, Estado 1, Línea 1
SQL Server bloqueó el acceso a STATEMENT 'OpenRowset/OpenDatasource' del componente
'Ad Hoc Distributed Queries' porque este componente está desactivado como parte de 
la configuración de seguridad de este servidor. Un administrador del sistema puede 
habilitar el uso de 'Ad Hoc Distributed Queries' mediante sp_configure. Para obtener 
más información acerca de cómo habilitar 'Ad Hoc Distributed Queries', vea el tema 
sobre la configuración de área expuesta en los Libros en pantalla de SQL Server.


 ¿Qué hacer ante esto?
 Hay que habilitar 'Ad Hoc Distributed Queries', para hacer esto hay que ejecutar
 el siguiente <a href="http://es.wikipedia.org/wiki/Snippet">snippet</a> en la ventana de consultas del Management Studio:
 
sp_configure 'show advanced options',1
reconfigure with override
go
sp_configure 'Ad Hoc Distributed Queries',1
reconfigure with override
go

 ¿Que da como resultado?(adjunto imagen)

Se ha cambiado la opción de configuración 'show advanced options' de 0 a 1. Ejecute la instrucción RECONFIGURE para instalar.
Se ha cambiado la opción de configuración 'Ad Hoc Distributed Queries' de 0 a 1. Ejecute la instrucción RECONFIGURE para instalar.
Fuente y lo que hay que saber: <a href="http://www.guillesql.es/Articulos/SQLServerFAQ_Servidor_Vinculado_OPENQUERY_Notacion_4_Partes.aspx">guillesql</a>

martes, 6 de marzo de 2012

Instalar TOMCAT, JDK bajo CentOS para un ambiente de producción

¿Qué es lo que necesitamos para instalar un ambiente de producción
en CentOS?
1. instalar el jdk.
2. instalar apache-tomcat como servicio.

A continuación describo los pasos que he seguido para hacer un
ambiente de producción en CentOS.



 ------------------------------
| MANUAL DE INSTALACIÓN DE JDK |
 ------------------------------
-------------------------------------
Todo esto se hace desde la sesión con
la que estemos loggeados; a excepción
de que se indique lo contrario.
-------------------------------------

1. Descargar JDK desde:
<a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u30-download-1377139.html">jdk</a>

UBICADOS EN LA CARPETA DONDE SE DESCARGO EL JDK:
2. Damos permisos
chmod +x jdk-6u30-linux-i586.bin

3. Ejecutamos
./jdk-6u30-linux-i586.bin

4. Nos logeamos comom Super Usuario
su
*******

5. Movemos la carpeta
mv jdk1.6.0_30/ /usr/local (PUEDE SER LA CARPETA QUE DEFINAMOS)
exit(PARA SALIR COMO ROOT)

6. seteamos alternativas de JAVA
(HAY OTRAS MANERAS DE HACER ESTO CON UN jdk-6u30-linux-i586.rpm.bin
Y NOS QUITAMOS DE -PEDOS- PROBLEMAS)
update-alternatives --install "/usr/bin/java"  "java" "/usr/local/jdk1.6.0_30/bin/java" 1
update-alternatives --set java /usr/local/jdk1.6.0_30/bin/java
update-alternatives --install "/usr/bin/javac"  "javac"  "/usr/local/jdk1.6.0_30/bin/javac" 1
update-alternatives --set javac /usr/local/jdk1.6.0_30/bin/javac


7. Desde una consola, verificamos que ya tenemos instalado y setteado el java
java -version
javac -version

8. Añadimos la fuente *.Arial a la ubicación
(De cualquier máquina con Windows las pueden obtener)
/usr/local/jdk1.6.0_27/jre/lib/fonts/
(POR LA NATURALEZA DE ALGÚN PROYECTO TUVE LA NECESIDAD DE COPIAR Y USAR ESTAS FUENTES)

 ---------------------------------
| MANUAL DE INSTALACIÓN DE TOMCAT |
 ---------------------------------

1. Descargar el tomcat desde:
<a href="http://tomcat.apache.org/">tomcat</a>

2. Nos logeamos como Super Usuario
su
*******

3. Descomprimir archivo
tar -xvf apache-tomcat.tar.gz

UBICADOS EN LA CARPETA DONDE SE DESCOMPRIMIO EL TOMCAT:
4. Aplicamos un chmod a la carpeta:
chmod 775 -R apache-tomcat/

5. Movemos la carpeta del apache (PUEDE SER LA CARPETA QUE DEFINAMOS)
mv apache-tomcat /usr/share/

6. Iniciamos el servidor
/usr/share/apache-tomcat/bin/./startup.sh
exit(PARA SALIR COMO ROOT)

7. Verificamos que este corriendo el servidor, desde un navegador web
http://localhost:8080/manager/html


 ----------------------------------------
| HACIENDO TOMCAT UN SERVICIO DEL CENTOS |
 ----------------------------------------
1. Loggeados como root creamos un archivo de nombre tomcat
2. El contenido de ese archivo es el siguiente script
(NOTA: copiar el script a un editor de texto plano(notepad++),
para evitar que se pierda su estructura):

#!/bin/bash
#
# tomcat Tomcat Java Server
#
# chkconfig: 2345 55 25
# description: Servidor de Aplicaciones Tomcat
# processname: tomcat

JAVA_HOME=/usr/local/jdk1.6.0_30/
export JAVA_HOME
TOMCAT_HOME=/usr/share/apache-tomcat/bin
START_TOMCAT=$TOMCAT_HOME/startup.sh
STOP_TOMCAT=$TOMCAT_HOME/shutdown.sh

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

[ -f $START_TOMCAT ] || exit 0
[ -f $STOP_TOMCAT ] || exit 0

RETVAL=0

umask 077

start() {
echo -n $"Iniciando Tomcat Java Server"
echo
daemon $START_TOMCAT
echo
return $RETVAL
}
stop() {
echo -n $"Deteniendo Tomcat Java Server"
echo
daemon $STOP_TOMCAT
echo
return $RETVAL
}
restart() {
stop
start
}
case "$1" in
   start)
start
;;
   stop)
stop
;;
   restart|reload)
restart
;;
#  *)
# echo
# exit 1
esac
exit $RETVAL



3. Movemos el archivo creado a:
/etc/init.d

4. Aplicamos un chmod 755 al archivo tomcat:
chmod 755 tomcat

5. Agregamos el servicio al centos:
chkconfig --add tomcat

6. Verificamos que el servicio ya esta agregado con:
chkconfig --list

7. Verificamos el runlevel, para activar el respectivo para el servicio del tomcat
cat /etc/inittab

8. Activamos el runlevel:
chkconfig --level 5 tomcat on

9. Hacemos que el servicio arranque en cada inicio/reinicio de máquina:
chkconfig tomcat on

10. Iniciamos el servicio:
service tomcat start

11. Ubicados en /usr/share modificamos los permisos como root:
chmod 755 -R apache-tomcat/ (ESTO ES POR SI AÚN NO TIENE LOS PERMISOS)
cd apache-tomcat/
chmod 775 logs/
(ESTO ES PARA PODER VER LOS LOGS, SIN IMPORTAR QUE USUARIO SEA, DESDE LA MÁQUINA DE CENTOS)

12. Reiniciamos el equipo para comprobar que el servicio ya levanta al arranque.



---------------------------------------------------
COMANDOS DE UTILIDAD(man xxxx(desde la consola)):
---------------------------------------------------

chown - change file owner and group
chmod - change file mode bits
chkconfig - updates and queries runlevel information for system services
service - run a System V init script

jueves, 13 de octubre de 2011

Ver procesos del sistema con JAVA

      Como podemos ver el "taskmgr" desde JAVA para efectuar alguna operación con un específico proceso(en mi caso el javaw.exe)


codigo:
 
 
public class Test {

    public static void main(String[] args) throws IOException {
        boolean exito = false;
        
        Process p = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/C", "tasklist /FI \"STATUS eq RUNNING\""});
            DataInputStream dis = new DataInputStream(p.getInputStream());
            String x = dis.readLine();
            while (x != null) {
                if (x.startsWith("javaw.exe")) {
                    exito = true;
                    break;
                }
                x = dis.readLine();
            }
            
    }
}

martes, 11 de octubre de 2011

Enviar correo desde JAVA con JAVAMAIL

librerias:
    mail.jar
   
Mail.java

/*IMPORTAMOS LIBRERIAS*/
import java.util.Properties;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 *
 * @author bein
 */
public class Mail {
   
    /**
     * main de prueba
     * @param args Se ignoran.
     */
    public static void main(String[] args)
    {
        try
        {
            /* PROPIEDADES DE LA CONEXIÓN */
            Properties props = new Properties();
            props.setProperty("mail.smtp.host", "smtp.grupopakar.com.mx");
            props.setProperty("mail.smtp.starttls.enable", "false");
            props.setProperty("mail.smtp.port", "25");
            props.setProperty("mail.smtp.user", "bein@<dominio>.com.mx");
            props.setProperty("mail.smtp.auth", "true");

            /* PREPARAMOS LA SESIÓN CON LAS PROPIEDADES QUE DEFINIMOS*/
            Session session = Session.getDefaultInstance(props);

            /* CONSTRUIMOS EL MENSAJE A PARTIR DE LA SESIÓN QUE CREAMOS*/
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress("bein@<dominio>.com.mx"));
            message.addRecipient(
                Message.RecipientType.TO,
                new InternetAddress("<destinatario>@<dominio>.com"));
            message.setSubject("<subject>");
            message.setText(
                "BEIN says:\n"
                + "thank you for testing this code, if you are very incognite about\n"
                + "funtionality, please check API java"
                + "thank you!!!"
                + "http://www.beinjavatomcat.blogspot.com"
                + "\n\n Atte. bein \n from: México");

            /* Lo enviamos. */
            Transport t = session.getTransport("smtp");
            t.connect("bein@<dominio>.com.mx", "<password>");
            t.sendMessage(message, message.getAllRecipients());

            /* Cierre. */
            t.close();
            System.out.println("termine, revisa tu bandeja de correo:");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
  

viernes, 30 de septiembre de 2011

COMPROBANDO INTEGRIDAD DE USB, Y HD EXTERNOS EN UBUNTU

paso 1. DESMONTAMOS EL VOLUMEN
 Sistema -> Administración -> Utilidad de Discos
 
 Ya en esta interfaz gráfica podemos hacer lo
siguiente:
  1. formatear unidad
  2. prueba de rendimiento
  3. comprobar sistema de archivos(para esto hay que 
desmontarlo primero)
  4. editar partición
  5. etc.
  
 De esta pantalla lo que tenemos que hacer es:
  1. Desmontar el volumen
  2. Ubicar que dispositivo reconoce ubuntu(/dev/sdb)
  
paso 2. EJECUTAMOS ANALISIS DESDE CONSOLA
 Abrimos una terminal y ejecutamos en siguiente comando ya 
sea en SU o con SUDO:
 
  badblocks -n -s -v -c 10240 /dev/xxx -o analisis.txt
  [comando] [opciones de comando] [/dispositivo a analizar] -o
[escribe el resultado del analisis aquí]
 
 En caso de neceitar ayuda ya saben:
 
   man badblocks
   
AMBIENTE:
ubuntu 10.10 (maverick)
pentium core 2 duo
1024 ram
usb generica de 4gb (<- esta fue la USB que analice)


LO INTERESANTE:

kingston: tiempo medio de acceso: 0.6 ms
GENERICA: tiempo medio de acceso: 5.8 ms
OTRA GENERICA(mejorcito): tiempo medio de acceso: 1.8 ms

jueves, 22 de septiembre de 2011

JSP, SQL server, TOMCAT problema con los acentos y caracteres especiales

Después de muchos días de no postear nada, debido a muchos factores como
mi cambio de trabajo, mi ingreso a una nueva empresa que lejos de prometer
 un buen futuro, mínimo tendré dinero para vivir lo que resta del semestre
 en lo que se atraviesa otra oportunidad mejor :D.

 El motivo de este post es como lo indica el título. En el actual proyecto
 que estoy haciendo me encontré con el bug de que al hacer un paso de parámetros
 harcodeado desde mi jsp como el que se muestra a continuación

 Escenario:

 jsp origen llamado "alumnos.jsp" ayudado de un container que es de ajax

alumnoId: lleva la matricula de mi alumno

comentario: lleva un segmento de texto que es ingresado desde una tex area, la cual sin problemas acepta acentos

jsp destino llamado: "expObservacion.jsp" que recibe los parametros con sus respectivos

String comentario = (String) request.getParameter("comentario");
String alumnoId = request.getParameter("alumnoId");






ajax_loadContent('idcomentario','expObservacion.jsp?alumnoId=' + alumnoId + '&comentario=' + comentario);

El problema hasta aquí es que al pasar en la variable comentario algo como esto:

probando con los caracteres extraños á é í ó ú ñ


Lo que insertaba en la base de datos erán caracteres como estos:


probando con los caracteres extraños á é à ó ú ñ



La solución para resolver esto se lista aquí:


String comentario = new String(request.getParameter("comentario").getBytes("ISO-8859-1"), "UTF-8");


Después de leer a varias personas con el mismo error, y encontrar distintas soluciones
como modificar un archivo del tomcat para que sin problemas detecte los caracteres en
utf-8, o desde el form hacer un charser no se que!!!!! era un desmadre neta, y por
cierto todo lo intente sin resultados hasta que como encontre en A wevo... solo había
que tratar dicha variable en el jsp y woala.

miércoles, 21 de septiembre de 2011

The Tomcat installation directory is not valid. It is missing expected file or folder webapps.

PROBLEMA

Eclipse no reconoce a TOMCAT para añadirlo como "server runtime enviroments"

AMBIENTE:

* Ubuntu 10.10
* Eclipse Galileo (3.5)
* java version "1.6.0_20"
* tomcat6

PREÁMBULO

Se deduce que ya tenemos instalado java, tomcat y eclipse(con su complemento para desarrollar aplicaciones WEB)

COMO DEBEN DE VERSE LOS ARCHIVOS EN LA RUTA /usr/share/tomcat6 ANTES DE APLICAR LOS CAMBIOS:

drwxrwxrwx 2 root root 4096 2010-12-25 15:09 bin
lrwxrwxrwx 1 root root 21 2011-01-01 14:36 conf
-rwxrwxrwx 1 root root 39 2010-07-20 08:52 defaults.md5sum
-rwxrwxrwx 1 root root 1960 2010-07-20 08:52 defaults.template
drwxrwxrwx 2 root root 4096 2010-12-25 15:09 lib
lrwxrwxrwx 1 root root 16 2011-01-01 14:37 log
drwxrwxrwx 4 root root 4096 2010-12-25 15:09 skel
lrwxrwxrwx 1 root root 24 2011-01-08 11:02 webapps

SOLUCIÓN

cd /usr/share/tomcat6
sudo ln -s /var/lib/tomcat6/conf conf
sudo ln -s /etc/tomcat6/policy.d/03catalina.policy conf/catalina.policy
sudo ln -s /var/log/tomcat6 log
sudo chmod -R 777 /usr/share/tomcat6/conf

#Addition
sudo ln -s /var/lib/tomcat6/webapps webapps
sudo chmod -R 777 /usr/share/tomcat6/webapps


COMO DEBEN DE VERSE LOS ARCHIVOS EN LA RUTA /usr/share/tomcat6 DESPUÉS DE LOS CAMBIOS QUE APLICAMOS:

drwxrwxrwx 2 root root 4096 2010-12-25 15:09 bin
lrwxrwxrwx 1 root root 21 2011-01-01 14:36 conf -> /var/lib/tomcat6/conf
-rwxrwxrwx 1 root root 39 2010-07-20 08:52 defaults.md5sum
-rwxrwxrwx 1 root root 1960 2010-07-20 08:52 defaults.template
drwxrwxrwx 2 root root 4096 2010-12-25 15:09 lib
lrwxrwxrwx 1 root root 16 2011-01-01 14:37 log -> /var/log/tomcat6
drwxrwxrwx 4 root root 4096 2010-12-25 15:09 skel
lrwxrwxrwx 1 root root 24 2011-01-08 11:02 webapps -> /var/lib/tomcat6/webapps


Una ves hecho esto, ya podemos desde el IDE(eclipse) hacer esto:


window -> preferences -> Server -> Runtime Enviroments -> Add...
apache tomcat v6.0 -> next
browse -> /usr/share/tomcat6 -> finish

miércoles, 14 de septiembre de 2011

recuperar PASS de root de MYSQL

1. Paramos el servicio desde una consola de MYSQL: net stop mysql
2. En una consola DOS vamos al directorio donde está instalado mysql y buscamos la carpeta bin
3. En este directorio ejecutamos: mysqld –-skip-grant-tables –user=root
4. Desde otra console, también en el diretorio bin: mysql -u root accedemos automáticamente y sin necesidad de contraseña a mysql.
5. Ejecutamos: mysql> UPDATE mysql.user SET Password=PASSWORD('contraseña') WHERE User='root';
6. mysql> FLUSH PRIVILEGES;
7. Salimos del editor mysql: mysql> exit;
8. Desde el administrador de tareas paramos mysql, el proceso se llama mysqld.exe
9. Volvemos a arrancar el servicio desde una consola: net start mysq

lunes, 12 de septiembre de 2011

Convertir .otf a .ttf en Ubuntu(Linux)

/*instalamos*/
sudo apt-get install fontforge

/*creamos el siguiente script y lo ubicamos en la misma ubicación del archivo .otf*/
#!/usr/local/bin/fontforge
# Quick and dirty hack: converts a font to truetype (.ttf)
Print("Opening "+$1);
Open($1);
Print("Saving "+$1:r+".ttf");
Generate($1:r+".ttf");
Quit(0)

/*lo fontforgeamos*/
fontforge -script otf2ttf.sh NOMBRE_DE_MI_FUENTE.otf

/*listo*/