Red Hat System Administration II 10.0

Daftar isi


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 HISTFILE menentukan file mana yang akan digunakan untuk menyimpan riwayat shell, dan secara default adalah file ~/.bash_history.

Variabel HISTFILESIZE menentukan berapa banyak perintah yang akan disimpan dalam file tersebut dari riwayat.

Variabel HISTTIMEFORMAT mendefinisikan 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 \u menampilkan nama pengguna dari pengguna saat ini.
  • String perintah \h menampilkan nama host hingga karakter titik pertama (.).
  • String perintah \W menampilkan nama dasar variabel $PWD, dan variabel $HOME disingkat 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 set digunakan 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. Misalnya c[asd]t, yang cocook adalah cat, cst, cdt.
  • Karakter asterik * mencocokkan 0 atau lebih karakter apapun. Misalnya c.*t, yang cocok ct, cat, culvert, coat, dll.
  • Kurung kurawal {} mencocokkan sesuai jumlah yang didefiniskan didalam kurung kurawal. Misalnya c.{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 +5min
  • teatime tomorrow (teatime adalah 16:00)
  • noon +4 days
  • 5pm 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.
  • 28 adalah nomor tugas unik.
  • Mon May 16 05:13:00 2022 adalah tanggal dan waktu eksekusi untuk tugas terjadwal.
  • a menunjukkan bahwa tugas dijadwalkan dengan antrian default ‘a’.
  • user adalah 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 -u pada 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/10 menandakan bahwa unit timer ini mengaktifkan unit layanan sysstat-collect.service yang sesuai setiap 10 menit.
  • Ketika opsi OnCalendar diatur ke nilai 2025-07-* 12:35,37,39:16, unit pengatur waktu akan mengaktifkan unit layanan yang sesuai pada pukul 12:35:16, 12:37:16, dan 12:39:16, setiap hari di bulan Juli 2025.
  • Ketika opsi OnUnitActiveSec diatur ke nilai 15min, 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. Unit systemd akan 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/system ke 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/system dan /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/seats jika belum ada.
  • Jika direktori sudah ada, tidak melakukan tindakan apa pun.
  • Menetapkan pengguna root dan grup root sebagai pemilik.
  • Menetapkan izin file menjadi 0755 (rwxr-xr-x).
  • Tidak menetapkan usia atau argumen tambahan apa pun.
  • Layanan systemd-tmpfiles tidak 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/student jika belum ada.
  • Jika direktori sudah ada, maka menghapus semua isinya.
  • Menetapkan pengguna student dan grup student sebagai 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/fstablink yang mengarah ke direktori /etc/fstab.
  • Menetapkan pengguna root dan grup root sebagai pemilik.
  • Tidak pernah menghapus baris ini secara otomatis.
  • Tidak mengatur izin atau usia.
  • Menetapkan argumen ke /etc/fstab untuk 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.d menyertakan file crontab 0hourly yang pada satu menit setelah setiap jam, menjalankan perintah run-parts /etc/cron.hourly sebagai pengguna root.
  • direktori /etc/cron.hourly berisi skrip shell bernama 0anacron yang, pada gilirannya, secara kondisional menjalankan perintah /usr/sbin/anacron -s.
  • saat dijalankan, perintah /usr/sbin/anacron -s membaca file konfigurasi /etc/anacrontab dan menjalankan perintah nice run-parts pada file /etc/cron.daily, /etc/cron.weekly, dan /etc/cron.monthly pada 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 mail 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 log
  • localhost: Host yang mengirim pesan log
  • sshd[1433]: Nama program atau proses dan nomor PID yang mengirim pesan log
  • Failed 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 -f mengambil 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 --since dan 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 tzselect untuk 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

Artikel Membahas 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.

file-context

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.

decision-making-flow

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

Selengkapnya

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.

selinux-web-console


Mengarsipkan File

Membuat Arsip dari Baris Perintah

Opsi dari Utilitas Tar

Salah satu tindakan perintah tar berikut diperlukan untuk melakukan operasi tar:

  • -c atau --create: Membuat file arsip.
  • -t atau --list: Menampilkan isi arsip.
  • -x atau --extract: Mengekstrak arsip.

Opsi umum perintah tar berikut sering disertakan:

  • -v atau --verbose: Menampilkan file yang sedang diarsipkan atau diekstrak selama operasi tar.
  • -f atau --file: Setelah opsi ini, tambahkan nama file arsip yang akan dibuat atau dibuka.
  • -p atau --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:

  • -a atau --auto-compress: Gunakan akhiran arsip untuk menentukan algoritma yang akan digunakan.
  • -z atau --gzip: Gunakan algoritma kompresi gzip, yang menghasilkan akhiran .tar.gz.
  • -j atau --bzip2: Gunakan algoritma kompresi bzip2, yang menghasilkan akhiran .tar.bz2.
  • -J atau --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 gzip adalah metode yang lebih awal, tercepat, dan tersedia secara luas di berbagai platform.
  • Kompresi bzip2 menghasilkan arsip yang lebih kecil tetapi kurang tersedia secara luas dibandingkan gzip.
  • Kompresi xz adalah 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 scp menggunakan 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:

  • -A untuk menjaga Daftar Kontrol Akses (ACLs).
  • -X untuk 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

active-performance-profile

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.

pr-ni-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.

mbr-partitioning

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).

