<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://grubit.at/fg_mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=WikiSysop</id>
	<title>Mediawiki Ferdinand Gruber - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://grubit.at/fg_mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=WikiSysop"/>
	<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php/Spezial:Beitr%C3%A4ge/WikiSysop"/>
	<updated>2026-11-12T14:29:09Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Joomla_Tipps&amp;diff=1855</id>
		<title>Joomla Tipps</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Joomla_Tipps&amp;diff=1855"/>
		<updated>2026-11-09T18:27:04Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Einleitungsbild und Beitragsbild */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Datenbank Prefix ändern==&lt;br /&gt;
Joomla Konfiguration bearbeiten - Beispiel:&lt;br /&gt;
 # configuration.php&lt;br /&gt;
 public $dbprefix = &#039;joom4_&#039;;&lt;br /&gt;
Mit &#039;&#039;&#039;phpMyAdmin&#039;&#039;&#039; die Tabellen umbenennen&lt;br /&gt;
 * Alle Tabellen markieren (auswählen)&lt;br /&gt;
 * Dropdownliste: Tabellenprefix ersetzen&lt;br /&gt;
==CSS Datei für den WYSIWYG Editor==&lt;br /&gt;
Unter Linux kann man einen Symlink zur &amp;lt;code&amp;gt;user.css&amp;lt;/code&amp;gt; im Site Template anlegen&lt;br /&gt;
:So habe ich einen Link vom Administrator Child Template zum Cassiopeia Child Template angelegt&lt;br /&gt;
 cd /srv/www/htdocs/joomlaProject/media/templates/site/atum_child&lt;br /&gt;
 ln -s ../../../site/cassiopeia_child/css/user.css editor.css&lt;br /&gt;
