¿Cómo puedo instalar Apache con una versión específica?

26

Debido a la actualización de Ubuntu, cometí el error de actualizar Apache 2.2 a 2.4: muchas cosas salieron mal.

No tengo idea de cómo especificar la versión después apt-get remove apache2. apt-get install apache2siempre instala 2.4.

¿Cómo puedo hacerlo?

Mitril
fuente

Respuestas:

22

Debes hacer lo siguiente:

apt-cache showpkg <pachagename>

El comando anterior mostrará la lista de versiones disponibles para este paquete. Luego seleccione la versión necesaria y haga lo siguiente.

apt-get install <packagename>=<complete version name>

Ejemplo:

apt-cache showpkg apache2
apt-get install apache2=2.2.14-5ubuntu8.7
MohyedeenN
fuente
2
La única versión que se muestra para mí es 2.4 en Ubuntu 16. Este es un gran problema porque 2.4 tiene problemas conocidos que han roto por completo mi sitio.
Felwithe
2
No se encontró la versión 2.2.14-5ubuntu8.7 para apache2
Braian Mellor
Gracias, esto funcionó mejor que tratar de tomar la ruta PPA.
M Thomas
5

Cómo instalar Apache 2.2 en una distribución de Ubuntu que no lo tiene en los repositorios.

Requisitos

Necesitas tener el paquete build-essentials instalado para hacer esto.

~# sudo apt-get install build-essential

Para darle a Apache la capacidad de comprimir la salida a los navegadores que lo admiten, debe instalar zlib. Descargue la versión actual de zlip Hompage (zlib-1.2.11.tar.gz en el momento de la escritura), extráigala, navegue a la carpeta extraída, compile e instale.

wget http://www.zlib.net/zlib-1.2.11.tar.gz
tar -xvf zlib-1.2.11.tar.gz
cd zlib-1.2.11/
./configure --prefix=/usr/local
make
sudo make install

Instalar Apache 2.2

Descargue la versión actual de la página de descarga de Apache (httpd-2.2.32.tar.gz al momento de la escritura), extráigala, navegue a la carpeta extraída, compile e instale.

wget http://www-eu.apache.org/dist/httpd/httpd-2.2.32.tar.gz
tar -xvf httpd-2.2.32.tar.gz
cd httpd-2.2.32/
./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --enable-deflate --enable-proxy --enable-proxy-balancer --enable-proxy-http
make
sudo make install

Inicie Apache:

sudo /usr/local/apache2/bin/apachectl start

Comprueba si todo está bien

Navegue a http: // localhost en su navegador, donde debería ver un mensaje que dice "¡Funciona!".

Alternativamente, puede hacerlo a través de la terminal:

wget -qO- http://localhost | grep "It works!"

Lo que debería generar algo como esto en la terminal:

<html><body><h1>It works!</h1></body></html>

Crear "servicio" para Apache2

sudo cp /usr/local/apache2/bin/apachectl /etc/init.d/apache22
sudo chmod +x /etc/init.d/apache22

Sugerencia: puede llamar a apachectl con el servicio sudo apache22 ahora.

Hacer que Apache comience en el momento del arranque

sudo sed -i '2i #\n### BEGIN INIT INFO\n# Provides:             apache2\n# Required-Start:       $remote_fs\n# Required-Stop:        $remote_fs\n# Default-Start:        2 3 4 5\n# Default-Stop:         0 1 6\n# Description:          apache2\n# Short-Description:    The Apache webserver\n### END INIT INFO' /etc/init.d/apache22
sudo /usr/sbin/update-rc.d apache22 defaults

Apache seguro

sudo service apache22 stop
sudo adduser --system apache
sed -i -e 's/User daemon/User apache/g' /usr/local/apache2/conf/httpd.conf
sed -i -e 's/Group daemon/Group nogroup/g' /usr/local/apache2/conf/httpd.conf
sudo service apache22 start

Verificar nuevas configuraciones

ps -aux | grep httpd

Si la salida del terminal del último comando muestra algunas líneas que comienzan con "apache", entonces todo está bien.

Configure su (s) sitio (s)

Si desea configurar su apache para un solo sitio, simplemente edite httpd.conf

nano /usr/local/apache2/conf/httpd.conf

Los parámetros esenciales que es posible que desee modificar son:

ServerName www.example.com:80
DocumentRoot "/usr/local/apache2/htdocs"

<Directory "/usr/local/apache2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

Si desea configurar más de un sitio, eche un vistazo a httpd-vhosts.conf

nano /usr/local/apache2/conf/httpd.conf

Deberá agregar una sección <Directorio> dentro del <VirtualHost> similar al anterior, pero para la raíz del documento del VitualHost. Por ejemplo:

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/usr/local/apache2/docs/dummy-host.example.com"
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/dummy-host.example.com-error_log"
    CustomLog "logs/dummy-host.example.com-access_log" common
    <Directory "/usr/local/apache2/docs/dummy-host.example.com">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
