How to install a LAMP environment in a Ubuntu Server 13.04 in one line

Andy, Apache WarriorAnd in this case with the ‘P’ I am referring to PHP and not to Perl.

There are a lot of options (this is Linux), first one is using the tasksel tool.

For example, you can use tasksel to see the list of available tasks to install.

jtome@ubuntu:~$ sudo tasksel --list
i server        Basic Ubuntu server
i openssh-server        OpenSSH server
u dns-server    DNS server
u lamp-server   LAMP server
u mail-server   Mail server
u postgresql-server     PostgreSQL database
u print-server  Print server
u samba-server  Samba file server
u tomcat-server Tomcat Java server
u cloud-image   Ubuntu Cloud Image (instance)
u virt-host     Virtual Machine host
u ubuntustudio-graphics 2D/3D creation and editing suite
u ubuntustudio-audio    Audio recording and editing suite
u edubuntu-desktop-gnome        Edubuntu desktop
u kubuntu-active        Kubuntu Active
u kubuntu-desktop       Kubuntu desktop
u kubuntu-full  Kubuntu full
u ubuntustudio-font-meta        Large selection of font packages
u lubuntu-desktop       Lubuntu Desktop
u lubuntu-core  Lubuntu minimal installation
u mythbuntu-desktop     Mythbuntu additional roles
u mythbuntu-frontend    Mythbuntu frontend
u mythbuntu-backend-master      Mythbuntu master backend
u mythbuntu-backend-slave       Mythbuntu slave backend
u ubuntustudio-photography      Photograph touchup and editing suite
u ubuntustudio-publishing       Publishing applications
u ubuntu-desktop        Ubuntu desktop
u ubuntu-usb    Ubuntu desktop USB
u ubuntu-touch  Ubuntu touch
u ubuntustudio-video    Video creation and editing suite
u xubuntu-desktop       Xubuntu desktop
u edubuntu-dvd-live     Edubuntu live DVD
u kubuntu-active-live   Kubuntu Active Remix live CD
u kubuntu-live  Kubuntu live CD
u kubuntu-dvd-live      Kubuntu live DVD
u lubuntu-live  Lubuntu live CD
u ubuntustudio-dvd-live Ubuntu Studio live DVD
u ubuntu-live   Ubuntu live CD
u ubuntu-usb-live       Ubuntu live USB
u xubuntu-live  Xubuntu live CD
u manual        Manual package selection

Sigue leyendo

Otro script para cacti. Contando el número de conexiones CVS

Acabo de crearme un pequeño script para Cacti para contar el número de sesiones CVS establecidas en un momento determinado.

El script es muy simplón y realmente habría mejores formas de hacerlo, pero el caso es que necesitaba contar el número de sesiones CVS y hacerlo con un shell script no me ha llevado más de 2 minutos.

#!/bin/sh
#
# File     : CountCVSConnections.sh
# Version  : 1.0
# Date     : November 22th 2007
# Author   : Jorge Tomé Hernando <jorge@jorgetome.info>
#
# Description
# ===========
#
# Connect to a host via SNMP and count the number
# of TCP sessions in state "established" over the
# 2401 port.
#
# Usage
# =====
# CountCVSConnections [COMMUNITY] [HOST]</pre>
<pre>snmpwalk -Os -c $1 -v 1 $2 .1.3.6.1.2.1.6.13.1.1 | \\  # Get the full list of TCP connections
grep -e ".2401..*established" | \\      # Filter the established connections over 2401 port (CVS)
wc -l | \\      # Count the number of connections
awk '{printf "Active CVS connections: " int($1)}'     # Print the result

RAIDb

RAIDb (Redundant Array of Inexpensive Databases) es un concepto propuesto en Septiembre de 2003, por Emmanuel Cecchet, Julie Marguerite y Willy Zwaenepoel y recogido en un documento de 27 páginas de lectura obligada.

En este documento los autores definen el concepto de RAIDb como una extensión del concepto de RAID (Redundant Array of Inexpensive Disks) aplicado a los repositorios de datos y presentan la implementación que han realizado de su concepto bajo el nombre de C-JDBC.

