# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

The Debian Administrator’s Handbook


The Debian Administrator’s HandbookGracias a www.ubuntips.com.ar he descubierto este recurso que seguro a más de uno le viene muy bien. Se trata de una guía disponible online, como eBook o en libro tradicional que comenzó siendo una traducción del best-seller francés “Cahier de l’admin Debia”.

The Debian Administrator’s Handbook enseña todo lo fundamental para ser un buen administrador de sistemas Debian GNU/Linux y derivados, y por consiguiente para tener una buena base en cualquier sistema GNU/Linux. El proyecto ha sido realizado por dos desarrolladores de Debian, Raphaël Hertzog y Roland Mas.

El libro está disponible bajo la licencia Debian Free Software Guidelines. Lo podéis conseguir por todas estas vías:

  1. Leerlo online.
  2. eBook/libro físico.
  3. Descargas las fuentes y contribuir.

Hacer persistentes los cambios en ulimit (limits.conf)


Cuando cambiamos algún valor de los disponibles en ulimit, sólo se mantiene en nuestra sesión. Si salimos y volvemos a entrar los perdemos. Esto es útil para cambios temporales pero no cuando queremos que sean persistentes tras el cierre de sesión.

Como ya sabéis la mayoría, el comando ulimit -a nos dice los valores y límites establecidos para nuestro usuario:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Los que más se suelen cambiar son el número de ficheros abiertos de forma simultanea por el usuario, el número de procesos por usuario, ciclos de cpu, etc. Para nuestra sesión, lo solemos hacer directamente en la línea de comandos:

# ulimit -n
1024
# ulimit -n 2048
# ulimit -n
2048

Si salimos de la sesión y entramos de nuevo, el valor volverá a ser 1024. En el caso de Red Hat y derivados, así como Debian debemos especificar estos valores en el fichero /etc/security/limits.conf, así los haremos persistentes.

El propio fichero está perfectamente documentado con comentarios, sino, también tenemos la página man de limits.conf para más información:

$ man limits.conf
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#            
#
#Where:
# can be:
#        - an user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#        - NOTE: group and wildcard limits are not applied to root.
#          To apply a limit to the root user,  must be
#          the literal username root.
#
# can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
# can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open files
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#        - chroot - change root to directory (Debian-specific)
#
#                 
#

#*               soft    core            0
#root            hard    core            100000
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4

Desactivar el acceso por proxy en Debian a APT


Esta mañana nos encontrábamos instalando una máquina virtual Debian Squeeze a través de netinstall y por restricciones de seguridad hemos tenido que configurar vía proxy la descarga de paquetes para la instalación.

Una vez instalado e intentar actualizar el sistema nos hemos dado cuenta que seguíamos usando el proxy al usar apt/aptitude. Cuando instalamos Debian a través de un proxy, luego hay que desactivarlo en apt si no queremos seguir usándolo.

Para ello, debemos eliminar las líneas en /etc/apt/apt.conf que contienen la configuración del proxy: Acquire::http::Proxy ó Acquire::ftp::Proxy seguido de la URL del proxy:

Acquire::http::Proxy "http://miproxy.com:8213";
Acquire::ftp::Proxy "http://miproxy.com:8213";

Ubuntu/Debian: deshabilitar Touchpad portatil Dell Vostro


Nos salimos un poquito de los post habituales del blog para dejar constancia de la forma de deshabilitar el dichoso Touchpad de los portatiles Dell Vostro (en este caso un 3300). En mi caso necesito deshabilitarlo debido a que uso un ratón USB y que siempre toco sin querer el Touchpad y es lo más incómodo que existe…

Bien, para desactivarlo seguimos los siguientes pasos. Primero con el comando xinput list localizamos el nombre del dispositivo en el sistema:

$ xinput list
...
...
SynPS/2 Synaptics TouchPad
...

Una vez localizado, estas son las líneas de comando para activar y desactivar el Touchpad.

Activar:

$ xinput --set-prop "SynPS/2 Synaptics TouchPad" "Device Enabled" 1

Desactivar:

$ xinput --set-prop "SynPS/2 Synaptics TouchPad" "Device Enabled" 0

A partir de aquí, podéis configurarlo al inicio del sistema, con un alias, etc:

$ vim ~/.bashrc

alias raton_off='xinput --set-prop "SynPS/2 Synaptics TouchPad" "Device Enabled" 0'
alias raton_on='xinput --set-prop "SynPS/2 Synaptics TouchPad" "Device Enabled" 1'

Getlibs: encontrar dependencias en librerías (64 vs 32 bits)


