[{"id":8894,"date":"2026-09-12T09:15:21","date_gmt":"2026-09-12T07:15:21","guid":{"rendered":"https:\/\/speefak.spdns.de\/oss_lifestyle\/?p=8894"},"modified":"2026-09-12T09:15:21","modified_gmt":"2026-09-12T07:15:21","slug":"zentrale-python-installation-mit-uv","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/zentrale-python-installation-mit-uv\/","title":{"rendered":"Zentrale Python-Installation mit uv"},"content":{"rendered":"<p>Mit <strong>uv<\/strong> lassen sich mehrere Python-Versionen zentral auf einem Linux-System installieren und anschlie\u00dfend f\u00fcr unterschiedliche Projekte in voneinander getrennten virtuellen Umgebungen verwenden.<\/p>\n<p>Dieses Setup verfolgt eine klare Trennung:<\/p>\n<ul>\n<li>Python-Versionen werden zentral unter <code>\/opt\/python<\/code> installiert.<\/li>\n<li><code>uv<\/code> wird systemweit unter <code>\/usr\/local\/bin\/uv<\/code> bereitgestellt.<\/li>\n<li>Virtuelle Umgebungen werden pro Benutzer und Projekt erstellt.<\/li>\n<li>Python-Pakete werden ausschlie\u00dflich innerhalb der jeweiligen virtuellen Umgebung installiert.<\/li>\n<\/ul>\n<h2>Zielstruktur<\/h2>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n\/usr\/local\/bin\/uv\r\n\r\n\/opt\/python\/\r\n\u251c\u2500\u2500 3.12.x\/\r\n\u251c\u2500\u2500 3.13.x\/\r\n\u2514\u2500\u2500 3.14.x\/\r\n\r\n\/home\/User\/\r\n\u2514\u2500\u2500 projekt\/\r\n    \u2514\u2500\u2500 .venv\/<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-6\">6<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-7\">7<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-8\">8<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-9\">9<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-10\">10<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-1\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">usr<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">local<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">uv<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-2\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-3\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">opt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">python<\/span><span class=\"crayon-o\">\/<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-4\">\u251c\u2500\u2500<span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">3.12.x<\/span><span class=\"crayon-o\">\/<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-5\">\u251c\u2500\u2500<span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">3.13.x<\/span><span class=\"crayon-o\">\/<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-6\">\u2514\u2500\u2500<span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">3.14.x<\/span><span class=\"crayon-o\">\/<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-7\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-8\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">User<\/span><span class=\"crayon-o\">\/<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-9\">\u2514\u2500\u2500<span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">projekt<\/span><span class=\"crayon-o\">\/<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24aa608090698-10\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2514\u2500\u2500<span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">venv<\/span><span class=\"crayon-o\">\/<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0003 seconds] -->\r\n<p><\/p>\n<h2>1. Verzeichnis f\u00fcr zentrale Python-Versionen erstellen<\/h2>\n<p>Die folgenden Befehle werden als <code>root<\/code> ausgef\u00fchrt:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24b5570105939\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo mkdir -p \/opt\/python \r\nsudo chmod 755 \/opt\/python<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24b5570105939-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24b5570105939-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24b5570105939-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">mkdir<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">opt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">python <\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24b5570105939-2\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-i\">chmod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">755<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">opt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">python<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<h2>2. uv systemweit installieren<\/h2>\n<p>Die Installation von <code>uv<\/code> erfolgt ebenfalls als <code>root<\/code>:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24b8179561590\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo curl -LsSf https:\/\/astral.sh\/uv\/install.sh | sudo env UV_INSTALL_DIR=\/usr\/local\/bin sh<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24b8179561590-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24b8179561590-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">curl<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">LsSf <\/span><span class=\"crayon-v\">https<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-c\">\/\/astral.sh\/uv\/install.sh | sudo env UV_INSTALL_DIR=\/usr\/local\/bin sh<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Anschlie\u00dfend kann die Installation \u00fcberpr\u00fcft werden:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24bb703584317\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nuv --version<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24bb703584317-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24bb703584317-1\"><span class=\"crayon-v\">uv<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-v\">version<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><code>uv<\/code> befindet sich anschlie\u00dfend unter:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24bd196970719\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n\/usr\/local\/bin\/uv<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24bd196970719-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24bd196970719-1\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">usr<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">local<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">uv<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<h2>3. Python-Versionen zentral installieren<\/h2>\n<p>Python-Versionen k\u00f6nnen mit <code>uv<\/code> direkt in das zentrale Installationsverzeichnis installiert werden.<\/p>\n<p>Beispiel f\u00fcr Python 3.12:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24c0454317933\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo uv python install 3.12 --install-dir \/opt\/python<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24c0454317933-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24c0454317933-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">uv <\/span><span class=\"crayon-e\">python <\/span><span class=\"crayon-i\">install<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">3.12<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-v\">install<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">dir<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">opt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">python<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Weitere Versionen k\u00f6nnen entsprechend installiert werden:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24c2709795230\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo uv python install 3.13 --install-dir \/opt\/python\r\nsudo uv python install 3.14 --install-dir \/opt\/python<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24c2709795230-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24c2709795230-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24c2709795230-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">uv <\/span><span class=\"crayon-e\">python <\/span><span class=\"crayon-i\">install<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">3.13<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-v\">install<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">dir<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">opt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">python<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24c2709795230-2\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">uv <\/span><span class=\"crayon-e\">python <\/span><span class=\"crayon-i\">install<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">3.14<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-v\">install<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">dir<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">opt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">python<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Die genaue Verzeichnisstruktur innerhalb von <code>\/opt\/python<\/code> wird von <code>uv<\/code> verwaltet und sollte nicht manuell ver\u00e4ndert werden.<\/p>\n<h2>4. Berechtigungen festlegen<\/h2>\n<p>Die zentral installierten Python-Versionen sollen von allen Benutzern verwendet, aber nur von <code>root<\/code> ver\u00e4ndert werden k\u00f6nnen:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24c4795077525\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo chown -R root:root \/opt\/python\r\nsudo chmod -R a+rX \/opt\/python<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24c4795077525-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24c4795077525-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24c4795077525-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">chown<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">R<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">root<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-v\">root<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">opt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">python<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24c4795077525-2\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">chmod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">R<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">a<\/span><span class=\"crayon-o\">+<\/span><span class=\"crayon-v\">rX<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">opt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">python<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>&nbsp;<\/p>\n<table>\n<thead>\n<tr>\n<th>Benutzer<\/th>\n<th>Berechtigung<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>root<\/code><\/td>\n<td>Lesen, Ausf\u00fchren und Ver\u00e4ndern<\/td>\n<\/tr>\n<tr>\n<td>Normale Benutzer<\/td>\n<td>Lesen und Ausf\u00fchren<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>5. Installationsverzeichnis f\u00fcr uv festlegen<\/h2>\n<p>Damit <code>uv<\/code> das zentrale Python-Verzeichnis dauerhaft verwendet, wird die Umgebungsvariable systemweit gesetzt:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24c6264121603\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\necho 'export UV_PYTHON_INSTALL_DIR=\/opt\/python' | sudo tee \/etc\/profile.d\/uv-python.sh\r\nsudo chmod 644 \/etc\/profile.d\/uv-python.sh<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24c6264121603-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24c6264121603-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24c6264121603-1\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">'export UV_PYTHON_INSTALL_DIR=\/opt\/python'<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">|<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">tee<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">profile<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">d<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">uv<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">python<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">sh<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24c6264121603-2\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-i\">chmod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">644<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">profile<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">d<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">uv<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">python<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">sh<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0002 seconds] -->\r\n<p>F\u00fcr die aktuelle Sitzung kann die Konfiguration sofort geladen werden:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24c9281129991\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsource \/etc\/profile.d\/uv-python.sh<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24c9281129991-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24c9281129991-1\"><span class=\"crayon-v\">source<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">profile<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">d<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">uv<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">python<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">sh<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Die Konfiguration kann anschlie\u00dfend \u00fcberpr\u00fcft werden:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24cb963922153\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nuv python dir<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24cb963922153-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24cb963922153-1\"><span class=\"crayon-e\">uv <\/span><span class=\"crayon-e\">python <\/span><span class=\"crayon-v\">dir<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Erwartetes Ergebnis:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24cd072324318\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n\/opt\/python<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24cd072324318-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24cd072324318-1\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">opt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">python<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<h2>6. Installierte Python-Versionen anzeigen<\/h2>\n<p>Mit folgendem Befehl lassen sich die von <code>uv<\/code> verf\u00fcgbaren und installierten Python-Versionen anzeigen:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24d0342895650\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nuv python list<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24d0342895650-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24d0342895650-1\"><span class=\"crayon-e\">uv <\/span><span class=\"crayon-e\">python <\/span><span class=\"crayon-v\">list<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<h2>7. Virtuelle Umgebung f\u00fcr einen Benutzer erstellen<\/h2>\n<p>Die folgenden Schritte werden als Benutzer <code>User<\/code> ausgef\u00fchrt.<\/p>\n<p>Zun\u00e4chst wird ein Projektverzeichnis erstellt:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24d2188059617\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nmkdir ~\/projekt\r\ncd ~\/projekt<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24d2188059617-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24d2188059617-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24d2188059617-1\"><span class=\"crayon-v\">mkdir<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">projekt<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24d2188059617-2\"><span class=\"crayon-v\">cd<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">projekt<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Anschlie\u00dfend wird eine virtuelle Umgebung mit bespielsweise Python 3.12 erstellt:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24d4480104138\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nuv venv --python 3.12<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24d4480104138-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24d4480104138-1\"><span class=\"crayon-e\">uv <\/span><span class=\"crayon-v\">venv<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-i\">python<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">3.12<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Dadurch entsteht:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24d6817844122\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n\/home\/User\/projekt\/\r\n\u2514\u2500\u2500 .venv\/<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24d6817844122-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24d6817844122-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24d6817844122-1\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">User<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">projekt<\/span><span class=\"crayon-o\">\/<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24d6817844122-2\">\u2514\u2500\u2500<span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">venv<\/span><span class=\"crayon-o\">\/<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Die virtuelle Umgebung geh\u00f6rt vollst\u00e4ndig dem Benutzer <code>User<\/code>.<\/p>\n<h2>8. Virtuelle Umgebung aktivieren<\/h2>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24d8696796708\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsource .venv\/bin\/activate<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24d8696796708-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24d8696796708-1\"><span class=\"crayon-i\">source<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">venv<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">activate<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Die verwendete Python-Version kann anschlie\u00dfend \u00fcberpr\u00fcft werden:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24db763026604\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\npython --version<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24db763026604-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24db763026604-1\"><span class=\"crayon-v\">python<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-v\">version<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Beispielsweise:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24dd921823794\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nPython 3.12.x<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24dd921823794-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24dd921823794-1\"><span class=\"crayon-i\">Python<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">3.12.x<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Auch der tats\u00e4chlich verwendete Python-Interpreter kann kontrolliert werden:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24df986213993\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nwhich python<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24df986213993-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24df986213993-1\"><span class=\"crayon-e\">which <\/span><span class=\"crayon-v\">python<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Erwartetes Ergebnis:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24e1250903180\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n\/home\/User\/projekt\/.venv\/bin\/python<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e1250903180-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e1250903180-1\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">User<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">projekt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">venv<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">python<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<h2>9. Python-Pakete mit uv installieren<\/h2>\n<p>Pakete werden innerhalb der virtuellen Umgebung mit <code>uv<\/code> installiert:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24e3343462314\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nuv pip install requests<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e3343462314-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e3343462314-1\"><span class=\"crayon-e\">uv <\/span><span class=\"crayon-e\">pip <\/span><span class=\"crayon-e\">install <\/span><span class=\"crayon-v\">requests<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Weitere Pakete k\u00f6nnen beispielsweise so installiert werden:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24e5288317956\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nuv pip install flask fastapi<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e5288317956-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e5288317956-1\"><span class=\"crayon-e\">uv <\/span><span class=\"crayon-e\">pip <\/span><span class=\"crayon-e\">install <\/span><span class=\"crayon-e\">flask <\/span><span class=\"crayon-v\">fastapi<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Die Pakete werden ausschlie\u00dflich in der virtuellen Umgebung des jeweiligen Projekts installiert.<\/p>\n<p>Die zentrale Python-Installation unter <code>\/opt\/python<\/code> bleibt dabei unver\u00e4ndert.<\/p>\n<h2>Ergebnis<\/h2>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n   root\r\n                     \u2502\r\n             \/usr\/local\/bin\/uv\r\n                     \u2502\r\n              \/opt\/python\/\r\n                \u2502    \u2502    \u2502\r\n              3.12  3.13  3.14\r\n                \u2502    \u2502    \u2502\r\n                \u2514\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2518\r\n                     \u2502\r\n                   uv venv\r\n                     \u2502\r\n                \/home\/User\/\r\n                     \u2502\r\n                   projekt\/\r\n                     \u2502\r\n                   .venv\/\r\n                     \u2502\r\n              eigene Pak<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-6\">6<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-7\">7<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-8\">8<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-9\">9<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-10\">10<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-11\">11<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-12\">12<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-13\">13<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-14\">14<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-15\">15<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-16\">16<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-17\">17<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-18\">18<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-19\">19<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-1\"><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><span class=\"crayon-i\">root<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-2\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>\u2502<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-3\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">usr<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">local<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-i\">uv<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-4\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>\u2502<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-5\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">opt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">python<\/span><span class=\"crayon-o\">\/<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-6\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-7\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-cn\">3.12<\/span><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-cn\">3.13<\/span><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-cn\">3.14<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-8\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-9\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2514\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2518<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-10\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>\u2502<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-11\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-e\">uv <\/span><span class=\"crayon-i\">venv<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-12\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>\u2502<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-13\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">User<\/span><span class=\"crayon-o\">\/<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-14\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>\u2502<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-15\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-v\">projekt<\/span><span class=\"crayon-o\">\/<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-16\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>\u2502<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-17\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">venv<\/span><span class=\"crayon-o\">\/<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-18\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>\u2502<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b24e7441291225-19\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">eigene <\/span><span class=\"crayon-v\">Pak<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0003 seconds] -->\r\n<p><\/p>\n<table>\n<thead>\n<tr>\n<th>Bereich<\/th>\n<th>Verantwortlich<\/th>\n<th>Zweck<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>\/usr\/local\/bin\/uv<\/code><\/td>\n<td><code>root<\/code><\/td>\n<td>Zentrales Werkzeug<\/td>\n<\/tr>\n<tr>\n<td><code>\/opt\/python\/<\/code><\/td>\n<td><code>root<\/code><\/td>\n<td>Zentrale Python-Versionen<\/td>\n<\/tr>\n<tr>\n<td><code>~\/projekt\/.venv\/<\/code><\/td>\n<td><code>User<\/code><\/td>\n<td>Virtuelle Umgebung<\/td>\n<\/tr>\n<tr>\n<td>Pakete innerhalb von <code>.venv<\/code><\/td>\n<td><code>User<\/code><\/td>\n<td>Projektabh\u00e4ngigkeiten<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Eine Python-Version, beispielsweise Python 3.13, wird damit nur einmal zentral installiert. Der Benutzer <code>User<\/code> kann daraus beliebig viele eigene virtuelle Umgebungen erstellen, ohne die zentrale Python-Installation oder andere Projekte zu ver\u00e4ndern.<\/p>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/>by Speefak<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit uv lassen sich mehrere Python-Versionen zentral auf einem Linux-System installieren und anschlie\u00dfend f\u00fcr unterschiedliche Projekte in voneinander getrennten virtuellen Umgebungen verwenden. Dieses Setup verfolgt eine klare Trennung: Python-Versionen werden zentral unter \/opt\/python installiert. uv wird systemweit unter \/usr\/local\/bin\/uv bereitgestellt. Virtuelle Umgebungen werden pro Benutzer und Projekt erstellt. Python-Pakete werden ausschlie\u00dflich innerhalb der jeweiligen virtuellen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8894","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/allgemein\/\" rel=\"category tag\">Allgemein<\/a>","rttpg_excerpt":"Mit uv lassen sich mehrere Python-Versionen zentral auf einem Linux-System installieren und anschlie\u00dfend f\u00fcr unterschiedliche Projekte in voneinander getrennten virtuellen Umgebungen verwenden. Dieses Setup verfolgt eine klare Trennung: Python-Versionen werden zentral unter \/opt\/python installiert. uv wird systemweit unter \/usr\/local\/bin\/uv bereitgestellt. Virtuelle Umgebungen werden pro Benutzer und Projekt erstellt. Python-Pakete werden ausschlie\u00dflich innerhalb der jeweiligen virtuellen&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=8894"}],"version-history":[{"count":6,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8894\/revisions"}],"predecessor-version":[{"id":8900,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8894\/revisions\/8900"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=8894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=8894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=8894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":8702,"date":"2026-08-28T11:38:50","date_gmt":"2026-08-28T09:38:50","guid":{"rendered":"https:\/\/speefak.spdns.de\/oss_lifestyle\/?p=8702"},"modified":"2026-08-29T10:05:49","modified_gmt":"2026-08-29T08:05:49","slug":"ollama-installation","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/ollama-installation\/","title":{"rendered":"Ollama Installation"},"content":{"rendered":"<p>Der Ollama-Server kann grunds\u00e4tzlich auf zwei unterschiedliche Arten installiert werden: entweder \u00fcber das offizielle Installationsskript oder durch eine manuelle Installation. Die Installation mittels Skript (<code>curl -fsSL https:\/\/ollama.com\/install.sh | sh<\/code>) ist zwar schnell und komfortabel, hat jedoch den Nachteil, dass die f\u00fcr den Betrieb ben\u00f6tigten Dateien auf verschiedene Systemverzeichnisse verteilt werden.<\/p>\n<p>So werden die Modell-Dateien abh\u00e4ngig von der Art der Ausf\u00fchrung (Root oder Benutzer) beispielsweise unter folgenden Pfaden gespeichert:<\/p>\n<ul>\n<li>Bei Installation \u00fcber das offizielle Installationsskript:\n<ul>\n<li><code>\/usr\/share\/ollama\/.ollama\/models\/<\/code><\/li>\n<\/ul>\n<\/li>\n<li>Bei Verwendung einer manuell heruntergeladenen Bin\u00e4rdatei:\n<ul>\n<li><code>\/home\/$USER\/.ollama\/models\/<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Zus\u00e4tzlich werden die von Ollama ben\u00f6tigten CUDA-Bibliotheken standardm\u00e4\u00dfig unter <code>\/usr\/local\/lib\/ollama<\/code> abgelegt, was je nach installierten Komponenten mehrere Gigabyte Speicherplatz beanspruchen kann.<\/p>\n<p>Aus Gr\u00fcnden der \u00dcbersichtlichkeit, Datensicherung und Portabilit\u00e4t empfiehlt es sich daher, den Ollama-Server manuell in einem eigenen Verzeichnis zu installieren und die erforderlichen Umgebungsvariablen wie <code>PATH<\/code> oder <code>LD_LIBRARY_PATH<\/code> selbst anzupassen. Dadurch befinden sich s\u00e4mtliche f\u00fcr den Betrieb ben\u00f6tigten Dateien \u2013 einschlie\u00dflich der Bin\u00e4rdateien, CUDA-Bibliotheken und Modell-Dateien \u2013 in einer gemeinsamen Verzeichnisstruktur. Dies erleichtert nicht nur Backups, sondern erm\u00f6glicht auch eine einfache Migration oder Portierung des gesamten Ollama-Servers auf andere Systeme.<\/p>\n<h2>Installation via Ollama Installationsskript<\/h2>\n<p>Die Installation mittels des offiziellen Installationsskripts kann bereits mit einem einzigen Befehl durchgef\u00fchrt werden:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b2bd3950128184\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\ncurl -fsSL https:\/\/ollama.com\/install.sh | sh<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bd3950128184-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bd3950128184-1\"><span class=\"crayon-v\">curl<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">fsSL <\/span><span class=\"crayon-v\">https<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-c\">\/\/ollama.com\/install.sh | sh<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>Installation via Ollama Sourcecode \/ GitHub<\/h2>\n<p>Bei der manuellen Installation wird Ollama vollst\u00e4ndig in einem eigenen Verzeichnis installiert, wodurch systemweit verteilte Installationspfade vermieden werden.<\/p>\n<h3>Verzeichnisstruktur anlegen<\/h3>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b2bdc062952725\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nmkdir -p \/home\/ollama-portable\r\ncd \/home\/ollama-portabl<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bdc062952725-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bdc062952725-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bdc062952725-1\"><span class=\"crayon-v\">mkdir<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ollama<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">portable<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bdc062952725-2\"><span class=\"crayon-v\">cd<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ollama<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">portabl<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<h3>Ollama herunterladen und entpacken<\/h3>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b2bdf145107685\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\ncurl -fsSL https:\/\/ollama.com\/download\/ollama-linux-amd64.tar.zst -o ollama.tar.zst\r\ntar x --zstd -f ollama.tar.zst<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bdf145107685-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bdf145107685-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bdf145107685-1\"><span class=\"crayon-v\">curl<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">fsSL <\/span><span class=\"crayon-v\">https<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-c\">\/\/ollama.com\/download\/ollama-linux-amd64.tar.zst -o ollama.tar.zst<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bdf145107685-2\"><span class=\"crayon-i\">tar<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">x<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-v\">zstd<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">f<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">ollama<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">tar<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">zst<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Nach dem Entpacken stehen typischerweise folgende Verzeichnisse zur Verf\u00fcgung:<\/p>\n<ul>\n<li><code>bin\/<\/code><\/li>\n<li><code>lib\/<\/code><\/li>\n<\/ul>\n<h3>Models-Verzeichnis anlegen<\/h3>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b2be1556748030\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nmkdir -p \/home\/ollama-portable\/models<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2be1556748030-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2be1556748030-1\"><span class=\"crayon-v\">mkdir<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ollama<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">portable<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">models<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<h3>Symlink f\u00fcr globale Nutzung<\/h3>\n<p>Damit <code>ollama<\/code> systemweit verf\u00fcgbar ist:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b2be4193837178\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo ln -s \/home\/ollama-portable\/bin\/ollama \/usr\/local\/bin\/ollama<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2be4193837178-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2be4193837178-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">ln<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">s<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ollama<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">portable<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ollama<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">usr<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">local<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ollama<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Pr\u00fcfen:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b2be6012921205\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nollama version\r\nwhich ollama<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2be6012921205-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2be6012921205-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2be6012921205-1\"><span class=\"crayon-e\">ollama <\/span><span class=\"crayon-e\">version<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2be6012921205-2\"><span class=\"crayon-e\">which <\/span><span class=\"crayon-v\">ollama<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>Teststart (manuell)<\/h2>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b2be8561039936\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nexport OLLAMA_MODELS=\/home\/ollama-portable\/models\r\nexport LD_LIBRARY_PATH=\/home\/ollama-portable\/lib\r\nexport PATH=\/home\/ollama-portable\/bin:\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin\" ollama serve<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2be8561039936-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2be8561039936-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2be8561039936-3\">3<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2be8561039936-1\"><span class=\"crayon-e\">export <\/span><span class=\"crayon-v\">OLLAMA_MODELS<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ollama<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">portable<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">models<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2be8561039936-2\"><span class=\"crayon-e\">export <\/span><span class=\"crayon-v\">LD_LIBRARY_PATH<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ollama<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">portable<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">lib<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2be8561039936-3\"><span class=\"crayon-e\">export <\/span><span class=\"crayon-v\">PATH<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ollama<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">portable<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">usr<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">local<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sbin<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">usr<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">local<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">usr<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sbin<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">usr<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sbin<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-i\">bin<\/span>\"<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">ollama <\/span><span class=\"crayon-v\">serve<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0003 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>systemd Service einrichten<\/h2>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b2bea283579993\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo nano \/etc\/systemd\/system\/ollama-portable.service<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bea283579993-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bea283579993-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">nano<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">systemd<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">system<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ollama<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">portable<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">service<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<h3>Inhalt (User und Group anpassen) :<\/h3>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n[Unit]\r\nDescription=Ollama Portable Service\r\nAfter=network-online.target\r\n\r\n[Service]\r\nType=simple\r\nUser=User\r\nGroup=User\r\n\r\nWorkingDirectory=\/home\/ollama-portable\r\n\r\nExecStart=\/home\/ollama-portable\/bin\/ollama serve\r\n\r\nEnvironment=\"OLLAMA_MODELS=\/home\/ollama-portable\/models\"\r\nEnvironment=\"LD_LIBRARY_PATH=\/home\/ollama-portable\/lib\"\r\nEnvironment=\"PATH=\/home\/ollama-portable\/bin:\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin\"\r\n\r\nRestart=always\r\nRestartSec=3\r\n\r\n[Install]\r\nWantedBy=multi-user.targe<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-6\">6<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-7\">7<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-8\">8<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-9\">9<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-10\">10<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-11\">11<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-12\">12<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-13\">13<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-14\">14<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-15\">15<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-16\">16<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-17\">17<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-18\">18<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-19\">19<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-20\">20<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-21\">21<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-22\">22<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-1\"><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">Unit<\/span><span class=\"crayon-sy\">]<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-2\"><span class=\"crayon-v\">Description<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-e\">Ollama <\/span><span class=\"crayon-e\">Portable <\/span><span class=\"crayon-e\">Service<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-3\"><span class=\"crayon-v\">After<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-v\">network<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">online<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-i\">target<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-4\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-5\"><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">Service<\/span><span class=\"crayon-sy\">]<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-6\"><span class=\"crayon-v\">Type<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-e\">simple<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-7\"><span class=\"crayon-v\">User<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-e\">User<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-8\"><span class=\"crayon-v\">Group<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-e\">User<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-9\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-10\"><span class=\"crayon-v\">WorkingDirectory<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ollama<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">portable<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-11\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-12\"><span class=\"crayon-v\">ExecStart<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ollama<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">portable<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">ollama <\/span><span class=\"crayon-e\">serve<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-13\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-14\"><span class=\"crayon-v\">Environment<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"OLLAMA_MODELS=\/home\/ollama-portable\/models\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-15\"><span class=\"crayon-v\">Environment<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"LD_LIBRARY_PATH=\/home\/ollama-portable\/lib\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-16\"><span class=\"crayon-v\">Environment<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"PATH=\/home\/ollama-portable\/bin:\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-17\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-18\"><span class=\"crayon-v\">Restart<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-e\">always<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-19\"><span class=\"crayon-v\">RestartSec<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-cn\">3<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-20\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-21\"><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">Install<\/span><span class=\"crayon-sy\">]<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bed563430208-22\"><span class=\"crayon-v\">WantedBy<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-v\">multi<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">user<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">targe<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0003 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>Service aktivieren<\/h2>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b2bef416793890\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo systemctl daemon-reload\r\nsudo systemctl enable --now ollama-portable<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bef416793890-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bef416793890-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bef416793890-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">systemctl <\/span><span class=\"crayon-v\">daemon<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">reload<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bef416793890-2\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">systemctl <\/span><span class=\"crayon-v\">enable<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-e\">now <\/span><span class=\"crayon-v\">ollama<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">portable<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Status pr\u00fcfen:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b2bf2868221392\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsystemctl status ollama-portable<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bf2868221392-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bf2868221392-1\"><span class=\"crayon-e\">systemctl <\/span><span class=\"crayon-e\">status <\/span><span class=\"crayon-v\">ollama<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">portable<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<h2>Nutzung<\/h2>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b2bf4834193905\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nollama pull llama3.2\r\nollama run llama3.2<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bf4834193905-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bf4834193905-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bf4834193905-1\"><span class=\"crayon-e\">ollama <\/span><span class=\"crayon-e\">pull <\/span><span class=\"crayon-v\">llama3<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-cn\">2<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bf4834193905-2\"><span class=\"crayon-e\">ollama <\/span><span class=\"crayon-e\">run <\/span><span class=\"crayon-v\">llama3<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-cn\">2<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<h3>Vorteile dieser Methode<\/h3>\n<ul>\n<li>Nahezu alle Dateien befinden sich in einem einzigen Verzeichnis.<\/li>\n<li>Die Modelle werden direkt im Unterordner <code>models\/<\/code> gespeichert.<\/li>\n<li>Das gesamte Verzeichnis kann einfach gesichert oder auf andere Systeme kopiert werden.<\/li>\n<li>Keine verstreuten Installationspfade innerhalb des Betriebssystems.<\/li>\n<li>Einfache Migration und Wiederherstellung.<\/li>\n<li>Symlink macht CLI systemweit verf\u00fcgbar<\/li>\n<li>systemd sorgt f\u00fcr stabilen Dauerbetrieb<\/li>\n<\/ul>\n<hr \/>\n<h2>Konfiguration<\/h2>\n<p>Nach dem Start von Ollama \u00fcber <code>ollama serve<\/code> erscheint ein interaktives Auswahlmen\u00fc. Dieses bietet verschiedene Integrationen und Agenten-Erweiterungen an, die direkt aus der Oberfl\u00e4che gestartet oder installiert werden k\u00f6nnen:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b2bf6824318437\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nChat with a model\r\nLaunch Claude Code (not installed)\r\nLaunch Hermes Agent (install)\r\nLaunch OpenClaw (install)\r\nLaunch OpenCode (not installed)\r\nMore...<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bf6824318437-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bf6824318437-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bf6824318437-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bf6824318437-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bf6824318437-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b2bf6824318437-6\">6<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bf6824318437-1\"><span class=\"crayon-e\">Chat <\/span><span class=\"crayon-i\">with<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">a<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">model<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bf6824318437-2\"><span class=\"crayon-e\">Launch <\/span><span class=\"crayon-e\">Claude <\/span><span class=\"crayon-e\">Code<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-st\">not<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">installed<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bf6824318437-3\"><span class=\"crayon-e\">Launch <\/span><span class=\"crayon-e\">Hermes <\/span><span class=\"crayon-e\">Agent<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">install<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bf6824318437-4\"><span class=\"crayon-e\">Launch <\/span><span class=\"crayon-e\">OpenClaw<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">install<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bf6824318437-5\"><span class=\"crayon-e\">Launch <\/span><span class=\"crayon-e\">OpenCode<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-st\">not<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">installed<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b2bf6824318437-6\"><span class=\"crayon-v\">More<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-sy\">.<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0002 seconds] -->\r\n<p><\/p>\n<h3>Wichtiger Hinweis f\u00fcr Produktivsysteme<\/h3>\n<p>Auf Produktivsystemen oder Servern mit sensiblen Daten (z. B. Login-Datenbanken, API-Keys, interne Dienste oder Accounts) wird dringend empfohlen, keine zus\u00e4tzlichen Agenten oder Integrationen zu installieren.<\/p>\n<p>Die aufgef\u00fchrten Tools wie:<\/p>\n<ul>\n<li>Claude Code<\/li>\n<li>Hermes Agent<\/li>\n<li>OpenClaw<\/li>\n<li>OpenCode<\/li>\n<\/ul>\n<p>sind darauf ausgelegt, eigenst\u00e4ndig Code auszuf\u00fchren, Workflows zu steuern und teilweise autonome Aktionen durchzuf\u00fchren. Dies kann zu unerw\u00fcnschtem Verhalten oder unbeabsichtigten Systemzugriffen f\u00fchren.<\/p>\n<h3>Empfohlene Betriebsweise<\/h3>\n<p>F\u00fcr stabile und kontrollierte Umgebungen sollte ausschlie\u00dflich der reine Ollama-Server verwendet werden:<\/p>\n<ul>\n<li>Betrieb des Ollama-Servers als API-Dienst<\/li>\n<li>Nutzung von lokal installierten Sprachmodellen (LLMs)<\/li>\n<li>Zugriff ausschlie\u00dflich \u00fcber HTTP-API (<code>http:\/\/127.0.0.1:11434<\/code> oder LAN-Freigabe)<\/li>\n<\/ul>\n<p>Die gesamte Interaktion mit Modellen erfolgt dann \u00fcber definierte API-Aufrufe, ohne zus\u00e4tzliche Agentenlogik oder externe Automatisierungswerkzeuge.<\/p>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/>by Speefak<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der Ollama-Server kann grunds\u00e4tzlich auf zwei unterschiedliche Arten installiert werden: entweder \u00fcber das offizielle Installationsskript oder durch eine manuelle Installation. Die Installation mittels Skript (curl -fsSL https:\/\/ollama.com\/install.sh | sh) ist zwar schnell und komfortabel, hat jedoch den Nachteil, dass die f\u00fcr den Betrieb ben\u00f6tigten Dateien auf verschiedene Systemverzeichnisse verteilt werden. So werden die Modell-Dateien abh\u00e4ngig [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,90,40],"tags":[],"class_list":["post-8702","post","type-post","status-publish","format-standard","hentry","category-anleitungen","category-kuenstliche-intelligenz","category-server"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/anleitungen\/\" rel=\"category tag\">Anleitungen<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/kuenstliche-intelligenz\/\" rel=\"category tag\">K\u00fcnstliche Intelligenz<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/server\/\" rel=\"category tag\">Server<\/a>","rttpg_excerpt":"Der Ollama-Server kann grunds\u00e4tzlich auf zwei unterschiedliche Arten installiert werden: entweder \u00fcber das offizielle Installationsskript oder durch eine manuelle Installation. Die Installation mittels Skript (curl -fsSL https:\/\/ollama.com\/install.sh | sh) ist zwar schnell und komfortabel, hat jedoch den Nachteil, dass die f\u00fcr den Betrieb ben\u00f6tigten Dateien auf verschiedene Systemverzeichnisse verteilt werden. So werden die Modell-Dateien abh\u00e4ngig&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8702","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=8702"}],"version-history":[{"count":8,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8702\/revisions"}],"predecessor-version":[{"id":8880,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8702\/revisions\/8880"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=8702"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=8702"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=8702"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":8818,"date":"2026-08-16T12:05:04","date_gmt":"2026-08-16T10:05:04","guid":{"rendered":"https:\/\/speefak.spdns.de\/oss_lifestyle\/?p=8818"},"modified":"2026-09-01T14:05:16","modified_gmt":"2026-09-01T12:05:16","slug":"opnsense-netzwerkisolation-mit-opnsense-auf-proxmox","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/opnsense-netzwerkisolation-mit-opnsense-auf-proxmox\/","title":{"rendered":"OPNsense: Netzwerkisolation mit OPNsense auf Proxmox"},"content":{"rendered":"<h2>Sicherheit durch Isolation<\/h2>\n<p>In modernen IT-Umgebungen ist die konsequente Trennung vertrauensw\u00fcrdiger und potenziell unsicherer Systeme ein wesentlicher Bestandteil der Netzwerksicherheit. Dies gilt insbesondere f\u00fcr KI-Agenten, Testumgebungen, IoT-Ger\u00e4te und sensible Entwicklungsumgebungen, die auf externe Datenquellen oder das Internet zugreifen, gleichzeitig jedoch keinen unkontrollierten Zugriff auf pers\u00f6nliche oder kritische Netzwerkressourcen erhalten sollen.<\/p>\n<p>Eine geeignete L\u00f6sung besteht in der Einrichtung eines <strong>isolierten Netzwerks (IsoLAN)<\/strong>, das strikt vom <strong>gesch\u00fctzten Heimnetzwerk (CoreLAN)<\/strong> getrennt ist. Systeme innerhalb des IsoLAN k\u00f6nnen bei Bedarf auf das Internet zugreifen, w\u00e4hrend Zugriffe auf das CoreLAN unterbunden werden. Gleichzeitig kann ein kontrollierter Zugriff vom CoreLAN auf ausgew\u00e4hlte Systeme im IsoLAN f\u00fcr Administration, Wartung und \u00dcberwachung erm\u00f6glicht werden.<\/p>\n<p>Die Kombination aus <strong>Proxmox VE<\/strong> als Virtualisierungsplattform und <strong>OPNsense<\/strong> als Open-Source-Firewall erm\u00f6glicht eine flexible, klar strukturierte und zentral kontrollierbare Trennung der Netzwerkbereiche. Dadurch lassen sich auch potenziell kompromittierbare Systeme betreiben, ohne die Sicherheit des vertrauensw\u00fcrdigen CoreLAN unn\u00f6tig zu gef\u00e4hrden.<\/p>\n<hr \/>\n<h2 data-pm-slice=\"1 3 []\">Ausgangslage und Zielarchitektur<\/h2>\n<p>Aufbau einer OPNsense-Firewall auf Proxmox, die ein isoliertes Netzwerk, bespielsweise f\u00fcr KI Agenten (<code dir=\"ltr\">IsoLAN<\/code>, 192.168.10.0\/24), vom gesch\u00fctzten Heimnetz (<code dir=\"ltr\">CoreLAN<\/code>, 192.168.1.0\/24) trennt.<\/p>\n<h4><strong>Netzwerkarchitektur:<\/strong><\/h4>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3192799185675\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nRouter (192.168.1.1) \u2500\u2500 CoreLAN 192.168.1.0\/24 \u2500\u2500 OPNsense WAN-Interface (192.168.1.91)\r\n                                                            \u2502\r\n                                                   OPNsense LAN-Interface (192.168.10.1)\r\n                                                            \u2502\r\n                                                   IsoLAN 192.168.10.0\/24 (unsichere VMs)<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3192799185675-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3192799185675-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3192799185675-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3192799185675-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3192799185675-5\">5<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3192799185675-1\"><span class=\"crayon-e\">Router<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">192.168.1.1<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span>\u2500\u2500<span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">CoreLAN<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">192.168.1.0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">24<\/span><span class=\"crayon-h\"> <\/span>\u2500\u2500<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">OPNsense <\/span><span class=\"crayon-v\">WAN<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-t\">Interface<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">192.168.1.91<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3192799185675-2\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3192799185675-3\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-e\">OPNsense <\/span><span class=\"crayon-v\">LAN<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-t\">Interface<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">192.168.10.1<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3192799185675-4\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3192799185675-5\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-i\">IsoLAN<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">192.168.10.0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">24<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">unsichere <\/span><span class=\"crayon-v\">VMs<\/span><span class=\"crayon-sy\">)<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0002 seconds] -->\r\n<p><\/p>\n<h4><strong>Anforderungen:<\/strong><\/h4>\n<ul data-spread=\"false\">\n<li>Zugriff auf CoreLAN darf unter keinen Umst\u00e4nden aus isoLAN erfolgen.<\/li>\n<li>isoLAN erh\u00e4lt Internetzugriff \u00fcber den Router (192.168.1.1) im CoreLAN.<\/li>\n<li>isoLAN erh\u00e4lt Zugriff auf OPNSense DNS- und DHCP-Server<\/li>\n<li>CoreLAN bezieht seine IP-Adressen weiterhin vom Router, nicht von OPNsense.<\/li>\n<li>CoreLAN darf auf Clients in isoLAN zugreifen.<\/li>\n<li>Aus isoLAN sind ausschlie\u00dflich Internetzugriff sowie DNS- und DHCP-Dienste der Firewall selbst erreichbar, kein Zugriff auf die Firewall-WebUI oder sonstige Dienste.<\/li>\n<li>DHCPv6 f\u00fcr isoLAN nicht aktiviert.<\/li>\n<\/ul>\n<h4>Soll-Zustand nach der Konfiguration<\/h4>\n<p>Die Tabelle beschreibt den beabsichtigten Sicherheitszustand. Die einzelnen Regeln, Routen und Ausnahmen werden in den folgenden Abschnitten eingerichtet.<\/p>\n<table>\n<thead>\n<tr>\n<th><span class=\"\">Verbindung<\/span><\/th>\n<th><span class=\"\">Ergebnis<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>CoreLAN \u2192 OPNsense WebUI<\/td>\n<td><span class=\"\">\u2705<\/span> Erlaubt<\/td>\n<\/tr>\n<tr>\n<td>CoreLAN \u2192 isoLAN<\/td>\n<td><span class=\"\">\u2705<\/span> Erlaubt<\/td>\n<\/tr>\n<tr>\n<td><span class=\"\">IsoLAN \u2192 OPNsense DNS<\/span><\/td>\n<td><span class=\"\">\u2705 Erlaubt<\/span><\/td>\n<\/tr>\n<tr>\n<td><span class=\"\">IsoLAN \u2192 OPNsense DHCP<\/span><\/td>\n<td><span class=\"\">\u2705 Erlaubt<\/span><\/td>\n<\/tr>\n<tr>\n<td>isoLAN \u2192 OPNsense (SSH, WebUI etc.)<\/td>\n<td><span class=\"\">\u274c Blockiert<\/span><\/td>\n<\/tr>\n<tr>\n<td><span class=\"\">isoLAN \u2192 CoreLAN<\/span><\/td>\n<td><span class=\"\">\u274c Blockiert<\/span><\/td>\n<\/tr>\n<tr>\n<td><span class=\"\">isoLAN \u2192\u00a0<\/span>CoreLAN 2 (VPN)<\/td>\n<td><span class=\"\">\u274c Blockiert<\/span><\/td>\n<\/tr>\n<tr>\n<td>isoLAN <span class=\"\">\u2192<\/span> Alle anderen IPv4 Netze (Internet)<\/td>\n<td><span class=\"\">\u2705 Erlaubt<\/span><\/td>\n<\/tr>\n<tr>\n<td>isoLAN <span class=\"\">\u2192<\/span> Alle anderen IPv6 Netze (Internet)<\/td>\n<td><span class=\"\">\u2705 Erlaubt<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div>\n<hr \/>\n<\/div>\n<div class=\"flex-auto w-0 pl-1 relative\">\n<div class=\" self-center text-[0.9375rem] font-normal line-clamp-1 flex gap-1 items-center\"><\/div>\n<div>\n<div class=\"chat-assistant w-full min-w-full svelte-1qscqw6\">\n<div>\n<div id=\"response-content-container\" class=\"w-full flex flex-col relative \">\n<div>\n<div class=\"markdown-prose\">\n<h2 dir=\"auto\">IPv4 CIDR-Grundlagen f\u00fcr dieses Tutorial<\/h2>\n<p dir=\"auto\">Eine <strong>IPv4-Adresse<\/strong> besteht aus 32 Bits (4 Oktette \u00e0 8 Bit), z. B. <code class=\"codespan cursor-pointer \">192.168.1.100<\/code>. Die <strong>Subnetzmaske<\/strong> (oder CIDR-Suffix <code class=\"codespan cursor-pointer \">\/n<\/code>) teilt die Adresse in <strong>Netzwerkanteil<\/strong> (die ersten <code class=\"codespan cursor-pointer \">n<\/code> Bits) und <strong>Hostanteil<\/strong> (die verbleibenden <code class=\"codespan cursor-pointer \">32-n<\/code> Bits).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"ds-scroll-area ds-scroll-area--show-on-focus-within ds-scroll-area--enabled _1210dd7 c03cafe9\">\n<table>\n<thead>\n<tr>\n<th><span class=\"\">CIDR<\/span><\/th>\n<th><span class=\"\">Subnetzmaske<\/span><\/th>\n<th><span class=\"\">Host-Bits<\/span><\/th>\n<th><span class=\"\">Adressen gesamt<\/span><\/th>\n<th><span class=\"\">Nutzbare Hosts<\/span><\/th>\n<th><span class=\"\">IP-Bereich (Beispiel)<\/span><\/th>\n<th><span class=\"\">Typische Verwendung<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong><span class=\"\">\/8<\/span><\/strong><\/td>\n<td><span class=\"\">255.0.0.0<\/span><\/td>\n<td><span class=\"\">24<\/span><\/td>\n<td><span class=\"\">16.777.216<\/span><\/td>\n<td><span class=\"\">16.777.214<\/span><\/td>\n<td><span class=\"\">10.0.0.0 \u2013 10.255.255.255<\/span><\/td>\n<td><span class=\"\">Gro\u00dfes Netzwerk, RFC 1918<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/12<\/span><\/strong><\/td>\n<td><span class=\"\">255.240.0.0<\/span><\/td>\n<td><span class=\"\">20<\/span><\/td>\n<td><span class=\"\">1.048.576<\/span><\/td>\n<td><span class=\"\">1.048.574<\/span><\/td>\n<td><span class=\"\">172.16.0.0 \u2013 172.31.255.255<\/span><\/td>\n<td><span class=\"\">Gro\u00dfes Netzwerk, RFC 1918<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/16<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.0.0<\/span><\/td>\n<td><span class=\"\">16<\/span><\/td>\n<td><span class=\"\">65.536<\/span><\/td>\n<td><span class=\"\">65.534<\/span><\/td>\n<td><span class=\"\">192.168.0.0 \u2013 192.168.255.255<\/span><\/td>\n<td><span class=\"\">Zusammenfassung vieler \/24-Netze<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/17<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.128.0<\/span><\/td>\n<td><span class=\"\">15<\/span><\/td>\n<td><span class=\"\">32.768<\/span><\/td>\n<td><span class=\"\">32.766<\/span><\/td>\n<td><span class=\"\">192.168.0.0 \u2013 192.168.127.255<\/span><\/td>\n<td><span class=\"\">Mittelgro\u00dfe Standorte<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/18<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.192.0<\/span><\/td>\n<td><span class=\"\">14<\/span><\/td>\n<td><span class=\"\">16.384<\/span><\/td>\n<td><span class=\"\">16.382<\/span><\/td>\n<td><span class=\"\">192.168.0.0 \u2013 192.168.63.255<\/span><\/td>\n<td><span class=\"\">Mittelgro\u00dfe Standorte<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/19<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.224.0<\/span><\/td>\n<td><span class=\"\">13<\/span><\/td>\n<td><span class=\"\">8.192<\/span><\/td>\n<td><span class=\"\">8.190<\/span><\/td>\n<td><span class=\"\">192.168.0.0 \u2013 192.168.31.255<\/span><\/td>\n<td><span class=\"\">Mittelgro\u00dfe Standorte<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/20<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.240.0<\/span><\/td>\n<td><span class=\"\">12<\/span><\/td>\n<td><span class=\"\">4.096<\/span><\/td>\n<td><span class=\"\">4.094<\/span><\/td>\n<td><span class=\"\">192.168.0.0 \u2013 192.168.15.255<\/span><\/td>\n<td><span class=\"\">Gr\u00f6\u00dfere Abteilungen<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/21<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.248.0<\/span><\/td>\n<td><span class=\"\">11<\/span><\/td>\n<td><span class=\"\">2.048<\/span><\/td>\n<td><span class=\"\">2.046<\/span><\/td>\n<td><span class=\"\">192.168.0.0 \u2013 192.168.7.255<\/span><\/td>\n<td><span class=\"\">Gr\u00f6\u00dfere Abteilungen<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/22<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.252.0<\/span><\/td>\n<td><span class=\"\">10<\/span><\/td>\n<td><span class=\"\">1.024<\/span><\/td>\n<td><span class=\"\">1.022<\/span><\/td>\n<td><span class=\"\">192.168.0.0 \u2013 192.168.3.255<\/span><\/td>\n<td><span class=\"\">Mittlere Abteilungen<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/23<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.254.0<\/span><\/td>\n<td><span class=\"\">9<\/span><\/td>\n<td><span class=\"\">512<\/span><\/td>\n<td><span class=\"\">510<\/span><\/td>\n<td><span class=\"\">192.168.0.0 \u2013 192.168.1.255<\/span><\/td>\n<td><span class=\"\">Mittlere Abteilungen<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/24<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.255.0<\/span><\/td>\n<td><span class=\"\">8<\/span><\/td>\n<td><span class=\"\">256<\/span><\/td>\n<td><span class=\"\">254<\/span><\/td>\n<td><span class=\"\">192.168.1.0 \u2013 192.168.1.255<\/span><\/td>\n<td><span class=\"\">Heim-, LAN- und VM-Netze<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/25<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.255.128<\/span><\/td>\n<td><span class=\"\">7<\/span><\/td>\n<td><span class=\"\">128<\/span><\/td>\n<td><span class=\"\">126<\/span><\/td>\n<td><span class=\"\">192.168.1.0 \u2013 192.168.1.127<\/span><\/td>\n<td><span class=\"\">Kleine B\u00fcros, VLANs<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/26<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.255.192<\/span><\/td>\n<td><span class=\"\">6<\/span><\/td>\n<td><span class=\"\">64<\/span><\/td>\n<td><span class=\"\">62<\/span><\/td>\n<td><span class=\"\">192.168.1.0 \u2013 192.168.1.63<\/span><\/td>\n<td><span class=\"\">Kleine B\u00fcros, VLANs<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/27<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.255.224<\/span><\/td>\n<td><span class=\"\">5<\/span><\/td>\n<td><span class=\"\">32<\/span><\/td>\n<td><span class=\"\">30<\/span><\/td>\n<td><span class=\"\">192.168.1.0 \u2013 192.168.1.31<\/span><\/td>\n<td><span class=\"\">Kleine Arbeitsgruppen<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/28<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.255.240<\/span><\/td>\n<td><span class=\"\">4<\/span><\/td>\n<td><span class=\"\">16<\/span><\/td>\n<td><span class=\"\">14<\/span><\/td>\n<td><span class=\"\">192.168.1.0 \u2013 192.168.1.15<\/span><\/td>\n<td><span class=\"\">Kleine Arbeitsgruppen<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/29<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.255.248<\/span><\/td>\n<td><span class=\"\">3<\/span><\/td>\n<td><span class=\"\">8<\/span><\/td>\n<td><span class=\"\">6<\/span><\/td>\n<td><span class=\"\">192.168.1.0 \u2013 192.168.1.7<\/span><\/td>\n<td><span class=\"\">Kleine Verbindungen<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/30<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.255.252<\/span><\/td>\n<td><span class=\"\">2<\/span><\/td>\n<td><span class=\"\">4<\/span><\/td>\n<td><span class=\"\">2<\/span><\/td>\n<td><span class=\"\">192.168.1.0 \u2013 192.168.1.3<\/span><\/td>\n<td><span class=\"\">Punkt-zu-Punkt-Verbindungen<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/31<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.255.254<\/span><\/td>\n<td><span class=\"\">1<\/span><\/td>\n<td><span class=\"\">2<\/span><\/td>\n<td><span class=\"\">2*<\/span><\/td>\n<td><span class=\"\">192.168.1.0 \u2013 192.168.1.1<\/span><\/td>\n<td><span class=\"\">Punkt-zu-Punkt (RFC 3021)<\/span><\/td>\n<\/tr>\n<tr>\n<td><strong><span class=\"\">\/32<\/span><\/strong><\/td>\n<td><span class=\"\">255.255.255.255<\/span><\/td>\n<td><span class=\"\">0<\/span><\/td>\n<td><span class=\"\">1<\/span><\/td>\n<td><span class=\"\">1<\/span><\/td>\n<td><span class=\"\">192.168.1.10<\/span><\/td>\n<td><span class=\"\">Einzelner Host, Route, Firewall<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"flex-auto w-0 pl-1 relative\">\n<div>\n<div class=\"chat-assistant w-full min-w-full svelte-1qscqw6\">\n<div>\n<div id=\"response-content-container\" class=\"w-full flex flex-col relative \">\n<div>\n<div class=\"markdown-prose\">\n<div class=\"relative w-full group mb-2\">\n<div class=\"scrollbar-hidden relative overflow-x-auto max-w-full\">\n<p><strong>Merksatz:<\/strong> Je <strong>gr\u00f6\u00dfer<\/strong> die Zahl nach <code class=\"codespan cursor-pointer \">\/<\/code>, desto <strong>kleiner<\/strong> das Netz.<\/p>\n<hr \/>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h2>1. Netzwerkkonfiguration in Proxmox: zweite Bridge f\u00fcr isoLAN erstellen<\/h2>\n<p>F\u00fcr das isolierte Netz wird eine eigene, rein interne Linux-Bridge ohne Anbindung an eine physische Netzwerkkarte ben\u00f6tigt.<\/p>\n<ol start=\"1\" data-spread=\"false\">\n<li>In der Proxmox-Weboberfl\u00e4che in der linken Baumstruktur den betreffenden <strong>Node<\/strong> ausw\u00e4hlen (nicht &#8220;Datacenter&#8221;).<\/li>\n<li>Men\u00fcpunkt <strong>System \u2192 Network<\/strong> \u00f6ffnen.<\/li>\n<li>Oben auf <strong>Erstellen \u2192 Linux Bridge<\/strong> klicken.<\/li>\n<li>Im Dialog:\n<ul data-spread=\"false\">\n<li><strong>Name<\/strong>: <code dir=\"ltr\">isoLAN<\/code> (bzw. den n\u00e4chsten freien <code dir=\"ltr\">vmbrX<\/code>-Namen, falls die Proxmox-Version keine frei w\u00e4hlbaren Bridge-Namen erlaubt).<\/li>\n<li><strong>IPv4\/CIDR<\/strong>, <strong>Gateway<\/strong>: leer lassen \u2013 die Bridge selbst ben\u00f6tigt keine IP-Adresse, da nur OPNsense und die VMs darauf kommunizieren.<\/li>\n<li><strong>Bridge ports<\/strong>: <strong>leer lassen<\/strong>. Das ist der entscheidende Punkt: Ohne eingetragenen physischen Port ist die Bridge komplett vom restlichen Netzwerk isoliert und existiert nur virtuell innerhalb des Proxmox-Hosts.<\/li>\n<li>H\u00e4kchen bei <strong>VLAN aware<\/strong> ist nicht erforderlich, kann deaktiviert bleiben.<\/li>\n<li><strong>Erstellen<\/strong> klicken, danach oben den Button <strong>Konfiguration anwenden<\/strong> anklicken, damit die Bridge tats\u00e4chlich aktiv geschaltet wird.<\/li>\n<li>Kontrolle: Die neue Bridge erscheint in der Liste unter <strong>System \u2192 Network<\/strong> mit dem Status &#8220;Active&#8221;, aber ohne zugeordnete physische Schnittstelle.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><strong>Tipp:<\/strong> Da diese Bridge keinen Bridge-Port besitzt, kann sp\u00e4ter ausschlie\u00dflich \u00fcber das OPNsense-LAN-Interface auf dieses Netz zugegriffen werden \u2013 das ist gew\u00fcnscht und Grundlage der Isolation.<\/p>\n<div>\n<hr \/>\n<\/div>\n<h2>2. Proxmox-VM f\u00fcr OPNsense einrichten<\/h2>\n<ol start=\"1\" data-spread=\"false\">\n<li>Oben rechts <strong>Erstelle VM<\/strong> klicken.<\/li>\n<li><strong>Allgemein<\/strong>: <strong>Name<\/strong> und <strong>VM ID<\/strong> vergeben, z. B. <code dir=\"ltr\">OPN-GW-isoLAN<\/code>.<\/li>\n<li><strong>OS<\/strong>: <a href=\"https:\/\/opnsense.org\/download\/\" target=\"_blank\" rel=\"noopener\">OPNsense-ISO<\/a> als Installationsmedium ausw\u00e4hlen (vorher per <strong>Upload<\/strong> oder <strong>Download from URL<\/strong> unter <strong>local (Node) \u2192 ISO Images<\/strong> bereitgestellt), Typ: Linux \/ 7.x &#8211; 2.6 Kernel.<\/li>\n<li><strong>System<\/strong>: Standardwerte \u00fcbernehmen, BIOS kann bei OVMF\/UEFI oder SeaBIOS bleiben (SeaBIOS reicht f\u00fcr OPNsense).<\/li>\n<li><strong>Disks<\/strong>: mindestens 6 GB (Systempartition sollte mindestens 4 GB gro\u00df sein, da sonst f\u00fcr sp\u00e4tere Updates zu wenig Speicherplatz zur Verf\u00fcgung steht), Standard-Controller (VirtIO SCSI) beibehalten.<\/li>\n<li><strong>CPU<\/strong>: mindestens 2 Kerne, <strong>Typ: Host<\/strong><\/li>\n<li><strong>Speicher<\/strong>: mindestens 4096 MB, <strong>Ballooning Ger\u00e4t:<\/strong> Haken entfernen (deaktivieren)<\/li>\n<li><strong>Netzwerk<\/strong>: erste Netzwerkkarte konfigurieren:\n<ul data-spread=\"false\">\n<li><strong>Bridge<\/strong>: <code dir=\"ltr\">vmbr0<\/code> (CoreLAN)<\/li>\n<li><strong>Model<\/strong>: VirtIO (paravirtualized)<\/li>\n<li><strong>Firewall:<\/strong> Haken entfernen (deaktivieren)<\/li>\n<\/ul>\n<\/li>\n<li>VM mit <strong>Best\u00e4tigen<\/strong> anlegen, aber <strong>noch nicht starten<\/strong>.<\/li>\n<li>Nach dem Anlegen: VM ausw\u00e4hlen \u2192 <strong>Hardware<\/strong> \u2192 <strong>Hinzuf\u00fcgen \u2192 Netzwerkkarte<\/strong>, zweite NIC hinzuf\u00fcgen:\n<ul data-spread=\"false\">\n<li><strong>Bridge<\/strong>: <code dir=\"ltr\">isoLAN<\/code><\/li>\n<li><strong>Model<\/strong>: VirtIO (paravirtualized)<\/li>\n<li><strong>Firewall:<\/strong> Haken entfernen (deaktivieren)<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>Wichtig: CoreLAN-NIC vor dem ersten Start vom Netz trennen<\/h3>\n<p>OPNsense installiert das LAN-Interface standardm\u00e4\u00dfig mit der IP <code dir=\"ltr\">192.168.1.1\/24<\/code> <strong>und aktivem DHCP-Server<\/strong>. Bliebe die CoreLAN-NIC w\u00e4hrend der Installation und Erstkonfiguration mit <code dir=\"ltr\">vmbr0<\/code> verbunden, k\u00f6nnte der OPNSense eigene DHCP-Server kurzzeitig parallel zum Router DHCP Server im CoreLAN aktiv werden und dort IP-Konflikte verursachen.<\/p>\n<p><strong>Vorgehen:<\/strong><\/p>\n<ol start=\"1\" data-spread=\"false\">\n<li>VM ausw\u00e4hlen \u2192 <strong>Hardware<\/strong>.<\/li>\n<li>Die Netzwerkkarte, die an <code dir=\"ltr\">vmbr0<\/code> h\u00e4ngt, per Doppelklick \u00f6ffnen.<\/li>\n<li>Haken bei <strong>&#8220;Erweitert&#8221;<\/strong> (neben dem OK Button) um erweiterte Optionen anzuzeigen.<\/li>\n<li>Option <strong>&#8220;Trennen&#8221;<\/strong> aktivieren (trennt die virtuelle NIC logisch vom Netzwerk, ohne sie zu entfernen) und mit <strong>OK<\/strong> best\u00e4tigen.<\/li>\n<li>Die NIC an <code dir=\"ltr\">isoLAN<\/code> kann verbunden bleiben, da diese Bridge ohnehin isoliert ist und keine Konfliktgefahr besteht.<\/li>\n<li>Diese Trennung bleibt bestehen, bis die Basiskonfiguration \u00fcber die Konsole (Abschnitt 4) abgeschlossen ist.<\/li>\n<\/ol>\n<div>\n<hr \/>\n<\/div>\n<h2>3. Installation von OPNsense<\/h2>\n<ol start=\"1\" data-spread=\"false\">\n<li>VM starten, <strong>Console<\/strong> \u00f6ffnen (noVNC oder xterm.js).<\/li>\n<li>Der Installer bootet automatisch ins Live-System.<\/li>\n<li>Login an der Konsole: <code dir=\"ltr\">installer<\/code> \/ <code dir=\"ltr\">opnsense<\/code><\/li>\n<li>Installations-Assistenten durchklicken:\n<ul data-spread=\"false\">\n<li>Tastaturlayout best\u00e4tigen bzw. ausw\u00e4hlen.<\/li>\n<li><strong>Other Modes &gt;&gt; Extended Installation<\/strong> ausw\u00e4hlen<\/li>\n<li><strong>Auto (ZFS)<\/strong> ausw\u00e4hlen (Voraussetzung f\u00fcr den Growfs-Mechanismus weiter unten sowie f\u00fcr automatische Boot-Environments bei k\u00fcnftigen Updates).<\/li>\n<li>Optionen ggf. anpassen und mit <strong>&gt;&gt;&gt; Install<\/strong> fortfahren<\/li>\n<li><strong>Select Virtual Device type:<\/strong> stripe<\/li>\n<li><strong>Virtuelle Disk ausw\u00e4hlen:<\/strong> (da0 &#8211; QEMU QEMU Harddisk)<\/li>\n<li>Folgenden Dialog mit <strong>YES<\/strong> best\u00e4tigen und Installation starten<\/li>\n<li>Nach Abschluss: Root-Passwort \u00e4ndern<\/li>\n<li><strong>Complete Install &#8211; Confirm and exit<\/strong> ausw\u00e4hlen.<\/li>\n<li>Vor dem erneuten Hochfahren die ISO-Datei aus der VM aush\u00e4ngen (<strong>Hardware \u2192 CD\/DVD Drive \u2192 Do not use any media<\/strong>), sonst startet der Installer erneut.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>Exkurs: Festplatte nachtr\u00e4glich vergr\u00f6\u00dfern (Growfs)<\/h3>\n<p>Falls die virtuelle Festplatte zu knapp bemessen wurde (z. B. f\u00fcr ein sp\u00e4teres Firmware-Update zu wenig freier Speicher), l\u00e4sst sich das bei einer OPNsense-Installation mit ZFS \u00fcber den eingebauten automatischen &#8220;Growfs&#8221;-Mechanismus nachtr\u00e4glich beheben, ohne Neuinstallation:<\/p>\n<ol start=\"1\" data-spread=\"false\">\n<li>VM in Proxmox <strong>herunterfahren<\/strong>.<\/li>\n<li>VM ausw\u00e4hlen \u2192 <strong>Hardware<\/strong> \u2192 die virtuelle Festplatte ausw\u00e4hlen \u2192 <strong>Disk Aktion \u2192 Gr\u00f6\u00dfe anpassen<\/strong> \u2192 Wert um die Disk vergr\u00f6\u00dfert werden soll eintragen, nicht Zielgr\u00f6\u00dfe.<\/li>\n<li>VM wieder <strong>starten<\/strong>, per Konsole oder SSH verbinden.<\/li>\n<li>In der OPNsense-Shell folgenden Befehl ausf\u00fchren, um eine &#8220;magische&#8221; Datei anzulegen, die den Mechanismus beim n\u00e4chsten Boot ausl\u00f6st:<br \/>\n<!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b319d531837647\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\ntouch \/.probe.for.growfs<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b319d531837647-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b319d531837647-1\"><span class=\"crayon-v\">touch<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">probe<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-st\">for<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">growfs<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<br \/>\nVM <strong>neu starten<\/strong>. Beim Boot erkennt OPNsense die Datei, vergr\u00f6\u00dfert automatisch die ZFS-Partition und den Pool und l\u00f6scht die Datei anschlie\u00dfend selbstst\u00e4ndig.<\/li>\n<li>Kontrolle nach dem Neustart:<br \/>\n<!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b31a3585208428\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\ndf -h<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b31a3585208428-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b31a3585208428-1\"><span class=\"crayon-v\">df<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">h<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<br \/>\nDer verf\u00fcgbare Speicherplatz f\u00fcr <code dir=\"ltr\">\/<\/code> sollte jetzt der neuen, gr\u00f6\u00dferen Festplattengr\u00f6\u00dfe entsprechen.<\/li>\n<\/ol>\n<div>\n<hr \/>\n<\/div>\n<h2>4. Basiskonfiguration \u00fcber die Proxmox-Konsole (Shell)<\/h2>\n<p>Nach dem Neustart bzw. Login (root\/opnsense bzw. vergebenes Passwort) landet man automatisch im textbasierten OPNsense-Hauptmen\u00fc. Da LAN und WAN f\u00fcr das oben beschriebene Szenario zu diesem Zeitpunkt noch nicht sinnvoll konfiguriert sind, erfolgt die gesamte Grundkonfiguration zun\u00e4chst ausschlie\u00dflich \u00fcber die Konsole.<\/p>\n<h3>4.1 Interfaces zuweisen<\/h3>\n<p>Men\u00fcpunkt <strong>1) Assign interfaces<\/strong> w\u00e4hlen:<\/p>\n<ul data-spread=\"false\">\n<li>&#8220;Do you want to configure LAGGs now?&#8221;: n (Link Aggregation wird in den meisten F\u00e4llen nicht ben\u00f6tigt)<\/li>\n<li>&#8220;Do you want to configure VLANs now?&#8221;: n (Virtuelle LANs werden nicht ben\u00f6tigt)<\/li>\n<li>&#8220;Enter the WAN interface name or &#8216;a&#8217; for auto-detection&#8221;: <code dir=\"ltr\">vtnet0<\/code> (CoreLAN-NIC)<\/li>\n<li>&#8220;Enter the LAN interface name&#8230;&#8221;: <code dir=\"ltr\">vtnet1<\/code> (isoLAN-Nic)<\/li>\n<li>&#8220;Enter the Optional interface 1 name&#8230;&#8221;: leer lassen (Enter)<\/li>\n<li>&#8220;Do you want to proceed? [y\/N]&#8221;: <code dir=\"ltr\">y<\/code><\/li>\n<\/ul>\n<p><strong>Hinweis:<\/strong> Welche NIC als <code dir=\"ltr\">vtnet0<\/code> bzw. <code dir=\"ltr\">vtnet1<\/code> erscheint, h\u00e4ngt von der Reihenfolge beim Anlegen in Proxmox ab. Im Zweifel beide MAC-Adressen unter <strong>Hardware<\/strong> in Proxmox mit der Anzeige an der Konsole abgleichen.<\/p>\n<h3>4.2 LAN-Interface (isoLAN) konfigurieren<\/h3>\n<p>Men\u00fcpunkt <strong>2) Set interface IP address<\/strong> \u2192 Interface <strong>1 (LAN)<\/strong> w\u00e4hlen.<\/p>\n<p>Diese Konfiguration kann auch mittels OPNSense WebUI erstellt werden<\/p>\n<ul data-spread=\"false\">\n<li>Enter the number of the interface to configure: 1 (LAN)<\/li>\n<li>Configure IPv4 address LAN interface via DHCP? [y\/N]: <code dir=\"ltr\"><strong>n<\/strong><\/code><br \/>\nBei Auswahl von DHCP w\u00fcrde OPNsense versuchen, selbst eine IP von einem DHCP-Server <em>innerhalb<\/em> des isoLAN-Netzes zu beziehen; da OPNsense hier aber selbst als DHCP-Server fungieren soll, erscheint bei versehentlicher DHCP-Auswahl anschlie\u00dfend auch keine DHCP-Server-Konfigurationsabfrage.<\/li>\n<li>IPv4-Adresse: <code dir=\"ltr\">192.168.10.1<\/code><\/li>\n<li>Subnetz-Bitcount: <code dir=\"ltr\">24<\/code><\/li>\n<li>Upstream-Gateway: leer lassen (Enter) \u2013 LAN-Interfaces besitzen kein Gateway.<\/li>\n<li>Configure IPv6 address LAN interface via WAN tracking: <code dir=\"ltr\"><strong>n<\/strong><\/code><\/li>\n<li>Configure IPv6 address LAN interface via DHCP6?: <code dir=\"ltr\"><strong>n<\/strong><\/code><\/li>\n<li>IPv6-Adresse: leer lassen (Enter)<\/li>\n<li>Do you want to enable the DHCP server on LAN? [y\/N]: <code dir=\"ltr\"><strong>y<\/strong><\/code> (nur nach o.g. Eingabe von fester IPv4-Adresse)\n<ul data-spread=\"false\">\n<li>Start-Adresse: <code dir=\"ltr\">192.168.10.10<\/code><\/li>\n<li>End-Adresse: <code dir=\"ltr\">192.168.10.200<\/code><\/li>\n<\/ul>\n<\/li>\n<li>Do you want to change the web GUI protocol from HTTPS to HTTP? [y\/N]: <code dir=\"ltr\"><strong>n<\/strong><\/code><\/li>\n<li>Do you want to generate a new self-signed web Gui certificate?\u00a0[y\/N]: <code dir=\"ltr\"><strong>y<\/strong><\/code><\/li>\n<li>Restore web GUI access defaults\u00a0[y\/N]: <code dir=\"ltr\"><strong>y<\/strong><\/code><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<p>Hinweis zur CIDR \/24: Mit Subnetz-Bitcount: 24 wird das Netz 192.168.10.0\/24 definiert (255.255.255.0). Das ergibt 254 nutzbare Host-Adressen (.1 bis .254). Der DHCP-Pool .10\u2013.200 l\u00e4sst Platz f\u00fcr statische IPs (Gateway .1, Server .2\u2013.9, Reserve .201\u2013.254).<\/p>\n<div class=\"flex-auto w-0 pl-1 relative\">\n<div>\n<h3>4.3 WAN-Interface (CoreLAN) konfigurieren<\/h3>\n<p>Men\u00fcpunkt <strong>2) Set interface IP address<\/strong> \u2192 Interface <strong>2 (WAN)<\/strong> w\u00e4hlen.<\/p>\n<p>F\u00fcr dieses Szenario wird eine <strong>feste WAN-Adresse<\/strong> verwendet. Dadurch bleibt die OPNsense-WebUI, die sp\u00e4tere Route und die gesamte Dokumentation unter derselben Adresse erreichbar.<\/p>\n<ul data-spread=\"false\">\n<li>Enter the number of the interface to configure: 2 (WAN)<\/li>\n<li>Configure IPv4 address WAN interface via DHCP? [y\/N]: <code dir=\"ltr\"><strong>n<\/strong><\/code><\/li>\n<li>IPv4-Adresse: <code dir=\"ltr\">192.168.1.91<\/code><\/li>\n<li>Subnetz-Bitcount: <code dir=\"ltr\">24<\/code><\/li>\n<li>Upstream-Gateway: <code dir=\"ltr\">192.168.1.1<\/code><\/li>\n<li>&#8220;Do you want to use the gateway as the IPv4 name server, too?&#8221;: <code dir=\"ltr\">y<\/code><\/li>\n<li>IPv6 via DHCP6: <code dir=\"ltr\">n<\/code><\/li>\n<li>F\u00fcr WAN erscheint <strong>keine<\/strong> DHCP-Server-Abfrage \u2013 OPNsense bietet auf WAN-Interfaces grunds\u00e4tzlich keinen DHCP-Server an. Die Anforderung &#8220;DHCP von OPNsense f\u00fcr CoreLAN darf nicht aktiv sein&#8221; ist damit strukturell automatisch erf\u00fcllt.<\/li>\n<li>&#8220;Change web GUI protocol HTTPS\u2192HTTP?&#8221;: <code dir=\"ltr\">n<\/code><\/li>\n<li>&#8220;Generate new self-signed web GUI certificate?&#8221;: <code dir=\"ltr\">y<\/code><\/li>\n<li>&#8220;Restore web GUI access defaults?&#8221;: <code dir=\"ltr\">y<\/code><\/li>\n<\/ul>\n<p><strong>Alternative:<\/strong> Statt einer festen Adresse kann das WAN-Interface auch per DHCP eine Adresse vom Router beziehen. F\u00fcr die weiteren Schritte muss dann \u00fcberall die tats\u00e4chlich vom Router vergebene WAN-Adresse verwendet werden. Eine feste Adresse wie <code dir=\"ltr\">192.168.1.91<\/code> ist f\u00fcr dieses Tutorial jedoch \u00fcbersichtlicher.<\/p>\n<h3>4.4 CoreLAN-NIC wieder verbinden<\/h3>\n<p>Erst jetzt, nach abgeschlossener Basiskonfiguration, die zuvor getrennte NIC wieder aktivieren:<\/p>\n<ol start=\"1\" data-spread=\"false\">\n<li>In Proxmox: VM \u2192 <strong>Hardware<\/strong> \u2192 die CoreLAN-NIC \u00f6ffnen.<\/li>\n<li>Option <strong>&#8220;Trennen&#8221;<\/strong> wieder deaktivieren, mit <strong>OK<\/strong> best\u00e4tigen.<\/li>\n<\/ol>\n<p>Die Konsole zeigt danach die finale \u00dcbersicht:<\/p>\n<ul data-spread=\"false\">\n<li>LAN (vtnet1) -&gt; v4: 192.168.10.1\/24<\/li>\n<li>WAN (vtnet0) -&gt; v4: 192.168.1.91\/24 (oder falls DHCP gew\u00e4hlt, IP aus CoreLAN Adressbereich)<\/li>\n<\/ul>\n<div>\n<hr \/>\n<\/div>\n<h2>5. Management-VM (Linux-Live-Image) f\u00fcr die weitere WebUI-Konfiguration<\/h2>\n<p>Die OPNsense-WebUI ist nach der Grundkonfiguration ausschlie\u00dflich \u00fcber das LAN-Interface (IsoLAN) erreichbar, da nur dort eine Default-Allow-Regel existiert, die auch Zugriff auf die Firewall selbst einschlie\u00dft. Auf dem WAN-Interface (CoreLAN) existiert daf\u00fcr zun\u00e4chst keine Regel.<\/p>\n<h3>\u00a0Tempor\u00e4re Management-VM starten<\/h3>\n<ul data-spread=\"false\">\n<li>In Proxmox eine neue, schlanke VM anlegen (z. B. mit einem Linux-Live-Image mit Desktopumgebung und Browser, etwa einer g\u00e4ngigen Live-Distribution).<\/li>\n<li>Netzwerkkarte dieser VM an die Bridge <code dir=\"ltr\"><strong>isoLAN<\/strong><\/code> anbinden.<\/li>\n<li>VM starten, Live-System bootet direkt in eine grafische Desktopumgebung, ohne Installation.<\/li>\n<li>Netzwerkverbindung pr\u00fcfen: Die VM sollte automatisch \u00fcber DHCP eine Adresse aus dem Bereich <code dir=\"ltr\">192.168.10.10<\/code>\u2013<code dir=\"ltr\">192.168.10.200<\/code> erhalten (bezogen vom OPNsense-DHCP-Server).<\/li>\n<li>Browser \u00f6ffnen und <code dir=\"ltr\">http:\/\/192.168.10.1<\/code> (oder https, wenn konfiguriert)\u00a0 aufrufen.<\/li>\n<li>Zertifikatswarnung best\u00e4tigen, wenn https konfiguriert (selbstsigniertes Zertifikat).<\/li>\n<li>Login mit <code dir=\"ltr\">root<\/code> und dem zuvor an der Konsole vergebenen Passwort.<\/li>\n<\/ul>\n<hr \/>\n<h2>6.0 WebUI-Zugriff aus dem WAN (CoreLAN) einrichten<\/h2>\n<p>Um den Traffic aus dem CoreLAN (WAN-Interface von OPNsense) bis zur Firewall weiterzuleiten, muss unter <strong>Schnittstellen \u2192 WAN (CoreLAN)<\/strong> die Option <strong>\u201ePrivate Netzwerke blockieren\u201c<\/strong> deaktiviert werden. Da es sich bei <code dir=\"ltr\">192.168.1.0\/24<\/code> um ein privates RFC1918-Netz handelt, w\u00fcrde OPNsense diesen Traffic andernfalls bereits durch eine automatisch generierte Regel vor der Verarbeitung der eigenen Firewall-Regeln verwerfen. <strong>\u201eBogon-Netzwerke blockieren\u201c<\/strong> kann hingegen aktiviert bleiben.<\/p>\n<p>Damit die WebUI k\u00fcnftig auch direkt aus dem CoreLAN \u00fcber das WAN-Interface erreichbar ist und die tempor\u00e4re Management-VM nicht mehr ben\u00f6tigt wird, wird anschlie\u00dfend eine entsprechende Firewall-Regel f\u00fcr das CoreLAN-Interface angelegt.<\/p>\n<p>Die Firewall-Regeln werden zentral unter <strong>Firewall \u2192 Regeln<\/strong> verwaltet. Eine neue Regel wird \u00fcber das rote <strong>&#8220;+&#8221;<\/strong>-Symbol unten rechts in der Liste angelegt, Der Bearbeiten-Dialog l\u00e4sst sich \u00fcber den Schalter <strong>&#8220;Erweiterter Modus&#8221;<\/strong> oben links um zus\u00e4tzliche Felder erweitern.<\/p>\n<p><strong>Men\u00fc: Firewall \u2192 Regeln<\/strong>, \u00fcber &#8220;+&#8221; neue Regel:<\/p>\n<ul data-spread=\"false\">\n<li style=\"list-style-type: none;\">\n<ul data-spread=\"false\">\n<li><strong>Aktiviert<\/strong>: H\u00e4kchen gesetzt<\/li>\n<li><strong>Beschreibung<\/strong>: &#8220;Allow WAN \/ CoreLAN -&gt; OPN Webui&#8221;<\/li>\n<li><strong>Schnittstelle<\/strong>: WAN (CoreLAN)<\/li>\n<li><strong>Schnell:<\/strong> Haken setzen<\/li>\n<li><strong>Aktion<\/strong>: Erlauben<\/li>\n<li><strong>Richtung<\/strong>: Eingehend<\/li>\n<li><strong>Version<\/strong>: IPv4<\/li>\n<li><strong>Protokoll<\/strong>: beliebig \u2013 damit ist der vollst\u00e4ndige Zugriff vom CoreLAN auf die Firewall erlaubt.<\/li>\n<li><strong>Quelle:<\/strong> WAN network<\/li>\n<li><strong>Quellport<\/strong>: beliebig \u2013 damit ist der vollst\u00e4ndige Zugriff vom CoreLAN auf die Firewall erlaubt.<\/li>\n<li><strong>Ziel:<\/strong> Diese Firewall<\/li>\n<li><strong>Zielport:<\/strong> beliebig<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><strong>Zielport<\/strong><\/p>\n<p>Eingabe <strong>Speichern<\/strong> und sicherstellen, dass Regel an erster Stelle in der Regelliste steht, dann mit <strong>Anwenden<\/strong> \u00c4nderungen laden. Ab diesem Zeitpunkt ist die WebUI unter <code dir=\"ltr\">https:\/\/192.168.1.91<\/code> auch direkt aus dem CoreLAN erreichbar, die Management-VM wird nicht mehr ben\u00f6tigt.<\/p>\n<p><strong>Hinweis:<\/strong> Der vollst\u00e4ndige Zugriff ist f\u00fcr dieses Tutorial ausdr\u00fccklich gew\u00fcnscht. Wenn stattdessen nur einzelne Dienste freigegeben werden sollen, kann die Regel gezielt auf das ben\u00f6tigte Protokoll und den jeweiligen Zielport eingeschr\u00e4nkt werden, z. B. TCP auf den konfigurierten WebUI-Port.<\/p>\n<hr \/>\n<h2>7. IPv6 im LAN (isoLAN) deaktivieren<\/h2>\n<p>Aus Gr\u00fcnden der <strong>\u00dcbersichtlichkeit und Sicherheit<\/strong> wird IPv6 im isoLAN nicht verwendet. Dadurch beschr\u00e4nkt sich die Netzwerkkonfiguration auf IPv4 und es m\u00fcssen keine zus\u00e4tzlichen IPv6-Routen oder Firewall-Regeln ber\u00fccksichtigt werden. Hierzu wird unter <strong>Schnittstellen \u2192 LAN(isoLAN)<\/strong> bei <strong>IPv6-Konfigurationstype<\/strong> die Einstellung <strong>Keine<\/strong> ausgew\u00e4hlt und anschlie\u00dfend die \u00c4nderung \u00fcbernommen. Zus\u00e4tzlich ist sicherzustellen, dass f\u00fcr das isoLAN keine <strong>DHCPv6-Dienste<\/strong> oder <strong>Router Advertisements<\/strong> aktiviert sind.<\/p>\n<p>Die Deaktivierung von IPv6 reduziert damit den Konfigurationsaufwand und verhindert, dass IPv6-Verbindungen die f\u00fcr das isoLAN definierten IPv4-Firewallregeln umgehen.<\/p>\n<hr \/>\n<h2>8. Abschlie\u00dfende Konfiguration<\/h2>\n<p>F\u00fcr die Kommunikation zwischen CoreLAN und isoLAN sind <strong>Routing und Firewall-Regeln gleicherma\u00dfen erforderlich<\/strong>. Eine Freigabe durch die Firewall allein stellt noch keine funktionierende Verbindung her. Da <code>192.168.10.0\/24<\/code> ein f\u00fcr CoreLAN-Clients fremdes Subnetz ist, senden die Clients Pakete f\u00fcr dieses Zielnetz standardm\u00e4\u00dfig an ihr <strong>Default-Gateway<\/strong>. In diesem Beispiel ist dies die FRITZ!Box mit der IP-Adresse <code>192.168.1.1<\/code>. Kennt die FRITZ!Box keine Route zum Netzwerk <code>192.168.10.0\/24<\/code>, kann sie die Pakete nicht gezielt an die OPNsense-Firewall weiterleiten. Das Paket erreicht OPNsense in diesem Fall nicht und kann dort folglich auch durch keine Firewall-Regel verarbeitet werden. F\u00fcr den Zugriff von CoreLAN-Clients auf Systeme im isoLAN m\u00fcssen daher zwei Voraussetzungen erf\u00fcllt sein:<\/p>\n<ol>\n<li><strong>Routing:<\/strong> Der CoreLAN-Client bzw. der zust\u00e4ndige Router muss wissen, dass das Netzwerk <code>192.168.10.0\/24<\/code> \u00fcber OPNsense erreichbar ist.<\/li>\n<li><strong>Firewall:<\/strong> OPNsense muss den anschlie\u00dfend eintreffenden Datenverkehr aus dem CoreLAN zum isoLAN durch eine entsprechende Firewall-Regel erlauben.<\/li>\n<\/ol>\n<p>Erst wenn das Routing den Datenverkehr zur OPNsense-Firewall f\u00fchrt, kann diese anhand ihrer Regeln entscheiden, ob die gew\u00fcnschte Verbindung zugelassen oder blockiert wird. Das Routing bestimmt somit den <strong>Weg des Pakets<\/strong>, w\u00e4hrend die Firewall die <strong>Zul\u00e4ssigkeit der Verbindung<\/strong> kontrolliert.<\/p>\n<h3>8.1 Route im CoreLAN einrichten<\/h3>\n<p>Da <code dir=\"ltr\">192.168.10.0\/24<\/code> ein f\u00fcr CoreLAN-Clients fremdes Subnetz ist, schicken Clients ihre Pakete dorthin standardm\u00e4\u00dfig an ihr Default-Gateway, in diesem Beispiel die FRITZ!Box <code dir=\"ltr\">192.168.1.1<\/code>. Kennt der Router das Netz <code dir=\"ltr\">192.168.10.0\/24<\/code> nicht, kommt das Paket bei OPNsense nie an.<\/p>\n<p>Dazu muss <strong>eine<\/strong> der folgenden Varianten eingerichtet werden:<\/p>\n<p><strong>Option A \u2013 zentral im Router (empfohlen):<\/strong><\/p>\n<p>Statische Route im CoreLAN-Router (<code dir=\"ltr\">192.168.1.1<\/code>) eintragen. Sie gilt anschlie\u00dfend f\u00fcr alle CoreLAN-Clients.<\/p>\n<ul data-spread=\"false\">\n<li><strong>Netzwerk:<\/strong> <code dir=\"ltr\">192.168.10.0<\/code><\/li>\n<li><strong>Subnetzmaske:<\/strong> <code dir=\"ltr\">255.255.255.0<\/code><\/li>\n<li><strong>Gateway:<\/strong> WAN-Adresse der OPNsense, <code dir=\"ltr\">192.168.1.91<\/code><\/li>\n<\/ul>\n<p><strong>Option B \u2013 auf jedem Client:<\/strong><\/p>\n<p>Route auf jedem einzelnen CoreLAN-Client einrichten:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b31a6540993862\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo ip route add 192.168.10.0\/24 via 192.168.1.91<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b31a6540993862-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b31a6540993862-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">ip <\/span><span class=\"crayon-e\">route <\/span><span class=\"crayon-i\">add<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">192.168.10.0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">24<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">via<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">192.168.1.91<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Diese Route ist bei <code dir=\"ltr\">ip route add<\/code> standardm\u00e4\u00dfig nicht persistent und muss ggf. dauerhaft \u00fcber die jeweilige Netzwerkverwaltung eingerichtet werden.<\/p>\n<p><strong>Ohne diese Route ist der Zugriff von CoreLAN auf isoLAN trotz korrekter OPNsense-Firewall-Regel nicht m\u00f6glich.<\/strong><\/p>\n<h3>8.2 Firewall-Regeln f\u00fcr WAN (CoreLAN)<\/h3>\n<p><strong>Men\u00fc: Firewall \u2192 Regeln<\/strong>, jeweils neue Regel \u00fcber &#8220;+&#8221; mit <strong>Schnittstelle: CoreLAN<\/strong>:<\/p>\n<table style=\"width: 99.9284%;\">\n<tbody>\n<tr>\n<td style=\"width: 1.72043%;\">#<\/td>\n<td style=\"width: 7.16846%;\">Aktion<\/td>\n<td style=\"width: 3.65591%;\">NIC<\/td>\n<td style=\"width: 6.30824%;\">Version<\/td>\n<td style=\"width: 7.02509%;\">Protokoll<\/td>\n<td style=\"width: 15.0538%;\">Quelle<\/td>\n<td style=\"width: 11.3262%;\">Quellport<\/td>\n<td style=\"width: 12.7599%;\">Ziel<\/td>\n<td style=\"width: 8.8172%;\">Zielport<\/td>\n<td style=\"width: 26.0932%;\">Zweck<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 1.72043%;\">1<\/td>\n<td style=\"width: 7.16846%;\">Erlauben<\/td>\n<td style=\"width: 3.65591%;\">WAN<\/td>\n<td style=\"width: 6.30824%;\">IPv4<\/td>\n<td style=\"width: 7.02509%;\">beliebig<\/td>\n<td style=\"width: 15.0538%;\">WAN network (CoreLAN)<\/td>\n<td style=\"width: 11.3262%;\">beliebig<\/td>\n<td style=\"width: 12.7599%;\">Diese Firewall<\/td>\n<td style=\"width: 8.8172%;\">beliebig \/ 443<\/td>\n<td style=\"width: 26.0932%;\">WebUI-Zugriff aus CoreLAN erlauben (Regel aus 5.2)<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 1.72043%;\">2<\/td>\n<td style=\"width: 7.16846%;\">Erlauben<\/td>\n<td style=\"width: 3.65591%;\">WAN<\/td>\n<td style=\"width: 6.30824%;\">IPv4<\/td>\n<td style=\"width: 7.02509%;\">beliebig<\/td>\n<td style=\"width: 15.0538%;\">beliebig<\/td>\n<td style=\"width: 11.3262%;\">beliebig<\/td>\n<td style=\"width: 12.7599%;\">LAN network (isoLAN)<\/td>\n<td style=\"width: 8.8172%;\">beliebig<\/td>\n<td style=\"width: 26.0932%;\">Zugriff auf isoLAN Netzwerk erlauben<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Men\u00fc: Firewall \u2192 Regeln<\/strong>, \u00fcber &#8220;+&#8221; neue Regel:<\/p>\n<ul data-spread=\"false\">\n<li><strong>Aktiviert<\/strong>: H\u00e4kchen gesetzt<\/li>\n<li><strong>Beschreibung<\/strong>: &#8220;ALLOW CoreLAN =&gt; isoLAN&#8221;<\/li>\n<li><strong>Schnittstelle<\/strong>: WAN (CoreLAN)<\/li>\n<li><strong>Schnell:<\/strong> Haken setzen<\/li>\n<li><strong>Aktion<\/strong>: Erlauben<\/li>\n<li><strong>Richtung<\/strong>: Eingehend<\/li>\n<li><strong>Version<\/strong>: IPv4<\/li>\n<li><strong>Protokoll<\/strong>: beliebig \u2013 vollst\u00e4ndiger Zugriff aller Protokolle von WAN (CoreLAN) nach LAN (isoLAN)<\/li>\n<li><strong>Quelle<\/strong>: beliebig \u2013 vollst\u00e4ndiger Zugriff von allen IP Adressen von WAN (CoreLAN) nach LAN (isoLAN)<\/li>\n<li><strong>Ziel<\/strong>: LAN network (isoLAN)<\/li>\n<li><strong>Quellport: <\/strong>beliebig \u2013 vollst\u00e4ndiger Zugriff aller Protokolle von WAN (CoreLAN) nach LAN (isoLAN)<\/li>\n<li><strong>Ziel:<\/strong> Diese Firewall<\/li>\n<li><strong>Zielport: <\/strong>beliebig \u2013 vollst\u00e4ndiger Zugriff aller Protokolle von WAN (CoreLAN) nach LAN (isoLAN)<\/li>\n<\/ul>\n<p>Eingabe <strong>Speichern<\/strong> und sicherstellen, dass Regel an zweiter Stelle in der Regelliste steht, dann mit <strong>Anwenden<\/strong> \u00c4nderungen laden. Damit werden Pakete aus dem WAN\u00a0 Netzwerk (CoreLAN) anhand der statischen Route (6.1) ins LAN Netzwerk (isoLAN) zugestellt.<\/p>\n<h3>8.3 Anti-Lockout-Regel deaktivieren<\/h3>\n<p class=\"isSelectedEnd\">OPNsense erstellt f\u00fcr das als <strong>LAN<\/strong> zugewiesene Interface \u2013 in diesem Aufbau das <strong>isoLAN<\/strong> \u2013 automatisch eine <strong>Anti-Lockout-Regel<\/strong>, die den Zugriff auf die Firewall unabh\u00e4ngig von eigenen Firewall-Regeln erlaubt. Da diese Regel vor den eigenen Regeln ausgewertet wird, w\u00fcrde eine Sperrregel f\u00fcr die Firewall Dienste aus dem isoLAN nicht greifen. Da der administrative Zugriff auf die OPNsense-WebUI bereits \u00fcber das CoreLAN eingerichtet ist (siehe Abschnitt 5.2), kann die Anti-Lockout-Regel f\u00fcr das isoLAN deaktiviert werden:<\/p>\n<p><strong>Men\u00fc: Firewall \u2192 Einstellungen \u2192 Erweitert<\/strong><\/p>\n<ul>\n<li><strong>Anti-Aussperrregel deaktivieren: <\/strong>Haken setzen<\/li>\n<\/ul>\n<p>Eingabe <strong>Speichern<\/strong><\/p>\n<p><strong>Hinweis: <\/strong>Sollte man sich danach versehentlich aus der WebUI aussperren, bleibt die Proxmox-VM-Konsole als Fallback erhalten \u2013 dort l\u00e4sst sich \u00fcber das Konsolenmen\u00fc (z. B. Option 1) Assign interfaces oder 13) Restore a backup) wieder eingreifen.<\/p>\n<h3>8.4 Firewall-Regeln f\u00fcr LAN (isoLAN)<\/h3>\n<p>Die bereits in den Punkten <strong>6 und 8.2 <\/strong>erstellten Regeln (1 \/ 2) und Routen <strong>8.1<\/strong> steuern die Kommunikation zwischen dem <strong>WAN-Netzwerk (CoreLAN), <\/strong>der <strong>Firewall<\/strong> und dem <strong>LAN-Netzwerk (isoLAN)<\/strong>. Standardm\u00e4\u00dfig hat das <strong>LAN-Netzwerk uneingeschr\u00e4nkten Zugriff auf das WAN-Netzwerk <\/strong>sowie die<strong> Firewall <\/strong>selbst. In diesem Fall ist dies jedoch <strong>nicht gew\u00fcnscht<\/strong>, da das <strong>WAN-Netzwerk (CoreLAN) das sichere Netz<\/strong> darstellt, w\u00e4hrend das <strong>LAN-Netzwerk (isoLAN) als unsicher<\/strong> eingestuft wird. Da der Zugriff vom <strong>WAN-Netzwerk auf die Dienste der Firewall standardm\u00e4\u00dfig gesperrt<\/strong> ist, sind f\u00fcr den Betrieb des <strong>OPNsense-DHCP- und DNS-Servers<\/strong> drei weiter Regeln (3,4,5) erforderlich.<\/p>\n<ul>\n<li><strong>Regel 3 und 4<\/strong> gew\u00e4hren dem <strong>WAN-Netzwerk Zugriff auf den OPNsense DHCP- und DNS-Server<\/strong>.<\/li>\n<li><strong>Regel 5<\/strong> sperrt den <strong>WAN Zugriff auf alle anderen Dienste<\/strong>, sodass <strong>nur der DNS- und DHCP-Server von OPNsense im WAN-Netzwerk erreichbar<\/strong> sind.<\/li>\n<li><strong>Regel 6 und 7 <\/strong>sperren\u00a0den\u00a0<strong>WAN-Netzwerk Zugriff auf gesch\u00fctzte Netze.<\/strong><\/li>\n<li><strong>Regel 8 und 9<\/strong> gew\u00e4hren dem <strong>WAN-Netzwerk Zugriff auf das Internet<\/strong>\u00a0(Regel werden meist automatisch erstellt).<\/li>\n<\/ul>\n<p><strong>Men\u00fc: Firewall \u2192 Regeln<\/strong>, jeweils neue Regel \u00fcber &#8220;+&#8221; mit <strong>Schnittstelle: isoLAN<\/strong>. Reihenfolge von oben nach unten:<\/p>\n<table style=\"width: 100%;\">\n<tbody>\n<tr>\n<td style=\"width: 1.87126%;\">#<\/td>\n<td style=\"width: 6.66168%;\">Aktion<\/td>\n<td style=\"width: 2.54491%;\">NIC<\/td>\n<td style=\"width: 2.54491%;\">Version<\/td>\n<td style=\"width: 6.21258%;\">Protokoll<\/td>\n<td style=\"width: 13.8473%;\">Quelle<\/td>\n<td style=\"width: 11.527%;\">Quellport<\/td>\n<td style=\"width: 11.527%;\">Ziel<\/td>\n<td style=\"width: 7.70958%;\">Zielport<\/td>\n<td style=\"width: 35.479%;\">Zweck<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 1.87126%;\">1<\/td>\n<td style=\"width: 6.66168%;\">Erlauben<\/td>\n<td style=\"width: 2.54491%;\">WAN<\/td>\n<td style=\"width: 2.54491%;\">IPv4<\/td>\n<td style=\"width: 6.21258%;\">beliebig<\/td>\n<td style=\"width: 13.8473%;\">WAN network (CoreLAN)<\/td>\n<td style=\"width: 11.527%;\">beliebig<\/td>\n<td style=\"width: 11.527%;\">Diese Firewall<\/td>\n<td style=\"width: 7.70958%;\">beliebig \/ 443<\/td>\n<td style=\"width: 35.479%;\">WebUI-Zugriff aus CoreLAN erlauben (Regel aus 5.2)<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 1.87126%;\">2<\/td>\n<td style=\"width: 6.66168%;\">Erlauben<\/td>\n<td style=\"width: 2.54491%;\">WAN<\/td>\n<td style=\"width: 2.54491%;\">IPv4<\/td>\n<td style=\"width: 6.21258%;\">beliebig<\/td>\n<td style=\"width: 13.8473%;\">beliebig<\/td>\n<td style=\"width: 11.527%;\">beliebig<\/td>\n<td style=\"width: 11.527%;\">LAN network (isoLAN)<\/td>\n<td style=\"width: 7.70958%;\">beliebig<\/td>\n<td style=\"width: 35.479%;\">Zugriff auf isoLAN Netzwerk erlauben<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 1.87126%;\">3<\/td>\n<td style=\"width: 6.66168%;\">Erlauben<\/td>\n<td style=\"width: 2.54491%;\">LAN<\/td>\n<td style=\"width: 2.54491%;\">IPv4<\/td>\n<td style=\"width: 6.21258%;\">TCP\/UDP<\/td>\n<td style=\"width: 13.8473%;\">isoLAN network<\/td>\n<td style=\"width: 11.527%;\">beliebig<\/td>\n<td style=\"width: 11.527%;\">Diese Firewall<\/td>\n<td style=\"width: 7.70958%;\">53<\/td>\n<td style=\"width: 35.479%;\">DNS-Aufl\u00f6sung \u00fcber OPNsense-Resolver<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 1.87126%;\">4<\/td>\n<td style=\"width: 6.66168%;\">Erlauben<\/td>\n<td style=\"width: 2.54491%;\">LAN<\/td>\n<td style=\"width: 2.54491%;\">IPv4<\/td>\n<td style=\"width: 6.21258%;\">UDP<\/td>\n<td style=\"width: 13.8473%;\">isoLAN network<\/td>\n<td style=\"width: 11.527%;\">beliebig<\/td>\n<td style=\"width: 11.527%;\">Diese Firewall<\/td>\n<td style=\"width: 7.70958%;\">67<\/td>\n<td style=\"width: 35.479%;\">DHCP-Anfragen an OPNsense<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 1.87126%;\">5<\/td>\n<td style=\"width: 6.66168%;\">Blockieren<\/td>\n<td style=\"width: 2.54491%;\">LAN<\/td>\n<td style=\"width: 2.54491%;\">IPv4<\/td>\n<td style=\"width: 6.21258%;\">beliebig<\/td>\n<td style=\"width: 13.8473%;\">isoLAN network<\/td>\n<td style=\"width: 11.527%;\">beliebig<\/td>\n<td style=\"width: 11.527%;\">Diese Firewall<\/td>\n<td style=\"width: 7.70958%;\">beliebig<\/td>\n<td style=\"width: 35.479%;\">Rest des Zugriffs auf die Firewall selbst sperren (WebUI, SSH, Ping etc.)<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 1.87126%;\">6<\/td>\n<td style=\"width: 6.66168%;\">Blockieren<\/td>\n<td style=\"width: 2.54491%;\">LAN<\/td>\n<td style=\"width: 2.54491%;\">IPv4<\/td>\n<td style=\"width: 6.21258%;\">beliebig<\/td>\n<td style=\"width: 13.8473%;\">isoLAN network<\/td>\n<td style=\"width: 11.527%;\">beliebig<\/td>\n<td style=\"width: 11.527%;\">CoreLAN network<\/td>\n<td style=\"width: 7.70958%;\">beliebig<\/td>\n<td style=\"width: 35.479%;\">CoreLAN komplett sperren<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 1.87126%;\">7<\/td>\n<td style=\"width: 6.66168%;\">Blockieren<\/td>\n<td style=\"width: 2.54491%;\">LAN<\/td>\n<td style=\"width: 2.54491%;\">IPv4<\/td>\n<td style=\"width: 6.21258%;\">beliebig<\/td>\n<td style=\"width: 13.8473%;\">isoLAN network<\/td>\n<td style=\"width: 11.527%;\">beliebig<\/td>\n<td style=\"width: 11.527%;\">Einzelner Host oder Netzwerk: 192.168.2.0\/24<\/td>\n<td style=\"width: 7.70958%;\">beliebig<\/td>\n<td style=\"width: 35.479%;\">Beispiel f\u00fcr ein weiteres, mit CoreLAN verbundenes Netz (z. B. VPN)<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 1.87126%;\">8<\/td>\n<td style=\"width: 6.66168%;\">Erlauben<\/td>\n<td style=\"width: 2.54491%;\">LAN<\/td>\n<td style=\"width: 2.54491%;\">IPv4<\/td>\n<td style=\"width: 6.21258%;\">beliebig<\/td>\n<td style=\"width: 13.8473%;\">isoLAN network<\/td>\n<td style=\"width: 11.527%;\">beliebig<\/td>\n<td style=\"width: 11.527%;\">beliebig<\/td>\n<td style=\"width: 7.70958%;\">beliebig<\/td>\n<td style=\"width: 35.479%;\">restlicher IPv4-Traffic = Internetzugriff (automatisch angelegt)<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 1.87126%;\">9<\/td>\n<td style=\"width: 6.66168%;\">Erlauben<\/td>\n<td style=\"width: 2.54491%;\">LAN<\/td>\n<td style=\"width: 2.54491%;\">IPv6<\/td>\n<td style=\"width: 6.21258%;\">beliebig<\/td>\n<td style=\"width: 13.8473%;\">isoLAN network<\/td>\n<td style=\"width: 11.527%;\">beliebig<\/td>\n<td style=\"width: 11.527%;\">beliebig<\/td>\n<td style=\"width: 7.70958%;\">beliebig<\/td>\n<td style=\"width: 35.479%;\">restlicher IPv6-Traffic = Internetzugriff (automatisch angelegt)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2026\/08\/OPNSense_isoLAN_Config.jpg\" data-src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2026\/08\/OPNSense_isoLAN_Config.jpg\" data-thumb=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2026\/08\/OPNSense_isoLAN_Config.jpg\" class=\"ml-lightbox-enabled\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8851 size-full\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2026\/08\/OPNSense_isoLAN_Config.jpg\" alt=\"\" width=\"1588\" height=\"1054\" srcset=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2026\/08\/OPNSense_isoLAN_Config.jpg 1588w, https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2026\/08\/OPNSense_isoLAN_Config-300x199.jpg 300w, https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2026\/08\/OPNSense_isoLAN_Config-1024x680.jpg 1024w, https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2026\/08\/OPNSense_isoLAN_Config-768x510.jpg 768w, https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2026\/08\/OPNSense_isoLAN_Config-1536x1019.jpg 1536w, https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2026\/08\/OPNSense_isoLAN_Config-600x398.jpg 600w\" sizes=\"auto, (max-width: 1588px) 100vw, 1588px\" \/><\/a><\/p>\n<p>Um nicht jedes private Netzwerk (Regeln 6\/7) einzeln in der Firewall konfigurieren zu m\u00fcssen, k\u00f6nnen mithilfe der passenden <strong>Netzwerkmaske (CIDR)<\/strong> ganze private IP-Bereiche zusammengefasst und gesperrt werden. Die Einstellung erfolgt \u00fcber die <strong>Ziel-IP bzw. das Zielnetzwerk<\/strong> der Firewall-Regel.<\/p>\n<ul>\n<li><strong>192.168.1.0\/24<\/strong> \u2192 192.168.1.0\u2013192.168.1.255 (<strong>256 Adressen<\/strong>)<\/li>\n<li><strong>192.168.0.0\/16<\/strong> \u2192 192.168.0.0\u2013192.168.255.255 (<strong>65.536 Adressen<\/strong>)<\/li>\n<\/ul>\n<p><strong>Wichtig zur Richtung:<\/strong> Bei allen Regeln muss die <strong>Richtung<\/strong> auf <strong>&#8220;Eingehend&#8221;<\/strong> stehen (Traffic, der auf dem isoLAN-Interface <em>ankommt<\/em>), nicht &#8220;Ausgehend&#8221;. Eine versehentlich auf &#8220;Ausgehend&#8221; gestellte Regel matcht praktisch nie und wird von der darunterliegenden Allow-Regel \u00fcberdeckt.<\/p>\n<p><strong>Wichtig zur Reihenfolge:<\/strong> Die Blockierungsregeln (5-7) m\u00fcssen vor den Erlauben-Regeln f\u00fcr den Internetzugriff (8-9) stehen, da nach dem Prinzip &#8220;erste \u00dcbereinstimmung gewinnt&#8221; ausgewertet wird. Die Reihenfolge kann in der \u00dcbersicht bei Bedarf angepasst werden.<\/p>\n<p><strong>Hinweis bei mehreren Netzen innerhalb des CoreLAN (z. B. VPN):<\/strong> Existieren neben 192.168.1.0\/24 weitere, mit dem CoreLAN verbundene Netze (z. B. ein VPN-Netz wie 192.168.2.0\/24), sind diese von der Sperrung in Abschnitt 6.3, Regel 4 (&#8220;Blockieren, isoLAN \u2192 CoreLAN network&#8221;) <strong>nicht automatisch mit erfasst<\/strong> \u2013 es gibt keine automatische Sperre f\u00fcr &#8220;alles, was mit CoreLAN verbunden ist&#8221;. F\u00fcr jedes weitere Netz muss auf dem isoLAN-Interface eine eigene, zus\u00e4tzliche Blockierungsregel angelegt werden; ein konkretes Beispiel daf\u00fcr ist bereits als Regel 5 in der Tabelle in Abschnitt 6.2 enthalten (Blockieren, Ziel: Einzelner Host oder Netzwerk 192.168.2.0\/24, Beschreibung &#8220;Deny isoLAN =&gt; VPNLAN&#8221;).<\/p>\n<hr \/>\n<h2>9. Tipps, Hinweise und m\u00f6gliche Fehlerquellen<\/h2>\n<h3>Outbound-NAT ist f\u00fcr den Internetzugriff nicht grunds\u00e4tzlich erforderlich<\/h3>\n<p>F\u00fcr den Internetzugriff des isoLAN ist eine <strong>Outbound-NAT-Regel nicht zwingend erforderlich<\/strong>, sofern das \u00fcbergeordnete Netzwerk bzw. der Router eine entsprechende Route zum isoLAN kennt. In vielen typischen Heimnetzwerk-Szenarien ist diese Route jedoch nicht vorhanden.<\/p>\n<p>In diesem Fall kann OPNsense den Datenverkehr des isoLAN per <strong>Outbound NAT<\/strong> auf seine CoreLAN-Adresse (<code>192.168.1.91<\/code>) maskieren. Der Router im CoreLAN sieht dadurch ausschlie\u00dflich die Adresse der OPNsense-Firewall und ben\u00f6tigt keine eigene Route zum isoLAN.<\/p>\n<p>Unter <strong>Firewall \u2192 NAT \u2192 Quell-NAT<\/strong> kann hierf\u00fcr die automatische Erzeugung von Outbound-NAT-Regeln verwendet werden. OPNsense erstellt dabei automatisch eine Regel, die Verbindungen aus dem isoLAN (<code>192.168.10.0\/24<\/code>) beim Verlassen \u00fcber das CoreLAN\/WAN-Interface auf die entsprechende OPNsense-Adresse maskiert.<\/p>\n<p><strong>Hinweis:<\/strong> Ob Outbound NAT tats\u00e4chlich erforderlich ist, h\u00e4ngt vom vorhandenen Routing ab. Bei einer korrekt eingerichteten statischen Route zum isoLAN auf dem vorgelagerten Router kann darauf verzichtet werden.<\/p>\n<h3>Fehlerquelle: \u201eAntwort an\u201c (Reply-to)<\/h3>\n<p>Falls der Zugriff vom CoreLAN auf das isoLAN trotz korrekter Routing- und Firewall-Konfiguration nicht funktioniert, kann die OPNsense-Option <strong>\u201eAntwort an\u201c (Reply-to)<\/strong> die Ursache sein.<\/p>\n<p>OPNsense kann f\u00fcr Regeln auf dem CoreLAN-Interface standardm\u00e4\u00dfig das dort konfigurierte Gateway als festen R\u00fcckweg f\u00fcr Antwortpakete verwenden. In bestimmten Netzwerktopologien f\u00fchrt dies dazu, dass Antwortpakete nicht direkt an den anfragenden CoreLAN-Client zur\u00fcckgesendet werden.<\/p>\n<p>Zur Behebung kann bei der entsprechenden Firewall-Regel <strong>\u201eAntwort an\u201c \u2192 \u201eDeaktivieren\u201c<\/strong> gesetzt werden:<\/p>\n<ol>\n<li>Die betreffende Firewall-Regel \u00fcber das <strong>Stift-Symbol<\/strong> bearbeiten.<\/li>\n<li><strong>\u201eErweiterter Modus\u201c<\/strong> aktivieren.<\/li>\n<li>Im Bereich <strong>\u201eQuellrouting\u201c<\/strong> das Feld <strong>\u201eAntwort an\u201c<\/strong> suchen.<\/li>\n<li><strong>\u201eDeaktivieren\u201c<\/strong> ausw\u00e4hlen und die Regel speichern.<\/li>\n<\/ol>\n<p>Dadurch verwendet OPNsense f\u00fcr die Antwortpakete nicht mehr das durch <strong>Reply-to<\/strong> vorgegebene Gateway, sondern das normale Routing der Firewall.<\/p>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/>by Speefak<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Sicherheit durch Isolation In modernen IT-Umgebungen ist die konsequente Trennung vertrauensw\u00fcrdiger und potenziell unsicherer Systeme ein wesentlicher Bestandteil der Netzwerksicherheit. Dies gilt insbesondere f\u00fcr KI-Agenten, Testumgebungen, IoT-Ger\u00e4te und sensible Entwicklungsumgebungen, die auf externe Datenquellen oder das Internet zugreifen, gleichzeitig jedoch keinen unkontrollierten Zugriff auf pers\u00f6nliche oder kritische Netzwerkressourcen erhalten sollen. Eine geeignete L\u00f6sung besteht in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,32,99,43,46],"tags":[],"class_list":["post-8818","post","type-post","status-publish","format-standard","hentry","category-anleitungen","category-netzwerke","category-proxmox-ve","category-sicherheit","category-virtualisierung"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/anleitungen\/\" rel=\"category tag\">Anleitungen<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/netzwerke\/\" rel=\"category tag\">Netzwerke<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/proxmox-ve\/\" rel=\"category tag\">Proxmox VE<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/sicherheit\/\" rel=\"category tag\">Sicherheit<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/virtualisierung\/\" rel=\"category tag\">Virtualisierung<\/a>","rttpg_excerpt":"Sicherheit durch Isolation In modernen IT-Umgebungen ist die konsequente Trennung vertrauensw\u00fcrdiger und potenziell unsicherer Systeme ein wesentlicher Bestandteil der Netzwerksicherheit. Dies gilt insbesondere f\u00fcr KI-Agenten, Testumgebungen, IoT-Ger\u00e4te und sensible Entwicklungsumgebungen, die auf externe Datenquellen oder das Internet zugreifen, gleichzeitig jedoch keinen unkontrollierten Zugriff auf pers\u00f6nliche oder kritische Netzwerkressourcen erhalten sollen. Eine geeignete L\u00f6sung besteht in&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8818","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=8818"}],"version-history":[{"count":42,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8818\/revisions"}],"predecessor-version":[{"id":8888,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8818\/revisions\/8888"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=8818"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=8818"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=8818"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":8748,"date":"2026-08-05T06:52:47","date_gmt":"2026-08-05T04:52:47","guid":{"rendered":"https:\/\/speefak.spdns.de\/oss_lifestyle\/?p=8748"},"modified":"2026-09-12T09:16:58","modified_gmt":"2026-09-12T07:16:58","slug":"ipfire-netzwerkisolation-mit-ipfire-und-tor-gateway-einrichten","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/ipfire-netzwerkisolation-mit-ipfire-und-tor-gateway-einrichten\/","title":{"rendered":"IPFire: Netzwerkisolation mit IPFire und Tor-Gateway einrichten"},"content":{"rendered":"<p>Eine strukturierte Netzwerksegmentierung ist eine zentrale Sicherheitsma\u00dfnahme, um Systeme voneinander zu isolieren und unerw\u00fcnschte Kommunikation zu verhindern. Besonders Testumgebungen, KI-Agenten, Malware-Analysen und andere sicherheitskritische Anwendungen sollten daher in einem separaten, abgeschotteten Netzwerk betrieben werden.<\/p>\n<p>Die klassische IPFire-Netzwerkarchitektur wird f\u00fcr dieses Szenario angepasst. Grund hierf\u00fcr ist die feste Zuordnung der IPFire-Zonen: Die RED-Schnittstelle ist ausschlie\u00dflich als untrusted WAN-Zone f\u00fcr externe Netzwerkverbindungen vorgesehen. Das Internet-Gateway muss daher zwingend im RED-Netz erreichbar sein, eine freie Umdefinition dieser Zone ist in der Standardkonfiguration nicht vorgesehen.<\/p>\n<p>Um dennoch eine vollst\u00e4ndige Trennung zwischen Heimnetz und isolierter Arbeitsumgebung zu erreichen, wird das Heimnetz als vorgelagertes Netzwerk betrieben. Die abgeschottete Umgebung wird \u00fcber die ORANGE-Zone von IPFire bereitgestellt. IPFire \u00fcbernimmt dabei weiterhin die zentrale Kontrolle des Datenverkehrs und setzt die definierten Firewall-Regeln zwischen den Segmenten durch.<\/p>\n<p>Das ORANGE-Netz erh\u00e4lt ausschlie\u00dflich den ben\u00f6tigten Internetzugang, w\u00e4hrend Zugriffe auf das Heimnetz und interne Systeme unterbunden werden. Dadurch bleiben kritische Anwendungen isoliert und das Risiko bei einer m\u00f6glichen Kompromittierung einzelner Systeme wird deutlich reduziert.<\/p>\n<p>Dieses Tutorial beschreibt zwei Varianten f\u00fcr den Betrieb eines isolierten ORANGE-Netzes hinter IPFire. Beide basieren auf derselben Netzwerkstruktur, unterscheiden sich jedoch darin, welche Komponente NAT und DNS-Aufl\u00f6sung \u00fcbernimmt. Davon h\u00e4ngt ab, ob die Konfiguration vollst\u00e4ndig \u00fcber die IPFire-Weboberfl\u00e4che erfolgen kann oder zus\u00e4tzliche Firewall-Anpassungen erforderlich sind.<\/p>\n<hr \/>\n<h2>Gemeinsame Basis: Netzwerkaufbau (2-NIC-Alternative)<\/h2>\n<p>Anstelle einer vollst\u00e4ndigen Trennung \u00fcber drei separate physische bzw. virtuelle Netzwerkschnittstellen (RED\/GREEN\/ORANGE) kann in Proxmox f\u00fcr das oben beschriebene Szenario auch ein reduzierter Aufbau mit nur 2 NICs verwendet werden:<\/p>\n<ul>\n<li>RED \u2192 Bridge vmbr0 (dieselbe Bridge, in der sich auch das Internet-Gateway\/der Heimrouter befindet)<\/li>\n<li>Green \u2192 gemeinsame isolierte Bridge isoLAN (wird nur f\u00fcr die Initial konfiguration ben\u00f6tigt)<\/li>\n<li>ORANGE \u2192 gemeinsame isolierte Bridge isoLAN (vollst\u00e4ndig isoliertes LAN)<\/li>\n<li>BLUE \u2192 gemeinsame isolierte Bridge isoLAN (teilweise isoliertes LAN, IPFire DHCP\/DNS)<\/li>\n<\/ul>\n<p>Auch wenn GREEN und ORANGE derselben Proxmox-Bridge (isoLAN) zugewiesen sind, m\u00fcssen ihnen w\u00e4hrend der IPFire-Ersteinrichtung unterschiedliche IP-Netze zugewiesen werden. Andernfalls k\u00f6nnen die beiden Netzbereiche von IPFire beziehungsweise den iptables-Regeln nicht eindeutig voneinander unterschieden und getrennt behandelt werden.<\/p>\n<hr \/>\n<h2>Vorgehen bei der Ersteinrichtung<\/h2>\n<ol>\n<li>IPFire wird zun\u00e4chst mit aktivem GREEN-Interface auf der Proxmox-Bridge isoLAN eingerichtet. Dabei bleibt die GREEN-NIC verbunden, w\u00e4hrend die ORANGE-NIC in der Proxmox-VM-Konfiguration vorerst deaktiviert wird (link_down=1).<\/li>\n<li>Der Zugriff auf die IPFire-WebGUI zur weiteren Konfiguration erfolgt tempor\u00e4r \u00fcber das GREEN-Netzwerk mittels einer separaten Management-VM. Diese Management-VM wird manuell mit einer statischen IP-Adresse konfiguriert, falls im GREEN-Netzwerk kein DHCP-Server aktiv ist. Die verwendete IP-Adresse muss sich dabei im gleichen Netzwerkbereich befinden wie das in IPFire konfigurierte GREEN-Netz.<\/li>\n<li>\u00dcber das GREEN-Interface wird anschlie\u00dfend die Erreichbarkeit der IPFire-WebGUI aus dem RED-Netz eingerichtet und getestet.<\/li>\n<li>Sobald der Zugriff auf die WebGUI \u00fcber RED erfolgreich funktioniert, wird die GREEN-NIC in der Proxmox-VM-Konfiguration deaktiviert (link_down=1) und stattdessen die ORANGE-NIC aktiviert.<\/li>\n<li>Ab diesem Zeitpunkt erfolgt der Betrieb des isolierten Netzwerks ausschlie\u00dflich \u00fcber die ORANGE-Zone. Das GREEN-Interface bleibt zwar deaktiviert, wird von IPFire jedoch weiterhin als Bestandteil der Firewall-Konfiguration vorausgesetzt und kann nicht vollst\u00e4ndig entfernt werden.<br \/>\n<hr \/>\n<\/li>\n<\/ol>\n<h2>Kommunikation aller Netze untereinander per Default sperren<\/h2>\n<p>Per Default erm\u00f6glicht IPFire die Kommunikation einiger Dienste und Netze untereinander (so hat z.B. GREEN standardm\u00e4\u00dfig Zugriff auf alle \u00fcbrigen Netze). Dieses Verhalten wird in den Firewalloptionen im Abschnitt Standardverhalten der Firewall konfiguriert. Die dort zur Auswahl stehenden M\u00f6glichkeiten (Forward sowie Outgoing) betreffen die Kommunikation der Netze untereinander (Forward) sowie die ausgehende Kommunikation der Firewall selbst (Outgoing). Um die Kommunikation der Netze untereinander vollst\u00e4ndig zu unterbinden und ausschlie\u00dflich explizit \u00fcber Firewallregeln freigegebene Kommunikation zuzulassen, sollte jegliche Kommunikation der Netze untereinander per Default gesperrt werden.<\/p>\n<p>Navigieren Sie zu <strong>Firewall<\/strong> und w\u00e4hlen Sie <strong>Firewalloptionen<\/strong>\u00a0aus.<\/p>\n<p><strong>Abschnitt &#8220;Standardverhalten der Firewall&#8221;:<\/strong><\/p>\n<ul>\n<li>Im Dropdown-Men\u00fc unter Forward von &#8220;zugelassen&#8221; auf &#8220;Blockiert&#8221; \u00e4ndern.<\/li>\n<\/ul>\n<p>Abschlie\u00dfend \u00fcber die Schaltfl\u00e4che &#8220;Speichern&#8221; das Standardverhalten der Firewall aktivieren.<\/p>\n<hr \/>\n<h2>Zugriff auf Firewall aus RED-Netz einrichten (Voraussetzung f\u00fcr beide Varianten)<\/h2>\n<p>Navigieren Sie zu Firewall \u2192 Firewallregeln und w\u00e4hlen Sie &#8220;Neue Regel erstellen&#8221;.<\/p>\n<p><strong>Abschnitt &#8220;Quelle&#8221;:<\/strong><\/p>\n<ul>\n<li>Radiobutton \u201eQuelladresse (IP-\/MAC-Adresse oder IP-Netzwerk)&#8221; aktivieren.<\/li>\n<li>Den IP-Bereich des RED-Netzes direkt in die Eingabemaske eintragen (z. B. 192.168.0.1, abh\u00e4ngig von der Heimnetzkonfiguration)<\/li>\n<li>Alternativ kann das RED-Netzwerk \u00fcber die Standard-Netzwerke ausgew\u00e4hlt werden: Radiobutton &#8220;Standard-Netzwerke&#8221; aktivieren und im Dropdown-Men\u00fc: RED ausw\u00e4hlen<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;NAT&#8221;:<\/strong><\/p>\n<ul>\n<li>Checkbox nicht aktivieren (bei DROP\/REJECT ohne Funktion).<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;Ziel&#8221;:<\/strong><\/p>\n<ul>\n<li>Radiobutton &#8220;Firewall&#8221; aktivieren.<\/li>\n<li>Dropdown-Men\u00fc: RED.<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;Protokoll&#8221;:<\/strong><\/p>\n<ul>\n<li>Dropdown auf &#8220;Alle&#8221; belassen.<\/li>\n<\/ul>\n<p><strong>Abschnitt Aktions-Auswahl:<\/strong><\/p>\n<ul>\n<li>Radiobutton bei &#8220;Verwerfen (DROP)&#8221; ausw\u00e4hlen (stilles Verwerfen, kein REJECT n\u00f6tig \u2013 REJECT w\u00fcrde dem Client eine Fehlermeldung schicken, DROP l\u00e4sst das Paket einfach verschwinden, ist f\u00fcr Isolationszwecke \u00fcblich und etwas unauff\u00e4lliger).<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;Weitere Einstellungen&#8221;:<\/strong><\/p>\n<ul>\n<li>Feld &#8220;Anmerkung&#8221;: z. B. &#8220;Zugriff auf Firewall aus RED-Netz erlauben&#8221;.<\/li>\n<li>Feld &#8220;Regelposition&#8221;: 1 (wichtig, da der Zugriff auf die Firewall ohne GREEN andernfalls nicht m\u00f6glich ist).<\/li>\n<li>Checkbox &#8220;Regel aktivieren&#8221; setzen.<\/li>\n<\/ul>\n<p>Abschlie\u00dfend \u00fcber die Schaltfl\u00e4che &#8220;Speichern&#8221; die Regel anlegen.<\/p>\n<p><strong>Hinweis:<\/strong> Die Darstellung in der \u00dcbersicht der Firewallregeln ist etwas \u00fcbersichtlicher, wenn f\u00fcr die Quelle der direkte IP-Bereich statt des Standardnetzes RED eingetragen wird, da in der \u00dcbersicht dann die IP und nicht nur &#8220;RED&#8221; angezeigt wird. Da als Ziel die Firewall direkt ausgew\u00e4hlt wird, erscheint die Regel anschlie\u00dfend im Abschnitt &#8220;Eingehender Firewallzugang&#8221; statt bei den Firewallregeln. S\u00e4mtliche Zugriffe, die die Firewall direkt betreffen, werden in diesem Bereich gelistet.<\/p>\n<p>Damit ist die grundlegende Konfiguration von IPFire f\u00fcr den Zugriff aus dem RED-Netz abgeschlossen.<\/p>\n<hr \/>\n<h2>Konfiguration der ORANGEN Zone<\/h2>\n<p>F\u00fcr die Realisierung eines vollst\u00e4ndig isolierten Netzwerks innerhalb der ORANGE-Zone stehen zwei unterschiedliche Architekturvarianten zur Verf\u00fcgung. Beide Ans\u00e4tze erm\u00f6glichen eine kontrollierte Trennung der Systeme vom internen Netzwerk, unterscheiden sich jedoch hinsichtlich Sicherheitsniveau, \u00dcberwachungsm\u00f6glichkeiten und der Platzierung zentraler Dienste.<\/p>\n<p>Die einfachste und direkt \u00fcber die IPFire-WebGUI konfigurierbare Variante ist die isolierte ORANGE-Zone (B1) mit einem externen DNS-Resolver. Da Firewalls Netzwerkverbindungen grunds\u00e4tzlich anhand von IP-Adressen verarbeiten und regeln, ist f\u00fcr die Aufl\u00f6sung von Domainnamen ein DNS-Resolver erforderlich. Hierf\u00fcr kann entweder ein externer DNS-Dienst im Internet oder alternativ der interne DNS-Resolver von IPFire (B2) verwendet werden.<\/p>\n<p>Bei Verwendung des IPFire-DNS-Resolvers (B2) muss der Zugriff auf Port 53 von der ORANGE-Zone zur Firewall explizit freigegeben werden. Dadurch wird ein zus\u00e4tzlicher Dienst der Firewall aus dem isolierten Netzwerksegment erreichbar, wodurch ein potenzieller zus\u00e4tzlicher Angriffspunkt entsteht.<\/p>\n<p>IPFire verarbeitet Firewall-Regeln in der festgelegten Reihenfolge von oben nach unten. Zun\u00e4chst wird gepr\u00fcft, ob eine Verbindung durch eine Blockierungsregel betroffen ist. Trifft diese zu, wird die Kommunikation verhindert. Greift keine Sperrregel, wird die nachfolgende Freigaberegel angewendet und die Kommunikation mit nicht explizit ausgeschlossenen Netzwerken erlaubt. Daher m\u00fcssen Blockierungsregeln grunds\u00e4tzlich vor allgemeinen Freigaberegeln angeordnet werden.<\/p>\n<hr \/>\n<p><strong>Variante A: Separate DNS-\/VPN-\/TOR-Gateway VM in der ORANGE-Zone<\/strong><\/p>\n<p>Eigenst\u00e4ndige DNS-\/VPN-\/TOR-Gateway-VM zur zentralisierten Kommunikation der ORANGE-Zone. S\u00e4mtlicher Netzwerkverkehr der Clients innerhalb der ORANGE-Zone wird ausschlie\u00dflich \u00fcber diese Gateway-VM geleitet. Eine direkte Kommunikation der ORANGE-Clients mit anderen Netzwerksegmenten wie z.B. dem Internet ist nicht m\u00f6glich.<\/p>\n<ul>\n<li>Gesammte Kommunikation aus ORANGE-Zone \u00fcber DNS\/TOR-Gateway<\/li>\n<li>Keine direkt erreichbaren Firewall-Dienste aus der ORANGE-Zone, au\u00dfer von Gateway-VM<\/li>\n<li>H\u00f6herer Administrationsaufwand<\/li>\n<li>Keine zentrale Verbindungsanalyse \u00fcber die Firewall bei Verwendung von Gateway-VM oder DNS Anfragen<\/li>\n<\/ul>\n<p><strong>Variante B1: Vollst\u00e4ndig getrennte ORANGE-Zone<\/strong><\/p>\n<p>Die Firewall selbst ist aus der ORANGE-Zone nicht erreichbar. S\u00e4mtliche Clients innerhalb der ORANGE-Zone erhalten den Internetzugriff \u00fcber die Firewall. Eine direkte Kommunikation der ORANGE-Clients mit anderen internen Netzwerksegmenten ist nicht m\u00f6glich. Die DNS-Aufl\u00f6sung erfolgt entweder \u00fcber einen internen DNS-Resolver innerhalb der ORANGE-Zone oder \u00fcber externe DNS-Server.<\/p>\n<ul>\n<li>Zentrale Verwaltung und \u00dcberwachung der ORANGE-Zone Cleints \u00fcber die IPFire-WebGUI<\/li>\n<li>Firewall selbst ist vollst\u00e4ndig von ORANGE-Zone getrennt<\/li>\n<li>Eigener DNS Resolver in ORANGE-Zone oder externe DNS Server erforderlich<\/li>\n<\/ul>\n<p><strong>Variante B2: DNS-Resolver auf der IPFire-Firewall<\/strong><\/p>\n<p>Die Firewall \u00fcbernimmt die DNS-Aufl\u00f6sung f\u00fcr alle Clients der ORANGE-Zone. S\u00e4mtliche Clients der ORANGE-Zone erhalten direkten Zugriff auf das Internet \u00fcber die Firewall. Eine direkte Kommunikation der ORANGE-Clients mit anderen Netzwerksegmenten ist, bis auf den DNS Resolver der Firewall selbst, weiterhin nicht m\u00f6glich.<\/p>\n<ul>\n<li>Zentrale Verwaltung und \u00dcberwachung der ORANGE-Zone Cleints \u00fcber die IPFire-WebGUI<\/li>\n<li>DNS-Dienst der Firewall aus der ORANGE-Zone erreichbar<\/li>\n<li>DNS Portfreigabe nur \u00fcber Startparameter realisierbar<\/li>\n<li>Zus\u00e4tzlicher potenzieller Angriffspunkt<\/li>\n<\/ul>\n<hr \/>\n<h3>Variante A: Vollst\u00e4ndig isoliertes ORANGE-Netz mit DNS\/TOR Gateway VM<\/h3>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b35f6546471638\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n[Heimrouter 192.168.0.1]\r\n        \u2502 RED\r\n   [IPFire]\r\n        \u2502 orange0 (192.168.10.0\/24)\r\n   [Tor-Gateway-VM]   \u2190 eigener DNS-Resolver, eigenes Routing\r\n    \u2502        \u2502\r\n[Client-VM] [Client-VM]   (Gateway und DNS-Server: Tor-Gateway-VM, nicht IPFire)<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b35f6546471638-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b35f6546471638-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b35f6546471638-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b35f6546471638-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b35f6546471638-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b35f6546471638-6\">6<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b35f6546471638-7\">7<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b35f6546471638-1\"><span class=\"crayon-sy\">[<\/span><span class=\"crayon-i\">Heimrouter<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">192.168.0.1<\/span><span class=\"crayon-sy\">]<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b35f6546471638-2\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">RED<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b35f6546471638-3\"><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">IPFire<\/span><span class=\"crayon-sy\">]<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b35f6546471638-4\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">orange0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">192.168.10.0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">24<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b35f6546471638-5\"><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">Tor<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">Gateway<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">VM<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span>\u2190<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">eigener <\/span><span class=\"crayon-v\">DNS<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">Resolver<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">eigenes <\/span><span class=\"crayon-i\">Routing<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b35f6546471638-6\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b35f6546471638-7\"><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">Client<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">VM<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">Client<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">VM<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">Gateway <\/span><span class=\"crayon-e\">und <\/span><span class=\"crayon-v\">DNS<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">Server<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">Tor<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">Gateway<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">VM<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">nicht <\/span><span class=\"crayon-v\">IPFire<\/span><span class=\"crayon-sy\">)<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0003 seconds] -->\r\n<p>In diesem Aufbau kommuniziert ausschlie\u00dflich die Tor-Gateway-VM direkt mit IPFire. S\u00e4mtliche weiteren Client-VMs im ORANGE-Netz haben keinerlei M\u00f6glichkeit mit der Firewall selbst oder anderen Nezten zu kommunizieren; sie tragen stattdessen die Tor-Gateway-VM sowohl als Default-Gateway als auch als DNS-Server ein. Die Tor-Gateway-VM \u00fcbernimmt dabei folgende Aufgaben:<\/p>\n<ul>\n<li>Betrieb von Tor mit aktiviertem TransPort (transparenter Proxy f\u00fcr TCP-Verbindungen) sowie DNSPort (DNS-Aufl\u00f6sung \u00fcber das Tor-Netzwerk).<\/li>\n<li>Umleitung s\u00e4mtlichen Client-Traffics auf der eigenen, ORANGE-seitigen Schnittstelle mittels eigener iptables-Regeln (REDIRECT auf TransPort bzw. DNSPort). Dies erfolgt vollst\u00e4ndig auf der Tor-Gateway-VM selbst, nicht auf IPFire.<\/li>\n<li>Aufbau eigener Verbindungen zu Tor-Entry-Guards, die gegen\u00fcber IPFire als Traffic eines einzelnen Hosts (der Tor-Gateway-VM) in Erscheinung treten.<\/li>\n<li>Die IPFire-Firewall kommuniziert ausschlie\u00dflich mit dem Tor-Gateway und verwirft jegliche Anfragen der \u00fcbrigen, im ORANGE-Netz befindlichen VMs.<\/li>\n<\/ul>\n<h3>Konfiguration der Firewallregel in der IPFire-WebGUI<\/h3>\n<p>F\u00fcr diese Variante ist lediglich eine weitere Regel erforderlich, die es der TOR VM erm\u00f6glicht mit der Firewall zu kommunizieren. Diese wird wie folgt angelegt:<\/p>\n<p>Navigieren Sie zu <strong>Firewall<\/strong> \u2192 <strong>Firewallregeln<\/strong> und w\u00e4hlen Sie <strong>Neue Regel erstellen<\/strong>.<\/p>\n<p><strong>Abschnitt &#8220;Quelle&#8221;:<\/strong><\/p>\n<ul>\n<li>Radiobutton &#8220;Quelladresse (IP-\/MAC-Adresse oder IP-Netzwerk)&#8221; aktivieren.<\/li>\n<li>In das zugeh\u00f6rige Eingabefeld die MAC-Adresse oder IP der Tor-Gateway-VM eintragen (Um Unabh\u00e4ngigkeit von einer festen VM-IP zu gew\u00e4hrleisten wird MAC empfohlen).<\/li>\n<li>Die \u00fcbrigen Radiobuttons dieses Abschnitts (&#8220;Firewall&#8221;, &#8220;Standard-Netzwerke&#8221;, &#8220;L\u00e4nderfilter&#8221;) bleiben unausgew\u00e4hlt.<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;NAT&#8221;:<\/strong><\/p>\n<ul>\n<li>Checkbox &#8220;Network Address Translation (NAT) benutzen&#8221; deaktiviert lassen.<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;Ziel&#8221;:<\/strong><\/p>\n<ul>\n<li>Radiobutton &#8220;Zieladresse (IP-Adresse oder -Netzwerk)&#8221; aktivieren.<\/li>\n<li>In das zugeh\u00f6rige Eingabefeld die IP-Adresse des Internetgateway\/Routers eintragen: 192.168.0.1.<\/li>\n<li>Die \u00fcbrigen Radiobuttons dieses Abschnitts bleiben unausgew\u00e4hlt.<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;Protokoll&#8221;:<\/strong><\/p>\n<ul>\n<li>Dropdown auf &#8220;Alle&#8221; belassen.<\/li>\n<\/ul>\n<p><strong>Abschnitt Aktions-Auswahl (gr\u00fcn\/rot\/dunkelrot):<\/strong><\/p>\n<ul>\n<li>Radiobutton bei &#8220;Akzeptieren (ACCEPT)&#8221; ausw\u00e4hlen.<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;Weitere Einstellungen&#8221;:<\/strong><\/p>\n<ul>\n<li>Feld &#8220;Anmerkung&#8221;: z. B. &#8220;Tor-Gateway Zugriff auf Internetgateway erlauben&#8221;.<\/li>\n<li>Feld &#8220;Regelposition&#8221;: Position frei w\u00e4hlbar, da es sich um die einzige Regel handelt.<\/li>\n<li>Checkbox &#8220;Regel aktivieren&#8221; setzen.<\/li>\n<li>\u00dcbrige Optionen (Protokollierung, SYN-Flood-Schutz, Zeitrahmen, Verbindungsbeschr\u00e4nkung, Ratenlimitierung) bleiben unber\u00fchrt.<\/li>\n<\/ul>\n<p>Abschlie\u00dfend \u00fcber die Schaltfl\u00e4che &#8220;Hinzuf\u00fcgen&#8221; speichern und mit &#8220;\u00c4nderungen \u00dcbernehmen&#8221; Regel aktivieren.<\/p>\n<p>Eine weitergehende Regel f\u00fcr den Internetzugriff des im ORANGE-Netz befindlichen Tor-Gateways ist in dieser Variante nicht erforderlich, da das Tor-Gateway NAT-Routing und DNS-Anfragen der im ORANGE-Netz befindlichen VMs selbst verarbeitet und als einziger Host auf Grund der o.g MAC\/IP Regel mit der Firewall kommunizieren kann.<\/p>\n<hr \/>\n<h2>Variante B1: <strong>Vollst\u00e4ndig getrennte ORANGE-Zone<\/strong><\/h2>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3600999470381\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n[Heimrouter 192.168.0.1]\r\n        \u2502 RED\r\n   [IPFire]   \u2190 Zugriff auf Firewall selbst nicht m\u00f6glich, DNS Server oder externer DNS Resolver erforderlich\r\n        \u2502 orange0 (192.168.10.0\/24)\r\n[VM 1] [VM 2] [VM 3] ...   (Gateway: IPFire direkt)<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3600999470381-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3600999470381-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3600999470381-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3600999470381-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3600999470381-5\">5<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3600999470381-1\"><span class=\"crayon-sy\">[<\/span><span class=\"crayon-i\">Heimrouter<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">192.168.0.1<\/span><span class=\"crayon-sy\">]<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3600999470381-2\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">RED<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3600999470381-3\"><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">IPFire<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span>\u2190<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">Zugriff <\/span><span class=\"crayon-e\">auf <\/span><span class=\"crayon-e\">Firewall <\/span><span class=\"crayon-e\">selbst <\/span><span class=\"crayon-i\">nicht<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">m<\/span>\u00f6<span class=\"crayon-v\">glich<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">DNS <\/span><span class=\"crayon-e\">Server <\/span><span class=\"crayon-e\">oder <\/span><span class=\"crayon-e\">externer <\/span><span class=\"crayon-e\">DNS <\/span><span class=\"crayon-e\">Resolver <\/span><span class=\"crayon-i\">erforderlich<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3600999470381-4\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">orange0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">192.168.10.0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">24<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3600999470381-5\"><span class=\"crayon-sy\">[<\/span><span class=\"crayon-i\">VM<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-i\">VM<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-i\">VM<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">3<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">Gateway<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">IPFire <\/span><span class=\"crayon-v\">direkt<\/span><span class=\"crayon-sy\">)<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0003 seconds] -->\r\n<p><\/p>\n<p class=\"PDq2pG_selectionAnchorContainer\" data-start=\"0\" data-end=\"302\">In dieser Variante ist der Zugriff auf die Firewall selbst, wie bereits in Variante B1, aus der ORANGE-Zone vollst\u00e4ndig gesperrt. Gleichzeitig wird die Kommunikation aller Clients innerhalb der ORANGE-Zone mit dem Internet erlaubt. Der interne IPFire-DNS-Resolver ist dadurch nicht erreichbar, weshalb die Clients entweder einen externen DNS-Resolver (z. B. 8.8.8.8) oder einen eigenen DNS-Server innerhalb der ORANGE-Zone verwenden m\u00fcssen.<\/p>\n<p data-start=\"304\" data-end=\"583\">F\u00fcr die grundlegende Konfiguration sind drei Firewall-Regeln erforderlich. Die erste Regel blockiert die Kommunikation zwischen der ORANGE- und der RED-Zone. Die zweite Regel erlaubt der ORANGE-Zone die Kommunikation mit allen \u00fcbrigen Netzwerken einschlie\u00dflich des Internets. Die dritte Regel sperrt den Zugriff auf die Firewall selbst f\u00fcr die ORANGE-Zone.<\/p>\n<h3>Regel 1 &#8211; Sperrung des Zugriffs von ORANGE auf RED<\/h3>\n<p>Navigieren Sie zu <strong>Firewall<\/strong> \u2192 <strong>Firewallregeln<\/strong> und w\u00e4hlen Sie <strong>Neue Regel erstellen<\/strong>.<\/p>\n<p><strong>Abschnitt &#8220;Quelle&#8221;:<\/strong><\/p>\n<ul>\n<li>Radiobutton &#8220;Standard-Netzwerke&#8221; aktivieren.<\/li>\n<li>Im zugeh\u00f6rigen Dropdown-Men\u00fc ORANGE (192.168.10.0\/24) ausw\u00e4hlen.<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;NAT&#8221;:<\/strong><\/p>\n<ul>\n<li>Checkbox &#8220;Network Address Translation (NAT) benutzen&#8221; deaktiviert lassen (bei einer verwerfenden Regel ohne Funktion).<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;Ziel&#8221;:<\/strong><\/p>\n<ul>\n<li>Radiobutton &#8220;Zieladresse (IP-Adresse oder -Netzwerk)&#8221; aktivieren.<\/li>\n<li>In das zugeh\u00f6rige Eingabefeld manuell eintragen: 192.168.0.0\/24.<\/li>\n<li>Ausdr\u00fccklich zu vermeiden: die Auswahl des Radiobuttons &#8220;Standard-Netzwerke&#8221; mit dem Wert RED. Dieser Wert wird von IPFire nicht subnetzbasiert, sondern interface-basiert ausgewertet und erfasst s\u00e4mtlichen Datenverkehr, der \u00fcber die Schnittstelle red0 das System verl\u00e4sst \u2014 einschlie\u00dflich des gesamten Internet-Traffics, sofern RED zugleich als Netzwerk-Uplink und Internetweg dient. Eine solche Auswahl w\u00fcrde den gesamten Internetzugriff des ORANGE-Netzes unterbinden.<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;Protokoll&#8221;:<\/strong><\/p>\n<ul>\n<li>Dropdown auf &#8220;Alle&#8221; belassen.<\/li>\n<\/ul>\n<p><strong>Abschnitt Aktions-Auswahl:<\/strong><\/p>\n<ul>\n<li>Radiobutton bei &#8220;Verwerfen (DROP)&#8221; ausw\u00e4hlen. (&#8220;Verweigern (REJECT)&#8221; ist ebenfalls m\u00f6glich, sendet dem anfragenden Client jedoch eine Fehlermeldung zur\u00fcck; f\u00fcr Isolationszwecke ist DROP das unauff\u00e4lligere und gebr\u00e4uchlichere Verhalten.)<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;Weitere Einstellungen&#8221;:<\/strong><\/p>\n<ul>\n<li>Feld &#8220;Anmerkung&#8221;: z. B. &#8220;ORANGE &#8211; Zugriff auf RED Netz blockieren&#8221;.<\/li>\n<li>Feld &#8220;Regelposition&#8221;: 1 eintragen (diese Regel muss zwingend vor der nachfolgenden Freigabe-Regel ausgewertet werden).<\/li>\n<li>Checkbox &#8220;Regel aktivieren&#8221; setzen.<\/li>\n<li>Checkbox &#8220;Protokollierung aktivieren&#8221; empfohlen setzen, um die Wirksamkeit der Regel im Firewall-Log nachvollziehen zu k\u00f6nnen.<\/li>\n<\/ul>\n<p>Abschlie\u00dfend \u00fcber &#8220;Hinzuf\u00fcgen&#8221; speichern.<\/p>\n<h3>Regel 2 &#8211; Freigabe des Internetzugriffs f\u00fcr ORANGE<\/h3>\n<p>Navigieren Sie erneut zu <strong>Firewall<\/strong> \u2192 <strong>Firewallregeln<\/strong> \u2192 <strong>Neue Regel erstellen<\/strong>.<\/p>\n<p><strong>Abschnitt &#8220;Quelle&#8221;:<\/strong><\/p>\n<ul>\n<li>Radiobutton &#8220;Standard-Netzwerke&#8221; aktivieren.<\/li>\n<li>Dropdown-Men\u00fc: ORANGE.<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;NAT&#8221;:<\/strong><\/p>\n<ul>\n<li>Checkbox &#8220;Network Address Translation (NAT) benutzen&#8221; nicht aktivieren. Das in der GUI integrierte Source-NAT ist in dieser Konfigurationvariante (RED als vertrauensw\u00fcrdiges Netz einzustufen) fehlerhaft (Details siehe unten); NAT wird stattdessen manuell \u00fcber firewall.local realisiert.<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;Ziel&#8221;:<\/strong><\/p>\n<ul>\n<li>Radiobutton &#8220;Standard-Netzwerke&#8221; aktivieren.<\/li>\n<li>Dropdown-Men\u00fc: Alle.<\/li>\n<li>Ausdr\u00fccklich zu vermeiden: die Auswahl des Radiobuttons &#8220;Firewall&#8221; mit dem Wert &#8220;Alle&#8221;. &#8220;Firewall&#8221; als Ziel bezeichnet in IPFire ausschlie\u00dflich Datenverkehr, der an die Firewall selbst adressiert ist (INPUT-Kette), nicht durchgeleiteten Datenverkehr (FORWARD-Kette). Eine solche Regel w\u00fcrde in der \u00dcbersicht f\u00e4lschlich unter &#8220;Eingehender Firewallzugang&#8221; erscheinen und f\u00fcr den eigentlichen Internetzugriff wirkungslos bleiben.<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;Protokoll&#8221;:<\/strong><\/p>\n<ul>\n<li>Dropdown auf &#8220;Alle&#8221; belassen.<\/li>\n<\/ul>\n<p><strong>Abschnitt Aktions-Auswahl:<\/strong><\/p>\n<ul>\n<li>Radiobutton bei &#8220;Akzeptieren (ACCEPT)&#8221; ausw\u00e4hlen.<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;Weitere Einstellungen&#8221;:<\/strong><\/p>\n<ul>\n<li>Feld &#8220;Anmerkung&#8221;: z. B. &#8220;ORANGE &#8211; Internetzugriff erlauben&#8221;.<\/li>\n<li>Feld &#8220;Regelposition&#8221;: 2 eintragen (wichtig, da sonst der zugriff von Orange auf red erlaubt wird und o.g. regel aus schritt 1 nicht mehr greift).<\/li>\n<li>Checkbox &#8220;Regel aktivieren&#8221; setzen.<\/li>\n<\/ul>\n<h3>Regel 3 \u2013 Sperrung des Zugriffs von ORANGE auf die Firewall selbst<\/h3>\n<p dir=\"auto\">Die beiden vorgenannten Regeln betreffen die ein- und ausgehende Kommunikation, nicht jedoch die Kommunikation mit der Firewall selbst. Diese wird im Abschnitt &#8220;Eingehender Firewallzugang&#8221; gelistet und betrifft ausschlie\u00dflich die Kommunikation mit der Firewall selbst.<\/p>\n<p dir=\"auto\">Der Zugriff auf die Firewall selbst ist in der Standardkonfiguration von IPFire ausschlie\u00dflich aus der GREEN-Zone vorgesehen und sollte weder aus der RED- noch aus der ORANGE-Zone m\u00f6glich sein. In der hier verwendeten, abweichenden Netzwerktopologie ist es jedoch erforderlich, den Zugriff aus der ORANGE-Zone explizit durch eine Firewall-Regel zu blockieren, da andernfalls ein Zugriff auf Firewall-Dienste m\u00f6glich ist. Die Ursache f\u00fcr dieses abweichende Verhalten konnte bislang nicht abschlie\u00dfend ermittelt werden. Es ist daher empfehlenswert, den Zugriff auf die Firewall aus der ORANGE-Zone unabh\u00e4ngig von der Standardkonfiguration explizit zu sperren.<\/p>\n<p>Navigieren Sie erneut zu <strong>Firewall<\/strong> \u2192 <strong>Firewallregeln<\/strong> \u2192 <strong>Neue Regel erstellen<\/strong>.<\/p>\n<p><strong>Abschnitt &#8220;Quelle&#8221;:<\/strong><\/p>\n<ul>\n<li>Radiobutton &#8220;Standard-Netzwerke&#8221; aktivieren.<\/li>\n<li>Dropdown-Men\u00fc: ORANGE.<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;NAT&#8221;:<\/strong><\/p>\n<ul>\n<li>Checkbox &#8220;Network Address Translation (NAT) benutzen&#8221; nicht aktivieren. Das in der GUI integrierte Source-NAT ist in dieser Konfigurationvariante (RED als vertrauensw\u00fcrdiges Netz einzustufen) fehlerhaft, NAT wird stattdessen manuell \u00fcber firewall.local realisiert.<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;Ziel&#8221;:<\/strong><\/p>\n<ul>\n<li>Radiobutton &#8220;Firewall&#8221; aktivieren (dies betrifft die Kommunikation mit der Firewall selbst).<\/li>\n<li>Dropdown-Men\u00fc: Alle.<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;Protokoll&#8221;:<\/strong><\/p>\n<ul>\n<li>Dropdown auf &#8220;Alle&#8221; belassen.<\/li>\n<li><strong>Ausdr\u00fccklich zu vermeiden:<\/strong> die Auswahl eines spezifischen Protokolls mit fest definiertem Port (z. B. &#8220;TCP&#8221; mit Port 444). In der getesteten IPFire-Version erzeugt eine solche Portauswahl eine fehlerhafte Regel, bei der sowohl Quell- als auch Zielport auf denselben Wert gesetzt werden (tcp spt:snpp dpt:snpp statt ausschlie\u00dflich dpt:snpp). Da ein anfragender Client praktisch nie von Port 444 aus verbindet, matcht eine derart erzeugte Regel de facto nie.<\/li>\n<\/ul>\n<p><strong>Abschnitt Aktions-Auswahl:<\/strong><\/p>\n<ul>\n<li>Radiobutton bei &#8220;Verwerfen (DROP)&#8221; ausw\u00e4hlen.<\/li>\n<\/ul>\n<p><strong>Abschnitt &#8220;Weitere Einstellungen&#8221;:<\/strong><\/p>\n<ul>\n<li>Feld &#8220;Anmerkung&#8221;: z. B. &#8220;ORANGE &#8211; Zugriff auf Firewall sperren &#8220;.<\/li>\n<li>Feld &#8220;Regelposition&#8221;: 2 eintragen (wichtig, da sonst der zugriff von Orange auf red erlaubt wird und o.g. regel aus schritt 1 nicht mehr greift).<\/li>\n<li>Checkbox &#8220;Regel aktivieren&#8221; setzen.<\/li>\n<\/ul>\n<p>Abschlie\u00dfend \u00fcber &#8220;Hinzuf\u00fcgen&#8221; speichern und mit &#8220;\u00c4nderung \u00fcbernehmen&#8221; Regeln aktivieren.<\/p>\n<hr \/>\n<h2>Variante B2: DNS-Resolver auf der IPFire-Firewall<\/h2>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3604563523442\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n[Heimrouter 192.168.0.1]\r\n        \u2502 RED\r\n   [IPFire]   \u2190 \u00fcbernimmt DNS f\u00fcr s\u00e4mtliche Clients selbst ( DNS Resovler auf 192.168.10.1)\r\n        \u2502 orange0 (192.168.10.0\/24)\r\n[VM 1] [VM 2] [VM 3] ...   (Gateway und DNS-Server: IPFire direkt)<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3604563523442-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3604563523442-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3604563523442-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3604563523442-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3604563523442-5\">5<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3604563523442-1\"><span class=\"crayon-sy\">[<\/span><span class=\"crayon-i\">Heimrouter<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">192.168.0.1<\/span><span class=\"crayon-sy\">]<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3604563523442-2\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">RED<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3604563523442-3\"><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">IPFire<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span>\u2190<span class=\"crayon-h\"> <\/span>\u00fc<span class=\"crayon-e\">bernimmt <\/span><span class=\"crayon-i\">DNS<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">f<\/span>\u00fc<span class=\"crayon-i\">r<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">s<\/span>\u00e4<span class=\"crayon-e\">mtliche <\/span><span class=\"crayon-e\">Clients <\/span><span class=\"crayon-e\">selbst<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">DNS <\/span><span class=\"crayon-e\">Resovler <\/span><span class=\"crayon-i\">auf<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">192.168.10.1<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3604563523442-4\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>\u2502<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">orange0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">192.168.10.0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">24<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3604563523442-5\"><span class=\"crayon-sy\">[<\/span><span class=\"crayon-i\">VM<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-i\">VM<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-i\">VM<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">3<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">Gateway <\/span><span class=\"crayon-e\">und <\/span><span class=\"crayon-v\">DNS<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">Server<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">IPFire <\/span><span class=\"crayon-v\">direkt<\/span><span class=\"crayon-sy\">)<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0003 seconds] -->\r\n<p>Der Zugriff auf die Firewall ist in der standardm\u00e4\u00dfigen IPFire-Netzwerktopologie f\u00fcr die GREEN-Zone bereits eingeschr\u00e4nkt, f\u00fcr RED jedoch nicht. Die standardm\u00e4\u00dfig erlaubte Kommunikation zwischen ORANGE- und RED-Zone wurde durch Regel 1 aus Variante B1 bereits gesperrt, w\u00e4hrend der Internetzugriff der ORANGE-Zone \u00fcber Regel 2 weiterhin erm\u00f6glicht wird.<\/p>\n<p>Um den internen IPFire-DNS-Resolver aus der ORANGE-Zone zu erreichen, ist eine manuelle Konfiguration \u00fcber die Startregeln in <code>firewall.local<\/code> erforderlich. Eine gezielte Freigabe ausschlie\u00dflich f\u00fcr Port 53 funktioniert \u00fcber die WebGUI nicht zuverl\u00e4ssig. Je nach Konfiguration werden entweder s\u00e4mtliche Firewall-Dienste (z. B. WebGUI, SSH, DNS) freigegeben oder die Firewall bleibt vollst\u00e4ndig gesperrt. Der Zugriff auf den IPFire-DNS-Resolver muss daher explizit \u00fcber eine eigene iptables-Regel in <code>firewall.local<\/code> definiert werden.<\/p>\n<h3>Manuelle Erg\u00e4nzung zur Freigabe des IPFire DNS Resolvers f\u00fcr das ORANGE Netz: \/etc\/sysconfig\/firewall.local<\/h3>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\ncase \"$1\" in\r\n  start)\r\n    # Source-NAT f\u00fcr ORANGE \u2192 Internet (Workaround f\u00fcr GUI-Fehler bei dynamischer RED-IP)\r\n    iptables -t nat -A POSTROUTING -s 192.168.10.0\/24 -o red0 -j MASQUERADE\r\n\r\n    # Nur erforderlich, sofern IPFire selbst als DNS-Resolver f\u00fcr ORANGE fungiert (Option B):\r\n    iptables -I INPUTFW 1 -i orange0 -p udp --dport 53 -j ACCEPT\r\n    iptables -I INPUTFW 1 -i orange0 -p tcp --dport 53 -j ACCEPT\r\n    ;;\r\n  stop)\r\n    iptables -t nat -D POSTROUTING -s 192.168.10.0\/24 -o red0 -j MASQUERADE 2&gt;\/dev\/null\r\n    iptables -D INPUTFW -i orange0 -p udp --dport 53 -j ACCEPT 2&gt;\/dev\/null\r\n    iptables -D INPUTFW -i orange0 -p tcp --dport 53 -j ACCEPT 2&gt;\/dev\/null\r\n    ;;\r\n  reload)\r\n    $0 stop\r\n    $0 start\r\n    ;;\r\n  *)\r\n    echo \"Usage: $0 {start|stop|reload}\"\r\n    ;;\r\nesac<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-6\">6<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-7\">7<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-8\">8<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-9\">9<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-10\">10<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-11\">11<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-12\">12<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-13\">13<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-14\">14<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-15\">15<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-16\">16<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-17\">17<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-18\">18<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-19\">19<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-20\">20<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-21\">21<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-22\">22<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-1\"><span class=\"crayon-st\">case<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$1\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">in<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-2\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-v\">start<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-3\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-p\"># Source-NAT f\u00fcr ORANGE \u2192 Internet (Workaround f\u00fcr GUI-Fehler bei dynamischer RED-IP)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-4\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">iptables<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">t<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">nat<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">A<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">POSTROUTING<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">s<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">192.168.10.0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">24<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">o<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">red0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">j<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">MASQUERADE<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-5\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-6\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-p\"># Nur erforderlich, sofern IPFire selbst als DNS-Resolver f\u00fcr ORANGE fungiert (Option B):<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-7\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">iptables<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">I<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">INPUTFW<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">i<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">orange0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">udp<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-i\">dport<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">53<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">j<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">ACCEPT<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-8\"><span class=\"crayon-e\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">iptables<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">I<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">INPUTFW<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">i<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">orange0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">tcp<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-i\">dport<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">53<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">j<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">ACCEPT<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-9\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-10\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-v\">stop<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-11\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">iptables<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">t<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">nat<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">D<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">POSTROUTING<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">s<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">192.168.10.0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">24<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">o<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">red0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">j<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">MASQUERADE<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-12\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">iptables<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">D<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">INPUTFW<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">i<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">orange0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">udp<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-i\">dport<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">53<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">j<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">ACCEPT<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-13\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">iptables<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">D<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">INPUTFW<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">i<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">orange0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">tcp<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-i\">dport<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">53<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">j<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">ACCEPT<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-14\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-15\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-v\">reload<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-16\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">stop<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-17\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">start<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-18\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-19\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-o\">*<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-20\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Usage: $0 {start|stop|reload}\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-21\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3609715522750-22\"><span class=\"crayon-v\">esac<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0008 seconds] -->\r\n<p>Anschlie\u00dfend ausf\u00fchrbar machen und aktivieren:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b360c757974311\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nchmod +x \/etc\/sysconfig\/firewall.local \r\n\/etc\/sysconfig\/firewall.local start<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b360c757974311-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b360c757974311-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b360c757974311-1\"><span class=\"crayon-v\">chmod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">+<\/span><span class=\"crayon-v\">x<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sysconfig<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">firewall<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">local<\/span><span class=\"crayon-h\"> <\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b360c757974311-2\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sysconfig<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">firewall<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">local <\/span><span class=\"crayon-v\">start<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<h3>Begr\u00fcndung: Warum in dieser Variante manuelle Erg\u00e4nzungen erforderlich sind<\/h3>\n<ul>\n<li><strong>NAT f\u00fcr ein vollst\u00e4ndiges Subnetz:<\/strong> IPFire muss f\u00fcr s\u00e4mtliche privaten IP-Adressen aus 192.168.10.0\/24 gleichzeitig Source-NAT durchf\u00fchren. Genau dieser Fall l\u00f6st den bekannten GUI-Fehler (SNAT &#8230; to:0.0.0.0 bei dynamisch bezogener RED-IP oder wenn RED als als vertrauenw\u00fcrdig eingestuft wird) aus. MASQUERADE behebt dies, da die aktuelle Interface-IP zur Laufzeit dynamisch abgefragt wird, anstatt eine feste, in der Konfiguration hinterlegte IP-Adresse zu erwarten.<\/li>\n<li><strong>DNS-Aufl\u00f6sung f\u00fcr s\u00e4mtliche Clients:<\/strong> Sofern kein externer DNS-Server in den Orange VMs oder im Orange Netz selbst konfiguriert wird, muss jede VM ihre DNS-Anfragen an IPFire selbst richten. Dies trifft auf die fehlerhafte Port-Zuordnungslogik der WebGUI beim gezielten Freischalten von Port 53.<\/li>\n<\/ul>\n<hr \/>\n<h2>Hinweis zur Wahl der Tor-Implementierung<\/h2>\n<p>IPFire bietet zwar ein eigenes Tor-Paket. Gegen den Betrieb von Tor direkt auf IPFire anstelle einer separaten Gateway-VM sprechen zudem folgende Punkte:<\/p>\n<ul>\n<li>Firewall, Router und Tor-Client liefen in einem System, was die Angriffsfl\u00e4che der Firewall selbst vergr\u00f6\u00dfert.<\/li>\n<li>Der Isolationsvorteil einer separaten Gateway-VM \u2014 eine kompromittierte Client-VM hat keinen direkten Zugriff auf die Gateway-Konfiguration \u2014 entfiele.<\/li>\n<li>Tor-Updates w\u00e4ren an den IPFire-Update-Zyklus gebunden, statt unabh\u00e4ngig davon eingespielt werden zu k\u00f6nnen.<\/li>\n<li>Der Netzwerkpfad (ORANGE \u2192 RED) bliebe unver\u00e4ndert, unabh\u00e4ngig davon, auf welchem System Tor l\u00e4uft.<\/li>\n<\/ul>\n<p>Die dedizierte Tor-Gateway-VM im ORANGE-Netz wird daher gegen\u00fcber der IPFire-internen Tor-Integration als die robustere L\u00f6sung eingesch\u00e4tzt.<\/p>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/>by Speefak<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine strukturierte Netzwerksegmentierung ist eine zentrale Sicherheitsma\u00dfnahme, um Systeme voneinander zu isolieren und unerw\u00fcnschte Kommunikation zu verhindern. Besonders Testumgebungen, KI-Agenten, Malware-Analysen und andere sicherheitskritische Anwendungen sollten daher in einem separaten, abgeschotteten Netzwerk betrieben werden. Die klassische IPFire-Netzwerkarchitektur wird f\u00fcr dieses Szenario angepasst. Grund hierf\u00fcr ist die feste Zuordnung der IPFire-Zonen: Die RED-Schnittstelle ist ausschlie\u00dflich als [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,32,43,46],"tags":[],"class_list":["post-8748","post","type-post","status-publish","format-standard","hentry","category-anleitungen","category-netzwerke","category-sicherheit","category-virtualisierung"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/anleitungen\/\" rel=\"category tag\">Anleitungen<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/netzwerke\/\" rel=\"category tag\">Netzwerke<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/sicherheit\/\" rel=\"category tag\">Sicherheit<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/virtualisierung\/\" rel=\"category tag\">Virtualisierung<\/a>","rttpg_excerpt":"Eine strukturierte Netzwerksegmentierung ist eine zentrale Sicherheitsma\u00dfnahme, um Systeme voneinander zu isolieren und unerw\u00fcnschte Kommunikation zu verhindern. Besonders Testumgebungen, KI-Agenten, Malware-Analysen und andere sicherheitskritische Anwendungen sollten daher in einem separaten, abgeschotteten Netzwerk betrieben werden. Die klassische IPFire-Netzwerkarchitektur wird f\u00fcr dieses Szenario angepasst. Grund hierf\u00fcr ist die feste Zuordnung der IPFire-Zonen: Die RED-Schnittstelle ist ausschlie\u00dflich als&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8748","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=8748"}],"version-history":[{"count":5,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8748\/revisions"}],"predecessor-version":[{"id":8901,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8748\/revisions\/8901"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=8748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=8748"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=8748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":8680,"date":"2026-05-20T11:58:35","date_gmt":"2026-05-20T09:58:35","guid":{"rendered":"https:\/\/speefak.spdns.de\/oss_lifestyle\/?p=8680"},"modified":"2026-07-30T16:08:27","modified_gmt":"2026-07-30T14:08:27","slug":"nautilus-durch-nemo-unter-debian-13-ersetzen","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/nautilus-durch-nemo-unter-debian-13-ersetzen\/","title":{"rendered":"Nautilus durch Nemo unter Debian 13 ersetzen"},"content":{"rendered":"<p>Unter Debian 13 mit GNOME kann der Standard-Dateimanager Nautilus bei vielen Dateien, Netzwerkfreigaben oder zahlreichen Mountpoints deutlich langsamer reagieren.<\/p>\n<p>Die Geschwindigkeitseinbu\u00dfen werden durch ein Zusammenspiel von GLib und GLibc verursacht. Bei Aufrufen von <code>g_file_query_info()<\/code> mit bestimmten Attributen f\u00fchrt GLib interne <code>statfs()<\/code>-Aufrufe durch. Schl\u00e4gt dieser Aufruf fehl \u2013 was bei Netzwerkdateisystemen oder bei vielen Eintr\u00e4gen in <code>\/proc\/mounts<\/code> vorkommt \u2013, initiiert GLibc einen aufwendigen Fallback-Mechanismus. Dies f\u00fchrt zu messbaren Verz\u00f6gerungen bei Dateioperationen.<br \/>\nBetroffen sind h\u00e4ufig:<\/p>\n<ul>\n<li>gro\u00dfe Verzeichnisse<\/li>\n<li>SMB-, NFS- oder SSHFS-Freigaben<\/li>\n<li>Systeme mit vielen Mountpoints (Docker, Flatpak, Snap)<\/li>\n<\/ul>\n<p>Nemo verwendet eine \u00e4ltere GLib-Versionierung und eine eigene Thumbnail-Factory, wodurch dieses Problem nicht auftritt.<\/p>\n<hr \/>\n<h2>Nemo installieren und als Standard-Dateimanager setzen<\/h2>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3906491697887\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo apt update\r\nsudo apt install nemo nemo-fileroller nemo-preview nemo-share\r\nxdg-mime default nemo.desktop inode\/directory\r\nxdg-mime query default inode\/directory<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3906491697887-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3906491697887-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3906491697887-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3906491697887-4\">4<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3906491697887-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">apt <\/span><span class=\"crayon-e\">update<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3906491697887-2\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">apt <\/span><span class=\"crayon-e\">install <\/span><span class=\"crayon-e\">nemo <\/span><span class=\"crayon-v\">nemo<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">fileroller <\/span><span class=\"crayon-v\">nemo<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">preview <\/span><span class=\"crayon-v\">nemo<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">share<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3906491697887-3\"><span class=\"crayon-v\">xdg<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">mime <\/span><span class=\"crayon-st\">default<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">nemo<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">desktop <\/span><span class=\"crayon-v\">inode<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">directory<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3906491697887-4\"><span class=\"crayon-v\">xdg<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">mime <\/span><span class=\"crayon-e\">query <\/span><span class=\"crayon-st\">default<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">inode<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">directory<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Pr\u00fcfen:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b390d437711057\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nxdg-mime query default inode\/directory<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b390d437711057-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b390d437711057-1\"><span class=\"crayon-v\">xdg<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">mime <\/span><span class=\"crayon-e\">query <\/span><span class=\"crayon-st\">default<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">inode<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">directory<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Ausgabe:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3910672782754\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nnemo.desktop<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3910672782754-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3910672782754-1\"><span class=\"crayon-v\">nemo<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">desktop<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0000 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>Desktop-Icons an Nemo \u00fcbergeben<\/h2>\n<p>GNOME verwendet normalerweise Nautilus f\u00fcr die Desktopverwaltung. Diese Funktion wird nun Nemo zugewiesen.<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3912687189392\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\ngsettings set org.gnome.desktop.background show-desktop-icons false\r\ngsettings set org.nemo.desktop show-desktop-icons true<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3912687189392-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3912687189392-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3912687189392-1\"><span class=\"crayon-e\">gsettings <\/span><span class=\"crayon-e\">set <\/span><span class=\"crayon-v\">org<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">gnome<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">desktop<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">background <\/span><span class=\"crayon-v\">show<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">desktop<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">icons <\/span><span class=\"crayon-t\">false<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3912687189392-2\"><span class=\"crayon-e\">gsettings <\/span><span class=\"crayon-e\">set <\/span><span class=\"crayon-v\">org<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">nemo<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">desktop <\/span><span class=\"crayon-v\">show<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">desktop<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">icons <\/span><span class=\"crayon-t\">true<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>Nautilus-Hintergrunddienst deaktivieren (optional)<\/h2>\n<p>Nautilus l\u00e4uft standardm\u00e4\u00dfig dauerhaft als D-Bus-Dienst im Hintergrund. Der Dienst wird wie folgt deaktiviert<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3915639086637\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsystemctl --user mask --now org.gnome.Nautilus.service<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3915639086637-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3915639086637-1\"><span class=\"crayon-v\">systemctl<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-e\">user <\/span><span class=\"crayon-v\">mask<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-e\">now <\/span><span class=\"crayon-v\">org<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">gnome<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">Nautilus<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">service<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>Firefox und moderne Dateidialoge auf Nemo umstellen<\/h2>\n<p>Firefox, Chromium und andere moderne Anwendungen nutzen das XDG Desktop Portal f\u00fcr Dateiauswahldialoge. Standardm\u00e4\u00dfig wird das GNOME-Portal (und damit Nautilus) verwendet. Die Installation und Umleitung auf das GTK-Portal kann folgenderma\u00dfen umgesetzt werden:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n# Ben\u00f6tigtes Paket installieren\r\nsudo apt install xdg-desktop-portal-gtk\r\n\r\n# Konfigurationsverzeichnis anlegen\r\nmkdir -p ~\/.config\/xdg-desktop-portal\r\n\r\n# Portal-Konfiguration erstellen\r\ncat &amp;gt; ~\/.config\/xdg-desktop-portal\/portals.conf &amp;lt;&amp;lt; 'EOF'\r\n[preferred]\r\ndefault=gtk\r\norg.freedesktop.impl.portal.FileChooser=gtk\r\nEOF\r\n\r\n# Portal-Dienst neu starten\r\nsystemctl --user restart xdg-desktop-portal<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-6\">6<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-7\">7<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-8\">8<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-9\">9<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-10\">10<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-11\">11<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-12\">12<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-13\">13<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-14\">14<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-15\">15<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-1\"><span class=\"crayon-p\"># Ben\u00f6tigtes Paket installieren<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-2\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">apt <\/span><span class=\"crayon-e\">install <\/span><span class=\"crayon-v\">xdg<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">desktop<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">portal<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">gtk<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-3\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-4\"><span class=\"crayon-p\"># Konfigurationsverzeichnis anlegen<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-5\"><span class=\"crayon-v\">mkdir<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">config<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">xdg<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">desktop<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">portal<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-6\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-7\"><span class=\"crayon-p\"># Portal-Konfiguration erstellen<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-8\"><span class=\"crayon-v\">cat<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">gt<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">config<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">xdg<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">desktop<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">portal<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">portals<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">conf<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">lt<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">lt<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">'EOF'<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-9\"><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">preferred<\/span><span class=\"crayon-sy\">]<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-10\"><span class=\"crayon-st\">default<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-e\">gtk<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-11\"><span class=\"crayon-v\">org<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">freedesktop<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">impl<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">portal<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">FileChooser<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-e\">gtk<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-12\"><span class=\"crayon-i\">EOF<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-13\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-14\"><span class=\"crayon-p\"># Portal-Dienst neu starten<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3917228566305-15\"><span class=\"crayon-v\">systemctl<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-e\">user <\/span><span class=\"crayon-e\">restart <\/span><span class=\"crayon-v\">xdg<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">desktop<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">portal<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0003 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>Firefox-Konfiguration<\/h2>\n<p>In Firefox wird die Nutzung der Portal-Schnittstelle aktiviert:<\/p>\n<ol>\n<li>about:config \u00f6ffnen<\/li>\n<li>Nach folgendem Eintrag suchen:<\/li>\n<\/ol>\n<ol>\n<li>Wert auf 1 setzen<\/li>\n<li>Firefox neu starten<\/li>\n<\/ol>\n<p>Danach verwendet Firefox Nemo-basierte GTK-Dateidialoge.<\/p>\n<hr \/>\n<h2>Optional: Nautilus-Aufrufe automatisch auf Nemo umleiten<\/h2>\n<p>Einige Programme starten weiterhin direkt <code>nautilus<\/code>. Daf\u00fcr kann ein Wrapper eingerichtet werden:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nmkdir -p ~\/.local\/bin\r\n\r\ncat &amp;gt; ~\/.local\/bin\/nautilus &amp;lt;&amp;lt; 'EOF' \r\n#!\/bin\/bash\r\nexec nemo \"$@\"\r\nEOF\u00a0\r\n\r\nchmod +x ~\/.local\/bin\/nautilus\r\n\r\necho 'export PATH=\"$HOME\/.local\/bin:$PATH\"' &amp;gt;&amp;gt; ~\/.profile<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-6\">6<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-7\">7<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-8\">8<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-9\">9<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-10\">10<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-1\"><span class=\"crayon-v\">mkdir<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">local<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">bin<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-2\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-3\"><span class=\"crayon-v\">cat<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">gt<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">local<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">nautilus<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">lt<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">lt<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">'EOF'<\/span><span class=\"crayon-h\"> <\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-4\"><span class=\"crayon-p\">#!\/bin\/bash<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-5\"><span class=\"crayon-e\">exec <\/span><span class=\"crayon-i\">nemo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$@\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-6\"><span class=\"crayon-i\">EOF<\/span>\u00a0<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-7\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-8\"><span class=\"crayon-v\">chmod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">+<\/span><span class=\"crayon-v\">x<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">local<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">nautilus<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-9\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391a353980124-10\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">'export PATH=\"$HOME\/.local\/bin:$PATH\"'<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">gt<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">gt<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">profile<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0002 seconds] -->\r\n<p>Nach erneutem Einloggen werden direkte Nautilus-Aufrufe automatisch an Nemo weitergeleitet. Das kann wie folgt \u00fcberpr\u00fcft werden:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n# Standard-Dateimanager pr\u00fcfen\r\nxdg-mime query default inode\/directory\r\n\r\n# Nautilus-Prozesse pr\u00fcfen\r\nps aux | grep nautilus\r\n\r\n# Portal-Status pr\u00fcfen\r\nsystemctl --user status xdg-desktop-portal<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-6\">6<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-7\">7<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-8\">8<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-1\"><span class=\"crayon-p\"># Standard-Dateimanager pr\u00fcfen<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-2\"><span class=\"crayon-v\">xdg<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">mime <\/span><span class=\"crayon-e\">query <\/span><span class=\"crayon-st\">default<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">inode<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-i\">directory<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-3\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-4\"><span class=\"crayon-p\"># Nautilus-Prozesse pr\u00fcfen<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-5\"><span class=\"crayon-e\">ps <\/span><span class=\"crayon-v\">aux<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">|<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">grep <\/span><span class=\"crayon-i\">nautilus<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-6\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-7\"><span class=\"crayon-p\"># Portal-Status pr\u00fcfen<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b391c725271309-8\"><span class=\"crayon-v\">systemctl<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-e\">user <\/span><span class=\"crayon-e\">status <\/span><span class=\"crayon-v\">xdg<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">desktop<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">portal<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<ul>\n<li>Der Wrapper kann u.U. Systemfehler verursachen, da alle Nautilus Aufrufe \u00fcber den Wrapper an Nemo weitergeleitet werden.<\/li>\n<\/ul>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/>by Speefak<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unter Debian 13 mit GNOME kann der Standard-Dateimanager Nautilus bei vielen Dateien, Netzwerkfreigaben oder zahlreichen Mountpoints deutlich langsamer reagieren. Die Geschwindigkeitseinbu\u00dfen werden durch ein Zusammenspiel von GLib und GLibc verursacht. Bei Aufrufen von g_file_query_info() mit bestimmten Attributen f\u00fchrt GLib interne statfs()-Aufrufe durch. Schl\u00e4gt dieser Aufruf fehl \u2013 was bei Netzwerkdateisystemen oder bei vielen Eintr\u00e4gen in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,10],"tags":[],"class_list":["post-8680","post","type-post","status-publish","format-standard","hentry","category-anleitungen","category-debian"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":11,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/anleitungen\/\" rel=\"category tag\">Anleitungen<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/debian\/\" rel=\"category tag\">Debian<\/a>","rttpg_excerpt":"Unter Debian 13 mit GNOME kann der Standard-Dateimanager Nautilus bei vielen Dateien, Netzwerkfreigaben oder zahlreichen Mountpoints deutlich langsamer reagieren. Die Geschwindigkeitseinbu\u00dfen werden durch ein Zusammenspiel von GLib und GLibc verursacht. Bei Aufrufen von g_file_query_info() mit bestimmten Attributen f\u00fchrt GLib interne statfs()-Aufrufe durch. Schl\u00e4gt dieser Aufruf fehl \u2013 was bei Netzwerkdateisystemen oder bei vielen Eintr\u00e4gen in&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8680","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=8680"}],"version-history":[{"count":0,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8680\/revisions"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=8680"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=8680"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=8680"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":8674,"date":"2026-05-03T14:24:31","date_gmt":"2026-05-03T12:24:31","guid":{"rendered":"https:\/\/speefak.spdns.de\/oss_lifestyle\/?p=8674"},"modified":"2026-07-30T13:28:01","modified_gmt":"2026-07-30T11:28:01","slug":"iobroker-iqcontrol-als-saubere-app-mit-firefox-gnome","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/iobroker-iqcontrol-als-saubere-app-mit-firefox-gnome\/","title":{"rendered":"ioBroker iqControl als saubere App mit Firefox (GNOME)"},"content":{"rendered":"<p data-start=\"69\" data-end=\"396\">Ziel dieses Setups ist es, <strong data-start=\"96\" data-end=\"147\"><span class=\"hover:entity-accent entity-underline inline cursor-pointer align-baseline\"><span class=\"whitespace-normal\">ioBroker<\/span><\/span> iqControl<\/strong> in <strong data-start=\"151\" data-end=\"192\"><span class=\"hover:entity-accent entity-underline inline cursor-pointer align-baseline\"><span class=\"whitespace-normal\">Firefox<\/span><\/span><\/strong> wie eine eigenst\u00e4ndige App zu betreiben. Der Browser wird dabei technisch weiter genutzt, aber optisch und funktional so stark reduziert, dass er wie ein dedizierter Kiosk-Client f\u00fcr das Dashboard wirkt.<\/p>\n<p data-start=\"398\" data-end=\"420\">Konkret wird erreicht:<\/p>\n<ul data-start=\"422\" data-end=\"676\">\n<li data-section-id=\"atya81\" data-start=\"422\" data-end=\"482\">kein sichtbarer Browser-Chrome (Tabs, Adressleiste, Men\u00fcs)<\/li>\n<li data-section-id=\"kaksw\" data-start=\"483\" data-end=\"516\">feste Fenstergr\u00f6\u00dfe beim Start, ver\u00e4nderbar nach Start<\/li>\n<li data-section-id=\"11uv2ug\" data-start=\"517\" data-end=\"558\">automatischer Start \u00fcber eigenes Profil<\/li>\n<li data-section-id=\"pe13j\" data-start=\"559\" data-end=\"613\">stabile Anzeige von iqControl im Vollbild-\/App-Modus<\/li>\n<li data-section-id=\"g7jz4u\" data-start=\"614\" data-end=\"676\">optionaler Fallback zwischen Internet-Domain und LAN-Zugriff<\/li>\n<\/ul>\n<p data-start=\"678\" data-end=\"716\">Das Setup besteht aus vier Bausteinen:<\/p>\n<ol data-start=\"717\" data-end=\"894\">\n<li data-section-id=\"jeibp1\" data-start=\"717\" data-end=\"763\">eigenes Firefox-Profil (isolierte Umgebung)<\/li>\n<li data-section-id=\"1u2n3wy\" data-start=\"764\" data-end=\"801\">UI-Reduktion \u00fcber <code data-start=\"785\" data-end=\"801\">userChrome.css<\/code><\/li>\n<li data-section-id=\"rxrdn1\" data-start=\"802\" data-end=\"845\">intelligenter Start mit WAN\/LAN-Fallback<\/li>\n<li data-section-id=\"1fuoj8a\" data-start=\"846\" data-end=\"894\">optionaler Desktop- und Autostart-Integration<br \/>\n<hr \/>\n<\/li>\n<\/ol>\n<h2>1. Neues Firefox-Profil anlegen<\/h2>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3c33271211961\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nfirefox-esr -CreateProfile iobroker<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c33271211961-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c33271211961-1\"><span class=\"crayon-v\">firefox<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">esr<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">CreateProfile <\/span><span class=\"crayon-v\">iobroker<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>2. userChrome.css aktivieren<\/h2>\n<p>Firefox muss mit dem zuvor angelegten \u201eiobroker\u201c-Profil gestartet werden, damit alle Konfigurations\u00e4nderungen im korrekten Profil gespeichert und angewendet werden.<\/p>\n<p>Start inklusive direktem Zugriff auf die Konfiguration:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3c3a274635410\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nfirefox-esr -P iobroker about:config<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c3a274635410-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c3a274635410-1\"><span class=\"crayon-v\">firefox<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">esr<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">P<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">iobroker <\/span><span class=\"crayon-v\">about<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-v\">config<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Suche nach:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3c3d633099591\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\ntoolkit.legacyUserProfileCustomizations.stylesheets<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c3d633099591-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c3d633099591-1\"><span class=\"crayon-v\">toolkit<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">legacyUserProfileCustomizations<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">stylesheets<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Setze den Wert auf:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3c40995046534\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\ntrue<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c40995046534-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c40995046534-1\"><span class=\"crayon-t\">true<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0000 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>3. userChrome.css erstellen<\/h2>\n<p>In diesem Schritt wird die Firefox-Oberfl\u00e4che reduziert (Tabs, Adressleiste, Men\u00fcs), sodass nur der Inhalt sichtbar bleibt und eine App-\u00e4hnliche ioBroker-Ansicht entsteht.<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3c42017153993\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\ncd ~\/.mozilla\/firefox\/*.iobroker\r\nmkdir -p chrome\r\nnano chrome\/userChrome.css<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c42017153993-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c42017153993-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c42017153993-3\">3<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c42017153993-1\"><span class=\"crayon-v\">cd<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">mozilla<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">firefox<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-o\">*<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">iobroker<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c42017153993-2\"><span class=\"crayon-v\">mkdir<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">chrome<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c42017153993-3\"><span class=\"crayon-e\">nano <\/span><span class=\"crayon-v\">chrome<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">userChrome<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">css<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Inhalt:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n\/* ioBroker Clean Dashboard *\/\r\n\r\n#titlebar,\r\n#toolbar-menubar,\r\n#TabsToolbar,\r\n#nav-bar,\r\n#PersonalToolbar,\r\n#urlbar-container {\r\n    visibility: collapse !important;\r\n    max-height: 0 !important;\r\n    min-height: 0 !important;\r\n}\r\n\r\n#sidebar-box {\r\n    display: none !important;\r\n}\r\n\r\n:root {\r\n    --tab-min-height: 0px !important;\r\n}\r\n\r\n\/* Abstand oben *\/\r\n#navigator-toolbox {\r\n    padding-top: 2px !important;\r\n}<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-6\">6<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-7\">7<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-8\">8<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-9\">9<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-10\">10<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-11\">11<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-12\">12<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-13\">13<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-14\">14<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-15\">15<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-16\">16<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-17\">17<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-18\">18<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-19\">19<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-20\">20<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-21\">21<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-22\">22<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-23\">23<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-24\">24<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-25\">25<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-1\"><span class=\"crayon-c\">\/* ioBroker Clean Dashboard *\/<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-2\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-3\"><span class=\"crayon-p\">#titlebar,<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-4\"><span class=\"crayon-p\">#toolbar-menubar,<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-5\"><span class=\"crayon-p\">#TabsToolbar,<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-6\"><span class=\"crayon-p\">#nav-bar,<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-7\"><span class=\"crayon-p\">#PersonalToolbar,<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-8\"><span class=\"crayon-p\">#urlbar-container {<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-9\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">visibility<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">collapse<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-v\">important<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-10\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">max<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">height<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-v\">important<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-11\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">min<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">height<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-v\">important<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-12\"><span class=\"crayon-sy\">}<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-13\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-14\"><span class=\"crayon-p\">#sidebar-box {<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-15\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">display<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">none<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-v\">important<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-16\"><span class=\"crayon-sy\">}<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-17\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-18\"><span class=\"crayon-o\">:<\/span><span class=\"crayon-e\">root<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">{<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-19\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-v\">tab<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">min<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">height<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">0px<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-v\">important<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-20\"><span class=\"crayon-sy\">}<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-21\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-22\"><span class=\"crayon-c\">\/* Abstand oben *\/<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-23\"><span class=\"crayon-p\">#navigator-toolbox {<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-24\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">padding<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">top<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2px<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-v\">important<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c45182136872-25\"><span class=\"crayon-sy\">}<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0003 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>4. Startscript mit WAN\/LAN Fallback<\/h2>\n<p>SSL-Zertifikate k\u00f6nnen in der Regel nur f\u00fcr Domainnamen erstellt werden, nicht f\u00fcr lokale IP-Adressen. Daher f\u00fchrt der Zugriff \u00fcber die LAN-IP im Browser zu einem Zertifikatsfehler. Wird hingegen die im Zertifikat hinterlegte Domain genutzt, ist die Verbindung fehlerfrei. Deshalb wird zuerst die URL getestet und nur im Fehlerfall die LAN-IP verwendet.<\/p>\n<p>In diesem Schritt wird ein Script erstellt, das automatisch entscheidet, ob die ioBroker-Instanz \u00fcber die \u00f6ffentliche Domain oder die lokale IP gestartet wird.<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3c47133249449\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nnano ~\/start-iobroker-ff-appmode.sh<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c47133249449-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c47133249449-1\"><span class=\"crayon-v\">nano<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">start<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">iobroker<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">ff<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">appmode<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">sh<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Inhalt:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n#!\/bin\/bash\r\n\r\nURL_PUBLIC=\"https:\/\/&amp;lt;DDNS-Domain&amp;gt;:8082\/iqontrol\/index.html?namespace=iqontrol.0\"\r\nURL_LAN=\"https:\/\/&amp;lt;LAN-IP&amp;gt;:8082\/iqontrol\/index.html?namespace=iqontrol.0\"\r\n\r\nif timeout 2 bash -c \"&amp;lt;\/dev\/tcp\/&amp;lt;DDNS-Domain&amp;gt;\/8082\" 2&amp;gt;\/dev\/null; then\r\n    URL=\"$URL_PUBLIC\"\r\nelse\r\n    URL=\"$URL_LAN\"\r\nfi\r\n\r\nfirefox-esr -P iobroker --class=iobroker --window-size=1600,900 \"$URL\"<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-6\">6<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-7\">7<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-8\">8<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-9\">9<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-10\">10<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-11\">11<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-12\">12<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-1\"><span class=\"crayon-p\">#!\/bin\/bash<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-2\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-3\"><span class=\"crayon-v\">URL_PUBLIC<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"https:\/\/&amp;lt;DDNS-Domain&amp;gt;:8082\/iqontrol\/index.html?namespace=iqontrol.0\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-4\"><span class=\"crayon-v\">URL_LAN<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"https:\/\/&amp;lt;LAN-IP&amp;gt;:8082\/iqontrol\/index.html?namespace=iqontrol.0\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-5\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-6\"><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">timeout<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">bash<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">c<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&amp;lt;\/dev\/tcp\/&amp;lt;DDNS-Domain&amp;gt;\/8082\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">gt<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">then<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-7\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">URL<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"$URL_PUBLIC\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-8\"><span class=\"crayon-st\">else<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-9\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">URL<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"$URL_LAN\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-10\"><span class=\"crayon-e\">fi<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-11\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4a014825599-12\"><span class=\"crayon-v\">firefox<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">esr<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">P<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">iobroker<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-t\">class<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-v\">iobroker<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-v\">window<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">size<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-cn\">1600<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-cn\">900<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$URL\"<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0002 seconds] -->\r\n<p>Rechte anpassen:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4c366002187\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nchmod +x ~\/start-iobroker-ff-appmode.sh<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c4c366002187-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4c366002187-1\"><span class=\"crayon-v\">chmod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">+<\/span><span class=\"crayon-v\">x<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">start<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">iobroker<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">ff<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">appmode<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">sh<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>5. Desktop-Shortcut erstellen (optional)<\/h2>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4e000690553\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nnano ~\/Desktop\/ioBroker.desktop<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c4e000690553-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c4e000690553-1\"><span class=\"crayon-v\">nano<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">Desktop<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ioBroker<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">desktop<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Inhalt:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3c51816675644\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n[Desktop Entry]\r\nName=ioBroker iqControl\r\nExec=\/home\/USER\/start-iobroker.sh\r\nType=Application\r\nIcon=firefox-esr\r\nCategories=Utility;\r\nTerminal=false<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c51816675644-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c51816675644-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c51816675644-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c51816675644-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c51816675644-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c51816675644-6\">6<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c51816675644-7\">7<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c51816675644-1\"><span class=\"crayon-sy\">[<\/span><span class=\"crayon-e\">Desktop <\/span><span class=\"crayon-v\">Entry<\/span><span class=\"crayon-sy\">]<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c51816675644-2\"><span class=\"crayon-v\">Name<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-e\">ioBroker <\/span><span class=\"crayon-e\">iqControl<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c51816675644-3\"><span class=\"crayon-v\">Exec<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">USER<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">start<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">iobroker<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">sh<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c51816675644-4\"><span class=\"crayon-v\">Type<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-e\">Application<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c51816675644-5\"><span class=\"crayon-v\">Icon<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-v\">firefox<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">esr<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c51816675644-6\"><span class=\"crayon-v\">Categories<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-v\">Utility<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c51816675644-7\"><span class=\"crayon-v\">Terminal<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-t\">false<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0002 seconds] -->\r\n<p>Rechte anpassen:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3c53534004500\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nchmod +x ~\/Desktop\/ioBroker.desktop<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c53534004500-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c53534004500-1\"><span class=\"crayon-v\">chmod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">+<\/span><span class=\"crayon-v\">x<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">Desktop<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ioBroker<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">desktop<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>6. Autostart (optional)<\/h2>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3c56195713673\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nmkdir -p ~\/.config\/autostart\r\ncp ~\/Desktop\/ioBroker.desktop ~\/.config\/autostart\/<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c56195713673-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3c56195713673-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c56195713673-1\"><span class=\"crayon-v\">mkdir<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">config<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">autostart<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3c56195713673-2\"><span class=\"crayon-v\">cp<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">Desktop<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ioBroker<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">desktop<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">config<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">autostart<\/span><span class=\"crayon-o\">\/<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>Hinweise<\/h2>\n<ul>\n<li>WAN wird bevorzugt genutzt (<code>https:\/\/&lt;DDNS-Domain&gt;<\/code>)<\/li>\n<li>LAN dient als Backup (<code>https:\/\/&lt;LAN-IP&gt;<\/code>)<\/li>\n<li>SSL funktioniert nur f\u00fcr Domainnamen<\/li>\n<li>IP-Zugriff bleibt Notfallpfad ohne g\u00fcltiges Zertifikat<\/li>\n<li>Firefox l\u00e4uft im stark reduzierten App-\/Kiosk-Modus<\/li>\n<\/ul>\n<hr \/>\n<h2>Erweiterungen (optional)<\/h2>\n<ul>\n<li>systemd Service statt Desktop-Start<\/li>\n<li>Anzeige WAN\/LAN im Fenstertitel<\/li>\n<li>echtes Kiosk-System (GNOME \/ Wayland)<\/li>\n<li>Touchscreen-Optimierung f\u00fcr Wanddisplay<\/li>\n<li>automatische Offline-Erkennung und Retry-Logik<\/li>\n<\/ul>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/>by Speefak<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ol data-start=\"717\" data-end=\"894\">\n<li data-section-id=\"1fuoj8a\" data-start=\"846\" data-end=\"894\">\n<hr \/>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Ziel dieses Setups ist es, ioBroker iqControl in Firefox wie eine eigenst\u00e4ndige App zu betreiben. Der Browser wird dabei technisch weiter genutzt, aber optisch und funktional so stark reduziert, dass er wie ein dedizierter Kiosk-Client f\u00fcr das Dashboard wirkt. Konkret wird erreicht: kein sichtbarer Browser-Chrome (Tabs, Adressleiste, Men\u00fcs) feste Fenstergr\u00f6\u00dfe beim Start, ver\u00e4nderbar nach Start [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[109,111],"tags":[],"class_list":["post-8674","post","type-post","status-publish","format-standard","hentry","category-iobroker","category-smart-home"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":5,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/iobroker\/\" rel=\"category tag\">ioBroker<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/smart-home\/\" rel=\"category tag\">Smart Home<\/a>","rttpg_excerpt":"Ziel dieses Setups ist es, ioBroker iqControl in Firefox wie eine eigenst\u00e4ndige App zu betreiben. Der Browser wird dabei technisch weiter genutzt, aber optisch und funktional so stark reduziert, dass er wie ein dedizierter Kiosk-Client f\u00fcr das Dashboard wirkt. Konkret wird erreicht: kein sichtbarer Browser-Chrome (Tabs, Adressleiste, Men\u00fcs) feste Fenstergr\u00f6\u00dfe beim Start, ver\u00e4nderbar nach Start&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8674","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=8674"}],"version-history":[{"count":0,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8674\/revisions"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=8674"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=8674"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=8674"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":8657,"date":"2026-02-23T15:06:44","date_gmt":"2026-02-23T14:06:44","guid":{"rendered":"https:\/\/speefak.spdns.de\/oss_lifestyle\/?p=8657"},"modified":"2026-02-23T15:37:50","modified_gmt":"2026-02-23T14:37:50","slug":"zoneminder-datenbank-und-events-speicherverbrauch-reduzieren","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/zoneminder-datenbank-und-events-speicherverbrauch-reduzieren\/","title":{"rendered":"ZoneMinder: Datenbank und Events Speicherverbrauch reduzieren"},"content":{"rendered":"<p data-start=\"161\" data-end=\"413\">ZoneMinder kann bei l\u00e4ngerer Laufzeit ohne Optimierungen sehr gro\u00dfe Datenmengen in der MySQL-Datenbank, Event-Speiche und im Dateisystem erzeugen. Ohne geeignete Aufbewahrungs- und Bereinigungsstrategien kann dies zu starkem Speicherverbrauch und Performance-Einbu\u00dfen f\u00fchren. Die nachfolgenden Konfigurationsma\u00dfnahmen zielen darauf ab, das Datenvolumen planbar zu begrenzen, ohne die Kernfunktionen (Motion Detection, Recording, Event Review) funktional einzuschr\u00e4nken.<\/p>\n<hr \/>\n<h4>Zielsetzung<\/h4>\n<ul>\n<li data-start=\"627\" data-end=\"661\">Begrenzung der Event-Retention<\/li>\n<li data-start=\"627\" data-end=\"661\">Reduktion der Tabellenwachstumsrate (insbesondere <code data-start=\"714\" data-end=\"722\">Frames<\/code>)<\/li>\n<li data-start=\"627\" data-end=\"661\">Stabilisierung der Datenbankgr\u00f6\u00dfe<\/li>\n<li>Minimierung manueller Wartungsma\u00dfnahmen<\/li>\n<\/ul>\n<h4 data-start=\"854\" data-end=\"932\">Bei konsistenter Konfiguration sind typischerweise folgende Gr\u00f6\u00dfen erreichbar:<\/h4>\n<ul data-start=\"934\" data-end=\"1148\">\n<li data-start=\"934\" data-end=\"968\">Event-Retention: 7\u201330 Tage<\/li>\n<li>Frames-Tabelle: &lt; 500.000 Datens\u00e4tze<\/li>\n<li>frames.ibd (InnoDB): ca. 300\u2013500 MB<\/li>\n<li>Wachstumsrate: nur noch geringer, linearer Zuwachs von Datenbank und Event-Storage<br \/>\n<hr \/>\n<\/li>\n<\/ul>\n<h4>1. Automatische L\u00f6schung alter Events einrichten<\/h4>\n<p>Entfernt automatisch Events, die \u00e4lter als ein definierter Zeitraum sind. Das ist die effektivste Ma\u00dfnahme gegen unbegrenztes Wachstum von Datenbank und Speicherplatz.<\/p>\n<p>&#8211; Filter \u2192 Neuer Filter<br \/>\n&#8211; Bedingung: StartTime &lt; 7 Tage (oder 14\/30 Tage)<br \/>\n&#8211; Aktion: Delete (inkl. aller zugeh\u00f6rigen Dateien und DB-Eintr\u00e4ge)<br \/>\n&#8211; Automatische Ausf\u00fchrung aktivieren (PurgeWhenFull oder regelm\u00e4\u00dfig)<\/p>\n<h4>2. Anzahl der Frames in der Datenbank stark reduzieren<\/h4>\n<p>Durch BULK_FRAME_INTERVAL wird bei kontinuierlicher Aufnahme nur jeder n-te Frame in die Frames-Tabelle geschrieben. Dadurch sinkt die Anzahl der Datenbankzeilen um 95\u201399 %.<\/p>\n<p>&#8211; Optionen \u2192 Konfig.<br \/>\n&#8211; BULK_FRAME_INTERVAL auf 200\u2013500 setzen (empfohlen: 200)<br \/>\n\u2192 Nur jeder n-te Frame wird bei kontinuierlicher Aufnahme in die Frames-Tabelle geschrieben<\/p>\n<h4>3. Speicherung von Einzelbildern (JPEGs) minimieren<\/h4>\n<p>Deaktiviert oder beschr\u00e4nkt die Erzeugung von JPEG-Dateien pro Frame. Das spart massiv Speicherplatz im Events-Verzeichnis und reduziert indirekt Datenbank-Eintr\u00e4ge.<\/p>\n<p>&#8211; Pro Monitor oder global (Optionen \u2192 Storage):<br \/>\n&#8211; Save JPEGs \u2192 Disabled oder Alarm Frames Only<br \/>\n&#8211; Image Store \u2192 Frames Only oder komplett deaktiviert<\/p>\n<h4>4. Event-Statistiken deaktivieren<\/h4>\n<p>Verhindert das Schreiben detaillierter Frame-Statistiken in die Stats-Tabelle. Bei den meisten Installationen unn\u00f6tig und verursacht oft unn\u00f6tiges Wachstum auf mehrere GB.<\/p>\n<p>&#8211; Optionen \u2192 Logging<br \/>\n&#8211; RECORD_EVENT_STATS \u2192 No<br \/>\n\u2192 Verhindert Wachstum der Stats-Tabelle<\/p>\n<h4>5. Audit-Daemon ressourcenschonend konfigurieren<\/h4>\n<p>Der Audit-Daemon r\u00e4umt verwaiste Eintr\u00e4ge (Orphans) auf. Ein zu kurzes Intervall belastet CPU und IO unn\u00f6tig \u2013 ein l\u00e4ngeres Intervall reicht bei normalem Betrieb aus.<\/p>\n<p>&#8211; Optionen \u2192 System<br \/>\n&#8211; ZM_RUN_AUDIT \u2192 Yes<br \/>\n&#8211; ZM_AUDIT_CHECK_INTERVAL \u2192 21600 (6 Stunden) oder 86400 (24 Stunden)<\/p>\n<h4>6. Nach Konfigurations\u00e4nderungen und Purge Platz freigeben<\/h4>\n<p>Die genannten Befehle stoppen tempor\u00e4r ZoneMinder, r\u00e4umen Reste auf, optimieren die Tabellen und geben den physischen Speicherplatz im Dateisystem wirklich frei.<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3fe5763607165\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsystemctl stop zoneminder\r\nzmaudit.pl -f\r\nmysql -u root zm -e \"OPTIMIZE TABLE Frames;\"\r\nmysql -u root zm -e \"OPTIMIZE TABLE Stats;\"\r\nsystemctl restart mysql\r\nsystemctl start zoneminder<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3fe5763607165-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3fe5763607165-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3fe5763607165-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3fe5763607165-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3fe5763607165-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3fe5763607165-6\">6<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3fe5763607165-1\"><span class=\"crayon-e\">systemctl <\/span><span class=\"crayon-e\">stop <\/span><span class=\"crayon-e\">zoneminder<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3fe5763607165-2\"><span class=\"crayon-v\">zmaudit<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">pl<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">f<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3fe5763607165-3\"><span class=\"crayon-v\">mysql<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">u<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">root <\/span><span class=\"crayon-v\">zm<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">e<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"OPTIMIZE TABLE Frames;\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3fe5763607165-4\"><span class=\"crayon-v\">mysql<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">u<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">root <\/span><span class=\"crayon-v\">zm<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">e<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"OPTIMIZE TABLE Stats;\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3fe5763607165-5\"><span class=\"crayon-e\">systemctl <\/span><span class=\"crayon-e\">restart <\/span><span class=\"crayon-e\">mysql<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3fe5763607165-6\"><span class=\"crayon-e\">systemctl <\/span><span class=\"crayon-e\">start <\/span><span class=\"crayon-v\">zoneminder<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<h4>7. Regelm\u00e4\u00dfige \u00dcberpr\u00fcfung der Entwicklung<\/h4>\n<p>Die angegebenen Kommandos zeigen die aktuelle Anzahl von Events und Frames sowie die reale Dateigr\u00f6\u00dfe der wichtigsten Tabellen. So l\u00e4sst sich der Erfolg der Ma\u00dfnahmen \u00fcberpr\u00fcfen.<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b3fef612332940\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nmysql -u root zm -e \"SELECT COUNT(*) FROM Events;\"\r\nmysql -u root zm -e \"SELECT COUNT(*) FROM Frames;\"\r\nls -lh \/var\/lib\/mysql\/zm\/Frames.ibd\r\ndf -h \/var\/cache\/zoneminder\/event<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3fef612332940-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3fef612332940-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3fef612332940-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b3fef612332940-4\">4<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3fef612332940-1\"><span class=\"crayon-v\">mysql<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">u<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">root <\/span><span class=\"crayon-v\">zm<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">e<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"SELECT COUNT(*) FROM Events;\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3fef612332940-2\"><span class=\"crayon-v\">mysql<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">u<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">root <\/span><span class=\"crayon-v\">zm<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">e<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"SELECT COUNT(*) FROM Frames;\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3fef612332940-3\"><span class=\"crayon-v\">ls<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">lh<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">var<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">lib<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">mysql<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">zm<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">Frames<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">ibd<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b3fef612332940-4\"><span class=\"crayon-v\">df<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">h<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">var<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">cache<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">zoneminder<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">event<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0002 seconds] -->\r\n<p><\/p>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/>by Speefak<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ZoneMinder kann bei l\u00e4ngerer Laufzeit ohne Optimierungen sehr gro\u00dfe Datenmengen in der MySQL-Datenbank, Event-Speiche und im Dateisystem erzeugen. Ohne geeignete Aufbewahrungs- und Bereinigungsstrategien kann dies zu starkem Speicherverbrauch und Performance-Einbu\u00dfen f\u00fchren. Die nachfolgenden Konfigurationsma\u00dfnahmen zielen darauf ab, das Datenvolumen planbar zu begrenzen, ohne die Kernfunktionen (Motion Detection, Recording, Event Review) funktional einzuschr\u00e4nken. Zielsetzung Begrenzung der [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43,96,112],"tags":[],"class_list":["post-8657","post","type-post","status-publish","format-standard","hentry","category-sicherheit","category-video-ueberwachung","category-zoneminder"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/sicherheit\/\" rel=\"category tag\">Sicherheit<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/video-ueberwachung\/\" rel=\"category tag\">Video \u00dcberwachung<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/zoneminder\/\" rel=\"category tag\">Zoneminder<\/a>","rttpg_excerpt":"ZoneMinder kann bei l\u00e4ngerer Laufzeit ohne Optimierungen sehr gro\u00dfe Datenmengen in der MySQL-Datenbank, Event-Speiche und im Dateisystem erzeugen. Ohne geeignete Aufbewahrungs- und Bereinigungsstrategien kann dies zu starkem Speicherverbrauch und Performance-Einbu\u00dfen f\u00fchren. Die nachfolgenden Konfigurationsma\u00dfnahmen zielen darauf ab, das Datenvolumen planbar zu begrenzen, ohne die Kernfunktionen (Motion Detection, Recording, Event Review) funktional einzuschr\u00e4nken. Zielsetzung Begrenzung der&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8657","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=8657"}],"version-history":[{"count":0,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8657\/revisions"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=8657"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=8657"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=8657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":8617,"date":"2026-02-06T20:05:49","date_gmt":"2026-02-06T19:05:49","guid":{"rendered":"https:\/\/speefak.spdns.de\/oss_lifestyle\/?p=8617"},"modified":"2026-02-12T09:01:45","modified_gmt":"2026-02-12T08:01:45","slug":"epg-fuer-iptv-kanaele-in-tvheadend-einrichten-und-automatisch-aktualisieren","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/epg-fuer-iptv-kanaele-in-tvheadend-einrichten-und-automatisch-aktualisieren\/","title":{"rendered":"EPG f\u00fcr IPTV-Kan\u00e4le in Tvheadend einrichten und automatisch aktualisieren"},"content":{"rendered":"<p>F\u00fcr die Bereitstellung von Elektronischen Programmf\u00fchrern (EPG) f\u00fcr IPTV-Kan\u00e4le in Tvheadend existieren zwei grundlegend verschiedene Ans\u00e4tze:<\/p>\n<p><strong>Nutzung der EIT-Daten eines DVB-S-Transponders (sehr einfache Methode)<\/strong> Wenn mindestens ein Sender desselben Transponders (z. B. 12551 H bei Astra 19.2\u00b0) \u00fcber DVB-S empfangen werden kann, lassen sich die vom Transponder \u00fcbertragenen EIT\/OTA-EPG-Daten auch f\u00fcr IPTV-Kan\u00e4le nutzen, die selbst nicht per Satellit empfangen werden (z. B. 3sat IPTV). Da die EPG-Daten f\u00fcr den gesamten Transponder gemeinsam \u00fcbertragen werden, reicht der Empfang eines beliebigen Senders dieses Transponders aus, um dieProgramminformationen aller zugeh\u00f6rigen Sender \u2013 einschlie\u00dflich nicht empfangener Kan\u00e4le \u2013 zu erhalten. Die Zuordnung erfolgt in Tvheadend \u00fcber die \u201eEPG-Reuse\u201c-Funktion.<\/p>\n<p><strong>Import externer XMLTV-Daten (flexible, aber aufw\u00e4ndigere Methode)<\/strong> Alternativ k\u00f6nnen Programmdaten unabh\u00e4ngig von einem DVB-S-Empfang \u00fcber externe XMLTV-Quellen eingepflegt werden. Hierzu wird eine XMLTV-Datei heruntergeladen, \u00fcber einen Unix-Socket oder eine Datei in Tvheadend importiert und den IPTV-Kan\u00e4len manuell oder halbautomatisch zugeordnet. Diese Variante erfordert die Einrichtung eines zus\u00e4tzlichen EPG-Grabbers sowie \u2013 f\u00fcr einen automatisierten Betrieb \u2013 ein entsprechendes Update-Skript (z. B. per Cron-Job) inklusive Fehlerbehandlung und Fallback-Mechanismen.<\/p>\n<p dir=\"auto\">Die nachfolgenden Abschnitte beschreiben beide Verfahren detailliert. Die erste Methode (EPG-Reuse) ist in den meisten Haushalten mit vorhandenem Sat-Empfang die deutlich einfachere und wartungs\u00e4rmere L\u00f6sung.<\/p>\n<hr \/>\n<h2>\u00dcbernahme der EPG-Daten vom DVB-S-Transponder<\/h2>\n<p>In der vorliegenden Konfiguration ist ein Empfang von 3sat \u00fcber DVB-S nicht m\u00f6glich. Es besteht jedoch ein stabiler DVB-S-Empfang von anderen Sendern, die auf demselben Transponder wie 3sat \u00fcbertragen werden (12551 MHz Horizontal, SR 22000). Somit k\u00f6nnen die Transponder EPG Daten f\u00fcr den 3sat IPTV Stream verwendet werden. Diese Vorgehensweise gilt in den meisten Anwendungsf\u00e4llen als die effizienteste, stabilste und wartungs\u00e4rmste L\u00f6sung.<\/p>\n<h4>Voraussetzungen<\/h4>\n<p>&#8211; Mindestens einer der folgenden Sender ist \u00fcber DVB-S empfangbar:<br \/>\nDas Erste HD, ZDF HD, arte HD, phoenix HD, KiKA HD<br \/>\n(Transponder: 12551 MHz H, Symbolrate 22000, FEC 5\/6)<br \/>\n&#8211; Der Kanal 3sat ist als IPTV-Stream in Tvheadend eingerichtet und einem Kanal zugeordnet<\/p>\n<h4>Konfigurationsschritte<\/h4>\n<p>1. Zur\u00fccksetzen der EPG-Quelle<br \/>\n\u2192 Konfiguration \u2192 Kanal \/ EPG \u2192 Kan\u00e4le<br \/>\n\u2192 Kanal \u201e3sat HD\u201c (IPTV) ausw\u00e4hlen \u2192 Bearbeiten<br \/>\n\u2192 Feld EPG-Quelle auf \u201eNicht gesetzt\u201c setzen<br \/>\n\u2192 \u00c4nderungen speichern<\/p>\n<p>2. Zuweisung der EPG-Daten \u00fcber die Reuse-Funktion<br \/>\n\u2192 Im Bearbeitungsfenster des Kanals \u201e3sat HD\u201c zu den Experten-Einstellungen navigieren<br \/>\n\u2192 Feld Benutze EPG von:<br \/>\nEinen Sender desselben Transponders ausw\u00e4hlen, z. B.:<br \/>\n&#8211; Das Erste HD<br \/>\n&#8211; ZDF HD<br \/>\n&#8211; arte HD<br \/>\n&#8211; phoenix HD<br \/>\n\u2192 \u00c4nderungen speichern und \u00fcbernehmen<\/p>\n<p>3. \u00dcberpr\u00fcfung und Priorisierung des EIT-Grabbers<br \/>\n\u2192 Konfiguration \u2192 Kanal \/ EPG \u2192 EPG-Grabber-Module<br \/>\n&#8211; Modul EIT: DVB Grabber muss aktiviert sein<br \/>\n&#8211; Priorit\u00e4t auf Wert 1 oder 2 setzen (h\u00f6her als XMLTV-Module)<br \/>\n&#8211; Andere Grabber-Module (insbesondere XMLTV) gegebenenfalls tempor\u00e4r deaktivieren<\/p>\n<p>4. Aktualisierung der EPG-Daten<br \/>\n&#8211; Automatische Aktualisierung abwarten (meist innerhalb von 10\u201360 Minuten)<br \/>\n&#8211; Alternativ: Manuelles Ansto\u00dfen des Internal EPG Grabber \u00fcber die Benutzeroberfl\u00e4che<\/p>\n<p>Nach erfolgreicher \u00dcbernahme werden im Elektronischen Programmf\u00fchrer (EPG) f\u00fcr den Kanal 3sat HD die vollst\u00e4ndigen EIT-Daten des Transponders 12551 H angezeigt. Kan\u00e4le des Transponders 12515 V (Vertical) sind nicht geeignet, da dort eine andere EIT-Tabelle \u00fcbertragen wird.<\/p>\n<p>Vorteile der Methode<br \/>\n&#8211; Keine Abh\u00e4ngigkeit von externen Programmdatenquellen<br \/>\n&#8211; Hohe Datenqualit\u00e4t (inkl. Genre, Episodeninformationen, detaillierte Beschreibungen)<br \/>\n&#8211; Vollst\u00e4ndig wartungs- und kostenfrei<br \/>\n&#8211; Direkte Nutzung der nativen EIT-Daten von Astra 19.2\u00b0 E<\/p>\n<hr \/>\n<h2 dir=\"auto\">EPG-Daten aus externen Quellen beziehen (XMLTV-Methode)<\/h2>\n<p dir=\"auto\">Wenn kein DVB-S-, DVB-C- oder DVB-T-Empfang verf\u00fcgbar ist, k\u00f6nnen Programminformationen (EPG) \u00fcber externe XMLTV-Datenquellen bereitgestellt werden. Diese L\u00f6sung nutzt externe XMLTV-Quellen, ein automatisches Kanal-Mapping sowie ein Update-Skript das \u00fcber einen Unix-Socket EPG Daten in Tvheadend importiert. Dadurch entsteht eine zuverl\u00e4ssige und weitgehend wartungsarme EPG-Versorgung. Ein t\u00e4glicher Cron-Job sorgt f\u00fcr die automatische Aktualisierung.<\/p>\n<ul>\n<li dir=\"auto\"><strong>Externe XMLTV-Quellen:<\/strong> Bis zu 14 Tage Programmvorlauf durch \u00f6ffentlich aktualisierte Quellen; Unterst\u00fctzung f\u00fcr komprimierte und unkomprimierte XML-Formate.<\/li>\n<li dir=\"auto\"><strong>Kanal-Mapping:<\/strong> Einmalige manuelle Zuordnung im Tvheadend-Webinterface; dauerhafte Verkn\u00fcpfung \u00fcber standardisierte XMLTV-Channel-IDs.<\/li>\n<li dir=\"auto\"><strong>Robustes Skript:<\/strong> Prim\u00e4rquelle (<code class=\"font-weight-400 rounded-md bg-state-ghost-hover p-1 text-sm whitespace-normal\" data-testid=\"code-block\">epgshare01<\/code>) mit Fallback (<code class=\"font-weight-400 rounded-md bg-state-ghost-hover p-1 text-sm whitespace-normal\" data-testid=\"code-block\">open-epg<\/code>); umfangreiche Fehlerbehandlung und Logging.<\/li>\n<li dir=\"auto\"><strong>Automatische Updates:<\/strong> T\u00e4glicher Import (z. B. 04:30 Uhr) im Hintergrund; Integration in Systemd-Journal f\u00fcr zentrale \u00dcberwachung.<\/li>\n<\/ul>\n<h4>Voraussetzungen<\/h4>\n<p>&#8211; Tvheadend l\u00e4uft nativ auf Debian (kein Docker)<br \/>\n&#8211; Externer XMLTV-Grabber ist aktiviert (External: XMLTV mit Socket \/var\/lib\/tvheadend\/epggrab\/xmltv.sock)<br \/>\n&#8211; Der Benutzer \u201ehts\u201c existiert und Tvheadend l\u00e4uft unter diesem Benutzer<br \/>\n&#8211; socat ist installiert (<code>sudo apt install socat<\/code>)<br \/>\n&#8211; IPTV-Kan\u00e4le sind bereits in Tvheadend angelegt<\/p>\n<h4>EPG-Grabber einmalig konfigurieren<\/h4>\n<p>1. Tvheadend-Webinterface \u00f6ffnen<br \/>\n\u2192 Configuration \u2192 General \u2192 Base<br \/>\n\u2192 User interface level = Expert \u2192 Save<\/p>\n<p>2. EPG-Grabber aktivieren<br \/>\n\u2192 Configuration \u2192 Channel\/EPG \u2192 EPG Grabber Modules<br \/>\n\u2192 External: XMLTV doppelt anklicken<br \/>\n\u2192 Aktiviert = Ja<br \/>\n\u2192 Priorit\u00e4t = 1<br \/>\n\u2192 Pfad = <code>\/var\/lib\/tvheadend\/epggrab\/xmltv.sock<\/code> (meist schon vorausgef\u00fcllt)<br \/>\n\u2192 Save<\/p>\n<p>3. Retention-Einstellungen setzen<br \/>\n\u2192 Configuration \u2192 Channel\/EPG \u2192 EPG Grabber<br \/>\n\u2192 Speichere EPG periodisch auf Festplatte (Stunden) = 336 oder 720<br \/>\n\u2192 Save EPG to disk after xmltv import = Ja (H\u00e4kchen)<br \/>\n\u2192 Save<\/p>\n<h4>EPG-Quelle ausw\u00e4hlen und testen<\/h4>\n<p>Empfohlene Quellen (Stand 2026):<\/p>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr>\n<td style=\"width: 20%;\">Quelle<\/td>\n<td style=\"width: 20%;\">URL \/ Befehl<\/td>\n<td style=\"width: 20%;\">Gr\u00f6\u00dfe<\/td>\n<td style=\"width: 20%;\">Tage ca.<\/td>\n<td style=\"width: 20%;\">Kommentar<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 20%;\">open-epg (schnell)<\/td>\n<td style=\"width: 20%;\">wget https:\/\/www.open-epg.com\/files\/germany1.xml -O \/tmp\/epg.xml<\/td>\n<td style=\"width: 20%;\">~1\u20135 MB<\/td>\n<td style=\"width: 20%;\">1\u20133 Tage<\/td>\n<td style=\"width: 20%;\">Sehr aktuell, klein &amp; schnell<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 20%;\"><\/td>\n<td style=\"width: 20%;\"><\/td>\n<td style=\"width: 20%;\"><\/td>\n<td style=\"width: 20%;\"><\/td>\n<td style=\"width: 20%;\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Test-Import (nach Download):<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b4323747404149\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo chown hts:hts \/tmp\/epg.xml\r\nsudo cat \/tmp\/epg.xml | socat - UNIX-CONNECT:\/var\/lib\/tvheadend\/epggrab\/xmltv.sock<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4323747404149-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4323747404149-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4323747404149-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">chown <\/span><span class=\"crayon-v\">hts<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-v\">hts<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">tmp<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">epg<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">xml<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4323747404149-2\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">cat<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">tmp<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">epg<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">xml<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">|<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">socat<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">UNIX<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">CONNECT<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">var<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">lib<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">tvheadend<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">epggrab<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">xmltv<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">sock<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0002 seconds] -->\r\n<p>Log pr\u00fcfen (live):<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b432e824810094\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo journalctl -t tvheadend | tail -n20  #last 20 entries\r\nsudo journalctl -t tvheadend -fn          #livelog<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b432e824810094-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b432e824810094-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b432e824810094-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">journalctl<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">t<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">tvheadend<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">|<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">tail<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">n20<\/span><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-p\">#last 20 entries<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b432e824810094-2\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">journalctl<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">t<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">tvheadend<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">fn<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-p\">#livelog<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Wichtige Zeilen:<br \/>\n&#8211; <code>xmltv: broadcasts tot= ... new= ...<\/code> \u2192 Zahl &gt; 0 = Erfolg<br \/>\n&#8211; <code>epgdb: broadcasts ...<\/code> \u2192 zeigt Gesamtzahl<\/p>\n<h4>IPTV-Kan\u00e4le mit EPG verkn\u00fcpfen<\/h4>\n<p>1. Configuration \u2192 Channel\/EPG \u2192 Channels<br \/>\n2. Jeden IPTV-Kanal (z. B. 3sat) bearbeiten<br \/>\n3. Feld <strong>EPG Source<\/strong> oder <strong>XMLTV channel ID<\/strong> anklicken<br \/>\n4. Aus Dropdown den passenden Eintrag w\u00e4hlen (h\u00e4ufig: <code>3sat.de<\/code>, <code>3sat<\/code>, <code>C3SAT<\/code>, <code>3sat HD<\/code>)<br \/>\n5. Speichern<\/p>\n<p>Nach Mapping \u2192 EPG in Web-Interface oder Kodi nach kurzer Zeit sichtbar.<\/p>\n<h4>Automatisches t\u00e4gliches Update (Cron-Script)<\/h4>\n<p>Script erstellen (ggf. germany1.xml und germany2.xml zusammenf\u00fchren)<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n#!\/bin\/bash\r\n# \/usr\/local\/bin\/tvh_epg_update.sh \r\n\r\nset -e\r\n\r\n# ==================== Settings ====================\r\nEPG_URL=\"https:\/\/www.open-epg.com\/files\/germany1.xml\" # EPG_URL=\"https:\/\/www.open-epg.com\/files\/germany2.xml\"\r\nTEMP_XML=\"\/tmp\/epg.xml\"\r\nSOCKET=\"\/var\/lib\/tvheadend\/epggrab\/xmltv.sock\"\r\n\r\n# ==================== Functions ====================\r\nlog() {\r\n    echo \"$*\" | systemd-cat -t tvheadend -p info\r\n}\r\n\r\nerror() {\r\n    echo \"ERROR: $*\" | systemd-cat -t tvheadend -p err\r\n}\r\n\r\n# ==================== Main Logic ====================\r\n\r\nlog \"Starting EPG update\"\r\n\r\n# Remove old files\r\nrm -f \"$TEMP_XML\" 2&gt;\/dev\/null || true\r\n\r\n# Try primary source\r\nlog \"Downloading EPG from $EPG_URL...\"\r\nif wget -q --no-check-certificate -O \"$TEMP_XML\" \"$EPG_URL\"; then\r\n    log \"Download from $EPG_URL successful\"\r\nelse\r\n    MSG=\"Download from $EPG_URL failed. Please consider using WebGrab+Plus as an alternative EPG source.\"\r\n    error \"$MSG\"\r\n    echo \"$MSG\"\r\n    exit 1\r\nfi\r\n\r\n# Check if the file exists\r\nif [ ! -f \"$TEMP_XML\" ]; then\r\n    error \"EPG file $TEMP_XML does not exist\"\r\n    exit 1\r\nfi\r\n\r\n# Set permissions\r\nchown hts:hts \"$TEMP_XML\" || error \"chown failed for $TEMP_XML\"\r\n\r\n# Start import\r\nlog \"Importing EPG from $TEMP_XML into Tvheadend...\"\r\nif cat \"$TEMP_XML\" | socat - UNIX-CONNECT:\"$SOCKET\"; then\r\n    log \"Import completed successfully\"\r\nelse\r\n    error \"Socket import failed for $TEMP_XML\"\r\n    exit 1\r\nfi\r\n\r\n# Clean up\r\nrm -f \"$TEMP_XML\" 2&gt;\/dev\/null || true\r\n\r\nlog \"EPG update fully completed\"\r\nexit 0<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-6\">6<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-7\">7<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-8\">8<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-9\">9<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-10\">10<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-11\">11<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-12\">12<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-13\">13<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-14\">14<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-15\">15<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-16\">16<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-17\">17<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-18\">18<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-19\">19<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-20\">20<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-21\">21<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-22\">22<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-23\">23<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-24\">24<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-25\">25<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-26\">26<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-27\">27<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-28\">28<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-29\">29<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-30\">30<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-31\">31<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-32\">32<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-33\">33<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-34\">34<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-35\">35<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-36\">36<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-37\">37<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-38\">38<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-39\">39<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-40\">40<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-41\">41<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-42\">42<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-43\">43<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-44\">44<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-45\">45<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-46\">46<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-47\">47<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-48\">48<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-49\">49<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-50\">50<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-51\">51<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-52\">52<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-53\">53<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-54\">54<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-55\">55<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-56\">56<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-57\">57<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-58\">58<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-59\">59<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-60\">60<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-1\"><span class=\"crayon-p\">#!\/bin\/bash<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-2\"><span class=\"crayon-p\"># \/usr\/local\/bin\/tvh_epg_update.sh <\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-3\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-4\"><span class=\"crayon-v\">set<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">e<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-5\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-6\"><span class=\"crayon-p\"># ==================== Settings ====================<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-7\"><span class=\"crayon-v\">EPG_URL<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"https:\/\/www.open-epg.com\/files\/germany1.xml\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-p\"># EPG_URL=\"https:\/\/www.open-epg.com\/files\/germany2.xml\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-8\"><span class=\"crayon-v\">TEMP_XML<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"\/tmp\/epg.xml\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-9\"><span class=\"crayon-v\">SOCKET<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"\/var\/lib\/tvheadend\/epggrab\/xmltv.sock\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-10\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-11\"><span class=\"crayon-p\"># ==================== Functions ====================<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-12\"><span class=\"crayon-e\">log<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">{<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-13\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$*\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">|<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">systemd<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">cat<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">t<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">tvheadend<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">info<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-14\"><span class=\"crayon-sy\">}<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-15\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-16\"><span class=\"crayon-e\">error<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">{<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-17\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"ERROR: $*\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">|<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">systemd<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">cat<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">t<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">tvheadend<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">err<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-18\"><span class=\"crayon-sy\">}<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-19\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-20\"><span class=\"crayon-p\"># ==================== Main Logic ====================<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-21\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-22\"><span class=\"crayon-i\">log<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Starting EPG update\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-23\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-24\"><span class=\"crayon-p\"># Remove old files<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-25\"><span class=\"crayon-v\">rm<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">f<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$TEMP_XML\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">||<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">true<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-26\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-27\"><span class=\"crayon-p\"># Try primary source<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-28\"><span class=\"crayon-i\">log<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Downloading EPG from $EPG_URL...\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-29\"><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">wget<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">q<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-v\">no<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">check<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">certificate<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">O<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$TEMP_XML\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$EPG_URL\"<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">then<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-30\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">log<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Download from $EPG_URL successful\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-31\"><span class=\"crayon-st\">else<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-32\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">MSG<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"Download from $EPG_URL failed. Please consider using WebGrab+Plus as an alternative EPG source.\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-33\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">error<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$MSG\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-34\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$MSG\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-35\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-36\"><span class=\"crayon-i\">fi<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-37\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-38\"><span class=\"crayon-p\"># Check if the file exists<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-39\"><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">f<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$TEMP_XML\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">then<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-40\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">error<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"EPG file $TEMP_XML does not exist\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-41\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-42\"><span class=\"crayon-i\">fi<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-43\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-44\"><span class=\"crayon-p\"># Set permissions<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-45\"><span class=\"crayon-e\">chown <\/span><span class=\"crayon-v\">hts<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-i\">hts<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$TEMP_XML\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">||<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">error<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"chown failed for $TEMP_XML\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-46\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-47\"><span class=\"crayon-p\"># Start import<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-48\"><span class=\"crayon-i\">log<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Importing EPG from $TEMP_XML into Tvheadend...\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-49\"><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">cat<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$TEMP_XML\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">|<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">socat<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">UNIX<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">CONNECT<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-s\">\"$SOCKET\"<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">then<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-50\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">log<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Import completed successfully\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-51\"><span class=\"crayon-st\">else<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-52\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">error<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Socket import failed for $TEMP_XML\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-53\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-54\"><span class=\"crayon-i\">fi<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-55\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-56\"><span class=\"crayon-p\"># Clean up<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-57\"><span class=\"crayon-v\">rm<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">f<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$TEMP_XML\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">||<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">true<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-58\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-59\"><span class=\"crayon-i\">log<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"EPG update fully completed\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4331599883319-60\"><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">0<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0008 seconds] -->\r\n<p><\/p>\n<h4>Script einrichten<\/h4>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b4333334455656\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo nano \/usr\/local\/bin\/tvh_epg_update.sh\r\n# (Inhalt einf\u00fcgen)\r\n\r\nsleep 1\r\nsudo chmod +x \/usr\/local\/bin\/tvh_epg_update.sh\r\nsudo chown root:root \/usr\/local\/bin\/tvh_epg_update.sh<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4333334455656-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4333334455656-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4333334455656-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4333334455656-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4333334455656-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4333334455656-6\">6<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4333334455656-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">nano<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">usr<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">local<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">tvh_epg_update<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-i\">sh<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4333334455656-2\"><span class=\"crayon-p\"># (Inhalt einf\u00fcgen)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4333334455656-3\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4333334455656-4\"><span class=\"crayon-i\">sleep<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4333334455656-5\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">chmod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">+<\/span><span class=\"crayon-v\">x<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">usr<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">local<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">tvh_epg_update<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">sh<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4333334455656-6\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">chown <\/span><span class=\"crayon-v\">root<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-v\">root<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">usr<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">local<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">tvh_epg_update<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">sh<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0002 seconds] -->\r\n<p><\/p>\n<h4>Testlauf<\/h4>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b4335707140693\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo \/usr\/local\/bin\/tvh_epg_update.sh\r\nsudo journalctl -u tvheadend -n 100 | grep -i xmltv<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4335707140693-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4335707140693-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4335707140693-1\"><span class=\"crayon-v\">sudo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">usr<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">local<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">tvh_epg_update<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">sh<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4335707140693-2\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">journalctl<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">u<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">tvheadend<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">n<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">100<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">|<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">grep<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">i<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">xmltv<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<h4>Cron einrichten (t\u00e4glich 04:30 Uhr)<\/h4>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b4338357531431\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo crontab -e<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4338357531431-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4338357531431-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">crontab<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">e<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Eintrag hinzuf\u00fcgen:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b433a655594423\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n30 4 * * * \/usr\/local\/bin\/update_epg.sh<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b433a655594423-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b433a655594423-1\"><span class=\"crayon-cn\">30<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">4<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">*<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">*<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">*<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">usr<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">local<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">update_epg<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">sh<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<hr \/>\n<p>&#8211; EPG wird jetzt t\u00e4glich automatisch aktualisiert<br \/>\n&#8211; Bei Problemen: <code>\/var\/log\/epg_update.log<\/code> und <code>journalctl -t tvheadend<\/code> pr\u00fcfen<br \/>\n&#8211; F\u00fcr noch mehr Tage: im Script weitere wget-Befehle f\u00fcr germany2.xml etc. erg\u00e4nzen und Dateien zusammenf\u00fchren (<code>cat file1 file2 &gt; combined.xml<\/code>)<\/p>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/>by Speefak<\/p>\n","protected":false},"excerpt":{"rendered":"<p>F\u00fcr die Bereitstellung von Elektronischen Programmf\u00fchrern (EPG) f\u00fcr IPTV-Kan\u00e4le in Tvheadend existieren zwei grundlegend verschiedene Ans\u00e4tze: Nutzung der EIT-Daten eines DVB-S-Transponders (sehr einfache Methode) Wenn mindestens ein Sender desselben Transponders (z. B. 12551 H bei Astra 19.2\u00b0) \u00fcber DVB-S empfangen werden kann, lassen sich die vom Transponder \u00fcbertragenen EIT\/OTA-EPG-Daten auch f\u00fcr IPTV-Kan\u00e4le nutzen, die selbst [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-8617","post","type-post","status-publish","format-standard","hentry","category-anleitungen"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/anleitungen\/\" rel=\"category tag\">Anleitungen<\/a>","rttpg_excerpt":"F\u00fcr die Bereitstellung von Elektronischen Programmf\u00fchrern (EPG) f\u00fcr IPTV-Kan\u00e4le in Tvheadend existieren zwei grundlegend verschiedene Ans\u00e4tze: Nutzung der EIT-Daten eines DVB-S-Transponders (sehr einfache Methode) Wenn mindestens ein Sender desselben Transponders (z. B. 12551 H bei Astra 19.2\u00b0) \u00fcber DVB-S empfangen werden kann, lassen sich die vom Transponder \u00fcbertragenen EIT\/OTA-EPG-Daten auch f\u00fcr IPTV-Kan\u00e4le nutzen, die selbst&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8617","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=8617"}],"version-history":[{"count":0,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8617\/revisions"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=8617"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=8617"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=8617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":8606,"date":"2026-01-29T10:56:15","date_gmt":"2026-01-29T09:56:15","guid":{"rendered":"https:\/\/speefak.spdns.de\/oss_lifestyle\/?p=8606"},"modified":"2026-01-29T15:44:57","modified_gmt":"2026-01-29T14:44:57","slug":"phpmyadmin-on-demand-unter-debian-installieren-betreiben","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/phpmyadmin-on-demand-unter-debian-installieren-betreiben\/","title":{"rendered":"phpMyAdmin On-Demand unter Debian installieren &#038; betreiben"},"content":{"rendered":"<p dir=\"auto\">phpMyAdmin l\u00e4uft nicht permanent, sondern wird nur bei Bedarf (Datenbank-Setup, Benutzerverwaltung, Fehleranalyse) kurzzeitig \u00fcber Apache gestartet und anschlie\u00dfend wieder abgeschaltet. Der Zugriff erfolgt rein lokal \u00fcber die Shell oder remote \u00fcber das Webinterface \u2013 ein direkter Netzwerkzugriff via MySQL ist ausgeschlossen. So bleibt administrativer Zugriff bewusst punktuell, lokal und zeitlich limitiert, w\u00e4hrend der Datenbankserver im Normalbetrieb keinen remote Root Login bietet.<\/p>\n<p data-start=\"614\" data-end=\"646\">Zentrale Merkmale dieses Setups:<\/p>\n<ul data-start=\"648\" data-end=\"1479\">\n<li data-start=\"648\" data-end=\"855\">phpMyAdmin wird <strong data-start=\"666\" data-end=\"709\">ordnungsgem\u00e4\u00df \u00fcber den Debian-Installer<\/strong> installiert<br data-start=\"721\" data-end=\"724\" \/>(inklusive eines <strong data-start=\"743\" data-end=\"788\">tempor\u00e4r notwendigen MySQL-Root-Passworts<\/strong>, da der Installer keine Unix-Socket-Authentifizierung unterst\u00fctzt)<\/li>\n<li data-start=\"648\" data-end=\"855\">Der MySQL\/MariaDB-Root-Benutzer ist <strong data-start=\"894\" data-end=\"941\">dauerhaft auf Unix-Socket-Authentifizierung<\/strong> konfiguriert und besitzt <strong data-start=\"967\" data-end=\"984\">kein Passwort<\/strong><\/li>\n<li data-start=\"648\" data-end=\"855\">Der <strong data-start=\"991\" data-end=\"1039\">phpMyAdmin-Benutzer erh\u00e4lt volle Root-Rechte<\/strong>, wird <strong data-start=\"1046\" data-end=\"1092\">ausschlie\u00dflich lokal (<code data-start=\"1070\" data-end=\"1081\">localhost<\/code>) genutzt<\/strong> und ist <strong data-start=\"1101\" data-end=\"1149\">nicht per direktem Netzwerk-Login erreichbar<\/strong><\/li>\n<li data-start=\"856\" data-end=\"984\">Ein <strong data-start=\"1156\" data-end=\"1197\">Remote&#8211;Root-Login ist nur indirekt m\u00f6glich<\/strong>, und zwar <strong data-start=\"1207\" data-end=\"1243\">\u00fcber das phpMyAdmin-Webinterface<\/strong>, das bewusst <strong data-start=\"1257\" data-end=\"1275\">nur bei Bedarf<\/strong> mittels<br data-start=\"1283\" data-end=\"1286\" \/><code data-start=\"1288\" data-end=\"1298\">a2ensite<\/code> aktiviert und mit <code data-start=\"1317\" data-end=\"1328\">a2dissite<\/code> wieder deaktiviert wird<\/li>\n<li data-start=\"856\" data-end=\"984\">\n<p data-start=\"858\" data-end=\"984\">Nach Abschluss der administrativen Arbeiten wird phpMyAdmin abgeschaltet, ohne Benutzer oder Berechtigungen \u00e4ndern zu m\u00fcssen<\/p>\n<\/li>\n<\/ul>\n<hr \/>\n<h2>1. PHPMyAdmin Installation auf Debian (mit MariaDB)<\/h2>\n<p>F\u00fcr die Installation und automatische Konfiguration von PHPMyAdmin \u00fcber dbconfig muss MariaDB zuvor korrekt eingerichtet sein, da PHPMyAdmin Zugriff auf die Datenbank ben\u00f6tigt, um eigene Tabellen und Benutzer anzulegen. Aktuelle Debian-Versionen verwenden daf\u00fcr den MariaDB-<code data-start=\"340\" data-end=\"346\">root<\/code>-Account \u00fcber <code data-start=\"360\" data-end=\"373\">unix_socket<\/code> sowie die Datei <code data-start=\"390\" data-end=\"413\">\/etc\/mysql\/debian.cnf<\/code>, die automatische Wartungs- und Installationsskripte unterst\u00fctzt. Die MariaDB-Installation richtet dabei automatisch den Datenbankserver ein und stellt den Wartungszugriff bereit.<\/p>\n<h4><strong>1.1 MariaDB installieren und Wartungszugriff einrichten:<\/strong><\/h4>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b4655824722508\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo apt update\r\nsudo apt install mariadb-server<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4655824722508-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4655824722508-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4655824722508-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">apt <\/span><span class=\"crayon-e\">update<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4655824722508-2\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">apt <\/span><span class=\"crayon-e\">install <\/span><span class=\"crayon-v\">mariadb<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">server<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Ohne diese Konfiguration <strong>schl\u00e4gt dbconfig bei der phpMyAdmin-Installation fehl<\/strong>, da <code>dbconfig-common<\/code> die Datenbank nicht korrekt initialisieren kann.<\/p>\n<hr \/>\n<h4><strong>1.2 PHPMyAdmin installieren:<\/strong><\/h4>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b4664685516671\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo apt install phpmyadmin<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4664685516671-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4664685516671-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">apt <\/span><span class=\"crayon-e\">install <\/span><span class=\"crayon-v\">phpmyadmin<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0000 seconds] -->\r\n<p>Dank der zuvor installierten MariaDB-Server-Pakete l\u00e4uft die Installation von PHPMyAdmin problemlos, ohne dass nach dem MySQL-Root-Passwort gefragt wird. dbconfig-common richtet die phpMyAdmin-Datenbank automatisch ein.<\/p>\n<hr \/>\n<h2>2. phpMyAdmin-User <strong>Root-Rechte<\/strong> gew\u00e4hren <strong data-start=\"0\" data-end=\"82\">und auf lokalen Zugriff beschr\u00e4nken<\/strong><\/h2>\n<p data-start=\"303\" data-end=\"670\">Standardm\u00e4\u00dfig wird der Benutzer <code data-start=\"335\" data-end=\"347\">phpmyadmin<\/code> mit eingeschr\u00e4nkten Rechten eingerichtet. Da der MariaDB-Root-Zugang per Vorgabe nur lokal \u00fcber <code data-start=\"444\" data-end=\"456\">sudo mysql<\/code> m\u00f6glich ist, kann ein Root-Login \u00fcber das phpMyAdmin-Webinterface nicht erfolgen. Durch die Vergabe von Root-Rechten an den Benutzer <code data-start=\"597\" data-end=\"609\">phpmyadmin<\/code> wird ein Root-Datenbank-Login \u00fcber das Webinterface erm\u00f6glicht. Der Zugriff erfolgt dabei technisch weiterhin lokal, da phpMyAdmin auf dem Server l\u00e4uft und \u00fcber <code data-start=\"769\" data-end=\"780\">localhost<\/code> auf den Datenbankserver zugreift. Wird das phpMyAdmin-Webinterface deaktiviert, ist ein externer Login \u00fcber phpMyAdmin nicht mehr m\u00f6glich.<\/p>\n<p>Der folgende Befehl gibt dem bereits vorhandenen Benutzer <code>phpmyadmin<\/code> volle Rechte auf alle Datenbanken und \u00fcbernimmt die \u00c4nderungen sofort. Der Zugriff ist dabei auf lokale Verbindungen (<code>localhost<\/code>) beschr\u00e4nkt.<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b4667843875183\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo mysql -e \"GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;\"<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4667843875183-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4667843875183-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">mysql<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">e<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;\"<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>3. phpMyAdmin Webinterface aktivieren \/ deaktivieren<\/h2>\n<p>Das phpMyAdmin-Webinterface kann per SSH wie folgt aktiviert oder deaktiviert werden:<\/p>\n<h4>Deaktivieren (Standardzustand, <strong>Kein Webzugriff m\u00f6glich<\/strong>)<\/h4>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b4669076301969\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo a2disconf phpmyadmin\r\nsudo systemctl reload apache2<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4669076301969-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4669076301969-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4669076301969-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">a2disconf <\/span><span class=\"crayon-e\">phpmyadmin<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4669076301969-2\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">systemctl <\/span><span class=\"crayon-e\">reload <\/span><span class=\"crayon-v\">apache2<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<h4>Aktivieren (f\u00fcr Einrichtung \/ Analyse)<\/h4>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b466c060842193\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo a2enconf phpmyadmin\r\nsudo systemctl reload apache2<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b466c060842193-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b466c060842193-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b466c060842193-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">a2enconf <\/span><span class=\"crayon-e\">phpmyadmin<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b466c060842193-2\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">systemctl <\/span><span class=\"crayon-e\">reload <\/span><span class=\"crayon-v\">apache2<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/>by Speefak<\/p>\n","protected":false},"excerpt":{"rendered":"<p>phpMyAdmin l\u00e4uft nicht permanent, sondern wird nur bei Bedarf (Datenbank-Setup, Benutzerverwaltung, Fehleranalyse) kurzzeitig \u00fcber Apache gestartet und anschlie\u00dfend wieder abgeschaltet. Der Zugriff erfolgt rein lokal \u00fcber die Shell oder remote \u00fcber das Webinterface \u2013 ein direkter Netzwerkzugriff via MySQL ist ausgeschlossen. So bleibt administrativer Zugriff bewusst punktuell, lokal und zeitlich limitiert, w\u00e4hrend der Datenbankserver im [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,26,52,40],"tags":[],"class_list":["post-8606","post","type-post","status-publish","format-standard","hentry","category-anleitungen","category-linux","category-php-scripte","category-server"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/anleitungen\/\" rel=\"category tag\">Anleitungen<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/linux\/\" rel=\"category tag\">Linux<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/php-scripte\/\" rel=\"category tag\">PHP<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/server\/\" rel=\"category tag\">Server<\/a>","rttpg_excerpt":"phpMyAdmin l\u00e4uft nicht permanent, sondern wird nur bei Bedarf (Datenbank-Setup, Benutzerverwaltung, Fehleranalyse) kurzzeitig \u00fcber Apache gestartet und anschlie\u00dfend wieder abgeschaltet. Der Zugriff erfolgt rein lokal \u00fcber die Shell oder remote \u00fcber das Webinterface \u2013 ein direkter Netzwerkzugriff via MySQL ist ausgeschlossen. So bleibt administrativer Zugriff bewusst punktuell, lokal und zeitlich limitiert, w\u00e4hrend der Datenbankserver im&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8606","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=8606"}],"version-history":[{"count":0,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8606\/revisions"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=8606"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=8606"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=8606"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":8594,"date":"2026-01-28T19:42:20","date_gmt":"2026-01-28T18:42:20","guid":{"rendered":"https:\/\/speefak.spdns.de\/oss_lifestyle\/?p=8594"},"modified":"2026-03-02T00:13:20","modified_gmt":"2026-03-01T23:13:20","slug":"proxmox-host-verzeichnisse-mit-virtiofs-in-vms-einbinden","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/proxmox-host-verzeichnisse-mit-virtiofs-in-vms-einbinden\/","title":{"rendered":"Proxmox: Host-Verzeichnisse mit Virtiofs in VMs einbinden"},"content":{"rendered":"<p>Virtiofs ist eine moderne und performante Methode, um Verzeichnisse direkt vom Proxmox-Host in virtuelle Maschinen einzubinden. Im Gegensatz zu klassischen Netzwerkdateisystemen wie NFS oder SSHFS erfolgt der Zugriff lokal \u00fcber den Hypervisor, ohne Netzwerk-Stack und ohne zus\u00e4tzliche Dienste. Dadurch eignet sich virtiofs besonders f\u00fcr High-Performance-Dateifreigaben zwischen Host und VM,\u00a0in denen hoher Datendurchsatz, geringe Latenz und eine klare Rechteverwaltung erforderlich sind, etwa bei Videoaufzeichnungen, Datenbanken oder Medienarchiven.<\/p>\n<hr \/>\n<h2>1. Grundprinzip von virtiofs<\/h2>\n<p>Virtiofs arbeitet strikt POSIX-konform:<\/p>\n<ul>\n<li>Benutzer- und Gruppen-IDs (UID\/GID) werden <strong>numerisch 1:1<\/strong> vom Host in die VM durchgereicht<\/li>\n<li>Es findet <strong>kein User- oder ID-Mapping<\/strong> statt<\/li>\n<li>Dateirechte und Benutzer werden <strong>ausschlie\u00dflich auf dem Host<\/strong> definiert und von der VM \u00fcbernommen<\/li>\n<li>Mount-Optionen wie <code>uid=<\/code>, <code>gid=<\/code> oder <code>allow_other<\/code> werden ignoriert<\/li>\n<\/ul>\n<p>Das bedeutet: Stimmen UID\/GID zwischen Host und VM nicht exakt \u00fcberein, ist Schreiben im Gast nicht m\u00f6glich.<\/p>\n<hr \/>\n<h2>2. Host vorbereiten<\/h2>\n<h3>2.1 Host-Verzeichnis<\/h3>\n<p>F\u00fcr die Nutzung von Virtio-FS ist eine eindeutige Trennung zwischen dem Verzeichnis auf dem Proxmox-Host und dem Mountpunkt innerhalb der virtuellen Maschine erforderlich. Das Verzeichnis befindet sich physisch auf dem Host, entweder auf einem lokalen Datentr\u00e4ger oder auf einem eingebundenen Storage, und dient als Quelle der Virtio-FS-Freigabe. S\u00e4mtliche Zugriffsrechte, Eigent\u00fcmer und Gruppen werden ausschlie\u00dflich an diesem Ort definiert und unver\u00e4ndert an die virtuelle Maschine weitergereicht.<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b4988681946039\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n\/mnt\/proxmox-host-dir<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4988681946039-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4988681946039-1\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">mnt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">proxmox<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">host<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">dir<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h3>2.2 Benutzer und Gruppen<\/h3>\n<p data-start=\"40\" data-end=\"672\">Der Benutzer, der innerhalb der virtuellen Maschine Schreibzugriff auf das \u00fcber virtiofs eingebundene Verzeichnis erhalten soll, muss auf dem Proxmox-Host mit identischer Benutzerkennung (UID) und Gruppenzugeh\u00f6rigkeit (GID) vorhanden sein. virtiofs f\u00fchrt keine \u00dcbersetzung oder Abbildung von Benutzer- und Gruppenkennungen durch, sondern reicht diese unver\u00e4ndert vom Gast an den Host weiter. Abweichende UIDs oder GIDs f\u00fchren dazu, dass Zugriffe aus der VM auf Host-Ebene als fremder oder nicht existenter Benutzer interpretiert werden, was in der Praxis zu fehlenden Schreibrechten oder unerwarteten Zugriffsverweigerungen f\u00fchrt.<\/p>\n<p data-start=\"679\" data-end=\"950\" data-is-last-node=\"\">Aus diesem Grund ist sicherzustellen, dass die relevanten Benutzer und Gruppen auf Host und virtueller Maschine identische numerische IDs besitzen und dass das freigegebene Host-Verzeichnis die entsprechenden Zugriffsrechte entsprechend dieser IDs aufweist.<\/p>\n<ul>\n<li>Vorhandene Benutzer und Gruppen k\u00f6nnen \u00fcberpr\u00fcft werden:<\/li>\n<\/ul>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b4991221954966\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\ngetent passwd vuser\r\ngetent group vuser<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4991221954966-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4991221954966-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4991221954966-1\"><span class=\"crayon-e\">getent <\/span><span class=\"crayon-e\">passwd <\/span><span class=\"crayon-e\">vuser<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4991221954966-2\"><span class=\"crayon-e\">getent <\/span><span class=\"crayon-e\">group <\/span><span class=\"crayon-v\">vuser<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<ul>\n<li>Falls der Benutzer noch nicht existiert, kann er mit den entsprechenden IDs angelegt werden (ohne Login Shell und Home Verzeichnis):<\/li>\n<\/ul>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b4994220220943\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nuseradd -u 200 -g 200 -s \/usr\/sbin\/nologin -M vuser\r\ngroupadd -g 200 vuser<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4994220220943-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4994220220943-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4994220220943-1\"><span class=\"crayon-v\">useradd<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">u<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">200<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">g<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">200<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">s<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">usr<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sbin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">nologin<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">M<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">vuser<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4994220220943-2\"><span class=\"crayon-v\">groupadd<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">g<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">200<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">vuser<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0002 seconds] -->\r\n<p><\/p>\n<ul>\n<li>Falls der Benutzer bereits existiert, k\u00f6nnen UID und GID bei Bedarf angepasst werden:<\/li>\n<\/ul>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b4996380340424\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"urvanov-syntax-highlighter-mixed-highlight\" title=\"Enth\u00e4lt verschiedene Sprachen\"><\/span><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nusermod -u 200 vuser # UID \u00e4ndern\r\ngroupmod -g 200 vuser # GID \u00e4ndern\r\nchown -R vuser:vuser \/home\/vuser # Besitzrechte aktualisieren\r\n\r\n# Berechtigungen korrigieren. Alte UID und GID (33) an neue IDs (301) systemweit anpassen.\r\nsudo find \/ \\( -user 33 -o -group 33 \\) -not -path \"\/proc\/*\" -not -path \"\/sys\/*\" -not -path \"\/dev\/*\" -exec chown -h 301:301 {} + 2&gt;\/dev\/null<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4996380340424-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4996380340424-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4996380340424-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4996380340424-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4996380340424-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4996380340424-6\">6<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4996380340424-1\"><span class=\"crayon-v\">usermod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">u<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">200<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">vuser<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-p\"># UID \u00e4ndern<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4996380340424-2\"><span class=\"crayon-v\">groupmod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">g<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">200<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">vuser<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-p\"># GID \u00e4ndern<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4996380340424-3\"><span class=\"crayon-v\">chown<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">R<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">vuser<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-v\">vuser<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-i\">vuser<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-p\"># Besitzrechte aktualisieren<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4996380340424-4\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4996380340424-5\"><span class=\"crayon-p\"># Berechtigungen korrigieren. Alte UID und GID (33) an neue IDs (301) systemweit anpassen.<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4996380340424-6\"><span class=\"crayon-e\">sudo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">find<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">\\<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">user<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">33<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">o<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">group<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">33<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">\\<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-st\">not<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">path<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\/proc\/*\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-st\">not<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">path<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\/sys\/*\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-st\">not<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">path<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\/dev\/*\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">exec <\/span><span class=\"crayon-v\">chown<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">h<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">301<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-cn\">301<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">+<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0014 seconds] -->\r\n<p><\/p>\n<ul>\n<li>Die UID\/GID m\u00fcssen mit dem Host \u00fcbereinstimmen, damit Virtio-FS die Zugriffsrechte korrekt durchreicht.<\/li>\n<li>Das Home-Verzeichnis und die Shell k\u00f6nnen nach Bedarf angepasst werden; f\u00fcr reine Virtio-FS-Nutzung ist ein Login oder Home Verzeichnis nicht erforderlich.<\/li>\n<\/ul>\n<p style=\"text-align: center;\"><span style=\"text-decoration: underline;\"><strong>Script zum Anlegen eines Systemusers:<\/strong><\/span><\/p>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n#!\/usr\/bin\/env bash\r\n#\r\n# Creates a lightweight system user + matching group\r\n# - No home directory (-M)\r\n# - Shell: \/usr\/sbin\/nologin (no login possible)\r\n# - UID and GID are identical\r\n# - Username: vuser + Unix timestamp (seconds)\r\n# - UID range: 300\u2013999 (typical system user range)\r\n# - Scriptname: add-system-user.sh\r\n# - Suppresses useradd warning about UID_MIN\/MAX\r\n#\r\n\r\nset -euo pipefail\r\n\r\n# ==================== CONFIGURATION ====================\r\nMIN_ID=300\r\nMAX_ID=999\r\nDEFAULT_SHELL=\"\/usr\/sbin\/nologin\"\r\nUSER_PREFIX=\"vuser\"\r\nCOMMENT=\"System service user\"\r\n# =========================================================\r\n\r\n# \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n# Check if running as root\r\n# \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nif [ \"$EUID\" -ne 0 ]; then\r\n    echo \"ERROR: This script must be run as root!\"\r\n    echo \"\"\r\n    echo \"Please run the script with sudo:\"\r\n    echo \"  sudo bash $0\"\r\n    echo \"\"\r\n    exit 1\r\nfi\r\n\r\n# \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n# Functions\r\n# \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nfind_next_free_id() {\r\n    local start_id=$1\r\n    local id=$start_id\r\n\r\n    while [ $id -le $MAX_ID ]; do\r\n        if ! getent passwd \"$id\" &gt;\/dev\/null 2&gt;&amp;1 &amp;&amp; \\\r\n           ! getent group  \"$id\" &gt;\/dev\/null 2&gt;&amp;1; then\r\n            echo \"$id\"\r\n            return 0\r\n        fi\r\n        ((id++))\r\n    done\r\n\r\n    echo \"Error: No free UID\/GID found between $MIN_ID and $MAX_ID!\" &gt;&amp;2\r\n    exit 1\r\n}\r\n\r\ngenerate_timestamp_suffix() {\r\n    date +%s\r\n}\r\n\r\n# \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n# Main program\r\n# \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\necho \"\u2192 Searching for next free UID\/GID starting from ${MIN_ID} ...\"\r\n\r\nFREE_ID=$(find_next_free_id \"$MIN_ID\")\r\nTIMESTAMP_SUFFIX=$(generate_timestamp_suffix)\r\nUSERNAME=\"${USER_PREFIX}${TIMESTAMP_SUFFIX}\"\r\n\r\n# \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n# Confirmation &amp; edit loop\r\n# \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nwhile true; do\r\n    echo \"\"\r\n    echo \"Suggested values:\"\r\n    echo \"  Username     : ${USERNAME}\"\r\n    echo \"  UID \/ GID    : ${FREE_ID}\"\r\n    echo \"  Group        : ${USERNAME}\"\r\n    echo \"  Shell        : ${DEFAULT_SHELL}\"\r\n    echo \"  Comment      : ${COMMENT}\"\r\n    echo \"\"\r\n\r\n    read -p \"Proceed with these values?  [y\/n\/c]  \" -n 1 -r choice\r\n    echo\r\n\r\n    case \"$choice\" in\r\n        [Yy])\r\n            echo \"\u2192 Creating user and group ...\"\r\n            break\r\n            ;;\r\n        [Nn])\r\n            echo \"\"\r\n            echo \"Edit values (press Enter to keep current value):\"\r\n            echo \"\"\r\n\r\n            read -e -i \"${USERNAME}\" -p \"Username     [${USERNAME}]: \" input\r\n            [ -n \"$input\" ] &amp;&amp; USERNAME=\"$input\"\r\n\r\n            read -e -i \"${FREE_ID}\" -p \"UID \/ GID    [${FREE_ID}]: \" input\r\n            [ -n \"$input\" ] &amp;&amp; FREE_ID=\"$input\"\r\n\r\n            read -e -i \"${DEFAULT_SHELL}\" -p \"Shell        [${DEFAULT_SHELL}]: \" input\r\n            [ -n \"$input\" ] &amp;&amp; DEFAULT_SHELL=\"$input\"\r\n\r\n            read -e -i \"${COMMENT}\" -p \"Comment      [${COMMENT}]: \" input\r\n            [ -n \"$input\" ] &amp;&amp; COMMENT=\"$input\"\r\n\r\n            continue\r\n            ;;\r\n        [Cc])\r\n            echo \"\u2192 Aborted.\"\r\n            exit 0\r\n            ;;\r\n        *)\r\n            echo \"Invalid input. Please enter y, n or c.\"\r\n            continue\r\n            ;;\r\n    esac\r\ndone\r\n\r\n# \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n# Creation\r\n# \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\necho \"\"\r\necho \"Creating group ${USERNAME} (GID ${FREE_ID}) ...\"\r\n\r\nif ! groupadd -g \"${FREE_ID}\" \"${USERNAME}\"; then\r\n    echo \"Error creating group ${USERNAME} (GID ${FREE_ID})\" &gt;&amp;2\r\n    exit 1\r\nfi\r\n\r\necho \"Creating user ${USERNAME} (UID ${FREE_ID}) ...\"\r\n\r\n# Suppress useradd warning about UID range, but detect real errors\r\nif ! useradd \\\r\n    -u \"${FREE_ID}\" \\\r\n    -g \"${FREE_ID}\" \\\r\n    -s \"${DEFAULT_SHELL}\" \\\r\n    -M \\\r\n    -c \"${COMMENT}\" \\\r\n    \"${USERNAME}\" 2&gt;\/dev\/null; then\r\n\r\n    echo \"\"\r\n    echo \"\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\"\r\n    echo \"\u2502               ERROR CREATING THE USER                        \u2502\"\r\n    echo \"\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\"\r\n    echo \"Username:   ${USERNAME}\"\r\n    echo \"UID\/GID:    ${FREE_ID}\"\r\n    echo \"\"\r\n    echo \"Possible causes:\"\r\n    echo \"  \u2022 Username already exists\"\r\n    echo \"  \u2022 UID or GID already in use\"\r\n    echo \"  \u2022 Invalid characters in username\"\r\n    echo \"\"\r\n    echo \"Try running the command manually for more details:\"\r\n    echo \"  useradd -u ${FREE_ID} -g ${FREE_ID} -s ${DEFAULT_SHELL} -M -c \\\"${COMMENT}\\\" ${USERNAME}\"\r\n    echo \"\"\r\n\r\n    # Cleanup\r\n    groupdel \"${USERNAME}\" 2&gt;\/dev\/null || true\r\n    exit 1\r\nfi\r\n\r\necho \"\"\r\necho \"========================================\"\r\necho \"         Successfully created!          \"\r\necho \"========================================\"\r\necho \"Username     : ${USERNAME}\"\r\necho \"Group        : ${USERNAME}\"\r\necho \"UID \/ GID    : ${FREE_ID}\"\r\necho \"Shell        : ${DEFAULT_SHELL}\"\r\necho \"Comment      : ${COMMENT}\"\r\necho \"========================================\"\r\necho \"\"\r\n\r\nexit 0<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\" max-height: 165px;\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-6\">6<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-7\">7<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-8\">8<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-9\">9<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-10\">10<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-11\">11<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-12\">12<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-13\">13<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-14\">14<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-15\">15<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-16\">16<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-17\">17<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-18\">18<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-19\">19<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-20\">20<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-21\">21<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-22\">22<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-23\">23<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-24\">24<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-25\">25<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-26\">26<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-27\">27<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-28\">28<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-29\">29<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-30\">30<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-31\">31<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-32\">32<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-33\">33<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-34\">34<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-35\">35<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-36\">36<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-37\">37<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-38\">38<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-39\">39<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-40\">40<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-41\">41<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-42\">42<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-43\">43<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-44\">44<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-45\">45<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-46\">46<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-47\">47<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-48\">48<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-49\">49<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-50\">50<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-51\">51<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-52\">52<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-53\">53<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-54\">54<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-55\">55<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-56\">56<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-57\">57<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-58\">58<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-59\">59<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-60\">60<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-61\">61<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-62\">62<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-63\">63<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-64\">64<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-65\">65<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-66\">66<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-67\">67<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-68\">68<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-69\">69<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-70\">70<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-71\">71<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-72\">72<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-73\">73<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-74\">74<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-75\">75<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-76\">76<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-77\">77<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-78\">78<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-79\">79<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-80\">80<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-81\">81<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-82\">82<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-83\">83<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-84\">84<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-85\">85<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-86\">86<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-87\">87<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-88\">88<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-89\">89<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-90\">90<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-91\">91<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-92\">92<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-93\">93<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-94\">94<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-95\">95<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-96\">96<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-97\">97<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-98\">98<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-99\">99<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-100\">100<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-101\">101<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-102\">102<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-103\">103<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-104\">104<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-105\">105<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-106\">106<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-107\">107<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-108\">108<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-109\">109<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-110\">110<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-111\">111<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-112\">112<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-113\">113<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-114\">114<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-115\">115<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-116\">116<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-117\">117<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-118\">118<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-119\">119<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-120\">120<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-121\">121<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-122\">122<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-123\">123<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-124\">124<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-125\">125<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-126\">126<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-127\">127<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-128\">128<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-129\">129<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-130\">130<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-131\">131<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-132\">132<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-133\">133<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-134\">134<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-135\">135<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-136\">136<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-137\">137<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-138\">138<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-139\">139<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-140\">140<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-141\">141<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-142\">142<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-143\">143<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-144\">144<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-145\">145<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-146\">146<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-147\">147<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-148\">148<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-149\">149<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-150\">150<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-151\">151<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-152\">152<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-153\">153<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-154\">154<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-155\">155<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-156\">156<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-157\">157<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-158\">158<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-159\">159<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-160\">160<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-161\">161<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-162\">162<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-163\">163<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-164\">164<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-165\">165<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-166\">166<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-167\">167<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-168\">168<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-169\">169<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-170\">170<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-171\">171<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-172\">172<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-173\">173<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-174\">174<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-175\">175<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-176\">176<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-177\">177<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-178\">178<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-179\">179<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-1\"><span class=\"crayon-p\">#!\/usr\/bin\/env bash<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-2\"><span class=\"crayon-p\">#<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-3\"><span class=\"crayon-p\"># Creates a lightweight system user + matching group<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-4\"><span class=\"crayon-p\"># - No home directory (-M)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-5\"><span class=\"crayon-p\"># - Shell: \/usr\/sbin\/nologin (no login possible)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-6\"><span class=\"crayon-p\"># - UID and GID are identical<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-7\"><span class=\"crayon-p\"># - Username: vuser + Unix timestamp (seconds)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-8\"><span class=\"crayon-p\"># - UID range: 300\u2013999 (typical system user range)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-9\"><span class=\"crayon-p\"># - Scriptname: add-system-user.sh<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-10\"><span class=\"crayon-p\"># - Suppresses useradd warning about UID_MIN\/MAX<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-11\"><span class=\"crayon-p\">#<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-12\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-13\"><span class=\"crayon-v\">set<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">euo <\/span><span class=\"crayon-i\">pipefail<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-14\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-15\"><span class=\"crayon-p\"># ==================== CONFIGURATION ====================<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-16\"><span class=\"crayon-v\">MIN_ID<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-cn\">300<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-17\"><span class=\"crayon-v\">MAX_ID<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-cn\">999<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-18\"><span class=\"crayon-v\">DEFAULT_SHELL<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"\/usr\/sbin\/nologin\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-19\"><span class=\"crayon-v\">USER_PREFIX<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"vuser\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-20\"><span class=\"crayon-v\">COMMENT<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"System service user\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-21\"><span class=\"crayon-p\"># =========================================================<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-22\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-23\"><span class=\"crayon-p\"># \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-24\"><span class=\"crayon-p\"># Check if running as root<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-25\"><span class=\"crayon-p\"># \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-26\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-27\"><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$EUID\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">ne<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">then<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-28\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"ERROR: This script must be run as root!\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-29\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-30\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Please run the script with sudo:\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-31\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;sudo bash $0\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-32\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-33\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-34\"><span class=\"crayon-i\">fi<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-35\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-36\"><span class=\"crayon-p\"># \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-37\"><span class=\"crayon-p\"># Functions<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-38\"><span class=\"crayon-p\"># \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-39\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-40\"><span class=\"crayon-e\">find_next_free_id<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">{<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-41\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">local <\/span><span class=\"crayon-v\">start_id<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-cn\">1<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-42\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">local <\/span><span class=\"crayon-v\">id<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-e\">start_id<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-43\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-44\"><span class=\"crayon-e\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">while<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">id<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">le<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">MAX<\/span><span class=\"crayon-sy\">_<\/span>ID<span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">do<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-45\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">getent <\/span><span class=\"crayon-i\">passwd<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$id\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&amp;&amp;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">\\<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-46\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">getent <\/span><span class=\"crayon-i\">group<\/span><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-s\">\"$id\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">then<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-47\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$id\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-48\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">return<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">0<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-49\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">fi<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-50\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">id<\/span><span class=\"crayon-o\">++<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-51\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">done<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-52\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-53\"><span class=\"crayon-e\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Error: No free UID\/GID found between $MIN_ID and $MAX_ID!\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-cn\">2<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-54\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-55\"><span class=\"crayon-sy\">}<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-56\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-57\"><span class=\"crayon-e\">generate_timestamp_suffix<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">{<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-58\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">date<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">+<\/span><span class=\"crayon-o\">%<\/span><span class=\"crayon-i\">s<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-59\"><span class=\"crayon-sy\">}<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-60\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-61\"><span class=\"crayon-p\"># \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-62\"><span class=\"crayon-p\"># Main program<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-63\"><span class=\"crayon-p\"># \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-64\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-65\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\u2192 Searching for next free UID\/GID starting from ${MIN_ID} ...\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-66\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-67\"><span class=\"crayon-v\">FREE_ID<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">find_next_free<\/span><span class=\"crayon-sy\">_<\/span>id<span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$MIN_ID\"<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-68\"><span class=\"crayon-v\">TIMESTAMP_SUFFIX<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">generate_timestamp_suffix<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-69\"><span class=\"crayon-v\">USERNAME<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"${USER_PREFIX}${TIMESTAMP_SUFFIX}\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-70\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-71\"><span class=\"crayon-p\"># \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-72\"><span class=\"crayon-p\"># Confirmation &amp; edit loop<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-73\"><span class=\"crayon-p\"># \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-74\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-75\"><span class=\"crayon-st\">while<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">true<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">do<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-76\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-77\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Suggested values:\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-78\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;Username&nbsp;&nbsp;&nbsp;&nbsp; : ${USERNAME}\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-79\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;UID \/ GID&nbsp;&nbsp;&nbsp;&nbsp;: ${FREE_ID}\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-80\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;Group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: ${USERNAME}\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-81\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;Shell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: ${DEFAULT_SHELL}\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-82\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;Comment&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: ${COMMENT}\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-83\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-84\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-85\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">read<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Proceed with these values?&nbsp;&nbsp;[y\/n\/c]&nbsp;&nbsp;\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">n<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">r<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">choice<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-86\"><span class=\"crayon-e\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">echo<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-87\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-88\"><span class=\"crayon-e\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">case<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$choice\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">in<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-89\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">Yy<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-90\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\u2192 Creating user and group ...\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-91\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">break<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-92\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-93\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">Nn<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-94\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-95\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Edit values (press Enter to keep current value):\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-96\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-97\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-98\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">read<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">e<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">i<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"${USERNAME}\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Username&nbsp;&nbsp;&nbsp;&nbsp; [${USERNAME}]: \"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">input<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-99\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">n<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$input\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&amp;&amp;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">USERNAME<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"$input\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-100\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-101\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">read<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">e<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">i<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"${FREE_ID}\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"UID \/ GID&nbsp;&nbsp;&nbsp;&nbsp;[${FREE_ID}]: \"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">input<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-102\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">n<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$input\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&amp;&amp;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">FREE_ID<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"$input\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-103\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-104\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">read<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">e<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">i<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"${DEFAULT_SHELL}\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Shell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[${DEFAULT_SHELL}]: \"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">input<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-105\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">n<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$input\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&amp;&amp;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">DEFAULT_SHELL<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"$input\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-106\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-107\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">read<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">e<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">i<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"${COMMENT}\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Comment&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[${COMMENT}]: \"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">input<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-108\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">n<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$input\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&amp;&amp;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">COMMENT<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"$input\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-109\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-110\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">continue<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-111\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-112\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">Cc<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-113\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\u2192 Aborted.\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-114\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">0<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-115\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-116\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-o\">*<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-117\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Invalid input. Please enter y, n or c.\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-118\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">continue<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-119\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-120\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">esac<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-121\"><span class=\"crayon-i\">done<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-122\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-123\"><span class=\"crayon-p\"># \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-124\"><span class=\"crayon-p\"># Creation<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-125\"><span class=\"crayon-p\"># \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-126\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-127\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-128\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Creating group ${USERNAME} (GID ${FREE_ID}) ...\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-129\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-130\"><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">groupadd<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">g<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"${FREE_ID}\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"${USERNAME}\"<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">then<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-131\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Error creating group ${USERNAME} (GID ${FREE_ID})\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-cn\">2<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-132\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-133\"><span class=\"crayon-e\">fi<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-134\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-135\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Creating user ${USERNAME} (UID ${FREE_ID}) ...\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-136\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-137\"><span class=\"crayon-p\"># Suppress useradd warning about UID range, but detect real errors<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-138\"><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">useradd<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">\\<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-139\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">u<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"${FREE_ID}\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">\\<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-140\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">g<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"${FREE_ID}\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">\\<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-141\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">s<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"${DEFAULT_SHELL}\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">\\<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-142\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">M<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">\\<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-143\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">c<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"${COMMENT}\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">\\<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-144\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-s\">\"${USERNAME}\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">then<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-145\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-146\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-147\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-148\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\u2502&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ERROR CREATING THE USER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\u2502\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-149\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-150\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Username:&nbsp;&nbsp; ${USERNAME}\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-151\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"UID\/GID:&nbsp;&nbsp;&nbsp;&nbsp;${FREE_ID}\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-152\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-153\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Possible causes:\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-154\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;\u2022 Username already exists\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-155\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;\u2022 UID or GID already in use\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-156\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;\u2022 Invalid characters in username\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-157\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-158\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Try running the command manually for more details:\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-159\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;useradd -u ${FREE_ID} -g ${FREE_ID} -s ${DEFAULT_SHELL} -M -c \\\"${COMMENT}\\\" ${USERNAME}\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-160\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-161\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-162\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-p\"># Cleanup<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-163\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">groupdel<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"${USERNAME}\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">||<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">true<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-164\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-165\"><span class=\"crayon-e\">fi<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-166\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-167\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-168\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"========================================\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-169\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Successfully created!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-170\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"========================================\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-171\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Username&nbsp;&nbsp;&nbsp;&nbsp; : ${USERNAME}\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-172\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: ${USERNAME}\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-173\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"UID \/ GID&nbsp;&nbsp;&nbsp;&nbsp;: ${FREE_ID}\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-174\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Shell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: ${DEFAULT_SHELL}\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-175\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Comment&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: ${COMMENT}\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-176\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"========================================\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-177\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-178\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b4998512350836-179\"><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">0<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0023 seconds] -->\r\n<p><\/p>\n<p style=\"text-align: center;\"><strong>Script zum \u00e4ndern von User und Gruppen IDs und systemweite korrektor der Dateirechte:<\/strong><\/p>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"urvanov-syntax-highlighter-mixed-highlight\" title=\"Enth\u00e4lt verschiedene Sprachen\"><\/span><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n#!\/usr\/bin\/env bash\r\n#\r\n# - Interactive user selection (UID &lt; 1000)\r\n# - UID and GID are set to the same value\r\n# - Automatically updates all matching files\r\n#\r\n# WARNING:\r\n# Can break services \u2013 backup \/etc\/passwd and \/etc\/group first!\r\n# Restart affected services after execution.\r\n# \r\n# Script name: change-uid-gid.sh\r\n#\r\n\r\nset -euo pipefail\r\n\r\n# -------------------------------------------------------\r\n# 1. Root check\r\n# -------------------------------------------------------\r\nif [ \"$EUID\" -ne 0 ]; then\r\n    echo \"ERROR: This script must be run as root!\"\r\n    echo \"       sudo bash $0\"\r\n    exit 1\r\nfi\r\n\r\necho \"\"\r\necho \"=== UID \/ GID Change Script ===\"\r\necho \"WARNING: This operation can break services and applications!\"\r\necho \"         Backup recommended (e.g. cp \/etc\/passwd \/etc\/passwd.bak)\"\r\necho \"\"\r\n\r\n# -------------------------------------------------------\r\n# 2. Select user \u2013 all with UID &lt; 1000\r\n# -------------------------------------------------------\r\necho \"Available users (UID &lt; 1000):\"\r\necho \"------------------------------------------------\"\r\n\r\nPS3=\"Select a user (enter number): \"\r\n\r\n# List all users with UID &lt; 1000 (excluding some special pseudo-accounts)\r\nmapfile -t users &lt; &lt;(awk -F: '$3 &lt; 1000 &amp;&amp; $3 &gt;= 0 &amp;&amp; $7 !~ \/(sync|halt|shutdown)$\/ {print $1}' \/etc\/passwd | sort -u)\r\n\r\nif [ ${#users[@]} -eq 0 ]; then\r\n    echo \"No users with UID &lt; 1000 found.\"\r\n    exit 1\r\nfi\r\n\r\nselect username in \"${users[@]}\"; do\r\n    if [[ -n \"$username\" ]]; then\r\n        break\r\n    fi\r\n    echo \"Invalid selection, please try again.\"\r\ndone\r\n\r\n# Get current UID \/ GID\r\nold_uid=$(id -u \"$username\" 2&gt;\/dev\/null || echo \"not found\")\r\nold_gid=$(id -g \"$username\" 2&gt;\/dev\/null || echo \"not found\")\r\n\r\necho \"\"\r\necho \"Selected user:   $username\"\r\necho \"Current UID:     $old_uid\"\r\necho \"Current GID:     $old_gid\"\r\necho \"\"\r\n\r\n# -------------------------------------------------------\r\n# 3. Ask for new UID\r\n# -------------------------------------------------------\r\nwhile true; do\r\n    read -p \"Enter new UID (GID will be set to the same value): \" new_uid\r\n\r\n    # Check if it's a number\r\n    if ! [[ \"$new_uid\" =~ ^[0-9]+$ ]]; then\r\n        echo \"\u2192 Only numbers allowed!\"\r\n        continue\r\n    fi\r\n\r\n    # Check if already in use (except for the current user itself)\r\n    if getent passwd \"$new_uid\" &gt;\/dev\/null 2&gt;&amp;1 &amp;&amp; [ \"$new_uid\" != \"$old_uid\" ]; then\r\n        echo \"\u2192 UID $new_uid is already in use!\"\r\n        continue\r\n    fi\r\n    if getent group \"$new_uid\" &gt;\/dev\/null 2&gt;&amp;1 &amp;&amp; [ \"$new_uid\" != \"$old_gid\" ]; then\r\n        echo \"\u2192 GID $new_uid is already in use!\"\r\n        continue\r\n    fi\r\n\r\n    # Confirmation\r\n    read -p \"Really change UID and GID of $username to $new_uid? (y\/N): \" -n 1 confirm\r\n    echo\r\n    if [[ \"$confirm\" =~ ^[Yy]$ ]]; then\r\n        break\r\n    else\r\n        echo \"Aborted.\"\r\n        exit 0\r\n    fi\r\ndone\r\n\r\nnew_gid=\"$new_uid\"\r\n\r\n# -------------------------------------------------------\r\n# 4. Perform changes\r\n# -------------------------------------------------------\r\necho \"\"\r\necho \"Performing changes:\"\r\necho \"  User:        $username\"\r\necho \"  Old UID:     $old_uid  \u2192  New UID: $new_uid\"\r\necho \"  Old GID:     $old_gid  \u2192  New GID: $new_gid\"\r\necho \"\"\r\n\r\n# Change UID\r\necho \"\u2192 usermod -u $new_uid $username\"\r\nusermod -u \"$new_uid\" \"$username\" || { echo \"usermod failed\"; exit 1; }\r\n\r\n# Change GID\r\necho \"\u2192 groupmod -g $new_gid $username\"\r\ngroupmod -g \"$new_gid\" \"$username\" || { echo \"groupmod failed\"; exit 1; }\r\n\r\n# Update user's primary group (if needed)\r\nusermod -g \"$new_gid\" \"$username\" 2&gt;\/dev\/null || true\r\n\r\n# -------------------------------------------------------\r\n# 5. Correct file ownership system-wide\r\n# -------------------------------------------------------\r\necho \"\"\r\necho \"\u2192 Searching and correcting files owned by old UID\/GID ($old_uid \/ $old_gid) ...\"\r\necho \"  (this may take a few minutes depending on your system)\"\r\n\r\nfind \/ \\\r\n    \\( -user \"$old_uid\" -o -group \"$old_gid\" \\) \\\r\n    -not -path \"\/proc\/*\" \\\r\n    -not -path \"\/sys\/*\" \\\r\n    -not -path \"\/dev\/*\" \\\r\n    -exec chown -h \"$new_uid:$new_gid\" {} + 2&gt;\/dev\/null\r\n\r\necho \"\"\r\necho \"Done!\"\r\necho \"\"\r\necho \"Verification:\"\r\necho \"  id $username\"\r\necho \"\"\r\necho \"IMPORTANT:\"\r\necho \"  \u2022 Restart any services that use this user (apache2, nginx, php-fpm, docker, etc.)\"\r\necho \"  \u2022 Example:  systemctl restart apache2\"\r\necho \"  \u2022 Check logs if services fail to start\"\r\necho \"\"\r\n\r\nexit 0<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\" max-height: 180px;\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-3\">3<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-4\">4<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-5\">5<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-6\">6<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-7\">7<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-8\">8<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-9\">9<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-10\">10<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-11\">11<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-12\">12<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-13\">13<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-14\">14<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-15\">15<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-16\">16<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-17\">17<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-18\">18<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-19\">19<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-20\">20<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-21\">21<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-22\">22<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-23\">23<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-24\">24<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-25\">25<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-26\">26<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-27\">27<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-28\">28<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-29\">29<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-30\">30<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-31\">31<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-32\">32<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-33\">33<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-34\">34<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-35\">35<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-36\">36<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-37\">37<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-38\">38<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-39\">39<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-40\">40<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-41\">41<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-42\">42<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-43\">43<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-44\">44<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-45\">45<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-46\">46<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-47\">47<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-48\">48<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-49\">49<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-50\">50<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-51\">51<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-52\">52<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-53\">53<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-54\">54<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-55\">55<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-56\">56<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-57\">57<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-58\">58<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-59\">59<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-60\">60<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-61\">61<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-62\">62<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-63\">63<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-64\">64<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-65\">65<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-66\">66<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-67\">67<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-68\">68<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-69\">69<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-70\">70<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-71\">71<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-72\">72<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-73\">73<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-74\">74<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-75\">75<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-76\">76<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-77\">77<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-78\">78<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-79\">79<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-80\">80<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-81\">81<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-82\">82<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-83\">83<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-84\">84<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-85\">85<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-86\">86<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-87\">87<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-88\">88<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-89\">89<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-90\">90<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-91\">91<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-92\">92<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-93\">93<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-94\">94<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-95\">95<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-96\">96<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-97\">97<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-98\">98<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-99\">99<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-100\">100<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-101\">101<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-102\">102<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-103\">103<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-104\">104<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-105\">105<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-106\">106<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-107\">107<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-108\">108<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-109\">109<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-110\">110<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-111\">111<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-112\">112<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-113\">113<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-114\">114<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-115\">115<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-116\">116<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-117\">117<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-118\">118<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-119\">119<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-120\">120<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-121\">121<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-122\">122<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-123\">123<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-124\">124<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-125\">125<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-126\">126<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-127\">127<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-128\">128<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-129\">129<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-130\">130<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-131\">131<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-132\">132<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-133\">133<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-134\">134<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-135\">135<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-136\">136<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-137\">137<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-138\">138<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-139\">139<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-140\">140<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-141\">141<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-142\">142<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-143\">143<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-144\">144<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-145\">145<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-146\">146<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-1\"><span class=\"crayon-p\">#!\/usr\/bin\/env bash<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-2\"><span class=\"crayon-p\">#<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-3\"><span class=\"crayon-p\"># - Interactive user selection (UID &lt; 1000)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-4\"><span class=\"crayon-p\"># - UID and GID are set to the same value<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-5\"><span class=\"crayon-p\"># - Automatically updates all matching files<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-6\"><span class=\"crayon-p\">#<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-7\"><span class=\"crayon-p\"># WARNING:<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-8\"><span class=\"crayon-p\"># Can break services \u2013 backup \/etc\/passwd and \/etc\/group first!<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-9\"><span class=\"crayon-p\"># Restart affected services after execution.<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-10\"><span class=\"crayon-p\"># <\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-11\"><span class=\"crayon-p\"># Script name: change-uid-gid.sh<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-12\"><span class=\"crayon-p\">#<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-13\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-14\"><span class=\"crayon-v\">set<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">euo <\/span><span class=\"crayon-i\">pipefail<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-15\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-16\"><span class=\"crayon-p\"># -------------------------------------------------------<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-17\"><span class=\"crayon-p\"># 1. Root check<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-18\"><span class=\"crayon-p\"># -------------------------------------------------------<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-19\"><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$EUID\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">ne<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">then<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-20\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"ERROR: This script must be run as root!\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-21\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sudo bash $0\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-22\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-23\"><span class=\"crayon-e\">fi<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-24\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-25\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-26\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"=== UID \/ GID Change Script ===\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-27\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"WARNING: This operation can break services and applications!\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-28\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Backup recommended (e.g. cp \/etc\/passwd \/etc\/passwd.bak)\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-29\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-30\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-31\"><span class=\"crayon-p\"># -------------------------------------------------------<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-32\"><span class=\"crayon-p\"># 2. Select user \u2013 all with UID &lt; 1000<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-33\"><span class=\"crayon-p\"># -------------------------------------------------------<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-34\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Available users (UID &lt; 1000):\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-35\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"------------------------------------------------\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-36\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-37\"><span class=\"crayon-v\">PS3<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"Select a user (enter number): \"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-38\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-39\"><span class=\"crayon-p\"># List all users with UID &lt; 1000 (excluding some special pseudo-accounts)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-40\"><span class=\"crayon-v\">mapfile<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">t<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">users<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&lt;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&lt;<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">awk<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">F<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">'$3 &lt; 1000 &amp;&amp; $3 &gt;= 0 &amp;&amp; $7 !~ \/(sync|halt|shutdown)$\/ {print $1}'<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">passwd<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">|<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">sort<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">u<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-41\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-42\"><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-p\">#users[@]} -eq 0 ]; then<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-43\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"No users with UID &lt; 1000 found.\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-44\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-45\"><span class=\"crayon-e\">fi<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-46\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-47\"><span class=\"crayon-e\">select <\/span><span class=\"crayon-e\">username <\/span><span class=\"crayon-st\">in<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"${users[@]}\"<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">do<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-48\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">n<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$username\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">then<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-49\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">break<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-50\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">fi<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-51\"><span class=\"crayon-e\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Invalid selection, please try again.\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-52\"><span class=\"crayon-i\">done<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-53\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-54\"><span class=\"crayon-p\"># Get current UID \/ GID<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-55\"><span class=\"crayon-v\">old_uid<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">id<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">u<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$username\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">||<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"not found\"<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-56\"><span class=\"crayon-v\">old_gid<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">id<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">g<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$username\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">||<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"not found\"<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-57\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-58\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-59\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Selected user:&nbsp;&nbsp; $username\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-60\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Current UID:&nbsp;&nbsp;&nbsp;&nbsp; $old_uid\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-61\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Current GID:&nbsp;&nbsp;&nbsp;&nbsp; $old_gid\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-62\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-63\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-64\"><span class=\"crayon-p\"># -------------------------------------------------------<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-65\"><span class=\"crayon-p\"># 3. Ask for new UID<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-66\"><span class=\"crayon-p\"># -------------------------------------------------------<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-67\"><span class=\"crayon-st\">while<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">true<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">do<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-68\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">read<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Enter new UID (GID will be set to the same value): \"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">new<\/span><span class=\"crayon-sy\">_<\/span>uid<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-69\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-70\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-p\"># Check if it's a number<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-71\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$new_uid\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">^<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-cn\">9<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-o\">+<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">then<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-72\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\u2192 Only numbers allowed!\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-73\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">continue<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-74\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">fi<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-75\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-76\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-p\"># Check if already in use (except for the current user itself)<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-77\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">getent <\/span><span class=\"crayon-i\">passwd<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$new_uid\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&amp;&amp;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$new_uid\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">!=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$old_uid\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">then<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-78\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\u2192 UID $new_uid is already in use!\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-79\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">continue<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-80\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">fi<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-81\"><span class=\"crayon-e\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">getent <\/span><span class=\"crayon-i\">group<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$new_uid\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&amp;&amp;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$new_uid\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">!=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$old_gid\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">then<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-82\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\u2192 GID $new_uid is already in use!\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-83\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">continue<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-84\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">fi<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-85\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-86\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-p\"># Confirmation<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-87\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-v\">read<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Really change UID and GID of $username to $new_uid? (y\/N): \"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">n<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">confirm<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-88\"><span class=\"crayon-e\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">echo<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-89\"><span class=\"crayon-e\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$confirm\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-o\">~<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">^<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">Yy<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">then<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-90\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">break<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-91\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">else<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-92\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Aborted.\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-93\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">0<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-94\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">fi<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-95\"><span class=\"crayon-e\">done<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-96\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-97\"><span class=\"crayon-v\">new_gid<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"$new_uid\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-98\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-99\"><span class=\"crayon-p\"># -------------------------------------------------------<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-100\"><span class=\"crayon-p\"># 4. Perform changes<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-101\"><span class=\"crayon-p\"># -------------------------------------------------------<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-102\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-103\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Performing changes:\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-104\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;User:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$username\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-105\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;Old UID:&nbsp;&nbsp;&nbsp;&nbsp; $old_uid&nbsp;&nbsp;\u2192&nbsp;&nbsp;New UID: $new_uid\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-106\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;Old GID:&nbsp;&nbsp;&nbsp;&nbsp; $old_gid&nbsp;&nbsp;\u2192&nbsp;&nbsp;New GID: $new_gid\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-107\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-108\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-109\"><span class=\"crayon-p\"># Change UID<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-110\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\u2192 usermod -u $new_uid $username\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-111\"><span class=\"crayon-v\">usermod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">u<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$new_uid\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$username\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">||<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"usermod failed\"<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">}<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-112\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-113\"><span class=\"crayon-p\"># Change GID<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-114\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\u2192 groupmod -g $new_gid $username\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-115\"><span class=\"crayon-v\">groupmod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">g<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$new_gid\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$username\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">||<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"groupmod failed\"<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">}<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-116\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-117\"><span class=\"crayon-p\"># Update user's primary group (if needed)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-118\"><span class=\"crayon-v\">usermod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">g<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$new_gid\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$username\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">||<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">true<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-119\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-120\"><span class=\"crayon-p\"># -------------------------------------------------------<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-121\"><span class=\"crayon-p\"># 5. Correct file ownership system-wide<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-122\"><span class=\"crayon-p\"># -------------------------------------------------------<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-123\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-124\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\u2192 Searching and correcting files owned by old UID\/GID ($old_uid \/ $old_gid) ...\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-125\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;(this may take a few minutes depending on your system)\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-126\">&nbsp;<\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-127\"><span class=\"crayon-e\">find<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">\\<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-128\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">\\<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">user<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$old_uid\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">o<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">group<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$old_gid\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">\\<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">\\<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-129\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-st\">not<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">path<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\/proc\/*\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">\\<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-130\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-st\">not<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">path<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\/sys\/*\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">\\<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-131\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-st\">not<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">path<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\/dev\/*\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">\\<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-132\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">exec <\/span><span class=\"crayon-v\">chown<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">h<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"$new_uid:$new_gid\"<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">+<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-t\">null<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-133\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-134\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-135\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Done!\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-136\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-137\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"Verification:\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-138\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;id $username\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-139\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-140\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"IMPORTANT:\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-141\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;\u2022 Restart any services that use this user (apache2, nginx, php-fpm, docker, etc.)\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-142\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;\u2022 Example:&nbsp;&nbsp;systemctl restart apache2\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-143\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"&nbsp;&nbsp;\u2022 Check logs if services fail to start\"<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-144\"><span class=\"crayon-i\">echo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">\"\"<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-145\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b499d078024767-146\"><span class=\"crayon-i\">exit<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">0<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0020 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h3>2.3 Benutzer und Rechte setzen<\/h3>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b49a1187448029\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nchown -R vuser:vuser \/mnt\/proxmox-host-dir\r\nchmod -R 775 \/mnt\/proxmox-host-dir\r\nchmod g+s \/mnt\/proxmox-host-dir<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49a1187448029-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49a1187448029-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49a1187448029-3\">3<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49a1187448029-1\"><span class=\"crayon-v\">chown<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">R<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">vuser<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-v\">vuser<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">mnt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">proxmox<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">host<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">dir<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49a1187448029-2\"><span class=\"crayon-v\">chmod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">R<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">775<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">mnt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">proxmox<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">host<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">dir<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49a1187448029-3\"><span class=\"crayon-i\">chmod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">g<\/span><span class=\"crayon-o\">+<\/span><span class=\"crayon-v\">s<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">mnt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">proxmox<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">host<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">dir<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0002 seconds] -->\r\n<p><\/p>\n<ul>\n<li>775 erlaubt Schreiben f\u00fcr User und Gruppe<\/li>\n<li>g+s stellt sicher, dass neu angelegte Dateien automatisch die Gruppe behalten<\/li>\n<\/ul>\n<p>Alle \u00fcbergeordneten Verzeichnisse m\u00fcssen mindestens das Execute-Bit (<code>x<\/code>) f\u00fcr die jeweilige Gruppe besitzen.<\/p>\n<hr \/>\n<h2>3 Einrichtung eines Virtio-FS-Ger\u00e4ts in Proxmox (Verzeichnis-Mapping)<\/h2>\n<p data-start=\"175\" data-end=\"526\">Bevor in der VM ein virtiofs-Verzeichnis gemountet werden kann, muss in Proxmox zun\u00e4chst das entsprechende Host-Verzeichnis als virtiofs-Ger\u00e4t erstellt werden. Dazu in der Weboberfl\u00e4che zu <strong data-start=\"273\" data-end=\"312\">Rechenzentrum \u2192 Verzeichnis-Mapping<\/strong> navigieren, dort auf <strong data-start=\"334\" data-end=\"360\">Erstellen \/ Hinzuf\u00fcgen<\/strong> klicken und folgende Felder ausf\u00fcllen und anschlie\u00dfend mit\u00a0<strong data-start=\"752\" data-end=\"765\">Erstellen<\/strong> best\u00e4tigen.<\/p>\n<ul data-start=\"402\" data-end=\"746\">\n<li data-start=\"402\" data-end=\"514\"><strong data-start=\"404\" data-end=\"419\">Name \/ Tag:<\/strong> Eindeutiger Bezeichner, z.\u202fB. <code data-start=\"450\" data-end=\"463\">proxmox-host-dir-name<\/code> (wird sp\u00e4ter in der VM als Mount-Name verwendet)<\/li>\n<li data-start=\"515\" data-end=\"609\"><strong data-start=\"517\" data-end=\"526\">Pfad:<\/strong> Host-Verzeichnis, z.\u202fB. <code data-start=\"551\" data-end=\"607\">\/mnt\/proxmox-host-dir<\/code><\/li>\n<li data-start=\"515\" data-end=\"609\"><strong data-start=\"612\" data-end=\"623\">Knoten:<\/strong> Zielknoten ausw\u00e4hlen<\/li>\n<li data-start=\"515\" data-end=\"609\"><strong data-start=\"649\" data-end=\"663\">Kommentar:<\/strong> optional, z.\u202fB. \u201eFreigabe f\u00fcr Ubuntu-VM\u201c<\/li>\n<li data-start=\"515\" data-end=\"609\">\u00a0<strong data-start=\"709\" data-end=\"737\">ACL \/ Sicherheitsmodell:<\/strong> <code data-start=\"738\" data-end=\"744\">none<\/code><\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\"><\/li>\n<\/ul>\n<h4>3.1 Zuweisung des Verzeichnis-Mappings an die VM<\/h4>\n<ul>\n<li>Die gew\u00fcnschte VM ausw\u00e4hlen \u2192 <strong>Hardware \u2192 Hinzuf\u00fcgen \u2192 VirtIO-FS-Ger\u00e4t<\/strong>.<\/li>\n<li>Im Feld <strong>Tag<\/strong> den zuvor definierten Namen des Verzeichnis-Mappings eintragen (<code>proxmox-host-dir-name<\/code>).<\/li>\n<li>Optional: <strong>Nur Lesen<\/strong> aktivieren, falls Schreibzugriff nicht erforderlich ist.<\/li>\n<li>\u00c4nderungen speichern.<\/li>\n<\/ul>\n<p>Dadurch wird das Verzeichnis des Proxmox-Hosts (<code data-start=\"103\" data-end=\"126\">\/mnt\/proxmox-host-dir<\/code>) der virtuellen Maschine unter dem Bezeichner <code data-start=\"173\" data-end=\"196\">proxmox-host-dir-name<\/code> als Mountquelle bereitgestellt.<\/p>\n<hr \/>\n<h2>4. VM vorbereiten<\/h2>\n<h4>4.1 Benutzer anlegen \/ anpassen<\/h4>\n<p>In der virtuellen Maschine muss derselbe Benutzer mit identischer UID und GID wie auf dem Proxmox-Host existieren.<\/p>\n<ul>\n<li>Vorhandene Benutzer und Gruppen k\u00f6nnen \u00fcberpr\u00fcft werden:<\/li>\n<\/ul>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b49a3436346346\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\ngetent passwd vuser\r\ngetent group vuser<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49a3436346346-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49a3436346346-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49a3436346346-1\"><span class=\"crayon-e\">getent <\/span><span class=\"crayon-e\">passwd <\/span><span class=\"crayon-e\">vuser<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49a3436346346-2\"><span class=\"crayon-e\">getent <\/span><span class=\"crayon-e\">group <\/span><span class=\"crayon-v\">vuser<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<ul>\n<li>Falls der Benutzer noch nicht existiert, kann er mit den entsprechenden IDs angelegt werden:<\/li>\n<\/ul>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b49a6020337842\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\ngroupadd -g 200 vuser\r\nuseradd -u 200 -g 200 -d \/home\/vuser -s \/bin\/bash vuser<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49a6020337842-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49a6020337842-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49a6020337842-1\"><span class=\"crayon-v\">groupadd<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">g<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">200<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">vuser<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49a6020337842-2\"><span class=\"crayon-v\">useradd<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">u<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">200<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">g<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">200<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">d<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">vuser<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">s<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">bin<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">bash <\/span><span class=\"crayon-v\">vuser<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0002 seconds] -->\r\n<p><\/p>\n<ul>\n<li>Falls der Benutzer bereits existiert, k\u00f6nnen UID und GID bei Bedarf angepasst werden:<\/li>\n<\/ul>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b49a8942491268\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nusermod -u 200 vuser       # UID \u00e4ndern\r\ngroupmod -g 200 vuser      # GID \u00e4ndern\r\nchown -R vuser:vuser \/home\/vuser  # Besitzrechte aktualisieren<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49a8942491268-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49a8942491268-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49a8942491268-3\">3<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49a8942491268-1\"><span class=\"crayon-v\">usermod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">u<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">200<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">vuser<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-p\"># UID \u00e4ndern<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49a8942491268-2\"><span class=\"crayon-v\">groupmod<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">g<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">200<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">vuser<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-p\"># GID \u00e4ndern<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49a8942491268-3\"><span class=\"crayon-v\">chown<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">R<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">vuser<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-v\">vuser<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-i\">vuser<\/span><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-p\"># Besitzrechte aktualisieren<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0002 seconds] -->\r\n<p><strong>Hinweise:<\/strong><\/p>\n<ul>\n<li>Die UID\/GID m\u00fcssen mit dem Host \u00fcbereinstimmen, damit Virtio-FS die Zugriffsrechte korrekt durchreicht.<\/li>\n<li>Das Home-Verzeichnis und die Shell k\u00f6nnen nach Bedarf angepasst werden; f\u00fcr reine Virtio-FS-Nutzung ist ein Login nicht zwingend erforderlich.<\/li>\n<\/ul>\n<hr \/>\n<h4>4.2 Mountpunkt in der VM erstellen und \u00fcber fstab beim starten einbinden<\/h4>\n<p>Nachdem der Benutzer mit den entsprechenden UID\/GID in der VM eingerichtet wurde, wird ein Verzeichnis angelegt, das als Ziel f\u00fcr die Virtio-FS-Freigabe vom Host dient. Mit <code data-start=\"285\" data-end=\"295\">mkdir -p<\/code> wird der Mountpunkt einschlie\u00dflich aller \u00fcbergeordneten Verzeichnisse erstellt, falls diese noch nicht existieren<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b49aa102731074\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nmkdir -p \/mnt\/host-dir<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49aa102731074-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49aa102731074-1\"><span class=\"crayon-v\">mkdir<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">p<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">mnt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">host<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">dir<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Vor dem dauerhaften Eintrag kann der Mount manuell getestet werden, um sicherzustellen, dass die Freigabe funktioniert.<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b49ac076838441\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nmount -t virtiofs proxmox-host-dir-name \/mnt\/host-dir<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49ac076838441-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49ac076838441-1\"><span class=\"crayon-v\">mount<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">t<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">virtiofs <\/span><span class=\"crayon-v\">proxmox<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">host<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">dir<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">name<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">mnt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">host<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">dir<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0002 seconds] -->\r\n<p>mount -t virtiofs verbindet das Host-Verzeichnis (\u00fcber den Tag <code>proxmox-host-dir-name<\/code>) mit dem Mountpunkt in der VM. F\u00fcr einen automatischen Mount bei jedem Bootvorgang wird ein Eintrag in <code>\/etc\/fstab<\/code> erstellt.<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b49af995932494\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nproxmox-host-dir-name \/mnt\/host-dir virtiofs rw,nofail,x-systemd.automount 0 0<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49af995932494-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49af995932494-1\"><span class=\"crayon-v\">proxmox<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">host<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">dir<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">name<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">mnt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">host<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">dir <\/span><span class=\"crayon-e\">virtiofs <\/span><span class=\"crayon-v\">rw<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-v\">nofail<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-v\">x<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">systemd<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-i\">automount<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">0<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<ul>\n<li><code>rw<\/code> \u2013 Verzeichnis kann gelesen und beschrieben werden<\/li>\n<li><code>nofail<\/code> \u2013 System startet weiter, auch wenn das Mounten fehlschl\u00e4gt<\/li>\n<li><code>x-systemd.automount<\/code> \u2013 Mount erfolgt erst beim ersten Zugriff, beschleunigt den Bootvorgang<\/li>\n<\/ul>\n<hr \/>\n<h2>5. Funktionstest<\/h2>\n<p><\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b49b1706207902\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nmount -a\r\nsudo -u vuser touch \/mnt\/host-dir\/testfile\r\nls -l \/mnt\/host-dir<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49b1706207902-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49b1706207902-2\">2<\/div><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49b1706207902-3\">3<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49b1706207902-1\"><span class=\"crayon-v\">mount<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">a<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49b1706207902-2\"><span class=\"crayon-v\">sudo<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-i\">u<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">vuser <\/span><span class=\"crayon-v\">touch<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">mnt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">host<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">dir<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">testfile<\/span><\/div><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49b1706207902-3\"><span class=\"crayon-v\">ls<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">l<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">mnt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">host<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">dir<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p>Erwartetes Ergebnis:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b49b3775223228\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\n-rw-r--r-- 1 vuser vuser testfile<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49b3775223228-1\">1<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49b3775223228-1\"><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">rw<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">r<\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-v\">r<\/span><span class=\"crayon-o\">--<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">vuser <\/span><span class=\"crayon-e\">vuser <\/span><span class=\"crayon-v\">testfile<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>6. Typische Fehlerquellen<\/h2>\n<ul>\n<li>UID\/GID zwischen Host und VM stimmen nicht \u00fcberein<\/li>\n<li>Ownership wurde nur im Gast, nicht auf dem Host gesetzt<\/li>\n<li>\u00dcbergeordnete Verzeichnisse blockieren den Zugriff (<code>x<\/code> fehlt)<\/li>\n<li>Mount-Optionen wie <code>uid=<\/code> oder <code>gid=<\/code> werden verwendet (wirkungslos)<\/li>\n<\/ul>\n<p>Debug-Hilfe:<\/p><!-- Urvanov Syntax Highlighter v2.9.1 -->\r\n\n\t\t<div id=\"urvanov-syntax-highlighter-6aaa7dd7b49b5002364030\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n\t\t\n\t\t\t<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>\n\t\t\t<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><div class=\"crayon-button urvanov-syntax-highlighter-nums-button\" title=\"Zeilennummern\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-plain-button\" title=\"Unformatierte Code-Ansicht\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-wrap-button\" title=\"Zeilenumbruch umschalten\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-expand-button\" title=\"Code aufklappen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-copy-button\" title=\"Copy\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><div class=\"crayon-button urvanov-syntax-highlighter-popup-button\" title=\"Code in einem neuen Fenster anzeigen\"><div class=\"urvanov-syntax-highlighter-button-icon\"><\/div><\/div><\/div><\/div>\n\t\t\t<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-plain-wrap\"><textarea wrap=\"soft\" class=\"urvanov-syntax-highlighter-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\">\nsudo namei -l \/mnt\/host-dir\r\nsudo journalctl -b | grep virtiofs<\/textarea><\/div>\n\t\t\t<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n\t\t\t\t<table class=\"crayon-table\">\n\t\t\t\t\t<tr class=\"urvanov-syntax-highlighter-row\">\n\t\t\t\t<td class=\"crayon-nums \" data-settings=\"show\">\n\t\t\t\t\t<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\"><div class=\"crayon-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49b5002364030-1\">1<\/div><div class=\"crayon-num crayon-striped-num\" data-line=\"urvanov-syntax-highlighter-6aaa7dd7b49b5002364030-2\">2<\/div><\/div>\n\t\t\t\t<\/td>\n\t\t\t\t\t\t<td class=\"urvanov-syntax-highlighter-code\"><div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49b5002364030-1\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">namei<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">l<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">mnt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">host<\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-e\">dir<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"urvanov-syntax-highlighter-6aaa7dd7b49b5002364030-2\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">journalctl<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-<\/span><span class=\"crayon-v\">b<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">|<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">grep <\/span><span class=\"crayon-v\">virtiofs<\/span><\/div><\/div><\/td>\n\t\t\t\t\t<\/tr>\n\t\t\t\t<\/table>\n\t\t\t<\/div>\n\t\t<\/div>\r\n<!-- [Format Time: 0.0001 seconds] -->\r\n<p><\/p>\n<hr \/>\n<h2>7. Zusammenfassung<\/h2>\n<p>Virtiofs ist eine performante und saubere L\u00f6sung, um Host-Verzeichnisse direkt in Proxmox-VMs zu nutzen. Entscheidend ist ein konsistentes Benutzer- und Rechtekonzept:<\/p>\n<ul>\n<li>UID\/GID m\u00fcssen identisch sein<\/li>\n<li>Rechte werden ausschlie\u00dflich auf dem Host gepflegt<\/li>\n<li>Der fstab-Eintrag entscheidet \u00fcber Boot-Verhalten und Stabilit\u00e4t<\/li>\n<\/ul>\n<p>Bei korrekter Einrichtung verh\u00e4lt sich virtiofs wie ein lokales Dateisystem \u2013 schnell, zuverl\u00e4ssig und ohne Netzwerkabh\u00e4ngigkeiten.<\/p>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/>by Speefak<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Virtiofs ist eine moderne und performante Methode, um Verzeichnisse direkt vom Proxmox-Host in virtuelle Maschinen einzubinden. Im Gegensatz zu klassischen Netzwerkdateisystemen wie NFS oder SSHFS erfolgt der Zugriff lokal \u00fcber den Hypervisor, ohne Netzwerk-Stack und ohne zus\u00e4tzliche Dienste. Dadurch eignet sich virtiofs besonders f\u00fcr High-Performance-Dateifreigaben zwischen Host und VM,\u00a0in denen hoher Datendurchsatz, geringe Latenz und [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,99,46],"tags":[],"class_list":["post-8594","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-proxmox-ve","category-virtualisierung"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/allgemein\/\" rel=\"category tag\">Allgemein<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/proxmox-ve\/\" rel=\"category tag\">Proxmox VE<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/virtualisierung\/\" rel=\"category tag\">Virtualisierung<\/a>","rttpg_excerpt":"Virtiofs ist eine moderne und performante Methode, um Verzeichnisse direkt vom Proxmox-Host in virtuelle Maschinen einzubinden. Im Gegensatz zu klassischen Netzwerkdateisystemen wie NFS oder SSHFS erfolgt der Zugriff lokal \u00fcber den Hypervisor, ohne Netzwerk-Stack und ohne zus\u00e4tzliche Dienste. Dadurch eignet sich virtiofs besonders f\u00fcr High-Performance-Dateifreigaben zwischen Host und VM,\u00a0in denen hoher Datendurchsatz, geringe Latenz und&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8594","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=8594"}],"version-history":[{"count":0,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8594\/revisions"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=8594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=8594"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=8594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}]