Como posso instalar o Apache com uma versão específica?

26

Por causa da atualização do Ubuntu, cometi o erro de atualizar o Apache 2.2 para 2.4 - muitas coisas deram errado.

Eu não tenho idéia de como especificar a versão depois apt-get remove apache2. apt-get install apache2sempre instala 2.4.

Como eu posso fazer isso?

Mithril
fonte

Respostas:

22

Você precisa fazer o seguinte:

apt-cache showpkg <pachagename>

O comando acima exibirá a lista de versões disponíveis para este pacote. Em seguida, selecione a versão necessária e faça o seguinte.

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

Exemplo:

apt-cache showpkg apache2
apt-get install apache2=2.2.14-5ubuntu8.7
MohyedeenN
fonte
2
A única versão que me mostra é a 2.4 no Ubuntu 16. Esse é um grande problema porque a 2.4 possui problemas conhecidos que quebraram completamente meu site.
Feltro #
2
A versão 2.2.14-5ubuntu8.7 para apache2 não foi encontrada
Braian Mellor
Obrigado - isso funcionou melhor do que tentar seguir a rota do PPA.
M Thomas
5

Como instalar o Apache 2.2 em uma distribuição do Ubuntu que não o possui nos repositórios.

Exigências

Você precisa ter o pacote build-essentials instalado para fazer isso.

~# sudo apt-get install build-essential

Para dar ao Apache a capacidade de compactar a saída nos navegadores que a suportam, você precisa instalar o zlib. Faça o download da versão atual da página inicial do zlip (zlib-1.2.11.tar.gz no momento da gravação), extraia-a, navegue até a pasta extraída, construa 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

Instale o Apache 2.2

Faça o download da versão atual da página de download do Apache (httpd-2.2.32.tar.gz no momento da gravação), extraia-a, navegue até a pasta extraída, construa 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 o Apache:

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

Verifique se está tudo bem

Navegue para http: // localhost no seu navegador, onde você verá uma mensagem dizendo "Funciona!".

Como alternativa, você pode fazer isso através do terminal:

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

O que deve gerar algo assim no terminal:

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

Crie "serviço" para o Apache2

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

Dica: você pode chamar o apachectl com o serviço sudo apache22 agora.

Faça o Apache iniciar no momento da inicialização

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

Secure Apache

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

Verifique novas configurações

ps -aux | grep httpd

Se a saída do terminal do último comando mostrar algumas linhas começando com "apache", tudo estará OK.

Configure seu (s) site (s)

Se você deseja configurar seu apache para apenas um site, basta editar o httpd.conf

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

Os parâmetros essenciais que você pode querer modificar são:

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>

Se você deseja configurar mais de um site, consulte httpd-vhosts.conf

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

Você precisará adicionar uma seção <Diretório> dentro do <VirtualHost> semelhante ao acima, mas para a raiz do documento do VitualHost. Por exemplo:

<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
fonte
Seguindo estas instruções, eu me deparo com isso: dzenan @ ubuntu16-i386: ~ / httpd-2.2.34 $ sudo /usr/sbin/update-rc.d padrões de apachectl insserv: script apachectl: service apache2 já fornecido! insserv: saindo agora! update-rc.d: error: insserv rejeitou o cabeçalho do script
Dženan
De fato, no Ubuntu 16.04 já existe um /etc/init.d/apache2arquivo com conteúdo radicalmente diferente.
Dženan 30/10
A remoção do arquivo incorreto nos leva a essa etapa, mas sudo service apachectl stopnão interrompe o serviço.
Dženan 30/10
"sudo service apachectl stop" não funcionaria se você não seguisse as etapas em Fazer o Apache iniciar no momento da inicialização . Depois de ler minha resposta, decidi alterá-la ... primeiro, apachectl é realmente um nome ruim para um "serviço" e foi ruim fazer com que a criação fizesse parte dessa seção. Portanto, agora você faria o serviço sudo apache22 iniciar / parar , APÓS seguir as etapas em Criar "serviço" para o Apache2 .
Johano Fierra 7/11
Decidi abandonar essa abordagem e atualizar meu arquivo de configuração para ser compatível com o apache 2.4. Menos dores de cabeça dessa maneira. Mas obrigado pela resposta detalhada!
Dženan 7/11
4

Veja o tutorial do ubuntu sobre fixação de pacotes :

Editar arquivo /etc/apt/preferences

O arquivo 'preferências' é o local onde ocorre a fixação. Para fixar um pacote, defina sua Prioridade de PIN para um número maior. Aqui está um exemplo:

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

Teste antes de executar apt-get updateou apt-get installcomapt-cache policy apache2

Veja man apt_preferencespara detalhes. Eu escolhi raringa liberação do pinning porque dessa forma você ainda receberá atualizações no ramo 2.2.x. Não esqueça que você precisa disponibilizar o pacote para o APT adicionando raringURLs do repositório.

Atualização :

Assim como o raringEOL, você pode usar os pacotes ainda suportados preciseou arquivados raringem http://old-releases.ubuntu.com .

Usar isso como /etc/apt/sources.list.d/raring.listpermitirá instalar pacotes mais antigos:

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
fonte
Oi. Isso parece ser exatamente o que eu quero. Você também pode adicionar comandos para adicionar URLs de repositório do raring? Não consigo encontrar os corretos.
Ravish Bhagdev
Eu atualizei minha resposta.
fuero 02/03
Boa captura, corrigi a mirrorlist do APT raring. Obviamente, se você deseja usar a preciseversão, também /etc/apt/preferencesdeve ser alterado de acordo.
fuero 03/03
Muito obrigado. De qualquer forma, acabou sendo uma lata de worms ... terá que seguir a rota da VM como segue após executar as etapas especificadas (e também tentar instalar a opção -f e limpar) Os pacotes a seguir têm dependências não atendidas. apache2: Depende: apache2-mpm-worker (= 2.2.22-1ubuntu1.7), mas não será instalado ou apache2-mpm-prefork (= 2.2.22-1ubuntu1.7), mas não será instalado ou .... etc etc
Ravish Bhagdev
2

Para instalar o apache2.2, use o seguinte processo:

Em uma distribuição posterior (por exemplo, 16.04), baixei o 2.2.31 do site Apache.

Eu o construí usando a seguinte configuração:

./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

Então, é claro, aprimorando os arquivos httpd.conf e ssl.conf.

Depois disso, basta executar o ./httpd -k start

E funciona!

note que eu adicionei o apache2.4 via apt-get, mas nunca o removi. Isso significa que, após o início do sistema, preciso interromper o processo apache2. E então eu sou capaz de iniciar o apache2.2. Eu tive que instalar o apache2.4 para usar o apachectl, mas depois o dissolvi porque eu uso ./httpd

Coen Damen
fonte
Dê uma olhada na minha resposta sobre o uso do apachectl para o Apache 2.2; talvez seja necessário remover a versão 2.4 primeiro (/usr/sbin/update-rc.d -f apachectl remove).
Johano Fierra
1

Você atualizou do Ubuntu 13.04 para 13.10? Não há como recuperar o Apache 2.2 sem sair dos repositórios de pacotes do Ubuntu. É melhor corrigir a configuração do Apache para que funcione com o 2.4.

sciurus
fonte
1
não realmente, ver a minha resposta
Coen Damen
@CoenDamen, na verdade, você responde está "saindo dos repositórios de pacotes do Ubuntu". Além disso, sua resposta não funcionará "como está" para qualquer instalação nova do Ubuntu, pois faltam algumas dependências.
Johano Fierra