Skip to main content

a silhouette of a person's head and shoulders, used as a default avatar

a silhouette of a person's head and shoulders, used as a default avatar

Membuat fitur factory reset

Tidak seperti Android atau Windows yang sudah diatur oleh pabrikan, factory reset di Linux bisa diatur seperti apa kita mau saat kita melakukan factory reset. Kita bisa mengubah konfigurasi atau memasang software yang jika komputer kita kembalikan ke factory reset, konfigurasi atau software tersebut tidak ikut hilang. Seperti pada tulisan minimal/custom install openSUSE, kita mengubah konfigurasi /etc/zypp/zypp.conf dan beberapa opsi repositori sebelum membuat factory reset. Pengaturan yang sudah diubah ini tidak akan kembali ke default jika kita melakukan factory reset.

Di tulisan tersebut juga disebutkan bahwa kita membuat factory reset sebelum memasang Desktop Environment/Window Manager dan Display Manager. Tujuannya supaya jika kita ingin mengganti Desktop Environment dengan yang lain atau dengan Window Manager, kita tidak perlu menghapus paket-paket dari Desktop Environment yang sudah terpasang beserta aplikasi-aplikasi pendukungnya. Cukup melakukan reset, semua yang terpasang akan langsung hilang. Karena jika kita menghapus paket-paket yang sudah terpasang, terutama Desktop Environment, mungkin akan menyisakan dependensi yang tidak ikut terhapus atau konfigurasi-konfigurasi dari Desktop Environment tersebut.

Persiapan

Jika Anda ingin membuat fitur factory reset di openSUSE, disarankan untuk tidak mengaktifkan Snapshot ketika membuat partisi Btrfs saat proses instalasi, karena kita akan membuat konfigurasi di subvolume yang lain. Sehingga nomor Snapshot akan serasi di semua konfigurasi jika membuatnya secara bersamaan, yang akan membuat manajemen Snapshot lebih mudah.

Atur konfigurasi yang diperlukan

Atur konfigurasi yang diperlukan, seperti mengubah beberapa opsi di /etc/zypp/zypp.conf dan opsi repositori seperti yang dilakukan di tulisan minimal/custom install openSUSE supaya kita tidak perlu mengatur lagi opsi-opsi tersebut setelah melakukan factory reset.

Pastikan Snapper terpasang

Di openSUSE, fitur factory reset bisa dibuat dengan menggunakan Snapper yang sudah tersedia di dalam installer. Jika Anda memasang openSUSE dengan cara minimal/custom install, pastikan memilih paket snapper di layar Software Selection and System Tasks. Jika Anda memasang openSUSE dengan cara standar, paket tersebut sudah otomatis ikut terpasang.

Jika saat instalasi Anda tidak memilih untuk memasang Snapper, pasang dari DVD installer. Login sebagai root untuk mempercepat proses. Jika sudah terlanjur masuk sebagai user standar, pindah ke root:

su -

Matikan semua repositori online:

zypper modifyrepo -dt

Aktifkan repositori dari installer:

zypper modifyrepo -el

Masukkan piringan DVD/flashdisk installer, lalu install Snapper:

zypper install snapper

Matikan lagi repositori dari installer:

zypper modifyrepo -dl

Aktifkan kembali repositori repo-oss, repo-non-oss, repo-update dan repo-update-non-oss:

zypper modifyrepo -e repo-oss repo-non-oss repo-update repo-update-non-oss

Matikan snapper-timeline.timer

Service snapper-timeline.timer dimaksudkan untuk membuat Snapshot setiap jam. Kita tidak ingin mempunyai Snapshot sebanyak itu, jadi kita perlu mematikannya sebelum membuat konfigurasi Snapper:

systemctl disable --now snapper-timeline.timer

Pastikan Kernel GA tidak akan terhapus

Periksa jika multiversion.kernels di /etc/zypp/zypp.conf sudah menyertakan oldest sebagai salah satu opsi. Ini juga sudah dibahas di tulisan minimal/custom install openSUSE. Lihat dengan grep:

grep -i 'multiversion.kernels' /etc/zypp/zypp.conf

Jika belum ada opsi oldest seperti ini:

multiversion.kernels = latest,latest-1,running

Tambahkan opsi oldest:

sed -i 's/,running/,running,oldest/' /etc/zypp/zypp.conf

Yang akan membuatnya berubah menjadi seperti ini:

multiversion.kernels = latest,latest-1,running,oldest

Membuat Snapshot

Kita akan membuat konfigurasi Snapper sesuai dengan subvolume yang tersedia, kecuali /tmp dan dua subvolume di dalam direktori /boot.

Lihat daftar subvolume

Setelah semua persiapan selesai kita bisa mulai membuat konfigurasi Snapper berdasarkan daftar subvolume yang dibuat saat instalasi openSUSE.

Lihat daftar Snapshot:

btrfs subvolume list /

Di layar akan muncul respon serupa dengan ini:

ID 256 gen 71 top level 5 path @
ID 258 gen 70 top level 256 path var
ID 259 gen 57 top level 256 path usr/local
ID 260 gen 58 top level 256 path tmp
ID 261 gen 57 top level 256 path srv
ID 262 gen 57 top level 256 path root
ID 263 gen 57 top level 256 path opt
ID 264 gen 57 top level 256 path home
ID 265 gen 57 top level 256 path boot/grub2/x86_64-efi
ID 266 gen 57 top level 256 path boot/grub2/i386-pc

Buat konfigurasi Snapper

Berdasarkan daftar di atas kita buat konfigurasi Snapper untuk @ (root), var, usr/local, srv, root, opt dan home:

snapper -c root create-config /

snapper -c var create-config /var

snapper -c local create-config /usr/local

snapper -c srv create-config /srv

snapper -c su create-config /root

snapper -c opt create-config /opt

snapper -c home create-config /home

Untuk subvolume /root beri nama su karena nama konfigurasi root sudah dibuat sebelumnya.

Jika setiap menjalankan perintah di atas muncul peringatan Failed to set locale. Fix your system. Abaikan saja untuk saat ini.

Lihat hasilnya:

snapper list-configs

Sesuaikan setelan konfigurasi

Untuk melihat setelan konfigurasi Snapper, jalankan:

snapper -c root get-config

Untuk melihat setelan semua konfigurasi:

for config in `. /etc/sysconfig/snapper; echo $SNAPPER_CONFIGS`; do snapper -c $config get-config; done

Sesuaikan konfigurasi yang dibutuhkan:

for config in `. /etc/sysconfig/snapper; echo $SNAPPER_CONFIGS`; do snapper -c $config set-config TIMELINE_CREATE=no TIMELINE_LIMIT_DAILY=7 TIMELINE_LIMIT_HOURLY=6 TIMELINE_LIMIT_MONTHLY=0 TIMELINE_LIMIT_WEEKLY=4 TIMELINE_LIMIT_YEARLY=0; done

TIMELINE_CREATE adalah opsi untuk membuat Snapshot setiap jam. Kita tidak ingin membuat Snapshot setiap jam, jadi opsi ini kita isi dengan no. Opsi TIMELINE_LIMIT adalah untuk membatasi jumlah Snapshot berdasarkan kalender. Anda bisa mengaturnya sesuai kebutuhan.

Buat Snapshot setiap komputer dinyalakan

Untuk mengganti Snapshot timeline yang dibuat setiap jam, kita lebih baik membuat Snapshot yang dibuat setiap kali komputer dinyalakan.

Snapper menyediakan sebuah service dengan nama snapper-boot.service dan snapper-boot.timer, tapi secara default tidak aktif. Kita perlu memodifikasi service ini karena dia hanya membuat Snapshot untuk konfigurasi root saja. Untuk meyakinkan, periksa apakah snapper-boot.timer berjalan:

