Installing dynamic modules when Nginx itself is installed via yum/dnf (Linux)

Thomas Ward teward at thomas-ward.net
Thu Jan 7 06:34:58 UTC 2021


You should, yes, to make sure your build as closely mirrors what is in 
the Fedora repos.


Thomas


On 1/6/21 11:19 PM, Phoenix Kiula wrote:
> Perfect. This is clear Thomas. Much appreciated...between Miguel's 
> original pointer and this clarity from you I think it solves what I'm 
> looking for. One last question: the `nginx -T` options...I'll add 
> those to the ./configure command, yes?
>
>
>
> On Wed, Jan 6, 2021 at 10:55 PM Thomas Ward <teward at thomas-ward.net 
> <mailto:teward at thomas-ward.net>> wrote:
>
>     This is where **manually compiling by hand** is the problem.  You
>     would do the compilation in a separate directory **NOT** inside
>     the space of the system's control - usually I spawn new `/tmp`
>     directories or destructable directories in my home space.
>
>     I'm not familiar with Fedora and the `dnf` command - but `dnf
>     install` installs the repositories-available-version of NGINX for
>     Fedora's repos.
>
>     The next steps you would take by hand are:
>
>     (1) Install **all build dependencies and runtime dependencies**
>     for NGINX and the modules you're compiling dynamically.
>
>     (2) Download the tarball to temporary space.
>
>     (3) At the *very* least (though I suggest you go digging in the
>     source of Fedora's repos to get their build options, you can find
>     them with `nginx -T` output though) you need to do this:
>
>     ./configure
>     --add-dynamic-module=/path/to/third/party/module/source/directory
>     make
>
>     **This does not install nginx, this is the compiling of the
>     binaries.**
>
>     (4) Dig in the completed compile and find your .so file and put it
>     in /etc/nginx/modules (I believe that's where it is on your
>     system, but I can't validate that - again I'm not a Fedora user so
>     I can't verify that's exactly where you drop the module files
>     themselves.
>
>
>     These're the *basic* steps - but again this will **not** install
>     your manually compiled nginx to overwrite what `dnf` installs -
>     this simply compiles everything and it's up to you to go digging
>     to get the components you need and put them where you need them to
>     be for your system to recognize them.
>
>
>     Thomas
>
>     On 1/6/21 10:47 PM, Phoenix Kiula wrote:
>>     Thank you Thomas. Much appreciate this, it sounds promising.
>>     Appreciate your clarity.
>>
>>     So if I:
>>
>>     1. Compile nginx via `dnf install nginx` and that becomes my
>>     system's Nginx, installed usually in `/etc/nginx`
>>
>>     2. In a totally separate folder, say, `/usr/src`, I then download
>>     a tarball of Nginx and compile it along with the dynamic modules
>>     -- which will produce the .so files for said modules
>>
>>     3. Copy over the modules into the usual `/etc/nginx/modules`
>>     folder from Step 1
>>
>>
>>     ....in this sequence of steps, how do I make sure that:
>>
>>
>>     A. The compilation in Step 2 does not become my "system's nginx"
>>     (so when I do an `nginx -v` at the command prompt it should be
>>     refer to the nginx installed in Step 1 above, and *not* the one
>>     compiled via Step 2)
>>
>>     B. The compile in Step 2 will use the "same libraries" that DNF
>>     used? In the DNF version of life I didn't pick any libraries
>>     manually...DNF found what was on my system. Will the manual
>>     compile not do the same?
>>
>>     Many thanks!
>>
>>
>>
>>
>>     On Wed, Jan 6, 2021 at 10:19 PM Thomas Ward
>>     <teward at thomas-ward.net <mailto:teward at thomas-ward.net>> wrote:
>>
>>         I'm fairly familiar with the 'compiling process' for dynamic
>>         modules - the process is the same for NGINX Open Source as
>>         wel as NGINX Plus.
>>
>>         You would need to compile the modules alongside NGINX and
>>         then harvest the compiled .so files and put them into
>>         corresponding locations on the system you want to load the
>>         dynamic modules.  In Ubuntu, we do this (or at least, I do)
>>         by using the same OS and libraries as installed on the target
>>         system (as well as the same NGINX version).
>>
>>         This being said, **compiling** NGINX is different than
>>         **installing** NGINX - you can *compile* the nginx version
>>         1.18.0 with the dynamic modules and the same configuration as
>>         the Fedora version, and then **take the compiled module** and
>>         load it up in your installed nginx instance.  Compiling NGINX
>>         to make the dynamic module does NOT require you to then
>>         install that NGINX version, provided that you match the
>>         `make` steps and installed/available libraries to those used
>>         in the original nginx compile done in Fedora.
>>
>>
>>         Thomas
>>
>>
>>         On 1/6/21 5:30 PM, Phoenix Kiula wrote:
>>>         Thank you Miguel. But you misunderstood the question. This
>>>         suggestion...
>>>
>>>             nginx blog as a great guide on it though
>>>             https://www.nginx.com/blog/compiling-dynamic-modules-nginx-plus/
>>>             <https://www.nginx.com/blog/compiling-dynamic-modules-nginx-plus/>
>>>
>>>
>>>
>>>
>>>         ...misses the very first question in this thread: we cannot
>>>         compile nginx from source on our server. At least not in a
>>>         way that that compiled version would become the nginx
>>>         installed in our *system*. We need to install nginx via the
>>>         default Fedora dnf package manager, which at this time
>>>         installs 1.18.0.
>>>
>>>         Now, what I don't mind doing is to compile nginx in some
>>>         self-contained folder somewhere, then use that compilation
>>>         to create the .so or whatever the module file for that
>>>         version is....if all of this module compiling does *not*
>>>         affect the system-installed dnf version of nginx. Is this
>>>         possible?
>>>
>>>         If so, the instructions do not help with this. The first
>>>         step in that official tutorial is to compile nginx and that
>>>         compiled nginx then becomes the system's main nginx. It
>>>         replaces whatever was installed via "dnf install nginx". Yes?
>>>
>>>         Hope this makes sense. Have I correctly understood how nginx
>>>         compilation works? Appreciate any pointers.
>>>
>>>         Thank you.
>>>
>>>
>>>         _______________________________________________
>>>         nginx mailing list
>>>         nginx at nginx.org  <mailto:nginx at nginx.org>
>>>         http://mailman.nginx.org/mailman/listinfo/nginx  <http://mailman.nginx.org/mailman/listinfo/nginx>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20210107/cf0fd394/attachment-0001.htm>


More information about the nginx mailing list