{"version":"https://jsonfeed.org/version/1","title":"OE7DRT","home_page_url":"https://oe7drt.com/","generator":"Hugo v0.164.0 (go1.26.5-X:nodwarf5)","items":[{"content":"(Hot) outdoor food #A hot meal is sometimes needed and I haven\u0026rsquo;t tested much of these \u0026ndash; I bought some from Trek\u0026rsquo;n Eat.\nThese kind of food may not be very healthy but they fill me up.\nI can recommend the following tastes:\nHearty Potato Stir Fry with Beef and green Beans Chicken Tikka Masala Spicy Beef Casserole with Noodles Cold food #My favourite food is Speck and Brötle but I\u0026rsquo;d take anything eatable with me, really.\nProtein bars #I do have one or two of them in my backpack \u0026ndash; and sometimes I eat them ;-)\nEmergency food #I bought a box of emergency food from Sevens Oceans and still have some.\nThis is the most lightweight option in my opinion and absolutely fine on trips where I want to save some weight.\nCoffee beans #I take with me what I have at home, usually \u0026ndash; but I only order coffee from kaffeezentrale.at. I can recommend Lilla e Rose from Blasercafé.\nI do have a titanium French Press and a hand mill \u0026ndash; a hot coffee is the best thing to enjoy somewhere outside of civilisation (add some Speck and Brötle to it and it is absolutely perfect!).\n","date":null,"permalink":"/equipment/outdoor/food/","section":"Equipment","summary":"Outside of this category, the food that I bring with me on these trips","title":"Food","updated":null},{"content":"","date":null,"permalink":"/equipment/radio-stuff/","section":"Equipment","summary":"Some or most of my amateur radio stuff","title":"Amateur radio","updated":null},{"content":"This is the list of transceivers that I owned. First off, a quick comparison of some key specs.\nComparison 1) # Device Weight Output Power2) Icom IC-7300 4274 g 100 W Yaesu FT-891 1952 g 100 W Lab599 TX-500 558 g 10 W Lab599 TX-500 with DIY599 PA500 1400 g 40-50 W Yaesu FTX-1 Optima g 100 W Yaesu FTX-1 Field g 6-10 W 1) some base specs that I consider important for portable operation 2) Well, I don\u0026rsquo;t think a 100W transceiver is well-spent, but a little PA with about 30-50 W can make a difference sometimes (instead of 5 or 10 Watts). I tend to look at a good weight-power ratio ;-) ","date":null,"permalink":"/equipment/radio-stuff/transceivers/","section":"Equipment","summary":"The big ones. May contain QRP transceivers.","title":"Transceivers","updated":null},{"content":"","date":null,"permalink":"/equipment/outdoor/accessories/","section":"Equipment","summary":"Random things like herrings, pouches, small bags, velcro tapes and so on\u0026hellip;","title":"Accessories","updated":null},{"content":"","date":null,"permalink":"/equipment/outdoor/backpacks/","section":"Equipment","summary":"Some of my backpacks","title":"Backpacks","updated":null},{"content":"","date":null,"permalink":"/equipment/outdoor/cooking/","section":"Equipment","summary":"Basic cooking utilities for short and long camping trips","title":"Cooking","updated":null},{"content":"","date":null,"permalink":"/equipment/radio-stuff/handhelds/","section":"Equipment","summary":"The ultra-lightweight transceivers. Mostly for 2m and/or 70cm. Some are digital-ready.","title":"Handhelds","updated":null},{"content":"","date":null,"permalink":"/equipment/outdoor/","section":"Equipment","summary":"Outdoorsy things","title":"Outdoor","updated":null},{"content":"","date":null,"permalink":"/equipment/outdoor/tents-and-hammocks/","section":"Equipment","summary":"A really small \u0026ldquo;collection\u0026rdquo; of the tents and hammocks that I have owned (or still own)","title":"Tents and Hammocks","updated":null},{"content":"","date":null,"permalink":"/equipment/radio-stuff/antennas/","section":"Equipment","summary":"I have no idea what antenna you should use. These are the antennas that I use (or used).","title":"Antennas","updated":null},{"content":"Because some tools might fit into more types of work (like metal or wood work) I decided to go without categories. Seems like I will try use some tags for this.\n","date":null,"permalink":"/equipment/diy/","section":"Equipment","summary":"Stuff for home. Random things probably\u0026hellip;","title":"DIY","updated":null},{"content":"","date":null,"permalink":"/equipment/radio-stuff/accessories/","section":"Equipment","summary":"Additional equipment like antenna tuners, bags, masts, coax cables\u0026hellip;","title":"Accessories","updated":null},{"content":"A few of my used laptops are listed below. Descriptions and/or opinions may not be complete \u0026ndash; they may not have been used only for amateur radio.\n","date":null,"permalink":"/equipment/laptops/","section":"Equipment","summary":"The laptops that I use (or used)","title":"Laptops","updated":null},{"content":"","date":null,"permalink":"/equipment/radio-stuff/software/","section":"Equipment","summary":"Software I use or tested.","title":"Software","updated":null},{"content":"As of some SEGFAULT errors on the actual Fedora package of Hugo I decided to install \u0026ldquo;from source\u0026rdquo;.\n$ CGO_ENABLED=1 go install -tags extended github.com/gohugoio/hugo@latest Make sure the variables GOPATH and GOBIN are set.\nFrom my .zprofile file:\n[[ -d $HOME/go ]] \u0026amp;\u0026amp; export GOPATH=\u0026#34;${HOME}/go\u0026#34; [[ -d ${GOPATH}/bin ]] \u0026amp;\u0026amp; export GOBIN=\u0026#34;${GOPATH}/bin\u0026#34; ","date":"14 May 2026","permalink":"/notes/til/hugo-installation/","section":"Notes","summary":"Install the latest Hugo version from Github with Go","title":"Hugo Installation","updated":"14 May 2026"},{"content":"Not everything in here will make sense.\n","date":null,"permalink":"/notes/operating-systems/","section":"Notes","summary":"","title":"Operating Systems","updated":null},{"content":"","date":null,"permalink":"/categories/amateur-radio/","section":"Categories","summary":"","title":"Amateur-Radio","updated":null},{"content":"","date":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","updated":null},{"content":"","date":null,"permalink":"/tags/command-line/","section":"Tags","summary":"","title":"Command-Line","updated":null},{"content":"","date":null,"permalink":"/tags/linux/","section":"Tags","summary":"","title":"Linux","updated":null},{"content":"","date":null,"permalink":"/tags/scripting/","section":"Tags","summary":"","title":"Scripting","updated":null},{"content":"","date":null,"permalink":"/tags/winlink/","section":"Tags","summary":"","title":"Winlink","updated":null},{"content":" The Activity Log (ICS 214) records details of notable activities at any ICS level, including single resources, equipment, Task Forces, etc. These logs provide basic incident activity documentation, and a reference for any afteraction report.\n— Winlink Activity Log Form Help\nWhat it does #The script will ask you for your activities and saves them in a temporary variable within the script. After entering an activity it shows the previously entered activities with their timestamp. You can either copy them off the screen with your mouse or press CTRL+C and copy them from the scripts final output.\nThe script # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 #!/usr/bin/env sh # Create parseable data for the Winlink Activity Log (ICS 214) # You can paste the output of this script within the ICS 214 Winlink Form # Use `Paste Data from a Spreadsheet` in the ICS 214 form # # Author: Dominic Reich \u0026#34;OE7DRT\u0026#34; \u0026lt;quick.hat4396@qtztsjosmprqmgtunjyf.com\u0026gt; # Created: 2026-03-07 # # Changelog # 2026-03-08 # Added copy to clipboard on exit (forgot that before) # # LICENSE: MIT # # Copyright © 2026 Dominic Reich, OE7DRT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the “Software”), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. trap process 2 process() { if [ -z \u0026#34;${mylist}\u0026#34; ]; then echo -en 2\u0026gt;\u0026amp;1 \u0026#34;\\n\\nList is empty, aborting!\\n\u0026#34; exit 0 fi cutline=\u0026#34;--- 8\u0026lt; --- cut --- 8\u0026lt; --- cut --- 8\u0026lt; ---\u0026#34; echo -en \u0026#34;\\n\\n${cutline}\\n\\n${mylist}\\n${cutline}\\n\u0026#34; command -v wl-copy \u0026gt;/dev/null 2\u0026gt;\u0026amp;1 \u0026amp;\u0026amp; { echo -en \u0026#34;${mylist}\u0026#34; | wl-copy -n; echo -en \u0026#34;\\nThe list has also been copied to the clipboard\\n\u0026#34;; } exit 0 } mylist=\u0026#34;\u0026#34; counter=1 echo -en \u0026#34;This scipt gathers activity tasks used for the Winlink Activity Log (ICS 214) The numbered activities represent the current line number The actual time will be added as soon as you hit the enter key\\n Press \u0026lt;CTRL\u0026gt;+C to stop and show the log\\n\\n\u0026#34; while : do if [ -n \u0026#34;${mylist}\u0026#34; ]; then echo -en \u0026#34;\\nActivities so far:\\n${mylist}\\n\u0026#34; fi echo -en \u0026#34;${counter}. activity: \u0026#34; read mylist+=\u0026#34;$(date +\u0026#34;\u0026#34;\u0026#34;%Y-%m-%d %H:%M\u0026#34;\u0026#34;\u0026#34;)\\t${REPLY}\\n\u0026#34; ((counter++)) done Demonstration # Oh sorry, we could not show you the video!\nWe had the following sources: av1 mp4, h265 mp4, h264 mp4 A short demonstration of how the script could be used (earlier version) Download: H264, H265, AV1 (INFO Some files might not be available.\nH264: Great compatibility, lower quality and bigger size\nH265: Very small files, but not as good as AV1\nAV1: The best quality here, but a bit bigger files as the H265 version\nAn actual browser should usually load the small H265 video per default, others might use the H264 video.\nWindows might not load H265 per default because you would probably have to install the HEVC codec from the Microsoft Store. ) ","date":"8 March 2026","permalink":"/posts/2026/78-winlink-activity-log/","section":"Blog","summary":"A script to help me summarize activities used by the Winlink Activity Log Form. Can be used in a Terminal. For Linux. It might also run on Windows 11 with \u003cabbr title=\"Windows Subsystem for Linux\"\u003eWSL\u003c/abbr\u003e","title":"Winlink Activity Log (ICS 214)","updated":"8 March 2026"},{"content":"","date":"19 February 2026","permalink":"/equipment/radio-stuff/antennas/diamond-x30n/","section":"Equipment","summary":"Currently used to test some propagation within the valley I live.","title":"Diamond X-30N","updated":"14 March 2026"},{"content":"Arrived on Dec 29 2025 15:53 CET\n1762g\n","date":"16 December 2025","permalink":"/equipment/laptops/tuxedo-infinitybook-15/","section":"Equipment","summary":"\u0026hellip;","title":"Tuxedo InfinityBook 15 Gen10 AMD","updated":"16 January 2026"},{"content":"Another email with an attachment - this time it is a ZIP file (which contents are a readme.txt and another (but encrypted) ZIP file).\nI will structure this post a bit different but I will include the sources of the email at the end because inspecting this new zip file is much more interesting to me than showing again the same(/similar) contents of the plain email.\nStarting with the only attachment, a file called webmail_dump.zip.\nAnalysis #FYI, I will save this file into $HOME/Downloads/tmp.\nFirst ZIP file (webmail_dump.zip) #Using tools like file(1) and strings(1) helps a lot for inspecting unknown files and/or filetypes (even if they are binary).\n$ file webmail_dump.zip webmail_dump.zip: Zip archive data, made by v2.0 UNIX, extract using at least v2.0, last modified, last modified Sun, Nov 22 2025 23:36:02, uncompressed size 1146, method=deflate $ unzip -t webmail_dump.zip Archive: webmail_dump.zip testing: readme.txt OK testing: dump_22112025.zip OK No errors detected in compressed data of webmail_dump.zip. Okay, extracting these files gets me the readme.txt file and another archive.\nThe text file (readme.txt) #$ cat readme.txt [SECURITY DUMP] ═══════════════════════════════════════════════════════════ Email: *** Hash: SHA-256: 8baca9a00a429e6ed4a28db176ef4f5d3587c33844f7c71dd338599819ba5c5d Status: INFECTED Build Date: 2025-11-03 09:20:31 Dump Date: 2025-11-22 23:06:02 [+] Access Level: ROOT [+] Data Integrity: COMPROMISED [+] Backup Status: COMPLETE Vulnerability: CVE-2025-34106 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Device Control: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Webcam: [ACTIVE] ✓ Status: STREAMING LIVE Frames Captured: 12,847 Last Update: 2025-11-22 23:36:02 [!] Target is currently being monitored [!] Recording: 1080p @ 30fps [!] Audio: SYNCED Microphone: [LISTENING] ✓ Screen Capture: [ENABLED] ✓ Keyboard Logger: [RUNNING] ✓ So it claims it gained access to my systems using CVE-2025-34106. Let me quickly summarize what this vulnerability is about:\nA buffer overflow vulnerability exists in PDF Shaper versions 3.5 and 3.6 when converting a crafted PDF file to an image using the \u0026lsquo;Convert PDF to Image\u0026rsquo; functionality. An attacker can exploit this vulnerability by tricking a user into opening a maliciously crafted PDF file, leading to arbitrary code execution under the context of the user. This vulnerability has been verified on Windows XP, 7, 8, and 10 platforms using the PDFTools.exe component.\n\u0026ndash; CVE-2025-34106\nKnowing that the only usecase for Windows is on my Hamradio laptop (which I use very, very, very rarely recently) and the fact, that I do not use PDFTools (neither on Windows nor on the Linux machines) underlines the suspicion of reading through a spam mail.\nBut I guess they wanted to make it look legit \u0026ndash; non-tech people might fall for that so it is always good to know a few nerds, right?\nThe second ZIP file (dump_22112025.zip) #$ file dump_22112025.zip dump_22112025.zip: Zip archive data, made by v2.0 UNIX, extract using at least v2.0, last modified, last modified Sun, Nov 22 2025 23:36:02, uncompressed size 0, method=AES Encrypted $ unzip -t dump_22112025.zip Archive: dump_22112025.zip skipping: id-passport/identity.pdf unsupported compression method 99 skipping: id-passport/passport.pdf unsupported compression method 99 skipping: cvv-iban/iban_export.json unsupported compression method 99 skipping: cvv-iban/cvv_dump.sql unsupported compression method 99 skipping: logs/keyboard_log.txt unsupported compression method 99 skipping: logs/browser-passwords.dump unsupported compression method 99 skipping: logs/system.log unsupported compression method 99 skipping: screenshots/webcam-face-2.jpg unsupported compression method 99 skipping: screenshots/webcam-face-1.jpg unsupported compression method 99 skipping: screenshots/desk1.png unsupported compression method 99 skipping: screenshots/webcam-face-3.jpg unsupported compression method 99 skipping: video_recording/webcam_08.mp4 unsupported compression method 99 skipping: video_recording/webcam_01.mp4 unsupported compression method 99 skipping: video_recording/webcam_12.mp4 unsupported compression method 99 skipping: video_recording/webcam_02.mp4 unsupported compression method 99 skipping: video_recording/webcam_03.mp4 unsupported compression method 99 skipping: video_recording/webcam_09.mp4 unsupported compression method 99 skipping: video_recording/webcam_05.mp4 unsupported compression method 99 skipping: video_recording/webcam_10.mp4 unsupported compression method 99 skipping: video_recording/webcam_06.mp4 unsupported compression method 99 skipping: video_recording/webcam_11.mp4 unsupported compression method 99 skipping: video_recording/webcam_04.mp4 unsupported compression method 99 skipping: video_recording/webcam_07.mp4 unsupported compression method 99 skipping: contacts/social-network-friends.csv unsupported compression method 99 skipping: contacts/phone_dump.csv unsupported compression method 99 skipping: contacts/contact_types.sql unsupported compression method 99 Caution: zero files tested in dump_22112025.zip. 26 files skipped because of unsupported compression or encoding. Okay, we can see the filenames here \u0026ndash; that would also be possible with strings(1) , but would have looked not so pretty.\n$ zip2john dump_22112025.zip \u0026gt; hash.txt $ cat hash.txt dump_22112025.zip/id-passport/identity.pdf:$zip2$*0*3*0*748fdbda1e647ba74601770024472d3d*1e18*2*dea4*6c0eb810be6b1e102c34*$/zip2$:id-passport/identity.pdf:dump_22112025.zip:dump_22112025.zip Modify the hash.txt file that only the hash is left on a single line.\n$zip2$*0*3*0*748fdbda1e647ba74601770024472d3d*1e18*2*dea4*6c0eb810be6b1e102c34*$/zip2$ After visiting the hashcat wiki I got an idea of what type the hash could be. Searching for zip2 reveals it is much likely a WinZip hash, I can use the mode 13600 in hashcat to try cracking it.\n$ hashcat -m 13600 -a 3 -w 3 --increment --increment-min=4 --increment-max=8 hash.txt \u0026#34;?d?d?d?d?d?d?d?d\u0026#34; No luck with all-digits from 4 to 8 digits (0000-99999999). So I will try a few common wordlists \u0026ndash; just for fun (not that there would be something interesting in those files, but hey, low-hanging fruits, you know!).\nI stopped the cracking after an hour or two as it seems the password is in none of my used lists. Nonetheless I doubt the encrypted files are even legit files but probably random files with superduper valid looking names. And not forget: the zip archive is about 4.6KB big and there should be all the data mentioned above including 12 video files?\nSo let\u0026rsquo;s dive deeper into the \u0026ldquo;normal\u0026rdquo; email things that I usually present over here.\nThe usual things #Mail headers #Return-Path: \u0026lt;photipinkback1977@gmx.com\u0026gt; Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by slotpi15m48 (Cyrus 3.13.0-alpha0-1481-gc2518cb30-fm-20251113.001-gc2518cb3) with LMTPA; Sat, 22 Nov 2025 18:36:07 -0500 X-Cyrus-Session-Id: slotpi15m48-1763854567-762439-2-15922790326409576325 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-sender-reputation: 666 (domain) X-Spam-score: 35.3 X-Spam-hits: BAYES_00 -1.9, BITCOIN_EXTORT_01 3.634, DCC_CHECK 1.1, DCC_REPUT_70_89 0.1, FREEMAIL_ENVFROM_END_DIGIT 0.25, FREEMAIL_FROM 0.001, FSL_BULK_SIG 0.001, GB_HASHBL_BTC 4.463, HTML_MESSAGE 0.001, ME_SC_NH -0.001, ME_SENDERREP_NEUTRAL 0.001, ME_VADESCAM 3, MIME_HTML_ONLY 0.1, PDS_BTC_ID 0.5, RCVD_IN_PBL 0.001, RCVD_IN_SBL 6, RCVD_IN_ZEN_LASTEXTERNAL 8, SH_HBL_CW_BTC 10, SPF_HELO_PASS -0.001, SPF_PASS -0.001, TRACKER_ID 0.1, LANGUAGES en, BAYES_USED user, SA_VERSION 4.0.1 X-Spam-source: IP=\u0026#39;82.165.159.12\u0026#39;, Host=\u0026#39;mout-xforward.gmx.net\u0026#39;, Country=\u0026#39;DE\u0026#39;, FromHeader=\u0026#39;com\u0026#39;, MailFrom=\u0026#39;com\u0026#39; X-Spam-charsets: subject=\u0026#39;UTF-8\u0026#39;, html=\u0026#39;UTF-8\u0026#39; X-Attached: webmail_dump.zip X-Resolved-to: *** X-Delivered-to: *** X-Mail-from: photipinkback1977@gmx.com Received: from phl-mx-04 ([10.202.2.203]) by phl-compute-02.internal (LMTPProxy); Sat, 22 Nov 2025 18:36:07 -0500 Received: from phl-mx-04.messagingengine.com (localhost [127.0.0.1]) by mailmx.phl.internal (Postfix) with ESMTP id AF1981380100 for \u0026lt;***\u0026gt;; Sat, 22 Nov 2025 18:36:06 -0500 (EST) Received: from mailmx.phl.internal (localhost [127.0.0.1]) by phl-mx-04.messagingengine.com (Authentication Milter) with ESMTP id AA98FA47845.E73F21380111; Sat, 22 Nov 2025 18:36:06 -0500 Received: from mout-xforward.gmx.net (mout-xforward.gmx.net [82.165.159.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by phl-mx-04.messagingengine.com (Postfix) with ESMTPS id E73F21380111 for \u0026lt;***\u0026gt;; Sat, 22 Nov 2025 18:36:05 -0500 (EST) Received: from [177.37.137.49] ([177.37.137.49]) by web-mail.gmx.net (3c-app-mailcom-bs06.server.lan [172.19.170.174]) (via HTTP); Sun, 23 Nov 2025 00:36:03 +0100 MIME-Version: 1.0 Message-ID: \u0026lt;trinity-2e2ea689-c385-4da6-9783-b8e8b37efede-1763854563549@3c-app-mailcom-bs06\u0026gt; From: Melissa Powell \u0026lt;photipinkback1977@gmx.com\u0026gt; To: *** Subject: =?UTF-8?Q?=F0=9F=8D=93_Finish_the_payment_before_?= =?UTF-8?Q?I_trigger_the_distribution_=F0=9F=A4=A3?= Content-Type: multipart/mixed; boundary=trekuen-baee1166-d4f8-4804-ba7a-4e1eda4e14b8 Date: Sun, 23 Nov 2025 00:36:03 +0100 The IP address from which GMX picked up the mail belongs to Brisanet Servicos de Telecomunicacoes — BRISANET SERVICOS DE TELECOMUNICACOES S.A and originates from Brazil.\nThe person might have used a VPN or proxy server to obscure traces.\nThe mail body #Weren\u0026#39;t you taught that jerking off is bad?! 😂 Hello! I\u0026#39;m the Chinese software engineer who hacked into your device OS. I\u0026#39;ve been watching you for months now. You\u0026#39;ve been infected with malware through the adult website you visited. I have downloaded all confidential information from your system and I got some more evidence. I gained access to your smartphone and saw everything you were doing... well, I got a video of you masturbating in the bathroom (nice interior, by the way). I\u0026#39;ve been monitoring your camera for the past 2 weeks - it was active for 47 hours total, and you never noticed because I disabled the LED indicator. I put together footage: on one side of the screen is the video you\u0026#39;re watching at the moment and on the other side is your satisfied face. With one click, I can send this video to all your contacts. I\u0026#39;ve already prepared everything. I have access to your WhatsApp and I can see all your conversations - with your family, your relatives, your friends, your colleagues, and even your boss. I\u0026#39;ve also taken screenshots of your private chats. The video is queued and ready to send. One wrong move and I press the button. I can see your WhatsApp messages, your private chats, your family group chats, and I can send anything I want from your account. I also have your work email and I can see all your professional contacts. Imagine your relatives receiving this video from your WhatsApp number in your family group chat, or your boss and colleagues receiving it during work hours. How would you explain that? Your life will be ruined. All your data is already uploaded to my secure servers. Even if you delete everything from your device right now, I still have copies. The email templates are ready. The video is processed and optimized. Everything is set up. I\u0026#39;m just waiting for the timer to expire. I\u0026#39;m monitoring this email right now. If you forward it, show it to someone, or try to contact the police, I\u0026#39;ll know instantly and the video will be sent immediately to your entire contact list, starting with your relatives and your work contacts. There\u0026#39;s no way to stop me once I press that button. Do you want to prevent this? I understand your concern. Especially since the video was quite vulgar, I can\u0026#39;t imagine the embarrassment you will feel when your family, relatives, colleagues, friends and everyone else see it. Your reputation will be destroyed forever. You\u0026#39;ll never be able to look them in the eye again. If you need to delete all of your collected data, just send 0.05 btc (Bitcoin) to a wallet that was specially generated for your email address. bc1q5lukj7heyexw9e3ncnjgs7c4uutgwadaqja5sa Yes, it\u0026#39;s that simple! My script will detect the transaction to this wallet and will automatically delete all the dirt that was collected on you from my servers. You have 48 hours to pay. The countdown started the moment you opened this email. If you don\u0026#39;t pay within 48 hours, the video will be automatically sent on Monday at 9 AM (your local time) - right when everyone is at work, checking their messages. Every hour you delay, I\u0026#39;ll send the video to random contacts from your list, starting with your relatives and work colleagues. After 48 hours, everyone gets it - your entire WhatsApp contact list, including all your relatives, and I\u0026#39;ll also post it on your social media accounts from your own profile. There will be no way to undo this. Timer ID: 1763219944 The timer started automatically after you opened this email. You\u0026#39;re being watched right now. Every second counts. If you don\u0026#39;t have enough money, you can pay half the amount (0.025 btc) to your wallet in order to extend the timer for another 48 hours. Do not try to reply to this email, it makes absolutely no sense (the sender\u0026#39;s email address as well as the Bitcoin wallet were generated automatically especially for you and cannot be traced). I don\u0026#39;t make mistakes. Don\u0026#39;t test me. If I see that you\u0026#39;ve shared this message with someone else (for example, if it is opened on a different device than yours), the video will instantly start being sent out to your contact list. I have monitoring scripts running 24/7. Your relatives will be the first to receive it in your family group chats. This is your only warning. Take it easy. Take it as a little life lesson and be more careful in the future. Yes, the internet advice about taping the camera isn\u0026#39;t so useless. Good luck with that. Bye. ❤️ P.S. I\u0026#39;ve attached an archive containing all the compromising data I\u0026#39;ve collected about you - your personal files, passwords, browser history, webcam recordings, screenshots, and much more. This is just a small sample of what I have. Everything is encrypted, but I can decrypt it at any moment. I have 12.3 GB of your data ready to leak if you don\u0026#39;t cooperate. So to break this down a little bit:\nThe chinese hacker\u0026hellip;\nSorry, this is the obvious. (may still be true, *lol*) Someone told him about the LED indicator.\nSo this must be mentioned to fool people that he can bypass all these hardware lights via software. My Whatsapp\nOK. Let\u0026rsquo;s be real. I do have a Whatsapp installed. But all the chats that are mentioned don\u0026rsquo;t even exist. (As Whatsapp is a last resort for people that cannot reach me otherwise) Work email\nI\u0026rsquo;m a construction worker \u0026ndash; I do not have any work related tech devices. 0.05 BTC? (3764,47 EUR)\nAre you crazy? Your greed will someday kill you. Timer ID\n*lol* taping the camera\nI must admit, I\u0026rsquo;ve done that anyway on almost all devices including the TV switch on which I even removed the soldered mic. The html body #--trekuen-baee1166-d4f8-4804-ba7a-4e1eda4e14b8 Content-Type: text/html; charset=UTF-8 \u0026lt;html\u0026gt;\u0026lt;head\u0026gt;\u0026lt;/head\u0026gt;\u0026lt;body\u0026gt;\u0026lt;div style=\u0026#34;font-family: Verdana;font-size: 12.0px;\u0026#34;\u0026gt;\u0026lt;div style=\u0026#34;display:none; font-size:1px; color:#e5e5e5; line-height:1px; font-family:Verdana, Helvetica, sans-serif; max-height:0px; max-width:0px; opacity:0; overflow:hidden; mso-hide:all;\u0026#34;\u0026gt;Weren\u0026amp;#39;t you taught that jerking off is bad?! \u0026amp;#128514;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;font-family: -apple-system, BlinkMacSystemFont, \u0026amp;#39;Segoe UI\u0026amp;#39;, Roboto, \u0026amp;#39;Helvetica Neue\u0026amp;#39;, Arial, sans-serif; background-color: #000000; color: #ffffff; padding: 60px 40px; max-width: 600px; margin: 0 auto; line-height: 1.7;\u0026#34;\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;Hello!\u0026lt;/p\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;I\u0026amp;#39;m the Chinese software engineer who hacked into your device OS.\u0026lt;/p\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;I\u0026amp;#39;ve been watching you for months now. You\u0026amp;#39;ve been infected with malware through the adult website you visited. I have downloaded all confidential information from your system and I got some more evidence.\u0026lt;/p\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;\u0026lt;strong style=\u0026#34;font-weight: 600;\u0026#34;\u0026gt;I gained access to your smartphone and saw everything you were doing...\u0026lt;/strong\u0026gt; well, I got a video of you masturbating in the bathroom (nice interior, by the way). I\u0026amp;#39;ve been monitoring your camera for the past 2 weeks - it was active for 47 hours total, and you never noticed because I disabled the LED indicator.\u0026lt;/p\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;I put together footage: on one side of the screen is the video you\u0026amp;#39;re watching at the moment and on the other side is your satisfied face. With one click, I can send this video to all your contacts.\u0026lt;/p\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;\u0026lt;strong style=\u0026#34;font-weight: 600;\u0026#34;\u0026gt;I\u0026amp;#39;ve already prepared everything.\u0026lt;/strong\u0026gt; I have access to your WhatsApp and I can see all your conversations - with your family, your relatives, your friends, your colleagues, and even your boss. I\u0026amp;#39;ve also taken screenshots of your private chats. The video is queued and ready to send. One wrong move and I press the button.\u0026lt;/p\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;I can see your WhatsApp messages, your private chats, your family group chats, and I can send anything I want from your account. I also have your work email and I can see all your professional contacts. Imagine your relatives receiving this video from your WhatsApp number in your family group chat, or your boss and colleagues receiving it during work hours. How would you explain that? \u0026lt;strong style=\u0026#34;font-weight: 600; color: #ff3b30;\u0026#34;\u0026gt;Your life will be ruined.\u0026lt;/strong\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;All your data is already uploaded to my secure servers. Even if you delete everything from your device right now, I still have copies. The email templates are ready. The video is processed and optimized. Everything is set up. I\u0026amp;#39;m just waiting for the timer to expire.\u0026lt;/p\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;\u0026lt;strong style=\u0026#34;font-weight: 600;\u0026#34;\u0026gt;I\u0026amp;#39;m monitoring this email right now.\u0026lt;/strong\u0026gt; If you forward it, show it to someone, or try to contact the police, I\u0026amp;#39;ll know instantly and the video will be sent immediately to your entire contact list, starting with your relatives and your work contacts. \u0026lt;strong style=\u0026#34;font-weight: 600; color: #ff3b30;\u0026#34;\u0026gt;There\u0026amp;#39;s no way to stop me once I press that button.\u0026lt;/strong\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;div style=\u0026#34;border-top: 1px solid #333333; margin: 40px 0; padding-top: 40px;\u0026#34;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;Do you want to prevent this?\u0026lt;/p\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;I understand your concern. Especially since the video was quite vulgar, I can\u0026amp;#39;t imagine the embarrassment you will feel when your family, relatives, colleagues, friends and everyone else see it. Your reputation will be destroyed forever. \u0026lt;strong style=\u0026#34;font-weight: 600; color: #ff3b30;\u0026#34;\u0026gt;You\u0026amp;#39;ll never be able to look them in the eye again.\u0026lt;/strong\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;div style=\u0026#34;background-color: #1a1a1a; border: 1px solid #333333; border-radius: 8px; padding: 30px; margin: 40px 0;\u0026#34;\u0026gt; \u0026lt;p style=\u0026#34;font-size: 16px; color: #ffffff; margin: 0 0 20px 0; font-weight: 400;\u0026#34;\u0026gt;If you need to delete all of your collected data, just send 0.05 btc (Bitcoin) to a wallet that was specially generated for your email address.\u0026lt;/p\u0026gt; \u0026lt;div style=\u0026#34;background-color: #000000; border: 1px solid #333333; border-radius: 6px; padding: 20px; margin: 20px 0;\u0026#34;\u0026gt; \u0026lt;p style=\u0026#34;font-size: 15px; color: #ffffff; margin: 0; font-weight: 400; font-family: \u0026amp;#39;SF Mono\u0026amp;#39;, \u0026amp;#39;Monaco\u0026amp;#39;, \u0026amp;#39;Courier New\u0026amp;#39;, monospace; word-break: break-all; letter-spacing: 0.5px;\u0026#34;\u0026gt;bc1q5lukj7heyexw9e3ncnjgs7c4uutgwadaqja5sa\u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;Yes, it\u0026amp;#39;s that simple! My script will detect the transaction to this wallet and will automatically delete all the dirt that was collected on you from my servers.\u0026lt;/p\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;\u0026lt;strong style=\u0026#34;font-weight: 600;\u0026#34;\u0026gt;You have 48 hours to pay.\u0026lt;/strong\u0026gt; The countdown started the moment you opened this email. If you don\u0026amp;#39;t pay within 48 hours, the video will be automatically sent on Monday at 9 AM (your local time) - right when everyone is at work, checking their messages. Every hour you delay, I\u0026amp;#39;ll send the video to random contacts from your list, starting with your relatives and work colleagues. After 48 hours, everyone gets it - your entire WhatsApp contact list, including all your relatives, and I\u0026amp;#39;ll also post it on your social media accounts from your own profile. \u0026lt;strong style=\u0026#34;font-weight: 600; color: #ff3b30;\u0026#34;\u0026gt;There will be no way to undo this.\u0026lt;/strong\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;div style=\u0026#34;background-color: #1a1a1a; border: 1px solid #ff3b30; border-radius: 8px; padding: 25px; margin: 30px 0;\u0026#34;\u0026gt; \u0026lt;p style=\u0026#34;font-size: 15px; color: #ffffff; margin: 0 0 10px 0; font-weight: 400; font-family: \u0026amp;#39;SF Mono\u0026amp;#39;, \u0026amp;#39;Monaco\u0026amp;#39;, \u0026amp;#39;Courier New\u0026amp;#39;, monospace;\u0026#34;\u0026gt;Timer ID: 1763219944\u0026lt;/p\u0026gt; \u0026lt;p style=\u0026#34;font-size: 16px; color: #ff3b30; margin: 10px 0 0 0; font-weight: 600;\u0026#34;\u0026gt;The timer started automatically after you opened this email. You\u0026amp;#39;re being watched right now. Every second counts.\u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;If you don\u0026amp;#39;t have enough money, you can pay half the amount (0.025 btc) to your wallet in order to extend the timer for another 48 hours.\u0026lt;/p\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;Do not try to reply to this email, it makes absolutely no sense (the sender\u0026amp;#39;s email address as well as the Bitcoin wallet were generated automatically especially for you and cannot be traced). I don\u0026amp;#39;t make mistakes. \u0026lt;strong style=\u0026#34;font-weight: 600; color: #ff3b30;\u0026#34;\u0026gt;Don\u0026amp;#39;t test me.\u0026lt;/strong\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;\u0026lt;strong style=\u0026#34;font-weight: 600; color: #ff3b30;\u0026#34;\u0026gt;If I see that you\u0026amp;#39;ve shared this message with someone else (for example, if it is opened on a different device than yours), the video will instantly start being sent out to your contact list. I have monitoring scripts running 24/7. Your relatives will be the first to receive it in your family group chats. This is your only warning.\u0026lt;/strong\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;div style=\u0026#34;border-top: 1px solid #333333; margin: 40px 0; padding-top: 40px;\u0026#34;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;Take it easy. Take it as a little life lesson and be more careful in the future.\u0026lt;/p\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;\u0026lt;strong style=\u0026#34;font-weight: 600;\u0026#34;\u0026gt;Yes, the internet advice about taping the camera isn\u0026amp;#39;t so useless.\u0026lt;/strong\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0 0 30px 0; font-weight: 400;\u0026#34;\u0026gt;Good luck with that. Bye. \u0026amp;#10084;\u0026amp;#65039;\u0026lt;/p\u0026gt; \u0026lt;div style=\u0026#34;border-top: 1px solid #333333; margin: 40px 0; padding-top: 40px;\u0026#34;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;p style=\u0026#34;font-size: 17px; color: #ffffff; margin: 0; font-weight: 400;\u0026#34;\u0026gt;\u0026lt;strong style=\u0026#34;font-weight: 600;\u0026#34;\u0026gt;P.S.\u0026lt;/strong\u0026gt; I\u0026amp;#39;ve attached an archive containing all the compromising data I\u0026amp;#39;ve collected about you - your personal files, passwords, browser history, webcam recordings, screenshots, and much more. This is just a small sample of what I have. Everything is encrypted, but I can decrypt it at any moment. \u0026lt;strong style=\u0026#34;font-weight: 600; color: #ff3b30;\u0026#34;\u0026gt;I have 12.3 GB of your data ready to leak if you don\u0026amp;#39;t cooperate.\u0026lt;/strong\u0026gt;\u0026lt;/p\u0026gt; ","date":"23 November 2025","permalink":"/spam/2025-11-23-i-am-truly-amazed/","section":"Mail spam I received","summary":"A bit more effort has been put into this email. I am truly amazed but as always, looking a bit deeper shows again the true intentions of these mails\u0026hellip;","title":"I am truly amazed","updated":"3 February 2026"},{"content":"Hi there, some time went by and another good spam mail reached me today.\nAlthough I\u0026rsquo;m currently short on time I could not wait to look deeper into this kind of email.\nThe mail body #in text/plain\n--=_010556a0ce8435b6915c010a97c53f6e Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed [1] This is an automated email. Please do not reply Your guide to trading basics--concepts, markets, and pitfalls to avoid. A new webinar episode goes live tomorrow! Watch Ross place real trades on live charts as he applies proven strategies, explains his decisions, and answers your questions. We\u0026#39;ll cover: * How a professional trader executes trades under live conditions * Real-time market analysis and trade setups * Live insights from experts Webinar Details Topic: Live Trading Session 2.0 Speaker: Ross Maxwell, Global Strategy Operations Lead, VT Markets Date: 22 Sept 2025 Time: 10AM UK (BST) About the Speaker: Ross Maxwell brings over 20 years of experience in key financial hubs in London and Hong Kong. Register Now [2] [3] [4] [4] [5] [6] [7] [8] [9] [10] [10] Risk Warning: CFD trading carries heightened risks due to leverage and may not be suitable for all investors. Fully comprehend the associated risks [11] before committing to trade. The Company disclaims any liability for loss or damage arising from transactions involving CFDs. VT Markets is a brand name of regulated companies authorised and registered in various jurisdictions. For details, visit our official website [4]. This email is not intended for distribution or use in any country or jurisdiction where it would contravene local law or regulation. Click here to unsubscribe [12]. Copyright 2025 VT Markets. Links: ------ [1] https://s3.amazonaws.com/coursera-assessments/assessments/1753567124646/1db6843d-52b2-4583-8d2c-baa77c402dd2/api.html?url=aHR0cHM6Ly9zZWN1cmVjbHVzdGVyLnNicy9mYXN0bWFpbC8= [2] https://emails.vtmarkets.com/MTc4LUhPTS05MzUAAAGdCg6DlqKbki_9Z5rjxnM5uQCn-siDebfikdy5ySno-d2IfXkE0C8ATbwcqH_X9egpalbVpfg= [3] https://emails.vtmarkets.com/MTc4LUhPTS05MzUAAAGdCg6Dl7PnSrxkPIixkSPEL0ACdwo1HSZNHxWgeeUCYTciqEt8Ne3Dx9v29osSUlQkYJ9z574= [4] https://emails.vtmarkets.com/MTc4LUhPTS05MzUAAAGdCg6Dl4jBa4YW8GzRavmTW2lexY5cCv081PW0DQ2XHPxP8C0IFrOWQBqFD86kvORADsdEo0A= [5] https://emails.vtmarkets.com/MTc4LUhPTS05MzUAAAGdCg6Dl3U-Ce6apVI_cZlRyhzerk9ouF6_WhlYaDn9tpbJ5zLx5w--T5fZjyYGKBxaC6XtQhQ= [6] https://emails.vtmarkets.com/MTc4LUhPTS05MzUAAAGdCg6Dl-c7acIUCHWIZOIFNE2BRe-gu6sZRAo10Un8Lzj08jCbO0BatZIkYHF64vdK3Y3zpws= [7] https://emails.vtmarkets.com/MTc4LUhPTS05MzUAAAGdCg6Dl3Op5IZDszy176TJWVXj-q8ly7zmjNphJe7csvPGTAbSqXrTpF-KP4ya8Lwh8GhQDlw= [8] https://emails.vtmarkets.com/MTc4LUhPTS05MzUAAAGdCg6DlxNOP3oBL9cX5VpK1N_OsHg2d6Y_GsQW_MPdVgkti-sUHScvyvMNZ-bafPF-P04rzOo= [9] https://emails.vtmarkets.com/MTc4LUhPTS05MzUAAAGdCg6Dl9ofdvt9iq77Jdb49PpY14r4vRSJrRVnM1CT4EWKFa6cOg8FYPR-l9r-8LMPUErWmto= [10] https://emails.vtmarkets.com/MTc4LUhPTS05MzUAAAGdCg6DlmMbV07qidJTNdO2YlpOiqi4X2lh2NjDoPfvhjlTNLfGHL7cqd9gcFj0vnDfldR3Frs= [11] https://emails.vtmarkets.com/MTc4LUhPTS05MzUAAAGdCg6Dl4Eo6sI6bV69YUKcAGtucZV6UBCPJBUVjD_7Vm6B6Yuewif_BoZkcBYMCBc3t9OTejw= [12] https://emails.vtmarkets.com/MTc4LUhPTS05MzUAAAGdCg6Dl1J8sCELKV4tqFhBnFRVBlFeH-0m60qeJAsWXA30st_Afo1CRbmnyTbAW0_G79SPB2Q= That is what the email looks to me in the first place. It is not interesting, I haven\u0026rsquo;t even looked at the mentioned domains so far.\nThe html body #It is not that interesting but since it is in the email I\u0026rsquo;ll show you an excerpt of it:\n--=_010556a0ce8435b6915c010a97c53f6e Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=UTF-8 \u0026lt;html\u0026gt;\u0026lt;head\u0026gt;\u0026lt;meta http-equiv=3D\u0026#34;Content-Type\u0026#34; content=3D\u0026#34;text/html; charset= =3DUTF-8\u0026#34; /\u0026gt;\u0026lt;/head\u0026gt;\u0026lt;body style=3D\u0026#39;font-size: 10pt; font-family: Verdana,Gen= eva,sans-serif\u0026#39;\u0026gt; \u0026lt;p\u0026gt;\u0026lt;a href=3D\u0026#34;https://s3.amazonaws.com/coursera-assessments/assessments/175= 3567124646/1db6843d-52b2-4583-8d2c-baa77c402dd2/api.html?url=3DaHR0cHM6Ly9z= ZWN1cmVjbHVzdGVyLnNicy9mYXN0bWFpbC8=3D\u0026#34; target=3D\u0026#34;_blank\u0026#34; rel=3D\u0026#34;noopener\u0026#34;\u0026gt;= \u0026lt;img style=3D\u0026#34;display: block; margin: 0 auto; border: 0; outline: none; te= xt-decoration: none;\u0026#34; src=3D\u0026#34;https://s3.amazonaws.com/coursera-assessments/= assessments/1758043409311/a6bd739c-7388-45ea-9839-18efd67789e6/fs.png\u0026#34; alt= =3D\u0026#34;Click to view the full promotion\u0026#34; width=3D\u0026#34;729\u0026#34; /\u0026gt; \u0026lt;/a\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;This is an automated email. Please do not reply\u0026lt;/p\u0026gt; \u0026lt;div style=3D\u0026#34;height: 2000px;\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;p\u0026gt;\u0026lt;br /\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;!-- Marketo Variable Definitions --\u0026gt; \u0026lt;p\u0026gt;\u0026lt;br /\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;!-- Other Meta Tags --\u0026gt; \u0026lt;p\u0026gt;\u0026lt;br /\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;!-- [if mso]\u0026gt; \u0026lt;style type=3D\u0026#39;text/css\u0026#39;\u0026gt; =2Eprimary-font { font-family: Helvetica !important; } \u0026lt;/style\u0026gt; \u0026lt;![endif]--\u0026gt; \u0026lt;p\u0026gt;\u0026lt;br /\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;!-- [if mso]\u0026gt; \u0026lt;style type=3D\u0026#39;text/css\u0026#39;\u0026gt; =2Esecondary-font { font-family: Helvetica !important; } \u0026lt;/style\u0026gt; \u0026lt;![endif]--\u0026gt; \u0026lt;style\u0026gt; @media only screen and (width: 600px) {table#boxing { width: 600px = !important } } \u0026lt;/style\u0026gt; \u0026lt;!-- [if gte mso 9]\u0026gt; \u0026lt;style type=3D\u0026#34;text/css\u0026#34;\u0026gt; #hero .table3-3{ width: 600 !important; } \u0026lt;/style\u0026gt; \u0026lt;![endif]--\u0026gt; \u0026lt;style media=3D\u0026#34;all\u0026#34;\u0026gt; @-ms-viewport { width: device-width; } \u0026lt;/style\u0026gt; \u0026lt;style media=3D\u0026#34;all\u0026#34;\u0026gt; @media only screen and (max-width: 600px) {body { wid= th: auto !important } table[class=3D\u0026#34;table600\u0026#34;] { width: 450px !important }= table[class=3D\u0026#34;table-inner\u0026#34;] { width: 86% !important } table[class=3D\u0026#34;tabl= e1-2\u0026#34;] { width: 47% !important; clear: both } table[class=3D\u0026#34;table1-3\u0026#34;] { w= idth:=20 29.4% !important } table[class=3D\u0026#34;table1-4\u0026#34;] { width: 100% !important; text= -align: left !important } table[class=3D\u0026#34;table2-3\u0026#34;] { width: 64% !important= ; text-align: center !important } table[class=3D\u0026#34;table3-3\u0026#34;] { width: 100% != important; text-align: center !important; clear: both }=20 table[class=3D\u0026#34;footer-logo\u0026#34;] { width: 10% !important; text-align: right !im= portant } td[class=3D\u0026#34;outer\u0026#34;] { min-width: 0 !important } td[class=3D\u0026#34;stack= \u0026#34;] { padding-bottom: 40px !important } .stack-tablet { padding-bottom: 20px= !important; overflow: visible !important; float: none !important; mso-hide= :=20 none !important; display: block !important } img[class=3D\u0026#34;mobile-img\u0026#34;] { wi= dth: 100% !important; height: auto !important } td[class=3D\u0026#34;center-tablet\u0026#34;]= { text-align: center !important } td[class=3D\u0026#34;hide-tablet\u0026#34;] { display: non= e !important } table[class=3D\u0026#34;footer-column\u0026#34;] { width: 47% !important;=20 text-align: left !important } .m_two-articles .table1-2 { width: 100% !impo= rtant } .m_two-articles .photo img { width: 100% !important } .m_two-articl= es .stack-tablet td { height: 60px !important } .m_free-image img { width: = 450px !important } } @media only screen and (max-width: 479px) {body {=20 width: auto !important } table[class=3D\u0026#34;table600\u0026#34;] { width: 540px !importan= t } table[class=3D\u0026#34;table-inner\u0026#34;] { width: 80% !important; float: none !impo= rtant } table[class=3D\u0026#34;table1-2\u0026#34;] { width: 100% !important; clear: both } t= able[class=3D\u0026#34;table1-3\u0026#34;] { width: 100% !important; clear: both }=20 table[class=3D\u0026#34;table1-4\u0026#34;] { width: 100% !important; text-align: center !imp= ortant } table[class=3D\u0026#34;table2-3\u0026#34;] { width: 100% !important; text-align: ce= nter !important } table[class=3D\u0026#34;table3-3\u0026#34;] { width: 100% !important; text-= align: center !important; clear: both } table[class=3D\u0026#34;footer-logo\u0026#34;] { widt= h: 60%=20 !important; text-align: center !important } td[class=3D\u0026#34;outer\u0026#34;] { min-width= : 0 !important } td[class=3D\u0026#34;td3-1\u0026#34;] { width: 60% !important; text-align: c= enter !important } .stack-smartphone { padding-bottom: 20px !important; ove= rflow: visible !important; float: none !important; display: block !importan= t;=20 mso-hide: none !important } td[class=3D\u0026#34;center-smartphone\u0026#34;] { text-align: c= enter !important } img[class=3D\u0026#34;mobile-img\u0026#34;] { width: 100% !important } td[= class=3D\u0026#34;center-tablet\u0026#34;] { text-align: center !important } td[class=3D\u0026#34;hide= -smartphone\u0026#34;] { display: none !important } table[class=3D\u0026#34;footer-column\u0026#34;] {= width:=20 100% !important; text-align: center !important } .m_free-image img { width:= 290px !important } .m_hr .table-inner { width: 100% !important } } \u0026lt;/style\u0026gt; \u0026lt;style type=3D\u0026#34;text/css\u0026#34;\u0026gt;div#emailPreHeader{ display: none !important; }\u0026lt;/s= tyle\u0026gt; \u0026lt;div id=3D\u0026#34;emailPreHeader\u0026#34; style=3D\u0026#34;mso-hide: all; visibility: hidden; opac= ity: 0; color: transparent; mso-line-height-rule: exactly; line-height: 0; = font-size: 0px; overflow: hidden; border-width: 0; display: none !important= ;\u0026#34;\u0026gt;Your guide to trading basics\u0026amp;mdash;concepts, markets, and pitfalls to av= oid.\u0026lt;/div\u0026gt; \u0026lt;div style=3D\u0026#34;display: none; white-space: nowrap; font: 15px courier; line-= height: 0;\u0026#34;\u0026gt;\u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; = \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp= ; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp; \u0026amp;nbsp;\u0026lt;/di= v\u0026gt; \u0026lt;!-- Outer table START --\u0026gt; \u0026lt;table style=3D\u0026#34;-webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%;= mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-spacing: 0; border-co= llapse: collapse;\u0026#34; border=3D\u0026#34;0\u0026#34; width=3D\u0026#34;100%\u0026#34; cellspacing=3D\u0026#34;0\u0026#34; cellpaddin= g=3D\u0026#34;0\u0026#34;\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td class=3D\u0026#34;outer\u0026#34; style=3D\u0026#34;-webkit-text-size-adjust: 100%; -ms-text-size-= adjust: 100%; mso-table-lspace: 0pt; mso-table-rspace: 0pt; word-break: bre= ak-word; -webkit-hyphens: none; -moz-hyphens: none; hyphens: none; min-widt= h: 600px; border-collapse: collapse; background-color: #eeeeee; padding: 20= px 0px;\u0026#34; valign=3D\u0026#34;top\u0026#34;\u0026gt; \u0026lt;table id=3D\u0026#34;boxing\u0026#34; style=3D\u0026#34;-webkit-text-size-adjust: 100%; -ms-text-size= -adjust: 100%; mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-spacing= : 0; border-collapse: collapse;\u0026#34; border=3D\u0026#34;0\u0026#34; width=3D\u0026#34;600\u0026#34; cellspacing=3D\u0026#34;= 0\u0026#34; cellpadding=3D\u0026#34;0\u0026#34; align=3D\u0026#34;center\u0026#34;\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;!-- snip snip -- sorry the html code is not that interesting --\u0026gt; The headers #These are a bit more interesting to me, as they tell a little story about the origin of this email.\nReturn-Path: \u0026lt;norepl*@fastmail.com\u0026gt; Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by slotpi15m48 (Cyrus 3.13.0-alpha0-1232-g5ef1697bd-fm-20250915.001-g5ef1697b) with LMTPA; Mon, 22 Sep 2025 13:19:13 -0400 X-Cyrus-Session-Id: slotpi15m48-1758561553-306118-2-14022213412802617382 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no (\u0026#34;Email failed DMARC policy for domain\u0026#34;) X-Spam-sender-reputation: 500 (none) X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HTML_FONT_LOW_CONTRAST 0.001, HTML_IMAGE_RATIO_04 0.001, HTML_MESSAGE 0.001, ME_NOAUTH 0.01, ME_SENDERREP_NEUTRAL 0.001, RCVD_IN_DNSWL_NONE -0.0001, RCVD_IN_MSPIKE_H3 0.001, RCVD_IN_MSPIKE_WL 0.001, SPF_HELO_NONE 0.001, SPF_SOFTFAIL 0.665, LANGUAGES en, BAYES_USED user, SA_VERSION 4.0.1 X-Backscatter: NotFound1 X-Backscatter-Hosts: X-Spam-source: IP=\u0026#39;23.83.223.165\u0026#39;, Host=\u0026#39;sienna.cherry.relay.mailchannels.net\u0026#39;, Country=\u0026#39;CA\u0026#39;, FromHeader=\u0026#39;com\u0026#39;, MailFrom=\u0026#39;com\u0026#39; X-Spam-charsets: plain=\u0026#39;US-ASCII\u0026#39;, html=\u0026#39;UTF-8\u0026#39; X-Resolved-to: *** X-Delivered-to: *** X-Mail-from: norepl*@fastmail.com Received: from phl-mx-03 ([10.202.2.202]) by phl-compute-05.internal (LMTPProxy); Mon, 22 Sep 2025 13:19:13 -0400 Received: from phl-mx-03.messagingengine.com (localhost [127.0.0.1]) by mailmx.phl.internal (Postfix) with ESMTP id AAD7E4BA012D for \u0026lt;***\u0026gt;; Mon, 22 Sep 2025 13:19:12 -0400 (EDT) Received: from mailmx.phl.internal (localhost [127.0.0.1]) by phl-mx-03.messagingengine.com (Authentication Milter) with ESMTP id E30A1F84042.29AA64BA00DA; Mon, 22 Sep 2025 13:19:12 -0400 Received: from sienna.cherry.relay.mailchannels.net (sienna.cherry.relay.mailchannels.net [23.83.223.165]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by phl-mx-03.messagingengine.com (Postfix) with ESMTPS id 29AA64BA00DA for \u0026lt;***\u0026gt;; Mon, 22 Sep 2025 13:19:12 -0400 (EDT) X-Sender-Id: host4yourself|x-authuser|support00@netlfix.com Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 4A6332E2A9F; Mon, 22 Sep 2025 17:19:10 +0000 (UTC) Received: from apollo.iwebfusion.net (trex-blue-6.trex.outbound.svc.cluster.local [100.110.178.31]) (Authenticated sender: host4yourself) by relay.mailchannels.net (Postfix) with ESMTPA id 8B0B72E272B; Mon, 22 Sep 2025 17:19:05 +0000 (UTC) X-Sender-Id: host4yourself|x-authuser|support00@netlfix.com X-MailChannels-SenderId: host4yourself|x-authuser|support00@netlfix.com X-MailChannels-Auth-Id: host4yourself Received: from apollo.iwebfusion.net (apollo.iwebfusion.net [192.154.231.67]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.110.178.31 (trex/7.1.3); Mon, 22 Sep 2025 17:19:10 +0000 Received: from [::1] (port=39118 helo=apollo.iwebfusion.net) by apollo.iwebfusion.net with esmtpa (Exim 4.98.2) (envelope-from \u0026lt;norepl*@fastmail.com\u0026gt;) id 1v0kBs-00000004QyD-3nzO; Mon, 22 Sep 2025 13:19:04 -0400 MIME-Version: 1.0 Date: Mon, 22 Sep 2025 13:19:03 -0400 From: noreply \u0026lt;norepl*@fastmail.com\u0026gt; To: inf*@fastmail.com Subject: Action Required To Keep Your Fastmail Services Running User-Agent: Roundcube Webmail/1.6.11 Message-ID: \u0026lt;8e6c1f70efa44a77b91918ba3cf3add5@fastmail.com\u0026gt; X-Sender: norepl*@fastmail.com Content-Type: multipart/alternative; boundary=\u0026#34;=_010556a0ce8435b6915c010a97c53f6e\u0026#34; X-AuthUser: support00@netlfix.com I highlighted the X-Delivered-to header because I have this shown in my mailclients usually and that lets me easily identify to what final email address the spam was sent to (yes, even if they send mail to me via Bcc:!) \u0026ndash; and because I usually use no email address twice when I create online accounts I can also identify the leak.\nSome thoughts #The used support00@netlfix.com account is obviously also used to trick Netflix users but I think I haven\u0026rsquo;t got one of these for now.\nI wondered a bit that no spam filter marked this one as spam, I think I\u0026rsquo;ll include the SPF and MARC/DKIM results in future filtering but for now I\u0026rsquo;m all good.\nThe email was sent to one of my noreply addresses, which I got already some of the Netcup phishing emails.\nAt least, they found out about Fastmail, which is an excellent email service provider \u0026ndash; I use it for years!\n","date":"22 September 2025","permalink":"/spam/2025-09-22-this-one-is-also-new/","section":"Mail spam I received","summary":"This is one of the kind that makes me look twice at an email. But only once into the source of it 😉","title":"This one is also new","updated":"25 September 2025"},{"content":"","date":null,"permalink":"/tags/compression/","section":"Tags","summary":"","title":"Compression","updated":null},{"content":"","date":null,"permalink":"/categories/computerstuff/","section":"Categories","summary":"","title":"Computerstuff","updated":null},{"content":"I recently had to push a few backups around and I wanted to know if there is a better choice than XZ around: it is!\nWhy? What? #I usually use gzip(1) for archives that need to be quickly made and xz(1) for archives that need to be smaller and I already learned about zstd(1) but barely used it so far.\nThat has to change!\nBecause I did a quick test on my websites files and was astonished:\nTest #1 with default options #I will archive my local website folder with tar and compress the archive within tar with a) gzip, b) xz and c) zstd.\nGZIP #% time tar -czf oe7drt-website.tar.gz oe7drt-website tar -czf oe7drt-website.tar.gz oe7drt-website 18,87s user 0,63s system 101% cpu 19,199 total XZ #% time tar -cJf oe7drt-website.tar.xz oe7drt-website tar -cJf oe7drt-website.tar.xz oe7drt-website 528,65s user 2,26s system 719% cpu 1:13,81 total ZSTD #% time tar --create --file oe7drt-website.tar.zst --zstd oe7drt-website tar --create --file oe7drt-website.tar.zst --zstd oe7drt-website 3,25s user 1,08s system 278% cpu 1,555 total Result #% lld *.tar.* 580 MB  oe7drt-website.tar.gz 868 MB  oe7drt-website.tar.xz 871 MB  oe7drt-website.tar.zst % du -sh oe7drt-website/ 915M oe7drt-website/ Compression Time Size Ratio GZIP 00:18 580MB 63% XZ 08:48 868MB 94% ZSTD 00:03 871MB 95% With ZSTD being super-fast and just slightly bigger than XZ it is the logical choice for me in terms of \u0026ldquo;saving time\u0026rdquo;. GZIP produced the smallest file (in this case!) but had to work quite some time for it.\nAnd if I really want small files, I will probably compress outside of tar using zstd directly. But let\u0026rsquo;s see this in another example with the same directory again.\nTest #2 with --best options #I will create the \u0026ldquo;normal\u0026rdquo; archive with tar(1) .\n% time tar -cf oe7drt-website.tar oe7drt-website tar -cf oe7drt-website.tar oe7drt-website 0,01s user 0,53s system 99% cpu 0,543 total Now we will compress the tar archive with different tools:\nGZIP #% time gzip -k --best oe7drt-website.tar gzip -k --best oe7drt-website.tar 25,96s user 0,38s system 99% cpu 26,417 total XZ #% time xz -k --best oe7drt-website.tar xz -k --best oe7drt-website.tar 484,74s user 1,01s system 242% cpu 3:20,21 total ZSTD #% time zstd -k -9 oe7drt-website.tar oe7drt-website.tar : 95.36% ( 911 MiB =\u0026gt; 869 MiB, oe7drt-website.tar.zst) zstd -k -9 oe7drt-website.tar 10,38s user 1,03s system 223% cpu 5,113 total Whereas -9 is the equivalent of using \u0026ndash;best on gzip, but as I do not link gzip to zstd I had to specify this manually.\nResult #% lld *.tar.* 875 MB  oe7drt-website.tar.gz 858 MB  oe7drt-website.tar.xz 869 MB  oe7drt-website.tar.zst % lld *.tar 911 MB  oe7drt-website.tar Compression Time Size Ratio GZIP 00:25 875MB 96% XZ 04:00 858MB 94% ZSTD 00:03 869MB 95% Some additional zstd commands #zstd with --ultra is what I use sometimes but now that I tested this aswell I doubt this was a good idea back when I started using this:\n% time zstd -k -T0 --ultra -20 oe7drt-website.tar oe7drt-website.tar : 93.69% ( 911 MiB =\u0026gt; 853 MiB, oe7drt-website.tar.zst) zstd -k -T0 --ultra -20 oe7drt-website.tar 400,88s user 1,42s system 353% cpu 1:53,70 total But today I found the option --max which will optimize for maximum compression:\nA ratio of 33% in 4 minutes with about 900MB of data \u0026ndash; not bad:\n% time zstd -k -T0 --max oe7drt-website.tar oe7drt-website.tar : 33.46% ( 911 MiB =\u0026gt; 305 MiB, oe7drt-website.tar.zst) zstd -k -T0 --max oe7drt-website.tar 243,90s user 19,41s system 95% cpu 4:37,11 total Though, that last command made the laptop a bit laggy as it is very time-consuming and resource hungry.\nComparing them #% lld *.tar *zst 911 MB  oe7drt-website.tar 869 MB  oe7drt-website.tar.best.zst 853 MB  oe7drt-website.tar.ultra.zst 305 MB  oe7drt-website.tar.max.zst Zstd compression options Time Original size Size Ratio default 00:03 915MB 871MB 95% --best 00:10 911MB 869MB 95% --ultra 06:40 911MB 853MB 93% --max 04:03 911MB 305MB 33% My conclusion #If you want to create an archive quickly: use zstd with its default settings.\nIf you want to create a small archive: use zstd with the --max option (and probably -T0)1\nto increase the working threads (defaults to 1 otherwise; 0 tries to detect the amount of physical cores).\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"10 August 2025","permalink":"/posts/2025/77-which-compression-to-use/","section":"Blog","summary":"When I create backups of folders, I usually tend to use tar in combination with either \u003ccode\u003egzip\u003c/code\u003e or \u003ccode\u003exz\u003c/code\u003e \u0026ndash; this post shows why I should probably use \u003ccode\u003ezstd\u003c/code\u003e instead. \u003csmall\u003eThe thumbnail was taken from \u003ca href=\"https://www.iconfinder.com/icons/27832/archive_compress_zip_icon\" target=\"_blank\" rel=\"noreferrer\"\u003eiconfinder.com\u003c/a\u003e and is shared via CC BY-ND 3.0 license.\u003c/small\u003e","title":"Short: which compression to use?","updated":"10 August 2025"},{"content":"It works amazing! I push big folders of music to my phone or just share some pictures \u0026ndash; no problem for Localsend.\nI have it on an old iPhone, on my daily driver Android phone and on my laptops.\nBring the devices into the same network and start sharing. Using favorites with PIN codes makes it easy to auto-deploy files and folders on my often used devices.\n","date":"9 March 2025","permalink":"/posts/2025/76-airdrop-on-linux/","section":"Blog","summary":"This is my method of using something similar as AirDrop on my Linux  and Android devices. \u003csmall\u003eThe thumbnail was created with Google AI (Imagen 3).\u003c/small\u003e","title":"AirDrop on Linux?","updated":"16 March 2025"},{"content":"","date":null,"permalink":"/tags/android/","section":"Tags","summary":"","title":"Android","updated":null},{"content":"","date":null,"permalink":"/tags/windows/","section":"Tags","summary":"","title":"Windows","updated":null},{"content":"Initially I wanted a cheap tablet to be used exclusively for Amateur Radio, but the first tablet that I bought was a faulty device (a DOGEE T36) which randomly rebootet itself, especially when I tried to access the settings-app. Hell, I couldn\u0026rsquo;t even change the device name.\nAfter one day of frustration I sent the device back and ordered the Pixel Tablet. I quickly put GrapheneOS onto it and installed all needed applications for my particular use case.\nUntil now (end of February 2025) I\u0026rsquo;m very happy with it (both the hardware and the GrapheneOS operating system).\nMain usage #","date":"21 February 2025","permalink":"/equipment/laptops/google-pixel-tablet/","section":"Equipment","summary":"","title":"Google Pixel Tablet (2023)","updated":"7 March 2026"},{"content":"Really, I had to look twice!\nAnd I also looked twice into that PDF file (not analytically, but just to get an idea of what is inside).\nBut first things first!\nThe mail body #This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: username@*** Domain indiana-cccac.org has exceeded the max defers and failures per hour (5/5 (62%)) allowed. Message discarded. It is basicly a multipart message with a delivery-status attached. The \u0026ldquo;original\u0026rdquo; message is attached and contains the following body:\nDie Rechnung ist der E-Mail beigefügt. Fälligkeitsdatum: 2 Tage The containing delivery-status report is:\nReporting-MTA: dns; cp30.machighway.com Action: failed Final-Recipient: rfc822;username@*** Status: 5.0.0 The mail body source (html) #--1737016837-eximdsn-251261276 Content-type: text/plain; charset=us-ascii This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: username@*** Domain indiana-cccac.org has exceeded the max defers and failures per hour (5/5 (62%)) allowed. Message discarded. ------=_NextPart_000_0012_093718ED.5234615C Content-Type: text/plain; charset=\u0026#34;utf-8\u0026#34; Content-Transfer-Encoding: quoted-printable Die Rechnung ist der E-Mail beigef=C3=BCgt. F=C3=A4lligkeitsdatum: 2 Tage --1737016837-eximdsn-251261276 Content-type: message/delivery-status Reporting-MTA: dns; cp30.machighway.com Action: failed Final-Recipient: rfc822;username@*** Status: 5.0.0 The rest is the original message which I will also include:\n--1737016837-eximdsn-251261276 Content-type: message/rfc822 Return-path: \u0026lt;username@***\u0026gt; Received: from [177.200.194.82] (port=60176 helo=ns1.bouton.com.br) by cp30.machighway.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.93) (envelope-from \u0026lt;username@***\u0026gt;) id 1tYLQa-0005M7-Q0 for username@***; Thu, 16 Jan 2025 03:40:37 -0500 From: username@*** To: username@*** Subject: Unbezahlte Rechnung Date: 16 Jan 2025 00:38:37 -0800 Message-ID: \u0026lt;20250116003837.EDA46C14EFF90662@***\u0026gt; MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=\u0026#34;----=_NextPart_000_0012_093718ED.5234615C\u0026#34; This is a multi-part message in MIME format. ------=_NextPart_000_0012_093718ED.5234615C Content-Type: text/plain; charset=\u0026#34;utf-8\u0026#34; Content-Transfer-Encoding: quoted-printable Die Rechnung ist der E-Mail beigef=C3=BCgt. F=C3=A4lligkeitsdatum: 2 Tage ------=_NextPart_000_0012_093718ED.5234615C Content-Type: application/pdf; name=\u0026#34;Rechnung 0991829-2025.pdf\u0026#34; Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=\u0026#34;Rechnung 0991829-2025.pdf\u0026#34; JVBERi0xLjQKJfbk/N8KMSAwIG9iago8PAovVHlwZSAvQ2F0YWxvZwovVmVyc2lvbiAvMS40 Ci9QYWdlcyAyIDAgUgovU3RydWN0VHJlZVJvb3QgMyAwIFIKL01hcmtJbmZvIDQgMCBSCi9M ... The base64 encoded pdf file follows.\nSome mail headers #X-Spam-score: 10.0 X-Spam-hits: BAYES_20 -0.001, ME_NOAUTH 0.01, ME_SENDERREP_NEUTRAL 0.001, SH_HBL_FILE_SUSPICIOUS 10, SPF_HELO_NONE 0.001, SPF_NONE 0.001, LANGUAGES en, BAYES_USED user, SA_VERSION 4.0.0 X-Backscatter: Yes X-Backscatter-Hosts: 177.200.194.82, cp30.machighway.com X-Spam-source: IP=\u0026#39;64.6.254.94\u0026#39;, Host=\u0026#39;cp30.machighway.com\u0026#39;, Country=\u0026#39;US\u0026#39;, FromHeader=\u0026#39;com\u0026#39;, MailFrom=\u0026#39;unk\u0026#39; X-Spam-charsets: plain=\u0026#39;us-ascii\u0026#39; X-Attached: Rechnung 0991829-2025.pdf ARC-Authentication-Results: i=1; phl-mx-07.messagingengine.com; x-csa=none; x-me-sender=none; x-ptr=pass smtp.helo=cp30.machighway.com policy.ptr=cp30.machighway.com; bimi=skipped (DMARC did not pass); arc=none (no signatures found); dkim=none (no signatures found); dmarc=fail policy.published-domain-policy=none policy.applied-disposition=none policy.evaluated-disposition=none policy.arc-aware-result=fail (p=none,d=none,d.eval=none,arc_aware_result=fail) policy.policy-from=p header.from=cp30.machighway.com; iprev=pass smtp.remote-ip=64.6.254.94 (cp30.machighway.com); spf=none smtp.mailfrom=\u0026#34;\u0026#34; smtp.helo=cp30.machighway.com Attachments (PDF) #I had a look into the PDF file with a text editor and I extracted the text of the image (!) as well.\n$ ps2ascii Rechnung\\ 0991829-2025.pdf Grüße Sie! Ich bin ein professioneller Hacker und habe erfolgreich Ihr Betriebssystem gehackt. Derzeit habe ich vollen Zugriff auf Ihr Konto. Darüber hinaus habe ich alle Ihre Aktivitäten heimlich überwacht und Sie mehrere Monate lang beobachtet. Die Sache ist die, dass Ihr Computer mit schädlicher Spyyware infiziert war, weil Sie zuvor eine Webseite mit pornnografischen Inhalten besucht hatten. Lassen Sie mich Ihnen erklären, was das bedeutet. Dank Trojaner-Viren kann ich mir vollständigen Zugriff auf Ihren Computer oder jedes andere Gerät, das Sie besitzen, verschaffen. Das bedeutet, dass ich absolut alles auf Ihrem Bildschirm sehen und die Kamera sowie das Mikrofon jederzeit ohne Ihre Erlaubnis einschalten kann. Darüber hinaus kann ich auch auf Ihre vertraulichen Informationen sowie auf Ihre E-Mails und Chat-Nachrichten zugreifen und diese einsehen. Vielleicht fragen Sie sich, warum Ihr Antivirusprogram meine Schadsoftware nicht erkennen kann. Ich erkläre es Ihnen kurz: Ich verwende eine treiberbasierte Schadsoftware, die ihre Signaturen alle 4 Stunden erneuert, so dass Ihr Antivirusprogramm sie nicht erkennen kann Ich habe eine Videozusammenstellung erstellt, die auf der linken Seite die Szenen zeigt, in denen Sie fröhlich masturbieren, während auf der rechten Seite das Video gezeigt wird, das Sie sich in diesem Moment angesehen haben.... Alles, was ich tun muss, ist, dieses Video an alle E-Mail Adressen und Messenger-Kontakte von Personen weiterzugeben, mit denen Sie auf Ihrem Gerät oder PC in Kontakt stehen. Darüber hinaus kann ich auch alle Ihre E-Mails und Chatverläufe veröffentlichen. Ich denke, dass Sie dies auf jeden Fall vermeiden möchten. Sie müssen daher Folgendes tun: Überweisen Sie Bitcoin im Gegenwert von 1800€ auf mein Bitcoin Konto (das ist ein ziemlich einfacher Vorgang, den Sie online nachlesen können, falls Sie nicht wissen, wie das geht). Sie können auch BITCOIN-Geldautomaten in Ihrer Nähe nutzen. Im Folgenden finden Sie die Informationenzu meinem Bitcoin Konto (Bitcoin Wallet): 1XXXdbF7hHhxFR1ZeoxvYRqv8D15dMEcX Sobald der erforderliche Betrag auf meinem Konto eingegangen ist, werde ich all diese Videos löschen und ein für alle Mal aus Ihrem Lebenverschwinden. Bitte stellen Sie sicher, dass Sie die oben genannte Überweisung innerhalb von 50 Stunden (2Tage +) durchführen. Ich werde eine Benachrichtigung erhalten, sobald Sie diese E-Mail öffnen, und der Countdown beginnt. Glauben Sie mir, ich bin sehr vorsichtig, berechnend und mache nie Fehler. Sollte ich feststellen, dass Sie diese Nachricht an andere weitergegeben haben, werde ich sofort damit beginnen, Ihre privaten Videos öffentlich öffentlich zu machen. . Viel Glück! The file itself has this content (snipped):\n%PDF-1.4 6 0 obj \u0026lt;\u0026lt; /Title (Rechnung 0891829-2025 \\(2\\)-1.pdf) /Creator (Canva) /Producer (Canva) /CreationDate (D:20250115142947+00\u0026#39;00\u0026#39;) /ModDate (D:20250115142947+00\u0026#39;00\u0026#39;) /Keywords (DAGcRjXLRfg,BAGbiUJjRR8) /Author (Babes Savan) \u0026gt;\u0026gt; endobj 7 0 obj \u0026lt;\u0026lt; /Type /Page /Resources \u0026lt;\u0026lt; /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /ExtGState 10 0 R /Font 11 0 R \u0026gt;\u0026gt; /MediaBox [0.0 7.6200128 841.92 603.12] /Contents 12 0 R /StructParents 0 /Parent 2 0 R /Tabs /S /BleedBox [0.0 7.6200128 841.92 603.12] /TrimBox [0.0 7.6200128 841.92 603.12] /CropBox [0.0 7.6200128 841.92 603.12] /Rotate 0 /Annots [] \u0026gt;\u0026gt; endobj 8 0 obj \u0026lt;\u0026lt; /Type /StructElem /S /Document /P 3 0 R /K [13 0 R] \u0026gt;\u0026gt; endobj 12 0 obj \u0026lt;\u0026lt; /Length 4787 /Filter /FlateDecode \u0026gt;\u0026gt; stream xí]M$G\u0011å8\u0007¸`\u0004ÃHpØA¸·²2³*K\u001eY¯µ}°a\u0005\u0012òÅ\u0002lÉ¼\u001càâÿNötUwÖP¯*^ed÷Ìz½\u0007ïvÏÔG~D¾\u0017ñ\u0026#34;âûóMm»ÿ.ªøçÃôMe7¦¾øûwçßo¿´¾ \u001bëºæ¢vÁljñöçýýù¿â÷Ûô\u000f8ü-þ¢¹ØþùÓ\u0026#39;ý_Þ~sþê\u0013{ñÍ¿\u001f®gLm/ÚÎm/óõù\u0017ñÏSºOe¦òM¯á_ÖoZãº¹øÐø3¡kß\u0026gt;Aõðñ\tv9\u0026lt;Á«OÍÅÕÕ«Ïo?»üñÅÍÝíùÍóW\u001f÷ÿ|õÚ]l/×Vñ?{ñæëø\u001e\u000fÓ±ý_|®7ß¿\u0026lt;ûÝåÅoÏÙ¸Pµ¦ÞÎÐ_UÕ]÷ñöfã¬¯i÷_Üß=|Ñm\\ã*ë\u000fÛás\u0017º:ý\u0017ÝîJa\u0013Bí\\cw_¼\u0026lt;{ñpk»i;ÓøÆ\u000f\u001fÿíròò×·\u000fWq\u001bcwÍÂÕ¯*s\u001d\u001e¾¸ÿüöüþ 56ñ\u0026#34;\u000fcóËÝ\u001d\u001bçãì\u001c\u0026amp;¼îoéC\u001bZï\u000eÏØõCà»ÚÙ¶}Óíîûïl\u0017Bå\u0016_öÖs7@£v»\u0006¼\u0001\\\u0026gt;·7Ã\u001dº®}òH»õãã¥Ö¶fù%îv+±Ý´3ÛÝ³ø\u0005|môPÓã1÷P7÷ý-¼5¡IF\u0004~ßor\fáÆùòrØËMÛV]²wBÝß¡1¡kvy%ßÜ\f#èºhÆjåÝa¯\u0026lt;ÚçxÄ/:×F\u0013Y/Ý`z3\u0026gt;\u001a S\u001dÞ\u0000îFÊñc4·öáÂ«éÚ S\u001aO¢Ê¶Ë7\u0019\t[eÓUÍÂÃ\u0015\u001aØ¸Q§Ü\u0011?ÝmjÓÔ­éZ»üÊ÷®¿\u001fWÎ\u000b¦\u000e \u0012¼\u0007\\g¼={}Óß£ ®vU»ü\u001bð\u0005áãÞî~ÃÄ7ìºPwfjÐS\u001b.@ë\u0004¦c4ÝU{ø ¸SÑú\u001b-\u0007zmÓï¼\u0015(!ô\bêÁêÆëM\u0010,2°_]î\u001e¾öÁ×\u001d»AÝÒ$gÊñÁ¡e+Ñ+¨a¬×ÃrK×·3_ñ\u0004§àÔË³\u001f.ûÝÜtÆuÑFg%oëÑpÃ\u0003hú\u0019HV\f|\u0007æ\u0006\u0018k\u001d\u0019]Ï\u0026gt;Z\u00179\\2\u0005\u0026lt;B\u0016]*Ã\u0016h\u0003ç\u0011\u0017ç[\u00054sÉ±5«qúÜüqZNø Z\u0006²ô\u0026amp;çoü\u00010ÆwMu@\u0026#34;\u000fÁ]\u000eqáè@ ¿\u0001ï\u0011i|´\u0002ä¼\u001fÎ\f«4f\u0011_Îr²Ää±ñóëIâÜÚ|½\u001bsSoó6x\u0001Cå^o\u0005\u0012\u001cÙÅô½³hyØwêÜK/O²(H\u0026gt;ðbâÙ\u0007O³ÌÐá°¹ÞY!»éBÕ¶ö`ÿRä`¢\u001d\u001d\t\u0026#34;-ÄôtÎmQtãÑ6\t@¦p¢ù}\b\u0007\u000f^*o\u001b¦ÓÀ\u001bä\u0002ÕÔK ó±³\u001e|Þ\u000bI2\u0026lt;V\u0026#34;Ý$3.¿Ô Ú¬°\u001b~¡2ÖÚE\u0004 ï\u0011?çf:\u0019\u0015ûÙ\u0000Æ5Æ5Ý¹\u0018´þ0N\u0000¿cY\u001f\u0016B%vUÂ\u001eí¸¦2ËsBÍhÙÀús£A\u000b½©M\u0006%pÙ@Ç+þF{:¤f\u0016z#PÝAs7v]:×-Ï5¡$?u«÷Ø$àVß´Lo¢ k\u0026lt;É4@ª\u000b±dß\u0001øèo/{Û\u001d)O\bNàôç£\u0026gt;üËe¡z\u0011\u0026#34;o \u0026#39;\u000e\u001aVreÌÍ($E#üà}b­Pè Þ\u001cÙ\u0001\u0007PvVØÌË³ÿ ´ÆQt\u0016+\u001dÇ\u0010!Óµ_\u0005yô1Ún 6©áH¬_¼V§@\u0013×p;×n¹Ý,¾p4ØZnÄ\u0026lt;ÖÚ´;ÖúÑ\u0010\u001có®r¶Y~/\u0026gt;®\u0015ÇS°e3\u0007õÀ ÊÇë§Ô$nÐfC_\u0026gt;vf5hÑ.B¼CHÞ/Ã· !t-ì]»s\b¼\u0001ïÄ\u001di\b\u0026gt; \\\bk\u0003·pkM¯o¸§¿êU\u0015MUåµ\u0013\u0001X\u001fú\u0015èMmn\\\u000f¸BcêªÙË\b¾ßGôL\u001bQÝ²ÄVkKãU\u000fí\u000f?NtØ®tÌ?X·ÙSú\u0004n)êyxõ\u001ctq³9\u0000Õ\u0026gt;%äG6ÅÈfêRWT\u0019\u0001R:\u0013ø-Ö+2D«óVÊQÞJàä)ã)O½\u0011®C×³ÖG\u0007È{¹â\u0004)L;Q\\Uk\u0026lt;åð\u00020³¿1«sa=¶prîñD\u000f+4)¢\u0004\u0019\u000fúIGÍ /;ò-óËKÑõ\u0026amp;ò\u0007V)\u0026#34;CBÒÅBêj5\u000b92åK\u0003Ü2Ê\u0015Ó\u0019\u0026#39;\u001c¥?\u0006æç¥®ðÝx\fÏÍõñÅ®Ö¬¸w\u0002ÉJ$\u0019[dtîPÏ4÷PÒ\u0019ì\u0026lt;¡\u0006dîieÆ\u0026#34;\u0026gt;×2*Që1\u000b3\u001d Yæ\u0011¯2}Îà5¯+åb8R*±£H)ö\f«\f^y¼\fõ¯Ø\b$.5oÀbÁÑ\fÒP\u0026amp;ªz,R9Ísy´\u0015ïpx¤ac¡¢3.CõÖð¯z\u0003cëP5²\b´\u001aÚ`º°ôÓ$`\u001a­§ÆÉ\u0026lt;£\u001b@]hñw\u0012ÂÁZ\u0000d­FÏ\töB\t.XwïS\t)ù\u0004` ,ÜÃBôàîÎ§ÉG\u0016/¢@´Æ°s§ÒIÕàd\u0026lt;%Ó6órièÏ`ùáã\u0026lt;r\u0007Ð)¨åèQ\u0026#34;×O\u0010ËÓ\u0019z1Osç\u0001A¡R\u0002².èÓ¦]2d¬KæfX\u000ev¡\u0001\u001aÅMÛ\u0026amp;,Ï\fN\t\u0007ûf\u000f®Z_7aZ+sÈW,:F^#%Aæ3\u000e\u0012EëZ+P3ñ¤E+d\u0003ùAÙu\u000f·¨söu)\u001d;Ê\u0026lt;¦ËI!ë\u0017-Y;F-B%\u0000mÆ\f9AàJ\u0004NG¿¸ª°ð®kIÏÎQdÈ\u0000JÆ\u0006J\u0026#39;\u0026amp;Ã*1|-(\u0018@â«ÄÈÕ/zå¯t«ºÒ\u0012A2\u0004³Fº¢H GèDcìB:ÈÇ=ùX\b\\ÏGÎr®ãn\u0007wS8@\u0006=2SSÒú4\u0010aã\u0026#39;\u0026lt;J\u0015y±E\u0012Å\u0012`ª­TÃû9å\u001f­yÂ5AÊ{pé6ä¸\u0017\u0004Oò¬æÚ¯^¥Ý±V)¬ªY¶Nzcµ}+Ö/\u001dçaïÌûÎy¥WsNTëJ¦C¤Ù(\u001f~È\u0000W¦Ë$\u0014\u0002W²~\u0007§\u0003WB\u0015vy¡¨zMñj ´n\u001f\u001dQTYT\u000f9^IL`u\u0014YÕ`÷\u0026gt;Ì\u0017¿\u001cÂ\u0018\u0026gt;Ôm3\u0016§\u001fOi5\u00169Ð¼\u0001%ÚÌ½¶õf\u0013:HzZ:G}ÕÃ|(X5r:¥Ý\u0001àB=Fiâ\u0026#39;ãt\u001aû-Ôêø`\u001f\u0012Û\u0016O¹zï\u0000y\u0007\u001c o\u0005´Æ\u001cA°ÒýÈÝH\u001c«6M\u000fp/\u0018Nm87=´i\u0013o\u0011\u0016×kD$\u0003­g\u0003é#%×$×ôþ\u001d}@$uÕÆXÍnñ½Ó¾ÂÙo«\u0026lt;«\u0026gt;\u001eEq\u0026amp;¾!_FèZD\bÊT¡, R¡¸¢bF{i\u0011Ô å\u0012RGiq8R¬Ãs¸SMBñ\u001a\u000e0ÔÙÏkÄ~\u0010á,¥Á^OªYDÊ\u0015=c²ö»yU«Ë×ÁÀNaP5\u0005²;½`\u0005E\u0015ØR{\u0012éæÿÅ\u001aJfM_\u001fO-5]!\\ !4\\OÊ5lP©Æ\u0013d}|sÂEÅV¢ðÎ¬SÆ!ªÄ\bv³^ðJ¥À)\u000eHª$S1%\u0018j\u001dÒdPO\u0026#34; 9\u0018\u001d\u0003\u00138£iLD\fÓuë¥öxgJVQ\u001bXr¹\u000bîk©í1F\u0000X©ó;|¢dÍmªÖÃöZûù\u001aüáëK\u00187³ÔK\u000b@³ÿ\u0014ËY\u0017ÏrQ\u0013\u000b¶aVu]Ú-¬6qJ­Õ4kªñÊ$Úå@Ê4¬Ï8Þ\u0003BbJLÌ°/¯\u000bI\u00065Íoí\u00049¥\u0013\\ù|\u0011¬\u0026amp;£ã©]Ìtj`3 ëè£1 «óP\tÌ*\\±i3ú¦\u001340âµ p÷¢@¼V)Qo°Õu¶^ýyØtU\u0013ï A|ÈïÇ«\u0005q5{Ì©\u0015ðVL×Æ\u001e²\u0026lt;¨áh-ß\u0014íÇ\u0017õXë÷]CÚz^)sÂª§J¥\u000bº|Íp äÐà½dzíÈr\u0007»\u001f¼é6\u0007\u0026lt;3!\u001dàé!Ü¡sJTDGt\b\u000fÃÜ%­NÀ¼ñ×*¿çäèìû*u\u0018ï}ºgY¥®8.]\u0003\\ÄÞOu*È{Óð\u0016ï}}ø¼5S¦×FC¾ÌG÷ÓÔ¸¬\u001ayoå6°Õ¯Zk\u000f\u0026lt;}Å%=k\u001e7ã\\wÆ\u001e+o\u000fÚ«i3Mûâ\u0015JûðOU\u0018ö wÃo µ\u0026#34;á\\þörwm\u0007å:§B6åÿ~lóJÕæ\u0016õÉ±¨\u0005ìÒãdÄ\u001eG\u0006®©\u0012/Si\tXá¶ng¸OÖû\u001aÑ·\u0013FFx³ÍkÒ¹Ú´:ßyI«Þ*ËGcuÐü¡ÚËN°Q/vWþvðOØPû:¯i\u001f²ÁÂ¢K\u0019tªëV ºÃn9\u0004qM\u000f.¯gº®¸kYq_\u000b\u0017¦ñ\u0012ï\u001c\u0017KY\u001d^DgGg÷aSoó\u000e\u000fgàðLMd\u0003n/NñAo{ëÚ3ì6\u000eD\u0018\u0026amp;ôÅÏÜvÖ!\u0002\u0026gt;é~e\u0016q\u0013WGó6ñ\u0002G\u0007Í¹ðn½d7L½\\df#¥¨2³ñ¤#\u0015ý¥Ö\u0000Dïvi\u0011æ¦ë×De+{\u0026lt;aÿÌ8Ñâêh¡¬fËxÉ\u0026lt;J%ÜïziþÐk\u0015Ð7Z\u001cfð½CF\u0026#39;·\tË\u0026gt;r2 ^3ÃâyÀÉUÆS1ë~XQ\\0 ðµñôDâG¨ñ\tÝ,²¨dtkEò4\u0017è)l¹V¥Õ?O°bÑfC¥üKErE\u0007ØÇ\u0007H\\K÷¨17×\u0003\u000e­ëP\u001fPB\u00174¨cxAKÙ»\u0026#34;\u0005O$«@\u000eÄ\u0016_}ÕÏYN®ª\u0017eg^\u000e{ÌxÓZ»põQÇ§`Ãa\u0019\u0002Å\u0003ï¹µB\u00171+45KÄÉäÅ jKR\u0026#39;yµ¼z§\u0013¸±¤\u001aD\u0011ì\tu2àlÎ¬À£\u0013ÏòKõXGì;\u0012x¡w\u001a¢â|í¾Òáñç!u\u0010Ù¢ÑB¥½$¥º \\°iéÈð$ÏlZ¨VÎá\u001bXaRdº\u0016\u0026lt;Ó\u001dÓ÷-M°ös`¸Ó J¶go/û\u0015æL\bÁ©Kæ÷ \u0026gt;·2²×Ôñ\u0005ãÛ\u0003\u001a \u0026#34;{gÿÙg²Ôu×¸ÎhºÄ±»\u0017\u0011´müù=Ù\u0018ÀFWo?\u001f\u0026gt;~ñëÞ¾\u0005[Ç:\u0001[\u001fç`?Ë_^î)Nä\u0026gt;ÞL\bÓ_Ø:\u001e®ûI« ¶kççì/{ßwí«\u0010üÂpþ0EÐ\u000eK%~\u0011-Hê8Ûo¸ «Ö/\u0026lt;æU\u00125î|\u001bt¿\u000bþÛß¹3m]\u001b3ÿüÛ2LÏ\u0017¸\u0026gt;\b\u0001\u001f[Bå]·§éøÄ]6\u0014Ä±ÔÇNï:¹zöz\u0017»¸[\u000eÄs¸ë\\\u001dmÔµ\u0019Ví\u001a=t\u0026lt;\u0005È\u000bÚn¾ I5eÃl2\u0010¯ÿQ\u0004rZ¯7Ë_ÔZÉæHÒ\u0010?}Ö¨õÍõåÔ?ÖÒG©O\u000fàiyÓÃß\u0015ýÊ»¹¿-³J \u0002=xQ§\u0015óeµêí\u0016Qô?á\u0006òd\u0014\u00130Ì K)«\u0026#34;[p\u0016FÑå\u001bð\u000bF¼§+ÈªþdÔ\u0004Î\u0026lt;7\tîn|\u0007^M\u0002åNß1Ïìþª\u001dÌþPk¤%\u0000\u001fk8KÛ{\u0002\u0026gt;\u0002þüRkFºj½n®2Ë\u0026#34;Bã|ßâ¾þ¼\u0010P×WÑ\u0006«\u0015Á\u0026gt;i\u0017g\u0012p¡;×\u0016\u0017¾ÏüÕ ÙevK;ôØ^Vîò¬t¢\u0012ÚìúvosÒQ\u0012ÚÊ7\u0007ãÝ\u0000¼\u001b\u0005;\u0005\u0011Z¢QéôÄª°ãÞËmlWzï\u0013ß§E8Òu´\u000fïTàq|1É\u0026#39;ûEL]èà÷\u0003ÈÛlkÑ\u0026lt;Y\u0011\u0026gt;æýMÿãUÓ´Æ$¥~\u0026amp;ãu¼ÏaEã\u001f5ó\\ñ\b]v2°mc\u0016ª!ªeõ¬°åZÑc¤\u001a\u0015\u000fAð¥Þx\u0018\u000f\u00115¤,Óû\u001aÏ\u0000iê{zzpÔ²nè\u0006k/ÙÒSTå\u000fÃ Ä5xÌ¾:ZíMç5£^Þ\u0013®v5µ 0}²d¬òîm\u001a\u001e2ÞçGi\u000bm#áü+ck^\u000eVLÇ0Kð4\u0014\u0002]2Ð0·^q8s=³}©\u0026lt;(\u0019\u001dSÖgrÂªQló9µþ8zµcE]L×Ö\u001càO0\u001eh Ç¥\u000e^Ùt\u0004o0¯iåÙ\u000bÀ¢ó \u0007°èÊtZÊ|ÈNVwÖ¦(\u0026amp;Û«%aA_$\tCÓ4\u0026amp;\u001f\u0004øïF½\u0026#34;¨²þ\u0010õv\u0004©Åþ(dùå9ã\u0005Ï(ù\u0026gt;l§Å¦HG\u0019¯ õ·Â2ÿXF]¸îeúà\u0012íûÈsR\u0011j¨úá\fiu½Aq5\u0016µú^a5\u001c\u001b/Ôl«UÞä\u001dôòMè`Ì ëXÑ(i52Æ¦xoµ§é\u0016*»UÊK)ápß5`¸eGi:ªPO@§«HÔ\u001c*ÊA×ÎÈ­hOý¶ÿ{õ©äïÕç·Ý]\u0004R°í+jF2xGæè©\u0013C\\}tÒkí8)TS(\u0014~¼êU+)¾æm¢ëKÁB¡4ó\u0026#34;ÛWóñ\u0005ØI\u000fM#ªgf®ÃºqkC\\¥±{qùhj¿xøó?µf\u000fP endstream endobj 18 0 obj \u0026lt;\u0026lt; /Type /Font /Subtype /Type0 /BaseFont /AAAAAA+CanvaSans-Regular /Encoding /Identity-H /DescendantFonts [20 0 R] /ToUnicode 21 0 R \u0026gt;\u0026gt; endobj ... and more... ","date":"19 January 2025","permalink":"/spam/2025-01-16-oh-wow-thats-new/","section":"Mail spam I received","summary":"This is the first time that I got a PDF file attached in a spam mail. Really, I had to look twice!","title":"Oh WOW! That's new!","updated":"19 January 2025"},{"content":"","date":null,"permalink":"/tags/archlinux/","section":"Tags","summary":"","title":"Archlinux","updated":null},{"content":"","date":null,"permalink":"/tags/digirig/","section":"Tags","summary":"","title":"Digirig","updated":null},{"content":"","date":null,"permalink":"/tags/mobilinkd/","section":"Tags","summary":"","title":"Mobilinkd","updated":null},{"content":"","date":null,"permalink":"/tags/networking/","section":"Tags","summary":"","title":"Networking","updated":null},{"content":"","date":null,"permalink":"/tags/portable/","section":"Tags","summary":"","title":"Portable","updated":null},{"content":"So I recently sold my iPhone 14 Pro and bought a Google Pixel 9 Pro. I used that for about two weeks when I finally replaced the vanilla Android with GrapheneOS.\nThe Android app for my setup is called WoAD and is available on the Google Play Store. It currently costs € 6.99 💰. If you are able to install the app by yourself, you can also find it on their website.\nUpdate: I use a dedicated tablet for WoAD as it makes the app look much, much better on a bigger screen. I assume the app is all set up with basic information like CALLSIGN, Grid, etc.\nPacket connection #I love simple and small configurations (mostly) and this one is really small. When I\u0026rsquo;m out hiking I usually have an HT with me \u0026ndash; usually an Icom ID-52. Together with a Mobilinkd TNC it is a very small and (since Android) working solution for mobile/portable Winlink operations (I always had problems getting the Bluetooth device working with the iPhone - not only with the Mobilinkd but also other Bluetooth devices struggled with the iPhone\u0026hellip;).\nCreate a new session called Packet #On the main screen (probably the Inbox) click the top right menu (three dots) and select ➡ Sessions. On the bottom right menu (three dots) select ➕ Add. Name it Packet and set the Protocol to Packet. Touch Settings and select a Destination address. Select RMS channel selection\u0026hellip; and choose a nearby station. Go back and set TNC type to KISS. In TNC configuration select Bluetooth as Connection type and select the previosly paired Mobilink TNC under Connection configuration/Device. Device manufacturer should stay Generic.\nSee these screenshots for reference.\nWe use the App Mobilinkd TNC to configure our TNC. The app is available at the Google Play Store and on F-Droid (or Neo Store; or download from Github if you prefer).\nMake sure the audio levels are ok (Audio Input Settings\u0026hellip;), also check the PTT Style within Audio Output Settings\u0026hellip;.\nOh sorry, we could not show you the video!\nWe had the following sources: av1 mp4, h265 mp4, h264 mp4 The most right LED should flicker a bit. This setting is done with the volume knob on your handheld. Download: H264, H265, AV1 (INFO Some files might not be available.\nH264: Great compatibility, lower quality and bigger size\nH265: Very small files, but not as good as AV1\nAV1: The best quality here, but a bit bigger files as the H265 version\nAn actual browser should usually load the small H265 video per default, others might use the H264 video.\nWindows might not load H265 per default because you would probably have to install the HEVC codec from the Microsoft Store. ) Don\u0026rsquo;t forget to disconnect the config app from the TNC (and also don\u0026rsquo;t forget to hit Save Settings\u0026hellip; before you disconnect!).\nBack in WoAD select the Packet session and hit the play button on the bottom (right).\nVARA FM and HF #The VARA modes will need another device that can run the VARA software which our Android phone will connect to via port 8300.\nAssuming we have a working installation of VARA FM and VARA HF in a 32-bit wine environment in ~/.wine-winlink.\nLet us view the screenshots of my WoAD configuration \u0026ndash; create a new session for that and call it VARA FM.\nThe configuration for VARA HF is nearly identical, just select VARA HF for the Protocol. Don\u0026rsquo;t forget to select a proper VARA HF station and make sure the bandwitch matches.\nSetup on the laptop #In this scenario I use the internal network card (wlan0).\nUsually there is no DHCP server installed, we will need one though (and hostapd):\n$ paru -S dhcp hostapd Stop the network\n$ sudo systemctl stop wpa_supplicant@wlan0.service Flush IP configuration on that interface and flush route table\n$ sudo ip addr flush dev wlan0 $ sudo ip route flush dev wlan0 Set the IP address that we will later use for connecting our WoAD client\n$ sudo ip address add 192.168.30.1/24 broadcast + dev wlan0 $ sudo ip link set dev wlan0 up Start the DHCP server\nI use this config for that:\noption domain-name \u0026#34;mobile\u0026#34;; default-lease-time 600; max-lease-time 7200; authoritative; log-facility local7; subnet 192.168.30.0 netmask 255.255.255.0 { option routers 192.168.30.1; option subnet-mask 255.255.255.0; option domain-name \u0026#34;mobile\u0026#34;; option domain-name-servers 192.168.30.1; range 192.168.30.2 192.168.30.40; } $ sudo systemctl start dhcp4.service Start the hostapd service\n$ sudo systemctl start hostapd.service Stop the services and bring back normal networking # Stop the services (dhcp4, hostapd)\n$ sudo systemctl stop {hostapd.service,dhcpd4.service} Flush the IP configuration on that interface again\n$ sudo ip r flush dev wlan0 $ sudo ip a flush dev wlan0 Check for empty interface and route table with ip r and ip a.\nStart WPA supplicant service on wlan0 again\n$ sudo systemctl start wpa_supplicant@wlan0.service Your normal IP address should be back on that interface shortly.\nBut what is the main problem with this? #For the smallest setup (without computer or big antenna) you will have to be in reach of a VHF/UHF gateway.\nE.g. we have one(!) VHF/UHF gateway in our federal state, which is about 27km north-east of my QTH but I can\u0026rsquo;t reach it because of the mountains. You need to be within 15km of that gateway within the valley otherwise you won\u0026rsquo;t be able to connect.\nWe still have to use a laptop for HF.\n","date":"19 January 2025","permalink":"/posts/2025/75-winlink-on-android-with-woad/","section":"Blog","summary":"Since I moved from iOS to Android I had to look for another App to test a small Winlink setup. \u003csmall\u003eThe thumbnail was created with Google AI (Imagen 3).\u003c/small\u003e","title":"Winlink on Android with WoAD","updated":"8 March 2026"},{"content":"Welcome to 2025! #I\u0026rsquo;m very keen on what shit we have to expect in 2025.\nOh sorry, we could not show you the video!\nWe had the following sources: av1 mp4, h265 mp4, h264 mp4 Shared video Download: H264, H265, AV1 (INFO Some files might not be available.\nH264: Great compatibility, lower quality and bigger size\nH265: Very small files, but not as good as AV1\nAV1: The best quality here, but a bit bigger files as the H265 version\nAn actual browser should usually load the small H265 video per default, others might use the H264 video.\nWindows might not load H265 per default because you would probably have to install the HEVC codec from the Microsoft Store. ) Gource is the tool to create these videos.\n","date":"1 January 2025","permalink":"/posts/2025/74-2024-is-over/","section":"Blog","summary":"A short video visualizing all the git commits done to my website repository in the year 2024.","title":"2024 is over","updated":"8 March 2026"},{"content":"","date":null,"permalink":"/tags/website-news/","section":"Tags","summary":"","title":"Website-News","updated":null},{"content":"I haven\u0026rsquo;t got any \u0026ldquo;individual\u0026rdquo; spam mail for a long time now (except the standard ones that obviously grabbed a few emails and message-ids from mailing lists\u0026hellip;). Today I got an email (in my spam folder) written in Portuguese, but sent from a server belonging to a pakistan domain. The following email (and its translation into german/english) are shrinked because the original content included a lot of unneded blank lines (multiple at once).\nThe mail body #In its original wording #Blank lines removed.\nHi! Esta é a sua última oportunidade de evitar consequências desagradáveis e preservar a sua reputação. O seu sistema operativo foi invadido. Todos os seus dados pessoais foram copiados para os meus servidores. Instalei um vírus de Tróia nos sistemas operativos de todos os dispositivos que utilizam para aceder à Internet. Este software dá-me acesso a todos os controladores dos vossos dispositivos. Graças à encriptação, nenhum sistema irá detectar este vírus. Todos os dias, as suas assinaturas são apagadas. Já copiei todos os seus dados pessoais para os meus próprios servidores. Tenho acesso aos vossos e-mails, mensageiros, redes sociais, lista de contactos. Quando recolhi dados do vosso dispositivo, encontrei muitas informações interessantes a vosso respeito. Gosta muito de ver vídeos para adultos e de ter orgasmos enquanto os vê. Tenho alguns vídeos que foram gravados a partir do vosso ecrã. Editei um vídeo que mostra claramente a sua cara e a forma como vê pornografia e masturbação. A sua família e amigos não terão qualquer problema em reconhecê-lo neste vídeo. Este vídeo pode arruinar totalmente a sua reputação. Também no vosso dispositivo consegui encontrar dados que não podem ser armazenados no vosso país. Poderia estar em apuros com a lei. Posso enviar provas das vossas actividades ilegais a todos os vossos contactos, torná-las públicas para todos na Internet. Tenho muitos dos vossos dados pessoais. É o seu histórico de navegação, correspondência de mensageiro e meios de comunicação social, chamadas telefónicas, fotografias pessoais e vídeos. Posso colocar todos os vossos dados no domínio público. Tenho a certeza que a polícia estaria interessada em si depois disso. E outras agências de segurança no seu país. Basta um clique do meu rato para tornar públicas todas as informações armazenadas no seu dispositivo. Compreende as consequências. Vai ser um verdadeiro desastre. A sua vida será arruinada. Tenho a certeza que gostaria de evitar isso, não é verdade? É muito simples. Tem de me enviar 0.01 BTC Depois disso, apagarei toda a informação sobre si dos meus servidores. Não voltarei a incomodar-vos. A minha carteira de bitcoin para pagamento: bc1q88fq8946qryjlqe075jmcud26x22g62jmvzjgk Não sabe o que é Bitcoin e como utilizá-lo? Use o Google. Tem 2 dias para pagar. Depois de ler este e-mail, o temporizador começa automaticamente. Já recebi uma notificação de que abriu este e-mail. Não há necessidade de me responder, este e-mail foi criado automaticamente e é indetectável. Não há necessidade de tentar contactar alguém para obter ajuda. A carteira Bitcoin é indetectável, pelo que apenas irá perder o seu tempo. A polícia e outros serviços de segurança também não o vão ajudar. Em cada um destes casos, colocarei todos os vídeos sem demora. Todos os seus dados já são copiados para um cluster dos meus servidores, pelo que mudar as palavras-passe no correio electrónico ou nas redes sociais não o ajudará. Espero que escolham a solução certa. Translated to German #Blank lines removed.\nHey! Dies ist Ihre letzte Chance, unangenehme Folgen zu vermeiden und Ihren Ruf zu wahren. Ihr Betriebssystem wurde gehackt. Alle Ihre persönlichen Daten wurden auf meine Server kopiert. Ich habe auf den Betriebssystemen aller Geräte, mit denen sie auf das Internet zugreifen, einen Trojaner installiert. Mit dieser Software habe ich Zugriff auf alle Ihre Gerätetreiber. Dank der Verschlüsselung erkennt kein System diesen Virus. Jeden Tag werden ihre Unterschriften gelöscht. Ich habe alle Ihre persönlichen Daten bereits auf meine eigenen Server kopiert. Ich habe Zugriff auf Ihre E-Mails, Messenger, sozialen Netzwerke und Kontaktlisten. Als ich Daten von Ihrem Gerät gesammelt habe, habe ich viele interessante Informationen über Sie gefunden. Er schaut sich wirklich gerne Videos für Erwachsene an und erlebt dabei Orgasmen. Ich habe einige Videos, die von Ihrem Bildschirm aufgenommen wurden. Ich habe ein Video geschnitten, das deutlich sein Gesicht und seine Einstellung zu Pornografie und Masturbation zeigt. Ihre Familie und Freunde werden Sie in diesem Video problemlos erkennen. Dieses Video kann Ihren Ruf völlig ruinieren. Auch auf Ihrem Gerät ist es mir gelungen, Daten zu finden, die in Ihrem Land nicht gespeichert werden können. Sie könnten mit dem Gesetz in Konflikt geraten. Ich kann Beweise für Ihre illegalen Aktivitäten an alle Ihre Kontakte senden und sie allen im Internet zugänglich machen. Ich habe viele Ihrer persönlichen Daten. Es handelt sich um Ihren Browserverlauf, Messenger- und Social-Media-Korrespondenz, Telefonanrufe, persönliche Fotos und Videos. Ich kann alle Ihre Daten öffentlich zugänglich machen. Ich bin mir sicher, dass die Polizei danach an Ihnen interessiert wäre. Und andere Sicherheitsbehörden in Ihrem Land. Es genügt ein Mausklick, um alle auf Ihrem Gerät gespeicherten Informationen öffentlich zu machen. Verstehen Sie die Konsequenzen. Es wird eine echte Katastrophe sein. Dein Leben wird ruiniert sein. Ich bin mir sicher, dass Sie das gerne vermeiden würden, oder? Es ist ganz einfach. Sie müssen mir 0,01 BTC senden. Danach lösche ich alle Informationen über Sie von meinen Servern. Ich werde dich nicht noch einmal belästigen. Mein Bitcoin-Wallet zum Bezahlen: bc1q88fq8946qryjlqe075jmcud26x22g62jmvzjgk Sie wissen nicht, was Bitcoin ist und wie man es verwendet? Benutzen Sie Google. Sie haben 2 Tage Zeit, um zu bezahlen. Nach dem Lesen dieser E-Mail startet der Timer automatisch. Ich habe bereits eine Benachrichtigung erhalten, dass Sie diese E-Mail geöffnet haben. Es besteht keine Notwendigkeit, mir zu antworten, diese E-Mail wurde automatisch erstellt und ist nicht auffindbar. Es besteht keine Notwendigkeit, jemanden um Hilfe zu bitten. Die Bitcoin-Wallet ist nicht auffindbar, sodass Sie nur Ihre Zeit verschwenden. Auch die Polizei und andere Sicherheitsdienste helfen Ihnen nicht weiter. In jedem dieser Fälle werde ich alle Videos unverzüglich veröffentlichen. Alle Ihre Daten sind bereits auf einem Cluster meiner Server gesichert, daher hilft es Ihnen nicht, Passwörter per E-Mail oder in sozialen Medien zu ändern. Ich hoffe, dass sie die richtige Lösung wählen. Translated into English #Blank lines removed.\nHey! This is your last chance to avoid unpleasant consequences and preserve your reputation. Your operating system has been hacked. All your personal data has been copied to my servers. I installed a Trojan virus on the operating systems of all the devices they use to access the Internet. This software gives me access to all your device drivers. Thanks to encryption, no system will detect this virus. Every day, their signatures are deleted. I have already copied all your personal data to my own servers. I have access to your emails, messengers, social networks, contact list. When I collected data from your device, I found a lot of interesting information about you. He really likes watching adult videos and having orgasms while watching them. I have some videos that were recorded of your screen. I edited a video that clearly shows his face and the way he views pornography and masturbation. Your family and friends will have no problem recognizing you in this video. This video can totally ruin your reputation. Also on your device I managed to find data that cannot be stored in your country. You could be in trouble with the law. I can send proof of your illegal activities to all your contacts, make it public to everyone on the Internet. I have a lot of your personal data. It\u0026#39;s your browsing history, messenger and social media correspondence, phone calls, personal photos and videos. I can put all your data in the public domain. I\u0026#39;m sure the police would be interested in you after that. And other security agencies in your country. All it takes is one click of my mouse to make all the information stored on your device public. Understand the consequences. It\u0026#39;s going to be a real disaster. Your life will be ruined. I\u0026#39;m sure you\u0026#39;d like to avoid that, wouldn\u0026#39;t you? It\u0026#39;s very simple. You have to send me 0.01 BTC After that, I will delete all information about you from my servers. I won\u0026#39;t bother you again. My bitcoin wallet for payment: bc1q88fq8946qryjlqe075jmcud26x22g62jmvzjgk Don\u0026#39;t know what Bitcoin is and how to use it? Use Google. You have 2 days to pay. After reading this email, the timer starts automatically. I have already received a notification that you opened this email. There is no need to respond to me, this email was created automatically and is untraceable. There is no need to try to contact someone for help. Bitcoin wallet is untraceable so you will just waste your time. The police and other security services will not help you either. In each of these cases, I will post all videos without delay. All your data is already backed up to a cluster of my servers, so changing passwords on email or social media won\u0026#39;t help you. I hope they choose the right solution. The mail body source (html) #\u0026lt;html\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta http-equiv=\u0026#34;Content-Type\u0026#34; content=\u0026#34;text/html; charset=iso-8859-1\u0026#34; /\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;p\u0026gt;Hi!\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Esta \u0026amp;eacute; a sua \u0026amp;uacute;ltima oportunidade de evitar consequ\u0026amp;ecirc;ncias desagrad\u0026amp;aacute;veis e preservar a sua reputa\u0026amp;ccedil;\u0026amp;atilde;o. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;O seu sistema operativo foi invadido.\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;Todos os seus dados pessoais foram copiados para os meus servidores.\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Instalei um v\u0026amp;iacute;rus de Tr\u0026amp;oacute;ia nos sistemas operativos de todos os dispositivos que utilizam para aceder \u0026amp;agrave; Internet. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Este software d\u0026amp;aacute;-me acesso a todos os controladores dos vossos dispositivos. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Gra\u0026amp;ccedil;as \u0026amp;agrave; encripta\u0026amp;ccedil;\u0026amp;atilde;o, nenhum sistema ir\u0026amp;aacute; detectar este v\u0026amp;iacute;rus. Todos os dias, as suas assinaturas s\u0026amp;atilde;o apagadas. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; J\u0026amp;aacute; copiei todos os seus dados pessoais para os meus pr\u0026amp;oacute;prios servidores. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Tenho acesso aos vossos e-mails, mensageiros, redes sociais, lista de contactos. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Quando recolhi dados do vosso dispositivo, encontrei muitas informa\u0026amp;ccedil;\u0026amp;otilde;es interessantes a vosso respeito. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Gosta muito de ver v\u0026amp;iacute;deos para adultos e de ter orgasmos enquanto os v\u0026amp;ecirc;. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Tenho alguns v\u0026amp;iacute;deos que foram gravados a partir do vosso ecr\u0026amp;atilde;. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Editei um v\u0026amp;iacute;deo que mostra claramente a sua cara e a forma como v\u0026amp;ecirc; pornografia e masturba\u0026amp;ccedil;\u0026amp;atilde;o. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; A sua fam\u0026amp;iacute;lia e amigos n\u0026amp;atilde;o ter\u0026amp;atilde;o qualquer problema em reconhec\u0026amp;ecirc;-lo neste v\u0026amp;iacute;deo. Este v\u0026amp;iacute;deo pode arruinar totalmente a sua reputa\u0026amp;ccedil;\u0026amp;atilde;o. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Tamb\u0026amp;eacute;m no vosso dispositivo consegui encontrar dados que n\u0026amp;atilde;o podem ser armazenados no vosso pa\u0026amp;iacute;s. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;Poderia estar em apuros com a lei.\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Posso enviar provas das vossas actividades ilegais a todos os vossos contactos, torn\u0026amp;aacute;-las p\u0026amp;uacute;blicas para todos na Internet. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Tenho muitos dos vossos dados pessoais. \u0026amp;Eacute; o seu hist\u0026amp;oacute;rico de navega\u0026amp;ccedil;\u0026amp;atilde;o, correspond\u0026amp;ecirc;ncia de mensageiro e meios de comunica\u0026amp;ccedil;\u0026amp;atilde;o social, chamadas telef\u0026amp;oacute;nicas, fotografias pessoais e v\u0026amp;iacute;deos. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;Posso colocar todos os vossos dados no dom\u0026amp;iacute;nio p\u0026amp;uacute;blico.\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Tenho a certeza que a pol\u0026amp;iacute;cia estaria interessada em si depois disso. E outras ag\u0026amp;ecirc;ncias de seguran\u0026amp;ccedil;a no seu pa\u0026amp;iacute;s. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Basta um clique do meu rato para tornar p\u0026amp;uacute;blicas todas as informa\u0026amp;ccedil;\u0026amp;otilde;es armazenadas no seu dispositivo. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;Compreende as consequ\u0026amp;ecirc;ncias.\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;Vai ser um verdadeiro desastre.\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;A sua vida ser\u0026amp;aacute; arruinada.\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Tenho a certeza que gostaria de evitar isso, n\u0026amp;atilde;o \u0026amp;eacute; verdade? \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;Eacute; muito simples.\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Tem de me enviar 0.01 BTC\u0026amp;nbsp; Depois disso, apagarei toda a informa\u0026amp;ccedil;\u0026amp;atilde;o sobre si dos meus servidores. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;N\u0026amp;atilde;o voltarei a incomodar-vos.\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; A minha carteira de bitcoin para pagamento: bc1q88fq8946qryjlqe075jmcud26x22g62jmvzjgk \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; N\u0026amp;atilde;o sabe o que \u0026amp;eacute; Bitcoin e como utiliz\u0026amp;aacute;-lo? Use o Google. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;Tem 2 dias para pagar.\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Depois de ler este e-mail, o temporizador come\u0026amp;ccedil;a automaticamente. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; J\u0026amp;aacute; recebi uma notifica\u0026amp;ccedil;\u0026amp;atilde;o de que abriu este e-mail. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; N\u0026amp;atilde;o h\u0026amp;aacute; necessidade de me responder, este e-mail foi criado automaticamente e \u0026amp;eacute; indetect\u0026amp;aacute;vel. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; N\u0026amp;atilde;o h\u0026amp;aacute; necessidade de tentar contactar algu\u0026amp;eacute;m para obter ajuda. A carteira Bitcoin \u0026amp;eacute; indetect\u0026amp;aacute;vel, pelo que apenas ir\u0026amp;aacute; perder o seu tempo. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; A pol\u0026amp;iacute;cia e outros servi\u0026amp;ccedil;os de seguran\u0026amp;ccedil;a tamb\u0026amp;eacute;m n\u0026amp;atilde;o o v\u0026amp;atilde;o ajudar. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;Em cada um destes casos, colocarei todos os v\u0026amp;iacute;deos sem demora.\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Todos os seus dados j\u0026amp;aacute; s\u0026amp;atilde;o copiados para um cluster dos meus servidores, pelo que mudar as palavras-passe no correio electr\u0026amp;oacute;nico ou nas redes sociais n\u0026amp;atilde;o o ajudar\u0026amp;aacute;. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;Espero que escolham a solu\u0026amp;ccedil;\u0026amp;atilde;o certa.\u0026lt;/p\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; Some mail headers #Return-Path: \u0026lt;reta.heiman@c.maybebest.com\u0026gt; Received: from phl-compute-07.internal (phl-compute-07.phl.internal [10.202.2.47]) by slotpi02n64 (Cyrus 3.11.0-alpha0-1199-g5c96629dc-fm-20241125.002-g5c96629d) with LMTPA; Sat, 14 Dec 2024 01:00:00 -0500 X-Cyrus-Session-Id: slotpi02n64-1734156000-34134-2-2159896746718344432 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-sender-reputation: 500 (none) X-Spam-score: 31.9 X-Spam-hits: BAYES_50 0.8, BITCOIN_SPAM_03 1.516, DATE_IN_FUTURE_03_06 3.027, DCC_CHECK 1.1, FSL_BULK_SIG 0.001, HTML_MESSAGE 0.001, ME_NOAUTH 0.01, ME_SC_NH -0.001, ME_SENDERREP_NEUTRAL 0.001, ME_VADESPAM_MED 2.5, PDS_BTC_ID 0.5, RCVD_IN_PBL 0.001, RCVD_IN_SBL_CSS 3, RCVD_IN_ZEN_LASTEXTERNAL 8, RDNS_NONE 0.793, SH_HBL_CW_BTC 10, SPF_HELO_SOFTFAIL 0.732, SPF_NONE 0.001, LANGUAGES pt, BAYES_USED user, SA_VERSION 4.0.0 X-Spam-source: IP=\u0026#39;111.88.60.19\u0026#39;, Host=\u0026#39;noreverse\u0026#39;, Country=\u0026#39;PK\u0026#39;, FromHeader=\u0026#39;com\u0026#39;, MailFrom=\u0026#39;com\u0026#39; X-Spam-charsets: plain=\u0026#39;iso-8859-1\u0026#39;, html=\u0026#39;iso-8859-1\u0026#39; X-Resolved-to: {my-mail-address} X-Delivered-to: {my-mail-address} X-Mail-from: reta.heiman@c.maybebest.com Received: from phl-mx-03 ([10.202.2.202]) by phl-compute-07.internal (LMTPProxy); Sat, 14 Dec 2024 01:00:00 -0500 Received: from phl-mx-03.messagingengine.com (localhost [127.0.0.1]) by mailmx.phl.internal (Postfix) with ESMTP id 9EBDE10000BF for \u0026lt;{my-mail-address}\u0026gt;; Sat, 14 Dec 2024 00:59:59 -0500 (EST) Received: from mailmx.phl.internal (localhost [127.0.0.1]) by phl-mx-03.messagingengine.com (Authentication Milter) with ESMTP id 4717878FF54.C79DD10000AD; Sat, 14 Dec 2024 00:59:59 -0500 ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=fm1; t= 1734155999; b=YsKLX8TIUbfdRpbkmXi92XMc5MftIpwTDHMe/ozvZQskj1pzWj g2SDKXakIHLn730OLn+hs5kXFOmEhighj/xwzngbLNjhc7GQr/uEhM5q1xrpWIep BuQgAaSLYO2B7muvNCrET2Oe2SkSdnq/Q5iGoUQeBfpJlN1vNV8DBCaeLNrgB16j G0CVbzlYLd3RdW/1LemEUbIvrZhB+q1/6nXbnJWVn/9yR55tvn/Sn/DlTvtssWl5 F67ZdgZw4gJwXQdZygAUQqs48n92r4tdcYXQ0VSXWVufswUHrOpz7wMpA9r7iGyB 4jnscqxTOYVpgG1FVBvqe1tkc15xenXUpZlA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=message-id:from:to:subject:date :mime-version:content-type; s=fm1; t=1734155999; bh=pkLxsacNTEdw DoxNjn3TnbgJJeap/bVaPDGqNzsmWBE=; b=yPrjzVQxphUkUyKjGtADuXvoO4Qm pzXioYc7yQS8ngbQLg1J5sUQg1334ZN89rTen/Cu4bux5BxKfD8oy3p9E7aCT6TM pIpmpYKyDaBGQS+3S/rbU8o2Crbxqtuj4oQF4WMUt/twCZ5sIey+NOVfNOESN5z2 oltttNjOL0a8QVFztCz7edmOFe62M8Q/N/gWFS39n2Nu4K90LeBtAk8bXpgtxmBU ZfSerdshJPl9FPEnP6z/lldWGbIa4sSEsXVy1RJDgOF7Gs1v1V1+Mlco/EHHu2WO DPIm3KMr8AeLRBnKqPKHjGEBDND/11VnUlh1A38+7pskR853L2gDd6UtCg== ARC-Authentication-Results: i=1; phl-mx-03.messagingengine.com; x-csa=none; x-me-sender=none; x-ptr=fail smtp.helo=wtl.worldcall.net.pk policy.ptr=\u0026#34;\u0026#34;; bimi=skipped (DMARC did not pass); arc=none (no signatures found); dkim=none (no signatures found); dmarc=none policy.published-domain-policy=none policy.applied-disposition=none policy.evaluated-disposition=none (p=none,d=none,d.eval=none) policy.policy-from=p header.from=c.maybebest.com; iprev=fail smtp.remote-ip=111.88.60.19 (Error NOERROR looking up 111.88.60.19 PTR,Found CNAME in A response); spf=none smtp.mailfrom=reta.heiman@c.maybebest.com smtp.helo=wtl.worldcall.net.pk X-ME-Authentication-Results: phl-mx-03.messagingengine.com; x-vs=spam:medium score=300 state=1 Authentication-Results: phl-mx-03.messagingengine.com; x-csa=none; x-me-sender=none; x-ptr=fail smtp.helo=wtl.worldcall.net.pk policy.ptr=\u0026#34;\u0026#34; Authentication-Results: phl-mx-03.messagingengine.com; bimi=skipped (DMARC did not pass) Authentication-Results: phl-mx-03.messagingengine.com; arc=none (no signatures found) Authentication-Results: phl-mx-03.messagingengine.com; dkim=none (no signatures found); dmarc=none policy.published-domain-policy=none policy.applied-disposition=none policy.evaluated-disposition=none (p=none,d=none,d.eval=none) policy.policy-from=p header.from=c.maybebest.com; iprev=fail smtp.remote-ip=111.88.60.19 (Error NOERROR looking up 111.88.60.19 PTR,Found CNAME in A response); spf=none smtp.mailfrom=reta.heiman@c.maybebest.com smtp.helo=wtl.worldcall.net.pk X-ME-VSCause: gggruggvucftvghtrhhoucdtuddrgeefuddrkeekgdeltdcutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdpuffr tefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecuogfrohhrnhhoqdfufeekfe dqudduucdlfedttddmnecujfgurhepkffhvffuffggtgfosegrtderreertddunecuhfhr ohhmpedffhhrvgguucgrrhhthidfuceorhgvthgrrdhhvghimhgrnhestgdrmhgrhigsvg gsvghsthdrtghomheqnecuggftrfgrthhtvghrnhephfejffeutefhgffhueehuddvueet hfegvdfgffeihfehffejhefhledvtddutdejnecukfhppeduuddurdekkedriedtrddule enucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeduuddurdekkedr iedtrdduledphhgvlhhopeifthhlrdifohhrlhgutggrlhhlrdhnvghtrdhpkhdpmhgrih hlfhhrohhmpeeorhgvthgrrdhhvghimhgrnhestgdrmhgrhigsvggsvghsthdrtghomheq pdhnsggprhgtphhtthhopedupdhrtghpthhtohepoeguohhmihhnihgtsehmmhdrshhtqe X-ME-VSScore: 300 X-ME-VSCategory: spam:medium X-ME-CSA: none X-ME-Received: \u0026lt;xmx:3R5dZzGJVRK8oxblRYEPuS0uFgx-sAnUP6TyhlHpaHkTWFZzOI8OVA\u0026gt; Received-SPF: none (c.maybebest.com: No applicable sender policy available) receiver=phl-mx-03.messagingengine.com; identity=mailfrom; envelope-from=\u0026#34;reta.heiman@c.maybebest.com\u0026#34;; helo=wtl.worldcall.net.pk; client-ip=111.88.60.19 Received: from wtl.worldcall.net.pk (unknown [111.88.60.19]) by phl-mx-03.messagingengine.com (Postfix) with ESMTP id C79DD10000AD for \u0026lt;{my-mail-address}\u0026gt;; Sat, 14 Dec 2024 00:59:52 -0500 (EST) Message-ID: \u0026lt;439005929072872310297270@c.maybebest.com\u0026gt; From: fred arty \u0026lt;reta.heiman@c.maybebest.com\u0026gt; To: {my-mail-address} Subject: Fwd: Date: 14 Dec 2024 14:46:47 +0400 MIME-Version: 1.0 Content-type: multipart/alternative; boundary=\u0026#34;---A21C41908CFFCD5DE3BE6F730032A21C\u0026#34; X-Mailer: Uuwesjfu yhekr X-TUID: 7ssuoYt13WXf Now the bitcoin scam is also on the website, nothing special though. Indeed it is always the same shit 😏\n","date":"14 December 2024","permalink":"/spam/2024-12-14-first-spam-in-portuguese/","section":"Mail spam I received","summary":"I already got a few of these, but I thought an email in Portuguese should get onto the website 😊 This is one of these \u0026ldquo;bitcoin\u0026rdquo; scam mails, where they claim to got all your personal data and want to send it to your contacts on your phone.","title":"First Spam in Portuguese","updated":"11 January 2025"},{"content":"I usually run the mastodon instance on a VM with two cores and 4GB of RAM. That is plenty of power for the simple tasks a single-user instance has to do.\nPreface / preparations #But for the installation of LibreTranslate I enhanced (after powering off the VM) the cores to 4 and the RAM to 10GB.\nWhile installing the needed python packages I ran out of space on the /tmp filesystem (which was just a tmpfs filesystem).\nModify /etc/fstab and increase /tmp #To increase /tmp we log into the VM and modify the file /etc/fstab.\ntmpfs /tmp tmpfs size=10G 0 0 Alternatively you can use another directory with more space as tmp storage:\n$ TMPDIR=/var/lib/libretranslate/tmp pip install --prefer-binary libretranslate Install some needed packages #I had much prepared/installed already, but cmake was still missing.\n$ paru -S cmake The installation of LibreTranslate #Create a dedicated user for the service #$ sudo useradd --create-home --home-dir /var/lib/libretranslate libretranslate Change to the new user and install libretranslate in a virtual environment:\n(I had problems with Python 3.12 so I\u0026rsquo;ll stick with 3.11 for now)\n$ sudo su - libretranslate $ python3.11 -m venv venv $ source venv/bin/activate $ pip install --prefer-binary libretranslate $ argospm update Update: You get an error similar to this one?\n(venv) [libretranslate@mastodon ~]$ pip install --prefer binary libretranslate Traceback (most recent call last): File \u0026#34;/var/lib/libretranslate/venv/bin/pip\u0026#34;, line 5, in \u0026lt;module\u0026gt; from pip._internal.cli.main import main ModuleNotFoundError: No module named \u0026#39;pip\u0026#39; Most of the time this is because symlinks of python got updated and you haven\u0026rsquo;t installed all the modules on the new versions venv. I solved this with a new installation on the new version, there might be easier ways but I haven\u0026rsquo;t found the time to look into that yet.\nSo I install pip again and repeat the installation within the new python versions venv.\n$ python -m ensurepip Install every language possible #$ for lang in $(argospm search | cut -d: -f1 ); do echo argospm install $lang;done Remove echo from that command to actually install them (the command above prints the commands needed to install the languages; you can only install one at a time).\nIf you only want to translate to English, use this instead #$ for lang in $(argospm search | grep -E \u0026#34;^translate-.._en.*\u0026#34;| awk \u0026#39;{ print $2 }\u0026#39; | xargs); do echo argospm install translate-${lang}_en; done Also remove echo to actually install these translation packages.\nLet mastodon know of the LibreTranslate installation #$ cd /var/lib/mastodon Add to .env.production:\nALLOWED_PRIVATE_ADDRESSES=127.0.0.1 LIBRE_TRANSLATE_ENDPOINT=http://127.0.0.1:5000 Create a systemd unit file to automatically start LibreTranslate #File: /etc/systemd/system/libretranslate.service\n[Unit] Description=LibreTranslate After=network.target [Service] User=libretranslate Group=libretranslate WorkingDirectory=/var/lib/libretranslate/ ExecStart=/var/lib/libretranslate/venv/bin/python /var/lib/libretranslate/venv/bin/libretranslate --host 0.0.0.0 --port 5000 --suggestions --req-limit 20 --update-models Restart=always #CPUQuota=50% [Install] WantedBy=multi-user.target Start LibreTranslate #First, tell systemd of the new unit file:\n$ sudo systemctl daemon-reload Enable and start the service:\n$ sudo systemctl enable --now libretranslate.service Restart Mastodon to let it know of the translation service #$ sudo systemctl restart mastodon-web.service Remove the extra space from /tmp #Comment or remove the line in /etc/fstab\n#tmpfs /tmp tmpfs size=10G 0 0 Reduce the VMs specs back to normal #I set the VM back to two cores and 4GB of RAM. Poweroff the VM with sudo poweroff or sudo systemctl poweroff and change the values back to normal. Start the VM again and all services should come online.\n","date":"7 December 2024","permalink":"/posts/2024/73-install-libretranslate/","section":"Blog","summary":"Summarized how I finally got LibreTranslate installed on my Archlinux based local mastodon test-instance. \u003csmall\u003eI am not affiliated with LibreTranslate \u0026ndash; this post reflects my own use case. The thumbnail is a trademark of \u003ca href=\"https://github.com/LibreTranslate/LibreTranslate/blob/main/TRADEMARK.md\" target=\"_blank\" rel=\"noreferrer\"\u003eLibreTranslate\u003c/a\u003e.\u003c/small\u003e","title":"Install LibreTranslate on a VM","updated":"19 January 2025"},{"content":"","date":null,"permalink":"/tags/mastodon/","section":"Tags","summary":"","title":"Mastodon","updated":null},{"content":"","date":null,"permalink":"/tags/selfhost/","section":"Tags","summary":"","title":"Selfhost","updated":null},{"content":"","date":null,"permalink":"/tags/server/","section":"Tags","summary":"","title":"Server","updated":null},{"content":"","date":null,"permalink":"/tags/unraid/","section":"Tags","summary":"","title":"Unraid","updated":null},{"content":"Following these steps should suffice.\nFirst of all, shutdown the VM\nGet some info about the image (I use a raw disk usually)\n$ qemu-img info -f raw vdisk1.img Resize the image (add 40 gigabytes)\n$ qemu-img resize -f raw vdisk1.img +40G Start the VM and log into a terminal on the VM\nResize the filesystems partition up to 100%\n$ sudo parted /dev/vda resizepart 2 100% Extend the filesystem on the resized partition (I use btrfs here)\n$ sudo btrfs filesystem resize max / Additional information for other filesystems\nFor the classic ext4 filesystem it should be (not tested yet):\n$ sudo resize2fs /dev/vda2 Reboot the VM\nThat\u0026rsquo;s it. Following a few sources:\nhttps://gist.github.com/zakkak/ab08672ff9d137bbc0b2d0792a73b7d2 https://linuxiac.com/how-to-resize-extend-kvm-virtual-disk-size/ https://unix.stackexchange.com/questions/373063/auto-expand-last-partition-to-use-all-unallocated-space-using-parted-in-batch-m ","date":"5 December 2024","permalink":"/posts/2024/72-increase-disksize-of-a-vm/","section":"Blog","summary":"Another quick\u0026rsquo;n\u0026rsquo;dirty note on how I finally enhanced the diskspace of my local mastodon test-instance placed as a virtual machine on my Unraid server. \u003csmall\u003eThe thumbnail was created with Google AI (Imagen 3).\u003c/small\u003e","title":"Increase the disksize of a VM (on Unraid)","updated":"19 January 2025"},{"content":"I sometimes want to combine two or three PDF files into one (to print them two pages on a sheet, mostly).\nI did this recently and here I write it down again so I can find it again (I will forget this until the next time I need it again):\n$ gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf file1.pdf file2.pdf file3.pdf ... Found on Stack Overflow.\nI also found another solution (further down at the link above) usable, but it produces much bigger files:\n$ qpdf --empty --pages *.pdf -- out.pdf ","date":"26 October 2024","permalink":"/posts/2024/71-combine-multiple-pdf-files/","section":"Blog","summary":"A quick note on how I got multiple PDF files combined into one single one on a linux command line. \u003csmall\u003eThe thumbnail was created with Google AI (Imagen 3).\u003c/small\u003e","title":"Combine multiple PDF files","updated":"19 January 2025"},{"content":"","date":null,"permalink":"/tags/openssh/","section":"Tags","summary":"","title":"Openssh","updated":null},{"content":"I spent some time adjusting my SSH configuration because I often get stalled connections to my servers but I never got that fixed until recently, when I started looking in my firewall settings on the pfSense.\nAfter changing the Firewall Optimization Settings within System → Advanced → Firewall \u0026amp; NAT to Conservative I had no more of these hangs of my SSH sessions.\nI use the ControlMaster setting in my SSH configuration so the stalled connections have to be killed with something like\n$ ssh -O exit {short hostname} every time \u0026ndash; which is annoying.\nUpdate on December 17 2024:\nA few changes to the SSH configuration on client and server have been made. It got better, but I still experience the one or other hang.\nI added/modified these entries within Host * in ~/.ssh/config on the client:\nServerAliveInterval 100 ServerAliveCountMax 10000 and made these changes/additions in /etc/ssh/sshd_config on the server:\nClientAliveInterval 60 ClientAliveCountMax 10000 TCPKeepAlive yes Update on January 5 2025:\nAnother change to the firewall setup in my home network. I did not had this on my mind but I accidentally saw my firewall retrieving a blacklist from my server and like instantly my ssh session was unusable again.\nI now reduced the amount of updates the firewall retrieves the blacklist and hope for the best!\nImage shows the settings screen of pfBlockerNG and the IPv4 feeds Update on January 12 2025:\nThe final solution should be the removal of all IPv4 based blocks As the logs of the pfBlockerNG indicate: every hour runs a job that fetches and updates blocklists for IP and DNS based blocking (if neccessary).\nSince the script kills all states to IP addresses in these lists my guess was, that I should remove these types of blacklist (as the firewall blocks incoming traffic of unknown sources anyway).\nI\u0026rsquo;m not sure how my servers IP got there, but I think the script kills all states of any addresses listed in these lists, including those in whitelists.\n[ pfB_Top_v4 ] Removed 46 state(s) for [ 89.58.16.xxx ] igb1 tcp 89.58.16.xxx:ssh \u0026lt;- 192.168.11.yyy:53226 ESTABLISHED:ESTABLISHED igb0 tcp 192.168.31.zzz:25103 (192.168.11.yyy:53226) -\u0026gt; 89.58.16.xxx:ssh ESTABLISHED:ESTABLISHED igb1 tcp 89.58.16.xxx:ssh \u0026lt;- 192.168.11.aaa:49270 TIME_WAIT:TIME_WAIT igb0 tcp 192.168.31.zzz:36706 (192.168.11.aaa:49270) -\u0026gt; 89.58.16.xxx:ssh TIME_WAIT:TIME_WAIT ... and so on etc ... Maybe it would have been enough to stop killing states but as I already wanted to thin these lists anyway\u0026hellip;\nOtherwise this settings should suffice, theoretically:\n","date":"6 October 2024","permalink":"/posts/2024/70-stalled-ssh-connections/","section":"Blog","summary":"My pfSense removed valid connections obviosly. This is how I solved it. \u003csmall\u003eThe thumbnail was created with Google AI (Imagen 3).\u003c/small\u003e","title":"Stalled SSH connections","updated":"12 January 2025"},{"content":"","date":null,"permalink":"/tags/cracking/","section":"Tags","summary":"","title":"Cracking","updated":null},{"content":"","date":null,"permalink":"/tags/hashcat/","section":"Tags","summary":"","title":"Hashcat","updated":null},{"content":"","date":null,"permalink":"/tags/john/","section":"Tags","summary":"","title":"John","updated":null},{"content":"","date":null,"permalink":"/tags/nvidia/","section":"Tags","summary":"","title":"Nvidia","updated":null},{"content":"","date":null,"permalink":"/tags/pentest/","section":"Tags","summary":"","title":"Pentest","updated":null},{"content":"For this reason I save most variations of my passwords in a secure file and with a rule file I can re-create most of the passwords that I have ever used.\nAnd because I do not want to type all the passwords by hand I use tools for this task, which speeds this whole process up and it costs me minutes (where I can do other things meanwhile)\u0026hellip;\nCreate the initial password file #I only use lower letters because I will punch that file through rules later that will automatically make some letters uppercase, add some numbers to it et cetera\u0026hellip;\npassword otherpassword Let these be our initial password file with the initial password that we use.\nThe rule file #Now create a rule file that will do most of the work by modifying the lines from our initial password file.\n## take it as it is, toggle first character to uppercase or lowercase, uppercase all characters : T0 u ## append/prepend something to the password itself $! $1 $2 $3 $3 $2 $1 $m $i $n $e ^y ^m ^i ^i T1 ^0 ^0 T1 $1 $2 $s $h $a $r $k So if you tend to finish your weak passwords with 12shark, you may want to add this to your ruleset as $1 $2 $s $h $a $r $k.\nNow every line from your password file gets appended with 12shark.\nLine counts #$ wc -l * 154 list.best64.txt 68196 list.d3ad0ne.txt 24 list.simple.txt 2 pwlist.txt 15 simple.rule So our initial password file contains 2 words (2 lines), the modified new password list based on our own ruleset contains 24 lines (passwords).\nAnd the other two files (best64 and d3ad0ne) were made with some default rules from a tool called john.\nAs you can see the wide-known ruleset best64 created 154 passwords from it and the more enhanced rule d3ad0ne created 68196 passwords from our 2 words.\nWhat the output looks like #Using our own ruleset from above, we get these combinations:\npassword Password PASSWORD password! password123 password321 passwordmine mypassword ipassword iPassword 0password 0Password otherpassword Otherpassword OTHERPASSWORD otherpassword! otherpassword123 otherpassword321 otherpasswordmine myotherpassword iotherpassword iOtherpassword 0otherpassword 0Otherpassword Try and experiment with hashcat to get similar combinations:\n$ hashcat pwlist.txt -r simple.rule --stdout \u0026gt; list.simple.txt You can now use the generated wordlist file list.simple.txt with other tools like john.\nCracking a zip file #List file contents, if possible.\n$ unzip -l test.zip Archive: test.zip Length Date Time Name --------- ---------- ----- ---- 57 2024-09-08 20:52 testfile.txt --------- ------- 57 1 file Create a hashfile that can be used with john and/or hashcat.\n$ zip2john -a testfile.txt -o testfile.txt test.zip \u0026gt; hash.txt Using file testfile.txt as an \u0026#39;ASCII\u0026#39; quick check file Using file testfile.txt as only file to check ver 2.0 efh 5455 efh 7875 test.zip/testfile.txt PKZIP Encr: 2b chk, TS_chk, cmplen=68, decmplen=57, crc=6059407C Let us use a different file for hashcat, we have to remove the file paths from the hashfile.\n$ cp hash.txt hash.cat.txt $ nvim hash.cat.txt Modify the file and leave only the hash in the file.\nContent of hash.txt file:\ntest.zip/testfile.txt:$pkzip2$1*2*2*0*44*39*6059407c*0*46*8*44*6059*a693*56e69569c63b3f0ac307d758e4a511cf0088f0f91edeb7bc3e1cb885ce05733ff91f654fb44c54f04ec23c79c44cd0c279fe96f1199542eae900a1533bd390f8bbbc2bc1*$/pkzip2$:testfile.txt:test.zip::test.zip Content of hash.cat.txt file:\n$pkzip2$1*2*2*0*44*39*6059407c*0*46*8*44*6059*a693*56e69569c63b3f0ac307d758e4a511cf0088f0f91edeb7bc3e1cb885ce05733ff91f654fb44c54f04ec23c79c44cd0c279fe96f1199542eae900a1533bd390f8bbbc2bc1*$/pkzip2$ We now try to crack the hash in hash.cat.txt with hashcat.\n$ hashcat -m 17220 -a 0 hash.cat.txt pwlist.txt -r simple.rule hashcat (v6.2.6) starting OpenCL API (OpenCL 3.0 ) - Platform #1 [Intel(R) Corporation] ============================================================= * Device #1: Intel(R) UHD Graphics 620, 7136/14368 MB (2047 MB allocatable), 24MCU Minimum password length supported by kernel: 0 Maximum password length supported by kernel: 256 Hashes: 1 digests; 1 unique digests, 1 unique salts Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates Rules: 13 Optimizers applied: * Not-Iterated * Single-Hash * Single-Salt Watchdog: Hardware monitoring interface not found on your system. Watchdog: Temperature abort trigger disabled. * Device #1: Skipping (hash-mode 17220) This is due to a known OpenCL runtime and/or device driver issue (not a hashcat issue) You can use --force to override, but do not report related errors. Started: Sun Sep 8 22:11:10 2024 Stopped: Sun Sep 8 22:11:13 2024 So hashcat will not work on my Carbon X1 laptop for this specific hash-mode.\nI will then try john with the pre-generated wordlist then.\n$ hashcat pwlist.txt -r simple.rule --stdout \u0026gt;customlist.txt $ john --wordlist=customlist.txt hash.txt [odin:52509] shmem: mmap: an error occurred while determining whether or not /tmp/ompi.odin.1000/jf.0/1299054592/shared_mem_cuda_pool.odin could be created. [odin:52509] create_and_attach: unable to create shared memory BTL coordinating structure :: size 134217728 Using default input encoding: UTF-8 Loaded 1 password hash (PKZIP [32/64]) Will run 8 OpenMP threads Press \u0026#39;q\u0026#39; or Ctrl-C to abort, almost any other key for status password12shark (?) 1g 0:00:00:00 DONE (2024-09-08 22:14) 25.00g/s 650.0p/s 650.0c/s 650.0C/s password..otherpassword12shark Use the \u0026#34;--show\u0026#34; option to display all of the cracked passwords reliably Session completed $ john --show hash.txt [odin:52580] shmem: mmap: an error occurred while determining whether or not /tmp/ompi.odin.1000/jf.0/3210149888/shared_mem_cuda_pool.odin could be created. [odin:52580] create_and_attach: unable to create shared memory BTL coordinating structure :: size 134217728 ?:password12shark 1 password hash cracked, 0 left $ unzip -P password12shark test.zip Archive: test.zip replace testfile.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: r new name: newfile.txt inflating: newfile.txt $ cat newfile.txt I am a little testfile. This is absolutely top secret. I would do all the \u0026ldquo;heavy\u0026rdquo; lifting on my gaming laptop which has a real graphics card built into.\nCracking on a remote computer #How? Copy the files to the remote computer and run hashcat over there:\n$ rsync --no-motd -acvhz --stats --del pass/ polaris:pass/ sending incremental file list ./ customlist.txt hash.txt list.best64.txt list.d3ad0ne.txt list.simple.txt list.simple2.txt newfile.txt pwlist.txt simple.rule test.zip testfile.txt Number of files: 12 (reg: 11, dir: 1) Number of created files: 11 (reg: 11) Number of deleted files: 0 Number of regular files transferred: 11 Total file size: 852,05K bytes Total transferred file size: 852,05K bytes Literal data: 852,05K bytes Matched data: 0 bytes File list size: 0 File list generation time: 0,004 seconds File list transfer time: 0,000 seconds Total bytes sent: 208,34K Total bytes received: 235 sent 208,34K bytes received 235 bytes 417,14K bytes/sec total size is 852,05K speedup is 4,09 Login on the remote machine: ssh polaris.\npolaris is the short name of the remote computer in my ssh configuration file ~/.ssh/config.\nOn the remote machine:\n$ cd pass $ hashcat -m 17200 -a 0 hash.txt pwlist.txt -r simple.rule hashcat (v6.2.5) starting nvmlDeviceGetFanSpeed(): Not Supported CUDA API (CUDA 12.4) ==================== * Device #1: NVIDIA GeForce RTX 2060, 5833/5919 MB, 30MCU OpenCL API (OpenCL 3.0 CUDA 12.4.131) - Platform #1 [NVIDIA Corporation] ======================================================================== * Device #2: NVIDIA GeForce RTX 2060, skipped Minimum password length supported by kernel: 0 Maximum password length supported by kernel: 256 Hashes: 1 digests; 1 unique digests, 1 unique salts Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates Rules: 13 Optimizers applied: * Not-Iterated * Single-Hash * Single-Salt Watchdog: Temperature abort trigger set to 90c Host memory required for this attack: 263 MB Dictionary cache built: * Filename..: pwlist.txt * Passwords.: 2 * Bytes.....: 23 * Keyspace..: 26 * Runtime...: 0 secs The wordlist or mask that you are using is too small. This means that hashcat cannot use the full parallel power of your device(s). Unless you supply more work, your cracking speed will drop. For tips on supplying more work, see: https://hashcat.net/faq/morework Approaching final keyspace - workload adjusted. $pkzip2$1*2*2*0*44*39*6059407c*0*46*8*44*6059*a693*56e69569c63b3f0ac307d758e4a511cf0088f0f91edeb7bc3e1cb885ce05733ff91f654fb44c54f04ec23c79c44cd0c279fe96f1199542eae900a1533bd390f8bbbc2bc1*$/pkzip2$:password12shark Session..........: hashcat Status...........: Cracked Hash.Mode........: 17200 (PKZIP (Compressed)) Hash.Target......: $pkzip2$1*2*2*0*44*39*6059407c*0*46*8*44*6059*a693*...kzip2$ Time.Started.....: Sun Sep 8 22:26:17 2024 (0 secs) Time.Estimated...: Sun Sep 8 22:26:17 2024 (0 secs) Kernel.Feature...: Pure Kernel Guess.Base.......: File (pwlist.txt) Guess.Mod........: Rules (simple.rule) Guess.Queue......: 1/1 (100.00%) Speed.#1.........: 27415 H/s (0.48ms) @ Accel:512 Loops:13 Thr:32 Vec:1 Recovered........: 1/1 (100.00%) Digests Progress.........: 26/26 (100.00%) Rejected.........: 0/26 (0.00%) Restore.Point....: 0/2 (0.00%) Restore.Sub.#1...: Salt:0 Amplifier:0-13 Iteration:0-13 Candidate.Engine.: Device Generator Candidates.#1....: password -\u0026gt; otherpassword12shark Hardware.Mon.#1..: Temp: 40c Util: 0% Core:1005MHz Mem:5500MHz Bus:8 Started: Sun Sep 8 22:25:48 2024 Stopped: Sun Sep 8 22:26:18 2024 This is probably the only reason why you would want a NVIDIA graphics card in your computer 😉\nSome notes #Most of the files can easily be cracked on my laptop with integrated graphics using either john or hashcat. For more complicated or tasks that may run longer than expected I put all that stuff to the gaming laptop and try cracking them over there.\nThis is sufficient for all my tasks but if you want to do more you should probably consider using a tower with a \u0026ldquo;real\u0026rdquo; graphics card (not a mobile one).\nUnfortunately current libreoffice files cannot be cracked; or at least, I haven\u0026rsquo;t found a working routine for now\u0026hellip;\nUpdate: Laptop comparisons #Updated on October 13, 2024\nThe results can probably increased by using a high-end tower PC with one or more graphic cards. Notice the units in the following tables (like H/s, kH/s or MH/s)! Below you see a short comparison between my Lenovo X1 Carbon (Gen7; i7-8665U) and my Tuxedo Polaris 17 (Ryzen 7 4800H) with integrated NVIDIA GeForce RTX 2060.\nOnly CUDA was used on the Polaris, no CPU was involved. I am not sure if there is any progress for OpenCL on AMD CPUs (I haven\u0026rsquo;t looked into this as it\u0026rsquo;s not relevant for me). WPA-PBKDF2-PMKID+EAPOL # hash mode command line X1 Carbon Polaris 17 22000 hashcat -m 22000 -D 1,2 -b 17178 H/s 152.9 kH/s WPA-PMKID-PBKDF2 #Deprecated in favor of mode 22000 (see above):\nThe plugin 16800 is deprecated and was replaced with plugin 22000. For more details, please read: https://hashcat.net/forum/thread-10253.html\nhash mode command line X1 Carbon Polaris 17 16800 hashcat -m 16800 -D 1,2 -b 16930 H/s 146.7 kH/s WPA-EAPOL-PBKDF2 #Deprecated in favor of mode 22000 (see above above):\nThe plugin 2500 is deprecated and was replaced with plugin 22000. For more details, please read: https://hashcat.net/forum/thread-10253.html\nhash mode command line X1 Carbon Polaris 17 2500 hashcat -m 2500 -D 1,2 -b 15865 H/s 152.0 kH/s PKZIP (Compressed Multi-File) #Expect some OpenCL issues! Only the CPU was used on the X1 Carbon and the Tuxedo Polaris wasn\u0026rsquo;t able to finish the session.\nhash mode command line X1 Carbon Polaris 17 17220 hashcat -m 17220 -D 1,2 -b 64116.2 kH/s N/A (error) The X1 Carbon displayed the following warning:\n------------------------------------------------- * Hash-Mode 17220 (PKZIP (Compressed Multi-File)) ------------------------------------------------- * Device #2: Skipping (hash-mode 17220) This is due to a known OpenCL runtime and/or device driver issue (not a hashcat issue) You can use --force to override, but do not report related errors. The Polaris aborted with a few of these error messages:\nclEnqueueNDRangeKernel(): CL_OUT_OF_HOST_MEMORY MD5 # hash mode command line X1 Carbon Polaris 17 0 hashcat -m 0 -D 1,2 -b 1224.0 MH/s 9527.4 MH/s SHA1 # hash mode command line X1 Carbon Polaris 17 100 hashcat -m 100 -D 1,2 -b 317.9 MH/s 3029.0 MH/s SHA2-512 # hash mode command line X1 Carbon Polaris 17 1700 hashcat -m 1700 -D 1,2 -b 42721.2 kH/s 442.4 MH/s SHA3-512 # hash mode command line X1 Carbon Polaris 17 17600 hashcat -m 17600 -D 1,2 -b 36062.7 kH/s 277.2 MH/s ","date":"8 September 2024","permalink":"/posts/2024/69-recover-your-lost-password-on-the-command-line/","section":"Blog","summary":"If you are like me and use many different passwords you may come to that point when you can\u0026rsquo;t think of a password for a specific service (or (zip)file). This is how I recover most of them. \u003csmall\u003eThe thumbnail was taken from \u003ca href=\"https://pixabay.com/illustrations/hacking-cybercrime-cybersecurity-3112539/\" target=\"_blank\" rel=\"noreferrer\"\u003ejaydeep_\u003c/a\u003e.\u003c/small\u003e","title":"Recover Your Lost Password On The Command Line","updated":"19 January 2025"},{"content":"Some basic and random information about FreeBSD.\nWhat I miss on FreeBSD #Currently, I run stable/14 on my X1 Carbon Gen7 laptop. I do not run this as a daily driver but I insert the BSD disk from time to time to see if things work better or not.\nstable wifi drivers (I use wifibox for now but I\u0026rsquo;d love to ditch the virtual linux network card) ranger quits whenever a key is pressed (haven\u0026rsquo;t found an alternative to ranger combined with ueberzug as a command line file explorer (that can preview images)) generally speaking, the boot time and overall responsiveness is a bit slower than on a linux based os I never got the scrolling in Neomutt working within Alacritty Any sound on the internal speaker sounds like crap. The headphone jack plays fine sounds and music, just the internal speaker is a pain to set up and I never found a good solution that actually plays nice audio. Tracking FreeBSD STABLE #A quick checklist. Read along on the FreeBSD website for further information.\nAs for my understanding only source updates are possible on the STABLE branch, but I still use pkg to install pre-compiled packages \u0026ndash; I will find out if that breaks things.\nUpdate sources\n$ doas git -C /usr/src pull Check /usr/src/UPDATING\nGo to /usr/src\n$ cd /usr/src Compile world\n$ doas make -j8 buildworld Compile and install kernel\n$ doas make -j8 kernel This is equivalent to make -j8 buildkernel installkernel.\nReboot\n$ shutdown -r now Update config files\n$ doas etcupdate -p -p short explained:\nEnable “pre-world” mode. Only merge changes to files that are necessary to successfully run ‘make installworld’ or ‘make installkernel’.\nAgain, go to /usr/src\n$ cd /usr/src Install world\n$ doas make installworld Update config files (after world installation)\n$ doas etcupdate -B -B explained:\nDo not build generated files in a private object tree. Instead, reuse the generated files from a previously built object tree that matches the source tree. This can be useful to avoid gratuitous conflicts in sendmail(8) configuration files when bootstrapping. It can also be useful for building a tarball that matches a specific world build.\nAnother one, reboot\n$ shutdown -r now System is up to date, following the branch stable/14 (for now).\n","date":"31 August 2024","permalink":"/notes/operating-systems/freebsd/","section":"Notes","summary":"","title":"FreeBSD","updated":"8 March 2026"},{"content":"","date":null,"permalink":"/tags/git/","section":"Tags","summary":"","title":"Git","updated":null},{"content":"Get the .deb file. Extract it with debtap.\n$ debtap wavelog-gate-by-dj7nt_1.0.16_amd64.deb ==\u0026gt; Extracting package data... ==\u0026gt; Fixing possible directories structure differencies... ==\u0026gt; Generating .PKGINFO file... :: Enter Packager name (can be left blank): :: Enter package license (can be left blank, you can enter multiple licenses comma separated): *** Creation of .PKGINFO file in progress. It may take a few minutes, please wait... grep: Warnung: überzähliges \\ vor / grep: Warnung: überzähliges \\ vor / grep: Warnung: überzähliges \\ vor / [ ... snipped (much more of these lines...) ] Warning: These dependencies (depend = fields) could not be translated into Arch Linux packages names: kde-runtime, libatspi2.0-0 Warning: These optional dependencies (optdepend = fields) could not be translated into Arch Linux packages names: gir1.2-gnomekeyring-1.0, libasound2 ==\u0026gt; Checking and generating .INSTALL file (if necessary)... :: If you want to edit .PKGINFO and .INSTALL files (in this order), press (1) For vi (2) For nano (3) For default editor (4) For a custom editor or any other key to continue: Hit 3 to edit the resulting files with the default editor and remove the following dependencies:\ngtk kde-runtime libatspi2.0-0 gir1.2-gnomekeyring-1.0 libasound2 discord kde-cli-tools gvfs intel-oneapi-basekit trash-cli We could translate them into packages available for Archlinx, but I will just remove them for now because I don\u0026rsquo;t need any additional stuff (like discord, WTF?!#$!) (You can try and remove even more dependencies; if it fails, leave them in next time\u0026hellip;)\nI also edit the package name:\npkgname = wavelog-gate All hail to the author of the program, but I really do not need any callsign in an applications name.\nSave the file and skip the second file that pops up after closing the first one.\nThe creation of the package continues:\n==\u0026gt; Generating .MTREE file... ==\u0026gt; Creating final package... ==\u0026gt; Package successfully created! ==\u0026gt; Removing leftover files... Install the final arch package\n$ paru -U wavelog-gate-1.0.16-1-x86_64.pkg.tar.zst Pakete werden geladen … Warnung: wavelog-gate-1.0.16-1 ist aktuell -- Reinstalliere Abhängigkeiten werden aufgelöst … Nach in Konflikt stehenden Paketen wird gesucht … Pakete (1) wavelog-gate-1.0.16-1 Gesamtgröße der installierten Pakete: 298,90 MiB Größendifferenz der Aktualisierung: 0,00 MiB :: Installation fortsetzen? [J/n] (1/1) Schlüssel im Schlüsselbund werden geprüft [---------------------------------------------------] 100% (1/1) Paket-Integrität wird überprüft [---------------------------------------------------] 100% (1/1) Paket-Dateien werden geladen [---------------------------------------------------] 100% (1/1) Auf Dateikonflikte wird geprüft [---------------------------------------------------] 100% (1/1) Verfügbarer Festplattenspeicher wird ermittelt [---------------------------------------------------] 100% :: Paketänderungen werden verarbeitet … (1/1) Reinstalliert wird wavelog-gate [---------------------------------------------------] 100% :: Post-transaction-Hooks werden gestartet … (1/3) Arming ConditionNeedsUpdate... (2/3) Checking which packages need to be rebuilt (3/3) Updating the desktop file MIME type cache... The end. Anyone tried this on FreeBSD yet?\n","date":"18 August 2024","permalink":"/posts/2024/68-install-waveloggate-on-archlinux/","section":"Blog","summary":"There is an app for Linux, Windows and MacOS to connect your wavelog instance to your local computer.","title":"Install WaveLogGate on Arch Linux","updated":"29 September 2024"},{"content":"","date":null,"permalink":"/tags/wavelog/","section":"Tags","summary":"","title":"Wavelog","updated":null},{"content":"","date":null,"permalink":"/tags/cloudlog/","section":"Tags","summary":"","title":"Cloudlog","updated":null},{"content":"Set up the database #I\u0026rsquo;m going to use MySQL as the database type and I create a new user and database for it:\nCREATE DATABASE wavelog; CREATE USER \u0026#39;wavelog\u0026#39;@\u0026#39;localhost\u0026#39; IDENTIFIED BY \u0026#39;${PASSWORD}\u0026#39;; GRANT ALL PRIVILEGES ON wavelog.* TO \u0026#39;wavelog\u0026#39;@\u0026#39;localhost\u0026#39;; FLUSH PRIVILEGES; Get the ADIF files from Cloudlog #Choose ADIF Import / Export from the user menu and also select the ADIF Export tab.\nChoose the callsign and download the ADIF file. We will import these later in our Wavelog installation.\nInstall Wavelog #Clone the git repository to your webroot and adjust file permissions as stated in the wiki.\nFor future upgrades I modify the update script and save it as another file just to not interrupt the update procedure.\n--- update_wavelog.sh\t2024-06-23 15:08:15.138250067 +0200 +++ update2.sh\t2024-06-23 15:13:02.786807949 +0200 @@ -8,7 +8,7 @@ # appropriately set for your system! # The user and group that own the WAVELOG_SUBDIR directories. Passed to \u0026#39;chown\u0026#39; as-is. -DIR_OWNERSHIP=\u0026#34;root:www-data\u0026#34; +DIR_OWNERSHIP=\u0026#34;http:http\u0026#34; # The list of directories that need to have ownership restored after a git pull declare -a WAVELOG_SUBDIRS=(\u0026#34;application/config\u0026#34; \u0026#34;assets\u0026#34; \u0026#34;backup\u0026#34; \u0026#34;updates\u0026#34; \u0026#34;uploads\u0026#34; \u0026#34;images/eqsl_card_images\u0026#34; \u0026#34;userdata\u0026#34;) # The name of the Git remote to fetch/pull from So my file permissions look like this:\n$ ls -la .  master d846bc insgesamt 88 drwxr-xr-x 1 root http 490 30. Jun 20:00 ./ drwxr-xr-x 1 root root 92 25. Jun 05:49 ../ drwxr-xr-x 1 root http 220 19. Mai 16:17 application/ drwxr-xr-x 1 http http 156 23. Jun 15:08 assets/ drwxr-xr-x 1 http http 162 23. Jun 20:20 backup/ drwxr-xr-x 1 root http 176 23. Jun 15:13 .git/ drwxr-xr-x 1 root http 46 19. Mai 16:17 .github/ drwxr-xr-x 1 root http 268 19. Mai 16:17 images/ drwxr-xr-x 1 root http 58 19. Mai 16:17 install/ drwxr-xr-x 1 root http 58 19. Mai 16:17 src/ drwxr-xr-x 1 root http 120 19. Mai 16:17 system/ drwxr-xr-x 1 http http 140 23. Jun 20:19 updates/ drwxr-xr-x 1 http http 20 23. Jun 20:57 uploads/ drwxr-xr-x 1 http http 12 23. Jun 15:13 userdata/ -rw-r--r-- 1 root http 1851 23. Jun 15:08 Dockerfile -rw-r--r-- 1 root http 24 19. Mai 16:17 .dockerignore -rw-r--r-- 1 root http 670 19. Mai 16:17 .editorconfig -rw-r--r-- 1 root http 15406 19. Mai 16:17 favicon.ico -rw-r--r-- 1 root http 404 19. Mai 16:17 .gitignore -rw-r--r-- 1 root root 499 23. Jun 15:14 .htaccess -rw-r--r-- 1 root http 499 23. Jun 15:08 htaccess.sample -rw-r--r-- 1 root http 11041 19. Mai 16:17 index.php -rw-r--r-- 1 root http 1122 19. Mai 16:17 LICENSE -rw-r--r-- 1 root http 12009 19. Mai 16:17 manifest.json -rw-r--r-- 1 root http 2507 19. Mai 16:17 README.md -rw-r--r-- 1 root http 86 19. Mai 16:17 robots.txt -rw-r--r-- 1 root http 247 19. Mai 16:17 SECURITY.md -rwxr-xr-x 1 root http 2413 23. Jun 15:13 update2.sh* -rw-r--r-- 1 root http 2417 23. Jun 15:08 update_wavelog.sh Visit the configured website and go through the installation process by following the instructions. You may have to edit /etc/php/php.ini (or similar) to allow more memory to be used by the PHP processes and so on\u0026hellip;\nStation setup #Now create the stations and locations that you want to use (usually the same as in the Cloudlog instance) and start importing the previously downloaded ADIF files.\nAs I have already uploaded my older logs to LOTW I checked Mark imported QSOs as uploaded to LoTW when I imported my logs.\nThird party tools #I do like WavelogGate already but haven\u0026rsquo;t had the chance to test it out in the field yet.\nI can successfully see CloudlogOffline connecting to my webserver, but the test button never turns green \u0026ndash; I also can\u0026rsquo;t upload logs from within the app so I guess the compatibility is broken there.\nThat will make me move back to my favourite iOS app for logging: RUMlog2Go for iPhone.\nTo upload the logs just export as adif, self-email and import. It\u0026rsquo;s not the \u0026ldquo;syncing\u0026rdquo; way but it is still acceptable in my opinion.\n","date":"28 July 2024","permalink":"/posts/2024/67-moving-cloudlog-to-wavelog/","section":"Blog","summary":"I finally made the hop from Cloudlog to Wavelog and I don\u0026rsquo;t regret it so far.","title":"Moving from Cloudlog to Wavelog","updated":"29 September 2024"},{"content":"I moved the weatherstation software again to another computer, this time a virtual one \u0026ndash; that means one Raspberry Pi less on the windowsill.\nThe installation process is also covered in the 5.0 docs.\nCreating the virtual environment #$ sudo pacman -S python-pip $ python -m venv ~/weewx-venv $ source ~/weewx-venv/bin/activate $ python -m pip install weewx The installation is complete, let\u0026rsquo;s create the station. I like doing upgrades \u0026ldquo;from scratch\u0026rdquo; because I can use an up-to-date configuration file \u0026ndash; although it is more work to add the old changes to the new file.\nCreate the new station #$ weectl station create Follow the instructions on the command line. Edit the freshly created configuration file.\n$ nvim ~/weewx-data/weewx.conf Including my old settings and add the GW1000 configuration for the plugin that I will soon install.\nInstalling the extensions #Do this within the virtual environment!\nInstall the GW1000 driver:\n$ weectl extension install https://github.com/gjr80/weewx-gw1000/releases/latest/download/gw1000.zip Install the WDC theme:\n$ wget -O \u0026#34;/tmp/weewx-wdc.zip\u0026#34; https://github.com/Daveiano/weewx-wdc/releases/download/v3.5.1/weewx-wdc-v3.5.1.zip $ mkdir /tmp/weewx-wdc/ $ unzip /tmp/weewx-wdc.zip -d /tmp/weewx-wdc/ $ weectl extension install -y /tmp/weewx-wdc/ Install the XAGGS extension:\n$ weectl extension install https://github.com/tkeffer/weewx-xaggs/archive/master.zip Install forecast plugin:\n$ wget https://github.com/chaunceygardiner/weewx-forecast/releases/download/v3.4.0b12/weewx-forecast-3.4.0b12.zip $ weectl extension install weewx-forecast-3.4.0b12.zip Install the OpenWeatherMap extension:\n$ wget -O weewx-owm.zip https://github.com/matthewwall/weewx-owm/archive/master.zip $ weectl extension install weewx-owm.zip Install Systemd and udev files #$ sudo sh ~/weewx-data/scripts/setup-daemon.sh My installation died everyday at 5 AM and so I modified the systemd files at the [Service] section:\n--- weewx.service\t2024-06-13 21:13:50.115021718 +0200 +++ /etc/systemd/system/weewx.service\t2024-06-11 05:22:43.224222604 +0200 @@ -12,6 +12,8 @@ ExecStart=/home/dominic/weewx-venv/bin/python /home/dominic/weewx-venv/lib/python3.12/site-packages/weewxd.py /home/dominic/weewx-data/weewx.conf StandardOutput=null StandardError=journal+console +RestartSec=60 +Restart=on-failure User=dominic Group=dominic Adopt the configuration files #Again, to include the latest changes and themes.\n$ nvim ~/weewx-data/weewx.conf $ nvim ~/weewx-data/skins/weewx-wdc/skin.conf Start WeeWX and test the configuration:\n$ weewxd If everything runs without problems we can now enable and start the Systemd service.\n$ sudo systemctl enable weewx.service I like to test it with a full reboot, if you just want to start the daemon right away you can also run sudo systemctl enable --now weewx.service instead.\nRegister the station on OpenWeatherMap #After creating an API key (which I already have because of the forecast plugin that I use already) we can register our new station on the command line with curl.\n$ curl --header \u0026#34;Content-Type: application/json\u0026#34; --request POST \\ --data \u0026#39;{\u0026#34;external_id\u0026#34;: \u0026#34;LGFD_OE7DRT\u0026#34;,\u0026#34;name\u0026#34;: \u0026#34;OE7DRT-13, Laengenfeld, Tirol, Austria\u0026#34;,\u0026#34;latitude\u0026#34;: 47.07321210625363, \u0026#34;longitude\u0026#34;: 10.974540559888204, \u0026#34;altitude\u0026#34;: 1202}\u0026#39; \\ \u0026#34;http://api.openweathermap.org/data/3.0/stations?appid={APIKEY}\u0026#34; That should give you something like this (probably without linebreaks!):\n{ \u0026#34;ID\u0026#34;: \u0026#34;${STATION_ID}\u0026#34;, \u0026#34;updated_at\u0026#34;: \u0026#34;2024-06-23T07:40:47.276754274Z\u0026#34;, \u0026#34;created_at\u0026#34;: \u0026#34;2024-06-23T07:40:47.276754093Z\u0026#34;, \u0026#34;user_id\u0026#34;: \u0026#34;${USERID}\u0026#34;, \u0026#34;external_id\u0026#34;: \u0026#34;LGFD_OE7DRT\u0026#34;, \u0026#34;name\u0026#34;: \u0026#34;OE7DRT-13, Laengenfeld, Tirol, Austria\u0026#34;, \u0026#34;latitude\u0026#34;: 47.07321210625363, \u0026#34;longitude\u0026#34;: 10.974540559888204, \u0026#34;altitude\u0026#34;: 1202, \u0026#34;rank\u0026#34;: 10, \u0026#34;source_type\u0026#34;: 5 } I haven\u0026rsquo;t found any information about the format of altitude so I currently used 1202, which represents my stations height in meters.\nTo change a stations information I\u0026rsquo;d then send another request like:\n$ curl --header \u0026#34;Content-Type: application/json\u0026#34; --request PUT \\ --data \u0026#39;{\u0026#34;external_id\u0026#34;: LGFD_OE7DRT, \u0026#34;name\u0026#34;: \u0026#34;OE7DRT-13, Längenfeld, Tirol, Austria\u0026#34;}\u0026#39; \\ \u0026#34;http://api.openweathermap.org/data/3.0/stations/${STATION_ID}?appid=${APIKEY}\u0026#34; Send the URL as the stations status text #Create another virtual environment:\n$ python -m venv ~/aprs-venv $ python -m pip install aprslib Create systemd files for the user:\n$ mkdir -p .config/systemd/user Create these two files in the directory above:\naprs-sendstatus.timer:\n[Unit] Description=\u0026#34;Send APRS status package to APRS-IS for the Weatherstation\u0026#34; [Timer] OnBootSec=2min OnUnitInactiveSec=30min Unit=aprs-sendstatus.service [Install] WantedBy=default.target aprs-sendstatus.service:\n[Unit] Description=\u0026#34;Send APRS status package to APRS-IS for the Weatherstation\u0026#34; After=network.target [Service] Type=oneshot ExecStart=/home/dominic/aprs-venv/bin/python /home/dominic/bin/aprs_sendstatus.py [Install] WantedBy=default.target Enable the timer:\n$ systemctl --user daemon-reload $ systemctl --user enable --now aprs-sendstatus.timer Check if the timer is listed:\n$ systemctl --user list-timers NEXT LEFT LAST PASSED UNIT ACTIVATES Sun 2024-06-30 21:54:20 CEST 25min Sun 2024-06-30 21:24:19 CEST 4min 18s ago aprs-sendstatus.timer aprs-sendstatus.service 1 timers listed. Pass --all to see loaded but inactive timers, too. ","date":"30 June 2024","permalink":"/posts/2024/66-upgrade-my-weatherstation-to-weewx-5/","section":"Blog","summary":"Another big move for the weatherstation. The station also moved off the Raspberry Pi 4 and I\u0026rsquo;m using the SQLite database again (instead of a local or remote MySQL server). The new environment is a virtual machine running on my homeserver.","title":"Upgrade my weatherstation to WeeWX 5","updated":"29 September 2024"},{"content":"First let us start with what I used until now for any Winlink session that I made (either at home or portable in the field/forest/mountain).\nThe old setup (on a linux box) #I use a Lenovo X1 Carbon as my daily driver. It is quick enough and compact and I used it for a while now for hamradio stuff too. I never did FT8 or similar \u0026ldquo;messengers\u0026rdquo; on it though. In particular I did some winlink sessions using Pat in combination with rigctld, direwolf, the AX.25 tools, VARA (HF and FM) and ARDOPCF (never got one connection from home).\nA more precise note on how I established different connection types is already written down in the article before.\nUsing Winlink Express on a Windows computer #I planned to use the Surface 2 Go tablet for Winlink and related tasks \u0026ndash; but while I wrote down my notes in this article I finally realized that I want to user a more powerful device than the Surface 2 Go. I ordered a used HP Elitebook 830 for this and I finished the main setup already.\nFYI: most screenshots are still from the Surface tablet.\nThis is my setup with Winlink Express and VARA HF in action. I like to have the sound control open to adjust volume levels.\nARDOP setup #Following some screenshots showing my settings for ARDOP:\nThe classic Windows ARDOP program. Settings within a ARDOP Winlink session Set the desired drive level within these settings. I usually have to set it to 87-88.\nRadio settings within a ARDOP Winlink session I use a Lab599 Discovery TX-500 (with Lab599 as the CAT option).\nI also use a Digirig and I can therefore use the COM port to trigger the PTT function.\nAnd finally the ARDOP settings Oh sorry, we could not show you the video!\nWe had the following sources: av1 mp4, h265 mp4, h264 mp4 An ARDOP session Download: H264, H265, AV1 (INFO Some files might not be available.\nH264: Great compatibility, lower quality and bigger size\nH265: Very small files, but not as good as AV1\nAV1: The best quality here, but a bit bigger files as the H265 version\nAn actual browser should usually load the small H265 video per default, others might use the H264 video.\nWindows might not load H265 per default because you would probably have to install the HEVC codec from the Microsoft Store. ) VARA HF setup # Settings within a Winlink VARA HF session Choosing the right soundcard and the drive level to fit the optimum ALC of the radio Oh sorry, we could not show you the video!\nWe had the following sources: av1 mp4, h265 mp4, h264 mp4 A VARA HF session Download: H264, H265, AV1 (INFO Some files might not be available.\nH264: Great compatibility, lower quality and bigger size\nH265: Very small files, but not as good as AV1\nAV1: The best quality here, but a bit bigger files as the H265 version\nAn actual browser should usually load the small H265 video per default, others might use the H264 video.\nWindows might not load H265 per default because you would probably have to install the HEVC codec from the Microsoft Store. ) VARA FM setup # Settings within a Winlink VARA FM settings Settings of the VARA FM soundcard settings The Digirig was not connected at the time when I made the screenshot here, so you see an invalid soundcard setting above. Make sure to select the proper USB sound devices.\nUsing the COM port of the Digirig for PTT control and using RTS+DTR Oh sorry, we could not show you the video!\nWe had the following sources: av1 mp4, h265 mp4, h264 mp4 A VARA FM session Download: H264, H265, AV1 (INFO Some files might not be available.\nH264: Great compatibility, lower quality and bigger size\nH265: Very small files, but not as good as AV1\nAV1: The best quality here, but a bit bigger files as the H265 version\nAn actual browser should usually load the small H265 video per default, others might use the H264 video.\nWindows might not load H265 per default because you would probably have to install the HEVC codec from the Microsoft Store. ) Packet radio setup # Settings within a Winlink packet radio session Choose the right soundcard interfaces and make sure to enable the KISS port \u0026ndash; you can disable the AGWPE port but we can use the same COM port for PTT control when using a Digirig My modem settings within soundmodem Oh sorry, we could not show you the video!\nWe had the following sources: av1 mp4, h265 mp4, h264 mp4 A packet radio session Download: H264, H265, AV1 (INFO Some files might not be available.\nH264: Great compatibility, lower quality and bigger size\nH265: Very small files, but not as good as AV1\nAV1: The best quality here, but a bit bigger files as the H265 version\nAn actual browser should usually load the small H265 video per default, others might use the H264 video.\nWindows might not load H265 per default because you would probably have to install the HEVC codec from the Microsoft Store. ) Using the internal GPS sensor #My Surface 2 Go was a non-LTE version and I think those versions are the only ones with built-in GPS sensors so I always had to use external GPS devices like the U-blox7 GPS stick.\nBut starting with the Elitebook 830 G6 I now have a device with integrated GPS sensors that I want to use with Winlink Express.\nHeads up: Winlink Express let you use a COM port or a TCP/IP connection to obtain coordinates, so we will need some sort of middleware that can read the internal sensors and forward the location information to a virtual COM port.\nGPSREverse and GPSDirect #I have tried GPSReverse and GPSDirect first but had no luck with it.\nI then started another try on a search engine but specifically looked for experienced off-grid operators like Julian, OH8STN \u0026ndash; because I remembered some videos of him using a Surface tablet as well. And of course, he also used the internal GPS device of his LTE model.\nUsing GpsGate Splitter #Goto the GpsGate Splitter website and download the Splitter aswell as the Windows Location API Plugin (scroll down a bit).\nThe program is a 14-day free trial and can be bought for EUR 30€ (USD 40$) and is well worth the investment. On the welcome screen click Advanced setup\u0026hellip; on the bottom. This opens the GpsGate settings dialog. Select Windows Location API as input.\nMove to the tab Output and choose Virtual COM Port in the drop-down menu for the output. Click Add and choose which port to use (I use COM1).\nGo back to the Input tab and click Open. You can now close the dialog form and it will remain active in the systray (bottom right of the screen, somewhere near the clock).\nAfter a reboot the GpsGate service should start automatically and restore your virtual COM port that you can select in Winlink Express.\nUpdate on June 16th\nI experienced some problems with this already, and I fixed it by using the Service.\nOpen the service manager (Win+R → services.msc → hit Enter or click OK) and enable Franson GpsGate 2.0 Service (doubleclick and set the Starttype to Automatic). You can also start it manually by clicking Start.\nWhat you have to look for #There are probably more things to keep an eye on, but those are the few ones that I usually take care of.\nTime synchronisation #Most digital modes rely on accurate time settings, so you may synchronise with a timeserver or use the GPS mouse.\nRX signal #In ARDOP try to get your receiving signal withing the green bar. The top blue bar will then change to green aswell.\nIn VARA HF make sure the left indicator is near the needle as in this screenshot. You can achieve this with different methods.\nChange the microphone level within Windows.\nI try to leave this setting to 80% but I sometimes have to adjust it a bit. It is good at 80% for VARA FM, but for ARDOP I often have to increase it to 100%. Change the REF level on your radio.\nOn the TX-500 I usually maintain a REF level between -12 and -19. TX signal #You may need to look into your radios manual to get the optimum value of the signal. On the TX-500 I look at the DIG meter. Get the bar nearly full and you are good to go. (The ALC meter on the TX-500 does not move a bit on my setup)\nSome nice shortcut commands for the desktop #I catch myself often doing quick looks into the device manager to verify the actual COM ports are still what they are used to be and I am also adjusting sound volumes (USB speaker \u0026amp; mic) very often.\nI created two links on my desktop that open the device manager and the extended sound options just with a double-click for me.\nDevice Manager Right click on the desktop, select New › → Link and enter devmgmt.msc. Hit Enter or click Next, name the new link appropriate and you\u0026rsquo;re done with this one. Sound control Right click on the desktop, select New › → Link and enter mmsys.cpl sounds. Hit Enter or click Next, name the new link appropriate and you\u0026rsquo;re also done with that one. The sound control shortcut may have a non-ideal symbol, to change it right click onto the new shortcut, select Properties and click on the button Other symbol\u0026hellip;. In the next dialog I choose another file (click the button Search\u0026hellip; next to the textfield). I use the symbol from C:\\Windows\\System32\\SndVol.exe \u0026ndash; open that file and you can choose between three simple symbols for this new shortcut on your desktop. Close all dialogs by clicking on OK and that\u0026rsquo;s it!\n","date":"1 June 2024","permalink":"/posts/2024/65-winlink-on-a-windows-computer-and-a-tx500/","section":"Blog","summary":"For anyone interested and mainly for my notes archive, this is the setup that I currently have set up on my Windows equipment for Winlink. I started taking notes on the \u003cstrong\u003eMicrosoft Surface 2 Go\u003c/strong\u003e and ended up installing all this on the \u003cstrong\u003eHP Elitebook 830 G6\u003c/strong\u003e (which has an \u003cstrong\u003eintegrated GPS sensor\u003c/strong\u003e).","title":"Winlink on a Windows computer and a TX-500","updated":"8 March 2026"},{"content":"I got this one specifically for my Winlink stuff so I don\u0026rsquo;t have to take my beloved ThinkPad with me.\nThe screen of the Elitebook is weird and sometimes hard to see all at once, this is probably because of the protection that HP has on its screen, so nobody can spy on my screen if they don\u0026rsquo;t look at it at a 90° angle\u0026hellip; Useless for me (like the Sure Start and similar protections).\nThese protections are one big reason that will keep me from buying an HP laptop again.\n","date":"25 May 2024","permalink":"/equipment/laptops/hp-elitebook-830/","section":"Equipment","summary":"","title":"HP Elitebook 830 G6","updated":"16 January 2026"},{"content":"This one is another good fake mail that does not look like spam at the first sight \u0026ndash; but in the end they\u0026rsquo;re all the same mails with faked recipients/senders/links etc.\nThe mail body # Mit Drei immer bestens informiert. [1][DreiInfoConsumerKletterer] Lieber Drei Kunde, Ich hoffe, es geht Ihnen gut. Ich möchte Sie über ein wichtiges Update bezüglich Ihrer Telefonnummer informieren. Wir haben kürzlich festgestellt, dass Ihre Nummer aufgrund einiger Änderungen in unserem System irrtümlicherweise deaktiviert wurde. Um Ihren Telefondienst wiederherzustellen, bitten wir Sie, diese einfachen Schritte zu befolgen: Klicken Sie auf [2]Link. Dies wird Sie zu unserer Plattform weiterleiten, wo Sie die Reaktivierung Ihrer Telefonnummer bestätigen können. Sobald Sie auf den Link geklickt und die Reaktivierung bestätigt haben, sollte Ihre Telefonnummer in Kürze wieder betriebsbereit sein. Um Ihr Telefon zu reaktivieren, klicken Sie bitte auf den folgenden Link: [3]https://www.drei.at/selfcare/Verification.do?optInKey=id8630763 Wenn Sie zusätzliche Unterstützung benötigen oder Probleme bei der Reaktivierung Ihrer Nummer haben, zögern Sie nicht. Wir danken Ihnen für Ihre Mitarbeit und Ihr Verständnis. Wir sind hier, um Ihnen so schnell wie möglich bei der Wiederherstellung Ihres Telefondienstes zu helfen. Freundliche Grüße Ihr Drei Service-Team [4][footerblue] [5]Facebook [6]Instagram [7]Twitter [8]Youtube [9]Linkedin [10]Xing [11][machtseinf] Es gelten die AGB von Hutchison Drei Austria GmbH. Details auf [12]www.drei.at, HG Wien, FN 140132b [13]Kontakt | [14]Impressum References: [1] https://www.drei.at/de/index.html [2] https://wid.chh.mybluehost.me/website_7fb0c4ce/at/1 [3] https://wid.chh.mybluehost.me/website_7fb0c4ce/at/1 [4] https://www.drei.at/webmail/de/index?attachment=2\u0026amp;fld=%2fINBOX%2fTrash\u0026amp;id=1\u0026amp;mode=html\u0026amp;task=datatable_imap_mail_download [5] https://www.facebook.com/dreioesterreich [6] https://www.instagram.com/dreioesterreich [7] https://twitter.com/dreioesterreich [8] https://www.youtube.com/dreioesterreich [9] https://www.linkedin.com/company/drei-oesterreich [10] https://www.xing.com/company/dreioesterreich [11] https://www.drei.at/webmail/de/index?attachment=2\u0026amp;fld=%2fINBOX%2fTrash\u0026amp;id=1\u0026amp;mode=html\u0026amp;task=datatable_imap_mail_download [12] http://www.drei.at/ [13] https://www.drei.at/selfcare/contact.do?utm_campaign=kontakt\u0026amp;utm_source=alle\u0026amp;utm_medium=shortlink\u0026amp;utm_content=onsite [14] https://www.drei.at/de/footernavigation/impressum/ The list of links on the bottom already gives a clue about the mail.\nThe mail body source (html) #\u0026lt;html\u0026gt; \u0026lt;head\u0026gt; \u0026lt;title\u0026gt;\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;table border=\u0026#34;0\u0026#34; cellpadding=\u0026#34;0\u0026#34; cellspacing=\u0026#34;0\u0026#34; role=\u0026#34;presentation\u0026#34; style=\u0026#34;position: relative;\u0026#34; width=\u0026#34;100%\u0026#34;\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td align=\u0026#34;center\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse;\u0026#34; valign=\u0026#34;top\u0026#34;\u0026gt; \u0026lt;table border=\u0026#34;0\u0026#34; cellpadding=\u0026#34;0\u0026#34; cellspacing=\u0026#34;0\u0026#34; class=\u0026#34;nomob\u0026#34; role=\u0026#34;presentation\u0026#34; style=\u0026#34;max-width: 660px; background: #ffffff;\u0026#34; width=\u0026#34;660\u0026#34;\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td style=\u0026#34;text-size-adjust: none; border-collapse: collapse;\u0026#34; width=\u0026#34;660\u0026#34;\u0026gt; \u0026lt;table border=\u0026#34;0\u0026#34; cellpadding=\u0026#34;0\u0026#34; cellspacing=\u0026#34;0\u0026#34; role=\u0026#34;presentation\u0026#34; width=\u0026#34;100%\u0026#34;\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td align=\u0026#34;center\u0026#34; class=\u0026#34;ph10\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse; padding: 10px 0px; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;\u0026#34; valign=\u0026#34;top\u0026#34; width=\u0026#34;660\u0026#34;\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; font-family: Arial, Helvetica, sans-serif; font-size: 10px; line-height: 14px;\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;font-family: \u0026#39;Times New Roman\u0026#39;; font-size: medium;\u0026#34;\u0026gt;Mit Drei immer bestens informiert.\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td class=\u0026#34;nomob\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse; font-size: 0px;\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td class=\u0026#34;nomob\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse; font-size: 0px;\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td align=\u0026#34;center\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse; background: #ffffff;\u0026#34; valign=\u0026#34;top\u0026#34;\u0026gt; \u0026lt;table align=\u0026#34;center\u0026#34; border=\u0026#34;0\u0026#34; cellpadding=\u0026#34;0\u0026#34; cellspacing=\u0026#34;0\u0026#34; class=\u0026#34;wrapto660px\u0026#34; role=\u0026#34;presentation\u0026#34; style=\u0026#34;width: 660px !important; max-width: 660px;\u0026#34; width=\u0026#34;100%\u0026#34;\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td align=\u0026#34;left\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse; font-size: 1px; line-height: 1px; margin: 0px; padding: 0px;\u0026#34; valign=\u0026#34;top\u0026#34;\u0026gt; \u0026lt;table border=\u0026#34;0\u0026#34; cellpadding=\u0026#34;0\u0026#34; cellspacing=\u0026#34;0\u0026#34; role=\u0026#34;presentation\u0026#34; style=\u0026#34;background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;\u0026#34; width=\u0026#34;100%\u0026#34;\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td align=\u0026#34;center\u0026#34; class=\u0026#34;wrapto100pcmax\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse;\u0026#34; valign=\u0026#34;top\u0026#34; width=\u0026#34;660\u0026#34;\u0026gt;\u0026lt;a href=\u0026#34;https://www.drei.at/de/index.html\u0026#34; rel=\u0026#34;noopener\u0026#34; style=\u0026#34;text-size-adjust: none;\u0026#34; target=\u0026#34;_blank\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;color: #000000; font-size: medium;\u0026#34;\u0026gt;\u0026lt;img data-orgsrc=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/DreiInfoConsumerKletterer.png\u0026#34; height=\u0026#34;auto\u0026#34; src=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/DreiInfoConsumerKletterer.png\u0026#34; style=\u0026#34;display: block; border: 0px; width: 660px; height: auto; max-width: 660px;\u0026#34; width=\u0026#34;660\u0026#34; /\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;table border=\u0026#34;0\u0026#34; cellpadding=\u0026#34;0\u0026#34; cellspacing=\u0026#34;0\u0026#34; role=\u0026#34;presentation\u0026#34; style=\u0026#34;background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;\u0026#34; width=\u0026#34;100%\u0026#34;\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td align=\u0026#34;center\u0026#34; class=\u0026#34;ph10\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse; padding: 20px;\u0026#34; valign=\u0026#34;top\u0026#34; width=\u0026#34;660\u0026#34;\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;font-size: medium;\u0026#34;\u0026gt;\u0026lt;span class=\u0026#34;main-copy\u0026#34; style=\u0026#34;line-height: 20px;\u0026#34;\u0026gt;Lieber Drei Kunde,\u0026lt;br /\u0026gt; \u0026lt;br /\u0026gt; Ich hoffe, es geht Ihnen gut. Ich m\u0026amp;ouml;chte Sie \u0026amp;uuml;ber ein wichtiges Update bez\u0026amp;uuml;glich Ihrer Telefonnummer informieren. Wir haben k\u0026amp;uuml;rzlich festgestellt, dass Ihre Nummer aufgrund einiger \u0026amp;Auml;nderungen in unserem System irrt\u0026amp;uuml;mlicherweise deaktiviert wurde.\u0026lt;br /\u0026gt; \u0026lt;br /\u0026gt; Um Ihren Telefondienst wiederherzustellen, bitten wir Sie, diese einfachen Schritte zu befolgen:\u0026lt;br /\u0026gt; \u0026lt;br /\u0026gt; Klicken Sie auf \u0026lt;strong\u0026gt;\u0026lt;a href=\u0026#34;https://wid.chh.mybluehost.me/website_7fb0c4ce/at/1\u0026#34;\u0026gt;Link\u0026lt;/a\u0026gt;\u0026lt;/strong\u0026gt;. Dies wird Sie zu unserer Plattform weiterleiten, wo Sie die Reaktivierung Ihrer Telefonnummer best\u0026amp;auml;tigen k\u0026amp;ouml;nnen.\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;span style=\u0026#34;font-size: medium;\u0026#34;\u0026gt;\u0026lt;span class=\u0026#34;main-copy\u0026#34; style=\u0026#34;line-height: 20px;\u0026#34;\u0026gt;Sobald Sie auf den Link geklickt und die Reaktivierung best\u0026amp;auml;tigt haben, sollte Ihre Telefonnummer in K\u0026amp;uuml;rze wieder betriebsbereit sein.\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;font-size: medium;\u0026#34;\u0026gt;\u0026lt;span class=\u0026#34;main-copy\u0026#34; style=\u0026#34;line-height: 20px;\u0026#34;\u0026gt;Um Ihr Telefon zu reaktivieren, klicken Sie bitte auf den folgenden Link:\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;font-size: medium;\u0026#34;\u0026gt;\u0026lt;a href=\u0026#34;https://wid.chh.mybluehost.me/website_7fb0c4ce/at/1\u0026#34;\u0026gt;\u0026lt;span class=\u0026#34;main-copy\u0026#34; style=\u0026#34;line-height: 20px;\u0026#34;\u0026gt;https://www.drei.at/selfcare/Verification.do?optInKey=id8630763\u0026lt;/span\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;font-size: medium;\u0026#34;\u0026gt;\u0026lt;span class=\u0026#34;main-copy\u0026#34; style=\u0026#34;line-height: 20px;\u0026#34;\u0026gt;Wenn Sie zus\u0026amp;auml;tzliche Unterst\u0026amp;uuml;tzung ben\u0026amp;ouml;tigen oder Probleme bei der Reaktivierung Ihrer Nummer haben, z\u0026amp;ouml;gern Sie nicht.\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;font-size: medium;\u0026#34;\u0026gt;\u0026lt;span class=\u0026#34;main-copy\u0026#34; style=\u0026#34;line-height: 20px;\u0026#34;\u0026gt;Wir danken Ihnen f\u0026amp;uuml;r Ihre Mitarbeit und Ihr Verst\u0026amp;auml;ndnis. Wir sind hier, um Ihnen so schnell wie m\u0026amp;ouml;glich bei der Wiederherstellung Ihres Telefondienstes zu helfen.\u0026lt;br /\u0026gt; \u0026lt;br /\u0026gt; Freundliche Gr\u0026amp;uuml;\u0026amp;szlig;e\u0026lt;br /\u0026gt; Ihr Drei Service-Team\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026lt;/div\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td align=\u0026#34;center\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse; background: #ffffff;\u0026#34; valign=\u0026#34;top\u0026#34;\u0026gt; \u0026lt;table border=\u0026#34;0\u0026#34; cellpadding=\u0026#34;0\u0026#34; cellspacing=\u0026#34;0\u0026#34; role=\u0026#34;presentation\u0026#34; style=\u0026#34;background: #e8e5e2;\u0026#34;\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td style=\u0026#34;text-size-adjust: none; border-collapse: collapse;\u0026#34; width=\u0026#34;660\u0026#34;\u0026gt; \u0026lt;table border=\u0026#34;0\u0026#34; cellpadding=\u0026#34;0\u0026#34; cellspacing=\u0026#34;0\u0026#34; role=\u0026#34;presentation\u0026#34; width=\u0026#34;100%\u0026#34;\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td align=\u0026#34;center\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse;\u0026#34; valign=\u0026#34;top\u0026#34;\u0026gt; \u0026lt;table border=\u0026#34;0\u0026#34; cellpadding=\u0026#34;0\u0026#34; cellspacing=\u0026#34;0\u0026#34; role=\u0026#34;presentation\u0026#34; style=\u0026#34;padding: 0px 15px;\u0026#34; width=\u0026#34;100%\u0026#34;\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td style=\u0026#34;text-size-adjust: none; border-collapse: collapse;\u0026#34;\u0026gt; \u0026lt;table border=\u0026#34;0\u0026#34; cellpadding=\u0026#34;0\u0026#34; cellspacing=\u0026#34;0\u0026#34; class=\u0026#34;wrapto100pc\u0026#34; role=\u0026#34;presentation\u0026#34; style=\u0026#34;border-radius: 3px;\u0026#34; width=\u0026#34;100%\u0026#34;\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td align=\u0026#34;center\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse; padding: 39px 10px 18px;\u0026#34; valign=\u0026#34;top\u0026#34;\u0026gt;\u0026lt;a href=\u0026#34;https://www.drei.at/webmail/de/index?attachment=2\u0026amp;amp;fld=%2fINBOX%2fTrash\u0026amp;amp;id=1\u0026amp;amp;mode=html\u0026amp;amp;task=datatable_imap_mail_download\u0026#34; rel=\u0026#34;noopener\u0026#34; style=\u0026#34;text-size-adjust: none;\u0026#34; target=\u0026#34;_blank\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;color: #000000;\u0026#34;\u0026gt;\u0026lt;img class=\u0026#34;follow-image\u0026#34; data-orgsrc=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/footerblue.png\u0026#34; src=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/footerblue.png\u0026#34; style=\u0026#34;display: block; border: 0px;\u0026#34; /\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;table border=\u0026#34;0\u0026#34; cellpadding=\u0026#34;0\u0026#34; cellspacing=\u0026#34;0\u0026#34; role=\u0026#34;presentation\u0026#34; style=\u0026#34;padding: 0px 15px 62px;\u0026#34; width=\u0026#34;100%\u0026#34;\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td style=\u0026#34;text-size-adjust: none; border-collapse: collapse;\u0026#34;\u0026gt; \u0026lt;table align=\u0026#34;center\u0026#34; border=\u0026#34;0\u0026#34; cellpadding=\u0026#34;0\u0026#34; cellspacing=\u0026#34;0\u0026#34; role=\u0026#34;presentation\u0026#34; style=\u0026#34;border-radius: 3px; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;\u0026#34;\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td align=\u0026#34;center\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse; padding: 0px 7.5px;\u0026#34; valign=\u0026#34;top\u0026#34;\u0026gt;\u0026lt;a href=\u0026#34;https://www.facebook.com/dreioesterreich\u0026#34; rel=\u0026#34;noopener\u0026#34; style=\u0026#34;text-size-adjust: none; height: auto; display: inline-block;\u0026#34; target=\u0026#34;_blank\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;color: #000000;\u0026#34;\u0026gt;\u0026lt;img alt=\u0026#34;Facebook\u0026#34; border=\u0026#34;none\u0026#34; class=\u0026#34;follow-icon\u0026#34; data-orgsrc=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/facebookblue.png\u0026#34; height=\u0026#34;53\u0026#34; src=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/facebookblue.png\u0026#34; style=\u0026#34;display: block; border: 0px;\u0026#34; width=\u0026#34;53\u0026#34; /\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;td align=\u0026#34;center\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse; padding: 0px 7.5px;\u0026#34; valign=\u0026#34;top\u0026#34;\u0026gt;\u0026lt;a href=\u0026#34;https://www.instagram.com/dreioesterreich\u0026#34; rel=\u0026#34;noopener\u0026#34; style=\u0026#34;text-size-adjust: none; height: auto; display: inline-block;\u0026#34; target=\u0026#34;_blank\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;color: #000000;\u0026#34;\u0026gt;\u0026lt;img alt=\u0026#34;Instagram\u0026#34; border=\u0026#34;none\u0026#34; class=\u0026#34;follow-icon\u0026#34; data-orgsrc=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/instablue.png\u0026#34; height=\u0026#34;53\u0026#34; src=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/instablue.png\u0026#34; style=\u0026#34;display: block; border: 0px;\u0026#34; width=\u0026#34;53\u0026#34; /\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;td align=\u0026#34;center\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse; padding: 0px 7.5px;\u0026#34; valign=\u0026#34;top\u0026#34;\u0026gt;\u0026lt;a href=\u0026#34;https://twitter.com/dreioesterreich\u0026#34; rel=\u0026#34;noopener\u0026#34; style=\u0026#34;text-size-adjust: none; height: auto; display: inline-block;\u0026#34; target=\u0026#34;_blank\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;color: #000000;\u0026#34;\u0026gt;\u0026lt;img alt=\u0026#34;Twitter\u0026#34; border=\u0026#34;none\u0026#34; class=\u0026#34;follow-icon\u0026#34; data-orgsrc=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/twitterblue.png\u0026#34; height=\u0026#34;53\u0026#34; src=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/twitterblue.png\u0026#34; style=\u0026#34;display: block; border: 0px;\u0026#34; width=\u0026#34;53\u0026#34; /\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;td align=\u0026#34;center\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse; padding: 0px 7.5px;\u0026#34; valign=\u0026#34;top\u0026#34;\u0026gt;\u0026lt;a href=\u0026#34;https://www.youtube.com/dreioesterreich\u0026#34; rel=\u0026#34;noopener\u0026#34; style=\u0026#34;text-size-adjust: none; height: auto; display: inline-block;\u0026#34; target=\u0026#34;_blank\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;color: #000000;\u0026#34;\u0026gt;\u0026lt;img alt=\u0026#34;Youtube\u0026#34; border=\u0026#34;none\u0026#34; class=\u0026#34;follow-icon\u0026#34; data-orgsrc=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/youtubeblue.png\u0026#34; height=\u0026#34;53\u0026#34; src=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/youtubeblue.png\u0026#34; style=\u0026#34;display: block; border: 0px;\u0026#34; width=\u0026#34;53\u0026#34; /\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;td align=\u0026#34;center\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse; padding: 0px 7.5px;\u0026#34; valign=\u0026#34;top\u0026#34;\u0026gt;\u0026lt;a href=\u0026#34;https://www.linkedin.com/company/drei-oesterreich\u0026#34; rel=\u0026#34;noopener\u0026#34; style=\u0026#34;text-size-adjust: none; height: auto; display: inline-block;\u0026#34; target=\u0026#34;_blank\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;color: #000000;\u0026#34;\u0026gt;\u0026lt;img alt=\u0026#34;Linkedin\u0026#34; border=\u0026#34;none\u0026#34; class=\u0026#34;follow-icon\u0026#34; data-orgsrc=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/linkedinblue.png\u0026#34; height=\u0026#34;53\u0026#34; src=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/linkedinblue.png\u0026#34; style=\u0026#34;display: block; border: 0px;\u0026#34; width=\u0026#34;53\u0026#34; /\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;td align=\u0026#34;center\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse; padding: 0px 7.5px;\u0026#34; valign=\u0026#34;top\u0026#34;\u0026gt;\u0026lt;a href=\u0026#34;https://www.xing.com/company/dreioesterreich\u0026#34; rel=\u0026#34;noopener\u0026#34; style=\u0026#34;text-size-adjust: none; height: auto; display: inline-block; width: 40px;\u0026#34; target=\u0026#34;_blank\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;color: #000000;\u0026#34;\u0026gt;\u0026lt;img alt=\u0026#34;Xing\u0026#34; border=\u0026#34;none\u0026#34; class=\u0026#34;follow-icon\u0026#34; data-orgsrc=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/xingblue.png\u0026#34; height=\u0026#34;53\u0026#34; src=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/xingblue.png\u0026#34; style=\u0026#34;display: block; border: 0px;\u0026#34; width=\u0026#34;53\u0026#34; /\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;table align=\u0026#34;center\u0026#34; border=\u0026#34;0\u0026#34; cellpadding=\u0026#34;0\u0026#34; cellspacing=\u0026#34;0\u0026#34; class=\u0026#34;wrapto100pc\u0026#34; role=\u0026#34;presentation\u0026#34; style=\u0026#34;border-radius: 3px; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; padding-bottom: 28px;\u0026#34;\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td align=\u0026#34;center\u0026#34; class=\u0026#34;ctatext\u0026#34; style=\u0026#34;text-size-adjust: none; border-collapse: collapse;\u0026#34; valign=\u0026#34;top\u0026#34;\u0026gt;\u0026lt;a href=\u0026#34;https://www.drei.at/webmail/de/index?attachment=2\u0026amp;amp;fld=%2fINBOX%2fTrash\u0026amp;amp;id=1\u0026amp;amp;mode=html\u0026amp;amp;task=datatable_imap_mail_download\u0026#34; rel=\u0026#34;noopener\u0026#34; style=\u0026#34;text-size-adjust: none;\u0026#34; target=\u0026#34;_blank\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;color: #000000;\u0026#34;\u0026gt;\u0026lt;img class=\u0026#34;footer-image\u0026#34; data-orgsrc=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/machtseinfach.png\u0026#34; src=\u0026#34;http://images.emlcdn.net/cdn/1001693/2135fbd9-3346-4aba-b0cd-26018ede6c72/machtseinfach.png\u0026#34; style=\u0026#34;display: block; border: 0px;\u0026#34; /\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;p class=\u0026#34;terms-and-conditions\u0026#34; style=\u0026#34;text-size-adjust: none; margin: 0px 10px; padding: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 15px;\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;font-family: \u0026#39;Times New Roman\u0026#39;; font-size: medium;\u0026#34;\u0026gt;Es gelten die AGB von Hutchison Drei Austria GmbH. Details auf\u0026amp;nbsp;\u0026lt;a href=\u0026#34;http://www.drei.at/\u0026#34; name=\u0026#34;Drei\u0026#34; rel=\u0026#34;noopener\u0026#34; style=\u0026#34;text-size-adjust: none;\u0026#34; target=\u0026#34;_blank\u0026#34;\u0026gt;www.drei.at\u0026lt;/a\u0026gt;, HG Wien, FN 140132b\u0026lt;/span\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026#34;bottom-nav-links\u0026#34; style=\u0026#34;text-size-adjust: none; padding: 0px; margin: 17px 0px 35px;\u0026#34;\u0026gt;\u0026lt;span style=\u0026#34;color: #000000;\u0026#34;\u0026gt;\u0026lt;a href=\u0026#34;https://www.drei.at/selfcare/contact.do?utm_campaign=kontakt\u0026amp;amp;utm_source=alle\u0026amp;amp;utm_medium=shortlink\u0026amp;amp;utm_content=onsite\u0026#34; rel=\u0026#34;noopener\u0026#34; style=\u0026#34;text-size-adjust: none;\u0026#34; target=\u0026#34;_blank\u0026#34;\u0026gt;Kontakt\u0026lt;/a\u0026gt;\u0026amp;nbsp;|\u0026amp;nbsp;\u0026lt;a href=\u0026#34;https://www.drei.at/de/footernavigation/impressum/\u0026#34; rel=\u0026#34;noopener\u0026#34; style=\u0026#34;text-size-adjust: none;\u0026#34; target=\u0026#34;_blank\u0026#34;\u0026gt;Impressum\u0026lt;/a\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; Some mail headers #Return-Path: \u0026lt;3serviceteam24@drei.at\u0026gt; Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by sloti44n20 (Cyrus 3.11.0-alpha0-386-g4cb8e397f9-fm-20240415.001-g4cb8e397) with LMTPA; Mon, 29 Apr 2024 05:32:26 -0400 X-Cyrus-Session-Id: sloti44n20-1714383146-1563527-2-12093189089660363855 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no (\u0026#34;Email failed DMARC policy for domain\u0026#34;) X-Spam-sender-reputation: 1000 (domain; noauth) X-Spam-score: 0.0 X-Spam-hits: BAYES_50 0.8, HTML_IMAGE_RATIO_08 0.001, HTML_MESSAGE 0.001, ME_NOAUTH 0.01, ME_SC_SENDERREP -100, ME_SENDERREP_ALLOW -4, SHORTCIRCUIT -0.0001, SPF_FAIL 0.001, SPF_HELO_PASS -0.001, LANGUAGES de, BAYES_USED user, SA_VERSION 3.4.6 X-Spam-source: IP=\u0026#39;222.227.81.166\u0026#39;, Host=\u0026#39;mta-sp-e06.jcom.zaq.ne.jp\u0026#39;, Country=\u0026#39;JP\u0026#39;, FromHeader=\u0026#39;at\u0026#39;, MailFrom=\u0026#39;at\u0026#39; X-Spam-charsets: plain=\u0026#39;utf-8\u0026#39;, html=\u0026#39;utf-8\u0026#39; X-Resolved-to: {my-mail-account} X-Delivered-to: {my-real-mail-address} X-Mail-from: 3serviceteam24@drei.at Received: from mx3 ([10.202.2.202]) by compute1.internal (LMTPProxy); Mon, 29 Apr 2024 05:32:26 -0400 Received: from mx3.messagingengine.com (localhost [127.0.0.1]) by mailmx.nyi.internal (Postfix) with ESMTP id 4FE1D19600BA for \u0026lt;{my-real-mail-address}\u0026gt;; Mon, 29 Apr 2024 05:32:26 -0400 (EDT) Received: from mailmx.nyi.internal (localhost [127.0.0.1]) by mx3.messagingengine.com (Authentication Milter) with ESMTP id 85CCEACF945.3D7B519600AE; Mon, 29 Apr 2024 05:32:26 -0400 ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=fm3; t= 1714383146; b=NPrVm6ZPLeSZvNVXB5VH+DGhxZXOt/uuITUES+D/cHZDn5V4/J ysZe5nOrK/SzTnf0DQJJyB+KY+6Po0iChnS4lJMVnDlT+Fsj0tHCsTJY267yd1rr fRpM8GtoztzVR7ncPgOjCcjYZfl07gdK2jzUTr8x4MUonsoQLaauzHyc+wQMQNw2 LyWftCK4jJhId7sPzjjdro6D5LB0yQSEeFJsr67ziA3YtLvIPr41hW1QsKtDspuw WJmhcWc+Rqd95admdtIyNFpdQH5M5hX4vph5/kL3/KpMg7atX+CSo55+O2MXufm/ g929r+iT++JL5653hpEZK+N5c66h4dG3xoiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=message-id:mime-version:from:to:subject 📅content-type; s=fm3; t=1714383146; bh=ni8L8QRbTLgYTToOyOoV KdbZKcUhLPS9kMfX3IVjuMg=; b=UEu8RBqgakH+Ht/jHWF4NEMYKXiX+wk02qn0 xrHfLZhS305RLQCXOZPxc4Y2iUGLRQcaFISGGVopjcxM5vn5Buzi93rdwmOFPcav gkEJt12U/hQ94wzD+ukuARr5X0QcHY4Jhzecsk1gybMproDFdshRqqA/4HR1d3cv 9mTJCf/b64y5JJocAMcfBnKc1PO6PLVQ8Gcvz3nJVqKH7n4VEMKIX9vjbgrmo20v GuKI34vYPiNvjj9Y7VXWfCMHMtDn3UdPv0qLb997sDjQmV331Vzuom6eS9WD/Dcv xKtAG7dZMO2xndQorcZKzp6e3fZTGVb379cnJHgV1AoNcMljKw== ARC-Authentication-Results: i=1; mx3.messagingengine.com; x-csa=none; x-me-sender=none; x-ptr=pass smtp.helo=mta-sp-e06.jcom.zaq.ne.jp policy.ptr=mta-sp-e06.jcom.zaq.ne.jp; bimi=skipped (DMARC did not pass); arc=none (no signatures found); dkim=none (no signatures found); dmarc=fail policy.published-domain-policy=none policy.applied-disposition=none policy.evaluated-disposition=none policy.arc-aware-result=fail (p=none,d=none,d.eval=none,arc_aware_result=fail) policy.policy-from=p header.from=drei.at; iprev=pass smtp.remote-ip=222.227.81.166 (mta-sp-e06.jcom.zaq.ne.jp); spf=fail smtp.mailfrom=3serviceteam24@drei.at smtp.helo=mta-sp-e06.jcom.zaq.ne.jp X-ME-Authentication-Results: mx3.messagingengine.com; x-aligned-from=pass (Address match); x-return-mx=pass header.domain=drei.at policy.is_org=yes (MX Records found: mail.drei.at); x-return-mx=pass smtp.domain=drei.at policy.is_org=yes (MX Records found: mail.drei.at); x-tls=pass smtp.version=TLSv1.3 smtp.cipher=TLS_AES_256_GCM_SHA384 smtp.bits=256/256; x-vs=commercial:mce score=17 state=11 Authentication-Results: mx3.messagingengine.com; x-csa=none; x-me-sender=none; x-ptr=pass smtp.helo=mta-sp-e06.jcom.zaq.ne.jp policy.ptr=mta-sp-e06.jcom.zaq.ne.jp Authentication-Results: mx3.messagingengine.com; bimi=skipped (DMARC did not pass) Authentication-Results: mx3.messagingengine.com; arc=none (no signatures found) Authentication-Results: mx3.messagingengine.com; dkim=none (no signatures found); dmarc=fail policy.published-domain-policy=none policy.applied-disposition=none policy.evaluated-disposition=none policy.arc-aware-result=fail (p=none,d=none,d.eval=none,arc_aware_result=fail) policy.policy-from=p header.from=drei.at; iprev=pass smtp.remote-ip=222.227.81.166 (mta-sp-e06.jcom.zaq.ne.jp); spf=fail smtp.mailfrom=3serviceteam24@drei.at smtp.helo=mta-sp-e06.jcom.zaq.ne.jp X-ME-VSCause: gggruggvucftvghtrhhoucdtuddrgedvledrvdduuddgudehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucdnofetkffnkffpifculd dujedmnecujfgurhepkfgghffuffgtsegrtdfttfdttdejnecuhfhrohhmpeefufgvrhhv ihgtvgfvvggrmhcuoeefshgvrhhvihgtvghtvggrmhdvgeesughrvghirdgrtheqnecugg ftrfgrthhtvghrnhepfedttefffeeugeehvddtgeelheetleeftddtveetfeeulefhjedt geehudetveetnecuffhomhgrihhnpegurhgvihdrrghtpdhmhigslhhuvghhohhsthdrmh gvpdhfrggtvggsohhokhdrtghomhdpihhnshhtrghgrhgrmhdrtghomhdpthifihhtthgv rhdrtghomhdphihouhhtuhgsvgdrtghomhdplhhinhhkvgguihhnrdgtohhmpdigihhngh drtghomhenucfkphepvddvvddrvddvjedrkedurdduieeinecuvehluhhsthgvrhfuihii vgeptdenucfrrghrrghmpehinhgvthepvddvvddrvddvjedrkedurdduieeipdhhvghloh epmhhtrgdqshhpqdgvtdeirdhjtghomhdriigrqhdrnhgvrdhjphdpmhgrihhlfhhrohhm peeofehsvghrvhhitggvthgvrghmvdegsegurhgvihdrrghtqedpnhgspghrtghpthhtoh epuddprhgtphhtthhopeeoughomhhinhhitgesthhmshhnrdgrtheq X-ME-VSScore: 17 X-ME-VSCategory: commercial:mce X-ME-CSA: none X-ME-Received: \u0026lt;xmx:KmkvZsFNrrBAcycsjZGHfoT3_Ij4M2mIACnaOdMR5qMdvjO0EiKk7g\u0026gt; Received-SPF: fail (drei.at: Sender is not authorized by default to use \u0026#39;3serviceteam24@drei.at\u0026#39; in \u0026#39;mfrom\u0026#39; identity (mechanism \u0026#39;-all\u0026#39; matched)) receiver=mx3.messagingengine.com; identity=mailfrom; envelope-from=\u0026#34;3serviceteam24@drei.at\u0026#34;; helo=mta-sp-e06.jcom.zaq.ne.jp; client-ip=222.227.81.166 Received: from mta-sp-e06.jcom.zaq.ne.jp (mta-sp-e06.jcom.zaq.ne.jp [222.227.81.166]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx3.messagingengine.com (Postfix) with ESMTPS id 3D7B519600AE for \u0026lt;{my-real-mail-address}\u0026gt;; Mon, 29 Apr 2024 05:32:24 -0400 (EDT) Received: from mta-or-e02.jcom.zaq.ne.jp by osmta0018-jc.im.kddi.ne.jp with ESMTP id \u0026lt;20240429093221436.SZEY.122160.mta-or-e02.jcom.zaq.ne.jp@mta-sp-e06.jcom.zaq.ne.jp\u0026gt;; Mon, 29 Apr 2024 18:32:21 +0900 Received: from [10.0.0.5] by omta0018-jc.im.kddi.ne.jp with SMTP id \u0026lt;20240429093220189.NMLB.117143.[10.0.0.5]@mta-or-e02.jcom.zaq.ne.jp\u0026gt;; Mon, 29 Apr 2024 18:32:20 +0900 Message-Id: \u0026lt;2T3NM7B-CNQT-PAAQ-1X6G-7N1FUVMMY2K@drei.at\u0026gt; Mime-Version: 1.0 From: 3ServiceTeam \u0026lt;3serviceteam24@drei.at\u0026gt; To: Undisclosed-Recipients:; Subject: RufnummerDeaktivierung. Date: Mon, 29 Apr 2024 09:32:20 GMT Content-Type: multipart/alternative; Boundary=\u0026#34;--=BOUNDARY_429932_FDVJ_NVIO_WXTI_WHEC\u0026#34; X-TUID: NXL/rD0xTYmM Content-Length: 17904 \u0026ldquo;Undisclosed-Recipients\u0026rdquo; is used when the sender does not provide a recipient in the \u0026ldquo;To:\u0026rdquo; field but instead uses the \u0026ldquo;Bcc:\u0026rdquo; field.\nThe line X-Delivered-to shows the real recipient though.\nNotes #The email went through some japanese network when it finally hit the mailservers of my mail provider.\nAlways check the destination of links in HTML mails! The link on line 78 for example looks like (re-formatted):\n\u0026lt;div style=\u0026#34;text-size-adjust: none; text-align: left;\u0026#34;\u0026gt; \u0026lt;span style=\u0026#34;font-size: medium;\u0026#34;\u0026gt; \u0026lt;a href=\u0026#34;https://wid.chh.mybluehost.me/website_7fb0c4ce/at/1\u0026#34;\u0026gt; \u0026lt;span class=\u0026#34;main-copy\u0026#34; style=\u0026#34;line-height: 20px;\u0026#34;\u0026gt; https://www.drei.at/selfcare/Verification.do?optInKey=id8630763 \u0026lt;/span\u0026gt; \u0026lt;/a\u0026gt; \u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; Also look at the Subject \u0026ndash; it looks a bit disturbing:\nSubject: RufnummerDeaktivierung. ","date":"29 April 2024","permalink":"/spam/2024-04-29-another-good-fake/","section":"Mail spam I received","summary":"","title":"Another good fake","updated":"11 January 2025"},{"content":"Out of curiosity I began another \u0026ldquo;research-session\u0026rdquo; because it is really time to get that Winlink back on my Linux laptop (I used OpenBSD on this machine for some months now and I haven\u0026rsquo;t got a single chance to get wine onto that) \u0026ndash; I will stay Linux for a while I guess.\nI\u0026rsquo;ve been using a Surface 2 Go for some time (well, a really short time) but ditched it again because I wasn\u0026rsquo;t really satisfied with its performance.\nThere are several different devices and software solutions to send winlink messages and I won\u0026rsquo;t cover all of them. The following examples exist because I own the necessary devices and I already have the software to work with them.\nI would choose the Digirig as my favourite device because it just works every time and it also provides a USB soundcard to the computer (like the SignaLink USB).\nDigirig #The Digirig gets controlled with rigctld \u0026ndash; I use different models for the HF and the FM rig \u0026ndash; but the rig configuration is the same for both:\n\u0026#34;hamlib_rigs\u0026#34;: { \u0026#34;my_rig\u0026#34;: { \u0026#34;address\u0026#34;: \u0026#34;127.0.0.1:4532\u0026#34;, \u0026#34;network\u0026#34;: \u0026#34;tcp\u0026#34; } }, That part of the pat configuration makes sure that pat can transmit with the radio.\nPacket radio #Using AX.25+agwpe within pat in combination with Direwolf \u0026ndash; but this combination felt a bit slow (which might only be my subjective opinion).\nSomeone might want to tune direwolf for better throughput or more reliable connections, but I\u0026rsquo;m not a direwolf expert and I rarely use it in favour of VARA FM.\nBesides that, I never used packetradio on HF yet. (300bps)\n\u0026#34;ax25\u0026#34;: { \u0026#34;engine\u0026#34;: \u0026#34;linux\u0026#34;, \u0026#34;rig\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;beacon\u0026#34;: { \u0026#34;every\u0026#34;: 3600, \u0026#34;message\u0026#34;: \u0026#34;Winlink P2P\u0026#34;, \u0026#34;destination\u0026#34;: \u0026#34;IDENT\u0026#34; } \u0026#34;agwpe\u0026#34;: { \u0026#34;addr\u0026#34;: \u0026#34;127.0.0.1:8000\u0026#34;, \u0026#34;radio_port\u0026#34;: 0 }, The agwpe section is used by Direwolf:\n$ direwolf -c /etc/direwolf/direwolf.conf -p Dire Wolf version 1.7 Includes optional support for: gpsd hamlib cm108-ptt dns-sd Reading config file /etc/direwolf/direwolf.conf Audio device for both receive and transmit: plughw:1,0 (channel 0) Channel 0: 1200 baud, AFSK 1200 \u0026amp; 2200 Hz, A+, 44100 sample rate. Ready to accept AGW client application 0 on port 8000 ... Ready to accept KISS TCP client application 0 on port 8001 ... DNS-SD: Avahi: Failed to create Avahi client: Daemon not running Virtual KISS TNC is available on /dev/pts/8 Created symlink /tmp/kisstnc -\u0026gt; /dev/pts/8 The direwolf.conf file looks like this (comments removed):\nADEVICE plughw:1,0 CHANNEL 0 MYCALL OE7DRT MODEM 1200 PTT /dev/ttyUSB0 RTS DTR AGWPORT 8000 KISSPORT 8001 IGTXLIMIT 6 10 Direwolf will warn you if the input audio level is way off; I adjust them with the program alsamixer (F6 to select the USB soundcard, then F5 to list all devices, disable Auto Gain Control with m (mute)).\nDirewolf handles the PTT via the RTS line of the Digirig.\nVARA FM #This section has been updated on 2 May 2025.\nI have already asked the author of VARA-FM for some changes regarding the selection of the COM ports used for PTT to make this a bit more user-friendly but unfortunately the used comport.ocx library is limited to 16 ports.\nI would suggest Option #2:\nusing a COM port within VARA-FM and changing the assignment of COM ports within the wine windows registry.\nPTT via rigctld #The corresponding configuratoin in the pat config file:\n\u0026#34;varafm\u0026#34;: { \u0026#34;addr\u0026#34;: \u0026#34;127.0.0.1:8300\u0026#34;, \u0026#34;bandwidth\u0026#34;: 0, \u0026#34;rig\u0026#34;: \u0026#34;my_rig\u0026#34;, \u0026#34;ptt_ctrl\u0026#34;: true }, Start rigctld with a Dummy model - just to use the USB port of the Digirig for PTT:\n$ rigctld -m 1 -p /dev/ttyUSB0 -P RTS -s 9600 -vvvv I start VARA FM by running a small script called varafm.sh:\n#!/usr/bin/sh # Start VARA via wine WINEPREFIX=/home/dominic/.wine-winlink wine \u0026#34;C:\\\\VARA FM\\\\VARAFM.exe\u0026#34; In VARA FM set the USB soundcard, adjust the volume in alsamixer and on your radio, set PTT to VOX \u0026ndash; I tried to use COM1 but that crashed wine several times (that is why I set up rigctl before).\nIf you need to stop rigctl: you can usually do that with CTRL + C but this might not work. So either stop the running pat process by hitting CTRL + C in the \u0026ldquo;pat terminal\u0026rdquo; or by killing rigctld with kill $(pgrep rigctld).\nThis method may not work 100% reliable! I\u0026rsquo;d suggest using the next method by using a specific COM port for PTT. PTT via COM port directly with VARA-FM #⇒ Replacing the COM port in the VARA-FM settings file #In this case our pat config part for VARA-FM looks like this:\n\u0026#34;varafm\u0026#34;: { \u0026#34;addr\u0026#34;: \u0026#34;localhost:8300\u0026#34;, \u0026#34;bandwidth\u0026#34;: 0, \u0026#34;rig\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;ptt_ctrl\u0026#34;: false }, But I start VARA-FM with a script that will change the PTTPort to the first USB device (that is assigned by wine usually to COM33).\n#!/usr/bin/sh # Start VARA via wine # lastmod: 2025-01-24 # # Author: Dominic Reich (OE7DRT) # VARA itself can only select COM ports up to COM16, so we manually # edit the config file so it gets to use the first USB device (/dev/ttyUSB0) sed -i \u0026#39;/^PTTPort=/s/=.*$/=COM33/\u0026#39; ~/.wine-winlink/drive_c/VARA\\ FM/VARAFM.ini WINEPREFIX=/home/dominic/.wine-winlink wine \u0026#34;C:\\\\VARA FM\\\\VARAFM.exe\u0026#34; \u0026amp; ⇒ Defining a lower numbered COM port assignment within wine itself #This way we could use COM1 or other low-numbered COM ports within VARA-FM just by selecting them in the PTT settings dialog.\nWe need to start the windows registry editor in our WINEPREFIX.\n$ WINEPREFIX=/home/dominic/.wine-winlink wine regedit We then move to HKEY_LOCAL_MACHINE\\Software\\Wine\\Ports and create a new string entry with the name COM1. The value of that newly created string will be /dev/ttyUSB0 (or whatever name your USB device has).\nClose the registry editor and start VARA-FM, now open the PTT settings dialog and select COM and choose the right COM port in the drop-down menu (COM1).\nAdopt COM ports and device names (/dev/ttyUSB0) to your specific use case!\nVARA HF #Back to the TX-500, the pat configuration looks like:\n\u0026#34;varahf\u0026#34;: { \u0026#34;addr\u0026#34;: \u0026#34;127.0.0.1:8300\u0026#34;, \u0026#34;bandwidth\u0026#34;: 2300, \u0026#34;rig\u0026#34;: \u0026#34;my_rig\u0026#34;, \u0026#34;ptt_ctrl\u0026#34;: true }, I start rigctld like:\n$ rigctld -m 2050 -r /dev/ttyUSB0 -d /dev/ttyUSB0 -p /dev/ttyUSB0 -P RTS -s 9600 -vvv This is for the CAT protocol Lab599. If you use the older implementation (Kenwood TS-2000) start rigctl with model 2014:\n$ rigctld -m 2014 -r /dev/ttyUSB0 -d /dev/ttyUSB0 -p /dev/ttyUSB0 -P RTS -s 9600 -vvv Mobilinkd # The Mobilinkd TNC4 is a KISS TNC and does not provide a USB soundcard \u0026ndash; I only use the Mobilinkd in conjunction with packet radio. Winlink #I will use AX.25+linux in pat with the TNC4 paired via Bluetooth.\nFirst of all, power on the TNC4 and pair it \u0026ndash; I use blueman-manager for this.\nThen we need the serial port \u0026ndash; right click on TNC4 Mobilinkd and select Connect with Serial port\nThat will create a serial port at /dev/rfcomm0.\nYou can also create rfcomm0 in the terminal (you need the package extra/bluez-deprecated-tools for this):\n$ hcitool scan Scanning ... 34:81:F4:AA:89:4F\tTNC4 Mobilinkd $ sudo rfcomm connect 0 34:81:F4:AA:89:4F Connected /dev/rfcomm0 to 34:81:F4:AA:89:4F on channel 1 Press CTRL-C for hangup Leave that terminal window open, if you are finished with your operation hit CTRL+C to disconnect the serial port.\n$ hcitool scan Scanning ... 34:81:F4:AA:89:4F\tTNC4 Mobilinkd $ sudo rfcomm bind 0 34:81:F4:AA:89:4F You can work within this terminal but you have to release the port when you are finished.\n$ sudo rfcomm release 0 In order to use it in pat, we need to use kissattach on that serial device.\nFirst we need to setup an AX.25 port called wl2k in /etc/ax25/axports:\n# /etc/ax25/axports # # The format of this file is: # # name callsign speed paclen window description # #1\tOH2BNS-1\t1200\t255\t2\t144.675 MHz (1200 bps) #2\tOH2BNS-9\t38400\t255\t7\tTNOS/Linux (38400 bps) wl2k OE7DRT 1200 255 7 Winlink This needs also some configuration work in the pat configuration:\n\u0026#34;ax25_linux\u0026#34;: { \u0026#34;port\u0026#34;: \u0026#34;wl2k\u0026#34; }, \u0026#34;serial-tnc\u0026#34;: { \u0026#34;path\u0026#34;: \u0026#34;/dev/rfcomm0\u0026#34;, \u0026#34;serial_baud\u0026#34;: 9600, \u0026#34;hbaud\u0026#34;: 1200, \u0026#34;type\u0026#34;: \u0026#34;Kenwood\u0026#34;, \u0026#34;rig\u0026#34;: \u0026#34;\u0026#34; }, Now we can attach a KISS interface to the serial port:\n$ sudo kissattach /dev/rfcomm0 wl2k AX.25 port wl2k bound to device ax0 Select your PacketRadio Gateway (CALLSIGN-10 usually) and connect using AX.25+linux.\nTo de-attach the KISS interface we need to kill the process:\n$ sudo kill $(pgrep kissattach) or\n$ sudo pkill kissattach APRS with Xastir #Find the TNC4:\n$ hcitool scan Scanning ... 34:81:F4:AA:89:4F\tTNC4 Mobilinkd Create the serial port:\n$ sudo rfcomm bind 0 34:81:F4:AA:89:4F We use /dev/rfcomm0 in Xastir.\nTo disconnect the device:\n$ sudo rfcomm release 0 SignaLink USB #I haven\u0026rsquo;t used this now for a while, but I wanted to include this in this list, as it provides a USB soundcard to the computer just like the Digirig does \u0026ndash; but it does not provide a serial interface to control the PTT.\nPacket radio #Start direwolf (using the same configuration as with the Digirig), it will complain about not finding /dev/ttyUSB0 for PTT control. I don\u0026rsquo;t use this that often and I don\u0026rsquo;t use another USB device at the same time so I don\u0026rsquo;t care about this. If you have another device connected as /dev/ttyUSB0 you should probably remove its reference from the direwolf configuration file.\nAs mode I select AX.25+agwpe and I set the output volume of the PCM2906C Audio CODEC to 100% \u0026ndash; the SignaLink USB will now control the PTT.\nVARA FM #Start VARA FM (I use my script mentioned above) and select the proper sound card. The input volume level can be adjusted with the volume knob on the radio and the RX knob on the SignaLink USB. The output volume level can be checked and adjusted with the tune function withing the Soundcard menu from within VARA FM. You may also try the Auto-tune function.\nVARA HF #I never tested this because I have no cable for the TX-500 and the SignaLink USB, but as the Signalink only provides a soundcard you have to add another USB cable for CAT control of the radio. You then start rigctld with the proper values for that specific radio.\nThat is the reason for the Digirig that combines these two functions in one device. Some systemd unit-file examples #Put them into $HOME/.config/systemd/user. I created them at the beginning of my \u0026ldquo;Linux Winlink journey\u0026rdquo; but actually I only let pat start the webgui at boot - the other stuff I start with scripts or I search the command history (autocomplete) in my shell.\nI don\u0026rsquo;t even let pat listen to something because this is my main laptop and I like the services started in a terminal window.\npat #[Unit] Description=\u0026#34;pat winlink\u0026#34; After=network.target rigctld.service ardopc.service Wants=rigctld.service ardopc.service [Service] Type=simple ExecStart=/home/dominic/bin/pat --listen \u0026#34;ardop,telnet\u0026#34; http TimeoutSec=10 [Install] WantedBy=default.target rigctld #[Unit] Description=\u0026#34;rigctld for TX-500 using Digirig\u0026#34; After=network.target Before=pat.service ardopc.service [Service] Type=simple ; -m 2050 for Lab599 TX-500 CAT protocol ; ExecStart=/usr/bin/rigctld -m 2050 -r /dev/ttyUSB0 -p /dev/ttyUSB0 -P RTS -s 9600 -vvvv ; -m 2014 for Kenwood TS-2000 CAT protocol ; ExecStart=/usr/bin/rigctld -m 2014 -r /dev/ttyUSB0 -p /dev/ttyUSB0 -P RTS -s 9600 -vvvv ExecStart=/usr/bin/rigctld -m 2014 -r /dev/ttyUSB0 -d /dev/ttyUSB0 -p /dev/ttyUSB0 -P RTS -s 9600 -vvvv TimeoutSec=10 [Install] WantedBy=default.target You can change the used protocol (Kenwood TS-2000 or Lab599 TX-500 for CAT control within the menu on the TX-500 (last menu setting)).\nardopc #[Unit] Description=\u0026#34;ardopc for TX-500 using Digirig\u0026#34; After=network.target Before=pat.service [Service] Type=simple ; ExecStart=/home/dominic/bin/ardopc 8515 hw:1,0 hw:1,0 -c /dev/ttyUSB0:9600 -p /dev/ttyUSB0:9600 ExecStart=/home/dominic/bin/ardopc 8515 plughw:1,0 plughw:1,0 TimeoutSec=10 [Install] WantedBy=default.target Maybe hw:… works better, but I had less trouble when using plughw:….\nDecoding other stations #APRS #With direwolf #This also sends a beacon and the received stations to APRS-IS. You can watch it on https://aprs.fi.\n$ rtl_fm -M fm -f 144.8M -p 36 -s 24000 -g 42 - | direwolf -c sdr-1200bps.conf -r 24000 -D 1 -B 1200 - The direwolf configuration:\nACHANNELS 1 ADEVICE null null CHANNEL 0 MYCALL {callsign} IGLOGIN {callsign} {passcode} IGSERVER rotate.aprs2.net MODEM 1200 AGWPORT 8000 KISSPORT 8001 PBEACON sendto=IG delay=0:30 every=30:00 symbol=\u0026#34;igate\u0026#34; overlay=R lat=X long=Y alt=in_meter comment=\u0026#34;144.8MHz Receive-only gateway AFSK 1200bps\u0026#34; IGTXLIMIT 6 10 With multimon-ng #$ rtl_fm -f 144.8M -g 42 -s 22050 -l 20 - | multimon-ng -t raw -a AFSK1200 - With sdrangel #Add a channel and select Packet Demoulator.\nOnce packet gets demodulated, add a feature and select APRS:\nThe APRS feature windows let you connect to APRS-IS (top right of the APRS window).\nYou can also add another feature called Map to display the received APRS packets on a map.\nPacket radio #With direwolf #$ rtl_fm -f 144.950M -M fm -s 200000 -r 32000 -g 35 | direwolf -n 1 -r 32000 -b 16 -t 0 - $ rtl_fm -M fm -f 144.950M -s 22050 | direwolf -n 1 -r 22050 -b 16 - With sdrangel #Add a channel and select Packet Demoulator.\nA quick connection try at home (the gateway is out of reach so we don\u0026rsquo;t get an answer back) VARA HF #We can only decode with VARA HF in monitor mode. It is possible that we can\u0026rsquo;t decode anything.\nPOCSAG #With multimon-ng #$ rtl_fm -M fm -f 438.025M -s 22050 | multimon-ng -t raw -a POCSAG512 -a POCSAG1200 -a POCSAG2400 -a FLEX -f alpha - With sdrangel # Set the frequency to 438.025 MHz (in Austria) and add a channel (pink mark box). Select Pager Demodulator and start decoding (click the Play button).\nThat will decode the set POCSAG modulation (defaults to 1200 baud).\nClick the image to enlarge ","date":"30 March 2024","permalink":"/posts/2024/64-packet-radio-vara-mobilinkd-and-digirig-on-linux/","section":"Blog","summary":"Some basic configuration of my HF and VHF/UHF rigs to participate in the Winlink world\u0026hellip;","title":"Packet radio, VARA (FM+HF), Mobilinkd, Digirig and the SignaLink USB on Linux","updated":"2 May 2025"},{"content":"","date":null,"permalink":"/tags/signalink/","section":"Tags","summary":"","title":"Signalink","updated":null},{"content":"FGM-Fiberglasmast #10m fiberglass mast\nI use this mainly at home\u0026ndash;I do not always pull it up to it\u0026rsquo;s full height.\nhttps://www.funkelektronik.at/shop/fgm-fiberglasmast-4m-12m-71754?category=115#attr=725\nTactical 7000hds #compact heavy-duty 7 m (23 ft) mast\nThe newest mast in my \u0026ldquo;collection\u0026rdquo;. Optimal height for the Bandhopper type of antennas.\nhttps://www.sotabeams.co.uk/tactical-7000hds-compact-heavy-duty-7-m-23-ft-mast/\nTactical mini #Compact ultra-portable 6 m (19.6 ft) mast\nI never used it as much as I planned to.\nhttps://www.sotabeams.co.uk/tactical-mini-compact-ultra-portable-6-m-19-6-ft-mast/\nCarbon-6 ultra-light #6 m (19.6 ft) mast\nIt is very leightweight. Maybe a little bit too lightweight for my taste.\nhttps://www.sotabeams.co.uk/carbon-6-ultra-light-6-m-19-6-ft-mast/\n","date":"17 March 2024","permalink":"/equipment/radio-stuff/accessories/masts/","section":"Equipment","summary":"","title":"Antenna masts","updated":"14 March 2026"},{"content":"Comparison # Name ∅ [mm] Velocity Impedance [Ω] Lenght [m] Loss [dB] Loss/100m [dB] Weight/m [kg] H-155 5.50 0.80 50.44 10.18 0.329 3.232 0.38 RG-174 2.79 0.66 50.70 6.03 0.775 12.850 0.01 RG-316 2.59 0.69 49.45 5.15 0.568 11.025 0.01 Measurements have been made with a NanoVNA-H (HW version 3.4) version 1.2.19 (Build time: Jan 31 2023 - 16:06:06) at 14.020 MHz.\nWhat cable to use? #H-155 is my choice at home or if the added weight is not a problem. Whenever I try to keep my pack as minimal as possible I\u0026rsquo;d choose the RG-316 next and the RG-174 whenever I need more coax but want to keep the weight minimal.\n","date":"2 March 2024","permalink":"/equipment/radio-stuff/accessories/coax-cables/","section":"Equipment","summary":"A quick comparison of the three coax types that I use.","title":"Coax Cables","updated":"7 March 2026"},{"content":"Let\u0026rsquo;s go a little bit back in time, shall we? Some day in 2005ish. We don\u0026rsquo;t use USB sticks or SSDs to backup our data, we still store most of our shit on CD-ROMs or even DVD-RWs (or ROMS). Whatever.\nWhat I actually want to say: let\u0026rsquo;s backup some (or all) of my old DVD movies. I have a box full of DVSs in my basement and I wanted to push them all to my homeserver \u0026ndash; so I could watch them on the big TV screen because I don\u0026rsquo;t have a DVD player (or similar) any more.\nBut music and video industry did not make it easy for us. They added super-duper-fancy copy-protection to their DVDs because people cloned them and gave them to other people these days.\nAnyone still remember these tools, like CloneCD, ClonyXXL, Alcohol120% etc. Some also let you emulate your cloned files so you did not have to let them in your CD-ROM drive. That was quite handy when you played computer games, because these games required you to let the CD-ROM/DVD in your drive at all time (which was sometimes annoying because of the spinnning disk).\nBut the actual topic is the cloning of these old DVDs. I started today, and got copied about 6 DVDs without problems and then: \u0026ldquo;Kiss kiss bang bang\u0026rdquo; \u0026ndash; damn, what is that? The DVD drive went like crazy and the ripping software (I use Handbrake in this case) was like dead.\nI already installed the package libdvdcss at that point, the first DVDs went just fine without it. libdvdcss lets you read copy-protected DVDs. But still, Handbrake did not like it either.\nIt is dvdbackups turn now. I cloned the main movie to a local directory and told Handbrake to open that folder then. It worked! But:\nThere was no movie with 1h or 2h play time. There were 5 20 minutes movies with 2 audio streams (english, german) \u0026ndash; the first small movie had the german audio track as first stream, the other had the german track as second stream.\nSo here is what I did: rip all of them separately and concatenate them later with ffmpeg into one big file. That sucked because I copied them with both audio tracks and when I put them together later, the audio streams were swapping in the middle of the video \u0026ndash; so I ripped them only with one audio stream, the german one \u0026ndash; which I identified before with mpv.\nWhat can we do on the command line #DVD with no copy-protection #Mount the DVD to a folder\n$ mount mnt/dvd That is easy, because I made the following entry in my /etc/fstab file:\n/dev/cdrom /home/dominic/mnt/dvd auto ro,user,noauto,unhide 0 0 Open Handbrake and select the dvd folder as source. There is usually a looong chapter, select it and configure the output format to the desired format, add or modify the audio tracks and maybe the subtitles and you\u0026rsquo;re good to go.\nDVD with copy-protection #Most of the time, Handbrake will not respond or feel like hanging\u0026hellip;\nClone the main title of the DVD to another directory on a local filesystem.\n$ dvdbackup -i /dev/sr0 -F -v -o OutputFolder Select OutputFolder as your source in Handbrake.\nYou may have to rip multiple small movies, save them to some directory. Once finished, open that directory in a terminal window and put them together.\n$ ffmpeg -i VTS_03_1.mp4 -i VTS_03_2.mp4 -i VTS_03_3.mp4 -i VTS_03_4.mp4 \\ -filter_complex \u0026#34;[0:v][0:a][1:v][1:a][2:v][2:a][3:v][3:a]concat=n=4:v=1:a=1\u0026#34; OutputMovie.mp4 I had to do this with a 5-parts movie:\n$ ffmpeg -i fin_1.mp4 -i fin_2.mp4 -i fin_3.mp4 -i fin_4.mp4 -i fin_5.mp4 \\ -filter_complex \u0026#34;[0:v][0:a][1:v][1:a][2:v][2:a][3:v][3:a][4:v][4:a]concat=n=5:v=1:a=1\u0026#34; \\ -vsync vfr Kiss.Kiss.Bang.Bang.2006.DVDRip.de.mp4 They say, you should use -vsync vfr when the framerate of the individual parts is way off.\nEnd result #Now, that I ripped about 40 DVDs, I\u0026rsquo;m glad that it\u0026rsquo;s over\u0026hellip;\nI had to skip about 8 other DVDs because I wasn\u0026rsquo;t able to read them \u0026ndash; having the DVD drive spinning up until it stops and begins again with spinning up until it stops\u0026hellip;\nCrazy copy-protection I guess. I will rip them the old way, maybe a video capture card will help.\nWhat to do with bought videos on Amazon Prime or Youtube etc.?\nWhat might work: having OBS studio that records off a virtual screen on which the pop-out player of Firefox runs in fullscreen mode. But: that will need some more investigation \u0026ndash; I\u0026rsquo;m pretty sure those bastards will have some anti-download clauses in their license agreements.\nFor the sake of completeness: I\u0026rsquo;m using miniDLNA in my network. It feels like three times more responsive than my old Synology DS918+ (yes, it runs on way better hardware).\n","date":"8 February 2024","permalink":"/posts/2024/63-moving-my-dvds-to-the-media-server/","section":"Blog","summary":"My homeserver serves my old video files via DLNA. I decided to dump all my DVDs to the video share.","title":"Moving my DVDs to the media server","updated":"29 September 2024"},{"content":"Installation of Archlinux #I usually setup any Raspberry Pi without screen and keyboard but I make use of the serial console.\nThis procedure is taken from archlinuxarm.org \u0026ndash; a more detailed tutorial is shown there.\nI haven\u0026rsquo;t changed a thing of the initial configuration \u0026ndash; the serial console works just out of the box Preparations (microSD card) #Partition the microSD card on your PC or laptop.\n$ sudo fdisk /dev/sda Device Boot Start End Sectors Size Id Type /dev/sda1 2048 411647 409600 200M c W95 FAT32 (LBA) /dev/sda2 411648 15759359 15347712 7.3G 83 Linux Format filesystems.\n$ sudo mkfs.vfat /dev/sda1 $ sudo mkfs.ext4 /dev/sda2 I am curerntly in ~/mnt.\n$ mkdir boot root $ sudo mount /dev/sda1 boot $ sudo mount /dev/sda2 root $ wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-armv7-latest.tar.gz $ sudo bsdtar -xpf ArchLinuxARM-rpi-armv7-latest.tar.gz -C root $ sync $ sudo mv root/boot/* boot/ $ sudo umount boot root So, place the microSD card in the Raspberry Pi and boot it up (with the serial console connected).\nFirst start #There are the following two users pre-defined:\nUsername Password root root alarm alarm I prefer my username as dominic, so I changed it:\n# usermod -l dominic -d /home/dominic -m alarm # groupmod -n dominic alarm The user alarm may come from ArchLinux ARM. So the first real thing is upgrading the system. We start as this:\n# pacman-key --init # pacman-key --populate archlinuxarm # pacman -Syu Some general system administration tasks, such as timezone setup network setup etc\u0026hellip;\nI\u0026rsquo;m using NetworkManager on the Raspi so I install it\n# pacman -S networkmanager # systemctl enable --now NetworkManager # nmcli device wifi connect {network-ssid} --ask Now we may login via ssh.\nI had some problems with date and time, so a look at systemd-timesyncd.service, timedatectl status, timedatectl show-timesync and timedatectl timesync-status could be useful.\nInstallation of DStarGateway #I prefer compiling as normal user so I login as dominic. We will need some packages.\n$ sudo pacman -S --needed base-devel wget boost man-db gtest bind I hope I got all that we need, if you run into errors, just install the missing ones 😉\n$ mkdir git \u0026amp;\u0026amp; cd git $ git clone https://github.com/F4FXL/DStarGateway.git $ cd DStarGateway $ make This ran for 38 minutes \u0026ndash; I will not forget to run make -j4 the next time 🙄\nUpdate: This took 3m 40s on my Raspberry Pi 4 2GB when run with make -j4. You would now typically install the files but this is the part that made me stop for a while.\n$ sudo make install It will break, but at least it installs the binary files into /usr/local/bin.\nUpdate: I did not have these problems on the Raspberry Pi 4 any more. Whatever I was doing, it won\u0026rsquo;t work automated. I\u0026rsquo;m not a developer, but to me this looks like as if make -C enters the directory before it runs the top-level Makefile so the export ... lines never get executed and the Makefiles in the sub-directories will never know about them, I have to manually install the Data folder contents (AMBE files, Hostfiles).\nMove to the Data directory and add the following line on top of the file:\nexport DATA_DIR=/usr/local/share/dstargateway.d Then run sudo make install within the Data directory again and all should be fine.\nAlso install the hostfiles (this will need the program wget).\n$ sudo make newhostfiles Copy the systemd unit files to the right directory per hand:\nUpdate: Again, on the Pi 4 this was not needed. It looks like I messed something up on the Raspberry Pi 2. Yet I leave the hints, they may become useful hopefully. $ sudo cp debian/* /usr/lib/systemd/system/ Inspect them because you may edit some paths. Also have a look at the configuration files in /usr/local/etc/.\nEnable the services, but I don\u0026rsquo;t start them yet (except for a short test) because the hotspot will connect to the DSTAR reflector but we can\u0026rsquo;t talk or hear anything. Once they are enabled, they will autostart at the next reboot.\nTo enable the services:\n$ sudo systemctl daemon-reload $ sudo systemctl enable dstargateway.service $ sudo systemctl enable dgwtimeserver.service The second is only needed if you want time announcements.\nInstallation of MMDVMHost #Also this requires special packages:\n$ sudo pacman -S libsamplerate $ git clone git@github.com:g4klx/MMDVMHost.git $ cd MMDVMHost $ make -j4 $ sudo make install-service That would probably fail, but we can do it by hand.\nSetup the user mmdvm:\n$ sudo useradd --user-group -M --system mmdvm --shell /bin/false $ sudo usermod --groups uucp --append mmdvm So we run the command one more time:\n$ sudo make install-service Binaries are installed and the systemd unit files too.\nModify the configuration file /etc/MMDVM.ini.\nEnable the service:\n$ sudo systemctl daemon-reload $ sudo systemctl enable mmdvmhost.service Setup the UART #We can\u0026rsquo;t start MMDVMHost right away (well, we can, but it will not work yet).\nEnable the UART in /boot/config.txt:\nenable_uart=1 Update: On the Raspberry Pi 4 again, we would write something like\nenable_uart=1 dtoverlay=disable-bt But we should not need to disable the serial console serial-getty@ttyAMA0.service.\nAdd this near the top or after [All].\nWe need to disable the serial console because we need the UART at the GPIO pins for our modem hardware.\nDisable the serial console service:\n$ sudo systemctl disable serial-getty@ttyAMA0.service Open /boot/cmdline.txt and remove console=serial0,115200 from the line.\nSave and reboot.\nConfiguration #Make sure to check them before bringing up any service.\nDStarGateway #I removed unused configuration parts, you can leave them in your config, but I want this code here as small as possible without loosing too much of information.\n[Gateway] type=hotspot callsign=CALLSIGN address=0.0.0.0 icomAddress=172.16.0.20 icomPort=20000 hbAddress= hbPort=20010 latitude=0.0 longitude=0.0 description1= description2= url= language=english_us [ircddb_1] enabled=true hostname=ircv4.openquad.net username= password= [ircddb_2] enabled=false # [...] [ircddb_3] enabled=false # [...] [ircddb_4] enabled=false # [...] [Repeater_1] enabled=true band=E callsign=CALLSIGN address= port=20011 type=hb reflector=REF096 A reflectorAtStartup= reflectorReconnect=5 frequency=432.7625 offset=-0.0 rangeKm=20 latitude=0.0 longitude=0.0 agl= description1= description2= url= band1= band2= band3= [Repeater_2] enabled=false # [...] [Repeater_3] enabled=false # [...] [Repeater_4] enabled=false # [...] [APRS] enabled=false hostname=rotate.aprs2.net port=14580 password=12345 positionSource= [GPSD] address= port= [Log] path=/var/log/dstargateway/ fileRoot= fileRotate= fileLevel= displayLevel= [Paths] data=/usr/local/share/dstargateway.d [DExtra] enabled=true maxDongles=5 [DPlus] enabled=true maxDongles=5 login= [DCS] enabled=true [XLX] enabled=true hostfileUrl=http://xlxapi.rlx.lu/api.php?do=GetXLXDMRMaster [DRats] enabled=false [Remote] enabled=false port=4242 password=CHANGE_ME [AccessControl] whiteList= blackList= restrictList= [Daemon] daemon=false pidfile=/var/run/dstargateway/dstargateway.pid user=dstar You can set band=B or band=C in [Repeater_1]. I have E because I sometimes test a dual-hat hotspot which used to have B set and I\u0026rsquo;ve already setup E in my DSTAR terminal settings on regist.dstargateway.org.\nMMDVMHost #This would be a very long list, I removed things that I did not change from the example config file. I also changed some values to not have a duplicate of my hotspot running wild somewhere, so make sure you change all the options to match your own setup.\n[General] Callsign=CALLSIGN Id={DMR_ID} # or CCS or whatever this is called Timeout=180 Duplex=0 RFModeHang=10 NetModeHang=3 Display=None Daemon=1 [Info] RXFrequency=432762500 TXFrequency=432762500 Power=1 Latitude=0.0 Longitude=0.0 Height=0 Location=Home Description=DSTAR Hotspot URL=https://oe7drt.com [Log] DisplayLevel=0 FileLevel=2 FilePath=/var/log/mmdvm/ FileRoot=MMDVM FileRotate=1 [CW Id] Enable=0 Time=10 [DMR Id Lookup] File=DMRIds.dat Time=24 [NXDN Id Lookup] File=NXDN.csv Time=24 [Modem] Protocol=uart UARTPort=/dev/ttyAMA0 UARTSpeed=115200 TXInvert=1 RXInvert=0 PTTInvert=0 TXDelay=100 RXOffset=-75 TXOffset=-75 DMRDelay=0 RXLevel=50 TXLevel=50 RXDCOffset=0 TXDCOffset=0 RFLevel=100 RSSIMappingFile=/usr/local/etc/RSSI.dat UseCOSAsLockout=0 Trace=0 Debug=0 [Transparent Data] Enable=0 # [...] [D-Star] Enable=1 Module=E SelfOnly=1 AckReply=1 AckTime=750 AckMessage=0 ErrorReply=1 RemoteGateway=0 WhiteList= [DMR] Enable=0 # [...] [System Fusion] Enable=0 # [...] [P25] Enable=0 # [...] [NXDN] Enable=0 # [...] [M17] Enable=0 # [...] [FM] Enable=0 # [...] [AX.25] Enable=0 # [...] [D-Star Network] Enable=1 LocalAddress=127.0.0.1 LocalPort=20011 GatewayAddress=127.0.0.1 GatewayPort=20010 Debug=0 [DMR Network] Enable=0 # [...] [System Fusion Network] Enable=0 # [...] [P25 Network] Enable=0 # [...] [NXDN Network] Enable=0 # [...] [M17 Network] Enable=0 # [...] [POCSAG Network] Enable=0 # [...] [FM Network] Enable=0 # [...] [AX.25 Network] Enable=0 # [...] $ sudo cp /home/dominic/git/MMDVMHost/RSSI.dat /usr/local/etc/ dgwtimeserver #[TimeServer] callsign=CALLSIGN address= format=voice language=english_us_2 interval=60 [Paths] data=/usr/local/share/dstargateway.d/ [Repeater_1] enabled=true band=E [Repeater_2] enabled=false band= [Repeater_3] enabled=false band= [Repeater_4] enabled=false band= [Log] path=/var/log/dstargateway/ fileRoot= fileRotate= fileLevel= displayLevel= [Daemon] daemon=false pidfile=/var/run/dstargateway/dstargateway.pid user=dstar Updating hostfiles # This paragraph has been added on 18 Feb 2024 So we will probably update our hostfiles and I made a little script that fetches actual hostfiles from trusted sources. But since Archlinux does not come with any cron installed I could either install one or just use systemd timers.\nI went with the latter one of the options and assuming the script that updates the hostfiles is located in /home/dominic/bin/update-hosts.sh I used these unit-files that I put into /usr/lib/systemd/system/:\nupdate-hosts.service #[Unit] Description=\u0026#34;Update D-STAR hostfiles\u0026#34; After=network.target [Service] Type=oneshot ExecStart=/home/dominic/bin/update-hosts.sh ExecStartPost=/usr/bin/systemctl restart dstargateway.service [Install] WantedBy=default.target update-hosts.timer #[Unit] Description=\u0026#34;Update D-STAR hostfiles timer\u0026#34; [Timer] OnBootSec=5min OnCalendar=daily RandomizedDelaySec=20min Unit=update-hosts.service [Install] WantedBy=default.target Enable the timer and it will run now and daily in future.\n$ sudo systemctl enable --now update-hosts.timer Install a dashboard #I will install the dashboard from John Hays (K7VE) as my first look at it looked promising.\nI\u0026rsquo;ve created an issue in January 2024 regarding the crash of the dashboard when other gateways connect to our hotspot and the actual problem is still not yet resolved - there have been made some modifications to actually enable redirecting of the HTTP port but the HTTPS certs are still needed and since I don\u0026rsquo;t use them on the hotspot and all HTTPS traffic is handled by a reverse proxy in my network this is just another complexity that I don\u0026rsquo;t need.\nI have also uploaded my fork of it (including the modifications below) on my git repo: https://repo.oe7drt.net/dominic/dsgwdashboard/src/branch/only_http\nYou can see the dashboard in action at: https://hotspot.oe7drt.net/\nBut: I will not install this as it is in his instructions, because I don\u0026rsquo;t like when these kind of applications (simple dashboards for example) have to be run as the root user. I will therefore create a new user called dashboard who will run the webserver later.\nWe need a few packages for this:\n$ sudo pacman -S nodejs npm Create and impersonate our new user:\n$ sudo useradd --user-group -m --system dashboard --shell /bin/bash $ sudo su - dashboard Now we are the user dashboard and we will install the dashboard:\n$ git@github.com:johnhays/dsgwdashboard.git $ cd dsgwdashboard $ node -v $ npm install -save We would now install some certificates to let the webserver be accessible via HTTPS, but I maintain a reverse-proxy at my home which will take care of all the https-connections.\nTherefore I modify the index.js file according to the following patch:\ndiff --git a/index.js b/index.js index 0c71092..b8a7aba 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,4 @@ -const https = require(\u0026#34;https\u0026#34;); +const http = require(\u0026#34;http\u0026#34;); const fs = require(\u0026#34;fs\u0026#34;); const ini = require(\u0026#34;ini\u0026#34;); const lineReader = require(\u0026#39;line-reader\u0026#39;); @@ -32,12 +32,8 @@ updatelinks(); let serverPort = inifile.config.port; -const server = https +const server = http .createServer( -\t{ -\tkey: fs.readFileSync(\u0026#34;key.pem\u0026#34;), -\tcert: fs.readFileSync(\u0026#34;cert.pem\u0026#34;), -\t}, app ) .listen(serverPort, ()=\u0026gt;{ @@ -83,7 +79,7 @@ function updatelinks() { }; let i = 0; while (i \u0026lt; lines.length) { -\tif(lines[i] != \u0026#34;\u0026#34;) { +\tif(lines[i] != \u0026#34;\u0026#34; \u0026amp;\u0026amp; lines[i].match(linksregex)) { var mylinks = lines[i].match(linksregex); // console.log(JSON.stringify(lines[i])); var linkrec = {\u0026#39;timestamp\u0026#39;:mylinks[1].substr(0,19) , \u0026#39;protocol\u0026#39;:mylinks[2] , \u0026#39;device\u0026#39;:mylinks[4], Modify the dashboard.ini file to change the port from 443 to 8443. Why? Because I want to run the webserver as non-root user1!\n[config] dgwconfig=/usr/local/etc/dstargateway.cfg host=hotspot.oe7drt.net port=8443 This might be confusing now, the actual host above does not listen to port 8443 because there is a reverse-proxy in-between (and actually a firewall/router too). The actual path of this host and how it will be routed:\n%%{init: {\"flowchart\": {\"htmlLabels\": false}} }%% graph LR; A([Internet user]):::usr -- \"`**HTTPS**`\" --\u003eB[\"`router/firewall _hotspot.oe7drt.net_`\"]:::fw; B-- \"`**HTTPS**`\" --\u003eC[\"`reverse-proxy _proxy.lan_`\"]:::rev; C-- \"`**HTTP**`\" --\u003eD[\"`hotspot dashboard _hotspot.lan_`\"]:::dash; classDef usr stroke:#faa classDef fw stroke:#f55 classDef rev stroke:#9f9 classDef dash stroke:#0f0 This configuration is now as slim as I could make, removing encryption on the dashboard made it even better in terms of performance and maintainability as I don\u0026rsquo;t have to worry about the certificates on this host and no direct port-forwarding to this host has been made.\nI will now disable the shell for the dashboard user because I won\u0026rsquo;t need to login as the dashboard user again.\n$ sudo chsh -s /bin/false dashboard Start the dashboard with systemd #John already provides a systemd unit file, we need to copy this to the right directory.\n$ sudo cp /home/dashboard/dsgwdashboard/util/dsgwdashboard.service /usr/lib/systemd/system/ Edit the file, because John uses different paths than we do.\n[Unit] Description=D-STAR Gateway Dashboard After=network.target network-online.target Wants=network-online.target [Service] User=dashboard Type=simple WorkingDirectory=/home/dashboard/dsgwdashboard ExecStart=/usr/bin/node index.js Restart=on-failure RestartSec=5 StartLimitIntervalSec=60 StartLimitBurst=0 StandardOutput=syslog StandardError=syslog [Install] WantedBy=multi-user.target Enable and start the dashboard:\n$ sudo systemctl daemon-reload $ sudo systemctl enable --now dsgwdashboard.service DSTAR Registration #A DSTAR registration is needed if you want your transmission to be heard on original ICOM repeaters. Otherwise your transmission will not be forwarded and you may be searching for errors\u0026hellip;\nI registered at https://regist.dstargateway.org/ but there is one important thing to add to the webui there: do not choose long passwords (like those from a password manager) because it will get cut off somewhere and it took me quite a while to realize that.\nI can\u0026rsquo;t believe that there are still websites in 2024 that limit the lenght of a password! This can be an indication, that our passwords are saved in cleartext.\nThis is one reason to not use the same password on different websites/services. For your information: 12 characters work \u0026ndash; I couldn\u0026rsquo;t bring me back up to test more. Many password-reset emails have been sent for this already so I couldn\u0026rsquo;t be bothered to investigate even more into that.\nFinal words #So this note ends right here, hopefully this will be of any help to me in the future or somebody that found it online.\nPorts below 1024 can only be used as the root user. Those are socalled privileged ports. To run the program as non-root user we need to set the port to something above 1024.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"3 February 2024","permalink":"/posts/2024/62-a-slim-dstar-gateway-on-a-raspberry-pi-2/","section":"Blog","summary":"I wrote down the installation of a forked DStarGateway with a slim dashboard based on Javascript on a Raspberry Pi 2 \u0026ndash; using Archlinux.","title":"A slim D-STAR gateway on a Raspberry Pi 2","updated":"22 March 2025"},{"content":"","date":null,"permalink":"/tags/dstar/","section":"Tags","summary":"","title":"Dstar","updated":null},{"content":"","date":null,"permalink":"/tags/hotspot/","section":"Tags","summary":"","title":"Hotspot","updated":null},{"content":"","date":null,"permalink":"/tags/raspberry-pi/","section":"Tags","summary":"","title":"Raspberry-Pi","updated":null},{"content":"Some basic info about Raspberry Pi of any version.\nActivity LED codes #Up to Raspberry Pi 3 models #Actual models # LED Activity Description 3 flashes start.elf not found 4 flashes start.elf not launch-able (corrupt) 7 flashes kernel.img not found 8 flashes SDRAM not recognized. You need a newer bootcode.bin/start.elf firmware, or your SDRAM is damaged Older models up to Raspberry Pi 3 # LED Activity Description 3 flashes loader.bin not found 4 flashes loader.bin not launch-able (corrupt) 5 flashes start.elf not found 6 flashes start.elf not launch-able 7 flashes kernel.img not found Raspberry Pi 4 # Long flashes Short flashes Description 0 3 Generic failure to boot 0 4 start*.elf not found 0 7 Kernel image not found 0 8 SDRAM failure 0 9 Insufficient SDRAM 0 10 In HALT state 2 1 Partition not FAT 2 2 Failed to read from partition 2 3 Extended partition not FAT 2 4 File signature/hash mismatch - Pi 4 4 4 Unsupported board type 4 5 Fatal firmware error 4 6 Power failure type A 4 7 Power failure type B Freeze a package with apt/apt-get #https://askubuntu.com/a/18656\nRaspberry Pi 4 #4GB version, if that information is of any use.\nWiFi setup #Run wifi-menu. It does not survive a reboot though!\nI prefer iwctl or NetworkManager, so what I do:\n# pacman -S networkmanager No network after boot #Sometimes I make mistakes in my initial wpa_supplicant.conf file (that I\u0026rsquo;d place on the boot partition of the new Raspberry Pi SDcard). Recently my wpa_supplicant.conf file was totally messed up (a bracket too much I think).\nSo there is a quick way to connect to a WiFi network with the use of nmcli (NetworkManager).\n$ sudo nmcli device wifi connect [ssid] password [password] You can view networks with (no need for sudo):\n$ nmcli device wifi list Moving to testing (from bookworm) #Why would you want to do that in the first place? Well, most packages on debian stable are quite old \u0026ndash; hence the name stable.\nIf you need newer packages, you should consider moving to the testing branch. I moved my Raspberry Pi 4 to testing because of the starship prompt that I use on my computers \u0026ndash; it needed a newer version of the rustc package.\nFirst of all, upgrade to the latest packages.\n$ sudo apt update \u0026amp;\u0026amp; sudo apt upgrade Now change the release name (e.g. bookworm) to testing in /etc/apt/sources.list:\ndeb http://deb.debian.org/debian testing main contrib non-free non-free-firmware deb http://deb.debian.org/debian-security/ testing-security main contrib non-free non-free-firmware deb http://deb.debian.org/debian testing-updates main contrib non-free non-free-firmware Then update step by step.\n$ sudo apt update $ sudo apt upgrade Restart services during package upgrades without asking?\nAnswer with Yes.\nFinish the update:\n$ sudo apt full-upgrade $ sudo reboot Python 3 #Installing non-packaged modules #I could not find aprslib as a package, so I had to install this myself. Debian did not allow the installation as it did before, so I had to create a virtual environment. And it went like this:\n$ python -m venv ~/.env $ source ~/.env/bin/activate $ pip install aprslib $ deactivate I now have a similar line in my crontab:\n3 * * * * /home/dominic/.env/bin/python /home/dominic/bin/aprs_sendstatus.py We could also create virtual environments per application, module, package etc.\nhttps://www.raspberrypi.com/documentation/computers/os.html#python-on-raspberry-pi\nRaspberry Pi 3 #UPS Plus #An uninterruptible power supply (UPS) is very useful if you have your own servers at home. I\u0026rsquo;ve been using one with my old DiskStation (NAS1) but I got rid of the DiskStation at the end of 2023. I got the UPS Plus for the Raspberry Pi now for a while but never tested all its features yet (well, I haven\u0026rsquo;t used it much to be honest).\nThough, I have some quick notes to remember:\nSome software is needed to get status information about the batteries (which are of type 18650).\n$ python3 -m venv . $ curl -LsO https://raw.githubusercontent.com/geeekpi/upsplus/main/install.sh $ bash install.sh Any errors can be resolved by installing by hand. In my notes I thought that info is enough, so here we are 😉\nWe may have to edit our crontab:\n* * * * * /home/dr/bin/python3 /home/dr/bin/upsPlus.py \u0026gt; /tmp/upsPlus.log * * * * * /home/dr/bin/python3 /home/dr/bin/upsPlus_iot.py \u0026gt; /tmp/upsPlus_iot.log Getting information:\n$ python3 bin/upsPlus.py ------------------------------------------------------------ ------Current information of the detected Raspberry Pi------ ------------------------------------------------------------ Raspberry Pi Supply Voltage: 5.028 V Raspberry Pi Current Current Consumption: 571.068 mA Raspberry Pi Current Power Consumption: 2570.227 mW ------------------------------------------------------------ -------------------Batteries information------------------- ------------------------------------------------------------ Voltage of Batteries: 4.208 V Battery Current (Charging) Rate: 30.000 mA Current Battery Power Supplement: 263.415 mW Successfully set the protection voltage to: 3700 mV ------------------------------------------------------------ Currently charging via Type C Port. The Raspberry Pi will continue to work if you remove the power cable.\nRaspberry Pi 2 #WiFi adapter #The Raspberry Pi 2 does not have any WiFi capabilities so an adapter is needed to make use of your local WiFi network. I found this small adapter and can confirm it as a working unit.\nIt is not available on Amazon any more, but they suggest another device as its successor. I can only speak for the one that I own: Edimax EW-7811Un Raspberry Pi Pico W #Using MicroPython #https://micropython.org/download/RPI_PICO_W/\nI did the dumb thing and made the boot.py file break which led to an endless loop showing me only the Error code and restarting\u0026hellip;\nI was able to stop the script by quickly pressing CTRL+D, CTRL+C on the serial console but never was able to update the broken file without it doing a soft-reboot which loads boot.py again instantly\u0026hellip;\nAfter some research I was glad I found pico-nuke.\nBoot into uf2 loading (pressing BOOTSEL while power on) and place the correct .uf file (pico_nuke_pico_w-1.1.uf2) on the mounted device.\nOn OpenBSD there is no response but you can see the filesystem unmounted/removed. Unplug the USB and plug it in again booting into uf2 loading, copying over the MicroPython uf2 file again.\nNetwork Attached Storage\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"27 January 2024","permalink":"/notes/operating-systems/raspberry-pi/","section":"Notes","summary":"","title":"Raspberry Pi","updated":"8 March 2026"},{"content":"","date":null,"permalink":"/tags/privacy/","section":"Tags","summary":"","title":"Privacy","updated":null},{"content":"Have you noticed the product recommendations on Amazon whenever its spy Echo device is in the same room as you and hears your conversations?\nI usually ignore these recommendations anyway because they are actually way off of what I\u0026rsquo;m looking for (or already have it) so there is no value in these personal advertisements.\nBTW, personalized ads is something that I opt out whenever I can. I do not want or need them. But Amazon thinks I need to see it anyway \u0026ndash; which makes me just more mad at them.\nAlways worth a rant, Amazon. Haha. Now actually I wanted to note that I removed the microphone of my smart TV. I own that device since 2018/19 and it actually never came to my mind that these devices could also spy on your conversations \u0026ndash; but the possibility is there and since I never use the voice command function of my smart TV I decided to remove the mic.\nThe hole for the mic on my remote control is located at the top The mic is usually located very easily, though the elements below the hole are very, very small. I used a sharp cutting knife and a sharp side cutter to remove the tiny circuit board.\nThere is a very small hole in the shielding that surrounds the small components on the \u0026ldquo;microphone circuit board\u0026rdquo; These are often used on electronics workbenches to cut all sorts of things The microphone circuit board was connected on four points which I cut with this cutter slowly and precise.\nA reference picture so you get a clue how small this circuit board actually is ","date":"27 January 2024","permalink":"/posts/2024/61-smart-tvs-are-not-great/","section":"Blog","summary":"I\u0026rsquo;ve been talking about smart TVs with other people recently and we all came to the same conclusion: smart TVs may spy on us (like our smartphones do). The thumbnail on the side shows the actual microphone that is soldered onto the main circuit board of my remote control; it is no longer than 4 mm.","title":"Smart TVs are not great","updated":"29 September 2024"},{"content":"I am currently (back)listening to a bunch of podcasts and one mentioned a nice tool that renders your git activity into a video: Gource.\nOh sorry, we could not show you the video!\nWe had the following sources: av1 mp4, h265 mp4, h264 mp4 Shared video Download: H264, H265, AV1 (INFO Some files might not be available.\nH264: Great compatibility, lower quality and bigger size\nH265: Very small files, but not as good as AV1\nAV1: The best quality here, but a bit bigger files as the H265 version\nAn actual browser should usually load the small H265 video per default, others might use the H264 video.\nWindows might not load H265 per default because you would probably have to install the HEVC codec from the Microsoft Store. ) Nice to watch and maye a not-so-bad final post that ends the year 2023. Not that I\u0026rsquo;d care much about an ending year, but this really came in accidentally and maybe this is useful for somebody else too.\nAll the best for 2024!\n","date":"31 December 2023","permalink":"/posts/2023/60-an-overview/","section":"Blog","summary":"All the git commits made to this website in the year 2023.","title":"An overview","updated":"8 March 2026"},{"content":"Finally. I\u0026rsquo;ve seen this coming for a long time but I didn\u0026rsquo;t want to remove the \u0026ldquo;somewhat pricey\u0026rdquo; Netatmo stuff1 just like it costs nothing.\n\u0026ldquo;Luckily\u0026rdquo; the weather station wasn\u0026rsquo;t able to get actual data from their servers and a complete re-installation (with fresh api keys) didn\u0026rsquo;t resolve the problem. Also some manual requests from my computers (yep, I used two with different operating systems) weren\u0026rsquo;t able to obtain any data through their API.\nThat was finally the point where I decided to remove this shit stuff. And some outdoor cameras will follow as well, when I have found new and affordable hardware. I\u0026rsquo;m somewhat looking towards Axis.\nThe following article describes my new weather station setup at home but I wrote this down nearly two weeks after the installation and I might forgot something \u0026ndash; read this with a grain of salt.\nInstallation of the gateway #This is super easy, there is a temperature and humidity sensor with a ~70 cm long cable (and a ~1 m USB cable, which I don\u0026rsquo;t use). I plugged the gateway into my Raspberry Pi 4 directly and finished the setup on my smartphone. I won\u0026rsquo;t cover this here, the process is really super easy and straightforward.\nI will continue with the main software, the logic of most personal weather stations: WeeWX.\nInstallation of WeeWX on the Raspberry Pi 4 #As a little sidenote, I am using the testing branch of Debian, which is Debian GNU/Linux trixie/sid at the moment.\nI do like /etc/motd files showing to what I connect First off, a database is needed #I use a MySQL database for the weather data which should be installed before we connect WeeWX to a database.\n$ sudo apt install mariadb-server $ sudo mysql_secure_installation $ mysql -uroot -p Login with the new password and create the necessary users and databases. I will name them both weewx.\nYou can also use graphical management software to manage your mysql databases, but you would need to secure your installation yourself.\n$ sudo apt-get install phpmyadmin That would also pull in a whole lot of packages like PHP.\nDon\u0026rsquo;t allow access from the internet to your management software! As I had a backup of my old installation I will import the old data into my fresh database setup:\n$ mysql -uweewx -p\u0026#39;{fancy-password}\u0026#39; weewx \u0026lt; weewx-backup.sql The backup was done like:\n$ mysqldump -u weewx -p weewx \u0026gt; weewx-backup.sql I had data from 2022-01-01 to 2023-12-10, which were about 120MB.\nSome information about security # If your setup is focused on security, my approach is probably not suited for you! I will install the packaged version of WeeWX \u0026ndash; which is version 4.10.2 at this moment but the main concern is the user which runs the installed application. The installed application will be run by the root user.\nSince this is a dedicated Raspberry Pi that will never run something else (it also has its own MariaDB server running)\u0026hellip; I will live with it.\nIn contrast, my last WeeWX installation was on my webserver (it only had to pull the weather data via an API from a cloud network) and was setup with a dedicated user for that particular task (running the daemon and publishing the website directly on the server).\nThe new setup will also publish directly to my webserver and again, a dedicated user is used for this on the webserver. Authentication is done via ssh and a dedicated ssh key on the Raspberry Pi.\nBack to topic, I was about to install WeeWX on the Raspi. Follow the instructions on their website and all is fine 😉\nNonetheless, I leave the code snippets over here:\n$ wget -qO - https://weewx.com/keys.html | sudo gpg --dearmor --output /etc/apt/trusted.gpg.d/weewx.gpg $ wget -qO - https://weewx.com/apt/weewx-python3.list | sudo tee /etc/apt/sources.list.d/weewx.list $ sudo apt-get update \u0026amp;\u0026amp; sudo apt-get upgrade \u0026amp;\u0026amp; sudo apt-get dist-upgrade $ sudo apt-get install weewx The third line is quite extended because I had to update several packages on my Raspberry Pi first.\nThey suggest to look at the WeeWX logs via sudo tail -f /var/log/syslog \u0026ndash; that is actually not the best idea on newer linux distributions. Newer distributions use systemd and it comes with its own userspace tools to obtain the journal (the logs).\nI use either journalctl -fe or specific to WeeWX journalctl -feu weewx.\nThey also use the init files for starting and stopping; if you want to use systemd for that, you would typically start and stop WeeWX like this:\n$ sudo systemctl start weewx(.service) $ sudo systemctl stop weewx(.service) As you can see, you can append .service to the service name or just not use it. This is not needed though, as there is no unit file as per se, but systemd knows the actual init file and internally generates a unit file.\nThere is actually a unit file at Github.\nAs my old installation was on my webserver I had to adopt another script to work properly. You can find that script on my older article about moving WeeWX to OpenBSD.\nBut we drift off again\u0026hellip;\nInstall weewx-gw1000 driver #$ wget -P /var/tmp https://github.com/gjr80/weewx-gw1000/releases/download/v0.6.0b2/gw1000-0.6.0b2.tar.gz $ sudo wee_extension --install=/var/tmp/gw1000-0.6.0b2.tar.gz Taken from the README file, go and have a look at it, as you might need to change the config.\nI tested the driver with\n$ PYTHONPATH=/usr/share/weewx python -m user.gw1000 --test-driver and finally updated the WeeWX configuration\n$ sudo wee_config --reconfigure --driver=user.gw1000 You should check the WeeWX configuration file if everything got updated correctly and you may probably fill in an IP address. I tried to use it as a weewx-service but ended with the normal driver setup.\nA final restart of WeeWX whenever you change your config file.\n$ sudo systemctl restart weewx Install the Weather Data Center Skin #$ wget -O \u0026#34;/tmp/weewx-wdc.zip\u0026#34; https://github.com/Daveiano/weewx-wdc/releases/download/v3.4.0/weewx-wdc-v3.4.0.zip $ mkdir /tmp/weewx-wdc $ unzip /tmp/weewx-wdc.zip -d /tmp/weewx-wdc/ $ sudo wee_extension --install /tmp/weewx-wdc/ Install the weewx-xaggs extension #Install and configure as shown on the wiki page.\nInstall the weewx-forecast extension #There is also a wiki page for this. Read carefully and my observation is: use Openweathermap.\nI had shitloads of problems trying to use the forecast of WUnderground and I finally ended up using Openweathermap (which worked out of the box).\nWUnderground #I tried to install this initially because it was the cheapest solutions. You get free forecast information if you provide your weather data to their network. I\u0026rsquo;m not sure if this is the official way because I read this somewhere.\nOpenweathermap #This is also a good solution because it works instantly and it is not as expensive as the other options, the free available API calls should be enough for a personal weather station.\nThe default options in the skin.conf file work fine for me, don\u0026rsquo;t forget to comment them out.\nUploading data to other weather websites/services #Ecowitt #Ecowitt publishes the data on their network: https://www.ecowitt.net/home/index?id=163378\nYou need to be logged in to view other stations though.\nWUnderground #Because I already registered an account for the forecasts I decided to keep the account and push my weather data to their network.\nI thought I could upload my historical data with wunderfixer but it did not got imported.\n$ for month in {1..12}; do for i in {1..31}; do sudo wunderfixer -d 2022-$month-$i; done; done $ for month in {1..12}; do for i in {1..31}; do sudo wunderfixer -d 2023-$month-$i; done; done This is very theoretical because I wasn\u0026rsquo;t able to import all my past data. I won\u0026rsquo;t look into this any further because I really don\u0026rsquo;t care and I personally don\u0026rsquo;t like the WUnderground website that much.\nMy station can be found here: https://www.wunderground.com/dashboard/pws/ILNGEN12/\nAWEKAS #AWEKAS is an Austrian weather map system (Automatisches Wetterkarten System). I found this site actually while looking for information about the different forecast models mentioned in the forecast plugin above (well, not direclty\u0026hellip;).\nAnyway, they provide a paid website for your weather data, so if you don\u0026rsquo;t want to host your own website this might be interesting to you. The price is currently at 3.83 € (excl. VAT) per month (that would be ~50 € a year) \u0026ndash; forecasts are pulled from World Weather Online and include a 3-day preview (only).\nWhat I liked on AWEKAS is, that they blocked my air pressure measurements (only those) within a few hours as they were off a bit (~9 hPa higher). I then calibrated the sensor and made a quick check, then I unblocked them on my stations control panel. I\u0026rsquo;ve seen they are still a bit high and low sometimes, but now I know I should keep an eye on them for a while.\nThe station can be found here: https://www.awekas.at/en/instrument.php?id=32962\nAnd if it is still online, the webstation can be found here: https://stationsweb.awekas.at/index.php?id=32962\nI\u0026rsquo;ve included a preview here because I registered recently and they gave me one month of a free webstation (that is how they call the website that publishes the data).\nThe look at the index page showing current values as well as min/max values Comes in very handy: a stylish forecast Sun and Moon rise and set times, the visualisation speaks for itself Plots all values into one diagram \u0026ndash; very nice The interactive map from the website CWOP/MADIS #Let\u0026rsquo;s write these short words out one time:\nCWOP Citizen Weather Observer Program https://en.wikipedia.org/w/index.php?title=CWOP MADIS Meteorological Assimilation Data Ingest System https://en.wikipedia.org/w/index.php?title=MADIS Of course I upload my data to the CWOP as my station is a registered CWOP station. CWOP sends their data to MADIS, who then rate my station in relation to my neighboring stations.\nYou can have a look at my station AV859 if you like \u0026ndash; hough, it seems the information there did not get updated yet as it still shows Netatmo as my hardware and also other people reported problems with the CWOP (and sometimes FindU) sites.\nRecent packets can be seen here: http://www.wxqa.com/sss/search1.cgi?keyword=oe7drt-13\nOne last view at the old page #Unfortunately I only have the statistics page captured.\nThe screenshot has been taken on my phone \u0026ndash; hence the small paragraphs\u0026hellip; The sensor are not very expensive, but they are not cheap either. They use a lot of batteries (usually type AA or AAA) and they perform quite good, but all data is stored on Netatmo servers and your weather station has to use their API to download actual values.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"26 December 2023","permalink":"/posts/2023/59-bye-netatmo-welcome-ecowitt/","section":"Blog","summary":"I\u0026rsquo;m totally done with Netatmo at this point and I am more than happy to show you my new setup at my home. I\u0026rsquo;ll start with a \u003ca href=\"https://shop.ecowitt.com/products/ws69?variant=41418884743330\" target=\"_blank\" rel=\"noreferrer\"\u003eWS69\u003c/a\u003e (all-in-one) sensor and the Gateway \u003ca href=\"https://shop.ecowitt.com/products/gw1100?variant=41418887987362\" target=\"_blank\" rel=\"noreferrer\"\u003eGW1100\u003c/a\u003e. Combined with WeeWX we will publish our data to some online weather networks/services.","title":"Bye Netatmo – welcome Ecowitt","updated":"3 February 2026"},{"content":"","date":null,"permalink":"/tags/netatmo/","section":"Tags","summary":"","title":"Netatmo","updated":null},{"content":"","date":null,"permalink":"/tags/apache2/","section":"Tags","summary":"","title":"Apache2","updated":null},{"content":"Arch Linux\nSystemd Unit files #A nice and informative article about unit files.\nhttps://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files\nUnlock locked user accounts #If your user account is locked, wait 15 minutes (usually) and you can try again.\nIf you need to unlock your account immediately: run this command (if you have another user that can login on the box):\n$ sudo faillock --user dominic --reset Calling faillock without arguments show an overview.\nPredictable network interfaces #Get back the \u0026ldquo;old\u0026rdquo; interface names like eth0 or wlan0 with systemd.link(5) .\nEthernet #This makes my ethernet interface be called eth0 again.\nCreate /usr/lib/systemd/network/80-ether.link with this content:\n[Match] Type=ether [Link] NamePolicy=keep kernel Reboot.\nWireless #This makes my wireless interface be called wlan0 again.\nCreate /usr/lib/systemd/network/80-wlan.link with this content:\n[Match] Type=wlan [Link] NamePolicy=keep kernel Reboot.\nSetup WiFi networks #Using iwctl #$ iwctl device list $ iwctl station wlan0 scan $ iwctl station wlan0 get-networks $ iwctl station wlan0 connect {ssid} Using nmcli (NetworkManager) #$ nmcli device wifi list $ nmcli device wifi rescan $ nmcli device wifi connect {ssid} --ask $ nmcli device wifi show-password Last command shows the connected SSID and a QR-code within the terminal.\nUsing NetworkManager #We create some files in /etc/NetworkManager/conf.d:\nUsing iwd as the WiFi backend #wifi_backend.conf:\n[device] wifi.backend=iwd Using dhcpcd as DHCP client #dhcp-client.conf:\n[main] dhcp=dhcpcd Using systemd-networkd ## wpa_passphrase MyNetwork SuperSecretPassphrase \u0026gt; /etc/wpa_supplicant/wpa_supplicant-wlan0.conf # systemctl enable wpa_supplicant@wlan0 Create /etc/systemd/network/00-wireless-dhcp.network and fill it with:\n[Match] Name=wlan0 [Network] DHCP=yes Enable systemd-networkd:\n# systemctl enable systemd-networkd.service Reboot.\nUsing the CPU with hashcat #$ hashcat -I hashcat (v6.2.6) starting in backend information mode OpenCL Info: ============ OpenCL Platform ID #1 Vendor..: Intel(R) Corporation Name....: Intel(R) OpenCL Graphics Version.: OpenCL 3.0 Backend Device ID #1 Type...........: GPU Vendor.ID......: 8 Vendor.........: Intel(R) Corporation Name...........: Intel(R) UHD Graphics 620 Version........: OpenCL 3.0 NEO Processor(s)...: 24 Clock..........: 1150 Memory.Total...: 14368 MB (limited to 2047 MB allocatable in one block) Memory.Free....: 7136 MB Local.Memory...: 64 KB OpenCL.Version.: OpenCL C 1.2 Driver.Version.: 24.31.30508 This is what I\u0026rsquo;ve seen on hashcat -I for a long time now but I never dig myself into this \u0026ldquo;problem\u0026rdquo; \u0026ndash; but today I tried to find the reason why there is no CPU listed on my Carbon X1 Gen7 laptop.\nAfter a few minutes doing some trial \u0026amp; error I finally got the CPU listed after installing pocl.\n$ paru -S pocl Or, on my gaming laptop running a cheap clone of Ubuntu:\n$ sudo apt install pocl-opencl-icd Now my hashcat -I looks like this:\n$ hashcat -I took 6s hashcat (v6.2.6) starting in backend information mode OpenCL Info: ============ OpenCL Platform ID #1 Vendor..: Intel(R) Corporation Name....: Intel(R) OpenCL Graphics Version.: OpenCL 3.0 Backend Device ID #1 Type...........: GPU Vendor.ID......: 8 Vendor.........: Intel(R) Corporation Name...........: Intel(R) UHD Graphics 620 Version........: OpenCL 3.0 NEO Processor(s)...: 24 Clock..........: 1150 Memory.Total...: 14368 MB (limited to 2047 MB allocatable in one block) Memory.Free....: 7136 MB Local.Memory...: 64 KB OpenCL.Version.: OpenCL C 1.2 Driver.Version.: 24.31.30508 OpenCL Platform ID #2 Vendor..: The pocl project Name....: Portable Computing Language Version.: OpenCL 3.0 PoCL 6.0 Linux, Release, RELOC, LLVM 18.1.8, SLEEF, DISTRO, POCL_DEBUG Backend Device ID #2 Type...........: CPU Vendor.ID......: 128 Vendor.........: GenuineIntel Name...........: cpu-haswell-Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz Version........: OpenCL 3.0 PoCL HSTR: cpu-x86_64-pc-linux-gnu-haswell Processor(s)...: 8 Clock..........: 4800 Memory.Total...: 13716 MB (limited to 2048 MB allocatable in one block) Memory.Free....: 6826 MB Local.Memory...: 256 KB OpenCL.Version.: OpenCL C 1.2 PoCL Driver.Version.: 6.0 Paru / Pacman #Remove orphans ## pacman -Qdtq | sudo pacman -Rns - If there is a package listed that you do not want to remove, it can be excluded from the list of orphans by marking it as explicitly installed:\n# pacman -D --asexplicit \u0026lt;package\u0026gt; Found somewhere else #I found the following snippets on andreas-mausch.de and I had to copy them to my notes archive here\u0026hellip;\nInstall #Edit PKGBUILD and skip checksum check #$ paru -S gnucash-xbt --fm helix --mflags \u0026#34;--skipchecksums\u0026#34; uninstall (-n: no backup files; -s: remove dependencies) #$ paru -Rns \u0026lt;package\u0026gt; Mirrors #select fastest #$ sudo pacman-mirrors --fasttrack select by country #$ sudo pacman-mirrors --country Germany,France,Austria Search repo #package details #$ paru -Si \u0026lt;package\u0026gt; list files #$ paru -Fl \u0026lt;package\u0026gt; find package for file #$ pkgfile \u0026lt;filename\u0026gt; search command #$ paru -F glxinfo Installed packages #search package #$ paru -Qs \u0026lt;package\u0026gt; package details #$ paru -Qii \u0026lt;package\u0026gt; list files #$ paru -Ql \u0026lt;package\u0026gt; Show package for file or binary #$ pacman -Qo helix orphans #$ paru -Qdt foreign packages (usually aur) #$ pacman -Qm manually installed #$ pacman -Qet -Q, --query: Query the package databasey\n-e, --explicit: Restrict or filter output to explicitly installed packages\n-t: not a dependency (i.e., top-level packages)\nmanually installed (aur and non-aur) #https://www.reddit.com/r/ManjaroLinux/comments/fzog8g/get_a_list_of_packages_you_installed_yourself/\n$ pacman -Qqe | grep -v \u0026#34;$(awk \u0026#39;{print $1}\u0026#39; /desktopfs-pkgs.txt)\u0026#34; -Q, --query: Query the package databasey\n-q, --quiet\n-e, --explicit: Restrict or filter output to explicitly installed packages\nClean-up #clear cache #$ paru -Sc Official repo vs. AUR #repo #$ paru -[...] --repo aur #$ paru -[...] --aur Blocking IPs from a list with ipset #Using ipset should increase performance on the box, also using the raw table should not create useless states as for what I understand from the source article on serverfault.com.\n$ sudo ipset -N badips iphash $ while read ip; do sudo ipset -A badips \u0026#34;$ip\u0026#34;; done \u0026lt; blocked.txt $ sudo iptables -t raw -I PREROUTING -m set --match-set badips src,dst -j DROP $ sudo iptables-save -f /etc/iptables/iptables.rules Enable iptables in case it is not running yet.\n$ sudo systemctl enable --now iptables.service Also make the ipset configuration persistent:\n$ sudo ipset save -file /etc/ipset.conf $ sudo systemctl enable ipset.service Reboot to test its persistency.\nDo not manage one specific USB dongle #99-unmanaged-devices.conf:\n[keyfile] unmanaged-devices=mac:xx:xx:xx:xx:xx:xx Prefer local DNS instead of systemd-resolved defaults #https://unix.stackexchange.com/a/442599\nCPU frequency scaling #https://wiki.archlinux.org/title/CPU_frequency_scaling\nYubiKeys #https://wiki.archlinux.org/title/YubiKey\nLunarVim custom key mappings #I know, this is an Arch Linux post but hey, I don\u0026rsquo;t care.\nhttps://github.com/LunarVim/LunarVim/issues/2602\nMounting nfs shares with systemd #https://wiki.archlinux.org/title/NFS#Mount_using_/etc/fstab_with_systemd\nArch Linux ARM installation on a Raspberry Pi 2 #The wiki page is for Raspberry Pi 4.\nhttps://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-4\nCreate a 32-bit Wine prefix #I create my wine prefixes usually like this:\n$ export WINEPREFIX=/home/dominic/.wine-winlink $ export WINEARCH=win32 $ wine wineboot Installing multiple ruby versions #I came to the point to test an older website from me and it was made with Jekyll which I had to install quickly. Problems occured with OpenSSL and I finally managed to install ruby version 2.7.1 and 3.0.0 in my home directory.\n$ rvm pkg install openssl $ rvm install \u0026#34;ruby-3.0.0\u0026#34; --with-openssl-dir=$HOME/.rvm/usr $ rvm install \u0026#34;ruby-2.7.1\u0026#34; --with-openssl-dir=$HOME/.rvm/usr Later in the desired directory, I re-installed the gems because with ruby 2.7.1 I got another \u0026ldquo;Directory not found\u0026rdquo; error.\nI had to do this because I used ruby 2.7.1 on one website.\n$ bundle install --force Bigger font for systemd-boot #Edit /boot/loader/loader.conf:\nconsole-mode 0 Possible settings are:\nValue Description 0 Standard UEFI 80x25 mode 1 80x50 mode, not supported by all devices 2 the first non-standard mode provided by the device firmware, if any auto Pick a suitable mode automatically using heuristics max Pick the highest-numbered available mode keep Keep the mode selected by firmware (the default) More details can be found in loader.conf(5) .\nManual sections # Section Description 1 Section 1 of the manual describes user commands and tools, for example, file manipulation tools, shells, compilers, web browsers, file and image viewers and editors, and so on 2 Section 2 of the manual describes the Linux system calls. A system call is an entry point into the Linux kernel. Usually, system calls are not invoked directly: instead, most system calls have corresponding C library wrapper functions which perform the steps required (e.g., trapping to kernel mode) in order to invoke the system call. Thus, making a system call looks the same as invoking a normal library function. 3 Section 3 of the manual describes all library functions excluding the library functions (system call wrappers) described in Section 2, which implement system calls. 4 Section 4 of the manual describes special files (devices). 5 Section 5 of the manual describes various file formats, as well as the corresponding C structures, if any. 6 Section 6 of the manual describes the games and funny little programs available on the system. 7 Section 7 of the manual provides overviews on various topics, and describes conventions and protocols, character set standards, the standard filesystem layout, and miscellaneous other things. ","date":"29 November 2023","permalink":"/notes/operating-systems/archlinux/","section":"Notes","summary":"","title":"Archlinux","updated":"8 March 2026"},{"content":"","date":null,"permalink":"/tags/certbot/","section":"Tags","summary":"","title":"Certbot","updated":null},{"content":"These are random notes \u0026ndash; more or less about OpenBSD. Some may not fit here well, but they could relate to OpenBSD or similar operating systems in some way\u0026hellip;\nApache with wildcard certificates #I often got errors when I clicked a link on my main website for example to the weather page. It was complaining about different SNI because both hosts used different certificates and I wasn\u0026rsquo;t sure how I could fix that easily. I thought wildcard certs could fix that because I\u0026rsquo;d only have one cert for all the domains.\n$ doas pkg_add certbot Run and follow instructions:\n$ doas certbot certonly --manual --preferred-challenges dns \\ --server https://acme-v02.api.letsencrypt.org/directory \\ --manual-public-ip-logging-ok -d \u0026#39;*.oe7drt.com\u0026#39; -d oe7drt.com [...] Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/oe7drt.com/fullchain.pem Key is saved at: /etc/letsencrypt/live/oe7drt.com/privkey.pem This certificate expires on 2024-04-25. These files will be updated when the certificate renews. NEXT STEPS: - This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate\u0026#39;s expiry date. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let\u0026#39;s Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Also adding my .net domain to the certs:\n$ doas certbot certonly --manual --manual-public-ip-logging-ok \\ --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory \\ -d \u0026#34;*.oe7drt.com\u0026#34; -d \u0026#34;*.oe7drt.net\u0026#34; -d oe7drt.com -d oe7drt.net Some changes to the apache2 configuration were made:\n\u0026lt;MDomain oe7drt.com oe7drt.net\u0026gt; MDMember *.oe7drt.com MDMember *.oe7drt.net MDCertificateFile /etc/letsencrypt/live/oe7drt.com/fullchain.pem MDCertificateKeyFile /etc/letsencrypt/live/oe7drt.com/privkey.pem \u0026lt;/MDomain\u0026gt; MDChallengeDns01 /etc/apache2/dns/dns-challenge.phar -- MDCertificateAgreement accepted MDContactEmail {email_redacted} MDCAChallenges dns-01 It seems Apache likes this:\nThis is currently testing because I have no idea if mod_md will update these certs itself or if I should run certbot again when it\u0026rsquo;s needed. In the meantime I monitor my website with UptimeKuma which alerts me on expiring certificates.\nThe binary (dns-challenge.phar) that actually does the DNS Challenge is taken from kategray/dns-challenge-cloudflare.\nAn easier way to obtain wildcard certificates would be the use of Cloudflares proxy. They would also create a second wildcard cert of another issuer in case the first one would get compromised so they would actually replace your main cert with a backup cert just with a whoooop.\nCertbot commands have been taken from this article by nabbisen at dev.to.\nUpdate on April 25 2024\nI\u0026rsquo;ve now seen that no certificate gets renewed automatically. The actual certificate got renewed with the command from above (including the .net domain). The output of that command clearly states:\nNEXT STEPS: - This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate\u0026#39;s expiry date. I will execute the same certbot command before the certificate\u0026rsquo;s expiry date the next time to enhance my experience 😉\nUpdate: Another interesting article can be found there on mzonline.com\nGet some filesystem information #$ dumpfs /dev/rsd1a magic\t19540119 (FFS2)\ttime\tThu Nov 16 21:14:34 2023 [...] (snip; lots of output...) This can be helpful if you want to know, which filesystem you actually use on your OpenBSD box.\nCreate a Win95 FAT32 USB stick #When you fdisk -iy sd2 (for example) a USB stick, you usually create one single OpenBSD partition at the 4th position. When you then try to newfs_msdos -F 32 -L Label sd2i the layout is gone \u0026ndash; happened to me several times until I got fed up and investigated.\nI don\u0026rsquo;t know why that happened, but I got my way to create USB sticks, that actually work with other devices like my amateur radios that need those fancy microSD cards.\nDelete the first bytes on the stick:\n$ doas dd if=/dev/zero bs=1m count=1 of=/dev/rsd2c Create the needed partition:\n$ echo -n \u0026#39;edit 0\\n0c\\n\\n2048\\n*\\nq\\n\u0026#39; | doas fdisk -e sd2 A short explanation (\\n is basically a newline; the Enter key):\nedit 0\\n: edit the first entry (fdisk -iy sd2 would edit the 4th entry) 0c\\n: selects Win95 FAT32L as file system format \\n: only hit enter and use the default [n] 2048\\n: Start of the partition *\\n: Special size value \u0026ndash; means the remainder of the disk (like -1 on many other tools) q\\n: write MBR and quits the program This results in a partition table like this:\n$ fdisk sd2 Disk: sd2\tgeometry: 966/255/63 [15523840 Sectors] Offset: 0\tSignature: 0xAA55 Starting Ending LBA Info: #: id C H S - C H S [ start: size ] ------------------------------------------------------------------------------- 0: 0C 0 32 33 - 966 80 10 [ 2048: 15521792 ] Win95 FAT32L 1: 00 0 0 0 - 0 0 0 [ 0: 0 ] Unused 2: 00 0 0 0 - 0 0 0 [ 0: 0 ] Unused 3: 00 0 0 0 - 0 0 0 [ 0: 0 ] Unused whereas a fdisk -iy sd2 creates a table like this:\n$ fdisk sd2 Disk: sd2\tgeometry: 966/255/63 [15523840 Sectors] Offset: 0\tSignature: 0xAA55 Starting Ending LBA Info: #: id C H S - C H S [ start: size ] ------------------------------------------------------------------------------- 0: 00 0 0 0 - 0 0 0 [ 0: 0 ] Unused 1: 00 0 0 0 - 0 0 0 [ 0: 0 ] Unused 2: 00 0 0 0 - 0 0 0 [ 0: 0 ] Unused *3: A6 0 1 2 - 966 80 10 [ 64: 15523776 ] OpenBSD Don\u0026rsquo;t forget to create the file system:\n$ doas newfs_msdos -F 32 -L 8GB_Stick sd2i Mounting disk images #$ doas vnconfig /dev/vnd0c /path/to/imagefile.img $ doas mount_msdos /dev/vnd0i ~/mnt/disk Packages / Ports #\u0026hellip;because of libraries #Updating dependencies before installing (switch -U) does help sometimes\u0026hellip;\nCan\u0026rsquo;t install [package] because of libraries\n$ doas pkg_add -uiU Should fix that.\nPython #ModuleNotFoundError #Install python modules with pip.\n$ python3 -m pip install --user --upgrade ${example_module} Rust #starship prompt #This is usually blocked via the rust-battery crate, as there is still no progress made on issue #19, which probably leads to no progress on issue #2267.\nThough, there is a comment that disables the optional features (battery).\nSo the final installation of Starship looks like:\n$ cargo install starship --locked --no-default-features The compilation took about 9½ minutes.\nGit #Cloudlog (server) #Cloudlog is a webapplication written in PHP that allows amateur radio operators to log contacts online. I host my own instance on my server and I finally looked into why I never got satellites shown in SAT Timers.\nI use php-fpm and it is running as the user www. It is kind of jailed and it cannot read /etc/ssl/cert.pem \u0026ndash; so the https connections cannot be verified and it failes at downloading the satellites infos from other websites.\nI solved this by copying /etc/ssl to /var/www/etc/ssl via rsync, keeping file permissions intact. I may setup a cronjob for this maybe.\n$ cd /var/www $ doas rsync -avhzrp /etc/ssl/ etc/ssl sending incremental file list created directory etc/ssl ./ cert.pem ikeca.cnf openssl.cnf x509v3.cnf private/ sent 155.82K bytes received 133 bytes 311.90K bytes/sec total size is 344.08K speedup is 2.21 $ doas rcctl restart php80_fpm php80_fpm(ok) php80_fpm(ok) Cloudlog (client) #Use of the online logging tool Cloudlog on my OpenBSD machine.\nFirst off, connect the TX-500 with the computer (CAT cable) and start rigctld:\n$ rigctld -m 2014 -r /dev/cuaU0 -s 9600 -v I use 2014 which is actually a Kenwood TS-2000 \u0026ndash; but on OpenBSD hamlib is currently at version 4.4 and the TX-500 is only available on version ≥4.5.\nFor newer hamlib versions (≥4.5) use the rig 2050 like:\n$ rigctld -m 2050 -r /dev/cuaU0 -s 9600 -v In combination with Digirig I would probably use something like this, because otherwise Digirig would instantly key the transceiver:\n$ rigctld -m 2014 -r /dev/cuaU0 -s 9600 --set-conf=rts_state=OFF -v Well, I tested this on my desk at home but never used my Laptop for doing digital modes with my TX-500 though \u0026ndash; but I want this to be noted here just in case I should need it someday.\nOn another terminal start cloudlogbashcat.sh:\n$ cloudlogbashcat.sh Now, if you open the website of your Cloudlog installation (and if you have setup your rigs) and select the radio that uses cloudlogbashcat.\nYou can select your pre-defined radio in the Live QSO tab Z-Shell #Where is this alias defined? #I defined an alias ls but I forgot where it was.\n$ PS4=\u0026#39;+%x:%I\u0026gt;\u0026#39; zsh -i -x -c \u0026#39;\u0026#39; |\u0026amp; grep ls There will be a lot of screen output probably.\nRenaming multiple directories #$ count=1; zmv -n \u0026#39;*\u0026#39; \u0026#39;$f[1,4]/$((count++))-$f[12,-1]\u0026#39; mv -- 2023-08-05-problems-with-apt-keys-on-my-hotspots 2023/51-problems-with-apt-keys-on-my-hotspots mv -- 2023-08-26-dmrhost-on-a-raspberrypi4-with-openbsd-or-freebsd 2023/52-dmrhost-on-a-raspberrypi4-with-openbsd-or-freebsd mv -- 2023-09-16-openbsd-current-built-from-source 2023/53-openbsd-current-built-from-source Moves subdirectories into other folder structure with a counting variable.\n$ count=16; zmv -Q \u0026#39;*(/)\u0026#39; \u0026#39;$((count++))-$f[12,-1]\u0026#39; mv -- 2021-08-08-win10-grub2-and-uefi 16-win10-grub2-and-uefi mv -- 2021-08-12-running-n1mm-logger-on-linux 17-running-n1mm-logger-on-linux mv -- 2021-10-03-winlink-and-vara-on-linux 18-winlink-and-vara-on-linux mv -- 2021-10-03-wordlist-generation 19-wordlist-generation mv -- 2021-10-26-processes-accessing-mountpoints 20-processes-accessing-mountpoints That was the second part, counting from where we stopped from the previous directory.\nThere was a draft post left in 2022 which I deleted, now I had to renumber the folders from 28-* to 34- to a number lower by 1.\n$ for i in {29..34}; do zmv -n -W $i\u0026#39;*\u0026#39; $((--i))\u0026#39;*\u0026#39;; done mv -- 29-using-nfs-on-a-raspberry-pi 28-using-nfs-on-a-raspberry-pi mv -- 30-vpn-tunnel-into-hamnet-on-fedora-36 29-vpn-tunnel-into-hamnet-on-fedora-36 mv -- 31-winlink-on-linux-fix-invalid-handle-on-logfiles 30-winlink-on-linux-fix-invalid-handle-on-logfiles mv -- 32-hamnet-on-the-pfsense 31-hamnet-on-the-pfsense mv -- 33-changing-network-metrics-on-linux 32-changing-network-metrics-on-linux mv -- 34-change-git-submodule-url 33-change-git-submodule-url So, there is still one post left that is actually a draft post and I\u0026rsquo;d like to remove the leading number from that directory.\n$ zmv -n -W \u0026#39;59-*\u0026#39; \u0026#39;*\u0026#39; mv -- 59-pat-winlink-on-openbsd pat-winlink-on-openbsd Neovim #Update plugins that use make #GNU make and BSD make are not compatible, and it is kind of annoying if people think everybody has installed the same tools to compile software on their boxes.\nIn this example I often get some errors when I try to update plugins from withing AstroNvim, a plugin-packaged neovim confgiuration framework.\nOpen Neovim and initiate the update procedure (space, p, a) Remember what folder the errors occur Visit those folders and update the file Makefile (usually) in Makefile replace make with gmake\n(you need that installed, pkg_add gmake) run the update procedure again If that does not work, it is mostly a submodule. You can try to update and compile by hand. Switch to the folder, update make with gmake and finally run gmake in that folder. That will produce a compiled output (a library) and the updated procedure will pick that up at the next run and the submodule will usually be ignored unless the main repo has new commits in its tree. You may then stash the local changes and re-run the update procedure again.\nConcatenate sound files (.wav) #$ sox *.wav one-big-soundfile.wav cat *.wav \u0026gt; bigfile.wav works too, but different. That would put all audio files into separate streams at the output file whereas sox appends one file after another in the big output file.\nManual page sections # Section Description 1 General Commands 2 System Calls 3 Library Functions 3p Perl Library 4 Device Drivers 5 File Formats 6 Games 7 Miscallaneous Information 8 System Manager\u0026rsquo;s Manual 9 Kernel Developer\u0026rsquo;s Manual ","date":"29 November 2023","permalink":"/notes/operating-systems/openbsd/","section":"Notes","summary":"","title":"OpenBSD","updated":"8 March 2026"},{"content":"","date":null,"permalink":"/tags/python/","section":"Tags","summary":"","title":"Python","updated":null},{"content":"","date":null,"permalink":"/tags/rust/","section":"Tags","summary":"","title":"Rust","updated":null},{"content":"","date":null,"permalink":"/tags/zsh-shell/","section":"Tags","summary":"","title":"Zsh-Shell","updated":null},{"content":"Okay this one is not a \u0026ldquo;good\u0026rdquo; one, in terms of a good phishing email, because it is obviosly a phishing email since I do not have the mentioned product bought at mentioned company. But the fact that I get constantly emailed these made me finally post this to the website.\nI get them mostly in a pair of two, one to my main domain and one to a subdomain (which includes the term noreply as part of the domainname).\nThe mail body # Watch out for the link, as you might see, it gets rendered to a netcup.de domain as HTML, but the source code does look quite a bit different! Sehr geehrte/r Wir mÃ¶chten Sie heute freundlich daran erinnern, dass die Domain oe7drt.com Ihrer Firma, mit der dieses E-Mail-Konto verbunden ist, am 17.11.2023 ablÃ¤uft. Als verantwortungsbewusster Anbieter ist es uns ein Anliegen, Ihnen rechtzeitig Ã¼ber diese bevorstehende VerlÃ¤ngerung zu informieren. Ã¼ber den sicheren Link erneuern https://renew.netcup.de Wir mÃ¶chten sicherstellen, dass Ihre Online-PrÃ¤senz reibungslos lÃ¤uft und Ihr geschÃ¤ftlicher Erfolg nicht beeintrÃ¤chtigt wird. Daher empfehlen wir Ihnen dringend, die VerlÃ¤ngerung Ihrer Domain vor dem Ablaufdatum zu beantragen. Indem Sie Ihre Domain verlÃ¤ngern, stellen Sie sicher, dass Ihre Webseite weiterhin erreichbar ist und Ihr E-Mail-Konto aktiv bleibt. Dein netcup team --------------------------------------------------------- netcup GmbH Managing Directors: - Oliver Werner - Alexander Windbichler Daimlerstr. 25 D-76185 Karlsruhe Phone: +49 721 / 7540755 - 0 Fax: +49 721 / 7540755 - 9 Commercial register: HRB 705547, Amtsgericht Mannheim --------------------------------------------------------- 2 Attachment(s) (0.9 KB) ?Download all attachments[SUBMIT] ?Show attachments[SUBMIT] ?[SUBMIT] Update on Nov 18 2023 I\u0026rsquo;m sorry, this is either a very dumb person (or group) or it is a very funny coincidence. I got two new mails today in which the shown URL was changed to www.customercontrolpanel.de, the link still goes to the italian site (that you will find further down in this article).\nFollowing only the relevant part is shown.\n\u0026lt;p\u0026gt;über den sicheren Link erneuern \u0026lt;a href=\u0026#34;https://elettrogi.it/\u0026#34;\u0026gt;\u0026lt;strong\u0026gt;https://www.customercontrolpanel.de/?login_language=DE\u0026lt;/strong\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;Wir möchten sicherstellen, dass Ihre Online-Präsenz… Update on Jan 10 2024 Haha another two emails with yet another domainname: netcupde.com. Well, the link now looks like this:\n1 2 3 4 5 6 \u0026lt;p\u0026gt;Erneuern Sie über den sicheren Link: \u0026lt;a href=\u0026#34;https://therapeutelyon.fr\u0026#34; target=\u0026#34;_blank\u0026#34; rel=\u0026#34;noopener noreferrer\u0026#34;\u0026gt;\u0026lt;strong\u0026gt;https://customerscontrolpanel.\u0026lt;em style=\u0026#34;color: rgb(0, 0, 0); font-style: inherit; background-color: rgb(255, 255, 102);\u0026#34;\u0026gt; netcup\u0026lt;/em\u0026gt;de.com/de/\u0026lt;/strong\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;/p\u0026gt; I added some newlines into the html code, because the code is actually only two lines in the email but that would make this codeblock a bit harder to read (specially on mobile devices).\nThese additions of \u0026lt;em style=\u0026quot;... are the reason for me not initially finding the domain netcupde.com in that email as that would be the first thing that I\u0026rsquo;d look up in the email sources (see the end of line 3 and up on line 4).\nUpdate on Jan 11 2024 Another domain comes in quick. I doubt that everyone looks up a domains whois information, but if you do, don\u0026rsquo;t let them fool you. This one looks very valid, although it is not.\nThe new domain name I\u0026rsquo;m talking about is netcup.eu and it is also registered at netcup.de. The whois information makes it look very related to each other\u0026hellip;\n$ whois netcup.eu % [snip] % WHOIS netcup.eu Domain: netcup.eu Script: LATIN Registrant: NOT DISCLOSED! Visit www.eurid.eu for webbased WHOIS. On-site(s): NOT DISCLOSED! Visit www.eurid.eu for webbased WHOIS. Technical: Organisation: netcup GmbH Language: de Email: mail@netcup.de Registrar: Name: netcup GmbH Website: www.netcup.de Name servers: second-dns.netcup.net third-dns.netcup.net root-dns.netcup.net Please visit www.eurid.eu for more info. I don\u0026rsquo;t understand, why Netcup does not ban any domainnames on their nameservers that include the term netcup in their name.\nBy the way, the new link refers to bodyplussize.pl.\nI guess I won\u0026rsquo;t update this post much more, these emails seem to always show the same boring text and structure. The mail body source (html) # Note the highlighted line (18). There you have the real link that we mentioned above. \u0026lt;head\u0026gt; \u0026lt;meta http-equiv=\u0026#34;Content-Type\u0026#34; content=\u0026#34;text/html; charset=windows-1252\u0026#34;\u0026gt; \u0026lt;meta name=\u0026#34;GENERATOR\u0026#34; content=\u0026#34;MSHTML 11.00.10570.1001\u0026#34;\u0026gt;\u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;div class=\u0026#34;content-message\u0026#34; dojoattachpoint=\u0026#34;contentMsgPane\u0026#34;\u0026gt; \u0026lt;div class=\u0026#34;text msg-view-text\u0026#34; role=\u0026#34;text\u0026#34;\u0026gt; \u0026lt;div class=\u0026#34;msg-view-text-cnt\u0026#34; dojoattachpoint=\u0026#34;_messageTextCntNode\u0026#34;\u0026gt; \u0026lt;div class=\u0026#34;xam_msg_class\u0026#34;\u0026gt; \u0026lt;meta content=\u0026#34;text/html\u0026#34;\u0026gt; \u0026lt;p\u0026gt;Sehr geehrte/r\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026lt;br\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;Wir möchten Sie heute freundlich daran erinnern, dass die Domain\u0026amp;nbsp;\u0026lt;strong\u0026gt;oe7drt.com\u0026lt;/strong\u0026gt;\u0026amp;nbsp;Ihrer Firma, mit der dieses E-Mail-Konto verbunden ist, am \u0026lt;strong\u0026gt;17.11.2023\u0026lt;/strong\u0026gt; abläuft. Als verantwortungsbewusster Anbieter ist es uns ein Anliegen, Ihnen rechtzeitig über diese bevorstehende Verlängerung zu informieren.\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;über den sicheren Link erneuern \u0026lt;a href=\u0026#34;https://elettrogi.it/\u0026#34; target=\u0026#34;_blank\u0026#34; rel=\u0026#34;noopener noreferrer\u0026#34;\u0026gt;\u0026lt;strong\u0026gt;https://renew.\u0026lt;em style=\u0026#34;color: rgb(0, 0, 0); font-style: inherit; background-color: rgb(255, 255, 102);\u0026#34;\u0026gt;netcup\u0026lt;/em\u0026gt;.de\u0026lt;/strong\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;Wir möchten sicherstellen, dass Ihre Online-Präsenz reibungslos läuft und Ihr geschäftlicher Erfolg nicht beeinträchtigt wird. Daher empfehlen wir Ihnen dringend, die Verlängerung Ihrer Domain vor dem Ablaufdatum zu beantragen. Indem Sie Ihre Domain verlängern, stellen Sie sicher, dass Ihre Webseite weiterhin erreichbar ist und Ihr E-Mail-Konto aktiv bleibt.\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;Dein \u0026lt;em style=\u0026#34;color: rgb(0, 0, 0); font-style: inherit; background-color: rgb(255, 255, 102);\u0026#34;\u0026gt;netcup\u0026lt;/em\u0026gt; team\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;---------------------------------------------------------\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026lt;em style=\u0026#34;color: rgb(0, 0, 0); font-style: inherit; background-color: rgb(255, 255, 102);\u0026#34;\u0026gt;netcup\u0026lt;/em\u0026gt; GmbH\u0026lt;br\u0026gt;Managing Directors:\u0026lt;br\u0026gt;- Oliver Werner\u0026lt;br\u0026gt;- Alexander Windbichler\u0026lt;br\u0026gt;Daimlerstr. 25\u0026lt;br\u0026gt;D-76185 Karlsruhe\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;Phone: +49 721 / 7540755 - 0\u0026lt;br\u0026gt;Fax: +49 721 / 7540755 - 9\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026lt;br\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;Commercial register: HRB 705547, Amtsgericht Mannheim \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;--------------------------------------------------------- \u0026lt;br\u0026gt;\u0026lt;/p\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\t\u0026lt;div class=\u0026#34;msg-view-quoted-message-button removed\u0026#34; dojoattachpoint=\u0026#34;_showQuotedNode\u0026#34;\u0026gt;\u0026lt;br\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026#34;attachments-area-container dijitContentPane collapsed removed all-deleted\u0026#34; id=\u0026#34;uiLogic_webmail__view_AttachmentsArea_0\u0026#34; role=\u0026#34;group\u0026#34; dir=\u0026#34;ltr\u0026#34; dojotype=\u0026#34;uiLogic.webmail._view.AttachmentsArea\u0026#34; widgetid=\u0026#34;uiLogic_webmail__view_AttachmentsArea_0\u0026#34; region=\u0026#34;bottom\u0026#34;\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026#34;box\u0026#34; role=\u0026#34;attachments-area\u0026#34;\u0026gt; \u0026lt;div class=\u0026#34;attachments-download-warp\u0026#34; role=\u0026#34;attachments-download-warp\u0026#34; style=\u0026#34;display: none;\u0026#34;\u0026gt; \u0026lt;div class=\u0026#34;view-attachments-info\u0026#34; role=\u0026#34;attachments-info\u0026#34;\u0026gt;2 Attachment(s) (0.9 KB)\u0026lt;/div\u0026gt;\u0026lt;span class=\u0026#34;dijit dijitReset dijitInline attachments-download dijitButton\u0026#34; widgetid=\u0026#34;dijit_form_Button_42\u0026#34;\u0026gt;\u0026lt;span class=\u0026#34;dijitReset dijitInline dijitButtonNode\u0026#34; dojoattachevent=\u0026#34;ondijitclick:_onButtonClick\u0026#34;\u0026gt;\u0026lt;span tabindex=\u0026#34;0\u0026#34; class=\u0026#34;dijitReset dijitStretch dijitButtonContents\u0026#34; id=\u0026#34;dijit_form_Button_42\u0026#34; role=\u0026#34;button\u0026#34; aria-labelledby=\u0026#34;dijit_form_Button_42_label\u0026#34; style=\u0026#34;opacity: 0; user-select: none;\u0026#34; dojoattachpoint=\u0026#34;titleNode,focusNode\u0026#34; wairole=\u0026#34;button\u0026#34; waistate=\u0026#34;labelledby-dijit_form_Button_42_label\u0026#34;\u0026gt;\u0026lt;span class=\u0026#34;dijitReset dijitInline dijitIcon\u0026#34; dojoattachpoint=\u0026#34;iconNode\u0026#34;\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;span class=\u0026#34;dijitReset dijitToggleButtonIconChar\u0026#34;\u0026gt;?\u0026lt;/span\u0026gt;\u0026lt;span class=\u0026#34;dijitReset dijitInline dijitButtonText\u0026#34; id=\u0026#34;dijit_form_Button_42_label\u0026#34; dojoattachpoint=\u0026#34;containerNode\u0026#34;\u0026gt;Download all attachments\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;input class=\u0026#34;dijitOffScreen\u0026#34; type=\u0026#34;button\u0026#34; dojoattachpoint=\u0026#34;valueNode\u0026#34;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026#34;dijit dijitReset dijitInline attachments-show dijitButton\u0026#34; widgetid=\u0026#34;dijit_form_Button_44\u0026#34;\u0026gt;\u0026lt;span class=\u0026#34;dijitReset dijitInline dijitButtonNode\u0026#34; dojoattachevent=\u0026#34;ondijitclick:_onButtonClick\u0026#34;\u0026gt;\u0026lt;span tabindex=\u0026#34;0\u0026#34; class=\u0026#34;dijitReset dijitStretch dijitButtonContents\u0026#34; id=\u0026#34;dijit_form_Button_44\u0026#34; role=\u0026#34;button\u0026#34; aria-labelledby=\u0026#34;dijit_form_Button_44_label\u0026#34; style=\u0026#34;opacity: 0; user-select: none;\u0026#34; dojoattachpoint=\u0026#34;titleNode,focusNode\u0026#34; wairole=\u0026#34;button\u0026#34; waistate=\u0026#34;labelledby-dijit_form_Button_44_label\u0026#34;\u0026gt;\u0026lt;span class=\u0026#34;dijitReset dijitInline dijitIcon\u0026#34; dojoattachpoint=\u0026#34;iconNode\u0026#34;\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;span class=\u0026#34;dijitReset dijitToggleButtonIconChar\u0026#34;\u0026gt;?\u0026lt;/span\u0026gt;\u0026lt;span class=\u0026#34;dijitReset dijitInline dijitButtonText\u0026#34; id=\u0026#34;dijit_form_Button_44_label\u0026#34; dojoattachpoint=\u0026#34;containerNode\u0026#34;\u0026gt;Show attachments\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;input class=\u0026#34;dijitOffScreen\u0026#34; type=\u0026#34;button\u0026#34; dojoattachpoint=\u0026#34;valueNode\u0026#34;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026#34;back-panel removed\u0026#34;\u0026gt;\u0026lt;span class=\u0026#34;dijit dijitReset dijitInline attachments-toggle view-landscape-button viewNextIcon dijitButton\u0026#34; widgetid=\u0026#34;dijit_form_Button_43\u0026#34;\u0026gt;\u0026lt;span class=\u0026#34;dijitReset dijitInline dijitButtonNode\u0026#34; dojoattachevent=\u0026#34;ondijitclick:_onButtonClick\u0026#34;\u0026gt;\u0026lt;span tabindex=\u0026#34;0\u0026#34; title=\u0026#34;Hide\u0026#34; class=\u0026#34;dijitReset dijitStretch dijitButtonContents\u0026#34; id=\u0026#34;dijit_form_Button_43\u0026#34; role=\u0026#34;button\u0026#34; aria-labelledby=\u0026#34;dijit_form_Button_43_label\u0026#34; style=\u0026#34;user-select: none;\u0026#34; dojoattachpoint=\u0026#34;titleNode,focusNode\u0026#34; wairole=\u0026#34;button\u0026#34; waistate=\u0026#34;labelledby-dijit_form_Button_43_label\u0026#34;\u0026gt;\u0026lt;span class=\u0026#34;dijitReset dijitInline dijitIcon\u0026#34; dojoattachpoint=\u0026#34;iconNode\u0026#34;\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;span class=\u0026#34;dijitReset dijitToggleButtonIconChar\u0026#34;\u0026gt;?\u0026lt;/span\u0026gt;\u0026lt;span class=\u0026#34;dijitReset dijitInline dijitButtonText\u0026#34; id=\u0026#34;dijit_form_Button_43_label\u0026#34; dojoattachpoint=\u0026#34;containerNode\u0026#34;\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;input class=\u0026#34;dijitOffScreen\u0026#34; type=\u0026#34;button\u0026#34; dojoattachpoint=\u0026#34;valueNode\u0026#34;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026#34;box\u0026#34; role=\u0026#34;attachments\u0026#34;\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/body\u0026gt; The mail source #Return-Path: \u0026lt;postmaster@onedk.net\u0026gt; Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by sloti44n20 (Cyrus 3.9.0-alpha0-1108-g3a29173c6d-fm-20231031.005-g3a29173c) with LMTPA; Fri, 17 Nov 2023 08:04:12 -0500 X-Cyrus-Session-Id: sloti44n20-1700226252-3181116-2-9777549396983539035 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-sender-reputation: 0 (email; noauth) X-Spam-score: 14.5 X-Spam-hits: BAYES_99 3.5, BAYES_999 1.2, DCC_CHECK 1.1, DCC_REPUT_90_94 0.6, FSL_BULK_SIG 1.593, HTML_MESSAGE 0.001, HTML_MIME_NO_HTML_TAG 0.377, HTTPS_HTTP_MISMATCH 0.1, ME_NOAUTH 0.01, ME_SC_NH -0.001, ME_SENDERREP_DENY 4, ME_VADEPHISHING 2, MIME_HTML_ONLY 0.1, SPF_HELO_NONE 0.001, SPF_NONE 0.001, T_SCC_BODY_TEXT_LINE -0.01, LANGUAGES de, BAYES_USED user, SA_VERSION 3.4.6 X-Backscatter: NotFound1 X-Backscatter-Hosts: X-Spam-source: IP=\u0026#39;37.120.188.231\u0026#39;, Host=\u0026#39;v2202311112809242991.luckysrv.de\u0026#39;, Country=\u0026#39;DE\u0026#39;, FromHeader=\u0026#39;net\u0026#39;, MailFrom=\u0026#39;net\u0026#39; X-Spam-charsets: html=\u0026#39;windows-1252\u0026#39; X-Resolved-to: dominic@... X-Delivered-to: dominic@noreply.... X-Mail-from: postmaster@onedk.net Received: from mx4 ([10.202.2.203]) by compute1.internal (LMTPProxy); Fri, 17 Nov 2023 08:04:12 -0500 Received: from mx4.messagingengine.com (localhost [127.0.0.1]) by mailmx.nyi.internal (Postfix) with ESMTP id 7FA301F20122 for \u0026lt;dominic@noreply....\u0026gt;; Fri, 17 Nov 2023 08:04:11 -0500 (EST) Received: from mailmx.nyi.internal (localhost [127.0.0.1]) by mx4.messagingengine.com (Authentication Milter) with ESMTP id 17A016E9B26.8E0F31F2037D; Fri, 17 Nov 2023 08:04:11 -0500 ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=fm1; t= 1700226251; b=LpZ7c6e8oXo/abJ3c3SIgseAfYAwmkcgCE9cMryacWzUPDXywM 2Bu+k0NpXZJaKcrAdOyuejBwIiFyqSq+TK/glo0Hk6DmC7TE8yw0HlddNInKUJ53 Fc/rTiqmgPpJXrUwryrmEZ4jJTcR+GIoUtXEIweftEhongl3cZvcVXf0gaE0Zxcg Za3pbOgZ8xEBJADOyvCNPeZOAaNvNF5C19ylzywj0UO6lDX7v58OVI0GKyqdIMH9 i0kvloD/B/CDHnT6jHWav2C35s5NKnHX+SuNQ4/CPOG7uuRiC3+S2G4pTwP542Cq Pu87hi1GKiH5VuM8m92JH9nwb70r5fB+fRCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=mime-version:from:reply-to:to:subject :content-type:content-transfer-encoding📅message-id; s=fm1; t=1700226251; bh=NbXSTJaTKSRZgsx8I0IN3ukxEcOTFS+VrpzkYzr/Un8=; b= lmluPcXbKIM06qPoH+sQ2YXHJlP5FQFfF/R43bgajaKkZ3mO5x7uGQA0BFsF+c1M qwrJG7rG6hxW8aKmnlNyRIskwVt393qYEnCk29qDK4qVcG/34wlYG1J1jpMqPXXm 1oJx1wYrpvelG3ADuTXHXJcleupCGdCIwlo9y9InuAjKOMGjLW8zxCKVv2DvRQ8r o8CNKpGY6iLcBctsE40CuXNHvNaxH9jsnXTqhhI6WJjugPek7JAof4JRSJDvVJX6 aZ7pl4xOsHH0psrC2u+kUUUiIvjFNoU+MBbsK0aG/ezThetyaYwkjQPuD0ZNgU5H t5gJ0HdrTFSeQUft9LQlEg== ARC-Authentication-Results: i=1; mx4.messagingengine.com; x-csa=none; x-me-sender=none; x-ptr=pass smtp.helo=v2202311112809242991.luckysrv.de policy.ptr=v2202311112809242991.luckysrv.de; bimi=skipped (DMARC did not pass); arc=none (no signatures found); dkim=invalid (public key: not available, unknown key sha256) header.d=onedk.net header.i=@onedk.net header.b=tKBKfGAz header.a=unknown-sha256 header.s=dkim; dmarc=none policy.published-domain-policy=none policy.applied-disposition=none policy.evaluated-disposition=none (p=none,d=none,d.eval=none) policy.policy-from=p header.from=onedk.net; iprev=pass smtp.remote-ip=37.120.188.231 (v2202311112809242991.luckysrv.de); spf=none smtp.mailfrom=postmaster@onedk.net smtp.helo=v2202311112809242991.luckysrv.de X-ME-Authentication-Results: mx4.messagingengine.com; x-aligned-from=pass (Address match); x-return-mx=pass header.domain=onedk.net policy.is_org=yes (MX Records found: mx-biz.mail.am0.yahoodns.net,mx-biz.mail.am0.yahoodns.net); x-return-mx=pass smtp.domain=onedk.net policy.is_org=yes (MX Records found: mx-biz.mail.am0.yahoodns.net,mx-biz.mail.am0.yahoodns.net); x-tls=pass smtp.version=TLSv1.3 smtp.cipher=TLS_AES_256_GCM_SHA384 smtp.bits=256/256; x-vs=phishing score=607 state=101 Authentication-Results: mx4.messagingengine.com; x-csa=none; x-me-sender=none; x-ptr=pass smtp.helo=v2202311112809242991.luckysrv.de policy.ptr=v2202311112809242991.luckysrv.de Authentication-Results: mx4.messagingengine.com; bimi=skipped (DMARC did not pass) Authentication-Results: mx4.messagingengine.com; arc=none (no signatures found) Authentication-Results: mx4.messagingengine.com; dkim=invalid (public key: not available, unknown key sha256) header.d=onedk.net header.i=@onedk.net header.b=tKBKfGAz header.a=unknown-sha256 header.s=dkim; dmarc=none policy.published-domain-policy=none policy.applied-disposition=none policy.evaluated-disposition=none (p=none,d=none,d.eval=none) policy.policy-from=p header.from=onedk.net; iprev=pass smtp.remote-ip=37.120.188.231 (v2202311112809242991.luckysrv.de); spf=none smtp.mailfrom=postmaster@onedk.net smtp.helo=v2202311112809242991.luckysrv.de X-ME-VSCause: gggruggvucftvghtrhhoucdtuddrgedvkedrudegtddggeejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucgorfhhihhshhhinhhgqd fkkffrucdliedtjedmnecujfgurhepggfhrhfvufgtgffofffksehhqhertdertdehnecu hfhrohhmpedfpfgvthgtuhhpucfimhgsjfdfuceophhoshhtmhgrshhtvghrsehonhgvug hkrdhnvghtqeenucggtffrrghtthgvrhhnpeffffdufeffudeiieelueeghfeiteffhfdt hffhveeigffgfeefheelteejkeeuudenucffohhmrghinhepvghlvghtthhrohhgihdrih htpdhnvghttghuphdruggvnecukfhppeefjedruddvtddrudekkedrvdefudenucfrhhhi shhhihhnghdqkffkrfephhhtthhpshemsddsvghlvghtthhrohhgihdrihhtnecuvehluh hsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepfeejrdduvddtrddukeekrddv fedupdhhvghlohepvhdvvddtvdefudduudduvdektdelvdegvdelledurdhluhgtkhihsh hrvhdruggvpdhmrghilhhfrhhomhepoehpohhsthhmrghsthgvrhesohhnvggukhdrnhgv theqpdhnsggprhgtphhtthhopedupdhrtghpthhtohepoeguohhmihhnihgtsehnohhrvg hplhihrdhovgejughrthdrtghomheq X-ME-VSScore: 607 X-ME-VSCategory: phishing X-ME-CSA: none Received-SPF: none (onedk.net: No applicable sender policy available) receiver=mx4.messagingengine.com; identity=mailfrom; envelope-from=\u0026#34;postmaster@onedk.net\u0026#34;; helo=v2202311112809242991.luckysrv.de; client-ip=37.120.188.231 Received: from v2202311112809242991.luckysrv.de (v2202311112809242991.luckysrv.de [37.120.188.231]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx4.messagingengine.com (Postfix) with ESMTPS id 8E0F31F2037D for \u0026lt;dominic@noreply....\u0026gt;; Fri, 17 Nov 2023 08:03:44 -0500 (EST) Received: from v2202311112809242991.luckysrv.de (localhost [127.0.0.1]) by v2202311112809242991.luckysrv.de (Postfix) with ESMTP id 4SWxs61BzJz48xN for \u0026lt;dominic@noreply....\u0026gt;; Fri, 17 Nov 2023 14:02:50 +0100 (CET) Authentication-Results: v2202311112809242991.luckysrv.de (amavis); dkim=pass reason=\u0026#34;pass (just generated, assumed good)\u0026#34; header.d=onedk.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=onedk.net; h= message-id📅x-mailer:content-transfer-encoding:content-type :subject:to:reply-to:from:mime-version; s=dkim; t=1700226169; x= 1702818170; bh=mEPVMchXmulep+z6c+qm5ufujgLqwDgvxHEmacERCZA=; b=t KBKfGAzEtvWgwvWrD7w1wNLn5Ljp4RgfY5dBV+Y2EzCWLZVYJeih0lqaRU27jL61 ILRSW9WRbAu2tgr1M0wdQwOHQ4Dp7i3ps7AQJn4BpvFbTwR1b524Hs4t52xKMecy Zf/X+yRzlRPVTO5mi0sPK0tmAEvN+TBmcsldK9RKgwIr8qUFau99OBBZlDoYUMRV wMZOoJ3ccaPC5dooc/sDd+MbQSaGKH1Ubum0Ld9VtdOHlWHFs+tpujzYC/L/kxLl 4k/BSYsGw4IUurCbPZnoR5TIBuAV2hy4caZMtFELmeOG7ZuQjvr8wMJUNhwflzeQ OUiV2kgjdZsHb3mtnjzHg== X-Virus-Scanned: Debian amavis at v2202311112809242991.luckysrv.de Received: from v2202311112809242991.luckysrv.de ([127.0.0.1]) by v2202311112809242991.luckysrv.de (v2202311112809242991.luckysrv.de [127.0.0.1]) (amavis, port 10024) with ESMTP id nPsir9OSICbE for \u0026lt;dominic@noreply....\u0026gt;; Fri, 17 Nov 2023 14:02:49 +0100 (CET) Received: from vmi1464682 (localhost [IPv6:::1]) by v2202311112809242991.luckysrv.de (Postfix) with ESMTPS id 4SWxs55N6sz48x5 for \u0026lt;dominic@noreply....\u0026gt;; Fri, 17 Nov 2023 14:02:49 +0100 (CET) MIME-Version: 1.0 From: \u0026#34;Netcup GmbH\u0026#34; \u0026lt;postmaster@onedk.net\u0026gt; Reply-To: postmaster@onedk.net To: dominic@noreply.... Subject: Deaktivierung des E-Mail-Postfachs aufgrund des Ablaufs der Domain oe7drt.com Content-Type: text/html; charset=\u0026#34;windows-1252\u0026#34; Content-Transfer-Encoding: quoted-printable X-Mailer: Smart_Send_4_4_2 Date: Fri, 17 Nov 2023 14:02:49 +0100 Message-ID: \u0026lt;5196428650656248899676@vmi1464682\u0026gt; \u0026lt;head\u0026gt;=0A =0A\u0026lt;meta http-equiv=3D\u0026#34;Content-Type\u0026#34; content=3D\u0026#34;text/html; charse= t=3Dwindows-1252\u0026#34;\u0026gt; =0A\u0026lt;meta name=3D\u0026#34;GENERATOR\u0026#34; content=3D\u0026#34;MSHTML 11.00.105= 70.1001\u0026#34;\u0026gt;\u0026lt;/head\u0026gt; =0A\u0026lt;body\u0026gt;=0A\u0026lt;div class=3D\u0026#34;content-message\u0026#34; dojoattachpoint= =3D\u0026#34;contentMsgPane\u0026#34;\u0026gt;=0A\u0026lt;div class=3D\u0026#34;text msg-view-text\u0026#34; role=3D\u0026#34;text\u0026#34;\u0026gt;=0A\u0026lt;= div class=3D\u0026#34;msg-view-text-cnt\u0026#34; dojoattachpoint=3D\u0026#34;_messageTextCntNode\u0026#34;\u0026gt;=0A= \u0026lt;div class=3D\u0026#34;xam_msg_class\u0026#34;\u0026gt;=0A\u0026lt;meta content=3D\u0026#34;text/html\u0026#34;\u0026gt; =0A\u0026lt;p\u0026gt;Sehr = geehrte/r\u0026lt;/p\u0026gt;=0A\u0026lt;p\u0026gt;\u0026lt;br\u0026gt;\u0026lt;/p\u0026gt;=0A\u0026lt;p\u0026gt;Wir m=F6chten Sie heute freundlich daran e= rinnern, dass die =0A Domain\u0026amp;nbsp;\u0026lt;strong\u0026gt;oe7drt.com\u0026lt;/strong\u0026gt;\u0026amp;nbsp;Ihrer Fi= rma, mit der dieses =0A E-Mail-Konto verbunden ist, am \u0026lt;strong\u0026gt;17.11.2023\u0026lt;= /strong\u0026gt; abl=E4uft. Als =0A verantwortungsbewusster Anbieter ist es uns ei= n Anliegen, Ihnen rechtzeitig =0A=FCber diese bevorstehende Verl=E4ngerun= g zu informieren.\u0026lt;/p\u0026gt;=0A\u0026lt;p\u0026gt;=FCber den sicheren Link erneuern \u0026lt;a href=3D\u0026#34;htt= ps://elettrogi.it/\u0026#34; target=3D\u0026#34;_blank\u0026#34; rel=3D\u0026#34;noopener noreferrer\u0026#34;\u0026gt;\u0026lt;strong\u0026gt;h= ttps://renew.\u0026lt;em style=3D\u0026#34;color: rgb(0, 0, 0); font-style: inherit; backgro= und-color: rgb(255, 255, 102);\u0026#34;\u0026gt;netcup\u0026lt;/em\u0026gt;.de\u0026lt;/strong\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;/p\u0026gt;=0A\u0026lt;p\u0026gt;Wir m= =F6chten sicherstellen, dass Ihre Online-Pr=E4senz reibungslos l=E4uft und = Ihr =0A gesch=E4ftlicher Erfolg nicht beeintr=E4chtigt wird. Daher empfehle= n wir Ihnen =0A dringend, die Verl=E4ngerung Ihrer Domain vor dem Ablaufda= tum zu beantragen. =0AIndem Sie Ihre Domain verl=E4ngern, stellen Sie sic= her, dass Ihre Webseite =0Aweiterhin erreichbar ist und Ihr E-Mail-Konto = aktiv bleibt.\u0026lt;/p\u0026gt;=0A\u0026lt;p\u0026gt;Dein \u0026lt;em style=3D\u0026#34;color: rgb(0, 0, 0); font-style: i= nherit; background-color: rgb(255, 255, 102);\u0026#34;\u0026gt;netcup\u0026lt;/em\u0026gt; =0Ateam\u0026lt;/p\u0026gt;=0A\u0026lt;p= \u0026gt;---------------------------------------------------------\u0026lt;/p\u0026gt;=0A\u0026lt;p\u0026gt;\u0026lt;em sty= le=3D\u0026#34;color: rgb(0, 0, 0); font-style: inherit; background-color: rgb(255, = 255, 102);\u0026#34;\u0026gt;netcup\u0026lt;/em\u0026gt; =0AGmbH\u0026lt;br\u0026gt;Managing Directors:\u0026lt;br\u0026gt;- Oliver Werner\u0026lt;b= r\u0026gt;- Alexander =0A Windbichler\u0026lt;br\u0026gt;Daimlerstr. 25\u0026lt;br\u0026gt;D-76185 Karlsruhe\u0026lt;/p\u0026gt;= =0A\u0026lt;p\u0026gt;Phone: +49 721 / 7540755 - 0\u0026lt;br\u0026gt;Fax: +49 721 / 7540755 - 9\u0026lt;/p\u0026gt;=0A\u0026lt;p\u0026gt;\u0026lt;= br\u0026gt;\u0026lt;/p\u0026gt;=0A\u0026lt;p\u0026gt;Commercial register: HRB 705547, Amtsgericht Mannheim \u0026lt;/p\u0026gt;=0A\u0026lt;= p\u0026gt;--------------------------------------------------------- =0A\u0026lt;br\u0026gt;\u0026lt;/p\u0026gt;\u0026lt;= /div\u0026gt;\u0026lt;/div\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\t=0A\u0026lt;div class=3D\u0026#34;msg-view-quoted-messag= e-button removed\u0026#34; dojoattachpoint=3D\u0026#34;_showQuotedNode\u0026#34;\u0026gt;\u0026lt;br\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt;=0A\u0026lt;d= iv class=3D\u0026#34;attachments-area-container dijitContentPane collapsed removed a= ll-deleted\u0026#34; id=3D\u0026#34;uiLogic_webmail__view_AttachmentsArea_0\u0026#34; role=3D\u0026#34;group\u0026#34; d= ir=3D\u0026#34;ltr\u0026#34; dojotype=3D\u0026#34;uiLogic.webmail._view.AttachmentsArea\u0026#34; widgetid=3D\u0026#34;u= iLogic_webmail__view_AttachmentsArea_0\u0026#34; region=3D\u0026#34;bottom\u0026#34;\u0026gt;=0A\u0026lt;div\u0026gt;=0A\u0026lt;div c= lass=3D\u0026#34;box\u0026#34; role=3D\u0026#34;attachments-area\u0026#34;\u0026gt;=0A\u0026lt;div class=3D\u0026#34;attachments-downloa= d-warp\u0026#34; role=3D\u0026#34;attachments-download-warp\u0026#34; style=3D\u0026#34;display: none;\u0026#34;\u0026gt;=0A\u0026lt;div= class=3D\u0026#34;view-attachments-info\u0026#34; role=3D\u0026#34;attachments-info\u0026#34;\u0026gt;2 Attachment(s) = (0.9 =0A KB)\u0026lt;/div\u0026gt;\u0026lt;span class=3D\u0026#34;dijit dijitReset dijitInline attachments-d= ownload dijitButton\u0026#34; widgetid=3D\u0026#34;dijit_form_Button_42\u0026#34;\u0026gt;\u0026lt;span class=3D\u0026#34;dijit= Reset dijitInline dijitButtonNode\u0026#34; dojoattachevent=3D\u0026#34;ondijitclick:_onButto= nClick\u0026#34;\u0026gt;\u0026lt;span tabindex=3D\u0026#34;0\u0026#34; class=3D\u0026#34;dijitReset dijitStretch dijitButtonCo= ntents\u0026#34; id=3D\u0026#34;dijit_form_Button_42\u0026#34; role=3D\u0026#34;button\u0026#34; aria-labelledby=3D\u0026#34;diji= t_form_Button_42_label\u0026#34; style=3D\u0026#34;opacity: 0; user-select: none;\u0026#34; dojoattach= point=3D\u0026#34;titleNode,focusNode\u0026#34; wairole=3D\u0026#34;button\u0026#34; waistate=3D\u0026#34;labelledby-dij= it_form_Button_42_label\u0026#34;\u0026gt;\u0026lt;span class=3D\u0026#34;dijitReset dijitInline dijitIcon\u0026#34; d= ojoattachpoint=3D\u0026#34;iconNode\u0026#34;\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;span class=3D\u0026#34;dijitReset dijitToggleBut= tonIconChar\u0026#34;\u0026gt;=3F\u0026lt;/span\u0026gt;\u0026lt;span class=3D\u0026#34;dijitReset dijitInline dijitButtonTex= t\u0026#34; id=3D\u0026#34;dijit_form_Button_42_label\u0026#34; dojoattachpoint=3D\u0026#34;containerNode\u0026#34;\u0026gt;Down= load all =0A attachments\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;input class=3D\u0026#34;dijitOffScreen= \u0026#34; type=3D\u0026#34;button\u0026#34; dojoattachpoint=3D\u0026#34;valueNode\u0026#34;\u0026gt;\u0026lt;/span\u0026gt;=0A\t\u0026lt;span class= =3D\u0026#34;dijit dijitReset dijitInline attachments-show dijitButton\u0026#34; widgetid=3D\u0026#34;= dijit_form_Button_44\u0026#34;\u0026gt;\u0026lt;span class=3D\u0026#34;dijitReset dijitInline dijitButtonNode= \u0026#34; dojoattachevent=3D\u0026#34;ondijitclick:_onButtonClick\u0026#34;\u0026gt;\u0026lt;span tabindex=3D\u0026#34;0\u0026#34; clas= s=3D\u0026#34;dijitReset dijitStretch dijitButtonContents\u0026#34; id=3D\u0026#34;dijit_form_Button_4= 4\u0026#34; role=3D\u0026#34;button\u0026#34; aria-labelledby=3D\u0026#34;dijit_form_Button_44_label\u0026#34; style=3D\u0026#34;= opacity: 0; user-select: none;\u0026#34; dojoattachpoint=3D\u0026#34;titleNode,focusNode\u0026#34; wai= role=3D\u0026#34;button\u0026#34; waistate=3D\u0026#34;labelledby-dijit_form_Button_44_label\u0026#34;\u0026gt;\u0026lt;span cl= ass=3D\u0026#34;dijitReset dijitInline dijitIcon\u0026#34; dojoattachpoint=3D\u0026#34;iconNode\u0026#34;\u0026gt;\u0026lt;/spa= n\u0026gt;\u0026lt;span class=3D\u0026#34;dijitReset dijitToggleButtonIconChar\u0026#34;\u0026gt;=3F\u0026lt;/span\u0026gt;\u0026lt;span clas= s=3D\u0026#34;dijitReset dijitInline dijitButtonText\u0026#34; id=3D\u0026#34;dijit_form_Button_44_lab= el\u0026#34; dojoattachpoint=3D\u0026#34;containerNode\u0026#34;\u0026gt;Show =0A attachments\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/s= pan\u0026gt;\u0026lt;input class=3D\u0026#34;dijitOffScreen\u0026#34; type=3D\u0026#34;button\u0026#34; dojoattachpoint=3D\u0026#34;valu= eNode\u0026#34;\u0026gt;\u0026lt;/span\u0026gt;=0A\t=0A\u0026lt;div class=3D\u0026#34;back-panel removed\u0026#34;\u0026gt;\u0026lt;span class=3D\u0026#34;d= ijit dijitReset dijitInline attachments-toggle view-landscape-button viewNe= xtIcon dijitButton\u0026#34; widgetid=3D\u0026#34;dijit_form_Button_43\u0026#34;\u0026gt;\u0026lt;span class=3D\u0026#34;dijitR= eset dijitInline dijitButtonNode\u0026#34; dojoattachevent=3D\u0026#34;ondijitclick:_onButton= Click\u0026#34;\u0026gt;\u0026lt;span tabindex=3D\u0026#34;0\u0026#34; title=3D\u0026#34;Hide\u0026#34; class=3D\u0026#34;dijitReset dijitStretch= dijitButtonContents\u0026#34; id=3D\u0026#34;dijit_form_Button_43\u0026#34; role=3D\u0026#34;button\u0026#34; aria-labe= lledby=3D\u0026#34;dijit_form_Button_43_label\u0026#34; style=3D\u0026#34;user-select: none;\u0026#34; dojoatta= chpoint=3D\u0026#34;titleNode,focusNode\u0026#34; wairole=3D\u0026#34;button\u0026#34; waistate=3D\u0026#34;labelledby-d= ijit_form_Button_43_label\u0026#34;\u0026gt;\u0026lt;span class=3D\u0026#34;dijitReset dijitInline dijitIcon\u0026#34;= dojoattachpoint=3D\u0026#34;iconNode\u0026#34;\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;span class=3D\u0026#34;dijitReset dijitToggleB= uttonIconChar\u0026#34;\u0026gt;=3F\u0026lt;/span\u0026gt;\u0026lt;span class=3D\u0026#34;dijitReset dijitInline dijitButtonT= ext\u0026#34; id=3D\u0026#34;dijit_form_Button_43_label\u0026#34; dojoattachpoint=3D\u0026#34;containerNode\u0026#34;\u0026gt;\u0026lt;/= span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;input class=3D\u0026#34;dijitOffScreen\u0026#34; type=3D\u0026#34;button\u0026#34; dojoatta= chpoint=3D\u0026#34;valueNode\u0026#34;\u0026gt;\u0026lt;/span\u0026gt;=0A\t\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt;=0A\u0026lt;div class=3D\u0026#34;box\u0026#34; role= =3D\u0026#34;attachments\u0026#34;\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt;=0A\u0026lt;/body\u0026gt; Please ignore the 📅 signs in the sourcecode above, the content ist \u0026ldquo;emojified\u0026rdquo; and I have currently no idea how to turn this off\u0026hellip; Why is this email invalid? #First of all, the sending host is not a Netcup GmbH server, it\u0026rsquo;s hostname is v2202311112809242991.luckysrv.de. This makes the mail suspicious, but the main criteria why this email is no valid in no way: my domain oe7drt.com is not managed at Netcup at all. There is just an A and AAAA (and others) record that points to a root server at Netcup.\nUpdate on Nov 18 2023: Oh, just because I updated the new URL they present you: they also send from a new hostname: v2202311110463243091.nicesrv.de \u0026ndash; well, both domains are saved on Netcup DNS servers which may indicate something ;-) I thought I might share this one as well, because I get about 6-8 emails per day about my \u0026ldquo;netcup domain\u0026rdquo;. The fun thing is, one of the domain has a noreply in the domain name; I use this for several git repositories (like Github does). And to eliminate any kind of misinterpretation: the domain includes noreply \u0026ndash; not nodeliver.\nQuite a few huh? # Quantity is not the same as quality. ","date":"17 November 2023","permalink":"/spam/2023-11-17-netcup-phishing/","section":"Mail spam I received","summary":"They really think I got my domain from Netcup *lol*","title":"Netcup phishing","updated":"11 January 2025"},{"content":"","date":null,"permalink":"/tags/radiomail/","section":"Tags","summary":"","title":"Radiomail","updated":null},{"content":"Have a look at the recent (as of today) announcement which already explains all the new features: 🔗 https://radiomail.app/news/radiomail-1.2/\nUpdated on 18 Feb 2024: Since this post was published 🔗 another version appeared that also includes the possibility to remotely start and control VARA HF and VARA FM applications on a headless Windows or Linux miniPC (or laptop, or Raspberry Pi \u0026ndash; whatever device can run VARA apps as long as it in the same network as your iOS device).\nThe tool used for this is called Varanny and auto-fills the remote hosts data into your RadioMail configuration just with a tap of your finger \u0026ndash; it starts the desired VARA application on the remote host with the pre-defined configuration, so you can easily swap configurations as you swap your rigs. A fantastic solution!\nDownloads and Documentation (look at the README file and the Wiki page!) are on 🔗 Georges Github repository.\nGet the app and: Pricing 💰 #Find the application in Apples AppStore: be aware that it might cost something. I paid 17.99€ in October 2023. If you want to use Winlink Forms you have to subscribe to a yearly (9.99€) or monthly (1.99€) plan to support the developer.\nI\u0026rsquo;d like to point out, that you always have to pay for software. Either with money, or with your personal information. The big tech companies like Google for example get paid with information that most of us deliver with their smartphones and laptops. That is one reason why YouTube hates adblockers.\nBut that is another story\u0026hellip; Winlink Forms 📝 #Winlink forms work very well. There is also a way to import your self-made forms \u0026ndash; which also works very well on most forms. I got one form that I was unable to import, but I haven\u0026rsquo;t found the reason yet (it gets imported into Winlink Express without problems though).\nSome forms can be found here: WLNET-OE (weekly winlink net; Austria)\nSetup the application #Using your Winlink username (callsign) and your Winlink password (the same that you would use for Winlink Express on a Windows Computer).\nA quick walkthrough via TELNET #Tap Stations in the top right corner and add the WL2K station to your favorites (if it\u0026rsquo;s not in there already).\nTap the envelope ✉ in the bottom left corner and choose the WL2K station from your favorites. Choose Send \u0026amp; Receive and hit Connect.\nThat\u0026rsquo;s it basically.\nUsing the Mobilinkd TNC4 with the Icom ID-52 #Basic configuration of the TNC with Mobilinkd Config App #As with most equipment, you need to set the audio levels on the Mobilinkd TNC. There is a configuration app at the AppStore.\nTNC input settings TNC output settings I have this currently on 2 and 9dB This is currently on 40 Gain and 50 Twist; Multiplex The actual battery state can be viewed in Power Settings\u0026hellip;.\nAfter you finished the confgiguration, disconnect the Config App from your TNC.\nThe actual use of the TNC with RadioMail 🗼 #Connect the Mobilinkd TNC with an appropriate cable to your transceiver. I\u0026rsquo;m using my Icom ID-52 for this because this is the radio if have usually with me \u0026ndash; if any.\nRead through the 📖 User Manual as it is really helpful (yes I know, real men and specially tech geeks don\u0026rsquo;t need manuals \u0026ndash; they just post stupid questions on mailing lists later\u0026hellip;) Once you are in the app, select your favorites from the full stations view by tapping the top right button called Stations.\nSelect the station and tap Add to Favorites.\nNow, when you want to connect to a gateway, you can choose from your favorites from within the Connect screen by hitting Favorites.\nThen select the mode and your favorits get listed.\nCompose a message using forms #Compose a message while using forms by tapping and holding the button on the bottom right corner.\nDon\u0026rsquo;t forget: you need a subscription to use forms, as they require more maintainance to keep always updated with the regular Winlink Forms. Using RadioMail with VARA-HF #This is also valid for VARA-FM (but I won\u0026rsquo;t cover that, because I use the built-in packet option from RadioMail).\nYou need another device (usually a Windows Laptop or Tablet) that can run VARA-HF. Put your iPhone and the device that runs VARA-HF into the same network so they can talk to each other. Also enable the KISS interface in the VARA-HF software (or VARA-FM)!\nGo to Settings, VARA HF Modem (in DEVICES) and enter the IP Address of the host running VARA-HF. Example below:\nRadioMail on your iPhone can now talk to the VARA HF Modem on your Surface tablet (for example).\nWould I recommend using RadioMail instead of Winlink Express? #No, not yet as a Winlink Express replacement. The app is nice and it is really fun to use but there is no possibility to export messages from Winlink and import them into RadioMail and vice versa.\nAlso there is no synchronisation between the Winlink Express and the RadioMail mailboxes (like INBOX, Outbox, Sent Items etc.).\nAlso the failed import of one of the forms (link above) makes me feel a bit like the app ain\u0026rsquo;t fully ready for productive usage yet \u0026ndash; that may change anytime, so keep that in mind though.\nIf you only intend to use this portable with the minimum amount of equipment to carry: this may be the way to go. I really know very few people that do not carry a phone with them at all times and you only need a handheld radio with the Mobilinkd TNC to send and receive Winlink messages via PacketRadio.\n","date":"5 November 2023","permalink":"/posts/2023/58-winlink-on-my-iphone-with-radiomail/","section":"Blog","summary":"Finally there is an absolutely portable way to operate Winlink.","title":"Winlink on my iPhone with RadioMail","updated":"3 February 2026"},{"content":"These are notes that I will not or can not elaborate any further. Use them at your own risk!\n","date":null,"permalink":"/notes/","section":"Notes","summary":"","title":"Notes","updated":null},{"content":"TIL will be filled with \u0026ldquo;random\u0026rdquo;, probably useless, daily notes of things that I learned but will not create a full posting about.\n","date":null,"permalink":"/notes/til/","section":"Notes","summary":"","title":"Today I Learned","updated":null},{"content":"I\u0026rsquo;ve saved my main configuration files since years either on my NAS or on a git repository off site somewhere on the internet. I used Github for this (as many others did) but I started my own instance of Gitea when I created my own Mastodon instance at the end of 2022. I closed down both of them, my git repos moved over to Codeberg and because I used Cloudflare before I actually wanted to use Codeberg pages in the first place, but I went the rsync way. I now have a pre-push hook in my git repository of my website that rsyncs my hugo made website to my webserver\u0026hellip; But we should stay on topic here\u0026hellip;\ntl;dr I do have my dotfiles in a git repository on codeberg.org and I created the repository like:\nFirst of all, create an empty directory in your home directory \u0026ndash; I prefer a hidden one, so I\u0026rsquo;ll go for .cfg for now.\n$ git init --bare $HOME/.cfg An alias around git with specific worktree and git directory comes in handy at this moment. You can also create a function, this is totally up to you.\nI got a function in my zsh configuration and an alias in my fish configuration.\nIn my .zaliases file there is something like this:\n__is_available git \u0026amp;\u0026amp; [[ -d ~/.cfg ]] \\ \u0026amp;\u0026amp; function aconf { git --git-dir=$HOME/.cfg/ --work-tree=$HOME $@ } __is_available is another function that checks if a program is installed. My fish configuration looks like this:\nif type -q git; and test -d ~/.cfg # function aconf --description \u0026#34;Add files to dotfiles repo\u0026#34; alias aconf=\u0026#34;git --git-dir=$HOME/.cfg/ --work-tree=$HOME $argv\u0026#34; # end end Note, I had this as a function before (hence the comments (#)), but I wanted to try this as an alias only at the moment. I won\u0026rsquo;t update this post if I may change this back again.\nRunning aconf status in $HOME would print a huge list of files, we don\u0026rsquo;t want that (well, I do sometimes switch it on again to have a look at files or dirs that I may have missed to add) and we can ignore these untracked files with:\n$ aconf config --local status.showUntrackedFiles no If you want these files shown again, set it to normal.\nYou can set it to one of no, normal and all. ","date":"2 November 2023","permalink":"/posts/2023/57-publishing-dotfiles/","section":"Blog","summary":"Another quick'n'dirty post about how I published my dotfiles.","title":"Publishing dotfiles","updated":"29 September 2024"},{"content":"So this is basically a 140-43 toroid with 9 turns of RG174 connected to BNC connectors.\nIt works very well and I have made two measurements:\nThe maximum loss is on 10m around 0.2dB It attenuates common mode current with more than 20dB Another picture with open case:\nA look inside the \u0026ldquo;plastic\u0026rdquo; ","date":"26 October 2023","permalink":"/equipment/radio-stuff/accessories/homebrew-common-mode-choke/","section":"Equipment","summary":"A simple and quite tiny common mode choke that I built for my\nportable operations.","title":"Homebrew common mode choke","updated":"9 March 2025"},{"content":"","date":null,"permalink":"/categories/computerstuff-/","section":"Categories","summary":"","title":"Computerstuff' ]","updated":null},{"content":"I don\u0026rsquo;t like big mail attachments but when I see them I try to reduce their filesize because I think it should be possible to send pictures with good quality but with reduced filesize.\nWhenever I talk about filesizes or video sizes in this post, I want to send them via email. You can of course have big files with high bitrates, but forcing the mail recipient to download those in his email client is just not okay IMHO. For this I inspect images and videos with some basic commands.\nInspecting the video file #$ ll Video.MOV -rw------- 1 dominic dominic 10.7M Sep 23 19:05 Video.MOV $ file Video.MOV Video.MOV: ISO Media, Apple QuickTime movie, Apple QuickTime (.MOV/QT) $ ffmpeg -i Video.MOV ffmpeg version 4.4.4 Copyright (c) 2000-2023 the FFmpeg developers built with OpenBSD clang version 13.0.0 configuration: --enable-shared --arch=amd64 --cc=cc --enable-debug --disable-stripping --disable-indev=jack --disable-outdev=sdl2 --enable-fontconfig --enable-frei0r --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libdav1d --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libmp3lame --enable-libopus --enable-libspeex --enable-libtheora --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nonfree --enable-openssl --enable-libvidstab --extra-cflags=\u0026#39;-I/usr/local/include -I/usr/X11R6/include\u0026#39; --extra-libs=\u0026#39;-L/usr/local/lib -L/usr/X11R6/lib\u0026#39; --extra-ldsoflags= --mandir=/usr/local/man --objcc=/usr/bin/false --optflags=\u0026#39;-O2 -pipe -g -Wno-redundant-decls\u0026#39; libavutil 56. 70.100 / 56. 70.100 libavcodec 58.134.100 / 58.134.100 libavformat 58. 76.100 / 58. 76.100 libavdevice 58. 13.100 / 58. 13.100 libavfilter 7.110.100 / 7.110.100 libswscale 5. 9.100 / 5. 9.100 libswresample 3. 9.100 / 3. 9.100 libpostproc 55. 9.100 / 55. 9.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from \u0026#39;Video.MOV\u0026#39;: Metadata: major_brand : qt minor_version : 0 compatible_brands: qt creation_time : 2023-09-23T16:11:17.000000Z com.apple.quicktime.artwork: �� com.apple.quicktime.is-montage: iMovie Duration: 00:01:53.23, start: 0.000000, bitrate: 795 kb/s Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 94 kb/s (default) Metadata: creation_time : 2023-09-23T16:11:17.000000Z handler_name : Core Media Audio vendor_id : [0][0][0][0] Stream #0:1(und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709), 568x320, 693 kb/s, 30 fps, 30 tbr, 600 tbn, 1200 tbc (default) Metadata: creation_time : 2023-09-23T16:11:17.000000Z handler_name : Core Media Video vendor_id : [0][0][0][0] encoder : H.264 At least one output file must be specified Converting to a smaller filesize #With default values (for bitrates). Takes about 12 seconds and creates a 4.4MB big file. I also strip metadata out of the videos, usually.\n$ ffmpeg -i Video.MOV -acodec aac -vcodec h264 -map_metadata -1 newvideo-default.mp4 Another approach would be to specify the bitrates. You probably have to “play” with these values. For this example I chose 64k for audio and 300k for video. Note, that the filesize is actually bigger than the example above (with default values). This took about 16 seconds but creates a file of 5.0MB.\n$ ffmpeg -i Video.MOV -acodec aac -vcodec h264 -map_metadata -1 -b:a 64k -b:v 300k newvideo-64k-300k.mp4 Also convert the video size #When we inspected the file above we notices a video size of 568×320. We will reduce this now to 240 on the shorter side and we will get a new file that is 3.2MB big.\n$ ffmpeg -i Video.MOV -acodec aac -vcodec h264 -map_metadata -1 -filter:v scale=-1:240 newvideo-default-resized.mp4 We can improve this by reducing the audio bitrate to 32kb/s (going further down did not reduce the file much).\n$ ffmpeg -i Video.MOV -acodec aac -vcodec h264 -map_metadata -1 -filter:v scale=-1:240 -b:a 32k newvideo-default-resized-32k.mp4 Another look into the last converted file:\n$ ffmpeg -i newvideo-default-resized-32k.mp4 ffmpeg version 4.4.4 Copyright (c) 2000-2023 the FFmpeg developers built with OpenBSD clang version 13.0.0 configuration: --enable-shared --arch=amd64 --cc=cc --enable-debug --disable-stripping --disable-indev=jack --disable-outdev=sdl2 --enable-fontconfig --enable-frei0r --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libdav1d --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libmp3lame --enable-libopus --enable-libspeex --enable-libtheora --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nonfree --enable-openssl --enable-libvidstab --extra-cflags=\u0026#39;-I/usr/local/include -I/usr/X11R6/include\u0026#39; --extra-libs=\u0026#39;-L/usr/local/lib -L/usr/X11R6/lib\u0026#39; --extra-ldsoflags= --mandir=/usr/local/man --objcc=/usr/bin/false --optflags=\u0026#39;-O2 -pipe -g -Wno-redundant-decls\u0026#39; libavutil 56. 70.100 / 56. 70.100 libavcodec 58.134.100 / 58.134.100 libavformat 58. 76.100 / 58. 76.100 libavdevice 58. 13.100 / 58. 13.100 libavfilter 7.110.100 / 7.110.100 libswscale 5. 9.100 / 5. 9.100 libswresample 3. 9.100 / 3. 9.100 libpostproc 55. 9.100 / 55. 9.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from \u0026#39;newvideo-default-resized-32k.mp4\u0026#39;: Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf58.76.100 Duration: 00:01:53.24, start: 0.000000, bitrate: 140 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 426x240, 100 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default) Metadata: handler_name : VideoHandler vendor_id : [0][0][0][0] Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 31 kb/s (default) Metadata: handler_name : SoundHandler vendor_id : [0][0][0][0] At least one output file must be specified How to find the best values #The best option is probably to get routined. Convert some videos and look what changes (video and audio quality, filesize). Also try to trim them if you need to. Have a look at the manpages of ffmpeg (switches -t, -to, -ss).\nI guess a short video where someone is talking and explaining something does not always need high bitrates. This is like a slideshow where someone is talking in the background.\nIf you want to share music you might use higher bitrates. The classic mp3 files sounded quite good with 192kb/s or even 320kb/s but I think 128kb/s should also be fine. For aac files I\u0026rsquo;d probably try 96kb/s first and then increase or decrease on another run and look if the filesize improves.\nIt basically makes no sense reducing much of a bitrate if the filesize stays nearly the same in the end (as long as you can\u0026rsquo;t see or hear much difference).\nSome values for reference #The filename suggest the used bitrates and options.\n$ ll Video.MOV newvideo-* -rw------- 1 dominic dominic 10.7M Sep 23 19:05 Video.MOV -rw-r--r-- 1 dominic dominic 5.0M Oct 1 09:48 newvideo-64k-300k.mp4 -rw-r--r-- 1 dominic dominic 6.4M Oct 1 09:40 newvideo-64k-400k.mp4 -rw-r--r-- 1 dominic dominic 1.8M Oct 1 10:04 newvideo-default-resized-16k.mp4 -rw-r--r-- 1 dominic dominic 1.8M Oct 1 10:03 newvideo-default-resized-24k.mp4 -rw-r--r-- 1 dominic dominic 1.9M Oct 1 10:01 newvideo-default-resized-32k.mp4 -rw-r--r-- 1 dominic dominic 3.2M Oct 1 09:54 newvideo-default-resized.mp4 -rw-r--r-- 1 dominic dominic 4.4M Oct 1 09:43 newvideo-default.mp4 $ ls -l Video.MOV newvideo-* -rw------- 1 dominic dominic 11254505 Sep 23 19:05 Video.MOV -rw-r--r-- 1 dominic dominic 5290645 Oct 1 09:48 newvideo-64k-300k.mp4 -rw-r--r-- 1 dominic dominic 6705317 Oct 1 09:40 newvideo-64k-400k.mp4 -rw-r--r-- 1 dominic dominic 1844227 Oct 1 10:04 newvideo-default-resized-16k.mp4 -rw-r--r-- 1 dominic dominic 1869904 Oct 1 10:03 newvideo-default-resized-24k.mp4 -rw-r--r-- 1 dominic dominic 1991368 Oct 1 10:01 newvideo-default-resized-32k.mp4 -rw-r--r-- 1 dominic dominic 3382468 Oct 1 09:54 newvideo-default-resized.mp4 -rw-r--r-- 1 dominic dominic 4647129 Oct 1 09:43 newvideo-default.mp4 Related content (optimizing images) #I\u0026rsquo;ve created a similar post for images in 2020: Optimizing PNG images (there is also some info on JPG files).\n","date":"1 October 2023","permalink":"/posts/2023/56-converting-big-videos/","section":"Blog","summary":"I am subscribed to a few mailing lists and I stumbled across a big video file in one of them recently. Here is a small command-line command using \u003cstrong\u003effmpeg\u003c/strong\u003e that cut its filesize in half.","title":"Converting big videos","updated":"3 February 2026"},{"content":"Upgrade process #At the boot prompt, boot with the bsd.rd kernel.\n\u0026gt;\u0026gt; OpenBSD/amd64 BOOTX64 3.65 boot\u0026gt; boot bsd.rd Choosing U for Upgrade and continue to the server path.\nType /pub/OpenBSD/snapshots/amd64 to set the sets location.\nThis installs now the latest compiled system binaries built from the current OpenBSD source tree.\nAfter the installation you can normally hit Enter to reboot your computer.\nFinish the upgrade process by updating the userland packages/binaries with:\n$ doas pkg_add -u My thoughts #I\u0026rsquo;m not sure where the exact difference is between this workflow and just using sysupgrade -s which should also update the base system to the latest available snapshot.\nAnother approach #Using sysupgrade.\n$ doas sysupgrade -s Fetching from ftp://mirror.hs-esslingen.de/pub/OpenBSD/snapshots/amd64/ SHA256.sig 100% |*******************************| 2144 00:00 Signature Verified INSTALL.amd64 100% |*****************************| 44856 00:00 base74.tgz 100% |******************************| 368 MB 00:40 bsd 100% |******************************| 24747 KB 00:04 bsd.mp 100% |******************************| 24859 KB 00:04 bsd.rd 100% |******************************| 4550 KB 00:01 comp74.tgz 100% |******************************| 75643 KB 00:09 game74.tgz 100% |******************************| 2748 KB 00:02 man74.tgz 100% |******************************| 7830 KB 00:01 xbase74.tgz 100% |******************************| 57139 KB 00:06 xfont74.tgz 100% |******************************| 22968 KB 00:03 xserv74.tgz 100% |******************************| 14951 KB 00:03 xshare74.tgz 100% |******************************| 4578 KB 00:01 Verifying sets. Fetching updated firmware. fw_update: add none; update none; keep intel,inteldrm,iwm,vmm Upgrading. The computer will reboot after the download.\nUpdating installed packages:\n$ doas pkg_add -u Whenever a new release appears (currently 7.4) you may need to add -D snap to the above command.\n$ doas pkg_add -D snap -u quirks-6.157 signed on 2023-09-29T21:02:26Z Well, I usually reboot the laptop after this step just to be sure. Also my ~/.cache gets cleaned on reboot so also the Firefox cache gets cleaned (and others) in one run :)\n$ shutdown -r now Shutdown NOW! shutdown: [pid: 50674] System shutdown time has arrived █ Computer reboots\u0026hellip; and all should be fine again.\n","date":"30 September 2023","permalink":"/posts/2023/55-following-openbsd-current-snapshots/","section":"Blog","summary":"I guesss this is now a working scenario in which I can update\nto a working current snapshots but without the need of building OpenBSD\nfrom source.","title":"Following OpenBSD-current snapshots","updated":"29 September 2024"},{"content":"What is FLE #Find more useful information about FLE over here:\nhttps://github.com/on4kjm/FLEcli\nThis is the tool (written in go) that we use in this article, but it interprets the syntax mentioned on the website below. https://df3cb.com/fle/documentation/\nThis is also the website to get a Windows binary, which is actually a logging program, but the link goes directly to the documentation page. https://git.dk1mi.radio/mclemens/vim-fle-syntax\nThis is an addon for the vim editor, that helps you with the syntax by highlighting it. I haven\u0026rsquo;t got this working with neovim, though (not worth looking into it for now). https://dk1mi.radio/vim-fle-syntax/\nThis is a descriptive blog post by Michael DK1MI on his website about the vim-plugin. Get the source code and install the program #I usually keep those files in ~/git.\n$ cd ~/git $ git clone https://github.com/on4kjm/FLEcli.git Klone nach \u0026#39;FLEcli\u0026#39;... remote: Enumerating objects: 1223, done. remote: Counting objects: 100% (297/297), done. remote: Compressing objects: 100% (187/187), done. remote: Total 1223 (delta 162), reused 213 (delta 106), pack-reused 926 Empfange Objekte: 100% (1223/1223), 30.01 MiB | 4.88 MiB/s, fertig. Löse Unterschiede auf: 100% (746/746), fertig. $ cd FLEcli $ go build $ go install Your program should now be in $GOPATH/bin, which is ~/go/bin on my computer. This is also listed in my $PATH.\nCreate command completion for your shell #I\u0026rsquo;m using zsh as my primary shell so I\u0026rsquo;ll create the completion file for zsh in this article. I have my custom completion scripts in ~/.zcomp.\nIn your home directory:\n$ FLEcli completion zsh \u0026gt; ~/.zcomp/_FLEcli $ rm .zcompdump $ compinit Hmm, your commands may differ probably, I\u0026rsquo;m using prezto since years and that may differ a bit from other zsh setups.\nCreate a logfile #The log can be written very quick, for a detailed documentation see the links at the very beginning of this article, specifically the second one.\nAn example logfile log.fle looks like this:\nmycall oe7drt mygrid jn57lb date 2023-09-24 0826 20m ssb oe7test \u0026lt; comments \u0026gt; [ QSL message ] 7 oe7test2 \u0026lt; second contact \u0026gt; 8 oe7test3 \u0026lt; third, minute 8 → 08:28 \u0026gt; See? You can create logfiles very quick.\nHave a look at the logfile #$ FLEcli load log.fle MyCall OE7DRT MyGrid JN57lb Date Time Band Mode Call Sent Rcvd Notes ---- ---- ---- ---- ---- ---- ---- ---- 2023-09-24 0826 20m SSB OE7TEST 59 59 [ comments ] [ QSL message ] 2023-09-24 0827 20m SSB OE7TEST2 59 59 [ second contact ] 2023-09-24 0828 20m SSB OE7TEST3 59 59 [ third, minute 8 → 08:28 ] Successfully parsed 7 lines. Create an ADIF file #$ FLEcli adif log.fle No output provided, defaulting to \u0026#34;log.adi\u0026#34; MyCall OE7DRT MyGrid JN57lb Date Time Band Mode Call Sent Rcvd Notes ---- ---- ---- ---- ---- ---- ---- ---- 2023-09-24 0826 20m SSB OE7TEST 59 59 [ comments ] [ QSL message ] 2023-09-24 0827 20m SSB OE7TEST2 59 59 [ second contact ] 2023-09-24 0828 20m SSB OE7TEST3 59 59 [ third, minute 8 → 08:28 ] Successfully parsed 7 lines. Successfully wrote 7 lines to file \u0026#34;log.adi\u0026#34; Which looks like this then:\nADIF Export for Fast Log Entry by DF3CB \u0026lt;PROGRAMID:3\u0026gt;FLE \u0026lt;ADIF_VER:5\u0026gt;3.1.0 \u0026lt;EOH\u0026gt; \u0026lt;STATION_CALLSIGN:6\u0026gt;OE7DRT \u0026lt;CALL:7\u0026gt;OE7TEST \u0026lt;QSO_DATE:8\u0026gt;20230924 \u0026lt;TIME_ON:4\u0026gt;0826 \u0026lt;BAND:3\u0026gt;20m \u0026lt;MODE:3\u0026gt;SSB \u0026lt;RST_SENT:2\u0026gt;59 \u0026lt;RST_RCVD:2\u0026gt;59 \u0026lt;COMMENT:10\u0026gt; comments \u0026lt;QSLMSG:13\u0026gt; QSL message \u0026lt;MY_GRIDSQUARE:6\u0026gt;JN57lb \u0026lt;EOR\u0026gt; \u0026lt;STATION_CALLSIGN:6\u0026gt;OE7DRT \u0026lt;CALL:8\u0026gt;OE7TEST2 \u0026lt;QSO_DATE:8\u0026gt;20230924 \u0026lt;TIME_ON:4\u0026gt;0827 \u0026lt;BAND:3\u0026gt;20m \u0026lt;MODE:3\u0026gt;SSB \u0026lt;RST_SENT:2\u0026gt;59 \u0026lt;RST_RCVD:2\u0026gt;59 \u0026lt;COMMENT:16\u0026gt; second contact \u0026lt;MY_GRIDSQUARE:6\u0026gt;JN57lb \u0026lt;EOR\u0026gt; \u0026lt;STATION_CALLSIGN:6\u0026gt;OE7DRT \u0026lt;CALL:8\u0026gt;OE7TEST3 \u0026lt;QSO_DATE:8\u0026gt;20230924 \u0026lt;TIME_ON:4\u0026gt;0828 \u0026lt;BAND:3\u0026gt;20m \u0026lt;MODE:3\u0026gt;SSB \u0026lt;RST_SENT:2\u0026gt;59 \u0026lt;RST_RCVD:2\u0026gt;59 \u0026lt;COMMENT:27\u0026gt; third, minute 8 → 08:28 \u0026lt;MY_GRIDSQUARE:6\u0026gt;JN57lb \u0026lt;EOR\u0026gt; Create a SOTA log #I\u0026rsquo;ve never activated or hunted a SOTA station, but this is the theoretical way to produce a valid logfile to submit to the sota website.\nFirst, the dummy logfile:\nmycall oe7drt mygrid jn57lb mysota oe/ti-674 date 2023-09-24 1015 80m ssb oe0t1 46 58 [no qsl; only LOTW] 20 oe0t2 33 32 \u0026lt; very quiet mic \u0026gt; 22 oe0t3 59 59 \u0026lt; must be very near\u0026gt; 4 oe0t4 34 57 sota oe/ti-559 \u0026lt; nice s2s contact \u0026gt; We create the CSV file:\n$ FLEcli csv log.fle No output provided, defaulting to \u0026#34;log.csv\u0026#34; MyCall OE7DRT MySOTA OE/TI-674 MyGrid JN57lb Date Time Band Mode Call Sent Rcvd Notes ---- ---- ---- ---- ---- ---- ---- ---- 2023-09-24 1015 80m SSB OE0T1 46 58 [no qsl; only LOTW] 2023-09-24 1020 80m SSB OE0T2 33 32 [ very quiet mic ] 2023-09-24 1022 80m SSB OE0T3 59 59 [ must be very near] 2023-09-24 1024 80m SSB OE0T4 34 57 [ nice s2s contact ] OE/TI-559 Successfully parsed 10 lines. Successfully wrote 4 lines to file \u0026#34;log.csv\u0026#34; Which results in a CVS file ready for uploading to the SOTA website (untested!):\nV2,OE7DRT,OE/TI-674,24/09/23,1015,3.5MHz,SSB,OE0T1 V2,OE7DRT,OE/TI-674,24/09/23,1020,3.5MHz,SSB,OE0T2,, very quiet mic V2,OE7DRT,OE/TI-674,24/09/23,1022,3.5MHz,SSB,OE0T3,, must be very near V2,OE7DRT,OE/TI-674,24/09/23,1024,3.5MHz,SSB,OE0T4,OE/TI-559, nice s2s contact Final words #I guess this is an excellent way to create a quick offline log on your computer, if you have one with you. Otherwise this is a quick way to create a properly formatted ADIF or CSV file to import later into your regular logging program because you really only type in the needed information like time changes or band changes and the callsigns with their reports of course. All entered information keeps there for the following QSOs.\n","date":"24 September 2023","permalink":"/posts/2023/54-flecli-on-openbsd/","section":"Blog","summary":"Quickly create ADIF or CSV files to import into any logging program later.\nAlso creates logfiles for the SOTA program.","title":"FLEcli on OpenBSD","updated":"29 September 2024"},{"content":"","date":null,"permalink":"/tags/macos/","section":"Tags","summary":"","title":"Macos","updated":null},{"content":"Before we start: there is a short wikipedia article about Ferrite beads that I wanted to share with you. Just in case you are new to the hobby and want a quick read about this topic.\nCalibrate the nanoVNA(-F) #Going through the calibration process with the full lenght of the used adapters. All measurements happen on port S11 except ISOLIN, where we connect both ports together.\nOPEN\nLeave the cables as they are (open). SHORT\nConnect the red and black croco clips (shorten the circuit). LOAD\nClip a 50Ω load to the croco clips (red one to the core, black one to the shielding). ISOLIN\nLeave the load connected. (Maybe add another one to the second cable on the port S21). THRU\nShorten both cables (S11 \u0026amp; S21; red to red, black to black). PL259 socket #This is my selfmade choke for the good old PL259 sockets.\nThere are 9 turns of RG174 on a FT-140-43 ferrite core.\nConnecting the red croco clip from port S11 to the shield of one PL259 socket and the red croco clip from port S21 to the shield of the other PL259 socket. Also connect both black croco clips together.\nI got -30dB at 14.340 MHz and -25dB at 3.610 MHz.\nBNC socket #I made a smaller version with BNC sockets for portable operations as I switched my gear to a more lighter setup (which made me use QRP transceivers basically).\nThe BNC version is basically the same as the PL259 version mentioned above. We measure the choke like the first one: connect the core (red croco clips) with the choke\u0026rsquo;s shield and shorten the shield of the nanoVNAs ports (black croco clips).\nThe first chokes graph looks like the same. My nanoVNA does not support saving screenshots, so I use these crappy screen shot 😏 ","date":"23 September 2023","permalink":"/posts/2023/53-i-built-some-ferrite-chokes/","section":"Blog","summary":"I built two ferrite chokes and measured them already,\nbut I never presented the results to the internet audience 😉","title":"I built some ferrite chokes","updated":"29 September 2024"},{"content":"Initially I wanted to not look at OpenBSD-current again but I did it again.\nAll went good this time and I could compile everything except the ports. I\u0026rsquo;m still looking to find a good solution to update all the packages in one run.\nThis post is about following OpenBSD-current and building OpenBSD from source. I\u0026rsquo;m still studying the ports(7), bulk(8) and dpb(1) manpages, as well as the release(8) and cvs(1) pages.\nWhat went wrong the last time #I have no clue. The last time I had problems with the recent snapshot, when the packages could not get updated properly. This time they updated just fine. So maybe this was only an issue with that particular snapshot back then. Maybe, IDK.\nFetch the actual sources #The user is member of wsrc.\n$ cd /usr/src $ cvs -q up -Pd -A $ cd /usr/xenocara $ cvs -q up -Pd -A $ cd /usr/ports $ cvs -q up -Pd -A Initially we fetched the source with\n$ cd /usr $ cvs -qd anoncvs@ftp.hostserver.de:/cvs checkout -P src Same with xenocara and ports.\nCreate the kernel #$ cd /sys/arch/$(machine)/compile/GENERIC.MP $ doas make obj $ doas make config $ doas make \u0026amp;\u0026amp; doas make install The current kernel gets copied to /obsd and the new kernel gets installed as /bsd. On multi-processor machines /bsd is actually /bsd.mp and the single processor kernel gets renamed to /bsd.sp.\nReboot the machine to use the new kernel.\nBuild base system #$ cd /usr/src $ doas make obj \u0026amp;\u0026amp; doas make build $ doas sysmerge $ cd /dev \u0026amp;\u0026amp; doas ./MAKEDEV all This takes on my Lenovo X1 Carbon Gen7 something in between 8 to 12 hours usually.\nBuild and install Xenocara (X) #$ cd /src/xenocara $ doas make bootstrap $ doas make obj $ doas make build Building Xenocara took on my laptop (see above) around 1.5 hours.\nReboot #Once we built our new system, we want to boot into it.\nUpgrading the ports #I do have a packagelist of the manually installed packages in my home folder. That looks something like this:\nImageMagick-- abook-- adb-- adwaita-icon-theme-- aircrack-ng-- alacritty-- anacron-- appstream-glib-- [...] This is of no help to me, so I modified it a bit with sed:\n$ sed s/--// packagelist.txt \u0026gt; localports That removes only the two minuses at the end.\nNow I cd into /usr/ports and I\u0026rsquo;m looking if the resulting category/package name fits the ports directory structure.\n$ for i in `cat ~/localports`; do echo */$i; done | tee localports Run the command without the | tee ... part to see if any errors occur.\nIf the for loop finishes without errors, we can add the tee part and write the new localports file into /usr/ports.\nMake sure to remove the distfiles/\u0026lt;port\u0026gt; sections.\nThe final file should look like this:\ngraphics/ImageMagick mail/abook devel/adb security/aircrack-ng x11/alacritty sysutils/anacron devel/appstream-glib Some paths should be modified like the firefox browser is not found as firefox but as fitefox-i18n for example.\nNotice, there is already the package adwaita-icon-theme misssing because there is no such port in the ports tree.\nWithin /usr/ports, we run dpb:\n$ doas /usr/ports/infrastructure/bin/dpb -P localports That\u0026rsquo;s it. The screen gets filled with all the ports that are updated at once/in parallel.\nI do have about 100 packages to build, which usually consumes around 40 minutes of time.\nCreating a release #There are a few steps needed to create your own installation media.\nFirst of all, we setup some space that we can mount with noperm options.\nI use an external SSD which I mount into /build.\n$ doas mount -o noperm /dev/sd2a /build Set the owner of this directory to build and chmod the directory with 0700. Read along in the release man page.\nI use four directories: dest, release, xdest and xrelease.\ndist and xdest will be used to build the system, while release will hold the tarballs and the final installation media files when in xrelease the Xenocara release files will land.\nHave a look at the manpage, permissions and owners are quite important for these tasks! It is the base system that we create first #$ export DESTDIR=/build/dest RELEASEDIR=/build/release $ cd /usr/src/etc \u0026amp;\u0026amp; doas make release $ cd /usr/src/distrib/sets \u0026amp;\u0026amp; doas sh checkflist $ unset RELEASEDIR DESTDIR Time for coffe, the second line above takes around an hour. This step creates a base installation of OpenBSD within /build/dest and creates the installation media (tarballs) in /build/release.\nWe continue with building the X release files #$ export DESTDIR=/build/xdest RELEASEDIR=/build/xrelease $ doas make release $ doas make checkdist $ unset RELEASEDIR DESTDIR This run is fairly quick, expect a few minutes to run.\nCreating the installation media files #$ export RELDIR=/build/release RELXDIR=/build/xrelease $ cd /usr/src/distrib/$(machine)/iso \u0026amp;\u0026amp; doas make $ doas make install Also this is done in a few minutes.\nYou\u0026rsquo;ll find your install73.img and install.iso files in $RELDIR. Ready to be used.\nConclusion #It is not hard to build OpenBSD from source, but it is very time consuming.\nPorts need a little tweaking, though. I will continue to follow -current by upgrading to current snapshots.\n","date":"16 September 2023","permalink":"/posts/2023/52-openbsd-current-built-from-source/","section":"Blog","summary":"Keeping up to date with OpenBSD-current. Some quick notes.","title":"OpenBSD-current: built from source","updated":"3 February 2026"},{"content":"OpenBSD #Get the files #Download install73.img from https://www.openbsd.org/arm64.html and write it to a USB stick.\nInstallation of OpenBSD #Get yourself comfortable with this nice piece of documentation: INSTALL.arm64\nConnect a USB-to-TTL cable to the GPIO pins of the serial console on your Raspberry Pi (That means you have to remove the MMDVM hat for now).\n$ cu -l /dev/cuaU0 -s 115200 To save you another manpage lookup, exit the serial console with Enter, ~..\nBoot the Raspberry Pi with no SD-Card plugged in but the USB stick.\nStop the autoboot process at the bootloader by typing something at the boot prompt (and delete the typed characters afterwards)\nPlugin the SD-Card and hit Enter\nThe Installation media starts and detects your SD-Card\nContinue with the installation of OpenBSD\nWe booted without SD-Card because I had problems selecting the USB media for booting. You can select this from within Raspbian OS but I did not want to install this in the first place.\nSystem configuration #Make sure to enable ssh. We will need that because we have to drop support for the serial console to use the MMDVM hat.\nDisable the use of the serial console #Modify /etc/ttys (only the first lines are relevant)\n1# 2#\t$OpenBSD: ttys,v 1.2 2020/03/13 13:14:40 patrick Exp $ 3# 4# name\tgetty\ttype\tstatus\tcomments 5# 6console\t\u0026#34;/usr/libexec/getty std.115200\u0026#34;\tvt220\toff secure 7ttyC0\t\u0026#34;/usr/libexec/getty std.9600\u0026#34;\tvt220\toff secure 8ttyC1\t\u0026#34;/usr/libexec/getty std.9600\u0026#34;\tvt220\ton secure 9ttyC2\t\u0026#34;/usr/libexec/getty std.9600\u0026#34;\tvt220\ton secure Change on to off. Now select the framebuffer device for your tty.\n$ echo \u0026#34;set tty fb0\u0026#34; | doas tee /etc/boot.conf Once you made sure that you can login via ssh, turn off the Raspberry Pi and put on the MMDVM hat.\nNow you should be able to select /dev/cua00 as the modem in your MMDVM.ini.\nSetup DMRHost #Installation #Get the files: https://github.com/BrandMeister/DMRHost.\nI prefer to use a separate user for this.\n$ doas useradd -L daemon -G dialer,users -m -d /home/mmdvm -s /sbin/nologin -c \u0026#34;Radio \u0026amp;\u0026#34; mmdvm Now, let\u0026rsquo;s create the DMRHost executable.\n$ cd /home/mmdvm $ doas -u mmdvm (mkdir git \u0026amp;\u0026amp; cd git) $ doas -u mmdvm (git clone https://github.com/BrandMeister/DMRHost \u0026amp;\u0026amp; cd DMRHost) $ doas -u mmdvm (mkdir build \u0026amp;\u0026amp; cd build \u0026amp;\u0026amp; cmake -DCMAKE_BUILD_TYPE=Release ..) $ doas -u mmdvm make \u0026amp;\u0026amp; doas make install Note: the last command is not executed as the user mmdvm but as root as it is installing the executable into /usr/local/bin. Therefore we dropped the -u mmdvm on the last doas invocation!\nConfiguration of DMRHost: MMDVM.ini #I use /home/mmdvm/MMDVM.ini because I\u0026rsquo;ll put everything MMDVM-related into /home/mmdvm.\nThe essential congiguration changes:\n[...] [Log] # Logging levels, 0=No logging, 1=Debug, 2=Message, 3=Info, 4=Warning, 5=Error, 6=Fatal SyslogLevel=0 DisplayLevel=0 FileLevel=2 FilePath=/home/mmdvm/logs FileRoot=DMRHost FileRotate=0 [...] [Modem] Port=/dev/cua00 Protocol=uart [...] This is basically the same configuration as in the repository. Have a look at the [Log] section.\nThe rc script /etc/rc.d/DMRHost. ##!/bin/sh # rc-script for DMRHost on OpenBSD 7.3 # Dominic Reich \u0026lt;https://oe7drt.com\u0026gt; DMRHOST=\u0026#34;/usr/local/bin/DMRHost\u0026#34; MMDVM_INI=\u0026#34;/home/mmdvm/MMDVM.ini\u0026#34; DMRHOST_PID=\u0026#34;/home/mmdvm/DMRHost.pid\u0026#34; DOAS=\u0026#34;/usr/bin/doas -u mmdvm\u0026#34; LOGDIR=\u0026#34;/home/mmdvm/logs\u0026#34; case \u0026#34;$1\u0026#34; in \u0026#34;start\u0026#34;) if [ ! -d ${LOGDIR} ] ; then mkdir ${LOGDIR} chown mmdvm:users ${LOGDIR} chmod 0775 ${LOGDIR} fi if ${DOAS} [ ! -r ${MMDVM_INI} ] ; then echo \u0026#34;${MMDVM_INI} is not readable... aborting!\u0026#34; exit 1 fi echo -n \u0026#34;Starting DMRHost...\u0026#34; ${DOAS} ${DMRHOST} ${MMDVM_INI} \u0026amp; echo $! \u0026gt; ${DMRHOST_PID} echo \u0026#34; done\u0026#34; ;; \u0026#34;stop\u0026#34;) echo -n \u0026#34;Stopping DMRHost...\u0026#34; if [ -f ${DMRHOST_PID} ] ; then kill `cat ${DMRHOST_PID}` rm -f ${DMRHOST_PID} echo \u0026#34; done\u0026#34; else echo \u0026#34;not running?\u0026#34; fi ;; \u0026#34;restart\u0026#34;) $0 stop sleep 2 $0 start ;; *) echo \u0026#34;$0 [start|stop|restart]\u0026#34; ;; esac First test / first start #Start DMRHost (not the service)\n$ doas -u mmdvm /usr/local/bin/DMRHost /home/mmdvm/MMDVM.ini and see what it does. If it\u0026rsquo;s logging into the master, all is good and can be stopped with CTRL+C.\nEnable and start the service #$ doas rcctl enable DMRHost $ doas rcctl start DMRHost DMRHost runs.\nSome additional notes #I put myself (another user on the Raspberry Pi) into the users group and chmod the MMDVM.ini with with 664.\nThat allows me to edit the file as my usual user and I do not have to use doas -u mmdvm everytime I want to modify something in that file.\nFreeBSD # This section is probably not complete, I had several problems with the Raspberry Pi\u0026rsquo;s UART when I finally gave up on the long-term testing. I\u0026rsquo;m using 14.0-CURRENT for this (which is moving to stable soon).\nhttps://download.freebsd.org/ftp/snapshots/arm64/aarch64/ISO-IMAGES/14.0/\n$ doas dd if=FreeBSD-14.0-ALPHA3-arm64-aarch64-RPI-20230825-2af9390e54ed-265022.img of=/dev/rsd2c bs=1m Boot into the system with the serial console. Setup a dedicated user for this and disable the serial console after you successfully set up the network (don\u0026rsquo;t forget to also test ssh connection).\n$ doas pw useradd mmdvm -d /home/mmdvm -m -L daemon -G dialer Do not use the UART for kernel messages. Add this line to your /boot/loader.conf file.\nhw.fdt.console=\u0026#34;NO\u0026#34; Reboot so the serial console can be used for the MMDVM_HS hat.\nInstall DMRHost #You will need a few packages before we can continue. This list could be incomplete because I try to remember them from brain memory\u0026hellip;\n$ doas pkg install git gcc cmake Goto /home/mmdvm, build and install DMRHost.\n$ doas -u mmdvm mkdir ~/git \u0026amp;\u0026amp; cd /home/mmdvm/git $ doas -u mmdvm git clone https://github.com/BrandMeister/DMRHost.git $ cd DMRHost \u0026amp;\u0026amp; doas -u mmdvm mkdir build \u0026amp;\u0026amp; cd build $ doas -u mmdvm (cmake -DCMAKE_BUILD_TYPE=Release .. \u0026amp;\u0026amp; make) $ doas make install Create directories and the MMDVM.ini file.\n$ cd /home/mmdvm \u0026amp;\u0026amp; doas -u mmdvm mkdir logs \u0026amp;\u0026amp; chmod 0775 logs $ doas -u mmdvm nvim MMDVM.ini [...] [Log] # Logging levels, 0=No logging, 1=Debug, 2=Message, 3=Info, 4=Warning, 5=Error, 6=Fatal SyslogLevel=0 DisplayLevel=0 FileLevel=2 FilePath=/home/mmdvm/logs FileRoot=DMRHost FileRotate=0 [...] [Modem] Port=/dev/cua00 Protocol=uart [...] I also add my user to the mmdvm group, so I can edit the MMDVM file. (Well, set file permissions to 0664)\n$ doas pw usermod \u0026lt;user\u0026gt; -G mmdvm Test DMRHost #$ doas -u mmdvm /usr/local/bin/DMRHost /home/mmdvm/MMDVM.ini You may inspect the logfile beforehand: tail -f /home/mmdvm/logs/DMRHost.log. The startup of DMRHost should end with something like these lines:\nM: 2023-08-25 11:03:05.000 DMRHost-20220617-DMRHost is running M: 2023-08-25 11:03:15.000 DMR, Logged into the master successfully Setup an rc file ##!/bin/sh # rc-script for DMRHost on OpenBSD 7.3 # runs on FreeBSD for now # Dominic Reich \u0026lt;https://oe7drt.com\u0026gt; DMRHOST=\u0026#34;/usr/local/bin/DMRHost\u0026#34; MMDVM_INI=\u0026#34;/home/mmdvm/MMDVM.ini\u0026#34; DMRHOST_PID=\u0026#34;/home/mmdvm/DMRHost.pid\u0026#34; DOAS=\u0026#34;/usr/local/bin/doas -u mmdvm\u0026#34; LOGDIR=\u0026#34;/home/mmdvm/logs\u0026#34; case \u0026#34;$1\u0026#34; in \u0026#34;start\u0026#34;) if [ ! -d ${LOGDIR} ] ; then mkdir ${LOGDIR} chown mmdvm:users ${LOGDIR} chmod 0775 ${LOGDIR} fi if ${DOAS} [ ! -r ${MMDVM_INI} ] ; then echo \u0026#34;${MMDVM_INI} is not readable... aborting!\u0026#34; exit 1 fi echo -n \u0026#34;Starting DMRHost...\u0026#34; ${DOAS} ${DMRHOST} ${MMDVM_INI} \u0026amp; echo $! | ${DOAS} tee ${DMRHOST_PID} \u0026gt; /dev/null echo \u0026#34; done\u0026#34; ;; \u0026#34;stop\u0026#34;) echo -n \u0026#34;Stopping DMRHost...\u0026#34; if [ -f ${DMRHOST_PID} ] ; then kill `cat ${DMRHOST_PID}` rm -f ${DMRHOST_PID} echo \u0026#34; done\u0026#34; else echo \u0026#34;not running?\u0026#34; fi ;; \u0026#34;restart\u0026#34;) $0 stop sleep 2 $0 start ;; *) echo \u0026#34;$0 [start|stop|restart]\u0026#34; ;; esac ","date":"26 August 2023","permalink":"/posts/2023/51-dmrhost-on-a-raspberrypi4-with-openbsd-or-freebsd/","section":"Blog","summary":"A rather quick demonstration of my recent test to install\nDMRHost on a Raspberry Pi 4 which is running OpenBSD 7.3","title":"DMRHost on a RaspberryPi 4 with OpenBSD or FreeBSD","updated":"29 September 2024"},{"content":"It is about a few times a year when something is broken on a linux system. Today (actually yesterday but I couldn\u0026rsquo;t stay up much longer and I was already fed up with this sh**) I upgraded my two raspberry-pi based hotspots and realized when apt couldn\u0026rsquo;t verify the repositories signing keys because of missing keys.\nThis happens usually on any linux distribution at least once a year. So it shouldn\u0026rsquo;t be a big deal but it consumes time and I usually have to look into manpages and/or online help again because I already forgot how I fixed it the last time\u0026hellip;\nToday, I write it down below.\nWhat the error looks like #When running sudo apt update:\n$ sudo apt update Get:1 http://httpredir.debian.org/debian bullseye-backports InRelease [49,0 kB] Get:2 http://security.debian.org/debian-security bullseye-security InRelease [48,4 kB] Get:3 http://deb.debian.org/debian bullseye-updates InRelease [44,1 kB] Hit:4 http://archive.raspberrypi.org/debian bullseye InRelease Get:5 http://raspbian.raspberrypi.org/raspbian bullseye InRelease [15,0 kB] Err:1 http://httpredir.debian.org/debian bullseye-backports InRelease The following signatures couldn\u0026#39;t be verified because the public key is not available: NO_PUBKEY 0E98404D386FA1D9 NO_PUBKEY 6ED0E7B82643E131 Err:2 http://security.debian.org/debian-security bullseye-security InRelease The following signatures couldn\u0026#39;t be verified because the public key is not available: NO_PUBKEY 112695A0E562B32A NO_PUBKEY 54404762BBB6E853 Err:3 http://deb.debian.org/debian bullseye-updates InRelease The following signatures couldn\u0026#39;t be verified because the public key is not available: NO_PUBKEY 0E98404D386FA1D9 NO_PUBKEY 6ED0E7B82643E131 Reading package lists... Done W: GPG error: http://httpredir.debian.org/debian bullseye-backports InRelease: The following signatures couldn\u0026#39;t be verified because the public key is not available: NO_PUBKEY 0E98404D386FA1D9 NO_PUBKEY 6ED0E7B82643E131 E: The repository \u0026#39;http://httpredir.debian.org/debian bullseye-backports InRelease\u0026#39; is not signed. N: Updating from such a repository can\u0026#39;t be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details. W: GPG error: http://security.debian.org/debian-security bullseye-security InRelease: The following signatures couldn\u0026#39;t be verified because the public key is not available: NO_PUBKEY 112695A0E562B32A NO_PUBKEY 54404762BBB6E853 E: The repository \u0026#39;http://security.debian.org/debian-security bullseye-security InRelease\u0026#39; is not signed. N: Updating from such a repository can\u0026#39;t be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details. W: GPG error: http://deb.debian.org/debian bullseye-updates InRelease: The following signatures couldn\u0026#39;t be verified because the public key is not available: NO_PUBKEY 0E98404D386FA1D9 NO_PUBKEY 6ED0E7B82643E131 E: The repository \u0026#39;http://deb.debian.org/debian bullseye-updates InRelease\u0026#39; is not signed. N: Updating from such a repository can\u0026#39;t be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details. Obtain the keys #$ gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys 0E98404D386FA1D9 6ED0E7B82643E131 112695A0E562B32A 54404762BBB6E853 gpg: keybox \u0026#39;/home/pi-star/.gnupg/pubring.kbx\u0026#39; created gpg: /home/pi-star/.gnupg/trustdb.gpg: trustdb created gpg: key A48449044AAD5C5D: public key \u0026#34;Debian Security Archive Automatic Signing Key (11/bullseye) \u0026lt;ftpmaster@debian.org\u0026gt;\u0026#34; imported gpg: key 4DFAB270CAA96DFA: public key \u0026#34;Debian Security Archive Automatic Signing Key (10/buster) \u0026lt;ftpmaster@debian.org\u0026gt;\u0026#34; imported gpg: key B7C5D7D6350947F8: public key \u0026#34;Debian Archive Automatic Signing Key (12/bookworm) \u0026lt;ftpmaster@debian.org\u0026gt;\u0026#34; imported gpg: key 73A4F27B8DD47936: public key \u0026#34;Debian Archive Automatic Signing Key (11/bullseye) \u0026lt;ftpmaster@debian.org\u0026gt;\u0026#34; imported gpg: Total number processed: 4 gpg: imported: 4 Import the keys #This still works, though, there is a better method for future encounters.\n$ gpg -a --export 0E98404D386FA1D9 6ED0E7B82643E131 112695A0E562B32A 54404762BBB6E853 | sudo apt-key add - Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). OK The resulting update process #$ sudo apt update Get:1 http://httpredir.debian.org/debian bullseye-backports InRelease [49,0 kB] Hit:2 http://raspbian.raspberrypi.org/raspbian bullseye InRelease Get:3 http://security.debian.org/debian-security bullseye-security InRelease [48,4 kB] Get:4 http://deb.debian.org/debian bullseye-updates InRelease [44,1 kB] Hit:5 http://archive.raspberrypi.org/debian bullseye InRelease Get:6 http://httpredir.debian.org/debian bullseye-backports/main armhf Packages [415 kB] Get:7 http://httpredir.debian.org/debian bullseye-backports/main Translation-en [353 kB] Get:8 http://security.debian.org/debian-security bullseye-security/main armhf Packages [248 kB] Get:9 http://security.debian.org/debian-security bullseye-security/main Translation-en [164 kB] Get:10 http://httpredir.debian.org/debian bullseye-backports/contrib armhf Packages [4.680 B] Get:11 http://httpredir.debian.org/debian bullseye-backports/contrib Translation-en [5.984 B] Get:12 http://httpredir.debian.org/debian bullseye-backports/non-free armhf Packages [9.072 B] Get:13 http://httpredir.debian.org/debian bullseye-backports/non-free Translation-en [27,7 kB] Get:14 http://security.debian.org/debian-security bullseye-security/non-free Translation-en [464 B] Get:15 http://deb.debian.org/debian bullseye-updates/main armhf Packages [14,7 kB] Get:16 http://deb.debian.org/debian bullseye-updates/main Translation-en [9.964 B] Fetched 1.253 kB in 4s (282 kB/s) Reading package lists... Done Building dependency tree... Done Reading state information... Done All packages are up to date. Another way (quicker) but untested #This should also work like the above (until EOL of apt-key).\n$ apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 0E98404D386FA1D9 6ED0E7B82643E131 112695A0E562B32A 54404762BBB6E853 Final words #I got that feeling: the next time I\u0026rsquo;d need this, apt-key will not work and got fully replaced by signing keys in /etc/apt/keyrings\u0026hellip;\nInspired by this post: https://superuser.com/a/1485255\nAs the default keyserver strips user-ids they cannot imported without the --keyserver switch.\n","date":"5 August 2023","permalink":"/posts/2023/50-problems-with-apt-keys-on-my-hotspots/","section":"Blog","summary":"For some reasons apt wasn\u0026rsquo;t able to verify the repositories\nsigning keys on my Raspberry-Pi based hotspots and this is how I fixed it.","title":"Problems with apt-keys on my hotspots","updated":"29 September 2024"},{"content":"Install the package named rtl-433 on most distributions on Linux. It\u0026rsquo;s also available on FreeBSD.\nYou might want to install these udev-Rules.\nFYI, reloading these rules with:\n$ sudo udevadm control --reload-rules \u0026amp;\u0026amp; sudo udevadm trigger Then we should be able to run the program like this:\n$ rtl_433 -C si -M hires -M level -M stats -Y auto This will look per default on 433.29 MHz, other available frequencies are 315, 345, 868 and 915 MHz. To listen on other frequencies add -f 868M to the command above for example.\nI\u0026rsquo;ve installed this on a laptop running Ubuntu.\nA preview image showing some test entries basically from an old weather station. ","date":"30 July 2023","permalink":"/posts/2023/49-observe-your-neighbours-weather-stations/","section":"Blog","summary":"Another simple and short snippet for \u003cem\u003ertl_433\u003c/em\u003e\non Linux (and probably FreeBSD).","title":"Observe your neighbours weather stations","updated":"24 August 2025"},{"content":"","date":null,"permalink":"/tags/rtl_433/","section":"Tags","summary":"","title":"Rtl_433","updated":null},{"content":"Okay this is probably one of the “better” mails that I got in my Junk mail folder.\nThe mail body #Sehr geehrter Kunde, Ihr Post Ag Paket: Nr. CA001550110AT, versandt am 28.07.2023, wird bearbeitet. Damit wir Ihr Paket liefern können, werden dem Importeur die Mehrwertsteuerkosten erneut in Rechnung gestellt. Nach den geltenden Zollbestimmungen ist jede Einfuhr aus einem Land außerhalb der Europäischen Gemeinschaft mit einem Handelswert von mehr als 22 EUR unabhängig von der Art der Waren steuerpflichtig *. * Artikel 134-I und II-1 ° des CGI: GESETZ Nr. 2012-1510 vom 03. Mai 2017 – Art. 68 (V) Die Validierung des Paysafecard-Guthabens für die Zahlung von Zollgebühren ist gültig. Um die Zustellung Ihres Pakets für Ihre Heimatadresse zu ermöglichen, bitten wir Sie, Ihre nicht bezahlten Zollgebühren zu regulieren, indem Sie die folgenden Schritte ausführen, um die Zustellung Ihres Pakets abzuschließen: 1. Kaufen Sie einen Paysafecard PIN-Code online (50 EUR) 2. Senden Sie den PIN-Code (16 Ziffern) an folgende Adresse: contact@bpostpay.com Grüße, Zoll Kundendienst This is by far the best german that I\u0026rsquo;ve seen so far in spam mails (although it is not perfect).\nThe mail body source (html) #\u0026lt;p\u0026gt;\u0026lt;strong\u0026gt;Sehr geehrter Kunde,\u0026lt;/strong\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;Ihr Post Ag Paket: Nr. CA001550110AT, versandt am 28.07.2023, wird bearbeitet. Damit wir Ihr Paket liefern k\u0026amp;ouml;nnen, werden dem Importeur die Mehrwertsteuerkosten erneut in Rechnung gestellt.\u0026lt;br /\u0026gt; Nach den geltenden Zollbestimmungen ist jede Einfuhr aus einem Land au\u0026amp;szlig;erhalb der Europ\u0026amp;auml;ischen Gemeinschaft mit einem Handelswert von mehr als 22 EUR unabh\u0026amp;auml;ngig von der Art der Waren steuerpflichtig *.\u0026lt;br /\u0026gt; * Artikel 134-I und II-1 \u0026amp;deg; des CGI: GESETZ Nr. 2012-1510 vom 03. Mai 2017 \u0026amp;ndash; Art. 68 (V) Die Validierung des Paysafecard-Guthabens f\u0026amp;uuml;r die Zahlung von Zollgeb\u0026amp;uuml;hren ist g\u0026amp;uuml;ltig.\u0026lt;br /\u0026gt; Um die Zustellung Ihres Pakets f\u0026amp;uuml;r Ihre Heimatadresse zu erm\u0026amp;ouml;glichen, bitten wir Sie, Ihre nicht bezahlten Zollgeb\u0026amp;uuml;hren zu regulieren, indem Sie die folgenden Schritte ausf\u0026amp;uuml;hren, um die Zustellung Ihres Pakets abzuschlie\u0026amp;szlig;en:\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026lt;br /\u0026gt; \u0026lt;a href=\u0026#34;https://wkv.com\u0026#34; rel=\u0026#34;noreferrer\u0026#34; target=\u0026#34;_blank\u0026#34;\u0026gt;1. Kaufen Sie einen Paysafecard PIN-Code online (50 EUR)\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; 2. Senden Sie den PIN-Code (16 Ziffern) an folgende Adresse:\u0026amp;nbsp;\u0026amp;nbsp;\u0026lt;a href=\u0026#34;mailto:contact@bpostpay.com\u0026#34;\u0026gt;contact@bpostpay.com\u0026lt;/a\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026lt;br /\u0026gt; Gr\u0026amp;uuml;\u0026amp;szlig;e,\u0026lt;br /\u0026gt; Zoll Kundendienst\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt;\u0026amp;nbsp;\u0026lt;/p\u0026gt; The mail source (base64) #Some information has been removed for privacy.\nReturn-Path: \u0026lt;www-data@universal.at\u0026gt; Received: from compute6.internal (compute6.nyi.internal [10.202.x.xx]) by sloti44n20 (Cyrus 3.9.0-alpha0-592-ga9d4a09b4b-fm-defalarms-20230725.001-ga9d4a09b) with LMTPA; Sat, 29 Jul 2023 10:14:11 -0400 X-Cyrus-Session-Id: sloti44n20-1690640051-1433308-2-7816971425445839177 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no (\u0026#34;Email failed DMARC policy for domain\u0026#34;) X-Spam-sender-reputation: 563 (domain; noauth) X-Spam-score: 26.0 X-Spam-hits: BAYES_50 0.8, DCC_CHECK 1.1, DCC_REPUT_99_100 1.4, HEADER_FROM_DIFFERENT_DOMAINS 0.249, HTML_MESSAGE 0.001, HTML_MIME_NO_HTML_TAG 0.377, KHOP_HELO_FCRDNS 0.001, ME_NOAUTH 0.01, ME_QUARANTINE 5, ME_SC_NH -0.001, ME_SENDERREP_NEUTRAL 0.001, ME_VADESPAM_HIGH 3, ME_VADE_X1 0.001, MIME_HTML_ONLY 0.1, RCVD_IN_INVALUEMENT24 2, RCVD_IN_SBL_CSS 3, RCVD_IN_ZEN_LASTEXTERNAL 8, RDNS_DYNAMIC 0.982, SPF_FAIL 0.001, SPF_HELO_FAIL 0.001, T_SCC_BODY_TEXT_LINE -0.01, LANGUAGES de, BAYES_USED user, SA_VERSION 3.4.6 X-Spam-source: IP=\u0026#39;202.151.182.86\u0026#39;, Host=\u0026#39;ppp-202.151.182.86.revip.proen.co.th\u0026#39;, Country=\u0026#39;TH\u0026#39;, FromHeader=\u0026#39;at\u0026#39;, MailFrom=\u0026#39;at\u0026#39; X-Spam-charsets: from=\u0026#39;utf-8\u0026#39;, subject=\u0026#39;utf-8\u0026#39;, html=\u0026#39;UTF-8\u0026#39; X-IgnoreVacation: yes (\u0026#34;Email failed DMARC policy for domain\u0026#34;) X-Resolved-to: dominic@... X-Delivered-to: dominic@... X-Mail-from: www-data@universal.at Received: from mx5 ([10.202.2.204]) by compute6.internal (LMTPProxy); Sat, 29 Jul 2023 10:14:11 -0400 Received: from mx5.messagingengine.com (localhost [127.0.0.1]) by mailmx.nyi.internal (Postfix) with ESMTP id 6F2E727200BB for \u0026lt;dominic@...\u0026gt;; Sat, 29 Jul 2023 10:14:10 -0400 (EDT) Received: from mailmx.nyi.internal (localhost [127.0.0.1]) by mx5.messagingengine.com (Authentication Milter) with ESMTP id 5CC9613B011.38BA027200B3; Sat, 29 Jul 2023 10:14:10 -0400 ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=fm3; t= 1690640050; b=RB8RZH6MaPuZaUbzTFgaC/5rRbzXOq7TE/Vm82v8OREaZ9vMNn 83TLV8ZQPRNVDRYlEyx0o1U7HgFxlHBtjDTdyos8NF3dcaXF2i4sRHV36OmQyrBA pbX2RBVqk16STfLZNDJzJPHUm/kqVa58wu/PiGwOcJDsqqjhMwHrgtaY7xnk6yaY pI8Unbd8IEmWCF1oFkd7/m6bi2gP155WzrQ+ODNb/5Eg7d6aL3YjM5bPgMiKb6Lq 3xZkpuZrCwRvz3jfR4+hotROsrBajIaw7gTF8WCWHK2HMqa0OCjHMqmImU09V6rz QBZa6FGnpsUIrn7eZl6SN5HGHTSQOW3Rne2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=date:to:from:subject:message-id :mime-version:content-type:content-transfer-encoding; s=fm3; t= 1690640050; bh=w6oJ3S7Y/Us7PijzHL1aoBLxm4XbhO51kHjEeQQTcrY=; b=D BUheUZvKRDgkQ24PtWSGgyiglWyhYTY35uyvqlP19C6QYo4r9qC1wU+IccuDFR1N U0rE2UA4HAmvwxlzl/GQn9hB2hvY+VGSL1Olfi6VhboUITHkbAy6qYYLEvMvzIvR HLrjKBTEWe8y88UFCI0YDXr0iZRURoKwKcPlgOXCAj7cHNZMauHM76i04GlE+Sdf fByK+dkRNrzIR3wCchRc2vQT95QeTL6l1GfxksjEum5s9cnjdvM12Om8HiKe2gV2 Ncx+sCNuyLaSl6zg8sjgRkfEheEYj5EeH5F5qrPnYIxVEUo6Lv/ye0LNVAbKMxcl S21gpYpzGzcLyLmWKQJHA== ARC-Authentication-Results: i=1; mx5.messagingengine.com; x-csa=none; x-me-sender=none; x-ptr=fail smtp.helo=universal.at policy.ptr=ppp-202.151.182.86.revip.proen.co.th; bimi=skipped (DMARC did not pass); arc=none (no signatures found); dkim=none (no signatures found); dmarc=fail policy.published-domain-policy=reject policy.applied-disposition=quarantine policy.evaluated-disposition=reject policy.override-reason=local_policy policy.arc-aware-result=fail (p=reject,d=quarantine,d.eval=reject,override=local_policy,arc_aware_result=fail) policy.policy-from=p header.from=post.at; iprev=pass smtp.remote-ip=202.151.182.86 (ppp-202.151.182.86.revip.proen.co.th); spf=fail smtp.mailfrom=www-data@universal.at smtp.helo=universal.at X-Disposition-Quarantine: Quarantined due to DMARC policy X-ME-Authentication-Results: mx5.messagingengine.com; x-aligned-from=fail; x-return-mx=pass header.domain=post.at policy.is_org=yes (MX Records found: mxb-00221601.gslb.pphosted.com,mxa-00221601.gslb.pphosted.com); x-return-mx=pass smtp.domain=universal.at policy.is_org=yes (MX Records found: universal-at.mail.protection.outlook.com); x-tls=pass smtp.version=TLSv1.3 smtp.cipher=TLS_AES_256_GCM_SHA384 smtp.bits=256/256; x-vs=spam:high score=500 state=1 Authentication-Results: mx5.messagingengine.com; x-csa=none; x-me-sender=none; x-ptr=fail smtp.helo=universal.at policy.ptr=ppp-202.151.182.86.revip.proen.co.th Authentication-Results: mx5.messagingengine.com; bimi=skipped (DMARC did not pass) Authentication-Results: mx5.messagingengine.com; arc=none (no signatures found) Authentication-Results: mx5.messagingengine.com; dkim=none (no signatures found); dmarc=fail policy.published-domain-policy=reject policy.applied-disposition=quarantine policy.evaluated-disposition=reject policy.override-reason=local_policy policy.arc-aware-result=fail (p=reject,d=quarantine,d.eval=reject,override=local_policy,arc_aware_result=fail) policy.policy-from=p header.from=post.at; iprev=pass smtp.remote-ip=202.151.182.86 (ppp-202.151.182.86.revip.proen.co.th); spf=fail smtp.mailfrom=www-data@universal.at smtp.helo=universal.at X-ME-VSCause: gggruggvucftvghtrhhoucdtuddrgedviedrieekgdejudcutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdpuffr tefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecuogfhohhrsghiugguvghnff homhgrihhnucdlhedttddmnecujfgurhepfffvhffukffrgggtgfeshhgsjhdttddtjeen ucfhrhhomheprfhoshhtrdgrthcuoehnohhrvghplhihsehpohhsthdrrghtqeenucggtf frrghtthgvrhhnpeehgfelhefgieeiheekkeelvdfgleehieffvdeivdeufeffveehteej udevhfejieenucffohhmrghinhepfihkvhdrtghomhenucfkphepvddtvddrudehuddrud ekvddrkeeinecuufhprghmkfhppedvtddvrdduhedurddukedvrdekieenucfhohhrsghi ugguvghnffhomhgrihhnpeifkhhvrdgtohhmnecuufhprghmufhusghjvggtthepreertf gvghhiohhnrghlughirhgvkhhtihhonhcufhptrhcukgpnlhhlvgcuuhhnugcuihhnughi rhgvkhhtvgcuufhtvghuvghrnhenucfuphgrmhetlhhphhgrufhusghjvggttheprhgvgh hiohhnrghlughirhgvkhhtihhonhhfuhhriiholhhlvghunhguihhnughirhgvkhhtvghs thgvuhgvrhhnnecuufhprghmtehlihgrsheprfhoshhtrdgrthenucfuphgrmhetlhhphh grtehlihgrshepphhoshhtrghtnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghm pehinhgvthepvddtvddrudehuddrudekvddrkeeipdhhvghlohepuhhnihhvvghrshgrlh drrghtpdhmrghilhhfrhhomhepoeiffiifqdgurghtrgesuhhnihhvvghrshgrlhdrrght qe X-ME-VSScore: 500 X-ME-VSCategory: spam:high X-ME-CSA: none Received-SPF: fail (universal.at: Sender is not authorized by default to use \u0026#39;www-data@universal.at\u0026#39; in \u0026#39;mfrom\u0026#39; identity (mechanism \u0026#39;-all\u0026#39; matched)) receiver=mx5.messagingengine.com; identity=mailfrom; envelope-from=\u0026#34;www-data@universal.at\u0026#34;; helo=universal.at; client-ip=202.151.182.86 Received: from universal.at (ppp-202.151.182.86.revip.proen.co.th [202.151.182.86]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx5.messagingengine.com (Postfix) with ESMTPS id 38BA027200B3 for \u0026lt;dominic@...\u0026gt;; Sat, 29 Jul 2023 10:14:09 -0400 (EDT) Received: by universal.at (Postfix, from userid 33) id 2537762620; Sat, 29 Jul 2023 11:35:30 +0000 (UTC) Date: Sat, 29 Jul 2023 11:35:30 +0000 To: dominic@... From: =?utf-8?Q?Post=2eat?= \u0026lt;noreply@post.at\u0026gt; Subject: =?utf-8?Q?=e2=9c=88=ef=b8=8fRegionaldirektion=20f=c3=bcr=20Z=c3=b6lle=20und=20indirekte=20Steuern?= Message-ID: \u0026lt;2cf35f10e46774fe43c684a13bae1866@202.151.182.86\u0026gt; X-Priority: 3 MIME-Version: 1.0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 X-TUID: jE8aYgkCdmDh PHA+PHN0cm9uZz5TZWhyIGdlZWhydGVyIEt1bmRlLDwvc3Ryb25nPjwvcD4NCg0KPHA+SWhyIFBv c3QgQWcgUGFrZXQ6IE5yLiBDQTAwMTU1MDExMEFULCB2ZXJzYW5kdCBhbSAyOC4wNy4yMDIzLCB3 aXJkIGJlYXJiZWl0ZXQuIERhbWl0IHdpciBJaHIgUGFrZXQgbGllZmVybiBrJm91bWw7bm5lbiwg d2VyZGVuIGRlbSBJbXBvcnRldXIgZGllIE1laHJ3ZXJ0c3RldWVya29zdGVuIGVybmV1dCBpbiBS ZWNobnVuZyBnZXN0ZWxsdC48YnIgLz4NCk5hY2ggZGVuIGdlbHRlbmRlbiBab2xsYmVzdGltbXVu Z2VuIGlzdCBqZWRlIEVpbmZ1aHIgYXVzIGVpbmVtIExhbmQgYXUmc3psaWc7ZXJoYWxiIGRlciBF dXJvcCZhdW1sO2lzY2hlbiBHZW1laW5zY2hhZnQgbWl0IGVpbmVtIEhhbmRlbHN3ZXJ0IHZvbiBt ZWhyIGFscyAyMiBFVVIgdW5hYmgmYXVtbDtuZ2lnIHZvbiBkZXIgQXJ0IGRlciBXYXJlbiBzdGV1 ZXJwZmxpY2h0aWcgKi48YnIgLz4NCiogQXJ0aWtlbCAxMzQtSSB1bmQgSUktMSAmZGVnOyBkZXMg Q0dJOiBHRVNFVFogTnIuIDIwMTItMTUxMCB2b20gMDMuIE1haSAyMDE3ICZuZGFzaDsgQXJ0LiA2 OCAoVikgRGllIFZhbGlkaWVydW5nIGRlcyBQYXlzYWZlY2FyZC1HdXRoYWJlbnMgZiZ1dW1sO3Ig ZGllIFphaGx1bmcgdm9uIFpvbGxnZWImdXVtbDtocmVuIGlzdCBnJnV1bWw7bHRpZy48YnIgLz4N ClVtIGRpZSBadXN0ZWxsdW5nIElocmVzIFBha2V0cyBmJnV1bWw7ciBJaHJlIEhlaW1hdGFkcmVz c2UgenUgZXJtJm91bWw7Z2xpY2hlbiwgYml0dGVuIHdpciBTaWUsIElocmUgbmljaHQgYmV6YWhs dGVuIFpvbGxnZWImdXVtbDtocmVuIHp1IHJlZ3VsaWVyZW4sIGluZGVtIFNpZSBkaWUgZm9sZ2Vu ZGVuIFNjaHJpdHRlIGF1c2YmdXVtbDtocmVuLCB1bSBkaWUgWnVzdGVsbHVuZyBJaHJlcyBQYWtl dHMgYWJ6dXNjaGxpZSZzemxpZztlbjo8YnIgLz4NCiZuYnNwOzxiciAvPg0KPGEgaHJlZj0iaHR0 cHM6Ly93a3YuY29tIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj4xLiBLYXVmZW4g U2llIGVpbmVuIFBheXNhZmVjYXJkIFBJTi1Db2RlIG9ubGluZSAoNTAgRVVSKTwvYT48YnIgLz4N CjIuIFNlbmRlbiBTaWUgZGVuIFBJTi1Db2RlICgxNiBaaWZmZXJuKSBhbiBmb2xnZW5kZSBBZHJl c3NlOiZuYnNwOyZuYnNwOzxhIGhyZWY9Im1haWx0bzpjb250YWN0QGJwb3N0cGF5LmNvbSI+Y29u dGFjdEBicG9zdHBheS5jb208L2E+PC9wPg0KDQo8cD4mbmJzcDs8L3A+DQoNCjxwPjxiciAvPg0K R3ImdXVtbDsmc3psaWc7ZSw8YnIgLz4NClpvbGwgS3VuZGVuZGllbnN0PC9wPg0KDQo8cD4mbmJz cDs8L3A+ Why is this email invalid? #As from the headers we can see that this was probably a host called universal.at that accepted some email from the webserver (probably using mod_php, mod_cgi or something like that). That host then sent the email to the MX server of my mail provider using ESMTPS. Several mechanism failed (DMARC/SPF), the remote ip address translated into ppp-202.151.182.86.revip.proen.co.th.\nBesides all that technical stuff, customs service will never ask for money via email. Usually you get a notification in your letter box that tells you where you can get your letter/parcel and what you have to pay for customs.\nI got already a bunch of parcels from outside Austria and they never billed round values like 50€.\nIf you get mails from users that actually authenticate on their SMTP servers, you usually read something like ESMTPA in one of the first Received: headers. Where SMTP is the protocol, E tells you the connection was encrypted and A means the user has been authenticated. Now you gonna look on which server the authentication took place; the first Received: header of an email from me typically looks like this:\nReceived: by mail.messagingengine.com (Postfix) with ESMTPA for \u0026lt;dominic@...\u0026gt;; Sun, 23 Jul 2023 14:14:27 -0400 (EDT) ","date":"29 July 2023","permalink":"/spam/2023-07-29-regionaldirektion-fuer-zoelle-und-indirekte-steuern/","section":"Mail spam I received","summary":"","title":"Regionaldirektion fuer Zölle und indirekte Steuern","updated":"11 January 2025"},{"content":"The road begins on a currently updated OpenBSD 7.3 release. That means, the following commands have been initiated and completed without errors.\n$ doas syspatch $ doas fw_update fw_update: added none; updated none; kept intel,inteldrm,iwn,uvideo,vmm $ doas pkg_add -uU quirks-6.121 signed on 2023-07-25T19:47:50Z This article may be hard to follow, because some hints are probably missing. Use your common sense to fill these gaps yourself. Backups never hurt #We will save a list of the currently installed packages. Just for the case\u0026hellip;\n$ pkg_info -mz \u0026gt;package-list.txt Upgrading to the latest snapshot #$ doas sysupgrade -s Fetching from https://ftp.hostserver.de/pub/OpenBSD/snapshots/amd64/ SHA256.sig 100% |********************************| 2144 00:00 Signature Verified INSTALL.amd64 100% |*******************************| 44817 00:00 base73.tgz 100% |********************************| 368 MB 02:56 bsd 100% |********************************| 24714 KB 00:06 bsd.mp 100% |********************************| 24790 KB 00:10 bsd.rd 100% |********************************| 4549 KB 00:01 comp73.tgz 100% |********************************| 75592 KB 00:31 game73.tgz 100% |********************************| 2748 KB 00:01 man73.tgz 100% |********************************| 7822 KB 00:02 xbase73.tgz 100% |********************************| 57148 KB 00:23 xfont73.tgz 100% |********************************| 22968 KB 00:14 xserv73.tgz 100% |********************************| 14950 KB 00:09 xshare73.tgz 100% |********************************| 4578 KB 00:02 Verifying sets. Fetching updated firmware. fw_update: added none; updated intel,inteldrm,vmm; kept iwn,uvideo Upgrading. The computer reboots automatically at this point. After the reboot, we upgrade all the installed packages.\n$ doas pkg_add -D snap -uvi Update candidates: quirks-6.121 -\u0026gt; quirks-6.135 quirks-6.135 signed on 2023-07-28T05:14:51Z quirks-6.121-\u0026gt;6.135: ok Update candidates: adwaita-icon-theme-43 -\u0026gt; adwaita-icon-theme-44.0p0 Update candidates: librsvg-2.54.5p2 -\u0026gt; librsvg-2.56.3 Update candidates: libxml-2.10.4 -\u0026gt; libxml-2.11.4 Update candidates: libiconv-1.17 -\u0026gt; libiconv-1.17 adwaita-icon-theme-44.0p0:libiconv-1.17-\u0026gt;1.17: ok Update candidates: xz-5.4.1 -\u0026gt; xz-5.4.3 adwaita-icon-theme-44.0p0:xz-5.4.1-\u0026gt;5.4.3: ok adwaita-icon-theme-44.0p0:libxml-2.10.4-\u0026gt;2.11.4: ok Update candidates: pango-1.50.14 -\u0026gt; pango-1.50.14 Update candidates: harfbuzz-7.1.0 -\u0026gt; harfbuzz-8.0.1 Update candidates: graphite2-1.3.14 -\u0026gt; graphite2-1.3.14 adwaita-icon-theme-44.0p0:graphite2-1.3.14-\u0026gt;1.3.14: ok Update candidates: cairo-1.17.8 -\u0026gt; cairo-1.17.8p0 Update candidates: png-1.6.39 -\u0026gt; png-1.6.39 adwaita-icon-theme-44.0p0:png-1.6.39-\u0026gt;1.6.39: ok Update candidates: glib2-2.74.6 -\u0026gt; glib2-2.76.4 Update candidates: libffi-3.4.4 -\u0026gt; libffi-3.4.4 adwaita-icon-theme-44.0p0:libffi-3.4.4-\u0026gt;3.4.4: ok Update candidates: pcre2-10.37p1 -\u0026gt; pcre2-10.37p1 Update candidates: bzip2-1.0.8p0 -\u0026gt; bzip2-1.0.8p0 adwaita-icon-theme-44.0p0:bzip2-1.0.8p0-\u0026gt;1.0.8p0: ok adwaita-icon-theme-44.0p0:pcre2-10.37p1-\u0026gt;10.37p1: ok Update candidates: python-3.10.12 -\u0026gt; python-3.10.12 Update candidates: gettext-runtime-0.21.1 -\u0026gt; gettext-runtime-0.21.1 adwaita-icon-theme-44.0p0:gettext-runtime-0.21.1-\u0026gt;0.21.1: ok Update candidates: sqlite3-3.41.0 -\u0026gt; sqlite3-3.42.0 adwaita-icon-theme-44.0p0:sqlite3-3.41.0-\u0026gt;3.42.0: ok Can\u0026#39;t install python-3.10.12 because of libraries |library crypto.51.0 not found | /usr/lib/libcrypto.so.50.0 (system): bad major | /usr/lib/libcrypto.so.50.2 (system): bad major | /usr/lib/libcrypto.so.52.0 (system): bad major |library ssl.54.0 not found | /usr/lib/libssl.so.53.0 (system): bad major | /usr/lib/libssl.so.53.2 (system): bad major | /usr/lib/libssl.so.55.0 (system): bad major Direct dependencies for python-3.10.12-\u0026gt;3.10.12 resolve to bzip2-1.0.8p0 xz-5.4.3 libffi-3.4.4 sqlite3-3.42.0 gettext-runtime-0.21.1 Full dependency tree is libiconv-1.17 sqlite3-3.42.0 gettext-runtime-0.21.1 bzip2-1.0.8p0 xz-5.4.3 libffi-3.4.4 adwaita-icon-theme-44.0p0:glib2-2.74.6-\u0026gt;2.76.4: ok Update candidates: lzo2-2.10p2 -\u0026gt; lzo2-2.10p2 adwaita-icon-theme-44.0p0:lzo2-2.10p2-\u0026gt;2.10p2: ok adwaita-icon-theme-44.0p0:cairo-1.17.8-\u0026gt;1.17.8p0: ok adwaita-icon-theme-44.0p0:.libs-harfbuzz-5.2.0+harfbuzz-7.1.0-\u0026gt;harfbuzz-8.0.1: ok Update candidates: fribidi-1.0.12 -\u0026gt; fribidi-1.0.13 adwaita-icon-theme-44.0p0:fribidi-1.0.12-\u0026gt;1.0.13: ok adwaita-icon-theme-44.0p0:pango-1.50.14-\u0026gt;1.50.14: ok Update candidates: gdk-pixbuf-2.42.10 -\u0026gt; gdk-pixbuf-2.42.10 Update candidates: shared-mime-info-2.2 -\u0026gt; shared-mime-info-2.2 adwaita-icon-theme-44.0p0:shared-mime-info-2.2-\u0026gt;2.2: ok Update candidates: tiff-4.5.0p0 -\u0026gt; tiff-4.5.1 Update candidates: jpeg-2.1.4v0 -\u0026gt; jpeg-2.1.5.1v0 adwaita-icon-theme-44.0p0:jpeg-2.1.4v0-\u0026gt;2.1.5.1v0: ok Update candidates: zstd-1.5.5 -\u0026gt; zstd-1.5.5 Update candidates: lz4-1.9.4 -\u0026gt; lz4-1.9.4 adwaita-icon-theme-44.0p0:lz4-1.9.4-\u0026gt;1.9.4: ok adwaita-icon-theme-44.0p0:zstd-1.5.5-\u0026gt;1.5.5: ok adwaita-icon-theme-44.0p0:.libs-tiff-4.4.0p2+tiff-4.5.0p0-\u0026gt;tiff-4.5.1: ok adwaita-icon-theme-44.0p0:gdk-pixbuf-2.42.10-\u0026gt;2.42.10: ok adwaita-icon-theme-44.0p0:librsvg-2.54.5p2-\u0026gt;2.56.3: ok Update candidates: hicolor-icon-theme-0.17 -\u0026gt; hicolor-icon-theme-0.17 gtk-update-icon-cache-3.24.37-\u0026gt;gtk4-update-icon-cache-4.10.4 forward dependencies: | Dependency of neovim-0.8.3 on gtk-update-icon-cache-* doesn\u0026#39;t match | Dependency of gtk+3-3.24.37 on gtk-update-icon-cache-* doesn\u0026#39;t match | Dependency of adwaita-icon-theme-43 on gtk-update-icon-cache-* doesn\u0026#39;t match | Dependency of gnome-icon-theme-3.12.0p6 on gtk-update-icon-cache-* doesn\u0026#39;t match | Dependency of nitrogen-1.6.1p2 on gtk-update-icon-cache-* doesn\u0026#39;t match | Dependency of gcr-3.41.1p1 on gtk-update-icon-cache-* doesn\u0026#39;t match | Dependency of chromium-111.0.5563.110 on gtk-update-icon-cache-* doesn\u0026#39;t match | Dependency of gnome-icon-theme-symbolic-3.12.0p4 on gtk-update-icon-cache-* doesn\u0026#39;t match | Dependency of gtk+2-2.24.33p4 on gtk-update-icon-cache-* doesn\u0026#39;t match Update candidates: neovim-0.8.3 -\u0026gt; neovim-0.9.1p0 Merging neovim-0.8.3-\u0026gt;0.9.1p0 (ok) [...] There are more messages that I found interesting, but I haven\u0026rsquo;t found much information about these yet.\n[...] Update candidates: drill-1.8.3 -\u0026gt; drill-1.8.3p0 Update candidates: libldns-1.8.3 -\u0026gt; libldns-1.8.3p0 Can\u0026#39;t install libldns-1.8.3p0 because of libraries Can\u0026#39;t install drill-1.8.3p0 because of libraries Direct dependencies for drill-1.8.3-\u0026gt;1.8.3p0 resolve to libldns-1.8.3 Full dependency tree is libldns-1.8.3 [...] [...] Detected loop, merging sets ok | gtk+3-cups-3.24.37-\u0026gt;3.24.38 | adwaita-icon-theme-43+chromium-111.0.5563.110+gcr-3.41.1p1+gnome-icon-theme-3.12.0p6+gnome-icon-theme-symbolic-3.12.0p4+gtk+2-2.24.33p4+gtk+3-3.24.37+gtk-update-icon-cache-3.24.37+neovim-0.8.3+nitrogen-1.6.1p2-\u0026gt;adwaita-icon-theme-44.0p0+chromium-115.0.5790.102+gcr-3.41.1p2+gnome-icon-theme-3.12.0p7+gnome-icon-theme-symbolic-3.12.0p5+gtk+2-2.24.33p5+gtk+3-3.24.38+gtk4-update-icon-cache-4.10.4+neovim-0.9.1p0+nitrogen-1.6.1p3 Update candidates: cups-libs-2.4.2p0 -\u0026gt; cups-libs-2.4.6 Update candidates: avahi-libs-0.8p3 -\u0026gt; avahi-libs-0.8p3 Update candidates: libevent-2.1.12p0 -\u0026gt; libevent-2.1.12p0 Can\u0026#39;t install libevent-2.1.12p0 because of libraries Update candidates: dbus-1.14.6p0v0 -\u0026gt; dbus-1.14.8v0 [...] At this point I spent a few hours looking for a solution \u0026ndash; I haven\u0026rsquo;t found one yet. I will probably don\u0026rsquo;t look at current to soon.\nRevert back to -release #Nonetheless, I could not fix this and I wanted to revert my system back to -release. There is no command to downgrade from -snapshot back to -release so we have to re-install the base files of the last -release.\nBoot the bsd.rd kernel which will boot up to this prompt:\nWelcome to the OpenBSD/amd64 7.3 installation program. (I)nstall, (U)pgrade, (A)utoinstall or (S)hell? █ Enter u and hit Enter.\nAt any prompt except password prompts you can escape to a shell by typing \u0026#39;!\u0026#39;. Default answers are shown in []\u0026#39;s and are selected by pressing RETURN. You can exit this program at any time by pressing Control-C, but this can leave yout system in an inconsistent state. Choose your keyboard layout (\u0026#39;?\u0026#39; or \u0026#39;L\u0026#39; for list) [default] de.nodead Available disks are: sd0. Which disk is the root disk? (\u0026#39;?\u0026#39; for details) [sd0] sd0 Checking root filesystem (fsck -fp /dev/sd0a)... OK. Mounting root filesystem (mount -o ro /dev/sd0a /mnt)... OK. ifconfig: route: bad value Force checking of clean non-root filesystems? [no] no fsck -p 888c179eaf1d9c7e.l... OK. fsck -p 888c179eaf1d9c7e.d... OK. fsck -p 888c179eaf1d9c7e.f... OK. fsck -p 888c179eaf1d9c7e.g... OK. fsck -p 888c179eaf1d9c7e.h... OK. fsck -p 888c179eaf1d9c7e.k... OK. fsck -p 888c179eaf1d9c7e.j... OK. fsck -p 888c179eaf1d9c7e.e... OK. /dev/sd0a (888c179eaf1d9c7e.a) on /mnt type ffs (rw, local) /dev/sd0l (888c179eaf1d9c7e.l) on /mnt/home type ffs (rw, local, nodev, nosuid) /dev/sd0d (888c179eaf1d9c7e.d) on /mnt/tmp type ffs (rw, local, nodev, nosuid) /dev/sd0f (888c179eaf1d9c7e.f) on /mnt/usr type ffs (rw, local, nodev) /dev/sd0g (888c179eaf1d9c7e.g) on /mnt/usr/X11R6 type ffs (rw, local, nodev) /dev/sd0h (888c179eaf1d9c7e.h) on /mnt/usr/local type ffs (rw, local, nodev, wxallowed) /dev/sd0k (888c179eaf1d9c7e.k) on /mnt/usr/obj type ffs (rw, local, nodev, nosuid) /dev/sd0j (888c179eaf1d9c7e.j) on /mnt/usr/src type ffs (rw, local, nodev, nosuid) /dev/sd0e (888c179eaf1d9c7e.e) on /mnt/var type ffs (rw, local, nodev, nosuid) Let\u0026#39;s upgrade the sets! Location of sets? (disk http nfs or \u0026#39;done\u0026#39;) [http] HTTP proxy URL? (e.g. \u0026#39;http://proxy:8080\u0026#39;, or \u0026#39;none\u0026#39;) [none] HTTP Server? (hostname, List#, \u0026#39;done\u0026#39; or \u0026#39;?\u0026#39;) [ftp.hostserver.de] Server directory? [pub/OpenBSD/snapshots/amd64] pub/OpenBSD/7.3/amd64 Select sets by entering a set name, a file name pattern or \u0026#39;all\u0026#39;. De-select sets by prepending a \u0026#39;-\u0026#39;, e.g.: \u0026#39;-game*\u0026#39;. Selected sets are labelled \u0026#39;[X]\u0026#39;. [X] bsd [X] base73.tgz [X] game73.tgz [X] xfont73.tgz [X] bsd.mp [X] comp73.tgz [X] xbase73.tgz [X] xserv73.tgz [X] bsd.rd [X] man73.tgz [X] xshare73.tgz Set name(s)? (or \u0026#39;abort\u0026#39; or \u0026#39;done\u0026#39;) [done] done Directory does not contain SHA256.sig. Continue without verification? [no] yes Installing bsd 100% |**************************| 24714 KB 00:00 Installing bsd.mp 100% |**************************| 24790 KB 00:00 Installing bsd.rd 100% |**************************| 4549 KB 00:00 Installing base73.tgz 100% |**************************| 368 MB 00:14 Installing comp73.tgz 100% |**************************| 75592 KB 00:06 Installing man73.tgz 100% |**************************| 7822 KB 00:01 Installing game73.tgz 100% |**************************| 2748 KB 00:00 Installing xbase73.tgz 100% |**************************| 57148 KB 00:03 Installing xshare73.tgz 100% |**************************| 4578 KB 00:02 Installing xfont73.tgz 100% |**************************| 22968 KB 00:01 Installing xserv73.tgz 100% |**************************| 14950 KB 00:00 Location of sets? (disk http nfs or \u0026#39;done\u0026#39;) [done] done Making all device nodes... done. Multiprocessor machine; using bsd.mp instead of bsd. fw_update: added none; updated none; kept intel,inteldrm,iwn,uvideo,vmm Relinking to create unique kernel... done. CONGRATULATIONS! Your OpenBSD upgrade has been successfully completed! Exit to (S)hell, (H)alt or (R)eboot? [reboot] █ When asked for the Server directory change from snapshots to 7.3.\npub/OpenBSD/7.3/amd64 The script/log above has been taken from the email that get sent to root after the upgrade. There might be some typing errors, but the screen output looks generally like that\u0026hellip; Back on release #But we still run the -snapshot kernel.\n$ uname -a OpenBSD lenovo.lan 7.3 GENERIC.MP#1125 amd64 Installing the latest binary patches will also create an actual kernel.\n$ doas syspatch Get/Verify syspatch73-001_bgpd.tgz 100% |**********| 316 KB 00:00 Installing patch 001_bgpd Get/Verify syspatch73-002_bgpd.tgz 100% |**********| 288 KB 00:00 Installing patch 002_bgpd Get/Verify syspatch73-003_rpki.tgz 100% |**********| 104 KB 00:00 Installing patch 003_rpki Get/Verify syspatch73-004_ssl.tgz 100% |***********| 2570 KB 00:04 Installing patch 004_ssl Get/Verify syspatch73-005_libx11.tgz 100% |********| 1769 KB 00:01 Installing patch 005_libx11 Get/Verify syspatch73-006_bgpd.tgz 100% |**********| 210 KB 00:00 Installing patch 006_bgpd Get/Verify syspatch73-007_httpd.tgz 100% |*********| 80314 00:00 Installing patch 007_httpd Get/Verify syspatch73-008_elf.tgz 100% |***********| 88233 00:00 Installing patch 008_elf Get/Verify syspatch73-009_bgpd.tgz 100% |**********| 210 KB 00:00 Installing patch 009_bgpd Get/Verify syspatch73-010_ssh_age... 100% |********| 1898 KB 00:00 Installing patch 010_ssh_agent Get/Verify syspatch73-011_amdcpu.tgz 100% |********| 70176 00:00 Installing patch 011_amdcpu Get/Verify syspatch73-012_amdfirm... 100% |********| 364 KB 00:00 Installing patch 012_amdfirmware Get/Verify syspatch73-013_amdcpuf... 100% |********| 34012 00:00 Installing patch 013_amdcpufirmware Get/Verify syspatch73-014_wscons.tgz 100% |********| 39732 00:00 Installing patch 014_wscons Get/Verify syspatch73-015_hvamdcp... 100% |********| 69888 00:00 Installing patch 015_hvamdcpu Relinking to create unique kernel... done; reboot to load the new kernel Errata can be reviewed under /var/syspatch To apply the latest AMD microcode updates, we still have to execute two other commands.\n$ doas fw_update fw_update: added none; updated none; kept intel,inteldrm,iwn,uvideo,vmm $ doas installboot -v sd0 Using / as root installing bootstrap on /dev/rsd0c using first-stage /usr/mdec/biosboot, second-stage /usr/mdec/boot copying /usr/mdec/BOOTIA32.EFI to /tmp/installboot.gVEta0dehr/efi/BOOT/BOOTIA32.EFI copying /usr/mdec/BOOTX64.EFI to /tmp/installboot.gVEta0dehr/efi/BOOT/BOOTX64.EFI $ shutdown -r now Shutdown NOW! shutdown: [pid 4264] *** FINAL System shutdown message from dominic@lenovo.lan *** System going down IMMEDIATELY $ uname -a OpenBSD lenovo.lan 7.3 GENERIC.MP#3 amd64 If for any reasons the packages cannot be updated because we still have newer packages installed (from snapshots) than available on release:\nRemove them all and re-install them based on the backup (package-list.txt) we did earlier.\n$ doas pkg_delete -X rsync-3.2.7: ok libiconv-1.17:hydra-9.2: ok libiconv-1.17:freerdp-2.10.0: ok libiconv-1.17:chromium-111.0.5563.110: ok libiconv-1.17:gtk+3-cups-3.24.37: ok libiconv-1.17:cups-libs-2.4.2p0: ok libiconv-1.17:pcmanfm-1.3.2p0: ok [...] Re-install them based on our backup file.\n$ doas pkg_add -z -l package-list.txt quirks-6.121 signed on 2023-07-25T19:47:50Z quirks-6.121: ok aircrack-ng-1.5.2p8:sqlite3-3.41.0: ok aircrack-ng-1.5.2p8:pcre-8.44: ok [...] Can\u0026#39;t find uvideo-firmware-1.2p3 Can\u0026#39;t find vmm-firmware-1.14.0p4 zsh-5.9: ok Running tags: ok Updating font cache: ok The following new rcscripts were installed: /etc/rc.d/apache2 /etc/rc.d/gitdaemon /etc/rc.d/iperf3 /etc/rc.d/messagebus /etc/rc.d/rsyncd /etc/rc.d/saslauthd See rcctl(8) for details. New and changed readme(s): [...] --- +fish-3.6.0p0 ------------------- You may wish to add /usr/local/share/fish/man to /etc/man.conf --- +i3status-2.14 ------------------- Before running i3status, a configuration file needs to be created. Copy the provided /usr/local/share/examples/i3status/i3status.conf to ~/.i3status.conf and modify as necessary. Output truncated to save some space/words.\nAgain, a shutdown -r now reboots the computer. Now all should be on an updated OpenBSD 7.3 (release) again.\n","date":"29 July 2023","permalink":"/posts/2023/48-going-back-from-openbsd-snapshot/","section":"Blog","summary":"Made from the road of me trying out OpenBSDs current branch\u0026hellip;","title":"Going back from OpenBSD-snapshot","updated":"29 September 2024"},{"content":"I got an email from another weewx-netatmo user Patrick yesterday, in which he asked if my WeeWX installation was still running, because we use the same extension to fetch the weather data from the netatmo servers (this method cloud is already rediculous, but it works with that hardware, so yes\u0026hellip;).\nAfter looking on my servers logfiles I could confirm the extension wasn\u0026rsquo;t working as expected any more.\nToday I found an actual fork of the fork of the original extension:\nhttps://github.com/Buco7854/weewx-netatmo\nAnd this is how I upgraded the netatmo weewx extension #Uninstall the old extension:\n$ doas -u weewx /home/weewx/bin/wee_extension --uninstall netatmo Download and install the new extension:\n$ doas -u weewx wget -O weewx-netatmo.zip https://github.com/Buco7854/weewx-netatmo/archive/master.zip $ doas -u weewx /home/weewx/bin/wee_extension --install weewx-netatmo.zip Go to https://dev.netatmo.com/apps/ and update your app to include a refresh_token.\nUpdate the configuration with\n$ doas -u weewx /home/weewx/bin/wee_config --reconfigure That should already ask for your refresh_token. Double check this in your weewx.conf configuration file, as it might not get written properly (like in my case).\nThe configuration should look like this now:\n[netatmo] client_id = ************************ client_secret = *************************** refresh_token = ************************|******************************** driver = user.netatmo mode = cloud I removed the username and password variables but added the refresh_token manually because the configuration was not properly written by wee_config --reconfigure.\nA restart of WeeWX should fetch the data again.\n$ doas rcctl restart weewx Random failure on authentication to netatmo server #It sometimes happens at my server that I only get a 400 response:\nweewxd: netatmo: netatmo-client: failed attempt 1 of 5 to get data: HTTP Error 400: weewxd: netatmo: netatmo-client: failed attempt 2 of 5 to get data: HTTP Error 400: weewxd: netatmo: netatmo-client: failed attempt 3 of 5 to get data: HTTP Error 400: weewxd: netatmo: netatmo-client: failed attempt 4 of 5 to get data: HTTP Error 400: weewxd: netatmo: netatmo-client: failed attempt 5 of 5 to get data: HTTP Error 400: weewxd: netatmo: netatmo-client: failed to get data after 5 attempts read_station is all you need I don\u0026rsquo;t have found a solution for this yet\u0026hellip;\nProblems on a Raspberry Pi? #I\u0026rsquo;m not sure about the cause of this behaviour, but Andreas DG0LFL reported, that his Raspberry Pi 4 (running Debian 10 Buster) could not update the token so he solved this by creating /etc/systemd/system/weewx.timer with the following contents:\n[Unit] Description=WeeWX-Timer [Timer] OnBootSec=5min OnUnitActiveSec=120min Unit=weewx.service [Install] WantedBy=multi-user.target As for my understanding this should start weewx.service 5 minutes after system boot as well as every 120 minutes after the services last start.\nHe had noticed, that the netatmo-driver wasn\u0026rsquo;t updating the token so it got invalid after 10800 seconds (3 hours).\nYou would probably need to run systemctl enable weewx.timer to enable the timer.\n","date":"15 July 2023","permalink":"/posts/2023/47-update-weewx-netatmo-extension/","section":"Blog","summary":"Upgrade the authentication method from \u003cem\u003epassword\u003c/em\u003e to \u003cem\u003epreauthenticated refresh_token\u003c/em\u003e","title":"Update weewx-netatmo extension","updated":"29 September 2024"},{"content":"I\u0026rsquo;ve been using other peoples config for Neovim for a while and although it worked well for the most files I was a bit unhappy because I rarely understood most configuration parts of it.\nAs I\u0026rsquo;m not working in IT or other computer related areas I\u0026rsquo;m not the one that feels the need to dive into this deeply. I\u0026rsquo;m using AstroNvim for now (I also had a look at NvChad) and I\u0026rsquo;m quite happy since today when I finally got to fix the problem with Telescope (fzf) which never worked before on either FreeBSD nor OpenBSD.\nMove into .local/share/nvim/lazy/telescope-fzf-native.nvim directory.\nMake sure GNU make is installed pkg install gmake on FreeBSD or pkg_add gmake on OpenBSD.\nExecute gmake which creates the file build/libfzf.so\nNow Telescope worked for me.\nlua_ls still won\u0026rsquo;t work (platform not supported).\n","date":"23 June 2023","permalink":"/posts/2023/46-neovim-telescope-freebsd-problems/","section":"Blog","summary":"I dropped my old configuration that I practically\ncopied from other people for Neovim. I\u0026rsquo;m now using AstroNvim\u0026hellip;","title":"Neovim, Telescope, FreeBSD: problems?","updated":"18 November 2023"},{"content":"For very rare situations this git command is very handy. I use this on my dotfiles repository on a config file that I don\u0026rsquo;t need to update recent changes (like htoprc).\nIgnore an already tracked file #$ git update-index --assume-unchanged \u0026lt;filename\u0026gt; Start tracking again #$ git update-index --no-assume-unchanged \u0026lt;filename\u0026gt; Source: https://stackoverflow.com/a/23673910\nList untracked files #To list all files with the assumed-unchanged bit set, run this command.\n$ git ls-files -v | grep \u0026#34;^h\u0026#34; h go.mod h go.sum The lowercase h indicates that.\n","date":"4 June 2023","permalink":"/posts/2023/45-stop-tracking-changes-of-a-file-with-git/","section":"Blog","summary":"Don\u0026rsquo;t overuse this; it could get a bit more complicated to track\ndown errors when ignoring changes of files\u0026hellip;","title":"Stop tracking changes of a file with git","updated":"29 September 2024"},{"content":"Let this be a quick one again: my Librewolf browser plays perfectly fine audio now on any YouTube video.\nSettings in Librewolf #Open about:config and look for or create media.cubeb.backend. This setting should contain a string value.\nmedia.cubeb.backend sndio I\u0026rsquo;ve also tried to set this to oss but it works better with sndio.\nSystem wide settings #Enable sndio daemon in rc.conf #sndiod_enable=\u0026#34;YES\u0026#34; Eventually run doas service sndiod start.\nSettings in sysctl.conf #kern.sched.preempt_thresh=224 dev.pcm.0.play.vchanrate=192000 dev.pcm.1.play.vchanrate=192000 hw.snd.latency=7 ","date":"4 June 2023","permalink":"/posts/2023/44-sound-flicking-and-stuttering-in-librewolf-firefox/","section":"Blog","summary":"Finally. Normal sound in Librewolf on YouTube. This took quite a\nwhile for me to fix\u0026hellip;","title":"Sound flicking and stuttering in librewolf/firefox","updated":"29 September 2024"},{"content":"Listen to Ö3 at 97.8 MHz #$ rtl_fm -f 97800000 -M wbfm - | play -t raw -r 32k -es -b 16 -c 1 -V1 - It is usually -r 24k if we don\u0026rsquo;t use -M wbfm.\n","date":"4 June 2023","permalink":"/posts/2023/43-old-school-radio-with-rtl-sdr/","section":"Blog","summary":"Listen to old-school radio on the command line with \u003ccode\u003ertl_sdr\u003c/code\u003e.","title":"Listen to VHF/UHF radio with an RTL-SDR stick","updated":"29 September 2024"},{"content":"I like to have my computer reduce the screen brightness when it\u0026rsquo;s not connected to an external power source.\npowersave.sh #This is (mainly) used to control Intel SpeedStep®. I tend to save my custom applications and scripts in $HOME/bin. Saved as $HOME/bin/powersave.sh.\n#! /bin/sh case $( sysctl -n hw.acpi.acline ) in (0) # BATTERY doas sysctl dev.hwpstate_intel.0.epp=100 1\u0026gt; /dev/null 2\u0026gt; /dev/null doas sysctl dev.hwpstate_intel.1.epp=100 1\u0026gt; /dev/null 2\u0026gt; /dev/null doas sysctl dev.hwpstate_intel.2.epp=100 1\u0026gt; /dev/null 2\u0026gt; /dev/null doas sysctl dev.hwpstate_intel.3.epp=100 1\u0026gt; /dev/null 2\u0026gt; /dev/null doas sysctl dev.hwpstate_intel.4.epp=100 1\u0026gt; /dev/null 2\u0026gt; /dev/null doas sysctl dev.hwpstate_intel.5.epp=100 1\u0026gt; /dev/null 2\u0026gt; /dev/null doas sysctl dev.hwpstate_intel.6.epp=100 1\u0026gt; /dev/null 2\u0026gt; /dev/null doas sysctl dev.hwpstate_intel.7.epp=100 1\u0026gt; /dev/null 2\u0026gt; /dev/null #backlight 20 1\u0026gt; /dev/null 2\u0026gt; /dev/null backlight $(cat ${HOME}/.backlight-bat) 1\u0026gt; /dev/null 2\u0026gt; /dev/null ;; (1) # AC doas sysctl dev.hwpstate_intel.0.epp=0 1\u0026gt; /dev/null 2\u0026gt; /dev/null doas sysctl dev.hwpstate_intel.1.epp=50 1\u0026gt; /dev/null 2\u0026gt; /dev/null doas sysctl dev.hwpstate_intel.2.epp=100 1\u0026gt; /dev/null 2\u0026gt; /dev/null doas sysctl dev.hwpstate_intel.3.epp=100 1\u0026gt; /dev/null 2\u0026gt; /dev/null doas sysctl dev.hwpstate_intel.4.epp=100 1\u0026gt; /dev/null 2\u0026gt; /dev/null doas sysctl dev.hwpstate_intel.5.epp=100 1\u0026gt; /dev/null 2\u0026gt; /dev/null doas sysctl dev.hwpstate_intel.6.epp=100 1\u0026gt; /dev/null 2\u0026gt; /dev/null doas sysctl dev.hwpstate_intel.7.epp=100 1\u0026gt; /dev/null 2\u0026gt; /dev/null #backlight 100 1\u0026gt; /dev/null 2\u0026gt; /dev/null backlight $(cat ${HOME}/.backlight-ac) 1\u0026gt; /dev/null 2\u0026gt; /dev/null ;; esac The script is run by a line in my personal cron table. A little delay (up to a minute) is expected.\n* * * * * ~/bin/powersave.sh xbl #A script to modify different backlight settings depending on the connected power source. Saved as $HOME/bin/xbl.\n#! /bin/sh print_usage () { echo \u0026gt;\u0026amp;2 \u0026#34;usage: $(basename ${0}) [0..100]\u0026#34; exit 1 } # check if argument given or not (list or set value) if [ $# -eq 1 ] then # set value (select between ac or bat mode) # check if argument is integer between 0,100 if [ \u0026#34;$1\u0026#34; -eq \u0026#34;$1\u0026#34; ] 2\u0026gt;/dev/null then if [ \u0026#34;$1\u0026#34; -ge 0 ] \u0026amp;\u0026amp; [ \u0026#34;$1\u0026#34; -le 100 ] 2\u0026gt;/dev/null then # argument given and between 0,100 case $( sysctl -n hw.acpi.acline ) in (0) # BATTERY echo \u0026#34;$1\u0026#34; \u0026gt; ${HOME}/.backlight-bat ;; (1) # AC echo \u0026#34;$1\u0026#34; \u0026gt; ${HOME}/.backlight-ac ;; esac backlight \u0026#34;$1\u0026#34; else # arg not between 0 and 100 print_usage fi else # arg not an integer print_usage fi else # no args given, only list values case $( sysctl -n hw.acpi.acline ) in (0) # BATTERY current=bat ;; (1) # AC current=ac ;; esac for status in ac bat do if [ \u0026#34;${status}\u0026#34; = \u0026#34;${current}\u0026#34; ] then echo -e \u0026#34;${status}: ★ \\t$( cat ${HOME}/.backlight-${status} )\u0026#34; | tr \u0026#34;[:lower:]\u0026#34; \u0026#34;[:upper:]\u0026#34; else echo -e \u0026#34;${status}:\\t$( cat ${HOME}/.backlight-${status} )\u0026#34; | tr \u0026#34;[:lower:]\u0026#34; \u0026#34;[:upper:]\u0026#34; fi done fi ","date":"28 May 2023","permalink":"/posts/2023/42-backlight-control-on-a-lenovo-x1-carbon/","section":"Blog","summary":"These two scripts let the X1 switch to a predefined setting for\nbattery or ac mode. It also remembers the last used setting for either mode.","title":"Backlight control on a Lenovo X1 Carbon","updated":"29 September 2024"},{"content":"I\u0026rsquo;ve moved my server to a new provider and changed the OS within this task from Rocky Linux to OpenBSD.\nInstallation of WeeWX #The Installation Guide is very useful and you should follow its procedure.\nI installed WeeWX into /home/weewx. I also created a new user named weewx.\nweewx:*:999:999:WeeWX Daemon:/home/weewx:/sbin/nologin Also install some prerequisites:\npkg_add py3-configobj py3-serial py3-pyusb py3-pip py3-cheetah py3-jplephem py3-pymysql $ python3 ./setup.py build $ doas python3 ./setup.py install Optionally install ephem:\n$ doas -u weewx pip install ephem You may want to change owner of the installed files (in case you didn\u0026rsquo;t create the weewx user beforehand and used the root user for that before).\n# cd /home/weewx # chown -R weewx:weewx . # cd /var/www/weewx # chown -R weewx:weewx . Finally installed python stuff ## pkg_info | grep py3 | awk \u0026#39;{ print $1 }\u0026#39; py3-chardet-5.1.0 py3-cheetah-3.2.6p3 py3-configobj-5.0.6p7 py3-jplephem-2.18p0 py3-numpy-1.24.1 py3-pip-23.0.1 py3-pymysql-1.0.2p2 py3-pyusb-1.2.1 py3-serial-3.4p5 py3-setuptools-64.0.3p1v0 py3-six-1.16.0p2 $ doas -u weewx pip list Package Version ---------- ------- chardet 5.1.0 Cheetah3 3.2.6 configobj 5.0.6 ephem 4.1.4 jplephem 2.18 numpy 1.24.1 pip 23.0.1 PyMySQL 1.0.2 pyserial 3.4 pyusb 1.2.1 ranger-fm 1.9.3 setuptools 64.0.3 six 1.16.0 Setting up the start script #I\u0026rsquo;ve put the following file into /etc/rc.d/weewx:\n#!/bin/sh # Start script for FreeBSD, contributed by user Fabian Abplanalp # Put this script in /usr/local/etc/rc.d then adjust WEEWX_BIN and # WEEWX_CFG values in /etc/defaults/weewx # some small modifications by Dominic Reich “OE7DRT” WEEWX_BIN=\u0026#34;/home/weewx/bin/weewxd\u0026#34; WEEWX_CFG=\u0026#34;/home/weewx/weewx.conf\u0026#34; #WEEWX_PID=\u0026#34;/var/run/weewx/weewx.pid\u0026#34; WEEWX_PID=\u0026#34;/home/weewx/weewx.pid\u0026#34; DOAS=\u0026#34;/usr/bin/doas -u weewx\u0026#34; # Read configuration variable file if it is present #[ -r /etc/defaults/weewx ] \u0026amp;\u0026amp; . /etc/defaults/weewx [ -r /home/weewx/defaults ] \u0026amp;\u0026amp; . /home/weewx/defaults case \u0026#34;$1\u0026#34; in \u0026#34;start\u0026#34;) echo \u0026#34;Starting weewx...\u0026#34; ${DOAS} ${WEEWX_BIN} ${WEEWX_CFG} --daemon --pidfile ${WEEWX_PID} \u0026amp; #echo $! \u0026gt; ${WEEWX_PID} echo \u0026#34;done\u0026#34; ;; \u0026#34;stop\u0026#34;) echo \u0026#34;Stopping weewx...\u0026#34; if [ -f ${WEEWX_PID} ] ; then kill `cat ${WEEWX_PID}` rm ${WEEWX_PID} echo \u0026#34;done\u0026#34; else echo \u0026#34;not running?\u0026#34; fi ;; \u0026#34;restart\u0026#34;) echo \u0026#34;Restarting weewx...\u0026#34; $0 stop sleep 2 $0 start ;; *) echo \u0026#34;$0 [start|stop|restart]\u0026#34; ;; esac Add weewx to pkg_scripts= in /etc/rc.conf.local and start it with\n$ doas rcctl start weewx Status text for APRSWXNET (aprs.fi) #I do also send a status message which adds a nice link back to my weather website on aprs.fi.\nThis is basically done with a python script run by cron every hour.\n#!/usr/bin/env python3 \u0026#34;\u0026#34;\u0026#34;sending aprs status packets for my weather station\u0026#34;\u0026#34;\u0026#34; import aprslib def main(): \u0026#34;\u0026#34;\u0026#34;main func\u0026#34;\u0026#34;\u0026#34; AIS = aprslib.IS(\u0026#34;OE7DRT-13\u0026#34;, passwd=\u0026#34;*****\u0026#34;, port=14580) AIS.connect() AIS.sendall(\u0026#34;OE7DRT-13\u0026gt;APRS,TCPIP*:\u0026gt;Weatherpage: https://wx.oe7drt.com\\r\\n\u0026#34;) if __name__ == \u0026#34;__main__\u0026#34;: main() $ crontab -l 57 * * * * python3 /home/dominic/bin/aprs_sendstatus.py ","date":"27 May 2023","permalink":"/posts/2023/41-moving-weewx-to-openbsd/","section":"Blog","summary":"I moved my WeeWX setup to my new server, which is running OpenBSD\n7.3.","title":"Moving WeeWX to OpenBSD","updated":"29 September 2024"},{"content":"1163g\nlinux machine\u0026hellip; pat, winlink, had openbsd and freebsd on it for a while\u0026hellip;\nThe X1 Carbon (Gen 7) weights 1160 grams.\nI do have Arch Linux installed — which is my daily driver. I sometimes boot from another NVME disk via a USB adapter into FreeBSD or OpenBSD to keep them up to date.\nI would like to have more power and RAM on this machine (more power cores) but hey, it is really small so I will live with it\u0026hellip;\nThe fan sometimes drives me crazy at it sometimes starts at full speed. It sometimes helps to smash the laptop onto the table or reboot \u0026ndash; still very annoying.\nAlso the backlight of the keyboard is nothing you\u0026rsquo;d expect from Lenovo but I guess the turned those IBM Thinkpads now into just another far-east trash device.\n","date":"9 May 2023","permalink":"/equipment/laptops/lenovo-x1-carbon/","section":"Equipment","summary":"Compact laptop with solid hardware for power users.","title":"Lenovo X1 Carbon Gen7","updated":"16 January 2026"},{"content":"This tuner/amplifier can also be used with other QRP radios as the TX-500.\nBlue light repair #I am subscribed to a few mailing lists and recently I came across this one here:\nPA500 blue bypass light - as the title suggests, it is about the blue bypass light.\nI am pretty sure the blue light lit randomly, I think I\u0026rsquo;ve seen it when I changed the PA500 operational mode back to full automatic.\nAnyway, the blue light was off for a while now and I wasn\u0026rsquo;t sure what I should do with it, just ignore it or send the PA500 back for repair - none of that was a satisfying option to me as both would nag on my mind :D\nWhen I found the article mentioned above I knew I wasn\u0026rsquo;t the only one with this problem and I joined the conversation and asked about the blue light when Oliver suggested to send me one.\nNow what?\nThe PA500 \u0026ndash; opened; showing the location of the LEDs Right! I changed the blue LED last saturday (today is Sunday, 3 March) and I had the chance to test it today \u0026ndash; it is perfectly fine!\nSoldering the LED with the LEDS attached to the aluminium housing so it will get the correct alignment to fit into the hole later I figured that out after I soldered the LED \u0026ndash; luckily I only had to push the LED a bit down to get it into the hole.\nAlthough I used a 1mm tip I thought I might got the board too hot already (350°C).\nFinally the LED lights again! ","date":"1 May 2023","permalink":"/equipment/radio-stuff/accessories/diy599-pa500/","section":"Equipment","summary":"An absolute must-have if you own a QRP radio like the TX-500.","title":"DIY599 PA500","updated":"9 March 2025"},{"content":"Finally. if_iwlwifi works (sometimes) on my WiFi network at home!\nThose are the relevant parts in my /etc/rc.conf configuration file.\nstatic_routes=\u0026#34;thor_lan thor_wifi\u0026#34; route_thor_lan=\u0026#34;-net 192.168.2.0/24 192.168.1.1\u0026#34; route_thor_wifi=\u0026#34;-net 192.168.1.0/24 192.168.2.1\u0026#34; ifconfig_re0=\u0026#34;DHCP\u0026#34; create_args_wlan0=\u0026#34;country AT metric 100 ssid AP1\u0026#34; wlans_iwlwifi0=\u0026#34;wlan0\u0026#34; ifconfig_wlan0=\u0026#34;WPA SYNCDHCP\u0026#34; create_args_wlan1=\u0026#34;country AT ssid AP2\u0026#34; wlans_run0=\u0026#34;wlan1\u0026#34; ifconfig_wlan1=\u0026#34;WPA SYNCDHCP defaultif\u0026#34; In fact I only made a single change to the suggested options from the handbook.\ncreate_args_wlan0=\u0026#34;regdomain ETSI2 country AT\u0026#34; As you can see, I removed the redgomain ETSI2 part. I\u0026rsquo;ve also tried ETSI so far but that also didn\u0026rsquo;t work.\nThis works with a Killer Wi-Fi 6 AX1650 card. I haven\u0026rsquo;t tried this with the Intel AX200(NGW) card that originally was built into my laptop.\nThis works for me sometimes. But random panics still occur! ","date":"23 April 2023","permalink":"/posts/2023/40-iwlwifi-and-freebsd/","section":"Blog","summary":"Finally this \u003ccode\u003eiwlwifi\u003c/code\u003e driver works. I\u0026rsquo;m curios for how long this will last\u0026hellip;","title":"iwlwifi and FreeBSD","updated":"29 September 2024"},{"content":"I am very happy with this antenna \u0026ndash; it is very compact when fold together and also quite compact when hung from on a mast. It takes about 5 meters into one direction and about 6 meters up on the mast.\nThere is one disadvantage of this antenna: it is only for one frequency, but I usually achieve an SWR of about 1:1.3 instantly when I deploy this antenna at home in my garden.\nI made my fist QSO with this antenna into Israel (about 2600 km) with a Yaesu FT-891.\nMost of my Winlink sessions from home include this antenna as it takes minimal space and I work a winlink gateway in France or the Netherlands quickly (they respond often within the first three requests).\nI also use a choke with the antenna.\n","date":"23 April 2023","permalink":"/equipment/radio-stuff/antennas/homebrew-dipole-for-20m/","section":"Equipment","summary":"This is my non-plus-ultra antenna. Often used at home and portable.","title":"Homebrew dipole for 20m","updated":"3 February 2026"},{"content":"Create or change the NFS share #First of all edit your shared folder. Control Panel → Shared Folder → Edit → NFS Permissions → Create (or Edit).\nSetting Value Hostname or IP 192.168.10.100 (actual IP) Privilege Read/Write Squash Map all users to admin Security sys Change the user and group ids in /etc/exports #Now login to the NAS with SSH and open the file /etc/exports as the user root.\nThe file should look similar to this one:\n/volume1/video\t192.168.10.100(rw,async,no_wdelay,crossmnt,insecure,all_squash,insecure_locks,sec=sys,anonuid=1026,anongid=100) I have the following users on my NAS:\nuid=1024(admin) gid=100(users) groups=100(users),101(administrators) uid=1026(dominic) gid=100(users) groups=100(users),101(administrators),1000(nfs-dominic) uid=1000(nfs-dominic) gid=1000(nfs-dominic) groups=1000(nfs-dominic) Change the parts anonuid=1026,anongid=100 to your needs.\nI do have a personal folder that I change to anonuid=1000,anongid=1000 but I leave others (like video) that use anonuid=1026,anongid=100 (because I want the internal user on the NAS to use them too).\nRestart NFS Service on your NAS #Whenever you finished your changes to that file, save it and go back to the control panel on the web interface.\nControl Panel → File Services → NFS.\nDisable NFS service, click Apply. Enable NFS service, click Apply. Adopt your client #Edit your fstab file. Mine looks like this:\nnas.lan:/volume1/video /home/dominic/_nas/video nfs noauto,users,nodev,async,soft,_netdev,x-systemd.device-timeout=1,x-systemd-idle-timeout=1min,x-systemd.mount-timeout=10,timeo=10,retry=3 0 0 ","date":"10 April 2023","permalink":"/posts/2023/39-synology-nas-nfs-shares/","section":"Blog","summary":"I\u0026rsquo;ve done this setup now several times (because I break so\nmany things all the time). It is time to write it down\u0026hellip;","title":"Synology NAS: NFS shares","updated":"29 September 2024"},{"content":"This page is needed for German or Austrian law as the server is located in Germany or Austria. You may also like to read https://gdpr-info.eu/.\nData protection officer #Responsible for the content on this website and the data protection officer (mainly because of DSGVO (GDPR)) is\nDominic Reich equal.luck1288+spams@qtztsjosmprqmgtunjyf.com\nWhat you can do # request information about your data stored by us and their processing\n(Article 15 GDPR) Correction or incorrect data\n(Article 16 GDPR) Deletion of your data stored by us\n(Article 17 GDPR) Restriction of data processing if we are not yet allowed to delete your data due to legal obligations\n(Article 18 GDPR) Objection to the processing of your data by us\n(Article 21 GDPR) data transferability if you have consented to data processing or have concluded a contract with us\n(Article 20 GDPR) What and which data we collect #We try to collect only minimal data. We do not read or set cookies on our website \u0026ndash; although we set a local browser setting called appearance if you choose a different website theme (light or dark).\nSince Nov 2023 we also set another local setting called recent which is only used once you chose to share a website to Mastodon.\nThe data we collect is basically\nyour IP address (we do not resolve these addresses to hostnames in our logfiles) time and date of access the base URL of the website that you are coming from (referer) your used webbrowser and its operating system some more technical data like request size and delivery time This data is stored in our logfiles, which are used to find errors in our webservers configuration. I may look into them to find suspicious requests if the webserver hasn\u0026rsquo;t blocked them yet.\nIt\u0026rsquo;s purpose is mainly of technical nature to improve our website and the underlying hard- and software and to gather statistics to have a good view of which areas our website is viewed the most.\nThere is no interest in collecting more data from you. We don\u0026rsquo;t create profiles of our visitors.\nThe collection of this data is legal as in Article 6 GDPR (1 (f)).\nStatistics #There are currently (Dec 2025) no additional scripts collecting statistics.\nYour right to object (Article 21 GDPR) #1 The data subject shall have the right to object, on grounds relating to his or her particular situation, at any time to processing of personal data concerning him or her which is based on point (e) or (f) of Article 6(1), including profiling based on those provisions. 2 The controller shall no longer process the personal data unless the controller demonstrates compelling legitimate grounds for the processing which override the interests, rights and freedoms of the data subject or for the establishment, exercise or defence of legal claims.\nRecipient of the objection #Dominic Reich equal.luck1288+spams@qtztsjosmprqmgtunjyf.com\nThe website\u0026rsquo;s sourcecode #Can be viewed on my Forgejo instance or on codeberg.\n","date":null,"permalink":"/privacy/","section":"OE7DRT","summary":"","title":"Privacy","updated":null},{"content":"Okay, let\u0026rsquo;s get right into it.\nThe gitea stuff is located at /var/lib/gitea.\nThe gitea config file is located at /etc/gitea/app.ini.\nThe gitea.service file is located at /etc/systemd/system/gitea.service and contains:\n[Unit] Description=Gitea After=syslog.target After=network.target After=mysql.service [Service] RestartSec=2s Type=simple User=git Group=git WorkingDirectory=/var/lib/gitea/ ExecStart=/var/lib/gitea/gitea web -c /etc/gitea/app.ini Restart=always Environment=USER=git HOME=/var/lib/gitea/data/home GITEA_WORK_DIR=/var/lib/gitea [Install] WantedBy=multi-user.target Check the Changelog for breaking changes.\nCreate a backup first (or after renamed the executable file gitea to gitea.back):\n# sudo -u git ./gitea.back dump -c /etc/gitea/app.ini That creates a file\n# ll gitea-dump* .rw-------. git git 835 MB Sun Mar 12 07:32:49 2023  gitea-dump-1678602739.zip Just for the record: I\u0026rsquo;ll include a recovery routine here, which is basically unzipping the dump file from above and moving the contained files to the right directory.\n# unzip gitea-dump-1610949662.zip # cd gitea-dump-1610949662 # mv data/conf/app.ini /etc/gitea/app.ini # mv data/* /var/lib/gitea/data/ # mv log/* /var/lib/gitea/log/ # mv repos/* /var/lib/gitea/repositories/ # chown -R gitea:gitea /etc/gitea/conf/app.ini /var/lib/gitea # mysql --default-character-set=utf8mb4 -u$USER -p$PASS $DATABASE \u0026lt;gitea-db.sql # systemctl restart gitea Have a look at https://docs.gitea.io/en-us/backup-and-restore/#restore-command-restore for a full and/or actual version of the recovery process.\nDownload the new binary file from https://dl.gitea.com/gitea/.\nI usually download to my root\u0026rsquo;s home folder.\n# wget https://dl.gitea.com/gitea/1.18.5/gitea-1.18.5-linux-amd64 # cd /var/lib/gitea # cp gitea gitea.back # mv ~/gitea-1.18.5-linux-amd64 gitea # systemctl restart gitea That\u0026rsquo;s it. I won\u0026rsquo;t need this again but I like to keep this information somewhere I can find it ;-)\n","date":"9 April 2023","permalink":"/posts/2023/37-gitea-updates/","section":"Blog","summary":"After a lot of lookups, a quick reminder in copy\u0026amp;paste mode for me.","title":"Gitea Updates: quick'n'dirty","updated":"29 September 2024"},{"content":"Very short und maybe a bit chaotic\u0026hellip;\nThere are some style patches available for plain mastodon for those that would want to have a look at them.\nClear media files #https://paste.opensuse.org/pastes/365542654a1e\n#!/bin/bash export PATH=\u0026#34;$HOME/.rbenv/bin:$PATH\u0026#34; eval \u0026#34;$(rbenv init -)\u0026#34; export RAILS_ENV=production exec \u0026gt; /home/mastodon/live/log/prune.log 2\u0026gt;\u0026amp;1 /home/mastodon/live/bin/tootctl statuses remove /home/mastodon/live/bin/tootctl media remove --days=5 /home/mastodon/live/bin/tootctl media remove --prune-profiles --days=60 /home/mastodon/live/bin/tootctl preview_cards remove --days=15 /home/mastodon/live/bin/tootctl media remove-orphans /home/mastodon/live/bin/tootctl cache clear /home/mastodon/live/bin/tootctl media usage date Further removal of profile pics #https://paste.opensuse.org/pastes/4ecbf69cdee7\n#!/usr/bin/env bash # Kept only the accounts compression and jpeg optimization cd /home/mastodon/live/public/system/cache find -name \u0026#39;*.jpg\u0026#39; -print0 | xargs -0 jpegoptim --verbose --preserve --threshold=1 --max=45 find -name \u0026#39;*.jpeg\u0026#39; -print0 | xargs -0 jpegoptim --verbose --preserve --threshold=1 --max=45 cd /home/mastodon/live/public/system/cache/accounts find -name \u0026#39;*.png\u0026#39; -print0 | xargs -0 pngquant --verbose --ext=.png --force --speed 10 --quality 45-50 --skip-if-larger More snippets for use in the rails console #Some or almost all of the following text is copy\u0026amp;paste\u0026rsquo;d from this issue at Github.\nThere are several scripts executable with RAILS_ENV=production bundle exec rails c, for convenience laid out here with minor corrections. Do not execute these without understanding what they do!:\nDeleting all cached media attachments from external servers to allow web app to re-fetch them when they are queried. At least on my instance this is really slow, takes tens of seconds per attachment (is this the same as tootctl media remove?):\nMediaAttachment.cached.where.not(remote_url: \u0026#39;\u0026#39;).each do |attachment| attachment.file.destroy attachment.thumbnail.destroy attachment.save end Deleting and re-downloading all cached remote emojis. This apparently has a problem that the local URLs for the cached emojis change, and the URLs aren\u0026rsquo;t updated to the fetched profile headers. I suppose this should be done before the next steps, assuming the cached local emoji URLs are set up correctly to the profile headers and names at the time of fetching. This doesn\u0026rsquo;t seem to work though, maybe tootctl emoji purge --remote-only would be better:\nCustomEmoji.remote.where.not(image_file_name: nil).where.not(image_remote_url: \u0026#39;\u0026#39;).each do |emoji| emoji.image.destroy emoji.image.save emoji.download_image! end Deleting all remote profile avatars, and re-fetching them. Are these two the same as tootctl accounts refresh --all?:\nAccount.remote.where.not(avatar_file_name: nil).where.not(avatar_remote_url: \u0026#39;\u0026#39;).each do |a| a.avatar.destroy a.save a.download_avatar! end Deleting all remote profile headers, and re-fetching them. Hopefully this uses/updates the newly fetched local cached emoji URLs, and also includes the profile name as they often contain emojis:\nAccount.remote.where.not(header_file_name: nil).where.not(header_remote_url: \u0026#39;\u0026#39;).each do |a| a.header.destroy a.save a.download_header! end It would be awesome to get tooling for these to tootctl. That said, I\u0026rsquo;m not entirely sure if destroying the entities is necessary before downloading them again, and perhaps we could use remove_entity_cache instead. I\u0026rsquo;m not very well acquainted with the codebase.\n","date":"9 April 2023","permalink":"/posts/2023/38-mastodon-snippets/","section":"Blog","summary":"Some \u0026ldquo;nice to have\u0026rdquo; snippets for maintaining a mastodon server","title":"Mastodon snippets","updated":"29 September 2024"},{"content":"This is me with the usual luck that I have (which is not limited to amateur radio).\nThe plan #I actually wanted to go way higher, but I did not felt like it so I decided on my way to stop at a nice place and setup my 20m dipole at a clearing.\nThere is a nice view over Längenfeld (looking south, south-west).\nThe setup #After a few minutes of just sitting there and relaxing, enjoying the view and nature, as is, I setup the antenna. I had to re-adjust the length a bit to get it down to somewhat 1.1-1.3:1a. I usually just put a leg on the mast and put the other one on the ground, which works ok most of the time.\nListen, listen, listen (and listen if you can\u0026rsquo;t transmit) #I usually listen for a while before I start calling CQ and most of the time I first answer others people calls \u0026ndash; but when I tried to call a station from EA I wasn\u0026rsquo;t very successful. Yeah, move on, my setup is just crap and he won\u0026rsquo;t hear me. Tried another station but my call was interrupted by the other station whilst I was still talking, that made me a bit suspicious. Another try and this time I looked at the power meter of the TX-500: 0W. On a second view I saw the transceiver was not switching to TX. Tried a few times more, power off, power on but nothing really happened.\nI finally gave up and spent probably half an hour with SWL :)\nBack at home #Back home, I already thought it might be the mic (it actually doesn\u0026rsquo;t look very sturdy) so I went into my all-purpose-room and cut off the plug, opened it and I quickly saw the faulty white wire.\nThat white wire belongs to the pin in the middle, so I decided to remove all the other pins too to get better access to that pin.\nThe plug is small and I already wanted to throw everything away but somehow I got all the wires soldered to the plug and it worked.\nFinished with some shrink tubing (which I usually have mixed feelings about using them) and it is now able to TX again.\nFin #The mic works again, but meanwhile (it is now mid of February already) I got another nice replacement for the mic: I ordered a clip-on microphone that I can use with the adapter set made by W2ENY.\nI can just recommend the adapters made by Robert, W2ENY.\nI think the original PTT adapter only works mono, Roberts delivers stereo sound.\n","date":"17 February 2023","permalink":"/posts/2023/36-an-attempt-to-operate-portable/","section":"Blog","summary":"A short story of another failed attempt on a portable operation\nfrom January 2023.","title":"An (other) attempt to operate portable","updated":"15 April 2025"},{"content":"","date":null,"permalink":"/tags/fedora/","section":"Tags","summary":"","title":"Fedora","updated":null},{"content":"","date":null,"permalink":"/tags/manjaro/","section":"Tags","summary":"","title":"Manjaro","updated":null},{"content":"I had some \u0026ldquo;fun\u0026rdquo; recently when I realized that my keyboard on my main laptop was lagging. Nearly every character at the end of a command or at the beginning of a typing sequence were lost. I didn\u0026rsquo;t noticed when this exactly took over, but I started to hate this behaviour.\nSo I thought it might be a good idea to install the drivers from where I bought the laptop in the first place.\nFedora 37 #Now it\u0026rsquo;s already a few months ago since I made my notes about this, I\u0026rsquo;m already running Manjaro Linux for a week or two so I\u0026rsquo;ll just format my notes a bit and let this reside on this page, for later use I might have to re-investigate that sh** again\u0026hellip;\n$ sudo dnf install kernel-devel $ sudo dnf copr enable kallepm/tuxedo-keyboard $ sudo dnf copr enable kallepm/tuxedo-control-center $ sudo dnf install tuxedo-control-center Since I usually won\u0026rsquo;t need the Control-Center, and to only get actual (as in up-to-date) drivers, clone the git repository.\n$ cd $HOME/git $ git clone https://github.com/tuxedocomputers/tuxedo-keyboard.git $ cd tuxedo-keyboard $ git checkout release Then build the module and ignore any error about vmlinux being unavailable:\n$ make clean \u0026amp;\u0026amp; make Add the module as DKMS module:\n$ make clean $ sudo make dkmsinstall And finally load the modules with modprobe:\n$ sudo modprobe tuxedo_keyboard tuxedo_io should normally be automatically loaded when you load tuxedo_keyboard.\nSources # How to get Tuxedo Control Cen\u0026hellip; Manjaro (Sway) #Check what kernel version is running (uname -a) and install the linux headers for that kernel.\n$ sudo pacman -S linux515-headers Install tuxedo-keyboard-dkms from the wonderful AUR repository.\n$ sudo pacman -S tuxedo-keyboard-dkms or if you use yay\n$ yay tuxedo-keyboard-dkms Default values are crap (on my Polaris).\n$ echo \u0026#34;options tuxedo_keyboard color=WHITE\u0026#34; | sudo tee /etc/modprobe.d/tuxedo_keyboard.conf You may read on the tuxedo website that you load other colors with sudo modprobe tuxedo_keyboard color=BLUE for example\u0026mdash; for me, this never worked. A reboot it is then for me.\nThey work on it, they say\u0026hellip; But we know, this feature will never be implemented. That state is now for 2 years since I bought that \u0026ldquo;linux laptop\u0026rdquo; from Tuxedo. PS: I\u0026rsquo;d never buy one again.\nSources # Tuxedo Computers Info page Github tuxedo-keyboard Github tuxedo-control-center ","date":"24 January 2023","permalink":"/posts/2023/35-tuxedo-notebook-driver-issues/","section":"Blog","summary":"Parts of my obviously already lost memory about\nthat freaking tuxedo-keyboard drivers. Installation on\nFedora 37 and Manjaro Sway.","title":"Tuxedo: keyboard drivers","updated":"29 September 2024"},{"content":"","date":null,"permalink":"/tags/gohugo/","section":"Tags","summary":"","title":"Gohugo","updated":null},{"content":"Since I started writing down notes about my website-setup some of the infrastructure changed. In the meantime I moved away from Github and host my personal Gitea instance on my server. Some of the notes have been re-written, but I could have forgotten something \u0026ndash; so take the following information with a grain of salt maybe. Prepare to adopt to your needs.\nThis article is already out of date. But it has been a nice experience. Install hugo from source #This is done on your computer.\nRequirements # Install Git\nDepending on your OS, this might look like one of those:\n$ sudo apt install git $ sudo pacman -S git Install Go version 1.18 or later\nSee above for the syntax, this package may be called golang on some distributions (I think Ubuntu/Debian for example).\nUpdate your PATH environment variable as described in the Go documentation\nNow, that looks like this:\nif [[ -d $HOME/go ]]; then export GOPATH=\u0026#34;$HOME/go\u0026#34; path=( $GOPATH/bin $path ) fi That is an example taken from my .zprofile file.\nInstall hugo #We are still on our computer.\n$ go install -tags extended github.com/gohugoio/hugo@latest That installs the latest version of hugo into $HOME/go/bin. If your terminal does not recognize the new binaries: hash -r or rehash might help\u0026hellip;\nSource: https://gohugo.io/installation/linux/#build-from-source\nAdding themes as hugo modules #Just to be more clear on this: I\u0026rsquo;m using the congo theme for hugo right here.\nEnsure you have Go and Hugo installed, and that you have created a new hugo project before proceeding. From your project directory, initialise hugo modules:\n$ hugo mod init github.com/\u0026lt;username\u0026gt;/\u0026lt;repo-name\u0026gt; Create config/_default/module.toml and add the following:\n[[imports]] path = \u0026#34;github.com/jpanther/congo/v2\u0026#34; Start your server using hugo server and the theme will be downloaded automatically.\nRemove the file config.toml from your website root directory (generated by hugo site new...). Copy the config files from the theme into config/_default/.\nNote: Do not overwrite the module.toml file you created above! You will find these theme config files in the Hugo cache directory, or download a copy from GitHub.\nFollow the Getting Started instructions to configure your website.\nUsing Atom for feeds (replacing RSS) #Define an appropriate media type and corresponding output format in config.toml:\n[mediaTypes] [mediaTypes.\u0026#34;application/atom\u0026#34;] suffixes = [\u0026#34;xml\u0026#34;] [outputFormats.Atom] mediaType = \u0026#34;application/atom\u0026#34; baseName = \u0026#34;index\u0026#34; isPlainText = false Tell hugo to produce the home page in Atom and HTML (and JSON) formats, also append this in config.toml:\n[outputs] home = [ \u0026#34;HTML\u0026#34;, \u0026#34;Atom\u0026#34;, \u0026#34;JSON\u0026#34; ] Put an index.atom.xml template file in your layouts directory. You can use the attached one as a starting point, don\u0026rsquo;t forget to edit the author element appropriately or make it use the values from your config.\n\u0026lt;feed xmlns=\u0026#34;http://www.w3.org/2005/Atom\u0026#34;\u0026gt; \u0026lt;title\u0026gt;{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}\u0026lt;/title\u0026gt; \u0026lt;link rel=\u0026#34;self\u0026#34; href=\u0026#34;{{ .Permalink }}\u0026#34;/\u0026gt; \u0026lt;updated\u0026gt;{{ .Date.Format \u0026#34;2006-01-02T15:04:05-0700\u0026#34; | safeHTML }}\u0026lt;/updated\u0026gt; \u0026lt;author\u0026gt; \u0026lt;name\u0026gt;YOUR NAME HERE\u0026lt;/name\u0026gt; \u0026lt;email\u0026gt;YOUR EMAIL ADDRESS\u0026lt;/email\u0026gt; \u0026lt;uri\u0026gt;DEFINITIVE URI OF YOUR WEB SITE\u0026lt;/uri\u0026gt; \u0026lt;/author\u0026gt; \u0026lt;id\u0026gt;{{ .Permalink }}\u0026lt;/id\u0026gt; {{ range first 15 .Data.Pages }} \u0026lt;entry\u0026gt; \u0026lt;title\u0026gt;{{ .Title }}\u0026lt;/title\u0026gt; \u0026lt;link rel=\u0026#34;alternate\u0026#34; href=\u0026#34;{{ .Permalink }}\u0026#34;/\u0026gt; \u0026lt;id\u0026gt;{{ .Permalink }}\u0026lt;/id\u0026gt; \u0026lt;published\u0026gt;{{ .Date.Format \u0026#34;2006-01-02T15:04:05-0700\u0026#34; | safeHTML }}\u0026lt;/published\u0026gt; \u0026lt;updated\u0026gt;{{ .Lastmod.Format \u0026#34;2006-01-02T15:04:05-0700\u0026#34; | safeHTML }}\u0026lt;/updated\u0026gt; \u0026lt;summary\u0026gt;{{ .Summary | html }}\u0026lt;/summary\u0026gt; \u0026lt;/entry\u0026gt; {{ end }} \u0026lt;/feed\u0026gt; Source: https://gist.github.com/lpar/7ded35d8f52fef7490a5be92e6cd6937\nAuto-clear Cloudflare cache on git push #If we use Cloudflare, we want the cache to be cleared. We are still on our computer.\nRequirements # A Cloudflare website (not pages) An API token on Cloudflare to let git clear your website\u0026rsquo;s cache (see below) Cloudflare setup #Create a file .cloudflarerc in your $HOME directory that contains those two variables:\napikey=*********************************-****** id=******************************** You find them in your Cloudflare dashboard. Click on Websites and continue with clicking your domain name. Scroll down a bit and find your id on the right sidebar. It is called Zonen-ID (within API). Below that is a link called Ihr API-Token erhalten. Click it and create a user-defined API token. I\u0026rsquo;ll show you a screenshot of mine, edit yours to fit this example.\nClick Create token and copy the resulting token into your .cloudflarerc file.\ngit repository setup #Now we need one last file in our git repository. Create .git/hooks/pre-push and fill it with this:\n#!/bin/bash if ! [ -f ~/.cloudflarerc ] ; then echo \u0026#34;No ~/.cloudflarerc file found. Cloudflare clear cache SKIPPED.\u0026#34; exit 0 fi . ~/.cloudflarerc echo -n \u0026#34;Clearing cloudflare cache...\u0026#34; ret=\u0026#34;$(curl -s -X DELETE \u0026#34;https://api.cloudflare.com/client/v4/zones/$id/purge_cache\u0026#34; \\ -H \u0026#34;Authorization: Bearer $apikey\u0026#34; \\ -H \u0026#34;Content-Type: application/json\u0026#34; \\ --data \u0026#39;{\u0026#34;purge_everything\u0026#34;:true}\u0026#39;)\u0026#34; if [ -n \u0026#34;$(echo $ret | grep success)\u0026#34; ] ; then echo \u0026#34; Success!\u0026#34; else echo \u0026#34; *** FAILED ***\u0026#34; echo \u0026#34;Could not clear cloudflare\u0026#39;s cache. Update will not proceed.\u0026#34; # exit with 1, so the update does not proceed, so we will know exit 1 fi I found the script on https://www.supertechcrew.com/clear-cloudflare-cache-when-pushing-from-git-github-pages/ \u0026ndash; which is also a good read if my explanation won\u0026rsquo;t work for you.\nDon\u0026rsquo;t forget to make this script executable:\n$ chmod +x .git/hooks/pre-push Publish the website #Since the end of December 2022 I use my own git hosting service on my own server. I used Github before that.\nIf you save your website repository on Github: create a Cloudflare page and you are probably good to go. Don\u0026rsquo;t forget to enable that page in the website settings at Cloudflare.\nOkay, since I stopped using Github I have to publish my git repository somewhere to the public root of my webserver. That is done via a post-receive hook on the git servers repository.\nIt\u0026rsquo;s actually the file website.git/hook/post-receive.d/publish:\n#!/usr/bin/env bash # change these to your needs... GIT_REPO=/var/.../website.git WORKING_DIR=${HOME}/website-working PUBLIC_WWW=/var/www/html BACKUP_WWW=/var/www/backup MY_DOMAIN=website.com set -e rm -rf ${WORKING_DIR} rsync -aqz ${PUBLIC_WWW}/ ${BACKUP_WWW} trap \u0026#34;echo \u0026#39;A problem occured. Reverting to backup.\u0026#39;; rsync -aqz --del ${BACKUP_WWW}/ ${PUBLIC_WWW}; rm -rf ${WORKING_DIR}\u0026#34; EXIT git clone ${GIT_REPO} ${WORKING_DIR} rm -rf ${PUBLIC_WWW}/* /home/git/go/bin/hugo --gc --minify --cleanDestinationDir -s ${WORKING_DIR} -d ${PUBLIC_WWW} rm -rf ${WORKING_DIR} trap - exit If you use Gitea, those repositories are per default in /var/lib/gitea/data/gitea-repositories/\u0026hellip;\nThat is it, basically.\n","date":"24 January 2023","permalink":"/posts/2023/34-my-current-website-setup/","section":"Blog","summary":"This is how I install hugo nowadays. Although that routine might\nchange anytime.","title":"My current website setup","updated":"29 September 2024"},{"content":"The content on this site is licensed under the Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) license.\nPlain english #You are free to # Share: Copy and redistribute the material in any medium or format Adapt: Remix, transform, and build upon the material The licensor cannot revoke these freedoms as long as you follow the license terms.\nUnder the following terms # Attribution: You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. NonCommercial: You may not use the material for commercial purposes. ShareAlike: If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. No additional restrictions: You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. Notices #You do not have to comply with the license for elements of the material in the public domain or where your use is permitted by an applicable exception or limitation.\nNo warranties are given. The license may not give you all of the permissions necessary for your intended use. For example, other rights such as publicity, privacy, or moral rights may limit how you use the material.\nLawyerspeak #Find the license here.\nThis page was inspired by mrus because of the perfect wording. We do not stay in any relation, but if you like hack related computer stuff: there are some nice articles on his website.\n","date":null,"permalink":"/license/","section":"OE7DRT","summary":"","title":"License","updated":null},{"content":"If the location (URL) of the submodule has changed, then you can simply:\nModify the .gitmodules file in the repo root to use the new URL.\nDelete the submodule folder in the repo\n$ rm -rf .git/modules/\u0026lt;submodule\u0026gt; Delete the submodule folder in the working directory\n$ rm -rf \u0026lt;submodule\u0026gt; Run\n$ git submodule sync And run\n$ git submodule update More complete info can be found elsewhere:\nhttps://stackoverflow.com/questions/913701/changing-remote-repository-for-a-git-submodule\n","date":"1 December 2022","permalink":"/posts/2022/33-change-git-submodule-url/","section":"Blog","summary":"Another thing I forget constantly when using git:\nChanging the remote URL of a submodule","title":"Change git submodule URL","updated":"29 September 2024"},{"content":"Check for connection names.\n$ nmcli connection NAME UUID TYPE DEVICE \u0026gt; MagentaNET 923ab10b-be81-4668-9aab-************ wifi wlx00259ce03\u0026gt; DreiNET b2bcc61c-19df-41f0-9790-************ wifi wlo1 \u0026gt; Kabelgebundene Verbindung 1 c75abc26-19eb-3fec-81b1-************ ethernet -- Start editing the affected connection:\n$ nmcli connection edit MagentaNET ===| nmcli interaktive Verbindungsbearbeitung |=== Bestehende Verbindung »802-11-wireless« wird bearbeitet: »MagentaNET« Tippen Sie »help« oder »?«, um verfügbare Befehle anzuzeigen. Geben Sie »print« ein, um alle Verbindungseigenschaften anzuzeigen. Tippen Sie »describe [\u0026lt;Einstellung\u0026gt;.\u0026lt;Eigenschaft\u0026gt;]« für eine detaillierte Eigenschaftenbeschreibung. Sie können die folgenden Einstellungen bearbeiten: connection, 802-11-wireless (wifi), 802-11-wireless-security (wifi-sec), 802-1x, ethtool, match, ipv4, ipv6, hostname, tc, proxy nmcli\u0026gt; set ipv4.route-metric 599 nmcli\u0026gt; save nmcli\u0026gt; quit $ sudo systemctl restart NetworkManager Check routing table with\n$ ip route Source: https://dev.to/emamirazavi/how-to-set-metric-in-networkmanager-system-4525\n","date":"24 November 2022","permalink":"/posts/2022/32-changing-network-metrics-on-linux-with-networkmanagers-cli/","section":"Blog","summary":"Because I use two network interfaces with more subnets/routes on one of them.\nBut I use the other interface for internet because of speed\u0026hellip;","title":"Changing network metrics on linux with NetworkManagers CLI","updated":"29 September 2024"},{"content":"","date":null,"permalink":"/tags/hamnet/","section":"Tags","summary":"","title":"Hamnet","updated":null},{"content":"The usual approach to connect your computer to the HAMNET is to create a VPN tunnel using PPTP. Most of recent operating systems stopped supporting this protocol because it is outdated and insecure.\nIn my recent post about HAMNET I created an L2TP tunnel to the german VPN Server at the RWTH Aachen University on my laptop. Routes have been added manually \u0026ndash; the network was only available on this particular computer. No other device was able to connect to the HAMNET.\nNow I made some changes to my home network where I finally was able to create the tunnel on my main router/firewall.\nCreating a new PPP device #Select Interfaces → Assignments → PPPs\nClick on the green + Add button on the bottom right and create the new PPP interface with the following specs:\nSettings name value Link Type L2TP Link interface(s) WAN Username N0CALL (your callsign usually) Password (your password) Local IP (leave empty) Gateway IP or hostname vpn.afu.rwth-aachen.de Create a new L2TP device # My screenshot looks a bit different because I have already assigned the interface. You should see the option Available network ports in the last row combined with a green + Add button on the right side (just below the red buttons). Select the newly created L2TP interface (which should look like L2TP (igb0) - HAMNET_VPN \u0026ndash; or something like that) and click the green button.\nThen click on the new interface and set it up.\nSettings name value Description VPN_HAMNET (a meaningful description) IPv4 Configuration Type L2TP IPv6 Configuration Type None (or SLAAC if you use IPv6) Username N0CALL (your callsign usually) Password (your password) Remote IP address vpn.afu.rwth-aachen.de Add static routes on the firewall/router #Click on the green + Add button on the bottom right. Add the networks 44.0.0.0/9 and 44.128.0.0/10 to the list; use the interface from above as the gateway.\nThe tunnel should be up and running #Go to Status → Gateways and look if it is online.\nSend this routing configuration to DHCP clients #We can send this configuration to DHCP clients when they get their IP address.\nGo to Services → DHCP Server and select the interface that you want to configure with these routes. Then scroll down to the section Other Options and look for the last setting Additional BOOTP/DHCP Options. Those settings are hidden per default, so click on Display Advanced. Below you can now enter the additional configuration.\nYou see three fields, Number, Type and Value.\nNumber Type Value 121 String 09:2c:00:c0:a8:0a:01:0a:2c:80:c0:a8:0a:01 Do not copy this configuration into your pfSense. This setting is somewhat encoded and routes the HAMNET IPs to my routers IP address. You have to create your own configuration! Create your own configuration with help of this script:\n#!/bin/bash check_ip(){ local n=0 val=1 for i in ${1//./ }; do [ $i -lt 0 -o $i -gt 255 ] \u0026amp;\u0026amp; val=0 n=$[n+1] done [ $n -ne 4 ] \u0026amp;\u0026amp; val=0 if [ $val -ne 1 ] ; then echo \u0026#34;Invalid IP: $1\u0026#34; \u0026gt;\u0026amp;2 exit 1 fi } to_bin(){ local BIN=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}) for i in ${1//./ }; do echo -n ${BIN[$i]} done } while [ $# -gt 0 ] ; do nw=${1%/*}; nm=${1#*/}; gw=$2 check_ip $nw; check_ip $gw if [ ${#nm} -gt 2 ] ; then check_ip $nm nmbin=$(to_bin $nm) if echo $nmbin | grep -q \u0026#34;01\u0026#34; ; then echo \u0026#34;Invalid netmask: $nm\u0026#34; \u0026gt;\u0026amp;2 exit 1 else nmbin=${nmbin//0/} fi nm=${#nmbin} echo $nm fi gwhex=$(printf \u0026#34;%02x:%02x:%02x:%02x\u0026#34; ${2//./ }) nwhex=$(printf \u0026#34;%02x:%02x:%02x:%02x\u0026#34; ${nw//./ }) nmhex=$(printf \u0026#34;%02x\u0026#34; ${nm//./ }) [ $nm -le 24 ] \u0026amp;\u0026amp; nwhex=${nwhex%:*} [ $nm -le 16 ] \u0026amp;\u0026amp; nwhex=${nwhex%:*} [ $nm -le 8 ] \u0026amp;\u0026amp; nwhex=${nwhex%:*} echo -n $nmhex:$nwhex:$gwhex shift 2 [ $# -gt 0 ] \u0026amp;\u0026amp; echo -n \u0026#34;:\u0026#34; done echo Source: mgergi.hu\nScript was cited/hardcopied because I hate it when linked websites ain\u0026rsquo;t available any more. But there is a nice explanation on that website that you should read.\nReplace 192.168.10.1 with your routers IP address!\n$ hexroute.sh 44.0.0.0/9 192.168.10.1 09:2c:00:c0:a8:0a:01 $ hexroute.sh 44.128.0.0/10 192.168.10.1 0a:2c:80:c0:a8:0a:01 You see, you get two values. All you have to do is concatenate those two values and separate them with colons. Insert the new string into the Value field and save those options.\nWARNING: Not all clients will add both the default gateway and the classless static routes as per RFC 3442 clients must ignore the router option. You will be fine if you use NetworkManager. Connections managed by NetworkManager usually add the gateway and the classless static routes.\nThis is totally different on a Raspberry Pi. These do not use NetworkManager (well, maybe they do when they run a desktop environment but not on console). The best way (for me) was to ignore the static routes for my Raspberry Pis and add the static routes manually.\nIn /etc/dhcpcd.conf, uncomment classless_static_routes:\n26# A list of options to request from the DHCP server. 27#option domain_name_servers, domain_name, domain_search, host_name 28#option classless_static_routes 29# Respect the network MTU. This is applied to DHCP routes. 30option interface_mtu and let dhcpcd add the static routes automatically. Create the file /etc/dhcpcd.exit-hook and add the routes manually with this script:\n/sbin/route add -net 44.0.0.0/9 gw 192.168.10.1 /sbin/route add -net 44.128.0.0/10 gw 192.168.10.1 More resources # https://support.aa.net.uk/L2TP_Client:_pfSense https://id3145.com/2017/blog/5-pfSense-Add-Static-Routes-to-pfSense-DHCP-Clients.html https://www.iana.org/assignments/bootp-dhcp-parameters/ https://www.rfc-editor.org/rfc/rfc3442.html ","date":"21 November 2022","permalink":"/posts/2022/31-hamnet-on-the-pfsense/","section":"Blog","summary":"A short guide on how I installed my L2TP tunnel on my\nrouter/firewall. Routes get announced to new DHCP clients.","title":"HAMnet on the pfSense","updated":"3 February 2026"},{"content":"Internal links hosted at home or on cloud servers # Manuals (amateur radio) A small collection of manuals that I saved. Forgejo My locally hosted git repositories. Some repositories are still mirrored to codeberg.\nOpengist Selfhosted version of Github gists where I save some random snippets. KitchenOwl I host my personal instance of KitchenOwl \u0026ndash; kind of a shopping list and recipe manager like \u0026ldquo;Bring\u0026rdquo;. Linkwarden Saving other websites that are worth reading again. Linkwarden saves screenshots and PDF files of the links too. I would like to replace this with a more lightweight software.\nMiniflux Lightweight feed reader. I combine this with Miniflutt on Android \u0026ndash; but I\u0026rsquo;m not reading as much as a few years ago. I liked the iOS app that I used with Miniflux but I can\u0026rsquo;t remember it\u0026rsquo;s name. it-tools Some useful tools like basic encoders/decoders, IP net calculators, \u0026hellip; Ntfy A private Ntfy instance. Let me know if you need an account. A collection of some interesting reads (external) # Digital modes performance comparison (Winlink) Let\u0026rsquo;s compare some digital modes like PACTOR, VARA, ARDOP and WINMOR (†). ","date":null,"permalink":"/links/","section":"OE7DRT","summary":"Listing links of (hopefully) useful websites","title":"Links","updated":null},{"content":"I currently run Fedora Linux on it \u0026ndash; because the touch interface is the best on Fedora currently (or was when I installed it).\nI bought this initially to use it for Winlink sessions but I find the device not powerful enough (specially for digimodes). I also hate lagging computers 😜\nSome data:\nweight description 541g tablet alone 561g tablet with pen 786g tablet with keyboard 806g tablet with keyboard and pen I would not buy one again \u0026ndash; it is way too slow to be used by normal people.\n","date":"11 November 2022","permalink":"/equipment/laptops/ms-surface2go/","section":"Equipment","summary":"Small tablet that runs Windows 10 (11).","title":"Microsoft Surface 2 Go","updated":"16 January 2026"},{"content":"This is the third HF transceiver that I bought. I was looking for a while for an alternative to the FT-891, because I wanted something leightweight for my little hiking tours.\nLow quality mic? #It\u0026rsquo;s like many plastic mics on other radios, it definitly feels a bit “cheap” and it was the first (and only; until now) thing that broke. I haven\u0026rsquo;t noticed the broken mic until I tried to call CQ in the mountains and I fixed it on the same day. I haven\u0026rsquo;t been out since then\u0026hellip;\nI bought a Laravel mic from Amazon and I already got a spare in-ear plugs from Sennheiser which I combined with the adapters from Robert W2ENY (including a hand-held push-to-talk button adapter (like the Heil HS-2 but smaller).\nThis is pleasing to use and you got the sound directly in-ear. Though, the Laravel mic has no punch and I\u0026rsquo;m not using this for the moment.\nOriginal CAT cable settings # Setting Value RIG type KENWOOD Baud rate 9600 Data bits 8 Parity NONE Stop bits 1 Firmware version 1.19.01 or later includes a second CAT protocol named Lab599 which adds support for DIG mode switching commands (MD6). It uses the same settings as the KENWOOD mode.\nI use these rigctld commands:\nKENWOOD mode #$ rigctld -m 2014 -r /dev/ttyUSB0 -d /dev/ttyUSB0 -p /dev/ttyUSB0 -P RTS -s 9600 -vvvv Lab599 mode #$ rigctld -m 2050 -r /dev/ttyUSB0 -d /dev/ttyUSB0 -p /dev/ttyUSB0 -P RTS -s 9600 -vvvv Power output at 10% #Since someone asked on a mailing list to verify his measurements and I had my tinySA in reach I also created these measurements and I do not want to hide them :)\nAs always, take these with a grain of salt!\nBAND FREQUENCY TONE SETTINGS TX500 tinySA 80m 3.530 MHz NORMAL 0.8 W 1.72 W DUAL 0.6 W 0.48 W 40m 7.130 MHz NORMAL 0.8 W 1.40 W DUAL 0.6 W 0.41 W 20m 14.285 MHz NORMAL 0.7 W 1.40 W DUAL 0.6 W 0.44 W 15m 21.245 MHz NORMAL 1.3 W 2.13 W DUAL 1.1 W 0.60 W 10m 29.080 MHz NORMAL 1.7 W 2.86 W DUAL 1.5 W 0.90 W Power consumption #(I forgot to put that down to 10, so the first row was set to 14% of power)\nTONE 80m 40m 20m 10m DUAL 14% 0.88 A 0.91 A 0.93 A 1.14 A DUAL 35% 1.10 A 1.14 A 1.17 A 1.56 A NORMAL 10% 0.96 A 1.0 A 1.03 A 1.31 A NORMAL 35% 1.40 A 1.5 A 1.57 A 2.15 A I wanted to include a measurement at 100% power but I haven\u0026rsquo;t found a good audio source that I can feed into the transceiver to maintain a constant testing environment.\nThese values have been taken off a digital Voltmeter that I put between the battery and the TX-500, then I pressed the TONE button (to tune) on the transceiver and let the value settle (about 2-4 seconds).\nPA500 #Since the TX-500 does not have a built-in tuner the PA500 is well worth the investment. It got it\u0026rsquo;s own page in my equipment collecion.\n","date":"4 November 2022","permalink":"/equipment/radio-stuff/transceivers/lab599-tx500/","section":"Equipment","summary":"A nice radio for portable operation.","title":"Lab599 Discovery TX-500","updated":"11 February 2026"},{"content":"","date":null,"permalink":"/tags/emulation/","section":"Tags","summary":"","title":"Emulation","updated":null},{"content":"Do you use Winlink regularly? Did you ever looked into the logfiles directory?\nMost users won\u0026rsquo;t need to look into the logfiles. Usually. But someone may be interested in them just out of curiosity or someone may have to look something up, maybe an abnormal behaviour of the program or why the recent update failed.\nThe Error #Anyhow, you may end up opening this screen here and might not get what you wanted. At least when you use RMS Express with wine on a linux computer.\nPer default you may get this error message.\nThe solution #You may have to register .log files to a program that opens up as default application. We do that with the Windows-Registry-Editor regedit.exe.\nOh sorry, we could not show you the video!\nWe had the following sources: av1 mp4, h265 mp4, h264 mp4 Shared video Download: H264, H265, AV1 (INFO Some files might not be available.\nH264: Great compatibility, lower quality and bigger size\nH265: Very small files, but not as good as AV1\nAV1: The best quality here, but a bit bigger files as the H265 version\nAn actual browser should usually load the small H265 video per default, others might use the H264 video.\nWindows might not load H265 per default because you would probably have to install the HEVC codec from the Microsoft Store. ) There are two solutions that I have thought of.\nFirst, we declare .log files as text documents and handle them as normal .txt documents. We open these files with the built-in editor notepad.exe.\nAs second solution, we create a new entry for .log files and declare them as logfile. We open these files with our native text-editor built into Gnome.\ntextfile approach (notepad.exe) #Create a textfile with the ending .reg like openlogs.reg.\nWindows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\\.log] @=\u0026#34;txtfile\u0026#34; \u0026#34;Content Type\u0026#34;=\u0026#34;text/plain\u0026#34; After saving the file, import it into the windows registry like this:\n$ wine regedit openlogs.reg This should work instantly.\nDownload this file.\nlogfile approach (native text-editor) #Also create a textfile with the ending .reg, but fill it with these contents:\nWindows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\\.log] @=\u0026#34;logfile\u0026#34; \u0026#34;Content Type\u0026#34;=\u0026#34;text/plain\u0026#34; [HKEY_CLASSES_ROOT\\logfile] @=\u0026#34;Logfile Document\u0026#34; [HKEY_CLASSES_ROOT\\logfile\\shell] [HKEY_CLASSES_ROOT\\logfile\\shell\\open] [HKEY_CLASSES_ROOT\\logfile\\shell\\open\\command] @=\u0026#34;\\\u0026#34;winebrowser\\\u0026#34; \\\u0026#34;%1\\\u0026#34;\u0026#34; Load this into the registry:\n$ wine regedit openlogs_native.reg Also this should work instantly. Opening the logs should open your application on your linux computer that usually opens .log files. That is gnome-text-editor on my computer.\nDownload this file.\nThe end #Have you ever clicked on the Log menu in VARA or VARA FM? Well, that works without those registry tweaks\u0026hellip; I\u0026rsquo;m just saying 😄\n","date":"1 November 2022","permalink":"/posts/2022/30-winlink-on-linux-fix-invalid-handle-on-logfiles/","section":"Blog","summary":"Removes the error message in RMS Expert when trying to open\nLogfiles","title":"Properly open Logfiles in RMS Express on Linux","updated":"8 March 2026"},{"content":"","date":null,"permalink":"/tags/wine/","section":"Tags","summary":"","title":"Wine","updated":null},{"content":"Since none of the found instructions worked for me: here are my settings of my VPN tunnel into HAMNET. I\u0026rsquo;m currently using Fedora 36 on my main laptop and Fedora removed PPTP support back in Fedora 35 \u0026ndash; I could not get the PPTP tunnel working.\nL2TP client #I found a document that shows the creation of an L2TP tunnel on MacOS and I used that as my starting point.\nFirst of all, install NetworkManager-l2tp-gnome:\n$ sudo dnf install NetworkManager-l2tp-gnome After that, create the new VPN tunnel in Settings → Network → VPN.\nClick the + button and select Layer 2 Tunneling Protocol (L2TP) and fill in the settings that you got from your Administrator (usually where you got your login data). I got mine from RWTH Aachen in Germany.\nBasic settings. Enter login data. IPv4 settings. Those work for my setup at home. I\u0026rsquo;m not using IPv6 at home\u0026hellip; Somehow that setup only worked when I removed this setting? And I ended up using those settings for PPP More information #I\u0026rsquo;ve also found some more links \u0026ndash; just when I finished formatting this article.\nIt looks like the following article is online since 2018; but I found this after I started using the L2TP tunnel that I just created a few hours before. It describes the setup of an OpenVPN client, but it is limited to users with a static HAMNET IP address.\nOriginal article found on HAMNET\nhttp://web.db0sda.ampr.org/projekte/hamnet/anwendungen/vpn-zugang/openvpn-hamnet-dial-in Also available on normal internet\nhttps://www.afu.rwth-aachen.de/projekte/hamnet/anwendungen/vpn-zugang/openvpn-hamnet-dial-in ","date":"16 October 2022","permalink":"/posts/2022/29-vpn-tunnel-into-hamnet-on-fedora-36/","section":"Blog","summary":"Those old tutorials on the net are quite outdated now: unfortunately\nPPTP links/tunnels are not supported on newer operating systems any more\u0026hellip;","title":"VPN tunnel into HAMNET on Fedora 36","updated":"16 January 2026"},{"content":"The RigExpert Stick 230 is nice and practical to use, but it comes with a SO-239 connector.\nPlotting the SWR curve is quite slow, also scanning multiple bands as well as moving through a frequency range.\nI personally don\u0026rsquo;t like the user interface and I therefore don\u0026rsquo;t use it much at home and almost never when I\u0026rsquo;m portable.\n","date":"11 August 2022","permalink":"/equipment/radio-stuff/accessories/rigexpert-stick230/","section":"Equipment","summary":"","title":"RigExpert Stick 230","updated":"29 September 2024"},{"content":"I use this mainly on my amateur radio hotspot when I work on my sleek dashboard.\nThis setup lets me edit the php-files on my computer while I use the already installed webserver as a development server to view the actual changes/progress. The advantage of that is: I don\u0026rsquo;t have to feed pseudo-random data into the tables, the data gets pulled live from the logs \u0026ndash; like it would be on the final system.\nInstallation and configuration #$ sudo apt update $ sudo apt install nfs-kernel-server $ sudo vim /etc/exports We have to export our directories in the file /etc/exports on our Raspberry Pi.\n# file: \u0026#34;/etc/exports\u0026#34; /var/www/html 192.168.1.123(rw,async,all_squash,insecure,no_subtree_check,anonuid=1000,anongid=1000) /opt/MMDVMDash 192.168.1.123(rw,async,all_squash,insecure,no_subtree_check,anonuid=1000,anongid=1000) So we allow 192.168.1.123 read- and write-access to the directories above.\nFor the record: my user on my laptop (192.168.1.123) has the same UID (1000) as my user on the Raspberry Pi (192.168.1.124). Also edit /etc/hosts.allow to grant access for your network or host.\n# file: \u0026#34;/etc/hosts.allow\u0026#34; ALL: 192.168.1.123 After we changed the contents of /etc/exports we have to run the exportfs command and restart the nfs-server.\n$ sudo exportfs -ra $ sudo systemctl restart nfs-server.service Accessing the directories #I usually look at the logs on my Raspberry Pi with journalctl -fe and let this running.\nNow on my laptop in my home directory. I create a temporary directory with mkdir tmp and try to mount the nfs share into that. On most linux systems only root is allowed to use mount without an entry in /etc/fstab.\nSo we run\n$ sudo mount 192.168.1.124:/var/www/html tmp/ and if it does not print anything, all is good. On the Raspberry Pi you should see a new line looking like:\nraspi4 rpc.mountd[30223]: authenticated mount request from 192.168.1.123:894 for /opt/MMDVMDash/html (/opt/MMDVMDash/html) To eliminate the confusion: I\u0026rsquo;ve mounted /var/www/html but the log shows /opt/MMDVMDash/html. This is because /var/www/html is currently a symbolic link to /opt/MMDVMDash/html. But if I remove the symlink and replace it with real files the export will still work. And that\u0026rsquo;s it. Unmount with sudo umount tmp/ and we should create an entry in our /etc/fstab file to let the system mount this share when starting.\nWhen unmounting, you should see another line on your Raspberry Pi.\nraspi4 rpc.mountd[30223]: authenticated unmount request from 192.168.1.123:696 for /opt/MMDVMDash/html (/opt/MMDVMDash/html) Creating entries in our /etc/fstab file #First, let us create a directory on our laptop.\n$ mkdir -p ~/raspi4/html # file: \u0026#34;/etc/fstab\u0026#34; 192.168.1.124:/var/www/html /home/dominic/raspi4/html nfs noauto,users,nodev,async,soft,_netdev,x-systemd.automount,x-systemd.device-timeout=1,x-systemd-idle-timeout=1min,x-systemd.mount-timeout=10,timeo=10,retry=3 0 0 After changing that file, make sure to reload Systemd with sudo systemctl daemon-reload.\nMount them from your home directory with mount raspi4/html. The same line should appear on your Raspberry Pi (if you still have journalctl -fe running!).\nYou may use less confusing settings in your fstab file, but I\u0026rsquo;m going with those from above on my Manjaro box, as I also use other NFS shares on my NAS and it turned out those work best for my scenario for now.\nYou could try by only using noauto,users,nodev,async as a starting point. If it fails, try adding only _netdev first \u0026ndash; I can\u0026rsquo;t exactly remember why, but I keep thinking I researched this a while back and sticked with it.\n","date":"7 August 2022","permalink":"/posts/2022/28-using-nfs-on-a-raspberry-pi/","section":"Blog","summary":"A quick and short guide on how to setup an NFS share on a Raspberry Pi.","title":"Using NFS shares on a Raspberry Pi","updated":"29 September 2024"},{"content":"Let\u0026rsquo;s assume you created a disk image with dd on a linux computer like\n$ sudo dd if=/dev/sda of=disk.img bs=4M status=progress conv=fsync There are several partitions in that image and we want to access the linux filesystem on it. For reference, I\u0026rsquo;ll bring in some old backup I made from a Raspberry Pi. That backup is taken from a 8GB sdcard, which is 2.6GB compressed with xz.\nWhen uncompressed, look at the partition table with fdisk:\n$ fdisk -l disk.img Festplatte disk.img: 7,4 GiB, 7948206080 Bytes, 15523840 Sektoren Einheiten: Sektoren von 1 * 512 = 512 Bytes Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes Festplattenbezeichnungstyp: dos Festplattenbezeichner: 0x1b7f4bbb Gerät Boot Anfang Ende Sektoren Größe Kn Typ disk.img1 8192 532479 524288 256M c W95 FAT32 (LBA) disk.img2 532480 15523839 14991360 7,1G 83 Linux We will refer to this output later again.\nUsing losetup #The output of fdisk is not that important to us, unless we have an unknown disk image that we need to inspect first. I already know the partitions. The first is the FAT32 partition used for UEFI and the second is the root file system.\nCreating and mounting the loop device #$ sudo losetup --partscan --find --show disk.img /dev/loop1 The second line is the output of the program. I used losetup already today, so this is not loop0 but loop1. You may get /dev/loop0 usually.\nMount the new virtual loop device to the directory that you like. This is ~/tmp in my case.\n$ sudo mount /dev/loop1p2 tmp Removing the loop device #$ sudo umount tmp $ sudo losetup -d /dev/loop1 Using fdisk and mount #From the output above, we see that 532480 is the starting unit of the linux filesystem in this image file. Further above you see the Units (Einheiten): 1 Unit is 1 sector of 512 Bytes.\nI use a german speaking computer, so you might look for Start or Offset or Beginning\u0026mdash;you know what to look for\u0026hellip;\nWe calculate the needed offset like: 532480 * 512 = 272629760\nAnd the resulting command is\n$ sudo mount -o loop,offset=272629760 disk.img tmp/ A remount is simple as\n$ sudo umount tmp When do you need this stuff #I often create quick and dirty (big) card images from my Raspberry Pies. They are saved and easy to copy over to another storage (because they are a single file).\nIf you have less space, dd is probably not the best method to create a disk backup. partimage for example creates images from partitions, but it only saves the used data from that partition. Those images are smaller.\n","date":"6 August 2022","permalink":"/posts/2022/27-mounting-disk-images-on-linux/","section":"Blog","summary":"I sometimes create full-disk-images of USB drives or hard drives and in rare cases I have to look into them. This is how I usually do that.","title":"Mounting disk images on linux","updated":"29 September 2024"},{"content":"This is my attempt to create a lightweight hotspot for DMR, D-STAR and C4FM on a Raspberry Pi 4 using the 64 bit operating system “Raspberry Pi OS”.\nAs of 2024 some of the steps below are not up to date anymore! If you are looking for a D-STAR hotspot: I can recommend DStarGateway from F4FXL which does not rely on wxWidgets as its predecessor (ircDDBGateway). I made a walk-through-note in a more recent post on this weblog in which I go through my installation process on a Raspberry Pi 2 using Arch Linux ARM.\nPreparation # Do not use a cheap SD-card for your hotspot. We do not mount the filesystem read-only like on Pi-Star. Download the operating software image from raspberrypi.com.\nBoot the Raspberry Pi and set it up to your needs.\nLocalisation Keyboard layout Install needed packages Install your favourite shell (bash, zsh, fish, csh \u0026hellip;) Disable the serial console (and we will also disable Bluetooth)\nOpen /boot/cmdline.txt and remove the text console=serial0,115200\nOpen /boot/config.txt and add to the end\ndtoverlay=disable-bt enable_uart=1 You may also run raspi-config and disable the console from there. Choose 3 Interface Options » I6 Serial Port » No (login shell) » Yes (serial hardware) » OK\nDisable the services\n$ sudo systemctl disable serial-getty@ttyAMA0.service $ sudo systemctl disable bluetooth.service Reboot the Raspberry Pi after those changes!\n$ sudo reboot Install the needed packages to compile the software later\n$ sudo apt update -y $ sudo apt full-upgrade $ sudo apt install git build-essential zsh nmap lsof vim cmake gcc-arm-none-eabi stm32flash libusb-1.0-0-dev libasound2-dev libwxgtk3.0-gtk3-dev Because wiringPi is currently not available from official sources, we have to install it manually.\n$ git clone git@github.com:WiringPi/WiringPi.git $ cd wiringPi $ ./build This should suffice, make sure to read INSTALL and follow its instructions.\nCheck wiringPi with gpio -v or gpio readall:\n$ gpio -v gpio version: 2.70 Copyright (c) 2012-2018 Gordon Henderson This is free software with ABSOLUTELY NO WARRANTY. For details type: gpio -warranty Raspberry Pi Details: Type: Pi 4B, Revision: 01, Memory: 4096MB, Maker: Sony * Device tree is enabled. *--\u0026gt; Raspberry Pi 4 Model B Rev 1.1 * This Raspberry Pi supports user-level GPIO access. Create a non-privileged user called mmdvm and add the user to the group dialout\n$ sudo useradd mmdvm -g mmdvm -s /sbin/nologin $ sudo usermod mmdvm -G dialout I had some problems with wiringPi, so I finally added the user mmdvm to the groups gpio and kmem. (To let the user mmdvm access /dev/mem and /dev/gpiomem.)\n$ sudo usermod -G gpio,kmem -a mmdvm Firmware #I hope we did not forgot: we use a DUAL_HAT extension on our Raspberry Pi and we have to compile the correct firmware for this. The actual version of the firmware is at 1.6.0:\nMMDVM_HS_Dual_Hat-v1.6.0 20210919 12.2880MHz dual ADF7021 FW by CA6JAU GitID #d4cb546\nBut let us move to the fun (work) part.\nGet the code #Clone the git repository. I prefer this in a separate folder like ~/git.\n$ git clone --recursive git@github.com:juribeparada/MMDVM_HS.git Configuration #Enter the directory and copy an appropriate default configuration for your board.\n$ cp configs/MMDVM_HS_Dual_Hat-12mhz.h Config.h Edit the file to your needs. The example below is what I use, be aware of the version of the installed TCXO of 12.2880 MHz!\n// file: \u0026#34;Config.h\u0026#34; #if !defined(CONFIG_H) #define CONFIG_H #define MMDVM_HS_DUAL_HAT_REV10 #define ENABLE_ADF7021 #define DUPLEX #define ADF7021_12_2880 #define AD7021_GAIN_HIGH #define STM32_USART1_HOST #define I2C_ADDR 0x22 #define ENABLE_SCAN_MODE #define SEND_RSSI_DATA #define SERIAL_REPEATER #define SERIAL_REPEATER_BAUD 115200 #define QUIET_MODE_LEDS #define DISCREET_SRV_LED_INVERTED #define ENABLE_UDID #endif Those settings are also interesting to play with in the file ADF7021.h:\n// file: \u0026#34;ADF7021.h\u0026#34; // Disable TX Raised Cosine filter for 4FSK modulation in ADF7021: #define ADF7021_DISABLE_RC_4FSK // Enable AFC support for DMR, YSF, P25, and M17 (experimental): // (AFC is already enabled by default in D-Star) // #define ADF7021_ENABLE_4FSK_AFC // Configure AFC with positive initial frequency offset: // #define ADF7021_AFC_POS I only disabled the Raised Cosine filter for 4FSK modulation because this works best for me. Enabling AFC did only cause lots of synchronisation errors on DMR. Also more firmware read errors occured with 4FSK AFC enabled.\nYou may want to leave that file intact if you just want your hotspot work without fiddling around with the source code.\nFine tuning and experimenting #If you want a hotspot that works: move over to the compilation process. If you want better response times on DMR keep on reading.\nYou may want to consider making the following changes on those two files.\n// file: \u0026#34;DMRDMOTX.cpp\u0026#34; //m_txDelay(240U), // 200ms m_txDelay(120U), // 200ms // file: \u0026#34;DMRDMOTX.cpp\u0026#34; void CDMRDMOTX::setTXDelay(uint8_t delay) { //m_txDelay = 600U + uint16_t(delay) * 12U; // 500ms + tx delay m_txDelay = 60U + uint16_t(delay) * 12U; } // file: \u0026#34;DMRTX.cpp\u0026#34; // const uint32_t STARTUP_COUNT = 20U; const uint32_t STARTUP_COUNT = 2U; I\u0026rsquo;ll leave you with this, if you have no idea what you are doing here: you should probably leave those files just as they are\u0026hellip;\nThose values were determined by Volker (DL2SDG) and I found them on one of the links below. Those values may not suit your configuratoin or board, so take them as a starting point and try the best values for you and your board. Compile and upload to the board #If no errors were made in Config.h this should be as easy as the steps above.\n$ make clean $ make -j4 $ sudo make mmdvm_hs_dual_hat Finish this with a reboot of the Raspberry Pi.\n$ sudo reboot Note, that we used -j4 as an argument of make because the Raspberry Pi 4 has 4 virtual cores and we use them to speed up the compilation process. Finally #And, as many operators tend to ignore manuals a lot, here are a few links that you can should read.\nhttps://github.com/juribeparada/MMDVM_HS/blob/master/BUILD.md https://github.com/mathisschmieder/MMDVM_HS_Hat/blob/master/README.md http://kb.amft-it.de/doku.php?id=kb-afu:mmdvm-hospot http://kb.amft-it.de/doku.php?id=kb-afu:mmdvm-hs-config MMDVMHost #This is the program that connects our Gateways with the hardware board. This could be referred as the modem probably.\nGet the code #We run this command also in our separated git folder. Just to keep all those git repositories in one place.\n$ git clone git@github.com:g4klx/MMDVMHost.git Compile the code #Enter the newly created directory and compile it.\n$ make -j4 -f Makefile.Pi Install the executables into /usr/local/bin by executing\n$ sudo make install Configuration #Copy the default configuration file to /etc:\n$ sudo cp MMDVM.ini /etc/ and edit it to your needs. Most of the options are self-explanatory and I will only publish some excerpts of my /etc/MMDVM.ini file.\n# file: \u0026#34;/etc/MMDVM.ini\u0026#34; [Log] # Logging levels, 0=No logging DisplayLevel=2 FileLevel=2 FilePath=/var/log/mmdvm FileRoot=MMDVM FileRotate=0 [Modem] Hardware=mmdvmhshat # Valid values are \u0026#34;null\u0026#34;, \u0026#34;uart\u0026#34;, \u0026#34;udp\u0026#34;, and (on Linux) \u0026#34;i2c\u0026#34; Protocol=uart # The port and speed used for a UART connection # UARTPort=\\\\.\\COM4 # UARTPort=/dev/ttyACM0 UARTPort=/dev/ttyAMA0 UARTSpeed=115200 # The port and address for an I2C connection I2CPort=/dev/i2c I2CAddress=0x22 # IP parameters for UDP connection ModemAddress=192.168.2.100 ModemPort=3334 LocalAddress=192.168.2.1 LocalPort=3335 TXInvert=1 RXInvert=0 PTTInvert=0 TXDelay=100 RXOffset=-50 TXOffset=300 DMRDelay=0 RXLevel=50 TXLevel=50 RXDCOffset=0 TXDCOffset=0 RFLevel=100 # CWIdTXLevel=50 # D-StarTXLevel=50 # DMRTXLevel=50 # YSFTXLevel=50 # P25TXLevel=50 # NXDNTXLevel=50 # M17TXLevel=50 # POCSAGTXLevel=50 # FMTXLevel=50 # AX25TXLevel=50 RSSIMappingFile=/usr/local/etc/RSSI.dat UseCOSAsLockout=0 Trace=0 Debug=0 [D-Star] Enable=1 Module=B SelfOnly=0 AckReply=1 AckTime=750 AckMessage=0 ErrorReply=1 RemoteGateway=0 # ModeHang=10 WhiteList= [DMR] Enable=1 # Set your hotspot ID here (use your own DMR-ID and append two digits to it) Id=XXXXXXXXX Beacons=0 BeaconInterval=60 BeaconDuration=3 ColorCode=1 SelfOnly=0 EmbeddedLCOnly=0 DumpTAData=1 # Prefixes=234,235 # Slot1TGWhiteList= # Slot2TGWhiteList= CallHang=3 TXHang=4 # ModeHang=10 # OVCM Values, 0=off, 1=rx_on, 2=tx_on, 3=both_on, 4=force off # OVCM=0 [System Fusion] Enable=1 LowDeviation=0 SelfOnly=0 TXHang=4 RemoteGateway=0 # ModeHang=10 [D-Star Network] Enable=1 LocalAddress=127.0.0.1 LocalPort=20011 GatewayAddress=127.0.0.1 GatewayPort=20010 # ModeHang=3 Debug=0 [DMR Network] Enable=1 # Type may be either \u0026#39;Direct\u0026#39; or \u0026#39;Gateway\u0026#39;. When Direct you must provide the Master\u0026#39;s # address as well as the Password, and for DMR+, Options also. #Type=Direct Type=Gateway LocalAddress=127.0.0.1 LocalPort=62032 RemoteAddress=127.0.0.1 RemotePort=62031 #RemoteAddress=89.185.97.34 #RemotePort=55555 Password=passw0rd # Password=P@ssw0rd1234 #Jitter=360 Jitter=0 Slot1=1 Slot2=1 # You would need the Options line if you want to connect MMDVMHost directly # to a DMR server (without Gateway) # Options=\u0026#34;StartRef=4000;RelinkTime=15;UserLink=1;\u0026#34; # ModeHang=3 Debug=0 [System Fusion Network] Enable=1 LocalAddress=127.0.0.1 LocalPort=3200 GatewayAddress=127.0.0.1 GatewayPort=4200 # ModeHang=3 Debug=0 These are the most important parts of the configuration \u0026ndash; make sure that you double check your file and insert your callsign and DMRID number correctly.\nWithin [DMR] you see the line starting with Id=. This is where you place the final Id for the DMR network, use your DMRID and append two digits to it, so you can run multiple hotspots on the same network/server (with different Ids, but still valid as they all start with your legit DMRID).\nCreate log file directory #$ sudo mkdir /var/log/mmdvm $ sudo chown mmdvm:mmdvm /var/log/mmdvm Check for errors #To check for errors, run MMDVMHost directly before setting up a system service. Make sure, that you have set Daemon=0 in your MMDVM.ini file for this test. Start MMDVMHost as user mmdvm\n$ sudo -u mmdvm MMDVMHost /etc/MMDVM.ini Set Daemon=1 back in your MMDVM.ini if you haven\u0026rsquo;t already.\nSetup the system service #Copy the unit file for Systemd to the system.\n$ sudo cp linux/systemd/mmdvmhost.service /etc/systemd/system/ No modification should be needed, but for reference this is the content of the file:\n# file: \u0026#34;/etc/systemd/system/mmdvmhost.service\u0026#34; [Unit] Description=MMDVMHost Radio Service After=syslog.target network.target [Service] User=mmdvm Type=forking ExecStart=/usr/local/bin/MMDVMHost Restart=on-abnormal [Install] WantedBy=multi-user.target Start and enable this service in one go with\n$ sudo systemctl daemon-reload $ sudo systemctl enable --now mmdvmhost.service DMRGateway #We want to connect our hotspot to the austrian IPSC2-OE-DMO server aswell as the austrian brandmeister master server (BM2321).\nGet the code #$ git clone git@github.com:g4klx/DMRGateway.git Configuration ## file: \u0026#34;/etc/DMRGateway.ini\u0026#34; [General] Timeout=10 # RFTimeout=10 # NetTimeout=7 RptAddress=127.0.0.1 RptPort=62032 LocalAddress=127.0.0.1 LocalPort=62031 RuleTrace=0 Daemon=1 Debug=0 [Log] # Logging levels, 0=No logging DisplayLevel=2 FileLevel=2 FilePath=/var/log/mmdvm FileRoot=DMRGateway FileRotate=0 [Voice] Enabled=1 Language=en_GB Directory=/home/pi/git/DMRGateway/Audio [Info] Latitude=0.0 Longitude=0.0 Height=0 Location=Location, GRID Description=Multi-Mode Hotspot URL=https://oe7drt.com [XLX Network] Enabled=0 File=XLXHosts.txt Port=62030 Password=passw0rd ReloadTime=60 # Local=3351 Slot=1 TG=6 Base=64000 Startup=950 Relink=10 Debug=0 #Allow user linking control using Private Calls UserControl=1 #Override default module for startup reflector #Module=A # BrandMeister [DMR Network 1] Enabled=1 Name=BM Address=94.199.173.125 Port=62031 #Local=3352 # Local cluster #TGRewrite=1,9,1,9,1 # Echo on RF slot 1 TG9990 to network slot 1 9990 TypeRewrite=1,9990,1,9990 SrcRewrite=1,9990,1,9990,1 # Dynamic rewriting of slot 2 TGs 90-999999 to TG9 to emulate reflector behaviour #TGDynRewrite=2,90,4000,5000,9,999910,9990 # For normal repeater operation disable TGDyn coment out the above line # After that remove the coments below PassAllTG=1 # PassAllTG=2 # Pass all of the other private traffic on slot 1 and slot 2 PassAllPC=1 #PassAllPC=2 Password=passw0rd Location=0 Debug=0 # DMR+ [DMR Network 2] Enabled=1 Name=DMR+ Address=89.185.97.34 Port=55555 # Local=3352 Password=PASSWORD Options=\u0026#34;StartRef=4000;RelinkTime=15;UserLink=1;TS1_1=110;\u0026#34; TGRewrite=2,6,1,6,2 TGRewrite=2,110,1,110,1 TGRewrite=2,120,1,120,1 TGRewrite=2,130,1,130,1 TGRewrite=2,232,1,232,1 TGRewrite=2,8180,1,8180,10 TGRewrite=2,8191,1,8191,9 TGRewrite=2,9990,2,9990,1 TGRewrite=2,9,2,9,1 #PCRewrite=2,4000,2,4000,1001 PassAllPC=2 Location=0 Debug=0 [...] [GPSD] Enable=0 Address=127.0.0.1 Port=2947 [APRS] Enable=0 Address=127.0.0.1 Port=8673 Description=APRS Description Suffix=3 [Dynamic TG Control] Enabled=1 Port=3769 [Remote Control] Enable=0 Address=127.0.0.1 Port=7643 Test your setup #Change the configuration from above to Daemon=0 and start DMRGateway in a terminal with\n$ sudo -u mmdvm DMRGateway /etc/DMRGateway.ini Check for errors and move on when everything is fine. You should hear the announcement coming from the ISPC2 server. In our case (Ref 4000) we should hear something like \u0026ldquo;Not connected\u0026rdquo; or \u0026ldquo;Repeater not connected\u0026rdquo;.\nCreate a system service #I copied the unit file from mmdvmhost.service and made my changes. If you don\u0026rsquo;t want to do that by yourself, use this one to start with.\n# file: \u0026#34;/etc/systemd/system/dmrgateway.service\u0026#34; [Unit] Description=DMRGateway Radio Service After=syslog.target network.target mmdvmhost.service [Service] User=mmdvm Type=forking ExecStart=/usr/local/bin/DMRGateway Restart=on-abnormal [Install] WantedBy=multi-user.target Change the configuration back Daemon=1 and enable the service/unit.\n$ sudo systemctl enable --now dmrgateway.service YSFGateway (C4FM, YSF, YCS) #What we define: connect our hotspot to the AT-C4FM-Austria reflector via YSF.\nGet the code #Use a quite actual but modified version of YSFClients #This is a fork of the original repository by Jonathan, G4KLX.\nThe only reason for using this version is the proper display in the servers dashboard. You will see your location aswell as the used frequency and the YSFGateway type in the YCS232 dashboard.\nThis version might not be as actual as the original repository, but it is ready-to-use with the changes made by Kurt, OE1KBC back in 2021.\nI\u0026rsquo;ve included his changes in my fork and created a branch called YCS232.\n$ git clone git@github.com:oe7drt/YSFClients.git $ cd YSFClients $ git fetch --all $ git checkout YCS232 You can also add the original sources as an additional remote:\n$ git remote add upstream git@github.com:g4klx/YSFClients.git $ git fetch --all Original, most actual codebase #$ git clone git@github.com:g4klx/YSFClients.git Either choice of source, compile it #Enter the created directory YSFClients and compile the code. Install them into /usr/local/bin\n$ cd YSFClients $ make -j4 $ sudo make install Configuration #Copy the default configuration file into /etc\n$ sudo cp YSFGateway/YSFGateway.ini /etc/ and edit the file. Here are some excerpts of mine:\n# file: \u0026#34;/etc/YSFGateway.ini\u0026#34; [General] Callsign=OE7DRT Suffix=RPT # Suffix=ND Id=XXXXXXX RptAddress=127.0.0.1 RptPort=3200 LocalAddress=127.0.0.1 LocalPort=4200 WiresXMakeUpper=1 WiresXCommandPassthrough=0 Debug=0 Daemon=1 [Info] RXFrequency=430600000 TXFrequency=439075000 Power=1 Latitude=0.0 Longitude=0.0 Height=0 Name=Location, GRID Description=Multi-Mode Hotspot [Log] # Logging levels, 0=No logging DisplayLevel=2 FileLevel=2 FilePath=/var/log/mmdvm FileRoot=YSFGateway FileRotate=1 [APRS] Enable=0 Address=127.0.0.1 Port=8673 Description=APRS Description Suffix=Y [Network] # Startup=FCS00120 Startup=AT-C4FM-Austria # book DG-ID for Reflector Options=10,20,22,24,28,32,62,35 InactivityTimeout=0 Revert=0 Debug=0 [YSF Network] Enable=1 Port=42000 Hosts=/usr/local/etc/YSFHosts.txt ReloadTime=60 ParrotAddress=127.0.0.1 ParrotPort=42012 YSF2DMRAddress=127.0.0.1 YSF2DMRPort=42013 YSF2NXDNAddress=127.0.0.1 YSF2NXDNPort=42014 YSF2P25Address=127.0.0.1 YSF2P25Port=42015 [FCS Network] Enable=0 Rooms=./FCSRooms.txt Port=42001 This is not the full file, but pretty much of it. Adopt to your needs but check and double-check that file like the other configuration files.\nTest your setup #Change Daemon=0 in the configuration file for the test and run\n$ sudo -u mmdvm YSFGateway /etc/YSFGateway.ini You should see yourself in the dashboard and also the screen should print something like Linked to AT-C4FM-AUSTRIA and Link successful to MMDVM.\nStop it with CTRL + C and move on to create a system service (unit file) for Systemd.\nChange Daemon=1 back in your config if not already done.\nSetup a system service #Create the unit file /etc/systemd/system/ysfgateway.service\n# file: \u0026#34;/etc/systemd/system/ysfgateway.service\u0026#34; [Unit] Description=YSFGateway Service After=syslog.target network.target [Service] User=mmdvm Type=forking ExecStart=/usr/local/bin/YSFGateway Restart=on-abnormal [Install] WantedBy=multi-user.target Start and enable the service.\n$ sudo systemctl daemon-reload $ sudo systemctl enable --now ysfgateway.service ircDDBGateway (D-STAR) #Okay, this was the hardest part for me because I haven\u0026rsquo;t found much information about what programs and configuration files are really needed for D-STAR to work properly \u0026ndash; I\u0026rsquo;m not even sure now if it is working fine or if something is still missing.\nSo the information in this section may be inaccurate or even wrong. Consider that, but if you have a correct answer I would be happy to hear about it.\nI think that dstarrepeater was only used for the first hardware and it\u0026rsquo;s work is now done from MMDVMHost. Again, correct me if I\u0026rsquo;m wrong.\nGet the code #In our ~/git directory (where else?)\n$ git clone git@github.com:g4klx/ircDDBGateway.git Compile the code and install the programs #Open Makefile and change the parameters on top of the file to your needs. I like to use /var/log/mmdvm, /usr/local/bin and /usr/local/etc for example\u0026hellip;\n$ cd ircDDBGateway $ make -j4 $ sudo make install Configuration #Sadly, I haven\u0026rsquo;t found any configuration file as an example, so I referred to the configuration files on anothor hotspot that was running Pi-Star.\nThese are the files that I use at the moment, changes may be done if needed.\n/etc/ircddbgateway ## file: \u0026#34;/etc/ircddbgateway\u0026#34; gatewayType=1 # gatewayType=0 is the default, but Pi-Star uses 1 here # 0 repeater, 1 hotspot, 2 dongle, 3 starnet gatewayCallsign=N0SIGN gatewayAddress=0.0.0.0 icomAddress=172.16.0.20 icomPort=20000 hbAddress=127.0.0.1 hbPort=20010 latitude=0.0 longitude=0.0 description1=Location, GRID description2=Location State url=https://qrz.com/db/N0SIGN repeaterCall1=N0SIGN repeaterBand1=B # repeaterType1=0 homebrew, 1 icom, 2 dummy repeaterType1=0 repeaterAddress1=127.0.0.1 repeaterPort1=20011 reflector1=DCS009 A atStartup1=1 reconnect1=0 frequency1=439.07500 offset1=-8.4750 rangeKms1=1.000 latitude1=0.0 longitude1=0.0 agl1=3.000 description1_1=Location, GRID description1_2=Location State url1= band1_1=0 band1_2=0 band1_3=0 repeaterCall2= repeaterBand2= repeaterType2=0 repeaterAddress2=127.0.0.1 repeaterPort2=20012 reflector2= atStartup2=0 reconnect2=0 frequency2=0.00000 offset2=0.0000 rangeKms2=0.000 latitude2=0.000000 longitude2=0.000000 agl2=0.000 description2_1= description2_2= url2= band2_1=0 band2_2=0 band2_3=0 repeaterCall3= repeaterBand3= repeaterType3=0 repeaterAddress3=127.0.0.1 repeaterPort3=20013 reflector3= atStartup3=0 reconnect3=0 frequency3=0.00000 offset3=0.0000 rangeKms3=0.000 latitude3=0.000000 longitude3=0.000000 agl3=0.000 description3_1= description3_2= url3= band3_1=0 band3_2=0 band3_3=0 repeaterCall4= repeaterBand4= repeaterType4=0 repeaterAddress4=127.0.0.1 repeaterPort4=20014 reflector4= atStartup4=0 reconnect4=0 frequency4=0.00000 offset4=0.0000 rangeKms4=0.000 latitude4=0.000000 longitude4=0.000000 agl4=0.000 description4_1= description4_2= url4= band4_1=0 band4_2=0 band4_3=0 ircddbEnabled=1 ircddbHostname=ircv4.openquad.net ircddbUsername=N0SIGN ircddbPassword= ircddbEnabled2=0 ircddbHostname2=rr.openquad.net ircddbUsername2= ircddbPassword2= ircddbEnabled3=0 ircddbHostname3= ircddbUsername3= ircddbPassword3= ircddbEnabled4=0 ircddbHostname4= ircddbUsername4= ircddbPassword4= aprsEnabled=1 aprsHostname=euro.aprs2.net aprsPassword=00000 aprsPort=14580 dextraEnabled=1 dextraMaxDongles=5 dplusEnabled=1 dplusMaxDongles=5 dplusLogin=N0SIGN dcsEnabled=1 ccsEnabled=1 ccsHost=CCS704 xlxEnabled=0 xlxOverrideLocal=0 xlxHostsFileUrl=http://xlxapi.rlx.lu/api.php?do=GetXLXDMRMaster starNetBand1=A starNetCallsign1= starNetLogoff1= starNetInfo1= starNetPermanent1= starNetUserTimeout1=300 starNetGroupTimeout1=300 starNetCallsignSwitch1=0 starNetTXMsgSwitch1=1 starNetReflector1= starNetBand2=A starNetCallsign2= starNetLogoff2= starNetInfo2= starNetPermanent2= starNetUserTimeout2=300 starNetGroupTimeout2=300 starNetCallsignSwitch2=0 starNetTXMsgSwitch2=1 starNetReflector2= starNetBand3=A starNetCallsign3= starNetLogoff3= starNetInfo3= starNetPermanent3= starNetUserTimeout3=300 starNetGroupTimeout3=300 starNetCallsignSwitch3=0 starNetTXMsgSwitch3=1 starNetReflector3= starNetBand4=A starNetCallsign4= starNetLogoff4= starNetInfo4= starNetPermanent4= starNetUserTimeout4=300 starNetGroupTimeout4=300 starNetCallsignSwitch4=0 starNetTXMsgSwitch4=1 starNetReflector4= starNetBand5=A starNetCallsign5= starNetLogoff5= starNetInfo5= starNetPermanent5= starNetUserTimeout5=300 starNetGroupTimeout5=300 starNetCallsignSwitch5=0 starNetTXMsgSwitch5=1 starNetReflector5= remoteEnabled=1 remotePassword=raspberry #remotePort=54321 remotePort=10022 language=0 infoEnabled=1 echoEnabled=1 logEnabled=1 dratsEnabled=0 dtmfEnabled=1 mobileGPSEnabled=0 mobileGPSAddress=127.0.0.1 mobileGPSPort=7834 windowX=-1 windowY=-1 I wasn\u0026rsquo;t aware what numbers need to be set on gatewayType or repeaterType, but a look into the source code made my decision easier. I\u0026rsquo;m not sure if that is correctly interpreted as I never finished learning C++ but I learned the basics back in school\u0026hellip;\nAnd so I found some information in Common/Defs.h:\n64 65 66 67 68 enum HW_TYPE { HW_HOMEBREW, HW_ICOM, HW_DUMMY }; 130 131 132 133 134 135 enum GATEWAY_TYPE { GT_REPEATER, GT_HOTSPOT, GT_DONGLE, GT_STARNET }; View those two online on github: HW_TYPE, GATEWAY_TYPE\n/etc/timeserver #timeserverd is used to produce time announcements. The interval of these can be set to\nevery 15 minutes:\ninterval=0 every 30 minutes:\ninterval=1 every hour:\ninterval=2 Adopt those changes in /etc/timeserver.\n# file: \u0026#34;/etc/timeserver\u0026#34; callsign=N0SIGN sendA=0 sendB=1 sendC=0 sendD=0 sendE=0 address=127.0.0.1 language=3 format=1 interval=2 windowX=0 windowY=0 First run #$ sudo -u mmdvm ircddbgatewayd Abort with CTRL + C when done.\nCreate the system services #You could copy over the unit files from ./debian, but the paths in those files need adjustement, so we create them directly with sudo vim /etc/systemd/system/...\n# file: \u0026#34;/etc/systemd/system/ircddbgateway.service\u0026#34; [Unit] Description=D-STAR Gateway Daemon After=network.target [Service] User=mmdvm ExecStart=/usr/local/bin/ircddbgatewayd Restart=on-abort [Install] WantedBy=multi-user.target # file: \u0026#34;/etc/systemd/system/timeserver.service\u0026#34; [Unit] Description=Timeserver (ircDDBGateway) Daemon After=syslog.target network.target ircddbgateway.service [Service] User=mmdvm Type=forking ExecStart=/usr/local/bin/timeserverd -daemon #ExecStop=/usr/local/sbin/timeserver.service stop #ExecReload=/usr/local/sbin/timeserver.service restart Restart=on-abort [Install] WantedBy=multi-user.target Enable the services\n$ sudo systemctl daemon-reload $ sudo systemctl enable --now ircddbgateway.service $ sudo systemctl enable --now timeserver.service The hotspot works #This is the end of the procedure if you want a working hotspot. If you want visualisation on a dashboard continue reading: we will install nginx as our webserver and host the dashboard made by Kim, DG9VH.\nDashboard #Preparation #There are a few things to prepare, before we can finally visualize the electro-magnetic stream in the air.\nInstall some needed packages\n$ sudo apt install python3-websockets python3-pip $ sudo pip3 install ansi2html $ sudo apt install python3-gpiozero python3-psutil python3-serial Refer to the installation instructions on the repository for more information and the full instructions.\nAllow the logtailer program access to MMDVMHost with sudo visudo and add this line to the user section of the sudoers file:\nwww-data ALL=(ALL) NOPASSWD: /usr/local/bin/MMDVMHost Webserver or built-in solution? #We could use a built-in solution to host our dashboard using Python. This is a fancy way to host a dashboard but I\u0026rsquo;ve never used such solutions myself, so I\u0026rsquo;ll stick to a real webserver in this article.\nInstall nginx with php support with\n$ sudo apt install nginx php-fpm Configure and limit webserver #I\u0026rsquo;ve already added some limiting directives into the default configuration. We should not need this with the websockets based dashboard, but I add this anyway.\nWe also added index.php to the index directive, but not in front of the filenames → we want to disable the dashboard with an empty index.html file that we create in the document root of our webserver (sudo touch /var/www/html/index.html).\n# file: \u0026#34;/etc/nginx/sites-enabled/default\u0026#34; limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s; # Default server configuration # server { listen 80 default_server; listen [::]:80 default_server; limit_req zone=mylimit burst=5 nodelay; # limit_req_status 444; # SSL configuration # # listen 443 ssl default_server; # listen [::]:443 ssl default_server; # # [...] # # include snippets/snakeoil.conf; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.php index.htm index.nginx-debian.html; server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } # pass PHP scripts to FastCGI server # location ~ \\.php$ { include snippets/fastcgi-php.conf; # With php-fpm (or other unix sockets): fastcgi_pass unix:/run/php/php7.4-fpm.sock; # With php-cgi (or other tcp sockets): #fastcgi_pass 127.0.0.1:9000; } # deny access to .htaccess files, if Apache\u0026#39;s document root # concurs with nginx\u0026#39;s one # location ~ /\\.ht { deny all; } } # Virtual Host configuration for example.com # # [...] Get the code #$ sudo mkdir /opt/MMDVMDash $ sudo chown pi /opt/MMDVMDash $ git clone --recursive git@github.com:dg9vh/MMDVMHost-Websocketboard.git /opt/MMDVMDash We saved the dashboard repository now in /opt/MMDVMDash.\nConfiguration #Open logtailer.ini, this should look something like this (shrinked together)\n# file: \u0026#34;/opt/MMDVMDash/logtailer.ini\u0026#34; [DEFAULT] Host=0.0.0.0 Port=5678 Ssl=False SslCert=/path/to/cert SslKey=/path/to/keyfile MaxLines=500 Filerotate=True [MMDVMHost] Logdir=/var/log/mmdvm/ Prefix=MMDVM DMR_ID_Lookup=1 DMR_ID_LookupFile=/usr/local/etc/DMRIds.dat DMR_ID_Reload_Time=1440 MMDVM_ini=/etc/MMDVM.ini MMDVM_bin=/usr/local/bin/MMDVMHost [DAPNETGateway] Logdir=/var/log/mmdvm/ Prefix=DAPNETGateway [ServiceMonitoring] BinaryName1=MMDVMHost BinaryName2=ircddbgatewayd BinaryName3=YSFGateway BinaryName4=timeserverd Next, open /opt/MMDVMDash/html/js/config.js and modify it to your needs\n// file: \u0026#34;/opt/MMDVMDash/html/js/config.js\u0026#34; var config_struc_ver = 20210501.1; var qrz = 1; var debug = 0; var warnlevel = 200; var emergencylevel = 500; var currtx = 1; var lastheard = 2; var localheard = 1; var allheard = 1; var qso = 1; var dapnet = 0; var sysinfo = 1; var services = 1; var about = 0; var useClientTimezone = 1; var showBMTGLink = 0; var qrz_blacklist = [\u0026#34;N0CALL\u0026#34;]; var dashboard_blacklist = [\u0026#34;MY0CALL\u0026#34;]; var useDarkTheme = 0; var customHeadlineText = ``; var customText = ``; Create and enable a system service #$ sudo cp systemd/logtailer.service /etc/systemd/system/ $ sudo systemctl daemon-reload $ sudo systemctl enable --now logtailer.service Enjoy the multi-mode hotspot #Finally, a few last words should be written. I\u0026rsquo;ve spent quite some time with my research about the tools needed for a hotspot. Most of us use Pi-Star and go with it. And that\u0026rsquo;s fine, because Pi-Star is an awesome jack of all trades, but in this article I tried to explain my experiences that I learned when I created my lightweight hotspot that only runs programs that I really need.\nYou gain more control over the system tasks on your Raspberry Pi, but you loose some comfort functions. I always liked slim and lightweight systems since I learned about the linux world back in my school time. I went with Gentoo and fluxbox for some years and also used FreeBSD in combination with fluxbox on my older Lenovo T60 laptop.\nSo that\u0026rsquo;s why I try to make my systems small and compact and I\u0026rsquo;m very happy with the result. I personally thought that I\u0026rsquo;d stuck on the D-STAR configuration because I\u0026rsquo;ve found so less information about that mode \u0026ndash; specially it\u0026rsquo;s configuration. But now it\u0026rsquo;s working fine and I can say: it wasn\u0026rsquo;t that hard (or abstract) as I thought before.\n","date":"10 July 2022","permalink":"/posts/2022/26-raspberry-pi-4-64bit-dual-hat-hotspot-without-pi-star/","section":"Blog","summary":"Working \u003cstrong\u003ewithout Pi-Star\u003c/strong\u003e on a fresh and lightweight Raspberry Pi OS (64 bit) installation. One of the longer articles over here\u0026hellip;","title":"Raspberry Pi 4 (64 bit) DUAL_HAT Hotspot","updated":"3 February 2026"},{"content":"My pfSense firewall at home got a pretty heavy misconfiguration by myself and that resulted in an annoying boot-loop. This took me quite a while to research, but I finally got it working again. Thank god pfSense makes backups of its configuration so this recovery process works quite well.\nFollow these steps # Boot into single user mode\nConnect to your firewall (with a serial console) and choose option 5) Reboot system and confirm with the letter S (capital s).\nZFS version only\nRemount root slice as read-write:\n$ /sbin/mount -u / Mount all ZFS filesystems, datasets etc.\n$ /sbin/zfs mount -a Working within the mounted filesystems\nEnter /cf/conf\n$ cd /cf/conf Copy the newest backup file back\n$ cp backup/config-1648889613.xml config.xml Clear the config cache\n$ rm /tmp/config.cache Reload system and it\u0026rsquo;s services\n$ /etc/rc.reload_all start This may take a while. At this point we are done, we can now remove the single user mode boot configuration and reboot the firewall.\nClear the single user mode boot configuration\n$ /sbin/nextboot -D ZFS does not clear the single user mode boot configuration by itself, that\u0026rsquo;s why we have to delete it after we are done with our work.\nReboot the system\n$ /sbin/reboot You could also use exit, but that would only continue booting into multi user mode without rebooting the system first. I personally think that we would benefit from a full reboot.\nOkay, that\u0026rsquo;s it all for now. Please note that I do not use the UFS filesystem any more, so I won\u0026rsquo;t add this to my little instruction set.\nThis post was actually older, I\u0026rsquo;ve saved the instructions in a textfile until I found the time to format it and publish it on my website. Sources # https://docs.netgate.com/pfsense/en/latest/troubleshooting/single-user-mode.html#ufs-systems https://www.agix.com.au/restore-pfsense-from-backup-using-the-cli-command-line/ ","date":"4 July 2022","permalink":"/posts/2022/24-pfsense-restore-broken-config/","section":"Blog","summary":"Restoring a configuration file for pfSense when it actually stays in a boot-loop","title":"pfSense: restore broken config","updated":"29 September 2024"},{"content":"First off I want to say, that Systemd is quite new to me and I always used the old and classic init systems like OpenRC (which is still available on Gentoo \u0026ndash; if someone cares about that more than I do).\nNow let\u0026rsquo;s start right away, flushing the DNS cache on a linux box using Systemd is not that complicated, but the correct commands should be known.\nAnd this post is all about that:\n$ sudo systemd-resolve --flush-caches You could also use sudo resolvectl flush-caches if you like or prefer.\nNow verify the empty cache:\n$ systemd-resolve --statistics I usually do not need to flush my computers DNS caches, but fiddling with my firewall at home made me use this very often over the last few weeks.\nSources # https://devconnected.com/how-to-flush-dns-cache-on-linux/ ","date":"4 July 2022","permalink":"/posts/2022/25-systemd-flushing-the-dns-cache/","section":"Blog","summary":"\u003cp\u003eFirst off I want to say, that Systemd is quite new to me and I always used the\nold and classic init systems like OpenRC (which is still available on\nGentoo \u0026ndash; if someone cares about that more than I do).\u003c/p\u003e","title":"Systemd: flushing the DNS cache","updated":"29 September 2024"},{"content":"I noticed long delays (more than 2 minutes) on reboots and poweroffs recently on my Manjaro laptop.\nFix the slow shutdown/reboot #View the last boot session log in reverse order\n$ journalctl -rb -1 and inspect that for abnormalities. Also look at your console when rebooting or shutting down the system, as that may also present some good starting points.\nTo make things short, here\u0026rsquo;s my solution that I currently work with:\nI edited /etc/systemd/system.conf and changed the following values:\n# file: \u0026#34;/etc/systemd/system.conf\u0026#34; [Manager] [...] RebootWatchdogSec=1min ShutdownWatchdogSec=1min [...] DefaultTimeoutStopSec=5s [...] Have a quick look at the boot time #$ systemd-analyze and if you are more interested into which module slows down your boot, list them with:\n$ systemd-analyze blame Just out of curiosity I also used:\n$ sudo systemctl disable NetworkManager-wait-online.service → revert that with:\n$ sudo systemctl enable NetworkManager-wait-online.service Sources #The sources of my research and a more detailed explanation can be found with those links:\nhttps://itsfoss.com/check-boot-time-linux/ https://itsfoss.com/long-shutdown-linux/ Update and Results on my Fedora box #Since I made the switch to Fedora 36 I had to re-do those steps.\nWith default values I got this result for systemd-analyze\n$ systemd-analyze Startup finished in 7.754s (firmware) + 5.988s (loader) + 1.140s (kernel) + 13.027s (initrd) + 1min 21.493s (userspace) = 1min 49.403s graphical.target reached after 1min 21.462s in userspace Without userspace: 27.9090s\nAnd with the changes above I get this\n$ systemd-analyze Startup finished in 10.151s (firmware) + 2.368s (loader) + 1.128s (kernel) + 10.509s (initrd) + 8.480s (userspace) = 32.639s graphical.target reached after 8.450s in userspace Without userspace: 24.1560s\n","date":"26 June 2022","permalink":"/posts/2022/23-systemd-slow-reboot-and-shutdown-fixed/","section":"Blog","summary":"I\u0026rsquo;m not so into systemd systems and ever avoided systemd whenever possible, but nowadays systems without systemd are very rare. So I\u0026rsquo;m learning my lessons slowly and with some memory protection (e.g. this article). Sorry, this article is not very well formatted\u0026hellip;","title":"Systemd: slow reboot and shutdown fixed","updated":"29 September 2024"},{"content":"I leave the BNC adapter on because I usually only have BNC connectors on my portable rigs and antennas.\nThis is the analyzer that is in the same bag as the TX-500.\nFirmware update #Get latest firmware from https://github.com/DiSlord/NanoVNA-D.\nSet device into DFU mode and flash firmware. Reset when finished.\n$ dfu-util -d 0483:df11 -a 0 -s 0x08000000:leave -D Downloads/NanoVNA.H.v1.2.46.bin dfu-util 0.11 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2021 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ dfu-util: Warning: Invalid DFU suffix signature dfu-util: A valid DFU suffix will be required in a future dfu-util release Opening DFU capable USB device... Device ID 0483:df11 Device DFU version 011a Claiming USB DFU Interface... Setting Alternate Interface #0 ... Determining device status... DFU state(10) = dfuERROR, status(10) = Device\u0026#39;s firmware is corrupt. It cannot return to run-time (non-DFU) operations Clearing status Determining device status... DFU state(2) = dfuIDLE, status(0) = No error condition is present DFU mode device DFU version 011a Device returned transfer size 2048 DfuSe interface name: \u0026#34;Internal Flash \u0026#34; Downloading element to address = 0x08000000, size = 95528 Erase [=========================] 100% 95528 bytes Erase done. Download [=========================] 100% 95528 bytes Download done. File downloaded successfully Submitting leave request... Transitioning to dfuMANIFEST state ","date":"16 May 2022","permalink":"/equipment/radio-stuff/accessories/nanovna-h/","section":"Equipment","summary":"The compact and trusty NanoVNA-H. Small and efficient.","title":"NanoVNA-H","updated":"14 February 2026"},{"content":"Update on 16th July 2023 # Okay, just for your information. I no longer use Redhat on my servers and the following mentioned weewx-extension does no longer work, because Netatmo has changed their authentication policy for development apps and do not allow simple password authentications any more. That means we have to update the extension to a fork that is recently updated.\nThere are two Follow-up posts to this article that show the migration to an OpenBSD server as well as the replacement of the netatmo weewx-extension.\nMoving WeeWX to OpenBSD Update WeeWX extension I recommend reading the last one to get a working setup. If you want to have a nice status message on APRS I also recommend reading the first one too, because it includes a little script to accomplish that with python.\nPreparation # As I\u0026rsquo;m using a redhat based distribution I installed WeeWX with some help of https://weewx.com/docs/redhat.htm. You may also need an account on https://dev.netatmo.com/ for this to work. There you get your client ID and client secret tokens that you will later need to reconfigure WeeWX to make use of the netatmo driver extension.\nAlso note, that most commands (if not all) here have to be run as the root user. First of all, install epel-release so you can install python3-cheetah finally.\n# yum install epel-release # yum install python3-cheetah Continue with adding the repository of WeeWX to your system and install WeeWX.\n# rpm --import https://weewx.com/keys.html # curl -s https://weewx.com/yum/weewx-el8.repo | tee /etc/yum.repos.d/weewx.repo # dnf install weewx Look out for /var/log/messages in order to see if WeeWX is already running (Abort with Ctrl+C).\n# tail -f /var/log/messages Configuration of WeeWX #Stop WeeWX and remove the database for now.\n# /etc/init.d/weewx stop # rm /var/lib/weewx/weewx.sdb Installation of netatmo driver #There are more extensions for Netatmo out there, the original extension is the one from matthewwall \u0026ndash; but this won\u0026rsquo;t work with WeeWX 4.x and up.\nSo I had to find another one, which I did. It\u0026rsquo;s from bricebou, who made a fork of the original to be compatible with Python 3 (I think that is required now by WeeWX 4.x).\n# wget -O weewx-netatmo.zip https://github.com/bricebou/weewx-netatmo/archive/master.zip # wee_extension --install weewx-netatmo.zip # wee_config --reconfigure Have a look at the file /etc/weewx/weewx.conf because it sometimes happens, that the configuration is not properly written.\nStarting WeeWX again #You can also use systemctl start weewx instead.\n# /etc/init.d/weewx start Localisation #The setup is done, although if you like your pages with another locale you may want to alter the file /usr/share/weewx/user/extensions.py.\n# file: \u0026#34;/usr/share/weewx/user/extensions.py\u0026#34; # # Copyright (c) 2009-2015 Tom Keffer \u0026lt;tkeffer@gmail.com\u0026gt; # # See the file LICENSE.txt for your full rights. # \u0026#34;\u0026#34;\u0026#34;User extensions module This module is imported from the main executable, so anything put here will be executed before anything else happens. This makes it a good place to put user extensions. \u0026#34;\u0026#34;\u0026#34; import locale # This will use the locale specified by the environment variable \u0026#39;LANG\u0026#39; # Other options are possible. See: # http://docs.python.org/2/library/locale.html#locale.setlocale locale.setlocale(locale.LC_ALL, \u0026#39;de_AT.UTF-8\u0026#39;) Pushing weather data to APRS-IS #Make sure you get a similar entry in your /etc/weewx/weewx.conf file:\n# file: \u0026#34;/etc/weewx/weewx.conf\u0026#34; ... [StdRESTful] [[CWOP]] enable = true station = \u0026#34;n0call-13\u0026#34; passcode = \u0026#34;your_aprs-fi_passcode\u0026#34; post_interval = 300 ... Now, you could also join CWOP over here: http://www.findu.com/citizenweather/signup.html. I don\u0026rsquo;t remember correctly, but I don\u0026rsquo;t think you\u0026rsquo;ll need that to just transport your weather data into https://apsr.fi/.\nGoing further # Advanced computer skills may be required for this. You may end up editing some python scripts to finally get what you want. But if you want to learn something new, your weather page may benefit from that. You may also want to inspect the installed skins (templates) which reside in /etc/weewx/skins \u0026ndash; adopt them to your needs and enable some more reports in [StdReport] like [[SeasonsReport]]. Adopt everything and make sure to read throughout the documentation \u0026ndash; that helped me a lot.\nWhen I got my virtual server to host WeeWX I also ended up installing nginx on it and I finally configured it to present the weather pages (SeasonsReports) from WeeWX.\n→ https://wx.oe7drt.com\nThe link is also on the bottom of every page aswell and the website looks something like this:\nUpdate on December 25, 2022 #My station runs for a while now and I wasn\u0026rsquo;t sure if I continue using Netatmo for my weather station, but since the stations works quite well I bought a rain and wind sensor the recent days. The first test run went good and it was easy to implement the new devices.\nBut there are a few notes to remember. As there are more than one point, I\u0026rsquo;ll put them down into separate headings.\nChange the comment visible on the aprs.fi website #If you want to change the comment that is visible on aprs.fi you have to change the source of a python file within the WeeWX package. As I upgraded WeeWX when I installed the new devices that file got overwritten and it took me (again) a few moments to find the right place again. Now, for the future: the file I talk about is /usr/share/weewx/weewx/restx.py and you may look somewhere near the line 1285. I show you an excerpt of my current (already modified) file:\n1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 else: _radiation_str = \u0026#34;\u0026#34; # Station equipment #_equipment_str = \u0026#34;.weewx-%s-%s\u0026#34; % (weewx.__version__, self.station_type) _equipment_str = \u0026#34;https://wx.oe7drt.com/\u0026#34; _tnc_packet = \u0026#39;\u0026#39;.join([_prefix, _time_str, _latlon_str, _wt_str, _rain_str, _baro_str, _humid_str, _radiation_str, _equipment_str, \u0026#34;\\r\\n\u0026#34;]) # show the packet in the logs for debug if weewx.debug \u0026gt;= 2: log.debug(\u0026#34;CWOP: packet: \u0026#39;%s\u0026#39;\u0026#34;, _tnc_packet.rstrip(\u0026#39;\\r\\n\u0026#39;)) return _tnc_packet Line 5 and 6 (highlighted) shows the old and new line. Should work fine.\nInstall a new (and more modern) theme #That actually looks like a modern website. Although, I had to re-create some entries for the sensor-images. As this sucks pain, I\u0026rsquo;ll leave it with only having 1-day images. They are quite useless, but I may find another day. Or not, we will see\u0026hellip;\nThe name of the skin is NeoWX Material and I like it very much. Another nice skin would be Rabenwetter that you might have a look on too.\nBut back to business 😁\nThe installation is very easy:\ndownload\nhttps://neoground.com/projects/neowx-material#section-download\ninstall\n# wee_extension --install=neowx-material.zip restart\n# systemctl restart weewx I usually don\u0026rsquo;t give this hint: note the # at the beginning of these command lines. That means to run those commands as root.\nRead the docs and you should be good to go.\nI did already had the python3-ephem package installed, I used the Almanac pages already in the older (default) Seasons skin.\n# dnf install python3-ephem The new theme looks like this:\nSome other thoughs #I never got the correct information working on the CWOP information page but I\u0026rsquo;ve seen this page showing the correct information now. Also the map is now filled with weather stations around my area (this has always been a place in the US that I wasn\u0026rsquo;t able to change).\n","date":"8 January 2022","permalink":"/posts/2022/22-my-weather-station-with-weewx-and-netatmo/","section":"Blog","summary":"Describing my approach to properly install WeeWX on a virtual server which creates the \u003ca href=\"https://wx.oe7drt.com/\" target=\"_blank\" rel=\"noreferrer\"\u003eweather page\u003c/a\u003e and also uploads my weather data to the \u003ca href=\"http://www.aprs-is.net/\" target=\"_blank\" rel=\"noreferrer\"\u003eAPRS-IS network\u003c/a\u003e.","title":"My weather station with WeeWX and Netatmo","updated":"3 February 2026"},{"content":"This post indicates the introduction of Jekyll in my workflow \u0026ndash; regarding my website-publication-workflow.\nI used Jekyll already before I used Hugo, but these days I think the website is better built on top of a powerful theme. Hydejack is its name, for those that are more interested in it.\nMy last post was on October 26, 2021 and the migration of the old posts took about 2 months; eating up most of my time (well, I had other things to do aswell).\n","date":"6 January 2022","permalink":"/posts/2022/21-site-updates/","section":"Blog","summary":"\u003cp\u003eThis post indicates the introduction of Jekyll in my workflow \u0026ndash; regarding my\nwebsite-publication-workflow.\u003c/p\u003e","title":"The new site layout and theme","updated":"28 September 2024"},{"content":"This is actually my number one handheld radio. I find it very intuitive to use and also the audio is quite good and the speaker is also one of the louder ones. I haven\u0026rsquo;t much used this on digital yet but I heard people saying it to be ok on digital mode (D-STAR).\nEasy to use T-CALL and SQL #T-CALL #Right away: there are two ways to open a repeater with a 1750Hz tone.\nPush PTT like you would perform a double-click with your computer mouse and hold PTT on the second \u0026ldquo;click\u0026rdquo;. Open MENU \u0026raquo; SET \u0026raquo; DTMF/T-CALL \u0026raquo; DTMF Memory and select T-CALL with OK key. Go back to standby screen and press PTT. Now additionally press the SQL button. SQL #In standby screen this button is momentary to open the squelch on the currently used frequency (simplex). If an offset is set, it will open the squelch on the transmitting frequency (so you might hear the other OM directly).\nPress SQL and move the main dial for one click, the actual squelch setting appears on the bottom of the screen (default: AUTO).\nTurn the dial further left to open up the squelch permanently \u0026ndash; you can release the SQL button in this case. Turn the dial further right and you can choose a squelch level (1 to 9) Repeater list #I really like the repeater list, although it is not very accurate when you first download the list from the internet. But once you filled it with actual repeater data (including location data) the scan function will definitely profit from this \u0026ndash; it should re-arrange the scan list for you while you\u0026rsquo;re moving.\nI\u0026rsquo;m still working on that one; this takes time (a lot of time) sitting on the computer and updating a nearly never ending list of false information HI.\nRecordings #Memo recorder #Goto MENU \u0026raquo; RECORD \u0026raquo; Voice Recorder \u0026raquo; Record and hit PTT to start the recording. Press PTT again to stop. You can fill this with memos or conversations (just let people know when you record them!). Change the Mic Gain with the Quick button. Find the recorded files on the SD-card in ID-52 \u0026raquo; VoiceRec.\nQSO Recorder #This lets you automatically record QSOs as they come in. Per default settings the record gets already started when you press PTT. In settings you choose to split files on mic change or not. Splitting files will add metadata to the files so you can re-view them (like GPS data, frequency, signal strength) on the radio. You can also download those files to your computer, find them on the SD-card in ID-52 \u0026raquo; Voice.\nQSO Logger #Similar to the one above, this records your QSO into a csv file. You find this data on the SD-card. Specifically in ID-52 \u0026raquo; QsoLog. Open them with your favourite text editor or any spreadsheet program. I got an example for this one right here:\nRx Logger #This is quite the same as the Qso Logger, but I think this only logs received calls from D-STAR. You find those files on the SD-card within the folder ID-52 \u0026raquo; RxLog.\nVoice Tx #Files for this will be in ID-52 \u0026raquo; VoiceTx on the SD-card. Set this up in MENU \u0026raquo; VOICE. That can be used for automated CQ-calls or similar. I haven\u0026rsquo;t used this yet.\nDV Auto Reply #This should send your recorded clip automatically on incoming calls. Also this is something that I haven\u0026rsquo;t used yet, but to make the list complete, you know. I have no idea where this is going to be saved.\nSending and receiving pictures #The Icom ID-52 lets you receive and transmit pictures either on direct frequencies or on reflectors (both need to be digital, just to mention that). I also haven\u0026rsquo;t used this either for now.\nI occasionally receive pictures that others send while they are transmitting normal voice, view those pictures in Pictures → the picture screen opens and displays the received (and transmitting) picture on the bottom. Select RX and hit Enter to view the last 50 received pictures in the history. Hit Enter again to view details about the selected image (like sender and receiver information, time and date as well as some basic info about the picture itself).\nPower output # Power output diagrams I\u0026rsquo;ve found out how to measure more than 4 traces at once (hint: disable TRACKING in the Marker options)\nThe measured output power around 144.500 MHz and 433.500 MHz are:\nPower setting Output power 2m Output power 70cm S-Low 107 mW 99 mW Low1 539 mW 443 mW Low2 1.09 W 783 mW Mid 2.45 W 2.21 W High 6.26 W 4.94 W Harmonics #Only measured on the 2m band.\nI could not see any harmonics at 145.550 MHz.\nFor people that cannot read the small fonts properly: the graph goes up to 3 GHz. ","date":"10 December 2021","permalink":"/equipment/radio-stuff/handhelds/icom-id52/","section":"Equipment","summary":"A really awesome handheld radio \u0026ndash; and it does D-STAR as a bonus. Check it out \u0026ndash; it\u0026rsquo;s cool!","title":"Icom ID-52","updated":"29 September 2024"},{"content":"Another quick one: I forget this command on a permanent basis, so I write this down here \u0026ndash; maybe this helps.\n$ lsof +f -- /media/mountpoint Update on 2021-11-21 #You could also use fuser. I prefer this one because somehow I cannot use autocompletion with lsof and fuser lets me complete the paths.\n$ fuser -vm /media/mountpoint ","date":"26 October 2021","permalink":"/posts/2021/20-processes-accessing-mountpoints/","section":"Blog","summary":"A quick oneliner to list running processes that prevent a filesystem from being unmounted. Using \u003ccode\u003elsof\u003c/code\u003e or \u003ccode\u003efuser\u003c/code\u003e for this.","title":"Show processes that block umount","updated":"29 September 2024"},{"content":"This article is about using VARA FM and/or VARA HF on a linux laptop \u0026ndash; or computer.\nQuick and dirty #$ sudo apt-get install wine-stable winetricks exe-thumbnailer $ export WINEPREFIX=/home/dominic/.wine-winlink $ export WINEARCH=win32 $ winetricks winxp $ winetricks sound=alsa $ winetricks -q dotnet35sp1 $ winetricks vb6run $ winetricks vcrun2015 ## now, as an update when my already working winlink express installation ## failed, i had to install also the following dotnet applications with winetricks $ winetricks -q dotnet40 $ winetricks -q dotnet46 ## Optional, if you want backups $ tar -cJf wine-backup_$(date +%Y-%m-%d-%H-%M-%S)_initial-setup.tar.xz .wine-winlink $ wine Downloads/Winlink_Express_install.exe ## Optional, if you want backups after you installed Winlink $ tar -cJf wine-backup_$(date +%Y-%m-%d-%H-%M-%S)_winlink-installed.tar.xz .wine-winlink $ wine Downloads/VARA\\ setup\\ \\(Run\\ as\\ Administrator\\).exe $ wine Downloads/VARA\\ FM\\ setup\\ \\(Run\\ as\\ Administrator\\).exe ## Optional, if you want backups, after you installed Winlink and VARA $ tar -cJf wine-backup_$(date +%Y-%m-%d-%H-%M-%S)_vara-installed.tar.xz .wine-winlink If your VARA window is empty after it gets started from Winlink, just minimize it and restore it and you should see it\u0026rsquo;s content again.\nResources #This article is practically based on the instructions found over at http://k6eta.com/linux/installing-rms-express-on-linux-with-wine.\nThe following files have been re-uploaded on my website to create a duplicate resource for download, but primarily to prevent them from going offline in the case the resource goes down for whatever reason.\nI do not claim them to be my creation, I just want them to be online on a place that I find again. VARA_components.zip pdh.dll.zip Visit the website k6eta.com above if you want to know more details about Winlink on Linux.\nThanks to Steven K6ETA for his excellent explanations on his website, so I could narrow this down to the quick copy-and-paste-box above.\n","date":"3 October 2021","permalink":"/posts/2021/18-winlink-and-vara-on-linux/","section":"Blog","summary":"A quick and dirty summary of my Winlink installation on my linux laptop.","title":"Running Winlink and VARA on Linux","updated":"29 September 2024"},{"content":"I\u0026rsquo;ve done a simple comparison back in April and never pushed this to the website. Now I think I won\u0026rsquo;t write much about it, but I don\u0026rsquo;t want to loose those results either.\nThe two don\u0026rsquo;t work the same, the files were different in terms of sorting.\nJohn # https://www.openwall.com/john/ $ john --mask=\u0026#39;05253?d?d?d?d?d\u0026#39; --min-length=9 --max-length=10 --stdout \u0026gt; john_file ________________________________________________________ Executed in 261,54 millis fish external usr time 96,01 millis 11,00 micros 96,00 millis sys time 38,02 millis 993,00 micros 37,03 millis Maskprocessor # https://github.com/hashcat/maskprocessor $ mp -i 9:10 \u0026#39;05253?d?d?d?d?d\u0026#39; -o mp_file ________________________________________________________ Executed in 6,72 millis fish external usr time 2,19 millis 314,00 micros 1,88 millis sys time 2,86 millis 54,00 micros 2,81 millis Tests were made with fish \u0026gt;\u0026lt;(((°\u0026gt;.\n","date":"3 October 2021","permalink":"/posts/2021/19-wordlist-generation/","section":"Blog","summary":"Just for the record. These results may not mean anything\u0026hellip;","title":"Wordlist Generation","updated":"29 September 2024"},{"content":"We need to talk again (an Update) # This is an update, the post was originally published on August 12th, 2021. Most of the content has changed. So in this update I would like to re-phrase and/or re-arrange this article to become something like a tutorial. I was thinking about making N1MM Logger+ my main logging application, but I\u0026rsquo;ll stick with CQRLOG for now.\nBut I still want a nice howto on how to install this tool on a linux computer. There we are and we should go right into this!\nSome other articles that I researched and they might be interesting to you too:\nhttps://www.scivision.dev/n1mm-logger-linux-wine/ (2020-05-31) https://www.n0nb.us/blog/2018/12/running-n1mm-logger-with-wine-on-debian-buster/ (2018-12-03) https://www.nf8m.com/nf8m/n1mm-on-linux/ (2018-07-25) Let\u0026rsquo;s install N1MM Logger+ #on Manjaro Linux in a 32bit environment (wine).\nCreate a 32bit wine prefix (in winecfg: select Windows 7):\n$ env WINEPREFIX=/home/dominic/.wine-n1mm WINEARCH=win32 wine wineboot $ env WINEPREFIX=/home/dominic/.wine-n1mm WINEARCH=win32 wine winecfg So there is a ~500MB windows in my home folder, I will back this fragile directory up into an archive:\n$ tar -cJf wine-backup-n1mm-$(date +%Y-%m-%d-%H%M%S).tar.xz .wine-n1mm/ Next on the list: .Net Framework 4.6:\n$ env WINEPREFIX=/home/dominic/.wine-n1mm winetricks --force Choose Select default wine prefix, choose Install Windows-DLL, select dotnet46 and hit OK\nThis brings up a few error messages \u0026ndash; confirm them and move on. In the end we should see the .NET Framework 4.0 installation tool.\nOnce the installation is finished, close the window and the installation of version 4.5 should start. After that select Restart Later and the installation of version 4.6 should start too.\nSelect Restart Later again and you\u0026rsquo;re done with .NET.\nIf you like, you could just create another windows-backup archive in case something goes wrong at the next installations. It\u0026rsquo;s the same command as before, as it would create a timestamped filename anyway. My wine prefix .wine-n1mm now is ~1.2GB big.\n$ tar -cJf wine-backup-n1mm-$(date +%Y-%m-%d-%H%M%S).tar.xz .wine-n1mm/ This time it took about three times longer than the first time, FYI.\nNow just download and run the Full-Installer and the Update-Installer files.\nhttps://n1mmwp.hamdocs.com/ Navigate to DOWNLOADS \u0026raquo; PROGRAM FILES \u0026raquo; FULL INSTALL\nLike above, but navigate to DOWNLOADS \u0026raquo; PROGRAM FILES \u0026raquo; LATEST UPDATE FILES\nAfter moving into the directory where our installation files reside, we tell wine to start the installers:\n$ cd Downloads/ $ env WINEPREFIX=/home/dominic/.wine-n1mm wine N1MM-Logger-FullInstaller-1.0.8954.exe Unselect Finish and restart... and close the installer.\n$ env WINEPREFIX=/home/dominic/.wine-n1mm wine N1MM-Logger-Update-1.0.9243.exe Unselect Run N1MM Logger+... and close the installer.\nPlease not that those are examples, you need to start the files that you downloaded \u0026ndash; they might differ in their version numbers. Also the declaration of the environment variable is used with the fish shell, for bash (maybe the default shell on most linuxes) you would just omit the env at the beginning. Make sure to substitute the versions with what you have downloaded \u0026ndash; you can find these files here:\nFull Install Latest update You should now have new desktop icons and/or new menue entries (depends on your desktop environment).\nYou can start the program with these icons or by hand. If you want to start them by hand from a terminal, you should prepend your command with the wine prefix that you installed it.\nYou\u0026rsquo;ll figure that out, the content of one of these desktop icons is:\n[Desktop Entry] Name=N1MM Logger+ Exec=env WINEPREFIX=\u0026#34;/home/dominic/.wine-n1mm\u0026#34; wine C:\\\\\\\\windows\\\\\\\\command\\\\\\\\start.exe /Unix /home/dominic/.wine-n1mm/dosdevices/c:/users/Public/Desktop/N1MM\\\\ Logger+.lnk Type=Application StartupNotify=true Path=/home/dominic/.wine-n1mm/dosdevices/c:/Program Files/N1MM Logger+/SkinsAndLayouts Icon=88F7_N1MMLogger.net.0 StartupWMClass=n1mmlogger.net.exe This would probably do the same:\n$ env WINEPREFIX=/home/dominic/.wine-n1mm wine .wine-n1mm/drive_c/Program\\ Files/N1MM\\ Logger+/N1MMLogger.net.exe You can click the big error message away, afterwards you get informed that AutoHotkey is not installed. Click that away too and you\u0026rsquo;re done for now. Setup your station details and move on with using N1MM Logger+ on linux.\nThere might be still bugs as those error messages at the installation of the .NET Framework didn\u0026rsquo;t came from nothing \u0026ndash; for what I\u0026rsquo;ve seen so far the menues are a bit tricky to handle as they tend to disappear when hovering with the mouse. This might need a few tries to actually open the settings dialog for example. Finally, there is a good result I think:\nHopefully this article was helpful to somebody, as I have been sitting here now for a while doing all the exact steps from above to verify its validity \u0026ndash; the reason for that was actually because I\u0026rsquo;ve seen that this specific article got read quite a few times and I personally found it a bit confusing myself 😉\nvy 73 de Dominic, OE7DRT (going to bed now)\nAnother update (Installation on Ubuntu 20.04) #I recently switched my laptop from Manjaro Linux back to Tuxedos version of Kubuntu. So let\u0026rsquo;s have a quick look at what I did in this newly created 32bit windows environment.\n$ sudo apt-get install wine-stable $ sudo apt-get install winetricks $ sudo apt-get install exe-thumbnailer $ export WINEPREFIX=/home/dominic/.wine-n1mm $ export WINEARCH=win32 $ winetricks winxp $ winetricks sound=alsa $ winetricks -q dotnet46 $ winetricks win7 # Because N1MM Logger+ does not like WinXP, I thought that would be a nice idea to switch over to Windows 7 $ wine Downloads/N1MM-Logger-FullInstaller-1.0.8954.exe $ wine Downloads/N1MM-Logger-Update-1.0.9275.exe Start N1MM Logger+ from within your Application menue. There should be a new folder called\nWine \u0026raquo; Programs \u0026raquo; N1MM Logger+\n","date":"12 August 2021","permalink":"/posts/2021/17-running-n1mm-logger-on-linux/","section":"Blog","summary":"This is my attempt to properly install N1MM Logger+ on my main computer running Manjaro/Ubuntu Linux.","title":"Running N1MM Logger+ on Linux","updated":"11 February 2025"},{"content":"","date":null,"permalink":"/tags/grub/","section":"Tags","summary":"","title":"Grub","updated":null},{"content":"Short and concise. I had to deal with a broken Grub 2 configuration recently and I always had to boot the windows partition from within the BIOS because Grub wasn\u0026rsquo;t able to boot it right away.\nBut I researched a bit again and found this:\nhttps://www.aioboot.com/en/boot-windows-grub2/#UEFI\nI tried this and was instantly happy again because my computer was able to start into Windows 10 again (without the need of telling the BIOS to start from a specific disk).\nMy laptop runs Arcolinux, so to configure Grub I had to find the specific files. It is /etc/grub.d/proxifiedScripts/custom \u0026ndash; which could be also configured in the app grub-customizer (I found that out when I already modified the file).\nNot sure what script would load the script when updating the grub configuration in /boot I applied the configuration within grub-customizer and restartet the computer.\nThe plain file in /etc/grub.d/proxifiedScripts/ looks like this:\n# file: \u0026#34;/etc/grub.d/proxifiedScripts/custom\u0026#34; #!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the \u0026#39;exec tail\u0026#39; line above. menuentry \u0026#34;Windows 10\u0026#34;{ search -s root -f /EFI/Microsoft/Boot/BCD chainloader /EFI/Microsoft/Boot/bootmgfw.efi boot } menuentry \u0026#34;Reboot\u0026#34;{ reboot } And/Or if you just want to use grub-customizer: go ahead, create the menu entry and insert the part from above (Windows 10).\nGrub-customizer Save and apply the new configuration, reboot and enjoy the comfort.\n","date":"8 August 2021","permalink":"/posts/2021/16-win10-grub2-and-uefi/","section":"Blog","summary":"I finally got my broken Grub configuration fixed. Booting Windows from Grub wasn\u0026rsquo;t very hard back in the days, but the old \u0026ldquo;version\u0026rdquo; doesn\u0026rsquo;t work with the newer \u003cstrong\u003eUEFI\u003c/strong\u003e-typed computers. Now\u0026hellip; looking at it\u0026hellip; it does not look very complicated either ;-)","title":"Win10, Grub 2 and UEFI","updated":"29 September 2024"},{"content":"While I almost had a nervous meltdown in the beginning with this device, it now runs most of my rendering tasks (headless because I removed the screen after I broke it).\nI haven\u0026rsquo;t found a way to change some things within the BIOS/UEFI because I don\u0026rsquo;t have a working screen setup to catch the boot sequence \u0026ndash; any hints on that are well appreciated.\nI was running a few virtual machines on this devices without much problems, the Ryzen 7 is a real powerhorse and paired with 64GB of RAM it was nearly unstoppable.\nWell, the graphics card is a bit outdated as of today in December 2025 but hey, the rendering of videos (converting to H264, adding audio streams, extracting and converting streams, \u0026hellip;) still works fine.\nI also played some video games on this machine \u0026ndash; it worked okay\u0026rsquo;isch on recent games like FarCry 5 and 6 or Way of the Hunter. It struggled with Assassins Creed: Valhalla (unplayable, even on low settings).\n","date":"30 April 2021","permalink":"/equipment/laptops/tuxedo-polaris-17/","section":"Equipment","summary":"While the Polaris 17 in its first generation was a bit of a frustrating experience, actual devices may not be that bad.","title":"Tuxedo Polaris 17 Gen1","updated":"16 January 2026"},{"content":"I can not remember when I bought this radio because I lost my documents somwhere and the company where I ordered it does not have these records any more due to a system re-configuration 😞\nThis radio delivers up to 8W (it is advertised as a 10W radio but I never measured more than 8W - yes, on VHF).\nAs most radios were designed to be left alone somewhere at a desk or shelf this one has been chosen to be my so called \u0026ldquo;winlink radio\u0026rdquo; \u0026ndash; at least for VHF/UHF frequencies.\nThe special use case for it is in the car primarily \u0026ndash; the next RMS packet station is approx. 27km north/north-east of my home QTH (with some mountains in between) \u0026ndash; it works well with the Digirig when using packet radio and VARA-FM; and with the Mobilinkd TNC4.\n","date":"15 March 2021","permalink":"/equipment/radio-stuff/handhelds/wouxun-uv9d-mate/","section":"Equipment","summary":"This is the radio of choice when I do some Winlinking (HI) via packet radio or VARA FM.","title":"Wouxun UV9D Mate","updated":"29 September 2024"},{"content":"For me, git repositories are a complex thing. As I wrote in an earlier article I can keep my local repository up-to-date to the original one and simply manage my changes to a github repository saved in my github account. So I can distribute my changes on many computers at home.\nBut all these changes make the structure of the git commit history more complex. I thought I could shrink my own commits down to a minimum and just summarize them into one single commit on the top of the commit history in my github repository.\nTime will tell, if this is a good approach\u0026hellip;\nI am no expert and this article helps me remembering this scenario with multiple repositories and their commit history. The logic behind this might not be correct, so if you have a better solution for this specific scenario, please let me know. I\u0026rsquo;m all up to learn this stuff the right way. If you have commits in your history #Let\u0026rsquo;s take my prezto repository and add the upstream repository to it.\n$ git log commit d321120fdebb84c7dc282a05eaaa57fdaf56987b (HEAD -\u0026gt; master) Author: Dominic Reich \u0026lt;dominic\u0026gt; Date: Mon Dec 21 10:33:44 2020 +0100 remove dot-expansion as this is also done when doing multiline-commands like doing git commit with single quotes and making line brakes (like this git commit here../..) commit aa85e03e8aced6832a77307c77aa77ce34dc462e Author: Dominic Reich \u0026lt;dominic\u0026gt; Date: Mon Dec 7 07:15:45 2020 +0100 adds aliases on darwin; fix ostype for raspberry pi commit 63569c97a25c3910dfb1dad5a0e170850c5b4b67 Author: Dominic Reich \u0026lt;dominic\u0026gt; Date: Sun Nov 29 20:41:37 2020 +0100 adds zaliases commit 3877758908c60e24d4dce093ff8570135b7dfb19 Author: Dominic Reich \u0026lt;dominic\u0026gt; Date: Sat Nov 28 19:26:00 2020 +0100 personalized commit b7a80d99a84e718f30a076b27b090d3e998ad135 (upstream/master, origin/master, origin/HEAD) Author: Roman Perepelitsa \u0026lt;roman.perepelitsa\u0026gt; Date: Fri Dec 18 16:38:31 2020 +0100 prompt: update powerlevel10k submodule to v1.14.4 Release notes: [...] In this example I already have a commit that changes something. And a few commits later the changes will be reverted again because that did not work out so well.\nThis is why we will extract those last commits into a patchfile and re-apply the file in one single run after we updated our local repository to the state of the upstream repository. We will also force the github repository (origin) to the same state as our upstream repository, so we will end up having only one commit on top of the history on github.\nNow, create our patchfile.\n$ git format-patch -5 HEAD \u0026gt; ../changes.patch This saves the recent 5 commits from HEAD into ../changes.patch, which file is not in the git repository, but one directory above.\nWe continue using the master branch and getting upstream/master.\n$ git checkout master Bereits auf \u0026#39;master\u0026#39; Ihr Branch ist auf demselben Stand wie \u0026#39;origin/master\u0026#39;. $ git pull upstream master Warning: Permanently added \u0026#39;github.com,140.82.121.4\u0026#39; (RSA) to the list of known hosts. Von github.com:sorin-ionescu/prezto * branch master -\u0026gt; FETCH_HEAD Bereits aktuell. $ git reset --hard upstream/master HEAD ist jetzt bei b7a80d9 prompt: update powerlevel10k submodule to v1.14.4 $ git push origin master --force Now we have our local master branch set equal to the master branch on the remote upstream repository. We now add our changes into the repository, our patchfile.\n$ patch -p1 \u0026lt; ../changes.patch patching file runcoms/zlogout patching file runcoms/zpreztorc patching file runcoms/zprofile patching file runcoms/zshrc patching file runcoms/zaliases patching file runcoms/zaliases patching file runcoms/zpreztorc patching file runcoms/zaliases patching file runcoms/zshenv This leaves us again with many changes, but we can add them to git all together as one single commit if we like.\nRun git diff to view the changes on the files.\nMake your changes now and create a new commit.\n$ git add . $ gcm \u0026#39;personalized\u0026#39; [master 3d19001] personalized 6 files changed, 195 insertions(+), 26 deletions(-) create mode 100644 runcoms/zaliases rewrite runcoms/zlogout (68%) $ git push origin Warning: Permanently added \u0026#39;github.com,140.82.121.4\u0026#39; (RSA) to the list of known hosts. Objekte aufzählen: 16, Fertig. Zähle Objekte: 100% (16/16), Fertig. Delta-Kompression verwendet bis zu 8 Threads. Komprimiere Objekte: 100% (9/9), Fertig. Schreibe Objekte: 100% (9/9), 3.94 KiB | 3.94 MiB/s, Fertig. Gesamt 9 (Delta 5), Wiederverwendet 0 (Delta 0), Pack wiederverwendet 0 remote: Resolving deltas: 100% (5/5), completed with 5 local objects. To github.com:oe7drt/prezto.git b7a80d9..3d19001 master -\u0026gt; master The history now looks like this:\n$ git log commit 3d19001518997c29204457fe2d1119fc9830010c (HEAD -\u0026gt; master, origin/master, origin/HEAD) Author: Dominic Reich \u0026lt;dominic\u0026gt; Date: Mon Dec 21 12:08:25 2020 +0100 personalized commit b7a80d99a84e718f30a076b27b090d3e998ad135 (upstream/master) Author: Roman Perepelitsa \u0026lt;roman.perepelitsa\u0026gt; Date: Fri Dec 18 16:38:31 2020 +0100 prompt: update powerlevel10k submodule to v1.14.4 Release notes: [...] Approach #2: reset to upstream branch #$ git checkout main Bereits auf \u0026#39;main\u0026#39; Ihr Branch ist auf demselben Stand wie \u0026#39;origin/main\u0026#39;. $ git reset upstream/main Nicht zum Commit vorgemerkte Änderungen nach Zurücksetzung: M html/js/config.js M logtailer.ini $ git diff \u0026gt; ../changes.patch $ git reset --hard upstream/main HEAD ist jetzt bei ea48f75 Added Key Features in Readme.md $ git push origin main --force Gesamt 0 (Delta 0), Wiederverwendet 0 (Delta 0) To github.com:oe7drt/MMDVMHost-Websocketboard.git + b06f675...ea48f75 main -\u0026gt; main (forced update) $ patch -p1 \u0026lt; ../changes.patch patching file html/js/config.js patching file logtailer.ini $ git add . $ git commit -m \u0026#39;personalize\u0026#39; [main 4789400] personalize 2 files changed, 7 insertions(+), 6 deletions(-) $ git push Warning: Permanently added \u0026#39;github.com,140.82.121.3\u0026#39; (RSA) to the list of known hosts. Objekte aufzählen: 11, Fertig. Zähle Objekte: 100% (11/11), Fertig. Delta-Kompression verwendet bis zu 4 Threads. Komprimiere Objekte: 100% (6/6), Fertig. Schreibe Objekte: 100% (6/6), 1.26 KiB | 646.00 KiB/s, Fertig. Gesamt 6 (Delta 3), Wiederverwendet 0 (Delta 0) remote: Resolving deltas: 100% (3/3), completed with 3 local objects. To github.com:oe7drt/MMDVMHost-Websocketboard.git ea48f75..ba62875 main -\u0026gt; main You now have the history of your upstream repository and only one commit on top of the history.\nPS: I\u0026rsquo;ve removed the full email addresses on git log outputs.\n","date":"21 December 2020","permalink":"/posts/2020/15-forking-git-repositories/","section":"Blog","summary":"So this is working for me now. Keeping up-to-date with my upstream github repository.","title":"Forking GIT-repositories","updated":"3 February 2026"},{"content":"Okay, a quick one. I\u0026rsquo;ve updated my macbook now to Big Sur today. A lot of files have been copied and moved and written and so on \u0026ndash; I think that update was something around 12 GB of files to download\u0026hellip;\nSo my virtual windows machine won\u0026rsquo;t start. With a quick Google search I found some hints, that the kernel drivers will not load or something like that. A few posts below I read something about the System Protection of macOS and read on a bit.\nNow to make things short: I restarted the macbook, went straight into recovery mode and fired up the terminal.\nThe command csrutil status told me, that my system was in an undefined state. I\u0026rsquo;m not sure what I changed here on the last major macOS version but it printed a few changes and something that I did not read completely. I just enabled the protection system as suggested on the forums before and rebootet the system again.\nTo enable Apples protection system, type this command:\n$ csrutil enable After that, type reboot and hit enter.\nThis fixed it for me and I am now able to run my virtual windows machine. But: I still cannot open my NFS shares on my Raspberry Pi yet.\n","date":"22 November 2020","permalink":"/posts/2020/14-virtual-machine-on-big-sur-not-starting/","section":"Blog","summary":"A quick fix if your virtual machine will not start. As long, as you got the same configuration as me","title":"My virtual windows machine from VirtualBox on Big Sur will not start","updated":"29 September 2024"},{"content":"Let\u0026rsquo;s start with the website ham-digital.org. It contains the user database of registered DMR-IDs worldwide.\nUpdate\nWhile these scripts still work, the website ham-digital.org is dead and the european database has been put together on radioid.net. Are you still waiting for your confirmation email? You may look at the registration site, which contains links to the list of open registrations or the list of local administrators.\nOkay, I try to keep this simple. These scripts are made to download an actual snapshot of the DMR-ID database from ham-digital.org. They create a comma-separated list of DMR-IDs and callsigns to import into an amateur radio device. Actually I use them only on my Radioddity GD-77.\nDownload the full database #That fetches the whole database, which are something around 180.000 entries at the moment (2020-Nov-15). The script uses about 8MB of RAM. Something like that.\n#!/usr/bin/env php \u0026lt;?php /* * Save the full database (much big!!) * DMR-IDS-FULL.csv * Dominic, OE7DRT */ $url = \u0026#39;https://ham-digital.org/status/users.csv\u0026#39;; $remote_file = fopen ($url, \u0026#39;r\u0026#39;) or die ($php_errormsg); $filename = \u0026#39;/Users/dominic/DMR-IDS-FULL.csv\u0026#39;; @unlink ($filenme); $local_file = fopen ($filename, \u0026#39;w\u0026#39;) or die ($php_errormsg); fputcsv ($local_file, array (\u0026#39;dmrid\u0026#39;, \u0026#39;callsign\u0026#39;, \u0026#39;name\u0026#39;)); while (!feof ($remote_file)) { $line = fgetss ($remote_file, 64); $elem = explode (\u0026#39;,\u0026#39;, $line, -4); fputcsv ($local_file, $elem); } fclose ($remote_file); fclose ($local_file); ?\u0026gt; Download only a few regions into separate files #Fetch some regions (specified in the script) and some additional callsigns from a file that contains one callsign per line. This script uses a lot more RAM. Something around 32MB I guess. Or so.\n#!/usr/bin/env php \u0026lt;?php /* * Save regions and favourites in separate files * DMR-IDS-$REGION.csv and DMR-IDS-FAV.csv * Dominic, OE7DRT */ $url = \u0026#39;https://ham-digital.org/status/users.csv\u0026#39;; $remote_file = fopen ($url, \u0026#39;r\u0026#39;) or die ($php_errormsg); $mem = array (); while (!feof ($remote_file)) { $line = fgetss ($remote_file, 64); $elem = explode (\u0026#39;,\u0026#39;, $line, -4); array_push($mem, $elem); } $path = \u0026#39;/Users/dominic/\u0026#39;; $fav_filename = \u0026#39;Favorite_Callsigns.txt\u0026#39;; $fav_file = fopen ($path.$fav_filename, \u0026#39;r\u0026#39;) or die($php_errormsg); $fav = array (); while (!feof ($fav_file)) { $line = fgetss ($fav_file, 16); if (!empty ($line)) $fav[] = trim ($line); } fclose ($fav_file); $filename = $path.\u0026#39;DMR-IDS-FAV.csv\u0026#39;; @unlink($filename); $fav_out = fopen ($filename, \u0026#39;w\u0026#39;) or die ($php_errormsg); foreach ($fav as $callsign) { foreach ($mem as $item) { if (preg_match(\u0026#34;/\\b$callsign\\b/i\u0026#34;, $item[1], $m)) { fputcsv ($fav_out, $item); } } } fclose ($fav_out); // $regions = array (\u0026#39;232\u0026#39;, \u0026#39;262\u0026#39;, \u0026#39;263\u0026#39;, \u0026#39;264\u0026#39;, \u0026#39;228\u0026#39;, \u0026#39;222\u0026#39;); // $regions = array (\u0026#39;2327\u0026#39;, \u0026#39;2328\u0026#39;, \u0026#39;2329\u0026#39;); $regions = array (\u0026#39;232\u0026#39;,\u0026#39;262\u0026#39;,\u0026#39;263\u0026#39;,\u0026#39;222\u0026#39;,\u0026#39;228\u0026#39;); foreach ($regions as $region) { $filename = $path.\u0026#39;DMR-IDS-\u0026#39;.$region.\u0026#39;.csv\u0026#39;; @unlink ($filename); $local_file = fopen ($filename, \u0026#39;w\u0026#39;) or die ($php_errormsg); fputcsv ($local_file, array (\u0026#39;dmrid\u0026#39;, \u0026#39;callsign\u0026#39;, \u0026#39;name\u0026#39;)); foreach ($mem as $item) { if (preg_match (\u0026#34;/^$region/\u0026#34;, $item[0], $m)) { fputcsv ($local_file, $item); } } } fclose ($remote_file); fclose ($local_file); ?\u0026gt; Download only a few regions into one single file #Like the one above, but it saves all IDs into one file. Uses probably the same amount of RAM.\n#!/usr/bin/env php \u0026lt;?php /* * Save the regions and favourites in a single file * DMR-IDS-SMALL.csv * Dominic, OE7DRT */ $path = \u0026#39;/Users/dominic/\u0026#39;; $url = \u0026#39;https://ham-digital.org/status/users.csv\u0026#39;; $remote_file = fopen ($url, \u0026#39;r\u0026#39;) or die ($php_errormsg); $mem = array (); while (!feof ($remote_file)) { $line = fgetss ($remote_file, 64); $elem = explode (\u0026#39;,\u0026#39;, $line, -4); array_push($mem, $elem); } fclose ($remote_file); $whitelist_filename = \u0026#39;Favorite_Callsigns.txt\u0026#39;; $whitelist_file = fopen ($path.$whitelist_filename, \u0026#39;r\u0026#39;) or die($php_errormsg); $whitelist_array = array (); while (!feof ($whitelist_file)) { $line = fgetss ($whitelist_file, 16); if (!empty ($line)) $whitelist_array[] = trim ($line); } fclose ($whitelist_file); $filename = \u0026#39;DMR-IDS-SMALL.csv\u0026#39;; @unlink($path.$filename); $file = fopen ($path.$filename, \u0026#39;w\u0026#39;) or die ($php_errormsg); fputcsv ($file, array (\u0026#39;dmrid\u0026#39;, \u0026#39;callsign\u0026#39;, \u0026#39;name\u0026#39;)); // $regions = array (\u0026#39;232\u0026#39;, \u0026#39;262\u0026#39;, \u0026#39;263\u0026#39;, \u0026#39;264\u0026#39;, \u0026#39;228\u0026#39;, \u0026#39;222\u0026#39;); //$regions = array (\u0026#39;2327\u0026#39;, \u0026#39;2328\u0026#39;, \u0026#39;2329\u0026#39;); $regions = array (\u0026#39;232\u0026#39;); foreach ($regions as $region) { foreach ($mem as $item) { if (preg_match (\u0026#34;/^$region/\u0026#34;, $item[0], $m)) { fputcsv ($file, $item); } } } foreach ($whitelist_array as $callsign) { foreach ($mem as $item) { if (preg_match(\u0026#34;/\\b$callsign\\b/i\u0026#34;, $item[1], $m)) { fputcsv ($file, $item); } } } fclose ($file); ?\u0026gt; ","date":"16 November 2020","permalink":"/posts/2020/13-create-your-own-dmrid-database-file/","section":"Blog","summary":"Sometimes you just need to create your own files. Mainly for the GD-77 because of its limited memory.","title":"Create your own DMR-ID database file","updated":"3 February 2026"},{"content":"This article is a summary of reasoniamhere.com/\u0026hellip;/outrageously-useful-tips-to-master-your-z-shell/. The original article is from 2014 and the pages last entry is from 2015. In case the website goes down I want the important bits saved for my reading and learning pleasure 😉\nNone of the following commands on this page are my own. File picking ## list every file directly below the Sites folder ls Sites # list every file in the folders directly below the Sites folder ls Sites/* # list every file in every folder two levels below the Sites folder ls Sites/*/* # list every file anywhere below the Sites folder ls Sites/**/* # list every file that ends in .txt in every folder at any level below the Sites folder ls Sites/**/*.txt Glob operators ## list text files that end in a number from 1 to 10 ls -l Sites/**/*\u0026lt;1-10\u0026gt;.txt # list text files that start with the letter a ls -l Sites/**/[a]*.txt # list text files that start with either ab or bc ls -l Sites/**/(ab|bc)*.txt # list text files that don\u0026#39;t start with a lower or uppercase c ls -l Sites/**/[^cC]*.txt Glob qualifiers ## show only directories print -l Sites/**/*(/) # show only regular files print -l Sites/**/*(.) # show empty files ls -l Sites/**/*(L0) # show files greater than 3 KB ls -l Sites/**/*(Lk+3) # show files modified in the last hour print -l Sites/**/*(mh-1) # sort files from most to least recently modified and show the last 3 ls -l Sites/**/*(om[1,3]) ls -l Sites/**/*(.Lm-2mh-1om[1,3]) # you won\u0026#39;t typically write at this level of obfuscation ls -l Sites/**/*(. Lm-2 mh-1 om [1,3]) # this is more parseable, but unfortunately Zsh doesn\u0026#39;t allow spaces # between qualifiers, so you\u0026#39;ll get an error Read more in section 14.8.7 of the manual.\nModifiers #Modifiers are preceded with a colon (:).\n# A plain old glob print -l Sites/website/images/gif/*.txt # Return the file name (t stands for tail) print -l Sites/website/images/gif/*.txt(:t) # Return the file name without the extension (r stands for remove_extension, I think) print -l Sites/website/images/gif/*.txt(:t:r) # Return the extension print -l Sites/website/images/gif/*.txt(:e) # Return the parent folder of the file (h stands for head) print -l Sites/website/images/gif/*.txt(:h) # Return the parent folder of the parent print -l Sites/website/images/gif/*.txt(:h:h) # Return the parent folder of the first file print -l Sites/website/images/gif/*.txt([1]:h) # Remember you can combine qualifiers and modifiers. ","date":"15 November 2020","permalink":"/posts/2020/12-operating-the-z-shell/","section":"Blog","summary":"\u003cp\u003eThis article is a summary of\n\u003ca href=\"https://reasoniamhere.com/2014/01/11/outrageously-useful-tips-to-master-your-z-shell/\" target=\"_blank\" rel=\"noreferrer\"\u003ereasoniamhere.com/\u0026hellip;/outrageously-useful-tips-to-master-your-z-shell/\u003c/a\u003e.\nThe original article is from 2014 and the pages last entry is from 2015. In case\nthe website goes down I want the important bits saved for my reading and learning\npleasure 😉\u003c/p\u003e","title":"Operating the Z-Shell","updated":"29 September 2024"},{"content":"For some reason my git commits failed when I re-enabled gpg signing. This is how I finally fixed that problem.\nAdd to ~/.gnupg/gpg.conf #use-agent pinentry-mode loopback And add to ~/.gnupg/gpg-agent.conf #allow-loopback-pinentry Restart the agent #$ echo RELOADAGENT | gpg-connect-agent This information was found on d.sb/2016/11/gpg-inappropriate-ioctl-for-device-errors.\n","date":"14 November 2020","permalink":"/posts/2020/10-error-with-signed-commits/","section":"Blog","summary":"\u003cp\u003eFor some reason my git commits failed when I re-enabled gpg signing. This is how\nI finally fixed that problem.\u003c/p\u003e","title":"Error with signed commits","updated":"29 September 2024"},{"content":"I usually fetch the upstream repository and merge it into my local repository, then upload all the merges into the github repository. That works sometimes, but it also fails sometimes with me having an extra commit with merges leaving the git history different from the upstream\u0026hellip;\nThis snippet has been taken from github.community.\n$ git checkout master # Make sure you always run the following commands from the master branch $ git fetch --all $ git pull --rebase upstream master $ git push origin master This will rebase the upstream changes on your local forked version so the master branch git history will look exactly the same at the end.\n","date":"14 November 2020","permalink":"/posts/2020/11-keep-up-to-date-on-forked-repositories/","section":"Blog","summary":"\u003cp\u003eI usually fetch the upstream repository and merge it into my local repository,\nthen upload all the merges into the github repository. That works sometimes,\nbut it also fails sometimes with me having an extra commit with merges leaving\nthe git history different from the upstream\u0026hellip;\u003c/p\u003e","title":"Keep up-to-date on forked repositories","updated":"29 September 2024"},{"content":"Product page — OpenGD77 Firmware — Latest CPS\nThis is probably the first DMR capable radio that is made for amateur radio. Obviosly not per default, but thanks to OpenGD77 it is now suited for amateur radio usage.\nudev-Rules for Linux ## USB rules for GD-77 # Place this in /etc/udev/rules.d/ to let all users talk to the radios by USB. # SUBSYSTEM==\u0026#34;usb\u0026#34;, ATTRS{idVendor}==\u0026#34;15a2\u0026#34;, ATTRS{idProduct}==\u0026#34;0073\u0026#34;, MODE=\u0026#34;0666\u0026#34; # HIDAPI/libusb SUBSYSTEM==\u0026#34;usb\u0026#34;, ATTRS{idVendor}==\u0026#34;15a2\u0026#34;, ATTRS{idProduct}==\u0026#34;0073\u0026#34;, MODE=\u0026#34;0666\u0026#34; SUBSYSTEM==\u0026#34;usb\u0026#34;, ATTRS{idVendor}==\u0026#34;1fc9\u0026#34;, ATTRS{idProduct}==\u0026#34;0094\u0026#34;, MODE=\u0026#34;0666\u0026#34; # HIDAPI/hidraw KERNEL==\u0026#34;hidraw*\u0026#34;, ATTRS{idVendor}==\u0026#34;15a2\u0026#34;, ATTRS{idProduct}==\u0026#34;0073\u0026#34;, MODE=\u0026#34;0666\u0026#34; KERNEL==\u0026#34;hidraw*\u0026#34;, ATTRS{idVendor}==\u0026#34;1fc9\u0026#34;, ATTRS{idProduct}==\u0026#34;0094\u0026#34;, MODE=\u0026#34;0666\u0026#34; # HIDAPI/hiddev ## We need to unbind this device, otherwise LibUsb will fail to SetConfiguration() and ClaimInterface() # For Bootloader (usbhid) KERNEL==\u0026#34;hiddev*\u0026#34;, ATTRS{idVendor}==\u0026#34;15a2\u0026#34;, ATTRS{idProduct}==\u0026#34;0073\u0026#34;, MODE=\u0026#34;0666\u0026#34;, RUN+=\u0026#34;/bin/bash -c \u0026#39;ID=$(IFS=/; read -a array \u0026lt;\u0026lt;\u0026lt; %p; echo ${array[-3]}); echo $ID \u0026gt; /sys/bus/usb/drivers/usbhid/unbind\u0026#39;\u0026#34; # OpenGD77 KERNEL==\u0026#34;ttyACM[0-9]*\u0026#34;, SUBSYSTEM==\u0026#34;tty\u0026#34;, ATTRS{idVendor}==\u0026#34;1fc9\u0026#34;, ATTRS{idProduct}==\u0026#34;0094\u0026#34;, MODE=\u0026#34;0666\u0026#34;, GROUP=\u0026#34;dialout\u0026#34;, SYMLINK+=\u0026#34;OpenGD77\u0026#34; If you want do reload udev with the new rules, run:\n$ udevadm control --reload-rules \u0026amp;\u0026amp; udevadm trigger Original boot tone melody #The originally used boot-up melody. I\u0026rsquo;m not sure if it changed already, but this was on my GD-77 when I first installed the OpenGD77 firmware.\n38,6,0,2,38,2,0,2,38,6,0,2,38,2,0,2,38,6 My boot-up picture # Normal display settings Inverted display settings Importing DMR-IDs #Open Extras \u0026raquo; Download callsign database and fetch the data that you want.\nSet the region to the desired MCC that you want to import. You can also use the inactivity filter that fetches only recently active DMR-IDs. Or you can import DMR-IDs from a file.\nI usually import them from a CSV-file. The file that I use contains all the austrian callsigns plus a few other callsigns, that I regularly see. So I need to import about 2000 callsigns. Well, I do not use DMR, D-STAR or C4FM so often; so I don\u0026rsquo;t import anything at the moment. But I came across this site again and I thought I could update this list again (after nearly 2 years there are a few new callsigns in this list \u0026ndash; about 2000 new callsigns).\nIf you don\u0026rsquo;t have a proper file to start with use this one here. It contains these regions: 232, 262, 263, 264, 222, 228.\n📂 ZIP (~250KB) ZIP compression is a well-known standard on many systems. Many systems can handle ZIP files out of the box. Read more → 📂 ZSTD (~245KB) Zstandard compression is a really fast compression algorith that still provides higher compression ratios. Read more → If you want the older files, they are still available (if you have the link).\nRead more about compression (and why I will include ZSTD compressed files on my website in the future)\nIn addition to the compression-methods-article mentioned above, on this particular file I had to use zstd -6 to outrun zip -9 (zstd ranges up to -22).\nOr: download your own set of DMR-IDs with the regions you want. You can also download only some federal states (like 2327,2328) if you don\u0026rsquo;t want all entries from 232. Read along here for some instructions about this.\nBand scope (Spectrum sweep scan) #I\u0026rsquo;m not sure when this feature was implemented, but OpenGD77 now supports an easy to use band scope on the GD-77.\nPress and hold the hash key # when in VFO mode to enter this feature.\nOutput power on 2m # Power setting Out power (device 1) Out power (device 2) +W- 7.50 W 7.60 W 5W 5.31 W 5.40 W 50mW 376 mW 152 mW 1W 1.30 W 1.35 W 2W 2.37 W 2.14 W 3W 2.90 W 2.70 W 4W 3.76 W 3.40 W I have two devices and they differ on some settings (50mW setting for example).\nOutput power on 70cm # I have only measured one device as devices may differ largely.\nPower setting Output power 50mW 917 mW 250mW 925 mW 500mW 1.86 W 750mW 1.49 W 1W 1.67 W 2W 2.35 W 3W 2.96 W 4W 4.22 W 5W 7.50 W +W- 8.41 W ","date":"17 October 2020","permalink":"/equipment/radio-stuff/handhelds/radioddity-gd77/","section":"Equipment","summary":"Consider the OpenGD77 firmware and you\u0026rsquo;re all set with a very user friendly and customizable handheld radio.","title":"Radioddity GD-77","updated":"3 February 2026"},{"content":"I bought a \u0026ldquo;fake\u0026rdquo; NanoVNA-F in my early days as an amateur radio operator and I therefore bought this model from SYSJOINT.\nI had to replace one SMA connector because it had wiggly contacts.\nI wouldn\u0026rsquo;t buy any device from SYSJOINT again. Also software wise.\nUpdate: I\u0026rsquo;ve changed one SMA connector and most problems are gone but sometimes the curve still flickers and moves a little bit.\n","date":"5 July 2020","permalink":"/equipment/radio-stuff/accessories/nanovna-f/","section":"Equipment","summary":"A so-called \u0026ldquo;fake\u0026rdquo; NanoVNA.","title":"NanoVNA-F","updated":"29 September 2024"},{"content":"I got this because the IC-7300 was too chunky to be effectively transported within a rucksack. Also I feared scratches in its big display or even a broken display: so here is the Yaesu FT-891.\nExcellent receiver #I think this radio has a bit better receiving quality than the IC-7300. There are lots of options in the function menues that help you concentrating on the actual signal.\nGood filter capabilities #The filters are good enough to filter for a specific signal, mainly using WIDTH and SHIFT and sometimes CONTOUR filters is mostly effective enough. The DNR is also quite nice and works well, although I don\u0026rsquo;t like the resulting voice that much. Way better works the autonotch filter (DNF), which is an awesome feature to have.\nRecord and transmit CQ calls #The FT-891 lets you record up to 5(??) or 3? different clips that you can later transmit by a button press. That might come in handy when you are contesting \u0026ndash; can\u0026rsquo;t refer to this much because I\u0026rsquo;m not contesting nor do I use this function so far.\nGood size #I like it\u0026rsquo;s size when it\u0026rsquo;s beeing still a 100 W transceiver. Nonetheless it drains the battery with 1 A when listening.\nDigital modes #I use the radio with a SignalinkUSB interface and I have to extend the bandwith manually with the WIDTH setting from the function menue to have this set correctly. The setting from the main settings is not applied on digital modes. Apparently Yaesu doesn\u0026rsquo;t care about that bug.\nTactical carrying system: 891escort ™ #Made from aluminium the 891escort adds a little weight but also protection to the radio, especially for the knobs on the front panel. The addidional strap mounts can be used to attach a sling to the radio, it could be easily carried now \u0026ndash; not that I used that once, but it is there as a feature. My focus was the additional protection when I bought them. Now, a year later, I carry the radio inside a cloth bag without the escort just to save some more grams when hiking through the mountains and I can remove the detachable head of the unit to change different microphones/headsets. When using the carrying system I would need to remove the right frame before I could detach the units head.\nSome people recommend using a short LAN cable to get the socket outside, but I haven\u0026rsquo;t found a good one yet (and a short one).\nPortable operation #This radio is an excellent choice if you have enough power with you \u0026ndash; the current draw is very high compared to a QRP radio and an amplifier (Tx-500 with PA-500 for example).\n","date":"21 June 2020","permalink":"/equipment/radio-stuff/transceivers/yaesu-ft891/","section":"Equipment","summary":"","title":"Yaesu FT-891","updated":"14 May 2026"},{"content":"C4FM is one of the easiest digital operating mode to set up. Enter your callsign and you\u0026rsquo;re good to go.\nAll in all, the FT-3D is a nice and handy radio.\nKeys and buttons #I like the arrangement of the PTT and the knob on the top is very usable.\nEasy to use T-CALL #One button below the PTT is the MONI/T-CALL button located, which you can either configure as a MONITOR button (opens both receiver at once) or as T-CALL button, which sends out a 1750Hz tone immediately.\nOpening SQL when you use T-CALL #When you configured your MONI/T-CALL button for T-CALL, you can open the squelch by pressing the SQL button (between MONI/T-CALL and POWER button) and then use the volume knob to reduce or increase the squelch level.\nFull APRS #But it cannot use Voice Alert. Nonetheless a device which can send and receive APRS packets is not seen very often on portable devices. Not even the new Icom ID-52 has APRS support.\nSend and receive APRS including messaging.\nColor screen #The screen is okay and you see instantly which band is active at the moment. Using the touch screen is very intuitive, although I personally prefer devices with no touch screen at all. I never had any problems with the coloring or the brightness at all, but YMMV.\nTransmit power #The FT-3D supports 4 power levels: LOW1 (0.3W), LOW2 (1W), LOW3 (2.5W) and HIGH (5W).\nPower output on 2m and 70cm power output around 145.500 MHz power output around 433.500 MHz Power setting Output 2m Output 70cm LOW1 350 mW 340 mW LOW2 1.00 W 972 mW LOW3 2.80 W 2.44 W HIGH 5.66 W 4.87 W Band scope #This is probably the first portable radio that I bought which had a band scope. The scope itself is quite usable, it let\u0026rsquo;s you split the screen width into 19, 39 or 79 bars of details. I usually switch between 39 and 79 bars to get the best results.\nDual receive (D.RCV) #Preset receiver memory channels (P.RCVR) #Change with BAND button between Weather broadcast (WX CH), international VHF marine radio (INTVHF) or international shortwave broadcast (SW) channels.\nFor shortwave listening (only AM, no SSB), a longer antenna may not be a bad idea.\nAF-DUAL receive function (A.DUAL) #This enables radio broadcast reception on the A band receiver. The radio reception is interrupted, when a signals is receiver on either A or B band receivers.\nBuilt-in GPS receiver #GPS is a handy function, but it drains the battery. You may also use pre-defined locations for APRS and save some battery life if you are stationary.\nCross-band memory channels #The FT-3D lets you save memories that use 2m for receive but 70cm for transmit, for example. The repeater OE7XZR (Zugspitze, Tyrol) is one of them. It sends on 145.57500 MHz but receives on 432.57500 MHz.\nRecordings #Although the recordings are sometimes quite buggy, I really appreciate this function on newer radios. No need to pull out your smartphone to get a recording on tape.\n","date":"24 May 2020","permalink":"/equipment/radio-stuff/handhelds/yaesu-ft3d/","section":"Equipment","summary":"","title":"Yaesu FT-3D","updated":"9 November 2024"},{"content":"","date":null,"permalink":"/tags/anytone/","section":"Tags","summary":"","title":"Anytone","updated":null},{"content":"This is as simple and straight-forward as it could be.\nLet\u0026rsquo;s do it #Press and hold down PTT and 1 while turning on your radio to change the bands on your Anytone handheld (tested on my D878UV+). To change them, turn the channel knob and power the radio off when it shows the desired limits.\nBut I\u0026rsquo;ve read on social media (Telegram) that some people were not able to change their bands \u0026ndash; mostly users of mobile radios. In this conversation Arnold, OE1IAH shared his work-around for this.\nHe just changed the 17th byte in the codeplug file so the bands in the codeplug matched the bands used on the radio.\nI use Linux on my computers so I usually have such tools installed already:\n$ printf \u0026#39;\\x03\u0026#39; | dd of=codeplug.rdt bs=1 seek=17 count=1 conv=notrunc Why would you need this? #You get a codeplug from a friend but you cannot load it into your radio because it uses a different band setting and you cannot change that on your radio. So you want to change the band setting in the codeplug to match it your radio setting.\nBut, what you still have to consider #You change from 0 to 3, that means you can store frequencies within 136-174 MHz and 400-480 MHz while you use the 0 setting. You then change your codeplug to only make use of 144-146 MHz as well as 430-440 MHz.\nYou see where this is going?\nYou\u0026rsquo;d be fine if you only use frequencies within the HAM bands, though.\nBands settings # Setting Frequencies Description 0 136-174 / 400-480 Commercial Europe Mode 000000 1 136-17d4 / 400-480 Commercial US Mode 000001 3 144-146 / 430-440 Amateur Europe Mode 000003 7 144-148 / 420-450 Amateur US Mode 000007 8 136-174 / 400-470 Commercial Mode 000008 10 144-148 / 430-450 Amateur Australia/Canada Mode 000010 13 136-174 / 403-470 Commercial Mode 000013 16 144-147 / 430-440 Amateur Thailand Mode 000016 17 136-174 / 430-440 Commercial Thailand Mode 000017 ","date":"17 May 2020","permalink":"/posts/2020/9-change-the-bands-in-your-anytone-codeplug/","section":"Blog","summary":"If you can\u0026rsquo;t change the band edges on your Anytone radio, change the band setting in the codeplug.","title":"Change The Bands In Your Anytone Codeplug","updated":"9 November 2024"},{"content":"I got a Nextion NX8048K070_011 recently and I built a DMR Dashboard (again) for this screen. You see the last five heard stations along with the timestamp (hour, minute), the used timeslot and the used talkgroup. For your own transmissions the RSSI information as well as the calculated BER will be displayed.\nModel and overview #I\u0026rsquo;ve lost a few words about this topic (Nextion) in general on my first post about my 2.4 inch nextion screen in a previous article.\nHave a look at the debug preview made within the Nextion Editor. The main screen is on the left and on the right side you see the system screen, this screen is for system tasks and you need a working NextionDriver installation to use all the buttons. Read more about the system screen on the chapter Management view.\nScreen Debug Preview You will need NextionDriver installed to use all the buttons on the SYSTEM page. I have not tested it yet with Pi-Star v4 but it should work as long as MMDVMHost runs as root user. Otherwise you should download the HMI files and modify it in your NextionEditor LTS.\nUpdate on March 31, 2020\nThe screen works fine on Pi-Star v4, but without NextionDrivers you won\u0026rsquo;t be able to use the start/stop buttons on the system page. In fact, you won\u0026rsquo;t be able to use any buttons that execute code on the linux box. Also the version and serial number does not get loaded without NextionDrivers. Choose Nextion Layout L3 HS on Pi-Star \u0026ndash; the screen runs with 115200 baud.\nGet NextionDriver # https://github.com/on7lds/NextionDriver You may also find NextionDriverInstaller helpful.\nGet the files (HMI and TFT) #Download the files from my github repository.\nhttps://repo.oe7drt.net/dominic/MMDVM-Nextion-Screen-Layouts Have a look at the releases tab as there are more older versions available (the older layout looks ugly on the system page, but has buttons for DMRGateway and DAPNETGateway).\nManagement view #By \u0026ldquo;clicking\u0026rdquo; the page (mainly the header on the top of the screen) you will see a management screen with a lot of buttons. I think these are self-explanatory.\nAlthough I hate to say it, but I had to run MMDVMHost as user root \u0026ndash; otherwise the screen went all black. I\u0026rsquo;d rather like to have MMDVMHost running as a non-privileged user mmdvm. Please let me know if you found a solution to run MMDVMHost as user mmdvm again.\nMaybe this is the reason why MMDVMHost runs as root on Pi-Star v4 too.\nOh sorry, we could not show you the video!\nWe had the following sources: av1 mp4, h265 mp4, h264 mp4 Shared video Download: H264, H265, AV1 (INFO Some files might not be available.\nH264: Great compatibility, lower quality and bigger size\nH265: Very small files, but not as good as AV1\nAV1: The best quality here, but a bit bigger files as the H265 version\nAn actual browser should usually load the small H265 video per default, others might use the H264 video.\nWindows might not load H265 per default because you would probably have to install the HEVC codec from the Microsoft Store. ) Above is a short demonstration of the system screen. The Layout might change in the future, but you might edit the layout on your own. Just retext the buttons and modify the executed command line.\nAt the moment the SHRINK LOGS button executes /usr/local/sbin/shrinklog and the PHP-DASHBOARD ON and PHP-DASHBOARD OFF buttons execute /usr/local/sbin/dashboard start and /usr/local/sbin/dashboard stop respectively.\nMost of the code in shrinklog has been taken from Pi-Star, which is why I won\u0026rsquo;t release that file here, you gonna take the code from Pi-Star and modify it to your needs. dashboard starts and stops php-fpm and places (or removes) an index.html file in the webroot so it displays a message, that the dashboard is offline. Otherwise nginx would display a simple Bad Gateway error message.\nPictures and images #The dashboard looks something like this. On your own transmissions there is also RSSI and BER information available.\nThe duration of the transmission does not match with the duration on the web dashboard, but it gives a simple idea of its lenght. I\u0026rsquo;m not a good programmer so I\u0026rsquo;ll let this for now.\nResources # https://www.on7lds.net/42/nextion-displays ","date":"28 March 2020","permalink":"/posts/2020/8-my-7inch-dmr-dashboard/","section":"Blog","summary":"I did not like the small screen and the small housing of my last Hotspot so I decided to make a bigger housing where I needed a bigger screen. Look what I got myself up and running, with some major options to control the hotspot just right off the screen itself. Make sure to install the NextionDrivers when you use this layout \u0026ndash; it offers way more possibilities.","title":"My 7-Inch DMR Dashboard","updated":"8 March 2026"},{"content":"","date":null,"permalink":"/tags/nextion/","section":"Tags","summary":"","title":"Nextion","updated":null},{"content":"Installing the needed tools #$ brew cask install osxfuse $ brew install ext4fuse Mount the disk on your filesystem #$ ext4fuse /dev/disk2s2 pi-star Users, groups, write permissions, \u0026amp;c #If you feel that you have to add yourself to another usergroup, then do that as the following code suggests:\n$ sudo dseditgroup -o edit -a $username -t user $groupname ","date":"22 February 2020","permalink":"/posts/2020/7-mountint-ext4-filesystem-on-macos-readonly/","section":"Blog","summary":"An overview of how to mount your Pi-Star sdcard on a mac machine.","title":"Mountint Ext4 Filesystem On MacOS Readonly","updated":"29 September 2024"},{"content":"The display #When I got the display there was already a Screen Layout installed \u0026ndash; it was probably the Layout of PD0DIB.\nWe\u0026rsquo;re talking about a NX3224T024_011.\nMy dashboard now looks like this:\nThe number on the bottom right corner displays the actual status code sent by the MMDVMHost binary. A list of these codes can be seen here.\nAlso have a look at the debug output within the Nextion Editor. You get to the second screen (SYSTEM screen) by touching/pressing the header of the dashboard. Within the system screen you can clear the dashboard.\nThe editor #The most HMI files I found online were made with the older version of Nextion Editor \u0026ndash; v53. It is the Nextion Editor LTS version. It is available on nextion.tech.\nFor the editor to work you need to install a Microsoft Visual C++ Redistributable Package \u0026ndash; Nextion Editor is a 32bit application, so choose the 32bit version (vc_redist.x86.exe).\nTFT files and HMI files #I\u0026rsquo;m no professional and this is the way I look at these things. For me HMI files are source files. You can open them with Nextion Editor and edit them just right away. Whereas TFT files cannot be \u0026ldquo;opened\u0026rdquo; with the Nextion Editor, they have to be opened with no open project by clicking the Debug button (next to the Compile button). They get loaded into the simulator and you can preview the file.\nTFT files are the compiled output of HMI files.\nGet the files #I\u0026rsquo;ve setup a repository on Github for my screen \u0026ndash; for now there is one layout online. It only displays a last heard table with callsign and talkgroup for DMR. I\u0026rsquo;d like to have this for a bigger screen but I\u0026rsquo;m not sure when I\u0026rsquo;ll find the time for it.\nhttps://repo.oe7drt.net/dominic/MMDVM-Nextion-Screen-Layouts What the actual dashboard looks like.\nOh sorry, we could not show you the video!\nWe had the following sources: av1 mp4, h265 mp4, h264 mp4 Shared video Download: H264, H265, AV1 (INFO Some files might not be available.\nH264: Great compatibility, lower quality and bigger size\nH265: Very small files, but not as good as AV1\nAV1: The best quality here, but a bit bigger files as the H265 version\nAn actual browser should usually load the small H265 video per default, others might use the H264 video.\nWindows might not load H265 per default because you would probably have to install the HEVC codec from the Microsoft Store. ) Resources #I\u0026rsquo;ve found several resources that I want to list in no particular order here.\nhttps://www.hamdigitaal.nl/download/algemene-informatie/Setup-a-MMDVM-Hotspot-20161212.pdf https://github.com/WA6HXG/MMDVM-Nextion-Screen-Layouts https://github.com/PD0DIB/Nextion_HAM-radio-screens ","date":"16 February 2020","permalink":"/posts/2020/6-nextion-dmr-last-heard-dashboard/","section":"Blog","summary":"I created a simple last-heard-dashboard for my small Nextion screen. It currently shows the used slot, its origin (like Network or RF) , the callsign and the used talkgroup.","title":"My Nextion 2.4\" DMR Last Heard Dashboard","updated":"8 March 2026"},{"content":"You want to install w3m. It is a text browser. Don\u0026rsquo;t forget rpi-rw before installing anything if you\u0026rsquo;re on Pi-Star.\n$ sudo apt-get -y install w3m The script #The script itself does not verify the given callsign, so whatever you write as an argument, it will be passed to the website. The script returns with 0 if nothing is found.\n# file: \u0026#34;~/bin/call\u0026#34; #!/bin/bash # Get DMR-IDs from CALLSIGN or CALLSIGN from DMR-ID or vice versa # Author: Dominic Reich, OE7DRT # File: ~/bin/call # # Last modified: 2020-04-12 13:26:36+0200 # # Inspired from this beautiful article: # https://pretzelhands.com/posts/command-line-flags # # Good DX and vy 73 de OE7DRT command -v w3m \u0026gt; /dev/null 2\u0026gt;\u0026amp;1 || { echo \u0026gt;\u0026amp;2 \u0026#34;w3m not found\u0026#34;; exit 1; } print_usage () { echo \u0026gt;\u0026amp;2 \u0026#34;usage: `basename $0` [dmr_id | callsign]\u0026#34; exit 1 } if [ $# -ne 1 ] then print_usage fi getID () { CALL=`echo $1 | tr a-z A-Z` FILE=/tmp/$CALL w3m \u0026#34;https://ham-digital.org/dmr-userreg.php?callsign=$CALL\u0026#34; \u0026gt; $FILE c=`grep $CALL $FILE | wc -l | xargs` while [ $c -gt 0 ] do OUT=`grep $CALL $FILE | head -n $c | tail -n 1 | awk \u0026#39;{ print $4,$5,$2,$3 }\u0026#39;` echo \u0026#34;$OUT\u0026#34; ((c--)) done rm $FILE } getCALLSIGN () { ID=$1 FILE=/tmp/$ID w3m \u0026#34;https://ham-digital.org/dmr-userreg.php?usrid=$ID\u0026#34; \u0026gt; $FILE CALL=`grep $ID $FILE | awk \u0026#39;{ print $4 }\u0026#39;` rm $FILE if [ -z $CALL ] then exit 1 fi getID $CALL } checkID () { if [[ ! $1 =~ ^[0-9]{7}$ ]] then echo \u0026gt;\u0026amp;2 \u0026#34;no valid dmr_id supplied\u0026#34; exit 1 fi } if [ \u0026#34;$1\u0026#34; -eq \u0026#34;$1\u0026#34; ] 2\u0026gt;/dev/null then ID=\u0026#34;$1\u0026#34; checkID $ID else CALL=\u0026#34;$1\u0026#34; fi if [ ! -z $ID ] then getCALLSIGN $ID exit 0 elif [ ! -z $CALL ] then getID $CALL exit 0 else print_usage fi If someone has two DMRIDS, the most recent registered callsign will appear on the top. Feel free to modify the script to your needs if you also want to display the date of registration. Or modify the url if you want to only display last heard ids. Example usage #Simply get one DMRID (or two, depends on the callsign though):\n$ call OE7DRT Now let\u0026rsquo;s think a bit more complex. You can use the script in a loop. Let\u0026rsquo;s fetch some austrian callsigns only.\n$ for i in 7one 7two 1three; do call oe$i ids \u0026gt;\u0026gt;! ids; done That would fetch 3 callsigns OE7ONE, OE7TWO and OE1ONE and write them all into the file ids. So run cat ids and display them on screen. Or copy them into clipboard (on a mac only) with pbcopy \u0026lt; ids.\nOE7ONE Username1 0007001 2018-05-12 OE7TWO Username2 0007003 2018-12-08 OE7TWO Username2 0007002 2018-11-09 OE1ONE Username3 0001001 2020-03-13 I\u0026rsquo;ve been anonymizing the data a bit.\nPartially known callsign #I anonymized some DMR-IDs on this website.\nSo you know only the three last letters of an austrian callsign and want to know quickly what federal state it was? Run this command and you\u0026rsquo;ll get a quick answer on the command line:\n$ for i in oe{1..9}drt; do call $i; done OE7DRT Dominic 2327180 2019-11-24 If you called your script call and if call is in your $PATH.\nThis works also if you missed one letter.\n$ for i in oe7{a..z}rt; do call $i; done OE7BRT Rainer 2327XXX 20XX-XX-XX OE7DRT Dominic 2327180 2019-11-24 OE7JRT Josef 2327XXX 20XX-XX-XX This took ~10 seconds on my computer.\nOr even with more letters, but this will take a while, since this will start 676 (26x26) website lookups to ham-digital.org\u0026mdash;maybe they\u0026rsquo;ll block your IP address quickly, if you hammer their server with so many request in a short period of time.\n$ for i in oe7d{a..z}{a..z}; do call $i; done 2327XXX OE7D?? Daniel 2327XXX OE7D?? Hermann 2327XXX OE7D?? Josef 2327XXX OE7D?? Dragan 2327XXX OE7D?? Peter 2327180 OE7D?? Dominic 2327XXX OE7D?? Wechselberger 2327XXX OE7D?? Gernot And this ran for 3 minutes and 17 seconds on my computer.\nThe output above was made with an older version of the script. The output now contains also the registration date as seen in previous examples. ","date":"4 February 2020","permalink":"/posts/2020/5-get-dmrids-on-the-command-line/","section":"Blog","summary":"This is a quick workaround to retrieve a DMRID on console or terminal.","title":"Get DMRIDs Via Command Line","updated":"29 September 2024"},{"content":"I\u0026rsquo;ve read many articles about the Hytera PD785G, APRS, GPS, IPSC2, DMR+, Brandmeister and what not\u0026hellip;\nThese are the settings that I currently run with.\nGPS settings #These settings remain the same as on the v8 firmware.\nAlso this remains the same \u0026ndash; make sure to disable Quick GPS and enable RSSI Report.\nYou do not really need the other settings. On incoming calls Call Location will show the location of other stations on the display. Voice with Location sends your own location info out with your voice. This is needed for Call Location.\nNetwork settings #Set the Control Center ID to 9057 if you want to appear as portable device.\nYou can also use any of those number-symbol combinations.\nRRS \u0026amp; Radio IDs description 9050 without SSID 9055 house / QTH 9056 camping / fieldday 9057 handheld transceiver 9058 mobile / boat 9059 mobile / car Channel settings #Setup the channel like this. Just make sure to set Location Info Revert Channel. I did not select IP Multi-site Connect and I also did not select an RRS Revert Channel. I am not 100% sure, but I think the RRS Revert Channel is what makes your HT send your position out when you change channels.\nYou can also set Slot Operation to Pseudo Trunk \u0026ndash; that would let you hear statically linked talkgroups of another timeslot too.\nButtons #Did you set Button as a GPS Trigger? Then you want to configure a button here.\nBasic settings #For what I have tested this works quite well. Although Brandmeister recommends to set the Data Bearer Service to Compressed IP if you want to use text messaging.\nExamples #In-call location information does not contain an SSID. That means, that your location is transferred as your plain CALLSIGN, without the -7 for 9057.\nThe route looks like this when transmitted as CALLSIGN-7. The route looks like that when no SSID is appended to the CALLSIGN. When transmitted with SSID a location point looks like this:\nand without SSID:\nThere is usually only a red dot marker and not a house. The house replaced the red dot when I tried new APRS settings with my Openspot2 \u0026ndash; which sended out a beacon for my callsign only. This might not be compatible to each other \u0026ndash; time will tell\u0026hellip;\nIn case you don\u0026rsquo;t know that site yet, there is also https://aprsdirect.com as an alternative to https://aprs.fi \u0026ndash; I love the realtime raw package feed. I use them both here and there.\n","date":"27 January 2020","permalink":"/posts/2020/4-aprs-with-hytera-pd785g-v9/","section":"Blog","summary":"This article is based on the Firmware v9.","title":"APRS With The Hytera PD785G","updated":"29 September 2024"},{"content":"","date":null,"permalink":"/tags/hytera/","section":"Tags","summary":"","title":"Hytera","updated":null},{"content":" Update on Jan 27 2024\nI haven\u0026rsquo;t looked at the Pi-Star software for quite some time but I assume it is still fine. If you haven\u0026rsquo;t heard something about WPSD you should have a look at it, as it is another opinionated hotspot software that you can use with your hotspot. I\u0026rsquo;ve been playing with Pi-Star now for a while and I finally got my IPSC2-Brandmeister dual-setup working.\nI\u0026rsquo;m using the beta version v4 because I read somewhere, that DUAL-HATS won\u0026rsquo;t work properly with the older v3 firmware \u0026ndash; but I never really tested the v3. Instead I went for v4 straight away as it seemed pretty stable anyway.\nNow, I began with a very simple IPSC2-only setup in the first place. I then made a backup and changed all settings to be used for Brandmeister only. Another backup of the Brandmeister setup and I moved on to using DMRGateway.\nIt was a bit tricky at the beginning, because I was not used to the configuration of such devices in any kind. After a few hours of research and testing I finally got the DMR-GW setup ready.\nThe first thing I did on Pi-Star #Setup the keyboard and language on the console. I mostly type in german and I know most of the characters on an en_US or en_UK keyboard, but I still prefer a german layout 😉\nBefore we start, we have to make the filesystem writable. Do this with the command alias rpi-rw either in a console or in the SSH-Access tab on the dashboard (Configuration → Expert → SSH Access). The login details for SSH are the same as on the dashboard.\nNow you got the filesystem writable, so start the keyboard configuration:\n$ sudo dpkg-reconfigure keyboard-configuration I then usually go for the 105-key PC one. Choose German (Austria) and go for the default keyboard layout with no compose key \u0026ndash; except you have other needs.\nThen start generating the locales for your environment.\n$ sudo dpkg-reconfigure locales Choose the locales that you need or want. My setup looks like this:\nIf you don\u0026rsquo;t know what to choose, go with your language and the UTF-8 version. I also create my ssh-keys for passwordless login as well as some comfortable aliases. I usually use the ZSH shell, but on Pi-Star I just leave it as it was. I add my aliases to .bash_aliases \u0026ndash; this is the file that gets sourced via .bashrc in the default pi-star setup.\nQuick and dirty \u0026ndash; my current .bash_aliases on my Pi-Stars looks like this:\n# File: \u0026#34;~/.bash_aliases\u0026#34; DATE=$(date +%Y-%m-%d) PI=/var/log/pi-star/ DMRGW=${PI}DMRGateway-${DATE}.log MMDVM=${PI}MMDVM-${DATE}.log DAPNET=${PI}DAPNETGateway-${DATE}.log [ -x /usr/bin/pydf ] \u0026amp;\u0026amp; alias df=\u0026#39;/usr/bin/pydf\u0026#39; || alias df=\u0026#39;df -h\u0026#39; alias digg=\u0026#39;dig +noall +answer\u0026#39; alias dt=\u0026#39;dmesg | tail\u0026#39; alias mm=\u0026#34;multitail ${DMRGW} ${MMDVM}\u0026#34; alias mmdmr=\u0026#34;multitail ${DMRGW}\u0026#34; alias mmdv=\u0026#34;multitail ${MMDVM}\u0026#34; alias mmdap=\u0026#34;multitail ${DAPNET}\u0026#34; # Screen and Tmux alike alias sc=\u0026#39;screen -DR Screen_A\u0026#39; alias tm=\u0026#39;tmux -u new-session -A -s Tmux_A\u0026#39; # ls alias l=\u0026#39;ls -1A\u0026#39; alias la=\u0026#39;ls -lah\u0026#39; alias lc=\u0026#39;lt -c\u0026#39; alias lk=\u0026#39;ll -Sr\u0026#39; alias ll=\u0026#39;ls -lh\u0026#39; alias lad=\u0026#39;ls -lah|more\u0026#39; alias lld=\u0026#39;ls -lh|more\u0026#39; alias lm=\u0026#39;la | \u0026#34;$PAGER\u0026#34;\u0026#39; alias ln=\u0026#39;nocorrect ln -i\u0026#39; alias lni=\u0026#39;nocorrect ln -i\u0026#39; alias locate=\u0026#39;noglob locate\u0026#39; alias lr=\u0026#39;ll -R\u0026#39; alias ls=\u0026#39;ls --group-directories-first --color=auto\u0026#39; alias lt=\u0026#39;ll -tr\u0026#39; alias lu=\u0026#39;lt -u\u0026#39; alias lx=\u0026#39;ll -XB\u0026#39; alias ducks=\u0026#39;du -cks * | sort -rn | head\u0026#39; alias confcat=\u0026#34;sed -e \u0026#39;s/#.*//;/^\\s*$/d\u0026#39; \u0026#34;$@\u0026#34;\u0026#34; Optional #More software that comes in handy from time to time.\n$ sudo apt-get install htop lsof nmap arping vim pydf multitail git ldnsutils pydf in combination with the alias from above displays a short and colored output when you list your diskspace with df If you intent to install and use vnstat, you need to set it up #The installation of vnstat is useful, if you let your pi-star run 24/7 as the database gets cleared on every reboot!\n$ sudo apt-get install vnstat Add the following line to your /etc/fstab file. I assume that you still have the filesystem writable \u0026ndash; if not, run rpi-rw.\n# file: \u0026#34;/etc/fstab\u0026#34; tmpfs /var/lib/vnstat tmpfs nodev,noatime,nosuid,mode=1777,size=4m 0 0 If you run cat /etc/fstab it should look similar to this:\n# file: \u0026#34;/etc/fstab\u0026#34; #File System Mountpoint Type Options Dump Pass proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults,ro 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime,ro 0 1 tmpfs /run tmpfs nodev,noatime,nosuid,mode=1777,size=32m 0 0 tmpfs /run/lock tmpfs nodev,noatime,nosuid,mode=1777,size=5m 0 0 tmpfs /sys/fs/cgroup tmpfs nodev,noatime,nosuid,mode=1755,size=32m 0 0 tmpfs /tmp tmpfs nodev,noatime,nosuid,mode=1777,size=64m 0 0 tmpfs /var/log tmpfs nodev,noatime,nosuid,mode=0755,size=64m 0 0 tmpfs /var/lib/sudo tmpfs nodev,noatime,nosuid,mode=1777,size=16k 0 0 tmpfs /var/lib/dhcpcd5 tmpfs nodev,noatime,nosuid,mode=1777,size=32k 0 0 tmpfs /var/lib/vnstat tmpfs nodev,noatime,nosuid,mode=1777,size=4m 0 0 tmpfs /var/lib/logrotate tmpfs nodev,noatime,nosuid,mode=0755,size=16k 0 0 tmpfs /var/lib/nginx/body tmpfs nodev,noatime,nosuid,mode=1700,size=1m 0 0 tmpfs /var/lib/php/sessions tmpfs nodev,noatime,nosuid,mode=0777,size=64k 0 0 tmpfs /var/lib/samba/private tmpfs nodev,noatime,nosuid,mode=0755,size=4m 0 0 tmpfs /var/cache/samba tmpfs nodev,noatime,nosuid,mode=0755,size=1m 0 0 tmpfs /var/spool/exim4/db tmpfs nodev,noatime,nosuid,mode=0750,size=64k 0 0 tmpfs /var/spool/exim4/input tmpfs nodev,noatime,nosuid,mode=0750,size=64k 0 0 tmpfs /var/spool/exim4/msglog tmpfs nodev,noatime,nosuid,mode=0750,size=64k 0 0 Normally, vnstat creates /var/lib/vnstat and starts the vnstat service. We now delete the freshly created databases (they are nearly empty anyway) and re-create them when we have mounted the ramdisk.\n$ sudo rm /var/lib/vnstat/* $ sudo mount -a $ sudo systemctl restart vnstatd Now run vnstat to display network interface statistics. It\u0026rsquo;s output could look similar to this one:\nrx / tx / total / estimated eth0: Not enough data available yet. wlan0: Jän \u0026#39;20 39,23 MiB / 39,10 MiB / 78,33 MiB / 106,00 MiB today 39,23 MiB / 39,10 MiB / 78,33 MiB / 138 MiB It takes time to gather enough information. Get back to this in a few days and you will get more useful information. Because we save the databases in the ramdisk, we will save the sdcards lifetime, but also we loose the statistics when we reboot the raspberry pi.\nIf you want to save them forever, you won\u0026rsquo;t have to create a ramdisk like above, but you also have to make sure that PiStar does not mount the volumes read-only! Make the filesystem read-only again #Once you finished your setup, make the filesystem read-only again.\n$ rpi-ro Start setting up your Pi-Star MMDVM # The MMDVM services restart every time you hit the Apply Changes button. So when hitting the button wait a few seconds \u0026ndash; this takes some time to complete ;-) Talkgroup setup #This setup uses some talk groups from IPSC2/DMR+ and the rest from Brandmeister. Specifically these talkgroups are:\nTimeslot 1 TG 1 - TG 7 TG 10 - TG 89 TG 100 - TG 199 Timeslot 2 DMR+ reflectors with TG 9 TG 232 TG 8181 - TG 8189 TG 8191 - TG 8199 GPS data sent as private calls to 9057 All other talkgroups are routed to the Brandmeister network. Private calls are also routed to Brandmeister.\nSimplex or Duplex? #This is where we actually start. At the first start either connect your Raspberry Pi to an ethernet port or look out for a WiFi network called Pi-Star Setup.\nMake sure to use Duplex Repeater in order to use different RX and TX frequencies. MMDVMHost # Choose the modes that you want to use. I only use DMR and POCSAG for now. General information about the station # Put in your own callsign and your DMR-ID \u0026ndash; register your callsign if you don\u0026rsquo;t have one yet. Select appropriate frequencies and make sure they are at least a few MHz apart from each other. I used the common shift that we use in Austria on 70cm (-7,6 MHz). Update: The URL above is outdated. ham-digital.org was the european version of radioid.net \u0026ndash; those two were merged together and you can apply for your personal DMR-ID over here at radioid.net. DMR configuration # Now, setup IPSC2 only or Brandmeister only if you are unsure about the DMRGateway setup. Make yourself comfortable with both of the systems but only one system at a time and move over to DMRGateway when you feel confident enough. The rewrite rules can be sometimes a bit tricky to set up. Choose the Brandmeister master server you want to connect to. Also set a password in Brandmeisters SelfCare for Hotspot Security. That makes sure, that only you can add a Hotspot with your callsign. Also select the IPSC2 server of your choice and set the wanted options. I go with these for now:\nStartRef=4197;RelinkTime=15;UserLink=1;TS2_1=232;TS2_2=8189; In this scenario I want to statically link the two talk groups 232 and 8189 on timeslot 2. I also allow UserLink which allows users to link to different reflectors. The default reflector is 4197 and this gets relinked if nobody presses PTT for 15 minutes. If you need talkgroups from timeslot 1 you would probably write something like this:\nStartRef=4197;RelinkTime=15;UserLink=1;TS1_1=20;TS2_1=232;TS2_2=8189; That will also include talk group 20 from timeslot 1. I thought you can statically link up to 5 talkgroups, but I\u0026rsquo;m not sure if this information is up to date (I haven\u0026rsquo;t tried this yet, but you can do that on your own very easy).\nUpdate: Actually, you can link 9 talkgroups on every slot. Move over to the expert configuration tab #Quick edit #Whenever you feel comfortable with DMRGateway, head over to the expert settings page and select MMDVMHost. I\u0026rsquo;ve adjusted the Jitter settings \u0026ldquo;a bit\u0026rdquo;, although this should run smooth with a setting of 1000 too \u0026ndash; I\u0026rsquo;m still a bit of experimenting with this. I read a lot of times that 1000 should be fine with slower networks \u0026ndash; but you should definitely experiment yourself a bit with this setting.\nUpdate: As of today, I\u0026rsquo;d probably set Jitter to something around 0-300. Now let\u0026rsquo;s have a look at the DMR Gateway configuration. Navigate to the DMR GW expert settings. Choose DMR GW of the upper line (Quick Edit).\nDon\u0026rsquo;t forget to save the settings.\nFull edit #When you have saved that, go to the expert settings again and choose again DMR GW \u0026ndash; but this time, choose the one from the lower line (Full Edit).\nThis configuration file is split into paragraphs. Look out for the [DMR Network 1] block.\n[DMR Network 1] Enabled=1 Address=178.238.234.72 Port=62031 TGRewrite0=2,8,2,8,1 PCRewrite0=2,84000,2,84000,1001 TypeRewrite0=2,9990,2,9990 SrcRewrite0=2,84000,2,8,1001 PassAllPC0=1 PassAllTG0=1 PassAllPC1=2 PassAllTG1=2 Password=\u0026#34;***\u0026#34; Debug=0 Id=232718001 Name=BM_Germany_2622 Our next block is called [DMR Network 2].\n[DMR Network 2] Enabled=1 Address=89.185.97.34 Port=55555 TGRewrite0=1,1,1,1,7 TGRewrite1=1,10,1,10,80 TGRewrite2=1,100,1,100,100 TGRewrite3=2,232,2,232,1 TGRewrite4=2,8181,2,8181,9 TGRewrite5=2,8191,2,8191,9 TGRewrite6=2,9,2,9,1 PCRewrite0=1,9055,1,9055,6 PCRewrite1=2,9055,2,9055,6 PCRewrite2=2,4000,2,4000,1001 Password=\u0026#34;PASSWORD\u0026#34; Debug=0 Id=2327180 Name=DMR+_IPSC2-OE-DMO Options=\u0026#34;StartRef=4197;RelinkTime=15;UserLink=1;TS2_1=232;TS2_2=8189;\u0026#34; Read along here if you want to know more about the different rewrite rules.\nPOCSAG configuration # The following frequency is used in Austria. Please refer to your local amateur radio club for information about the used frequencies in your country. You may use 439.987.500 in Germany. Look here for more frequencies. Read more on https://hampager.de and on https://support.hampager.de. You need to create an account to bind your callsign to a RIC. You also need a second account for your transmitter \u0026ndash; that is when you get your AuthKey.\nThat\u0026rsquo;s it \u0026ndash; images and videos #I suppose this gets easier from time to time \u0026ndash; depending on how often I have to install this stuff on a Pi 😀\nMy Raspberry Pi 3 B # And this is the admin page of the dashboard #If you want to use the Brandmeister Manager you need to set the api key. Go to expert settings and choose BM API in the lower line. It is somewhat in the middle of the page. To get an api key visit the Brandmeister API Keys page.\nThere are some more handy links for Brandmeister:\nlist connected peers to the Austrian BM_2321 server last heard on this specific master server PiStar Remote #Restart the PiStar services with RF power from your HT.\nOh sorry, we could not show you the video!\nWe had the following sources: av1 mp4, h265 mp4, h264 mp4 Shared video Download: H264, H265, AV1 (INFO Some files might not be available.\nH264: Great compatibility, lower quality and bigger size\nH265: Very small files, but not as good as AV1\nAV1: The best quality here, but a bit bigger files as the H265 version\nAn actual browser should usually load the small H265 video per default, others might use the H264 video.\nWindows might not load H265 per default because you would probably have to install the HEVC codec from the Microsoft Store. ) Or reboot the whole Raspberry Pi.\nOh sorry, we could not show you the video!\nWe had the following sources: av1 mp4, h265 mp4, h264 mp4 Shared video Download: H264, H265, AV1 (INFO Some files might not be available.\nH264: Great compatibility, lower quality and bigger size\nH265: Very small files, but not as good as AV1\nAV1: The best quality here, but a bit bigger files as the H265 version\nAn actual browser should usually load the small H265 video per default, others might use the H264 video.\nWindows might not load H265 per default because you would probably have to install the HEVC codec from the Microsoft Store. ) To make use of PiStar Remote you need to set it up. Go to Configuration -\u0026gt; Expert and choose PiStar Remote (in the Full Edit line).\n[enable] # Is the Pi-Star Remote Enabled? (true|false) enabled=true ... [dmr] # TG commands #svckill=8999999 svcrestart=8999998 reboot=8999997 #shutdown=8999996 #hostfiles=9999995 Final words #I think this whole article is a work in progress \u0026ndash; I just always find things that I do different now and I cannot always change these things in this article too; some aren\u0026rsquo;t even wrong, they just fit better.\nI think this page is a good thing to look back to start a fresh configuration \u0026ndash; even if I have made different configuration backups from within PiStar. Addidionally I made one-to-one copies of the used sdcards \u0026ndash; just in case ;-)\nInitially I wrote this for myself, but I think this might be helpful for others too so enjoy the content and feel free to mail me if you find errors or have to add some notes on that topic.\n","date":"23 January 2020","permalink":"/posts/2020/3-hs-dual-hat-with-pistar-v4/","section":"Blog","summary":"This is a MMDVM_HS_Dual_Hat hotspot in duplex mode with DMRGateway and an actual Pi-Star image.","title":"HS Dual Hat With PiStar v4","updated":"8 March 2026"},{"content":"","date":null,"permalink":"/tags/fish-shell/","section":"Tags","summary":"","title":"Fish-Shell","updated":null},{"content":"Optimizing a bunch of images in a directory #I found these commands here coincidentally on a pull request at Github. I found them quite handy 👍\n$ find . -type f -name \u0026#34;*.png\u0026#34; -print0 | xargs -0 -I {} optipng -nb -nc \u0026#34;{}\u0026#34; $ find . -type f -name \u0026#34;*.png\u0026#34; -print0 | xargs -0 -I {} advpng -z4 \u0026#34;{}\u0026#34; $ find . -type f -name \u0026#34;*.png\u0026#34; -print0 | xargs -0 -I {} pngcrush -rem gAMA -rem alla -rem cHRM -rem iCCP -rem sRGB -rem time -ow \u0026#34;{}\u0026#34; Quickly optimizing only one image #I\u0026rsquo;ve set up a function in my .zaliases file for this to be done on a single image aswell:\nfunction opti() { optipng -nb -nc \u0026#34;$*\u0026#34;; advpng -z4 \u0026#34;$*\u0026#34;; pngcrush -rem gAMA -rem alla -rem cHRM -rem iCCP -rem sRGB -rem time -ow \u0026#34;$*\u0026#34;; } To run all three commands on a single image I just call it like that:\n$ opti image.png That\u0026rsquo;s all the magic it needs.\nUse jpegtran for JPG images #$ jpegtran -copy none -optimize -progressive -outfile output.jpg input.jpg Install these tools on your system #On debian or ubuntu\n$ sudo apt-get install optipng pngcrush advancecomp On Arch based distros using pamac\n$ sudo pamac install optipng pngcrush advancecomp (advancecomp is in AUR)\nOn macOS\n$ sudo port install optipng pngcrush advancecomp or if you use homebrew\n$ brew install optipng pngcrush advancecomp You may know other package managers commands, but I only use these.\nAn example #By filesize #The files taken from the snapshot tool on my macbook.\n33K 00_locales.png 61K 01_control-software.png 157K 02_mmdvmhost.png 184K 03_general.png 187K 04_dmrconfig.png 69K 05_exp_mmdvmhost-dmrnetwork.png 212K 06_exp_dmrgw-dmrnetwork1.png 236K 07_exp_dmrgw-dmrnetwork2.png Three to four minutes later (all three commands):\n17K 00_locales.png 33K 01_control-software.png 81K 02_mmdvmhost.png 98K 03_general.png 97K 04_dmrconfig.png 32K 05_exp_mmdvmhost-dmrnetwork.png 127K 06_exp_dmrgw-dmrnetwork1.png 144K 07_exp_dmrgw-dmrnetwork2.png By view # 25K opti_01.png 13K opti_02.png This is the unmodified image: opti_01.png And this is the optimized image: opti_02.png Do you see much difference?\nUsing this with the fish shell #I added this to my fishs configuration (when I used fish for a while).\n# file: \u0026#34;~/.config/fish/functions/opti.fish\u0026#34; function opti --description \u0026#34;Optimizes .png files\u0026#34; # Author: Dominic, OE7DRT \u0026lt;quick.hat4396@qtztsjosmprqmgtunjyf.com\u0026gt; # 2021-04-17 set -e missing for program in optipng advpng pngcrush if \\! command -v $program \u0026gt; /dev/null set -a missing $program continue end end if test -n \u0026#34;$missing\u0026#34; echo \u0026#34;Could not find executables: $missing\u0026#34; return 1 end if test -z $argv[1] echo \u0026#34;usage: opti \u0026lt;files...\u0026gt;\u0026#34; return 1 end set count (count $argv) for i in (seq 1 $count) if test ! -f $argv[$i] echo \u0026#34;Could not read file $argv[$i]...\u0026#34; continue end optipng -nb -nc \u0026#34;$argv[$i]\u0026#34;; advpng -z4 \u0026#34;$argv[$i]\u0026#34;; pngcrush -rem gAMA -rem alla -rem cHRM -rem iCCP -rem sRGB -rem time -ow \u0026#34;$argv[$i]\u0026#34;; end end And I made one for the jpeg version too:\n# file: \u0026#34;~/.config/fish/functions/jopti.fish\u0026#34; function jopti --description \u0026#34;Optimizes .jpg files\u0026#34; # Author: Dominic, OE7DRT \u0026lt;quick.hat4396@qtztsjosmprqmgtunjyf.com\u0026gt; # 2021-08-07 set -e missing for program in jpegtran if \\! command -v $program \u0026gt; /dev/null set -a missing $program continue end end if test -n \u0026#34;$missing\u0026#34; echo \u0026#34;Could not find executables: $missing\u0026#34; return 1 end if test -z $argv[1] echo \u0026#34;usage: jopti \u0026lt;files...\u0026gt;\u0026#34; return 1 end set count (count $argv) for i in (seq 1 $count) if test ! -f $argv[$i] echo \u0026#34;Could not read file $argv[$i]...\u0026#34; continue end jpegtran -copy none -optimize -progressive -outfile \u0026#34;$argv[$i]\u0026#34; \u0026#34;$argv[$i]\u0026#34; end end ","date":"20 January 2020","permalink":"/posts/2020/2-optimizing-png-images/","section":"Blog","summary":"A quick notice about three very handy tools to optimize PNG images on the command line. They work on linux and macOS. Use jpegtran for JPG images.","title":"Optimizing PNG images","updated":"20 January 2026"},{"content":"I\u0026rsquo;m not the casual amateur radio operator that always wanted to operate his own amateur radio station. I tried CB once but had to travel quite a bit to reach other stations (trucks on the highway for example). I\u0026rsquo;ve played with SDR before and tried a few things with GNUradio and gqrx but I never got deeper into this kind of things.\nJust to be clear on this: This is not a tutorial, this is a short story from my life that explains how I came to my amateur radio license. This article was already published in german on an older website. In 2019 I decided to go on a preparatory course at the local amateur radio club.\nA confirmation email was sent to me but the docs for the course had to be changed because changes have been made to austrian laws regarding amateur radio and telecommunication in general. So scripts were not up to date at that moment.\nGeneral information #The course was held in a room in a federal higher technical institute in Innsbruck.\nWe had to attend these blocks:\n1. block\nFriday, September 27, (15:00 to 20:30)\nintroduction and law pt 1 Saturday, September 28, (09:00 to 18:00)\nlaw pt 2 and engineering pt 1 2. block\nFriday, October 4, (15:00 to 20:30)\noperating technology pt 1 Saturday, October 5, (09:00 to 18:00)\nengineering pt 2 3. block\nFriday, October 11, (15:00 to 20:30)\nengineering pt 3 Saturday, October 12, (09:00 to 18:00)\nengineering pt 4 and operating technology pt 2 4. block \u0026ndash; refreshing\nSaturday, October 19, (13:00 to 17:00)\nsimulation of an exam (it was highly recommended to visit this training) Cost report #This represents the total amount of money I had to put into getting my license.\ndate and time value description 12.08.2019, Monday 75.56 € documentation scripts 27.09.2019, Friday 90.00 € the course itself 27.09.2019, Friday 14.70 € parking \u0026ldquo;Hentschelhof\u0026rdquo; 28.09.2019, Saturday 48.15 € refueling 28.09.2019, Saturday 10 € lunch 28.09.2019, Saturday 14.40 € parking \u0026ldquo;Wilten\u0026rdquo; 04.10.2019, Friday 14.40 € parking \u0026ldquo;Wilten\u0026rdquo; 05.10.2019, Saturday 10 € lunch 05.10.2019, Saturday 18.20 € parking \u0026ldquo;Altstadtgarage\u0026rdquo; 05.10.2019, Saturday 53.11 € refueling 11.10.2019, Friday 14.70 € parking \u0026ldquo;Altstadtgarage\u0026rdquo; 12.10.2019, Saturday 7 € lunch 12.10.2019, Saturday 18.20 € parking \u0026ldquo;Altstadtgarage\u0026rdquo; 12.10.2019, Saturday 45.26 € refueling 19.10.2019, Saturday 13 € parking \u0026ldquo;Markthalle\u0026rdquo; 19.10.2019, Saturday 57.08 € refueling 22.10.2019, Tuesday 28.83 € examination fee 22.10.2019, Tuesday 14.30 € examination certificate 22.10.2019, Tuesday 3 € parking \u0026ldquo;SOHO 2.0\u0026rdquo; 549.89 € total In the end I paid 203.60€ for gasoline, 27€ for lunch on Saturdays and 110.60€ for parking my car.\nAt this time I drove a BMW M140i which needed around 9 liters gas per 100 kilometers \u0026ndash; you may get away with less on that part.\nThe exam #The exam is split into three different topics: law, engineering and operating technology.\nEvery person gets three questions in law, three questions in engineering and three questions in operating technology. This happens one person at a time, so if person 1 answered the first three questions person 2 has to answer three other questions in the same topic.\nWe had to leave the room for a while when our examiners discussed our results. When we entered the room again we were told if we get a license or not 😉\nAll attendees have passed the exam and got their license. We were 15 people.\nFuture plans #Most of us have already requested their callsign. A workshop about different transeivers and antennas is planned for November 23 in Innsbruck from 09:00 to 18:00. At 19:00 a graduation party is planned at the restaurant Deck 47 in Innsbruck.\nI joined the local amateur radio club ÖVSV and I am a member of ADL714.\nMy shack is growing slowly. I own a few devices that allow me to setup a small station on short wave and on the digital sector within the DMR Austria network (IPSC2) and YSF (C4FM).\n73 de Dominic, OE7DRT\nLeaving the Austrian Amateur Radio League # This is an update written in February 2023 I am no member of the Austrian Amateur Radio League since the end of 2022.\nAs per requirement of the club I sent the letter via Austrian Post as a registered letter (I also get notified when the letter is marked as delivered).\nThe letter has been brought to the post office on 14 October 2022, and finally delivered on 18 October 2022. I wanted a confirmation (which I stated in the letter) but I got none (not until today, 12 February 2023).\nAs of today, I can only assume it was read (and understood) which (I guess) makes a confirmation unnecessary (as of today). A confirmation would have been nice and I thought normal people do that anyway (but I also left a notice in the letter).\nI find this behavior unprofessional and also a bit pathetic. I\u0026rsquo;ve held more on the club before, but just ignoring people is not something that I can support easily.\nPeople often do not show their real faces when you encounter them for the first time, but as always: time will tell.\n","date":"2 January 2020","permalink":"/posts/2020/1-how-to-get-an-amateur-radio-license-in-austria/","section":"Blog","summary":"This is a short story from my life that explains how I came to my amateur radio license.","title":"How to get an amateur radio license in Austria","updated":"7 March 2026"},{"content":"","date":null,"permalink":"/tags/life/","section":"Tags","summary":"","title":"Life","updated":null},{"content":"This is the second DMR radio that I bought. I wanted something stable, a rock-solid handheld radio that cannot be bricked, since my first DMR radio did not start any more.\nThe transmitted audio quality of this device is really good. Also the TX buffering is an awesome feature if you tend to respond immediately. It buffers your voice until TXing is ready (otherwise you can setup a TX-ready tone).\nThe radios operating frequencies are 70cm only!\nAlso analog operation is not very easy, yet alone a 1750Hz tone is hard to generate, I\u0026rsquo;ve been looking on the internet to accomplish that (in europe many repeater open after they receive that tone on their RX frequency). At least in Tirol the newer repeater are triggered with a 77Hz subtone.\nIt has a nice fit in my hands, but I rarely use this radio.\nNo channel can be entered without a computer, you may want to use the Hytera software for this only.\nI\u0026rsquo;m using Firmware v9 on this, but I\u0026rsquo;ve read that v8 would be a better choice.\nSending Hytera devices for repair is a major pain in the ass, the friendly people at the store where I bought the device had to send it over to the UK because noone in europe can replace parts\u0026hellip; that\u0026rsquo;s how it looks\u0026hellip; at least.\nThey changed the motherboard at a cost of about 150€. The whole correspondence took about 4 months (which also was a major pain) - specially when they tried to convince me to trash the device and buy another one (with some discount).\nOutput power (70cm band) #The Hytera PD785G only supports 70cm.\n","date":"31 December 2019","permalink":"/equipment/radio-stuff/handhelds/hytera-pd785g/","section":"Equipment","summary":"","title":"Hytera PD785G","updated":"3 February 2026"},{"content":"I bought this because of its ability to do APRS (TX only) and it was still affordable.\nIt cost about 180 € back in 2019.\nUnfortunately this radio got bricked whilst I tried to upload my codeplug to it.\nWhile this radio was in repair, I ordered my second DMR radio, the Hytera PD785-G.\nI wasn\u0026rsquo;t really satisfied with its receiving capabilities anyway.\n","date":"8 December 2019","permalink":"/equipment/radio-stuff/handhelds/anytone-d878uvplus/","section":"Equipment","summary":"","title":"Anytone D878UV+","updated":"3 February 2026"},{"content":"The first shortwave transceiver that I bought. I got told this has one of the best receivers and filter techniques on the beginner segment. Unfortunately this radio is a bit chunky and heavy to transport in a rucksack so I haven\u0026rsquo;t really used it that much so far \u0026ndash; I do not have a station set up at my QTH yet.\nThe date of this article is calculated back when I made the first video using this radio, because I couldn\u0026rsquo;t tell when I bought it/got it delivered exactly.\nBuilt-in soundcard and CAT control #The radio can be connected to a computer with one single USB cable which provides a virtual soundcard aswell as a CAT control interface. This makes operating digital modes dead easy.\nBig touch screen #Maybe the first thing that you might see on that radio is the big screen. It is clear and very easy to read; you can interact with your finger aswell.\nTwin filters #To separate a signal is also a very easy thing to do. Use the twin filters to narrow down the used bandwith. Long press the filter button to clear and reset those filters.\nWinlink setup # Setting on the radio Value USB SQL OFF DATA OFF MOD MIC.ACC DATA MOD USB USB MOD Level 50% CI-V Baud Rate 19200 or Auto CI-V USB Port Unlink from [REMOTE] CI-V USB Echo Back ON Set the filter to wide (FIL1, 3.0k or max) Remove any other filter like NB, NR, NF\nWinlink Express Setup\nWinlink setting Value Radio model IC-7300 Radio Control Port COM7 Baud Rate 19200 CI-V Address 94h PTT Port CI-V Enable RTS no Enable DTS no ","date":"7 December 2019","permalink":"/equipment/radio-stuff/transceivers/icom-ic7300/","section":"Equipment","summary":"","title":"Icom IC-7300","updated":"6 April 2026"},{"content":"This is the first handheld radio (and the first radio at all) that I got.\nI bought this from the local club I was member at that time for 60 €. The actual price of this radio at that time was about 70-80 €. As of today, the radios price is at 79 € (WiMo.de).\nThis is a very basic radio, it is analog only. The speaker is loud enough to let the integrated broadband receiver run on your favourite radio frequency when working outside.\nThe radio is also small enough to just take it with you when you want to quickly have a radio with you.\nI\u0026rsquo;m not using it that much. Mostly when I want to listen to a FM radio station.\n","date":"23 November 2019","permalink":"/equipment/radio-stuff/handhelds/yaesu-ft4xe/","section":"Equipment","summary":"","title":"Yaesu FT-4XE","updated":"29 September 2024"},{"content":" Browse this website via Tor Hidden Services Who Am I #Hello, my name is Dominic and I maintain this website.\nI am a licensed amateur radio operator since 2019 and my callsign is OE7DRT.\nMy QTH is Längenfeld, Tyrol, Austria. The locator for that is JN57lb.\nThere is no permanent antenna setup at my home so I sometimes setup a portable antenna at home or I operate portable from the mountains usually. I don\u0026rsquo;t have a mobile setup in my car \u0026ndash; but I sometimes put a small, magnetic UHF/VHF antenna onto the roof for a handheld radio.\nContact #My email address is\nI prefer plain text emails over html formatted emails, but any type of text is fine.\nPlease do not send me guest articles. This is not a tech magazine but my personal website. About this website #My website is a personal storage of a set of information about many different things \u0026ndash; mostly about amateur radio and linux\u0026lsquo;isch computer stuff. The main goal of my blog is for my personal usage. That is because some articles may not explain everything \u0026ndash; I hope I can reproduce a working setup (for me) with all the steps provided in these articles.\nI could have saved some links in my bookmarks, right? Well, I have. But I do that now for a long time and it sometimes happens, that one or another link becomes unavailable and hosting my own set of information does not result in these situations in any way. As long as I\u0026rsquo;m willing to host them.\nYou can use the information on these pages for yourself. Just keep in mind, that some of them may not be objective or even accurate. The opposite is true. I fill them with my opinions and experiences; some with solutions \u0026ndash; some not.\nAlso, keep in mind that the information on my websites could go offline at any time (although it is online since 2019 \u0026ndash; I used other domain names before though).\nServer location and networking #The website is server from Germany \u0026ndash; currently located in Nuremberg in a datacenter of Hetzner. The server runs on Ubuntu Linux and Caddy serves the websites at (tartarus.)oe7drt.com.\nPreviosly the website was served from Vienna, Austria from a datacenter of Anexia (Netcup).\nGNU/Linux was the host system that served the websites with Apache at (celeste.)oe7drt.com.\nThe older OpenBSD machine at bor.oe7drt.com was removed in March 2025.\nWinlink #I usually participate in the following Winlink nets:\nWLNET-OE #This is a german speaking net currently maintained by Patrick, OE1LHP.\nTo quote the groups.io description:\nThis group is for announcements and information concerning the Winlink Net \u0026ldquo;WLNET-OE\u0026rdquo;.\nIt represents some kind of Blackboard for those who want to participate and learn about the use of Winlink in not only emergency communication situations.\nAmateur radio operators from in and outside of Austria are encouraged to join the sessions. To be clear: everyone is welcome, but keep in mind that the primary language will be German.\nI try to participate every week.\nWinlink Wednesday # The original Winlink Wednesday is a weekly amateur radio digital net where check-ins are accomplished by using the Winlink (global email via amateur radio) system.\nThe primary purpose of Winlink Wednesday is to encourage the regular use of the Winlink system among amateur radio operators by providing an opportunity to expand their skills with Winlink, and to practice them on a regular basis.\nWinlink Wednesday requires the operator to send the mail via RF (not telnet). I have to either set up an antenna at my home QTH or drive near the next VHF gateway to participate in this net.\nI also try to participate every week, but it is sometimes hard to stay on course after work.\nFFWN #Well, I\u0026rsquo;m not so active on Mastodon (in terms of writing posts) but I occassionally participate in the net when I find the time.\nTo quote the website:\nFor those operators who are active on federated social media (the “Fediverse”; i.e., Mastodon), there is a weekly Winlink net called the #FediFridayWinlinkNet (or #FFWN). Any amateur operators are welcome to check-in and participate, and also to take turns serving as net control! And be sure to follow #FFWN on Mastodon.\nFind out more by following the hashtag #FFWN (example link \u0026ndash; follow it on an instance that you like/prefer).\nI try to participate whenever I can, although it is a bit hard to stay on course on a Friday after work.\n","date":null,"permalink":"/about/","section":"OE7DRT","summary":"","title":"Dominic Reich “OE7DRT”","updated":null},{"content":"i5 quad core\nIt\u0026rsquo;s still usable but playing the VP9 codecs (youtube) in fullscreen can lag sometimes.\n","date":"22 July 2017","permalink":"/equipment/laptops/lenovo-t420/","section":"Equipment","summary":"A tough laptop from Lenovo. It was quite decent when it came out.","title":"Lenovo T420","updated":"16 January 2026"},{"content":"This was my photography laptop running Lightroom and Photoshop back then. It is still a good choice: that\u0026rsquo;s why I replaced the battery in 2024.\nIt was my second choice of laptop for a long time (a bit chunky, slow and proprietary WiFi adapter) but its still powerful enough to go through the tasks if needed.\nTo get the WiFi working (with Bluetooth aswell) we need to modifiy the kernel parameters in our bootloader \u0026ndash; append brcmfmac.feature_disable=0x82000 to the already existing parameters and reboot (Archlinux wiki).\nAlso the screen is big enough to view some movies on it.\nSome resources\nhttps://wiki.archlinux.org/title/Broadcom_wireless https://wiki.archlinux.org/title/Power_management ","date":"29 September 2015","permalink":"/equipment/laptops/apple-macbook-pro/","section":"Equipment","summary":"","title":"Apple MacBook Pro 15\" Mid 2015","updated":"16 January 2026"},{"content":"I don\u0026rsquo;t use this anymore. It has a broken screen so it is packed into it\u0026rsquo;s bag and sits there in the closet.\nIt ran primarily FreeBSD mostly without X. I used this often when I had to sleep at other locations for work to check my emails and read through some newsgroups. (I do not need a computer for my work so I used this at the evenings when I was back in the appartement.)\n","date":"10 February 2014","permalink":"/equipment/laptops/lenovo-t60/","section":"Equipment","summary":"","title":"Lenovo T60","updated":"16 January 2026"},{"content":"I think this was my first laptop with hybrid graphics (Nvidia) and if I\u0026rsquo;m not mistaken, I played a lot of Battlefield 2 on this laptop.\nI used this later at work (Electrician) for programming Loxone devices.\nIt still works, but I could not install the correct audio drives on recent Windows versions.\nUsed for demonstration purposes only. It is very slow and video playback (Youtube) is not funny at all.\n","date":"29 September 2011","permalink":"/equipment/laptops/asus-x73sv/","section":"Equipment","summary":"","title":"Asus X73SV-TY152V","updated":"16 January 2026"},{"content":"Used for some basic internet tasks like reading websites and PDFs, checking mails and editing office documents.\nThis one shut itself down very often when it got too hot. It was really annoying.\n","date":"1 November 2007","permalink":"/equipment/laptops/toshiba-p100/","section":"Equipment","summary":"","title":"Toshiba Satellite Pro P100","updated":"16 January 2026"},{"content":"","date":null,"permalink":"/tags/aprs/","section":"Tags","summary":"","title":"APRS","updated":null},{"content":"Filter by category: amateur-radio, computerstuff or the new spam mails\n","date":null,"permalink":"/posts/","section":"Blog","summary":"Blog posts","title":"Blog","updated":null},{"content":"","date":null,"permalink":"/tags/diy/","section":"Tags","summary":"","title":"DIY","updated":null},{"content":"","date":null,"permalink":"/tags/dlna/","section":"Tags","summary":"","title":"DLNA","updated":null},{"content":"","date":null,"permalink":"/tags/dmr/","section":"Tags","summary":"","title":"DMR","updated":null},{"content":"","date":null,"permalink":"/tags/dns/","section":"Tags","summary":"","title":"DNS","updated":null},{"content":"","date":null,"permalink":"/tags/dvd/","section":"Tags","summary":"","title":"DVD","updated":null},{"content":"I will not write reviews of my equipment here, this page lists my equipment only. The publishing dates represent usually the day I got (bought) the stuff.\n","date":null,"permalink":"/equipment/","section":"Equipment","summary":"","title":"Equipment","updated":null},{"content":"","date":null,"permalink":"/tags/freebsd/","section":"Tags","summary":"","title":"FreeBSD","updated":null},{"content":"","date":null,"permalink":"/tags/gps/","section":"Tags","summary":"","title":"GPS","updated":null},{"content":"","date":null,"permalink":"/tags/ios/","section":"Tags","summary":"","title":"iOS","updated":null},{"content":"These are the articles tagged for the TX-500, I do also have an overview in my equipment section.\n","date":null,"permalink":"/tags/tx500/","section":"Tags","summary":"","title":"Lab599 TX-500 Discovery","updated":null},{"content":"These are some of the “best” spam mails that I received and wanted to share with you.\nPlease, don\u0026rsquo;t fall for these kind of emails!\n","date":null,"permalink":"/spam/","section":"Mail spam I received","summary":"","title":"Mail spam I received","updated":null},{"content":"","date":null,"permalink":"/tags/mmdvm/","section":"Tags","summary":"","title":"MMDVM","updated":null},{"content":"","date":null,"permalink":"/tags/mod_md/","section":"Tags","summary":"","title":"mod_md","updated":null},{"content":"","date":null,"permalink":"/tags/n1mm/","section":"Tags","summary":"","title":"N1MM","updated":null},{"content":"","date":null,"permalink":"/tags/neovim/","section":"Tags","summary":"","title":"Neovim","updated":null},{"content":"","date":null,"permalink":"/tags/networkmanager/","section":"Tags","summary":"","title":"NetworkManager","updated":null},{"content":"","date":null,"permalink":"/tags/nfs/","section":"Tags","summary":"","title":"NFS","updated":null},{"content":" This is my personal space on the internet that I use mainly to keep track on different mostly tech-related topics.\nNews\nI will dislike any video on any platform that has that annoying background laugh track in it.\n(I usually do not interact with algorithms, but I will enjoy this)\n","date":null,"permalink":"/","section":"OE7DRT","summary":"","title":"OE7DRT","updated":null},{"content":"","date":null,"permalink":"/tags/openbsd/","section":"Tags","summary":"","title":"OpenBSD","updated":null},{"content":"","date":null,"permalink":"/tags/packet-radio/","section":"Tags","summary":"","title":"Packet Radio","updated":null},{"content":"","date":null,"permalink":"/tags/pfsense/","section":"Tags","summary":"","title":"pfSense","updated":null},{"content":"","date":null,"permalink":"/tags/pistar/","section":"Tags","summary":"","title":"Pi-Star","updated":null},{"content":"","date":null,"permalink":"/tags/sdr/","section":"Tags","summary":"","title":"SDR","updated":null},{"content":"","date":null,"permalink":"/tags/systemd/","section":"Tags","summary":"","title":"systemd","updated":null},{"content":"This is a collection of tags that I use but they might not always suggest you what you are looking for.\n","date":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","updated":null},{"content":" A reminder: the VARA applications are not open source. They are proprietary software and to gain full speed you will have to buy a license of €64 (as of today, 2025-05-02). How does the community feel about VARA Is VarAC legal? Is it even desirable? ","date":null,"permalink":"/tags/vara-fm/","section":"Tags","summary":"","title":"VARA FM","updated":null},{"content":" A reminder: the VARA applications are not open source. They are proprietary software and to gain full speed you will have to buy a license of €64 (as of today, 2025-05-02). How does the community feel about VARA Is VarAC legal? Is it even desirable? ","date":null,"permalink":"/tags/vara-hf/","section":"Tags","summary":"","title":"VARA HF","updated":null},{"content":"","date":null,"permalink":"/tags/virtualbox/","section":"Tags","summary":"","title":"VirtualBox","updated":null},{"content":"","date":null,"permalink":"/tags/weewx/","section":"Tags","summary":"","title":"WeeWX","updated":null},{"content":"","date":null,"permalink":"/tags/winlink-forms/","section":"Tags","summary":"","title":"Winlink Forms","updated":null},{"content":"","date":null,"permalink":"/tags/wx/","section":"Tags","summary":"","title":"WX","updated":null},{"content":"","date":null,"permalink":"/tags/ysf/","section":"Tags","summary":"","title":"YSF","updated":null}]}