Add 'installbox' configuration.
This commit is contained in:
commit
546dabd7aa
16 changed files with 323 additions and 0 deletions
24
installbox.yml
Normal file
24
installbox.yml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
# This playbook deploys the installbox on a minimal installation.
|
||||||
|
|
||||||
|
- name: apply configuration to the installbox
|
||||||
|
hosts: installboxes
|
||||||
|
remote_user: ansible
|
||||||
|
become: yes
|
||||||
|
vars:
|
||||||
|
hostname: installbox
|
||||||
|
di_dist: "stretch"
|
||||||
|
if_lan: "ens8"
|
||||||
|
if_wan: "{{ ansible_default_ipv4.interface }}"
|
||||||
|
ipaddr_lan: 192.168.0.10
|
||||||
|
dhcp_range: 192.168.0.50,192.168.0.150,2h
|
||||||
|
tftp_root: "/var/lib/tftpboot"
|
||||||
|
deb_mirror: "ftp-stud.hs-esslingen.de"
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- up2date-debian
|
||||||
|
- two-interface-shorewall
|
||||||
|
- dhcp-dns-dnsmasq
|
||||||
|
- transparent-squid
|
||||||
|
- tftp-netboot-installer
|
||||||
|
- preseed-installer
|
3
roles/dhcp-dns-dnsmasq/handlers/main.yml
Normal file
3
roles/dhcp-dns-dnsmasq/handlers/main.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
- name: restart dnsmasq
|
||||||
|
service: name=dnsmasq state=restarted enabled=yes
|
||||||
|
listen: "restart dnsmasq"
|
10
roles/dhcp-dns-dnsmasq/tasks/main.yml
Normal file
10
roles/dhcp-dns-dnsmasq/tasks/main.yml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
- name: install dns-firewall packages
|
||||||
|
apt:
|
||||||
|
name: dnsmasq
|
||||||
|
state: latest
|
||||||
|
|
||||||
|
- name: configure dnsmasq
|
||||||
|
template:
|
||||||
|
src: dnsmasq-transparent-proxy.j2
|
||||||
|
dest: /etc/dnsmasq.d/transparent-proxy
|
||||||
|
notify: "restart dnsmasq"
|
|
@ -0,0 +1,2 @@
|
||||||
|
interface={{ if_lan }}
|
||||||
|
dhcp-range={{ dhcp_range }}
|
27
roles/preseed-installer/tasks/main.yml
Normal file
27
roles/preseed-installer/tasks/main.yml
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
- name: make preseed directory available
|
||||||
|
file:
|
||||||
|
path: "{{ tftp_root }}/d-i/{{ di_dist }}"
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: provide preseed file
|
||||||
|
template:
|
||||||
|
src: preseed.cfg
|
||||||
|
dest: "{{ tftp_root }}/d-i/{{ di_dist }}"
|
||||||
|
|
||||||
|
- name: make installbox resolvable in /etc/hosts from LAN
|
||||||
|
replace:
|
||||||
|
dest: /etc/hosts
|
||||||
|
regexp: '(127.0.1.1\s+)installbox'
|
||||||
|
replace: '\1localhost\n{{ ipaddr_lan }} installbox'
|
||||||
|
|
||||||
|
- name: add auto boot entry to di-netboot-assistant
|
||||||
|
blockinfile:
|
||||||
|
dest: /etc/di-netboot-assistant/pxelinux.HEAD
|
||||||
|
insertbefore: EOF
|
||||||
|
block: |
|
||||||
|
LABEL quick
|
||||||
|
MENU LABEL Debian Installer ({{ di_dist }} ; amd64 + Preseed)
|
||||||
|
kernel ::/di-netboot-pkg/images/9/amd64/text/debian-installer/amd64/linux
|
||||||
|
append initrd=::/di-netboot-pkg/images/9/amd64/text/debian-installer/amd64/initrd.gz auto=true priority=critical url=tftp://installbox
|
||||||
|
TIMEOUT 100
|
||||||
|
notify: "rebuild di-netboot-assistant menu"
|
37
roles/preseed-installer/templates/preseed.cfg
Normal file
37
roles/preseed-installer/templates/preseed.cfg
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
#### Preconfiguration file
|
||||||
|
## For more examples and comments:
|
||||||
|
## https://www.debian.org/releases/stable/example-preseed.txt
|
||||||
|
|
||||||
|
## To change default values:
|
||||||
|
#d-i foo/bar string value
|
||||||
|
#d-i foo/bar seen false
|
||||||
|
|
||||||
|
## Use this as boot parameter:
|
||||||
|
## DEBCONF_DEBUG=5
|
||||||
|
## Boot parameter locale?=de_DE
|
||||||
|
|
||||||
|
# Preseeding only locale sets language, country and locale:
|
||||||
|
d-i debian-installer/locale string de_DE
|
||||||
|
d-i keyboard-configuration/xkb-keymap select de
|
||||||
|
|
||||||
|
## Skip root account:
|
||||||
|
d-i passwd/root-login boolean false
|
||||||
|
|
||||||
|
### Apt setup
|
||||||
|
d-i apt-setup/non-free boolean true
|
||||||
|
d-i apt-setup/contrib boolean true
|
||||||
|
d-i mirror/http/mirror string {{ deb_mirror }}
|
||||||
|
|
||||||
|
### Ansible User
|
||||||
|
d-i passwd/user-fullname string Ansible User
|
||||||
|
d-i passwd/username string ansible
|
||||||
|
d-i passwd/user-password password insecure
|
||||||
|
d-i passwd/user-password-again password insecure
|
||||||
|
#d-i passwd/user-password-crypted password [crypt(3) hash]
|
||||||
|
|
||||||
|
### Package selection
|
||||||
|
tasksel tasksel/desktop multiselect standard openssh-server
|
||||||
|
tasksel tasksel/desktop seen false
|
||||||
|
|
||||||
|
# Individual additional packages to install
|
||||||
|
d-i pkgsel/include string firmware-linux
|
3
roles/tftp-netboot-installer/handlers/main.yml
Normal file
3
roles/tftp-netboot-installer/handlers/main.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
- name: rebuild di-netboot-assistant menu
|
||||||
|
command: di-netboot-assistant rebuild-menu
|
||||||
|
listen: rebuild di-netboot-assistant menu
|
28
roles/tftp-netboot-installer/tasks/main.yml
Normal file
28
roles/tftp-netboot-installer/tasks/main.yml
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
- name: install tftp-netboot-installer packages
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- di-netboot-assistant
|
||||||
|
- debian-installer-9-netboot-amd64
|
||||||
|
|
||||||
|
- name: bind mount images
|
||||||
|
mount:
|
||||||
|
name: "{{ tftp_root }}/di-netboot-pkg/"
|
||||||
|
src: /usr/lib/debian-installer/
|
||||||
|
fstype: none
|
||||||
|
opts: bind
|
||||||
|
# state: mounted BEGINN WORKAROUND
|
||||||
|
state: present
|
||||||
|
register: fstab
|
||||||
|
|
||||||
|
- name: Reload fstab
|
||||||
|
command: mount -a
|
||||||
|
when: fstab.changed
|
||||||
|
# https://github.com/ansible/ansible/issues/23487 END WORKAROUND
|
||||||
|
|
||||||
|
- name: configure dnsmasq
|
||||||
|
template:
|
||||||
|
src: dnsmasq-tftp-netboot-installer.j2
|
||||||
|
dest: /etc/dnsmasq.d/tftp-netboot-installer
|
||||||
|
notify:
|
||||||
|
- restart dnsmasq
|
||||||
|
- rebuild di-netboot-assistant menu
|
|
@ -0,0 +1,5 @@
|
||||||
|
enable-tftp
|
||||||
|
tftp-root={{ tftp_root }}
|
||||||
|
dhcp-boot=debian-installer/pxelinux.0
|
||||||
|
dhcp-match=set:efi-x86_64,option:client-arch,7
|
||||||
|
dhcp-boot=tag:efi-x86_64,debian-installer/bootnetx64.efi
|
2
roles/transparent-squid/files/store_id_regex.conf
Normal file
2
roles/transparent-squid/files/store_id_regex.conf
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
^http:\/\/.+\/(.+\.deb) http://debian.mirrors.squid.internal/Archive-http/$1
|
||||||
|
^http:\/\/.+\/(.+\.udeb) http://debian.mirrors.squid.internal/Archive-http/$1
|
3
roles/transparent-squid/handlers/main.yml
Normal file
3
roles/transparent-squid/handlers/main.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
- name: restart squid
|
||||||
|
service: name=squid state=restarted enabled=yes
|
||||||
|
listen: "restart squid"
|
62
roles/transparent-squid/tasks/main.yml
Normal file
62
roles/transparent-squid/tasks/main.yml
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
- name: install squid package
|
||||||
|
apt:
|
||||||
|
name: squid
|
||||||
|
state: latest
|
||||||
|
|
||||||
|
- name: configure squid extra lines
|
||||||
|
lineinfile:
|
||||||
|
dest: /etc/squid/squid.conf
|
||||||
|
line: "{{ item.line }}"
|
||||||
|
insertafter: "{{ item.insertafter }}"
|
||||||
|
with_items:
|
||||||
|
- { line: "acl localnet src 192.168.0.0/16", insertafter: "#acl localnet src 192.168.0.0/16" }
|
||||||
|
- { line: "http_access allow localnet", insertafter: "#http_access allow localnet" }
|
||||||
|
- { line: "http_port 3129 intercept", insertafter: "http_port 3128" }
|
||||||
|
- { line: "maximum_object_size_in_memory 10240 KB", insertafter: "# maximum_object_size_in_memory" }
|
||||||
|
- { line: "maximum_object_size 512 MB", insertafter: "# maximum_object_size" }
|
||||||
|
- { line: "cache_dir aufs /var/spool/squid 20000 16 256", insertafter: "#cache_dir ufs /var/spool/squid" }
|
||||||
|
notify: "restart squid"
|
||||||
|
|
||||||
|
- name: configure squid store IDs
|
||||||
|
blockinfile:
|
||||||
|
dest: /etc/squid/squid.conf
|
||||||
|
insertbefore: "TAG: store_miss"
|
||||||
|
block: |
|
||||||
|
store_id_program /usr/lib/squid/storeid_file_rewrite /etc/squid/store_id_regex.conf
|
||||||
|
store_id_bypass off
|
||||||
|
acl Ordinary http_status 200-299
|
||||||
|
send_hit deny !Ordinary
|
||||||
|
store_miss deny !Ordinary
|
||||||
|
marker: "# {mark} ANSIBLE MANAGED BLOCK store_id"
|
||||||
|
notify: "restart squid"
|
||||||
|
|
||||||
|
- name: provide store_id_regex.conf
|
||||||
|
copy:
|
||||||
|
src: store_id_regex.conf
|
||||||
|
dest: /etc/squid/store_id_regex.conf
|
||||||
|
notify: "restart squid"
|
||||||
|
|
||||||
|
- name: configure squid as package cache
|
||||||
|
blockinfile:
|
||||||
|
dest: /etc/squid/squid.conf
|
||||||
|
insertbefore: "# Add any of your own refresh_pattern entries above these."
|
||||||
|
block: |
|
||||||
|
# refresh pattern for debs and udebs
|
||||||
|
refresh_pattern deb$ 129600 100% 129600
|
||||||
|
refresh_pattern udeb$ 129600 100% 129600
|
||||||
|
refresh_pattern tar.gz$ 129600 100% 129600
|
||||||
|
refresh_pattern tar.xz$ 129600 100% 129600
|
||||||
|
refresh_pattern tar.bz2$ 129600 100% 129600
|
||||||
|
# always refresh Packages and Release files
|
||||||
|
refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
|
||||||
|
refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims
|
||||||
|
refresh_pattern \/InRelease$ 0 0% 0 refresh-ims
|
||||||
|
refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0
|
||||||
|
marker: "# {mark} ANSIBLE MANAGED BLOCK refresh_pattern"
|
||||||
|
notify: "restart squid"
|
||||||
|
|
||||||
|
- name: redirect www traffic in shorewall
|
||||||
|
lineinfile:
|
||||||
|
dest: /etc/shorewall/rules
|
||||||
|
line: "REDIRECT loc 3129 tcp www"
|
||||||
|
notify: "restart shorewall"
|
7
roles/two-interface-shorewall/handlers/main.yml
Normal file
7
roles/two-interface-shorewall/handlers/main.yml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
- name: restart networking
|
||||||
|
service: name=networking state=restarted enabled=yes
|
||||||
|
listen: restart networking
|
||||||
|
|
||||||
|
- name: restart shorewall
|
||||||
|
service: name=shorewall state=restarted enabled=yes
|
||||||
|
listen: restart shorewall
|
86
roles/two-interface-shorewall/tasks/main.yml
Normal file
86
roles/two-interface-shorewall/tasks/main.yml
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
- name: add if_lan with static address
|
||||||
|
template:
|
||||||
|
src: interfaces-static.j2
|
||||||
|
dest: /etc/network/interfaces.d/static
|
||||||
|
|
||||||
|
- name: make if_wan auto start
|
||||||
|
lineinfile:
|
||||||
|
dest: /etc/network/interfaces
|
||||||
|
line: "auto {{ if_wan }}"
|
||||||
|
insertbefore: "iface\\s+{{ if_wan }}\\s+inet\\s+dhcp"
|
||||||
|
notify: restart networking
|
||||||
|
|
||||||
|
- name: install shorewall packages
|
||||||
|
apt: name=shorewall state=latest
|
||||||
|
|
||||||
|
- name: copy shorewall configuration
|
||||||
|
command: cp {{ item }} /etc/shorewall/
|
||||||
|
args:
|
||||||
|
chdir: /usr/share/doc/shorewall/examples/two-interfaces/
|
||||||
|
creates: "/etc/shorewall/{{ item }}"
|
||||||
|
with_items:
|
||||||
|
- interfaces
|
||||||
|
- snat
|
||||||
|
- policy
|
||||||
|
- rules
|
||||||
|
- stoppedrules
|
||||||
|
- zones
|
||||||
|
notify: restart shorewall
|
||||||
|
|
||||||
|
- name: find files in /etc/shorewall/
|
||||||
|
find:
|
||||||
|
paths: /etc/shorewall/
|
||||||
|
use_regex: yes
|
||||||
|
pattern: '.+[^~]$'
|
||||||
|
contains: '.*(eth0|eth1).*'
|
||||||
|
register: find_result
|
||||||
|
notify: restart shorewall
|
||||||
|
|
||||||
|
- name: fix WAN interface name in shorewall configuration
|
||||||
|
replace:
|
||||||
|
dest: "{{ item.path }}"
|
||||||
|
regexp: 'eth0'
|
||||||
|
replace: "{{ if_wan }}"
|
||||||
|
backup: yes
|
||||||
|
with_items: "{{ find_result.files }}"
|
||||||
|
notify: restart shorewall
|
||||||
|
|
||||||
|
- name: fix LAN interface name in shorewall configuration
|
||||||
|
replace:
|
||||||
|
dest: "{{ item.path }}"
|
||||||
|
regexp: 'eth1'
|
||||||
|
replace: "{{ if_lan }}"
|
||||||
|
backup: yes
|
||||||
|
with_items: "{{ find_result.files }}"
|
||||||
|
notify: restart shorewall
|
||||||
|
|
||||||
|
- name: configure forwarding in shorewall.conf
|
||||||
|
replace:
|
||||||
|
dest: /etc/shorewall/shorewall.conf
|
||||||
|
regexp: 'IP_FORWARDING=Keep'
|
||||||
|
replace: 'IP_FORWARDING=Yes'
|
||||||
|
backup: yes
|
||||||
|
notify: restart shorewall
|
||||||
|
|
||||||
|
- name: configure shorewall policy
|
||||||
|
replace:
|
||||||
|
dest: /etc/shorewall/policy
|
||||||
|
regexp: 'loc(\s+)net(\s+)ACCEPT'
|
||||||
|
replace: 'loc\1all\2ACCEPT\n$FW\1all\2ACCEPT'
|
||||||
|
backup: yes
|
||||||
|
notify: restart shorewall
|
||||||
|
|
||||||
|
- name: configure shorewall rules
|
||||||
|
replace:
|
||||||
|
dest: /etc/shorewall/rules
|
||||||
|
regexp: '(SSH\(ACCEPT\)\s+)loc(\s+\$FW)'
|
||||||
|
replace: '\1all\2'
|
||||||
|
backup: yes
|
||||||
|
notify: restart shorewall
|
||||||
|
|
||||||
|
- name: enable shorewall in /etc/defaults/shorewall
|
||||||
|
replace:
|
||||||
|
dest: /etc/default/shorewall
|
||||||
|
regexp: 'startup=0'
|
||||||
|
replace: 'startup=1'
|
||||||
|
notify: restart shorewall
|
|
@ -0,0 +1,5 @@
|
||||||
|
auto {{ if_lan }}
|
||||||
|
allow-hotplug {{ if_lan }}
|
||||||
|
iface {{ if_lan }} inet static
|
||||||
|
address {{ ipaddr_lan }}
|
||||||
|
netmask 255.255.255.0
|
19
roles/up2date-debian/tasks/main.yml
Normal file
19
roles/up2date-debian/tasks/main.yml
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# Update lists and upgrade packages.
|
||||||
|
|
||||||
|
- name: update apt package lists
|
||||||
|
apt:
|
||||||
|
update_cache: yes
|
||||||
|
cache_valid_time: 86400
|
||||||
|
|
||||||
|
- name: upgrade packages
|
||||||
|
apt:
|
||||||
|
upgrade: dist
|
||||||
|
autoremove: yes
|
||||||
|
|
||||||
|
- name: install some packages
|
||||||
|
apt: name={{ item }} state=latest
|
||||||
|
with_items:
|
||||||
|
- etckeeper
|
||||||
|
|
||||||
|
#- name: clean apt package cache
|
||||||
|
# command: apt clean
|
Loading…
Add table
Reference in a new issue