El otro día tuvimos que instalar software de 32 bits en una máquina virtual de Debian de 64 bits. Tras la instalación encontramos problemas con dependencias incumplidas que hacían referencia a librerías de 32 bits que no se encontraban instaladas en el sistema. A partir de ahí, gracias a getlibs (¡y a Ángel!) pudimos instalar de forma sencilla todas las librerías necesarias. Todo ello debido a que dicho software no disponía de versión para Debian en 64 bits.

Lo primero que hicimos fue descargar e instalar getlibs:

$ wget http://frozenfox.freehostia.com/cappy/getlibs-all.deb
$ sudo dpkg -i getlibs-all.deb

Después sólo queda ejecutar getlibs seguido de la ruta al binario que da problemas para que automáticamente podamos resolver todas las dependencias:

$ getlibs
Usage: getlibs /path/to/binary
       getlibs -l i386librarytoinstall.so
       getlibs -p i386packagename
       getlibs -w www.website.com/i386package.deb
       getlibs -i /home/alex/i386package.deb
       See 'man getlibs' for more commands

Guía de comandos apt para Debian / Ubuntu (apt-get, apt-cache)


debianHoy vamos a dar un repaso al gestor de paquetes de Debian (y Ubuntu…) apt (Advanced Packaging Tool). Nos vamos a centrar en apt-get y apt-cache. apt-get permite descargar, actualizar e instalar paquetes entre otras cosas, apt-cache por otro lado permite lanzar consultas y buscar paquetes contra la base de datos de los repositorios.

APT-GET

Instalar un paquete:

# apt-get install <paquete>

Desinstalar un paquete:

# apt-get remove <paquete>

Eliminar un paquete incluidos sus ficheros de configuración:

# apt-get purge <paquete>

Eliminar de forma automática aquellos paquetes que no se estén utilizando:

# apt-get autoremove

Actualizar un paquete a la última versión disponible en el repositorio:

# apt-get update <paquete>

Actualizar el sistema. Actualizará todos los paquetes que dispongan de una versión superior dentro de la rama instalada de la distribución:

# apt-get upgrade

Actualizar la distribución completa. Actualizará nuestro sistema a la siguiente versión disponible de la distribución:

# apt-get dist-upgrade

Descargar únicamente las fuentes de un paquete para manipularlas de forma manual:

# apt-get source <paquete>

Limpiar cachés, paquetes descargados, etc:

# apt-get clean
# apt-get autoclean

Verificar que no tenemos ninguna dependencia incumplida:

# apt-get check

APT-CACHE

Buscar un paquete en los repositorios, se puede especificar un patrón, expresión regular, el nombre exacto del paquete, etc:

# apt-cache search <paquete>

Mostrar información sobre un paquete específico (nombre del paquete, versión, dependencias…):

# apt-cache showpkg <paquete>

Mostrar información del paquete incluyendo la descripción, información del paquete como su sitio web, página de bugs…

# apt-cache show <paquete>

Mostrar dependencias de un paquete:

# apt-cache depends <paquete>

Mostrar los nombres de todos los paquetes instalados en el sistema:

# apt-cache pkgnames

Cómo configurar tarjetas de red en Debian / Ubuntu


Vamos a ver cómo configurar las interfaces/tarjetas de red en sistemas GNU/Linux Debian (como por ejemplo Ubuntu) a través del fichero interfaces. Normalmente si disponemos de entorno gráfico solemos hacerlo a través de GUI pero nunca viene mal, para el caso de que este fallo o que no lo tengamos saber hacerlo desde los ficheros de configuración.

Lo primero que tenemos que saber es que el fichero de configuración en el que se almacena toda esta información es /etc/network/interfaces. Este fichero se puede dividir en “bloques” a través de los cuales definimos parámetros de configuración a cada una de las interfaces. Un ejemplo básico de configuración en un equipo de escritorio sería el siguiente:

Interfaz de red configurada con DHCP

auto eth0
iface eth0 inet dhcp

Este ejemplo implica una configuración en la que la interfaz de red eth0 está configurada para que arranque automáticamente y a través de DHCP. Lo primero que definimos cuando configuramos una interfaz es si queremos que arranque automáticamente con el sistema, para ello indicamos auto seguido del nombre de la interfaz. Después mediante iface definimos los parámetros de configuración de la interfaz de red, la estructura es la siguiente:

iface <nombre de la interfaz de red> <protocolo> <tipo de asignamiento IP>

Con esto ya tendríamos configurada nuestra tarjeta de red mediante DHCP

