<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://elbrarc.at/feed.xml" rel="self" type="application/atom+xml" /><link href="https://elbrarc.at/" rel="alternate" type="text/html" /><updated>2026-03-09T20:45:12-07:00</updated><id>https://elbrarc.at/feed.xml</id><title type="html">Elbrar’s corner</title><subtitle>Elbrar&apos;s corner of the internet. No idea how much stuff is actually going to end up here.</subtitle><author><name>Elbrar</name><email>meow@elbrarc.at</email></author><entry><title type="html">Enabling Hibernation on Ubuntu 24.04 with Full-Disk Encryption using the TPM</title><link href="https://elbrarc.at/blog/2024/05/30/ubuntu-fde-hibernate-tpm-secureboot.html" rel="alternate" type="text/html" title="Enabling Hibernation on Ubuntu 24.04 with Full-Disk Encryption using the TPM" /><published>2024-05-30T09:00:00-07:00</published><updated>2024-05-30T09:00:00-07:00</updated><id>https://elbrarc.at/blog/2024/05/30/ubuntu-fde-hibernate-tpm-secureboot</id><content type="html" xml:base="https://elbrarc.at/blog/2024/05/30/ubuntu-fde-hibernate-tpm-secureboot.html"><![CDATA[<p>I went through about 5 titles, and it’s still way too damn wordy.</p>

<p>It’s not too difficult to use FDE with the TPM and Secure Boot on Ubuntu 24.04
(the installer supports this configuration, though doesn’t make it easy to figure out what the prerequisites are),
but what if you want hibernation support?
The kernel hard-disables hibernation when Secure Boot is enabled, so you obviously can’t have all four at once…
But you can have either of those with both of the others, and switch between them at will.
This even includes having the hibernate image in encrypted swap.
This took me a couple of days of fighting with multiple distros to try to get what I wanted
(including several hours just trying to get Arch to <em>boot</em>), and I finally figured it out with Ubuntu 24.04.</p>

<p>There are obviously security implications, but this satisfies my threat and convenience levels.
Your mileage may vary.</p>

<p>This is a long post because it is a step-by-step guide.
If you’re not here trying to do this for yourself, please skip this.
I don’t want to waste your time.</p>

<!--more-->

<h3 id="security">Security</h3>
<p>So, first and foremost: the security compromises.
<strong>I am not a security expert, this is my own reasoning, this is not professional advice,
evaluate your own personal threat assessment to make an informed decision,
and please do not argue with me about my decisions</strong>
(but if you <em>are</em> a security professional, I am very much open to civil feedback).</p>

<p id="pcr-list">Obviously, not having Secure Boot enabled can cause some issues, especially with an unencrypted <code class="language-plaintext highlighter-rouge">/boot</code> partition.
However, I’ve mitigated those concerns for my threat level with the TPM PCRs that I’m using:</p>

<ul>
  <li>0: System firmware executable code (so <code class="language-plaintext highlighter-rouge">fwupd</code> could cause TPM failures)</li>
  <li>1: System configuration</li>
  <li>4: Firmware boot order (so booting an external disk won’t allow unlocking with the TPM)</li>
  <li>5: Boot configuration, including GPT</li>
  <li>7: Secure Boot state (on/off)</li>
  <li>8: Kernel command line (so editing the boot list in GRUB won’t allow unlocking with the TPM)</li>
  <li>9: Kernel boot state including initrd contents and kernel itself (so system updates could cause TPM failures)</li>
</ul>

<p>Further reference is available on the <a href="https://wiki.archlinux.org/title/Trusted_Platform_Module">Arch wiki</a>.</p>

<p>Basically, this means that the computer will only automatically unlock the drive if nothing in the boot path has changed,
so it should be Safe Enough™.
If you’re careful enough to only type the unlock password on boot when you’re expecting to need to
(e.g. you just updated the kernel), it should be reasonably secure.
Even an attempt to inject something into the initramfs (on the unencrypted <code class="language-plaintext highlighter-rouge">/boot</code> partition)
would be foiled by PCR 9 detecting that it has changed (short of finding a hash collision).</p>

<h3 id="notes">Notes</h3>
<ul>
  <li>I am assuming that you are installing onto <code class="language-plaintext highlighter-rouge">/dev/nvme0n1</code>.
