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

jueves, 30 de abril de 2020

[EN] DevOps roadmap

Hello!

Today I come with a roadmap that someone sent me a few days ago. It is a roadmap of what (according to how it is understood by who has drew it) a DevOps should know.



You can more or less agree with what is in it, but it has helped me to get to know some new technologies that could be very interesting to me.

What about you? What do you think? One thing amazing is that you can suggest your changes, but I am not sure they would take them into account. Anyway, I have at least two suggestions, that are
  • HOW COME Debian is not in purple???
  • I know there is no Load Balancing section but they should include it somehow


Source: roadmap.sh
You have a few more interesting roadmaps in that page

sábado, 4 de abril de 2020

[EN] Regular Expressions

Hello everyone!

How do you carry the lockdown? At the moment nothing bad, taking advantage of the time to do things that before didn't have enough time to do.

One of these things is to study; I have finished with a very interesting 'sed' and 'awk' course, and I wanted to share some notes on regular expressions, to see what you think.

‘\b[Cc]olou?r\b’
\b :: boundaries, limits the word
? :: optional inclusion of this character
\. :: Exactly one single character
this example matches Color, color, Colour, colour

Anchors
'^' :: start of a string
'$' :: end of a string

Ranges
[] :: denote the ranges
'[A-Za-z]' :: any letter
'[0-9]' :: any number; it could be represented as \d
'[a-z_]' :: lower case character and underscore character
'[349]' :: matches number 3, number 4 and number 9; it would match 34, 49 or 349 because include those numbers
'[^4]' :: matches anything BUT 4
'[Ss]erver' :: matches Server and server

Boundaries and strings
\s :: any white space character (space, line return, tap) > \S :: NOT looking for a white space character
\b :: word boundary (may include hyphen as word separator) >  \B :: NOT looking for a word boundary
'\ssytem' :: Matches "file system"
'\bsystem' :: Matches "file system" and "file-system"
'\bpop[0-9]\b' :: Matches pop2 and pop3 but not pop3s (from /etc/services file)
'\bpop[0-9]\B' :: Not matches pop2 and pop3 but matches pop3s (from /etc/services file)

Quantifiers
'u*' :: Matches u zero or more times
'u?' :: Matches u zero or once only (optional)
'u+' :: Matches u once or more times
'u{3}' :: Matches uuu (u 3 times)


'^\s*#' :: Matches all kind of commented lines: with no space, with spaces and with tabs
'start\s*end' :: Matches all independently the spaces between 'start' and 'end'
'start\s?end' :: Matches 'start end' and 'startend'
'start\s{2}end' :: Matches the option with 2 spaces between 'start and 'end'
'[a-z]{2}[0-9]{1,2}' :: Matches a postcode [ab12 7af]; {1,2} means that it could happen once or twice

grep -E :: takes extended regular expressions :: egrep. RE are extended when they use {}, but not when they use []

 



viernes, 29 de noviembre de 2019

[EN] Cleaning old systemd journal logs

Have you found that your folder is too big?

esther@Raton:~# du -hs /var/log/journal/
6,5G    /var/log/journal/

or

esther@Raton:~# du -hs /run/log/journal/
2,5G    /run/log/journal/


And have you found that once there you can't read any log messages?

esther@Raton:/var/log/journal/xxxxxxxxxxxxxxxxxxxxxxx# tail system.journal
L�8M�ތp�+2uW����.��+0OÈ�
                         �+B�ةO\@H�+ւ���|�X��+.�{EPр�+��)���ב�+o�
                                                                 �PX���+q���r�� �+"��)F���+�N��6���h�+l@����+n��Bm�B���+�{۳O�z�h�+�Z-9a���+"_�����+*(W4W8,FP�2���*�땠�OT� %$�����.fV�9P�| �J�8��8������3.��p�MESSAGE=XXXX [...]


Don't worry, that's pretty normal.

First of all, you can read your systemd journal log files just using

>  journalctl

and explore its options; some pretty useful may be
     --system                Show the system journal
     --user                  Show the user journal for the current user
  -r --reverse               Show the newest entries first
  -o --output=STRING         Change journal output mode (short, short-precise,
  -a --all                   Show all fields, including long and unprintable
     --vacuum-size=BYTES     Reduce disk usage below specified size
     --vacuum-files=INT      Leave only the specified number of journal files
     --vacuum-time=TIME      Remove journal files older than specified time


For example, for cleaning old files we have different ways using the last three options

> journalctl --vacuum-time=15d
> journalctl --vacuum-size=1G

Or you can check the live logs from a systemctl service using

> journalctl -xef -u systemctl.service

lunes, 29 de octubre de 2018

Distribuciones Linux

¿Sabéis cuántas distribuciones linux "oficiales" hay? 10? 20? Pues no, son unas cuantas más...
Os dejo una imagen de la wiki donde están todas las distros, de dónde salieron y las escisiones que se han formado. Podéis acceder a la web aquí



sábado, 1 de septiembre de 2018

Ampliar LVM sobre disco virtual (libvirtd) sin GPARTED

Hola! Esta es mi receta para dar de alta discos sin gparted

Espero que os sea de utilidad!

1) Parar servidor y añadir un disco nuevo. Arrancar servidor de nuevo

2) formatearlo (fdisk), añadir partición nueva y darle el formato de "Linux LVM" (8e). Escribir los
cambios en la tabla (w) y salir

root@Server:~# fdisk /dev/sdb
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1): "enter"
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): "enter"
Using default value 2610
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
root@Server:~# 

3) Hacer del nuevo disco un volumen físico (VP)