systemctl status snapper-boot.timer

Jika berjalan, matikan:

systemctl disable snapper-boot.timer

Salin file /usr/lib/systemd/system/snapper-boot.service ke /etc/systemd/system/ untuk dimodifikasi:

cp -av /usr/lib/systemd/system/snapper-boot.service /etc/systemd/system/

Hapus opsi ExecStart untuk diganti yang baru:

sed -i '/ExecStart/d' /etc/systemd/system/snapper-boot.service

Buat ExecStart baru:

echo -e "ExecStart=/bin/bash -c 'for config in \`. /etc/sysconfig/snapper; echo \$SNAPPER_CONFIGS\`; do /usr/bin/snapper -c \$config create -c timeline; done'" >> /etc/systemd/system/snapper-boot.service

Kita akan buat snapper-boot.service berjalan mandiri, tanpa harus dipicu oleh snapper-boot.timer seperti sebelum dimodifikasi. Untuk itu kita perlu menambahkan bagian [Install]:

echo -e "\n[Install]\nWantedBy=multi-user.target" >> /etc/systemd/system/snapper-boot.service

Lihat hasilnya dengan perintah cat:

cat /etc/systemd/system/snapper-boot.service

Hasilnya seperti ini:

[Unit]
Description=Take snapper snapshot of root on boot

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'for config in `. /etc/sysconfig/snapper; echo $SNAPPER_CONFIGS`; do /usr/bin/snapper -c $config create -c timeline; done'

[Install]
WantedBy=multi-user.target

Aktifkan service tersebut:

systemctl enable snapper-boot.service

Periksa jika ada Snapshot yang sudah terlanjur dibuat oleh snapper-timeline.timer:

snapper list -a

Kita berharap hanya ada Snapshot 0 saja. Jika ada Snapshot lain, hapus:

for config in `. /etc/sysconfig/snapper; echo $SNAPPER_CONFIGS`; do snapper -c $config delete --sync 1

Perintah tersebut untuk menghapus Snapshot nomor 1. Jika ada Snapshot lain selain nomor 1, hapus juga dengan mengubah angkanya.

Jalankan ulang (reboot) komputer untuk membuat Snapshot pertama. Kita perlu membuat Snapshot saat komputer booting karena saat itu kita sedang tidak melakukan apa-apa di komputer, sehingga data yang diambil oleh Snapshot akan sempurna. Tidak akan ada yang terambil separuh karena sedang kita modifikasi misalnya.

Buat titik factory reset

Setelah komputer dijalankan ulang, periksa apakah Snapshot berhasil dibuat:

snapper list -a

Jika berhasil, seharusnya ada Snapshot nomor 1 di semua konfigurasi dengan kolom Cleanup berisi timeline. Modifikasi Snapshot tersebut supaya tidak terhapus:

for config in `. /etc/sysconfig/snapper; echo $SNAPPER_CONFIGS`; do snapper -c $config modify -c '' -d 'factory reset' -u 'reset=yes' 1

Periksa hasilnya:

snapper list -a

Jika berhasil, kolom Cleanup berubah menjadi kosong, kolom Description menjadi factory reset dan kolom Userdata menjadi reset=yes.

Selesai. Proses selanjutnya Anda tinggal memasang Desktop Environment/Window Manager dan Display Manager serta aplikasi-aplikasi lainnya untuk digunakan sehari-hari.

Cara melakukan factory reset

Untuk melakukan factory reset, Anda perlu boot ke Kernel pertama (Kernel yang dipasang saat instalasi openSUSE) dengan memilih opsi Advanced options for openSUSE Leap/Tumbleweed pada tampilan Grub2. Setelah opsi tersebut dipilih dengan menekan Enter, akan ada daftar Kernel yang terpasang. Arahkan pada pilihan Kernel paling bawah (tanpa tulisan recovery mode), lalu tekan e pada keyboard untuk mengubah parameternya. Arahkan ke teks bertuliskan linuxefi atau linux, tekan tombol End pada keyboard untuk mengarahkan kursor ke ujung teks. Tambahkan spasi dan angka 3, lalu tekan F10.

Ini akan membawa Anda ke Virtual Console (CLI). Login sebagai root, lalu jalankan:

for config in `. /etc/sysconfig/snapper; echo $SNAPPER_CONFIGS`; do snapper -c $config undochange 1..0; done

Reboot.

Mengembalikan perubahan tanpa factory reset

Service snapper-boot.service yang tadi kita modifikasi akan membuat Snapshot setiap kali komputer dijalankan. Ini berguna ketika kita ingin mengembalikan perubahan tanpa harus melakukan factory reset. Karena jika melakukan factory reset, Anda harus memulai lagi dari awal memasang Desktop Environment/Window Manager dan aplikasi-aplikasi lainnya.

Misalnya jika Anda mengalami error di komputer, cukup reboot dan masuk ke Virtual Console seperti pada proses akan melakukan factory reset di atas. Lalu jalankan snapper undochange ke nomor Snapshot sebelum error terjadi, misalnya:

for config in `. /etc/sysconfig/snapper; echo $SNAPPER_CONFIGS`; do snapper -c $config undochange 1234..0; done

Akan berguna juga jika kita ingin mencoba software, tapi ternyata kita tidak puas dengan software tersebut. Kita bisa meresetnya ke Snapshot sebelum software tersebut dipasang.

Pastikan Snapshot tetap serasi

Pastikan Anda rutin memeriksa nomor Snapshot supaya tetap sama di semua konfigurasi dengan:

snapper list -a

Jika ada salah satu konfigurasi Snapper yang nomor Snapshot-nya tidak sama dengan konfigurasi yang lain, buat Snapshot baru supaya jadi sama:

snapper -c <nama_konfigurasi> create -c timeline

Peringatan!

Karena subvolume /home dimasukkan ke daftar konfigurasi Snapper, jika kita melakukan factory reset, semua data yang ada di sana akan ikut hilang. Jadi disarankan untuk membuat partisi khusus untuk menyimpan data-data penting seperti halnya pengguna Windows biasa menyimpan data di drive D, E, F, dan seterusnya. Biarkan hanya file-file konfigurasi saja yang ada di direktori home atau data-data sementara/tidak penting yang Anda tidak akan menyesal kehilangannya.

Atau Anda bisa melakukan reset dengan mengecualikan konfigurasi home dengan perintah berikut:

for config in `. /etc/sysconfig/snapper; echo $SNAPPER_CONFIGS | sed 's/ home//'`; do snapper -c $config undochange 1..0; done

Dengan resiko konfigurasi-konfigurasi dari software yang direset yang berada di direktori home tidak akan ikut terhapus yang mungkin akan menyebabkan konflik dengan konfigurasi baru dari software yang dipasang kemudian. Seperti jika Anda mengubah Desktop Environment dengan Desktop Environment yang lain.


Tulisan ini bisa dibaca juga di: https://kikisyahadat.github.io/2020/09/03/membuat-fitur-factory-reset.html

a silhouette of a person's head and shoulders, used as a default avatar

Minimal/custom install openSUSE

Minimal/custom install openSUSE bisa dilakukan dengan menggunakan ISO DVD Image atau Network Image. Tapi saya biasanya menggunakan DVD Image, supaya saat proses instalasi tidak harus terhubung ke internet yang membuat proses instalasi lebih cepat. Juga setelah proses instalasi selesai kita bisa langsung memasang software yang dibutuhkan dari DVD Image sehingga tidak pusing harus terhubung ke internet terlebih dahulu.

