Mostrando entradas con la etiqueta linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta linux. Mostrar todas las entradas

lunes, 1 de abril de 2013

Screen una terminal que puede ser inmortal

El motivo de esta entrada y el título es para hablar de uno de los programas de terminal que desde mi punto de vista es de los más potentes e importantes que hay que saber dominar, el comando screen.

Este programa sirve para crear terminales de forma que nos podemos desenganchar de ellas y que sigan ejecutándose y en un futuro volvernos a enganchar, es muy útil para administrar sistemas remotamente, usando el protocolo ssh, por ejemplo. Imaginemos que tenemos un ordenador remoto que usa debian y necesitamos actualizar el sistema. Por lo general lo haríamos mediante apt-get upgrade, pero este proceso dependiendo de lo que tenga que actualizar puede tardar un rato en ejecutarse y nosotros por la razón que sea, podemos tener la necesidad de cerrar la conexión remota. Sino lo hacemos con un programa tipo screen, al cerrar la conexión remota, se interrumpiría el proceso de actualización.

Suele venir por defecto en muchas distribuciones de linux, pero sino viene, seguro que estará en el respectivo gestor de paquetes de nuestra distribución, por ejemplo, para distribuciones basadas en debian, que pueden ser ubuntu, linux mint y raspbian entre otras, lo instalamos.


  • sudo apt-get update
  • sudo apt-get install screen

Vamos a poner un ejemplo típico de uso:

  • screen -S prueba

Con esto creamos un terminal que nos podremos referir usando la étiqueta prueba, mediante el parámetro -S le ponemos la étiqueta.

En este terminal, podemos ejecutar un proceso infinito, por ejemplo

  • ping terra.es

Para desconectarnos del terminal y que el proceso se siga ejecutando, pulsamos las teclas Ctrl + a  d. Con esto nos hemos desenganchado de la sesión etiquetada como prueba, pero el proceso se sigue ejecutando.

Si en un futuro queremos volver a conectarnos a ese proceso ejecutaríamos

  • screen -r -S prueba

y nos engancharíamos de nuevo a la terminal y al proceso. Este es el uso básico del comando, permite crear varias shells a la vez incluso en varias pantallas (cuando eso se hace, la shell principal se divide en dos) y se puede ir alternando entre shells.

Si quisiéramos por ejemplo lanzar un proceso en ejecución en un screen y que actuará en background, se haría:


  • screen -d -m -S procesoPing ping terra.es

Eso lanzaría un screen ejecutando el comando ping terra.es, que nos podríamos conectar a dicho screen de dos formas o a través del PID o a través de la etiqueta procesoPing.

  • screen -r PID
o bien

  • screen -r -S procesoPing

también podemos ver una lista de los diferentes screen que hay en marcha:

  • screen -list

De ahí podemos obtener el PID para engancharnos o ver las diferentes etiquetas que hemos definido al lanzar los procesos.

El PID también lo podemos ver si hacemos una búsqueda con el comando ps

  • ps axu | grep -i screen

O bien, si ejecutamos screen -r sin nada más nos saldrán las diferentes screen que tenemos en marcha.


Para más información aquí hay un excelente tutorial de uso.

domingo, 24 de marzo de 2013

Instalar y configurar amule-daemon, para usar con emule en la raspberry

En esta entrada, voy a explicar como se configura el amule-daemon en una raspberry pi, pero se puede adaptar en general a cualquier distribución de linux basada en debian, como podría ser ubuntu. El usar la versión del amule en modo daemon permite que el servicio pueda ejecutarse sin tener cargado ningún entorno gráfico y suele ser mucho más liviano. Luego para conectarse y añadir enlaces de descarga, usaremos la interfaz web que proporciona o instalando un programa llamado amulegui, que como su nombre indica es un GUI del amule.



Lo primero que debemos hacer antes de instalar cualquier paquete, es actualizar el árbol de dependencias, para ello en raspbian, se hace así:


  • sudo apt-get install
A continuación, es aconsejable actualizar el sistema.

  • sudo apt-get -y upgrade