root@Server:~# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created

4) 'Extender' el volume group (VG) que ya existe (en este caso se llama Mega) añadiéndole el
nuevo disco

root@Server:~# vgextend Mega /dev/sdb1
Volume group "Mega" successfully extended

Para saber cómo se llama el volumen a extender, podéis ejecutar vgdisplay, que muestra todos
los volúmenes definidos
Con pvscan podréis comprobar que el nuevo disco forma parte del volumen al que lo habéis
añadido:

root@Server:~# pvscan
PV /dev/sda5 VG Mega lvm2 [19.76 GiB / 0 free]
PV /dev/sdb1 VG Mega lvm2 [19.99 GiB / 19.99 GiB free]
Total: 2 [39.75 GiB] / in use: 2 [39.75 GiB] / in no VG: 0 [0 ]


5) Vamos ahora a ampliar el espacio del disco propiamente dicho; el disco en realidad es un LV
(volumen lógico)

root@Server:~# lvextend /dev/Mega/root /dev/sdb1
Extending logical volume root to 38.90 GiB
Logical volume root successfully resized

y por último, reformateamos el sistema de archivos para que se adapte al nuevo disco:

root@Server:~# resize2fs /dev/Mega/root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/Mega/root is mounted on /; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 3
Performing an on-line resize of /dev/Mega/root to 10196992 (4k) blocks.
The filesystem on /dev/Mega/root is now 10196992 blocks long.


viernes, 8 de junio de 2018

Reducción de discos virtuales con LVM con libvirtd y qemu

Antes de nada, este procedimiento es aplicable a servidores virtualizados con libvirt y que utilizan qemu como KVM. Yo lo he ejecutado sobre RHEL6.x, RHEL7.x y Debian8.x. Se trata de un caso concreto, tal y como se hizo.

ANTES DE EMPEZAR, PARA LA MÁQUINA Y HAZ UN BACKUP DE DISCO


Arranca la máquina y para servicios críticos. La información que necesitas tener MUY clara es
  • el directorio que voy a reducir y qué volumen lógico es (LV)
  • a qué grupo de volúmenes pertenece (VG)
  • a qué volumen físico pertenece (PV)
y con toda esta información, puedo ver qué LV/VG/PVs voy a redimensionar. Si no estás familiarizado con el sistema LVM de Linux, por favor, pídele a otra persona que ejecute este proceso.

La estructura del LVM de este servidor es:
    [root@server ~]# pvs
         PV VG Fmt Attr PSize PFree
         /dev/vda3 vgsys lvm2 a-- 29,25g 11,50g
         /dev/vda5 vgdata lvm2 a-- 200,00g 12,00g

    [root@server ~]# vgs
         VG #PV #LV #SN Attr VSize VFree
         vgdata 1 3 0 wz--n- 200,00g 12,00g
         vgsys 1 3 0 wz--n- 29,25g 11,50g

    [root@server ~]# lvs
         LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
         lv_home vgdata -wi-ao-- 4,00g
         lv_ihs vgdata -wi-ao-- 180,00g
         lv_opt vgdata -wi-ao-- 4,00g
         lv_root vgsys -wi-ao-- 11,75g
         lv_tmp vgsys -wi-ao-- 1,00g
         lv_var vgsys -wi-ao-- 5,00g
En este ejemplo, el directorio /ihs se definió muy grande pero ya no se usa tanto espacio, así que tenemos que reducirlo. Los pasos que vamos a dar son los siguientes:
  • detectar qué LV hay que reducir → ya lo hemos hecho, el lv_ihs
  • detectar en qué VG y PV está alojado → son el vgdata y el /dev/vda5
  • hacer un backup de todos los LVs alojados en el VG afectado
  • eliminar los LVs, el VG y el PV
  • redefinir a nivel de disco las particiones
  • recortar el espacio del disco que ya no se va a utilizar y redimensionar el archivo
  • montar de nuevo el PV, el VG y los LVs
  • volcar el backup
Ahora sí, vamos por partes
Haz una copia del disco. Para la máquina y cópiala con otro nombre

Una vez arranques la máquina de nuevo, para servicios que puedan estar trabajando con los directorios que estén sobre los LVs con los que vamos a trabajar.
Para ver si hay algo en uso (librerías, archivos, lo que sea) yo utilizo el comando lsof de esta manera:

> lsof -l | grep “/ihs”
> lsof -l | grep “/opt”
> lsof -l | grep “/home”

Si alguno de estos comandos te devuelve algo, es porque hay algún archivo en uso y es probable que no hayas parado el servicio.
Lanzo los backups; puedo hacer un tgz o un dd; voy a probar con tgz


> tar -czvf /mnt/server/opt.tgz /opt
> tar -czvf /mnt/server/ihs.tgz /ihs
> tar -czvf /mnt/server/home.tgz /home

Después voy a desmontar los LVs y los elimino; aprovecho y comento las unidades en /etc/fstab para que cuando reinicie no tenga problemas

> umount /opt
> umount /ihs
> umount /home
> lvremove /dev/mapper/vgdata-lv_opt
> lvremove /dev/mapper/vgdata-lv_home
> lvremove /dev/mapper/vgdata-lv_ihs
> vi /etc/fstab → y comento las unidades desmontadas

Voy a desactivar el VG y lo elimino

> vgchange -a n vgdata
> vgremove vgdata

Y ahora elimino el disco vda5 del PV, que es el que contiene el VG que acabo de eliminar

> pvremove /dev/vda5

Antes de parar el servidor, doy de baja la partición desde fdisk

