AAI Logon Seite mit PHP

Mittwoch, 16. Oktober, 2024

An meinem Institut habe ich ein Projekt für eine Logon-Seite mit AAI / EduGain in einer funktionsfähigen Version released.

AAI ist eine Anmeldeform im universitären Bereich. Studierende und Dozenen anderer Universitäten melden sich mit dem Account ihrer eigenen Universität bei ihrem gewohnten Anmeldeprovider (IDP) an. Wenn die Authentifizierung erfolgreich war, dann kann der fremde IDP unserer Applikation den Erfolg des Logons in Form einer ID sowie einige minimale Metadaten senden. Mit jener ID lässt sich in der eigenen Anwendung ein User anlegen oder wiedererkennen. Regelbasiert oder manuell administrativ kann man einem Account Gruppen und Rollen zuweisen.

Das gibt es alles schon und ist spezifiziert, dokumentiert und schon lange produktiv im Einsatz. Sowas erfindet man nicht neu.

Mein Pro AAI Login ist in PHP programmiert - und folglich hilfreich für eine PHP-Anwendung mit Shibboleth. Der Ursprung der Entstehung war eine Ilias9 Installation.In früheren Ilias Versionen konnte man für die Start-/ Anmelde-Seite HTML-Code und Javascript einbinden. Auf diese Weise wurde ein externes Javascript WAYF (=Where are you from) von Switch eingebunden. Das funktionierte super.
In Ilias 9 kann man seine Startseite umfangreich zusammenklicken, aber Javascript konnte ich nicht einbetten. In Feldern für HTML-Code wurde es nach dem Speichern ausgefiltert. Nachdem ich mit dem Anmelde-Konfigurator aufgegeben hatte, sollte eine Seite her, die die Aufgabe der Anmeldeseite übernimmt. Zwar ist initial Ilias das erste Ziel-Projekt, aber es ist bewusst flexibel konfigurierbar ausgelegt, so dass es sich für andere Shibboleth geschützte Anwendung einsetzen liesse.

Die Logon-Seite bietet eine Liste der zugelassenen IDPs an. Mit enem Filterfeld lassen sich auf Tastendruck die angezeigten IDP reduzieren, damit ein Benutzer schnell das eigene Login finden kann.

Der Filter nach TLD (Länder-Domains) wird automatisch bereitgestellt.

2024-10-16-aai_login_mode_boxes.png

Die Anmelde-(Auswahl-)Seite unterstützt Mehrsprachigkeit, mehrere Layouts (als Boxen, Liste, WAYF Auswahlseite). Hier die mitgelieferte Darstellungsform als Liste:

2024-10-16-aai_login_mode_list.png

Weiterhin ist es flexibel bezüglich

  • Sprachen. Ein deutsches und englisches Spachfile sind mitgeliefert. Der Aufwand für ein neues Sprachfile ist sehr überschaubar
  • Ausgabetexte: Es gibt 3..4 Textelemente, die man frei konfigurieren kann. So kann man den HTML-Code vor und nach der Provider-Auswahl anpassen.
  • Layout der Provider-Ausflistung: es werden 3 Layouts mitgliefert. 2 davon sieht man in obigen Screenshots. Ein neues Layout lässt sich schnell erstellen. Eine Klasse liefert bereits alle nötigen Daten, die man nur noch im gewünschten HTML-Code ausgeben lassen muss. Jedes Layout wird seine eigene CSS Datei einbinden - damit ist man völlig frei in der Gestaltung
  • Farben: das Basislayout kommt von einer vorgegebenen CSS Datei. Mit Hilfe einer eigenen CSS Datei kann man alle CSS Rules üübersteuern und das Gesamtlayout verändern.

Die Lizenz erlaubt kostenfreie Verwendung, Einsicht in den Quellcode und Anpassung jedweder Art.
Feedbacks und Verbesserungsvorschläge sind willkommen.

📜 License: GNU GPL 3.0
📄 Source: https://git-repo.iml … pen-source/login-aai
📗 Docs: https://os-docs.iml.unibe.ch/login-aai/

