Category Archives: Centos

software raid? no gracias!

bueno, me dieron a instalar un HP Proliant ML310e Gen8 con un array llamado b120i.

Luego de varias horas probando y recontraprobando cómo no usar el fake-raid b120i encontré cómo desactivarle, en el BIOS voy a:

System Options -> SATA Controller Options -> Embedded SATA Configuration

Y escogí “Enable SATA AHCI Support” antes estaba en Enable Dynamic HP Smart Array B210i RAID Support

Ahí pude usar software raid bien, y booteó bien.

Además intenté usar lo que decían aquí pero fallaba miserablemente, quizá porque eran drivers para centos-6.3 y yo tengo 6.5

http://h20566.www2.hp.com/portal/site/hpsc/template.PAGE/public/psi/swdDetails/?sp4ts.oid=5249571&spf_p.tpst=swdMain&spf_p.prp_swdMain=wsrp-navigationalState%3Didx%253D2%257CswItem%253DMTX_83d3c3cf4b3d47b2ae6eb71612%257CswEnvOID%253D4103%257CitemLocale%253D%257CswLang%253D%257Cmode%253D4%257Caction%253DdriverDocument&javax.portlet.begCacheTok=com.vignette.cachetoken&javax.portlet.endCacheTok=com.vignette.cachetoken

Activando guardar históricos al syslog del bash en CentOS

Ando probando una que otra cosa, pero esta me parece fundamental, hace días que vengo con la idea de que bash guarde todos los comandos que los usuarios emiten hacia syslog.

Esto con la finalidad incluso de llevar un mucho más largo history de los comandos que los usuarios escriban. Incluso poder enviarlos hacia otro servidor para almacenarlos.

Me guié por este documento, que sirven muchas cosas. Pero otras cambié por el bien de tener un ambiente aislado para pruebas y para que funcionara en CentOS-6

Comencemos:

Instalación de mock:

Instalé el paquete mock en un servidor virtual que uso para compilar paquetes de prueba en la ESPOCH.

Este servidor virtual es CentOS-6 de 64bits. Debe ser de 64bits para que pueda compilar paquetes de 64bits y de 32bits. De lo contrario no podrá compilarse paquetes de 64bits sino solamente de 32bits.

yum install mock

Creé un usuario para realizar las compilaciones:

useradd eperez

passwd eperez

Y entonces agregué el usuario eperez al grupo mock, este grupo, en el archivo /etc/group queda así:

mock:x:135:eperez

De no hacer al usuario parte del grupo mock, este usuario no podrá usar mock.

A partir de ahora todo trabajo con mock lo hago con mi usuario eperez. No se hace ningún trabajo como root, sólo mock.

su – eperez

Compilación de bash (todo esto lo haré dentro del usuario eperez):

Me bajé el último paquete de bash que existe al día de hoy (este podrá variar a futuro, hay que estar alerta de las versiones más modernas) y le instalé:

wget http://vault.centos.org/6.5/os/Source/SPackages/bash-4.1.2-15.el6_4.src.rpm

rpm -Uvh bash-4.1.2-15.el6_4.src.rpm

Ahora viene lo más duro, que es generar un diff con los cambios que se harán. Para ello abriré el tar.gz del bash, haré una copia de este directorio, cambiaré un par de archivos, y luego de esto generaré un diff entre el directorio de la copia y el directorio del original.

cd rpmbuild/SOURCES

tar zxf bash-4.1.tar.gz

cp -r bash-4.1 bash-4.1.orig

cd bash-4.1

Edito entonces el archivo config-top.h y sobre la línea 104 descomento la línea (está comentada con /* */ no quito el signo de # delante, es un .h de C, los # son parte del comando. Entonces termino dejando la línea solamente así:

#define SYSLOG_HISTORY

Y cambio las dos siguientes líneas que definen SYSLOG_FACILITY y SYSLOG_LEVEL para que tengan los valores LOG_LOCAL1 y LOG_DEBUG respectivamente, ambas líneas quedarían así (marco en negritas los dos cambios):

#  define SYSLOG_FACILITY LOG_LOCAL1
#  define SYSLOG_LEVEL LOG_DEBUG

Ahora edito bashhist.c y modifico las líneas 708 y 713 para que queden así (en negritas marco precisamente todo lo que cambié):

Línea 708

syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, “HISTORY: PPID=%d PID=%d SID=%d UID=%d User=%s %s”, getppid(), getpid(), getsid(getpid()), current_user.uid, current_user.user_name, line);

Línea 713:

syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, “HISTORY (TRUNCATED): PPID=%d PID=%d SID=%d UID=%d User=%s %s”, getppid(), getpid(), getsid(getpid()), current_user.uid, current_user.user_name, trunc);

Estamos listos para preparar el diff, salgamos al directorio SOURCES y creemos el diff:

cd ..

pwd

[eperez@mock bash-4.1]$ cd ..
[eperez@mock SOURCES]$ pwd
/home/eperez/rpmbuild/SOURCES

diff -Npur bash-4.1.orig bash-4.1 > bash_history_syslog.patch

 

