macroblog.rs @ 0e147a780e74b54afbd56ff7438077d855d5c1c2

ref: Move from HTML to MD

Keep and write in html is pain, so I'm rendering md as html.
   1diff --git a/2020-08-22Moving_from_Github_to_Gitlab_pages.md b/2020-08-22Moving_from_Github_to_Gitlab_pages.md
   2new file mode 100644
   3index 0000000000000000000000000000000000000000..5bfa7889f5f4d42c8c3e6f77c4a5a157446235ec
   4--- /dev/null
   5+++ b/2020-08-22Moving_from_Github_to_Gitlab_pages.md
   6@@ -0,0 +1,31 @@
   7+This was quite simple, I had just to create a simple Gitlab pipeline job
   8+and publish to pages this is done by:
   9+
  10+    image: clojure:lein-2.7.0
  11+
  12+    before_script:
  13+      - lein deps
  14+
  15+    test:
  16+      script:
  17+        - lein test
  18+
  19+    pages:
  20+      stage: deploy
  21+      script:
  22+        - lein package
  23+      artifacts:
  24+        paths:
  25+          - public
  26+      only:
  27+        - master
  28+
  29+before~script~
  30+:   will download all the dependencies with `lein deps`.
  31+
  32+test
  33+:   is self explanatory.
  34+
  35+pages
  36+:   will compile the cljs into js with `lein package` and publish it
  37+    into pages.
  38diff --git a/Cargo.lock b/Cargo.lock
  39index 92b0fe7a268e03c9dab8fdcffbcbcff9493281b4..9de7021911cc88fe02d3a8910f779d99112859bd 100644
  40--- a/Cargo.lock
  41+++ b/Cargo.lock
  42@@ -943,6 +943,15 @@  "version_check",
  43 ]
  44 
  45 [[package]]
  46+name = "getopts"
  47+version = "0.2.21"
  48+source = "registry+https://github.com/rust-lang/crates.io-index"
  49+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
  50+dependencies = [
  51+ "unicode-width",
  52+]
  53+
  54+[[package]]
  55 name = "getrandom"
  56 version = "0.1.16"
  57 source = "registry+https://github.com/rust-lang/crates.io-index"
  58@@ -1277,6 +1286,7 @@  "actix-web",
  59  "cargo-watch",
  60  "chrono",
  61  "hyper",
  62+ "pulldown-cmark",
  63  "regex",
  64  "rust-embed",
  65  "sailfish",
  66@@ -1726,6 +1736,18 @@  "unicode-xid",
  67 ]
  68 
  69 [[package]]
  70+name = "pulldown-cmark"
  71+version = "0.9.1"
  72+source = "registry+https://github.com/rust-lang/crates.io-index"
  73+checksum = "34f197a544b0c9ab3ae46c359a7ec9cbbb5c7bf97054266fecb7ead794a181d6"
  74+dependencies = [
  75+ "bitflags",
  76+ "getopts",
  77+ "memchr",
  78+ "unicase",
  79+]
  80+
  81+[[package]]
  82 name = "quote"
  83 version = "1.0.18"
  84 source = "registry+https://github.com/rust-lang/crates.io-index"
  85@@ -2399,6 +2421,15 @@ checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d"
  86 dependencies = [
  87  "tempfile",
  88  "winapi 0.3.9",
  89+]
  90+
  91+[[package]]
  92+name = "unicase"
  93+version = "2.6.0"
  94+source = "registry+https://github.com/rust-lang/crates.io-index"
  95+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
  96+dependencies = [
  97+ "version_check",
  98 ]
  99 
 100 [[package]]
 101diff --git a/Cargo.toml b/Cargo.toml
 102index c91eedac7db5fe4c4400127f6ea37749d0cdd35c..f01156a3ce668072fffebee49adaf7c273c914ce 100644
 103--- a/Cargo.toml
 104+++ b/Cargo.toml
 105@@ -11,6 +11,7 @@ regex = "1.5"
 106 rust-embed = "6.4.0"
 107 chrono = "0.4"
 108 actix-web = "4"
 109+pulldown-cmark = "0.9.1"
 110 
 111 [dev-dependencies]
 112 cargo-watch = "8.1.1"
 113diff --git a/content/posts/2019-03-03Welcome_to_my_blog.html b/content/posts/2019-03-03Welcome_to_my_blog.html
 114deleted file mode 100644
 115index 10b1f05fea6422809c15e0f9f3a234f52d461122..0000000000000000000000000000000000000000
 116--- a/content/posts/2019-03-03Welcome_to_my_blog.html
 117+++ /dev/null
 118@@ -1,6 +0,0 @@
 119-<section>
 120-    <p>
 121-      On this blog, I'll be posting some personal projects that I'm working on
 122-      or just logging stuff that I don't want to forget.
 123-    </p>
 124-</section>
 125diff --git a/content/posts/2019-03-03Welcome_to_my_blog.md b/content/posts/2019-03-03Welcome_to_my_blog.md
 126new file mode 100644
 127index 0000000000000000000000000000000000000000..a0ec118305f8afcf8deac63c0c619b621cccc3af
 128--- /dev/null
 129+++ b/content/posts/2019-03-03Welcome_to_my_blog.md
 130@@ -0,0 +1,8 @@
 131+On this blog, I\'ll be posting some personal projects that I\'m working
 132+on or just logging stuff that I don\'t want to forget.
 133+
 134+*Disclaimer*: English it\'s not my native language so if you find
 135+something that you don\'t understand I\'d love you to open an
 136+[issue](https://gitlab.com/gabrielgio/homestation/-/issuess), or if you
 137+have something to add open a
 138+[MR](phttps://gitlab.com/gabrielgio/homestation/-/merge_requests)
 139diff --git a/content/posts/2019-03-07Automating_desktop_setup_with_ansible-pull_part-1.html b/content/posts/2019-03-07Automating_desktop_setup_with_ansible-pull_part-1.html
 140deleted file mode 100644
 141index d06a648c3793c6d13fbaae4ac818d84787731e6f..0000000000000000000000000000000000000000
 142--- a/content/posts/2019-03-07Automating_desktop_setup_with_ansible-pull_part-1.html
 143+++ /dev/null
 144@@ -1,94 +0,0 @@
 145-<section>
 146-  <p>
 147-    Every time that I do a clean install on my machine it takes a few hours till I
 148-    get to point where I was before formatting it, install all packages, select
 149-    themes, icons, fonts, install IDEs, extensions and so on. After doing it a few
 150-    times I came to the conclusion that I would save time by spending time
 151-    automating this chore, and as a result, I could tinker a little more with my
 152-    system and not worry about spending a weekend re-installing everything (which
 153-    have happened more time that I'd like to remember).
 154-  </p>
 155-  <p>
 156-    So after a few attempts using python and bash I ended with many files and
 157-    keep everything organized and concise turned out to be more tedious than the
 158-    setup itself. So there comes <a href="https://www.ansible.com/">Ansible</a>.
 159-    It is an enterprise-graded software used to automate tasks. It has A LOT OF
 160-    features and it can be really helpful if you're a sysadmin but for now we're
 161-    going to focuson
 162-    <a href="https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#ansible-pull">
 163-      Ansible Pull
 164-    </a>
 165-    and
 166-    <a href="https://docs.ansible.com/ansible/latest/user_guide/playbooks.html">
 167-      Playbooks
 168-    </a>. As better described:
 169-    <blockquote>
 170-      [Ansible-Pull] is used to up a remote copy of ansible on each managed
 171-      node, each set to run via cron and update playbook source via a source
 172-      repository. This inverts the default push architecture of Ansible into a
 173-      pull architecture, which has near-limitless scaling potential.
 174-
 175-      Playbooks are Ansible’s configuration, deployment, and orchestration
 176-      language. They can describe a policy you want your remote systems to
 177-      enforce, or a set of steps in a general IT process.
 178-      (<a href="https://docs.ansible.com/ansible/latest/cli/ansible-pull.html">source</a>)
 179-    </blockquote>
 180-  </p>
 181-  <p>
 182-    The goal is to pull and run a playbook remotely using a git repository. The
 183-    playbook will describe the tasks needed to setup our machine from scratch.
 184-    <br/>
 185-    But first lets tinker a bit a with playbooks locally with ansible-playbook,
 186-    to do so we need to add localhost to ansible's hosts list. Add it to
 187-    /etc/ansible/hosts:
 188-<pre><code>[all]
 189-localhost</code></pre>
 190-  </p>
 191-  <p>
 192-    As an experiment we're going to write a asks to install vim. Currently, I'm
 193-    using Fedora thus we going to use dnf modeule to install packages, but if
 194-    you're using another distribution look for a equivalent module like apt
 195-    module for Ubuntu.
 196-
 197-    The playbook to install is quite simple:
 198-
 199-<pre><code># main.yaml
 200-- hosts: all
 201-  tasks:
 202-     - name: install vim
 203-       dnf:
 204-         name: vim
 205-         state: latest</code></pre>
 206-    <dl>
 207-        <dt>host</dt>
 208-        <dd>it is required and it has to match our hosts otherwise the playbook won't run.</dd>
 209-        <dt>taks</dt>
 210-        <dd>
 211-          it is the list of tasks that the playbook will perform, in this case
 212-          will be dnf install vim.
 213-        </dd>
 214-    </dl>
 215-  </p>
 216-  <p>
 217-    To run a playbook use the command ansible-playbook commando to run main.yml
 218-    direct from disk, do to so just run the following command:
 219-<pre><code>sudo ansible-playbook --connection=local main.yml</code></pre>
 220-  </p>
 221-  <p>
 222-    After a few seconds, vim will be installed on your machine.
 223-<pre><code>PLAY [all] *************************************************************
 224-
 225-TASK [Gathering Facts] *************************************************
 226-ok: [localhost]
 227-
 228-TASK [install vim] *****************************************************
 229-ok: [localhost]
 230-
 231-PLAY RECAP *************************************************************
 232-localhost                  : ok=2    changed=0    unreachable=0    failed=0</code></pre>
 233-  </p>
 234-  <p>
 235-    This is the first step, next part we shall create a more complex playbook and
 236-    setup repository to run it remotely using ansible-pull.
 237-  </p>
 238-</section>
 239diff --git a/content/posts/2019-04-22Automating_desktop_setup_with_ansible-pull_part-1.md b/content/posts/2019-04-22Automating_desktop_setup_with_ansible-pull_part-1.md
 240new file mode 100644
 241index 0000000000000000000000000000000000000000..58ecb0d968cd83861137909b183a96677e5a5eae
 242--- /dev/null
 243+++ b/content/posts/2019-04-22Automating_desktop_setup_with_ansible-pull_part-1.md
 244@@ -0,0 +1,97 @@
 245+Every time that I do a clean install on my machine it takes a few hours
 246+till I get to point where I was before formatting it, install all
 247+packages, select themes, icons, fonts, install IDEs, extensions and so
 248+on. After doing it a few times I came to the conclusion that I would
 249+save time by spending time automating this chore, and as a result, I
 250+could tinker a little more with my system and not worry about spending a
 251+weekend re-installing everything (which have happened more time that
 252+        I\'d like to remember).
 253+
 254+So after a few attempts using python and bash I ended with many files
 255+and keep everything organized and concise turned out to be more tedious
 256+than the setup itself. So there comes
 257+[Ansible](https://www.ansible.com/). It is an enterprise-graded software
 258+used to automate tasks. It has A LOT OF features and it can be really
 259+helpful if you\'re a sysadmin but for now we\'re going to focus on
 260+[Ansible
 261+Pull](https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#ansible-pull)
 262+and
 263+[Playbooks](https://docs.ansible.com/ansible/latest/user_guide/playbooks.html).
 264+As better described:
 265+
 266+> \[Ansible-Pull\] is used to up a remote copy of ansible on each
 267+> managed node, each set to run via cron and update playbook source via
 268+> a source repository. This inverts the default push architecture of
 269+> Ansible into a pull architecture, which has near-limitless scaling
 270+> potential.
 271+>
 272+> Playbooks are Ansible's configuration, deployment, and orchestration
 273+> language. They can describe a policy you want your remote systems to
 274+> enforce, or a set of steps in a general IT process.
 275+>
 276+> [source](https://docs.ansible.com/ansible/latest/cli/ansible-pull.html)
 277+
 278+The goal is to pull and run a playbook remotely using a git repository.
 279+The playbook will describe the tasks needed to setup our machine from
 280+scratch.
 281+
 282+But first lets tinker a bit a with playbooks locally with
 283+`ansible-playbook`, to do so we need to add `localhost` to ansible\'s
 284+hosts list. Add it to `/etc/ansible/hosts`:
 285+
 286+``` service
 287+[all]
 288+localhost
 289+```
 290+
 291+As an experiment we\'re going to write a asks to install vim. Currently,
 292+   I\'m using [Fedora](https://getfedora.org/) thus we going to use [dnf
 293+   modeule](https://docs.ansible.com/ansible/latest/modules/dnf_module.html)
 294+   to install packages, but if you\'re using another distribution look for
 295+   a equivalent module like [apt
 296+   module](https://docs.ansible.com/ansible/latest/modules/apt_module.html)
 297+   for [Ubuntu](https://ubuntu.com/).
 298+
 299+   The playbook to install is quite simple:
 300+
 301+   ``` yaml
 302+# main.yaml
 303+   - hosts: all
 304+   tasks:
 305+   - name: install vim
 306+   dnf:
 307+name: vim
 308+state: latest
 309+```
 310+
 311+`hosts:` is required and it has to match our hosts otherwise the
 312+playbook won\'t run.
 313+
 314+`tasks:` is the list of tasks that the playbook will perform, in this
 315+case will be `dnf install vim`.
 316+
 317+To run a playbook use the command `ansible-playbook` commando to run
 318+`main.yml` direct from disk, do to so just run the following command:
 319+
 320+
 321+``` bash
 322+sudo ansible-playbook --connection=local main.yml
 323+```
 324+
 325+After a few seconds, vim will be installed on your machine.
 326+
 327+``` bash
 328+PLAY [all] *************************************************************
 329+
 330+TASK [Gathering Facts] *************************************************
 331+ok: [localhost]
 332+
 333+TASK [install vim] *****************************************************
 334+ok: [localhost]
 335+
 336+PLAY RECAP *************************************************************
 337+localhost                  : ok=2    changed=0    unreachable=0    failed=0
 338+```
 339+
 340+This is the first step, next part we shall create a more complex
 341+playbook and setup repository to run it remotely using `ansible-pull`.
 342diff --git a/content/posts/2019-04-22Automating_desktop_setup_with_ansible-pull_part-2.html b/content/posts/2019-04-22Automating_desktop_setup_with_ansible-pull_part-2.html
 343deleted file mode 100644
 344index 707ba7d59d5329790642bdbea36cc0b4edcd6102..0000000000000000000000000000000000000000
 345--- a/content/posts/2019-04-22Automating_desktop_setup_with_ansible-pull_part-2.html
 346+++ /dev/null
 347@@ -1,70 +0,0 @@
 348-<section>
 349-  <a href="/posts/2019-03-07Automating_desktop_setup_with_ansible-pull_part-1.html">See part 1</a>
 350-  <p>
 351-    Now we're going to setup ansible to work with a git repository. The process is
 352-    quite similar to ansible-playbook, the only difference is that the source for
 353-    the playbook will be a remote repository and not a local file. Following the
 354-    previous example we'll get vim setup automated.
 355-  </p>
 356-  <p>
 357-     Create a git repository wherever you see
 358-     fit, <a href="https://about.gitlab.com/">gitlab</a>
 359-     and <a href="https://github.com/">github</a> offer free repositories. For
 360-     this task we need to add only two file: one for the yml file describing the
 361-     tasks and the .vimrc file.
 362-  </p>
 363-  <p>
 364-    In the .vimrc add your own configuration, you can see
 365-    mine
 366-    <a href="https://gitlab.com/gabrielgio/homestation/-/blob/debcf3458df511aef9f7dca0cb73f6cf6baddd5d/.vimrc">
 367-      over here
 368-    </a>, it is pretty simple as I don't use it but for simple text editing
 369-    (like this post) so you can start with that if you don't have one.
 370-  </p>
 371-  <p>
 372-    The yml file will have two tasks, one is to install vim, just like we did in the part 1.
 373-<pre><code># main.yml
 374----
 375-- name: install vim
 376-  dnf:
 377-    name: vim
 378-    state: latest</code></pre>
 379-  </p>
 380-  <p>
 381-    To copy .vimrc file to your $HOME we going to
 382-    use <a href="https://docs.ansible.com/ansible/latest/modules/copy_module.html">copy
 383-    module</a>:
 384-  </p>
 385-  <p>
 386-    After we've added those two files to repository you will have be something
 387-    <a href="https://gitlab.com/gabrielgio/homestation/-/tree/debcf3458df511aef9f7dca0cb73f6cf6baddd5d">
 388-      like this.
 389-    </a>
 390-    <br/>
 391-    Parms:
 392-    <ul>
 393-      <li><strong>-i</strong> is a list of hosts</li>
 394-      <li><strong>-U</strong> is the get repository url</li>
 395-    </ul>
 396-  </p>
 397-  <p>
 398-    Remember man is your best friend, take a look at <code>man ansible-pull</code> to know
 399-    more about its parameters.
 400-  </p>
 401-  <p>
 402-    The best part you can quickly test and see the result by running my sample:
 403-<pre><code>ansible-pull \
 404-    -U https://gitlab.com/gabrielgio/homestation.git \
 405-    -C debcf3458df511aef9f7dca0cb73f6cf6baddd5d \
 406-    -i all \
 407-    main.yml</code></pre>
 408-  </p>
 409-  <p>
 410-    The idea here is to keep your repository as a source of truth when comes to
 411-    configuration, you can add ansible-pull to a CRON tab, so you just need to
 412-    push something to your repository and after a few minutes not only your
 413-    machine but all the machines that have it setup will run the playbooks. You
 414-    can use this method as a simple way to install software, update machines or
 415-    even distribute tooling company-wise.
 416-  </p>
 417-</section>
 418diff --git a/content/posts/2019-04-22Automating_desktop_setup_with_ansible-pull_part-2.md b/content/posts/2019-04-22Automating_desktop_setup_with_ansible-pull_part-2.md
 419new file mode 100644
 420index 0000000000000000000000000000000000000000..2e5646353b8010f974f37ec41838f89262f47641
 421--- /dev/null
 422+++ b/content/posts/2019-04-22Automating_desktop_setup_with_ansible-pull_part-2.md
 423@@ -0,0 +1,68 @@
 424+Now we\'re going to setup ansible to work with a git repository. The
 425+process is quite similar to `ansible-playbook`, the only difference is
 426+that the source for the playbook will be a remote repository and not a
 427+local file. Following the previous example we\'ll get vim setup
 428+automated.
 429+
 430+Create a git repository wherever you see fit,
 431+[gitlab](https://about.gitlab.com/) and [github](https://github.com/) offer
 432+free repositories. For this task we need to add only two file: one for the
 433+`yml` file describing the tasks and the `.vimrc` file.
 434+
 435+In the `.vimrc` add your own configuration, you can see mine [over
 436+here](https://gitlab.com/gabrielgio/homestation/-/blob/debcf3458df511aef9f7dca0cb73f6cf6baddd5d/.vimrc),
 437+it is pretty simple as I don\'t use it but for simple text editing (like this
 438+post) so you can start with that if you don\'t have one.
 439+
 440+The `yml` file will have two tasks, one is to install vim, just like we did in
 441+the part 1.
 442+
 443+```yaml # main.yml ---
 444+- name: install vim dnf: name: vim state: latest
 445+```
 446+
 447+To copy `.vimrc` file to your `$HOME` we going to use [copy
 448+module](https://docs.ansible.com/ansible/latest/modules/copy_module.html):
 449+
 450+``` yaml
 451+# main.yml
 452+---
 453+- name: copy vimrc file
 454+    copy:
 455+        src: config/.vimrc
 456+        dest: ~/
 457+        mode: 0644
 458+```
 459+
 460+After we\'ve added those two files to repository you will have be something
 461+[like
 462+this](https://gitlab.com/gabrielgio/homestation/-/tree/debcf3458df511aef9f7dca0cb73f6cf6baddd5d).
 463+
 464+And now we just need to run `ansible-pull` command
 465+
 466+``` shell
 467+# you may need run it as a sudo
 468+ansible-pull -U $YOUR_REPO -i all main.yml
 469+```
 470+
 471+Params:
 472+
 473+-   **`-i`** is a list of hosts.
 474+-   **`-U`** is the git repository URL.
 475+
 476+Remember `man` is your best friend, take a look at `man ansible-pull` to
 477+know more about its parameters.
 478+
 479+The best part you can quickly test and see the result by running my
 480+sample:
 481+
 482+``` shell
 483+ansible-pull -U https://gitlab.com/gabrielgio/homestation.git -C debcf3458df511aef9f7dca0cb73f6cf6baddd5d -i all main.yml
 484+```
 485+
 486+The idea here is to keep your repository as a source of truth when comes to
 487+configuration, you can add `ansible-pull` to a CRON tab, so you just need to
 488+push something to your repository and after a few minutes not only your machine
 489+but all the machines that have it setup will run the playbooks. You can use
 490+this method as a simple way to install software, update machines or even
 491+distribute tooling company-wise.
 492diff --git a/content/posts/2019-11-16Compiling_emacs_from_source_code_on_fedora.html b/content/posts/2019-11-16Compiling_emacs_from_source_code_on_fedora.html
 493deleted file mode 100644
 494index f47040fac0e8f2ee68dc286124ea78ce81384abe..0000000000000000000000000000000000000000
 495--- a/content/posts/2019-11-16Compiling_emacs_from_source_code_on_fedora.html
 496+++ /dev/null
 497@@ -1,31 +0,0 @@
 498-<section>
 499-<p>
 500- Compiling emacs from source and installing on fedora.
 501-</p>
 502-<h3>Installing packages</h3>
 503-<p>
 504-  Install the following packages:
 505-<pre><code>sudo dnf install git autoconf make gcc texinfo \
 506-    gnutls-devel giflib-devel ncurses-devel \
 507-    libjpeg-turbo-devel giflib-devel gtk3-devel \
 508-    libXpm-devel libtiff-devel libxml2-devel -y</code></pre>
 509-</p>
 510-<h3>Cloning Repository</h3>
 511-<p>
 512-  Clone repository
 513-  <a href="http://savannah.gnu.org/projects/emacs/">savannah.gnu.org</a>
 514-<pre><code>git clone -b master git://git.sv.gnu.org/emacs.git</code></pre>
 515-</p>
 516-<h3>Compiling</h3>
 517-<p>
 518-  Navigate to the emacs folder <code>cd emacs</code> and execute the following
 519-  steps:
 520-<pre><code>./autogen.sh
 521-./configure
 522-make -j$(nproc)
 523-sudo make install
 524-</code></pre>
 525-  After verify version with <code>./emacs --version</code>, it
 526-  should be equal or higher than <strong>28.0.50</strong>.
 527-</p>
 528-</section>
 529diff --git a/content/posts/2019-11-16Compiling_emacs_from_source_code_on_fedora.md b/content/posts/2019-11-16Compiling_emacs_from_source_code_on_fedora.md
 530new file mode 100644
 531index 0000000000000000000000000000000000000000..d316f404d2fc4c4166846e254508831eb3d61961
 532--- /dev/null
 533+++ b/content/posts/2019-11-16Compiling_emacs_from_source_code_on_fedora.md
 534@@ -0,0 +1,31 @@
 535+Compiling emacs from source and installing on fedora.
 536+
 537+# Installing Packages
 538+
 539+Install the following packages:
 540+
 541+    sudo dnf install git autoconf make gcc texinfo \
 542+        gnutls-devel giflib-devel ncurses-devel \
 543+        libjpeg-turbo-devel giflib-devel gtk3-devel \
 544+        libXpm-devel libtiff-devel libxml2-devel -y
 545+
 546+# Cloning Repository
 547+
 548+Clone repository
 549+[savannah.gnu.org](http://savannah.gnu.org/projects/emacs/):
 550+
 551+    git clone -b master git://git.sv.gnu.org/emacs.git
 552+
 553+# Compiling
 554+
 555+Navigate to emacs folder (`cd emacs`) and execute the following steps
 556+
 557+```shell
 558+./autogen.sh
 559+./configure
 560+make -j$(nproc)
 561+sudo make install
 562+```
 563+
 564+After verify version with `emacs --version`, it should be equal or
 565+higher than `28.0.50`{.verbatim}.
 566diff --git a/content/posts/2020-07-12Road_to_local_K8S.html b/content/posts/2020-07-12Road_to_local_K8S.html
 567deleted file mode 100644
 568index 52820b3a59f6fcff401ca6c19b6990cf0a36c485..0000000000000000000000000000000000000000
 569--- a/content/posts/2020-07-12Road_to_local_K8S.html
 570+++ /dev/null
 571@@ -1,101 +0,0 @@
 572-<section>
 573-    <h3>Goal</h3>
 574-    <p>
 575-    The goal is to deploy kubernetes on my local networks, and keep everything
 576-    as reproducible as possible.
 577-    </p>
 578-    <h3>Stack</h3>
 579-    <p>
 580-    I'll use Fedora Core OS, Matchbox and Terraform
 581-    <sup><a href="#footnotes">1</a></sup>, a match the requirements for
 582-    Tectonic<sup><a href="#footnotes">2</a></sup>.</p>
 583-    <h3>Steps</h3>
 584-    <ul>
 585-        <li>Network Setup DHCP/TFTP/DNS<sup><a href="#footnotes">3</a></sup></li>
 586-        <li>Matchbox<sup><a href="#footnotes">4</a></sup></li>
 587-        <li>PXE nextwork boot evnrionment</li>
 588-        <li>Terraform Tectonic<sup><a href="#footnotes">5</a></sup></li>
 589-    </ul>
 590-    <h3>Network Setup DHCP/TFTP/DNS</h3>
 591-    <p>First learning the basics</p>
 592-    <ul>
 593-        <li>
 594-            <a href="https://linuxhint.com/install_dhcp_server_ubuntu/">
 595-                https://linuxhint.com/install_dhcp_server_ubuntu/
 596-            </a>
 597-        </li>
 598-        <li>
 599-            <a href="https://www.youtube.com/watch?v=XQ3T14SIlV4">
 600-                https://www.youtube.com/watch?v=XQ3T14SIlV4
 601-            </a>
 602-        </li>
 603-    </ul>
 604-    <p>
 605-    To check open ports
 606-    <pre><code>lsof -Pni | grep LISTEN</code></pre>
 607-    </p>
 608-    <p>
 609-    Run the provided<sup><a href="#footnotes">6</a></sup> image with dnsmasq and
 610-    PXE toolkit
 611-    <pre><code>docker run --rm --cap-add=NET_ADMIN --net=host quay.io/coreos/dnsmasq \
 612-  -d -q \
 613-  --dhcp-range=192.168.1.3,192.168.1.254 \
 614-  --enable-tftp --tftp-root=/var/lib/tftpboot \
 615-  --dhcp-match=set:bios,option:client-arch,0 \
 616-  --dhcp-boot=tag:bios,undionly.kpxe \
 617-  --dhcp-match=set:efi32,option:client-arch,6 \
 618-  --dhcp-boot=tag:efi32,ipxe.efi \
 619-  --dhcp-match=set:efibc,option:client-arch,7 \
 620-  --dhcp-boot=tag:efibc,ipxe.efi \
 621-  --dhcp-match=set:efi64,option:client-arch,9 \
 622-  --dhcp-boot=tag:efi64,ipxe.efi \
 623-  --dhcp-userclass=set:ipxe,iPXE \
 624-  --dhcp-boot=tag:ipxe,http://matchbox.example.com:8080/boot.ipxe \
 625-  --address=/matchbox.example/192.168.1.2 \
 626-  --log-queries \
 627-  --log-dhcp</code></pre>
 628-    </p>
 629-    <h3>Matchbox</h3>
 630-    <p>...</p>
 631-    <h3>PXE network boot enviroment</h3>
 632-    <p>...</p>
 633-    <h3>Terraform Tectonic</h3>
 634-    <p>...</p>
 635-    <h3 id="footnotes">Links</h3>
 636-    <div >
 637-        <sup>1</sup>
 638-        <a href="https://coreos.com/tectonic/docs/latest/install/bare-metal/metal-terraform.html">
 639-            https://coreos.com/tectonic/docs/latest/install/bare-metal/metal-terraform.html
 640-        </a>
 641-        <div>
 642-            <div>
 643-                <sup>2</sup>
 644-                <a href="https://coreos.com/tectonic/docs/latest/install/bare-metal/requirements.html">
 645-                    https://coreos.com/tectonic/docs/latest/install/bare-metal/requirements.html
 646-                </a>
 647-                <div>
 648-                    <div>
 649-                        <sup>3</sup>
 650-                        <a href="https://coreos.com/matchbox/docs/latest/network-setup.html">
 651-                            https://coreos.com/matchbox/docs/latest/network-setup.html
 652-                        </a>
 653-                        <div>
 654-                            <div>
 655-                                <sup>4</sup>
 656-                                <a href="https://coreos.com/matchbox/docs/latest/deployment.html">
 657-                                    https://coreos.com/matchbox/docs/latest/deployment.html
 658-                                </a>
 659-                                <div>
 660-                                    <div>
 661-                                        <sup>5</sup>
 662-                                        <a href="https://coreos.com/tectonic/releases/">
 663-                                            https://coreos.com/tectonic/releases/
 664-                                        </a>
 665-                                        <div>
 666-                                            <div>
 667-                                                <sup>6</sup>
 668-                                                <a href="https://github.com/poseidon/matchbox/tree/v0.7.0/contrib/dnsmasq">
 669-                                                    https://github.com/poseidon/matchbox/tree/v0.7.0/contrib/dnsmasq
 670-                                                </a>
 671-                                                <div>
 672-</section>
 673diff --git a/content/posts/2020-07-13Road_to_local_K8S.md b/content/posts/2020-07-13Road_to_local_K8S.md
 674new file mode 100644
 675index 0000000000000000000000000000000000000000..a3ca5307c716d7c03e02a6602cddb52861514e90
 676--- /dev/null
 677+++ b/content/posts/2020-07-13Road_to_local_K8S.md
 678@@ -0,0 +1,73 @@
 679+# Goal
 680+
 681+The goal is to deploy kubernetes on my local networks, and keep
 682+everything as reproducible as possible.
 683+
 684+# Stack
 685+
 686+I\'ll use Fedora Core OS, Matchbox and Terraform [^1], a match the
 687+requirements for Tectonic [^2]
 688+
 689+## Steps
 690+
 691+-   Network Setup DHCP/TFTP/DNS [^3]
 692+-   Matchbox [^4]
 693+-   PXE network boot environment
 694+-   Terraform Tectonic [^5]
 695+
 696+## Network Setup DHCP/TFTP/DNS
 697+
 698+First learning the basics again:
 699+
 700+-   <https://linuxhint.com/install_dhcp_server_ubuntu/>
 701+-   <https://www.youtube.com/watch?v=XQ3T14SIlV4>
 702+
 703+To check open ports
 704+
 705+``` {.bash org-language="sh"}
 706+lsof -Pni | grep LISTEN
 707+```
 708+
 709+Run the provided [^6] image with `dnsmasq` and PXE toolkit
 710+
 711+``` {.bash org-language="sh"}
 712+docker run --rm --cap-add=NET_ADMIN --net=host quay.io/coreos/dnsmasq \
 713+  -d -q \
 714+  --dhcp-range=192.168.1.3,192.168.1.254 \
 715+  --enable-tftp --tftp-root=/var/lib/tftpboot \
 716+  --dhcp-match=set:bios,option:client-arch,0 \
 717+  --dhcp-boot=tag:bios,undionly.kpxe \
 718+  --dhcp-match=set:efi32,option:client-arch,6 \
 719+  --dhcp-boot=tag:efi32,ipxe.efi \
 720+  --dhcp-match=set:efibc,option:client-arch,7 \
 721+  --dhcp-boot=tag:efibc,ipxe.efi \
 722+  --dhcp-match=set:efi64,option:client-arch,9 \
 723+  --dhcp-boot=tag:efi64,ipxe.efi \
 724+  --dhcp-userclass=set:ipxe,iPXE \
 725+  --dhcp-boot=tag:ipxe,http://matchbox.example.com:8080/boot.ipxe \
 726+  --address=/matchbox.example/192.168.1.2 \
 727+  --log-queries \
 728+  --log-dhcp
 729+```
 730+
 731+## Matchbox
 732+
 733+## PXE network boot environment
 734+
 735+## Terraform Tectonic
 736+
 737+------------------------------------------------------------------------
 738+
 739+# Links
 740+
 741+[^1]: <https://coreos.com/tectonic/docs/latest/install/bare-metal/metal-terraform.html>
 742+
 743+[^2]: <https://coreos.com/tectonic/docs/latest/install/bare-metal/requirements.html>
 744+
 745+[^3]: <https://coreos.com/matchbox/docs/latest/network-setup.html>
 746+
 747+[^4]: <https://coreos.com/matchbox/docs/latest/deployment.html>
 748+
 749+[^5]: <https://coreos.com/tectonic/releases/>
 750+
 751+[^6]: <https://github.com/poseidon/matchbox/tree/v0.7.0/contrib/dnsmasq>
 752diff --git a/content/posts/2020-07-14Friz_box_turned_off_DHCP.html b/content/posts/2020-07-14Friz_box_turned_off_DHCP.html
 753deleted file mode 100644
 754index 3ee5dafa5ea3e288538cc315eee4e12337379850..0000000000000000000000000000000000000000
 755--- a/content/posts/2020-07-14Friz_box_turned_off_DHCP.html
 756+++ /dev/null
 757@@ -1,19 +0,0 @@
 758-<section>
 759-    <p>
 760-        If you turned off your DHCP server follow these steps to connect to
 761-        FritzBox settings. <br/>
 762-    <ul>
 763-        <li>
 764-            Set your computer IP to 170.254.1.2 and your mask to 255.255.0.0
 765-        </li>
 766-        <li> Then go to 169.254.1.1, login and re-enable the DHCP server:</li>
 767-    </ul>
 768-    </p>
 769-    <p>
 770-        On gnome turn the wired connection off on again to apply the settings.
 771-    </p>
 772-    <p>
 773-        <strong>Note</strong>: why in the hell does FritzBox 7490 require a
 774-        land-line telephone to be physically factory reset?
 775-    </p>
 776-</section>
 777diff --git a/content/posts/2020-07-14Friz_box_turned_off_DHCP.md b/content/posts/2020-07-14Friz_box_turned_off_DHCP.md
 778new file mode 100644
 779index 0000000000000000000000000000000000000000..865067fb7388b427c11e4f5e604040d9058a4d45
 780--- /dev/null
 781+++ b/content/posts/2020-07-14Friz_box_turned_off_DHCP.md
 782@@ -0,0 +1,10 @@
 783+If you turned off your DHCP server follow these steps to connect to
 784+FritzBox settings.
 785+
 786+-   Set your computer IP to `169.254.1.2` and your mask to `255.255.0.0`
 787+-   Then go to `169.254.1.1`, login and re-enable the DHCP server.
 788+
 789+On gnome turn the wired connection off on again to apply the settings.
 790+
 791+Note: why in the hell does FritzBox 7490 require a land-line telephone
 792+to be physically factory reset?
 793diff --git a/content/posts/2020-08-22Moving_from_Github_to_Gilab_pages.html b/content/posts/2020-08-22Moving_from_Github_to_Gilab_pages.html
 794deleted file mode 100644
 795index 5fb1d7897fb4b28d23a4178706c8151bc624ad25..0000000000000000000000000000000000000000
 796--- a/content/posts/2020-08-22Moving_from_Github_to_Gilab_pages.html
 797+++ /dev/null
 798@@ -1,38 +0,0 @@
 799-<section>
 800-  <p>
 801-    This was quite simple, I had just to create a simple Gitlab pipeline job and
 802-    publish to pages this is done by:
 803-  </p>
 804-  <pre><code>image: clojure:lein-2.7.0
 805-
 806-before_script:
 807-  - lein deps
 808-
 809-test:
 810-  script:
 811-    - lein test
 812-
 813-pages:
 814-  stage: deploy
 815-  script:
 816-    - lein package
 817-  artifacts:
 818-    paths:
 819-      - public
 820-  only:
 821-    - master</code></pre>
 822-  <dl>
 823-    <dt>before_script</dt>
 824-    <dd>will download all the dependencies with <code>lein deps.</code></dd>
 825-    <dt>test</dt>
 826-    <dd>it is self explanatory</dd>
 827-    <dt>pages</dt>
 828-    <dd>
 829-      it will compile cljs into js with <code>lein package</code> into
 830-      <code>public</code> folder to later be published into gitlab pages. Take a
 831-      look at the <code>artifacts</code> property, it is used to say wich will
 832-      will be collected.
 833-    </dd>
 834-  </dl>
 835-
 836-</section>
 837diff --git a/content/posts/2020-08-22Moving_from_Github_to_Gilab_pages.md b/content/posts/2020-08-22Moving_from_Github_to_Gilab_pages.md
 838new file mode 100644
 839index 0000000000000000000000000000000000000000..f971a7507150c43e577b7cdf1fa87945e069f59f
 840--- /dev/null
 841+++ b/content/posts/2020-08-22Moving_from_Github_to_Gilab_pages.md
 842@@ -0,0 +1,34 @@
 843+--- title: \"Moving from Github to Gitlab pages\" date: 2020-08-22 tags:
 844+\[\'gitlab\'\] ---
 845+
 846+This was quite simple, I had just to create a simple Gitlab pipeline job
 847+and publish to pages this is done by:
 848+
 849+    image: clojure:lein-2.7.0
 850+
 851+    before_script:
 852+      - lein deps
 853+
 854+    test:
 855+      script:
 856+        - lein test
 857+
 858+    pages:
 859+      stage: deploy
 860+      script:
 861+        - lein package
 862+      artifacts:
 863+        paths:
 864+          - public
 865+      only:
 866+        - master
 867+
 868+before~script~
 869+:   will download all the dependencies with `lein deps`.
 870+
 871+test
 872+:   is self explanatory.
 873+
 874+pages
 875+:   will compile the cljs into js with `lein package` and publish it
 876+    into pages.
 877diff --git a/content/posts/2020-12-28K8S_private_gitlab_registry_using_podman.md b/content/posts/2020-12-28K8S_private_gitlab_registry_using_podman.md
 878new file mode 100644
 879index 0000000000000000000000000000000000000000..c72e9ac4c6458ef3406b174ae00425873e43f244
 880--- /dev/null
 881+++ b/content/posts/2020-12-28K8S_private_gitlab_registry_using_podman.md
 882@@ -0,0 +1,49 @@
 883+This is based on [Log in to Docker
 884+Hub](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/).
 885+It is just a bit different to use podman
 886+
 887+First we should take a look at podman-login man page:
 888+
 889+``` bash
 890+man podman login
 891+```
 892+
 893+It will give some valueable information like the location of auth.json
 894+file. Now we can login using podman:
 895+
 896+``` bash
 897+podman login registry.gitlab.com
 898+```
 899+
 900+Then check the `auth.json` file located at
 901+`${XDG_RUNTIME_DIR}/containers/auth.json` (as described by the manual).
 902+
 903+``` bash
 904+cat "${XDG_RUNTIME_DIR}/containers/auth.json"
 905+```
 906+
 907+It will print your auth config:
 908+
 909+``` json
 910+{
 911+    "auths": {
 912+        "registry.gitlab.com": {
 913+            "auth": "..."
 914+        }
 915+    }
 916+}
 917+```
 918+
 919+Now copy that file over to the server and register it in k8s with the
 920+following command:
 921+
 922+``` bash
 923+kubectl create secret generic regcred \
 924+    --from-file=.dockerconfigjson=auth.json \
 925+    --type=kubernetes.io/dockerconfigjson
 926+```
 927+
 928+Once you have created you can list by `kubectl get secret`:
 929+
 930+    NAME                                                    TYPE                                  DATA   AGE
 931+    regcred                                                 kubernetes.io/dockerconfigjson        1      53s
 932diff --git a/content/posts/2021-12-26Enable_NFS_on_K3S.html b/content/posts/2021-12-26Enable_NFS_on_K3S.html
 933deleted file mode 100644
 934index 22ddf3331353303480fec1892b4f4904135635ba..0000000000000000000000000000000000000000
 935--- a/content/posts/2021-12-26Enable_NFS_on_K3S.html
 936+++ /dev/null
 937@@ -1,61 +0,0 @@
 938-<section>
 939-    <p>
 940-        By default <a href="https://k3s.io/">K3S</a> comes only
 941-        with <a href="https://github.com/rancher/local-path-provisioner">local-path</a>
 942-        storage class, and if you are running with more than one node in your
 943-        cluster you may want to use a more &ldquo;distributed&rdquo; solution.
 944-        For may case I opted for NFS.
 945-    </p>
 946-    <p>
 947-        To check the current storage class you can run:
 948-    </p>
 949-    <pre><code>k3s kubectl get storageclasses</code></pre>
 950-    <p>
 951-        And it will print something like:
 952-    </p>
 953-    <pre><code>NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
 954-local-path (default)   rancher.io/local-path                           Delete          WaitForFirstConsumer   false                  154d</code></pre>
 955-    <p>
 956-        To start adding First you need to
 957-        install <a href="https://github.com/helm/helm">helm</a> on your server.
 958-        To do so you may run:
 959-    </p>
 960-
 961-    <pre><code>curl -sSL https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash</code></pre>
 962-    <p>
 963-        Be careful when running scripts directly into bash always check the
 964-        source Sometimes is also recommended to do not pipe directly to bash
 965-    </p>
 966-    <p>
 967-        Once it is installed we need to add
 968-        the <a href="https://kubernetes.io/docs/concepts/storage/storage-classes/#nfs">NFS
 969-        storage classes</a>. It has two providers, I have
 970-        chose <a href="https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner">NFS
 971-        Subdir External Provisioner</a>.
 972-    </p>
 973-    <p>
 974-        Add the helm repo
 975-    </p>
 976-
 977-    <pre><code>helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/</code></pre>
 978-    <p>
 979-        Then we need to actually install the provider
 980-    </p>
 981-    <div class="org-src-container">
 982-<pre><code>helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner
 983---set nfs.server=x.x.x.x
 984---set nfs.path=/exported/path</code></pre>
 985-    </div>
 986-    <p>
 987-        Set the <code>nfs.server</code> and <code>nfs.path</code> accordingly
 988-        with your setup.
 989-    </p>
 990-    <p>
 991-        After that if we run <code>k3s kubectl get storageclasses</code> it will
 992-        now print another NFS provider:
 993-    </p>
 994-
 995-    <pre><code>NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
 996-local-path (default)   rancher.io/local-path                           Delete          WaitForFirstConsumer   false                  154d
 997-nfs-client             cluster.local/nfs-subdir-external-provisioner   Delete          Immediate              true                   76m</code></pre>
 998-</section>
 999diff --git a/content/posts/2021-12-26Enable_NFS_on_K3S.md b/content/posts/2021-12-26Enable_NFS_on_K3S.md
1000new file mode 100644
1001index 0000000000000000000000000000000000000000..426bf3dbb2063385f7d166289ac246841ffde717
1002--- /dev/null
1003+++ b/content/posts/2021-12-26Enable_NFS_on_K3S.md
1004@@ -0,0 +1,56 @@
1005+By default [K3S](https://k3s.io/) comes only with
1006+[local-path](https://github.com/rancher/local-path-provisioner) storage
1007+class, and if you are running with more than one node in your cluster
1008+you may want to use a more \"distributed\" solution. For may case I
1009+opted for NFS.
1010+
1011+To check the current storage class you can run:
1012+
1013+``` bash
1014+k3s kubectl get storageclasses
1015+```
1016+
1017+And it will print something like:
1018+
1019+    NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
1020+    local-path (default)   rancher.io/local-path                           Delete          WaitForFirstConsumer   false                  154d
1021+
1022+To start adding First you need to install
1023+[helm](https://github.com/helm/helm) on your server. To do so you may
1024+run:
1025+
1026+``` bash
1027+curl -sSL https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
1028+```
1029+
1030+**Be careful when running scripts directly into bash always check the
1031+source** **Sometimes is also recommended to do not pipe directly to
1032+bash**
1033+
1034+Once it is installed we need to add the [NFS storage
1035+classes](https://kubernetes.io/docs/concepts/storage/storage-classes/#nfs).
1036+It has two providers, I have chose [NFS Subdir External
1037+Provisioner](https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner).
1038+
1039+Add the helm repo
1040+
1041+``` bash
1042+helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
1043+```
1044+
1045+Then we need to actually install the provider
1046+
1047+``` bash
1048+helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
1049+    --set nfs.server=x.x.x.x \
1050+    --set nfs.path=/exported/path
1051+```
1052+
1053+Set the `nfs.server` and `nfs.path` accordingly with your setup.
1054+
1055+After that if we run `k3s kubectl get storageclasses` it will now print
1056+another NFS provider:
1057+
1058+    NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
1059+    local-path (default)   rancher.io/local-path                           Delete          WaitForFirstConsumer   false                  154d
1060+    nfs-client             cluster.local/nfs-subdir-external-provisioner   Delete          Immediate              true                   76m
1061diff --git a/content/posts/2021-12-28K8S_private_gitlab_registry_using_podman.html b/content/posts/2021-12-28K8S_private_gitlab_registry_using_podman.html
1062deleted file mode 100644
1063index 470965c9cb2bdbed6e743a91b0e36e7d2af31f52..0000000000000000000000000000000000000000
1064--- a/content/posts/2021-12-28K8S_private_gitlab_registry_using_podman.html
1065+++ /dev/null
1066@@ -1,38 +0,0 @@
1067-<section>
1068-    <p>
1069-        This is based on <a
1070-            href="https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/">Log in to
1071-        Docker Hub</a>. It is just a bit different to use podman.
1072-    </p>
1073-    <p>
1074-        First we should take a look at podman-login man page:
1075-<pre><code>man podman login</code></pre>
1076-    </p>
1077-    <p>
1078-        It will give some valueable information like the location of auth.json file. Now we can login using podman:
1079-<pre><code>podman login registry.gitlab.com</code></pre>
1080-    </p>
1081-    <p>Then check the <code>auth.json</code> file located at <code>${XDG_RUNTIME_DIR}/containers/auth.json</code> (as described
1082-        by the manual). It will contain your auth config:
1083-<pre><code>{
1084-	"auths": {
1085-		"registry.gitlab.com": {
1086-			"auth": "..."
1087-		}
1088-	}
1089-}</code></pre>
1090-    </p>
1091-    <p>
1092-        Now copy that file over to the server and register it in k8s with the following command:
1093-<pre><code>
1094-kubectl create secret generic regcred \
1095-    --from-file=.dockerconfigjson=auth.json \
1096-    --type=kubernetes.io/dockerconfigjson</code></pre>
1097-    </p>
1098-    <p>
1099-        Once you have created you can list by kubectl get secret:
1100-<pre><code>
1101-NAME     TYPE                                  DATA   AGE
1102-regcred  kubernetes.io/dockerconfigjson        1      53s</code></pre>
1103-    </p>
1104-</section>
1105diff --git a/contrib/locust/locustfile.py b/contrib/locust/locustfile.py
1106index ca7f8f3b7e911333bacd1123451bb2ca6c340fe8..fd22508250b19f058764dfaa3804f95ad8e49b67 100644
1107--- a/contrib/locust/locustfile.py
1108+++ b/contrib/locust/locustfile.py
1109@@ -7,12 +7,12 @@         self.client.get("/")
1110 
1111     @task
1112     def posts(self):
1113-        self.client.get("/posts/2021-12-28K8S_private_gitlab_registry_using_podman.html")
1114-        self.client.get("/posts/2021-12-26Enable_NFS_on_K3S.html")
1115-        self.client.get("/posts/2020-08-22Moving_from_Github_to_Gilab_pages.html")
1116-        self.client.get("/posts/2020-07-14Friz_box_turned_off_DHCP.html")
1117-        self.client.get("/posts/2020-07-12Road_to_local_K8S.html")
1118-        self.client.get("/posts/2019-11-16Compiling_emacs_from_source_code_on_fedora.html")
1119-        self.client.get("/posts/2019-04-22Automating_desktop_setup_with_ansible-pull_part-2.html")
1120-        self.client.get("/posts/2019-03-07Automating_desktop_setup_with_ansible-pull_part-1.html")
1121-        self.client.get("/posts/2019-03-03Welcome_to_my_blog.html")
1122+        self.client.get("/posts/2021-12-28K8S_private_gitlab_registry_using_podman.md")
1123+        self.client.get("/posts/2021-12-26Enable_NFS_on_K3S.md")
1124+        self.client.get("/posts/2020-08-22Moving_from_Github_to_Gilab_pages.md")
1125+        self.client.get("/posts/2020-07-14Friz_box_turned_off_DHCP.md")
1126+        self.client.get("/posts/2020-07-12Road_to_local_K8S.md")
1127+        self.client.get("/posts/2019-11-16Compiling_emacs_from_source_code_on_fedora.md")
1128+        self.client.get("/posts/2019-04-22Automating_desktop_setup_with_ansible-pull_part-2.md")
1129+        self.client.get("/posts/2019-03-07Automating_desktop_setup_with_ansible-pull_part-1.md")
1130+        self.client.get("/posts/2019-04-22Ansible_part_2.md")
1131diff --git a/src/blog.rs b/src/blog.rs
1132index 0fa9543d0587f6369870ffe56a30084a0beec241..c87730374672bbcc6fc8158177b0229644dc5fd8 100644
1133--- a/src/blog.rs
1134+++ b/src/blog.rs
1135@@ -1,4 +1,5 @@
1136 use chrono::NaiveDate;
1137+use pulldown_cmark::{html, Options, Parser};
1138 use regex::Regex;
1139 use rust_embed::RustEmbed;
1140 use sailfish::TemplateOnce;
1141@@ -60,8 +61,11 @@ }
1142 
1143 fn get_file_content(path: &str) -> String {
1144     let buffer = PostAsset::get(path).unwrap().data.into_owned();
1145-
1146-    return String::from_utf8(buffer).unwrap();
1147+    let md = String::from_utf8(buffer).unwrap();
1148+    let parser = Parser::new_ext(&md, Options::empty());
1149+    let mut html_output = &mut String::new();
1150+    html::push_html(&mut html_output, parser);
1151+    return html_output.to_string();
1152 }
1153 
1154 pub fn render_post_page(path: &String) -> String {
1155diff --git a/tests/test_blog.rs b/tests/test_blog.rs
1156index 31d572595116f4fd3c078eb07360904c1f9e5fbb..b72f80014b9514a502450953c506968c5c53360c 100644
1157--- a/tests/test_blog.rs
1158+++ b/tests/test_blog.rs
1159@@ -5,7 +5,7 @@
1160 
1161 #[test]
1162 fn test_create_blog_entry() {
1163-    let asset_filename = String::from("2021-12-03Enable_NFS_on_K3S.html");
1164+    let asset_filename = String::from("2021-12-03Enable_NFS_on_K3S.md");
1165     let post_date = NaiveDate::from_ymd(2021, 12, 03);
1166 
1167     let blog_entry = BlogEntry::new(&asset_filename);
1168@@ -23,7 +23,7 @@ }
1169 
1170 #[test]
1171 fn test_render_post_page() {
1172-    let path = &String::from("2020-07-14Friz_box_turned_off_DHCP.html");
1173+    let path = &String::from("2020-07-14Friz_box_turned_off_DHCP.md");
1174     let page = render_post_page(path);
1175     assert!(!page.is_empty());
1176 }