Bagaimana saya bisa menginstal Apache dengan versi tertentu?

26

Karena pembaruan Ubuntu, saya membuat kesalahan untuk memutakhirkan Apache 2.2 ke 2.4 — banyak hal yang salah.

Saya tidak tahu bagaimana menentukan versi setelahnya apt-get remove apache2. apt-get install apache2selalu menginstal 2.4.

Bagaimana saya bisa melakukannya?

Mithril
sumber

Jawaban:

22

Anda perlu melakukan hal berikut:

apt-cache showpkg <pachagename>

Perintah di atas akan menampilkan daftar versi yang tersedia untuk paket ini. Kemudian pilih versi yang diperlukan dan lakukan yang berikut.

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

Contoh:

apt-cache showpkg apache2
apt-get install apache2=2.2.14-5ubuntu8.7
MohyedeenN
sumber
2
Satu-satunya versi yang menunjukkan kepada saya adalah 2,4 di Ubuntu 16. Ini adalah masalah besar karena 2.4 telah mengetahui masalah yang benar-benar merusak situs saya.
felwithe
2
Versi 2.2.14-5ubuntu8.7 untuk apache2 tidak ditemukan
Braian Mellor
Terima kasih - ini bekerja lebih baik daripada mencoba menempuh rute PPA.
M Thomas
5

Cara menginstal Apache 2.2 pada distro Ubuntu yang tidak memilikinya di repositori.

Persyaratan

Anda perlu menginstal paket build-essential untuk melakukan ini.

~# sudo apt-get install build-essential

Untuk memberi Apache kemampuan untuk mengompresi output ke browser yang mendukungnya, Anda harus menginstal zlib. Unduh rilis saat ini dari zlip Hompage (zlib-1.2.11.tar.gz pada saat penulisan), ekstrak, navigasikan ke folder yang diekstrak, buat, dan instal.

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

Instal Apache 2.2

Unduh versi curent dari Apache Download Page (httpd-2.2.32.tar.gz pada saat penulisan), ekstrak, navigasi ke folder yang diekstraksi, bangun, dan instal.

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

Mulai Apache:

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

Periksa, apakah semuanya baik-baik saja

Arahkan ke http: // localhost di browser Anda, di mana Anda akan melihat pesan yang mengatakan "Berhasil!".

Sebagai alternatif, Anda dapat melakukan ini melalui terminal:

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

Yang seharusnya menampilkan sesuatu seperti ini di terminal:

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

Buat "layanan" untuk Apache2

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

Petunjuk: Anda dapat memanggil apachectl dengan layanan sudo apache22 sekarang.

Jadikan Apache mulai saat boot

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 aman

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

Periksa pengaturan baru

ps -aux | grep httpd

Jika keluaran terminal dari perintah terakhir menunjukkan beberapa baris yang dimulai dengan "apache" maka semuanya OK.

Konfigurasikan situs Anda

Jika Anda ingin mengonfigurasi apache untuk hanya satu situs, cukup edit httpd.conf

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

Parameter penting yang mungkin ingin Anda ubah adalah:

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>

Jika Anda ingin mengonfigurasi lebih dari satu situs, lihat httpd-vhosts.conf

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

Anda harus menambahkan bagian <Directory> dengan <VirtualHost> yang mirip dengan yang di atas, tetapi untuk root dokumen dari VitualHost. Sebagai contoh:

<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
sumber
Mengikuti instruksi ini, saya mengalami ini: dzenan @ ubuntu16-i386: ~ / httpd-2.2.34 $ sudo /usr/sbin/update-rc.d apachectl default insserv: script apachectl: service apache2 sudah disediakan! insserv: keluar sekarang! update-rc.d: error: insserv menolak header skrip
Dženan
Memang, pada Ubuntu 16.04 sudah ada /etc/init.d/apache2file dengan konten yang sangat berbeda.
Dženan
Menghapus file yang menyinggung membuat kami melewati langkah itu, tetapi sudo service apachectl stoptidak menghentikan layanan.
Dženan
"sudo service apachectl stop" tidak akan berfungsi, jika Anda tidak mengikuti langkah-langkah di bawah Jadikan Apache mulai saat boot . Setelah membaca jawaban saya, saya memutuskan untuk mengubahnya ... pertama, apachectl benar-benar nama yang buruk untuk "layanan" dan itu buruk untuk menjadikannya bagian dari bagian itu. Jadi, alih-alih sekarang Anda akan melakukan sudo service apache22 start / stop , SETELAH mengikuti langkah-langkah di bawah Buat "layanan" untuk Apache2 .
Johano Fierra
Saya memutuskan untuk meninggalkan pendekatan ini dan memperbarui file konfigurasi saya agar kompatibel dengan apache 2.4. Kurang sakit kepala seperti itu. Tetapi terima kasih atas jawaban terperinci!
Dženan
4

Lihat howto ubuntu pada paket yang disematkan :

Edit file /etc/apt/preferences

File 'preferensi' adalah tempat pinning aktual terjadi. Untuk menyematkan paket, atur Prioritas Pin-nya ke nomor yang lebih tinggi. Ini sebuah contoh:

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

Tes sebelum berjalan apt-get updateatau apt-get installdenganapt-cache policy apache2

Lihat man apt_preferencesdetailnya. Saya memilih menyematkan raringrilis karena dengan cara ini Anda masih akan mendapatkan pembaruan di cabang 2.2.x. Jangan lupa bahwa Anda harus membuat paket tersedia untuk APT dengan menambahkan raringURL repositori.

Perbarui :

Seperti halnya raringEOL, Anda bisa menggunakan paket yang masih didukung preciseatau diarsipkan raringdari http://old-releases.ubuntu.com .

Menggunakan ini sebagai /etc/apt/sources.list.d/raring.listakan memungkinkan Anda untuk menginstal paket yang lebih lama:

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
sumber
Hai. Ini sepertinya persis seperti yang saya inginkan. Bisakah Anda juga menambahkan perintah untuk menambahkan URL repositori raring? Sepertinya saya tidak dapat menemukan yang tepat.
Ravish Bhagdev
Saya telah memperbarui jawaban saya.
fuero
Tangkapan yang bagus, saya telah memperbaiki mirrorlist APT raring. Tentu saja jika Anda ingin menggunakan preciseversi tersebut, /etc/apt/preferencesharus diubah juga.
fuero
Terima kasih banyak. Pokoknya berubah menjadi kaleng cacing ... harus mengambil rute VM sebagai mengikuti setelah melakukan langkah-langkah yang ditentukan (dan juga mencoba menginstal opsi -f dan bersih) Paket-paket berikut memiliki dependensi yang belum terpenuhi. apache2: Tergantung: apache2-mpm-worker (= 2.2.22-1ubuntu1.7) tetapi tidak akan diinstal atau apache2-mpm-prefork (= 2.2.22-1ubuntu1.7) tetapi tidak akan menjadi diinstal atau .... dll dll
Ravish Bhagdev
2

Untuk menginstal apache2.2 gunakan proses berikut:

Pada distro berikutnya (mis. 16.04), saya mengunduh 2.2.31 dari situs Apache.

Saya membangunnya menggunakan konfigurasi berikut:

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

Kemudian tentu saja men-tweak file httpd.conf dan ssl.conf.

Setelah itu saya jalankan saja ./httpd -k start

Dan itu berhasil!

perhatikan bahwa saya menambahkan apache2.4 via apt-get tetapi tidak pernah menghapusnya. Ini berarti bahwa setelah sistem dimulai, saya harus mematikan proses apache2. Dan kemudian saya dapat memulai apache2.2. Saya harus menginstal apache2.4 untuk menggunakan apachectl tetapi kemudian membubarkannya karena saya menggunakan ./httpd

Coen Damen
sumber
Lihat jawaban saya tentang penggunaan apachectl untuk Apache 2.2, Anda mungkin harus menghapus versi 2.4 terlebih dahulu (/usr/sbin/update-rc.d -f apachectl hapus).
Johano Fierra
1

Anda meningkatkan dari Ubuntu 13.04 menjadi 13.10? Tidak ada cara untuk mendapatkan Apache 2.2 kembali tanpa pergi ke luar repositori paket Ubuntu. Lebih baik memperbaiki konfigurasi Apache Anda agar berfungsi dengan 2.4.

sciurus
sumber
1
tidak juga, lihat jawaban saya
Coen Damen
@CoenDamen sebenarnya yang Anda jawab adalah "keluar dari repositori paket Ubuntu". Juga, jawaban Anda tidak akan berfungsi "sebagaimana adanya" untuk setiap instalasi Ubuntu yang baru, karena akan hilang beberapa dependensi.
Johano Fierra