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