17 de junio de 2013

Repositorio Local y MirrorList con CentOS 6.4

Walter Cervini wcervini at gmail.com


Introducción

Mucha veces me preguntan del porque de un repositorio local para actualizar equipos o instalar nuevos paquetes. Pues por varios motivos:
  • Ahorro de Ancho de banda.
  • Actualizaciones e instalación de paquetes mucho mas rapidas.
  • Deployments de Instalaciones locales sin uso de Cd’s ó DVD’s.
  • y algunas otras mas que se me escapan en este momento
Aviso Bajo ningun motivo este deployment inhabilita SELinux, se hara la explicacion de como implementar el servicios y aplicar los contextos necesarios de SELinux para que este funcione de forma optima
Sugerencia La implementacion de este deployment es para cualquier de las versiones de CentOS soportadas hasta el momento

Puesta en Marcha

Paquetes Necesarios
* createrepo
* rsync
* policycoreutils
* script para la actualizacion de los repositorios.
Nota El paquete policycoreutils servira para configurar las politicas de SELinux
El script para la actualizacion de los repositorios esta disponible al final de este articulo
Instalación de los paquetes
sudo yum install -y rsync createrepo policycoreutils
Creacion del Repositorio Local
En este punto creamos las carpetas donde residiran los repositorios locales y configuraremos apache y SELinux.
Creamos la carpeta home y la llamaremos repo
mkdir /home/repo
Cambiamos el permiso de la carpeta para que todos pueda acceder y leer los archivos y carpetas
chmod 755 /home/repos
Habilitamos SELinux para que permita la funciolidad del servicio configurando el directorio con la etiqueta httpd_sys_content_t con el comando chcon y lo aplicamos de forma recursiva al directorio /home/repo/
   chcon fcontext -a -t httpd_sys_content_t /home/repo/ -R
Ahora crearemos el script en BASH que mantenga actualizado nuestro repositorio
    #/bin/bash
    rsync='/usr/bin/rsync -avzH --delete'
    local='/home/repo'
    mirror='us-msync.centos.org::CentOS'
    verlist='6.4 5.9' # Aqui las versiones a Descargar
    archlist='x86_64 i386' # Aqui colocamos las arquitecturas a Descargar
    baselist='updates extras centosplus contrib fasttrack cr os' #Aqui definimos los repositorios a Descargar
    for ver in $verlist
    do
        for arch in $archlist
        do
            for base in $baselist
            do
                echo "*******************************"
                echo ``
                echo "Sincronizando $ver/$base/$arch"
                echo ``
                echo "*******************************"
                remote=$mirror/$ver/$base/$arch/
                $rsync $remote $local/$ver/$base/$arch/
            done
        done
    done
Nota Llamaremos a este script up_repos.sh y lo colocaremos en /root/bin
El directorio bin no existe dentro de la carpeta root, sera necesario crearlo con el comando sudo mkdir /root/bin
Tambien debemos dar atributos de ejecucion al script que creamos, para esto efectuamos sudo chmod 755 /root/bin/up_repos.sh
Con respecto al script antes creado, debo mencionar algunos puntos la variable definida con $verlist contendra las versiones de CentOS, $archlist las arquitecturas y $baselist los repositorios, es decir en el script descargaremos los paquetes de los repositorios os, updates, extras, centosplus, contrib fasttrack y cr para las arquitecturas x86_64 y i386 para las versiones de CentOS 6.4 y 5.9
Aviso Ajuste el lector la version, arquitetura y repositorios que desea descargar, cada opcion en cualquiera de las tres variables debera esta separada con un espacio en blanco.

Automatizando el repositorio de forma automatica.

