HowTo: Cómo configurar un servidor de instalación en Fedora 14

Un servidor de instalación es muy útil. Nos ayuda a instalar sin necesidad de discos y madres de esas. Además, es mucho más rápido y podemos pre-configurar, por medio de un kickstart, la instalación.

Ahí te va:


# Hacerse root
su -

#
# Instalaciones
#

# Instalar cosas necesarias (edición 20110906)
yum install -y tftp-server httpd system-config-netboot-cmd

#
# tftp (xinetd)
#

# Habilitar tftp en xinted
cat < < EOF > /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer
# protocol. The tftp protocol is often used to boot diskless
# workstation, download configuration files to network-aware printers,
# and to start the installation process for some operating systems.

service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
per_source = 11
cps = 100 2
flags = IPv4
}
EOF

# Configurar xinetd y tftp para que inicie al momento de bootear
chkconfig xinetd on
chkconfig tftp on

#
# Apache
#

# Habilitar e iniciar apache. Uso restart por si las moscas...
chkconfig httpd on
service httpd restart

# Montar el ISO de Fedora 14
mkdir /mnt/cdrom
mount -o loop /dev/cdrom

# Crear un directorio accesible desde apache y copiar el contenido del ISO a la sección standard según Fedora
mkdir -p /var/www/fedora/releases/14/Fedora/x86_64/os
cp -pruv /mnt/cdrom/{.*,*} /var/www/html/fedora/releases/14/Fedora/x86_64/os

# Desmontar el ISO de Fedora 14
umount /mnt/cdrom

#
# DHCP
#

# Configurar DHCP para ofrecer instalaciones. Agregar las siguientes líneas en /etc/dhcp/dhcpd.conf
allow booting;
allow bootp;

class "pxeclients" {
match if substring(
option vendor-class-identifier, 0, 9
) = "PXEClient";
next-server 192.168.2.128;
filename "linux-install/pxelinux.0";
}

#
# PXE
#

# Agregar Fedora 14 a la lista de OSes soportados. La locación (-L) es relativa al dominio u IP. Puedes usar una IP en lugar de miservidor.midominio.tld.
pxeos -a -i 'Fedora 14 x86_64' -p HTTP -D 0 -s miservidor.midominio.tld -L /fedora/releases/14/Fedora/x86_64/os F14

# Ahora, habilitamos a los clientes de nuestra red a instalarlo. No puse el 4to octeto para dejar a toda mi red clase C accesar las instalaciones.
pxeboot -a -r 512000 -e eth0 -O F14 192.168.69

#
# Checa tus configs
#

# Apache
firefox http://localhost/fedora/releases/14/Fedora/x86_64/os/images/pxeboot

# pxe
pxeos -l
pxeboot -l

# Notas
* En pxeboot es importante usar la -e ethX para restringir el acceso a tu NIC de red (si tienes múltiples NICs en tu server)
* Aguas con el DHCP. Si no configuras a tu cliente (en el BIOS) para que use “Net Boot” o “PXE Boot” o algo así, no jala nada
* Si quieres configurar tu propio kickstart, utiliza system-config-kickstart o algo así… y edita /tftpboot/linux-install/F14/ks.cfg. NO BORRES LAS LÍNEAS QUE YA TIENE SI NO LE SABES!
* Se puede mantener un repo de actualizaciones local para tu red… pero ya me dió weba seguirle al HowTo…

HowTo: Como instalar Zend Framework cualquier distro

Aparte de los paquetes de php-ZendFramework-* en Fedora, podemos instalar ZF desde pear; obviamente, sin instalar los php-ZendFramework-*

El código es el siguiente:

# Te haces root
su -

# descubres el canal
pear channel-discover pear.zfcampus.org

# instalas zf
pear install zfcampus/zf

Te instala ZF más actual que el paquete. Incluye zf tool instalado en /usr/bin y todo funciona, al parecer, de maravilla.

100% recomendado!

HowTo: Cómo pegar en Vim sin hacer un desmadre de indentación

Alguna vez has usado vim y usado autoindent y smartindent? Si; es muy común hacerlo. El único problema es que, cuando pegas cosas, se hace un desmadre!!

Bueno, hay una solución: modo de “paste” de vim.

