Ubuntu Server 21.04 Error bei apt update

Wer wie ich auf Ubuntu 21.04 direkt nach der Installation apt update startet, mag in einen Fehler laufen.
Die Lösung ist so einfach wie trivial: In der Datei /etc/apt/sources.list müssen die Paketquellen angepasst werden. In diesem Thread habe ich folgenden Codeschnipsel mitgenommen:

sed -i -e 's/archive.ubuntu.com\|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list

Danach apt update laufen lassen.

Proxmox auf Raspberry

Proxmox auf Raspberry

Für viele kleine Projekte, z.B. als Medienserver, bietet sich der Raspberry wunderbar an und erledigt zuverlässig seine Unterhaltungsaufgaben. Nun hat ein zweiter Raspberry4 mit 8GB Ram Einzug gehalten.
Auf diesem werde ich zum Spaß ein kleines virtuelles Rechenzentrum installieren – und zu Hause einige Aufgaben erfüllen lassen.
Als Basis hierzu dient ein RPI4 8GB, verbaut in einem Argon M.2 Gehäuse. Die Installation von Proxmox an sich geht äusserst simpel von der Hand, Michael Bachmann hat hier eine hervorragende und ausführliche Doku erstellt.
Mein Beitrag dient meiner eigenen Doku, daher werde ich lediglich die abgespeckte und gekürzte Version schreiben.

Raspberry Pi OS 64 Bit installieren

Ein aktuelles Raspi Debian Bullseye herunterladen und z.B. mit Etcher auf die SD Karte kopieren.

Automatische Installation von Pimox7

pi@pimox:~# sudo -s

root@pimox:~# curl https://raw.githubusercontent.com/pimox/pimox7/master/RPiOS64-IA-Install.sh > RPiOS64-IA-Install.sh

root@pimox:~# chmod +x RPiOS64-IA-Install.sh

root@pimox:~# ./RPiOS64-IA-Install.sh

Nacharbeiten
Danach mittels apt das ganze System aktualisieren und neustarten.
Login Url: https://proxmox.schmuttermaier.com:8006

Wenig später habt ihr ein hervorragendes Virtualisierungs System:

Kodi 18 & Metropolis Skin

Kodi 18 & Metropolis Skin

Metropolis Skin Kodi V19

Wer wie ich seine komplette DVD Sammlung in den Keller geräumt hat, kommt um einen vernünftigen Medienplayer nicht herum. Kodi ist mein Mittel der Wahl, und ich möchte das Gerät nicht mehr hergeben!

Meine Installation läuft auf einem Raspberry mit den Beta Builds von Milhouse, und das äusserst stabil. Lediglich die Standard Benutzeroberfläche hat mir nicht gefallen. Sie ist nicht schlecht, aber die Bedienlogik war zu nahe an einem PC und nicht unbedingt Wohnzimmertauglich.

In diversen Repos (und ich rate dringend dazu nur die „offiziellen“ zu nehmen!!!) findet man sehr viele weitere Themen, aber meist sind das nur farbliche Varianten des Standardthemes. Wirklich bahnbrechend finde ich Rapir. Leider reicht die Performance des Raspberrys nicht wirklich aus um dieses Theme flüssig darzustellen. Da emfpiehlt es sich Kodi auf einem NUC laufen zu lassen.

Das Theme das meinen Vorstellungen am nächsten kommt ist

Metropolis

Metropolis lässt sich weiter anpassen und reduzieren. Zudem läuft es absolut flüssig auch bei wenig potenter Hardware.
Zudem ist Metropolit nun endlich für Kodi 18 portiert worden, und läuft somit auch wunderbar auf den Milhouse Builds.

Metropolis Homescreen

Metropolis Übersicht der zuletzt hinzugefügten Filme

(erweitert auf 100 Elemente)

Metropolis Übersicht Video

Metropolis Übersicht über Serien

Skin Metropolis Übersicht über die Systeminformation

Link zum aktuellen Repo für Skin:

https://github.com/MacGyverr/skin.metropolis/releases/download/3.4.22/skin.metropolis.zip

Oder auch gerne über diese Webseite:

skin.metropolis

DyDNS, FritzBox und All-inkl

DyDNS, FritzBox und All-inkl

In Deutschland ist die FritzBox des Herstellers AVM recht weit verbreitet. Und das aus gutem Grund: kaum ein anderes Gerät erhält so lange Sicherheitsupdates und Patches, lässt sich so einfach einrichten und bietet auf einfachem Weg so viele Möglichkeiten.