Pra instalasi

Download ISO

Image (DVD atau Network) openSUSE bisa didapatkan di halaman software.opensuse.org/distributions. Di sana ada pilihan Tumbleweed dan Leap. Jika Anda bingung mau/harus memilih yang mana, saran saya pilih Leap. Jika sudah tiba waktunya, Anda akan beralih ke Tumbleweed dengan sendirinya.

Burn/dump ke DVD disk/flashdisk

Setelah ISO Image didapat, burn ke piringan DVD atau dump ke flashdisk, lalu boot komputer ke perangkat tersebut. Lalu di layar pertama pilih Installation.

Instalasi

Language, Keyboard and License Agreement

Setelah proses boot selesai, layar yang pertama tampil adalah Language, Keyboard and License Agreement. Untuk Language silakan pilih bahasa yang ingin digunakan (untuk tulisan ini saya membiarkan bahasa default Inggris, Anda bisa menyesuaikannya selama proses). Keyboard Layout, umumnya layout yang beredar di Indonesia menggunakan English (US), coba di kolom Keyboard Test jika tidak yakin. Baca License Agreement jika perlu. Lanjutkan dengan klik Next di kanan bawah layar.

Network Settings

Jika saat instalasi komputer tidak terhubung dengan internet (dan saya sarankan untuk tidak terhubung jika menggunakan DVD Image), layar selanjutnya adalah Network Settings. Klik tab Hostname/DNS. Isi kolom Static Hostname dengan hostname yang Anda inginkan. Standarnya adalah localhost, tapi Anda bisa mengubahnya dengan opensuse atau yang lainnya. Klik Next.

System Role

Layar selanjutnya adalah System Role. Pilih Desktop with KDE Plasma, Desktop with GNOME atau Generic Desktop. Kecuali jika Anda akan menggunakannya untuk server. Pilihan ini tidak akan berpengaruh pada hasil instalasi karena di proses selanjutnya semua paket akan di-reset supaya jadi minimal. Memilih salah satu dari System Role hanya supaya bisa masuk ke proses selanjutnya. Klik Next.

Suggested Partitioning

Layar selanjutnya adalah Suggested Partitioning. Anda bisa mengubahnya dengan mengklik Expert Partitioner lalu memilih salah satu dari Start with Current Proposal atau Start with Existing Partitions. Jika sebelumnya Anda sudah menyiapkan partisi untuk instalasi openSUSE, pilih yang kedua. Jika belum Anda bisa mencoba memilih yang pertama. Klik Next.

Expert Partitioner

Layar selanjutnya adalah Expert Partitioner. Klik Hard Disks di panel sebelah kiri, lalu atur susunan partisi di sebelah kanan sesuai kebutuhan melalui pilihan menu Modify dan Partitions di bagian bawah layar. Sebagai gambaran, susunan partisi saya adalah seperti berikut:

  • /dev/sda: SSD 120 GiB, terbaca 111,8 GiB
    • /dev/sda1: 300 MiB, Type: EFI System Partition, Mount Point: /boot/efi
    • /dev/sda2: 111.5 GiB, Type: BtrFS, Mount Point: / (dengan membuat satu subvolume tambahan untuk menyimpan software-software yang tidak dipasang melalui repositori)
  • /dev/sdb: HDD 500 GiB, terbaca 465.8 GiB
    • /dev/sdb1: 465.8 GiB, Type: Ext4, Mount Point: /home/data (karena saya membiarkan /home berada di sebuah subvolume di dalam partisi root, maka semua data dipisah di satu partisi besar ini)

Saya tidak menggunakan partisi Swap karena saya membuat Swap berupa Swapfile dan Zram setelah instalasi selesai.

Perhatikan partisi yang akan diformat. Jika sebelumnya sudah ada sistem operasi lain dan akan jadi multiboot, partisi EFI System Partition jangan diformat. Partisi di mana data tersimpan juga jangan diformat. Jadi yang diformat hanya partisi root (/) saja.

Jika Anda memilih BtrFS untuk root (/), Anda bisa mengaktifkan Snapshot saat pemilihan partisi ini. Tapi saya biasanya tidak mengaktifkan Snapshot di sini melainkan setelah proses instalasi selesai. Alasannya karena saya membuat konfigurasi Snapshot bukan untuk root saja, tapi untuk subvolume lainnya juga. Dengan mengaktifkan Snapshot secara bersamaan setelah proses instalasi selesai, nomor Snapshot akan selalu serasi di semua konfigurasi.

Setelah selesai mengatur partisi klik Accept untuk kembali ke layar Suggested Partitioning. Klik Next.

Clock and Time Zone

Layar selanjutnya adalah Clock and Time Zone. Di pilihan Region pilih Asia dan di pilihan Time Zone pilih Jakarta jika Anda tinggal di wilayah Waktu Indonesia Barat. Untuk wilayah lain silakan sesuaikan. Untuk pilihan Hardware Clock Set to UTC, jika Anda multi/dualboot dengan Windows, jangan centang opsi ini. Jika singleboot atau multi/dualboot dengan Linux yang lain tanpa ada Windows sama sekali, lebih baik opsi ini dicentang. Setelah selesai klik Next.

Local User

Layar selanjutnya adalah Local User. Isi User’s Full Name dengan nama Anda (tidak perlu nama lengkap meskipun yang diminta Full Name). Username diisi dengan huruf kecil tanpa spasi. Password dan Confirm Password diisi dengan kata sandi minimal 8 karakter, dengan campuran huruf kecil, huruf besar, angka dan karakter khusus. Klik Next.

Installation Settings

Layar selanjutnya adalah Installation Settings. Ini adalah layar terakhir sebelum proses instalasi dilakukan. Di sini kita akan membuat instalasi openSUSE jadi minimal/custom sesuai keinginan kita. Jika Anda pernah memasang Arch Linux yang bisa memasang hanya paket-paket yang diingankan saja, openSUSE pun bisa seperti itu.

Boot Loader Settings

Klik teks Booting untuk menyesuaikan pengaturan bootloader di layar Boot Loader Settings, seperti mematikan Secure Boot, memodifikasi Kernel Parameter, menyesuaikan Timeout jadi hanya beberapa detik saja atau menyembunyikan menu Grub. Klik OK untuk kembali ke layar Instalation Settings.

Software Selection and System Tasks

Klik teks Software untuk menuju layar Software Selection and System Tasks. Klik Details… di kiri bawah untuk menampilkan menu di bagian atas layar. Klik menu Dependencies, hilangkan centang pada Install Recommended Packages dengan mengklik pilihan tersebut. Klik menu Options, centang Cleanup when deleting packages dengan mengklik pilihan tersebut. Pada kolom Pattern, hilangkan semua tanda centang di semua pilihan Pattern. Sebagian Pattern hanya bisa dihapus tanda centangnya setelah kita menghapus tanda centang di Pattern yang lain. Jadi pastikan saja semua tanda centang diklik untuk dihapus sampai pilihan paling bawah.

Setelah semua tanda centang Pattern dihapus, klik tab Search. Di sini kita akan memilih dua atau tiga paket saja sesuai dengan pengaturan instalasi Anda. Di kolom pencarian, ketik libinput lalu tekan Enter atau klik Search di sebelah kanan kolom. Centang paket xf86-input-libinput di hasil pencarian yang muncul. Lalu cari paket zypper. Untuk paket ketiga, jika Anda memilih BtrFS saat mengatur partisi dan bermaksud menggunakan fitur Snapshot, cari paket snapper. Setelah memilih xf86-input-libinput, zypper dan snapper Anda bisa membuka tab Installation Summary untuk melihat paket apa saja yang akan dipasang. Paket dengan kotak sempurna adalah paket yang kita pilih secara manual (tiga paket tadi), sementara kotak yang bagian bawahnya berupa titik-titik adalah paket-paket yang secara otomatis ikut dipasang sebagai dependensi. Jumlah paket yang akan dipasang kurang lebih sekitar 330 paket. Klik Accept untuk kembali ke layar Installation Settings. Saat muncul pop up Changed Packages – YaST2, klik Continue.