El problema a resolver es la escalabilidad de las bases de datos y la propuesta es hacerlo de forma horizontal utilizando hardware (y software) de bajo coste.

Tradicionalmente se ha avanzado mucho en la escalabilidad de las capas superiores de una arquitectura de sistemas de información moderna (multi-capa). Así el escalado de la capa de presentación (servidores web) y de la capa de aplicaciones/procesos (servidores de aplicaciones) está bastante bien resuelta. Mientras que la escalabilidad de la capa de datos normalmente se aborda mediante el escalado vertical (agrupaciones con un número de nodos pequeño, típicamente 2, y muy potentes).

Así es “fácil” encontrar instalaciones en las que existen centenares de servidores web atendiendo la presentación, decenas de servidores de aplicaciones ejecutando la aplicación/los procesos y un macro-cluster de base de datos soportando todo eso.

Ese macro-cluster acaba siendo la hardware más potente del fabricante de turno (IBM pSeries, Sun Fire Enterprise Server 25K, HP Superdome, etc.) con decenas de procesadores (sino cientos), cantidades ingentes de memoria y de almacenamiento. En estos clusters casi siempre y por definición, la mitad de la capacidad de proceso está desperdiciada. En un cluster de 2 nodos cada uno de los nodos tiene que ser capaz de asumir la carga completa del cluster ante la caída del otro nodo. Esto significa que se intenta mantener la carga del cluster de forma que ninguno de sus nodos supere el 50% de carga y, por lo tanto, el otro 50% de su capacidad no se usa en condiciones normales.

El planteamiento de RAIDb es llevar el concepto de escalabilidad horizontal a la capa de datos. Permitir el escalado horizontal (añadir más servidores, más pequeños, más baratos) de una forma sencilla, eficaz y económica. RAIDb viene a cubrir las necesidades de escalabilidad y de tolerancia a fallos de la capa de datos.

Al igual que en el caso de RAID, los creadores de RAIDb identifican tres tipos de agrupamiento: RAIDb-0, RAIDb-1 y RAIDb-2. RAIDb-0 es un modelo en el que las bases de datos se particionan pero no se distribuyen (no hay redundancia), RAIDb-1 implica un mirrorring completo de las bases de datos (redundancia completa); mientras que RAIDb-2 define un escenario de replicación incompleta de las bases de datos.

Adicionalmente los autores identifican distintos subtipos: RAIDb-1ec, RAIDb-2ec

Relación rendimiento/tolerancia a fallos de las distintas variedades de RAIDb

En el documento mencionado no solo se explica y define todo lo dicho hasta ahora, sino que también recoge información acerca de un conjunto de benchmarks realizados por los autores (concretamente han utilizado el benchmark TCP-W) y que ilustran las capacidades de escalado de las distintas alternativas dependiendo del número de nodos en el cluster.

 

raidb-02.gif

Como os decía antes os recomiendo la lectura del documento original.

hping2.pl. Script para monitorizar servicios remotos

Estos días ando metido en la puesta en marcha de un sistema de monitorización de servicios de red.

Para ello he seleccionado Cacti, que es una herramienta que ya conocía, madura y bastante potente.

El caso es que en esta ocasión me he encontrado con un pequeño problemilla. Necesitaba monitorizar el estado de servicios externos a nuestra red y a los cuales no podía acceder ni vía ping, ni vía SNMP. Después de hacer una pequeña investigación me encontre con hping, una herramienta que es como un ping superavanzado que permite enviar no solo paquetes ICMP (pings) sino componer y enviar paquetes a cualquier puerto destino. Por ejemplo, me permite hacer un ping (estrictamente hablando no es un ping) a un servidor al puerto de CVS, o de HTTP, o de cualquier otra cosa.

Después de investigar un buen rato comprobé que nadie (extrañamente) se había encontrado con el mismo problema y por lo tanto me he tenido que poner a integrar yo hping con Cacti. Esto se concreta en programar un script que ejecute el hping e imprima los resultados en un formato determinado que Cacti es capaz de interpretar.

