| # OpenBMC webserver # |
| |
| This component attempts to be a "do everything" embedded webserver for openbmc. |
| |
| |
| ## Capabilities ## |
| At this time, the webserver implements a few interfaces: |
| + Authentication middleware that supports cookie and token based authentication, as well as CSRF prevention backed by linux PAM authentication credentials. |
| + 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. |
| + Replication of the rest-dbus backend interfaces to allow bmc debug to logged in users. |
| + 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. |
| + SSL key generation at runtime. See the configuration section for details. |
| + 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. |
| + 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. |
| |
| ## Configuration |
| |
| BMCWeb is configured by setting `-D` flags that correspond to options |
| in `bmcweb/meson_options.txt` and then compiling. For example, `meson |
| <builddir> -Dkvm=disabled ...` followed by `ninja` in build directory. |
| The option names become C++ preprocessor symbols that control which code |
| is compiled into the program. |
| |
| ### Compile bmcweb with default options: |
| ```ascii |
| meson builddir |
| ninja -C builddir |
| ``` |
| ### Compile bmcweb with yocto defaults: |
| ```ascii |
| meson builddir -Dbuildtype=minsize -Db_lto=true -Dtests=disabled |
| ninja -C buildir |
| ``` |
| If any of the dependencies are not found on the host system during |
| configuration, meson automatically gets them via its wrap dependencies |
| mentioned in `bmcweb/subprojects`. |
| |
| ### Enable/Disable meson wrap feature |
| ```ascii |
| meson builddir -Dwrap_mode=nofallback |
| ninja -C builddir |
| ``` |
| ### Enable debug traces |
| ```ascii |
| meson builddir -Dbuildtype=debug |
| ninja -C builddir |
| ``` |
| ### Generate test coverage report: |
| ```ascii |
| meson builddir -Db_coverage=true -Dtests=enabled |
| ninja coverage -C builddir test |
| ``` |
| When BMCWeb starts running, it reads persistent configuration data |
| (such as UUID and session data) from a local file. If this is not |
| usable, it generates a new configuration. |
| |
| When BMCWeb SSL support is enabled and a usable certificate is not |
| found, it will generate a self-sign a certificate before launching the |
| server. The keys are generated by the `secp384r1` algorithm. The |
| certificate |
| - is issued by `C=US, O=OpenBMC, CN=testhost`, |
| - is valid for 10 years, |
| - has a random serial number, and |
| - is signed using the `SHA-256` algorithm. |
| |