Set Default Systemd Target

Setelah mengubah Software Selection and System Tasks, Default systemd target akan berubah menjadi Text mode. Klik teks Default systemd target, lalu di layar Set Default Systemd Target ubah kembali menjadi Graphical mode. Tujuannya supaya setelah kita memasang Desktop Environment atau Window Manager, kita bisa langsung masuk ke GUI tanpa harus mengubah lagi default target. Klik OK untuk kembali ke layar Installation Settings.

Ketika kembali ke layar Installation Settings akan ada dua tulisan berwarna merah:

  • The installer is recommending you the default target ‘Text mode’
  • X11 packages have not been selected for installation

Abaikan keduanya.

Network Configuration

Pastikan setelan Network Configuration adalah – Using NetworkManager. Jika bukan, klik switch to NetworkManager. Kecuali jika Anda sudah terbiasa dengan wicked dan ingin menggunakannya.

Setelah semua proses di atas selesai, klik Install untuk memulai proses instalasi. Saat muncul pop up Confirm Installation, klik Install.

Tunggu hingga proses instalasi selesai dan komputer dijalankan ulang (reboot).

Pasca Instalasi

Saat komputer pertama kali dijalankan, Anda akan masuk ke mode CLI. Dan saat login akan muncul peringatan -bash: warning: setlocale: LC_BLABLA: cannot change locale (BLABLA): No such file or directory. Untuk saat ini abaikan saja.

Modifikasi /etc/zypp/zypp.conf

Di layar Software Selection and System Tasks di atas kita mengubah dua opsi, yaitu menghilangkan centang Install Recommended Packages dan mencentang Cleanup when deleting packages. Setelah instalasi selesai dan sebelum memasang paket apa pun, kita perlu menyesuaikan kedua opsi tersebut di /etc/zypp/zypp.conf. Karena jika tidak, saat kita memasang paket atau melakukan update akan banyak paket rekomendasi yang dipasang yang membuat proses di atas menjadi sia-sia.

Hilangkan centang Install Recommended Packages:

su -c "sed -i 's/# solver.onlyRequires = false/solver.onlyRequires = true/' /etc/zypp/zypp.conf"

Centang Cleanup when deleting packages:

su -c "sed -i 's/# solver.cleandepsOnRemove = false/solver.cleandepsOnRemove = true/' /etc/zypp/zypp.conf"

Sebagai tambahan, Anda juga bisa mengubah opsi Allow vendor change supaya saat memasang atau update paket tidak banyak pertanyaan untuk mengganti vendor dari paket yang akan dipasang:

su -c "sed -i 's/# solver.allowVendorChange = false/solver.allowVendorChange = true/' /etc/zypp/zypp.conf"

dan:

su -c "sed -i 's/solver.dupAllowVendorChange = false/# solver.dupAllowVendorChange = true/' /etc/zypp/zypp.conf"

Dan jika Anda ingin membuat fitur factory reset, Anda perlu mempertahankan kernel GA supaya saat di-reset tidak terjadi kernel panic:

su -c "sed -i 's/,running/,running,oldest/' /etc/zypp/zypp.conf"

Hapus paket-paket yang tidak dibutuhkan

Anda sekarang bisa menghapus semua paket patterns yang ikut dipasang saat proses instalasi. Langkah pertama adalah mematikan semua repositori online:

su -c "zypper modifyrepo -dt"

Aktifkan repositori dari installer:

su -c "zypper modifyrepo -el"

Hapus semua paket patterns:

su -c "zypper remove patterns-*"

Periksa jika ada paket unneeded dan orphaned:

zypper packages --unneeded --orphaned

Jika ada, hapus semua:

su -c "zypper remove <nama-paket>"

Setelah selesai, aktifkan kembali repositori oss, non-oss, update dan update-non-oss:

su -c "zypper modifyrepo -e repo-oss repo-non-oss repo-update repo-update-non-oss"

Matikan repositori lokal:

su -c "zypper modifyrepo -dl"

Jika perlu, matikan autorefresh semua repositori. Ketika kita akan memasang atau update paket kita bisa memperbarui repositori secara manual:

su -c "zypper modifyrepo -Fa"

Jika Anda ingin menyimpan semua file .rpm yang diunduh saat memasang paket (semua paket tersebut akan tersimpan di /var/cache/zypp/packages):

su -c "zypper modifyrepo -ka"

Langkah selanjutnya

Proses instalasi sudah selesai, Anda bisa melanjutkan ke proses selanjutnya:

  1. Membuat Snapshot dan fitur Factory Reset.
  2. Memasang Desktop Environment/Window Manager dan Display Manager.
  3. Memasang software aplikasi yang dibutuhkan untuk komputasi harian.
  4. Memasang modul-modul YaST2 yang dibutuhkan.

Penampakan

Setelah membuat Snapshot, fitur Factory Reset, memasang paket plasma5-session, sddm, plasma-nm5, plasma5-pa dan konsole, berikut penampakannya:

openSUSE Leap 15.2 Plasma 5.18

Eksperimen

Silakan Anda lakukan percobaan-percobaan modifikasi dari tulisan ini, seperti mengubah pilihan paket xf86-input-libinput dengan driver input yang lain, mengganti zypper dengan manajer paket lain seperti dnf dan lain-lain.


Tulisan ini juga bisa dibaca di: https://kikisyahadat.github.io/2020/08/23/minimal-custom-install-opensuse.html

a silhouette of a person's head and shoulders, used as a default avatar

Pi Zero sebagai Tukang Periksa (Bot)

Bojongbot - Pi Zero

Saya memasang beberapa cctv berbeda merek, baik yang berjenis ip cam maupun yang analog dengan dvr. Kesemuanya terhubung ke 1 server shinobi video yang pernah saya tulis di artikel sebelumnya. Nah, beberapa perabotan itu tentunya memiliki IP, dan ada beberapa yang suka ngambek, gak hidup. Di-ping juga gak respon. Agak susah kalau tidak mengetahuinya. Kapan hari ada insiden panci presto meledak, namun cctv di area dapur pas heng. Jadi tidak ketahuan prosesnya.

Setelah kemarin ngoprek-ngoprek ARM (lagi setelah sekian lama), saya jadi inget punya beberapa perabotan arm yang tidak kepakai, salah satunya pi zero. Ya sudah itu aja dimanfaatkan jadi mesin bot. Tugasnya cuma kirim ping ke beberapa perangkat yang ada di daftar, jika gak ngasih balikan, ngirim pesan ke telegram via bot telegram.

Kodenya ada di https://github.com/princeofgiri/bojongbot.

Bot beraksi

Ada beberapa yang nanya, kenapa gak pakai ESP32 aja? Jawabannya sebagai berikut:

  1. Saya belum pernah ngoprek ESP32, baru order, belum datang saat tulisan ini dibuat
  2. Memanfaatkan yang sudah ada, jadi tinggal pakai gak perlu beli-beli
  3. Saya sangat familiar dengan linux dan bash, jadi ndak ribet bahasa pemrograman lainnya

Kepinginnya sih nanti botnya jadi tambah pinter, kulkas di rumah sepertinya ada API, bisa diintip nanti-nanti.

