mengenal ansible pada linux

Apa bedanya ansible dengan terraform, pada dasarnya kedua tool tersebut tidak dapat kita bandingkan karena beda peruntukan
ansible sendiri saat ini lebih banyak digunakan sebagai sebuah configuration management yang tujuannya untuk provisioning sebuah instance atau banyak instance agar instance tersebut dapat langsung digunakan dan berjalan tanpa kita harus config os dan applikasinya secara manual
sedangkan untuk terraform saya lebih suka menyebutnya sebagai service provisioner and infrastructure orchestrator, seperti membuat instance/vm loadbalaner, firewall, security group dll didalam sebuah provider cloud seperti aws, gcp dll
ok kembali ke judul dan mari kita langsung uji coba, pertama berikut ini gambaran layout file dari script ansible

inventories/
|__production/
   |__hosts
   |__group_vars/
      |__group1.yml
      |__group2/
         |__main.yml
   |__host_vars/
      |__hostname1.yml
      |__hostname2/
         |__main.yml
|__staging/
   |__hosts
   |__group_vars/
      |__group1.yml
      |__group2/
         |__main.yml
   |__host_vars/
      |__stagehost1.yml
      |__stagehost2/
         |__main.yml

webserver.yml
dbserver.yml
fileserver.yml

roles/
|__common/
   |__tasks/
      |__main.yml
   |__handlers/
      |__main.yml
   |__templates/
      |__ntp.conf.j2
   |__files/
      |__bar.txt
      |__foo.sh
   |__vars/
      |__main.yml
|__nginx_webserver/
   |__tasks/
      |__main.yml
   |__handlers/
      |__main.yml
   |__templates/
      |__ntp.conf.j2
   |__files/
      |__bar.txt
      |__foo.sh
   |__vars/
      |__main.yml

pada  ansible kita akan mengenal namanya inventories, playbook, roles, tasks, variable, files, templates, handlers, tags, ansible-vault

inventories:

adalah sekumpulan host-host yang dikategorikan kedalam environment, misal host yang ada di environment production & staging, nah didalam masing-masing environment tersebut juga ada variable masing-masing yaitu group_vars dan host_vars

playbook:

berisi bahasa orchestration ansible yang didalamnya terdapat rule-rule seperti host, role, variable dan task, playbook adalah penyatuan dari sekumpulkan role, host, variable dll yang akan di eksekusi untuk provisioning suatu instance/vm

roles:

berisi sekumpulan task-task yang nantinya digunakan/dipanggil didalam sebuah ansible playbook

tasks:

berisi perintah-perintah untuk provisioning suatu vm, misal task install nginx, task mengganti hostname dll

variable:

sebuah kata yang memiliki arti berbeda dan juga nilai berbeda & bervariasi, tergantung dari seseorang mau memberikan value apa didalam variable tersebut

files:

folder files biasanya berisi file-file yang biasanya nanti akan di transfer ke vm/instance tujuan, misal file-config dll

templates:

folder templates biasanya berisi file-file yang mirip seperti di folder files, cuman bedanya di folder templates setiap file berekstensi .j2 atau disebut jinja template, didalam file j2 ini bisa kita sisipi dengan variable-variable sehingga lebih flexible juga

handlers:

berisi sekumpulan task, bukan task utama tapi task notify yang digunakan untuk melakukan perintah start, restart ataupun stop pada suatu service

tags:

adalah sebuah code/tanda untuk setiap task, misal task1 akan diberi tag web, tags digunakan untuk menjalankan spesifik task yang ada didalam sebuah playbook, jadi tidak semua task dijalankan

ansible-vault:

ansible vault adalah sebuah feature untuk mengencrypt value sebuah variable yang bersifat sensitif, contohnya seperti password, username ataupun hal-hal sensitif lainnyaani

terraform untuk aws pada linux

pertama kita install dulu terraform pada linux os yang kita gunakan, disini saya menggunakan linux ubuntu 16.04

download package binary terraform terbaru di sini https://www.terraform.io/downloads.html

wget https://releases.hashicorp.com/terraform/0.11.7/terraform_0.11.7_linux_amd64.zip

jika sudah di download extract package nya

unzip https://releases.hashicorp.com/terraform/0.11.7/terraform_0.11.7_linux_amd64.zip

letakkan file binary terraform dan pindahkan hasil extract ke foder /usr/local/bin/

mv terraform /usr/local/bin/

pertama kita akan melihat struktur file terraform yang saya gunakan yang ada dalam folder /home/ubuntu/terraform/

├── aws
    ├── README.MD
    ├── modules
    │   └── ec2_instance
    │       ├── main.tf
    │       ├── outputs.tf
    │       └── variables.tf
    └── terraform
        ├── main.tf
        └── provisioning
            ├── ansible_hosts
            ├── ansible-deploy.sh
            └── userdata.txt

pada layout file diatas jelas sekali kalau saya membuat feature ec2 di aws menjadi sebuah module, kenapa harus dibuat module, agar jika kedepannya ada project untuk membuat template terraform lagi saya bisa menggunakan module tersebut, tanpa harus panjang-panjang ngetik lagi, nah berikut dibawah ini isi dari tiap file diatas

module ec2_instance

pada file  aws_ansible/modules/ec2_instance/main.tf

######
# EC2 instance
######
resource "aws_instance" "terraform" {
  count = "${var.instance_count}"

  ami                    = "${var.ami}"
  instance_type          = "${var.instance_type}"
  user_data              = "${file(var.user_data)}"
  subnet_id              = "${var.subnet_id}"
  key_name               = "${var.key_name}"
  monitoring             = "${var.monitoring}"
  vpc_security_group_ids = ["${var.vpc_security_group_ids}"]
  iam_instance_profile   = "${var.iam_instance_profile}"

  associate_public_ip_address = "${var.associate_public_ip_address}"
  private_ip                  = "${var.private_ip}"
  ipv6_address_count          = "${var.ipv6_address_count}"
  ipv6_addresses              = "${var.ipv6_addresses}"

  ebs_optimized          = "${var.ebs_optimized}"
  volume_tags            = "${var.volume_tags}"
  root_block_device      = ["${var.root_block_device}"]
  ebs_block_device       = "${var.ebs_block_device}"
  ephemeral_block_device = "${var.ephemeral_block_device}"

  source_dest_check                    = "${var.source_dest_check}"
  disable_api_termination              = "${var.disable_api_termination}"
  instance_initiated_shutdown_behavior = "${var.instance_initiated_shutdown_behavior}"
  placement_group                      = "${var.placement_group}"
  tenancy                              = "${var.tenancy}"

  tags = "${merge(var.tags, map("Name", format("%s%d", var.tags_name, count.index + var.tags_title_number)), map("Hostname", format("%s%d", var.tags_hostname, count.index + var.tags_title_number)))}"

}

lalu pada file aws_ansible/modules/ec2_instance/outputs.tf

output "id" {
  description = "List of IDs of instances"
  value       = ["${aws_instance.terraform.*.id}"]
}

output "availability_zone" {
  description = "List of availability zones of instances"
  value       = ["${aws_instance.terraform.*.availability_zone}"]
}

// GH issue: https://github.com/terraform-aws-modules/terraform-aws-ec2-instance/issues/8
//output "placement_group" {
//  description = "List of placement groups of instances"
//  value       = ["${element(concat(aws_instance.terraform.*.placement_group, list("")), 0)}"]
//}

output "key_name" {
  description = "List of key names of instances"
  value       = ["${aws_instance.terraform.*.key_name}"]
}

output "public_dns" {
  description = "List of public DNS names assigned to the instances. For EC2-VPC, terraform.is only available if you've enabled DNS hostnames for your VPC"
  value       = ["${aws_instance.terraform.*.public_dns}"]
}

output "public_ip" {
  description = "List of public IP addresses assigned to the instances, if applicable"
  value       = ["${aws_instance.terraform.*.public_ip}"]
}

output "network_interface_id" {
  description = "List of IDs of the network interface of instances"
  value       = ["${aws_instance.terraform.*.network_interface_id}"]
}

output "primary_network_interface_id" {
  description = "List of IDs of the primary network interface of instances"
  value       = ["${aws_instance.terraform.*.primary_network_interface_id}"]
}

output "private_dns" {
  description = "List of private DNS names assigned to the instances. Can only be used inside the Amazon EC2, and only available if you've enabled DNS hostnames for your VPC"
  value       = ["${aws_instance.terraform.*.private_dns}"]
}

output "private_ip" {
  description = "List of private IP addresses assigned to the instances"
  value       = ["${aws_instance.terraform.*.private_ip}"]
}

output "security_groups" {
  description = "List of associated security groups of instances"
  value       = ["${aws_instance.terraform.*.security_groups}"]
}

output "vpc_security_group_ids" {
  description = "List of associated security groups of instances, if running in non-default VPC"
  value       = ["${aws_instance.terraform.*.vpc_security_group_ids}"]
}

