Як я можу встановити 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 мають відомі проблеми, які повністю зламали мій сайт.
сентябрь

2
Версія 2.2.14-5ubuntu8.7 для apache2 не знайдена
Braian Mellor

Спасибі - це спрацювало краще, ніж намагатися пройти маршрут PPA.
М Томас

5

Як встановити Apache 2.2 в дистрибутиві Ubuntu, який не має його у сховищах.

Вимоги

Для цього потрібно встановити пакунок build-essentials.

~# sudo apt-get install build-essential

Щоб надати Apache можливість стискати вихід до браузерів, які його підтримують, потрібно встановити zlib. Завантажте поточний реліз із Hompa zlip (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

Вам доведеться додати розділ <Каталог>, утримуючи <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: сценарій apachectl: послуга apache2 вже надана! insserv: вихід зараз! update-rc.d: error: insserv відхилив заголовок сценарію
Dženan

Дійсно, на Ubuntu 16.04 вже є /etc/init.d/apache2файл із корінним змістом.
Dženan

Видалення ображеного файла переходить нас до цього кроку, але sudo service apachectl stopне зупиняє послугу.
Dženan

"зупинка сервісу apachectl stop" не працює, лише якщо ви не дотримуєтесь кроків під час запуску Make Apache . Прочитавши хоч свою відповідь, я вирішив змінити її ... по-перше, apachectl - це справді погана назва "послуги", і було погано зробити її частиною цього розділу. Таким чином, замість цього ви зараз робите старт / зупинку служби sudo для apche22 , ПІСЛЯ виконуючи дії в розділі Створити "сервіс" для Apache2 .
Johano Fierra

Я вирішив відмовитися від цього підходу та оновив свій конфігураційний файл на сумісність з apache 2.4. Менше головних болів таким чином. Але дякую за детальну відповідь!
Dženan

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? Я не можу знайти правильних.
Ravish Bhagdev

Я оновив свою відповідь.
фуеро

Хороший улов, я виправив список дзеркальних дзвінків APT raring. Звичайно, якщо ви хочете скористатися preciseверсією, /etc/apt/preferencesїї теж слід змінити.
фуеро

Дуже дякую. У будь-якому випадку виявляється, що може бути глистом ... доведеться сприймати маршрут VM як наступний після виконання визначених кроків (а також намагаючись встановити -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 видалити).
Johano Fierra

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.