Substitute appropriately if required (e.g. <code class="language-plaintext highlighter-rouge">/dev/sda</code>).</li>
  <li>I use KDE. I don’t know how to get hibernate to show up in other desktop environments, if it doesn’t show up by default.</li>
</ul>

<h3 id="installation">Installation</h3>
<p>Install Ubuntu 24.04 with the full-disk encryption option, but <em>not</em> the TPM option.
The other options shouldn’t matter since we’re not using the built-in TPM support or Secure Boot.
We do not want to use the “manual partitioning” option in the installer,
because it is incredibly limited in what it can do.
You might be able to manually configure the disk how you want via a terminal, and then map it in the installer,
but I’ve found it’s easier to just let it do what it wants to do then go fix it later,
so use the “Erase disk and install Ubuntu” option, and click on “Advanced features…”.
Enable the “Use LVM and encryption option” and hit OK.
Use whatever passphrase you’d like for the disk.
You <em>will</em> need to type it once in a while (mainly after kernel updates).</p>

<p>(Do not judge me for using Hyper-V to obtain these screenshots.)</p>

<p><img src="/assets/img/ubuntu-fde-hibernate-tpm-secureboot/01-install-erase.png" alt="screenshot" />
<img src="/assets/img/ubuntu-fde-hibernate-tpm-secureboot/02-install-lvm-luks.png" alt="screenshot" /></p>

<p>Do whatever you want for everything else in the installer, it doesn’t really matter.
We’re going to adjust the disk layout a bit when it’s done anyway
(it uses a swap file but hibernate is a <em>lot</em> easier with a swap partition).</p>

<h3 id="mess-with-the-disk">Mess with the disk</h3>
<p>Once the installer is completed, boot it up to make sure it’s working (using the password you just set for the disk),
and then boot back into the installer again (we need to do these steps with the filesystem unmounted).
Close the actual installer when it pops up, and open a terminal.
We’re going to shrink the <code class="language-plaintext highlighter-rouge">/</code> filesystem, resize its LVM volume,
expand the filesystem back to the full size of its volume,
and then add a new (encrypted) logical volume for swap.</p>

<p>First, we have to unlock the encrypted disk: <code class="language-plaintext highlighter-rouge">sudo cryptsetup luksOpen /dev/nvme0n1p3 dm_crypt-0</code></p>

<p>It’s important to use <code class="language-plaintext highlighter-rouge">dm_crypt-0</code> as the name in case you ever need to rescue the system.
That’s the name Ubuntu uses, so if you don’t use it here,
stuff won’t work right if you use a <code class="language-plaintext highlighter-rouge">chroot</code> to try to fix boot issues.</p>

<p>Now, let’s make sure that the volume is detected: <code class="language-plaintext highlighter-rouge">sudo lvscan</code></p>

<p>It should show an ACTIVE <code class="language-plaintext highlighter-rouge">/dev/ubuntu-vg/ubuntu-lv</code>. That’s our <code class="language-plaintext highlighter-rouge">/</code>.
We want to shrink that so that we can add some swap after it.
However, first we must <code class="language-plaintext highlighter-rouge">fsck</code> it (or <code class="language-plaintext highlighter-rouge">resize2fs</code> will just tell us to do it):
<code class="language-plaintext highlighter-rouge">sudo e2fsck -f /dev/mapper/ubuntu--vg-ubuntu--lv</code></p>

<p>Now, we can actually resize it (the <code class="language-plaintext highlighter-rouge">-M</code> means to shrink it to the smallest possible size):
<code class="language-plaintext highlighter-rouge">sudo resize2fs -M /dev/mapper/ubuntu--vg-ubuntu--lv</code></p>

<p>It might not be a bad idea to double-check the math on the size to make sure it shrunk it enough:
Take the number of blocks and multiply it by the block size.</p>

<p><img src="/assets/img/ubuntu-fde-hibernate-tpm-secureboot/03-resize2fs.png" alt="screenshot" /></p>

<p>In this example, we’d do <code class="language-plaintext highlighter-rouge">2993374 * 4 / 1024 / 1024</code> to get about 11.4 GB, which sounds about right.
This just means that we can’t make the volume for <code class="language-plaintext highlighter-rouge">/</code> any smaller than that,
and we’re not going to make it nearly that small anyway.</p>