Para que nuestro repositorio local este siempre al dia, podemos colocar en el servicio cron esta actividad, en mi caso acostubro a actualizar siempre en las noches a partir de las 11, donde no esta el personal de la oficina laborando. Para esto usamos en comando sudo crontab -e y añadimos lo siguiente
00 23 * * * /root/bin/up_repos.sh
presionamos <ESC> y :wq
En este punto, nuestro repositorio estara actualizandose todos los dias a las 11 de la noche, si existen alguna actualizacion.
Hasta el momento hemos configurado nuestro repositorio y sus actualizaciones, peso esta vacio, no contiene ningun paquete. Para comenzar la actualizacion debemos ejecutar el comando de forma manual, esto lleva un buen tiempo si no hemos modificado el script up_repo_sh.
Solo debemos ejecutar
sudo /root/bin/up.repo.sh
Instalacion del Mirrorlist Local
Ahora crearemos el mirrorlist local, para que cuando nuestras maquinas intenten actualizarse o instalar algun paquete lo hagan en los repos locales.
Añadir en **/etc/hosts/** la ip donde esta ubicado nuestro repositorio,
esto debera añadirlo en cada una de las maquinas que desee que lea el
repositorio local
Si nuestro repo tiene la direccion 192.168.0.1 colocaremos lo siguiente
192.168.0.1 mirrorlist.centos.org
Configuracion de Apache
Para que apache pueda resolver el nombre mirrorlist.centos.org debemos añadir la siguiente configuracion a Apache, creando el archivo repo.conf en la carpeta /etc/httpd.conf.d/.
repo.conf
        alias /Centos /home/repo/Centos

        <Directory /home/repo/Centos>
           Options Indexes FollowSymlinks
           AllowOverride none
           order allow,deny
           allow from all
        </Directory>
En la raiz del Servidor Apache creamos el archivo index.php
index.php
<?php
#Nombre o Direccion Ip del Repsotiorio de Paquetes
$IPorHostName='repolocal.localhost';
#Parametros requeridos para la asignacion del mirror
$release=$_REQUEST['release'];
$arch=$_REQUEST['arch'];
$repo=$_REQUEST['repo'];

#Mirrorlist Oficial extraido de CentOS
$MirrorsCentOS="
ftp://ftp.inf.utfsm.cl/pub/Linux/CentOS/$release/$repo/$arch
http://mirror.netglobalis.net/pub/centos/$release/$repo/$arch
http://mirror.gtdinternet.com/$release/$repo/$arch/
http://centos.teletalk.net.br/$release/$repo/$arch/
http://centos.ufms.br/$release/$repo/$arch/
http://mirror.globo.com/centos/$release/$repo/$arch/
http://centos.secrel.com.br/$release/$repo/$arch/
http://centos.ufes.br/$release/$repo/$arch/
http://centos.mirror.mendoza-conicet.gob.ar/$release/$repo/$arch/
http://mirrors.ucr.ac.cr/centos/$release/$repo/$arch/";
echo 'http://'.$IPorHostName.'/Centos/'.$release.'/'.$repo.'/'.$arch;
echo $MirrorsCentOS;
?>
Nota El valor de la Variable $IPosHostName puede contener el nombre que deseen dar a su Servidor
Configuracion de los servicios para que inicien de forma automatica y sean visibles en la red
chkconfig httpd on
Configuracion del firewall
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
service iptables save

Pruebas

En alguna de las maquinas que haya configurado intente buscar o instalar
sudo yum search ipa
Verifique el log de httpd acecess.log en /var/log/httpd.log
192.x.x.x - - [16/Jun/2013:05:22:09 -0430] "GET /?release=6&arch=x86_64&repo=os HTTP/1.1" 200 493 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:09 -0430] "GET /Centos/6/os/x86_64/repodata/repomd.xml HTTP/1.1" 200 3751 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:12 -0430] "GET /?release=6&arch=x86_64&repo=centosplus HTTP/1.1" 200 581 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:12 -0430] "GET /Centos/6/centosplus/x86_64/repodata/repomd.xml HTTP/1.1" 200 3457 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /?release=6&arch=x86_64&repo=contrib HTTP/1.1" 200 548 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /Centos/6/contrib/x86_64/repodata/repomd.xml HTTP/1.1" 200 2970 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /ep/?repo=6&arch=x86_64 HTTP/1.1" 200 212 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /epel/6/x86_64/repodata/repomd.xml HTTP/1.1" 200 4302 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /?release=6&arch=x86_64&repo=extras HTTP/1.1" 200 537 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /Centos/6/extras/x86_64/repodata/repomd.xml HTTP/1.1" 200 3550 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /?release=6&arch=x86_64&repo=updates HTTP/1.1" 200 548 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /Centos/6/updates/x86_64/repodata/repomd.xml HTTP/1.1" 200 3469 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /walter/6/x86_64/repodata/repomd.xml HTTP/1.1" 200 3000 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [17/Jun/2013:03:16:17 -0430] "GET /Centos/6/os/x86_64/repodata/repomd.xml HTTP/1.1" 200 3751 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [17/Jun/2013:03:16:18 -0430] "GET /Centos/6/centosplus/x86_64/repodata/repomd.xml HTTP/1.1" 200 3457 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [17/Jun/2013:03:16:18 -0430] "GET /Centos/6/contrib/x86_64/repodata/repomd.xml HTTP/1.1" 200 2970 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [17/Jun/2013:03:16:18 -0430] "GET /epel/6/x86_64/repodata/repomd.xml HTTP/1.1" 200 4302 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [17/Jun/2013:03:16:19 -0430] "GET /Centos/6/extras/x86_64/repodata/repomd.xml HTTP/1.1" 200 3550 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [17/Jun/2013:03:16:19 -0430] "GET /Centos/6/updates/x86_64/repodata/repomd.xml HTTP/1.1" 200 3469 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [17/Jun/2013:03:16:19 -0430] "GET /walter/6/x86_64/repodata/repomd.xml HTTP/1.1" 200 3000 "-" "urlgrabber/3.9.1 yum/3.2.29"

Comentarios Finales

Espero que este articulo haya sido de su agrado y de su utilidad

Derechos de Autoria

Usted es libre de:

        Copiar, distribuir y comunicar públicamente la obra
        Remezclar — transformar la obra

Reconocimiento: Debe reconocer los créditos de la obra de la manera especificada por el autor o el licenciador
(pero no de una manera que sugiera que tiene su apoyo o apoyan el uso que hace de su obra).

Comercial: No puede utilizar esta obra para fines comerciales.
cc
Este articulo está bajo una licencia de Creative Commons Reconocimiento-NoComercial 3.0 Unported
Copyright 2013 Walter Cervini wcervini at gmail.com, All Rights Reserved

31 de mayo de 2013

Habilitando la Consola Serial en Centos

Con esto de las maquinas Virtuales y KVM , existe la posibilidad de conectarse a estas a traves de "virsh".
Ingresar en la consola en la maquina que esta ejecutando KVM y simplemente tipee virsh
deberá ver algo similar  a la imagen siguiente, y luego vuelva a presionar ENTER.


Si no le pregunta por el usuario , deberá configurar los parámetros de Kernel para poder habilitar la consola serial.
Para esto debea editar el archivo /boot/grub/grub.conf y anexar al final de la linea donde aparece KERNEL lo siguiente;

console=tty console=ttS0,115200n8



Guarde los Cambios y reinicie la maquina virtual.




28 de mayo de 2013

Discos compartidos con iSCSI en CentOS 6 (rev 1.0)



En la actualidad tengo algunos servidores con CentOS 6, mas la estación  en la cual trabajo. Esta ultima quedo sin espacio en disco, y en uno de los servidores tengo un disco de 1.0 Tb el cual presentare usando iSCSI.
Como primer paso instalo el paquete que presenta los targets a los iniciadores, configuramos para que el servicio sea persistente, e iniciamos el servicio para disponer del el en este momento

  • yum install scsi-target-utils
  • chkconfig tgtd on
  • service tgtd start

El segundo punto es configurar las LUNs de almacenamiento. Este puede ser un achivo plano, un volumen LVM o un dispositivo de bloque, y para este caso usare un volumen lvm que creare en el servidor.
Teniendo a disposicion un volumen LVM, lo siguiente sera exportar la unidad iSCSI y la LUN, para esto usaremos el comando tgtadm, que me permitira crear un target y asociarlo al storage creado anteriormente.

  • tgtadm --lld iscsi --op new --mode target --tid 1 --targetname iqn.2012-04.ve.com.cervini:disco1
--lld es el drive que usaremos, en este caso es iscsi
--op es la operacion que efectuaremos sobre el dispositivo, que en este caso es uno nuevo
--tid en el numero del target,
--targetname es el nombre del target en formato IQN o iSCSI Quilified Name

Luego asociamos el dispositivo a al volumen y la LUN

  • tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 --backing-storage /dev/vg_walter/lv_home  
lo nuevo aqui es la lun y el dispositivo a usar para el storage.


Licencia de Creative Commons
Discos compartidos con iSCSI en CentOS 6 (rev 1.0) by Walter Cervini is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.

Interfaces Bondining con Bridge en Centos 6.4

En dias pasados estaba montado el grupo de Virtualización en un CentOS 6.4 sobre un Servidor "Dell Power Edge 2950".

No voy a entrar mucho en detalles, el lector conoce donde están ubicados cada uno de los archivos que mencionare a continuación:

Para configurar una interface "Bond" sobre un Bridge efectué los siguientes pasos:

  •  Instalar Bridge-Utils
Configurar las interfaces:

ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.10.253
NETMASK=255.255.255.0
NETWORK=192.168.10.0
BROADCAST=192.168.10.255
ONBOOT=yes
DNS1=192.168.10.1
GATEWAY=192.168.10.1
DELAY=0
SLAVE=bond0

ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
BRIDGE=br0
USERCTL=no
ARP=no
BONDING_OPTS="mode=1 miimon=100"
BOOPROTO=static

ifcfg-eth0
DEVICE=eth0
HWADDR=00:24:E8:4F:21:B5
TYPE=Ethernet
UUID=ab0c1c06-14f2-4a9c-bae6-9b76a30425fb
ONBOOT=yes
USERCTL=no
SLAVE=yes
MASTER=bond0

ifcfg-eth1
DEVICE=eth1
HWADDR=00:24:E8:4F:21:B7
TYPE=Ethernet
UUID=42b86b65-b804-469c-a7d7-593cbcfa797c
ONBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes

Adicionalmente cree el archivo /etc/modprobe.d/bonding.conf con la siguiente informacion

alias bond0 bonding


Eso es todo, espero les sirva este pequeño articulo, en caso de dudas; dejen sus comentarios.

12 de febrero de 2012

Utilizar API de Twitter con PHP

Utilizar API de Twitter con PHP:

Twitter es una de las redes sociales de mayor crecimiento, como ya todos sabemos permite a los usuarios postear mensajes de una longitud reducida en número de caracteres. A través de las API de Twitter cualquiera puede crear aplicaciones que comuniquen con el servicio de la mencionada red social.

Hay un gran número de posibilidades si nos planteamos comunicar nuestro sitio web con Twitter, no me refiero a la implementación sino a las diferentes funcionalidades que podemos integrar en nuestro sitio web si decidimos comunicarlo con Twitter.

En este caso vamos a ver la opción más sencilla pero a su vez también la más utilizada, actualizar el estado de una cuenta de Twitter desde un script PHP.

Si hacemos una búsqueda en Google seguramente encontremos tutoriales que nos explican como utilizar la API de Twitter gracias al uso de la librería CURL, pero este método quedo obsoleto hace unos meses y si intentamos implementarlo recibiremos el siguiente error: “basic authentication is not supported”

 

< ?php
include '../../twitter.php';
$message = 'New movie ...';
$url = 'http://twitter.com/statuses/update.xml';
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, "$url");
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_POST, 1);
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, "status=$message");
curl_setopt($curl_handle, CURLOPT_USERPWD, "$username:$password");
$buffer = curl_exec($curl_handle);
curl_close($curl_handle);
if (empty($buffer)) {
 echo "error!";
} else {
 echo 'success!';
}
?>

Cómo acabamos de comentar este método ya no funciona ya que ahora es necesario el uso de Oauth

Para aquellos interesados en trabajar con la API de Twitter por primera vez y para aquellos que necesitan actualizar el código que ha quedado obsoleto en estos últimos meses debido al cambio, os recomiendo el siguiente artículo (en inglés).

Resumiendo un poco hay que realizar tres sencillos pasos:

1. Registrar una aplicación en: http://dev.twitter.com/apps/new. Tienes que dar a esta aplicación permisos de lectura y escritura para poder actualizar el estado de tu cuenta de Twitter.

2. Tienes que obtener 4 claves para conseguir actualizar el estado de la cuenta, estas son las claves necesarias: Consumer key, Consumer secret, Access Token (oauth_token), Access Token Secret (oauth_token_secret)

3. Descarga twitteroauth.

Ejemplo de uso (para actualizar el estado de una cuenta Twitter desde PHP):

< ?php
$consumerKey = 'insert your consumer key';
$consumerSecret = 'insert your consumer secret';
$oAuthToken = 'insert your access token';
$oAuthSecret = 'insert your token secret';

require_once(twitteroauth.php');

$tweet = new TwitterOAuth($consumerKey, $consumerSecret, $oAuthToken, $oAuthSecret);
$statusMessage = 'Prueba';
$tweet->post('statuses/update', array('status' => $statusMessage));
?>
Share Up To 110 % - 10% Affiliate Program