Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revisionBoth sides next revision | ||
| playground:playground [2020/08/03 17:18] – new w/ ssl peter-stadler | playground:playground [2024/08/06 19:36] – testando mguima | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== PlayGround ====== | ====== PlayGround ====== | ||
| - | ~~NOTOC~~ | ||
| - | <WRAP info> | + | ====== |
| - | The playground is for experimenting. Play around as you like!\\ | + | ==== OEM bootlog |
| - | This page is for playing around and experimenting only, and can be deleted any time, therefore don't put anything here that shall last long time.\\ | + | <WRAP bootlog> |
| - | Use the [[inbox: | + | <nowiki> |
| - | + | ... TBD ... | |
| - | Add your content below the line and **leave this note in place.** | + | </nowiki> |
| - | </ | + | </WRAP>\\ |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | ====== | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | [[http:// | + | |
| - | is a high-performance HTTP/S server with other functions as well. | + | |
| - | It is a perfect candidate to run on OpenWrt due to the performance and memory | + | |
| - | handling. | + | |
| - | **NB:** At this time (2020-07-21), | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | ===== Install | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | We can install Nginx with SSL (using libopenssl) by: | + | |
| - | <code> opkg update && opkg install nginx-ssl </code> | + | |
| - | + | ||
| - | Of course there will be port issues if we installed | + | |
| - | [[docs: | + | |
| - | before or after Nginx, since the standard LuCI package installs | + | |
| - | [[docs: | + | |
| - | which also wants to claim port 80 (and port 443 for HTTPS). | + | |
| - | So configuring and/or portforwarding may be neccessary. | + | |
| - | There are ways to run | + | |
| - | [[docs: | + | |
| - | but that is not coverd here. | + | |
| - | For a quick fix, just change the uhttpd port to something else in | + | |
| - | ''/ | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | ===== Configuration ===== | + | |
| - | /* Created by the following bash script that includes the source of some files: | + | |
| - | * https:// | + | |
| - | */ | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | The official Documentation contains a | + | |
| - | [[https:// | + | |
| - | Here we will look at some often used configuration parts and how we handle them | + | |
| - | at OpenWrt. | + | |
| - | At different places there are references to the official | + | |
| - | [[https:// | + | |
| - | for further reading. | + | |
| - | + | ||
| - | **tl;dr:** When starting Nginx by ''/ | + | |
| - | configuration dynamically based on a minimal template and the | + | |
| - | [[docs: | + | |
| - | + | ||
| - | The UCI ''/ | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | + | ||
| - | It enables also the ''/ | + | |
| - | | ''/ | + | |
| - | | ''/ | + | |
| - | | ''/ | + | |
| - | + | ||
| - | Setup configuration (for a server '' | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | ==== Basic ==== | + | |
| - | /* Created by the following bash script that includes the source of some files: | + | |
| - | * https:// | + | |
| - | */ | + | |
| - | + | ||
| - | + | ||
| - | We modify the configuration by changing servers saved in the UCI configuration | + | |
| - | at ''/ | + | |
| - | ''/ | + | |
| - | These files use the file extensions '' | + | |
| - | and '' | + | |
| - | We can disable a single configuration file by giving it another extension, e.g., | + | |
| - | by adding '' | + | |
| - | For the new configuration to take effect, we must reload it by: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | + | ||
| - | For OpenWrt we use a special initial configuration, | + | |
| - | section [[# | + | |
| - | So, we can make a site available at a specific URL in the **LAN** by creating a | + | |
| - | '' | + | |
| - | Such a file consists just of some | + | |
| - | [[https:// | + | |
| - | location blocks]]. | + | |
| - | Under the latter link, you can find also the official documentation for all | + | |
| - | available directives of the HTTP core of Nginx. | + | |
| - | Look for // | + | |
| - | + | ||
| - | The following example provides a simple template, see at the end for | + | |
| - | different [[# | + | |
| - | [[https:// | + | |
| - | +extension%3Alocations& | + | |
| - | other packages using a .locations file]], too.)): | + | |
| - | + | ||
| - | <code nginx /etc/ | + | |
| - | location /ex/am/ple { | + | |
| - | access_log off; # default: not logging accesses. | + | |
| - | # access_log / | + | |
| - | # error_log stderr; # default: logging to logd (init forwards stderr). | + | |
| - | error_log /dev/null; # disable error logging after config file is read. | + | |
| - | # (state path of a file for access_log/ | + | |
| - | index index.html; | + | |
| - | } | + | |
| - | # location /eg/static { … } | + | |
| - | </code> | + | |
| - | + | ||
| - | All location blocks in all '' | + | |
| - | since they are all included in the '' | + | |
| - | [[# | + | |
| - | We reserve the '' | + | |
| - | e.g. [[http:// | + | |
| - | All other sites shouldn’t use the root '' | + | |
| - | We should use the root URL for other sites than LuCI only on **other** domain | + | |
| - | names, e.g. we could make a site available at // | + | |
| - | In order to do that, we create [[# | + | |
| - | domain names. | + | |
| - | For Nginx with SSL we can also activate SSL thereby, see | + | |
| - | [[# | + | |
| - | We use such server parts also for publishing sites to the internet (WAN) | + | |
| - | instead of making them available just locally (in the LAN). | + | |
| - | + | ||
| - | Via ''/ | + | |
| - | the configuration. | + | |
| - | If you would change the configuration '' | + | |
| - | instead, it is not updated to new package' | + | |
| - | Although it is not recommended, | + | |
| - | create your own ''/ | + | |
| - | + | ||
| - | <code bash>uci set nginx.global.uci_enable=false</ | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | ==== New Server Parts ==== | + | |
| - | /* Created by the following bash script that includes the source of some files: | + | |
| - | * https:// | + | |
| - | */ | + | |
| - | + | ||
| - | + | ||
| - | For making the router reachable from the WAN at a registered domain name, | + | |
| - | it is not enough to give the name server the internet IP address of the router | + | |
| - | (maybe updated automatically by a | + | |
| - | [[docs: | + | |
| - | We also need to set up virtual hosting for this domain name by creating an | + | |
| - | appropriate server section in ''/ | + | |
| - | (or in a ''/ | + | |
| - | All such parts are included in the main configuration of OpenWrt | + | |
| - | ([[# | + | |
| - | + | ||
| - | In the server part, we state the domain as | + | |
| - | [[https:// | + | |
| - | server_name]]. | + | |
| - | The link points to the same document as for the location blocks in the | + | |
| - | [[# | + | |
| - | directives of the HTTP core of Nginx. | + | |
| - | This time look for //server// in the Context list, too. | + | |
| - | The server part should also contain similar location blocks as | + | |
| - | ++before.| | + | |
| - | We can re-include a '' | + | |
| - | the LAN by default. | + | |
| - | Then the site is reachable under the same path at both domains, e.g., by | + | |
| - | http:// | + | |
| - | ++ | + | |
| - | + | ||
| - | The [[# | + | |
| - | '' | + | |
| - | addresses, acts as // | + | |
| - | (by including the file '' | + | |
| - | the official documentation on | + | |
| - | [[https:// | + | |
| - | For making another domain name accessible to all addresses, the corresponding | + | |
| - | server part should listen on port //80// and contain the FQDN as // | + | |
| - | cf. the official documentation on | + | |
| - | [[https:// | + | |
| - | + | ||
| - | We can add directives to a server in the UCI configuration by invoking | + | |
| - | '' | + | |
| - | If the //key// is not starting with //uci_//, it becomes a '' | + | |
| - | ++directive.| | + | |
| - | Although the UCI config does not support nesting like Nginx, we can add a whole | + | |
| - | block as // | + | |
| - | ++ | + | |
| - | + | ||
| - | We cannot use dots in a //key// name other than in the // | + | |
| - | In the following example we replace the dot in // | + | |
| - | underscore for the UCI name of the server, but not for Nginx' | + | |
| - | + | ||
| - | <code bash> | + | |
| - | uci add nginx server && | + | |
| - | uci rename nginx.@server[-1]=example_com && | + | |
| - | uci add_list nginx.example_com.listen=' | + | |
| - | uci add_list nginx.example_com.listen=' | + | |
| - | uci set nginx.example_com.server_name=' | + | |
| - | uci add_list nginx.example_com.include=' | + | |
| - | # uci add_list nginx.example_com.location='/ | + | |
| - | </ | + | |
| - | + | ||
| - | We can disable respective re-enable this server again by: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | uci set nginx.example_com=disable # respective: uci set nginx.example_com=server | + | |
| - | </ | + | |
| - | + | ||
| - | These changes are made in the RAM (and can be used until a reboot), we can save | + | |
| - | them permanently by: | + | |
| - | + | ||
| - | <code bash>uci commit nginx</ | + | |
| - | + | ||
| - | For creating a similar ''/ | + | |
| - | following: | + | |
| - | + | ||
| - | <code nginx / | + | |
| - | server { | + | |
| - | listen 80; | + | |
| - | listen [::]:80; | + | |
| - | server_name example.com; | + | |
| - | include ' | + | |
| - | # location / { … } # root location for this server. | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | ==== SSL Server Parts ==== | + | |
| - | /* Created by the following bash script that includes the source of some files: | + | |
| - | * https:// | + | |
| - | */ | + | |
| - | + | ||
| - | + | ||
| - | We can enable HTTPS for a domain if Nginx is installed with SSL support. | + | |
| - | We need a SSL certificate as well as its key and add them by the directives | + | |
| - | // | + | |
| - | domain. | + | |
| - | The rest of the configuration is similar as for general | + | |
| - | [[# | + | |
| - | We only have to adjust the listen directives by adding the //ssl// parameter and | + | |
| - | changing the port from //80// to //443//. | + | |
| - | See the official documentation for | + | |
| - | [[https:// | + | |
| - | configuring HTTPS servers]], too. | + | |
| - | + | ||
| - | The official documentation of the SSL module contains an | + | |
| - | [[https:// | + | |
| - | example]] with some optimizations. | + | |
| - | We can extend an existing UCI server section similarly, e.g., for the above | + | |
| - | '' | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Instead of ' | + | |
| - | uci del_list nginx.example_com.listen=' | + | |
| - | uci del_list nginx.example_com.listen=' | + | |
| - | uci add_list nginx.example_com.listen=' | + | |
| - | uci add_list nginx.example_com.listen=' | + | |
| - | uci set nginx.example_com.ssl_certificate='/ | + | |
| - | uci set nginx.example_com.ssl_certificate_key='/ | + | |
| - | uci set nginx.example_com.ssl_session_cache=' | + | |
| - | uci set nginx.example_com.ssl_session_timeout=' | + | |
| - | uci commit nginx | + | |
| - | </ | + | |
| - | + | ||
| - | For making the server in ''/ | + | |
| - | via SSL, we can make similar changes there. | + | |
| - | + | ||
| - | The following command creates a **self-signed** SSL certificate and changes the | + | |
| - | corresponding configuration: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | + | ||
| - | - If a '' | + | |
| - | - Then, it checks if there is a certificate with key for the given name that is valid for at least 13 months or tries to create a self-signed one. | + | |
| - | - When cron is activated, it installs a cron job for renewing the self-signed | + | |
| - | + | ||
| - | This can be undone by invoking: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | + | ||
| - | For creating a certificate and its key signed by Let’s Encrypt we can use | + | |
| - | [[https:// | + | |
| - | [[https:// | + | |
| - | + | ||
| - | <code bash> | + | |
| - | opkg update && opkg install uacme #or: acme #and for LuCI: luci-app-acme | + | |
| - | </ | + | |
| - | + | ||
| - | [[# | + | |
| - | '' | + | |
| - | self-signed SSL certificate((Let’s Encrypt (and other CAs) cannot sign | + | |
| - | certificates of a **local** server.)) | + | |
| - | that is created on the first start of Nginx. | + | |
| - | Furthermore, | + | |
| - | all HTTP requests for inexistent URLs to HTTPS. | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | ==== OpenWrt’s Defaults ==== | + | |
| - | /* Created by the following bash script that includes the source of some files: | + | |
| - | * https:// | + | |
| - | */ | + | |
| - | + | ||
| - | + | ||
| - | Since Nginx is compiled with these presets, we can pretend that the main | + | |
| - | configuration will always contain the following directives | + | |
| - | (though we can overwrite them): | + | |
| - | + | ||
| - | <code nginx> | + | |
| - | pid "/ | + | |
| - | lock_file "/ | + | |
| - | error_log " | + | |
| - | proxy_temp_path "/ | + | |
| - | client_body_temp_path "/ | + | |
| - | fastcgi_temp_path "/ | + | |
| - | + | ||
| - | When starting or reloading the Nginx service, the ''/ | + | |
| - | sets also the following directives | + | |
| - | (so we cannot change them in the used configuration file): | + | |
| - | + | ||
| - | <code nginx> | + | |
| - | daemon off; # procd expects services to run in the foreground | + | |
| - | </ | + | |
| - | + | ||
| - | Then, it creates the main configuration '' | + | |
| - | dynamically from the template: | + | |
| - | + | ||
| - | <file nginx / | + | |
| - | # Consider using UCI or creating files in / | + | |
| - | # Parsing UCI configuration is skipped if uci set nginx.global.uci_enable=false | + | |
| - | # For details see: https:// | + | |
| - | + | ||
| - | worker_processes auto; | + | |
| - | + | ||
| - | user root; | + | |
| - | + | ||
| - | events {} | + | |
| - | + | ||
| - | http { | + | |
| - | access_log off; | + | |
| - | log_format openwrt | + | |
| - | ' | + | |
| - | ' (${body_bytes_sent}B in ${request_time}s) <- $http_referer'; | + | |
| - | + | ||
| - | include mime.types; | + | |
| - | default_type application/ | + | |
| - | sendfile on; | + | |
| - | + | ||
| - | client_max_body_size 128M; | + | |
| - | large_client_header_buffers 2 1k; | + | |
| - | + | ||
| - | gzip on; | + | |
| - | gzip_vary on; | + | |
| - | gzip_proxied any; | + | |
| - | + | ||
| - | root /www; | + | |
| - | + | ||
| - | # | + | |
| - | include conf.d/ | + | |
| - | }</ | + | |
| - | + | ||
| - | So, the access log is turned off by default and we can look at the error log | + | |
| - | by '' | + | |
| - | [[docs: | + | |
| - | We can set the // | + | |
| - | messages are forwarded to instead (after the configuration is read). | + | |
| - | And for redirecting the access log of a //server// or // | + | |
| - | too, we insert the following directive in the corresponding block: | + | |
| - | + | ||
| - | <code nginx> | + | |
| - | + | ||
| - | If we setup a server through UCI, we can use the options // | + | |
| - | // | + | |
| - | ++' | + | |
| - | When initializing the Nginx service, this special path is replaced by // | + | |
| - | respective /// | + | |
| - | ++ | + | |
| - | + | ||
| - | For creating the configuration from the template shown above, the init.d script | + | |
| - | replaces the comment ''# | + | |
| - | For each server section in the the UCI configuration, | + | |
| - | options into a Nginx //server { … }// part, in detail: | + | |
| - | * Options starting with '' | + | |
| - | * All other lists or options of the form '' | + | |
| - | + | ||
| - | The init.d script of Nginx uses the // | + | |
| - | the configuration file | + | |
| - | ++in RAM.| | + | |
| - | The main configuration ''/ | + | |
| - | (it is a dead link if the Nginx service is not running). | + | |
| - | ++ | + | |
| - | + | ||
| - | We could use a custom configuration created at ''/ | + | |
| - | dynamic configuration, | + | |
| - | For using a custom configuration at ''/ | + | |
| - | <code bash>uci set nginx.global.uci_enable=' | + | |
| - | Then the rest of the UCI config is ignored and init.d will not create the main | + | |
| - | configuration dynamically from the template anymore. | + | |
| - | For Nginx with SSL invoking | + | |
| - | '' | + | |
| - | will still try to change a server in '' | + | |
| - | (this is less reliable than for a UCI config as it uses regular expressions, | + | |
| - | a complete parser for the Nginx configuration).)) | + | |
| - | This is not encouraged since you cannot setup servers using UCI anymore. | + | |
| - | Rather, we can put custom configuration parts to '' | + | |
| - | ''/ | + | |
| - | The main configuration pulls in all '' | + | |
| - | into the //http {…}// block behind the created UCI servers. | + | |
| - | + | ||
| - | The initial UCI config is enabled and contains a server section for the LAN: | + | |
| - | + | ||
| - | <file nginx / | + | |
| - | + | ||
| - | config main global | + | |
| - | option uci_enable ' | + | |
| - | + | ||
| - | config server ' | + | |
| - | list listen '443 ssl default_server' | + | |
| - | list listen ' | + | |
| - | option server_name ' | + | |
| - | list include ' | + | |
| - | list include ' | + | |
| - | option uci_manage_ssl ' | + | |
| - | option ssl_certificate '/ | + | |
| - | option ssl_certificate_key '/ | + | |
| - | option ssl_session_cache ' | + | |
| - | option ssl_session_timeout ' | + | |
| - | option access_log 'off; # logd openwrt' | + | |
| - | + | ||
| - | config server ' | + | |
| - | list listen ' | + | |
| - | list listen ' | + | |
| - | option server_name ' | + | |
| - | option return '302 https:// | + | |
| - | + | ||
| - | The LAN server pulls in all '' | + | |
| - | ''/ | + | |
| - | We can install the location parts of different sites there (see | + | |
| - | [[# | + | |
| - | This is needed especially for making them available to the WAN | + | |
| - | ([[# | + | |
| - | The LAN server becomes the // | + | |
| - | and restricts the access to local addresses by including: | + | |
| - | <file nginx / | + | |
| - | allow ::1; | + | |
| - | allow fc00::/7; | + | |
| - | allow fec0::/ | + | |
| - | allow fe80::/ | + | |
| - | allow 127.0.0.0/ | + | |
| - | allow 10.0.0.0/ | + | |
| - | allow 172.16.0.0/ | + | |
| - | allow 192.168.0.0/ | + | |
| - | allow 169.254.0.0/ | + | |
| - | deny all;</ | + | |
| - | + | ||
| - | + | ||
| - | === Additional Defaults for OpenWrt if Nginx is installed with SSL support === | + | |
| - | + | ||
| - | When Nginx is installed with SSL support, the // | + | |
| - | listens on port //443// instead (but still on all addresses restricted locally). | + | |
| - | Additionally there is a server section that redirects requests for an inexistent | + | |
| - | '' | + | |
| - | ++no other|; it uses an invalid name for that, more in the official | + | |
| - | documentation on | + | |
| - | [[https:// | + | |
| - | ++. | + | |
| - | + | ||
| - | When starting or reloading the Nginx service, the init.d looks which UCI servers | + | |
| - | have set '' | + | |
| - | For all those servers it checks if there is a certificate that is still valid | + | |
| - | for 13 months or (re-)creates a self-signed one. | + | |
| - | If there is any such server, it installs also a cron job that checks the | + | |
| - | corresponding certificates once a year. | + | |
| - | The option '' | + | |
| - | from a UCI server named '' | + | |
| - | (see [[# | + | |
| - | + | ||
| - | <code bash> | + | |
| - | nginx-util add_ssl example_com # respectively: | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | ==== PHP with FastCGI ==== | + | |
| - | + | ||
| - | + | ||
| - | Install [[https:// | + | |
| - | using FastCGI: | + | |
| - | < | + | |
| - | + | ||
| - | In the Nginx configuration we can include the file | + | |
| - | [[https:// | + | |
| - | fastcgi_params]], | + | |
| - | We create a '' | + | |
| - | [[https:// | + | |
| - | +extension%3Alocations+extension%3Aconf& | + | |
| - | other packages using fastcgi_pass]] | + | |
| - | and Nginx' | + | |
| - | [[https:// | + | |
| - | PHP FastCGI Example]], too: | + | |
| - | <code nginx / | + | |
| - | location ~ [^/]\.php$ { | + | |
| - | #error_log / | + | |
| - | fastcgi_connect_timeout 300s; | + | |
| - | fastcgi_read_timeout 300s; | + | |
| - | fastcgi_send_timeout 300s; | + | |
| - | fastcgi_buffer_size 32k; | + | |
| - | fastcgi_buffers 4 32k; | + | |
| - | fastcgi_busy_buffers_size 32k; | + | |
| - | fastcgi_temp_file_write_size 32k; | + | |
| - | client_header_timeout 10s; | + | |
| - | client_body_timeout 10s; | + | |
| - | send_timeout 60s; # default, increase if experiencing a lot of timeouts. | + | |
| - | output_buffers 1 32k; | + | |
| - | fastcgi_index index.php; | + | |
| - | include fastcgi_params; | + | |
| - | fastcgi_param HTTP_PROXY ""; | + | |
| - | if (-f ) { | + | |
| - | # Only throw it at PHP-FPM if file exists (prevents PHP exploits). | + | |
| - | fastcgi_pass | + | |
| - | } | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | <code ini / | + | |
| - | doc_root = " | + | |
| - | cgi.force_redirect = 1 | + | |
| - | cgi.redirect_status_env = " | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | ==== uWSGI ==== | + | |
| - | + | ||
| - | + | ||
| - | Install [[https:// | + | |
| - | < | + | |
| - | + | ||
| - | In the Nginx configuration we can include the file | + | |
| - | [[https:// | + | |
| - | uwsgi_params]], | + | |
| - | We create a '' | + | |
| - | [[https:// | + | |
| - | +extension%3Alocations+extension%3Aconf& | + | |
| - | other packages using uwsgi_pass]] | + | |
| - | and the | + | |
| - | [[https:// | + | |
| - | uWSGI documentation for Nginx]], too: | + | |
| - | <code nginx / | + | |
| - | location /mysite { | + | |
| - | # error_log / | + | |
| - | include | + | |
| - | uwsgi_pass unix:/// | + | |
| - | # for CGI (like in LuCI): | + | |
| - | # uwsgi_param SERVER_ADDR $server_addr; | + | |
| - | # uwsgi_modifier1 9; | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | For uWSGI, we create a configuration handling the application like the following, see | + | |
| - | [[https:// | + | |
| - | +extension%3Aini& | + | |
| - | other packages using uWSGI]], too: | + | |
| - | <code ini / | + | |
| - | [uwsgi] | + | |
| - | strict = true | + | |
| - | ; adjust the needed plugins, path, name, user and socket for the application: | + | |
| - | plugin = | + | |
| - | chdir = / | + | |
| - | mount = / | + | |
| - | ; or use cgi = / | + | |
| - | uid = user | + | |
| - | gid = nogroup | + | |
| - | chmod-socket = 660 | + | |
| - | chown-socket = user: | + | |
| - | ; Nginx runs as nouser: | + | |
| - | if-not-env = UWSGI_EMPEROR_FD | + | |
| - | socket = / | + | |
| - | vacuum = true | + | |
| - | ; cheap = true | + | |
| - | end-if = | + | |
| - | disable-logging = true | + | |
| - | log-format=%(method) %(uri) => return %(status) (%(rsize) bytes in %(msecs) ms) | + | |
| - | manage-script-name = true | + | |
| - | thunder-lock = true | + | |
| - | enable-threads = true | + | |
| - | threads = 3 | + | |
| - | master = true | + | |
| - | ; processes = 3 | + | |
| - | ; cheaper-algo = spare | + | |
| - | ; cheaper = 1 | + | |
| - | ; cheaper-initial = 1 | + | |
| - | ; cheaper-step = 1 | + | |
| - | ; lazy-apps = true | + | |
| - | ; harakiri = 60 | + | |
| - | ; idle = 360 | + | |
| - | </ | + | |
| + | ====== Bootlogs ====== | ||
| + | === OpenWRT bootlog === | ||
| + | == System bootlog == | ||
| + | <WRAP bootlog> | ||
| + | < | ||
| + | ... TBD ... | ||
| + | </ | ||
| + | </ | ||