Go Migration Windows nach Ubuntuhttps://www.golabs.ch/386?&atomThu, 28 Mar 2024 14:33:43 +0000stack.ch
https://stack.ch/
2d9ed4db-ed10-11ee-8c11-005056bb85fbSimtech AG - Blog - Go Blog (Golang Blog) - Go Migration Windows nach Ubuntu
https://www.golabs.ch/386
2d9ed5f1-ed10-11ee-8c11-005056bb85fbThu, 28 Mar 2024 14:33:43 +0000Go Migration Windows nach Ubuntu Blog
https://www.golabs.ch/386
2d9ed70c-ed10-11ee-8c11-005056bb85fbThu, 28 Mar 2024 14:33:43 +0000
https://www.golabs.ch/386
2d9ed7fe-ed10-11ee-8c11-005056bb85fbThu, 28 Mar 2024 14:33:43 +0000Der HTTP Server stack.ch basiert auf der Programmiersprache Go (Golang) und wird seit 2017 auf einer Windows 32-Bit Plattform betrieben. Mit der zunehmenden Datenmenge soll auf eine Linux Ubuntu 64-Bit Umgebung migriert werden. Unter Windows wurde der Server als Windows Service betrieben. Die Registrierung als Windows Service ist direkt im Go Executeable integriert. Unter Unix soll das gleiche native kompilierte Programm als Unix Service systemctl Daemon installiert und betrieben werden.
https://www.golabs.ch/386
2d9ed9cc-ed10-11ee-8c11-005056bb85fbThu, 28 Mar 2024 14:33:43 +0000Go bietet die native Kompiliation für die meisten gängigen Plattformen. Die Komplation erfolg in Abhängigkeit der Go Umgebungsvariablen GOARCH und GOOS. Das Windows 32-Bit Programm wird wie folgt native kompiliert:set GOARCH=386
set GOOS=windows
go build -o stack.ch.windows.x86.exe
set GOARCH=amd64
go build -o stack.ch.windows.x64.exe
Nach der erfolgreichen Kompilation prüfen wir wie folgt die Version unter Windows:stack.ch.windows.x86.exe -version
stack.ch Version 1.8.17Das Windows Executeable wird wie folgt unter Windows als Service installiert:stack.ch.windows.x86.exe -s -install
Das Go Programm native kompiliert für Unix basiert auf den folgenden Umgebungsvariablen:set GOARCH=386
set GOOS=linux
go build -o stack.ch.linux.x86
set GOARCH=amd64
go build -o stack.ch.linux.x64
Nach der erfolgreichen Kompilation prüfen wir wie folgt die Version unter Ubuntu:./stack.ch.linux.x64 -version
stack.ch Version 1.8.17Wir haben also aus dem gleichen Programmcode das Programm unter Windows und unter Ubuntu kompiliert und ausgeführt. Bis jetzt hat alles einwandfrei funktioniert.
https://www.golabs.ch/386
2d9eddcb-ed10-11ee-8c11-005056bb85fbThu, 28 Mar 2024 14:33:43 +0000Das Go Programm installieren wir unter Ubuntu als systemctl Service. Hierzu erstellen wir die Datei /etc/systemd/system/stack.ch.service wie folgt:[Unit]
Description=stack.ch server
After=network.target auditd.service
[Service]
User=to be defined
Group=to be defined
ExecStart=/srv/stack.ch/stack.ch.linux.x64
KillMode=process
Restart=on-failure
StandardOutput=null
Restart=on-failure
Type=simple
WorkingDirectory=/srv/stack.ch
[Install]
WantedBy=multi-user.target
Alias=stack.ch.service
Bevor wir das Programm ausführen können erlauben wir dem Program das öffnen der Ports < 1024 wie folgt:sudo setcap 'cap_net_bind_service=+ep' /srv/stack.ch/stack.ch.linux.x64Nun aktivieren wir den systemctl Service wie folgt:sudo systemctl daemon-reload
sudo systemctl enable stack.ch.service
sudo systemctl start stack.ch.service
sudo systemctl stop stack.ch.service
Der HTTP Server funktioniert einwandfrei. Vorher mussten wir aber einige Anpassungen am Programm und an den Dateien vornehmen.
https://www.golabs.ch/386
2d9ee127-ed10-11ee-8c11-005056bb85fbThu, 28 Mar 2024 14:33:43 +0000Das folgende Listing zeigt die Probleme und Lösungen bei der Migration von Windows nach Ubuntu Unix auf:Unterschiedliche Fehlercodes bei os.Stat zwischen Windows und UnixKonsequenter Einsatz von filepath.SeparatorVerzeichnis- und File-Pfad AnpassungenFilesystem Case Sensitive AnpassungenAllgmein lohnt es sich, wenn man den Zugriff auf die os-Methoden kapselt und damit zentralisiert. So wurde z.B. die Existenzabfrage eines Pfades in die Methode PathExists ausgelagert:func PathExists(path string) bool {
if _, err := os.Stat(path); err != nil {
if os.IsNotExist(err) {
return false
}
}
return true
}Das grösste Problem waren die falsch definierten File Extensions z.B. für Bilder. Schreiben Sie alle Extensions konsequent Lowercase.
https://www.golabs.ch/386
2d9ee39c-ed10-11ee-8c11-005056bb85fbThu, 28 Mar 2024 14:33:43 +0000Go hält was es verspricht. Mit einem doch eher kleinen Aufwand konnten wir ein Programm mit dem gleichen Programmcode unter verschiedenen Plattformen betreiben und dies native kompiliert.Unser Urteil: phänomenal
https://www.golabs.ch/386
2d9ee563-ed10-11ee-8c11-005056bb85fbThu, 28 Mar 2024 14:33:43 +0000War dieser Blog für Sie wertvoll. Wir danken für jede Anregung und FeedbackÜber uns
https://www.golabs.ch/about
Thu, 28 Mar 2024 14:33:43 +00002d9ee9f9-ed10-11ee-8c11-005056bb85fbAktuell
https://www.golabs.ch/
Thu, 28 Mar 2024 14:33:43 +00002d9eeafb-ed10-11ee-8c11-005056bb85fbAGB
https://www.golabs.ch/agb
Thu, 28 Mar 2024 14:33:43 +00002d9eeb98-ed10-11ee-8c11-005056bb85fbBildungswege
https://www.golabs.ch/bildungswege
Thu, 28 Mar 2024 14:33:43 +00002d9eec38-ed10-11ee-8c11-005056bb85fbBlog
https://www.golabs.ch/blog
Thu, 28 Mar 2024 14:33:43 +00002d9eecd2-ed10-11ee-8c11-005056bb85fbRufen Sie mich an
https://www.golabs.ch/callus
Thu, 28 Mar 2024 14:33:43 +00002d9eed8e-ed10-11ee-8c11-005056bb85fbCharts
https://www.golabs.ch/charts
Thu, 28 Mar 2024 14:33:43 +00002d9eee71-ed10-11ee-8c11-005056bb85fbConsulting
https://www.golabs.ch/consulting
Thu, 28 Mar 2024 14:33:43 +00002d9eef23-ed10-11ee-8c11-005056bb85fbKontakt
https://www.golabs.ch/contact
Thu, 28 Mar 2024 14:33:43 +00002d9eefc0-ed10-11ee-8c11-005056bb85fbAusbildung/Kurse
https://www.golabs.ch/education
Thu, 28 Mar 2024 14:33:43 +00002d9ef05f-ed10-11ee-8c11-005056bb85fbSoftware Engineering
https://www.golabs.ch/engineering
Thu, 28 Mar 2024 14:33:43 +00002d9ef0fe-ed10-11ee-8c11-005056bb85fbFreelancer
https://www.golabs.ch/freelancer
Thu, 28 Mar 2024 14:33:43 +00002d9ef198-ed10-11ee-8c11-005056bb85fbImpressum
https://www.golabs.ch/impressum
Thu, 28 Mar 2024 14:33:43 +00002d9ef229-ed10-11ee-8c11-005056bb85fbKursleiter
https://www.golabs.ch/kursleiter
Thu, 28 Mar 2024 14:33:43 +00002d9ef2cc-ed10-11ee-8c11-005056bb85fbNetzwerk
https://www.golabs.ch/network
Thu, 28 Mar 2024 14:33:43 +00002d9ef366-ed10-11ee-8c11-005056bb85fbReferenzen
https://www.golabs.ch/references
Thu, 28 Mar 2024 14:33:43 +00002d9ef400-ed10-11ee-8c11-005056bb85fbSitemap
https://www.golabs.ch/sitemap
Thu, 28 Mar 2024 14:33:43 +00002d9ef496-ed10-11ee-8c11-005056bb85fbTools
https://www.golabs.ch/tools
Thu, 28 Mar 2024 14:33:43 +00002d9ef52f-ed10-11ee-8c11-005056bb85fbVision
https://www.golabs.ch/vision
Thu, 28 Mar 2024 14:33:43 +00002d9ef5c5-ed10-11ee-8c11-005056bb85fb