a silhouette of a person's head and shoulders, used as a default avatar

LibreOffice 7.0 di Raspberry Pi OS

Setelah kemarin bikin video Armbian dengan LibreOffice 7.0 (https://www.youtube.com/watch?v=1rTrCVgGXfA) ngoprek disela-sela kesibukan masih berlanjut. Kali ini ngidupin layar 7 inch dengan perangkat raspberry pi buat mainan bocah dengan GCompris.

Di Raspberry Pi OS (dulu Raspbian), yang berbasis debian buster. Caranya cukup mudah, pasang flatpak, pasang libreoffice dari flatpak. Beres!

Eh tunggu dulu, belum beres. Karena menu aplikasi libreofficenya belum bisa muncul. Harus digosok dulu. Berikut cara nggosoknya:

  • Edit berkas

/etc/xdg/lxsession/LXDE-pi/desktop.conf

  • Di paling bawah, tambahkan

[Environment_variable] XDG_DATA_DIRS=/var/lib/flatpak/exports/share:/home/pi/.local/share/flatpak/exports/share:/usr/local/share/:/usr/share/raspi-ui-overrides:/usr/share/:/usr/share/gdm/:/var/lib/menu-xdg/

  • Reboot

Udah deh!

LibreOffice 7.0 di Raspberry Pi OS
LibreOffice 7.0 di Raspberry Pi OS

a silhouette of a person's head and shoulders, used as a default avatar

/tmp dengan tmpfs di openSUSE Tumbleweed

Jika Anda memasang openSUSE Tumbleweed dengan versi ISO Snapshot 20200806 secara baku instalasi Anda akan membuat direktori /tmp dengan tmpfs, sedangkan pada versi sebelum Snapshot tersebut /tmp akan berada pada sebuah subvolume Btrfs.

Membuat /tmp dengan tmpfs pada instalasi sebelum 20200806

Jika Anda sudah lama menggunakan openSUSE Tumbleweed (instalasi dilakukan sebelum ISO Snapshot 20200806) dan ingin membuat /tmp berada pada tmpfs seperti pada instalasi baru, Anda tinggal menghapus baris mounting /tmp di /etc/fstab dengan perintah su -c "sed -i '/tmp/d' /etc/fstab", lalu hapus semua file dan folder yang berada di direktori /tmp dengan perintah su -c "rm -rv /tmp/* /tmp/.*", setelah itu jalankan ulang komputer.

Instalasi lama yang sudah menggunakan tmpfs untuk /tmp

Sebelumnya saya pernah membuat tulisan tentang Memindahkan /tmp ke tmpfs. Jika Anda mengikuti tulisan tersebut, segera hapus link /etc/systemd/system/tmp.mount dengan su -c "rm -v /etc/systemd/system/tmp.mount" setelah Anda melakukan update Tumbleweed ke versi 20200806, karena di versi tersebut file /usr/share/systemd/tmp.mount sudah tidak ada. Jadi bisa dipastikan link tersebut akan terputus.

Jangan lupa juga untuk memastikan bahwa di /etc/fstab sudah tidak ada baris mounting /tmp.


Tulisan ini bisa dibaca juga di https://kikisyahadat.github.io/2020/08/08/tmp-dengan-tmpfs-di-opensuse-tumbleweed.html

a silhouette of a person's head and shoulders, used as a default avatar

Webinar Zimbra : Mindset untuk Team IT

Sejak beberapa hari terakhir saya mondar-mandir koordinasi dengan team untuk persiapan webinar mengenai Implementasi Zimbra. Saya kebagian jatah mengisi sesi “Introduction to Excellent” dan screenshot yang saya tampilkan ini adalah salah satu bagian slide yang saya presentasikan tadi siang.

Untuk materi slide lainnya akan coba saya upload secara bertahap dalam kesempatan berikutnya.

Saya memerlukan waktu beberapa hari menyesuaikan materi presentasi agar selaras dengan keseluruhan tema, merapikan screenshot, mengarang note untuk setiap slide yang disampaikan dan melakukan ujicoba presentasi apakah waktunya terlewat atau tidak, apakah ada yang kurang jelas dan apakah ada informasi yang perlu diperbaiki.

Sebelum membangun Excellent, saya bekerja sebagai staff IT di perusahaan. Ada beberapa mindset yang saat itu saya pegang namun setelah sekian waktu, saya melihat bahwa mindset tersebut perlu disesuaikan.

Misalnya yang pertama soal Good Admin is Everything. Ada pemikiran bahwa Admin yang bagus adalah Admin yang bisa segalanya. Timbul kesan, jika pekerjaan diserahkan pada vendor, lantas apa fungsi kita sebagai team IT.

Padahal ukurannya adalah keberhasilan implementasi. Pada result atau hasil akhir. Jika kita memiliki berbagai pengetahuan teknis tapi hasil akhir ternyata tidak berjalan sesuai harapan, tetap saja kita dianggap sebagai team IT yang gagal. Perlu diingat, vendor itu adalah partner, bukan musuh. Akan jauh lebih baik jika kerjasama yang terjalin memberikan dorongan pada kelancaran proses implementasi. Kita sebagai team internal bisa banyak belajar, menambah pengetahuan sekaligus bisa fokus pada aspek monitoring dan supervisi.

Ada kalimat, “Serahkan suatu pekerjaan pada ahlinya, jadi jika hendak melakukan implementasi Zimbra dan merasa ada banyak hal yang harus dilakukan dan khawatir tidak kuat, biar Excellent saja yang melakukannya 🙂 . Nanti prestasi implementasi tetap merupakan prestasi team IT yang mampu menjamin keberhasilan berjalannya pekerjaan, bukan prestasi vendor seperti Excellent.

Yang kedua mengenai Budget. “Jika menggunakan Zimbra Network Edition, berarti harus keluar biaya?” Iya, karena memang ada kebutuhan biaya lisensi.

“Wah kalau keluar biaya, sayang dong, kan pakai open source juga bisa”.

Benar bisa, tapi apakah sesuai dengan kebutuhan perusahaan?

Tidak semua pengeluaran uang itu pemborosan. Investment worth the risk. Jika kita tidak keluar biaya sama sekali tapi data email hilang atau perusahaan terkena penipuan hingga rugi ratusan juta atau miliaran rupiah; tender gagal terkirim karena informasinya terhambat di komunikasi email; itu namanya bukan cerdas melainkan celaka. Siapa yang salah? Ya kita sebagai IT yang merasa uang yang dikeluarkan adalah uang milik pribadi.

Jadi, serba berhemat untuk segala hal tidak selalu benar. Melakukan pengeluaran biaya untuk budget keperluan tertentu juga tidak selalu salah. Yang salah itu jika mengeluarkan uang bukan untuk keperluannya. Jika pengeluaran uang untuk kebaikan perusahaan dan untuk mendukung kelancaran operasional perusahaan, itu justru prestasi, karena bisa mencegah kerugian dan meningkatkan peluang keberhasilan.

Yang terakhir soal mindset, “Perusahaan belum butuh karena atasan atau pimpinan atau user juga belum minta”. Sebagai IT kita seharusnya one step ahead. Satu langkah didepan. Jika perlu 10 langkah didepan. Sebelum pimpinan atau atasan minta, kita sudah melakukan riset. Sudah ada usaha. Jangan seperti paku, saat digetok baru berjalan.

Bisa jadi pimpinan belum minta karena belum tahu atau belum terbayang pentingnya feature tersebut.

Misalnya, “buat apa pakai digital signature?”. Oh itu penting untuk memastikan identitas rekanan yang berkomunikasi dan mencegah pemalsuan identitas.

“Mengapa pakai 2 factor?”, agar email account lebih aman.

“Mengapa pakai delegated admin?”, supaya ada pembagian wewenang yang jelas.

Jika kita mau berusaha memperbaiki diri dan kualitas, nanti ada perbedaan. Ada jarak dari kondisi sebelumnya. Berbeda jika kita statis dan menikmati keamanan semu, nanti baru sadar saat sudah terlambat atau saat pimpinan tahu dari pihak lain.

a silhouette of a person's head and shoulders, used as a default avatar

Membersihkan Snapshot yang tertinggal

Pada dasarnya Snapshot yang dibuat oleh Snapper akan otomatis dihapus oleh snapper-cleanup.service jika sudah waktunya terhapus sesuai dengan konfigurasi yang ada di /etc/snapper/configs (atau dengan perintah su -c "snapper -c root get-config"). Namun adakalanya Snapper gagal menghapus satu atau beberapa Snapshot yang saya sendiri masih belum paham kenapa bisa gagal terhapus.

Jika kita tidak menghapus Snapshot yang gagal terhapus tersebut lama-kelamaan akan membuat ruang penyimpanan (HDD/SSD) semakin terkikis habis karena semakin banyak selisih data yang tersimpan antara Snapshot yang gagal terhapus dengan kondisi terkini.

Mendeteksi Snapshot yang gagal terhapus

Untuk mencaritahu apakah ada Snapshot yang gagal terhapus kita bisa membandingkan Snapshot yang terdata oleh Snapper dengan jumlah Snapshot yang ada di tempat Snapshot itu berada.

Melihat data Snapshot dengan Snapper

Untuk melihat daftar Snapshot yang terdata oleh Snapper, kita bisa menjalankan perintah su -c "snapper list". Atau jika Anda mempunyai lebih dari satu konfigurasi Snapper (seperti saya), tambahkan opsi -a untuk menampilkan daftar Snapshot dari semua konfigurasi, su -c "snapper list -a".

Melihat jumlah Snapshot

Untuk melihat jumlah sebenarnya dari Snapshot kita bisa menggunakan perintah standar Linux, yaitu su -c "ls /.snapshots". Untuk Snapshot yang berada di konfigurasi home (jika Anda punya), jalankan su -c "ls /home/.snapshots" dan seterusnya (bisa dilihat dengan perintah su -c "snapper list-configs").

Perintah ls harus dijalankan dengan akses root karena direktori tersebut hanya bisa dilihat oleh root.

Bandingkan

Bandingkan jumlah Snapshot yang muncul dari perintah snapper dan ls. Jika sama berarti aman. Jika jumlah dari perintah ls lebih banyak, berarti ada Snapshot yang tidak terdata oleh Snapper.

Perhatikan/cari nomor Snapshot yang ada di perintah ls tapi tidak ada di perintah snapper. Snapshot inilah yang seharusnya sudah terhapus.

Menghapus Snapshot

Ada tiga cara untuk menghapus Snapshot yang tidak kita inginkan ini, yaitu:

  1. Cara barbar, dengan perintah rm -rf.
  2. Cara yang cukup bisa diterima, dengan perintah btrfs subvolume delete.
  3. Cara elegan, yaitu dengan mengembalikan Snapshot tersebut ke Snapper untuk kemudian dihapus secara alami.

Backup data dan siapkan rescue system

Sebelum menjalankan proses penghapusan sebaiknya backup semua data penting ke partisi lain atau ke penyimpanan eksternal untuk mengantisipasi kerusakan sistem, terutama jika Anda memilih cara pertama dalam menghapus Snapshot.

Siapkan juga installer di thumb drive/flashdisk atau DVD untuk persiapan install ulang jika Anda menggunakan cara pertama, atau persiapan fsck (btrfs check) filesystem jika Anda menggunakan cara kedua. Cara kedua bisa dikategorikan aman, hanya saja menghapus Snapshot dengan cara ini kadang membuat metadata menjadi tidak klop yang membuat Btrfs menjadi read-only sebagai proteksi menghindari kehilangan data. Memperbaiki filesystem yang read-only juga bisa dilakukan dengan live system sebagai alternatif jika Anda sudah tidak memiliki ISO installer.

Cara pertama, rm -rf

  1. Cari tahu subvolid dari Snapshot yang akan dihapus dengan perintah su -c "btrfs subvol list /" | grep <nomor_snapshot>. Ganti <nomor_snapshot> dengan nomor Snapshot yang akan dihapus. Perintah ini akan menampilkan keluaran: ID <subvolid> gen <dan_seterusnya>.
  2. Kaitkan/mount subvolume di mana Snapshot yang akan dihapus berada ke sebuah direktori (biasanya /mnt) dengan perintah su -c "mount -o subvolid=<subvolid_dari_perintah_1> /dev/sdXY /mnt", di mana sdXY adalah partisi tempat Snapshot berada, misal /dev/sda2.
  3. Cari tahu lokasi Snapshot yang akan dihapus yang berada di /mnt dengan perintah su -c "btrfs subvol list /mnt" | grep <nomor_snapshot>. Ganti <nomor_snapshot> dengan nomor Snapshot yang akan dihapus.
  4. Hapus Snapshot tersebut dengan perintah su -c "rm -rfv /mnt/<nomor_snapshot>". Ganti <nomor_snapshot> dengan nomor Snapshot yang akan dihapus.
  5. Lepaskan kaitan/unmount subvolume dengan perintah su -c "umount /mnt".

Coba jalankan ulang komputer. Jika berjalan normal (tidak kernel panik atau kehilangan root filesystem) atau tidak menjadi read-only berarti aman dan Anda tidak salah hapus subvolume. Lanjutkan aktivitas Anda.

Cara kedua, btrfs subvol delete

Jalankan langkah 1 hingga 3 dari cara pertama. Lalu:

  • Hapus Snapshot tersebut dengan perintah su -c "btrfs subvol delete /mnt/<nomor_snapshot>/snapshot". Ganti <nomor_snapshot> dengan nomor Snapshot yang akan dihapus.
    Lanjutkan ke langkah 4 dan 5 dari cara pertama.

Coba jalankan ulang komputer. Jika berjalan normal (tidak menjadi read-only) berarti aman. Lanjutkan aktivitas Anda.

Cara ketiga, kembalikan Snapshot ke Snapper

Tidak terdatanya Snapshot oleh Snapper biasanya karena subvolume /.snapshots/<nomor_snaphot>/snapshot masih ada (tidak terhapus), tapi file /.snapshots/<nomor_snapshot>/info.xml hilang atau kosong (tidak ada isinya).

Untuk mengembalikan Snapshot ke Snapper kita harus mengembalikan file info.xml ke kondisi seharusnya. Caranya dengan menyalin file info.xml dari Snapshot yang lebih baru ke Snapshot yang tidak terdata Snapper lalu mengubah isinya supaya sesuai dengan Snapshot tersebut.

Kita umpamakan Snapshot yang tidak terdata adalah nomor 567 dan Snapshot yang lebih baru adalah nomor 1234 (anggap saja Snapshot nomor 568 sampai nomor 1233 sudah terhapus).

  1. Salin file info.xml dari Snapshot 1234 ke Snapshot 567 dengan perintah su -c "cp /.snapshots/1234/info.xml /.snapshots/567/".
  2. Ubah nomor Snapshot di info.xml yang baru saja disalin supaya sesuai dengan Snapshot 567 dengan perintah su -c "sed -i 's/1234/567/' /.snapshots/567/info.xml". Ubah juga tanggalnya jika perlu, tapi ini hanya opsional saja. Jika Anda tidak mengerti dengan yang saya maksud, baca file tersebut dengan perintah su -c "cat /.snapshots/567/info.xml", terdapat informasi tanggal di sana.
  3. Biarkan sistem menghapus Snapshot tersebut secara alami pada waktunya. Jika Anda tidak sabar ingin segera menghapusnya, jalankan service snapper-cleanup dengan perintah su -c "systemctl start snapper-cleanup.service". Atau bisa langsung menggunakan perintah snapper, yaitu su -c "snapper -c root delete 567", bisa juga ditambah opsi --sync supaya ruang penyimpanan segera dikembalikan, su -c "snapper -c root delete --sync 567".

Hapus Snapshot yang berada di konfigurasi lain

Jika Anda punya lebih dari satu konfigurasi Snapper (seperti saya) dan juga ada Snapshot yang gagal terhapus, ulangi cara di atas untuk konfigurasi lain. Yang membedakan hanya lokasi di mana direktori .snapshots berada. Anda bisa memeriksanya dengan perintah su -c "snapper list-configs", di sana ditunjukkan di mana lokasi subvolume berada, tinggal ditambahkan .snapshots di belakangnya. Misal untuk subvolume /home lokasi .snapshots berada di /home/.snapshots, dan seterusnya.


Tulisan ini bisa dibaca juga di https://kikisyahadat.github.io/2020/07/29/membersihkan-snapshot-yang-tertinggal.html

a silhouette of a person's head and shoulders, used as a default avatar

Plugins Gallery untuk Menggantikan Gallery Block WordPress (Images Size)

Saya sebenarnya cukup senang dengan editor Wodpress versi yang baru (Gutenberg), hanya saja ada kesulitan dalam menggunakan block gallery-nya.

Saat menggunakan gallery block bawaan Gutenberg, saat posisi draft tampilan grid gallery block-nya rapi seperti ini :

Namun saat publish, hasilnya jadi berantakan seperti ini :

Saya tahu, ukuran size gambar-nya memang berbeda-beda. Justru karena itu saya kepingin si gallery lebih cerdas, jadi menyesuaikan ukurannya agar lebih enak dilihat. Buktinya saat posisi draft, ukurannya bisa seragam semua kok.

Setelah beberapa lama mencari-cari konfigurasi atau settings yang tepat, browsing ke beberapa literatur tanpa hasil dan mencoba utak-atik coding khawatir tidak standard, akhirnya saya mencoba plugins lain yang fungsinya sejenis.

Akhirnya ketemu plugins Simply Gallery Box atau Simply Lightbox. Plugins ini berfungsi sebagai pengganti gallery block bawaan Gutenberg WordPress. Bisa digunakan persis sama sebagaimana gallery block, namun hasilnya excellent 🙂

Ini contoh draft menggunakan Simply Gallery Box

Dan ini adalah hasil saat publish/view :

Hasilnya konsisten, tampilannya lebih enak dilihat dan dibuat model grid. Selain tampilan grid, Simply Gallery Block juga menyediakan model tampilan Masonry Gallery (penempatan gambar disesuaikan dengan tinggi rendah gambar, menyamakan tinggi gambar tapi menyesuaikan lebar, jadi tidak monoton sama rata seperti grid) dan ada juga model Justified, yang akan menyamakan tinggi gambar namun mempertahankan lebarnya.

Contoh penggunaan gallery ini saya gunakan pada posting “Membangun Rumah Kabin/Rumah Kayu di Kebun Pisang”.

a silhouette of a person's head and shoulders, used as a default avatar

Eskalasi Masalah Email : mailbox unavailable invalid DNS MX or A/AAAA resource record

Beberapa hari yang lalu ada support ticket yang masuk ke Excellent. Pihak klien mengeluh bahwa mereka tidak bisa mengirim email ke pihak rekanan di Jerman dengan pesan error : “550-Requested action not taken: mailbox unavailable, 550 invalid DNS MX or A/AAAA resource record”

Pihak klien berlangganan paket layanan SMTP Relay Excellent. Layanan ini berfungsi sebagai relay server, yang akan meneruskan email dari server klien ke tujuan.

Berdasarkan pesan error tersebut, team Excellent menginformasikan bahwa email di tujuan tidak ada (unavailable) dan pihak klien bisa menginformasikannya pada pihak rekanan.

Pihak klien bersikukuh bahwa email di tujuan ada dan baik-baik saja, karena jika dikirim via Gmail, emailnya bisa diterima. Atas dasar itu, saya membantu team support untuk melakukan investigasi lebih jauh dan meminta izin pada pihak klien untuk melakukan simulasi dan test ke tujuan email yang dimaksud.

MENGECEK MX RECORDS
Langkah pertama yang saya lakukan adalah mencoba mengirimkan email via telnet. Jika menggunakan CLI, favorit saya adalah menggunakan telnet dan menggunakan aplikasi swaks. Untuk tahap awal saya menggunakan telnet karena sifatnya masih diagnosa.

Untuk melakukan telnet, saya harus mengetahui MX records domain tujuan. Nantinya saya akan melakukan telnet ke port 25 pada server yang tercantum dalam list MX records.

Saya bisa menggunakan website DNS check (misalnya https://dnscheck.id) namun karena saya sedang melakukan investigasi via CLI, saya menggunakan perintah CLI : dig.

dig namadomain.de mx

;; ANSWER SECTION:
namadomain.de. 3600 IN MX 10 mx01.namadomainserver.de.
namadomain.de. 3600 IN MX 10 mx00.namadomainserver.de.

Ada 2 MX records yang terdaftar dan masing-masing memiliki priority 10. Asumsi pertama saya adalah, jangan-jangan salah satu server bermasalah yang menjadikan error tersebut intermittent. Misalnya sebagian server berhasil berkomunikasi namun yang lainnya gagal. Sebagai contoh koneksi dari SMTP Relay Excellent gagal terhubung ke salah satu server yang bermasalah, sedangkan Gmail dan lain-lain berhasil terhubung karena koneksinya terhadap server yang tidak bermasalah.

Asumsi tersebut hanya dugaan dan harus diuji dengan mencoba mengirimkan email.

UJICOBA KONEKSI PORT PENERIMAAN EMAIL
Port SMTP ada bermacam-macam, misalnya port 465 untuk koneksi SMTP SSL dan port 587 untuk Submission port TLS. Namun, untuk penerimaan email, default portnya adalah port 25 dan saya bisa menggunakan telnet kemudian bicara dengan bahasa mesin ke server tujuan.

telnet mx00.namadomainserver.de 25

Trying 212.227.xx.xx…
Connected to mx00.namadomainserver.de.
Escape character is ‘^]’.
220 namadomainserver.de (mxeue011) Nemesis ESMTP Service ready

Pesan diatas menunjukkan bahwa port 25 disisi server tujuan terbuka dan server mereka siap menerima koneksi. Hal itu dinamakan dengan HELO. Jadi saya membalas pesan tersebut dengan perintah EHLO. EHLO adalah bahasa prokem dari HELO. Ini salah satu kebiasaan dari para ahli IT yang tidak mau repot-repot mencari istilah, hehehe…

ehlo namadomainserver.de

250-namadomain.de Hello namadomainserver.de
250-8BITMIME
250-SIZE 157286400
250 STARTTLS

Baris diatas adalah pemberitahuan dari server setelah saya “kulonuwun” menjawab helo mereka dengan ehlo. Server memberitahukan bahwa mereka mendukung koneksi 8-bit karakter, dengan maksimum attachment 157286400 (150 MB) dan siap menerima koneksi dengan protokol secure TLS.

Setelah server tujuan menginformasikan hal tersebut, saya bisa mengirimkan email dengan menyebutkan email pengirim, email tujuan, subject dan isi email. Saya mulai dengan menyebutkan email pengirim :

mail from:namauser@perusahaan-indo.com

550-Requested action not taken: mailbox unavailable
550 invalid DNS MX or A/AAAA resource record

Ternyata jawabannya langsung error, sama dengan pesan error yang disampaikan pihak klien.

Karena penasaran, saya coba sekali lagi dan hasilnya sama.

Berarti server mx00.namadomainserver.de gagal dihubungi. Saya mencoba ke server kedua, yaitu mx01.namadomainserver.de, ternyata hasilnya sama.

Kesimpulan pertama : Server tujuan memiliki konfigurasi yang sama dan keduanya sama-sama menghasilkan pesan error. Setelah ini, apa yang akan dilakukan? Premis atau asumsi kedua saya adalah, ada masalah dengan si pengirim. Jadi saya melanjutkan investigasi, kali ini menggunakan alamat email saya sebagai pengirim.

UJICOBA PENGIRIMAN EMAIL MENGGUNAKAN DOMAIN LAIN

Untuk keperluan ini, saya menggunakan perintah telnet yang sama.

telnet mx00.namadomainserver.de 25

Trying 212.227.xx.xx…
Connected to mx00.namadomainserver.de.
Escape character is ‘^]’.
220 namadomainserver.de (mxeue010) Nemesis ESMTP Service ready
ehlo namadomainserver.de
250-namadomainserver.de Hello namadomainserver.de
250-8BITMIME
250-SIZE 157286400
250 STARTTLS

