Forum: Compiler & IDEs VSCode unter Linux (openSUSE Tumbleweed)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Markus W. (dl8mby)


Lesenswert?

Hallo Forum,

wollte etwas mit dem LILYGO T-Display-S3 CAP. (ESP-32-S3) spielen.
Auf der LILYGO Seite wird dafür VSCode von Microsoft empfohlen.

Dafür gibt es sogar ein Repo direkt mit rpm Paketen.

Nun meine Frage, würdet Ihr das Paket auf Eurem Linux installieren
oder eher ein anderes Tool verwenden, z.B. die Arduino GUI.

Im Forum konnte ich Beiträge finden, von Leuten, die VSCode unter
Linux verwenden, mit mehr oder weniger Problemen. Beiträge waren
zum Teil von 2019 und 2022.

Ist das MS Paket für Linux mittlerweile verlässlicher und seriös?

Traut Ihr dem Paket und kann man damit bedenkenlos arbeiten?

Danke für Eure Einschätzung - und bitte nicht gleich steinigen -
gilt für die MS Fraktion hier im Forum.

Gruß
Markus

: Bearbeitet durch User
von Monk (roehrmond)


Lesenswert?

Markus W. schrieb:
> Ist das MS Paket für Linux mittlerweile verlässlicher und seriös?

Ist sie. Wir nutzen die IDE auf der Arbeit mit der Programmiersprache Go 
unter Linux.  Die Plugins ThunderClient und der Swagger Editor 
überzeugen für REST Schnittstellen.

Eine Zeitlang haben wir sie auch erfolgreich für Java verwendet, aber 
IntelliJ IDEA ist besser.

Zu Hause nutze ich vscode mit dem Arduino Plugin von Microsoft, um 
ESP8266 Module zu programmieren. Bei C++ bevorzuge ich sonst die Qt 
Creator IDE, aber Microsofts Arduino Integration ist echt gut.

: Bearbeitet durch User
von Markus W. (dl8mby)


Lesenswert?

@Monk,

danke für Deinen schnellen Feedback.

Den QT-Creator habe ich auch auf dem System für diverse
C und C++ Projekte im Einsatz.

Bei der ESP32 (sicherlich auch bei ESP8266) brauchst man ja
eine komplette Toolchain um nicht nur zu editieren und compilieren
und linken sondern auch zu debuggen und zu flashen.

Kann das alles in die VSCode GUI einfach integriert werden?
(Wahrscheinlich über Plugins?)

Markus

von Markus W. (dl8mby)


Lesenswert?

Habe jetzt das VSCode Paket installiert.
1
>zypper info code
2
Loading repository data...
3
Reading installed packages...
4
5
6
Information for package code:
7
-----------------------------
8
Repository     : Visual Studio Code
9
Name           : code
10
Version        : 1.93.1-1726079369.el8
11
Arch           : x86_64
12
Vendor         : Microsoft Corporation
13
Installed Size : 384.8 MiB
14
Installed      : No
15
Status         : not installed
16
Source package : code-1.93.1-1726079369.el8.src
17
Upstream URL   : https://code.visualstudio.com/
18
Summary        : Code editing. Redefined.
19
Description    : 
20
    Visual Studio Code is a new choice of tool that combines the simplicity of a code editor with what developers
21
    need for the core edit-build-debug cycle. See https://code.visualstudio.com/docs/setup/linux for installation

...
1
>zypper install code
2
Loading repository data...
3
Reading installed packages...
4
Resolving package dependencies...
5
6
The following NEW package is going to be installed:
7
  code
8
9
1 new package to install.
10
11
Package download size:   137.2 MiB
12
13
Package install size change:
14
              |     384.8 MiB  required by to be installed packages
15
   384.8 MiB  |  -      0 B    released by to be removed packages
16
17
Backend:  classic_rpmtrans
18
Continue? [y/n/v/...? shows all options] (y): y
19
Retrieving: code-1.93.1-1726079369.el8.x86_64 (Visual Studio Code)                              (1/1), 137.2 MiB    
20
Retrieving: code-1.93.1-1726079369.el8.x86_64.rpm ................................................[done (5.7 MiB/s)]

Scheint nicht so groß zu sein.

Welch Plugins sind neben dem MS Arduino sinvoll, wenn man z.B.
auch Python Code für die kleinen ESP-X Module schreiben will?