El parámetro -y , sirve para que acepte con yes a la pregunta si queremos instalar los paquetes. A continuación, sería recomendable reiniciar nuestro ordenador.

  • sudo reboot
Una vez tengamos la raspberry funcionando de nuevo, instalamos el amule-daemon

  • sudo apt-get install amule-daemon
Seguramente vamos a desear, que nuestro amule se inicie cada vez que la raspberry se ponga en marcha, para ello tenemos que editar como root el fichero /etc/default/amule-daemon.

  • sudo vim /etc/default/amule-daemon

En el fichero encontraremos una línea que pone:

# The init.d script will only run if this variable non-empty.
AMULED_USER=""

debemos poner un usuario, yo he puesto pi, cuando el script de inicialización en un futuro vea que la variable tiene un nombre y no está vacía, sabrá que tiene que iniciar el servicio.

Una vez hecho esto, es recomendable iniciar el servicio, para que en nuestro home, cree la carpeta oculta .aMule y dentro los diferentes ficheros de configuración.

  • sudo /etc/init.d/amule-daemon start
  • sudo /etc/init.d/amule-daemon stop

Lo iniciamos, para luego pararlo, ya que aún no está preparado para usarse.

A continuación tenemos que editar el fichero de configuración con el editor de texto que queramos, yo lo hago con el vim.

  • vim $HOME/.aMule/amule.conf
Y dentro de este fichero tenemos que modificar los parámetros a nuestro gusto por ejemplo, este es el mío.

