Jak mogę zainstalować Apache z określoną wersją?

26

Z powodu aktualizacji Ubuntu popełniłem błąd, aktualizując Apache 2.2 do 2.4 - wiele rzeczy poszło nie tak.

Nie mam pojęcia, jak określić wersję po apt-get remove apache2. apt-get install apache2zawsze instaluje 2.4.

Jak mogę to zrobić?

Mithril
źródło

Odpowiedzi:

22

Musisz wykonać następujące czynności:

apt-cache showpkg <pachagename>

Powyższe polecenie wyświetli listę dostępnych wersji tego pakietu. Następnie wybierz potrzebną wersję i wykonaj następujące czynności.

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

Przykład:

apt-cache showpkg apache2
apt-get install apache2=2.2.14-5ubuntu8.7
MohyedeenN
źródło
2
Jedyną wersją, która wyświetla się dla mnie, jest wersja 2.4 na Ubuntu 16. Jest to duży problem, ponieważ 2.4 ma problemy, które całkowicie zepsuły moją stronę.
felwithe
2
Wersja 2.2.14-5ubuntu8.7 dla apache2 nie została znaleziona
Braian Mellor
Dzięki - działało to lepiej niż próba przejścia drogą PPA.
M Thomas
5

Jak zainstalować Apache 2.2 na dystrybucji Ubuntu, która nie ma go w repozytoriach.

Wymagania

Aby to zrobić, musisz mieć zainstalowany pakiet niezbędny do kompilacji.

~# sudo apt-get install build-essential

Aby dać Apache możliwość kompresji danych wyjściowych do przeglądarek, które ją obsługują, musisz zainstalować zlib. Pobierz bieżącą wersję z Zlip Hompage (zlib-1.2.11.tar.gz w chwili pisania), rozpakuj go, przejdź do wyodrębnionego folderu, skompiluj i zainstaluj.

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

Zainstaluj Apache 2.2

Pobierz aktualną wersję ze strony pobierania Apache (httpd-2.2.32.tar.gz w chwili pisania), rozpakuj ją, przejdź do wyodrębnionego folderu, skompiluj i zainstaluj.

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

Uruchom Apache:

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

Sprawdź, czy wszystko jest w porządku

Przejdź do http: // localhost w przeglądarce, gdzie powinieneś zobaczyć komunikat „To działa!”.

Alternatywnie możesz to zrobić przez terminal:

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

Który powinien wypisać coś takiego w terminalu:

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

Utwórz „usługę” dla Apache2

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

Wskazówka: możesz teraz wywołać apachectl z usługą sudo apache22 .

Uruchom Apache podczas uruchamiania

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

Bezpieczny 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

Sprawdź nowe ustawienia

ps -aux | grep httpd

Jeśli wynik końcowy ostatniego polecenia pokazuje niektóre wiersze zaczynające się od „apache”, to wszystko jest w porządku.

Skonfiguruj swoje witryny

Jeśli chcesz skonfigurować apache tylko dla jednej strony, po prostu edytuj httpd.conf

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

Podstawowe parametry, które możesz chcieć zmodyfikować to:

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>

Jeśli chcesz skonfigurować więcej niż jedną witrynę, zajrzyj na httpd-vhosts.conf

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

Będziesz musiał dodać sekcję <Directory> z <VirtualHost> podobną do powyższej, ale dla katalogu głównego VitualHost. Na przykład:

<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
źródło
Po tych instrukcjach napotykam na to: dzenan @ ubuntu16-i386: ~ / httpd-2.2.34 $ sudo /usr/sbin/update-rc.d apachectl defaults insserv: skrypt apachectl: usługa apache2 już podana! insserv: wychodzę teraz! update-rc.d: error: insserv odrzucił nagłówek skryptu
Dženan
Rzeczywiście, na Ubuntu 16.04 jest już /etc/init.d/apache2plik z radykalnie różną zawartością.
Dženan
Usunięcie niepoprawnego pliku prowadzi nas do tego kroku, ale sudo service apachectl stopnie zatrzymuje usługi.
Dženan
„sudo service apachectl stop” nie działałoby tylko, jeśli nie wykonałeś kroków opisanych w części Uruchamianie Apache podczas uruchamiania . Po przeczytaniu mojej odpowiedzi postanowiłem ją zmienić ... po pierwsze, apachectl to naprawdę zła nazwa dla „usługi” i źle było uczynić ją częścią tej sekcji. Zamiast tego wykonasz teraz usługę sudo apache22 start / stop PO, postępując zgodnie z krokami pod „Tworzenie” usługi dla Apache2 .
Johano Fierra
Postanowiłem zrezygnować z tego podejścia i zaktualizować plik konfiguracyjny, aby był zgodny z Apache 2.4. W ten sposób mniej bólów głowy. Ale dziękuję za szczegółową odpowiedź!
Dženan,
4

