diff --git a/README.md b/README.md index 41deffc..0a92894 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,16 @@ ```bash $ sudo apt install ansible - -$ ansible-playbook desktop.yml --limit localhost -v -K ``` + +# Machines + +## Zenity + +ansible-playbook desktop.yml --limit localhost -v -K + +## Roampi + +### Deploy + +ansible-playbook roampi.yml diff --git a/local b/local index 9c021a4..d9de21f 100644 --- a/local +++ b/local @@ -3,3 +3,6 @@ localhost ansible_connection=local [local:vars] ansible_python_interpreter=/usr/bin/python3 + +[roampi] +pi@raspberrypi.local diff --git a/roampi.yml b/roampi.yml new file mode 100644 index 0000000..5d61d22 --- /dev/null +++ b/roampi.yml @@ -0,0 +1,27 @@ +--- +- name: Provision roampi + hosts: roampi + gather_facts: yes + + pre_tasks: + - name: What is this? + tags: pre_tasks + debug: + msg: "{{ ansible_distribution }}" + + - name: Update all packages + tags: pre_tasks + apt: + upgrade: dist + update_cache: yes + become: true + + roles: + - {role: roampi/base, tags: base, become: true} + + handlers: + - name: saveiptables + listen: saveiptables + shell: iptables-save > /etc/iptables/rules.v4 + become: yes + become_user: root diff --git a/roles/roampi/base/files/br0-member-eth0.network b/roles/roampi/base/files/br0-member-eth0.network new file mode 100644 index 0000000..1eddb01 --- /dev/null +++ b/roles/roampi/base/files/br0-member-eth0.network @@ -0,0 +1,5 @@ +[Match] +Name=eth0 + +[Network] +Bridge=br0 diff --git a/roles/roampi/base/files/bridge-br0.netdev b/roles/roampi/base/files/bridge-br0.netdev new file mode 100644 index 0000000..6ec2b6d --- /dev/null +++ b/roles/roampi/base/files/bridge-br0.netdev @@ -0,0 +1,3 @@ +[NetDev] +Name=br0 +Kind=bridge diff --git a/roles/roampi/base/files/dhcpcd.conf b/roles/roampi/base/files/dhcpcd.conf new file mode 100644 index 0000000..a913357 --- /dev/null +++ b/roles/roampi/base/files/dhcpcd.conf @@ -0,0 +1,33 @@ + +# Inform the DHCP server of our hostname for DDNS. +hostname + +# Use the hardware address of the interface for the Client ID. +#clientid + +# Persist interface configuration when dhcpcd exits. +persistent + +# Rapid commit support. +# Safe to enable by default because it requires the equivalent option set +# on the server to actually work. +option rapid_commit + +# A list of options to request from the DHCP server. +option domain_name_servers, domain_name, domain_search, host_name +option classless_static_routes +# Respect the network MTU. This is applied to DHCP routes. +option interface_mtu + +# A ServerID is required by RFC2131. +require dhcp_server_identifier + +# Generate SLAAC address using the Hardware Address of the interface +#slaac hwaddr +# OR generate Stable Private IPv6 Addresses based from the DUID +slaac private + +interface br0 +interface wlan0 + static ip_address=192.168.4.1/24 + nohook wpa_supplicant diff --git a/roles/roampi/base/files/dnsmasq.conf b/roles/roampi/base/files/dnsmasq.conf new file mode 100644 index 0000000..4aedc8d --- /dev/null +++ b/roles/roampi/base/files/dnsmasq.conf @@ -0,0 +1,4 @@ +interface=wlan0 +dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h +domain=wlan +address=/gw.wlan/192.168.4.1 diff --git a/roles/roampi/base/files/hostapd.conf b/roles/roampi/base/files/hostapd.conf new file mode 100644 index 0000000..4d40edf --- /dev/null +++ b/roles/roampi/base/files/hostapd.conf @@ -0,0 +1,13 @@ +country_code=US +interface=wlan0 +ssid=roampi +hw_mode=g +channel=1 +macaddr_acl=0 +auth_algs=1 +ignore_broadcast_ssid=0 +wpa=2 +wpa_passphrase=RoamWithMe1 +wpa_key_mgmt=WPA-PSK +wpa_pairwise=TKIP +rsn_pairwise=CCMP diff --git a/roles/roampi/base/files/kodi_remote_keymap.xml b/roles/roampi/base/files/kodi_remote_keymap.xml new file mode 100644 index 0000000..31e1fcb --- /dev/null +++ b/roles/roampi/base/files/kodi_remote_keymap.xml @@ -0,0 +1,708 @@ + + + + + + + + + + + + + + + + + + + + + + + + + PlayPause + Pause + Stop + FastForward + Back + Back + Left + Right + Up + Down + + FullScreen + PageUp + PageDown + Back + ContextMenu + PreviousMenu + PreviousMenu + ContextMenu + Info + SkipNext + SkipPrevious + FullScreen + PreviousMenu + Record + EjectTray() + VolumeUp + VolumeDown + Mute + ShutDown() + ActivateWindow(Videos) + ActivateWindow(Music) + ActivateWindow(Pictures) + ActivateWindow(Videos,TvShows) + ActivateWindow(TVGuide) + ActivateWindow(TVChannels) + ActivateWindow(RadioChannels) + ActivateWindow(TVRecordings) + ActivateWindow(TVSearch) + ActivateWindow(TVChannels) + ActivateWindow(Videos) + ActivateWindow(Music) + ActivateWindow(Pictures) + Number0 + JumpSMS2 + JumpSMS3 + JumpSMS4 + JumpSMS5 + JumpSMS6 + JumpSMS7 + JumpSMS8 + JumpSMS9 + Screenshot + + + + + ActivateWindow(Weather) + ActivateWindow(Settings) + + + + + Delete + Red + Green + Yellow + Blue + + + + + Delete + Red + Green + Yellow + Blue + + + + + Delete + Red + Green + Yellow + Blue + + + + + Delete + Red + Green + Yellow + Blue + + + + + Delete + Red + Green + Yellow + Blue + + + + + Delete + Red + Green + Yellow + Blue + + + + + Delete + Highlight + Move + Rename + + + + + Highlight + + + + + Delete + Delete + + + + + Queue + + + + + Queue + Queue + + + + + Delete + + + + + Number0 + Back + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9 + StepBack + StepForward + ChapterOrBigStepForward + ChapterOrBigStepBack + Back + OSD + OSD + OSD + OSD + + PlayerProcessInfo + Info + ActivateWindow(TVGuide) + ActivateWindow(Teletext) + NextSubtitle + NextSubtitle + AudioNextLanguage + Playlist + AudioNextLanguage + SkipNext + SkipPrevious + + + + + StepBack + StepForward + Back + OSD + OSD + OSD + OSD + + CodecInfo + Info + + + + + + Select + + + + + PlayerProcessInfo + Back + OSD + OSD + OSD + + + + + Back + Back + Back + + + + + StepBack + StepForward + SkipNext + SkipPrevious + IncreaseRating + DecreaseRating + Back + PlayerProcessInfo + + OSD + OSD + OSD + OSD + Info + ActivateWindow(TVGuide) + ActivateWindow(PVROSDChannels) + Number0 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9 + + + + + Back + Back + Back + Info + PlayerProcessInfo + + + + + Back + Back + Back + + + + + ZoomNormal + ZoomLevel2 + ZoomLevel3 + ZoomLevel4 + ZoomLevel5 + ZoomLevel6 + ZoomLevel7 + ZoomLevel8 + ZoomLevel9 + Info + NextPicture + PreviousPicture + Info + + + + + + + ResetCalibration + NextResolution + NextResolution + + + + + + ResetCalibration + + + + + Back + Back + Back + Back + + + + + OSD + OSD + OSD + Info + PlayerProcessInfo + Number0 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9 + Select + SkipNext + SkipPrevious + + + + + Back + Back + Back + Back + + + + + Back + Back + Back + Back + + + + + Back + Back + Back + Back + Delete + + + + + Queue + Delete + + + + + Delete + Delete + + + + + Back + Shift + Symbols + Number0 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9 + Enter + CursorLeft + CursorRight + + + + + Back + + + + + info + + + + + Number0 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9 + Enter + Back + + + + + PreviousMenu + + + + + PreviousMenu + + + + + + + + + Close + + + + + Close + + + + + Close + + + + + PreviousMenu + + + + + PreviousMenu + + + + + PreviousMenu + + + + + PreviousMenu + + + + + PreviousMenu + + + + + PreviousMenu + + + + + PreviousMenu + + + + + PreviousMenu + + + + + PreviousMenu + + + + + Back + + + + + Back + + + + + Back + Back + Back + + + + + Back + Back + Back + + + + + NextPicture + PreviousPicture + Back + + + + + number0 + number2 + number3 + number4 + number5 + number6 + number7 + number8 + number9 + Red + Green + Yellow + Blue + Info + Back + Back + Back + Back + Back + + + + + Close + + + + + StepBack + StepForward + Up + Down + ChannelUp + ChannelDown + + + + + StepBack + StepForward + Up + Down + ChannelUp + ChannelDown + + + + + + + + + + + + + + + + + + + + + + + + + Close + Close + Close + Number0 + number2 + number3 + number4 + number5 + number6 + number7 + number8 + number9 + + + + + Close + Close + Close + Number0 + number2 + number3 + number4 + number5 + number6 + number7 + number8 + number9 + + + + + Number0 + number2 + number3 + number4 + number5 + number6 + number7 + number8 + number9 + + + + + Number0 + number2 + number3 + number4 + number5 + number6 + number7 + number8 + number9 + + + + + Number0 + number2 + number3 + number4 + number5 + number6 + number7 + number8 + number9 + + + + + Number0 + number2 + number3 + number4 + number5 + number6 + number7 + number8 + number9 + + + + + PreviousMenu + + + + + Red + Green + Yellow + Blue + + + + + PlayerProcessInfo + + + diff --git a/roles/roampi/base/files/routed-ap.conf b/roles/roampi/base/files/routed-ap.conf new file mode 100644 index 0000000..91bdb41 --- /dev/null +++ b/roles/roampi/base/files/routed-ap.conf @@ -0,0 +1,2 @@ +# Enable IPv4 routing +net.ipv4.ip_forward=1 diff --git a/roles/roampi/base/tasks/main.yml b/roles/roampi/base/tasks/main.yml new file mode 100644 index 0000000..11e1d73 --- /dev/null +++ b/roles/roampi/base/tasks/main.yml @@ -0,0 +1,86 @@ +# vim: set foldmethod=marker nospell: +--- +- name: Install packages # {{{ + tags: [packages, core] + apt: + name: "{{packages}}" + state: latest + update_cache: true + +#- name: Auto-start Kodi + #tags: [kodi] + #ansible.builtin.cron: + #name: "Auto start Kodi on boot" + #special_time: reboot + #job: "kodi-standalone" + #user: pi + +- name: Create Kodi keymaps directory + tags: [kodi] + file: + path: /home/pi/.kodi/userdata/keymaps + state: directory + owner: pi + group: pi + recurse: yes + +- name: Setup Kodi remote control configuration (for back button) + tags: [kodi] + copy: + src: kodi_remote_keymap.xml + dest: /home/pi/.kodi/userdata/keymaps + mode: 0755 + +- name: Configure bridge network device + tags: [hostapd] + copy: + src: bridge-br0.netdev + dest: /etc/systemd/network/bridge-br0.netdev + +- name: Configure dhcpcd + tags: [network hostapd] + copy: + src: dhcpcd.conf + dest: /etc/dhcpcd.conf + + +- name: Add eth0 to bridge device + tags: [hostapd] + copy: + src: br0-member-eth0.network + dest: /etc/systemd/network/br0-member-eth0.network + +- name: Configure hostapd + tags: [hostapd] + copy: + src: hostapd.conf + dest: /etc/hostapd/hostapd.conf + +- name: Unmask/Enable hostapd + tags: [hostapd] + ansible.builtin.systemd: + state: started + masked: no + name: hostapd + +#- name: Enable networkd + #tags: [hostapd] + #ansible.builtin.systemd: + #state: started + #name: systemd-networkd + +- name: Forward all ipv4 + tags: [routing] + copy: + src: routed-ap.conf + dest: /etc/sysctl.d/routed-ap.conf + +- name: Iptables nat config + tags: [routing] + iptables: + table: nat + chain: POSTROUTING + jump: MASQUERADE + out_interface: eth0 + state: present + notify: saveiptables diff --git a/roles/roampi/base/vars/main.yml b/roles/roampi/base/vars/main.yml new file mode 100644 index 0000000..0ca3193 --- /dev/null +++ b/roles/roampi/base/vars/main.yml @@ -0,0 +1,7 @@ +packages: + - dnsmasq + - hostapd + - iptables-persistent + - kodi + - vim + diff --git a/roles/roampi/base/vars/sekrits.yml b/roles/roampi/base/vars/sekrits.yml new file mode 100644 index 0000000..76a85e9 --- /dev/null +++ b/roles/roampi/base/vars/sekrits.yml @@ -0,0 +1,9 @@ +$ANSIBLE_VAULT;1.2;AES256;zenity +30343436313536333736376532383966363739346639636236643232616162646463383439333563 +6236666239393363663336636262376361313936303636390a643236313161393333386161383462 +62316165303632646335663733666661623230353964326234386633326131366163373638393631 +3561663138666133350a663432326335303539313362633864663463656262656436633266343261 +66623239323965393265636265653136663264353334653365376263633537633062353037333438 +39646465346162326163313436343638336636363135653030303031393963396261313830633064 +33636437396463643035306436306636363032363537653133353766323164633964346135376162 +62653135303736376262