Sincronizar reloj manualmente: NTP

Para sincronizar manualmente el reloj de nuestra máquina usando el protocolo ntp usaremos el siguiente comando como root:
ntpdate -u hora.rediris.es

Actualmente el comando está deprecated y debemos escribir de forma equivalente. dependiendo de la versión que tengamos instalada el comnado será uno de estos dos:
sntp -s hora.rediris.es (opensuse 11.3)
sntp -p no -r hora.rediris.es (opensuse 11.4 y SLES 11)

RabbitVCS : instalación en Opensuse 11.4

RabbitVCS es un cliente SVN que nos permite manejar nuestros repositorios SVN desde nautilus.Es una herramienta muy cómoda e imprescindible si usamos gnome. Para su instalación realizaremos los siguientes pasos

1) Instalar los repositorios siguientes desde Yast -> Repositorios de Software:
http://download.opensuse.org/repositories/home:/tzotsos:/vcs/openSUSE_11.4
http://download.opensuse.org/repositories/devel:/languages:/python/openSUSE_11.4/

2) Desde Yast -> Instalar / Desinstalar software. Instalamos los siguientes paquetes
rabbitvcs rabbitvcs-nautilus-extension python-nautilus

Nos tenemos ademas que asegurar que el paquete python-nautilus es el del respositorio de RabbitCVS (actualmente es la versión 0.7.2-16.1). Si usamos la versión python-nautilus que vienen en los repositorios openSuse (GNOME:Apps o el Oss) tendremos los siguientes errores:

- Al arrancar el escritorio Gnome no aparecerán los iconos del escritorio
- No podremos lanzar nautilus
- Si lanzamos nautilus desde un terminal aparecerá el siguiente error:
"ImportError: No module named nautilus"

Si tenemos estos problemas podemos corregirlos instalando el python-nautilus de los repositorios o desinstalando rabbitvcs:
sudo zypper rm rabbitvcs rabbitvcs-nautilus-extension python-nautilus

Comando Tar

El comando tar permite empaquetar / desempaquetar varios archivos en uno solo. Su funciónprincipal es la de empaquetar, aunque también permite usar compresión mediante gzip

Empaquetar:
tar vcf nombre_archivo.tar archivo1 archivo2

v: (verbose) muestra en la patanlla las operaciones
c: (create/crear) opción para crear el archivo
f: (file/archivo) indica que se pasara como argumento el nombre del archivo tar

Podemos también usar comodines para seleccionar archivos, por ejemplo si queremos empaquetar todos los archivos jpg el comando sería:
tar cvf imagenes.tar *.jpg

Desempaquetar:
tar xvf nombre_archivo.tar

v: (verbose) muestra en la patanlla las operaciones
x: (extraer) opción desempaquetar
f: (file/archivo) indica que se pasara como argumento el nombre del archivo tar

También podemos especificar el nombre del archivo que queremos extraer.En el ejemplo extraemos el archivo imagen1.jpg (hay que especificar la ruta completa):
tar xvf nombre_archivo.tar /imagen/imagen1.jpg

Del mismo modo podemos usar comodines (como el asterisco) para desempaquetar. En el ejemplo extraemos todos los archivos jpg
tar xvf nombre_archivo.tar imagen1.jpg --wildcards '*.jpg'

wildcards: indica que se usarán comodines (pattern , patrones)

Listar Archivos
Para listar los archivos contenidos en un tar usaremos el siguiente comando
tar tf mi_archivo.tar

t : opción listar

Archivos TGZ
Para manejar archivos tgz (tar comprimidos con gzip) usaremos los mismos comandos que antes pero añadiendo la letra Z:

Comprimir:
tar cvfz nombre_archivo.tgz archivo1 archivo2

Descomprimir :
tar xvfz nombre_archivo.tgz

Listar:
tar tf nombre_archivo.tgz

Apache: Mostrar los accesos de access_log en formato tabular

Con el siguiente comando en bash mostraremos 3 campos del archivo access_log de apache(/var/log/apache2/access_log). En dicho archivo se almacenan los accesos (peticiones) a nuestro servidor apache.