> fdisk /dev/vda

Dentro del fdisk con la p veo todas las particiones cómo están definidas. Las tareas que YO tengo que hacer son (es probable que TÚ tengas otras, dependerá de cómo se particionó el disco en su momento)
  • eliminar la partición extendida vda5
  • eliminar la partición primaria vda4
  • añadir una nueva partición vda4 del tamaño que corresponda (1)
  • indicar que el formato de la nueva partición vda4 es LVM
(1) El tamaño va a depender del tamaño que le vaya a dar a los nuevos LV; en mi caso, a /opt le damos 4GB, a /home le damos otros 4GB y a /ihs le damos 20GB, que hacen 28GB. Para no pillarme los dedos, voy a definir una partición de 30GB. El tamaño que le voy a dar a la unidad lo hago cuando la creo, y le asigno el tamaño con un +30G

Una vez he guardado los cambios en del fdisk, paro la máquina y redimensiono los discos. Recuerda que tienes que tener espacio para hacerlo; al menos vas a necesitar el mismo espacio que el que ocupa ahora el archivo del disco, como si lo fueras a duplicar.

> qemu-img convert Server.img -O raw Server.raw

de qcow2 a raw, porque en formato qcow2 no se pueden hacer resizes

> qemu-img resize Server.raw 50G → Cambio el tamaño del disco
> qemu-img convert Server.raw -O qcow2 Server.img → Convierto de raw a qcow2. Cuidado en este paso, si lo ejecutas así borrarás el disco original. Apunta a un fichero con otro nombre o en otro directorio

Arranca la máquina de nuevo (2) y empieza a montar de nuevo la estructura.
Creo el nuevo PV

> pvscan
> pvcreate /dev/vda4

Creo el nuevo VG

> vgcreate vgdata /dev/vda4

Creo los LVs y los formateo (3)

> lvcreate --size 4G -n lv_opt vgdata
> lvcreate --size 4G -n lv_home vgdata
> lvcreate --size 20G -n lv_ihs vgdata
> mkfs.ext4 /dev/vgdata/lv_opt
> mkfs.ext4 /dev/vgdata/lv_home
> mkfs.ext4 /dev/vgdata/lv_ihs

Descomento el /etc/fstab y monto las unidades

> mount -a


Por último restauro el contenido de las carpetas, muevo el contenido de los backups y los vuelco. Después reinicio el servidor y compruebo que los servicios arrancan correctamente

(2) Llegado a este punto, si no has comentado las unidades en el /etc/fstab cuando hemos eliminado los LVs, ahora la máquina no te va a arrancar. No te preocupes, el problema es que no encuentra las unidades para montarlas; podemos solucionarlo, aunque es un poco lento.

Para solucionarlo arranca con un LiveCD (Knoppix, por ejemplo) y vamos a comentar esas unidades en el /etc/fstab. Una vez arranque, hay que activar el soporte de LVM en Knoppix, así que abre una consola y ejecuta:

> sudo su -
> vgscan --mknodes
> vgchange -ay
> lvscan
> mount /dev/vgsys/lv_root /mnt/
> vi /mnt/etc/fstab

y comenta ahora las unidades. Guarda al salir y reinicia, ya deberías poder entrar en el SO.

(3) Si al crear una nueva partición para vgdata no pueda, prueba a arrancar con una distro Gparted y crea la partición sin problemas.

sábado, 21 de noviembre de 2015

Píldora: MySQL Replicación Maestro - esclavo



Hola! hoy te traigo mi receta para montar una replicación M/s MySQL
Espero que te sea tan útil como me resulta a mí!



Ten en cuenta que está basada en distribuciones RHEL, pero se puede adaptar a cualquier otra
[ (M): ejecutar en Master ]
[ (s): ejecutar en slave]

# Actualizar sistema en (M) y (s)


sudo yum update

# Añadir a los repositorios los oficiales de Percona en (M) y (s)


sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-
3/percona-release-0.1-3.noarch.rpm

# Instalamos, levantamos y securizamos MySQL en (M) y (s)

sudo yum install Percona-Server-server-55
sudo service mysql start
sudo mysql_secure_installation

(tendremos que introducir los datos que nos solicite)

# Abro puertos de comunicación de MySQL en (M) y (s)

sudo firewall-cmd --zone= --add-service=mysql
iptables -L -n # y compruebo que ya aparece el servicio mysql

# Configurar en (M)

sudo vi /etc/my.cnf

# y añado en [mysql]
------
log-bin=mysql-bin
server-id=1
------
guardo, salgo y ejecuto

sudo service mysql restart

y en (s) hago casi lo mismo

sudo vi /etc/my.cnf

# y añado en [mysql]
------
server-id=2
------
sudo service mysql restart

# Configurar usuarios de replicación (M)

mysql -p -u root
mysql > CREATE USER 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass123';
mysql > GRANT REPLICATION SLAVE ON *.* TO 'repl';
mysql > FLUSH TABLES WITH READ LOCK;
mysql > SHOW MASTER STATUS;

En el último paso, guardamos los datos File y Position para seguir en la provisión
Seguimos en (s)

mysql -p -u rootmysql >  CHANGE MASTER TO MASTER_HOST="Master_Host",
MASTER_USER="repl", MASTER_PASSWORD="slavepass123";,
MASTER_LOG_FILE=";mysql-bin.000001", MASTER_LOG_POS=551;

Como prueba creo una BD y compruebo que se crea automáticamente en el otro servidor
Después vuelco una BD pequeña y compruebo que se crea igualmente en el otro servidor