Zur Nutzung als VPN Endpoint, zur Freigabe heimatlicher Dienste oder aus purem Spieltrieb… Unten eine Anleitung wie ihr eure Fritzbox mit dem DynDNS Dienst von all-inkl.com verbindet. Dadurch erhaltet ihr einen DNS Namen der zuverlässig auf die externe IP Adresse eurer Fritzbox verweist.

Und das geht so:

Anmeldung im KAS (all-inkl)

Wenn ihr Kunde bei all-inkl.com seit, dann meldet euch mit euren persönlichen Zugangsdaten im KAS (KundenAdministrationsSystem) an.
Unter dem Punkt Tools -> DDNS-Einstellungen könnt ihr euren neuen Eintrag hinzufügen.

Einen neuen Eintrag generieren

Tragt hier eure Wunschdaten ein, wie z.B. die Subdomain die ihr einrichten möchtet. In meinem Beispiel oben lautet sie home.schmuttermaier.com
Denkt euch ein richtig gutes Passwort aus und hinterlegt eine Beschreibung damit ihr auch noch in einem Jahr wisst was ihr getrieben habt 😀

Den Eintrag in der FritzBox hinterlegen

Nun loggt euch auf der heimischen FritzBox ein. Dort navigiert ihr in das Menü Internet -> Freigaben und öffnet den Karteireiter DynDNS. Hier tragt ihr die oben eingerichteten Daten und Passwörter ein. Ob alles wie gewünscht funktioniert verrät euch die Fritzbox, wenn ihr nach dem Abspeichern wieder auf die Übersicht zurück wechselt. Steht dort rechts unten, bei DynDNS, aktiviert und erfolgreich angemeldet?!

Nun habt ihr erfolgreich einen DynDNS Account eingerichtet, und eure FritzBox ist nun dauerhaft unter der gewählten Subdomain erreichbar.

Keine Berechtigung auf USB Laufwerke

Keine Berechtigung auf USB Laufwerke

Bei meinem neuen HP Laptop der 400er Serie (HP pro Book 440 G5) hatte ich recht bald nach der Einrichtung von Windows 10 ein Problem. Ich konnte nicht auf angeschlossene USB Laufwerke zugreifen. Dabei war es irrelevant welches Dateisystem auf dem Gerät vorhanden war, weder NTFS noch exFat ließen einen Zugriff zu. Dabei wurden das USB Geärt einwandfrei von Windows erkannt und mit einem Laufwerksbuchstaben eingebunden,.

Wollte ich auf das USB Laufwerk (erst eine externe Festplatte, dann ein USB Stick) zugreifen, erhielt ich immer die Meldung:

Sie verfügen momentan nicht über die Berechtigung des Zugriffs auf diesen Ordner.

Eine Recherche im Internet förderte nicht wirklich viel hilfreiches zu Tage. Neben dem Klassiker: „Installier den Rechner einfach neu! … Oups das Problem ist immer noch da?“ fand ich noch ein paar Hinweise auf eine lokale Sicherheitsrichtlinie. Die Änderung dieser Richtlinie brachte gar nichts, überhaupt kein Effekt.

Erst als ich bemerkte das scheinbar ausschließlich HP Rechner davon betroffen waren wurde ich stutzig. Ich setzte mich an den Laptop und suchte in der mitgelieferten HP Software nach einem Anhaltspunkt. Und siehe da! Ein Programm mit dem Namen „Hp Client Security“ ist dafür zuständig den Zugriff auf USB, Blutooth, WLan etc. zu sichern.

Was an sich eine wirklich sehr gute Idee ist muss ein bischen beschrieben oder wenigstens darauf hingewiesen werden. In der Standardeinstellung ist nämlich sogar dem Administrator verboten auf USB Sticks zuzugreifen.

Sehr gut gefällt das sich anhand der Nutzergruppen der Zugriff einschränken lässt um so einem Datenabfluss vorzubeugen. Hat man die Einstellungen angepasst sind diese auch sofort aktiv und es braucht keinen Neustart.

DIVI Bildgrößen

DIVI Bildgrößen

Elegantthemes hat mit Divi wirklich eines der besten WordPress Themes, wenn nicht sogar das beste Theme überhaupt erschaffen. Es bietet unglaublich viele Möglichkeiten, ist Retina fähig und Responsive. ABER: Wie bei vielen anderen Theme Herstellern auch, erkauft man sich diese Funktionen durch viel zu große Bilddaten.

Ich verwende Bilder mit einer Kantenlänge von 2000 Pixel. Aus diesen Bildern werden aber leider keine kleineren Auflösungen generiert, beispielsweise für die Previewdaten in der Blogübersicht. Wenn nun also in der Übersicht bzw. auf der Startseite 6 Beiträge mit Vorschaubildern liegen, dann kommen hier insgesamt locker 10MB zusammen. Diese Seite dann in der U-Bahn über ein Mobilfunknetz zu laden dauert dann nicht nur bei O2 lange.

