commit 4c06e374ed1684e52f043590c5127b13f77a3618 Author: Dominic Reich Date: Sun Nov 20 21:17:25 2022 +0100 first commit; still need to update content/posts diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..6e71c06 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2bfe624 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.hugo_build.lock +resources +public diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..00e77bd --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/assets/img/author.jpg b/assets/img/author.jpg new file mode 100644 index 0000000..0fd9805 Binary files /dev/null and b/assets/img/author.jpg differ diff --git a/assets/img/logo.png b/assets/img/logo.png new file mode 100644 index 0000000..14eb9dc Binary files /dev/null and b/assets/img/logo.png differ diff --git a/config/_default/config.toml b/config/_default/config.toml new file mode 100644 index 0000000..72d1291 --- /dev/null +++ b/config/_default/config.toml @@ -0,0 +1,20 @@ +# -- Site Configuration -- +# Refer to the theme docs for more details about each of these parameters. +# https://jpanther.github.io/congo/docs/getting-started/ + +# baseURL = "https://your_domain.com/" +defaultContentLanguage = "en" + +enableRobotsTXT = true +paginate = 10 +summaryLength = 0 + +# [permalinks] +# #post = '/:sections[last]/:year-:month-:day-:slug/' +# post = '/:sections[last]/:year-:month-:day-:slug/' +# # page = "/:slug/" +# # categories = "/:section/:slug/" +# categories = "/:slug/" + +[outputs] + home = ["HTML", "RSS", "JSON"] diff --git a/config/_default/languages.en.toml b/config/_default/languages.en.toml new file mode 100644 index 0000000..0d0fa4d --- /dev/null +++ b/config/_default/languages.en.toml @@ -0,0 +1,66 @@ +languageCode = "en" +languageName = "English" +displayName = "EN" +isoCode = "en" +weight = 1 +rtl = false + +title = "OE7DRT" +# logo = "img/logo.jpg" +# description = "My awesome website" +# copyright = "Copy, _right?_ :thinking_face:" +copyright = """Content © by Dominic “OE7DRT”. +Licensed as [CC BY-NC-ND 4.0](https://creativecommons.org/licenses/by-nc-nd/4.0/)""" + +dateFormat = "2 January 2006" + +[author] + name = "Dominic “OE7DRT”" + image = "img/author.jpg" + headline = "Austrian Amateur Radio Station" + bio = """Quick’n’dirty facts: mid-30s, construction worker since 2016, + electrician before, likes tech stuff and nature. Uses this website as a + digital notebook.""" + links = [ + { email = "mailto:dominic@oe7drt.com" }, + # { link = "https://link-to-some-website.com/" }, + # { amazon = "https://www.amazon.com/hz/wishlist/ls/wishlist-id" }, + # { apple = "https://www.apple.com" }, + # { blogger = "https://username.blogspot.com/" }, + # { codepen = "https://codepen.io/username" }, + # { dev = "https://dev.to/username" }, + # { discord = "https://discord.gg/invitecode" }, + # { dribbble = "https://dribbble.com/username" }, + # { facebook = "https://facebook.com/username" }, + # { flickr = "https://www.flickr.com/photos/username/" }, + # { foursquare = "https://foursquare.com/username" }, + { github = "https://github.com/oe7drt" }, + # { gitlab = "https://gitlab.com/username" }, + # { google = "https://www.google.com/" }, + # { hashnode = "https://username.hashnode.dev" }, + # { instagram = "https://instagram.com/username" }, + # { keybase = "https://keybase.io/username" }, + # { kickstarter = "https://www.kickstarter.com/profile/username" }, + # { lastfm = "https://lastfm.com/user/username" }, + # { linkedin = "https://linkedin.com/in/username" }, + { mastodon = "https://mastodon.radio/@oe7drt" }, + # { medium = "https://medium.com/username" }, + # { microsoft = "https://www.microsoft.com/" }, + # { orcid = "https://orcid.org/userid" }, + # { patreon = "https://www.patreon.com/username" }, + # { pinterest = "https://pinterest.com/username" }, + # { reddit = "https://reddit.com/user/username" }, + # { researchgate = "https://www.researchgate.net/profile/username" }, + # { slack = "https://workspace.url/team/userid" }, + # { snapchat = "https://snapchat.com/add/username" }, + # { soundcloud = "https://soundcloud.com/username" }, + # { stack-overflow = "https://stackoverflow.com/users/userid/username" }, + # { steam = "https://steamcommunity.com/profiles/userid" }, + { telegram = "https://t.me/oe7drt" }, + # { tiktok = "https://tiktok.com/@username" }, + # { tumblr = "https://username.tumblr.com" }, + # { twitch = "https://twitch.tv/username" }, + { twitter = "https://twitter.com/oe7drt" }, + # { whatsapp = "https://wa.me/phone-number" }, + { youtube = "https://youtube.com/@oe7drt" }, + ] diff --git a/config/_default/markup.toml b/config/_default/markup.toml new file mode 100644 index 0000000..c5449fc --- /dev/null +++ b/config/_default/markup.toml @@ -0,0 +1,13 @@ +# -- Markup -- +# These settings are required for the theme to function. + +[goldmark] +[goldmark.renderer] + unsafe = true + +[highlight] + noClasses = false + +[tableOfContents] + startLevel = 2 + endLevel = 4 diff --git a/config/_default/menus.en.toml b/config/_default/menus.en.toml new file mode 100644 index 0000000..87a179f --- /dev/null +++ b/config/_default/menus.en.toml @@ -0,0 +1,62 @@ +# -- Main Menu -- +# The main menu is displayed in the header at the top of the page. +# Acceptable parameters are name, pageRef, page, url, title, weight. +# +# The simplest menu configuration is to provide: +# name = The name to be displayed for this menu link +# pageRef = The identifier of the page or section to link to +# +# By default the menu is ordered alphabetically. This can be +# overridden by providing a weight value. The menu will then be +# ordered by weight from lowest to highest. + +[[main]] + name = "Blog" + pageRef = "posts" + weight = 10 + +[[main]] + name = "About" + pageRef = "about" + weight = 20 + +[[main]] + name = "Equipment" + pageRef = "equipment" + weight = 30 + +# [[main]] +# name = "Categories" +# pageRef = "categories" +# weight = 40 + +[[main]] + name = "Tags" + pageRef = "tags" + weight = 50 + + + +# -- Footer Menu -- +# The footer menu is displayed at the bottom of the page, just before +# the copyright notice. Configure as per the main menu above. + +# [[footer]] +# name = "Tags" +# pageRef = "tags" +# weight = 10 + +# [[footer]] +# name = "Categories" +# pageRef = "categories" +# weight = 10 + +[[footer]] + name = "Weather station" + url = "https://wx.oe7drt.com" + weight = 10 + +[[footer]] + name = "Links" + pageRef = "links" + weight = 20 diff --git a/config/_default/module.toml b/config/_default/module.toml new file mode 100644 index 0000000..5e3644e --- /dev/null +++ b/config/_default/module.toml @@ -0,0 +1,6 @@ +[[imports]] +path = "github.com/jpanther/congo/v2" + +[hugoVersion] + extended = false + min = "0.87.0" \ No newline at end of file diff --git a/config/_default/params.toml b/config/_default/params.toml new file mode 100644 index 0000000..24cdc74 --- /dev/null +++ b/config/_default/params.toml @@ -0,0 +1,75 @@ +# -- Theme Options -- +# These options control how the theme functions and allow you to +# customise the display of your website. +# +# Refer to the theme docs for more details about each of these parameters. +# https://jpanther.github.io/congo/docs/configuration/#theme-parameters + +colorScheme = "congo" +defaultAppearance = "dark" # valid options: light or dark +autoSwitchAppearance = true + +enableSearch = true +enableCodeCopy = true + +# mainSections = ["section1", "section2"] +# robots = "" + +[header] + layout = "hybrid" # valid options: basic, hamburger, hybrid, custom + # logo = "img/logo.jpg" + showTitle = true + +[footer] + showCopyright = true + showThemeAttribution = true + showAppearanceSwitcher = false + showScrollToTop = true + +[homepage] + layout = "profile" # valid options: page, profile, custom + showRecent = false + +[article] + showDate = true + showDateUpdated = true + showAuthor = true + showBreadcrumbs = false + showDraftLabel = true + showEdit = false + editURL = "https://github.com/oe7drt/oe7drt-website/" + editAppendPath = true + showHeadingAnchors = true + showPagination = true + invertPagination = false + showReadingTime = true + showTableOfContents = true + showTaxonomies = true + showWordCount = true + showComments = false + # sharingLinks = ["facebook", "twitter", "pinterest", "reddit", "linkedin", "email"] + sharingLinks = ["facebook", "twitter", "pinterest", "reddit", "linkedin", "email"] + +[list] + showBreadcrumbs = false + showSummary = true + showTableOfContents = false + showTaxonomies = true + groupByYear = true + paginationWidth = 1 + +[sitemap] + excludedKinds = ["taxonomy", "term"] + +[taxonomy] + showTermCount = true + +[fathomAnalytics] + # site = "ABC12345" + # domain = "llama.yoursite.com" + +[verification] + # google = "" + # bing = "" + # pinterest = "" + # yandex = "" diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..dd426da --- /dev/null +++ b/content/_index.md @@ -0,0 +1,12 @@ +--- +title: "Welcome to my personal website! :tada:" +description: "This is a demo of the Congo theme for Hugo." +--- + +{{< lead >}} +amateur radio station OE7DRT, dominic +{{< /lead >}} + +welcome all! + +good to be herea gain... diff --git a/content/about/index.md b/content/about/index.md new file mode 100644 index 0000000..bb99e4d --- /dev/null +++ b/content/about/index.md @@ -0,0 +1,132 @@ ++++ +title = "Dominic Reich “OE7DRT”" +date = 2019-08-21 +lastmod = 2022-11-12 +comment = false +showReadingTime = false +showWordCount = false + ++++ + +Hello, my name is **Dominic** and I maintain this website. +I am a licensed ham radio operator since 2019 and my callsign is **OE7DRT**. + +My QTH is **[Längenfeld]**, [Tyrol], [Austria]. The locator for that is [JN57lb]. +There is currently no antenna set up at my home QTH so I operate portable only +since the end of 2021---I've not been very active recently but I'm sure my new +lightweight equipment can help me out on that matter. + +[Längenfeld]: https://en.wikipedia.org/wiki/L%C3%A4ngenfeld +[Tyrol]: https://en.wikipedia.org/wiki/Tyrol +[Austria]: https://en.wikipedia.org/wiki/Austria +[JN57lb]: http://www.levinecentral.com/ham/grid_square.php?Grid=JN57lb + +## Some status information + +I publish new articles whenever time let me do it. As I am working 10h shifts a +day on a building site I am quite worn at the end of the day and I can't gather +myself up enough to go out in the field when I'm just hungry (and tired) +:tired_face: +I do not have an antenna set up at my home QTH so my experience relies on my +portable operations here in this mountainous region. I enjoy some walks every +now and then but I can't carry my 16 to 18 kilograms portable equipment always +with me---specially not after a work shift. + +So that is the reason that my website grows very slowly, I haven't even found +the time to write something nice about my used +[equipment]({{< ref "equipment" >}}), but occassionally I take the time +to update this or that... + +## Repeaters near my QTH + +Those are the repeaters around my home, which is around 1180m +ASL. + +The images below were made with [QTH Locator Map by **HB9EYZ**][qthloc]. + +[qthloc]: https://www.hb9eyz.ch/g_locator.php + +![OE7XGI Home](oe7xgi_home.png "OE7XGI Ötztal (about 22.8km south-east)") + +![OE7XWH Home](oe7xwh_home.png "OE7XWH Grünberg (about 22km north)") + +![OE7XOI Home](oe7xoi_home.png "OE7XOI Fiss (about 26.7km west)") + +![OE7XTR Home](oe7xtr_home.png "OE7XTR Krahberg (about 27.6km west)") + +![OE7XBI Home](oe7xbi_home.png "OE7XBI Rangger Köpfl (about 24.7km north-east)") + +![OE7XVR Home](oe7xvr_home.png "OE7XVR Valluga (about 58.5km west)") + +![OE7XRT Home](oe7xrt_home.png "OE7XRT Hahnenkamm Reutte (about 51.4km north-west)") + +![OE7XZR Home](oe7xzr_home.png "OE7XZR Zugspitze (about 40.5km north)") + +![OE7XGR Home](oe7xgr_home.png "OE7XGR Gefrorene Wand (about 53.4km east)") + +![OE7XOT Home](oe7xot_home.png "OE7XOT Obtarrenz (about 28km north-east)") + +For now, I only own some handheld radios for VHF/UHF so I do not reach +those repeaters from my terrace. I can sometimes open the first two repeaters. + +I scan those repeaters when I'm hiking and I can sometimes hear them, but they +are mostly around S0 to S1 combined with a lot of noise +and when I try to reply I won't get picked up so easy (still 5W). + +## About this website + +My website is a personal storage of a set of information about many different +things---mostly about amateur radio and linux'isch computerstuff. The main goal +of my blog is for my personal usage. That is because some articles may not +explain everything---I hope I can reproduce a working setup (for me) with all +the steps provided in these articles. + +I 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'm willing to host them. + +You can use the information on these pages for yourself. Just keep in mind, that +some of them may not be very objective or even accurate. The opposite is true. +I fill them with my opinions and experiences; some with solutions---some not. + +_Also, keep in mind that the information on my websites could go offline at +any time (although it is online since 2019)_. + +## Contact + +Use `dominic@oe7drt.com` to send me emails. + +Feel free to encrypt your message with OpenPGP, use the address mentioned above +and make sure you got this fingerprint: + +~~~ +D49A 3CE2 CCF7 2668 4D98  9A31 BC9D 6AE1 A3BE 169A +~~~ + +My public key is on [keys.openpgp.org][key] or on [my website][web] (\~4KB). + +[key]: https://keys.openpgp.org/search?q=D49A+3CE2+CCF7+2668+4D98+9A31+BC9D+6AE1+A3BE+169A +[web]: /files/A3BE169A.asc + +{{< alert >}} +Please do not send me guest articles. This is not a tech magazine but **my +personal website**. +{{< /alert >}} + +## Licenses + +The content on my website is licensed under the [CC BY-NC-ND 4.0][cc] --- +unless specified otherwise. This includes images (as well as screenshots). + +Code (programs, source code, scripts) on my website is **usually** licensed +under the [MIT license][mit]. + +For attribution a link back to my website (`oe7drt.com`) should be enough. + +[cc]: https://creativecommons.org/licenses/by-nc-nd/4.0/ +[mit]: https://en.wikipedia.org/wiki/MIT_License + +**Photographs** are more elaborately produces images and if you want to republish +any of them you have to **ask for permission before**. This also includes +**panoramas**. diff --git a/content/about/oe7xbi.png b/content/about/oe7xbi.png new file mode 100644 index 0000000..fff014d Binary files /dev/null and b/content/about/oe7xbi.png differ diff --git a/content/about/oe7xbi_home.png b/content/about/oe7xbi_home.png new file mode 100644 index 0000000..8a5efbb Binary files /dev/null and b/content/about/oe7xbi_home.png differ diff --git a/content/about/oe7xbi_oetz.png b/content/about/oe7xbi_oetz.png new file mode 100644 index 0000000..149a1bd Binary files /dev/null and b/content/about/oe7xbi_oetz.png differ diff --git a/content/about/oe7xgi.png b/content/about/oe7xgi.png new file mode 100644 index 0000000..b938d9f Binary files /dev/null and b/content/about/oe7xgi.png differ diff --git a/content/about/oe7xgi_home.png b/content/about/oe7xgi_home.png new file mode 100644 index 0000000..603b819 Binary files /dev/null and b/content/about/oe7xgi_home.png differ diff --git a/content/about/oe7xgi_oetz.png b/content/about/oe7xgi_oetz.png new file mode 100644 index 0000000..64cbc37 Binary files /dev/null and b/content/about/oe7xgi_oetz.png differ diff --git a/content/about/oe7xgr.png b/content/about/oe7xgr.png new file mode 100644 index 0000000..387acd2 Binary files /dev/null and b/content/about/oe7xgr.png differ diff --git a/content/about/oe7xgr_home.png b/content/about/oe7xgr_home.png new file mode 100644 index 0000000..e02b0bf Binary files /dev/null and b/content/about/oe7xgr_home.png differ diff --git a/content/about/oe7xgr_oetz.png b/content/about/oe7xgr_oetz.png new file mode 100644 index 0000000..3f94a0e Binary files /dev/null and b/content/about/oe7xgr_oetz.png differ diff --git a/content/about/oe7xmr.png b/content/about/oe7xmr.png new file mode 100644 index 0000000..642d03b Binary files /dev/null and b/content/about/oe7xmr.png differ diff --git a/content/about/oe7xmr_home.png b/content/about/oe7xmr_home.png new file mode 100644 index 0000000..4395705 Binary files /dev/null and b/content/about/oe7xmr_home.png differ diff --git a/content/about/oe7xmr_oetz.png b/content/about/oe7xmr_oetz.png new file mode 100644 index 0000000..2ace6bd Binary files /dev/null and b/content/about/oe7xmr_oetz.png differ diff --git a/content/about/oe7xoi.png b/content/about/oe7xoi.png new file mode 100644 index 0000000..c2b1dac Binary files /dev/null and b/content/about/oe7xoi.png differ diff --git a/content/about/oe7xoi_home.png b/content/about/oe7xoi_home.png new file mode 100644 index 0000000..cd4bd10 Binary files /dev/null and b/content/about/oe7xoi_home.png differ diff --git a/content/about/oe7xoi_oetz.png b/content/about/oe7xoi_oetz.png new file mode 100644 index 0000000..801c8d2 Binary files /dev/null and b/content/about/oe7xoi_oetz.png differ diff --git a/content/about/oe7xot.png b/content/about/oe7xot.png new file mode 100644 index 0000000..d717bdd Binary files /dev/null and b/content/about/oe7xot.png differ diff --git a/content/about/oe7xot_home.png b/content/about/oe7xot_home.png new file mode 100644 index 0000000..a910ec8 Binary files /dev/null and b/content/about/oe7xot_home.png differ diff --git a/content/about/oe7xot_oetz.png b/content/about/oe7xot_oetz.png new file mode 100644 index 0000000..dee6453 Binary files /dev/null and b/content/about/oe7xot_oetz.png differ diff --git a/content/about/oe7xrt.png b/content/about/oe7xrt.png new file mode 100644 index 0000000..ba05c63 Binary files /dev/null and b/content/about/oe7xrt.png differ diff --git a/content/about/oe7xrt_home.png b/content/about/oe7xrt_home.png new file mode 100644 index 0000000..30135d1 Binary files /dev/null and b/content/about/oe7xrt_home.png differ diff --git a/content/about/oe7xrt_oetz.png b/content/about/oe7xrt_oetz.png new file mode 100644 index 0000000..20523e3 Binary files /dev/null and b/content/about/oe7xrt_oetz.png differ diff --git a/content/about/oe7xtr.png b/content/about/oe7xtr.png new file mode 100644 index 0000000..1b76343 Binary files /dev/null and b/content/about/oe7xtr.png differ diff --git a/content/about/oe7xtr_home.png b/content/about/oe7xtr_home.png new file mode 100644 index 0000000..f4946dd Binary files /dev/null and b/content/about/oe7xtr_home.png differ diff --git a/content/about/oe7xtr_oetz.png b/content/about/oe7xtr_oetz.png new file mode 100644 index 0000000..32687d6 Binary files /dev/null and b/content/about/oe7xtr_oetz.png differ diff --git a/content/about/oe7xvr.png b/content/about/oe7xvr.png new file mode 100644 index 0000000..ebb2526 Binary files /dev/null and b/content/about/oe7xvr.png differ diff --git a/content/about/oe7xvr_home.png b/content/about/oe7xvr_home.png new file mode 100644 index 0000000..faabbd4 Binary files /dev/null and b/content/about/oe7xvr_home.png differ diff --git a/content/about/oe7xvr_oetz.png b/content/about/oe7xvr_oetz.png new file mode 100644 index 0000000..7064c04 Binary files /dev/null and b/content/about/oe7xvr_oetz.png differ diff --git a/content/about/oe7xwh.png b/content/about/oe7xwh.png new file mode 100644 index 0000000..026dc3c Binary files /dev/null and b/content/about/oe7xwh.png differ diff --git a/content/about/oe7xwh_home.png b/content/about/oe7xwh_home.png new file mode 100644 index 0000000..167aff9 Binary files /dev/null and b/content/about/oe7xwh_home.png differ diff --git a/content/about/oe7xwh_oetz.png b/content/about/oe7xwh_oetz.png new file mode 100644 index 0000000..5f11c3e Binary files /dev/null and b/content/about/oe7xwh_oetz.png differ diff --git a/content/about/oe7xzr.png b/content/about/oe7xzr.png new file mode 100644 index 0000000..8b9afda Binary files /dev/null and b/content/about/oe7xzr.png differ diff --git a/content/about/oe7xzr_home.png b/content/about/oe7xzr_home.png new file mode 100644 index 0000000..dc2b037 Binary files /dev/null and b/content/about/oe7xzr_home.png differ diff --git a/content/about/oe7xzr_oetz.png b/content/about/oe7xzr_oetz.png new file mode 100644 index 0000000..ba5d890 Binary files /dev/null and b/content/about/oe7xzr_oetz.png differ diff --git a/content/equipment/_index.md b/content/equipment/_index.md new file mode 100644 index 0000000..9be29ad --- /dev/null +++ b/content/equipment/_index.md @@ -0,0 +1,9 @@ ++++ +title = "Equipment" +groupByYear = false +showDate = false +showDateUpdated = false +showReadingTime = false +showWordCount = false + ++++ diff --git a/content/equipment/accessories/_index.md b/content/equipment/accessories/_index.md new file mode 100644 index 0000000..8cae38e --- /dev/null +++ b/content/equipment/accessories/_index.md @@ -0,0 +1,18 @@ ++++ +title = "Accessories" +summary = """like tuners, bags, masts, coax cables etc...""" +date = 2019-11-01 +tags = ["accessory", "portable", "tuner"] + +showDate = false +showDateUpdated = false +showReadingTime = false +showBreadcrumbs = true +showPagination = false +showWordCount = false + +weight = 40 + ++++ + +test \ No newline at end of file diff --git a/content/equipment/antennas/_index.md b/content/equipment/antennas/_index.md new file mode 100644 index 0000000..d2d11e2 --- /dev/null +++ b/content/equipment/antennas/_index.md @@ -0,0 +1,17 @@ ++++ +title = "Antennas" +summary = """Antenna""" +date = 2019-11-01 +tags = ["antenna", "portable", "chameleon", "sotabeams", "", "",] +showDate = false +showDateUpdated = false +showReadingTime = false +showBreadcrumbs = true +showPagination = false +showWordCount = false + +weight = 30 + ++++ + +test \ No newline at end of file diff --git a/content/equipment/handhelds/_index.md b/content/equipment/handhelds/_index.md new file mode 100644 index 0000000..dabd18b --- /dev/null +++ b/content/equipment/handhelds/_index.md @@ -0,0 +1,18 @@ ++++ +title = "Handhelds" +summary = """Handheld radios""" +date = 2019-11-01 +tags = ["handheld", "portable", "icom", "yaesu", "radioddity", "wouxon", +"anytone", "hytera"] +showDate = false +showDateUpdated = false +showReadingTime = false +showBreadcrumbs = true +showPagination = false +showWordCount = false + +weight = 20 + ++++ + +test \ No newline at end of file diff --git a/content/equipment/handhelds/anytone-d878uvplus/index.md b/content/equipment/handhelds/anytone-d878uvplus/index.md new file mode 100644 index 0000000..01a543a --- /dev/null +++ b/content/equipment/handhelds/anytone-d878uvplus/index.md @@ -0,0 +1,10 @@ +--- +title: Anytone D878UV+ +date: 2022-02-26T10:41:54+01:00 +showBreadcrumbs: true + +--- + +The first DMR radio of mine. + +http://anytone.net/pro_info93.html \ No newline at end of file diff --git a/content/equipment/handhelds/icom-id52/QsoLog-example.png b/content/equipment/handhelds/icom-id52/QsoLog-example.png new file mode 100644 index 0000000..6faa9d8 Binary files /dev/null and b/content/equipment/handhelds/icom-id52/QsoLog-example.png differ diff --git a/content/equipment/handhelds/icom-id52/index.md b/content/equipment/handhelds/icom-id52/index.md new file mode 100644 index 0000000..a2ce452 --- /dev/null +++ b/content/equipment/handhelds/icom-id52/index.md @@ -0,0 +1,109 @@ +--- +title: Icom ID-52 +summary: > + A really awesome handheld radio---and it does D-STAR as a bonus. + Check it out---it's cool! +date: 2021-12-23T14:20:47+01:00 +showBreadcrumbs: true + +--- + +[Product page](https://www.icomjapan.com/lineup/products/ID-52E/) + +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't much used this on digital yet but I heard people saying it to be ok +on digital mode (D-STAR). + +## Easy to use T-CALL and SQL + +### T-CALL + +Right away: there are two ways to open a repeater with a 1750Hz tone. + +1. Push _PTT_ like you would perform a double-click with your computer mouse + and hold _PTT_ on the second "click". +2. Open _MENU >> SET >> DTMF/T-CALL >> 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). + +Press _SQL_ and move the main dial for one click, the actual squelch setting +appears on the bottom of the screen (default: AUTO). + +- Turn the dial further left to open up the squelch permanently---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---it should re-arrange the scan list for you while you're moving. + +I'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_. + +## Recordings + +### Memo recorder + +Goto _MENU >> RECORD >> Voice Recorder >> 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 >> VoiceRec_. + +### QSO 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 >> Voice_. + +### QSO 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 >> QsoLog_. Open them with your +favourite text editor or any spreadsheet program. I got an example for this one +right here: + +![QsoLogger example](QsoLog-example.png) + +### Rx 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 >> RxLog_. + +### Voice Tx + +Files for this will be in _ID-52 >> VoiceTx_ on the SD-card. Set this up in +_MENU >> VOICE_. That can be used for automated CQ-calls or similar. I haven't +used this yet. + +### DV Auto Reply + +This should send your recorded clip automatically on incoming calls. Also this +is something that I haven't used yet, but to make the list complete, you know. +I have no idea where this is going to be saved. + +## 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't +used this either for now. + +{{< alert >}} +Unfinished post +I'd like to add stuff, but time you know... I'd like to add some quotes from +the manual as well. +{{< /alert >}} \ No newline at end of file diff --git a/content/equipment/handhelds/radioddity-gd77/import-dmr-ids-menu.jpg b/content/equipment/handhelds/radioddity-gd77/import-dmr-ids-menu.jpg new file mode 100644 index 0000000..78cf385 Binary files /dev/null and b/content/equipment/handhelds/radioddity-gd77/import-dmr-ids-menu.jpg differ diff --git a/content/equipment/handhelds/radioddity-gd77/import-dmr-ids.jpg b/content/equipment/handhelds/radioddity-gd77/import-dmr-ids.jpg new file mode 100644 index 0000000..66fbe26 Binary files /dev/null and b/content/equipment/handhelds/radioddity-gd77/import-dmr-ids.jpg differ diff --git a/content/equipment/handhelds/radioddity-gd77/index.md b/content/equipment/handhelds/radioddity-gd77/index.md new file mode 100644 index 0000000..989379c --- /dev/null +++ b/content/equipment/handhelds/radioddity-gd77/index.md @@ -0,0 +1,100 @@ +--- +title: Radioddity GD-77 +summary: > + Consider the OpenGD77 firmware and you're all set with a very user friendly + and customizable handheld radio. +date: 2020-10-22T23:19:14+02:00 +showBreadcrumbs: true +showReadingTime: false +showWordCount: false + +--- + +[Product page][1] — [OpenGD77 website][2] + +[1]: https://www.radioddity.com/products/radioddity-gd-77-dmr-two-way-radio +[2]: https://www.opengd77.com/downloads/ + +This 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. + +## udev-Rules for Linux + +~~~rb +# USB rules for GD-77 +# Place this in /etc/udev/rules.d/ to let all users talk to the radios by USB. + +# +SUBSYSTEM=="usb", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0073", MODE="0666" + +# HIDAPI/libusb +SUBSYSTEM=="usb", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0073", MODE="0666" +SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0094", MODE="0666" + +# HIDAPI/hidraw +KERNEL=="hidraw*", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0073", MODE="0666" +KERNEL=="hidraw*", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0094", MODE="0666" + +# HIDAPI/hiddev +## We need to unbind this device, otherwise LibUsb will fail to SetConfiguration() and ClaimInterface() +# For Bootloader (usbhid) +KERNEL=="hiddev*", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0073", MODE="0666", RUN+="/bin/bash -c 'ID=$(IFS=/; read -a array <<< %p; echo ${array[-3]}); echo $ID > /sys/bus/usb/drivers/usbhid/unbind'" + +# OpenGD77 +KERNEL=="ttyACM[0-9]*", SUBSYSTEM=="tty", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0094", MODE="0666", GROUP="dialout", SYMLINK+="OpenGD77" +~~~ + +If you want do reload udev with the new rules, run: + +~~~console +$ udevadm control --reload-rules && udevadm trigger +~~~ + +## Original boot tone melody + +The originally used boot-up melody. I'm not sure if it changed already, but this +was on my GD-77 when I first installed the OpenGD77 firmware. + +~~~plain +38,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 | +| :--- | :--- | +| ![OE7DRT Boot-up picture white](rendeer512_white.png) | ![OE7DRT Boot-up picture black (inverted)](rendeer512_black.png) | + +## Importing DMR-IDs + +Open _Extras >> Download callsign database_ and fetch the data that you want. + +![Import menu](import-dmr-ids-menu.jpg) + +Set 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. + +![Import dialog](import-dmr-ids.jpg) + +I 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. + +If you don't have a proper file to start with use this one here. It contains +these regions: `232, 262, 263, 264, 222, 228`. +[Download](/files/dmrids_2021-12-12.csv.xz "26477 callsigns") (\~170KB) + +Or: 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't want all +entries from `232`. [Read along here][3] for some instructions about this. + +[3]: {{< ref 2020-11-16-create-your-own-dmrid-database-file >}} + +## Band scope (Spectrum sweep scan) + +I'm not sure when this feature was implemented, but OpenGD77 now supports +an easy to use band scope on the GD-77. + +Press and hold the hash key # when in VFO mode to enter this feature. diff --git a/content/equipment/handhelds/radioddity-gd77/rendeer512_black.png b/content/equipment/handhelds/radioddity-gd77/rendeer512_black.png new file mode 100644 index 0000000..a8aa0f9 Binary files /dev/null and b/content/equipment/handhelds/radioddity-gd77/rendeer512_black.png differ diff --git a/content/equipment/handhelds/radioddity-gd77/rendeer512_white.png b/content/equipment/handhelds/radioddity-gd77/rendeer512_white.png new file mode 100644 index 0000000..4fc615b Binary files /dev/null and b/content/equipment/handhelds/radioddity-gd77/rendeer512_white.png differ diff --git a/content/equipment/handhelds/yaesu-ft3d/index.md b/content/equipment/handhelds/yaesu-ft3d/index.md new file mode 100644 index 0000000..d15675d --- /dev/null +++ b/content/equipment/handhelds/yaesu-ft3d/index.md @@ -0,0 +1,89 @@ +--- +title: Yaesu FT-3D +date: 2020-05-24T20:48:51+02:00 +showBreadcrumbs: true + +--- + +C4FM as one of the easiest digital operating mode to set up. Enter your +callsign and you're good to go. + +https://www.yaesu.com/indexVS.cfm?cmd=DisplayProducts&ProdCatID=111&encProdID=84807B1262BFED6AC816544D94D310E3&DivisionID=65&isArchived=0 + +All in all, the FT-3D is a nice and handy radio. + +## Keys and buttons + +I like the arrangement of the `PTT` and the knob on the top is very usable. + +## Easy 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. + +### Opening 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. + +## Full APRS + +But it cannot use [Voice Alert][va]. 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. + +[va]: http://www.aprs.org/VoiceAlert3.html + +## Color 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. + +## Transmit power + +The FT-3D supports 4 power levels: LOW1 (0.3W), LOW2 (1W), LOW3 (2.5W) and +HIGH (5W). + +## 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'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. + +## Dual 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. + +For shortwave listening (only AM, no SSB), a longer antenna may not be a bad +idea. + +## AF-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. + +## Built-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. + +## Cross-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. + +## Recordings + +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. diff --git a/content/equipment/software/_index.md b/content/equipment/software/_index.md new file mode 100644 index 0000000..284b9ae --- /dev/null +++ b/content/equipment/software/_index.md @@ -0,0 +1,17 @@ ++++ +title = "Software" +summary = """Software I use or tested""" +date = 2019-11-01 +tags = ["software", "cqrlog", "n1mm", "log4om", "qlog", "klog"] +showDate = false +showDateUpdated = false +showReadingTime = false +showBreadcrumbs = true +showPagination = false +showWordCount = false + +weight = 50 + ++++ + +test \ No newline at end of file diff --git a/content/equipment/transceivers/_index.md b/content/equipment/transceivers/_index.md new file mode 100644 index 0000000..ccf14e4 --- /dev/null +++ b/content/equipment/transceivers/_index.md @@ -0,0 +1,16 @@ ++++ +title = "Transceivers" +summary = """trans ceivers""" +date = 2022-11-16T22:19:11+01:00 +tags = ["transceiver", "portable", "icom", "yaesu", "lab599"] + +showDate = false +showDateUpdated = false +showReadingTime = false +showBreadcrumbs = true +showPagination = false +showWordCount = false + +weight = 10 + ++++ \ No newline at end of file diff --git a/content/equipment/transceivers/icom-ic7300/index.md b/content/equipment/transceivers/icom-ic7300/index.md new file mode 100644 index 0000000..9025cb0 --- /dev/null +++ b/content/equipment/transceivers/icom-ic7300/index.md @@ -0,0 +1,28 @@ +--- +title: Icom IC-7300 +date: 2022-02-20T14:20:47+01:00 +showBreadcrumbs: true + +--- + +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't really +used it that much so far---I do not have a station set up at my QTH yet. + +## Built-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. + +## Big 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. + +## Twin 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. diff --git a/content/equipment/transceivers/yaesu-fd891/index.md b/content/equipment/transceivers/yaesu-fd891/index.md new file mode 100644 index 0000000..fafe98b --- /dev/null +++ b/content/equipment/transceivers/yaesu-fd891/index.md @@ -0,0 +1,66 @@ +--- +title: Yaesu FT-891 +date: 2022-02-20T14:20:47+01:00 +lastmod: 2022-11-12T19:51:31+01:00 +showBreadcrumbs: true +# showReadingTime: false +# showWordCount: false + +--- + +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. + +I bought the 891 back in 2020, so this is not usable on 60 meters (like the +IC-7300). + +## Excellent receiver + +I think this radio is quite similar to the IC-7300 in its receiving quality. +Lots of options in the function menues help you to concentrate on the actual +voice you receive. + +## Good 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't like the resulting voice that much. Way +better works the autonotch filter (_DNF_), +which is an awesome feature to have. + +## Record 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--- +can't refer to this much because I'm not contesting nor do I use this function +so far. + +## Good size + +I like it's size when it's beeing still a 100 W transceiver. Nonetheless it +drains the battery with 1 A when listening. + +## Digital 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't care about that bug._ + +## Tactical carrying system: 891escort ™ + +Made from aluminium the [891escort](https://portablezero.com/yaesu857D.html) +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---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. + +Some people recommend using a short LAN cable to get the socket outside, but I +haven't found a good one yet (and a short one). diff --git a/content/links/index.md b/content/links/index.md new file mode 100644 index 0000000..e579924 --- /dev/null +++ b/content/links/index.md @@ -0,0 +1,16 @@ ++++ +title = "Links" +summary = """Listing links of (hopefully) useful websites""" +date = "2022-11-20T15:56:36+01:00" +#lastmod = "" +#categories = ["amateur-radio"] +#tags = [""] +showReadingTime = false +showWordCount = false + ++++ + +cool links here + +* https://w0chp.net/w0chp-pistar-dash/ +* https://qrper.com/ diff --git a/content/posts/2020-01-02-how-to-get-an-amateur-radio-license-in-austria/index.md b/content/posts/2020-01-02-how-to-get-an-amateur-radio-license-in-austria/index.md new file mode 100644 index 0000000..a14b9fc --- /dev/null +++ b/content/posts/2020-01-02-how-to-get-an-amateur-radio-license-in-austria/index.md @@ -0,0 +1,120 @@ +--- +title: How to get an amateur radio license in Austria +summary: > + This is a short story from my life that explains how I came to my amateur + radio license. +date: 2020-01-02T17:01:26+01:00 +#categories: [index] +tags: [life] + +--- + +I'm not the casual ham radio operator that always wanted to operate his own +ham radio station. I tried CB once but had to travel quite a bit to reach other +stations (trucks on the highway for example). I've played with SDR before and +tried a few things with GNUradio and gqrx but I never got deeper into this kind +of things. + +{{< alert circle-info >}} +Just 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. +{{< /alert >}} + +In 2019 I decided to go on a [preparatory course](https://oe7.oevsv.at/veranstaltungen/veranstaltungen-00001/Amateurfunkkurs-in-Innsbruck/) +at the local ham radio club. + +A 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 ham radio and +telecommunication in general. So scripts were not up to date at that moment. + +## General information + +The course was held in a room in a federal higher technical institute in +Innsbruck. + +We had to attend these blocks: + +**1. block** + - **Friday, September 27, (15:00 to 20:30)** + introduction and law pt 1 + - **Saturday, September 28, (09:00 to 18:00)** + law pt 2 and engineering pt 1 + +**2. block** + - **Friday, October 4, (15:00 to 20:30)** + operating technology pt 1 + - **Saturday, October 5, (09:00 to 18:00)** + engineering pt 2 + +**3. block** + - **Friday, October 11, (15:00 to 20:30)** + engineering pt 3 + - **Saturday, October 12, (09:00 to 18:00)** + engineering pt 4 and operating technology pt 2 + +**4. block---refreshing** + - **Saturday, October 19, (13:00 to 17:00)** + simulation 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. + +| date 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 "Hentschelhof" | +| 28.09.2019, Saturday | 48.15 € | refueling | +| 28.09.2019, Saturday | 10 € | lunch | +| 28.09.2019, Saturday | 14.40 € | parking "Wilten" | +| 04.10.2019, Friday | 14.40 € | parking "Wilten" | +| 05.10.2019, Saturday | 10 € | lunch | +| 05.10.2019, Saturday | 18.20 € | parking "Altstadtgarage" | +| 05.10.2019, Saturday | 53.11 € | refueling | +| 11.10.2019, Friday | 14.70 € | parking "Altstadtgarage" | +| 12.10.2019, Saturday | 7 € | lunch | +| 12.10.2019, Saturday | 18.20 € | parking "Altstadtgarage" | +| 12.10.2019, Saturday | 45.26 € | refueling | +| 19.10.2019, Saturday | 13 € | parking "Markthalle" | +| 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 "SOHO 2.0" | +| | **549.89 €** | **total** | + +In the end I paid **203.60€** for gasoline, **27€** for lunch on Saturdays and +**110.60€** for parking my car. +At this time I drove a BMW M140i which needed around 9 liters gas per 100 +kilometers---you may get away with less on that part. + +## The exam + +The exam is split into three different topics: law, engineering and operating +technology. + +Every 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. + +We 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 :wink: + +All attendees have passed the exam and got their license. We were 15 people. + +## Future 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. + +I joined the local ham radio club **ÖVSV** and I am a member of **ADL714**. + +My 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). + +73 de Dominic, OE7DRT diff --git a/content/posts/2020-01-20-optimizing-png-images/index.md b/content/posts/2020-01-20-optimizing-png-images/index.md new file mode 100644 index 0000000..10f85df --- /dev/null +++ b/content/posts/2020-01-20-optimizing-png-images/index.md @@ -0,0 +1,201 @@ +--- +title: Optimizing PNG images +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. +categories: [computerstuff] +tags: [til-zsh,til-fish,reminders] +date: 2020-01-20T20:34:20+01:00 + +--- + +## Optimizing a bunch of images in a directory + +I found these commands here coincidentally on a +[pull request](https://github.com/xianmin/hugo-theme-jane/pull/266) at Github. +I found them quite handy :+1: + +~~~console +$ find . -type f -name "*.png" -print0 | xargs -0 -I {} optipng -nb -nc "{}" +$ find . -type f -name "*.png" -print0 | xargs -0 -I {} advpng -z4 "{}" +$ find . -type f -name "*.png" -print0 | xargs -0 -I {} pngcrush -rem gAMA -rem alla -rem cHRM -rem iCCP -rem sRGB -rem time -ow "{}" +~~~ + +## Quickly optimizing only one image + +I've set up a function in my `.zaliases` file for this to be done on a single +image aswell: + +~~~zsh +function opti() { + optipng -nb -nc "$*"; + advpng -z4 "$*"; + pngcrush -rem gAMA -rem alla -rem cHRM -rem iCCP -rem sRGB -rem time -ow "$*"; +} +~~~ + +To run all three commands on a single image I just call it like that: + +~~~console +$ opti image.png +~~~ + +That's all the magic it needs. + +## Use jpegtran for JPG images + +~~~console +$ jpegtran -copy none -optimize -progressive -outfile output.jpg input.jpg +~~~ + +## Install these tools on your system + +On debian or ubuntu + +~~~console +$ sudo apt-get install optipng pngcrush advancecomp +~~~ + +On Arch based distros using pacman + +~~~console +$ sudo pacman -S optipng pngcrush advancecomp +~~~ + +On macOS + +~~~console +$ sudo port install optipng pngcrush advancecomp +~~~ + +or if you use homebrew + +~~~console +$ brew install optipng pngcrush advancecomp +~~~ + +You may know other package managers commands, but I only use these. + +## An example + +### By filesize + +The files taken from the snapshot tool on my macbook. + +~~~plain + 33K 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): + +~~~plain + 17K 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 + +~~~plain + 25K opti_01.png + 13K opti_02.png +~~~ + +![Original image](opti_01.png "This is the unmodified image: `opti_01.png`") ![Optimized image](opti_02.png "And this is the optimized image: `opti_02.png`") + +Do you see much difference? + +## Using this with the **fish** shell + +I added this to my fishs configuration (when I used fish for a while). + +~~~fish +# file: "~/.config/fish/functions/opti.fish" +function opti --description "Optimizes .png files" + # Author: Dominic, OE7DRT + # 2021-04-17 + set -e missing + + for program in optipng advpng pngcrush + if \! command -v $program > /dev/null + set -a missing $program + continue + end + end + + if test -n "$missing" + echo "Could not find executables: $missing" + return 1 + end + + if test -z $argv[1] + echo "usage: opti " + return 1 + end + + set count (count $argv) + + for i in (seq 1 $count) + if test ! -f $argv[$i] + echo "Could not read file $argv[$i]..." + continue + end + + optipng -nb -nc "$argv[$i]"; + advpng -z4 "$argv[$i]"; + pngcrush -rem gAMA -rem alla -rem cHRM -rem iCCP -rem sRGB -rem time -ow "$argv[$i]"; + end +end +~~~ + +And I made one for the jpeg version too: + +~~~fish +# file: "~/.config/fish/functions/jopti.fish" +function jopti --description "Optimizes .jpg files" + # Author: Dominic, OE7DRT + # 2021-08-07 + set -e missing + + for program in jpegtran + if \! command -v $program > /dev/null + set -a missing $program + continue + end + end + + if test -n "$missing" + echo "Could not find executables: $missing" + return 1 + end + + if test -z $argv[1] + echo "usage: jopti " + return 1 + end + + set count (count $argv) + + for i in (seq 1 $count) + if test ! -f $argv[$i] + echo "Could not read file $argv[$i]..." + continue + end + + jpegtran -copy none -optimize -progressive -outfile "$argv[$i]" "$argv[$i]" + end +end +~~~ diff --git a/content/posts/2020-01-20-optimizing-png-images/opti_01.png b/content/posts/2020-01-20-optimizing-png-images/opti_01.png new file mode 100644 index 0000000..80341ff Binary files /dev/null and b/content/posts/2020-01-20-optimizing-png-images/opti_01.png differ diff --git a/content/posts/2020-01-20-optimizing-png-images/opti_02.png b/content/posts/2020-01-20-optimizing-png-images/opti_02.png new file mode 100644 index 0000000..99de0da Binary files /dev/null and b/content/posts/2020-01-20-optimizing-png-images/opti_02.png differ diff --git a/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/00_locales.png b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/00_locales.png new file mode 100644 index 0000000..3088cfd Binary files /dev/null and b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/00_locales.png differ diff --git a/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/01_control-software.png b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/01_control-software.png new file mode 100644 index 0000000..c9474d0 Binary files /dev/null and b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/01_control-software.png differ diff --git a/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/02_mmdvmhost.png b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/02_mmdvmhost.png new file mode 100644 index 0000000..b06a6bb Binary files /dev/null and b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/02_mmdvmhost.png differ diff --git a/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/03_general.png b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/03_general.png new file mode 100644 index 0000000..15d9899 Binary files /dev/null and b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/03_general.png differ diff --git a/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/04_dmrconfig.png b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/04_dmrconfig.png new file mode 100644 index 0000000..ae373df Binary files /dev/null and b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/04_dmrconfig.png differ diff --git a/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/05_exp_mmdvmhost-dmrnetwork.png b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/05_exp_mmdvmhost-dmrnetwork.png new file mode 100644 index 0000000..c5181c9 Binary files /dev/null and b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/05_exp_mmdvmhost-dmrnetwork.png differ diff --git a/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/06_exp_dmrgw-dmrnetwork1.png b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/06_exp_dmrgw-dmrnetwork1.png new file mode 100644 index 0000000..6d65a95 Binary files /dev/null and b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/06_exp_dmrgw-dmrnetwork1.png differ diff --git a/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/07_exp_dmrgw-dmrnetwork2.png b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/07_exp_dmrgw-dmrnetwork2.png new file mode 100644 index 0000000..81dba3e Binary files /dev/null and b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/07_exp_dmrgw-dmrnetwork2.png differ diff --git a/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/08_raspberrypi.jpg b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/08_raspberrypi.jpg new file mode 100644 index 0000000..ee10c20 Binary files /dev/null and b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/08_raspberrypi.jpg differ diff --git a/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/09_dashboard-admin.png b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/09_dashboard-admin.png new file mode 100644 index 0000000..bcdbe57 Binary files /dev/null and b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/09_dashboard-admin.png differ diff --git a/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/10_pocsag.png b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/10_pocsag.png new file mode 100644 index 0000000..c63be5c Binary files /dev/null and b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/10_pocsag.png differ diff --git a/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/11_df_output.png b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/11_df_output.png new file mode 100644 index 0000000..3ba3182 Binary files /dev/null and b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/11_df_output.png differ diff --git a/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/index.md b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/index.md new file mode 100644 index 0000000..a6ec117 --- /dev/null +++ b/content/posts/2020-01-23-hs-dual-hat-with-pistar-v4/index.md @@ -0,0 +1,454 @@ ++++ +title = "HS Dual Hat With PiStar v4" +summary = """This is a MMDVM_HS_Dual_Hat hotspot in duplex mode with DMRGateway +and an actual Pi-Star image.""" +categories = ["amateur-radio"] +tags = ["pistar","dmr","ysf","dstar","hotspot","mmdvm"] +date = 2020-01-23T15:03:35+01:00 +lastmod = 2022-08-19T18:49:56+02:00 + ++++ + +I've been playing with Pi-Star now for a while and I finally got my +IPSC2-Brandmeister dual-setup working. + +I'm using the beta version v4 because I read somewhere, that DUAL-HATS won't +work properly with the older v3 firmware---but I never really tested the v3. +Instead I went for v4 straight away as it seemed pretty stable anyway. + +Now, 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. + +It 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. + +## The 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 :wink: + +Before 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 (ConfigurationExpertSSH Access). The login details for SSH are +the same as on the dashboard. + +Now you got the filesystem writable, so start the keyboard configuration: + +~~~console +$ 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---except you have other needs. + +Then start generating the locales for your environment. + +~~~console +$ sudo dpkg-reconfigure locales +~~~ + +Choose the locales that you need or want. My setup looks like this: + +{{< figure caption="If you don't know what to choose, go with your language and the UTF-8 version." src="00_locales.png" alt="locales setup" >}} + +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`---this is the file that gets sourced via +`.bashrc` in the default pi-star setup. + +Quick and dirty---my current `.bash_aliases` on my Pi-Stars looks like this: + +~~~bash +# File: "~/.bash_aliases" +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 ] && alias df='/usr/bin/pydf' || alias df='df -h' + +alias digg='dig +noall +answer' +alias dt='dmesg | tail' + +alias mm="multitail ${DMRGW} ${MMDVM}" +alias mmdmr="multitail ${DMRGW}" +alias mmdv="multitail ${MMDVM}" +alias mmdap="multitail ${DAPNET}" + +# Screen and Tmux alike +alias sc='screen -DR Screen_A' +alias tm='tmux -u new-session -A -s Tmux_A' + +# ls +alias l='ls -1A' +alias la='ls -lah' +alias lc='lt -c' +alias lk='ll -Sr' +alias ll='ls -lh' +alias lad='ls -lah|more' +alias lld='ls -lh|more' +alias lm='la | "$PAGER"' +alias ln='nocorrect ln -i' +alias lni='nocorrect ln -i' +alias locate='noglob locate' +alias lr='ll -R' +alias ls='ls --group-directories-first --color=auto' +alias lt='ll -tr' +alias lu='lt -u' +alias lx='ll -XB' + +alias ducks='du -cks * | sort -rn | head' + +alias confcat="sed -e 's/#.*//;/^\s*$/d' "$@"" +~~~ + +### Optional + +More software that comes in handy from time to time. + +~~~console +$ sudo apt-get install htop lsof nmap arping vim pydf multitail git ldnsutils +~~~ + +{{< figure caption="`pydf` in combination with the alias from above displays a short and colored output when you list your diskspace with `df`" src="11_df_output.png" alt="an example output of `pf`" >}} + +#### 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! + +~~~console +$ sudo apt-get install vnstat +~~~ + +Add the following line to your `/etc/fstab` file. I assume that you still +have the filesystem writable---if not, run `rpi-rw`. + +~~~plain +# file: "/etc/fstab" +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: + +~~~plain +# file: "/etc/fstab" +#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. + +~~~console +$ sudo rm /var/lib/vnstat/* +$ sudo mount -a +$ sudo systemctl restart vnstatd +~~~ + +Now run `vnstat` to display network interface statistics. It's output could +look similar to this one: + +~~~plain + rx / tx / total / estimated + eth0: Not enough data available yet. + wlan0: + Jän '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. + +{{< alert triangle-exclamation >}} +If you want to save them forever, you won't have +to create a ramdisk like above, but **you also have to make sure that +PiStar does not mount the volumes read-only!** +{{< /alert >}} + +## Make the filesystem read-only again + +Once you finished your setup, make the filesystem read-only again. + +~~~console +$ rpi-ro +~~~ + +## Start setting up your Pi-Star MMDVM + +{{< alert lightbulb >}} +The MMDVM services restart every time you hit +the **Apply Changes** button. So when hitting the button wait a few seconds +-- this takes some time to complete ;-) +{{< /alert >}} + +### Talkgroup setup + +This setup uses some talk groups from IPSC2/DMR+ and the rest from Brandmeister. +Specifically these talkgroups are: + +* Timeslot 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. + +### Simplex 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. + + +{{< figure src="01_control-software.png" alt="Control Software configuration" caption="Make sure to use Duplex Repeater in order to use different RX and TX frequencies." >}} + +### MMDVMHost + +{{< figure src="02_mmdvmhost.png" alt="MMDVMHost configuration" caption="Choose the modes that you want to use. I only use DMR and POCSAG for now." >}} + +### General information about the station + +{{< figure src="03_general.png" alt="general information" caption="Put in your own callsign and your DMR-ID---~~register your callsign~~ if you don'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)." >}} + +{{< alert triangle-exclamation >}} +**Update:** The URL above is outdated. `ham-digital.org` was the european +version of `radioid.net`---those two were merged together and you can apply +for your personal DMR-ID +[over here at radioid.net](https://www.radioid.net/account/register#!). +{{< /alert >}} + +### DMR configuration + +{{< alert circle-info >}} +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. +{{< /alert >}} + +{{< figure src="04_dmrconfig.png" alt="DMR configuration" caption="" >}} + +Choose the Brandmeister master server you want to connect to. Also set a +password in [Brandmeisters SelfCare](https://brandmeister.network/?page=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: + +~~~ini +StartRef=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: + +~~~ini +StartRef=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'm not sure if this information is up +to date (I haven't tried this yet, but you can do that on your own very easy). + +{{< alert circle-info >}} +**Update**: Actually, you can link **9 talkgroups on every slot**. +{{< /alert >}} + +### 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've adjusted the Jitter settings "a bit", although +this should run smooth with a setting of `1000` too---I'm still a bit of +experimenting with this. I read a lot of times that `1000` should be fine with +slower networks---but you should definitely experiment yourself a bit with this +setting. + +{{< alert circle-info >}} +**Update**: As of today, I'd probably set _Jitter_ to something around 0-300. +{{< /alert >}} + +{{< figure src="05_exp_mmdvmhost-dmrnetwork.png" alt="DMR jitter configuration" caption="" >}} + +Now let'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). + +{{< figure src="06_exp_dmrgw-dmrnetwork1.png" alt="DMR Network 1 configuration" caption="" >}} + +{{< figure src="07_exp_dmrgw-dmrnetwork2.png" alt="DMR Network 2 configuration" caption="" >}} + +Don't forget to save the settings. + +#### Full edit + +When you have saved that, go to the expert settings again and choose again +**DMR GW**---**but this time, choose the one from the lower line (Full Edit)**. + +This configuration file is split into paragraphs. Look out for the +`[DMR Network 1]` block. + +~~~ini +[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="***" +Debug=0 +Id=232718001 +Name=BM_Germany_2622 +~~~ + +Our next block is called `[DMR Network 2]`. + +~~~ini +[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="PASSWORD" +Debug=0 +Id=2327180 +Name=DMR+_IPSC2-OE-DMO +Options="StartRef=4197;RelinkTime=15;UserLink=1;TS2_1=232;TS2_2=8189;" +~~~ + +[Read along here](https://github.com/g4klx/DMRGateway/wiki/Rewrite-Rules) +if you want to know more about the different rewrite rules. + +### POCSAG configuration + +{{< alert circle-info >}} +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](https://hampager.de/dokuwiki/doku.php?id=dapnetfrq) for more frequencies. +{{< /alert >}} + +{{< figure src="10_pocsag.png" alt="POCSAG configuration" caption="" >}} + +Read more on and on . You +need to create an account to bind your callsign to a +RIC. You also need a second account +for your transmitter---that is when you get your AuthKey. + +## That's it---images and videos + +I suppose this gets easier from time to time---depending on how often I have to +install this stuff on a Pi :grinning: + +### My Raspberry Pi 3 B + +{{< figure src="08_raspberrypi.jpg" alt="my raspberry pi 3" caption="" >}} + +### 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](https://brandmeister.network/?page=profile-api). + +{{< figure src="09_dashboard-admin.png" alt="Dashboard - Admin view" caption="" >}} + +There are some more handy links for Brandmeister: + +* [list connected peers to the Austrian BM_2321 server][list] +* [last heard on this specific master server][lh] + +[list]: http://94.199.173.125/status/list.htm +[lh]: https://brandmeister.network/?page=lh&Master=2321 + +### PiStar Remote + +Restart the PiStar services with RF power from your HT. + +{{< youtube id="lTh1p-eVGxQ" >}} + +Or reboot the whole Raspberry Pi. + +{{< youtube id="hFyEL6kfRco" >}} + +To make use of PiStar Remote you need to set it up. Go to *Configuration -> +Expert* and choose *PiStar Remote* (in the Full Edit line). + +~~~ini +[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*---I just always find things +that I do different now and I cannot always change these things in this article +too; some aren't even wrong, they just fit better. + +I think this page is a good thing to look back to start a fresh configuration -- +even if I have made different configuration backups from within PiStar. +Addidionally I made one-to-one copies of the used sdcards---just in case ;-) + +Initially 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](/about/#contact) if you +find errors or have to add some notes on that topic. diff --git a/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_01_gps.png b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_01_gps.png new file mode 100644 index 0000000..3e469c5 Binary files /dev/null and b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_01_gps.png differ diff --git a/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_02_gps.png b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_02_gps.png new file mode 100644 index 0000000..09e2f8f Binary files /dev/null and b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_02_gps.png differ diff --git a/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_03_network.png b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_03_network.png new file mode 100644 index 0000000..84770f5 Binary files /dev/null and b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_03_network.png differ diff --git a/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_04_channel.png b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_04_channel.png new file mode 100644 index 0000000..cf6cd80 Binary files /dev/null and b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_04_channel.png differ diff --git a/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_05_buttons.png b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_05_buttons.png new file mode 100644 index 0000000..d5b45a7 Binary files /dev/null and b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_05_buttons.png differ diff --git a/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_06_basic.png b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_06_basic.png new file mode 100644 index 0000000..2024201 Binary files /dev/null and b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_06_basic.png differ diff --git a/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_07_aprs_route_9050.png b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_07_aprs_route_9050.png new file mode 100644 index 0000000..45c5c59 Binary files /dev/null and b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_07_aprs_route_9050.png differ diff --git a/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_08_aprs_route_9057.png b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_08_aprs_route_9057.png new file mode 100644 index 0000000..68daffe Binary files /dev/null and b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_08_aprs_route_9057.png differ diff --git a/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_09_aprs_ssid_working.png b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_09_aprs_ssid_working.png new file mode 100644 index 0000000..653465a Binary files /dev/null and b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_09_aprs_ssid_working.png differ diff --git a/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_10_aprs_ssid_notworking.png b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_10_aprs_ssid_notworking.png new file mode 100644 index 0000000..3b10576 Binary files /dev/null and b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_10_aprs_ssid_notworking.png differ diff --git a/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_11_aprs_ssid_hotspot.png b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_11_aprs_ssid_hotspot.png new file mode 100644 index 0000000..30eba00 Binary files /dev/null and b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_11_aprs_ssid_hotspot.png differ diff --git a/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_12_aprsdirect.png b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_12_aprsdirect.png new file mode 100644 index 0000000..91b3e35 Binary files /dev/null and b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/hyt_12_aprsdirect.png differ diff --git a/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/index.md b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/index.md new file mode 100644 index 0000000..0877dd5 --- /dev/null +++ b/content/posts/2020-01-27-aprs-with-hytera-pd785g-v9/index.md @@ -0,0 +1,113 @@ +--- +title: APRS With The Hytera PD785G +summary: > + This article is based on the Firmware v9. If you still have v8 do not upgrade--- + the v8 is still the better choice! If you need a tutorial for v8 have a look + at [this website](https://dmraustria.at/gps-einstellungen-fuer-aprs-bei-hytera-geraeten/)--- + it is in german though. +categories: [amateur-radio] +tags: [dmr,aprs,hytera] +date: 2020-01-27T17:34:01+01:00 + +--- + +I've read many articles about the Hytera PD785G, APRS, GPS, IPSC2, DMR+, +Brandmeister and what not... + +These are the settings that I currently run with. + +## GPS settings + +These settings remain the same as on the v8 firmware. + +{{< figure src="hyt_01_gps.png" alt="GPS settings" caption="" >}} + +Also this remains the same -- make sure to disable *Quick GPS* and enable +*RSSI Report*. + +{{< figure src="hyt_02_gps.png" alt="GPS settings" caption="" >}} + +You 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*. + +## Network settings + +Set the Control Center ID to `9057` if you want to appear as portable device. + +{{< figure src="hyt_03_network.png" alt="network settings" caption="" >}} + +You can also use any of those number-symbol combinations. + +| RRS & 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. + +{{< figure src="hyt_04_channel.png" alt="channel settings" caption="" >}} + +You can also set `Slot Operation` to `Pseudo +Trunk` -- that would let you hear statically linked talkgroups of +another timeslot too. + +## Buttons + +Did you set `Button` as a GPS Trigger? Then you want +to configure a button here. + +{{< figure src="hyt_05_buttons.png" alt="buttons settings" caption="" >}} + +## Basic settings + +For what I have tested this works quite well. Although [Brandmeister +recommends][bm] to set the `Data Bearer Service` to +`Compressed IP` if you want to use text messaging. + +[bm]: https://wiki.brandmeister.network/index.php/Hytera/Radios#Text_Messaging + +{{< figure src="hyt_06_basic.png" alt="basic settings" caption="" >}} + +## Examples + +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`. + +{{< figure src="hyt_08_aprs_route_9057.png" alt="route with the ssid 7" caption="The route looks like this when transmitted as CALLSIGN-7." >}} + + +{{< figure src="hyt_07_aprs_route_9050.png" alt="route without ssid" caption="The route looks like that when no SSID is appended to the CALLSIGN." >}} + +When transmitted with SSID a location point looks like this: + +{{< figure src="hyt_09_aprs_ssid_working.png" alt="location with ssid" caption="" >}} + +and without SSID: + +{{< figure src="hyt_10_aprs_ssid_notworking.png" alt="location without ssid" caption="" >}} + +There 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 -- which sended +out a beacon for my callsign only. This might not be compatible to each other -- +time will tell... + +{{< figure src="hyt_11_aprs_ssid_hotspot.png" alt="hotspot beacon" caption="" >}} + +In case you don't know that site yet, there is also ~~~~ as +an alternative to -- I love the realtime raw package feed. +I use them both here and there. + +{{< figure src="hyt_12_aprsdirect.png" alt="aprsdirect.com station info" caption="" >}} diff --git a/content/posts/2020-02-04-get-dmrids-on-the-command-line/index.md b/content/posts/2020-02-04-get-dmrids-on-the-command-line/index.md new file mode 100644 index 0000000..d37251d --- /dev/null +++ b/content/posts/2020-02-04-get-dmrids-on-the-command-line/index.md @@ -0,0 +1,189 @@ +--- +title: Get DMRIDs Via Command Line +summary: This is a quick workaround to retrieve a DMRID on console or terminal. +categories: [amateur-radio] +tags: [dmr,pistar,script] +date: 2020-02-04T13:05:25+01:00 + +--- + +You want to install `w3m`. It is a text browser. Don't forget `rpi-rw` before +installing anything if you're on Pi-Star. + +~~~console +$ 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. + +~~~bash +# file: "~/bin/call" +#!/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 > /dev/null 2>&1 || { echo >&2 "w3m not found"; exit 1; } + +print_usage () { + echo >&2 "usage: `basename $0` [dmr_id | callsign]" + exit 1 +} + +if [ $# -ne 1 ] +then + print_usage +fi + +getID () { + CALL=`echo $1 | tr a-z A-Z` + FILE=/tmp/$CALL + w3m "https://ham-digital.org/dmr-userreg.php?callsign=$CALL" > $FILE + c=`grep $CALL $FILE | wc -l | xargs` + + while [ $c -gt 0 ] + do + OUT=`grep $CALL $FILE | head -n $c | tail -n 1 | awk '{ print $4,$5,$2,$3 }'` + echo "$OUT" + ((c--)) + done + rm $FILE +} + +getCALLSIGN () { + ID=$1 + FILE=/tmp/$ID + w3m "https://ham-digital.org/dmr-userreg.php?usrid=$ID" > $FILE + CALL=`grep $ID $FILE | awk '{ print $4 }'` + rm $FILE + if [ -z $CALL ] + then + exit 1 + fi + getID $CALL +} + +checkID () { + if [[ ! $1 =~ ^[0-9]{7}$ ]] + then + echo >&2 "no valid dmr_id supplied" + exit 1 + fi +} + +if [ "$1" -eq "$1" ] 2>/dev/null +then + ID="$1" + checkID $ID +else + CALL="$1" +fi + +if [ ! -z $ID ] +then + getCALLSIGN $ID + exit 0 +elif [ ! -z $CALL ] +then + getID $CALL + exit 0 +else + print_usage +fi +~~~ + +{{< alert note >}} +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. +{{< /alert >}} + +## Example usage + +Simply get one DMRID (or two, depends on the callsign though): + +~~~console +$ call OE7DRT +~~~ + +Now let's think a bit more complex. You can use the script in a loop. Let's fetch +some austrian callsigns only. + +~~~console +$ for i in 7one 7two 1three; do call oe$i ids >>! 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 < ids`. + +~~~console +OE7ONE Username1 0007001 2018-05-12 +OE7TWO Username2 0007003 2018-12-08 +OE7TWO Username2 0007002 2018-11-09 +OE1ONE Username3 0001001 2020-03-13 +~~~ + +*I've been anonymizing the data a bit.* + +## Partially known callsign + +***I anonymized some DMR-IDs on this website.*** + +So 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'll get a +quick answer on the command line: + +~~~console +$ 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`. + +This works also if you missed one letter. + +~~~console +$ 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. + +Or even with more letters, but this will take a while, since this will start +**676 (26x26) website lookups to ham-digital.org**---maybe they'll block +your IP address quickly, if you hammer their server with so many request in a +short period of time. + +~~~console +$ 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. + +{{< alert note >}} +The output above was made with an older version of the script. The output now +contains also the registration date as seen in previous examples. +{{< /alert >}} diff --git a/content/posts/2020-02-16-nextion-dmr-last-heard-dashboard/index.md b/content/posts/2020-02-16-nextion-dmr-last-heard-dashboard/index.md new file mode 100644 index 0000000..2708dd6 --- /dev/null +++ b/content/posts/2020-02-16-nextion-dmr-last-heard-dashboard/index.md @@ -0,0 +1,80 @@ +--- +title: My Nextion 2.4\" DMR Last Heard Dashboard +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. +categories: [amateur-radio] +tags: [nextion,dmr] +date: 2020-02-16T12:43:34+01:00 + +--- + +## The display + +When I got the display there was already a Screen Layout installed---it was +probably the Layout of [PD0DIB]. + +[PD0DIB]: https://github.com/PD0DIB/Nextion_HAM-radio-screens/tree/master/MODEL%208/GLOBE + +We're talking about a `NX3224T024_011`. + + +{{< figure src="nxt_01_display.jpg" alt="display" caption="" >}} + +My dashboard now looks like this: + +{{< figure src="nxt_01_display-lh.jpg" alt="display" caption="" >}} + +The 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]. + +[here]: https://github.com/WA6HXG/MMDVM-Nextion-Screen-Layouts/blob/master/Info%20Sheets/Status%20Codes%20and%20Fields.txt + +Also 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. + +{{< figure src="nxt_02_screens.png" alt="overview" caption="" >}} + +## The editor + +The most HMI files I found online were made with the older version of Nextion +Editor---v53. It is the Nextion Editor LTS version. It is available on +[nextion.tech](https://nextion.tech/nextion-editor/). + +For the editor to work you need to install a Microsoft Visual C++ +Redistributable Package---Nextion Editor is a 32bit application, so choose +the 32bit version (`vc_redist.x86.exe`). + +## TFT files and HMI files + +I'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 "opened" 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. + +**TFT files are the compiled output of HMI files.** + +## Get the files + +I've setup a repository on Github for my screen---for now there is one layout +online. It only displays a last heard table with callsign and talkgroup for DMR. +I'd like to have this for a bigger screen but I'm not sure when I'll find the +time for it. + +- + +What the actual dashboard looks like. + +{{< youtube id="uqIErzgr3zQ" >}} + +## Resources + +I've found several resources that I want to list in no particular order here. + +- +- +- diff --git a/content/posts/2020-02-16-nextion-dmr-last-heard-dashboard/nxt_01_display-lh.jpg b/content/posts/2020-02-16-nextion-dmr-last-heard-dashboard/nxt_01_display-lh.jpg new file mode 100644 index 0000000..d0157be Binary files /dev/null and b/content/posts/2020-02-16-nextion-dmr-last-heard-dashboard/nxt_01_display-lh.jpg differ diff --git a/content/posts/2020-02-16-nextion-dmr-last-heard-dashboard/nxt_01_display.jpg b/content/posts/2020-02-16-nextion-dmr-last-heard-dashboard/nxt_01_display.jpg new file mode 100644 index 0000000..3df610e Binary files /dev/null and b/content/posts/2020-02-16-nextion-dmr-last-heard-dashboard/nxt_01_display.jpg differ diff --git a/content/posts/2020-02-16-nextion-dmr-last-heard-dashboard/nxt_02_screens.png b/content/posts/2020-02-16-nextion-dmr-last-heard-dashboard/nxt_02_screens.png new file mode 100644 index 0000000..cd953f8 Binary files /dev/null and b/content/posts/2020-02-16-nextion-dmr-last-heard-dashboard/nxt_02_screens.png differ diff --git a/content/posts/2020-02-22-mountint-ext4-filesystem-on-macos-readonly/index.md b/content/posts/2020-02-22-mountint-ext4-filesystem-on-macos-readonly/index.md new file mode 100644 index 0000000..04c5a44 --- /dev/null +++ b/content/posts/2020-02-22-mountint-ext4-filesystem-on-macos-readonly/index.md @@ -0,0 +1,30 @@ +--- +title: Mountint Ext4 Filesystem On MacOS Readonly +summary: An overview of how to mount your Pi-Star sdcard on a mac machine. +categories: [computerstuff] +tags: [pistar,macos,reminders] +date: 2020-02-22T09:33:44+01:00 + +--- + +##### Installing the needed tools + +~~~console +$ brew cask install osxfuse +$ brew install ext4fuse +~~~ + +##### Mount the disk on your filesystem + +~~~console +$ ext4fuse /dev/disk2s2 pi-star +~~~ + +##### Users, groups, write permissions, &c + +If you feel that you have to add yourself to another usergroup, then do that +as the following code suggests: + +~~~console +$ sudo dseditgroup -o edit -a $username -t user $groupname +~~~ diff --git a/content/posts/2020-03-28-my-7inch-dmr-dashboard/index.md b/content/posts/2020-03-28-my-7inch-dmr-dashboard/index.md new file mode 100644 index 0000000..fed7f6d --- /dev/null +++ b/content/posts/2020-03-28-my-7inch-dmr-dashboard/index.md @@ -0,0 +1,115 @@ +--- +title: My 7-Inch DMR Dashboard +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---it offers way more possibilities. +categories: [amateur-radio] +tags: [nextion,dmr] +date: 2020-03-28T12:42:44+01:00 + +--- + +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. + +## Model and overview + +I'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]({{< ref "2020-02-16-nextion-dmr-last-heard-dashboard" >}}#the-editor). + +{{< figure src="nxt07_00.jpg" alt="Nextion back view / model" caption="" >}} + +Have 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](#management-view). + +{{< figure src="nxt07_01.png" alt="Screen Debug Preview" caption="" >}} + +{{< alert warning >}} +You will need NextionDriver installed to use **all the buttons** on the +SYSTEM page. +{{< /alert >}} + +~~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. + +{{< alert note "Update on March 31, 2020" >}} +The screen works fine on Pi-Star v4, but without NextionDrivers you won't be +able to use the start/stop buttons on the system page. In fact, you won'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. +{{< /alert >}} + +Choose Nextion Layout L3 HS on Pi-Star---the screen runs with **115200 baud**. + +### Get NextionDriver + +- + +You may also find [NextionDriverInstaller] helpful. + +[NextionDriverInstaller]: https://github.com/on7lds/NextionDriverInstaller + +## Get the files (HMI and TFT) + +Download the files from my github repository. + +- + +*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).* + +## Management view + +By "clicking" 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. + +Although I hate to say it, but I had to run MMDVMHost as user *root*---otherwise +the screen went all black. I'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. + +Maybe this is the reason why MMDVMHost runs as root on Pi-Star v4 too. + +{{< youtube id="oGkDzS5MtuA" >}} + +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. + +At 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. + +Most of the code in `shrinklog` has been taken from Pi-Star, which is why I +won'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. + +## Pictures and images + +The dashboard looks something like this. On your own transmissions there is also +RSSI and BER information available. + +{{< figure src="nxt07_02.jpg" alt="7 inch dashboard" caption="" >}} + +The duration of the transmission does not match with the duration on the web +dashboard, but it gives a simple idea of its lenght. I'm not a good programmer +so I'll let this for now. + +## Resources + +- diff --git a/content/posts/2020-03-28-my-7inch-dmr-dashboard/nxt07_00.jpg b/content/posts/2020-03-28-my-7inch-dmr-dashboard/nxt07_00.jpg new file mode 100644 index 0000000..fced94c Binary files /dev/null and b/content/posts/2020-03-28-my-7inch-dmr-dashboard/nxt07_00.jpg differ diff --git a/content/posts/2020-03-28-my-7inch-dmr-dashboard/nxt07_01.png b/content/posts/2020-03-28-my-7inch-dmr-dashboard/nxt07_01.png new file mode 100644 index 0000000..cc86113 Binary files /dev/null and b/content/posts/2020-03-28-my-7inch-dmr-dashboard/nxt07_01.png differ diff --git a/content/posts/2020-03-28-my-7inch-dmr-dashboard/nxt07_02.jpg b/content/posts/2020-03-28-my-7inch-dmr-dashboard/nxt07_02.jpg new file mode 100644 index 0000000..c350e9d Binary files /dev/null and b/content/posts/2020-03-28-my-7inch-dmr-dashboard/nxt07_02.jpg differ diff --git a/content/posts/2020-05-17-change-the-bands-in-your-anytone-codeplug/index.md b/content/posts/2020-05-17-change-the-bands-in-your-anytone-codeplug/index.md new file mode 100644 index 0000000..66ceb86 --- /dev/null +++ b/content/posts/2020-05-17-change-the-bands-in-your-anytone-codeplug/index.md @@ -0,0 +1,54 @@ +--- +title: Change The Bands In Your Anytone Codeplug +summary: > + If you can't change the band edges on your Anytone radio, change the band + setting in the codeplug. +categories: [amateur-radio] +tags: [macos,anytone,dmr,reminders] +date: 2020-05-17T11:38:31+02:00 + +--- + +This is as simple and straight-forward as it could be. + +## Let'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. + +But I've read on social media (Telegram) that some people were not able to +change their bands---mostly users of mobile radios. In this conversation +[Arnold, OE1IAH](http://oe1iah.at) shared his work-around for this. + +He just changed the 17th byte in the codeplug file so the bands in +the codeplug matched the bands used on the radio. + +I use Linux on my computers so I usually have such tools installed already: + +```console +$ printf '\x03' | dd of=codeplug.rdt bs=1 seek=17 count=1 conv=notrunc +``` +## Why would you need this? + +In Austria many of us use the website [dmraustria.at](http://dmraustria.at). The +codeplug for a Anytone radio had the bands set to `0` while some OMs could +not change the bands on their radios so the CPS did not let them write the +codeplug to the radio. + +With this method you can change the bands in the codeplug so you can write the +codeplug to your radio even if you did not change the bands to `0`. + +## Bands 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` | diff --git a/content/posts/2020-11-14-error-with-signed-commits/index.md b/content/posts/2020-11-14-error-with-signed-commits/index.md new file mode 100644 index 0000000..6755ecd --- /dev/null +++ b/content/posts/2020-11-14-error-with-signed-commits/index.md @@ -0,0 +1,36 @@ +--- +title: Error with signed commits +categories: [computerstuff] +tags: [til-git,reminders] +date: 2020-11-14T23:22:42+01:00 + +--- + +For some reason my git commits failed when I re-enabled gpg signing. This is how +I finally fixed that problem. + + + +##### Add to `~/.gnupg/gpg.conf` + +~~~plain +use-agent +pinentry-mode loopback +~~~ + +##### And add to `~/.gnupg/gpg-agent.conf` + +~~~plain +allow-loopback-pinentry +~~~ + +##### Restart the agent + +~~~console +$ echo RELOADAGENT | gpg-connect-agent +~~~ + +This information was found on +[d.sb/2016/11/gpg-inappropriate-ioctl-for-device-errors][1]. + +[1]: https://d.sb/2016/11/gpg-inappropriate-ioctl-for-device-errors diff --git a/content/posts/2020-11-14-keep-up-to-date-on-forked-repositories/index.md b/content/posts/2020-11-14-keep-up-to-date-on-forked-repositories/index.md new file mode 100644 index 0000000..8485a09 --- /dev/null +++ b/content/posts/2020-11-14-keep-up-to-date-on-forked-repositories/index.md @@ -0,0 +1,28 @@ +--- +title: Keep up-to-date on forked repositories +categories: [computerstuff] +tags: [til-git,reminders] +date: 2020-11-14T23:20:16+01:00 + +--- + +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... + + + +This snippet has been taken from [github.community][1]. + +[1]: https://github.community/t/update-a-forked-repository-when-the-original-repository-is-updated/1855/3 + +```console +$ 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. diff --git a/content/posts/2020-11-15-operating-the-z-shell/index.md b/content/posts/2020-11-15-operating-the-z-shell/index.md new file mode 100644 index 0000000..6ab15e0 --- /dev/null +++ b/content/posts/2020-11-15-operating-the-z-shell/index.md @@ -0,0 +1,118 @@ +--- +title: Operating the Z-Shell +categories: [computerstuff] +tags: [til-zsh,reminders] +date: 2020-11-15T00:35:22+01:00 + +--- + +This article is a summary of +[reasoniamhere.com/.../outrageously-useful-tips-to-master-your-z-shell/][1]. +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 ;-) + + + +{{< alert note >}} +*None of the following commands on this page are my own.* +{{< /alert >}} + +[1]: https://reasoniamhere.com/2014/01/11/outrageously-useful-tips-to-master-your-z-shell/ + +## File picking + +```zsh +# 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 + +```zsh +# list text files that end in a number from 1 to 10 +ls -l Sites/**/*<1-10>.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't start with a lower or uppercase c +ls -l Sites/**/[^cC]*.txt +``` + +## Glob qualifiers + +```zsh +# 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]) +``` + +```zsh +ls -l Sites/**/*(.Lm-2mh-1om[1,3]) +# you won'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't allow spaces +# between qualifiers, so you'll get an error +``` + +[Read more](http://zsh.sourceforge.net/Doc/Release/Expansion.html#Filename-Generation) +in section 14.8.7 of the manual. + +## Modifiers + +Modifiers are preceded with a colon (`:`). + +```zsh +# 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. +``` diff --git a/content/posts/2020-11-16-create-your-own-dmrid-database-file/index.md b/content/posts/2020-11-16-create-your-own-dmrid-database-file/index.md new file mode 100644 index 0000000..fa3489d --- /dev/null +++ b/content/posts/2020-11-16-create-your-own-dmrid-database-file/index.md @@ -0,0 +1,217 @@ +--- +title: Create your own DMR-ID database file +summary: > + Sometimes you just need to create your own files. Mainly for the GD-77 + because of its limited memory. +categories: [amateur-radio] +tags: [dmr, script] +date: 2020-11-16T23:23:51+01:00 + +--- + +Let's start with the website [ham-digital.org](https://ham-digital.org/). It +contains the user database of registered DMR-IDs worldwide. + +{{< alert note "Update" >}} +While these scripts still work, the website `ham-digital.org` is dead and the +european database has been put together on [radioid.net](https://radioid.net). +{{< /alert >}} + +~~**Are you still waiting for your confirmation email?** You may +[look at the registration site][reg], which contains links to the list of open +registrations or the list of local administrators.~~ + +[reg]: https://register.ham-digital.org/ + +Okay, 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]({{< ref "equipment" >}}). + +`ref "equipment/handheld/radioddity-gd77" ` + +## Download 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. + +~~~php +#!/usr/bin/env php + +~~~ + +## 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. + +~~~php +#!/usr/bin/env php + +~~~ + +## 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. + +~~~php +#!/usr/bin/env php + +~~~ diff --git a/content/posts/2020-11-22-virtual-machine-on-big-sur-not-starting/index.md b/content/posts/2020-11-22-virtual-machine-on-big-sur-not-starting/index.md new file mode 100644 index 0000000..2ca6097 --- /dev/null +++ b/content/posts/2020-11-22-virtual-machine-on-big-sur-not-starting/index.md @@ -0,0 +1,37 @@ +--- +title: My virtual windows machine from VirtualBox on Big Sur will not start +summary: > + A quick fix if your virtual machine will not start. As long, as you got the + same configuration as me +categories: [computerstuff] +tags: [macos,virtualbox,reminders] +date: 2020-11-22T18:02:45+01:00 + +--- + +Okay, a quick one. I've updated my macbook now to Big Sur today. A lot of files +have been copied and moved and written and so on -- I think that update was +something around 12 GB of files to download... + +So my virtual windows machine won'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. + +Now to make things short: I restarted the macbook, went straight into recovery +mode and fired up the terminal. + +The command `csrutil status` told me, that my system was in an undefined state. +I'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. + +To enable Apples protection system, type this command: + +~~~console +$ csrutil enable +~~~ + +After that, type `reboot` and hit enter. + +This 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. diff --git a/content/posts/2020-12-21-forking-git-repositories/index.md b/content/posts/2020-12-21-forking-git-repositories/index.md new file mode 100644 index 0000000..61af71d --- /dev/null +++ b/content/posts/2020-12-21-forking-git-repositories/index.md @@ -0,0 +1,213 @@ +--- +title: Forking GIT-repositories +summary: > + So this is working for me now. Keeping up-to-date with my upstream github + repository. +date: 2020-12-21T12:13:30+01:00 +categories: [computerstuff] +tags: [til-git,reminders] + +--- + +For me, git repositories are a complex thing. As I wrote in an [earlier article][1] +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. + +[1]: {{< ref "2020-11-14-keep-up-to-date-on-forked-repositories" >}} + +But 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. + +Time will tell, if this is a good approach... + +**I 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'm all up to learn this stuff the right way. +{:.note} + +## If you have commits in your history + +Let's take my prezto repository and add the upstream repository to it. + +~~~console +$ git log +commit d321120fdebb84c7dc282a05eaaa57fdaf56987b (HEAD -> master) +Author: Dominic Reich +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 +Date: Mon Dec 7 07:15:45 2020 +0100 + + adds aliases on darwin; fix ostype for raspberry pi + +commit 63569c97a25c3910dfb1dad5a0e170850c5b4b67 +Author: Dominic Reich +Date: Sun Nov 29 20:41:37 2020 +0100 + + adds zaliases + +commit 3877758908c60e24d4dce093ff8570135b7dfb19 +Author: Dominic Reich +Date: Sat Nov 28 19:26:00 2020 +0100 + + personalized + +commit b7a80d99a84e718f30a076b27b090d3e998ad135 (upstream/master, origin/master, origin/HEAD) +Author: Roman Perepelitsa +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. + +This 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. + +Now, create our patchfile. + +~~~console +$ git format-patch -5 HEAD > ../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. + +We continue using the master branch and getting upstream/master. + +~~~console +$ git checkout master +Bereits auf 'master' +Ihr Branch ist auf demselben Stand wie 'origin/master'. +$ git pull upstream master +Warning: Permanently added 'github.com,140.82.121.4' (RSA) to the list of known hosts. +Von github.com:sorin-ionescu/prezto + * branch master -> 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. + +~~~console +$ patch -p1 < ../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. + +Run `git diff` to view the changes on the files. + +Make your changes now and create a new commit. + +~~~console +$ git add . +$ gcm 'personalized' +[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 'github.com,140.82.121.4' (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 -> master +~~~ + +The history now looks like this: + +~~~console +$ git log +commit 3d19001518997c29204457fe2d1119fc9830010c (HEAD -> master, origin/master, origin/HEAD) +Author: Dominic Reich +Date: Mon Dec 21 12:08:25 2020 +0100 + + personalized + +commit b7a80d99a84e718f30a076b27b090d3e998ad135 (upstream/master) +Author: Roman Perepelitsa +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 + +~~~console +$ git checkout main +Bereits auf 'main' +Ihr Branch ist auf demselben Stand wie 'origin/main'. +$ git reset upstream/main +Nicht zum Commit vorgemerkte Änderungen nach Zurücksetzung: +M html/js/config.js +M logtailer.ini +$ git diff > ../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 -> main (forced update) +$ patch -p1 < ../changes.patch +patching file html/js/config.js +patching file logtailer.ini +$ git add . +$ git commit -m 'personalize' +[main 4789400] personalize + 2 files changed, 7 insertions(+), 6 deletions(-) +$ git push +Warning: Permanently added 'github.com,140.82.121.3' (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 -> main +~~~ + +You now have the history of your upstream repository and only one commit on top +of the history. + +PS: I've removed the full email addresses on `git log` outputs. diff --git a/content/posts/2021-08-08-win10-grub2-and-uefi/grub-customizer.png b/content/posts/2021-08-08-win10-grub2-and-uefi/grub-customizer.png new file mode 100644 index 0000000..521795a Binary files /dev/null and b/content/posts/2021-08-08-win10-grub2-and-uefi/grub-customizer.png differ diff --git a/content/posts/2021-08-08-win10-grub2-and-uefi/index.md b/content/posts/2021-08-08-win10-grub2-and-uefi/index.md new file mode 100644 index 0000000..7e6b202 --- /dev/null +++ b/content/posts/2021-08-08-win10-grub2-and-uefi/index.md @@ -0,0 +1,58 @@ +--- +title: Win10, Grub 2 and UEFI +summary: > + I finally got my broken Grub configuration fixed. Booting Windows from Grub + wasn't very hard back in the days, but the old "version" doesn't work with + the newer **UEFI**-typed computers. Now... looking at it... it does not look + very complicated either ;-) +date: 2021-08-08 +categories: [computerstuff] +tags: [linux,windows,grub,reminders] + +--- + +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't able to boot it right away. + +But I researched a bit again and found this: + + + +I 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). + +My laptop runs Arcolinux, so to configure Grub I had to find the specific files. +It is `/etc/grub.d/proxifiedScripts/custom` -- which could be also configured +in the app `grub-customizer` (I found that out when I already modified the file). + +Not 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. + +The plain file in `/etc/grub.d/proxifiedScripts/` looks like this: + +~~~cfg +# file: "/etc/grub.d/proxifiedScripts/custom" +#!/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 'exec tail' line above. +menuentry "Windows 10"{ + search -s root -f /EFI/Microsoft/Boot/BCD + chainloader /EFI/Microsoft/Boot/bootmgfw.efi + boot +} +menuentry "Reboot"{ + 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). + +{{< figure src="grub-customizer.png" alt="example screenshot" caption="Grub-customizer" >}} + +Save and apply the new configuration, reboot and enjoy the comfort. diff --git a/content/posts/2021-08-12-running-n1mm-logger-on-linux/01_dotnet40.png b/content/posts/2021-08-12-running-n1mm-logger-on-linux/01_dotnet40.png new file mode 100644 index 0000000..b6b4594 Binary files /dev/null and b/content/posts/2021-08-12-running-n1mm-logger-on-linux/01_dotnet40.png differ diff --git a/content/posts/2021-08-12-running-n1mm-logger-on-linux/02_45restart.png b/content/posts/2021-08-12-running-n1mm-logger-on-linux/02_45restart.png new file mode 100644 index 0000000..1fb044a Binary files /dev/null and b/content/posts/2021-08-12-running-n1mm-logger-on-linux/02_45restart.png differ diff --git a/content/posts/2021-08-12-running-n1mm-logger-on-linux/03_fullinstall.png b/content/posts/2021-08-12-running-n1mm-logger-on-linux/03_fullinstall.png new file mode 100644 index 0000000..876b0ab Binary files /dev/null and b/content/posts/2021-08-12-running-n1mm-logger-on-linux/03_fullinstall.png differ diff --git a/content/posts/2021-08-12-running-n1mm-logger-on-linux/04_update.png b/content/posts/2021-08-12-running-n1mm-logger-on-linux/04_update.png new file mode 100644 index 0000000..eb2542c Binary files /dev/null and b/content/posts/2021-08-12-running-n1mm-logger-on-linux/04_update.png differ diff --git a/content/posts/2021-08-12-running-n1mm-logger-on-linux/05_desktopicons.png b/content/posts/2021-08-12-running-n1mm-logger-on-linux/05_desktopicons.png new file mode 100644 index 0000000..b3d5a85 Binary files /dev/null and b/content/posts/2021-08-12-running-n1mm-logger-on-linux/05_desktopicons.png differ diff --git a/content/posts/2021-08-12-running-n1mm-logger-on-linux/06_errormsg.png b/content/posts/2021-08-12-running-n1mm-logger-on-linux/06_errormsg.png new file mode 100644 index 0000000..77f3c68 Binary files /dev/null and b/content/posts/2021-08-12-running-n1mm-logger-on-linux/06_errormsg.png differ diff --git a/content/posts/2021-08-12-running-n1mm-logger-on-linux/07_screenshot.png b/content/posts/2021-08-12-running-n1mm-logger-on-linux/07_screenshot.png new file mode 100644 index 0000000..dcdd2a3 Binary files /dev/null and b/content/posts/2021-08-12-running-n1mm-logger-on-linux/07_screenshot.png differ diff --git a/content/posts/2021-08-12-running-n1mm-logger-on-linux/index.md b/content/posts/2021-08-12-running-n1mm-logger-on-linux/index.md new file mode 100644 index 0000000..4691e91 --- /dev/null +++ b/content/posts/2021-08-12-running-n1mm-logger-on-linux/index.md @@ -0,0 +1,208 @@ +--- +title: Running N1MM Logger+ on Linux +summary: > + This is my attempt to properly install N1MM Logger+ on my main computer + running Manjaro/Ubuntu Linux. +date: 2021-08-12 +last_modified: 2022-08-30 +categories: [amateur-radio] +tags: [linux,windows,n1mm,emulation,wine] + +--- + +## We need to talk again (an Update) + +{{< alert note "Update" >}} +This is an update, the post was originally published on August 12th, +2021. Most of the content has changed. +{{< /alert >}} + +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'll stick with CQRLOG for now. + +But 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! + +Some other articles that I researched and they might be interesting to you too: + +- (2020-05-31) +- (2018-12-03) +- (2018-07-25) + +## Let's install N1MM Logger+ + +**on Manjaro Linux** in a 32bit environment (wine). + +Create a 32bit wine prefix (in winecfg: select Windows 7): + +~~~console +$ 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: + +~~~console +$ tar -cJf wine-backup-n1mm-$(date +%Y-%m-%d-%H%M%S).tar.xz .wine-n1mm/ +~~~ + +Next on the list: _.Net Framework 4.6_: + +~~~console +$ env WINEPREFIX=/home/dominic/.wine-n1mm winetricks --force +~~~ + +Choose `Select default wine prefix`, choose +`Install Windows-DLL`, select +`dotnet46` and hit OK + +This brings up a few error messages---confirm them and move on. In the end we +should see the _.NET Framework 4.0_ installation tool. + +{{< figure src="01_dotnet40.png" alt=".NET Framework 4.0 Installation" caption="" >}} + +Once 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. + +{{< figure src="02_45restart.png" alt=".NET Framework 4.5 restart dialog" caption="" >}} + +Select Restart Later again and you're done with .NET. + +If you like, you could just create another windows-backup archive in case +something goes wrong at the next installations. It's the same command as before, +as it would create a timestamped filename anyway. My wine prefix `.wine-n1mm` now +is ~1.2GB big. + +~~~console +$ 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. + +Now just download and run the Full-Installer and the Update-Installer files. + +- + +Navigate to `DOWNLOADS` >> +`PROGRAM FILES` >> `FULL INSTALL` + +{{< figure src="03_fullinstall.png" alt="Full Install Menu" caption="" >}} + +Like above, but navigate to `DOWNLOADS` >> +`PROGRAM FILES` >> +`LATEST UPDATE FILES` + +{{< figure src="04_update.png" alt="Update Menu" caption="" >}} + +After moving into the directory where our installation files reside, we tell wine +to start the installers: + +~~~console +$ cd Downloads/ +$ env WINEPREFIX=/home/dominic/.wine-n1mm wine N1MM-Logger-FullInstaller-1.0.8954.exe +~~~ + +Unselect `Finish and restart...` and close the installer. + +~~~console +$ env WINEPREFIX=/home/dominic/.wine-n1mm wine N1MM-Logger-Update-1.0.9243.exe +~~~ + +Unselect `Run N1MM Logger+...` and close the installer. + +{{< alert note >}} +Please not that those are examples, you need to start the files that **you** +downloaded---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. +{{< /alert >}} + +Make sure to substitute the versions with what you have downloaded---you can +find these files here: + +* [Full Install](https://n1mmwp.hamdocs.com/downloads/n1mm-full-install) +* [Latest update](https://n1mmwp.hamdocs.com/mmfiles/categories/programlatestupdate) + +You should now have new desktop icons and/or new menue entries (depends on your +desktop environment). + +{{< figure src="05_desktopicons.png" alt="Desktop icons" caption="" >}} + +You 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. + +You'll figure that out, the content of one of these desktop icons is: + +~~~ini +[Desktop Entry] +Name=N1MM Logger+ +Exec=env WINEPREFIX="/home/dominic/.wine-n1mm" 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: + +~~~console +$ env WINEPREFIX=/home/dominic/.wine-n1mm wine .wine-n1mm/drive_c/Program\ Files/N1MM\ Logger+/N1MMLogger.net.exe +~~~ + +{{< figure src="06_errormsg.png" alt="Error message" caption="" >}} + +You can click the big error message away, afterwards you get informed that AutoHotkey +is not installed. Click that away too and you're done for now. Setup your station +details and move on with using N1MM Logger+ on linux. + +{{< alert info >}} +There might be still bugs as those error messages at the installation of the +.NET Framework didn't came from nothing---for what I'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. +{{< /alert >}} + +Finally, there is a good result I think: + +{{< figure src="07_screenshot.png" alt="Example screenshot" caption="" >}} + +Hopefully 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---the +reason for that was actually because I've seen that this specific article got +read quite a few times and I personally found it a bit confusing myself ;-) + +vy 73 de Dominic, OE7DRT (going to bed now) + +## Another update (Installation on Ubuntu 20.04) + +I recently switched my laptop from Manjaro Linux back to Tuxedos version of +Kubuntu. So let's have a quick look at what I did in this newly created 32bit +windows environment. + +~~~console +$ 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 +`Wine` >> `Programs` >> `N1MM Logger+` diff --git a/content/posts/2021-10-03-winlink-and-vara-on-linux/index.md b/content/posts/2021-10-03-winlink-and-vara-on-linux/index.md new file mode 100644 index 0000000..e430e6a --- /dev/null +++ b/content/posts/2021-10-03-winlink-and-vara-on-linux/index.md @@ -0,0 +1,73 @@ +--- +title: Running Winlink and VARA on Linux +summary: > + A quick and dirty summary of my Winlink installation on my linux laptop. +date: 2021-10-03 +categories: [amateur-radio] +tags: [linux,winlink,vara,windows,emulation,wine] + +--- + +This article is about using VARA FM and/or VARA HF on a linux laptop---or +computer. + +## Quick and dirty + +~~~console +$ 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's content again. + +## Resources + +This article is practically based on the instructions found over at +. + +The 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. + +{{< alert note >}} +I do not claim them to be my creation, I just want them to be online on a place +that I find again. +{{< /alert >}} + +- VARA_components.zip +- pdh.dll.zip + +Visit the website `k6eta.com` above if you want to know more details about +Winlink on Linux. + +Thanks to Steven K6ETA for his excellent explanations on his website, so I could +narrow this down to the quick copy-and-paste-box above. diff --git a/content/posts/2021-10-03-wordlist-generation/index.md b/content/posts/2021-10-03-wordlist-generation/index.md new file mode 100644 index 0000000..ec93c7b --- /dev/null +++ b/content/posts/2021-10-03-wordlist-generation/index.md @@ -0,0 +1,38 @@ +--- +title: Wordlist Generation +summary: Just for the record. These results may not mean anything... +date: 2021-10-03 +categories: [computerstuff] +tags: [linux,pentest] + +--- + +I've done a simple comparison back in April and never pushed this to the website. +Now I think I won't write much about it, but I don't want to loose those results +either. + +The two don't work the same, the files were different in terms of sorting. + +## John + +~~~console +$ john --mask='05253?d?d?d?d?d' --min-length=9 --max-length=10 --stdout > 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 + +~~~console +$ mp -i 9:10 '05253?d?d?d?d?d' -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 ><(((°>](https://fishshell.com/). diff --git a/content/posts/2021-10-26-processes-accessing-mountpoints/index.md b/content/posts/2021-10-26-processes-accessing-mountpoints/index.md new file mode 100644 index 0000000..c3266df --- /dev/null +++ b/content/posts/2021-10-26-processes-accessing-mountpoints/index.md @@ -0,0 +1,27 @@ +--- +title: Show processes that block umount +summary: > + A quick oneliner to list running processes that prevent a filesystem from + being unmounted. Using `lsof` or `fuser` for this. +date: 2021-10-26T10:06:47+02:00 +lastmod: 2021-11-21 +categories: [computerstuff] +tags: [linux,reminders] + +--- + +Another quick one: I forget this command on a permanent basis, so I write this +down here---maybe this helps. + +~~~console +$ 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. + +~~~console +$ fuser -vm /media/mountpoint +~~~ diff --git a/content/posts/2022-01-06-site-updates/index.md b/content/posts/2022-01-06-site-updates/index.md new file mode 100644 index 0000000..ea6b5fe --- /dev/null +++ b/content/posts/2022-01-06-site-updates/index.md @@ -0,0 +1,19 @@ +--- +title: The new site layout and theme +date: 2022-01-06T09:47:12+01:00 +#categories: [index] +#tags: [] + +--- + +This post indicates the introduction of Jekyll in my workflow---regarding my +website-publication-workflow. + + + +I used Jekyll already before I used Hugo, but these days I think the website is +better built on top of a powerful theme. [Hydejack](https://hydejack.com) is +its name, for those that are more interested in it. + +My 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). diff --git a/content/posts/2022-01-08-my-weather-station-with-weewx-and-netatmo/index.md b/content/posts/2022-01-08-my-weather-station-with-weewx-and-netatmo/index.md new file mode 100644 index 0000000..c1ebe21 --- /dev/null +++ b/content/posts/2022-01-08-my-weather-station-with-weewx-and-netatmo/index.md @@ -0,0 +1,156 @@ +--- +title: My weather station with WeeWX and Netatmo +summary: > + Describing my approach to properly install WeeWX on a virtual server which + creates the [weather page](https://wx.oe7drt.com/) and also uploads my weather + data to the [APRS-IS network](http://www.aprs-is.net/). +date: 2022-01-08T14:34:54+01:00 +categories: [amateur-radio] +tags: [wx] + +--- + +## Preparation + +{{< alert note "PLEASE TAKE NOTICE" >}} +As I'm using a redhat based distribution I installed WeeWX with some help of +. You may also need an account on + 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. +Also note, that most commands (if not all) here have to be run as the root user. +{{< /alert >}} + +First of all, install `epel-release` so you can install `python3-cheetah` finally. + +~~~console +# yum install epel-release +# yum install python3-cheetah +~~~ + +Continue with adding the repository of WeeWX to your system and install WeeWX. + +~~~console +# rpm --import https://weewx.com/keys.html +# curl -s https://weewx.com/yum/weewx-el8.repo | tee /etc/yum.repos.d/weewx.repo +~~~ + +~~~console +# dnf install weewx +~~~ + +Look out for `/var/log/messages` in order to see if WeeWX is already running +(Abort with Ctrl+C). + +~~~console +# tail -f /var/log/messages +~~~ + +## Configuration of WeeWX + +Stop WeeWX and remove the database for now. + +~~~console +# /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](https://github.com/matthewwall/weewx-netatmo)---but this +won't work with WeeWX 4.x and up. +So I had to find another one, which I did. It's from +[bricebou](https://github.com/bricebou/weewx-netatmo), who made a fork of the +original to be compatible with Python 3 (I think that is required now by WeeWX 4.x). + +~~~console +# 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. + +## Starting WeeWX again + +You can also use `systemctl start weewx` instead. + +~~~console +# /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`. + +~~~python +# file: "/usr/share/weewx/user/extensions.py" +# +# Copyright (c) 2009-2015 Tom Keffer +# +# See the file LICENSE.txt for your full rights. +# + +"""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. +""" + +import locale +# This will use the locale specified by the environment variable 'LANG' +# Other options are possible. See: +# http://docs.python.org/2/library/locale.html#locale.setlocale +locale.setlocale(locale.LC_ALL, 'de_AT.UTF-8') +~~~ + +## Pushing weather data to APRS-IS + +Make sure you get a similar entry in your `/etc/weewx/weewx.conf` file: + +~~~toml +# file: "/etc/weewx/weewx.conf" +... + +[StdRESTful] + [[CWOP]] + enable = true + station = "n0call-13" + passcode = "your_aprs-fi_passcode" + post_interval = 300 + +... + +~~~ + +Now, you could also join CWOP over here: . +I don't remember correctly, but I don't think you'll need that to just transport +your weather data into . + +## Going 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. +{:.note} + +You may also want to inspect the installed skins (templates) which reside in +`/etc/weewx/skins`---adopt them to your needs and enable some more reports in +`[StdReport]` like `[[SeasonsReport]]`. Adopt everything and make sure to read +throughout the [documentation](https://weewx.com/docs/usersguide.htm)---that +helped me a lot. + +When 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. + +→ + +The link is also on the bottom of every page aswell and the website looks +something like this: + +{{< figure src="wx-main.png" alt="website preview" >}} diff --git a/content/posts/2022-01-08-my-weather-station-with-weewx-and-netatmo/wx-logo.png b/content/posts/2022-01-08-my-weather-station-with-weewx-and-netatmo/wx-logo.png new file mode 100644 index 0000000..8af64d4 Binary files /dev/null and b/content/posts/2022-01-08-my-weather-station-with-weewx-and-netatmo/wx-logo.png differ diff --git a/content/posts/2022-01-08-my-weather-station-with-weewx-and-netatmo/wx-main.png b/content/posts/2022-01-08-my-weather-station-with-weewx-and-netatmo/wx-main.png new file mode 100644 index 0000000..2852e9a Binary files /dev/null and b/content/posts/2022-01-08-my-weather-station-with-weewx-and-netatmo/wx-main.png differ diff --git a/content/posts/2022-06-27-systemd-slow-reboot-and-shutdown-fixed/index.md b/content/posts/2022-06-27-systemd-slow-reboot-and-shutdown-fixed/index.md new file mode 100644 index 0000000..a9547bd --- /dev/null +++ b/content/posts/2022-06-27-systemd-slow-reboot-and-shutdown-fixed/index.md @@ -0,0 +1,99 @@ +--- +title: 'Systemd: slow reboot and shutdown fixed' +summary: > + I'm not so into systemd systems and ever avoided systemd whenever possible, + but nowadays systems without systemd are very rare. So I'm learning my lessons + slowly and with some memory protection (e.g. this article). Sorry, this + article is not very well formatted... +date: 2022-06-26T22:41:49+02:00 +lastmod: 2022-10-26T07:09:35+02:00 +categories: [computerstuff] +tags: [linux,systemd,manjaro,reminders] + +--- + +I noticed long delays (more than 2 minutes) on reboots and poweroffs recently +on my Manjaro laptop. + +## Fix the slow shutdown/reboot + +View the last boot session log in reverse order + +~~~console +$ 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. + +**To make things short, here's my solution that I currently work with:** + +I edited `/etc/systemd/system.conf` and changed the following values: + +~~~ini +# file: "/etc/systemd/system.conf" +[Manager] +[...] +RebootWatchdogSec=1min +ShutdownWatchdogSec=1min +[...] +DefaultTimeoutStopSec=5s +[...] +~~~ + +## Have a quick look at the boot time + +~~~console +$ systemd-analyze +~~~ + +and if you are more interested into which module slows down your boot, list them +with: + +~~~console +$ systemd-analyze blame +~~~ + +Just out of curiosity I also used: + +~~~console +$ sudo systemctl disable NetworkManager-wait-online.service +~~~ + +→ revert that with: + +~~~console +$ sudo systemctl enable NetworkManager-wait-online.service +~~~ + +## Sources + +The sources of my research and a more detailed explanation can be found +with those links: + +- +- + +## Update and Results on my Fedora box + +Since I made the switch to Fedora 36 I had to re-do those steps. + +With default values I got this result for `systemd-analyze` + +~~~console +$ 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 + +And with the changes above I get this + +~~~console +$ 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 \ No newline at end of file diff --git a/content/posts/2022-07-04-pfsense-restore-broken-config/index.md b/content/posts/2022-07-04-pfsense-restore-broken-config/index.md new file mode 100644 index 0000000..e3f7865 --- /dev/null +++ b/content/posts/2022-07-04-pfsense-restore-broken-config/index.md @@ -0,0 +1,98 @@ +--- +title: 'pfSense: restore broken config' +#aliases: +# - '2022-07-04-pfsense-restore-broken-config-file' +summary: > + Restoring a configuration file for pfSense when it actually stays in a + boot-loop +date: 2022-07-04T18:14:13+02:00 +categories: [computerstuff] +tags: [pfSense,networking] + +--- + +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. + +## Follow these steps + +1. Boot into **single user mode** + + Connect to your firewall (with a serial console) and choose option + `5) Reboot system` and confirm with the letter `S` (capital s). + +2. **ZFS version only** + + 1. Remount root slice as read-write: + + ~~~console + $ /sbin/mount -u / + ~~~ + + 2. Mount all ZFS filesystems, datasets etc. + + ~~~console + $ /sbin/zfs mount -a + ~~~ + + 3. Working within the mounted filesystems + + 1. Enter **/cf/conf** + + ~~~console + $ cd /cf/conf + ~~~ + + 2. Copy the newest backup file back + + ~~~console + $ cp backup/config-1648889613.xml config.xml + ~~~ + + 3. Clear the config cache + + ~~~console + $ rm /tmp/config.cache + ~~~ + + 4. Reload system and it's services + + ~~~console + $ /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. + + 4. Clear the single user mode boot configuration + + ~~~console + $ /sbin/nextboot -D + ~~~ + + ZFS does not clear the single user mode boot configuration by itself, + that's why we have to delete it after we are done with our work. + + 5. Reboot the system + + ~~~console + $ /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. + +Okay, that's it all for now. Please note that I do not use the UFS filesystem +any more, so I won't add this to my little instruction set. + +This post was actually older, I've saved the instructions in a textfile until I +found the time to format it and publish it on my website. +{:.note title="For your information"} + +## Sources + +- +- diff --git a/content/posts/2022-07-04-systemd-flushing-the-dns-cache/index.md b/content/posts/2022-07-04-systemd-flushing-the-dns-cache/index.md new file mode 100644 index 0000000..3933be2 --- /dev/null +++ b/content/posts/2022-07-04-systemd-flushing-the-dns-cache/index.md @@ -0,0 +1,37 @@ +--- +title: 'Systemd: flushing the DNS cache' +date: 2022-07-04T17:22:48+02:00 +categories: [computerstuff] +tags: [linux,systemd,networking,manjaro,dns,reminders] + +--- + +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---if someone cares about that more than I do). + +Now let'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. + + + +And this post is all about that: + +~~~console +$ sudo systemd-resolve --flush-caches +~~~ + +You could also use `sudo resolvectl flush-caches` if you like or prefer. + +Now verify the empty cache: + +~~~console +$ 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 last weeks. + +## Sources + +- diff --git a/content/posts/2022-07-10-raspberry-pi-4-64bit-dual-hat-hotspot-without-pi-star/index.md b/content/posts/2022-07-10-raspberry-pi-4-64bit-dual-hat-hotspot-without-pi-star/index.md new file mode 100644 index 0000000..b298225 --- /dev/null +++ b/content/posts/2022-07-10-raspberry-pi-4-64bit-dual-hat-hotspot-without-pi-star/index.md @@ -0,0 +1,1400 @@ +--- +title: Raspberry Pi 4 (64 bit) DUAL_HAT Hotspot +summary: > + Working without Pi-Star on a fresh and lightweight Raspberry Pi OS (64 bit) + installation. One of the longer articles over here... +date: 2022-07-10T14:27:28+02:00 +last_modified_at: 2022-08-20T07:55:25+02:00 +categories: [amateur-radio] +tags: [pistar,dmr,ysf,dstar,hotspot,mmdvm] +#weight: 1 + +--- + +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”. + +## Preparation + +{{< alert warning >}} +Do not use a cheap SD-card for your hotspot. We do not mount the filesystem +read-only like on Pi-Star. +{{< /alert >}} + +1. Download the operating software image from [raspberrypi.com](https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os-64-bit). +2. Boot the Raspberry Pi and set it up to your needs. + - Localisation + - Keyboard layout + - Install needed packages + - Install your favourite shell (bash, zsh, fish, csh ...) +3. Disable the serial console (and we will also disable Bluetooth) + - Open `/boot/cmdline.txt` and remove the text `console=serial0,115200` + - Open `/boot/config.txt` and add to the end + + ~~~ini + dtoverlay=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_ + + Disable the services + + ~~~console + $ sudo systemctl disable serial-getty@ttyAMA0.service + $ sudo systemctl disable bluetooth.service + ~~~ + + Reboot the Raspberry Pi after those changes! + + ~~~console + $ sudo reboot + ~~~ + +4. Install the needed packages to compile the software later + + ~~~console + $ 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. + + ~~~console + $ git clone git@github.com:WiringPi/WiringPi.git + $ cd wiringPi + $ ./build + ~~~ + + This should suffice, make sure to read [INSTALL] and follow its instructions. + + [INSTALL]: https://github.com/WiringPi/WiringPi/blob/master/INSTALL + + Check _wiringPi_ with `gpio -v` or `gpio readall`: + + ~~~console + $ 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. + *--> Raspberry Pi 4 Model B Rev 1.1 + * This Raspberry Pi supports user-level GPIO access. + ~~~ + +5. Create a non-privileged user called _mmdvm_ and add the user to the + group _dialout_ + + ~~~console + $ 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`.) + + ~~~console + $ 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**: + +_MMDVM_HS_Dual_Hat-v1.6.0 20210919 12.2880MHz dual ADF7021 FW by CA6JAU GitID #d4cb546_ + +But let us move to the fun (work) part. + +### Get the code + +Clone the git repository. I prefer this in a separate folder like `~/git`. + +~~~console +$ git clone --recursive git@github.com:juribeparada/MMDVM_HS.git +~~~ + +### Configuration + +Enter the directory and copy an appropriate default configuration for your board. + +~~~console +$ 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! + +~~~cpp +// file: "Config.h" +#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`: + +~~~cpp +// file: "ADF7021.h" +// 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. + +You may want to leave that file intact if you just want your hotspot work without +fiddling around with the source code. + +### Fine 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. + +You may want to consider making the following changes on those two files. + +~~~cpp +// file: "DMRDMOTX.cpp" +//m_txDelay(240U), // 200ms +m_txDelay(120U), // 200ms +~~~ + +~~~cpp +// file: "DMRDMOTX.cpp" +void CDMRDMOTX::setTXDelay(uint8_t delay) +{ + //m_txDelay = 600U + uint16_t(delay) * 12U; // 500ms + tx delay + m_txDelay = 60U + uint16_t(delay) * 12U; +} +~~~ + +~~~cpp +// file: "DMRTX.cpp" +// const uint32_t STARTUP_COUNT = 20U; +const uint32_t STARTUP_COUNT = 2U; +~~~ + +I'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... + +_Those 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. + +~~~console +$ make clean +$ make -j4 +$ sudo make mmdvm_hs_dual_hat +~~~ + +Finish this with a reboot of the Raspberry Pi. + +~~~console +$ 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. +{:.note title="sidenote"} + +### Finally + +And, as many operators tend to ignore manuals a lot, here are a few links that +you ~~can~~ should read. + +- +- +- +- + +## MMDVMHost + +This is the program that connects our Gateways with the hardware board. This +could be referred as the modem probably. + +### Get the code + +We run this command also in our separated `git` folder. Just to keep all those +git repositories in one place. + +~~~console +$ git clone git@github.com:g4klx/MMDVMHost.git +~~~ + +### Compile the code + +Enter the newly created directory and compile it. + +~~~console +$ make -j4 -f Makefile.Pi +~~~ + +Install the executables into `/usr/local/bin` by executing + +~~~console +$ sudo make install +~~~ + +### Configuration + +Copy the default configuration file to `/etc`: + +~~~console +$ 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. + +~~~ini +# file: "/etc/MMDVM.ini" +[Log] +# Logging levels, 0=No logging +DisplayLevel=2 +FileLevel=2 +FilePath=/var/log/mmdvm +FileRoot=MMDVM +FileRotate=0 + +[Modem] +Hardware=mmdvmhshat +# Valid values are "null", "uart", "udp", and (on Linux) "i2c" +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 'Direct' or 'Gateway'. When Direct you must provide the Master'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="StartRef=4000;RelinkTime=15;UserLink=1;" +# 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---make sure that you +double check your file and insert your callsign and DMRID number correctly. + +Within `[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). + +### Create log file directory + +~~~console +$ 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_ + +~~~console +$ sudo -u mmdvm MMDVMHost /etc/MMDVM.ini +~~~ + +Set `Daemon=1` back in your `MMDVM.ini` if you haven't already. + +### Setup the system service + +Copy the unit file for Systemd to the system. + +~~~console +$ sudo cp linux/systemd/mmdvmhost.service /etc/systemd/system/ +~~~ + +No modification should be needed, but for reference this is the content +of the file: + +~~~ini +# file: "/etc/systemd/system/mmdvmhost.service" +[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 + +~~~console +$ 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). + +### Get the code + +~~~console +$ git clone git@github.com:g4klx/DMRGateway.git +~~~ + +### Configuration + +~~~ini +# file: "/etc/DMRGateway.ini" +[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="StartRef=4000;RelinkTime=15;UserLink=1;TS1_1=110;" +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 + +~~~console +$ 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 "Not connected" or "Repeater not connected". + +### Create a system service + +I copied the unit file from mmdvmhost.service and made my changes. If you don't +want to do that by yourself, use this one to start with. + +~~~ini +# file: "/etc/systemd/system/dmrgateway.service" +[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. + +~~~console +$ sudo systemctl enable --now dmrgateway.service +~~~ + +## YSFGateway (C4FM, YSF, YCS) + +What we define: connect our hotspot to the `AT-C4FM-Austria` reflector via YSF. + +### Get the code + +#### Use a quite actual but modified version of YSFClients + +This is a fork of the original repository by _Jonathan, G4KLX_. + +The 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_. + +This version might not be as actual as the original repository, but it is +ready-to-use with the _[changes made by Kurt, OE1KBC](http://ycs-wiki.xreflector.net/doku.php#supported_hardware)_ back in 2021. + +I've included his changes in my fork and created a branch called _YCS232_. + +~~~console +$ 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: + +~~~console +$ git remote add upstream git@github.com:g4klx/YSFClients.git +$ git fetch --all +~~~ + +#### Original, most actual codebase + +~~~console +$ 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` + +~~~console +$ cd YSFClients +$ make -j4 +$ sudo make install +~~~ + +### Configuration + +Copy the default configuration file into `/etc` + +~~~console +$ sudo cp YSFGateway/YSFGateway.ini /etc/ +~~~ + +and edit the file. Here are some excerpts of mine: + +~~~ini +# file: "/etc/YSFGateway.ini" +[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. + +### Test your setup + +Change `Daemon=0` in the configuration file for the test and run + +~~~console +$ 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`. + +Stop it with `CTRL + C` and move on to create a system service (unit file) for +Systemd. + +Change `Daemon=1` back in your config if not already done. + +### Setup a system service + +Create the unit file `/etc/systemd/system/ysfgateway.service` + +~~~ini +# file: "/etc/systemd/system/ysfgateway.service" +[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. + +~~~console +$ sudo systemctl daemon-reload +$ sudo systemctl enable --now ysfgateway.service +~~~ + +## ircDDBGateway (D-STAR) + +Okay, this was the hardest part for me because I haven't found much information +about what programs and configuration files are really needed for D-STAR to work +properly---I'm not even sure now if it is working fine or if something is still +missing. + +So 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. + +**I think** that _dstarrepeater_ was only used for the first hardware and it's +work is now done from MMDVMHost. Again, correct me if I'm wrong. + +### Get the code + +In our `~/git` directory (where else?) + +~~~console +$ 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... + +~~~console +$ cd ircDDBGateway +$ make -j4 +$ sudo make install +~~~ + +### Configuration + +Sadly, I haven't found any configuration file as an example, so I referred to +the configuration files on anothor hotspot that was running Pi-Star. + +These are the files that I use at the moment, changes may be done if needed. + +### /etc/ircddbgateway + +~~~ini +# file: "/etc/ircddbgateway" +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't aware what numbers need to be set on _gatewayType_ or _repeaterType_, +but a look into the source code made my decision easier. I'm not sure if that is +correctly interpreted as I never finished learning C++ but I learned the basics +back in school... + +And so I found some information in `Common/Defs.h`: + +~~~cpp {linenostart=64} +enum HW_TYPE { + HW_HOMEBREW, + HW_ICOM, + HW_DUMMY +}; +~~~ + +~~~cpp {linenostart=130} +enum GATEWAY_TYPE { + GT_REPEATER, + GT_HOTSPOT, + GT_DONGLE, + GT_STARNET +}; +~~~ + +View those two online on github: [HW_TYPE], [GATEWAY_TYPE] + +[HW_TYPE]: https://github.com/g4klx/ircDDBGateway/blob/380c0941e7724a320ce66dcd78ef4292c5943c17/Common/Defs.h#L64-L68 +[GATEWAY_TYPE]: https://github.com/g4klx/ircDDBGateway/blob/380c0941e7724a320ce66dcd78ef4292c5943c17/Common/Defs.h#L130-L135 + +### /etc/timeserver + +timeserverd is used to produce time announcements. The interval of these can +be set to + +- every 15 minutes: + `interval=0` +- every 30 minutes: + `interval=1` +- every hour: + `interval=2` + +Adopt those changes in `/etc/timeserver`. + +~~~ini +# file: "/etc/timeserver" +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 + +~~~console +$ sudo -u mmdvm ircddbgatewayd +~~~ + +Abort with `CTRL + C` when done. + +## Create 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/...` + +~~~ini +# file: "/etc/systemd/system/ircddbgateway.service" +[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 +~~~ + +~~~ini +# file: "/etc/systemd/system/timeserver.service" +[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 + +~~~console +$ 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](https://github.com/dg9vh/MMDVMHost-Websocketboard). + +## Dashboard + +### Preparation + +There are a few things to prepare, before we can finally visualize the +electro-magnetic stream in the air. + +Install some needed packages + +~~~console +$ 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](https://github.com/dg9vh/MMDVMHost-Websocketboard#installation) +on the repository for more information and the full instructions. + +Allow the _logtailer_ program access to _MMDVMHost_ with `sudo visudo` and add +this line to the user section of the sudoers file: + +~~~plain +www-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've never used such solutions myself, so +I'll stick to a real webserver in this article. + +Install nginx with php support with + +~~~console +$ sudo apt install nginx php-fpm +~~~ + +##### Configure and limit webserver + +I'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. + +We 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`). + +~~~nginx +# file: "/etc/nginx/sites-enabled/default" +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's document root + # concurs with nginx's one + # + location ~ /\.ht { + deny all; + } +} + + +# Virtual Host configuration for example.com +# +# [...] +~~~ + +### Get the code + +~~~console +$ 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`. + +### Configuration + +Open `logtailer.ini`, this should look something like this (shrinked together) + +~~~ini +# file: "/opt/MMDVMDash/logtailer.ini" +[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 + +~~~js +// file: "/opt/MMDVMDash/html/js/config.js" +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 = [ +"N0CALL", +] +var dashboard_blacklist = [ +"MY0CALL", +] +var useDarkTheme = 0; +var customHeadlineText = ``; +var customText = ``; +~~~ + +### Create and enable a system service + +~~~console +$ 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'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'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. + +You 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. + +So that's why I try to make my systems small and compact and I'm very happy with +the result. I personally thought that I'd stuck on the D-STAR configuration +because I've found so less information about that mode---specially it's +configuration. But now it's working fine and I can say: it wasn't that hard (or +abstract) as I thought before. diff --git a/content/posts/2022-07-31-handy-tools-mmdvm/index.md b/content/posts/2022-07-31-handy-tools-mmdvm/index.md new file mode 100644 index 0000000..4979856 --- /dev/null +++ b/content/posts/2022-07-31-handy-tools-mmdvm/index.md @@ -0,0 +1,66 @@ +--- +title: handy tools for MMDVM +summary: > + Some nice ideas and so... +date: 2022-07-31T13:12:39+02:00 +#categories: [computerstuff] +tags: [linux,systemd,networking,manjaro,dns,reminders] +draft: true + +--- + +#### the script + +~~~bash +# file: "kill-mmdvm.sh" +#!/bin/bash +#udev/rules.d contains a rule file like: +#SUBSYSTEM=="tty", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0094", SYMLINK+="ttyGD77", TAG+="systemd", ENV{SYSTEMD_WANTS}="mmdvmhost.service" +#ACTION=="remove", SUBSYSTEM=="tty", ENV{ID_VENDOR_ID}=="1fc9", ENV{ID_MODEL_ID}=="0094", RUN+="/etc/udev/kill-mmdvm.sh" +# +#mmdvmhost service stopping lasts about 1 minute to succeed, so kill is the option... +if [ "$ACTION" = "remove" ] +then +systemctl kill -s KILL mmdvmhost.service +fi +~~~ + +#### restarting/reloading udev rules without reboot + +~~~console +# udevadm control --reload-rules && udevadm trigger +~~~ + +#### gd77 udev rules + +~~~ini +# file: "/etc/udev/rules.d/99-gd77.rules" +# USB rules for GD-77 +# Place this in /etc/udev/rules.d/ to let all users talk to the radios by USB. + +# +SUBSYSTEM=="usb", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0073", MODE="0666" + +# HIDAPI/libusb +SUBSYSTEM=="usb", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0073", MODE="0666" +SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0094", MODE="0666" + +# HIDAPI/hidraw +KERNEL=="hidraw*", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0073", MODE="0666" +KERNEL=="hidraw*", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0094", MODE="0666" + +# HIDAPI/hiddev +## We need to unbind this device, otherwise LibUsb will fail to SetConfiguration() and ClaimInterface() +# For Bootloader (usbhid) +KERNEL=="hiddev*", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0073", MODE="0666", RUN+="/bin/bash -c 'ID=$(IFS=/; read -a array <<< %p; echo ${array[-3]}); echo $ID > /sys/bus/usb/drivers/usbhid/unbind'" + +# OpenGD77 +KERNEL=="ttyACM[0-9]*", SUBSYSTEM=="tty", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0094", MODE="0666", GROUP="dialout", SYMLINK+="OpenGD77" +~~~ + +*** + +Sources: + +* +* diff --git a/content/posts/2022-08-06-mounting-disk-images-on-linux/index.md b/content/posts/2022-08-06-mounting-disk-images-on-linux/index.md new file mode 100644 index 0000000..ae0963c --- /dev/null +++ b/content/posts/2022-08-06-mounting-disk-images-on-linux/index.md @@ -0,0 +1,103 @@ +--- +title: Mounting disk images on linux +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. (After + I looked it up again ;-)) +date: 2022-08-06T21:02:21+02:00 +categories: [computerstuff] +tags: [linux,raspberry,reminders] + +--- + +Let's assume you created a disk image with `dd` on a linux computer like + +~~~console +$ 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'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`. + +When uncompressed, look at the partition table with _fdisk_: + +~~~console +$ 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. + +## Using 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. + +### Creating and mounting the loop device + +~~~console +$ 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. + +Mount the new virtual loop device to the directory that you like. This is +`~/tmp` in my case. + +~~~console +$ sudo mount /dev/loop1p2 tmp +~~~ + +### Removing the loop device + +~~~console +$ 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. + +I use a german speaking computer, so you might look for _Start_ or _Offset_ or +_Beginning_---you know what to look for... + +We calculate the needed offset like: `532480 * 512 = 272629760` + +And the resulting command is + +~~~console +$ sudo mount -o loop,offset=272629760 disk.img tmp/ +~~~ + +A remount is simple as + +~~~console +$ 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). + +If 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. diff --git a/content/posts/2022-08-07-using-nfs-on-a-raspberry-pi/index.md b/content/posts/2022-08-07-using-nfs-on-a-raspberry-pi/index.md new file mode 100644 index 0000000..42a295a --- /dev/null +++ b/content/posts/2022-08-07-using-nfs-on-a-raspberry-pi/index.md @@ -0,0 +1,122 @@ +--- +title: Using NFS shares on a Raspberry Pi +summary: > + A quick and short guide on how to setup an NFS share on a + Raspberry Pi. +date: 2022-08-07T07:19:54+02:00 +categories: [computerstuff] +tags: [linux,networking,raspberry,reminders] + +--- + +I use this mainly on my amateur radio hotspot when I work on my sleek dashboard. + +This 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't have to feed pseudo-random data into the tables, +the data gets pulled live from the logs---like it would be on the final system. + +## Installation and configuration + +~~~console +$ sudo apt update +$ sudo apt install nfs-kernel-server +~~~ + +~~~console +$ sudo vim /etc/exports +~~~ + +We have to export our directories in the file `/etc/exports` on our Raspberry Pi. + +~~~plain +# file: "/etc/exports" +/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. + +For 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). +{:.note title="Note this"} + +Also edit `/etc/hosts.allow` to grant access for your network or host. + +~~~plain +# file: "/etc/hosts.allow" +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. + +~~~console +$ 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. + +Now 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`. + +So we run + +~~~console +$ 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: + +~~~plain +raspi4 rpc.mountd[30223]: authenticated mount request from 192.168.1.123:894 for /opt/MMDVMDash/html (/opt/MMDVMDash/html) +~~~ + +{{< alert note >}} +**To eliminate the confusion:** I'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. +{{< /alert >}} + +And that'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. + +When unmounting, you should see another line on your Raspberry Pi. + +~~~plain +raspi4 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. + +~~~console +$ mkdir -p ~/raspi4/html +~~~ + +~~~plain +# file: "/etc/fstab" +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`. + +Mount 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!). + +You may use less confusing settings in your `fstab` file, but I'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. + +You could try by only using `noauto,users,nodev,async` as a starting point. If +it fails, try adding only `_netdev` first---I can't exactly remember why, but I +keep thinking I researched this a while back and sticked with it. diff --git a/content/posts/2022-09-24-installation-of-log4om-on-linux/index.md b/content/posts/2022-09-24-installation-of-log4om-on-linux/index.md new file mode 100644 index 0000000..61f892b --- /dev/null +++ b/content/posts/2022-09-24-installation-of-log4om-on-linux/index.md @@ -0,0 +1,23 @@ ++++ +title = "Installation of Log4OM on Linux" +summary = """This describes my way of installing Log4OM on my linux machine. +I'm using Fedora 36 in this article.""" +date = "2022-09-24T10:39:57+02:00" +#lastmod = "" +categories = ["amateur-radio"] +tags = ["emulation","wine","mono", "linux", "windows"] + ++++ + +## on lutris + +- install log4om + +- bottom line -> wine configuration + select win7 + +- bottom line -> run exe within prefix + install ndp .NET 4.7.2 + +- winetricks -> allfonts + diff --git a/content/posts/2022-09-25-using-vara-with-pat/index.md b/content/posts/2022-09-25-using-vara-with-pat/index.md new file mode 100644 index 0000000..77aa66e --- /dev/null +++ b/content/posts/2022-09-25-using-vara-with-pat/index.md @@ -0,0 +1,45 @@ ++++ +title = "Using VARA with pat" +summary = """**pat** is known as Winlink replacement for Linux. Now it also +supports connections via VARA""" +date = "2022-09-25T09:49:24+02:00" +#lastmod = "" +categories = ["amateur-radio"] +tags = [] + ++++ + +I'm using zsh (not bash). + +~~~console +$ env WINEPREFIX=/home/dominic/.wine WINEARCH=win32 wine wineboot +$ env WINEPREFIX=/home/dominic/.wine WINEARCH=win32 wine winecfg + +$ env WINEPREFIX=/home/dominic/.wine WINEARCH=win32 winetricks sound=alsa +$ env WINEPREFIX=/home/dominic/.wine WINEARCH=win32 winetricks allfonts + +$ tar -cJf wine-backup-$(date +%Y-%m-%d-%H%M%S).tar.xz .wine/ + +$ #copy files to %WINDIR%/system32 -> create self-extracting archive... +~~~ + +run my self-extracting archive after installing vb6run + +- VARA_files_drt.exe + +when running winecfg check if Win7 is selected. + +Using WINEARCH=win32 makes the windows 32bit -- most verbs from winetricks only +install 32bit versions, so this is reason for 32bit windows... + +run wine Download/VARA_Setup + +run wine .wine/drive_c/VARA/VARA.exe + +should work... + +nt4 pdh files taken from: http://download.microsoft.com/download/winntsrv40/update/5.0.2195.2668/nt4/en-us/nt4pdhdll.exe + +sources: https://groups.io/g/VARA-MODEM/topic/installing_winlink_express/80678030 + -- 73's de ON4AIN - Jan + diff --git a/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/hamnetvpn01.png b/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/hamnetvpn01.png new file mode 100644 index 0000000..60837c6 Binary files /dev/null and b/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/hamnetvpn01.png differ diff --git a/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/hamnetvpn02.png b/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/hamnetvpn02.png new file mode 100644 index 0000000..21c07b8 Binary files /dev/null and b/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/hamnetvpn02.png differ diff --git a/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/hamnetvpn03.png b/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/hamnetvpn03.png new file mode 100644 index 0000000..e449a7f Binary files /dev/null and b/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/hamnetvpn03.png differ diff --git a/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/hamnetvpn04.png b/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/hamnetvpn04.png new file mode 100644 index 0000000..3d99d43 Binary files /dev/null and b/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/hamnetvpn04.png differ diff --git a/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/hamnetvpn05.png b/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/hamnetvpn05.png new file mode 100644 index 0000000..2edd152 Binary files /dev/null and b/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/hamnetvpn05.png differ diff --git a/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/index.md b/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/index.md new file mode 100644 index 0000000..1ecef74 --- /dev/null +++ b/content/posts/2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36/index.md @@ -0,0 +1,63 @@ ++++ +title = "VPN tunnel into HAMNET on Fedora 36" +summary = """Those old tutorials on the net are quite outdated now: unfortunately +PPTP links/tunnels are not supported on newer operating systems any more...""" +date = "2022-10-16T21:26:40+02:00" +#lastmod = "" +categories = ["amateur-radio"] +tags = ["hamnet","fedora","networking","linux"] + ++++ + +Since none of the found instructions worked for me: here are my settings +of my VPN tunnel into HAMNET. I'm currently using Fedora 36 on my main notebook +and Fedora removed PPTP support back in Fedora 35---I could not get the PPTP +tunnel working. + +## L2TP client + +I found a document that shows the creation of an L2TP tunnel on MacOS and I +used that as my starting point. + +First of all, install NetworkManager-l2tp-gnome: + +~~~console +$ sudo dnf install NetworkManager-l2tp-gnome +~~~ + +After that, create the new VPN tunnel in `Settings` → `Network` → `VPN`. + +Click 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][1]. + +[1]: https://www.afu.rwth-aachen.de/projekte/hamnet/anwendungen/vpn-zugang + +{{< figure src="hamnetvpn01.png" alt="basic settings" + caption="Basic settings. Enter login data." >}} + +{{< figure src="hamnetvpn02.png" alt="IPv4 settings" + caption="IPv4 settings. Those work for my setup at home." >}} + +{{< figure src="hamnetvpn03.png" alt="IPv6 settings" + caption="I'm not using IPv6 at home..." >}} + +{{< figure src="hamnetvpn04.png" alt="IPSec settings" + caption="Somehow that setup only worked when I removed this setting?#*!" >}} + +{{< figure src="hamnetvpn05.png" alt="PPP settings" + caption="And I ended up using those settings for PPP" >}} + +## More information + +I've also found some more links---just when I finished formatting this article. + +It 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. + +- Original article found on HAMNET + +- Also available on normal internet + diff --git a/content/posts/2022-10-24-changing-network-metrics-on-fedora-36/index.md b/content/posts/2022-10-24-changing-network-metrics-on-fedora-36/index.md new file mode 100644 index 0000000..1fb4f67 --- /dev/null +++ b/content/posts/2022-10-24-changing-network-metrics-on-fedora-36/index.md @@ -0,0 +1,23 @@ ++++ +title = "Network-metrics on Fedora 36" +summary = """quick n dirty...""" +date = "2022-10-23T20:15:44+02:00" +#lastmod = "" +categories = ["computerstuff"] +tags = ["fedora","linux","networking"] + ++++ + +If you are using NetworkManager, the proper way to change the metric for the default route is to modify the connection associated with interface enp0s3 in this way: + +~~~console +$ nmcli connection modify ipv4.route-metric 1 +~~~ + +and then re-activate the connection: + +~~~console +$ nmcli connection up +~~~ + +You can find the value for in the output of nmcli connection. diff --git a/content/posts/2022-11-01-winlink-on-linux-fix-invalid-handle-on-logfiles/01_openlogs.png b/content/posts/2022-11-01-winlink-on-linux-fix-invalid-handle-on-logfiles/01_openlogs.png new file mode 100644 index 0000000..5cb50e5 Binary files /dev/null and b/content/posts/2022-11-01-winlink-on-linux-fix-invalid-handle-on-logfiles/01_openlogs.png differ diff --git a/content/posts/2022-11-01-winlink-on-linux-fix-invalid-handle-on-logfiles/02_errmsg.png b/content/posts/2022-11-01-winlink-on-linux-fix-invalid-handle-on-logfiles/02_errmsg.png new file mode 100644 index 0000000..15dd413 Binary files /dev/null and b/content/posts/2022-11-01-winlink-on-linux-fix-invalid-handle-on-logfiles/02_errmsg.png differ diff --git a/content/posts/2022-11-01-winlink-on-linux-fix-invalid-handle-on-logfiles/index.md b/content/posts/2022-11-01-winlink-on-linux-fix-invalid-handle-on-logfiles/index.md new file mode 100644 index 0000000..c6b3a33 --- /dev/null +++ b/content/posts/2022-11-01-winlink-on-linux-fix-invalid-handle-on-logfiles/index.md @@ -0,0 +1,103 @@ ++++ +title = "Properly open Logfiles in RMS Express on Linux" +summary = """Removes the error message in RMS Expert when trying to open + Logfiles""" +date = "2022-11-01T22:58:49+01:00" +#lastmod = "" +categories = ["amateur-radio"] +tags = ["linux","winlink","windows","emulation","wine"] + ++++ + +Do you use Winlink regularly? Did you ever looked into the logfiles directory? + +Most users won'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. + +## The 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. + +![winlink program with logwindow opened](01_openlogs.png) + +Per default you may get this error message. + +![error message "invalid hadnle"](02_errmsg.png) + +## The 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`. + +{{% youtube GdiGMuVJpcI %}} + +There are two solutions that I have thought of. + +First, 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`. + +As 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. + +### textfile approach (notepad.exe) + +Create a textfile with the ending `.reg` like `openlogs.reg`. + +~~~reg +Windows Registry Editor Version 5.00 + +[HKEY_CLASSES_ROOT\.log] +@="txtfile" +"Content Type"="text/plain" +~~~ + +After saving the file, import it into the windows registry like this: + +~~~console +$ wine regedit openlogs.reg +~~~ + +This should work instantly. + +[Download](/files/winlink_openlogs.reg) this file. + +### logfile approach (native text-editor) + +Also create a textfile with the ending `.reg`, but fill it with these contents: + +~~~reg +Windows Registry Editor Version 5.00 + +[HKEY_CLASSES_ROOT\.log] +@="logfile" +"Content Type"="text/plain" + +[HKEY_CLASSES_ROOT\logfile] +@="Logfile Document" + +[HKEY_CLASSES_ROOT\logfile\shell] + +[HKEY_CLASSES_ROOT\logfile\shell\open] + +[HKEY_CLASSES_ROOT\logfile\shell\open\command] +@="\"winebrowser\" \"%1\"" +~~~ + +Load this into the registry: + +~~~console +$ 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. + +[Download](/files/winlink_openlogs_native.reg) this file. + +## The end + +Have you ever clicked on the Log menu in VARA or VARA FM? Well, that works +without those registry tweaks... I'm just saying :) diff --git a/content/posts/2022-11-21-hamnet-on-the-pfsense/01_create-ppp-interface.png b/content/posts/2022-11-21-hamnet-on-the-pfsense/01_create-ppp-interface.png new file mode 100644 index 0000000..166fabb Binary files /dev/null and b/content/posts/2022-11-21-hamnet-on-the-pfsense/01_create-ppp-interface.png differ diff --git a/content/posts/2022-11-21-hamnet-on-the-pfsense/02_create-l2tp-interface.png b/content/posts/2022-11-21-hamnet-on-the-pfsense/02_create-l2tp-interface.png new file mode 100644 index 0000000..1b03ccc Binary files /dev/null and b/content/posts/2022-11-21-hamnet-on-the-pfsense/02_create-l2tp-interface.png differ diff --git a/content/posts/2022-11-21-hamnet-on-the-pfsense/03_interface-assignments.png b/content/posts/2022-11-21-hamnet-on-the-pfsense/03_interface-assignments.png new file mode 100644 index 0000000..f842bb9 Binary files /dev/null and b/content/posts/2022-11-21-hamnet-on-the-pfsense/03_interface-assignments.png differ diff --git a/content/posts/2022-11-21-hamnet-on-the-pfsense/04_interface-configuration.png b/content/posts/2022-11-21-hamnet-on-the-pfsense/04_interface-configuration.png new file mode 100644 index 0000000..c0433cc Binary files /dev/null and b/content/posts/2022-11-21-hamnet-on-the-pfsense/04_interface-configuration.png differ diff --git a/content/posts/2022-11-21-hamnet-on-the-pfsense/05_routes.png b/content/posts/2022-11-21-hamnet-on-the-pfsense/05_routes.png new file mode 100644 index 0000000..29a7ca2 Binary files /dev/null and b/content/posts/2022-11-21-hamnet-on-the-pfsense/05_routes.png differ diff --git a/content/posts/2022-11-21-hamnet-on-the-pfsense/06_status-gateways.png b/content/posts/2022-11-21-hamnet-on-the-pfsense/06_status-gateways.png new file mode 100644 index 0000000..4c4634d Binary files /dev/null and b/content/posts/2022-11-21-hamnet-on-the-pfsense/06_status-gateways.png differ diff --git a/content/posts/2022-11-21-hamnet-on-the-pfsense/07_dhcp-server.png b/content/posts/2022-11-21-hamnet-on-the-pfsense/07_dhcp-server.png new file mode 100644 index 0000000..dae3863 Binary files /dev/null and b/content/posts/2022-11-21-hamnet-on-the-pfsense/07_dhcp-server.png differ diff --git a/content/posts/2022-11-21-hamnet-on-the-pfsense/index.md b/content/posts/2022-11-21-hamnet-on-the-pfsense/index.md new file mode 100644 index 0000000..f62b1d1 --- /dev/null +++ b/content/posts/2022-11-21-hamnet-on-the-pfsense/index.md @@ -0,0 +1,194 @@ ++++ +title = "HAMnet on the pfSense" +summary = """A short guide on how I installed my L2TP tunnel on my +router/firewall. Routes get announced to new DHCP clients.""" +date = "2022-11-21T20:13:08+01:00" +#lastmod = "" +categories = ["amateur-radio"] +tags = ["hamnet","pfSense","networking","linux"] +draft = true + ++++ + +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. + +In my recent +[post about HAMNET]({{< ref "2022-10-16-vpn-tunnel-into-hamnet-on-fedora-36" >}}) +I created an L2TP tunnel to the +german VPN Server at the RWTH Aachen University on my laptop. Routes have been +added manually---the network was only available on my laptop. No other device +was able to connect to the HAMNET. + +Now I made some changes to my home network where I finally was able to create +the tunnel on my main router/firewall. + +## Creating a new PPP device + +Select InterfacesAssignmentsPPPs + +![screenshot showing the top menu](01_create-ppp-interface.png) + +Click on the green + Add button on the bottom right and create the +new PPP interface with the following specs: + +| Settings 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** | + +You can change `vpn.afu.rwth-aachen.de` with the IP address of the server if you +like. That may help if you don't have a working DNS setup in your network. At the +moment the DNS entry points to `137.226.79.99`. + +![screenshot showing the PPP configuration](02_create-l2tp-interface.png) + +## Create a new L2TP device + +![screenshot showing device configuration](03_interface-assignments.png) + +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` -- or something like that) and click the +green button. + +Then click on the new interface and set it up. + +| Settings 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** | + +![screenshot showing interface configuration](04_interface-configuration.png) + +## 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. + +![screenshot showing routes setup](05_routes.png) + +## The tunnel should be up and running + +Go to StatusGateways and look if it is online. + +![screenshot of the gateway status page](06_status-gateways.png) + +## Send this routing configuration to DHCP clients + +We can send this configuration to DHCP clients when they get their IP address. + +Go to ServicesDHCP 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. + +You see three fields, Number, Type and Value. + +| Number | Type | Value | +| :--- | :--- | :--- | +| `121` | `String` | `09:2c:00:c0:a8:0a:01:0a:2c:80:c0:a8:0a:01` | + +{{< alert >}} +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! +{{< /alert >}} + +Create your own configuration with help of this script: + +~~~bash +#!/bin/bash +check_ip(){ + local n=0 val=1 + for i in ${1//./ }; do + [ $i -lt 0 -o $i -gt 255 ] && val=0 + n=$[n+1] + done + [ $n -ne 4 ] && val=0 + if [ $val -ne 1 ] ; then + echo "Invalid IP: $1" >&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 "01" ; then + echo "Invalid netmask: $nm" >&2 + exit 1 + else + nmbin=${nmbin//0/} + fi + nm=${#nmbin} + echo $nm + fi + gwhex=$(printf "%02x:%02x:%02x:%02x" ${2//./ }) + nwhex=$(printf "%02x:%02x:%02x:%02x" ${nw//./ }) + nmhex=$(printf "%02x" ${nm//./ }) + [ $nm -le 24 ] && nwhex=${nwhex%:*} + [ $nm -le 16 ] && nwhex=${nwhex%:*} + [ $nm -le 8 ] && nwhex=${nwhex%:*} + echo -n $nmhex:$nwhex:$gwhex + shift 2 + [ $# -gt 0 ] && echo -n ":" +done +echo +~~~ + +Source: [mgergi.hu](https://mgergi.hu/en/it-blog/static-route-dhcp-pfsense) + +Script was cited/hardcopied because I hate it when linked websites ain't +available any more. But there is a nice explanation on that website that +you should read. + +Replace `192.168.10.1` with your routers IP address! + +~~~console +$ 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. + +![screenshot of the DHCP server options](07_dhcp-server.png) + +## 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 + diff --git a/content/posts/_index.md b/content/posts/_index.md new file mode 100644 index 0000000..fed87c8 --- /dev/null +++ b/content/posts/_index.md @@ -0,0 +1,12 @@ ++++ +title = "Blog" +summary = "Blog posts" +#date = "" +#lastmod = "" +#categories = ["amateur-radio"] +#tags = [""] + ++++ + +Filter by category: [amateur-radio](/categories/amateur-radio/), +[computerstuff](/categories/computerstuff/) diff --git a/data/sharing.json b/data/sharing.json new file mode 100644 index 0000000..34e6089 --- /dev/null +++ b/data/sharing.json @@ -0,0 +1,32 @@ +{ + "email": { + "icon": "email", + "title": "sharing.email", + "url": "mailto:?body=%s&subject=%s" + }, + "facebook": { + "icon": "facebook", + "title": "sharing.facebook", + "url": "https://www.facebook.com/sharer/sharer.php?u=%s"e=%s" + }, + "linkedin": { + "icon": "linkedin", + "title": "sharing.linkedin", + "url": "https://www.linkedin.com/shareArticle?mini=true&url=%s&title=%s" + }, + "pinterest": { + "icon": "pinterest", + "title": "sharing.pinterest", + "url": "https://pinterest.com/pin/create/bookmarklet/?url=%s&description=%s" + }, + "reddit": { + "icon": "reddit", + "title": "sharing.reddit", + "url": "https://reddit.com/submit/?url=%s&resubmit=true&title=%s" + }, + "twitter": { + "icon": "twitter", + "title": "sharing.twitter", + "url": "https://twitter.com/intent/tweet/?url=%s&text=%s" + } +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..6439afe --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module github.com/oe7drt/oe7drt-website + +go 1.18 + +require github.com/jpanther/congo/v2 v2.4.1 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..0b5189d --- /dev/null +++ b/go.sum @@ -0,0 +1,4 @@ +github.com/jpanther/congo/v2 v2.4.0 h1:0fswnbuH8t0xHdeyLGeMCsTToZF+26btjvEVsAXTiEw= +github.com/jpanther/congo/v2 v2.4.0/go.mod h1:1S7DRoO1ZYS4YUdFd1LjTkdyjQwsjFWd8TqSfz3Jd+M= +github.com/jpanther/congo/v2 v2.4.1 h1:F9Nqi08otWCB0fi+ImnHuCnB053S9HullPtF4DsvQVk= +github.com/jpanther/congo/v2 v2.4.1/go.mod h1:1S7DRoO1ZYS4YUdFd1LjTkdyjQwsjFWd8TqSfz3Jd+M= diff --git a/static/android-chrome-192x192.png b/static/android-chrome-192x192.png new file mode 100644 index 0000000..0017787 Binary files /dev/null and b/static/android-chrome-192x192.png differ diff --git a/static/android-chrome-512x512.png b/static/android-chrome-512x512.png new file mode 100644 index 0000000..e01d0e0 Binary files /dev/null and b/static/android-chrome-512x512.png differ diff --git a/static/apple-touch-icon.png b/static/apple-touch-icon.png new file mode 100644 index 0000000..0017787 Binary files /dev/null and b/static/apple-touch-icon.png differ diff --git a/static/favicon-16x16.png b/static/favicon-16x16.png new file mode 100644 index 0000000..1f438d5 Binary files /dev/null and b/static/favicon-16x16.png differ diff --git a/static/favicon-32x32.png b/static/favicon-32x32.png new file mode 100644 index 0000000..cc14bac Binary files /dev/null and b/static/favicon-32x32.png differ diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000..7a83b45 Binary files /dev/null and b/static/favicon.ico differ diff --git a/static/files/A3BE169A.asc b/static/files/A3BE169A.asc new file mode 100644 index 0000000..62dae9e --- /dev/null +++ b/static/files/A3BE169A.asc @@ -0,0 +1,65 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBF/hCkEBEACxNbhvMkyREFtNQoHpebFJavh/1XT1CsNnrNGmK+7D2TkMkrm4 +CXQ7xyn+vpXYNzaxI+bkdyLjnO2Fjngqkx8ZAXVVVlcQCAkC6VWP8/UHYPWRp89g +YL/QFEp7bA5a78DIvLyZYX6BeA05tr5hUY11fz/1UmEzoUdctFTKs+KeyU/QsKuf +h0SLFBkV6jsS9SzTPKLEKOXwEoZ+lAMt8ZJrj4rpL6aeI2hPbvM9J+a8WntchnkE +vgA3R7GPUSHjJ5qPj6b9ZNI3NEx5QQDdD76RvEF7S/RYMposiwl/h+Ludarra9f/ +X5RspqtlbFEYhfQCnqqHNL69uzv1qADMJ8pu5nVG1DJXMEHw4LKxJx2cnkW/YWGH +Km8TJiQyAzqKbhL0L0Pkl4qIZpM2yrQFyQjZMsXz1B10ZxUu0YJM8croXO7tLJz7 +tfoG4DHKpgkcpxS1erpzEf3r3no1xgc5riVdbXBmAeqqO2cL3Vl7aYs+uM9DVkEJ +vbB1MIRsSOuwBheufqdXFOCyqJTar5sLKkpcxE2OpxLkFJukTZyNfdtj8quf6BAA +m9lpCLovqCQaONgT7jIn2O77y458zUpD2b2M6w7BOAVH/Q5EbqMSwjavMlY7ivyS +NscxHPD0Zd+C5TGjfUeGYNKqB81AJ0+6AE89G37JtyTEndKZNMf5plBHmQARAQAB +tCJEb21pbmljIFJlaWNoIDxkb21pbmljQG9lN2RydC5jb20+iQJUBBMBCAA+FiEE +1Jo84sz3JmhNmJoxvJ1q4aO+FpoFAl/hHiECGwMFCQeGH2QFCwkIBwIGFQoJCAsC +BBYCAwECHgECF4AACgkQvJ1q4aO+FpohRw/9E+thlUqbjMoWzG+ImexLFWI+7G3x +J+vahxByv//58UIPKH3FqnTs/NNUkVx3hOfCc4itNKa9YG/i4dfDqX7/m3KD4Y8f +120jemDilLJ+7/9m4RCv0giUIMBRt2fDeGsyqNDkafbg1ruXNXlJq3VPoPsfgb/5 +D+RG60/tIqYq7WixBsM8SD6jefpqYkhAxpvMQYZHH/nzp8zkbQsrdeeelxXapa+p +pGqB/m4wWURvfL5L5tHSENPgaTpq2mvOQemqZpeOUjLx3f/l5R/f43/xlkEtQwlZ +HoXZP41kW+dMI2XKSEcxNSyX0VJzTd4XRv7TkHbxbtEgqAByT0FKJiC/GKw9Phl/ +6AAWJS0VCHiAc6mfEYinAkmJFIfyQdeptmDDIZUIaWVe/1Ve5wHb4uCEXTEQ4GAC +hniA+KhuTt/iflxrE261VEry9A0KSl7HPzKDmWeaaqkfcRIJagdvlqSAX7CF3dq9 +9Jmg/xiNH+2zxd/WCzR3ZeYW2m1C94yCSMYe0S7XfMNveLNRQaiBKp8sm2Efy3j5 +sMbBCtU0F0IFuSjCpDK45C3qYWY28qRYW2+NY4qOXyaBvpCGC+w+xdM9sTF24xyX +L0LWWReH1J4FpKFc1Zoriai058QXNviJiPVmQlMIjv9p7vPlg1dof6hxephDJhKO +WH4G6qCK3SqW6mK0HURvbWluaWMgUmVpY2ggPGRvbWluaWNAbW0uc3Q+iQJXBBMB +CABBAhsDBQkHhh9kBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE1Jo84sz3JmhN +mJoxvJ1q4aO+FpoFAl/hHiICGQEACgkQvJ1q4aO+FprV+w/+LvpTM/xrn6CM0Nfd +EKCOjRgUelNXFIC957KOhQlGoZR8IXvy7BFjZdId5EG2zVJSRLjJs3VCPI4PLypH +46IV5PR4eUdCrkgJ41obXf3RIyp0dPxIaoNAucCWhMQTxVbgC3n1r7xvpUWedYlm +g/+5le56axu5tFmlM6anTjl6RaDuA+zQn1Wz8Elb8VQYE1dIK38xU2FLHvjzXRjO +2kXhYmYLaweJywMYhCq9+qnLHqA27mRrHD7/3c90KEiDLME4cZGaa1kQyD4ItNRP +uWc6kM+N4uq8Ca9n8rV0O9yZrRj5ralsZi3TuuVwH43q82sKimM0+msLusF7L50V +yaGjUFDeWdwiwCL31vnBVqcJ7RjBbsiz4vVKWRtK30eYItvBkgAN3wqOu1cU99h9 +bj2m2EeagvaLU5nN1o0aK8SHD0qqmK6PvRw+czwv6Delz8vghga/ls3W48DxU+IR +9pj8Aple6Gv38rz7OhRv0TOOUcTNsos8TnhaPsE9BS7A+nsAd2dG4vAtuNh9DeFt +admckBZOdGPShMQLzj5gBzVJHpww7ftbWLkHyGv6IDuaSgmclctCE4aPwe+goUhJ +Ye9kpharYGFPEsOXpiD3l25JySKlUiDo+VQ1On8SgZBLfYRu5SKp1YPePYoHmlWG +rBoiFBjktr2SwW5Ikgu7CrpZ/p25Ag0EX+EKQQEQAPFwKWF7vEn5DxNqkyBIeDs7 +W/BAk9lyi1F361lhrMJ4nLkqKP7J0Z7i5haocejwt22QxrDwbCvZ6GUuvobNGn9c +FGGIKuCvLq/DMFikMrGp/0xH2pcU1tvMY73v1P7ifyvLr7LXYHYsyVZop3L8Q9az +TAGEfxfUX0bmo2L/pF4HWT+N45yLksbrLvxxXi8gGTjI0Ung8F3Goo6V8bzed5mQ +iM2SQBahcNM3+omvIeoo7mn+ZtTFOh1pLvrbimjxuS09LD6UaJi74Esc/wvFdzeM +NaeMuBEnkRMkfKWZt6HmaiW9SuBlNs5q6JT+vog8GH7SNN500K99vRiq5N9T8OQ7 +mY2d+PRbDJpu3UiQ58Sc/m6EeoyTDqsqRsTnsmn5Gg0v0A8H5k9s5joP6tDdOZF/ +/SX0BZH4LjiQCENyuKM5KFF2HvB2cTFTjKgPqXX9vB9MoDxWC9cyMN274zAjSdb8 +9gwcadAzkYHQvRX0Ji/STs3ht2MV6URQLPPD9YDV7QgUCZpDNTq+qKbKls1Ka1fK +DzwZQ3bMZ7PSM5J9ga3eBJTmHf5Kfkg4O2w0sLecByTcRTbImI13AcKr8KOz/SiT +dv3QDLMs4wUjyAnik6qN/q90jlIsJPZH5gXfHAA7Q9GBtJsrJdGrvvDBVsHR8zSL +YjmMrg47mIRS0w+1jP+VABEBAAGJAjwEGAEIACYWIQTUmjzizPcmaE2YmjG8nWrh +o74WmgUCX+EKQQIbDAUJB4YfZAAKCRC8nWrho74WmhwmD/0UVuqn4dGZxpGp5C+8 +Kly76zW5szExGB+qZi8TFgEhZL5RcLMHlzT5+WEzDou9+vA8BX1k1y0sQ68VH5o+ +QuElv7FWF81HR/Gau4fAE18esIpg2zVN3XWJVbRMJiYBudriZH8dK1++4hFv70Q/ +LVKU8WBsnTMgGmUjC2cLYtFg2R7Ozv6MFflcbtPfQA4OXaPi0Dj1dHhr/MvoN+T2 +NmiCNSXOv/zF06hlwxQbXTufdfBu/UuBFQQuMjAFypyHqDKUYpJl44Rjihsf6fUW +SnrsRE+hh4d9HDRJS/kw30HdymQaQLqUD/XBRS13JiSoUC+opySvk8wXpz0aQNqr +iMyuA38PY0L0MiRCyZuhCIwo5bsgqMyAf0ozlyp8N/ZWcNJe+bf8QtcHpZ7sr5qN +8BPuZ9c29lBGJnbkoCJn6npspzYgQqvPbARNVKjSJxF/KfBxuW/uBXEeAFGV3Rd8 +Jg5OUcA8gJ0jYTTNJrnQG9o3gMfWvjtZ/czEJDk/i3ZPH+vRdVVejY508I7NXOf/ +OzBVAc8DvkALjz0nSfriMCyJYozyJdrNe1nTQsdthiPLnNU9aPBf/+ZNp+nV1jXm +Fq7bFbMQS57av3DYJ7edwI6AN/vn7ndz2J7D6R0K3nW3+yTwvYamhxxUvppQFHir +5evhJcIBD8V3e3BZ4gjwWAcFoQ== +=iogj +-----END PGP PUBLIC KEY BLOCK----- diff --git a/static/files/VARA_components.zip b/static/files/VARA_components.zip new file mode 100644 index 0000000..82eb645 Binary files /dev/null and b/static/files/VARA_components.zip differ diff --git a/static/files/dmrids_2021-12-12.csv.xz b/static/files/dmrids_2021-12-12.csv.xz new file mode 100644 index 0000000..155aeef Binary files /dev/null and b/static/files/dmrids_2021-12-12.csv.xz differ diff --git a/static/files/pdh.dll.zip b/static/files/pdh.dll.zip new file mode 100644 index 0000000..9557fbe Binary files /dev/null and b/static/files/pdh.dll.zip differ diff --git a/static/files/winlink_openlogs.reg b/static/files/winlink_openlogs.reg new file mode 100644 index 0000000..d653261 Binary files /dev/null and b/static/files/winlink_openlogs.reg differ diff --git a/static/files/winlink_openlogs_native.reg b/static/files/winlink_openlogs_native.reg new file mode 100644 index 0000000..a763346 Binary files /dev/null and b/static/files/winlink_openlogs_native.reg differ diff --git a/static/site.webmanifest b/static/site.webmanifest new file mode 100644 index 0000000..8c63097 --- /dev/null +++ b/static/site.webmanifest @@ -0,0 +1,62 @@ +{ + "lang": "en", + "name": "OE7DRT", + "short_name": "OE7DRT", + "description": "Personal website of Dominic Reich “OE7DRT” – austrian amateur radio station – licensed since November 2019.", + "start_url": "/?utm_source=homescreen", + "theme_color": "rgb(25,55,71)", + "background_color": "#fff", + "orientation": "portrait", + "display": "minimal-ui", + "scope": "/", + "icons": [ + { + "src": "/icons/icon-72x72.png", + "sizes": "72x72", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/icons/icon-96x96.png", + "sizes": "96x96", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/icons/icon-128x128.png", + "sizes": "128x128", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/icons/icon-144x144.png", + "sizes": "144x144", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/icons/icon-152x152.png", + "sizes": "152x152", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/icons/icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/icons/icon-384x384.png", + "sizes": "384x384", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/icons/icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any maskable" + } + ] +}