Ahh, para esto es que habíamos hecho una copia del directorio bash, llamada bash-4.1.orig, es para que el diff pueda comparar y guardar los cambios. Al final estos cambios los guardé en bash_history_syslog.patch el puedes bajar de http://www.ecualinux.com/bash_history_syslog.patch para el que quiera ahorrarse todo el anterior proceso: este archivo debe ponerse en rpmbuild/SOURCES/ .

Ahora me cambio al directorio SPECS/ para editar el archivo bash.spec, cambiaré las siguientes líneas:

cd

cd rpmbuild/SPECS

vi bash.spec

# agrego _99 en la línea 8

Release: 15_99%{?dist}

# luego de la línea 41 agrego toda esta línea:

Patch999: bash_history_syslog.patch

# y luego de la línea 124 agrego toda esta línea:

%patch999 -p1 -b .history_syslog

Lo que hice fue cambiar la numeración del bash, ahora se llamaría -15_99.el6 (aparecerá un _99) esto es para evitar que luego un yum update me vuelva a instalar el viejo bash sin syslog.

Pero eso sí! hay que tener en mente que si mañana llega otro bash, el Release -16 por ejemplo, tendré que rehacer un nuevo rpm -16_99 por ejemplo.

Agregué además un nuevo parche, el 999 (puse un número alto para evitar que tropiece con futuros números de parches). Este parche se aplicará cada vez que compile el src.rpm, incorporando el envío de los comandos a syslog como deseo.

Ahora crearé el src.rpm del nuevo bash, lo guardaré hacia un directorio seguro (porque del directorio result/ le borra tan pronto compilo otra cosa), y le compilo al nuevo src.rpm para obtener el nuevo rpm:

cd

mock -r epel-6-x86_64 –sources=rpmbuild/SOURCES/ –spec=rpmbuild/SPECS/bash.spec –buildsrpm

mv /var/lib/mock/epel-6-x86_64/result/bash-4.1.2-15_99.el6.src.rpm .

mock -r epel-6-x86_64 bash-4.1.2-15_99.el6.src.rpm

mv /var/lib/mock/epel-6-x86_64/result/bash* .

como resultado tendré mi nuevo rpm!

[eperez@mock ~]$ ls
bash-4.1.2-15_99.el6.src.rpm
bash-4.1.2-15_99.el6.x86_64.rpm

ok, habrán más archivos, pero son los que ahora me interesan.

Si quisiera compilar el bash para 32bits, de una ejecuto:

mock -r epel-6-i386 bash-4.1.2-15_99.el6.src.rpm

mv /var/lib/mock/epel-6-i386/result/bash* .

Pues el mismo src.rpm me sirve para crear el de 32bits.

Instalando el nuevo bash (como root):

Me llevo este nuevo rpm hacia otro servidor, y le instalo:

rpm -Uvh bash-4.1.2-15_99.el6.x86_64.rpm

Entonces salgo y entro de nuevo, ya el nuevo bash estará activo.

Configurando rsyslog para recibir eventos de logs (como root):

Ahora edito /etc/rsyslog.conf y luego de una línea que comienza “local7.*”, agrego lo siguiente:

#bash
local1.debug                        /var/log/bash.log

Y reinicio rsyslog:

service rsyslog restart

Ahora disfruta, mira bash.log y verás que todo comando ahi aparecerá:

Dec 19 07:40:40 mock -bash: HISTORY: PPID=27954 PID=27955 SID=27937 UID=500 User=eperez vi bash.spec
Dec 19 07:44:54 mock -bash: HISTORY: PPID=27954 PID=27955 SID=27937 UID=500 User=eperez history |less
Dec 19 07:46:47 mock -bash: HISTORY: PPID=27954 PID=27955 SID=27937 UID=500 User=eperez cd
Dec 19 07:46:48 mock -bash: HISTORY: PPID=27954 PID=27955 SID=27937 UID=500 User=eperez mv /var/lib/mock/epel-6-x86_64/result/bash* .
Dec 19 07:46:49 mock -bash: HISTORY: PPID=27954 PID=27955 SID=27937 UID=500 User=eperez ls
Dec 19 07:48:13 mock -bash: HISTORY: PPID=27954 PID=27955 SID=27937 UID=500 User=eperez mock -r epel-6-i386 bash-4.1.2-15_99.el6.src.rpm
Dec 19 07:51:12 mock -bash: HISTORY: PPID=4187 PID=4511 SID=4511 UID=0 User=root cat /etc/rsyslog.conf
Dec 19 07:52:22 mock -bash: HISTORY: PPID=4187 PID=4511 SID=4511 UID=0 User=root tai /var/log/messages
Dec 19 07:52:25 mock -bash: HISTORY: PPID=4187 PID=4511 SID=4511 UID=0 User=root tail -f /var/log/messages
Dec 19 07:52:28 mock -bash: HISTORY: PPID=4187 PID=4511 SID=4511 UID=0 User=root tail -f /var/log/bash.log
Dec 19 08:01:13 mock -bash: HISTORY: PPID=27954 PID=27955 SID=27937 UID=500 User=eperez mv /var/lib/mock/epel-6-i386/result/bash-* .

Disfruten!

La forma fácil:

Si no tenemos tiempo para crear el rpm comento que estos rpm para CentOS-6 les he puesto  en el repo anku de EcuaLinux que es publico y que da bastante trabajo echar a andar un nuevo repo sólo por escasos paquetes, le instalo al repo:

wget -O /etc/yum.repos.d/anku.repo http://centos6.ecualinux.com/centosec.repo

Y ya luego:

yum update bash

Primeras impresiones sobre RHEL-7-beta1

Salió hace pocos días, no había tenido tiempo de probarle, pero aquí van mis comentarios iniciales.

Le bajé el ISO que, a propósito es sólo 64bits, RHEL-7 no vendrá con soporte de 32 bits. Y la verdad es que, el que tenga 32bits, podrá seguir usando su hardware con la versión 6 de CentOS o RHEL hasta el 2020, suficiente tiempo pienso yo. No dudo tampoco que alguien se aloque y lance CentOS-7 para 32bits, pero eso habría que verle.

Por otro lado, la verdad es que ningún hardware que se vende para servidores (recordar que RHEL y CentOS son para servidores) ya viene con 32bits. No es que se ve un equipo de 32bits estos días como servidor muy fácilmente. De hecho ya CentOS-6 venía con el sistema de virtualización SOLO para 64bits, si tu instalabas CentOS-6 de 32bits, no ibas a virtualizar nada ahi.

Le instalé dentro de una máquina virtual de KVM. Este KVM está en CentOS-6.5, le puse 1GB de RAM, 2 procesadores y 30GB en disco.

La interfaz del instalador parece la de fedora-18 ó fedora-19 mejor dicho. Es de esa pantalla que te aparece todo ahi mismo, vas dando click en las entradas y escogiendo diversas cosas (disco de instalacion, tipo de instalación, etc) pero toda en la misma pantalla. Es algo que particularmente no me gustaba de fedora, pero bueno, le han adoptado y habrá que acostumbrarse.

De todas formas la idea sigue siendo la misma de toda la vida de RedHat: preguntarte todo lo que te tenga que preguntar al inicio. No hay nada más pesado que esos instaladores que instalan un buchito de cosas, y se detienen a preguntarte tu clave.. para luego seguir y luego de 2 minutos preguntarte el idioma, y luego de 2 más preguntarte el tipo de partición y así tenerte castigado durante todo el proceso de instalación pues tienes que responder preguntas.

En el idioma de instalación, está en Español, aunque cuando le escogí me falló 2 ó 3 veces luego durante la instalación, pero no sé si es que fallaba por el idioma o por el tipo de particionamiento que le escogí con LVM-thin-provisioning… en todo caso cuando instalé en Inglés y sin thin-provisioning me funcionó.

Por defecto te propone escoger instalación mínima, excelente!

Al finalizar de instalar, la consola de texto ya no viene con 80×25  el tamano, sino que viene con otro tipo de letra muy pequeño, me dió bastante dificultad leerle porque dentro de KVM aún más pequeño se veía todo.

Al entrar, lo primero que hice fue tratar de encontrar la IP para entrar inmediatamente por ssh porque el tipo de letra es bieeeen pesado de leer para mi. Así que puse ifconfig y.. pum.. no viene instalado! En serio.. quizá networkmanager tenga otra forma de ver las interfaces, pero todavía no le conozco. Oh sí.. proponen NetworkManager aún para instalaciones via línea de comando!

Bueno, mejor aún, no había red activada así que puse ifup eth0.. pero de todas formas el misterio de la IP persistía no?

yum provides */ifconfig

para averiguar dónde estaba.. me sale el yum conque el sistema no está registrado en la red de redhat.. caramba, es la falta de costumbre, con centos todo es más fácil eh?

así que ejecuté

subscription-manager register

Y usé mi cuenta, dice redhat que no es necesario haber tenido una cuenta, que con

subscription-manager register –autosubscribe

Te iba a autosuscribir de una.

De todas formas el yum ahora me decía que no había ningún canal activo. Yo entro en shock cuando no entiendo esas cosas.. qué es un canal? entrar al sitio de redhat a averiguar? En lo que lo abría tuve a bien editar /etc/yum.repos.d/rhel.repo y cambiar enabled=1 en el primer repo el de redhat.. y ahí sí! al fin así puse usar

yum provides */ifconfig

El paquete es: net-tools, entonces puse

yum install net-tools

Y ya! Al fin ifconfig!! ahi pude averiguar mi ip, 9 minutos. Bueno, tampoco es que andaba de apremio 😉

Veamos algunas características:

[root@localhost ~]# w
11:53:31 up 9 min,  1 user,  load average: 0.01, 0.08, 0.07
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0     11:53    3.00s  0.04s  0.02s w
[root@localhost ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Everything release 7.0 Beta (Maipo)

buen consumo de ram:

[root@localhost ~]# free -m
total       used       free     shared    buffers     cached
Mem:           994        429        564          1          1        285
-/+ buffers/cache:        142        851
Swap:         2079          0       2079

Lista de procesos:

[root@localhost ~]# ps axf
PID TTY      STAT   TIME COMMAND
2 ?        S      0:00 [kthreadd]
3 ?        S      0:00  \_ [ksoftirqd/0]
4 ?        S      0:00  \_ [kworker/0:0]
5 ?        S<     0:00  \_ [kworker/0:0H]
6 ?        S      0:00  \_ [kworker/u4:0]
7 ?        S      0:00  \_ [migration/0]
8 ?        S      0:00  \_ [rcu_bh]
9 ?        S      0:00  \_ [rcuob/0]
10 ?        S      0:00  \_ [rcuob/1]
11 ?        S      0:00  \_ [rcu_sched]
12 ?        S      0:00  \_ [rcuos/0]
13 ?        S      0:00  \_ [rcuos/1]
14 ?        S      0:00  \_ [watchdog/0]
15 ?        S      0:00  \_ [watchdog/1]
16 ?        S      0:00  \_ [migration/1]
17 ?        S      0:00  \_ [ksoftirqd/1]
19 ?        S<     0:00  \_ [kworker/1:0H]
20 ?        S<     0:00  \_ [khelper]
21 ?        S      0:00  \_ [kdevtmpfs]
22 ?        S<     0:00  \_ [netns]
23 ?        S<     0:00  \_ [writeback]
24 ?        S<     0:00  \_ [kintegrityd]
25 ?        S<     0:00  \_ [bioset]
26 ?        S<     0:00  \_ [kblockd]
27 ?        S      0:00  \_ [khubd]
28 ?        S<     0:00  \_ [md]
31 ?        S      0:00  \_ [kswapd0]
32 ?        SN     0:00  \_ [ksmd]
33 ?        SN     0:00  \_ [khugepaged]
34 ?        S      0:00  \_ [fsnotify_mark]
35 ?        S<     0:00  \_ [crypto]
44 ?        S<     0:00  \_ [kthrotld]
46 ?        S<     0:00  \_ [kmpath_rdacd]
47 ?        S      0:00  \_ [kworker/1:1]
48 ?        S<     0:00  \_ [kpsmoused]
49 ?        S<     0:00  \_ [deferwq]
50 ?        S      0:00  \_ [kworker/1:2]
55 ?        S      0:00  \_ [kauditd]
214 ?        S      0:00  \_ [kworker/0:2]
215 ?        S      0:00  \_ [kworker/u4:2]
217 ?        S<     0:00  \_ [ata_sff]
220 ?        S      0:00  \_ [scsi_eh_0]
221 ?        S      0:00  \_ [scsi_eh_1]
231 ?        S<     0:00  \_ [ttm_swap]
244 ?        S<     0:00  \_ [kworker/0:1H]
307 ?        S<     0:00  \_ [kdmflush]
308 ?        S<     0:00  \_ [bioset]
310 ?        S<     0:00  \_ [kdmflush]
311 ?        S<     0:00  \_ [bioset]
329 ?        S<     0:00  \_ [xfsalloc]
330 ?        S<     0:00  \_ [xfs_mru_cache]
331 ?        S<     0:00  \_ [xfslogd]
332 ?        S<     0:00  \_ [xfs-data/dm-1]
333 ?        S<     0:00  \_ [xfs-conv/dm-1]
334 ?        S<     0:00  \_ [xfs-cil/dm-1]
335 ?        S      0:00  \_ [xfsaild/dm-1]
339 ?        S<     0:00  \_ [kworker/1:1H]
443 ?        S      0:00  \_ [vballoon]
472 ?        S<     0:00  \_ [hd-audio0]
475 ?        S<     0:00  \_ [xfs-data/vda1]
476 ?        S<     0:00  \_ [xfs-conv/vda1]
477 ?        S<     0:00  \_ [xfs-cil/vda1]
478 ?        S      0:00  \_ [xfsaild/vda1]
9143 ?        S      0:00  \_ [kworker/1:0]
1 ?        Ss     0:01 /usr/lib/systemd/systemd –switched-root –system –d
394 ?        Ss     0:00 /usr/lib/systemd/systemd-journald
406 ?        Ss     0:00 /usr/sbin/lvmetad
429 ?        Ss     0:00 /usr/lib/systemd/systemd-udevd
491 ?        S<sl   0:00 /sbin/auditd -n
508 ?        Ssl    0:01 /usr/bin/python /usr/sbin/firewalld –nofork –nopid
511 ?        Ss     0:00 avahi-daemon: running [linux.local]
535 ?        S      0:00  \_ avahi-daemon: chroot helper
512 ?        Ssl    0:00 /sbin/rsyslogd -n
513 ?        Ss     0:00 /usr/sbin/irqbalance –foreground
515 ?        Ssl    0:00 /usr/bin/python -Es /usr/sbin/tuned -l -P
516 ?        Ss     0:00 /usr/lib/systemd/systemd-logind
518 ?        Ssl    0:00 /bin/dbus-daemon –system –address=systemd: –nofork
523 ?        Ss     0:00 /usr/sbin/crond -n
565 ?        Ss     0:00 /sbin/iprinit –daemon
568 ?        Ss     0:00 /sbin/iprupdate –daemon
588 ?        Ss     0:00 /sbin/iprdump –daemon
736 ?        Ssl    0:00 /usr/sbin/NetworkManager –no-daemon
9052 ?        S      0:00  \_ /sbin/dhclient -d -sf /usr/libexec/nm-dhcp-helper
776 ?        Ssl    0:00 /usr/lib/polkit-1/polkitd –no-debug
827 ?        Ss     0:00 /usr/bin/rhsmcertd
932 ?        Ss     0:00 /usr/sbin/sshd -D
9168 ?        Ss     0:00  \_ sshd: root@pts/0
9172 pts/0    Ss     0:00      \_ -bash
9194 pts/0    R+     0:00          \_ ps axf
1402 ?        Ss     0:00 /usr/libexec/postfix/master -w
1418 ?        S      0:00  \_ pickup -l -t unix -u
1419 ?        S      0:00  \_ qmgr -l -t unix -u
9189 tty1     Ss+    0:00 /sbin/agetty –noclear tty1

networkmanager! me va a dar un ataquito.. tendré que aprenderle a usar en CLI, la herramienta de CLI anterior era horrible, espero la hayan mejorado! Aunque leí en algún lado que podías seguir usando el viejo network

firewalld, es de investigar espero sea fácil, por el sitio de fedora encontré un howto

Usan postfix.. bien! Aunque si deseas, está sendmail en la lista de paquetes, tal y como estaba en CentOS-6, pero leí que en las siguientes versiones (RHEL-8?) posiblemente saquen a sendmail de la lista de paquetes

Estilo Fedora, usan cgroup, así que parece que ahora sí en serio debemos ponernos para esto.

El Filesystem que proponen usar ya no es ext4, dicen que con XFS es mejor el desempeño así que usan xfs de filesystem.

Tienen algo nuevo: LVM-thin-provisioning, quise instalar pero fallaba, como comenté anteriormente no sé si fue el idioma o esto.

ifconfig, nada nuevo, tengo ipv6

[root@localhost ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 172.30.60.146  netmask 255.255.255.0  broadcast 0.0.0.0
inet6 2800:68:a:60:5054:ff:fe7d:69fb  prefixlen 64  scopeid 0x0<global>
inet6 fe80::5054:ff:fe7d:69fb  prefixlen 64  scopeid 0x20<link>
ether 52:54:00:7d:69:fb  txqueuelen 1000  (Ethernet)
RX packets 13314  bytes 13408407 (12.7 MiB)
RX errors 0  dropped 63  overruns 0  frame 0
TX packets 3400  bytes 508908 (496.9 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
inet 127.0.0.1  netmask 255.0.0.0
inet6 ::1  prefixlen 128  scopeid 0x10<host>
loop  txqueuelen 0  (Local Loopback)
RX packets 64  bytes 5952 (5.8 KiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 64  bytes 5952 (5.8 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

consumo de disco:

[root@localhost ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root   28G  828M   27G   3% /
devtmpfs               491M     0  491M   0% /dev
tmpfs                  498M     0  498M   0% /dev/shm
tmpfs                  498M  1.7M  496M   1% /run
tmpfs                  498M     0  498M   0% /sys/fs/cgroup
/dev/vda1              484M   92M  392M  20% /boot

bueno, 828M está muy bien.

servidor web? httpd-2.4.6, nada de hiawatha, ni nginx, ni lighttpd

php? 5.4.16

Usa systemd, ya no usa chkconfig (no dudo que haga el truco que fedora hace para reconocer los antiguos comandos)

iptables, puerto 22, 546 y 631 abiertos, tanto en ipv6 como en ipv4.

kernel?

uname -rv
3.10.0-54.0.1.el7.x86_64 #1 SMP Tue Nov 26 16:51:22 EST 2013

3.10.0, qué pena que no fue el 3.11 for WorkGroups! Me hubiera divertido durante tantos años!

Qué hago si no hay mysql en CentOS-7 ??? Hace tiempo vengo usando mariadb.. así que mejor que mejor ya RHEL-7 viene con MariaDB!

[root@localhost ~]# yum list mysql*
Loaded plugins: product-id, subscription-manager
This system is registered to Red Hat Subscription Management, but is not receiving updates. You can use subscription-manager to assign subscriptions.
Available Packages
MySQL-python.x86_64                       1.2.3-8.el7                  rhel-beta
mysql-connector-java.noarch               1:5.1.25-2.el7               rhel-beta
mysql-connector-odbc.x86_64               5.2.5-2.el7                  rhel-beta
[root@localhost ~]# yum list maria*
Loaded plugins: product-id, subscription-manager
This system is registered to Red Hat Subscription Management, but is not receiving updates. You can use subscription-manager to assign subscriptions.
Installed Packages
mariadb-libs.x86_64                     1:5.5.33a-3.el7            @anaconda/7.0
Available Packages
mariadb.i686                            1:5.5.33a-3.el7            rhel-beta
mariadb.x86_64                          1:5.5.33a-3.el7            rhel-beta
mariadb-bench.x86_64                    1:5.5.33a-3.el7            rhel-beta
mariadb-devel.i686                      1:5.5.33a-3.el7            rhel-beta
mariadb-devel.x86_64                    1:5.5.33a-3.el7            rhel-beta
mariadb-embedded.i686                   1:5.5.33a-3.el7            rhel-beta
mariadb-embedded.x86_64                 1:5.5.33a-3.el7            rhel-beta
mariadb-embedded-devel.i686             1:5.5.33a-3.el7            rhel-beta
mariadb-embedded-devel.x86_64           1:5.5.33a-3.el7            rhel-beta
mariadb-libs.i686                       1:5.5.33a-3.el7            rhel-beta
mariadb-server.x86_64                   1:5.5.33a-3.el7            rhel-beta
mariadb-test.x86_64                     1:5.5.33a-3.el7            rhel-beta

Eso es todo por el momento sobre RHEL-7 , te imaginarás que en 10 minutos (de los cuales la mayoría los pasé tratando de encontrar el ifconfig) no puedo ver mucho más, pero me pinta bien y fácil, ciertos cambios que son naturales y hay que asumirlos pues parece que es el camino.

Cómo agilizar las actualizaciones de CentOS y Fedora

Si usas CentOS, RHEL o Fedora, hay un plugin de yum muy bueno llamado yum-presto que lo que hace es bajar solamente las porciones de los paquetes rpm que le tocaría actualizar.

Digamos tienes un paquete X-1, y CentOS te indica que ya está la versión X-1.1… normalmente lo que hacen las distribuciones es bajar completamente X-1.1 y actualizar verdad?

Ahora, supongamos que entre X-1 y X-1.1 sólo haya cambiado no sé, digamos 10 bytes de un archivo (es un ejemplo), qué tal que  en vez de bajar TODO X-1.1, se baje simplemente la diferencia que hay entre X-1.1 y X-1

Para esto es yum-presto. yum-presto analiza las diferencias entre las dos versiones: la instalada y la actualizada; y solamente baja lo que cambió, y aplica estos cambios al sistema.

Qué ventaja obtenemos? Que se reduce el tamaño de las actualziaciones, si antes tenías que bajar 300MB por ejemplo.. ahora quizá tengas que bajar los diff, y estos diffs sean solamente el 10% de estos 300MB.. es decir 30MB.

Realiza cualquier cálculo : supón hayan 40MB de actualizaciones, pero en diffs solamente tengas que bajar digamos 8MB..

Ventajas: baja más rápido las actualizaciones. Mucho más. Por tanto ya se acaba la queja de que actualizar es lento.

Desventajas? : hay una y es que para actualizar primero tiene que hacer cierto procesamiento en tu máquina con el delta .. es decir, toma el diff, lo incorpora dentro del paquete anterior y ese es con el que actualiza. Lo que consume un poquito de tiempo de procesador. Tampoco es una cantidad absurda o lenta, pero se demorará un poco. Es decir, cambiamos la velocidad de bajada, por un breve consumo de procesador mientras le utilizamos. Es totalmente aceptable y la experiencia termina siendo positiva en efecto.

Cómo usamos yum-presto? Muy simple, le instalamos:

yum install yum-presto

Y ya, de ahora en adelante, tus actualizaciones verás que se dividen en dos partes:

  1. se bajan los deltas. Son archivos con extensión .drpm
  2. se bajan los que no tenían deltas. Porque algunos tienen tantos cambios que no es rentable tener un delta y mejor bajarlos completo.

Pruébalo:

yum update

y analiza cómo van pasando los delta.

Resumen de redsleeve un port del PNAELV para ARM

En resumen: está prácticamente abandonado, tiene pocos rpm, el autor no indica cómo está compilando los paquetes (para seguir el formato y tratarle de ayudar). Voy a probar pidora a ver qué tal, dicen que está bastante completo.

Cómo acceder desde internet por SSH a un servidor que está en una red interna?

No sé si te ha pasado, a veces te llaman y te piden que revises un equipo linux, pero este está en una red interna, quizá dentro de otra red que está dentro de otra red, que está dentro de otra red.. en fin, un chorro de NAT que te impide simplemente hacer: ssh IP y ya.

Caramba, pues hoy me pasó, a un cliente le han colocado sus dos servidores, con 128GB de RAM, 20TB de disco y 80 procesadores dentro de una red privada, y esos servidores pueden iniciar conexiones hacia internet, pero desde internet no se puede acceder a ellos.

El cliente ofrece una alternativa acongojante: teamviewer. Imagínate, en vez de usar el simple y eficiente SSH, tengo que abrir un teamviewer y luego desde un windows que está con ese teamviewer, poder acceder entonces por putty (ssh) a ambos mega servidores (porque si te diste cuenta, no son pelo de cochino).

Y lo malo es que lo que yo escribo a veces el teamviewer no lo entiende, doy un click para coger foco y lo interpreta como que he arrastrado la barra de tareas, o escribo yum -y update y el teamviewer piensa que puse: y -y um update (te juro que me pasó)…. es agotador, copiar y pegar ya no es con un click ni nada por el estilo.. no señor, toca control C y control V.. (en linux se copia marcando con el mouse y se pega apretando el botón del medio o la ruedita del medio).

Bueno, ya paremos las quejas.

Entré al servidor de mi cliente por teamviewer, porque no me queda más remedio, y me conecté así a un server nuestro que sí tiene una ip pública:

ssh -R 22222:localhost:22 IPdelservernuestro

qué hace -R? Alabado sea el señor.. pues hace una VPN, se conocen como VPN del pobre, entre el puerto 22222 de nuestro servidor y el puerto 22 del server de mi cliente (localhost:22).

Ahi dejé el teamviewer (le cerré, total la sesión de ssh quedó abierta porque el putty quedó abierto), y entonces desde mi servidor (IPdelservernuestro) puse:

ssh localhost -p22222

-p22222 es que se conecte por ssh a esta IP (localhost) en el puerto 22222 que es el que abrí desde el cliente aquel.

Y listo, ya estoy dentro del cliente!

No importa dónde esté el cliente, si puede entrar por SSH a un server que controlemos, podemos hacer este ssh reverso.

Ahora, alguno dirá: “valiente cosa.. tuviste que entrar por teamviewer”. Bueno, eso es porque pude hacerlo.. pero recuerda que luego levanté el ssh, cerré la sesión de teamviewer dejando el putty ese abierto ahi.

Otro dirá: ah, pero y si cierran el putty? Bueno, o entro por teamviewer y le vuelvo a abrir, o le dejo corriendo dentro de una sesión de screen (ver más info de screen en www.ecualug.org)

Otro dirá: “sí , pero y si no hubiera habido teamviewer?” Bueno, en este caso le podría pedir al cliente (que seguramente sí está al lado del servidor): oye, escribe este comando. Y le crearía un usuario para que él pudiera entrar a mi servidor (porque no es necesario que entre como root, como usa un puerto alto, encima de 1024, no hay problema con eso).

Más quejas?

No queda espacio en el dispositivo, pero sí hay!

Esto me ha sucedido un par de veces, hoy me llamó un cliente al que le damos soporte al servidor, que el server cuando arrancó luego de un apagón, no le funcionaba adecuadamente, no le navegaban las máquinas de su red.

Entré al server, y en efecto el squid estaba caído! Le intenté levantar y nada, daba un error así como pude observar en /var/log/squid/cache.log

2012/11/26 08:01:21| WARNING: Could not write pid file
2012/11/26 08:01:21| Squid plugin modules loaded: 0
2012/11/26 08:01:21| Adaptation support is off.
2012/11/26 08:01:21| Ready to serve requests.
FATAL: Received Segment Violation…dying.
2012/11/26 08:01:21| storeDirWriteCleanLogs: Starting…
2012/11/26 08:01:21|   Finished.  Wrote 0 entries.
2012/11/26 08:01:21|   Took 0.00 seconds (  0.00 entries/sec).
CPU Usage: 0.029 seconds = 0.022 user + 0.007 sys
Maximum Resident Size: 41744 KB
Page faults with physical i/o: 0
Memory usage for squid via mallinfo():
total space in arena:    3460 KB
Ordinary blocks:         3378 KB      5 blks
Small blocks:               0 KB      0 blks
Holding blocks:          1096 KB      4 blks
Free Small blocks:          0 KB
Free Ordinary blocks:      81 KB
Total in use:            4474 KB 129%
Total free:                81 KB 2%

Lo que me llamó la atención es que decía que no podía escribir squid.pid. Miré el espacio libre en /var y resultaba que sí había espacio! mira:

df -h
S.ficheros            Size  Used Avail Use% Montado en
/dev/sda2             4,9G  1,2G  3,4G  27% /
tmpfs                 7,8G     0  7,8G   0% /dev/shm
/dev/sda1             194M  106M   78M  58% /boot
/dev/sda5            1008M   34M  924M   4% /tmp
/dev/sda6              38G   26G  9,5G  74% /var

Bueno, tiene un 74% de uso, no es el 100% aunque es medio alto no.

Me la olí, es un tema de inodos, se agotaron los inodos, porque cuando se acaban los inodos (cada filesystem tiene un número finito de inodos) puede suceder esto, ejecuté df -i para ver inodos libres y en efecto:

df -i
S.ficheros            Inodes   IUsed   IFree IUse% Montado en
/dev/sda2             320000   57751  262249   19% /
tmpfs                2041813       1 2041812    1% /dev/shm
/dev/sda1              51200      56   51144    1% /boot
/dev/sda5              65536      17   65519    1% /tmp
/dev/sda6            2485504 2485504       0  100% /var

Ahí está! 100% de uso de inodos. Por cada archivo que se escribe, se gasta al menos un inodo, el sistema a la hora de instalarse calcula más o menos cuánto espacio hay en la partición y divide este espacio por, digamos: 4k, de forma tal que estima que se escribirán como promedio archivos de 4k. Lógicamente muchos de los archivos que se escriben son mayores a 4k, por lo tanto normalmente los inodos bastan.

En este caso es porque el usuario tiene sarg instalado, sarg es un sistema de análisis de logs de squid que escribe diariamente, semanalmente, mensualmente su resultado del análisis, y son miles de archivitos pequeños, que no llegan a 4k, y esto es lo que hace que se agoten primero los inodos antes que el espacio

Si te fijas, un supuesto problema resultó no serlo. El usuario pensaba era porque se fue la luz. Yo ví que el squid no arrancaba y asumí primero un problema de permisos (puede suceder a veces) pero a la final resultó ser algo totalmente inesperado. Debe planificarse una tarea programada cada cierto tiempo para borrar los logs del sarg más viejos para evitar que esto ocurra.

 

Usando “include” dentro de /etc/aliases

Ocurre que hay ocasiones en que un usuario me pide “Yo quiero tener un alias en sendmail que contenga a todos los usuarios de mi sistema, de forma tal que cuando escriba a [email protected], el mail llegue a toditos los usuarios de mi sistema”

Partamos de un hecho: Hasta CentOS-6, los usuarios del sistema son los que tienen un uid mayor o igual a 500.

¿Cómo puedo obtener una lista de ellos?

fácil:

cat /etc/passwd|awk -F: ‘$3 >= 500 { print $1; }’

En efecto, con esto obtenemos todos los usuarios con uid => 500.

El problema es que en el archvo /etc/aliases tu piensas que tienes que ponerle en este formato:

todos: usuario1, usuario2, usuario3, usuario4, usuario5

Te imaginas si fueran 300 usuarios? o más? Cómo hacer para mantener actualizada esta lista? Ok, con el primer comando de este post puedes obtener una lista, pero y cómo le insertas la coma? Y si luego un usuario desaparece cómo le eliminas de /etc/aliases? O si se pone uno nuevo o si se cambia?

Bueno, tranquilo, hay una forma, mira, yo en /etc/aliases pondré esto:

todos:         :include:/etc/aliases.todos

include, lo que hace es agregar los usuarios (uno por línea) que estén en el archivo que he definido (/etc/aliases.todos).

fíjate que hay varios signos de :, hay 3 signos de :, uno después de la primera palabra, otro separado por uno o varios TABS e inmediatamente delante de include y otro al final de include e inmediatamente antes de /etc/aliases.todos.

Dentro de /etc/aliases.todos qué hago? Pues simplemente le viertes la salida del primer comando de este post:

cat /etc/passwd|awk -F: ‘$3 >= 500 { print $1; }’ > /etc/aliases.todos

sendmail -bi

y ya, en efecto con esto habremos logrado tener una lista de todos los usuarios.

Y si agrego, modifico, elimino usuarios? Pues vuelves a ejecutar estos dos últimos comandos.. si quieres le pones en un cron cada cierto tiempo, varias horas y ya.

Los dos primeros videos del curso virtual de IPv6

fíjate, estos son sólo los dos primeros de toda la serie, lógicamente son introductorios, los temas se van volviendo más y más interesantes pero no hay uno sólo que sea aburrido!

Como te comenté, tenemos disponible un curso virtual de implementación de IPv6  en servidores CentOS Linux, es totalmente remoto, es decir, puedes estudiarlo via web a la hora que te parezca más conveniente sin tener que acudir a un aula a determinadas horas en determinados días.

Este curso virtual lo hablamos aquí hace unos días y se me había olvidado publicar el par de videos iniciales de él:

El primero es una introducción simplificadísima a IPv6:

http://youtu.be/0aDuJ6Bg2L0

el segundo es el cómo instalar un fácil sistema de tunel que te permita conectarte por IPv6 desde tu máquina para que así vayas viendo cómo se siente tener IPv6:

http://youtu.be/mhsE-B7ay5E

Lógicamente lo ideal es que el proveedor de internet te brinde ya IPv6 nativamente, pero mientras no lo hagan, puedes usar este sistema de tunel para ir avanzando en el conocimiento.

Los otros módulos, ahi te pido que leas la primera URL que te dí con info sobre el curso.

Curso virtual de IPv6 en 12 simples videos

Bueno por fin le acabé, es un simple pero instructivo curso de implementación de IPv6 en servidores Linux con CentOS.

Digo simple porque como muchos de ustedes conocen no me gustan las cosas complejas: yo creo que para que implementemos algo, las cosas deben realizarse de forma muy simple, sino, no vale. Y así es como siempre enseño a utilizar Linux, de forma simple, sencilla y fácil de entender.. y es así que he formado muchos usuarios para ser buenos administradores de Linux.

Este curso va más allá, sí, es que lo preparamos en forma de videos, 12 videos que explican cada uno 12 diversos temas de implementación de IPv6 en nuestros CentOS Linux. De forma tal que no tienes que leer largos documentos, ni tampoco sentarte en el aula por interminables horas. Lo puedes cursar desde tu casa o trabajo.

Además, para hacer la cosa más fácil: El curso lo dictamos desde servidores que les ponemos a su disposición en nuestra red. De forma tal que no tendrás justificaciones sobre si puedes o no instalar linux para el curso.. nada de eso! El Linux ya está instalado en nuestros servidores, lo que te falta es entrar al server que te asignamos y configurar poco a poco los contenidos que te vamos dictando. Así de simple.

Del curso, sus objetivos, inscripción al curso, precios y demás dudas, puedes verle en esta URL:

http://www.ecualinux.com/cursos/para-administradores/curso-ipv6