<p>Before we can resize the <code class="language-plaintext highlighter-rouge">/</code> volume, we need to decide how much swap we want.
For hibernate, we need at least as much swap as there is RAM, probably with a bit extra.
On my test system, I have 16 GB of RAM, so I’m going to go with 20 GB of swap.
Let’s shrink the volume by 20 GB: <code class="language-plaintext highlighter-rouge">sudo lvresize -L -20G /dev/mapper/ubuntu--vg-ubuntu--lv</code></p>

<p>It is going to be very angry that you’re shrinking a disk and wants you to be absolutely sure you’re correct.
If you do screw this up, you’ll have to reinstall from scratch
(and hopefully not actually lose anything since this is a fresh install).</p>

<p>We can finally create our swap volume (do note this has a small-L): <code class="language-plaintext highlighter-rouge">sudo lvcreate -l 100%free -n swap ubuntu-vg</code></p>

<p>Checking <code class="language-plaintext highlighter-rouge">sudo lvscan</code> should show that we have two volumes now:</p>

<p><img src="/assets/img/ubuntu-fde-hibernate-tpm-secureboot/04-lvm.png" alt="screenshot" /></p>

<p>Lastly, we need to expand the <code class="language-plaintext highlighter-rouge">/</code> filesystem back to the full size of its volume:
<code class="language-plaintext highlighter-rouge">sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv</code></p>

<p>Let’s mount it to make sure it shows the correct size: <code class="language-plaintext highlighter-rouge">sudo mount /dev/mapper/ubuntu--vg-ubuntu--lv /mnt &amp;&amp; df -h /mnt</code></p>

<p>That’s everything we need to do from outside the installed system,
so reboot back into it and make sure everything is still working.
We’re still not quite done, though: we aren’t using our new swap partition, so let’s fix that.</p>

<p>First, make it be swap: <code class="language-plaintext highlighter-rouge">sudo mkswap /dev/mapper/ubuntu--vg-swap</code></p>

<p>Now edit <code class="language-plaintext highlighter-rouge">/etc/fstab</code> and change the line for <code class="language-plaintext highlighter-rouge">/swap.img</code> to <code class="language-plaintext highlighter-rouge">/dev/mapper/ubuntu--vg-swap</code>.
Finally, let’s turn off the old swap, delete it, and turn on the new swap:
<code class="language-plaintext highlighter-rouge">sudo swapoff /swap.img &amp;&amp; sudo swapon -a &amp;&amp; sudo rm /swap.img</code></p>

<p>That’s step one, full disk encryption, done, and we’ve prepared almost everything we need for hibernate, too.</p>

<h3 id="hibernate">Hibernate</h3>
<p>Now that we have a swap partition, we’re close to having hibernate work.
In fact, all we should have to do is regenerate the initramfs
so that it notices we have a swap partition on hibernate-resume boots:
<code class="language-plaintext highlighter-rouge">sudo update-initramfs -u</code></p>

<p>At this point, hibernate should work, but your desktop environment might not expose it.
Let’s install pm-utils so we can check: <code class="language-plaintext highlighter-rouge">sudo apt install pm-utils</code></p>

<p>Now, run <code class="language-plaintext highlighter-rouge">pm-is-supported --hibernate; echo $?</code>.
If it comes back <code class="language-plaintext highlighter-rouge">1</code>, you’ve got something else getting in the way (make sure Secure Boot isn’t turned on!).
If it comes back <code class="language-plaintext highlighter-rouge">0</code>, hibernate should work.</p>

<p>Run <code class="language-plaintext highlighter-rouge">sudo systemctl hibernate</code> and see if it does. The computer should save its state to disk and turn off.
Once it does turn off, turn it back on.
You’ll have to unlock the disk manually, but it should properly resume.</p>

<p>We’re already done with step 2! Now let’s get the TPM to help us unlock the disk.</p>

<h3 id="install-clevis">Install Clevis</h3>
<p>This is what took me the most time to figure out.
I was really hoping to not need some additional software to make this work, but I was never able to do so.</p>

<p><a href="https://github.com/latchset/clevis">Clevis</a> glues everything together.
It has support for a lot of different ways of decrypting the key that unlocks the disk,
and we’re going to use it for its TPM support.
You should also be able to make it require the TPM and a PIN you type at boot, if you want another layer of security,
but I’m not going to explain how to do that.</p>

<p>We need to start by installing it: <code class="language-plaintext highlighter-rouge">sudo apt install clevis clevis-initramfs clevis-tpm2</code></p>

