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));
?>

Redhat en la Nube con OpenShift

Redhat a puesto en la Red su propia nube llamada OpenShift Express totalmente gratuita. En ella podremos montar aplicaciones
Java, Perl, PHP, Python y Ruby con un servidor de bases de datos como MySQL, Postgres o
MongoDB.  Al abrir una cuenta, se te asignara una URL única para tu aplicación y un repositorio
git asociado.  Los desarrollos seran almacenados en git automáticamente, esta accion desplegara la aplicacion en la nube de forma automática. Tambien tienen una versión no gratuita llamada Openshift Flex, que para obtenerla deberás darte de alta de la versión gratuita. Mas informacion en  https://openshift.redhat.com/app/ 

Crea tu propio mirrorlist en Centos (Rev 1)

Mucho del dia a dia lo realizo con repositorios locales de CentOS, Epel y mi repositorio personal.
Hago uso de los mirrorlist de Centos como segunda opcion y por supuesto los locales son de primer frente.
Para esto instalo apache y php en mi servidor de repositorio de paquetes, y modifico cada un de los archivos .repo contenidos en /etc/yum.repos.d/ .
El archivo original de CentOS-Base.repo contiene la siguiente informacion

[base]
name=CentOS-$releasever - Base
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-$releasever - Updates
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#Fasttrack - packages by Centos Users
[fasttrack]
name=CentOS-$releasever - Contrib
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=fasttrack
#baseurl=http://mirror.centos.org/centos/$releasever/fasttrack/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

Modificamos el archivo y colocamos en la linea anteriior al los mirror por defecto el nuestro quedando el archivo de congifuracion asi;
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out #baseurl= line instead.
#
#

[base]
name=CentOS-$releasever - Base
mirrorlist= http://10.1.1.1/?release=$releasever&arch=$basearch&repo=os
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist= http://10.1.1.1/?release=$releasever&arch=$basearch&repo=updates
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist= http://10.1.1.1/?release=$releasever&arch=$basearch&repo=extras
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist= http://10.1.1.1/?release=$releasever&arch=$basearch&repo=centosplus
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
mirrorlist= http://10.1.1.1/?release=$releasever&arch=$basearch&repo=contrib
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#Fasttrack - packages by Centos Users
[fasttrack]
name=CentOS-$releasever - Contrib
mirrorlist= http://10.1.1.1/?release=$releasever&arch=$basearch&repo=fasttrack
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=fasttrack
#baseurl=http://mirror.centos.org/centos/$releasever/fasttrack/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6


Luego creamos un archivo index.php que contenga la siguiente información:

<?php
$ip='10.1.1.1';
$release=$_REQUEST['release'];
$arch=$_REQUEST['arch'];
$repo=$_REQUEST['repo'];
if ($repo == 'epel'): 
    echo  'http://'.$ip.'/'.$repo.'/'.$release.'/'.$arch.'/';
elseif ($repo == 'walter'): 
    echo 'http://'.$ip.'/'.$repo.'/'.$release.'/'.$arch.'/';
else: 
    echo 'http://'.$ip.'/centos/'.$release.'/'.$repo.'/'.$arch.'/';
endif;
?>


Este archivo debe estar en el path por defecto de apache /var/www/html , y pos supuesto nuestro repositorio en la ruta definida por el mirrorlist "http://10.1.1.1/centos/"

mi alias de apache donde se encuentra el repositorio de paquetes es el siguientes

alias /centos /var/www/html/centos

<Directory /var/www/html/centos>
   Options Indexes FollowSymlinks
   AllowOverride none
   order allow,deny
   allow from all
</Directory>

el directorio que esta en apache es un enlace blando a /home/repos/centos, un usuario del sistema, otra cosa es configurar SELinux con el contexto de archivo para apache "httpd_sys_content_t"

Share Up To 110 % - 10% Affiliate Program