Как я могу установить Apache с определенной версией?


26

Из-за обновления Ubuntu я сделал ошибку, чтобы обновить Apache 2.2 до 2.4 - многие вещи пошли не так.

Понятия не имею как указать версию после apt-get remove apache2. apt-get install apache2всегда устанавливает 2.4.

Как я могу это сделать?

Ответы:


22

Вам нужно сделать следующее:

apt-cache showpkg <pachagename>

Приведенная выше команда отобразит список доступных версий для этого пакета. Затем выберите нужную версию и выполните следующие действия.

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

Пример:

apt-cache showpkg apache2
apt-get install apache2=2.2.14-5ubuntu8.7

2
Единственная версия, которая показывается для меня, это 2.4 на Ubuntu 16. Это большая проблема, потому что 2.4 имеет известные проблемы, которые полностью сломали мой сайт.
16:24

2
Версия 2.2.14-5ubuntu8.7 для apache2 не найдена
Брайан Меллор

Спасибо - это сработало лучше, чем пытаться идти по маршруту PPA.
М Томас

5

Как установить Apache 2.2 в дистрибутив Ubuntu, в котором его нет в репозиториях.

Требования

Для этого вам нужно установить пакет build-essentials.

~# sudo apt-get install build-essential

Чтобы дать Apache возможность сжимать вывод в браузерах, которые его поддерживают, вам нужно установить zlib. Загрузите текущий выпуск с zlip Hompage (zlib-1.2.11.tar.gz на момент написания), распакуйте его, перейдите к извлеченной папке, соберите и установите.

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

Установите Apache 2.2

Загрузите текущую версию со страницы загрузки Apache (httpd-2.2.32.tar.gz на момент написания), распакуйте ее, перейдите к извлеченной папке, соберите и установите.

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

Запустите Apache:

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

Проверьте, все ли в порядке

Перейдите на http: // localhost в вашем браузере, где вы должны увидеть сообщение «Это работает!».

В качестве альтернативы вы можете сделать это через терминал:

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

Который должен выводить что-то вроде этого в терминале:

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

Создать «сервис» для Apache2

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

Подсказка: теперь вы можете вызвать apachectl с помощью службы sudo apache22 .

Заставить Apache запускаться во время загрузки

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

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

Проверьте новые настройки

ps -aux | grep httpd

Если вывод терминала последней команды показывает несколько строк, начинающихся с «apache», то все в порядке.

Настройте свой сайт (ы)

Если вы хотите настроить Apache только для одного сайта, просто отредактируйте httpd.conf

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

Основные параметры, которые вы можете изменить:

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>

Если вы хотите настроить более одного сайта, загляните на httpd-vhosts.conf

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

Вам нужно будет добавить раздел <Directory> с <VirtualHost>, аналогичным указанному выше, но для корневого каталога документа VitualHost. Например:

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    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>

Следуя этим инструкциям, я сталкиваюсь с этим: dzenan @ ubuntu16-i386: ~ / httpd-2.2.34 $ sudo /usr/sbin/update-rc.d Значения по умолчанию apachectl insserv: script apachectl: служба apache2 уже предоставлена! insserv: выход сейчас! update-rc.d: ошибка: insserv отклонил заголовок сценария
Дженан,

Действительно, в Ubuntu 16.04 уже есть /etc/init.d/apache2файл с совершенно другим содержанием.
Дженан

Удаление поврежденного файла заставляет нас пройти этот шаг, но sudo service apachectl stopне останавливает службу.
Дженан

«sudo service apachectl stop» не будет работать, только если вы не выполните шаги, описанные в разделе « Запуск Apache во время загрузки» . Прочитав мой ответ, я решил изменить его ... во-первых, apachectl - это действительно плохое название для "сервиса", и было неправильно создавать его частью этого раздела. Таким образом, вместо этого вы теперь должны выполнить запуск / остановку службы sudo apache22 , ПОСЛЕ выполнения действий, описанных в разделе « Создание» службы для Apache2 .
Johano Fierra

Я решил отказаться от этого подхода и обновить мой конфигурационный файл, чтобы он был совместим с Apache 2.4. Так меньше головных болей. Но спасибо за подробный ответ!
Дженан

4

Смотрите руководство по Ubuntu по закреплению пакетов :

Редактировать файл /etc/apt/preferences

В файле «предпочтений» происходит фактическое закрепление. Чтобы закрепить пакет, установите для него более высокий номер. Вот пример:

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

Тест перед запуском apt-get updateили apt-get installсapt-cache policy apache2

Смотрите man apt_preferencesподробности. Я выбрал raringвыпуск пиннинга , потому что таким образом вы все равно будете получать обновления в ветке 2.2.x. Не забывайте, что вы должны сделать пакет доступным для APT, добавив raringURL-адреса хранилища.

Обновление :

Как raringи EOL, вы можете использовать все еще поддерживаемые preciseили архивные raringпакеты с http://old-releases.ubuntu.com .

Использование этого как /etc/apt/sources.list.d/raring.listпозволит вам установить более старые пакеты:

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

Здравствуй. Кажется, это именно то, чего я хочу. Не могли бы вы также добавить команды для добавления URL-адресов хранилища raring? Кажется, я не могу найти правильных.
Равиш Бхагдев

Я обновил свой ответ.
Fuero

Хороший улов, я исправил список зеркал APT raring. Конечно, если вы хотите использовать preciseверсию, /etc/apt/preferencesдолжны быть изменены соответственно.
Fuero

Большое спасибо. Как бы то ни было, это может оказаться червем ... придется принять маршрут виртуальной машины как следующий после выполнения указанных шагов (а также попробовать установить -f и очистить). Следующие пакеты имеют неудовлетворенные зависимости. apache2: Зависит: apache2-mpm-worker (= 2.2.22-1ubuntu1.7), но он не будет установлен или apache2-mpm-prefork (= 2.2.22-1ubuntu1.7), но не будет установлен или .... и т. д.
Ravish Bhagdev

2

Для установки apache2.2 используйте следующий процесс:

В более позднем дистрибутиве (например, 16.04) я скачал 2.2.31 с сайта Apache.

Я построил его, используя следующую конфигурацию:

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

Затем, конечно, настроить файлы httpd.conf и ssl.conf.

После этого я просто запускаю ./httpd -k start

И это работает!

обратите внимание, что я добавил apache2.4 через apt-get, но никогда не удалял его. Это означает, что после запуска системы мне нужно завершить процесс apache2. И тогда я могу запустить apache2.2. Я должен был установить apache2.4, чтобы использовать apachectl, но позже отменил это, потому что я использую ./httpd


Посмотрите на мой ответ, касающийся использования apachectl для Apache 2.2. Возможно, вам сначала придется удалить версию 2.4 (/usr/sbin/update-rc.d -f apachectl remove).
Йохано Фиерра

1

Вы обновились с Ubuntu 13.04 до 13.10? Невозможно вернуть Apache 2.2, не выходя за пределы репозиториев пакетов Ubuntu. Лучше просто исправить конфигурацию Apache, чтобы она работала с 2.4.


1
не совсем, посмотри мой ответ
Коен Дамен

@CoenDamen, на самом деле вы отвечаете: «выходить за пределы репозиториев пакетов Ubuntu». Кроме того, ваш ответ не будет работать "как есть" для любой новой установки Ubuntu, так как в нем будет отсутствовать довольно много зависимостей.
Йохано Фиерра
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.