Interfaz de red configurada con IP estática

En equipos de escritorio rara vez configuramos nuestra red mediante IP estática, pero en servidores y otros sistemas es el método a utilizar. Una estructura básica de configuración de interfaz de red con IP estática es la siguiente, pasamos a explicarla:

auto eth1
iface eth1 inet static
        address 192.168.0.120
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        dns-nameservers 8.8.8.8

Como podéis ver seguimos la misma estructura, en este caso utilizamos la interfaz eth1, la configuramos para que levante con el sistema (auto eth1) y pasamos a definir mediante iface todos los parámetros de red, que en este caso engloban la IP asignada a la interfaz (192.168.0.120), su máscara de red (255.255.255.0), la red en la que se encuentra (192.168.0.0), la IP asignada para Broadcast en la red (192.168.0.255), la puerta de enlace o router (192.168.0.1) y los servidores DNS (8.8.8.8).

Podríamos combinar ambos ejemplos si por ejemplo tuviéramos un equipo con dos tarjetas de red y quisiéramos asignar una mediante DHCP y otra con IP estática:

# Interfaz de red por DHCP
auto eth0
iface eth0 inet dhcp
# Interfaz de red con IP estática
auto eth1
iface eth1 inet static
        address 192.168.0.120
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        dns-nameservers 8.8.8.8

Como podréis imaginar, esto es lo más básico, podemos hacer otras cosas como asignar IPs virtuales o alias, añadir rutas estáticas permanentes, etc.

Interfaz de red configurada con IP estática y alias

Para asignar un alias tenemos que definir primero la interfaz principal. Si tomamos como ejemplo la configuración anterior para IP estática, podemos añadir a la interfaz un alias y así poder tener dos IPs distintas a través de una única tarjeta de red:

# Interfaz principal
auto eth1
iface eth1 inet static
        address 192.168.0.120
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        dns-nameservers 8.8.8.8
# Alias
auto eth1:1
iface eth1:1 inet static
       address 192.168.0.121
       netmask 255.255.255.0
       network 192.168.0.0
       broadcast 192.168.0.255
       gateway 192.168.0.1
       dns-nameservers 8.8.8.8

Una vez que hayamos finalizado la configuración, podemos reiniciar la red por completo o levantar manualmente la interfaz que queramos con el comando ifup:

Reiniciar toda la red

# /etc/init.d/networking restart

Levantar por separado cada interfaz

# ifup eth0

Averiguar información sobre las tarjetas de red de nuestro sistema

Mediante dmesg podéis averiguar tanto el nombre de interfaz como cuantas tarjetas de red tiene el equipo, su modelo, etc. Aquí tenéis un ejemplo en el que encontramos dos tarjetas de red a las que se les ha asignado los nombres eth0 y eth1:

# dmesg | grep eth

e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection
e1000: eth1: e1000_probe: Intel(R) PRO/1000 Network Connection
e1000: eth0: e1000_watchdog_task: NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX
e1000: eth1: e1000_watchdog_task: NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX
eth0: no IPv6 routers present
eth1: no IPv6 routers present

Debian: eth0: ERROR while getting interface flags: No such device


Hoy he tenido que estar peleando un rato con una Debian tras hacer un pequeño cambio de hardware. El cambio consistía en cambiar los discos duros de un servidor a otro (identicos) para una tarea de mantenimiento.

En el fichero de interfaces, no estaban especificadas las direcciones MAC de las tarjetas de red, por lo que en principio supuse que no habría conflicto al moverlo a otro hardware, pero no era así. Al intentar arrancar la red en el nuevo equipo aparecía un error similar al siguiente:

# /etc/init.d/networking restart
SIOCSIFADDR: No such device
eth0: ERROR while getting interface flags: No such device
eth1: ERROR while getting interface flags: No such device
Bind socket to interface: No such device
Failed to bring up eth0
Failed to bring up eth1

Resulta que Debian guarda una especie de caché con las direcciones MAC de las tarjetas de red, por lo que al encontrar un equipo igual pero con MAC distinta no le apetecía arrancar la red. La solución pasa por eliminar esta caché.

El fichero en el que se encuentra el problema será uno de estos dos:

/etc/udev/rules.d/70-persistent-net.rules
/etc/udev/rules.d/z25_persistent-net.rules

Personalmente como tenía prisa directamente he borrado el fichero, reiniciado el sistema y solucionado. Es probable que cambiando o borrando la MAC en el fichero se solucione, pero borrarlo funciona por lo que parece la solución más fácil ;)