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:

Iklan

script ‘snapvault’ missing LSB tags and overrides

Saat ingin melakukan upgrade, proses terhenti oleh insserv yang melakukan proses pembacaan terhadap urutan startup berdasarkan LSB tags, terhenti pada startup script milik snapvault, diakibatkan aplikasi snapvault yang script nya berada di /etc/init.d/snapvault tidak menambahkan LSB tags.

Berikut adalah logs …

Reading changelogs... Done
Extracting templates from packages: 100%
Preconfiguring packages ...
Setting up udev (215-17+deb8u6) ...
addgroup: The group `input' already exists as a system group. Exiting.
update-initramfs: deferring update (trigger activated)
insserv: warning: script 'snapvault' missing LSB tags and overrides
insserv: There is a loop between service monit and snapvault if stopped
insserv:  loop involving service snapvault at depth 2
insserv:  loop involving service monit at depth 1
insserv: Stopping snapvault depends on monit and therefore on system facility `$all' which can not be true!
insserv: exiting now without changing boot order!
update-rc.d: error: insserv rejected the script header
dpkg: error processing package udev (--configure):
 subprocess installed post-installation script returned error exit status 1
Processing triggers for initramfs-tools (0.120+deb8u2) ...
update-initramfs: Generating /boot/initrd.img-3.16.0-4-amd64
W: Possible missing firmware /lib/firmware/tigon/tg3_tso5.bin for module tg3
W: Possible missing firmware /lib/firmware/tigon/tg3_tso.bin for module tg3
W: Possible missing firmware /lib/firmware/tigon/tg3.bin for module tg3
Errors were encountered while processing:
 udev
E: Sub-process /usr/bin/dpkg returned an error code (1)

Solusinya adalah menambahkan tag LSB di /etc/init.d/snapvault

### BEGIN INIT INFO
# Provides: snapvault
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start snapvault scheduler service on bootup
# Description: Enable snapvault.
### END INIT INFO

Proses upgrade dan instalasi lainnya dapat berjalan kembali.

Sumber:

Restore Single Database dari Hasil Full MySQL Dump

Tag

,

Pada mesin yang kami handle agar bisa dilakukan proses tracking maka dilakukan full dump terhadap semua database di MySQL. Permasalahan terjadi saat akan memindahkan mesin dan kami hanya ingin satu database yang direstore.

Misalkan database yang ingin direstore adalah db_main dan nama file hasil dump adalah mysqldumpall.sql, maka langkah yang dilakukan tinggal lewat shell:

$ mysql -u root -p --one-database db_main < mysqldumpall.sql

Mengakses MS Access Database Di Ubuntu

Kebutuhan salah satu client untuk melakukan proses migrasi dari sistem yang lama menggunakan MS Access ke sistem yang baru berbasiskan web based application. Sayangnya secara default LibreOffice Base tidak dapat melakukan akses terhadap MS Access. Untungnya terdapat driver JDBC untuk itu menggunakan UCanAccess.

Untuk cara lengkapnya bisa dilihat di sini:

  1. http://askubuntu.com/questions/187389/is-it-possible-to-open-an-access-2010-database-file-without-using-wine-or-virtua/519571
  2. http://ucanaccess.sourceforge.net/site.html

java 64 error file not found debian 7

Kasus yang aneh saat ingin melakukan instalasi java dari oracle melalui http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html dan mengambil yang untuk 64 bit, setelah saya melakukan instlasi open-jdk-7. Menggunakan wget:

wget --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u74-b02/jdk-8u74-linux-x64.tar.gz

Langkah selanjutnya adalah melakukan extract


# mv jdk-8u74-linux-x64.tar.gz /usr/local/src
# cd /usr/local/src/
# tar -zxf jdk-8u74-linux-x64.tar.gz
# cd jdk1.8.0_74/bin/
# ./java

Setelah melakukan eksekusi didapatkan error kurang lebih: No such file or directory.

Dari beberapa referensi didapatkan bahwa hal ini terjadi karena terdapat requirement file yang tidak didapatkan. Pada kasus ini didapatkan hasil …

# strings java
/lib64/ld-linux-x86-64.so.2
libpthread.so.0
_Jv_RegisterClasses
libjli.so
__gmon_start__
JLI_Launch
libdl.so.2
libc.so.6
__libc_start_main
lib.so
$ORIGIN/../lib/amd64/jli:$ORIGIN/../lib/amd64
SUNWprivate_1.1
GLIBC_2.2.5
fff.
fffff.
l$ L
t$(L
|$0H
1.8.0_74-b02
java

Patut dilihat pada bagian baris /lib64/ld-linux-x86-64.so.2, rujukan yang bisa dijadikan acuan tentang file library yang menjadi referensi berjalannya java, yang pada saat itu tidak ada di OS yang digunakan.

Untuk mendapatkan paket file ini dari beberapa penelusuran didapatkan ada paket yang mesti diinstal, yaitu libc6-amd64.

# apt-get install libc6-amd64
# /usr/local/src/jdk1.8.0_74/bin/java -version
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)