Se mostrarán 3 campos : ip, día (en fommato dd/mm/yyyy) y la hora. Al ser en formato tabular será facil de editar con cualquier hoja de cálculo. El comando es el siguiente:
cat access_log | cut -d ' ' -f 1,4 | perl -pi -e 's/((\d+\.\d+\.\d+\.\d+)|(::1)) \[(\d+\/.{3}\/\d{4}):/$1\t$4\t$5/' | sort -u

La salida será algo así:
::1 11/Feb/2011 12:35:26
::1 11/Feb/2011 12:35:27
192.168.1.2 11/Feb/2011 12:35:23
192.168.1.45 11/Feb/2011 12:35:24
192.168.1.57 11/Feb/2011 12:35:22
192.168.1.124 11/Feb/2011 12:35:26

Instalar Extension PDO_OCI en Suse Linux

En los siguientes pasos instalaremos el módulo php_pdo_oci en una maquina SLES 11 de 64 bits, que tiene instalado el instant client 11.2 Dicha máquina ya tenía instalado varias elementos necesarios para que este módulo funcione.

Sobre la instalación del instant client de Oracle, y el módulo oci8 hay más información en el siguiente post:

- Instalación del Oracle Instant Client y configuración de Oci8 en php y apache en Suse


Nos centraremos exclusivamente en la instalación del PDO_OCI, ejecutaremos los siguientes pasos como root:

1- Obtener extensión y descomprimir
wget http://pecl.php.net/get/PDO_OCI
tar zxvf PDO_OCI
cd PDO_OCI-1.0/
phpize

2- Fijar el directorio del home de oracle ( en el caso de que no esté definido)
export ORACLE_HOME=/usr/lib/oracle/11.2/client64

3-Creamos unos enlaces (el configure da problemas si no están) para la versión de 64 bits

ln -s /usr/lib/oracle/11.2/client64 /usr/lib/oracle/11.2/client
ln -s /usr/include/oracle/11.2/client64 /usr/lib/oracle/11.2/client/include
4-Parcheamos para la versión 11.2 los archivos añadiendo en secciones similares las siguientes líneas (el número de linea es orientativo). De forma alternativa podemos sustituir la cadena de texto 10.2 por 11.2 Esto soluciona el error :
Configure: error: Unsupported Oracle version! 11.2

Archivo config.m4:
Línea 10
elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2; then
PDO_OCI_VERSION=11.2

Línea 125
11.2)
PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
;;

Archivo configure:
Línea 5492:
11.2)


case clntsh in
c|c_r|pthread*) ;;
*)
if test "$ext_shared" = "yes"; then
PDO_OCI_SHARED_LIBADD="$PDO_OCI_SHARED_LIBADD -lclntsh"
else


case clntsh in
c|c_r|pthread*) ;;
*)
LIBS="$LIBS -lclntsh"
;;
esac


fi
;;
esac


;;

5- Para Solucionar el errores:
Cannot find php_pdo_driver.h
Ejecutaremos lo siguiente:
mkdir include
ln -s /usr/include/php5/ include/php
Para el error
pdo_oci.c:34:1: error: unknown type name 'function_entry'
Editamos el archivo pdo_oci.c y cambiamos el function_entry por zend_function_entry


6- Ejecutamos el configure, compilamos e instalamos ( no debería salir mensaje de error)
./configure --with-pdo-oci=instantclient,/usr,11.2
make && make install
7- Añadimos el módulo a php
echo extension=pdo_oci.so > /etc/php5/conf.d/pdo_oci.ini
8- Reiniciamos apache
rcapache2 restart

9- Verificamos que se ha cargado correctamente con alguno de los siguientes comandos para listar los módulos cargados:
php -m | grep -i PDO
php -r "phpinfo();" | grep -i PDO_OCI
o directamente un phpinfo desde el navegador:

Ejecutar Hotot desde el escritorio

Tras la instalación de hotot ( Cómo instalar hotot en opensuse 11.3), cree un acceso directo en el escritorio apuntando a donde estaba el ejecutable, en mi caso:
/home/dieguz2/Programas/hotot/hotot.py

Pero me daba los siguientes errores:
Traceback (most recent call last):
File "./hotot.py", line 302, in
main()
File "./hotot.py", line 285, in main
agent.init_notify()
File "/home/dieguz2/Programas/hotot/hotot/agent.py", line 87, in init_notify
utils.get_ui_object('imgs/ic64_hotot.png')))
TypeError: pixbuf_new_from_file() argument 1 must be string, not None

