Jika Anda sering bekerja menggunakan Linux Terminal, fitur history pada
shell yang kita gunakan bisa sangat membantu meningkatkan produktifitas kita.
Namun, secara default, fitur shell history seperti bash
atau zsh
memikili keterbatasan. Beberapa diantaranya adalah:
- Tidak menyimpan informasi dari direktori mana perintah yang kita jalankan.
- Tidak adanya informasi apakah perintah tersebut sukses dieksekusi atau tidak.
- Tidak adanya informasi seberapa lama komputer kita membutuhkan waktu untuk menyelesaikan perintah tersebut.
Bagi sebagian besar pengguna Linux, fitur-fitur diatas memang sedikit overkill dan bukan sebuah fitur yang krusial. Dan menyimpan informasi ekstra tersebut sedikit banyak dapat meningkatkan disk I/O dan mempengaruhi performa mesin. Tetapi, bagi sebagian penguna Linux lainnya, fitur tersebut dapat sangat membantu melakukan investigasi ataupun troubleshooting pada sebuah sistem.
Jika informasi-informasi tersebut dapat disimpan secara terpusat dan dapat dilakukan pencarian berdasarkan kata kunci tertentu, tentu akan sangat membantu meringankan tugas para Linux System Administrstrator yang seringkali banyak menggunakan perintah dengan pipeline yang kompleks. Untungnya ada sebuah program yang bernama HiSHtory.
Pengenalan HiSHtory
HiSHtory merupakan program yang menyimpan konteks history terminal dari jam dan tanggal kapan perintah tersebut dieksekusi, lokasi direktori yang aktif saat perintah dijalankan, dan seberapa lama perintah tersebut dieksekusi. Informasi tersebut dapat disimpan secara lokal (per mesin) ataupun terpusat (clint-server architecture).
Dengan kata lain, Anda dapat melakukan pencarian shell pipeline yang kompleks dari server atau mesin lain dengan mudah dari laptop atau salah satu komputer Anda.
Menggunakan HiSHtory secara Terpusat (self-hosted)
Di artikel ini, saya akan menggunakan 2 buah laptop dengan sistem opersai Linux dengan detail sebagai berikut:
- hostname T420 dengan IP
192.168.2.22
akan bertugas sebagai server sekaligus client - hostname P50 sebagai client
Perlu diperhatikan bahwa saya akan mengunakan HiSHtory server versi Docker, sehingga pastikan komputer server sudah terinstall Docker dan dapat berjalan dengan baik.
Mengkonfigurasi HiSHtory Server
- Login ke komputer server dan
clone
repositori ddworken/hishtory dan masuk ke direktori tersebut:
1git clone https://github.com/ddworken/hishtory.git
2cd hishtory
- Edit
backend/server/docker-compose.yml
dan sesuaikan konfigurasi sesuai kebutuhan. Karena saya menggunakan PostgreSQL sebagai database backend-nya, saya mengubahPOSTGRES_PASSWORD
dariTODO_YOUR_POSTGRES_PASSWORD_HERE
keMyStrongPassword
. Karena saya mengubah konfigurasi default password Posgres, saya perlu menyesuaikan juga nilai dari environment variableHISHTORY_POSTGRES_DB
sesuai dengan password yang sudah saya tentukan. Selain itu, karena port 80 pada server sudah saya gunakan untuk proses lain, saya mengubah listen port HiSHtory server di host machine dari port80
ke port45680
. Kurang lebih konfigurasibackend/server/docker-compose.yml
saya sebagai berikut:
1version: "3.8"
2networks:
3 hishtory:
4 driver: bridge
5services:
6 postgres:
7 image: postgres
8 restart: unless-stopped
9 networks:
10 - hishtory
11 environment:
12 POSTGRES_PASSWORD: MyStrongPass
13 POSTGRES_DB: hishtory
14 PGDATA: /var/lib/postgresql/data/pgdata
15 volumes:
16 - postgres-data:/var/lib/postgresql/data
17 healthcheck:
18 test: pg_isready -U postgres
19 interval: 10s
20 timeout: 3s
21 hishtory:
22 depends_on:
23 postgres:
24 condition: service_healthy
25 networks:
26 - hishtory
27 build:
28 context: ../../
29 dockerfile: ./backend/server/Dockerfile
30 restart: unless-stopped
31 deploy:
32 restart_policy:
33 condition: on-failure
34 delay: 3s
35 environment:
36 HISHTORY_POSTGRES_DB: postgresql://postgres:MyStrongPass@postgres:5432/hishtory?sslmode=disable
37 HISHTORY_COMPOSE_TEST: $HISHTORY_COMPOSE_TEST
38 ports:
39 - 45680:8080
40volumes:
41 postgres-data:
- Kemudian build docker image dengan menjalankan perintah:
1docker compose -f backend/server/docker-compose.yml build
- Setelah proses build selesai, coba jalankan HiSHtory server menggunakan perintah:
1docker compose -f backend/server/docker-compose.yml up
Tunggu beberapa saat dan pastikan HiSHtory server berjalan dengan baik. Hal
ini bisa di cek dengan menggunakan perintah docker ps
atau melakukan
pengecekan langsung ke HiSHtory HTTP server: curl -sIL http://127.0.0.1:45680
(ubah dan sesuaikan IP:port dengan konfigurasi milik Anda).
Mengkonfigurasi HiSHtory Client
Satu hal yang penting, karena kita akan menggunakan self-hosted, Anda
perlu menambahkan juga environment variable
HISHTORY_SERVER=http://<ip>:<port>
ke .bashrc
atau .zshrc
Anda
(sesuaikan alamat IP dan port yang digunakan).
Selain itu, secara default, HiSHtory client akan terinstall di ~/.hishtory
.
Namun, supaya $HOME
direktori saya lebih rapi, di artikel kali ini saya akan
menggunakan direktori ~/.config/hishtory
. Hal ini bisa dilakukan dengan
menambahkan HISHTORY_PATH=.config/hishtory
ke .bashrc
atau .zshrc
Anda.
Sehingga kurang lebih .bashrc
atau .zshrc
saya ada tambahan konfigureasi
sebagai berikut:
1export HISHTORY_PATH=.config/hishtory
2# sesuaikan IP dan port di bawah ini dengan environment Anda
3export HISHTORY_SERVER="http://192.168.2.22:45680"
Setelah envoronment variable diatas ditambahkan, reload sesi shell Anda, kemudian download dan jalankan install script yang sudah tersedia:
1curl https://hishtory.dev/install.py | python3 -
Script tersebut akan secara otomatis mengenerate device ID dan secret key Anda serta berbagai konfigurasi dasar lainnya. Simpan secret key yang tampil sehingga dapat Anda gunakan untuk sinkronisasi di komputer lain.
Untuk mengkonfigurasi pada komputer atau server kedua dan seterusnya, ulangi proses diatas di masing-masing komputer atau server. Setelah proses installasi hishtory menggunakan install script terakhir diatas selesai, jalankan perintah berikut:
1hishtory init $YOUR_HISHTORY_SECRET_FROM_FIRST_DEVICE
Ubah $YOUR_HISHTORY_SECRET_FROM_FIRST_DEVICE
dengan secret key dari device
pertama.
Catatan: Secret key juga bisa ditampilan dengan menjalankan perintah
hishtory status
dari device pertama.
Semoga membantu.