Gaza 1 Jahr nach dem HAMAS Attentat

Montag, 7. Oktober, 2024

Vor 1 Jahr ermordete die Terrormiliz Hama in Israel 1.200 Menschen und nahm über 200 Geiseln [1]. Ein widerliches Verbrechen - ohne jeden Zweifel.

Und fast ein Jahr dauert nun auch die erbarmungslose israelische Gegenoffensive im Gazastreifen an, die bereits zehntausende Opfer gefordert hat [2].

Im Interview: Rami Abou Jamous (palästinensischer Journalist).

  1. Einst war Gaza bei der Obst- und Gemüseversorgung autonom. 2/3 der Anbauflächen wurden verwüstet. Die Lebensmittelpreise in Gaza sind unvorstellbar: 100 Euro für 1 kg Tomaten, 70 Euro für 1 kg Kartoffeln. Das ist das Perverse: die Israelis bombardieren unsere Felder aber isreaelische Ware lassen sie durch. Sie machen noch Profit mit dem was wir kaufen müssen, um essen zu können
  2. Von 2.3 Millionen Einwohnern sind 2 Millionen Binnenflüchtlinge
  3. Im Frühjahr wurden durch Israelis die Hälfte der 45 Friedhöfe vernichtet
  4. Es gibt kein Trinkwasser mehr. Ich schäme mich, es zu erzählen, aber wir haben fast nichts mehr. Keine Seife, kein Shampoo, keine Windeln für meinen Sohn, nicht einmal Monatsbinden für die Frauen. Die Israelis töten uns nicht nur, machen nicht nur Hunger zur Kriegswaffe sondern auch die Hygiene.
  5. Mehr als 600 Moscheen und 3 Kirchen wurden zerstört
  6. über 400 Schulen und Universitäten wurden zerstört oder beschädigt. Sie dienten oft Binnenflüchtlingen als Notunterkunft.
  7. 34 Krankenhäuser sind komplett stillgelegt - 25 weitere beschädigt. Jedes Mal, wenn die Besatzungsarmee in eine Stadt einmarschiert, ist das Krankenhaus ihr erstes Ziel.Sie behaupten jedes Mal, dass sich HAMAS Kämpfer dort verstecken. Jedes Mal reden sie von einer Kommandostelle. Es läuft immer gleich. … Sie haben alles niedergebrannt und verwüstet…. Sie wollen alle von der HAMAS betriebenen öffentlichen Dienste vernichten.Und die erste Zielscheibe ist das Gesundheitswesen.
  8. Die Israelis haben 360.000 Gebäude zerstört.
  9. Sie haben Museen zerbombt und niedergebrannt. Tausendjahre alte Kulturschätze, wie den Hamam von Gaza dem Erdboden gleichgemacht. Genau wie unsere archäologischen Stätten. Hinter all dem steckt die Absicht, unsere Kultur, unsere Zugehörigkeit als Menschen auszulöschen! Obwohl: Mensch ist schon zuviel gesagt. Sie betrachten uns nicht als Menschen. Sie wollen unsere Beziehung zu dem Land auf dem wir leben, zu brechen. Deswegen zerstören sie alles.

Hinzu kommen Sattelitedaten und deren Auswertung von Vertical52.

Es wurden fast 42.000 Menschen getötet. Jedem getöteten Israeli am 7. Oktober stehen 40 getötete Palästinenser gegenüber. Einmal bildlich:

2024-10-07_dead_isreael_vs_palestina.png

Pro am 7. Oktober 2023 getötetem Israeli am 7. Oktober 2023 kommen 2000 geflüchtete Palästinenser hinzu. 1 Millionen geflüchtete Libanesen der an der nun im Norden eröffneten Front sind in dieser Rechnung noch gar nicht dabei.
Das wirkt auf mich so, als würde eine Kollektivstrafe erhoben und eliminierte HAMAS Kämpfer sind dabei unter all den Opferzahlen nur reine Zufallstreffer.