Markus

: Bearbeitet durch User
von Monk (roehrmond)


Lesenswert?

Markus W. schrieb:
> Bei der ESP32 (sicherlich auch bei ESP8266) brauchst man ja
> eine komplette Toolchain um nicht nur zu editieren und compilieren
> und linken sondern auch zu debuggen und zu flashen.

Ja. Allerdings kannst du Qt Creator als "besseren" Editor neben der 
Arduino IDE benutzen. Compilieren tut dann die Arduino IDE.

Bei vscode ist Arduino hingegen sauber integriert. Das Plugin lädt bei 
Bedarf die Arduino cli herunter und benutzt sie unter der Haube. Der 
Board-Manager wurde nachgebaut, auch die Examples sind direkt in vscode 
verfügbar (wenn auch erwas versteckt).

Für Python gibt es ein gutes Plugin direkt von Microsoft: 
https://code.visualstudio.com/docs/languages/python

Generell würde ich immer zuerst die Plugins von Microsoft versuchen, 
falls es mehrere Alternativen gibt. Weil ich bisher von allen positiv 
beeindruckt war.

: Bearbeitet durch User
von Markus W. (dl8mby)


Angehängte Dateien:

Lesenswert?

@Monk,

danke für die Hinweise/Links, werde ich mir ansehen.

Im Augenblick bin ich an so trivialen Dingen dran, wie
man die GUI an einen UHD Output anpasst, so dass die
Elemente gut sichtbar sind.

Die Textgröße im Editor ist ja noch trivial, aber wie vergrößere
ich die GUI Elemente, dass sie auf dem UHD Display besser
zu lesen sind?

Wühle in den Settings rum, habe aber noch nichts gefunden.
Gibt es einen Skalierungsfaktor, den man setzen kann?

Markus

von Harald K. (kirnbichler)


Lesenswert?

Markus W. schrieb:
> Ist das MS Paket für Linux mittlerweile verlässlicher und seriös?
>
> Traut Ihr dem Paket und kann man damit bedenkenlos arbeiten?

Du kannst das Ding auch aus den Sourcen übersetzen. Möchte man es z.B. 
unter einem echten Unix wie FreeBSD verwenden, ist das auch der einzige 
Weg, da 'ranzukommen, weil es davon kein fertiges Paket gibt. Mit der 
"Ports"-Umgebung ist das aber kein Problem.

Da gibts die Sourcen:
https://github.com/microsoft/vscode

Eine Einstellung würde ich in der Konfigurationsdatei settings.json auf 
jeden Fall vornehmen:
1
  "telemetry.telemetryLevel": "off"

Denn "telemetry" braucht niemand.

Hilfreich ist die vscode-Extension "C/C++ Intellisense", die bietet 
einem Syntaxhighlighting, Codevervollständigung und mehr.

Der muss man in der Datei c_cpp_properties.json die Pfade auf die 
verwendeeten Sourcen, Compilerincludes etc. beibiegen, dann funktioniert 
das wunderbar.
Das geschieht dort unter "includePath", da kann in Json-Manier eine 
Liste von Verzeichnissen eingetragen werden:
1
{
2
  "configurations":
3
  [
4
    {
5
    "name": "meinkram",
6
    "includePath":
7
    [
8
      "/usr/include",
9
      "/usr/lib"
10
    ],
11
    "defines":
12
    [
13
      "DEBUG",
14
      "SONSTWAS"
15
    ]
16
    }
17
  ],
18
  "version": 4
19
}

So sieht das beispielsweise aus; wenn man Dinge mit bedingter 
Compilation macht, kann man die Symbole auch hier eintragen, dann kommt 
der Intellisense-Mechanismus bestens damit zurecht.

Auch wenn man #include-Dateien verwendet, die via Compilerparameter 
angegeben werden (und nicht im Sourcecode eingebunden werden), kann man 
sie hier mit "forcedInclude" angeben.

Markus W. schrieb:
> oder eher ein anderes Tool verwenden, z.B. die Arduino GUI.

Diese "GUI" ist auch in der 2.x-Version so derb rudimentär, daß der 
Vergleich zu vscode praktisch immer zugunsten von vscode ausfällt.

Was VsCode zur Perfektion fehlt, ist virtual whitespace.

