Cloning Partisi GPT

Tag

,

Ada kebutuhan untuk melakukan cloning terhadap partisi device dengan GPT partition structure di situ, menggunakan sfdisk bukan pilihan sehingga menggunakan sgdisk adalah jawabannya.

# sgdisk /dev/sumber -R /dev/target
# sgdisk -G /dev/target

Perintah terakhir agar GUID masing-masing struktur bisa di randomize.

Sumber:

 

Iklan

Instalasi Manual mod-security Di Debian 8

Tag

,

Saat menggunakan debian 8 dan ingin menggunakan mod-security di apache2 kami mendapatkan adanya kesalahan terhadap kode rule manual yang diakibatkan versi yang tidak kompatibel di salah satu server, sehingga penggunaan paket default milik mod-security bukanlah pilihan. Oleh karena hal tersebut maka harus dilakukan proses intalasi manual terhadap mod-security yang kompatibel, di mana versi yang bisa digunakan adalah modsecurity-apache_2.6.5.

Singkat cerita setelah melakukan download terhadap source code modsecurity-apache_2.6.5 dilakukan terlebih dahulu instalasi terhadap module yang dibutuhkan.

# apt-get install apache2-dev libxml2-dev libpcre3 libpcre3-dev libcurl4-openssl-dev

Kemudian source code modsecurity di ekstrak dan mulailah dilakukan proses instalasi secara manual.

# tar -xvzf modsecurity-apache_2.6.5
# cd modsecurity-apache_2.6.5
# ./configure --with-apxs2=/usr/bin/apxs2 && make && make install

Proses sangat panjang dan apabila tidak ada pesan error maka semestinya hasil compile secara default akan ditempatkan di /usr/local/modsecurity/lib/mod_security2.so.

Agar dapat digunakan oleh apache2 terdapat beberapa proses yang harus dilakukan, yaitu membuat setting module yang kita beri nama security2 serta meloadnya di apache2.

# nano /etc/apache2/mods-available/security2.load

Isi dari file tersebut adalah seperti berikut:

LoadModule security2_module /usr/local/modsecurity/lib/mod_security2.so

Setelah itu tidak lupa proses pengaktifkan module yang baru di install ini yang dilanjutkan dengan melakukan restart pada service apache2.

# ap2enmod security2
# service apache2 restart

Referensi:

Insiasi PostgresREST

Tag

,

Setelah mendapatkan kebutuhan untuk membuat reporting sederhana terhadap data yang telah terkumpul menggunakan PostgreSQL, maka terdapat beberapa pilihan apabila aplikasi yang ingin dikembangkan berbasis Web. Salah satunya adalah penggunaan Javascript Framework yang mengakses ke PostgreSQL melalui REST API. Untuk pengembangan REST API selain menggunakan beberapa pilihan framework pengembangan, ternyata ada satu pilihan menarik menggunakan PostgresREST.

Salah satu impresi yang saya dapatkan dari ujicoba sederhana kali ini, penggunaan PostgresREST membuat pengembangan REST API lebih cepat karena kita tidak perlu lagi menuliskan kode yang repetitive untuk backend-nya. Alih-alih mengembangkan sendiri proses otorisasi dan autentifikasi, kita bisa langsung menggunakan schema dan role serta privilege yang ada di PostgreSQL.

Agar bisa menggunakan PostgresREST dibutuhkanPostgreSQL minimal versi 9.3, sehingga untuk percobaan ini saya harus melakukan proses upgrade untuk versi PostgreSQL yang digunakan di salah satu mesin server.

Sebagai informasi bawah saya memiliki sebuah database bernama mydb dengan user mydbuser dan password mydbpass serta schema yang digunakan adalah default yaitu public.

Pada kebutuhan saya nantinya user tidak perlu melakukan proses login, dengan beberapa table yang bisa diakses pada schema public tanpa melakukan login. Untuk itu saya buat role di PostgreSQL bernama web_public yang nantinya memiliki hak akses ke salah satu table bernama informasi_publik. Agar kebutuhan ini terpenuhi maka saya harus login sebagai super user ke PostgreSQL, di mana prosesnya bisa dijabarkan berikut ini:

# su - postgres
postgres $ psql
psql > \c mydb
You are now connected to database "mydb" as user "postgres".
psql > create role web_public nologin;
CREATE ROLE
epns=# grant web_public to mydb;
GRANT ROLE
epns=# grant usage on schema public to web_public;
GRANT
epns=# grant select on public.informasi_public to web_public;

Saya menggunakan Debian Jessie 64 dan memilih postgrest-0.4.2.0-ubuntu-x32.tar.xz dari https://github.com/begriffs/postgrest/releases/latest. Sebelum itu dilakukan terlebih dahulu instalasi libpq-dev yang merupakan library PostgreSQL. Adapun alasannya memilih ini, karena menggunakan pilihan yang lain tidak bisa berjalan 😦

# apt-get install libpq-dev
# wget https://github.com/begriffs/postgrest/releases/download/v0.4.2.0/postgrest-0.4.2.0-ubuntu-x32.tar.xz
# tar xfJ postgrest-0.4.2.0-ubuntu-x32.tar.xz
# ./postgrest --help

Langkah selanjutnya adalah konfigurasi terhadap koneksi ke database dan untuk ini saya buat sebuah file bernama testkonfigurasi.conf dengan isinya:

db-uri = "postgres://mydbuser:mydbpass@localhost/mydb"
db-schema = "public"
db-anon-role = "web_public"

Kemudian server PostgresREST dijalankan.

# ./postgres testkonfigurasi.conf
Listening on port 3000
Attempting to connect to the database...
Connection successful

Untuk testing diakses dengan curl

$ curl localhost:3000/informasi_public

Referensi:

Upgrade PostgreSQL v 9.1 to v 9.4

Tag

Ada beberapa kebutuhan yang memaksa untuk melakukan proses upgrade PostgreSQL, di mana saat ini menggunakan Debian jessie.

# apt-get install postgresql-9.4

Kemudian menggunakan tool pg_dropcluster maka terlebih dahulu mematikan dahulu yang baru supaya bisa menggunakan tool pg_ugpradecluster.

Mematikan dulu cluster yang baru …

# pg_dropcluster --stop 9.4 main

Kemudian melakukan proses upgradecluster …

# pg_upgradecluster -v 9.4 9.1 main

Namun didapatkan pesan error …

Stopping old cluster...
pg_ctl: server does not shut down
HINT: The "-m fast" option immediately disconnects sessions rather than
waiting for session-initiated disconnection.
Error: Could not stop old cluster

Saya kira dengan mengulang lagi bisa berjalan, ternyata tidak …