Ich wünsche mir sehr, dass es gewichtige vernünftige Stimmen gibt, die den Wahnsinn und Blutrausch beenden können.

Update

  • Israelis greifen am Wochenende einen Stützpunkt der UN Blauhelme an. Wenn die Israelis sagen, die Soldaten wurden vorab gewarnt, geben sie explizit zu, bewusst als auch gezielt diese Bomardierung vorgenommen zu haben. Der seit Mai wg. Kriegsverbrechen international zur Haft ausgeschriebene Netanyahu [3] faselt in einem lokalen Fernsehsender (!) etwas davon, die Blauhelme sollen aus Libanon auch abziehen. Wohlwisend, dass UN Mandate eher in New York mit den zig Staaten diskutiert werden sollten, die die Blauhelmsoldaten stellen. Was für eine primitive Polemik. Er macht kindische Mätzchen - aber einen Kriegsverbrecher intressieren kein internationales Recht oder Stimmern der Staatengemeinschaft. Und das, obwohl Israel erst durch Kraftanstrengung der UNO entstehen konnte. Das empfinde ich ebenso respektlos.

Weiterführende Informationen:

JS: Inhalt einer Json Datei in einen Hash holen

Mittwoch, 18. September, 2024

Ich habe eine Sprachdatei für ein PHP-Skript in einer JSON Datei abgelegt.
Meine HTML Seite sollte in der eingebundenen Javascript-Datei die Datei ebenfalls laden und deren Inhalt einer Variable “aLang” zuweisen.

Sicher geht es noch eleganter, aber ich bin bei diesem Snippet hängengeblieben:


var sLang='de-de';
var aLang={};

(...)

/**
 * Init step 1: load language file and make it available in aLang
 */
async function init(){
    fetch('lang/' + sLang + '.json')
    .then(response => response.json())
    .then(aLang => {
        initStep2(aLang)
    })
    .catch(error => console.log(error))
    ;

}

/**
 * Init step 2
 */
async function initStep2(langArray) {
    aLang = langArray;

    // just to check it in the console:
    console.log(aLang);

    // optional: next js function to call or more js code
}

// MAIN
init();

IML Appmonitor: Code-Update für PHP8+

Donnerstag, 25. Juli, 2024

Der IML Appmonitor dient der Ergänzung unseres Systemmonitorings. Aus Sicht einer Applikation werden Prüfungen vorgenommen, die in ihrer Summe eine Aussage treffen, ob eine Applikation gerade lauffähig ist. Sei es die Verfügbarkeit von Ressourcen, APIs oder Datenbanken, Schreibzugriffe auf Upload Folder. Auch sollte man umgekehrt schützenswerte Informationen prüfen, ob diese bei gewöhnlichen Http-Anfragen eben nicht ausgeliefert werden und ein 40x Fehlercode melden.

Man kann Prüfungen miteinander verknüpfen, z.B. muss eine Konfigurationsdatei lesbar sein - die z.B. Credentials für eine Datenbank besitzt - dann ist die Prüfung der Datenbankverbindung von der Lesbarkeit der Konfigurationsdatei abhängig. So kann man einen Abhängigkeitsbaum zu visualisieren, der einem Projektmanager ein klareres Bild zu einer Störung vermitteln kann.

2024-07-24-iml-appmonitor_small.jpg

Im Zuge des Updates unserer PHP-Applikationen habe ich den PHP-Code unter PHP 8.3 aktualisiert:

  • Bisher ist alles untypisiert gewesen. In Klassen wurden Variablen, Parameter von Methoden und deren Returncode typisiert (also eine Angabe, ob eine Variable ein String, Integer, Array, Objekt, … ist). Das hilft dem Compiler bei Optimierungen und sichert den Code ab. Ist aber auch - bei mechanischem, visuellen Ersetzen auch etwas fehleranfällig.
  • PHPDoc wurde in allen Methoden geprüft - da gab es doch viele Kommentar-Sektionen, die nicht mit dem Code übereinstimmten
  • Alle Arrays und Hashes wurden auf die verkürzte Array-Schreibweise umformatiert.
  • Die Markdown-Hilfedateien wurden überarbeitet