Langkah selanjutnya tinggal melakukan upgrade terhadap java yang aktif pada lingkungan debian menggunakan update-alternatives.

Sumber:

  1. https://packages.debian.org/search?keywords=libc6
  2. http://stackoverflow.com/questions/9467952/what-libraries-are-needed-for-this-binary-to-run
  3. http://unix.stackexchange.com/questions/45277/executing-binary-file-file-not-found

 

Let’s Encrypt Untuk Aplikasi LPSE SPSE 3.6

Menggunakan instalasi yang dilakukan pada tulisan sebelumnya maka selanjutnya adalah untuk instalasi pada LPSE  3.6.

Pada arsitektur aplikasi LPSE (SPSE 3.6), kita bisa melakukan pemilihan apakah implementasi SSL akan dilakukan di tomcat server atau pada Apache2. Dari beberapa permasalahan sejenis pada literatur (bisa dilihat di bawah) ternyata akan lebih mudah apabila dilakukan saja pada Apache2, jadi proses yang terjadi adalah CLIENT > HTTPS > Proxy Apache2 > Aplikasi. Tentu saja ada beberapa implikasi keamanan pada perancangan seperti ini, selain itu aplikasi SPSE ada pada server yang sama.

Namun kendala yang terjadi adalah bahwa aplikasi SPSE ini berjalan di belakang Apache2 (Apache2 berlaku sebagai proxy), sehingga agar Let’s Encrypt bisa melakukan proses verifikasi kepemilikan domain kita harus menyediakan akses dari Internet terhadap file hasil generate Let’s Encrypt yang ada pada folder  .well-known/ (sila lihat tulisan sebelumnya) melalui URL LPSE sehingga Let’s Encrypt dapat mengaksesnya ke web.lpse.go.id/eproc/.well-known/<file-lainnya>.

Banyak cara untuk solusinya, namun saya memilih agar tidak sampai layanan berhenti atau saya harus terlalu banyak melakukan perubahan. Karena itu salah satu pemecahan yang dipilih adalah dengan menambahkan perintah redirect, sehingga saat Let’s Encrypt melakukan proses validasi maka apache2 akan melakukan redirect ke folder .well-known.

... (pada file virtual host SPSE) ...
# Let's encrypt
Redirect /.well-known/ http://web.lpse.go.id/eproc/.well-known/
... (baris config yang lain) ...

Lalu melakukan generate certkey …

# ./letsencrypt-auto certonly --webroot -w /web/root/path/eprocnya -d web.lpse.go.id

Kemudian akan muncul beberapa dialog seperti pengisian email dan user agreement. Apabila berhasil akan muncul folder untuk certificate key yang bisa digunakan di Apache2 server SPSE, biasanya ada di folder /etc/letsencrypt/live/web.lpse.go.id/.

Langkah selanjutnya adalah menambahkan setting virtual host agar melayani HTTPS pada file config virtual host web SPSE yang sudah ada, kurang lebih seperti ini…

<VirtualHost *:443>
SSLEngine On
LogLevel warn
SSLCertificateKeyFile /etc/letsencrypt/live/web.lpse.go.id/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/web.lpse.go.id/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/web.lpse.go.id/chain.pem
CustomLog /var/log/apache2/ssl_access_kalteng.log
RedirectMatch ^/$ /eproc/
RedirectMatch ^/latihan$ /latihan/
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript application/x-httpd-php
SetInputFilter DEFLATE
SetOutputFilter DEFLATE
</VirtualHost>

Kemudian pastikan bahwa module ssl sudah on dan restart service apache2.

# a2enmod ssl
# service apache2 restart

Silahkan lakukan test untuk ini dengan mengakses https://web.lpse.go.id dan pastikan firewall tidak melakukan blocking ke port HTTPS di 443.

Sumber:

  1. http://www.apachetutor.org/admin/reverseproxies
  2. https://maximilian-boehm.com/hp2121/Create-a-Java-Keystore-JKS-from-Let-s-Encrypt-Certificates.htm
  3. https://www.digitalocean.com/community/tutorials/how-to-secure-haproxy-with-let-s-encrypt-on-ubuntu-14-04
  4. http://serverfault.com/questions/505316/ssl-setup-with-apache-in-front-of-tomcat
  5. https://confluence.atlassian.com/jira/integrating-jira-with-apache-using-ssl-203395380.html
  6. https://community.letsencrypt.org/t/how-to-use-the-certificate-for-tomcat/3677/2
  7. http://serverfault.com/questions/505316/ssl-setup-with-apache-in-front-of-tomcat
  8. http://serverfault.com/questions/486042/use-apache-as-a-https-to-http-proxy

Let’s Encrypt Pada Apache2 Debian 6

Let’s Encrypt merupakan layanan yang menyediakan sertifikat SSL gratis, singkatnya demikian. Namun langkah instalasi yang mudah tersebut tidak dapat berjalan dengan baik saat dilaksanakan melalui Debian 6 karena paket Python serta beberapa dependencies tidak update. Karena itu di server saya tidak dapat menggunakan layanan let’s encrypt dengan salah satu plugin apache dan harus secara manual melakukan generate sertifikatnya saja.

Untuk melakukannya saya harus melakukan instalasi git …

# apt-get install git

Langkah berikutnya adalah melakukan cloning repository Let’s Encrypt

# git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
# cd /opt/letsencrypt
# ./letsencrypt-auto --help

Langkah berikutnya adalah melakukan generate sertifikat dengan model certonly.

# ./letsencrypt-auto certonly --webroot -w /var/www/webku.com -d webku.com

Pastikan bahwa webku.com dapat diakses dan lestencrypt akan membuat sebuah folder pada web root dengan nama folder .well-known/<karakter lainnya>, pastikan bahwa folder tersebut dan isi lainnya dapat diakses publik. Agar bisa aktif pula pada domain dengan CNAME http://www.<domainnya&gt; maka tambahkan lagi perintah di atas dengan -d www·webku.com.

Apabila berhasil akan ada beberapa dialog yang meminta email dan juga user agreement, pastikan bahwa hal tersebut terpenuhi hingga kemudian muncul pernyataan berhasil.

Hasil generate oleh Let’s Encrypt akan terdapat pada folder /etc/letsencrypt/live/webku.com/ yang nanti akan digunakan oleh apache2.

Dilanjutkan setting pada apache2, dengan melakukan aktifasi HTTPS di Apache; modul ssl harus diaktifkan.

# a2enmod ssl

Kemudian pastikan bahwa port 443 diaktifkan, pada setting di server saya harus melakukan deklarasi secara eksplisit terhadap port untuk HTTPS …


# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
NameVirtualHost *:443
Listen ABC.DEF.GHI.JKL:443

Kemudian tambahkan pada bagian virtual host agar apache2 menggunakan certificate yang telah digenerate menggunakan Let’s Encrypt.

... (isi virtual host lain ) ...
SSLCertificateKeyFile /etc/letsencrypt/live/webku.com/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/webku.com/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/webku.com/chain.pem
... (isi virtual host lain) ...

Langkah selanjutnya adalah restart service apache2.
service apache2 restart

Jangan lupa pada firewall agar membuka akses ke port HTTPS di 443. Karena sya menggunakan shorewall maka saya buka akses tersebut di /etc/shorewall/rules


HTTPS/Accept net $FW

Tentu saja untuk testing pastikan sudah bisa diakses menggunakan HTTPS.

Sumber:

Login Tanpa Password Menggunakan ssh

Tag

Untuk melakukan ini kita harus melakukan generate kunci private dan publik pada mesin yang kita gunakan serta hasil generate key yang menghasilkan kunci publik akan di-upload ke server.

Pada komputer saya:

$ ssh-keygen -t rsa

Pada permintaan untuk melakukan entry passphrase saya tidak memasukkan password, kecuali kita menginginkan security yang lebih maka disarankan untuk dimasukkan permintaan untuk password. Namun disini karena komputer saya hanya saya yang menggunakan dan kebutuhan saya untuk password-less, maka saya tidak memasukkannya.

Kemudian hasil dari generate ssh-keygen tersebut akan menghasilkan dua buah file ( default akan ada di ~/.ssh/ ) dengan nama file: id_rsa dan id_rsa.pub dengan masing-masing file merupakan kunci private dan kunci public. Untuk kunci publik akan saya copy-kan ke server yang saya kelola.

Sekarang saya tinggal copy-kan ke server yang beralamat di AAA.BBB.CCC.DDD port 7890 dan user saya adalah ‘usersaya’.

$ cat ~/.ssh/id_rsa.pub | ssh AAA.BBB.CCC.DDD -p 7890 -l usersaya 'cat >> ~/.ssh/authorized_keys'

Apabila tidak ada masalah maka akan muncul permintaan password, saat diketikkan password maka kunci publik telah di-copy-kan ke server pada file ~/.ssh/authorized_keys.

Untuk mengujinya saya kemudian login seperti biasa dan semestinya permintaan untuk password tidak muncul lagi.

nginx Menggantikan Apache di Paket lampp/xampp

Tag

, ,

Untuk tulisan ini saya memiliki XAMPP yang telah digunakan untuk melakukan developing beberapa project aplikasi berbasis WEB menggunakan Apache + MySQL + PHP5.

Akan tetapi dikarenakan komputer yang semakin menua, serta sudah beberapa kali komputer yang saya gunakan untuk melakukan pengembangan mengalami gagal loading akibat proses yang terlalu berat saya pikir sudah saatnya untuk melakukan perubahan dengan cara menggantikan komponen Apache dengan Nginx. Akan tetapi untuk MySQL dan komponen lain yang saya anggap penting seperti PHPMyAdmin saya tetap menggunakan milik XAMPP. Baca lebih lanjut