[Statistics]
MaxClientVersions=0
[eMule]
AppVersion=2.3.1
Nick=http://www.aMule.org
NewVersionCheck=1
StartupMinimized=0
ConfirmExit=1
EnableTrayIcon=0
MinToTray=0
ToolTipDelay=1
VideoPlayer=
VideoPreviewBackupped=1
MaxDownload=0
MaxUpload=15
SlotAllocation=2
Port=5668
UDPPort=5663
Address=
MaxSourcesPerFile=300
MaxConnections=500
ConnectToED2K=1
ConnectToKad=1
UPnPEnabled=0
UPnPTCPPort=50000
Autoconnect=1
Reconnect=1
ShowOverhead=0
RemoveDeadServer=1
DeadServerRetry=3
Serverlist=1
AddServerListFromServer=0
AddServerListFromClient=0
Scoresystem=1
SmartIdCheck=1
SafeServerConnect=0
AutoConnectStaticOnly=0
ManualHighPrio=0
ICH=1
AICHTrust=0
AddNewFilesPaused=0
DAPPref=1
PreviewPrio=0
UAPPref=1
FullChunkTransfers=1
StartNextFile=0
StartNextFileSameCat=0
CheckDiskspace=1
MinFreeDiskSpace=1
AllocateFullFile=0
IncomingDir=/media/THOSIBAFAT/.aMule/Incoming
TempDir=/media/THOSIBAFAT/Temp
ShareHiddenFiles=1
StatGraphsInterval=3
StatsAverageMinutes=5
VariousStatisticsMaxValue=100
statsInterval=30
DownloadCapacity=300
UploadCapacity=100
MaxConnectionsPerFiveSeconds=20
FileBufferSizePref=16
QueueSizePref=50
ServerKeepAliveTimeout=0
3DDepth=5
AutoSortDownloads=0
ShowInfoOnCatTabs=1
ShowRatesOnTitle=0
VerticalToolbar=0
ShowPartFileNumber=0
SeeShare=2
IPFilterURL=http://sites.google.com/site/ircemulespanish/descargas-2/ipfilter.zip
IPFilterAutoLoad=1
FilterLevel=127
FilterLanIPs=1
ParanoidFiltering=1
IPFilterSystem=0
OnlineSignature=0
OnlineSignatureUpdate=5
OSDirectory=/home/pi/.aMule/
FilterMessages=1
FilterAllMessages=0
MessagesFromFriendsOnly=0
MessageFromValidSourcesOnly=1
FilterWordMessages=0
MessageFilter=
FilterComments=0
CommentFilter=
Language=
SplitterbarPosition=75
YourHostname=
DateTimeFormat=%A, %x, %X
AllcatType=0
ShowAllNotCats=0
SmartIdState=1
DropSlowSources=0
KadNodesUrl=http://emule-inside.net/nodes.dat
Ed2kServersUrl=http://sites.google.com/site/ircemulespanish/descargas-2/server.met?attredirects=0&d=1
StatColor0=4194304
StatColor1=16761024
StatColor2=8454016
StatColor3=53760
StatColor4=32768
StatColor5=8421631
StatColor6=200
StatColor7=140
StatColor8=16750230
StatColor9=12583104
StatColor10=8454143
StatColor11=0
StatColor12=8454016
StatColor13=53760
StatColor14=32768
TableOrderingServer=U:1:0,p:0:0,N:0:0
TableWidthsServer=N:150,A:140,P:25,D:150,p:25,U:116,F:45,r:60,f:40,S:40,V:80
TableOrderingDownload=N:0:0
TableWidthsDownload=a:30,N:260,Z:60,T:65,C:65,S:65,P:170,u:50,p:55,s:70,r:110,c:220,R:220
TableOrderingUploads=0 0, 
TableWidthsUploads=150,275,100,60,65,60,60,110,100,100,100
TableOrderingShared=N:0:0
TableWidthsShared=N:250,Z:100,Y:50,p:70,I:220,Q:100,A:100,T:120,R:100,P:120,C:120,D:220
TableOrderingSources=N:0:0
TableWidthsSources=N:260,D:65,S:65,U:65,P:170,V:50,q:55,O:110,F:200,R:200,m:100
TableOrderingPeers=N:0:0
TableWidthsPeers=N:260,D:65,S:65,U:65,s:65,A:170,V:50,Q:70,q:70,O:110,f:200,m:100
UDPEnable=1
StartNextFileAlpha=0
GeoIPEnabled=1
ShowVersionOnTitle=0
ShowMessagesInLog=1
AdvancedSpamFilter=1
MessageUseCaptchas=1
GeoLiteCountryUpdateUrl=http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
StatsServerName=Shorty's ED2K stats
StatsServerURL=http://ed2k.shortypower.dyndns.org/?hash=
[Browser]
DefaultBrowser=0
CustomBrowserString=
OpenPageInTab=1
[ExternalConnect]
UseSrcSeeds=0
ShowPercent=1
ShowProgressBar=1
AcceptExternalConnections=1
ECPassword= Aquí va la password que queremos
ECAddress=
ECPort=12345
UPnPECEnabled=0
IpFilterClients=1
IpFilterServers=1
UseSecIdent=1
TransmitOnlyUploadingClients=0
[SkinGUIOptions]
Skin=System:kde4.zip
[Razor_Preferences]
FastED2KLinksHandler=1
SRV_SPLITTER_POS=305
MAIN_X_POS=0
MAIN_Y_POS=0
MAIN_X_SIZE=1024
MAIN_Y_SIZE=724
Maximized=1
[WebServer]
Enabled=1
Port=4711
UPnPWebServerEnabled=0
WebUPnPTCPPort=50001
PageRefreshTime=120
UseGzip=1
UseLowRightsUser=0
Password=Aquñi va la password que queremos para la interfaz web
PasswordLow=
Template=default
Path=amuleweb
[Obfuscation]
IsClientCryptLayerSupported=1
IsCryptLayerRequested=1
IsClientCryptLayerRequired=0
CryptoPaddingLenght=254
CryptoKadUDPKey=1829164279
[Proxy]
ProxyEnableProxy=0
ProxyType=0
ProxyName=
ProxyPort=1080
ProxyEnablePassword=0
ProxyUser=
ProxyPassword=
[UserEvents]
[UserEvents/DownloadCompleted]
CoreEnabled=0
CoreCommand=
GUIEnabled=0
GUICommand=
[UserEvents/NewChatSession]
CoreEnabled=0
CoreCommand=
GUIEnabled=0
GUICommand=
[UserEvents/OutOfDiskSpace]
CoreEnabled=0
CoreCommand=
GUIEnabled=0
GUICommand=
[UserEvents/ErrorOnCompletion]
CoreEnabled=0
CoreCommand=
GUIEnabled=0
GUICommand=
[GUI]
HideOnClose=0
[GUI/TransferWnd]
Splitter=445
ShowClientList=1
[HTTPDownload]
URL_4=http://amule.sourceforge.net/lastversion
[PowerManagement]
PreventSleepWhileDownloading=0

