systemadmin.es > LAMP y web > Instalación de servidor LAMP con CentOS5 (I)

Instalación de servidor LAMP con CentOS5 (I)

Vamos a ver durante los próximos días como instalar un servidor LAMP completo partiendo de una CentOS 5 recien instalada. Vamos a realizar la instalación con las daemontools intentando automatizar todos los pasos (con un paste de lo siguiente debe estar instalado el servidor)

Vamos a empezar limpiando y actualizando el sistema antes de empezar. Primero de todo, en el caso que sea un sistema de 64 bits hacemos lo siguiente:

echo "exclude=*.i386 *.i586 *.i686" >> /etc/yum.conf
for i in $(rpm -qa | grep -v glibc); do rpm --nodeps -e $i.{i386,i586,i686}; done
for depe in gcc gcc-c++ make wget curl libtermcap-devel;
do
        yum install $depe -y;
done

Seguimos eliminando paquetes que no se usan normalmente, o simplemente que consumen memoria sin ser realmente útiles para maquinas en producción:

rpm -e hal NetworkManager pm-utils kudzu NetworkManager-glib system-config-network-tui apmd firstboot-tui
rpm -e gpm vim-enhanced gpm-devel
rpm -e at redhat-lsb
rpm -e avahi avahi-compat-libdns_sd cups avahi-glib gnome-vfs2 libgnome libbonoboui gnome-mount libgnomeui xulrunner gnome-python2-gnomevfs xulrunner-devel  gnome-python2-bonobo gnome-python2 gnome-python2-gconf dogtail
rpm -e pcsc-lite ccid ifd-egate coolkey coolkey-devel
rpm -e nfs-utils-lib nfs-utils portmap autofs ypbind yp-tools
rpm -e dbus-glib dbus-python dbus dbus-libs notification-daemon libnotify bluez-gnome yum-updatesd bluez-utils oddjob oddjob-libs wpa_supplicant dbus-devel hal NetworkManager NetworkManager-glib pm-utils kudzu system-config-network-tui firstboot-tui
rpm -e audit amtu
rpm -e acpid
rpm -e policycoreutils selinux-policy setools selinux-policy-targeted  xorg-x11-xfs chkfontpath xorg-x11-fonts-base xorg-x11-server-Xvfb

Y seguimos con la instalación de base:

rpm -Uvh http://download.fedora.redhat.com/pub/epel/$(cat /etc/redhat-release  | head -n1 | awk '{ print $3 }' | cut -f 1 -d '.')/$(uname -i)/epel-release-$(cat /etc/redhat-release  | head -n1 | awk '{ print $3 }' | sed 's/\./-/g').noarch.rpm
yum install pwgen -y
yum clean all
yum update -y
yum install ntp -y
yum install screen -y
yum install sysstat -y
yum install strace -y
yum install rpm-build -y
sed 's/^LANG=.*$/LANG="en_US.UTF-8"/' -i /etc/sysconfig/i18n
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 hora.rediris.es 2>&1 >/dev/null

EOF
sed -i 's#[23456]:2345:respawn:/sbin/mingetty tty[23456]##; s#x:5:respawn:/etc/X11/prefdm -nodaemon##' /etc/inittab
echo "ClientAliveInterval 240" >> /etc/ssh/sshd_config
/etc/init.d/sshd restart
kill -1 1
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
chkconfig --del mcstrans
pkill dbus-daemon
echo "blacklist ipv6" >> /etc/modprobe.d/blacklist
echo "options ipv6 disable=1" >> /etc/modprobe.conf
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
vm.pagecache = 90
EOF
sysctl -p
cp /etc/fstab /etc/.fstab.bak
for i in $(cat /etc/fstab | grep ext3 | grep -v noatime | awk '{ print $2 }'); do sed -i "s@$i\([ \t]\)*ext3\([ \t]*\)defaults\([ \t]*\)@$i\1ext3\2defaults,noatime\3@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
sed -i 's/^#compress$/compress/g' /etc/logrotate.conf
cat >> /etc/profile <<EOF

export HISTFILESIZE=500000000
export HISTSIZE=500000000
export HISTTIMEFORMAT='%d%m%y %H%M%S -> '
export HISTCONTROL='ignoredups'
EOF

Dejamos parado el cron para luego usarlo con supervise:

/etc/init.d/crond stop
chkconfig --del crond

A continuación deberían haber solo los siguientes procesos:

# ps axf
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 init [3]
    2 ?        S<     0:00 [migration/0]
    3 ?        SN     0:00 [ksoftirqd/0]
    4 ?        S<     0:00 [watchdog/0]
    5 ?        S<     0:00 [migration/1]
    6 ?        SN     0:00 [ksoftirqd/1]
    7 ?        S<     0:00 [watchdog/1]
    8 ?        S<     0:00 [events/0]
    9 ?        S<     0:00 [events/1]
   10 ?        S<     0:00 [khelper]
   11 ?        S<     0:00 [kthread]
   15 ?        S<     0:00  \_ [kblockd/0]
   16 ?        S<     0:00  \_ [kblockd/1]
   17 ?        S<     0:00  \_ [kacpid]
  112 ?        S<     0:00  \_ [cqueue/0]
  113 ?        S<     0:00  \_ [cqueue/1]
  116 ?        S<     0:00  \_ [khubd]
  118 ?        S<     0:00  \_ [kseriod]
  178 ?        S      0:00  \_ [pdflush]
  179 ?        S      0:00  \_ [pdflush]
  180 ?        S<     0:00  \_ [kswapd0]
  181 ?        S<     0:00  \_ [aio/0]
  182 ?        S<     0:00  \_ [aio/1]
  336 ?        S<     0:00  \_ [kpsmoused]
  368 ?        S<     0:00  \_ [scsi_eh_0]
  372 ?        S<     0:00  \_ [kstriped]
  385 ?        S<     0:00  \_ [ksnapd]
  400 ?        S<     0:00  \_ [kjournald]
  427 ?        S<     0:00  \_ [kauditd]
 1285 ?        S<     0:00  \_ [kmpathd/0]
 1286 ?        S<     0:00  \_ [kmpathd/1]
 1287 ?        S<     0:00  \_ [kmpath_handlerd]
 1310 ?        S<     0:00  \_ [kjournald]
  461 ?        S<s    0:00 /sbin/udevd -d
 1774 ?        Ss     0:00 syslogd -m 0
 1777 ?        Ss     0:00 klogd -x
 1793 ?        Ss     0:00 irqbalance
 1860 ?        Ss     0:00 /usr/sbin/sshd
 1898 tty1     Ss+    0:00 /sbin/mingetty tty1

En caso contrario deberemos eliminar los paquetes que sobran. Vamos a continuar con la instalación de un relay de correo para la entrega de correos generados por el sistema.

relay de correo con supervise

Tal como vimos anteriormente, para instalar un relay de correo, primero de todo definimos la IP a la que vamos a entregar el correo, por ejemplo:

export IPRELAY="1.2.3.4"

A continuación eliminamos sendmail:

/etc/init.d/sendmail stop
rpm -e sendmail --nodeps

Y continuamos instalando las daemontools:

mkdir -p /usr/local/src
cd /usr/local/src
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
tar xzf daemontools-0.76.tar.gz
sed -i 's/extern int errno;/#include <errno.h>/' admin/daemontools-0.76/src/error.h
cd admin/daemontools-0.76/
./package/install

Finalmente vamos a instalar y levantar qmail como relay únicamente con qmail-send, prescindiendo del resto de daemons que no vamos a usar.

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/passw
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
mkdir -p /var/qmail/supervise/qmail-send/log
cat > /var/qmail/supervise/qmail-send/run <<EOF
#!/bin/sh
exec /var/qmail/rc
EOF
cat > /var/qmail/supervise/qmail-send/log/run <<EOF
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
EOF
chmod +x /var/qmail/supervise/qmail-send/run /var/qmail/supervise/qmail-send/log/run
mkdir -p /var/log/qmail
chown qmaill /var/log/qmail
ln -s /var/qmail/supervise/qmail-send /service/
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
echo ":${IPRELAY}" >/var/qmail/control/smtproutes
mkdir -p /usr/supervise/crond
cat > /usr/supervise/crond/run <<EOF
#!/bin/bash
exec /usr/sbin/crond -n -p
EOF
chmod +x /usr/supervise/crond/run
ln -s /usr/supervise/crond/ /service/
cd

Para evitar que yum, en las actualizaciones, instale exim usamos el siguiente paquete RPM falso:

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 /usr/src/redhat/RPMS/noarch/fuck-exim-1.0-1.noarch.rpm
cd

Hoy hemos instalado el sistema base: la L de LAMP. Próximamente seguiremos con la instalación de MySQL, ya que lo necesitamos tener instalado antes de instalar PHP.

Si necesitamos que el qmail-smtpd escuche a localhost, simplemente deberemos añadir el daemon.

One comment to “Instalación de servidor LAMP con CentOS5 (I)”

  1. me sirvio muchisimo este tutorial y el de instalacion de centos ..
    lo que si el mirror ya no esta vigente, estaria bueno si lo podrias arreglar para gente que recien empieza con centos

    saludos

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>