Zobacz instrukcje Ubuntu na temat przypinania pakietów :

Edytuj plik /etc/apt/preferences

Plik „preferencji” to miejsce, w którym ma miejsce faktyczne przypięcie. Aby przypiąć paczkę, ustaw jej Pin-Priority na wyższy numer. Oto przykład:

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

Testuj przed uruchomieniem apt-get updatelub apt-get installzapt-cache policy apache2

Zobacz man apt_preferencesszczegóły. Wybrałem raringwydanie przypinania , ponieważ w ten sposób nadal będziesz otrzymywać aktualizacje w gałęzi 2.2.x. Nie zapomnij, że musisz udostępnić pakiet APT, dodając raringadresy URL repozytorium.

Aktualizacja :

Podobnie jak w przypadku raringEOL, możesz użyć nadal obsługiwanych preciselub zarchiwizowanych raringpakietów z http://old-releases.ubuntu.com .

Korzystanie z tego /etc/apt/sources.list.d/raring.listpozwoli na zainstalowanie starszych pakietów:

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
źródło
Cześć. To wydaje się być dokładnie tym, czego chcę. Czy możesz również dodać polecenia dodawania adresów URL repozytorium Raring? Nie mogę znaleźć odpowiednich.
Ravish Bhagdev
Zaktualizowałem swoją odpowiedź.
fuero
Niezły chwyt, poprawiłem lustrzaną listę APT do raring. Oczywiście, jeśli chcesz korzystać z precisewersji, /etc/apt/preferencesmusisz ją odpowiednio zmienić.
fuero
Wielkie dzięki. W każdym razie okazuje się, że jest puszką robaków ... po wykonaniu określonych kroków będzie musiał podążać trasą maszyny wirtualnej jako próbą śledzenia (a także wypróbowania opcji install -f i wyczyszczenia). Następujące pakiety mają niespełnione zależności. apache2: Zależy: apache2-mpm-worker (= 2.2.22-1ubuntu1.7), ale nie zostanie zainstalowany lub apache2-mpm-prefork (= 2.2.22-1ubuntu1.7), ale nie będzie zainstalowane lub .... itd. itd.
Ravish Bhagdev
2

Aby zainstalować apache2.2, użyj następującego procesu:

W późniejszej dystrybucji (np. 16.04) pobrałem 2.2.31 ze strony Apache.

Zbudowałem go przy użyciu następującej konfiguracji:

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

Potem oczywiście poprawianie plików httpd.conf i ssl.conf.

Potem po prostu uruchamiam ./httpd -k start

I to działa!

zauważ, że dodałem apache2.4 poprzez apt-get, ale nigdy go nie usunąłem. Oznacza to, że po uruchomieniu systemu muszę zabić proces Apache2. A potem mogę uruchomić apache2.2. Musiałem zainstalować apache2.4, aby używać apachectl, ale później go rozwiązałem, ponieważ używam ./httpd

Coen Damen
źródło
Spójrz na moją odpowiedź dotyczącą używania apachectl dla Apache 2.2, być może będziesz musiał najpierw usunąć wersję 2.4 (/usr/sbin/update-rc.d -f apachectl remove).
Johano Fierra
1

Uaktualniłeś system z Ubuntu 13.04 do 13.10? Nie ma sposobu na odzyskanie Apache 2.2 bez wychodzenia poza repozytoria pakietów Ubuntu. Lepiej po prostu napraw konfigurację Apache, aby działała z 2.4.

Sciurus
źródło
1
nie bardzo, patrz moja odpowiedź
Coen Damen
@CoenDamen tak naprawdę odpowiadasz „wychodzisz poza repozytoria pakietów Ubuntu”. Ponadto twoja odpowiedź nie będzie działać „tak jak jest” w przypadku każdej nowej instalacji Ubuntu, ponieważ nie będzie w niej wielu zależności.
Johano Fierra