mail from:hosokawa.fujitaka@excellent.co.id

250 Requested mail action okay, completed

Berhasil. Ternyata menggunakan domain excellent.co.id berhasil lolos dari pengecekan server tujuan. Ada kemungkinan masalahnya benar disisi domain pengirim.

Untuk memastikannya, saya mencoba koneksi ke MX server kedua :

telnet mx01.namadomainserver.de 25

Trying 217.72.xx.xx…
Connected to mx01.namadomainserver.de.
Escape character is ‘^]’.
220 namadomainserver.de (mxeue110) Nemesis ESMTP Service ready
ehlo namadomainserver.de
250-namadomainserver.de Hello namadomainserver.de
250-8BITMIME
250-SIZE 157286400
250 STARTTLS

mail from:vavai@excellent.co.id
250 Requested mail action okay, completed

Hasilnya sukses kembali. Dari hal diatas, bisa disimpulkan kesimpulan awal sebagai berikut :

  1. Server tujuan valid dan tidak ada issue. Hal ini karena kedua server mereka memberikan respon yang sama
  2. Problem terjadi pada domain pengirim : namaperusahaan-indo.com karena jika mengirim email menggunakan domain excellent.co.id (atau domain lain yang normal) tidak ada kendala
  3. Jika merujuk pesan error : 550-Requested action not taken: mailbox unavailable 550 invalid DNS MX or A/AAAA resource record pesan ini kemungkinan besar bukan berarti alamat email tujuan tidak ada sesuai asumsi semula, melainkan adanya mekanisme pengecekan sender domain (biasanya sebagai bagian dari proteksi anti spam) dan domain namaperusahaan-indo.com gagal memenuhi kriteria ini, sedangkan domain excellent.co.id berhasil memenuhi kriteria

