Use WireShark as non-root user

Kiçik problem olsa da, mütləq qeyd etmək istədim bəlkə kimsə qarşılaşar nə vaxtsa.
WireShark install etdikdən sonra adi user ilə onu run etdikdə heç bir capture funksiyası işləməyəcək.
Root user-lə run etdikdə isə bunun təhlükəli olduğunu deyir.
Dolayısı ilə, biz regular user ilə bunu işlətməliyik.
Addımları eyni ilə yerinə yetirdikdə işləyəcək:

1.
sudo apt-get install libcap2-bin

2. 
sudo groupadd wireshark

3.
sudo usermod -a -G wireshark sh --(sh-ın yerinə sizin regular username-iniz olmalıdır)

4. 
sudo chmod 750 /usr/bin/dumpcap

5.
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap

6. adi user-lə run etməzdən əvvəl log off və login olun:
wireshark

Bu qədər. artıq adi userlə analizlərə başlaya bilərsiniz.

Disk Encryption for Linux LUKS

Bu yazıda VirtualBox-da qurulmuş CentOS 6.5-ə yeni disk-in (hard drive) əlavə olunması və onun encrypt olunmasından danışacıq.

Əgər siz CentOS-u install edəndə diqqət yetirmisinizsə, orada setup zamanı file system-in encrypt olunması opsiyası təklif olunur.

Təbii ki, daha sonra da bunu etmək olur, lakin bir şeyi yadda saxlamaq lazımdır ki, encrypt olunan zaman bütün data disk-dən silinir. Dolayısı ilə yeni drive-ı istifadəyə buraxmazdan əvvəl bunu etməniz məsləhətdir.

İlk öncə VirtualBox-da yeni hard drive-ın əlavə olunmasını kiçik bir video ilə göstərək:

Yuxarıda göstərilən şəkildə disk əlavə edildikdən sonra təbii ki, bu diski partition-lamaq lazımdır necə deyərlər.
Gəlin mövcud disklərə baxaq:

[root@linuxpamtest ~]# parted -l | grep /dev/sd
Disk /dev/sda: 53,7GB
Disk /dev/sdb: 8590MB
Disk /dev/sdc: 8590MB
Disk /dev/sdd: 8590MB
Error: /dev/sde: unrecognised disk label       

Bizim yeni əlavə etdiyimiz disk /dev/sde-dir.
Aşağıdakı qaydada partition yaradırıq:

[root@linuxpamtest ~]# parted /dev/sde
GNU Parted 2.1
Using /dev/sde
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p                                                                
Error: /dev/sde: unrecognised disk label                                  
(parted) mklabel gpt                                                      
(parted) mkpart
Partition name?  []? primary                                              
File system type?  [ext2]? ext4                                           
Start? 0                                                                  
End? 2GB                                                                  
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore                                                     
(parted) p                                                                
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sde: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      17,4kB  2000MB  2000MB               primary

Biz /dev/sde diski daxilində 2 GB həcmli /dev/sde1 partition-nunu yaratmış olduq.
Və indi Error: /dev/sde: unrecognised disk label erroru əvəzinə, artıq bizim diskimiz tanınır:

[root@linuxpamtest ~]# parted -l | grep /dev/sd
Disk /dev/sda: 53,7GB
Disk /dev/sdb: 8590MB
Disk /dev/sdc: 8590MB
Disk /dev/sdd: 8590MB
Disk /dev/sde: 8590MB

/dev/sde1 yaradıldıqdan sonra biz onu encrypt edə bilərik bu məqsədlə “Single User Mode”-a aşağıdakı qaydada keçirik:

[root@linuxpamtest ~]# telinit 1

telling_init

Daha sonra,
yenicə yaratdığımız partition-u random data ilə dolduraq. Bu vaxt ala bilər, səbrlə gözləmək lazımdır:

dd if=/dev/urandom of=/dev/sde1

dd_random

Daha sonra:

cryptsetup --verbose --verify-passphrase luksFormat /dev/sde1

cryptsetup_command_success

Yeni encrypt olunmuş device-ı açaq və ona yeni ad verək:

cryptsetup luksOpen /dev/sde1 crypted_data

luksOpen

Yoxlayaq:

verify_encrypted_part

