diff --git a/public/404.html b/public/404.html new file mode 100644 index 00000000..bd39559b --- /dev/null +++ b/public/404.html @@ -0,0 +1,271 @@ + + + + + + + + + + + + + + + + This page no longer exists, or maybe it never did? Try https://archive.org? • davegallant + + + + + + + + + + + + + + +
+
+
+ + + +
+ + +
+
+ This page no longer exists, or maybe it never did? Try https://archive.org? +
+ + Gopher + Go Home... + +
+

+ This page no longer exists, or maybe it never did? Try https://archive.org? +

+
+
+
+
+ +
+ + + +
+
+ + + + + + + diff --git a/public/CNAME b/public/CNAME new file mode 100644 index 00000000..55868b24 --- /dev/null +++ b/public/CNAME @@ -0,0 +1 @@ +davegallant.ca diff --git a/public/about/index.html b/public/about/index.html new file mode 100644 index 00000000..b25d2bb4 --- /dev/null +++ b/public/about/index.html @@ -0,0 +1,323 @@ + + + + + + + + + + + + + + + + About • davegallant + + + + + + + + + + + + + + +
+
+
+ + + +
+ + +
+
+
+
+

About

+ + +
+ + + +
+
+ + + + +
+

I’m a software engineer with a passion for open-source, infrastructure, tooling and security.

