<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tutorial on Ego Irfandi Blog</title>
    <link>https://egoismehh.pages.dev/categories/tutorial/</link>
    <description>Recent content in Tutorial on Ego Irfandi Blog</description>
    <generator>Hugo</generator>
    <language>id-ID</language>
    <lastBuildDate>Sun, 23 Aug 2026 14:30:00 +0700</lastBuildDate>
      <atom:link href="https://egoismehh.pages.dev/categories/tutorial/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Mengenal dan Instalasi BusyBox</title>
      <link>https://egoismehh.pages.dev/blog/instalasi_busybox/</link>
      <pubDate>Sun, 23 Aug 2026 14:30:00 +0700</pubDate>
      <guid>https://egoismehh.pages.dev/blog/instalasi_busybox/</guid>
      <description>&lt;h3 id=&#34;apa-itu-busybox&#34;&gt;Apa itu BusyBox?&lt;/h3&gt;&#xA;&lt;p&gt;BusyBox adalah sebuah binary tunggal yang menggabungkan versi ringkas dari banyak utility Unix umum (seperti &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cp&lt;/code&gt;, &lt;code&gt;mount&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;vi&lt;/code&gt;, dll) menjadi satu executable kecil. BusyBox banyak dipakai di sistem embedded, initramfs, live CD/rescue system, dan container minimal karena ukurannya yang kecil.&lt;/p&gt;&#xA;&lt;h3 id=&#34;cara-kerja&#34;&gt;Cara Kerja&lt;/h3&gt;&#xA;&lt;p&gt;BusyBox menggunakan satu binary yang berperilaku berbeda tergantung nama yang dipanggil (via symlink). Misalnya, symlink bernama &lt;code&gt;ls&lt;/code&gt; yang mengarah ke binary BusyBox akan menjalankan fungsi &lt;code&gt;ls&lt;/code&gt; dari dalam BusyBox itu sendiri, bukan &lt;code&gt;ls&lt;/code&gt; dari coreutils.&lt;/p&gt;&#xA;&lt;h3 id=&#34;instalasi-di-void-linux&#34;&gt;Instalasi di Void Linux&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo xbps-install -S busybox&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;build-dari-source-opsional&#34;&gt;Build dari Source (Opsional)&lt;/h3&gt;&#xA;&lt;p&gt;Untuk kustomisasi applet yang ingin disertakan:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;git clone https://git.busybox.net/busybox&#xA;cd busybox&#xA;make defconfig&#xA;make menuconfig   # pilih applet yang ingin di-include/exclude&#xA;make -j$(nproc)&#xA;sudo make install&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;make menuconfig&lt;/code&gt; berguna jika ingin build BusyBox dengan ukuran seminimal mungkin, hanya menyertakan applet yang benar-benar dibutuhkan.&lt;/p&gt;&#xA;&lt;h3 id=&#34;cek-applet-yang-tersedia&#34;&gt;Cek Applet yang Tersedia&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;busybox --list&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;membuat-symlink-applet&#34;&gt;Membuat Symlink Applet&lt;/h3&gt;&#xA;&lt;p&gt;Setelah BusyBox terinstal, applet-applet di dalamnya belum bisa langsung dipanggil dengan nama aslinya (misal &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cp&lt;/code&gt;) kecuali dibuatkan symlink yang mengarah ke binary BusyBox.&lt;/p&gt;&#xA;&lt;p&gt;Contoh membuat symlink untuk satu applet:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo ln -s /bin/busybox /usr/local/bin/ls&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Perintah di atas membuat symlink bernama &lt;code&gt;ls&lt;/code&gt; yang mengarah ke binary &lt;code&gt;busybox&lt;/code&gt;. Saat &lt;code&gt;ls&lt;/code&gt; dipanggil, BusyBox akan mendeteksi nama yang digunakan untuk memanggilnya (&lt;code&gt;argv[0]&lt;/code&gt;) dan menjalankan fungsi &lt;code&gt;ls&lt;/code&gt; yang sesuai.&lt;/p&gt;&#xA;&lt;p&gt;Membuat symlink untuk beberapa applet sekaligus:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;for applet in ls cp mv cat grep; do&#xA;  sudo ln -s /bin/busybox /usr/local/bin/$applet&#xA;done&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;catatan&#34;&gt;Catatan&lt;/h3&gt;&#xA;&lt;p&gt;Perlu diperhatikan urutan &lt;code&gt;PATH&lt;/code&gt; pada sistem apabila BusyBox applet diinstal berdampingan dengan utility GNU coreutils, karena symlink yang dibuat belakangan (atau direktori yang lebih diprioritaskan dalam &lt;code&gt;PATH&lt;/code&gt;) akan menentukan versi mana yang dipanggil saat command dijalankan.&lt;/p&gt;&#xA;&lt;p&gt;&lt;ws-widget type=&#34;comments&#34; iid=&#34;7914&#34;&gt;&lt;/ws-widget&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Shell Minimalis: dash, mksh, oksh, dll</title>
      <link>https://egoismehh.pages.dev/blog/shell_terbaik/</link>
      <pubDate>Tue, 23 Jun 2026 12:30:00 +0700</pubDate>
      <guid>https://egoismehh.pages.dev/blog/shell_terbaik/</guid>
      <description>&lt;h3 id=&#34;kenapa-bukan-bash&#34;&gt;Kenapa Bukan Bash?&lt;/h3&gt;&#xA;&lt;p&gt;Bash adalah shell paling umum dipakai, tapi ukurannya relatif besar dan memiliki banyak fitur non-POSIX yang menambah kompleksitas.&#xA;Bagi pengguna yang mengutamakan kesederhanaan, kecepatan startup&#xA;(sistem embedded, init script, penggunaan harian minimalis), tersedia beberapa alternatif shell yang lebih ringkas.&lt;/p&gt;&#xA;&lt;h3 id=&#34;dash&#34;&gt;dash&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;Debian Almquist Shell&lt;/strong&gt;  shell POSIX-compliant yang sangat ringan, umum dipakai sebagai &lt;code&gt;/bin/sh&lt;/code&gt; di banyak distro (termasuk Debian dan turunannya) untuk menjalankan script sistem karena kecepatan eksekusinya.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fokus: kepatuhan POSIX, kecepatan&lt;/li&gt;&#xA;&lt;li&gt;Tidak memiliki fitur interaktif seperti history atau tab completion bawaan yang kaya&lt;/li&gt;&#xA;&lt;li&gt;Cocok untuk script, kurang ideal untuk interactive daily driver&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;mksh-mirbsd-korn-shell&#34;&gt;mksh (MirBSD Korn Shell)&lt;/h3&gt;&#xA;&lt;p&gt;Turunan dari Korn Shell (ksh), dikembangkan sebagai bagian dari proyek MirBSD. Menyediakan fitur interaktif yang cukup lengkap (history, line editing, job control) namun tetap ringan dibanding bash.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fokus: keseimbangan antara fitur interaktif dan kesederhanaan&lt;/li&gt;&#xA;&lt;li&gt;Kompatibel dengan sebagian besar syntax ksh&lt;/li&gt;&#xA;&lt;li&gt;Sering dipakai sebagai default shell di Android (melalui toolbox/mksh)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;oksh-openbsd-korn-shell&#34;&gt;oksh (OpenBSD Korn Shell)&lt;/h3&gt;&#xA;&lt;p&gt;Port dari &lt;code&gt;ksh&lt;/code&gt; milik OpenBSD ke sistem lain. Menekankan kesederhanaan kode dan keamanan (mengikuti filosofi OpenBSD), dengan fitur yang lebih minimal dibanding mksh.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fokus: kesederhanaan, auditability kode, keamanan&lt;/li&gt;&#xA;&lt;li&gt;Fitur interaktif lebih terbatas dibanding mksh&lt;/li&gt;&#xA;&lt;li&gt;Pilihan populer di kalangan pengguna yang menyukai filosofi suckless/minimalis&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;rc-plan-9-shell&#34;&gt;rc (Plan 9 Shell)&lt;/h3&gt;&#xA;&lt;p&gt;Shell dari Plan 9 from Bell Labs, tersedia di sistem Unix modern melalui plan9port. Memiliki syntax yang didesain ulang dari nol, lebih konsisten dan minim ambiguitas dibanding shell keluarga Bourne/POSIX.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fokus: konsistensi syntax, menghindari quirk shell tradisional&lt;/li&gt;&#xA;&lt;li&gt;Tidak POSIX-compliant, sehingga script bash/sh tidak bisa langsung dipakai&lt;/li&gt;&#xA;&lt;li&gt;Cocok dieksplorasi bagi yang tertarik filosofi Plan 9&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;perbandingan-singkat&#34;&gt;Perbandingan Singkat&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Shell&lt;/th&gt;&#xA;          &lt;th&gt;Basis&lt;/th&gt;&#xA;          &lt;th&gt;POSIX&lt;/th&gt;&#xA;          &lt;th&gt;Fokus Utama&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;dash&lt;/td&gt;&#xA;          &lt;td&gt;Almquist Shell&lt;/td&gt;&#xA;          &lt;td&gt;Ya&lt;/td&gt;&#xA;          &lt;td&gt;Kecepatan script&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;mksh&lt;/td&gt;&#xA;          &lt;td&gt;Korn Shell (MirBSD)&lt;/td&gt;&#xA;          &lt;td&gt;Sebagian&lt;/td&gt;&#xA;          &lt;td&gt;Interaktif + ringan&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;oksh&lt;/td&gt;&#xA;          &lt;td&gt;Korn Shell (OpenBSD)&lt;/td&gt;&#xA;          &lt;td&gt;Sebagian&lt;/td&gt;&#xA;          &lt;td&gt;Minimalis + keamanan&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;rc&lt;/td&gt;&#xA;          &lt;td&gt;Plan 9&lt;/td&gt;&#xA;          &lt;td&gt;Tidak&lt;/td&gt;&#xA;          &lt;td&gt;Konsistensi syntax&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;memilih-shell-yang-tepat&#34;&gt;Memilih Shell yang Tepat&lt;/h3&gt;&#xA;&lt;p&gt;Pemilihan shell sebaiknya disesuaikan dengan kebutuhan:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Script sistem/init&lt;/strong&gt; -&amp;gt; &lt;code&gt;dash&lt;/code&gt; atau POSIX &lt;code&gt;sh&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Penggunaan interaktif ringan sehari-hari&lt;/strong&gt; -&amp;gt; &lt;code&gt;mksh&lt;/code&gt; atau &lt;code&gt;oksh&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Eksplorasi filosofi alternatif di luar Bourne shell family&lt;/strong&gt; -&amp;gt; &lt;code&gt;rc&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Mengganti default shell dapat dilakukan dengan:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;chsh -s /bin/mksh&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(Gantikan &lt;code&gt;/bin/mksh&lt;/code&gt; dengan path shell pilihan masing-masing.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;ws-widget type=&#34;comments&#34; iid=&#34;7914&#34;&gt;&lt;/ws-widget&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Mengenal Runit dan rc.conf</title>
      <link>https://egoismehh.pages.dev/blog/mengenal_runit/</link>
      <pubDate>Sat, 23 May 2026 16:30:00 +0700</pubDate>
      <guid>https://egoismehh.pages.dev/blog/mengenal_runit/</guid>
      <description>&lt;h3 id=&#34;apa-itu-runit&#34;&gt;Apa itu Runit?&lt;/h3&gt;&#xA;&lt;p&gt;Runit adalah sebuah init system dan service supervisor yang dirancang dengan filosofi kesederhanaan (mengikuti prinsip Unix: &lt;em&gt;do one thing and do it well&lt;/em&gt;). Berbeda dengan systemd yang memiliki banyak komponen dan kompleksitas, runit berfokus hanya pada tiga tugas utama:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Stage 1&lt;/strong&gt;  inisialisasi sistem (setup awal sebelum service berjalan)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Stage 2&lt;/strong&gt;  menjalankan dan mengawasi (&lt;em&gt;supervise&lt;/em&gt;) service&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Stage 3&lt;/strong&gt;  shutdown/reboot&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Void Linux menggunakan runit sebagai init system default, menggantikan systemd yang umum dipakai distro lain.&lt;/p&gt;&#xA;&lt;h3 id=&#34;struktur-direktori-service&#34;&gt;Struktur Direktori Service&lt;/h3&gt;&#xA;&lt;p&gt;Runit mengelola service melalui direktori, bukan file konfigurasi tunggal seperti unit file di systemd.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;/etc/sv/&lt;/code&gt;  berisi definisi service (run script, log, dll)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;/var/service/&lt;/code&gt;  berisi symlink ke service yang &lt;strong&gt;aktif&lt;/strong&gt; (di-supervise oleh runit)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Sebuah service dianggap &amp;ldquo;enabled&amp;rdquo; apabila terdapat symlink dari &lt;code&gt;/etc/sv/nama-service&lt;/code&gt; ke &lt;code&gt;/var/service/&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Contoh mengaktifkan service:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo ln -s /etc/sv/nama-service /var/service/&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Menonaktifkan service** (cukup hapus symlink-nya):&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo rm /var/service/nama-service&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;perintah-dasar-sv&#34;&gt;Perintah Dasar sv&lt;/h3&gt;&#xA;&lt;p&gt;Runit menyediakan command &lt;code&gt;sv&lt;/code&gt; untuk mengontrol service secara langsung.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo sv status nama-service   # cek status&#xA;sudo sv start nama-service    # start service&#xA;sudo sv stop nama-service     # stop service&#xA;sudo sv restart nama-service  # restart service&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;apa-itu-rcconf&#34;&gt;Apa itu rc.conf?&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;rc.conf&lt;/code&gt; adalah file konfigurasi global milik Void Linux (bukan bagian dari runit itu sendiri) yang digunakan untuk mengatur berbagai parameter sistem saat proses boot, seperti hostname, timezone, keymap, dan hardware clock. File ini berlokasi di:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/etc/rc.conf&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Contoh isi rc.conf:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Hostname sistem&#xA;HOSTNAME=&amp;#34;void-machine&amp;#34;&#xA;&#xA;# Timezone&#xA;TIMEZONE=&amp;#34;Asia/Jakarta&amp;#34;&#xA;&#xA;# Keymap konsol&#xA;KEYMAP=&amp;#34;us&amp;#34;&#xA;&#xA;# Font konsol (opsional)&#xA;FONT=&amp;#34;ter-v16n&amp;#34;&#xA;&#xA;# Hardware clock (UTC atau LOCAL)&#xA;HARDWARECLOCK=&amp;#34;UTC&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Setelah melakukan perubahan pada &lt;code&gt;rc.conf&lt;/code&gt;, sebagian pengaturan (seperti hostname atau timezone) akan diterapkan pada boot berikutnya, sementara beberapa lainnya memerlukan restart service terkait atau reboot penuh.&lt;/p&gt;&#xA;&lt;h3 id=&#34;melihat-log-service&#34;&gt;Melihat Log Service&lt;/h3&gt;&#xA;&lt;p&gt;Runit menggunakan &lt;code&gt;runsvdir&lt;/code&gt; beserta &lt;code&gt;svlogd&lt;/code&gt; untuk logging. Log service biasanya tersimpan di:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/var/log/sv/nama-service/current&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Bisa dilihat langsung dengan:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;tail -f /var/log/sv/nama-service/current&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;kenapa-runit&#34;&gt;Kenapa Runit?&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;Kesederhanaanya&lt;/strong&gt;. setiap service diawasi langsung oleh proses supervisor tanpa lapisan abstraksi tambahan, sehingga lebih mudah dipahami, di-debug, dan dikustomisasi dibanding init system yang lebih kompleks(tidak seperti systemd). Hal ini sejalan dengan filosofi minimalis yang dianut Void Linux secara keseluruhan.&lt;/p&gt;&#xA;&lt;p&gt;&lt;ws-widget type=&#34;comments&#34; iid=&#34;7914&#34;&gt;&lt;/ws-widget&gt;&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
