Fine dining with Abraham Ortelius

We begin our local environment construction here.

Fine dining with Abraham Ortelius

Canapes

Windows 10

  • Latest version & fully updated
  • Enable WSL2 | Go to Programs and features –> Turn Windows features on or off –> Windows Subsystem for Linux
  • We recommend using a second disk if you have one in your machine to create the custom folder to house the VMDK
  • This splits up the I/O between the Windows OS and WSL2 which is just a stripped down virtual machine
  • Install Windows Terminal here for easier management and get familiar with the documentation
  • Use this documentation to install the latest Ubuntu flavour, don’t bother with the Microsoft store ( We recommend Ubuntu Jammy JellyFish at this time of writing)
  • Line feed ending hell can be solved with this VSCode extension here or Dos2Unix as another option
  • Windows uses CRLF
  • Linux uses LF
  • This Stackoverflow article can help you understand whats going on
  • Example error /bin/sh^M:bad interpreter
  • Suggestion Alert: Set your VSCode to LF and only use WSL2 to do all your work
  • Terms & Conditions

Windows 11

Configs for WSL

Windows Operating System

c:\Users\Abraham\.wslconfig

# Settings apply across all Linux distros running on WSL 2
[wsl2]

# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=4GB

# Sets the VM to use two virtual processors
processors=2

# Specify a custom Linux kernel to use with your installed distros.
# The default kernel used can be found at https://github.com/microsoft/WSL2-Linux-Kernel
#kernel=C:\\temp\\myCustomKernel

# Sets additional kernel parameters, in this case enabling older Linux base images such as Centos 6
#kernelCommandLine = vsyscall=emulate

# Sets amount of swap storage space to 8GB, default is 25% of available RAM
swap=4GB

# Sets swapfile path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx
swapfile=D:\\wsl\\ubuntu-22-04-lts\\wsl-swap.vhdx

# Disable page reporting so WSL retains all allocated memory claimed from Windows and releases none back when free
pageReporting=false

# Turn off default connection to bind WSL 2 localhost to Windows localhost
localhostforwarding=true

# Disables nested virtualization
nestedVirtualization=false

# Turns on output console showing contents of dmesg when opening a WSL 2 distro for debugging
debugConsole=true
[user]
default = sacha

[automount]
options = "metadata"

# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=4GB

WSL Ubuntu Linux Virtual Machine

\etc\wsl.conf

# Automatically mount Windows drive when the distribution is launched
[automount]

# Set to true will automount fixed drives (C:/ or D:/) with DrvFs under the root directory set above. Set to false means drives won't be mounted automatically, but need to be mounted manually or with fstab.
enabled = true

# Sets the directory where fixed drives will be automatically mounted. This example changes the mount location, so your C-drive would be /c, rather than the default /mnt/c.
root = /

# DrvFs-specific options can be specified.
options = "metadata,uid=1003,gid=1003,umask=077,fmask=11,case=off"

# Sets the `/etc/fstab` file to be processed when a WSL distribution is launched.
mountFsTab = true

# Network host settings that enable the DNS server used by WSL 2. This example changes the hostname, sets generateHosts to false, preventing WSL from the default behavior of auto-generating /etc/hosts, and sets generateResolvConf to false, preventing WSL from auto-generating /etc/resolv.conf, so that you can create your own (ie. nameserver 1.1.1.1).
[network]
hostname = DemoHost497686

generateHosts = false
generateResolvConf = false

# Set whether WSL supports interop process like launching Windows apps and adding path variables. Setting these to false will block the launch of Windows processes and block adding $PATH environment variables.
[interop]
enabled = false
appendWindowsPath = false

# Set the user when launching a distribution with WSL.
[user]
default = DemoUser

# Set a command to run when a new WSL instance launches. This example starts the Docker container service.
[boot]
command = service docker start

Linux

Ubuntu

CentOS

Package Managers

APT for Ubuntu

YUM for Centos

MacOs

Package Managers

Macports.org

Brew.sh

Docker Mac Net Connect MANDATORY

  • Accessing containers directly by IP (instead of port binding) can be useful and convenient.
  • Unlike Docker on Linux, Docker-for-Mac does not expose container networks directly on the macOS host.
  • Docker-for-Mac works by running a Linux VM under the hood (using hyperkit) and creates containers within that VM.
  • Docker-for-Mac supports connecting to containers over Layer 4 (port binding), but not Layer 3 (by IP address).

Solution

  • Create a minimal network tunnel between macOS and the Docker Desktop Linux VM.
  • The tunnel is implemented using WireGuard.

Install via Homebrew

brew install chipmk/tap/docker-mac-net-connect

Run the service and register it to launch at boot

brew services start chipmk/tap/docker-mac-net-connect
sudo brew services start chipmk/tap/docker-mac-net-connect

Starters

Topgrade | Update everything with one command OPTIONAL

  • Topgrade Wiki
  • Supports all operating systems
  • Topgrade config file is here .config/topgrade.toml
  • All I need to type now on my zsh terminal is topgrade
  • It upgrades all my package managers including the packages, Mac store apps and Mac OS updates
  • It can do so much more | We will leave you to explore
  • Terms & Conditions

Devdocs.io | The application command encyclopedia & yes you can access it offline

  • Bash, CSS, Docker, Flask, Git, Go, Brew, HTML, HTTP, Java, JavaScript, Markdown, Nginx, Nodejs, npm, Python, Kubectl, Kubernetes and so much more
  • Terms & Conditions