<p>Assuming you want to use <a href="#pcr-list">the same PCRs that I described above</a>, it should be as simple as:
<code class="language-plaintext highlighter-rouge">sudo clevis luks bind -d /dev/nvme0n1p3 tpm2 '{"pcr_bank": "sha256", "pcr_ids":"0,1,4,5,7,8,9"}'</code></p>

<p>Reboot. Depending on your chosen PCRs, it may either immediately boot automatically,
or you may have to enter the password one last time and then run the <a href="#tpm-script">script below</a>
to re-seal the TPM key again.</p>

<p>And… That’s it. The hard part is done. We have a few minor things left to do, though.</p>

<h3 id="hibernate-in-the-ui">Hibernate in the UI</h3>
<p>I use KDE. This section may or may not apply to other desktop environments.</p>

<p>For whatever reason, KDE on Ubuntu defaults to not showing hibernate as an option even if it works.
We have to change some configuration, and then it should show up everywhere that suspend does
(the launcher menu, the shutdown screen, power management action options, etc.).</p>

<p>Create (as root) a file named <code class="language-plaintext highlighter-rouge">/etc/polkit-1/rules.d/10-enable-hibernate.rules</code> with the following contents:</p>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">polkit</span><span class="p">.</span><span class="nx">addRule</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">action</span><span class="p">,</span> <span class="nx">subject</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">if</span> <span class="p">(</span><span class="nx">action</span><span class="p">.</span><span class="nx">id</span> <span class="o">==</span> <span class="dl">"</span><span class="s2">org.freedesktop.login1.hibernate</span><span class="dl">"</span> <span class="o">||</span>
        <span class="nx">action</span><span class="p">.</span><span class="nx">id</span> <span class="o">==</span> <span class="dl">"</span><span class="s2">org.freedesktop.login1.hibernate-multiple-sessions</span><span class="dl">"</span> <span class="o">||</span>
        <span class="nx">action</span><span class="p">.</span><span class="nx">id</span> <span class="o">==</span> <span class="dl">"</span><span class="s2">org.freedesktop.upower.hibernate</span><span class="dl">"</span> <span class="o">||</span>
        <span class="nx">action</span><span class="p">.</span><span class="nx">id</span> <span class="o">==</span> <span class="dl">"</span><span class="s2">org.freedesktop.login1.handle-hibernate-key</span><span class="dl">"</span> <span class="o">||</span>
        <span class="nx">action</span><span class="p">.</span><span class="nx">id</span> <span class="o">==</span> <span class="dl">"</span><span class="s2">org.freedesktop.login1.hibernate-ignore-inhibit</span><span class="dl">"</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="k">return</span> <span class="nx">polkit</span><span class="p">.</span><span class="nx">Result</span><span class="p">.</span><span class="nx">YES</span><span class="p">;</span>
    <span class="p">}</span>
<span class="p">});</span>
</code></pre></div></div>
<p>This should have immediate effect. If not, try rebooting.
If it still doesn’t work, does <code class="language-plaintext highlighter-rouge">sudo systemctl hibernate</code> even work?</p>

<h3 id="system-updates">System updates</h3>
<p>If you’re using <a href="#pcr-list">the same PCRs that I’m using</a>,
kernel updates and anything that causes the initramfs to get regenerated are going to break the TPM.
I have a simple script (below) that removes the TPM and re-adds it.
Of course, this requires retyping the encryption key multiple times on every update,
but I find the convenience of booting happening without the password (and especially hibernation resumption) are worth it.
Of course, you’re free to use a different set of PCRs if you are ok with the tradeoff.</p>

<p><strong>Note:</strong> If you’re using PCR 9, you must run this <em>after</em> rebooting and typing the disk password for one boot,
as that depends on the state of the kernel image and initramfs <em>as the currently-running kernel sees it</em>.</p>

<div id="tpm-script" class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/sh</span>

<span class="nb">sudo </span>clevis luks unbind <span class="nt">-s</span> 1 <span class="nt">-d</span> /dev/nvme0n1p3
<span class="nb">sudo </span>clevis luks <span class="nb">bind</span> <span class="nt">-d</span> /dev/nvme0n1p3 tpm2 <span class="s1">'{"pcr_bank": "sha256", "pcr_ids":"0,1,4,5,7,8,9"}'</span>
</code></pre></div></div>

