Fatal: konnte Benutzername für „https://github.com“ nicht lesen

Ich habe versucht, mein 2-Container-Forum zu aktualisieren, aber es schlägt fehl. Habt ihr eine Idee, warum?

x86_64 arch detected.                                                                                                                                                    
2.0.20260803-0122: Pulling from discourse/base                                                                                                                           
Digest: sha256:ab1e7217470759e63313a16bc5b71b9f2dd7d3ae8303286e5985f563ad12b7b3                                                                                          
Status: Image is up to date for discourse/base:2.0.20260803-0122                                                                                                         
docker.io/discourse/base:2.0.20260803-0122                                                                                                                               
/usr/local/lib/ruby/gems/3.4.0/gems/pups-1.4.0/lib/pups.rb                                                                                                               /usr/local/bin/pups --stdin                                                                                                                                              
I, [2026-09-02T16:49:46.027794 #1]  INFO -- : Reading from stdin                                                                                                         
I, [2026-09-02T16:49:46.066073 #1]  INFO -- : > thpoff echo "thpoff is installed!"                                                                                       thpoff is installed!                                                                                                                                                     
I, [2026-09-02T16:49:46.079514 #1]  INFO -- : > /usr/local/bin/ruby -e 'if (ENV["DISCOURSE_SMTP_ADDRESS"] == "smtp.example.com" && ENV["DISCOURSE_SKIP_EMAIL_SETUP"] != "
1"); puts "Aborting! Mail is not configured!"; exit 1; end'                                                                                                              
I, [2026-09-02T16:49:46.242618 #1]  INFO -- : > /usr/local/bin/ruby -e 'if ENV["DISCOURSE_HOSTNAME"] == "discourse.example.com"; puts "Aborting! Domain is not configured!"; exit 1; end'                                                                                                                                                         I, [2026-09-02T16:49:46.351184 #1]  INFO -- : > /usr/local/bin/ruby -e 'if (ENV["DISCOURSE_CDN_URL"] || "")[0..1] == "//"; puts "Aborting! CDN must have a protocol specified. Once fixed you should rebake your posts now to correct all posts."; exit 1; end'                                                                                   I, [2026-09-02T16:49:46.497030 #1]  INFO -- : > rm -f /etc/cron.d/anacron                                                                                                I, [2026-09-02T16:49:46.504864 #1]  INFO -- : File > /etc/cron.d/anacron  chmod:   chown:                                                                                I, [2026-09-02T16:49:46.512848 #1]  INFO -- : File > /etc/runit/1.d/copy-env  chmod: +x  chown:  I, [2026-09-02T16:49:46.525056 #1]  INFO -- : File > /etc/service/unicorn/run  chmod: +x  chown: 
I, [2026-09-02T16:49:46.533676 #1]  INFO -- : File > /etc/service/nginx/run  chmod: +x  chown:  
I, [2026-09-02T16:49:46.542104 #1]  INFO -- : File > /etc/runit/3.d/01-nginx  chmod: +x  chown:   
I, [2026-09-02T16:49:46.557772 #1]  INFO -- : File > /etc/runit/3.d/02-unicorn  chmod: +x  chown:            
I, [2026-09-02T16:49:46.566700 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse git clean -f
I, [2026-09-02T16:49:46.797286 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  set -o errexit                                                                    
  git fetch --tags --prune-tags --prune --force origin                                                                                                                   
  if [[ $(git symbolic-ref --short HEAD) == latest ]] ; then                                                                                                             
      git pull                                                                      
  else                                                                              
      git -c advice.detachedHead=false checkout latest                                                                                                                   
  fi                                                                                
'                                                                                   
fatal: could not read Username for 'https://github.com': No such device or address                                                                                       
fatal: expected flush after ref listing                                             


FAILED                                                                              
--------------------                                                                
Pups::ExecError: cd /var/www/discourse && sudo -H -E -u discourse bash -c '                                                                                              
  set -o errexit                                                                    
  git fetch --tags --prune-tags --prune --force origin                                                                                                                   
  if [[ $(git symbolic-ref --short HEAD) == latest ]] ; then                                                                                                             
      git pull                                                                      
  else                                                                              
      git -c advice.detachedHead=false checkout latest                                                                                                                   
  fi                                                                                
' failed with return #<Process::Status: pid 34 exit 128>                                                                                                                 
Location of failure: /usr/local/lib/ruby/gems/3.4.0/gems/pups-1.4.0/lib/pups/exec_command.rb:138:in 'Pups::ExecCommand#spawn'
exec failed with the params {"cd" => "$home", "tag" => "build", "hook" => "code", "cmd" => ["sudo -H -E -u discourse git clean -f", "sudo -H -E -u discourse bash -c '\n 
 set -o errexit\n  git fetch --tags --prune-tags --prune --force origin\n  if [[ $(git symbolic-ref --short HEAD) == $version ]] ; then\n      git pull\n  else\n      gi
t -c advice.detachedHead=false checkout $version\n  fi\n'", "sudo -H -E -u discourse git config user.discourse-version $version", "mkdir -p tmp", "chown discourse:www-da
ta tmp", "mkdir -p tmp/pids", "mkdir -p tmp/sockets", "touch tmp/.gitkeep", "mkdir -p                    /shared/log/rails", "bash -c \"touch -a           /shared/log/ra
ils/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log\"", "bash -c \"ln    -s           /shared/log/rails/{production,production_errors,unicorn.st
dout,unicorn.stderr,sidekiq}.log $home/log\"", "bash -c \"mkdir -p           /shared/{uploads,backups}\"", "bash -c \"ln    -s           /shared/{uploads,backups} $home/
public\"", "bash -c \"mkdir -p           /shared/tmp/{backups,restores}\"", "bash -c \"ln    -s           /shared/tmp/{backups,restores} $home/tmp\"", "chown -R discours
e:www-data /shared/log/rails /shared/uploads /shared/backups /shared/tmp", "[ ! -d public/plugins ] || find public/plugins/ -maxdepth 1 -xtype l -delete"]}
bootstrap failed with exit code 128                                                 
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.                                                                                                                        
f21423e74889e97cf80d8d237c4ca8bb1d4674e6e3a0a30527d1b4394d5d8c98

Ja, ich bin jetzt auch offiziell ausgefallen.

Zuerst kam diese Meldung: Oops The software powering this discussion forum encountered an unexpected problem

Das habe ich noch nie gesehen. Also habe ich mich eingeloggt und neu gestartet, während ich suchte, was los ist.

Hat nicht geholfen. Okay, es kommen gerade neue Nutzer rein und wir können nicht offline sein. Also habe ich seit ein paar Monaten nicht mehr aktualisiert. Aber ich muss wohl zumindest die App neu aufbauen.

Das scheitert dann aber an der Frage nach dem Benutzernamen.

Ich habe ./discourse-doctor versucht, aber am Ende den gleichen GitHub-Fehler bekommen.

Ich werde versuchen, mir die Logs anzusehen.

Hinweis: Ich habe auch noch eine schöne Restkapazität von 5 GB auf der Festplatte, aber normalerweise habe ich es gerade so geschafft, zu aktualisieren. Wenn ich den Speicher verdoppeln würde, würde sich auch die Kosten verdoppeln, und ich hatte nie Zeit, das Ganze auf meinen eigenen Server zu verlegen.

Ich habe versucht, mir die Logs anzusehen, aber ich sehe nur viele abgelehnte Verbindungen wie:
/usr/local/lib/ruby/3.4.0/socket.rb:1639:in ‘Socket#__connect_nonblock’: Connection refused - connect(2) for 127.0.0.1:6379 (Errno::ECONNREFUSED)

Ich vermute, es hängt damit zusammen?

Ich kann meine Komponenten auf meinem Forum nicht aktualisieren, und beim Rebuild erhalte ich eine unerwartete Ausgabe:

./launcher rebuild app
arm64 arch detected.
WARNING: This output is designed for human readability. For machine-readable output, please use --format.
Ensuring launcher is up to date
Username for 'https://github.com':

Mein Forum nutzt eine discourse.diy-Domain.

Wahrscheinlich ist es das. Klingt danach.

Es hat heute früher angefangen, und ich vermute, es kam, als Voice in den Core integriert wurde. Aber das ist nur ein Gefühl.

Wir müssen einfach abwarten :man_shrugging:

Jetzt gefällt mir die 2-Container-Lösung wirklich gut…

Es scheint sich um ein Problem mit GitHub zu handeln. Hier habe ich eine Diskussion dazu gefunden: Unauthenticated clone of a public repo intermittently returns 401 (prompts for Username) from CI workers · community · Discussion #206581 · GitHub

Hallo zusammen! :waving_hand: Danke, dass ihr das gemeldet habt. Wir haben das Thema an unsere internen Teams zur Untersuchung weitergeleitet – falls es Neuigkeiten gibt, werden wir sie hier und in den entsprechenden Diskussionen veröffentlichen :sparkles:

Als mögliche Workaround-Lösung, aber ich würde euch raten, erst einmal abzuwarten, funktioniert Folgendes:

cd /var/discourse
git config --global http.version HTTP/1.1
./launcher rebuild app

(Es kann sein, dass ihr zweimal neu aufbauen müsst, da ein PostgreSQL-Upgrade stattfindet)

Ich habe heute etwa 10 Sites aktualisiert, ohne dass es zu Fehlern kam (außer denen wegen fehlendem Speicherplatz).

Das sieht nach einer Aktualisierung über die Kommandozeile aus, aber falls das nicht der Fall war, würde ich es auf jeden Fall empfehlen.

5 GB sind nicht „angenehm“, das ist gerade mal genug, um einen neuen Container aufzubauen. Hast du in letzter Zeit ein ./launcher cleanup ausgeführt?

Das würde Sinn ergeben. Und es betrifft wahrscheinlich nicht alle gleich stark.

Eine Alternative, die möglicherweise viel weniger störend wäre, wäre es, die Einstellung wie folgt zu ändern:

# docker exec -i -u discourse app git config --global http.version HTTP/1.1

(auf eigene Gefahr, natürlich.)

Wie üblich werde ich das Problem etwas weiter aufschlüsseln – fast eine lustige Geschichte über 3 bis 5 Ausfallpunkte. Nach 4 Stunden Recherche um Mitternacht ist es allerdings nicht ganz so lustig. Einige dieser Angaben sind technisch wahrscheinlich nicht ganz korrekt, aber so liest es sich besser, auch wenn Fehler dabei sein könnten.

Grundlagen (Entschuldigung für die Erklärungen): Mein SSO leitet auf meinen Heimserver um (nachdem Gandi vor ein paar Jahren einige Dinge nicht lösen konnte und ich zu Dynadot gewechselt bin). Es funktioniert auch besser, nach dem Umzug von Hostpapa umzuleiten, die das sehr zuverlässige LFC-Hosting gekauft haben – da konnte man sich nicht sicher sein, ob sie etwas stillschweigend upgraden und die gesamte Infrastruktur zum Absturz bringen.

Und nun zu den 3 (oder kann ich das sogar als 5-Punkt-Ausfall zählen? Das wäre ein neuer Rekord):

1*) Opera wurde heute erneut aktualisiert, scheinbar mit neuem Code, der 301/302-Umleitungen wirklich (nicht) mag und sie hart im Cache speichert (Chromium irgendetwas).
2*) Dynadot hatte heute Nacht scheinbar eine Verzögerung von über 30 Sekunden (genau das, was nötig ist, um das Chromium-Problem auszulösen, das nun im Cache liegt – oh je).
3*) Discourse ist abgestürzt (das oben erwähnte „oops“), weil es nicht innerhalb von 30 Sekunden auf das SSO zugreifen konnte. Die App musste neu gestartet werden, aber ich bin mir tatsächlich nicht sicher, ob Discourse bis zum Neustart down war oder nicht (ich war im Panikmodus :wink: ). Gemini hat mich basierend auf den Logs in Schleifen um SSO/Rails/Redis usw. gejagt. Das war, nachdem ich versucht hatte, ein Upgrade durchzuführen, erwähne ich es aber unter diesem Punkt, um die Kohärenz zu wahren.
4*) Da ich nicht herausfinden konnte, was schiefgeht, habe ich Linux vorsichtshalber neu gestartet und angefangen, Discourse zu upgraden. Das schlug fehl wegen des GitHub-Problems. Und ja, ich musste vorher wie üblich etwas Speicherplatz auf den Disks freigeben, aber ich war nie bei 0 GB, was ebenfalls ein möglicher Grund für Redis-Probleme gewesen wäre. Und ja, II, da die Dinge nun stabil zu sein scheinen, werde ich 10 GB in der Cloud hinzufügen und vielleicht ein Arkshine-Upgrade durchführen.
5*) Eher das 1. Problem, aber während ich versuchte, all dies zu lösen, habe ich die Seite kontinuierlich hart aktualisiert, um zu sehen, ob irgendwo etwas behoben wurde. Ich vermute, ich treffe ständig die gecachte Umleitung vom ursprünglichen Fehler, was bedeutet, dass ich nicht einmal sehen kann, ob das Problem behoben wurde, selbst nach dem ersten Neustart.

  1. Ich kann mein SSO problemlos aufrufen.
  2. Eine andere Domain, die kein SSO verwendet, funktioniert ebenfalls gut.
  3. Wenn ich das SSO für Discourse deaktiviere, wird das Forum angezeigt, aber normale Logins haben bei mir nie funktioniert, daher bringt das nicht viel. Aber jetzt weiß ich zumindest, dass es wirklich das SSO ist, das die Probleme verursacht.
  4. Gemini schlug vor, in einem privaten Fenster zu testen, also habe ich stattdessen Firefox gestartet und – was, das Forum funktioniert einwandfrei. Super, außer… was war das?
  5. Opera schlägt weiterhin fehl. Ja, ich vermute immer noch, dass die Umleitung gecacht wird, aber das wusste ich zum Zeitpunkt der Ereignisse nicht. Ich werde die Site-Cookies, Caches usw. vorerst nicht leeren.
  6. Da es funktioniert, habe ich die Arbeit, die ich eigentlich vorhatte, eine halbe Stunde lang in Firefox erledigt.
  7. Opera neu gestartet und hey presto, das Forum wird angezeigt. Vielleicht habe ich Opera früher schon neu gestartet, ich erinnere mich nicht, aber vielleicht ist der Cache nun abgelaufen und es wurde eine ordnungsgemäße Aktualisierung durchgeführt.

Amüsierenderweise bin ich heute Morgen aufgewacht, und Opera hatte erneut ein Upgrade erhalten. Vielleicht hat dieses hart gecachte Upgrade auch viele andere Probleme verursacht :slight_smile: .

Zusätzlicher Hinweis: 3) ist natürlich der interessanteste Teil für uns. Vielleicht kann es noch aus den Logs gefunden werden (kann bei Bedarf nachschauen). Wenn Discourse abstürzt, versucht es, sich über einen Timer neu zu starten? Oder war die gesamte Site down, bis ich eingeloggt war und die App neu gestartet habe?

Ich habe zwei selbst gehostete Discourse-Instanzen, die im Moment nicht erreichbar sind. In den Logs sehe ich Zeilen wie diese:

I, [2026-09-03T06:02:41.640393 #80]  INFO -- : reaped unknown subprocess #<Process::Status: pid 3079826 exit 128>
I, [2026-09-03T06:03:10.006495 #80]  INFO -- : reaped unknown subprocess #<Process::Status: pid 3079864 exit 128>
I, [2026-09-03T06:03:10.394732 #80]  INFO -- : reaped unknown subprocess #<Process::Status: pid 3079871 exit 128>
E, [2026-09-03T06:03:10.518338 #722] ERROR -- : worker=0 gen=0 pid=722 timed out, exiting
I, [2026-09-03T06:03:10.530245 #722]  INFO -- : worker=0 gen=0 pid=722 exiting

Der Exit-Code 128 sieht verdächtig nach Git aus.

Könnte dies damit zusammenhängen? Und falls ja, warum würde ein fehlgeschlagener GitHub-Lookup dazu führen, dass eine Instanz ausgeht?

Ich frage mich, ob das damit zusammenhängt​:thinking:

Hi,

scheint jetzt zu funktionieren. Beim ersten Rebuild ist ein Fehler aufgetreten, aber beim zweiten Versuch hat es geklappt und Discourse ist wieder online. Die Versionsprüfung funktioniert ebenfalls wieder.