Initial commit
This commit is contained in:
commit
d3299f8848
120
ansible/playbook.yml
Normal file
120
ansible/playbook.yml
Normal file
@ -0,0 +1,120 @@
|
||||
---
|
||||
- name: Ham Hotspot Bootstrap
|
||||
hosts: localhost
|
||||
become: yes
|
||||
|
||||
vars_files:
|
||||
- ../config/desired_state.yml
|
||||
|
||||
tasks:
|
||||
- name: Install base apt packages
|
||||
apt:
|
||||
name:
|
||||
- ax25-tools
|
||||
- ax25-apps
|
||||
- libax25
|
||||
- dnsmasq
|
||||
- hostapd
|
||||
- python3-flask
|
||||
- build-essential
|
||||
- cmake
|
||||
- git
|
||||
state: present
|
||||
update_cache: yes
|
||||
|
||||
- name: Clone Direwolf from GitHub
|
||||
git:
|
||||
repo: 'https://github.com/wb2osz/direwolf.git'
|
||||
dest: /usr/local/src/direwolf
|
||||
update: no
|
||||
|
||||
- name: Build Direwolf
|
||||
shell: |
|
||||
mkdir -p /usr/local/src/direwolf/build
|
||||
cd /usr/local/src/direwolf/build
|
||||
cmake ..
|
||||
make -j4
|
||||
args:
|
||||
chdir: /usr/local/src/direwolf
|
||||
creates: /usr/local/src/direwolf/build/direwolf
|
||||
|
||||
- name: Install Direwolf
|
||||
shell: |
|
||||
cd /usr/local/src/direwolf/build
|
||||
make install
|
||||
args:
|
||||
chdir: /usr/local/src/direwolf/build
|
||||
creates: /usr/local/bin/direwolf
|
||||
|
||||
- name: Copy systemd service templates
|
||||
copy:
|
||||
src: ../systemd/
|
||||
dest: /lib/systemd/system/
|
||||
mode: '0644'
|
||||
owner: root
|
||||
group: root
|
||||
|
||||
- name: Deploy Direwolf configuration
|
||||
template:
|
||||
src: ../templates/direwolf.conf.j2
|
||||
dest: /etc/ham-hotspot/direwolf-{{ radio.port_name }}.conf
|
||||
mode: '0644'
|
||||
|
||||
- name: Deploy hostapd configuration
|
||||
template:
|
||||
src: ../templates/hostapd.conf.j2
|
||||
dest: /etc/hostapd/hostapd.conf
|
||||
mode: '0644'
|
||||
|
||||
- name: Deploy dnsmasq configuration
|
||||
template:
|
||||
src: ../templates/dnsmasq.conf.j2
|
||||
dest: /etc/dnsmasq.d/ham-hotspot.conf
|
||||
mode: '0644'
|
||||
|
||||
- name: Deploy axports configuration
|
||||
template:
|
||||
src: ../templates/axports.j2
|
||||
dest: /etc/ax25/axports
|
||||
mode: '0644'
|
||||
|
||||
- name: Enable IP forwarding
|
||||
copy:
|
||||
dest: /etc/sysctl.d/ham-hotspot.conf
|
||||
content: |
|
||||
net.ipv4.ip_forward=1
|
||||
mode: '0644'
|
||||
|
||||
- name: Reload systemd daemon
|
||||
systemd:
|
||||
daemon_reload: yes
|
||||
|
||||
- name: Enable and start Direwolf instance
|
||||
systemd:
|
||||
name: direwolf@radio0.service
|
||||
enabled: yes
|
||||
state: started
|
||||
|
||||
- name: Enable and start KISS TNC instance
|
||||
systemd:
|
||||
name: kisstnc@radio0.service
|
||||
enabled: yes
|
||||
state: started
|
||||
|
||||
- name: Enable and start AX.25 daemon
|
||||
systemd:
|
||||
name: ax25d.service
|
||||
enabled: yes
|
||||
state: started
|
||||
|
||||
- name: Enable and start hostapd
|
||||
systemd:
|
||||
name: hostapd.service
|
||||
enabled: yes
|
||||
state: started
|
||||
|
||||
- name: Enable and start dnsmasq
|
||||
systemd:
|
||||
name: dnsmasq.service
|
||||
enabled: yes
|
||||
state: started
|
||||
17
config/desired-state.yml
Normal file
17
config/desired-state.yml
Normal file
@ -0,0 +1,17 @@
|
||||
# Configuration state for Ham Hotspot
|
||||
|
||||
wifi:
|
||||
ssid: HamHotspot
|
||||
password: change_me_now
|
||||
channel: 6
|
||||
|
||||
network:
|
||||
lan_subnet: 192.168.73.0/24
|
||||
lan_gateway: 192.168.73.1
|
||||
|
||||
radio:
|
||||
device: plughw:CARD=CODEC,DEV=0
|
||||
speed: 1200
|
||||
mycall: KI5QKX-11
|
||||
port_name: radio0
|
||||
ip_address: 44.31.1.1
|
||||
14
systemd/ax25d.service
Normal file
14
systemd/ax25d.service
Normal file
@ -0,0 +1,14 @@
|
||||
[Unit]
|
||||
Description=AX.25 Daemon (ax25d)
|
||||
After=network.target syslog.target
|
||||
Requires=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/sbin/ax25d -l
|
||||
ExecReload=/bin/kill -SIGHUP $MAINPID
|
||||
ExecStop=/bin/kill -SIGQUIT $MAINPID
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
20
systemd/direwolf@.service
Normal file
20
systemd/direwolf@.service
Normal file
@ -0,0 +1,20 @@
|
||||
[Unit]
|
||||
Description=Direwolf %I soundcard modem
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
|
||||
PrivateTmp=true
|
||||
StateDirectory=direwolf
|
||||
ExecStart=/usr/local/bin/direwolf -t 0 -p -c /etc/ham-hotspot/direwolf-%i.conf -q h -q d
|
||||
Restart=unless-stopped
|
||||
# Relocate /tmp/kisstnc symlink to /run/direwolf/<instance name>.
|
||||
ExecStartPre=/usr/bin/mkdir -p /run/direwolf
|
||||
ExecStartPost=/bin/timeout 10 /bin/sh -c 'while ! test -c /tmp/kisstnc; do sleep 1; done; cp -a /tmp/kisstnc /run/direwolf/%i'
|
||||
|
||||
# Clean up symlink on exit.
|
||||
ExecStopPost=/bin/rm -f /run/direwolf/%i
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
14
systemd/kisstnc@.service
Normal file
14
systemd/kisstnc@.service
Normal file
@ -0,0 +1,14 @@
|
||||
[Unit]
|
||||
Description=Attach AX.25 KISS device %I
|
||||
Requires=direwolf@%i.service
|
||||
After=direwolf@%i.service
|
||||
AssertPathExists=/run/direwolf/%i
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/sbin/kissattach /run/direwolf/%i %i
|
||||
ExecStartPost=/usr/sbin/kissparms -c 1 -p %i
|
||||
RemainAfterExit=true
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
1
templates/axports.j2
Normal file
1
templates/axports.j2
Normal file
@ -0,0 +1 @@
|
||||
radio0 {{ radio.mycall }} 0 255 1 PiRadio AX.25 port
|
||||
22
templates/direwolf.conf.j2
Normal file
22
templates/direwolf.conf.j2
Normal file
@ -0,0 +1,22 @@
|
||||
# Template: direwolf.conf.j2
|
||||
# Auto-generated by Ansible based on desired_state.yml
|
||||
|
||||
# Audio input device
|
||||
ADEVICE {{ radio.device }}
|
||||
|
||||
# Set the call sign
|
||||
MYCALL {{ radio.mycall }}
|
||||
|
||||
# Define the modem type (assuming a basic 1200 or 9600 baud AFSK modem)
|
||||
MODEM {{ radio.speed }}
|
||||
|
||||
# Optional: AX.25 parameters (could fine-tune later)
|
||||
TXDELAY 30
|
||||
TXTAIL 10
|
||||
DWAIT 0
|
||||
SLOTTIME 100
|
||||
PERSIST 63
|
||||
FIX_BITS 1 AX25
|
||||
|
||||
# Log settings
|
||||
LOGDIR /var/log/direwolf
|
||||
4
templates/dnsmasq.conf.j2
Normal file
4
templates/dnsmasq.conf.j2
Normal file
@ -0,0 +1,4 @@
|
||||
interface=wlan0
|
||||
dhcp-range={{ network.lan_gateway | regex_replace('\.1$', '.100') }},{{ network.lan_gateway | regex_replace('\.1$', '.200') }},12h
|
||||
dhcp-option=3,{{ network.lan_gateway }}
|
||||
dhcp-option=6,8.8.8.8
|
||||
14
templates/hostapd.conf.j2
Normal file
14
templates/hostapd.conf.j2
Normal file
@ -0,0 +1,14 @@
|
||||
interface=wlan0
|
||||
driver=nl80211
|
||||
ssid={{ wifi.ssid }}
|
||||
hw_mode=g
|
||||
channel={{ wifi.channel }}
|
||||
wmm_enabled=0
|
||||
macaddr_acl=0
|
||||
auth_algs=1
|
||||
ignore_broadcast_ssid=0
|
||||
wpa=2
|
||||
wpa_passphrase={{ wifi.password }}
|
||||
wpa_key_mgmt=WPA-PSK
|
||||
wpa_pairwise=TKIP
|
||||
rsn_pairwise=CCMP
|
||||
Loading…
Reference in New Issue
Block a user