1038c52e0SEd Tanous# OpenBMC webserver # 2038c52e0SEd Tanous 3038c52e0SEd TanousThis component attempts to be a "do everything" embedded webserver for openbmc. 4038c52e0SEd Tanous 5038c52e0SEd Tanous 6038c52e0SEd Tanous## Capabilities ## 7038c52e0SEd TanousAt this time, the webserver implements a few interfaces: 8038c52e0SEd Tanous+ Authentication middleware that supports cookie and token based authentication, as well as CSRF prevention backed by linux PAM authentication credentials. 9038c52e0SEd Tanous+ An (incomplete) attempt at replicating phosphor-dbus-rest interfaces in C++. Right now, a few of the endpoint definitions work as expected, but there is still a lot of work to be done. The portions of the interface that are functional are designed to work correctly for phosphor-webui, but may not yet be complete. 10038c52e0SEd Tanous+ Replication of the rest-dbus backend interfaces to allow bmc debug to logged in users. 11038c52e0SEd Tanous+ An initial attempt at a read-only redfish interface. Currently the redfish interface targets ServiceRoot, SessionService, AccountService, Roles, and ManagersService. Some functionality here has been shimmed to make development possible. For example, there exists only a single user role. 12976596bcSJoseph Reynolds+ SSL key generation at runtime. See the configuration section for details. 13038c52e0SEd Tanous+ Static file hosting. Currently, static files are hosted from the fixed location at /usr/share/www. This is intended to allow loose coupling with yocto projects, and allow overriding static files at build time. 14038c52e0SEd Tanous+ Dbus-monitor over websocket. A generic endpoint that allows UIs to open a websocket and register for notification of events to avoid polling in single page applications. (this interface may be modified in the future due to security concerns. 15038c52e0SEd Tanous 16976596bcSJoseph Reynolds## Configuration 17976596bcSJoseph Reynolds 18976596bcSJoseph ReynoldsBMCWeb is configured by setting `-D` flags that correspond to options 19*af6298daSManojkiran Edain `bmcweb/meson_options.txt` and then compiling. For example, `meson 20*af6298daSManojkiran Eda<builddir> -Dkvm=disabled ...` followed by `ninja` in build directory. 21*af6298daSManojkiran EdaThe option names become C++ preprocessor symbols that control which code 22*af6298daSManojkiran Edais compiled into the program. 23976596bcSJoseph Reynolds 24*af6298daSManojkiran Eda### Compile bmcweb with default options: 25*af6298daSManojkiran Eda```ascii 26*af6298daSManojkiran Edameson builddir 27*af6298daSManojkiran Edaninja -C builddir 28*af6298daSManojkiran Eda``` 29*af6298daSManojkiran Eda### Compile bmcweb with yocto defaults: 30*af6298daSManojkiran Eda```ascii 31*af6298daSManojkiran Edameson builddir -Dbuildtype=minsize -Db_lto=true -Dtests=disabled 32*af6298daSManojkiran Edaninja -C buildir 33*af6298daSManojkiran Eda``` 34*af6298daSManojkiran EdaIf any of the dependencies are not found on the host system during 35*af6298daSManojkiran Edaconfiguration, meson automatically gets them via its wrap dependencies 36*af6298daSManojkiran Edamentioned in `bmcweb/subprojects`. 37*af6298daSManojkiran Eda 38*af6298daSManojkiran Eda### Enable/Disable meson wrap feature 39*af6298daSManojkiran Eda```ascii 40*af6298daSManojkiran Edameson builddir -Dwrap_mode=nofallback 41*af6298daSManojkiran Edaninja -C builddir 42*af6298daSManojkiran Eda``` 43*af6298daSManojkiran Eda### Generate test coverage report: 44*af6298daSManojkiran Eda```ascii 45*af6298daSManojkiran Edameson builddir -Db_coverage=true -Dtests=enabled 46*af6298daSManojkiran Edaninja coverage -C builddir test 47*af6298daSManojkiran Eda``` 48976596bcSJoseph ReynoldsWhen BMCWeb starts running, it reads persistent configuration data 49976596bcSJoseph Reynolds(such as UUID and session data) from a local file. If this is not 50976596bcSJoseph Reynoldsusable, it generates a new configuration. 51976596bcSJoseph Reynolds 52976596bcSJoseph ReynoldsWhen BMCWeb SSL support is enabled and a usable certificate is not 53976596bcSJoseph Reynoldsfound, it will generate a self-sign a certificate before launching the 54aaf3206fSVernon Maueryserver. The keys are generated by the `secp384r1` algorithm. The 55976596bcSJoseph Reynoldscertificate 5685d2bb5bSBrad Bishop - is issued by `C=US, O=OpenBMC, CN=testhost`, 57976596bcSJoseph Reynolds - is valid for 10 years, 58976596bcSJoseph Reynolds - has a random serial number, and 59976596bcSJoseph Reynolds - is signed using the `SHA-256` algorithm. 60038c52e0SEd Tanous 61