lunes, 28 de septiembre de 2015

Subvolúmenes (bricks) no montan en volúmenes gluster

Para ver el estado de un volumen gluster, hago:

[root@gest ~]# gluster volume status drupriv
Status of volume: drupriv
Gluster process Port Online Pid
------------------------------------------------------------------------------
Brick 172.17.229.77:/mnt/gluster/data 49152 Y 5270
Brick 172.17.230.164:/mnt/gluster/data 49152 Y 28083
Brick 172.17.229.250:/mnt/gluster/data 49152 Y 16775
NFS Server on localhost 2049 Y 5282
Self-heal Daemon on localhost N/A Y 5295
NFS Server on 172.17.229.124 2049 Y 2287
Self-heal Daemon on 172.17.229.124 N/A Y 2292
NFS Server on 172.17.229.113 2049 Y 2327
Self-heal Daemon on 172.17.229.113 N/A Y 2332
NFS Server on 172.17.229.250 2049 Y 16788
Self-heal Daemon on 172.17.229.250 N/A Y 16796
NFS Server on 172.17.230.164 2049 Y 28096
Self-heal Daemon on 172.17.230.164 N/A Y 28104
Task Status of Volume drupriv
------------------------------------------------------------------------------
There are no active volume tasks

y lo que obtengo es:

- por un lado el estado de los bricks que forman el volumen:


Brick 172.17.229.77:/mnt/gluster/data 49152 Y 5270
Brick 172.17.230.164:/mnt/gluster/data 49152 Y 28083
Brick 172.17.229.250:/mnt/gluster/data 49152 Y 16775

- por otro lado, los servidores que están montando ese volumen (por NFS en este caso)


NFS Server on localhost 2049 Y 5282
Self-heal Daemon on localhost N/A Y 5295
NFS Server on 172.17.229.124 2049 Y 2287
Self-heal Daemon on 172.17.229.124 N/A Y 2292
NFS Server on 172.17.229.113 2049 Y 2327
Self-heal Daemon on 172.17.229.113 N/A Y 2332
NFS Server on 172.17.229.250 2049 Y 16788
Self-heal Daemon on 172.17.229.250 N/A Y 16796
NFS Server on 172.17.230.164 2049 Y 28096
Self-heal Daemon on 172.17.230.164 N/A Y 28104

En el caso de que algún subvolumen no esté online (esto es cuando en lugar de una Y
tenemos una N), podemos levantarlo de la siguiente manera (se hacen todos a la vez, no
por partes)


gluster volume start drupriv

y si falla o no los levanta, podemos llegar a forzarlos:


gluster volume start drupriv force

Una vez forzado, comprueba que se han montado todas las unidades, remonta los glusters
y debería verse todo con normalidad

lunes, 18 de agosto de 2014

Qué puertos tengo abiertos y escuchando?


Habéis necesitado alguna vez saber qué puertos y qué servicios están escuchando en esos puertos? Es normal que al menos utilices una de estas formas, pero si sabes que hay más, es posible te resulte más fácil hacer estas averiguaciones la próxima vez (sin necesidad de instalar el software si es necesario)


Nmap

Para mí, es la más antigua en uso; desde que la conocí, es un comando obligado en cada sistema que monto, pero también he aprendido que no siempre está disponible, así que me he tenido que buscar un poco la vida...


esther@Celacanto:~$ nmap localhost

