systemadmin.es > Instalaciones > Instalación de servidor LAMP con CentOS 6

Instalación de servidor LAMP con CentOS 6

Con CentOS 6 al usar upstart en lugar del tradicional init compatible con System V ya no tiene mucho sentido seguir usando daemontools ya que podemos usar directamente upstart para la gestión del arranque de los daemons.

A continuación veremos como realizar una instalación básica de un sistema CentOS 6 con un daemon de correo con un relay.

Primero de todo instalaremos unas herramientas de compilación (GCC, Make…) o utilidades varias (wget, mailx…)y haremos limpieza de algunos paquetes que sobran en el caso de una instalación a partir de un CentOS-minimal:

mkdir -p /usr/local/src
yum install gcc gcc-c++ make wget curl libtermcap-devel svn groff mailx ntp openssh-clients -y
rpm -e xinetd
rpm -e at
rpm -e abrt abrt-cli abrt-addon-ccpp abrt-plugin-sosreport abrt-addon-python abrt-plugin-logger abrt-plugin-rhtsupport abrt-addon-kerneloops

A continuación instalamos EPEL y algunas utilidades básicas del sistema:

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
yum install pwgen -y
yum clean all
yum update -y
yum install man -y
yum install ntp -y
yum install screen -y
yum install sysstat -y
yum install strace -y
yum install rpm-build -y
rpm -e acpid
rpm -e dbus dbus-devel hal-devel libnotify-devel hal-devel gnome-vfs2-devel libgnomeui-devel GConf2-devel hal udisks ConsoleKit pm-utils polkit libfprint gnome-disk-utility-libs hal-info libgnome-devel evolution-data-server-devel libgweather-devel libgnome-devel gnome-desktop-devel libbonoboui-devel gvfs fprintd polkit  GConf2 polkit-devel notification-daemon gnome-keyring libgsf polkit-docs libnotify gnome-keyring-devel  gnome-desktop gnome-python2-gnome gnome-python2-gnomevfs  libgsf-devel librsvg2 libgsf-devel libgnomeui libgnome librsvg2-devel hal-libs ConsoleKit-libs gvfs-devel libcanberra-gtk2 gnome-vfs2 libsoup libbonoboui libsoup-devel libgweather  evolution-data-server fprintd-pam libcanberra-devel dbus-glib-devel avahi avahi-glib
sed 's/^LANG=.*$/LANG="en_US.UTF-8"/' -i /etc/sysconfig/i18n

A continuación realizamos algunas configuraciones básicas, como el auto-update de paquetes del sistema y la sincronización por ntp:

cat > /var/spool/cron/root <<EOF
MAILTO="jordi@systemadmin.es"

#sistema
0 6 * * 2 /usr/bin/yum clean all 2>&1 >/dev/null
0 5 * * 3 /usr/bin/yum update glibc --disableexcludes=all -y
0 6 * * 3 /usr/bin/yum --exclude=kernel* update -y
17 * * * * /usr/sbin/ntpdate time1.google.com 2>&1 >/dev/null

EOF
echo "ClientAliveInterval 240" >> /etc/ssh/sshd_config
/etc/init.d/sshd restart
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
echo "kernel.panic=5" >> /etc/sysctl.conf
cat >> /etc/sysctl.conf <<EOF
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.netdev_max_backlog = 10000
vm.swappiness = 30
vm.dirty_ratio = 50
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
EOF
sysctl -p
sed -i 's/^#compress$/compress/g' /etc/logrotate.conf
cat > /etc/profile.d/systemadmin.sh <<EOF

export HISTFILESIZE=500000000
export HISTSIZE=500000000
export HISTTIMEFORMAT='%d%m%y %H%M%S -> '
export HISTCONTROL='ignoredups'
EOF
cp /etc/fstab /etc/.fstab.bak
for i in $(cat /etc/fstab | grep ext[234] | grep -v noatime | awk '{ print $2 }'); do sed -i "s@$i\([ \t]\)*\(ext[234]\)\([ \t]*\)defaults\([ \t]*\)@$i\1\2\3defaults,noatime\4@g" /etc/fstab; done
cat /etc/fstab | awk '{ printf "%-30s\t\t\t%-15s %-10s %-40s %s %s\n",$1,$2,$3,$4,$5,$6 }' > /etc/.fstab.tmp
mv -f /etc/.fstab.tmp /etc/fstab

El crond es un daemon muy útil que no podemos permitir que este caído, por lo que lo arrancaremos con upstart:

pkill crond
chkconfig --del crond
cat <<EOF > /etc/init/crond.conf
start on runlevel 3

respawn

expect fork

exec /usr/sbin/crond -p
EOF
initctl start crond

A continuación haremos limpieza de consolas, dejando únicamente dos tenemos suficiente:

sed -i 's@^\(env ACTIVE_CONSOLES=/dev/tty\[1-\)6\]@\12\]@' /etc/init/start-ttys.conf
sed -i 's@^\(ACTIVE_CONSOLES=/dev/tty\[1-\)6\]@\12\]@' /etc/sysconfig/init 
initctl reload-configuration
for i in 3 4 5 6;
do
initctl stop tty TTY=/dev/tty$i;
done

A continuación configuraremos qmail para que haga relay a otro servidor que indicaremos mediante la variable de entorno IPRELAY (durante la instalación)L

export IPRELAY="1.2.3.4"

A continuación deberemos eliminar postfix:

/etc/init.d/postfix stop
rpm -e postfix --nodeps
userdel postfix

Procederemos a la instalación de qmail-send:

cd /usr/local/src
wget http://www.qmail.org/netqmail-1.06.tar.gz
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
for depe in gcc gcc-c++ make wget curl libtermcap-devel;
do
        yum install $depe -y;