Kurz: ohne Funktionalitätsgewinn wurden ein paar tausend Zeilen in 70+ Dateien geändert und heute gemergt: https://github.com/i … onitor/pull/88/files

2024-07-24-iml-appmonitor-update.png

Aber dem Programmcode tut es sicher gut, gelegentlich auf einen aktuelleren Stand gehoben zu werden.

Gleichartiges widerfuhr letzte Woche dem Code unseres Intranets.

Weiterführende Informationen:

Docker Fehler - Archives directory /var/cache/apt/archives/partial is missing. - Acquire (2: No such file or directory)

Freitag, 19. Juli, 2024

Die Aufrufe zum frischen Erstellen eines Containers für meine lokale Webentwicklung per

docker-compose -p <NAME> --verbose up -d --remove-orphans --build 

lieferte nunmehr beim Debian-Image für Apache

=> ERROR [appmonitor-web stage-0 2/5] RUN apt-get update && apt-get install -y git unzip zip                                                                                           2.1s
------                                                                                                                                                                                        
> [appmonitor-web stage-0 2/5] RUN apt-get update && apt-get install -y git unzip zip:                                                                                                       
0.275 Get:1 http://deb.debian.org/debian bookworm InRelease [151 kB]                                                                                                                          
0.302 Get:2 http://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]                                                                                                                 
0.310 Get:3 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB]                                                                                                       
0.392 Get:4 http://deb.debian.org/debian bookworm/main amd64 Packages [8788 kB]                                                                                                               
0.631 Get:5 http://deb.debian.org/debian bookworm-updates/main amd64 Packages.diff/Index [10.6 kB]
0.642 Get:6 http://deb.debian.org/debian-security bookworm-security/main amd64 Packages [169 kB]
0.692 Get:7 http://deb.debian.org/debian bookworm-updates/main amd64 Packages T-2024-04-23-2036.10-F-2023-12-15-1408.04.pdiff [8693 B]
0.700 Get:7 http://deb.debian.org/debian bookworm-updates/main amd64 Packages T-2024-04-23-2036.10-F-2023-12-15-1408.04.pdiff [8693 B]
1.153 Fetched 9230 kB in 1s (10.1 MB/s)
1.153 Reading package lists...
1.445 Reading package lists...
1.754 Building dependency tree...
1.845 Reading state information...
1.950 git is already the newest version (1:2.39.2-1.1).
1.950 unzip is already the newest version (6.0-28).
1.950 zip is already the newest version (3.0-13).
1.950 E: Archives directory /var/cache/apt/archives/partial is missing. - Acquire (2: No such file or directory)

Mit der Meldung

Archives directory /var/cache/apt/archives/partial is missing. - Acquire (2: No such file or directory)

… findet man im Web zum Ziel.
In meinem Debian-basierten Dockerfile gab es zum Installieren diese Anweisungen:

# install packages
RUN apt-get update && apt-get install -y {{APP_APT_PACKAGES}}

Dies wurde ersetzt per

