Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.body_end.template0
-rw-r--r--.config4
-rw-r--r--.footer.template5
-rw-r--r--.gitignore3
-rw-r--r--.md6
-rw-r--r--.title.template2
-rw-r--r--all_posts.html57
-rw-r--r--all_tags.html55
-rwxr-xr-xbb.sh1
-rw-r--r--download-mods-for-a-steam-game-from-the-steam-workshop.html56
-rw-r--r--download-mods-for-a-steam-game-from-the-steam-workshop.md7
-rw-r--r--fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.html25
-rw-r--r--fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.md2
-rw-r--r--feed.rss405
-rw-r--r--index.html419
-rw-r--r--openwrt-24101------keenetic-launcher-kn-1221.html391
-rw-r--r--openwrt-24101------keenetic-launcher-kn-1221.md340
-rw-r--r--pubnix----prosody--pam-.html159
-rw-r--r--pubnix----prosody--pam-.md84
-rw-r--r--sitemap.xml79
-rw-r--r--tag_keeneticos.html64
-rw-r--r--tag_openwrt.html414
-rw-r--r--tag_prosody.html76
-rw-r--r--tag_pubnix.html76
-rw-r--r--tag_sh.html54
-rw-r--r--tag_steam.html54
-rw-r--r--tag_wifi-roaming.html64
-rw-r--r--tag_wifi.html64
-rw-r--r--tag_xmpp.html76
-rw-r--r--tag_изменённые.html389
-rw-r--r--tag_прошивки.html389
-rw-r--r--tag_разработка.html389
32 files changed, 4153 insertions, 56 deletions
diff --git a/.body_end.template b/.body_end.template
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/.body_end.template
diff --git a/.config b/.config
index ea3b033..280152a 100644
--- a/.config
+++ b/.config
@@ -28,7 +28,7 @@ global_analytics_file=""
# Leave this empty (i.e. "") if you don't want to use feedburner,
# or change it to your own URL
-global_feedburner=""
+global_feedburner="https://www.lotigara.ru/blog/feed.rss"
# Change this to your username if you want to use twitter for comments
global_twitter_username=""
@@ -83,7 +83,7 @@ footer_file=".footer.template"
# and before the actual blog content
body_begin_file=".body_begin.template"
# extra content to add just before we close </body>
-body_end_file=""
+body_end_file=".body_end.template"
# extra content to ONLY on the index page AFTER `body_begin_file` contents
# and before the actual content
body_begin_file_index=""
diff --git a/.footer.template b/.footer.template
index ca22778..aa18b46 100644
--- a/.footer.template
+++ b/.footer.template
@@ -1,3 +1,8 @@
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
<div class="section_header section_header_last">
<p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
<a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
diff --git a/.gitignore b/.gitignore
index dc3132c..5900b7c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1 @@
-*.xml
-all*.html
-tag*.html
.*.tar.gz
diff --git a/.md b/.md
deleted file mode 100644
index d4fd8eb..0000000
--- a/.md
+++ /dev/null
@@ -1,6 +0,0 @@
-Title on this line
-
-The rest of the text file is a **Markdown** blog post. The process will continue
-as soon as you exit your editor.
-
-Метки: keep-this-tag-format, tags-are-optional, beware-with-underscores-in-markdown, example
diff --git a/.title.template b/.title.template
index 5921699..ef21fee 100644
--- a/.title.template
+++ b/.title.template
@@ -4,7 +4,7 @@
<div class="floating_element">
<h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
<h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
- <p style="display:inline">блог|blog</p>
+ <p style="display:inline">журнал|journal</p>
<h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
<h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
<label id="switch-label" for="theme-switch"></label>
diff --git a/all_posts.html b/all_posts.html
new file mode 100644
index 0000000..c8c4e4c
--- /dev/null
+++ b/all_posts.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Блог самохостера Lotigara &mdash; Все заметки</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<h3>Все заметки</h3>
+<h4 class='allposts_header'>июня 2025</h4>
+<ul>
+<li><a href="./download-mods-for-a-steam-game-from-the-steam-workshop.html">Download mods for a Steam game from the Steam Workshop</a> &mdash; июня 07, 2025</li>
+</ul>
+<h4 class='allposts_header'>мая 2025</h4>
+<ul>
+<li><a href="./pubnix----prosody--pam-.html">Pubnix - Установка Prosody с PAM-авторизацией</a> &mdash; мая 04, 2025</li>
+</ul>
+<h4 class='allposts_header'>апреля 2025</h4>
+<ul>
+<li><a href="./openwrt-24101------keenetic-launcher-kn-1221.html">OpenWrt 24.10.1 - исправление, добавляющее поддержку Keenetic Launcher (KN-1221)</a> &mdash; апреля 28, 2025</li>
+</ul>
+<h4 class='allposts_header'>марта 2025</h4>
+<ul>
+<li><a href="./fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.html">Fast Transition (Wi-Fi Roaming) with OpenWrt and KeeneticOS</a> &mdash; марта 07, 2025</li>
+</ul>
+<div id="all_posts"><a href="./index.html">Вернуться к начальной странице</a></div>
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/all_tags.html b/all_tags.html
new file mode 100644
index 0000000..47da597
--- /dev/null
+++ b/all_tags.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Блог самохостера Lotigara &mdash; Все метки</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<h3>Все метки</h3>
+<ul>
+<li><a href="tag_keeneticos.html">keeneticos</a> &mdash; 1 заметка</li>
+<li><a href="tag_openwrt.html">openwrt</a> &mdash; 2 заметки</li>
+<li><a href="tag_prosody.html">prosody</a> &mdash; 1 заметка</li>
+<li><a href="tag_pubnix.html">pubnix</a> &mdash; 1 заметка</li>
+<li><a href="tag_sh.html">sh</a> &mdash; 1 заметка</li>
+<li><a href="tag_steam.html">steam</a> &mdash; 1 заметка</li>
+<li><a href="tag_wifi-roaming.html">wifi-roaming</a> &mdash; 1 заметка</li>
+<li><a href="tag_wifi.html">wifi</a> &mdash; 1 заметка</li>
+<li><a href="tag_xmpp.html">xmpp</a> &mdash; 1 заметка</li>
+<li><a href="tag_изменённые.html">изменённые</a> &mdash; 1 заметка</li>
+<li><a href="tag_прошивки.html">прошивки</a> &mdash; 1 заметка</li>
+<li><a href="tag_разработка.html">разработка</a> &mdash; 1 заметка</li>
+</ul>
+<div id="all_posts"><a href="./index.html">Вернуться к начальной странице</a></div>
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/bb.sh b/bb.sh
index 8629d07..d2f518e 100755
--- a/bb.sh
+++ b/bb.sh
@@ -972,6 +972,7 @@ make_sitemap() {
mv "$sitemapfile" "$blog_sitemap"
chmod 644 $blog_sitemap
+ [[ $git_repo == true ]] && git add $blog_sitemap
}
# Generate the feed file
diff --git a/download-mods-for-a-steam-game-from-the-steam-workshop.html b/download-mods-for-a-steam-game-from-the-steam-workshop.html
new file mode 100644
index 0000000..24e3b7e
--- /dev/null
+++ b/download-mods-for-a-steam-game-from-the-steam-workshop.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Download mods for a Steam game from the Steam Workshop</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<!-- entry begin -->
+<div class="section_header"><a class="ablack" href="download-mods-for-a-steam-game-from-the-steam-workshop.html">
+Download mods for a Steam game from the Steam Workshop
+</a></div>
+<!-- bashblog_timestamp: #202506072028.51# -->
+<div class="subtitle">июня 07, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<pre alt="sh">
+steamcmd "+login $USERID" $(for i in $MODLIST; do echo "+download_item $APPID $i"; done)
+</pre>
+
+<p>Метки: <a href='tag_sh.html'>sh</a>, <a href='tag_steam.html'>steam</a></p>
+<!-- text end -->
+<!-- entry end -->
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/download-mods-for-a-steam-game-from-the-steam-workshop.md b/download-mods-for-a-steam-game-from-the-steam-workshop.md
new file mode 100644
index 0000000..e4ba50f
--- /dev/null
+++ b/download-mods-for-a-steam-game-from-the-steam-workshop.md
@@ -0,0 +1,7 @@
+Download mods for a Steam game from the Steam Workshop
+
+<pre alt="sh">
+steamcmd "+login $USERID" $(for i in $MODLIST; do echo "+download_item $APPID $i"; done)
+</pre>
+
+Метки: sh, steam
diff --git a/fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.html b/fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.html
index f687688..b0c2a53 100644
--- a/fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.html
+++ b/fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.html
@@ -18,7 +18,7 @@
<div class="floating_element">
<h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
<h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
- <p style="display:inline">блог|blog</p>
+ <p style="display:inline">журнал|journal</p>
<h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
<h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
<label id="switch-label" for="theme-switch"></label>
@@ -35,7 +35,7 @@ Ivan Davydov
</div>
<!-- text begin -->
-<h5>tested on KeeneticOS v3.8.7 &amp; OpenWrt v23.05.5</h5>
+<h5>tested to not work on KeeneticOS v3.8.7 &amp; OpenWrt v23.05.5</h5>
<p>First, set up FT on your OpenWrt devices.</p>
@@ -50,25 +50,14 @@ Ivan Davydov
<p>Press the "Save" button. Now you have a so-called "Wi-Fi system" with use of both KeeneticOS and OpenWrt!</p>
<p>Метки: <a href='tag_keeneticos.html'>keeneticos</a>, <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_wifi.html'>wifi</a>, <a href='tag_wifi-roaming.html'>wifi-roaming</a></p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<!-- text end -->
<!-- entry end -->
</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
<div class="section_header section_header_last">
<p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
<a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
diff --git a/fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.md b/fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.md
index fd26836..776172f 100644
--- a/fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.md
+++ b/fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.md
@@ -1,6 +1,6 @@
Fast Transition (Wi-Fi Roaming) with OpenWrt and KeeneticOS
-##### tested on KeeneticOS v3.8.7 & OpenWrt v23.05.5
+##### tested to not work on KeeneticOS v3.8.7 & OpenWrt v23.05.5
First, set up FT on your OpenWrt devices.
diff --git a/feed.rss b/feed.rss
index b236833..ac1c726 100644
--- a/feed.rss
+++ b/feed.rss
@@ -2,44 +2,427 @@
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel><title>Блог самохостера Lotigara</title><link>https://www.lotigara.ru/blog/index.html</link>
<description>Заметки какого-то школьника на тему ИТ</description><language>en</language>
-<lastBuildDate>Mon, 28 Apr 2025 15:59:51 +0300</lastBuildDate>
-<pubDate>Mon, 28 Apr 2025 15:59:51 +0300</pubDate>
+<lastBuildDate>Wed, 11 Jun 2025 16:45:45 +0300</lastBuildDate>
+<pubDate>Wed, 11 Jun 2025 16:45:45 +0300</pubDate>
<atom:link href="https://www.lotigara.ru/blog/feed.rss" rel="self" type="application/rss+xml" />
<item><title>
-Fast Transition (Wi-Fi Roaming) with OpenWrt and KeeneticOS
+Download mods for a Steam game from the Steam Workshop
</title><description><![CDATA[
-<h5>tested on KeeneticOS v3.8.7 &amp; OpenWrt v23.05.5</h5>
+<pre alt="sh">
+steamcmd "+login $USERID" $(for i in $MODLIST; do echo "+download_item $APPID $i"; done)
+</pre>
-<p>First, set up FT on your OpenWrt devices.</p>
+<p>Метки: <a href='tag_sh.html'>sh</a>, <a href='tag_steam.html'>steam</a></p>
+<!-- text end -->
+]]></description><link>https://www.lotigara.ru/blog/download-mods-for-a-steam-game-from-the-steam-workshop.html</link>
+<guid>https://www.lotigara.ru/blog/./download-mods-for-a-steam-game-from-the-steam-workshop.html</guid>
+<dc:creator>Ivan Davydov</dc:creator>
+<pubDate>Sat, 07 Jun 2025 20:28:51 +0300</pubDate></item>
+<item><title>
+Pubnix - Установка Prosody с PAM-авторизацией
+</title><description><![CDATA[
-<p>Then, change the mode of your Keenetic (?) devices to Extender (there are Repeater/Extender and Access Point/Extender, the last is the recommended).</p>
+<h1>Использованные источники</h1>
-<p>Go to the <code>Access Point/Extender (Repeater/Extender) &gt; Home segment</code> menu. Change the settings of the Wi-Fi network to those ones in OpenWrt.</p>
+<ul>
+<li><a href="https://blog.desdelinux.net/en/prosody-im-local-users-SME-networks">DesdeLinux</a></li>
+<li><a href="https://landchad.net/prosody">LandChad</a></li>
+<li><a href="https://prosody.im">Prosody</a></li>
+</ul>
-<p>Scroll below to the "Roaming for wireless devices" section. Enable "Fast transition (802.11r)" and write your mobility domain ID converted to the ASCII format.</p>
+<h1>0. Системные требования</h1>
-<p>You can use an online converter like this one: <a href="https://www.rapidtables.com/convert/number/hex-to-ascii.html">https://www.rapidtables.com/convert/number/hex-to-ascii.html</a>. Keep the "Mobility domain key" field unedited.</p>
+<ul>
+<li>Firewall с следующими открытыми портами:</li>
+<li><ul>
+<li>5000/tcp (передача файлов)</li>
+</ul></li>
+<li><ul>
+<li>5222/tcp (подключение клиента)</li>
+</ul></li>
+<li><ul>
+<li>5269/tcp (федерация, подключение сервера к серверу)</li>
+</ul></li>
+<li><ul>
+<li>5281/tcp (по желанию, но рекомендуется)</li>
+</ul></li>
+<li><p>Debian 12 с последними обновлениями</p></li>
+</ul>
-<p>Press the "Save" button. Now you have a so-called "Wi-Fi system" with use of both KeeneticOS and OpenWrt!</p>
+<hr />
+]]></description><link>https://www.lotigara.ru/blog/pubnix----prosody--pam-.html</link>
+<guid>https://www.lotigara.ru/blog/./pubnix----prosody--pam-.html</guid>
+<dc:creator>Ivan Davydov</dc:creator>
+<pubDate>Sun, 04 May 2025 21:46:43 +0300</pubDate></item>
+<item><title>
+OpenWrt 24.10.1 - исправление, добавляющее поддержку Keenetic Launcher (KN-1221)
+</title><description><![CDATA[
-<p>Метки: <a href='tag_keeneticos.html'>keeneticos</a>, <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_wifi.html'>wifi</a>, <a href='tag_wifi-roaming.html'>wifi-roaming</a></p>
+<p>Вот оно:
+<summary>
+<details></p>
+
+<pre>
+From ef20327e33fb38220ba0bca4418464749305e555 Mon Sep 17 00:00:00 2001
+From: Ivan Davydov <lotigara@lotigara.ru>
+Date: Tue, 4 Mar 2025 23:54:13 +0300
+Subject: [PATCH] ramips: mt76x8: add support for Keenetic Launcher (KN-1221)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+Specification:
+SoC: MediaTek MT7628AN
+RAM: 128M DDR2, ESMT M14D128168A (2Y)
+Flash: 32M, cFeon EN25QH256A (Dual Boot on OEM, concatenated on OpenWrt,
+SPI)
+Switch: MediaTek MT7628AN, 3 ports 100 Mbps
+WiFi: MediaTek MT7628AN 2.4 GHz 802.11n
+USB: 1 port USB 2.0
+GPIO: 1 button (Wi-Fi & Reset on OEM, Reset on OpenWrt), 3 LEDs (Power,
+Internet, Wi-Fi), USB port power controls
+Disassembly:
+There are 2 screws at the bottom near the LEDs hidden by rubber mounts.
+After removing the screws, pry the gray plastic part around (it is secured
+with latches) and remove it.
+UART Interface:
+The UART interface can be connected to the 5 pin located between LAN
+ports and the WAN one.
+Pins (from the second LAN port to the WAN one): VCC, TX, RX, NC, GND
+Settings: 115200, 8N1
+Flashing via TFTP:
+1. Connect your PC and router to the first LAN port, configure PC
+interface using IP 192.168.1.2, mask 255.255.255.0
+2. Serve the firmware image (for OpenWrt it is *-squashfs-factory.bin)
+renamed to KN-1221_recovery.bin via TFTP
+3. Power up the router while pressing Wi-Fi button
+4. Release Wi-Fi button when Power LED starts blinking
+To revert back to OEM firmware:
+The return to the OEM firmware is carried out by using the methods
+described above with the help of the appropriate firmware image found on
+osvault.keenetic.net.
+When using OEM bootloader, the firmware image size cannot exceed the size
+of one OEM «Firmware_x» partition or Kernel + rootFS size.
+Signed-off-by: Ivan Davydov <lotigara@lotigara.ru>
+Link: https://github.com/openwrt/openwrt/pull/18164
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ .../ramips/dts/mt7628an_keenetic_kn-1221.dts | 209 ++++++++++++++++++
+ target/linux/ramips/image/mt76x8.mk | 12 +
+ .../mt76x8/base-files/etc/board.d/01_leds | 1 +
+ .../mt76x8/base-files/etc/board.d/02_network | 5 +
+ 4 files changed, 227 insertions(+)
+ create mode 100644 target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+diff --git a/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+new file mode 100644
+index 00000000000000..6f5cf96856ed21
+--- /dev/null
++++ b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+@@ -0,0 +1,209 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++
++#include "mt7628an.dtsi"
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/leds/common.h>
++
++/ {
++ compatible = "keenetic,kn-1221", "mediatek,mt7628an-soc";
++ model = "Keenetic KN-1221";
++
++ aliases {
++ label-mac-device = &ethernet;
++
++ led-boot = &led_power;
++ led-failsafe = &led_power;
++ led-running = &led_power;
++ led-upgrade = &led_power;
++ };
++
++ chosen {
++ bootargs = "console=ttyS0,115200";
++ };
++
++ regulator-usb {
++ compatible = "regulator-fixed";
++ regulator-name = "USB-power";
++ regulator-min-microvolt = <5000000>;
++ regulator-max-microvolt = <5000000>;
++ gpios = <&gpio 6 GPIO_ACTIVE_HIGH>;
++ enable-active-high;
++ regulator-always-on;
++ };
++
++ leds {
++ compatible = "gpio-leds";
++
++ led_power: power {
++ function = LED_FUNCTION_POWER;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
++ };
++
++ internet {
++ function = LED_FUNCTION_WAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
++ };
++
++ fn {
++ function = LED_FUNCTION_WLAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
++ linux,default-trigger = "phy0tpt";
++ };
++ };
++
++ keys {
++ compatible = "gpio-keys";
++
++ reset {
++ label = "restart";
++ gpios = <&gpio 37 GPIO_ACTIVE_LOW>;
++ linux,code = <KEY_RESTART>;
++ };
++ };
++
++ virtual_flash {
++ compatible = "mtd-concat";
++ devices = <&firmware1 &firmware2>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ compatible = "denx,uimage";
++ label = "firmware";
++ reg = <0x0 0x1cc0000>;
++ };
++ };
++ };
++};
++
++&state_default {
++ gpio {
++ groups = "i2c", "spi cs1", "gpio", "refclk", "wdt";
++ function = "gpio";
++ };
++};
++
++&spi0 {
++ status = "okay";
++
++ flash@0 {
++ compatible = "jedec,spi-nor";
++ reg = <0>;
++ spi-max-frequency = <32000000>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ label = "u-boot";
++ reg = <0x0 0x30000>;
++ read-only;
++ };
++
++ partition@30000 {
++ label = "u-config";
++ reg = <0x30000 0x10000>;
++ read-only;
++ };
++
++ partition@40000 {
++ label = "rf-eeprom";
++ reg = <0x40000 0x10000>;
++ read-only;
++
++ nvmem-layout {
++ compatible = "fixed-layout";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ eeprom_factory_0: eeprom@0 {
++ reg = <0x0 0x400>;
++ };
++
++ macaddr_factory_4: macaddr@4 {
++ reg = <0x4 0x6>;
++ };
++ };
++ };
++
++ firmware1: partition@50000 {
++ label = "firmware_1";
++ reg = <0x50000 0xe60000>;
++ };
++
++ partition@eb0000 {
++ label = "config_1";
++ reg = <0xeb0000 0x40000>;
++ read-only;
++ };
++
++ partition@ef0000 {
++ label = "storage";
++ reg = <0xef0000 0x100000>;
++ read-only;
++ };
++
++ partition@ff0000 {
++ label = "dump";
++ reg = <0xff0000 0x10000>;
++ read-only;
++ };
++
++ partition@1000000 {
++ label = "u-state";
++ reg = <0x1000000 0x30000>;
++ read-only;
++ };
++
++ partition@1030000 {
++ label = "u-config_res";
++ reg = <0x1030000 0x10000>;
++ read-only;
++ };
++
++ partition@1040000 {
++ label = "rf-eeprom_res";
++ reg = <0x1040000 0x10000>;
++ read-only;
++ };
++
++ firmware2: partition@1050000 {
++ label = "firmware_2";
++ reg = <0x1050000 0xe60000>;
++ };
++
++ partition@1eb0000 {
++ label = "Config_2";
++ reg = <0x1eb0000 0x40000>;
++ read-only;
++ };
++ };
++ };
++};
++
++&ethernet {
++ nvmem-cells = <&macaddr_factory_4>;
++ nvmem-cell-names = "mac-address";
++};
++
++&esw {
++ mediatek,portmap = <0x3e>;
++ mediatek,portdisable = <0x38>;
++};
++
++&wmac {
++ status = "okay";
++
++ nvmem-cells = <&eeprom_factory_0>;
++ nvmem-cell-names = "eeprom";
++};
+diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
+index 8c8cfee23b6cfa..f442148d9ecf10 100644
+--- a/target/linux/ramips/image/mt76x8.mk
++++ b/target/linux/ramips/image/mt76x8.mk
+@@ -366,6 +366,18 @@ define Device/jotale_js76x8-32m
+ endef
+ TARGET_DEVICES += jotale_js76x8-32m
++define Device/keenetic_kn-1221
++ BLOCKSIZE := 64k
++ IMAGE_SIZE := 29440k
++ DEVICE_VENDOR := Keenetic
++ DEVICE_MODEL := KN-1221
++ DEVICE_PACKAGES := kmod-usb2
++ IMAGES += factory.bin
++ IMAGE/factory.bin := $$(sysupgrade_bin) | pad-to $$$$(BLOCKSIZE) | \
++ check-size 14720k | zyimage -d 0x801221 -v "KN-1221"
++endef
++TARGET_DEVICES += keenetic_kn-1221
++
+ define Device/keenetic_kn-1613
+ IMAGE_SIZE := 31488k
+ DEVICE_VENDOR := Keenetic
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+index b87062ae3c5ae5..79f78a2a459487 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+@@ -58,4 +58,5 @@ hiwifi,hc5661a|\
+ hiwifi,hc5761a)
+ ucidef_set_led_switch "internet" "internet" "blue:internet" "switch0" "0x10"
+ ;;
++keenetic,kn-1221|\
+ keenetic,kn-1613)
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+index fbdc7fb5a2697a..6e6e1310d3495f 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+@@ -131,5 +131,9 @@ ramips_setup_interfaces()
+ ucidef_add_switch "switch0" \
+ "0:lan" "1:lan" "2:lan" "6@eth0"
+ ;;
++ keenetic,kn-1221)
++ ucidef_add_switch "switch0" \
++ "1:lan" "2:lan" "0:wan" "6@eth0"
++ ;;
+ keenetic,kn-1613|\
+ motorola,mwr03)
+@@ -280,5 +280,6 @@ ramips_setup_macs()
+ totolink,lr1200)
+ wan_mac=$(mtd_get_mac_binary factory 0x2e)
+ ;;
++ keenetic,kn-1221|\
+ keenetic,kn-1613|\
+ zyxel,keenetic-extra-ii)
+</pre>
+<p></details>
+</summary></p>
+<p>Или в виде файла: <a href="/files/18164.patch.backport-24.10.1">18164.patch.backport-24.10.1</a>.
+Готовые сборки тоже доступны в виде файлов: <a href="/files/openwrt-kn-1221-24.10">openwrt-kn-1221-24.10</a></p>
+<p>Метки: <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_разработка.html'>разработка</a>, <a href='tag_изменённые прошивки.html'>изменённые прошивки</a></p>
+<!-- text end -->
+]]></description><link>https://www.lotigara.ru/blog/openwrt-24101------keenetic-launcher-kn-1221.html</link>
+<guid>https://www.lotigara.ru/blog/./openwrt-24101------keenetic-launcher-kn-1221.html</guid>
+<dc:creator>Ivan Davydov</dc:creator>
+<pubDate>Mon, 28 Apr 2025 16:01:09 +0300</pubDate></item>
+<item><title>
+Fast Transition (Wi-Fi Roaming) with OpenWrt and KeeneticOS
+</title><description><![CDATA[
+
+<h5>tested to not work on KeeneticOS v3.8.7 &amp; OpenWrt v23.05.5</h5>
+
+<p>First, set up FT on your OpenWrt devices.</p>
+<p>Then, change the mode of your Keenetic (?) devices to Extender (there are Repeater/Extender and Access Point/Extender, the last is the recommended).</p>
+
+<p>Go to the <code>Access Point/Extender (Repeater/Extender) &gt; Home segment</code> menu. Change the settings of the Wi-Fi network to those ones in OpenWrt.</p>
+
+<p>Scroll below to the "Roaming for wireless devices" section. Enable "Fast transition (802.11r)" and write your mobility domain ID converted to the ASCII format.</p>
+<p>You can use an online converter like this one: <a href="https://www.rapidtables.com/convert/number/hex-to-ascii.html">https://www.rapidtables.com/convert/number/hex-to-ascii.html</a>. Keep the "Mobility domain key" field unedited.</p>
+<p>Press the "Save" button. Now you have a so-called "Wi-Fi system" with use of both KeeneticOS and OpenWrt!</p>
+<p>Метки: <a href='tag_keeneticos.html'>keeneticos</a>, <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_wifi.html'>wifi</a>, <a href='tag_wifi-roaming.html'>wifi-roaming</a></p>
<!-- text end -->
]]></description><link>https://www.lotigara.ru/blog/fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.html</link>
<guid>https://www.lotigara.ru/blog/./fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.html</guid>
diff --git a/index.html b/index.html
index 6005b97..c202f65 100644
--- a/index.html
+++ b/index.html
@@ -18,56 +18,447 @@
<div class="floating_element">
<h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
<h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
- <p style="display:inline">блог|blog</p>
+ <p style="display:inline">журнал|journal</p>
<h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
<h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
<label id="switch-label" for="theme-switch"></label>
</div>
</div></div></div>
<div id="divbody"><div class="content">
-<div class="section_header"><a class="ablack" href="fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.html">
-Fast Transition (Wi-Fi Roaming) with OpenWrt and KeeneticOS
+<div class="section_header"><a class="ablack" href="download-mods-for-a-steam-game-from-the-steam-workshop.html">
+Download mods for a Steam game from the Steam Workshop
</a></div>
-<!-- bashblog_timestamp: #202503071940.59# -->
-<div class="subtitle">марта 07, 2025 &mdash;
+<!-- bashblog_timestamp: #202506072028.51# -->
+<div class="subtitle">июня 07, 2025 &mdash;
Ivan Davydov
</div>
<!-- text begin -->
-<h5>tested on KeeneticOS v3.8.7 &amp; OpenWrt v23.05.5</h5>
+<pre alt="sh">
+steamcmd "+login $USERID" $(for i in $MODLIST; do echo "+download_item $APPID $i"; done)
+</pre>
-<p>First, set up FT on your OpenWrt devices.</p>
+<p>Метки: <a href='tag_sh.html'>sh</a>, <a href='tag_steam.html'>steam</a></p>
+<!-- text end -->
+<div class="section_header"><a class="ablack" href="pubnix----prosody--pam-.html">
+Pubnix - Установка Prosody с PAM-авторизацией
+</a></div>
+<!-- bashblog_timestamp: #202505042146.43# -->
+<div class="subtitle">мая 04, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
-<p>Then, change the mode of your Keenetic (?) devices to Extender (there are Repeater/Extender and Access Point/Extender, the last is the recommended).</p>
+<h1>Использованные источники</h1>
-<p>Go to the <code>Access Point/Extender (Repeater/Extender) &gt; Home segment</code> menu. Change the settings of the Wi-Fi network to those ones in OpenWrt.</p>
+<ul>
+<li><a href="https://blog.desdelinux.net/en/prosody-im-local-users-SME-networks">DesdeLinux</a></li>
+<li><a href="https://landchad.net/prosody">LandChad</a></li>
+<li><a href="https://prosody.im">Prosody</a></li>
+</ul>
-<p>Scroll below to the "Roaming for wireless devices" section. Enable "Fast transition (802.11r)" and write your mobility domain ID converted to the ASCII format.</p>
+<h1>0. Системные требования</h1>
-<p>You can use an online converter like this one: <a href="https://www.rapidtables.com/convert/number/hex-to-ascii.html">https://www.rapidtables.com/convert/number/hex-to-ascii.html</a>. Keep the "Mobility domain key" field unedited.</p>
+<ul>
+<li>Firewall с следующими открытыми портами:</li>
+<li><ul>
+<li>5000/tcp (передача файлов)</li>
+</ul></li>
+<li><ul>
+<li>5222/tcp (подключение клиента)</li>
+</ul></li>
+<li><ul>
+<li>5269/tcp (федерация, подключение сервера к серверу)</li>
+</ul></li>
+<li><ul>
+<li>5281/tcp (по желанию, но рекомендуется)</li>
+</ul></li>
+<li><p>Debian 12 с последними обновлениями</p></li>
+</ul>
-<p>Press the "Save" button. Now you have a so-called "Wi-Fi system" with use of both KeeneticOS and OpenWrt!</p>
+<p class="readmore"><a href="./pubnix----prosody--pam-.html">Читать далее...</a></p>
+<div class="section_header"><a class="ablack" href="openwrt-24101------keenetic-launcher-kn-1221.html">
+OpenWrt 24.10.1 - исправление, добавляющее поддержку Keenetic Launcher (KN-1221)
+</a></div>
+<!-- bashblog_timestamp: #202504281601.09# -->
+<div class="subtitle">апреля 28, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
-<p>Метки: <a href='tag_keeneticos.html'>keeneticos</a>, <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_wifi.html'>wifi</a>, <a href='tag_wifi-roaming.html'>wifi-roaming</a></p>
+<p>Вот оно:
+<summary>
+<details></p>
+
+<pre>
+From ef20327e33fb38220ba0bca4418464749305e555 Mon Sep 17 00:00:00 2001
+From: Ivan Davydov <lotigara@lotigara.ru>
+Date: Tue, 4 Mar 2025 23:54:13 +0300
+Subject: [PATCH] ramips: mt76x8: add support for Keenetic Launcher (KN-1221)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+Specification:
+SoC: MediaTek MT7628AN
+RAM: 128M DDR2, ESMT M14D128168A (2Y)
+Flash: 32M, cFeon EN25QH256A (Dual Boot on OEM, concatenated on OpenWrt,
+SPI)
+Switch: MediaTek MT7628AN, 3 ports 100 Mbps
+WiFi: MediaTek MT7628AN 2.4 GHz 802.11n
+USB: 1 port USB 2.0
+GPIO: 1 button (Wi-Fi & Reset on OEM, Reset on OpenWrt), 3 LEDs (Power,
+Internet, Wi-Fi), USB port power controls
+Disassembly:
+There are 2 screws at the bottom near the LEDs hidden by rubber mounts.
+After removing the screws, pry the gray plastic part around (it is secured
+with latches) and remove it.
+UART Interface:
+The UART interface can be connected to the 5 pin located between LAN
+ports and the WAN one.
+Pins (from the second LAN port to the WAN one): VCC, TX, RX, NC, GND
+Settings: 115200, 8N1
+Flashing via TFTP:
+1. Connect your PC and router to the first LAN port, configure PC
+interface using IP 192.168.1.2, mask 255.255.255.0
+2. Serve the firmware image (for OpenWrt it is *-squashfs-factory.bin)
+renamed to KN-1221_recovery.bin via TFTP
+3. Power up the router while pressing Wi-Fi button
+4. Release Wi-Fi button when Power LED starts blinking
+To revert back to OEM firmware:
+The return to the OEM firmware is carried out by using the methods
+described above with the help of the appropriate firmware image found on
+osvault.keenetic.net.
+When using OEM bootloader, the firmware image size cannot exceed the size
+of one OEM «Firmware_x» partition or Kernel + rootFS size.
+Signed-off-by: Ivan Davydov <lotigara@lotigara.ru>
+Link: https://github.com/openwrt/openwrt/pull/18164
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ .../ramips/dts/mt7628an_keenetic_kn-1221.dts | 209 ++++++++++++++++++
+ target/linux/ramips/image/mt76x8.mk | 12 +
+ .../mt76x8/base-files/etc/board.d/01_leds | 1 +
+ .../mt76x8/base-files/etc/board.d/02_network | 5 +
+ 4 files changed, 227 insertions(+)
+ create mode 100644 target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+diff --git a/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+new file mode 100644
+index 00000000000000..6f5cf96856ed21
+--- /dev/null
++++ b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+@@ -0,0 +1,209 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++
++#include "mt7628an.dtsi"
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/leds/common.h>
++
++/ {
++ compatible = "keenetic,kn-1221", "mediatek,mt7628an-soc";
++ model = "Keenetic KN-1221";
++
++ aliases {
++ label-mac-device = &ethernet;
++
++ led-boot = &led_power;
++ led-failsafe = &led_power;
++ led-running = &led_power;
++ led-upgrade = &led_power;
++ };
++
++ chosen {
++ bootargs = "console=ttyS0,115200";
++ };
++
++ regulator-usb {
++ compatible = "regulator-fixed";
++ regulator-name = "USB-power";
++ regulator-min-microvolt = <5000000>;
++ regulator-max-microvolt = <5000000>;
++ gpios = <&gpio 6 GPIO_ACTIVE_HIGH>;
++ enable-active-high;
++ regulator-always-on;
++ };
++
++ leds {
++ compatible = "gpio-leds";
++
++ led_power: power {
++ function = LED_FUNCTION_POWER;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
++ };
++
++ internet {
++ function = LED_FUNCTION_WAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
++ };
++
++ fn {
++ function = LED_FUNCTION_WLAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
++ linux,default-trigger = "phy0tpt";
++ };
++ };
++
++ keys {
++ compatible = "gpio-keys";
++
++ reset {
++ label = "restart";
++ gpios = <&gpio 37 GPIO_ACTIVE_LOW>;
++ linux,code = <KEY_RESTART>;
++ };
++ };
++
++ virtual_flash {
++ compatible = "mtd-concat";
++ devices = <&firmware1 &firmware2>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ compatible = "denx,uimage";
++ label = "firmware";
++ reg = <0x0 0x1cc0000>;
++ };
++ };
++ };
++};
++
++&state_default {
++ gpio {
++ groups = "i2c", "spi cs1", "gpio", "refclk", "wdt";
++ function = "gpio";
++ };
++};
++
++&spi0 {
++ status = "okay";
++
++ flash@0 {
++ compatible = "jedec,spi-nor";
++ reg = <0>;
++ spi-max-frequency = <32000000>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ label = "u-boot";
++ reg = <0x0 0x30000>;
++ read-only;
++ };
++
++ partition@30000 {
++ label = "u-config";
++ reg = <0x30000 0x10000>;
++ read-only;
++ };
++
++ partition@40000 {
++ label = "rf-eeprom";
++ reg = <0x40000 0x10000>;
++ read-only;
++
++ nvmem-layout {
++ compatible = "fixed-layout";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ eeprom_factory_0: eeprom@0 {
++ reg = <0x0 0x400>;
++ };
++
++ macaddr_factory_4: macaddr@4 {
++ reg = <0x4 0x6>;
++ };
++ };
++ };
++
++ firmware1: partition@50000 {
++ label = "firmware_1";
++ reg = <0x50000 0xe60000>;
++ };
++
++ partition@eb0000 {
++ label = "config_1";
++ reg = <0xeb0000 0x40000>;
++ read-only;
++ };
++
++ partition@ef0000 {
++ label = "storage";
++ reg = <0xef0000 0x100000>;
++ read-only;
++ };
++
++ partition@ff0000 {
++ label = "dump";
++ reg = <0xff0000 0x10000>;
++ read-only;
++ };
++
++ partition@1000000 {
++ label = "u-state";
++ reg = <0x1000000 0x30000>;
++ read-only;
++ };
++
++ partition@1030000 {
++ label = "u-config_res";
++ reg = <0x1030000 0x10000>;
++ read-only;
++ };
++
++ partition@1040000 {
++ label = "rf-eeprom_res";
++ reg = <0x1040000 0x10000>;
++ read-only;
++ };
++
++ firmware2: partition@1050000 {
++ label = "firmware_2";
++ reg = <0x1050000 0xe60000>;
++ };
++
++ partition@1eb0000 {
++ label = "Config_2";
++ reg = <0x1eb0000 0x40000>;
++ read-only;
++ };
++ };
++ };
++};
++
++&ethernet {
++ nvmem-cells = <&macaddr_factory_4>;
++ nvmem-cell-names = "mac-address";
++};
++
++&esw {
++ mediatek,portmap = <0x3e>;
++ mediatek,portdisable = <0x38>;
++};
++
++&wmac {
++ status = "okay";
++
++ nvmem-cells = <&eeprom_factory_0>;
++ nvmem-cell-names = "eeprom";
++};
+diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
+index 8c8cfee23b6cfa..f442148d9ecf10 100644
+--- a/target/linux/ramips/image/mt76x8.mk
++++ b/target/linux/ramips/image/mt76x8.mk
+@@ -366,6 +366,18 @@ define Device/jotale_js76x8-32m
+ endef
+ TARGET_DEVICES += jotale_js76x8-32m
++define Device/keenetic_kn-1221
++ BLOCKSIZE := 64k
++ IMAGE_SIZE := 29440k
++ DEVICE_VENDOR := Keenetic
++ DEVICE_MODEL := KN-1221
++ DEVICE_PACKAGES := kmod-usb2
++ IMAGES += factory.bin
++ IMAGE/factory.bin := $$(sysupgrade_bin) | pad-to $$$$(BLOCKSIZE) | \
++ check-size 14720k | zyimage -d 0x801221 -v "KN-1221"
++endef
++TARGET_DEVICES += keenetic_kn-1221
++
+ define Device/keenetic_kn-1613
+ IMAGE_SIZE := 31488k
+ DEVICE_VENDOR := Keenetic
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+index b87062ae3c5ae5..79f78a2a459487 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+@@ -58,4 +58,5 @@ hiwifi,hc5661a|\
+ hiwifi,hc5761a)
+ ucidef_set_led_switch "internet" "internet" "blue:internet" "switch0" "0x10"
+ ;;
++keenetic,kn-1221|\
+ keenetic,kn-1613)
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+index fbdc7fb5a2697a..6e6e1310d3495f 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+@@ -131,5 +131,9 @@ ramips_setup_interfaces()
+ ucidef_add_switch "switch0" \
+ "0:lan" "1:lan" "2:lan" "6@eth0"
+ ;;
++ keenetic,kn-1221)
++ ucidef_add_switch "switch0" \
++ "1:lan" "2:lan" "0:wan" "6@eth0"
++ ;;
+ keenetic,kn-1613|\
+ motorola,mwr03)
+@@ -280,5 +280,6 @@ ramips_setup_macs()
+ totolink,lr1200)
+ wan_mac=$(mtd_get_mac_binary factory 0x2e)
+ ;;
++ keenetic,kn-1221|\
+ keenetic,kn-1613|\
+ zyxel,keenetic-extra-ii)
+</pre>
+<p></details>
+</summary></p>
+<p>Или в виде файла: <a href="/files/18164.patch.backport-24.10.1">18164.patch.backport-24.10.1</a>.
+Готовые сборки тоже доступны в виде файлов: <a href="/files/openwrt-kn-1221-24.10">openwrt-kn-1221-24.10</a></p>
+<p>Метки: <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_разработка.html'>разработка</a>, <a href='tag_изменённые прошивки.html'>изменённые прошивки</a></p>
+<!-- text end -->
+<div class="section_header"><a class="ablack" href="fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.html">
+Fast Transition (Wi-Fi Roaming) with OpenWrt and KeeneticOS
+</a></div>
+<!-- bashblog_timestamp: #202503071940.59# -->
+<div class="subtitle">марта 07, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+<h5>tested to not work on KeeneticOS v3.8.7 &amp; OpenWrt v23.05.5</h5>
+<p>First, set up FT on your OpenWrt devices.</p>
+<p>Then, change the mode of your Keenetic (?) devices to Extender (there are Repeater/Extender and Access Point/Extender, the last is the recommended).</p>
+<p>Go to the <code>Access Point/Extender (Repeater/Extender) &gt; Home segment</code> menu. Change the settings of the Wi-Fi network to those ones in OpenWrt.</p>
+
+<p>Scroll below to the "Roaming for wireless devices" section. Enable "Fast transition (802.11r)" and write your mobility domain ID converted to the ASCII format.</p>
+
+<p>You can use an online converter like this one: <a href="https://www.rapidtables.com/convert/number/hex-to-ascii.html">https://www.rapidtables.com/convert/number/hex-to-ascii.html</a>. Keep the "Mobility domain key" field unedited.</p>
+
+<p>Press the "Save" button. Now you have a so-called "Wi-Fi system" with use of both KeeneticOS and OpenWrt!</p>
+
+<p>Метки: <a href='tag_keeneticos.html'>keeneticos</a>, <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_wifi.html'>wifi</a>, <a href='tag_wifi-roaming.html'>wifi-roaming</a></p>
<!-- text end -->
-<div id="all_posts"><a href="all_posts.html">Больше заметок</a> &mdash; <a href="all_tags.html">Все метки</a> &mdash; <a href="feed.rss">Подписаться</a></div>
+<div id="all_posts"><a href="all_posts.html">Больше заметок</a> &mdash; <a href="all_tags.html">Все метки</a> &mdash; <a href="https://www.lotigara.ru/blog/feed.rss">Подписаться</a></div>
</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
<div class="section_header section_header_last">
<p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
<a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
diff --git a/openwrt-24101------keenetic-launcher-kn-1221.html b/openwrt-24101------keenetic-launcher-kn-1221.html
new file mode 100644
index 0000000..148bca0
--- /dev/null
+++ b/openwrt-24101------keenetic-launcher-kn-1221.html
@@ -0,0 +1,391 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>OpenWrt 24.10.1 - исправление, добавляющее поддержку Keenetic Launcher (KN-1221)</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<!-- entry begin -->
+<div class="section_header"><a class="ablack" href="openwrt-24101------keenetic-launcher-kn-1221.html">
+OpenWrt 24.10.1 - исправление, добавляющее поддержку Keenetic Launcher (KN-1221)
+</a></div>
+<!-- bashblog_timestamp: #202504281601.09# -->
+<div class="subtitle">апреля 28, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<p>Вот оно:
+<summary>
+<details></p>
+
+<pre>
+From ef20327e33fb38220ba0bca4418464749305e555 Mon Sep 17 00:00:00 2001
+From: Ivan Davydov <lotigara@lotigara.ru>
+Date: Tue, 4 Mar 2025 23:54:13 +0300
+Subject: [PATCH] ramips: mt76x8: add support for Keenetic Launcher (KN-1221)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Specification:
+SoC: MediaTek MT7628AN
+RAM: 128M DDR2, ESMT M14D128168A (2Y)
+Flash: 32M, cFeon EN25QH256A (Dual Boot on OEM, concatenated on OpenWrt,
+SPI)
+Switch: MediaTek MT7628AN, 3 ports 100 Mbps
+WiFi: MediaTek MT7628AN 2.4 GHz 802.11n
+USB: 1 port USB 2.0
+GPIO: 1 button (Wi-Fi & Reset on OEM, Reset on OpenWrt), 3 LEDs (Power,
+Internet, Wi-Fi), USB port power controls
+
+Disassembly:
+There are 2 screws at the bottom near the LEDs hidden by rubber mounts.
+After removing the screws, pry the gray plastic part around (it is secured
+with latches) and remove it.
+
+UART Interface:
+The UART interface can be connected to the 5 pin located between LAN
+ports and the WAN one.
+Pins (from the second LAN port to the WAN one): VCC, TX, RX, NC, GND
+Settings: 115200, 8N1
+
+Flashing via TFTP:
+1. Connect your PC and router to the first LAN port, configure PC
+interface using IP 192.168.1.2, mask 255.255.255.0
+2. Serve the firmware image (for OpenWrt it is *-squashfs-factory.bin)
+renamed to KN-1221_recovery.bin via TFTP
+3. Power up the router while pressing Wi-Fi button
+4. Release Wi-Fi button when Power LED starts blinking
+
+To revert back to OEM firmware:
+The return to the OEM firmware is carried out by using the methods
+described above with the help of the appropriate firmware image found on
+osvault.keenetic.net.
+
+When using OEM bootloader, the firmware image size cannot exceed the size
+of one OEM «Firmware_x» partition or Kernel + rootFS size.
+
+Signed-off-by: Ivan Davydov <lotigara@lotigara.ru>
+Link: https://github.com/openwrt/openwrt/pull/18164
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ .../ramips/dts/mt7628an_keenetic_kn-1221.dts | 209 ++++++++++++++++++
+ target/linux/ramips/image/mt76x8.mk | 12 +
+ .../mt76x8/base-files/etc/board.d/01_leds | 1 +
+ .../mt76x8/base-files/etc/board.d/02_network | 5 +
+ 4 files changed, 227 insertions(+)
+ create mode 100644 target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+
+diff --git a/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+new file mode 100644
+index 00000000000000..6f5cf96856ed21
+--- /dev/null
++++ b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+@@ -0,0 +1,209 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++
++#include "mt7628an.dtsi"
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/leds/common.h>
++
++/ {
++ compatible = "keenetic,kn-1221", "mediatek,mt7628an-soc";
++ model = "Keenetic KN-1221";
++
++ aliases {
++ label-mac-device = &ethernet;
++
++ led-boot = &led_power;
++ led-failsafe = &led_power;
++ led-running = &led_power;
++ led-upgrade = &led_power;
++ };
++
++ chosen {
++ bootargs = "console=ttyS0,115200";
++ };
++
++ regulator-usb {
++ compatible = "regulator-fixed";
++ regulator-name = "USB-power";
++ regulator-min-microvolt = <5000000>;
++ regulator-max-microvolt = <5000000>;
++ gpios = <&gpio 6 GPIO_ACTIVE_HIGH>;
++ enable-active-high;
++ regulator-always-on;
++ };
++
++ leds {
++ compatible = "gpio-leds";
++
++ led_power: power {
++ function = LED_FUNCTION_POWER;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
++ };
++
++ internet {
++ function = LED_FUNCTION_WAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
++ };
++
++ fn {
++ function = LED_FUNCTION_WLAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
++ linux,default-trigger = "phy0tpt";
++ };
++ };
++
++ keys {
++ compatible = "gpio-keys";
++
++ reset {
++ label = "restart";
++ gpios = <&gpio 37 GPIO_ACTIVE_LOW>;
++ linux,code = <KEY_RESTART>;
++ };
++ };
++
++ virtual_flash {
++ compatible = "mtd-concat";
++ devices = <&firmware1 &firmware2>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ compatible = "denx,uimage";
++ label = "firmware";
++ reg = <0x0 0x1cc0000>;
++ };
++ };
++ };
++};
++
++&state_default {
++ gpio {
++ groups = "i2c", "spi cs1", "gpio", "refclk", "wdt";
++ function = "gpio";
++ };
++};
++
++&spi0 {
++ status = "okay";
++
++ flash@0 {
++ compatible = "jedec,spi-nor";
++ reg = <0>;
++ spi-max-frequency = <32000000>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ label = "u-boot";
++ reg = <0x0 0x30000>;
++ read-only;
++ };
++
++ partition@30000 {
++ label = "u-config";
++ reg = <0x30000 0x10000>;
++ read-only;
++ };
++
++ partition@40000 {
++ label = "rf-eeprom";
++ reg = <0x40000 0x10000>;
++ read-only;
++
++ nvmem-layout {
++ compatible = "fixed-layout";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ eeprom_factory_0: eeprom@0 {
++ reg = <0x0 0x400>;
++ };
++
++ macaddr_factory_4: macaddr@4 {
++ reg = <0x4 0x6>;
++ };
++ };
++ };
++
++ firmware1: partition@50000 {
++ label = "firmware_1";
++ reg = <0x50000 0xe60000>;
++ };
++
++ partition@eb0000 {
++ label = "config_1";
++ reg = <0xeb0000 0x40000>;
++ read-only;
++ };
++
++ partition@ef0000 {
++ label = "storage";
++ reg = <0xef0000 0x100000>;
++ read-only;
++ };
++
++ partition@ff0000 {
++ label = "dump";
++ reg = <0xff0000 0x10000>;
++ read-only;
++ };
++
++ partition@1000000 {
++ label = "u-state";
++ reg = <0x1000000 0x30000>;
++ read-only;
++ };
++
++ partition@1030000 {
++ label = "u-config_res";
++ reg = <0x1030000 0x10000>;
++ read-only;
++ };
++
++ partition@1040000 {
++ label = "rf-eeprom_res";
++ reg = <0x1040000 0x10000>;
++ read-only;
++ };
++
++ firmware2: partition@1050000 {
++ label = "firmware_2";
++ reg = <0x1050000 0xe60000>;
++ };
++
++ partition@1eb0000 {
++ label = "Config_2";
++ reg = <0x1eb0000 0x40000>;
++ read-only;
++ };
++ };
++ };
++};
++
++&ethernet {
++ nvmem-cells = <&macaddr_factory_4>;
++ nvmem-cell-names = "mac-address";
++};
++
++&esw {
++ mediatek,portmap = <0x3e>;
++ mediatek,portdisable = <0x38>;
++};
++
++&wmac {
++ status = "okay";
++
++ nvmem-cells = <&eeprom_factory_0>;
++ nvmem-cell-names = "eeprom";
++};
+diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
+index 8c8cfee23b6cfa..f442148d9ecf10 100644
+--- a/target/linux/ramips/image/mt76x8.mk
++++ b/target/linux/ramips/image/mt76x8.mk
+@@ -366,6 +366,18 @@ define Device/jotale_js76x8-32m
+ endef
+ TARGET_DEVICES += jotale_js76x8-32m
+
++define Device/keenetic_kn-1221
++ BLOCKSIZE := 64k
++ IMAGE_SIZE := 29440k
++ DEVICE_VENDOR := Keenetic
++ DEVICE_MODEL := KN-1221
++ DEVICE_PACKAGES := kmod-usb2
++ IMAGES += factory.bin
++ IMAGE/factory.bin := $$(sysupgrade_bin) | pad-to $$$$(BLOCKSIZE) | \
++ check-size 14720k | zyimage -d 0x801221 -v "KN-1221"
++endef
++TARGET_DEVICES += keenetic_kn-1221
++
+ define Device/keenetic_kn-1613
+ IMAGE_SIZE := 31488k
+ DEVICE_VENDOR := Keenetic
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+index b87062ae3c5ae5..79f78a2a459487 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+@@ -58,4 +58,5 @@ hiwifi,hc5661a|\
+ hiwifi,hc5761a)
+ ucidef_set_led_switch "internet" "internet" "blue:internet" "switch0" "0x10"
+ ;;
++keenetic,kn-1221|\
+ keenetic,kn-1613)
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+index fbdc7fb5a2697a..6e6e1310d3495f 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+@@ -131,5 +131,9 @@ ramips_setup_interfaces()
+ ucidef_add_switch "switch0" \
+ "0:lan" "1:lan" "2:lan" "6@eth0"
+ ;;
++ keenetic,kn-1221)
++ ucidef_add_switch "switch0" \
++ "1:lan" "2:lan" "0:wan" "6@eth0"
++ ;;
+ keenetic,kn-1613|\
+ motorola,mwr03)
+@@ -280,5 +280,6 @@ ramips_setup_macs()
+ totolink,lr1200)
+ wan_mac=$(mtd_get_mac_binary factory 0x2e)
+ ;;
++ keenetic,kn-1221|\
+ keenetic,kn-1613|\
+ zyxel,keenetic-extra-ii)
+</pre>
+
+<p></details>
+</summary></p>
+
+<p>Или в виде файла: <a href="/files/18164.patch.backport-24.10.1">18164.patch.backport-24.10.1</a>.
+Готовые сборки тоже доступны в виде файлов: <a href="/files/openwrt-kn-1221-24.10">openwrt-kn-1221-24.10</a></p>
+
+<p>Метки: <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_разработка.html'>разработка</a>, <a href='tag_изменённые прошивки.html'>изменённые прошивки</a></p>
+<!-- text end -->
+<!-- entry end -->
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/openwrt-24101------keenetic-launcher-kn-1221.md b/openwrt-24101------keenetic-launcher-kn-1221.md
new file mode 100644
index 0000000..9d2a52f
--- /dev/null
+++ b/openwrt-24101------keenetic-launcher-kn-1221.md
@@ -0,0 +1,340 @@
+OpenWrt 24.10.1 - исправление, добавляющее поддержку Keenetic Launcher (KN-1221)
+
+Вот оно:
+<summary>
+<details>
+<pre>
+From ef20327e33fb38220ba0bca4418464749305e555 Mon Sep 17 00:00:00 2001
+From: Ivan Davydov <lotigara@lotigara.ru>
+Date: Tue, 4 Mar 2025 23:54:13 +0300
+Subject: [PATCH] ramips: mt76x8: add support for Keenetic Launcher (KN-1221)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Specification:
+SoC: MediaTek MT7628AN
+RAM: 128M DDR2, ESMT M14D128168A (2Y)
+Flash: 32M, cFeon EN25QH256A (Dual Boot on OEM, concatenated on OpenWrt,
+SPI)
+Switch: MediaTek MT7628AN, 3 ports 100 Mbps
+WiFi: MediaTek MT7628AN 2.4 GHz 802.11n
+USB: 1 port USB 2.0
+GPIO: 1 button (Wi-Fi & Reset on OEM, Reset on OpenWrt), 3 LEDs (Power,
+Internet, Wi-Fi), USB port power controls
+
+Disassembly:
+There are 2 screws at the bottom near the LEDs hidden by rubber mounts.
+After removing the screws, pry the gray plastic part around (it is secured
+with latches) and remove it.
+
+UART Interface:
+The UART interface can be connected to the 5 pin located between LAN
+ports and the WAN one.
+Pins (from the second LAN port to the WAN one): VCC, TX, RX, NC, GND
+Settings: 115200, 8N1
+
+Flashing via TFTP:
+1. Connect your PC and router to the first LAN port, configure PC
+interface using IP 192.168.1.2, mask 255.255.255.0
+2. Serve the firmware image (for OpenWrt it is *-squashfs-factory.bin)
+renamed to KN-1221_recovery.bin via TFTP
+3. Power up the router while pressing Wi-Fi button
+4. Release Wi-Fi button when Power LED starts blinking
+
+To revert back to OEM firmware:
+The return to the OEM firmware is carried out by using the methods
+described above with the help of the appropriate firmware image found on
+osvault.keenetic.net.
+
+When using OEM bootloader, the firmware image size cannot exceed the size
+of one OEM «Firmware_x» partition or Kernel + rootFS size.
+
+Signed-off-by: Ivan Davydov <lotigara@lotigara.ru>
+Link: https://github.com/openwrt/openwrt/pull/18164
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ .../ramips/dts/mt7628an_keenetic_kn-1221.dts | 209 ++++++++++++++++++
+ target/linux/ramips/image/mt76x8.mk | 12 +
+ .../mt76x8/base-files/etc/board.d/01_leds | 1 +
+ .../mt76x8/base-files/etc/board.d/02_network | 5 +
+ 4 files changed, 227 insertions(+)
+ create mode 100644 target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+
+diff --git a/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+new file mode 100644
+index 00000000000000..6f5cf96856ed21
+--- /dev/null
++++ b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+@@ -0,0 +1,209 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++
++#include "mt7628an.dtsi"
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/leds/common.h>
++
++/ {
++ compatible = "keenetic,kn-1221", "mediatek,mt7628an-soc";
++ model = "Keenetic KN-1221";
++
++ aliases {
++ label-mac-device = &ethernet;
++
++ led-boot = &led_power;
++ led-failsafe = &led_power;
++ led-running = &led_power;
++ led-upgrade = &led_power;
++ };
++
++ chosen {
++ bootargs = "console=ttyS0,115200";
++ };
++
++ regulator-usb {
++ compatible = "regulator-fixed";
++ regulator-name = "USB-power";
++ regulator-min-microvolt = <5000000>;
++ regulator-max-microvolt = <5000000>;
++ gpios = <&gpio 6 GPIO_ACTIVE_HIGH>;
++ enable-active-high;
++ regulator-always-on;
++ };
++
++ leds {
++ compatible = "gpio-leds";
++
++ led_power: power {
++ function = LED_FUNCTION_POWER;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
++ };
++
++ internet {
++ function = LED_FUNCTION_WAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
++ };
++
++ fn {
++ function = LED_FUNCTION_WLAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
++ linux,default-trigger = "phy0tpt";
++ };
++ };
++
++ keys {
++ compatible = "gpio-keys";
++
++ reset {
++ label = "restart";
++ gpios = <&gpio 37 GPIO_ACTIVE_LOW>;
++ linux,code = <KEY_RESTART>;
++ };
++ };
++
++ virtual_flash {
++ compatible = "mtd-concat";
++ devices = <&firmware1 &firmware2>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ compatible = "denx,uimage";
++ label = "firmware";
++ reg = <0x0 0x1cc0000>;
++ };
++ };
++ };
++};
++
++&state_default {
++ gpio {
++ groups = "i2c", "spi cs1", "gpio", "refclk", "wdt";
++ function = "gpio";
++ };
++};
++
++&spi0 {
++ status = "okay";
++
++ flash@0 {
++ compatible = "jedec,spi-nor";
++ reg = <0>;
++ spi-max-frequency = <32000000>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ label = "u-boot";
++ reg = <0x0 0x30000>;
++ read-only;
++ };
++
++ partition@30000 {
++ label = "u-config";
++ reg = <0x30000 0x10000>;
++ read-only;
++ };
++
++ partition@40000 {
++ label = "rf-eeprom";
++ reg = <0x40000 0x10000>;
++ read-only;
++
++ nvmem-layout {
++ compatible = "fixed-layout";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ eeprom_factory_0: eeprom@0 {
++ reg = <0x0 0x400>;
++ };
++
++ macaddr_factory_4: macaddr@4 {
++ reg = <0x4 0x6>;
++ };
++ };
++ };
++
++ firmware1: partition@50000 {
++ label = "firmware_1";
++ reg = <0x50000 0xe60000>;
++ };
++
++ partition@eb0000 {
++ label = "config_1";
++ reg = <0xeb0000 0x40000>;
++ read-only;
++ };
++
++ partition@ef0000 {
++ label = "storage";
++ reg = <0xef0000 0x100000>;
++ read-only;
++ };
++
++ partition@ff0000 {
++ label = "dump";
++ reg = <0xff0000 0x10000>;
++ read-only;
++ };
++
++ partition@1000000 {
++ label = "u-state";
++ reg = <0x1000000 0x30000>;
++ read-only;
++ };
++
++ partition@1030000 {
++ label = "u-config_res";
++ reg = <0x1030000 0x10000>;
++ read-only;
++ };
++
++ partition@1040000 {
++ label = "rf-eeprom_res";
++ reg = <0x1040000 0x10000>;
++ read-only;
++ };
++
++ firmware2: partition@1050000 {
++ label = "firmware_2";
++ reg = <0x1050000 0xe60000>;
++ };
++
++ partition@1eb0000 {
++ label = "Config_2";
++ reg = <0x1eb0000 0x40000>;
++ read-only;
++ };
++ };
++ };
++};
++
++&ethernet {
++ nvmem-cells = <&macaddr_factory_4>;
++ nvmem-cell-names = "mac-address";
++};
++
++&esw {
++ mediatek,portmap = <0x3e>;
++ mediatek,portdisable = <0x38>;
++};
++
++&wmac {
++ status = "okay";
++
++ nvmem-cells = <&eeprom_factory_0>;
++ nvmem-cell-names = "eeprom";
++};
+diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
+index 8c8cfee23b6cfa..f442148d9ecf10 100644
+--- a/target/linux/ramips/image/mt76x8.mk
++++ b/target/linux/ramips/image/mt76x8.mk
+@@ -366,6 +366,18 @@ define Device/jotale_js76x8-32m
+ endef
+ TARGET_DEVICES += jotale_js76x8-32m
+
++define Device/keenetic_kn-1221
++ BLOCKSIZE := 64k
++ IMAGE_SIZE := 29440k
++ DEVICE_VENDOR := Keenetic
++ DEVICE_MODEL := KN-1221
++ DEVICE_PACKAGES := kmod-usb2
++ IMAGES += factory.bin
++ IMAGE/factory.bin := $$(sysupgrade_bin) | pad-to $$$$(BLOCKSIZE) | \
++ check-size 14720k | zyimage -d 0x801221 -v "KN-1221"
++endef
++TARGET_DEVICES += keenetic_kn-1221
++
+ define Device/keenetic_kn-1613
+ IMAGE_SIZE := 31488k
+ DEVICE_VENDOR := Keenetic
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+index b87062ae3c5ae5..79f78a2a459487 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+@@ -58,4 +58,5 @@ hiwifi,hc5661a|\
+ hiwifi,hc5761a)
+ ucidef_set_led_switch "internet" "internet" "blue:internet" "switch0" "0x10"
+ ;;
++keenetic,kn-1221|\
+ keenetic,kn-1613)
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+index fbdc7fb5a2697a..6e6e1310d3495f 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+@@ -131,5 +131,9 @@ ramips_setup_interfaces()
+ ucidef_add_switch "switch0" \
+ "0:lan" "1:lan" "2:lan" "6@eth0"
+ ;;
++ keenetic,kn-1221)
++ ucidef_add_switch "switch0" \
++ "1:lan" "2:lan" "0:wan" "6@eth0"
++ ;;
+ keenetic,kn-1613|\
+ motorola,mwr03)
+@@ -280,5 +280,6 @@ ramips_setup_macs()
+ totolink,lr1200)
+ wan_mac=$(mtd_get_mac_binary factory 0x2e)
+ ;;
++ keenetic,kn-1221|\
+ keenetic,kn-1613|\
+ zyxel,keenetic-extra-ii)
+</pre>
+</details>
+</summary>
+
+Или в виде файла: [18164.patch.backport-24.10.1](/files/18164.patch.backport-24.10.1).
+Готовые сборки тоже доступны в виде файлов: [openwrt-kn-1221-24.10](/files/openwrt-kn-1221-24.10)
+
+Метки: openwrt, разработка, изменённые прошивки
diff --git a/pubnix----prosody--pam-.html b/pubnix----prosody--pam-.html
new file mode 100644
index 0000000..5b95e38
--- /dev/null
+++ b/pubnix----prosody--pam-.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Pubnix - Установка Prosody с PAM-авторизацией</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<!-- entry begin -->
+<div class="section_header"><a class="ablack" href="pubnix----prosody--pam-.html">
+Pubnix - Установка Prosody с PAM-авторизацией
+</a></div>
+<!-- bashblog_timestamp: #202505042146.43# -->
+<div class="subtitle">мая 04, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<h1>Использованные источники</h1>
+
+<ul>
+<li><a href="https://blog.desdelinux.net/en/prosody-im-local-users-SME-networks">DesdeLinux</a></li>
+<li><a href="https://landchad.net/prosody">LandChad</a></li>
+<li><a href="https://prosody.im">Prosody</a></li>
+</ul>
+
+<h1>0. Системные требования</h1>
+
+<ul>
+<li>Firewall с следующими открытыми портами:</li>
+<li><ul>
+<li>5000/tcp (передача файлов)</li>
+</ul></li>
+<li><ul>
+<li>5222/tcp (подключение клиента)</li>
+</ul></li>
+<li><ul>
+<li>5269/tcp (федерация, подключение сервера к серверу)</li>
+</ul></li>
+<li><ul>
+<li>5281/tcp (по желанию, но рекомендуется)</li>
+</ul></li>
+<li><p>Debian 12 с последними обновлениями</p></li>
+</ul>
+
+<hr />
+
+<p>Все команды выполняются пользователем <code>root</code>, если не указано иначе.</p>
+
+<h1>1. Установка</h1>
+
+<p>Выполните эти команды:</p>
+
+<pre>
+# Установить Prosody
+wget https://prosody.im/files/prosody.sources -O/etc/apt/sources.list.d/prosody.sources
+apt update
+apt install prosody lua5.4 liblua5.4-0 liblua5.4-dev luarocks certbot
+# Добавить привилегии демону Prosody
+usermod -aG shadow prosody
+usermod -aG ssl-cert prosody
+# Установить библиотеку для взаимодействия с POSIX-функциями
+luarocks install luaposix
+# Собрать библиотеку дл/ PAM-аутентификации
+git clone https://github.com/devurandom/lua-pam && cd lua-pam
+make LUA_VERSION=5.4
+cp pam.so /usr/lib/
+# Установить модуль для PAM-аутентификации
+LUA_INCDIR=5.4 prosodyctl install --server=https://modules.prosody.im/rocks/ mod_auth_pam
+</pre>
+
+<h1>2. Настройка</h1>
+
+<p>Начните редактировать файл <code>/etc/prosody/prosody.cfg.lua</code>.
+Следуйте этим инструкциям, заменяя <code>example.net</code> на доменное имя, привязанное к вашему серверу.</p>
+
+<p>Найдите строку, начинающуюся с слова <code>admins</code>, и добавьте ваше будущее имя пользователя в фигурные скобки подобным образом:</p>
+
+<pre>
+admins = { "admin@example.net" }
+</pre>
+
+<p>Где <code>admin</code> - это ваше имя пользователя в вашей системе.</p>
+
+<p>Дальше найдите строку <code>--"mam";</code> и удалите два дефиса, сделайте то же самое с строкой <code>--"turn_external";</code>, находящейся ниже.</p>
+
+<p>Теперь перейдите к строке <code>authentication = "internal_hashed"</code> и замените <code>internal_hashed</code> на <code>pam</code>.</p>
+
+<p>Перейдите к строке, начинающейся с <code>storage</code> и поменяйте <code>sql</code> на <code>internal</code> (по желанию, в этой инструкции я не рассматриваю настройку с базами данных)</p>
+
+<p>По желанию в строке <code>archive_expires_after = "1w"</code> замените <code>1w</code> на <code>never</code>, чтобы истории переписок не удалялись каждую неделю.</p>
+
+<p>Найдите строку, начинающуюся с <code>VirtualHost</code> и замените <code>localhost</code> на <code>example.net</code>.</p>
+
+<p>Если вам нужны многопользовательские переписки, на следующей строке добавьте следущее:</p>
+
+<pre>
+Component "muc.lotigara.ru" "muc"
+modules_enabled = { "muc_mam", "vcard_muc" }
+</pre>
+
+<p>Последнюю строку можете опустить, если вам не нужно сохранение истории многопользовательских переписок.</p>
+
+<p>Если нужна возможность загружать файлы на ваш сервер, дополните конфигурацию следующими строками:</p>
+
+<pre>
+Component "uf.lotigara.ru" "http_file_share"
+http_file_share_size_limit = 512 * 1024 * 1024 --измеряется в байтах
+http_file_share_expire_after = 60 * 60 * 24 * 31 * 1000 --измеряется в секундах
+</pre>
+
+<p>В данном случае, лимит размера файла - это 512 МиБ (0,5 ГиБ), а удаляться файлы будут через ~1000 лет.
+Если требуется изменить какое-либо из этих свойств, смотрите комментарии (в Lua они начинаются с двух дефисов) и пробуйте изменять значения.</p>
+
+<h1>Смотрите также</h1>
+
+<ul>
+<li><a href="https://stupin.su/blog/prosody-dovecot-sasl">Ещё один блог сисадмина - Настройка Jabber-сервера Prosody с аутентификацией пользователей через Dovecot SASL</a>. Статья немного старая, но если вы настраивали Dovecot так же, как и я (см. главную страницу), то это может вам пригодиться для, например, добавление доступа в XMPP только по группе. Также советую посмотреть конец раздела по настройке SSL (5-ый), там есть скрипт, который будет обновлять сертификаты в Prosody вместе с Certbot.</li>
+<li><a href="https://blog.desdelinux.net/en/prosody-im-local-users-SME-networks">DesdeLinux - Prosody IM and local users - Networks PYMES</a>. Здесь тоже описывается авторизация PAM, но она выполнена с использованием ещё одного демона (т.е. серверной программы или службы, которая выполняется в фоне), что, конечно, неэффективно. Эта страница указана в начале, так как автор некоторое время использовал именно инструкцию по ссылке выше.</li>
+</ul>
+
+<hr />
+
+<p>В завершении статьи хочется обратить ваше внимание на то, что данная инструкция предоставляется БЕЗ каких-либо гарантий. Если при выполнении указаний из данной инструкции случилось что-то непредвиденное, вы можете обратиться ко мне, но не стоит ожидать какого-либо результата.</p>
+
+<p>Метки: <a href='tag_prosody.html'>prosody</a>, <a href='tag_pubnix.html'>pubnix</a>, <a href='tag_xmpp.html'>xmpp</a></p>
+<!-- text end -->
+<!-- entry end -->
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/pubnix----prosody--pam-.md b/pubnix----prosody--pam-.md
new file mode 100644
index 0000000..f0cd5f9
--- /dev/null
+++ b/pubnix----prosody--pam-.md
@@ -0,0 +1,84 @@
+Pubnix - Установка Prosody с PAM-авторизацией
+
+# Использованные источники
+* [DesdeLinux](https://blog.desdelinux.net/en/prosody-im-local-users-SME-networks)
+* [LandChad](https://landchad.net/prosody)
+* [Prosody](https://prosody.im)
+
+# 0. Системные требования
+* Firewall с следующими открытыми портами:
+* * 5000/tcp (передача файлов)
+* * 5222/tcp (подключение клиента)
+* * 5269/tcp (федерация, подключение сервера к серверу)
+* * 5281/tcp (по желанию, но рекомендуется)
+
+* Debian 12 с последними обновлениями
+
+---
+
+Все команды выполняются пользователем `root`, если не указано иначе.
+
+# 1. Установка
+Выполните эти команды:
+<pre>
+# Установить Prosody
+wget https://prosody.im/files/prosody.sources -O/etc/apt/sources.list.d/prosody.sources
+apt update
+apt install prosody lua5.4 liblua5.4-0 liblua5.4-dev luarocks certbot
+# Добавить привилегии демону Prosody
+usermod -aG shadow prosody
+usermod -aG ssl-cert prosody
+# Установить библиотеку для взаимодействия с POSIX-функциями
+luarocks install luaposix
+# Собрать библиотеку дл/ PAM-аутентификации
+git clone https://github.com/devurandom/lua-pam && cd lua-pam
+make LUA_VERSION=5.4
+cp pam.so /usr/lib/
+# Установить модуль для PAM-аутентификации
+LUA_INCDIR=5.4 prosodyctl install --server=https://modules.prosody.im/rocks/ mod_auth_pam
+</pre>
+
+# 2. Настройка
+Начните редактировать файл `/etc/prosody/prosody.cfg.lua`.
+Следуйте этим инструкциям, заменяя `example.net` на доменное имя, привязанное к вашему серверу.
+
+Найдите строку, начинающуюся с слова `admins`, и добавьте ваше будущее имя пользователя в фигурные скобки подобным образом:
+<pre>
+admins = { "admin@example.net" }
+</pre>
+Где `admin` - это ваше имя пользователя в вашей системе.
+
+Дальше найдите строку `--"mam";` и удалите два дефиса, сделайте то же самое с строкой `--"turn_external";`, находящейся ниже.
+
+Теперь перейдите к строке `authentication = "internal_hashed"` и замените `internal_hashed` на `pam`.
+
+Перейдите к строке, начинающейся с `storage` и поменяйте `sql` на `internal` (по желанию, в этой инструкции я не рассматриваю настройку с базами данных)
+
+По желанию в строке `archive_expires_after = "1w"` замените `1w` на `never`, чтобы истории переписок не удалялись каждую неделю.
+
+Найдите строку, начинающуюся с `VirtualHost` и замените `localhost` на `example.net`.
+
+Если вам нужны многопользовательские переписки, на следующей строке добавьте следущее:
+<pre>
+Component "muc.lotigara.ru" "muc"
+modules_enabled = { "muc_mam", "vcard_muc" }
+</pre>
+Последнюю строку можете опустить, если вам не нужно сохранение истории многопользовательских переписок.
+
+Если нужна возможность загружать файлы на ваш сервер, дополните конфигурацию следующими строками:
+<pre>
+Component "uf.lotigara.ru" "http_file_share"
+http_file_share_size_limit = 512 * 1024 * 1024 --измеряется в байтах
+http_file_share_expire_after = 60 * 60 * 24 * 31 * 1000 --измеряется в секундах
+</pre>
+В данном случае, лимит размера файла - это 512 МиБ (0,5 ГиБ), а удаляться файлы будут через ~1000 лет.
+Если требуется изменить какое-либо из этих свойств, смотрите комментарии (в Lua они начинаются с двух дефисов) и пробуйте изменять значения.
+
+# Смотрите также
+- [Ещё один блог сисадмина - Настройка Jabber-сервера Prosody с аутентификацией пользователей через Dovecot SASL](https://stupin.su/blog/prosody-dovecot-sasl). Статья немного старая, но если вы настраивали Dovecot так же, как и я (см. главную страницу), то это может вам пригодиться для, например, добавление доступа в XMPP только по группе. Также советую посмотреть конец раздела по настройке SSL (5-ый), там есть скрипт, который будет обновлять сертификаты в Prosody вместе с Certbot.
+- [DesdeLinux - Prosody IM and local users - Networks PYMES](https://blog.desdelinux.net/en/prosody-im-local-users-SME-networks). Здесь тоже описывается авторизация PAM, но она выполнена с использованием ещё одного демона (т.е. серверной программы или службы, которая выполняется в фоне), что, конечно, неэффективно. Эта страница указана в начале, так как автор некоторое время использовал именно инструкцию по ссылке выше.
+
+---
+В завершении статьи хочется обратить ваше внимание на то, что данная инструкция предоставляется БЕЗ каких-либо гарантий. Если при выполнении указаний из данной инструкции случилось что-то непредвиденное, вы можете обратиться ко мне, но не стоит ожидать какого-либо результата.
+
+Метки: prosody, pubnix, xmpp
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 0000000..1413139
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+<url>
+<loc>https://www.lotigara.ru/blog/all_tags.html</loc>
+<lastmod>2025/06/11</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/all_posts.html</loc>
+<lastmod>2025/06/11</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/index.html</loc>
+<lastmod>2025/06/11</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/tag_разработка.html</loc>
+<lastmod>2025/06/11</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/tag_изменённые.html</loc>
+<lastmod>2025/06/11</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/tag_прошивки.html</loc>
+<lastmod>2025/06/11</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/tag_openwrt.html</loc>
+<lastmod>2025/06/11</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/tag_prosody.html</loc>
+<lastmod>2025/06/11</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/tag_pubnix.html</loc>
+<lastmod>2025/06/11</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/tag_xmpp.html</loc>
+<lastmod>2025/06/11</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/tag_sh.html</loc>
+<lastmod>2025/06/11</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/tag_steam.html</loc>
+<lastmod>2025/06/11</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/tag_keeneticos.html</loc>
+<lastmod>2025/06/11</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/tag_wifi.html</loc>
+<lastmod>2025/06/11</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/tag_wifi-roaming.html</loc>
+<lastmod>2025/06/11</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/download-mods-for-a-steam-game-from-the-steam-workshop.html</loc>
+<lastmod>2025/06/07</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/pubnix----prosody--pam-.html</loc>
+<lastmod>2025/05/04</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/openwrt-24101------keenetic-launcher-kn-1221.html</loc>
+<lastmod>2025/04/28</lastmod>
+</url>
+<url>
+<loc>https://www.lotigara.ru/blog/fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.html</loc>
+<lastmod>2025/03/07</lastmod>
+</url>
+</urlset>
diff --git a/tag_keeneticos.html b/tag_keeneticos.html
new file mode 100644
index 0000000..c1966fc
--- /dev/null
+++ b/tag_keeneticos.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Блог самохостера Lotigara &mdash; Заметки с меткой "keeneticos"</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<div class="section_header"><a class="ablack" href="fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.html">
+Fast Transition (Wi-Fi Roaming) with OpenWrt and KeeneticOS
+</a></div>
+<!-- bashblog_timestamp: #202503071940.59# -->
+<div class="subtitle">марта 07, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<h5>tested to not work on KeeneticOS v3.8.7 &amp; OpenWrt v23.05.5</h5>
+
+<p>First, set up FT on your OpenWrt devices.</p>
+
+<p>Then, change the mode of your Keenetic (?) devices to Extender (there are Repeater/Extender and Access Point/Extender, the last is the recommended).</p>
+
+<p>Go to the <code>Access Point/Extender (Repeater/Extender) &gt; Home segment</code> menu. Change the settings of the Wi-Fi network to those ones in OpenWrt.</p>
+
+<p>Scroll below to the "Roaming for wireless devices" section. Enable "Fast transition (802.11r)" and write your mobility domain ID converted to the ASCII format.</p>
+
+<p>You can use an online converter like this one: <a href="https://www.rapidtables.com/convert/number/hex-to-ascii.html">https://www.rapidtables.com/convert/number/hex-to-ascii.html</a>. Keep the "Mobility domain key" field unedited.</p>
+
+<p>Press the "Save" button. Now you have a so-called "Wi-Fi system" with use of both KeeneticOS and OpenWrt!</p>
+
+<p>Метки: <a href='tag_keeneticos.html'>keeneticos</a>, <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_wifi.html'>wifi</a>, <a href='tag_wifi-roaming.html'>wifi-roaming</a></p>
+<!-- text end -->
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/tag_openwrt.html b/tag_openwrt.html
new file mode 100644
index 0000000..df67bd9
--- /dev/null
+++ b/tag_openwrt.html
@@ -0,0 +1,414 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Блог самохостера Lotigara &mdash; Заметки с меткой "openwrt"</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<div class="section_header"><a class="ablack" href="openwrt-24101------keenetic-launcher-kn-1221.html">
+OpenWrt 24.10.1 - исправление, добавляющее поддержку Keenetic Launcher (KN-1221)
+</a></div>
+<!-- bashblog_timestamp: #202504281601.09# -->
+<div class="subtitle">апреля 28, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<p>Вот оно:
+<summary>
+<details></p>
+
+<pre>
+From ef20327e33fb38220ba0bca4418464749305e555 Mon Sep 17 00:00:00 2001
+From: Ivan Davydov <lotigara@lotigara.ru>
+Date: Tue, 4 Mar 2025 23:54:13 +0300
+Subject: [PATCH] ramips: mt76x8: add support for Keenetic Launcher (KN-1221)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Specification:
+SoC: MediaTek MT7628AN
+RAM: 128M DDR2, ESMT M14D128168A (2Y)
+Flash: 32M, cFeon EN25QH256A (Dual Boot on OEM, concatenated on OpenWrt,
+SPI)
+Switch: MediaTek MT7628AN, 3 ports 100 Mbps
+WiFi: MediaTek MT7628AN 2.4 GHz 802.11n
+USB: 1 port USB 2.0
+GPIO: 1 button (Wi-Fi & Reset on OEM, Reset on OpenWrt), 3 LEDs (Power,
+Internet, Wi-Fi), USB port power controls
+
+Disassembly:
+There are 2 screws at the bottom near the LEDs hidden by rubber mounts.
+After removing the screws, pry the gray plastic part around (it is secured
+with latches) and remove it.
+
+UART Interface:
+The UART interface can be connected to the 5 pin located between LAN
+ports and the WAN one.
+Pins (from the second LAN port to the WAN one): VCC, TX, RX, NC, GND
+Settings: 115200, 8N1
+
+Flashing via TFTP:
+1. Connect your PC and router to the first LAN port, configure PC
+interface using IP 192.168.1.2, mask 255.255.255.0
+2. Serve the firmware image (for OpenWrt it is *-squashfs-factory.bin)
+renamed to KN-1221_recovery.bin via TFTP
+3. Power up the router while pressing Wi-Fi button
+4. Release Wi-Fi button when Power LED starts blinking
+
+To revert back to OEM firmware:
+The return to the OEM firmware is carried out by using the methods
+described above with the help of the appropriate firmware image found on
+osvault.keenetic.net.
+
+When using OEM bootloader, the firmware image size cannot exceed the size
+of one OEM «Firmware_x» partition or Kernel + rootFS size.
+
+Signed-off-by: Ivan Davydov <lotigara@lotigara.ru>
+Link: https://github.com/openwrt/openwrt/pull/18164
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ .../ramips/dts/mt7628an_keenetic_kn-1221.dts | 209 ++++++++++++++++++
+ target/linux/ramips/image/mt76x8.mk | 12 +
+ .../mt76x8/base-files/etc/board.d/01_leds | 1 +
+ .../mt76x8/base-files/etc/board.d/02_network | 5 +
+ 4 files changed, 227 insertions(+)
+ create mode 100644 target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+
+diff --git a/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+new file mode 100644
+index 00000000000000..6f5cf96856ed21
+--- /dev/null
++++ b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+@@ -0,0 +1,209 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++
++#include "mt7628an.dtsi"
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/leds/common.h>
++
++/ {
++ compatible = "keenetic,kn-1221", "mediatek,mt7628an-soc";
++ model = "Keenetic KN-1221";
++
++ aliases {
++ label-mac-device = &ethernet;
++
++ led-boot = &led_power;
++ led-failsafe = &led_power;
++ led-running = &led_power;
++ led-upgrade = &led_power;
++ };
++
++ chosen {
++ bootargs = "console=ttyS0,115200";
++ };
++
++ regulator-usb {
++ compatible = "regulator-fixed";
++ regulator-name = "USB-power";
++ regulator-min-microvolt = <5000000>;
++ regulator-max-microvolt = <5000000>;
++ gpios = <&gpio 6 GPIO_ACTIVE_HIGH>;
++ enable-active-high;
++ regulator-always-on;
++ };
++
++ leds {
++ compatible = "gpio-leds";
++
++ led_power: power {
++ function = LED_FUNCTION_POWER;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
++ };
++
++ internet {
++ function = LED_FUNCTION_WAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
++ };
++
++ fn {
++ function = LED_FUNCTION_WLAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
++ linux,default-trigger = "phy0tpt";
++ };
++ };
++
++ keys {
++ compatible = "gpio-keys";
++
++ reset {
++ label = "restart";
++ gpios = <&gpio 37 GPIO_ACTIVE_LOW>;
++ linux,code = <KEY_RESTART>;
++ };
++ };
++
++ virtual_flash {
++ compatible = "mtd-concat";
++ devices = <&firmware1 &firmware2>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ compatible = "denx,uimage";
++ label = "firmware";
++ reg = <0x0 0x1cc0000>;
++ };
++ };
++ };
++};
++
++&state_default {
++ gpio {
++ groups = "i2c", "spi cs1", "gpio", "refclk", "wdt";
++ function = "gpio";
++ };
++};
++
++&spi0 {
++ status = "okay";
++
++ flash@0 {
++ compatible = "jedec,spi-nor";
++ reg = <0>;
++ spi-max-frequency = <32000000>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ label = "u-boot";
++ reg = <0x0 0x30000>;
++ read-only;
++ };
++
++ partition@30000 {
++ label = "u-config";
++ reg = <0x30000 0x10000>;
++ read-only;
++ };
++
++ partition@40000 {
++ label = "rf-eeprom";
++ reg = <0x40000 0x10000>;
++ read-only;
++
++ nvmem-layout {
++ compatible = "fixed-layout";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ eeprom_factory_0: eeprom@0 {
++ reg = <0x0 0x400>;
++ };
++
++ macaddr_factory_4: macaddr@4 {
++ reg = <0x4 0x6>;
++ };
++ };
++ };
++
++ firmware1: partition@50000 {
++ label = "firmware_1";
++ reg = <0x50000 0xe60000>;
++ };
++
++ partition@eb0000 {
++ label = "config_1";
++ reg = <0xeb0000 0x40000>;
++ read-only;
++ };
++
++ partition@ef0000 {
++ label = "storage";
++ reg = <0xef0000 0x100000>;
++ read-only;
++ };
++
++ partition@ff0000 {
++ label = "dump";
++ reg = <0xff0000 0x10000>;
++ read-only;
++ };
++
++ partition@1000000 {
++ label = "u-state";
++ reg = <0x1000000 0x30000>;
++ read-only;
++ };
++
++ partition@1030000 {
++ label = "u-config_res";
++ reg = <0x1030000 0x10000>;
++ read-only;
++ };
++
++ partition@1040000 {
++ label = "rf-eeprom_res";
++ reg = <0x1040000 0x10000>;
++ read-only;
++ };
++
++ firmware2: partition@1050000 {
++ label = "firmware_2";
++ reg = <0x1050000 0xe60000>;
++ };
++
++ partition@1eb0000 {
++ label = "Config_2";
++ reg = <0x1eb0000 0x40000>;
++ read-only;
++ };
++ };
++ };
++};
++
++&ethernet {
++ nvmem-cells = <&macaddr_factory_4>;
++ nvmem-cell-names = "mac-address";
++};
++
++&esw {
++ mediatek,portmap = <0x3e>;
++ mediatek,portdisable = <0x38>;
++};
++
++&wmac {
++ status = "okay";
++
++ nvmem-cells = <&eeprom_factory_0>;
++ nvmem-cell-names = "eeprom";
++};
+diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
+index 8c8cfee23b6cfa..f442148d9ecf10 100644
+--- a/target/linux/ramips/image/mt76x8.mk
++++ b/target/linux/ramips/image/mt76x8.mk
+@@ -366,6 +366,18 @@ define Device/jotale_js76x8-32m
+ endef
+ TARGET_DEVICES += jotale_js76x8-32m
+
++define Device/keenetic_kn-1221
++ BLOCKSIZE := 64k
++ IMAGE_SIZE := 29440k
++ DEVICE_VENDOR := Keenetic
++ DEVICE_MODEL := KN-1221
++ DEVICE_PACKAGES := kmod-usb2
++ IMAGES += factory.bin
++ IMAGE/factory.bin := $$(sysupgrade_bin) | pad-to $$$$(BLOCKSIZE) | \
++ check-size 14720k | zyimage -d 0x801221 -v "KN-1221"
++endef
++TARGET_DEVICES += keenetic_kn-1221
++
+ define Device/keenetic_kn-1613
+ IMAGE_SIZE := 31488k
+ DEVICE_VENDOR := Keenetic
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+index b87062ae3c5ae5..79f78a2a459487 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+@@ -58,4 +58,5 @@ hiwifi,hc5661a|\
+ hiwifi,hc5761a)
+ ucidef_set_led_switch "internet" "internet" "blue:internet" "switch0" "0x10"
+ ;;
++keenetic,kn-1221|\
+ keenetic,kn-1613)
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+index fbdc7fb5a2697a..6e6e1310d3495f 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+@@ -131,5 +131,9 @@ ramips_setup_interfaces()
+ ucidef_add_switch "switch0" \
+ "0:lan" "1:lan" "2:lan" "6@eth0"
+ ;;
++ keenetic,kn-1221)
++ ucidef_add_switch "switch0" \
++ "1:lan" "2:lan" "0:wan" "6@eth0"
++ ;;
+ keenetic,kn-1613|\
+ motorola,mwr03)
+@@ -280,5 +280,6 @@ ramips_setup_macs()
+ totolink,lr1200)
+ wan_mac=$(mtd_get_mac_binary factory 0x2e)
+ ;;
++ keenetic,kn-1221|\
+ keenetic,kn-1613|\
+ zyxel,keenetic-extra-ii)
+</pre>
+
+<p></details>
+</summary></p>
+
+<p>Или в виде файла: <a href="/files/18164.patch.backport-24.10.1">18164.patch.backport-24.10.1</a>.
+Готовые сборки тоже доступны в виде файлов: <a href="/files/openwrt-kn-1221-24.10">openwrt-kn-1221-24.10</a></p>
+
+<p>Метки: <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_разработка.html'>разработка</a>, <a href='tag_изменённые прошивки.html'>изменённые прошивки</a></p>
+<!-- text end -->
+<div class="section_header"><a class="ablack" href="fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.html">
+Fast Transition (Wi-Fi Roaming) with OpenWrt and KeeneticOS
+</a></div>
+<!-- bashblog_timestamp: #202503071940.59# -->
+<div class="subtitle">марта 07, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<h5>tested to not work on KeeneticOS v3.8.7 &amp; OpenWrt v23.05.5</h5>
+
+<p>First, set up FT on your OpenWrt devices.</p>
+
+<p>Then, change the mode of your Keenetic (?) devices to Extender (there are Repeater/Extender and Access Point/Extender, the last is the recommended).</p>
+
+<p>Go to the <code>Access Point/Extender (Repeater/Extender) &gt; Home segment</code> menu. Change the settings of the Wi-Fi network to those ones in OpenWrt.</p>
+
+<p>Scroll below to the "Roaming for wireless devices" section. Enable "Fast transition (802.11r)" and write your mobility domain ID converted to the ASCII format.</p>
+
+<p>You can use an online converter like this one: <a href="https://www.rapidtables.com/convert/number/hex-to-ascii.html">https://www.rapidtables.com/convert/number/hex-to-ascii.html</a>. Keep the "Mobility domain key" field unedited.</p>
+
+<p>Press the "Save" button. Now you have a so-called "Wi-Fi system" with use of both KeeneticOS and OpenWrt!</p>
+
+<p>Метки: <a href='tag_keeneticos.html'>keeneticos</a>, <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_wifi.html'>wifi</a>, <a href='tag_wifi-roaming.html'>wifi-roaming</a></p>
+<!-- text end -->
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/tag_prosody.html b/tag_prosody.html
new file mode 100644
index 0000000..d275187
--- /dev/null
+++ b/tag_prosody.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Блог самохостера Lotigara &mdash; Заметки с меткой "prosody"</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<div class="section_header"><a class="ablack" href="pubnix----prosody--pam-.html">
+Pubnix - Установка Prosody с PAM-авторизацией
+</a></div>
+<!-- bashblog_timestamp: #202505042146.43# -->
+<div class="subtitle">мая 04, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<h1>Использованные источники</h1>
+
+<ul>
+<li><a href="https://blog.desdelinux.net/en/prosody-im-local-users-SME-networks">DesdeLinux</a></li>
+<li><a href="https://landchad.net/prosody">LandChad</a></li>
+<li><a href="https://prosody.im">Prosody</a></li>
+</ul>
+
+<h1>0. Системные требования</h1>
+
+<ul>
+<li>Firewall с следующими открытыми портами:</li>
+<li><ul>
+<li>5000/tcp (передача файлов)</li>
+</ul></li>
+<li><ul>
+<li>5222/tcp (подключение клиента)</li>
+</ul></li>
+<li><ul>
+<li>5269/tcp (федерация, подключение сервера к серверу)</li>
+</ul></li>
+<li><ul>
+<li>5281/tcp (по желанию, но рекомендуется)</li>
+</ul></li>
+<li><p>Debian 12 с последними обновлениями</p></li>
+</ul>
+
+<p class="readmore"><a href="pubnix----prosody--pam-.html">Читать далее...</a></p>
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/tag_pubnix.html b/tag_pubnix.html
new file mode 100644
index 0000000..90a3720
--- /dev/null
+++ b/tag_pubnix.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Блог самохостера Lotigara &mdash; Заметки с меткой "pubnix"</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<div class="section_header"><a class="ablack" href="pubnix----prosody--pam-.html">
+Pubnix - Установка Prosody с PAM-авторизацией
+</a></div>
+<!-- bashblog_timestamp: #202505042146.43# -->
+<div class="subtitle">мая 04, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<h1>Использованные источники</h1>
+
+<ul>
+<li><a href="https://blog.desdelinux.net/en/prosody-im-local-users-SME-networks">DesdeLinux</a></li>
+<li><a href="https://landchad.net/prosody">LandChad</a></li>
+<li><a href="https://prosody.im">Prosody</a></li>
+</ul>
+
+<h1>0. Системные требования</h1>
+
+<ul>
+<li>Firewall с следующими открытыми портами:</li>
+<li><ul>
+<li>5000/tcp (передача файлов)</li>
+</ul></li>
+<li><ul>
+<li>5222/tcp (подключение клиента)</li>
+</ul></li>
+<li><ul>
+<li>5269/tcp (федерация, подключение сервера к серверу)</li>
+</ul></li>
+<li><ul>
+<li>5281/tcp (по желанию, но рекомендуется)</li>
+</ul></li>
+<li><p>Debian 12 с последними обновлениями</p></li>
+</ul>
+
+<p class="readmore"><a href="pubnix----prosody--pam-.html">Читать далее...</a></p>
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/tag_sh.html b/tag_sh.html
new file mode 100644
index 0000000..c695c11
--- /dev/null
+++ b/tag_sh.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Блог самохостера Lotigara &mdash; Заметки с меткой "sh"</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<div class="section_header"><a class="ablack" href="download-mods-for-a-steam-game-from-the-steam-workshop.html">
+Download mods for a Steam game from the Steam Workshop
+</a></div>
+<!-- bashblog_timestamp: #202506072028.51# -->
+<div class="subtitle">июня 07, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<pre alt="sh">
+steamcmd "+login $USERID" $(for i in $MODLIST; do echo "+download_item $APPID $i"; done)
+</pre>
+
+<p>Метки: <a href='tag_sh.html'>sh</a>, <a href='tag_steam.html'>steam</a></p>
+<!-- text end -->
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/tag_steam.html b/tag_steam.html
new file mode 100644
index 0000000..b7837f0
--- /dev/null
+++ b/tag_steam.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Блог самохостера Lotigara &mdash; Заметки с меткой "steam"</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<div class="section_header"><a class="ablack" href="download-mods-for-a-steam-game-from-the-steam-workshop.html">
+Download mods for a Steam game from the Steam Workshop
+</a></div>
+<!-- bashblog_timestamp: #202506072028.51# -->
+<div class="subtitle">июня 07, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<pre alt="sh">
+steamcmd "+login $USERID" $(for i in $MODLIST; do echo "+download_item $APPID $i"; done)
+</pre>
+
+<p>Метки: <a href='tag_sh.html'>sh</a>, <a href='tag_steam.html'>steam</a></p>
+<!-- text end -->
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/tag_wifi-roaming.html b/tag_wifi-roaming.html
new file mode 100644
index 0000000..59a1280
--- /dev/null
+++ b/tag_wifi-roaming.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Блог самохостера Lotigara &mdash; Заметки с меткой "wifi-roaming"</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<div class="section_header"><a class="ablack" href="fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.html">
+Fast Transition (Wi-Fi Roaming) with OpenWrt and KeeneticOS
+</a></div>
+<!-- bashblog_timestamp: #202503071940.59# -->
+<div class="subtitle">марта 07, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<h5>tested to not work on KeeneticOS v3.8.7 &amp; OpenWrt v23.05.5</h5>
+
+<p>First, set up FT on your OpenWrt devices.</p>
+
+<p>Then, change the mode of your Keenetic (?) devices to Extender (there are Repeater/Extender and Access Point/Extender, the last is the recommended).</p>
+
+<p>Go to the <code>Access Point/Extender (Repeater/Extender) &gt; Home segment</code> menu. Change the settings of the Wi-Fi network to those ones in OpenWrt.</p>
+
+<p>Scroll below to the "Roaming for wireless devices" section. Enable "Fast transition (802.11r)" and write your mobility domain ID converted to the ASCII format.</p>
+
+<p>You can use an online converter like this one: <a href="https://www.rapidtables.com/convert/number/hex-to-ascii.html">https://www.rapidtables.com/convert/number/hex-to-ascii.html</a>. Keep the "Mobility domain key" field unedited.</p>
+
+<p>Press the "Save" button. Now you have a so-called "Wi-Fi system" with use of both KeeneticOS and OpenWrt!</p>
+
+<p>Метки: <a href='tag_keeneticos.html'>keeneticos</a>, <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_wifi.html'>wifi</a>, <a href='tag_wifi-roaming.html'>wifi-roaming</a></p>
+<!-- text end -->
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/tag_wifi.html b/tag_wifi.html
new file mode 100644
index 0000000..d9475ac
--- /dev/null
+++ b/tag_wifi.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Блог самохостера Lotigara &mdash; Заметки с меткой "wifi"</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<div class="section_header"><a class="ablack" href="fast-transition-wi-fi-roaming-with-openwrt-and-keeneticos.html">
+Fast Transition (Wi-Fi Roaming) with OpenWrt and KeeneticOS
+</a></div>
+<!-- bashblog_timestamp: #202503071940.59# -->
+<div class="subtitle">марта 07, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<h5>tested to not work on KeeneticOS v3.8.7 &amp; OpenWrt v23.05.5</h5>
+
+<p>First, set up FT on your OpenWrt devices.</p>
+
+<p>Then, change the mode of your Keenetic (?) devices to Extender (there are Repeater/Extender and Access Point/Extender, the last is the recommended).</p>
+
+<p>Go to the <code>Access Point/Extender (Repeater/Extender) &gt; Home segment</code> menu. Change the settings of the Wi-Fi network to those ones in OpenWrt.</p>
+
+<p>Scroll below to the "Roaming for wireless devices" section. Enable "Fast transition (802.11r)" and write your mobility domain ID converted to the ASCII format.</p>
+
+<p>You can use an online converter like this one: <a href="https://www.rapidtables.com/convert/number/hex-to-ascii.html">https://www.rapidtables.com/convert/number/hex-to-ascii.html</a>. Keep the "Mobility domain key" field unedited.</p>
+
+<p>Press the "Save" button. Now you have a so-called "Wi-Fi system" with use of both KeeneticOS and OpenWrt!</p>
+
+<p>Метки: <a href='tag_keeneticos.html'>keeneticos</a>, <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_wifi.html'>wifi</a>, <a href='tag_wifi-roaming.html'>wifi-roaming</a></p>
+<!-- text end -->
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/tag_xmpp.html b/tag_xmpp.html
new file mode 100644
index 0000000..1dd2fd3
--- /dev/null
+++ b/tag_xmpp.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Блог самохостера Lotigara &mdash; Заметки с меткой "xmpp"</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<div class="section_header"><a class="ablack" href="pubnix----prosody--pam-.html">
+Pubnix - Установка Prosody с PAM-авторизацией
+</a></div>
+<!-- bashblog_timestamp: #202505042146.43# -->
+<div class="subtitle">мая 04, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<h1>Использованные источники</h1>
+
+<ul>
+<li><a href="https://blog.desdelinux.net/en/prosody-im-local-users-SME-networks">DesdeLinux</a></li>
+<li><a href="https://landchad.net/prosody">LandChad</a></li>
+<li><a href="https://prosody.im">Prosody</a></li>
+</ul>
+
+<h1>0. Системные требования</h1>
+
+<ul>
+<li>Firewall с следующими открытыми портами:</li>
+<li><ul>
+<li>5000/tcp (передача файлов)</li>
+</ul></li>
+<li><ul>
+<li>5222/tcp (подключение клиента)</li>
+</ul></li>
+<li><ul>
+<li>5269/tcp (федерация, подключение сервера к серверу)</li>
+</ul></li>
+<li><ul>
+<li>5281/tcp (по желанию, но рекомендуется)</li>
+</ul></li>
+<li><p>Debian 12 с последними обновлениями</p></li>
+</ul>
+
+<p class="readmore"><a href="pubnix----prosody--pam-.html">Читать далее...</a></p>
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/tag_изменённые.html b/tag_изменённые.html
new file mode 100644
index 0000000..a2085a5
--- /dev/null
+++ b/tag_изменённые.html
@@ -0,0 +1,389 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Блог самохостера Lotigara &mdash; Заметки с меткой "изменённые"</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<div class="section_header"><a class="ablack" href="openwrt-24101------keenetic-launcher-kn-1221.html">
+OpenWrt 24.10.1 - исправление, добавляющее поддержку Keenetic Launcher (KN-1221)
+</a></div>
+<!-- bashblog_timestamp: #202504281601.09# -->
+<div class="subtitle">апреля 28, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<p>Вот оно:
+<summary>
+<details></p>
+
+<pre>
+From ef20327e33fb38220ba0bca4418464749305e555 Mon Sep 17 00:00:00 2001
+From: Ivan Davydov <lotigara@lotigara.ru>
+Date: Tue, 4 Mar 2025 23:54:13 +0300
+Subject: [PATCH] ramips: mt76x8: add support for Keenetic Launcher (KN-1221)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Specification:
+SoC: MediaTek MT7628AN
+RAM: 128M DDR2, ESMT M14D128168A (2Y)
+Flash: 32M, cFeon EN25QH256A (Dual Boot on OEM, concatenated on OpenWrt,
+SPI)
+Switch: MediaTek MT7628AN, 3 ports 100 Mbps
+WiFi: MediaTek MT7628AN 2.4 GHz 802.11n
+USB: 1 port USB 2.0
+GPIO: 1 button (Wi-Fi & Reset on OEM, Reset on OpenWrt), 3 LEDs (Power,
+Internet, Wi-Fi), USB port power controls
+
+Disassembly:
+There are 2 screws at the bottom near the LEDs hidden by rubber mounts.
+After removing the screws, pry the gray plastic part around (it is secured
+with latches) and remove it.
+
+UART Interface:
+The UART interface can be connected to the 5 pin located between LAN
+ports and the WAN one.
+Pins (from the second LAN port to the WAN one): VCC, TX, RX, NC, GND
+Settings: 115200, 8N1
+
+Flashing via TFTP:
+1. Connect your PC and router to the first LAN port, configure PC
+interface using IP 192.168.1.2, mask 255.255.255.0
+2. Serve the firmware image (for OpenWrt it is *-squashfs-factory.bin)
+renamed to KN-1221_recovery.bin via TFTP
+3. Power up the router while pressing Wi-Fi button
+4. Release Wi-Fi button when Power LED starts blinking
+
+To revert back to OEM firmware:
+The return to the OEM firmware is carried out by using the methods
+described above with the help of the appropriate firmware image found on
+osvault.keenetic.net.
+
+When using OEM bootloader, the firmware image size cannot exceed the size
+of one OEM «Firmware_x» partition or Kernel + rootFS size.
+
+Signed-off-by: Ivan Davydov <lotigara@lotigara.ru>
+Link: https://github.com/openwrt/openwrt/pull/18164
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ .../ramips/dts/mt7628an_keenetic_kn-1221.dts | 209 ++++++++++++++++++
+ target/linux/ramips/image/mt76x8.mk | 12 +
+ .../mt76x8/base-files/etc/board.d/01_leds | 1 +
+ .../mt76x8/base-files/etc/board.d/02_network | 5 +
+ 4 files changed, 227 insertions(+)
+ create mode 100644 target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+
+diff --git a/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+new file mode 100644
+index 00000000000000..6f5cf96856ed21
+--- /dev/null
++++ b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+@@ -0,0 +1,209 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++
++#include "mt7628an.dtsi"
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/leds/common.h>
++
++/ {
++ compatible = "keenetic,kn-1221", "mediatek,mt7628an-soc";
++ model = "Keenetic KN-1221";
++
++ aliases {
++ label-mac-device = &ethernet;
++
++ led-boot = &led_power;
++ led-failsafe = &led_power;
++ led-running = &led_power;
++ led-upgrade = &led_power;
++ };
++
++ chosen {
++ bootargs = "console=ttyS0,115200";
++ };
++
++ regulator-usb {
++ compatible = "regulator-fixed";
++ regulator-name = "USB-power";
++ regulator-min-microvolt = <5000000>;
++ regulator-max-microvolt = <5000000>;
++ gpios = <&gpio 6 GPIO_ACTIVE_HIGH>;
++ enable-active-high;
++ regulator-always-on;
++ };
++
++ leds {
++ compatible = "gpio-leds";
++
++ led_power: power {
++ function = LED_FUNCTION_POWER;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
++ };
++
++ internet {
++ function = LED_FUNCTION_WAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
++ };
++
++ fn {
++ function = LED_FUNCTION_WLAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
++ linux,default-trigger = "phy0tpt";
++ };
++ };
++
++ keys {
++ compatible = "gpio-keys";
++
++ reset {
++ label = "restart";
++ gpios = <&gpio 37 GPIO_ACTIVE_LOW>;
++ linux,code = <KEY_RESTART>;
++ };
++ };
++
++ virtual_flash {
++ compatible = "mtd-concat";
++ devices = <&firmware1 &firmware2>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ compatible = "denx,uimage";
++ label = "firmware";
++ reg = <0x0 0x1cc0000>;
++ };
++ };
++ };
++};
++
++&state_default {
++ gpio {
++ groups = "i2c", "spi cs1", "gpio", "refclk", "wdt";
++ function = "gpio";
++ };
++};
++
++&spi0 {
++ status = "okay";
++
++ flash@0 {
++ compatible = "jedec,spi-nor";
++ reg = <0>;
++ spi-max-frequency = <32000000>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ label = "u-boot";
++ reg = <0x0 0x30000>;
++ read-only;
++ };
++
++ partition@30000 {
++ label = "u-config";
++ reg = <0x30000 0x10000>;
++ read-only;
++ };
++
++ partition@40000 {
++ label = "rf-eeprom";
++ reg = <0x40000 0x10000>;
++ read-only;
++
++ nvmem-layout {
++ compatible = "fixed-layout";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ eeprom_factory_0: eeprom@0 {
++ reg = <0x0 0x400>;
++ };
++
++ macaddr_factory_4: macaddr@4 {
++ reg = <0x4 0x6>;
++ };
++ };
++ };
++
++ firmware1: partition@50000 {
++ label = "firmware_1";
++ reg = <0x50000 0xe60000>;
++ };
++
++ partition@eb0000 {
++ label = "config_1";
++ reg = <0xeb0000 0x40000>;
++ read-only;
++ };
++
++ partition@ef0000 {
++ label = "storage";
++ reg = <0xef0000 0x100000>;
++ read-only;
++ };
++
++ partition@ff0000 {
++ label = "dump";
++ reg = <0xff0000 0x10000>;
++ read-only;
++ };
++
++ partition@1000000 {
++ label = "u-state";
++ reg = <0x1000000 0x30000>;
++ read-only;
++ };
++
++ partition@1030000 {
++ label = "u-config_res";
++ reg = <0x1030000 0x10000>;
++ read-only;
++ };
++
++ partition@1040000 {
++ label = "rf-eeprom_res";
++ reg = <0x1040000 0x10000>;
++ read-only;
++ };
++
++ firmware2: partition@1050000 {
++ label = "firmware_2";
++ reg = <0x1050000 0xe60000>;
++ };
++
++ partition@1eb0000 {
++ label = "Config_2";
++ reg = <0x1eb0000 0x40000>;
++ read-only;
++ };
++ };
++ };
++};
++
++&ethernet {
++ nvmem-cells = <&macaddr_factory_4>;
++ nvmem-cell-names = "mac-address";
++};
++
++&esw {
++ mediatek,portmap = <0x3e>;
++ mediatek,portdisable = <0x38>;
++};
++
++&wmac {
++ status = "okay";
++
++ nvmem-cells = <&eeprom_factory_0>;
++ nvmem-cell-names = "eeprom";
++};
+diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
+index 8c8cfee23b6cfa..f442148d9ecf10 100644
+--- a/target/linux/ramips/image/mt76x8.mk
++++ b/target/linux/ramips/image/mt76x8.mk
+@@ -366,6 +366,18 @@ define Device/jotale_js76x8-32m
+ endef
+ TARGET_DEVICES += jotale_js76x8-32m
+
++define Device/keenetic_kn-1221
++ BLOCKSIZE := 64k
++ IMAGE_SIZE := 29440k
++ DEVICE_VENDOR := Keenetic
++ DEVICE_MODEL := KN-1221
++ DEVICE_PACKAGES := kmod-usb2
++ IMAGES += factory.bin
++ IMAGE/factory.bin := $$(sysupgrade_bin) | pad-to $$$$(BLOCKSIZE) | \
++ check-size 14720k | zyimage -d 0x801221 -v "KN-1221"
++endef
++TARGET_DEVICES += keenetic_kn-1221
++
+ define Device/keenetic_kn-1613
+ IMAGE_SIZE := 31488k
+ DEVICE_VENDOR := Keenetic
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+index b87062ae3c5ae5..79f78a2a459487 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+@@ -58,4 +58,5 @@ hiwifi,hc5661a|\
+ hiwifi,hc5761a)
+ ucidef_set_led_switch "internet" "internet" "blue:internet" "switch0" "0x10"
+ ;;
++keenetic,kn-1221|\
+ keenetic,kn-1613)
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+index fbdc7fb5a2697a..6e6e1310d3495f 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+@@ -131,5 +131,9 @@ ramips_setup_interfaces()
+ ucidef_add_switch "switch0" \
+ "0:lan" "1:lan" "2:lan" "6@eth0"
+ ;;
++ keenetic,kn-1221)
++ ucidef_add_switch "switch0" \
++ "1:lan" "2:lan" "0:wan" "6@eth0"
++ ;;
+ keenetic,kn-1613|\
+ motorola,mwr03)
+@@ -280,5 +280,6 @@ ramips_setup_macs()
+ totolink,lr1200)
+ wan_mac=$(mtd_get_mac_binary factory 0x2e)
+ ;;
++ keenetic,kn-1221|\
+ keenetic,kn-1613|\
+ zyxel,keenetic-extra-ii)
+</pre>
+
+<p></details>
+</summary></p>
+
+<p>Или в виде файла: <a href="/files/18164.patch.backport-24.10.1">18164.patch.backport-24.10.1</a>.
+Готовые сборки тоже доступны в виде файлов: <a href="/files/openwrt-kn-1221-24.10">openwrt-kn-1221-24.10</a></p>
+
+<p>Метки: <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_разработка.html'>разработка</a>, <a href='tag_изменённые прошивки.html'>изменённые прошивки</a></p>
+<!-- text end -->
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/tag_прошивки.html b/tag_прошивки.html
new file mode 100644
index 0000000..20c36a3
--- /dev/null
+++ b/tag_прошивки.html
@@ -0,0 +1,389 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Блог самохостера Lotigara &mdash; Заметки с меткой "прошивки"</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<div class="section_header"><a class="ablack" href="openwrt-24101------keenetic-launcher-kn-1221.html">
+OpenWrt 24.10.1 - исправление, добавляющее поддержку Keenetic Launcher (KN-1221)
+</a></div>
+<!-- bashblog_timestamp: #202504281601.09# -->
+<div class="subtitle">апреля 28, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<p>Вот оно:
+<summary>
+<details></p>
+
+<pre>
+From ef20327e33fb38220ba0bca4418464749305e555 Mon Sep 17 00:00:00 2001
+From: Ivan Davydov <lotigara@lotigara.ru>
+Date: Tue, 4 Mar 2025 23:54:13 +0300
+Subject: [PATCH] ramips: mt76x8: add support for Keenetic Launcher (KN-1221)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Specification:
+SoC: MediaTek MT7628AN
+RAM: 128M DDR2, ESMT M14D128168A (2Y)
+Flash: 32M, cFeon EN25QH256A (Dual Boot on OEM, concatenated on OpenWrt,
+SPI)
+Switch: MediaTek MT7628AN, 3 ports 100 Mbps
+WiFi: MediaTek MT7628AN 2.4 GHz 802.11n
+USB: 1 port USB 2.0
+GPIO: 1 button (Wi-Fi & Reset on OEM, Reset on OpenWrt), 3 LEDs (Power,
+Internet, Wi-Fi), USB port power controls
+
+Disassembly:
+There are 2 screws at the bottom near the LEDs hidden by rubber mounts.
+After removing the screws, pry the gray plastic part around (it is secured
+with latches) and remove it.
+
+UART Interface:
+The UART interface can be connected to the 5 pin located between LAN
+ports and the WAN one.
+Pins (from the second LAN port to the WAN one): VCC, TX, RX, NC, GND
+Settings: 115200, 8N1
+
+Flashing via TFTP:
+1. Connect your PC and router to the first LAN port, configure PC
+interface using IP 192.168.1.2, mask 255.255.255.0
+2. Serve the firmware image (for OpenWrt it is *-squashfs-factory.bin)
+renamed to KN-1221_recovery.bin via TFTP
+3. Power up the router while pressing Wi-Fi button
+4. Release Wi-Fi button when Power LED starts blinking
+
+To revert back to OEM firmware:
+The return to the OEM firmware is carried out by using the methods
+described above with the help of the appropriate firmware image found on
+osvault.keenetic.net.
+
+When using OEM bootloader, the firmware image size cannot exceed the size
+of one OEM «Firmware_x» partition or Kernel + rootFS size.
+
+Signed-off-by: Ivan Davydov <lotigara@lotigara.ru>
+Link: https://github.com/openwrt/openwrt/pull/18164
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ .../ramips/dts/mt7628an_keenetic_kn-1221.dts | 209 ++++++++++++++++++
+ target/linux/ramips/image/mt76x8.mk | 12 +
+ .../mt76x8/base-files/etc/board.d/01_leds | 1 +
+ .../mt76x8/base-files/etc/board.d/02_network | 5 +
+ 4 files changed, 227 insertions(+)
+ create mode 100644 target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+
+diff --git a/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+new file mode 100644
+index 00000000000000..6f5cf96856ed21
+--- /dev/null
++++ b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+@@ -0,0 +1,209 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++
++#include "mt7628an.dtsi"
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/leds/common.h>
++
++/ {
++ compatible = "keenetic,kn-1221", "mediatek,mt7628an-soc";
++ model = "Keenetic KN-1221";
++
++ aliases {
++ label-mac-device = &ethernet;
++
++ led-boot = &led_power;
++ led-failsafe = &led_power;
++ led-running = &led_power;
++ led-upgrade = &led_power;
++ };
++
++ chosen {
++ bootargs = "console=ttyS0,115200";
++ };
++
++ regulator-usb {
++ compatible = "regulator-fixed";
++ regulator-name = "USB-power";
++ regulator-min-microvolt = <5000000>;
++ regulator-max-microvolt = <5000000>;
++ gpios = <&gpio 6 GPIO_ACTIVE_HIGH>;
++ enable-active-high;
++ regulator-always-on;
++ };
++
++ leds {
++ compatible = "gpio-leds";
++
++ led_power: power {
++ function = LED_FUNCTION_POWER;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
++ };
++
++ internet {
++ function = LED_FUNCTION_WAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
++ };
++
++ fn {
++ function = LED_FUNCTION_WLAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
++ linux,default-trigger = "phy0tpt";
++ };
++ };
++
++ keys {
++ compatible = "gpio-keys";
++
++ reset {
++ label = "restart";
++ gpios = <&gpio 37 GPIO_ACTIVE_LOW>;
++ linux,code = <KEY_RESTART>;
++ };
++ };
++
++ virtual_flash {
++ compatible = "mtd-concat";
++ devices = <&firmware1 &firmware2>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ compatible = "denx,uimage";
++ label = "firmware";
++ reg = <0x0 0x1cc0000>;
++ };
++ };
++ };
++};
++
++&state_default {
++ gpio {
++ groups = "i2c", "spi cs1", "gpio", "refclk", "wdt";
++ function = "gpio";
++ };
++};
++
++&spi0 {
++ status = "okay";
++
++ flash@0 {
++ compatible = "jedec,spi-nor";
++ reg = <0>;
++ spi-max-frequency = <32000000>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ label = "u-boot";
++ reg = <0x0 0x30000>;
++ read-only;
++ };
++
++ partition@30000 {
++ label = "u-config";
++ reg = <0x30000 0x10000>;
++ read-only;
++ };
++
++ partition@40000 {
++ label = "rf-eeprom";
++ reg = <0x40000 0x10000>;
++ read-only;
++
++ nvmem-layout {
++ compatible = "fixed-layout";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ eeprom_factory_0: eeprom@0 {
++ reg = <0x0 0x400>;
++ };
++
++ macaddr_factory_4: macaddr@4 {
++ reg = <0x4 0x6>;
++ };
++ };
++ };
++
++ firmware1: partition@50000 {
++ label = "firmware_1";
++ reg = <0x50000 0xe60000>;
++ };
++
++ partition@eb0000 {
++ label = "config_1";
++ reg = <0xeb0000 0x40000>;
++ read-only;
++ };
++
++ partition@ef0000 {
++ label = "storage";
++ reg = <0xef0000 0x100000>;
++ read-only;
++ };
++
++ partition@ff0000 {
++ label = "dump";
++ reg = <0xff0000 0x10000>;
++ read-only;
++ };
++
++ partition@1000000 {
++ label = "u-state";
++ reg = <0x1000000 0x30000>;
++ read-only;
++ };
++
++ partition@1030000 {
++ label = "u-config_res";
++ reg = <0x1030000 0x10000>;
++ read-only;
++ };
++
++ partition@1040000 {
++ label = "rf-eeprom_res";
++ reg = <0x1040000 0x10000>;
++ read-only;
++ };
++
++ firmware2: partition@1050000 {
++ label = "firmware_2";
++ reg = <0x1050000 0xe60000>;
++ };
++
++ partition@1eb0000 {
++ label = "Config_2";
++ reg = <0x1eb0000 0x40000>;
++ read-only;
++ };
++ };
++ };
++};
++
++&ethernet {
++ nvmem-cells = <&macaddr_factory_4>;
++ nvmem-cell-names = "mac-address";
++};
++
++&esw {
++ mediatek,portmap = <0x3e>;
++ mediatek,portdisable = <0x38>;
++};
++
++&wmac {
++ status = "okay";
++
++ nvmem-cells = <&eeprom_factory_0>;
++ nvmem-cell-names = "eeprom";
++};
+diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
+index 8c8cfee23b6cfa..f442148d9ecf10 100644
+--- a/target/linux/ramips/image/mt76x8.mk
++++ b/target/linux/ramips/image/mt76x8.mk
+@@ -366,6 +366,18 @@ define Device/jotale_js76x8-32m
+ endef
+ TARGET_DEVICES += jotale_js76x8-32m
+
++define Device/keenetic_kn-1221
++ BLOCKSIZE := 64k
++ IMAGE_SIZE := 29440k
++ DEVICE_VENDOR := Keenetic
++ DEVICE_MODEL := KN-1221
++ DEVICE_PACKAGES := kmod-usb2
++ IMAGES += factory.bin
++ IMAGE/factory.bin := $$(sysupgrade_bin) | pad-to $$$$(BLOCKSIZE) | \
++ check-size 14720k | zyimage -d 0x801221 -v "KN-1221"
++endef
++TARGET_DEVICES += keenetic_kn-1221
++
+ define Device/keenetic_kn-1613
+ IMAGE_SIZE := 31488k
+ DEVICE_VENDOR := Keenetic
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+index b87062ae3c5ae5..79f78a2a459487 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+@@ -58,4 +58,5 @@ hiwifi,hc5661a|\
+ hiwifi,hc5761a)
+ ucidef_set_led_switch "internet" "internet" "blue:internet" "switch0" "0x10"
+ ;;
++keenetic,kn-1221|\
+ keenetic,kn-1613)
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+index fbdc7fb5a2697a..6e6e1310d3495f 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+@@ -131,5 +131,9 @@ ramips_setup_interfaces()
+ ucidef_add_switch "switch0" \
+ "0:lan" "1:lan" "2:lan" "6@eth0"
+ ;;
++ keenetic,kn-1221)
++ ucidef_add_switch "switch0" \
++ "1:lan" "2:lan" "0:wan" "6@eth0"
++ ;;
+ keenetic,kn-1613|\
+ motorola,mwr03)
+@@ -280,5 +280,6 @@ ramips_setup_macs()
+ totolink,lr1200)
+ wan_mac=$(mtd_get_mac_binary factory 0x2e)
+ ;;
++ keenetic,kn-1221|\
+ keenetic,kn-1613|\
+ zyxel,keenetic-extra-ii)
+</pre>
+
+<p></details>
+</summary></p>
+
+<p>Или в виде файла: <a href="/files/18164.patch.backport-24.10.1">18164.patch.backport-24.10.1</a>.
+Готовые сборки тоже доступны в виде файлов: <a href="/files/openwrt-kn-1221-24.10">openwrt-kn-1221-24.10</a></p>
+
+<p>Метки: <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_разработка.html'>разработка</a>, <a href='tag_изменённые прошивки.html'>изменённые прошивки</a></p>
+<!-- text end -->
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>
diff --git a/tag_разработка.html b/tag_разработка.html
new file mode 100644
index 0000000..570846a
--- /dev/null
+++ b/tag_разработка.html
@@ -0,0 +1,389 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="/css/main.css" rel="stylesheet" />
+ <link href="/css/theme.css" rel="stylesheet" />
+ <link href="/css/third-party.css" rel="stylesheet" />
+ <link href="/css/responsivity.css" rel="stylesheet" />
+<title>Блог самохостера Lotigara &mdash; Заметки с меткой "разработка"</title>
+</head><body>
+<input type="checkbox" id="theme-switch">
+<div id="divbodyholder"><div class="inner_page">
+<div class="headerholder"><div class="header">
+<div id="title">
+<div class="page_header floating_element">
+ <h1 class="floating_element">Блог самохостера Lotigara</h1>
+</div>
+<div class="floating_element">
+ <h4 style="display:inline"><a style="color:white" href="/">главная|main page</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="/status.php">состояние|status</a></h4>
+ <p style="display:inline">журнал|journal</p>
+ <h4 style="display:inline"><a style="color:white" href="/files">файлы|files</a></h4>
+ <h4 style="display:inline"><a style="color:white" href="https://git.lotigara.ru">программы|software</a></h4>
+ <label id="switch-label" for="theme-switch"></label>
+</div>
+</div></div></div>
+<div id="divbody"><div class="content">
+<div class="section_header"><a class="ablack" href="openwrt-24101------keenetic-launcher-kn-1221.html">
+OpenWrt 24.10.1 - исправление, добавляющее поддержку Keenetic Launcher (KN-1221)
+</a></div>
+<!-- bashblog_timestamp: #202504281601.09# -->
+<div class="subtitle">апреля 28, 2025 &mdash;
+Ivan Davydov
+</div>
+<!-- text begin -->
+
+<p>Вот оно:
+<summary>
+<details></p>
+
+<pre>
+From ef20327e33fb38220ba0bca4418464749305e555 Mon Sep 17 00:00:00 2001
+From: Ivan Davydov <lotigara@lotigara.ru>
+Date: Tue, 4 Mar 2025 23:54:13 +0300
+Subject: [PATCH] ramips: mt76x8: add support for Keenetic Launcher (KN-1221)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Specification:
+SoC: MediaTek MT7628AN
+RAM: 128M DDR2, ESMT M14D128168A (2Y)
+Flash: 32M, cFeon EN25QH256A (Dual Boot on OEM, concatenated on OpenWrt,
+SPI)
+Switch: MediaTek MT7628AN, 3 ports 100 Mbps
+WiFi: MediaTek MT7628AN 2.4 GHz 802.11n
+USB: 1 port USB 2.0
+GPIO: 1 button (Wi-Fi & Reset on OEM, Reset on OpenWrt), 3 LEDs (Power,
+Internet, Wi-Fi), USB port power controls
+
+Disassembly:
+There are 2 screws at the bottom near the LEDs hidden by rubber mounts.
+After removing the screws, pry the gray plastic part around (it is secured
+with latches) and remove it.
+
+UART Interface:
+The UART interface can be connected to the 5 pin located between LAN
+ports and the WAN one.
+Pins (from the second LAN port to the WAN one): VCC, TX, RX, NC, GND
+Settings: 115200, 8N1
+
+Flashing via TFTP:
+1. Connect your PC and router to the first LAN port, configure PC
+interface using IP 192.168.1.2, mask 255.255.255.0
+2. Serve the firmware image (for OpenWrt it is *-squashfs-factory.bin)
+renamed to KN-1221_recovery.bin via TFTP
+3. Power up the router while pressing Wi-Fi button
+4. Release Wi-Fi button when Power LED starts blinking
+
+To revert back to OEM firmware:
+The return to the OEM firmware is carried out by using the methods
+described above with the help of the appropriate firmware image found on
+osvault.keenetic.net.
+
+When using OEM bootloader, the firmware image size cannot exceed the size
+of one OEM «Firmware_x» partition or Kernel + rootFS size.
+
+Signed-off-by: Ivan Davydov <lotigara@lotigara.ru>
+Link: https://github.com/openwrt/openwrt/pull/18164
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ .../ramips/dts/mt7628an_keenetic_kn-1221.dts | 209 ++++++++++++++++++
+ target/linux/ramips/image/mt76x8.mk | 12 +
+ .../mt76x8/base-files/etc/board.d/01_leds | 1 +
+ .../mt76x8/base-files/etc/board.d/02_network | 5 +
+ 4 files changed, 227 insertions(+)
+ create mode 100644 target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+
+diff --git a/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+new file mode 100644
+index 00000000000000..6f5cf96856ed21
+--- /dev/null
++++ b/target/linux/ramips/dts/mt7628an_keenetic_kn-1221.dts
+@@ -0,0 +1,209 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++
++#include "mt7628an.dtsi"
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/leds/common.h>
++
++/ {
++ compatible = "keenetic,kn-1221", "mediatek,mt7628an-soc";
++ model = "Keenetic KN-1221";
++
++ aliases {
++ label-mac-device = &ethernet;
++
++ led-boot = &led_power;
++ led-failsafe = &led_power;
++ led-running = &led_power;
++ led-upgrade = &led_power;
++ };
++
++ chosen {
++ bootargs = "console=ttyS0,115200";
++ };
++
++ regulator-usb {
++ compatible = "regulator-fixed";
++ regulator-name = "USB-power";
++ regulator-min-microvolt = <5000000>;
++ regulator-max-microvolt = <5000000>;
++ gpios = <&gpio 6 GPIO_ACTIVE_HIGH>;
++ enable-active-high;
++ regulator-always-on;
++ };
++
++ leds {
++ compatible = "gpio-leds";
++
++ led_power: power {
++ function = LED_FUNCTION_POWER;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
++ };
++
++ internet {
++ function = LED_FUNCTION_WAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
++ };
++
++ fn {
++ function = LED_FUNCTION_WLAN;
++ color = <LED_COLOR_ID_GREEN>;
++ gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
++ linux,default-trigger = "phy0tpt";
++ };
++ };
++
++ keys {
++ compatible = "gpio-keys";
++
++ reset {
++ label = "restart";
++ gpios = <&gpio 37 GPIO_ACTIVE_LOW>;
++ linux,code = <KEY_RESTART>;
++ };
++ };
++
++ virtual_flash {
++ compatible = "mtd-concat";
++ devices = <&firmware1 &firmware2>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ compatible = "denx,uimage";
++ label = "firmware";
++ reg = <0x0 0x1cc0000>;
++ };
++ };
++ };
++};
++
++&state_default {
++ gpio {
++ groups = "i2c", "spi cs1", "gpio", "refclk", "wdt";
++ function = "gpio";
++ };
++};
++
++&spi0 {
++ status = "okay";
++
++ flash@0 {
++ compatible = "jedec,spi-nor";
++ reg = <0>;
++ spi-max-frequency = <32000000>;
++
++ partitions {
++ compatible = "fixed-partitions";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ partition@0 {
++ label = "u-boot";
++ reg = <0x0 0x30000>;
++ read-only;
++ };
++
++ partition@30000 {
++ label = "u-config";
++ reg = <0x30000 0x10000>;
++ read-only;
++ };
++
++ partition@40000 {
++ label = "rf-eeprom";
++ reg = <0x40000 0x10000>;
++ read-only;
++
++ nvmem-layout {
++ compatible = "fixed-layout";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ eeprom_factory_0: eeprom@0 {
++ reg = <0x0 0x400>;
++ };
++
++ macaddr_factory_4: macaddr@4 {
++ reg = <0x4 0x6>;
++ };
++ };
++ };
++
++ firmware1: partition@50000 {
++ label = "firmware_1";
++ reg = <0x50000 0xe60000>;
++ };
++
++ partition@eb0000 {
++ label = "config_1";
++ reg = <0xeb0000 0x40000>;
++ read-only;
++ };
++
++ partition@ef0000 {
++ label = "storage";
++ reg = <0xef0000 0x100000>;
++ read-only;
++ };
++
++ partition@ff0000 {
++ label = "dump";
++ reg = <0xff0000 0x10000>;
++ read-only;
++ };
++
++ partition@1000000 {
++ label = "u-state";
++ reg = <0x1000000 0x30000>;
++ read-only;
++ };
++
++ partition@1030000 {
++ label = "u-config_res";
++ reg = <0x1030000 0x10000>;
++ read-only;
++ };
++
++ partition@1040000 {
++ label = "rf-eeprom_res";
++ reg = <0x1040000 0x10000>;
++ read-only;
++ };
++
++ firmware2: partition@1050000 {
++ label = "firmware_2";
++ reg = <0x1050000 0xe60000>;
++ };
++
++ partition@1eb0000 {
++ label = "Config_2";
++ reg = <0x1eb0000 0x40000>;
++ read-only;
++ };
++ };
++ };
++};
++
++&ethernet {
++ nvmem-cells = <&macaddr_factory_4>;
++ nvmem-cell-names = "mac-address";
++};
++
++&esw {
++ mediatek,portmap = <0x3e>;
++ mediatek,portdisable = <0x38>;
++};
++
++&wmac {
++ status = "okay";
++
++ nvmem-cells = <&eeprom_factory_0>;
++ nvmem-cell-names = "eeprom";
++};
+diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
+index 8c8cfee23b6cfa..f442148d9ecf10 100644
+--- a/target/linux/ramips/image/mt76x8.mk
++++ b/target/linux/ramips/image/mt76x8.mk
+@@ -366,6 +366,18 @@ define Device/jotale_js76x8-32m
+ endef
+ TARGET_DEVICES += jotale_js76x8-32m
+
++define Device/keenetic_kn-1221
++ BLOCKSIZE := 64k
++ IMAGE_SIZE := 29440k
++ DEVICE_VENDOR := Keenetic
++ DEVICE_MODEL := KN-1221
++ DEVICE_PACKAGES := kmod-usb2
++ IMAGES += factory.bin
++ IMAGE/factory.bin := $$(sysupgrade_bin) | pad-to $$$$(BLOCKSIZE) | \
++ check-size 14720k | zyimage -d 0x801221 -v "KN-1221"
++endef
++TARGET_DEVICES += keenetic_kn-1221
++
+ define Device/keenetic_kn-1613
+ IMAGE_SIZE := 31488k
+ DEVICE_VENDOR := Keenetic
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+index b87062ae3c5ae5..79f78a2a459487 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+@@ -58,4 +58,5 @@ hiwifi,hc5661a|\
+ hiwifi,hc5761a)
+ ucidef_set_led_switch "internet" "internet" "blue:internet" "switch0" "0x10"
+ ;;
++keenetic,kn-1221|\
+ keenetic,kn-1613)
+diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+index fbdc7fb5a2697a..6e6e1310d3495f 100644
+--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
++++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+@@ -131,5 +131,9 @@ ramips_setup_interfaces()
+ ucidef_add_switch "switch0" \
+ "0:lan" "1:lan" "2:lan" "6@eth0"
+ ;;
++ keenetic,kn-1221)
++ ucidef_add_switch "switch0" \
++ "1:lan" "2:lan" "0:wan" "6@eth0"
++ ;;
+ keenetic,kn-1613|\
+ motorola,mwr03)
+@@ -280,5 +280,6 @@ ramips_setup_macs()
+ totolink,lr1200)
+ wan_mac=$(mtd_get_mac_binary factory 0x2e)
+ ;;
++ keenetic,kn-1221|\
+ keenetic,kn-1613|\
+ zyxel,keenetic-extra-ii)
+</pre>
+
+<p></details>
+</summary></p>
+
+<p>Или в виде файла: <a href="/files/18164.patch.backport-24.10.1">18164.patch.backport-24.10.1</a>.
+Готовые сборки тоже доступны в виде файлов: <a href="/files/openwrt-kn-1221-24.10">openwrt-kn-1221-24.10</a></p>
+
+<p>Метки: <a href='tag_openwrt.html'>openwrt</a>, <a href='tag_разработка.html'>разработка</a>, <a href='tag_изменённые прошивки.html'>изменённые прошивки</a></p>
+<!-- text end -->
+</div>
+<script data-isso-css-url="https://www.lotigara.ru/css/isso.css" data-isso="//isso.lotigara.ru/" src="//isso.lotigara.ru/js/embed.min.js"></script>
+<section id="isso-thread">
+ <noscript>Javascript needs to be activated to view comments.</noscript>
+</section>
+
+<div class="section_header section_header_last">
+ <p>(c) Ivan Davydov 2025. Делайте с этим документом всё, что хотите!</p><hr/>
+ <a href="https://www.lotigara.ru/blog">Веб-сайт самохостера Lotigara</a> сгенерирован при помощи <a href="https://github.com/jakimfett/bashblog">Bashblog</a>. Исходные коды этой версии Bashblog можно найти <a href="https://www.lotigara.ru/files/bashblog">здесь</a>.</div>
+</div>
+</div></div></div>
+</body></html>