Starting Nmap 5.21 ( http://nmap.org ) at 2014-08-18 12:43 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00056s latency).
Not shown: 992 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
53/tcp   open  domain
80/tcp   open  http
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
631/tcp  open  ipp
3306/tcp open  mysql
3689/tcp open  rendezvous

Nmap done: 1 IP address (1 host up) scanned in 0.13 seconds
esther@Celacanto:~$


Lsof

Lsoft te muestra, además de los puertos abiertos,  las conexiones que tienes establecidas en este momento,


esther@Celacanto:~$ lsof -i
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
firefox   2857 esther   55u  IPv4 105538      0t0  TCP Celacanto.local:50484->mad01s08-in-f7.1e100.net:https
(ESTABLISHED)
firefox   2857 esther   56u  IPv4  99754      0t0  TCP Celacanto.local:52932->199.16.156.52:https
 (ESTABLISHED)
firefox   2857 esther   57u  IPv4 104799      0t0  TCP Celacanto.local:51760->mad01s09-in-f3.1e100.net:http
 (ESTABLISHED)
firefox   2857 esther   61u  IPv4 106927      0t0  TCP Celacanto.local:38367->ticketing.conzentra.com:http-alt
 (ESTABLISHED)
firefox   2857 esther   93u  IPv4 102390      0t0  TCP Celacanto.local:35392->we-in-f191.1e100.net:https
 (ESTABLISHED)
firefox   2857 esther  113u  IPv4 103466      0t0  TCP Celacanto.local:35566->vc-in-f94.1e100.net:https
 (ESTABLISHED)
firefox   2857 esther  118u  IPv4 103460      0t0  TCP Celacanto.local:37161->mad01s14-in-f8.1e100.net:https
(ESTABLISHED)
skype     4177 esther   15u  IPv4  25938      0t0  UDP localhost:35709
skype     4177 esther   50u  IPv4  28241      0t0  TCP
Celacanto.local:35904->db3msgr5010720.gateway.messenger.live.com:https (ESTABLISHED)
skype     4177 esther   51u  IPv4  26862      0t0  TCP Celacanto.local:38060->157.56.116.205:12350
 (ESTABLISHED)
skype     4177 esther   52u  IPv4  26208      0t0  TCP *:63916 (LISTEN)
skype     4177 esther   53u  IPv4  26209      0t0  UDP *:63916
skype     4177 esther   55u  IPv4 105773      0t0  TCP Celacanto.local:33011->snt404-m.hotmail.com:https
 (ESTABLISHED)
skype     4177 esther   60u  IPv4  28208      0t0  TCP Celacanto.local:47544->111.221.74.42:40011
 (ESTABLISHED)
rhythmbox 4743 esther   18u  IPv6  56747      0t0  TCP *:daap (LISTEN)
ssh       6136 esther    3u  IPv4  98422      0t0  TCP Celacanto.local:33097->nemesys:ssh (ESTABLISHED)


Netstat
netstat es un comando potente, pero ten en mente estas combinaciones  de opciones, que te pueden sacar de un aprieto y dar mucha información si lo necesitas

esther@Celacanto:~$ netstat -ltpun | grep ESC
Proto  Recib Enviad Dirección local         Dirección remota       Estado       PID/Program name


tcp        0      0 127.0.0.1:3306          0.0.0.0:*               ESCUCHAR    -             
tcp        0      0 0.0.0.0:139             0.0.0.0:*               ESCUCHAR    -             
tcp        0      0 0.0.0.0:63916           0.0.0.0:*               ESCUCHAR    4177/skype    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               ESCUCHAR    -             
tcp        0      0 192.168.122.1:53        0.0.0.0:*               ESCUCHAR    -             
tcp        0      0 192.168.1.64:53         0.0.0.0:*               ESCUCHAR    -             
tcp        0      0 127.0.0.1:53            0.0.0.0:*               ESCUCHAR    -             
tcp        0      0 0.0.0.0:22              0.0.0.0:*               ESCUCHAR    -             
tcp        0      0 127.0.0.1:631           0.0.0.0:*               ESCUCHAR    -             
tcp        0      0 127.0.0.1:953           0.0.0.0:*               ESCUCHAR    -             
tcp        0      0 0.0.0.0:445             0.0.0.0:*               ESCUCHAR    -             
tcp6       0      0 :::3689                 :::*                    ESCUCHAR    4743/rhythmbox
tcp6       0      0 :::139                  :::*                    ESCUCHAR    -             
tcp6       0      0 :::53                   :::*                    ESCUCHAR    -             
tcp6       0      0 :::22                   :::*                    ESCUCHAR    -             
tcp6       0      0 ::1:631                 :::*                    ESCUCHAR    -             
tcp6       0      0 ::1:953                 :::*                    ESCUCHAR    -             
tcp6       0      0 :::445                  :::*                    ESCUCHAR    -

esther@Celacanto:~$ netstat -ltp | grep ESC
Proto  Recib Enviad Dirección local         Dirección remota       Estado       PID/Program name
tcp        0      0 localhost:mysql         *:*                     ESCUCHAR    -              
tcp        0      0 *:netbios-ssn           *:*                     ESCUCHAR    -              
tcp        0      0 *:63916                 *:*                     ESCUCHAR    4177/skype     
tcp        0      0 *:http                  *:*                     ESCUCHAR    -              
tcp        0      0 Celacanto.local:domain  *:*                     ESCUCHAR    -              
tcp        0      0 Celacanto.local:domain  *:*                     ESCUCHAR    -              
tcp        0      0 localhost:domain        *:*                     ESCUCHAR    -              
tcp        0      0 *:ssh                   *:*                     ESCUCHAR    -              
tcp        0      0 localhost:ipp           *:*                     ESCUCHAR    -              
tcp        0      0 localhost:953           *:*                     ESCUCHAR    -              
tcp        0      0 *:microsoft-ds          *:*                     ESCUCHAR    -  

 * Nota: en mi caso, hago un grep de 'ESC', pero en cualquier sistema con base en inglés, deberá cambiarse por 'LIS' o 'LISTEN'

jueves, 10 de abril de 2014

Cómo montar y acceder a los archivos de UNA LUN iSCSI COMPARTIDA y formateada en VMFS


Dicho así, la verdad es que parece muy complicado... de entender...
En la oficina tenemos un Openfiler que sirve como cabina a la infrastructura vmware, y a raiz de una incidencia he tenido que acceder a los archivos alojados en los volume groups que, para rizar el rizo, están formateados en WMFS.

Todo este montaje lo hago desde Linux; desconozco cómo hacerlo desde Windows y si es posible (supongo que sí, pero vamos, ni idea de cómo hacerlo). Lo he probado tanto con Ubuntu 12.04 como con Debian 6.0.1, y en los dos casos no he tenido problemas. Allá vamos

1) Instala los siguientes paquetes para poder montar la LUN iSCSI en tu ordenador

sudo apt-get install open-iscsi

y levanta el servicio

/etc/init.d/open-iscsi restart


2) Yo lo que he hecho ha sido decirle al iscsi que busque las unidades que tengo en mi Openfiler, vamos a ver qué ve:


iscsiadm -m discovery -t sendtargets -p 192.168.1.2



y nos devuelve


192.168.1.2:3260,1 iqn.2006-01.com.openfiler:tsn.181174d83e49



3)  Una vez ya tenemos la dirección del volumen, nos logamos:


iscsiadm --mode node --targetname NOMBRE_ISCSI --portal IP:3260 --login


que en mi caso quedaría

iscsiadm --mode node --targetname iqn.2006-01.com.openfiler:tsn.181174d83e49 --portal 192.168.1.2:3260 --login