Dabei bietet doch WordPress selbst schon einige Funktionen an um mit untrschiedlichen Bildgrößen umzugehen. Diese werden aber von Elegantthemes durch eigene Funktionen ersetzt. Eine elegante Lösung habe ich dazu bei FLDTrace gefunden. Dieser Codeschnipsel erweitert die Functions.php um einige Funktionen damit wieder angepasste Bildgrößen geladen werden können. Ich habe das bei mir implementiert und konnte die Ladezeit der Startseite deutlich verbessern.

Der Code muss in die functions.php, am Besten macht ihr euch auch ein Child Theme zu Divi und legt dort eure eigenen Änderungen und Modifikationen ab.

Happy Coding 😀

Code auf GitHub
Beitrag auf FLDTrace

PHP Code für die functions.php

// enable divi functions add_action( 'wp_enqueue_scripts', 'my_enqueue_assets' ); function my_enqueue_assets() { wp_enqueue_style( 'parent-style', get_template_directory_uri().'/style.css' ); }

//add 1440px image size add_image_size('image_1440', 1440, 9999, false);

//move the 'wp_make_content_images_responsive' filter to run last remove_filter( 'the_content', 'wp_make_content_images_responsive', 10); add_filter( 'the_content', 'wp_make_content_images_responsive', 1600, 1);

add_filter( 'the_content', 'hb_add_id_to_images', 1599, 1); //filter the content and add wp-image-$id class to the images, allowing responsive feature to work function hb_add_id_to_images( $content ) { global $wpdb; if ( ! preg_match_all( '/<img [^>]+>/', $content, $matches ) ) { return $content; }

foreach( $matches[0] as $image ) { if ( !preg_match( '/wp-image-([0-9]+)/i', $image ) ) { $dom = new DOMDocument(); $dom->loadHTML($image); $img_element = $dom->getElementsByTagName('img')->item(0);

$wp_upload_dir = wp_upload_dir(); $image_path = str_replace(trailingslashit(preg_replace("(^https?://)", "", $wp_upload_dir['baseurl'])), '', preg_replace("(^https?://)", "", $img_element->getAttribute('src') ));

$attachment = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_wp_attached_file' AND BINARY meta_value='%s';", $image_path ));

if ($attachment) { $img_element->setAttribute("class", "wp-image-".$attachment[0]); $new_image = $img_element->ownerDocument->saveHTML($img_element);

$content = str_replace ( $image , $new_image , $content); } } }

return $content; }

//lower image max-width to 1080px everywhere (retina compatible) function hb_content_image_sizes_attr( $sizes, $size ) { $width = $size[0];

if ($width >= 1080) $sizes = '(max-width: 1080px) 100vw, 1080px';

return $sizes; } add_filter( 'wp_calculate_image_sizes', 'hb_content_image_sizes_attr', 10 , 2 );

//override Divi 'et_pb_maybe_add_advanced_styles' function to fix the problem of browser downloading overridden background image function hb_pb_maybe_add_advanced_styles() { $styles = array();

// do not output advanced css if Frontend Builder is active if ( ! et_fb_is_enabled() ) { $styles['et-builder-advanced-style'] = ET_Builder_Element::get_style();

if ( preg_match_all('/\.[_a-z0-9]+\.et_pb_fullwidth_header \{.*background-image.*\}/', $styles['et-builder-advanced-style'], $matches ) ) { foreach( $matches[0] as $bg_css ) { $styles['et-builder-advanced-style'] = preg_replace('/url\(.*\)/', 'none', $styles['et-builder-advanced-style']); } }

$styles['et-builder-page-custom-style'] = et_pb_get_page_custom_css(); }

foreach( $styles as $id => $style_data ) { if ( ! $style_data ) { continue; }

printf( '<style type="text/css" id="%2$s"> %1$s </style>', $style_data, esc_attr( $id ) ); }

remove_action( 'wp_footer', 'et_pb_maybe_add_advanced_styles' ); } add_action( 'wp_footer', 'hb_pb_maybe_add_advanced_styles', 9 );

add_action('wp_footer', 'hb_responsive_bg_image', 10); //add responsiveness for background images function hb_responsive_bg_image() { global $wpdb;

$css = ET_Builder_Element::get_style();

//find the background-image css in the inline css if ( preg_match_all('/\.[_a-z0-9]+\.et_pb_fullwidth_header \{.*background-image.*\}/', $css, $matches ) ) { foreach( $matches[0] as $bg_css ) { if (preg_match('/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $bg_css, $url_matches)) { $url = $url_matches[0];

