Alpine Linux – Distro Linux dengan Ukuran File yang Kecil
Alpine Linux adalah distribusi Linux dengan ukuran file yang kecil. Hal tersebut dimungkinkan karena Alpine Linux dibangun berbasiskan musl libc dan BusyBox. Container Alpine Linux ukurannya tidak lebih dari 8 MB dan minimal instalasi hanya membutuhkan 130 MB disk space.
Linux Router Project (LRP) distribusi “linux-on-a-floppy”, distro Linux yang muat dalam disket 1,44MB. Distro inilah yang menjadi cikal bakal Alpine Linux, dirancang khusus untuk untuk router, thin server, thin client, perangkat network, dan embedded system. LRP kemudian di-fork menjadi Linux Embedded Appliance Framework (LEAP) Project, lalu LEAP di-fork lagi menjadi Alpine Linux. Hardened kernel telah dipakai secara default sejak Alpine v3.7 yang bertujuan untuk pengamanan dari exploit dan vulnerability.
Image Alpine Linux
Image Alpine Linux tersedia dalam 8 versi yaitu:
- Standard: minimal installation image, membutuhkan jaringan internet.
- Extended: image Standard dengan tambahan beberapa paket.
- Netboot: ditujukan untuk digunakan bersama Preboot eXecution Environment (PXE).
- Raspberry PI: ditujukan untuk Rapsberry PI mulai dari versi 1 sampai 4.
- Generic ARM: menggunakan kernel untuk arsitektur ARM, mendukung armv7 dan aarch64.
- Mini Root Filesystem: minimal root filesystem, ditujuakan untuk container dan minimal chroots.
- Virtual: Standard image, tetapi menggunakan kernel yang berbeda, dioptimalkan untuk virtual machine.
- Xen: ditujukan untuk Xen Hypervisor.
Alpine Linux akan diinstall di atas virtual machine VirtualBox, oleh karena itu image yang digunakan adalah image Virtual x86_64 yang ukuran file image ISO alpine-virt-3.17.0-x86_64.iso hanya 49MB.
Virtual Machine
Virtual machine menggunakan VirtualBox dengan spesifikasi:
- RAM 512MB
- Disk 1GB
- ISO image alpine-virt-3.17.0-x86_64.iso
- Network Adapter 1 NAT
- Network Adapter 2 Host-only
Install Alpine Linux
1. Start virtual machine.
2. Login dengan user root, tanpa password.
3. Jalankan perintah setup-alpine untuk memulai instalasi.
1 | localhost:~# setup-alpine |
4. Available keyboard layouts, tekan ENTER.
1 | Select keyboard layout: [none] ENTER |
5. Masukkan hostname, default localhost, misal alpine.musaamin.web.id.
1 | Enter system hostname (fully qualified form, e.g. 'foo.example.org') [localhost] alpine.musaamin.web.id |
6. Konfigurasi network interfaces, tekan ENTER untuk eth0 dan eth1, keduanya memakai DHCP.
1 2 3 4 5 6 7 8 9 | Available interfaces are: eth0 eth1. Enter '?' for help on bridges, bonding and vlans. Which one do you want to initialize? (or '?' or 'done') [eth0] ENTER Ip address for eth0? (or 'dhcp', 'none', '?') [dhcp] ENTER Available interfaces are: eth1. Enter '?' for help on bridges, bonding and vlans. Which one do you want to initialize? (or '?' or 'done') [eth1] ENTER Ip address for eth1? (or 'dhcp', 'none', '?') [dhcp] ENTER |
7. Jawab n atau tekan ENTER (default n) untuk manual network configuration.
1 | Do you want to do any manual network configuration? (y/n) [n] ENTER |
8. Memberikan password untuk user root.
1 2 3 4 | Changing password for root New password: PASSWORD Retype password: ULANGI_PASSWORD passwd: password for root changed by root |
9. Masukkan Asia/Jakarta untuk timezone, default UTC.
1 | Which timezone are you in? ('?' for list) [UTC] Asia/Jakarta |
10. HTTP/FTP proxy URL, tekan ENTER.
1 | HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none] ENTER |
11. NTP client, tekan ENTER.
1 | Which NTP client to run? ('busybox', 'openntpd', 'chrony' or 'none') [chrony] ENTER |
12. Available mirrors, tekan SPASI sampai tampil pertanyaan. Lalu tekan ENTER untuk memilih nomor 1 (default mirror) sebagai mirror server repository.
1 2 3 4 5 | Available mirrors: 1) dl-cdn.alpinelinux.org 2) uk.alpinelinux.org ... Enter mirror number (1-72) or URL to add (or r/f/e/done) [1] ENTER |
13. Setup a user, tekan ENTER.
1 | Setup a user? (enter a lower-case loginname, or 'no') [no] ENTER |
14. Which ssh server, tekan ENTER.
1 | Which ssh server? ('openssh', 'dropbear' or 'none') [openssh] ENTER |
15. Allow root ssh login, tekan ENTER (default Yes, prohibit-password) jika ingin mengijinkan user root login SSH tapi tidak diperbolehkan login menggunakan password harus menggunakan key.
1 | Allow root ssh login? ('?' for help) [prohibit-password] ENTER |
16. Enter ssh key, tekan ENTER.
1 | Enter ssh key or URL for root (or 'none') [none] ENTER |
17. Available disks, masukkan sda.
1 2 3 | Available disks are: sda (1.1 GB ATA VBOX HARDDISK ) Which disk(s) would you like to use? (or '?' for help or 'none') [none] sda |
18. How would you like to use it?, jawab sys.
1 2 3 | The following disk is selected: sda (1.1 GB ATA VBOX HARDDISK ) How would you like to use it? ('sys', 'data', 'crypt', 'lvm' or '?' for help) [?] sys |
19. Erase the above disks, jawab y.
1 | WARNING: Erase the above disk(s) and continue? (y/n) [n] y |
20. Installation is complete. Please reboot., instalasi selesai, restart dan remove ISO image.
1 | localhost:~# reboot |
21. Login dengan menggunakan user root dan password yang dimasukkan pada saat instalasi.
1 2 3 4 5 | alpine.musaamin.web.id login: root Password: Welcome to Alpine! ... alpine:~# |
Uji Network
Network interfaces yang terdeteksi pada saat instalasi yaitu eth0 (Network Adapter NAT) dan eth1 (Network Adapter Host-Only). eth0 untuk koneksi ke internet sementara eth0 untuk koneksi ke Host-OS untuk kebutuhan SSH remote. Keduanya memakai dynamic IP address. Cek kembali network interface dan IP address dengan menggunakan perintah ifconfig.
1 | ifconfig |
Uji koneksi jaringan ke internet, ping ke google.com.
1 | ping google.com |
Uji koneksi jaringan dari Host-OS ke Alpine.
1 | ping 192.168.56.107 |
SSH Remote
Konfigurasi SSH server (openssh) pada saat instalasi, user root bisa login tapi harus memakai key. Ubah konfigurasi SSH server agar dapat login dengan menggunakan password, karena saat ini belum ada key yang dimasukkan ke user root Alpine.
1 | vi /etc/ssh/sshd_config |
Cari #PasswordAuthentication yes, hapus karakter # untuk mengaktifkan login dengan menggunakan password.
Lalu restart SSH server.
1 | /etc/init.d/sshd restart |
Uji SSH remote ke Alpine.
1 | ssh root@192.168.56.107 |
Alpine Repository
File repository Alpine Linux berada di /etc/apk/repositories.
1 | vi /etc/apk/repositories |
Isi file repositories.
1 2 3 4 5 6 | #/media/cdrom/apks http://dl-cdn.alpinelinux.org/alpine/v3.17/main #http://dl-cdn.alpinelinux.org/alpine/v3.17/community #http://dl-cdn.alpinelinux.org/alpine/edge/main #http://dl-cdn.alpinelinux.org/alpine/edge/community #http://dl-cdn.alpinelinux.org/alpine/edge/testing |
- main: repository utama yang paketnyay didukung langsung oleh tim inti Alpine.
- community: repository yang paketnya berasal dari user komunitas.
- testing: repository yang berisi paket baru, masih dalam tahap pengujian.
- edge: repository yang berisi paket tahap development dan build terbaru.
Aktifkan repository community dengan menghapus tanda #.
1 2 3 4 5 6 | #/media/cdrom/apks http://dl-cdn.alpinelinux.org/alpine/v3.17/main http://dl-cdn.alpinelinux.org/alpine/v3.17/community #http://dl-cdn.alpinelinux.org/alpine/edge/main #http://dl-cdn.alpinelinux.org/alpine/edge/community #http://dl-cdn.alpinelinux.org/alpine/edge/testing |
Package Manager
Alpine Linux memakai package manager sendiri yang diberi nama apk (Alpine Package Keeper).
Update repository dan daftar paket.
1 | apk update |
Hasil perintahnya.
1 2 3 4 5 | fetch http://dl-cdn.alpinelinux.org/alpine/v3.17/main/x86_64/APKINDEX.tar.gz fetch http://dl-cdn.alpinelinux.org/alpine/v3.17/community/x86_64/APKINDEX.tar.gz v3.17.0-15-g7fbad19a1f [http://dl-cdn.alpinelinux.org/alpine/v3.17/main] v3.17.0-14-g5594b6fb00 [http://dl-cdn.alpinelinux.org/alpine/v3.17/community] OK: 17801 distinct packages available |
Upgrade semua paket.
1 | apk upgrade |
Mencari paket.
1 | apk search nama_paket |
Misal mencari nano.
1 | apk search nano |
Menampilkan informasi paket.
1 | apk search -v -d nama_paket |
Misal informasi paket nano.
1 | apk search -v -d nano |
Hasil perintahnya.
1 2 3 4 5 | nano-doc-7.0-r0 - Enhanced clone of the Pico text editor (documentation) nano-syntax-7.0-r0 - Syntax highlighting definitions for nano nano-7.0-r0 - Enhanced clone of the Pico text editor openvdb-nanovdb-10.0.0-r0 - Sparse volume data structure and tools (nanovdb) plasma-nano-5.26.3-r0 - A minimal Plasma shell package intended for embedded devices |
Install paket.
1 | apk add nama_paket |
Misal install nano.
1 | apk add nano |
Menampilkan ukuran file paket yang sudah terinstall.
1 | apk -s info nano |
Hasil perintahnya.
1 2 | nano-7.0-r0 installed size: 312 KiB |
Menampilkan semua paket yang terinstall.
1 | apk info |
Hasil perintahnya.
1 2 3 4 5 6 7 | musl acct alpine-baselayout-data busybox busybox-binsh alpine-baselayout ... |
Menghapus paket.
1 | apk del nama_paket |
Misalnya menghapus nano.
1 | apk del nano |
Menampilkan petunjuk pemakaian apk.
1 | apk --help |
Membuat User
Membuat user baru dengan nama musa.
1 | adduser musa |
Hasil perintahnya.
1 2 3 4 | Changing password for musa New password: Retype password: passwd: password for musa changed by root |
Default shell di Alpine Linux menggunakan ash. Prompt ash tidak menampilkan user yang sedang aktif, hanya menampilkan hostname dan lokasi folder aktif saja. Gunakan command whoami untuk menampilkan user yang sedang digunakan.
1 2 | alpine:~$ whoami musa |
Jika user mau beralih ke root gunakan command su dan masukkan password root.
1 2 3 | alpine:~$ su - Password: alpine:~# |
Pemakaian Disk dan RAM
Menampilkan pemakaian disk yang terpakai setelah instalasi Alpine Linux v3.17 dengan perintah df -h.
Partisi ‘/’ (root) hanya memakai disk space 52.5MB.
1 2 3 4 5 6 7 | Filesystem Size Used Available Use% Mounted on devtmpfs 10.0M 0 10.0M 0% /dev shm 240.4M 0 240.4M 0% /dev/shm /dev/sda3 427.4M 52.5M 347.5M 13% / tmpfs 96.1M 120.0K 96.0M 0% /run /dev/sda1 271.1M 17.9M 234.2M 7% /boot tmpfs 240.4M 0 240.4M 0% /tmp |
Menampilkan pemakaian RAM dengan htop.
RAM yang terpakai hanya 46.9MB.
Selamat mencoba 🙂