Para tener correctamente configurado el emule, es importante prestar atención en especial a las variables que contienen los puertos. Estás son:

  • Port=5668   #Este es el que está en la sección [eMule] y es de tipo TCP
  • UDPPort=5663 # sección [eMule] este es de tipo UDP es el que usa KAD
Estos puertos junto con el  Port + 3 que tiene que ser de tipo UDP tienen que estar accesibles desde fuera, en mi caso necesito configurar en mi router que:

  • El puerto 5668 en el que se me ve desde internet, se redireccione a el 5668 de la ip de la raspberry y sea de tipo TCP
  • El puerto Port + 3, es decir 5771 de tipo UDP que se me ve desde internet se diriga a el 5771 de la ip de la raspberry
  • El puerto 5663 de tipo UDP, también se tiene que dirigir a nuestra raspberry  

Hasta este punto deberíamos tener bien configurados los puertos en relación al funcionamiento de emule.

Luego hay otros puertos que debemos asignar que son el:
  • Port=4711 #Este está en la sección webserver
  • ECPort=12345 #Este está en la sección Browser

Otras variables interesantes son:

IncomingDir=/media/THOSIBAFAT/.aMule/Incoming  #La ruta donde se almacenarán las descargas
TempDir=/media/THOSIBAFAT/Temp #La ruta donde irán los archivos temporales
MaxDownload=0   #La velocidad máxima de descarga, yo la tengo sin límite
MaxUpload=15 # La velocidad límite de subida, esta es importante limitarla, ya que suele dar problemas si no se limita haciendo a veces imposible la navegación.
OSDirectory=/home/pi/.aMule/ #En esta le indicamos donde está la ruta principal del amule




Uno de los problemas que se suelen presentar en el emule, es el listado de servidores, es decir si tenemos buenos servidores y que no sean maliciosos, funcionaremos mucho mejor.

Para ello yo siempre sigo este magnífico tutorial de adslzone:


Y en el, podemos sacar varias cosas de interés.

Una buena URL de donde obtener buenos servidores:


En nuestro fichero de configuración esto iría en:

Ed2kServersUrl=http://sites.google.com/site/ircemulespanish/descargas-2/server.met?attredirects=0&d=1

y una lista de servidores malos que debemos evitar:


en la configuración va en la variable:

IPFilterURL=http://sites.google.com/site/ircemulespanish/descargas-2/ipfilter.zip

Aplicando estas configuraciones, tendríamos nuestro amule, preparado para descargar.

Para ponerlo en marcha si has seguido todo el tutorial, simplemente ejecutarías
  • sudo /etc/init.d/amule-daemon start
o bien reiniciando la raspberry 
  • sudo reboot
Si en algún momento se desea parar se puede hacer con un
  • sudo /etc/init.d/amule-daemon stop

Y para interactuar con el programa, desde un ordenador que disponga de un navegador simplemente ponemos:

http://[IP de la raspberry]:[PuertoWebElegido]

en mi caso: http://192.168.1.100:4711

Nos pedirá la contraseña que hemos asignado y veremos una bonita interfaz de este estilo:



Decir que abajo deberíamos ver la siguiente frase o parecida dependiendo del servidor que estemos usando:

Ed2k : Connected with high ID to UsenetNL.biz No1 [91.225.136.126:1887]Kad : Connected(OK)
Si vemos que nuestra ID es alta (hight) es que tenemos el emule perfectamente configurado, si por el contrario pone Low, debemos revisar la configuración de los puertos.

