Mengganti Ethernet Instance Number – RHEL 6

Di Linux, network interface card (NIC) Ethernet dikenali dengan simbol eth. Masing-masing interface punya nomor yang unik. Misalnya bila cuma ada 1 interface maka namanya adalah eth0. Bila ada 2, maka kita bisa lihat akan ada 2 interface : eth0 dan eth1. Penomoran ini diatur udev (Dynamic Device Management). Saat proses booting, udev akan mencocokan data perangkat yang aktif dengan aturan yang sudah ada sebelumnya. Misalnya untuk NIC, udev menyimpan aturan (rule) penomoran NIC dalam berkas /etc/udev/rules.d/70-persistent-net.rules seperti contoh berikut ini.

root@rhel6:~# cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.


# PCI device 0x8086:0x100e (e1000)


# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:d9:19:33", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"


# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:14:05:a7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
root@rhel6:~# 

Pada contoh di atas ada 2 NIC yang terdaftar. Ethernet dengan MAC address “08:00:27:d9:19:33” akan selalu diberi nama eth0 sedangkan NIC dengan MAC Address “08:00:27:14:05:a7” akan diberi nama eth1. Misalnya ada penambahan NIC baru pada komputer, udev akan otomatis menambahkan 1 nomor sehingga NIC tersebut akan dikenali sebagai eth2.

Selain rule untuk perangkat jaringan di atas, udev juga memiliki beberapa berkas lain seperti misalnya :

[root@dummyuim rules.d]# ll
total 36
-rw-r--r--. 1 root root 1652 Nov 20  2010 60-fprint-autosuspend.rules
-rw-r--r--. 1 root root  153 Oct 10  2013 60-ipath.rules
-rw-r--r--. 1 root root 1060 Jul 25  2010 60-pcmcia.rules
-rw-r--r--. 1 root root  316 Oct 12  2013 60-raw.rules
-rw-r--r--. 1 root root  530 Oct  1 22:43 70-persistent-cd.rules
-rw-r--r--. 1 root root  585 Oct  2 07:50 70-persistent-net.rules
-rw-r--r--. 1 root root  320 Dec 20  2012 90-alsa.rules
-rw-r--r--. 1 root root   83 May 21  2011 90-hal.rules
-rw-r--r--. 1 root root  292 Nov 18  2013 98-kexec.rules
[root@dummyuim rules.d]# 

Proses udev akan melakukan scanning pada semua perangkat yang terdeteksi oleh kernel Linux saat proses booting berlangsung. Tidak cuma mengatur penomoran masing-masing perangkat, udev juga bertanggung jawab untuk menjalankan program yang diperlukan untuk mengaktifkan perangkat. Misalnya dengan udev kita bisa menentukan driver module mana yang diperlukan oleh sebuah perangkat (udev akan memanggil program modprobe untuk mengaktifkan driver tersebut).

Kembali ke soal penamaan network interface tadi, biasanya penomoran Ethernet akan relatif statis tidak pernah berubah-ubah. Penomoran Ethernet akan berubah pada kasus tertentu saja; misalnya ada penggantian NIC yang rusak. Tentu hal semacam itu relatif jarang terjadi. Berbeda halnya saat saya menggunakan VirtualBox, saya bisa dengan mudah menggonta-ganti NIC & MAC Address-nya dengan mudah. Gambar berikut adalah contoh cara mengganti MAC Address pada sebuah virtual machine (VirtualBox akan otomatis menghasilkan MAC Address baru):

Misalnya VM RedHat Linux saya awalnya memiliki 1 buah NIC dengan MAC Address “08:00:27:d9:19:33”. NIC tersebut dikenali oleh Linux sebagai eth0. Lalu saya sengaja mengganti MAC Address-nya “08:00:27:14:05:a7”. Karena pada contoh ini saya menggunakan Network Manager & DHCP, Network Manager akan otomatis mengaktifkan NIC tersebut. Akibatnya saya mendapati NIC saya berubah menjadi eth1 seperti contoh berikut ini :

root@rhel6:ttirtawi# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:14:05:a7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.2/24 brd 192.168.56.255 scope global eth1
    inet6 fe80::a00:27ff:fe14:5a7/64 scope link
       valid_lft forever preferred_lft forever
root@rhel6:ttirtawi# 

Bila saya cek udev rule saya mendapati 2 baris yang mengatur Ethernet seperti ini :

root@rhel6:~# cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.


# PCI device 0x8086:0x100e (e1000)


# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:d9:19:33", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"


# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:14:05:a7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
root@rhel6:~# 

Bila saya ingin mengembalikan nama eth0 pada NIC tersebut saya bisa memodifikasi berkas 70-persistent-net.rules tadi menjadi seperti ini :

root@rhel6:~# vi /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.


# PCI device 0x8086:0x100e (e1000)


# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:14:05:a7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
root@rhel6:~# 

Saya hapus saja baris yang masih mengatur NIC eth0 & MAC Address lama (“08:00:27:d9:19:33”). Lalu saya ubah baris berisi eth1 menjadi eth0 (untuk baris berisi MAC Address “08:00:27:14:05:a7”). Untuk mengaktifkan rule baru tersebut, cara paling mudah adalah dengan me-restart VM ini. Bila saya perlu melakukannya tanpa me-restart mesin, saya bisa menggunakan perintah udevadm.

Jadi setelah mengubah berkas 70-persistent-net.rules tadi, saya perlu menonaktifkan interface eth1 terlebih dulu seperti contoh berikut ini :

root@rhel6:~# ifconfig eth1 down

Barulah saya bisa menggunakan perintah udevadm seperti berikut ini :

root@rhel6:~# udevadm trigger --attr-match=subsystem=net

Perintah tersebut “memaksa” proses udev untuk membaca ulang rules yang dimilikinya & mengatur ulang penomoran Ethernet. Dengan begitu NIC yang awalnya menggunakan nama eth1 sekarang otomatis berubah menjadi eth0.

root@rhel6:~# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 08:00:27:14:05:A7 
          inet addr:192.168.56.2  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe14:5a7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1180 (1.1 KiB)  TX bytes:2482 (2.4 KiB)


lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:757 errors:0 dropped:0 overruns:0 frame:0
          TX packets:757 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:65098 (63.5 KiB)  TX bytes:65098 (63.5 KiB)


root@rhel6:~# 

Kira-kira begitu catatan saya untuk mengubah penamaan network interface Ethernet pada RedHat Linux.

Multipathing iSCSI Disk

Sebagai lanjutan tulisan sebelumnya tentang iSCSI, kali ini saya ingin menuliskan tentang koneksi iSCSI dengan multipathing. Multipathing maksudnya adalah iSCSI Initiator (client) akan mengakses 1 shared disk melalui 2 network yang berbeda (ada tambahan redundant link). Dengan tambahan redundant link, koneksi iSCSI menjadi lebih aman terhadap kemungkinan terjadinya masalah pada jaringan.

Simple Shared Storage with Redundant iSCSI

Masih menggunakan contoh dari tulisan sebelumnya, saya menggunakan 2 buah mesin untuk mensimulasikan iSCSI Multipathing ini. Mesin pertama yang bertindak sebagai iSCSI Target adalah sansvr01. Sementara mesin yang akan bertindak sebagai iSCSI Initiator adalah dev01.

Menyiapkan iSCSI Redundant Link

Di contoh sebelumnya sansvr01 hanya punya 2 IP, satu untuk akses publik (192.168.10.111) dan satu lagi untuk komunikasi iSCSI (172.16.10.5). iSCSI Target & iSCSI Initiator berkomunikasi melalui jaringan 172.16.10.0/24. Nantinya akan ada 1 jalur komunikasi baru dari iSCSI Target ke iSCSI Initiator melalui jaringan 172.16.11.0/24. Untuk mesimulasikan multipathing, saya tambahkan satu interface baru (eth2) pada sansvr01 dengan IP 172.16.11.5.

root@sansvr01:~# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 52:54:00:66:EC:19  
          inet addr:192.168.10.111  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fe66:ec19/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11951 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1457 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1485359 (1.4 MiB)  TX bytes:217666 (212.5 KiB)
          Interrupt:11 Base address:0x6000 

eth1      Link encap:Ethernet  HWaddr 52:54:00:8B:EC:A5  
          inet addr:172.16.10.5  Bcast:172.16.10.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fe8b:eca5/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:15283 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8546 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1232962 (1.1 MiB)  TX bytes:3726368 (3.5 MiB)
          Interrupt:11 Base address:0x4000 

eth2      Link encap:Ethernet  HWaddr 52:54:00:06:A1:35  
          inet addr:172.16.11.5  Bcast:172.16.11.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fe06:a135/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:438 errors:0 dropped:0 overruns:0 frame:0
          TX packets:91 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:57372 (56.0 KiB)  TX bytes:10219 (9.9 KiB)
          Interrupt:10 Base address:0x8000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

root@sansvr01:~# 

Saya juga tambahkan IP baru (eth2 : 172.16.11.31) pada mesin dev01 :

root@dev01:~# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 52:54:00:A6:28:13  
          inet addr:192.168.10.31  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fea6:2813/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:22032 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6381 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2570471 (2.4 MiB)  TX bytes:1042792 (1018.3 KiB)
          Interrupt:11 Base address:0x6000 

eth1      Link encap:Ethernet  HWaddr 52:54:00:EC:9B:73  
          inet addr:172.16.10.31  Bcast:172.16.10.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:feec:9b73/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:26783 errors:0 dropped:0 overruns:0 frame:0
          TX packets:56508 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:14197492 (13.5 MiB)  TX bytes:42777972 (40.7 MiB)
          Interrupt:11 Base address:0x4000 

eth2      Link encap:Ethernet  HWaddr 52:54:00:5F:15:D8  
          inet addr:172.16.11.31  Bcast:172.16.11.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fe5f:15d8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:26285 errors:0 dropped:0 overruns:0 frame:0
          TX packets:56686 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:14100612 (13.4 MiB)  TX bytes:43110648 (41.1 MiB)
          Interrupt:10 Base address:0x8000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:104 errors:0 dropped:0 overruns:0 frame:0
          TX packets:104 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:9084 (8.8 KiB)  TX bytes:9084 (8.8 KiB)

root@dev01:~# 

Yang perlu dilakukan sekarang adalah memodifikasi berkas targets.conf untuk mendaftarkan IP baru milik dev01.

root@sansvr01:~# cat /etc/tgt/targets.conf
default-driver iscsi

<target iqn.2014-04.localdomain:sansvr01.shared01>
    backing-store /dev/mapper/vg_shareddisk-shared01
    initiator-address 172.16.10.31
    initiator-address 172.16.11.31
</target>
root@sansvr01:~# 

Berikutnya kita perlu “memaksa” servis tgtd di sansvr01 untuk menggunakan konfigurasi baru :

root@sansvr01:~# service tgtd force-reload
Force-updating SCSI target daemon configuration:           [  OK  ]
root@sansvr01:~# 

Kita bisa pastikan ACL baru sudah aktif dengan perintah tgt-admin :

root@sansvr01:~# tgt-admin -s
Target 1: iqn.2014-04.localdomain:sansvr01.shared01
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 524 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/mapper/vg_shareddisk-shared01
            Backing store flags: 
    Account information:
    ACL information:
        172.16.10.31
        172.16.11.31
root@sansvr01:~# 

Penting sekali untuk menambah konfigurasi firewall untuk mengijinkan iSCSI Initiator mengakses shared disk melalui network 172.16.11.0/24 :

root@sansvr01:~# iptables -I INPUT -p tcp -s 172.16.11.0/24 --dport 3260 -j ACCEPT
root@sansvr01:~# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
root@sansvr01:~#

Mengatur Multipath Di iSCSI Initiator

Sekarang mesin dev01 bisa mengenali shared disk dari kedua network :

root@dev01:~# iscsiadm --mode discovery --type sendtargets --portal 172.16.11.5:3260 --discover
172.16.11.5:3260,1 iqn.2014-04.localdomain:sansvr01.shared01
root@dev01:~# iscsiadm --mode discovery --type sendtargets --portal 172.16.10.5:3260 --discover
172.16.10.5:3260,1 iqn.2014-04.localdomain:sansvr01.shared01
root@dev01:~# 

Mesin dev01 juga bisa login & mengakses shared disk yang sama lewat 2 target IP yang berbeda :

root@dev01:~# iscsiadm --mode node --targetname="iqn.2014-04.localdomain:sansvr01.shared01" --portal 172.16.10.5:3260 --login
Logging in to [iface: default, target: iqn.2014-04.localdomain:sansvr01.shared01, portal: 172.16.10.5,3260] (multiple)
Login to [iface: default, target: iqn.2014-04.localdomain:sansvr01.shared01, portal: 172.16.10.5,3260] successful.
root@dev01:~# 
root@dev01:~# iscsiadm --mode node --targetname="iqn.2014-04.localdomain:sansvr01.shared01" --portal 172.16.11.5:3260 --login
Logging in to [iface: default, target: iqn.2014-04.localdomain:sansvr01.shared01, portal: 172.16.11.5,3260] (multiple)
Login to [iface: default, target: iqn.2014-04.localdomain:sansvr01.shared01, portal: 172.16.11.5,3260] successful.
root@dev01:~# 

Belum cukup sampai di sini konfigurasinya, mesin dev01 melihat iqn.2014-04.localdomain:sansvr01.shared01 sebagai 2 external disk yang berbeda.

root@dev01:~# cat /proc/partitions 
major minor  #blocks  name

   8        0    8388608 sda
   8        1     512000 sda1
   8        2    7875584 sda2
 253        0    7036928 dm-0
 253        1     835584 dm-1
   8       16     512000 sdb
   8       32     512000 sdc
root@dev01:~# 

Dari informasi di atas, mesin dev01 menganggap ada 2 harddisk baru yaitu sdb & sdc. Perintah fdisk juga menampilkan hal yang sama :

root@dev01:~# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002d485

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        1045     7875584   8e  Linux LVM

Disk /dev/mapper/vg_dev01-lv_root: 7205 MB, 7205814272 bytes
255 heads, 63 sectors/track, 876 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


Disk /dev/mapper/vg_dev01-lv_swap: 855 MB, 855638016 bytes
255 heads, 63 sectors/track, 104 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


Disk /dev/sdb: 524 MB, 524288000 bytes
17 heads, 59 sectors/track, 1020 cylinders
Units = cylinders of 1003 * 512 = 513536 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x636c0fb3

   Device Boot      Start         End      Blocks   Id  System

Disk /dev/sdc: 524 MB, 524288000 bytes
17 heads, 59 sectors/track, 1020 cylinders
Units = cylinders of 1003 * 512 = 513536 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x636c0fb3

   Device Boot      Start         End      Blocks   Id  System
root@dev01:~# 

Ini yang masih perlu diperbaiki karena sebenarnya shared disk yang diakses oleh mesin dev01 hanya 1 buah. Dengan multipathing, kita memberitahu OS bahwa sebenarnya /dev/sdb & /dev/sdc mengacu pada “physical storage” yang sama. Hanya proses komunikasinya bisa melalui 2 jalur yang berbeda.

Linux punya daemon multipathd yang bisa melakan proses multipathing. multipathd akan bertugas mengatur pertukaran data dari server ke storage melalui 2 jalur komunikasi yang berbeda. Bila satu jalur putus, multipathd akan tetep mengalihkan jalur pertukaran data tadi melalui redundant link-nya. Kalau mengacu pada gambar ilustrasi di atas, pertukaran data antara iSCSI Target & iSCSI Initiator bisa melalui network 172.16.10.0 atau 172.16.11.0. Bila dua jalur tadi digunakan bersama-sama secara bergantian, ini dikenal dengan konfigurasi round-robbin. Namun misalnya bila transmisi data hanya melalui network 172.16.10.0 saja, maka network 172.16.11.0 akan standby kalau sewaktu-waktu ada gangguan transmisi data pada network 172.16.10.0. Konfigurasi seperti ini dikenal sebagai active-passive (atau active-standby)

Di mesin dev01 sebagai iSCSI Initiator, saya perlu menginstal paket device-mapper-multipath :

root@dev01:~# yum install device-mapper-multipath

Supaya kernel Linux bisa melakukan proses multipathing ini, kita perlu mengaktifkan modul dm_multipath dengan perintah modprobe seperti contoh berikut ini :

root@dev01:~# modprobe dm_multipath
root@dev01:~# lsmod  | grep dm_multipath
dm_multipath           17724  2 dm_round_robin
dm_mod                 84209  15 dm_multipath,dm_mirror,dm_log
root@dev01:~# 

Konfigurasi multipath disimpan dalam berkas /etc/multipath.conf. Kita bisa dapatkan contoh sampel berkas konfigurasinya dari /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf. Berikut ini adalah contoh berkas multipath.conf yang saya gunakan sekarang ini :

root@dev01:~# cat /etc/multipath.conf 
defaults {
    udev_dir        /dev
    polling_interval    10
    path_selector       "round-robin 0"
    path_grouping_policy    multibus
    getuid_callout      "/lib/udev/scsi_id --replace-whitespace --whitelisted --device=/dev/%n"
    prio            const
    path_checker        readsector0
    rr_min_io       100
    max_fds         8192
    rr_weight       priorities
    failback        immediate
    no_path_retry       fail
    user_friendly_names yes
}
blacklist {
    wwid *
    devnode "sda"
}
blacklist_exceptions {
    wwid "1IET_00010001"
}
root@dev01:~# 

Beberapa detail yang perlu diketahui dari contoh konfigurasi di atas antara lain adalah :

  • blacklist : opsi ini dipakai untuk mendaftarkan semua harddisk yang tidak akan diikutsertakan dalam proses multipathing, seperti misalnya internal disk (boot disk). Pada contoh ini mesin dev01 memiliki boot disk /dev/sda.
  • blacklist_exceptions : semua disk yang dimasukkan dalam kategori ini akan ikut menggunakan konfigurasi multipathing. Dari mana kita bisa tahu nama wwid sebuah harddisk? Kita bisa lihat dari hasil perintah scsi_id berikut ini :
    root@dev01:~# scsi_id -g -u -d /dev/sdb
    1IET_00010001
    root@dev01:~# scsi_id -g -u -d /dev/sdc
    1IET_00010001
    root@dev01:~# 
    

    Dalam konteks iSCSI, nama SCSI ID ini sama dengan yang kita peroleh dari perintah tgt-admin pada mesin iSCSI Target.

    root@sansvr01:~# tgt-admin -s
    Target 1: iqn.2014-04.localdomain:sansvr01.shared01
        System information:
            Driver: iscsi
            State: ready
        I_T nexus information:
        LUN information:
            LUN: 0
                Type: controller
                SCSI ID: IET     00010000
                SCSI SN: beaf10
                Size: 0 MB, Block size: 1
                Online: Yes
                Removable media: No
                Prevent removal: No
                Readonly: No
                Backing store type: null
                Backing store path: None
                Backing store flags: 
            LUN: 1
                Type: disk
                SCSI ID: IET     00010001
                SCSI SN: beaf11
                Size: 524 MB, Block size: 512
                Online: Yes
                Removable media: No
                Prevent removal: No
                Readonly: No
                Backing store type: rdwr
                Backing store path: /dev/mapper/vg_shareddisk-shared01
                Backing store flags: 
        Account information:
        ACL information:
            172.16.10.31
            172.16.11.31
    root@sansvr01:~#
    
  • path_selector : opsi ini dipakai untuk menentukan link mana yang akan digunakan untuk transmisi data. Bila diset sebagai round-robin 0 maka data akan ditransmisikan melalui masing-masing link yang aktif secara bergantian (looping)
  • --replace-whitespace : ini gunanya untuk menghapus spasi pada nama disk (dalam hal ini adalah iSCSI Disk). Untuk melihat nama (atau ID) dari iSCSI disk tadi kita bisa gunakan perintah scsi_id seperti contoh berikut ini :
    root@dev01:~# scsi_id --device=/dev/sdc --whitelisted 
    1IET     00010001
    root@dev01:~# 
    

    Tanpa opsi --replace-whitespace ID dari /dev/sdc adalah 1IET 00010001. Bandingkan hasilnya setelah kita gunakan opsi --replace-whitespace berikut ini :

    root@dev01:~# scsi_id --device=/dev/sdc --whitelisted --replace-whitespace
    1IET_00010001
    root@dev01:~# 
    
  • user_friendly_names : opsi ini memungkinkan kita untuk memberi nama yang lebih mudah dikenali untuk setiap multipath-disk. Pada contoh tadi, akan sulit mengidentifikasi nama shared disk “1IET_00010001”. Kita bisa mendaftarkan nama alias untuk setiap WWID tersebut ke dalam berkas /etc/multipath/bindings seperti contoh di bawah ini
    root@dev01:~# cat /etc/multipath/bindings 
    # Multipath bindings, Version : 1.0
    # NOTE: this file is automatically maintained by the multipath program.
    # You should not need to edit this file in normal circumstances.
    #
    # Format:
    # alias wwid
    #
    sansvr01_shared0 1IET_00010001
    root@dev01:~# 
    

    Pada contoh di atas saya memilih untuk memberi alias iSCSI disk “1IET_00010001” menjadi “sansvr01_shared01”. Menurut saya ini jauh lebih mudah untuk diingat-ingat, jadi saya bisa langsung tahu kalau ini adalah iSCSI disk dari mesin sansvr01 dengan nama shared disk shared01.

Setelah konfigurasi tadi selesai dibuat & modul dm_multipath sudah di-load oleh kernel, kita bisa mulai aktifkan service multipathd :

root@dev01:~# service multipathd status
multipathd is stopped
root@dev01:~# 
root@dev01:~# service multipathd start
Starting multipathd daemon:                                [  OK  ]
root@dev01:~# 

Penting untuk mengatur service multipathd supaya aktif otomatis saat proses booting:

root@dev01:~# chkconfig multipathd on

Kita bisa melihat hasil akhir proses multipathing dengan perintah multipath seperti contoh di bawah ini :

root@dev01:~# multipath -ll
sansvr01_shared0 (1IET_00010001) dm-2 IET,VIRTUAL-DISK
size=500M features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  |- 4:0:0:1 sdb 8:16 active ready running
  `- 5:0:0:1 sdc 8:32 active ready running
root@dev01:~# 

Jadi sekarang yang kita “anggap” sebagai harddisk oleh mesin dev01 bukan lagi /dev/sdb atau /dev/sdc melainkan multipath disk-nya yaitu /dev/mapper/sansvr01_shared0.

root@dev01:~# fdisk -l /dev/mapper/sansvr01_shared0

Disk /dev/mapper/sansvr01_shared0: 524 MB, 524288000 bytes
255 heads, 63 sectors/track, 63 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x636c0fb3

                      Device Boot      Start         End      Blocks   Id  System
root@dev01:~# 

Langkah-langkah untuk menyiapkan filesystem pada multipath disk sama persis seperti layaknya harddisk konvensional :

  1. Buat partisi terlebih dulu :
    root@dev01:~# fdisk  /dev/mapper/sansvr01_shared0
    
    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
             switch off the mode (command 'c') and change display units to
             sectors (command 'u').
    
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 1
    First cylinder (1-63, default 1): 
    Using default value 1
    Last cylinder, +cylinders or +size{K,M,G} (1-63, default 63): 
    Using default value 63
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
    WARNING: Re-reading the partition table failed with error 22: Invalid argument.
    The kernel still uses the old table. The new table will be used at
    the next reboot or after you run partprobe(8) or kpartx(8)
    Syncing disks.
    root@dev01:~#
    
  2. Cek struktur partisinya :
    root@dev01:~# fdisk -l /dev/mapper/sansvr01_shared0
    
    Disk /dev/mapper/sansvr01_shared0: 524 MB, 524288000 bytes
    255 heads, 63 sectors/track, 63 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x636c0fb3
    
                          Device Boot      Start         End      Blocks   Id  System
    /dev/mapper/sansvr01_shared0p1               1          63      506016   83  Linux
    root@dev01:~# 
    
  3. Sebagai contoh, saya pilih filesystem ext4 :
    root@dev01:~#  mkfs.ext4 /dev/mapper/sansvr01_shared0p1 
    mke2fs 1.41.12 (17-May-2010)
    Filesystem label=
    OS type: Linux
    Block size=1024 (log=0)
    Fragment size=1024 (log=0)
    Stride=0 blocks, Stripe width=0 blocks
    126976 inodes, 506016 blocks
    25300 blocks (5.00%) reserved for the super user
    First data block=1
    Maximum filesystem blocks=67633152
    62 block groups
    8192 blocks per group, 8192 fragments per group
    2048 inodes per group
    Superblock backups stored on blocks: 
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
    
    Writing inode tables: done                            
    Creating journal (8192 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    This filesystem will be automatically checked every 20 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.
    root@dev01:~# 
    
  4. Mount partisi baru tadi :
    root@dev01:~# mount /dev/mapper/sansvr01_shared0p1 /sharedstorage/
    
  5. Partisi baru sansvr01_shared01 dengan filesystem ext4 sudah siap digunakan :
    root@dev01:~# df -h
    Filesystem                      Size  Used Avail Use% Mounted on
    /dev/mapper/vg_dev01-lv_root    6.7G  854M  5.5G  14% /
    tmpfs                           499M     0  499M   0% /dev/shm
    /dev/sda1                       485M   32M  428M   7% /boot
    /dev/mapper/sansvr01_shared0p1  479M   11M  444M   3% /sharedstorage
    root@dev01:~#   
    

iSCSI Server Dengan CentOS 6.5

iSCSI adalah teknologi yang biasa digunakan untuk menghubungkan server dengan SAN (storage area network). Biasanya harddisk terhubung langsung dengan server melalui konektor seperti SATA, SCSI, atau SAS. Protokol iSCSI mengemulasikan koneksi SCSI melalui jaringan TCP/IP. Keuntungan utamanya adalah fleksibilitas dalam menyambungkan server dengan storage (atau disk array). Jauh lebih flexible karena koneksinya melalui jaringan TCP/IP. Untuk mendapat throughput yang cukup untuk keperluan transfer data, tentu perlu koneksi yang cukup stabil & setidaknya memiliki bandwidth 1 Gbps melalui Gigabit Ethernet.

Dalam terminologi iSCSI setidaknya ada 2 istilah penting yang perlu kita kenal :

  1. iSCSI Target : ini adalah server yang memiliki storage & membagi-bagikannya kepada server lain yang membutuhkan.
  2. iSCSI Initiator : ini adalah client yang akan butuh storage dengan mengakses iSCSI Target.

Simple Shared Disk Via iSCSI

Dalam tulisan ini saya akan menulis langkah-langkah sederhana untuk membuat CentOS Linux sebagai iSCSI Target & juga sebagai iSCSI Initiator seperti pada gambar di atas. Server yang akan menjadi iSCSI Target adalah sansvr01, sementara server yang menjadi iSCSI Initiator adalah dev01. Idenya adalah server dev01 membutuhkan tambahan storage, server ini akan menggunakan storage yang di-share oleh sansvr01.

Untuk komunikasi iSCSI, kedua server akan menggunakan network 172.16.10.0/24. Network ini terpisah dari public network 192.168.10.0/24.

Menyiapkan iSCSI Target

Mesin sansvr01 menggunakan CentOS 6.5 & mempunyai konfigurasi IP seperti berikut ini :

root@sansvr01:~# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:8b:ec:a5 brd ff:ff:ff:ff:ff:ff
    inet 172.16.10.5/24 brd 172.16.10.255 scope global eth1
    inet6 fe80::5054:ff:fe8b:eca5/64 scope link 
       valid_lft forever preferred_lft forever
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:66:ec:19 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.111/24 brd 192.168.10.255 scope global eth0
    inet6 fe80::5054:ff:fe66:ec19/64 scope link 
       valid_lft forever preferred_lft forever
root@sansvr01:~#

Mesin sansvr01 memiliki 2 buah harddisk yaitu sda (boot disk-nya) & sdb (harddisk yang akan dijadikan shared storage). : Continue reading

Mengganti Nama LVM Grup

Saat menginstal CentOS/RedHat Linux, kita bisa memilih untuk menggunakan LVM (Logical Volume Manger) untuk manajemen harddisk & partisinya. Bila kita memilih untuk menggunakan LVM, instaler biasanya akan menawarkan layout seperti ini :

Contoh Default Disk Layout CentOS

Boot disk akan dibagi menjadi 2 partisi, partisi pertama akan dialokasikan untuk direktori /boot & partisi kedua akan dialokasikan untuk menjadi anggota LVM. LVM grup akan diberi nama mengikuti hostname mesin tersebut. Pada contoh di atas misalnya, mesin tersebut memiliki hostname “devserver01” sehingga LVM akan menggunakan nama grup vg_devserver01. Baru kemudian di dalam group tersebut dibuat logical volume untuk partisi root & swap. Tentu kita bisa melakukan kustomisasi terhadap usulan disk layout tersebut.

Misalnya saya punya sebuah virtual server yang sudah berisi CentOS Linux. Mesin ini adalah hasil cloning dari virtual server lainnya. Karena merupakan hasil cloning, nama LVM grupnya masih mengikuti nama hostname server aslinya. Contohnya seperti ini :

[root@dev01 ~]# cat /etc/redhat-release 
CentOS release 6.5 (Final)
[root@dev01 ~]# df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/vg_websvr01-lv_root  6.7G  745M  5.6G  12% /
tmpfs                            499M     0  499M   0% /dev/shm
/dev/vda1                        485M   32M  428M   7% /boot
[root@dev01 ~]# 

Terlihat hostname server ini adalah dev01, sementara LVM grup-nya masih menggunakan nama lama vg_websvr01. Ini bisa dilihat juga dengan perintah vgs atau vgdisplay seperti berikut ini :

[root@dev01 ~]# vgs
  VG          #PV #LV #SN Attr   VSize VFree
  vg_websvr01   1   2   0 wz--n- 7.51g    0 
[root@dev01 ~]# 
[root@dev01 ~]# vgdisplay
  --- Volume group ---
  VG Name               vg_websvr01
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               7.51 GiB
  PE Size               4.00 MiB
  Total PE              1922
  Alloc PE / Size       1922 / 7.51 GiB
  Free  PE / Size       0 / 0   
  VG UUID               Mz4cE4-jzec-gfHi-H76W-cmFy-FA2U-SWXKrA

[root@dev01 ~]#

LVM menyediakan perintah vgrename untuk mengatasi hal ini. Saya bisa menggunakan vgrename untuk mengubah nama LVM grup tersebut, seperti yang terlihat pada contoh di bawah ini :

[root@dev01 ~]# vgrename vg_websvr01 vg_dev01
  Volume group "vg_websvr01" successfully renamed to "vg_dev01"
[root@dev01 ~]# 

Pada contoh ini saya mengubah nama grupnya dari vg_websvr01 menjadi vg_dev01. Sukses tidaknya perubahan nama grup ini bisa dicek lagi dengan perintah vgs atau vgdisplay seperti pada contoh di bawah ini :

[root@dev01 ~]# vgs
  VG       #PV #LV #SN Attr   VSize VFree
  vg_dev01   1   2   0 wz--n- 7.51g    0 
[root@dev01 ~]# vgdisplay
  --- Volume group ---
  VG Name               vg_dev01
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               7.51 GiB
  PE Size               4.00 MiB
  Total PE              1922
  Alloc PE / Size       1922 / 7.51 GiB
  Free  PE / Size       0 / 0   
  VG UUID               Mz4cE4-jzec-gfHi-H76W-cmFy-FA2U-SWXKrA

[root@dev01 ~]# 

Tidak cukup sampai di situ, ada 2 hal lain yang harus diperhatikan setelah mengubah nama LVM grup ini.

  1. Berkas /etc/fstab. Pengaturan mountpoint partisi disimpan dalam berkas ini. Isi berkas /etc/fstab mulanya seperti ini :

    [root@dev01 ~]# cat /etc/fstab 
    
    #
    # /etc/fstab
    # Created by anaconda on Sat Apr  5 07:37:58 2014
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/vg_websvr01-lv_root /                       ext4    defaults        1 1
    UUID=c0144e8c-75aa-4c57-a51c-1c4b8df0759f /boot                   ext4    defaults        1 2
    /dev/mapper/vg_websvr01-lv_swap swap                    swap    defaults        0 0
    tmpfs                   /dev/shm                tmpfs   defaults        0 0
    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    sysfs                   /sys                    sysfs   defaults        0 0
    proc                    /proc                   proc    defaults        0 0
    [root@dev01 ~]# 
    

    Bila berkas ini tidak diperbaharui, maka server ini akan gagal boot karena dia masih mencari partisi /dev/mapper/vg_websvr01-lv_root. Oleh karenanya kita perlu mengganti setiap nama LVM grup yang ada di dalam berkas /etc/fstab tersebut. Pada contoh saya tadi, berikut adalah isi berkas /etc/fstab setelah diperbaharui :

    [root@dev01 ~]# cat /etc/fstab 
    
    #
    # /etc/fstab
    # Created by anaconda on Sat Apr  5 07:37:58 2014
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/vg_dev01-lv_root /                       ext4    defaults        1 1
    UUID=c0144e8c-75aa-4c57-a51c-1c4b8df0759f /boot                   ext4    defaults        1 2
    /dev/mapper/vg_dev01-lv_swap swap                    swap    defaults        0 0
    tmpfs                   /dev/shm                tmpfs   defaults        0 0
    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    sysfs                   /sys                    sysfs   defaults        0 0
    proc                    /proc                   proc    defaults        0 0
    [root@dev01 ~]# 
    
  2. Berkas /boot/grub/grub.conf. Karena LVM grup yang tadi diubah namanya memiliki partisi root, kita perlu mengatur ulang isi berkas grub.conf. Tampilan awal dari berkas grub.conf adalah seperti berikut ini :

    [root@dev01 ~]# cat /boot/grub/grub.conf 
    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /boot/, eg.
    #          root (hd0,0)
    #          kernel /vmlinuz-version ro root=/dev/mapper/vg_websvr01-lv_root
    #          initrd /initrd-[generic-]version.img
    #boot=/dev/vda
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.32-431.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/vg_websvr01-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_websvr01/lv_root rd_NO_MD rd_LVM_LV=vg_websvr01/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-431.el6.x86_64.img
    [root@dev01 ~]# 
    

    Tanpa diubah sistem akan gagal menemukan mana partisi rootnya dan akibatnya gagal menemukan di mana lokasi kernel Linux berada. Setelah diubah tampilannya menjadi seperti ini :

    [root@dev01 ~]# cat /boot/grub/grub.conf 
    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /boot/, eg.
    #          root (hd0,0)
    #          kernel /vmlinuz-version ro root=/dev/mapper/vg_dev01-lv_root
    #          initrd /initrd-[generic-]version.img
    #boot=/dev/vda
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.32-431.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/vg_dev01-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_dev01/lv_root rd_NO_MD rd_LVM_LV=vg_dev01/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-431.el6.x86_64.img
    [root@dev01 ~]#
    

Untuk memastikan kedua berkas tadi sudah terbarui dengan benar, saya tinggal reboot servernya saja.

Yum Remove

CentOS & RedHat Linux menggunakan yum sebagai perintah untuk mengatur instalasi paket (package management tool). Saya baru tahu dari Wikipedia kalau yum itu sendiri adalah singkatan dari “Yellowdog Updater, Modified”. Sintaks pemakaiannya mirip dengan apt-get-nya Debian/Ubuntu Linux. Misalnya untuk menginstal paket dari repositori, saya bisa menggunakan perintah yum install, Misalnya saya ingin memasang paket Apache web server (httpd) :

[root@web01 ~]# yum install httpd
Loaded plugins: fastestmirror
Determining fastest mirrors
CDROM                                                                                                                                        | 4.0 kB     00:00 ... 
CDROM/primary_db                                                                                                                             | 4.4 MB     00:00 ... 
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.2.15-29.el6.centos will be installed
--> Processing Dependency: httpd-tools = 2.2.15-29.el6.centos for package: httpd-2.2.15-29.el6.centos.x86_64
--> Processing Dependency: apr-util-ldap for package: httpd-2.2.15-29.el6.centos.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.2.15-29.el6.centos.x86_64
--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.2.15-29.el6.centos.x86_64
--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.2.15-29.el6.centos.x86_64
--> Running transaction check
---> Package apr.x86_64 0:1.3.9-5.el6_2 will be installed
---> Package apr-util.x86_64 0:1.3.9-3.el6_0.1 will be installed
---> Package apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1 will be installed
---> Package httpd-tools.x86_64 0:2.2.15-29.el6.centos will be installed
---> Package mailcap.noarch 0:2.1.31-2.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================================================================
 Package                                  Arch                              Version                                          Repository                        Size
====================================================================================================================================================================
Installing:
 httpd                                    x86_64                            2.2.15-29.el6.centos                             CDROM                            821 k
Installing for dependencies:
 apr                                      x86_64                            1.3.9-5.el6_2                                    CDROM                            123 k
 apr-util                                 x86_64                            1.3.9-3.el6_0.1                                  CDROM                             87 k
 apr-util-ldap                            x86_64                            1.3.9-3.el6_0.1                                  CDROM                             15 k
 httpd-tools                              x86_64                            2.2.15-29.el6.centos                             CDROM                             73 k
 mailcap                                  noarch                            2.1.31-2.el6                                     CDROM                             27 k

Transaction Summary
====================================================================================================================================================================
Install       6 Package(s)

Total download size: 1.1 M
Installed size: 3.6 M
Is this ok [y/N]: y
Downloading Packages:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                27 MB/s | 1.1 MB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : apr-1.3.9-5.el6_2.x86_64                                                                                                                         1/6 
  Installing : apr-util-1.3.9-3.el6_0.1.x86_64                                                                                                                  2/6 
  Installing : apr-util-ldap-1.3.9-3.el6_0.1.x86_64                                                                                                             3/6 
  Installing : httpd-tools-2.2.15-29.el6.centos.x86_64                                                                                                          4/6 
  Installing : mailcap-2.1.31-2.el6.noarch                                                                                                                      5/6 
  Installing : httpd-2.2.15-29.el6.centos.x86_64                                                                                                                6/6 
  Verifying  : httpd-2.2.15-29.el6.centos.x86_64                                                                                                                1/6 
  Verifying  : apr-util-ldap-1.3.9-3.el6_0.1.x86_64                                                                                                             2/6 
  Verifying  : httpd-tools-2.2.15-29.el6.centos.x86_64                                                                                                          3/6 
  Verifying  : apr-1.3.9-5.el6_2.x86_64                                                                                                                         4/6 
  Verifying  : mailcap-2.1.31-2.el6.noarch                                                                                                                      5/6 
  Verifying  : apr-util-1.3.9-3.el6_0.1.x86_64                                                                                                                  6/6 

Installed:
  httpd.x86_64 0:2.2.15-29.el6.centos                                                                                                                               

Dependency Installed:
  apr.x86_64 0:1.3.9-5.el6_2        apr-util.x86_64 0:1.3.9-3.el6_0.1     apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1     httpd-tools.x86_64 0:2.2.15-29.el6.centos    
  mailcap.noarch 0:2.1.31-2.el6    

Complete!
[root@web01 ~]#

Dari contoh di atas, terlihat bahwa yum tidak hanya memasang paket httpd, yum juga memasang beberapa paket lain yang diperlukan oleh httpd (dependencies packages). Dalam contoh tadi ada 5 paket tambahan yang ikut terpasang secara otomatis.

Nah lucunya saat saya ingin membuang paket httpd, paket-paket lain tadi tidak ikut terbuang. Misalnya dengan yum remove berikut ini :

[root@web01 ~]# yum install httpd
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
CDROM                                                                                                                                                                                                                  | 4.0 kB     00:00 ... 
Setting up Install Process
Package httpd-2.2.15-29.el6.centos.x86_64 already installed and latest version
Nothing to do
[root@web01 ~]# vi /etc/yum.conf 
[root@web01 ~]# yum remove httpd
Loaded plugins: fastestmirror
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.2.15-29.el6.centos will be erased
--> Finished Dependency Resolution
CDROM                                                                                                                                                                                                                  | 4.0 kB     00:00 ... 

Dependencies Resolved

==============================================================================================================================================================================================================================================
 Package                                              Arch                                                  Version                                                               Repository                                             Size
==============================================================================================================================================================================================================================================
Removing:
 httpd                                                x86_64                                                2.2.15-29.el6.centos                                                  @CDROM                                                2.9 M

Transaction Summary
==============================================================================================================================================================================================================================================
Remove        1 Package(s)

Installed size: 2.9 M
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing    : httpd-2.2.15-29.el6.centos.x86_64                                                                                                                                                                                          1/1 
  Verifying  : httpd-2.2.15-29.el6.centos.x86_64                                                                                                                                                                                          1/1 

Removed:
  httpd.x86_64 0:2.2.15-29.el6.centos                                                                                                                                                                                                         

Complete!
[root@web01 ~]#

yum hanya membuang paket httpd saja. Ada 5 paket lain yang tadi ikut terinstal tidak terbuang juga.

[root@web01 ~]# rpm -qa | egrep "apr|httpd|mailcap"
apr-util-1.3.9-3.el6_0.1.x86_64
httpd-tools-2.2.15-29.el6.centos.x86_64
apr-1.3.9-5.el6_2.x86_64
apr-util-ldap-1.3.9-3.el6_0.1.x86_64
mailcap-2.1.31-2.el6.noarch
[root@web01 ~]#

Di Debian, ada opsi untuk menggunakan apt-get autoremove untuk menghapus sisa paket dependensi yang sudah tidak dipakai. Saya juga baru tahu ternyata ada opsi untuk mengatur yum supaya menghapus semua paket dependensinya. Opsi ini perlu diaktifkan dulu di dalam berkas /etc/yum.conf seperti ini :

[root@web01 ~]# echo "clean_requirements_on_remove=1" >> /etc/yum.conf

Opsi clean_requirements_on_remove akan membuat yum membersihkan setiap paket dependensinya. Setelah penambahan opsi tersebut, contohnya seperti berikut ini :

[root@web01 ~]# yum remove httpd
Loaded plugins: fastestmirror
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.2.15-29.el6.centos will be erased
--> Finished Dependency Resolution
--> Finding unneeded leftover dependencies
---> Marking httpd-tools to be removed - no longer needed by httpd
---> Marking apr-util-ldap to be removed - no longer needed by httpd
---> Marking mailcap to be removed - no longer needed by httpd
---> Marking apr-util to be removed - no longer needed by httpd-tools
---> Marking apr to be removed - no longer needed by httpd-tools
Found and removing 5 unneeded dependencies
--> Running transaction check
---> Package apr.x86_64 0:1.3.9-5.el6_2 will be erased
---> Package apr-util.x86_64 0:1.3.9-3.el6_0.1 will be erased
---> Package apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1 will be erased
---> Package httpd-tools.x86_64 0:2.2.15-29.el6.centos will be erased
---> Package mailcap.noarch 0:2.1.31-2.el6 will be erased
--> Finished Dependency Resolution
CDROM                                                                                                                                                                                                                  | 4.0 kB     00:00 ... 

Dependencies Resolved

==============================================================================================================================================================================================================================================
 Package                                                    Arch                                                Version                                                             Repository                                           Size
==============================================================================================================================================================================================================================================
Removing:
 httpd                                                      x86_64                                              2.2.15-29.el6.centos                                                @CDROM                                              2.9 M
Removing for dependencies:
 apr                                                        x86_64                                              1.3.9-5.el6_2                                                       @CDROM                                              296 k
 apr-util                                                   x86_64                                              1.3.9-3.el6_0.1                                                     @CDROM                                              198 k
 apr-util-ldap                                              x86_64                                              1.3.9-3.el6_0.1                                                     @CDROM                                              9.3 k
 httpd-tools                                                x86_64                                              2.2.15-29.el6.centos                                                @CDROM                                              137 k
 mailcap                                                    noarch                                              2.1.31-2.el6                                                        @CDROM                                               52 k

Transaction Summary
==============================================================================================================================================================================================================================================
Remove        6 Package(s)

Installed size: 3.6 M
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing    : httpd-2.2.15-29.el6.centos.x86_64                                                                                                                                                                                          1/6 
  Erasing    : httpd-tools-2.2.15-29.el6.centos.x86_64                                                                                                                                                                                    2/6 
  Erasing    : apr-util-ldap-1.3.9-3.el6_0.1.x86_64                                                                                                                                                                                       3/6 
  Erasing    : mailcap-2.1.31-2.el6.noarch                                                                                                                                                                                                4/6 
  Erasing    : apr-util-1.3.9-3.el6_0.1.x86_64                                                                                                                                                                                            5/6 
  Erasing    : apr-1.3.9-5.el6_2.x86_64                                                                                                                                                                                                   6/6 
  Verifying  : httpd-2.2.15-29.el6.centos.x86_64                                                                                                                                                                                          1/6 
  Verifying  : apr-util-ldap-1.3.9-3.el6_0.1.x86_64                                                                                                                                                                                       2/6 
  Verifying  : httpd-tools-2.2.15-29.el6.centos.x86_64                                                                                                                                                                                    3/6 
  Verifying  : apr-1.3.9-5.el6_2.x86_64                                                                                                                                                                                                   4/6 
  Verifying  : mailcap-2.1.31-2.el6.noarch                                                                                                                                                                                                5/6 
  Verifying  : apr-util-1.3.9-3.el6_0.1.x86_64                                                                                                                                                                                            6/6 

Removed:
  httpd.x86_64 0:2.2.15-29.el6.centos                                                                                                                                                                                                         

Dependency Removed:
  apr.x86_64 0:1.3.9-5.el6_2              apr-util.x86_64 0:1.3.9-3.el6_0.1              apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1              httpd-tools.x86_64 0:2.2.15-29.el6.centos              mailcap.noarch 0:2.1.31-2.el6             

Complete!
[root@web01 ~]#

Dengan begitu sekarang tidak ada lagi paket dependensi yang tertinggal :

[root@web01 ~]# rpm -qa | egrep "apr|httpd|mailcap"
[root@web01 ~]#