46

I currently have Nginx installed via the instructions on the Nginx site:

nginx=stable
sudo su -
add-apt-repository ppa:nginx/$nginx
apt-get update 
apt-get install

I have configured Nginx and it has been running great for a little while. Now, I want to add some custom modules--say, the Upload Progress Module. The instructions for this module say to add --add-module=path/to/nginx_uploadprogress_module to your ./configure command. However, I did not install Nginx from source.

What is the best way to handle this situation? Is it possible to tell APT to compile from source and pass options to ./configure? Can I compile over the existing installation? What about paths--how do I make them match? Or do I have to remove the APT managed version and start over?

masegaloeh
  • 17,978
  • 9
  • 56
  • 104
Michelle Tilley
  • 563
  • 1
  • 5
  • 7

4 Answers4

60

Install dpkg-dev:

sudo apt-get install dpkg-dev

Add repository:

sudo add-apt-repository ppa:nginx/stable

Edit /etc/apt/sources.list.d/nginx-stable-lucid.list, add dpkg-src:

deb http://ppa.launchpad.net/nginx/stable/ubuntu lucid main
deb-src http://ppa.launchpad.net/nginx/stable/ubuntu lucid main

note: (the previous step may have already been automatically performed on Ubuntu >= 12.04 - also make sure that you change lucid to reflect your version)

Resynchronize the package index files:

sudo apt-get update

Get sources:

apt-get source nginx

Build dependencies:

sudo apt-get build-dep nginx

Edit nginx-0.8.54/debian/rules:

config.status.full: config.env.full config.sub config.guess
...
--add-module=path/to/nginx_uploadprogress_module

Build package:

cd nginx-0.8.54 && dpkg-buildpackage -b

Install packages:

sudo dpkg --install nginx-common_1.2.4-2ubuntu0ppa1~precise_all.deb

sudo dpkg --install nginx-full_1.2.4-2ubuntu0ppa1~precise_amd64.deb
Koen.
  • 826
  • 9
  • 10
alvosu
  • 8,357
  • 24
  • 22
  • 1
    Wonderful, detailed instructions. At the end, while `sudo dpkg --install nginx-full_0.8.54-4ppa4~lucid_i386.deb`-ing, I'm receiving `nginx-full depends on nginx-common (= 0.8.54-4ppa4~lucid); however: Package nginx-common is not installed.` However, `sudo dpkg --install nginx-common_0.8.54-4ppa4~lucid_all.deb` is giving `dpkg: error processing nginx-common_0.8.54-4ppa4~lucid_all.deb (--install): trying to overwrite '/usr/share/nginx/www/50x.html', which is also in package nginx 0:0.8.54-4ppa2~lucid`. How would you recommend resolving this issue? – Michelle Tilley Jan 29 '11 at 18:44
  • Remove nginx package: apt-get remove nginx – alvosu Jan 29 '11 at 19:11
  • In this particular case, is there any advantage to installing in this manner over compiling from source by hand? Thanks again. – Michelle Tilley Jan 29 '11 at 23:28
  • 2
    Hi alvosu, I'm getting this error: dpkg-buildpackage: error: debian/rules build gave error exit status 2. Any idea? – Xavi Colomer Apr 16 '12 at 11:59
  • 4
    @BrandonTilley if you install it this way, you can uninstall it via `apt-get`/`dpkg`, and also other packages that you install via `apt-get` will know that `nginx` is installed and will not ask you to install it. If you installed it directly from source you won't get this. – Carlos Campderrós Jul 03 '12 at 10:47
  • 2
    If you have error like this "dpkg-buildpackage: warning: Failed to sign .dsc and .changes file", use `dpkg-buildpackage -uc -us` instead of `dpkg-buildpackage -b`. Otherwise, .deb files won't be created. – Roman Newaza Mar 28 '13 at 10:34
  • Thank you for your detailed answer... It worked like charm! – xecute Jan 16 '14 at 13:21
  • Tried following the steps and on `dpkg-buildpackage -b` it gave me at the end: `dpkg-shlibdeps: error: no dependency information found for /usr/local/lib/libzmq.so.5 (used by debian/nginx-full/usr/sbin/nginx).` – kiradotee Aug 11 '16 at 15:13
39

Since squeeze in Debian and since oneric in Ubuntu, there are some (like headers-more-module I needed) in

apt-get install nginx-extras
Victor Sergienko
  • 477
  • 5
  • 15
1

Installing Nginx from source is necessary if you want to add extra/(third party module) to it. If installed via source the Nginx can't be used as a service and logrotate doesn't gets setup for Nginx. Follow this method to get it installed with all functionalities which you get from installing via apt-get

0

Sweet article that can be read here will explain the detailed information on compiling modules into nginx. Basically you need to recompile the nginx each time you want to install a module.

Also similar to this method will also work.

 wget 'http://nginx.org/download/nginx-1.9.3.tar.gz'
 tar -xzvf nginx-1.9.3.tar.gz
 cd nginx-1.9.3/

 # Here we assume you would install you nginx under /opt/nginx/.
 ./configure --prefix=/opt/nginx \
     --add-module=/path/to/headers-more-nginx-module
 make
 make install
ElvinD
  • 111
  • 1