+ +
+ + +
+
+
+
+ + +
+ + + + +
+ + + +
+
+ + + + + + + diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 00000000..91842dce Binary files /dev/null and b/public/android-chrome-192x192.png differ diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100644 index 00000000..aab9ea97 Binary files /dev/null and b/public/android-chrome-512x512.png differ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 00000000..f3c47aa3 Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/assets/css/main.ab98e12b.css b/public/assets/css/main.ab98e12b.css new file mode 100644 index 00000000..0770c5d0 --- /dev/null +++ b/public/assets/css/main.ab98e12b.css @@ -0,0 +1,6 @@ +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none} +@charset "UTF-8"; +/*! + * Theme Name: Minimo + * Author: Munif Tanjim + */body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-size:1em;line-height:1.5;color:#37474f;word-wrap:break-word}@media screen and (min-width:480px){body{font-size:1.125em}}.title,h1,h2,h3,h4,h5,h6{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-weight:700;line-height:1.2;color:#263238;margin:0 0 .625em}.comment-content h2,.comment-content h3,.comment-content h4,.comment-content h5,.comment-content h6,.entry-content h2,.entry-content h3,.entry-content h4,.entry-content h5,.entry-content h6{margin-top:1.5em}.comment-content h2:first-child,.comment-content h3:first-child,.comment-content h4:first-child,.comment-content h5:first-child,.comment-content h6:first-child,.entry-content h2:first-child,.entry-content h3:first-child,.entry-content h4:first-child,.entry-content h5:first-child,.entry-content h6:first-child{margin-top:0}.site-title,h1{font-size:2em}h2{font-size:1.75em}h3{font-size:1.5em}h4{font-size:1.375em}h5{font-size:1.25em}h6{font-size:1.125em}p{margin:0 0 1.5em}p:last-child{margin:0}blockquote,cite,dfn,em,i{font-style:italic}blockquote{font-size:1.125em;padding-left:1em;border-left:.2em solid #bdbdbd}address,blockquote{margin:0 0 1.5em}code,kbd,pre,samp,var{font-family:Menlo,Consolas,Monaco,Ubuntu Mono,Liberation Mono,Lucida Console,monospace;background:#eee;color:#212121;border:1px solid #dcdcdc;border-radius:.25em;padding:.1em .25em}pre{overflow:auto;word-wrap:normal;text-align:initial;margin-bottom:1.5em;padding:.75em 1em}pre code,pre kbd,pre samp,pre var{background:none;color:inherit;border:0;padding:0}code,kbd,samp,var{font-size:.9375em}.highlight pre{border:0;margin:0}.comment-content .highlight,.entry-content .highlight{margin-bottom:1.5em}abbr,acronym{border-bottom:1px dotted #212121;cursor:help}ins,mark{background:#212121;text-decoration:none}big{font-size:125%}.desc{font-style:italic}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}blockquote,q{quotes:"" ""}blockquote:after,blockquote:before,q:after,q:before{content:""}blockquote :last-child,q :last-child{margin-bottom:0}hr{border:0;height:1px;margin:2em 0;background-color:#bdbdbd}img{max-width:100%;height:auto}figure{margin:1em 0}a{color:#212121;text-decoration:none;transition:color .1s ease-in-out}a:focus{outline-color:#ffcd00;outline-color:var(--color-accent)}a:active,a:hover{outline:0}a:active,a:focus,a:hover{color:#37474f}a.button{display:inline-block}ol,ul{padding:0;margin:0 0 1.5em 1.5em}ul.task-list{list-style:none}ul.task-list label{font-weight:inherit}ul.task-list input{width:auto;margin-left:-1.5em}li ol,li ul{margin-bottom:0;margin-left:1.5em}dt{font-weight:700}dd{margin:0 1.5em 1.5em}table,td,th{border:1px solid #bdbdbd}table{width:100%;margin:0 0 1.5em;table-layout:fixed;border-collapse:separate;border-spacing:0;border-width:1px 0 0 1px}caption,td,th{font-weight:400;text-align:left}th{font-weight:700}td,th{border-width:0 1px 1px 0}td,th{padding:.375em}.button,button,input[type=button],input[type=reset],input[type=submit]{width:auto;padding:.5em .75em;border:1px solid #bdbdbd;border-radius:.2em;background:#fff;color:#37474f;font-size:1em;font-weight:700;line-height:1.15;text-align:center;letter-spacing:1px;white-space:nowrap;text-transform:uppercase;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;transition:.1s ease-in-out}.button:focus,button:focus,input[type=button]:focus,input[type=reset]:focus,input[type=submit]:focus{outline-color:#ffcd00;outline-color:var(--color-accent)}.button:active,.button:hover,button:active,button:hover,input[type=button]:active,input[type=button]:hover,input[type=reset]:active,input[type=reset]:hover,input[type=submit]:active,input[type=submit]:hover{outline:0}.button:active,.button:focus,.button:hover,button:active,button:focus,button:hover,input[type=button]:active,input[type=button]:focus,input[type=button]:hover,input[type=reset]:active,input[type=reset]:focus,input[type=reset]:hover,input[type=submit]:active,input[type=submit]:focus,input[type=submit]:hover{background:#37474f;color:#fff}input,select,textarea{width:100%;padding:.625em .875em;border:1px solid #bdbdbd;border-radius:.2em;color:#37474f;transition:.1s ease-in-out}input:focus,select:focus,textarea:focus{border-color:#ffcd00;border-color:var(--color-accent);outline-color:transparent}input[type=checkbox],input[type=radio]{width:auto}label{font-weight:700;letter-spacing:1px}.menu ul{list-style:none;margin:0}.menu li{text-transform:uppercase}.menu li.current>a{font-weight:700;pointer-events:none}.main-menu>div{display:flex;align-items:center}.main-menu li{display:inline-block;margin-right:.625em}.main-menu li:last-child{margin-right:0}.sidebar-menu .item{display:flex;flex-flow:row wrap;justify-content:flex-end}.sidebar-menu .has-current>a{font-style:italic}.sidebar-menu .sub-menu{display:none;padding-left:0;flex:100%;flex-shrink:0}.sidebar-menu .sub-menu .item:not(.has-children){padding-right:1.2em}.sub-menu-toggler{border:0;padding:0;margin-left:.2em;font-weight:400;width:1em}.sub-menu-toggler:active,.sub-menu-toggler:focus,.sub-menu-toggler:hover{background:none}.sub-menu-toggler>.sign{position:relative;top:-2px}.sub-menu-toggler>.sign:after{content:"+"}.toggled>.sub-menu{display:block}.toggled>.sub-menu-toggler>.sign:after{content:"–"}.menu a,.sidebar-toggler span,.sub-menu-toggler,.widget-social_menu a{color:#455a64}.menu a:focus,.menu a:hover,.sidebar-toggler span:focus,.sidebar-toggler span:hover,.sub-menu-toggler:focus,.sub-menu-toggler:hover,.widget-social_menu a:focus,.widget-social_menu a:hover{color:#263238}.entry-nav .sep-before:nth-child(2):before{width:2em;margin:1em 0}.entry-nav div a{display:block;font-style:italic}.entry-nav div span{display:block;font-style:normal;font-size:.875em}.page-links{margin-top:2em}.page-link{display:inline-block;padding:.25em .625em}.page-link:first-child{padding-left:0}.page-link:last-child{padding-right:0}.page-link.current{font-weight:700}.page-link.dots{padding:0}body{background:#fff}.site{overflow-x:hidden}.main{width:100%;padding:2em 0;transition:margin-left .2s}.sidebar.toggled~.main{margin-left:300px}@media screen and (min-width:920px){.main{width:auto}.has-sidebar .main{float:left;width:calc(100% - 300px);margin-left:300px;padding-left:2em}}.container{width:100%;max-width:740px;padding:0 20px;margin:0 auto}.has-sidebar .container{margin-left:0}.sep-after:after,.sep-before:before{content:"";display:block;width:4em;margin-top:2.5em;margin-bottom:2.5em;border-bottom:.125em solid #bdbdbd}.sidebar{visibility:hidden;float:left;left:-300px;position:absolute;width:300px;max-width:100%;min-height:100%;padding:2em 0;margin-right:-100%;outline:0;z-index:99999;transition:left .2s;text-align:right;background:#fff}.sidebar.toggled{visibility:visible;left:0}.sidebar .sep-after:after{margin-left:auto}@media screen and (min-width:920px){.sidebar{visibility:visible;left:0}}.sidebar-toggler{background:none;border:0}.sidebar-toggler .icon{font-size:1.25em}.sidebar-toggler:active,.sidebar-toggler:focus,.sidebar-toggler:hover{background:none}.main .sidebar-toggler{padding:0;position:absolute;right:20px}.main .sidebar-toggler .close,.main .sidebar-toggler[aria-expanded=true]{display:none}.main-menu .sidebar-toggler{position:static;margin-right:.75em}.main-menu .sidebar-toggler[aria-expanded=true]{display:inline-block}.sidebar .sidebar-toggler{position:absolute;top:.5em;left:.5em;z-index:2027}.sidebar .sidebar-toggler .open{display:none}@media screen and (min-width:920px){.sidebar-toggler{display:none}}.sidebar-overlay{display:none}.sidebar.toggled .sidebar-overlay{display:block}.sidebar.toggled .sidebar-overlay:after{content:"";display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:-2027;background:#fff;opacity:.75}@media screen and (min-width:920px){.sidebar.toggled .sidebar-overlay{display:none}}.header .sep-after:after{border-bottom-color:#ffcd00;border-bottom-color:var(--color-accent)}.has-cover .header .sep-after:after,.site-header{display:none}.error404 .site-header,.home .site-header{display:flex}.header-info{margin-top:1.5em}.header-info .title{margin-bottom:0}.header-info .desc{margin:.5em 0 0}.header-info .taxonomy-name{font-size:.875em;margin-right:.25em;font-style:italic}.entry-meta{margin-top:.75em}.entry-meta span{font-size:.9375em;margin-right:.75em;font-style:italic}.entry-meta .icon{margin-right:.25em}.entry-cover figure{margin-top:2em;margin-bottom:2.5em}.entry-cover img{display:block}.entry-cover figcaption{text-align:center;margin:.25em auto 0;padding:0}.entry-cover figcaption span{font-size:.875em}.cover-wide{padding:0;max-width:1080px}.cover-full{padding:0;max-width:100%}.cover-full img{width:100%}details,summary{display:block}summary{cursor:pointer}.no-details details:not([open])>:not(summary){display:none}.no-details details>summary:before{content:"\25BC";display:inline-block;margin-right:.25em;transition:.1s;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.no-details details[open]>summary:before{-webkit-transform:rotate(0deg);transform:rotate(0deg)}.entry-toc{margin-bottom:2.5em}.entry-toc ul{list-style:none}.entry-toc nav>ul{margin:0}.comment-content>:last-child,.comment-content>:last-child>:last-child,.entry-content>:last-child,.entry-content>:last-child>:last-child{margin-bottom:0}.comment-content a,.entry-content a{border-bottom:.125em dashed #bdbdbd}.comment-content a:focus,.comment-content a:hover,.entry-content a:focus,.entry-content a:hover{border-bottom-color:#ffcd00;border-bottom-color:var(--color-accent)}.comment-content a.footnote-return,.entry-content a.footnote-return{border-bottom:none}.entry-footer .container>div{margin-top:.5em}.entry-footer .container>div:first-child{margin-top:2.5em}.entry-footer .icon{margin-right:.375em}.comments ol{list-style:none}.comments ol.comment-list{margin:0}.comments-title{font-size:1.25em;margin-bottom:1.5em}.comment{position:relative;margin:1em 0}.comment-header{min-height:3em}.comment .avatar{float:left;height:3em;width:3em;border-radius:.25em;margin-right:.75em}.comment-meta{font-size:.875em}.comment .fn{display:inline-block;margin-top:.1em}.comment .reply{position:absolute;right:0;margin-top:-2em}.comment .reply,.comment .reply a{display:inline-block}.comment-content{margin-top:.75em;border-radius:.25em;border:1px solid #bdbdbd;padding:1em 1em 2em}.comment-respond{margin:1.5em 0}.comment-reply-title small{display:inline-block;font-size:.5em;margin-left:1em}.comment-form label{display:inline-block;margin-bottom:.25em}.comment-form>div{margin-top:1em}.comment-submission-feedback{display:none;position:relative;border-radius:.25em;border:1px solid #bdbdbd;padding:1.5em;margin-bottom:1.5em}.comment-submission-feedback a{position:absolute;top:1.5em;right:1.5em;font-size:.875em}.comment-submission-feedback:target{display:block}.list{margin:0 auto;list-style:none}.entry+.list-container{margin-top:2.5em}.list .item{display:flex;width:100%;margin-top:1em}.list .item:first-of-type{margin-top:0}.list .item .meta{flex:0 0 6em}.list .item .meta span{font-size:.875em}.list .item-header{flex:1}.list .item-title{font-size:1em;font-weight:400;margin-bottom:0;line-height:inherit}.list .item .icon{margin-right:.25em}.taxonomy-cloud{display:flex;flex-wrap:wrap;align-items:center}.taxonomy-cloud li{max-width:100%;padding:0 1.5em .5em 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.footer .sep-before:before{border-bottom-color:#ffcd00;border-bottom-color:var(--color-accent)}.footer a{font-style:italic}.footer .container>div,.footer .container>section{width:100%;margin-top:1em}.footer .container>div:first-child,.footer .container>section:first-child{margin-top:0}.error404 .gopher{margin:0}.error404 .gopher img{width:17.5em}.error404 .gopher a{display:block;border:0}.error404 .gopher figcaption{margin-top:1em}.error404 .gopher .title{margin-bottom:0}.home-widgets .sep-before:before{display:none}.entry+.home-widgets .sep-before:before{display:block}.icon{display:inline-block;stroke:currentColor;fill:none;position:relative;top:2px}.icon,img.emoji{height:1em;width:1em}img.emoji{margin:0 .05em 0 .1em;vertical-align:-.1em}.layout-archive .list .item{padding-left:1em}.layout-archive .list .item .meta{flex:0 0 3.5em}.archive-group.sep-after:last-child:after{display:none}.search-results li{height:2.5em;line-height:2em;border:1px solid #bdbdbd;border-top:0 solid #bdbdbd}.search-results li:last-child{border-radius:0 0 .2em .2em}.search-results li.results-empty,.search-results li.searching{font-style:italic}.search-results li a{display:block;padding:.25em .875em}.widget-title{margin-bottom:1em}.widget.sep-after:after{margin-top:1.5em;margin-bottom:1.5em}.widget.sep-after:last-of-type:after{display:none}.sidebar .widget-title{margin-bottom:.5em;font-size:1.25em}.sidebar .widget .container{padding:0}.main-menu+.header-widgets{margin-top:1em}.widget-about .logo{max-width:5em}.widget-about .logo a{display:block;line-height:0}.sidebar .widget-about .logo{margin-left:auto}.widget-about .site-title{margin-bottom:0;font-size:1.75em}.sidebar .widget-about.sep-after:after{border-bottom-color:#ffcd00;border-bottom-color:var(--color-accent)}.widget-breadcrumbs ol{list-style:none;margin:0}.widget-breadcrumbs li{display:inline-block}.widget-breadcrumbs li:after{display:inline-block;padding:0 .25em;speak:none}.widget-breadcrumbs li:last-child:after{display:none}.widget-breadcrumbs li span{font-weight:700}.sidebar .widget-recent_posts .meta{display:none}.sidebar .widget-recent_posts .item{margin-top:0}.widget-search .search-form{position:relative}.widget-search .search-submit{position:absolute;top:0;right:0;height:2.5em;width:2.5em;border-radius:0 .2em .2em 0}.layout-search .widget-search header{display:none}.layout-search .widget-search .search-term{height:2.5em;padding-right:3em;border-radius:.2em .2em 0 0}.widget-social_menu ul{list-style:none;margin:0}.widget-social_menu li{display:inline-block;margin-right:.625em}.widget-social_menu li:last-child{margin-right:0}.widget-social_menu li a{font-size:1.125em}.sidebar .widget-social_menu li{margin-right:0;margin-left:.625em}.sidebar .widget-taxonomy_cloud .taxonomy-cloud{justify-content:flex-end;font-size:.875em}.sidebar .widget-taxonomy_cloud li{padding:0 0 .4em .8em}.comment .says,.screen-reader-text{position:absolute;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;width:1px;margin:-1px;padding:0;border:0;overflow:hidden;word-wrap:normal!important}.comment .says:focus,.screen-reader-text:focus{display:block;left:.5em;top:.5em;clip:auto;-webkit-clip-path:none;clip-path:none;height:auto;width:auto;padding:1em;border-radius:.25em;font-size:.875em;font-weight:700;line-height:normal;text-decoration:none;background:#212121;color:#fafafa!important;z-index:100000}.align-center{text-align:center}.align-center>blockquote{display:inline-block}.align-center>ol,.align-center>ul{display:inline-block;text-align:initial}.align-center li{word-wrap:normal}.convo ol{display:table;list-style:none;margin:0}.convo li{display:table-row}.convo li>div{display:table-cell;padding-bottom:1.5em}.convo .person{font-size:.9em;font-style:italic;text-align:right}.convo .sep{padding-left:.75em;padding-right:.5em}.text-shortcode *{color:inherit;font-size:1em} diff --git a/public/assets/css/rtl.bf9d5394.css b/public/assets/css/rtl.bf9d5394.css new file mode 100644 index 00000000..cbef49fb --- /dev/null +++ b/public/assets/css/rtl.bf9d5394.css @@ -0,0 +1 @@ +blockquote{padding-left:0;padding-right:1em;border-left:0;border-right:.2em solid #bdbdbd}body{direction:rtl}ol,ul{margin:0 2em 1.5em 0}li>ol,li>ul{padding-left:0;padding-right:1.5em;margin-left:0;margin-right:.5em}caption,td,th{text-align:right}.main-menu li{margin-right:0;margin-left:.625em}.main-menu li:last-child{margin-left:0}.sidebar-menu .sub-menu{padding-right:0}.sidebar-menu .sub-menu .item:not(.has-children){padding-right:0;padding-left:1.2em}.sub-menu-toggler{margin-left:0;margin-right:.2em}.page-link:first-child{padding-left:.625em;padding-right:0}.page-link:last-child{padding-left:0;padding-right:.625em}.page-link.next .icon,.page-link.prev .icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.main{transition:margin-right .2s}.sidebar.toggled~.main{margin-left:0;margin-right:300px}@media screen and (min-width:920px){.has-sidebar .main{float:right;margin-left:0;margin-right:300px;padding-left:0;padding-right:2em}}.has-sidebar .container{margin-left:auto;margin-right:0}.sidebar{float:right;left:auto;right:-300px;margin-right:0;margin-left:-100%;transition:right .2s;text-align:left}.sidebar.toggled{right:0}.sidebar .sep-after:after{margin-left:0;margin-right:auto}@media screen and (min-width:920px){.sidebar{left:auto;right:0}}.main .sidebar-toggler{right:auto;left:20px}.main-menu .sidebar-toggler{margin-right:0;margin-left:.75em}.sidebar .sidebar-toggler{left:auto;right:.5em}.header-info .taxonomy-name{margin-right:0;margin-left:.25em}.entry-meta>span{display:inline-block}.entry-meta span{margin-right:0;margin-left:.75em}.entry-meta .icon,.no-details details>summary:before{margin-right:0;margin-left:.25em}.entry-footer .icon{margin-right:0;margin-left:.375em}.comment .avatar{float:right;margin-right:0;margin-left:.75em}.comment .reply{right:auto;left:0}.comment-reply-title small{margin-left:0;margin-right:1em}.comment-submission-feedback a{right:auto;left:1.5em}.list .item .icon{margin-right:0;margin-left:.25em}.taxonomy-cloud li{padding:0 0 .5em 1.5em}img.emoji{margin:0 .1em 0 .05em}.layout-archive .list .item{padding-left:0;padding-right:1em}.sidebar .widget-about .logo{margin-left:0;margin-right:auto}.widget-search .search-submit{right:auto;left:0;border-radius:.2em 0 0 0}.layout-search .widget-search .search-term{padding-right:.875em;padding-left:3em}.widget-social_menu li{margin-right:0;margin-left:.625em}.widget-social_menu li:last-child{margin-left:0}.sidebar .widget-social_menu li{margin-left:0;margin-right:.625em}.sidebar .widget-taxonomy_cloud li{padding:0 .8em .4em 0}.screen-reader-text:focus{left:auto;right:.5em}.convo .sep{padding-left:.5em;padding-right:.75em} diff --git a/public/assets/gopher.png b/public/assets/gopher.png new file mode 100644 index 00000000..7b5adc14 Binary files /dev/null and b/public/assets/gopher.png differ diff --git a/public/assets/js/algolia_search.d220ba26.js b/public/assets/js/algolia_search.d220ba26.js new file mode 100644 index 00000000..797c0aae --- /dev/null +++ b/public/assets/js/algolia_search.d220ba26.js @@ -0,0 +1,8 @@ +!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=18)}([function(e,t,r){"use strict";r.d(t,"a",function(){return n}),r.d(t,"d",function(){return o}),r.d(t,"c",function(){return a}),r.d(t,"b",function(){return i});var n=function(e,t){0===e.length?t.innerHTML="
  • \n ".concat(t.dataset.resultsEmpty,"\n
  • "):t.innerHTML=e.reduce(function(e,t){var r=t.href,n=t.title;return"".concat(e,"
  • ").concat(n,"
  • ")},"")},o=function(e){e.innerHTML="
  • \n ".concat(e.dataset.searching,"…\n
  • ")},a=function(e){if("URLSearchParams"in window)return new URLSearchParams(window.location.search).get(e);e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var t=new RegExp("[\\?&]"+e+"=([^&#]*)").exec(location.search);return null===t?"":decodeURIComponent(t[1].replace(/\+/g," "))},i=function(e,t){var r=new XMLHttpRequest;r.open("GET",e,!0),r.onload=function(){if(r.status>=200&&r.status<400){var e=JSON.parse(r.responseText);t(null,e)}else t(new Error(r.statusText))},r.onerror=function(){t(new Error("Failed to get JSON! ".concat(r.statusText)))},r.send()}},function(e,t){var r=Object.prototype.hasOwnProperty,n=Object.prototype.toString;e.exports=function(e,t,o){if("[object Function]"!==n.call(t))throw new TypeError("iterator must be a function");var a=e.length;if(a===+a)for(var i=0;i was loaded but did not call our provided callback"),JSONPScriptError:a("JSONPScriptError"," + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Authors

    + + + +
    +
    +
    + + +
    +
      + +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/authors/index.xml b/public/authors/index.xml new file mode 100644 index 00000000..53a8c55b --- /dev/null +++ b/public/authors/index.xml @@ -0,0 +1,10 @@ + + + + Authors on davegallant + /authors/ + Recent content in Authors on davegallant + Hugo -- gohugo.io + en-us + + diff --git a/public/blog/2020/03/16/appgate-sdp-on-arch-linux/index.html b/public/blog/2020/03/16/appgate-sdp-on-arch-linux/index.html new file mode 100644 index 00000000..927b29ab --- /dev/null +++ b/public/blog/2020/03/16/appgate-sdp-on-arch-linux/index.html @@ -0,0 +1,448 @@ + + + + + + + + + + + + + + + + AppGate SDP on Arch Linux • davegallant + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +
    +

    AppGate SDP on Arch Linux

    + + +
    + + + +
    +
    + + + + +
    +

    AppGate SDP provides a Zero Trust network. This post describes how to get AppGate SDP 4.3.2 working on Arch Linux.

    +

    Depending on the AppGate SDP Server that is running, you may require a client that is more recent than the latest package on AUR. +As of right now, the latest AUR is 4.2.2-1.

    +

    These steps highlight how to get it working with Python3.8 by making a 1 line modification to AppGate source code.

    +

    Packaging

    +

    We already know the community package is currently out of date, so let’s clone it:

    +
    git clone https://aur.archlinux.org/appgate-sdp.git
    +cd appgate-sdp
    +

    You’ll likely notice that the version is not what we want, so let’s modify the PKGBUILD to the following:

    +
    # Maintainer: Pawel Mosakowski <pawel at mosakowski dot net>
    +pkgname=appgate-sdp
    +conflicts=('appgate-sdp-headless')
    +pkgver=4.3.2
    +_download_pkgver=4.3
    +pkgrel=1
    +epoch=
    +pkgdesc="Software Defined Perimeter - GUI client"
    +arch=('x86_64')
    +url="https://www.cyxtera.com/essential-defense/appgate-sdp/support"
    +license=('custom')
    +# dependecies calculated by namcap
    +depends=('gconf' 'libsecret' 'gtk3' 'python' 'nss' 'libxss' 'nodejs' 'dnsmasq')
    +source=("https://sdpdownloads.cyxtera.com/AppGate-SDP-${_download_pkgver}/clients/${pkgname}_${pkgver}_amd64.deb"
    +        "appgatedriver.service")
    +options=(staticlibs)
    +prepare() {
    +    tar -xf data.tar.xz
    +}
    +package() {
    +    cp -dpr "${srcdir}"/{etc,lib,opt,usr} "${pkgdir}"
    +    mv -v "$pkgdir/lib/systemd/system" "$pkgdir/usr/lib/systemd/"
    +    rm -vrf "$pkgdir/lib"
    +    cp -v "$srcdir/appgatedriver.service" "$pkgdir/usr/lib/systemd/system/appgatedriver.service"
    +    mkdir -vp "$pkgdir/usr/share/licenses/appgate-sdp"
    +    cp -v "$pkgdir/usr/share/doc/appgate/copyright" "$pkgdir/usr/share/licenses/appgate-sdp"
    +    cp -v "$pkgdir/usr/share/doc/appgate/LICENSE.github" "$pkgdir/usr/share/licenses/appgate-sdp"
    +    cp -v "$pkgdir/usr/share/doc/appgate/LICENSES.chromium.html.bz2" "$pkgdir/usr/share/licenses/appgate-sdp"
    +}
    +md5sums=('17101aac7623c06d5fbb95f50cf3dbdc'
    +         '002644116e20b2d79fdb36b7677ab4cf')
    +
    +

    Let’s first make sure we have some dependencies. If you do not have yay, check it out.

    +
    yay -S dnsmasq gconf
    +

    Now, let’s install it:

    +
    makepkg -si
    +

    Running the client

    +

    Ok, let’s run the client by executing appgate.

    +

    It complains about not being able to connect.

    +

    Easy fix:

    +
    sudo systemctl start appgatedriver.service
    +

    Now we should be connected… but DNS is not working?

    +

    Fixing the DNS

    +

    Running resolvectl should display that something is not right.

    +

    Why is the DNS not being set by appgate?

    +
    $ head -3 /opt/appgate/linux/set_dns
    +#!/usr/bin/env python3
    +'''
    +This is used to set and unset the DNS.
    +

    It seems like python3 is required for the DNS setting to happen. +Let’s try to run it.

    +
    $ sudo /opt/appgate/linux/set_dns
    +/opt/appgate/linux/set_dns:88: SyntaxWarning: "is" with a literal. Did you mean "=="?
    +  servers = [( socket.AF_INET if x.version is 4 else socket.AF_INET6, map(int, x.packed)) for x in servers]
    +Traceback (most recent call last):
    +  File "/opt/appgate/linux/set_dns", line 30, in <module>
    +    import dbus
    +ModuleNotFoundError: No module named 'dbus'
    +

    Ok, let’s install it:

    +
    $ sudo python3.8 -m pip install dbus-python
    +

    Will it work now? Not yet. There’s another issue:

    +
    $ sudo /opt/appgate/linux/set_dns
    +/opt/appgate/linux/set_dns:88: SyntaxWarning: "is" with a literal. Did you mean "=="?
    +  servers = [( socket.AF_INET if x.version is 4 else socket.AF_INET6, map(int, x.packed)) for x in servers]
    +module 'platform' has no attribute 'linux_distribution'
    +

    This is a breaking change in Python3.8.

    +

    So what is calling platform.linux_distribution?

    +

    Let’s search for it:

    +
    $ sudo grep -r 'linux_distribution' /opt/appgate/linux/
    +/opt/appgate/linux/nm.py:    if platform.linux_distribution()[0] != 'Fedora':
    +

    Aha! So this is in the local AppGate source code. This should be an easy fix. Let’s just replace this line with:

    +
    if True: # Since we are not using Fedora :)
    +

    Wrapping up

    +

    It turns out there are breaking changes in Python3.8.

    +

    The docs say Deprecated since version 3.5, will be removed in version 3.8: See alternative like the distro package.

    +

    I suppose this highlights one of the caveats of relying upon the system’s python, rather than having an isolated, dedicated environment for all dependencies.

    +
    + + + + + +
    + + + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/blog/2021/09/06/what-to-do-with-a-homelab/index.html b/public/blog/2021/09/06/what-to-do-with-a-homelab/index.html new file mode 100644 index 00000000..e7feffdf --- /dev/null +++ b/public/blog/2021/09/06/what-to-do-with-a-homelab/index.html @@ -0,0 +1,410 @@ + + + + + + + + + + + + + + + + What To Do With A Homelab • davegallant + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +
    +

    What To Do With A Homelab

    + + +
    + + + +
    +
    + + + + +
    +

    A homelab can be an inexpensive way to host a multitude of internal/external services and learn a lot in the process.

    +

    Do you want host your own Media server? Ad blocker? Web server? +Are you interested in learning more about Linux? Virtualization? Networking? Security? +Building a homelab can be an entertaining playground to enhance your computer skills.

    +

    One of the best parts about building a homelab is that it doesn’t have to be a large investment in terms of hardware. One of the simplest ways to build a homelab is out of a refurbished computer. +Having multiple machines/nodes provides the advantage of increased redundancy, but starting out with a single node is enough to reap many of the benefits of having a homelab.

    +

    Virtualization

    +

    Virtualizing your hardware is an organized way of dividing up your machine’s resources. This can be done with something such as a Virtual Machine or something lighter like a container using LXC or runC. +Containers have much less overhead in terms of boot time and storage allocation. This Stack Overflow answer sums it up nicely.

    +

    image

    +

    A hypervisor such as Proxmox can be installed in minutes on a new machine. It provides a web interface and a straight-forward way to spin up new VMs and containers. Even if your plan is to run mostly docker containers, Proxmox can be a useful abstraction for managing VMs, disks and running scheduled backups. You can even run docker within an LXC container by enabling nested virtualization. You’ll want to ensure that VT-d and VT-x are enabled in the BIOS if you decide to install a hypervisor to manage your virtualization.

    +

    Services

    +

    So what are some useful services to deploy?

    +
      +
    • Jellyfin or Plex - basically a self-hosted Netflix that can be used to stream from multiple devices, and the best part is that you manage the content! Unlike Plex, Jellyfin is open source and can be found here.
    • +
    • changedetection - is a self-hosted equivalent to something like visualping.io that will notify you when a webpage changes and keep track of the diffs
    • +
    • Adguard or Pihole - can block a list of known trackers for all clients on your local network. I’ve used pihole for a long time, but have recently switched to Adguard since the UI is more modern and it has the ability to toggle on/off a pre-defined list of services, including Netflix (this is useful if you have stealthy young kids). Either of these will speed up your internet experience, simply because you won’t need to download all of the extra tracking bloat.
    • +
    • Gitea - A lightweight git server. I use this to mirror git repos from GitHub, GitLab, etc.
    • +
    • Homer - A customizable landing page for services you need to access (including the ability to quickly search).
    • +
    • Uptime Kuma - A fancy tool for monitoring the uptime of services.
    • +
    +

    There is a large number of services you can self-host, including your own applications that you might be developing. awesome-self-hosted provides a curated list of services that might be of interest to you.

    +

    VPN

    +

    You could certainly setup and manage your own VPN by using something like OpenVPN, but there is also something else you can try: tailscale. It is a very quick way to create fully-encrypted connections between clients. With its MagicDNS, your can reference the names of machines like homer rather than using an IP address. By using this mesh-like VPN, you can easily create a secure tunnel to your homelab from anywhere.

    +

    Monitoring

    +

    dashboard

    +

    Monitoring can become an important aspect of your homelab after it starts to become something that is relied upon. One of the simplest ways to setup some monitoring is using netdata. It can be installed on individual containers, VMs, and also a hypervisor (such as Proxmox). All of the monitoring works out of the box by detecting disks, memory, network interfaces, etc.

    +

    Additionally, agents installed on different machines can all be centrally viewed in netdata, and it can alert you when some of your infrastructure is down or in a degraded state. Adding additional nodes to netdata is as simple as a 1-line shell command.

    +

    As mentioned above, Uptime Kuma is a convenient way to track uptime and monitor the availability of your services.

    +

    uptime-kuma

    +

    In Summary

    +

    Building out a homelab can be a rewarding experience and it doesn’t require buying a rack full of expensive servers to get a significant amount of utility. There are many services that you can run that require very minimal setup, making it possible to get a server up and running in a short period of time, with monitoring, and that can be securely connected to remotely.

    +
    + + + + + +
    + + + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/blog/2021/09/08/why-i-threw-out-my-dotfiles/index.html b/public/blog/2021/09/08/why-i-threw-out-my-dotfiles/index.html new file mode 100644 index 00000000..fa88a8c4 --- /dev/null +++ b/public/blog/2021/09/08/why-i-threw-out-my-dotfiles/index.html @@ -0,0 +1,513 @@ + + + + + + + + + + + + + + + + Why I Threw Out My Dotfiles • davegallant + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +
    +

    Why I Threw Out My Dotfiles

    + + +
    + + + +
    +
    + + + + +
    +

    Over the years I have collected a number of dotfiles that I have shared across both Linux and macOS machines (~/.zshrc, ~/.config/git/config, ~/.config/tmux/tmux.conf, etc). I have tried several different ways to manage them, including bare git repos and utilities such as GNU Stow. These solutions work well enough, but I have since found what I would consider a much better solution for organizing user configuration: home-manager.

    +

    What is home-manager?

    +

    Before understanding home-manager, it is worth briefly discussing what nix is. nix is a package manager that originally spawned from a PhD thesis. Unlike other package managers, it uses symbolic links to keep track of the currently installed packages, keeping around the old ones in case you may want to rollback.

    +

    For example, I have used nix to install the package bind which includes dig. You can see that it is available on multiple platforms. The absolute path of dig can be found by running:

    +
    $ ls -lh $(which dig)
    +lrwxr-xr-x 73 root 31 Dec  1969 /run/current-system/sw/bin/dig -> /nix/store/0r4qdyprljd3dki57jn6c6a8dh2rbg9g-bind-9.16.16-dnsutils/bin/dig
    +

    Notice that there is a hash included in the file path? This is a nix store path and is computed by the nix package manager. This nix pill does a good job explaining how this hash is computed. All of the nix pills are worth a read, if you are interested in learning more about nix itself. However, using home-manager does not require extensive knowledge of nix.

    +

    Part of the nix ecosystem includes nixpkgs. Many popular tools can be found already packaged in this repository. As you can see with these stats, there is a large number of existing packages that are being maintained by the community. Contributing a new package is easy, and anyone can do it!

    +

    home-manager leverages the nix package manager (and nixpkgs), as well the nix language so that you can declaratively define your system configuration. I store my nix-config in git so that I can keep track of my packages and configurations, and retain a clean and informative git commit history so that I can understand what changed and why.

    +

    Setting up home-manager

    +
    +

    ⚠️ If you run this on your main machine, make sure you backup your configuration files first. home-manager is pretty good about not overwriting existing configuration, but it is better to have a backup! Alternatively, you could test this out on a VM or cloud instance.

    +
    +

    The first thing you should do is install nix:

    +
    curl -L https://nixos.org/nix/install | sh
    +

    It’s not a good idea to curl and execute files from the internet (without verifying integrity), so you might want to download the install script first and take a peak before executing it!

    +

    Open up a new shell in your terminal and running nix should work. If not, run . ~/.nix-profile/etc/profile.d/nix.sh

    +

    Now, install home-manager:

    +
    nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
    +nix-channel --update
    +nix-shell '<home-manager>' -A install
    +

    You should see a wave of /nix/store/* paths being displayed on your screen.

    +

    Now, to start off with a basic configuration, open up ~/.config/nixpkgs/home.nix in the editor of your choice and paste this in (you will want to change userName and homeDirectory):

    +
    { config, pkgs, ... }:
    +
    +{
    +  programs.home-manager.enable = true;
    +
    +  home = {
    +    username = "dave";
    +    homeDirectory = "/home/dave";
    +    stateVersion = "21.11";
    +    packages = with pkgs; [
    +      bind
    +      exa
    +      fd
    +      ripgrep
    +    ];
    +  };
    +
    +  programs = {
    +
    +    git = {
    +      enable = true;
    +      aliases = {
    +        aa = "add -A .";
    +        br = "branch";
    +        c = "commit -S";
    +        ca = "commit -S --amend";
    +        cb = "checkout -b";
    +        co = "checkout";
    +        d = "diff";
    +        l =
    +          "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit";
    +      };
    +
    +      delta = {
    +        enable = true;
    +
    +        options = {
    +          features = "line-numbers decorations";
    +          whitespace-error-style = "22 reverse";
    +          plus-style = "green bold ul '#198214'";
    +          decorations = {
    +            commit-decoration-style = "bold yellow box ul";
    +            file-style = "bold yellow ul";
    +            file-decoration-style = "none";
    +          };
    +        };
    +      };
    +
    +      extraConfig = {
    +        push = { default = "current"; };
    +        pull = { rebase = true; };
    +      };
    +
    +    };
    +
    +    starship = {
    +      enable = true;
    +      enableZshIntegration = true;
    +
    +      settings = {
    +        add_newline = false;
    +        scan_timeout = 10;
    +      };
    +    };
    +
    +    zsh = {
    +      enable = true;
    +      enableAutosuggestions = true;
    +      enableSyntaxHighlighting = true;
    +      history.size = 1000000;
    +
    +      localVariables = {
    +        CASE_SENSITIVE = "true";
    +        DISABLE_UNTRACKED_FILES_DIRTY = "true";
    +        RPROMPT = ""; # override because macOS defaults to filepath
    +        ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE = "fg=#838383,underline";
    +        ZSH_DISABLE_COMPFIX = "true";
    +      };
    +
    +      initExtra = ''
    +        export PAGER=less
    +      '';
    +
    +      shellAliases = {
    +        ".." = "cd ..";
    +        grep = "rg --smart-case";
    +        ls = "exa -la --git";
    +      };
    +
    +      "oh-my-zsh" = {
    +        enable = true;
    +        plugins = [
    +          "gitfast"
    +          "last-working-dir"
    +        ];
    +      };
    +
    +    };
    +
    +  };
    +}
    +

    Save the file and run:

    +
    home-manager switch
    +

    You should see another wave of /nix/store/* paths. The new configuration should now be active.

    +

    If you run zsh, you should see that you have starship and access to several other utils such as rg, fd, and exa.

    +

    This basic configuration above is also defining your ~/.config/git/config and .zshrc. If you already have either of these files, home-manager will complain about them already existing.

    +

    If you run cat ~/.zshrc, you will see the way these configuration files are generated.

    +

    You can extend this configuration for programs such as (neo)vim, emacs, alacritty, ssh, etc. To see other programs, take a look at home-manager/modules/programs.

    +

    Gateway To Nix

    +

    In ways, home-manager can be seen as a gateway to the nix ecosystem. If you have enjoyed the way you can declare user configuration with home-manager, you may be interested in expanding your configuration to include other system dependencies and configuration. For example, in Linux you can define your entire system’s configuration (including the kernel, kernel modules, networking, filesystems, etc) in nix. For macOS, there is nix-darwin that includes nix modules for configuring launchd, dock, and other preferences and services. You may also want to check out Nix Flakes: a more recent feature that allows you declare dependencies, and have them automatically pinned and hashed in flake.lock, similar to that of many modern package managers.

    +

    Wrapping up

    +

    The title of this post is slightly misleading, since it’s possible to retain some of your dotfiles and have them intermingle with home-manager by including them alongside nix. The idea of defining user configuration using nix can provide a clean way to maintain your configuration, and allow it to be portable across platforms. Is it worth the effort to migrate away from shell scripts and dotfiles? I’d say so.

    +
    + + + + + +
    + + + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/blog/2021/09/17/automatically-rotating-aws-access-keys/index.html b/public/blog/2021/09/17/automatically-rotating-aws-access-keys/index.html new file mode 100644 index 00000000..f3e791c2 --- /dev/null +++ b/public/blog/2021/09/17/automatically-rotating-aws-access-keys/index.html @@ -0,0 +1,380 @@ + + + + + + + + + + + + + + + + Automatically Rotating AWS Access Keys • davegallant + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +
    +

    Automatically Rotating AWS Access Keys

    + + +
    + + + +
    +
    + + + + +
    +

    Rotating credentials is a security best practice. This morning, I read a question about automatically rotating AWS Access Keys without having to go through the hassle of navigating the AWS console. There are some existing solutions already, but I decided to write a script since it was incredibly simple. The script could be packed up as a systemd/launchd service to continually rotate access keys in the background.

    +

    In the longer term, migrating my local workflows to aws-vault seems like a more secure solution. This would mean that credentials (even temporary session credentials) never have to be written in plaintext to disk (i.e. where AWS suggests). Any existing applications, such as terraform, could be have their credentials passed to them from aws-vault, which retrieves them from the OS’s secure keystore. There is even a rotate command included.

    +
    + + + + + +
    + + + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/blog/2021/10/11/replacing-docker-with-podman-on-macos-and-linux/index.html b/public/blog/2021/10/11/replacing-docker-with-podman-on-macos-and-linux/index.html new file mode 100644 index 00000000..a169bfa9 --- /dev/null +++ b/public/blog/2021/10/11/replacing-docker-with-podman-on-macos-and-linux/index.html @@ -0,0 +1,459 @@ + + + + + + + + + + + + + + + + Replacing docker with podman on macOS (and Linux) • davegallant + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +
    +

    Replacing docker with podman on macOS (and Linux)

    + + +
    + + + +
    +
    + + + + +
    +

    There are a number of reasons why you might want to replace docker, especially on macOS. The following feature bundled in Docker Desktop might have motivated you enough to consider replacing docker:

    + + + +

    Docker has been one of the larger influencers in the container world, helping to standardize the OCI Image Format Specification. For many developers, containers have become synonymous with terms like docker and Dockerfile (a file containing build instructions for a container image). Docker has certainly made it very convenient to build and run containers, but it is not the only solution for doing so.

    +

    This post briefly describes my experience swapping out docker for podman on macOS.

    +

    What is a container?

    +

    A container is a standard unit of software that packages up all application dependencies within it. Multiple containers can be run on a host machine all sharing the same kernel as the host. Linux namespaces help provide an isolated view of the system, including mnt, pid, net, ipc, uid, cgroup, and time. There is an in-depth video that discusses what containers are made from, and near the end there is a demonstration on how to build your own containers from the command line.

    +

    By easily allowing the necessary dependencies to live alongside the application code, containers make the “works on my machine” problem less of a problem.

    +

    Benefits of Podman

    +

    One of the most interesting features of Podman is that it is daemonless. There isn’t a process running on your system managing your containers. In contrast, the docker client is reliant upon the docker daemon (often running as root) to be able to build and run containers.

    +

    Podman is rootless by default. It is now possible to run the docker daemon rootless as well, but it’s still not the default behaviour.

    +

    I’ve also observed that so far my 2019 16" Macbook Pro hasn’t sounded like a jet engine, although I haven’t performed any disk-intensive operations yet.

    +

    Installing Podman

    +

    Running Podman on macOS is more involved than on Linux, because the podman-machine must run Linux inside of a virtual machine. Fortunately, the installation is made simple with brew (read this if you’re installing Podman on Linux):

    +
    brew install podman
    +

    The podman-machine must be started:

    +
    # This is not necessary on Linux
    +podman machine init
    +podman machine start
    +

    Running a container

    +

    Let’s try to pull an image:

    +
    $ podman pull alpine
    +Trying to pull docker.io/library/alpine:latest...
    +Getting image source signatures
    +Copying blob sha256:a0d0a0d46f8b52473982a3c466318f479767577551a53ffc9074c9fa7035982e
    +Copying config sha256:14119a10abf4669e8cdbdff324a9f9605d99697215a0d21c360fe8dfa8471bab
    +Writing manifest to image destination
    +Storing signatures
    +14119a10abf4669e8cdbdff324a9f9605d99697215a0d21c360fe8dfa8471bab
    +
    +

    If you’re having an issue pulling images, you may need to remove ~/.docker/config.json or remove the set of auths in the configuration as mentioned here.

    +
    +

    and then run and exec into the container:

    +
    $ podman run --rm -ti alpine
    +Error: error preparing container 99ace1ef8a78118e178372d91fd182e8166c399fbebe0f676af59fbf32ce205b for attach: error configuring network namespace for container 99ace1ef8a78118e178372d91fd182e8166c399fbebe0f676af59fbf32ce205b: error adding pod unruffled_bohr_unruffled_bohr to CNI network "podman": unexpected end of JSON input
    +

    What does this error mean? A bit of searching lead to this github issue.

    +

    Until the fix is released, a workaround is to just specify a port (even when it’s not needed):

    +
    podman run -p 4242 --rm -ti alpine
    +

    If you’re reading this from the future, there is a good chance specifying a port won’t be needed.

    +

    Another example of running a container with Podman can be found in the Jellyfin Documentation.

    +

    Aliasing docker with podman

    +

    Force of habit (or other scripts) may have you calling docker. To work around this:

    +
    alias docker=podman
    +

    podman-compose

    +

    You may be wondering: what about docker-compose? Well, there claims to be a drop-in replacement for it: podman-compose.

    +
    pip3 install --user podman-compose
    +

    Now let’s create a docker-compose.yml file to test:

    +
    cat << EOF >> docker-compose.yml
    +version: '2'
    +services:
    +  hello_world:
    +    image: ubuntu
    +    command: [/bin/echo, 'Hello world']
    +EOF
    +

    Now run:

    +
    $ podman-compose up
    +podman pod create --name=davegallant.github.io --share net
    +40d61dc6e95216c07d2b21cea6dcb30205bfcaf1260501fe652f05bddf7e595e
    +0
    +podman create --name=davegallant.github.io_hello_world_1 --pod=davegallant.github.io -l io.podman.compose.config-hash=123 -l io.podman.compose.project=davegallant.github.io -l io.podman.compose.version=0.0.1 -l com.docker.compose.container-number=1 -l com.docker.compose.service=hello_world --add-host hello_world:127.0.0.1 --add-host davegallant.github.io_hello_world_1:127.0.0.1 ubuntu /bin/echo Hello world
    +Resolved "ubuntu" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
    +Trying to pull docker.io/library/ubuntu:latest...
    +Getting image source signatures
    +Copying blob sha256:f3ef4ff62e0da0ef761ec1c8a578f3035bef51043e53ae1b13a20b3e03726d17
    +Copying blob sha256:f3ef4ff62e0da0ef761ec1c8a578f3035bef51043e53ae1b13a20b3e03726d17
    +Copying config sha256:597ce1600cf4ac5f449b66e75e840657bb53864434d6bd82f00b172544c32ee2
    +Writing manifest to image destination
    +Storing signatures
    +1a68b2fed3fdf2037b7aef16d770f22929eec1d799219ce30541df7876918576
    +0
    +podman start -a davegallant.github.io_hello_world_1
    +Hello world
    +

    This should more or less provide the same results you would come to expect with docker. The README does clearly state that podman-compose is under development.

    +

    Summary

    +

    Installing Podman on macOS was not seamless, but it was manageable well within 30 minutes. I would recommend giving Podman a try to anyone who is unhappy with experiencing forced docker updates, or who is interested in using a more modern technology for running containers.

    +

    One caveat to mention is that there isn’t an official graphical user interface for Podman, but there is an open issue considering one. If you rely heavily on Docker Desktop’s UI, you may not be as interested in using podman yet.

    +
    +

    Update: After further usage, bind mounts do not seem to work out of the box when the client and host are on different machines. A rather involved solution using sshfs was shared here.

    +
    +

    I had been experimenting with Podman on Linux before writing this, but after listening to this podcast episode, I was inspired to give Podman a try on macOS.

    +
    + + + + + +
    + + + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/blog/2021/11/14/running-k3s-in-lxc-on-proxmox/index.html b/public/blog/2021/11/14/running-k3s-in-lxc-on-proxmox/index.html new file mode 100644 index 00000000..a7a0905e --- /dev/null +++ b/public/blog/2021/11/14/running-k3s-in-lxc-on-proxmox/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + + + + + + Running K3s in LXC on Proxmox • davegallant + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +
    +

    Running K3s in LXC on Proxmox

    + + +
    + + + +
    +
    + + + + +
    +

    It has been a while since I’ve actively used Kubernetes and wanted to explore the evolution of tools such as Helm and Tekton. I decided to deploy K3s, since I’ve had success with deploying it on resource-contrained Raspberry Pis in the past. I thought that this time it’d be convenient to have K3s running in a LXC container on Proxmox. This would allow for easy snapshotting of the entire Kubernetes deployment. LXC containers also provide an efficient way to use a machine’s resources.

    +

    What is K3s?

    +

    K3s is a Kubernetes distro that advertises itself as a lightweight binary with a much smaller memory-footprint than traditional k8s. K3s is not a fork of k8s as it seeks to remain as close to upstream as it possibly can.

    +

    Configure Proxmox

    +

    This gist contains snippets and discussion on how to deploy K3s in LXC on Proxmox. It mentions that bridge-nf-call-iptables should be loaded, but I did not understand the benefit of doing this.

    +

    Disable swap

    +

    There is an issue on Kubernetes regarding swap here. There claims to be support for swap in 1.22, but for now let’s disable it:

    +
    sysctl vm.swappiness=0
    +swapoff -a
    +

    It might be worth experimenting with swap enabled in the future to see how that might affect performance.

    +

    Enable IP Forwarding

    +

    To avoid IP Forwarding issues with Traefik, run the following on the host:

    +
    sudo sysctl net.ipv4.ip_forward=1
    +sudo sysctl net.ipv6.conf.all.forwarding=1
    +sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
    +sudo sed -i 's/#net.ipv6.conf.all.forwarding=1/net.ipv6.conf.all.forwarding=1/g' /etc/sysctl.conf
    +

    Create LXC container

    +

    Create an LXC container in the Proxmox interface as you normally would. Remember to:

    +
      +
    • Uncheck unprivileged container
    • +
    • Use a LXC template (I chose a debian 11 template downloaded with pveam)
    • +
    • In memory, set swap to 0
    • +
    • Create and start the container
    • +
    +

    Modify container config

    +

    Now back on the host run pct list to determine what VMID it was given.

    +

    Open /etc/pve/lxc/$VMID.conf and append:

    +
    lxc.apparmor.profile: unconfined
    +lxc.cap.drop:
    +lxc.mount.auto: "proc:rw sys:rw"
    +lxc.cgroup2.devices.allow: c 10:200 rwm
    +

    All of the above configurations are described in the manpages. +Notice that cgroup2 is used since Proxmox VE 7.0 has switched to a pure cgroupv2 environment.

    +

    Thankfully cgroup v2 support has been supported in k3s with these contributions:

    + +

    Enable shared host mounts

    +

    From within the container, run:

    +
    echo '#!/bin/sh -e
    +ln -s /dev/console /dev/kmsg
    +mount --make-rshared /' > /etc/rc.local
    +chmod +x /etc/rc.local
    +reboot
    +

    Install K3s

    +

    One of the simplest ways to install K3s on a remote host is to use k3sup. +Ensure that you supply a valid CONTAINER_IP and choose the k3s-version you prefer. +As of 2021/11, it is still defaulting to the 1.19 channel, so I overrode it to 1.22 for cgroup v2 support. See the published releases here.

    +
    ssh-copy-id root@$CONTAINER_IP
    +k3sup install --ip $CONTAINER_IP --user root --k3s-version v1.22.3+k3s1
    +

    If all goes well, you should see a path to the kubeconfig generated. I moved this into ~/.kube/config so that kubectl would read this by default.

    +

    Wrapping up

    +

    Installing K3s in LXC on Proxmox works with a few tweaks to the default configuration. I later followed the Tekton’s Getting Started guide and was able to deploy it in a few commands.

    +
    $ kubectl get all --namespace tekton-pipelines
    +NAME                                               READY   STATUS    RESTARTS      AGE
    +pod/tekton-pipelines-webhook-8566ff9b6b-6rnh8      1/1     Running   1 (50m ago)   12h
    +pod/tekton-dashboard-6bf858f977-qt4hr              1/1     Running   1 (50m ago)   11h
    +pod/tekton-pipelines-controller-69fd7498d8-f57m4   1/1     Running   1 (50m ago)   12h
    +
    +NAME                                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                              AGE
    +service/tekton-pipelines-controller   ClusterIP   10.43.44.245    <none>        9090/TCP,8080/TCP                    12h
    +service/tekton-pipelines-webhook      ClusterIP   10.43.183.242   <none>        9090/TCP,8008/TCP,443/TCP,8080/TCP   12h
    +service/tekton-dashboard              ClusterIP   10.43.87.97     <none>        9097/TCP                             11h
    +
    +NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    +deployment.apps/tekton-pipelines-webhook      1/1     1            1           12h
    +deployment.apps/tekton-dashboard              1/1     1            1           11h
    +deployment.apps/tekton-pipelines-controller   1/1     1            1           12h
    +
    +NAME                                                     DESIRED   CURRENT   READY   AGE
    +replicaset.apps/tekton-pipelines-webhook-8566ff9b6b      1         1         1       12h
    +replicaset.apps/tekton-dashboard-6bf858f977              1         1         1       11h
    +replicaset.apps/tekton-pipelines-controller-69fd7498d8   1         1         1       12h
    +
    +NAME                                                           REFERENCE                             TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
    +horizontalpodautoscaler.autoscaling/tekton-pipelines-webhook   Deployment/tekton-pipelines-webhook   9%/100%   1         5         1          12h
    +

    I made sure to install Tailscale in the container so that I can easily access K3s from anywhere.

    +

    If I’m feeling adventurous, I might experiment with K3s rootless.

    +
    + + + + + +
    + + + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/css/custom.css b/public/css/custom.css new file mode 100644 index 00000000..8717e30e --- /dev/null +++ b/public/css/custom.css @@ -0,0 +1,23 @@ +@media (prefers-color-scheme: dark) { + html { + filter: invert(80%); + } + + html img { + filter: invert(100%); + } +} + +.container{ + max-width: 900px; +} + +.site { + max-width: 1200px; +} + +.twitter-tweet-rendered { + display:block; + margin-left:auto; + margin-right:auto; +} diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 00000000..f80f2e37 Binary files /dev/null and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 00000000..9e266ad9 Binary files /dev/null and b/public/favicon-32x32.png differ diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 00000000..fafbdafe Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 00000000..acde0887 Binary files /dev/null and b/public/favicon.png differ diff --git a/public/images/logo.png b/public/images/logo.png new file mode 100644 index 00000000..23ecde6b Binary files /dev/null and b/public/images/logo.png differ diff --git a/public/images/netdata.png b/public/images/netdata.png new file mode 100644 index 00000000..e443c593 Binary files /dev/null and b/public/images/netdata.png differ diff --git a/public/images/proxmox.png b/public/images/proxmox.png new file mode 100644 index 00000000..f371c6d2 Binary files /dev/null and b/public/images/proxmox.png differ diff --git a/public/images/uptime-kuma.png b/public/images/uptime-kuma.png new file mode 100644 index 00000000..f6009f7b Binary files /dev/null and b/public/images/uptime-kuma.png differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 00000000..cc895c87 --- /dev/null +++ b/public/index.html @@ -0,0 +1,363 @@ + + + + + + + + + + + + + + + + davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Entries

    +
    + + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/index.xml b/public/index.xml new file mode 100644 index 00000000..71174144 --- /dev/null +++ b/public/index.xml @@ -0,0 +1,83 @@ + + + + davegallant + / + Recent content on davegallant + Hugo -- gohugo.io + en-us + Sun, 14 Nov 2021 10:07:03 -0500 + + About + /about/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /about/ + I&rsquo;m a software engineer with a passion for open-source, infrastructure, tooling and security. + + + + Running K3s in LXC on Proxmox + /blog/2021/11/14/running-k3s-in-lxc-on-proxmox/ + Sun, 14 Nov 2021 10:07:03 -0500 + + /blog/2021/11/14/running-k3s-in-lxc-on-proxmox/ + + + + + Replacing docker with podman on macOS (and Linux) + /blog/2021/10/11/replacing-docker-with-podman-on-macos-and-linux/ + Mon, 11 Oct 2021 10:43:35 -0400 + + /blog/2021/10/11/replacing-docker-with-podman-on-macos-and-linux/ + + + + + Automatically Rotating AWS Access Keys + /blog/2021/09/17/automatically-rotating-aws-access-keys/ + Fri, 17 Sep 2021 12:48:33 -0400 + + /blog/2021/09/17/automatically-rotating-aws-access-keys/ + + + + + Why I Threw Out My Dotfiles + /blog/2021/09/08/why-i-threw-out-my-dotfiles/ + Wed, 08 Sep 2021 00:42:33 -0400 + + /blog/2021/09/08/why-i-threw-out-my-dotfiles/ + + + + + What To Do With A Homelab + /blog/2021/09/06/what-to-do-with-a-homelab/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /blog/2021/09/06/what-to-do-with-a-homelab/ + <p>A homelab can be an inexpensive way to host a multitude of internal/external services and learn <em>a lot</em> in the process.</p> + + + + AppGate SDP on Arch Linux + /blog/2020/03/16/appgate-sdp-on-arch-linux/ + Mon, 16 Mar 2020 22:00:15 -0400 + + /blog/2020/03/16/appgate-sdp-on-arch-linux/ + <p>AppGate SDP provides a Zero Trust network. This post describes how to get AppGate SDP <code>4.3.2</code> working on Arch Linux.</p> + + + + + /page/search/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /page/search/ + test + + + + diff --git a/public/keybase.txt b/public/keybase.txt new file mode 100644 index 00000000..9ae498da --- /dev/null +++ b/public/keybase.txt @@ -0,0 +1,56 @@ +================================================================== +https://keybase.io/dgallant +-------------------------------------------------------------------- + +I hereby claim: + + * I am an admin of https://davegallant.github.io + * I am dgallant (https://keybase.io/dgallant) on keybase. + * I have a public key ASDIaXVCZNVLcI2nLjiVywkkpRY2wzTUb1nMiDsbGz1mFwo + +To do so, I am signing this object: + +{ + "body": { + "key": { + "eldest_kid": "0120132311ef8d70a8f35f284eb17a45cbcdf653ce040064dfd4a336d48e2dd3c5ee0a", + "host": "keybase.io", + "kid": "0120c869754264d54b708da72e3895cb0924a51636c334d46f59cc883b1b1b3d66170a", + "uid": "117fb0e36a0168fe7c1cb75c32fa1119", + "username": "dgallant" + }, + "merkle_root": { + "ctime": 1584423716, + "hash": "a447336f6b4b3fdc7acd69bfb67724ba417d355c35dff289f0b71edd9a61eb0abca168842e35d030a7f72684961e284ff3e72169cccc822f123124ab1f28bae8", + "hash_meta": "877e40ccac9c0bb3897269f3e270219cfc3b8f51b218249053cb9cef216394c6", + "seqno": 15418771 + }, + "service": { + "entropy": "GF5GAzsSwbL3MwyHTrWacqXg", + "hostname": "davegallant.github.io", + "protocol": "https:" + }, + "type": "web_service_binding", + "version": 2 + }, + "client": { + "name": "keybase.io go client", + "version": "5.3.0" + }, + "ctime": 1584424574, + "expire_in": 504576000, + "prev": "09dc7ed70fa820ed3f8bcfaef95804ab477cc82a1f1de366e38e59ef611631b1", + "seqno": 51, + "tag": "signature" +} + +which yields the signature: + +hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEgyGl1QmTVS3CNpy44lcsJJKUWNsM01G9ZzIg7Gxs9ZhcKp3BheWxvYWTESpcCM8QgCdx+1w+oIO0/i8+u+VgEq0d8yCofHeNm445Z72EWMbHEIATfVmncQJ7AOYvyF/Cmi0WNPdLXRg0owqqF/mgfpwa7AgHCo3NpZ8RASN9ahvUTPy4rvmYlLIwDzyu0fmUiNktCIi2VHDNQfLzzAKCPd6uh54dvGMtoB2JG4DZsRQN56PWx/auuGr5JC6hzaWdfdHlwZSCkaGFzaIKkdHlwZQildmFsdWXEIEaFPIAAHow3jTSI4d1GnlmNomNiJPYzYNDjpGd5QMfDo3RhZ80CAqd2ZXJzaW9uAQ== + +And finally, I am proving ownership of this host by posting or +appending to this document. + +View my publicly-auditable identity here: https://keybase.io/dgallant + +================================================================== diff --git a/public/page/index.html b/public/page/index.html new file mode 100644 index 00000000..1252d9bc --- /dev/null +++ b/public/page/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Pages • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Pages

    + + + +
    +
    +
    + + + + +
    +
      + +
    • +
      + + Posted on + + + +
      +
      +

      + +

      +
      +
    • + + +
    + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/page/index.xml b/public/page/index.xml new file mode 100644 index 00000000..5b983142 --- /dev/null +++ b/public/page/index.xml @@ -0,0 +1,19 @@ + + + + Pages on davegallant + /page/ + Recent content in Pages on davegallant + Hugo -- gohugo.io + en-us + + + /page/search/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /page/search/ + test + + + + diff --git a/public/page/page/1/index.html b/public/page/page/1/index.html new file mode 100644 index 00000000..b19c8560 --- /dev/null +++ b/public/page/page/1/index.html @@ -0,0 +1 @@ +/page/ \ No newline at end of file diff --git a/public/page/search/index.html b/public/page/search/index.html new file mode 100644 index 00000000..b41a2038 --- /dev/null +++ b/public/page/search/index.html @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + • davegallant + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    + + + +
    +
    +
    + + + +
    +
    +

    test

    + +
    + +
    + + +
    + + + +
      +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/page/search/index.json b/public/page/search/index.json new file mode 100644 index 00000000..aa4f265b --- /dev/null +++ b/public/page/search/index.json @@ -0,0 +1 @@ +[{"content":"I\u0026rsquo;m a software engineer with a passion for open-source, infrastructure, tooling and security.\n","href":"/about/","title":"About"},{"content":"","href":"/","title":"davegallant"},{"content":"","href":"/tags/k3s/","title":"k3s"},{"content":"","href":"/tags/lxc/","title":"lxc"},{"content":"","href":"/post/","title":"Posts"},{"content":"","href":"/tags/proxmox/","title":"proxmox"},{"content":"It has been a while since I\u0026rsquo;ve actively used Kubernetes and wanted to explore the evolution of tools such as Helm and Tekton. I decided to deploy K3s, since I\u0026rsquo;ve had success with deploying it on resource-contrained Raspberry Pis in the past. I thought that this time it\u0026rsquo;d be convenient to have K3s running in a LXC container on Proxmox. This would allow for easy snapshotting of the entire Kubernetes deployment. LXC containers also provide an efficient way to use a machine\u0026rsquo;s resources.\nWhat is K3s? K3s is a Kubernetes distro that advertises itself as a lightweight binary with a much smaller memory-footprint than traditional k8s. K3s is not a fork of k8s as it seeks to remain as close to upstream as it possibly can.\nConfigure Proxmox This gist contains snippets and discussion on how to deploy K3s in LXC on Proxmox. It mentions that bridge-nf-call-iptables should be loaded, but I did not understand the benefit of doing this.\nDisable swap There is an issue on Kubernetes regarding swap here. There claims to be support for swap in 1.22, but for now let\u0026rsquo;s disable it:\nsysctl vm.swappiness=0 swapoff -a It might be worth experimenting with swap enabled in the future to see how that might affect performance.\nEnable IP Forwarding To avoid IP Forwarding issues with Traefik, run the following on the host:\nsudo sysctl net.ipv4.ip_forward=1 sudo sysctl net.ipv6.conf.all.forwarding=1 sudo sed -i \u0026#39;s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g\u0026#39; /etc/sysctl.conf sudo sed -i \u0026#39;s/#net.ipv6.conf.all.forwarding=1/net.ipv6.conf.all.forwarding=1/g\u0026#39; /etc/sysctl.conf Create LXC container Create an LXC container in the Proxmox interface as you normally would. Remember to:\n Uncheck unprivileged container Use a LXC template (I chose a debian 11 template downloaded with pveam) In memory, set swap to 0 Create and start the container Modify container config Now back on the host run pct list to determine what VMID it was given.\nOpen /etc/pve/lxc/$VMID.conf and append:\nlxc.apparmor.profile: unconfined lxc.cap.drop: lxc.mount.auto: \u0026#34;proc:rw sys:rw\u0026#34; lxc.cgroup2.devices.allow: c 10:200 rwm All of the above configurations are described in the manpages. Notice that cgroup2 is used since Proxmox VE 7.0 has switched to a pure cgroupv2 environment.\nThankfully cgroup v2 support has been supported in k3s with these contributions:\n https://github.com/k3s-io/k3s/pull/2584 https://github.com/k3s-io/k3s/pull/2844 Enable shared host mounts From within the container, run:\necho \u0026#39;#!/bin/sh -e ln -s /dev/console /dev/kmsg mount --make-rshared /\u0026#39; \u0026gt; /etc/rc.local chmod +x /etc/rc.local reboot Install K3s One of the simplest ways to install K3s on a remote host is to use k3sup. Ensure that you supply a valid CONTAINER_IP and choose the k3s-version you prefer. As of 2021/11, it is still defaulting to the 1.19 channel, so I overrode it to 1.22 for cgroup v2 support. See the published releases here.\nssh-copy-id root@$CONTAINER_IP k3sup install --ip $CONTAINER_IP --user root --k3s-version v1.22.3+k3s1 If all goes well, you should see a path to the kubeconfig generated. I moved this into ~/.kube/config so that kubectl would read this by default.\nWrapping up Installing K3s in LXC on Proxmox works with a few tweaks to the default configuration. I later followed the Tekton\u0026rsquo;s Getting Started guide and was able to deploy it in a few commands.\n$ kubectl get all --namespace tekton-pipelines NAME READY STATUS RESTARTS AGE pod/tekton-pipelines-webhook-8566ff9b6b-6rnh8 1/1 Running 1 (50m ago) 12h pod/tekton-dashboard-6bf858f977-qt4hr 1/1 Running 1 (50m ago) 11h pod/tekton-pipelines-controller-69fd7498d8-f57m4 1/1 Running 1 (50m ago) 12h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/tekton-pipelines-controller ClusterIP 10.43.44.245 \u0026lt;none\u0026gt; 9090/TCP,8080/TCP 12h service/tekton-pipelines-webhook ClusterIP 10.43.183.242 \u0026lt;none\u0026gt; 9090/TCP,8008/TCP,443/TCP,8080/TCP 12h service/tekton-dashboard ClusterIP 10.43.87.97 \u0026lt;none\u0026gt; 9097/TCP 11h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/tekton-pipelines-webhook 1/1 1 1 12h deployment.apps/tekton-dashboard 1/1 1 1 11h deployment.apps/tekton-pipelines-controller 1/1 1 1 12h NAME DESIRED CURRENT READY AGE replicaset.apps/tekton-pipelines-webhook-8566ff9b6b 1 1 1 12h replicaset.apps/tekton-dashboard-6bf858f977 1 1 1 11h replicaset.apps/tekton-pipelines-controller-69fd7498d8 1 1 1 12h NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE horizontalpodautoscaler.autoscaling/tekton-pipelines-webhook Deployment/tekton-pipelines-webhook 9%/100% 1 5 1 12h I made sure to install Tailscale in the container so that I can easily access K3s from anywhere.\nIf I\u0026rsquo;m feeling adventurous, I might experiment with K3s rootless.\n","href":"/blog/2021/11/14/running-k3s-in-lxc-on-proxmox/","title":"Running K3s in LXC on Proxmox"},{"content":"","href":"/tags/","title":"Tags"},{"content":"","href":"/tags/containers/","title":"containers"},{"content":"","href":"/tags/docker/","title":"docker"},{"content":"","href":"/tags/podman/","title":"podman"},{"content":"There are a number of reasons why you might want to replace docker, especially on macOS. The following feature bundled in Docker Desktop might have motivated you enough to consider replacing docker:\n...ignoring Docker updates is a paid feature now?? pic.twitter.com/ZxKW3b9LQM\n\u0026mdash; Brendan Dolan-Gavitt (@moyix) May 1, 2021 Docker has been one of the larger influencers in the container world, helping to standardize the OCI Image Format Specification. For many developers, containers have become synonymous with terms like docker and Dockerfile (a file containing build instructions for a container image). Docker has certainly made it very convenient to build and run containers, but it is not the only solution for doing so.\nThis post briefly describes my experience swapping out docker for podman on macOS.\nWhat is a container? A container is a standard unit of software that packages up all application dependencies within it. Multiple containers can be run on a host machine all sharing the same kernel as the host. Linux namespaces help provide an isolated view of the system, including mnt, pid, net, ipc, uid, cgroup, and time. There is an in-depth video that discusses what containers are made from, and near the end there is a demonstration on how to build your own containers from the command line.\nBy easily allowing the necessary dependencies to live alongside the application code, containers make the \u0026ldquo;works on my machine\u0026rdquo; problem less of a problem.\nBenefits of Podman One of the most interesting features of Podman is that it is daemonless. There isn\u0026rsquo;t a process running on your system managing your containers. In contrast, the docker client is reliant upon the docker daemon (often running as root) to be able to build and run containers.\nPodman is rootless by default. It is now possible to run the docker daemon rootless as well, but it\u0026rsquo;s still not the default behaviour.\nI\u0026rsquo;ve also observed that so far my 2019 16\u0026quot; Macbook Pro hasn\u0026rsquo;t sounded like a jet engine, although I haven\u0026rsquo;t performed any disk-intensive operations yet.\nInstalling Podman Running Podman on macOS is more involved than on Linux, because the podman-machine must run Linux inside of a virtual machine. Fortunately, the installation is made simple with brew (read this if you\u0026rsquo;re installing Podman on Linux):\nbrew install podman The podman-machine must be started:\n# This is not necessary on Linux podman machine init podman machine start Running a container Let\u0026rsquo;s try to pull an image:\n$ podman pull alpine Trying to pull docker.io/library/alpine:latest... Getting image source signatures Copying blob sha256:a0d0a0d46f8b52473982a3c466318f479767577551a53ffc9074c9fa7035982e Copying config sha256:14119a10abf4669e8cdbdff324a9f9605d99697215a0d21c360fe8dfa8471bab Writing manifest to image destination Storing signatures 14119a10abf4669e8cdbdff324a9f9605d99697215a0d21c360fe8dfa8471bab If you\u0026rsquo;re having an issue pulling images, you may need to remove ~/.docker/config.json or remove the set of auths in the configuration as mentioned here.\n and then run and exec into the container:\n$ podman run --rm -ti alpine Error: error preparing container 99ace1ef8a78118e178372d91fd182e8166c399fbebe0f676af59fbf32ce205b for attach: error configuring network namespace for container 99ace1ef8a78118e178372d91fd182e8166c399fbebe0f676af59fbf32ce205b: error adding pod unruffled_bohr_unruffled_bohr to CNI network \u0026#34;podman\u0026#34;: unexpected end of JSON input What does this error mean? A bit of searching lead to this github issue.\nUntil the fix is released, a workaround is to just specify a port (even when it\u0026rsquo;s not needed):\npodman run -p 4242 --rm -ti alpine If you\u0026rsquo;re reading this from the future, there is a good chance specifying a port won\u0026rsquo;t be needed.\nAnother example of running a container with Podman can be found in the Jellyfin Documentation.\nAliasing docker with podman Force of habit (or other scripts) may have you calling docker. To work around this:\nalias docker=podman podman-compose You may be wondering: what about docker-compose? Well, there claims to be a drop-in replacement for it: podman-compose.\npip3 install --user podman-compose Now let\u0026rsquo;s create a docker-compose.yml file to test:\ncat \u0026lt;\u0026lt; EOF \u0026gt;\u0026gt; docker-compose.yml version: \u0026#39;2\u0026#39; services: hello_world: image: ubuntu command: [/bin/echo, \u0026#39;Hello world\u0026#39;] EOF Now run:\n$ podman-compose up podman pod create --name=davegallant.github.io --share net 40d61dc6e95216c07d2b21cea6dcb30205bfcaf1260501fe652f05bddf7e595e 0 podman create --name=davegallant.github.io_hello_world_1 --pod=davegallant.github.io -l io.podman.compose.config-hash=123 -l io.podman.compose.project=davegallant.github.io -l io.podman.compose.version=0.0.1 -l com.docker.compose.container-number=1 -l com.docker.compose.service=hello_world --add-host hello_world:127.0.0.1 --add-host davegallant.github.io_hello_world_1:127.0.0.1 ubuntu /bin/echo Hello world Resolved \u0026#34;ubuntu\u0026#34; as an alias (/etc/containers/registries.conf.d/000-shortnames.conf) Trying to pull docker.io/library/ubuntu:latest... Getting image source signatures Copying blob sha256:f3ef4ff62e0da0ef761ec1c8a578f3035bef51043e53ae1b13a20b3e03726d17 Copying blob sha256:f3ef4ff62e0da0ef761ec1c8a578f3035bef51043e53ae1b13a20b3e03726d17 Copying config sha256:597ce1600cf4ac5f449b66e75e840657bb53864434d6bd82f00b172544c32ee2 Writing manifest to image destination Storing signatures 1a68b2fed3fdf2037b7aef16d770f22929eec1d799219ce30541df7876918576 0 podman start -a davegallant.github.io_hello_world_1 Hello world This should more or less provide the same results you would come to expect with docker. The README does clearly state that podman-compose is under development.\nSummary Installing Podman on macOS was not seamless, but it was manageable well within 30 minutes. I would recommend giving Podman a try to anyone who is unhappy with experiencing forced docker updates, or who is interested in using a more modern technology for running containers.\nOne caveat to mention is that there isn\u0026rsquo;t an official graphical user interface for Podman, but there is an open issue considering one. If you rely heavily on Docker Desktop\u0026rsquo;s UI, you may not be as interested in using podman yet.\n Update: After further usage, bind mounts do not seem to work out of the box when the client and host are on different machines. A rather involved solution using sshfs was shared here.\n I had been experimenting with Podman on Linux before writing this, but after listening to this podcast episode, I was inspired to give Podman a try on macOS.\n","href":"/blog/2021/10/11/replacing-docker-with-podman-on-macos-and-linux/","title":"Replacing docker with podman on macOS (and Linux)"},{"content":"Rotating credentials is a security best practice. This morning, I read a question about automatically rotating AWS Access Keys without having to go through the hassle of navigating the AWS console. There are some existing solutions already, but I decided to write a script since it was incredibly simple. The script could be packed up as a systemd/launchd service to continually rotate access keys in the background.\nIn the longer term, migrating my local workflows to aws-vault seems like a more secure solution. This would mean that credentials (even temporary session credentials) never have to be written in plaintext to disk (i.e. where AWS suggests). Any existing applications, such as terraform, could be have their credentials passed to them from aws-vault, which retrieves them from the OS\u0026rsquo;s secure keystore. There is even a rotate command included.\n","href":"/blog/2021/09/17/automatically-rotating-aws-access-keys/","title":"Automatically Rotating AWS Access Keys"},{"content":"","href":"/tags/aws/","title":"aws"},{"content":"","href":"/tags/aws-vault/","title":"aws-vault"},{"content":"","href":"/tags/python/","title":"python"},{"content":"","href":"/tags/security/","title":"security"},{"content":"","href":"/tags/dotfiles/","title":"dotfiles"},{"content":"","href":"/tags/home-manager/","title":"home-manager"},{"content":"","href":"/tags/nix/","title":"nix"},{"content":"Over the years I have collected a number of dotfiles that I have shared across both Linux and macOS machines (~/.zshrc, ~/.config/git/config, ~/.config/tmux/tmux.conf, etc). I have tried several different ways to manage them, including bare git repos and utilities such as GNU Stow. These solutions work well enough, but I have since found what I would consider a much better solution for organizing user configuration: home-manager.\nWhat is home-manager? Before understanding home-manager, it is worth briefly discussing what nix is. nix is a package manager that originally spawned from a PhD thesis. Unlike other package managers, it uses symbolic links to keep track of the currently installed packages, keeping around the old ones in case you may want to rollback.\nFor example, I have used nix to install the package bind which includes dig. You can see that it is available on multiple platforms. The absolute path of dig can be found by running:\n$ ls -lh $(which dig) lrwxr-xr-x 73 root 31 Dec 1969 /run/current-system/sw/bin/dig -\u0026gt; /nix/store/0r4qdyprljd3dki57jn6c6a8dh2rbg9g-bind-9.16.16-dnsutils/bin/dig Notice that there is a hash included in the file path? This is a nix store path and is computed by the nix package manager. This nix pill does a good job explaining how this hash is computed. All of the nix pills are worth a read, if you are interested in learning more about nix itself. However, using home-manager does not require extensive knowledge of nix.\nPart of the nix ecosystem includes nixpkgs. Many popular tools can be found already packaged in this repository. As you can see with these stats, there is a large number of existing packages that are being maintained by the community. Contributing a new package is easy, and anyone can do it!\nhome-manager leverages the nix package manager (and nixpkgs), as well the nix language so that you can declaratively define your system configuration. I store my nix-config in git so that I can keep track of my packages and configurations, and retain a clean and informative git commit history so that I can understand what changed and why.\nSetting up home-manager ⚠️ If you run this on your main machine, make sure you backup your configuration files first. home-manager is pretty good about not overwriting existing configuration, but it is better to have a backup! Alternatively, you could test this out on a VM or cloud instance.\n The first thing you should do is install nix:\ncurl -L https://nixos.org/nix/install | sh It\u0026rsquo;s not a good idea to curl and execute files from the internet (without verifying integrity), so you might want to download the install script first and take a peak before executing it!\nOpen up a new shell in your terminal and running nix should work. If not, run . ~/.nix-profile/etc/profile.d/nix.sh\nNow, install home-manager:\nnix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager nix-channel --update nix-shell \u0026#39;\u0026lt;home-manager\u0026gt;\u0026#39; -A install You should see a wave of /nix/store/* paths being displayed on your screen.\nNow, to start off with a basic configuration, open up ~/.config/nixpkgs/home.nix in the editor of your choice and paste this in (you will want to change userName and homeDirectory):\n{ config, pkgs, ... }: { programs.home-manager.enable = true; home = { username = \u0026#34;dave\u0026#34;; homeDirectory = \u0026#34;/home/dave\u0026#34;; stateVersion = \u0026#34;21.11\u0026#34;; packages = with pkgs; [ bind exa fd ripgrep ]; }; programs = { git = { enable = true; aliases = { aa = \u0026#34;add -A .\u0026#34;; br = \u0026#34;branch\u0026#34;; c = \u0026#34;commit -S\u0026#34;; ca = \u0026#34;commit -S --amend\u0026#34;; cb = \u0026#34;checkout -b\u0026#34;; co = \u0026#34;checkout\u0026#34;; d = \u0026#34;diff\u0026#34;; l = \u0026#34;log --graph --pretty=format:\u0026#39;%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)\u0026lt;%an\u0026gt;%Creset\u0026#39; --abbrev-commit\u0026#34;; }; delta = { enable = true; options = { features = \u0026#34;line-numbers decorations\u0026#34;; whitespace-error-style = \u0026#34;22 reverse\u0026#34;; plus-style = \u0026#34;green bold ul \u0026#39;#198214\u0026#39;\u0026#34;; decorations = { commit-decoration-style = \u0026#34;bold yellow box ul\u0026#34;; file-style = \u0026#34;bold yellow ul\u0026#34;; file-decoration-style = \u0026#34;none\u0026#34;; }; }; }; extraConfig = { push = { default = \u0026#34;current\u0026#34;; }; pull = { rebase = true; }; }; }; starship = { enable = true; enableZshIntegration = true; settings = { add_newline = false; scan_timeout = 10; }; }; zsh = { enable = true; enableAutosuggestions = true; enableSyntaxHighlighting = true; history.size = 1000000; localVariables = { CASE_SENSITIVE = \u0026#34;true\u0026#34;; DISABLE_UNTRACKED_FILES_DIRTY = \u0026#34;true\u0026#34;; RPROMPT = \u0026#34;\u0026#34;; # override because macOS defaults to filepath ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE = \u0026#34;fg=#838383,underline\u0026#34;; ZSH_DISABLE_COMPFIX = \u0026#34;true\u0026#34;; }; initExtra = \u0026#39;\u0026#39; export PAGER=less \u0026#39;\u0026#39;; shellAliases = { \u0026#34;..\u0026#34; = \u0026#34;cd ..\u0026#34;; grep = \u0026#34;rg --smart-case\u0026#34;; ls = \u0026#34;exa -la --git\u0026#34;; }; \u0026#34;oh-my-zsh\u0026#34; = { enable = true; plugins = [ \u0026#34;gitfast\u0026#34; \u0026#34;last-working-dir\u0026#34; ]; }; }; }; } Save the file and run:\nhome-manager switch You should see another wave of /nix/store/* paths. The new configuration should now be active.\nIf you run zsh, you should see that you have starship and access to several other utils such as rg, fd, and exa.\nThis basic configuration above is also defining your ~/.config/git/config and .zshrc. If you already have either of these files, home-manager will complain about them already existing.\nIf you run cat ~/.zshrc, you will see the way these configuration files are generated.\nYou can extend this configuration for programs such as (neo)vim, emacs, alacritty, ssh, etc. To see other programs, take a look at home-manager/modules/programs.\nGateway To Nix In ways, home-manager can be seen as a gateway to the nix ecosystem. If you have enjoyed the way you can declare user configuration with home-manager, you may be interested in expanding your configuration to include other system dependencies and configuration. For example, in Linux you can define your entire system\u0026rsquo;s configuration (including the kernel, kernel modules, networking, filesystems, etc) in nix. For macOS, there is nix-darwin that includes nix modules for configuring launchd, dock, and other preferences and services. You may also want to check out Nix Flakes: a more recent feature that allows you declare dependencies, and have them automatically pinned and hashed in flake.lock, similar to that of many modern package managers.\nWrapping up The title of this post is slightly misleading, since it\u0026rsquo;s possible to retain some of your dotfiles and have them intermingle with home-manager by including them alongside nix. The idea of defining user configuration using nix can provide a clean way to maintain your configuration, and allow it to be portable across platforms. Is it worth the effort to migrate away from shell scripts and dotfiles? I\u0026rsquo;d say so.\n","href":"/blog/2021/09/08/why-i-threw-out-my-dotfiles/","title":"Why I Threw Out My Dotfiles"},{"content":"","href":"/tags/adguard/","title":"adguard"},{"content":"","href":"/tags/grafana/","title":"grafana"},{"content":"","href":"/tags/homelab/","title":"homelab"},{"content":"","href":"/tags/jellyfin/","title":"jellyfin"},{"content":"","href":"/tags/netdata/","title":"netdata"},{"content":"","href":"/tags/pihole/","title":"pihole"},{"content":"","href":"/tags/plex/","title":"plex"},{"content":"","href":"/tags/tailscale/","title":"tailscale"},{"content":"","href":"/tags/virtualization/","title":"virtualization"},{"content":"A homelab can be an inexpensive way to host a multitude of internal/external services and learn a lot in the process.\nDo you want host your own Media server? Ad blocker? Web server? Are you interested in learning more about Linux? Virtualization? Networking? Security? Building a homelab can be an entertaining playground to enhance your computer skills.\nOne of the best parts about building a homelab is that it doesn\u0026rsquo;t have to be a large investment in terms of hardware. One of the simplest ways to build a homelab is out of a refurbished computer. Having multiple machines/nodes provides the advantage of increased redundancy, but starting out with a single node is enough to reap many of the benefits of having a homelab.\nVirtualization Virtualizing your hardware is an organized way of dividing up your machine\u0026rsquo;s resources. This can be done with something such as a Virtual Machine or something lighter like a container using LXC or runC. Containers have much less overhead in terms of boot time and storage allocation. This Stack Overflow answer sums it up nicely.\nA hypervisor such as Proxmox can be installed in minutes on a new machine. It provides a web interface and a straight-forward way to spin up new VMs and containers. Even if your plan is to run mostly docker containers, Proxmox can be a useful abstraction for managing VMs, disks and running scheduled backups. You can even run docker within an LXC container by enabling nested virtualization. You\u0026rsquo;ll want to ensure that VT-d and VT-x are enabled in the BIOS if you decide to install a hypervisor to manage your virtualization.\nServices So what are some useful services to deploy?\n Jellyfin or Plex - basically a self-hosted Netflix that can be used to stream from multiple devices, and the best part is that you manage the content! Unlike Plex, Jellyfin is open source and can be found here. changedetection - is a self-hosted equivalent to something like visualping.io that will notify you when a webpage changes and keep track of the diffs Adguard or Pihole - can block a list of known trackers for all clients on your local network. I\u0026rsquo;ve used pihole for a long time, but have recently switched to Adguard since the UI is more modern and it has the ability to toggle on/off a pre-defined list of services, including Netflix (this is useful if you have stealthy young kids). Either of these will speed up your internet experience, simply because you won\u0026rsquo;t need to download all of the extra tracking bloat. Gitea - A lightweight git server. I use this to mirror git repos from GitHub, GitLab, etc. Homer - A customizable landing page for services you need to access (including the ability to quickly search). Uptime Kuma - A fancy tool for monitoring the uptime of services. There is a large number of services you can self-host, including your own applications that you might be developing. awesome-self-hosted provides a curated list of services that might be of interest to you.\nVPN You could certainly setup and manage your own VPN by using something like OpenVPN, but there is also something else you can try: tailscale. It is a very quick way to create fully-encrypted connections between clients. With its MagicDNS, your can reference the names of machines like homer rather than using an IP address. By using this mesh-like VPN, you can easily create a secure tunnel to your homelab from anywhere.\nMonitoring Monitoring can become an important aspect of your homelab after it starts to become something that is relied upon. One of the simplest ways to setup some monitoring is using netdata. It can be installed on individual containers, VMs, and also a hypervisor (such as Proxmox). All of the monitoring works out of the box by detecting disks, memory, network interfaces, etc.\nAdditionally, agents installed on different machines can all be centrally viewed in netdata, and it can alert you when some of your infrastructure is down or in a degraded state. Adding additional nodes to netdata is as simple as a 1-line shell command.\nAs mentioned above, Uptime Kuma is a convenient way to track uptime and monitor the availability of your services.\nIn Summary Building out a homelab can be a rewarding experience and it doesn\u0026rsquo;t require buying a rack full of expensive servers to get a significant amount of utility. There are many services that you can run that require very minimal setup, making it possible to get a server up and running in a short period of time, with monitoring, and that can be securely connected to remotely.\n","href":"/blog/2021/09/06/what-to-do-with-a-homelab/","title":"What To Do With A Homelab"},{"content":"AppGate SDP provides a Zero Trust network. This post describes how to get AppGate SDP 4.3.2 working on Arch Linux.\nDepending on the AppGate SDP Server that is running, you may require a client that is more recent than the latest package on AUR. As of right now, the latest AUR is 4.2.2-1.\nThese steps highlight how to get it working with Python3.8 by making a 1 line modification to AppGate source code.\nPackaging We already know the community package is currently out of date, so let\u0026rsquo;s clone it:\ngit clone https://aur.archlinux.org/appgate-sdp.git cd appgate-sdp You\u0026rsquo;ll likely notice that the version is not what we want, so let\u0026rsquo;s modify the PKGBUILD to the following:\n# Maintainer: Pawel Mosakowski \u0026lt;pawel at mosakowski dot net\u0026gt; pkgname=appgate-sdp conflicts=(\u0026#39;appgate-sdp-headless\u0026#39;) pkgver=4.3.2 _download_pkgver=4.3 pkgrel=1 epoch= pkgdesc=\u0026#34;Software Defined Perimeter - GUI client\u0026#34; arch=(\u0026#39;x86_64\u0026#39;) url=\u0026#34;https://www.cyxtera.com/essential-defense/appgate-sdp/support\u0026#34; license=(\u0026#39;custom\u0026#39;) # dependecies calculated by namcap depends=(\u0026#39;gconf\u0026#39; \u0026#39;libsecret\u0026#39; \u0026#39;gtk3\u0026#39; \u0026#39;python\u0026#39; \u0026#39;nss\u0026#39; \u0026#39;libxss\u0026#39; \u0026#39;nodejs\u0026#39; \u0026#39;dnsmasq\u0026#39;) source=(\u0026#34;https://sdpdownloads.cyxtera.com/AppGate-SDP-${_download_pkgver}/clients/${pkgname}_${pkgver}_amd64.deb\u0026#34; \u0026#34;appgatedriver.service\u0026#34;) options=(staticlibs) prepare() { tar -xf data.tar.xz } package() { cp -dpr \u0026#34;${srcdir}\u0026#34;/{etc,lib,opt,usr} \u0026#34;${pkgdir}\u0026#34; mv -v \u0026#34;$pkgdir/lib/systemd/system\u0026#34; \u0026#34;$pkgdir/usr/lib/systemd/\u0026#34; rm -vrf \u0026#34;$pkgdir/lib\u0026#34; cp -v \u0026#34;$srcdir/appgatedriver.service\u0026#34; \u0026#34;$pkgdir/usr/lib/systemd/system/appgatedriver.service\u0026#34; mkdir -vp \u0026#34;$pkgdir/usr/share/licenses/appgate-sdp\u0026#34; cp -v \u0026#34;$pkgdir/usr/share/doc/appgate/copyright\u0026#34; \u0026#34;$pkgdir/usr/share/licenses/appgate-sdp\u0026#34; cp -v \u0026#34;$pkgdir/usr/share/doc/appgate/LICENSE.github\u0026#34; \u0026#34;$pkgdir/usr/share/licenses/appgate-sdp\u0026#34; cp -v \u0026#34;$pkgdir/usr/share/doc/appgate/LICENSES.chromium.html.bz2\u0026#34; \u0026#34;$pkgdir/usr/share/licenses/appgate-sdp\u0026#34; } md5sums=(\u0026#39;17101aac7623c06d5fbb95f50cf3dbdc\u0026#39; \u0026#39;002644116e20b2d79fdb36b7677ab4cf\u0026#39;) Let\u0026rsquo;s first make sure we have some dependencies. If you do not have yay, check it out.\nyay -S dnsmasq gconf Now, let\u0026rsquo;s install it:\nmakepkg -si Running the client Ok, let\u0026rsquo;s run the client by executing appgate.\nIt complains about not being able to connect.\nEasy fix:\nsudo systemctl start appgatedriver.service Now we should be connected\u0026hellip; but DNS is not working?\nFixing the DNS Running resolvectl should display that something is not right.\nWhy is the DNS not being set by appgate?\n$ head -3 /opt/appgate/linux/set_dns #!/usr/bin/env python3 \u0026#39;\u0026#39;\u0026#39; This is used to set and unset the DNS. It seems like python3 is required for the DNS setting to happen. Let\u0026rsquo;s try to run it.\n$ sudo /opt/appgate/linux/set_dns /opt/appgate/linux/set_dns:88: SyntaxWarning: \u0026#34;is\u0026#34; with a literal. Did you mean \u0026#34;==\u0026#34;? servers = [( socket.AF_INET if x.version is 4 else socket.AF_INET6, map(int, x.packed)) for x in servers] Traceback (most recent call last): File \u0026#34;/opt/appgate/linux/set_dns\u0026#34;, line 30, in \u0026lt;module\u0026gt; import dbus ModuleNotFoundError: No module named \u0026#39;dbus\u0026#39; Ok, let\u0026rsquo;s install it:\n$ sudo python3.8 -m pip install dbus-python Will it work now? Not yet. There\u0026rsquo;s another issue:\n$ sudo /opt/appgate/linux/set_dns /opt/appgate/linux/set_dns:88: SyntaxWarning: \u0026#34;is\u0026#34; with a literal. Did you mean \u0026#34;==\u0026#34;? servers = [( socket.AF_INET if x.version is 4 else socket.AF_INET6, map(int, x.packed)) for x in servers] module \u0026#39;platform\u0026#39; has no attribute \u0026#39;linux_distribution\u0026#39; This is a breaking change in Python3.8.\nSo what is calling platform.linux_distribution?\nLet\u0026rsquo;s search for it:\n$ sudo grep -r \u0026#39;linux_distribution\u0026#39; /opt/appgate/linux/ /opt/appgate/linux/nm.py: if platform.linux_distribution()[0] != \u0026#39;Fedora\u0026#39;: Aha! So this is in the local AppGate source code. This should be an easy fix. Let\u0026rsquo;s just replace this line with:\nif True: # Since we are not using Fedora :) Wrapping up It turns out there are breaking changes in Python3.8.\nThe docs say Deprecated since version 3.5, will be removed in version 3.8: See alternative like the distro package.\nI suppose this highlights one of the caveats of relying upon the system\u0026rsquo;s python, rather than having an isolated, dedicated environment for all dependencies.\n","href":"/blog/2020/03/16/appgate-sdp-on-arch-linux/","title":"AppGate SDP on Arch Linux"},{"content":"","href":"/tags/linux/","title":"linux"},{"content":"","href":"/tags/vpn/","title":"vpn"},{"content":"test\n","href":"/page/search/","title":""},{"content":"","href":"/authors/","title":"Authors"},{"content":"","href":"/page/","title":"Pages"}] diff --git a/public/post/index.html b/public/post/index.html new file mode 100644 index 00000000..3f9093cc --- /dev/null +++ b/public/post/index.html @@ -0,0 +1,375 @@ + + + + + + + + + + + + + + + + Posts • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Posts

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/post/index.xml b/public/post/index.xml new file mode 100644 index 00000000..a1787f06 --- /dev/null +++ b/public/post/index.xml @@ -0,0 +1,65 @@ + + + + Posts on davegallant + /post/ + Recent content in Posts on davegallant + Hugo -- gohugo.io + en-us + Sun, 14 Nov 2021 10:07:03 -0500 + + Running K3s in LXC on Proxmox + /blog/2021/11/14/running-k3s-in-lxc-on-proxmox/ + Sun, 14 Nov 2021 10:07:03 -0500 + + /blog/2021/11/14/running-k3s-in-lxc-on-proxmox/ + + + + + Replacing docker with podman on macOS (and Linux) + /blog/2021/10/11/replacing-docker-with-podman-on-macos-and-linux/ + Mon, 11 Oct 2021 10:43:35 -0400 + + /blog/2021/10/11/replacing-docker-with-podman-on-macos-and-linux/ + + + + + Automatically Rotating AWS Access Keys + /blog/2021/09/17/automatically-rotating-aws-access-keys/ + Fri, 17 Sep 2021 12:48:33 -0400 + + /blog/2021/09/17/automatically-rotating-aws-access-keys/ + + + + + Why I Threw Out My Dotfiles + /blog/2021/09/08/why-i-threw-out-my-dotfiles/ + Wed, 08 Sep 2021 00:42:33 -0400 + + /blog/2021/09/08/why-i-threw-out-my-dotfiles/ + + + + + What To Do With A Homelab + /blog/2021/09/06/what-to-do-with-a-homelab/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /blog/2021/09/06/what-to-do-with-a-homelab/ + <p>A homelab can be an inexpensive way to host a multitude of internal/external services and learn <em>a lot</em> in the process.</p> + + + + AppGate SDP on Arch Linux + /blog/2020/03/16/appgate-sdp-on-arch-linux/ + Mon, 16 Mar 2020 22:00:15 -0400 + + /blog/2020/03/16/appgate-sdp-on-arch-linux/ + <p>AppGate SDP provides a Zero Trust network. This post describes how to get AppGate SDP <code>4.3.2</code> working on Arch Linux.</p> + + + + diff --git a/public/post/page/1/index.html b/public/post/page/1/index.html new file mode 100644 index 00000000..5887d0a3 --- /dev/null +++ b/public/post/page/1/index.html @@ -0,0 +1 @@ +/post/ \ No newline at end of file diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 00000000..eb053628 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 00000000..8e78c611 --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,112 @@ + + + + /about/ + + / + 2021-11-14T10:07:03-05:00 + + /tags/k3s/ + 2021-11-14T10:07:03-05:00 + + /tags/lxc/ + 2021-11-14T10:07:03-05:00 + + /post/ + 2021-11-14T10:07:03-05:00 + + /tags/proxmox/ + 2021-11-14T10:07:03-05:00 + + /blog/2021/11/14/running-k3s-in-lxc-on-proxmox/ + 2021-11-14T10:07:03-05:00 + + /tags/ + 2021-11-14T10:07:03-05:00 + + /tags/containers/ + 2021-10-11T10:43:35-04:00 + + /tags/docker/ + 2021-10-11T10:43:35-04:00 + + /tags/podman/ + 2021-10-11T10:43:35-04:00 + + /blog/2021/10/11/replacing-docker-with-podman-on-macos-and-linux/ + 2021-10-11T10:43:35-04:00 + + /blog/2021/09/17/automatically-rotating-aws-access-keys/ + 2021-09-17T12:48:33-04:00 + + /tags/aws/ + 2021-09-17T12:48:33-04:00 + + /tags/aws-vault/ + 2021-09-17T12:48:33-04:00 + + /tags/python/ + 2021-09-17T12:48:33-04:00 + + /tags/security/ + 2021-09-17T12:48:33-04:00 + + /tags/dotfiles/ + 2021-09-08T00:42:33-04:00 + + /tags/home-manager/ + 2021-09-08T00:42:33-04:00 + + /tags/nix/ + 2021-09-08T00:42:33-04:00 + + /blog/2021/09/08/why-i-threw-out-my-dotfiles/ + 2021-09-08T00:42:33-04:00 + + /tags/adguard/ + 2021-09-06T01:12:54-04:00 + + /tags/grafana/ + 2021-09-06T01:12:54-04:00 + + /tags/homelab/ + 2021-09-06T01:12:54-04:00 + + /tags/jellyfin/ + 2021-09-06T01:12:54-04:00 + + /tags/netdata/ + 2021-09-06T01:12:54-04:00 + + /tags/pihole/ + 2021-09-06T01:12:54-04:00 + + /tags/plex/ + 2021-09-06T01:12:54-04:00 + + /tags/tailscale/ + 2021-09-06T01:12:54-04:00 + + /tags/virtualization/ + 2021-09-06T01:12:54-04:00 + + /blog/2021/09/06/what-to-do-with-a-homelab/ + 2021-09-06T01:12:54-04:00 + + /blog/2020/03/16/appgate-sdp-on-arch-linux/ + 2020-03-16T22:00:15-04:00 + + /tags/linux/ + 2020-03-16T22:00:15-04:00 + + /tags/vpn/ + 2020-03-16T22:00:15-04:00 + + /page/search/ + + /authors/ + + /page/ + + diff --git a/public/tags/adguard/index.html b/public/tags/adguard/index.html new file mode 100644 index 00000000..c1e8f89c --- /dev/null +++ b/public/tags/adguard/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: adguard • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: adguard

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/adguard/index.xml b/public/tags/adguard/index.xml new file mode 100644 index 00000000..21698cfa --- /dev/null +++ b/public/tags/adguard/index.xml @@ -0,0 +1,20 @@ + + + + adguard on davegallant + /tags/adguard/ + Recent content in adguard on davegallant + Hugo -- gohugo.io + en-us + Mon, 06 Sep 2021 01:12:54 -0400 + + What To Do With A Homelab + /blog/2021/09/06/what-to-do-with-a-homelab/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /blog/2021/09/06/what-to-do-with-a-homelab/ + <p>A homelab can be an inexpensive way to host a multitude of internal/external services and learn <em>a lot</em> in the process.</p> + + + + diff --git a/public/tags/adguard/page/1/index.html b/public/tags/adguard/page/1/index.html new file mode 100644 index 00000000..03b13988 --- /dev/null +++ b/public/tags/adguard/page/1/index.html @@ -0,0 +1 @@ +/tags/adguard/ \ No newline at end of file diff --git a/public/tags/aws-vault/index.html b/public/tags/aws-vault/index.html new file mode 100644 index 00000000..39f516a1 --- /dev/null +++ b/public/tags/aws-vault/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: aws-vault • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: aws-vault

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/aws-vault/index.xml b/public/tags/aws-vault/index.xml new file mode 100644 index 00000000..c284eea8 --- /dev/null +++ b/public/tags/aws-vault/index.xml @@ -0,0 +1,20 @@ + + + + aws-vault on davegallant + /tags/aws-vault/ + Recent content in aws-vault on davegallant + Hugo -- gohugo.io + en-us + Fri, 17 Sep 2021 12:48:33 -0400 + + Automatically Rotating AWS Access Keys + /blog/2021/09/17/automatically-rotating-aws-access-keys/ + Fri, 17 Sep 2021 12:48:33 -0400 + + /blog/2021/09/17/automatically-rotating-aws-access-keys/ + + + + + diff --git a/public/tags/aws-vault/page/1/index.html b/public/tags/aws-vault/page/1/index.html new file mode 100644 index 00000000..cafdceed --- /dev/null +++ b/public/tags/aws-vault/page/1/index.html @@ -0,0 +1 @@ +/tags/aws-vault/ \ No newline at end of file diff --git a/public/tags/aws/index.html b/public/tags/aws/index.html new file mode 100644 index 00000000..338e03ae --- /dev/null +++ b/public/tags/aws/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: aws • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: aws

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/aws/index.xml b/public/tags/aws/index.xml new file mode 100644 index 00000000..b315cc78 --- /dev/null +++ b/public/tags/aws/index.xml @@ -0,0 +1,20 @@ + + + + aws on davegallant + /tags/aws/ + Recent content in aws on davegallant + Hugo -- gohugo.io + en-us + Fri, 17 Sep 2021 12:48:33 -0400 + + Automatically Rotating AWS Access Keys + /blog/2021/09/17/automatically-rotating-aws-access-keys/ + Fri, 17 Sep 2021 12:48:33 -0400 + + /blog/2021/09/17/automatically-rotating-aws-access-keys/ + + + + + diff --git a/public/tags/aws/page/1/index.html b/public/tags/aws/page/1/index.html new file mode 100644 index 00000000..f70aaab9 --- /dev/null +++ b/public/tags/aws/page/1/index.html @@ -0,0 +1 @@ +/tags/aws/ \ No newline at end of file diff --git a/public/tags/containers/index.html b/public/tags/containers/index.html new file mode 100644 index 00000000..5c233065 --- /dev/null +++ b/public/tags/containers/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: containers • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: containers

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/containers/index.xml b/public/tags/containers/index.xml new file mode 100644 index 00000000..b9c0094c --- /dev/null +++ b/public/tags/containers/index.xml @@ -0,0 +1,20 @@ + + + + containers on davegallant + /tags/containers/ + Recent content in containers on davegallant + Hugo -- gohugo.io + en-us + Mon, 11 Oct 2021 10:43:35 -0400 + + Replacing docker with podman on macOS (and Linux) + /blog/2021/10/11/replacing-docker-with-podman-on-macos-and-linux/ + Mon, 11 Oct 2021 10:43:35 -0400 + + /blog/2021/10/11/replacing-docker-with-podman-on-macos-and-linux/ + + + + + diff --git a/public/tags/containers/page/1/index.html b/public/tags/containers/page/1/index.html new file mode 100644 index 00000000..c4873d14 --- /dev/null +++ b/public/tags/containers/page/1/index.html @@ -0,0 +1 @@ +/tags/containers/ \ No newline at end of file diff --git a/public/tags/docker/index.html b/public/tags/docker/index.html new file mode 100644 index 00000000..52b7297e --- /dev/null +++ b/public/tags/docker/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: docker • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: docker

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/docker/index.xml b/public/tags/docker/index.xml new file mode 100644 index 00000000..46ea08db --- /dev/null +++ b/public/tags/docker/index.xml @@ -0,0 +1,20 @@ + + + + docker on davegallant + /tags/docker/ + Recent content in docker on davegallant + Hugo -- gohugo.io + en-us + Mon, 11 Oct 2021 10:43:35 -0400 + + Replacing docker with podman on macOS (and Linux) + /blog/2021/10/11/replacing-docker-with-podman-on-macos-and-linux/ + Mon, 11 Oct 2021 10:43:35 -0400 + + /blog/2021/10/11/replacing-docker-with-podman-on-macos-and-linux/ + + + + + diff --git a/public/tags/docker/page/1/index.html b/public/tags/docker/page/1/index.html new file mode 100644 index 00000000..b8e029a5 --- /dev/null +++ b/public/tags/docker/page/1/index.html @@ -0,0 +1 @@ +/tags/docker/ \ No newline at end of file diff --git a/public/tags/dotfiles/index.html b/public/tags/dotfiles/index.html new file mode 100644 index 00000000..ebc86d15 --- /dev/null +++ b/public/tags/dotfiles/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: dotfiles • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: dotfiles

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/dotfiles/index.xml b/public/tags/dotfiles/index.xml new file mode 100644 index 00000000..6c566308 --- /dev/null +++ b/public/tags/dotfiles/index.xml @@ -0,0 +1,20 @@ + + + + dotfiles on davegallant + /tags/dotfiles/ + Recent content in dotfiles on davegallant + Hugo -- gohugo.io + en-us + Wed, 08 Sep 2021 00:42:33 -0400 + + Why I Threw Out My Dotfiles + /blog/2021/09/08/why-i-threw-out-my-dotfiles/ + Wed, 08 Sep 2021 00:42:33 -0400 + + /blog/2021/09/08/why-i-threw-out-my-dotfiles/ + + + + + diff --git a/public/tags/dotfiles/page/1/index.html b/public/tags/dotfiles/page/1/index.html new file mode 100644 index 00000000..d5410a50 --- /dev/null +++ b/public/tags/dotfiles/page/1/index.html @@ -0,0 +1 @@ +/tags/dotfiles/ \ No newline at end of file diff --git a/public/tags/grafana/index.html b/public/tags/grafana/index.html new file mode 100644 index 00000000..f9c56e79 --- /dev/null +++ b/public/tags/grafana/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: grafana • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: grafana

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/grafana/index.xml b/public/tags/grafana/index.xml new file mode 100644 index 00000000..d08fd3f9 --- /dev/null +++ b/public/tags/grafana/index.xml @@ -0,0 +1,20 @@ + + + + grafana on davegallant + /tags/grafana/ + Recent content in grafana on davegallant + Hugo -- gohugo.io + en-us + Mon, 06 Sep 2021 01:12:54 -0400 + + What To Do With A Homelab + /blog/2021/09/06/what-to-do-with-a-homelab/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /blog/2021/09/06/what-to-do-with-a-homelab/ + <p>A homelab can be an inexpensive way to host a multitude of internal/external services and learn <em>a lot</em> in the process.</p> + + + + diff --git a/public/tags/grafana/page/1/index.html b/public/tags/grafana/page/1/index.html new file mode 100644 index 00000000..f66726e7 --- /dev/null +++ b/public/tags/grafana/page/1/index.html @@ -0,0 +1 @@ +/tags/grafana/ \ No newline at end of file diff --git a/public/tags/home-manager/index.html b/public/tags/home-manager/index.html new file mode 100644 index 00000000..258ec392 --- /dev/null +++ b/public/tags/home-manager/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: home-manager • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: home-manager

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/home-manager/index.xml b/public/tags/home-manager/index.xml new file mode 100644 index 00000000..42d3d317 --- /dev/null +++ b/public/tags/home-manager/index.xml @@ -0,0 +1,20 @@ + + + + home-manager on davegallant + /tags/home-manager/ + Recent content in home-manager on davegallant + Hugo -- gohugo.io + en-us + Wed, 08 Sep 2021 00:42:33 -0400 + + Why I Threw Out My Dotfiles + /blog/2021/09/08/why-i-threw-out-my-dotfiles/ + Wed, 08 Sep 2021 00:42:33 -0400 + + /blog/2021/09/08/why-i-threw-out-my-dotfiles/ + + + + + diff --git a/public/tags/home-manager/page/1/index.html b/public/tags/home-manager/page/1/index.html new file mode 100644 index 00000000..ccad68c6 --- /dev/null +++ b/public/tags/home-manager/page/1/index.html @@ -0,0 +1 @@ +/tags/home-manager/ \ No newline at end of file diff --git a/public/tags/homelab/index.html b/public/tags/homelab/index.html new file mode 100644 index 00000000..d9dc833b --- /dev/null +++ b/public/tags/homelab/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: homelab • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: homelab

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/homelab/index.xml b/public/tags/homelab/index.xml new file mode 100644 index 00000000..dde5cbbe --- /dev/null +++ b/public/tags/homelab/index.xml @@ -0,0 +1,20 @@ + + + + homelab on davegallant + /tags/homelab/ + Recent content in homelab on davegallant + Hugo -- gohugo.io + en-us + Mon, 06 Sep 2021 01:12:54 -0400 + + What To Do With A Homelab + /blog/2021/09/06/what-to-do-with-a-homelab/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /blog/2021/09/06/what-to-do-with-a-homelab/ + <p>A homelab can be an inexpensive way to host a multitude of internal/external services and learn <em>a lot</em> in the process.</p> + + + + diff --git a/public/tags/homelab/page/1/index.html b/public/tags/homelab/page/1/index.html new file mode 100644 index 00000000..b55a49dc --- /dev/null +++ b/public/tags/homelab/page/1/index.html @@ -0,0 +1 @@ +/tags/homelab/ \ No newline at end of file diff --git a/public/tags/index.html b/public/tags/index.html new file mode 100644 index 00000000..eb921190 --- /dev/null +++ b/public/tags/index.html @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + Tags • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tags

    + + + +
    +
    +
    + + +
    + +
    + + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/index.xml b/public/tags/index.xml new file mode 100644 index 00000000..49ab72e3 --- /dev/null +++ b/public/tags/index.xml @@ -0,0 +1,227 @@ + + + + Tags on davegallant + /tags/ + Recent content in Tags on davegallant + Hugo -- gohugo.io + en-us + Sun, 14 Nov 2021 10:07:03 -0500 + + k3s + /tags/k3s/ + Sun, 14 Nov 2021 10:07:03 -0500 + + /tags/k3s/ + + + + + lxc + /tags/lxc/ + Sun, 14 Nov 2021 10:07:03 -0500 + + /tags/lxc/ + + + + + proxmox + /tags/proxmox/ + Sun, 14 Nov 2021 10:07:03 -0500 + + /tags/proxmox/ + + + + + containers + /tags/containers/ + Mon, 11 Oct 2021 10:43:35 -0400 + + /tags/containers/ + + + + + docker + /tags/docker/ + Mon, 11 Oct 2021 10:43:35 -0400 + + /tags/docker/ + + + + + podman + /tags/podman/ + Mon, 11 Oct 2021 10:43:35 -0400 + + /tags/podman/ + + + + + aws + /tags/aws/ + Fri, 17 Sep 2021 12:48:33 -0400 + + /tags/aws/ + + + + + aws-vault + /tags/aws-vault/ + Fri, 17 Sep 2021 12:48:33 -0400 + + /tags/aws-vault/ + + + + + python + /tags/python/ + Fri, 17 Sep 2021 12:48:33 -0400 + + /tags/python/ + + + + + security + /tags/security/ + Fri, 17 Sep 2021 12:48:33 -0400 + + /tags/security/ + + + + + dotfiles + /tags/dotfiles/ + Wed, 08 Sep 2021 00:42:33 -0400 + + /tags/dotfiles/ + + + + + home-manager + /tags/home-manager/ + Wed, 08 Sep 2021 00:42:33 -0400 + + /tags/home-manager/ + + + + + nix + /tags/nix/ + Wed, 08 Sep 2021 00:42:33 -0400 + + /tags/nix/ + + + + + adguard + /tags/adguard/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /tags/adguard/ + + + + + grafana + /tags/grafana/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /tags/grafana/ + + + + + homelab + /tags/homelab/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /tags/homelab/ + + + + + jellyfin + /tags/jellyfin/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /tags/jellyfin/ + + + + + netdata + /tags/netdata/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /tags/netdata/ + + + + + pihole + /tags/pihole/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /tags/pihole/ + + + + + plex + /tags/plex/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /tags/plex/ + + + + + tailscale + /tags/tailscale/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /tags/tailscale/ + + + + + virtualization + /tags/virtualization/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /tags/virtualization/ + + + + + linux + /tags/linux/ + Mon, 16 Mar 2020 22:00:15 -0400 + + /tags/linux/ + + + + + vpn + /tags/vpn/ + Mon, 16 Mar 2020 22:00:15 -0400 + + /tags/vpn/ + + + + + diff --git a/public/tags/jellyfin/index.html b/public/tags/jellyfin/index.html new file mode 100644 index 00000000..622a3c6d --- /dev/null +++ b/public/tags/jellyfin/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: jellyfin • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: jellyfin

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/jellyfin/index.xml b/public/tags/jellyfin/index.xml new file mode 100644 index 00000000..b44f7259 --- /dev/null +++ b/public/tags/jellyfin/index.xml @@ -0,0 +1,20 @@ + + + + jellyfin on davegallant + /tags/jellyfin/ + Recent content in jellyfin on davegallant + Hugo -- gohugo.io + en-us + Mon, 06 Sep 2021 01:12:54 -0400 + + What To Do With A Homelab + /blog/2021/09/06/what-to-do-with-a-homelab/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /blog/2021/09/06/what-to-do-with-a-homelab/ + <p>A homelab can be an inexpensive way to host a multitude of internal/external services and learn <em>a lot</em> in the process.</p> + + + + diff --git a/public/tags/jellyfin/page/1/index.html b/public/tags/jellyfin/page/1/index.html new file mode 100644 index 00000000..eaf606ad --- /dev/null +++ b/public/tags/jellyfin/page/1/index.html @@ -0,0 +1 @@ +/tags/jellyfin/ \ No newline at end of file diff --git a/public/tags/k3s/index.html b/public/tags/k3s/index.html new file mode 100644 index 00000000..e69a6bd5 --- /dev/null +++ b/public/tags/k3s/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: k3s • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: k3s

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/k3s/index.xml b/public/tags/k3s/index.xml new file mode 100644 index 00000000..8a9799d4 --- /dev/null +++ b/public/tags/k3s/index.xml @@ -0,0 +1,20 @@ + + + + k3s on davegallant + /tags/k3s/ + Recent content in k3s on davegallant + Hugo -- gohugo.io + en-us + Sun, 14 Nov 2021 10:07:03 -0500 + + Running K3s in LXC on Proxmox + /blog/2021/11/14/running-k3s-in-lxc-on-proxmox/ + Sun, 14 Nov 2021 10:07:03 -0500 + + /blog/2021/11/14/running-k3s-in-lxc-on-proxmox/ + + + + + diff --git a/public/tags/k3s/page/1/index.html b/public/tags/k3s/page/1/index.html new file mode 100644 index 00000000..e3db004c --- /dev/null +++ b/public/tags/k3s/page/1/index.html @@ -0,0 +1 @@ +/tags/k3s/ \ No newline at end of file diff --git a/public/tags/linux/index.html b/public/tags/linux/index.html new file mode 100644 index 00000000..1a73044a --- /dev/null +++ b/public/tags/linux/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: linux • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: linux

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/linux/index.xml b/public/tags/linux/index.xml new file mode 100644 index 00000000..e8fea7fb --- /dev/null +++ b/public/tags/linux/index.xml @@ -0,0 +1,20 @@ + + + + linux on davegallant + /tags/linux/ + Recent content in linux on davegallant + Hugo -- gohugo.io + en-us + Mon, 16 Mar 2020 22:00:15 -0400 + + AppGate SDP on Arch Linux + /blog/2020/03/16/appgate-sdp-on-arch-linux/ + Mon, 16 Mar 2020 22:00:15 -0400 + + /blog/2020/03/16/appgate-sdp-on-arch-linux/ + <p>AppGate SDP provides a Zero Trust network. This post describes how to get AppGate SDP <code>4.3.2</code> working on Arch Linux.</p> + + + + diff --git a/public/tags/linux/page/1/index.html b/public/tags/linux/page/1/index.html new file mode 100644 index 00000000..82150f61 --- /dev/null +++ b/public/tags/linux/page/1/index.html @@ -0,0 +1 @@ +/tags/linux/ \ No newline at end of file diff --git a/public/tags/lxc/index.html b/public/tags/lxc/index.html new file mode 100644 index 00000000..71f757e2 --- /dev/null +++ b/public/tags/lxc/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: lxc • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: lxc

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/lxc/index.xml b/public/tags/lxc/index.xml new file mode 100644 index 00000000..d518a6be --- /dev/null +++ b/public/tags/lxc/index.xml @@ -0,0 +1,20 @@ + + + + lxc on davegallant + /tags/lxc/ + Recent content in lxc on davegallant + Hugo -- gohugo.io + en-us + Sun, 14 Nov 2021 10:07:03 -0500 + + Running K3s in LXC on Proxmox + /blog/2021/11/14/running-k3s-in-lxc-on-proxmox/ + Sun, 14 Nov 2021 10:07:03 -0500 + + /blog/2021/11/14/running-k3s-in-lxc-on-proxmox/ + + + + + diff --git a/public/tags/lxc/page/1/index.html b/public/tags/lxc/page/1/index.html new file mode 100644 index 00000000..030e29c0 --- /dev/null +++ b/public/tags/lxc/page/1/index.html @@ -0,0 +1 @@ +/tags/lxc/ \ No newline at end of file diff --git a/public/tags/netdata/index.html b/public/tags/netdata/index.html new file mode 100644 index 00000000..4dbb1d97 --- /dev/null +++ b/public/tags/netdata/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: netdata • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: netdata

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/netdata/index.xml b/public/tags/netdata/index.xml new file mode 100644 index 00000000..48103979 --- /dev/null +++ b/public/tags/netdata/index.xml @@ -0,0 +1,20 @@ + + + + netdata on davegallant + /tags/netdata/ + Recent content in netdata on davegallant + Hugo -- gohugo.io + en-us + Mon, 06 Sep 2021 01:12:54 -0400 + + What To Do With A Homelab + /blog/2021/09/06/what-to-do-with-a-homelab/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /blog/2021/09/06/what-to-do-with-a-homelab/ + <p>A homelab can be an inexpensive way to host a multitude of internal/external services and learn <em>a lot</em> in the process.</p> + + + + diff --git a/public/tags/netdata/page/1/index.html b/public/tags/netdata/page/1/index.html new file mode 100644 index 00000000..2a7172f5 --- /dev/null +++ b/public/tags/netdata/page/1/index.html @@ -0,0 +1 @@ +/tags/netdata/ \ No newline at end of file diff --git a/public/tags/nix/index.html b/public/tags/nix/index.html new file mode 100644 index 00000000..1f04a84e --- /dev/null +++ b/public/tags/nix/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: nix • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: nix

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/nix/index.xml b/public/tags/nix/index.xml new file mode 100644 index 00000000..526bbdf5 --- /dev/null +++ b/public/tags/nix/index.xml @@ -0,0 +1,20 @@ + + + + nix on davegallant + /tags/nix/ + Recent content in nix on davegallant + Hugo -- gohugo.io + en-us + Wed, 08 Sep 2021 00:42:33 -0400 + + Why I Threw Out My Dotfiles + /blog/2021/09/08/why-i-threw-out-my-dotfiles/ + Wed, 08 Sep 2021 00:42:33 -0400 + + /blog/2021/09/08/why-i-threw-out-my-dotfiles/ + + + + + diff --git a/public/tags/nix/page/1/index.html b/public/tags/nix/page/1/index.html new file mode 100644 index 00000000..014d45f2 --- /dev/null +++ b/public/tags/nix/page/1/index.html @@ -0,0 +1 @@ +/tags/nix/ \ No newline at end of file diff --git a/public/tags/pihole/index.html b/public/tags/pihole/index.html new file mode 100644 index 00000000..885c3e09 --- /dev/null +++ b/public/tags/pihole/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: pihole • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: pihole

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/pihole/index.xml b/public/tags/pihole/index.xml new file mode 100644 index 00000000..381f9349 --- /dev/null +++ b/public/tags/pihole/index.xml @@ -0,0 +1,20 @@ + + + + pihole on davegallant + /tags/pihole/ + Recent content in pihole on davegallant + Hugo -- gohugo.io + en-us + Mon, 06 Sep 2021 01:12:54 -0400 + + What To Do With A Homelab + /blog/2021/09/06/what-to-do-with-a-homelab/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /blog/2021/09/06/what-to-do-with-a-homelab/ + <p>A homelab can be an inexpensive way to host a multitude of internal/external services and learn <em>a lot</em> in the process.</p> + + + + diff --git a/public/tags/pihole/page/1/index.html b/public/tags/pihole/page/1/index.html new file mode 100644 index 00000000..fd9d849b --- /dev/null +++ b/public/tags/pihole/page/1/index.html @@ -0,0 +1 @@ +/tags/pihole/ \ No newline at end of file diff --git a/public/tags/plex/index.html b/public/tags/plex/index.html new file mode 100644 index 00000000..22c3951f --- /dev/null +++ b/public/tags/plex/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: plex • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: plex

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/plex/index.xml b/public/tags/plex/index.xml new file mode 100644 index 00000000..06e871b8 --- /dev/null +++ b/public/tags/plex/index.xml @@ -0,0 +1,20 @@ + + + + plex on davegallant + /tags/plex/ + Recent content in plex on davegallant + Hugo -- gohugo.io + en-us + Mon, 06 Sep 2021 01:12:54 -0400 + + What To Do With A Homelab + /blog/2021/09/06/what-to-do-with-a-homelab/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /blog/2021/09/06/what-to-do-with-a-homelab/ + <p>A homelab can be an inexpensive way to host a multitude of internal/external services and learn <em>a lot</em> in the process.</p> + + + + diff --git a/public/tags/plex/page/1/index.html b/public/tags/plex/page/1/index.html new file mode 100644 index 00000000..579b5aa2 --- /dev/null +++ b/public/tags/plex/page/1/index.html @@ -0,0 +1 @@ +/tags/plex/ \ No newline at end of file diff --git a/public/tags/podman/index.html b/public/tags/podman/index.html new file mode 100644 index 00000000..b33cdbb3 --- /dev/null +++ b/public/tags/podman/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: podman • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: podman

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/podman/index.xml b/public/tags/podman/index.xml new file mode 100644 index 00000000..9e9fb100 --- /dev/null +++ b/public/tags/podman/index.xml @@ -0,0 +1,20 @@ + + + + podman on davegallant + /tags/podman/ + Recent content in podman on davegallant + Hugo -- gohugo.io + en-us + Mon, 11 Oct 2021 10:43:35 -0400 + + Replacing docker with podman on macOS (and Linux) + /blog/2021/10/11/replacing-docker-with-podman-on-macos-and-linux/ + Mon, 11 Oct 2021 10:43:35 -0400 + + /blog/2021/10/11/replacing-docker-with-podman-on-macos-and-linux/ + + + + + diff --git a/public/tags/podman/page/1/index.html b/public/tags/podman/page/1/index.html new file mode 100644 index 00000000..d38d3054 --- /dev/null +++ b/public/tags/podman/page/1/index.html @@ -0,0 +1 @@ +/tags/podman/ \ No newline at end of file diff --git a/public/tags/proxmox/index.html b/public/tags/proxmox/index.html new file mode 100644 index 00000000..90487b90 --- /dev/null +++ b/public/tags/proxmox/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: proxmox • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: proxmox

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/proxmox/index.xml b/public/tags/proxmox/index.xml new file mode 100644 index 00000000..5def032b --- /dev/null +++ b/public/tags/proxmox/index.xml @@ -0,0 +1,20 @@ + + + + proxmox on davegallant + /tags/proxmox/ + Recent content in proxmox on davegallant + Hugo -- gohugo.io + en-us + Sun, 14 Nov 2021 10:07:03 -0500 + + Running K3s in LXC on Proxmox + /blog/2021/11/14/running-k3s-in-lxc-on-proxmox/ + Sun, 14 Nov 2021 10:07:03 -0500 + + /blog/2021/11/14/running-k3s-in-lxc-on-proxmox/ + + + + + diff --git a/public/tags/proxmox/page/1/index.html b/public/tags/proxmox/page/1/index.html new file mode 100644 index 00000000..131238d3 --- /dev/null +++ b/public/tags/proxmox/page/1/index.html @@ -0,0 +1 @@ +/tags/proxmox/ \ No newline at end of file diff --git a/public/tags/python/index.html b/public/tags/python/index.html new file mode 100644 index 00000000..077a8e67 --- /dev/null +++ b/public/tags/python/index.html @@ -0,0 +1,311 @@ + + + + + + + + + + + + + + + + Tag: python • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: python

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/python/index.xml b/public/tags/python/index.xml new file mode 100644 index 00000000..b579c7a5 --- /dev/null +++ b/public/tags/python/index.xml @@ -0,0 +1,29 @@ + + + + python on davegallant + /tags/python/ + Recent content in python on davegallant + Hugo -- gohugo.io + en-us + Fri, 17 Sep 2021 12:48:33 -0400 + + Automatically Rotating AWS Access Keys + /blog/2021/09/17/automatically-rotating-aws-access-keys/ + Fri, 17 Sep 2021 12:48:33 -0400 + + /blog/2021/09/17/automatically-rotating-aws-access-keys/ + + + + + AppGate SDP on Arch Linux + /blog/2020/03/16/appgate-sdp-on-arch-linux/ + Mon, 16 Mar 2020 22:00:15 -0400 + + /blog/2020/03/16/appgate-sdp-on-arch-linux/ + <p>AppGate SDP provides a Zero Trust network. This post describes how to get AppGate SDP <code>4.3.2</code> working on Arch Linux.</p> + + + + diff --git a/public/tags/python/page/1/index.html b/public/tags/python/page/1/index.html new file mode 100644 index 00000000..e3477ba6 --- /dev/null +++ b/public/tags/python/page/1/index.html @@ -0,0 +1 @@ +/tags/python/ \ No newline at end of file diff --git a/public/tags/security/index.html b/public/tags/security/index.html new file mode 100644 index 00000000..9146e298 --- /dev/null +++ b/public/tags/security/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: security • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: security

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/security/index.xml b/public/tags/security/index.xml new file mode 100644 index 00000000..716dba65 --- /dev/null +++ b/public/tags/security/index.xml @@ -0,0 +1,20 @@ + + + + security on davegallant + /tags/security/ + Recent content in security on davegallant + Hugo -- gohugo.io + en-us + Fri, 17 Sep 2021 12:48:33 -0400 + + Automatically Rotating AWS Access Keys + /blog/2021/09/17/automatically-rotating-aws-access-keys/ + Fri, 17 Sep 2021 12:48:33 -0400 + + /blog/2021/09/17/automatically-rotating-aws-access-keys/ + + + + + diff --git a/public/tags/security/page/1/index.html b/public/tags/security/page/1/index.html new file mode 100644 index 00000000..4039430a --- /dev/null +++ b/public/tags/security/page/1/index.html @@ -0,0 +1 @@ +/tags/security/ \ No newline at end of file diff --git a/public/tags/tailscale/index.html b/public/tags/tailscale/index.html new file mode 100644 index 00000000..b1c4a1fb --- /dev/null +++ b/public/tags/tailscale/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: tailscale • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: tailscale

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/tailscale/index.xml b/public/tags/tailscale/index.xml new file mode 100644 index 00000000..282ddc4c --- /dev/null +++ b/public/tags/tailscale/index.xml @@ -0,0 +1,20 @@ + + + + tailscale on davegallant + /tags/tailscale/ + Recent content in tailscale on davegallant + Hugo -- gohugo.io + en-us + Mon, 06 Sep 2021 01:12:54 -0400 + + What To Do With A Homelab + /blog/2021/09/06/what-to-do-with-a-homelab/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /blog/2021/09/06/what-to-do-with-a-homelab/ + <p>A homelab can be an inexpensive way to host a multitude of internal/external services and learn <em>a lot</em> in the process.</p> + + + + diff --git a/public/tags/tailscale/page/1/index.html b/public/tags/tailscale/page/1/index.html new file mode 100644 index 00000000..0b328279 --- /dev/null +++ b/public/tags/tailscale/page/1/index.html @@ -0,0 +1 @@ +/tags/tailscale/ \ No newline at end of file diff --git a/public/tags/virtualization/index.html b/public/tags/virtualization/index.html new file mode 100644 index 00000000..2b8b7438 --- /dev/null +++ b/public/tags/virtualization/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: virtualization • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: virtualization

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/virtualization/index.xml b/public/tags/virtualization/index.xml new file mode 100644 index 00000000..ef1135c2 --- /dev/null +++ b/public/tags/virtualization/index.xml @@ -0,0 +1,20 @@ + + + + virtualization on davegallant + /tags/virtualization/ + Recent content in virtualization on davegallant + Hugo -- gohugo.io + en-us + Mon, 06 Sep 2021 01:12:54 -0400 + + What To Do With A Homelab + /blog/2021/09/06/what-to-do-with-a-homelab/ + Mon, 06 Sep 2021 01:12:54 -0400 + + /blog/2021/09/06/what-to-do-with-a-homelab/ + <p>A homelab can be an inexpensive way to host a multitude of internal/external services and learn <em>a lot</em> in the process.</p> + + + + diff --git a/public/tags/virtualization/page/1/index.html b/public/tags/virtualization/page/1/index.html new file mode 100644 index 00000000..7867bee7 --- /dev/null +++ b/public/tags/virtualization/page/1/index.html @@ -0,0 +1 @@ +/tags/virtualization/ \ No newline at end of file diff --git a/public/tags/vpn/index.html b/public/tags/vpn/index.html new file mode 100644 index 00000000..59c580a7 --- /dev/null +++ b/public/tags/vpn/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + Tag: vpn • davegallant + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    + + +
    +
    +
    +

    Tag: vpn

    + + + +
    +
    +
    + + + + +
    + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + + diff --git a/public/tags/vpn/index.xml b/public/tags/vpn/index.xml new file mode 100644 index 00000000..0c7c0b39 --- /dev/null +++ b/public/tags/vpn/index.xml @@ -0,0 +1,20 @@ + + + + vpn on davegallant + /tags/vpn/ + Recent content in vpn on davegallant + Hugo -- gohugo.io + en-us + Mon, 16 Mar 2020 22:00:15 -0400 + + AppGate SDP on Arch Linux + /blog/2020/03/16/appgate-sdp-on-arch-linux/ + Mon, 16 Mar 2020 22:00:15 -0400 + + /blog/2020/03/16/appgate-sdp-on-arch-linux/ + <p>AppGate SDP provides a Zero Trust network. This post describes how to get AppGate SDP <code>4.3.2</code> working on Arch Linux.</p> + + + + diff --git a/public/tags/vpn/page/1/index.html b/public/tags/vpn/page/1/index.html new file mode 100644 index 00000000..8358f953 --- /dev/null +++ b/public/tags/vpn/page/1/index.html @@ -0,0 +1 @@ +/tags/vpn/ \ No newline at end of file