Si alguien quiere usar el amulegui, se lo descargaría en su ordenador, en ubuntu se haría así:

  • sudo apt-get install amule-utils-gui
Al ejecutarlo, nos saldrá una pantalla de bienvenida donde debemos poner los datos de conexión, usando el puerto ECPort=12345, que hayas elegido y ya tendremos la interfaz funcionando.

Y nada a disfrutar de este viejo pero muy potente programa de P2P :).

Edito: Para indicar otra variable interesante a comentar del fichero de configuración de amule.conf

AllocateFullFile=1

si esta variable está a 1, cuando añadimos un fichero, el programa reserva espacio para ese fichero. Mientras que si está a 0, el fichero temporal donde se descarga el archivo va creciendo. Suele ser mucho mejor dejarlo a 1, ya que sino, hay mucha más fragmentación en el disco y eso a la larga puede llegar a ser perjudicial para el disco duro.

sábado, 23 de marzo de 2013

Sincronizar nuestra ip con un host gratuito de noip

Muchas veces, necesitamos tener acceso a nuestra red desde Internet. Para ello existe una forma muy simple de conseguirlo y gratuita. De entre todos los servicios similares para esto, siempre he usado noip.

Primero que nada tenemos que crearnos una cuenta en noip y generar un dominio disponible, el mio es de la forma ****.no-ip.info. En la mayoría de conexiones ADSL, la ip es dinámica, por tanto es muy útil usar este tipo de servicio, para tener acceso a tu red.

Una vez tenemos la cuenta creada, necesitamos de algún modo comunicarle cada cierto tiempo al servicio nuestra ip, por si cambia. Para ello, se puede usar un software como el que proporciona noip o bien, creo que mucho más divertido, hacerlo nosotros. Para ello he creado un simple script en bash que hace el cometido. Basicamente es un bucle infinito que le comunica la ip al servidor de noip y espera 300 segundos. Esto se repite de forma indefinida.

El script que hace esto es:


#!/bin/sh
USER="" #Aquí va nuestro usuario, en el caso de noip, es el correo electrónico
PASS="" #Aquí la contraseña
HOSTNAME="" # El host que hemos generado
while [ true ]
do
wget -O - /etc/retornoCambioIp --user=$USER --password=$PASS http://dynupdate.no-ip.com/nic/update?hostname=$HOSTNAME 2> /dev/null
sleep 300
done

Si lo guardamos con el nombre de actualizaIP.sh, le deberíamos dar permisos de ejecución de la forma:

chmod u+x actualizaIP.sh

y finalmente si queremos que arranque cada vez que iniciamos el sistema se podría poner al fichero $HOME/.bashrc (este fichero, se ejecuta cada vez que hacemos login con el usuario). Por tanto en este fichero añadiríamos al final del mismo una línea que ponga ./actualizaIP.sh


Aunque esto último no es del todo seguro, es rápido de hacer pero no es del todo seguro. Voy a poner una alternativa que le da más seguridad, ya que como hemos visto tenemos que guardar la contraseña en texto claro. Así que llegados a este punto, sería mucho mejor, guardar el script en /etc/default,

sudo mv actualizaIP.sh /etc/default

Luego asegurarnos que el propietario sea root, de la forma

sudo chown root:root /etc/default/actualizaIP.sh

y finalmente quitarle todos los permisos que no son necesarios:

sudo chmod o-r,o-w,o-x /etc/default/actualizaIP.sh

Una vez hecho esto, lo ponemos en /etc/rc.local (es el último script del sistema de inicialización que se ejecuta).

IMPORTANTE: lo tenemos que poner en ese fichero de la siguiente forma:

/etc/default/actualizaIP.sh &

No se debe olvidar el &, sino el sistema no iniciaría, ya que rc.local nunca terminaría de ejecutarse.

Con esto tendríamos el problema solucionado, lo correcto debería ser convertir este script en un demonio de inicialización, pero para salir del paso, con esto me sirve.