output "subnet_id" {
  description = "List of IDs of VPC subnets of instances"
  value       = ["${aws_instance.terraform.*.subnet_id}"]
}

output "tags_name" {
  description = "List of tags of instances"
  value       = ["${aws_instance.terraform.*.tags.Name}"]
}

output "tags_hostname" {
  description = "List of tags of instances"
  value       = ["${aws_instance.terraform.*.tags.Hostname}"]
}

lalu pada file aws_ansible/modules/ec2_instance/variables.tf

variable "tags_name" {
  description = "Name to be used on all resources as prefix"
}

variable "tags_title_number" {
  description = "Numbering for tag Name"
}

variable "tags_hostname" {
  description = "Hostname to be used on all resources as prefix"
}

variable "instance_count" {
  description = "Number of instances to launch"
  default     = 1
}

variable "ami" {
  description = "ID of AMI to use for the instance"
}

variable "placement_group" {
  description = "The Placement Group to start the instance in"
  default     = ""
}

variable "tenancy" {
  description = "The tenancy of the instance (if the instance is running in a VPC). Available values: default, dedicated, host."
  default     = "default"
}

variable "ebs_optimized" {
  description = "If true, the launched EC2 instance will be EBS-optimized"
  default     = false
}

variable "disable_api_termination" {
  description = "If true, enables EC2 Instance Termination Protection"
  default     = false
}

variable "instance_initiated_shutdown_behavior" {
  description = "Shutdown behavior for the instance" # https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#Using_ChangingInstanceInitiatedShutdownBehavior
  default     = ""
}

variable "instance_type" {
  description = "The type of instance to start"
}

variable "key_name" {
  description = "The key name to use for the instance"
  default     = ""
}

variable "monitoring" {
  description = "If true, the launched EC2 instance will have detailed monitoring enabled"
  default     = false
}

variable "vpc_security_group_ids" {
  description = "A list of security group IDs to associate with"
  type        = "list"
}

variable "subnet_id" {
  description = "The VPC Subnet ID to launch in"
}

variable "associate_public_ip_address" {
  description = "If true, the EC2 instance will have associated public IP address"
  default     = false
}

variable "private_ip" {
  description = "Private IP address to associate with the instance in a VPC"
  default     = ""
}

variable "source_dest_check" {
  description = "Controls if traffic is routed to the instance when the destination address does not match the instance. Used for NAT or VPNs."
  default     = true
}

variable "user_data" {
  description = "The user data to provide when launching the instance"
  default     = ""
}

variable "iam_instance_profile" {
  description = "The IAM Instance Profile to launch the instance with. Specified as the name of the Instance Profile."
  default     = ""
}

variable "ipv6_address_count" {
  description = "A number of IPv6 addresses to associate with the primary network interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet."
  default     = 0
}

variable "ipv6_addresses" {
  description = "Specify one or more IPv6 addresses from the range of the subnet to associate with the primary network interface"
  default     = []
}

variable "tags" {
  description = "A mapping of tags to assign to the resource"
  default     = {}
}

variable "volume_tags" {
  description = "A mapping of tags to assign to the devices created by the instance at launch time"
  default     = {}
}

variable "root_block_device" {
  description = "Customize details about the root block device of the instance. See Block Devices below for details"
  default     = {}
}

variable "ebs_block_device" {
  description = "Additional EBS block devices to attach to the instance"
  default     = []
}

variable "ephemeral_block_device" {
  description = "Customize Ephemeral (also known as Instance Store) volumes on the instance"
  default     = []
}

variable "network_interface" {
  description = "Customize network interfaces to be attached at instance boot time"
  default     = []
}

selanjutnya mari kita lihat isi file dari template terraform

#################################################################################
#################################################################################
#################################################################################

provider "aws" {
  region     = "ap-southeast-1"
}

#################################################################################
#################################################################################
#################################################################################

module "ec2_instance" {
  source = "../modules/ec2_instance/"

  instance_count 	= 2
  tags_name		= "webserver"
  tags_hostname		= "webserver"
  tags_title_number	= 1

  ami                         = "ami-81cefcfd"
  instance_type               = "c5.xlarge"
  key_name                    = "terraform"
  monitoring                  = true
  vpc_security_group_ids      = ["sg-3c166256","sg-1c916326"]
  subnet_id                   = "subnet-2736a51e"
  associate_public_ip_address = false
  user_data		      = "./provisioning/userdata.txt"

  root_block_device = {
    volume_size = "100"
  }

  tags = {
    Environtment	= "production"
    CreateBy    	= "terraform"
}
}

#################################################################################
#################################################################################
#################################################################################

resource "null_resource" "terraform" {
  triggers {
    cluster_instance_ids = "${join("\n", module.ec2_instance.id)}"
  }

  provisioner "local-exec" {
    working_dir = "./provisioning"
    command = "echo '[webserver-ubuntu:vars] \nansible_ssh_private_key_file = /home/ubuntu/.ssh/id_rsa \n\n[webserver-ubuntu:children] \nwebserver \n\n[webserver]' > ansible_hosts"
  }

  provisioner "local-exec" {
    working_dir = "./provisioning"
    command = "echo '${join("\n", formatlist("%s ansible_host=%s ansible_port=22 ansible_user=ubuntu", module.ec2_instance.tags_hostname, module.ec2_instance.private_ip))}' >> ansible_hosts"
  }

  provisioner "local-exec" {
    working_dir = "./provisioning"
    command = "echo \"PLEASE WAIT 60s\" && sleep 60 && sh ansible-deploy.sh"
  }

}

#################################################################################
#################################################################################
#################################################################################

output "internal_ip" {
  description = "List of public IP addresses assigned to the instances, if applicable"
  value       = "${module.ec2_instance.private_ip}"
}

output "tags" {
  description = "List of public IP addresses assigned to the instances, if applicable"
  value       = "${module.ec2_instance.tags_name}"
}

selanjutnya masuk ke folder terraform kemudian

cd terraform && terraform init
terraform plan
terraform apply

source : https://github.com/adisaputra10/ansible_aws

Install MongoDB pada Ubuntu

Pertama, perbarui daftar paket untuk memiliki versi terbaru dari daftar repositori:

sudo apt update

install the MongoDB

sudo apt install -y mongodb

Memeriksa Service dan database mongoDB

sudo systemctl status mongodb
Output
● mongodb.service - An object/document-oriented database
   Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-05-26 07:48:04 UTC; 2min 17s ago
     Docs: man:mongod(1)
 Main PID: 2312 (mongod)
    Tasks: 23 (limit: 1153)
   CGroup: /system.slice/mongodb.service
           └─2312 /usr/bin/mongod --unixSocketPrefix=/run/mongodb --config /etc/mongodb.conf

testing mongoDB dengan perintah di bawah ini

mongo --eval 'db.runCommand({ connectionStatus: 1 })'
Output
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
{
        "authInfo" : {
                "authenticatedUsers" : [ ],
                "authenticatedUserRoles" : [ ]
        },
        "ok" : 1
}

 

 

SSH key pada server Centos

Pastikan di linux kita sudah ada openssh-server dan openssh-client, dan disini saya berasumsi kita sudah memiliki plugin tersebut pada server kita, namun untuk saat ini biasanya openssh-server/client sudah terinstall di server secara default bawaan dari os nya, oke jika sudah jalannya step-step dibawah ini pertama dari pc client lalu ke pc server

192.168.1.2 = pc-server
192.168.1.3 = pc-client

PC CLIENT

  • sudo su – <<– command ini untuk menentukan user mana yang nantinya dapat hak ssh-auth akses ke pc server tanpa memasukkan password, dalam contoh kali ini saya menggunakan user root
  • ssh-keygen <<– command ini untuk regenerate key yang nantinya kita gunakan (pada tahap ini tekan enter saja dan kosongkan jika ada pilihan atau pertanyaan, hingga selesai) dan akan menghasilkan 2 file yaitu id_rsa & id_rsa.pub
  • cd ~/.ssh/ <<– hasil regenerate key yang tadi di buat ada di folder ini karena kita menggunakan root, tapi jika menggunakan user lain maka hasilnya ada di folder ( ~/.ssh/ )
  • cat ~/.ssh/id_rsa.pub <<– akan menampilkan isi dari file id_rsa.pub, copy kan isinya ketempat lain dahulu karena nantinya isi dari file ini yang akan kita gunakan.