Aparentemente sólo podía ejecutar hotot desde el directorio:
/home/dieguz2/Programas/hotot/

y llamando a
./hotot/hotot.py

Si nos e hacia así no encontraba varios de sus recursos.

Para poder ejecutarlo desde cualquier sitio haremos lo siguiente
1) Creamos un archivo en el directorio de hotot. En mi caso el directorio es /home/dieguz2/Programas/hotot/. Le damos permisos de ejecución
touch /home/dieguz2/Programas/hotot/runfromhere.py
chmod u+x /home/dieguz2/Programas/hotot/runfromhere.py

2) Editamos dicho archivo (cat > /home/dieguz2/Programas/hotot/runfromhere.py) y le añadimos el siguiente contenido:
#!/usr/bin/env python
# Copyright (C) 2010 dieguz2
# License: GNU GPL v3
# http://dieguz2.blogspot.com/
# script: runfromhere.py
# description: change current working directory to the path where the script is and then execute COMMAND
import os
import sys

command="./hotot/hotot.py" # command we want to execute
dirname= os.path.dirname(os.path.abspath(sys.argv[0])) # get path where this script is
os.chdir(dirname)
os.system(command)
En este script obtenemos el path absoluto donde está el script ( no es el mismo que el path de llamada). Como dicho script está alojado en el home de hotot, cambiamos a dicho directorio y ejecutamos hotot desde ahí

3) Para ejecutar hotot desde el escritorio o desde cualquier sitio, ejecutaremos el archivo que hemos creado.
/home/dieguz2/Programas/hotot/runfromhere.py



Otra forma alternativa es crear un shell script (o en python) como el siguiente y colocarlo por ejemplo en nuestro ~/bin de usuario. En este caso pondremos en la variable hotot_path la ruta donde está instalado hotot:
touch ~/bin/hotot.sh
chmod u+x ~/bin/hotot.sh
cat > ~/bin/hotot.sh
#!/bin/sh
hotot_path=/home/dieguz2/Programas/hotot
cd $hotot_path
./hotot/hotot.py

SLES 11 : habilitar / desabilitar ipv6

Con los siguientes pasos desabilitaremos o hablitaremos el soporte para IPv6 en Suse Linux Enterprise Server y en Opensuse 11.3

Para habilitar o deshabilitar:
1) Como super usuario ejecutamos el comando yast
2) Vamos a "Network Devices / Network Setting". En español se denomina "Dispositivos de Red / Ajustes de red"
3) En "Opciones Globales" marcamos o desmarcamos " Habilitar IPv6"

Será necesario reiniciar el server

Instalar el cliente de twitter Hotot en opensuse 11.3

Vamos a instalar el cliente de twitter Hotot. La instalación la realizaremos a partir del código fuente, usando mercurial para obtener una copia del repositorio. Este cliente esta basado en python por lo que las librerías están relacionadas con el mismo.

1) Instalar paquetes necesarios :
sudo zypper in python-webkitgtk python-notify mercurial python-distutils-extra git gnome-common mercurial

2) Instalar paquete python-keybinder requerido por el programa y que no se encuentra en los repositorios de opensuse.Vamos a clonar el repositorio, hacer un make, instalarlo y luego refrescaremos las librerías:
git clone http://github.com/engla/keybinder.git
cd keybinder/
./autogen.sh
./configure --prefix=/usr
make
sudo make install
sudo /sbin/ldconfig

PD: Nos indica Hawk (gracias por el aporte) que el paquete se puede encontrar en el repositorio de XFCE de opensuse. Podemos agregarlo a través de "repositorios de Software" en Yast en los repositorio de la comunidad. Para añadirlo a través de línea de comandos:
sudo zypper ar http://download.opensuse.org/repositories/X11:/xfce/openSUSE_11.3/ XFCE
sudo zypper in python-keybinder

3) Ahora vamos a instalar el cliente propiamente dicho. Crearemos un clon del repositorio con mercurial y ejecutaremos el cliente:
hg clone https://hotot.googlecode.com/hg/ hotot
cd hotot/
./hotot/hotot.py


En vez de ejecutarlo podríamos instalarlo (./install), pero no está recomendado por los creadores de hotot

Bash : script para comprobar la conexión con un servidor usando sonido

