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.
18. June 2011 at 3:11 pm :
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