Tu sistema ahora reconocerá los discos iSCSI, y sólo te quedará montarlos. Para comprobarlo, puedes hacer un

dmesg


y al final verás que ha descubierto uno o más discos SCSI; en mi caso, el mensaje es

Attached SCSI disk



4) Ahora vamos a instalar el paquete necesario para poder montar los discos VMFS

apt-get install vmfs-tools fuse-utils



Este paquete incluye varias herramientas interesantes, como el debugvmfs, con el quepuedes ejecutar algún comando sobre el datastore en VMFS sin la necesidad de montarlo, por ejemplo:

root:/etc/iscsi# debugvmfs /dev/sde1 df -h
VMFS: Warning: Lun ID mismatch on /dev/sde1
Block size       : 2097152 bytes
Total blocks     : 285312
Total size       : 570624 Mb
Allocated blocks : 262426
Allocated space  : 524852 Mb
Free blocks      : 22886
Free size        : 45772 Mb


5) Vamos a montar el disco que queramos; para montarlo sobre /mnt ejecutamos:


vmfs-fuse /dev/sdf1 /mnt


Y ya podemos acceder a los datos  que hubiera en ese volumen


Esta ha sido mi experiencia; me ha servido y la verdad es que me salvó la vida en su momento, pero si queréis más info (hay más pasos que puede ser que vosotros lleguéis a necesitar), os dejo dos enlaces que he encontrado y que contienen prácticamente todo lo que he posteado aquí.



montar iscsi:  http://www.cyberciti.biz/faq/howto-setup-debian-ubuntu-linux-iscsi-initiator/
acceso vmfs: http://planetvm.net/blog/?p=1592

lunes, 13 de enero de 2014

Píldora: cómo saber el número de serie de un servidor Linux

Hay veces en los que necesitas el número de serie de un servidor y no aparece. Tienes que renovar el mantenimiento o pasar una incidencia, y no hay manera de que ese dato te aparezca. 

En diferentes distribuciones Linux (al menos Debian, Ubuntu y RHEL) existe un paquete, dmidecode, que te devuelve toda la información del hardware de tu máquina. La verdad es que sobre este paquete se podría hacer un artículo lo largo que quisiera, pero yo sólo quiero dejaros este comando que os servirá para ver el vendedor, el modelo y el número de serie de vuestro servidor:



     sudo dmidecode | grep -e 'Manufacturer' -e 'Product Name'  -e 'Serial Number' | head -n 3



Si queréis profundizar, podéis empezar por este completo artículo en esdebian.org.

martes, 17 de diciembre de 2013

Pildora: Cómo saber cuánto consume de media un hilo de apache

Bueno,  no es tan complicado como podría parecer.
Desde línea de comandos ejecutamos:


     ps -ylC apache2 --sort:rss | awk '{sum+=$8; ++n} END {print "Tot="sum"("n")";print "Avg="sum"/"n"="sum/n/1024"MB"}'         




y te devolverá el tamaño medio de las peticiones de apache en el servidor; si utilizas RedHat o CentOS, cambia 'apache2' por 'httpd'

Si quieres saber cuánto ocupa de media un hilo de otro servicio, cambia 'apache2' por el nombre del servicio!




lunes, 21 de enero de 2013

Dell: actualizaciones posteriores a una instalación (Debian y RHEL)

Después de mucho tiempo sin atender mucho al blog, hoy os dejo una entrada con una serie de tareas que es interesante hacerlas antes de una puesta en producción. Se trata de una serie de actualizaciones de sistema que normalmente no hacemos, o que como administradores de sistemas las vamos dejando de lado. Pues no! Ahora os ponéis todos a planificar las actualizaciones...

Una vez hemos hecho una actualización nueva, lo lógico en nuestro caso es actualizar el sistema. Yo trabajo normalmente con Red Hat (RHEL) o Debian, así que las actualizaciones de paquetes son muy fáciles. En el caso de Debian es

    > apt-get update --> Actualizamos la lista de paquetes que hay en los repositorios
    > apt-get upgrade --> Actualizamos los paquetes instalados que tienen versiones posteriores de la misma release

En el caso de Red Hat (RHEL), primero tengo que registrar mi sistema y después actualizarlo

    > rhn_register --> Registro mi sistema; necesitas tu usuario y contraseña en la Red Hat Network que te da acceso a las actualizaciones
    > yum update --> Actualizar listado de paquetes y el sistema

Con el sistema actualizado lo vemos todo más claro. Vamos a por actualizaciones más delicadas (iDRAC, BMC, BIOS, etc)

Primero buscamos el paquete que queremos actualizar en
    > http://support.dell.com
Ten a mano la etiqueta de servicio (service tag); te la pedirá la web para redirigirte a los paquetes correctos. Descárgalos e instálalos en tu servidor.

Para instalarlos, el procedimiento genérico es
    A chmod 755 nombre_del_paquete.bin
    B ./nombre_del_paquete.bin -c --> Ejectuarás la instalación, pero en modo prueba, para comprobar si faltan librerías o paquetes. Si falla alguna dependencia, instálala antes de seguir adelante
    C ./nombre_del_paquete.bin --> Instalarás el paquete. Una vez finalizado, ya lo tendrás. Es posible que te pida reiniciar.

Si no localizas alguno de los paquetes, en 'normal': para linux no están todos los paquetes.




Y por último, una herramienta DELL muy útil: el gestor OMSA (OpenManager Server Administrator). Desde aquí podremos hacer un seguimiento y monitorización de aspectos físicos del sistema de una manera muy rápida y sencilla. Yo te recomiendo que lo instales en tu servidor, seguro que te es de ayuda, y una vez lo tengas, lo instalarás en todos los servidores DELL que tengas.


