mirror of
				https://github.com/bashclub/zamba-lxc-toolbox.git
				synced 2025-11-04 08:02:28 +01:00 
			
		
		
		
	Merge branch 'dev' of github.com:bashclub/zamba-lxc-toolbox into dev
This commit is contained in:
		
							
								
								
									
										29
									
								
								src/apt/constants-service.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/apt/constants-service.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Authors:
 | 
				
			||||||
 | 
					# (C) 2021 Idea an concept by Christian Zengel <christian@sysops.de>
 | 
				
			||||||
 | 
					# (C) 2021 Script design and prototype by Markus Helmke <m.helmke@nettwarker.de>
 | 
				
			||||||
 | 
					# (C) 2021 Script rework and documentation by Thorsten Spille <thorsten@spille-edv.de>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This file contains the project constants on service level
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Debian Version, which will be installed
 | 
				
			||||||
 | 
					LXC_TEMPLATE_VERSION="debian-12-standard"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create sharefs mountpoint
 | 
				
			||||||
 | 
					LXC_MP="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create unprivileged container
 | 
				
			||||||
 | 
					LXC_UNPRIVILEGED="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# enable nesting feature
 | 
				
			||||||
 | 
					LXC_NESTING="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# enable keyctl feature
 | 
				
			||||||
 | 
					LXC_KEYCTL="0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Sets the minimum amount of RAM the service needs for operation
 | 
				
			||||||
 | 
					LXC_MEM_MIN=1024
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# service dependent meta tags
 | 
				
			||||||
 | 
					SERVICE_TAGS="aptly,nginx"
 | 
				
			||||||
							
								
								
									
										170
									
								
								src/apt/install-service.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								src/apt/install-service.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,170 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Authors:
 | 
				
			||||||
 | 
					# (C) 2021 Idea an concept by Christian Zengel <christian@sysops.de>
 | 
				
			||||||
 | 
					# (C) 2021 Script design and prototype by Markus Helmke <m.helmke@nettwarker.de>
 | 
				
			||||||
 | 
					# (C) 2021 Script rework and documentation by Thorsten Spille <thorsten@spille-edv.de>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					source /root/functions.sh
 | 
				
			||||||
 | 
					source /root/zamba.conf
 | 
				
			||||||
 | 
					source /root/constants-service.conf
 | 
				
			||||||
 | 
					source /etc/os-release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					apt update
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical apt install --no-install-recommends -y -qq aptly python3-aptly nginx graphviz gnupg2 apt-transport-https bc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create gpg key for apt repo signing
 | 
				
			||||||
 | 
					gpg --batch --gen-key <<EOF
 | 
				
			||||||
 | 
					Key-Type: 1
 | 
				
			||||||
 | 
					Key-Length: 4096
 | 
				
			||||||
 | 
					Subkey-Type: 1
 | 
				
			||||||
 | 
					Subkey-Length: 4096
 | 
				
			||||||
 | 
					Name-Real: ${AM_COMPANY_NAME}
 | 
				
			||||||
 | 
					Name-Email: ${AM_COMPANY_EMAIL}
 | 
				
			||||||
 | 
					Expire-Date: 0
 | 
				
			||||||
 | 
					%no-protection
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -f /etc/nginx/sites-enabled/default ]; then
 | 
				
			||||||
 | 
					  unlink /etc/nginx/sites-enabled/default
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cat << EOF > /etc/aptly.conf
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "rootDir": "/$LXC_SHAREFS_MOUNTPOINT",
 | 
				
			||||||
 | 
					  "downloadConcurrency": 4,
 | 
				
			||||||
 | 
					  "downloadSpeedLimit": 0,
 | 
				
			||||||
 | 
					  "architectures": [
 | 
				
			||||||
 | 
					        "amd64",
 | 
				
			||||||
 | 
					        "armhf"
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "dependencyFollowSuggests": false,
 | 
				
			||||||
 | 
					  "dependencyFollowRecommends": false,
 | 
				
			||||||
 | 
					  "dependencyFollowAllVariants": false,
 | 
				
			||||||
 | 
					  "dependencyFollowSource": false,
 | 
				
			||||||
 | 
					  "dependencyVerboseResolve": true,
 | 
				
			||||||
 | 
					  "gpgDisableSign": false,
 | 
				
			||||||
 | 
					  "gpgDisableVerify": false,
 | 
				
			||||||
 | 
					  "gpgProvider": "gpg",
 | 
				
			||||||
 | 
					  "downloadSourcePackages": false,
 | 
				
			||||||
 | 
					  "skipLegacyPool": true,
 | 
				
			||||||
 | 
					  "ppaDistributorID": "$AM_COMPANY_NAME",
 | 
				
			||||||
 | 
					  "ppaCodename": ""
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cat << EOF > /etc/nginx/conf.d/default.conf
 | 
				
			||||||
 | 
					server {
 | 
				
			||||||
 | 
					        listen 80 default_server;
 | 
				
			||||||
 | 
					        listen [::]:80 default_server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Force HTTPS connection. This rules is domain agnostic
 | 
				
			||||||
 | 
					        if (\$scheme != "https") {
 | 
				
			||||||
 | 
					                rewrite ^ https://\$host\$uri permanent;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # SSL configuration
 | 
				
			||||||
 | 
					        #
 | 
				
			||||||
 | 
					        listen 443 ssl http2 default_server;
 | 
				
			||||||
 | 
					        listen [::]:443 ssl http2 default_server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
 | 
				
			||||||
 | 
					        ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ssl_protocols TLSv1.3;
 | 
				
			||||||
 | 
					        ssl_prefer_server_ciphers on;
 | 
				
			||||||
 | 
					        ssl_dhparam /etc/nginx/dhparam.pem;
 | 
				
			||||||
 | 
					        ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
 | 
				
			||||||
 | 
					        ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
 | 
				
			||||||
 | 
					        ssl_session_timeout  10m;
 | 
				
			||||||
 | 
					        ssl_session_cache shared:SSL:10m;
 | 
				
			||||||
 | 
					        ssl_session_tickets off; # Requires nginx >= 1.5.9
 | 
				
			||||||
 | 
					        ssl_stapling on; # Requires nginx >= 1.3.7
 | 
				
			||||||
 | 
					        ssl_stapling_verify on; # Requires nginx => 1.3.7
 | 
				
			||||||
 | 
					        resolver 15.137.208.11 15.137.209.11 valid=300s;
 | 
				
			||||||
 | 
					        resolver_timeout 5s;
 | 
				
			||||||
 | 
					        add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
 | 
				
			||||||
 | 
					        add_header X-Frame-Options DENY;
 | 
				
			||||||
 | 
					        add_header X-Content-Type-Options nosniff;
 | 
				
			||||||
 | 
					        add_header X-XSS-Protection "1; mode=block";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        root /var/www/html;
 | 
				
			||||||
 | 
					        index index.html index.htm;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        server_name _;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        location /gpg {
 | 
				
			||||||
 | 
					                autoindex on;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        location /graph {
 | 
				
			||||||
 | 
					                autoindex on;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        location / {
 | 
				
			||||||
 | 
					                # First attempt to serve request as file, then
 | 
				
			||||||
 | 
					                # as directory, then fall back to displaying a 404.
 | 
				
			||||||
 | 
					                #try_files \$uri \$uri/ =404;
 | 
				
			||||||
 | 
					                proxy_set_header Host \$host;
 | 
				
			||||||
 | 
					                proxy_set_header X-Real-IP \$remote_addr;
 | 
				
			||||||
 | 
					                proxy_pass http://localhost:8080;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        location /api {
 | 
				
			||||||
 | 
					                proxy_pass http://localhost:8000/api;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        location /api/graph {
 | 
				
			||||||
 | 
					                return 403;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cat << EOF > /etc/systemd/system/aptly.service
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					Description=Aptly Repository service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					User=root
 | 
				
			||||||
 | 
					ExecStart=/usr/bin/aptly serve -listen="localhost:8080"
 | 
				
			||||||
 | 
					KillSignal=SIGTERM
 | 
				
			||||||
 | 
					KillMode=process
 | 
				
			||||||
 | 
					TimeoutStopSec=15s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cat << EOF > /etc/systemd/system/aptly-api.service
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					Description=Aptly REST API service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					User=root
 | 
				
			||||||
 | 
					ExecStart=/usr/bin/aptly api serve -listen=unix:///var/run/aptly-api.sock -no-lock
 | 
				
			||||||
 | 
					KillSignal=SIGTERM
 | 
				
			||||||
 | 
					KillMode=process
 | 
				
			||||||
 | 
					TimeoutStopSec=15s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					chown -R www-data:www-data /$LXC_SHAREFS_MOUNTPOINT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					chown -R www-data:www-data /var/www
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create required webserver folders
 | 
				
			||||||
 | 
					sudo -u www-data mkdir -p /var/www/html/{gpg,graph}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Export gpg key
 | 
				
			||||||
 | 
					sudo -u www-data gpg --export --armor > /var/www/html/gpg/$AM_COMPANY_NAME.pub
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					generate_dhparam
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					systemctl daemon-reload
 | 
				
			||||||
 | 
					systemctl enable --now aptly aptly-api
 | 
				
			||||||
 | 
					systemctl restart nginx
 | 
				
			||||||
		Reference in New Issue
	
	Block a user