El proceso es muy simple, me he limitado a copiar un script Perl que hacía algo parecido y adaptarlo para que use hping en vez de ping. Me animo a publicarlo por que no he encontrado ya uno hecho y por que he perdido más de 2 horas hasta que he averiguado que el comando hping2 se comporta de forma “peculiar” ya que parte de su salida la envía a STDOUT y otra parte a STDERR. Si alguno de vosotros se encuentra en la misma tesitura espero que mi experiencia os sirva para ahorraros esas dos horas. 🙂

Adjunto a continuación el scrip completo.


#!/usr/bin/perl -w## File     : hping2.pl
# Version  : 1.
# Date     : July 19th 2007
# Author   : Jorge Tomé Hernando <jorge@jorgetome.info>
#
# Based on : echoping.pl by Sébastien Desse <sdesse@euresys.fr>
#            SmokePing Like 1.0 for Cacti by drose12
#
# Description
# ===========
# This script uses the hping2 utility to check the availability
# and response times of remote services.
# I create this script to be able to monitor the availability of
# services on servers external to my network (behind a firewall) that
# i cannot ping neither access by SNMP.
#
# Syntax
# hping2.pl <number of tests> <destination port> <destination host>
#
# Where...
#   number of tests  : Numeric value. Greater than 0.
#   destination port : Numeric value. Any valid port.
#   destination host : IP address or host name
#
# The script prints a line to the STDOUT with this format:
#
# min:$min avg:$avg max:$max loss:$loss
#
# Where...
#   $min  : Numeric value. Minimum response time in milliseconds
#   $avg  : Numeric value. Average response time in milliseconds
#   $max  : Numeric value. Maximum response time in milliseconds
#   $loss : Numeric value. Percent of packets loss

## Configuration section ==============================================
$HPING2CMD    = "/usr/sbin/hping2";    # Location of the hping2 program
$HPING2PARAMS = "--numeric --quiet --syn"; # Parameters for hping2
# End of configuration section =======================================

# Check syntax
@ARGV == 3 or die "Syntax : hping2.pl <number of tests> <destination port> <destination host>n";

# Map arguments
my $count    = $ARGV[0];
my $destport = $ARGV[1];
my $host     = $ARGV[2];

# Initialize variables
my $min  = "err";
my $avg  = "err";
my $max  = "err";
my $loss = "err";

# Execute hping2
# Important!!. I lost more than 2 hours until i discovered that
# hping2 sends the result to STDERR instead of STDOUT, this is
# the reason for the "2>&1" in the command invocation.
open (HPING, "$HPING2CMD $HPING2PARAMS --count $count --destport $destport $host 2>&1 | ");

# Analyze the result
while (<HPING>) {
/(d+)% packet loss/ && ($loss = $1);
/= (.+)/(.+)/(.+) ms/ && (($min,$avg,$max) = ($1,$2,$3));
}

close(HPING);

# Print the results
print "min:$min avg:$avg max:$max loss:$loss";

## End of script

Google Desktop disponible para Linux

Acabo de leer en Lifehacker que Google Desktop está disponible para Linux.

Google Desktop es una aplicación que he echado de menos desde que hace ya más de 6 meses me pasé definitivamente en el trabajo a Ubuntu. Desde entonces solo he arrancado MS Windows XP en una o dos ocasiones.

Ubuntu incluye Beagle al que, he de ser sincero, no he dado muchas oportunidades. No recuerdo haberlo usado nunca y cuando he visto cómo se usa no me parece tan sencillo y potente como Google Desktop. Además cuando monitorizo cómo se está utilizando la CPU de mi portátil Beagle siempre aparece muy arriba en la lista.

Voy a bajarme Google Desktop para Linux y darle una oportunidad, a poco bien que lo haga sustituirá a Beagle en mi escritorio. Ya os contaré.

Actualización. Ya me lo he bajado e instalado y ya está funcionando en mi escritorio. La instalación (me he bajado el deb) no ha supuesto ningún problema e inmediatamente tenía disponible en la barra de menú el icono de Google Desktop. Igual que en MS Windows pulsando dos veces la tecla Ctrl aparece el cuadro de búsqueda.