Primero, descargamos el paquete. Según sistema (RHEL, Windows, SLES,... ) y la arquitectura (x86, _64) escogemos el paquete adecuado de
    > http://ftp.dell.com/sysman/
Busca la versión más actualizada; actualmente es la 7 (01/2013). Crea una carpeta en el servidor y descarga el paquete a esa carpeta.

Descomprímelo.

Navega hasta el directorio que has creado y ejectua
    > bash linux/supportscripts/srvadmin-install.sh --express
Una vez finalizada la instalación, levanta el servicio
    > bash linux/supportscripts/srvadmin-services.sh start

Comprueba que puedes acceder
    > https://IP:1311


Si no puedes acceder, comprueba que no tengas algún dispositivo que pueda cortarte el acceso. Recuerda que el propio sistema puede tener un firewall.




miércoles, 1 de febrero de 2012

Activando Server-Status en Apache

Parece una tontería, pero es una herramienta bastante útil a la hora de detectar cuellos de botella en un servidor apache. Últimamente me ha sido decisiva a la hora de detectar dos de estos casos en poco tiempo, y aunque su activación es un momento, muchos administradores no lo tienen en cuenta.

También es verdad que hay otros módulos, del propio apache o de terceros, pero este, por su simplicidad, facilidad a la hora de instalar (viene prácticamente por defecto, sólo hay que configurarlo) y por su utilidad, debería estar en cualquier checklist de instalación.

Lo primero es instalar el paquete apache; dependiendo de tu distribución se hace de una manera u otra (apt-get install apache2, aptitude apache2, yum install http, etc). Yo seguiré a partir del momento en que vuestro Apache funciona correctamente.

Antes que nada, debéis confirmar si la directiva

ExtendedStatus

está activada o no; en caso de no estarlo, la activáis (descomentándola o poniéndola en On). En caso de estar activad, pues ya la tenemos. Si no la encontráis, podéis dar de alta la línea 
ExtendedStatus On

en el archivo de configuración apache2.conf o httpd.conf, por ejemplo (o en cualquier archivo de configuración que vaya a leer el apache al levantar).

El siguiente paso es configurar el manejador. Es posible que vuestra distro ya lo tenga activado sin configurar. En el caso de distribuciones tipo Debian, en el directorio mods-available encuentro la configuración para este módulo en status.conf. Si edito me encuentro que la configuración por defecto es:
 
#
# Allow server status reports generated by mod_status,
# with the URL of http://servername/server-status
# Uncomment and change the "192.0.2.0/24" to allow access from other hosts.
#

    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1 ::1
    Allow from 192.168.253.0/24


# Keep track of extended status information for each request
ExtendedStatus On

# Determine if mod_status displays the first 63 characters of a request or
# the last 63, assuming the request itself is greater than 63 chars.
# Default: Off
#SeeRequestTail On



    # Show Proxy LoadBalancer status in mod_status
    ProxyStatus On




Yo me voy a centrar en la parte del handler, el manejadro que comentaba antes:
     SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1 ::1
#    Allow from 192.168.1.0/24




Aquí podremos cambiar la manera de llamar al manejador; por defecto es '/server-status', pero por seguridad está bien que lo cambies, más que nada porque esta directriz mal configurada puede estar disponible públicamente, y no interesa. Con llamarlo '/config-status' o '/server-stat' o algo parecido ya es suficiente.
La siguente cosa en que nos fijamos en los usuarios que se permiten; sólo permite acceso desde localhost, pero si descomentamos el último 'Allow' podremos acceder también desde toda nuestra red privada 192.168.1.0/24 (o desde la red o IPs que le pongamos, aquí es donde configuramos el acceso)

Y ya está. Hacemos una comprobación de la configuración con
apache2ctl configtest

y cuando nos dé el OK, hacemos un reload para cargar los cambios. Y comprobamos que tengamos acceso al server-status de la máquina desde un navegador:
http://nombredelservidor/server-status


viernes, 11 de noviembre de 2011

Reducir o truncar el ibdata1 de MySQL

Si estáis utilizando la configuración por defecto del motor de almacenamiento InnoDB para vuestras tablas MySQL, seguramente os habréis encontrado con un problema bastante molesto: el archivo 'ibdata1', que contiene todos los datos de la instancia MySQL (no es bien bien un log de transacciones) y que crece descontroladamente. Al principio pesa 10Mb, pero eso va creciendo y no se puede partir o cortar de ninguna manera. Ni siquiera con DELETE, TRUNCATE o DROPs a los datos almacenados en la BBDD harán que el archivo sea más pequeño. De hecho, cuando se libera espacio, el sistema lo marca como libre dentro del archivo y se puede reutilizar más adelante. Vamos, que podría llegar a ocupar todo el espacio libre en la partición. Y con lo crítico que es, este parámetro no viene preconfigurado en una instalación por defecto.

Bueno, el caso es que una vez configuras una BBDD para trabajar con InnoDB, pocas cosas puedes hacer con ella, una vez te has encontrado con el problema. Así que hay que empezar de nuevo, y para que no nos pase, vamos a intentar limitar estos parámetros y que no crezca de manera descontrolada.

Éste es el método que he utilizado en varias ocasiones. Al final tenéis el enlace al texto original, donde se comentan otras dos maneras de truncar el ibdata1. Yo utilizaré la más intuitiva.