done
tar xzf netqmail-1.06.tar.gz
tar xzf ucspi-tcp-0.88.tar.gz
mkdir /var/qmail
cd /usr/local/src/netqmail-1.06
export TMP=$(mktemp /tmp/lol.XXXXXXXXXXXXXXXXXXXXXXXXXXXXX)
echo '#!/bin/bash' >$TMP
cat /usr/local/src/netqmail-1.06/INSTALL.ids | grep -i Linux -A 11 | grep "#" | sed 's/$/;/ig' | sed 's/#//ig' >>$TMP
bash $TMP
rm -f $TMP
sed -i 's#::/var/qmail/alias:/bin/bash#::/var/qmail/alias:/bin/true#' /etc/passwd
sed -i 's#::/var/qmail:/bin/bash#::/var/qmail:/bin/true#' /etc/passwd
unset TMP
make setup check
./config-fast $(hostname --long)
cd /usr/local/src/ucspi-tcp-0.88
patch < /usr/local/src/netqmail-1.06/other-patches/ucspi-tcp-0.88.errno.patch
make
make setup check
cat > /var/qmail/rc <<EOF
#!/bin/sh

# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver messages by default

exec env - PATH="/var/qmail/bin:\$PATH" \\
qmail-start "\$(cat /var/qmail/control/defaultdelivery)"
EOF
chmod 755 /var/qmail/rc
mkdir /var/log/qmail

A continuación configuraremos el qmail-send para que arranque con upstart:

cat <<EOF > /etc/init/qmail-send.conf
author      "systemadmin.es"
start on runlevel 3

respawn

exec /var/qmail/rc
EOF
mkdir -p /var/log/qmail
chown qmaill /var/log/qmail

Y a continuación substituiremos el binario de sendmail y arrancamos qmail-send:

echo '127.:allow,RELAYCLIENT=""' >/etc/tcp.smtp
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp.cdb
mv /usr/lib/sendmail /usr/lib/sendmail.old 2>/dev/null
mv /usr/sbin/sendmail /usr/sbin/sendmail.old 2>/dev/null
chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old 2>/dev/null
ln -s /var/qmail/bin/sendmail /usr/lib
ln -s /var/qmail/bin/sendmail /usr/sbin
chmod 755 /var/qmail/bin/sendmail
echo ":${IPRELAY}" >/var/qmail/control/smtproutes
initctl start qmail-send

Finalmente crearemos un paquete ficticio que satisfaga la dependencia smtpdaemon y sendmail para que las actualizaciones de paquetes no instalen como dependencia otro daemon de correo:

cd /usr/local/src
cat <<EOF > fuck-exim.spec
Name: fuck-exim
Version: 1.0
Release: 1
Summary: Fuck exim
License: GPL
Group: System Environment/Daemons
BuildArch: noarch
Provides: smtpdaemon, /usr/sbin/sendmail
URL: http://systemadmin.es
Packager: William Adama <wadama@systemadmin.es>

%description

Fake RPM to prevent yum to install exim

%prep

%build

%install

%files

%changelog
EOF
rpmbuild -bb fuck-exim.spec
rpm -Uvh ~/rpmbuild/RPMS/noarch/fuck-exim-1.0-1.noarch.rpm
cd

9 comments to “Instalación de servidor LAMP con CentOS 6”

  1. hola jordi,

    hi ha algun motiu en especial per forçar sempre la localització a en_US.UTF-8?

    és mania personal o t’has trobat amb algun problema de caràcters amb algun paquet?

  2. Se puede decir que es simple manía, pero sobretodo por los mensajes raros que salen en las traducciones, por ejemplo la cafetera Nespresso que necesita manutención

  3. Yo tambien lo dejo siempre con el en_US.UTF-8, pero hago un canvio en que las fechas y horas esten en catalan:
    LANG=”en_US.UTF-8″
    LC_CTYPE=”ca_ES.UTF-8″
    LC_TIME=”ca_ES.UTF-8″
    De esta forma, los mensajes de error salen correctamente y las fechas con la codificación correcta.

  4. Esta es buena:

    $ date
    Wed Oct 26 14:19:09 CEST 2011
    $ LC_CTYPE="ca_ES.UTF-8" LC_TIME="ca_ES.UTF-8" date
    dc oct 26 14:19:05 CEST 2011
    

    Nunca me he encontrado ningún caso que me resultara útil tener la hora en catalán, lo haces por algún motivo en concreto?

  5. Basicamente para scripts donde genero información y se envia a usuarios finales. No les gusta que la fecha salga en inglés.

  6. Por curiosidad,

    Los paquetes los instalas de uno en uno por alguna razón?

  7. No existe ningún motivo, se podría hacer en una sola linea perfectamente.

    saludos!

  8. Hola Jordi.
    ya veo que has dejado de lado nuestro querido daemontools.
    a mi la verdad es que no me gustaba nada. el svc -u ….
    pero bueno con la configuracion que haces rearranca automaticamente me imagino.

    Saludos.
    A todo esto.
    Algun dia lo pondras en espaciodeco.??

  9. Hola,
    Sí, tanto daemontools como upstart sirve para lo mismo, para rearrancar automáticamente si se cae.

    En espaciodeco ya te lo pues así:

    [root@fengshui ~]# initctl list | grep start
    tty (/dev/tty2) start/running, process 11131
    tty (/dev/tty1) start/running, process 11126
    mysqld start/running, process 12124
    bacula-fd start/running, process 1726
    crond start/running, process 1745
    qmail-smtpd start/running, process 1732
    start-ttys stop/waiting
    apache22 start/running, process 1735
    qmail-send start/running, process 1739
    

    En lugar de svc -u/-d/-t con esto es initctl start/stop/restart

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>