El siguiente código escrito en bash comprueba la conexión con un servidor. Si dicho servidor está vivo ( is alive!! ) no realiza ninguna salida. Si el servidor no responde a los pings (está caido) hará que suene un archivo de sonido (alarma).

Es útil para dejarlo en segundo plano y avisarnos si una maquina se ha caido. O bien para comprobar periódicamente si estamos conectados a internet (por ejemplo poniendo un host como www.google.es) de modo que si perdemos nuestra conexión local sonará la alarma.

Tiene dos tiempos configurables que indican que tiempo hay que esperar entre comprobación y comprobación.

#/bin/bash
#
# Copyright (C) 2010 dieguz2
# License: GNU GPL v3
# http://dieguz2.blogspot.com/
# Contributors: flipa_illo
# This script check if the hostname passed as argument responds ping probes. If host is down then plays a wav file.
# name: isalive.sh
# Usage: isalive.sh hostname
# Usage example: ./isalive.sh www.google.es

#Variables
sleeptime_all_ok=60 # time between ping probes when target host is alive
sleeptime_hostdown=180 # time between ping probes when target host is down

wavefile=/home/dieguz/Música/beep.wav

while true; do
comando=`ping -c 1 $1 2> /dev/null`
nofunciona=$?
#0 host exists and is alive
#1 host exists and is not alive
#2 host doesnt exists
if [ $nofunciona -eq 1 ] ; then
/usr/bin/playwave $wavefile &> /dev/null
sleeptime=$sleeptime_hostdown
else
if [ $nofunciona -eq 2 ] ; then
echo "unknown host"
exit 2;
else
sleeptime=$sleeptime_all_ok

fi

fi
sleep $sleeptime
done

Instalar SQLplus de Oracle en Linux ( Suse)

Vamos a instalar el sqlplus en linux estos pasos son validos tanto para OpenSuse como SUSE linux entreprise server (SLES) .

1) Instalar Oracle instant client siguiendo los pasos 1 y 2 (con la versión que necesitemos para nuestro SO de 32 o 64 bits):
http://dieguz2.blogspot.com/2010/10/instalacion-del-instant-client-de.html

2) Descargar el RPM de sqlplus podemos encontrarlas
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

Descargamos el archivo (en nuestro caso de 64 bits) : oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64.rpm

3) Instalamos el paquete
sudo rpm -Uvh oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64.rpm

4) Verificamos que se ha instalado y dónde
rpm -ql oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64

/usr/bin/sqlplus64
/usr/lib/oracle/11.2/client64/bin/sqlplus
/usr/lib/oracle/11.2/client64/lib/glogin.sql
/usr/lib/oracle/11.2/client64/lib/libsqlplus.so
/usr/lib/oracle/11.2/client64/lib/libsqlplusic.so

5) Añadimos la ruta a la libreria. podemos hacerlo de varias, yo he usado la opción C:

a)
Definir la variable LD_LIBRARY_PATH a nivel de usuario, editando el archivo .bashrc
echo LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib/:$LD_LIBRARY_PATH >> ~/.bashrc

b) Definir la variable LD_LIBRARY_PATH a nivel de sistema editando el archivo /etc/profile.local:
sudo echo LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib/:$LD_LIBRARY_PATH >>
/etc/profile.local
c) Añadir una entrada al /etc/ld.so.conf.
sudo echo /usr/lib/oracle/11.2/client64/lib/ > /etc/ld.so.conf.d/oracle.conf
sudo /sbin/ldconfig.


Tras estos pasos tendremos instalado el instant client.

6) Opcionalmente podemos usar un archivo tnsnames.ora para poder usar alias de nuestras conexiones. Este archivo lo crearemos en /etc/tnsnames.ora si queremos que esté compartido por todos los usuarios. Opcionalmente, si queremos colocarlo en otra ubicación distinta tenemos que definir la variable de entorno NS_ADMIN con la ruta al tnsnames.ora. Para definir la variable podemos usar el archivo ~/.bashrc a nivel local para cada usuario o /etc/profile.local para todos.

La ruta del tnsnames.ora para un Oracle instalado (sin el instant client) $ORACLE_HOME\network\admin

Relacionado:

Conexion mediante alias : tnsnames.ora
Ejemplos de TNSNAMES.ORA y LISTENER.ORA