WARP The Terminal for the 21st Century OPTIONAL

SDKMan.io | For managing all things Java | SDKs | JDKs OPTIONAL

Discord.com

  • Discord is global human interaction
  • Set yourself up with your very own Discord server
  • Create a dedicated channel for Git Guardian alerts
  • Do this before Git Guardian
  • GitHub webhooks are here
  • Terms & Conditions

Git Guardian.com

  • Set yourself up for free
  • This tool will warn you when you accidently put sensitive information on the public internet in your repos
  • Go to VCS Integrations and add your GitHub (You will need to set yourself up on GitHub first)
  • Go to Alerting and setup Discord notifications
  • Support for CI|CD pipelines such as Azure, Bitbucket, Circle CI, Drone CI, GitHub Actions, GitLab, Jenkins & Travis
  • Support for Git Hooks
  • Support for Docker | Docker image integration
  • Alerting for Discord, Custom Webhook, Jira, Pager Duty, Slack, Splunk
  • Discord integrations are here
  • Terms & Conditions

YADM.io Yet Another Dot File Manager OPTIONAL

  • In Linux you end up with a lot of config files which usually start with .
  • The dot files have configurations for various application packages installed on your machine
  • YADM allows you to keep the dot files of your choice backed up to a repository
  • Documentation here
  • Terms & Conditions

Main Course

Choose between Docker or Podman

Git-scm.com

.gitconfig inspiration

[core]
	excludesfile = /Users/abraham/.gitignore_global
[alias]
# Make sure you're adding under the [alias] block.
# Git Commit, Add all and Push in one step.
# Using functions in Git
cap = "!f() { git add .; git commit -m \"$@\"; git push; }; f"
# NEW.
new = "!f() { git cap \"📦 NEW: $@\"; }; f"
# IMPROVE.
imp = "!f() { git cap \"👌 IMPROVE: $@\"; }; f"
# FIX.
fix = "!f() { git cap \"🐛 FIX: $@\"; }; f"
# RELEASE.
rlz = "!f() { git cap \"🚀 RELEASE: $@\"; }; f"
# DOC.
doc = "!f() { git cap \"📖 DOC: $@\"; }; f"
# TEST.
tst = "!f() { git cap \"🤖 TEST: $@\"; }; f"
# BREAKING CHANGE.
brk = "!f() { git cap \"‼️ BREAKING: $@\"; }; f"
[user "https://github.com"]
	name = Abraham Ortelius
	email = abraham.ortelius@ortelius.io
[core]
	repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = false
[init]
  defaultBranch = main
	templatedir = /Users/abraham/.git_template
[pull]
	rebase = false
[credential "https://github.com"]
	helper = store
[credential "https://gist.github.com"]
	helper = store
[help]
	autocorrect = 1
[advice]
	addIgnoredFile = false
[user]
	name = Abraham Ortelius
	email = abraham.ortelius@ortelious.io

[filter "lfs"]
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
	process = git-lfs filter-process
	required = true
[web]
	browser = firefox

Source Control GitHub.com

VSCode IDE

Helpful Extensions

  • Install Snyk Security | Code & Open Source Dependencies scanner here
  • Install Language Support for Java by Red Hat here
  • Install Yaml support here
  • Install Indent Rainbow here
  • Install Change All End of Line Sequence here
  • Install ToDo Tree here

Docker.com

Docker Security

  • Bake security right in from the word go
  • We are going to use Snyk to scan our containers
  • Snyk is free and you can set yourself up here
  • Terms & Conditions for Snyk
  • In Docker Desktop go to the Extensions Marketplace and install the Snyk Container Extension
  • On your command line you can now scan your Docker images with docker scan your-docker-image
  • Disclaimer: Please follow any prompts Snyk requires you to fulfill to get up and running

Podman.io

Container Registries

  • Think of container registries as huge parking lots for containers
  • Container images can be pushed and pulled from these locations

AWS registry

Docker registry

GCP registry

Azure registry

RedHat Quay registry (Ortelius image lives here)

Kind.sigs.k8s.io

  • Kind allows you to use Docker to run K8s nodes as containers
  • Install here
  • Get familiar with the basic commands
  • Checkout the Kind documentation here
  • Terms & Conditions

Kubernetes.io

  • K8s is a production grade container orchestrater
  • K8s is the conductor of the orchestra where the conductor is K8s and the orchestra is the containers within PODs
  • PODS are cuddly safe worlds to hold containers (so cute)
  • Terms & Conditions
  • Creative Commons

Kubectl

  • Install kubectl the command line tool here
  • Use the kubectl cheat sheet here
  • Use Devdocs and the official documentation here
  • Add the aliases & auto complete which are in the cheat sheet

PostgreSQL.org & Ortelius event driven architecture

ArangoDB & Ortelius XRPL SBOM Ledger

Dessert

Ortelius.io

Helm.sh

  • Install Helm for your operating system (Scroll down until you see Get Helm!)
  • K8s templating engine
  • Terms & Conditions

Argo-CD.readthedocs.io

  • Argo CD is a declarative, GitOps continous delivery tool for Kubernetes
  • For example it allows you to abstract the application configuration out of the developer code
  • Install here
  • Terms & Conditions

Keptn.sh

AWS Localstack The AWS Cloud on your local machine OPTIONAL

Terraform IaC

Pulumi IaC


Last modified November 29, 2022: Updated title and corrected typos (32f4903)