Compare commits

..

No commits in common. "main" and "update/remove-extra-cells" have entirely different histories.

76 changed files with 58 additions and 1823 deletions

2
.github/FUNDING.yml vendored
View file

@ -1,2 +0,0 @@
github: twhite96
custom: ["https://www.buymeacoffee.com/tifflabs"]

View file

@ -1,20 +1,13 @@
<p align="center">
<img width="100%" src="./assets/labs.svg" />
<img width="100%" src="./assets/tifflabs.svg" />
</p>
<p align="center">
<img alt="GitHub Release" src="https://img.shields.io/github/v/release/twhite96/homelab-config?include_prereleases&style=for-the-badge&logo=github&logoColor=black&labelColor=white&color=%23ff0000">
<img alt="Mastodon Follow" src="https://img.shields.io/mastodon/follow/109435346803331556?domain=https%3A%2F%2Ffosstodon.org&style=for-the-badge&logo=mastodon&logoColor=%23ff0000&label=Fosstodon%20Follows&labelColor=white&color=%23ff0000">
<img alt="GitHub Sponsors" src="https://img.shields.io/github/sponsors/twhite96?style=for-the-badge&logoColor=%23ff0000&labelColor=white&color=%23ff0000">
<img alt="Gitea Issues" src="https://img.shields.io/gitea/issues/open/tifflabs/homelab-config?gitea_url=https%3A%2F%2Fwww.tifflabs-software.org%2F&style=for-the-badge&logo=forgejo&logoColor=%23ff0000&labelColor=white&color=ff0000">
</p>
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
## Table of Contents
- [The Purpose of this repo](#the-purpose-of-this-repo)
- [Introduction: What is a "home lab"?](#introduction-what-is-a-home-lab)
- [Who is a home lab for?](#who-is-a-home-lab-for)
- [What hardware should I invest in?](#what-hardware-should-i-invest-in)
@ -23,13 +16,6 @@
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# The Purpose of this repo
The purpose of this repo, as of today, is to document my homelab and network. From here, the scripts, Dockerfiles, Docker Compose files, and markdown files will be imported into my wiki of choice, [Wiki.js](https://js.wiki/). From there, I will update my [draw.io](https://www.drawio.com/) diagrams to explain which devices are on what subnet and the switches each device is connected to.
If you would like more information about documenting your homelab/network setup, there are some excellent resources listed at the end of this README.
# Introduction: What is a "home lab"?
A home lab is basically an over-engineered home networking setup for uber nerds. You can self-host your blog and airgap your IoT traffic with a VLAN on your UniFi Dream Machine Pro or SE, but it really isn't necessary.
@ -46,39 +32,46 @@ Start *very, very, small*. I've built up the stuff I have over two and a half ye
Maybe grab a server rack, a cheap one will do. A good, solid router is a must if you're going to be doing this. Pick up a decent ethernet switch and a dedicated mini PC and get your hands dirty. All this can be had for under $500.
You'll find my setup below.
[☝️ Top](#table-of-contents)
# These are the tools and settings I am using in my home lab.
<!-- ![](https://img.shields.io/badge/homeassistant-41BDF5.svg?&style=for-the-badge&logo=homeassistant&logoColor=white) -->
| | Device | Image/Where to Buy (Click the Image) |
| --- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| | | |
| | Used NUCs | [![nucs]](https://www.ebay.com/itm/285116201597?var=586979484256) |
| | Intel NUC | [![ha-nuc]](https://www.amazon.com/gp/product/B09DCZQFF2/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | UniFi Dream Machine Pro | [![udm-pro]](https://store.ui.com/us/en/pro/category/all-unifi-cloud-gateways/products/udm-pro) |
| | UniFi Flex HD AP | [![unifi-flex-hd]](https://www.amazon.com/gp/product/B07YQ87QBF) |
| | TP-Link (T1600G-18TS) 16 Port Managed Switch | [![tp-link-T1600G-18TS-switch]](https://www.amazon.com/gp/product/B0797KPRPK/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Echogear Server Rack | [![rack]](https://www.amazon.com/gp/product/B07YYJMCNV/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Generic NUC 1U Rack | [![nuc-rack]](https://www.amazon.com/gp/product/B09BJ5WBHB/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Cyberpower power strip 12 outlets | [![cyberpower-strip-12]](https://www.amazon.com/gp/product/B00077INZU/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Cyberpower power strip 18 outlets | [![cyberpower-strip-18]](https://www.amazon.com/gp/product/B004K1YG1Y/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Synology DS920+ NAS | [![synology-9120]](https://www.amazon.com/gp/product/B087Z34F3R/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Deco X55 Router | [![deco-x55]](https://www.amazon.com/gp/product/B09PRB1MZM/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Navepoint 12U Closet Rack | [![navepoint-12u-closet-rack]](https://www.amazon.com/gp/product/B072BXSTY8/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Beelink NUC | [![beelink-nuc]](https://www.amazon.com/gp/product/B0BVLPCDVW/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | CyberPower LCD UPS System 2U Rack/Tower | [![cyber-power-ups]](https://www.amazon.com/gp/product/B00HDODQYS?th=1) |
| | Raspberry Pi 4 B 8gb RAM | [![raspberry-pi-4]](https://www.amazon.com/gp/product/B08R87H4RR/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Beelink S12 Pro Mini PC, Intel 12th Gen Alder Lake- N100 | [![beelink-s12-pro-nucs]](https://www.amazon.com/dp/B0CRKD4YQL?th=1) |
| | Device | Image/Where to Buy (Click the Image) |
| --- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| | | |
| | Used NUCs | [![nucs]](https://www.ebay.com/itm/285116201597?var=586979484256) |
| | Intel NUC | [![ha-nuc]](https://www.amazon.com/gp/product/B09DCZQFF2/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | UniFi Dream Machine Pro | [![udm-pro]](https://store.ui.com/us/en/pro/category/all-unifi-cloud-gateways/products/udm-pro) |
| | UniFi Flex HD AP | [![unifi-flex-hd]](https://www.amazon.com/gp/product/B07YQ87QBF) |
| | TP-Link (T1600G-18TS) 16 Port Managed Switch | [![tp-link-T1600G-18TS-switch]](https://www.amazon.com/gp/product/B0797KPRPK/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Echogear Server Rack | [![rack]](https://www.amazon.com/gp/product/B07YYJMCNV/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Generic NUC 1U Rack | [![nuc-rack]](https://www.amazon.com/gp/product/B09BJ5WBHB/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Cyberpower power strip 12 outlets | [![cyberpower-strip-12]](https://www.amazon.com/gp/product/B00077INZU/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Cyberpower power strip 18 outlets | [![cyberpower-strip-18]](https://www.amazon.com/gp/product/B004K1YG1Y/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Synology DS920+ NAS | [![synology-9120]](https://www.amazon.com/gp/product/B087Z34F3R/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Deco X55 Router | [![deco-x55]](https://www.amazon.com/gp/product/B09PRB1MZM/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Navepoint 12U Closet Rack | [![navepoint-12u-closet-rack]](https://www.amazon.com/gp/product/B072BXSTY8/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | Beelink NUC | [![beelink-nuc]](https://www.amazon.com/gp/product/B0BVLPCDVW/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
| | CyberPower LCD UPS System 2U Rack/Tower | [![cyber-power-ups]](https://www.amazon.com/gp/product/B00HDODQYS?th=1) |
| | Raspberry Pi 4 B 8gb RAM | [![raspberry-pi-4]](https://www.amazon.com/gp/product/B08R87H4RR/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
[☝️ Top](#table-of-contents)
## Server software
Some of the software running on the servers in my home lab.
[Software](/software/README.md)
<details>
<summary>Server Software</summary>
<ul>
<li><a href="https://www.proxmox.com/en/downloads/category/iso-images-pve/">Proxmox</a></li>
<li><a href="https://ubuntu.com/download/server">Ubuntu Server</a></li>
<li><a href="https://www.docker.com/">Docker</a></li>
<li><a href="https://k3s.io/">k3s</a></li>
<li><a href="https://www.home-assistant.io/">Home Assistant</a></li>
<li><a href="https://tailscale.com/">Tailscale</a></li>
<li><a href="https://store.ui.com/collections/unifi-network-unifi-os-consoles/products/udm-pro/">UniFi OS</a></li>
</ul>
</details>
[nucs]: assets/used-nuc.png
[ha-nuc]: assets/nuc.png
@ -93,8 +86,5 @@ Some of the software running on the servers in my home lab.
[deco-x55]: assets/deco-x55.png
[navepoint-12u-closet-rack]: assets/navepoint-12u.png
[raspberry-pi-4]: assets/rpi-4.png
[raspberry-pi-3B+]: assets/rpi-3bp.png
[raspberry-pi-2]: assets/rpi-2.png
[beelink-nuc]: assets/beelink.png
[beelink-s12-pro-nucs]: assets/beelink-pros.png
[cyber-power-ups]: assets/ups.png

View file

@ -1,12 +0,0 @@
# Ansible Playbooks
> [!NOTE]
> Links to videos and articles about how others have built their home labs, as well as a link to my home lab building series.
Ansible Playbooks allow us to automate redundant server tasks as code.
If you're curious about Ansible and how it works, below are some excellent YouTube channels and videos that will give you a better understanding of how to use them.
- [Automate Everything with Ansible! (Ansible for Beginners)](https://youtu.be/w9eCU4bGgjQ)
- [The Fastest Way to run Kubernetes at Home - k3s Ansible Automation - Kubernetes in your HomeLab](https://youtu.be/CbkEWcUZ7zM)
- [Ansible 101](https://www.youtube.com/playlist?list=PL2_OBreMn7FqZkvMYt6ATmgC0KAGGJNAN)

View file

@ -1,21 +0,0 @@
- hosts: localhost
vars:
nfs_version: 3 # to force nfs version to 3.
roles:
- role: ome.nfs_mount
nfs_share_mounts:
- path: /mnt/remote
location: nfs.example.org:/data
# remove a mount from a server
- path: /mnt/remote_old
location: nfs.example.org:/data1337
state: absent
- path: /mnt/readonly
location: nfs.example.org:/read-only
opts: "{{ nfs_mount_opts }},ro"
- path: /mnt/ex_passno
location: nfs.example.org:/ex_passno
passno: 0
- path: /mnt/ex_dump
location: nfs.example.org:/ex_dump
dump: 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 924 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 685 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 918 KiB

View file

@ -1,616 +0,0 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="100%" viewBox="0 0 1611 899" enable-background="new 0 0 1611 899" xml:space="preserve">
<path fill="#FF0000" opacity="1.000000" stroke="none"
d="
M1086.000000,900.000000
C724.000000,900.000000 362.500000,900.000000 1.000000,900.000000
C1.000000,600.333313 1.000000,300.666656 1.000000,1.000000
C538.000000,1.000000 1075.000000,1.000000 1612.000000,1.000000
C1612.000000,300.666656 1612.000000,600.333313 1612.000000,900.000000
C1436.833374,900.000000 1261.666626,900.000000 1086.000000,900.000000
M1097.500000,407.001923
C1164.150757,407.001892 1230.801514,407.009399 1297.452271,406.994873
C1309.227295,406.992310 1314.932251,401.275665 1314.947021,389.525421
C1314.968384,372.529480 1314.969482,355.533447 1314.947021,338.537506
C1314.931030,326.410492 1309.417725,320.998505 1297.153809,320.998444
C1166.851318,320.997833 1036.548828,320.997833 906.246399,321.000610
C904.413879,321.000641 902.570007,320.914368 900.750916,321.080902
C893.377380,321.755981 887.842834,327.129883 887.777161,334.407349
C887.599792,354.066467 887.565979,373.730743 887.880371,393.386475
C887.928894,396.415314 889.519470,399.885620 891.450989,402.312897
C894.641296,406.322144 899.478882,407.055450 904.545532,407.049683
C968.530334,406.977020 1032.515137,407.001923 1097.500000,407.001923
M1219.500000,603.001892
C1245.660400,603.001892 1271.820801,603.028931 1297.981201,602.989014
C1309.073975,602.972107 1314.919678,597.089539 1314.942993,585.992249
C1314.978638,568.996399 1314.961914,552.000488 1314.949463,535.004578
C1314.940186,522.426392 1309.554565,516.998535 1297.121094,516.998474
C1166.819214,516.997864 1036.517334,516.997864 906.215515,517.000732
C904.383057,517.000732 902.538757,516.913391 900.720215,517.083313
C893.348877,517.772400 887.839417,523.148438 887.774719,530.438049
C887.600464,550.097107 887.692200,569.758850 887.737793,589.419373
C887.752319,595.674438 891.133789,599.821350 896.777710,601.831848
C899.503418,602.802795 902.630188,602.955750 905.575623,602.957275
C1009.883728,603.010559 1114.191895,603.001892 1219.500000,603.001892
M1118.500000,418.998077
C1047.017090,418.998077 975.534180,418.990753 904.051270,419.005951
C893.162598,419.008240 887.692871,424.347534 887.655762,435.100067
C887.593628,453.095581 887.576416,471.091797 887.664551,489.087097
C887.715942,499.577911 893.236389,504.990875 903.741333,504.992065
C1035.043579,505.006989 1166.345825,505.006653 1297.648071,504.993500
C1309.121826,504.992340 1314.924194,499.212952 1314.944458,487.829529
C1314.974854,470.666962 1314.973145,453.504272 1314.945557,436.341705
C1314.926514,424.508942 1309.343140,418.999115 1297.457886,418.998779
C1238.138550,418.997192 1178.819336,418.998077 1118.500000,418.998077
M476.054474,566.500000
C476.054474,576.586487 476.054474,586.672974 476.054474,596.852173
C494.136780,596.852173 511.607880,597.224365 529.047119,596.642151
C534.838989,596.448792 540.892395,594.558472 546.228394,592.130249
C559.318237,586.173340 565.922363,573.327820 564.441895,558.545349
C562.891052,543.061401 556.165649,535.283386 540.676331,531.059814
C540.171204,530.922058 539.667114,530.780640 538.998230,530.595520
C539.484924,529.894287 539.609192,529.535156 539.859802,529.380005
C553.078125,521.197693 555.072388,508.661926 552.616882,494.883148
C550.465820,482.812714 541.587524,474.507294 527.263916,473.159729
C510.457458,471.578552 493.474640,471.872467 476.054474,471.337311
C476.054474,503.337585 476.054474,534.418762 476.054474,566.500000
M402.500946,571.980896
C410.828796,571.980896 419.160522,572.126282 427.482452,571.903992
C430.495850,571.823547 431.872284,572.810120 432.823547,575.633118
C435.243896,582.815674 437.993835,589.887268 440.506134,596.715942
C450.966400,596.715942 460.848297,596.715942 471.119598,596.715942
C468.628967,590.501160 466.305969,584.661926 463.951080,578.835632
C450.074402,544.502808 436.218658,510.161346 422.219910,475.878296
C421.560455,474.263336 419.657562,472.090027 418.247345,472.024048
C410.286743,471.651642 402.299683,471.844208 394.256073,471.844208
C377.405914,513.604126 360.662201,555.100159 343.836456,596.799561
C354.430603,596.799561 364.392273,596.799561 374.451630,596.799561
C375.481659,594.023987 376.442719,591.387146 377.437683,588.763123
C379.494354,583.339111 380.103271,575.749084 384.036774,573.095459
C388.209869,570.280212 395.546692,572.154602 402.500946,571.980896
M611.571472,572.189636
C602.763184,568.215454 593.954834,564.241272 584.915710,560.162964
C580.822205,567.052246 576.253235,574.741516 571.127686,583.367615
C577.305481,586.790833 582.942383,590.699097 589.145447,593.207581
C609.512329,601.443970 629.781189,602.181580 649.718445,591.297607
C665.187317,582.853027 673.932617,552.090271 655.186035,537.103516
C648.894714,532.074036 641.715942,528.086243 634.688721,524.066528
C628.648010,520.611145 622.144104,517.972778 616.039917,514.618408
C612.225891,512.522583 609.542175,509.421997 610.653870,504.437012
C611.791504,499.336365 615.346802,496.932556 620.061646,496.073212
C622.647278,495.601990 625.519287,495.174866 627.977844,495.816803
C635.621033,497.812469 643.128296,500.328613 651.215759,502.804352
C654.460327,496.393372 658.244202,488.916687 661.987854,481.519592
C648.880920,471.611420 626.535645,467.030579 611.776978,471.010986
C596.578125,475.110168 584.724060,487.664307 582.952148,501.538208
C580.947998,517.231140 587.373596,529.278809 602.722717,537.967957
C607.918213,540.909119 613.478943,543.197571 618.777954,545.965881
C622.597717,547.961365 626.533630,549.898987 629.936890,552.493225
C637.202515,558.031799 635.755310,568.220825 627.062012,570.990601
C622.486816,572.448303 617.300354,571.987366 611.571472,572.189636
M457.916016,342.499969
C457.916016,373.899384 457.916016,405.298767 457.916016,436.676880
C467.711243,436.676880 476.940460,436.676880 486.589844,436.676880
C486.589844,419.943848 486.589844,403.532776 486.589844,386.636169
C500.249725,386.636169 513.488770,386.636169 526.601196,386.636169
C526.601196,378.070557 526.601196,370.006805 526.601196,361.631836
C513.136597,361.631836 500.029938,361.631836 486.644745,361.631836
C486.644745,353.262451 486.644745,345.218872 486.644745,336.779816
C501.220795,336.779816 515.481873,336.779816 529.913818,336.779816
C529.913818,328.326721 529.913818,320.271667 529.913818,312.206543
C505.794098,312.206543 481.946289,312.206543 457.916016,312.206543
C457.916016,322.212067 457.916016,331.856018 457.916016,342.499969
M598.498535,336.889008
C604.273132,336.889008 610.047729,336.889008 615.879272,336.889008
C615.879272,328.261658 615.879272,320.203796 615.879272,312.058655
C591.841064,312.058655 568.107971,312.058655 544.232605,312.058655
C544.232605,353.769287 544.232605,395.264709 544.232605,436.629578
C553.764954,436.629578 562.976868,436.629578 572.642334,436.629578
C572.642334,419.870453 572.642334,403.480591 572.642334,386.587952
C586.333069,386.587952 599.562805,386.587952 612.735474,386.587952
C612.735474,378.125366 612.735474,370.182526 612.735474,361.738586
C599.297974,361.738586 586.077209,361.738586 572.690857,361.738586
C572.690857,353.201965 572.690857,345.173248 572.690857,336.889008
C581.202942,336.889008 589.351074,336.889008 598.498535,336.889008
M339.500061,311.838348
C330.725525,311.838348 321.951019,311.838348 313.105042,311.838348
C313.105042,320.417908 313.105042,328.471161 313.105042,336.998138
C322.985992,336.998138 332.568573,336.998138 342.563904,336.998138
C342.563904,370.553925 342.563904,403.633698 342.563904,436.724121
C352.241577,436.724121 361.485535,436.724121 371.115143,436.724121
C371.115143,403.377716 371.115143,370.310974 371.115143,336.674927
C381.206299,336.674927 390.918945,336.674927 400.589142,336.674927
C400.589142,328.165649 400.589142,320.232178 400.589142,311.838348
C380.391968,311.838348 360.446045,311.838348 339.500061,311.838348
M330.485413,597.005554
C334.558533,597.005554 338.631653,597.005554 342.598206,597.005554
C342.598206,588.276184 342.598206,580.345520 342.598206,571.964905
C328.293182,571.964905 314.224060,571.964905 299.717041,571.964905
C299.717041,538.472229 299.717041,505.429871 299.717041,472.221832
C289.927307,472.221832 280.589142,472.221832 271.345215,472.221832
C271.345215,513.973206 271.345215,555.340942 271.345215,597.005554
C290.920410,597.005554 310.204742,597.005554 330.485413,597.005554
M774.203003,302.499969
C774.203003,415.122589 774.203308,527.745239 774.201721,640.367859
C774.201660,643.771851 774.002991,647.688965 778.640991,647.864075
C783.475830,648.046631 783.264282,644.096313 783.255005,640.683838
C783.253174,640.017456 783.254761,639.351013 783.254761,638.684631
C783.254761,521.063965 783.254822,403.443329 783.254395,285.822693
C783.254395,284.489899 783.226135,283.156616 783.251953,281.824371
C783.313538,278.646790 782.490051,275.982208 778.709045,276.079651
C775.017639,276.174805 774.205750,278.889709 774.203735,282.007629
C774.199524,288.505096 774.202759,295.002533 774.203003,302.499969
M439.734863,417.499481
C439.734863,382.430084 439.734863,347.360657 439.734863,312.069214
C429.970398,312.069214 420.738434,312.069214 411.369629,312.069214
C411.369629,353.790070 411.369629,395.277130 411.369629,436.694336
C420.923126,436.694336 430.154205,436.694336 439.734863,436.694336
C439.734863,430.424896 439.734863,424.462006 439.734863,417.499481
z"/>
<path fill="#FFFEFE" opacity="1.000000" stroke="none"
d="
M1097.000000,407.001923
C1032.515137,407.001923 968.530334,406.977020 904.545532,407.049683
C899.478882,407.055450 894.641296,406.322144 891.450989,402.312897
C889.519470,399.885620 887.928894,396.415314 887.880371,393.386475
C887.565979,373.730743 887.599792,354.066467 887.777161,334.407349
C887.842834,327.129883 893.377380,321.755981 900.750916,321.080902
C902.570007,320.914368 904.413879,321.000641 906.246399,321.000610
C1036.548828,320.997833 1166.851318,320.997833 1297.153809,320.998444
C1309.417725,320.998505 1314.931030,326.410492 1314.947021,338.537506
C1314.969482,355.533447 1314.968384,372.529480 1314.947021,389.525421
C1314.932251,401.275665 1309.227295,406.992310 1297.452271,406.994873
C1230.801514,407.009399 1164.150757,407.001892 1097.000000,407.001923
M916.641602,354.341370
C916.437866,360.063019 915.112732,366.019104 916.250061,371.460419
C919.139587,385.284943 933.987732,394.846680 947.551086,392.628510
C962.436584,390.194092 973.763733,376.879120 972.679749,363.090057
C971.589233,349.217834 962.023376,337.917847 949.626587,335.857788
C935.011353,333.429016 923.108948,339.882111 916.641602,354.341370
M1047.425049,366.412048
C1047.425049,369.333496 1047.425049,372.254944 1047.425049,375.279938
C1076.388672,375.279938 1104.600708,375.279938 1133.019531,375.279938
C1133.019531,367.833344 1133.019531,360.620239 1133.019531,353.382812
C1104.470093,353.382812 1076.241211,353.382812 1047.425049,353.382812
C1047.425049,357.544922 1047.425049,361.495239 1047.425049,366.412048
M1200.977295,344.762085
C1200.977295,357.756317 1201.060181,370.751373 1200.929321,383.744293
C1200.887695,387.885376 1201.883789,390.575073 1206.660767,390.505798
C1211.154175,390.440643 1212.134277,387.885040 1212.100586,383.957794
C1211.986328,370.631378 1211.987671,357.302765 1212.099487,343.976318
C1212.132690,340.017334 1211.059082,337.512695 1206.590332,337.495758
C1202.215210,337.479187 1200.646851,339.766937 1200.977295,344.762085
M1233.049927,344.752686
C1233.345581,340.614960 1232.586792,337.413544 1227.355713,337.489929
C1222.418457,337.562103 1221.899170,340.602600 1221.930786,344.544647
C1222.036133,357.703217 1222.042969,370.863739 1221.926880,384.022095
C1221.891968,387.982452 1222.953491,390.487793 1227.425293,390.504211
C1231.789062,390.520264 1233.135742,388.258484 1233.095947,384.182587
C1232.970581,371.357574 1233.049927,358.530579 1233.049927,344.752686
M1252.645996,338.736359
C1245.619629,335.941071 1242.977783,337.627930 1242.969971,344.958527
C1242.956299,357.956818 1243.036743,370.955688 1242.923584,383.953003
C1242.889526,387.869141 1243.839355,390.451111 1248.352539,390.506256
C1253.118774,390.564453 1254.133301,387.893127 1254.091553,383.742767
C1253.959351,370.579163 1254.071045,357.413239 1254.005981,344.248657
C1253.997925,342.641602 1253.488281,341.037048 1252.645996,338.736359
z"/>
<path fill="#FFFEFE" opacity="1.000000" stroke="none"
d="
M1219.000000,603.001892
C1114.191895,603.001892 1009.883728,603.010559 905.575623,602.957275
C902.630188,602.955750 899.503418,602.802795 896.777710,601.831848
C891.133789,599.821350 887.752319,595.674438 887.737793,589.419373
C887.692200,569.758850 887.600464,550.097107 887.774719,530.438049
C887.839417,523.148438 893.348877,517.772400 900.720215,517.083313
C902.538757,516.913391 904.383057,517.000732 906.215515,517.000732
C1036.517334,516.997864 1166.819214,516.997864 1297.121094,516.998474
C1309.554565,516.998535 1314.940186,522.426392 1314.949463,535.004578
C1314.961914,552.000488 1314.978638,568.996399 1314.942993,585.992249
C1314.919678,597.089539 1309.073975,602.972107 1297.981201,602.989014
C1271.820801,603.028931 1245.660400,603.001892 1219.000000,603.001892
M960.658020,536.770813
C959.965454,536.309082 959.292786,535.813660 958.577393,535.390503
C948.015320,529.142944 934.808228,530.129761 925.437988,537.856262
C915.774475,545.824524 912.482666,558.461792 916.969238,570.367493
C921.216125,581.637085 932.380554,589.097290 944.605469,588.834351
C956.079163,588.587585 967.062134,580.656677 970.940979,569.817200
C975.182190,557.964966 971.737000,546.295898 960.658020,536.770813
M1059.522827,549.159302
C1055.610107,549.159302 1051.697388,549.159302 1047.752808,549.159302
C1047.752808,556.947693 1047.752808,564.007812 1047.752808,571.143677
C1076.402466,571.143677 1104.722656,571.143677 1133.068604,571.143677
C1133.068604,563.676880 1133.068604,556.580383 1133.068604,549.159302
C1108.708496,549.159302 1084.612305,549.159302 1059.522827,549.159302
M1242.968384,578.297729
C1242.968384,578.630859 1242.990479,578.965637 1242.965088,579.296814
C1242.643921,583.471680 1243.483521,586.612183 1248.692871,586.508240
C1253.639404,586.409546 1254.108643,583.324036 1254.078857,579.407410
C1253.978638,566.250488 1253.971558,553.091736 1254.082275,539.934998
C1254.115723,535.953613 1252.968872,533.502808 1248.526245,533.494141
C1244.120361,533.485596 1242.881348,535.833801 1242.922241,539.869385
C1243.048950,552.359619 1242.968384,564.851868 1242.968384,578.297729
M1221.972412,548.520752
C1221.972778,559.177490 1222.047485,569.834961 1221.934570,580.490479
C1221.893311,584.380676 1223.322388,586.477417 1227.392334,586.496033
C1231.327393,586.514038 1233.109741,584.745483 1233.082275,580.717224
C1232.988281,566.897400 1232.994995,553.076294 1233.077393,539.256348
C1233.101318,535.236633 1231.302734,533.465149 1227.360474,533.503235
C1223.282837,533.542664 1221.752686,535.657837 1221.947876,539.540283
C1222.081543,542.197754 1221.972900,544.867371 1221.972412,548.520752
M1211.735352,583.833313
C1211.841675,569.180115 1211.887451,554.526123 1212.094238,539.874329
C1212.151123,535.846436 1210.896973,533.479797 1206.483765,533.494446
C1202.046143,533.509155 1200.899170,535.943604 1200.934570,539.938599
C1201.052979,553.267944 1200.877441,566.600586 1201.088013,579.927734
C1201.119995,581.955017 1202.255127,585.370911 1203.485474,585.672180
C1205.840332,586.248840 1208.630249,585.048401 1211.735352,583.833313
z"/>
<path fill="#FFFEFE" opacity="1.000000" stroke="none"
d="
M1119.000000,418.998077
C1178.819336,418.998077 1238.138550,418.997192 1297.457886,418.998779
C1309.343140,418.999115 1314.926514,424.508942 1314.945557,436.341705
C1314.973145,453.504272 1314.974854,470.666962 1314.944458,487.829529
C1314.924194,499.212952 1309.121826,504.992340 1297.648071,504.993500
C1166.345825,505.006653 1035.043579,505.006989 903.741333,504.992065
C893.236389,504.990875 887.715942,499.577911 887.664551,489.087097
C887.576416,471.091797 887.593628,453.095581 887.655762,435.100067
C887.692871,424.347534 893.162598,419.008240 904.051270,419.005951
C975.534180,418.990753 1047.017090,418.998077 1119.000000,418.998077
M967.206604,478.631775
C974.739563,467.498474 974.456604,454.572357 966.454651,444.283691
C959.014404,434.717224 945.974548,430.838837 934.608704,434.811707
C922.986084,438.874390 915.055969,449.499542 914.999451,461.085327
C914.935669,474.157623 922.216919,484.733276 934.296326,489.113098
C946.038513,493.370636 958.436951,489.610687 967.206604,478.631775
M1084.500000,451.159424
C1072.273193,451.159424 1060.046387,451.159424 1047.742798,451.159424
C1047.742798,458.925690 1047.742798,465.986786 1047.742798,473.155426
C1076.383301,473.155426 1104.704590,473.155426 1133.079590,473.155426
C1133.079590,465.702820 1133.079590,458.608185 1133.079590,451.159424
C1117.048340,451.159424 1101.274170,451.159424 1084.500000,451.159424
M1201.064453,439.065338
C1201.035400,453.395142 1201.073120,467.725586 1200.934570,482.054321
C1200.895996,486.040161 1202.022583,488.496063 1206.473267,488.505371
C1210.865967,488.514587 1212.140137,486.191681 1212.103027,482.142334
C1211.980713,468.812592 1212.179932,455.478699 1211.930420,442.152466
C1211.890991,440.044891 1210.708374,436.975677 1209.103149,436.105164
C1206.535400,434.712616 1203.198120,434.881104 1201.064453,439.065338
M1251.955444,436.164795
C1244.558838,434.633026 1242.972778,435.894226 1242.968384,443.355591
C1242.960815,456.187775 1243.032593,469.020477 1242.925781,481.851776
C1242.893677,485.702789 1243.685791,488.414368 1248.251587,488.503540
C1252.956421,488.595428 1254.139038,486.068665 1254.093994,481.843109
C1253.953735,468.679108 1254.097900,455.512207 1253.980347,442.347748
C1253.963501,440.472076 1253.108887,438.603851 1251.955444,436.164795
M1231.647827,487.272156
C1232.115112,485.570435 1232.973511,483.872040 1232.987915,482.166504
C1233.099854,468.834900 1232.968750,455.501160 1233.097290,442.169861
C1233.137817,437.974152 1231.998657,435.393677 1227.266846,435.495361
C1222.717041,435.593170 1221.895142,438.272491 1221.928711,442.138702
C1222.040161,454.970306 1221.965454,467.803467 1221.972656,480.636047
C1221.976929,488.101715 1223.560913,489.363770 1231.647827,487.272156
z"/>
<path fill="#FFFDFD" opacity="1.000000" stroke="none"
d="
M476.054474,566.000000
C476.054474,534.418762 476.054474,503.337585 476.054474,471.337311
C493.474640,471.872467 510.457458,471.578552 527.263916,473.159729
C541.587524,474.507294 550.465820,482.812714 552.616882,494.883148
C555.072388,508.661926 553.078125,521.197693 539.859802,529.380005
C539.609192,529.535156 539.484924,529.894287 538.998230,530.595520
C539.667114,530.780640 540.171204,530.922058 540.676331,531.059814
C556.165649,535.283386 562.891052,543.061401 564.441895,558.545349
C565.922363,573.327820 559.318237,586.173340 546.228394,592.130249
C540.892395,594.558472 534.838989,596.448792 529.047119,596.642151
C511.607880,597.224365 494.136780,596.852173 476.054474,596.852173
C476.054474,586.672974 476.054474,576.586487 476.054474,566.000000
M516.945801,545.512512
C513.006042,545.512512 509.066223,545.512512 504.952209,545.512512
C504.952209,555.461426 504.952209,565.021790 504.952209,575.402100
C511.302704,574.904785 517.459595,574.924805 523.413452,573.835449
C531.770752,572.306396 535.389893,566.611023 534.280945,558.224304
C533.227417,550.256104 528.835388,546.892517 516.945801,545.512512
M506.498993,493.878052
C505.927338,494.321045 504.862427,494.758209 504.857117,495.207886
C504.757751,503.635223 504.784058,512.064026 504.784058,521.258545
C509.120117,520.662659 512.933533,520.499817 516.545959,519.562561
C522.916199,517.909790 526.008301,513.324951 525.924927,506.578003
C525.849731,500.492188 522.784851,496.593079 516.311951,494.979889
C513.444092,494.265137 510.409088,494.220825 506.498993,493.878052
z"/>
<path fill="#FFFDFD" opacity="1.000000" stroke="none"
d="
M402.001404,571.980957
C395.546692,572.154602 388.209869,570.280212 384.036774,573.095459
C380.103271,575.749084 379.494354,583.339111 377.437683,588.763123
C376.442719,591.387146 375.481659,594.023987 374.451630,596.799561
C364.392273,596.799561 354.430603,596.799561 343.836456,596.799561
C360.662201,555.100159 377.405914,513.604126 394.256073,471.844208
C402.299683,471.844208 410.286743,471.651642 418.247345,472.024048
C419.657562,472.090027 421.560455,474.263336 422.219910,475.878296
C436.218658,510.161346 450.074402,544.502808 463.951080,578.835632
C466.305969,584.661926 468.628967,590.501160 471.119598,596.715942
C460.848297,596.715942 450.966400,596.715942 440.506134,596.715942
C437.993835,589.887268 435.243896,582.815674 432.823547,575.633118
C431.872284,572.810120 430.495850,571.823547 427.482452,571.903992
C419.160522,572.126282 410.828796,571.980896 402.001404,571.980957
M420.797516,546.715088
C416.591888,534.777161 412.386230,522.839233 407.707458,509.558380
C402.644623,522.789307 398.128754,534.590881 393.406860,546.930786
C402.751587,546.930786 411.346039,546.930786 420.797516,546.715088
z"/>
<path fill="#FFFCFC" opacity="1.000000" stroke="none"
d="
M611.980713,572.291199
C617.300354,571.987366 622.486816,572.448303 627.062012,570.990601
C635.755310,568.220825 637.202515,558.031799 629.936890,552.493225
C626.533630,549.898987 622.597717,547.961365 618.777954,545.965881
C613.478943,543.197571 607.918213,540.909119 602.722717,537.967957
C587.373596,529.278809 580.947998,517.231140 582.952148,501.538208
C584.724060,487.664307 596.578125,475.110168 611.776978,471.010986
C626.535645,467.030579 648.880920,471.611420 661.987854,481.519592
C658.244202,488.916687 654.460327,496.393372 651.215759,502.804352
C643.128296,500.328613 635.621033,497.812469 627.977844,495.816803
C625.519287,495.174866 622.647278,495.601990 620.061646,496.073212
C615.346802,496.932556 611.791504,499.336365 610.653870,504.437012
C609.542175,509.421997 612.225891,512.522583 616.039917,514.618408
C622.144104,517.972778 628.648010,520.611145 634.688721,524.066528
C641.715942,528.086243 648.894714,532.074036 655.186035,537.103516
C673.932617,552.090271 665.187317,582.853027 649.718445,591.297607
C629.781189,602.181580 609.512329,601.443970 589.145447,593.207581
C582.942383,590.699097 577.305481,586.790833 571.127686,583.367615
C576.253235,574.741516 580.822205,567.052246 584.915710,560.162964
C593.954834,564.241272 602.763184,568.215454 611.980713,572.291199
z"/>
<path fill="#FFFEFE" opacity="1.000000" stroke="none"
d="
M457.916016,341.999939
C457.916016,331.856018 457.916016,322.212067 457.916016,312.206543
C481.946289,312.206543 505.794098,312.206543 529.913818,312.206543
C529.913818,320.271667 529.913818,328.326721 529.913818,336.779816
C515.481873,336.779816 501.220795,336.779816 486.644745,336.779816
C486.644745,345.218872 486.644745,353.262451 486.644745,361.631836
C500.029938,361.631836 513.136597,361.631836 526.601196,361.631836
C526.601196,370.006805 526.601196,378.070557 526.601196,386.636169
C513.488770,386.636169 500.249725,386.636169 486.589844,386.636169
C486.589844,403.532776 486.589844,419.943848 486.589844,436.676880
C476.940460,436.676880 467.711243,436.676880 457.916016,436.676880
C457.916016,405.298767 457.916016,373.899384 457.916016,341.999939
z"/>
<path fill="#FFFEFE" opacity="1.000000" stroke="none"
d="
M597.998901,336.889008
C589.351074,336.889008 581.202942,336.889008 572.690857,336.889008
C572.690857,345.173248 572.690857,353.201965 572.690857,361.738586
C586.077209,361.738586 599.297974,361.738586 612.735474,361.738586
C612.735474,370.182526 612.735474,378.125366 612.735474,386.587952
C599.562805,386.587952 586.333069,386.587952 572.642334,386.587952
C572.642334,403.480591 572.642334,419.870453 572.642334,436.629578
C562.976868,436.629578 553.764954,436.629578 544.232605,436.629578
C544.232605,395.264709 544.232605,353.769287 544.232605,312.058655
C568.107971,312.058655 591.841064,312.058655 615.879272,312.058655
C615.879272,320.203796 615.879272,328.261658 615.879272,336.889008
C610.047729,336.889008 604.273132,336.889008 597.998901,336.889008
z"/>
<path fill="#FFFCFC" opacity="1.000000" stroke="none"
d="
M340.000092,311.838348
C360.446045,311.838348 380.391968,311.838348 400.589142,311.838348
C400.589142,320.232178 400.589142,328.165649 400.589142,336.674927
C390.918945,336.674927 381.206299,336.674927 371.115143,336.674927
C371.115143,370.310974 371.115143,403.377716 371.115143,436.724121
C361.485535,436.724121 352.241577,436.724121 342.563904,436.724121
C342.563904,403.633698 342.563904,370.553925 342.563904,336.998138
C332.568573,336.998138 322.985992,336.998138 313.105042,336.998138
C313.105042,328.471161 313.105042,320.417908 313.105042,311.838348
C321.951019,311.838348 330.725525,311.838348 340.000092,311.838348
z"/>
<path fill="#FFFCFC" opacity="1.000000" stroke="none"
d="
M329.987244,597.005554
C310.204742,597.005554 290.920410,597.005554 271.345215,597.005554
C271.345215,555.340942 271.345215,513.973206 271.345215,472.221832
C280.589142,472.221832 289.927307,472.221832 299.717041,472.221832
C299.717041,505.429871 299.717041,538.472229 299.717041,571.964905
C314.224060,571.964905 328.293182,571.964905 342.598206,571.964905
C342.598206,580.345520 342.598206,588.276184 342.598206,597.005554
C338.631653,597.005554 334.558533,597.005554 329.987244,597.005554
z"/>
<path fill="#FFF6F6" opacity="1.000000" stroke="none"
d="
M774.203003,302.000000
C774.202759,295.002533 774.199524,288.505096 774.203735,282.007629
C774.205750,278.889709 775.017639,276.174805 778.709045,276.079651
C782.490051,275.982208 783.313538,278.646790 783.251953,281.824371
C783.226135,283.156616 783.254395,284.489899 783.254395,285.822693
C783.254822,403.443329 783.254761,521.063965 783.254761,638.684631
C783.254761,639.351013 783.253174,640.017456 783.255005,640.683838
C783.264282,644.096313 783.475830,648.046631 778.640991,647.864075
C774.002991,647.688965 774.201660,643.771851 774.201721,640.367859
C774.203308,527.745239 774.203003,415.122589 774.203003,302.000000
z"/>
<path fill="#FFFBFB" opacity="1.000000" stroke="none"
d="
M439.734863,417.999268
C439.734863,424.462006 439.734863,430.424896 439.734863,436.694336
C430.154205,436.694336 420.923126,436.694336 411.369629,436.694336
C411.369629,395.277130 411.369629,353.790070 411.369629,312.069214
C420.738434,312.069214 429.970398,312.069214 439.734863,312.069214
C439.734863,347.360657 439.734863,382.430084 439.734863,417.999268
z"/>
<path fill="#FF0202" opacity="1.000000" stroke="none"
d="
M916.774414,353.969299
C923.108948,339.882111 935.011353,333.429016 949.626587,335.857788
C962.023376,337.917847 971.589233,349.217834 972.679749,363.090057
C973.763733,376.879120 962.436584,390.194092 947.551086,392.628510
C933.987732,394.846680 919.139587,385.284943 916.250061,371.460419
C915.112732,366.019104 916.437866,360.063019 916.774414,353.969299
z"/>
<path fill="#FF0404" opacity="1.000000" stroke="none"
d="
M1047.425049,365.928802
C1047.425049,361.495239 1047.425049,357.544922 1047.425049,353.382812
C1076.241211,353.382812 1104.470093,353.382812 1133.019531,353.382812
C1133.019531,360.620239 1133.019531,367.833344 1133.019531,375.279938
C1104.600708,375.279938 1076.388672,375.279938 1047.425049,375.279938
C1047.425049,372.254944 1047.425049,369.333496 1047.425049,365.928802
z"/>
<path fill="#FF0000" opacity="1.000000" stroke="none"
d="
M1200.977295,344.295288
C1200.646851,339.766937 1202.215210,337.479187 1206.590332,337.495758
C1211.059082,337.512695 1212.132690,340.017334 1212.099487,343.976318
C1211.987671,357.302765 1211.986328,370.631378 1212.100586,383.957794
C1212.134277,387.885040 1211.154175,390.440643 1206.660767,390.505798
C1201.883789,390.575073 1200.887695,387.885376 1200.929321,383.744293
C1201.060181,370.751373 1200.977295,357.756317 1200.977295,344.295288
z"/>
<path fill="#FF0000" opacity="1.000000" stroke="none"
d="
M1233.049927,345.228516
C1233.049927,358.530579 1232.970581,371.357574 1233.095947,384.182587
C1233.135742,388.258484 1231.789062,390.520264 1227.425293,390.504211
C1222.953491,390.487793 1221.891968,387.982452 1221.926880,384.022095
C1222.042969,370.863739 1222.036133,357.703217 1221.930786,344.544647
C1221.899170,340.602600 1222.418457,337.562103 1227.355713,337.489929
C1232.586792,337.413544 1233.345581,340.614960 1233.049927,345.228516
z"/>
<path fill="#FF0000" opacity="1.000000" stroke="none"
d="
M1252.928467,339.083862
C1253.488281,341.037048 1253.997925,342.641602 1254.005981,344.248657
C1254.071045,357.413239 1253.959351,370.579163 1254.091553,383.742767
C1254.133301,387.893127 1253.118774,390.564453 1248.352539,390.506256
C1243.839355,390.451111 1242.889526,387.869141 1242.923584,383.953003
C1243.036743,370.955688 1242.956299,357.956818 1242.969971,344.958527
C1242.977783,337.627930 1245.619629,335.941071 1252.928467,339.083862
z"/>
<path fill="#FF0202" opacity="1.000000" stroke="none"
d="
M960.973572,536.947998
C971.737000,546.295898 975.182190,557.964966 970.940979,569.817200
C967.062134,580.656677 956.079163,588.587585 944.605469,588.834351
C932.380554,589.097290 921.216125,581.637085 916.969238,570.367493
C912.482666,558.461792 915.774475,545.824524 925.437988,537.856262
C934.808228,530.129761 948.015320,529.142944 958.577393,535.390503
C959.292786,535.813660 959.965454,536.309082 960.973572,536.947998
z"/>
<path fill="#FF0404" opacity="1.000000" stroke="none"
d="
M1060.019531,549.159302
C1084.612305,549.159302 1108.708496,549.159302 1133.068604,549.159302
C1133.068604,556.580383 1133.068604,563.676880 1133.068604,571.143677
C1104.722656,571.143677 1076.402466,571.143677 1047.752808,571.143677
C1047.752808,564.007812 1047.752808,556.947693 1047.752808,549.159302
C1051.697388,549.159302 1055.610107,549.159302 1060.019531,549.159302
z"/>
<path fill="#FF0000" opacity="1.000000" stroke="none"
d="
M1242.968384,577.820557
C1242.968384,564.851868 1243.048950,552.359619 1242.922241,539.869385
C1242.881348,535.833801 1244.120361,533.485596 1248.526245,533.494141
C1252.968872,533.502808 1254.115723,535.953613 1254.082275,539.934998
C1253.971558,553.091736 1253.978638,566.250488 1254.078857,579.407410
C1254.108643,583.324036 1253.639404,586.409546 1248.692871,586.508240
C1243.483521,586.612183 1242.643921,583.471680 1242.965088,579.296814
C1242.990479,578.965637 1242.968384,578.630859 1242.968384,577.820557
z"/>
<path fill="#FF0000" opacity="1.000000" stroke="none"
d="
M1221.972412,548.026123
C1221.972900,544.867371 1222.081543,542.197754 1221.947876,539.540283
C1221.752686,535.657837 1223.282837,533.542664 1227.360474,533.503235
C1231.302734,533.465149 1233.101318,535.236633 1233.077393,539.256348
C1232.994995,553.076294 1232.988281,566.897400 1233.082275,580.717224
C1233.109741,584.745483 1231.327393,586.514038 1227.392334,586.496033
C1223.322388,586.477417 1221.893311,584.380676 1221.934570,580.490479
C1222.047485,569.834961 1221.972778,559.177490 1221.972412,548.026123
z"/>
<path fill="#FF0000" opacity="1.000000" stroke="none"
d="
M1211.487549,584.209351
C1208.630249,585.048401 1205.840332,586.248840 1203.485474,585.672180
C1202.255127,585.370911 1201.119995,581.955017 1201.088013,579.927734
C1200.877441,566.600586 1201.052979,553.267944 1200.934570,539.938599
C1200.899170,535.943604 1202.046143,533.509155 1206.483765,533.494446
C1210.896973,533.479797 1212.151123,535.846436 1212.094238,539.874329
C1211.887451,554.526123 1211.841675,569.180115 1211.487549,584.209351
z"/>
<path fill="#FF0202" opacity="1.000000" stroke="none"
d="
M967.015930,478.940063
C958.436951,489.610687 946.038513,493.370636 934.296326,489.113098
C922.216919,484.733276 914.935669,474.157623 914.999451,461.085327
C915.055969,449.499542 922.986084,438.874390 934.608704,434.811707
C945.974548,430.838837 959.014404,434.717224 966.454651,444.283691
C974.456604,454.572357 974.739563,467.498474 967.015930,478.940063
z"/>
<path fill="#FF0404" opacity="1.000000" stroke="none"
d="
M1085.000000,451.159424
C1101.274170,451.159424 1117.048340,451.159424 1133.079590,451.159424
C1133.079590,458.608185 1133.079590,465.702820 1133.079590,473.155426
C1104.704590,473.155426 1076.383301,473.155426 1047.742798,473.155426
C1047.742798,465.986786 1047.742798,458.925690 1047.742798,451.159424
C1060.046387,451.159424 1072.273193,451.159424 1085.000000,451.159424
z"/>
<path fill="#FF0000" opacity="1.000000" stroke="none"
d="
M1201.180420,438.629150
C1203.198120,434.881104 1206.535400,434.712616 1209.103149,436.105164
C1210.708374,436.975677 1211.890991,440.044891 1211.930420,442.152466
C1212.179932,455.478699 1211.980713,468.812592 1212.103027,482.142334
C1212.140137,486.191681 1210.865967,488.514587 1206.473267,488.505371
C1202.022583,488.496063 1200.895996,486.040161 1200.934570,482.054321
C1201.073120,467.725586 1201.035400,453.395142 1201.180420,438.629150
z"/>
<path fill="#FF0000" opacity="1.000000" stroke="none"
d="
M1252.298706,436.448486
C1253.108887,438.603851 1253.963501,440.472076 1253.980347,442.347748
C1254.097900,455.512207 1253.953735,468.679108 1254.093994,481.843109
C1254.139038,486.068665 1252.956421,488.595428 1248.251587,488.503540
C1243.685791,488.414368 1242.893677,485.702789 1242.925781,481.851776
C1243.032593,469.020477 1242.960815,456.187775 1242.968384,443.355591
C1242.972778,435.894226 1244.558838,434.633026 1252.298706,436.448486
z"/>
<path fill="#FF0000" opacity="1.000000" stroke="none"
d="
M1231.302246,487.554504
C1223.560913,489.363770 1221.976929,488.101715 1221.972656,480.636047
C1221.965454,467.803467 1222.040161,454.970306 1221.928711,442.138702
C1221.895142,438.272491 1222.717041,435.593170 1227.266846,435.495361
C1231.998657,435.393677 1233.137817,437.974152 1233.097290,442.169861
C1232.968750,455.501160 1233.099854,468.834900 1232.987915,482.166504
C1232.973511,483.872040 1232.115112,485.570435 1231.302246,487.554504
z"/>
<path fill="#FF0404" opacity="1.000000" stroke="none"
d="
M517.386475,545.567932
C528.835388,546.892517 533.227417,550.256104 534.280945,558.224304
C535.389893,566.611023 531.770752,572.306396 523.413452,573.835449
C517.459595,574.924805 511.302704,574.904785 504.952209,575.402100
C504.952209,565.021790 504.952209,555.461426 504.952209,545.512512
C509.066223,545.512512 513.006042,545.512512 517.386475,545.567932
z"/>
<path fill="#FF0303" opacity="1.000000" stroke="none"
d="
M506.974487,493.875122
C510.409088,494.220825 513.444092,494.265137 516.311951,494.979889
C522.784851,496.593079 525.849731,500.492188 525.924927,506.578003
C526.008301,513.324951 522.916199,517.909790 516.545959,519.562561
C512.933533,520.499817 509.120117,520.662659 504.784058,521.258545
C504.784058,512.064026 504.757751,503.635223 504.857117,495.207886
C504.862427,494.758209 505.927338,494.321045 506.974487,493.875122
z"/>
<path fill="#FF0505" opacity="1.000000" stroke="none"
d="
M420.369019,546.822937
C411.346039,546.930786 402.751587,546.930786 393.406860,546.930786
C398.128754,534.590881 402.644623,522.789307 407.707458,509.558380
C412.386230,522.839233 416.591888,534.777161 420.369019,546.822937
z"/>
</svg>

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 855 KiB

8
builds/README.md Normal file
View file

@ -0,0 +1,8 @@
# Home Lab Builds, etc
> [!NOTE]\
> Links to videos and articles about how others have built their home labs, as well as a link to my home lab building series.

6
cloudflare/README.md Normal file
View file

@ -0,0 +1,6 @@
# Cloudflare Examples
> [!NOTE]\
> This is a work in progress. I will be placing configs and yaml files and docker compose files, etc in here once I get a better feel for Cloudflare proxying and how it works.

6
docker/README.md Normal file
View file

@ -0,0 +1,6 @@
# Docker Examples
> [!NOTE]\
> This is a work in progress. I will be placing configs and yaml files and docker compose files, etc in here once I get a better feel for Docker compose and how it works.

View file

@ -1,14 +0,0 @@
---
services:
audiobookshelf:
image: ghcr.io/advplyr/audiobookshelf:latest
ports:
- 13378:80
volumes:
- /audiobooks:/audiobooks
- /podcasts:/podcasts
- /config:/config
- /metadata>:/metadata
environment:
- TZ=America/New_York

View file

@ -1,68 +0,0 @@
name: immich
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
command: ['start.sh', 'immich']
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports:
- 2283:3001
depends_on:
- redis
- database
restart: always
immich-microservices:
container_name: immich_microservices
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/hardware-transcoding
# file: hwaccel.transcoding.yml
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
command: ['start.sh', 'microservices']
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
depends_on:
- redis
- database
restart: always
immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- model-cache:/cache
env_file:
- .env
restart: always
redis:
container_name: immich_redis
image: registry.hub.docker.com/library/redis:6.2-alpine@sha256:84882e87b54734154586e5f8abd4dce69fe7311315e2fc6d67c29614c8de2672
restart: always
database:
container_name: immich_postgres
image: registry.hub.docker.com/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
volumes:
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
restart: always
volumes:
model-cache:

View file

@ -1,71 +0,0 @@
---
services:
piped-frontend:
image: 1337kavin/piped-frontend:latest
restart: unless-stopped
depends_on:
- piped
environment:
BACKEND_HOSTNAME: pipedapi.tifflabs.cfd
container_name: piped-frontend
piped-proxy:
image: 1337kavin/piped-proxy:latest
restart: unless-stopped
environment:
- UDS=1
volumes:
- piped-proxy:/app/socket
container_name: piped-proxy
piped:
image: 1337kavin/piped:latest
restart: unless-stopped
volumes:
- ./config/config.properties:/app/config.properties:ro
depends_on:
- postgres
container_name: piped-backend
nginx:
image: nginx:mainline-alpine
restart: unless-stopped
ports:
- "8080:80"
volumes:
- ./config/nginx.conf:/etc/nginx/nginx.conf:ro
- ./config/pipedapi.conf:/etc/nginx/conf.d/pipedapi.conf:ro
- ./config/pipedproxy.conf:/etc/nginx/conf.d/pipedproxy.conf:ro
- ./config/pipedfrontend.conf:/etc/nginx/conf.d/pipedfrontend.conf:ro
- ./config/ytproxy.conf:/etc/nginx/snippets/ytproxy.conf:ro
- piped-proxy:/var/run/ytproxy
container_name: nginx
depends_on:
- piped
- piped-proxy
- pipedfrontend
labels:
- "traefik.enable=true"
- "traefik.http.routers.piped.rule=Host(`FRONTEND_HOSTNAME`, `BACKEND_HOSTNAME`, `PROXY_HOSTNAME`)"
- "traefik.http.routers.piped.entrypoints=websecure"
- "traefik.http.services.piped.loadbalancer.server.port=8080"
postgres:
image: postgres:15
restart: unless-stopped
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=piped
- POSTGRES_USER=piped
- POSTGRES_PASSWORD=changeme
container_name: postgres
watchtower:
image: containrrr/watchtower
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /etc/timezone:/etc/timezone:ro
environment:
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_INCLUDE_RESTARTING=true
container_name: watchtower
command: piped-frontend piped-backend piped-proxy varnish nginx postgres watchtower
volumes:
piped-proxy: null

View file

@ -1,15 +0,0 @@
version: '3'
services:
portainer:
image: portainer/portainer-ce
container_name: portainer
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- proxy
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- /home/username/portainer/data:/data

View file

@ -1,16 +0,0 @@
version: '3'
services:
reverse-proxy:
# The official v3 Traefik docker image
image: traefik:v3.0
# Enables the web UI and tells Traefik to listen to docker
command: --api.insecure=true --providers.docker
ports:
# The HTTP port
- "80:80"
# The Web UI (enabled by --api.insecure=true)
- "8080:8080"
volumes:
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock

View file

View file

@ -1,12 +0,0 @@
services:
audiobookshelf:
image: ghcr.io/advplyr/audiobookshelf:latest
ports:
- 13378:80
volumes:
- ./audiobooks:/audiobooks
- ./podcasts:/podcasts
- ./config:/config
- ./metadata:/metadata
environment:
- TZ=America/New_York

View file

@ -4,7 +4,3 @@
> This is a work in progress. I will be placing configs and yaml files and docker compose files, etc in here once I get a better feel for Portainer and how it works.
> [!WARNING]\
> **I AM NO LONGER USING PORTAINER**
>
> Portainer, while easy to use, is not a good option once you get your feet wet. Learn how to use Docker Compose and the command line. Trust me, it will be beneficial to you in the long run.

View file

@ -1,12 +1,13 @@
# Proxmox Configs, etc
> [!IMPORTANT]\
> [!NOTE]\
> This is a work in progress. I will be placing configs and yaml files and docker compose files, etc in here once I get a better feel for Proxmox and how it works.
> [!TIP]\
> The scripts in this folder is from a wonderful dev and his website listed at the bottom of this README
## Video resources
> For proxying
[How to use Cloudflare Tunnel in your Homelab (even with Traefik)](https://www.youtube.com/watch?v=yMmxw-DZ5Ec)
- [tteck Proxmox scripts - GitHub](https://github.com/tteck/Proxmox/)
- [Proxmox VE Helper Scripts](https://tteck.github.io/Proxmox/)

View file

@ -1,2 +0,0 @@
# ActualBudget lxc

View file

@ -1 +0,0 @@
# Cloudflared lxcs

View file

@ -1,37 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y curl
$STD apt-get install -y sudo
$STD apt-get install -y mc
msg_ok "Installed Dependencies"
msg_info "Installing Cloudflared"
mkdir -p --mode=0755 /usr/share/keyrings
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg >/usr/share/keyrings/cloudflare-main.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $VERSION main" >/etc/apt/sources.list.d/cloudflared.list
$STD apt-get update
$STD apt-get install -y cloudflared
msg_ok "Installed Cloudflared"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get autoremove
$STD apt-get autoclean
msg_ok "Cleaned"

View file

@ -1 +0,0 @@
# Flaresolverr lxc

View file

@ -1 +0,0 @@
# Forgejo lxc

View file

@ -1,14 +0,0 @@
# Grafana Script
> [!WARNING]\
> Always make sure you vet the scripts you install from anywhere on the internet!
You can install the script directly from this link:
- [Proxmox VE Helper Scripts](https://tteck.github.io/Proxmox/)
To see how Grafana works, here are a couple of good resources:
- [Beautiful Dashboards with Grafana and Prometheus - Monitoring Kubernetes Tutorial | Techno Tim](https://technotim.live/posts/kube-grafana-prometheus/)
- [NEXT LEVEL STATISTICS - Home Assistant InfluxDB and Grafana](https://www.youtube.com/watch?v=eJ-XE2tsD4U)

View file

@ -1,43 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y curl
$STD apt-get install -y sudo
$STD apt-get install -y mc
$STD apt-get install -y gnupg
$STD apt-get install -y apt-transport-https
$STD apt-get install -y software-properties-common
msg_ok "Installed Dependencies"
msg_info "Setting up Grafana Repository"
wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
sh -c 'echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" > /etc/apt/sources.list.d/grafana.list'
msg_ok "Set up Grafana Repository"
msg_info "Installing Grafana"
$STD apt-get update
$STD apt-get install -y grafana
systemctl start grafana-server
systemctl enable --now -q grafana-server.service
msg_ok "Installed Grafana"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get autoremove
$STD apt-get autoclean
msg_ok "Cleaned"

View file

@ -1 +0,0 @@
# InfluxDB lxc

View file

@ -1 +0,0 @@
# Pi-hole lxc

View file

@ -1 +0,0 @@
# Prometheus lxc

View file

@ -1 +0,0 @@
# Umami lxc

View file

@ -1 +0,0 @@
# Wastebin lxc

View file

@ -1 +0,0 @@
# Whoogle lxc

View file

@ -1,61 +0,0 @@
# Software
> [!IMPORTANT]\
> This is a work in progress. As I work with more lxc containers in Proxmox and a couple of Turnkey appliances for virtualizing certain VMs for cybersecurity, I'll list them in a table here.
<table>
<thead>
<tr>
<th>Infrastructure</th>
<th>OS</th>
</tr>
</thead>
<tbody>
<tr>
<td width="50%">
<img src="https://img.shields.io/badge/docker-0db7ed?style=for-the-badge&logo=docker&logoColor=white" alt="Docker">
<img src="https://img.shields.io/badge/GitLab-FC6D26?style=for-the-badge&logo=gitlab&logoColor=white">
<img src="https://img.shields.io/badge/Proxmox-E57000?style=for-the-badge&logo=proxmox&logoColor=white">
<img src="https://img.shields.io/badge/k3s-FFC61C?style=for-the-badge&logo=k3s&logoColor=white">
<img src="https://img.shields.io/badge/Nginx-009639?style=for-the-badge&logo=nginx&logoColor=white">
<img src="https://img.shields.io/badge/Prometheus-E6522C?style=for-the-badge&logo=prometheus&logoColor=white">
</td>
<td valign="top" width="50%">
<img src="https://img.shields.io/badge/mac%20os-000000?style=for-the-badge&logo=apple&logoColor=white">
<img src="https://img.shields.io/badge/Debian-d70a53?style=for-the-badge&logo=debian&logoColor=white">
<img src="https://img.shields.io/badge/Windows_11-0078d4?style=for-the-badge&logo=windows-11&logoColor=white">
<img src="https://img.shields.io/badge/Ubuntu-dd4814?style=for-the-badge&logo=ubuntu&logoColor=white">
</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th>Tools & Runners</th>
<th>Software</th>
<tbody>
<td valign="top" width="50%">
<img src="https://img.shields.io/badge/GitHub_Actions-2088FF?style=for-the-badge&logo=github-actions&logoColor=white" alt="">
<img src="https://img.shields.io/badge/pihole-96060c?style=for-the-badge&logo=pihole&logoColor=white" alt="">
<img src="https://img.shields.io/badge/mqtt-660006?style=for-the-badge&logo=mqtt&logoColor=white" alt="">
<img src="https://img.shields.io/badge/Raspberry%20Pi-A22846?style=for-the-badge&logo=Raspberry%20Pi&logoColor=white" alt="">
<img src="https://img.shields.io/badge/uptimekuma-5cdd8b?style=for-the-badge&logo=uptimekuma&logoColor=white" alt="">
</td>
<td valign="top" width="50%">
<img src="https://img.shields.io/badge/Wiki%20js-1976D2?style=for-the-badge&logo=Wikidotjs&logoColor=white" alt="">
<img src="https://img.shields.io/badge/jellyfin-00a4dc?style=for-the-badge&logo=jellyfin&logoColor=white" alt="">
<img src="https://img.shields.io/badge/InfluxDB-22ADF6?style=for-the-badge&logo=InfluxDB&logoColor=white" alt="">
<img src="https://img.shields.io/badge/esphome-000000?style=for-the-badge&logo=esphome&logoColor=white" alt="">
<img src="https://img.shields.io/badge/Grafana-F2F4F9?style=for-the-badge&logo=grafana&logoColor=orange&labelColor=F2F4F9" alt="">
<img src="https://img.shields.io/badge/Nextcloud-0082C9?style=for-the-badge&logo=Nextcloud&logoColor=white" alt="">
<img src="https://img.shields.io/badge/wireguard-88171a?style=for-the-badge&logo=wireguard&logoColor=white" alt="">
</td>
</tbody>
</tr>
</thead>
</table>

View file

@ -1,9 +0,0 @@
# Ubuntu VMs Inside of Proxmox
These days, I have figured out that if I need privileged access to a container, an LXC is not the best choice. For instance, if I want to add storage to a container, it is almost impossible to do so with an LXC without making the container a privleged container which comes with security implications that I don't want to manage.
So now I run mission-critical services in Ubuntu VMs on Proxmox. I do not use the tteck's scripts for this; I download an ISO file and upload it to storage on Proxmox and create the VM from scratch.
## Difficult to manage publically shared services
For services I want to share publicly that are a real pita to setup and run on my home server, I use [PikaPods](https://pikapods.com). Yes, it costs money, but I've been running Audiobookshelf for a month now on an initial $5 top up. It's a pittance for such a wonderful service, and each "Pod" has a different price for usage. They don't keep your data and the funds go directly to the open source developers apps you are using.

View file

@ -1,8 +0,0 @@
# Docker Examples
> [!NOTE]\
> I installed Docker on an Ubuntu Live Server with Portainer installed for easy Docker Compose configuration
>
>

View file

@ -1 +0,0 @@
# You environment variables go here

View file

@ -1,86 +0,0 @@
---
version: "3.4"
services:
postgresql:
image: docker.io/library/postgres:12-alpine
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
start_period: 20s
interval: 30s
retries: 5
timeout: 5s
volumes:
- database:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: ${PG_PASS:?database password required}
POSTGRES_USER: ${PG_USER:-authentik}
POSTGRES_DB: ${PG_DB:-authentik}
env_file:
- .env
redis:
image: docker.io/library/redis:alpine
command: --save 60 1 --loglevel warning
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
start_period: 20s
interval: 30s
retries: 5
timeout: 3s
volumes:
- redis:/data
server:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.2.2}
restart: unless-stopped
command: server
environment:
AUTHENTIK_REDIS__HOST: redis
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
volumes:
- ./media:/media
- ./custom-templates:/templates
env_file:
- .env
ports:
- "${COMPOSE_PORT_HTTP:-9000}:9000"
- "${COMPOSE_PORT_HTTPS:-9443}:9443"
depends_on:
- postgresql
- redis
worker:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.2.2}
restart: unless-stopped
command: worker
environment:
AUTHENTIK_REDIS__HOST: redis
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
# `user: root` and the docker socket volume are optional.
# See more for the docker socket integration here:
# https://goauthentik.io/docs/outposts/integrations/docker
# Removing `user: root` also prevents the worker from fixing the permissions
# on the mounted folders, so when removing this make sure the folders have the correct UID/GID
# (1000:1000 by default)
user: root
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./media:/media
- ./certs:/certs
- ./custom-templates:/templates
env_file:
- .env
depends_on:
- postgresql
- redis
volumes:
database:
driver: local
redis:
driver: local

View file

@ -1,2 +0,0 @@
FROM haproxy:2.3
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg

View file

@ -1,2 +0,0 @@
# HAProxy for Proxy Server and Load Balancer

View file

@ -1 +0,0 @@
# Homepage

View file

@ -1,92 +0,0 @@
---
- Repositories:
- Homelab:
- icon: si-github-#FFFFFF
href: https://github.com/twhite96/homelab-config
description: Homelab config
- Homelab Docs:
- icon: si-github-#FFFFFF
href: https://github.com/twhite96/tifflabs
description: Homelab repo
- Selfhosted Projects:
- tiff labs:
- icon: /icons/tifflabsgit.png
href: https://tifflabs-software.org
description: Labs software hosting
- cyber:
- icon: /icons/htbavatar.png
href: https://projects.0x8c.run
description: '0x8c project hosting'
- Cloud Platforms:
- Linode:
- icon: /icons/linode.png
href: https://cloud.linode.com/linodes
description: Linode
- Hetzner:
- icon: si-hetzner-#D50C2D
href: https://accounts.hetzner.com/login
description: Hetzner
- Hosting Platforms:
- Vercel:
- icon: si-vercel-#000000
href: https://vercel.com/dashboard
description: Vercel
- Cloudron:
- icon: si-cloudron-#03A9F4
href: https://console.cloudron.io/
description: Cloudron
- Documentation:
- Docs site:
- icon: si-materialformkdocs-#ff0000
href: https://docs.tifflabs.org
description: Smart home docs
- labs.network:
- icon: si-bookstack-#B91C1C
href: https://presto-horn.tifflabs.org
description: Network wiki
- Public Projects:
- Homelab Config:
- icon: /icons/tifflabs.svg
href: https://homelab.tiff.tools
description: Homelab Config
- Forgejo Homelab Projects:
- icon: si-forgejo-#FB923C
href: https://tifflabs-software.org/explore
description: Public personal projects
- Cyber Learning:
- Hack The Box:
- icon: si-hackthebox-#9FEF00
href: https://academy.hackthebox.com
description: HTB Academy
- TryHackMe:
- icon: si-tryhackme-#88CC15
href: https://tryhackme.com/
description: TryHackMe
- Productivity:
- Email:
- icon: si-protonmail-#6D4AFF
href: https://mail.proton.me/
description: Email
- Calendar:
- icon: si-protoncalendar-#50B0E9
href: https://calendar.proton.me
description: Calendar
- Public Notes and Writeups:
- Notes:
- icon: si-obsidian-#7C3AED
href: https://notes.0x8c.org
description: Public Notes
- Wiki:
icon: si-gitbook-#BBDDE5
href: https://app.gitbook.com/?source=pwa
description: Write-ups

View file

@ -1,107 +0,0 @@
---
- Infrastructure and Data:
- Proxmox:
href: {{proxmox-url}}
icon: proxmox.svg
description: prx-prod-2
siteMonitor: {{proxmox-url}}
widget:
type: proxmox
url: {{proxmox-url}}
username: {{HOMEPAGE_VAR_PROXMOX_USERNAME}}
password: {{HOMEPAGE_VAR_PROXMOX_PASSWORD}}
- Authentik:
icon: authentik.png
showStats: true
href: {{url}}
widget:
type: authentik
fields: ["users"]
url: {{url}}
key: {{HOMEPAGE_VAR_AUTHENTIK_KEY}}
- Monitoring:
- UptimeKuma:
icon: uptime-kuma.svg
href: https://uptime.tifflabs.org
widget:
description: uptime on pve main
fields: ["up", "down", "uptime", "incident"]
icon: uptime-kuma.svg
type: uptimekuma
url: {{url}}
slug: lab
- Pi-hole:
icon: pi-hole.svg
siteMonitor: {{url}}
widget:
type: pihole
fields: ["queries", "blocked", "blocked_percent", "gravity"]
url: {{url}} # required if running v6 or higher, defaults to 5
key: {{HOMEPAGE_VAR_PIHOLE_TOKEN}}
- Grafana:
icon: grafana.svg
siteMonitor: {{url}}
widget:
type: grafana
fields: ["dashboards", "datasources", "totalalerts", "alertstriggered"]
url: {{url}}
username: tifflabs
password: {{HOMEPAGE_VAR_GRAFANA_PASSWORD}}
- Tailscale:
icon: tailscale.svg
showStats: true
widget:
type: tailscale
fields: ["address", "last_seen", "expires"]
deviceid: {{device-id}}
key: {{key}}
- Media:
- Jellyfin:
icon: jellyfin.svg
description: tailnet jellyfin
widget:
type: jellyfin
url: {{url}}
fields: ["movies", "series", "episodes", "songs"]
key: {{HOMEPAGE_VAR_JELLYFIN_KEY}}
enableBlocks: true # optional, defaults to false
enableNowPlaying: true # optional, defaults to true
enableUser: true # optional, defaults to false
showEpisodeNumber: true # optional, defaults to false
expandOneStreamToTwoRows: false # optional, defaults to true
- Calibre:
icon: calibre.svg
siteMonitor: https://books.tiffs.app
href: 'https://books.tiffs.app'
widget:
type: calibreweb
url: https://books.tiffs.app
fields: ["books", "authors", "categories", "series"]
username: {{username}}
password: {{password}}
- FreshRSS:
icon: freshrss.svg
description: RSS Feed
href: https://rss.tifflabs.dev
showStats: true
widget:
type: freshrss
url: https://rss.tifflabs.dev
fields: ["subscriptions", "unread"]
username: {{username}}
password: {{password}}
- Audiobookshelf:
icon: audiobookshelf.svg
siteMonitor: https://audiobooks.tiffs.app
href: https://audiobooks.tiffs.app
description: Audiobook Library
showStats: true
widget:
type: audiobookshelf
fields: ["podcasts", "podcastsDuration", "books", "booksDuration"]
url: https://audiobooks.tiffs.app
key: {{HOMEPAGE_VAR_AUDIOBOOKSHELF_KEY}}

View file

@ -1,74 +0,0 @@
---
title: Dash
headerStyle: clean
background:
blur: xl
brightness: 90
opacity: 60
cardBlur: sm
useEqualHeights: true
providers:
quicklaunch:
searchDescriptions: true
hideInternetSearch: true
showSearchSuggestions: true
hideVisitURL: true
layout:
- Services:
Infrastructure and Data:
icon: proxmox.svg
style: row
columns: 2
Monitoring:
icon: grafana.svg
style: row
columns: 4
Media:
icon: jellyfin.svg
style: row
columns: 4
- Bookmarks:
Repositories:
icon: github.svg
style: row
columns: 2
Selfhosted Projects:
icon: codeberg.svg
style: row
columns: 2
Cloud Platforms:
icon: hetzner.svg
style: row
columns: 2
Hosting Platforms:
icon: cloudron.svg
style: row
columns: 2
Documentation:
icon: bookstack.svg
style: row
columns: 2
Public Projects:
icon: forgejo.svg
style: row
columns: 2
Cyber Learning:
icon: hackthebox.svg
style: row
columns: 2
Productivity:
icon: protonmail.svg
style: row
columns: 2
Public Notes and Writeups:
icon: obsidian.svg
style: row
columns: 2

View file

@ -1,26 +0,0 @@
---
- resources:
cpu: true
memory: true
disk: /
- search:
provider: custom
url: # whoogle # google, duckduckgo, bing, baidu, brave or custom
focus: true
target: _blank # One of _self, _blank, _parent or _top
- openweathermap:
latitude: {{long}}
longitude: {{lat}}
units: imperial # or imperial
provider: openweathermap
cache: 5 # Time in minutes to cache API responses, to stay within limits
format: # optional, Intl.NumberFormat options
maximumFractionDigits: 0
- datetime:
text_size: m
format:
timeStyle: short
hourCycle: h12

View file

@ -1,14 +0,0 @@
---
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage-prod-1
ports:
- 3000:3000
env_file:
- ".env.example"
volumes:
- ./config:/app/config # Make sure your local config directory exists
- ./images:/app/public/images
- ./icons:/app/public/icons
restart: unless-stopped

View file

@ -1,76 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y curl
$STD apt-get install -y sudo
$STD apt-get install -y mc
$STD apt-get install -y make
$STD apt-get install -y g++
$STD apt-get install -y gcc
$STD apt-get install -y ca-certificates
$STD apt-get install -y gnupg
msg_ok "Installed Dependencies"
msg_info "Setting up Node.js Repository"
mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
msg_ok "Set up Node.js Repository"
msg_info "Installing Node.js"
$STD apt-get update
$STD apt-get install -y nodejs
$STD npm install -g pnpm
msg_ok "Installed Node.js"
RELEASE=$(curl -s https://api.github.com/repos/gethomepage/homepage/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
msg_info "Installing Homepage v${RELEASE} (Patience)"
wget -q https://github.com/gethomepage/homepage/archive/refs/tags/v${RELEASE}.tar.gz
$STD tar -xzf v${RELEASE}.tar.gz
mkdir -p /opt/homepage/config
mv homepage-${RELEASE}/* /opt/homepage
rm -rf homepage-${RELEASE}
cd /opt/homepage
cp /opt/homepage/src/skeleton/* /opt/homepage/config
$STD pnpm install
$STD pnpm build
msg_ok "Installed Homepage v${RELEASE}"
msg_info "Creating Service"
service_path="/etc/systemd/system/homepage.service"
echo "[Unit]
Description=Homepage
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
WorkingDirectory=/opt/homepage/
ExecStart=pnpm start
[Install]
WantedBy=multi-user.target" >$service_path
$STD systemctl enable --now homepage
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get autoremove
$STD apt-get autoclean
msg_ok "Cleaned"

View file

@ -1,166 +0,0 @@
# Example Docker Compose config file for PhotoPrism (Linux / AMD64)
#
# Note:
# - Running PhotoPrism on a server with less than 4 GB of swap space or setting a memory/swap limit can cause unexpected
# restarts ("crashes"), for example, when the indexer temporarily needs more memory to process large files.
# - If you install PhotoPrism on a public server outside your home network, please always run it behind a secure
# HTTPS reverse proxy such as Traefik or Caddy. Your files and passwords will otherwise be transmitted
# in clear text and can be intercepted by anyone, including your provider, hackers, and governments:
# https://docs.photoprism.app/getting-started/proxies/traefik/
#
# Setup Guides:
# - https://docs.photoprism.app/getting-started/docker-compose/
# - https://docs.photoprism.app/getting-started/raspberry-pi/
# - https://www.photoprism.app/kb/activation
#
# Troubleshooting Checklists:
# - https://docs.photoprism.app/getting-started/troubleshooting/
# - https://docs.photoprism.app/getting-started/troubleshooting/docker/
# - https://docs.photoprism.app/getting-started/troubleshooting/mariadb/
#
# CLI Commands:
# - https://docs.photoprism.app/getting-started/docker-compose/#command-line-interface
#
# All commands may have to be prefixed with "sudo" when not running as root.
# This will point the home directory shortcut ~ to /root in volume mounts.
services:
# traefik:
# image: traefik:v2.11
# restart: unless-stopped
# ports:
# - "80:80"
# - "443:443"
# volumes:
# - "./traefik.yaml:/etc/traefik/traefik.yaml"
# - "./traefik/data:/data"
# - "/var/run/docker.sock:/var/run/docker.sock"
photoprism:
## Use photoprism/photoprism:preview for testing preview builds:
image: photoprism/photoprism:latest
## Don't enable automatic restarts until PhotoPrism has been properly configured and tested!
## If the service gets stuck in a restart loop, this points to a memory, filesystem, network, or database issue:
## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors
# restart: unless-stopped
stop_grace_period: 10s
depends_on:
- mariadb
security_opt:
- seccomp:unconfined
- apparmor:unconfined
## Server port mapping in the format "Host:Container". To use a different port, change the host port on
## the left-hand side and keep the container port, e.g. "80:2342" (for HTTP) or "443:2342 (for HTTPS):
ports:
- "2342:2342"
# labels:
# - "traefik.http.routers.photoprism.rule=Host(`photos.tiff.ws`)"
# - "traefik.http.routers.photoprism.tls=true"
# - "traefik.http.routers.photoprism.tls.certresolver=myresolver"
## Before you start the service, please check the following config options (and change them as needed):
## https://docs.photoprism.app/getting-started/config-options/
environment:
PHOTOPRISM_ADMIN_USER: "admin" # admin login username
PHOTOPRISM_ADMIN_PASSWORD: # initial admin password (8-72 characters)
PHOTOPRISM_AUTH_MODE: "password" # authentication mode (public, password)
PHOTOPRISM_SITE_URL: # server URL in the format "http(s)://domain.name(:port)/(path)"
PHOTOPRISM_DISABLE_TLS: "false" # disables HTTPS/TLS even if the site URL starts with https:// and a certificate is available
PHOTOPRISM_DEFAULT_TLS: "true" # defaults to a self-signed HTTPS/TLS certificate if no other certificate is available
PHOTOPRISM_ORIGINALS_LIMIT: 5000 # file size limit for originals in MB (increase for high-res video)
PHOTOPRISM_HTTP_COMPRESSION: "gzip" # improves transfer speed and bandwidth utilization (none or gzip)
PHOTOPRISM_LOG_LEVEL: "info" # log level: trace, debug, info, warning, error, fatal, or panic
PHOTOPRISM_READONLY: "false" # do not modify originals directory (reduced functionality)
PHOTOPRISM_EXPERIMENTAL: "false" # enables experimental features
PHOTOPRISM_DISABLE_CHOWN: "false" # disables updating storage permissions via chmod and chown on startup
PHOTOPRISM_DISABLE_WEBDAV: "false" # disables built-in WebDAV server
PHOTOPRISM_DISABLE_SETTINGS: "false" # disables settings UI and API
PHOTOPRISM_DISABLE_TENSORFLOW: "false" # disables all features depending on TensorFlow
PHOTOPRISM_DISABLE_FACES: "false" # disables face detection and recognition (requires TensorFlow)
PHOTOPRISM_DISABLE_CLASSIFICATION: "false" # disables image classification (requires TensorFlow)
PHOTOPRISM_DISABLE_VECTORS: "false" # disables vector graphics support
PHOTOPRISM_DISABLE_RAW: "false" # disables indexing and conversion of RAW images
PHOTOPRISM_RAW_PRESETS: "false" # enables applying user presets when converting RAW images (reduces performance)
PHOTOPRISM_SIDECAR_YAML: "true" # creates YAML sidecar files to back up picture metadata
PHOTOPRISM_BACKUP_ALBUMS: "true" # creates YAML files to back up album metadata
PHOTOPRISM_BACKUP_DATABASE: "true" # creates regular backups based on the configured schedule
PHOTOPRISM_BACKUP_SCHEDULE: "daily" # backup SCHEDULE in cron format (e.g. "0 12 * * *" for daily at noon) or at a random time (daily, weekly)
PHOTOPRISM_INDEX_SCHEDULE: "" # indexing SCHEDULE in cron format (e.g. "@every 3h" for every 3 hours; "" to disable)
PHOTOPRISM_AUTO_INDEX: 300 # delay before automatically indexing files in SECONDS when uploading via WebDAV (-1 to disable)
PHOTOPRISM_AUTO_IMPORT: -1 # delay before automatically importing files in SECONDS when uploading via WebDAV (-1 to disable)
PHOTOPRISM_DETECT_NSFW: "false" # automatically flags photos as private that MAY be offensive (requires TensorFlow)
PHOTOPRISM_UPLOAD_NSFW: "true" # allows uploads that MAY be offensive (no effect without TensorFlow)
# PHOTOPRISM_DATABASE_DRIVER: "sqlite" # SQLite is an embedded database that does not require a separate database server
PHOTOPRISM_DATABASE_DRIVER: "mysql" # MariaDB 10.5.12+ (MySQL successor) offers significantly better performance compared to SQLite
PHOTOPRISM_DATABASE_SERVER: "mariadb:3306" # MariaDB database server (hostname:port)
PHOTOPRISM_DATABASE_NAME: "photoprism" # MariaDB database schema name
PHOTOPRISM_DATABASE_USER: "photoprism" # MariaDB database user name
PHOTOPRISM_DATABASE_PASSWORD: # MariaDB database user password
PHOTOPRISM_SITE_CAPTION: #your caption goes here
PHOTOPRISM_SITE_DESCRIPTION: # meta site description
PHOTOPRISM_SITE_AUTHOR: # meta site author
## Video Transcoding (https://docs.photoprism.app/getting-started/advanced/transcoding/):
# PHOTOPRISM_FFMPEG_ENCODER: "software" # H.264/AVC encoder (software, intel, nvidia, apple, raspberry, or vaapi)
# PHOTOPRISM_FFMPEG_SIZE: "1920" # video size limit in pixels (720-7680) (default: 3840)
# PHOTOPRISM_FFMPEG_BITRATE: "32" # video bitrate limit in Mbit/s (default: 50)
## Run/install on first startup (options: update https gpu ffmpeg tensorflow davfs clitools clean):
# PHOTOPRISM_INIT: "https gpu tensorflow"
## Run as a non-root user after initialization (supported: 0, 33, 50-99, 500-600, and 900-1200):
# PHOTOPRISM_UID: 1000
# PHOTOPRISM_GID: 1000
# PHOTOPRISM_UMASK: 0000
## Start as non-root user before initialization (supported: 0, 33, 50-99, 500-600, and 900-1200):
# user: "1000:1000"
## Share hardware devices with FFmpeg and TensorFlow (optional):
# devices:
# - "/dev/dri:/dev/dri" # Intel QSV
# - "/dev/nvidia0:/dev/nvidia0" # Nvidia CUDA
# - "/dev/nvidiactl:/dev/nvidiactl"
# - "/dev/nvidia-modeset:/dev/nvidia-modeset"
# - "/dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl"
# - "/dev/nvidia-uvm:/dev/nvidia-uvm"
# - "/dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools"
# - "/dev/video11:/dev/video11" # Video4Linux Video Encode Device (h264_v4l2m2m)
working_dir: "/photoprism" # do not change or remove
## Storage Folders: "~" is a shortcut for your home directory, "." for the current directory
volumes:
# "/host/folder:/photoprism/folder" # Example
- "./photos:/photoprism/originals" # Original media files (DO NOT REMOVE)
# - "/example/family:/photoprism/originals/family" # *Additional* media folders can be mounted like this
- "./storage.usb:/photoprism/import" # *Optional* base folder from which files can be imported to originals
- "./storage:/photoprism/storage" # *Writable* storage folder for cache, database, and sidecar files (DO NOT REMOVE)
## MariaDB Database Server (recommended)
## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql
mariadb:
image: mariadb:11
## If MariaDB gets stuck in a restart loop, this points to a memory or filesystem issue:
## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors
restart: unless-stopped
stop_grace_period: 5s
security_opt: # see https://github.com/MariaDB/mariadb-docker/issues/434#issuecomment-1136151239
- seccomp:unconfined
- apparmor:unconfined
command: --innodb-buffer-pool-size=512M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
## Never store database files on an unreliable device such as a USB flash drive, an SD card, or a shared network folder:
volumes:
- "./database:/var/lib/mysql" # DO NOT REMOVE
environment:
MARIADB_AUTO_UPGRADE: "1"
MARIADB_INITDB_SKIP_TZINFO: "1"
MARIADB_DATABASE: "photoprism"
MARIADB_USER: "photoprism"
MARIADB_PASSWORD: "x!rPM.jTjcKLPuhLHdGs78A9W"
MARIADB_ROOT_PASSWORD: "WkDdnDehFdALm*N@EUqE6e7MC"
## Watchtower upgrades services automatically (optional)
## see https://docs.photoprism.app/getting-started/updates/#watchtower
## activate via "COMPOSE_PROFILES=update docker compose up -d"
watchtower:
restart: unless-stopped
image: containrrr/watchtower
profiles: ["update"]
environment:
WATCHTOWER_CLEANUP: "true"
WATCHTOWER_POLL_INTERVAL: 7200 # checks for updates every two hours
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "~/.docker/config.json:/config.json" # optional, for authentication if you have a Docker Hub account

View file

@ -1,10 +0,0 @@
# qBittorent Web Ui Install
> [!NOTE]\
> This gist is taken from an article on Linux Babe which is linked in the Gist. If curious now, you can find the article here: [Linux Babe How to Install qBIttorent Web UI on Ubuntu 18.04 Desktip or Server](https://www.linuxbabe.com/ubuntu/install-qbittorrent-ubuntu-18-04-desktop-server)
>
>
<a href="https://gist.github.com/twhite96/631d3544ce01c47a6de787f6c47af60b"> <img src="https://github-readme-stats-git-master-twhite96.vercel.app/api/gist?id=631d3544ce01c47a6de787f6c47af60b"></a>

View file

@ -1,54 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y curl
$STD apt-get install -y sudo
$STD apt-get install -y mc
msg_ok "Installed Dependencies"
msg_info "Installing qbittorrent-nox"
$STD apt-get install -y qbittorrent-nox
mkdir -p /.config/qBittorrent/
cat <<EOF >/.config/qBittorrent/qBittorrent.conf
[Preferences]
WebUI\Password_PBKDF2="@ByteArray(amjeuVrF3xRbgzqWQmes5A==:XK3/Ra9jUmqUc4RwzCtrhrkQIcYczBl90DJw2rT8DFVTss4nxpoRhvyxhCf87ahVE3SzD8K9lyPdpyUCfmVsUg==)"
WebUI\Port=8090
WebUI\UseUPnP=false
WebUI\Username=admin
EOF
msg_ok "qbittorrent-nox"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/qbittorrent-nox.service
[Unit]
Description=qBittorrent client
After=network.target
[Service]
ExecStart=/usr/bin/qbittorrent-nox --webui-port=8090
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now qbittorrent-nox
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get autoremove
$STD apt-get autoclean
msg_ok "Cleaned"

View file

@ -1,3 +0,0 @@
# *arr Apps
The apps you use when you want to keep track of the ISO files you get.

View file

@ -1,28 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y curl
$STD apt-get install -y sudo
$STD apt-get install -y mc
msg_ok "Installed Dependencies"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get autoremove
$STD apt-get autoclean
msg_ok "Cleaned"

View file

View file

View file