gpt-partitioning

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:

  • s untuk sector
  • B untuk 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 dump untuk backup perangkat
  • Kolom terahir menentukan apakah perintah fsck akan 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 --fs untuk 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

lvm-workflow

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 -l mengharapkan jumlah PE sebagai argumen.
  • opsi -L mengharapkan 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"
  1. Nilai index adalah nomor entri untuk daftar menu boot, dimulai dari 0.
  2. Nilai kernel adalah jalur ke kernel Linux yang dimuat oleh GRUB2.
  3. Nilai args adalah daftar argumen kernel yang diteruskan ke kernel Linux.
  4. Nilai root adalah perangkat blok tempat kernel dan citra initramfs berada.
  5. Nilai initrd adalah jalur ke citra sistem file RAM awal, yang merupakan tahap awal boot Linux.
  6. Nilai title adalah nama yang ditampilkan untuk entri boot di menu boot GRUB2.
  7. Nilai id adalah 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 poweroff atau poweroff
  • systemctl reboot atau reboot

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:

  1. reboot sistem
  2. pilih untuk boot dari image boot.iso
  3. dari menu GRUB2, pilih Troubleshooting -> Rescue a Red Hat Enterprise Linux System
  4. pilih Continue dengan menekan 1 kemudian Enter untuk mount sistem secara normal
  5. setelah muncul shell, ubah direktori root ke /mnt/sysroot: chroot /mnt/sysroot
  6. Pastikan bahwa semua file yang belum diberi label, termasuk file /etc/shadow pada tahap ini, diberi label ulang selama proses booting: touch /.autorelabel
  7. ketik exit 2x 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.

  1. reboot sistem
  2. interupsi hitung mundur boot-loader dengan klik Esc
  3. 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/bash di akhir setelah spasi
    • Ctrl+X untuk boot dengan perubahan
  4. tunggu selesai boot
  5. 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 /
  6. atur pasword root baru: passwd
  7. buat file untuk relabel konteks SELinux di boot selanjutnya: touch /.autorelabel
  8. 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.

image

Paket firewalld menyertakan banyak konfigurasi layanan yang telah ditentukan sebelumnya. Cantumkan layanan tersebut dengan perintah firewall-cmd --get-services.

Konfigurasi Firewalld Daemon

Ada 2 cara untuk berinteraksi dengan firewalld:

  1. Antarmuka grafis konsol web
  2. 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

image

# 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.

image

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.

image

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.

image

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

  1. Buat file Kickstart.
  2. file Kickstart pada media yang dapat dipindahkan atau server jaringan sehingga penginstal Anaconda dapat mengaksesnya.
  3. 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 ksvalidator untuk cek sintaks file kickstart. ksverdiff -f RHEL9 -t RHEL10 untuk 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

image

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 otentikasi
  • registry.access.redhat.com: tidak memerlukan otentikasi
  • registry.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 file registries.conf untuk 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).

image

Alur Kerja Mode Image

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

image

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.

image

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

  1. Edit file Containerfile di direktori proyek image bootc.
  2. Bangun ulang image container.
  3. Dorong image container baru ke registry dengan tag nama yang sama.
  4. Perbarui image pada sistem menggunakan perintah bootc.
  5. 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

This site uses Just the Docs, a documentation theme for Jekyll.