Red Hat System Administration II 10.0
Daftar isi
- Pemrograman Shell dan Baris Perintah
- Menggunakan Regular Expressions untuk Aplikasi Praktis
- Menjadwalkan Tugas Pengguna
- Menjadwalkan Tugas Sistem
- Menganalisis dan Menyimpan Log
- Mengelola Keamanan dengan SELinux
- Mengarsipkan File
- Memindahkan File
- Tuning Performa Sistem
- Mengatur Penyimpanan Dasar
- Mengelola Penyimpanan dengan Logical Volume Manager
- Mengontrol dan Memperbaiki Masalah Proses Boot
- Mengembalikan Akses Superuser
- Mengelola Keamanan Jaringan
- Mengakses Penyimpanan yang Terhubung ke Jaringan
- Menginstal Red Hat Enterprise Linux
- Mengelola Container dengan Podman
- Bekerja dengan Red Hat Enterprise Linux berbasis Image
Pemrograman Shell dan Baris Perintah
Variabel Shell
Penugasan Variabel
# nama variabel bisa berisi huruf besar, kecil, digit, underscore. tidak boleh ada spasi:
user@host:~$ VARIABLE_NAME=value
# contoh:
user@host:~$ COUNT=40
user@host:~$ first_name=John
user@host:~$ full_name='John Smith'
user@host:~$ file1=/tmp/abc
user@host:~$ _ID=Training
Tipe Data Variabel
# string
user@host:~$ bare=This\ string\ escapes\ all\ spaces.
user@host:~$ double_quote="This is an expandable string where the ${variable} variable would be replaced."
user@host:~$ single_quote='This is a literal string with special characters like the $ character.'
# number
user@host:~$ five=5
user@host:~$ ten=10
user@host:~$ fifteen=$((five + ten))
# array
user@host:~$ colors=('red' 'green' 'blue')
Mengambil Nilai dengan ekspansi Variabel
user@host:~$ COUNT=40
user@host:~$ echo COUNT
COUNT
user@host:~$ echo $COUNT
40
user@host:~$ echo "The count is: $COUNT"
The count is: 40
# ekspansi variabel di string dengan petik tunggal diabaikan
user@host:~$ echo 'The count is: $COUNT'
The count is: $COUNT
user@host:~$ echo "Repeat $COUNTx"
Repeat
user@host:~$ echo "Repeat ${COUNT}x"
Repeat 40x
# contoh array
user@host:~$ colors=("red" "green" "blue")
user@host:~$ echo "The sky is ${colors[2]}"
The sky is blue
# akses semua elemen di array dengan karakter @ atau *
user@host:~$ echo "The human eye can see the following colors: ${colors[@]}"
The human eye can see the following colors: red green blue
Konfigurasikan Bash dengan Variabel Shell
Variabel
HISTFILEmenentukan file mana yang akan digunakan untuk menyimpan riwayat shell, dan secara default adalah file~/.bash_history.Variabel
HISTFILESIZEmenentukan berapa banyak perintah yang akan disimpan dalam file tersebut dari riwayat.Variabel
HISTTIMEFORMATmendefinisikan format stempel waktu untuk setiap perintah dalam riwayat. Variabel ini tidak ada secara default.
# menampilkan histori kapanpun
user@host:~$ history
...output omitted...
6 ls /etc
7 uptime
# atur timestamp
user@host:~$ HISTTIMEFORMAT="%F %T "
# verifikasi
user@host:~$ history
...output omitted...
6 2022-05-03 04:58:11 ls /etc
7 2022-05-03 04:58:13 uptime
Contoh lain adalah variabel PS1, yang mengatur tampilan prompt shell.
# contoh mengubah tampilan bash cmd
user@host:~$ PS1="bash\$ "
bash$
bash$ PS1="[\u@\h \W]\$ "
[user@host ~]$
- String perintah
\umenampilkan nama pengguna dari pengguna saat ini. - String perintah
\hmenampilkan nama host hingga karakter titik pertama (.). - String perintah
\Wmenampilkan nama dasar variabel$PWD, dan variabel$HOMEdisingkat dengan tilde (~). - String perintah
\$menampilkan # jika UID efektif adalah 0; jika tidak, string perintah ini menampilkan $.
Mengatur Program dengan Environmen Variabel
# menampilkan semua environmen variabel
user@host:~$ env
...output omitted...
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
HOSTNAME=host.example.com
XDG_SESSION_ID=4
...output omitted...
# contoh mengatur vim sebagai teks editor
user@host:~$ EDITOR=vim
user@host:~$ export EDITOR
# bisa juga langsung
user@host:~$ export EDITOR=vim
# Dalam contoh berikut, periksa bahwa perintah date menggunakan format en_US.UTF-8:
user@host:~$ date
Tue May 27 17:04:37 UTC 2025
user@host:~$ export LANG=fr_FR.UTF-8
user@host:~$ date
mar. 27 mai 2025 17:04:51 UTC
# environmen variabel PATH berisi daftar direktori yang dipisahkan dengan titik dua yang menentukan di mana perintah yang dapat dieksekusi berada:
user@host:~$ echo $PATH
/home/user/.local/bin:/home/user/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
user@host:~$ export PATH=${PATH}:/home/user/sbin
# contoh menambahkan direktori /home/user/sbin ke variabel PATH
user@host:~$ export PATH=${PATH}:/home/user/sbin
Atur Editor Teks Default
user@host:~$ export EDITOR=nano
Mengatur Variabel Secara Otomatis
Misalnya, untuk mengganti editor default saat login lewat SSH, ubah variabel EDITOR di file ~/.bash_profile:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
export EDITOR=nano
Cara terbaik untuk menyesuaikan pengaturan yang mempengaruhi semua akun pengguna adalah dengan membuat file dengan ekstensi .sh berisi perubahan tersebut, dan menambahkan file ini ke direktori /etc/profile.d. Untuk membuat file di direktori /etc/profile.d, masuklah sebagai pengguna root.
Alias Bash
user@host:~$ alias hello='echo "Hello, this is a long string."'
user@host:~$ hello
Hello, this is a long string.
Membatalkan Pengaturan dan Menghapus Ekspor Variabel dan Alias
user@host:~$ echo $file1
/tmp/tmp.z9pXW0HqcC
user@host:~$ unset file1
# unexport
user@host:~$ export -n PS1
# unset alias
user@host:~$ unalias hello
Buat dan Jalankan Skrip Bash Shell
Tentukan Interpreter Perintah
Baris pertama dari sebuah file skrip dimulai dengan notasi #!, yang biasa disebut shebang atau hash-bang, dari nama dua karakter itu, sharp atau hash dan bang.
#!/usr/bin/bash
Jalankan Skrip Bash
Skrip shell harus memiliki izin eksekusi. Gunakan perintah chmod dan chown untuk modifikasi. Jika skrip ada di list env PATH maka bisa langsung dijalankan dengan nama skripnya. Jika tidak jalankan skrip dari direktori saat ini, ./scriptname.
user@host:~$ which hello
~/bin/hello
user@host:~$ echo $PATH
/home/user/.local/bin:/home/user/bin:/sbin:/bin:/usr/sbin:/usr/bin:...
Posisi Parameter
Jika lebih dari 1 digit harus pakai kurung kurawal. Perintah bawaan
setdigunakan untuk menukar nilai parameter posisi 3 dan 4. Perlu dicatat bahwa parameter posisi 5 sampai 10 tidak dirujuk dan akan dihapus sebagai akibatnya.
#!/usr/bin/bash
echo "Parameter 0: $0"
echo "Parameter 1: $1"
echo "Parameter 2: $2"
echo "Parameter 10 (incorrect): $10"
echo "Parameter 10 (correct): ${10}"
set -- "$1" "$2" "$4" "$3"
echo
echo "Parameter 3 (after set): $3"
echo "Parameter 4 (after set): $4"
echo "Parameter 10 (after set): ${10}"
# output
user@host:~$ ./params.sh 1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10th
Parameter 0: ./params.sh
Parameter 1: 1st
Parameter 2: 2nd
Parameter 10 (incorrect): 1st0
Parameter 10 (correct): 10th
Parameter 3 (after set): 4th
Parameter 4 (after set): 3rd
Parameter 10 (after set): 5
Kutip Karakter Khusus
Gunakan karakter backslash (), tanda kutip tunggal (‘’), atau tanda kutip ganda (“”) untuk menghapus (atau menghindari) makna khusus dari karakter-karakter spesial.
Misalnya, untuk menggunakan perintah echo agar menampilkan string literal # bukan komentar, karakter # harus tidak diartikan sebagai komentar.
user@host:~$ echo # not a comment
user@host:~$ echo \# not a comment
# not a comment
user@host:~$ echo # not a comment #
user@host:~$ echo \# not a comment #
# not a comment
user@host:~$ echo \# not a comment \#
# not a comment #
user@host:~$ echo '# not a comment #'
# not a comment #
user@host:~$ var=$(hostname -s); echo $var
host
user@host:~$ echo "***** hostname is ${var} *****"
***** hostname is host *****
user@host:~$ echo "Will variable $var evaluate to $(hostname -s)?"
Will variable host evaluate to host?
user@host:~$ echo "\"Hello, world\""
"Hello, world"
user@host:~$ echo '"Hello, world"'
"Hello, world"
user@host:~$ echo 'Will variable $var evaluate to $(hostname -s)?'
Will variable $var evaluate to $(hostname -s)?
Tampilkan Output dari Script Shell
user@host:~$ cat ~/bin/hello
#!/usr/bin/bash
echo "Hello, world"
# coba jalankan
user@host:~$ hello
Hello, world
# contoh skrip redirect STDERR
user@host:~$ cat ~/bin/hello
#!/usr/bin/bash
echo "Hello, world"
echo "ERROR: Houston, we have a problem." >&2
# coba jalankan
user@host:~$ hello 2> hello.log
Hello, world
user@host:~$ cat hello.log
ERROR: Houston, we have a problem.
Gunakan Loop untuk Mengulang Perintah
Proses Item dari Command Line
# sintax dasar
for VARIABLE in LIST; do
COMMAND VARIABLE
done
# contoh 1
user@host:~$ for HOST in host1 host2 host3; do echo $HOST; done
host1
host2
host3
# contoh 2
user@host:~$ for HOST in host{1,2,3}; do echo $HOST; done
host1
host2
host3
# contoh 3
user@host:~$ for HOST in host{1..3}; do echo $HOST; done
host1
host2
host3
# contoh 4
user@host:~$ for FILE in file{a..c}; do ls $FILE; done
filea
fileb
filec
# Gunakan perulangan for untuk mencetak paket kernel yang terpasang beserta tanggalnya dalam sebuah string:
user@host:~$ for PACKAGE in $(rpm -qa | grep kernel); \
do echo "$PACKAGE was installed on \
$(date -d @$(rpm -q --qf "%{INSTALLTIME}\n" $PACKAGE))"; done
kernel-tools-libs-5.14.0-70.2.1.el9_0.x86_64 was installed on Thu...
kernel-tools-5.14.0-70.2.1.el9_0.x86_64 was installed on Thu Mar...
kernel-core-5.14.0-70.2.1.el9_0.x86_64 was installed on Thu Mar...
kernel-modules-5.14.0-70.2.1.el9_0.x86_64 was installed on Thu...
kernel-5.14.0-70.2.1.el9_0.x86_64 was installed on Thu Mar 24...
# menampilkan bilangan genap
user@host:~$ for EVEN in $(seq 2 2 10); do echo "$EVEN"; done
2
4
6
8
10
Perintah Bersyarat
Kode Keluar Script Bash
Kode keluar adalah nilai dari 0 sampai 255 yang menunjukkan bagaimana sebuah proses selesai. Semua perintah menghasilkan kode keluar setelah selesai.
# Skrip berikut mengembalikan kode keluar 0 saat berhasil dijalankan:
[user@host bin]$ cat hello
#!/usr/bin/bash
echo "Hello, world"
exit 0
# ambil kode keluar dari perintah terakhir dari variabel bawaan $?:
[user@host bin]$ echo $?
0
# Perintah /bin/true selalu mengembalikan kode keluar 0.
[user@host bin]$ /bin/true
[user@host bin]$ echo $?
0
# Perintah /bin/false selalu mengembalikan kode keluar 1.
[user@host bin]$ /bin/false
[user@host bin]$ echo $?
1
Tes untuk Kondisi
Buat pernyataan bersyarat dengan membandingkan nilai menggunakan operator seperti lebih besar dari (
-gt), kurang dari (-lt), sama dengan (-eq), atau tidak sama dengan (-ne). Selain itu juga bisa memeriksa status lain, seperti apakah file biasa (-f) atau direktori (-d) ada, atau apakah pengguna saat ini punya izin baca (-r).
user@host:~$ test 1 -gt 0 ; echo $?
0
user@host:~$ test 0 -gt 1 ; echo $?
1
user@host:~$ [[ 1 -eq 1 ]]; echo $?
0
user@host:~$ [[ 1 -ne 1 ]]; echo $?
1
user@host:~$ [[ 8 -gt 2 ]]; echo $?
0
user@host:~$ [[ 2 -ge 2 ]]; echo $?
0
user@host:~$ [[ 2 -lt 2 ]]; echo $?
1
user@host:~$ [[ abc = abc ]]; echo $?
0
user@host:~$ [[ abc == def ]]; echo $?
1
user@host:~$ [[ abc != def ]]; echo $?
0
# (-z) artinya zero length
user@host:~$ STRING=''; [[ -z "$STRING" ]]; echo $?
0
# (-n) artinya non-zero length
user@host:~$ STRING='abc'; [[ -n "$STRING" ]]; echo $?
0
Perulangan While dan Until
Perulangan while:
# sintax dasar
while <CONDITION>; do
<STATEMENT>
...
<STATEMENT>
done
# contoh penggunaan
user@host:~$ x=1; while [[ $x -le 5 ]]; do
echo "x is $x"
x=$((x + 1))
done; echo "Finished"
x is 1
x is 2
x is 3
x is 4
x is 5
Finished
Perulangan until:
# sintax dasar
until <CONDITION>; do
<STATEMENT>
...
<STATEMENT>
done
# contoh penggunaan
user@host:~$ x=5; until [[ $x -lt 1 ]]; do
echo "x is $x"
x=$((x - 1))
done; echo "Finished"
x is 5
x is 4
x is 3
x is 2
x is 1
Finished
Kondisional if then
# sintax dasar
if <CONDITION>; then
<STATEMENT>
...
<STATEMENT>
fi
# contoh penggunaan
user@host:~$ systemctl is-active psacct > /dev/null 2>&1
user@host:~$ if [[ $? -ne 0 ]]; then sudo systemctl start psacct; fi
Pernyataan else
# sintax dasar
if <CONDITION>; then
<STATEMENT>
...
<STATEMENT>
else
<STATEMENT>
...
<STATEMENT>
fi
# contoh penggunaan
user@host:~$ systemctl is-active psacct > /dev/null 2>&1
user@host:~$ if [[ $? -ne 0 ]]; then
sudo systemctl start psacct
else
sudo systemctl stop psacct
fi
Pernyataan elif
# sintax dasar
if <CONDITION>; then
<STATEMENT>
...
<STATEMENT>
elif <CONDITION>; then
<STATEMENT>
...
<STATEMENT>
else
<STATEMENT>
...
<STATEMENT>
fi
# contoh penggunaan
user@host:~$ systemctl is-active mariadb > /dev/null 2>&1
user@host:~$ MARIADB_ACTIVE=$?
user@host:~$ sudo systemctl is-active postgresql > /dev/null 2>&1
user@host:~$ POSTGRESQL_ACTIVE=$?
user@host:~$ if [[ "$MARIADB_ACTIVE" -eq 0 ]]; then
mysql
elif [[ "$POSTGRESQL_ACTIVE" -eq 0 ]]; then
psql
else
sqlite3
fi
Menggunakan Regular Expressions untuk Aplikasi Praktis
Tulis Regular Expressions
Regular Expressions menyediakan mekanisme pencocokan pola untuk menemukan konten tertentu. Perintah grep, less, dan vim adalah beberapa perintah yang bisa menggunakan Regular Expressions.
Regular Expression Sederhana
# mencari di file berikut untuk semua kemunculan pola "cat":
cat
dog
concatenate
dogma
category
educated
boondoggle
vindication
chilidog
# String "cat" merupakan padanan persis dari karakter "c", diikuti oleh karakter "a" dan "t" tanpa karakter lain di antaranya.
# Pencarian dalam file menggunakan string "cat" sebagai ekspresi reguler menghasilkan kecocokan berikut:
cat
concatenate
category
educated
vindication
Cocokkan Awal dan Akhir Baris
# Untuk mencocokkan hanya di awal baris, gunakan karakter topi (^). Untuk mencocokkan hanya di akhir baris, gunakan tanda dolar ($).
# awal: ^cat
cat
category
# ahir: dog$
dog
chilidog
# awal dan ahir: ^cat$
cat
Regular Expressions Dasar dan Lanjutan
| Salah satu perbedaan antara Regular Expressions dasar dan Regular Expressions yang diperluas terletak pada perilaku karakter khusus | , +, ?, (, ), {, dan }. Dalam sintaks Regular Expressions dasar, karakter-karakter ini memiliki arti khusus hanya jika diawali dengan karakter garis miring terbalik . Dalam sintaks Regular Expressions yang diperluas, kebalikannya: karakter-karakter ini memiliki arti khusus kecuali jika diawali dengan karakter garis miring terbalik. |
Perbedaan kecil lainnya berlaku pada cara penanganan karakter ^, $, dan *.
Penggunaan Wildcard dan Pengganda dalam Regular Expressions
- Karakter titik
.mencocokkan satu karakter apapun. Misalnya:c.t, yang cocok bisa cat, cbt, cct, dll. Contoh kecocokan mungkin termasuk concatenate, vindication, dan c$t. - Kurung siku
[]mencocokkan satu karakter di dalam kurung. Misalnyac[asd]t, yang cocook adalah cat, cst, cdt. - Karakter asterik
*mencocokkan 0 atau lebih karakter apapun. Misalnyac.*t, yang cocok ct, cat, culvert, coat, dll. - Kurung kurawal
{}mencocokkan sesuai jumlah yang didefiniskan didalam kurung kurawal. Misalnyac.{2}t, yang cocok coat, cuut, cart, dll.
| Sintaks Dasar | Sintaks Extended | Deskripsi |
|---|---|---|
. | Tanda titik (.) mencocokkan satu karakter apa pun. | |
? | Item sebelumnya bersifat opsional dan dicocokkan paling banyak satu kali. | |
* | Item sebelumnya dicocokkan nol kali atau lebih. | |
\+ | Item sebelumnya dicocokkan satu kali atau lebih. | |
\{n\} | {n} | Item sebelumnya dicocokkan tepat n kali. |
\{n,\} | {n,} | Item sebelumnya dicocokkan n kali atau lebih. |
\{,m\} | {,m} | Item sebelumnya dicocokkan paling banyak m kali. |
\{n,m\} | {n,m} | Item sebelumnya dicocokkan setidaknya n kali, tetapi tidak lebih dari m kali. |
[:alnum:] | Karakter alfanumerik: [:alpha:] dan [:digit:]; dalam locale ‘C’ dan pengkodean ASCII, ekspresi ini sama dengan [0-9A-Za-z]. | |
[:alpha:] | Karakter alfabet: [:lower:] dan [:upper:]; dalam locale ‘C’ dan pengkodean ASCII, ekspresi ini sama dengan [A-Za-z]. | |
[:blank:] | Karakter kosong: spasi dan tab. | |
[:cntrl:] | Karakter kontrol. Dalam ASCII, karakter ini memiliki kode oktal 000 hingga 037, dan 177 (DEL). | |
[:digit:] | Digit: 0 1 2 3 4 5 6 7 8 9. | |
[:graph:] | Karakter grafis: [:alnum:] dan [:punct:]. | |
[:lower:] | Huruf kecil; dalam locale ‘C’ dan pengkodean ASCII: a b c d e f g h i j k l m n o p q r s t u v w x y z. | |
[:print:] | Karakter yang dapat dicetak: [:alnum:], [:punct:], dan spasi. | |
[:punct:] | Karakter tanda baca; dalam locale ‘C’ dan pengkodean ASCII: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ { | } ~. | |
[:space:] | Karakter spasi; dalam locale ‘C’, meliputi tab, newline, vertical tab, form feed, carriage return, dan spasi. | |
[:upper:] | Huruf besar; dalam locale ‘C’ dan pengkodean ASCII: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z. | |
[:xdigit:] | Digit heksadesimal: 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f. | |
\b | Mencocokkan string kosong di awal atau akhir kata. | |
\B | Mencocokkan string kosong dengan syarat tidak di awal atau akhir kata. | |
\< | Mencocokkan string kosong di awal kata. | |
\> | Mencocokkan string kosong di akhir kata. | |
\w | Mencocokkan konstituen kata. Sinonim untuk [_[:alnum:]]. | |
\W | Mencocokkan non-konstituen kata. Sinonim untuk [^_[:alnum:]]. | |
\s | Mencocokkan spasi putih (white space). Sinonim untuk [[:space:]]. | |
\S | Mencocokkan non-spasi putih. Sinonim untuk [^[:space:]]. |
Mencocokkan Regular Expressions dari Command Line
Isolasi Data dengan Perintah Grep
user@host:~$ grep '^computer' /usr/share/dict/words
computer
computerese
computerise
computerite
computerizable
computerization
computerize
computerized
computerizes
root@host:~# ps aux | grep chrony
chrony 915 0.0 0.0 10140 2516 ? S 20:19 0:00 /usr/sbin/chronyd -F 2
root 2297 0.0 0.0 228220 1936 pts/1 S+ 20:24 0:00 grep --color=auto chrony
Opsi Perintah Grep
| Opsi | Fungsi |
|---|---|
-i | Menggunakan ekspresi reguler yang diberikan dan tidak menerapkan kepekaan huruf besar/kecil (case-insensitive). |
-v | Menampilkan hanya baris yang tidak mengandung kecocokan dengan ekspresi reguler. |
-r | Mencari data yang cocok dengan ekspresi reguler secara rekursif dalam sekelompok file atau direktori. |
-A NUMBER | Menampilkan NUMBER baris setelah kecocokan ekspresi reguler. |
-B NUMBER | Menampilkan NUMBER baris sebelum kecocokan ekspresi reguler. |
-e | Jika beberapa opsi -e digunakan, maka beberapa ekspresi reguler dapat diberikan dan digunakan dengan logika OR. |
-E | Menggunakan sintaks ekspresi reguler extended (diperluas) sebagai pengganti basic saat memproses ekspresi reguler yang diberikan. |
Contoh Perintah Grep
# pencarian case-insensitive
user@host:~$ grep -i serverroot /etc/httpd/conf/httpd.conf
# reverse search
user@host:~$ grep -v -i server /etc/hosts
# menghindari baris komentar (yang diawali dengan # atau ;)
user@host:~$ grep -v '^[#;]' /etc/systemd/system/multi-user.target.wants/rsyslog.service
# pencarian dengan lebih dari satu regex bersamaan
root@host:~# grep -e 'pam_unix' -e 'user root' -e 'Accepted publickey' /var/log/secure | less
Menjadwalkan Tugas Pengguna
Tugas Pengguna Tertunda (deferred)
Misalnya ketika konfigurasi firewall, jadwalkan agar 15 menit lagi kembali ke pengaturan lama. Konfigurasi firewall diubah. Jika berhasil, matikan jadwal reset firewall. Jika konfigurasi gagal akan terkunci dari server sendiri, tapi dalam waktu 15 menit akan kembali seperti semula.
Jadwalkan Tugas Pengguna yang Ditunda
Gunakan perintah at TIMESPEC untuk mulai memasukkan tugas baru yang akan dijadwalkan. Perintah at membaca dari STDIN untuk mendapatkan perintah yang akan dijalankan.
# 5 menit dari sekarang
user@host:~$ at now +5min < myfile
warning: commands will be executed using /bin/sh
job 2 at Wed May 14 20:40:00 2025
# dengan waktu spesifik
user@host:~$ at 21:03 < myfile
warning: commands will be executed using /bin/sh
job 3 at Wed May 14 21:03:00 2025
Berikut beberapa contoh spesifikasi waktu yang bisa dipakai:
now +5minteatime tomorrow (teatime adalah 16:00)noon +4 days5pm august 3 2025
Untuk spesifikasi waktu valid lainnya, lihat dokumen timespec lokal di bagian referensi.
Periksa dan Kelola Tugas Pengguna yang Ditunda
# Untuk melihat sekilas pekerjaan yang menunggu untuk pengguna saat ini, gunakan perintah atq atau at -l.
user@host:~$ atq
28 Mon May 19 05:13:00 2025 a user
29 Tue May 20 16:00:00 2025 h user
30 Wed May 21 12:00:00 2025 a user
# Gunakan perintah at -c NOMORPEKERJAAN untuk memeriksa perintah yang dijalankan ketika daemon atd mengeksekusi sebuah pekerjaan.
28adalah nomor tugas unik.Mon May 16 05:13:00 2022adalah tanggal dan waktu eksekusi untuk tugas terjadwal.amenunjukkan bahwa tugas dijadwalkan dengan antrian default ‘a’.useradalah pemilik dan pengguna untuk tugas tersebut.
Pengguna biasa hanya bisa melihat dan mengatur tugas mereka sendiri. Pengguna root bisa melihat dan mengatur semua tugas untuk semua pengguna.
Hapus Tugas dari Jadwal
Perintah atrm JOBNUMBER menghapus tugas terjadwal. Hapus tugas terjadwal ketika tidak lagi membutuhkannya, misalnya ketika konfigurasi firewall jarak jauh berhasil dan tidak perlu meresetnya.
Jadwalkan Tugas Pengguna Berulang (recurring)
Gunakan perintah crontab untuk mengelola tugas terjadwal. Daftar berikut menunjukkan perintah yang dapat digunakan pengguna untuk mengelola tugas:
| Command | Kegunaan |
|---|---|
crontab -l | Menampilkan daftar job (tugas terjadwal) untuk pengguna saat ini. |
crontab -r | Menghapus semua job untuk pengguna saat ini. |
crontab -e | Mengedit job untuk pengguna saat ini (membuka editor default). |
crontab filename | Menghapus semua job, lalu menggantinya dengan job yang dibaca dari file filename. Perintah ini menggunakan input dari stdin jika tidak ada file yang ditentukan. |
Pengguna dengan hak istimewa dapat menggunakan opsi
-upada perintah crontab untuk mengelola tugas bagi pengguna lain.
Format Tugas Pengguna
Kolom-kolom dalam file crontab muncul dalam urutan berikut:
* * * * * perintah
│ │ │ │ │
│ │ │ │ └─── Hari dalam Minggu (0-7, 0=Minggu)
│ │ │ └───── Bulan (1-12)
│ │ └─────── Tanggal (1-31)
│ └───────── Jam (0-23)
└─────────── Menit (0-59)
Perintah akan dieksekusi ketika kolom Tanggal dalam bulan atau Tanggal dalam minggu menggunakan nilai yang sama selain karakter *, artinya perintah akan berjalan jika salah satu kondisi terpenuhi (bukan harus keduanya).. Misalnya, untuk menjalankan perintah pada tanggal 11 setiap bulan, dan setiap hari Jumat pukul 12:15 (format 24 jam), gunakan format pekerjaan berikut:
15 12 11 * Fri command
Contoh Tugas Pengguna Berulang
# Tugas berikut mengeksekusi perintah /usr/local/bin/yearly_backup pada pukul 09:00:00 pada tanggal 3 Februari, setiap tahun.
# Februari direpresentasikan sebagai angka 2 pada contoh, karena merupakan bulan kedua dalam setahun.
0 9 3 2 * /usr/local/bin/yearly_backup
# Tugas berikut mengirimkan email yang berisi kata "Chime" kepada pemilik tugas ini setiap lima menit setelah setiap jam mulai pukul 09:00 hingga 16:59 pada hari Jumat di bulan Juli.
*/5 9-16 * Jul 5 echo "Chime"
# Tugas berikut menjalankan perintah /usr/local/bin/daily_report setiap hari dari Senin hingga Jumat pada pukul dua menit sebelum tengah malam.
58 23 * * 1-5 /usr/local/bin/daily_report
# The following job executes the mutt command to send the Checking in mail message to the developer@example.com recipient every day from Monday to Friday at 09:00.
0 9 * * 1-5 mutt -s "Checking in" developer@example.com % Hi there, just checking in.
Menjadwalkan Tugas Sistem
Timer Systemd
Mulai dari Red Hat Enterprise Linux 10, daemon dan pengelola layanan systemd menggantikan daemon cron tradisional untuk sebagian besar tugas sistem penjadwalan, melalui unit pengatur waktu systemd.
Daftar Unit Timer
root@host:~# systemctl list-units -t timer
UNIT LOAD ACTIVE SUB DESCRIPTION
dnf-makecache.timer loaded active waiting dnf makecache --timer
fstrim.timer loaded active waiting Discard unused ...
fwupd-refresh.timer loaded active waiting Refresh fwupd ...
logrotate.timer loaded active waiting Daily rotation ...
...output omitted...
Daftar File Unit Timer
root@host:~# systemctl list-unit-files -t timer
UNIT FILE STATE PRESET
dnf-makecache.timer enabled enabled
fstrim.timer enabled enabled
fwupd-refresh.timer enabled enabled
insights-client.timer disabled disabled
logrotate.timer enabled enabled
mdadm-last-resort@.timer static -
mdcheck_continue.timer disabled disabled
mdcheck_start.timer disabled disabled
mdmonitor-oneshot.timer disabled disabled
plocate-updatedb.timer enabled enabled
podman-auto-update.timer disabled disabled
raid-check.timer enabled enabled
rhc-canonical-facts.timer disabled disabled
systemd-sysupdate-reboot.timer disabled disabled
systemd-sysupdate.timer disabled disabled
systemd-tmpfiles-clean.timer static -
16 unit files listed.
Memulai dan Menghentikan Unit Timer Systemd
# memulai unit timer
root@host:~# systemctl start logrotate.timer
# menghentikan unit timer
root@host:~# systemctl stop logrotate.timer
Mengaktifkan dan Menonaktifkan Unit Timer Systemd
# mengaktifkan dari mulai boot
root@host:~# systemctl enable logrotate.timer
# mengaktifkan langsung
root@host:~# systemctl enable --now logrotate.timer
# menonaktifkan dari mulai boot
root@host:~# systemctl disable logrotate.timer
# menonaktifkan langsung
root@host:~# systemctl disable --now logrotate.timer
Status Unit Timer
root@host:~# systemctl status logrotate.timer
● logrotate.timer - Daily rotation of log files
Loaded: loaded (/usr/lib/.../logrotate.timer; enabled; preset: enabled)
Active: active (waiting) since Wed 2025-05-28 23:28:22 UTC; 54min ago
Invocation: 3a95de54d4c04c539d43b3808c27e99a
Trigger: Fri 2025-05-30 00:48:43 UTC; 24h left
Triggers: ● logrotate.service
Docs: man:logrotate(8)
man:logrotate.conf(5)
May 28 ... workstation systemd[1]: Started logrotate.timer - Daily ...
Contoh File Konfigurasi Unit Timer
Paket sysstat menyediakan unit timer systemd, yaitu layanan sysstat-collect.timer, untuk mengumpulkan statistik sistem setiap 10 menit.
# contoh isi file /usr/lib/systemd/system/sysstat-collect.timer
...output omitted...
[Unit]
Description=Run system activity accounting tool every 10 minutes
[Timer]
OnCalendar=*:00/10
[Install]
WantedBy=sysstat.service
- Bagian
[Unit]dan[Install]berisi item konfigurasi yang umum untuk semua unit systemd. Opsi khusus timer didefinisikan di bagian[Timer]. - Dalam contoh ini, opsi
OnCalendar=*:00/10menandakan bahwa unit timer ini mengaktifkan unit layanansysstat-collect.serviceyang sesuai setiap 10 menit. - Ketika opsi
OnCalendardiatur ke nilai2025-07-* 12:35,37,39:16,unit pengatur waktu akan mengaktifkan unit layanan yang sesuai pada pukul12:35:16, 12:37:16,dan12:39:16,setiap hari di bulanJuli 2025. - Ketika opsi
OnUnitActiveSecdiatur ke nilai15min, unit pengatur waktu akan memicu unit layanan terkait untuk mulai beroperasi 15 menit setelah terakhir kali unit layanan tersebut diaktifkan.
# setelah mengubah konfigurasi unit timer, lakukan reload
root@host:~# systemctl daemon-reload
# setelah itu aktifkan secara langsung
root@host:~# systemctl enable --now UNITNAME.timer
Jangan memodifikasi file konfigurasi unit apa pun di direktori
/usr/lib/systemd/system. Unitsystemdakan menimpa semua perubahan konfigurasi yang dilakukan di direktori/usr/lib/systemd/system. Untuk memodifikasi konfigurasi unit systemd, salin file konfigurasi unitnya dari direktori/usr/lib/systemd/systemke direktori/etc/systemd/system, lalu modifikasi file yang disalin untuk mencegah pembaruan paket penyedia menimpa perubahan tersebut. Jika terdapat dua file dengan nama yang sama di direktori/usr/lib/systemd/systemdan/etc/systemd/system, maka unit timer systemd akan memparsing file di direktori/etc/systemd/system.
Alat Systemd-tempfiles
Saat sistem booting, salah satu unit layanan systemd pertama yang diluncurkan adalah layanan systemd-tmpfiles-setup. Layanan ini menjalankan perintah systemd-tmpfiles, yang membaca instruksi dari file konfigurasi /usr/lib/tmpfiles.d/*.conf, /run/tmpfiles.d/*.conf, dan /etc/tmpfiles.d/*.conf. File konfigurasi ini mencantumkan file dan direktori yang diperintahkan kepada layanan systemd-tmpfiles-setup untuk dibuat, dihapus, atau diamankan dengan izin.
Bersihkan File Sementara dengan Timer Systemd
# lihat isi file konfigurasi unit systemd-tmpfiles-clean.timer:
user@host:~$ systemctl cat systemd-tmpfiles-clean.timer
# /usr/lib/systemd/system/systemd-tmpfiles-clean.timer
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
...output omitted...
[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
ConditionPathExists=!/etc/initrd-release
[Timer]
OnBootSec=15min ---> unit systemd-tmpfiles-clean.service akan dijalankan 15 menit setelah sistem menyala
OnUnitActiveSec=1d ---> pemicu lebih lanjut untuk unit systemd-tmpfiles-clean.service terjadi 24 jam setelah unit layanan terakhir diaktifkan.
# misalnya OnUnitActiveSec diubah jadi 30min agar tidak terlalu lama, setelah diubah jlakukan reload
root@host:~# systemctl daemon-reload
# lihat status unit timer
root@host:~# systemctl status systemd-tmpfiles-clean.timer
Bersihkan File Sementara Secara Manual
Perintah systemd-tmpfiles --clean memparsing file konfigurasi yang sama seperti perintah systemd-tmpfiles --create; alih-alih membuat file dan direktori, perintah ini menghapus semua file yang tidak diakses, diubah, atau dimodifikasi lebih baru daripada usia maksimum yang ditentukan dalam file konfigurasi.
Sintaksnya terdiri dari kolom-kolom berikut: Tipe, Path, Mode, UID, GID, Umur, dan Argumen. Contoh berikut menghapus konfigurasi di direktori /run/systemd/seats:
d /run/systemd/seats 0755 root root -
- Membuat direktori
/run/systemd/seatsjika belum ada. - Jika direktori sudah ada, tidak melakukan tindakan apa pun.
- Menetapkan pengguna
rootdan gruprootsebagai pemilik. - Menetapkan izin file menjadi 0755 (
rwxr-xr-x). - Tidak menetapkan usia atau argumen tambahan apa pun.
- Layanan
systemd-tmpfilestidak membersihkan direktori ini secara otomatis.
Contoh berikut menghapus file dari direktori /home/student yang tidak diakses, diubah, atau dimodifikasi selama lebih dari satu hari:
D /home/student 0700 student student 1d
- Membuat direktori
/home/studentjika belum ada. - Jika direktori sudah ada, maka menghapus semua isinya.
- Menetapkan pengguna
studentdan grupstudentsebagai pemilik. - Menetapkan izin file menjadi 0700 (
rwx------). - Menetapkan usia menjadi satu hari.
- Tidak menetapkan argumen tambahan apa pun.
- Saat sistem menjalankan perintah
systemd-tmpfiles --clean, semua file yang tidak diakses, ubah, atau modifikasi selama lebih dari satu hari akan dihapus.
Contoh berikut membuat tautan simbolis ke direktori /etc/fstab:
L /run/fstablink - root root - /etc/fstab
- Membuat tautan simbolik
/run/fstablinkyang mengarah ke direktori/etc/fstab. - Menetapkan pengguna
rootdan gruprootsebagai pemilik. - Tidak pernah menghapus baris ini secara otomatis.
- Tidak mengatur izin atau usia.
- Menetapkan argumen ke
/etc/fstabuntuk menunjukkan sumber tautan.
Prioritas File Konfigurasi
File konfigurasi layanan systemd-tmpfiles-clean dapat berada di tiga lokasi:
/etc/tmpfiles.d/*.conf/run/tmpfiles.d/*.conf/usr/lib/tmpfiles.d/*.conf
Jika sebuah file di direktori
/run/tmpfiles.d/memiliki nama file yang sama dengan file di direktori/usr/lib/tmpfiles.d/, maka layanan akan menggunakan file di direktori/run/tmpfiles.d/. Jika sebuah file di direktori/etc/tmpfiles.d/memiliki nama file yang sama dengan file di direktori/run/tmpfiles.d/atau/usr/lib/tmpfiles.d/, maka layanan akan menggunakan file di direktori/etc/tmpfiles.d/.
Menjadwal Tugas Sistem Berkala dengan Cron
File /etc/crontab dan file-file lain di direktori /etc/cron.d menentukan tugas sistem yang berulang. Selalu buat file crontab kustom di direktori /etc/cron.d untuk menjadwalkan pekerjaan sistem yang berulang. Tempatkan file crontab kustom di direktori /etc/cron.d agar pembaruan paket tidak menimpa file /etc/crontab.
Sistem crontab juga termasuk repositori untuk skrip yang dijalankan setiap jam, hari, minggu, atau bulan. Repositori ini ditempatkan di direktori /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, atau /etc/cron.monthly.
File Crontab Sistem Default
Setiap skrip di direktori /etc/cron.hourly adalah pekerjaan yang dijalankan melalui file crontab sistem sekunder /etc/cron.d/0hourly.
Membuat Cron Job Sistem
Untuk menyiapkan tugas cron sistem, tambahkan file crontab di direktori /etc/cron.d.
# contoh file bernama /etc/cron.d/timestamp_example menambahkan file sementara bernama /tmp/timestamp_example.txt dengan output dari perintah date setiap dua menit
# Example timestamp cronjob
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
*/2 * * * * root date >> /tmp/timestamp_example.txt
Jalankan Perintah Berkala dengan Anacron
Perintah anacron menggunakan skrip run-parts untuk menjalankan pekerjaan harian, mingguan, atau bulanan dari file konfigurasi /etc/anacrontab secara berulang. Perintah anacron memastikan bahwa tugas terjadwal selalu berjalan dan tidak terlewatkan secara tidak sengaja karena sistem dimatikan atau dihibernasi.
# File /etc/anacrontab berisi empat kolom per baris, seperti yang ditunjukkan pada contoh berikut:
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
Hubungan Antara Cron dan Anacron
Layanan penjadwal perintah crond.service dan perintah anacron bekerja bersama sebagai berikut:
- direktori
/etc/cron.dmenyertakan file crontab0hourlyyang pada satu menit setelah setiap jam, menjalankan perintahrun-parts /etc/cron.hourlysebagai pengguna root. - direktori
/etc/cron.hourlyberisi skrip shell bernama0anacronyang, pada gilirannya, secara kondisional menjalankan perintah/usr/sbin/anacron -s. - saat dijalankan, perintah
/usr/sbin/anacron -smembaca file konfigurasi/etc/anacrontabdan menjalankan perintahnice run-partspada file/etc/cron.daily,/etc/cron.weekly, dan/etc/cron.monthlypada interval waktu tertentu, termasuk penundaan acak hingga 45 menit.
Menganalisis dan Menyimpan Log
Pencatatan log sistem
RHEL menggunakan standar logging berbasis protokol syslog untuk log sistem. Layanan systemd-journald dan rsyslog menangani pesan syslog di RHEL
Layanan systemd-journald mengumpulkan pesan events dari banyak sumber:
- Kernel sistem
- Keluaran dari tahap awal proses booting
- Output standar dan error standar dari daemon
- Events
syslog
| File Log | Jenis Pesan yang Disimpan |
|---|---|
/var/log/messages | Sebagian besar pesan syslog dicatat di sini. |
/var/log/secure | Pesan tentang peristiwa keamanan dan autentikasi. |
/var/log/maillog | Pesan tentang server email (mail server). |
/var/log/cron | Pesan tentang eksekusi job terjadwal (cron). |
/var/log/boot.log | Pesan konsol tentang startup sistem yang tersembunyi oleh layar startup grafis, serta pesan syslog yang dikirim ke fasilitas local7. |
Catat Events ke Sistem
Setiap pesan log dikategorikan berdasarkan fasilitas (sub-sistem yang menghasilkan pesan) dan prioritas (tingkat keparahan pesan).
Tabel berikut mencantumkan fasilitas syslog standar:
| Kode | Fasilitas | Deskripsi Fasilitas |
|---|---|---|
| 0 | kern | Pesan kernel. |
| 1 | user | Pesan tingkat pengguna. |
| 2 | Pesan sistem email. | |
| 3 | daemon | Pesan daemon sistem. |
| 4 | auth | Pesan autentikasi dan keamanan. |
| 5 | syslog | Pesan internal syslog. |
| 6 | lpr | Pesan printer. |
| 7 | news | Pesan berita jaringan (network news). |
| 8 | uucp | Pesan protokol UUCP. |
| 9 | cron | Pesan daemon penjadwalan (cron). |
| 10 | authpriv | Pesan otorisasi non-sistem. |
| 11 | ftp | Pesan protokol FTP. |
| 16-23 | local0 - local7 | Pesan lokal khusus (custom local messages). |
Tabel berikut mencantumkan prioritas syslog standar dari yang tertinggi ke yang terendah:
| Kode | Prioritas | Deskripsi Prioritas |
|---|---|---|
| 0 | emerg | Sistem tidak dapat digunakan (unusable). |
| 1 | alert | Tindakan harus segera diambil. |
| 2 | crit | Kondisi kritis (critical condition). |
| 3 | err | Kondisi kesalahan non-kritis (noncritical error). |
| 4 | warning | Kondisi peringatan (warning condition). |
| 5 | notice | Kejadian normal tetapi signifikan. |
| 6 | info | Kejadian informasional. |
| 7 | debug | Pesan tingkat debugging. |
Layanan rsyslog
Layanan rsyslog menjalankan logging syslog. Layanan rsyslog menggunakan fasilitas dan prioritas pesan log untuk menentukan cara menanganinya. Aturan menentukan fasilitas dan prioritas di file /etc/rsyslog.conf dan di file manapun dalam direktori /etc/rsyslog.d yang berakhiran .conf.
# Aturan berikut di file /etc/rsyslog.conf menyimpan pesan yang dikirim ke fasilitas authpriv dengan prioritas apa pun ke file /var/log/secure:
authpriv.* /var/log/secure
# Aturan berikut menyimpan pesan yang dikirim ke fasilitas authpriv dengan prioritas warning, notice, info, atau debug ke file /var/log/secure:
authpriv.warning /var/log/secure
Contoh Aturan Layanan Rsyslog
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
# The none keyword in the priority field indicates that no messages for the indicated facility are stored in the given file, to limit stored messages.
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# The rsyslog.conf file has a setting to print all the syslog messages with the emerg priority to the terminals of all logged-in users.
# Everybody gets emergency messages
*.emerg :omusrmsg:*
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
Rotasi File Log
Perintah logrotate dijalankan oleh unit timer systemd dan memutar file log supaya tidak memakan terlalu banyak ruang di direktori /var/log. Ketika sebuah file log diputar, namanya akan diganti dengan ekstensi yang menunjukkan tanggal rotasinya.
Misalnya, file /var/log/messages akan diganti namanya menjadi /var/log/messages-20250620 saat diputar pada 2025-06-20. Setelah file log sebelumnya diputar, file log baru dibuat dan layanan yang terkait dengan file log tersebut diberitahu.
Menganalisis Entri Log
Contoh berikut menjelaskan susunan pesan log di file log /var/log/secure.
Mar 20 20:11:48 localhost sshd[1433]: Failed password for student from 172.25.0.10 port 59344 ssh2
20 Mar 20:11:48: Cap waktu dari entri loglocalhost: Host yang mengirim pesan logsshd[1433]: Nama program atau proses dan nomor PID yang mengirim pesan logFailed password for: Pesan yang dikirim
Pantau Event Log
Gunakan perintah tail -f /path/to/file untuk memantau event log.
Kirim Pesan Log Secara Manual
Perintah logger mengirim pesan ke layanan rsyslog. Secara default, perintah logger mengirim pesan tipe user dengan prioritas notice (user.notice) kecuali jika ditentukan lain dengan opsi -p. Berguna untuk menguji perubahan pada konfigurasi layanan rsyslog.
Misalnya, pesan log yang cocok dengan filter fasilitas atau prioritas local7.* disimpan di file /var/log/boot.log, berdasarkan aturan yang ditetapkan di file /etc/rsyslog.conf default. Jadi, untuk mengirim pesan ke layanan rsyslog dan mencatat pesan tersebut di file log /var/log/boot.log, jalankan perintah logger berikut:
root@host:~# logger -p local7.notice "Log entry created on host"
Cari Event di Jurnal Sistem
- Untuk mengambil pesan log dari jurnal, gunakan perintah
journalctl. - Untuk membatasi output, gunakan opsi
-n, contoh:journalctl -n 5. - Mirip dengan perintah tail, perintah
journalctl -fmengambil 10 baris terakhir dan menampilkan output log secara berkelanjutan. - Filter output berdasarkan prioritas, gunakan opsi
-p, contoh:journalctl -p err. - Tampilkan unit spesifik systemd dengan opsi
-u, contoh:journalctl -u sshd.service. - Filter event pada waktu spesifik dengan ipso
--sincedan atau--until, contoh:journalctl --since "2025-06-01 20:30" --until "2025-06-04 10:00". - Tentukan semua entri sejak waktu relatif hingga saat ini:
journalctl --since "-1 hour". - Lihat semua kolom untuk setiap catatan jurnal dengan menentukan opsi
verbose:journalctl -o verbose
Daftar berikut menunjukkan beberapa kolom jurnal sistem untuk mencari baris yang relevan dengan proses atau event tertentu:
- _COMM: Nama perintah
- _EXE: Jalur ke file yang dapat dieksekusi untuk proses tersebut
- _PID: PID dari proses tersebut
- _UID: UID pengguna yang menjalankan proses tersebut
- _SYSTEMD_UNIT: Unit systemd yang memulai proses tersebut
Sebagai contoh, perintah journalctl berikut menunjukkan semua entri jurnal terkait dengan layanan sshd.service dengan PID 2188:
root@host:~# journalctl _SYSTEMD_UNIT=sshd.service _PID=2188
Jun 09 12:57:21 workstation (sshd)[2188]: sshd.service: Referenced but...
Jun 09 12:57:21 workstation sshd[2188]: Server listening on 0.0.0.0 port 22.
Jun 09 12:57:21 workstation sshd[2188]: Server listening on :: port 22.
Penyimpanan Jurnal Sistem
Secara default, RHEL menyimpan log jurnal di direktori /run/log/journal dan dibersihkan setelah reboot.
Mengkonfigurasi Jurnal Sistem Permanen
Konfigurasikan layanan systemd-journald sebagai berikut untuk menyimpan jurnal sistem secara permanen setelah reboot:
# buat direktori
root@host:~# mkdir /var/log/journal
# Kosongkan jurnal saat ini ke penyimpanan.
root@host:~# journalctl --flush
# subdirektori di direktori /var/log/journal dg nama karakter hexadesimal yg berisi file dg ekstensi .journal
root@host:~# ls /var/log/journal
4ec03abd2f7b40118b1b357f479b3112
root@host:~# ls /var/log/journal/4ec03abd2f7b40118b1b357f479b3112
system.journal user-1000.journal
Tinjau Entri Jurnal yang Berkaitan dengan Waktu Booting
# ambil entri hanya dari boot pertama
root@host:~# journalctl -b 1
...output omitted...
# ambil entri hanya dari boot kedua (argumen bisa digunakan jika sistem di reboot setidaknya 2x)
root@host:~# journalctl -b 2
...output omitted...
# list event booting sistem yang dikenali oleh perintah journalctl, dengan menggunakan opsi --list-boots.
root@host:~# journalctl --list-boots
-6 27de... Wed 2025-06-04 20:04:32 EDT—Wed 2025-06-04 21:09:36 EDT
-5 6a18... Tue 2025-06-26 08:32:22 EDT—Thu 2025-06-26 16:02:33 EDT
-4 e2d7... Thu 2025-07-04 16:02:46 EDT—Fri 2025-07-04 20:59:29 EDT
-3 45c3... Sat 2025-07-05 11:19:47 EDT—Sat 2025-07-05 11:53:32 EDT
-2 dfae... Sat 2025-07-05 13:11:13 EDT—Sat 2025-07-05 13:27:26 EDT
-1 e754... Sat 2025-07-05 13:58:08 EDT—Sat 2025-07-05 14:10:53 EDT
0 ee2c... Mon 2025-07-07 09:56:45 EDT—Mon 2025-07-07 12:57:21 EDT
# ambil entri hanya dari boot saat ini
root@host:~# journalctl -b
...output omitted...
Rotasi Jurnal Sistem
Jurnal ini memiliki mekanisme rotasi log bawaan yang dipicu setiap bulan. Selain itu, sistem tidak mengizinkan jurnal melebihi 10% dari sistem file tempatnya berada, atau menyisakan kurang dari 15% ruang kosong pada sistem file. Nilai-nilai ini dapat dimodifikasi untuk jurnal runtime dan persistent di file konfigurasi /etc/systemd/journald.conf. Proses systemd-journald mencatat batasan ukuran jurnal saat ini ketika dimulai.
# menampilkan ukuran limit entri jurnal
[user@host ~]$ journalctl | grep -E 'Runtime Journal|System Journal'
Jun 10 22:22:57 localhost systemd-journald[263]: Runtime Journal (/run/log/journal/93c43a50cada46e39819e0da68f790a2) is 4.2M, max 34.1M, 29.8M free.
Jun 10 22:23:01 host systemd-journald[740]: Runtime Journal (/run/log/journal/da54d37671ac4429bcdfacfe7bebb5a1) is 4.2M, max 34.1M, 29.8M free.
Jun 10 22:30:50 host systemd-journald[740]: System Journal (/var/log/journal/da54d37671ac4429bcdfacfe7bebb5a1) is 8M, max 997.3M, 989.3M free.
...output omitted...
Menemukan File Konfigurasi Jurnal
Mulai dari RHEL 10, file /etc/systemd/journald.conf tidak ada saat instalasi. Layanan systemd-journald membaca pengaturan default-nya dari file konfigurasi /usr/lib/systemd/journald.conf.
Untuk mengubah perilaku jurnal, jangan mengedit file konfigurasi /usr/lib/systemd/journald.conf secara langsung. Sebaliknya, salin file /usr/lib/systemd/journald.conf ke direktori /etc/systemd, lalu hapus komentar dan ubah pengaturan yang sesuai di file /etc/systemd/journald.conf yang dihasilkan. Pengaturan konfigurasi di file /etc/systemd/journald.conf lebih diutamakan daripada pengaturan default di file /usr/lib/systemd/journald.conf.
Konfigurasi Rotasi Jurnal Otomatis
Untuk mengkonfigurasi rotasi jurnal otomatis untuk jurnal persisten atau jurnal hanya-runtime, atur parameter berikut di file /etc/systemd/journald.conf.
- Awali pengaturan dengan System untuk jurnal persisten di direktori
/var/log/journal. - Awali pengaturan dengan Runtime untuk jurnal sementara di direktori
/run/log/journal.
SystemMaxUse dan RuntimeMaxUse: Jumlah maksimum ruang sistem file yang dapat digunakan jurnal. Nilai ini adalah 10% dari total ruang sistem file secara default, dan dibatasi hingga 4 GB.
SystemMaxFileSize dan RuntimeMaxFileSize: Ukuran file maksimum jurnal sebelum dirotasi. Nilai ini adalah seperdelapan dari nilai SystemMaxUse/RuntimeMaxUse secara default, dan dibatasi hingga 128 M, dan biasanya mendukung penyimpanan tujuh file jurnal yang dirotasi sebagai riwayat. Jika mode pemadatan jurnal diaktifkan (default), nilai ini dibatasi hingga 4 GB.
SystemKeepFree dan RuntimeKeepFree: Ruang sistem file kosong minimum yang harus tersisa sebelum jurnal yang diarsipkan dihapus. Setidaknya 15% dari total ruang sistem file selalu dibiarkan kosong secara default. Nilai ini dibatasi hingga 4 GB.
# Setelah mengedit file konfigurasi /etc/systemd/journald.conf, mulai ulang layanan systemd-journald untuk menerapkan perubahan konfigurasi.
root@host:~# systemctl restart systemd-journald
Mengelola Jam dan Zona Waktu Lokal
# menampilkan gambaran umum dari pengaturan sistem terkait waktu saat ini
user@host:~$ timedatectl
Local time: Wed 2022-03-16 05:53:05 EDT
Universal time: Wed 2022-03-16 09:53:05 UTC
RTC time: Wed 2022-03-16 09:53:05
Time zone: America/New_York (EDT, -0400)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Mengatur Zona Waktu Sistem
# list database zona waktu
user@host:~$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
...output omitted...
# ganti zona waktu
root@host:~# timedatectl set-timezone America/Phoenix
untuk lebih mudah, gunakan perintah
tzselectuntuk lihat zona waktu
Mengatur Waktu Sistem Secara Manual
# gunakan format "YYYY-MM-DD hh:mm:ss"
root@host:~# timedatectl set-time 9:00:00
Contoh sebelumnya mungkin gagal dengan pesan error
Failed to set time: Automatic time synchronization is enabled. Dalam kasus itu, pertama nonaktifkan sinkronisasi waktu otomatis sebelum mengatur tanggal atau waktu secara manual.
# menonaktofkan sinkronisasi NTP
root@host:~# timedatectl set-ntp false
Atur dan Pantau Layanan Chronyd
Layanan chronyd menyinkronkan Jam Real-Time (RTC) lokal yang tidak akurat dengan server NTP yang sudah dikonfigurasi. Jika tidak ada koneksi jaringan, maka layanan chronyd akan menghitung pergeseran jam RTC, dan mencatatnya di file /var/lib/chrony/drift (yang ditentukan oleh pengaturan driftfile di file konfigurasi /etc/chrony.conf).
- Stratum menunjukkan jarak (jumlah hop) sebuah mesin dari referensi waktu berperforma tinggi.
- Stratum 0: Perangkat keras referensi berperforma tinggi (jam atom atau sinyal GPS).
- Stratum 1: Server NTP yang terhubung langsung ke perangkat Stratum 0.
- Stratum 2: Mesin yang menyinkronkan waktu dari server Stratum 1, dan seterusnya.
- Server NTP dapat bertindak sebagai klien sekaligus server bagi yang lain.
Memilih Sumber Waktu NTP
- Disarankan mengonfigurasi tiga sumber atau lebih untuk antisipasi malfungsi dan koreksi jeda jaringan yang bervariasi.
- Direktif
server: Menambahkan satu server NTP tunggal. Bisa digunakan berulang. - Direktif
pool: Menentukan nama DNS yang meresolusi ke beberapa server NTP (daftar bisa berubah).
# Sebagai contoh, jika baris server ntp.example.com iburst ada di file konfigurasi /etc/chrony.conf.
# layanan chronyd menggunakan server ntp.example.com sebagai sumber waktu NTP.
# Use public servers from the pool.ntp.org project.
pool 2.rhel.pool.ntp.org iburst
server ntp.example.com iburst
...output omitted...
Opsi
iburst(disarankan): Membuat chronyd melakukan 4-8 pengukuran cepat agar sinkronisasi lebih cepat.
Memeriksa Status Sinkronisasi NTP
root@host:~# chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp.example.com 2 6 377 20 -28us[ +361ns] +/- 14ms
^- 192.0.2.10 2 10 377 936 -2329us[-2329us] +/- 120ms
^+ 2001:0db8:5:1890:f888:3e> 2 10 377 1009 -777us[ -673us] +/- 27ms
^+ clock3.example.net 2 10 377 149 -1220us[-1220us] +/- 36ms
^- 2001:0db8:88:f031:3333:a> 2 10 377 767 -1300us[-1300us] +/- 118ms
Karakter (*) Source State menandakan bahwa chronyd menggunakan ntp.example.com sebagai sumber waktu untuk sinkronisasi. Jika ada x atau tanda tilde (~) di kolom itu, berarti layanan chronyd menentukan bahwa ada yang tidak beres dengan waktu yang diberikan server NTP jarak jauh ini. Kalau ada tanda tanya (?) di kolom itu, berarti server saat ini tidak bisa digunakan.
Mengelola Keamanan dengan SELinux
Arsitektur SELinux
SELinux terdiri dari kebijakan khusus aplikasi yang dibuat oleh pengembang aplikasi untuk menentukan tindakan dan akses mana yang diizinkan untuk setiap file biner yang dapat dieksekusi, file konfigurasi, dan file data yang digunakan aplikasi.
Penggunaan SELinux
SELinux memiliki 3 mode operasi:
- Enforcing: SELinux menegakkan kebijakan keamanan di seluruh sistem. Mode menegakkan adalah mode default dan direkomendasikan di RHEL.
- Permissive: Memuat kebijakan, tapi hanya mencatat pelanggaran.
- Disabled: Dinonaktifkan. Mode ini juga menghindari pemberian label pada file atau direktori dengan konteks keamanan, yang membuatnya sulit untuk mengaktifkan SELinux di masa depan. Menonaktifkan SELinux sangat tidak disarankan.
Konsep SELinux
Kebanyakan sysadmin familiar dengan user, grup, izin file. ini disebut Discretionary Access Control (DAC). Selinux menyediakan lapisan keamanan tambahan berbasis objek yang disebut Mandatory Access Control (MAC).
Kebijakan SELinux adalah aturan keamanan yang menentukan bagaimana proses tertentu mengakses file, direktori, dan port yang relevan. Setiap entitas sumber daya, seperti file, proses, direktori, atau port, memiliki label konteks SELinux.
Konsep Aturan Akses Kebijakan
Kebijakan server web secara default tidak memiliki aturan izin untuk menggunakan file yang diberi label tmp_t, seperti di direktori /tmp dan /var/tmp, sehingga aksesnya tidak diizinkan. Dengan SELinux diaktifkan, pengguna jahat yang menggunakan proses Apache yang telah dikompromikan tetap tidak akan memiliki akses ke file di direktori /tmp.
Banyak perintah yang menampilkan daftar sumber daya menggunakan opsi -Z untuk mengelola konteks SELinux. Misalnya, perintah ps, ls, cp, dan mkdir semuanya menggunakan opsi -Z.
root@host:~# ps axZ
root@host:~# ps -ZC httpd
root@host:~# ls -Z /var/www
Ubah Mode SELinux
# melihat mode
root@host:~# getenforce
Enforcing
# mengubah mode
root@host:~# setenforce
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
# mengubah mode ke permissive
root@host:~# setenforce 0
Atur Mode SELinux Default
Untuk konfigurasi permanen, modifikasi di file /etc/selinux/config.
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
...output omitted...
SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
Konteks SELinux Awal
SELinux menyimpan database berbasis file dari kebijakan pelabelan file di direktori /etc/selinux/targeted/contexts/files. File yang disalin akan diubah label SELinux nya, diturunkan dari direktori tujuan. Perintah cp -p menjaga semua atribut file saat menyalin jika memungkinkan, dan perintah cp --preserve=context hanya menjaga konteks SELinux.
# buat dua file di direktori tmp
root@host:~# touch /tmp/file1 /tmp/file2
# keduanya memiliki label user_tmp_t yang diturunkan dari parent direktori
root@host:~# ls -Z /tmp/file*
unconfined_u:object_r:user_tmp_t:s0 /tmp/file1
unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
# direktori /var/www/html memiliki label httpd_sys_content_t
root@host:~# ls -Zd /var/www/html/
system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
# pindah file1 ke direktori /var/www/html
root@host:~# mv /tmp/file1 /var/www/html/
# salin file2 ke direktori /var/www/html
root@host:~# cp /tmp/file2 /var/www/html/
# cek label
root@host:~# ls -Z /var/www/html/file*
unconfined_u:object_r:user_tmp_t:s0 /var/www/html/file1
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2
Mengubah Konteks (label) SELinux
Konteks SELinux bisa diubah dengan perintah semanage fcontext, restorecon, dan chcon. Metode yang direkomendasikan adalah mengubah konteks policy dengan perintah semanage fcontext. Perintah chcon bisa ddigunakan untuk mengubah langsung, tetapi hanya sementara (setelah rebot akan kembali semula).
Contoh berikut membuat direktori dengan konteks SELinux default_t, yang diwarisinya dari direktori induk /.
# buat direktori
root@host:~# mkdir /virtual
root@host:~# ls -Zd /virtual
unconfined_u:object_r:default_t:s0 /virtual
# ubah konteks file dengan chcon
root@host:~# chcon -t httpd_sys_content_t /virtual
root@host:~# ls -Zd /virtual
unconfined_u:object_r:httpd_sys_content_t:s0 /virtual
# reset label dengan restorecon
root@host:~# restorecon -v /virtual
Relabeled /virtual from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:default_t:s0
root@host:~# ls -Zd /virtual
unconfined_u:object_r:default_t:s0 /virtual
Tentukan Kebijakan Konteks File Default SELinux
Saat melihat kebijakan, ekspresi reguler panjang yang paling umum adalah (/.*)?, yang biasanya ditambahkan ke nama direktori. Misalnya, aturan berikut menentukan bahwa direktori /var/www/cgi-bin, serta semua file di dalamnya atau di subdirektorinya, memiliki konteks SELinux system_u:object_r:httpd_sys_script_exec_t:s0, kecuali ada aturan yang lebih spesifik menggantikan ini.
Operasi Dasar Konten File
Berikut beberapa opsi perintah semanage fcontext:
-a,--add: Tambahkan catatan dari jenis objek yang ditentukan.-d,--delete: Hapus catatan dari tipe objek yang ditentukan.-l,--list: Daftar catatan dari jenis objek yang ditentukan.
Untuk mengelola konteks SELinux, pasang paket policycoreutils dan policycoreutils-python-utils, yang berisi perintah restorecon dan semanage. Dalam contoh berikut, lihat konteks file sebelum dan sesudah menggunakan perintah semanage dan restorecon.
# verifikasi konteks selinux
root@host:~# ls -Z /var/www/html/file*
unconfined_u:object_r:user_tmp_t:s0 /var/www/html/file1
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2
# list konteks selinux default
root@host:~# semanage fcontext -l
...output omitted...
/var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
...output omitted...
# mengembalikan konteks default pada semua file dan subdirektori.
root@host:~# restorecon -Rv /var/www/
Relabeled /var/www/html/file1 from unconfined_u:object_r:user_tmp_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
# lihat konteks
root@host:~# ls -Z /var/www/html/file*
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2
Contoh berikut menggunakan perintah semanage untuk menambahkan kebijakan konteks untuk direktori baru.
# buat direktori
root@host:~# mkdir /virtual
# buat file index
root@host:~# touch /virtual/index.html
# lihat konteks selinux
root@host:~# ls -Zd /virtual/
unconfined_u:object_r:default_t:s0 /virtual
root@host:~# ls -Z /virtual/
unconfined_u:object_r:default_t:s0 index.html
# tambahkan kebijakan konteks selinux
root@host:~# semanage fcontext -a -t httpd_sys_content_t '/virtual(/.*)?'
# atur konteks default pada direktori dan semua file di dalamnya dengan restorecon
root@host:~# restorecon -RFvv /virtual
Relabeled /virtual from unconfined_u:object_r:default_t:s0 to system_u:object_r:httpd_sys_content_t:s0
Relabeled /virtual/index.html from unconfined_u:object_r:default_t:s0 to system_u:object_r:httpd_sys_content_t:s0
# lihat konteks
root@host:~# ls -Zd /virtual/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /virtual/
root@host:~# ls -Z /virtual/
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
# melihat semua kustomisasi lokal pada kebijakan default.
root@host:~# semanage fcontext -l -C
SELinux fcontext type Context
/virtual(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
Boolean SELinux
root@host:~# getsebool -a
abrt_anon_write --> off
abrt_handle_event --> off
abrt_upload_watch_anon_write --> on
...output omitted...
Contoh Boolean Kebijakan Httpd
Kebijakan layanan httpd mencakup Boolean httpd_enable_homedirs, yang memungkinkan berbagi direktori home dengan layanan httpd.
# contoh melihat status
root@host:~# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off
Kelola Boolean Kebijakan
# lihat boolean httpd_enable_homedirs
root@host:~# semanage boolean -l | grep httpd_enable_homedirs
httpd_enable_homedirs (off , off) Allow httpd to enable homedirs
# mengaktifkan sementara sampai sistem reboot
root@host:~# setsebool httpd_enable_homedirs on
# lihat status
root@host:~# semanage boolean -l | grep httpd_enable_homedirs
httpd_enable_homedirs (on , off) Allow httpd to enable homedirs
# verifikasi
root@host:~# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> on
# aktifkan permanen
root@host:~# setsebool -P httpd_enable_homedirs on
# lihat informasi
root@host:~# semanage boolean -l | grep httpd_enable_homedirs
httpd_enable_homedirs (on , on) Allow httpd to enable homedirs
# hanya mencantumkan Boolean persisten dengan pengaturan yang disesuaikan dibandingkan dengan kebijakan asli
root@host:~# semanage boolean -l -C
SELinux boolean State Default Description
httpd_enable_homedirs (on , on) Allow httpd to enable homedirs
Mengatasi Masalah SELinux
Pantau Pelanggaran SELinux
Layanan pemecahan masalah SELinux, dari paket setroubleshoot-server, menyediakan alat untuk mendiagnosis masalah SELinux. Ketika SELinux menolak suatu tindakan, pesan Access Vector Cache (AVC) dicatat ke file log keamanan /var/log/audit/audit.log.
Contoh urutan perintah pada server web Apache standar
# buat file mypage
root@host:~# touch /root/mypage
# pindahkan file ke direktori web
root@host:~# mv /root/mypage /var/www/html
# jalankan service
root@host:~# systemctl start httpd
# coba akses
root@host:~# curl http://localhost/mypage
...output admitted...
<p>You don't have permission to access this resource.</p>
</body></html>
# lihat pesan log
root@host:~# tail /var/log/audit/audit.log
...output omitted...
type=AVC msg=audit(1749508506.271:159): avc: denied { getattr } for pid=1984 comm="httpd" path="/var/www/html/mypage" dev="sda3" ino=8805547 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file permissive=0
...output omitted..._
root@host:~# tail /var/log/messages
...output omitted...
Jun 9 22:35:06 servera setroubleshoot[2175]: SELinux is preventing /usr/sbin/httpd from getattr access on the file /var/www/html/mypage. For complete SELinux messages run: sealert -l a0bca4b2-46a9-4252-b0cd-6de0dfcdd454
...output omitted...
Output perintah sealert menjelaskan kejadian tersebut, dan mencakup proses yang terpengaruh, file yang diakses, serta tindakan yang dicoba dan ditolak.
root@host:~# sealert -l a0bca4b2-46a9-4252-b0cd-6de0dfcdd454
# Gunakan perintah ausearch untuk mencari kejadian AVC di file log /var/log/audit/audit.log.
root@host:~# ausearch -m AVC -ts recent
Memecahkan Masalah SELinux dengan Konsol Web
Konsol web RHEL menyertakan alat untuk memecahkan masalah SELinux. Pilih SELinux dari menu sebelah kiri. Jendela kebijakan SELinux menampilkan status penegakan saat ini. Bagian SELinux access control errors mencantumkan masalah SELinux saat ini.

Mengarsipkan File
Membuat Arsip dari Baris Perintah
Opsi dari Utilitas Tar
Salah satu tindakan perintah tar berikut diperlukan untuk melakukan operasi tar:
-catau--create: Membuat file arsip.-tatau--list: Menampilkan isi arsip.-xatau--extract: Mengekstrak arsip.
Opsi umum perintah tar berikut sering disertakan:
-vatau--verbose: Menampilkan file yang sedang diarsipkan atau diekstrak selama operasi tar.-fatau--file: Setelah opsi ini, tambahkan nama file arsip yang akan dibuat atau dibuka.-patau--preserve-permissions: Mempertahankan izin file asli saat mengekstrak.--xattrs: Mengaktifkan dukungan atribut tambahan, dan menyimpan atribut file tambahan.--selinux: Mengaktifkan dukungan konteks SELinux, dan menyimpan konteks file SELinux.
Opsi kompresi perintah tar berikut digunakan untuk memilih algoritma:
-aatau--auto-compress: Gunakan akhiran arsip untuk menentukan algoritma yang akan digunakan.-zatau--gzip: Gunakan algoritma kompresi gzip, yang menghasilkan akhiran .tar.gz.-jatau--bzip2: Gunakan algoritma kompresi bzip2, yang menghasilkan akhiran .tar.bz2.-Jatau--xz: Gunakan algoritma kompresi xz, yang menghasilkan akhiran .tar.xz.
Buat Arsip
user@host:~$ tar -cf mybackup.tar myapp1.log myapp2.log myapp3.log
root@host:~# tar -cf /root/etc-backup.tar /etc
tar: Removing leading `/' from member names
List isi arsip
root@host:~# tar -tf /root/etc.tar
etc/
etc/fstab
etc/crypttab
etc/mtab
...output omitted...
Ekstrak arsip
# ekstrak konten ke direktori kosong untuk menghindari overwrite file yg sudah ada
root@host:~# mkdir /root/etcbackup
root@host:~/etcbackup# tar -xf /root/etc.tar
# ketika di ekstrak, aturan perintah umask akan diterapkan. untuk menghindari:
user@host:~/scripts$ tar -xpf /home/user/myscripts.tar
Buat Arsip Terkompresi
Perintah tar mendukung metode kompresi berikut, dan lainnya:
- Kompresi
gzipadalah metode yang lebih awal, tercepat, dan tersedia secara luas di berbagai platform. - Kompresi
bzip2menghasilkan arsip yang lebih kecil tetapi kurang tersedia secara luas dibandingkan gzip. - Kompresi
xzadalah metode yang lebih baru, dan menawarkan rasio kompresi terbaik dari metode yang tersedia.
# buat arsip dengan kompresi gzip
root@host:~# tar -czf /root/etcbackup.tar.gz /etc
tar: Removing leading `/' from member names
# buat arsip dengan kompresi bzip2
root@host:~# tar -cjf /root/logbackup.tar.bz2 /var/log
tar: Removing leading `/' from member names
# buat arsip dengan kompresi xz
root@host:~# tar -cJf /root/sshconfig.tar.xz /etc/ssh
tar: Removing leading `/' from member names
Ekstrak Isi Arsip Terkompresi
Perintah tar bisa mendeteksi otomatis jenis kompresi yang digunakan.
# gunakan perintah list file kompresi gz
user@host:~$ gzip -l file.tar.gz
compressed uncompressed ratio uncompressed_name
221603125 303841280 27.1% file.tar
# gunakan perintah xz untuk list file kompresi xz
user@host:~$ xz -l file.tar.xz
Strms Blocks Compressed Uncompressed Ratio Check Filename
1 1 195.7 MiB 289.8 MiB 0.675 CRC64 file.xz
Memindahkan File
Transfer File Jarak Jauh dengan Program Transfer File Aman (SFTP)
user@host:~$ sftp remoteuser@remotehost
remoteuser@remotehost's password: password
Connected to remotehost.
sftp> help
Available commands:
bye Quit sftp
cd path Change remote directory to 'path'
chgrp [-h] grp path Change group of file 'path' to 'grp'
chmod [-h] mode path Change permissions of file 'path' to 'mode'
chown [-h] own path Change owner of file 'path' to 'own'
...output omitted...
sftp> pwd
Remote working directory: /home/remoteuser
sftp> lpwd
Local working directory: /home/user
sftp> mkdir hostbackup
sftp> cd hostbackup
sftp> put /etc/hosts
Uploading /etc/hosts to /home/remoteuser/hostbackup/hosts
/etc/hosts 100% 227 0.2KB/s 00:00
sftp> put -r directory
Uploading directory/ to /home/remoteuser/directory
Entering directory/
file1 100% 0 0.0KB/s 00:00
file2 100% 0 0.0KB/s 00:00
sftp> get /etc/dnf/dnf.conf
Fetching /etc/dnf/dnf.conf to dnf.conf
/etc/dnf.conf 100% 813 0.8KB/s 00:00
user@host:~$ sftp remoteuser@remotehost:/home/remoteuser/remotefile
Connected to remotehost.
Fetching /home/remoteuser/remotefile to remotefile
remotefile 100% 7 15.7KB/s 00:00
Mentransfer File dengan Perintah Salin Aman (SCP)
Mulai RHEL 10, perintah
scpmenggunakan SFTP untuk mentransfer file.
user@host:~$ scp /etc/dnf/dnf.conf /etc/hosts remoteuser@remotehost:/home/remoteuser
remoteuser@remotehost's password: password
dnf.conf 100% 813 0.8KB/s 00:00
hosts 100% 227 0.2KB/s 00:00
[user@host ~]$ scp remoteuser@remotehost:/etc/hostname /home/user
remoteuser@remotehost's password: password
hostname
Sinkronisasi File dan Direktori Jarak Jauh
Gunakan perintah rsync dg opsi -n untuk simulasi yang terjadi ketika perintah dieksekusi. Dua opsi standar adalah -a dan -v. Opsi -v atau --verbose untuk output lebih detail. Opsi -a atau --archive untuk menyalin secara rekursif dan mengaktifkan opsi lain.
Untuk menyertakan atribut tambahan saat menyinkronkan file:
-Auntuk menjaga Daftar Kontrol Akses (ACLs).-Xuntuk menjaga konteks SELinux.
root@host:~# rsync -av /var/log hosta:/tmp
root@hosta's password: password
receiving incremental file list
log/
log/README
log/boot.log
...output omitted...
sent 9,783 bytes received 290,576 bytes 85,816.86 bytes/sec
total size is 11,585,690 speedup is 38.57
root@host:~# rsync -av hosta:/var/log /tmp
root@hosta's password: password
receiving incremental file list
log/boot.log
log/dnf.librepo.log
log/dnf.log
...output omitted...
sent 9,783 bytes received 290,576 bytes 85,816.86 bytes/sec
total size is 11,585,690 speedup is 38.57
user@host:~$ sudo rsync -av /var/log /tmp
[sudo] password for user: password
receiving incremental file list
log/
log/README
log/boot.log
...output omitted...
log/tuned/tuned.log
sent 11,592,423 bytes received 779 bytes 23,186,404.00 bytes/sec
total size is 11,586,755 speedup is 1.00
user@host:~$ ls /tmp
log ssh-RLjDdarkKiW1
root@host:~# rsync -av /var/log/ /tmp
sending incremental file list
./
README
boot.log
...output omitted...
tuned/tuned.log
sent 11,592,389 bytes received 778 bytes 23,186,334.00 bytes/sec
total size is 11,586,755 speedup is 1.00
root@host:~# ls /tmp
anaconda dnf.rpm.log-20190318 private
audit dnf.rpm.log-20190324 qemu-ga
boot.log dnf.rpm.log-20190331 README
...output omitted...
Garis miring di ahir direktori source agar isi file direktori itu yang di singkronkan. Tanpa garis miring di ahir akan menyalin direktori itu sendiri.
Tuning Performa Sistem
Tuning Sistem
TuneD adalah alat powerfull untuk tuning performa sistem di RHEL.
Mode Tuning Statis Default
Layanan TuneD akan jalan otomatis setiap boot.
Mengatur Tuning Dinamis
Dapat dilakukan dengan mengubah nilai variabel dynamic_tuning ke 1 di file /etc/tuned/tuned-main.conf.
Memasang dan Mengaktifkan Layanan Tuning
root@host:~$ dnf install tuned
...output omitted...
Is this ok [y/N]: y
...output omitted...
root@host:~$ systemctl enable --now tuned
Created symlink /etc/systemd/system/multi-user.target.wants/tuned.service → /usr/lib/systemd/system/tuned.service.
| Profil Tuned | Tujuan |
|---|---|
| accelerator-performance | Peningkatan kinerja berbasis tuning performa. |
| aws | Optimasi untuk instans Amazon Web Services (AWS) EC2. |
| balanced | Profil tuned umum yang tidak terspesialisasi (general purpose). |
| balanced-battery | Profil balanced untuk penghematan daya. |
| desktop | Optimasi untuk penggunaan desktop. |
| hpc-compute | Optimasi untuk beban kerja komputasi High-Performance Computing (HPC). |
| intel-sst | Konfigurasi untuk Intel Speed Select Base Frequency. |
| latency-performance | Optimasi untuk kinerja deterministik dengan mengorbankan konsumsi daya yang lebih tinggi. |
| network-latency | Optimasi untuk kinerja deterministik dengan mengorbankan konsumsi daya yang lebih tinggi, difokuskan pada kinerja jaringan latensi rendah. |
| network-throughput | Optimasi untuk throughput jaringan streaming, umumnya hanya diperlukan pada CPU generasi lama atau jaringan 40 G+. |
| optimize-serial-console | Optimasi untuk penggunaan konsol serial. |
| powersave | Optimasi untuk konsumsi daya rendah. |
| throughput-performance | Tuning yang dapat diterapkan secara luas dan memberikan performa sangat baik di berbagai beban kerja server umum. |
| virtual-guest | Optimasi untuk berjalan di dalam virtual guest. |
| virtual-host | Optimasi untuk menjalankan guest Kernel-based Virtual Machine (KVM). |
Aplikasi TuneD menyimpan profil yang telah diinstal sebelumnya di direktori /usr/lib/tuned/profiles. Profil-profil ini tidak dimaksudkan untuk diedit secara langsung.
Profil direktif include bagian [main] di dalam file tuned.conf memungkinkan pewarisan (menggunakan pengaturan dari profil lain).
Untuk kustomisasi profil tuning, salin profil dari /usr/lib/tuned/profiles ke /etc/tuned/profiles (prioritas).
Parameter vm.swappiness bagian [sysctl] di dalam file tuned.conf menentukan seberapa agresif kernel memindahkan proses dari memori fisik ke ruang swap.
# untuk memeriksa
root@host:~# sysctl vm.swappiness
vm.swappiness = 30 ---> menerima nilai dari 0 hingga 100
Mengelola Profil dari Baris Perintah
Perintah tuned-adm mendukung aktivitas tuning berikut:
- Memeriksa pengaturan aktif saat ini.
- Mencantumkan semua profil tuning yang tersedia.
- Menerima profil tuning yang direkomendasikan untuk sistem.
- Beralih langsung antar profil tuning.
- Menonaktifkan semua pengaturan TuneD.
# identifikasi profil tuning yang aktif saat ini
root@host:~# tuned-adm active
Current active profile: throughput-performance
# verifikasi pengaturan sistem sesuai dengan tuning aktif
root@host:~# tuned-adm verify
Verification succeeded, current system settings match the preset profile.
See TuneD log file ('/var/log/tuned/tuned.log') for details.
# lihat semua profil tuning yang tersedia
root@host:~# tuned-adm list
# lihat informasi spesifik profil tuning
root@host:~# tuned-adm profile_info network-latency
# mengubah profil tuning yang aktif saat ini secara permanen
root@host:~# tuned-adm profile virtual-guest
# lihat saran profil tuning berbasis berbagai karakteristik
root@host:~# tuned-adm recommend
virtual-guest
# menonaktifkan semua aktifitas TuneD
root@host:~# tuned-adm off
Mengelola Profil dengan Konsol Web
Harus mengaktifkan akses administrative

Mengaktifkan Konsol Web
root@host:~# dnf install cockpit
...output omitted...
Is this ok [y/N]: y
...output omitted...
Complete!
root@host:~# systemctl enable --now cockpit.socket
Created symlink '/etc/systemd/system/sockets.target.wants/cockpit.socket' → '/usr/lib/systemd/system/cockpit.socket'.
# jika pakai konfigurasi firewall custom, port 9090 harus dibuka, atau izinkan layanan cockpit
root@host:~# firewall-cmd --add-service=cockpit --permanent
success
root@host:~# firewall-cmd --reload
success
Akses konsol web melalui port 9090.
Multitasking Preemptif
Adalah metode sistem operasi di mana pengelolaan waktu penggunaan CPU sepenuhnya diatur oleh sistem (kernel), bukan oleh program itu sendiri.
Kebijakan Penjadwalan Proses
Mulai dari RHEL 10, algoritma yang mengimplementasikan kebijakan SCHED_NORMAL disebut Earliest Eligible Virtual Deadline First (EEVDF), yang menggantikan Completely Fair Scheduler (CFS) dari versi RHEL sebelumnya.
Nilai Nice di Linux
Nilai “nice” adalah parameter dari kebijakan SCHED_NORMAL default yang dapat diatur oleh pengguna untuk memungkinkan suatu proses menjadi “baik” (atau “kurang baik”) terhadap proses lain dengan menyesuaikan kesiapannya untuk memberikan waktu CPU. Nilai ini berkisar dari -20 (paling tidak “baik”, untuk menunjukkan prioritas tertinggi) hingga +19 (paling “baik”, untuk menunjukkan prioritas terendah). Secara default, sebagian besar proses dimulai dengan nilai “nice” 0.
Izin untuk Memodifikasi Nilai-Nilai Nice
Pengguna dengan hak istimewa dapat menurunkan nilai nice suatu proses, Pengguna tanpa hak istimewa hanya dapat meningkatkan nilai nice untuk proses mereka sendiri.
Melihat Prioritas Proses
Perintah top dan ps sering digunakan untuk memeriksa prioritas proses yang sedang berjalan. Perintah top menampilkan setiap proses dengan metrik utama, termasuk prioritasnya (PR) dan nilai nice (NI).
Untuk proses non-real-time (SCHED_NORMAL), prioritas dapat dihitung dengan menggunakan rumus: PR = 20 + nice_value.
# melihat secara statis
user@host:~$ ps -o pid,priority,nice,cls,pcpu,comm -C sha1sum
PID PRI NI CLS %CPU COMMAND
2176 20 0 TS 99.2 sha1sum
2183 30 10 TS 99.1 sha1sum
2185 -11 - RR 99.3 sha1sum
Memulai Proses dengan Nilai Nice yang Spesifik
Secara default, saat sebuah proses dibuat, ia mewarisi nilai nice dari induknya. Ketika sebuah proses dijalankan dari command line, ia mewarisi nilai nice dari proses shell. Biasanya, proses baru berjalan dengan nilai nice default 0.
# memulai proses CPU intensif
user@host:~$ sha1sum /dev/zero &
[1] 2794
user@host:~$ ps -o pid,nice,comm -C sha1sum
PID NI COMMAND
2794 0 sha1sum
# contoh menjalankan perintah yang sama dengan default nilai nice 10
user@host:~$ nice sha1sum /dev/zero &
[2] 2810
user@host:~$ ps -o pid,nice,comm -C sha1sum
PID NI COMMAND
2794 0 sha1sum
2810 10 sha1sum
# gunakan opsi -n untuk mendefinisikan value
user@host:~$ nice -n 15 sha1sum /dev/zero &
[3] 2814
user@host:~$ ps -o pid,nice,comm -C sha1sum
PID NI COMMAND
2794 0 sha1sum
2810 10 sha1sum
2814 15 sha1sum
Saat menjalankan proses yang membutuhkan banyak CPU, terutama untuk pengujian, pastikan menghentikannya supaya sistem tidak melambat atau kehabisan sumber daya:
pkill sha1sum
Mengubah Nilai Nice dari Proses yang Sedang Berjalan
# mengubah nice PID 3033
user@host:~$ renice -n 19 3033
3033 (process ID) old priority 10, new priority 19
# Upaya untuk menurunkan nilai nice kembali ke 10 akan gagal, karena pengguna tanpa hak istimewa tidak bisa menurunkan nilai nice
user@host:~$ renice -n 10 3033
renice: failed to set priority for 3033 (process ID): Permission denied
Mengatur Penyimpanan Dasar
Pemartisian Disk
Artinya membagi hard disk menjadi beberapa bagian. Pada sistem x86, dua skema partisi utama adalah Master Boot Record (MBR) dan GUID Partition Table (GPT).
Skema Partisi Master Boot Record (MBR)
Skema ini mendukung maksimal empat partisi utama. Pada sistem Linux, dengan partisi extended dan logical dapat membuat hingga 15 partisi. Dengan ukuran partisi 32-bit, disk yang dipartisi dengan MBR dapat memiliki ukuran hingga 2 TiB.
Skema Partisi GUID Partition Table (GPT)
Untuk sistem yg pakai UEFI partisi standanrnya adalah GPT. Maksimal hingga 128 partisi. Skema GPT mengalokasikan 64 bit untuk alamat blok logis guna mendukung partisi dan disk hingga delapan zebibyte (ZiB) atau delapan miliar tebibyte (TiB).
Skema GPT menggunakan Pengidentifikasi Unik Global (GUID) untuk mengidentifikasi setiap disk dan partisi.
Mengelola Partisi
# Contoh ini menggunakan subperintah print untuk menampilkan tabel partisi pada disk yang merupakan perangkat blok /dev/sda.
root@host:~# parted /dev/sda print
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 10.7GB 10.7GB primary xfs boot
2 10.7GB 53.7GB 42.9GB primary xfs
# memulai sesi interaktif
root@host:~# parted /dev/sda
GNU Parted 3.6
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
# menampilkan tabel partisi
(parted) print
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 10.7GB 10.7GB primary xfs boot
2 10.7GB 53.7GB 42.9GB primary xfs
# keluar sesi interaktif
(parted) quit
root@host:~#
Secara default, perintah parted menampilkan ukuran dalam kelipatan 10 (KB, MB, GB). Ubah ukuran satuan dengan parameter unit, yang menerima nilai-nilai berikut:
suntuk sectorBuntuk byte- MiB, GiB, atau TiB (basis 2)
- MB, GB, atau TB (basis 10)
root@host:~# parted /dev/sda unit s print
Tulis Tabel Partisi pada Disk Baru
# menulis label disk MBR
root@host:~# parted /dev/sdb mklabel msdos
# menulis label disk GPT
root@host:~# parted /dev/sdb mklabel gpt
Membuat Partisi MBR
root@host:~# parted /dev/sdb
GNU Parted 3.6
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help mkpart
mkpart PART-TYPE [FS-TYPE] START END make a partition
PART-TYPE is one of: primary, logical, extended
FS-TYPE is one of: udf, btrfs, nilfs2, ext4, ext3, ext2, f2fs, fat32, fat16,
hfsx, hfs+, hfs, jfs, swsusp, linux-swap(v1), linux-swap(v0), ntfs, reiserfs,
hp-ufs, sun-ufs, xfs, apfs2, apfs1, asfs, amufs5, amufs4, amufs3, amufs2,
amufs1, amufs0, amufs, affs7, affs6, affs5, affs4, affs3, affs2, affs1, affs0,
linux-swap, linux-swap(new), linux-swap(old)
START and END are disk locations, such as 4GB or 10%. Negative values count
from the end of the disk. For example, -1s specifies exactly the last sector.
'mkpart' makes a partition without creating a new file system on the partition.
FS-TYPE may be specified to set an appropriate partition ID.
(parted) mkpart
Partition type? primary/extended? primary
File system type? [ext2]? Tab Tab
affs0 affs4 amufs amufs3 apfs2 ext3 fat32 hp-ufs linux-swap(old) ntfs udf
affs1 affs5 amufs0 amufs4 asfs ext4 hfs jfs linux-swap(v0) reiserfs xfs
affs2 affs6 amufs1 amufs5 btrfs f2fs hfs+ linux-swap linux-swap(v1) sun-ufs
affs3 affs7 amufs2 apfs1 ext2 fat16 hfsx linux-swap(new) nilfs2 swsusp
File system type? [ext2]? xfs
Start? 2048MB
End? 1000MB
(parted) quit
Information: You may need to update /etc/fstab.
root@host:~#
# untuk mendeteksi partisi baru
root@host:~# udevadm settle
Jika memerlukan lebih dari empat partisi pada disk yang dipartisi MBR, maka buatlah tiga partisi utama dan satu partisi yang diperluas. Partisi yang diperluas berfungsi sebagai wadah tempat membuat beberapa partisi logis.
Alternatif membuat partisi baru dengan perintah noninteraktif:
root@host:~# parted /dev/sdb mkpart primary xfs 2048s 1000MB
Membuat Partisi GPT
root@host:~# parted /dev/sdb
GNU Parted 3.6
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mkpart
Partition name? []? userdata
File system type? [ext2]? xfs
Start? 2048s
End? 1000MB
(parted) quit
Information: You may need to update /etc/fstab.
root@host:~#
# mendeteksi partisi baru
root@host:~# udevadm settle
Alternatif membuat partisi baru dengan perintah noninteraktif
root@host:~# parted /dev/sdb mkpart userdata xfs 2048s 1000MB
Menghapus Partisi
# interaktif
root@host:~# parted /dev/sdb
GNU Parted 3.6
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1000MB 999MB xfs userdata
(parted) rm 1
(parted) quit
Information: You may need to update /etc/fstab.
root@host:~#
# noninteraktif
root@host:~# parted /dev/sdb rm 1
Membuat File Sistem
# format partisi dengan file sistem XFS
root@host:~# mkfs.xfs /dev/sdb1
# format partisi dengan file sistem ext4
root@host:~# mkfs.ext4 /dev/sdb1
Mounting File Sistem
Mounting File Sistem Secara Manual
root@host:~# mount /dev/sdb1 /mnt
# melihat file sistem yang di mount saat ini
Mounting File Sistem Secara Permanen (Otomatis)
# tambahkan entri ke file /etc/fstab
root@host:~# cat /etc/fstab
UUID=a8063676-44dd-409a-b584-68be2c9f5570 / xfs defaults 0 0
UUID=7a20315d-ed8b-4e75-a5b6-24ff9e1f9838 /dbdata xfs defaults 0 0
- Kolom pertama menentukan perangkat (UUID)
- Kolom kedua adalam direktori mount
- Kolom ketiga jenis file sistem
- Kolom keempat adalah opsi yang di teerapkan ke perangkat (default = default)
- Kolom kelima digunakan perintah
dumpuntuk backup perangkat - Kolom terahir menentukan apakah perintah
fsckakan dijalankan saat sistem booting (untuk XFS = 0, ext4 = 1 untuk semua file sistem root, 2 untuk lainnya)
# setelah menambah / menghapus entri di /etc/fstab, jalankan:
root@host:~# systemctl daemon-reload
Gunakan perintah
lsblk --fsuntuk scan blok perangkat yang terhubung ke mesin dan mendapatkan UUID.
Konsep Ruang Swap
Saat penggunaan memori di sebuah sistem melebihi batas yang ditentukan, kernel mencari melalui RAM untuk menemukan halaman memori yang tidak aktif yang dialokasikan ke proses. Kernel menulis halaman yang tidak aktif ke area swap dan menetapkan ulang halaman RAM ke proses lain.
Perhitungan Ruang Swap
| RAM | Ruang Swap | Ruang Swap jika mengizinkan hibernasi |
|---|---|---|
| 2 GB atau kurang | Dua kali lipat RAM | Tiga kali lipat RAM |
| Antara 2 GB dan 8 GB | Sama dengan RAM | Dua kali lipat RAM |
| Antara 8 GB dan 64 GB | Setidaknya 4 GB | 1,5 kali lipat RAM |
| Lebih dari 64 GB | Setidaknya 4 GB | Hibernasi tidak direkomendasikan |
Membuat Ruang Swap
Membuat Partisi Swap
root@host:~# parted /dev/sdb
GNU Parted 3.6
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1001MB 1000MB data
(parted) mkpart
Partition name? []? swap1
File system type? [ext2]? linux-swap
Start? 1001MB
End? 1257MB
(parted) print
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1001MB 1000MB data
2 1001MB 1257MB 256MB linux-swap(v1) swap1
(parted) quit
Information: You may need to update /etc/fstab.
root@host:~#
root@host:~# udevadm settle
Alternatif jika tidak menggunakan perintah non-interaktif:
root@host:~# parted /dev/sdb mkpart swap1 linux-swap 1001MB 1257MB
root@host:~# udevadm settle
Format Ruang Swap
root@host:~# mkswap /dev/sdb2
Setting up swapspace version 1, size = 244 MiB (255848448 bytes)
no label, UUID=39e2667a-9458-42fe-9665-c5c854605881
Mengaktifkan Ruang Swap
root@host:~# swapon /dev/sdb2
# lihat ruang swap yang tersedia dg perintah swapon --show / free
root@host:~# free
total used free shared buff/cache available
Mem: 1873036 135044 1536040 16748 201952 1575680
Swap: 249852 0 249852
# mengaktifkan dari file /etc/fstab
root@host:~# swapon -a
Deaktifasi Ruang Swap
root@host:~# swapoff /dev/sdb1
Mengaktifkan Ruang Swap Permanen
Tambahkan bagian seperti berikut ke file etc/fstab:
# sesuaikan UUID
UUID=39e2667a-9458-42fe-9665-c5c854605881 swap swap defaults 0 0
Mengatur Prioritas Ruang Swap
Kernel menggunakan ruang swap yang memiliki priritas tertinggi lebih dulu.
UUID=af30cbb0-3866-466a-825a-58889a49ef33 swap swap defaults 0 0
UUID=39e2667a-9458-42fe-9665-c5c854605881 swap swap pri=4 0 0
UUID=fbd7fa60-b781-44a8-961b-37ac3ef572bf swap swap pri=10 0 0
Gunakan perintah swapon --show untuk melihat prioritas.
Mengelola Penyimpanan dengan Logical Volume Manager
Gambaran Umum Logical Volume Manager
LVM digunakan untuk membuat volume penyimpanan logis sebagai lapisan di atas penyimpanan fisik.
- Perangkat fisik
- Volume fisik (PVs)
- Grup volume (VGs)
- Volume logis (LVs)
Alur kerja Logical Volume Manager
Membangun Penyimpanan LVM
Siapkan Perangkat Fisik
# berikan label partisi
root@host:~# parted /dev/sdb mklabel gpt mkpart primary 1MiB 769MiB
...output omitted...
# buat partisi pada perangkat fisik
root@host:~# parted /dev/sdb mkpart secondary 770MiB 1026MiB
# atur partisi pertama ke linux lvm
root@host:~# parted /dev/sdb set 1 lvm on
# atur partisi kedua ke linux lvm
root@host:~# parted /dev/sdb set 2 lvm on
# daftarkan partisi baru ke kernel
root@host:~# udevadm settle
Buat Volume Fisik
# label partisi fisik sebagai volume LVM fisik
root@host:~# pvcreate /dev/sdb1 /dev/sdb2
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Creating devices file /etc/lvm/devices/system.devices
Buat Grup Volume
root@host:~# vgcreate vg01 /dev/sdb1 /dev/sdb2
Volume group "vg01" successfully created
Buat Volume Logis
root@host:~# lvcreate -n lv01 -L 300M vg01
Logical volume "lv01" created.
Berikut ini adalah dua pilihan perintah untuk membuat LV yang sama dengan ukuran yang sama:
lvcreate -n lv01 -L 128M vg01: Membuat LV berukuran 128 MiB, dibulatkan ke PE terdekat.lvcreate -n lv01 -l 32 vg01: Membuat LV berukuran 32 PE masing-masing 4 MiB, total 128 MiB.
Buat File Sistem pada Volume Logis
root@host:~# mkfs -t xfs /dev/vg01/lv01
...output omitted...
root@host:~# mkdir /mnt/data
# tambahkan entri ini ke file /etc/fstab
/dev/vg01/lv01 /mnt/data xfs defaults 0 0
# update daeon systemd dengan konfigurasi fstab baru
root@host:~# systemctl daemon-reload
root@host:~# mount /mnt/data/
Menampilkan Status Komponen LVM
Tampilkan Informasi Volume Fisik
root@host:~# pvdisplay /dev/sdb1
--- Physical volume ---
PV Name /dev/sdb1
VG Name vg01
PV Size 768.00 MiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 191
Free PE 116
Allocated PE 75
PV UUID evAimq-gs8W-6X9C-3H6q-ndDk-pvTx-QEZ9Jc
Tampilkan Informasi Grup Volume
root@host:~# vgdisplay vg01
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 1016.00 MiB
PE Size 4.00 MiB
Total PE 254
Alloc PE / Size 75 / 300.00 MiB
Free PE / Size 179 / 716.00 MiB
VG UUID F5a4lm-Ln8v-cYM0-YJth-f7fj-lQYZ-1AP8Zu
Tampilkan Informasi Volume Logis
root@host:~# lvdisplay /dev/vg01/lv01
--- Logical volume ---
LV Path /dev/vg01/lv01
LV Name lv01
VG Name vg01
LV UUID 7Toe5z-ozzv-aW4I-mJYQ-2VOV-MiP2-hNGFCf
LV Write Access read/write
LV Creation host, time servera, 2025-06-18 18:49:54 +0000
LV Status available
# open 1
LV Size 300.00 MiB
Current LE 75
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
Memperluas Volume Logis
Meningkatkan Kapasitas Penyimpanan pada Volume Logis
root@host:~# lvextend -L +500M /dev/vg01/lv01
Size of logical volume vg01/lv01 changed from 512.00 MiB (128 extents) to 1012.00 MiB (253 extents).
Logical volume vg01/lv01 successfully resized.
- opsi
-lmengharapkan jumlah PE sebagai argumen. - opsi
-Lmengharapkan ukuran dalam byte, mebibyte, gibibyte, atau yang serupa.
Perluas Sistem Berkas XFS hingga Ukuran Volume Logis
root@host:~# xfs_growfs /mnt/data/
...output omitted...
data blocks changed from 131072 to 259072
Memperluas Sistem File EXT4 ke Ukuran Volume Logis
root@host:~# resize2fs /dev/vg01/lv01
resize2fs 1.47.1 (20-May-2024)
Resizing the filesystem on /dev/vg01/lv01 to 259072 (4k) blocks.
The filesystem on /dev/vg01/lv01 is now 259072 (4k) blocks long.
Perluas Volume Logis Ruang Swap
# deaktivasi ruang swap di LV
root@host:~# swapoff -v /dev/vg01/swap
swapoff /dev/vg01/swap
# perluas LV
root@host:~# lvextend -L +300M /dev/vg01/swap
Size of logical volume vg01/swap changed from 500.00 MiB (125 extents) to 800.00 MiB (200 extents).
Logical volume vg01/swap successfully resized.
# format LV sebagai ruang swap
root@host:~# mkswap /dev/vg01/swap
mkswap: /dev/vg01/swap: warning: wiping old swap signature.
Setting up swapspace version 1, size = 800 MiB (838856704 bytes)
no label, UUID=690ef204-9d59-4b3c-b145-eb8ba591ead8
# aktifkan kembali
root@host:~# swapon /dev/vg01/swap
Mengganti Volume Fisik dalam Grup Volume
Perluas Penyimpanan Grup Volume
root@host:~# pvcreate /dev/sdb3
Physical volume "/dev/sdb3" successfully created.
root@host:~# vgextend vg01 /dev/sdb3
Volume group "vg01" successfully extended
Kurangi Volume Penyimpanan Grup
# Secara otomatis mencadangkan metadata VG setelah terjadi perubahan.
root@host:~# pvmove -A y /dev/sdb1
/dev/sdb1: Moved: 2.74%
...output omitted...
/dev/sdb1: Moved: 100.00%
# hapus PV dari VG
root@host:~# vgreduce vg01 /dev/sdb1
Removed "/dev/sdb1" from volume group "vg01"
Hapus Penyimpanan LVM
# siapkan file sistem dengan memindahkan data ke direktori lain dan hapus entri di /etc/fstab
root@host:~# umount /mnt/data
# hapus volume logis
root@host:~# lvremove /dev/vg01/lv01
Do you really want to remove active logical volume vg01/lv01? [y/n]: y
Logical volume "lv01" successfully removed.
# hapus grup volume
root@host:~# vgremove vg01
Volume group "vg01" successfully removed
# hapus volume fisik
root@host:~# pvremove /dev/sdb2 /dev/sdb3
Labels on physical volume "/dev/sdb2" successfully wiped.
Labels on physical volume "/dev/sdb3" successfully wiped.
Mengontrol dan Memperbaiki Masalah Proses Boot
Boot Loader
Boot loader default untuk Red Hat Enterprise Linux 10 adalah GRand Unified Bootloader versi 2 (GRUB2).
Untuk memodifikasi entri boot dari menu GRUB2, gunakan editor bawaan. Akses editor di GRUB2 dengan menekan tombol E.
Mengontrol GRUB2 dari Sistem yang Sudah Booting
user@host:~$ grubby --info 1
index=1
kernel="/boot/vmlinuz-6.12.0-55.12.1.el10_0.x86_64"
args="console=tty0 ... crashkernel=2G-64G:256M,64G-:512M $tuned_params"
root="UUID=15507695-22bb-4c65-94e6-a438e095983f"
initrd="/boot/initramfs-6.12.0-55.12.1.el10_0.x86_64.img $tuned_initrd"
title="Red Hat Enterprise Linux (6.12.0-55.12.1.el10_0.x86_64) 10.0 (Coughlan)"
id="b70d796f931842cb9776f658cd068435-6.12.0-55.12.1.el10_0.x86_64"
- Nilai
indexadalah nomor entri untuk daftar menu boot, dimulai dari 0. - Nilai
kerneladalah jalur ke kernel Linux yang dimuat oleh GRUB2. - Nilai
argsadalah daftar argumen kernel yang diteruskan ke kernel Linux. - Nilai
rootadalah perangkat blok tempat kernel dan citra initramfs berada. - Nilai
initrdadalah jalur ke citra sistem file RAM awal, yang merupakan tahap awal boot Linux. - Nilai
titleadalah nama yang ditampilkan untuk entri boot di menu boot GRUB2. - Nilai
idadalah pengidentifikasi unik untuk entri boot ini.
# ubah entri default boot
root@host:~# grubby --set-default-index 0
The default is /boot/loader/entries/ffffffffffffffffffffffffffffffff-6.12.0-55.9.1.el10_0.x86_64.conf with index 0 and kernel /boot/vmlinuz-6.12.0-55.9.1.el10_0.x86_64
Argumen Baris Perintah Kernel
# menambahkan rhgb quiet
root@host:~# grubby --update-kernel /boot/vmlinuz-6.12.0-55.9.1.el10_0.x86_64 --args="rhgb quiet"
# menghapus
root@host:~# grubby --update-kernel /boot/vmlinuz-6.12.0-55.9.1.el10_0.x86_64 --remove-args="rhgb quiet"
Inisialisasi Sistem di RHEL 10
Setelah sistem dinyalakan dan boot loader dijalankan, proses inisialisasi sistem dimulai.
Memilih Target systemd
| Target | Tujuan |
|---|---|
graphical.target | Target ini mendukung banyak pengguna (multi-user), serta menyediakan login berbasis grafis dan teks. |
multi-user.target | Target ini mendukung banyak pengguna (multi-user), tetapi hanya menyediakan login berbasis teks. |
rescue.target | Target ini menyediakan sistem pengguna tunggal (single-user) untuk memungkinkan perbaikan sistem. |
emergency.target | Target ini memulai sistem paling minimal untuk memperbaiki sistem ketika unit rescue.target gagal untuk dimulai. |
# sebuah target dapat menjadi bagian dari target lain. contoh:
user@host:~$ systemctl list-dependencies graphical.target | grep target
graphical.target
* └─multi-user.target
* ├─basic.target
* │ ├─paths.target
* │ ├─slices.target
* │ ├─sockets.target
* │ ├─sysinit.target
* │ │ ├─cryptsetup.target
* | | ├─integritysetup.target
* │ │ ├─local-fs.target
...output omitted...
# list target yang tersedia
user@host:~$ systemctl list-units --type=target --all
Memilih Runtime Target
root@host:~# systemctl isolate multi-user.target
# Mengisolasi target akan menghentikan semua layanan yang tidak dibutuhkan target (dan dependensinya), dan memulai layanan yang dibutuhkan yang belum dimulai.
# Tidak semua target dapat diisolasi. hanya target yang memiliki opsi AllowIsolate=yes yang diatur dalam file unitnya.
user@host:~$ systemctl cat graphical.target
Mengatur Target Default
root@host:~# systemctl get-default
multi-user.target
root@host:~# systemctl set-default graphical.target
Removed '/etc/systemd/system/default.target'.
Created symlink '/etc/systemd/system/default.target' → '/usr/lib/systemd/system/graphical.target'.
root@host:~# systemctl get-default
graphical.target
Gunakan Target Darurat dan Penyelamatan
Dengan menambahkan opsi systemd.unit=rescue.target atau systemd.unit=emergency.target ke baris perintah kernel dari boot loader, sistem akan memasuki shell penyelamatan atau darurat, bukan proses boot standar. Kedua shell ini memerlukan kata sandi root.
Pilih Target yang Berbeda pada Saat Booting
Tambahkan opsi systemd.unit=target.target ke baris perintah kernel dari boot loader. Contoh: systemd.unit=rescue.target.
Power Off dan Reboot
systemctl poweroffataupoweroffsystemctl rebootataureboot
Masalah pada File Sistem
- File Sistem Corrupt
- Ketidaktersediaan perangkat penyimpanan, perangkat UUID, atau mount point
Memeriksa dan memperbaiki File Sistem yang Corrupt
# cek dan memperbaiki masalah pada file sistem XFS
root@host:~# xfs_repair block-device
# cek dan memperbaiki masalah pada file sistem ext4
root@host:~# fsck.ext4 -p block-device
Memperbaiki masalah File Sistem saat Booting
Contoh output proses boot saat sistem masalah pada file sistem dan pindah ke target emergency:
...output omitted...
[* ] A start job is running for /dev/sda2 (27s / 1min 30s)
[ TIME ] Timed out waiting for device /dev/sda2.
[DEPEND] Dependency failed for /mnt/mountfolder
[DEPEND] Dependency failed for Local File Systems.
[DEPEND] Dependency failed for Mark need to relabel after reboot.
...output omitted...
[ OK ] Started Emergency Shell.
[ OK ] Reached target Emergency Mode.
...output omitted...
Give root password for maintenance
(or press Control-D to continue):
Unit systemd gagal memasang perangkat /dev/sda2 dan mengalami batas waktu. Karena perangkat tidak tersedia, sistem membuka shell darurat untuk akses pemeliharaan.
# temukan file sistem mana yang saat ini di mount systemd
root@host:~# mount
...output omitted...
/dev/sda1 on / type xfs (ro,relatime,seclabel,attr2,inode64,noquota)
...output omitted...
# Pasang ulang sementara sistem file root dengan opsi rw (read/write) untuk mengedit file /etc/fstab
root@host:~# mount -o remount,rw /
# coba mount semua file sistem yang ada di /etc/fstab
root@host:~# mount --all
mount: /mnt/mountfolder: mount point does not exist.
# Dalam skenario ini, di mana direktori /mnt/mountfolder tidak ada, buat direktori /mnt/mountfolder sebelum mencoba melakukan mount lagi.
# setelah masalah diperbaiki, jalankan reload
root@host:~# systemctl daemon-reload
# lalu:
root@host:~# mount --all
root@host:~# systemctl reboot
Mengembalikan Akses Superuser
Mereset Pasword root dari Boot Loader
Di RHEL 10 bisa masuk ke mode penyelamatan untuk mengubah kata sandi root yang terlupakan dengan menggunakan salah satu dari dua metode berikut:
- Dengan media penyelamatan (disarankan)
- Tanpa media penyelamatan
Dengan media penyelamatan
Media ini memungkinkan untuk boot RHEL kecil dari media instalasiseperti CD-ROM (untuk mesin fisik) atau file ISO (untuk virtual). File image harus sama dengan sistem, misalnya RHEL 10 dengan RHEL 10. Ikuti lagkah ini:
- reboot sistem
- pilih untuk boot dari image boot.iso
- dari menu GRUB2, pilih Troubleshooting -> Rescue a Red Hat Enterprise Linux System
- pilih
Continuedengan menekan 1 kemudian Enter untuk mount sistem secara normal - setelah muncul shell, ubah direktori
rootke/mnt/sysroot:chroot /mnt/sysroot - Pastikan bahwa semua file yang belum diberi label, termasuk file
/etc/shadowpada tahap ini, diberi label ulang selama proses booting:touch /.autorelabel - ketik
exit2x untuk reboot sistem
Tanpa media penyelamatan
Konfigurasi sistem untuk meniru mode penyelamatan dengan memberikan opsi init /bin/bash ke kernel, lalu pasang ulang sistem file root dalam mode read/write.
- reboot sistem
- interupsi hitung mundur boot-loader dengan klik Esc
- boot dengan argumen init=/bin/bash
- di menu GRUB2, pindah kursor ke entri kernel yg akan di boot
- Ketik E
- pindah kursor ke baris perintah kernel (baris dimulai dengan kata
linux) - hapus opsi
console=apapun dari baris - pindah ke ahir baris dengan kli Ctrl+E
- tambahkan
init=/bin/bashdi akhir setelah spasi - Ctrl+X untuk boot dengan perubahan
- tunggu selesai boot
- Sistem file root (/) dipasang sebagai hanya baca. Mengubah kata sandi root memerlukan sistem file root untuk dipasang sebagai baca/tulis. Pasang ulang sistem file root dalam mode baca/tulis:
mount -o remount,rw / - atur pasword root baru:
passwd - buat file untuk relabel konteks SELinux di boot selanjutnya:
touch /.autorelabel - reboot sistem:
exec /sbin/init
Sistem terus melakukan booting, melakukan pelabelan ulang SELinux secara penuh, dan kemudian melakukan reboot lagi.
Mengelola Keamanan Jaringan
Konsep Arsitektur Firewall Linux
Di Red Hat Enterprise Linux 10, framework nftables adalah inti dari firewall sistem.
Layanan Firewall
Layanan firewalld adalah pengelola firewall dinamis, dan merupakan antarmuka depan yang direkomendasikan untuk framework nftables.
Predefined Zones
firewalld menggunakan Predefined Zones yang dapat di kustomisasi. Secara default, semua zones mengijinkan trafik masuk apapun yang menjadi bagian dari sesi dari sistem yang diinisiasi, juga mengijinkan trafik keluar. Konfigurasi default Firewall Zones: trusted, home, internal, work, public, external, dmz, block, drop.
Predefined Services
Layanan firewalld menyertakan konfigurasi yang telah ditentukan sebelumnya untuk layanan yang umum digunakan, untuk menyederhanakan pengaturan aturan firewall. Sebagai contoh, alih-alih mencari port yang relevan untuk server NFS, gunakan konfigurasi NFS yang sudah ditentukan sebelumnya untuk membuat aturan untuk port dan protokol yang tepat.

Paket
firewalldmenyertakan banyak konfigurasi layanan yang telah ditentukan sebelumnya. Cantumkan layanan tersebut dengan perintahfirewall-cmd --get-services.
Konfigurasi Firewalld Daemon
Ada 2 cara untuk berinteraksi dengan firewalld:
- Antarmuka grafis konsol web
- firewall-cmd CLI
Konfigurasi firewall dengan web konsol
Harus login dan eskalasi privilege. Pilih opsi networking > firewall > edit rules and zones.
Konfigurasi dengan firewall-cmd

# mengatur zona default ke dmz
root@host:~# firewall-cmd --set-default-zone=dmz
# tetapkan trafik dari 192.168.0.0/24 ke zona internal
root@host:~# firewall-cmd --permanent --zone=internal --add-source=192.168.0.0/24
# buka port jaringan untuk mysql di zona internal
root@host:~# firewall-cmd --permanent --zone=internal --add-service=mysql
# contoh lain, tambahkan semua lalu lintas masuk dari alamat IPv4 tunggal 172.25.25.11 ke zona publik
root@host:~# firewall-cmd --permanent --zone=public --add-source=172.25.25.11/32
# update perubahan
root@host:~# firewall-cmd --reload
Mengelola Pelabelan Port SELinux
Jika service berjalan di port yang tidak standar dan tidak memiliki label SELinux yang tepat maka akan diblok.
List Port Labels
root@host:~# grep gopher /etc/services
gopher 70/tcp # Internet Gopher
gopher 70/udp
# lihat label port
root@host:~# semanage port -l | grep ftp
ftp_data_port_t tcp 20
ftp_port_t tcp 21, 989, 990
ftp_port_t udp 989, 990
tftp_port_t udp 69
# cari berdasarkan no port
root@host:~# semanage port -l | grep -w 70
gopher_port_t tcp 70
gopher_port_t udp 70
Kelola Pengikatan Port (label port baru)
root@host:~# semanage port -a -t port_label -p tcp|udp PORTNUMBER
# contoh menambahkan service gopher untuk listen di port 71/TCP
root@host:~# semanage port -a -t gopher_port_t -p tcp 71
# lihat perubahan
root@host:~# semanage port -l -C
SELinux Port Type Proto Port Number
gopher_port_t tcp 71
Halaman manual SELinux khusus layanan diberi nama dengan menggunakan nama layanan ditambah _selinux. Halaman manual ini berisi informasi khusus layanan tentang tipe SELinux, nilai Boolean, dan tipe port, dan tidak diinstal secara default.
# untun list halaman man, instal package
root@host:~# dnf -y install selinux-policy-doc
# cari string _selinux
root@host:~# man -k _selinux
# hapus label port
root@host:~# semanage port -d -t gopher_port_t -p tcp 71
# mengubah label di port yang sudah ada
root@host:~# semanage port -m -t http_port_t -p tcp 71
# verifikasi perubahan
root@host:~# semanage port -l -C
SELinux Port Type Proto Port Number
http_port_t tcp 71
root@host:~# semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 71, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
Mengakses Penyimpanan yang Terhubung ke Jaringan
Mengakses Direktori NFS (Network File System) yang Diekspor
Secara default, RHEL 10 menggunakan NFS versi 4.2, juga support NFSv3 dan NFSv4. Server NFS mengekspor direktori. Klien NFS memasang direktori yang diekspor ke direktori titik pemasangan lokal yang sudah ada.
Untuk Mounting manual / automounting direktori NFS yang dieksport harus instal package nfs-utils.
root@host:~# dnf install nfs-utils
...output omitted...
Is this ok [y/N]: y
...output omitted...
Complete!
Kueri Direktori NFS yang Diekspor
# Mengakses data ekspor yang tersedia pada server NFSv3 berbasis RPC
root@host:~# showmount --exports server
Export list for server
/shares/test1
/shares/test2
# melihat semua direktori yang di ekspor
root@host:~# mount server:/export mountpoint
root@host:~# ls mountpoint
Memasang Direktori NFS yang Diekspor Secara Manual
root@host:~# mkdir mountpoint
root@host:~# mount -t nfs -o rw,sync server:/export mountpoint
Memasang Direktori NFS yang Diekspor Secara Permanen
# edit file /etc/fstab, tambahkan:
...output omitted...
server:/export mountpoint nfs rw 0 0
# mounting
root@host:~# mount mountpoint
Melepaskan Direktori NFS yang Diekspor
root@host:~# umount mountpoint
# Daftar nama file yang terbuka dan proses yang mencegah pelepasan (unmount) direktori yang diekspor.
root@host:~# lsof mountpoint
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
program 5534 user txt REG 252.4 910704 128 /home/user/program
Pasang Ekspor NFS dengan Automounter
Automounter (autofs) adalah layanan yang secara otomatis memasang sistem file dan ekspor NFS sesuai permintaan, dan secara otomatis melepaskannya ketika sumber daya yang terpasang tidak lagi digunakan.
Konfigurasi Layanan Automounter
root@host:~# dnf install autofs nfs-utils
...output omitted...
Is this ok [y/N]: y
...output omitted...
Complete!
File Map Master
Layanan autofs menggunakan file /etc/auto.master sebagai file konfigurasi peta master default. Gunakan file /etc/autofs.conf untuk mengubah file peta untuk layanan autofs. Gunakan direktori /etc/auto.master.d untuk mengkonfigurasi file peta master.
# file map menggunakan format ini untuk mounting
root@host:~# cat /etc/auto.master.d/demo.autofs
mountpoint map-file
Ganti variabel mountpoint dengan direktori yang akan digunakan sebagai titik pemasangan (mount point). Ganti variabel map-file dengan file yang akan digunakan sebagai file peta (map file). File peta harus dibuat sebelum memulai layanan autofs.
File Map
# file map menggunakan format ini untuk automounting
root@host:~# cat /etc/auto.demo
mountpoint mount-options source-location
# Ganti variabel mountpoint dengan direktori yang akan digunakan sebagai titik pemasangan.
# Ganti variabel mount-options dengan opsi yang akan digunakan untuk memasang automount.
# Ganti variabel source-location dengan lokasi sumber pemasangan.
# Membuat file map langsung
root@host:~# cat /etc/direct.autofs
/- /etc/auto.direct
root@host:~# cat /etc/auto.direct
/mnt/docs -rw,sync hosta:/shares/docs
# Membuat file map tidak langsung
root@host:~# cat /etc/auto.master.d/indirect.autofs
/shares /etc/auto.indirect
root@host:~# cat /etc/auto.indirect
work -rw,sync hosta:/shares/work
# ketika ada subdirektori didalamnya, gunakan wildcard
root@host:~# cat /etc/auto.indirect
* -rw,sync hosta:/shares/&
Mulai Layanan Automounter
root@host:~# systemctl enable --now autofs
Created symlink /etc/systemd/system/multi-user.target.wants/autofs.service → /usr/lib/systemd/system/autofs.service.
Metode Alternatif Automount
Daemon systemd dapat secara otomatis membuat file unit untuk entri dalam file /etc/fstab yang menyertakan opsi x-systemd.automount. Gunakan perintah systemctl daemon-reload untuk memperbarui daemon systemd dengan file konfigurasi baru. Kemudian, gunakan perintah systemctl start unit.automount untuk mengaktifkan konfigurasi automount.
Menginstal Red Hat Enterprise Linux
Media Instalasi
Red Hat menyediakan berbagai bentuk media instalasi yang dapat diunduh dari situs web Portal Pelanggan dengan menggunakan langganan aktif.
- Berkas image biner dalam format ISO 9660
- Berkas citra ISO boot yang lebih kecil yang hanya berisi penginstal Anaconda (perlu jaringan selama instalasi)
- Source code
RHEL mendukung arsitektur berikut:
- AMD and Intel 64-bit architectures (x86-64-v3)
- The 64-bit ARM architecture (ARMv8.0-A)
- IBM Power Systems, Little Endian (POWER9)
- 64-bit IBM Z (z14)
Buat Citra Kustom dengan RHEL Image Builder
Gunakan perintah composer-cli atau antarmuka konsol web Red Hat untuk mengakses image builder RHEL.
Persyaratan Disk dan Memori
Harus memiliki ruang minimal 10 GiB pada partisi tempat RHEL akan diinstal.

Install RHEL Secara Manual
Instal RHEL dengan Menggunakan Antarmuka Grafis
Anaconda berjalan sebagai aplikasi grafis saat memboot sistem dari DVD biner atau dari ISO boot.
Pada layar WELCOME TO RED HAT ENTERPRISE LINUX 10, pilih bahasa, dan klik Continue. Pengguna individu dapat memilih bahasa pilihan setelah instalasi.
Anaconda menampilkan jendela INSTALLATION SUMMARY, antarmuka utama untuk menyesuaikan parameter sebelum memulai instalasi.
Lengkapi item-item sesuai kebutuhan.
Instal RHEL dengan Menggunakan Remote Desktop Protocol (RDP)
Untuk memulai instalasi dalam mode RDP harus memberikan opsi inst.rdp pada baris perintah kernel di tahap boot-loader. Memulai layanan RDP memerlukan otentikasi, yang dapat diberikan dengan menggunakan argumen inst.rdp.username dan inst.rdp.password pada baris perintah.

Memecahkan Masalah Instalasi
Selama instalasi, Anaconda menyediakan dua konsol virtual. Pertama berbasis teks dengan tmux yang dipisahkan menjadi 6 bagian. Akses konsol dengan tombol Ctrl+Alt+F1. Kedua konsol virtual yang ditampilkan secara default. Akses dengan tombol Ctrl+Alt+F6.

Otomatisasi instalasi RHEL dengan Kickstart
Perintah Instalasi
# Tentukan url yang merujuk media instalasi yang di host di remote HTTP/FTP server
url --url="http://classroom.example.com/rhel10.0/x86_64/dvd/"
# Tentukan package tambahan
repo --name="appstream" --baseurl=http://classroom.example.com/rhel10.0/x86_64/dvd/AppStream/
# text
paksa mode instalasi teks
Perangkat dan Perintah Pemartisian
# hapus partisi dari sistem
clearpart --all --drives=vda,vdb
# tentukan ukuran, format, dan nama partisi
part /home --fstype=xfs --label=homes --size=4096 --maxsize=8192 --grow
# autopart
otomatis buat partisi root, swap, dan boot
# cegah anaconda memodifikasi disk
ignoredisk --drives=sdc
# definisikan dimana boot-loader dipasang
bootloader --location=mbr --boot-drive=sda
# buat LVM volume grup dan logical volume
part pv.01 --size=8192
volgroup myvg pv.01
logvol / --vgname=myvg --fstype=xfs --size=2048 --name=rootvol --grow
logvol /var --vgname=myvg --fstype=xfs --size=4096 --name=varvol
# zerombr
Inisialisasi disk yang formatnya tidak dikenali.
Perintah Jaringan
# konfigurasi informasi jaringan
network --device=enp1s0 --bootproto=dhcp
# definisikan konfigurasi firewall
firewall --enabled --service=ssh,http
Lokasi dan Perintah Keamanan
# atur bahasa
lang en_US
# atur tipe keyboard
keyboard --vckeymap=us
# tentukan zona waktu
timezone --utc Europe/Amsterdam
# enable/disable NTP
timesource --ntp-server classroom.example.com
# authselect
setup opsi otentikasi
# definisikan password user root (di RHEL 10 opsional)
rootpw --lock
rootpw --plaintext redhat
rootpw --iscrypted $6$KUnFfrTzO8jv.PiH$YlBbOtXBkWzoMuRfb0.SpbQ....XDR1UuchoMG1
# mode selinux
selinux --enforcing
# modifikasi aturan default layanan berjalan dibawah target systemd
services --disabled=rsyslog --enabled=NetworkManager,firewalld
# buat lokal grup dan user
group --name=admins --gid=10001
user --name=jdoe --gecos="John Doe" --groups=admins
Perintah lainnya
# logging
logging --host=loghost.example.com
# firstboot
kontrol aplikasi mana yang berjalan saat pertama boot
# reboot, poweroff, halt
tentukan aksi setelah instalasi selesai
Contoh File Kickstart
# version=RHEL10
# Installation mode
graphical
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# System timezone
timezone America/New_York --utc
# Network information
network --bootproto=dhcp --device=enp1s0 --ipv6=auto --activate
network --hostname=serverb.lab.example.com
# Use network installation
url --url="http://content.example.com/rhel10.0/x86_64/dvd/"
# Storage commands
zerombr
clearpart --all --initlabel
autopart
ignoredisk --only-use=vda
# Root password
rootpw --iscrypted --allow-ssh $y$j9T$jfY1BtZko.0LZxZLBCGeb7vM$7agy5.gxAgxgk9lGXCak1DPOVb1j7uf8HPb7vWXc46B
user --groups=wheel --name=student --password=$y$j9T$EQF0SpVuDKgpRnc2gmxnUnGV$6BqUu.HhnduZszglv6t1Vy6ptF8GQeQkk8maJXWM/y5 --iscrypted --gecos="student"
%packages
@^minimal-environment
vim-enhanced
-hyperv*
%end
# Configure the kernel crash dumping mechanism
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%post
echo "This system was deployed using Kickstart on $(date)" > /etc/motd
%end
Alur Kerja Instalasi Kickstart
- Buat file Kickstart.
- file Kickstart pada media yang dapat dipindahkan atau server jaringan sehingga penginstal Anaconda dapat mengaksesnya.
- Boot penginstal Anaconda dan arahkan ke file Kickstart.
Membuat File Kickstart
- Menggunakan web Kickstart Generator (https://access.redhat.com/labs/kickstartconfig)
- Buat versi sendiri dengan teks editor
Gunakan
ksvalidatoruntuk cek sintaks file kickstart.ksverdiff -f RHEL9 -t RHEL10untuk menampilkan perbedaan sintax di versi RHEL
Publish File Kickstart
File Kickstart harus tersedia agar penginstal Anaconda dapat mengaksesnya. Daftar berikut menjelaskan beberapa opsi untuk menyimpan file tersebut:
- Server jaringan yang tersedia selama instalasi dengan menggunakan protokol FTP, HTTP, atau NFS.
- Disk USB atau CD-ROM yang dapat dilepas.
- Hard disk lokal pada sistem.
Jalankan Installer dan Arahkan ke File Kickstart
Saat melakukan booting sistem target menggunakan media instalasi, beri tahu penginstal Anaconda di mana letak file Kickstart dengan memberikan parameter inst.ks=LOCATION ke kernel.
Pertimbangkan contoh berikut untuk menentukan lokasi yang benar dari file Kickstart yang telah dipublikasikan:
- inst.ks=http://server/dir/file
- inst.ks=ftp://server/dir/file
- inst.ks=nfs:server:/dir/file
- inst.ks=hd:device:/dir/file
- inst.ks=cdrom:device
Mengelola Container dengan Podman
Gambaran Umum Teknologi Container
Registri Container
Registry image container adalah lokasi penyimpanan yang menampung image container dan artefak terkait untuk aplikasi berbasis container. File /etc/containers/registries.conf adalah file konfigurasi sistem secara keseluruhan. File ini mencantumkan registry container yang tersedia untuk alat-alat seperti Podman, Buildah, dan Skopeo.
Red Hat menyediakan registry berikut:
registry.redhat.io: memerlukan otentikasiregistry.access.redhat.com: tidak memerlukan otentikasiregistry.connect.redhat.com: menyimpan citra program Red Hat Partner Connect
Red Hat Ecosystem Catalog menyediakan pencarian terpusat untuk registri-registri ini di https://catalog.redhat.com. Gunakan Ecosystem Catalog untuk mencari image dan mendapatkan detail teknis tentangnya. Kunjungi https://catalog.redhat.com/search untuk mencari image kontainer.
Container vs VM
VM dan container menggunakan perangkat lunak yang berbeda untuk manajemen dan fungsionalitasnya. Hypervisor, seperti Kernel-based Virtual Machine (KVM), Xen, VMware, dan Hyper-V, adalah aplikasi yang menyediakan fungsionalitas virtualisasi untuk VM. Padanan container dari hypervisor adalah container engine, seperti Podman.
| Virtual Machines | Containers | |
|---|---|---|
| Fungsi tingkat mesin | Hypervisor | Container engine |
| Manajemen | Antarmuka manajemen VM | Container engine atau perangkat lunak orkestrasi |
| Tingkat virtualisasi | Lingkungan yang divirtualisasi sepenuhnya | Hanya bagian-bagian yang relevan |
| Ukuran | Diukur dalam gigabyte | Diukur dalam megabyte |
| Portabilitas | Umumnya hanya hypervisor yang sama | Mesin apa pun yang kompatibel dengan OCI |
Masuk ke Registri Image Container
# contoh percobaan login ke registri registry.redhat.io
user@host:~$ podman login registry.redhat.io
Username: provide_username
Password: provide_password
Login Succeeded!
# beberapa registri container tidak perlu otentikasi, artinya bisa download image tanpa kredensial
Memeriksa Registri Container yang Telah Dikonfigurasi
user@host:~$ podman info
...output omitted...
registries:
my_org_registry.example.com:
Blocked: false
Insecure: true
Location: my_org_registry.example.com
MirrorByDigestOnly: false
Mirrors: null
Prefix: my_org_registry.example.com
PullFromMirror: ""
search:
- registry.access.redhat.com
- registry.redhat.io
- docker.io
- quay.io
...output omitted...
Podman terutama menggunakan dua file untuk menyimpan konfigurasi registri:
- File
/etc/containers/registries.conf(atau direktori drop-in/etc/containers/registries.conf.d). Podman menggunakan fileregistries.confuntuk menyimpan konfigurasi registri. - File
${XDG_RUNTIME_DIR}/containers/auth.json. Podman menyimpan informasi kredensial dalam file${XDG_RUNTIME_DIR}/containers/auth.json, di mana${XDG_RUNTIME_DIR}mengacu pada direktori yang spesifik untuk pengguna saat ini. Kredensial dikodekan dalam format base64.
Menjalankan dan Mengelola Container
Menjalankan Container
# contoh menjalankan container menggunakan image ubi10 dari registri registry.redhat.io
user@host:~$ podman run registry.redhat.io/ubi10 echo 'Hello World!'
Trying to pull registry.redhat.io/ubi10:latest...
...output omitted...
Hello World!
# Untuk menghindari pemblokiran command prompt/jalan di bg, gunakan opsi --detach atau -d
user@host:~$ podman run -d registry.redhat.io/ubi10 sleep infinity
8699...c98b
Menampilkan Container
user@host:~$ podman ps
CONTAINER ID IMAGE COMMAND ... NAMES
8699...1cae registry.redhat.io/ubi10:... sleep infinity ... bold_chebyshev
user@host:~$ podman ps -a
CONTAINER ID ... COMMAND ... STATUS ... NAMES
fad3...00d3 ... echo Hello World! ... Exited (0) 7 minutes ago ... nervous_nobel
8699...1cae ... sleep infinity ... Up 53 seconds ... bold_chebyshev
Merestart Container
user@host:~$ podman restart nginx
1b98a7c275dd
Menghentikan dan Menghapus Container
# container tertentu
user@host:~$ podman stop 1b982aeb75dd
1b982aeb75dd
# semua container
user@host:~$ podman stop --all
4aea81cc0c2a
6b18d10f54ea
77632e81cbc0
# mengirim sinya SIGKILL
user@host:~$ podman kill httpd
httpd
# enghapus container yg sudah berhenti
user@host:~$ podman rm c58cfd4b90df
c58cfd4b90df
# menghapus container yang sedang berjalan
user@host:~$ podman rm c58cfd4b90df --force
c58cfd4b90df
# otomatis hapus container
user@host:~$ podman run --rm registry.redhat.io/ubi10 \
echo 'Hello World!'
Red Hat
Membuka Port Kontainer
user@host:~$ podman run -p 8080:8080 registry.redhat.io/rhel10/httpd-24:latest
...output omitted...
=> sourcing 10-set-mpm.sh ...
=> sourcing 20-copy-config.sh ...
=> sourcing 40-ssl-certs.sh ...
---> Generating SSL key pair for httpd...
[Mon Jun 09 05:30:25.657414 2025] [ssl:warn] [pid 1:tid 1] AH01909: workstation.lab.example.com:8443:0 server certificate does NOT include an ID which matches the server name
...output omitted...
[Mon Jun 09 05:30:25.734309 2025] [core:notice] [pid 1:tid 1] AH00094: Command line: 'httpd -D FOREGROUND'
Ctrl+C
user@host:~$ curl 127.0.0.1:8080
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
...output omitted...
# untuk menghindari pemblokiran terminal (jalan di bg), gunakan mode detach
user@host:~$ podman run -d -p 8080:8080 \
registry.redhat.io/rhel10/httpd-24:latest
b7eb...636a
Bekerja dengan Container Images
Mencari, Mengambil, dan Melist Images
user@host:~$ podman search registry.redhat.io/rhel10
NAME DESCRIPTION
registry.redhat.io/rhel10/buildah rhcc_registry.access...
registry.redhat.io/rhel10/toolbox rhcc_registry.access...
registry.redhat.io/rhel10/net-snmp rhcc_registry.access...
...output omitted...
user@host:~$ podman search registry.redhat.io/ubi
NAME DESCRIPTION
registry.redhat.io/ubi8/ubi Provides the latest release of th...
registry.redhat.io/ubi9/ubi rhcc_registry.access.redhat.com_u...
registry.redhat.io/ubi10/ubi rhcc_registry.access.redhat.com_u...
...output omitted...
user@host:~$ podman pull registry.redhat.io/rhel10/rhel-bootc
...output omitted...
a93f...d5b0
user@host:~$ podman pull registry.redhat.io/rhel10/rhel-bootc:10.0
...output omitted...
a93f...d5b0
user@host:~$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry...rhel10/rhel-bootc 10.0 a93f5ef0baa4 3 weeks ago 1.43 GB
registry...rhel10/rhel-bootc latest a93f5ef0baa4 3 weeks ago 1.43 GB
Memeriksa Images
user@host:~$ podman image inspect rhel-bootc:latest
user@host:~$ podman image inspect rhel-bootc:latest \
--format ""
rhel10/rhel-bootc
user@host:~$ podman image inspect rhel-bootc:latest \
--format ""
2025-05-15 15:00:38.956441305 +0000 UTC
user@host:~$ podman image inspect rhel-bootc:latest \
--format ""
RHEL bootc container
user@host:~$ podman image pull registry.redhat.io/rhel10/rhel-bootc:latest
...output omitted...
a93f...d5b0
user@host:~$ podman image inspect rhel-bootc:latest
Menandai Images (nama baru)
user@host:~$ podman tag c6222576494f fedora:latest
Membuat Image dari Containerfile
user@host:~$ podman image pull registry.redhat.io/ubi10/ubi
...output omitted...
da86...50d1
Library, binary, dan file tambahan
# Use the ubi10 base image
FROM ubi10/ubi
# Install httpd
RUN dnf install -y httpd
# Copy a temporary index.html file to the web server root
COPY index.html /var/www/html/index.html
# Expose port 80 for httpd
EXPOSE 80
# Set the entrypoint to run httpd in the foreground
ENTRYPOINT ["/usr/sbin/httpd", "-DFOREGROUND"]
user@host:~$ podman build -t my-httpd -f Containerfile
user@host:~$ podman image list
REPOSITORY TAG ... SIZE
localhost/my-httpd latest ... 273 MB
...output omitted...
user@host:~$ podman run my-httpd
Membagikan Images Melalui Registry
user@host:~$ podman image push my-httpd registry.redhat.io/my-httpd
Menghapus dan Memangkah Images
user@host:~$ podman rmi 4e138cd2375b
# Menghapus semua gambar dari penyimpanan lokal yang tidak memiliki tag dan tidak dirujuk oleh gambar lain. Gambar-gambar ini juga disebut sebagai gambar yang menggantung (dangling images).
user@host:~$ podman image prune
# untuk menghapus semua, tambahkan opsi --all
Bekerja dengan Red Hat Enterprise Linux berbasis Image
Mode image untuk Red Hat Enterprise Linux 10 adalah pendekatan penyebaran dan manajemen baru yang menggunakan alat asli kontainer untuk membangun, menyebarkan, dan mengelola sistem operasi. Metode ini dapat menyebarkan sistem operasi dari image kontainer yang dapat di-boot (bootc).
Alur Kerja Mode Image
Keuntungan Mode Image
- Keterbatasan infrastruktur yang ada
- Sistem operasi yang tidak dapat diubah
- Definisi sistem yang dikirimkan ke kontrol versi
- Skalabilitas yang lebih baik
- Penyederhanaan pemecahan masalah
Format Containerfile
# Use the ubi10 base image
FROM registry.redhat.io/ubi10
# Install httpd
RUN dnf install -y httpd
# Copy a temporary index.html file to the web server root
COPY index.html /var/www/html/index.html
# Expose port 80 for httpd
EXPOSE 80
# Set the entrypoint to run httpd in the foreground
ENTRYPOINT ["/usr/sbin/httpd", "-DFOREGROUND"]
Contoh Containerfile berikut menginstal dan mengaktifkan paket httpd di atas image rhel-bootc:
# Use the rhel-bootc base image
FROM registry.redhat.io/rhel10/rhel-bootc:latest
# Install and enable httpd
RUN dnf -y install httpd mod_ssl && dnf clean all
RUN systemctl enable httpd && firewall-cmd --add-service=https
# Add httpd related files
ADD ./etc/ /etc
COPY ./index.html /var/www/html/index.html
Membuat Bootable Image Container
user@host:~$ podman build --squash -t \
registry.example.com/user/webserver-bootc:latest .
...output omitted...
user@host:~$ podman push registry.example.com/user/webserver-bootc:latest
...output omitted...
Menguji Bootable Image dalam Mode Aplikasi
user@host:~$ podman run -d -p 8080:80 registry.example.com/user/webserver
9622...6a28
user@host:~$ curl http://localhost:8080
Hello image mode for RHEL!
user@host:~$ podman exec -l ps -ef
UID PID ... TIME CMD
root 1 ... 00:00:00 /sbin/init
root 34 ... 00:00:00 /usr/lib/systemd/systemd-journald
rpc 57 ... 00:00:00 /usr/bin/rpcbind -w -f
dbus 66 ... 00:00:00 /usr/bin/dbus-broker-launch --scope system --audit
root 69 ... 00:00:00 /usr/sbin/NetworkManager --no-daemon
root 75 ... 00:00:00 /usr/lib/systemd/systemd-logind
root 76 ... 00:00:00 /usr/libexec/udisks2/udisksd
root 133 ... 00:00:00 /usr/sbin/gssproxy -D
root 142 ... 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 154 ... 00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
apache 193 ... 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 194 ... 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 196 ... 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 207 ... 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 378 ... 00:00:00 /bin/bash
Mendeploy Bootable Container
Mendeploy Bare-metal dengan Menggunakan Anaconda Kickstart
%packages
@^minimal-environment
vim-enhanced
%end
Untuk menggunakan Kickstart dalam mode image, hapus bagian %packages diatas (sampai %end) dan menggantinya dengan perintah ostreecontainer, untuk menunjukkan registri dan container yang dapat di-boot yang akan di-deploy pada sistem target. Image kontainer harus berasal dari citra dasar rhel-bootc resmi.
ostreecontainer --url=registry.lab.example.com:5000/student/webserver-bootc
Citra bootc RHEL bersifat generik dan tidak menyertakan konfigurasi apa pun seperti akun pengguna default. Untuk membuat akun pengguna dan mengatur kata sandi atau untuk memasukkan kunci publik SSH, Anda dapat menggunakan perintah Kickstart standar. Contoh berikut mengatur kata sandi root dan membuat akun pengguna dengan hak akses administrator:
rootpw --iscrypted $6$KUnFfrTzO8jv.PiH$YlBbOtXBkWzoMuRfb0.SpbQ....XDR1UuchoMG1
user --name=student --groups=wheel --iscrypted --password=$6$JJlPUjtsQ....F2co
Membuat Image Disk untuk Lingkungan Cloud Hybrid
Alat bootc-image-builder tersedia untuk menghasilkan citra disk dari image bootc untuk berbagai platform:
| Image format | Target environment |
|---|---|
| qcow2 | (default) QEMU |
| vmdk | VMware vSphere |
| vhd | Microsoft Virtual PC |
| ami | Amazon Machine Image |
| gcd | Google Compute Engine |
| raw | Unformatted raw disk |
Membuat QCOW2 Disk Image
# buat file config.toml di direktori projek
[[customizations.user]]
name = "user1"
password = "password1"
groups = ["wheel"]
[[customizations.user]]
name = "user2"
password = "password2"
groups = ["wheel"]
Buat direktori output didalam projek. Untuk memulai proses pembuatan, jalankan container bootc-image-builder dengan menggunakan argumen berikut:
user@host:~$ sudo podman run \
--rm \
-it \
--privileged \
--security-opt label=type:unconfined_t \
-v ./config.toml:/config.toml \
-v ./output:/output \
registry.redhat.io/rhel10/bootc-image-builder \
--type qcow2 \
registry.lab.example.com/user/bootc-httpd:latest
...output omitted...
Deploy VM baru di KVM
user@host:~$ sudo cp output/qcow2/disk.qcow2 /var/lib/libvirt/images/
user@host:~$ sudo virt-install \
--name bootc-webserver \
--memory 4096 \
--import --disk /var/lib/libvirt/images/disk.qcow2 \
--graphics none \
--osinfo rhel10.0 \
--noautoconsole \
--noreboot
...output omitted...
user@host:~$ sudo virsh start bootc-webserver
...output omitted...
Mode Image Operasi Day 2
Operasi Day-2 merujuk pada tugas-tugas manajemen berkelanjutan pada suatu sistem setelah sistem tersebut diimplementasikan. Tugas-tugas ini mencakup sebagian besar pekerjaan yang harus dilakukan pada sistem selama masa pakainya.
Setelah membuat dan mendeploy image bootc ke sistem target dapat melakukan operasi Day-2 dengan mengambil pembaruan dan menerapkannya. Operasi ini terdiri dari pembaruan transaksional dari registri container; pembaruan ini berlapis, diinstal di tempat, dan dapat dikembalikan jika perlu.
Memverifikasi Keadaan Sistem Saat Ini
Periksa status sistem saat ini dengan menggunakan perintah bootc status. Perintah ini menampilkan apakah image baru sedang dipersiapkan untuk pembaruan, image yang sedang berjalan di sistem, dan image rollback yang telah diatur, jika ada. Sistem yang baru diinstal tidak menampilkan image yang sedang dipersiapkan atau image rollback.
root@host:~# bootc status
Mengupgrade Sistem
- Edit file Containerfile di direktori proyek image bootc.
- Bangun ulang image container.
- Dorong image container baru ke registry dengan tag nama yang sama.
- Perbarui image pada sistem menggunakan perintah bootc.
- Mulai ulang sistem untuk menerapkan perubahan.
Saat menggunakan mode gambar untuk RHEL, pembaruan otomatis diaktifkan secara default. Layanan systemd bootc-fetch-apply-updates dan file unit timer memeriksa registri kontainer untuk pembaruan secara berkala dan menerapkannya ke sistem.
root@host:~# systemctl status bootc-fetch-apply-updates.timer
# Untuk menonaktifkan pembaruan otomatis secara permanen, nonaktifkan unit pengatur waktu yang memeriksa pembaruan image
root@host:~# systemctl mask bootc-fetch-apply-updates.timer
# manual update dari registri (gunakan opsi --apply untuk reboot otomatis)
root@host:~# bootc upgrade
Analisis File Sistem dalam Mode Image
File Sistem Root
Mode image untuk RHEL secara default menggunakan composefs untuk sistem file root. Composefs adalah sistem file overlay yang memungkinkan sistem file root yang benar-benar hanya baca. Data berasal dari salah satu penyebaran OSTree di direktori /ostree/repo.
root@host:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 9.0G 1.9G 7.2G 21% /sysroot
composefs 8.4M 8.4M 0 100% /
...output admitted...
Direktori /etc dan /var
Direktori sistem /etc dan /var secara default dapat diubah dan tetap ada, dan cara kerjanya berbeda.
Untuk direktori /etc, image bootc melakukan penggabungan 3 arah selama peningkatan versi.
Setiap pohon sistem file yang dideploy dari image bootc memiliki salinan direktori /etc-nya sendiri. Perubahan lokal di direktori /etc dari deploy yang sedang berjalan saat ini dipertahankan dan dideploy ke semua peningkatan di masa mendatang. Di sisi lain, file yang tidak dimodifikasi di direktori /etc akan diperbarui jika citra bootc baru menyediakan versi yang lebih baru dari file yang sama.
Unit ostree-finalize-staged.service menjalankan tugas-tugas ini selama proses pematian, dan membuat entri boot-loader untuk deploy baru.
Direktori /var digunakan bersama oleh berbagai deployment sistem file yang diinstal pada sistem. Direktori ini tidak digabungkan selama peningkatan.
Secara default, isi direktori /var disalin dari image kontainer selama instalasi awal tetapi tidak diperbarui setelahnya. Selama peningkatan selanjutnya, file yang ada tidak diubah atau dihapus, bahkan jika Containerfile menyertakan instruksi eksplisit untuk melakukannya. Saat melakukan rollback menggunakan perintah bootc, isi direktori /var tidak akan di-rollback.
Mengembalikan Sistem ke Versi Sebelumnya
root@host:~# bootc rollback
bootfs is sufficient for calculated new size: 0 bytes
Next boot: rollback deployment