Antes de nada, haced un backup completo de la BBDD. Es más, si puedes también parar el MySQL y copiar los binarios a otro directorio, mejor. Ya lo borrarás cuando puedas. Así tienes todos los backups habidos y por haber.

Yo mi backup completo lo hago con una query del estilo:

/usr/bin/mysqldump ––extended-insert ––all-databases ––add-drop-database ––disable-keys ––flush-privileges ––quick ––routines ––triggers > /root/all-databases.sql

Tarda, tarda bastante, pero es completo.

Una vez tengo hecho mi backup, paro el servidor MySQL y entonces me dedico a mover o a borrar el directorio de datos MySQL. Yo, en mi caso, siempre me gusta guardar el directorio por si hay que hacer un rollback, y es recomendable que lo hagáis. Si no podéis por problemas de espacio o algo, al menos esperad a comprobar que el proceso funciona.

Nos habíamos quedado en que tenéis que mover lo que hay en el directorio de datos de MySQL si queréis mantener el path (por defecto en Debian es /var/lib/mysql); otra opción es crear una carpeta nueva, por ejemplo si queréis mover el directorio de datos de filesystem a uno más grande. En ese caso, recordad configurar los mismos permisos

mkdir /path/to/mysql
chown mysql:mysql /path/to/mysql
chmod 770 /path/to/mysql


Ya casi estamos. Ahora toca reconfigurar el MySQL; por defecto el archivo en Debian es /etc/mysql/my.cnf pero en algunos sistemas es /etc/my.cnf; sólo tendréis que localizarlo y realizar las modificaciones que consideréis pertinentes. Yo, en mi última configuración, añadí estos parámetros

innodb_log_file_size    = 800M
innodb_buffer_pool_size = 1024M
innodb_file_per_table = 1
innodb_data_file_path=ibdata1:1024M


pero en el último algo andaría mal, porque el sistema ha pasado de mí. Lástima que lo vi cuando ya era demasiado tarde (era demasiado tarde porque había puesto la BBDD en producción y si me 'cargo' el ibdata1, me cargo la BBDD... y queda feo). Si habéis cambiado el path del directorio de datos, recordad que tenéis que modificar la variable 'datadir' y actualizarla.

Ahora que he hecho las modificaciones, inicializo la BBDD. Esto es que como no tengo nada, sólo un directorio vacío, vamos a crear la estructura de datos para que el MySQL pueda arrancar sin nada. Ya me encargaré después de cargarle los datos. Para ello, desde la línea de comandos ejecuto

sudo -u mysqld mysql_install_db
(si estoy como root sólo  mysql_install_db)


Y ya estará inicializada. Comprobad que no devuelva otro error, pero si todo va bien, ya tenéis la BBDD.

Ahora levanto el MySQL. En Debian da 'problemas' con el usuario debian-sys-maint, que es el que Debian utiliza para cualquier tarea de mantenimiento, como comprobar el estado de las tablas al arrancar el proceso. Nada, que da error porque el usuario no existe, así que no le hagáis mucho caso al amigo. Cuando importéis la BBDD y el usuario se cree, se resolverá el problema. El caso es que el servicio se levanta y podréis entrar al MySQL. Dentro de la consola ejecutar

SET FOREIGN_KEY_CHECKS=0;
SOURCE /path/to/backup-databases.sql;
SET FOREIGN_KEY_CHECKS=1;


El segundo paso importará la base de datos, y su duración dependerá de lo grande que sea ésta. Puede durar horas. No desesperéis.

Cuando por fin haya acabado, reiniciad el MySQL para que coja todos los cambios que habéis hecho al importar la base de datos. Comprobad que levanta bien y que todo funciona correctamente.

En el caso que tuviérais que volver atrás porque no ha salido bien y no tenéis tiempo de repetir el proceso, todo es tan sencillo como

1 - parar el MySQL
2 - editar /etc/mysql/my.cnf y deshacer los cambios
En mi caso sería eliminar las líneas añadidas y volver a poner /var/lib/mysql en el 'datadir'
3 - arrancar el MySQL de nuevo. Comprueba que todo funciona correctamente


El proceso sólo requiere mucho tiempo, siempre en función del tamaño de la BBDD, no es tan difícil como puede parecer antes de hacerlo

Y ya está!!



martes, 28 de junio de 2011

Configurando los servicios en los runlevels

Alguna vez os habéis encontrado que habéis compilado una aplicación, y que por defecto no se añade a los runlevels para que se inicie al arrancar el servidor?

Es fácil, no os preocupéis.

En Red Hat, utilizamos chkconfig

chkconfig --list --> Listado de los servicios que hay en el servidor
chkconfig SERVICIO on --> Para añadir el servicio a la lista de servicios que arrancan por defecto
chkconfig SERVICIO off --> Para añadir el servicio a la lista de servicios que se paran por defecto

En Debian/Ubuntu, utilizamos update-rc.d

update-rc.d SERVICIO defaults --> Para añadir el servicio a la lista de servicios que arrancan por defecto
update-rc.d SERVICIO remove --> Para añadir el servicio a la lista de servicios que se paran por defecto

Si lo queréis más gráfico, podéis probar con rcconf

Compilar Encode::Detect

Tenía que compilar el módulo en perl Encode::Detect para un servidor que estaba instalando, y de repente me da el siguiente error:

gcc: error trying to exec 'cc1plus': execvp: No such file or directory
error: command 'gcc' failed with exit status 1



Buscando información del error, y después de pensar que la fuente que me había bajado tenía algún problema, he visto que era problema del compilador. He solucionado el problema instalando el g++, que el Debian se reduce a

apt-get install g++