Daha sonra da encrypt etdiyimiz disk-də file system yaradaq(EXT4):

mkfs.ext4 /dev/mapper/crypted_data

ext4_file_system

Bu andan etibarən biz öz encrypt olunmuş /dev/sde1 partition-umuzu mount edib istifadə edə bilərik. Lakin bundan əvvəl, /etc/crypttab faylına əlavə etməliyik:

crypted_data /dev/sde1 none

Faylı save edirik.
Daha sonra hər hansı bizə lazım olan yerdə bir qovluq yaradıb ora mount edirik:

mounted

Həmçinin /etc/fstab faylına da əlavələr edirik:

/dev/mapper/crypted_data /root/crypted_data ext4 defaults 1 2

Faylı save edirik.
SELinux ilə əlaqəli komanda:

/sbin/restorecon -v -R /root/crypted_data

selinux

Və ən sonda da sistemi reboot edirik. Müəyyən bir vaxtdan sonra, sizdən encrypt olunmuş path üçün parolu tələb edəcək. Təqribən aşağıdakına bənzər bir output olacaq:

password_protected

Bununla da mövzumuz bitmiş hesab olunur.
Təşəkkürlər.

Install MySQL from source with debugging option in Linux

Hörmətli oxucular, bugünkü mövzumuz aşkar edilmiş hər hansı problemi dərinləməsinə araşdırıb tapmaq və yaxud onu debug etməkdən ibarətdir.
Mövzuya biraz teoriya ilə başlamaqda fayda var.
İlk öncə MySQL üçün bəzi anlayişları irəli sürək:
1. MySQL Logging:
MySQL-də log-lamanın növləri aşağıdakılardır:

* General Log – bütün növ RDBMS fəaliyyətlərin hamısı (SQL-lərin hamısı) bu log faylında log-lanır. Production server-lərdə aktiv etmək məsləhət deyil. Səbəbi isə çox sadədir işlək database-də bu log həcmi qısa müddətdə bir neçə GB-yə çata bilər. General Log adətən 1-2 dəqiqəlik lazım olan aktivliyi scan etmək üçün istifadə olunur.

* Slow Quer Log – default olaraq 10 saniyədən daha çox işləyən sorğuların hamısı bu faylda log-lanır. Təbii ki, 10 saniyəni daha aşağı məsələn, 3 saniyə edib sizin database-inizdə 3 saniyədən çox işləyən, həmçinin index-siz çalışdırılan və.s sorğuları aşkarlaya bilərsiniz.

* Error Log – MySQL start olunandan bu yana baş vermiş bütün kritik dəyişikliklər və error-lar bu faylda qeyd olunur. Bizim üçün ən vacib məsələlərdən biri crash və yaxud BUG-la qarşılaşdıqda ilk edəcəyimiz iş bu fayla baxmaqdır. Çox böyük ehtimal ki, bu faylda stack trace qeyd olunub. Nümunə olaraq:

Thread pointer: 0x0
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 0 thread_stack 0x40000
/usr/local/mysql/bin/mysqld(my_print_stacktrace+0x35)[0xab6ead]
/usr/local/mysql/bin/mysqld(handle_fatal_signal+0x404)[0x736ee0]
/lib64/libpthread.so.0[0x35df20f710]
/usr/local/mysql/bin/mysqld[0xd27e2e]
/usr/local/mysql/bin/mysqld[0xd1cc5e]
/usr/local/mysql/bin/mysqld[0xc5d5f6]
/usr/local/mysql/bin/mysqld[0xc5dca7]
/usr/local/mysql/bin/mysqld[0xc5e152]
/lib64/libpthread.so.0[0x35df2079d1]
/lib64/libc.so.6(clone+0x6d)[0x35deee8b5d]

Error Log-da verilən faydalı məlumata baxmayaraq, hər hansı BUG-ı report etdikdə MySQL(Oracle) -ın professional developer-lərinə (hansı ki MySQL-i onlar yazırlar) error-un məhz hansı kod faylının hansı funksiyasında baş verdiyi maraqlandırır. Səbəbi isə çox sadədir BUG-ı reproduce edə bilsinlər və də asanlıqla həmin kod hissəsində dəyişiklik edə bilsinlər. Bunun üçün isə sizdən Linux Admin-lərin çox gözəl bildiyi CORE DUMP tələb olunacaq.
Qeyd edək ki, core dump-ı yalnız və yalnız Debug aktivləşdirilmiş MySQL ilə generate edə biləcəksiniz. Debug mode heç bir halda hazır şəkildə, yüklənə bilən şəkildə (downloadable) saxlanılmır.
Burdan belə çıxır ki, biz MySQL-i source-dan özümüz yazmalı olacıq. CMAKE-ə isə DEBUG-ı aktiv etsin deyə, necə deyərlər bir əmr append edəcik.
Dependency-ləri install edirik:

[root@localhost ~]# yum groupinstall "Development Tools"
[root@localhost ~]# yum install cmake
[root@localhost ~]# yum install ncurses ncurses-devel
[root@localhost ~]# yum install wget

Daha sonra arxiv faylımızı download edirik:
mysql-5.6.19.tar.gz

Daha sonra da ardıclıllıqla:

1. [root@localhost ~]# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.19.tar.gz
2. [root@localhost ~]# tar -xvf mysql-5.6.19.tar.gz
3. 
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -r -g mysql mysql
4. [root@localhost ~]# cd mysql-5.6.19
5. [root@localhost mysql-5.6.19]# cmake  -DWITH_DEBUG=1
6. [root@localhost mysql-5.6.19]# make
7. [root@localhost mysql-5.6.19]# make install

Install bitdikdən sonra:

8.  [root@localhost mysql-5.6.19]# cd /usr/local/mysql
9.  [root@localhost mysql]# chown -R mysql .
10. [root@localhost mysql]# chgrp -R mysql .
11. [root@localhost mysql]# scripts/mysql_install_db --user=mysql
2014-07-21 03:52:05 14280 [Note] InnoDB: Using atomics to ref count buffer pool pages
2014-07-21 03:52:05 7f6e8f793720 InnoDB: !!!!!!!! UNIV_DEBUG switched on !!!!!!!!!
2014-07-21 03:52:05 7f6e8f793720 InnoDB: !!!!!!!! UNIV_SYNC_DEBUG switched on !!!!!!!!!

Fərqliliyə diqqət yetirin.
Daha sonra:

12. [root@localhost mysql]# chown -R root .
13. [root@localhost mysql]# chown -R mysql data
14. [root@localhost mysql]# bin/mysqld_safe --user=mysql &
[root@localhost mysql]# bin/mysqld_safe --user=mysql &
[1] 14525
[root@localhost mysql]# 140721 03:55:41 mysqld_safe Logging to '/var/log/mysqld.log'.
140721 03:55:41 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

Gördüyünüz kimi artıq, debug MySQL start olundu və öz testlərinizə başlaya bilərsiniz.
Connect olduqda:

[root@localhost bin]# ./mysql -u root --socket=/usr/local/mysql/data/mysql.sock
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.19-debug-log Source distribution

Server versiyasında fərqi dərhal görürük: 5.6.19-debug-log.

Deməli, biz artıq sizlərlə, DEBUG MySQL-i install etdik. İndi isə MySQL CORE DUMP-ın alınmasına baxacıq.
Bu məqsədlə biz, my.cnf (MySQL config faylı) faylında [mysqld] kataloqu altında yazırıq:
[mysqld]
core-file

Həmçinin faylın sonuna qeyd edirik:
[mysqld_safe]
core_file_size=unlimited

Bu şəkildə start olunmuş MySQL-də hər hansı crash baş verərsə aşağıdakına bənzər bir output görə bilərsiniz:

bin/mysqld_safe: line 166: 27247 Segmentation fault      (core dumped) 


(core dumped) –
yəni core file artıq yaradıldı.
Default olaraq core file-ı MySQL datadir-də yaradılır.

Sizlərlə MySQL-in source-dan debug option-la installına baxdıq. Həmçinin Core Dump-ın yaradılmasını da göstərdik.
Təşəkkürlər.

Copying Tablespaces to Another Server (Transportable Tablespaces)

May 17, 2014 2 şərh

Bugünkü mövzumuz MySQL 5.6 > versiyalar nəzərdə tutulub odur ki, test etməzdən əvvəl mütləq əmin olun ki, sizin MySQL versiyanlz müvafiqdir.
İndiki hald mən 5.6.17 versiya MySQL-i aşağıdakı opsiyalarla start etmişəm.
QEYD: Transportable Tablespaces-ə nail olmağınız üçün MySQL-i aşağıdakı dəyişənlərlə start etməlisiniz

[mysqld]
innodb_file_per_table          = 1
lower_case_table_names         = 1

Daha sonra test məqsədi ilə, bir kifayət qədər böyük cədvəl tapın.
Məndə artıq biri var təqribən 2.4 gb-dır.
O cədvəli rename edək:

[root@linuxsrv3 xxx]# ls -lthr
total 2,4G
-rw-rw----. 1 mysql mysql   65 2014-05-07 11:05 db.opt
-rw-rw----. 1 mysql mysql  20K 2014-05-12 12:07 test_table.frm
-rw-rw----. 1 mysql mysql 2,4G 2014-05-12 14:05 test_table.ibd

Cədvəlimizi test_table-dan test_table2-yə rename edək.:

[root@linuxsrv3 xxx]# time mysql -u root -p -e 'rename table xxx.test_table to xxx.test_table2'
Enter password: 

real	0m1.973s
user	0m0.002s
sys	0m0.004s

Bu cəmi 1.9 saniyə çəkdi.

Rename-in başqa istifadə yeri də var. Deyək ki, biz bir database-dən cədvəli digərinə move etmək istəyirik bu zaman cədvəlin backup-ını alıb, digər database-də import etməyə ehtiyac yoxdur, aşağıdakı şəkildə bunu edə bilərik:

[root@linuxsrv3 xxx]# time mysql -u root -p -e 'rename table xxx.test_table2 to test.test_table2'
Enter password: 

real	0m1.876s
user	0m0.005s
sys	0m0.003s

Və bizim cədvəlimiz artıq, test database-indədir:

[root@linuxsrv3 test]# ls -lthr
total 2,4G
-rw-rw----. 1 mysql mysql 8,4K 2014-05-12 11:32 ff.frm
-rw-rw----. 1 mysql mysql  96K 2014-05-12 11:33 ff.ibd
-rw-rw----. 1 mysql mysql   65 2014-05-12 11:34 db.opt
-rw-rw----. 1 mysql mysql  20K 2014-05-12 12:07 test_table2.frm
-rw-rw----. 1 mysql mysql 2,4G 2014-05-12 14:05 test_table2.ibd

Deməli gördüyünüz kimi, bir cədvəli bir database-dən digərinə move etməyin sürətli və asan yolunu göstərmiş olduq.
Lakin belə bir sual yaranır, bəs biz bir cədvəli digər server-dəki database-ə copy edə bilərik mi?
Transportable Tablespaces məhz burda bizim köməyimizə gəlir.
Bir daha xatırlatmaqda fayda var ki, buna nail olmanız üçün my.cnf faylında yazının əvvəlində göstərdiyim kimi, dəyişənləri qeyd edib, MySQL-i start etmək lazımdır.
Həmçinin, sizin remote server-də artıq eyni adlı database və eyni adlı (strukturlu) cədvəliniz olmalıdır.

Bizim serverlər aşağıdakılardır:

source server : linuxsrv3
Destination server : linuxsrv4

Destination server-də artıq eyni adlı database və cədvəlimiz var.

Destination server-də biz mövcud boş cədvəlimizin tablespace-ini discard edirik:

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> alter table test_table2 discard tablespace;
Query OK, 0 rows affected (0,05 sec)

Əgər yoxlasanız görərsiniz ki, .ibd faylı databse direktoriyamızda yoxdur.

[root@linuxsrv4 test]# ls
db.opt  test_table2.frm

Source serverimizdə:

mysql> use test;
Database changed
mysql> FLUSH TABLES test_table2 FOR EXPORT;
Query OK, 0 rows affected (0,00 sec)

.ibd faylını destination server-ə copy edirik:

[root@linuxsrv3 test]# scp test_table2.ibd root@192.168.1.88:/var/lib/mysql/test
root@192.168.1.88's password: 
test_table2.ibd                       100% 2444MB  15.4MB/s   02:39 

Source server-də:

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0,00 sec)

destination server-də:

[root@linuxsrv4 test]# ls
db.opt  test_table2.frm  test_table2.ibd

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> alter table test_table2 IMPORT TABLESPACE;
ERROR 1146 (42S02): Table 'test.test_table2' doesn't exist

Əgər bu error-u gördünüzsə demək ki, owner:

[root@linuxsrv4 test]# ls -l
total 2502684
-rw-rw----. 1 mysql mysql         65 2014-05-12 15:03 db.opt
-rw-rw----. 1 mysql mysql      20166 2014-05-12 15:05 test_table2.frm
-rw-r-----. 1 root  root  2562719744 2014-05-12 15:16 test_table2.ibd

Owner-i mysql user-ə dəyişək:

[root@linuxsrv4 test]# chown mysql:mysql test_table2.ibd
[root@linuxsrv4 test]# ls -l
total 2502684
-rw-rw----. 1 mysql mysql         65 2014-05-12 15:03 db.opt
-rw-rw----. 1 mysql mysql      20166 2014-05-12 15:05 test_table2.frm
-rw-r-----. 1 mysql mysql 2562719744 2014-05-12 15:16 test_table2.ibd

İndi isə bir daha sınayaq:

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

mysql> alter table test_table2 IMPORT TABLESPACE;
Query OK, 0 rows affected, 1 warning (2 min 29,38 sec)

And checking :

mysql> select idvisit from test_table2 order by idvisit desc limit 1;
+---------+
| idvisit |
+---------+
| 7016951 |
+---------+
1 row in set (0,04 sec)

Bununla da gördüyünüz kimi 2.4 gb-lik bizim cədvəl artıq başqa bir server-də eyni data-larla mövcuddur. Bu əməliyyat toplamda 2 dəqiqə çəkir.
Təşəkkürlər.

Error: database disk image is malformed in CentOS 6.5

[root@tester1 ~]# yum groupinstall "Desktop Platform"
.
.
Error: database disk image is malformed
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

Belə bir error-u gördükdən sonra, aşağıdakı addımı etməklə həll etdim:

[root@tester1 ~]# yum clean dbcache
Loaded plugins: fastestmirror, refresh-packagekit, security
Cleaning repos: base extras updates
4 sqlite files removed

Təşəkkürlər.

Kateqoriyalar: Linux Etiketlər:

Linux Install Tutorials

Hörmətli dostlar, artıq bir neçə müddətdir ki Linux (CentOS 5 və 6) haqqında video dərslər hazırlayıram.
Hər bir dərs addım-addım olub, sizlərə faydalı məlumatlar çatdırır.
İnstall üsullarının hamsını sınayıb dərslərə yığmışam.
Buyurun faydalanın:

1. Installing Centos 5.10 in Text Mode
2. Installing Centos 5.10 in GUİ Mode
3. CentOS 6.5 Network Installation with VNC
4. Centos 6.5 Kickstart Installation

Kateqoriyalar: Linux

File “cx_Oracle.pyc”, line 10, in __load importError: No module named decimal

Python ilə Tkinter vasitəsilə tez bir şəkildə simple Oracle password changer yazmaq lazım oldu.
Həmçinin bu .py faylı .exe-yə convert edib user-ə təqdim etmək lazım idi.
Source Kodları tapa bilərsiniz:

Password Changer GitHUB

Repo-da həm bizim əsl GUİ kodları həmçinin də setup.py faylı var ki, biz onun vasitəsilə .exe yaradırıq.
Lakin py2exe-ni çalışdırdıqda mövzunun adında olduğu kimi cx_ORACLE error verir.

Qeyd edim ki, cx_ORACLE Python və Oracle arasında əlaqə yaradan library-dir.
Uzun axtarışdan sonra aşkarladım ki,
Aşağıdakı şərti setup.py faylına yazdıqda problem həll olur. Bunu tapmaq mənim 1 saatımı apardı lakin sizlər daha bu qədər vaxt itirməyin:

opts={“py2exe” : {“dll_excludes”: ["OCI.dll",], “includes” : ["decimal", ]}

Setup.py faylında artıq qeyd olunub.
Kiçik GUİ-dən print screen:

password_changer

İzlə

Hər yeni yazı üçün e-poçt qutunuza göndəriş alın.

Digər 208 izləyiciyə qoşulun