diff --git a/404.html b/404.html new file mode 100644 index 00000000..af8fa64e --- /dev/null +++ b/404.html @@ -0,0 +1,135 @@ + + + + + + + + + + + +Nothing's here! • davegallant + + + + + + + +
+
+ +
+ +
+
+ +
+
+
+Nothing's here! +
+ +Gopher +Go Home... + +
+

+Nothing's here! +

+
+
+
+
+
+ +
+
+ + + \ No newline at end of file diff --git a/about/index.html b/about/index.html new file mode 100644 index 00000000..3f713e62 --- /dev/null +++ b/about/index.html @@ -0,0 +1,134 @@ + + + + + + + + + + + +About • davegallant + + + + + + + +
+
+ +
+ +
+
+ +
+
+
+
+
+

About

+
+
+
+
+

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

+

When I’m not in front of a computer, I enjoy traveling, hiking and spending time with my family.

+
+
+
+ +
+
+ + + \ No newline at end of file diff --git a/android-chrome-192x192.png b/android-chrome-192x192.png new file mode 100644 index 00000000..91842dce Binary files /dev/null and b/android-chrome-192x192.png differ diff --git a/android-chrome-512x512.png b/android-chrome-512x512.png new file mode 100644 index 00000000..aab9ea97 Binary files /dev/null and b/android-chrome-512x512.png differ diff --git a/apple-touch-icon.png b/apple-touch-icon.png new file mode 100644 index 00000000..f3c47aa3 Binary files /dev/null and b/apple-touch-icon.png differ diff --git a/assets/css/main.ab98e12b.css b/assets/css/main.ab98e12b.css new file mode 100644 index 00000000..0770c5d0 --- /dev/null +++ b/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/assets/css/rtl.bf9d5394.css b/assets/css/rtl.bf9d5394.css new file mode 100644 index 00000000..cbef49fb --- /dev/null +++ b/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/assets/gopher.png b/assets/gopher.png new file mode 100644 index 00000000..7b5adc14 Binary files /dev/null and b/assets/gopher.png differ diff --git a/assets/js/algolia_search.d220ba26.js b/assets/js/algolia_search.d220ba26.js new file mode 100644 index 00000000..797c0aae --- /dev/null +++ b/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

    +
    +
    +
    +
    +
      +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/categories/index.html b/categories/index.html new file mode 100644 index 00000000..c803400f --- /dev/null +++ b/categories/index.html @@ -0,0 +1,132 @@ + + + + + + + + + + + +Categories • davegallant + + + + + + + + +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +

    Categories

    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/categories/linux/index.html b/categories/linux/index.html new file mode 100644 index 00000000..c650ba7a --- /dev/null +++ b/categories/linux/index.html @@ -0,0 +1,144 @@ + + + + + + + + + + + +Category: linux • davegallant + + + + + + + + +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +

    Category: linux

    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/categories/linux/page/1/index.html b/categories/linux/page/1/index.html new file mode 100644 index 00000000..b9c0ee47 --- /dev/null +++ b/categories/linux/page/1/index.html @@ -0,0 +1 @@ +/categories/linux/ \ No newline at end of file diff --git a/favicon-16x16.png b/favicon-16x16.png new file mode 100644 index 00000000..f80f2e37 Binary files /dev/null and b/favicon-16x16.png differ diff --git a/favicon-32x32.png b/favicon-32x32.png new file mode 100644 index 00000000..9e266ad9 Binary files /dev/null and b/favicon-32x32.png differ diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 00000000..fafbdafe Binary files /dev/null and b/favicon.ico differ diff --git a/favicon.png b/favicon.png new file mode 100644 index 00000000..acde0887 Binary files /dev/null and b/favicon.png differ diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 00000000..23ecde6b Binary files /dev/null and b/images/logo.png differ diff --git a/index.html b/index.html new file mode 100644 index 00000000..56bd0234 --- /dev/null +++ b/index.html @@ -0,0 +1,141 @@ + + + + + + + + + + + +davegallant + + + + + + + + +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +

    Recent Posts

    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/index.json b/index.json new file mode 100644 index 00000000..814aed27 --- /dev/null +++ b/index.json @@ -0,0 +1 @@ +[{"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 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 It should work now\u0026hellip; right?\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 that say Deprecated since version 3.5, will be removed in version 3.8: See alternative like the distro package.\nI guess this highlights one of the caveats of relying upon system python.\n","href":"/post/appgate-sdp-on-arch-linux/","title":"AppGate SDP on Arch Linux"},{"content":"","href":"/categories/","title":"Categories"},{"content":"","href":"/","title":"davegallant"},{"content":"","href":"/tags/linux/","title":"linux"},{"content":"","href":"/categories/linux/","title":"linux"},{"content":"","href":"/post/","title":"Posts"},{"content":"","href":"/tags/python/","title":"python"},{"content":"","href":"/tags/","title":"Tags"},{"content":"","href":"/tags/vpn/","title":"vpn"},{"content":"test\n","href":"/","title":""},{"content":"I\u0026rsquo;m a software engineer with a passion for open-source, infrastructure, tooling and security.\nWhen I\u0026rsquo;m not in front of a computer, I enjoy traveling, hiking and spending time with my family.\n","href":"/about/","title":"About"},{"content":"","href":"/authors/","title":"Authors"},{"content":"","href":"/page/","title":"Pages"},{"content":"","href":"/series/","title":"Series"}] \ No newline at end of file diff --git a/page/index.html b/page/index.html new file mode 100644 index 00000000..412d3985 --- /dev/null +++ b/page/index.html @@ -0,0 +1,157 @@ + + + + + + + + + + + +Pages • davegallant + + + + + + + + +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +

    Pages

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

      + +

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

      +About +

      +
      +
    • +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/page/page/1/index.html b/page/page/1/index.html new file mode 100644 index 00000000..7d435207 --- /dev/null +++ b/page/page/1/index.html @@ -0,0 +1 @@ +/page/ \ No newline at end of file diff --git a/post/appgate-sdp-on-arch-linux/index.html b/post/appgate-sdp-on-arch-linux/index.html new file mode 100644 index 00000000..b3199910 --- /dev/null +++ b/post/appgate-sdp-on-arch-linux/index.html @@ -0,0 +1,231 @@ + + + + + + + + + + + +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 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
    +

    It should work now… right?

    +
    $ 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 that say Deprecated since version 3.5, will be removed in version 3.8: See alternative like the distro package.

    +

    I guess this highlights one of the caveats of relying upon system python.

    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/post/index.html b/post/index.html new file mode 100644 index 00000000..d8b7dbfb --- /dev/null +++ b/post/index.html @@ -0,0 +1,144 @@ + + + + + + + + + + + +Posts • davegallant + + + + + + + + +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +

    Posts

    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/post/page/1/index.html b/post/page/1/index.html new file mode 100644 index 00000000..067be3cb --- /dev/null +++ b/post/page/1/index.html @@ -0,0 +1 @@ +/post/ \ No newline at end of file diff --git a/robots.txt b/robots.txt index 4f9540ba..eb053628 100644 --- a/robots.txt +++ b/robots.txt @@ -1 +1,2 @@ -User-agent: * \ No newline at end of file +User-agent: * +Disallow: diff --git a/series/index.html b/series/index.html new file mode 100644 index 00000000..cbfaea14 --- /dev/null +++ b/series/index.html @@ -0,0 +1,130 @@ + + + + + + + + + + + +Series • davegallant + + + + + + + + +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +

    Series

    +
    +
    +
    +
    +
      Not a single Series!
    +
    +
    +
    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 00000000..f9e246c9 --- /dev/null +++ b/tags/index.html @@ -0,0 +1,136 @@ + + + + + + + + + + + +Tags • davegallant + + + + + + + + +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +

    Tags

    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/tags/linux/index.html b/tags/linux/index.html new file mode 100644 index 00000000..a45a9214 --- /dev/null +++ b/tags/linux/index.html @@ -0,0 +1,144 @@ + + + + + + + + + + + +Tag: linux • davegallant + + + + + + + + +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +

    Tag: linux

    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/tags/linux/page/1/index.html b/tags/linux/page/1/index.html new file mode 100644 index 00000000..caf1e88a --- /dev/null +++ b/tags/linux/page/1/index.html @@ -0,0 +1 @@ +/tags/linux/ \ No newline at end of file diff --git a/tags/python/index.html b/tags/python/index.html new file mode 100644 index 00000000..410a6cab --- /dev/null +++ b/tags/python/index.html @@ -0,0 +1,144 @@ + + + + + + + + + + + +Tag: python • davegallant + + + + + + + + +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +

    Tag: python

    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/tags/python/page/1/index.html b/tags/python/page/1/index.html new file mode 100644 index 00000000..418187ca --- /dev/null +++ b/tags/python/page/1/index.html @@ -0,0 +1 @@ +/tags/python/ \ No newline at end of file diff --git a/tags/vpn/index.html b/tags/vpn/index.html new file mode 100644 index 00000000..1c991f18 --- /dev/null +++ b/tags/vpn/index.html @@ -0,0 +1,144 @@ + + + + + + + + + + + +Tag: vpn • davegallant + + + + + + + + +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +

    Tag: vpn

    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/tags/vpn/page/1/index.html b/tags/vpn/page/1/index.html new file mode 100644 index 00000000..8406a096 --- /dev/null +++ b/tags/vpn/page/1/index.html @@ -0,0 +1 @@ +/tags/vpn/ \ No newline at end of file