docker-documentation/general/container-customization/index.html

36 wiersze
43 KiB
HTML

<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="Welcome to the home of the LinuxServer.io documentation!"><meta name=author content=LinuxServer.io><link href=https://docs.linuxserver.io/general/container-customization/ rel=canonical><link rel=icon href="https://gblobscdn.gitbook.com/spaces%2F-LWuIse8qFJj2MqDi90T%2Favatar-1590244439115.png?alt=media"><meta name=generator content="mkdocs-1.4.2, mkdocs-material-8.5.10"><title>Customizing LinuxServer Containers - LinuxServer.io</title><link rel=stylesheet href=../../assets/stylesheets/main.472b142f.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.08040f6c.min.css><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=purple data-md-color-accent=indigo> <script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#customizing-linuxserver-containers class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title=LinuxServer.io class="md-header__button md-logo" aria-label=LinuxServer.io data-md-component=logo> <img src="https://gblobscdn.gitbook.com/spaces%2F-LWuIse8qFJj2MqDi90T%2Favatar-1590244439115.png?alt=media" alt=logo> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> LinuxServer.io </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Customizing LinuxServer Containers </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=purple data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_2 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=purple data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_2> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg> </label> </form> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Search placeholder=Search autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=Search> <button type=reset class="md-search__icon md-icon" title=Clear aria-label=Clear tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Initializing search </div> <ol class=md-search-result__list></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/linuxserver/docker-documentation title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> linuxserver/docker-documentation </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=../.. title=LinuxServer.io class="md-nav__button md-logo" aria-label=LinuxServer.io data-md-component=logo> <img src="https://gblobscdn.gitbook.com/spaces%2F-LWuIse8qFJj2MqDi90T%2Favatar-1590244439115.png?alt=media" alt=logo> </a> LinuxServer.io </label> <div class=md-nav__source> <a href=https://github.com/linuxserver/docker-documentation title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> linuxserver/docker-documentation </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> Introduction </a> </li> <li class=md-nav__item> <a href=../../FAQ/ class=md-nav__link> FAQ </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=__nav_3 type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3> General <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label=General data-md-level=1> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> General </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../container-execution/ class=md-nav__link> Container Execution </a> </li> <li class=md-nav__item> <a href=../containers-101/ class=md-nav__link> Docker Containers: 101 </a> </li> <li class=md-nav__item> <a href=../running-our-containers/ class=md-nav__link> Running LinuxServer Containers </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" data-md-toggle=toc type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> Customizing LinuxServer Containers <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> Customizing LinuxServer Containers </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#custom-scripts class=md-nav__link> Custom Scripts </a> </li> <li class=md-nav__item> <a href=#custom-services class=md-nav__link> Custom Services </a> </li> <li class=md-nav__item> <a href=#docker-mods class=md-nav__link> Docker Mods </a> </li> <li class=md-nav__item> <a href=#we-are-here-to-help class=md-nav__link> We are here to help </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../docker-compose/ class=md-nav__link> Docker Compose </a> </li> <li class=md-nav__item> <a href=../understanding-puid-and-pgid/ class=md-nav__link> Understanding PUID and PGID </a> </li> <li class=md-nav__item> <a href=../updating-our-containers/ class=md-nav__link> Updating our containers </a> </li> <li class=md-nav__item> <a href=../volumes/ class=md-nav__link> Volumes </a> </li> <li class=md-nav__item> <a href=../fleet/ class=md-nav__link> Fleet </a> </li> <li class=md-nav__item> <a href=../swag/ class=md-nav__link> Swag </a> </li> <li class=md-nav__item> <a href=../awesome-lsio/ class=md-nav__link> Awesome LSIO </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=__nav_4 type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4> Images <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label=Images data-md-level=1> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> Images </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../images/docker-adguardhome-sync/ class=md-nav__link> adguardhome-sync </a> </li> <li class=md-nav__item> <a href=../../images/docker-airsonic-advanced/ class=md-nav__link> airsonic-advanced </a> </li> <li class=md-nav__item> <a href=../../images/docker-airsonic/ class=md-nav__link> airsonic </a> </li> <li class=md-nav__item> <a href=../../images/docker-apprise-api/ class=md-nav__link> apprise-api </a> </li> <li class=md-nav__item> <a href=../../images/docker-babybuddy/ class=md-nav__link> babybuddy </a> </li> <li class=md-nav__item> <a href=../../images/docker-bazarr/ class=md-nav__link> bazarr </a> </li> <li class=md-nav__item> <a href=../../images/docker-beets/ class=md-nav__link> beets </a> </li> <li class=md-nav__item> <a href=../../images/docker-blender/ class=md-nav__link> blender </a> </li> <li class=md-nav__item> <a href=../../images/docker-boinc/ class=md-nav__link> boinc </a> </li> <li class=md-nav__item> <a href=../../images/docker-booksonic-air/ class=md-nav__link> booksonic-air </a> </li> <li class=md-nav__item> <a href=../../images/docker-booksonic/ class=md-nav__link> booksonic </a> </li> <li class=md-nav__item> <a href=../../images/docker-bookstack/ class=md-nav__link> bookstack </a> </li> <li class=md-nav__item> <a href=../../images/docker-budge/ class=md-nav__link> budge </a> </li> <li class=md-nav__item> <a href=../../images/docker-calibre-web/ class=md-nav__link> calibre-web </a> </li> <li class=md-nav__item> <a href=../../images/docker-calibre/ class=md-nav__link> calibre </a> </li> <li class=md-nav__item> <a href=../../images/docker-cardigann/ class=md-nav__link> linuxserver/cardigann </a> </li> <li class=md-nav__item> <a href=../../images/docker-changedetection.io/ class=md-nav__link> changedetection.io </a> </li> <li class=md-nav__item> <a href=../../images/docker-chevereto/ class=md-nav__link> chevereto </a> </li> <li class=md-nav__item> <a href=../../images/docker-clarkson/ class=md-nav__link> clarkson </a> </li> <li class=md-nav__item> <a href=../../images/docker-cloud9/ class=md-nav__link> cloud9 </a> </li> <li class=md-nav__item> <a href=../../images/docker-code-server/ class=md-nav__link> code-server </a> </li> <li class=md-nav__item> <a href=../../images/docker-codiad/ class=md-nav__link> linuxserver/codiad </a> </li> <li class=md-nav__item> <a href=../../images/docker-codimd/ class=md-nav__link> [linuxserver/codimd](https://github.com/linuxserver/docker-codimd) </a> </li> <li class=md-nav__item> <a href=../../images/docker-cops/ class=md-nav__link> cops </a> </li> <li class=md-nav__item> <a href=../../images/docker-couchpotato/ class=md-nav__link> couchpotato </a> </li> <li class=md-nav__item> <a href=../../images/docker-daapd/ class=md-nav__link> daapd </a> </li> <li class=md-nav__item> <a href=../../images/docker-darktable/ class=md-nav__link> darktable </a> </li> <li class=md-nav__item> <a href=../../images/docker-davos/ class=md-nav__link> davos </a> </li> <li class=md-nav__item> <a href=../../images/docker-ddclient/ class=md-nav__link> ddclient </a> </li> <li class=md-nav__item> <a href=../../images/docker-deluge/ class=md-nav__link> deluge </a> </li> <li class=md-nav__item> <a href=../../images/docker-digikam/ class=md-nav__link> digikam </a> </li> <li class=md-nav__item> <a href=../../images/docker-dillinger/ class=md-nav__link> dillinger </a> </li> <li class=md-nav__item> <a href=../../images/docker-diskover/ class=md-nav__link> diskover </a> </li> <li class=md-nav__item> <a href=../../images/docker-docker-compose/ class=md-nav__link> docker-compose </a> </li> <li class=md-nav__item> <a href=../../images/docker-dokuwiki/ class=md-nav__link> dokuwiki </a> </li> <li class=md-nav__item> <a href=../../images/docker-domoticz/ class=md-nav__link> domoticz </a> </li> <li class=md-nav__item> <a href=../../images/docker-doplarr/ class=md-nav__link> doplarr </a> </li> <li class=md-nav__item> <a href=../../images/docker-doublecommander/ class=md-nav__link> doublecommander </a> </li> <li class=md-nav__item> <a href=../../images/docker-duckdns/ class=md-nav__link> duckdns </a> </li> <li class=md-nav__item> <a href=../../images/docker-duplicati/ class=md-nav__link> duplicati </a> </li> <li class=md-nav__item> <a href=../../images/docker-emby/ class=md-nav__link> emby </a> </li> <li class=md-nav__item> <a href=../../images/docker-embystat/ class=md-nav__link> embystat </a> </li> <li class=md-nav__item> <a href=../../images/docker-emulatorjs/ class=md-nav__link> emulatorjs </a> </li> <li class=md-nav__item> <a href=../../images/docker-endlessh/ class=md-nav__link> endlessh </a> </li> <li class=md-nav__item> <a href=../../images/docker-fail2ban/ class=md-nav__link> fail2ban </a> </li> <li class=md-nav__item> <a href=../../images/docker-feed2toot/ class=md-nav__link> feed2toot </a> </li> <li class=md-nav__item> <a href=../../images/docker-ffmpeg/ class=md-nav__link> ffmpeg </a> </li> <li class=md-nav__item> <a href=../../images/docker-filezilla/ class=md-nav__link> filezilla </a> </li> <li class=md-nav__item> <a href=../../images/docker-firefox/ class=md-nav__link> firefox </a> </li> <li class=md-nav__item> <a href=../../images/docker-fleet/ class=md-nav__link> fleet </a> </li> <li class=md-nav__item> <a href=../../images/docker-foldingathome/ class=md-nav__link> foldingathome </a> </li> <li class=md-nav__item> <a href=../../images/docker-freshrss/ class=md-nav__link> freshrss </a> </li> <li class=md-nav__item> <a href=../../images/docker-grav/ class=md-nav__link> grav </a> </li> <li class=md-nav__item> <a href=../../images/docker-grocy/ class=md-nav__link> grocy </a> </li> <li class=md-nav__item> <a href=../../images/docker-guacd/ class=md-nav__link> guacd </a> </li> <li class=md-nav__item> <a href=../../images/docker-habridge/ class=md-nav__link> habridge </a> </li> <li class=md-nav__item> <a href=../../images/docker-headphones/ class=md-nav__link> headphones </a> </li> <li class=md-nav__item> <a href=../../images/docker-healthchecks/ class=md-nav__link> healthchecks </a> </li> <li class=md-nav__item> <a href=../../images/docker-hedgedoc/ class=md-nav__link> hedgedoc </a> </li> <li class=md-nav__item> <a href=../../images/docker-heimdall/ class=md-nav__link> heimdall </a> </li> <li class=md-nav__item> <a href=../../images/docker-homeassistant/ class=md-nav__link> homeassistant </a> </li> <li class=md-nav__item> <a href=../../images/docker-htpcmanager/ class=md-nav__link> htpcmanager </a> </li> <li class=md-nav__item> <a href=../../images/docker-hydra/ class=md-nav__link> [linuxserver/hydra](https://github.com/linuxserver/docker-hydra) </a> </li> <li class=md-nav__item> <a href=../../images/docker-ipfs/ class=md-nav__link> ipfs </a> </li> <li class=md-nav__item> <a href=../../images/docker-jackett/ class=md-nav__link> jackett </a> </li> <li class=md-nav__item> <a href=../../images/docker-jellyfin/ class=md-nav__link> jellyfin </a> </li> <li class=md-nav__item> <a href=../../images/docker-kanzi/ class=md-nav__link> kanzi </a> </li> <li class=md-nav__item> <a href=../../images/docker-kasm/ class=md-nav__link> kasm </a> </li> <li class=md-nav__item> <a href=../../images/docker-kdenlive/ class=md-nav__link> kdenlive </a> </li> <li class=md-nav__item> <a href=../../images/docker-lazylibrarian/ class=md-nav__link> lazylibrarian </a> </li> <li class=md-nav__item> <a href=../../images/docker-ldap-auth/ class=md-nav__link> ldap-auth </a> </li> <li class=md-nav__item> <a href=../../images/docker-libreoffice/ class=md-nav__link> libreoffice </a> </li> <li class=md-nav__item> <a href=../../images/docker-libresonic/ class=md-nav__link> linuxserver/libresonic </a> </li> <li class=md-nav__item> <a href=../../images/docker-librespeed/ class=md-nav__link> librespeed </a> </li> <li class=md-nav__item> <a href=../../images/docker-lidarr/ class=md-nav__link> lidarr </a> </li> <li class=md-nav__item> <a href=../../images/docker-limnoria/ class=md-nav__link> limnoria </a> </li> <li class=md-nav__item> <a href=../../images/docker-lychee/ class=md-nav__link> lychee </a> </li> <li class=md-nav__item> <a href=../../images/docker-mariadb/ class=md-nav__link> mariadb </a> </li> <li class=md-nav__item> <a href=../../images/docker-mastodon/ class=md-nav__link> mastodon </a> </li> <li class=md-nav__item> <a href=../../images/docker-medusa/ class=md-nav__link> medusa </a> </li> <li class=md-nav__item> <a href=../../images/docker-minetest/ class=md-nav__link> minetest </a> </li> <li class=md-nav__item> <a href=../../images/docker-minisatip/ class=md-nav__link> minisatip </a> </li> <li class=md-nav__item> <a href=../../images/docker-mstream/ class=md-nav__link> mstream </a> </li> <li class=md-nav__item> <a href=../../images/docker-muximux/ class=md-nav__link> muximux </a> </li> <li class=md-nav__item> <a href=../../images/docker-mysql-workbench/ class=md-nav__link> mysql-workbench </a> </li> <li class=md-nav__item> <a href=../../images/docker-nano-discord-bot/ class=md-nav__link> [lsiodev/nano-discord-bot](https://github.com/linuxserver/docker-nano-discord-bot) </a> </li> <li class=md-nav__item> <a href=../../images/docker-nano-wallet/ class=md-nav__link> nano-wallet </a> </li> <li class=md-nav__item> <a href=../../images/docker-nano/ class=md-nav__link> nano </a> </li> <li class=md-nav__item> <a href=../../images/docker-netbootxyz/ class=md-nav__link> netbootxyz </a> </li> <li class=md-nav__item> <a href=../../images/docker-netbox/ class=md-nav__link> netbox </a> </li> <li class=md-nav__item> <a href=../../images/docker-nextcloud/ class=md-nav__link> nextcloud </a> </li> <li class=md-nav__item> <a href=../../images/docker-nginx/ class=md-nav__link> nginx </a> </li> <li class=md-nav__item> <a href=../../images/docker-ngircd/ class=md-nav__link> ngircd </a> </li> <li class=md-nav__item> <a href=../../images/docker-nntp2nntp/ class=md-nav__link> nntp2nntp </a> </li> <li class=md-nav__item> <a href=../../images/docker-nzbget/ class=md-nav__link> nzbget </a> </li> <li class=md-nav__item> <a href=../../images/docker-ombi/ class=md-nav__link> ombi </a> </li> <li class=md-nav__item> <a href=../../images/docker-openssh-server/ class=md-nav__link> openssh-server </a> </li> <li class=md-nav__item> <a href=../../images/docker-openvpn-as/ class=md-nav__link> openvpn-as </a> </li> <li class=md-nav__item> <a href=../../images/docker-openvscode-server/ class=md-nav__link> openvscode-server </a> </li> <li class=md-nav__item> <a href=../../images/docker-organizr/ class=md-nav__link> [linuxserver/organizr](https://github.com/linuxserver/docker-organizr) </a> </li> <li class=md-nav__item> <a href=../../images/docker-oscam/ class=md-nav__link> oscam </a> </li> <li class=md-nav__item> <a href=../../images/docker-overseerr/ class=md-nav__link> overseerr </a> </li> <li class=md-nav__item> <a href=../../images/docker-paperless-ng/ class=md-nav__link> paperless-ng </a> </li> <li class=md-nav__item> <a href=../../images/docker-paperless-ngx/ class=md-nav__link> paperless-ngx </a> </li> <li class=md-nav__item> <a href=../../images/docker-papermerge/ class=md-nav__link> papermerge </a> </li> <li class=md-nav__item> <a href=../../images/docker-photoshow/ class=md-nav__link> photoshow </a> </li> <li class=md-nav__item> <a href=../../images/docker-phpmyadmin/ class=md-nav__link> phpmyadmin </a> </li> <li class=md-nav__item> <a href=../../images/docker-pidgin/ class=md-nav__link> pidgin </a> </li> <li class=md-nav__item> <a href=../../images/docker-piwigo/ class=md-nav__link> piwigo </a> </li> <li class=md-nav__item> <a href=../../images/docker-pixapop/ class=md-nav__link> pixapop </a> </li> <li class=md-nav__item> <a href=../../images/docker-plex-meta-manager/ class=md-nav__link> plex-meta-manager </a> </li> <li class=md-nav__item> <a href=../../images/docker-plex/ class=md-nav__link> plex </a> </li> <li class=md-nav__item> <a href=../../images/docker-projectsend/ class=md-nav__link> projectsend </a> </li> <li class=md-nav__item> <a href=../../images/docker-prowlarr/ class=md-nav__link> prowlarr </a> </li> <li class=md-nav__item> <a href=../../images/docker-pwndrop/ class=md-nav__link> pwndrop </a> </li> <li class=md-nav__item> <a href=../../images/docker-pyload-ng/ class=md-nav__link> pyload-ng </a> </li> <li class=md-nav__item> <a href=../../images/docker-pyload/ class=md-nav__link> pyload </a> </li> <li class=md-nav__item> <a href=../../images/docker-pylon/ class=md-nav__link> pylon </a> </li> <li class=md-nav__item> <a href=../../images/docker-qbittorrent/ class=md-nav__link> qbittorrent </a> </li> <li class=md-nav__item> <a href=../../images/docker-qdirstat/ class=md-nav__link> qdirstat </a> </li> <li class=md-nav__item> <a href=../../images/docker-quassel-core/ class=md-nav__link> quassel-core </a> </li> <li class=md-nav__item> <a href=../../images/docker-quassel-web/ class=md-nav__link> quassel-web </a> </li> <li class=md-nav__item> <a href=../../images/docker-radarr/ class=md-nav__link> radarr </a> </li> <li class=md-nav__item> <a href=../../images/docker-raneto/ class=md-nav__link> raneto </a> </li> <li class=md-nav__item> <a href=../../images/docker-rdesktop/ class=md-nav__link> rdesktop </a> </li> <li class=md-nav__item> <a href=../../images/docker-readarr/ class=md-nav__link> readarr </a> </li> <li class=md-nav__item> <a href=../../images/docker-remmina/ class=md-nav__link> remmina </a> </li> <li class=md-nav__item> <a href=../../images/docker-requestrr/ class=md-nav__link> requestrr </a> </li> <li class=md-nav__item> <a href=../../images/docker-resilio-sync/ class=md-nav__link> resilio-sync </a> </li> <li class=md-nav__item> <a href=../../images/docker-rsnapshot/ class=md-nav__link> rsnapshot </a> </li> <li class=md-nav__item> <a href=../../images/docker-sabnzbd/ class=md-nav__link> sabnzbd </a> </li> <li class=md-nav__item> <a href=../../images/docker-scrutiny/ class=md-nav__link> scrutiny </a> </li> <li class=md-nav__item> <a href=../../images/docker-shout-irc/ class=md-nav__link> linuxserver/shout-irc </a> </li> <li class=md-nav__item> <a href=../../images/docker-sickchill/ class=md-nav__link> sickchill </a> </li> <li class=md-nav__item> <a href=../../images/docker-sickgear/ class=md-nav__link> sickgear </a> </li> <li class=md-nav__item> <a href=../../images/docker-smokeping/ class=md-nav__link> smokeping </a> </li> <li class=md-nav__item> <a href=../../images/docker-snapdrop/ class=md-nav__link> snapdrop </a> </li> <li class=md-nav__item> <a href=../../images/docker-snipe-it/ class=md-nav__link> snipe-it </a> </li> <li class=md-nav__item> <a href=../../images/docker-sonarr/ class=md-nav__link> sonarr </a> </li> <li class=md-nav__item> <a href=../../images/docker-sqlitebrowser/ class=md-nav__link> sqlitebrowser </a> </li> <li class=md-nav__item> <a href=../../images/docker-swag/ class=md-nav__link> swag </a> </li> <li class=md-nav__item> <a href=../../images/docker-synclounge/ class=md-nav__link> synclounge </a> </li> <li class=md-nav__item> <a href=../../images/docker-syncthing/ class=md-nav__link> syncthing </a> </li> <li class=md-nav__item> <a href=../../images/docker-syslog-ng/ class=md-nav__link> syslog-ng </a> </li> <li class=md-nav__item> <a href=../../images/docker-taisun/ class=md-nav__link> taisun </a> </li> <li class=md-nav__item> <a href=../../images/docker-tautulli/ class=md-nav__link> tautulli </a> </li> <li class=md-nav__item> <a href=../../images/docker-thelounge/ class=md-nav__link> thelounge </a> </li> <li class=md-nav__item> <a href=../../images/docker-transmission/ class=md-nav__link> transmission </a> </li> <li class=md-nav__item> <a href=../../images/docker-tvheadend/ class=md-nav__link> tvheadend </a> </li> <li class=md-nav__item> <a href=../../images/docker-ubooquity/ class=md-nav__link> ubooquity </a> </li> <li class=md-nav__item> <a href=../../images/docker-unifi-controller/ class=md-nav__link> unifi-controller </a> </li> <li class=md-nav__item> <a href=../../images/docker-webgrabplus/ class=md-nav__link> webgrabplus </a> </li> <li class=md-nav__item> <a href=../../images/docker-webtop/ class=md-nav__link> webtop </a> </li> <li class=md-nav__item> <a href=../../images/docker-wikijs/ class=md-nav__link> wikijs </a> </li> <li class=md-nav__item> <a href=../../images/docker-wireguard/ class=md-nav__link> wireguard </a> </li> <li class=md-nav__item> <a href=../../images/docker-wireshark/ class=md-nav__link> wireshark </a> </li> <li class=md-nav__item> <a href=../../images/docker-xbackbone/ class=md-nav__link> xbackbone </a> </li> <li class=md-nav__item> <a href=../../images/docker-yq/ class=md-nav__link> yq </a> </li> <li class=md-nav__item> <a href=../../images/docker-znc/ class=md-nav__link> znc </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=__nav_5 type=checkbox id=__nav_5> <label class=md-nav__link for=__nav_5> Misc <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label=Misc data-md-level=1> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> Misc </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../misc/finances/ class=md-nav__link> Finances </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#custom-scripts class=md-nav__link> Custom Scripts </a> </li> <li class=md-nav__item> <a href=#custom-services class=md-nav__link> Custom Services </a> </li> <li class=md-nav__item> <a href=#docker-mods class=md-nav__link> Docker Mods </a> </li> <li class=md-nav__item> <a href=#we-are-here-to-help class=md-nav__link> We are here to help </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <h1 id=customizing-linuxserver-containers>Customizing LinuxServer Containers</h1> <p>One of the challenges we face as an organization is making everyone happy with the functionality we provide for the software we package in Docker containers. As the projects that we package and distribute grow, conventionally so do the use cases along with large communities of power users. As it has become very difficult for us to support Swiss Army Knife style images we are looking to the community of users to start customizing our base image layer themselves.</p> <p>Something we provide and pride ourselves on is keeping our containers up to date with not only the latest external software releases, but also with the latest distribution level packages. Conventionally when people needed some form of custom functionality they would fork our source and build something once that suited their needs leaving this dangling fork without updates or basic maintenance.</p> <p>Behind the scenes we have been working to provide the community with the ability to customize our images not only for themselves but also for other users. This comes in the form of 3 different tools:</p> <ul> <li><strong>Private Custom Scripts</strong></li> <li><strong>Private Custom Services</strong></li> <li><strong>Public Facing <a href=https://github.com/linuxserver/docker-mods>Docker Mods</a></strong></li> </ul> <p>All of the functionality described in this post is live on every one of the containers we currently maintain:</p> <p><a href=https://fleet.linuxserver.io>https://fleet.linuxserver.io</a></p> <p><strong>NOTE:</strong> While the following support has been added to our containers, we will not give support to any custom scripts, services, or mods. If you are having an issue with one of our containers, be sure to disable all custom scripts/services/mods before seeking support.</p> <h2 id=custom-scripts>Custom Scripts</h2> <p>The first part of this update is the support for a user's custom scripts to run at startup. In every container, simply create a new folder located at <code>/custom-cont-init.d</code> and add any scripts you want. These scripts can contain logic for installing packages, copying over custom files to other locations, or installing plugins.</p> <p>Because this location is outside of <code>/config</code> you will need to mount it like any other volume if you wish to make use of it. e.g. <code>-v /home/foo/appdata/my-custom-files:/custom-cont-init.d</code> if using the Docker CLI or</p> <pre><code class=language-yaml>services:
bar:
volumes:
- /home/foo/appdata/bar:/config
- /home/foo/appdata/my-custom-files:/custom-cont-init.d:ro
</code></pre> <p>if using compose. Where possible, to improve security, we recommend mounting them read-only (<code>:ro</code>) so that container processes cannot write to the location.</p> <p>One example use case is our Piwigo container has a plugin that supports video, but requires ffmpeg to be installed. No problem. Add this bad boy into a script file (can be named anything) and you're good to go.</p> <pre><code class=language-bash>#!/bin/bash
echo &quot;**** installing ffmpeg ****&quot;
apk add --no-cache ffmpeg
</code></pre> <p><strong>NOTE:</strong> The folder <code>/custom-cont-init.d</code> needs to be owned by root! If this is not the case, this folder will be renamed and a new (empty) folder will be created. This is to prevent remote code execution by putting scripts in the aforementioned folder.</p> <h2 id=custom-services>Custom Services</h2> <p>There might also be a need to run an additional service in a container alongside what we already package. Similarly to the custom scripts, just create a new directory at <code>/custom-services.d</code>. The files in this directory should be named after the service they will be running. Similar to with custom scripts you will need to mount this folder like any other volume if you wish to make use of it. e.g. <code>-v /home/foo/appdata/my-custom-services:/custom-services.d</code> if using the Docker CLI or</p> <pre><code class=language-yaml>services:
bar:
volumes:
- /home/foo/appdata/bar:/config
- /home/foo/appdata/my-custom-services:/custom-services.d:ro
</code></pre> <p>if using compose. Where possible, to improve security, we recommend mounting them read-only (<code>:ro</code>) so that container processes cannot write to the location.</p> <p>Running cron in our containers is now as simple as a single file. Drop this script in <code>/custom-services.d/cron</code> and it will run automatically in the container:</p> <pre><code class=language-bash>#!/usr/bin/with-contenv bash
/usr/sbin/crond -f -S -l 0 -c /etc/crontabs
</code></pre> <p><strong>NOTE:</strong> With this example, you will most likely need to have cron installed via a custom script using the technique in the previous section, and will need to populate the crontab.</p> <p><strong>NOTE:</strong> The folder <code>/custom-services.d</code> needs to be owned by root! If this is not the case, this folder will be renamed and a new (empty) folder will be created. This is to prevent remote code execution by putting scripts in the aforementioned folder.</p> <h2 id=docker-mods>Docker Mods</h2> <p>In most cases if you needed to write some kind of custom logic to get a plugin to work or to use some kind of popular external service you will not be the only one that finds this logic useful.</p> <p>If you would like to publish and support your hard work we provide a system for a user to pass a single environment variable to the container to ingest your custom modifications.</p> <p>We consume Mods from Dockerhub and in order to publish one following our guide, you only need a Github Account and a Dockerhub account. <a href=https://github.com/linuxserver/docker-mods>(Our guide and example code can be found here)</a></p> <p>Essentially it is a system that stashes a tarball of scripts and any other files you need in an image layer on Dockerhub. When we spin up the container we will download this tarball and extract it to /.</p> <p>This allows community members to publish a relatively static pile of logic that will always be applied to an end user's up to date Linuxserver.io container.</p> <p>An example of how this logic can be used to greatly expand the functionality of our base containers would be to add VPN support to a Transmission container:</p> <pre><code>docker create \
--name=transmission \
--cap-add=NET_ADMIN \
-e PUID=1000 \
-e PGID=1000 \
-e DOCKER_MODS=taisun/config-mods:pia \
-e PIAUSER=pmyuser \
-e PIAPASS=mypassword \
-e PIAENDPOINT=&quot;US New York City&quot; \
-e TZ=US/Eastern \
-p 9091:9091 \
-p 51413:51413 \
-p 51413:51413/udp \
-v path to data:/config \
-v path to downloads:/downloads \
-v path to watch folder:/watch \
--restart unless-stopped \
linuxserver/transmission
</code></pre> <p>The source code for this mod can be found <a href=https://github.com/Taisun-Docker/config-mods/tree/master/pia>here</a>.</p> <p><strong>NOTE:</strong> When pulling in logic from external sources practice caution and trust the sources/community you get them from, as there are extreme security implications to consuming files from sources outside of our control.</p> <h2 id=we-are-here-to-help>We are here to help</h2> <p>If you are interested in writing custom logic and possibly sharing it with the community in the form of a <a href=https://github.com/linuxserver/docker-mods>Docker Mod</a> we are always available to help you out.</p> <p>Our <a href=https://discord.gg/YWrKVTn>Discord server</a> is best for quick direct contact and our <a href=https://discourse.linuxserver.io/ >Forum</a> for a longer running project.</p> <p>There is zero barrier to entry for these levels of container customization and you are in complete control.</p> <p>We are looking forward to your next creation.</p> </article> </div> </div> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=Footer> <a href=../running-our-containers/ class="md-footer__link md-footer__link--prev" aria-label="Previous: Running LinuxServer Containers" rel=prev> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <div class=md-ellipsis> <span class=md-footer__direction> Previous </span> Running LinuxServer Containers </div> </div> </a> <a href=../docker-compose/ class="md-footer__link md-footer__link--next" aria-label="Next: Docker Compose" rel=next> <div class=md-footer__title> <div class=md-ellipsis> <span class=md-footer__direction> Next </span> Docker Compose </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2022 LinuxServer.io </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/linuxserver target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM277.3 415.7c-8.4 1.5-11.5-3.7-11.5-8 0-5.4.2-33 .2-55.3 0-15.6-5.2-25.5-11.3-30.7 37-4.1 76-9.2 76-73.1 0-18.2-6.5-27.3-17.1-39 1.7-4.3 7.4-22-1.7-45-13.9-4.3-45.7 17.9-45.7 17.9-13.2-3.7-27.5-5.6-41.6-5.6-14.1 0-28.4 1.9-41.6 5.6 0 0-31.8-22.2-45.7-17.9-9.1 22.9-3.5 40.6-1.7 45-10.6 11.7-15.6 20.8-15.6 39 0 63.6 37.3 69 74.3 73.1-4.8 4.3-9.1 11.7-10.6 22.3-9.5 4.3-33.8 11.7-48.3-13.9-9.1-15.8-25.5-17.1-25.5-17.1-16.2-.2-1.1 10.2-1.1 10.2 10.8 5 18.4 24.2 18.4 24.2 9.7 29.7 56.1 19.7 56.1 19.7 0 13.9.2 36.5.2 40.6 0 4.3-3 9.5-11.5 8-66-22.1-112.2-84.9-112.2-158.3 0-91.8 70.2-161.5 162-161.5S388 165.6 388 257.4c.1 73.4-44.7 136.3-110.7 158.3zm-98.1-61.1c-1.9.4-3.7-.4-3.9-1.7-.2-1.5 1.1-2.8 3-3.2 1.9-.2 3.7.6 3.9 1.9.3 1.3-1 2.6-3 3zm-9.5-.9c0 1.3-1.5 2.4-3.5 2.4-2.2.2-3.7-.9-3.7-2.4 0-1.3 1.5-2.4 3.5-2.4 1.9-.2 3.7.9 3.7 2.4zm-13.7-1.1c-.4 1.3-2.4 1.9-4.1 1.3-1.9-.4-3.2-1.9-2.8-3.2.4-1.3 2.4-1.9 4.1-1.5 2 .6 3.3 2.1 2.8 3.4zm-12.3-5.4c-.9 1.1-2.8.9-4.3-.6-1.5-1.3-1.9-3.2-.9-4.1.9-1.1 2.8-.9 4.3.6 1.3 1.3 1.8 3.3.9 4.1zm-9.1-9.1c-.9.6-2.6 0-3.7-1.5s-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3 1.1 1.5 1.1 3.3 0 4.1zm-6.5-9.7c-.9.9-2.4.4-3.5-.6-1.1-1.3-1.3-2.8-.4-3.5.9-.9 2.4-.4 3.5.6 1.1 1.3 1.3 2.8.4 3.5zm-6.7-7.4c-.4.9-1.7 1.1-2.8.4-1.3-.6-1.9-1.7-1.5-2.6.4-.6 1.5-.9 2.8-.4 1.3.7 1.9 1.8 1.5 2.6z"/></svg> </a> <a href=https://gitlab.com/linuxserver.io target=_blank rel=noopener title=gitlab.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M48 32h352c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48zm334.1 192.9-44.6-116.4c-.9-2.3-2.6-4.3-4.6-5.6-1.6-1-3.4-1.6-5.2-1.8-1.8-.2-3.7.1-5.4.7-1.7.7-3.3 1.7-4.5 3.1-1.2 1.4-2.1 3-2.6 4.8L285 201.9H162.1l-29.2-92.2c-.5-1.8-1.5-3.4-2.7-4.8-2.1-1.3-2.8-2.4-4.5-3-2.6-.7-3.6-1.8-5.4-.8-1.8.2-3.6.8-5.2 1.8-2 1.3-3.6 3.3-4.5 5.6L65.94 224.9l-.47 1.2a82.94 82.94 0 0 0-2.25 52.5c4.96 17.3 15.4 32.5 29.75 43.3l.17.1.38.3 67.88 50.9 54.2 40.9c1.5 1 5.3 2.8 8.3 2.8 3 0 6-1.8 8.4-2.8l54.1-40.9 68.4-51.2.2-.1c14.4-10.9 24.8-26.1 29.8-43.3 4.9-17.3 3.3-35.7-2.3-52.5l-.4-1.2z"/></svg> </a> <a href=https://twitter.com/linuxserverio target=_blank rel=noopener title=twitter.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-48.9 158.8c.2 2.8.2 5.7.2 8.5 0 86.7-66 186.6-186.6 186.6-37.2 0-71.7-10.8-100.7-29.4 5.3.6 10.4.8 15.8.8 30.7 0 58.9-10.4 81.4-28-28.8-.6-53-19.5-61.3-45.5 10.1 1.5 19.2 1.5 29.6-1.2-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3a65.447 65.447 0 0 1-29.2-54.6c0-12.2 3.2-23.4 8.9-33.1 32.3 39.8 80.8 65.8 135.2 68.6-9.3-44.5 24-80.6 64-80.6 18.9 0 35.9 7.9 47.9 20.7 14.8-2.8 29-8.3 41.6-15.8-4.9 15.2-15.2 28-28.8 36.1 13.2-1.4 26-5.1 37.8-10.2-8.9 13.1-20.1 24.7-32.9 34z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <script id=__config type=application/json>{"base": "../..", "features": ["navigation.instant"], "search": "../../assets/javascripts/workers/search.16e2a7d4.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script> <script src=../../assets/javascripts/bundle.d6c3db9e.min.js></script> </body> </html>