# pg_upgradecluster -v 9.4 9.1 main
psql: FATAL: the database system is shutting down
psql: FATAL: the database system is shutting down
Use of uninitialized value $out in pattern match (m//) at /usr/share/perl5/PgCommon.pm line 915.
psql: FATAL: the database system is shutting down
Use of uninitialized value $out in pattern match (m//) at /usr/share/perl5/PgCommon.pm line 921.
Use of uninitialized value $ctype in scalar chomp at /usr/share/perl5/PgCommon.pm line 924.
Use of uninitialized value $collate in scalar chomp at /usr/share/perl5/PgCommon.pm line 925.
Error: could not get cluster locales

Kemudian dicoba untuk mematikan service postgresql yang lama dan dilanjutkan dengan menjalankan proses ulang …

# service postgresql stop
# service postgresql stop
# pg_upgradecluster -v 9.4 9.1 main
Disabling connections to the old cluster during upgrade...
Restarting old cluster with restricted connections...
Creating new cluster 9.4/main ...
config /etc/postgresql/9.4/main
data /var/lib/postgresql/9.4/main
locale en_US.UTF-8
Flags of /var/lib/postgresql/9.4/main set as ---------------C
port 5433
Disabling connections to the new cluster during upgrade...
Roles, databases, schemas, ACLs...
Fixing hardcoded library paths for stored procedures...
Upgrading database template1...
Analyzing database template1...
Fixing hardcoded library paths for stored procedures...
Upgrading database epns_lat...
Analyzing database epns_lat...
Fixing hardcoded library paths for stored procedures...
Upgrading database epns_latihan...
Analyzing database epns_latihan...
Fixing hardcoded library paths for stored procedures...
Upgrading database postgres...
Analyzing database postgres...
Fixing hardcoded library paths for stored procedures...
Upgrading database epns...
Analyzing database epns...
Re-enabling connections to the old cluster...
Re-enabling connections to the new cluster...
Copying old configuration files...
Copying old start.conf...
Copying old pg_ctl.conf...
Copying old server.crt...
Copying old server.key...
Stopping target cluster...
Stopping old cluster...
Disabling automatic startup of old cluster...
Configuring old cluster to use a different port (5433)...
Starting target cluster on the original port...
Success. Please check that the upgraded cluster works. If it does,
you can remove the old cluster with

pg_dropcluster 9.1 main

Kemudian test bahwa data yang di upgrade memiliki data yang benar, karena kalau tidak maka selamat tinggal data kalau tidak di backup lebih dahulu 😀
Bila sudah yakin benar, maka baru yang cluster 9.1 di hapus …

# pg_dropcluster 9.1 main

Referensi:

Instalasi Ajenti di Debian 8

Instalasi Ajenti di Debian 8 sangat mudah …

# wget http://repo.ajenti.org/debian/key -O- | apt-key add -
# echo "deb http://repo.ajenti.org/debian main main debian" >> /etc/apt/sources.list
# apt-get update && apt-get install ajenti
# service ajenti restart

Namun ternyata tidak berjalan sempurna, terdapat error yang menyebabkan di instalasi saya hanya tampil halaman tanpa menu. Kemudian mendapatkan informasi permasalahan saat instalasi di Debian 8 Jessie, karena ada bagian module python yang digunakan ajenti harus di upgrade dengan menggunakan jessie-backports.

Untuk itu tinggal gunakan jessie-backports dengan panduan di https://backports.debian.org/Instructions/ kemudian lakukan upgrade gevent-socketio.

# apt-get -t jessie-backports install python-gevent
# wget -c http://repo.ajenti.org/debian/pool/ubuntu/g/gevent-socketio/python-gevent-socketio_0.3.7.99-1_all.deb
# dpkg -i python-gevent-socketio_0.3.7.99-1_all.deb
# apt-get install ajenti

Lalu silahkan akses lagi dan kali ini akan muncul menu dll.

Sumber:

Backup Data dan Aplikasi SPSE Ke Google Drive Menggunakan rclone

Tag

Selain melakukan backup ke hardisk eksternal, untuk amannya juga memiliki backup ke server lain yang tidak satu lokasi dengan server production; dalam hal ini saya memilih untuk menggunakan layanan milik Google menggunakan Google Drive. Alasannya? cepat dan gratis 😀

Untuk itu setelah memiliki account di Google, dilanjutkan dengan melakukan penginstalan rclone di server LPSE menggunakan petunjuk seperti yang dituliskan di instalasi rclone dan menghubungkannya dengan Google Drive pada tulisan sebelumnya.

Setelah itu buat sebuah file shell untuk melakukan copy aplikasi spse yang kita miliki, misalnya di dengan cara membuat file di /home/backuptogdrive-mingguan.sh.


#/bin/sh
# lakukan backup ke google drive setiap minggu
# backup etc
/usr/sbin/rclone copy /etc/ gdrive:/backupsite/etc/ 2> /home/backuptogdrive-etc.log
# backup aplikasi epns 3.6, jangan copy logs dan git
/usr/sbin/rclone --exclude='/logs/' --exclude='/.git/' copy /home/appserv/epns-prod-3.6sp3/ gdrive:backupsite/epns-prod-3.6sp3/ 2> /home/backuptogdrive-app36.log
# backu aplikasi epns 4.1, jangan copy logs dan git
/usr/sbin/rclone --exclude='/webapp/logs/' --exclude='/.git/' copy /home/appserv/spse-prod-4.1/ gdrive:backupsite/spse-prod-4.1/ 2> /home/backuptogdrive-app4.log

Silahkan lakukan penyesuaian yang disesuaikan dengan instalasi di masing-masing server.

Langkah berikutnya tinggal buat agar bisa dieksekusi dan hanya bisa dieksekusi oleh root.


# chown root:root /home/backuptogdrive-mingguan.sh
# chmod o-rwx,u+x /home/backuptogdrive-mingguan.sh

Kemudian tambahkan di crontab …


# backup ke google drive setiap hari sabtu jam 1.00
0 1 * * 6 /home/backuptogdrive-mingguan.sh

Selesai dan check di Google Drive.

NB: saya tidak memasukkan sisi keamanan dengan menambahkan enkripsi pada aplikasi dan datanya, silahkan dilakukan eksplorasi sendiri

rclone dan Google Drive

Tag

Ada kebutuhan agar dapat melakukan penyimpanan data penting ke media penyimpanan di Internet, sehingga terdapat backup terhadap beberapa data tersebut. Menggunakan rclone telah dipilih untuk melakukan peyimpanan ke media milik Google Drive dan berikut ini adalah langkah yang telah dilakukan.

Konfigurasi Google API

rclone membutuhkan informasi untuk login ke Google Drive menggunakan credential yang dibuat lebih dahulu melalui Google Api Console.

Langkah-langkahnya setelah login adalah kurang lebih:

  1. Pilih menu Library lalu pada input untuk pencarian ketikkan Google Drive dan klik pada bagian pilihan API yang muncul untuk Google Drive API.
  2. Bila belum memiliki project akan muncul pesan untuk membuat project lebih dahulu dan ikuti saja langkah pembuatannya, isikan pada nama project apa saja yang informatif.
  3. Bila project telah terpilih dan bisa mengulangi pada langkah satu di atas, setelah itu klik enable API untuk Google Drive API.
  4. Kemudian klik pada menu Credentials, pada pilihan Create credentials pilih OAuth Client ID.
  5. Bila muncul pesan harus membuat consent screen ikuti saja prosesnya dan isikan pada isian dengan isian informatif.
  6. Kemudian akan muncul create client ID dan pilih opsi Other, isikan pada Name dengan nama yang informatif seperti GDriveRclone.
  7. Klik tombol create dan akan muncul client ID dan client Secret yang akan digunakan untuk koneksi ke account kita oleh rclone.

Instalasi rclone

Untuk instalasi rclone sangatlah mudah, dilakukan dengan cara melakukan copy langsung terhadap file binary dan manualnya di http://rclone.org/downloads/. Pada daftar silahkan pilih tipe binary yang sesuai, dalam hal ini di tempat yang saya gunakan adalah Debian 64 bit, sehingga yang dipilih adalah di Linux – rclone-v1.35-linux-amd64.zip.


# cd ~
# wget http://downloads.rclone.org/rclone-v1.35-linux-amd64.zip
# unzip rclone-v1.35-linux-amd64.zip
# cd rclone-v1.35-linux-amd64
# cp rclone /usr/sbin/rclone
# chown root:root /usr/sbin/rclone
# chmod 750 /usr/sbin/rclone

Pada bagian chmod di atas kita pastikan bahwa hanya root yang bisa melakukan eksekusi, sebagai pengaman mengingat rclone dapat melakuan proses penghapusan ke storage remote yang kita miliki. Kemudian untuk manualnya (bila ini diinginkan).


# mkdir -p /usr/local/share/man/man1
# cp rclone.1 /usr/local/share/man/man1/
# mandb

Jangan lupa melakukan penghapusan terhadap file hasil download tadi.

# cd /
# rm -r ~/rclone-v1.35-linux-amd64
# rm ~/rclone-v1.35-linux-amd64.zip

Konfigurasi rclone

Untuk konfigurasi ini kita akan menambahkan config yang menunjukkan alamat link ke Google Drive, menggunakan informasi yang telah didapatkan pada langkah Konfigurasi Gogole Drive di atas.


# rclone config
2017/02/21 14:00:33 Config file "/root/.rclone.conf" not found - using defaults
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> gdrive
Type of storage to configure.
Choose a number from below, or type in your own value
1 / Amazon Drive
\ "amazon cloud drive"
2 / Amazon S3 (also Dreamhost, Ceph, Minio)
\ "s3"
3 / Backblaze B2
\ "b2"
4 / Dropbox
\ "dropbox"
5 / Encrypt/Decrypt a remote
\ "crypt"
6 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
7 / Google Drive
\ "drive"
8 / Hubic
\ "hubic"
9 / Local Disk
\ "local"
10 / Microsoft OneDrive
\ "onedrive"
11 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
12 / Yandex Disk
\ "yandex"
Storage> 7
Google Application Client Id - leave blank normally.
client_id> DISINI_MASUKKAN_CLIENT_ID_SESUAI_LANGKAH_DI_ATAS
Google Application Client Secret - leave blank normally.
client_secret> DISINI_MASUKKAN_CLIENT_SECRET_SESUAI_LANGKAH_DI_ATAS
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine or Y didn't work
y) Yes
n) No
y/n> n
If your browser doesn't open automatically go to the following link: https_DISINI_AKAN_ADA_LINK_YANG_TINGGAL_DICOPY_KE_BROWSER
Log in and authorize rclone for access
Enter verification code> MASUKKAN_HASIL_VERIFICATION_PROSES_AUTHORIZE
--------------------
[gdrive]
client_id = CLIENT_ID_YG_DIMASUKKAN
client_secret = CLIENT_SECRET_YG_DIMASUKKAN
token = DIGENERATE_OLEH_RCLONE
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:
Name Type
==== ====
gdrive drive
e) Edit existing remote
n) New remote
d) Delete remote
s) Set configuration password
q) Quit config
e/n/d/s/q> q
root@uluhitahkia:~#

