<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Yonle</title>
    <link>https://pen.waltuh.cyou/yonle/</link>
    <description>A self taught programmer &amp; sysadmin from Indonesia that hosts stuff.</description>
    <pubDate>Sat, 16 May 2026 08:13:04 +0000</pubDate>
    <item>
      <title>sepucuk pendapat pribadi: siswa, dan sekolah</title>
      <link>https://pen.waltuh.cyou/yonle/sepucuk-pendapat-pribadi-siswa-dan-sekolah</link>
      <description>&lt;![CDATA[sepucuk pendapat pribadi: siswa, dan sekolah&#xA;&#xA;jika kamu pikir-pikir, keadaan siswa-siswi Indonesia yang kebanyakan tidak dapat menyerap banyak ilmu maupun pengetahuan dari sekolahnya cenderung akan lebih tolol lagi jika pemblokiran wikipedia benar-benar terjadi. kamu lihat:&#xA;&#xA;kurikulum yang tidak jelas, tidak realistis&#xA;&#xA;saat aku pegang kedua buku yang berbeda, satu dari berbasis kurikulum 2013, dan satunya dari kurikulum merdeka, perbedaannya sangat menonjol:&#xA;&#xA;dalam buku kurikulum k13 tersebut, penjelasan materi cenderung lebih luas daripada sebuah tugas per bab. Setiap tugas yang diberikan di dalam buku itu mereferensikan dengan apa yang sudah dijabarkan kepada siswa, Mau itu telah dijelaskan oleh guru maupun tidak, semua jawaban dan pengetahuan dapat didapatkan dari satu buku ini secara otodidak oleh siswa.&#xA;&#xA;perhatikan lampiran 2 halaman ini, lalu simpulkan sendiri:&#xA;gambar&#xA;gambar&#xA;&#xA;sedangkan pada buku kurikulum merdeka, penjelasan pada sebuah materi hampir cenderung nihil pada buku mata pelajaran masing-masing. jika tugas-tugas ini dijelaskan oleh guru terlebih dahulu, mungkin masuk akal, namun jika orang tua yang menjelaskan kepada anaknya, maka kenapa siswa harus masuk sekolah dari awal?&#xA;&#xA;kejadian di lapangan menunjukkan bahwa kebanyakan guru cenderung jarang memberikan penjelasan pada jam kelas dan terkadang hanya dijelaskan pada saat les, dan walaupun itu dibantu dengan memperpanjang waktu sekolah siswa yang awalnya dari jam 6 pagi sampai jam 12 (atau 1 siang) menjadi jam 6 pagi (lebih awal) sampai jam 3:45.&#xA;&#xA;masalahnya, begini:&#xA;penyampaian materi pada buku-buku ini cenderung kompleks, dan bahkan demikian saat lapangan menunjukkan bahwa di Sekolah Dasar pun memiliki masalah seperti ini.&#xA;guru di lapangan yang baru terjun di mata pelajaran ini justru kewalahan dengan kompleksitivitas metode penyampaian materi yang disampaikan. ini seharusnya sudah tidak terjadi di beberapa wilayah, namun hasil di lapangan pun menunjukkan bahwa guru baru pun tetap memiliki masalah serupa.&#xA;kebanyakan guru di lapangan cenderung tidak melakukan penjelasan, dan justru memberikan tugas lalu kemudian, begitu saja (keluar dari kelas saat belum istirahat, memberikan siswa jam kosong).&#xA;siswa yang tidak mengerti dengan materi yang disampaikan cenderung terjebak dengan materi yang diberikan jika tidak ada semacam les, atau pengajaran di rumah&#xA;orang tua terbebankan oleh tugas-tugas anaknya yang dimana seharusnya sudah dijelaskan oleh guru&#xA;&#xA;dan sebenarnya? beberapa sekolah cenderung mengkeep beberapa mata pelajaran agar tetap mengajarkan beberapa dari kurikulum 2013.&#xA;&#xA;kita sudah melihatnya di lapangan, dan konsenkuensinya, bukan main&#xA;&#xA;perhatikan, lalu buka peramban internetmu sendiri:&#xA;beberapa murid-murid SMA pun tidak dapat membaca, atau bahkan menghitung aritmatika dasar (tambah, kurang, kali, bagi) yang dimana seharusnya sudah bisa&#xA;masih sma, tidak dapat baca jam dinding?? apa kabar dengan gurunya sebelumnya? apakah di lingkungannya tidak pernah ajari cara membaca jam dinding sama sekali??&#xA;&#xA;lalu, begini masalahnya:&#xA;jika kita sebut guru-guru molor pada tugasnya di lapangan, sebenarnya ada faktor yang memperjelaskan keadaan guru:&#xA;&#xA;guru kita underpaid. serius.&#xA;&#xA;jika kita lihat keadaan di lapangan, beberapa guru hanya digaji sekitaran 200 ribu ataupun hanya 150 ribu perbulan.&#xA;&#xA;iya. sebanyak uang kas yang kita keluarkan setiap 4 hari.&#xA;&#xA;sebenarnya, beberapa pihak sudah mendesak pemerintah untuk menaikkan gaji guru, namun pemerintah condong ke MBG yang secara bersamaan menyebabkan inflasi harga sembako di beberapa kota beserta tutupnya beberapa UMKM di wilayah sekolah. dan secara bersamaan, gaji guru dipotong di situasi yang bersamaan.&#xA;&#xA;sekarang, sudah lihat kan?&#xA;&#xA;---&#xA;&#xA;mungkin itu saja dariku.&#xA;&#xA;jika terdapat kesalahan, buatlah pos yang mengkoreksi artikelku ini.&#xA;&#xA;sekian,&#xA;&#xA;seorang mantan siswa yang melihat transisi k13 ke kurikulum merdeka.]]&gt;</description>
      <content:encoded><![CDATA[<h2 id="sepucuk-pendapat-pribadi-siswa-dan-sekolah">sepucuk pendapat pribadi: siswa, dan sekolah</h2>

<p>jika kamu pikir-pikir, keadaan siswa-siswi Indonesia yang kebanyakan tidak dapat menyerap banyak ilmu maupun pengetahuan dari sekolahnya cenderung akan lebih tolol lagi jika <a href="https://id.wikipedia.org/wiki/Wikipedia:Pernyataan_resmi_komunitas_Wikipedia_bahasa_Indonesia_terhadap_pembatasan_akses_auth.wikimedia.org_di_Indonesia" rel="nofollow">pemblokiran wikipedia</a> benar-benar terjadi. kamu lihat:</p>

<h2 id="kurikulum-yang-tidak-jelas-tidak-realistis">kurikulum yang tidak jelas, tidak realistis</h2>

<p>saat aku pegang kedua buku yang berbeda, satu dari berbasis kurikulum 2013, dan satunya dari kurikulum merdeka, perbedaannya sangat menonjol:</p>

<p>dalam buku kurikulum k13 tersebut, penjelasan materi cenderung lebih luas daripada sebuah tugas per bab. Setiap tugas yang diberikan di dalam buku itu mereferensikan dengan apa yang sudah dijabarkan kepada siswa, Mau itu telah dijelaskan oleh guru maupun tidak, semua jawaban dan pengetahuan dapat didapatkan dari satu buku ini secara otodidak oleh siswa.</p>

<p>perhatikan lampiran 2 halaman ini, lalu simpulkan sendiri:
<a href="https://media.fedinet.waltuh.cyou/media/aa394e454a4d5d5f8cefef8d9bf56fd80d5b8bfd8c19b2a5c1d07cf243655b56.png" rel="nofollow"><img src="https://media.fedinet.waltuh.cyou/media/aa394e454a4d5d5f8cefef8d9bf56fd80d5b8bfd8c19b2a5c1d07cf243655b56.png" alt="gambar"></a>
<a href="https://media.fedinet.waltuh.cyou/media/09bc31780c586e0710d767f0f4eae92a22626784cd1c34ea818cfa405b5fd19c.png" rel="nofollow"><img src="https://media.fedinet.waltuh.cyou/media/09bc31780c586e0710d767f0f4eae92a22626784cd1c34ea818cfa405b5fd19c.png" alt="gambar"></a></p>

<p>sedangkan pada buku kurikulum merdeka, penjelasan pada sebuah materi hampir cenderung nihil pada buku mata pelajaran masing-masing. jika tugas-tugas ini dijelaskan oleh guru terlebih dahulu, mungkin masuk akal, namun jika orang tua yang menjelaskan kepada anaknya, <strong>maka kenapa siswa harus masuk sekolah dari awal?</strong></p>

<p>kejadian di lapangan menunjukkan bahwa kebanyakan guru cenderung <strong>jarang</strong> memberikan penjelasan pada jam kelas dan terkadang hanya dijelaskan pada saat les, dan walaupun itu dibantu dengan memperpanjang waktu sekolah siswa yang awalnya dari jam 6 pagi sampai jam 12 (atau 1 siang) menjadi jam 6 pagi (lebih awal) <strong>sampai jam 3:45</strong>.</p>

<p>masalahnya, begini:
– penyampaian materi pada buku-buku ini cenderung kompleks, dan bahkan demikian saat lapangan menunjukkan bahwa di Sekolah Dasar pun memiliki masalah seperti ini.
– guru di lapangan yang baru terjun di mata pelajaran ini <strong>justru kewalahan dengan kompleksitivitas</strong> metode penyampaian materi yang disampaikan. ini seharusnya sudah tidak terjadi di beberapa wilayah, namun hasil di lapangan pun menunjukkan bahwa <strong>guru baru pun tetap memiliki masalah serupa</strong>.
– kebanyakan guru di lapangan cenderung <strong>tidak melakukan penjelasan</strong>, dan justru memberikan tugas lalu kemudian, <em>begitu saja</em> (keluar dari kelas saat belum istirahat, memberikan siswa jam kosong).
– siswa yang tidak mengerti dengan materi yang disampaikan cenderung terjebak dengan materi yang diberikan jika tidak ada semacam les, atau pengajaran di rumah
– <strong>orang tua terbebankan oleh tugas-tugas anaknya yang dimana seharusnya sudah dijelaskan oleh guru</strong></p>

<p>dan sebenarnya? beberapa sekolah cenderung meng<em>keep</em> beberapa mata pelajaran agar tetap mengajarkan beberapa dari kurikulum 2013.</p>

<h2 id="kita-sudah-melihatnya-di-lapangan-dan-konsenkuensinya-bukan-main">kita sudah melihatnya di lapangan, dan konsenkuensinya, <strong>bukan main</strong></h2>

<p>perhatikan, lalu buka peramban internetmu sendiri:
– beberapa murid-murid SMA pun <strong>tidak dapat membaca</strong>, atau bahkan <strong>menghitung aritmatika dasar (tambah, kurang, kali, bagi)</strong> yang dimana seharusnya sudah bisa
– <strong>masih sma, tidak dapat baca jam dinding??</strong> apa kabar dengan gurunya sebelumnya? apakah di lingkungannya tidak pernah ajari cara membaca jam dinding sama sekali??</p>

<p>lalu, begini masalahnya:
– jika kita sebut guru-guru <strong>molor</strong> pada tugasnya di lapangan, sebenarnya ada faktor yang memperjelaskan keadaan guru:</p>

<h2 id="guru-kita-underpaid-serius">guru kita underpaid. serius.</h2>

<p>jika kita lihat keadaan di lapangan, beberapa guru hanya digaji sekitaran 200 ribu ataupun hanya 150 ribu <strong>perbulan</strong>.</p>

<p>iya. sebanyak uang kas yang kita keluarkan setiap 4 hari.</p>

<p>sebenarnya, beberapa pihak sudah mendesak pemerintah untuk menaikkan gaji guru, namun pemerintah condong ke MBG yang secara bersamaan menyebabkan inflasi harga sembako di beberapa kota beserta tutupnya beberapa UMKM di wilayah sekolah. dan secara bersamaan, <strong>gaji guru dipotong</strong> di situasi yang bersamaan.</p>

<p>sekarang, sudah lihat kan?</p>

<hr>

<p>mungkin itu saja dariku.</p>

<p>jika terdapat kesalahan, <strong>buatlah pos yang mengkoreksi artikelku ini</strong>.</p>

<p>sekian,</p>

<p>seorang mantan siswa yang melihat transisi k13 ke kurikulum merdeka.</p>
]]></content:encoded>
      <guid>https://pen.waltuh.cyou/yonle/sepucuk-pendapat-pribadi-siswa-dan-sekolah</guid>
      <pubDate>Thu, 23 Apr 2026 10:27:02 +0000</pubDate>
    </item>
    <item>
      <title>A messy little rambling of mine. Might be gibberish</title>
      <link>https://pen.waltuh.cyou/yonle/a-messy-little-rambling-of-mine</link>
      <description>&lt;![CDATA[Well, Look. Since i&#39;ve said this before in the VC, So i might wanna make things clear a bit since i spoke all of that during my little jogging that i can&#39;t really focus on my words.&#xA;&#xA;Caution to reader: This might sounded misogynistic at first, But it&#39;s actually not. If you still thought so, Close this tab.&#xA;&#xA;---&#xA;&#xA;To begin with, I literally didn&#39;t care if you&#39;re a male or female to begin with. If one completely acted like a cunt to the point i can&#39;t even hold my fury, then so be it.&#xA;&#xA;Like any usual middle high schoolers, There&#39;s always that one person that literally despise you for no reason but then will need you for something else, and that kind of person is always here. I would like to say this, though. I really don&#39;t want to have debates to begin with, But given the amount of volumes of BS that i get everyday from these individuals, That same exact incident changed exactly who i am since that very day.&#xA;&#xA;Please remember: I talk about one specific person. It doesn&#39;t even mean that i will treat everyone exactly the same treatment. There&#39;s a reason for why the following happens.&#xA;&#xA;There&#39;s that one girl who since the last year of middle school will always cut me off everytime i talk to teacher or my close friend (rare, but it occurs), or during group discussion. These cuts are not even polite or anything, but rather pure disrespect.&#xA;&#xA;There are time where i literally had enough to that girl that i literally slam my hands onto the table to shut that one person off due to constant cutting off and the disrespect that she put,&#xA;&#xA;When she fight back with words, This time i snapped and shouted back at her, It&#39;s all going on back and forth until a classmate stop both of us.&#xA;&#xA;---&#xA;&#xA;Well, This is basically a messy rambling that i try to recall on my brain that then ended up being messy.&#xA;&#xA;To be frank, I do not really want to be a debater to begin with, But i guess there&#39;s so many factors to the point that I literally became one.]]&gt;</description>
      <content:encoded><![CDATA[<p>Well, Look. Since i&#39;ve said this before in the VC, So i might wanna make things clear a bit since i spoke all of that during my little jogging that i can&#39;t really focus on my words.</p>

<p><strong>Caution to reader</strong>: This might sounded <a href="https://dictionary.cambridge.org/us/dictionary/english/misogynistic" rel="nofollow">misogynistic</a> at first, But it&#39;s actually not. If you still thought so, <strong><a href="https://google.com" rel="nofollow">Close this tab</a></strong>.</p>

<hr>

<p>To begin with, I literally didn&#39;t care if you&#39;re a male or female to begin with. If one completely acted like a cunt to the point i can&#39;t even hold my fury, then so be it.</p>

<p>Like any usual middle high schoolers, There&#39;s always that one person that literally despise you for no reason but then will need you for something else, and that kind of person is always here. I would like to say this, though. I really don&#39;t want to have debates to begin with, But given the amount of volumes of BS that i get everyday from these individuals, That same exact incident changed exactly who i am since that very day.</p>

<p>Please remember: <strong>I talk about one specific person</strong>. It doesn&#39;t even mean that i will treat everyone exactly the same treatment. There&#39;s a reason for why the following happens.</p>

<p>There&#39;s that one girl who since the last year of middle school will always cut me off everytime i talk to teacher or my close friend (rare, but it occurs), or during group discussion. These cuts are not even polite or anything, but rather pure disrespect.</p>

<p>There are time where i literally had enough to that girl that i literally slam my hands onto the table to shut that one person off due to constant cutting off and the disrespect that she put,</p>

<p>When she fight back with words, This time i snapped and shouted back at her, It&#39;s all going on back and forth until a classmate stop both of us.</p>

<hr>

<p>Well, This is basically a messy rambling that i try to recall on my brain that then ended up being messy.</p>

<p>To be frank, I do not really want to be a debater to begin with, But i guess there&#39;s so many factors to the point that I literally became one.</p>
]]></content:encoded>
      <guid>https://pen.waltuh.cyou/yonle/a-messy-little-rambling-of-mine</guid>
      <pubDate>Mon, 20 Apr 2026 19:45:15 +0000</pubDate>
    </item>
    <item>
      <title>iommu with sr-iov: gpu accelerated windows vm on a linux laptop that has only igpu</title>
      <link>https://pen.waltuh.cyou/yonle/iommu-with-sr-iov-gpu-accelerated-windows-vm-on-a-linux-laptop-that-has-only</link>
      <description>&lt;![CDATA[screenshot of a windows 11 vm guest with gpu hardware acceleration&#xA;smallscreenshot of a windows 11 vm guest with gpu hardware acceleration/small&#xA;&#xA;the first thing that came to my mind when you need to have a gpu passthrough, Often it requires another secondary dedicated graphics card that&#39;s unused by the host. if not that, then paravirtualization solution such as virtualbox/vmware/spice guest tools, or virgl3d.&#xA;&#xA;but then we have sr-iov which specially targets a intel processor computer that let us create a virtual function (VF) of Intel UHD Graphics iGPU. This lets us to be able to do gpu passthrough to our VM without needing to have it being unused. in this blog, i will talk on how i set this up&#xA;&#xA;disclaimer: sriov is still considered experimental. things might break here if you&#39;re unlucky, but it shouldn&#39;t be.&#xA;&#xA;setting up&#xA;&#xA;you will need to ensure that the intel processor that you are using is Gen 9.5 and newer for the best experience as possible. Ensure that both VT-x and VT-d are enabled on the bios settings so you can use IOMMU for hardware passthrough, otherwise you will still limited in paravirtualization.&#xA;&#xA;the operating system that i use at the time of this writing is arch linux. kernel is the default arch kernel. since sriov hasn&#39;t getting mainstreamed yet, so we just install the i915-sriov dkms module via aur:&#xA;yay -S i915-sriov-dkms&#xA;&#xA;or manually install it from source:&#xA;git clone --depth=1 https://github.com/strongtz/i915-sriov-dkms&#xA;doas dkms add ./i915-sriov-dkms&#xA;&#xA;install the module&#xA;doas dkms install i915-sriov-dkms/2026.05.06&#xA;&#xA;then rebuild your initramfs&#xA;&#xA;smallreplace 2026.05.06 with the current version of the module/small&#xA;&#xA;just to make it compatible with other kernel, i will use the dkms variant since it&#39;s easier to maintain and switch kernel back and forth just in case.&#xA;&#xA;for your convenience, please add yourself to kvm group: usermod -aG kvm you&#xA;&#xA;kernel&#xA;&#xA;continuing, we begin by explicitly making the kernel to enable intel iommu by adding this to the kernel boot param. 1 VFs is generally enough. you can pick which driver you will want to use in between the two:&#xA;&#xA;i915:&#xA;inteliommu=on i915.enableguc=3 i915.maxvfs=1 moduleblacklist=xe&#xA;&#xA;xe (the new experimental driver. you will need it if you have for like, Intel Arc/Iris):&#xA;inteliommu=on xe.maxvfs=1 xe.forceprobe=device-id moduleblacklist=i915&#xA;smallYou can also try to use xe on iGPU, however given how new this driver is, it might be unstable/small&#xA;&#xA;To get device-id, You can obtain it by executing lspci -nn | grep -i vga and then obtain the 16 bit hexadecimal digit of the iGPU id:&#xA;&#xA;[yonle@yonle ~]$ lspci -nn | grep -i vga&#xA;0000:00:02.0 VGA compatible controller [0300]: Intel Corporation Alder Lake-UP3 GT1 [UHD Graphics] [8086:46b3] (rev 0c)&#xA;&#xA;as you see here, the device id of my iGPU is 46b3, which then you will use this for the boot param above and later on.&#xA;&#xA;now reboot, and then check dmesg to see whenever SR-IOV is actually loaded properly:&#xA;[yonle@yonle ~]$ doas dmesg | grep -i sriov&#xA;[    5.169765] i915: You are using the i915-sriov-dkms module, a ported version of the i915/xe module with SR-IOV support.&#xA;[    5.169767] i915: Please file any bug report at https://github.com/strongtz/i915-sriov-dkms/issues/new.&#xA;[    5.169768] i915: Module Homepage: https://github.com/strongtz/i915-sriov-dkms&#xA;[    5.289502] intelsriovcompat: loaded&#xA;smallreplace &#34;doas&#34; as &#34;sudo&#34; if you use sudo./small&#xA;&#xA;if you saw intelsriovcompat: loaded, you&#39;re good to go.&#xA;&#xA;making the virtual function&#xA;&#xA;technically, you can manually load it via command line. but for some reason it might give you more works than necessary to get your things working.&#xA;&#xA;so, assuming you&#39;re on arch linux, make a systemd-tmpfiles config specifically to make just 1 vf. edit /etc/tmpfiles.d/i915-set-sriov-numvfs.conf:&#xA;Path                                              Mode UID  GID  Age Argument&#xA;Uncomment the next line and change the argument to the number of VFs you want&#xA;w /sys/devices/pci0000:00/0000:00:02.0/sriovnumvfs -    -    -    -   1&#xA;&#xA;and then, make a udev rules to block vf (except host) to be used as a main by host (eg, your main de/wm). edit /etc/udev/rules.d/99-i915-vf-vfio.rules:&#xA;ACTION==&#34;add&#34;, SUBSYSTEM==&#34;pci&#34;, KERNEL==&#34;0000:00:02.1&#34;, ATTR{vendor}==&#34;0x8086&#34;, ATTR{device}==&#34;0x46b3&#34;, DRIVER!=&#34;vfio-pci&#34;, RUN+=&#34;/bin/sh -c &#39;echo \$kernel   /sys/bus/pci/devices/\$kernel/driver/unbind; echo vfio-pci   /sys/bus/pci/devices/\$kernel/driveroverride; modprobe vfio-pci; echo \$kernel   /sys/bus/pci/drivers/vfio-pci/bind&#39;&#34;&#xA;&#xA;note: replace 46b3 with your gpu device id that you obtained above.&#xA;&#xA;then, reboot.&#xA;&#xA;you must see 2 iGPU now when running lspci now:&#xA;[yonle@yonle module]$ lspci | grep -i vga&#xA;0000:00:02.0 VGA compatible controller: Intel Corporation Alder Lake-UP3 GT1 [UHD Graphics] (rev 0c)&#xA;0000:00:02.1 VGA compatible controller: Intel Corporation Alder Lake-UP3 GT1 [UHD Graphics] (rev 0c)&#xA;&#xA;remember: your guest must only use the vf one, in this case, it&#39;s 0000:00:02.1&#xA;&#xA;kvmfr&#xA;&#xA;as we&#39;re also going to use looking glass, let&#39;s prepare kvmfr for the shared memory.&#xA;&#xA;first, ensure that your kernel header has been installed properly before installing the dkms module.&#xA;&#xA;installing manually&#xA;&#xA;obtain the source code tarball from here, and then extract module folder, and then,&#xA;&#xA;cd module&#xA;doas dkms install .&#xA;&#xA;caution: you must rebuild the DKMS on each kernel update / when you switch to different kernel.&#xA;&#xA;installing via AUR&#xA;&#xA;yay -S looking-glass-module-dkms&#xA;&#xA;👍&#xA;&#xA;configuring kvmfr&#xA;&#xA;you should be able to load kvmfr now:&#xA;doas modprobe kvmfr staticsizemb=32&#xA;&#xA;the looking glass docs has a fantastic explanation on how do you determine a shared memory for your DMA, which you should read.&#xA;&#xA;now, let&#39;s make this module gets loaded automatically on boot. First we need to set the default kvmfr load param by editing  /etc/modprobe.d/kvmfr.conf, then putting this:&#xA;options kvmfr staticsizemb=32&#xA;&#xA;then edit /etc/modules-load.d/kvmfr.conf and add this:&#xA;kvmfr&#xA;&#xA;now, we make a udev rule to ensure that the device got a proper permission. edit /etc/udev/rules.d/99-kvmfr.rules:&#xA;SUBSYSTEM==&#34;kvmfr&#34;, OWNER=&#34;user&#34;, GROUP=&#34;kvm&#34;, MODE=&#34;0660&#34;&#xA;&#xA;replace user with your username.&#xA;&#xA;to apply the udev permission immediately, do&#xA;doas chown you:kvm /dev/kvmfr0&#xA;doas chmod 660 /dev/kvmfr0&#xA;&#xA;now edit /etc/libvirt/qemu.conf, and uncomment cgroupdeviceacl and add /dev/kvmfr0 in it:&#xA;cgroupdeviceacl = [&#xA;    &#34;/dev/null&#34;, &#34;/dev/full&#34;, &#34;/dev/zero&#34;,&#xA;    &#34;/dev/random&#34;, &#34;/dev/urandom&#34;,&#xA;    &#34;/dev/ptmx&#34;, &#34;/dev/userfaultfd&#34;,&#xA;    &#34;/dev/kvmfr0&#34;&#xA;]&#xA;&#xA;then restart libvirtd daemon.&#xA;&#xA;make a vm&#xA;&#xA;we will use libvirt with virt-manager as the client.&#xA;&#xA;the vm that we will create will be a Microsoft Windows 11 VM.&#xA;&#xA;before you begin your installation, Do a customization first. On [Overview]&#39;s XML, Replace the following top:&#xA;domain type=&#34;kvm&#34;&#xA;&#xA;with this:&#xA;domain xmlns:qemu=&#34;http://libvirt.org/schemas/domain/qemu/1.0&#34; type=&#34;kvm&#34;&#xA;&#xA;and then, add the following inside the domain field:&#xA;  qemu:commandline&#xA;    qemu:arg value=&#34;-device&#34;/&#xA;    qemu:arg value=&#34;{&#39;driver&#39;:&#39;ivshmem-plain&#39;,&#39;id&#39;:&#39;lg&#39;,&#39;memdev&#39;:&#39;looking-glass&#39;}&#34;/&#xA;    qemu:arg value=&#34;-object&#34;/&#xA;    qemu:arg value=&#34;{&#39;qom-type&#39;:&#39;memory-backend-file&#39;,&#39;id&#39;:&#39;looking-glass&#39;,&#39;mem-path&#39;:&#39;/dev/kvmfr0&#39;,&#39;size&#39;:33554432,&#39;share&#39;:true}&#34;/&#xA;  /qemu:commandline&#xA;&#xA;replace 33554432 with your calculated shared memory.&#xA;&#xA;then, [Add Hardware] -  [PCI Host Device], Look for your VF iGPU (from the previous lspci, it must be 0000:00:02.1)&#xA;&#xA;remove the existing keyboard and tablet input, and make new inputs for both things with virtio bus in it. Additionally, If there&#39;s &#34;EvTouch&#34; or anything outside of &#34;ps2&#34; and &#34;virtio&#34; inputs, you may also want to attach it too.&#xA;&#xA;and then proceed installation with vga as usual until you finished installing the OS with Intel Graphics Driver and Windows Virtio Drivers installed.&#xA;&#xA;Since i&#39;m in Gen 12th alder lake, I installed the ones with version 32.0.101.7085 as of the time of this writing (or, &#34;Intel® 11th – 14th Gen Processor Graphics - Windows*&#34;).&#xA;&#xA;you should only need to install Intel Graphics Driver and that&#39;s all it takes to work. after installation, reboot to ensure that the driver is actually being loaded properly and then check via device manager (right click on the start button and then go from here). it should look like this:&#xA;&#xA;device manager&#xA;smallnote: i will guide you on setting up Virtual Display Driver from here/small&#xA;&#xA;until looking glass and VDD has been configured, you must not turn VGA to None until you finished following the steps below&#xA;&#xA;Virtual Display Driver (VDD)&#xA;&#xA;usually, you use a dummy HDMI or DP adapter to make GPU start drawing a screen. Since we can&#39;t do that via VF, We basically make a screen of our own here. &#xA;&#xA;open your terminal, and execute&#xA;winget install --id=VirtualDrivers.Virtual-Display-Driver -e --source winget&#xA;&#xA;once succesfully installing it, open new terminal tab, and type&#xA;&amp; &#39;VDD Control.exe&#39;&#xA;&#xA;It will launch new window looking like this:&#xA;&#xA;virtual display driver window&#xA;&#xA;Press [Install Driver] and proceed driver installation. If succeed, The OS will make an animation as if a secondary monitor has got plugged in.&#xA;&#xA;Looking Glass&#xA;&#xA;Now, Install looking glass on your host machine:&#xA;yay -S looking-glass&#xA;&#xA;and then on your VM, Install the Looking Glass Host, which you can obtain from here,&#xA;&#xA;after getting looking glass host started in VM, try connecting it on the host machine by just typing looking-glass.&#xA;&#xA;if you saw the virtual display monitor from here, then congrats. your setup works properly.&#xA;&#xA;looking glass&#xA;&#xA;now, power off your VM, and then set VGA to None. and then start the VM. The console display won&#39;t be visible, then launch Looking Glass on your host machine again.&#xA;&#xA;after you finished configuring the display here, it should look like this now:&#xA;&#xA;looking glass, after configuring&#xA;&#xA;audio enhancement&#xA;&#xA;the default ich9 sound driver suffer through latency issues if got bombarded with a lot of things all at once, especially rhythm games that requires low latency.&#xA;&#xA;we can use scream audio driver here. but do the following first:&#xA;ensure that the network card is virtio, if not, switch to it&#xA;remove ich9 audio card&#xA;&#xA;for arch linux, you can get scream receiver via aur:&#xA;yay -S scream-git&#xA;&#xA;and then just launch the receiver in the background:&#xA;scream -u -i virbr0 -o jack&#xA;&#xA;the command above should be enough for everyday usage. the audio latency is low and is fairly balanced enough for daily usecase.&#xA;&#xA;if you wanna go to the lowest possible latency:&#xA;scream -u -i virbr0 -o raw | pw-cat --playback --format=s32 --rate=48000 --channels=2 --raw --latency 128 -&#xA;&#xA;you may adjust the latency flag value if 128 wasn&#39;t doing well. ensure that the samplerate, channels, and pcm format matches to what you are configuring in the Windows VM.&#xA;&#xA;you can check the latency by checking pw-top.&#xA;&#xA;note: this assumes that your setup is using pipewire.&#xA;&#xA;while it&#39;s chilling in the background, let&#39;s set up the windows driver for it.&#xA;&#xA;first, turn on test mode. open terminal as administrator (right click start -  Terminal (Admin)), run:&#xA;bcdedit /set testsigning on&#xA;&#xA;then restart the vm. You must see [Test Mode] on the bottom-right corner of your wallpaper.&#xA;&#xA;download the non-source zip (Usually named in ScreamX.X.zip) from here, extract it, Navigate to scream folder/Install/driver/x64/ and open terminal as an admin here, then run:&#xA;pnputil /add-driver .\Scream.inf /install&#xA;&#xA;before we finally disable test mode:&#xA;bcdedit /set testsigning off&#xA;&#xA;configure the scream audio driver via registry editor. in this case, it can be done via command line below:&#xA;REG ADD HKLM\SYSTEM\CurrentControlSet\Services\Scream\Options /v UnicastIPv4 /t REGSZ /d &#34;192.168.122.1&#34; /f&#xA;REG ADD HKLM\SYSTEM\CurrentControlSet\Services\Scream\Options /v UnicastPort /t REGDWORD /d 4010 /f&#xA;&#xA;Replace 192.168.122.1 to your local address of your host that&#39;s being assigned by your virtual bridge, eg virbr0.&#xA;&#xA;and then reboot.&#xA;&#xA;caveats&#xA;&#xA;if you only loaded i915 with xe blacklisted, any activities on the host (except the guest) that has involvement of vulkan may start slowly / temporarily stall the entire drm. this can be fixed by trying to use the xe driver instead, however&#xA;xe can get both OpenGL and Vulkan properly, but might stall the entire drm once the vm finished booting&#xA;&#xA;loading both drivers simultaneously does not currently resolve these problems.&#xA;&#xA;if these issues become annoying, consider adding a separate bootloader entry that disables SR-IOV and IOMMU entirely. This allows you to boot into a normal configuration when you don&#39;t plan to run a VM.&#xA;&#xA;extra&#xA;&#xA;my windows 11 VM desktop with task manager&#xA;&#xA;if necessary, you can try debloat your windows VM by using these tools:&#xA;raphire/Win11Debloat to remove most of the bloats&#xA;es3n1n/defendnot to disable windows defender by pretending there&#39;s other antivirus in order to reduce load&#xA;&#xA;cpu usage:&#xA;cpu usage&#xA;&#xA;ram usage:&#xA;ram usage&#xA;&#xA;extra note: if at some point you plan to do gaming here, including low latency gaming, consider attaching your input devices (keyboard, mouse) into your VM via passthrough, as the existing input grabber is meant for a normal workstation purpose.&#xA;&#xA;extra note2: given that you have installed virtio drivers above, switch your VM network card to virtio for best performance.&#xA;&#xA;extra note3: if you&#39;re still overwhelmed by both visual and audio latency even with solutions above, consider using dGPU passing and passing external soundcard into VM instead.&#xA;&#xA;---&#xA;&#xA;if you need to see how the config looks like on the system, you can check on my dotfiles to see what has been configured here and there.&#xA;&#xA;troubleshooting&#xA;&#xA;looking glass suddenly stuck on [The host application seems to not be running]&#xA;&#xA;the VF of your iGPU could have been overwhelmed probably due to multiple reusage (eg, constant reboot, you suspended your laptop while VF is still in effect, etc). to fix this, try reboot your host. if this still didn&#39;t fix the problem, then try reinstalling the intel graphics driver inside the VM.&#xA;&#xA;mouse sensitivity is way too high on looking glass&#xA;&#xA;trying to navigate the display without capturing your mouse will have this kind of behavior by default. enable capture mode by pressing the looking glass&#39;s escape key (the default is scrolllock. you can change this by setting -m KEYKEY when launching looking glass via command line).&#xA;&#xA;error code 43&#xA;&#xA;try disable &#34;memory isolation&#34; in windows security:&#xA;screenshot of windows security on &#34;Memory Isolation&#34; part, disabled&#xA;&#xA;and reboot.&#xA;&#xA;if error 43 still occurs, try check the intel driver. The suggested version is above v32. if it goes below that (especially windows update default, 31), It might not be able to recognize the hw properly, so try reinstall the intel driver and try again.&#xA;&#xA;---&#xA;&#xA;aand that&#39;s it.&#xA;&#xA;for references:&#xA;Looking Glass B7 Installation Documentation&#xA;i915-sriov-dkms docs&#xA;Libvirt: Domain XML Format documentation&#xA;Github: Scream audio driver README&#xA;&#xA;honorable mention: My best friend RionWijaya for informing me with his experiments and then help me a bit&#xA;&#xA;happy VM-ing once again.&#xA;&#xA;p.s.: you can try to apply the same logic if you have a spare dGPU by skipping the intel sr-iov &amp; iommu step]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://media.fedinet.waltuh.cyou/media/65780ee459ab9fb521dcb3c7bdd4313df09fde97768ee42aa5ec1b4fe06f1cb7.png" alt="screenshot of a windows 11 vm guest with gpu hardware acceleration">
<small>screenshot of a windows 11 vm guest with gpu hardware acceleration</small></p>

<p>the first thing that came to my mind when you need to have a gpu passthrough, Often it requires another secondary dedicated graphics card that&#39;s unused by the host. if not that, then paravirtualization solution such as virtualbox/vmware/spice guest tools, or virgl3d.</p>

<p>but then we have <a href="https://github.com/strongtz/i915-sriov-dkms" rel="nofollow">sr-iov</a> which specially targets a intel processor computer that let us create a virtual function (VF) of Intel UHD Graphics iGPU. This lets us to be able to do gpu passthrough to our VM without needing to have it being unused. in this blog, i will talk on how i set this up</p>

<p><strong>disclaimer</strong>: sriov is still considered experimental. things might break here if you&#39;re unlucky, but it shouldn&#39;t be.</p>

<h2 id="setting-up">setting up</h2>

<p>you will need to ensure that the intel processor that you are using is <strong>Gen 9.5 and newer</strong> for the best experience as possible. Ensure that both <strong>VT-x and VT-d</strong> are enabled on the bios settings so you can use IOMMU for hardware passthrough, otherwise you will still limited in paravirtualization.</p>

<p>the operating system that i use at the time of this writing is arch linux. kernel is the default arch kernel. since sriov hasn&#39;t getting mainstreamed yet, so we just install the i915-sriov dkms module via aur:</p>

<pre><code>yay -S i915-sriov-dkms
</code></pre>

<p>or manually install it from source:</p>

<pre><code class="language-bash">git clone --depth=1 https://github.com/strongtz/i915-sriov-dkms
doas dkms add ./i915-sriov-dkms

# install the module
doas dkms install i915-sriov-dkms/2026.05.06

# then rebuild your initramfs
</code></pre>

<p><small>replace <code>2026.05.06</code> with the current version of the module</small></p>

<p>just to make it compatible with other kernel, i will use the dkms variant since it&#39;s easier to maintain and switch kernel back and forth just in case.</p>

<p>for your convenience, please add yourself to <code>kvm</code> group: <code>usermod -aG kvm you</code></p>

<h2 id="kernel">kernel</h2>

<p>continuing, we begin by explicitly making the kernel to enable intel iommu by adding this to the kernel boot param. 1 VFs is generally enough. you can pick which driver you will want to use in between the two:</p>

<p>i915:</p>

<pre><code>intel_iommu=on i915.enable_guc=3 i915.max_vfs=1 module_blacklist=xe
</code></pre>

<p>xe (the new experimental driver. you will need it if you have for like, Intel Arc/Iris):</p>

<pre><code>intel_iommu=on xe.max_vfs=1 xe.force_probe=device-id module_blacklist=i915
</code></pre>

<p><small>You can also try to use xe on iGPU, however given how new this driver is, it might be unstable</small></p>

<p>To get <code>device-id</code>, You can obtain it by executing <code>lspci -nn | grep -i vga</code> and then obtain the 16 bit hexadecimal digit of the iGPU id:</p>

<pre><code>[yonle@yonle ~]$ lspci -nn | grep -i vga
0000:00:02.0 VGA compatible controller [0300]: Intel Corporation Alder Lake-UP3 GT1 [UHD Graphics] [8086:46b3] (rev 0c)
</code></pre>

<p>as you see here, the device id of my iGPU is <code>46b3</code>, which then you will use this for the boot param above and later on.</p>

<p>now reboot, and then check dmesg to see whenever SR-IOV is actually loaded properly:</p>

<pre><code>[yonle@yonle ~]$ doas dmesg | grep -i sriov
[    5.169765] i915: You are using the i915-sriov-dkms module, a ported version of the i915/xe module with SR-IOV support.
[    5.169767] i915: Please file any bug report at https://github.com/strongtz/i915-sriov-dkms/issues/new.
[    5.169768] i915: Module Homepage: https://github.com/strongtz/i915-sriov-dkms
[    5.289502] intel_sriov_compat: loaded
</code></pre>

<p><small>replace “doas” as “sudo” if you use sudo.</small></p>

<p>if you saw <code>intel_sriov_compat: loaded</code>, you&#39;re good to go.</p>

<h2 id="making-the-virtual-function">making the virtual function</h2>

<p>technically, you can manually load it via command line. but for some reason it might give you more works than necessary to get your things working.</p>

<p>so, assuming you&#39;re on arch linux, make a systemd-tmpfiles config specifically to make just 1 vf. edit <code>/etc/tmpfiles.d/i915-set-sriov-numvfs.conf</code>:</p>

<pre><code>#Path                                              Mode UID  GID  Age Argument
#Uncomment the next line and change the argument to the number of VFs you want
w /sys/devices/pci0000:00/0000:00:02.0/sriov_numvfs -    -    -    -   1
</code></pre>

<p>and then, make a udev rules to block vf (except host) to be used as a main by host (eg, your main de/wm). edit <code>/etc/udev/rules.d/99-i915-vf-vfio.rules</code>:</p>

<pre><code>ACTION==&#34;add&#34;, SUBSYSTEM==&#34;pci&#34;, KERNEL==&#34;0000:00:02.1&#34;, ATTR{vendor}==&#34;0x8086&#34;, ATTR{device}==&#34;0x46b3&#34;, DRIVER!=&#34;vfio-pci&#34;, RUN+=&#34;/bin/sh -c &#39;echo \$kernel &gt; /sys/bus/pci/devices/\$kernel/driver/unbind; echo vfio-pci &gt; /sys/bus/pci/devices/\$kernel/driver_override; modprobe vfio-pci; echo \$kernel &gt; /sys/bus/pci/drivers/vfio-pci/bind&#39;&#34;
</code></pre>

<p><strong>note</strong>: replace <code>46b3</code> with your gpu device id that you obtained above.</p>

<p>then, reboot.</p>

<p>you must see 2 iGPU now when running <code>lspci</code> now:</p>

<pre><code>[yonle@yonle module]$ lspci | grep -i vga
0000:00:02.0 VGA compatible controller: Intel Corporation Alder Lake-UP3 GT1 [UHD Graphics] (rev 0c)
0000:00:02.1 VGA compatible controller: Intel Corporation Alder Lake-UP3 GT1 [UHD Graphics] (rev 0c)
</code></pre>

<p><strong>remember</strong>: your guest <strong>must</strong> only use the vf one, in this case, it&#39;s <code>0000:00:02.1</code></p>

<h2 id="kvmfr">kvmfr</h2>

<p>as we&#39;re also going to use <a href="https://looking-glass.io/docs/B7/" rel="nofollow">looking glass</a>, let&#39;s prepare kvmfr for the shared memory.</p>

<p>first, ensure that your kernel header has been installed properly before installing the dkms module.</p>

<h3 id="installing-manually">installing manually</h3>

<p>obtain the source code tarball from <a href="https://github.com/gnif/LookingGlass/releases/tag/B7" rel="nofollow">here</a>, and then extract <code>module</code> folder, and then,</p>

<pre><code>cd module
doas dkms install .
</code></pre>

<p><strong>caution</strong>: you <strong>must</strong> rebuild the DKMS on each kernel update / when you switch to different kernel.</p>

<h3 id="installing-via-aur">installing via AUR</h3>

<pre><code>yay -S looking-glass-module-dkms
</code></pre>

<p>👍</p>

<h3 id="configuring-kvmfr">configuring kvmfr</h3>

<p>you should be able to load kvmfr now:</p>

<pre><code>doas modprobe kvmfr static_size_mb=32
</code></pre>

<p>the looking glass docs has a <a href="https://looking-glass.io/docs/B7/install_libvirt/#libvirt-determining-memory" rel="nofollow">fantastic explanation</a> on how do you determine a shared memory for your DMA, which you should read.</p>

<p>now, let&#39;s make this module gets loaded automatically on boot. First we need to set the default <code>kvmfr</code> load param by editing  <code>/etc/modprobe.d/kvmfr.conf</code>, then putting this:</p>

<pre><code>options kvmfr static_size_mb=32
</code></pre>

<p>then edit <code>/etc/modules-load.d/kvmfr.conf</code> and add this:</p>

<pre><code>kvmfr
</code></pre>

<p>now, we make a udev rule to ensure that the device got a proper permission. edit <code>/etc/udev/rules.d/99-kvmfr.rules</code>:</p>

<pre><code>SUBSYSTEM==&#34;kvmfr&#34;, OWNER=&#34;user&#34;, GROUP=&#34;kvm&#34;, MODE=&#34;0660&#34;
</code></pre>

<p>replace <code>user</code> with your username.</p>

<p>to apply the udev permission immediately, do</p>

<pre><code>doas chown you:kvm /dev/kvmfr0
doas chmod 660 /dev/kvmfr0
</code></pre>

<p>now edit <code>/etc/libvirt/qemu.conf</code>, and uncomment <code>cgroup_device_acl</code> and add <code>/dev/kvmfr0</code> in it:</p>

<pre><code>cgroup_device_acl = [
    &#34;/dev/null&#34;, &#34;/dev/full&#34;, &#34;/dev/zero&#34;,
    &#34;/dev/random&#34;, &#34;/dev/urandom&#34;,
    &#34;/dev/ptmx&#34;, &#34;/dev/userfaultfd&#34;,
    &#34;/dev/kvmfr0&#34;
]
</code></pre>

<p>then restart <code>libvirtd</code> daemon.</p>

<h2 id="make-a-vm">make a vm</h2>

<p>we will use libvirt with virt-manager as the client.</p>

<p>the vm that we will create will be a Microsoft Windows 11 VM.</p>

<p>before you begin your installation, Do a customization first. On <strong>[Overview]</strong>&#39;s XML, Replace the following top:</p>

<pre><code class="language-xml">&lt;domain type=&#34;kvm&#34;&gt;
</code></pre>

<p>with this:</p>

<pre><code class="language-xml">&lt;domain xmlns:qemu=&#34;http://libvirt.org/schemas/domain/qemu/1.0&#34; type=&#34;kvm&#34;&gt;
</code></pre>

<p>and then, add the following inside the <code>&lt;domain&gt;</code> field:</p>

<pre><code class="language-xml">  &lt;qemu:commandline&gt;
    &lt;qemu:arg value=&#34;-device&#34;/&gt;
    &lt;qemu:arg value=&#34;{&#39;driver&#39;:&#39;ivshmem-plain&#39;,&#39;id&#39;:&#39;lg&#39;,&#39;memdev&#39;:&#39;looking-glass&#39;}&#34;/&gt;
    &lt;qemu:arg value=&#34;-object&#34;/&gt;
    &lt;qemu:arg value=&#34;{&#39;qom-type&#39;:&#39;memory-backend-file&#39;,&#39;id&#39;:&#39;looking-glass&#39;,&#39;mem-path&#39;:&#39;/dev/kvmfr0&#39;,&#39;size&#39;:33554432,&#39;share&#39;:true}&#34;/&gt;
  &lt;/qemu:commandline&gt;
</code></pre>

<p>replace <code>33554432</code> with your calculated shared memory.</p>

<p>then, <strong>[Add Hardware]</strong> –&gt; <strong>[PCI Host Device]</strong>, Look for your VF iGPU (from the previous <code>lspci</code>, it must be <code>0000:00:02.1</code>)</p>

<p>remove the existing keyboard and tablet input, and make new inputs for both things with <code>virtio</code> bus in it. Additionally, If there&#39;s “EvTouch” or anything outside of “ps2” and “virtio” inputs, <strong>you may also want to attach it too</strong>.</p>

<p>and then proceed installation with vga as usual until you finished installing the OS with <a href="https://www.intel.com/content/www/us/en/search.html#sortCriteria=@lastmodifieddt%20descending&amp;cf-tabfilter=Downloads&amp;cf-downloadsppth=Graphics" rel="nofollow">Intel Graphics Driver</a> and <a href="https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers" rel="nofollow">Windows Virtio Drivers</a> installed.</p>

<p>Since i&#39;m in Gen 12th alder lake, I installed the ones with version <code>32.0.101.7085</code> as of the time of this writing (or, “Intel® 11th – 14th Gen Processor Graphics – Windows*“).</p>

<p>you should only need to install <strong>Intel Graphics Driver</strong> and that&#39;s all it takes to work. after installation, reboot to ensure that the driver is actually being loaded properly and then check via device manager (right click on the start button and then go from here). it should look like this:</p>

<p><img src="https://media.fedinet.waltuh.cyou/media/b8d7e9c7bce110d0a756a1ff4def0cd0b23f01f786cd04622ce8296fa29b7158.png" alt="device manager">
<small>note: i will guide you on setting up Virtual Display Driver from here</small></p>

<p><strong>until looking glass and VDD has been configured, you must not turn VGA to <code>None</code> until you finished following the steps below</strong></p>

<h2 id="virtual-display-driver-https-github-com-virtualdrivers-virtual-display-driver-tab-readme-ov-file-vdd"><a href="https://github.com/VirtualDrivers/Virtual-Display-Driver?tab=readme-ov-file" rel="nofollow">Virtual Display Driver</a> (VDD)</h2>

<p>usually, you use a dummy HDMI or DP adapter to make GPU start drawing a screen. Since we can&#39;t do that via VF, We basically make a screen of our own here.</p>

<p>open your terminal, and execute</p>

<pre><code>winget install --id=VirtualDrivers.Virtual-Display-Driver -e --source winget
</code></pre>

<p>once succesfully installing it, open new terminal tab, and type</p>

<pre><code>&amp; &#39;VDD Control.exe&#39;
</code></pre>

<p>It will launch new window looking like this:</p>

<p><img src="https://media.fedinet.waltuh.cyou/media/44cb02c675d303cdf61cfca97eda20b5aa3faa728dc51108f31dd16756ad304f.png" alt="virtual display driver window"></p>

<p>Press <strong>[Install Driver]</strong> and proceed driver installation. If succeed, The OS will make an animation as if a secondary monitor has got plugged in.</p>

<h2 id="looking-glass">Looking Glass</h2>

<p>Now, Install looking glass on your host machine:</p>

<pre><code>yay -S looking-glass
</code></pre>

<p>and then on your VM, Install the Looking Glass Host, which you can obtain from <a href="https://looking-glass.io/downloads" rel="nofollow">here</a>,</p>

<p>after getting looking glass host started in VM, try connecting it on the host machine by just typing <code>looking-glass</code>.</p>

<p>if you saw the virtual display monitor from here, then congrats. your setup works properly.</p>

<p><img src="https://media.fedinet.waltuh.cyou/media/89f86a36ad9c8435dedde54f73d2eda1844f8344cea5607a1cb86a8c4a13f56b.png" alt="looking glass"></p>

<p>now, power off your VM, and then set VGA to <code>None</code>. and then start the VM. <strong>The console display won&#39;t be visible</strong>, then launch Looking Glass on your host machine again.</p>

<p>after you finished configuring the display here, it should look like this now:</p>

<p><img src="https://media.fedinet.waltuh.cyou/media/19242d081d01e6b3bb52f616ecfed55c44f8e8d152285f2845ee97c70fffa942.png" alt="looking glass, after configuring"></p>

<h2 id="audio-enhancement">audio enhancement</h2>

<p>the default ich9 sound driver suffer through latency issues if got bombarded with a lot of things all at once, especially rhythm games that requires low latency.</p>

<p>we can use <a href="https://github.com/duncanthrax/scream" rel="nofollow">scream</a> audio driver here. but do the following first:
– ensure that the network card is <code>virtio</code>, if not, switch to it
– <strong>remove ich9 audio card</strong></p>

<p>for arch linux, you can get scream receiver via aur:</p>

<pre><code>yay -S scream-git
</code></pre>

<p>and then just launch the receiver in the background:</p>

<pre><code>scream -u -i virbr0 -o jack
</code></pre>

<p>the command above should be enough for everyday usage. the audio latency is low and is fairly balanced enough for daily usecase.</p>

<p>if you wanna go to the lowest possible latency:</p>

<pre><code>scream -u -i virbr0 -o raw | pw-cat --playback --format=s32 --rate=48000 --channels=2 --raw --latency 128 -
</code></pre>

<p>you may adjust the <code>latency</code> flag value if <code>128</code> wasn&#39;t doing well. <strong>ensure that the samplerate, channels, and pcm format matches to what you are configuring in the Windows VM</strong>.</p>

<p>you can check the latency by checking <code>pw-top</code>.</p>

<p><strong>note</strong>: this assumes that your setup is using pipewire.</p>

<p>while it&#39;s chilling in the background, let&#39;s set up the windows driver for it.</p>

<p>first, turn on test mode. open terminal as administrator (right click start –&gt; Terminal (Admin)), run:</p>

<pre><code>bcdedit /set testsigning on
</code></pre>

<p>then restart the vm. You must see [Test Mode] on the bottom-right corner of your wallpaper.</p>

<p>download the non-source zip (Usually named in <code>ScreamX.X.zip</code>) from <a href="https://github.com/duncanthrax/scream/releases" rel="nofollow">here</a>, extract it, Navigate to <code>&lt;scream folder&gt;/Install/driver/x64/</code> and open terminal as an admin here, then run:</p>

<pre><code>pnputil /add-driver .\Scream.inf /install
</code></pre>

<p>before we finally disable test mode:</p>

<pre><code>bcdedit /set testsigning off
</code></pre>

<p>configure the scream audio driver via registry editor. in this case, it can be done via command line below:</p>

<pre><code>REG ADD HKLM\SYSTEM\CurrentControlSet\Services\Scream\Options /v UnicastIPv4 /t REG_SZ /d &#34;192.168.122.1&#34; /f
REG ADD HKLM\SYSTEM\CurrentControlSet\Services\Scream\Options /v UnicastPort /t REG_DWORD /d 4010 /f
</code></pre>

<p>Replace <code>192.168.122.1</code> to your local address of your host that&#39;s being assigned by your virtual bridge, eg <code>virbr0</code>.</p>

<p>and then reboot.</p>

<h2 id="caveats">caveats</h2>
<ul><li>if you only loaded <code>i915</code> with <code>xe</code> blacklisted, any activities on the host (except the guest) that has involvement of vulkan may start slowly / temporarily stall the entire drm. this can be fixed by trying to use the <code>xe</code> driver instead, however</li>
<li><code>xe</code> can get both OpenGL and Vulkan properly, but might stall the entire drm once the vm finished booting</li></ul>

<p>loading both drivers simultaneously does not currently resolve these problems.</p>

<p>if these issues become annoying, consider adding a separate bootloader entry that disables SR-IOV and IOMMU entirely. This allows you to boot into a normal configuration when you don&#39;t plan to run a VM.</p>

<h2 id="extra">extra</h2>

<p><img src="https://media.fedinet.waltuh.cyou/media/3b01c40f744434fe0f90d6a56ea7f229e65d980ada3f886528078dafcf806734.png" alt="my windows 11 VM desktop with task manager"></p>

<p>if necessary, you can try debloat your windows VM by using these tools:
– <a href="https://github.com/raphire/win11debloat" rel="nofollow">raphire/Win11Debloat</a> to remove most of the bloats
– <a href="https://github.com/es3n1n/defendnot" rel="nofollow">es3n1n/defendnot</a> to disable windows defender by pretending there&#39;s other antivirus in order to reduce load</p>

<p>cpu usage:
<img src="https://media.fedinet.waltuh.cyou/media/0f84a2f56681550bed41b055d8c9d99987386814776a2c85b0c4d626e945f2c3.png" alt="cpu usage"></p>

<p>ram usage:
<img src="https://media.fedinet.waltuh.cyou/media/1941b380f5e5a702d6fbecc3dd58474f0e73a1651430e268821dd736e6347f6b.png" alt="ram usage"></p>

<p><strong>extra note</strong>: if at some point you plan to do gaming here, including low latency gaming, consider <strong>attaching your input devices</strong> (keyboard, mouse) into your VM via passthrough, as the existing input grabber is meant for a normal workstation purpose.</p>

<p><strong>extra note2</strong>: given that you have installed virtio drivers above, switch your VM network card to <code>virtio</code> for best performance.</p>

<p><strong>extra note3</strong>: if you&#39;re still overwhelmed by both visual and audio latency even with solutions above, consider using dGPU passing and passing external soundcard into VM instead.</p>

<hr>

<p>if you need to see how the config looks like on the system, you can check on my <a href="https://codeberg.org/Yonle/dotfiles" rel="nofollow">dotfiles</a> to see what has been configured here and there.</p>

<h2 id="troubleshooting">troubleshooting</h2>

<p><strong>looking glass suddenly stuck on [The host application seems to not be running]</strong></p>

<p>the VF of your iGPU could have been overwhelmed probably due to multiple reusage (eg, constant reboot, you suspended your laptop while VF is still in effect, etc). to fix this, <strong>try reboot your host</strong>. if this still didn&#39;t fix the problem, then try reinstalling the intel graphics driver inside the VM.</p>

<p><strong>mouse sensitivity is way too high on looking glass</strong></p>

<p>trying to navigate the display without capturing your mouse will have this kind of behavior by default. enable capture mode by pressing the looking glass&#39;s escape key (the default is <code>scrolllock</code>. you can change this by setting <code>-m KEY_&lt;KEY&gt;</code> when launching looking glass via command line).</p>

<p><strong>error code 43</strong></p>

<p>try disable “memory isolation” in windows security:
<img src="https://media.fedinet.waltuh.cyou/media/520f86d73c03f9dd636d3c8bf11482b00c98d6a29c5d36de11745b27a1447952.png" alt="screenshot of windows security on &#34;Memory Isolation&#34; part, disabled"></p>

<p>and reboot.</p>

<p>if error 43 still occurs, try check the intel driver. The suggested version is above v32. if it goes below that (especially windows update default, 31), It might not be able to recognize the hw properly, so try reinstall the intel driver and try again.</p>

<hr>

<p>aand that&#39;s it.</p>

<p>for references:
– <a href="https://looking-glass.io/docs/B7/install/" rel="nofollow">Looking Glass B7 Installation Documentation</a>
– <a href="https://github.com/strongtz/i915-sriov-dkms/tree/master/docs" rel="nofollow">i915-sriov-dkms docs</a>
– <a href="https://libvirt.org/formatdomain.html" rel="nofollow">Libvirt: Domain XML Format documentation</a>
– <a href="https://github.com/duncanthrax/scream" rel="nofollow">Github: Scream audio driver README</a></p>

<p><strong>honorable mention</strong>: My best friend <strong>RionWijaya</strong> for informing me with his experiments and then help me a bit</p>

<p>happy VM-ing once again.</p>

<p><strong>p.s.</strong>: you can try to apply the same logic if you have a spare dGPU by skipping the intel sr-iov &amp; iommu step</p>
]]></content:encoded>
      <guid>https://pen.waltuh.cyou/yonle/iommu-with-sr-iov-gpu-accelerated-windows-vm-on-a-linux-laptop-that-has-only</guid>
      <pubDate>Tue, 14 Apr 2026 15:28:05 +0000</pubDate>
    </item>
    <item>
      <title>&#34;Representative&#34;</title>
      <link>https://pen.waltuh.cyou/yonle/representative</link>
      <description>&lt;![CDATA[there are times when i join a group of some sort just to hang out with these folks, literally have zero goal of being their &#34;member&#34; or &#34;part of their goals&#34; or something.&#xA;&#xA;but then i got dragged.&#xA;&#xA;years ago, when some of the people from that group saw me somewhere outside of the platform that i was in to talk to these folks, first thing that happen to me when these folk saw me first is basically,&#xA;&#xA;  are you XXXXXXXX member?&#xA;&#xA;wasn&#39;t once, twice. if you know that was me,&#xA;can you just, not drag that to where i was in&#xA;&#xA;as if i am being the representative of the organization that I literally have zero goal on being participating with? to put on top of that, despite the requirement, i literally never joined or requested for joining their github org.&#xA;&#xA;honestly, it felt like i was being watched. one thing that&#39;s obvious here, i really despise someone who literally take any kind of member to be their organization representative like literal, where if one did bad thing, then they got relentlessly fucked to death to the point they reach out to the irl stuff.&#xA;&#xA;ever since i disconnect myself from that place, it never felt anything better. for one, there&#39;s someone who just realized why i despise a lot of things from them and then afraid of me hating them for eternity. &#34;you just gave me a new lesson&#34;, they say. does their trial and errors is all done for the sake of &#34;lesson&#34; that would be only better to them? the scratch is still on my mind.&#xA;&#xA;i accepted their apologize.&#xA;but i remain despising how it all went.&#xA;&#xA;it&#39;s simply no good.]]&gt;</description>
      <content:encoded><![CDATA[<p>there are times when i join a group of some sort just to hang out with these folks, literally have zero goal of being their “member” or “part of their goals” or something.</p>

<p>but then i got dragged.</p>

<p>years ago, when some of the people from that group saw me somewhere outside of the platform that i was in to talk to these folks, first thing that happen to me when these folk saw me first is basically,</p>

<blockquote><p>are you XXXXXXXX member?</p></blockquote>

<p>wasn&#39;t once, twice. if you know that was me,
can you just, not drag that to where i was in</p>

<p>as if i am being the representative of the organization that I literally have zero goal on being participating with? to put on top of that, despite the requirement, i literally never joined or requested for joining their github org.</p>

<p>honestly, it felt like i was being watched. one thing that&#39;s obvious here, i really despise someone who literally take any kind of member to be their organization representative like literal, where if one did bad thing, then they got relentlessly fucked to death to the point they reach out to the irl stuff.</p>

<p>ever since i disconnect myself from that place, it never felt anything better. for one, there&#39;s someone who just realized why i despise a lot of things from them and then afraid of me hating them for eternity. “you just gave me a new lesson”, they say. does their trial and errors is all done for the sake of “lesson” that would be only better to them? the scratch is still on my mind.</p>

<p>i accepted their apologize.
but i remain despising how it all went.</p>

<p>it&#39;s simply no good.</p>
]]></content:encoded>
      <guid>https://pen.waltuh.cyou/yonle/representative</guid>
      <pubDate>Mon, 13 Apr 2026 15:27:45 +0000</pubDate>
    </item>
    <item>
      <title>College. first year - April 9th 2026</title>
      <link>https://pen.waltuh.cyou/yonle/college</link>
      <description>&lt;![CDATA[College. first year - April 9th 2026&#xA;&#xA;right now just majoring CS in my College. Still on the first year so i don&#39;t expect much or even thinking that i would success on this one.&#xA;&#xA;Simply said, i&#39;m in the college simply just wanna learn new things. If i can&#39;t really finish some of the assignments properly, then so be it.&#xA;&#xA;the first semester score of mine is lower than everyone else compared. quite surprising, but i don&#39;t really mind as i know why that is as it&#39;s mostly all my fault&#xA;&#xA;wish i can be careful on this one.]]&gt;</description>
      <content:encoded><![CDATA[<h2 id="college-first-year-april-9th-2026">College. first year – April 9th 2026</h2>

<p>right now just majoring CS in my College. Still on the first year so i don&#39;t expect much or even thinking that i would success on this one.</p>

<p>Simply said, i&#39;m in the college simply just wanna learn new things. If i can&#39;t really finish some of the assignments properly, then so be it.</p>

<p>the first semester score of mine is lower than everyone else compared. quite surprising, but i don&#39;t really mind as i know why that is as it&#39;s mostly all my fault</p>

<p>wish i can be careful on this one.</p>
]]></content:encoded>
      <guid>https://pen.waltuh.cyou/yonle/college</guid>
      <pubDate>Thu, 09 Apr 2026 07:48:11 +0000</pubDate>
    </item>
    <item>
      <title>short journal: January 13th 2026</title>
      <link>https://pen.waltuh.cyou/yonle/short-journal-january-13th-2026</link>
      <description>&lt;![CDATA[short journal: January 13th 2026&#xA;&#xA;It&#39;s January 13th 2026 as of the time i am writing this.&#xA;&#xA;This year, is different. Now I basically live independently from the previous high school years where i was close with my mom, continuing study by going to a rather simple college. I must be honest here, I did not perform really well and ended up repeating what i did during mid and high school: Ignoring assignments, which now i had a bunch of them stacked which makes me never stop thinking about it.&#xA;&#xA;Since i move to a city, I learned lots of things on my own with the help of various technologies that we basically knew, And also listened to some of my friends about what his past life was, and how he&#39;s doing today, and what he learn from what he experienced, etc.&#xA;&#xA;Meanwhile, I still have no job yet. I do plan to make my own little business with the skills that i have, But i really have zero experience on doing business at all. So it&#39;s between wanting to had a job or making a little business by my own will.&#xA;&#xA;I am still financially funded by my Dad. I do plan to be independent... I actually know many ways to earn it but i am the one who refused to do it... Simply said, I am really stubborn. Quietly stubborn. To be honest, I really need to control myself to be not so picky.&#xA;&#xA;Well, I wish i can get myself a little better and achieve what i am trying to accomplish... But for now it seems impossible.&#xA;&#xA;That&#39;s all from now. Until the next time.&#xA;&#xA;Yonle&#xA;January 13th 2026]]&gt;</description>
      <content:encoded><![CDATA[<h2 id="short-journal-january-13th-2026">short journal: January 13th 2026</h2>

<p>It&#39;s January 13th 2026 as of the time i am writing this.</p>

<p>This year, is different. Now I basically live independently from the previous high school years where i was close with my mom, continuing study by going to a rather simple college. I must be honest here, I did not perform really well and ended up repeating what i did during mid and high school: Ignoring assignments, which now i had a bunch of them stacked which makes me never stop thinking about it.</p>

<p>Since i move to a city, I learned lots of things on my own with the help of various technologies that we basically knew, And also listened to some of my friends about what his past life was, and how he&#39;s doing today, and what he learn from what he experienced, etc.</p>

<p>Meanwhile, I still have no job yet. I do plan to make my own little business with the skills that i have, But i really have zero experience on doing business at all. So it&#39;s between wanting to had a job or making a little business by my own will.</p>

<p>I am still financially funded by my Dad. I do plan to be independent... I actually know many ways to earn it but i am the one who refused to do it... Simply said, I am really stubborn. Quietly stubborn. To be honest, I really need to control myself to be not so picky.</p>

<p>Well, I wish i can get myself a little better and achieve what i am trying to accomplish... But for now it seems impossible.</p>

<p>That&#39;s all from now. Until the next time.</p>

<p>Yonle
January 13th 2026</p>
]]></content:encoded>
      <guid>https://pen.waltuh.cyou/yonle/short-journal-january-13th-2026</guid>
      <pubDate>Sat, 04 Apr 2026 21:17:09 +0000</pubDate>
    </item>
    <item>
      <title>sepucuk pendapat pribadi: thinkpad</title>
      <link>https://pen.waltuh.cyou/yonle/sepucuk-pendapat-pribadi-thinkpad</link>
      <description>&lt;![CDATA[laptop lamaku&#xA;smallfoto: laptop lamaku/small&#xA;&#xA;sebelumnya, saat saya sedang mari laptop untuk menggantikan laptop lamaku yang Pentium T4400, gw ketemu juga sama laptop-laptop ThinkPad, terutama di mall-mall di Batam seperti di Nagoya Hill. Setiap ThinkPad yang ada disini berbeda-beda modelnya, namun setelah ku lihat,&#xA;&#xA;sebenarnya tidak ada satupun laptop yang dijual memiliki spek yang kurang nanggung untuk harga yang sama dengan laptop yang aku pakai saat ini.&#xA;&#xA;rata-rata processor yang dipakai di Thinkpad ini berkisaran i3 sampai i5 yang hanya terbatas pada gen dari 6 sampai 10. Itupun dengan RAMnya kadang nanggung juga speknya tak peduli jika ku pakaikan linux ke laptopnya.&#xA;&#xA;pada akhirnya, aku beli MSI Modern 14 C12MO yang memiliki prosesor i3-1215u (alder lake, gen 12), dengan NVME Phison 256 GB &amp; RAM sekitaran 8 GB. Walaupun RAMnya masih nanggung, namun untuk harga dan pilihan yang ada, kira-kira inilah yang cocok untuk kerjaanku yang dimana lagipula, Gw bukan seorang gamer yang sering ngegame berat.&#xA;&#xA;&#34;[brand] punya masalah engsel&#34;&#xA;&#xA;awalnya kenalan kuliahku infokan bahwa laptop MSI condong rentan sama masalah engsel, namun menurutku ini masalah yang sebenarnya biasa di semua laptop jenis engsel verleher 2. Jadi maupun aku beli yang bermerek ASUS vivobook pun, secara durabilitas sama saja.&#xA;&#xA;pemakaian dengan arch linux sudah lebih dari 6 bulan, dan syukurlah masih awet.&#xA;&#xA;kebetulan, ada orang yang beli laptop asus atau thinkpad karena sparepartnya mudah dicari, namun menurutku,&#xA;&#xA;semakin tua umur sebuah laptop, maka semakin langka pula sebuah sparepart untuk bagian-bagian laptopnya. Merek apapun laptop itu, Sparepartnya tetap sulit dijangkau walaupun stoknya banyak.&#xA;&#xA;framework, walau secara desain memang modular, Secara spesifikasi &amp; modal sebenarnya nanggung. Itu pula belum termasuk biaya bea cukai / pajak dll sebagainya yang dikirim antar benua.&#xA;&#xA;jadinya, laptop apapun itu, sebaiknya dijaga sebaik mungkin apapun mereknya. walau sparepartnya ada, kadang ngeservisnya yang bakalan ribet atau justru nanggung sampai di titik dimana lebih waras menabung untuk menggantikan laptop dengan laptop baru.&#xA;&#xA;---&#xA;&#xA;pokoknya poinku begini: fokus pragmatis dulu. jangan beli gegara gengsi atau branding atau janji-janji segala macem kalau ujung-ujungnya bakalan sama aja kayak hardware lainnya.&#xA;&#xA;---&#xA;&#xA;sepucuk tips sederhana.&#xA;&#xA;jika ada sebuah model sebelahan yang memiliki spek yang 2x lipat lebih besar dengan harga yang 10% lebih mahal daripada opsi yang kamu kejar, lain kali tabunglah untuk mesin itu.&#xA;&#xA;kadang ada kalanya kamu mungkin awalnya agak terganggu sama dompet yang kering, tapi lama kelamaan hasilnya tidak akan mengecewakan. karena sebenarnya, kadang beli yang kecil lebih mengecewakan dan kandang malah merugikan.]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://media.fedinet.waltuh.cyou/media/752330e7eb5bb92e75c328df916ae6c0d9e5f017da499d6d5d620a2136b59009.jpg" alt="laptop lamaku">
<small>foto: laptop lamaku</small></p>

<p>sebelumnya, saat saya sedang mari laptop untuk menggantikan laptop lamaku yang Pentium T4400, gw ketemu juga sama laptop-laptop ThinkPad, terutama di mall-mall di Batam seperti di Nagoya Hill. Setiap ThinkPad yang ada disini berbeda-beda modelnya, namun setelah ku lihat,</p>

<p>sebenarnya tidak ada satupun laptop yang dijual memiliki spek yang kurang nanggung untuk harga yang sama dengan laptop yang aku pakai saat ini.</p>

<p>rata-rata processor yang dipakai di Thinkpad ini berkisaran i3 sampai i5 yang hanya terbatas pada gen dari 6 sampai 10. Itupun dengan RAMnya kadang nanggung juga speknya tak peduli jika ku pakaikan linux ke laptopnya.</p>

<p>pada akhirnya, aku beli MSI Modern 14 C12MO yang memiliki prosesor i3-1215u (alder lake, gen 12), dengan NVME Phison 256 GB &amp; RAM sekitaran 8 GB. Walaupun RAMnya masih nanggung, namun untuk harga dan pilihan yang ada, kira-kira inilah yang cocok untuk kerjaanku yang dimana lagipula, Gw bukan seorang gamer yang sering ngegame berat.</p>

<h2 id="brand-punya-masalah-engsel">“[brand] punya masalah engsel”</h2>

<p>awalnya kenalan kuliahku infokan bahwa laptop MSI condong rentan sama masalah engsel, namun menurutku ini masalah yang sebenarnya biasa di semua laptop jenis engsel verleher 2. Jadi maupun aku beli yang bermerek ASUS vivobook pun, secara durabilitas sama saja.</p>

<p>pemakaian dengan arch linux sudah lebih dari 6 bulan, dan syukurlah masih awet.</p>

<p>kebetulan, ada orang yang beli laptop asus atau thinkpad karena sparepartnya mudah dicari, namun menurutku,</p>

<p>semakin tua umur sebuah laptop, maka semakin langka pula sebuah sparepart untuk bagian-bagian laptopnya. Merek apapun laptop itu, Sparepartnya tetap sulit dijangkau walaupun stoknya banyak.</p>

<p>framework, walau secara desain memang modular, Secara spesifikasi &amp; modal sebenarnya nanggung. Itu pula belum termasuk biaya bea cukai / pajak dll sebagainya yang dikirim antar benua.</p>

<p>jadinya, laptop apapun itu, sebaiknya dijaga sebaik mungkin apapun mereknya. walau sparepartnya ada, kadang ngeservisnya yang bakalan ribet atau justru nanggung sampai di titik dimana lebih waras menabung untuk menggantikan laptop dengan laptop baru.</p>

<hr>

<p>pokoknya poinku begini: fokus pragmatis dulu. jangan beli gegara gengsi atau branding atau janji-janji segala macem kalau ujung-ujungnya bakalan sama aja kayak hardware lainnya.</p>

<hr>

<h2 id="sepucuk-tips-sederhana">sepucuk tips sederhana.</h2>

<p>jika ada sebuah model sebelahan yang memiliki spek yang 2x lipat lebih besar dengan harga yang 10% lebih mahal daripada opsi yang kamu kejar, lain kali tabunglah untuk mesin itu.</p>

<p>kadang ada kalanya kamu mungkin awalnya agak terganggu sama dompet yang kering, tapi lama kelamaan hasilnya tidak akan mengecewakan. karena sebenarnya, kadang beli yang kecil lebih mengecewakan dan kandang malah merugikan.</p>
]]></content:encoded>
      <guid>https://pen.waltuh.cyou/yonle/sepucuk-pendapat-pribadi-thinkpad</guid>
      <pubDate>Tue, 31 Mar 2026 15:44:59 +0000</pubDate>
    </item>
    <item>
      <title>the fediverse server software suites that i&#39;ve tried</title>
      <link>https://pen.waltuh.cyou/yonle/the-fediverse-server-software-suites-that-ive-tried</link>
      <description>&lt;![CDATA[when we use something like mastodon, pleroma, akkoma, snac, gotosocial, or misskey, these are actually software suites that&#39;s used for microblogging that then can talk to each other via activitypub protocol. as they can talk to each other regardless the software suites being used, here comes a network for it called &#34;fediverse&#34;.&#xA;&#xA;since i have hosted various fedi server for like 3 years, i think it&#39;s about the time i discuss about the experience when i host it. please note, on this blog, i won&#39;t really tell which one is better and the entire resource usage in a specific number as these number will became irrelevant as the older this blog has become. i will only mention what they can do, and what they can&#39;t do so you can judge it yourself.&#xA;&#xA;os-tan&#xA;&#xA;akkoma&#xA;&#xA;this one, is, obvious already. akkoma is basically a hardfork of pleroma with different mindsets in mind. basically same heart, different director. since it&#39;s pleroma-based, it can handle a lot of users pretty decently light on server without needing a lot of server resources.&#xA;&#xA;this is basically the first fedi software that i use to host my first server, at fedi.lecturify.net. the reason of why i pick this is, for one, MFM and the akkoma-fe.&#xA;&#xA;what it can do:&#xA;react like misskey&#xA;post like misskey with MFM&#xA;MastoAPI&#xA;serve for (lot) of active users in small amount of resources.&#xA;bubble timeline (curated timeline of post coming from several instances that admin picked)&#xA;&#xA;what it can&#39;t do:&#xA;1:1 compatible with the og MFM&#xA;algorithm / trending post timeline&#xA;have avatar decoration like misskey&#xA;&#xA;honk&#xA;&#xA;this is the second software that i try as a test because i&#39;m bored. to begin with, this is a fedi server software written by Ted Unangst, an author of doas and several other OpenBSD components. it focused for small system resource &amp; single user. it can be used for multi users, but it&#39;s mostly suited well for single user as far as i&#39;ve tried.&#xA;&#xA;what it can do:&#xA;post.&#xA;anti distraction.&#xA;sqlite3&#xA;&#xA;what it can&#39;t do:&#xA;MastoAPI&#xA;your posts are not entirely preserved. it&#39;s designed for noisy and limited system resource, remember?&#xA;be sane (you and the people that you follow avatar&#39;s are not their avatars. it&#39;s a hex pixel avatar generated randomly per user)&#xA;react and post like misskey. you can adjust reaction by changing the default so it&#39;s beyond other than [star], but still limited regardless&#xA;no stat report. you don&#39;t know whose following you, whenever your post is liked or reposted, it&#39;s anti mainstream. good for people to avoid distraction.&#xA;you can only upload videos in the form of &#34;memes&#34; where you need to upload the video to the server and put it in memes folder.&#xA;sqlite3&#xA;&#xA;pleroma&#xA;&#xA;again, this is obvious. but anyway, pleroma is a software written by lain, or also known as lambadalambada. it&#39;s initial purpose is basically to replace gnu/social.&#xA;&#xA;anyway, as previously said, it can handle a lot of users pretty decently light on server without needing a lot of server resources.&#xA;&#xA;what it can do:&#xA;react like misskey&#xA;[soon]post like misskey with MFM&#xA;MastoAPI&#xA;serve for (lot) of active users in small amount of resources.&#xA;&#xA;what it can&#39;t do:&#xA;algorithm / trending post timeline&#xA;have avatar decoration like misskey&#xA;have a lightweight web client.&#xA;&#xA;snac2&#xA;&#xA;at the time when i hear this, snac2 is still really new. like really new.&#xA;&#xA;like honk, it&#39;s focused to be as lightweight as possible and focused for small system resource.&#xA;&#xA;what it can do:&#xA;MastoAPI&#xA;react like misskey (new thing. cool)&#xA;run in toaster that&#39;s running netBSD&#xA;run in a hacked 4G alibaba modem dongle running debian&#xA;run in a hacked chinese wireless CCTV&#xA;run in a hacked wii&#xA;run in literally everything that can connect to internet&#xA;run in less than 500 MB of RAM&#xA;&#xA;what it can&#39;t do:&#xA;managing database manually like the most solutions that&#39;s using sql. but it&#39;s pretty solid.&#xA;mfm&#xA;s3&#xA;&#xA;misskey&#xA;&#xA;misskey is basically written by a Japanese high school student back then, named Syuilo. It got several inspiration from various platform like discord.&#xA;&#xA;i won&#39;t really talk about the forks out here since core wise, it&#39;s computational power needed will be pretty much the same (2c vCPU minimal, 4c vCPU recommended).&#xA;&#xA;what it can do:&#xA;mfm&#xA;customize profile&#xA;manage storage limit per user&#xA;bunch of features&#xA;&#xA;what it can&#39;t do:&#xA;run in less than 2 GB of RAM even for just 3 users.&#xA;MastoAPI (forks can do)&#xA;edit (forks can do)&#xA;&#xA;note: rough maintenance (nodejs must be match to the version it require to run, must be glibc system)&#xA;&#xA;gotosocial&#xA;&#xA;basically a &#34;small&#34; and &#34;lightweight&#34; fedi server. i haven&#39;t tried much, but i only tried for brief moment when i test mostr.pub federation with gotosocial&#xA;&#xA;what it can do:&#xA;MastoAPI&#xA;&#xA;what it can&#39;t do:&#xA;algorithm / trending post timeline&#xA;anything misskey related&#xA;have a web client built in.&#xA;have a proper activitypub compatibility (last time it clashed with snac2. turns out one AP object field can be either string or array. but the question is, why this way?)&#xA;&#xA;note: comparably as big as akkoma/pleroma. just go host akkoma/pleroma already tbh. it&#39;s not even as small as snac2 or even honk compared.&#xA;&#xA;---&#xA;&#xA;alright. i think that&#39;s all.]]&gt;</description>
      <content:encoded><![CDATA[<p>when we use something like mastodon, pleroma, akkoma, snac, gotosocial, or misskey, these are actually software suites that&#39;s used for microblogging that then can talk to each other via activitypub protocol. as they can talk to each other regardless the software suites being used, here comes a network for it called “fediverse”.</p>

<p>since i have hosted various fedi server for like 3 years, i think it&#39;s about the time i discuss about the experience when i host it. please note, on this blog, i won&#39;t really tell which one is better and the entire resource usage in a specific number as these number will became irrelevant as the older this blog has become. i will only mention what they can do, and what they can&#39;t do so you can judge it yourself.</p>

<p><img src="https://media.fedinet.waltuh.cyou/media/d83200012353ba52572fe5c1662fe99ff12beaa55e689f530415f606ff87ffc2.jpg" alt="os-tan"></p>

<h2 id="akkoma-https-akkoma-social"><a href="https://akkoma.social" rel="nofollow">akkoma</a></h2>

<p>this one, is, obvious already. akkoma is basically a hardfork of pleroma with different mindsets in mind. basically same heart, different director. since it&#39;s pleroma-based, it can handle a lot of users pretty decently light on server without needing a lot of server resources.</p>

<p>this is basically the first fedi software that i use to host my first server, at fedi.lecturify.net. the reason of why i pick this is, for one, <strong>MFM</strong> and the akkoma-fe.</p>

<p>what it can do:
– react like misskey
– post like misskey with MFM
– MastoAPI
– serve for (lot) of active users in small amount of resources.
– bubble timeline (curated timeline of post coming from several instances that admin picked)</p>

<p>what it can&#39;t do:
– 1:1 compatible with the og MFM
– algorithm / trending post timeline
– have avatar decoration like misskey</p>

<h2 id="honk-https-humungus-tedunangst-com-r-honk"><a href="https://humungus.tedunangst.com/r/honk" rel="nofollow">honk</a></h2>

<p>this is the second software that i try as a test because i&#39;m bored. to begin with, this is a fedi server software written by Ted Unangst, an author of doas and several other OpenBSD components. it focused for small system resource &amp; single user. it can be used for multi users, but it&#39;s mostly suited well for single user as far as i&#39;ve tried.</p>

<p>what it can do:
– post.
– anti distraction.
– sqlite3</p>

<p>what it can&#39;t do:
– MastoAPI
– your posts are not entirely preserved. it&#39;s designed for noisy and limited system resource, remember?
– be sane (you and the people that you follow avatar&#39;s are not their avatars. it&#39;s a hex pixel avatar generated randomly per user)
– react and post like misskey. you can adjust reaction by changing the default so it&#39;s beyond other than [star], but still limited regardless
– no stat report. you don&#39;t know whose following you, whenever your post is liked or reposted, it&#39;s anti mainstream. good for people to avoid distraction.
– you can only upload videos in the form of “memes” where you need to upload the video to the server and put it in <code>memes</code> folder.
– sqlite3</p>

<h2 id="pleroma-https-pleroma-social"><a href="https://pleroma.social" rel="nofollow">pleroma</a></h2>

<p>again, this is obvious. but anyway, pleroma is a software written by <a href="https://lain.com/lain" rel="nofollow">lain</a>, or also known as <a href="https://github.com/lambadalambda" rel="nofollow">lambadalambada</a>. it&#39;s initial purpose is basically to replace gnu/social.</p>

<p>anyway, as previously said, it can handle a lot of users pretty decently light on server without needing a lot of server resources.</p>

<p>what it can do:
– react like misskey
– <strong>[soon]</strong>post like misskey with MFM
– MastoAPI
– serve for (lot) of active users in small amount of resources.</p>

<p>what it can&#39;t do:
– algorithm / trending post timeline
– have avatar decoration like misskey
– have a lightweight web client.</p>

<h2 id="snac2-https-codeberg-org-grunfink-snac2"><a href="https://codeberg.org/grunfink/snac2" rel="nofollow">snac2</a></h2>

<p>at the time when i hear this, snac2 is still really new. like really new.</p>

<p>like honk, it&#39;s focused to be as lightweight as possible and focused for small system resource.</p>

<p>what it can do:
– MastoAPI
– react like misskey (new thing. cool)
– run in toaster that&#39;s running netBSD
– run in a hacked 4G alibaba modem dongle running debian
– run in a hacked chinese wireless CCTV
– run in <a href="https://wii.cafe" rel="nofollow">a hacked wii</a>
– run in literally everything that can connect to internet
– run in less than 500 MB of RAM</p>

<p>what it can&#39;t do:
– managing database manually like the most solutions that&#39;s using sql. but it&#39;s pretty solid.
– mfm
– s3</p>

<h2 id="misskey-https-misskey-hub-net"><a href="https://misskey-hub.net" rel="nofollow">misskey</a></h2>

<p>misskey is basically written by a Japanese high school student back then, named Syuilo. It got several inspiration from various platform like discord.</p>

<p>i won&#39;t really talk about the forks out here since core wise, it&#39;s computational power needed will be pretty much the same (2c vCPU minimal, 4c vCPU recommended).</p>

<p>what it can do:
– mfm
– customize profile
– manage storage limit per user
– bunch of features</p>

<p>what it can&#39;t do:
– run in less than 2 GB of RAM even for just 3 users.
– MastoAPI (forks can do)
– edit (forks can do)</p>

<p>note: rough maintenance (nodejs must be match to the version it require to run, must be glibc system)</p>

<h2 id="gotosocial-https-codeberg-org-superseriousbusiness-gotosocial"><a href="https://codeberg.org/superseriousbusiness/gotosocial" rel="nofollow">gotosocial</a></h2>

<p>basically a “small” and “lightweight” fedi server. i haven&#39;t tried much, but i only tried for brief moment when i test mostr.pub federation with gotosocial</p>

<p>what it can do:
– MastoAPI</p>

<p>what it can&#39;t do:
– algorithm / trending post timeline
– anything misskey related
– have a web client built in.
– have a proper activitypub compatibility (last time it clashed with snac2. turns out one AP object field can be either <code>string</code> or <code>array</code>. but the question is, <em>why this way?</em>)</p>

<p>note: comparably as big as akkoma/pleroma. just go host akkoma/pleroma already tbh. it&#39;s not even as small as snac2 or even honk compared.</p>

<hr>

<p>alright. i think that&#39;s all.</p>
]]></content:encoded>
      <guid>https://pen.waltuh.cyou/yonle/the-fediverse-server-software-suites-that-ive-tried</guid>
      <pubDate>Sat, 28 Mar 2026 11:27:48 +0000</pubDate>
    </item>
    <item>
      <title>our mail server crashes without we knowing it.</title>
      <link>https://pen.waltuh.cyou/yonle/our-mail-server-crashes-without-we-knowing-it</link>
      <description>&lt;![CDATA[recently, my friend tried to register to my akkoma, but he didn&#39;t get any email anyway. Checked on my end via smtpctl show queue, but got no queue.&#xA;&#xA;once i check the log, the mail server crashed because of two thing:&#xA;it can&#39;t connect to our postgresql db as it hasn&#39;t started yet&#xA;it can&#39;t bind to the smtp port&#xA;&#xA;so, then i decided to modify the systemd service unit to make it always restart on every 10 seconds when theres a failure:&#xA;[Unit]&#xA;Description=OpenSMTPD SMTP server&#xA;Documentation=man:smtpd(8)&#xA;After=network.target&#xA;&#xA;[Service]&#xA;Type=forking&#xA;ExecStart=/usr/sbin/smtpd&#xA;&#xA;Restart=always&#xA;RestartSec=10&#xA;&#xA;[Install]&#xA;WantedBy=multi-user.target&#xA;&#xA;hopefully this doesn&#39;t happen again.]]&gt;</description>
      <content:encoded><![CDATA[<p>recently, my friend tried to register to my akkoma, but he didn&#39;t get any email anyway. Checked on my end via <code>smtpctl show queue</code>, but got no queue.</p>

<p>once i check the log, the mail server crashed because of two thing:
– it can&#39;t connect to our postgresql db as it hasn&#39;t started yet
– it can&#39;t bind to the smtp port</p>

<p>so, then i decided to modify the systemd service unit to make it always restart on every 10 seconds when theres a failure:</p>

<pre><code>[Unit]
Description=OpenSMTPD SMTP server
Documentation=man:smtpd(8)
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/smtpd

Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
</code></pre>

<p>hopefully this doesn&#39;t happen again.</p>
]]></content:encoded>
      <guid>https://pen.waltuh.cyou/yonle/our-mail-server-crashes-without-we-knowing-it</guid>
      <pubDate>Fri, 27 Mar 2026 16:51:58 +0000</pubDate>
    </item>
    <item>
      <title>moving object storage to seaweedfs</title>
      <link>https://pen.waltuh.cyou/yonle/moving-object-storage-to-seaweedfs</link>
      <description>&lt;![CDATA[back then, fedinet.waltuh.cyou depends on eu2.contabostorage.com, or the contabo object storage for it&#39;s media uploads. initially we found it to be quite useful, but&#xA;&#xA;the media is gone&#xA;&#xA;the media is gone by itself&#xA;&#xA;several weeks later, it also affected me&#xA;&#xA;i also noticed that it&#39;s not just one of these photos that was actually gone, it&#39;s 4-7 of them. these are only noticeable after i restarted varnish cache (which effectively starting the cache from 0).&#xA;&#xA;recovery is pain in the ass. for public post, they&#39;re easy to recovery by obtaining a copy from remote instance&#39;s CDN cache, but for some non-public post, these are hard to recover than you thought, unless you&#39;re also following them on your alt account.&#xA;&#xA;initially, this problem happens to one of the post from my friend, Irfan, which i apparently noticed that the media that&#39;s on the post became 404.  o thought it was temporary, but then slowly it&#39;s showing by itself that it also affected other users&#xA;&#xA;i contacted the contabo support, but they&#39;re not even aware of it too&#xA;&#xA;    There are no deletion API being triggered via S3 in the backend that i hosted. It was just an upload, and then several hours later, gone by itself.&#xA;    Dear Lee,&#xA;    We would like to clarify that there are no deletion actions being triggered from our side in the backend. &#xA;  What about any lifecycle policy? Didn&#39;t have any that expires object after sometime? &#xA;  Please monitor it from now on and inform us if it occurs again.&#xA;&#xA;let&#39;s check the akkoma source code, on this one: https://akkoma.dev/AkkomaGang/akkoma/src/commit/f3b39e9ea25bda9bb2e7611f6025499a3cc51c1d/lib/pleroma/uploaders/s3.ex#L34-L38&#xA;&#xA;if we check how&#39;s the upload was done:&#xA;ExAws.S3.upload(bucket, s3name, [&#xA;  {:acl, :publicread},&#xA;  {:contenttype, upload.contenttype}&#xA;])&#xA;&#xA;it&#39;s basically just that.&#xA;&#xA;but then, we have attachment cleanup worker, and yet that also doesn&#39;t seems going to break anything. i also checked other code that&#39;s relying on deletefile(), and yet nothing suspicious.&#xA;&#xA;so that leaves me in a dead end.&#xA;&#xA;time to do our own solution, i guess&#xA;&#xA;hi. seaweedfs&#xA;&#xA;seaweedfs logo&#xA;&#xA;to be frank, previous setup on fedi.lecturify.net years ago uses minio for the s3 storage. even after that, there&#39;s still something that bothers me, yet, also don&#39;t like it at the same time.&#xA;&#xA;so i was looking around on object-storage tag on github explore and then stumbled on seaweedfs that promise to have O(1). there&#39;s also rustfs, bht due to time constraints, i decided that it&#39;s not worth compiling it on the server. so i decide to compile seaweedfs instead, which only took 3 mins to finish.&#xA;&#xA;right after i finished compiling it, i install it to /usr/local/bin/, and then made a openrc unit on the container:&#xA;~ # cat /etc/init.d/weed&#xA;!/sbin/openrc-run&#xA;&#xA;name=&#34;seaweedfs&#34;&#xA;description=&#34;SeaweedFS service&#34;&#xA;&#xA;supervisor=&#34;supervise-daemon&#34;&#xA;command=&#34;/usr/local/bin/weed&#34;&#xA;commandbackground=&#34;no&#34;&#xA;commanduser=&#34;weed&#34;&#xA;commandargs=&#34;server -s3.externalUrl=https://objstorage.waltuh.cyou -s3 -dir /home/weed/data -volume.max 12&#34;&#xA;&#xA;nonewprivs=&#34;yes&#34;&#xA;&#xA;pidfile=&#34;/run/${RCSVCNAME}/${RCSVCNAME}.pid&#34;&#xA;&#xA;retry=&#34;SIGTERM/60/SIGKILL/5&#34;&#xA;&#xA;errorlog=&#34;/var/log/${RCSVCNAME}.log&#34;&#xA;outputlog=&#34;/var/log/${RCSVCNAME}.log&#34;&#xA;&#xA;depend() {&#xA;  need net&#xA;}&#xA;&#xA;startpre() {&#xA;  checkpath --directory --owner $commanduser:$commanduser --mode 0755 /run/${RCSVCNAME}&#xA;  checkpath --file --owner $commanduser:$commanduser --mode 0644 $error_log&#xA;}&#xA; &#xA;that&#39;s what i did.&#xA;&#xA;for the bucket and user management (including key), i summon weed admin and then access the admin UI locally via ssh port forwarding. I manage everything here.&#xA;&#xA;as usual, i begin by syncing everything from the contabo storage via aws-cli before finally syncing back to our own bucket that&#39;s now in seaweedfs. things went surprisingly smooth.&#xA;&#xA;except on one particular part&#xA;&#xA;every object was inaccessible to anonymous access by default&#xA;&#xA;to be frank, seaweedfs was a weird one.&#xA;their admin web UI has no bucket specific policy.&#xA;&#xA;even with their policies menu, it seems barely doing anything even after i apply it to the bucket owner. so i delete that.&#xA;&#xA;when checking around, i found out that if you craft this public-policy.json:&#xA;&#xA;{&#xA;  &#34;Version&#34;: &#34;2012-10-17&#34;,&#xA;  &#34;Statement&#34;: [&#xA;    {&#xA;      &#34;Effect&#34;: &#34;Allow&#34;,&#xA;      &#34;Principal&#34;: &#34;&#34;,&#xA;      &#34;Action&#34;: &#34;s3:GetObject&#34;,&#xA;      &#34;Resource&#34;: &#34;arn:aws:s3:::fedi/&#34;&#xA;    }&#xA;  ]&#xA;}&#xA;&#xA;and then apply it via aws cli:&#xA;$ aws s3api put-bucket-policy --bucket fedi --policy file://public-policy.json&#xA;&#xA;then it finally allows public object access.&#xA;strange? i think so.&#xA;&#xA;even after i apply the policy via aws-cli,&#xA;the admin UI barely changed anything.&#xA;no mention about bucket policy.&#xA;&#xA;i guess that&#39;s it that i can tell you&#xA;&#xA;still curious? i will give you the current server mood&#xA;&#xA;+---------------+-------------+-----------+------+&#xA;| INSTANCE NAME | CPU TIME(S) |  MEMORY   | DISK |&#xA;+---------------+-------------+-----------+------+&#xA;| akkoma        | 5013.68     | 395.22MiB |      |&#xA;+---------------+-------------+-----------+------+&#xA;| mariadb       | 27.82       | 138.09MiB |      |&#xA;+---------------+-------------+-----------+------+&#xA;| mediaproxyoma | 409.46      | 86.34MiB  |      |&#xA;+---------------+-------------+-----------+------+&#xA;| pg            | 1945.70     | 193.20MiB |      |&#xA;+---------------+-------------+-----------+------+&#xA;| s3            | 41146.94    | 358.01MiB |      |&#xA;+---------------+-------------+-----------+------+&#xA;| toys          | 3739.83     | 86.48MiB  |      |&#xA;+---------------+-------------+-----------+------+&#xA;| varnish       | 59.29       | 43.76MiB  |      |&#xA;+---------------+-------------+-----------+------+&#xA;| writefreely   | 36.93       | 37.92MiB  |      |&#xA;+---------------+-------------+-----------+------+&#xA;Press &#39;d&#39; + ENTER to change delay&#xA;Press &#39;s&#39; + ENTER to change sorting method&#xA;Press CTRL-C to exit&#xA;&#xA;Delay: 10s&#xA;Sorting Method: Alphabetical&#xA;&#xA;disk:&#xA;yonle@waltuh:~$ df -h&#xA;Filesystem      Size  Used Avail Use% Mounted on&#xA;/dev/sda1       296G   44G  240G  16% /&#xA;&#xA;ram &amp; cpu &amp; load (htop):&#xA;htop of waltuh.cyou&#xA;&#xA;alright. that&#39;s it. bye.]]&gt;</description>
      <content:encoded><![CDATA[<p>back then, fedinet.waltuh.cyou depends on eu2.contabostorage.com, or the contabo object storage for it&#39;s media uploads. initially we found it to be quite useful, but</p>

<p><img src="https://media.fedinet.waltuh.cyou/media/69dbfce89e6bf393d38959f6827da5e0851d7a326b98de0a40957d6456590f6a.png" alt="the media is gone"></p>

<p>the media is gone by itself</p>

<h2 id="several-weeks-later-it-also-affected-me">several weeks later, it also affected me</h2>

<p>i also noticed that it&#39;s not just one of these photos that was actually gone, it&#39;s 4-7 of them. these are only noticeable after i restarted varnish cache (which effectively starting the cache from 0).</p>

<p>recovery is pain in the ass. for public post, they&#39;re easy to recovery by obtaining a copy from remote instance&#39;s CDN cache, but for some non-public post, these are hard to recover than you thought, unless you&#39;re also following them on your alt account.</p>

<p>initially, this problem happens to one of the post from my friend, Irfan, which i apparently noticed that the media that&#39;s on the post became 404.  o thought it was temporary, but then slowly it&#39;s showing by itself that it also affected other users</p>

<h2 id="i-contacted-the-contabo-support-but-they-re-not-even-aware-of-it-too">i contacted the contabo support, but they&#39;re not even aware of it too</h2>

<blockquote><blockquote><p>There are no deletion API being triggered via S3 in the backend that i hosted. It was just an upload, and then several hours later, gone by itself.</p></blockquote>

<p>Dear Lee,</p>

<p>We would like to clarify that there are no deletion actions being triggered from our side in the backend.
What about any lifecycle policy? Didn&#39;t have any that expires object after sometime?
Please monitor it from now on and inform us if it occurs again.</p></blockquote>

<p>let&#39;s check the akkoma source code, on this one: <a href="https://akkoma.dev/AkkomaGang/akkoma/src/commit/f3b39e9ea25bda9bb2e7611f6025499a3cc51c1d/lib/pleroma/uploaders/s3.ex#L34-L38" rel="nofollow">https://akkoma.dev/AkkomaGang/akkoma/src/commit/f3b39e9ea25bda9bb2e7611f6025499a3cc51c1d/lib/pleroma/uploaders/s3.ex#L34-L38</a></p>

<p>if we check how&#39;s the upload was done:</p>

<pre><code class="language-ex">ExAws.S3.upload(bucket, s3_name, [
  {:acl, :public_read},
  {:content_type, upload.content_type}
])
</code></pre>

<p>it&#39;s basically just that.</p>

<p>but then, we have <a href="https://akkoma.dev/AkkomaGang/akkoma/src/commit/f3b39e9ea25bda9bb2e7611f6025499a3cc51c1d/lib/pleroma/workers/attachments_cleanup_worker.ex" rel="nofollow">attachment cleanup worker</a>, and yet that also doesn&#39;t seems going to break anything. i also checked other code that&#39;s relying on <code>delete_file()</code>, and yet nothing suspicious.</p>

<p>so that leaves me in a dead end.</p>

<p>time to do our own solution, i guess</p>

<h2 id="hi-seaweedfs-https-github-com-seaweedfs-seaweedfs">hi. <a href="https://github.com/seaweedfs/seaweedfs" rel="nofollow">seaweedfs</a></h2>

<p><img src="https://raw.githubusercontent.com/seaweedfs/seaweedfs/master/note/seaweedfs.png" alt="seaweedfs logo"></p>

<p>to be frank, previous setup on fedi.lecturify.net years ago uses minio for the s3 storage. even after that, there&#39;s still something that bothers me, yet, also don&#39;t like it at the same time.</p>

<p>so i was looking around on <code>object-storage</code> tag on github explore and then stumbled on seaweedfs that promise to have O(1). there&#39;s also <a href="https://github.com/rustfs/rustfs" rel="nofollow">rustfs</a>, bht due to time constraints, i decided that it&#39;s not worth compiling it on the server. so i decide to compile seaweedfs instead, which only took 3 mins to finish.</p>

<p>right after i finished compiling it, i install it to /usr/local/bin/, and then made a openrc unit on the container:</p>

<pre><code class="language-bash">~ # cat /etc/init.d/weed
#!/sbin/openrc-run

name=&#34;seaweedfs&#34;
description=&#34;SeaweedFS service&#34;

supervisor=&#34;supervise-daemon&#34;
command=&#34;/usr/local/bin/weed&#34;
command_background=&#34;no&#34;
command_user=&#34;weed&#34;
command_args=&#34;server -s3.externalUrl=https://objstorage.waltuh.cyou -s3 -dir /home/weed/data -volume.max 12&#34;

no_new_privs=&#34;yes&#34;

pidfile=&#34;/run/${RC_SVCNAME}/${RC_SVCNAME}.pid&#34;

retry=&#34;SIGTERM/60/SIGKILL/5&#34;

error_log=&#34;/var/log/${RC_SVCNAME}.log&#34;
output_log=&#34;/var/log/${RC_SVCNAME}.log&#34;

depend() {
  need net
}

start_pre() {
  checkpath --directory --owner $command_user:$command_user --mode 0755 /run/${RC_SVCNAME}
  checkpath --file --owner $command_user:$command_user --mode 0644 $error_log
}
</code></pre>

<p>that&#39;s what i did.</p>

<p>for the bucket and user management (including key), i summon <code>weed admin</code> and then access the admin UI locally via ssh port forwarding. I manage everything here.</p>

<p>as usual, i begin by syncing everything from the contabo storage via aws-cli before finally syncing back to our own bucket that&#39;s now in seaweedfs. things went surprisingly smooth.</p>

<p>except on one particular part</p>

<h3 id="every-object-was-inaccessible-to-anonymous-access-by-default">every object was inaccessible to anonymous access by default</h3>

<p>to be frank, seaweedfs was a weird one.
their admin web UI has no bucket specific policy.</p>

<p>even with their policies menu, it seems barely doing anything even after i apply it to the bucket owner. so i delete that.</p>

<p>when checking around, i found out that if you craft this <code>public-policy.json</code>:</p>

<pre><code>{
  &#34;Version&#34;: &#34;2012-10-17&#34;,
  &#34;Statement&#34;: [
    {
      &#34;Effect&#34;: &#34;Allow&#34;,
      &#34;Principal&#34;: &#34;*&#34;,
      &#34;Action&#34;: &#34;s3:GetObject&#34;,
      &#34;Resource&#34;: &#34;arn:aws:s3:::fedi/*&#34;
    }
  ]
}
</code></pre>

<p>and then apply it via aws cli:</p>

<pre><code>$ aws s3api put-bucket-policy --bucket fedi --policy file://public-policy.json
</code></pre>

<p>then it finally allows public object access.
strange? i think so.</p>

<p>even after i apply the policy via aws-cli,
the admin UI barely changed anything.
no mention about bucket policy.</p>

<h2 id="i-guess-that-s-it-that-i-can-tell-you">i guess that&#39;s it that i can tell you</h2>

<p>still curious? i will give you the current server mood</p>

<pre><code>+---------------+-------------+-----------+------+
| INSTANCE NAME | CPU TIME(S) |  MEMORY   | DISK |
+---------------+-------------+-----------+------+
| akkoma        | 5013.68     | 395.22MiB |      |
+---------------+-------------+-----------+------+
| mariadb       | 27.82       | 138.09MiB |      |
+---------------+-------------+-----------+------+
| mediaproxyoma | 409.46      | 86.34MiB  |      |
+---------------+-------------+-----------+------+
| pg            | 1945.70     | 193.20MiB |      |
+---------------+-------------+-----------+------+
| s3            | 41146.94    | 358.01MiB |      |
+---------------+-------------+-----------+------+
| toys          | 3739.83     | 86.48MiB  |      |
+---------------+-------------+-----------+------+
| varnish       | 59.29       | 43.76MiB  |      |
+---------------+-------------+-----------+------+
| writefreely   | 36.93       | 37.92MiB  |      |
+---------------+-------------+-----------+------+
Press &#39;d&#39; + ENTER to change delay
Press &#39;s&#39; + ENTER to change sorting method
Press CTRL-C to exit

Delay: 10s
Sorting Method: Alphabetical
</code></pre>

<p>disk:</p>

<pre><code>yonle@waltuh:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       296G   44G  240G  16% /
</code></pre>

<p>ram &amp; cpu &amp; load (htop):
<img src="https://media.fedinet.waltuh.cyou/media/89046ab5e27b1cc4bae2b57ae7db91ff4bfba40ea04ae3968f32b32118feab41.png" alt="htop of waltuh.cyou"></p>

<p>alright. that&#39;s it. bye.</p>
]]></content:encoded>
      <guid>https://pen.waltuh.cyou/yonle/moving-object-storage-to-seaweedfs</guid>
      <pubDate>Wed, 25 Mar 2026 07:19:25 +0000</pubDate>
    </item>
  </channel>
</rss>