PENGECEKAN INTEGRITAS DNS
Berdasarkan hasil analisa point 3, saya melanjutkan investigasi dengan mencoba mengecek integritas DNS domain namaperusahaan-indo.com melalui alamat https://intodns.com dan menemukan hasil sebagai berikut :

MX A request returns CNAME WARNING: MX records points to a CNAME. CNAMEs are not allowed in MX records, according to RFC974, RFC1034 3.6.2, RFC1912 2.4, and RFC2181 10.3. The problem MX record(s) are: mail.namaperusahaan-indo.com points to [‘namaperusahaan-indo.com’] This can cause problems

Hasil pengecekan diatas membuktikan premis tersebut, menunjukkan bahwa ada kesalahan konfigurasi DNS untuk domain namaperusahaan-indo.com dimana seharusnya MX records merujuk pada nama yang ditranslasikan ke A records.

Pada kasus domain klien namaperusahaan-indo.com, MX records benar merujuk pada nama mail.namaperusahaan-indo.com namun nama mail.namaperusahaan-indo.com merujuk pada alias (cname) dari namaperusahaan-indo.com.

Kemungkinan besar hal diatas terjadi karena email namaperusahaan-indo.com menggunakan layanan email hosting bagian dari web hosting dan pihak ISP mengambil cara mudah melakukan setting MX menggunakan alias name. Hal ini tidak sesuai RFC dan kaidah konfigurasi mail server.