Setelah itu kita tinggal test dengan melakukan perintah berikut, yang akan menampilkan isi dari directory root di Google Drive yang kita miliki.


# rclone ls gdrive:

Melakukan Copy Ke Google Drive

Misalkan ada data hasil dump SQL yang ingin di copy ke Google Drive ke folder backupsite/db/, maka langkah yang dilakukan adalah:


# rclone copy /home/dbdump/sqldumper-result.sql.gz gdrive:backupsite/db/

Tentu saja untuk keamanannya data yang ingin di copy tersebut bisa terlebih dahulu di encrypt. Terdapat beberapa perintah lagi yang bisa di coba dengan membaca dokumentasi di website rclone.

Sumber: rclone.org

Upgrade monit Di Ubuntu

Tag

Saat ingin menggunakan fasilitas untuk melakukan testing terhadap sertifikat SSL, ternyata fasilitas tersebut hanya ada di monit versi yang terbaru (klik link https://mmonit.com/monit/dist/binary/ untuk melihat versi terbaru) , sedangkan di Ubuntu yang saya gunakan sekarang masih menggunakan versi lama.

$ sudo monit -V

Langkah kemudian adalah mematikan monit yang lama dan melakukan copy terhadap versi monit binary yang sesuai, di mana versi yang akan saya copy adalah untuk 64 bit.

PERHATIAN: Sampai di sini anda harus melakukan proses backup terhadap setting monit yang anda miliki.

$ cd /tmp
$ wget https://mmonit.com/monit/dist/binary/5.20.0/monit-5.20.0-linux-x64.tar.gz
$ tar -xf monit-5.20.0-linux-x64.tar.gz
$ cd monit-5.20.0
$ sudo service monit stop
$ sudo cp bin/monit /usr/bin/monit
$ sudo service monit restart
$ sudo monit -V
This is Monit version 5.20.0

Perhatikan bahwa Monit telah terupdate ke versi terakhir di versi 5.20.0.

Langkah berikutnya adalah melakukan update terhadap setting monit di monitrc.

$ sudo mv /etc/monit/monitrc /etc/monit/monitrc.ori
$ sudo touch /etc/monit/monitrc
$ sudo chmod 0700 /etc/monit/monitrc
$ sudo nano /etc/monit/monitrc
$ sudo ln -s /etc/monit/monitrc /etc/monitrc

Silahkan lakukan copy dengan isi yang baru …

set daemon 60 #check services every 60 seconds
set logfile /var/log/monit.log
set idfile /var/lib/monit/id
set statefile /var/lib/monit/state

#Event queue
set eventqueue
basedir /var/lib/monit/events
# set the base directory where events will be stored
slots 100 # optionally limit the queue size

#Mail settings
# set mail-format {
# from: monit@$HOST
# subject: monit alert — $EVENT $SERVICE
# message: $EVENT Service $SERVICE
# Date: $DATE
# Action: $ACTION
# Host: $HOST
# Description: $DESCRIPTION
#
# Your faithful employee,
# Monit }
# set mailserver smtp.gmail.com port 587
# username “wp” password “bullet”
# using TLSV1 with timeout 30 seconds
# set alert admin@wp-bullet.com #email address which will receive monit alerts

#http settings
# set httpd port 2812 address 0.0.0.0
# allow port 2812 connections on all network adapters
# ssl enable
# pemfile /var/certs/monit.pem
# allow 0.0.0.0/0.0.0.0 # allow all IPs, can use local subnet too
# allow wp-bullet.crabdance.com # allow dynamicdns address to connect
# allow wp:”bullet” # require user wp with password bullet

#allow modular structure
include /etc/monit/conf.d/*.conf
# include /etc/monit/conf-enabled/*

Pada setting di atas untuk lebih modular saya akan menyimpan setting untuk monitoring service di folder /etc/monit/conf.d/ dengan ekstensi file adalah conf.

Untuk memastikan semua berjalan baik-baik saja lakukan check …

$ sudo monit -t

Kalau berjalan baik, coba tambahkan berikut untuk melakukan monitoring ssh di port 1429.

# file di /etc/monit/conf.d/sshd.conf
check process sshd with pidfile /var/run/sshd.pid
start program "/usr/sbin/service ssh start"
stop program "/usr/sbin/service ssh stop"
if failed port 1428 protocol ssh then restart
if 5 restarts within 5 cycles then timeout

Kemudian tambahkan lagi untuk check apache …

#file di /etc/monit/conf.d/apache.conf
check process apache with pidfile /var/run/apache2/apache2.pid
group www
start program = "/usr/sbin/service apache2 start"
stop program = "/usr/sbin/service apache2 stop"
if failed host localhost port 80 protocol http
#and request "/monit/token"
then restart
if cpu is greater than 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then restart
if totalmem > 500 MB for 5 cycles then restart
if children > 250 then restart
if loadavg(5min) greater than 10 for 8 cycles then stop
if 3 restarts within 5 cycles then timeout

Lakukan kembali check terhadap konfigurasi …

$ sudo monit -t

Kalau sudah oke lakukan restart service

$ sudo service monit restart

Lalu lakukan testing dengan mematikan service apache2.

$ sudo service apache2 stop

Check pada bagian log apakah monit berjalan? Bila berjalan semestinya ada pesan bahwa apache2 berhenti dan monit melakukan restart terhadap service apache2. Seperti ini kurang lebih contohnya pada salah satu box server yang kami punyai …

$ sudo tail -f /var/log/monit.log
[WIB Feb 7 09:50:20] error : 'apache' process is not running
[WIB Feb 7 09:50:20] info : 'apache' trying to restart
[WIB Feb 7 09:50:20] info : 'apache' start: '/usr/sbin/service apache2 start'
[WIB Feb 7 09:51:22] info : 'kpukaltengprov' connection succeeded to [kpu-kaltengprov.go.id]:443 [TCP/IP SSL]
[WIB Feb 7 09:51:22] info : 'apache' process is running with pid 861

Referensi: