OS: Build OpenWRT x86 dari Source: Difference between revisions

From OnnoCenterWiki
Jump to navigationJump to search
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 52: Line 52:
   rsync unzip zlib1g-dev \
   rsync unzip zlib1g-dev \
   file wget
   file wget
Atau
sudo apt install -y \
  libelf-dev \
  libffi-dev \
  liblzma-dev \
  libreadline-dev \
  libsqlite3-dev \
  libxml-parser-perl \
  ocaml-nox \
  ocaml \
  sharutils \
  subversion \
  swig \
  time \
  xsltproc
Versi ringkas yang saya sarankan untuk build OpenWrt:
sudo apt update
sudo apt install -y \
  build-essential clang flex bison gawk \
  gcc-multilib g++-multilib \
  gettext git \
  libncurses-dev libssl-dev libelf-dev \
  python3 python3-dev python3-setuptools python3-venv \
  rsync unzip zlib1g-dev file wget \
  libxml-parser-perl xsltproc swig time \
  subversion


Catatan penting akademik:
Catatan penting akademik:
Line 60: Line 91:
==Mengambil Source Code OpenWRT==
==Mengambil Source Code OpenWRT==
Gunakan repositori resmi OpenWRT.
Gunakan repositori resmi OpenWRT.
Pakai user biasa, bukan root
  cd ~
  cd ~
  git clone https://github.com/openwrt/openwrt.git
  git clone https://github.com/openwrt/openwrt.git
  cd openwrt
  cd openwrt


Pilih branch stabil (contoh rilis 23.05):
Pilih branch stabil (contoh rilis 25.12):
  git checkout openwrt-23.05
  git checkout openwrt-25.12


Verifikasi:
Verifikasi:
Line 118: Line 151:
* tcpdump
* tcpdump
* iperf3
* iperf3
Management:
Management:
* luci (web UI, opsional)
* luci (web UI, opsional)
Routing (untuk bab lanjutan):
Routing (untuk bab lanjutan):
* olsrd
* olsrd
* batman-adv
* batman-adv
Mahasiswa belajar bahwa setiap centang = konsekuensi ukuran & resource.
Mahasiswa belajar bahwa setiap centang = konsekuensi ukuran & resource.


Image Generation
==Image Generation==
Konsep Akademik: Image sebagai Produk Akhir OS
===Konsep Akademik: Image sebagai Produk Akhir OS===
Pada OpenWRT, hasil compile bukan .deb atau .rpm, melainkan:
Pada OpenWRT, hasil compile bukan .deb atau .rpm, melainkan:
*.img.gz
*.img.gz
*.vmdk
*.vmdk
*.ext4
*.ext4
Ini adalah OS image utuh, siap:
Ini adalah OS image utuh, siap:
Di-boot
* Di-boot
Di-flash
* Di-flash
Di-deploy
* Di-deploy
Proses Build Image
 
===Proses Build Image===
Mulai proses compile:
Mulai proses compile:
make -j$(nproc)
make -j$(nproc)
Waktu:
Waktu:
30–90 menit (tergantung CPU & RAM VM)
30–90 menit (tergantung CPU & RAM VM)
Nilai pedagogis penting:
Nilai pedagogis penting:
Mahasiswa melihat toolchain dibangun
* Mahasiswa melihat toolchain dibangun
Kernel dikompilasi
* Kernel dikompilasi
Root filesystem dirakit
* Root filesystem dirakit
Image di generate otomatis
* Image di generate otomatis
Lokasi Hasil Build
 
===Lokasi Hasil Build===
Setelah sukses:
Setelah sukses:
ls bin/targets/x86/64/
ls bin/targets/x86/64/
Contoh output:
Contoh output:
openwrt-23.05-x86-64-generic-ext4-combined.img.gz
openwrt-23.05-x86-64-generic-ext4-combined.img.gz


Menjalankan Image di VirtualBox
===Menjalankan Image di VirtualBox===
Ekstrak image:
Ekstrak image:
gunzip openwrt-23.05-x86-64-generic-ext4-combined.img.gz
gunzip openwrt-23.05-x86-64-generic-ext4-combined.img.gz
Konversi ke VDI:
Konversi ke VDI:
VBoxManage convertfromraw \
VBoxManage convertfromraw \
  openwrt-23.05-x86-64-generic-ext4-combined.img \
  openwrt-23.05-x86-64-generic-ext4-combined.img \
  OpenWRT-custom.vdi \
  OpenWRT-custom.vdi \
  --format VDI
  --format VDI
Gunakan OpenWRT-custom.vdi sebagai disk VM.
Gunakan OpenWRT-custom.vdi sebagai disk VM.
Validasi Sistem
 
===Validasi Sistem===
Login:
Login:
login: root
login: root
Cek sistem:
Cek sistem:
uname -a
uname -a
cat /etc/openwrt_release
cat /etc/openwrt_release
ip addr
ip addr
Mahasiswa kini booting OS hasil rakitan sendiri.
Mahasiswa kini booting OS hasil rakitan sendiri.
Refleksi Akademik (OBE-Centric)
 
==Refleksi Akademik (OBE-Centric)==
Setelah menyelesaikan bab ini, mahasiswa mampu secara nyata:
Setelah menyelesaikan bab ini, mahasiswa mampu secara nyata:
✅ Membangun OS embedded dari source
* ✅ Membangun OS embedded dari source
✅ Memahami hubungan target ↔ kernel ↔ filesystem
* ✅ Memahami hubungan target ↔ kernel ↔ filesystem
✅ Mendesain OS sebelum ia berjalan
* ✅ Mendesain OS sebelum ia berjalan
✅ Membedakan general-purpose OS vs network OS
* ✅ Membedakan general-purpose OS vs network OS
✅ Berpikir sebagai system builder
* ✅ Berpikir sebagai system builder
Challenge Mandiri (Fun & Menantang)
 
Tambahkan tcpdump, rebuild image, uji sniffing
==Challenge Mandiri (Fun & Menantang)==
Bandingkan image dengan & tanpa luci
* Tambahkan tcpdump, rebuild image, uji sniffing
Aktifkan olsrd, siapkan untuk bab mesh network
* Bandingkan image dengan & tanpa luci
Ukur ukuran image sebelum & sesudah optimasi
* Aktifkan olsrd, siapkan untuk bab mesh network
* Ukur ukuran image sebelum & sesudah optimasi


Penutup
==Penutup==
Jika mahasiswa berhasil menyelesaikan bab ini, maka satu hal jelas:
Jika mahasiswa berhasil menyelesaikan bab ini, maka satu hal jelas:
Ia tidak lagi “memakai OpenWRT”.
* Ia tidak lagi “memakai OpenWRT”.
Ia adalah orang yang membuat OpenWRT.
* Ia adalah orang yang membuat OpenWRT.
Bab berikutnya akan membawa OS hasil rakitan ini ke dunia nyata jaringan:
Bab berikutnya akan membawa OS hasil rakitan ini ke dunia nyata jaringan:
routing, firewall, dan mesh network.
* routing, firewall, dan mesh network.


==Pranala Menarik==
==Pranala Menarik==


* [[Sistem operasi]]
* [[Sistem operasi]]

Latest revision as of 10:49, 27 April 2026

Bab ini merupakan titik kulminasi dari perjalanan mahasiswa sebagai Embedded & Network OS Engineer. Jika pada bab sebelumnya mahasiswa menggunakan OpenWRT, maka pada bab ini mahasiswa membangun OpenWRT sendiri dari source code, sehingga benar-benar memahami OpenWRT sebagai produk rekayasa sistem operasi, bukan firmware misterius.

Secara pedagogis, bab ini mengintegrasikan konsep:

  • Kernel & user space
  • Cross-compile & build system
  • Filesystem embedded
  • Modular OS design
  • Reproducible system engineering

Dengan menyelesaikan bab ini, mahasiswa tidak lagi hanya mengkonfigurasi router, tetapi mampu merakit sistem operasi jaringan dari nol.

Build System OpenWRT

Konsep Akademik: OpenWRT sebagai Build-Oriented OS

Berbeda dengan distribusi Linux general-purpose seperti Ubuntu atau Fedora yang berfokus pada binary package management, OpenWRT dirancang sebagai source-based embedded OS. Artinya:

  • Sistem dibangun dari source
  • Konfigurasi dilakukan sebelum compile
  • Output akhir adalah image OS siap boot
  • Seluruh sistem bersifat deterministik & reproducible

Pendekatan ini sangat relevan dengan dunia:

  • Embedded system
  • Network appliance
  • Edge computing
  • Custom hardware

Inti filosofi OpenWRT:

“You don’t install packages on the device. You design the OS before it exists.”

Struktur Build System OpenWRT

Build system OpenWRT terdiri dari beberapa komponen utama:

  • Toolchain → compiler, linker, libc (dibangun otomatis)
  • Kernel Linux → disesuaikan target
  • Base system → init, shell, networking core
  • Package feed → aplikasi tambahan
  • Image builder → menghasilkan firmware akhir

Semua dikendalikan oleh GNU Make + Kconfig-style menuconfig, mirip dengan proses compile kernel Linux yang telah dipelajari mahasiswa sebelumnya.

Persiapan Lingkungan Build (Ubuntu 24.04)

Gunakan Ubuntu Server 24.04 sebagai build host agar konsisten dengan bab-bab sebelumnya.

Instal dependensi wajib

sudo apt update
sudo apt install -y \
  build-essential \
  clang \
  flex bison \
  gawk \
  gcc-multilib g++-multilib \
  gettext \
  git \
  libncurses-dev \
  libssl-dev \
  python3 python3-distutils \
  rsync unzip zlib1g-dev \
  file wget

Atau

sudo apt install -y \
  libelf-dev \
  libffi-dev \
  liblzma-dev \
  libreadline-dev \
  libsqlite3-dev \
  libxml-parser-perl \
  ocaml-nox \
  ocaml \
  sharutils \
  subversion \
  swig \
  time \
  xsltproc

Versi ringkas yang saya sarankan untuk build OpenWrt:

sudo apt update
sudo apt install -y \
  build-essential clang flex bison gawk \
  gcc-multilib g++-multilib \
  gettext git \
  libncurses-dev libssl-dev libelf-dev \
  python3 python3-dev python3-setuptools python3-venv \
  rsync unzip zlib1g-dev file wget \
  libxml-parser-perl xsltproc swig time \
  subversion


Catatan penting akademik:

  • Tidak ada proprietary compiler
  • Toolchain akan dibangun otomatis oleh OpenWRT
  • Lingkungan ini reproducible di semua VM mahasiswa

Mengambil Source Code OpenWRT

Gunakan repositori resmi OpenWRT. Pakai user biasa, bukan root

cd ~
git clone https://github.com/openwrt/openwrt.git
cd openwrt

Pilih branch stabil (contoh rilis 25.12):

git checkout openwrt-25.12

Verifikasi:

git branch

Update & Install Feed Package

Feed adalah koleksi paket modular OpenWRT.

./scripts/feeds update -a
./scripts/feeds install -a

Ini setara dengan:

apt update
apt install

Namun terjadi sebelum OS dibangun, bukan setelah OS berjalan.

Package Selection

Konsep Akademik: OS Modular & Minimalism

OpenWRT mengajarkan prinsip OS minimal:

  • Hanya komponen yang benar-benar dibutuhkan
  • Tidak ada bloat
  • Resource-aware (RAM & storage kecil)

Inilah perbedaan fundamental dengan Linux desktop.

Jalankan:

make menuconfig

Mahasiswa akan melihat antarmuka konfigurasi berbasis ncurses.

Target Selection (x86)

Pilih:

Target System  ---> x86
Subtarget      ---> x86_64
Target Profile ---> Generic

Makna akademik:

  • OpenWRT tidak “satu OS untuk semua”
  • Target menentukan kernel config, driver, dan filesystem

Pemilihan Kernel & Base System

Disarankan default kernel untuk pembelajaran awal.

Aktifkan komponen dasar:

  • BusyBox
  • procd
  • netifd
  • firewall4 (nftables)

Ini adalah core networking OS.

Pemilihan Package Penting (Contoh Realistis)

Contoh paket edukatif & praktis:

Networking:

  • ip-full
  • tcpdump
  • iperf3

Management:

  • luci (web UI, opsional)

Routing (untuk bab lanjutan):

  • olsrd
  • batman-adv

Mahasiswa belajar bahwa setiap centang = konsekuensi ukuran & resource.

Image Generation

Konsep Akademik: Image sebagai Produk Akhir OS

Pada OpenWRT, hasil compile bukan .deb atau .rpm, melainkan:

*.img.gz
*.vmdk
*.ext4

Ini adalah OS image utuh, siap:

  • Di-boot
  • Di-flash
  • Di-deploy

Proses Build Image

Mulai proses compile:

make -j$(nproc)

Waktu:

30–90 menit (tergantung CPU & RAM VM)

Nilai pedagogis penting:

  • Mahasiswa melihat toolchain dibangun
  • Kernel dikompilasi
  • Root filesystem dirakit
  • Image di generate otomatis

Lokasi Hasil Build

Setelah sukses:

ls bin/targets/x86/64/

Contoh output:

openwrt-23.05-x86-64-generic-ext4-combined.img.gz

Menjalankan Image di VirtualBox

Ekstrak image:

gunzip openwrt-23.05-x86-64-generic-ext4-combined.img.gz

Konversi ke VDI:

VBoxManage convertfromraw \
  openwrt-23.05-x86-64-generic-ext4-combined.img \
  OpenWRT-custom.vdi \
  --format VDI

Gunakan OpenWRT-custom.vdi sebagai disk VM.

Validasi Sistem

Login:

login: root

Cek sistem:

uname -a
cat /etc/openwrt_release
ip addr

Mahasiswa kini booting OS hasil rakitan sendiri.

Refleksi Akademik (OBE-Centric)

Setelah menyelesaikan bab ini, mahasiswa mampu secara nyata:

  • ✅ Membangun OS embedded dari source
  • ✅ Memahami hubungan target ↔ kernel ↔ filesystem
  • ✅ Mendesain OS sebelum ia berjalan
  • ✅ Membedakan general-purpose OS vs network OS
  • ✅ Berpikir sebagai system builder

Challenge Mandiri (Fun & Menantang)

  • Tambahkan tcpdump, rebuild image, uji sniffing
  • Bandingkan image dengan & tanpa luci
  • Aktifkan olsrd, siapkan untuk bab mesh network
  • Ukur ukuran image sebelum & sesudah optimasi

Penutup

Jika mahasiswa berhasil menyelesaikan bab ini, maka satu hal jelas:

  • Ia tidak lagi “memakai OpenWRT”.
  • Ia adalah orang yang membuat OpenWRT.

Bab berikutnya akan membawa OS hasil rakitan ini ke dunia nyata jaringan:

  • routing, firewall, dan mesh network.

Pranala Menarik