[root@localhost ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
10:fd:93:2c:7e:c9:ab:0a:a2:0c:54:12:7e:68:18:2d root@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
|.o .. |
|E.+ .. |
|.* o . o . |
|. + .. = |
| . .So o |
|. . + |
|. . . . . |
|o. . . . |
|.. .... |
+-----------------+
[root@localhost ~]# ls ~/.ssh/
authorized_keys id_rsa id_rsa.pub known_hosts known_hosts.old
[root@localhost ~]# cat ~/.ssh/id_rsa.pub
 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAv8k9JEdd4wdGEEEmaojA1V7Jp0XRzEp8r7Ho1+p4C7bnG2cxda5ZIcgedu3RD3+59GK67mT6Y4D84Ki8gCcEvQ1vsjc6cYxD3EXEt2GMBqWG+i8bwBaAX1AWQdbJ40lEbkCvbobGwQJUpYNS1/5Ygb5UIOHIkZxTzHcaheduW/I5S8xkJbkka6ha6hurIBPkyCX0uyoe/pDa8SVSIeWPTcNLP+Zb64X4flqrWsCnGL+z7NdoTI5SLB51REHoFF49oBTlbFJ09JakFJ4TFbwBIWwaHA0s6ytW4RWIED1CrvmTFp00bNkOct51gS1dFv4BQfLm2plD1e1hZykfeMgywQ== root@localhost.localdomain
 
[root@localhost ~]#

PC SERVER
pada pc server pilih user mana yang nantinya akan jadi tujuan untuk login dari pc client, pada case kali ini saya akan memilih root untuk jadi tujuan dari pc client saya, oke ikuti step-step dibawah ini

mkdir -p ~/.ssh
chmod 600 ~/.ssh
cd ~/.ssh/

# buat file tersebut dan isi file tersebut dengan isi dari file id_rsa.pub yang kita generate di pc client tadi, lalu save
vim authorized_keys

# set permision file
chmod 600 ~/.ssh/authorized_keys

# optional *restart sshd server pada server dan client

PC CLIENT

su – <<–login sebagai user root

ssh root@192.168.1.2 <<– lalu ketikkan perintah tersebut dan hasilnya akan seperti dibawah, anda akan langsung masuk tanpa dimintai password

[root@localhost ~]# ssh root@192.168.1.2
Last login: Wed Jan 21 09:22:29 2015 from 192.168.1.3
[root@server ~]$

 

Cluster PostgreSQL

High Avilabilty adalah Kualitas dari sebuah sistem yang dapat menjamin dengan level tinggi dari pelayanan operasional (data informasi kepada pengguna) atas ketepatan waktu yang diberikan.

Sebuah sistem dengan High Availability Web Server yang dapat memberikan suatu kenyamanan bagi pengguna atau penyedia layanan jika sewaktu-waktu terjadi gangguan pada sistem

Mengelola High Avilabilty pada PostgreSQL sangat penting untuk memastikan cluster Anda mempertahankan uptime yang luar biasa dan kinerja operasional yang kuat sehingga data selalu tersedia untuk aplikasi Anda.  Konfigurasi High Avilabilty untuk PostgreSQL menggunakan replikasi streaming,

Ada beberapa teknik atau metode dalam membangun High Avilabilty pada PostgreSQL

1. Patroni by Zalando

Patroni berasal sebuah proyek dari Compose. Patroni adalah open-source yang ditulis dengan Python,  untuk mengelola Hight Avaibililty cluster PostgreSQL.  Patroni dengan cerdas memanfaatkan model konsistensi yang disediakan  oleh Distributed Configuration Store (DCS). Ini adalah solusi yang digunakan solusi DCS lainnya seperti Zookeeper, etcd, Consul dan Kubernetes. Patroni memastikan pengaturan cluster HA PostgreSQL dapat berjalana dengan baik,

2. PostgreSQL Automatic Failover by ClusterLabs

3. Replication Manager for PostgreSQL Clusters by repmgr (2ndQuadrant)

repmgr adalah rangkaian tools open-source yang berguna mengelola replikasi dan failover dalam cluster server PostgreSQL. Ini meningkatkan kemampuan hot-standby bawaan PostgreSQL dengan tools untuk mengatur server standby, memantau replikasi, dan melakukan tugas administratif seperti operasi failover atau switchover manual.

repmgr telah memberikan support  untuk mekanisme replikasi bawaan PostgreSQL sejak diperkenalkan pada 9.0. Seri repmgr saat ini, repmgr 5, mendukung perkembangan terbaru dalam fungsi replikasi yang diperkenalkan dari PostgreSQL 9.3 seperti replikasi cascading, timeline switching, dan backup basis melalui protokol replikasi.

 

 

Install postgreSQL cluster with Pantroni

Patroni adalah  Management Cluster  yang digunakan untuk mengkustomisasi dan mengotomatiskan penerapan dan pemeliharaan cluster PostgreSQL HA (Ketersediaan Tinggi).  konfigurasi terdistribusi menggunakan  etcd

Dalam tutorial ini, kita akan menggunakan instance etcd  dan dua instance Patroni yang digunakan sebagai  multi-host pada postgres

PostgreSQL Cluster dengan Patroni

Install Requirements

  • PostgreSQL (setidaknya 9,5 atau lebih tinggi)
  • ETCD yang berguna untuk menyimpan konfigurasi
  • HAProxy
  • Patroni
  • Server 192.168.1.2 (ETCD, HAProxy)
  • Server 192.168.1.3 (Patroni,PostgresSQL)
  • Server 192.168.1.4 (Patroni,PostgresSQL)

CentOS/RHEL 7 (install pada server 192.168.1.3 dan 192.1681.4)

yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install postgresql11 postgresql11-server
#install epel, for python36-psycopg2 needed by patroni 
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# get patroni package from github
wget https://github.com/cybertec-postgresql/patroni-packaging/releases/download/1.6.0-1/patroni-1.6.0-1.rhel7.x86_64.rpm
rpm -i  patroni-1.6.0-1.rhel7.x86_64.rpm

 


CentOS/RHEL 7 (install pada server 192.168.1.2 )

yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install etcd
yum install haproxy

Ubuntu 19.04/Debian Buster (install pada server 192.168.1.3 dan 192.1681.4)

# Ubuntu 19.04 and Debian Buster already have PostgreSQL 11
apt update
apt install --no-install-recommends postgresql-11 postgresql-client-11
apt install patroni

Ubuntu 19.04/Debian Buster (install pada server 192.168.1.2)

# Ubuntu 19.04 and Debian Buster already have PostgreSQL 11
apt update
apt install -y etcd haproxy

Configuration etcd

#[Member]
#ETCD_CORS=""
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
#ETCD_LISTEN_PEER_URLS="http://localhost:2380"
ETCD_LISTEN_PEER_URLS="http://10.232.1.2:2380" # ip etcd
ETCD_LISTEN_CLIENT_URLS="http://10.232.1.2:2379" #ip etcd
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="default"
#ETCD_SNAPSHOT_COUNT="100000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
#ETCD_QUOTA_BACKEND_BYTES="0"
#ETCD_MAX_REQUEST_BYTES="1572864"
#ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
#
#[Clustering]
#ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.232.1.2:2379" # ip etcd
#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_DISCOVERY_SRV=""
#ETCD_INITIAL_CLUSTER="default=http://localhost:2380"
#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
#ETCD_INITIAL_CLUSTER_STATE="new"
#ETCD_STRICT_RECONFIG_CHECK="true"
#ETCD_ENABLE_V2="true"
#
#[Proxy]
#ETCD_PROXY="off"
#ETCD_PROXY_FAILURE_WAIT="5000"
#ETCD_PROXY_REFRESH_INTERVAL="30000"
#ETCD_PROXY_DIAL_TIMEOUT="1000"
#ETCD_PROXY_WRITE_TIMEOUT="5000"
#ETCD_PROXY_READ_TIMEOUT="0"
#
#[Security]
#ETCD_CERT_FILE=""
#ETCD_KEY_FILE=""
#ETCD_CLIENT_CERT_AUTH="false"
#ETCD_TRUSTED_CA_FILE=""
#ETCD_AUTO_TLS="false"
#ETCD_PEER_CERT_FILE=""
#ETCD_PEER_KEY_FILE=""
#ETCD_PEER_CLIENT_CERT_AUTH="false"
#ETCD_PEER_TRUSTED_CA_FILE=""
#ETCD_PEER_AUTO_TLS="false"
#
#[Logging]
#ETCD_DEBUG="false"
#ETCD_LOG_PACKAGE_LEVELS=""
#ETCD_LOG_OUTPUT="default"
#
#[Unsafe]
#ETCD_FORCE_NEW_CLUSTER="false"
#
#[Version]
#ETCD_VERSION="false"
#ETCD_AUTO_COMPACTION_RETENTION="0"
#
#[Profiling]
#ETCD_ENABLE_PPROF="false"
#ETCD_METRICS="basic"
#
#[Auth]
#ETCD_AUTH_TOKEN="simple"

 

selanjutnya jalankan perintah

systemctl start etcd

Configuration Patroni di server 192.168.1.3 dan 192.168.1.4

sudo -iu postgres
nano patroni.yml

Create patroni.yml

scope: patroni_cluster_1
name: member_1

restapi:
listen: 0.0.0.0:8008
connect_address: 0.0.0.0:8008

etcd:
hosts: 192.168.1.2:2379 #ip server etcd
protocol: http

bootstrap:
dcs:
ttl: 30
loop_wait: 10
retry_timeout : 10
maximum_lag_on_failover: 1048576
postgresql:
use_pg_rewind: true
use_slots: true
parameters:
wal_keep_segments: 100

initdb:
- encoding: UTF8
- data-checksums

pg_hba:
- host replication replicator 0.0.0.0/0 md5
- host all all 0.0.0.0/0 md5

postgresql:
listen: 0.0.0.0:5432
connect_address: 0.0.0.0:5432
data_dir: /var/lib/postgresql/patroni_cluster_1/member_1/data
bin_dir: /usr/lib/postgresql/11//bin
authentication:
replication:
username: replicator
password: test
superuser:
username: postgres
password: test

selanjutnya buat service patroni dengan file configuration seperti di bawah ini

nano /etc/systemd/system/patroni.service

patroni.service

[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target

[Service]
Type=simple

User=postgres
Group=postgres

ExecStart=/bin/patroni /var/lib/pgsql/patroni.yml > patroni.log 2>&1 &

KillMode=process

TimeoutSec=30

Restart=no

[Install]
WantedBy=multi-user.targ

untuk mengecek patroni jalankan perintah

patronictl -d etcd://10.232.1.2:2379 list patroni_cluster

configurasi haproxy

sudo tee /etc/haproxy/haproxy.cfg << EOF
global
maxconn 100

defaults
log global
mode tcp
retries 2
timeout client 30m
timeout connect 4s
timeout server 30m
timeout check 5s

listen stats
mode http
bind *:7000
stats enable
stats uri /

listen postgres
bind *:5000
option httpchk
http-check expect status 200
default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
server postgresql_192.168.1.3_5432 192.168.1.3:5432 maxconn 100 check port 8008
server postgresql_192.168.1.4_5432 192.168.1.4:5432 maxconn 100 check port 8008
EOF
systemctl restart haproxy

 

Source:

https://github.com/adisaputra10/patroni/

PERJALANAN MENCARI KEBENARAN

PERJALANAN MENCARI KEBENARAN

Bismillaahirrahmaanirrahiim…
Saya bukan ustadz. Saya hanya seorang “truth seeker” yang suka menulis. Semoga Allah meluruskan niat saya menulis hanya karena Allah, dan bukan karena yang lain. Tulisan ini pun request dari seseorang (yang dekat) yang bertanya pada saya mengenai temannya, yang memiliki pertanyaan unik mengenai Al-Qur’an. Tentang mengapa ayat Al-Qur’an sering kali sulit dimengerti?

Mengapa ayat-ayat nya seperti meloncat-loncat dan tidak tersusun secara sistematis?
Bagaimana cara meraih maknanya dengan baik sehingga bisa diamalkan dalam kehidupan kita?
Apakah ada pengaruhnya jika kita bisa berbahasa arab dalam mempelajari Al -Quran?
Bukankah mampu berbahasa Arab pun belum menjamin seseorang bisa menjangkau makna Qur’an?

Mendengar pertanyan-pertanyaan ini seperti dejavu. Teringat pertanyaan-pertanyaan saya sendiri beberapa tahun yang lalu, yang bahkan lebih liar dari ini. Tapi Alhamdulillah… Justru pertanyaan-pertanyaan seperti itulah, yang jika kita mencari jawabannya dengan tulus dan murni untuk mencari kebenaran (bukan kesombongan), kemudian kita menemukan jawabannya, akan membuat iman kita kokoh dan tak tergoyahkan.

Tulisan ini mungkin tidak bisa menjawab semua pertanyaan di atas. Saya hanya sharing pengalaman saya sendiri, yang mungkin bisa diambil manfaatnya dan dipakai untuk memotivasi. Motivasi untuk terus mencari jawaban, menggunakan segala potensi yang kita miliki, termasuk akal. Dan akal bukanlah logika tanpa batas. Akal adalah logika yang tunduk dan rendah hati.

Motivasi bagi siapapun yang memiliki pertanyaan yang sama, atau bahkan yang sedang mengalami krisis keimanan, atau untuk siapapun yang pada titik tertentu dalam hidupnya mulai bertanya: Mengapa saya ada di sini? Untuk apa sih tujuan hidup ini? Apa yang terjadi setelah saya mati? Dari mana saya tahu saya memiliki keyakinan yang benar?

Well, mari kita mulai.
Alhamdulillah…I was born as a muslim. Yup, orang tua dan keluarga saya juga muslim. (Saya tidak sedang mengomentari istilah agama warisan yang ditulis seorang remaja baru-baru ini, hehe.)

Saya hanya mau menceritakan bahwa saya sangat menyesal karena sangat terlambat menyadari anugrah Allah yang telah menakdirkan saya terlahir di keluarga muslim. Penyesalan yang baru terjadi beberapa tahun ke belakang, mungkin sekitar tahun 2014. Sebelum itu, interest saya terhadap ilmu agama sangat minim, sangat jarang ikut kajian, apalagi baca buku agama. Ibadah pun pas-pasan, shalat subuh sering kesiangan, baca Qur’an jarang-jarang, zakat kadang-kadang, pas ada yang minta bantuan paling enggan, puasa bulan Ramadhan juga datar-datar aja dan lewat begitu aja tanpa ada perubahan. Fokus saya saat itu adalah: uang, bayar utang, menafkahi istri dan anak, membangun rumah tangga, rumah, mobil, pendidikan anak dan sejenisnya. Karena menurut saya pada saat itu, itulah yang bisa mendatangkan kebahagiaan dalam hidup.

Hingga suatu saat ketika utang semakin sedikit, penghasilan makin naik, karir pekerjaan semakin baik (walaupun menuntut waktu lebih banyak dan tanggung jawabnya lebih besar), rumah sudah ada, mobil sudah ada, biaya kesehatan ditanggung, saya mulai suka bertanya sendiri: What’s next? (Selanjutnya apa?).

OK, next-nya mungkin rumah yang lebih bagus, mobil yang lebih bagus, dan sejenisnya. Dan ketika semua itu tercapai, saya mulai ngerasa aneh. Kok kerasa hampa ya? Ngga sebahagia yang dibayangkan sebelumnya. Meanwhile, tanpa disadari tuntutan pekerjaan makin ganas, dan stress mulai melanda. Instead of baca Qur’an, musik-film-game lah yang jadi andelan. Stress memang hilang, tapi sesaat. Besoknya balik ke kantor stress lagi. Sampai akhirnya semua itu mulai berpengaruh ke kesehatan. Mulai sering sakit, daya tahan tubuh drop, sering kena maag, asam lambung, dll. Saya kadang menjadi sedikit delusional, sering membuat lagu sendiri, membuat puisi sendiri, kadang hanyut di alam khayalan dan angan-angan kosong. Rindu akan kedamaian, yang abstrak, yang entah bagaimana mencapainya.

Sampai suatu hari, saya jatuh kepeleset di stasiun dengan posisi jatuh terduduk. Ceritanya panjang sebenernya, singkat cerita saya jadi ngga bisa berdiri, ngga bisa duduk, apalagi jalan, karena setelah diperiksa dokter, ada urat yang kejepit di punggung/pinggang. Ada cairan lumbal disc yang pecah dan menjepit saraf. Saya harus dioperasi, walaupun cuma operasi kecil. Tapi tetep harus dibius total. Saya masih ingat betul, pemandangan terakhir yang saya ingat di ruang operasi, sebelum saya ngga sadar, adalah lampu di atas ruang operasi. Melihat lampu itu dengan syahdu, saya membatin: “Gimana kalau ada yang salah dan saya mati? Inikah akhir perjalanan hidup?”

Alhamdulillah saya masih hidup, dan operasinya berjalan lancar. Beberapa hari kemudian saya sudah bisa pulang ke rumah dan menjalani masa pemulihan. Sudah bisa duduk, berdiri dan berjalan walaupun belum normal. Saya mulai suka bermimpi yang aneh-aneh. Suatu hari saya bermimpi sedang digantung di atas lautan api yang menyala-nyala. Astaghfirullah….mimpinya serasa begitu nyata, sampai pas bangun pun rasanya masih teringat bagaimana panas yang terasa.

Mimpi itu seperti lecutan yang menghantam keras. Setelah itu saya mulai sering membuka Al-Qur’an, dan mulai membaca buku-buku agama. Air mata pun mulai sering menetes. Rasa sesal mulai meresap ke dalam hati.

Mimpi berikutnya tak kalah menakutkan. Ketika terbelalak melihat matahari terbit dari arah barat. Dan seketika itu datang rasa sesal yang begitu nyelekit. Tertutup sudah pintu taubat. Astaghfirullah…

Setelah itu, semangat mempelajari Al-Qur’an semakin menggebu-gebu. Pertanyaan-pertanyaan kepada diri sendiri terus terlontar. Saking banyaknya pertayaan sampai harus dicatat untuk dicari jawabannya kemudian. Seperti terlahir kembali menjadi orang yang baru. Pertanyaan-pertanyaan seperti “Mengapa saya ada di dunia ini?”, “Apa tujuan saya ada di sini?”, ” Apa tujuan hidup ini?”, “Apa yang terjadi setelah kita mati?”, “Bagaimana saya tahu apa yang saya yakini ini benar?”, “Apa sih sebenarnya isi Al-Qur’an?”. Bahkan sampai bertanya, “Apa buktinya ya Qur’an itu benar dari Sang Pencipta, dan bukan buatan manusia?”, dan “Apa buktinya ya Islam itu benar?”.

Berhubung pertanyaan saya agak liar, saya kadang menghindari pertanyaan langsung kepada ustadz. Karena setelah saya sensor pertanyaannya pun, seringkali jawabannya kurang memuaskan. Seringkali malah saya mendapat renspon bahwa pertanyaan saya ini ngga patut, dan bahwa keyakinan itu ya harus yakin aja, bahwa agama itu diyakini dengan hati, bukan dengan akal. Dan seringkali diakhiri dengan kata “Pokoknya begini, dan begitu”. Terpaksa saya iya kan aja, walaupun saya membatin, “Kalau keyakinan itu ya harus yakin aja, orang yang beragama lain juga bisa pake argumen yang sama dong. Terus masa ada multiple kebenaran, padahal antara satu dan yang lain bertentangan? Taklid buta dong jadinya.”

Sehingga saya lebih banyak mencari sendiri melalui membaca buku, artikel, menonton video ceramah, dokumenter, dll. Hingga seorang teman memperkenalkan saya dengan video-video Ust. Nouman Ali Khan, begitu juga teman lain yang memperkenalkan dengan video Dr. Zakir Naik. Walaupun tidak pernah bertemu, mereka terasa begitu dekat di hati. Both of them are my heroes. Isi ceramahnya benar-benar persis dengan apa yang saya butuhkan. Saya sangat beruntung, bahasa Inggris yang sehari-hari digunakan di tempat kerja, ternyata sangat berguna untuk mendengarkan ceramah mereka berdua dalam bahasa aslinya.

Saya sangat terinspirasi dengan Dr Zakir Naik ketika beliau sedang berdebat dengan seorang atheis, kemudian beliau berkata, “So you’re an atheist? Congratulation! You’re half a moeslim. To become a moeslim you need to admit that there is no god, except Allah, Laa ilaaha illallah. You already believe there’s no god, correct? Then my job is to convince you another half: illallah, except Allah.” (Jadi anda ateis? Selamat! Berarti anda setengah muslim. Untuk menjadi seorang muslim, anda harus mengakui bahwa tidak ada tuhan, selain Allah, Laa ilaaha illallah. Anda sudah percaya bahwa tidak ada tuhan, benar? Jadi saya tinggal meyakinkan anda setengah bagian berikutnya: illallah, kecuali Allah).

Beliau juga menjelaskan bahwa kunci untuk menjawab pertanyaan: “Apa bukti Islam lah yang benar?”, adalah Al-Qur’an. Bahwa selain menjadi petunjuk dan pedoman hidup, Al-Qur’an juga merupakan sebuah mukjizat. Hard proof bahwa itu memang berasal dari Tuhan Yang Esa, Allah. Beliau menguraikan bagaimana ayat-ayat Qur’an mendahului science sebanyak 1400 tahun. Sesuatu yang baru-baru ini saja ditemukan science, ternyata sudah disebutkan Al-Qur’an 1400 tahun yang lalu, di tengah gurun pasir tandus, melalui Nabi yang Ummi (tidak bisa baca tulis). Siapa kah yang memberi tahu Nabi Sallallahu’alaihi wasallam, jika bukan Allah The Creator.

“Di bumi itu terdapat tanda-tanda kekuasaan Allah bagi orang yang yakin, dan juga pada dirimu sendiri. Maka apakah kamu tidak memperhatikan?”
(Adz Dzaariyaat: 20-21)

Beberapa di antaranya:
1. Teori Big Bang dan asal usul alam semesta yang baru di era science modern ditemukan (1980an), yang menyatakan bahwa alam semesta saat ini terus mengembang. Dan dulu merupakan suatu kesatuan massa besar namun kemudian terjadi ledakan besar sangat dahsyat (big bang) yang terus mengembangkan alam semesta. Hal ini ternyata sudah diisyaratkan dalam Surat Al-Anbiyaa: 30
“Dan apakah orang-orang yang kafir tidak mengetahui bahwasanya langit dan bumi itu keduanya dahulu adalah suatu yang padu, kemudian Kami pisahkan antara keduanya. Dan dari air Kami jadikan segala sesuatu yang hidup. Maka mengapakah mereka tiada juga beriman?”

2. Bulan bercahaya dengan memantulkan sinar matahari. Hal ini juga baru diketahui science modern. Dulu orang menyangka bulan memancarkan cahayanya sendiri. Dan ayat Qur’an sudah menyebutkannya jauh lebih dulu dalam Surat Al-Furqaan: 61 dan juga ayat-ayat lain. Al Qur’an selalu konsisten menyebutkan matahari dengan “Syams” atau “Siraaj (obor)” atau “wahhaaj (lampu menyala)”. Dan cahaya bulan dengan kata ” muniir” yang artinya tidak mengelurkan cahayanya sendiri.

3. Besi yang sekarang ada di bumi, tidak terbentuk saat bumi terbentuk pertama kali. Penemuan astronomi modern mengungkap bahwa logam besi yang ada di bumi ternyata berasal dari benda-benda luar angkasa. Logam berat di alam semesta dibuat dan dihasilkan di dalam inti bintang-bintang raksasa. Hal ini lagi-lagi sudah disebutkan dalam Surat Al Hadid: 25. Pada ayat ini, kata “Anzalnaa” berarti “Kami turunkan”.

4. Gunung sebagai pasak yang memiliki root/akar yang menhujam ke lapisan dalam bumi sebagai penstabil kerak bumi. Hal ini baru diketahui ilmu geologi modern. Dan Al Qur’an sudah menyebutkan ini dalam Surat Thaha: 6-7, Surat Al-Anbiyaa:31, dan Surat Lukman:10.

5. Gunung yang bergerak perlahan (beberapa cm per tahun). Juga baru diketahui ilmu geologi modern. Dan Al Qur’an sudah menyebutkan ini dalam Surat An Naml:88.

6. Fenomena pembatas antara dua perairan. Seperti di daerah Selat Giblatar, yaitu pertemuan antara Laut Mediterania dan Laut Atlantik. Diungkapkan oleh ahli Oseanografi Francis J. Cousteau. Dan ini sudah disebutkan dalam Surat Ar-Rahman: 19-20 dan An-Naml: 61.

7. Penciptaan manusia di dalam kandungan ibu. Dr Keith Moor, seorang ahli embriologi dibuat takjub dengan begitu akuratnya Al-Qur’an mendeskripsikan perkembangan embrio dalam Surat Al-Alaq:1-2, Surat Al-Mu’minuun:12-14, Surat Al Qiyamah:38 dan Surat Al Hajj: 5.

Dan masih banyak lagi dan tidak bisa saya sebutkan satu per satu di sini karena begitu banyaknya. Subhaanallah…

Sedikit demi sedikit pertanyaan-pertanyaan itu mulai menemukan jawabannya masing-masing. Di sini saya mulai menyadari betapa pentingnya menguasai bahasa Arab klasik. Karena terjemahan kadang doesn’t even scratch the surface. Terlalu banyak makna yang hilang.

Keyakinan terhadap kebenaran Al-Qur’an semakin terasa mantap. Meskipun masih ada beberapa pertanyaan yang masih belum terjawab. Kitab agama lain pun ada yang mempunyai kandungan science. Apakah itu berarti kitab mereka pun benar? Untuk meyakinkan, berarti ada satu hal lagi yang harus dipastikan, yaitu apakah informasi yang berada di dalam Al Qur’an itu intact atau utuh dan free from corruption? Di sini juga saya pun bertanya-tanya mengapa ayat-ayat Al Qur’an terlihat seperti melompat-lompat dan seperti tidak sistematis?

Di sinilah kajian-kajian Ust Nouman Ali Khan begitu banyak memberikan jawaban yang memuaskan.

Ust Nouman begitu mendalam membahas sisi linguistik Al-Qur’an, yang membuat saya benar-benar terpukau dengan Al-Qur’an. Semangat untuk belajar bahasa Arab klasik terasa makin menggebu-gebu jadinya. Sebagai seseorang yang hobi menulis dan membuat puisi, saya dibuat takjub dengan surat-surat yang incredibly poetic, terutama surat-surat Makkiyah. Walaupun baru mulai belajar bahasa Arab, I can’t help myself ketika mendengarkan ayat-ayat yang begitu puitis, seringkali tak kuasa menahan air mata yang mengalir, karena keindahan bahasanya yang begitu kuat terasa, meskipun didengar oleh telinga saya yang non-arab. Lebih indah dari lagu atau irama mana pun. Lebih dahsyat dari puisi mana pun. Belum lagi jika ayat itu berhubungan dengan penciptaan atau alam. Bagi penggemar science seperti saya, yang sering nonton video dokumenter tentang alam, bagaimana terbentuknya bumi, luar angkasa, bintang-bintang, blackhole, dan sebagainya, ayat-ayat scientific dan luar biasa puitis itu benar-benar menembus ke dalam jiwa.

Saya pun dibuat takjub dengan Ring Composition Structure di beberapa Surat Madaniyah. Serta ayat-ayat yang incredibly symmetric. It’s so mind boggling, menakjubkan. Jelas sudah, manusia tidak memiliki mental capability untuk membuat yang seperti ini. It’s definitely word of God.

Berikut beberapa contoh-contoh keindahan linguistik dalam Al-Qur’an:
1. Dalam Surat Al-Muddatsir ayat 3, Allah SWT berfirman,
وَرَبَّكَ فَكَبِّرْ
Terjemahan simpelnya: “dan agungkanlah Tuhanmu”, sedangkan terjemahan yang lebih mumpuninya: “dan nyatakanlah hanya keagungan Tuhanmu saja”
Huruf و dalam bahasa Arab, sebenarnya tidak selalu berarti “dan”. Huruf و dapat digunakan untuk 21 jenis fungsi, dan salah satunya sebagai isti’naf yaitu untuk memulai kalimat baru. Sehingga sisanya berbunyi رَبَّكَ فَكَبِّر
Nah sekarang perhatikan dengan baik. Kalimat tersebut dimulai dengan huruf ر dan diakhiri dengan huruf ر juga. Huruf kedua adalah huruf ب dan huruf kedua terakhir adalah huruf ب juga. Huruf ketiga adalah huruf ك dan huruf ketiga terakhir adalah huruf ك juga. Dan huruf ف di tengahnya. Subhanallah! Suatu rangkaian simetris yang hanya terdiri dari 7 huruf. Dalam bahasa Indonesia kita perlu menuliskan “dan nyatakanlah hanya keagungan Tuhanmu saja”. Dan Qur’an hanya membutuhkan 7 huruf yang disusun secara sangat elegan.

2. Dalam Surat Ya Sin ayat 40, Allah SWT berfirman,
لَا الشَّمْسُ يَنبَغِي لَهَا أَن تُدْرِكَ الْقَمَرَ وَلَا اللَّيْلُ سَابِقُ النَّهَارِ وَكُلٌّ فِي فَلَكٍ يَسْبَحُونَ
Terjemahannya simpelnya: “Tidaklah mungkin bagi matahari mengejar bulan dan malam pun tidak dapat mendahului siang. Masing-masing beredar pada garis edarnya.”
Allah SWT berfirman tentang benda-benda angkasa, dimana masing-masing “berenang”/”melayang”/beredar/berputar pada garis edarnya. Sekarang perhatikan kata كُلٌّ فِي فَلَكٍ
Perhatikan huruf pertama ك dan bagaimana diakhiri dengan huruf ك juga. Huruf kedua adalah ل dan huruf kedua terakhir adalah ل juga. Huruf ketiga adalah ف dan huruf ketiga terakhir adalah ف juga. Dan di pusatnya ada huruf ي
Sekarang mari kita ilustrasikan:
ك – ل – ف – ي – ف – ل – ك
Pusat dari rangkaian huruf tersebut adalah huruf ي yang merupakan huruf pertama kata berikutnya يَسْبَحُونَ yang artinya mengorbit/berputar. Subhaanallah! Bagaimana mungkin manusia bisa merangkai kata sedahsyat ini? It’s so not human. It could only come from God.

3. Ayat Kursi yang tentunya sudah familiar bagi seorang muslim.
Ayat ini terbagi menjadi 9 kalimat:
(1) اللّهُ لاَ إِلَهَ إِلاَّ هُوَ الْحَيُّ الْقَيُّومُ
“Allah, tidak ada Tuhan selain Dia, Yang Maha Hidup, yang terus menerus mengurus (makhkluk-Nya)”
(2) لاَ تَأْخُذُهُ سِنَةٌ وَلاَ نَوْمٌ
“tidak mengantuk dan tidak tidur”
(3) لَّهُ مَا فِي السَّمَاوَاتِ وَمَا فِي الأَرْضِ
“Kepunyaan-Nya apa yang di langit dan di bumi”
(4) مَن ذَا الَّذِي يَشْفَعُ عِنْدَهُ إِلاَّ بِإِذْنِهِ
“Tiada yang dapat memberi syafa’at di sisi-Nya tanpa izin-Nya”
(5) يَعْلَمُ مَا بَيْنَ أَيْدِيهِمْ وَمَا خَلْفَهُمْ
“Dia mengetahui apa yang di hadapan mereka dan apa yang dibelakang mereka”
(6) وَلاَ يُحِيطُونَ بِشَيْءٍ مِّنْ عِلْمِهِ إِلاَّ بِمَا شَاء
“dan mereka tidak mengetahui sesuatu apa pun tentang ilmu-Nya melainkan apa yang Dia kehendaki”
(7) وَسِعَ كُرْسِيُّهُ السَّمَاوَاتِ وَالأَرْضَ
“Kursi-Nya meliputi langit dan bumi”
(8) وَلاَ يَؤُودُهُ حِفْظُهُمَا
“Dan Dia tidak merasa berat memelihara keduanya”
(9) وَهُوَ الْعَلِيُّ الْعَظِيمُ
“dan Dia Maha Tinggi, Maha Besar”

Kalimat pertama diakhiri dengan 2 nama Allah, yaitu الْحَيُّ (Yang Maha Hidup) dan الْقَيُّومُ (Yang Maha Mandiri; Sumber dari segala sesuatu). Dan kalimat pertama ini, memiliki kesamaan dengan kalimat ke-9, dimana juga disebutkan 2 nama Allah, yaitu الْعَلِيُّ (Maha Tinggi) dan الْعَظِيمُ (Maha Besar).

Kemudian lihatlah kalimat ke-2, dan hubungannya dengan kalimat kedua dari akhir (kalimat ke-8). Mengantuk dan tidur adalah sifat makhluk. Manusia misalnya, akan mengantuk jika kelelahan. Tapi bagi Allah, memelihara dan menjaga langit dan bumi tidak membuatnya lelah atau berat.

Kemudian perhatikan kalimat ke-3, dan koneksinya dengan kalimat ketiga dari akhir (kalimat ke-7). Dua kalimat tersebut saling melengkapi. Pada kalimat ketiga, Allah menegaskan bahwa Dia lah pemilik apa yang ada di langit dan di bumi. Dan pada kalimat ke-7, Allah menegaskan bahwa Kursi-Nya, Kerajaan-Nya meliputi langit dan bumi. Di dunia ini, pemilik yang memiliki suatu properti, belum tentu penguasa/raja yang memiliki kerajaan/authority. Dan raja yang memiliki kekuasaan, belum tentu sebagai pemilik. Karena kepemilikan itu, terhadap suatu objek atau properti. Sedangkan kerajaan adalah mengenai kekuasaan untuk mengendalikan orang. Di dalam ayat ini Allah sedang menegaskan bahwa Allah adalah Pemilik sekaligus Raja bagi langit dan bumi.

Kemudian kalimat ke-4, dan hubungan maknanya dengan kalimat keempat dari akhir (kalimat ke-6). Di kalimat ke-4 Allah menegaskan bahwa tidak ada seorang pun yang memiliki authority, kecuali Allah memberikannya. Dan ini dilengkapi dengan kalimat ke-6 yang menegaskan bahwa tak ada seorang pun yang memiliki ilmu-Nya, kecuali Allah menghendakinya.

Dan lihatlah bagaimana kalimat ke-5 yang berada di tengah, yang bertindak bagai cermin bagi kalimat di depan dan di belakangnya, sambil menegaskan bahwa Allah Maha Mengetahui apa yang ada di depan dan di belakang mereka.
Who speak like that? Subhaanallah! So beautiful!

4. Surat Al-Baqarah, surat terpanjang dalam Al-Qur’an, dengan jumlah 286 ayat, has take the symmetry to the whole new level. Struktur ini dinamakan Ring Composition Structure. Hal ini baru-baru ini saja ditemukan melalui penelitian linguistik modern.

Surat ini bisa dibagi menjadi 9 bagian, berdasarkan tema:

Bagian 1: Keimanan & Kekafiran
Bagian 2: Penciptaan & Pengetahuan
Bagian 3: Hukum yang diberikan kepada Bani Israil
Bagian 4: Ujian yang telah dijalani Nabi Ibrahim
Bagian 5: Perpindahan arah kiblat shalat
Bagian 6: Muslim akan diuji
Bagian 7: Hukum yang diberikan kepada muslim.
Bagian 8: Penciptaan & Pengetahuan
Bagian 9: Keimanan & Kekafiran

Perhatikan bagaimana kesembilan tema tersebut simetris dan seperti membentuk struktur cincin, dengan bagian ke-5 sebagai cermin atau pusat tema. Dan di dalam bagian ke-5 ini terdapat ayat ke-143, yang posisinya tepat di tengah surat (total ayat ada 286), perhatikanlah bunyi ayat ini:

“Dan demikian pula Kami telah menjadikan kamu (umat Islam) ‘umat pertengahan’ agar kamu menjadi saksi atas (perbuatan) manusia dan agar Rasul (Muhammad) menjadi saksi atas (perbuatan) kamu. Kami tidak menjadikan kiblat yang (dahulu) kamu (berkiblat) kepadanya, melainkan agar Kami mengetahui siapa yang mengikuti Rasul dan siapa yang berbalik ke belakang. Sungguh, (pemindahan kiblat) itu sangat berat, kecuali bagi orang yang telah diberi petunjuk oleh Allah. Dan Allah tidak akan menyia-nyiakan imanmu. Sungguh, Allah Maha Pengasih, Maha Penyayang kepada manusia.”
(QS. Al-Baqarah 2: Ayat 143)

Subhaanallah! Pernyataan umat Islam sebagai umat pertengahan, lokasinya tepat berada di tengah surat ini.

Dan ternyata struktur ini bukan hanya ada pada level makro (tema) saja. Tetapi juga pada sub-tema. Jadi terdapat struktur cincin di dalam cincin. Misalnya saja pada Bagian 8 – Penciptaan & Pengetahuan:

Bagian awal (ayat 254): Mukmin harus mengeluarkan sebagian harta dari apa yang Allah berikan

Bagian tengah (ayat 255-260): Allah Maha Kuasa dan Maha Mengetahui. Allah memberi kehidupan dan kematian.

Bagian akhir (ayat 261-284): Perumpamaan tentang zakat/sedekah

Bahkan struktur ini tidak berhenti pada level sub-tema saja, tapi bahkan pada level ayat. Misalnya ayat 255 yaitu ayat Kursi yang telah dibahas sebelumnya.
Subhaanallah!

Level kepresisian yang menakjubkan ini, jelas terasa sebagai mukjizat ketika mempelajari Sirah Nabawiyah atau sejarah Nabi Muhammad Sallallahu’alaihi wasallam. Saat itu, saya baru paham bahwa ayat-ayat Qur’an itu diturunkan secara piecemeal, sedikit demi sedikit, sesuai dengan kejadian atau tantangan-tantangan yang dihadapi Nabi Sallallahu’alaihi wasallam saat menjalani misinya sebagai Rasulullah. Dengan kata lain, ayat-ayat yang turun adalah jawaban terhadap kejadian atau tantangan yang dihadapi tersebut. Dan kejadian atau tantangan tersebut jelas-jelas di luar kontrol beliau. Contoh kongkrit nya misalnya: Seseorang mukmin bertanya kepada beliau tentang suatu permasalahan, atau ketika musuh menantang beliau. Respon dari hal ini berupa turunnya ayat kepada beliau, menjawab situasi spesifik yang beliau hadapi. Dan turunnya ayat ini tidak harus berurutan di surat yang sama dan tidak harus turun secara kronologis. Selama kurun waktu 23 tahun, ayat-ayat Al-Qur’an diturunkan, out of sequence (tidak berurutan). Segera setelah suatu ayat turun, barulah Nabi Sallallahu ‘Alaihi Wassallam akan diinstruksikan oleh Allah untuk meletakkan ayat ini di posisi ini di surat ini. Dan ayat itu di posisi itu di surat itu. Dan seterusnya, sehingga posisinya fixed.

Dan perlu diingat, pada saat itu Qur’an adalah oral tradition. Para sahabat Nabi tidak melihat Qur’an seperti kita sekarang, dalam bentuk kitab (tertulis). Mereka mendengar Al-Qur’an. It’s an audio experience, not visual experience. Sebuah pengalaman audio namun setelah dituliskan ternyata membentuk suatu struktur linguistik yang luar biasa. Is that humanly possible?

Al-Qur’an ini, tidak seperti buku biasa buatan manusia. Ayat yang sekilas terlihat melompat-lompat ternyata membentuk suatu struktur yang luar biasa.

Fakta lain sebagai hard proof bahwa Al-Qur’an memiliki struktur linguistik yang perfectly balanced adalah statistik kata di dalamnya. Di era modern ini Al-Qur’an sudah bisa dianalisis struktur linguistiknya menggunakan komputer. Jumlah total suatu kata tertentu dalam Al-Qur’an bisa dihitung dengan cepat dan mudah. Perhatikan fakta-fakta berikut:
– Kata “ad-dunya” (dunia) terhitung sebanyak 115 kali. Dan kata “al akhirat” (akhirat) persis sama sebanyak 115 kali.
– Kata “malaaikat” (malaikat) terhitung sebanyak 88 kali. Dan begitupun kata “Syayaatiin” (syaitan) sebanyak 88 kali.
– Kata “al-hayaat” (Kehidupan) terhitung sebanyak 145 kali. Dan begitupun kata kematian sebanyak 145 kali.
– Kata “Ash-shaalihaat” (amal baik) terhitung sebanyak 167 kali. Dan begitupun kata “As-saya-aat” (amal buruk) juga sebanyak 167 kali.
– Kata “ibliis” (iblis) terhitung sebanyak 11 kali. Dan kata berlindung dari iblis, terhitung sebanyak 11 kali.
– Frasa “mereka berkata”, terhitung sebanyak 332 kali. Dan kata “Katakanlah”, juga sebanyak 332 kali.
– Kata “bulan” sebanyak 12 kali
– Kata “hari” sebanyak 365 kali

Again, is that humanly possible?

Saya begitu dibombardir dengan kedahsyatan mukjizat Al-Qur’an. Dan ternyata itu belum selesai. Al-Qur’an juga menawarkan dahsyatnya struktur matematis yang dimilikinya. Salah satu yang mencolok adalah huruf-huruf initial yang mengawali beberapa surat seperti ق di Surat Qaf, huruf يس di Surat Ya Sin, dan sebagainya. Mari kita perhatikan beberapa contoh berikut:

– Jumlah huruf ق di Surat Qaf ada 57. Dan 57 =
3 x 19. Artinya, 57 adalah kelipatan 19. Sehingga jumlah huruf ق di Surat Qaf merupakan kelipatan 19.
Dan ternyata jumlah huruf ق di Surat Asy-Syura juga ada 57. Jika jumlah huruf ق di kedua surat itu dijumlahkan, 57 + 57 = 114. Dan 114 = 2 x 3 x 19. Kelipatan 19 lagi.

– Jumlah huruf ي di Surat Ya Sin ada 237, dan jumlah huruf س ada 48. Jika dijumlahkan, 237 + 48 = 285. Dan 285 = 3 x 5 x 19. Kelipatan 19 lagi.

– Jika initial حم yang terdapat pada Surat Al-Mu’min, Surat Al-Fussilat, Surat Asy-Syura, Surat Az-Zukhruf, Surat Ad-Dukhan, Surat Al-Jasiyah, dan Surat Al-Ahqaf, dijumlahkan maka:
Surat Al-Mu’min: terdapat 64 huruf “ha” dan 380 huruf “mim”
Surat Al-Fussilat: terdapat 48 huruf “ha” dan 276 huruf “mim”
Surat Asy-Syura: terdapat 53 huruf “ha” dan 300 huruf “mim”
Surat Az-Zukhruf: terdapat 44 huruf “ha” dan 324 huruf “mim”
Surat Ad-Dukhan: terdapat 16 huruf “ha” dan 150 huruf “mim”
Surat Al-Jasiyah: terdapat 31 huruf “ha” dan 200 huruf “mim”
Surat Al-Ahqaf: terdapat 36 huruf “ha” dan 225 huruf “mim”
Jika kita jumlahkan semua, hasilnya: 2147. Dan 2147 = 113 x 19. Kelipatan 19 lagi.

– Initial عسق di Surat Asy-Syura juga tidak terlepas dari ini. Jumlah huruf ع ada 98. Jumlah huruf س ada 54. Jumlah huruf ق ada 57. Jika dijumlahkan, 98 + 54 + 57 = 209. Dan 209 = 11 x 19. Kelipatan 19 lagi.

– Begitu pun initial كهيعص di Surat Maryam. Terdapat 137 huruf “Kaf”, 175 huruf “Ha”, 343 huruf “Ya”, 117 huruf “Ain”, dan 26 huruf “Shad”. Jika dijumlahkan, 137 + 175 + 343 + 117 + 26 = 798. Dan 798 = 2 x 3 x 7 x 19. Kelipatan 19 lagi.

Subhaanallah! Jika Al-Qur’an ini sudah tercampuri tangan manusia (corrupted), dan misalnya satu huruf ق saja hilang, atau huruf ي hilang, atau huruf lainnya, maka saya tidak akan bisa menikmati mukjizat kelipatan 19 ini sekarang. Dan perhatikanlah Surat Al-Muddatsir ayat 27-31 berikut ini:

“Dan tahukah kamu apa Saqar itu?
Ia tidak meninggalkan dan tidak membiarkan,
Yang menghanguskan kulit manusia.
Di atasnya ada sembilan belas.
Dan yang Kami jadikan penjaga neraka itu hanya dari malaikat; dan Kami menentukan bilangan mereka itu hanya sebagai cobaan bagi orang-orang kafir, agar orang-orang yang diberi kitab menjadi yakin, agar orang yang beriman bertambah imannya, agar orang-orang yang diberi kitab dan orang-orang mukmin itu tidak ragu-ragu; dan agar orang-orang yang di dalam hatinya ada penyakit dan orang-orang kafir (berkata), “Apakah yang dikehendaki Allah dengan (bilangan) ini sebagai suatu perumpamaan?” Demikianlah Allah membiarkan sesat orang-orang yang Dia kehendaki dan memberi petunjuk kepada orang-orang yang Dia kehendaki. Dan tidak ada yang mengetahui bala tentara Tuhanmu kecuali Dia sendiri. Dan Saqar itu tidak lain hanyalah peringatan bagi manusia.”
(QS. Al-Muddatsir: 27-31)

Ini baru beberapa contoh saja. Masih banyak lagi contoh-contoh lain yang bertebaran di dalam Al-Qur’an. Dan semakin dalam kita menyelam ke dalam Al-Qur’an, semakin banyak harta karun yang kita temukan. Dan harta karun itu seperti tidak ada habisnya. Bagai lautan luas. Dan sepertinya kita tidak memiliki kapasitas yang cukup untuk memahami semuanya.

Dan setelah mukjizat demi mukjizat, sudah saat nya hati dan akal kita tunduk kepada Allah. Jalani perintah-perintah Allah di dalam Al-Qur’an. Patuhilah perintah-perintah Rasul-Nya. Atii’ullaha wa atii’urrasul. Taatilah Allah dan Rasul-Nya.

Jadikanlah Al-Qur’an sebagai pedoman hidup. Because Al-Qur’an is a “live” guidance. Kita akan terkejut ketika kita sedang menghadapi suatu masalah hidup, dan ketika membuka Al-Qur’an, secara kebetulan kita mendapati ayat yang seakan-akan merespon langsung atas permasalahan kita. Ketika akan melangkah ke dalam kemaksiatan, tiba-tiba saja teringat ayat-ayat Allah yang melarang perbuatan tersebut. We will receive His Guidance thru His words in the Qur’an.

Jadilah hamba-Nya. The summary of entire Qur’an is basically to accept the fact that we are slaves and He is our Master (Ringkasan seluruh Qur’an pada dasarnya adalah untuk menerima kenyataan bahwa kita adalah hamba dan Dia adalah Rabb kita). Satu-satunya tujuan hidup kita, the sole purpose of this life, adalah mengabdikan diri kepada-Nya. Itulah satu-satunya cara agar kita mendapatkan kedamaian yang sesungguhnya. Kedamaian di Surga-Nya.

وَمَا خَلَقْتُ الْجِنَّ وَالْإِنسَ إِلَّا لِيَعْبُدُونِ
“Dan Aku tidak menciptakan jin dan manusia melainkan supaya mereka mengabdi kepada-Ku”
(QS. Az-Zariyat: 55)

WAG

menghapus log lama dengan script bash

erlalu banyak yang harus dilakukan untuk tiap hari menghapus sampah log. Memang diperlukan pada saat kita ingin melacak kesalahan pada sistem, tapi apabila terlalu besar maka space yang terpakai juga akan membengkak dan bisa memakan bagian yang seharusnya bisa dimanfaatkan. Terkhususnya untuk router kecil saya, serta beberapa server yang ada di Kantor.

Silahkan login sebagai root lalu bikin file persiapan. Untuk membedakan source dan script executable saya menambahkan src pada bagian akhir namanya:

# touch cleanup-src
# nano cleanup-src

Kemudian saya ketikkan script berikut:

#!/bin/bash
#Cleanup, version 3
# cleanup /var/log message and wtmp, but with safer option
# last update @ July 24, 2008 Yan F
LOG_DIR=/var/log
ROOT_UID=0 # only user with $UID 0 have root privileges
LINES=50 # default number of lines saved
E_XCD=66 # can’t change directory?
E_NOTROOT=67 # non-root exit error# Run as root, of course!
if [ “$UID” -ne “$ROOT_UID” ]
then
echo “You MUST be root to run this script!.”
exit $E_NOTROOT
fi# Test if command line argument present (non-empty)
if [ -n “$1” ]
then
lines=$1
else
echo “No line number specified, use default=$LINES.”
lines=$LINES # Default, if not specified on command line
fi

cd $LOG_DIR
# check if not in /var/log
if [ “$PWD” != “$LOG_DIR” ] # if [ “$PWD” != “$LOG_DIR” ]
then
echo “Can’t change to $LOG_DIR.”
exit $E_XCD
fi

tail -n $lines messages > mesg.temp # saves last section
mv mesg.temp messages # becomes new log directory
echo “$LOG_DIR messages cleaned…”

cat /dev/null > wtmp
echo “$LOG_DIR wtmp cleaned…”

echo “Logs cleaned up.”

exit 0
# return 0 indicates success to the shell

 

alu untuk file yang executablenya saya copy kan ke /usr/local/bin dengan nama cleanup

# cp cleanup-src /usr/local/bin/cleanup

Lalu berikan mode executable …

# chmod u+x /usr/local/bin/cleanup

Untuk menjalankannya tinggal lakukan perintah seperti biasa.

# cleanup

Script tersebut akan melakukan penghapusan terhadap file /var/log/messages secara aman, maksudnya, penghapusan hanya akan dilakukan pada baris paling atas atau log yang lama, sedangkan di file wtmp akan langsung terhapus. Sedangkan baris yang menyimpan log terbaru tidak dihapus. Sedangkan jumlah baris yang disisakan bisa kita ubah sesuai kebutuhan dengan memberikan argument tambahan, yang apabila tidak ditambahi maka akan digunakan 50 yang merupakan nilai default. Contoh apabila kita ingin menyisakan 60 baris terakhir …

# cleanup 60

Fork pada github

Github adalah software Hosting untuk proyek open source yang menggunakan Tool System revisi  Git. Jadi Git adalah tool untuk melakukan revisi code, sedangkan github adalah webhostingnya. Mudahnya Github adalah Webhosting untuk proyek proyek software seperti Google code atau sourceforge.net. Dalam bahasa gaul, Github adalah jejaring social untuk software developer

fitur yang paling banya di gunakan adalah fitur fork. fitur fork pada github berguna untuk mencopy code kedala repository yang kita miliki dengan mudah dan cepat, struktur repository yang kita fork akan pindah sama persis pada kita, fitur fork sangat cocok du gunakan dalam sebuah team, karena dengan fitur fork mudah melakukan revisi pada code-code yang di buat oleh software developer. contoh repository yang di fork seperti di bawah ini

Dengan menggunakan fork kita dapat mengupdate repositori master atau repository yang kita fork dengan membuat PR(Pull Request), jika code yang di push sudah sesuai harapan maka admin dapat merge atau menggabungkan dengan repository utama, sehingga orang dapat berkontribusi dengan code yang di ada pada github

jika kita ingin mengupdate repository kita sesuai dengan repository utama kita dapat sync dengan menggunakan upstream
cara nya lebih kurang seperti di bawah ini
#git clone

$git clone https://github.com/YOUR_USERNAME/YOUR_FORK.git
$cd YOUR_FORK

jika mengecek git remote maka akan seperti di bawah ini

$git remote -v
$origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
$origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)

untuk menambahkan upstream repository yang kita fork seperti di bawah ini(upstream berguna untuk mendownload repository utama yang nantinya kita gabung dengan repository  yang telah kita fork kita)

$git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git

jika kita mengecek maka akan muncul seperti di bawah ini

git remote -v
origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)

selanjutnya untuk mendownload repository utama

$git pull upstream <name branch>
$git pull --rebase

note : git pull –rebase berguna untuk mengambil update an terbaru dari repository utama. selanjutnya kita dapat git add, commit dan push

git add .
git commit -m "update"
gitp push origin master

repository yang kita fork sudah terupdate sesuai dengan repository utama