von Markus W. (dl8mby)


Lesenswert?

@Harald K.

Genau so was habe ich gemeint, bei meiner Frage,

danke für den Hinweis.

>"telemetry.telemetryLevel": "off"

Hast Du was zu meinem UHD Darstellungs-Problem einen Rat?

Markus

von Florian S. (sevenacids)


Lesenswert?

Also wenn schon Visual Studio Code unter Linux, dann bitte in Form von 
VSCodium. Das sind freie Visual Studio Code-Binärdateien basierend auf 
den unter MIT stehenden Quellen ohne proprietäre 
Microsoft-Modifizierungen, wie Telemetrie und Tracking. Die verfügbaren 
Plug-Ins funktionieren auch damit. Gibt dazu ein Repo über GitLab, auch 
für OpenSUSE.

: Bearbeitet durch User
von Markus W. (dl8mby)


Lesenswert?

Bei mir steht die json config unter

>find . -name \*settings.json\* | grep vscode
/usr/share/texmf/context/data/vscode/settings.json

Falls es jemanden auch interessieren sollte.

Danke für den Hinweis auf VSCodium von Florian S.

Werde ich mir auch ansehen. War bis dato nicht bekannt.

LG
Markus


Das o.g. setting zur telemetry stand bei mir garnicht drin.
1
   "telemetry.enableCrashReporter": false,
2
   "telemetry.enableTelemetry": false,
3
   "telemetry.telemetryLevel": "off",

hebe ich jetzt eingefügt.

: Bearbeitet durch User
von Monk (roehrmond)


Lesenswert?

Markus W. schrieb:
> Die Textgröße im Editor ist ja noch trivial, aber wie vergrößere
> ich die GUI Elemente, dass sie auf dem UHD Display besser
> zu lesen sind?

Ich würde die Einstellung im Linux Desktop suchen, nicht in einzelnen 
Anwendungsprogrammen.

Diesbezüglich hat Gnome 47 gerade die Unterstützung für "Krumme" 
Vergrößerungsfaktoren erhalten.

von Markus W. (dl8mby)


Angehängte Dateien:

Lesenswert?

@Monk,

bei mir passen die anderen Programme bei der Darstellung auf dem UHD
Display, deshalb habe ich im Anhang das darunterliegende Fenster mit
abgebildet.
Diese Einstellung habe ich in der Window-Manager Config vorgenommen.
Offensichtlich verwendet VSCode diesen Wert nicht.

Während ich das schreibe, habe ich mir QT-Creator aufgerufen und
sehe, dass die Darstellung dort auch vergleichbar klein ist,
siehe Anhang, allerdings nicht bei den Windows-Menus, sondern bei
den QTC GUI-Elementen. War aber vor einigen Wochen noch nicht so.

Eventuell hat da ein Update des OS wieder was verändert.
Muss ich weiter suchen.

LG
Markus

von Markus W. (dl8mby)


Lesenswert?

@Harald K

Bei meiner VSCode Installation gibt es keine

c_cpp_properties.json

Datei

sondern nur eine

~/.vscode/extensions/ms-vscode.cpptools-1.21.6-linux-x64/c_cpp_propertie 
s.schema.json,

nach der Installation des Plugins "C/C++ Intellisense".


Darin findet sich der json Block
1
>cat c_cpp_properties.schema.json
2
{
3
    "$schema": "http://json-schema.org/draft-04/schema#",
4
    "type": "object",
5
    "definitions": {
6
        "configurations": {
7
            "type": "array",
8
            "items": {
9
                "type": "object",
10
                "required": [
11
                    "name"
12
                ],
13
                "properties": {
14
                    "name": {
15
                        "markdownDescription": "Configuration identifier. `Mac`, `Linux`, and `Win32` are special identifiers for configurations that will be auto-selected on those platforms, but the identifier can be anything.",
16
                        "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.",
17
                        "type": "string"
18
                    },
19
                    "compilerPath": {
20
                        "markdownDescription": "Full path of the compiler being used, e.g. `/usr/bin/gcc`, to enable more accurate IntelliSense.",
21
                        "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.",
22
                        "type": "string"
23
                    },
24
                    "compilerArgs": {
25
                        "markdownDescription": "Compiler arguments to modify the includes or defines used, e.g. `-nostdinc++`, `-m32`, etc. Arguments that take additional space-delimited arguments should be entered as separate arguments in the array, e.g. for `--sysroot <arg>` use `\"--sysroot\", \"<arg>\"`.",
26
                        "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered, except potentially the `arg` text which is a placeholder and not literal text, i.e. an abbreviation for `argument`.",
27
                        "type": "array",
28
                        "items": {
29
                            "type": "string"
30
                        }
31
                    },
32
33
34
...
35
36
                    "includePath": {
37
                        "markdownDescription": "A list of paths for the IntelliSense engine to use while searching for included headers. Searching on these paths is not recursive. Specify `**` to indicate recursive search. For example, `${workspaceFolder}/**` will search through all subdirectories while `${workspaceFolder}` will not. Usually, this should not include system includes; instead, set `C_Cpp.default.compilerPath`.",
38
                        "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.",
39
                        "type": "array",
40
                        "items": {
41
                            "type": "string"
42
                        }
43
                    },
44
...

Dieser Bereich - letzter Block - muss wohl angepasst werden.


Markus

von Harald K. (kirnbichler)


Lesenswert?

Markus W. schrieb:
> Bei meiner VSCode Installation gibt es keine
>
> c_cpp_properties.json

Die gehört in das Verzeichnis .vscode innerhalb Deines Projektes.

Hier gibts Dokumentation dazu:
https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference

Die von Dir gefundene Datei solltest Du hingegen nicht anfassen. Die 
steuert das UI für die Bearbeitung von c_cpp_properties.json, wie hier 
beschrieben:

https://code.visualstudio.com/docs/cpp/configure-intellisense

Bei Deinem Monitorproblem kann ich Dir nicht helfen, ich steuere meine 
Monitore mit ihrer nativen Auflösung und 100%-Skalierung an.

von Markus W. (dl8mby)


Lesenswert?

Danke Harald K.

Habe mir gerade die ESP IDF Umgebung installiert und das
ESP-IDF Plugin im VSCodium (VSCode habe ich entfernt!)

Was mich etwas irritiert, das man kein Projekt anlegt, oder ist
Workspace ein Synonym für ein Projekt?

Man legt ja erst ein Projekt an, definiert den Type (C, C++, Python,
etc) und fügt anschließend bestehende oder erzeugt neue Files zum
Projekt hinzu.

Hast Du eine Brauchbare Beschreibung, wie man ein ESP Projekt
in VSCode anlegt um dann die "idf.py build" und "idf.py flash"
Kommandos durchlaufen lassen zu können.

Danke im Voraus für Deine Mühe.

Markus

Ok, da gibt es einiges zum Lesen

z.B.

https://code.visualstudio.com/docs/cpp/configure-intellisense#_option-1-select-a-configuration-option-through-the-configuration-quick-pick

oder auch:

https://randomnerdtutorials.com/vs-code-platformio-ide-esp32-esp8266-arduino/

: Bearbeitet durch User
von Monk (roehrmond)


Lesenswert?

Markus W. schrieb:
> Was mich etwas irritiert, das man kein Projekt anlegt

In vscode öffnet man einfach entweder einzelne Dateien oder 
Projektverzeichnisse. Ein Verzeichnis mit einer *.ino Datei wird z.B 
automagisch als Arduino Projekt erkannt.

Sobald du Projekt-spezifische Settings änderst, legt die IDE das 
Unterverzeichnis .vscode an und speichert es dort im JSON Format. Man 
kann dort auch ruhig manuell Dateien anlegen und ändern. Das bietet sich 
an, wenn man Settings von einem bestehenden Projekt oder dem Internet 
kopieren will.

Wenn du irgendwelche Funktionen im Menü vermisst, drücke strg+shift+P 
und tippe ein, wonach du suchst. Dort gibt es zahlreiche weitere 
Funktionen mit Suche. Das ist in der IDE die einzige ungewöhnliche 
Tastenkombibation, die ich jeden Tag benutze.

: Bearbeitet durch User
von Markus W. (dl8mby)


Lesenswert?

Nun habe ich das Problem, dass offensichtlich die
platformio Extension nicht fuer VSCodeium sondern
nur für VSCode existiert.
Oder hat jemand eine Möglichkeit gefunden, platformio
in VSCodium zu laden.

War wohl voreilig mit dem Löschen des VSCode Paketes.

Falls es in VSCodium nicht ladbar ist muss ich wohl wieder
zu dem MS Paket zurueck :-(

Markus

von Monk (roehrmond)


Lesenswert?

Brauchst du denn Platformio? Reicht dir nicht das Arduino Plugin?

Ich frage, weil Platformio an der Komplexität der vielen Dependencies zu 
ersticken droht. Von Eierlegenden Wollmilchsäuen halte ich wenig. 
Arduino als Über-Framework über dem IDF (bzw. HAL bri ST) ist mur schon 
fast zu viel. Platformio setzt ja noch einen Layer drauf.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Markus W. schrieb:
> Was mich etwas irritiert, das man kein Projekt anlegt, oder ist
> Workspace ein Synonym für ein Projekt?

Ich mache mit vscode andere Dinge als Du, daher ist meine Vorgehensweise 
vielleicht nicht die richtige für Dich.


Ein neues Projekt lege ich an, indem ich ein Verzeichnis anlege, und in 
das eine Art "Schablone" für Projekte reinkopiere.

Die besteht bei mir aus einem simplen helloworld.c, einer Schablone für 
CMakeFiles.txt, und einem Unterverzeichnis namens .vscode, in das ich 
meine c_cpp_properties.json reinkopiere.

Dann rufe ich aus dem Projektverzeichnis heraus vscode mit

      vscode .

auf.

Aber, wie gesagt, ich benutze komplett andere Werkzeuge als Du für meine 
Arbeit, die ich mit vscode mache (wie Du schon erkannt hast, CMake als 
Makefilegenerator für ein make, llvm als C-Compiler und ein lldb-Plugin 
fürs Remote-Debuggen).

Wenn Du mit einem Deiner Werkzeuge ein funktionierendes Projekt hast, 
dann erfolgt die Integration in vscode unter anderem durch die Datei

     .vscode/tasks.json

In der steht drin, wie der Compiler aufgerufen wird, in der steht drin, 
wie der Debugger verwendet wird etc.
Die solltest Du Dir also genauer ansehen.

Und wenn im Verzeichnis .vscode noch irgendwas anderes liegt, solltest 
Du auch da mal hineinsehen, das ist potentiell interessant.


Viel Erfolg!

von Monk (roehrmond)


Lesenswert?

Markus W. schrieb:
> Diese Einstellung habe ich in der Window-Manager Config vorgenommen.
> Offensichtlich verwendet VSCode diesen Wert nicht.

Probiere mal die Zoom Funktion
https://code.visualstudio.com/docs/editor/accessibility

Bei mir macht ctrl + nicht nur die Schrift, sondern auch die Symbole 
größer.

von Markus W. (dl8mby)


Lesenswert?

Hallo Harald K,
hallo Monk,

danke für den Input zum Projek-Anlegen @Harald,
und danke für den Hinweis zum Zoom-Faktor @Monk,
hat geklappt und die Symbole werden ebenfalls größer.

War jetzt kurz weg und nun kann ich wieder rumspielen.

Euch einen schönen Samstag Abend.

LG
Markus

von Harald K. (kirnbichler)


Lesenswert?

Markus W. schrieb:
> und danke für den Hinweis zum Zoom-Faktor @Monk,
> hat geklappt und die Symbole werden ebenfalls größer.

Diese Einstellung müsstest Du übrigens in settings.json finden - 
entweder in der projektspezifischen, oder in der, die irgendwo in Deinem 
~ liegt.

von Andreas M. (amesser)


Lesenswert?

Ich verwende schon lange VSCode und habe damit keine Probleme unter 
Linux. Auch die Darstellung auf meinem 4k Monitor passt. Hast Du schon 
mal die DPI vom XServer geprüft? ( xdpyinfo in einem terminal eingeben) 
Die Automatische Erkennung hat bei mir selten richtig funktioniert.

Ein Kritikpunkt an VSCode bei mir war, dass das .DEB Paket eine der 
ausführbaren Dateien als setuid installiert hat. Das geht meiner Meinung 
nach gar nicht, wer weis was da alles unter der Haube passiert. 
Glücklicherweise kann man unter Debian dem dpgk per Config sagen, diese 
Rechte automatisiert wieder zu entziehen.

Bei VSCode sollte man auch immer die Cacheverzeichnisse im Blick 
behalten, die C Extension legt Standardmäßig je Projekt bis zu 5GB 
Intellisense Cache an.

von Monk (roehrmond)


Lesenswert?

Andreas M. schrieb:
> Ein Kritikpunkt an VSCode bei mir war, dass das .DEB Paket eine der
> ausführbaren Dateien als setuid installiert hat. Das geht meiner Meinung
> nach gar nicht, wer weis was da alles unter der Haube passiert.
> Glücklicherweise kann man unter Debian dem dpgk per Config sagen, diese
> Rechte automatisiert wieder zu entziehen.

Ich halte Microsoft allerdings schon für vetrauenswürdig. Die werden das 
nicht missbrauchen, um dir böses anzutun.

von Andreas M. (amesser)


Lesenswert?

Monk schrieb:
> Ich halte Microsoft allerdings schon für vetrauenswürdig. Die werden das
> nicht missbrauchen, um dir böses anzutun.

Wie du meinst. Der Punkt ist aber, das du nicht weist was dieses setuid 
Binary wirklich tut. Es könnte z.B. auch während des Update-Prozesses 
Code der Extensions ausführen. Vertrausts auch allen Extensions?

Letzlich ist es so, das ein User-Prozess nicht ohne Grund ein 
User-Prozess bleiben sollte. Als System-Administrator will ich nicht, 
das ein Benutzer mit root Rechten auf dem System rummacht, vor allem 
nicht ohne das ich vorher gefragt wurde und/oder der Benutzer das 
möglicherweise gar nicht weis. Der Benutzer kann ja alle möglichen 
Extensions installieren, daran kann ich Ihn als Admin gar nicht hindern. 
Ich will auch nicht das ein Benutzer des Systems einfach so eine 
Software aktualisieren kann, die dann auch alle anderen betrifft.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Andreas M. schrieb:
> Der Punkt ist aber, das du nicht weist was dieses setuid
> Binary wirklich tut.

Wie heißt es denn?

von Oliver S. (oliverso)


Lesenswert?

Markus W. schrieb:
> Auf der LILYGO Seite wird dafür VSCode von Microsoft empfohlen.

Ein echter Linuxer nimmt vi oder emacs, für alles.

Oliver

von Andreas M. (amesser)


Lesenswert?

Harald K. schrieb:
> Andreas M. schrieb:
>> Der Punkt ist aber, das du nicht weist was dieses setuid
>> Binary wirklich tut.
>
> Wie heißt es denn?

Habs gerade nochmal geprüft, ist auch im aktuellen Paket noch so:
1
$ dpkg-deb -c code_1.93.1-1726079302_amd64.deb  | grep sandbox
2
-rwsr-xr-x root/root     54248 2024-08-20 03:38 ./usr/share/code/chrome-sandbox

Unter Debian basierten Distributionen kann man mittels folgendem Befehl 
dpkg sagen, die Berechtigungen für diese Datei grundsätzlich zu 
überschreiben:
1
$ dpkg-statoverride --update --add root root 755 /usr/share/code/chrome-sandbox

von Harald K. (kirnbichler)


Lesenswert?

Hmm.
https://github.com/flathub/com.visualstudio.code/issues/223

Unter "Progress for electron sandbox support" in 
https://code.visualstudio.com/updates/v1_59

findet man auch Hinweise.

Warum für sandbox so ein setuid-Zeug nötig ist? Keine Ahnung, dazu 
verstehe ich davon nicht genug.

Sicher dürfte aber sein, daß das tatsächlich absichtlich ist und keine 
irgendwie hintenrum reingedrückte Schadfunktion.

von Εrnst B. (ernst)


Lesenswert?

Harald K. schrieb:
> Warum für sandbox so ein setuid-Zeug nötig ist?

War es früher, ist es (mit halbwegs aktuellen Kerneln, so ab 
5.10irgendwas) nicht mehr.

Hintergrund: Die gesamte Oberfläche von VSCode ist HTML+Javascript, und 
wird von einem mit dem Paket gebündelten Chrome-Webbrowser dargestellt.

Chrome möchte seine Render-Prozesse gerne in einer Sandbox ohne 
Dateisystemzugriff laufen lassen, aus Sicherheitsgründen.

Um diese Sandbox zu erstellen, waren früher Root-Rechte nötig, deshalb 
das kleine suid-helper-programm.

Bei aktuellen Kerneln (Wenn mit CONFIG_USER_NS=y erstellt) lässt sich 
die Sandbox ohne Root-Rechte erstellen, und chrome (bzw chromium, bzw 
electron, bzw vscode) machen das auch.

Aber: chrome und vscode sollen auf möglichst vielen verschiedenen und 
auch alten Linux-Distributionen funktionieren, deshalb wird das 
suid-binary mitgeliefert, auch wenn es in 99% der Fälle nicht verwendet 
werden muss...

Schöner wäre natürlich, wenn die post-install-scripte im dpkg das 
suid-bit nur setzen, wenn der laufende Kernel das auch erfordert.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Εrnst B. schrieb:
> Um diese Sandbox zu erstellen, waren früher Root-Rechte nötig, deshalb
> das kleine suid-helper-programm.

Danke für die Erklärung. Dann sollten damit "amesser"s Bedenken 
ausgeräumt sein.

von Markus W. (dl8mby)


Lesenswert?

Ich bedanke mich auch für die rege Diskussion zu VSCode.
Habe jetzt gerade erst wieder durch Zufall reingeschaut und
gesehen, dass noch diverse Postings eingestellt wurden.

Werde erst am WE wieder mit dem VSCode weiter machen können.
Unter der Woche stehen andere Dinge an.

LG
Markus

von Andreas M. (amesser)


Lesenswert?

Harald K. schrieb:
> Danke für die Erklärung. Dann sollten damit "amesser"s Bedenken
> ausgeräumt sein.

Nö sind sie nicht. Erstens ist es unnötig, der Kernel unterstützt die 
entsprechenden Features bereits seit 2013, zweitens habe ich inzwischen 
ausreichend Erfahrung mit der "Vertrauenswürdigkeit" von Microsoft und 
drittens müsste der chrome (bzw in diesem Fall chromium) gar nicht im 
"code" Paket enthalten sein, da dieser für so ziemlich jedes Linux über 
die normalen Paketquellen bezogen werden kann.

von Εrnst B. (ernst)


Lesenswert?

Andreas M. schrieb:
> müsste der chrome (bzw in diesem Fall chromium) gar nicht im
> "code" Paket enthalten sein

Gibt diverse Optionen, wie du VSCode ohne den mitgelieferten Browser 
installieren kannst, und dann per Webbrowser benutzen kannst.

z.B.
https://coder.com/docs/code-server
https://hub.docker.com/r/linuxserver/code-server
usw.

Ist halt für die meisten User eher unpraktisch so.

von Harald K. (kirnbichler)


Lesenswert?

Andreas M. schrieb:
> und
> drittens müsste der chrome (bzw in diesem Fall chromium) gar nicht im
> "code" Paket enthalten sein, da dieser für so ziemlich jedes Linux über
> die normalen Paketquellen bezogen werden kann.

Vscode ist eine "Electron"-Anwendung, da läuft afaik kein normaler 
Webbrowser.

von Εrnst B. (ernst)


Lesenswert?

Harald K. schrieb:
> Vscode ist eine "Electron"-Anwendung, da läuft afaik kein normaler
> Webbrowser.

da läuft halt mehr oder weniger ein Chrome/Chromium, dem die URL-Zeile 
wegkonfiguriert wurde, und der ein paar zusätzliche CSPs hat.
Und sein HTML&co direkt über seinen Server-Teil bekommt, um das http 
dazwischen zu sparen.
Aber soviel Unterschied zu einem normalen, "nicht-electron" Webbrowser 
ist da nicht.

Startseite wäre z.B. (Standardinstallation)
/usr/share/code/resources/app/out/vs/code/electron-sandbox/workbench/wor 
kbench.html

von Harald K. (kirnbichler)


Lesenswert?

Εrnst B. schrieb:
> Aber soviel Unterschied zu einem normalen, "nicht-electron" Webbrowser
> ist da nicht.

Der ganz entscheidende Unterschied ist, daß das im Electron-Browser 
laufende Javascript Zugriff auf das Dateisystem des Wirts erhält, etwas, 
was im herkömmlichen Browser aus einer Vielzahl von Gründen ganz und gar 
nicht gewünscht wird.

Beitrag #7742894 wurde vom Autor gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.