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.