Как я могу установить 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.