--- /dev/null
+# SPDX-License-Identifier: GPL-2.0-only
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=meshtasticd
+PKG_VERSION:=2.7.15
+PKG_SOURCE_VERSION:=v$(PKG_VERSION).567b8ea
+PKG_RELEASE:=1
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/meshtastic/firmware.git
+PKG_MIRROR_HASH:=07a85f6fb62103e841b88fbc38c2ed235b12dab8310fe4fe619c8a1754a9aa22
+
+FRONTEND_VERSION:=2.6.7
+FRONTEND_DEST:=$(PKG_NAME)-frontend-$(FRONTEND_VERSION).tar
+FRONTEND_URL:=https://github.com/meshtastic/web/releases/download/v$(FRONTEND_VERSION)/
+FRONTEND_HASH:=a34f4360a0486543a698de20de533557492e763ab459fc27fcea95d0495144ed
+
+PKG_BUILD_DEPENDS:= \
+ python3/host \
+ python-platformio/host \
+ !USE_GLIBC:argp-standalone
+
+PKG_MAINTAINER:=Austin Lane <vidplace7@gmail.com>, George Sapkin <george@sapk.in>
+PKG_LICENSE:=GPL-3.0-only
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include $(TOPDIR)/feeds/packages/lang/python/python3-host.mk
+include $(INCLUDE_DIR)/nls.mk
+
+define Package/meshtasticd/Default
+ SECTION:=net
+ CATEGORY:=Network
+ SUBMENU:=Meshtastic
+ TITLE:=Meshtastic daemon
+ URL:=https://github.com/meshtastic/firmware
+endef
+
+# Leaving a possibility for adding a light variant without the web UI support if
+# it's made configurable upstream. Currently headers are autodetected so it's
+# not possible to add it.
+define Package/meshtasticd-full
+ $(call Package/meshtasticd/Default)
+ TITLE+= (with web UI support)
+ DEPENDS:= \
+ +bluez-libs \
+ +kmod-spi-dev \
+ +libgpiod \
+ +libi2c \
+ +libopenssl \
+ +liborcania \
+ +libulfius-gnutls \
+ +libusb-1.0 \
+ +libuv \
+ +libyaml-cpp \
+ +libyder \
+ +zlib \
+ $(INTL_DEPENDS)
+ PROVIDES:=meshtasticd
+endef
+
+define Package/meshtasticd-avahi-service
+ $(call Package/meshtasticd/Default)
+ TITLE+= (avahi service)
+ DEPENDS:= \
+ +avahi-daemon \
+ +meshtasticd
+endef
+
+define Package/meshtasticd-web
+ $(call Package/meshtasticd/Default)
+ TITLE:=Meshtastic daemon web interface
+ URL:=https://github.com/meshtastic/web
+ DEPENDS:=+meshtasticd-full
+ VERSION:=$(FRONTEND_VERSION)-r$(PKG_RELEASE)
+endef
+
+define Package/meshtasticd-full/description
+ Meshtastic daemon with web interface support
+endef
+
+define Package/meshtasticd-avahi-service/description
+ Service definition for announcing the Meshtastic daemon via mDNS
+endef
+
+define Package/meshtasticd-web/description
+ The official Meshtastic web interface
+endef
+
+define Download/meshtasticd-web
+ URL:=$(FRONTEND_URL)
+ URL_FILE:=build.tar
+ FILE:=$(FRONTEND_DEST)
+ HASH:=$(FRONTEND_HASH)
+endef
+
+PLATFORMIO_BUILD_FLAGS := \
+ -fdata-sections \
+ -ffunction-sections \
+ -Os \
+ -Wl,--gc-sections \
+ -lcrypto \
+ -lorcania \
+ -lssl \
+ -lulfius \
+ -lyder \
+ $(if $(CONFIG_USE_GLIBC),,-largp) \
+ $(if $(INTL_FULL),-lintl)
+
+BUILD_FLAGS := \
+ TARGET_AR="$(TARGET_AR)" \
+ TARGET_AS="$(TARGET_CC) -c $(TARGET_ASFLAGS)" \
+ TARGET_CC="$(TARGET_CC)" \
+ TARGET_CFLAGS="$(TARGET_CFLAGS)" \
+ TARGET_CXX="$(TARGET_CXX)" \
+ TARGET_CXXFLAGS="$(TARGET_CXXFLAGS)" \
+ TARGET_LD="$(TARGET_LD)" \
+ TARGET_LDFLAGS="$(TARGET_LDFLAGS)" \
+ TARGET_OBJCOPY="$(TARGET_CROSS)objcopy" \
+ TARGET_RANLIB="$(TARGET_RANLIB)" \
+ PLATFORMIO_BUILD_CACHE_DIR="$(PKG_BUILD_DIR)/.pio-build-cache" \
+ PLATFORMIO_CACHE_DIR="$(DL_DIR)/platformio-cache"
+
+define Build/Prepare/meshtasticd-web
+ mkdir -p $(PKG_BUILD_DIR)/web
+ $(HOST_TAR) -xf $(DL_DIR)/$(FRONTEND_DEST) -C $(PKG_BUILD_DIR)/web
+ gzip -dr $(PKG_BUILD_DIR)/web/
+endef
+
+define Build/Prepare
+ $(call Build/Prepare/Default)
+ $(call Build/Prepare/meshtasticd-web)
+endef
+
+define Build/Compile/meshtasticd-full
+ mkdir -p $(PKG_BUILD_DIR)/full
+
+ $(BUILD_FLAGS) \
+ PLATFORMIO_BUILD_DIR="$(PKG_BUILD_DIR)/full" \
+ PLATFORMIO_BUILD_FLAGS="$(PLATFORMIO_BUILD_FLAGS)" \
+ $(HOST_PYTHON3_BIN) -m platformio run \
+ --environment buildroot \
+ --project-dir $(PKG_BUILD_DIR)
+endef
+
+define Build/Compile
+ $(call Build/Compile/meshtasticd-full)
+endef
+
+define Package/meshtasticd-full/install
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_CONF) ./files/meshtasticd.conf $(1)/etc/config/meshtasticd
+
+ $(INSTALL_DIR) $(1)/etc/meshtasticd
+ $(INSTALL_CONF) $(PKG_BUILD_DIR)/bin/config-dist.yaml $(1)/etc/meshtasticd/config.yaml
+
+ $(INSTALL_DIR) $(1)/etc/meshtasticd/available.d
+ $(CP) -R $(PKG_BUILD_DIR)/bin/config.d/* $(1)/etc/meshtasticd/available.d
+
+ $(INSTALL_DIR) $(1)/etc/meshtasticd/config.d
+
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/meshtasticd.init $(1)/etc/init.d/meshtasticd
+
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/full/buildroot/program $(1)/usr/bin/meshtasticd
+endef
+
+define Package/meshtasticd-avahi-service/install
+ $(INSTALL_DIR) $(1)/etc/avahi/services
+ $(INSTALL_CONF) ./files/meshtasticd.service $(1)/etc/avahi/services/
+endef
+
+define Package/meshtasticd-web/install
+ $(INSTALL_DIR) $(1)/usr/share/meshtasticd/web
+ $(CP) $(PKG_BUILD_DIR)/web/* $(1)/usr/share/meshtasticd/web
+
+ $(INSTALL_DIR) $(1)/etc/meshtasticd/ssl
+endef
+
+define Package/meshtasticd-full/conffiles
+/etc/config/meshtasticd
+/etc/meshtasticd/config.d/
+/etc/meshtasticd/config.yaml
+/etc/meshtasticd/ssl
+endef
+
+define Package/meshtasticd-avahi-service/conffiles
+/etc/avahi/services/meshtasticd.service
+endef
+
+$(eval $(call Download,meshtasticd-web))
+$(eval $(call BuildPackage,meshtasticd-full))
+$(eval $(call BuildPackage,meshtasticd-avahi-service))
+$(eval $(call BuildPackage,meshtasticd-web))
--- /dev/null
+#!/bin/sh /etc/rc.common
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+# shellcheck shell=busybox
+
+START=99
+STOP=10
+
+USE_PROCD=1
+PROG=/usr/bin/meshtasticd
+
+start_service() {
+ config_load 'meshtastic'
+
+ local config_dir data_dir
+
+ uci_validate_section 'meshtasticd' 'meshtasticd' 'meshtasticd' \
+ 'config_dir:string:/etc/meshtasticd' \
+ 'data_dir:string:/var/lib/meshtasticd'
+
+ local config_file="${config_dir}/config.yaml"
+ local config_d_dir="${config_dir}/config.d/*"
+
+ mkdir -p "$data_dir"
+
+ # meshtasticd needs to be run from its data directory
+ cd "$data_dir"
+
+ procd_open_instance
+ procd_set_param command "$PROG"
+ procd_append_param command --fsdir="$data_dir"
+ procd_set_param file "$config_file"
+ procd_set_param file "$config_d_dir"
+ procd_set_param term_timeout 15
+ procd_set_param respawn
+ procd_set_param stdout 1
+ procd_set_param stderr 1
+ procd_close_instance
+}
+
+service_triggers() {
+ procd_add_reload_trigger 'meshtasticd'
+}