# install packages
RUN rm -rf /var/lib/apt/lists/*
RUN mkdir -p /var/cache/apt/archives/partial
RUN apt-get update
RUN apt-get install -y {{APP_APT_PACKAGES}}

Man löscht vor dem apt-get erst ein Verzeichnis … und legt ein anderes an.
Wie magisch: und schon funktioniert der Build wieder.

Weiterführende Links

Icinga Summit 2024

Donnerstag, 13. Juni, 2024

Am 5. und 6. Juni fand in Berlin die Icinga Summit 2024 statt.

2024-06-13-icinga-summit-2024.png

Es waren 2 angenehme Tage, um sich mit anderen zu Monitoring & mehr auszutauschen.

Meine erste Rede auf englisch vor “grossem” Publikum lief dann doch besser, als gedacht. Anschliessend kamen mehrere Leute auf mich zu, um mir nach dem im Vortrag Gehörtem noch Tipps mit auf den Weg zu geben. Das ist doch sympathisch!

Weiterführende Links:

Erstaufruf von Klapp - ich ertrage das Flackern einfach nicht

Dienstag, 11. Juni, 2024

Meine Tochter kommt bald in den Kindergarten. “Klapp” ist das Kommunikationsmittel der Schulen zu Eltern und Schülern.
Nach dem ersten Login führt das Bewegen der Maus über Teile der Webseite zu solch einem enormen Flackern, dass die Augen anfangen zu schmerzen. Man kann auf der Seite einzig nur so kurz wie nötig den Status einsehen und sie verlassen. Ich mache das ja nun wirklich nie - aber ich musste nach wenigen Minuten das Feedback-Formular ausfüllen:

Guten Tag,

ich bin Neukunde, da meine Tochter im August in den Kindergarten kommt. Ich benutze den Firefox (v126). Beim Bewegen der Maus über die Fläche mit Seiteninhalten wird der Bildschirm sehr häufig beim Verlassen von Boxen oder Formularfeldern oder aber Aufklappen von Inhaltsboxen (wie den Einstellungen) für einige Millisekunden blau (die Hintergrundfarbe von ) und man sieht weiss das Klapp-Logo in der Mitte des Bildschirmes. Beim Bewegen der Maus über den Bildschirm kann es schonmal 4..5 mal in der Sekunde flackern.

Und ich habe das Verhalten so noch auf keiner anderen Webseite gesehen.

Ich habe gelesen, dass die Hardwarebeschleuinigung deaktiviert werden kann. Auch das tat ich und habe den Browser neu gestartet. Aber das beendet das wilde flackern von https://klapp.mobi/ während Mausbewegungen nicht.

In der Entwicklerkonsole gibt es keine Besonderheiten oder Fehler durch Javascript.

Das Flackern ist wirklich schwer zu ertragen.

Freundliche Grüsse
Axel Hahn

Update:

Tags darauf kam bereits eine erste Antwort vom . Man konnte das Problem etwas einkerisen - es sei in Bearbeitung. Mannomann: das ging ja schnell.

Härten unseres Restic-Backups

Donnerstag, 21. März, 2024

Unser Server Backup mit dem IML Backup [1] am Institut mit 150+ Systemen lief über Jahre mit Restic [2] und via SFTP zu einem Storage. Mit Restic bin ich soweit sehr zufrieden: es verschlüsselt Daten lokal vor der Übertragung und muss nach einem Initialbackup nur noch inkrementelle Backups machen. Auch das Restore von einzelnen Dateien und Ordnern hat uns nie im Stich gelassen. Insbesondere das Mounten mit Fuse ist ein hilfreiches Feature.

Dann sah ich im Januar 2024 das Videos des CCC [3]. Auf der “wichtigsten Folie des ganze Vortrags” waren Anforderungen an Backups gelistet, um sich gut gegen Ransomware-Verschlüsselungen der Infrastruktur zu wappnen. Bei vielen Punkten waren wir demnach bereits gut gewappnet. Aber es gab unschöne Schwachpunkte. Da diese jeweils eine Rechteausweitung als root voraussetzen, war dies mit “kalkulierten Risiko”.

Ein System kann seine eigenen Backup-Daten löschen.
Damit Backups nicht übermässig gross werden, werden alle N Tage im Anschluss des backups alte Daten älter 180 Tage gelöscht. Wenn ein Sysem gekapert plus der root-Account erreicht würde, kann durch böswilliges Setzen eines Delta statt 180 Tage auf 0 Tage setzend ist so ziemlich alles weggeputzt werden.

Ein System kann theoretisch Backups anderer Systeme löschen.
Bei Einbruch und Rechteausweitung auf root könnte wäre Folgendes denkbar: alle Systeme schreiben auf das Backup-Ziel mit demselben SSH-User. Auf der Zielseite gehören die Dateien demselben User und thoretisch könnte ein System Zugriff auf Backup-Daten eines anderen Systems erhalten und diese zwar nicht entschlüsseln, aber wg. Schreibrechten eben auch löschen.

2024-03-20-restic-via-ssh.png

Es geht nun auch besser.

Auf dem Backup-Endpoint wurde nun der Restic-Rest-Server [4] installiert, der als Systemd Service eingerichtet wurde. Die Backup-Clients kommunizieren nun statt via SSH mit HTTPS. Sie teilen nicht mehr den auf allen Systemen gleichen privaten SSH-Schlüssel.

In den Startparametern des Rest-Servers wurden diese Optionen aufgenommen, um folgende Härtungen zu erreichen:

Ein User (Server) darf nur sein eigenes Repository beschreiben.

Option:

--private-repos

Das Unterbindet das Ausbrechen auf Backup-Daten anderer Systeme.
Jeder Backup-Client (unsere Server) bekommt einen eigenen User und ein eigenes Http-Auth Passwort zugewiesen.
Auf dem Restic Rest Server werden Usernamen und das verschlüsselte Passwort in eine .htpasswd eingetragen.

Stolperfalle: Es böte sich an, die Benutzer gleich zu benennen, wie den Server. Eine Limitierung in der der .htpasswd lässt einen Punkt im Benutzernamen jedoch nicht zu. Aber das Ersetzen des Punkts im FQDN durch einen Unterstrich führt zu keinerlei Überschneidungen. Dem schliest sich an, dass das Backup-Verzeichnis nun statt [Backup-Dir]/ nun [Backup-Dir]/ ist. Bei der Umstellung von SSH auf HTTPS muss somit das Backup-Ziel-Verzeichnis beim Backup-Server umbenannt werden.

Ein User (Server) darf Daten nur anhängen.

Option:

--append-only

Kurz: Löschen ist nicht mehr möglich. Das klingt sicher.

Der Pferdefuss: unser auf jedem Einzelsystem befindliche Restic Prune Job zum Löschen älter N Tage funktioniert so nicht mehr. Ich habe es auch probiert: es wird mit einem 40x Statuscode zurückgewiesen.

Unsere Abhilfe sieht wie folgt aus: auf dem Backup-Zielserver läuft nun ein Cronjob, der über alle Backup-Repos das Pruning macht [4]. Wir lassen es erkennen, wie alt das letzte Prubg war und pausieren das Prune auf ein Repository dann für N Tage. Damit Restic auf Inhalte zugreifen kann, muss das Passwort zum Entschlüsseln aller Serverdaten für das Skript greifbar sein. Wir generieren mit Ansible eine Konfigurationsdatei, die alle Benutzernamen und Restic-Verschlüsselungspasswörter am Backup-System niederschreibt. Diese Datei gehört root:root und hat die Rechte 0400.

Zustand NEU:

Das Ergebnis ist derselbe Datenfluss - nur mit einem anderen Protokoll - Https statt ssh. Entscheidend sind die 2 o.g. Optionen für den Restic Server auf dem Backup-Ziel.

2024-03-20-restic-via-https.png

Dies war eine Beschreibung mit hoher Flughöhe mit weniger technischen Details. Bei Fragen nutzt gern die Kommentarfunktion oder fragt mich an.

Weiterführende Links:

  1. Docs: IML Backup (en)
  2. Github: Restic (en)
  3. CCC Dez 2023: Hirne hacken - Hackback Edition
  4. Github: Restic REST Server (en)
  5. os-docs.iml.unibe.ch: rest-pruner.sh (en)

Daux auf Manjaro installieren

Mittwoch, 13. Dezember, 2023

In Manjaro Linux gibt es Pakete - darunter auch PHP und ist schnell installiert. Den Composer nachzuschieben ist ein Nobrainer und dann kann man

composer global require daux/daux.io

aufrufen, um Daux lokal zu installieren. Das klingt alles straight forward. Wie bei allen anderen Distros mit Paketmanagement auch.

Es gibt jedoch unter Manjaro ein ABER: ein “daux generate” verweigert seinen Dienst, sobald man das Generieren einer Offline-Javascript Suche in einem Doc Projekt aktiviert hat. Es fehle die Funktion iconv. Das entsprechende PHP-Paket kann man installieren, aber dann wird der Apache httpd gleichsam installiert.

Daher nochmal Reset und von vorn. Wie bekommt man Daux nun inkl. Suche zum Laufen? Also, ohne einen Webserver installieren zu müssen und rein mit PHP-CLI?

(1) PHP-Quelle einbinden

Es gibt neben Manjao-Paketen weitere Quellen, die man einbinden kann.
https://aur.archlinux.org/pkgbase/php82

Man folge der dortigen Anleitung:
(a) als root in der /etc/pacman.conf eintragen

[home_el_archphp_Arch]
Server = https://download.opensuse.org/repositories/home:/el:/archphp/Arch/$arch

(b) als root in der Shell:

key=$(curl -fsSL https://download.opensuse.org/repositories/home:el:archphp/Arch/$(uname -m)/home_el_archphp_Arch.key)
fingerprint=$(gpg --quiet --with-colons --import-options show-only --import --fingerprint <<< "${key}" | awk -F: '$1 == "fpr" { print $10 }')
pacman-key --init
pacman-key --add - <<< "${key}"
pacman-key --lsign-key "${fingerprint}"

Und zum Aktualisieren der Paket-Datenbank

pacman -Syy

(2) PHP Pakete installieren

Man installiere diese Pakete:

php82
php82-cli
php82-iconv
php82-mbstring
php82-openssl
php82-phar

Jene werden benötigt, um den Composer zu compilieren.

(3) php verfübar machen

Noch schnell ein Zwischenschritt.

Nach Installieren von PHP82-cli wird bei Eingabe “php” auf der Shell kein Binary gefunden. Das, weil es “php82” heisst - Daux wird aber nach “php” suchen. “which php82” verrät uns, dass es unter /usr/bin liegt (oder aber man schaut in die Paket-Details).

Wie lösen wir das? Ich würde zu einem Softlink greifen.
Man kann sich mit “echo $PATH” ansehen, welche bin-Verzeichnisse verfügbar sind. Weil ich bei mir am Rechner nur allein mit meinem lokalen User arbeite, lege ich den Softlink unter meinem $HOME an. Soll es global für alle User funktionieren, würde ich den Softlink in /usr/bin/ anlegen.

cd ~/bin/
ln -s /usr/bin/php82 php

Test: Wenn anschliessend “php -v” nun etwas ausgibt, dann passt es.

(4) PHP Composer 8.2 installieren

Nun kann man den php82-composer aus den AUR installieren. AUR muss man folglich im Paketmanager aktiviert haben.

(5) Daux installieren

composer82 global require daux/daux.io

Also … statt “composer” ist “composer82” entsprechend der PHP-Version aufzurufen.

(6) Daux verwenden

daux generate

… voila: funktioniert nun inkl. Suche! Viel Spass!

Weiterführende Links:

  1. daux.io (en)
  2. Arch :: Package Base Details: php82 (en)

ahCrawler läuft auf PHP 8.3

Sonntag, 3. Dezember, 2023

PHP hat kürzlich die Version 8.3 herausgegeben [1] - und gleichzeitig erhält PHP 8.0 keinerlei Support mehr.

Mein Werkzeug ahCrawler [2], [3] - eine Suchmaschine für diie Webseite und Webseiten-Analysetool - darf hier nicht aussen vor sen. Sie wurde in einem Docker-Container mit der neuen PHP Version 8.3 durchgetestet … und für gut befunden.

Die vorherige Version lief bereits mit dem aktuellen PHP - es gab im Minor-Update nur kleine, nichtfunktionale Updates, die wie immer via Web UI oder Git pull oder Updater eingespielt werden können.

Die Suchseite hinter www.axel-hahn.de ist bereits aktualisiert worden.

2023-12-03-ahcrawler-dark.png

Weiterführende Links

  1. php.net: PHP 8.3 Released (en)
  2. Docs ahCrawler (axel-hahn.de) (en)
  3. Sourcecode ahCrawler (github.com) (en)