<h3 id="testing-tpm-invalidation">Testing TPM invalidation</h3>
<p>If you’re using <a href="#pcr-list">my PCR settings</a>,
the easiest way to test if the TPM will properly not unlock the disk when something changes is to turn Secure Boot on.
Alternatively, <code class="language-plaintext highlighter-rouge">sudo update-initramfs -u</code> should also cause it to stop booting
(but to make it work again, you’ll have to run the script above).</p>

<h3 id="what-about-secure-boot">What about Secure Boot?</h3>
<p>If you do want to use Secure Boot temporarily for some reason, you should be able to just turn it on and it’ll work.
If you’re using PCR 7, you’ll have to re-run the script to re-seal the TPM configuration,
but afterward it should continue to unlock the disk.
Obviously, hibernate won’t work.
When you’re done with Secure Boot, you can just turn it back off, re-run the script again,
and be on your way with hibernate again.</p>

<h3 id="closing">Closing</h3>
<p>Do one final test of putting the laptop into hibernation from your desktop environment and then turning it back on.
It should Just Work™!</p>

<p>Make sure you back up your LUKS header and store it somewhere safe!</p>]]></content><author><name>Elbrar</name><email>meow@elbrarc.at</email></author><category term="blog" /><category term="computers" /><category term="linux" /><category term="tech" /><summary type="html"><![CDATA[I went through about 5 titles, and it’s still way too damn wordy. It’s not too difficult to use FDE with the TPM and Secure Boot on Ubuntu 24.04 (the installer supports this configuration, though doesn’t make it easy to figure out what the prerequisites are), but what if you want hibernation support? The kernel hard-disables hibernation when Secure Boot is enabled, so you obviously can’t have all four at once… But you can have either of those with both of the others, and switch between them at will. This even includes having the hibernate image in encrypted swap. This took me a couple of days of fighting with multiple distros to try to get what I wanted (including several hours just trying to get Arch to boot), and I finally figured it out with Ubuntu 24.04. There are obviously security implications, but this satisfies my threat and convenience levels. Your mileage may vary. This is a long post because it is a step-by-step guide. If you’re not here trying to do this for yourself, please skip this. I don’t want to waste your time.]]></summary></entry><entry><title type="html">On Further Confusion 2024</title><link href="https://elbrarc.at/blog/2024/01/27/on-fc-2024.html" rel="alternate" type="text/html" title="On Further Confusion 2024" /><published>2024-01-27T19:30:00-08:00</published><updated>2024-01-27T19:30:00-08:00</updated><id>https://elbrarc.at/blog/2024/01/27/on-fc-2024</id><content type="html" xml:base="https://elbrarc.at/blog/2024/01/27/on-fc-2024.html"><![CDATA[<p>Hi. I haven’t posted anything here, and I’m not surprised it took this long to get started.
But I have a bunch of ideas of things to post, so I’m going to try to keep up with actually posting.
For a bit at least.</p>

<p>Content warning: MH; Brief mentions of wearing latex and background sexual scenes. Not explicit.</p>

<p>So I went to Further Confusion again this year, for the… seventh time?
I haven’t missed a year since I started going in 2016,
other than the obvious exceptions of 2021 and 2022 when the convention didn’t happen.
When I got home, I tooted that I had some thoughts to share about my experience:</p>

<iframe src="https://furry.engineer/@Elbrar/111762395049090288/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe>
<script src="https://furry.engineer/embed.js" async="async"></script>

<!--more-->

<p>I didn’t intend to take almost 2 weeks to get around to actually doing this, but gosh darn it, I’m gonna do it now.
Or at least cover the important bits.</p>

<p>I want to start by rehashing the sentiment of that toot:
I had a blast, it was a massively positive experience with hardly any negatives,
and at no point did I feel “I wish I had stayed home” or “I really do not want to go home.”
Not overly long, and not too short. An ideal length.</p>

<p>There was a point during the weekend, while riding a dopamine high and determined to stay out for a little while longer,
that I came to a realization:
This was the first decent-sized con since 2019<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>
that I wasn’t either volunteering at the con (and therefore “busy” most of the time)<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup>,
struggling with a mental health issue,
or had something negative happen at the con itself that ruined my mood for the rest of the weekend.<sup id="fnref:3" role="doc-noteref"><a href="#fn:3" class="footnote" rel="footnote">3</a></sup>
In short, I hadn’t had a good, fun con with no responsibilities since before COVID, and I kinda forgot what it was like.</p>

<p>I came to this realization while I was chatting with an acquaintance <del>late Saturday night</del> early Sunday morning,
at that time of night where you’re too tired to keep partying, but it’s too early to go to bed.
Of course, since it was Saturday night, there was both the party floor and the Night Market going on,
and I was wearing my full-body latex cat getup for the occasion,
which is even more of a reason to not want to go back to my room yet.
I went over to a friend’s suite (probably around 1 AM), where they were having a low-key gathering.
Three of the four people there were having a scene,
so I just ended up chatting with said acquaintance for about half an hour before deciding it well and truly was time to turn in for the night.</p>

<p>Anyway, I just wanted to brain dump this.
Here’s hoping that the trend continues, and I can manage to get to more cons this year.
I coincidentally have a work trip in Atlanta the day after FWA, so I’m gonna hit that up.
Maybe hit DEF CON finally, too.</p>

<p>I have some technical blog post ideas that I want to write up soon.
I can’t promise any sort of cadence for posts, but hopefully more often than every 6 months.</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p>PAWCon 2021 and 2022 were pretty good, but those are the only exceptions during that entire period,
and while I love that con, it is (or at least was) tiny and therefore doesn’t count for this.
I was only at Furvana 2021 for 25 hours while passing through the area so that also doesn’t count (and it’s also tiny). <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2" role="doc-endnote">
      <p>I absolutely love volunteering at BLFC, and have a blast doing it,
but I end up spending most of my time “working” and don’t get to do many actual con things
(by choice! Because I very much like playing with the expensive video equipment). <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3" role="doc-endnote">
      <p>I don’t <em>really</em> want to go into full details of everything, but the highlights (lowlights?) are:</p>
      <ul>
        <li>I was in a really bad place for most of FC 2020 for self-inflicted personal reasons. The details don’t matter.</li>
        <li>TFF 2020 was still recovering from those same problems.</li>
        <li>Furvana 2021 was only 25 hours for me, but it was neat, I guess.</li>
        <li>FC 2023 got derailed fairly quickly when I had a major latex blowout Friday night,
  and that ruined my mood for the rest of the weekend.</li>
        <li>BLFC 2021, 2022, and 2023 had increasingly large volunteer/staff commitments
  (but they were still amazing in their own way).</li>
        <li>PAWCon 2021, 2022, and 2023 were pretty good (though I was exhausted in 2023 since it was immediately after BLFC),
  but that con’s size and vibe are completely different from other cons, so it doesn’t really count.</li>
      </ul>
      <p><a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Elbrar</name><email>meow@elbrarc.at</email></author><category term="blog" /><category term="furry" /><category term="convention" /><summary type="html"><![CDATA[Hi. I haven’t posted anything here, and I’m not surprised it took this long to get started. But I have a bunch of ideas of things to post, so I’m going to try to keep up with actually posting. For a bit at least. Content warning: MH; Brief mentions of wearing latex and background sexual scenes. Not explicit. So I went to Further Confusion again this year, for the… seventh time? I haven’t missed a year since I started going in 2016, other than the obvious exceptions of 2021 and 2022 when the convention didn’t happen. When I got home, I tooted that I had some thoughts to share about my experience:]]></summary></entry><entry><title type="html">Hi</title><link href="https://elbrarc.at/blog/2023/06/15/hi.html" rel="alternate" type="text/html" title="Hi" /><published>2023-06-15T18:55:36-07:00</published><updated>2023-06-15T18:55:36-07:00</updated><id>https://elbrarc.at/blog/2023/06/15/hi</id><content type="html" xml:base="https://elbrarc.at/blog/2023/06/15/hi.html"><![CDATA[<p>I’m clearly never going to actually make a real, proper website myself anymore at this point, so I’m going to try using Jekyll and Github Pages. No idea how much I’ll actually post stuff here, but I’d like to actually try.</p>]]></content><author><name>Elbrar</name><email>meow@elbrarc.at</email></author><category term="blog" /><category term="welcome" /><summary type="html"><![CDATA[I’m clearly never going to actually make a real, proper website myself anymore at this point, so I’m going to try using Jekyll and Github Pages. No idea how much I’ll actually post stuff here, but I’d like to actually try.]]></summary></entry></feed>