Sesuai RFC 1912 : [RFC 1034] in section 3.6.2 says this should not be done, and [RFC
974] explicitly states that MX records shall not point to an alias
defined by a CNAME. This results in unnecessary indirection in
accessing the data, and DNS resolvers and servers need to work more
to get the answer
.

Referensi : https://tools.ietf.org/html/rfc1912

SOLUSI

Sebagai solusi, saya meminta pada pihak klien untuk menghubungi ISP hosting mereka dan menyesuaikan isian records mail.namaperusahaan-indo.com dari awalnya CNAME terhadap namaperusahaan-indo.com menjadi A records

$ nslookup mail.namaperusahaan-indo.com

Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:

mail.namaperusahaan-indo.com canonical name = namaperusahaan-indo.com.

Name: namaperusahaan-indo.com

Address: 203.201.XXX.XXX

Berikut adalah contoh permintaan penggantian records DNS tersebut :

/*Hi NOC ISP

Mohon dapat dilakukan penggantian/penyesuaian records DNS pada domain kami namaperusahaan-indo.com untuk records mail.namaperusahaan-indo.com sebagai berikut :

Sebelumnya

mail.namaperusahaan-indo.com IN CNAME namaperusahaan-indo.com

Menjadi

mail.namaperusahaan-indo.com IN A 203.201.XXX.XXX

Jika sudah dilakukan, harapa menginformasikannya kepada kami agar dapat kami check dan validasi kembali.

*/

Setelah pihak ISP melakukan pengubahan, pihak klien bisa melakukan pengetesan apakah error seperti yang ditunjukkan pada : https://intodns.com masih ada atau sudah diperbaiki.

HASIL AKHIR
Setelah dilakukan penyesuaian MX records oleh pihak ISP hosting klien, saya melakukan testing ulang dengan telnet port 25. Hasilnya, domain klien mendapat pesan sukses :

250 Requested mail action okay, completed

Setelah mengkonfirmasi hasil tersebut di kedua server MX tujuan, saya menginformasikan kembali pada pihak klien mengenai hasil akhir dan meminta mereka melakukan pengiriman email dengan di cc-kan ke alamat team support Excellent.

Hasil pengiriman email dari pihak klien mendapat balasan dari rekanan mereka di Jerman bahwa email berhasil diterima dengan baik.

Mission accomplished.

CATATAN :
Sebagai email services provider (ESP), Excellent menyediakan layanan lengkap terkait email sebagai berikut

  1. Layanan Excellent Managed Services Mail Server : https://www.excellent.co.id/vps
  2. Layanan SMTP Relay : https://www.excellent.co.id/smtp
  3. Layanan Anti Spam dan Anti Virus : https://www.excellent.co.id/asav
  4. Layanan SSL
  5. Layanan lisensi email server berbasis Zimbra
  6. Dan lain-lain