Instalación de Gentoo Linux para un servidor
En cantidad de programas y tiempo requerido, instalar un servidor requiere menos de los dos. Pero siempre, gracias a las ventajas de Gentoo Linux, cuidaremos que su desempeño y seguridad sean de lo mejor.
15 June 2014
Cuando hacemos una instalación de Gentoo Linux en una PC o laptop buscamos tener entorno gráfico y muchos programas; como reproductores multimedia, navegadores de internet, herramientas de desarrollo y hasta una suite de oficina. En cambio, para un servidor, nos enfocamos en instalar el sistema operativo base y los servicios que vaya otorgar a la red local o al internet.
En cantidad de programas y tiempo requerido, instalar un servidor requiere menos de los dos. Pero siempre, gracias a las ventajas de Gentoo Linux, cuidaremos que su desempeño y seguridad sean de lo mejor.
En el siguiente apunte listo los pasos que tomé para instalar un servidor web con Apache/PHP/MySQL/PostgreSQL. No hago una explicación detallada de cada paso; simplemente enlisto los comandos para instalar.
ADVERTENCIA: El contenido de esta publicación es sólo un respaldo que puede servirle como base. Algunos comandos pueden destruir la información de su disco duro; por lo que el autor NO tiene ninguna responsabilidad en lo que resulte. Lea el manual oficial Gentoo Handbook AMD64.
Construir el Sistema
La gran flexibilidad de Gentoo Linux nos permite hacer esta "construcción" en un subdirectorio o una partición del disco duro. En contraste, otros sistemas operativos requieren un disco duro dedicado y reiniciar la computadora para ejecutar su asistente de instalación. Dicho de otra manera; puede estar construyendo un nuevo Gentoo Linux en una terminal mientras sigue trabajando/entreteniéndose en otra ventana.
Ya teniendo particionado el disco duro y destinando /dev/sda5 a la raíz del S.O. Formatee...
# mkfs.ext4 -L Servidor201405 /dev/sda5
# mkdir /mnt/gentoo
# mount /dev/sda5 /mnt/gentoo
Previamente he bajado el stage y puesto en /mnt/tmp. Desempaque...
# cd /mnt/gentoo
# tar xvjpf /mnt/tmp/stage3-amd64-20140515.tar.bz2
Monte las particiones lógicas...
# mount -t proc none /mnt/gentoo/proc
# mount --rbind /sys /mnt/gentoo/sys
# mount --rbind /dev /mnt/gentoo/dev
Tengo una partición dedicada para /usr/portage en /dev/sda6, así que sólo la monto en /mnt/gentoo/usr/portage
# mkdir /mnt/gentoo/usr/portage
# mount /dev/sda6 /mnt/gentoo/usr/portage
Verifique lo montado...
# mount | grep /mnt/gentoo
Copie resolv.conf
# cp /etc/resolv.conf /mnt/gentoo/etc/
Edite make.conf
# nano -w /mnt/gentoo/etc/portage/make.conf
Con este contenido...
#
# /etc/portage/make.conf
#
# Servidor Apache/PHP/PostgreSQL Gentoo Linux
#
#
# Servidor 64 bits GENERICO
#
CFLAGS="-O2 -pipe"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
# Cantidad de compilaciones simultaneas
MAKEOPTS="-j2"
# Español como lengua
LINGUAS="es es_MX es_AR es_ES"
# Aceptar todas las licencias
ACCEPT_LICENSE="*"
#
# USE flags
#
USE="mmx sse sse2"
# Redes
USE="${USE} apache2 fuse vhosts"
# Base de datos
USE="${USE} mysql postgres sqlite"
# Desarrollo
USE="${USE} git php python ruby"
# Graficos
USE="${USE} corefonts fontconfig freetype gd gnuplot graphviz imagemagick jpeg png tiff truetype"
# Varios
USE="${USE} latex"
#
# Portage, esto es para usar otra computadora en la red como proveedor del portage y los paquetes.
# Cambie servidor.dominio.lan por el nombre o dirección IP
#
SERVIDOR_PORTAGE=servidor.dominio.lan
PORTDIR="/usr/portage"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"
SYNC=rsync://${SERVIDOR_PORTAGE}/gentoo-portage
FETCHCOMMAND="rsync rsync://${SERVIDOR_PORTAGE}/gentoo-distfiles/\${FILE} ${DISTDIR}"
Configure locale.gen
# nano /mnt/gentoo/etc/locale.gen
Con este contenido...
en_US ISO-8859-1
en_US.UTF-8 UTF-8
es_ES ISO-8859-1
es_ES.UTF-8 UTF-8
es_ES@euro ISO-8859-15
es_MX ISO-8859-1
es_MX.UTF-8 UTF-8
Configure 02locales
# nano /mnt/gentoo/etc/env.d/02locales
Con este contenido...
#
# 02locales
#
LANG="es_MX.UTF-8"
LANGUAGE="es_MX.UTF-8"
LC_ALL="es_MX.UTF-8"
Haga el chroot:
# chroot /mnt/gentoo /bin/bash
# env-update
# source /etc/profile
# export PS1="(nuevo) $PS1"
Ejecute...
# locale-gen
Salga del chroot y vuelva a entrar con los comandos anteriores; así nos aseguramos que se carguen las configuraciones.
Para poder instalar paquetes que están marcados como inestables, hago uso de la reciente característica de Gentoo para desenmascarar paquetes con archivos individuales:
# mkdir /etc/portage/package.keywords
# echo "dev-ruby/kramdown" > /etc/portage/package.keywords/dev-ruby_kramdown
# echo "sys-fs/ecryptfs-utils" > /etc/portage/package.keywords/sys-fs_ecryptfs-utils
También para los USE flags se puede hacer lo mismo:
# mkdir /etc/portage/package.use
# echo "app-text/texlive extra pstricks" > /etc/portage/package.use/app-text_texlive
# echo "net-dns/bind -berkdb -mysql -postgres" > /etc/portage/package.use/net-dns_bind
Como esta instalación es para un servidor NO cambio el profile, dejo el básico de AMD64:
# eselect profile show
Current /etc/portage/make.profile symlink:
default/linux/amd64/13.0
Edite...
# nano -w /etc/conf.d/keymaps
# nano -w /etc/hosts
# nano -w /etc/conf.d/hostname
Luego defina la zona horaria de su región...
# cp /usr/share/zoneinfo/Mexico/General /etc/localtime
Instale el kernel. Es largo de explicar, así que sólo diré que debe habilitar los controladores Virtio que son los necesarios para KVM:
# emerge gentoo-sources
# cd /usr/src/linux
# make menuconfig
# make
# make modules_install
Instale unas herramientas básicas...
# emerge gentoolkit reiserfsprogs dhcpcd dosfstools app-misc/screen iptables pwgen pciutils
Instale estos servicios básicos...
# emerge acpid ntp syslog-ng vixie-cron logrotate
# rc-update add acpid default
# rc-update add syslog-ng default
# rc-update add vixie-cron default
# rc-update add ntpd default
Cambie la contraseña de root:
# passwd
Instale la base de datos PostgreSQL:
# emerge postgresql-server
Instale Ruby y la gema RedCloth que uso para el CMS de Movimiento Libre:
# emerge ruby redcloth
Instale MySQL:
# emerge mysql
Instale Apache2:
# emerge apache
Instale PHP:
# emerge php
Instale LaTeX y la gema de Ruby Kramdown que también uso en el CMS:
# emerge texlive kramdown
Instale herramientas gráficas:
# emerge graphviz imagemagick sci-visualization/gnuplot
Instale Git:
# emerge git
Instale software para cifrado de discos:
# emerge ecryptfs-utils cryptsetup
Al término de esta construcción, nos salimos del chroot y desmontamos las particiones auxiliares, más NO la raíz.
# exit
# umount -l /mnt/gentoo/sys
# umount -l /mnt/gentoo/dev
# umount /mnt/gentoo/proc
# umount /mnt/gentoo/usr/portage
Preparar la virtualización KVM
Haciendo una analogía a Frankestein, ya tenemos listo el cerebro ahora vamos a preparar un cuerpo: Usando KVM cree una nueva virtualización con un disco duro virtual de 24,576 MB (o sea, 24 GB) y arranque con el ISO de Gentoo.
Particione a su gusto con:
# fdisk /dev/vda
Formatee la partición que va ser la raíz, en mi ejemplo es la /dev/vda6
# mkfs.ext4 -L Gentoo /dev/vda6
Monte la raíz:
# mount /dev/vda6 /mnt/gentoo
Cambie la contraseña root e inicie el daemon OpenSSH...
# passwd
# /etc/init.d/sshd start
Copiar todo a la virtualización
Estos comandos los ejecuto en mi Gentoo Linux que tengo de base.
En mi caso tengo KVM con un bridge con red 172.16.71.0/24 y he configurado una dirección IP en la virtualización con 172.16.71.11. Copie TODO a una sola partición de destino con un comando como éste:
# cd /mnt/gentoo
# tar -cvf - . | ssh root@172.16.71.11 tar -C /mnt/gentoo/ -xf -
O tener directorios en otras particiones de la virtualización
Se vale omitir uno o más directorios para después montar otra partición en la virtualización. Por ejemplo, para mantener /var en otra partición, primero copiaría TODO menos /var con:
# tar -cvf - --exclude=/var . | ssh root@172.16.71.11 tar -C /mnt/gentoo/ -xf -
Luego, en la virtualización ejecuto estos comandos, en mi ejemplo /var será /dev/vda7
# mkfs.ext4 -L Var /dev/vda7
# mkdir /var
# mount /dev/vda7 /var
Regreso al sistema Gentoo Linux base y mando copia del directorio /var y su contenido
# cd /mnt/gentoo/var
# tar -cvf - . | ssh root@172.16.71.11 tar -C /mnt/gentoo/var/ -xf -
De regreso a la virtualización
Monte...
# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev
# mount -o bind /sys /mnt/gentoo/sys
Formatee las otras particiones...
# mkfs.ext2 -L Boot /dev/vda1
# mkfs.ext4 -L Home /dev/vda2
# mkfs.ext4 -L Portage /dev/vda3
Monte...
# mount /dev/vda1 /mnt/gentoo/boot
# mount /dev/vda3 /mnt/gentoo/usr/portage
# mkswap /dev/vda5
# swapon /dev/vda5
Sincronize el portage, en mi caso tengo un equipo con rsyncd andando...
# cd /mnt/gentoo/usr/portage
# rsync -av rsync://servidorlocal/gentoo-portage/* .
Haga el chroot...
# cp /etc/resolv.conf /mnt/gentoo/etc/
# chroot /mnt/gentoo /bin/bash
# source /etc/profile
# export PS1="(nuevo) $PS1"
Edite fstab
# nano -w /etc/fstab
Esta es una sugerencia de su contenido, va de acuerdo a como haya particionado...
# <fs> <mountpoint> <type> <opts> <dump/pass>
/dev/vda1 /boot ext2 noauto,noatime 1 2
/dev/vda2 /home ext4 defaults 0 1
/dev/vda3 /usr/portage ext4 defaults 0 0
##### EXTENDED #####
/dev/vda5 none swap sw 0 0
/dev/vda6 / ext4 defaults 0 1
/dev/vda7 /var ext4 noatime 0 0
Instale el kernel...
# cd /usr/src/linux
# make install
Instale GRUB:
# emerge -pv grub
# emerge grub
# grub2-install /dev/vda
Configure GRUB:
# cd /etc/default
# nano grub
# cd /etc/grub.d
# nano 40_custom
En 40_custom escriba la ruta correcta al kernel que haya instalado...
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Luego, pida a GRUB que haga la configuración...
# grub2-mkconfig -o /boot/grub/grub.cfg
Programe que el daemon OpenSSH se inicie al encender...
# /etc/init.d/sshd start
# rc-update add sshd default
Ponga la contraseña de root...
# passwd
Desmonte las particiones...
# umount /mnt/gentoo/boot
# umount /mnt/gentoo/usr/portage
# umount /mnt/gentoo/var
# umount -l /mnt/gentoo/sys
# umount -l /mnt/gentoo/dev
# umount /mnt/gentoo/proc
# umount /mnt/gentoo
Apague y pruebe...
# halt
Consola Serial
Usar una consola serial libera al virtualizador de tener simpre andando una interfaz gráfica para el huésped.
Respalde y edite inittab...
# cd /etc
# cp inittab inittab.backup
# nano inittab
Cambie estas líneas...
# SERIAL CONSOLES
s0:12345:respawn:/sbin/agetty -L -f /etc/issue.logo 9600 ttyS0 vt100
s1:12345:respawn:/sbin/agetty -L -f /etc/issue.logo 38400 ttyS1 vt100
Modifique GRUB...
# cd /etc/default/
# nano grub
Haga que estas líneas tengan esto...
# Append parameters to the linux kernel command line
GRUB_CMDLINE_LINUX="console=ttyS1,38400"
# Append parameters to the linux kernel command line for non-recovery entries
#GRUB_CMDLINE_LINUX_DEFAULT=""
# Uncomment to disable graphical terminal (grub-pc only)
GRUB_TERMINAL=console
También cambie configuración del GRUB para la carga del kernel...
# cd ../grub.d
# nano 40_custom
Agregue console=ttyS1,38400 al final de la instrucción...
#
# Gentoo Linux
#
menuentry 'Gentoo Linux 2014-05-26 vda6 kernel 3.12.13' {
linux /vmlinuz-3.12.13-gentoo root=/dev/vda6 resume=/dev/vda5 console=ttyS1,38400
}
Apague la máquina virtual. En la configuración de la virtualización retire el monitor, el ratón, el dispositivo spice si lo hubiera y arranque de nuevo.