diff --git a/archetypes/default.md b/archetypes/default.md index 25b6752..6c459c2 100644 --- a/archetypes/default.md +++ b/archetypes/default.md @@ -1,5 +1,11 @@ +++ -date = '{{ .Date }}' -draft = true title = '{{ replace .File.ContentBaseName "-" " " | title }}' +date = "{{ .Date }}" +draft = false +summary = "" +tags = [] + +[hero] +src = "" +caption = "" +++ diff --git a/archetypes/photos.md b/archetypes/photos.md new file mode 100644 index 0000000..cbcdc5e --- /dev/null +++ b/archetypes/photos.md @@ -0,0 +1,10 @@ ++++ +title = '{{ replace .File.ContentBaseName "-" " " | title }}' +date = "{{ .Date }}" +draft = false +tags = [] + +[hero] +src = "" +exif = true ++++ diff --git a/content/photos/_index.md b/content/photos/_index.md new file mode 100644 index 0000000..0be1cfd --- /dev/null +++ b/content/photos/_index.md @@ -0,0 +1,5 @@ ++++ +title = "Posts" +details = false +type = "gallery" ++++ diff --git a/content/photos/bridge/hero.jpg b/content/photos/bridge/hero.jpg new file mode 100644 index 0000000..e1a1114 --- /dev/null +++ b/content/photos/bridge/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e4487cfed6a4ce0956ea7d2c26ef2a4e76bc6bd8a01e8044f99876e501951f6 +size 1954347 diff --git a/content/photos/bridge/index.md b/content/photos/bridge/index.md new file mode 100644 index 0000000..656fc20 --- /dev/null +++ b/content/photos/bridge/index.md @@ -0,0 +1,10 @@ ++++ +title = "Bridge" +date = 2025-04-11T17:45:00Z +draft = false +tags = ["Street", "Sunset", "Silhouettes"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/buile-hill-fireworks/0.jpg b/content/photos/buile-hill-fireworks/0.jpg new file mode 100644 index 0000000..0fa5734 --- /dev/null +++ b/content/photos/buile-hill-fireworks/0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:551b030b29ab1332bd76d85eba9c83d74cab6c4c86c563d854ca0839972eddf8 +size 30055798 diff --git a/content/photos/buile-hill-fireworks/1.jpg b/content/photos/buile-hill-fireworks/1.jpg new file mode 100644 index 0000000..4109e73 --- /dev/null +++ b/content/photos/buile-hill-fireworks/1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c89773209fdfbd86940a486ebfdcb68f731038ce0f0f8c4d14c21cf35d164dd +size 27677747 diff --git a/content/photos/buile-hill-fireworks/2.jpg b/content/photos/buile-hill-fireworks/2.jpg new file mode 100644 index 0000000..753b481 --- /dev/null +++ b/content/photos/buile-hill-fireworks/2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb3679350e5765bb37e34ba0ffd6cdbdde6c04c15d6b79c45fd66c51d271a567 +size 6964491 diff --git a/content/photos/buile-hill-fireworks/hero.jpg b/content/photos/buile-hill-fireworks/hero.jpg new file mode 100644 index 0000000..b1446a5 --- /dev/null +++ b/content/photos/buile-hill-fireworks/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60a4dad580d5108040d8fdd0fb4d882c92d34169edced3d6421895f548fd1f03 +size 25834447 diff --git a/content/photos/buile-hill-fireworks/index.md b/content/photos/buile-hill-fireworks/index.md new file mode 100644 index 0000000..38f5a00 --- /dev/null +++ b/content/photos/buile-hill-fireworks/index.md @@ -0,0 +1,16 @@ ++++ +title = "Buile Hill Fireworks" +date = 2024-11-02T18:38:00Z +draft = false +tags = ["Fireworks", "Night", "Collection"] + +[hero] +src = "hero.jpg" +exif = true ++++ + +{{< exif-image 0.jpg >}} + +{{< exif-image 1.jpg >}} + +{{< exif-image 2.jpg >}} diff --git a/content/photos/empire-exchange/hero.jpg b/content/photos/empire-exchange/hero.jpg new file mode 100644 index 0000000..999563b --- /dev/null +++ b/content/photos/empire-exchange/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e68ccf66ccf3bef04a75e7e076667c9247831e4b0bd8e7dc6cbcd36c7e4a53ec +size 14360092 diff --git a/content/photos/empire-exchange/index.md b/content/photos/empire-exchange/index.md new file mode 100644 index 0000000..d41c1e3 --- /dev/null +++ b/content/photos/empire-exchange/index.md @@ -0,0 +1,10 @@ ++++ +title = "Empire Exchange" +date = 2024-10-13T12:18:00Z +draft = false +tags = ["Street", "Storefront"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/focus-on-sight/hero.jpg b/content/photos/focus-on-sight/hero.jpg new file mode 100644 index 0000000..2ac3484 --- /dev/null +++ b/content/photos/focus-on-sight/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c59aa47d7b737018a1807b4ecf99d35a037d13605f56fdb5dc9086d3bfbdca8 +size 14105700 diff --git a/content/photos/focus-on-sight/index.md b/content/photos/focus-on-sight/index.md new file mode 100644 index 0000000..f1c34d6 --- /dev/null +++ b/content/photos/focus-on-sight/index.md @@ -0,0 +1,10 @@ ++++ +title = "Focus on Sight" +date = 2024-10-17T12:19:00Z +draft = false +tags = ["Murals"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/fogbound/hero.jpg b/content/photos/fogbound/hero.jpg new file mode 100644 index 0000000..1e54ba8 --- /dev/null +++ b/content/photos/fogbound/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae018cba66ba98c59d796bcbf65648b9a40051357891741b46deae518fcb3f4d +size 10306188 diff --git a/content/photos/fogbound/index.md b/content/photos/fogbound/index.md new file mode 100644 index 0000000..103769d --- /dev/null +++ b/content/photos/fogbound/index.md @@ -0,0 +1,10 @@ ++++ +title = "Fogbound" +date = 2024-10-30T11:32:00Z +draft = false +tags = ["Architecture", "Fog"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/futuristic-space-funk/hero.jpg b/content/photos/futuristic-space-funk/hero.jpg new file mode 100644 index 0000000..4f4e901 --- /dev/null +++ b/content/photos/futuristic-space-funk/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79ed0767d848e2f7bc58df910f89f49851940c7330c8190b18db5e1b5606f5a2 +size 16762223 diff --git a/content/photos/futuristic-space-funk/index.md b/content/photos/futuristic-space-funk/index.md new file mode 100644 index 0000000..482d7b5 --- /dev/null +++ b/content/photos/futuristic-space-funk/index.md @@ -0,0 +1,10 @@ ++++ +title = "Futuristic Space Funk" +date = 2024-10-22T11:33:00Z +draft = false +tags = ["Murals"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/rush-hour/hero.jpg b/content/photos/rush-hour/hero.jpg new file mode 100644 index 0000000..4821c20 --- /dev/null +++ b/content/photos/rush-hour/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9edb8bf5f64619049fb2a331b4f45744ef9b297a6a48128b43ec9ccc3ecf3e4 +size 8339810 diff --git a/content/photos/rush-hour/index.md b/content/photos/rush-hour/index.md new file mode 100644 index 0000000..ae5e595 --- /dev/null +++ b/content/photos/rush-hour/index.md @@ -0,0 +1,10 @@ ++++ +title = "Rush Hour" +date = 2025-04-09T19:00:00Z +draft = false +tags = ["Street", "Sunset", "Silhouettes"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/sticker-city/hero.jpg b/content/photos/sticker-city/hero.jpg new file mode 100644 index 0000000..719ac32 --- /dev/null +++ b/content/photos/sticker-city/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3815d8b5675ae645c9c9321168fb9065ed496bdb53dcd7860aee6e553faee68a +size 16742542 diff --git a/content/photos/sticker-city/index.md b/content/photos/sticker-city/index.md new file mode 100644 index 0000000..3485b5c --- /dev/null +++ b/content/photos/sticker-city/index.md @@ -0,0 +1,10 @@ ++++ +title = "Sticker City" +date = 2024-10-22T11:37:00Z +draft = false +tags = ["Graffiti", "Street"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/suspended/hero.jpg b/content/photos/suspended/hero.jpg new file mode 100644 index 0000000..4a166ca --- /dev/null +++ b/content/photos/suspended/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f904eaf791b8988fe3302381d0f5bf10e198dbab14804b43333a081a75442ec0 +size 7004164 diff --git a/content/photos/suspended/index.md b/content/photos/suspended/index.md new file mode 100644 index 0000000..b5c7e73 --- /dev/null +++ b/content/photos/suspended/index.md @@ -0,0 +1,10 @@ ++++ +title = "Suspended" +date = 2024-10-13T12:55:00Z +draft = false +tags = ["Street", "Architecture"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/the-campus/hero.jpg b/content/photos/the-campus/hero.jpg new file mode 100644 index 0000000..ffb8ffe --- /dev/null +++ b/content/photos/the-campus/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dda13d4b1d25925409eccb6d7f7202f597879a33fd91dd45a0c341941757c87c +size 12195749 diff --git a/content/photos/the-campus/index.md b/content/photos/the-campus/index.md new file mode 100644 index 0000000..ca298e2 --- /dev/null +++ b/content/photos/the-campus/index.md @@ -0,0 +1,10 @@ ++++ +title = "The Campus" +date = 2024-10-17T12:53:00Z +draft = false +tags = ["Architecture", "Street"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/the-cook/hero.jpg b/content/photos/the-cook/hero.jpg new file mode 100644 index 0000000..0aa6c8f --- /dev/null +++ b/content/photos/the-cook/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46ac75bb1f78778b078bfe1b6ac68d94c94613354c8c596d0ca9fd96ccf9c775 +size 22689545 diff --git a/content/photos/the-cook/index.md b/content/photos/the-cook/index.md new file mode 100644 index 0000000..441b30e --- /dev/null +++ b/content/photos/the-cook/index.md @@ -0,0 +1,10 @@ ++++ +title = "The Cook" +date = 2024-12-19T19:14:00Z +draft = false +tags = ["Candid", "Street", "Night"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/the-engineering-building/hero.jpg b/content/photos/the-engineering-building/hero.jpg new file mode 100644 index 0000000..b5b3bb7 --- /dev/null +++ b/content/photos/the-engineering-building/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:195b3d556e2b0003c421b08c0c7fbdc95286c0a38f9f15bf5e9ffe30a0a96d93 +size 9126801 diff --git a/content/photos/the-engineering-building/index.md b/content/photos/the-engineering-building/index.md new file mode 100644 index 0000000..56f066a --- /dev/null +++ b/content/photos/the-engineering-building/index.md @@ -0,0 +1,10 @@ ++++ +title = "The Engineering Building" +date = 2024-10-17T12:36:00Z +draft = false +tags = ["Architecture"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/the-protest/hero.jpg b/content/photos/the-protest/hero.jpg new file mode 100644 index 0000000..a9d6679 --- /dev/null +++ b/content/photos/the-protest/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a155ce51d83fc3a6e53c77718a357fcc89ef8b93dbf202ad5ef1d4914a51bfa +size 8100352 diff --git a/content/photos/the-protest/index.md b/content/photos/the-protest/index.md new file mode 100644 index 0000000..acc2718 --- /dev/null +++ b/content/photos/the-protest/index.md @@ -0,0 +1,10 @@ ++++ +title = "The Protest" +date = 2024-11-16T15:28:00Z +draft = true +tags = ["Protest", "Street"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/the-stairwell/hero.jpg b/content/photos/the-stairwell/hero.jpg new file mode 100644 index 0000000..928caff --- /dev/null +++ b/content/photos/the-stairwell/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b14f187cf19062728127f5b3d0437bdb85cb2aa0c6667f731acdf5432bb02fec +size 3441319 diff --git a/content/photos/the-stairwell/index.md b/content/photos/the-stairwell/index.md new file mode 100644 index 0000000..e68d0bb --- /dev/null +++ b/content/photos/the-stairwell/index.md @@ -0,0 +1,10 @@ ++++ +title = "The Stairwell" +date = 2024-12-19T19:04:00Z +draft = false +tags = ["Abstract", "Night", "Silhouettes"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/the-watcher/hero.jpg b/content/photos/the-watcher/hero.jpg new file mode 100644 index 0000000..b1f8220 --- /dev/null +++ b/content/photos/the-watcher/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:132576ebd862c0dcec478dcc10c596da160a05d9408c0afc47fc1b1e51a7fa1a +size 6645339 diff --git a/content/photos/the-watcher/index.md b/content/photos/the-watcher/index.md new file mode 100644 index 0000000..378354f --- /dev/null +++ b/content/photos/the-watcher/index.md @@ -0,0 +1,10 @@ ++++ +title = "The Watcher" +date = 2024-11-26T19:00:00Z +draft = false +tags = ["Candid", "Street", "Night"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/the-window/hero.jpg b/content/photos/the-window/hero.jpg new file mode 100644 index 0000000..63d7731 --- /dev/null +++ b/content/photos/the-window/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8211483821508dcd4dbb3cb7a4001b5317a4c3cf2ebce6e254dd515172c0f1fe +size 6251926 diff --git a/content/photos/the-window/index.md b/content/photos/the-window/index.md new file mode 100644 index 0000000..f01ff43 --- /dev/null +++ b/content/photos/the-window/index.md @@ -0,0 +1,10 @@ ++++ +title = "The Window" +date = 2024-11-26T18:30:00Z +draft = false +tags = ["Night", "Abstract", "Silhouettes"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/two-photographers-walk-into-a-frame/hero.jpg b/content/photos/two-photographers-walk-into-a-frame/hero.jpg new file mode 100644 index 0000000..7d5c46a --- /dev/null +++ b/content/photos/two-photographers-walk-into-a-frame/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c4db4033afe2480f9461b12000b16c98299db3278d308b37050b66e98d4d8c0 +size 25503719 diff --git a/content/photos/two-photographers-walk-into-a-frame/index.md b/content/photos/two-photographers-walk-into-a-frame/index.md new file mode 100644 index 0000000..72ca247 --- /dev/null +++ b/content/photos/two-photographers-walk-into-a-frame/index.md @@ -0,0 +1,10 @@ ++++ +title = "Two Photographers Walk into a Frame" +date = 2025-01-07T18:36:00Z +draft = false +tags = ["Selfie", "Night", "Reflections"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/whitworth/hero.jpg b/content/photos/whitworth/hero.jpg new file mode 100644 index 0000000..37e2d2a --- /dev/null +++ b/content/photos/whitworth/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e28cce5abc2dece373336a19dd3be56b799a24e0955d03b94883ef9a52b2465f +size 11782278 diff --git a/content/photos/whitworth/index.md b/content/photos/whitworth/index.md new file mode 100644 index 0000000..9449084 --- /dev/null +++ b/content/photos/whitworth/index.md @@ -0,0 +1,10 @@ ++++ +title = "Whitworth" +date = 2024-10-17T13:14:00Z +draft = false +tags = ["Street", "Architecture"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/photos/window-selfie/hero.jpg b/content/photos/window-selfie/hero.jpg new file mode 100644 index 0000000..3b83f84 --- /dev/null +++ b/content/photos/window-selfie/hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c45f3cab52eb29d1f8f3d54eaacc2f2825e1ef50e8d7072d0901caba1e848059 +size 11772037 diff --git a/content/photos/window-selfie/index.md b/content/photos/window-selfie/index.md new file mode 100644 index 0000000..25aa34b --- /dev/null +++ b/content/photos/window-selfie/index.md @@ -0,0 +1,10 @@ ++++ +title = "Window Selfie" +date = 2024-10-22T11:41:00Z +draft = false +tags = ["Selfie", "Reflections"] + +[hero] +src = "hero.jpg" +exif = true ++++ diff --git a/content/posts/ultimate-home-server-part-1/index.md b/content/posts/ultimate-home-server-part-1/index.md index 5b59f63..3c01594 100644 --- a/content/posts/ultimate-home-server-part-1/index.md +++ b/content/posts/ultimate-home-server-part-1/index.md @@ -105,7 +105,7 @@ For my system I have 3 drives in total formatted as `ext4`, excluding the boot d - WD Red 4TB 5400 RPM HDD - `/mnt/disk2` - Part of storage pool - WD RED 4TB 5400 RPM HDD - `/mnt/parity1` - SnapRAID parity, you must use your largest drive for this -The three main storage drives are then *pooled* into a new directory called `/mnt/storage` where all my files can be accessed from. `/mnt/storage` contains the following subdirectories: +The three main storage drives are then _pooled_ into a new directory called `/mnt/storage` where all my files can be accessed from. `/mnt/storage` contains the following subdirectories: - `/public`: Public folder accessible by all users - `/public/media`: Media storage @@ -175,7 +175,6 @@ Keep in mind that using SnapRAID has a couple of caveats: ### Installation - ```bash $ yay -S snapraid ``` @@ -293,6 +292,6 @@ Just by installing and configuring these two tools, we have managed to satisfy t - Give your server a recognizable [hostname](https://wiki.archlinux.org/title/Network_configuration#Set_the_hostname) (in my case that's jupiter) - Set up an SMTP client like [msmtp](https://wiki.archlinux.org/title/msmtp) so that your server can send you e-mail alerts - Set up [S.M.A.R.T.](https://wiki.archlinux.org/title/S.M.A.R.T.) monitoring for your drives so that you get an early warning if one of your drives is about to fail. -- Remember the rule known as *Schrödinger's Backup*: The condition of any backup is unknown until a restore is attempted. Therefore I recommend setting up another [backup solution](https://wiki.archlinux.org/title/System_backup) other than SnapRAID, just in case. +- Remember the rule known as _Schrödinger's Backup_: The condition of any backup is unknown until a restore is attempted. Therefore I recommend setting up another [backup solution](https://wiki.archlinux.org/title/System_backup) other than SnapRAID, just in case. In the next part, we are going to be setting up Docker and Portainer for container management, Watchtower for automatic container updates, and OpenVPN for remote server management. diff --git a/content/posts/ultimate-home-server-part-2/index.md b/content/posts/ultimate-home-server-part-2/index.md index 6a5d732..35afdf0 100644 --- a/content/posts/ultimate-home-server-part-2/index.md +++ b/content/posts/ultimate-home-server-part-2/index.md @@ -73,14 +73,14 @@ $ docker run -d --name=portainer \ Here's a brief walkthrough of what each option does: - - `-d`: Run container in the background (detached) - - `--name=portainer`: The name of the container - - `-e PGID=1000 and -e PUID=1000`: Set environmental variables PGID and PUID to 1000 (your user id, run id to check it) - - `-p 8000:8000`: Expose port 8000 on the host and bind it to port 8000 in the container - - `-p 9000:9000`: Same as above - - `--restart=unless-stopped`: Automatically restart the container if it crashes or when the server boots - - `-v a:b`: Bind directory a on the host to directory b in the container - - `-v /var/run/docker.sock:/var/run/docker.sock`: Give Portainer access to the host's Docker socket +- `-d`: Run container in the background (detached) +- `--name=portainer`: The name of the container +- `-e PGID=1000 and -e PUID=1000`: Set environmental variables PGID and PUID to 1000 (your user id, run id to check it) +- `-p 8000:8000`: Expose port 8000 on the host and bind it to port 8000 in the container +- `-p 9000:9000`: Same as above +- `--restart=unless-stopped`: Automatically restart the container if it crashes or when the server boots +- `-v a:b`: Bind directory a on the host to directory b in the container +- `-v /var/run/docker.sock:/var/run/docker.sock`: Give Portainer access to the host's Docker socket After running the command, you can access the web UI using a browser at `[local_server_ip]:9000`. In my case, that would be `192.168.1.254:9000`. @@ -135,7 +135,7 @@ $ sudo setfacl -R -d -m g::rwx public $ sudo setfacl -R -d -m o::rwx public ``` -Next, open Portainer, go to the *stacks* tab, and add a new stack named `samba`. In the `docker-compose` field, paste the following, and modify it to your liking: +Next, open Portainer, go to the _stacks_ tab, and add a new stack named `samba`. In the `docker-compose` field, paste the following, and modify it to your liking: ```yaml version: '3.9' @@ -164,7 +164,7 @@ services:stacks* tty: true ``` -For more information on what each option does, you can check the project's [repository](https://github.com/dperson/samba#configuration). After you are satisfied with your settings, click *deploy the stack*, wait a couple of seconds, and try accessing your new file share from a different computer. +For more information on what each option does, you can check the project's [repository](https://github.com/dperson/samba#configuration). After you are satisfied with your settings, click _deploy the stack_, wait a couple of seconds, and try accessing your new file share from a different computer. ## Final Thoughts diff --git a/content/posts/ultimate-home-server-part-3/index.md b/content/posts/ultimate-home-server-part-3/index.md index a5c00f5..0f7f999 100644 --- a/content/posts/ultimate-home-server-part-3/index.md +++ b/content/posts/ultimate-home-server-part-3/index.md @@ -27,7 +27,7 @@ By default, most routers use [DHCP](https://en.wikipedia.org/wiki/Dynamic_Host_C First, we need to find our server's MAC address. Open a terminal and run `ifconfig -a`. The network interface we care about should have a line starting with `ether`, `HWaddr`, or `lladdr`. If you have multiple network interfaces (both Ethernet and WiFI for example), you can run `ip route | grep default` to see which one you are using. -Then, open a browser and go to your router's settings by typing the address of its default gateway (the same address that you get when running `ip route | grep default`). You should have a section named *DHCP*, *Static leases* or something similar. There, you are going to add a new entry, set its IP to whatever you like (in my case `192.168.1.254`) and fill in the above MAC address. +Then, open a browser and go to your router's settings by typing the address of its default gateway (the same address that you get when running `ip route | grep default`). You should have a section named _DHCP_, _Static leases_ or something similar. There, you are going to add a new entry, set its IP to whatever you like (in my case `192.168.1.254`) and fill in the above MAC address. You might need to restart your server and/or router, but if everything went well, you should now be able to see the line `inet 192.168.1.254` next to the network interface when running `ifconfig -a`. @@ -66,32 +66,32 @@ You first need to create a Cloudflare API key: 2. Click Create Token 3. Provide the token with a name, for example, `cloudflare-ddns` 4. Grant the following permissions: - - Zone - Zone Settings - Read - - Zone - Zone - Read - - Zone - DNS - Edit + - Zone - Zone Settings - Read + - Zone - Zone - Read + - Zone - DNS - Edit 5. Set the zone resources to: - - Include - All zones + - Include - All zones 6. Complete the wizard and copy the generated token into the `API_KEY` variable for the container. Make sure to note this down somewhere since you won't be able to access it afterwards. -After getting your API key, go to your Portainer instance, open the *stacks* tab, and add a new stack named `routing`. In the `docker-compose` field paste the following and customize to match your API key and domain: +After getting your API key, go to your Portainer instance, open the _stacks_ tab, and add a new stack named `routing`. In the `docker-compose` field paste the following and customize to match your API key and domain: ```yaml -version: '3.9' +version: "3.9" services: - cloudflare_ddns: - image: oznu/cloudflare-ddns - container_name: cloudflare_ddns - restart: unless-stopped - environment: - - API_KEY=[your-api-key] - - ZONE=example.com - - SUBDOMAIN=ddns - - PROXIED=false - network_mode: bridge + cloudflare_ddns: + image: oznu/cloudflare-ddns + container_name: cloudflare_ddns + restart: unless-stopped + environment: + - API_KEY=[your-api-key] + - ZONE=example.com + - SUBDOMAIN=ddns + - PROXIED=false + network_mode: bridge ``` -Click *deploy the stack* and you should notice that a new A record has appeared on the DNS tab of your Cloudflare dashboard. +Click _deploy the stack_ and you should notice that a new A record has appeared on the DNS tab of your Cloudflare dashboard. I have also added a couple of CNAME records pointing to the original A record specifically for SSH and VPN services: `ssh.example.com` and `vpn.example.com`. @@ -118,28 +118,28 @@ $ docker run -v /mnt/storage/configs/openvpn:/etc/openvpn --rm -e PUID=1000 -e P After running these commands, go to Potainer and deploy a new `vpn` stack: ```yaml -version: '3.9' +version: "3.9" services: - vpn: - image: kylemanna/openvpn - container_name: openvpn - restart: unless-stopped - volumes: - - '/mnt/storage/configs/openvpn:/etc/openvpn' - environment: - - PUID=1000 - - PGID=1000 - ports: - - '1194:1194/udp' - networks: - - vpn - cap_add: - - NET_ADMIN + vpn: + image: kylemanna/openvpn + container_name: openvpn + restart: unless-stopped + volumes: + - "/mnt/storage/configs/openvpn:/etc/openvpn" + environment: + - PUID=1000 + - PGID=1000 + ports: + - "1194:1194/udp" + networks: + - vpn + cap_add: + - NET_ADMIN networks: - vpn: - name: vpn + vpn: + name: vpn ``` If everything went well, you should be able to download an OpenVPN client from one of these sources and import your certificate. @@ -278,45 +278,44 @@ $ docker network create proxy Finally, open the `routing` stack you created earlier in Portainer and edit it like so: ```yaml -version: '3.9' +version: "3.9" services: - nginx-proxy-manager: - image: jlesage/nginx-proxy-manager - container_name: nginx_proxy_manager - restart: unless-stopped - environment: - - USER_ID=1000 - - GROUP_ID=1000 - - UMASK=002 - - TZ=Europe/Athens - - DISABLE_IPV6=1 - - KEEP_APP_RUNNING=1 - volumes: - - '/mnt/storage/configs/routing/nginx:/config' - - '/mnt/storage/configs/routing/nginx/nginx.conf:/etc/nginx/nginx.conf' - - '/mnt/storage:/static:ro' - ports: - - '80:8080' - - '81:8181' - - '443:4443' - networks: - - proxy + nginx-proxy-manager: + image: jlesage/nginx-proxy-manager + container_name: nginx_proxy_manager + restart: unless-stopped + environment: + - USER_ID=1000 + - GROUP_ID=1000 + - UMASK=002 + - TZ=Europe/Athens + - DISABLE_IPV6=1 + - KEEP_APP_RUNNING=1 + volumes: + - "/mnt/storage/configs/routing/nginx:/config" + - "/mnt/storage/configs/routing/nginx/nginx.conf:/etc/nginx/nginx.conf" + - "/mnt/storage:/static:ro" + ports: + - "80:8080" + - "81:8181" + - "443:4443" + networks: + - proxy - whoami: - image: containous/whoami - container_name: whoami - restart: unless-stopped - networks: - - proxy + whoami: + image: containous/whoami + container_name: whoami + restart: unless-stopped + networks: + - proxy - cloudflare_ddns: - [...] + cloudflare_ddns: [...] networks: - proxy: - external: true - name: proxy + proxy: + external: true + name: proxy ``` After deploying the stack, you can open a browser and go to `[your-server-ip]:81` to access NPM's web UI, or `[your-server-ip]:80` to test your installation. However, you still won't be able to actually use the proxy. @@ -344,31 +343,27 @@ Then, follow the instructions on your terminal and save the `cert.pem` file at ` Finally, edit the `routing` stack again and add the following: ```yaml -version: '3.9' +version: "3.9" services: - nginx-proxy-manager: - [...] + nginx-proxy-manager: [...] - whoami: - [...] + whoami: [...] - cloudflare_ddns: - [...] + cloudflare_ddns: [...] - cloudflare_argo_tunnel: - image: cloudflare/cloudflared - container_name: cloudflare_tunnel - restart: unless-stopped - volumes: - - '/mnt/storage/configs/routing/cloudflared:/etc/cloudflared' - networks: - - proxy - command: tunnel --no-autoupdate --origincert /etc/cloudflared/cert.pem --hostname example.com --no-tls-verify --origin-server-name *.example.com --url https://nginx-proxy-manager:4443 - user: '1000:1000' + cloudflare_argo_tunnel: + image: cloudflare/cloudflared + container_name: cloudflare_tunnel + restart: unless-stopped + volumes: + - "/mnt/storage/configs/routing/cloudflared:/etc/cloudflared" + networks: + - proxy + command: tunnel --no-autoupdate --origincert /etc/cloudflared/cert.pem --hostname example.com --no-tls-verify --origin-server-name *.example.com --url https://nginx-proxy-manager:4443 + user: "1000:1000" -networks: - [...] +networks: [...] ``` After deploying, you should notice a new AAAA record on your Cloudflare dashboard. If you want to use any other subdomain, you simply need to add a CNAME alias pointing to that record. @@ -379,7 +374,6 @@ To test if everything is working correctly, add a new CNAME alias for `whoami.ex ![](npm-1.png) - ```nginx proxy_set_header Host $server; proxy_set_header X-Forwarded-Proto $forward_scheme; @@ -395,7 +389,7 @@ Wait a couple of minutes for the changes to propagate and you should be able to The primary reason why SSL is used is to keep sensitive information sent across the Internet encrypted so that only the intended recipient can access it. One of the main selling points of NPM is automatic SSL certificate management. -In order to create a wildcard certificate for all of your subdomains, you can follow [this](https://www.reddit.com/r/unRAID/comments/kniuok/howto_add_a_wildcard_certificate_in_nginx_proxy/) guide by [u/Sunsparc](https://www.reddit.com/user/Sunsparc/) on Reddit. After creating your certificate, you should always select it, as well as turn on *Force SSL* and *HTTP/2 Support* on any proxy host you create. +In order to create a wildcard certificate for all of your subdomains, you can follow [this](https://www.reddit.com/r/unRAID/comments/kniuok/howto_add_a_wildcard_certificate_in_nginx_proxy/) guide by [u/Sunsparc](https://www.reddit.com/user/Sunsparc/) on Reddit. After creating your certificate, you should always select it, as well as turn on _Force SSL_ and _HTTP/2 Support_ on any proxy host you create. ## Final Thoughts diff --git a/content/posts/vfio/index.md b/content/posts/vfio/index.md index 26d6b02..8fb617d 100644 --- a/content/posts/vfio/index.md +++ b/content/posts/vfio/index.md @@ -84,45 +84,45 @@ After installing the VirtIO drivers, boot back into Linux and create a new VM in 1. Select "Manual Install" and make sure the architecture is set to "x86_64" - ![](virt-manager-1.png) +![](virt-manager-1.png) 2. Set the Operating System to "Microsoft Windows 10". - ![](virt-manager-2.png) +![](virt-manager-2.png) 3. Allocate as much memory as you need but make sure to leave some for the host as well. You can see how much memory the host is currently using by running `free -m`. Changing the CPU options doesn't really matter since we'll manually change them later. - ![](virt-manager-3.png) +![](virt-manager-3.png) 4. Do not enable storage for this virtual machine for now. We'll do that during the customization. - ![](virt-manager-4.png) +![](virt-manager-4.png) 5. Select "Customize configuration before install" and make sure that "Virtual network 'default': NAT" is chosen. - ![](virt-manager-5.png) +![](virt-manager-5.png) A new window should pop up. This is where you can customize your virtual machine. Before booting it, you should change a couple of options: Under "Overview", Set the Chipset to "Q35" and the Firmware to "UEFI x86_64: /usr/share/edk2-ovmf/x64/OVMF_CODE.fd". Make sure to click "Apply" before switching pages. - ![](virt-manager-6.png) +![](virt-manager-6.png) Under "CPUs", deselect "Copy host CPU configuration" and pick `host-passthrough`. You should also select "Manually set CPU topology" and set 1 Socket, 6 Cores, and 2 Threads (12 total virtual cores), leaving 4 for the host. If you have a different CPU, you should make sure to change these options to fit your configuration. - ![](virt-manager-7.png) +![](virt-manager-7.png) Click "Add Hardware > Storage" and add the drive that contains Windows. Set "Bus type" to "VirtIO" and "Cache mode" to "none" for better performance. > [!warning] > Make sure that the drive contains the Windows Bootloader. If it doesn't, you can resize the Windows partition, boot from a rescue USB, and create a Bootloader using BCDBOOT. - ![](virt-manager-8.png) +![](virt-manager-8.png) Set the Network Device and Video Device models to "VirtIO". - ![](virt-manager-9.png) - ![](virt-manager-10.png) +![](virt-manager-9.png) +![](virt-manager-10.png) Finally, click "Begin Installation". You might have to manually add a Boot Entry to the UEFI by pressing the Escape key while the VM is booting, going to "Boot Maintenance Manager > Boot Options > Add Boot Option > Windows Disk > EFI > Microsoft > Boot > bootmgfw.efi". @@ -182,6 +182,7 @@ IOMMU Group 8 00:18.7 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Dev IOMMU Group 9 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA104M [GeForce RTX 3070 Mobile / Max-Q] [10de:24dd] (rev a1) IOMMU Group 9 01:00.1 Audio device [0403]: NVIDIA Corporation GA104 High Definition Audio Controller [10de:228b] (rev a1) ``` + What we mainly care about are the GPU groups, specifically: ```bash @@ -284,7 +285,6 @@ IOMMU Group 9 00:14.3 ISA bridge [0601]: Advanced Micro Devices, Inc. [AMD] FCH ## Creating the Hook Scripts - Before doing any passthrough, we need to create the scripts that will allocate the necessary resources to the VM before it boots and de-allocate them after it shuts down. To do that, we are going to be using [libvirt hooks](https://libvirt.org/hooks.html) and The Passthrough Post's [hook helper](https://passthroughpo.st/simple-per-vm-libvirt-hooks-with-the-vfio-tools-hook-helper/). You can find all the needed scripts in this project's [git repository](https://git.karaolidis.com/karaolidis/legion-7-vfio). > [!warning] diff --git a/content/posts/windows-and-linux-on-ntfs/index.md b/content/posts/windows-and-linux-on-ntfs/index.md index 26b2f1d..a0f4277 100644 --- a/content/posts/windows-and-linux-on-ntfs/index.md +++ b/content/posts/windows-and-linux-on-ntfs/index.md @@ -31,20 +31,21 @@ With the help of Paragon's new [NTFS3 driver](https://www.kernel.org/doc/html/la 1. Boot using the Arch Install ISO. 2. Format the target drive. In my case, that's `/dev/sda`. It needs to have a GPT partition table and 2 partitions in total: - - 1GB EFI Filesystem - - The rest of the drive (leave it unallocated for now) - ![](fdisk.png) +- 1GB EFI Filesystem +- The rest of the drive (leave it unallocated for now) + +![](fdisk.png) 3. Shut down your system and boot using the Windows ISO. 4. Make sure to select "Custom: Install Windows only (advanced)". - ![](windows-installation-type.png) +![](windows-installation-type.png) 5. Select the Unallocated Space we created earlier and finish the installation. - ![](windows-drive.png) +![](windows-drive.png) 6. Once the installation is complete, shut the system down and boot into the Arch ISO once again. @@ -52,19 +53,19 @@ With the help of Paragon's new [NTFS3 driver](https://www.kernel.org/doc/html/la 8. Run the `archinstall` installation script. - ![](archinstall.png) +![](archinstall.png) 9. When asked about which drives to configure, make sure to not select anything. 10. I also decided to use GRUB as my bootloader since I am more familiar with it, but you can use whatever you like. - ![](linux-drive.png) +![](linux-drive.png) 11. The install script will fail during GRUB's installation, so we must continue manually. 12. Change root into the installation folder and install GRUB. - ![](linux-chroot.png) +![](linux-chroot.png) 13. Add the windows bootloader as a custom GRUB entry by editing `/etc/grub.d/40_custom`. Make sure to replace `{UUID}` with your disk's UUID. You can get it by running `blkid /dev/sda1`. diff --git a/hugo.toml b/hugo.toml index ace1cb1..663aab8 100644 --- a/hugo.toml +++ b/hugo.toml @@ -29,8 +29,8 @@ name = "Source Code" url = "https://git.karaolidis.com/karaolidis/blog" [taxonomies] - tag = 'tags' +tag = 'tags' [markup] [markup.highlight] - noClasses = false +noClasses = false diff --git a/themes/caldwell b/themes/caldwell index 9905066..d9a3c4b 160000 --- a/themes/caldwell +++ b/themes/caldwell @@ -1 +1 @@ -Subproject commit 990506604684283bd4a5acee925c4d5392a043b7 +Subproject commit d9a3c4b4a1696d564e371997ff38c935afa909d0