Para activarlo, solo agrega lo siguiente a tu .vimrc:

set pastetoggle=<f12>

Puedes cambiar al F12 por la F que más te guste.

Así, cuando quieras pegar algo, pones a vim en funcionalidad paste, pegas (no olvides ponerlo en insert mode antes si lo que quieres pegar está en el clipboard de gnome) y listo!

recuerda que tu .vimrc va en ~/ y debe llevar un . antes; es un archivo de configuración y va oculto:

ls -al ~/.vimrc
-rw-r--r--. 1 renich renich 154 Feb 3 16:01 /home/renich/.vimrc

Ok, bueno, ojalá y te sirva de algo. Te paso un link a mi .vimrc por si se lo quieres forkear:
http://downloads.woralelandia.com/src/vim/vimrc

# referencia
http://mr-euro.com/vim-paste-indent-problems/

HowTo: Cómo apager SELinux desde la CLI? (momentaneamente)

Recientemente, me puse a configurar cobbler y, al parecer, no se lleva bien (aún; estamos trabajando) con SELinux.

Para importar una imagen, necesito apagar SELinux, por el momento y no permanentemente. Para hacer ésto:
su -c 'setenforce Permissive'

o

su -c 'setenforce 0'

Estoy totalmente en contra de apagar SELinux permanentemente o por cualquier razón. El software debe irse adaptando a las condiciones de seguridad avanzada.

HowTo: Cómo usar sed para actualizar mis zonas de DNS

Hoy, se me ocurrió que sería buena idea actualizar 120 zonas de dns que tengo.

Quería asegurarme de que mis DNS esclavos tuvieran la última versión de mis zonas. Así que, sed me ayudó:

sed -i s/[[:digit:]]\\{10\\}/2011012000/g /var/named/*.db

Éste código buscó las cadenas de dígitos de 10 caracteres y los substituyó por otra cadena de 10 caracteres.

Problema resuleto.

Una explicación breve:

[[:digit:]] representa los dígitos del 0-9
\{10} le dice que sean 10 instancias de dígitos del 0-9
hay dobles \ porque son necesarias en bash para escapar los \. El código de la expresión regular original sería:

s/[:digit:]\{10\}/2011012000/g

Pero, como bash necesita que escape los \

s/[[:digit:]]\\{10\\}/2011012000/g

La neta, lo de la [[ no lo entiendo… pero así jaló. Habrá que esperar comentarios de los aborígenes wwwnautas.

HowTo: Cómo resetear bacula?

Hay una bronca; resetear bacula! Es una weba. Hay que apagar como mil servicios y borrar unas madres y bla bla bla…

Ahí les va un script, para webones como yo! Ponlo en /usr/local/libexec/bacula y lo corres con su -c ‘/usr/local/libexec/bacula/resetBacula’

#!/bin/bash

# check if it's the authorized user; which is the local user.
if [ $(id -u) != 0 ]; then
echo -e "Córrelo como root! O, también, puedes usar su -c 'resetBacula'"
exit 1
fi

# stop bacula
echo "Stopping bacula..."
service bacula-dir stop
service bacula-fd stop
service bacula-sd stop

# reset DB
echo -e "\nReseting DB..."
/usr/libexec/bacula/drop_mysql_database
/usr/libexec/bacula/create_mysql_database
/usr/libexec/bacula/make_mysql_tables

# remove state and bsr files
echo -e "\nRemoving state and bsr files..."
rm -f /var/spool/bacula/*.{bsr,state}

# remove backup volumes
echo -e "\nRemoving volume files..."
rm -f /var/backup/bacula/*

# restart bacula
echo -e "\nRestarting bacula..."
service bacula-sd start
service bacula-fd start
service bacula-dir start

exit 0

Permisos recomendados:
su -c ‘chmod 1700 /usr/local/libexec/bacula/resetBacula’

GPLv3 all the way, my friends! Úsenlo y háganle lo que se les inche…

HowTo: WHMCS y SELinux

Al parecer, WHMCS necesita usar whois…

Bueno, para que no tengas que apagar SELinux, solo:

su -c 'setsebool -P httpd_can_network_connect on'

Ésto permitirá, a apache, conectarse al puerto 43.

Nota sobre iptables

En Fedora, todas las conexiones iniciadas desde el servidor a cualquier puerto, están permitidas. No hay que agregar ninguna regla.

He visto muchos posts pidiéndote que abras el puerto 43… ésto es ridículo. La gente permite la entrada del puerto y, lo que importa; en este caso, es la salida de puerto; la cual ya está permitida por default.

HowTo: Micro-intro a SELinux

He visto, para mi pesar, muchas soluciones de “chmod 777 / -R” y estupideces por el estilo.

La gran mayoría de éstos vienen de usuarios que no saben ni qué onda; generalmente ubunteros inexpertos y no propensos a leer y a saber cómo están las cosas.

Te pido que no empieces con estas soluciones. En Fedora, seguido, debemos checar si SELinux no está impidiéndonos hacer algo y asignar la etiqueta necesaria para poder hacerlo.

SELinux nos impide hacer cosas cuando las hacemos mal; por ejemplo, poner archivos de samba en /home/samba o una página web en /home/miuser/paginas

Te recuerdo que existe el Filesystem Hierarchy Standard o HFS. Búscalo y entérate de los mejores lugares para poner las cosas.

SELinux en Fedora viene pre-configurado para permitir acceso de los daemonios solo en las carpetas reglamentadas por el FHS; por ejemplo:

Las páginas web van en /var/www
Los respaldos en /var/backup
Las DBs en /var/lib/
Los archivos de usuario en /home
Las librerías en /usr/lib, /usr/lib64, /lib, /usr/local/lib, etc.

Dicho ésto, algunas veces debes re-etiquetar algunas cosas por motivos ajenos a la distribución. Un ejemplo de esto es cuando instalas o desarrollas una aplicación web que necesita escribir en algún directorio o algún archivo. Para esto, existe una etiqueta: httpd_sys_content_rw_t; la cual permite, a apache, que escriba sobre un directorio y/o archivo específico.

Para configurar esto de manera temporal; mientras pruebas, usa:

su -c 'chcon httpd_sys_content_rw_t /var/www/websites/miapp/tmp'

Pero, cuando re-etiquetes, perderás esta etiqueta si no creas la política con semanage:

su -c 'semanage fcontext -a -t httpd_sys_content_rw_t /var/www/websites/miapp/tmp'

Una vez hecho ésto, solo haz un

su -c 'restorecon -R /var/www/websites/miapp/tmp'

para que se re-etiqueten los archivos debajo de ese directorio.

Para remover tu política, solo:

su -c 'semanage fcontext -d /var/www/websites/miapp/tmp'

Y no olvides re-etiquetar.

Si aprendes algo del FHS, no tendrás tantos problemas con SELinux. Y, por cierto, NO LO APAGUES! APRÉNDELO!

Debes leer mucho más al respecto de esto si lo quieres usar. Recuerda que SELinux es otra capa de protección/regulación. Debes tomar en cuenta el sistema de permisos de GNU & Linux y, además, los permisos avanzados.

# Páginas de referencia

http://www.pathname.com/fhs/

http://docs.fedoraproject.org/en-US/Fedora/13/html/Security-Enhanced_Linux

http://en.wikipedia.org/wiki/Filesystem_permissions

http://en.wikipedia.org/wiki/Setuid

http://en.wikipedia.org/wiki/Sticky_bit

http://en.wikipedia.org/wiki/Access_control_list

http://acl.bestbits.at/

http://en.wikipedia.org/wiki/Extended_file_attributes

HowTo: Cómo reestablecer permisos en GNU & Linux

Eres nuevo y/o estás jugando con los permisos y los ownerships y te has metido en un mega-problemón porque ya no sabes qué hiciste…

No hay toz, Saint Bash y Saint RPM nos vinieron a ayudar.

Es muy fácil reestablecer los permisos de un paquete y su dueño; solo:

su -c 'rpm --setperms --setugids '

Por ejemplo, digamos que quieres reestablecer los permisos de phpMyAdmin:

su -c 'rpm --setperms --setugids phpMyAdmin'

Pero… y… si son un chingo de paquetes? Muy fácil: (actualmente, me costó un buen rato!)

su -c 'rpm --setperms --setugids $( rpm -qa --qf "%{NAME} " *zarafa* )'