Johano Fierra
fuente
Siguiendo estas instrucciones, me encuentro con esto: dzenan @ ubuntu16-i386: ~ / httpd-2.2.34 $ sudo /usr/sbin/update-rc.d apachectl por defecto insserv: script apachectl: servicio apache2 ya proporcionado! insserv: saliendo ahora! update-rc.d: error: insserv rechazó el encabezado del script
Dženan
De hecho, en Ubuntu 16.04 ya hay un /etc/init.d/apache2archivo con contenido radicalmente diferente.
Dženan
Eliminar el archivo ofensivo nos lleva a ese paso, pero sudo service apachectl stopno detiene el servicio.
Dženan
"sudo service apachectl stop" solo no funcionaría, si no sigue los pasos que se detallan en Hacer que Apache se inicie en el momento del arranque . Después de leer mi respuesta, decidí cambiarla ... primero, apachectl es realmente un mal nombre para un "servicio" y fue malo hacer que crearlo sea parte de esa sección. Entonces, en su lugar, ahora haría sudo service apache22 start / stop , DESPUÉS de seguir los pasos en Crear "servicio" para Apache2 .
Johano Fierra
Decidí abandonar este enfoque y actualizar mi archivo de configuración para que sea compatible con apache 2.4. Menos dolores de cabeza de esa manera. Pero gracias por la respuesta detallada!
Dženan
4

Vea el tutorial de ubuntu sobre la fijación de paquetes :

Editar archivo /etc/apt/preferences

El archivo de 'preferencias' es donde tiene lugar la fijación real. Para anclar un paquete, establezca su Prioridad de pin en un número mayor. Aquí hay un ejemplo:

Package: apache2
Pin: release n=raring
Pin-Priority: 1000

Prueba antes de correr apt-get updateo apt-get installconapt-cache policy apache2

Ver man apt_preferencespara más detalles. Elegí raringel lanzamiento de pinning porque de esta manera todavía recibirás actualizaciones en la rama 2.2.x No olvide que debe hacer que el paquete esté disponible para APT agregando raringlas URL del repositorio.

Actualización :

Al igual raringque EOL, puede usar los paquetes aún compatibles preciseo archivados raringde http://old-releases.ubuntu.com .

Usar esto como /etc/apt/sources.list.d/raring.listle permitirá instalar paquetes más antiguos:

deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ raring-updates main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ raring-updates main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ raring-backports main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ raring-backports main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ raring-proposed main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ raring-proposed main restricted universe multiverse
fuero
fuente
Hola. Esto parece ser exactamente lo que quiero. ¿Pueden agregar también comandos para agregar las URL del repositorio de raring? Parece que no puedo encontrar los correctos.
Ravish Bhagdev
He actualizado mi respuesta.
fuero
Buena captura, he corregido la lista espejo de APT raring. Por supuesto, si desea utilizar la preciseversión, también /etc/apt/preferencesdebe cambiarla en consecuencia.
fuero
Muchas gracias. De todos modos, resultará ser una lata de gusanos ... tendrá que tomar la ruta de VM como siguiendo después de realizar los pasos especificados (y también intentar instalar la opción -f y limpiar) Los siguientes paquetes tienen dependencias insatisfechas. apache2: Depende: apache2-mpm-worker (= 2.2.22-1ubuntu1.7) pero no se instalará o apache2-mpm-prefork (= 2.2.22-1ubuntu1.7) pero no se instalará instalado o .... etc, etc.
Ravish Bhagdev
2

Para instalar apache2.2 use el siguiente proceso:

En una distribución posterior (por ejemplo, 16.04), descargué el 2.2.31 del sitio de Apache.

Lo construí usando la siguiente configuración:

./configure --enable-so --enable-ssl --with-included-apr --enable-mods-shared=all --enable-load-all-modules --enable-rewrite --enable-proxy --enable-proxy_connect --enable-proxy_http --enable-proxy_ajp --enable-authn_alias --with-npm=prefork --enable-proxy_balancer --enable-proxy_ftp --enable-cache --enable-suexec --enable-disk_cache  > conf.txt

Luego, por supuesto, ajustar los archivos httpd.conf y ssl.conf.

Después de eso solo ejecuto el inicio ./httpd -k

Y funciona !

tenga en cuenta que agregué el apache2.4 a través de apt-get pero nunca lo eliminé. Esto significa que después del inicio del sistema, necesito matar el proceso apache2. Y luego puedo iniciar apache2.2. Tuve que instalar apache2.4 para usar apachectl pero luego lo disolví porque uso ./httpd

Coen Damen
fuente
Eche un vistazo a mi respuesta con respecto al uso de apachectl para Apache 2.2, sin embargo, es posible que primero deba eliminar la versión 2.4 (/usr/sbin/update-rc.d -f apachectl remove).
Johano Fierra
1

¿Has actualizado Ubuntu 13.04 a 13.10? No hay forma de recuperar Apache 2.2 sin salir de los repositorios de paquetes de Ubuntu. Es mejor simplemente arreglar su configuración de Apache para que funcione con 2.4.

Sciurus
fuente
1
no realmente, mira mi respuesta
Coen Damen
@CoenDamen en realidad su respuesta es "salir de los repositorios de paquetes de Ubuntu". Además, su respuesta no funcionará "tal cual" para cualquier instalación nueva de Ubuntu, ya que le faltarán bastantes dependencias.
Johano Fierra