tis-remote-repo-nginx
1.3.1-21
Package for installing nginx for remote repositories agents
4334 downloads
Download
See build result See VirusTotal scan

- package : tis-remote-repo-nginx
- name : Remote Repository NGINX
- version : 1.3.1-21
- categories : System and network
- maintainer : WAPT Team,Tranquil IT,Hubert TOUVET,Evan BLAUDY,Jimmy PELÉ
- editor :
- licence :
- locale :
- target_os : linux
- impacted_process :
- architecture : all
- signature_date : 2022-03-23 11:50
- size : 10.62 Ko
- homepage : https://www.wapt.fr/en/doc/wapt-replication/index.html
- depends :
package : tis-remote-repo-nginx
version : 1.3.1-21
architecture : all
section : base
priority : optional
name : Remote Repository NGINX
categories : System and network
maintainer : WAPT Team,Tranquil IT,Hubert TOUVET,Evan BLAUDY,Jimmy PELÉ
description : Package for installing nginx for remote repositories agents
depends : tis-remote-repo-conf
conflicts :
maturity : PROD
locale :
target_os : linux
min_wapt_version : 1.8.2
sources : https://nginx.org/en/download.html
installed_size :
impacted_process :
description_fr :
description_pl :
description_de :
description_es :
description_pt :
description_it :
description_nl :
description_ru :
audit_schedule :
editor :
keywords :
licence :
homepage : https://www.wapt.fr/en/doc/wapt-replication/index.html
package_uuid : dacea952-e653-48db-acfd-2c90f2fbcca9
valid_from :
valid_until :
forced_install_on :
changelog : https://nginx.org/en/CHANGES
min_os_version :
max_os_version :
icon_sha256sum : cc84c091e5b69b2c2c902cba5f4e34ff5e71494f3f3d376fb640d5b68d242a56
signer : Tranquil IT
signer_fingerprint: 8c5127a75392be9cc9afd0dbae1222a673072c308c14d88ab246e23832e8c6bb
signature : QnMG0Dr0m/dRNXcm76Q45Q6EsUyvfMWo0OCqiUESVqoKCV1XyxYqk3hDpMAVm1PqK4Q7OadqqwCq0rjjTz2gySxqUJngmjdjDhERI3UD6gFO9/2hyRUMah2wrZM2HbGjyTLjQbRdCYn7CMfDM5SJr7jFUbEzPcmBWin4dRIKEylUtJ8Td1ku4ybHaL9PokKVidYyr183jHtrW6XmXPKJ0iesxj+rKRYD3UlekN9NBJVE9FQDwxUrOOdgdcW5aVycTWZmcSJ14VVS7PqecEX3a3lbgnXnWFfnxhLVqBLb+RX//hkQkHBK8mkYfmmzlylGBySrQwY4gaRbdt1eg8tT4Q==
signature_date : 2022-03-23T11:50:17.206489
signed_attributes : package,version,architecture,section,priority,name,categories,maintainer,description,depends,conflicts,maturity,locale,target_os,min_wapt_version,sources,installed_size,impacted_process,description_fr,description_pl,description_de,description_es,description_pt,description_it,description_nl,description_ru,audit_schedule,editor,keywords,licence,homepage,package_uuid,valid_from,valid_until,forced_install_on,changelog,min_os_version,max_os_version,icon_sha256sum,signer,signer_fingerprint,signature_date,signed_attributes
# -*- coding: utf-8 -*-
from setuphelpers import *
uninstallkey = []
def install():
import re
import nginxparser
import jinja2
import datetime
import subprocess
from waptcrypto import SSLCertificate,SSLPrivateKey
try:
import grp
except:
raise Exception("This package have to be installed on Linux")
def generate_dhparam(NGINX_GID):
dh_filename = '/etc/ssl/certs/dhparam.pem'
if not os.path.exists(dh_filename):
print(run('openssl dhparam -out %s 2048' % dh_filename))
os.chown(dh_filename, 0, NGINX_GID) #pylint: disable=no-member
os.chmod(dh_filename, 0o640) #pylint: disable=no-member
def selinux_rules(local_repo):
""" SELinux httpd security rules """
run('setsebool -P httpd_can_network_connect 1')
run('setsebool -P httpd_setrlimit on')
for sepath in ('wapt','wapt-host','waptwua'):
path = makepath(local_repo,sepath)
mkdirs(path)
try:
run('semanage fcontext -a -t httpd_sys_content_t "%s(/.*)?"' % (path))
except:
run('semanage fcontext -m -t httpd_sys_content_t "%s(/.*)?"' % (path))
run('restorecon -R -v %s' % (path))
def nginx_set_worker_limit(nginx_conf):
already_set=False
for entries in nginx_conf:
if entries[0]=='worker_rlimit_nofile':
print( "Nginx - worker_rlimit_nofile already set")
already_set=True
if not already_set:
nginx_conf.insert(3,['worker_rlimit_nofile', '32768'])
return nginx_conf
def make_httpd_config(waptservice_dir, fqdn, local_repo):
ssl_dir = makepath(waptservice_dir,'nginx','ssl')
scripts_dir = makepath(waptservice_dir, 'scripts')
wapt_ssl_key_file = makepath(ssl_dir,'key.pem')
wapt_ssl_cert_file = makepath(ssl_dir,'cert.pem')
# write the apache configuration fragment
jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader(scripts_dir))
template = jinja_env.get_template('wapt.nginxconfig.template')
template_vars = {
'wapt_repository_path': local_repo,
'windows': False,
'debian': type_debian(),
'redhat': type_redhat(),
'force_https': False,
'wapt_ssl_key_file': wapt_ssl_key_file,
'wapt_ssl_cert_file': wapt_ssl_cert_file,
'fqdn': fqdn,
'use_ssl_client_auth' : False,
'clients_signing_certificate' : False,
}
print('Nginx - creating wapt.conf virtualhost')
config_string = template.render(template_vars)
if type_debian():
dst_file_path = '/etc/nginx/sites-available/wapt.conf'
if not os.path.exists('/etc/nginx/sites-enabled/wapt.conf'):
print(run('ln -s /etc/nginx/sites-available/wapt.conf /etc/nginx/sites-enabled/wapt.conf'))
if os.path.exists('/etc/nginx/sites-enabled/default'):
os.unlink('/etc/nginx/sites-enabled/default')
elif type_redhat():
dst_file_path = '/etc/nginx/conf.d/wapt.conf'
with open(dst_file_path, 'wt') as dst_file:
dst_file.write(config_string)
# create keys for https:// access
if not os.path.exists(wapt_ssl_key_file) or not os.path.exists(wapt_ssl_cert_file):
print('Nginx - generate self-signed certs')
key = SSLPrivateKey(wapt_ssl_key_file)
if not os.path.isfile(wapt_ssl_key_file):
print('Create SSL RSA Key %s' % wapt_ssl_key_file)
key.create()
key.save_as_pem()
if os.path.isfile(wapt_ssl_cert_file):
crt = SSLCertificate(wapt_ssl_cert_file)
if crt.cn != fqdn:
os.rename(wapt_ssl_cert_file,"%s-%s.old" % (wapt_ssl_cert_file,'{:%Y%m%d-%Hh%Mm%Ss}'.format(datetime.datetime.now())))
crt = key.build_sign_certificate(cn=fqdn,dnsname=fqdn,is_code_signing=False)
print('Create X509 cert %s' % wapt_ssl_cert_file)
crt.save_as_pem(wapt_ssl_cert_file)
else:
crt = key.build_sign_certificate(cn=fqdn,dnsname=fqdn,is_code_signing=False)
print('Create X509 cert %s' % wapt_ssl_cert_file)
crt.save_as_pem(wapt_ssl_cert_file)
def nginx_clean_default_vhost(nginx_conf):
for entry in nginx_conf:
if entry[0]==['http']:
for subentry in entry[1]:
if subentry[0]==['server']:
print('Nginx - removing default vhost')
entry[1].remove(subentry)
return nginx_conf
def enable_nginx():
print(run('systemctl enable nginx'))
def restart_nginx():
print(run('systemctl restart nginx'))
def nginx_cleanup():
with open('/etc/nginx/nginx.conf','r') as read_conf:
nginx_conf = nginxparser.load(read_conf)
nginx_conf = nginx_set_worker_limit(nginx_conf)
nginx_conf = nginx_clean_default_vhost(nginx_conf)
with open("/etc/nginx/nginx.conf", "w") as nginx_conf_file:
nginx_conf_file.write(nginxparser.dumps(nginx_conf))
def setup_firewall():
""" Add permanent rules for firewalld """
if type_redhat():
output = run('firewall-cmd --list-ports')
if '443/tcp' in output and '80/tcp' in output:
print("Firewall already configured, skipping firewalld configuration")
elif subprocess.call(['firewall-cmd', '--state'], stdout=open(os.devnull, 'w')) == 0:
run('firewall-cmd --permanent --add-port=443/tcp')
run('firewall-cmd --permanent --add-port=80/tcp')
run('firewall-cmd --reload')
else:
run('firewall-offline-cmd --add-port=443/tcp')
run('firewall-offline-cmd --add-port=80/tcp')
print("Install nginx to permit WAPTAgent to become a repository")
if type_debian():
install_apt('nginx')
NGINX_GID = grp.getgrnam('www-data').gr_gid
elif type_redhat():
install_yum('nginx')
NGINX_GID = grp.getgrnam('nginx').gr_gid
else:
raise Exception("Distribution not supported yet")
print("Create WAPTService directories for nginx")
for dirname in ['nginx','scripts']:
mkdirs(makepath(WAPT.wapt_base_dir,'waptservice',dirname))
for dirname in ['ssl']:
mkdirs(makepath(WAPT.wapt_base_dir,'waptservice','nginx',dirname))
copytree2('scripts',makepath(WAPT.wapt_base_dir,'waptservice','scripts'))
local_repo = inifile_readstring(WAPT.config_filename,'repo-sync','local_repo_path') or makepath(WAPT.wapt_base_dir,'repository')
# SELinux rules for CentOS/RedHat
if type_redhat():
if re.match('^SELinux status:.*enabled', run('sestatus')):
print('Redhat/Centos detected, tweaking SELinux rules')
selinux_rules(local_repo)
print('Nginx - SELinux correctly configured for Nginx reverse proxy')
fqdn = get_fqdn()
# Nginx configuration
generate_dhparam(NGINX_GID)
nginx_cleanup()
make_httpd_config(makepath(WAPT.wapt_base_dir,'waptservice'), fqdn,local_repo)
print("Testing NGINX configuration")
run('nginx -t')
enable_nginx()
restart_nginx()
try:
setup_firewall()
except:
pass
def update_package():
# Initializing variables
version = control.version.split('-')[0]
# Incrementing version of the package
control.version = '%s-%s'%(version,int(control.version.split('-')[-1])+1)
control.save_control_to_wapt()
print('Changing package version to: %s in WAPT\\control' % control.version)
96d4a60bd9b13f8db52dcb92ec6703061f826abf2eb4dd18a623a7659904fe6d : setup.py
201fb8f3d2d6f21d7ed177afe64e7919b93c2ff0eb0e9b6f9fc1f44efc0860ae : scripts/wapt.nginxconfig.template
cc84c091e5b69b2c2c902cba5f4e34ff5e71494f3f3d376fb640d5b68d242a56 : WAPT/icon.png
a5a97261381e1d0ad46ee15916abec9c2631d0201f5cc50ceb0197a165a0bbbf : WAPT/certificate.crt
413da59f57731e6dd7368c81f5cd757e037d4b935e742d9e9e16f5a23ebd394e : luti.json
bb914c28bfd31cae21579e192cef4a40c2eb53fcd040d4c4582f58bf8025a431 : nginxparser.py
02fdb52143fd3a73024582d12be24bcf145565e6572914cbe09797e0f75e81de : WAPT/control