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.
Relacionados
Imprimir
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