Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • fornari/ngx_http_voms_module
  • cnafsd/ngx_http_voms_module
2 results
Show changes
Commits on Source (85)
Showing
with 320 additions and 888 deletions
# Copyright 2018-2022 Istituto Nazionale di Fisica Nucleare # Copyright 2018-2023 Istituto Nazionale di Fisica Nucleare
# SPDX-License-Identifier: EUPL-1.2 # SPDX-License-Identifier: EUPL-1.2
FROM centos:7 FROM almalinux:9
# Allow customization of build user ID and name # Allow customization of build user ID and name
ARG USERNAME=vscode ARG USERNAME=vscode
...@@ -10,12 +10,9 @@ ARG USER_GID=${USER_UID} ...@@ -10,12 +10,9 @@ ARG USER_GID=${USER_UID}
COPY library-scripts/*.sh /tmp/library-scripts/ COPY library-scripts/*.sh /tmp/library-scripts/
RUN yum update -y && \ RUN \
sh /tmp/library-scripts/provide-dev-deps.sh && \ sh /tmp/library-scripts/provide-dev-deps.sh && \
sh /tmp/library-scripts/provide-user.sh ${USERNAME} ${USER_UID} ${USER_GID} && \ sh /tmp/library-scripts/provide-user.sh ${USERNAME} ${USER_UID} ${USER_GID} && \
yum clean all && rm -rf /var/cache/yum dnf clean all && rm -rf /var/cache/dnf
USER $USERNAME USER $USERNAME
COPY nginx.repo /etc/yum.repos.d/nginx.repo
RUN sudo yum -y install nginx nginx-module-njs
\ No newline at end of file
# `ngx_http_voms_module` for developers
A devcontainer is ready to use for the developers. A set of packages without nginx are already installed.
## How to build and install nginx with or without httpg patch
To build and install the latest stable version of [nginx](http://nginx.org/en/download.html) you have to copy the `nginx.repo` file (it is contained in the `docker` directory) into the `/etc/yum.repos.d/` directory and install nginx with `yum`:
```shell
$ sudo cp docker/nginx.repo /etc/yum.repos.d/
$ sudo yum install -y nginx
```
Otherwise, if you want to build and install the latest stable version of [nginx](http://nginx.org/en/download.html) with the httpg patch, a bash library is ready to use. You can source it and follow the commands below:
```shell
$ source .devcontainer/assets/build-library.sh
$ downloadNginx
$ buildHttpgNginxRPM
$ sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/nginx-*.httpg.x86_64.rpm
```
## How to build and install the `ngx_http_voms_module`
If you want to build and install the `ngx_http_voms_module`, nginx have to be installed in the container (see the previous section). When this requirement is satisfied, you can use the library contained in the `.devcontainer/assets` folder as follows (NOTE: if you have already download nginx source file, you can skip the relative command):
```shell
$ source .devcontainer/assets/build-library.sh
$ downloadNginx
$ buildVomsModuleRPM
$ sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/nginx-module-http-voms-*.x86_64.rpm
```
## How to manage this project
If you want to understand how this project works, start from the CI. Three stages are defined:
### 1. build-rpms
Starting from a clear AlmaLinux 9, we install all the useful packages to compile nginx and to build a rpm package. The bash steps that achieves these results are defined in the `.devcontainer/assets/build-library.sh` file, so you can read that bash script to learn which nginx version we use, how to download it, how to set up the environment and how to build the rpm.
It is important to underline that to build the nginx rpm we use the spec file in the `rpm` repo, that is the official nginx 1.24.0 spec file increased by the HTTPG patch. To build the `ngx_http_voms_module` we have defined an appropriate spec file indeed. The files that are used to build the rpm module are written, called and collocated following the common practices of the nginx modules: a source file is defined in the `src` folder, the `config` and the `config.make` files are in the root project directory.
At the end of this stage, all the useful rpms are saved as job artifacts.
### 2. docker-build-rpms
In this stage we set up a docker image with nginx, the httpg patch and the `ngx_http_voms_module`. To do this, we use a set of scripts in the [`helper-scripts`](https://baltig.infn.it/mw-devel/helper-scripts.git) project.
The dockerfile and all the files needed for its compilation are in the `docker` directory. The image starts from AlmaLinux 9, defines a user and installs a set of useful packages. After that we import the nginx repo file, in this way we can download a lot of packages provided by nginx, including its last stable version. In the end we install the rpm packages that we build in the previous stage and the njs module.
### 3. push-to-dockerhub
In this last stage we push on dockerhub the image that we have builded in the previous stage. Note that this stage is run only when we push something in the master branch.
#!/usr/bin/env bash
# Copyright 2018-2023 Istituto Nazionale di Fisica Nucleare
# SPDX-License-Identifier: EUPL-1.2
downloadNginx() {
# check if ~/rpmbuild exists and is not empty
if [ -d ${HOME}/rpmbuild ] && [ "$(ls -A ${HOME}/rpmbuild)" ]; then
>&2 echo "Error: ${HOME}/rpmbuild already exists and is not empty"
return 1
fi
# set nginx version
if [ -z ${ngxVersion} ]; then
ngxVersion=1.26.2-1
fi
elVersion=$(rpmbuild --eval %{rhel})
echo "Downloading nginx version ${ngxVersion} (EL${elVersion})"
src_package_name="nginx-${ngxVersion}.el${elVersion}.ngx.src.rpm"
src_package_url="https://nginx.org/packages/centos/${elVersion}/SRPMS/${src_package_name}"
wget ${src_package_url}
rpm -i ${src_package_name}
}
buildHttpgNginxRPM() {
if ! printenv CI_PROJECT_DIR > /dev/null; then
>&2 echo "CI_PROJECT_DIR is not set in the environment, assuming the current working directory '${PWD}'"
export CI_PROJECT_DIR="${PWD}"
fi
sh ${CI_PROJECT_DIR}/rpm/addPatchToNginxSpec.sh
# build rpm
rpmlint ~/rpmbuild/SPECS/nginx.spec
rpmbuild -ba ~/rpmbuild/SPECS/nginx.spec
}
buildVomsModuleRPM() {
if [ -z ${CI_PROJECT_DIR} ]; then
CI_PROJECT_DIR="/workspaces/ngx_http_voms_module"
fi
# set voms modules sources
cd ~/rpmbuild/SOURCES/
mkdir ngx-http-voms-module
cp ${CI_PROJECT_DIR}/config ngx-http-voms-module/
cp ${CI_PROJECT_DIR}/config.make ngx-http-voms-module/
cp -r ${CI_PROJECT_DIR}/src ngx-http-voms-module/
cp ${CI_PROJECT_DIR}/rpm/nginx-module-http-voms.spec ~/rpmbuild/SPECS
# build rpm
rpmlint ~/rpmbuild/SPECS/nginx-module-http-voms.spec
rpmbuild -ba ~/rpmbuild/SPECS/nginx-module-http-voms.spec
cd ${CI_PROJECT_DIR}
}
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright 2018-2022 Istituto Nazionale di Fisica Nucleare # Copyright 2018-2023 Istituto Nazionale di Fisica Nucleare
# SPDX-License-Identifier: EUPL-1.2 # SPDX-License-Identifier: EUPL-1.2
set -ex set -ex
yum -y install \ dnf install -y epel-release
https://repo.ius.io/ius-release-el7.rpm \ dnf update -y
centos-release-scl \
epel-release
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo dnf install -y --setopt=tsflags=nodocs \
yum -y install \
hostname \
which \ which \
wget \ wget \
tar \
sudo \ sudo \
file \ file \
less \ git \
git236 \
devtoolset-10 \
gcc-c++ \ gcc-c++ \
GeoIP-devel \
gd-devel \ gd-devel \
gettext \ gettext \
ccache \ ccache \
libxslt-devel \ libxslt-devel \
lcov \ lcov \
perl-ExtUtils-Embed \ perl-ExtUtils-Embed \
perl-Test-Nginx \
perl-Digest-SHA \ perl-Digest-SHA \
readline-devel \ readline-devel \
boost-devel \ boost-devel \
voms-devel \ voms-devel \
make \ make \
patch \ patch \
openssl \
zlib-devel \ zlib-devel \
pcre2-devel \ pcre2-devel \
rpmdevtools \ rpmdevtools \
rpmlint \ rpmlint \
cpan \ cpan \
voms-clients-java voms-clients-cpp
\ No newline at end of file \ No newline at end of file
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright 2018-2022 Istituto Nazionale di Fisica Nucleare # Copyright 2018-2023 Istituto Nazionale di Fisica Nucleare
# SPDX-License-Identifier: EUPL-1.2 # SPDX-License-Identifier: EUPL-1.2
USERNAME=${1} USERNAME=${1}
......
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
.vscode .vscode
servroot* servroot*
nginx nginx
docker/artifacts docker/artifacts
\ No newline at end of file node_modules
t/*
!t/README.md
!t/*.t
!t/setup.sh
!t/conf.d
!t/proxies.d
!t/openssl.conf
!t/socket.js
stages: stages:
- build-nginx-httpg-rpm - build
- build-voms-module-rpm - docker-build
- docker-build-ngx-httpg-voms - docker-push
build-ngx-httpg-rpm: build-rpms-el8:
stage: build-nginx-httpg-rpm stage: build
image: centos:7 image: almalinux:8
script: script:
- env | sort - env | sort
- yum install -y wget openssl-devel zlib-devel pcre2-devel make rpmdevtools rpmlint - dnf -y install epel-release
- sh rpm/build-httpg-nginx-rpm.sh - dnf install -y wget openssl-devel zlib-devel pcre2-devel make rpmdevtools rpmlint boost-devel voms-devel gcc-c++
- cd ${CI_PROJECT_DIR} && mkdir ngx-artifacts - source .devcontainer/assets/build-library.sh
- cp ~/rpmbuild/SRPMS/* ngx-artifacts/ - CI_PROJECT_DIR=$PWD
- cp ~/rpmbuild/RPMS/x86_64/* ngx-artifacts/ - downloadNginx
- buildHttpgNginxRPM
- buildVomsModuleRPM
- cd ${CI_PROJECT_DIR}/docker && mkdir artifacts
- cp ~/rpmbuild/SRPMS/* artifacts/
- cp ~/rpmbuild/RPMS/x86_64/* artifacts/
artifacts: artifacts:
paths: paths:
- ngx-artifacts/ - docker/artifacts/
build-ngx-voms-module-rpm: build-rpms-el9:
stage: build-voms-module-rpm stage: build
image: centos:7 image: almalinux:9
script: script:
- env | sort - env | sort
- yum -y install epel-release - dnf -y install epel-release
- yum install -y wget openssl-devel zlib-devel pcre2-devel make rpmdevtools rpmlint boost-devel voms-devel gcc-c++ - dnf install -y wget openssl-devel zlib-devel pcre2-devel make rpmdevtools rpmlint boost-devel voms-devel gcc-c++
- sh rpm/build-voms-rpm.sh - source .devcontainer/assets/build-library.sh
- cd ${CI_PROJECT_DIR} && mkdir voms-artifacts - CI_PROJECT_DIR=$PWD
- cp ~/rpmbuild/SRPMS/* voms-artifacts/ - downloadNginx
- cp ~/rpmbuild/RPMS/x86_64/* voms-artifacts/ - buildHttpgNginxRPM
- buildVomsModuleRPM
- cd ${CI_PROJECT_DIR}/docker && mkdir artifacts
- cp ~/rpmbuild/SRPMS/* artifacts/
- cp ~/rpmbuild/RPMS/x86_64/* artifacts/
artifacts: artifacts:
paths: paths:
- voms-artifacts/ - docker/artifacts/
build-ngx-httpg-voms-module-container: docker-build-rpms:
stage: docker-build-ngx-httpg-voms stage: docker-build
image: docker:latest image: docker:latest
services: services:
- name: docker:dind - name: docker:dind
command: ["--tls=false"] command: ["--tls=false"]
dependencies: dependencies:
- build-ngx-httpg-rpm - build-rpms-el8
- build-ngx-voms-module-rpm - build-rpms-el9
script: script:
- apk add git bash - apk add git bash
- git clone https://baltig.infn.it/mw-devel/helper-scripts.git helper-scripts - git clone https://baltig.infn.it/mw-devel/helper-scripts.git helper-scripts
- cp helper-scripts/scripts/* /usr/local/bin - cp helper-scripts/scripts/* /usr/local/bin
- mkdir ${CI_PROJECT_DIR}/docker/artifacts/
- cp ${CI_PROJECT_DIR}/ngx-artifacts/*.x86_64.rpm ${CI_PROJECT_DIR}/docker/artifacts/
- cp ${CI_PROJECT_DIR}/voms-artifacts/*.x86_64.rpm ${CI_PROJECT_DIR}/docker/artifacts/
- rm ${CI_PROJECT_DIR}/docker/artifacts/*-debuginfo*.rpm - rm ${CI_PROJECT_DIR}/docker/artifacts/*-debuginfo*.rpm
- docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY} - docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
- export DOCKER_REGISTRY_HOST=${CI_REGISTRY} - export DOCKER_REGISTRY_HOST=${CI_REGISTRY}
- export DOCKER_REGISTRY_NAMESPACE=${CI_PROJECT_PATH} - export DOCKER_REGISTRY_NAMESPACE=${CI_PROJECT_PATH}
- cd docker && build-docker-image.sh && push-docker-image.sh - cd docker && build-docker-image.sh && push-docker-image.sh
push-to-dockerhub:
stage: docker-push
image: docker:latest
services:
- name: docker:dind
command: ["--tls=false"]
dependencies:
- docker-build-rpms
script:
- apk add git bash
- git clone https://baltig.infn.it/mw-devel/helper-scripts.git helper-scripts
- cp helper-scripts/scripts/* /usr/local/bin
- export DOCKER_PUSH_TO_DOCKERHUB=y
- env | sort
- docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
- export DOCKER_REGISTRY_HOST=${CI_REGISTRY}
- export DOCKER_REGISTRY_NAMESPACE=${CI_PROJECT_PATH}
- cd docker && pull-docker-image.sh && unset DOCKER_REGISTRY_HOST
- docker login -u ${DOCKERHUB_USER} -p ${DOCKERHUB_PASSWORD} && push-docker-image.sh
only:
- master
# ngx_http_voms_module # `ngx_http_voms_module`
[![pipeline status](https://baltig.infn.it/storm2/ngx_http_voms_module/badges/master/pipeline.svg)](https://baltig.infn.it/storm2/ngx_http_voms_module/commits/master) [![pipeline status](https://baltig.infn.it/cnafsd/ngx_http_voms_module/badges/master/pipeline.svg)](https://baltig.infn.it/cnafsd/ngx_http_voms_module/commits/master)
## Description ## Description
*ngx_http_voms_module* is a module for the [Nginx web server](https://www.nginx.org/) that enables client-side authentication based on X.509 proxy certificates augmented with VOMS Attribute Certificates, typically obtained from a [Virtual Organization Membership Service](https://italiangrid.github.io/voms/) (VOMS) server. `ngx_http_voms_module` is a module for the [Nginx web server](https://www.nginx.org/) that enables client-side authentication based on X.509 proxy certificates augmented with VOMS Attribute Certificates, typically obtained from a [Virtual Organization Membership Service](https://italiangrid.github.io/voms/) (VOMS) server.
The module defines a set of [*embedded* variables](#embedded-variables), whose values are extracted from the first Attribute Certificate found in the certificate chain. The module defines a set of *embedded* variables, whose values are extracted from the first Attribute Certificate found in the certificate chain.
## Installation ### Embedded Variables
The generic installation instructions are:
```shell
$ cd nginx-x.y.z
$ ./configure --add-module=/path/to/ngx_http_voms_module
$ make && make install
```
The module is written in C++, using features from C++14 that are supported by gcc v. 4.8.5 (the version available in CentOS 7) enabling the option `-std=c++1y` (see [`config.make`](config.make)).
A Docker image is available for use in the context of the StoRM2 project, where the OpenResty distribution is used:
```shell
$ docker run --rm -it -v /path/to/ngx_http_voms_module:/home/build/ngx_http_voms_module storm2/ngx-voms-build
$ cd openresty-x.y.z
$ ./configure ${RESTY_CONFIG_OPTIONS} --add-module=../ngx_http_voms_module
$ make && make install
```
## Embedded Variables
The module makes the following embedded variables available for use in an Nginx configuration file: The module makes the following embedded variables available for use in an Nginx configuration file:
### voms_user #### voms_user
The Subject of the End-Entity certificate, used to sign the proxy. The Subject of the End-Entity certificate, used to sign the proxy.
_Example_: ``/C=IT/O=IGI/CN=test0`` _Example_: ``/C=IT/O=IGI/CN=test0``
### ssl_client_ee_s_dn #### ssl_client_ee_s_dn
Like `voms_user`, the Subject of the End-Entity certificate. Unlike `voms_user`, it is available even for non-VOMS proxies and is formatted according to RFC 2253. Like `voms_user`, the Subject of the End-Entity certificate. Unlike `voms_user`, it is available even for non-VOMS proxies and is formatted according to RFC 2253.
_Example_: `CN=test0,O=IGI,C=IT` _Example_: `CN=test0,O=IGI,C=IT`
### voms_user_ca #### voms_user_ca
The Issuer (Certificate Authority) of the End-Entity certificate. The Issuer (Certificate Authority) of the End-Entity certificate.
_Example_: `/C=IT/O=IGI/CN=Test CA` _Example_: `/C=IT/O=IGI/CN=Test CA`
### ssl_client_ee_i_dn #### ssl_client_ee_i_dn
Like `voms_user_ca`, the Issuer of the End-Entity certificate. Unlike `voms_user_ca`, it is available even for non-VOMS proxies and is formatted according to RFC 2253. Like `voms_user_ca`, the Issuer of the End-Entity certificate. Unlike `voms_user_ca`, it is available even for non-VOMS proxies and is formatted according to RFC 2253.
_Example_: `CN=Test CA,O=IGI,C=IT` _Example_: `CN=Test CA,O=IGI,C=IT`
### voms_fqans #### voms_fqans
A comma-separated list of Fully Qualified Attribute Names. See [The VOMS Attribute Certificate Format](http://ogf.org/documents/GFD.182.pdf) for more details. A comma-separated list of Fully Qualified Attribute Names. See [The VOMS Attribute Certificate Format](http://ogf.org/documents/GFD.182.pdf) for more details.
_Example_: `/test.vo/exp1,/test.vo/exp2,/test.vo/exp3/Role=PIPPO` _Example_: `/test.vo/exp1,/test.vo/exp2,/test.vo/exp3/Role=PIPPO`
### voms_server #### voms_server
The Subject of the VOMS server certificate, used to sign the Attribute Certificate. The Subject of the VOMS server certificate, used to sign the Attribute Certificate.
_Example_: `/C=IT/O=IGI/CN=voms.example` _Example_: `/C=IT/O=IGI/CN=voms.example`
### voms_server_ca #### voms_server_ca
The Issuer (Certificate Authority) of the VOMS server certificate. The Issuer (Certificate Authority) of the VOMS server certificate.
_Example_: `/C=IT/O=IGI/CN=Test CA` _Example_: `/C=IT/O=IGI/CN=Test CA`
### voms_vo #### voms_vo
The name of the Virtual Organization (VO) to which the End Entity belongs. The name of the Virtual Organization (VO) to which the End Entity belongs.
_Example_: `test.vo` _Example_: `test.vo`
### voms_server_uri #### voms_server_uri
The hostname and port of the VOMS network service that issued the Attribute Certificate, in the form _hostname_ :_port_. The hostname and port of the VOMS network service that issued the Attribute Certificate, in the form _hostname_ :_port_.
_Example_: `voms.example:15000` _Example_: `voms.example:15000`
### voms_not_before #### voms_not_before
The date before which the Attribute Certificate is not yet valid, in the form _YYYYMMDDhhmmss_ `Z`. The date before which the Attribute Certificate is not yet valid, in the form _YYYYMMDDhhmmss_ `Z`.
_Example_: `20180101000000Z` _Example_: `20180101000000Z`
### voms_not_after #### voms_not_after
The date after which the Attribute Certificate is not valid anymore, in the form _YYYYMMDDhhmmss_ `Z`. The date after which the Attribute Certificate is not valid anymore, in the form _YYYYMMDDhhmmss_ `Z`.
_Example_: `20180101120000Z` _Example_: `20180101120000Z`
### voms_generic_attributes #### voms_generic_attributes
A comma-separated list of attributes, each defined by three properties and formatted as `n=`_name_ `v=`_value_ `q=`_qualifier_. The qualifier typically coincides with the name of the VO. A comma-separated list of attributes, each defined by three properties and formatted as `n=`_name_ `v=`_value_ `q=`_qualifier_. The qualifier typically coincides with the name of the VO.
_Example_: `n=nickname v=newland q=test.vo,n=nickname v=giaco q=test.vo` _Example_: `n=nickname v=newland q=test.vo,n=nickname v=giaco q=test.vo`
### voms_serial #### voms_serial
The serial number of the Attribute Certificate in hexadecimal format. The serial number of the Attribute Certificate in hexadecimal format.
_Example_: `7B` _Example_: `7B`
## Installation
### prerequisites
The software dependecies are listed in the [provide-deps](docker/library-scripts/provide-deps.sh) script in the `docker` directory.
The nginx source files are also needed. To download them in ```/tmp/nginx-x.y.z``` you can execute:
```shell
$ ngxVersion=<version>
$ wget -O /tmp/nginx-$ngxVersion.tar.gz https://nginx.org/download/nginx-$ngxVersion.tar.gz
$ cd /tmp && tar -xzvf /tmp/nginx-$ngxVersion.tar.gz && cd -
```
### Generic installation
The generic installation instructions are:
```shell
$ cd /tmp/nginx-x.y.z
$ ./configure --add-module=/path/to/ngx_http_voms_module
$ make && make install
```
### Docker container
A Docker image with nginx and the `ngx_http_voms_module` is available, you can find it [here](https://hub.docker.com/r/cnafsd/nginx-httpg-voms).
### For the developers
A [.devcontainer](.devcontainer) is provided for the developers with all the instructions on how to use it, how to build the rpm module and how to install it.
## Testing ## Testing
Setup and files to test the *ngx_http_voms_module* are contained in the [`t`](t) folder. Setup and files to test the `ngx_http_voms_module` are contained in the [`t`](t) folder.
echo "objs/addon/src/ngx_http_voms_module.o: CFLAGS += --std=c++1y -Werror" >> $NGX_MAKEFILE echo "objs/addon/src/ngx_http_voms_module.o: CFLAGS += -Werror" >> $NGX_MAKEFILE
DOCKER_IMAGE=storm2/nginx-httpg-voms DOCKER_IMAGE=cnafsd/nginx-httpg-voms
DOCKER_VERBOSE=y DOCKER_VERBOSE=y
DOCKER_GIT_TAG_ENABLED=y DOCKER_GIT_TAG_ENABLED=y
# Copyright 2018-2022 Istituto Nazionale di Fisica Nucleare # Copyright 2018-2023 Istituto Nazionale di Fisica Nucleare
# SPDX-License-Identifier: EUPL-1.2 # SPDX-License-Identifier: EUPL-1.2
FROM centos:7 ARG EL_VERSION=9
FROM almalinux:${EL_VERSION}
# https://docs.docker.com/reference/dockerfile/#understand-how-arg-and-from-interact
ARG EL_VERSION
# Allow customization of nginx user ID and name # Allow customization of nginx user ID and name
ARG USERNAME=nginx ARG USERNAME=nginx
...@@ -10,26 +15,29 @@ ARG USER_GID=${USER_UID} ...@@ -10,26 +15,29 @@ ARG USER_GID=${USER_UID}
# install dependencies # install dependencies
COPY library-scripts/*.sh /tmp/library-scripts/ COPY library-scripts/*.sh /tmp/library-scripts/
RUN yum update -y && \ RUN dnf update -y && \
sh /tmp/library-scripts/provide-deps.sh && \ sh /tmp/library-scripts/provide-deps.sh && \
sh /tmp/library-scripts/provide-user.sh ${USERNAME} ${USER_UID} ${USER_GID} && \ sh /tmp/library-scripts/provide-user.sh ${USERNAME} ${USER_UID} ${USER_GID} && \
mkdir /pkgs && \ mkdir /pkgs && \
yum clean all && rm -rf /var/cache/yum dnf clean all && rm -rf /var/cache/dnf
COPY artifacts/*.rpm /pkgs/ COPY artifacts/*.rpm /pkgs/
COPY nginx.repo /etc/yum.repos.d/nginx.repo
# install nginx httpg + voms and njs dynamic modules # install nginx httpg + voms and njs dynamic modules (latest version)
RUN rpm -ivh /pkgs/nginx-httpg-1.22.1-1.el7.ngx.x86_64.rpm && \ COPY nginx.repo /etc/yum.repos.d/nginx.repo
rpm -ivh /pkgs/nginx-module-http-voms-1.22.1-1.el7.x86_64.rpm && \ RUN rpm -ivh /pkgs/nginx-*.el${EL_VERSION}.httpg.x86_64.rpm && \
yum install -y nginx-module-njs rpm -ivh /pkgs/nginx-module-http-voms-*.el${EL_VERSION}.x86_64.rpm && \
dnf install -y nginx-module-njs \
# forward request and error logs to docker log collector
&& ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
# install nginx + voms and njs dynamic modules # install nginx + voms and njs dynamic modules
# RUN yum -y install nginx nginx-module-njs && \ # RUN dnf -y install nginx nginx-module-njs && \
# rpm -ivh /pkgs/nginx-module-http-voms-1.22.1-1.el7.x86_64.rpm # rpm -ivh /pkgs/nginx-module-http-voms-1.24.0-1.el${EL_VERSION}.x86_64.rpm
EXPOSE 80 EXPOSE 80
STOPSIGNAL SIGQUIT STOPSIGNAL SIGQUIT
CMD ["nginx", "-g", "daemon off;"] CMD ["nginx", "-g", "daemon off;"]
\ No newline at end of file
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright 2018-2022 Istituto Nazionale di Fisica Nucleare # Copyright 2018-2023 Istituto Nazionale di Fisica Nucleare
# SPDX-License-Identifier: EUPL-1.2 # SPDX-License-Identifier: EUPL-1.2
set -ex set -ex
yum -y install epel-release dnf -y install epel-release wget
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
yum -y install \ # https://openresty.org/en/linux-packages.html#centos
wget https://openresty.org/package/centos/openresty2.repo
mv openresty2.repo /etc/yum.repos.d/openresty.repo
dnf config-manager --set-enabled crb
dnf -y install \
hostname \ hostname \
which \ which \
wget \
tar \ tar \
sudo \ sudo \
file \ file \
...@@ -31,4 +34,5 @@ yum -y install \ ...@@ -31,4 +34,5 @@ yum -y install \
perl-Test-Nginx \ perl-Test-Nginx \
perl-Digest-SHA \ perl-Digest-SHA \
cpan \ cpan \
voms-clients-java voms-clients-cpp \
\ No newline at end of file procps-ng
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright 2018-2022 Istituto Nazionale di Fisica Nucleare # Copyright 2018-2023 Istituto Nazionale di Fisica Nucleare
# SPDX-License-Identifier: EUPL-1.2 # SPDX-License-Identifier: EUPL-1.2
USERNAME=${1} USERNAME=${1}
......
[nginx-stable] [nginx-stable]
name=nginx stable repo name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/ baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1 gpgcheck=1
enabled=1 enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key gpgkey=https://nginx.org/keys/nginx_signing.key
...@@ -8,7 +8,7 @@ module_hotfixes=true ...@@ -8,7 +8,7 @@ module_hotfixes=true
[nginx-mainline] [nginx-mainline]
name=nginx mainline repo name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/ baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1 gpgcheck=1
enabled=0 enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key gpgkey=https://nginx.org/keys/nginx_signing.key
......
#!/usr/bin/env bash
set -ex
# Add the httpg patch
# Set the nginx spec file with the httpg patch
PATCH_NAME="nginx-httpg_no_delegation.patch"
SPEC_FILE="${HOME}/rpmbuild/SPECS/nginx.spec"
if grep --extended-regexp --quiet "^Patch.*: $PATCH_NAME" "$SPEC_FILE"; then
>&2 echo "The patch $PATCH_NAME is already included in the spec file $SPEC_FILE"
exit 0
fi
# Copy the patch in the rpmbuild directory
cp ${CI_PROJECT_DIR}/${PATCH_NAME} ~/rpmbuild/SOURCES/
pushd ~/rpmbuild/SOURCES/
# Find the highest existing Patch number in the spec file
LAST_PATCH_NUM=$(grep -oP "^Patch\K[0-9]+" $SPEC_FILE | sort -n | tail -1)
if [ -z "$LAST_PATCH_NUM" ]; then
# There are no existing patches: find the highest Source number in the spec file
LAST_SOURCE_NUM=$(grep -oP "^Source\K[0-9]+" $SPEC_FILE | sort -n | tail -1)
# Add the patch to the spec file after the last Source
sed -i.backup "/^Source${LAST_SOURCE_NUM}/a Patch0: ${PATCH_NAME}" "${SPEC_FILE}"
else
# Add the new patch to the spec file after the last Patch
sed -i.backup "/^Patch${LAST_PATCH_NUM}/a Patch$((LAST_PATCH_NUM + 1)): ${PATCH_NAME}" "${SPEC_FILE}"
fi
# Add httpg to release
sed -i '/%define base_release/ s/ngx/httpg/' "${SPEC_FILE}"
diff "${SPEC_FILE}.backup" "${SPEC_FILE}" || true
popd
#!/usr/bin/env bash
# Copyright 2018-2022 Istituto Nazionale di Fisica Nucleare
# SPDX-License-Identifier: EUPL-1.2
set -ex
ngxVersion=1.22.1
# set environment to build rpm
rpmdev-setuptree
cat <<EOF > ${HOME}/.rpmmacros
%_topdir %{getenv:HOME}/rpmbuild
EOF
# download nginx sources
cd ~/rpmbuild/SOURCES/
wget http://nginx.org/packages/centos/7/SRPMS/nginx-$ngxVersion-1.el7.ngx.src.rpm
rpm2cpio nginx-$ngxVersion-1.el7.ngx.src.rpm | cpio -idm
# set the nginx spec file with the httpg patch
cp ${CI_PROJECT_DIR}/nginx-httpg_no_delegation.patch ${HOME}/rpmbuild/SOURCES/
cp ${CI_PROJECT_DIR}/rpm/nginx.spec ~/rpmbuild/SPECS
# build rpm
rpmlint ~/rpmbuild/SPECS/nginx.spec
rpmbuild -ba ~/rpmbuild/SPECS/nginx.spec
mv ~/rpmbuild/RPMS/x86_64/nginx-1.22.1-1.el7.ngx.x86_64.rpm ~/rpmbuild/RPMS/x86_64/nginx-httpg-1.22.1-1.el7.ngx.x86_64.rpm
mv ~/rpmbuild/RPMS/x86_64/nginx-debuginfo-1.22.1-1.el7.ngx.x86_64.rpm ~/rpmbuild/RPMS/x86_64/nginx-httpg-debuginfo-1.22.1-1.el7.ngx.x86_64.rpm
mv ~/rpmbuild/SRPMS/nginx-1.22.1-1.el7.ngx.src.rpm ~/rpmbuild/SRPMS/nginx-httpg-1.22.1-1.el7.ngx.src.rpm
\ No newline at end of file
#!/usr/bin/env bash
# Copyright 2018-2022 Istituto Nazionale di Fisica Nucleare
# SPDX-License-Identifier: EUPL-1.2
set -ex
ngxVersion=1.22.1
# set environment to build rpm
rpmdev-setuptree
cat <<EOF > ${HOME}/.rpmmacros
%_topdir %{getenv:HOME}/rpmbuild
EOF
# set sources
cd ~/rpmbuild/SOURCES
wget -O nginx-$ngxVersion.tar.gz https://nginx.org/download/nginx-$ngxVersion.tar.gz
# set voms modules sources
mkdir ngx-http-voms-module
cp ${CI_PROJECT_DIR}/config ngx-http-voms-module/
cp ${CI_PROJECT_DIR}/config.make ngx-http-voms-module/
cp -r ${CI_PROJECT_DIR}/src ngx-http-voms-module/
cp ${CI_PROJECT_DIR}/rpm/nginx-module-http-voms.spec ~/rpmbuild/SPECS
# build and install rpm
rpmlint ~/rpmbuild/SPECS/nginx-module-http-voms.spec
rpmbuild -ba ~/rpmbuild/SPECS/nginx-module-http-voms.spec
%define nginx_user nginx %define nginx_user nginx
%define nginx_group nginx %define nginx_group nginx
%define base_version 1.22.1 %define base_version 1.26.2
%define bdir %{_builddir}/%{name}-%{base_version} %define bdir %{_builddir}/%{name}-%{base_version}
Name: nginx-module-http-voms Name: nginx-module-http-voms
Version: 1.22.1 Version: %{base_version}
Release: 1%{?dist} Release: 1%{?dist}
Summary: nginx http voms dynamic modules Summary: nginx http voms dynamic modules
License: EUPL-1.2 License: EUPL-1.2
URL: https://github.com/lauracappelli/nginx-sd-rpm URL: https://baltig.infn.it/cnafsd/ngx_http_voms_module
Source0: https://nginx.org/download/nginx-%{base_version}.tar.gz Source0: https://nginx.org/download/nginx-%{base_version}.tar.gz
Source1: ngx-http-voms-module Source1: ngx-http-voms-module
...@@ -76,7 +76,7 @@ and reload nginx: ...@@ -76,7 +76,7 @@ and reload nginx:
load_module modules/ngx_http_voms_module.so; load_module modules/ngx_http_voms_module.so;
Please refer to the modules documentation for further details: Please refer to the modules documentation for further details:
https://baltig.infn.it/storm2/ngx_http_voms_module https://baltig.infn.it/cnafsd/ngx_http_voms_module
---------------------------------------------------------------------- ----------------------------------------------------------------------
BANNER BANNER
...@@ -84,5 +84,11 @@ fi ...@@ -84,5 +84,11 @@ fi
%changelog %changelog
* Fri Oct 18 2024 Francesco Giacomini
- nginx http voms module updated to 1.26.2-1.0.0
* Wed Apr 12 2023 Laura Cappelli
- nginx http voms module updated to 1.24.0-1.0.0
* Fri Nov 18 2022 Laura Cappelli * Fri Nov 18 2022 Laura Cappelli
- nginx http voms module updated to 1.22.1-1.0.0 - nginx http voms module updated to 1.22.1-1.0.0
\ No newline at end of file
This diff is collapsed.