lunes, 27 de octubre de 2014

systemd (I) - gestion de los servicios de arranque

Con la adopción por parte de systemd de la familia Red Hat, pues me ha picado la curiosidad de como se gestionan los servicios ahora.
No voy a entrar a discutir si me parece mejor o peor que el sysVinit, simplemente quiero hacer una miniguia de adaptación a systemd.
Empecemos por el principio.

Listar servicios:
systemctl list-unit-files --type service
Ver si un servicio esta activo:
systemctl status name.service
ejemplo
[root@mi-centos7 ~]# systemctl status sshd.service
sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: active (running) since lun 2014-10-27 11:02:29 CET; 1h 51min ago
  Process: 1157 ExecStartPre=/usr/sbin/sshd-keygen (code=exited, status=0/SUCCESS)
 Main PID: 1160 (sshd)
   CGroup: /system.slice/sshd.service
           1160 /usr/sbin/sshd -D

oct 27 11:02:29 mi-centos7 systemd[1]: Started OpenSSH server daemon.
oct 27 11:02:29 mi-centos7 sshd[1160]: Server listening on 0.0.0.0 port 22.
oct 27 11:02:29 mi-centos7 sshd[1160]: Server listening on :: port 22.
oct 27 11:08:40 mi-centos7 sshd[2206]: Accepted password for root from 10.0.2.2 port 59461 ssh2


Arrancar un servicio
systemctl start name.service
ejemplo
systemctl start sshd.service

Parar un servicio
systemctl stop name.service
ejemplo
systemctl stop sshd.service

Reiniciar un servicio
systemctl restart name.service
ejemplo
systemctl restart sshd.service

Habilitar un servicio
systemctl enable name.service
ejemplo
[root@mi-centos7 ~]# systemctl enable sshd.service
ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service'


Deshabilitar un servicio
systemctl disable name.service
ejemplo
[root@mi-centos7 ~]# systemctl disable sshd.service
rm '/etc/systemd/system/multi-user.target.wants/sshd.service'





Y aquí una tabla con la equivalencia de service/chkconfig con el systemctl

service/chkconfigsystemctl Description
service name start
systemctl start name.service
Starts a service.
service name stop
systemctl stop name.service
Stops a service.
service name restart
systemctl restart name.service
Restarts a service.
service name condrestart
systemctl try-restart name.service
Restarts a service only if it is running.
service name reload
systemctl reload name.service
Reloads configuration.
service name status
systemctl status name.service
systemctl is-active name.service
Checks if a service is running.
service --status-all
systemctl list-units --type service --all
Displays the status of all services.
chkconfig name on
systemctl enable name.service
Enables a service.
chkconfig name off
systemctl disable name.service
Disables a service.
chkconfig --list name
systemctl status name.service
systemctl is-enabled name.service
Checks if a service is enabled.
chkconfig --list
systemctl list-unit-files --type service
Lists all services and checks if they are enabled.
 



Lo dejo como chuleta definitiva!!!

Espero que le sirva a alguien de ayuda.

Saludos y sed todo lo felices que podáis ser.

martes, 30 de septiembre de 2014

Volvemos a la carga

Hola a todos,
este es un post de intenciones para el curso 2014-2015.
Voy a intentar publicar más a menudo cosas en este blog.
Me planteo los siguientes temas: 
  • Un monográfico sobre administración de sistemas  (que es, funciones, evolución ...). No se como lo enfocaria pero supongo que lo dividiria en diversos post.
  • Trucos, cosas que me suceden y recetas a problemas que me pasan en el trabajo.
  • Otro monográfico de como solucionar problemas, incidencias ( vamos pollos). Como afrontar estos para internar llegar a un diagnostico y/o una solucion. Vamos a lo que me dedico últimamente.
  • Opinión sobre temas de tecnología.
También estoy dispuesto ha escribir un post sobre cualquier cosa que queráis sobre GNU/Linux.
Escribir en los comentarios sobre los temas que esteis interesados que escriba.

Saludos y sed todo lo felices que podais ser.

Quitos

martes, 19 de noviembre de 2013

Eliminar un disco en linux ¿como identifico el disco?

Un compañero de trabajo que necesitaba eliminar unos discos de cabina que le habían eliminado los de storage sin avisarle (por suerte eran unos discos que no estaba utilizando),  teniendo en cuenta que lo único que pasa es que en /var/log/messages salen errores más estéticos que otra cosa y que en el siguiente reinicio se limpiara, pero el queria eliminarlos, pos nada repasando mis chuletas le indico que lo tiene que eliminar con la siguiente chuleta:


echo "scsi remove-single-device a b c d" > /proc/scsi/scsi

  donde

             a == host-adapter id
             b == SCSI channel on host-adapter
             c == ID
             d == LUN
  Esto lo podeis mirar con un lssd o lssg

Vale perfecto pero .... el lssd/lssg son herramientas del paquete hp-fiberutils ..... y esto es una maquina virtual primer fail. Joer que hacemos?
Siguiente comando, este más generico, lsscsi:

servhost:~# lsscsi
[0:0:1:0]    disk    ATA      ST31000524AS     JC4B  /dev/sda
[2:0:0:0]    disk    ATA      ST3320613AS      SD22  /dev/sdb
[3:0:0:0]    disk    ATA      ST31000524AS     JC4B  /dev/sdc
[4:0:0:0]    cd/dvd  PIONEER  DVD-RW  DVR-115D 1.13  /dev/sr0


Bueno, pero resulta que no lo esta instalado en este Red Hat, ademas que no esta conectado ni a la Red hat network ni a un satellite, de donde sacamos el paquete lsscsi?, pues busquemos alternativas que seguro que hay, objetivo el /dev y el /sys. Encontramos lo siguiente:

servhost:~# ls -l /dev/disk/by-path/
total 0
lrwxrwxrwx 1 root root  9 nov  3 19:49 pci-0000:00:1f.2-scsi-0:0:1:0 -> ../../sda
lrwxrwxrwx 1 root root 10 nov  3 19:50 pci-0000:00:1f.2-scsi-0:0:1:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root  9 nov  3 19:49 pci-0000:00:1f.5-scsi-0:0:0:0 -> ../../sdb
lrwxrwxrwx 1 root root 10 nov  3 19:52 pci-0000:00:1f.5-scsi-0:0:0:0-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 nov  3 19:49 pci-0000:00:1f.5-scsi-0:0:0:0-part2 -> ../../sdb2
lrwxrwxrwx 1 root root 10 nov  3 19:49 pci-0000:00:1f.5-scsi-0:0:0:0-part3 -> ../../sdb3
lrwxrwxrwx 1 root root 10 nov  3 19:49 pci-0000:00:1f.5-scsi-0:0:0:0-part4 -> ../../sdb4
lrwxrwxrwx 1 root root 10 nov  3 19:50 pci-0000:00:1f.5-scsi-0:0:0:0-part5 -> ../../sdb5
lrwxrwxrwx 1 root root 10 nov  3 19:50 pci-0000:00:1f.5-scsi-0:0:0:0-part6 -> ../../sdb6
lrwxrwxrwx 1 root root 10 nov  3 19:50 pci-0000:00:1f.5-scsi-0:0:0:0-part7 -> ../../sdb7
lrwxrwxrwx 1 root root  9 nov  3 19:49 pci-0000:00:1f.5-scsi-1:0:0:0 -> ../../sdc
lrwxrwxrwx 1 root root 10 nov  3 19:50 pci-0000:00:1f.5-scsi-1:0:0:0-part1 -> ../../sdc1
lrwxrwxrwx 1 root root  9 nov  3 19:49 pci-0000:02:00.1-scsi-0:0:0:0 -> ../../sr0

OOOOOOOOOOOOOOOOOOOO

servhost:~# find /sys/devices -name "*block*" | grep -e "sd"
/sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:1/0:0:1:0/block/sda/queue/logical_block_size
/sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:1/0:0:1:0/block/sda/queue/physical_block_size
/sys/devices/pci0000:00/0000:00:1f.5/host2/target2:0:0/2:0:0:0/block/sdb/queue/logical_block_size
/sys/devices/pci0000:00/0000:00:1f.5/host2/target2:0:0/2:0:0:0/block/sdb/queue/physical_block_size
/sys/devices/pci0000:00/0000:00:1f.5/host3/target3:0:0/3:0:0:0/block/sdc/queue/logical_block_size
/sys/devices/pci0000:00/0000:00:1f.5/host3/target3:0:0/3:0:0:0/block/sdc/queue/physical_block_size


O ya lo tenemos!!!!

Lo dejo como chuleta definitiva!!!

Espero que le sirva a alguien de ayuda.

Saludos y sed todo lo felices que podáis ser.

Quitos.

viernes, 15 de noviembre de 2013

Gestion de servicios/scripts de inicio en debian

A raiz de querer deshabilitar el servicio de dhcp de mi "servidor" casero me he puesto a revisar el uso del update-rc.d, pero resulta que tenia un comportamiento extraño.
Bucenado por la web encuentro que la gestion a partir de debian 6.0 se realiza mediante el comando insserv  . Ademas revisando la documentación los scripts de inicio (vamos los que ponemos en le /etc/init.d/) han cambiado para que sigan la definición LSB 3.1 (Linux standard Base). 

Ahora para habilitar un servicio tenemos lo haremos con el comando insserv:

Habilitando el servicio, dejara el servicio de forma default

# insserv <servicio> 

Deshabilitando/eliminado el servicio (elimina los links de /etc/rc*./):

# insserv -r <servicio> 

Para determinar los runlevels y el numero de orden que tiene que seguir esta en el script de inicio del servicio situado en el /etc/init.d/servicio ahora el archivo que añadamos aqui tiene que tener la siguiente cabecera:

### BEGIN INIT INFO
# Provides:          <servicio>
# Required-Start:    $remote_fs $network $syslog
# Required-Stop:     $remote_fs $network $syslog
# Should-Start:      $local_fs slapd $named
# Should-Stop:       $local_fs slapd
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Descripcion corta del servicio
# Description:       Descripcion del servicio
### END INIT INFO


Estos campos  indican lo siguiente:

### BEGIN INIT INFO -> Cabecera de inicio de la información del script de inicio
# Provides:          <servicio>  
-> Indica el servicio que se provee 

# Required-Start:    $remote_fs $network $syslog -> Servicios que tienen que estar arrancados antes de arrancar este servicio
# Required-Stop:     $remote_fs $network $syslog -> Servicios que tienen que estar arrancados antes de parar este servicio
# Should-Start:      $local_fs slapd $named ->(opcional) Servicios que si estan presentes tendrian que estar arrancados antes de arrancar este servicio 
# Should-Stop:       $local_fs slapd ->(opcional) Servicios que si estan presentes tendrian que estar arrancados antes de arrancar este servicio
# Default-Start:     2 3 4 5 -> Runlevels donde se arranca el servicio
# Default-Stop:      0 1 6 -> Runlevels donde se para el servicio
# Short-Description: Descripcion corta del servicio
# Description:       Descripcion del servicio
### END INIT INFO

Los servicios o "facilities" de los campos Require-start/stop y Should-start/stop son o nombres de servicios (por ejemplo sshd) del arranque o servicios definidos por el entandar LSB que vienen precedidos por $,  estos son los siguientes:

$local_fs     :todos los filesystems locales estan montadosall local file systems are mounted
$network      :el soporte de red esta disponible. basic networking support is available. Example: a server program could listen on a socket.
$named        :Els servicio de DNS esta disponible.
$portmap      :Los servicios que proveen SunRPC/ONCRPC portmapping estan arrancados
$remote_fs    :Los filesystems remotos estan montados.
$syslog       :el servicio de syslog esta arrancado
$time         :el reloj se ha puesto en hora
$all          :indica que se arranca despues de todos los demas servicios o que requiere todos los servicios para poder pararse

Con esto conseguiremos que el sistema arranque correctamente todos los servicios, sin tener que preocuparnos nosotros por crear los links simbolicos ni revisar el orden en que arranca o para un servicio, el con la definición que hemos realizado los creara en el orden correcto.

Espero que le sirva a alguien de ayuda.

Saludos y sed todo lo felices que podáis ser.

Quitos.

martes, 14 de septiembre de 2010

Semaphores exhausted

Bueno, hoy voy a poner una pequeña chuleta tanto para revisar los semáforos o aumentar estos en un linux.
Un poco de información, simplificando un poco (o mucho), un semaforo es una variable que se utiliza para gestionar el bloqueo de un recurso (más info wikipedia-semaforos ) y de esta manera evitar un deadlock o abrazo de la muerte (más info wikipedia-Bloqueo mutuo). Estos son utilizados sobre todo por la Base de Datos, servidores web, ...etc.
Teniendo en cuenta esto, quedarnos sin semáforos, puede implicar que se nos bloquee la BBDD, el servidor web o la aplicación que los utilice.
Ahora vamos a ver como revisar los semáforos de un servidor y como aumentarlos.
Para ver los limites de los semáforos se pueden ver de la siguiente manera:

# ipcs -ls

------ Semaphore Limits --------
max number of arrays = 250
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 100
semaphore max value = 32767



Aqui podemos ver que nos indica los limites que tenemos en el sistema.
Podemos mirar los semáforos en uso:

# ipcs -su

------ Semaphore Status --------
used arrays = 241
allocated semaphores = 3718


En este caso estamos en el limite de arrays usados y este es el valor que deberíamos aumentar. Para hacerlo utilizaremos el comando sysctl , revisando la configuración actual:
# /sbin/sysctl kernel.sem
kernel.sem = 250 32000 100 250


Donde cada parametro indica lo siguiente:
SEMMSL - The maximum number of semaphores in a sempahore set
SEMMNS - The maximum number of sempahores in the system
SEMOPM - The maximum number of operations in a single semop call
SEMMNI - The maximum number of sempahore sets
Para ampliarlo tendremos que aumentar el ultimo parámetro:
#/sbin/sysctl -w kernel.sem="250 3200 100 300"
Y revisamos que se ha realizado los cambios:
# ipcs -sl

------ Semaphore Limits --------
max number of arrays = 300
max semaphores per array = 250
max semaphores system wide = 3200
max ops per semop call = 100
semaphore max value = 32767


Por ultimo modificamos el fichero /etc/sysctl.conf para que se mantengan los cambios en el próximo reinicio. Para eso añadimos o modificamos la siguiente linea en el fichero /etc/sysctl.conf:
kernel.sem=250 3200 100 300

Y eso es todo.
Un saludo a todos y recordad:
Ser todo lo felices que podáis ser.

Quitos.