Achtung, die deutsche Dokumentation wird nicht weiter gepflegt. Bitte die englische Doku nutzen.
In bestimmten Situationen ist es sinnvoll die durch Ansible erstellten Konfigurationen nicht wie üblich auf das Zielsystem zu übertragen, sondern sie in einen Ordner zu schreiben. Dieser Sonderfall ist vorgesehen um mit dem Imagebuilder eigene OpenWrt Images zu erstellen. Die Images werden über die Collection mit der korrekten Konfiguration versorgt. Ein idealer Weg um individuelle Images pro Host erzeugen, die eine fertige Konfiguration und auch die benötigten Zusatzpakete enthalten.
Ebenfalls ideal für die Bereitstellung eines Images zum Upgrade einer OpenWrt Installation. Normalerweise muss man sich händisch um die Nachinstallation von Paketen kümmern. Diese Zusatzarbeit entfällt mit dieser Methode. Ebenso entfällt das neu Partitionieren nach einem Update.
Der Buildprozess benötigt sehr viel Speicherplatz Für ein 11GiB Image liegt die Speicherbelastung bei knapp 70 GiB. Die Entwicklung scheint dabei nicht linear zu sein.
Hier ein Beispiel Playbook für die ansible_openwrtimagebuilder Rolle.
---
- hosts: tags_openwrt-imagebuilder
pre_tasks:
- name: combine default zones with manual settings
set_fact:
openwrt_firewall_zonesdefault: "{{ openwrt_firewall_zonesdefault | combine(openwrt_firewall_zones_forelle, recursive=true) }}"
when: openwrt_firewall_zones_forelle is defined
vars:
openwrt_imagebuilder_builddir: "/home/jochen/openwrt_imagebuilder"
openwrt_imagebuilder_outputdir: "/home/jochen/openwrt_imagebuilder_images"
openwrt_acme_runimagebuilder: true
openwrt_babeld_runimagebuilder: true
openwrt_batmanadv_runimagebuilder: true
openwrt_bmx7_runimagebuilder: true
openwrt_dhcp_runimagebuilder: true
openwrt_dropbear_runimagebuilder: true
openwrt_firewall_runimagebuilder: true
openwrt_network_runimagebuilder: true
openwrt_packages_runimagebuilder: true
openwrt_restic_runimagebuilder: true
openwrt_services_runimagebuilder: true
gather_facts: no
connection: local
serial: 1
#become: true
tasks:
- name: run imagebuilder preparations
ansible.builtin.import_role:
name: imp1sh.ansible_openwrt.ansible_openwrtimagebuilder
tasks_from: prepare
- name: run acme
ansible.builtin.import_role:
name: imp1sh.ansible_openwrt.ansible_openwrtacme
- name: run dhcp
ansible.builtin.import_role:
name: imp1sh.ansible_openwrt.ansible_openwrtdhcp
- name: run dropbear
ansible.builtin.import_role:
name: imp1sh.ansible_openwrt.ansible_openwrtdropbear
- name: run firewall
ansible.builtin.import_role:
name: imp1sh.ansible_openwrt.ansible_openwrtfirewall
- name: run network
ansible.builtin.import_role:
name: imp1sh.ansible_openwrt.ansible_openwrtnetwork
- name: run restic
ansible.builtin.import_role:
name: imp1sh.ansible_openwrt.ansible_openwrtrestic
- name: run system
ansible.builtin.import_role:
name: imp1sh.ansible_openwrt.ansible_openwrtsystem
- name: run imagebuilder build
ansible.builtin.import_role:
name: imp1sh.ansible_openwrt.ansible_openwrtimagebuilder
tasks_from: build
In den Tasks ist es wichtig zunächst das prepare task von der Imagebuilder Rolle ausführen zu lassen. Danach folgen die gewünschten OpenWrt Rollen der Collection. Zum Schluss läuft der build Task der Imagebuilder Rolle.
Wichtig für die Firewall Rolle ist der Pretask zum Kombinieren der Defalt Zones.
Passt man die Variable openwrt_imagebuilder_builddir
nicht an, wird das Verzeichnis /tmp/openwrt_imagebuilder
genutzt für den Imagebuilderprozess. Ebenso lässt sich die Variable openwrt_imagebuilder_outputdir
anpassen. Tut man dies nicht, landen die fertigen Images im Verzeichnis /tmp/openwrt_imagebuilder_images
. Die fertigen Dateien werden nach dem Zielsystem benannt, für das man baut und in ein tar.gz gepackt.
Um zu wählen, für welches System das Image gebaut werden soll, setzt man die Variable openwrt_imagebuilder_downloadurl
. Der Standardwert der Variable liegt auf der aktuellsten X86 Imagebuilder URL. Den Imagebuilder link findet man im gleichen Verzeichnis, in dem das reguläre Image für das entsprechende Gerät liegt, z.B. für den Ubiquiti Edgerouter X.
Der OpenWrt Imagebuilder beherscht das Setzen konkrter Kernel Parameter, die auch aus dem OpenWrt Buildroot bekannt sind. Besonders für SoC oder x86 basierte Systeme sind diese Parameter von besonderer Bedeutung. Mit ihnen lassen sich die Partitionsgrößen festlegen.
openwrt_imagebuilder_kernelvars:
- name: "CONFIG_TARGET_KERNEL_PARTSIZE"
value: 32
- name: "CONFIG_TARGET_ROOTFS_PARTSIZE"
value: 900
Die Partitionsgröße kann nicht beliebig groß gemacht werden auf Grund von gewissen Beschränkungen. Partitionsgrößen bis zu 15G wurden erfolgreich getestet
Es gibt Ansible Rollen, die Konfigurationen nur vollständig vornehmen können, wenn sie auf dem Livesystem ausgeführt werden. Dazu zählt die ansible_openwrtrestic Rolle. Sie überträgt auf das Backup Zielsystem SSH Keys und macht andere Vorbereitungen. Es ist deswegen für solche Rollen erforderlich, sie nach der Installation eines über diese Imagebuilder Rolle erstellten Images, auf dem Zielsystem erneut laufen zu lassen.