| 
									
										
										
										
											2025-01-13 04:24:05 +00:00
										 |  |  |  | # meshtasticd spec file for RPM-based distributions | 
					
						
							|  |  |  |  | # | 
					
						
							|  |  |  |  | # Build locally with: | 
					
						
							|  |  |  |  | # ``` | 
					
						
							|  |  |  |  | # sudo dnf install rpkg-util | 
					
						
							|  |  |  |  | # rpkg local | 
					
						
							|  |  |  |  | # ``` | 
					
						
							|  |  |  |  | # | 
					
						
							|  |  |  |  | # See: | 
					
						
							|  |  |  |  | # - https://docs.pagure.org/rpkg-util/v3/index.html | 
					
						
							|  |  |  |  | # - https://docs.fedoraproject.org/en-US/packaging-guidelines/Versioning/ | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-15 11:40:46 +00:00
										 |  |  |  | %global  meshtasticd_user          meshtasticd    | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-13 04:24:05 +00:00
										 |  |  |  | Name:           meshtasticd | 
					
						
							|  |  |  |  | # Version Ex:   2.5.19 | 
					
						
							|  |  |  |  | Version:        {{{ meshtastic_version }}} | 
					
						
							|  |  |  |  | # Release Ex:   9127.daily.gitd7f5f620.fc41 | 
					
						
							|  |  |  |  | Release:        {{{ git_commits_num }}}%{?copr_projectname:.%{copr_projectname}}.git{{{ git_commit_sha }}}%{?dist} | 
					
						
							|  |  |  |  | VCS:            {{{ git_dir_vcs }}} | 
					
						
							|  |  |  |  | Summary:        Meshtastic daemon for communicating with Meshtastic devices | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | License:        GPL-3.0 | 
					
						
							|  |  |  |  | URL:            https://github.com/meshtastic/firmware | 
					
						
							|  |  |  |  | Source0:        {{{ git_dir_pack }}} | 
					
						
							| 
									
										
										
										
											2025-04-08 14:09:23 +00:00
										 |  |  |  | Source1:        https://github.com/meshtastic/web/releases/download/v{{{ web_version }}}/build.tar | 
					
						
							| 
									
										
										
										
											2025-01-13 04:24:05 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | BuildRequires: systemd-rpm-macros | 
					
						
							|  |  |  |  | BuildRequires: python3-devel | 
					
						
							|  |  |  |  | BuildRequires: platformio | 
					
						
							|  |  |  |  | BuildRequires: python3dist(protobuf) | 
					
						
							|  |  |  |  | BuildRequires: python3dist(grpcio[protobuf]) | 
					
						
							|  |  |  |  | BuildRequires: python3dist(grpcio-tools) | 
					
						
							|  |  |  |  | BuildRequires: git-core | 
					
						
							|  |  |  |  | BuildRequires: gcc-c++ | 
					
						
							|  |  |  |  | BuildRequires: pkgconfig(yaml-cpp) | 
					
						
							|  |  |  |  | BuildRequires: pkgconfig(libgpiod) | 
					
						
							|  |  |  |  | BuildRequires: pkgconfig(bluez) | 
					
						
							|  |  |  |  | BuildRequires: pkgconfig(libusb-1.0) | 
					
						
							|  |  |  |  | BuildRequires: libi2c-devel | 
					
						
							| 
									
										
										
										
											2025-03-20 13:47:39 +00:00
										 |  |  |  | BuildRequires: pkgconfig(libuv) | 
					
						
							| 
									
										
										
										
											2025-01-13 04:24:05 +00:00
										 |  |  |  | # Web components: | 
					
						
							|  |  |  |  | BuildRequires: pkgconfig(openssl) | 
					
						
							|  |  |  |  | BuildRequires: pkgconfig(liborcania) | 
					
						
							|  |  |  |  | BuildRequires: pkgconfig(libyder) | 
					
						
							|  |  |  |  | BuildRequires: pkgconfig(libulfius) | 
					
						
							| 
									
										
										
										
											2025-04-19 00:48:32 +00:00
										 |  |  |  | # TFT components: | 
					
						
							|  |  |  |  | BuildRequires: pkgconfig(x11) | 
					
						
							|  |  |  |  | BuildRequires: pkgconfig(libinput) | 
					
						
							|  |  |  |  | BuildRequires: pkgconfig(xkbcommon-x11) | 
					
						
							| 
									
										
										
										
											2025-01-13 04:24:05 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-15 11:40:46 +00:00
										 |  |  |  | Requires:      systemd-udev | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-13 04:24:05 +00:00
										 |  |  |  | %description | 
					
						
							|  |  |  |  | Meshtastic daemon for controlling Meshtastic devices. Meshtastic is an off-grid | 
					
						
							|  |  |  |  | text communication platform that uses inexpensive LoRa radios. | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | %prep | 
					
						
							|  |  |  |  | {{{ git_dir_setup_macro }}} | 
					
						
							|  |  |  |  | # Unpack the web files | 
					
						
							|  |  |  |  | mkdir -p web | 
					
						
							|  |  |  |  | tar -xf %{SOURCE1} -C web | 
					
						
							|  |  |  |  | gzip -dr web | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | %build | 
					
						
							| 
									
										
										
										
											2025-04-19 00:48:32 +00:00
										 |  |  |  | # Use the “native-tft” environment from platformio to build a Linux binary | 
					
						
							|  |  |  |  | platformio run -e native-tft | 
					
						
							| 
									
										
										
										
											2025-01-13 04:24:05 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | %install | 
					
						
							| 
									
										
										
										
											2025-05-15 11:40:46 +00:00
										 |  |  |  | # Install meshtasticd binary | 
					
						
							|  |  |  |  | mkdir -p %{buildroot}%{_bindir} | 
					
						
							|  |  |  |  | install -m 0755 .pio/build/native-tft/program %{buildroot}%{_bindir}/meshtasticd | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # Install portduino VFS dir | 
					
						
							|  |  |  |  | install -p -d -m 0770 %{buildroot}%{_localstatedir}/lib/meshtasticd | 
					
						
							| 
									
										
										
										
											2025-01-13 04:24:05 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-15 11:40:46 +00:00
										 |  |  |  | # Install udev rules | 
					
						
							|  |  |  |  | mkdir -p %{buildroot}%{_udevrulesdir} | 
					
						
							|  |  |  |  | install -m 0644 bin/99-meshtasticd-udev.rules %{buildroot}%{_udevrulesdir}/99-meshtasticd-udev.rules | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # Install config dirs | 
					
						
							| 
									
										
										
										
											2025-01-13 04:24:05 +00:00
										 |  |  |  | mkdir -p %{buildroot}%{_sysconfdir}/meshtasticd | 
					
						
							|  |  |  |  | install -m 0644 bin/config-dist.yaml %{buildroot}%{_sysconfdir}/meshtasticd/config.yaml | 
					
						
							|  |  |  |  | mkdir -p %{buildroot}%{_sysconfdir}/meshtasticd/config.d | 
					
						
							|  |  |  |  | mkdir -p %{buildroot}%{_sysconfdir}/meshtasticd/available.d | 
					
						
							|  |  |  |  | cp -r bin/config.d/* %{buildroot}%{_sysconfdir}/meshtasticd/available.d | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-15 11:40:46 +00:00
										 |  |  |  | # Install systemd service | 
					
						
							| 
									
										
										
										
											2025-01-13 04:24:05 +00:00
										 |  |  |  | install -D -m 0644 bin/meshtasticd.service %{buildroot}%{_unitdir}/meshtasticd.service | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # Install the web files under /usr/share/meshtasticd/web | 
					
						
							|  |  |  |  | mkdir -p %{buildroot}%{_datadir}/meshtasticd/web | 
					
						
							|  |  |  |  | cp -r web/* %{buildroot}%{_datadir}/meshtasticd/web | 
					
						
							| 
									
										
										
										
											2025-02-01 08:58:58 +00:00
										 |  |  |  | # Install default SSL storage directory (for web) | 
					
						
							|  |  |  |  | mkdir -p %{buildroot}%{_sysconfdir}/meshtasticd/ssl | 
					
						
							| 
									
										
										
										
											2025-01-13 04:24:05 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-15 11:40:46 +00:00
										 |  |  |  | %pre | 
					
						
							|  |  |  |  | # create spi group (for udev rules) | 
					
						
							|  |  |  |  | getent group spi > /dev/null || groupadd -r spi | 
					
						
							|  |  |  |  | # create a meshtasticd group and user | 
					
						
							|  |  |  |  | getent group %{meshtasticd_user} > /dev/null || groupadd -r %{meshtasticd_user} | 
					
						
							|  |  |  |  | getent passwd %{meshtasticd_user} > /dev/null || \ | 
					
						
							|  |  |  |  |     useradd -r -d %{_localstatedir}/lib/meshtasticd -g %{meshtasticd_user} -G spi \ | 
					
						
							|  |  |  |  |     -s /sbin/nologin -c "Meshtastic Daemon" %{meshtasticd_user} | 
					
						
							|  |  |  |  | # add meshtasticd user to appropriate groups (if they exist) | 
					
						
							|  |  |  |  | getent group gpio > /dev/null && usermod -a -G gpio %{meshtasticd_user} > /dev/null | 
					
						
							|  |  |  |  | getent group plugdev > /dev/null && usermod -a -G plugdev %{meshtasticd_user} > /dev/null | 
					
						
							|  |  |  |  | getent group dialout > /dev/null && usermod -a -G dialout %{meshtasticd_user} > /dev/null | 
					
						
							|  |  |  |  | getent group i2c > /dev/null && usermod -a -G i2c %{meshtasticd_user} > /dev/null | 
					
						
							|  |  |  |  | getent group video > /dev/null && usermod -a -G video %{meshtasticd_user} > /dev/null | 
					
						
							|  |  |  |  | getent group audio > /dev/null && usermod -a -G audio %{meshtasticd_user} > /dev/null | 
					
						
							|  |  |  |  | getent group input > /dev/null && usermod -a -G input %{meshtasticd_user} > /dev/null | 
					
						
							|  |  |  |  | exit 0 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | %triggerin -- meshtasticd < 2.6.9 | 
					
						
							|  |  |  |  | # migrate .portduino (if it exists and hasn’t already been copied) | 
					
						
							|  |  |  |  | if [ -d /root/.portduino ] && [ ! -e /var/lib/meshtasticd/.portduino ]; then | 
					
						
							|  |  |  |  |     mkdir -p /var/lib/meshtasticd | 
					
						
							|  |  |  |  |     cp -r /root/.portduino /var/lib/meshtasticd/.portduino | 
					
						
							|  |  |  |  |     chown -R %{meshtasticd_user}:%{meshtasticd_user} \ | 
					
						
							|  |  |  |  |         %{_localstatedir}/lib/meshtasticd || : | 
					
						
							|  |  |  |  |     # Fix SELinux labels if present (no-op on non-SELinux systems) | 
					
						
							|  |  |  |  |     restorecon -R /var/lib/meshtasticd/.portduino 2>/dev/null || : | 
					
						
							|  |  |  |  |     echo "Migrated meshtasticd VFS from /root/.portduino to /var/lib/meshtasticd/.portduino" | 
					
						
							|  |  |  |  |     echo "meshtasticd now runs as the 'meshtasticd' user, not 'root'." | 
					
						
							|  |  |  |  |     echo "See https://github.com/meshtastic/firmware/pull/6718 for details" | 
					
						
							|  |  |  |  | fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | %post | 
					
						
							|  |  |  |  | %systemd_post meshtasticd.service | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | %preun | 
					
						
							|  |  |  |  | %systemd_preun meshtasticd.service | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | %postun | 
					
						
							|  |  |  |  | %systemd_postun_with_restart meshtasticd.service | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-13 04:24:05 +00:00
										 |  |  |  | %files | 
					
						
							| 
									
										
										
										
											2025-05-15 11:40:46 +00:00
										 |  |  |  | %defattr(-,%{meshtasticd_user},%{meshtasticd_user}) | 
					
						
							| 
									
										
										
										
											2025-01-13 04:24:05 +00:00
										 |  |  |  | %license LICENSE | 
					
						
							|  |  |  |  | %doc README.md | 
					
						
							| 
									
										
										
										
											2025-05-15 11:40:46 +00:00
										 |  |  |  | %{_bindir}/meshtasticd | 
					
						
							|  |  |  |  | %dir %{_localstatedir}/lib/meshtasticd | 
					
						
							|  |  |  |  | %{_udevrulesdir}/99-meshtasticd-udev.rules | 
					
						
							| 
									
										
										
										
											2025-01-13 04:24:05 +00:00
										 |  |  |  | %dir %{_sysconfdir}/meshtasticd | 
					
						
							|  |  |  |  | %dir %{_sysconfdir}/meshtasticd/config.d | 
					
						
							|  |  |  |  | %dir %{_sysconfdir}/meshtasticd/available.d | 
					
						
							|  |  |  |  | %config(noreplace) %{_sysconfdir}/meshtasticd/config.yaml | 
					
						
							|  |  |  |  | %config %{_sysconfdir}/meshtasticd/available.d/* | 
					
						
							|  |  |  |  | %{_unitdir}/meshtasticd.service | 
					
						
							|  |  |  |  | %dir %{_datadir}/meshtasticd | 
					
						
							|  |  |  |  | %dir %{_datadir}/meshtasticd/web | 
					
						
							|  |  |  |  | %{_datadir}/meshtasticd/web/* | 
					
						
							| 
									
										
										
										
											2025-02-01 08:58:58 +00:00
										 |  |  |  | %dir %{_sysconfdir}/meshtasticd/ssl | 
					
						
							| 
									
										
										
										
											2025-01-13 04:24:05 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | %changelog | 
					
						
							| 
									
										
										
										
											2025-05-15 11:40:46 +00:00
										 |  |  |  | %autochangelog |