Dann schaut die Seite im Editor so aus wie im Frontend, wenn man benutzerdefinierte CSS Stile verwendet.&lt;br /&gt;
==Iframe Wrapper==&lt;br /&gt;
===Iframe Wrapper im Content===&lt;br /&gt;
*Wrapper Modul erstellen&lt;br /&gt;
Das Modul vom Typ Wrapper dient dazu fremdes HTML in einem &#039;&#039;&#039;Iframe&#039;&#039;&#039; darzustellen.&lt;br /&gt;
*Position des Moduls angeben&lt;br /&gt;
Verwendet man eine im Template definierte Position, dann erscheint der Iframe an dieser Stelle der Joomla Website.&lt;br /&gt;
:Man kann aber im Wrapper Modul eine eigene Position mit beliebigem Namen (z.B &#039;&#039;&#039;iframePosition&#039;&#039;&#039;) definieren. Mit Hilfe dieses Positionsnamens lässt sich dann das Wrapper Modul im Content platzieren.&lt;br /&gt;
*Iframe im Beitrag positionieren&lt;br /&gt;
Folgende Zeile in den Beitrag einfügen:&lt;br /&gt;
 { loadposition iframePosition }&lt;br /&gt;
Der Positionsname bezieht sich auf obiges Beispiel.&lt;br /&gt;
&lt;br /&gt;
Es gibt noch wietere Möglichkeiten, wie man ein Modul in einen Beitrag einbetten kann: [https://docs.joomla.org/How_do_you_put_a_module_inside_an_article%3F/de https://docs.joomla.org]&lt;br /&gt;
===Iframe-Wrapper deaktiviert JQuery===&lt;br /&gt;
Ich habe festgestellt, dass nach dem Laden einer Iframe-Wrapper Seite die Bootstrap-DropDown Menüs nicht mehr funktionieren. Anscheinend wird JQuery deaktiviert nach Laden des Iframe-Wrappers.&lt;br /&gt;
:Es wird übrigens auch Jquery-UI deaktiviert.&lt;br /&gt;
Lösung:&lt;br /&gt;
:In die &#039;&#039;&#039;index.php&#039;&#039;&#039; des Templates folgende Zeilen einfügen&lt;br /&gt;
 JHtml::_(&#039;jquery.framework&#039;);&lt;br /&gt;
 JHtml::_(&#039;jquery.ui&#039;, array(&#039;core&#039;));&lt;br /&gt;
===Iframe Wrapper und SSL===&lt;br /&gt;
Nach Umstellung der Joomla Site auf SSL bzw. wenn Apache SSL erzwingt, werden IframeWrapper Seiten nicht mehr angezeigt.&lt;br /&gt;
:Im &#039;&#039;&#039;IframeWrapper&#039;&#039;&#039; muss die Option &#039;&#039;&#039;Erweitert / Hinzufügen&#039;&#039;&#039; ausgeschaltet werden, sonst beginnt der Link immer mit &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; (statt &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt;).&lt;br /&gt;
===GET_Parameter an Wrapper übergeben===&lt;br /&gt;
Override der Komponente Wrapper erstellen.&lt;br /&gt;
 .../(child)template/html/com_wrapper/wrapper/default.php&lt;br /&gt;
Im folgenden Code unmittelbar vor dem &amp;lt;code&amp;gt;Iframe&amp;lt;/code&amp;gt; werden einige Parameter an den Iframe-Wrapper übergeben, die dann von dem PHP Skript ausgewertet werden können.&lt;br /&gt;
 // *******************************&lt;br /&gt;
 // Parameter an Wrepper übergeben:&lt;br /&gt;
 // *******************************&lt;br /&gt;
 if ( strstr ($this-&amp;gt;wrapper-&amp;gt;url,&amp;quot;?&amp;quot;)  ) $this-&amp;gt;wrapper-&amp;gt;url .= &amp;quot;&amp;amp;referer=joomla&amp;quot;;&lt;br /&gt;
    else $this-&amp;gt;wrapper-&amp;gt;url .= &amp;quot;?referer=joomla&amp;quot;;&lt;br /&gt;
       $user = JFactory::getUser();&lt;br /&gt;
       if ( $user-&amp;gt;username ) $this-&amp;gt;wrapper-&amp;gt;url .=&lt;br /&gt;
          &amp;quot;&amp;amp;user=&amp;quot;.$user-&amp;gt;username.&lt;br /&gt;
          &amp;quot;&amp;amp;userfullname=&amp;quot;.$user-&amp;gt;name.&lt;br /&gt;
          &amp;quot;&amp;amp;groups=&amp;quot;.implode(&amp;quot;,&amp;quot;,$user-&amp;gt;get(&#039;groups&#039;));&lt;br /&gt;
 // *******************************  ?&amp;gt;&lt;br /&gt;
 &amp;lt;iframe &amp;lt;?php echo $this-&amp;gt;wrapper-&amp;gt;load; ?&amp;gt;&lt;br /&gt;
==Bilder ausrichten==&lt;br /&gt;
Mit den Klassen&lt;br /&gt;
 img-fulltext-left&lt;br /&gt;
 img-fulltext-right&lt;br /&gt;
werden die Bilder entsprechend positioniert und bekommen automatisch einen Abstand zum umlaufenden Text.&lt;br /&gt;
===Bilder untereinander anordnen===&lt;br /&gt;
Das geht mit dem grafischen Editor nicht wirklich gut. Daher gehe ich so vor: Ich füge zuerst die Bilder in den Text irgendwo ein und bringe sie auf die richtige Größe. Dann erzeuge ich im HTML Modus einen DIV Container:&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;div style=&amp;quot;width: 160px; float: left;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Zwischen diese obigen zwei Zeilen kopiere ich dann die Codezeilen der Bilder hinein, dann schaut das ganze etwa so aus:&amp;lt;pre&amp;gt;&lt;br /&gt;
* linksbündig&lt;br /&gt;
 &amp;lt;div style=&amp;quot;width: 160px; float: left;&amp;gt;&lt;br /&gt;
 &amp;lt;img src=&amp;quot;images/stories/joomla-dev_cycle.png&amp;quot; width=&amp;quot;150&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;img src=&amp;quot;images/stories/clock.jpg&amp;quot; width=&amp;quot;150&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* rechtsbündig&lt;br /&gt;
 &amp;lt;div style=&amp;quot;width: 160px; float: right;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;img src=&amp;quot;images/stories/joomla-dev_cycle.png&amp;quot; width=&amp;quot;150&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;img src=&amp;quot;images/stories/clock.jpg&amp;quot; width=&amp;quot;150&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Die Breite  der Bilder &amp;lt;code&amp;gt;width&amp;lt;/code&amp;gt; ist etwas weniger als die Breite des Containers, wie man sieht sieht.&lt;br /&gt;
=== Einleitungsbild und Beitragsbild ===&lt;br /&gt;
Dieses Feature betrifft Beiträge, die in einem Blog Layout angezeigt serden sollen.&lt;br /&gt;
==== Blog Layout ====&lt;br /&gt;
 Menüs | Alle Menüeinträge&lt;br /&gt;
Einen Menüpunkt mit dem Menüeintragstyp &amp;lt;tt&amp;gt;Kategorieblog&amp;lt;/tt&amp;gt; erzeugen.&lt;br /&gt;
 Blog-Layout | CSS-Klasse Beitrag&lt;br /&gt;
Hier kann man zum Beispiel &amp;lt;tt&amp;gt;image-left&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;image-right&amp;lt;/tt&amp;gt; eintragen, um das in einem Beitrag ausgewählte Bild auf jeder Seite des Blogs entsprechend anzuordnen.&lt;br /&gt;
Diese Einstellung gilt also für alle Beiträge dieses Blogs&lt;br /&gt;
&lt;br /&gt;
==== Beitrags Layout ====&lt;br /&gt;
Möchte man aber abwechselnd das Bild rechts oder links anordnen, dann geschieht das über die Auswahl einer CSS-Klasse für das Bild im &amp;lt;tt&amp;gt;Beitrags-Layout&amp;lt;/tt&amp;gt;&lt;br /&gt;
 Beitrag-Layout | CSS-Klasse Bild&lt;br /&gt;
: Hier kann man &amp;lt;tt&amp;gt;float-start&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;float-end&amp;lt;/tt&amp;gt; sowohl beim Einleitungsbild als auch beim Beitragsbild eintragen.&lt;br /&gt;
Empfehlung; Die Bildbreite auf &amp;lt;code&amp;gt;480 px&amp;lt;/code&amp;gt; festlegen.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Die CSS-Klassen &amp;lt;tt&amp;gt;float-start und float-end&amp;lt;/tt&amp;gt; funktionieren anscheinend nicht im Blog &amp;lt;code&amp;gt;Hauptbeiträge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://forum.joomla.de/thread/15406-joomlaplates-einleitungsbild/ Info aus dem Joomla Forum]&lt;br /&gt;
&lt;br /&gt;
==Einfaches Datumsformat ohne Uhrzeit==&lt;br /&gt;
Folgende Datei bearbeiten: &#039;&#039;&#039;language/de-DE/de-De.ini&#039;&#039;&#039;&lt;br /&gt;
 # DATE_FORMAT_LC2=%A, den %d. %B %Y um %H:%M Uhr&lt;br /&gt;
 DATE_FORMAT_LC2=%d. %B %Y&lt;br /&gt;
==Angabe des Autors verkürzen==&lt;br /&gt;
Folgende Datei bearbeiten: &#039;&#039;&#039;language/de-DE/de-De.com_content.ini&#039;&#039;&#039;&lt;br /&gt;
 # WRITTEN BY=Geschrieben von: %s&lt;br /&gt;
 WRITTEN BY=%s&lt;br /&gt;
==Joomla Druckvorschau bzw. Druckausgabe formatieren==&lt;br /&gt;
Die Druckvorschau wird durch das Skript &amp;lt;code&amp;gt;component.php&amp;lt;/code&amp;gt; erzeugt:&lt;br /&gt;
 /templates/system/component.php&lt;br /&gt;
Dafür wird die CSS Klasse &#039;&#039;&#039;contentpane&#039;&#039;&#039; verwendet. Für diese Klasse kann man in der CSS Datei des verwendeten Templates (template.css) Formatierungen festlegen, z.B.: eine Mindestbreite des Containers.&lt;br /&gt;
 .contentpane {&lt;br /&gt;
     min-width: 720px;&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Die direkte Druckausgabe wird nicht über component.php gesteuert. Dazu muss im Head Bereich der index.php des Templates ein Verweis zu einer print.css eingefügt werden:&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;print&amp;quot; href=&amp;quot;&amp;lt;?php echo $templateUrl; ?&amp;gt;/css/print.css&amp;quot; /&amp;gt;&lt;br /&gt;
==Kalender PopUP formatieren==&lt;br /&gt;
*Wochenanfang auf Montag legen&lt;br /&gt;
 # /media/system/js/calendar-setup.js&lt;br /&gt;
 param_default(&amp;quot;firstDay&amp;quot;,1);&lt;br /&gt;
*SA und SO sichtbar machen&lt;br /&gt;
In folgender Datei in Zeile 46 den Farbwert &amp;lt;code&amp;gt;#dedede&amp;lt;/code&amp;gt; durch &amp;lt;code&amp;gt;#777777&amp;lt;/code&amp;gt; ersetzen.&lt;br /&gt;
 # /media/system/css/calendar-jos.css&lt;br /&gt;
==Modulpositionen anzeigen==&lt;br /&gt;
An die URL den Querystring &amp;lt;code&amp;gt;?tp=1&amp;lt;/code&amp;gt; anhängen&lt;br /&gt;
:Beispiel: http://t2792.greatnet.de/joomla_sieglinde?tp=1&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Joomla_Tipps&amp;diff=1854</id>
		<title>Joomla Tipps</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Joomla_Tipps&amp;diff=1854"/>
		<updated>2026-11-09T10:45:24Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Einleitungsbild und Beitragsbild */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Datenbank Prefix ändern==&lt;br /&gt;
Joomla Konfiguration bearbeiten - Beispiel:&lt;br /&gt;
 # configuration.php&lt;br /&gt;
 public $dbprefix = &#039;joom4_&#039;;&lt;br /&gt;
Mit &#039;&#039;&#039;phpMyAdmin&#039;&#039;&#039; die Tabellen umbenennen&lt;br /&gt;
 * Alle Tabellen markieren (auswählen)&lt;br /&gt;
 * Dropdownliste: Tabellenprefix ersetzen&lt;br /&gt;
==CSS Datei für den WYSIWYG Editor==&lt;br /&gt;
Unter Linux kann man einen Symlink zur &amp;lt;code&amp;gt;user.css&amp;lt;/code&amp;gt; im Site Template anlegen&lt;br /&gt;
:So habe ich einen Link vom Administrator Child Template zum Cassiopeia Child Template angelegt&lt;br /&gt;
 cd /srv/www/htdocs/joomlaProject/media/templates/site/atum_child&lt;br /&gt;
 ln -s ../../../site/cassiopeia_child/css/user.css editor.css&lt;br /&gt;
Dann schaut die Seite im Editor so aus wie im Frontend, wenn man benutzerdefinierte CSS Stile verwendet.&lt;br /&gt;
==Iframe Wrapper==&lt;br /&gt;
===Iframe Wrapper im Content===&lt;br /&gt;
*Wrapper Modul erstellen&lt;br /&gt;
Das Modul vom Typ Wrapper dient dazu fremdes HTML in einem &#039;&#039;&#039;Iframe&#039;&#039;&#039; darzustellen.&lt;br /&gt;
*Position des Moduls angeben&lt;br /&gt;
Verwendet man eine im Template definierte Position, dann erscheint der Iframe an dieser Stelle der Joomla Website.&lt;br /&gt;
:Man kann aber im Wrapper Modul eine eigene Position mit beliebigem Namen (z.B &#039;&#039;&#039;iframePosition&#039;&#039;&#039;) definieren. Mit Hilfe dieses Positionsnamens lässt sich dann das Wrapper Modul im Content platzieren.&lt;br /&gt;
*Iframe im Beitrag positionieren&lt;br /&gt;
Folgende Zeile in den Beitrag einfügen:&lt;br /&gt;
 { loadposition iframePosition }&lt;br /&gt;
Der Positionsname bezieht sich auf obiges Beispiel.&lt;br /&gt;
&lt;br /&gt;
Es gibt noch wietere Möglichkeiten, wie man ein Modul in einen Beitrag einbetten kann: [https://docs.joomla.org/How_do_you_put_a_module_inside_an_article%3F/de https://docs.joomla.org]&lt;br /&gt;
===Iframe-Wrapper deaktiviert JQuery===&lt;br /&gt;
Ich habe festgestellt, dass nach dem Laden einer Iframe-Wrapper Seite die Bootstrap-DropDown Menüs nicht mehr funktionieren. Anscheinend wird JQuery deaktiviert nach Laden des Iframe-Wrappers.&lt;br /&gt;
:Es wird übrigens auch Jquery-UI deaktiviert.&lt;br /&gt;
Lösung:&lt;br /&gt;
:In die &#039;&#039;&#039;index.php&#039;&#039;&#039; des Templates folgende Zeilen einfügen&lt;br /&gt;
 JHtml::_(&#039;jquery.framework&#039;);&lt;br /&gt;
 JHtml::_(&#039;jquery.ui&#039;, array(&#039;core&#039;));&lt;br /&gt;
===Iframe Wrapper und SSL===&lt;br /&gt;
Nach Umstellung der Joomla Site auf SSL bzw. wenn Apache SSL erzwingt, werden IframeWrapper Seiten nicht mehr angezeigt.&lt;br /&gt;
:Im &#039;&#039;&#039;IframeWrapper&#039;&#039;&#039; muss die Option &#039;&#039;&#039;Erweitert / Hinzufügen&#039;&#039;&#039; ausgeschaltet werden, sonst beginnt der Link immer mit &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; (statt &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt;).&lt;br /&gt;
===GET_Parameter an Wrapper übergeben===&lt;br /&gt;
Override der Komponente Wrapper erstellen.&lt;br /&gt;
 .../(child)template/html/com_wrapper/wrapper/default.php&lt;br /&gt;
Im folgenden Code unmittelbar vor dem &amp;lt;code&amp;gt;Iframe&amp;lt;/code&amp;gt; werden einige Parameter an den Iframe-Wrapper übergeben, die dann von dem PHP Skript ausgewertet werden können.&lt;br /&gt;
 // *******************************&lt;br /&gt;
 // Parameter an Wrepper übergeben:&lt;br /&gt;
 // *******************************&lt;br /&gt;
 if ( strstr ($this-&amp;gt;wrapper-&amp;gt;url,&amp;quot;?&amp;quot;)  ) $this-&amp;gt;wrapper-&amp;gt;url .= &amp;quot;&amp;amp;referer=joomla&amp;quot;;&lt;br /&gt;
    else $this-&amp;gt;wrapper-&amp;gt;url .= &amp;quot;?referer=joomla&amp;quot;;&lt;br /&gt;
       $user = JFactory::getUser();&lt;br /&gt;
       if ( $user-&amp;gt;username ) $this-&amp;gt;wrapper-&amp;gt;url .=&lt;br /&gt;
          &amp;quot;&amp;amp;user=&amp;quot;.$user-&amp;gt;username.&lt;br /&gt;
          &amp;quot;&amp;amp;userfullname=&amp;quot;.$user-&amp;gt;name.&lt;br /&gt;
          &amp;quot;&amp;amp;groups=&amp;quot;.implode(&amp;quot;,&amp;quot;,$user-&amp;gt;get(&#039;groups&#039;));&lt;br /&gt;
 // *******************************  ?&amp;gt;&lt;br /&gt;
 &amp;lt;iframe &amp;lt;?php echo $this-&amp;gt;wrapper-&amp;gt;load; ?&amp;gt;&lt;br /&gt;
==Bilder ausrichten==&lt;br /&gt;
Mit den Klassen&lt;br /&gt;
 img-fulltext-left&lt;br /&gt;
 img-fulltext-right&lt;br /&gt;
werden die Bilder entsprechend positioniert und bekommen automatisch einen Abstand zum umlaufenden Text.&lt;br /&gt;
===Bilder untereinander anordnen===&lt;br /&gt;
Das geht mit dem grafischen Editor nicht wirklich gut. Daher gehe ich so vor: Ich füge zuerst die Bilder in den Text irgendwo ein und bringe sie auf die richtige Größe. Dann erzeuge ich im HTML Modus einen DIV Container:&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;div style=&amp;quot;width: 160px; float: left;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Zwischen diese obigen zwei Zeilen kopiere ich dann die Codezeilen der Bilder hinein, dann schaut das ganze etwa so aus:&amp;lt;pre&amp;gt;&lt;br /&gt;
* linksbündig&lt;br /&gt;
 &amp;lt;div style=&amp;quot;width: 160px; float: left;&amp;gt;&lt;br /&gt;
 &amp;lt;img src=&amp;quot;images/stories/joomla-dev_cycle.png&amp;quot; width=&amp;quot;150&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;img src=&amp;quot;images/stories/clock.jpg&amp;quot; width=&amp;quot;150&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* rechtsbündig&lt;br /&gt;
 &amp;lt;div style=&amp;quot;width: 160px; float: right;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;img src=&amp;quot;images/stories/joomla-dev_cycle.png&amp;quot; width=&amp;quot;150&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;img src=&amp;quot;images/stories/clock.jpg&amp;quot; width=&amp;quot;150&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;Die Breite  der Bilder &amp;lt;code&amp;gt;width&amp;lt;/code&amp;gt; ist etwas weniger als die Breite des Containers, wie man sieht sieht.&lt;br /&gt;
=== Einleitungsbild und Beitragsbild ===&lt;br /&gt;
Dieses Feature betrifft Beiträge, die in einem Blog Layout angezeigt serden sollen.&lt;br /&gt;
==== Blog Layout ====&lt;br /&gt;
 Menüs | Alle Menüeinträge&lt;br /&gt;
Einen Menüpunkt mit dem Menüeintragstyp &amp;lt;tt&amp;gt;Kategorieblog&amp;lt;/tt&amp;gt; erzeugen.&lt;br /&gt;
 Blog-Layout | CSS-Klasse Beitrag&lt;br /&gt;
Hier kann man zum Beispiel &amp;lt;tt&amp;gt;image-left&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;image-right&amp;lt;/tt&amp;gt; eintragen, um das in einem Beitrag ausgewählte Bild auf jeder Seite des Blogs entsprechend anzuordnen.&lt;br /&gt;
Diese Einstellung gilt also für alle Beiträge dieses Blogs&lt;br /&gt;
&lt;br /&gt;
==== Beitrags Layout ====&lt;br /&gt;
Möchte man aber abwechselnd das Bild rechts oder links anordnen, dann geschieht das über die Auswahl einer CSS-Klasse für das Bild im &amp;lt;tt&amp;gt;Beitrags-Layout&amp;lt;/tt&amp;gt;&lt;br /&gt;
 Beitrag-Layout | CSS-Klasse Bild&lt;br /&gt;
: Hier kann man &amp;lt;tt&amp;gt;float-start&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;float-end&amp;lt;/tt&amp;gt; sowohl beim Einleitungsbild als auch beim Beitragsbild eintragen.&lt;br /&gt;
[https://forum.joomla.de/thread/15406-joomlaplates-einleitungsbild/ Info aus dem Joomla Forum]&lt;br /&gt;
&lt;br /&gt;
==Einfaches Datumsformat ohne Uhrzeit==&lt;br /&gt;
Folgende Datei bearbeiten: &#039;&#039;&#039;language/de-DE/de-De.ini&#039;&#039;&#039;&lt;br /&gt;
 # DATE_FORMAT_LC2=%A, den %d. %B %Y um %H:%M Uhr&lt;br /&gt;
 DATE_FORMAT_LC2=%d. %B %Y&lt;br /&gt;
==Angabe des Autors verkürzen==&lt;br /&gt;
Folgende Datei bearbeiten: &#039;&#039;&#039;language/de-DE/de-De.com_content.ini&#039;&#039;&#039;&lt;br /&gt;
 # WRITTEN BY=Geschrieben von: %s&lt;br /&gt;
 WRITTEN BY=%s&lt;br /&gt;
==Joomla Druckvorschau bzw. Druckausgabe formatieren==&lt;br /&gt;
Die Druckvorschau wird durch das Skript &amp;lt;code&amp;gt;component.php&amp;lt;/code&amp;gt; erzeugt:&lt;br /&gt;
 /templates/system/component.php&lt;br /&gt;
Dafür wird die CSS Klasse &#039;&#039;&#039;contentpane&#039;&#039;&#039; verwendet. Für diese Klasse kann man in der CSS Datei des verwendeten Templates (template.css) Formatierungen festlegen, z.B.: eine Mindestbreite des Containers.&lt;br /&gt;
 .contentpane {&lt;br /&gt;
     min-width: 720px;&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Die direkte Druckausgabe wird nicht über component.php gesteuert. Dazu muss im Head Bereich der index.php des Templates ein Verweis zu einer print.css eingefügt werden:&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;print&amp;quot; href=&amp;quot;&amp;lt;?php echo $templateUrl; ?&amp;gt;/css/print.css&amp;quot; /&amp;gt;&lt;br /&gt;
==Kalender PopUP formatieren==&lt;br /&gt;
*Wochenanfang auf Montag legen&lt;br /&gt;
 # /media/system/js/calendar-setup.js&lt;br /&gt;
 param_default(&amp;quot;firstDay&amp;quot;,1);&lt;br /&gt;
*SA und SO sichtbar machen&lt;br /&gt;
In folgender Datei in Zeile 46 den Farbwert &amp;lt;code&amp;gt;#dedede&amp;lt;/code&amp;gt; durch &amp;lt;code&amp;gt;#777777&amp;lt;/code&amp;gt; ersetzen.&lt;br /&gt;
 # /media/system/css/calendar-jos.css&lt;br /&gt;
==Modulpositionen anzeigen==&lt;br /&gt;
An die URL den Querystring &amp;lt;code&amp;gt;?tp=1&amp;lt;/code&amp;gt; anhängen&lt;br /&gt;
:Beispiel: http://t2792.greatnet.de/joomla_sieglinde?tp=1&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1853</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1853"/>
		<updated>2026-11-05T19:34:33Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Null-Koaleszenz-Operator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== Null-Koaleszenz-Operator ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
&lt;br /&gt;
Vorteile: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist. Mit diesem Operator vermeidet man &amp;lt;tt&amp;gt;isset()&amp;lt;/tt&amp;gt; Abfragen.&lt;br /&gt;
 if (isset($Benutzername)&lt;br /&gt;
    $name = $Benutzername&lt;br /&gt;
 else $Name = &amp;quot;Gast&lt;br /&gt;
&lt;br /&gt;
Verkürzte Form mit dem Null-Koaleszenz-Operator&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Der Null-Koaleszenz Operator reagiert NICHT auf einen Leerstring.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einen &#039;&#039;&#039;Null-Koaleszenz Zuweisungsoperator&#039;&#039;&#039;&lt;br /&gt;
 $_SESSION[&amp;quot;lastState&amp;quot;] ??= &amp;quot;&amp;quot;;&lt;br /&gt;
Wenn die Session-Variable nicht existiert, wird sie erzeugt und erhält einen Leerstring als Wert.&lt;br /&gt;
&lt;br /&gt;
==== Ternärer Operator ====&lt;br /&gt;
 $wert = $wert ? $wert : $ersatz;&lt;br /&gt;
&lt;br /&gt;
==== Elvis Operator ====&lt;br /&gt;
Eine verkürzte Form des ternären Operators nennt sich Elvis-Operator&lt;br /&gt;
 $wert ?: $ersatz;&lt;br /&gt;
Der Elvis-Operator reagiert auf alle falsy-Werte&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; null, false, 0, &amp;quot;0&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
=== Properties kapseln ===&lt;br /&gt;
Die Sichtbarkeit von Properties und Methoden wird festgelegt, indem man &amp;lt;tt&amp;gt;public, protected&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; der Deklaration voranstellt.&lt;br /&gt;
Wenn eine Property für die Implementierung der Klasse und ihrer Unterklassen gedacht ist, aber nicht Teil der öffentlichen Schnittstelle sein soll, verwendet man &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Propterties, die mit einer set_Methode geändert werden, können &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
# Beispiel&lt;br /&gt;
 private $width&lt;br /&gt;
 public function set_width($value) {&lt;br /&gt;
     if (! strPos($value,&amp;quot;px&amp;quot;) &amp;amp;&amp;amp; ! strPos($value,&amp;quot;%&amp;quot;) )&lt;br /&gt;
         $value .= &amp;quot;px&amp;quot;;&lt;br /&gt;
      $this-&amp;gt;width = $value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/de/language.oop5.visibility.php Detailinformationen] in der PHP Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1852</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1852"/>
		<updated>2026-11-01T16:57:42Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Elvis Operator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== Null-Koaleszenz-Operator ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
&lt;br /&gt;
Vorteile: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist. Mit diesem Operator vermeidet man &amp;lt;tt&amp;gt;isset()&amp;lt;/tt&amp;gt; Abfragen.&lt;br /&gt;
 if (isset($Benutzername)&lt;br /&gt;
    $name = $Benutzername&lt;br /&gt;
 else $Name = &amp;quot;Gast&lt;br /&gt;
&lt;br /&gt;
Verkürzte Form mit dem Null-Koaleszenz-Operator&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Der Null-Koaleszenz Operator reagiert NICHT auf einen Leerstring.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ternärer Operator ====&lt;br /&gt;
 $wert = $wert ? $wert : $ersatz;&lt;br /&gt;
&lt;br /&gt;
==== Elvis Operator ====&lt;br /&gt;
Eine verkürzte Form des ternären Operators nennt sich Elvis-Operator&lt;br /&gt;
 $wert ?: $ersatz;&lt;br /&gt;
Der Elvis-Operator reagiert auf alle falsy-Werte&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; null, false, 0, &amp;quot;0&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
=== Properties kapseln ===&lt;br /&gt;
Die Sichtbarkeit von Properties und Methoden wird festgelegt, indem man &amp;lt;tt&amp;gt;public, protected&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; der Deklaration voranstellt.&lt;br /&gt;
Wenn eine Property für die Implementierung der Klasse und ihrer Unterklassen gedacht ist, aber nicht Teil der öffentlichen Schnittstelle sein soll, verwendet man &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Propterties, die mit einer set_Methode geändert werden, können &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
# Beispiel&lt;br /&gt;
 private $width&lt;br /&gt;
 public function set_width($value) {&lt;br /&gt;
     if (! strPos($value,&amp;quot;px&amp;quot;) &amp;amp;&amp;amp; ! strPos($value,&amp;quot;%&amp;quot;) )&lt;br /&gt;
         $value .= &amp;quot;px&amp;quot;;&lt;br /&gt;
      $this-&amp;gt;width = $value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/de/language.oop5.visibility.php Detailinformationen] in der PHP Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1851</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1851"/>
		<updated>2026-11-01T16:54:34Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Null-Koaleszenz-Operator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== Null-Koaleszenz-Operator ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
&lt;br /&gt;
Vorteile: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist. Mit diesem Operator vermeidet man &amp;lt;tt&amp;gt;isset()&amp;lt;/tt&amp;gt; Abfragen.&lt;br /&gt;
 if (isset($Benutzername)&lt;br /&gt;
    $name = $Benutzername&lt;br /&gt;
 else $Name = &amp;quot;Gast&lt;br /&gt;
&lt;br /&gt;
Verkürzte Form mit dem Null-Koaleszenz-Operator&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Der Null-Koaleszenz Operator reagiert NICHT auf einen Leerstring.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ternärer Operator ====&lt;br /&gt;
 $wert = $wert ? $wert : $ersatz;&lt;br /&gt;
&lt;br /&gt;
==== Elvis Operator ====&lt;br /&gt;
Eine verkürzte Form des ternären Operators nrennt sich Elvis-Operator&lt;br /&gt;
 $wert ?: $ersatz;&lt;br /&gt;
Der Elvis-Operator reagiert auf alle falsy-Werte&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; null, false, 0, &amp;quot;0&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
=== Properties kapseln ===&lt;br /&gt;
Die Sichtbarkeit von Properties und Methoden wird festgelegt, indem man &amp;lt;tt&amp;gt;public, protected&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; der Deklaration voranstellt.&lt;br /&gt;
Wenn eine Property für die Implementierung der Klasse und ihrer Unterklassen gedacht ist, aber nicht Teil der öffentlichen Schnittstelle sein soll, verwendet man &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Propterties, die mit einer set_Methode geändert werden, können &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
# Beispiel&lt;br /&gt;
 private $width&lt;br /&gt;
 public function set_width($value) {&lt;br /&gt;
     if (! strPos($value,&amp;quot;px&amp;quot;) &amp;amp;&amp;amp; ! strPos($value,&amp;quot;%&amp;quot;) )&lt;br /&gt;
         $value .= &amp;quot;px&amp;quot;;&lt;br /&gt;
      $this-&amp;gt;width = $value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/de/language.oop5.visibility.php Detailinformationen] in der PHP Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=World4You&amp;diff=1850</id>
		<title>World4You</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=World4You&amp;diff=1850"/>
		<updated>2026-10-28T09:22:10Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: Die Seite wurde neu angelegt: „=== Rettungssystem ===  * Im Webinterface von [https://my.world4you.com/de/login world4you] das Paket &amp;lt;code&amp;gt;vServer&amp;lt;/code&amp;gt; auswählen * Rettungssystem einbinden * Nun die &amp;lt;code&amp;gt;Remote Console&amp;lt;/code&amp;gt; öffnen * Taste &amp;quot;d&amp;quot; drücken - für deutsche Tastatur Vorher auf das Fenster der Remote Console klicken, sonst wird der Tastendruick nicht registriert. * Taste &amp;quot;q&amp;quot; drücken  * Root-Passwort ändern durch Eingabe von &amp;lt;code&amp;gt;passwd&amp;lt;/code&amp;gt; * SSH Server starten: &amp;lt;c…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Rettungssystem ===&lt;br /&gt;
&lt;br /&gt;
* Im Webinterface von [https://my.world4you.com/de/login world4you] das Paket &amp;lt;code&amp;gt;vServer&amp;lt;/code&amp;gt; auswählen&lt;br /&gt;
* Rettungssystem einbinden&lt;br /&gt;
* Nun die &amp;lt;code&amp;gt;Remote Console&amp;lt;/code&amp;gt; öffnen&lt;br /&gt;
* Taste &amp;quot;d&amp;quot; drücken - für deutsche Tastatur Vorher auf das Fenster der Remote Console klicken, sonst wird der Tastendruick nicht registriert.&lt;br /&gt;
* Taste &amp;quot;q&amp;quot; drücken &lt;br /&gt;
* Root-Passwort ändern durch Eingabe von &amp;lt;code&amp;gt;passwd&amp;lt;/code&amp;gt;&lt;br /&gt;
* SSH Server starten: &amp;lt;code&amp;gt;service ssh start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun kann man sich über SSH am Rettungssysdtem einloggen und ist nicht mehr auf die wenig komvortable Remote Console angewiesen.&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Hauptseite&amp;diff=1849</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Hauptseite&amp;diff=1849"/>
		<updated>2026-10-28T08:59:28Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Wiki dient dem &amp;lt;tt&amp;gt;Autor&amp;lt;/tt&amp;gt; als Erinnerungshilfe für Probleme und Lösungen mit der IT und wird laufend ergänzt und erweitert. Die Informationen mögen zum Teil veraltet und mangelhaft sein,  so manches wird aber für andere brauchbar sein, hoffe ich. Entgegen den Gepflogenheiten eines Wikis erlaube ich keine Änderung der Daten und keine Benutzerregistrierung. Bitte um Verständnis. Wer mich auf Fehler etc. aufmerksam machen möchte, [mailto:&amp;amp;#102;&amp;amp;#046;&amp;amp;#103;&amp;amp;#114;&amp;amp;#117;&amp;amp;#098;&amp;amp;#101;&amp;amp;#114;&amp;amp;#064;&amp;amp;#101;&amp;amp;#100;&amp;amp;#117;&amp;amp;#104;&amp;amp;#105;&amp;amp;#046;&amp;amp;#097;&amp;amp;#116; bitte hier klicken]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+&lt;br /&gt;
!Config&lt;br /&gt;
!OS&lt;br /&gt;
!Anwendung&lt;br /&gt;
!Hardware&lt;br /&gt;
!Development&lt;br /&gt;
!Sonstiges&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|[[Netzwerk]]&lt;br /&gt;
[[Datensicherung]]&lt;br /&gt;
&lt;br /&gt;
[[Partitionen und Dateisysteme]]&lt;br /&gt;
&lt;br /&gt;
[[Drucken]]&lt;br /&gt;
&lt;br /&gt;
[[Mail]]&lt;br /&gt;
|&lt;br /&gt;
[[Linux]] allgemein&lt;br /&gt;
&lt;br /&gt;
[[Linux Befehle]]&lt;br /&gt;
&lt;br /&gt;
[[SUSE]] [[Systemupgrade]]&lt;br /&gt;
----&lt;br /&gt;
[[Debian]]&lt;br /&gt;
&lt;br /&gt;
[[Knoppix]]&lt;br /&gt;
&lt;br /&gt;
[[Puppy Linux]]&lt;br /&gt;
&lt;br /&gt;
[[Lubuntu]]&lt;br /&gt;
&lt;br /&gt;
[[Ubuntu]]&lt;br /&gt;
----&lt;br /&gt;
[[Android]]&lt;br /&gt;
&lt;br /&gt;
[[DOS]]&lt;br /&gt;
&lt;br /&gt;
[[Windows]]&lt;br /&gt;
|[[Internet]]&lt;br /&gt;
: [[Joomla]]&lt;br /&gt;
: [[Cloud]]&lt;br /&gt;
[[Multimedia]]&lt;br /&gt;
&lt;br /&gt;
[[MySQL Befehle]]&lt;br /&gt;
&lt;br /&gt;
[[Office]] Anwendungen&lt;br /&gt;
[[Grafik]]&lt;br /&gt;
----[[Verschlüsselung]]&lt;br /&gt;
&lt;br /&gt;
[[Virtualbox]]&lt;br /&gt;
&lt;br /&gt;
[[Horde]] Groupware&lt;br /&gt;
&lt;br /&gt;
[[Text to Speech]] Vorlesen&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[Motherboard]]&lt;br /&gt;
&lt;br /&gt;
[[Maus]] [[Keyboard]]&lt;br /&gt;
&lt;br /&gt;
[[Notebooks]]&lt;br /&gt;
&lt;br /&gt;
[[Festplatten]]&lt;br /&gt;
&lt;br /&gt;
[[Prozessor]]&lt;br /&gt;
&lt;br /&gt;
[[Drucker]]&lt;br /&gt;
[[Scanner]]&lt;br /&gt;
----[[NSLU2]]&lt;br /&gt;
&lt;br /&gt;
[[Raspberry Pi]]&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[GIT]]&lt;br /&gt;
----&lt;br /&gt;
[[HTML]]&lt;br /&gt;
&lt;br /&gt;
[[CSS]]&lt;br /&gt;
&lt;br /&gt;
[[Javascript]]&lt;br /&gt;
&lt;br /&gt;
[[jQuery]]&lt;br /&gt;
&lt;br /&gt;
[[PHP]]&lt;br /&gt;
&lt;br /&gt;
[[YII]] &lt;br /&gt;
----&lt;br /&gt;
:[[Kate]]&lt;br /&gt;
:[[Tilde]]&lt;br /&gt;
:[[Nano]]&lt;br /&gt;
&lt;br /&gt;
[[Reguläre Ausdrücke]]&lt;br /&gt;
|&lt;br /&gt;
[[Sandbox]]&lt;br /&gt;
&lt;br /&gt;
[[Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
[[World4You]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Datensicherung&amp;diff=1848</id>
		<title>Datensicherung</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Datensicherung&amp;diff=1848"/>
		<updated>2026-10-25T11:07:48Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Beispiel 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Alle Informationen hier erheben keinen Anspruch auf Richtigkeit oder Vollständigkeit. Das Skript ist als &#039;&#039;&#039;work in progress&#039;&#039;&#039; eines Hobbyprogrammierers zu verstehen, entstanden aus der Praxis. Anpassungen an die eigene Umgebung sind wahrscheinlich notwendig.&lt;br /&gt;
== Sicherungsvorgang ==&lt;br /&gt;
Es geht um die Sicherung des lokalen Rechners unter einem Linux Betriebssystem. Das Ziel der Sicherung kann eine USB Festplatte, ein Rechner im LAN oder im Internet sein, in diesem Fall erfolgt die Sicherung über SSH.&lt;br /&gt;
: Ich verwende derzeit eine USB Festplatte, die an einem Minicomputer [[Raspberry Pi]] angeschlossen ist.&lt;br /&gt;
: Falls die Sicherung über SSH durchgeführt werden soll, sollte die SSH-Authentifizierung nicht durch ein Passwort sondern über Schlüsselpaare erfolgen. Dies ist besonders wichtig, wenn die Sicherung automatisiert über einen Cronjob durchgeführt werden soll, weil man da kein Passwort eingeben kann.&lt;br /&gt;
&lt;br /&gt;
Siehe Artikel über [[SSH]]&lt;br /&gt;
=== Sicherung starten über cronjob ===&lt;br /&gt;
Nach Abmeldung des letzten Benutzers wird automatisch das Script &amp;lt;tt&amp;gt;bak.sh&amp;lt;/tt&amp;gt; gestartet.&lt;br /&gt;
Das Skript startet nur dann, wenn kein User mehr eingeloggt ist, auch nicht über SSH&lt;br /&gt;
 # Backup&lt;br /&gt;
 */10 * * * *    /usr/local/bin/bak_cron.sh mysqldump rotation shutdown&lt;br /&gt;
Obwohl der cronjob alle 10 Minuten startet, wird die Sicherung frühestens nach 20 Minuten gestartet, da im Skript mindestens 2 Leerläufe programmiert sind. Wenn die Sicherung einmal begonnen hat, wird jeder weitere Sicherungsvorgang blockiert, bis zum Neustart des Rechners.&lt;br /&gt;
&lt;br /&gt;
Das Script &amp;lt;tt&amp;gt;bak.sh&amp;lt;/tt&amp;gt; wird per per cronjob vom Skript &amp;lt;tt&amp;gt;bak_cron.sh&amp;lt;/tt&amp;gt; aufgerufen, wenn die oben beschriebenen Bedingungen erfüllt sind.&lt;br /&gt;
&lt;br /&gt;
Ruft man auf der Kommandozeile &amp;lt;code&amp;gt;bak.sh&amp;lt;/code&amp;gt; Skript ohne Parameter auf, erscheint ein Hilfetext, der die möglichen Parameter beschreibt.&lt;br /&gt;
&lt;br /&gt;
=== Rotation ===&lt;br /&gt;
Nach der Sicherung wird eine &#039;&#039;&#039;Rotation&#039;&#039;&#039; der schon vorhandenen Sicherungen durchgeführt.&lt;br /&gt;
: Zuerst wird das älteste Verzeichnis, z.B backup.7 gelöscht. Dann wird der Inhalt von backup.6 nach backup.7 kopiert. Der Inhalt von backup.5 wird nach backup.6 kopiert, usw.. Zuletzt wird das aktuelle Backupverzeichnis backup.0 nach backup.1 kopiert. Der Kopiervorgang erfolgt über sog. Hardlinks, das heißt, es werden für nicht geänderte Dateien nur Verknüpfungen angelegt, die kaum Speicherplatz belegen. Nur geänderte Dateien werden tatsächlich kopiert. Es stehen somit jederzeit 7 Komplettsicherungen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Die Anzahl der Rotationen kann in der Konfigurationsdatei &amp;lt;tt&amp;gt;bak.conf&amp;lt;/tt&amp;gt; festgelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Dateien ausschließen vom Backup ===&lt;br /&gt;
Die vom Backup auszuschließenden Dateien bzw. Verzeichnisse stehen in folgender Datei:&lt;br /&gt;
 /usr/local/bin/excludes.txt&lt;br /&gt;
&lt;br /&gt;
In folgender Datei stehen Dateien, die gesichert werden, auch wenn sie sich in einem Verzeichnis befinden, das in der Datei &amp;lt;tt&amp;gt;excludes.txt&amp;lt;/tt&amp;gt; steht.&lt;br /&gt;
 /usr/local/bin/includes.txt&lt;br /&gt;
&lt;br /&gt;
=== Temporäre Dateien ===&lt;br /&gt;
Folgende temporäre Dateien werden vom Skript erzeugt und normalerweise am Ende des Programms automatisch gelöscht.&lt;br /&gt;
 /tmp/bak.sh-status&lt;br /&gt;
 /tmp/backup.lock&lt;br /&gt;
Zur Sicherheit sollte man aber diese temporären Dateien per Cronjob löschen:&lt;br /&gt;
 # Autostart&lt;br /&gt;
 @reboot rm /tmp/backup.lock &amp;amp;&amp;gt; /dev/null ; rm /tmp/bak.sh-status &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
Eine alternative Möglichkeit ist, diesen Befehl in ein Script zu schreiben, was man in &amp;lt;tt&amp;gt;/etc/cron.daily&amp;lt;/tt&amp;gt; ablegt.&lt;br /&gt;
&lt;br /&gt;
== Dateien ==&lt;br /&gt;
Das Sicherungstool besteht aus den folgenden Dateien&lt;br /&gt;
 bak.conf&lt;br /&gt;
 bak_cron.sh&lt;br /&gt;
 bak.sh&lt;br /&gt;
 bak_update.sh&lt;br /&gt;
 excludes.txt&lt;br /&gt;
 includes.txt&lt;br /&gt;
 bak.readme&lt;br /&gt;
 mysql_bak.sh&lt;br /&gt;
 rotation.sh&lt;br /&gt;
[https://t2792.greatnet.de/download/bak.tar Download]&lt;br /&gt;
&lt;br /&gt;
Das Archiv am besten in &amp;lt;code&amp;gt;/usr/local/bin&amp;lt;/code&amp;gt; entpacken oder in einem Unterordner &amp;lt;tt&amp;gt;/usr/local/bin/bak&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Mit dem Skript &amp;lt;code&amp;gt;bak_update.sh&amp;lt;/code&amp;gt; kann man die jeweils aktuelle Version des Projektes downloaden.&lt;br /&gt;
: Am besten das Skript bzw. einen Symlink im Verzeichnis &amp;lt;tt&amp;gt;/etc/cron.daily&amp;lt;/tt&amp;gt; anlegen:&lt;br /&gt;
 cd /etc/cron.daily&lt;br /&gt;
 ln -s /usr/local/bin/bak_update.sh&lt;br /&gt;
Dann erfolgt das Update automatisch. Das Script &amp;lt;tt&amp;gt;bak_update.sh&amp;lt;/tt&amp;gt; überschreibt eine bereits vorhandene Datei &amp;lt;tt&amp;gt;bak.conf&amp;lt;/tt&amp;gt; nicht. Das gleiche gilt für eventuell vorhandene exclude- bzw. include-Dateien (*.txt).&lt;br /&gt;
&lt;br /&gt;
== Ziel-Partition ==&lt;br /&gt;
* Wo befindet sich die Ziel-Partition?&lt;br /&gt;
Sie kann im lokalen Rechner sein, auf einem USB Datenträger oder auf einem Rechner im LAN bzw. Internet.&lt;br /&gt;
* Linux Partition anlegen&lt;br /&gt;
Mit dem Kommando &amp;lt;tt&amp;gt;fdisk&amp;lt;/tt&amp;gt; eine neue Partition auf einem Laufwerk anlegen&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 fdisk /dev/sdx&lt;br /&gt;
Als Dateisystem &#039;&#039;&#039;ext4&#039;&#039;&#039; wählen und die Partition formatieren - bitte Vorsicht!&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 mkfs -t ext4 /dev/sdx2&lt;br /&gt;
: Eine eventuell vorhandene FAT oder NTFS Partition verkleinern oder löschen.&lt;br /&gt;
&lt;br /&gt;
=== Ziel-Partition vorbereiten ===&lt;br /&gt;
Für die folgenden Schritte wird angenommen, dass die Ziel-Partition &#039;&#039;&#039;/dev/sdb2&#039;&#039;&#039; ist&lt;br /&gt;
* Label für Backup Partition&lt;br /&gt;
 tune2fs -L &amp;quot;LinuxBackup&amp;quot; /dev/sdb2&lt;br /&gt;
Die Backup Partition sollte ein Label haben, weil das Label in einer Variablen im Skript &amp;lt;code&amp;gt;bak.sh&amp;lt;/code&amp;gt; verwendet wird. Jedenfalls dann, wenn die Sicherung über USB erfolgt.&lt;br /&gt;
: Mit der folgenden Befehlsfolge wird die Zielpartition eingerichtet, sodass sie für die Datensicherung verwendet werden kann.&lt;br /&gt;
 # Sicherungsmedium /dev/sdb2 &lt;br /&gt;
 PARTITION=/dev/sdb2 # Beispiel&lt;br /&gt;
 MOUNTPOINT=/media/disk&lt;br /&gt;
 HOST=$(hostname | cut -f 1 -d &amp;quot;.&amp;quot;)&lt;br /&gt;
 mkdir -p $MOUNTPOINT&lt;br /&gt;
 mount $PARTITION $MOUNTPOINT&lt;br /&gt;
 cd $MOUNTPOINT&lt;br /&gt;
 mkdir $HOST&lt;br /&gt;
 cd $HOST&lt;br /&gt;
 touch testfile&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Wichtiger Hinweis zur Datei &amp;lt;tt&amp;gt;testfile&amp;lt;/tt&amp;gt;:&amp;lt;/span&amp;gt;&lt;br /&gt;
: Die Datei &amp;lt;code&amp;gt;testfile&amp;lt;/code&amp;gt; ermöglicht dem Skript eine Überprüfung, ob die Ziel-Festplatte gemountet ist. Wenn diese Datei nicht existiert, dann ist die HDD nicht gemountet und die Sicherung wird abgebrochen.&lt;br /&gt;
* Backupskript testen&lt;br /&gt;
 bak.sh testlauf&lt;br /&gt;
* Backup durchführen&lt;br /&gt;
 bak.sh rotation&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Datensicherung ==&lt;br /&gt;
Die Konfiguration befindet sich in &amp;lt;tt&amp;gt;bak.conf&amp;lt;/tt&amp;gt;&lt;br /&gt;
 for option in $@ ; do&lt;br /&gt;
     case $option in&lt;br /&gt;
         auto)&lt;br /&gt;
             ROTATION=&amp;quot;true&amp;quot;&lt;br /&gt;
             ;;&lt;br /&gt;
     esac&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 CounterRotation=20&lt;br /&gt;
 QUELL_Host=&amp;quot;localhost&amp;quot;&lt;br /&gt;
 QUELL_Pfad=&amp;quot;/&amp;quot;&lt;br /&gt;
 MOUNTPOINT=&amp;quot;/media/disk&amp;quot;&lt;br /&gt;
 diskLabel=&amp;quot;LinuxBackup&amp;quot;&lt;br /&gt;
 # Hostname oder IP&lt;br /&gt;
 ZIEL_Host=&amp;quot;10.0.0.111&amp;quot;&lt;br /&gt;
 PORT=&amp;quot;22&amp;quot;&lt;br /&gt;
 mysqlPassword=&amp;quot;xxxxxxxx&amp;quot; # Passwort festlegen, falls in bak.sh ein mysqldump erfolgt&lt;br /&gt;
 # EXTRAOPT+=&amp;quot;--bwlimit=256&amp;quot;&lt;br /&gt;
Falls die Sicherungsfestplatte über USB an den Rechner angeschlossen ist, so wird sie automatisch erkannt. Die Sicherung wird dann über USB durchgeführt, auch wenn in der &amp;lt;tt&amp;gt;bak.conf&amp;lt;/tt&amp;gt; ein &amp;lt;tt&amp;gt;ZIEL_Host&amp;lt;/tt&amp;gt; angegeben ist.&lt;br /&gt;
&lt;br /&gt;
Da die USB Festplatte über das Label identifiziert wird, muss dieses Label in der &amp;lt;tt&amp;gt;bak.conf&amp;lt;/tt&amp;gt; als &amp;lt;tt&amp;gt;diskLabel&amp;lt;/tt&amp;gt; stehen.&lt;br /&gt;
&lt;br /&gt;
Wie man einer Festplattenpartition ein Label zuweist, ist [[Partitionen_und_Dateisysteme#Label| hier in diesem Wiki]] beschrieben:&lt;br /&gt;
&lt;br /&gt;
== Wiederherstellung - Restore ==&lt;br /&gt;
=== Ganzes System wiederherstellen ===&lt;br /&gt;
Das folgende Beispiel klont zwei Rechner dateiweise&lt;br /&gt;
* Wichtige Verzeichnisse sichern, z.B.&lt;br /&gt;
 cp -R /etc /etc.original&lt;br /&gt;
 cp -R /boot /boot.original&lt;br /&gt;
* Rsync über LAN&lt;br /&gt;
Wenn Systemdaten wiederhergestellt werden sollen, dann sollte das besser nicht im laufenden System erfolgen, daher den Computer mit einem Live System, z.B. Knoppix von CD oder USB Stick starten.&lt;br /&gt;
: Im folgenden Beispiel sind einige Verzeichnisse excludiert. Bitte nach Bedarf ändern.&lt;br /&gt;
: Die Option &amp;lt;code&amp;gt;--dry-run&amp;lt;/code&amp;gt; bedeutet, dass der Kopiervorgang nur simuliert wird.&lt;br /&gt;
 rsync -avzH --numeric-ids --dry-run -e ssh \&lt;br /&gt;
    --exclude /home --exclude /root --exclude /local --exclude /var --exclude /srv \&lt;br /&gt;
    --exclude /tmp --exclude /lost+found \&lt;br /&gt;
    --exclude-from /usr/local/bin/excludes_localhost.txt \&lt;br /&gt;
    10.0.0.80:/* /&lt;br /&gt;
&lt;br /&gt;
=== Wiederherstellung aus einem Backup ===&lt;br /&gt;
Die Option &amp;lt;tt&amp;gt;-H&amp;lt;/tt&amp;gt; bewirkt, dass Hardlinks nicht als Dateien übertragen werden, sondern Hardlinks bleiben.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 1 ====&lt;br /&gt;
Über SSH das Home-Verzeichnis eines Users wiederherstellen.&lt;br /&gt;
 rsync  -avzH --dry-run --delete --numeric-ids -e ssh remote_host:/media/disk/&amp;lt;hostname&amp;gt;/backup.0/home/user_1 /home&lt;br /&gt;
==== Beispiel 2 ====&lt;br /&gt;
Ganzes System wiederherstellen&lt;br /&gt;
 rsync -avzH --numeric-ids --dry-run \ &lt;br /&gt;
    --exclude={/etc/fstab,/etc/default/grub,/boot/grub2/grub.cfg,/home,/root,/var,/srv,/media,/usr/local} \&lt;br /&gt;
   -e ssh 10.0.0.111:/media/disk/suseVirtualbox/backup.0 /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 3 ====&lt;br /&gt;
Mein SUSE-System nach Systemupgrade zurücksetzen.&lt;br /&gt;
 cd /mnt/tmp&lt;br /&gt;
 sudo rsync -avzH --numeric-ids --dry-run \ &lt;br /&gt;
    --exclude={/home,/HD_500G,/SSD_500G,/root,/ubuntu,/srv,/media,/usr/local,/var/lib/mysql,/var/spool} \&lt;br /&gt;
    -e ssh root@10.0.0.111:/media/disk/p8h77/backup.02/* $(pwd)&lt;br /&gt;
==== Beispiel 4 ====&lt;br /&gt;
SUSE-System auf VServer im Internet nach missglücktem Upgrade vom Raspberry Pi zurücksetzen.&lt;br /&gt;
* Am VServer das Rettungssystem starten&lt;br /&gt;
* Die Linux Partition unter &amp;lt;tt&amp;gt;/mnt&amp;lt;/tt&amp;gt; einhängen&lt;br /&gt;
 cd /media/disk&lt;br /&gt;
 sudo rsync -avzH --numeric-ids --delete --dry-run -e ssh vserver/backup.0/ grubit.at:/mnt&lt;br /&gt;
&lt;br /&gt;
== Troubles ==&lt;br /&gt;
=== Illegal option -s ===&lt;br /&gt;
Dieser Fehler bezieht sich auf den in der Shell eingebauten Befehl: &#039;&#039;&#039;read&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im Skript wird der &#039;&#039;&#039;read&#039;&#039;&#039; Befehl mit Optionen aufgerufen, die nur in der bash vorhanden sind.&lt;br /&gt;
: Wenn dieser Fehler auftritt, dann das Skript dezidiert mit bash als Shell starten:&lt;br /&gt;
 bash /usr/local/bin/bak.sh&lt;br /&gt;
Wahrscheinlich aber sollte es ausreichen, wenn die erste Zeile in jedem verwendeten Script folgenden &#039;&#039;&#039;Shebang&#039;&#039;&#039; enthält:&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
=== Verschiedene Versionen ===&lt;br /&gt;
Auf Quell- und Zielrechner sollten die gleichen Versionen von &amp;lt;tt&amp;gt;Rsync&amp;lt;/tt&amp;gt; installiert sein, da es sonst zu Fehlermeldungen kommen kann.&lt;br /&gt;
==== Download und Installation ====&lt;br /&gt;
 version=3.3.0 &lt;br /&gt;
 wget https://download.samba.org/pub/rsync/src/rsync-$version.tar.gz&lt;br /&gt;
 tar -xvzf rsync-$version.tar.gz &lt;br /&gt;
 cd rsync-$version&lt;br /&gt;
 ./configure&lt;br /&gt;
Möglicherweise kommt am Ende von &amp;lt;tt&amp;gt;./configure&amp;lt;/tt&amp;gt; die Aufforderung, gewisse Module zu deaktivieren. Man muss dann das Programm noch einmal aufrufen mit den entsprechenden Parametern, z.B.:&lt;br /&gt;
 ./configure --disable-xxhash --disable-zstd --disable-lz4&lt;br /&gt;
Anschließend wird die Binärdatei erzeugt und installiert&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
Nun kann man überprüfen, ob die Version installiert wurde&lt;br /&gt;
 rsync --version&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Datensicherung&amp;diff=1847</id>
		<title>Datensicherung</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Datensicherung&amp;diff=1847"/>
		<updated>2026-10-25T11:07:11Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Beispiel 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Alle Informationen hier erheben keinen Anspruch auf Richtigkeit oder Vollständigkeit. Das Skript ist als &#039;&#039;&#039;work in progress&#039;&#039;&#039; eines Hobbyprogrammierers zu verstehen, entstanden aus der Praxis. Anpassungen an die eigene Umgebung sind wahrscheinlich notwendig.&lt;br /&gt;
== Sicherungsvorgang ==&lt;br /&gt;
Es geht um die Sicherung des lokalen Rechners unter einem Linux Betriebssystem. Das Ziel der Sicherung kann eine USB Festplatte, ein Rechner im LAN oder im Internet sein, in diesem Fall erfolgt die Sicherung über SSH.&lt;br /&gt;
: Ich verwende derzeit eine USB Festplatte, die an einem Minicomputer [[Raspberry Pi]] angeschlossen ist.&lt;br /&gt;
: Falls die Sicherung über SSH durchgeführt werden soll, sollte die SSH-Authentifizierung nicht durch ein Passwort sondern über Schlüsselpaare erfolgen. Dies ist besonders wichtig, wenn die Sicherung automatisiert über einen Cronjob durchgeführt werden soll, weil man da kein Passwort eingeben kann.&lt;br /&gt;
&lt;br /&gt;
Siehe Artikel über [[SSH]]&lt;br /&gt;
=== Sicherung starten über cronjob ===&lt;br /&gt;
Nach Abmeldung des letzten Benutzers wird automatisch das Script &amp;lt;tt&amp;gt;bak.sh&amp;lt;/tt&amp;gt; gestartet.&lt;br /&gt;
Das Skript startet nur dann, wenn kein User mehr eingeloggt ist, auch nicht über SSH&lt;br /&gt;
 # Backup&lt;br /&gt;
 */10 * * * *    /usr/local/bin/bak_cron.sh mysqldump rotation shutdown&lt;br /&gt;
Obwohl der cronjob alle 10 Minuten startet, wird die Sicherung frühestens nach 20 Minuten gestartet, da im Skript mindestens 2 Leerläufe programmiert sind. Wenn die Sicherung einmal begonnen hat, wird jeder weitere Sicherungsvorgang blockiert, bis zum Neustart des Rechners.&lt;br /&gt;
&lt;br /&gt;
Das Script &amp;lt;tt&amp;gt;bak.sh&amp;lt;/tt&amp;gt; wird per per cronjob vom Skript &amp;lt;tt&amp;gt;bak_cron.sh&amp;lt;/tt&amp;gt; aufgerufen, wenn die oben beschriebenen Bedingungen erfüllt sind.&lt;br /&gt;
&lt;br /&gt;
Ruft man auf der Kommandozeile &amp;lt;code&amp;gt;bak.sh&amp;lt;/code&amp;gt; Skript ohne Parameter auf, erscheint ein Hilfetext, der die möglichen Parameter beschreibt.&lt;br /&gt;
&lt;br /&gt;
=== Rotation ===&lt;br /&gt;
Nach der Sicherung wird eine &#039;&#039;&#039;Rotation&#039;&#039;&#039; der schon vorhandenen Sicherungen durchgeführt.&lt;br /&gt;
: Zuerst wird das älteste Verzeichnis, z.B backup.7 gelöscht. Dann wird der Inhalt von backup.6 nach backup.7 kopiert. Der Inhalt von backup.5 wird nach backup.6 kopiert, usw.. Zuletzt wird das aktuelle Backupverzeichnis backup.0 nach backup.1 kopiert. Der Kopiervorgang erfolgt über sog. Hardlinks, das heißt, es werden für nicht geänderte Dateien nur Verknüpfungen angelegt, die kaum Speicherplatz belegen. Nur geänderte Dateien werden tatsächlich kopiert. Es stehen somit jederzeit 7 Komplettsicherungen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Die Anzahl der Rotationen kann in der Konfigurationsdatei &amp;lt;tt&amp;gt;bak.conf&amp;lt;/tt&amp;gt; festgelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Dateien ausschließen vom Backup ===&lt;br /&gt;
Die vom Backup auszuschließenden Dateien bzw. Verzeichnisse stehen in folgender Datei:&lt;br /&gt;
 /usr/local/bin/excludes.txt&lt;br /&gt;
&lt;br /&gt;
In folgender Datei stehen Dateien, die gesichert werden, auch wenn sie sich in einem Verzeichnis befinden, das in der Datei &amp;lt;tt&amp;gt;excludes.txt&amp;lt;/tt&amp;gt; steht.&lt;br /&gt;
 /usr/local/bin/includes.txt&lt;br /&gt;
&lt;br /&gt;
=== Temporäre Dateien ===&lt;br /&gt;
Folgende temporäre Dateien werden vom Skript erzeugt und normalerweise am Ende des Programms automatisch gelöscht.&lt;br /&gt;
 /tmp/bak.sh-status&lt;br /&gt;
 /tmp/backup.lock&lt;br /&gt;
Zur Sicherheit sollte man aber diese temporären Dateien per Cronjob löschen:&lt;br /&gt;
 # Autostart&lt;br /&gt;
 @reboot rm /tmp/backup.lock &amp;amp;&amp;gt; /dev/null ; rm /tmp/bak.sh-status &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
Eine alternative Möglichkeit ist, diesen Befehl in ein Script zu schreiben, was man in &amp;lt;tt&amp;gt;/etc/cron.daily&amp;lt;/tt&amp;gt; ablegt.&lt;br /&gt;
&lt;br /&gt;
== Dateien ==&lt;br /&gt;
Das Sicherungstool besteht aus den folgenden Dateien&lt;br /&gt;
 bak.conf&lt;br /&gt;
 bak_cron.sh&lt;br /&gt;
 bak.sh&lt;br /&gt;
 bak_update.sh&lt;br /&gt;
 excludes.txt&lt;br /&gt;
 includes.txt&lt;br /&gt;
 bak.readme&lt;br /&gt;
 mysql_bak.sh&lt;br /&gt;
 rotation.sh&lt;br /&gt;
[https://t2792.greatnet.de/download/bak.tar Download]&lt;br /&gt;
&lt;br /&gt;
Das Archiv am besten in &amp;lt;code&amp;gt;/usr/local/bin&amp;lt;/code&amp;gt; entpacken oder in einem Unterordner &amp;lt;tt&amp;gt;/usr/local/bin/bak&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Mit dem Skript &amp;lt;code&amp;gt;bak_update.sh&amp;lt;/code&amp;gt; kann man die jeweils aktuelle Version des Projektes downloaden.&lt;br /&gt;
: Am besten das Skript bzw. einen Symlink im Verzeichnis &amp;lt;tt&amp;gt;/etc/cron.daily&amp;lt;/tt&amp;gt; anlegen:&lt;br /&gt;
 cd /etc/cron.daily&lt;br /&gt;
 ln -s /usr/local/bin/bak_update.sh&lt;br /&gt;
Dann erfolgt das Update automatisch. Das Script &amp;lt;tt&amp;gt;bak_update.sh&amp;lt;/tt&amp;gt; überschreibt eine bereits vorhandene Datei &amp;lt;tt&amp;gt;bak.conf&amp;lt;/tt&amp;gt; nicht. Das gleiche gilt für eventuell vorhandene exclude- bzw. include-Dateien (*.txt).&lt;br /&gt;
&lt;br /&gt;
== Ziel-Partition ==&lt;br /&gt;
* Wo befindet sich die Ziel-Partition?&lt;br /&gt;
Sie kann im lokalen Rechner sein, auf einem USB Datenträger oder auf einem Rechner im LAN bzw. Internet.&lt;br /&gt;
* Linux Partition anlegen&lt;br /&gt;
Mit dem Kommando &amp;lt;tt&amp;gt;fdisk&amp;lt;/tt&amp;gt; eine neue Partition auf einem Laufwerk anlegen&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 fdisk /dev/sdx&lt;br /&gt;
Als Dateisystem &#039;&#039;&#039;ext4&#039;&#039;&#039; wählen und die Partition formatieren - bitte Vorsicht!&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 mkfs -t ext4 /dev/sdx2&lt;br /&gt;
: Eine eventuell vorhandene FAT oder NTFS Partition verkleinern oder löschen.&lt;br /&gt;
&lt;br /&gt;
=== Ziel-Partition vorbereiten ===&lt;br /&gt;
Für die folgenden Schritte wird angenommen, dass die Ziel-Partition &#039;&#039;&#039;/dev/sdb2&#039;&#039;&#039; ist&lt;br /&gt;
* Label für Backup Partition&lt;br /&gt;
 tune2fs -L &amp;quot;LinuxBackup&amp;quot; /dev/sdb2&lt;br /&gt;
Die Backup Partition sollte ein Label haben, weil das Label in einer Variablen im Skript &amp;lt;code&amp;gt;bak.sh&amp;lt;/code&amp;gt; verwendet wird. Jedenfalls dann, wenn die Sicherung über USB erfolgt.&lt;br /&gt;
: Mit der folgenden Befehlsfolge wird die Zielpartition eingerichtet, sodass sie für die Datensicherung verwendet werden kann.&lt;br /&gt;
 # Sicherungsmedium /dev/sdb2 &lt;br /&gt;
 PARTITION=/dev/sdb2 # Beispiel&lt;br /&gt;
 MOUNTPOINT=/media/disk&lt;br /&gt;
 HOST=$(hostname | cut -f 1 -d &amp;quot;.&amp;quot;)&lt;br /&gt;
 mkdir -p $MOUNTPOINT&lt;br /&gt;
 mount $PARTITION $MOUNTPOINT&lt;br /&gt;
 cd $MOUNTPOINT&lt;br /&gt;
 mkdir $HOST&lt;br /&gt;
 cd $HOST&lt;br /&gt;
 touch testfile&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Wichtiger Hinweis zur Datei &amp;lt;tt&amp;gt;testfile&amp;lt;/tt&amp;gt;:&amp;lt;/span&amp;gt;&lt;br /&gt;
: Die Datei &amp;lt;code&amp;gt;testfile&amp;lt;/code&amp;gt; ermöglicht dem Skript eine Überprüfung, ob die Ziel-Festplatte gemountet ist. Wenn diese Datei nicht existiert, dann ist die HDD nicht gemountet und die Sicherung wird abgebrochen.&lt;br /&gt;
* Backupskript testen&lt;br /&gt;
 bak.sh testlauf&lt;br /&gt;
* Backup durchführen&lt;br /&gt;
 bak.sh rotation&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Datensicherung ==&lt;br /&gt;
Die Konfiguration befindet sich in &amp;lt;tt&amp;gt;bak.conf&amp;lt;/tt&amp;gt;&lt;br /&gt;
 for option in $@ ; do&lt;br /&gt;
     case $option in&lt;br /&gt;
         auto)&lt;br /&gt;
             ROTATION=&amp;quot;true&amp;quot;&lt;br /&gt;
             ;;&lt;br /&gt;
     esac&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 CounterRotation=20&lt;br /&gt;
 QUELL_Host=&amp;quot;localhost&amp;quot;&lt;br /&gt;
 QUELL_Pfad=&amp;quot;/&amp;quot;&lt;br /&gt;
 MOUNTPOINT=&amp;quot;/media/disk&amp;quot;&lt;br /&gt;
 diskLabel=&amp;quot;LinuxBackup&amp;quot;&lt;br /&gt;
 # Hostname oder IP&lt;br /&gt;
 ZIEL_Host=&amp;quot;10.0.0.111&amp;quot;&lt;br /&gt;
 PORT=&amp;quot;22&amp;quot;&lt;br /&gt;
 mysqlPassword=&amp;quot;xxxxxxxx&amp;quot; # Passwort festlegen, falls in bak.sh ein mysqldump erfolgt&lt;br /&gt;
 # EXTRAOPT+=&amp;quot;--bwlimit=256&amp;quot;&lt;br /&gt;
Falls die Sicherungsfestplatte über USB an den Rechner angeschlossen ist, so wird sie automatisch erkannt. Die Sicherung wird dann über USB durchgeführt, auch wenn in der &amp;lt;tt&amp;gt;bak.conf&amp;lt;/tt&amp;gt; ein &amp;lt;tt&amp;gt;ZIEL_Host&amp;lt;/tt&amp;gt; angegeben ist.&lt;br /&gt;
&lt;br /&gt;
Da die USB Festplatte über das Label identifiziert wird, muss dieses Label in der &amp;lt;tt&amp;gt;bak.conf&amp;lt;/tt&amp;gt; als &amp;lt;tt&amp;gt;diskLabel&amp;lt;/tt&amp;gt; stehen.&lt;br /&gt;
&lt;br /&gt;
Wie man einer Festplattenpartition ein Label zuweist, ist [[Partitionen_und_Dateisysteme#Label| hier in diesem Wiki]] beschrieben:&lt;br /&gt;
&lt;br /&gt;
== Wiederherstellung - Restore ==&lt;br /&gt;
=== Ganzes System wiederherstellen ===&lt;br /&gt;
Das folgende Beispiel klont zwei Rechner dateiweise&lt;br /&gt;
* Wichtige Verzeichnisse sichern, z.B.&lt;br /&gt;
 cp -R /etc /etc.original&lt;br /&gt;
 cp -R /boot /boot.original&lt;br /&gt;
* Rsync über LAN&lt;br /&gt;
Wenn Systemdaten wiederhergestellt werden sollen, dann sollte das besser nicht im laufenden System erfolgen, daher den Computer mit einem Live System, z.B. Knoppix von CD oder USB Stick starten.&lt;br /&gt;
: Im folgenden Beispiel sind einige Verzeichnisse excludiert. Bitte nach Bedarf ändern.&lt;br /&gt;
: Die Option &amp;lt;code&amp;gt;--dry-run&amp;lt;/code&amp;gt; bedeutet, dass der Kopiervorgang nur simuliert wird.&lt;br /&gt;
 rsync -avzH --numeric-ids --dry-run -e ssh \&lt;br /&gt;
    --exclude /home --exclude /root --exclude /local --exclude /var --exclude /srv \&lt;br /&gt;
    --exclude /tmp --exclude /lost+found \&lt;br /&gt;
    --exclude-from /usr/local/bin/excludes_localhost.txt \&lt;br /&gt;
    10.0.0.80:/* /&lt;br /&gt;
&lt;br /&gt;
=== Wiederherstellung aus einem Backup ===&lt;br /&gt;
Die Option &amp;lt;tt&amp;gt;-H&amp;lt;/tt&amp;gt; bewirkt, dass Hardlinks nicht als Dateien übertragen werden, sondern Hardlinks bleiben.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 1 ====&lt;br /&gt;
Über SSH das Home-Verzeichnis eines Users wiederherstellen.&lt;br /&gt;
 rsync  -avzH --dry-run --delete --numeric-ids -e ssh remote_host:/media/disk/&amp;lt;hostname&amp;gt;/backup.0/home/user_1 /home&lt;br /&gt;
==== Beispiel 2 ====&lt;br /&gt;
Ganzes System wiederherstellen&lt;br /&gt;
 rsync -avzH --numeric-ids --dry-run \ &lt;br /&gt;
    --exclude={/etc/fstab,/etc/default/grub,/boot/grub2/grub.cfg,/home,/root,/var,/srv,/media,/usr/local} \&lt;br /&gt;
   -e ssh 10.0.0.111:/media/disk/suseVirtualbox/backup.0 /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 3 ====&lt;br /&gt;
Mein SUSE-System nach Systemupgrade zurücksetzen.&lt;br /&gt;
 cd /mnt/tmp&lt;br /&gt;
 sudo rsync -avzH --numeric-ids --dry-run \ &lt;br /&gt;
    --exclude={/home,/HD_500G,/SSD_500G,/root,/ubuntu,/srv,/media,/usr/local,/var/lib/mysql,/var/spool} \&lt;br /&gt;
    -e ssh root@10.0.0.111:/media/disk/p8h77/backup.02/* $(pwd)&lt;br /&gt;
==== Beispiel 4 ====&lt;br /&gt;
SUSE-System auf VServer im Internet nach missglücktem Upgrade vom Raspberry Pi zurücksetzen.&lt;br /&gt;
* Am VServer das Rettungssystem starten&lt;br /&gt;
* Die Linux Partition unter &amp;lt;tt&amp;gt;/mnt&amp;lt;/tt&amp;gt; einhängen&lt;br /&gt;
 cd /media/disk/vserver/backup.0&lt;br /&gt;
 sudo rsync -avzH --numeric-ids --delete --dry-run -e ssh vserver/backup.0/ grubit.at:/mnt&lt;br /&gt;
&lt;br /&gt;
== Troubles ==&lt;br /&gt;
=== Illegal option -s ===&lt;br /&gt;
Dieser Fehler bezieht sich auf den in der Shell eingebauten Befehl: &#039;&#039;&#039;read&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im Skript wird der &#039;&#039;&#039;read&#039;&#039;&#039; Befehl mit Optionen aufgerufen, die nur in der bash vorhanden sind.&lt;br /&gt;
: Wenn dieser Fehler auftritt, dann das Skript dezidiert mit bash als Shell starten:&lt;br /&gt;
 bash /usr/local/bin/bak.sh&lt;br /&gt;
Wahrscheinlich aber sollte es ausreichen, wenn die erste Zeile in jedem verwendeten Script folgenden &#039;&#039;&#039;Shebang&#039;&#039;&#039; enthält:&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
=== Verschiedene Versionen ===&lt;br /&gt;
Auf Quell- und Zielrechner sollten die gleichen Versionen von &amp;lt;tt&amp;gt;Rsync&amp;lt;/tt&amp;gt; installiert sein, da es sonst zu Fehlermeldungen kommen kann.&lt;br /&gt;
==== Download und Installation ====&lt;br /&gt;
 version=3.3.0 &lt;br /&gt;
 wget https://download.samba.org/pub/rsync/src/rsync-$version.tar.gz&lt;br /&gt;
 tar -xvzf rsync-$version.tar.gz &lt;br /&gt;
 cd rsync-$version&lt;br /&gt;
 ./configure&lt;br /&gt;
Möglicherweise kommt am Ende von &amp;lt;tt&amp;gt;./configure&amp;lt;/tt&amp;gt; die Aufforderung, gewisse Module zu deaktivieren. Man muss dann das Programm noch einmal aufrufen mit den entsprechenden Parametern, z.B.:&lt;br /&gt;
 ./configure --disable-xxhash --disable-zstd --disable-lz4&lt;br /&gt;
Anschließend wird die Binärdatei erzeugt und installiert&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
Nun kann man überprüfen, ob die Version installiert wurde&lt;br /&gt;
 rsync --version&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1846</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1846"/>
		<updated>2026-10-21T21:55:40Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Elvis Operator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== Null-Koaleszenz-Operator ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
&lt;br /&gt;
Vorteile: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist. Mit diesem Operator vermeidet man &amp;lt;tt&amp;gt;isset()&amp;lt;/tt&amp;gt; Abfragen.&lt;br /&gt;
 if (isset($Benutzername)&lt;br /&gt;
    $name = $Benutzername&lt;br /&gt;
 else $Name = &amp;quot;Gast&lt;br /&gt;
&lt;br /&gt;
Verkürzte Form mit dem ull-Koaleszenz-Operator&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Der Null-Koaleszenz Operator reagiert NICHT auf einen Leerstring.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ternärer Operator ====&lt;br /&gt;
 $wert = $wert ? $wert : $ersatz;&lt;br /&gt;
&lt;br /&gt;
==== Elvis Operator ====&lt;br /&gt;
Eine verkürzte Form des ternären Operators nrennt sich Elvis-Operator&lt;br /&gt;
 $wert ?: $ersatz;&lt;br /&gt;
Der Elvis-Operator reagiert auf alle falsy-Werte&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; null, false, 0, &amp;quot;0&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
=== Properties kapseln ===&lt;br /&gt;
Die Sichtbarkeit von Properties und Methoden wird festgelegt, indem man &amp;lt;tt&amp;gt;public, protected&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; der Deklaration voranstellt.&lt;br /&gt;
Wenn eine Property für die Implementierung der Klasse und ihrer Unterklassen gedacht ist, aber nicht Teil der öffentlichen Schnittstelle sein soll, verwendet man &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Propterties, die mit einer set_Methode geändert werden, können &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
# Beispiel&lt;br /&gt;
 private $width&lt;br /&gt;
 public function set_width($value) {&lt;br /&gt;
     if (! strPos($value,&amp;quot;px&amp;quot;) &amp;amp;&amp;amp; ! strPos($value,&amp;quot;%&amp;quot;) )&lt;br /&gt;
         $value .= &amp;quot;px&amp;quot;;&lt;br /&gt;
      $this-&amp;gt;width = $value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/de/language.oop5.visibility.php Detailinformationen] in der PHP Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1845</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1845"/>
		<updated>2026-10-21T21:54:59Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Elvis Operator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== Null-Koaleszenz-Operator ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
&lt;br /&gt;
Vorteile: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist. Mit diesem Operator vermeidet man &amp;lt;tt&amp;gt;isset()&amp;lt;/tt&amp;gt; Abfragen.&lt;br /&gt;
 if (isset($Benutzername)&lt;br /&gt;
    $name = $Benutzername&lt;br /&gt;
 else $Name = &amp;quot;Gast&lt;br /&gt;
&lt;br /&gt;
Verkürzte Form mit dem ull-Koaleszenz-Operator&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Der Null-Koaleszenz Operator reagiert NICHT auf einen Leerstring.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ternärer Operator ====&lt;br /&gt;
 $wert = $wert ? $wert : $ersatz;&lt;br /&gt;
&lt;br /&gt;
==== Elvis Operator ====&lt;br /&gt;
Eine verkürzte Form des ternären Operators nrennt sich Elvis-Operator&lt;br /&gt;
 $wert ?: $ersatz;&lt;br /&gt;
Der Elvis-Operator reagiert auf &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; null, false, 0, &amp;quot;0&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
=== Properties kapseln ===&lt;br /&gt;
Die Sichtbarkeit von Properties und Methoden wird festgelegt, indem man &amp;lt;tt&amp;gt;public, protected&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; der Deklaration voranstellt.&lt;br /&gt;
Wenn eine Property für die Implementierung der Klasse und ihrer Unterklassen gedacht ist, aber nicht Teil der öffentlichen Schnittstelle sein soll, verwendet man &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Propterties, die mit einer set_Methode geändert werden, können &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
# Beispiel&lt;br /&gt;
 private $width&lt;br /&gt;
 public function set_width($value) {&lt;br /&gt;
     if (! strPos($value,&amp;quot;px&amp;quot;) &amp;amp;&amp;amp; ! strPos($value,&amp;quot;%&amp;quot;) )&lt;br /&gt;
         $value .= &amp;quot;px&amp;quot;;&lt;br /&gt;
      $this-&amp;gt;width = $value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/de/language.oop5.visibility.php Detailinformationen] in der PHP Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1844</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1844"/>
		<updated>2026-10-21T21:50:45Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Null-Koaleszenz-Operator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== Null-Koaleszenz-Operator ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
&lt;br /&gt;
Vorteile: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist. Mit diesem Operator vermeidet man &amp;lt;tt&amp;gt;isset()&amp;lt;/tt&amp;gt; Abfragen.&lt;br /&gt;
 if (isset($Benutzername)&lt;br /&gt;
    $name = $Benutzername&lt;br /&gt;
 else $Name = &amp;quot;Gast&lt;br /&gt;
&lt;br /&gt;
Verkürzte Form mit dem ull-Koaleszenz-Operator&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Der Null-Koaleszenz Operator reagiert NICHT auf einen Leerstring.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ternärer Operator ====&lt;br /&gt;
 $wert = $wert ? $wert : $ersatz;&lt;br /&gt;
&lt;br /&gt;
==== Elvis Operator ====&lt;br /&gt;
Eine verkürzte Form des ternären Operators&lt;br /&gt;
 $wert ?: $ersatz;&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
=== Properties kapseln ===&lt;br /&gt;
Die Sichtbarkeit von Properties und Methoden wird festgelegt, indem man &amp;lt;tt&amp;gt;public, protected&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; der Deklaration voranstellt.&lt;br /&gt;
Wenn eine Property für die Implementierung der Klasse und ihrer Unterklassen gedacht ist, aber nicht Teil der öffentlichen Schnittstelle sein soll, verwendet man &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Propterties, die mit einer set_Methode geändert werden, können &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
# Beispiel&lt;br /&gt;
 private $width&lt;br /&gt;
 public function set_width($value) {&lt;br /&gt;
     if (! strPos($value,&amp;quot;px&amp;quot;) &amp;amp;&amp;amp; ! strPos($value,&amp;quot;%&amp;quot;) )&lt;br /&gt;
         $value .= &amp;quot;px&amp;quot;;&lt;br /&gt;
      $this-&amp;gt;width = $value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/de/language.oop5.visibility.php Detailinformationen] in der PHP Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1843</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1843"/>
		<updated>2026-10-21T21:48:54Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spezielle Operatoren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== Null-Koaleszenz-Operator ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
&lt;br /&gt;
Vorteile: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist. Mit diesem Operator vermeidet man &amp;lt;tt&amp;gt;isset()&amp;lt;/tt&amp;gt; Abfragen.&lt;br /&gt;
 if (isset($Benutzername)&lt;br /&gt;
    $name = $Benutzername&lt;br /&gt;
 else $Name = &amp;quot;Gast&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Der Null-Koaleszenz Operator reagiert NICHT auf einen Leerstring.&amp;lt;/span&amp;gt;&lt;br /&gt;
Verkürzte Form&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
==== Ternärer Operator ====&lt;br /&gt;
 $wert = $wert ? $wert : $ersatz;&lt;br /&gt;
&lt;br /&gt;
==== Elvis Operator ====&lt;br /&gt;
Eine verkürzte Form des ternären Operators&lt;br /&gt;
 $wert ?: $ersatz;&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
=== Properties kapseln ===&lt;br /&gt;
Die Sichtbarkeit von Properties und Methoden wird festgelegt, indem man &amp;lt;tt&amp;gt;public, protected&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; der Deklaration voranstellt.&lt;br /&gt;
Wenn eine Property für die Implementierung der Klasse und ihrer Unterklassen gedacht ist, aber nicht Teil der öffentlichen Schnittstelle sein soll, verwendet man &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Propterties, die mit einer set_Methode geändert werden, können &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
# Beispiel&lt;br /&gt;
 private $width&lt;br /&gt;
 public function set_width($value) {&lt;br /&gt;
     if (! strPos($value,&amp;quot;px&amp;quot;) &amp;amp;&amp;amp; ! strPos($value,&amp;quot;%&amp;quot;) )&lt;br /&gt;
         $value .= &amp;quot;px&amp;quot;;&lt;br /&gt;
      $this-&amp;gt;width = $value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/de/language.oop5.visibility.php Detailinformationen] in der PHP Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1842</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1842"/>
		<updated>2026-10-21T21:47:49Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Null-Koaleszenz-Operator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== Null-Koaleszenz-Operator ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
&lt;br /&gt;
Vorteile: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist. Mit diesem Operator vermeidet man &amp;lt;tt&amp;gt;isset()&amp;lt;/tt&amp;gt; Abfragen.&lt;br /&gt;
 if (isset($Benutzername)&lt;br /&gt;
    $name = $Benutzername&lt;br /&gt;
 else $Name = &amp;quot;Gast&lt;br /&gt;
&amp;lt;span color:red&amp;gt;Der Null-Koaleszenz Operator reagiert NICHT auf einen Leerstring.&amp;lt;/span&amp;gt;&lt;br /&gt;
Verkürzte Form&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
==== Ternärer Operator ====&lt;br /&gt;
 $wert = $wert ? $wert : $ersatz;&lt;br /&gt;
&lt;br /&gt;
==== Elvis Operator ====&lt;br /&gt;
Eine verkürzte Form des ternären Operators&lt;br /&gt;
 $wert ?: $ersatz;&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
=== Properties kapseln ===&lt;br /&gt;
Die Sichtbarkeit von Properties und Methoden wird festgelegt, indem man &amp;lt;tt&amp;gt;public, protected&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; der Deklaration voranstellt.&lt;br /&gt;
Wenn eine Property für die Implementierung der Klasse und ihrer Unterklassen gedacht ist, aber nicht Teil der öffentlichen Schnittstelle sein soll, verwendet man &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Propterties, die mit einer set_Methode geändert werden, können &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
# Beispiel&lt;br /&gt;
 private $width&lt;br /&gt;
 public function set_width($value) {&lt;br /&gt;
     if (! strPos($value,&amp;quot;px&amp;quot;) &amp;amp;&amp;amp; ! strPos($value,&amp;quot;%&amp;quot;) )&lt;br /&gt;
         $value .= &amp;quot;px&amp;quot;;&lt;br /&gt;
      $this-&amp;gt;width = $value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/de/language.oop5.visibility.php Detailinformationen] in der PHP Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Dokuwiki&amp;diff=1841</id>
		<title>Dokuwiki</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Dokuwiki&amp;diff=1841"/>
		<updated>2026-10-21T16:13:37Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Upgrade ==&lt;br /&gt;
* Download&lt;br /&gt;
 cd /srv/www/htdocs&lt;br /&gt;
 wget https://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz&lt;br /&gt;
 mv dokuwiki-stable.tgz dokuwiki.tgz&lt;br /&gt;
* Entpacken&lt;br /&gt;
 tar zxvf dokuwiki.tgz &lt;br /&gt;
* Kopieren&lt;br /&gt;
 wikifolder=fg_dokuwiki&lt;br /&gt;
 sudo cp -af dokuwiki-*/* $wikifolder&lt;br /&gt;
* Rechte ändern&lt;br /&gt;
 sudo chown wwwrun.www $wikifolder -R&lt;br /&gt;
&lt;br /&gt;
== Dateien ==&lt;br /&gt;
Die Seiten einer Dokuwiki Instanz sind einfache Textdateien und befinden sich in folgendem Order&lt;br /&gt;
 dokuwiki/data&lt;br /&gt;
* Eine Seite löschen&lt;br /&gt;
Die Seite nicht im Dateisystem entfernen, sondern den Inhalt löschen und dann als leere Seite speichern.&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1840</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1840"/>
		<updated>2026-10-15T12:42:44Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Ternärer Operator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== Null-Koaleszenz-Operator ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
&lt;br /&gt;
Vorteile: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist. Mit diesem Operator vermeidet man &amp;lt;tt&amp;gt;isset()&amp;lt;/tt&amp;gt; Abfragen.&lt;br /&gt;
 if (isset($Benutzername)&lt;br /&gt;
    $name = $Benutzername&lt;br /&gt;
 else $Name = &amp;quot;Gast&lt;br /&gt;
Verkürzte Form&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
==== Ternärer Operator ====&lt;br /&gt;
 $wert = $wert ? $wert : $ersatz;&lt;br /&gt;
&lt;br /&gt;
==== Elvis Operator ====&lt;br /&gt;
Eine verkürzte Form des ternären Operators&lt;br /&gt;
 $wert ?: $ersatz;&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
=== Properties kapseln ===&lt;br /&gt;
Die Sichtbarkeit von Properties und Methoden wird festgelegt, indem man &amp;lt;tt&amp;gt;public, protected&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; der Deklaration voranstellt.&lt;br /&gt;
Wenn eine Property für die Implementierung der Klasse und ihrer Unterklassen gedacht ist, aber nicht Teil der öffentlichen Schnittstelle sein soll, verwendet man &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Propterties, die mit einer set_Methode geändert werden, können &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
# Beispiel&lt;br /&gt;
 private $width&lt;br /&gt;
 public function set_width($value) {&lt;br /&gt;
     if (! strPos($value,&amp;quot;px&amp;quot;) &amp;amp;&amp;amp; ! strPos($value,&amp;quot;%&amp;quot;) )&lt;br /&gt;
         $value .= &amp;quot;px&amp;quot;;&lt;br /&gt;
      $this-&amp;gt;width = $value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/de/language.oop5.visibility.php Detailinformationen] in der PHP Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1839</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1839"/>
		<updated>2026-09-26T09:54:43Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Null-Koaleszenz-Operator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== Null-Koaleszenz-Operator ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
&lt;br /&gt;
Vorteile: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist. Mit diesem Operator vermeidet man &amp;lt;tt&amp;gt;isset()&amp;lt;/tt&amp;gt; Abfragen.&lt;br /&gt;
 if (isset($Benutzername)&lt;br /&gt;
    $name = $Benutzername&lt;br /&gt;
 else $Name = &amp;quot;Gast&lt;br /&gt;
Verkürzte Form&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
==== Ternärer Operator ====&lt;br /&gt;
 $wert ? $wert : $ersatz;&lt;br /&gt;
==== Elvis Operator ====&lt;br /&gt;
Eine verkürzte Form des ternären Operators&lt;br /&gt;
 $wert ?: $ersatz;&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
=== Properties kapseln ===&lt;br /&gt;
Die Sichtbarkeit von Properties und Methoden wird festgelegt, indem man &amp;lt;tt&amp;gt;public, protected&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; der Deklaration voranstellt.&lt;br /&gt;
Wenn eine Property für die Implementierung der Klasse und ihrer Unterklassen gedacht ist, aber nicht Teil der öffentlichen Schnittstelle sein soll, verwendet man &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Propterties, die mit einer set_Methode geändert werden, können &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
# Beispiel&lt;br /&gt;
 private $width&lt;br /&gt;
 public function set_width($value) {&lt;br /&gt;
     if (! strPos($value,&amp;quot;px&amp;quot;) &amp;amp;&amp;amp; ! strPos($value,&amp;quot;%&amp;quot;) )&lt;br /&gt;
         $value .= &amp;quot;px&amp;quot;;&lt;br /&gt;
      $this-&amp;gt;width = $value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/de/language.oop5.visibility.php Detailinformationen] in der PHP Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1838</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1838"/>
		<updated>2026-09-26T09:45:32Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Elvis Operator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== Null-Koaleszenz-Operator ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
Vorteil: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist.&lt;br /&gt;
==== Ternärer Operator ====&lt;br /&gt;
 $wert ? $wert : $ersatz;&lt;br /&gt;
==== Elvis Operator ====&lt;br /&gt;
Eine verkürzte Form des ternären Operators&lt;br /&gt;
 $wert ?: $ersatz;&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
=== Properties kapseln ===&lt;br /&gt;
Die Sichtbarkeit von Properties und Methoden wird festgelegt, indem man &amp;lt;tt&amp;gt;public, protected&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; der Deklaration voranstellt.&lt;br /&gt;
Wenn eine Property für die Implementierung der Klasse und ihrer Unterklassen gedacht ist, aber nicht Teil der öffentlichen Schnittstelle sein soll, verwendet man &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Propterties, die mit einer set_Methode geändert werden, können &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
# Beispiel&lt;br /&gt;
 private $width&lt;br /&gt;
 public function set_width($value) {&lt;br /&gt;
     if (! strPos($value,&amp;quot;px&amp;quot;) &amp;amp;&amp;amp; ! strPos($value,&amp;quot;%&amp;quot;) )&lt;br /&gt;
         $value .= &amp;quot;px&amp;quot;;&lt;br /&gt;
      $this-&amp;gt;width = $value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/de/language.oop5.visibility.php Detailinformationen] in der PHP Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1837</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1837"/>
		<updated>2026-09-26T09:32:19Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spezielle Operatoren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== Null-Koaleszenz-Operator ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
Vorteil: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist.&lt;br /&gt;
==== Ternärer Operator ====&lt;br /&gt;
 $wert ? $wert : $ersatz;&lt;br /&gt;
==== Elvis Operator ====&lt;br /&gt;
Eine verkürzte Form des ternären Operators&lt;br /&gt;
 $wert ?= $ersatz;&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
=== Properties kapseln ===&lt;br /&gt;
Die Sichtbarkeit von Properties und Methoden wird festgelegt, indem man &amp;lt;tt&amp;gt;public, protected&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; der Deklaration voranstellt.&lt;br /&gt;
Wenn eine Property für die Implementierung der Klasse und ihrer Unterklassen gedacht ist, aber nicht Teil der öffentlichen Schnittstelle sein soll, verwendet man &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Propterties, die mit einer set_Methode geändert werden, können &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
# Beispiel&lt;br /&gt;
 private $width&lt;br /&gt;
 public function set_width($value) {&lt;br /&gt;
     if (! strPos($value,&amp;quot;px&amp;quot;) &amp;amp;&amp;amp; ! strPos($value,&amp;quot;%&amp;quot;) )&lt;br /&gt;
         $value .= &amp;quot;px&amp;quot;;&lt;br /&gt;
      $this-&amp;gt;width = $value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/de/language.oop5.visibility.php Detailinformationen] in der PHP Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1836</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1836"/>
		<updated>2026-09-13T09:55:08Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Properties kapseln */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== Null-Koaleszenz-Operator ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
Vorteil: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist.&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
=== Properties kapseln ===&lt;br /&gt;
Die Sichtbarkeit von Properties und Methoden wird festgelegt, indem man &amp;lt;tt&amp;gt;public, protected&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; der Deklaration voranstellt.&lt;br /&gt;
Wenn eine Property für die Implementierung der Klasse und ihrer Unterklassen gedacht ist, aber nicht Teil der öffentlichen Schnittstelle sein soll, verwendet man &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Propterties, die mit einer set_Methode geändert werden, können &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
# Beispiel&lt;br /&gt;
 private $width&lt;br /&gt;
 public function set_width($value) {&lt;br /&gt;
     if (! strPos($value,&amp;quot;px&amp;quot;) &amp;amp;&amp;amp; ! strPos($value,&amp;quot;%&amp;quot;) )&lt;br /&gt;
         $value .= &amp;quot;px&amp;quot;;&lt;br /&gt;
      $this-&amp;gt;width = $value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/de/language.oop5.visibility.php Detailinformationen] in der PHP Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1835</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1835"/>
		<updated>2026-09-13T09:52:50Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Notizen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== Null-Koaleszenz-Operator ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
Vorteil: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist.&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
=== Properties kapseln ===&lt;br /&gt;
Die Sichtbarkeit von Properties und Methoden wird festgelegt, indem man &amp;lt;tt&amp;gt;public, protected&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; der Deklaration voranstellt.&lt;br /&gt;
Wenn eine Property für die Implementierung der Klasse und ihrer Unterklassen gedacht ist, aber nicht Teil der öffentlichen Schnittstelle sein soll, verwendet man &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Propterties, die mit einer set_Methode geändert werden, können &amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;protected&amp;lt;/tt&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
# Beispiel&lt;br /&gt;
 private $width&lt;br /&gt;
 public function set_width($value) {&lt;br /&gt;
     if (! strPos($value,&amp;quot;px&amp;quot;) &amp;amp;&amp;amp; ! strPos($value,&amp;quot;%&amp;quot;) )&lt;br /&gt;
         $value .= &amp;quot;px&amp;quot;;&lt;br /&gt;
      $this-&amp;gt;width = $value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1834</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1834"/>
		<updated>2026-09-10T09:56:33Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* ?? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== Null-Koaleszenz-Operator ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
Vorteil: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist.&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1833</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1833"/>
		<updated>2026-09-10T09:56:01Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spezielle Operatoren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
==== ?? ====&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
Vorteil: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist.&lt;br /&gt;
&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1832</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1832"/>
		<updated>2026-09-10T09:55:14Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Notizen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Spezielle Operatoren ===&lt;br /&gt;
Der Null-Koaleszenz-Operator &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; liefert den linken Wert, wenn dieser existiert und nicht null ist. Andernfalls wird der rechte Wert verwendet.&lt;br /&gt;
 $name = $benutzername ?? &amp;quot;Gast&amp;quot;;&lt;br /&gt;
Vorteil: Kein Error, wenn $&amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; nicht definiert ist.&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1831</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1831"/>
		<updated>2026-08-26T09:37:43Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Notizen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
Das Schlüsselwort &amp;lt;tt&amp;gt;global&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert die Variable tatsächlich.&lt;br /&gt;
 global $auth;&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1830</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1830"/>
		<updated>2026-08-26T09:33:52Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Globale Variable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
&amp;lt;tt&amp;gt;Das Schlüsselwort&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable &amp;lt;tt&amp;gt;$GLOBALS[&amp;quot;varName&amp;quot;]&amp;lt;/tt&amp;gt; her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert sie tatsächlich.&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 global $auth;&lt;br /&gt;
 ...&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1829</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=PHP&amp;diff=1829"/>
		<updated>2026-08-26T09:32:30Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Notizen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
* Änderungen an der Datei &amp;lt;code&amp;gt;/etc/php5/apache2/php.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Um Fehlermeldungen von Joomla zu vermeiden:&lt;br /&gt;
 date.timezone = CET&lt;br /&gt;
Sicherheit&lt;br /&gt;
 register_globals = off&lt;br /&gt;
 display_errors = Off&lt;br /&gt;
 error_log = /var/log/apache2/php.log&lt;br /&gt;
Einbinden von Remote Scipten ermöglichen:&lt;br /&gt;
 allow_url_include = On&lt;br /&gt;
 allow_url_fopen = On&lt;br /&gt;
Funktioniert aber trotzdem mit Scripten auf Eduhi Server nicht!&lt;br /&gt;
&lt;br /&gt;
== PEAR ==&lt;br /&gt;
* PHP Extension and Application Repository&lt;br /&gt;
 Pear Website: [http://pear.php.net/ http://pear.php.net/]&lt;br /&gt;
* Installation&lt;br /&gt;
Die Installation kann mit YAST oder einem WEB Frontend erfolgen&lt;br /&gt;
== Notizen ==&lt;br /&gt;
=== Globale Variable ===&lt;br /&gt;
&amp;lt;tt&amp;gt;global $varName;&amp;lt;/tt&amp;gt; stellt die Verbindung zur globalen Variable &amp;lt;tt&amp;gt;$GLOBALS[&amp;quot;varName&amp;quot;]&amp;lt;/tt&amp;gt; her. &lt;br /&gt;
Die Zuweisung erzeugt beziehungsweise initialisiert sie tatsächlich.&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 global $auth;&lt;br /&gt;
 ...&lt;br /&gt;
 $auth = new auth($this-&amp;gt;authConfig);&lt;br /&gt;
Durch die Zuweisung wird die globale Variable $GLOBALS[&amp;quot;auth&amp;quot;] erzeugt. &lt;br /&gt;
=== Callback Funktion ===&lt;br /&gt;
Eine Callbackfunktion auf jedes Array Element anwenden&lt;br /&gt;
 $newArray = array_map(&amp;quot;function_name&amp;quot;,$array);&lt;br /&gt;
&lt;br /&gt;
== Dokumentation von PHP Projekten ==&lt;br /&gt;
Eine Dokumentation kann man erzeugen mit &amp;lt;tt&amp;gt;doxygen&amp;lt;/tt&amp;gt;. &lt;br /&gt;
: Dieses Programm scannt rekursiv alle PHP Dateien in einem Verzeichnis und erstellt eine HTML Datei. Variablendeklarationen und Funktionen werden automatisch erkannt und in der HTML Datei aufgelistet.&lt;br /&gt;
* Installation mit YAST&lt;br /&gt;
Zusätzlich kann man die GUI &amp;lt;tt&amp;gt;doxygenwizard&amp;lt;/tt&amp;gt; installieren. Das erleichtert die Konfiguration.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
 Doxyfile&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Installation_und_Upgrade&amp;diff=1828</id>
		<title>Installation und Upgrade</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Installation_und_Upgrade&amp;diff=1828"/>
		<updated>2026-08-08T17:19:19Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Entpacken */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Grundsätzlich genügt es bei Joomla, das neue Paket herunterzuladen und in das Joomla-Verzeichnis zu kopieren.&lt;br /&gt;
== Download ==&lt;br /&gt;
Download der alten Version löschen&lt;br /&gt;
 cd /srv/www/htdocs&lt;br /&gt;
 rm Joomla*.zip&lt;br /&gt;
 dir&lt;br /&gt;
&lt;br /&gt;
[https://github.com/joomlagerman/joomla/releases Downloadseite der deutschen Version auf Github]&lt;br /&gt;
&lt;br /&gt;
Nun den Download Link kopieren und mit &#039;&#039;&#039;wget&#039;&#039;&#039; nach &#039;&#039;&#039;/srv/www/htdocs&#039;&#039;&#039; herunterladen&lt;br /&gt;
== Entpacken ==&lt;br /&gt;
 cd /srv/www/htdocs&lt;br /&gt;
 mkdir temp/joomla_full 2&amp;gt; /dev/null&lt;br /&gt;
 rm temp/joomla_full/* -R 2&amp;gt; /dev/null&lt;br /&gt;
 unzip Joomla*zip -d temp/joomla_full&lt;br /&gt;
 chown ferdinand.root temp/joomla_full -R&lt;br /&gt;
 chmod 771 temp/joomla_full&lt;br /&gt;
&lt;br /&gt;
== Upgrade einer Joomla Instanz ==&lt;br /&gt;
 Name=/srv/www/htdocs/joomla_fg&lt;br /&gt;
 rsync -av temp/joomla_full/* $Name&lt;br /&gt;
 rm $Name/installation -R&lt;br /&gt;
&lt;br /&gt;
== Upgrade mehrerer Instanzen ==&lt;br /&gt;
* Konsolenbefehl&lt;br /&gt;
Voraussetzung: &lt;br /&gt;
: Die Namen aller Joomla-Verzeichnisse müssen mit &amp;lt;code&amp;gt;joomla_&amp;lt;/code&amp;gt; beginnen.&lt;br /&gt;
 for i in joomla_* ; do rsync -av temp/joomla_full/* $i ; rm -R $i/installation 2&amp;gt; /dev/null ; php $i/cli/deletefiles.php ; done&lt;br /&gt;
* Upgrade Skript downloaden&lt;br /&gt;
https://t2792.greatnet.de/download/bash/joomla_upgrade.sh&lt;br /&gt;
Dieses Script fasst obige Befehlsfolgen in ein Programm zusammen - ohne Gewähr.&lt;br /&gt;
: Einfacher ist es, die Befehlsfolgen der Reihe nach über die Zwischenablage in ein Terminal zu kopieren. So mache ich es bei jedem Joomla Update - und das gibt es ja oft genug.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
=== Datenbank Reparatur ===&lt;br /&gt;
* Im Backend von Joomla ausführen&lt;br /&gt;
 Erweiterungen / Verwalten / Datenbank&lt;br /&gt;
* SQL Datei importieren&lt;br /&gt;
Die SQL Dateien für die jeweilige Joomla Version befinden sich hier&lt;br /&gt;
 administrator/components/com_admin/sql/updates/mysql&lt;br /&gt;
Auf folgender Seite wird dieser nicht gerade einfache Vorgang gut erklärt&lt;br /&gt;
https://www.marcobeierer.at/anleitungen/joomla-update-anleitung&lt;br /&gt;
: Auf dieser Seite nach &#039;&#039;&#039;Alternative Vorgehensweise&#039;&#039;&#039; suchen.&lt;br /&gt;
&lt;br /&gt;
Man kann die passende SQL Datei mit &amp;lt;tt&amp;gt;phpMyAdmin&amp;lt;/tt&amp;gt; importieren - oder im Terminal. Das ließe sich natürlich auch automatisieren mit einem Script.&lt;br /&gt;
&lt;br /&gt;
=== Keine Aktulisierungen vorhanden ===&lt;br /&gt;
Joomla ist offensichtlich nicht aktuell aber es wird angezeigt, dass keine Aktualisierungen verfügbar sind&lt;br /&gt;
 Erweiterungen / Verwalten / Aktualisieren&lt;br /&gt;
Dann auf den Button &amp;lt;tt&amp;gt;Leeren&amp;lt;/tt&amp;gt; klicken.&lt;br /&gt;
: Es wird der &#039;&#039;&#039;Cache&#039;&#039;&#039; geleert.&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Raspberry_Pi&amp;diff=1827</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Raspberry_Pi&amp;diff=1827"/>
		<updated>2026-07-17T11:22:20Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel erhebt keinen Anspruch auf Vollständigkeit. Ich dokumentiere hier nur meine eigenen Erfahrungen. Es wird beschrieben, wie man ohne einen Monitor an den Raspberry PI anzuschließen, auf diesem die Linux Distribution &#039;&#039;&#039;Raspbian&#039;&#039;&#039; installieren kann.&lt;br /&gt;
: Achtung: Bitte bedenken, dass durch Unachtsamkeit bzw. mangelhaftes Verständnis der Zusammenhänge Schaden angerichtet werden kann.&lt;br /&gt;
== Raspbian ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Raspbian ist ein Betriebssystem für den Raspberry PI auf Debian Basis.&lt;br /&gt;
* Download des Raspbian Image&lt;br /&gt;
 wget https://downloads.raspberrypi.org/raspbian_latest&lt;br /&gt;
* ZIP Datei entpacken&lt;br /&gt;
 unzip raspbian_latest&lt;br /&gt;
Die Datei wird entpackt als &lt;br /&gt;
 # Beispiel&lt;br /&gt;
 2017-03-02-raspbian-jessie.img&lt;br /&gt;
* Image auf SD Speicherkarte kopieren&lt;br /&gt;
Die Mini SD-Karte in den mitgelieferten SD-Adapter stecken und diesen in ein Kartenlesegerät einstecken.&lt;br /&gt;
: Den Namen der Gerätedatei ermitteln&lt;br /&gt;
 fdisk -l&lt;br /&gt;
Wir sehen alle am Gerät angeschlossenen Datenträger, darunter sollte nun auch die SD-Karte sein.&lt;br /&gt;
Das heruntergeladene Image auf die SD-Karte übertragen&lt;br /&gt;
: Achtung: Im folgenden Beispiel wird angenommen, dass die SD-Karte im System als &#039;&#039;&#039;/dev/sdd&#039;&#039;&#039; erkannt wurde, was wir der Ausgabe von &amp;lt;code&amp;gt;fdisk -l&amp;lt;/code&amp;gt; entnommen haben. &lt;br /&gt;
 dd if=./2017-03-02-raspbian-jessie.img of=/dev/sdd bs=4M&lt;br /&gt;
* Raspberry PI booten&lt;br /&gt;
Die SD-Karte in den Raspberry PI einstecken und dann den Raspberry PI mit dem Netzteil verbinden.&lt;br /&gt;
: Der Raspberry PI bootet und installiert auf der SD-Karte automatisch das Betriebssystem &amp;lt;tt&amp;gt;Raspbian&amp;lt;/tt&amp;gt;. Nach ca. 5 Minuten sollte das erledigt sein.&lt;br /&gt;
* Raspberry PI im LAN finden&lt;br /&gt;
Nun können wir testen, ob der Raspberry PI ordnungsgemäß hochgefahren ist, indem wir an unserem PC im LAN folgenden Befehl eingeben:&lt;br /&gt;
: Das Kommando bezieht sich auf ein LAN, in dem IP Adressen von 10.0.0.0 bis 10.0.0.254 möglich sind.&lt;br /&gt;
 nmap -sn 10.0.0.0/24&lt;br /&gt;
Achtung: Unter Suse ist das Tool &#039;&#039;&#039;nmap&#039;&#039;&#039; nicht vorhanden, also installieren:&lt;br /&gt;
 zypper install nmap&lt;br /&gt;
Wenn in der Ausgabe dieses Befehls drei Zeilen auftauchen, die dem Raspberry PI zuzuordnen sind, dann ist alles ok. Das könnte so aussehen:&lt;br /&gt;
 Nmap scan report for 10.0.0.72&lt;br /&gt;
 Host is up (0.00041s latency).&lt;br /&gt;
 MAC Address: B8:27:EB:D1:B9:20 (Raspberry Pi Foundation)&lt;br /&gt;
Folgendes Kommando testet, ob die IP wirklich erreichbar ist:&lt;br /&gt;
 ping 10.0.0.72&lt;br /&gt;
=== Partitionen ===&lt;br /&gt;
Folgende Partitionen befinden sich nun auf der SD-Karte:&lt;br /&gt;
 Device         Boot Start      End  Sectors  Size Id Type&lt;br /&gt;
 /dev/mmcblk0p1       8192    92159    83968   41M  b W95 FAT32&lt;br /&gt;
 /dev/mmcblk0p2      92160 31176703 31084544 14,8G 83 Linux&lt;br /&gt;
Die SD-Karte muss im MSDOS Format partitioniert werden. GPT wird nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
=== Aktualisieren ===&lt;br /&gt;
 apt update&lt;br /&gt;
 apt upgrade&lt;br /&gt;
&lt;br /&gt;
=== Release Upgrade ===&lt;br /&gt;
Ich beschreibe hier den Wechsel von Version &amp;lt;tt&amp;gt;Raspbian sttretch&amp;lt;/tt&amp;gt; nach &amp;lt;tt&amp;gt;buster&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zuerst das alte System auf den aktuellen Stand bringen, falls das noch möglich ist.&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
 sudo apt-get autoremove&lt;br /&gt;
Sicherstellen, dass keine Pakete beschädigt sind.&lt;br /&gt;
 sudo dpkg --audit&lt;br /&gt;
 sudo dpkg --get-selections | grep hold&lt;br /&gt;
Wenn keine Ausgabe, dann alles okay. Dann Speicherkapazität überprüfen.&lt;br /&gt;
 df -h&lt;br /&gt;
Einige GB sollten verfügbar sein.&lt;br /&gt;
&lt;br /&gt;
Jetzt den Paket Cache leeren.&lt;br /&gt;
 apt-get clean&lt;br /&gt;
Paketquellen anpassen&lt;br /&gt;
 # /etc/apt/sources.list&lt;br /&gt;
 deb &amp;lt;nowiki&amp;gt;http://mirrordirector.raspbian.org/raspbian/&amp;lt;/nowiki&amp;gt; buster main contrib non-free rpi&lt;br /&gt;
&lt;br /&gt;
 # /etc/apt/sources.list.d/raspi.list &lt;br /&gt;
 deb &amp;lt;nowiki&amp;gt;http://archive.raspberrypi.org/debian&amp;lt;/nowiki&amp;gt; buster main ui&lt;br /&gt;
&lt;br /&gt;
Paket &amp;lt;tt&amp;gt;listchanges&amp;lt;/tt&amp;gt; eventuell entfernen.&lt;br /&gt;
 apt-get remove apt-listchanges&lt;br /&gt;
&lt;br /&gt;
Update der Paketquellen&lt;br /&gt;
 apt-get update&lt;br /&gt;
Das ist noch nicht das Update der Version, es werden nur die Paketquellen aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Nun werden die installierten Pakete aktualisiert.&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
Jetzt wird das ganze System aktualisiert&lt;br /&gt;
 apt-get dist-upgrade -y&lt;br /&gt;
Aufräumen&lt;br /&gt;
 apt autoremove -y&lt;br /&gt;
 apt autoclean&lt;br /&gt;
&lt;br /&gt;
== SSH aktivieren ==&lt;br /&gt;
Wir brauchen SSH, um an den Raspberry PI heranzukommen.&lt;br /&gt;
: In neueren Versionen von Raspbian ist es notwendig, SSH explizit zu aktivieren. indem man in der Boot-Partition der SD eine leere Datei mit dem Namen &#039;&#039;&#039;ssh&#039;&#039;&#039; anlegt.&lt;br /&gt;
: Da wir den Raspberry PI jetzt noch nicht über SSH erreichen können, müssen wir die SD-Karte noch einmal herausnehmen und in den Kartenleser am PC einlegen. Wir sehen, dass es nun zwei Partitionen auf der SD-Karte gibt:&lt;br /&gt;
 Gerät      Boot Anfang     Ende Sektoren Größe Kn Typ&lt;br /&gt;
  /dev/sdd1         8192   137215   129024   63M  c W95 FAT32 (LBA)&lt;br /&gt;
  /dev/sdd2       137216 30375935 30238720 14,4G 83 Linux&lt;br /&gt;
Die FAT32 Partition, hier &amp;lt;code&amp;gt;/dev/sdd1&amp;lt;/code&amp;gt; ist die Boot Partition des Raspberry PI.&lt;br /&gt;
: Wir mounten diese Partition&lt;br /&gt;
 mount /dev/sdd1 /mnt&lt;br /&gt;
Dann legen wir eine leere Datei mit dem Namen &#039;&#039;&#039;ssh&#039;&#039;&#039; an und hängen die Prtition wieder aus.&lt;br /&gt;
 cd /mnt&lt;br /&gt;
 touch ssh&lt;br /&gt;
 umount /mnt&lt;br /&gt;
Nun nehmen wir die SD-Karte aus dem Kartenleser, stecken sie wieder in den Raspberry PI und schließen das Netzteil an.&lt;br /&gt;
* SSH Verbindung testen&lt;br /&gt;
Nach dem Booten sollte der Raspberry PI per SSH erreichbar sein - allerdings nicht als Benutzer &#039;&#039;&#039;root&#039;&#039;&#039; sondern nur als Benutzer &#039;&#039;&#039;pi&#039;&#039;&#039;.&lt;br /&gt;
 ssh pi@10.0.0.72&lt;br /&gt;
Das Passwort des Benutzers &#039;&#039;&#039;pi&#039;&#039;&#039; lautet &lt;br /&gt;
 raspberry&lt;br /&gt;
== Passwort für Root ==&lt;br /&gt;
Aus Sicherheitsgründen ist auf Debian Systemen standardmäßig kein root-Passwort definiert - wie von Ubuntu her bekannt.&lt;br /&gt;
: Man kann aber trotzdem ein root-Passwort vergeben mit&lt;br /&gt;
 sudo passwd root&lt;br /&gt;
=== SSH Verbindung als Root ===&lt;br /&gt;
* Authentifizierung über Schlüsselpaare&lt;br /&gt;
Will man den Raspberry PI als Benutzer &#039;&#039;&#039;root&#039;&#039;&#039; per SSH erreichen, sollte der Zugang nicht über ein Passwort sondern über Schlüsselpaare erfolgen.&lt;br /&gt;
: Folgender Artikel beschreibt, wie man SSH über Schlüsselpaare einrichtet:  [[SSH]].&lt;br /&gt;
* Authentifizierung über Passwort&lt;br /&gt;
Will man aber auch als &#039;&#039;&#039;root&#039;&#039;&#039; eine SSH Authentifizierung über Passwort, dann am Raspberry Pi die SSH Konfiguration ändern:&lt;br /&gt;
 # /etc/ssh/sshd_config&lt;br /&gt;
 &lt;br /&gt;
 PasswordAuthentication yes&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
 usePAM no&lt;br /&gt;
&lt;br /&gt;
Nun den SSH Server neu starten&lt;br /&gt;
 systemctl restart ssh.service&lt;br /&gt;
&lt;br /&gt;
== Raspbian konfigurieren ==&lt;br /&gt;
=== Konfigurationstool ===&lt;br /&gt;
 raspi-config&lt;br /&gt;
* Grafische Oberfläche abschalten&lt;br /&gt;
 Bootoptionen | Desktop/CLI | Console&lt;br /&gt;
=== Statische IP Adresse ===&lt;br /&gt;
In den meisten Fällen wird es sinnvoll sein, dem Raspberry PI eine statische IP Adresse zu geben.&lt;br /&gt;
==== Name der Netzwerk Schnittstelle ====&lt;br /&gt;
Für die Konfiguration der statischen Adresse sollte man nicht die alten Bezeichnungen für die Netzwerkadapter &amp;lt;tt&amp;gt;eth0 wlan0&amp;lt;/tt&amp;gt; verwenden sondern die neuen, sogenannten &amp;lt;tt&amp;gt;predictable network names&amp;lt;/tt&amp;gt;. Die Namen der Schnittstellen erhält man mit&lt;br /&gt;
 ifconfig&lt;br /&gt;
Voraussetzung ist, dass die &amp;lt;tt&amp;gt;predictable network names&amp;lt;/tt&amp;gt; aktiviert sind. Das geschieht mit&lt;br /&gt;
 raspi-config / Advanced Options&lt;br /&gt;
Den Namen der Netzwerk-Schnittstelle braucht man dann für die Konfigurationsdatei &amp;lt;tt&amp;gt;/etc/dhcpcd.conf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration der statischen IP ====&lt;br /&gt;
 sudo pico /etc/dhcpcd.conf&lt;br /&gt;
In meinem Beispiel bekommt der Raspberry PI die Adresse 10.0.0.111&lt;br /&gt;
: Achtung: Die Adresse sollte nicht im AdressPool des DHCP Servers liegen.&lt;br /&gt;
Folgendes am Ende der Konfiguration hinzufügen:&lt;br /&gt;
 # interface eth0&lt;br /&gt;
 # nicht mehr verwenden&lt;br /&gt;
 &lt;br /&gt;
 # Beispiel &lt;br /&gt;
 interface enxb827ebe91322 &lt;br /&gt;
 static ip_address=10.0.0.111/24&lt;br /&gt;
 static routers=10.0.0.138&lt;br /&gt;
 static domain_name_servers=10.0.0.138&lt;br /&gt;
&lt;br /&gt;
=== USB Festplatte automatisch in den Standby Modus versetzen ===&lt;br /&gt;
Falls man eine externe HD am Raspberry PI betreiben will und diese nur bei Bedarf eingeschaltet sein soll.&lt;br /&gt;
* hdparm installieren&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get install hdparm&lt;br /&gt;
* Power Status der Festplatte überprüfen&lt;br /&gt;
Somit sehen wir, ob die Festplatte überhaupt geeignet ist für einen Standby Betrieb.&lt;br /&gt;
 sudo hdparm -C /dev/sda&lt;br /&gt;
* Die UUID der Festplatte ermitteln&lt;br /&gt;
 blkid&lt;br /&gt;
* Konfigurationsdatei bearbeiten&lt;br /&gt;
 pico /etc/hdparm.conf&lt;br /&gt;
An das Ende dieser Datei folgendes einfügen:&lt;br /&gt;
 # Beispiel UUID: f16aec5f-34a8-49fa-8356-ae0c39ca53e8&lt;br /&gt;
 &lt;br /&gt;
 /dev/disk/by-uuid/f16aec5f-34a8-49fa-8356-ae0c39ca53e8 {&lt;br /&gt;
   spindown_time = 240&lt;br /&gt;
 }&lt;br /&gt;
* Troubleshooting&lt;br /&gt;
Anscheinend wird der Standbymodus blockiert, wenn die USB Festplatte über den Automounter eingebunden wurde. Schuld daran ist die grafische Oberfläche Lxde.&lt;br /&gt;
: Workaraund: Mit &#039;&#039;&#039;raspi-config&#039;&#039;&#039; in den Bootoptionen die GUI deaktivieren - siehe weiter oben im Kapitel &#039;&#039;&#039;Konfiguration&#039;&#039;&#039;.&lt;br /&gt;
* Info&lt;br /&gt;
https://linuxundich.de/hardware/festplatten-automatisch-im-betrieb-in-den-standby-schalten/&lt;br /&gt;
* Standbymodus manuell einschalten&lt;br /&gt;
Falls aus irgendeinem Grund die Fesplatte nicht automatisch in den Standbymodus geht, kann man per &amp;lt;code&amp;gt;cronjob&amp;lt;/code&amp;gt; folgenden Befehl aufrufen:&lt;br /&gt;
 hdparm -y /dev/sda&lt;br /&gt;
=== Tastaturlayout ändern ===&lt;br /&gt;
Die Localisierung stellt man mit &amp;lt;tt&amp;gt;raspi-config&amp;lt;/tt&amp;gt; ein. Falls das nicht zu einer deutschen Tastaturbelegung führt, so kann man mit folgendem Befehl die Tastaturbelegung ändern:&lt;br /&gt;
 dpkg-reconfigure keyboard-configuration&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
==== SWAP als Datei ====&lt;br /&gt;
 pico /etc/dphys-swapfile&lt;br /&gt;
SWAP file nicht auf SD Card legen sondern auf USB-Festplatte, hier eingehängt unter &#039;&#039;&#039;/media/disk&#039;&#039;&#039;&lt;br /&gt;
 CONF_SWAPFILE=/media/disk/swap&lt;br /&gt;
 CONF_SWAPFACTOR=2&lt;br /&gt;
SWAP aktivieren&lt;br /&gt;
 service dphys-swapfile start&lt;br /&gt;
&lt;br /&gt;
==== SWAP Partition ====&lt;br /&gt;
Sicherheitshalber &#039;&#039;&#039;dphys-swapfile&#039;&#039;&#039; deinstallieren:&lt;br /&gt;
 sudo dphys-swapfile swapoff&lt;br /&gt;
 sudo dphys-swapfile uninstall&lt;br /&gt;
 sudo update-rc.d dphys-swapfile remove&lt;br /&gt;
 sudo systemctl disable dphys-swapfile.service&lt;br /&gt;
Dann SWAP Partition in &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039; eintragen&lt;br /&gt;
 /dev/sda3    swap    swap    defaults   0  0&lt;br /&gt;
&lt;br /&gt;
==== Troubles ====&lt;br /&gt;
* Swap verhindert Standby der Festplatte&lt;br /&gt;
Folgendes in ein Wartungsscript eintragen bzw. in die &amp;lt;code&amp;gt;crontab&amp;lt;/code&amp;gt;&lt;br /&gt;
 # Beispiel UUID&lt;br /&gt;
 swapoff UUID=&amp;quot;d6bc7fb3-6bab-45f1-b65d-3cd264751665&amp;quot; &lt;br /&gt;
 swapon UUID=&amp;quot;d6bc7fb3-6bab-45f1-b65d-3cd264751665&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== WLAN aktivieren ===&lt;br /&gt;
Der Raspberry PI 3 hat einen WLAN Netzwerkadapter eingebaut.&lt;br /&gt;
* Überprüfen, welche Netzwerke erreichbar sind&lt;br /&gt;
 iwlist wlan0 scan | grep ESSID&lt;br /&gt;
* Zugangsdaten für Netzwerk(e) hinterlegen&lt;br /&gt;
 pico /etc/wpa_supplicant/wpa_supplicant.conf&lt;br /&gt;
Am Ende dieser Datei SSID und Passwort eintragen&lt;br /&gt;
 network={&lt;br /&gt;
    ssid=&amp;quot;TestNetzwerk&amp;quot;&lt;br /&gt;
    psk=&amp;quot;Mein1SuperGeheimesPasswort!&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
* Energiesparmodus deaktivieren&lt;br /&gt;
 pico /etc/network/interfaces&lt;br /&gt;
Folgende zwei Zeilen am Ende der Datei einfügen:&lt;br /&gt;
 pre-up iw dev wlan0 set power_save off&lt;br /&gt;
 post-down iw dev wlan0 set power_save on&lt;br /&gt;
* WLAN Adapter starten&lt;br /&gt;
 ifdown wlan0&lt;br /&gt;
 ifup wlan0&lt;br /&gt;
* WLAN deaktivieren&lt;br /&gt;
Falls man WLAN doch nicht braucht, dann kann man den Adapter nach jedem Bootvorgang deaktivieren, indem man einen Cronjob definiert&lt;br /&gt;
 crontab -e&lt;br /&gt;
Folgendes in die Cron Tabelle eintragen&lt;br /&gt;
 @reboot sudo ifdown wlan0&lt;br /&gt;
=== Boot ===&lt;br /&gt;
Der Raspberry Pi bootet von einer FAT-Bootpartition, die über &amp;lt;tt&amp;gt;/etc/fstab&amp;lt;/tt&amp;gt; unter &amp;lt;tt&amp;gt;/boot&amp;lt;/tt&amp;gt; eingehängt wird. Es wird nicht der unter Linux übliche Bootmanager &amp;lt;tt&amp;gt;grub2&amp;lt;/tt&amp;gt; verwendet.&lt;br /&gt;
In folgende Datei werden Bootoptionen eingetragen.&lt;br /&gt;
 /boot/cmdline.txt &lt;br /&gt;
Beispiel&lt;br /&gt;
 dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=b210802c-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait&lt;br /&gt;
Die Option &amp;lt;tt&amp;gt;net.ifnames=0&amp;lt;/tt&amp;gt; ermöglicht die Zuweisung statischer IP Adressen bei Verwendung der Schnittstellenbezeichnungen  &amp;lt;tt&amp;gt;wlan0&amp;lt;/tt&amp;gt; bzw. &amp;lt;tt&amp;gt;eth0&amp;lt;/tt&amp;gt; &lt;br /&gt;
Die Kernel-Optionen müssen in einer Zeile stehen.&lt;br /&gt;
==== Filesystemcheck ====&lt;br /&gt;
Das Dateisystem auf der SD Karte kann in Unordnung geraten. Da man es im laufenden Betrieb nicht reparieren kann, ist es sinnvoll, dies nach einem Reboot zu automatisieren.&lt;br /&gt;
Damit das Dateisystem überprüft wird, muss folgende Option beim Start als Kernel-Parameter übergeben werden:&lt;br /&gt;
 fsck.mode=force&lt;br /&gt;
&lt;br /&gt;
Beim nächsten Reboot wird nun ein Dateisystem Check durchgeführt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei einer großen (externen) Festplatte kann der Filesystem Check lange dauern. Da man ohne Monitor nichts sieht, könnte man glauben, der Rechner bootet nicht ...&lt;br /&gt;
&lt;br /&gt;
== MTA installieren ==&lt;br /&gt;
Wir brauchen einen Mailserver, damit uns der Rapberry PI mitteilen kann, was sich so tut in seinem Inneren.&lt;br /&gt;
: Als Mail Transfer Agent verwenden wir &#039;&#039;&#039;exim4&#039;&#039;&#039;.&lt;br /&gt;
Eine Anleitung zu Installation und Konfiguration findet sich hier: [[Exim]]&lt;br /&gt;
&lt;br /&gt;
== HTTP Server installieren ==&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install apache2&lt;br /&gt;
In Debian-Systemen ist die &#039;&#039;&#039;Document Root&#039;&#039;&#039; des Servers&lt;br /&gt;
 /var/www/html&lt;br /&gt;
ServerName eintragen&lt;br /&gt;
 # /etc/apache2/sites-available/000-default.conf&lt;br /&gt;
 ServerName myraspi.mydomain&lt;br /&gt;
* Server starten&lt;br /&gt;
 service apache2 start&lt;br /&gt;
* HTTP Server automatisch beim Systemstart aktivieren&lt;br /&gt;
 systemctl enable apache2.service&lt;br /&gt;
&lt;br /&gt;
== Datenbankserver Mysql installieren ==&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install mysql-server&lt;br /&gt;
== Printserver CUPS ==&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
 # /etc/cupsd.conf&lt;br /&gt;
 DefaultEncryption Never&lt;br /&gt;
&lt;br /&gt;
 adduser [BENUTZRR] lpadmin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://www.elektronik-kompendium.de/sites/raspberry-pi/2007081.htm&lt;br /&gt;
&lt;br /&gt;
https://www.raspberry-pi-geek.de/ausgaben/rpg/2016/05/shell-befehle-fuer-die-administration-von-cups/&lt;br /&gt;
&lt;br /&gt;
==== Apple Airprint ====&lt;br /&gt;
Damit man mit einem Apple Gerät, wie Iphone oder Ipad über den Raspberry Pi drucken kann, muss am Raspberry Pi das Service &amp;lt;ii&amp;gt;Avahi aktiviert sein. Damit kann &lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install avahi-daemon&lt;br /&gt;
Avahi testen: &lt;br /&gt;
 apt-get install avahi-utils&lt;br /&gt;
 avahi-browse -a&lt;br /&gt;
&lt;br /&gt;
== PhpMyAdmin installieren ==&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install phpmyadmin&lt;br /&gt;
Apache2 Direktive hinzufügen:&lt;br /&gt;
 # /etc/apache2/apache2.conf&lt;br /&gt;
 Include /etc/phpmyadmin/apache.conf&lt;br /&gt;
Die Konfiguration von &amp;lt;tt&amp;gt;phpmyadmin&amp;lt;/tt&amp;gt; ist&lt;br /&gt;
 /var/lib/phpmyadmin/config.inc.php&lt;br /&gt;
&lt;br /&gt;
== PHP Version aktualisieren ==&lt;br /&gt;
Zuerst den PGP key herunterladen&lt;br /&gt;
 wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -&lt;br /&gt;
Nun wird das PHP Repository für &amp;lt;tt&amp;gt;raspbian stretch&amp;lt;/tt&amp;gt; zur Sources Liste hinzugefügt&lt;br /&gt;
 echo &amp;quot;deb https://packages.sury.org/php/ stretch main&amp;quot; | tee /etc/apt/sources.list.d/php7.list&lt;br /&gt;
dann Update der Repositories&lt;br /&gt;
 apt update&lt;br /&gt;
und jetzt installieren&lt;br /&gt;
 apt install php7.3&lt;br /&gt;
&lt;br /&gt;
== Backup des Raspberry PI ==&lt;br /&gt;
=== Image der SD Karte ===&lt;br /&gt;
In folgenden Beispielen wird angenommen, dass die SD-Karte als &#039;&#039;&#039;/dev/sdd&#039;&#039;&#039; erkannt wurde.&lt;br /&gt;
:SD Card aus dem Raspi herausnehmen und mittels Kartenlesegerät mit dem PC verbinden.&lt;br /&gt;
* Image der SD Karte am PC sichern.&lt;br /&gt;
 dd bs=4M if=/dev/sdd | gzip &amp;gt; /download/iso/raspbian.img.gz &lt;br /&gt;
* Gesichertes Image auf SD-Karte zurückkopieren&lt;br /&gt;
 gunzip --stdout /download/iso/raspbian.img.gz | dd bs=4M of=/dev/sdd&lt;br /&gt;
==== Anpassungen nach dem Wiederherstellen ====&lt;br /&gt;
* HD Bezeichnungen anpassen&lt;br /&gt;
Mit &#039;&#039;&#039;blkid&#039;&#039;&#039; die Gerätebezeichnungen der USB Partitionen ermitteln und in &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039; eintragen.&lt;br /&gt;
: Für die Gerätebezeichnungen unbedingt die &#039;&#039;&#039;UUID&#039;&#039;&#039; verwenden und nicht &#039;&#039;&#039;/dev/sdx&#039;&#039;&#039;&lt;br /&gt;
* Statische IP-Adresse ändern&lt;br /&gt;
 pico /etc/dhcpcd.conf&lt;br /&gt;
* ID der USB Festplatte eintragen&lt;br /&gt;
 pico /etc/hdparm.conf&lt;br /&gt;
Dies ist notwendig für den Standby Betrieb der Festplatte&lt;br /&gt;
* SSH Schlüssel an diverse Rechner verteilen&lt;br /&gt;
 ssh-copy-id root@hostname&lt;br /&gt;
&lt;br /&gt;
=== Dateien sichern mit Rsync ===&lt;br /&gt;
Siehe Artikel [[Datensicherung]]&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
=== Permission Errors ===&lt;br /&gt;
 /etc/cron.daily/man-db&lt;br /&gt;
Fehlermeldungen:&lt;br /&gt;
 /usr/bin/mandb: fopen /var/cache/man/fsstnd/5179: Keine Berechtigung&lt;br /&gt;
 /usr/bin/mandb: fopen /var/cache/man/it/5179: Keine Berechtigung&lt;br /&gt;
 /usr/bin/mandb: fopen /var/cache/man/gl/5179: Keine Berechtigung&lt;br /&gt;
 ...&lt;br /&gt;
Lösung:&lt;br /&gt;
 chown man /var/cache/man -R&lt;br /&gt;
=== Kein Reboot möglich ===&lt;br /&gt;
Nach Eingabe des Kommandos &amp;lt;code&amp;gt;reboot&amp;lt;/code&amp;gt; erscheint die Meldung&lt;br /&gt;
 Failed to talk to init daemon&lt;br /&gt;
Lösung&lt;br /&gt;
 sudo reboot -f&lt;br /&gt;
=== SD Karte voll ===&lt;br /&gt;
Um problemlos ein Systemupgrade auf die nächste Raspbian Version machen zu können, sind einige GB freier Platz auf der SC Karte notwendig.&lt;br /&gt;
: Ich habe das Paket &amp;lt;tt&amp;gt;wolfram-engine&amp;lt;/tt&amp;gt; deinstalliert, weil es mehr als 2 GB Platz verbraucht und ich diese Software für meinen Raspberry PI nicht brauche.&lt;br /&gt;
 apt remove wolfram-engine&lt;br /&gt;
 apt autoremove&lt;br /&gt;
=== Keine IP Adresse ===&lt;br /&gt;
Trotz Konfiguration des &amp;lt;tt&amp;gt;dhcpcd&amp;lt;/tt&amp;gt; daemon, erhält der Rechner nach dem Boot keine IP Adresse. Dies trat bei mir auf nach dem Upgrade von &amp;lt;tt&amp;gt;raspbian stretch&amp;lt;/tt&amp;gt; auf &amp;lt;tt&amp;gt;raspbian buster&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Möglicherweise geht es nachdem man einmal die gewünschte IP Adresse manuelle zugewiesen hat.&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 ifconfig eth0 10.0.0.112 netmask 255.255.255.0&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=NSLU2&amp;diff=1826</id>
		<title>NSLU2</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=NSLU2&amp;diff=1826"/>
		<updated>2026-07-17T11:21:19Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NSLU2 - &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;S&#039;&#039;&#039;torage &#039;&#039;&#039;L&#039;&#039;&#039;ink for &#039;&#039;&#039;U&#039;&#039;&#039;SB &#039;&#039;&#039;2&#039;&#039;&#039; ist ein nicht mehr ganz aktuelles aber sehr brauchbares Gerät von Linksys. Das verwende ich nun für meine Datensicherung im LAN.&lt;br /&gt;
&lt;br /&gt;
Ich habe mich entschlossen, auf der NSLU2 &#039;&#039;&#039;Debian 7&#039;&#039;&#039; zu installieren. Die einzelnen Schritte sind folgendem [http://www.cyrius.com/debian/nslu2/unpack/ Howto] entnommen. Hier ist alles noch einmal kurz zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
=== Die USB Festplatte partitionieren ===&lt;br /&gt;
Mindestens drei Partitionen anlegen&lt;br /&gt;
   Device Boot      Start         End      Blocks   Id  System&lt;br /&gt;
 /dev/sda1            2048  1939866861   969932407   83  Linux&lt;br /&gt;
 /dev/sda2      1939867648  1950355455     5243904   83  Linux&lt;br /&gt;
 /dev/sda3      1950355456  1953523711     1584128   82  Linux swap / Solaris&lt;br /&gt;
Die Root Partition &#039;&#039;&#039;muss&#039;&#039;&#039; auf &#039;&#039;&#039;/dev/sda2&#039;&#039;&#039; liegen. Andere Partitionen können beliebig angelegt werden. Bei obigem Beispiel wird &#039;&#039;&#039;/dev/sda1&#039;&#039;&#039; für das Backup genützt.&lt;br /&gt;
&lt;br /&gt;
=== Debian downloaden ===&lt;br /&gt;
Debian 7 kann nicht einfach auf der NSLU2 mit dem &#039;&#039;&#039;Debian Installer&#039;&#039;&#039; installiert werden, da die NSLU2 zu wenig RAM hat. Daher einen von der Debian Community speziell für die NSLU2 vorbereiteten TAR Ball downloaden und zunächst auf dem lokalen PC speichern.&lt;br /&gt;
 wget http://people.debian.org/~tbm/nslu2/wheezy/base.tar.bz2&lt;br /&gt;
 wget http://people.debian.org/~tbm/nslu2/wheezy/base.tar.bz2.asc&lt;br /&gt;
GPG Signatur überprüfen&lt;br /&gt;
 gpg --keyserver subkeys.pgp.net --recv-key 68FD549F&lt;br /&gt;
 gpg --verify base.tar.bz2.asc base.tar.bz2&lt;br /&gt;
&lt;br /&gt;
=== Debian entpacken ===&lt;br /&gt;
Die Partition &#039;&#039;&#039;/dev/sda2&#039;&#039;&#039; auf der USB Platte in das Dateisystem einhängen und dann den TAR Ball entpacken.&lt;br /&gt;
 tar -xjvf ./base.tar.bz2&lt;br /&gt;
&lt;br /&gt;
=== NSLU2 flashen ===&lt;br /&gt;
Die Firmware der NSLU2 muss geflasht werden&lt;br /&gt;
* Firmware downloaden&lt;br /&gt;
 wget http://www.cyrius.com/debian/nslu2/files/armel/sda2-3.2.0-4&lt;br /&gt;
* Auf dem lokalen PC das Programm &#039;&#039;&#039;upslug2&#039;&#039;&#039; installieren. Im openSUSE Software Center findet man dieses Tool.&lt;br /&gt;
* Die NSLU2 in den Update Modus versetzen:&lt;br /&gt;
# Stromkabel von der NSLU2 abziehen und wieder anstecken, damit ist das Gerät ausgeschaltet.&lt;br /&gt;
# Im ausgeschalteten Zustand auf der Rückseite mit einer Büroklammer den &#039;&#039;&#039;Reset&#039;&#039;&#039; Schalter drücken und gedrückt halten.&lt;br /&gt;
# Bei &#039;&#039;&#039;gedrücktem&#039;&#039;&#039; Reset Schalter den &#039;&#039;&#039;Power&#039;&#039;&#039; Button auf der Vorderseite kurz drücken.&lt;br /&gt;
# 10 Sekunden mit &#039;&#039;&#039;gedrücktem&#039;&#039;&#039; Reset Schalter warten, bis die Ready/Status LED ihre Farbe ändert und zu blinken beginnt.&lt;br /&gt;
# Dann den Reset Button &#039;&#039;&#039;loslassen&#039;&#039;&#039;&lt;br /&gt;
# Jetzt das Flashprogramm starten&lt;br /&gt;
 upslug2 -i sda2-3.2.0-4&lt;br /&gt;
&lt;br /&gt;
=== Reboot ===&lt;br /&gt;
Nach dem Flashen die USB Platte an das NSLU2 anschließen. &lt;br /&gt;
&lt;br /&gt;
Daraufhin sollte die NSLU2 automatisch rebooten, sonst das Netzkabel entfernen, wieder anstecken und die NSLU2 einschalten.&lt;br /&gt;
&lt;br /&gt;
== Weitere Aktionen ==&lt;br /&gt;
=== Shutdown statt Reboot ===&lt;br /&gt;
* Konfiguration&lt;br /&gt;
In der Standardeinstellung bewirkt das Drücken des &#039;&#039;&#039;Power Buttons&#039;&#039;&#039; einen Reboot.&lt;br /&gt;
 /etc/inittab&lt;br /&gt;
Folgende Zeile ändern:&lt;br /&gt;
 # ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now&lt;br /&gt;
&lt;br /&gt;
 ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now&lt;br /&gt;
* Änderungen anwenden&lt;br /&gt;
 telinit q&lt;br /&gt;
&lt;br /&gt;
=== IP Adresse ermitteln ===&lt;br /&gt;
Die Default Adresse der NSLU2 lautet &#039;&#039;&#039;192.168.1.77&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nach dem Reboot sollte die NSLU2 über DHCP eine neue Adresse bekommen haben. Diese ermitteln mit&lt;br /&gt;
 nmap -sn 10.0.0.0/24&lt;br /&gt;
=== Root Passwort ändern ===&lt;br /&gt;
Das vorgegebene Paswort lautet &#039;&#039;&#039;root&#039;&#039;&#039; und sollte natürlich geändert werden.&lt;br /&gt;
=== Eine fixe IP Adresse vergeben ===&lt;br /&gt;
Siehe folgenden Artikel: [[Debian]]&lt;br /&gt;
=== SSH konfigurieren ===&lt;br /&gt;
 rm /etc/ssh/ssh_host*&lt;br /&gt;
 dpkg-reconfigure openssh-server&lt;br /&gt;
SSH Schlüssel auf die NSLU2 kopieren, damit kein Passwort mehr gebraucht wird.&lt;br /&gt;
 ssh-copy-id root@10.0.0.110 &lt;br /&gt;
Das funktioniert natürlich nur, wenn auf dem Clientrechner vorher schon einmal die Schlüsselpaare erzeugt worden sind. Siehe Artikel [[SSH]].&lt;br /&gt;
&lt;br /&gt;
=== Softwarequellen anpassen ===&lt;br /&gt;
 # /etc/apt/sources.list &lt;br /&gt;
 deb http://ftp.de.debian.org/debian/ wheezy main&lt;br /&gt;
 deb http://security.debian.org/ wheezy/updates main&lt;br /&gt;
=== Rsync installieren ===&lt;br /&gt;
 apt-get install rsync&lt;br /&gt;
=== Rsync Server installieren ===&lt;br /&gt;
* Inetd&lt;br /&gt;
 openbsd-inetd start&lt;br /&gt;
Folgende Zeile in die Inetd Konfigurationsdatei eintragen:&lt;br /&gt;
 # /etc/inetd.conf&lt;br /&gt;
 rsync stream tcp nowait root /usr/bin/rsync rsync --daemon&lt;br /&gt;
* Rsync Service konfigurieren&lt;br /&gt;
Über Module, hier &#039;&#039;&#039;suserver&#039;&#039;&#039; wird ein Datenzugriff definiert. &lt;br /&gt;
 # /etc/rsyncd.conf&lt;br /&gt;
 max connections = 1&lt;br /&gt;
 log file = /var/log/rsync.log&lt;br /&gt;
 timeout = 300&lt;br /&gt;
 motd file = /etc/rsyncd.motd&lt;br /&gt;
 &lt;br /&gt;
 [suserver]&lt;br /&gt;
 path = /media/disk/suserver/backup.0&lt;br /&gt;
 comment = Backup von Rechner suserver&lt;br /&gt;
 uid = root&lt;br /&gt;
 gid = root&lt;br /&gt;
 read only = false&lt;br /&gt;
 # auth users = username&lt;br /&gt;
 # secrets file = /etc/rsyncd.scrt&lt;br /&gt;
&lt;br /&gt;
 # /etc/rsync.motd&lt;br /&gt;
 Rsync Server auf NSLU2&lt;br /&gt;
* Testen&lt;br /&gt;
Auflisten der Module&lt;br /&gt;
 rsync rsync://10.0.0.110&lt;br /&gt;
Dateien anzeigen&lt;br /&gt;
 rsync -av rsync://10.0.0.110/suserver&lt;br /&gt;
&lt;br /&gt;
=== IPv6 deaktivieren ===&lt;br /&gt;
[http://wiki.tuxnet24.de/display/MAIN/IPv6+unter+Debian+Wheezy+deaktivieren Siehe] &lt;br /&gt;
=== NFS Server ===&lt;br /&gt;
* Installieren&lt;br /&gt;
 apt-get install nfs-kernel-server nfs-common&lt;br /&gt;
* Verzeichnis exportieren&lt;br /&gt;
 # /etc/exports&lt;br /&gt;
 /media/disk     10.0.0.0/24(rw,sync,no_subtree_check,no_root_squash,insecure)&lt;br /&gt;
* Server neu starten&lt;br /&gt;
Möglicherweise muss vorher der Protmapper &#039;&#039;&#039;rbcbind&#039;&#039;&#039; gestartet werden.&lt;br /&gt;
 /etc/init.d/rpcbind start&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
* NFS Share auf einem Client mounten&lt;br /&gt;
NFS Version 3 erzwingen&lt;br /&gt;
 mount -t nfs -o nfsvers=3 10.0.0.110:/media/disk /media/disk&lt;br /&gt;
=== Services verwalten ===&lt;br /&gt;
Das Paket &#039;&#039;&#039;rcconf&#039;&#039;&#039; installieren&lt;br /&gt;
apt-get install rcconf&lt;br /&gt;
=== Lokalisierung ===&lt;br /&gt;
Programm zum Installieren einer oder mehrerer Lokalisierungen&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
Dieses Programm setzt auch die Defaulteinstellung in&lt;br /&gt;
 # cat /etc/default/locale&lt;br /&gt;
 &lt;br /&gt;
 LANG=de_AT.UTF-8&lt;br /&gt;
* Anzeigen aller installierten Lokalisisierungen&lt;br /&gt;
 locale -a&lt;br /&gt;
* Eintrag in &amp;lt;code&amp;gt; ~/.bashrc &amp;lt;/code&amp;gt;&lt;br /&gt;
 export LC_CTYPE=de_AT.UTF-8&lt;br /&gt;
 export LANG=de_AT&lt;br /&gt;
&lt;br /&gt;
== Mailversand einrichten ==&lt;br /&gt;
Siehe Artikel [[Exim]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Netzwerk&amp;diff=1825</id>
		<title>Netzwerk</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Netzwerk&amp;diff=1825"/>
		<updated>2026-07-17T11:18:57Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* nmap */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Netzwerk Kommandos ==&lt;br /&gt;
=== IP Adressen anzeigen ===&lt;br /&gt;
 ip addr show&lt;br /&gt;
=== IP Adresse zuweisen ===&lt;br /&gt;
 ifconfig eth0 10.80.12.100 netmask 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
 ip addr add 192.168.100.20/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
=== route ===&lt;br /&gt;
Eine Route hinzufügen für das Gateway ins Internet&lt;br /&gt;
 route add default gw 10.0.0.138&lt;br /&gt;
&lt;br /&gt;
=== mail ===&lt;br /&gt;
* Mail Kommandos&lt;br /&gt;
Nach dem Start des Programms &#039;&#039;&#039;mail&#039;&#039;&#039; kann man verschiedene Kommandos eingeben. Durch Eingabe von &#039;&#039;&#039;?&#039;&#039;&#039; erhält man eine Liste der Befehle.&lt;br /&gt;
 mail&lt;br /&gt;
 ?&lt;br /&gt;
* Alle Mails löschen&lt;br /&gt;
 mail&lt;br /&gt;
 d *&lt;br /&gt;
* Mail senden&lt;br /&gt;
 mail -s &amp;quot;Betreff&amp;quot; empfaenger@example.com&lt;br /&gt;
Nach Drücken von &amp;lt;tt&amp;gt;Enter&amp;lt;/tt&amp;gt; kann man einen Text eingeben. Eingabe abschließen mit &amp;lt;tt&amp;gt;STRG + D&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Mail senden an root&lt;br /&gt;
Man kann auch den Text vorher in einer Variablen speichern.&lt;br /&gt;
 msg=&amp;quot;Helle world&amp;quot;&lt;br /&gt;
 echo $msg | mail -s Testmail root&lt;br /&gt;
&lt;br /&gt;
=== nmap ===&lt;br /&gt;
* Portscan durchführen:&lt;br /&gt;
 # Portscan am eigenen PC&lt;br /&gt;
 nmap localhost&lt;br /&gt;
 # Portscan auf anderem Rechner&lt;br /&gt;
 nmap 10.80.12.5&lt;br /&gt;
* Rechner im Netzwerk scannen&lt;br /&gt;
 nmap -sn 10.80.12.0/24&lt;br /&gt;
Ausgabe:&lt;br /&gt;
 Host 10.80.12.92 appears to be up.&lt;br /&gt;
 MAC Address: 00:80:87:0B:D6:21 (OKI Electric Industry CO.)&lt;br /&gt;
 Host 10.80.12.93 appears to be up.&lt;br /&gt;
 MAC Address: 00:80:77:48:45:F4 (Brother Industries)&lt;br /&gt;
 Host 10.80.12.94 appears to be up.&lt;br /&gt;
 MAC Address: 00:04:00:EB:6C:28 (Lexmark International)&lt;br /&gt;
 Host 10.80.12.95 appears to be up.&lt;br /&gt;
 MAC Address: 00:C0:02:31:68:33 (Sercomm)&lt;br /&gt;
* Nur den Namen der eingeschalteten Geräte im LAN anzeigen&lt;br /&gt;
 nmap -sn -R --system-dns 192.168.1.0/24 | grep -v down | grep Nmap\ scan\ report | cut -d &amp;quot; &amp;quot; -f 5&lt;br /&gt;
&lt;br /&gt;
=== wget ===&lt;br /&gt;
Rekursiver Download von einem FTP Server&lt;br /&gt;
 # Download nach ./joomla.eduhi.at/images:&lt;br /&gt;
 wget -r --user=joomla_408012 --password=password ftp://joomla.eduhi.at/images/*&lt;br /&gt;
&lt;br /&gt;
 # Download in das aktuelle Verzeichnis:&lt;br /&gt;
 wget -r --user=joomla_408012 --password=password --no-host-directories --cut-dirs=1 ftp://joomla.eduhi.at/images/*&lt;br /&gt;
&lt;br /&gt;
== Network Manager ==&lt;br /&gt;
=== Netwzerkverbindungen ===&lt;br /&gt;
 cd /etc/NetworkManager/system-connections/&lt;br /&gt;
Hier befindet sich für jede gespeicherte Verbindung eine Datei.&lt;br /&gt;
&lt;br /&gt;
Man kann diese direkt bearbeiten oder mit dem Kommando &amp;lt;tt&amp;gt;nmcli con mod&amp;lt;/tt&amp;gt; ändern.&lt;br /&gt;
 # Beispiel:&lt;br /&gt;
 nmcli con mod eth1 ipv4.addresses 192.168.0.49/24&lt;br /&gt;
Die Netzwerkverbindungen können auch mit folgendem Programm verwaltet werden&lt;br /&gt;
 nmtui&lt;br /&gt;
[https://www.tecmint.com/nmcli-configure-network-connection/ Weitere Informationen]&lt;br /&gt;
&lt;br /&gt;
== Wake on LAN ==&lt;br /&gt;
=== Im BIOS einstellen ===&lt;br /&gt;
&lt;br /&gt;
* Power Management Einstellungen:&lt;br /&gt;
Die Konfiguration ist je nach BIOS verschieden&lt;br /&gt;
Beispiel für ASUS P5Q Motherboard, AMI BIOS&lt;br /&gt;
# ACPI 2.0 Support einschalten&lt;br /&gt;
# APM Configuration&lt;br /&gt;
 Power On By PCI Devices&lt;br /&gt;
&lt;br /&gt;
=== Aktivieren von WOL durch das Betriebssystem ===&lt;br /&gt;
Wenn Wake on LAN nach Aktivierung im BIOS nicht funktioniert, dann muss unter Linux die Netzwerkkarte für Wake on LAN konfiguriert werden&lt;br /&gt;
 ethtool -s eth0 wol g&lt;br /&gt;
Die Einstellung geht aber beim Shutdown verloren. Um das zu Verhindern kann man &amp;lt;code&amp;gt;ethtool&amp;lt;/code&amp;gt; in einem cronjob beim Booten aufrufen&lt;br /&gt;
 @reboot /usr/sbin/ethtool -s eth0 wol g&lt;br /&gt;
oder unter Suse die Einstellungen mit YAST konfigurieren&lt;br /&gt;
 # YAST/Netzwerkgeräte/Netzwerkeinstellungen/Bearbeiten/Hardware/Ethtool Optionen&lt;br /&gt;
 -s eth0 wol g&lt;br /&gt;
Die Konfiguration mit YAST funktioniert nicht mit dem Network Manager&lt;br /&gt;
* Anzeige der aktuellen Einstellungen für die Netzwerkkarte eth0:&lt;br /&gt;
 ethtool eth0&lt;br /&gt;
* Hinweis&lt;br /&gt;
Nach Änderungen an den APM Einstellungen im BIOS das System starten und wieder herunterfahren. Erst dann ist die Netzwerkkarte über das Betriebssystem für WOL konfiguriert.&lt;br /&gt;
=== Network Manager konfigurieren für Wake On LAN ===&lt;br /&gt;
* Informationen über die aktuelle Netzwerkverbindung abrufen&lt;br /&gt;
 nmcli connection&lt;br /&gt;
&lt;br /&gt;
 # Ausgabe Beispiel:&lt;br /&gt;
 NAME       UUID                                  TYPE      DEVICE &lt;br /&gt;
 LAN Kabel  e0aacc25-a365-37fe-89be-47f8a60c77f6  ethernet  eth0&lt;br /&gt;
Die Verbindungsdaten befinden sich im Verzeichnis &amp;lt;tt&amp;gt;/etc/NetworkManager/system-connections&amp;lt;/tt&amp;gt;  &lt;br /&gt;
* Wake On LAN für die aktuelle Verbindung konfigurieren&lt;br /&gt;
 nmcli connection modify &amp;quot;LAN Kabel&amp;quot; ethernet.wake-on-lan magic&lt;br /&gt;
* Cronjob einrichten&lt;br /&gt;
 @reboot /usr/sbin/ethtool -s eth0 wol g&lt;br /&gt;
&lt;br /&gt;
=== Client installieren ===&lt;br /&gt;
&lt;br /&gt;
 rpm -i  /daten/download/Linux/wol-0.7.1-33.x86_64.rpm&lt;br /&gt;
 # oder&lt;br /&gt;
 zypper in wol&lt;br /&gt;
&lt;br /&gt;
=== Computer aufwecken ===&lt;br /&gt;
&lt;br /&gt;
 # Beispiel &lt;br /&gt;
 wol 00:02:C3:8F:67:C5&lt;br /&gt;
 &lt;br /&gt;
 # Debian&lt;br /&gt;
 etherwake 00:11:2F:37:E2:4A&lt;br /&gt;
* Wake On LAN über das Internet&lt;br /&gt;
 # Beispiel:&lt;br /&gt;
 wol -i irgendwas.dyndns.org -v 00:11:2F:37:E2:4A&lt;br /&gt;
* LAN oder WLAN&lt;br /&gt;
Sind am Client mehrere Netzwerkkarten aktiv, dann muss die Broadcast Adresse angegeben werden.&lt;br /&gt;
 # Suse&lt;br /&gt;
 wol i- 10.0.0.255 00:11:2F:37:E2:4A&lt;br /&gt;
&lt;br /&gt;
=== Weitere Informationen ===&lt;br /&gt;
Siehe auch: [http://ifatwww.et.uni-magdeburg.de/wol/ http://ifatwww.et.uni-magdeburg.de/wol/]&lt;br /&gt;
&lt;br /&gt;
[http://www.linupedia.org/o= Wake on LAN im BIOS einstellen =&lt;br /&gt;
&lt;br /&gt;
== Network Storage Link [[NSLU2]] ==&lt;br /&gt;
== Router PRGAV4202N ==&lt;br /&gt;
* IP Adresse ändern&lt;br /&gt;
Zuerst DHCP deaktivieren, dann&lt;br /&gt;
 Netzwerkverbindungen / LAN Bridge&lt;br /&gt;
dann DHCP wieder aktivieren und den Bereich für die Adressen neu definieren.&lt;br /&gt;
&lt;br /&gt;
== WLAN ==&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
* Netzwerkverbindung des Routers geht verloren&lt;br /&gt;
Beim GIGASET SE361 einen Zeitserver eintragen, z.B.:&lt;br /&gt;
 ntps1.gwdg.de&lt;br /&gt;
 3.opensuse.pool.ntp.org&lt;br /&gt;
* Die DNS Auflösung funktioniert nicht mehr mit WLAN oder Mobilem Internet&lt;br /&gt;
Das Problem tritt auf nach manuellen Änderungen an der Datei &#039;&#039;&#039;/etc/resolv.conf&#039;&#039;&#039;. Dadurch wird anscheinend die automatische DNS Konfiguration ausgeschaltet. Durch Löschen folgender Dateien ist das Problem zu beheben:&lt;br /&gt;
 rm /etc/resolv.conf&lt;br /&gt;
 rm /var/adm/netconfig/md5/etc/resolv.conf&lt;br /&gt;
 reboot&lt;br /&gt;
Danach wird bei einem Netzwerkwechsel die Datei &#039;&#039;&#039;/etc/resolv.conf&#039;&#039;&#039; wieder automatisch vom System aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
* Kommandozeilenbefehle&lt;br /&gt;
 ifconfig wlan0 up&lt;br /&gt;
 iwlist wlan0 scan&lt;br /&gt;
 iwconfig wlan0 essid NETWORK_ID key WIRELESS_KEY&lt;br /&gt;
 # ASCII Key:&lt;br /&gt;
 iwconfig wlan0 essid NETWORK_ID key s:WIRELESS_KEY&lt;br /&gt;
 dhclient wlan0&lt;br /&gt;
Achtung: &#039;&#039;&#039;iwconfig&#039;&#039;&#039; funktioniert anscheinend nur für unverschlüsseltes WLAN oder für WEP.&lt;br /&gt;
&lt;br /&gt;
=== WLAN Adapter und Linux ===&lt;br /&gt;
Für manche WLAN Adapter gibt es keine Linux Treiber, z.B. den Adapter &#039;&#039;&#039;Netgear WG311 v3&#039;&#039;&#039;&lt;br /&gt;
: Suse 13.1 erkennt den Adapter als&lt;br /&gt;
 88w8335 [Libertas] 802.11 b/g Wireless&lt;br /&gt;
Das Programm &#039;&#039;&#039;ndiswrapper&#039;&#039;&#039; ermöglicht die Verwendung von Windows Treibern unter Linux.&lt;br /&gt;
* Pakete installieren&lt;br /&gt;
 ndiswrapper&lt;br /&gt;
 nw&lt;br /&gt;
* Treiber installieren&lt;br /&gt;
Windows Treiber von CD etc. über ndiswrapper installieren&lt;br /&gt;
 nsiswrapper -i WG311v3.INF&lt;br /&gt;
* Konfiguration&lt;br /&gt;
In &#039;&#039;&#039;YAST / System / Netzwerkgeräte / Hardware&#039;&#039;&#039; das Modul &#039;&#039;&#039;ndiswrapper&#039;&#039;&#039; eintragen&lt;br /&gt;
* Network Manager&lt;br /&gt;
Auch bei einem Stand PC kann es sinnvoll sein, die Netzwerkverwaltung mit dem &#039;&#039;&#039;NetworkManager&#039;&#039;&#039; zu konfigurieren, da der PC dann schneller bootet.&lt;br /&gt;
:&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Netzwerk&amp;diff=1824</id>
		<title>Netzwerk</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Netzwerk&amp;diff=1824"/>
		<updated>2026-07-17T11:18:11Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* nmap */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Netzwerk Kommandos ==&lt;br /&gt;
=== IP Adressen anzeigen ===&lt;br /&gt;
 ip addr show&lt;br /&gt;
=== IP Adresse zuweisen ===&lt;br /&gt;
 ifconfig eth0 10.80.12.100 netmask 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
 ip addr add 192.168.100.20/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
=== route ===&lt;br /&gt;
Eine Route hinzufügen für das Gateway ins Internet&lt;br /&gt;
 route add default gw 10.0.0.138&lt;br /&gt;
&lt;br /&gt;
=== mail ===&lt;br /&gt;
* Mail Kommandos&lt;br /&gt;
Nach dem Start des Programms &#039;&#039;&#039;mail&#039;&#039;&#039; kann man verschiedene Kommandos eingeben. Durch Eingabe von &#039;&#039;&#039;?&#039;&#039;&#039; erhält man eine Liste der Befehle.&lt;br /&gt;
 mail&lt;br /&gt;
 ?&lt;br /&gt;
* Alle Mails löschen&lt;br /&gt;
 mail&lt;br /&gt;
 d *&lt;br /&gt;
* Mail senden&lt;br /&gt;
 mail -s &amp;quot;Betreff&amp;quot; empfaenger@example.com&lt;br /&gt;
Nach Drücken von &amp;lt;tt&amp;gt;Enter&amp;lt;/tt&amp;gt; kann man einen Text eingeben. Eingabe abschließen mit &amp;lt;tt&amp;gt;STRG + D&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Mail senden an root&lt;br /&gt;
Man kann auch den Text vorher in einer Variablen speichern.&lt;br /&gt;
 msg=&amp;quot;Helle world&amp;quot;&lt;br /&gt;
 echo $msg | mail -s Testmail root&lt;br /&gt;
&lt;br /&gt;
=== nmap ===&lt;br /&gt;
* Portscan durchführen:&lt;br /&gt;
 # Portscan am eigenen PC&lt;br /&gt;
 nmap localhost&lt;br /&gt;
 # Portscan auf anderem Rechner&lt;br /&gt;
 nmap 10.80.12.5&lt;br /&gt;
* Rechner im Netzwerk scannen&lt;br /&gt;
 nmap -sn 10.80.12.0/24&lt;br /&gt;
Ausgabe:&lt;br /&gt;
 Host 10.80.12.92 appears to be up.&lt;br /&gt;
 MAC Address: 00:80:87:0B:D6:21 (OKI Electric Industry CO.)&lt;br /&gt;
 Host 10.80.12.93 appears to be up.&lt;br /&gt;
 MAC Address: 00:80:77:48:45:F4 (Brother Industries)&lt;br /&gt;
 Host 10.80.12.94 appears to be up.&lt;br /&gt;
 MAC Address: 00:04:00:EB:6C:28 (Lexmark International)&lt;br /&gt;
 Host 10.80.12.95 appears to be up.&lt;br /&gt;
 MAC Address: 00:C0:02:31:68:33 (Sercomm)&lt;br /&gt;
* Nur den Namen der eingeschalteten Geräte im LAN anzeigen&lt;br /&gt;
 nmap -sP -R --system-dns 192.168.1.0/24 | grep -v down | grep Nmap\ scan\ report | cut -d &amp;quot; &amp;quot; -f 5&lt;br /&gt;
&lt;br /&gt;
=== wget ===&lt;br /&gt;
Rekursiver Download von einem FTP Server&lt;br /&gt;
 # Download nach ./joomla.eduhi.at/images:&lt;br /&gt;
 wget -r --user=joomla_408012 --password=password ftp://joomla.eduhi.at/images/*&lt;br /&gt;
&lt;br /&gt;
 # Download in das aktuelle Verzeichnis:&lt;br /&gt;
 wget -r --user=joomla_408012 --password=password --no-host-directories --cut-dirs=1 ftp://joomla.eduhi.at/images/*&lt;br /&gt;
&lt;br /&gt;
== Network Manager ==&lt;br /&gt;
=== Netwzerkverbindungen ===&lt;br /&gt;
 cd /etc/NetworkManager/system-connections/&lt;br /&gt;
Hier befindet sich für jede gespeicherte Verbindung eine Datei.&lt;br /&gt;
&lt;br /&gt;
Man kann diese direkt bearbeiten oder mit dem Kommando &amp;lt;tt&amp;gt;nmcli con mod&amp;lt;/tt&amp;gt; ändern.&lt;br /&gt;
 # Beispiel:&lt;br /&gt;
 nmcli con mod eth1 ipv4.addresses 192.168.0.49/24&lt;br /&gt;
Die Netzwerkverbindungen können auch mit folgendem Programm verwaltet werden&lt;br /&gt;
 nmtui&lt;br /&gt;
[https://www.tecmint.com/nmcli-configure-network-connection/ Weitere Informationen]&lt;br /&gt;
&lt;br /&gt;
== Wake on LAN ==&lt;br /&gt;
=== Im BIOS einstellen ===&lt;br /&gt;
&lt;br /&gt;
* Power Management Einstellungen:&lt;br /&gt;
Die Konfiguration ist je nach BIOS verschieden&lt;br /&gt;
Beispiel für ASUS P5Q Motherboard, AMI BIOS&lt;br /&gt;
# ACPI 2.0 Support einschalten&lt;br /&gt;
# APM Configuration&lt;br /&gt;
 Power On By PCI Devices&lt;br /&gt;
&lt;br /&gt;
=== Aktivieren von WOL durch das Betriebssystem ===&lt;br /&gt;
Wenn Wake on LAN nach Aktivierung im BIOS nicht funktioniert, dann muss unter Linux die Netzwerkkarte für Wake on LAN konfiguriert werden&lt;br /&gt;
 ethtool -s eth0 wol g&lt;br /&gt;
Die Einstellung geht aber beim Shutdown verloren. Um das zu Verhindern kann man &amp;lt;code&amp;gt;ethtool&amp;lt;/code&amp;gt; in einem cronjob beim Booten aufrufen&lt;br /&gt;
 @reboot /usr/sbin/ethtool -s eth0 wol g&lt;br /&gt;
oder unter Suse die Einstellungen mit YAST konfigurieren&lt;br /&gt;
 # YAST/Netzwerkgeräte/Netzwerkeinstellungen/Bearbeiten/Hardware/Ethtool Optionen&lt;br /&gt;
 -s eth0 wol g&lt;br /&gt;
Die Konfiguration mit YAST funktioniert nicht mit dem Network Manager&lt;br /&gt;
* Anzeige der aktuellen Einstellungen für die Netzwerkkarte eth0:&lt;br /&gt;
 ethtool eth0&lt;br /&gt;
* Hinweis&lt;br /&gt;
Nach Änderungen an den APM Einstellungen im BIOS das System starten und wieder herunterfahren. Erst dann ist die Netzwerkkarte über das Betriebssystem für WOL konfiguriert.&lt;br /&gt;
=== Network Manager konfigurieren für Wake On LAN ===&lt;br /&gt;
* Informationen über die aktuelle Netzwerkverbindung abrufen&lt;br /&gt;
 nmcli connection&lt;br /&gt;
&lt;br /&gt;
 # Ausgabe Beispiel:&lt;br /&gt;
 NAME       UUID                                  TYPE      DEVICE &lt;br /&gt;
 LAN Kabel  e0aacc25-a365-37fe-89be-47f8a60c77f6  ethernet  eth0&lt;br /&gt;
Die Verbindungsdaten befinden sich im Verzeichnis &amp;lt;tt&amp;gt;/etc/NetworkManager/system-connections&amp;lt;/tt&amp;gt;  &lt;br /&gt;
* Wake On LAN für die aktuelle Verbindung konfigurieren&lt;br /&gt;
 nmcli connection modify &amp;quot;LAN Kabel&amp;quot; ethernet.wake-on-lan magic&lt;br /&gt;
* Cronjob einrichten&lt;br /&gt;
 @reboot /usr/sbin/ethtool -s eth0 wol g&lt;br /&gt;
&lt;br /&gt;
=== Client installieren ===&lt;br /&gt;
&lt;br /&gt;
 rpm -i  /daten/download/Linux/wol-0.7.1-33.x86_64.rpm&lt;br /&gt;
 # oder&lt;br /&gt;
 zypper in wol&lt;br /&gt;
&lt;br /&gt;
=== Computer aufwecken ===&lt;br /&gt;
&lt;br /&gt;
 # Beispiel &lt;br /&gt;
 wol 00:02:C3:8F:67:C5&lt;br /&gt;
 &lt;br /&gt;
 # Debian&lt;br /&gt;
 etherwake 00:11:2F:37:E2:4A&lt;br /&gt;
* Wake On LAN über das Internet&lt;br /&gt;
 # Beispiel:&lt;br /&gt;
 wol -i irgendwas.dyndns.org -v 00:11:2F:37:E2:4A&lt;br /&gt;
* LAN oder WLAN&lt;br /&gt;
Sind am Client mehrere Netzwerkkarten aktiv, dann muss die Broadcast Adresse angegeben werden.&lt;br /&gt;
 # Suse&lt;br /&gt;
 wol i- 10.0.0.255 00:11:2F:37:E2:4A&lt;br /&gt;
&lt;br /&gt;
=== Weitere Informationen ===&lt;br /&gt;
Siehe auch: [http://ifatwww.et.uni-magdeburg.de/wol/ http://ifatwww.et.uni-magdeburg.de/wol/]&lt;br /&gt;
&lt;br /&gt;
[http://www.linupedia.org/o= Wake on LAN im BIOS einstellen =&lt;br /&gt;
&lt;br /&gt;
== Network Storage Link [[NSLU2]] ==&lt;br /&gt;
== Router PRGAV4202N ==&lt;br /&gt;
* IP Adresse ändern&lt;br /&gt;
Zuerst DHCP deaktivieren, dann&lt;br /&gt;
 Netzwerkverbindungen / LAN Bridge&lt;br /&gt;
dann DHCP wieder aktivieren und den Bereich für die Adressen neu definieren.&lt;br /&gt;
&lt;br /&gt;
== WLAN ==&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
* Netzwerkverbindung des Routers geht verloren&lt;br /&gt;
Beim GIGASET SE361 einen Zeitserver eintragen, z.B.:&lt;br /&gt;
 ntps1.gwdg.de&lt;br /&gt;
 3.opensuse.pool.ntp.org&lt;br /&gt;
* Die DNS Auflösung funktioniert nicht mehr mit WLAN oder Mobilem Internet&lt;br /&gt;
Das Problem tritt auf nach manuellen Änderungen an der Datei &#039;&#039;&#039;/etc/resolv.conf&#039;&#039;&#039;. Dadurch wird anscheinend die automatische DNS Konfiguration ausgeschaltet. Durch Löschen folgender Dateien ist das Problem zu beheben:&lt;br /&gt;
 rm /etc/resolv.conf&lt;br /&gt;
 rm /var/adm/netconfig/md5/etc/resolv.conf&lt;br /&gt;
 reboot&lt;br /&gt;
Danach wird bei einem Netzwerkwechsel die Datei &#039;&#039;&#039;/etc/resolv.conf&#039;&#039;&#039; wieder automatisch vom System aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
* Kommandozeilenbefehle&lt;br /&gt;
 ifconfig wlan0 up&lt;br /&gt;
 iwlist wlan0 scan&lt;br /&gt;
 iwconfig wlan0 essid NETWORK_ID key WIRELESS_KEY&lt;br /&gt;
 # ASCII Key:&lt;br /&gt;
 iwconfig wlan0 essid NETWORK_ID key s:WIRELESS_KEY&lt;br /&gt;
 dhclient wlan0&lt;br /&gt;
Achtung: &#039;&#039;&#039;iwconfig&#039;&#039;&#039; funktioniert anscheinend nur für unverschlüsseltes WLAN oder für WEP.&lt;br /&gt;
&lt;br /&gt;
=== WLAN Adapter und Linux ===&lt;br /&gt;
Für manche WLAN Adapter gibt es keine Linux Treiber, z.B. den Adapter &#039;&#039;&#039;Netgear WG311 v3&#039;&#039;&#039;&lt;br /&gt;
: Suse 13.1 erkennt den Adapter als&lt;br /&gt;
 88w8335 [Libertas] 802.11 b/g Wireless&lt;br /&gt;
Das Programm &#039;&#039;&#039;ndiswrapper&#039;&#039;&#039; ermöglicht die Verwendung von Windows Treibern unter Linux.&lt;br /&gt;
* Pakete installieren&lt;br /&gt;
 ndiswrapper&lt;br /&gt;
 nw&lt;br /&gt;
* Treiber installieren&lt;br /&gt;
Windows Treiber von CD etc. über ndiswrapper installieren&lt;br /&gt;
 nsiswrapper -i WG311v3.INF&lt;br /&gt;
* Konfiguration&lt;br /&gt;
In &#039;&#039;&#039;YAST / System / Netzwerkgeräte / Hardware&#039;&#039;&#039; das Modul &#039;&#039;&#039;ndiswrapper&#039;&#039;&#039; eintragen&lt;br /&gt;
* Network Manager&lt;br /&gt;
Auch bei einem Stand PC kann es sinnvoll sein, die Netzwerkverwaltung mit dem &#039;&#039;&#039;NetworkManager&#039;&#039;&#039; zu konfigurieren, da der PC dann schneller bootet.&lt;br /&gt;
:&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=CSS&amp;diff=1823</id>
		<title>CSS</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=CSS&amp;diff=1823"/>
		<updated>2026-04-19T14:52:18Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Flex Elemente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== box-sizing ==&lt;br /&gt;
 box-sizing: border-box;&lt;br /&gt;
Die Werte von &amp;lt;tt&amp;gt;border&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;padding&amp;lt;/tt&amp;gt; werden nicht addiert zu &amp;lt;tt&amp;gt;height&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;width&amp;lt;/tt&amp;gt; eines Elements&lt;br /&gt;
: Diese Einstellung ist besonders wichtig bei &amp;lt;tt&amp;gt;input&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;textarea&amp;lt;/tt&amp;gt; in Formularen&lt;br /&gt;
&lt;br /&gt;
== Collapsing margins ==&lt;br /&gt;
Wenn untere und obere Abstände von Blöcken unmittelbar aufeinander folgen, werden sie zu &#039;&#039;&#039;einem&#039;&#039;&#039; Abstand verschmolzen.&lt;br /&gt;
Dieses Verhalten kann verhindert werden:&lt;br /&gt;
* Einen eventuell unsichtbaren Rahmens um einen Bereich setzen ...&lt;br /&gt;
 &amp;lt;pre&amp;gt;&amp;lt;div style=&amp;quot;background: #FFFFCC; border: solid #FFF 1px;&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ... oder durch Verwenden von &#039;&#039;&#039;padding&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;pre&amp;gt;&amp;lt;div style=&amp;quot;background: #FFFFCC; padding: 1px;&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Durch diese Workarounds wird der obere Rand von nachfolgenden Elementen nicht verschluckt.&lt;br /&gt;
Man könnte für alle &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt; Elemente einen solchen Rahmen formatieren, dann wäre das Problem möglicherweise generell behoben.&lt;br /&gt;
 .div { border: solid #FFF 1px; }&lt;br /&gt;
&lt;br /&gt;
== display: flex ==&lt;br /&gt;
=== Flex Container ===&lt;br /&gt;
Ein Element wird zum Flex-Container durch folgende CSS Definition&lt;br /&gt;
 /* Beispiel */&lt;br /&gt;
 div { display:flex }&lt;br /&gt;
Es gibt einige Eigenschaften für Ausrichtung und Anordnung der Elemente im Flex Container&lt;br /&gt;
: Siehe https://www.w3schools.com/css/css3_flexbox_container.asp&lt;br /&gt;
=== Flex Elemente ===&lt;br /&gt;
Für jedes Element des Containers können einige Eigenschaften definiert werden&lt;br /&gt;
: Die wichtigsten Eigenschaften sind&lt;br /&gt;
 div input { flex-grow: 0 } /* Keine Vergrößerung dieses Elements&lt;br /&gt;
 div input { flex-shrink: 0 } /* Keine Verkleinerung dieses Elements&lt;br /&gt;
 div input { flex-basis: 100px; } /* initiale Größe dieses Elements&lt;br /&gt;
Kurzschreibweise dieser drei Eigenschaften&lt;br /&gt;
 div input { flex: 0 0 100px }&lt;br /&gt;
: Weitere Eigenschaften siehe https://www.w3schools.com/css/css3_flexbox_items.asp&lt;br /&gt;
=== textarea ===&lt;br /&gt;
Das Attribut &amp;lt;tt&amp;gt;rows&amp;lt;/tt&amp;gt; macht Probleme - jedenfalls in Firefox. Am besten darauf verzichten oder die Höhe des Elements per JS Eventhandler ändern.&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=GRUB&amp;diff=1822</id>
		<title>GRUB</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=GRUB&amp;diff=1822"/>
		<updated>2026-03-31T19:48:05Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Grub 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
GRUB = Grand Unified Bootloader&lt;br /&gt;
&lt;br /&gt;
== Grub2 Konfiguration ==&lt;br /&gt;
Details: Siehe Suse Dokumentation: http://doc.opensuse.org/documentation/html/openSUSE/opensuse-reference/grub2.html&lt;br /&gt;
&lt;br /&gt;
* Konfiguration&lt;br /&gt;
 /etc/default/grub&lt;br /&gt;
* Grafikauflösung des Startbildschirms ändern&lt;br /&gt;
 # /etc/default/grub&lt;br /&gt;
 GRUB_GFXMODE=1280x1024&lt;br /&gt;
* Grafik deaktivieren&lt;br /&gt;
 GRUB_TERMINAL=console&lt;br /&gt;
* Benutzerdefinierter Eintrag - Puppy Linux&lt;br /&gt;
Folgende Datei bearbeiten:&lt;br /&gt;
 /etc/grub.d/40_custom&lt;br /&gt;
An das Ende der Datei z.B. folgende Einträge hinzufügen&lt;br /&gt;
 menuentry &amp;quot;Puppy Linux (frugal on sda3)&amp;quot; {&lt;br /&gt;
 set root=(hd1,3)&lt;br /&gt;
 &lt;br /&gt;
 linux /puppy/vmlinuz pmedia=atahd psubdir=puppy&lt;br /&gt;
 initrd /puppy/initrd.gz&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039;&lt;br /&gt;
Änderung der Partitionsbezeichnungen in grub2 gegenüber grub legacy: &lt;br /&gt;
: Die Zählung der Festplatten beginnt bei 0&lt;br /&gt;
: Die Zählung der Partitionen beginnt bei 1&lt;br /&gt;
Festplatte &#039;&#039;&#039;/dev/sda6&#039;&#039;&#039; entspricht also &#039;&#039;&#039;(hd0,6)&#039;&#039;&#039;.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
Änderungen an den grub2-Skripten oder an &amp;lt;code&amp;gt;/etc/default/grub&amp;lt;/code&amp;gt; werden erst wirksam nach dem Aufruf des folgenden Kommandos:&lt;br /&gt;
 grub2-mkconfig -o /boot/grub2/grub.cfg&lt;br /&gt;
== Grub Konsole ==&lt;br /&gt;
Falls der Bootmanager nicht startet, landet man in einer Shell mit dem Prompt&lt;br /&gt;
 grub&amp;gt;&lt;br /&gt;
Partitionen anzeigen&lt;br /&gt;
 ls&lt;br /&gt;
Variable &amp;lt;tt&amp;gt;prefix&amp;lt;/tt&amp;gt; setzen auf das Verzeichnis &amp;lt;tt&amp;gt;/boot/grub&amp;lt;/tt&amp;gt;&lt;br /&gt;
Variable &amp;lt;tt&amp;gt;root&amp;lt;/tt&amp;gt; setzen auf die Partition, die das Betriebssystem enthält&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 set prefix=(hd0,gpt1)/boot/grub2&lt;br /&gt;
 set root=(hd0,gpt1)&lt;br /&gt;
Nun kann man die Befehle zum Laden des kernels und der Ramdisk eingeben&lt;br /&gt;
 linux /boot/vmlinuz-6.4.0-150600.23.73-default root=/dev/vda1&lt;br /&gt;
 initrd /boot/initrd-6.4.0-150600.23.73-default&lt;br /&gt;
Man kann auch bestehende Symlinks verwenden&lt;br /&gt;
 linux /boot/vmlinuz &lt;br /&gt;
 initrd /boot/initrd&lt;br /&gt;
Jetzt kann man das System booten&lt;br /&gt;
 boot&lt;br /&gt;
&lt;br /&gt;
== Bootmanager reparieren ==&lt;br /&gt;
Mit einer Live CD starten (Knoppic, SUSE Rescue System von DVD, ...).&lt;br /&gt;
=== Schritt für Schritt ===&lt;br /&gt;
* Partition mounten&lt;br /&gt;
 # Beispiel:&lt;br /&gt;
 mount /dev/sda2 /mnt/&lt;br /&gt;
* Einige Verzeichnisse des laufenden Systems in das gemountete einbinden&lt;br /&gt;
 mount --bind /dev /mnt/dev/&lt;br /&gt;
 mount --bind /proc /mnt/proc/&lt;br /&gt;
 mount --bind /sys /mnt/sys/&lt;br /&gt;
oder&lt;br /&gt;
 for d in dev proc sys ; do mount --bind /$d /mnt/$d ; done&lt;br /&gt;
* In das gemountete System wechseln&lt;br /&gt;
 cd /mnt/&lt;br /&gt;
 chroot /mnt/&lt;br /&gt;
&lt;br /&gt;
=== Befehlsfolge ===&lt;br /&gt;
 partition=sda1&lt;br /&gt;
 read -e -i &amp;quot;$partition&amp;quot; -p &amp;quot;Name der Partition: &amp;quot; partition&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /media/$partition&lt;br /&gt;
 mount /dev/$partition /media/$partition&lt;br /&gt;
 for d in dev proc sys ; do mount --bind /$d /media/$partition/$d ; done&lt;br /&gt;
 cd /media/$partition&lt;br /&gt;
&lt;br /&gt;
 chroot /media/$partition&lt;br /&gt;
&lt;br /&gt;
=== GRUB legacy ===&lt;br /&gt;
Grub Konsole starten&lt;br /&gt;
 grub&lt;br /&gt;
Die Partition angeben, wo sich /boot befindet.&lt;br /&gt;
 grub&amp;gt; root (hd0,2)&lt;br /&gt;
Bootloader installieren&lt;br /&gt;
 grub&amp;gt; setup (hd0)&lt;br /&gt;
 grub&amp;gt; quit&lt;br /&gt;
&lt;br /&gt;
=== Grub 2 ==&lt;br /&gt;
==== Suse Linux ====&lt;br /&gt;
=== UEFI Bootloader ===&lt;br /&gt;
Unified Extensible Firmware Interface&lt;br /&gt;
 zypper install grub2 grub2-efi&lt;br /&gt;
* Installation&lt;br /&gt;
 grub2-install \&lt;br /&gt;
  --target=x86_64-efi \&lt;br /&gt;
  --efi-directory=/boot/efi \&lt;br /&gt;
  --bootloader-id=&amp;quot;opensuse&amp;quot; \&lt;br /&gt;
  --removable&lt;br /&gt;
Falls der Bootloader auf einem USB Stick installiert werden soll, erzeugt die Option &lt;br /&gt;
&amp;lt;tt&amp;gt;--removeable&amp;lt;/tt&amp;gt; einen universellen Fallback&lt;br /&gt;
 /boot/efi/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
=== BIOS Bootloader ===&lt;br /&gt;
Ältere Systeme haben noch kein UEFI&lt;br /&gt;
 grub2-install /dev/sdd&lt;br /&gt;
=== GRUB Konifiguration erzeugen ===&lt;br /&gt;
 grub2-mkconfig -o /boot/grub2/grub.cfg&lt;br /&gt;
==== Ubuntu ====&lt;br /&gt;
 sudo grub-mkconfig &lt;br /&gt;
 sudo update-grub&lt;br /&gt;
 sudo grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
== Kernel-Parameter ==&lt;br /&gt;
Durch Drücklen der Taste &amp;quot;e&amp;quot; im Boot-Menü kann man an die Zeile, die mit &amp;lt;tt&amp;gt;linux&amp;lt;/tt&amp;gt; beginnt, Parameter anhängen.&lt;br /&gt;
* Auflösung ändern&lt;br /&gt;
 video=1920x1080&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
=== Erzeugen der Konfiguration dauert sehr lang ===&lt;br /&gt;
Lösung: Folgende Zeile in der angegebenen Datei löschen&lt;br /&gt;
 # /boot/grub2/device.map&lt;br /&gt;
 &amp;lt;s&amp;gt;(fd0) /dev/fd0&amp;lt;/s&amp;gt;&lt;br /&gt;
=== Operating system not found ===&lt;br /&gt;
Nach einem Festplattenwechsel kann es vorkommen, dass diese Meldung erscheint. Dann eventuell folgender Datei ändern:&lt;br /&gt;
 /etc/default/grub_installdevice&lt;br /&gt;
Pfad zur Festplatte eintragen&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 /dev/disk/by-id/scsi-SATA_Samsung_SSD_840S14CNEACC11055Z-part1&lt;br /&gt;
Wenn dieser Pfad falsch gesetzt ist, führt der Versuch, den Bootloader mit YAST zu konfigurieren zu einer Fehlermeldung:&lt;br /&gt;
 Unknown udev device ...&lt;br /&gt;
Den Pfad zur richtigen Festplatte ermitteln mit&lt;br /&gt;
 blkid&lt;br /&gt;
=== Plymouth Bootscreen ===&lt;br /&gt;
Initramdisk neu erstellen, falls der Splash Screen nicht wie erwartet angezeigt wird.&lt;br /&gt;
 mkinitrd&lt;br /&gt;
==== nVidia Driver zeigt keinen Bootscreen an ====&lt;br /&gt;
Bei Verwendung des proprietären &amp;lt;tt&amp;gt;nVidia&amp;lt;/tt&amp;gt; Kernel Moduls wird bei &amp;lt;tt&amp;gt;openSuse Leap&amp;lt;/tt&amp;gt; der Bootscreen nicht automatisch angezeigt..&lt;br /&gt;
: Folgende Maßnahmen bewirken, dass der &amp;lt;tt&amp;gt;openSuse&amp;lt;/tt&amp;gt; Leap Bootscreen erscheint:&lt;br /&gt;
 # /etc/modprobe.d/nvidia.conf&lt;br /&gt;
 options nvidia_drm modeset=1&lt;br /&gt;
&lt;br /&gt;
 # /etc/dracut.conf.d/60-nvidia-default.conf&lt;br /&gt;
 add_drivers+=&amp;quot;nvidia nvidia_modeset nvidia_uvm nvidia_drm&amp;quot;&lt;br /&gt;
 install_items+=&amp;quot;/etc/modprobe.d/nvidia.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 dracut -f&lt;br /&gt;
Info: https://blog.sukimashita.com/2016/05/02/graphical-boot-plymouth-opensuse-nvidia-driver/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Möglicherweise beeinträchtigen diese Maßnahmen die Performance des Computers.&amp;lt;/span&amp;gt; -- ???&lt;br /&gt;
&lt;br /&gt;
===== Script =====&lt;br /&gt;
 # /usr/local/bin/plymouth.sh&lt;br /&gt;
 cd /etc/dracut.conf.d&lt;br /&gt;
 cp -f 60-nvidia-default.conf.plymouth 60-nvidia-default.conf&lt;br /&gt;
 dracut -f&lt;br /&gt;
Das Script muss als &amp;lt;tt&amp;gt;root&amp;lt;/tt&amp;gt; ausgeführt werden.&lt;br /&gt;
 sudo /usr/local/bin/plymouth.sh&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Partitionen_und_Dateisysteme&amp;diff=1821</id>
		<title>Partitionen und Dateisysteme</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Partitionen_und_Dateisysteme&amp;diff=1821"/>
		<updated>2026-03-06T21:26:08Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* BTRFS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dateisystem Größe ändern ==&lt;br /&gt;
Das Ändern der Partitionsgröße mit &amp;lt;code&amp;gt;fdisk&amp;lt;/code&amp;gt; löscht keine Daten. &lt;br /&gt;
: Nach dem Ändern der Partitionsgröße muss jedoch das Dateisystem an die neue Größe angepasst werden.&lt;br /&gt;
&lt;br /&gt;
=== ext4 ===&lt;br /&gt;
 e2fsck -f /dev/sda3&lt;br /&gt;
 resize2fs /dev/sda3&lt;br /&gt;
=== ext3 ===&lt;br /&gt;
* Journal löschen&lt;br /&gt;
 tune2fs -O ^has_journal /dev/sda1&lt;br /&gt;
Damit wird aus dem ext3 ein ext2 Filesystem.&lt;br /&gt;
* Filesystemcheck durchführen&lt;br /&gt;
 e2fsck -f /dev/sda1&lt;br /&gt;
* Größe des Filesystems ändern&lt;br /&gt;
Vergrößern auf Partitionsgröße&lt;br /&gt;
 resize2fs /dev/sda1&lt;br /&gt;
Vergrößern oder verkleinern auf bestimmte Größe - resize&lt;br /&gt;
 resize2fs /dev/sda1 6000M&lt;br /&gt;
* Neues Journal erzeugen&lt;br /&gt;
 tune2fs -j /dev/sda1&lt;br /&gt;
Jetzt haben wir wieder ein ext3 Filesystem mit der neuen Größe.&lt;br /&gt;
=== BTRFS ===&lt;br /&gt;
Zuerst dfas Dateisystem mounten&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 mount /dev/nvme0n1p5 /mnt&lt;br /&gt;
Jetzt das gemountete Dateisystem verkleinern, hier um 1 GB kleiner.&lt;br /&gt;
Anschließend das Dateisystem unmounten.&lt;br /&gt;
 btrfs filesystem resize -1G /mnt&lt;br /&gt;
 umount /mnt&lt;br /&gt;
Jetzt erst die Partition mit fdisk verkleinern&lt;br /&gt;
 fdisk /dev/nvme0n1&lt;br /&gt;
Befehle in &amp;lt;tt&amp;gt;fdisk&amp;lt;/tt&amp;gt; für die entsprechende Partition:&lt;br /&gt;
  p → Layout ansehen&lt;br /&gt;
  d → Partition 5 löschen&lt;br /&gt;
  n → neue Partition 5 erstellen&lt;br /&gt;
  gleichen Startsektor verwenden&lt;br /&gt;
  Endsektor kleiner wählen (z.B. -1G)&lt;br /&gt;
  w → schreiben&lt;br /&gt;
&lt;br /&gt;
== Dateisystem konvertieren ==&lt;br /&gt;
=== ext2 nach ext4 ===&lt;br /&gt;
 tune2fs -O extents,uninit_bg,dir_index,has_journal /dev/sda1&lt;br /&gt;
=== ext2 nach ext3 ===&lt;br /&gt;
 tune2fs -O extents,uninit_bg,dir_index /dev/sda1&lt;br /&gt;
=== btrfs nach ext4 ===&lt;br /&gt;
Mittels Live System und &#039;&#039;&#039;rsync&#039;&#039;&#039; alle Daten auf andere Platte kopieren.&lt;br /&gt;
Auf der btrfs Partition ein ext4 Dateisystem erzeugen, also die Partition neu formatieren.&lt;br /&gt;
Daten mit &#039;&#039;&#039;rsync&#039;&#039;&#039; zurückkopieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/etc/fstab&#039;&#039;&#039; und &#039;&#039;&#039;/etc/default/grub_installdevice&#039;&#039;&#039; ändern.&lt;br /&gt;
Bootmanager neu installieren.&lt;br /&gt;
&lt;br /&gt;
Achtung:&lt;br /&gt;
&lt;br /&gt;
Das System bootet nicht, wenn in &amp;lt;code&amp;gt;/etc/fstab &amp;lt;/code&amp;gt;der automatische Filesystemcheck deaktiviert ist:&lt;br /&gt;
System bootet nicht nach Änderung des Filesystems:&lt;br /&gt;
 # /etc/fstab&lt;br /&gt;
 /dev/sdb1 / ext4 defaults 0 0&lt;br /&gt;
&lt;br /&gt;
Geänderter Eintrag - System bootet, da Filesystemcheck angestoßen wird.&lt;br /&gt;
 # /etc/fstab&lt;br /&gt;
 /dev/sdb1 / ext4 defaults 0 1&lt;br /&gt;
== Defekte Blocke im Dateisystem ==&lt;br /&gt;
 badblocks -v /dev/sde1 &amp;gt; bad-blocks&lt;br /&gt;
 fsck -t ext4 -l ./bad-blocks /dev/sde1&lt;br /&gt;
== Superblock reparieren ==&lt;br /&gt;
* Superblock Kopien anzeigen&lt;br /&gt;
Folgender Befehl zeigt die Blöcke an, in denen die Kopien des Superblocks gespeichert sind&lt;br /&gt;
 mke2fs -n /dev/xxx&lt;br /&gt;
* Superblock wiederherstellen&lt;br /&gt;
Nun eine der Nummern auswählen und als Parameter für folgenden Befehl verwenden&lt;br /&gt;
 e2fsck -b block_number /dev/xxx&lt;br /&gt;
&lt;br /&gt;
== Dateisystem prüfen ==&lt;br /&gt;
 e2fsck -pf /dev/sda1&lt;br /&gt;
* Prüfung erzwingen beim Neustart&lt;br /&gt;
Eine Datei mit dem Namen &amp;lt;tt&amp;gt;forcefsck&amp;lt;/tt&amp;gt; anlegen.&lt;br /&gt;
 touch /forcefsck&lt;br /&gt;
 reboot&lt;br /&gt;
Nach dem Reboot wird diese Datei automatisch wieder gelöscht.&lt;br /&gt;
&lt;br /&gt;
== Label ==&lt;br /&gt;
=== Linux Filesysteme ===&lt;br /&gt;
 tune2fs -L &amp;quot;LinuxFS&amp;quot; /dev/sdc2&lt;br /&gt;
=== FAT / VFAT ===&lt;br /&gt;
 dosfslabel /dev/sdd1 &amp;quot;H4NPRO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== NTFS ==&lt;br /&gt;
* Partition formatieren&lt;br /&gt;
 mkfs.ntfs -Q /dev/sdc1&lt;br /&gt;
Ohne die Option &#039;&#039;&#039;-Q&#039;&#039;&#039; dauert das Formatieren sehr lang.&lt;br /&gt;
* Label&lt;br /&gt;
  ntfslabel /dev/sdc4 &amp;quot;WindowsNTFS&amp;quot;&lt;br /&gt;
=== NTFS Partition verkleinern ===&lt;br /&gt;
* Partition prüfen&lt;br /&gt;
 sudo ntfsresize --info /dev/nvme0n1p3&lt;br /&gt;
* Größe des NTFS Dateisystems festlegen&lt;br /&gt;
 sudo ntfsresize --size 100G /dev/nvme0n1p3&lt;br /&gt;
&lt;br /&gt;
== exFAT ==&lt;br /&gt;
Keine Beschränkung der Dateigröße auf 4GB&lt;br /&gt;
* Partition formatieren und Label vergeben&lt;br /&gt;
 mkfs.exfat -L &amp;quot;exFAT_150GB&amp;quot; /dev/sdd1&lt;br /&gt;
Voraussetzung: Unter Suse Linux muss das Paket &amp;lt;tt&amp;gt;exfatprogs&amp;lt;/tt&amp;gt; installiert werden.&lt;br /&gt;
&lt;br /&gt;
== VFAT ==&lt;br /&gt;
* Partition formatieren&lt;br /&gt;
Zum Beispiel einen USB Stick&lt;br /&gt;
 mkfs.vfat /dev/sdd1&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Partitionen_und_Dateisysteme&amp;diff=1820</id>
		<title>Partitionen und Dateisysteme</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Partitionen_und_Dateisysteme&amp;diff=1820"/>
		<updated>2026-03-06T21:25:30Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* BTRFS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dateisystem Größe ändern ==&lt;br /&gt;
Das Ändern der Partitionsgröße mit &amp;lt;code&amp;gt;fdisk&amp;lt;/code&amp;gt; löscht keine Daten. &lt;br /&gt;
: Nach dem Ändern der Partitionsgröße muss jedoch das Dateisystem an die neue Größe angepasst werden.&lt;br /&gt;
&lt;br /&gt;
=== ext4 ===&lt;br /&gt;
 e2fsck -f /dev/sda3&lt;br /&gt;
 resize2fs /dev/sda3&lt;br /&gt;
=== ext3 ===&lt;br /&gt;
* Journal löschen&lt;br /&gt;
 tune2fs -O ^has_journal /dev/sda1&lt;br /&gt;
Damit wird aus dem ext3 ein ext2 Filesystem.&lt;br /&gt;
* Filesystemcheck durchführen&lt;br /&gt;
 e2fsck -f /dev/sda1&lt;br /&gt;
* Größe des Filesystems ändern&lt;br /&gt;
Vergrößern auf Partitionsgröße&lt;br /&gt;
 resize2fs /dev/sda1&lt;br /&gt;
Vergrößern oder verkleinern auf bestimmte Größe - resize&lt;br /&gt;
 resize2fs /dev/sda1 6000M&lt;br /&gt;
* Neues Journal erzeugen&lt;br /&gt;
 tune2fs -j /dev/sda1&lt;br /&gt;
Jetzt haben wir wieder ein ext3 Filesystem mit der neuen Größe.&lt;br /&gt;
=== BTRFS ===&lt;br /&gt;
Zuerst dfas Dateisystem mounten&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 mount /dev/nvme0n1p5 /mnt&lt;br /&gt;
Jetzt das gemountete Dateisystem verkleinern, hier um 1 GB kleiner.&lt;br /&gt;
Anschließend das Dateisystem unmounten.&lt;br /&gt;
 btrfs filesystem resize -1G /mnt&lt;br /&gt;
 umount /mnt&lt;br /&gt;
Jetzt erst die Partition mit fdisk verkleinern&lt;br /&gt;
 fdisk /dev/nvme0n1&lt;br /&gt;
Befehle in &amp;lt;tt&amp;gt;fdisk&amp;lt;/tt&amp;gt; für die entsprechende Partition:&lt;br /&gt;
  p → Layout ansehen&lt;br /&gt;
  d → Partition 5 löschen&lt;br /&gt;
  n → neue Partition 5 erstellen&lt;br /&gt;
  gleichen Startsektor verwenden&lt;br /&gt;
  Endsektor kleiner wählen (z.B. -1G)&lt;br /&gt;
  w → schreiben&lt;br /&gt;
&lt;br /&gt;
⚠️ Der&lt;br /&gt;
* Die entsprechende Partition löschen&lt;br /&gt;
* Eine neue Partition mit dem gleichen Startsektor erstellen aber mit kleinerem Endsektor&lt;br /&gt;
&lt;br /&gt;
== Dateisystem konvertieren ==&lt;br /&gt;
=== ext2 nach ext4 ===&lt;br /&gt;
 tune2fs -O extents,uninit_bg,dir_index,has_journal /dev/sda1&lt;br /&gt;
=== ext2 nach ext3 ===&lt;br /&gt;
 tune2fs -O extents,uninit_bg,dir_index /dev/sda1&lt;br /&gt;
=== btrfs nach ext4 ===&lt;br /&gt;
Mittels Live System und &#039;&#039;&#039;rsync&#039;&#039;&#039; alle Daten auf andere Platte kopieren.&lt;br /&gt;
Auf der btrfs Partition ein ext4 Dateisystem erzeugen, also die Partition neu formatieren.&lt;br /&gt;
Daten mit &#039;&#039;&#039;rsync&#039;&#039;&#039; zurückkopieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/etc/fstab&#039;&#039;&#039; und &#039;&#039;&#039;/etc/default/grub_installdevice&#039;&#039;&#039; ändern.&lt;br /&gt;
Bootmanager neu installieren.&lt;br /&gt;
&lt;br /&gt;
Achtung:&lt;br /&gt;
&lt;br /&gt;
Das System bootet nicht, wenn in &amp;lt;code&amp;gt;/etc/fstab &amp;lt;/code&amp;gt;der automatische Filesystemcheck deaktiviert ist:&lt;br /&gt;
System bootet nicht nach Änderung des Filesystems:&lt;br /&gt;
 # /etc/fstab&lt;br /&gt;
 /dev/sdb1 / ext4 defaults 0 0&lt;br /&gt;
&lt;br /&gt;
Geänderter Eintrag - System bootet, da Filesystemcheck angestoßen wird.&lt;br /&gt;
 # /etc/fstab&lt;br /&gt;
 /dev/sdb1 / ext4 defaults 0 1&lt;br /&gt;
== Defekte Blocke im Dateisystem ==&lt;br /&gt;
 badblocks -v /dev/sde1 &amp;gt; bad-blocks&lt;br /&gt;
 fsck -t ext4 -l ./bad-blocks /dev/sde1&lt;br /&gt;
== Superblock reparieren ==&lt;br /&gt;
* Superblock Kopien anzeigen&lt;br /&gt;
Folgender Befehl zeigt die Blöcke an, in denen die Kopien des Superblocks gespeichert sind&lt;br /&gt;
 mke2fs -n /dev/xxx&lt;br /&gt;
* Superblock wiederherstellen&lt;br /&gt;
Nun eine der Nummern auswählen und als Parameter für folgenden Befehl verwenden&lt;br /&gt;
 e2fsck -b block_number /dev/xxx&lt;br /&gt;
&lt;br /&gt;
== Dateisystem prüfen ==&lt;br /&gt;
 e2fsck -pf /dev/sda1&lt;br /&gt;
* Prüfung erzwingen beim Neustart&lt;br /&gt;
Eine Datei mit dem Namen &amp;lt;tt&amp;gt;forcefsck&amp;lt;/tt&amp;gt; anlegen.&lt;br /&gt;
 touch /forcefsck&lt;br /&gt;
 reboot&lt;br /&gt;
Nach dem Reboot wird diese Datei automatisch wieder gelöscht.&lt;br /&gt;
&lt;br /&gt;
== Label ==&lt;br /&gt;
=== Linux Filesysteme ===&lt;br /&gt;
 tune2fs -L &amp;quot;LinuxFS&amp;quot; /dev/sdc2&lt;br /&gt;
=== FAT / VFAT ===&lt;br /&gt;
 dosfslabel /dev/sdd1 &amp;quot;H4NPRO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== NTFS ==&lt;br /&gt;
* Partition formatieren&lt;br /&gt;
 mkfs.ntfs -Q /dev/sdc1&lt;br /&gt;
Ohne die Option &#039;&#039;&#039;-Q&#039;&#039;&#039; dauert das Formatieren sehr lang.&lt;br /&gt;
* Label&lt;br /&gt;
  ntfslabel /dev/sdc4 &amp;quot;WindowsNTFS&amp;quot;&lt;br /&gt;
=== NTFS Partition verkleinern ===&lt;br /&gt;
* Partition prüfen&lt;br /&gt;
 sudo ntfsresize --info /dev/nvme0n1p3&lt;br /&gt;
* Größe des NTFS Dateisystems festlegen&lt;br /&gt;
 sudo ntfsresize --size 100G /dev/nvme0n1p3&lt;br /&gt;
&lt;br /&gt;
== exFAT ==&lt;br /&gt;
Keine Beschränkung der Dateigröße auf 4GB&lt;br /&gt;
* Partition formatieren und Label vergeben&lt;br /&gt;
 mkfs.exfat -L &amp;quot;exFAT_150GB&amp;quot; /dev/sdd1&lt;br /&gt;
Voraussetzung: Unter Suse Linux muss das Paket &amp;lt;tt&amp;gt;exfatprogs&amp;lt;/tt&amp;gt; installiert werden.&lt;br /&gt;
&lt;br /&gt;
== VFAT ==&lt;br /&gt;
* Partition formatieren&lt;br /&gt;
Zum Beispiel einen USB Stick&lt;br /&gt;
 mkfs.vfat /dev/sdd1&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Partitionen_und_Dateisysteme&amp;diff=1819</id>
		<title>Partitionen und Dateisysteme</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Partitionen_und_Dateisysteme&amp;diff=1819"/>
		<updated>2026-03-06T21:23:49Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* BTRFS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dateisystem Größe ändern ==&lt;br /&gt;
Das Ändern der Partitionsgröße mit &amp;lt;code&amp;gt;fdisk&amp;lt;/code&amp;gt; löscht keine Daten. &lt;br /&gt;
: Nach dem Ändern der Partitionsgröße muss jedoch das Dateisystem an die neue Größe angepasst werden.&lt;br /&gt;
&lt;br /&gt;
=== ext4 ===&lt;br /&gt;
 e2fsck -f /dev/sda3&lt;br /&gt;
 resize2fs /dev/sda3&lt;br /&gt;
=== ext3 ===&lt;br /&gt;
* Journal löschen&lt;br /&gt;
 tune2fs -O ^has_journal /dev/sda1&lt;br /&gt;
Damit wird aus dem ext3 ein ext2 Filesystem.&lt;br /&gt;
* Filesystemcheck durchführen&lt;br /&gt;
 e2fsck -f /dev/sda1&lt;br /&gt;
* Größe des Filesystems ändern&lt;br /&gt;
Vergrößern auf Partitionsgröße&lt;br /&gt;
 resize2fs /dev/sda1&lt;br /&gt;
Vergrößern oder verkleinern auf bestimmte Größe - resize&lt;br /&gt;
 resize2fs /dev/sda1 6000M&lt;br /&gt;
* Neues Journal erzeugen&lt;br /&gt;
 tune2fs -j /dev/sda1&lt;br /&gt;
Jetzt haben wir wieder ein ext3 Filesystem mit der neuen Größe.&lt;br /&gt;
=== BTRFS ===&lt;br /&gt;
Zuerst dfas Dateisystem mounten&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 mount /dev/nvme0n1p5 /mnt&lt;br /&gt;
Jetzt das gemountete Dateisystem verkleinern, hier um 1 GB kleiner.&lt;br /&gt;
Anschließend das Dateisystem unmounten.&lt;br /&gt;
 btrfs filesystem resize -1G /mnt&lt;br /&gt;
 umount /mnt&lt;br /&gt;
Jetzt erst die Partition mit fdisk verkleinern&lt;br /&gt;
 fdisk /dev/nvme0n1&lt;br /&gt;
Folgende Befehle in &amp;lt;tt&amp;gt;fdisk&amp;lt;/tt&amp;gt; ausführen&lt;br /&gt;
  p → Layout ansehen&lt;br /&gt;
  d → Partition 5 löschen&lt;br /&gt;
  n → neue Partition 5 erstellen&lt;br /&gt;
  gleichen Startsektor verwenden&lt;br /&gt;
  Endsektor kleiner wählen (z.B. -1G)&lt;br /&gt;
  w → schreiben&lt;br /&gt;
&lt;br /&gt;
⚠️ Der&lt;br /&gt;
* Die entsprechende Partition löschen&lt;br /&gt;
* Eine neue Partition mit dem gleichen Startsektor erstellen aber mit kleinerem Endsektor&lt;br /&gt;
&lt;br /&gt;
== Dateisystem konvertieren ==&lt;br /&gt;
=== ext2 nach ext4 ===&lt;br /&gt;
 tune2fs -O extents,uninit_bg,dir_index,has_journal /dev/sda1&lt;br /&gt;
=== ext2 nach ext3 ===&lt;br /&gt;
 tune2fs -O extents,uninit_bg,dir_index /dev/sda1&lt;br /&gt;
=== btrfs nach ext4 ===&lt;br /&gt;
Mittels Live System und &#039;&#039;&#039;rsync&#039;&#039;&#039; alle Daten auf andere Platte kopieren.&lt;br /&gt;
Auf der btrfs Partition ein ext4 Dateisystem erzeugen, also die Partition neu formatieren.&lt;br /&gt;
Daten mit &#039;&#039;&#039;rsync&#039;&#039;&#039; zurückkopieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/etc/fstab&#039;&#039;&#039; und &#039;&#039;&#039;/etc/default/grub_installdevice&#039;&#039;&#039; ändern.&lt;br /&gt;
Bootmanager neu installieren.&lt;br /&gt;
&lt;br /&gt;
Achtung:&lt;br /&gt;
&lt;br /&gt;
Das System bootet nicht, wenn in &amp;lt;code&amp;gt;/etc/fstab &amp;lt;/code&amp;gt;der automatische Filesystemcheck deaktiviert ist:&lt;br /&gt;
System bootet nicht nach Änderung des Filesystems:&lt;br /&gt;
 # /etc/fstab&lt;br /&gt;
 /dev/sdb1 / ext4 defaults 0 0&lt;br /&gt;
&lt;br /&gt;
Geänderter Eintrag - System bootet, da Filesystemcheck angestoßen wird.&lt;br /&gt;
 # /etc/fstab&lt;br /&gt;
 /dev/sdb1 / ext4 defaults 0 1&lt;br /&gt;
== Defekte Blocke im Dateisystem ==&lt;br /&gt;
 badblocks -v /dev/sde1 &amp;gt; bad-blocks&lt;br /&gt;
 fsck -t ext4 -l ./bad-blocks /dev/sde1&lt;br /&gt;
== Superblock reparieren ==&lt;br /&gt;
* Superblock Kopien anzeigen&lt;br /&gt;
Folgender Befehl zeigt die Blöcke an, in denen die Kopien des Superblocks gespeichert sind&lt;br /&gt;
 mke2fs -n /dev/xxx&lt;br /&gt;
* Superblock wiederherstellen&lt;br /&gt;
Nun eine der Nummern auswählen und als Parameter für folgenden Befehl verwenden&lt;br /&gt;
 e2fsck -b block_number /dev/xxx&lt;br /&gt;
&lt;br /&gt;
== Dateisystem prüfen ==&lt;br /&gt;
 e2fsck -pf /dev/sda1&lt;br /&gt;
* Prüfung erzwingen beim Neustart&lt;br /&gt;
Eine Datei mit dem Namen &amp;lt;tt&amp;gt;forcefsck&amp;lt;/tt&amp;gt; anlegen.&lt;br /&gt;
 touch /forcefsck&lt;br /&gt;
 reboot&lt;br /&gt;
Nach dem Reboot wird diese Datei automatisch wieder gelöscht.&lt;br /&gt;
&lt;br /&gt;
== Label ==&lt;br /&gt;
=== Linux Filesysteme ===&lt;br /&gt;
 tune2fs -L &amp;quot;LinuxFS&amp;quot; /dev/sdc2&lt;br /&gt;
=== FAT / VFAT ===&lt;br /&gt;
 dosfslabel /dev/sdd1 &amp;quot;H4NPRO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== NTFS ==&lt;br /&gt;
* Partition formatieren&lt;br /&gt;
 mkfs.ntfs -Q /dev/sdc1&lt;br /&gt;
Ohne die Option &#039;&#039;&#039;-Q&#039;&#039;&#039; dauert das Formatieren sehr lang.&lt;br /&gt;
* Label&lt;br /&gt;
  ntfslabel /dev/sdc4 &amp;quot;WindowsNTFS&amp;quot;&lt;br /&gt;
=== NTFS Partition verkleinern ===&lt;br /&gt;
* Partition prüfen&lt;br /&gt;
 sudo ntfsresize --info /dev/nvme0n1p3&lt;br /&gt;
* Größe des NTFS Dateisystems festlegen&lt;br /&gt;
 sudo ntfsresize --size 100G /dev/nvme0n1p3&lt;br /&gt;
&lt;br /&gt;
== exFAT ==&lt;br /&gt;
Keine Beschränkung der Dateigröße auf 4GB&lt;br /&gt;
* Partition formatieren und Label vergeben&lt;br /&gt;
 mkfs.exfat -L &amp;quot;exFAT_150GB&amp;quot; /dev/sdd1&lt;br /&gt;
Voraussetzung: Unter Suse Linux muss das Paket &amp;lt;tt&amp;gt;exfatprogs&amp;lt;/tt&amp;gt; installiert werden.&lt;br /&gt;
&lt;br /&gt;
== VFAT ==&lt;br /&gt;
* Partition formatieren&lt;br /&gt;
Zum Beispiel einen USB Stick&lt;br /&gt;
 mkfs.vfat /dev/sdd1&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Partitionen_und_Dateisysteme&amp;diff=1818</id>
		<title>Partitionen und Dateisysteme</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Partitionen_und_Dateisysteme&amp;diff=1818"/>
		<updated>2026-03-06T21:23:28Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* ext3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dateisystem Größe ändern ==&lt;br /&gt;
Das Ändern der Partitionsgröße mit &amp;lt;code&amp;gt;fdisk&amp;lt;/code&amp;gt; löscht keine Daten. &lt;br /&gt;
: Nach dem Ändern der Partitionsgröße muss jedoch das Dateisystem an die neue Größe angepasst werden.&lt;br /&gt;
&lt;br /&gt;
=== ext4 ===&lt;br /&gt;
 e2fsck -f /dev/sda3&lt;br /&gt;
 resize2fs /dev/sda3&lt;br /&gt;
=== ext3 ===&lt;br /&gt;
* Journal löschen&lt;br /&gt;
 tune2fs -O ^has_journal /dev/sda1&lt;br /&gt;
Damit wird aus dem ext3 ein ext2 Filesystem.&lt;br /&gt;
* Filesystemcheck durchführen&lt;br /&gt;
 e2fsck -f /dev/sda1&lt;br /&gt;
* Größe des Filesystems ändern&lt;br /&gt;
Vergrößern auf Partitionsgröße&lt;br /&gt;
 resize2fs /dev/sda1&lt;br /&gt;
Vergrößern oder verkleinern auf bestimmte Größe - resize&lt;br /&gt;
 resize2fs /dev/sda1 6000M&lt;br /&gt;
* Neues Journal erzeugen&lt;br /&gt;
 tune2fs -j /dev/sda1&lt;br /&gt;
Jetzt haben wir wieder ein ext3 Filesystem mit der neuen Größe.&lt;br /&gt;
=== BTRFS ===&lt;br /&gt;
Zuerst dfas Dateisystem mounten&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 mount /dev/nvme0n1p5 /mnt&lt;br /&gt;
Jetzt das gemountete Dateisystem verkleinern, hier um 1 GB kleiner.&lt;br /&gt;
Anschließend das Dateisystem unmounten.&lt;br /&gt;
 btrfs filesystem resize -1G /mnt&lt;br /&gt;
 umount /mnt&lt;br /&gt;
Jetzt erst die Partition mit fdisk verkleinern&lt;br /&gt;
 fdisk /dev/nvme0n1&lt;br /&gt;
Folgende Befehle in fdisk ausführen&lt;br /&gt;
  p → Layout ansehen&lt;br /&gt;
  d → Partition 5 löschen&lt;br /&gt;
  n → neue Partition 5 erstellen&lt;br /&gt;
  gleichen Startsektor verwenden&lt;br /&gt;
  Endsektor kleiner wählen (z.B. -1G)&lt;br /&gt;
  w → schreiben&lt;br /&gt;
&lt;br /&gt;
⚠️ Der&lt;br /&gt;
* Die entsprechende Partition löschen&lt;br /&gt;
* Eine neue Partition mit dem gleichen Startsektor erstellen aber mit kleinerem Endsektor&lt;br /&gt;
&lt;br /&gt;
== Dateisystem konvertieren ==&lt;br /&gt;
=== ext2 nach ext4 ===&lt;br /&gt;
 tune2fs -O extents,uninit_bg,dir_index,has_journal /dev/sda1&lt;br /&gt;
=== ext2 nach ext3 ===&lt;br /&gt;
 tune2fs -O extents,uninit_bg,dir_index /dev/sda1&lt;br /&gt;
=== btrfs nach ext4 ===&lt;br /&gt;
Mittels Live System und &#039;&#039;&#039;rsync&#039;&#039;&#039; alle Daten auf andere Platte kopieren.&lt;br /&gt;
Auf der btrfs Partition ein ext4 Dateisystem erzeugen, also die Partition neu formatieren.&lt;br /&gt;
Daten mit &#039;&#039;&#039;rsync&#039;&#039;&#039; zurückkopieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/etc/fstab&#039;&#039;&#039; und &#039;&#039;&#039;/etc/default/grub_installdevice&#039;&#039;&#039; ändern.&lt;br /&gt;
Bootmanager neu installieren.&lt;br /&gt;
&lt;br /&gt;
Achtung:&lt;br /&gt;
&lt;br /&gt;
Das System bootet nicht, wenn in &amp;lt;code&amp;gt;/etc/fstab &amp;lt;/code&amp;gt;der automatische Filesystemcheck deaktiviert ist:&lt;br /&gt;
System bootet nicht nach Änderung des Filesystems:&lt;br /&gt;
 # /etc/fstab&lt;br /&gt;
 /dev/sdb1 / ext4 defaults 0 0&lt;br /&gt;
&lt;br /&gt;
Geänderter Eintrag - System bootet, da Filesystemcheck angestoßen wird.&lt;br /&gt;
 # /etc/fstab&lt;br /&gt;
 /dev/sdb1 / ext4 defaults 0 1&lt;br /&gt;
== Defekte Blocke im Dateisystem ==&lt;br /&gt;
 badblocks -v /dev/sde1 &amp;gt; bad-blocks&lt;br /&gt;
 fsck -t ext4 -l ./bad-blocks /dev/sde1&lt;br /&gt;
== Superblock reparieren ==&lt;br /&gt;
* Superblock Kopien anzeigen&lt;br /&gt;
Folgender Befehl zeigt die Blöcke an, in denen die Kopien des Superblocks gespeichert sind&lt;br /&gt;
 mke2fs -n /dev/xxx&lt;br /&gt;
* Superblock wiederherstellen&lt;br /&gt;
Nun eine der Nummern auswählen und als Parameter für folgenden Befehl verwenden&lt;br /&gt;
 e2fsck -b block_number /dev/xxx&lt;br /&gt;
&lt;br /&gt;
== Dateisystem prüfen ==&lt;br /&gt;
 e2fsck -pf /dev/sda1&lt;br /&gt;
* Prüfung erzwingen beim Neustart&lt;br /&gt;
Eine Datei mit dem Namen &amp;lt;tt&amp;gt;forcefsck&amp;lt;/tt&amp;gt; anlegen.&lt;br /&gt;
 touch /forcefsck&lt;br /&gt;
 reboot&lt;br /&gt;
Nach dem Reboot wird diese Datei automatisch wieder gelöscht.&lt;br /&gt;
&lt;br /&gt;
== Label ==&lt;br /&gt;
=== Linux Filesysteme ===&lt;br /&gt;
 tune2fs -L &amp;quot;LinuxFS&amp;quot; /dev/sdc2&lt;br /&gt;
=== FAT / VFAT ===&lt;br /&gt;
 dosfslabel /dev/sdd1 &amp;quot;H4NPRO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== NTFS ==&lt;br /&gt;
* Partition formatieren&lt;br /&gt;
 mkfs.ntfs -Q /dev/sdc1&lt;br /&gt;
Ohne die Option &#039;&#039;&#039;-Q&#039;&#039;&#039; dauert das Formatieren sehr lang.&lt;br /&gt;
* Label&lt;br /&gt;
  ntfslabel /dev/sdc4 &amp;quot;WindowsNTFS&amp;quot;&lt;br /&gt;
=== NTFS Partition verkleinern ===&lt;br /&gt;
* Partition prüfen&lt;br /&gt;
 sudo ntfsresize --info /dev/nvme0n1p3&lt;br /&gt;
* Größe des NTFS Dateisystems festlegen&lt;br /&gt;
 sudo ntfsresize --size 100G /dev/nvme0n1p3&lt;br /&gt;
&lt;br /&gt;
== exFAT ==&lt;br /&gt;
Keine Beschränkung der Dateigröße auf 4GB&lt;br /&gt;
* Partition formatieren und Label vergeben&lt;br /&gt;
 mkfs.exfat -L &amp;quot;exFAT_150GB&amp;quot; /dev/sdd1&lt;br /&gt;
Voraussetzung: Unter Suse Linux muss das Paket &amp;lt;tt&amp;gt;exfatprogs&amp;lt;/tt&amp;gt; installiert werden.&lt;br /&gt;
&lt;br /&gt;
== VFAT ==&lt;br /&gt;
* Partition formatieren&lt;br /&gt;
Zum Beispiel einen USB Stick&lt;br /&gt;
 mkfs.vfat /dev/sdd1&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Konsole&amp;diff=1817</id>
		<title>Konsole</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Konsole&amp;diff=1817"/>
		<updated>2026-03-06T20:47:57Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Virtuelle Konsolen - TTY */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Farben ==&lt;br /&gt;
 dircolors -p &amp;gt; ~/.dircolors &lt;br /&gt;
Es wird eine Datei erzeugt, die man bearbeiten kann&lt;br /&gt;
 nano ~/.dircolors&lt;br /&gt;
Folgende Zeile in &amp;lt;tt&amp;gt;~/.bashrc&amp;lt;/tt&amp;gt; eintragen:&lt;br /&gt;
 eval &amp;quot;$(dircolors -b ~/.dircolors)&amp;quot;&lt;br /&gt;
Dann &amp;lt;tt&amp;gt;~/.bashrc&amp;lt;/tt&amp;gt; neu einlesen&lt;br /&gt;
 source ~/.bashrc&lt;br /&gt;
Nun werden die neuen Farben beim Öffnen des Terminal Emulators angewendet.&lt;br /&gt;
&lt;br /&gt;
Nähere Infos siehe https://wiki.ubuntuusers.de/dircolors/&lt;br /&gt;
&lt;br /&gt;
== Konsole Lesezeichen ==&lt;br /&gt;
Hat man im Terminalprogramm Konsole Lesezeichen angelegt, so finden sich diese abhängig von der Desktop Umgebung hier:&lt;br /&gt;
 ~/.kde4/share/apps/konsole/bookmarks.xml&lt;br /&gt;
 ~/.local/share/apps/konsole/bookmarks.xml&lt;br /&gt;
&lt;br /&gt;
== Konsole Profile ==&lt;br /&gt;
Die Profile finden sich im gleichen Verzeichnis in je einer Datei mit der Endung &amp;lt;tt&amp;gt;.profile&amp;lt;/tt&amp;gt;&lt;br /&gt;
 cd ~/.local/share/konsole/&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 MyShell.profile&lt;br /&gt;
Das Profil für die Root Shell befindet sich in dieser Datei:&lt;br /&gt;
 &amp;quot;/usr/share/konsole/Root Shell.profile&amp;quot;&lt;br /&gt;
Eventuell Rechte ändern&lt;br /&gt;
 cd /usr/share/konsole/&lt;br /&gt;
 chown &amp;lt;username&amp;gt; *.profile&lt;br /&gt;
== Virtuelle Konsolen - TTY ==&lt;br /&gt;
=== Schriftgröße ändern ===&lt;br /&gt;
Falls Terminus Fonts nicht installiert sind&lt;br /&gt;
 sudo zypper install terminus-bitmap-fonts&lt;br /&gt;
Verfügbare Terminus Fonts anzeigen&lt;br /&gt;
 ls /usr/share/kbd/consolefonts | grep ter&lt;br /&gt;
Große Schrift laden&lt;br /&gt;
 sudo setfont ter-v32n&lt;br /&gt;
Font dauerhaft speichern in Datei&lt;br /&gt;
 # /etc/vconsole.conf&lt;br /&gt;
 FONT=ter-v32n&lt;br /&gt;
=== Deutsche Tastatur laden ===&lt;br /&gt;
 localectl set-keymap de&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=GRUB&amp;diff=1816</id>
		<title>GRUB</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=GRUB&amp;diff=1816"/>
		<updated>2026-03-05T08:56:06Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
GRUB = Grand Unified Bootloader&lt;br /&gt;
&lt;br /&gt;
== Grub2 Konfiguration ==&lt;br /&gt;
Details: Siehe Suse Dokumentation: http://doc.opensuse.org/documentation/html/openSUSE/opensuse-reference/grub2.html&lt;br /&gt;
&lt;br /&gt;
* Konfiguration&lt;br /&gt;
 /etc/default/grub&lt;br /&gt;
* Grafikauflösung des Startbildschirms ändern&lt;br /&gt;
 # /etc/default/grub&lt;br /&gt;
 GRUB_GFXMODE=1280x1024&lt;br /&gt;
* Grafik deaktivieren&lt;br /&gt;
 GRUB_TERMINAL=console&lt;br /&gt;
* Benutzerdefinierter Eintrag - Puppy Linux&lt;br /&gt;
Folgende Datei bearbeiten:&lt;br /&gt;
 /etc/grub.d/40_custom&lt;br /&gt;
An das Ende der Datei z.B. folgende Einträge hinzufügen&lt;br /&gt;
 menuentry &amp;quot;Puppy Linux (frugal on sda3)&amp;quot; {&lt;br /&gt;
 set root=(hd1,3)&lt;br /&gt;
 &lt;br /&gt;
 linux /puppy/vmlinuz pmedia=atahd psubdir=puppy&lt;br /&gt;
 initrd /puppy/initrd.gz&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039;&lt;br /&gt;
Änderung der Partitionsbezeichnungen in grub2 gegenüber grub legacy: &lt;br /&gt;
: Die Zählung der Festplatten beginnt bei 0&lt;br /&gt;
: Die Zählung der Partitionen beginnt bei 1&lt;br /&gt;
Festplatte &#039;&#039;&#039;/dev/sda6&#039;&#039;&#039; entspricht also &#039;&#039;&#039;(hd0,6)&#039;&#039;&#039;.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
Änderungen an den grub2-Skripten oder an &amp;lt;code&amp;gt;/etc/default/grub&amp;lt;/code&amp;gt; werden erst wirksam nach dem Aufruf des folgenden Kommandos:&lt;br /&gt;
 grub2-mkconfig -o /boot/grub2/grub.cfg&lt;br /&gt;
== Grub Konsole ==&lt;br /&gt;
Falls der Bootmanager nicht startet, landet man in einer Shell mit dem Prompt&lt;br /&gt;
 grub&amp;gt;&lt;br /&gt;
Partitionen anzeigen&lt;br /&gt;
 ls&lt;br /&gt;
Variable &amp;lt;tt&amp;gt;prefix&amp;lt;/tt&amp;gt; setzen auf das Verzeichnis &amp;lt;tt&amp;gt;/boot/grub&amp;lt;/tt&amp;gt;&lt;br /&gt;
Variable &amp;lt;tt&amp;gt;root&amp;lt;/tt&amp;gt; setzen auf die Partition, die das Betriebssystem enthält&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 set prefix=(hd0,gpt1)/boot/grub2&lt;br /&gt;
 set root=(hd0,gpt1)&lt;br /&gt;
Nun kann man die Befehle zum Laden des kernels und der Ramdisk eingeben&lt;br /&gt;
 linux /boot/vmlinuz-6.4.0-150600.23.73-default root=/dev/vda1&lt;br /&gt;
 initrd /boot/initrd-6.4.0-150600.23.73-default&lt;br /&gt;
Man kann auch bestehende Symlinks verwenden&lt;br /&gt;
 linux /boot/vmlinuz &lt;br /&gt;
 initrd /boot/initrd&lt;br /&gt;
Jetzt kann man das System booten&lt;br /&gt;
 boot&lt;br /&gt;
&lt;br /&gt;
== Bootmanager reparieren ==&lt;br /&gt;
Mit einer Live CD starten (Knoppic, SUSE Rescue System von DVD, ...).&lt;br /&gt;
=== Schritt für Schritt ===&lt;br /&gt;
* Partition mounten&lt;br /&gt;
 # Beispiel:&lt;br /&gt;
 mount /dev/sda2 /mnt/&lt;br /&gt;
* Einige Verzeichnisse des laufenden Systems in das gemountete einbinden&lt;br /&gt;
 mount --bind /dev /mnt/dev/&lt;br /&gt;
 mount --bind /proc /mnt/proc/&lt;br /&gt;
 mount --bind /sys /mnt/sys/&lt;br /&gt;
oder&lt;br /&gt;
 for d in dev proc sys ; do mount --bind /$d /mnt/$d ; done&lt;br /&gt;
* In das gemountete System wechseln&lt;br /&gt;
 cd /mnt/&lt;br /&gt;
 chroot /mnt/&lt;br /&gt;
&lt;br /&gt;
=== Befehlsfolge ===&lt;br /&gt;
 partition=sda1&lt;br /&gt;
 read -e -i &amp;quot;$partition&amp;quot; -p &amp;quot;Name der Partition: &amp;quot; partition&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /media/$partition&lt;br /&gt;
 mount /dev/$partition /media/$partition&lt;br /&gt;
 for d in dev proc sys ; do mount --bind /$d /media/$partition/$d ; done&lt;br /&gt;
 cd /media/$partition&lt;br /&gt;
&lt;br /&gt;
 chroot /media/$partition&lt;br /&gt;
&lt;br /&gt;
=== GRUB legacy ===&lt;br /&gt;
Grub Konsole starten&lt;br /&gt;
 grub&lt;br /&gt;
Die Partition angeben, wo sich /boot befindet.&lt;br /&gt;
 grub&amp;gt; root (hd0,2)&lt;br /&gt;
Bootloader installieren&lt;br /&gt;
 grub&amp;gt; setup (hd0)&lt;br /&gt;
 grub&amp;gt; quit&lt;br /&gt;
&lt;br /&gt;
=== Grub 2 ===&lt;br /&gt;
* Suse Linux&lt;br /&gt;
 grub2-mkconfig -o /boot/grub2/grub.cfg&lt;br /&gt;
 grub2-install /dev/sdb&lt;br /&gt;
* Ubuntu&lt;br /&gt;
 sudo grub-mkconfig &lt;br /&gt;
 sudo update-grub&lt;br /&gt;
 sudo grub-install /dev/sda&lt;br /&gt;
== Kernel-Parameter ==&lt;br /&gt;
Durch Drücklen der Taste &amp;quot;e&amp;quot; im Boot-Menü kann man an die Zeile, die mit &amp;lt;tt&amp;gt;linux&amp;lt;/tt&amp;gt; beginnt, Parameter anhängen.&lt;br /&gt;
* Auflösung ändern&lt;br /&gt;
 video=1920x1080&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
=== Erzeugen der Konfiguration dauert sehr lang ===&lt;br /&gt;
Lösung: Folgende Zeile in der angegebenen Datei löschen&lt;br /&gt;
 # /boot/grub2/device.map&lt;br /&gt;
 &amp;lt;s&amp;gt;(fd0) /dev/fd0&amp;lt;/s&amp;gt;&lt;br /&gt;
=== Operating system not found ===&lt;br /&gt;
Nach einem Festplattenwechsel kann es vorkommen, dass diese Meldung erscheint. Dann eventuell folgender Datei ändern:&lt;br /&gt;
 /etc/default/grub_installdevice&lt;br /&gt;
Pfad zur Festplatte eintragen&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 /dev/disk/by-id/scsi-SATA_Samsung_SSD_840S14CNEACC11055Z-part1&lt;br /&gt;
Wenn dieser Pfad falsch gesetzt ist, führt der Versuch, den Bootloader mit YAST zu konfigurieren zu einer Fehlermeldung:&lt;br /&gt;
 Unknown udev device ...&lt;br /&gt;
Den Pfad zur richtigen Festplatte ermitteln mit&lt;br /&gt;
 blkid&lt;br /&gt;
=== Plymouth Bootscreen ===&lt;br /&gt;
Initramdisk neu erstellen, falls der Splash Screen nicht wie erwartet angezeigt wird.&lt;br /&gt;
 mkinitrd&lt;br /&gt;
==== nVidia Driver zeigt keinen Bootscreen an ====&lt;br /&gt;
Bei Verwendung des proprietären &amp;lt;tt&amp;gt;nVidia&amp;lt;/tt&amp;gt; Kernel Moduls wird bei &amp;lt;tt&amp;gt;openSuse Leap&amp;lt;/tt&amp;gt; der Bootscreen nicht automatisch angezeigt..&lt;br /&gt;
: Folgende Maßnahmen bewirken, dass der &amp;lt;tt&amp;gt;openSuse&amp;lt;/tt&amp;gt; Leap Bootscreen erscheint:&lt;br /&gt;
 # /etc/modprobe.d/nvidia.conf&lt;br /&gt;
 options nvidia_drm modeset=1&lt;br /&gt;
&lt;br /&gt;
 # /etc/dracut.conf.d/60-nvidia-default.conf&lt;br /&gt;
 add_drivers+=&amp;quot;nvidia nvidia_modeset nvidia_uvm nvidia_drm&amp;quot;&lt;br /&gt;
 install_items+=&amp;quot;/etc/modprobe.d/nvidia.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 dracut -f&lt;br /&gt;
Info: https://blog.sukimashita.com/2016/05/02/graphical-boot-plymouth-opensuse-nvidia-driver/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Möglicherweise beeinträchtigen diese Maßnahmen die Performance des Computers.&amp;lt;/span&amp;gt; -- ???&lt;br /&gt;
&lt;br /&gt;
===== Script =====&lt;br /&gt;
 # /usr/local/bin/plymouth.sh&lt;br /&gt;
 cd /etc/dracut.conf.d&lt;br /&gt;
 cp -f 60-nvidia-default.conf.plymouth 60-nvidia-default.conf&lt;br /&gt;
 dracut -f&lt;br /&gt;
Das Script muss als &amp;lt;tt&amp;gt;root&amp;lt;/tt&amp;gt; ausgeführt werden.&lt;br /&gt;
 sudo /usr/local/bin/plymouth.sh&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=GRUB&amp;diff=1815</id>
		<title>GRUB</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=GRUB&amp;diff=1815"/>
		<updated>2026-03-05T08:54:51Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
GRUB = Grand Unified Bootloader&lt;br /&gt;
&lt;br /&gt;
== Grub2 Konfiguration ==&lt;br /&gt;
Details: Siehe Suse Dokumentation: http://doc.opensuse.org/documentation/html/openSUSE/opensuse-reference/grub2.html&lt;br /&gt;
&lt;br /&gt;
* Konfiguration&lt;br /&gt;
 /etc/default/grub&lt;br /&gt;
* Grafikauflösung des Startbildschirms ändern&lt;br /&gt;
 # /etc/default/grub&lt;br /&gt;
 GRUB_GFXMODE=1280x1024&lt;br /&gt;
* Grafik deaktivieren&lt;br /&gt;
 GRUB_TERMINAL=console&lt;br /&gt;
* Benutzerdefinierter Eintrag - Puppy Linux&lt;br /&gt;
Folgende Datei bearbeiten:&lt;br /&gt;
 /etc/grub.d/40_custom&lt;br /&gt;
An das Ende der Datei z.B. folgende Einträge hinzufügen&lt;br /&gt;
 menuentry &amp;quot;Puppy Linux (frugal on sda3)&amp;quot; {&lt;br /&gt;
 set root=(hd1,3)&lt;br /&gt;
 &lt;br /&gt;
 linux /puppy/vmlinuz pmedia=atahd psubdir=puppy&lt;br /&gt;
 initrd /puppy/initrd.gz&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039;&lt;br /&gt;
Änderung der Partitionsbezeichnungen in grub2 gegenüber grub legacy: &lt;br /&gt;
: Die Zählung der Festplatten beginnt bei 0&lt;br /&gt;
: Die Zählung der Partitionen beginnt bei 1&lt;br /&gt;
Festplatte &#039;&#039;&#039;/dev/sda6&#039;&#039;&#039; entspricht also &#039;&#039;&#039;(hd0,6)&#039;&#039;&#039;.&lt;br /&gt;
* Konfiguration speichern&lt;br /&gt;
Änderungen an den grub2-Skripten oder an &amp;lt;code&amp;gt;/etc/default/grub&amp;lt;/code&amp;gt; werden erst wirksam nach dem Aufruf des folgenden Kommandos:&lt;br /&gt;
 grub2-mkconfig -o /boot/grub2/grub.cfg&lt;br /&gt;
== Grub Konsole ==&lt;br /&gt;
Falls der Bootmanager nicht startet, landet man in einer Shell mit dem Prompt&lt;br /&gt;
 grub&amp;gt;&lt;br /&gt;
Partitionen anzeigen&lt;br /&gt;
 ls&lt;br /&gt;
Variable &amp;lt;tt&amp;gt;prefix&amp;lt;/tt&amp;gt; setzen auf das Verzeichnis &amp;lt;tt&amp;gt;/boot/grub&amp;lt;/tt&amp;gt;&lt;br /&gt;
Variable &amp;lt;tt&amp;gt;root&amp;lt;/tt&amp;gt; setzen auf die Partition, die das Betriebssystem enthält&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 set prefix=(hd0,gpt1)/boot/grub2&lt;br /&gt;
 set root=(hd0,gpt1)&lt;br /&gt;
Nun kann man die Befehle zum Laden des kernels und der Ramdisk eingeben&lt;br /&gt;
 linux /boot/vmlinuz-6.4.0-150600.23.73-default root=/dev/vda1&lt;br /&gt;
 initrd /boot/initrd-6.4.0-150600.23.73-default&lt;br /&gt;
Man kann auch bestehende Symlinks verwenden&lt;br /&gt;
 linux /boot/vmlinuz &lt;br /&gt;
 initrd /boot/initrd&lt;br /&gt;
Jetzt kann man das System booten&lt;br /&gt;
 boot&lt;br /&gt;
&lt;br /&gt;
== Bootmanager reparieren ==&lt;br /&gt;
Mit einer Live CD starten (Knoppic, SUSE Rescue System von DVD, ...).&lt;br /&gt;
=== Schritt für Schritt ===&lt;br /&gt;
* Partition mounten&lt;br /&gt;
 # Beispiel:&lt;br /&gt;
 mount /dev/sda2 /mnt/&lt;br /&gt;
* Einige Verzeichnisse des laufenden Systems in das gemountete einbinden&lt;br /&gt;
 mount --bind /dev /mnt/dev/&lt;br /&gt;
 mount --bind /proc /mnt/proc/&lt;br /&gt;
 mount --bind /sys /mnt/sys/&lt;br /&gt;
oder&lt;br /&gt;
 for d in dev proc sys ; do mount --bind /$d /mnt/$d ; done&lt;br /&gt;
* In das gemountete System wechseln&lt;br /&gt;
 cd /mnt/&lt;br /&gt;
 chroot /mnt/&lt;br /&gt;
&lt;br /&gt;
=== Befehlsfolge ===&lt;br /&gt;
 partition=sda1&lt;br /&gt;
 read -e -i &amp;quot;$partition&amp;quot; -p &amp;quot;Name der Partition: &amp;quot; partition&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /media/$partition&lt;br /&gt;
 mount /dev/$partition /media/$partition&lt;br /&gt;
 for d in dev proc sys ; do mount --bind /$d /media/$partition/$d ; done&lt;br /&gt;
 cd /media/$partition&lt;br /&gt;
&lt;br /&gt;
 chroot /media/$partition&lt;br /&gt;
&lt;br /&gt;
=== GRUB legacy ===&lt;br /&gt;
Grub Konsole starten&lt;br /&gt;
 grub&lt;br /&gt;
Die Partition angeben, wo sich /boot befindet.&lt;br /&gt;
 grub&amp;gt; root (hd0,2)&lt;br /&gt;
Bootloader installieren&lt;br /&gt;
 grub&amp;gt; setup (hd0)&lt;br /&gt;
 grub&amp;gt; quit&lt;br /&gt;
&lt;br /&gt;
=== Grub 2 ===&lt;br /&gt;
* Suse Linux&lt;br /&gt;
 grub2-mkconfig -o /boot/grub2/grub.cfg&lt;br /&gt;
 grub2-install /dev/sdb&lt;br /&gt;
* Ubuntu&lt;br /&gt;
 sudo grub-mkconfig &lt;br /&gt;
 sudo update-grub&lt;br /&gt;
 sudo grub-install /dev/sda&lt;br /&gt;
== &lt;br /&gt;
Kernel-Parameter ==&lt;br /&gt;
Durch Drücklen der Taste &amp;quot;e&amp;quot; im Boot-Menü kann man an die Zeile, die mit &amp;lt;tt&amp;gt;linux&amp;lt;/tt&amp;gt; beginnt, Parameter anhängen.&lt;br /&gt;
* Auflösung ändern&lt;br /&gt;
 video=1920x1080&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
=== Erzeugen der Konfiguration dauert sehr lang ===&lt;br /&gt;
Lösung: Folgende Zeile in der angegebenen Datei löschen&lt;br /&gt;
 # /boot/grub2/device.map&lt;br /&gt;
 &amp;lt;s&amp;gt;(fd0) /dev/fd0&amp;lt;/s&amp;gt;&lt;br /&gt;
=== Operating system not found ===&lt;br /&gt;
Nach einem Festplattenwechsel kann es vorkommen, dass diese Meldung erscheint. Dann eventuell folgender Datei ändern:&lt;br /&gt;
 /etc/default/grub_installdevice&lt;br /&gt;
Pfad zur Festplatte eintragen&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 /dev/disk/by-id/scsi-SATA_Samsung_SSD_840S14CNEACC11055Z-part1&lt;br /&gt;
Wenn dieser Pfad falsch gesetzt ist, führt der Versuch, den Bootloader mit YAST zu konfigurieren zu einer Fehlermeldung:&lt;br /&gt;
 Unknown udev device ...&lt;br /&gt;
Den Pfad zur richtigen Festplatte ermitteln mit&lt;br /&gt;
 blkid&lt;br /&gt;
=== Plymouth Bootscreen ===&lt;br /&gt;
Initramdisk neu erstellen, falls der Splash Screen nicht wie erwartet angezeigt wird.&lt;br /&gt;
 mkinitrd&lt;br /&gt;
==== nVidia Driver zeigt keinen Bootscreen an ====&lt;br /&gt;
Bei Verwendung des proprietären &amp;lt;tt&amp;gt;nVidia&amp;lt;/tt&amp;gt; Kernel Moduls wird bei &amp;lt;tt&amp;gt;openSuse Leap&amp;lt;/tt&amp;gt; der Bootscreen nicht automatisch angezeigt..&lt;br /&gt;
: Folgende Maßnahmen bewirken, dass der &amp;lt;tt&amp;gt;openSuse&amp;lt;/tt&amp;gt; Leap Bootscreen erscheint:&lt;br /&gt;
 # /etc/modprobe.d/nvidia.conf&lt;br /&gt;
 options nvidia_drm modeset=1&lt;br /&gt;
&lt;br /&gt;
 # /etc/dracut.conf.d/60-nvidia-default.conf&lt;br /&gt;
 add_drivers+=&amp;quot;nvidia nvidia_modeset nvidia_uvm nvidia_drm&amp;quot;&lt;br /&gt;
 install_items+=&amp;quot;/etc/modprobe.d/nvidia.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 dracut -f&lt;br /&gt;
Info: https://blog.sukimashita.com/2016/05/02/graphical-boot-plymouth-opensuse-nvidia-driver/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Möglicherweise beeinträchtigen diese Maßnahmen die Performance des Computers.&amp;lt;/span&amp;gt; -- ???&lt;br /&gt;
&lt;br /&gt;
===== Script =====&lt;br /&gt;
 # /usr/local/bin/plymouth.sh&lt;br /&gt;
 cd /etc/dracut.conf.d&lt;br /&gt;
 cp -f 60-nvidia-default.conf.plymouth 60-nvidia-default.conf&lt;br /&gt;
 dracut -f&lt;br /&gt;
Das Script muss als &amp;lt;tt&amp;gt;root&amp;lt;/tt&amp;gt; ausgeführt werden.&lt;br /&gt;
 sudo /usr/local/bin/plymouth.sh&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Systemupgrade&amp;diff=1814</id>
		<title>Systemupgrade</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Systemupgrade&amp;diff=1814"/>
		<updated>2026-02-26T17:20:25Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* ... oder von DVD clonen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suse Systemupgrade - Schritt für Schritt ==&lt;br /&gt;
Eine Terminal (Konsole) Sitzung als Benutzer &#039;&#039;&#039;root&#039;&#039;&#039; starten.&lt;br /&gt;
* Die folgende Anleitung muss zwingend von oben nach unten dirchgearbeitet werden.&lt;br /&gt;
* Den Code von jedem Abschnitt kopieren und dann gleich im Terminal ausführen.&lt;br /&gt;
* Die Reihenfolge muss eingehalten werden, da Variable gesetzt werden, die in nachfolgenden Schritten verwendet werden.&lt;br /&gt;
* Alles muss im selben Terminal (Konsole) Fenster durchgeführt werden&lt;br /&gt;
&lt;br /&gt;
=== Version ===&lt;br /&gt;
Die neue Versionsnummer wird in der Variablen &amp;lt;tt&amp;gt;$new&amp;lt;/tt&amp;gt; abgelegt.&lt;br /&gt;
 old=`cat /etc/os-release | grep VERSION_ID | cut -d &amp;quot;=&amp;quot; -f 2 | sed &#039;s/&amp;quot;//g&#039;`&lt;br /&gt;
 main=$(echo $old | cut -d &amp;quot;.&amp;quot; -f 1)&lt;br /&gt;
 sub=$(echo $old | cut -d &amp;quot;.&amp;quot; -f 2)&lt;br /&gt;
 new=$main.$(expr $sub + 1)&lt;br /&gt;
 echo $new&lt;br /&gt;
&lt;br /&gt;
=== Repos modifizieren ===&lt;br /&gt;
Dieser Schritt korrigiert Repositories, wenn nötig.&lt;br /&gt;
 # Hardcodierte Versionsnummern durch die Variable &amp;lt;tt&amp;gt;$releasever&amp;lt;/tt&amp;gt; ersetzen&lt;br /&gt;
 rm /etc/zypp/repos.d.bak -R 2&amp;gt; /dev/null&lt;br /&gt;
 cp -a /etc/zypp/repos.d /etc/zypp/repos.d.bak&lt;br /&gt;
 cd /etc/zypp/repos.d&lt;br /&gt;
 find . -type f | \&lt;br /&gt;
 while read file ; do &lt;br /&gt;
    # Suchen und ersetzen:&lt;br /&gt;
    cp &amp;quot;$file&amp;quot; datei.tmp&lt;br /&gt;
    sed -e s/$old/\$releasever/g datei.tmp &amp;gt; &amp;quot;$file&amp;quot;&lt;br /&gt;
    sed -e s/$new/\$releasever/g datei.tmp &amp;gt; &amp;quot;$file&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 rm datei.tmp&lt;br /&gt;
 &lt;br /&gt;
 # Versionsname aus repo-Dateinamen entfernen&lt;br /&gt;
 for file in * ; do&lt;br /&gt;
    oldname=`basename &amp;quot;$file&amp;quot;`&lt;br /&gt;
    newname=`echo $oldname | sed -e s/$old/&amp;quot;&amp;quot;/`&lt;br /&gt;
    if [ &amp;quot;$newname&amp;quot; != &amp;quot;$oldname&amp;quot; ] ; then&lt;br /&gt;
       mv &amp;quot;`pwd`/$oldname&amp;quot; &amp;quot;`pwd`/$newname&amp;quot; &lt;br /&gt;
    fi&lt;br /&gt;
    newname=`echo $oldname | sed -e s/$new/&amp;quot;&amp;quot;/`&lt;br /&gt;
    if [ &amp;quot;$newname&amp;quot; != &amp;quot;$oldname&amp;quot; ] ; then&lt;br /&gt;
       mv &amp;quot;`pwd`/$oldname&amp;quot; &amp;quot;`pwd`/$newname&amp;quot; &lt;br /&gt;
    fi&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 # Repos anzeigen&lt;br /&gt;
 zypper repos&lt;br /&gt;
Die Variable &amp;lt;tt&amp;gt;$releasever&amp;lt;/tt&amp;gt; soll im &#039;&#039;&#039;Alias&#039;&#039;&#039; und im &#039;&#039;&#039;Dateinamen&#039;&#039;&#039; des Repo offensichtlich nicht verwendet werden.&lt;br /&gt;
: Der Alias steht im Repo am Anfang in eckigen Klammern.&lt;br /&gt;
Beipiel für eine Repo Datei&lt;br /&gt;
 [openSUSE-Leap_ISO]&lt;br /&gt;
 name=openSUSE $releasever - ISO&lt;br /&gt;
 enabled=1&lt;br /&gt;
 autorefresh=0&lt;br /&gt;
 baseurl=http://10.0.0.111/suse_$releasever&lt;br /&gt;
 path=/&lt;br /&gt;
 keeppackages=0&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
==== Zielverzeichnis ====&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 targetDir=/local/share/download/iso&lt;br /&gt;
* Zielverzeichnis für HTTP Repository&lt;br /&gt;
 # Webserver auf einem Raspberry PI&lt;br /&gt;
 targetDir=/var/www/html&lt;br /&gt;
 # Webserver auf einem Suse System&lt;br /&gt;
 targetDir=/srv/www/htdocs&lt;br /&gt;
&lt;br /&gt;
==== Download durchführen ====&lt;br /&gt;
 cd $targetDir&lt;br /&gt;
 fileName=&amp;quot;openSUSE-Leap-15.4-DVD-x86_64-Media.iso&amp;quot;&lt;br /&gt;
 wget ftp://ftp5.gwdg.de/pub/opensuse/distribution/leap/${new}/iso/$fileName&lt;br /&gt;
 wget ftp://ftp5.gwdg.de/pub/opensuse/distribution/leap/${new}/iso/$fileName.sha256&lt;br /&gt;
 sha256sum $fileName&lt;br /&gt;
&lt;br /&gt;
==== ... oder von DVD clonen ====&lt;br /&gt;
 dd if=/dev/cdrom of=$targetDir/$fileName bs=4M status=progress oflag=sync&lt;br /&gt;
&lt;br /&gt;
=== Installationsquelle - ISO Datei ===&lt;br /&gt;
Mit YAST kann man die ISO Datei direkt als lokales Repository einbinden.&lt;br /&gt;
&lt;br /&gt;
Will man die Installationsquelle im LAN bereitstellen, kann man das über HTTP oder NFS machen.&lt;br /&gt;
==== HTTP Repository ====&lt;br /&gt;
Wenn man im LAN einen Webserver betreibt, z.B auf einem Raspberry PI, so kann man die Suse DVD per HTTP Repo verfügbar machen.&lt;br /&gt;
&lt;br /&gt;
Damit die Suse Installationsquellen immer verfügbar sind, kann man die ISO Datei beim Systemstart einbinden.&lt;br /&gt;
 echo &amp;quot;$fileName  /var/www/html/suse  iso9660 loop,ro,auto  0  0&amp;quot; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
Es wird eine Zeile zur &amp;lt;tt&amp;gt;/etc/fstab&amp;lt;/tt&amp;gt; hinzugefügt&lt;br /&gt;
&lt;br /&gt;
==== ... oder NFS Share ====&lt;br /&gt;
Das ISO image wird als Loop Device in das System eingehängt&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 mkdir /mnt/suse &lt;br /&gt;
 mount -o loop $targetDir/$fileName /mnt/suse&lt;br /&gt;
Nun muss man ein NFS Share erzeugen in der Datei &amp;lt;code&amp;gt; /etc/exports &amp;lt;/code&amp;gt;&lt;br /&gt;
 network=10.0.0.0/24 # Beispiel&lt;br /&gt;
 echo &amp;quot;/mnt/suse  $network(ro,root_squash,sync,no_subtree_check,insecure)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
Das kann auch mit YAST / Netzwerkdienste gemacht werden.&lt;br /&gt;
&lt;br /&gt;
Nun den NFS Server starten&lt;br /&gt;
 rcnfs start&lt;br /&gt;
&lt;br /&gt;
=== Upgrade durchführen ===&lt;br /&gt;
Mit YAST &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;kontrollieren&amp;lt;/span&amp;gt;, ob die Suse Installationsdateien als lokale ISO-Datei oder über NFS oder HTTP als &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Repository&amp;lt;/span&amp;gt; eingebunden ist.&lt;br /&gt;
: Wenn das nicht der Fall ist, wird beim Upgrade mit &amp;lt;tt&amp;gt;zypper&amp;lt;/tt&amp;gt; alles aus dem Internet geholt.&lt;br /&gt;
 &lt;br /&gt;
 # Upgrade durchführen&lt;br /&gt;
 zypper --releasever $new dup --dry-run --allow-vendor-change --auto-agree-with-licenses&lt;br /&gt;
 zypper --releasever $new dup --allow-vendor-change --auto-agree-with-licenses&lt;br /&gt;
: .. oder neue Version direkt eingeben&lt;br /&gt;
 zypper --releasever 15.3 dup --dry-run --allow-vendor-change --auto-agree-with-licenses&lt;br /&gt;
 zypper --releasever 15.3 dup --allow-vendor-change --auto-agree-with-licenses&lt;br /&gt;
&lt;br /&gt;
== SUSE Systemupgrade per Script ==&lt;br /&gt;
Ein einfaches Script &amp;lt;tt&amp;gt;suse_upgrade.sh&amp;lt;/tt&amp;gt;, das den Updatevorgang mit &amp;lt;tt&amp;gt;zypper&amp;lt;/tt&amp;gt; ein wenig vereinfacht.&lt;br /&gt;
&lt;br /&gt;
Download von [https://grubit.at/download/bash/suse_upgrade.sh suse_upgrade.sh]&lt;br /&gt;
&lt;br /&gt;
== HowTo ==&lt;br /&gt;
[http://de.opensuse.org/Upgrade http://de.opensuse.org/Upgrade]&lt;br /&gt;
&lt;br /&gt;
== Software Repositories ==&lt;br /&gt;
Folgende Softwarequellen benötige ich zusätzlich zu den Standard Repositories.&lt;br /&gt;
=== Packman ===&lt;br /&gt;
Hinzufügen mit YAST oder ...&lt;br /&gt;
 new=15.3&lt;br /&gt;
 zypper addrepo -cfp 90 http://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Leap_$new/ packman&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Benötigt für !! Hinweise || Datum&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pdftk&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;pdftk&amp;lt;/code&amp;gt;wird benötigt von meinem Skript &amp;lt;code&amp;gt;/usr/local/bin/indexprint.sh&amp;lt;/code&amp;gt; || Juli 2018&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp; ||  || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp; ||  || &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Konsole&amp;diff=1813</id>
		<title>Konsole</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Konsole&amp;diff=1813"/>
		<updated>2026-02-18T20:20:09Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Konsole Profile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Farben ==&lt;br /&gt;
 dircolors -p &amp;gt; ~/.dircolors &lt;br /&gt;
Es wird eine Datei erzeugt, die man bearbeiten kann&lt;br /&gt;
 nano ~/.dircolors&lt;br /&gt;
Folgende Zeile in &amp;lt;tt&amp;gt;~/.bashrc&amp;lt;/tt&amp;gt; eintragen:&lt;br /&gt;
 eval &amp;quot;$(dircolors -b ~/.dircolors)&amp;quot;&lt;br /&gt;
Dann &amp;lt;tt&amp;gt;~/.bashrc&amp;lt;/tt&amp;gt; neu einlesen&lt;br /&gt;
 source ~/.bashrc&lt;br /&gt;
Nun werden die neuen Farben beim Öffnen des Terminal Emulators angewendet.&lt;br /&gt;
&lt;br /&gt;
Nähere Infos siehe https://wiki.ubuntuusers.de/dircolors/&lt;br /&gt;
&lt;br /&gt;
== Konsole Lesezeichen ==&lt;br /&gt;
Hat man im Terminalprogramm Konsole Lesezeichen angelegt, so finden sich diese abhängig von der Desktop Umgebung hier:&lt;br /&gt;
 ~/.kde4/share/apps/konsole/bookmarks.xml&lt;br /&gt;
 ~/.local/share/apps/konsole/bookmarks.xml&lt;br /&gt;
&lt;br /&gt;
== Konsole Profile ==&lt;br /&gt;
Die Profile finden sich im gleichen Verzeichnis in je einer Datei mit der Endung &amp;lt;tt&amp;gt;.profile&amp;lt;/tt&amp;gt;&lt;br /&gt;
 cd ~/.local/share/konsole/&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 MyShell.profile&lt;br /&gt;
Das Profil für die Root Shell befindet sich in dieser Datei:&lt;br /&gt;
 &amp;quot;/usr/share/konsole/Root Shell.profile&amp;quot;&lt;br /&gt;
Eventuell Rechte ändern&lt;br /&gt;
 cd /usr/share/konsole/&lt;br /&gt;
 chown &amp;lt;username&amp;gt; *.profile&lt;br /&gt;
== Virtuelle Konsolen - TTY ==&lt;br /&gt;
=== Schriftgröße ändern ===&lt;br /&gt;
Falls Terminus Fonts nicht installiert sind&lt;br /&gt;
 sudo zypper install terminus-bitmap-fonts&lt;br /&gt;
Verfügbare Terminus Fonts anzeigen&lt;br /&gt;
 ls /usr/share/kbd/consolefonts | grep ter&lt;br /&gt;
Große Schrift laden&lt;br /&gt;
 sudo setfont ter-v32n&lt;br /&gt;
Font dauerhaft speichern in Datei&lt;br /&gt;
 # /etc/vconsole.conf&lt;br /&gt;
 FONT=ter-v32n&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Keyboard&amp;diff=1812</id>
		<title>Keyboard</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Keyboard&amp;diff=1812"/>
		<updated>2026-02-15T20:52:50Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Deutsche Tastatur laden ==&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
 sudo localectl set-keymap de&lt;br /&gt;
 sudo localectl set-x11-keymap de&lt;br /&gt;
=== Debian - Ubuntu ===&lt;br /&gt;
 dpkg-reconfigure keyboard-configuration&lt;br /&gt;
== Sonderzeichen ==&lt;br /&gt;
Viele Programme bieten eine Möglichkeit zum Einfügen von Sonderzeichen.&lt;br /&gt;
Wenn ein Programm dies nicht anbietet, dann kann man mit der App &amp;lt;tt&amp;gt;KCharSet&amp;lt;/tt&amp;gt; alle Sonderzeichen finden und einfügen.&lt;br /&gt;
=== Tastenkombinationen ===&lt;br /&gt;
Akzente, die man häufig braucht, kann man auf folgende Art eingeben&lt;br /&gt;
* Zuerst das gewünschte Akzentzeichen (z.B. &#039;&#039;&#039;´&#039;&#039;&#039;) auf dem Keyboard drücken und loslassen&lt;br /&gt;
* Dann den gewünschten Buchstaben drücken - z.B &#039;&#039;&#039;e&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Systemupgrade&amp;diff=1811</id>
		<title>Systemupgrade</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Systemupgrade&amp;diff=1811"/>
		<updated>2026-02-14T12:43:36Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Repos modifizieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suse Systemupgrade - Schritt für Schritt ==&lt;br /&gt;
Eine Terminal (Konsole) Sitzung als Benutzer &#039;&#039;&#039;root&#039;&#039;&#039; starten.&lt;br /&gt;
* Die folgende Anleitung muss zwingend von oben nach unten dirchgearbeitet werden.&lt;br /&gt;
* Den Code von jedem Abschnitt kopieren und dann gleich im Terminal ausführen.&lt;br /&gt;
* Die Reihenfolge muss eingehalten werden, da Variable gesetzt werden, die in nachfolgenden Schritten verwendet werden.&lt;br /&gt;
* Alles muss im selben Terminal (Konsole) Fenster durchgeführt werden&lt;br /&gt;
&lt;br /&gt;
=== Version ===&lt;br /&gt;
Die neue Versionsnummer wird in der Variablen &amp;lt;tt&amp;gt;$new&amp;lt;/tt&amp;gt; abgelegt.&lt;br /&gt;
 old=`cat /etc/os-release | grep VERSION_ID | cut -d &amp;quot;=&amp;quot; -f 2 | sed &#039;s/&amp;quot;//g&#039;`&lt;br /&gt;
 main=$(echo $old | cut -d &amp;quot;.&amp;quot; -f 1)&lt;br /&gt;
 sub=$(echo $old | cut -d &amp;quot;.&amp;quot; -f 2)&lt;br /&gt;
 new=$main.$(expr $sub + 1)&lt;br /&gt;
 echo $new&lt;br /&gt;
&lt;br /&gt;
=== Repos modifizieren ===&lt;br /&gt;
Dieser Schritt korrigiert Repositories, wenn nötig.&lt;br /&gt;
 # Hardcodierte Versionsnummern durch die Variable &amp;lt;tt&amp;gt;$releasever&amp;lt;/tt&amp;gt; ersetzen&lt;br /&gt;
 rm /etc/zypp/repos.d.bak -R 2&amp;gt; /dev/null&lt;br /&gt;
 cp -a /etc/zypp/repos.d /etc/zypp/repos.d.bak&lt;br /&gt;
 cd /etc/zypp/repos.d&lt;br /&gt;
 find . -type f | \&lt;br /&gt;
 while read file ; do &lt;br /&gt;
    # Suchen und ersetzen:&lt;br /&gt;
    cp &amp;quot;$file&amp;quot; datei.tmp&lt;br /&gt;
    sed -e s/$old/\$releasever/g datei.tmp &amp;gt; &amp;quot;$file&amp;quot;&lt;br /&gt;
    sed -e s/$new/\$releasever/g datei.tmp &amp;gt; &amp;quot;$file&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 rm datei.tmp&lt;br /&gt;
 &lt;br /&gt;
 # Versionsname aus repo-Dateinamen entfernen&lt;br /&gt;
 for file in * ; do&lt;br /&gt;
    oldname=`basename &amp;quot;$file&amp;quot;`&lt;br /&gt;
    newname=`echo $oldname | sed -e s/$old/&amp;quot;&amp;quot;/`&lt;br /&gt;
    if [ &amp;quot;$newname&amp;quot; != &amp;quot;$oldname&amp;quot; ] ; then&lt;br /&gt;
       mv &amp;quot;`pwd`/$oldname&amp;quot; &amp;quot;`pwd`/$newname&amp;quot; &lt;br /&gt;
    fi&lt;br /&gt;
    newname=`echo $oldname | sed -e s/$new/&amp;quot;&amp;quot;/`&lt;br /&gt;
    if [ &amp;quot;$newname&amp;quot; != &amp;quot;$oldname&amp;quot; ] ; then&lt;br /&gt;
       mv &amp;quot;`pwd`/$oldname&amp;quot; &amp;quot;`pwd`/$newname&amp;quot; &lt;br /&gt;
    fi&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 # Repos anzeigen&lt;br /&gt;
 zypper repos&lt;br /&gt;
Die Variable &amp;lt;tt&amp;gt;$releasever&amp;lt;/tt&amp;gt; soll im &#039;&#039;&#039;Alias&#039;&#039;&#039; und im &#039;&#039;&#039;Dateinamen&#039;&#039;&#039; des Repo offensichtlich nicht verwendet werden.&lt;br /&gt;
: Der Alias steht im Repo am Anfang in eckigen Klammern.&lt;br /&gt;
Beipiel für eine Repo Datei&lt;br /&gt;
 [openSUSE-Leap_ISO]&lt;br /&gt;
 name=openSUSE $releasever - ISO&lt;br /&gt;
 enabled=1&lt;br /&gt;
 autorefresh=0&lt;br /&gt;
 baseurl=http://10.0.0.111/suse_$releasever&lt;br /&gt;
 path=/&lt;br /&gt;
 keeppackages=0&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
==== Zielverzeichnis ====&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 targetDir=/local/share/download/iso&lt;br /&gt;
* Zielverzeichnis für HTTP Repository&lt;br /&gt;
 # Webserver auf einem Raspberry PI&lt;br /&gt;
 targetDir=/var/www/html&lt;br /&gt;
 # Webserver auf einem Suse System&lt;br /&gt;
 targetDir=/srv/www/htdocs&lt;br /&gt;
&lt;br /&gt;
==== Download durchführen ====&lt;br /&gt;
 cd $targetDir&lt;br /&gt;
 fileName=&amp;quot;openSUSE-Leap-15.4-DVD-x86_64-Media.iso&amp;quot;&lt;br /&gt;
 wget ftp://ftp5.gwdg.de/pub/opensuse/distribution/leap/${new}/iso/$fileName&lt;br /&gt;
 wget ftp://ftp5.gwdg.de/pub/opensuse/distribution/leap/${new}/iso/$fileName.sha256&lt;br /&gt;
 sha256sum $fileName&lt;br /&gt;
&lt;br /&gt;
==== ... oder von DVD clonen ====&lt;br /&gt;
 dd if=/dev/cdrom of=$targetDir/$fileName&lt;br /&gt;
&lt;br /&gt;
=== Installationsquelle - ISO Datei ===&lt;br /&gt;
Mit YAST kann man die ISO Datei direkt als lokales Repository einbinden.&lt;br /&gt;
&lt;br /&gt;
Will man die Installationsquelle im LAN bereitstellen, kann man das über HTTP oder NFS machen.&lt;br /&gt;
==== HTTP Repository ====&lt;br /&gt;
Wenn man im LAN einen Webserver betreibt, z.B auf einem Raspberry PI, so kann man die Suse DVD per HTTP Repo verfügbar machen.&lt;br /&gt;
&lt;br /&gt;
Damit die Suse Installationsquellen immer verfügbar sind, kann man die ISO Datei beim Systemstart einbinden.&lt;br /&gt;
 echo &amp;quot;$fileName  /var/www/html/suse  iso9660 loop,ro,auto  0  0&amp;quot; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
Es wird eine Zeile zur &amp;lt;tt&amp;gt;/etc/fstab&amp;lt;/tt&amp;gt; hinzugefügt&lt;br /&gt;
&lt;br /&gt;
==== ... oder NFS Share ====&lt;br /&gt;
Das ISO image wird als Loop Device in das System eingehängt&lt;br /&gt;
 # Beispiel&lt;br /&gt;
 mkdir /mnt/suse &lt;br /&gt;
 mount -o loop $targetDir/$fileName /mnt/suse&lt;br /&gt;
Nun muss man ein NFS Share erzeugen in der Datei &amp;lt;code&amp;gt; /etc/exports &amp;lt;/code&amp;gt;&lt;br /&gt;
 network=10.0.0.0/24 # Beispiel&lt;br /&gt;
 echo &amp;quot;/mnt/suse  $network(ro,root_squash,sync,no_subtree_check,insecure)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
Das kann auch mit YAST / Netzwerkdienste gemacht werden.&lt;br /&gt;
&lt;br /&gt;
Nun den NFS Server starten&lt;br /&gt;
 rcnfs start&lt;br /&gt;
&lt;br /&gt;
=== Upgrade durchführen ===&lt;br /&gt;
Mit YAST &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;kontrollieren&amp;lt;/span&amp;gt;, ob die Suse Installationsdateien als lokale ISO-Datei oder über NFS oder HTTP als &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Repository&amp;lt;/span&amp;gt; eingebunden ist.&lt;br /&gt;
: Wenn das nicht der Fall ist, wird beim Upgrade mit &amp;lt;tt&amp;gt;zypper&amp;lt;/tt&amp;gt; alles aus dem Internet geholt.&lt;br /&gt;
 &lt;br /&gt;
 # Upgrade durchführen&lt;br /&gt;
 zypper --releasever $new dup --dry-run --allow-vendor-change --auto-agree-with-licenses&lt;br /&gt;
 zypper --releasever $new dup --allow-vendor-change --auto-agree-with-licenses&lt;br /&gt;
: .. oder neue Version direkt eingeben&lt;br /&gt;
 zypper --releasever 15.3 dup --dry-run --allow-vendor-change --auto-agree-with-licenses&lt;br /&gt;
 zypper --releasever 15.3 dup --allow-vendor-change --auto-agree-with-licenses&lt;br /&gt;
&lt;br /&gt;
== SUSE Systemupgrade per Script ==&lt;br /&gt;
Ein einfaches Script &amp;lt;tt&amp;gt;suse_upgrade.sh&amp;lt;/tt&amp;gt;, das den Updatevorgang mit &amp;lt;tt&amp;gt;zypper&amp;lt;/tt&amp;gt; ein wenig vereinfacht.&lt;br /&gt;
&lt;br /&gt;
Download von [https://grubit.at/download/bash/suse_upgrade.sh suse_upgrade.sh]&lt;br /&gt;
&lt;br /&gt;
== HowTo ==&lt;br /&gt;
[http://de.opensuse.org/Upgrade http://de.opensuse.org/Upgrade]&lt;br /&gt;
&lt;br /&gt;
== Software Repositories ==&lt;br /&gt;
Folgende Softwarequellen benötige ich zusätzlich zu den Standard Repositories.&lt;br /&gt;
=== Packman ===&lt;br /&gt;
Hinzufügen mit YAST oder ...&lt;br /&gt;
 new=15.3&lt;br /&gt;
 zypper addrepo -cfp 90 http://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Leap_$new/ packman&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Benötigt für !! Hinweise || Datum&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pdftk&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;pdftk&amp;lt;/code&amp;gt;wird benötigt von meinem Skript &amp;lt;code&amp;gt;/usr/local/bin/indexprint.sh&amp;lt;/code&amp;gt; || Juli 2018&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp; ||  || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp; ||  || &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=Partitionen_und_Dateisysteme&amp;diff=1810</id>
		<title>Partitionen und Dateisysteme</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=Partitionen_und_Dateisysteme&amp;diff=1810"/>
		<updated>2026-02-13T11:05:57Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* NTFS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dateisystem Größe ändern ==&lt;br /&gt;
Das Ändern der Partitionsgröße mit &amp;lt;code&amp;gt;fdisk&amp;lt;/code&amp;gt; löscht keine Daten. &lt;br /&gt;
: Nach dem Ändern der Partitionsgröße muss jedoch das Dateisystem an die neue Größe angepasst werden.&lt;br /&gt;
&lt;br /&gt;
=== ext4 ===&lt;br /&gt;
 e2fsck -f /dev/sda3&lt;br /&gt;
 resize2fs /dev/sda3&lt;br /&gt;
=== ext3 ===&lt;br /&gt;
* Journal löschen&lt;br /&gt;
 tune2fs -O ^has_journal /dev/sda1&lt;br /&gt;
Damit wird aus dem ext3 ein ext2 Filesystem.&lt;br /&gt;
* Filesystemcheck durchführen&lt;br /&gt;
 e2fsck -f /dev/sda1&lt;br /&gt;
* Größe des Filesystems ändern&lt;br /&gt;
Vergrößern auf Partitionsgröße&lt;br /&gt;
 resize2fs /dev/sda1&lt;br /&gt;
Vergrößern oder verkleinern auf bestimmte Größe - resize&lt;br /&gt;
 resize2fs /dev/sda1 6000M&lt;br /&gt;
* Neues Journal erzeugen&lt;br /&gt;
 tune2fs -j /dev/sda1&lt;br /&gt;
Jetzt haben wir wieder ein ext3 Filesystem mit der neuen Größe.&lt;br /&gt;
&lt;br /&gt;
== Dateisystem konvertieren ==&lt;br /&gt;
=== ext2 nach ext4 ===&lt;br /&gt;
 tune2fs -O extents,uninit_bg,dir_index,has_journal /dev/sda1&lt;br /&gt;
=== ext2 nach ext3 ===&lt;br /&gt;
 tune2fs -O extents,uninit_bg,dir_index /dev/sda1&lt;br /&gt;
=== btrfs nach ext4 ===&lt;br /&gt;
Mittels Live System und &#039;&#039;&#039;rsync&#039;&#039;&#039; alle Daten auf andere Platte kopieren.&lt;br /&gt;
Auf der btrfs Partition ein ext4 Dateisystem erzeugen, also die Partition neu formatieren.&lt;br /&gt;
Daten mit &#039;&#039;&#039;rsync&#039;&#039;&#039; zurückkopieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/etc/fstab&#039;&#039;&#039; und &#039;&#039;&#039;/etc/default/grub_installdevice&#039;&#039;&#039; ändern.&lt;br /&gt;
Bootmanager neu installieren.&lt;br /&gt;
&lt;br /&gt;
Achtung:&lt;br /&gt;
&lt;br /&gt;
Das System bootet nicht, wenn in &amp;lt;code&amp;gt;/etc/fstab &amp;lt;/code&amp;gt;der automatische Filesystemcheck deaktiviert ist:&lt;br /&gt;
System bootet nicht nach Änderung des Filesystems:&lt;br /&gt;
 # /etc/fstab&lt;br /&gt;
 /dev/sdb1 / ext4 defaults 0 0&lt;br /&gt;
&lt;br /&gt;
Geänderter Eintrag - System bootet, da Filesystemcheck angestoßen wird.&lt;br /&gt;
 # /etc/fstab&lt;br /&gt;
 /dev/sdb1 / ext4 defaults 0 1&lt;br /&gt;
== Defekte Blocke im Dateisystem ==&lt;br /&gt;
 badblocks -v /dev/sde1 &amp;gt; bad-blocks&lt;br /&gt;
 fsck -t ext4 -l ./bad-blocks /dev/sde1&lt;br /&gt;
== Superblock reparieren ==&lt;br /&gt;
* Superblock Kopien anzeigen&lt;br /&gt;
Folgender Befehl zeigt die Blöcke an, in denen die Kopien des Superblocks gespeichert sind&lt;br /&gt;
 mke2fs -n /dev/xxx&lt;br /&gt;
* Superblock wiederherstellen&lt;br /&gt;
Nun eine der Nummern auswählen und als Parameter für folgenden Befehl verwenden&lt;br /&gt;
 e2fsck -b block_number /dev/xxx&lt;br /&gt;
&lt;br /&gt;
== Dateisystem prüfen ==&lt;br /&gt;
 e2fsck -pf /dev/sda1&lt;br /&gt;
* Prüfung erzwingen beim Neustart&lt;br /&gt;
Eine Datei mit dem Namen &amp;lt;tt&amp;gt;forcefsck&amp;lt;/tt&amp;gt; anlegen.&lt;br /&gt;
 touch /forcefsck&lt;br /&gt;
 reboot&lt;br /&gt;
Nach dem Reboot wird diese Datei automatisch wieder gelöscht.&lt;br /&gt;
&lt;br /&gt;
== Label ==&lt;br /&gt;
=== Linux Filesysteme ===&lt;br /&gt;
 tune2fs -L &amp;quot;LinuxFS&amp;quot; /dev/sdc2&lt;br /&gt;
=== FAT / VFAT ===&lt;br /&gt;
 dosfslabel /dev/sdd1 &amp;quot;H4NPRO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== NTFS ==&lt;br /&gt;
* Partition formatieren&lt;br /&gt;
 mkfs.ntfs -Q /dev/sdc1&lt;br /&gt;
Ohne die Option &#039;&#039;&#039;-Q&#039;&#039;&#039; dauert das Formatieren sehr lang.&lt;br /&gt;
* Label&lt;br /&gt;
  ntfslabel /dev/sdc4 &amp;quot;WindowsNTFS&amp;quot;&lt;br /&gt;
=== NTFS Partition verkleinern ===&lt;br /&gt;
* Partition prüfen&lt;br /&gt;
 sudo ntfsresize --info /dev/nvme0n1p3&lt;br /&gt;
* Größe des NTFS Dateisystems festlegen&lt;br /&gt;
 sudo ntfsresize --size 100G /dev/nvme0n1p3&lt;br /&gt;
&lt;br /&gt;
== exFAT ==&lt;br /&gt;
Keine Beschränkung der Dateigröße auf 4GB&lt;br /&gt;
* Partition formatieren und Label vergeben&lt;br /&gt;
 mkfs.exfat -L &amp;quot;exFAT_150GB&amp;quot; /dev/sdd1&lt;br /&gt;
Voraussetzung: Unter Suse Linux muss das Paket &amp;lt;tt&amp;gt;exfatprogs&amp;lt;/tt&amp;gt; installiert werden.&lt;br /&gt;
&lt;br /&gt;
== VFAT ==&lt;br /&gt;
* Partition formatieren&lt;br /&gt;
Zum Beispiel einen USB Stick&lt;br /&gt;
 mkfs.vfat /dev/sdd1&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=SUSE&amp;diff=1809</id>
		<title>SUSE</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=SUSE&amp;diff=1809"/>
		<updated>2026-02-10T18:05:10Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Installation über NET Image */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openSUSE Leap 16.0 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
==== Agama testen ====&lt;br /&gt;
* Download von https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/&lt;br /&gt;
 wget https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/agama-installer.x86_64-openSUSE.iso&lt;br /&gt;
 wget https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/agama-installer.x86_64-openSUSE.iso&lt;br /&gt;
 wget https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/agama-installer.x86_64-openSUSE.iso.sha256.asc&lt;br /&gt;
* Prüfsumme verifizieren&lt;br /&gt;
 sha256sum agama-installer.x86_64-openSUSE.iso&lt;br /&gt;
 cat agama-installer.x86_64-openSUSE.iso.sha256&lt;br /&gt;
Beide Codes (Hashes) müssen exakt übereinstimmen.&lt;br /&gt;
* ISO auf USB Datenträger kopieren&lt;br /&gt;
 sudo dd if=agama-installer.x86_64-openSUSE.iso of=/dev/sdX bs=4M status=progress oflag=sync&lt;br /&gt;
 sync&lt;br /&gt;
==== Installation über NET Image ====&lt;br /&gt;
 wget https://download.opensuse.org/distribution/leap/16.0/offline/Leap-16.0-online-installer-x86_64.install.iso&lt;br /&gt;
 wget https://download.opensuse.org/distribution/leap/16.0/offline/Leap-16.0-online-installer-x86_64.install.iso.sha256&lt;br /&gt;
 wget https://download.opensuse.org/distribution/leap/16.0/offline/Leap-16.0-online-installer-x86_64.install.iso.sha256.asc&lt;br /&gt;
Prüfsumme verifizieren&lt;br /&gt;
 sha256sum Leap-16.0-offline-installer-x86_64.install.iso &lt;br /&gt;
 cat Leap-16.0-offline-installer-x86_64.install.iso&lt;br /&gt;
* Aufgezählter Listeneintrag&lt;br /&gt;
* ISO auf USB Datenträger kopieren&lt;br /&gt;
 sudo dd if=Leap-16.0-online-installer-x86_64.install.iso of=/dev/sdX bs=4M status=progress oflag=sync&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=SUSE&amp;diff=1808</id>
		<title>SUSE</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=SUSE&amp;diff=1808"/>
		<updated>2026-02-10T18:03:17Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Installation über NET Image */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openSUSE Leap 16.0 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
==== Agama testen ====&lt;br /&gt;
* Download von https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/&lt;br /&gt;
 wget https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/agama-installer.x86_64-openSUSE.iso&lt;br /&gt;
 wget https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/agama-installer.x86_64-openSUSE.iso&lt;br /&gt;
 wget https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/agama-installer.x86_64-openSUSE.iso.sha256.asc&lt;br /&gt;
* Prüfsumme verifizieren&lt;br /&gt;
 sha256sum agama-installer.x86_64-openSUSE.iso&lt;br /&gt;
 cat agama-installer.x86_64-openSUSE.iso.sha256&lt;br /&gt;
Beide Codes (Hashes) müssen exakt übereinstimmen.&lt;br /&gt;
* ISO auf USB Datenträger kopieren&lt;br /&gt;
 sudo dd if=agama-installer.x86_64-openSUSE.iso of=/dev/sdX bs=4M status=progress oflag=sync&lt;br /&gt;
 sync&lt;br /&gt;
==== Installation über NET Image ====&lt;br /&gt;
 wget https://download.opensuse.org/distribution/leap/16.0/offline/Leap-16.0-online-installer-x86_64.install.iso&lt;br /&gt;
 wget https://download.opensuse.org/distribution/leap/16.0/offline/Leap-16.0-online-installer-x86_64.install.iso.sha256&lt;br /&gt;
 wget https://download.opensuse.org/distribution/leap/16.0/offline/Leap-16.0-online-installer-x86_64.install.iso.sha256.asc&lt;br /&gt;
Prüfsumme verifizieren&lt;br /&gt;
 sha256sum Leap-16.0-online-installer-x86_64.install.iso &lt;br /&gt;
 cat Leap-16.0-online-installer-x86_64.install.iso&lt;br /&gt;
* Aufgezählter Listeneintrag&lt;br /&gt;
* ISO auf USB Datenträger kopieren&lt;br /&gt;
 sudo dd if=Leap-16.0-online-installer-x86_64.install.iso of=/dev/sdX bs=4M status=progress oflag=sync&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=SUSE&amp;diff=1807</id>
		<title>SUSE</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=SUSE&amp;diff=1807"/>
		<updated>2026-02-10T18:01:22Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Installation über NET Image */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openSUSE Leap 16.0 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
==== Agama testen ====&lt;br /&gt;
* Download von https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/&lt;br /&gt;
 wget https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/agama-installer.x86_64-openSUSE.iso&lt;br /&gt;
 wget https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/agama-installer.x86_64-openSUSE.iso&lt;br /&gt;
 wget https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/agama-installer.x86_64-openSUSE.iso.sha256.asc&lt;br /&gt;
* Prüfsumme verifizieren&lt;br /&gt;
 sha256sum agama-installer.x86_64-openSUSE.iso&lt;br /&gt;
 cat agama-installer.x86_64-openSUSE.iso.sha256&lt;br /&gt;
Beide Codes (Hashes) müssen exakt übereinstimmen.&lt;br /&gt;
* ISO auf USB Datenträger kopieren&lt;br /&gt;
 sudo dd if=agama-installer.x86_64-openSUSE.iso of=/dev/sdX bs=4M status=progress oflag=sync&lt;br /&gt;
 sync&lt;br /&gt;
==== Installation über NET Image ====&lt;br /&gt;
 wget https://download.opensuse.org/distribution/leap/16.0/offline/Leap-16.0-online-installer-x86_64.install.iso&lt;br /&gt;
 wget https://download.opensuse.org/distribution/leap/16.0/offline/Leap-16.0-online-installer-x86_64.install.iso.sha256&lt;br /&gt;
 wget https://download.opensuse.org/distribution/leap/16.0/offline/Leap-16.0-online-installer-x86_64.install.iso.sha256.asc&lt;br /&gt;
Prüfsumme verifizieren&lt;br /&gt;
* Aufgezählter Listeneintrag&lt;br /&gt;
* ISO auf USB Datenträger kopieren&lt;br /&gt;
 sudo dd if=Leap-16.0-online-installer-x86_64.install.iso of=/dev/sdX bs=4M status=progress oflag=sync&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>https://grubit.at/fg_mediawiki/index.php?title=SUSE&amp;diff=1806</id>
		<title>SUSE</title>
		<link rel="alternate" type="text/html" href="https://grubit.at/fg_mediawiki/index.php?title=SUSE&amp;diff=1806"/>
		<updated>2026-02-10T17:57:27Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openSUSE Leap 16.0 ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
==== Agama testen ====&lt;br /&gt;
* Download von https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/&lt;br /&gt;
 wget https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/agama-installer.x86_64-openSUSE.iso&lt;br /&gt;
 wget https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/agama-installer.x86_64-openSUSE.iso&lt;br /&gt;
 wget https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/agama-installer.x86_64-openSUSE.iso.sha256.asc&lt;br /&gt;
* Prüfsumme verifizieren&lt;br /&gt;
 sha256sum agama-installer.x86_64-openSUSE.iso&lt;br /&gt;
 cat agama-installer.x86_64-openSUSE.iso.sha256&lt;br /&gt;
Beide Codes (Hashes) müssen exakt übereinstimmen.&lt;br /&gt;
* ISO auf USB Datenträger kopieren&lt;br /&gt;
 sudo dd if=agama-installer.x86_64-openSUSE.iso of=/dev/sdX bs=4M status=progress oflag=sync&lt;br /&gt;
 sync&lt;br /&gt;
==== Installation über NET Image ====&lt;br /&gt;
 wget https://download.opensuse.org/distribution/leap/16.0/offline/Leap-16.0-online-installer-x86_64.install.iso&lt;br /&gt;
 wget https://download.opensuse.org/distribution/leap/16.0/offline/Leap-16.0-online-installer-x86_64.install.iso.sha256&lt;br /&gt;
 wget https://download.opensuse.org/distribution/leap/16.0/offline/Leap-16.0-online-installer-x86_64.install.iso.sha256.asc&lt;br /&gt;
* ISO auf USB Datenträger kopieren&lt;br /&gt;
 sudo dd if=Leap-16.0-online-installer-x86_64.install.iso of=/dev/sdX bs=4M status=progress oflag=sync&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
</feed>