LFS: Final Preparation: Difference between revisions
No edit summary |
No edit summary |
||
| Line 52: | Line 52: | ||
esac | esac | ||
</syntaxhighlight> | </syntaxhighlight> | ||
= Setup Environtmen = | |||
Kita ingin menyiapkan working environment yang bersih dan terkontrol untuk user lfs, agar proses build LFS (Linux From Scratch) nantinya tidak terganggu oleh environment variable atau konfigurasi yang ada di sistem host (OS utama). | |||
<syntaxhighlight lang=bash> | |||
cat > ~/.bash_profile << "EOF" | |||
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash | |||
EOF | |||
</syntaxhighlight> | |||
#<code>cat > ~/.bash_profile << "EOF"</code> | |||
#*Ini artinya kita membuat atau overwrite file <code>~/.bash_profile</code> dengan isi yang diketik sampai ketemu baris EOF | |||
#*File <code>.bash_profile</code> ini akan dijalankan otomatis saat login shell aktif (misalnya saat <code>su - lfs</code>) | |||
#<code>exec env -i ... /bin/bash</code> | |||
#*<code>exec</code>: Mengganti shell yang sedang berjalan dengan perintah baru. Jadi shell awal akan diganti langsung dengan shell yang kita definisikan setelahnya (tidak menumpuk di atas shell lama). | |||
#*<code>env -i</code>: Menjalankan perintah dengan lingkungan kosong (<code>-i</code> = ignore environment). Ini menghapus semua environment variable yang aktif. Tapi kita tambahkan tiga variable penting secara eksplisit: | |||
#**HOME: supaya direktori home user tetap dikenali. | |||
#**TERM: supaya terminal tetap tahu jenisnya (penting buat tampilan dan kemampuan seperti warna, scroll, dll). | |||
#**PS1: prompt shell yang muncul (misalnya lfs:/home/lfs$), biar tetap enak dilihat. | |||
#<code>/bin/bash</code>: shell yang kita jalankan: Bash. | |||
== Hasil Akhir == | |||
Saat user lfs login (atau <code>su - lfs</code>), file <code>.bash_profile</code> akan jalan dan: | |||
*Menghapus seluruh environment dari sistem host. | |||
*Menyiapkan shell Bash baru hanya dengan 3 variabel: <code>HOME</code>, <code>TERM</code>, dan <code>PS1</code>. | |||
*Shell jadi bersih, gak ada variabel aneh-aneh dari OS host. | |||
*Work environment jadi konsisten dan aman, terutama saat kompilasi LFS. | |||
== Why? == | |||
Karena kita sedang membangun sistem Linux dari awal (LFS), kita tidak ingin satupun konfigurasi atau environment dari OS host merusak atau mempengaruhi hasil build kita. Ini seperti memasak di dapur steril — biar hasilnya murni dan bisa diprediksi. | |||
Kalau ada environment dari host yang ikut masuk, bisa saja bikin tools build error, hasil kompilasi aneh, atau bahkan sistem tidak bisa boot nanti. | |||
Revision as of 04:47, 15 April 2025
Membuat Direktori untuk sistem LFS
Pada bagian ini, kita mulai mengisi filesystem LFS (Linux From Scratch) dengan komponen-komponen yang akan membentuk sistem Linux final. Pertama-tama kita akan membuat direktori sehingga program-program yang telah di-compile bisa dipasang dilokasi akhirnya. Tujuan lain adalah agar program-program ini tidak tertima dengan versi finalnya.
Membuat Struktur Direktori
mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin}
mkdir -pv: Perintah ini digunakan untuk membuat direktori, dengan opsi-puntuk membuat direktori beserta subdirektorinya jika belum ada, dan-vuntuk menampilkan pesan yang menunjukkan apa yang sedang dibuat.$LFS/{etc,var}: Membuat direktorietcdanvardi dalam direktori yang ditentukan oleh variabel$LFS$LFS/usr/{bin,lib,sbin}: Membuat direktoribin,lib, dansbindi dalam direktoriusr, di bawah$LFS
Membuat Symlink
for i in bin lib sbin; do
ln -sv usr/$i $LFS/$i
done
for i in bin lib sbin; do ... done: Ini adalah loop for yang akan mengulang perintah untuk masing-masing item (bin,lib,sbin)ln -sv usr/$i $LFS/$i: Untuk setiap direktori (bin,lib,sbin), perintah ini membuat symlink (link simbolik) dari$LFS/usr/$ike$LFS/$i. Ini berarti direktoribin,lib,sbinyang ada di dalam direktori usr akan disimbolkan ke direktori yang lebih umum di$LFS. Tujuannya adalah untuk mempermudah pengelolaan file sistem dan memisahkan direktori berdasarkan fungsi mereka.
Membuat Direktori lib64 untuk Arsitektur x86_64
case $(uname -m) in
x86_64) mkdir -pv $LFS/lib64 ;;
esac
uname -m: Perintah ini digunakan untuk mendapatkan arsitektur mesin saat ini. Jika arsitektur sistem adalah x86_64 (yaitu, 64-bit), maka perintah berikut akan dijalankan.mkdir -pv $LFS/lib64: Jika sistem menggunakan arsitektur x86_64, maka direktorilib64akan dibuat di dalam direktori$LFS. Direktori lib64 digunakan pada sistem 64-bit untuk menyimpan pustaka (library) 64-bit, yang terpisah dari pustaka 32-bit yang disimpan dilib.
Lalu kita akan membuat folder lagi untuk menyimpan program yang dicompile menggunakan cross-compiler
mkdir -pv $LFS/tools
Membuat User LFS
Pada sistem Linux, pengguna dengan hak akses root memiliki kemampuan untuk melakukan hampir semua tindakan, termasuk yang dapat merusak atau menghancurkan sistem jika dilakukan dengan keliru. Oleh karena itu, untuk meningkatkan keamanan dan mencegah potensi kesalahan yang tidak sengaja, paket-paket dalam proses instalasi LFS (Linux From Scratch) dibangun oleh pengguna yang tidak memiliki hak akses root, yaitu pengguna dengan hak akses terbatas.
Untuk mempermudah pengaturan lingkungan kerja yang bersih, pada proses instalasi LFS, dibuat pengguna baru yang tidak memiliki hak akses root, yaitu pengguna lfs. Pengguna lfs ini akan menjadi anggota grup yang juga bernama lfs, dan selama proses instalasi, perintah-perintah akan dijalankan sebagai pengguna ini. Hal ini memastikan bahwa jika terjadi kesalahan, dampaknya hanya terbatas pada lingkungan kerja pengguna tersebut, bukan pada sistem secara keseluruhan.
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
# Jika mau menambahkan password
passwd lfs
# Agar user lfs bisa akses $LFS
chown -v lfs $LFS/{usr{,/*},var,etc,tools}
case $(uname -m) in
x86_64) chown -v lfs $LFS/lib64 ;;
esac
Setup Environtmen
Kita ingin menyiapkan working environment yang bersih dan terkontrol untuk user lfs, agar proses build LFS (Linux From Scratch) nantinya tidak terganggu oleh environment variable atau konfigurasi yang ada di sistem host (OS utama).
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
cat > ~/.bash_profile << "EOF"- Ini artinya kita membuat atau overwrite file
~/.bash_profiledengan isi yang diketik sampai ketemu baris EOF - File
.bash_profileini akan dijalankan otomatis saat login shell aktif (misalnya saatsu - lfs)
- Ini artinya kita membuat atau overwrite file
exec env -i ... /bin/bashexec: Mengganti shell yang sedang berjalan dengan perintah baru. Jadi shell awal akan diganti langsung dengan shell yang kita definisikan setelahnya (tidak menumpuk di atas shell lama).env -i: Menjalankan perintah dengan lingkungan kosong (-i= ignore environment). Ini menghapus semua environment variable yang aktif. Tapi kita tambahkan tiga variable penting secara eksplisit:- HOME: supaya direktori home user tetap dikenali.
- TERM: supaya terminal tetap tahu jenisnya (penting buat tampilan dan kemampuan seperti warna, scroll, dll).
- PS1: prompt shell yang muncul (misalnya lfs:/home/lfs$), biar tetap enak dilihat.
/bin/bash: shell yang kita jalankan: Bash.
Hasil Akhir
Saat user lfs login (atau su - lfs), file .bash_profile akan jalan dan:
- Menghapus seluruh environment dari sistem host.
- Menyiapkan shell Bash baru hanya dengan 3 variabel:
HOME,TERM, danPS1. - Shell jadi bersih, gak ada variabel aneh-aneh dari OS host.
- Work environment jadi konsisten dan aman, terutama saat kompilasi LFS.
Why?
Karena kita sedang membangun sistem Linux dari awal (LFS), kita tidak ingin satupun konfigurasi atau environment dari OS host merusak atau mempengaruhi hasil build kita. Ini seperti memasak di dapur steril — biar hasilnya murni dan bisa diprediksi. Kalau ada environment dari host yang ikut masuk, bisa saja bikin tools build error, hasil kompilasi aneh, atau bahkan sistem tidak bisa boot nanti.