$wp_upload_dir = wp_upload_dir();

$image_path = str_replace(trailingslashit(preg_replace("(^https?://)", "", $wp_upload_dir['baseurl'])), '', preg_replace("(^https?://)", "", $url ));

$attachment = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_wp_attached_file' AND BINARY meta_value='%s';", $image_path ));

$bg_css = preg_replace('/background-color([^;]*);/', '', $bg_css, 1);

if ($attachment) { $image_meta = wp_get_attachment_metadata($attachment[0]);

$extra_css = '';

//add fullsize background image style, fixing the problem of browser downloading overridden background image $extra_css .= ' @media only screen and ( min-width: 1441px ) { ' . $bg_css . ' }';

//add responsive background image for (non-retina) screen with max-width 1440px (use 1440px image), 1080px (use 1080px image), 768px (use 768px image) if ($image_meta['sizes']['image_1440']) { $extra_css .= ' @media only screen and ( max-width: 1440px ) { ' . str_replace(basename($url), $image_meta['sizes']['image_1440']['file'], $bg_css) . ' }'; }

if ($image_meta['sizes']['et-pb-portfolio-image-single']) { $extra_css .= ' @media only screen and ( max-width: 1080px ) { ' . str_replace(basename($url), $image_meta['sizes']['et-pb-portfolio-image-single']['file'], $bg_css) . ' }'; }

if ($image_meta['sizes']['medium_large']) { $extra_css .= ' @media only screen and ( max-width: 768px ) { ' . str_replace(basename($url), $image_meta['sizes']['medium_large']['file'], $bg_css) . ' }'; }

//add responsive background image for retina screen with max-width 1440px (use fullsize image), 768px (use 1440px image), 540px (use 1080px image), 384px (use 768px image) $extra_css .= ' @media only screen and ( max-width: 1440px ) and (-webkit-min-device-pixel-ratio: 2), only screen and ( max-width: 1440px ) and ( min--moz-device-pixel-ratio: 2), only screen and ( max-width: 1440px ) and ( -o-min-device-pixel-ratio: 2/1), only screen and ( max-width: 1440px ) and ( min-device-pixel-ratio: 2), only screen and ( max-width: 1440px ) and ( min-resolution: 192dpi), only screen and ( max-width: 1440px ) and ( min-resolution: 2dppx) { ' . $bg_css . ' }';

if ($image_meta['sizes']['image_1440']) { $extra_css .= ' @media only screen and ( max-width: 768px ) and (-webkit-min-device-pixel-ratio: 2), only screen and ( max-width: 768px ) and ( min--moz-device-pixel-ratio: 2), only screen and ( max-width: 768px ) and ( -o-min-device-pixel-ratio: 2/1), only screen and ( max-width: 768px ) and ( min-device-pixel-ratio: 2), only screen and ( max-width: 768px ) and ( min-resolution: 192dpi), only screen and ( max-width: 768px ) and ( min-resolution: 2dppx) { ' . str_replace(basename($url), $image_meta['sizes']['image_1440']['file'], $bg_css) . ' }'; }

if ($image_meta['sizes']['et-pb-portfolio-image-single']) { $extra_css .= ' @media only screen and ( max-width: 540px ) and (-webkit-min-device-pixel-ratio: 2), only screen and ( max-width: 540px ) and ( min--moz-device-pixel-ratio: 2), only screen and ( max-width: 540px ) and ( -o-min-device-pixel-ratio: 2/1), only screen and ( max-width: 540px ) and ( min-device-pixel-ratio: 2), only screen and ( max-width: 540px ) and ( min-resolution: 192dpi), only screen and ( max-width: 540px ) and ( min-resolution: 2dppx) { ' . str_replace(basename($url), $image_meta['sizes']['et-pb-portfolio-image-single']['file'], $bg_css) . ' }'; }

if ($image_meta['sizes']['medium_large']) { $extra_css .= ' @media only screen and ( max-width: 384px ) and (-webkit-min-device-pixel-ratio: 2), only screen and ( max-width: 384px ) and ( min--moz-device-pixel-ratio: 2), only screen and ( max-width: 384px ) and ( -o-min-device-pixel-ratio: 2/1), only screen and ( max-width: 384px ) and ( min-device-pixel-ratio: 2), only screen and ( max-width: 384px ) and ( min-resolution: 192dpi), only screen and ( max-width: 384px ) and ( min-resolution: 2dppx) { ' . str_replace(basename($url), $image_meta['sizes']['medium_large']['file'], $bg_css) . ' }'; }

?> <style type="text/css" id="responsive-bg-image-style"> <?php echo $extra_css;?> </style> <?php } } } } } // **********End Faster, Better Divi images******