Thursday, November 21, 2013

[Python2] Everything you want to know about argparse standard lib

To see all kwargs that you can pass to ArgumentParser.add_argument(), run python/ipython and type:

>>> import argparse
>>> help(argparse.Action)

Regarding to action kwarg, below is all action that you can pass:
        # register actions
        self.register('action', None, _StoreAction)
        self.register('action', 'store', _StoreAction)
        self.register('action', 'store_const', _StoreConstAction)
        self.register('action', 'store_true', _StoreTrueAction)
        self.register('action', 'store_false', _StoreFalseAction)
        self.register('action', 'append', _AppendAction)
        self.register('action', 'append_const', _AppendConstAction)
        self.register('action', 'count', _CountAction)
        self.register('action', 'help', _HelpAction)
        self.register('action', 'version', _VersionAction)
        self.register('action', 'parsers', _SubParsersAction)
Example:
parser.add_argument("-v", "--verbose", action="store_true",
                    help="increase output verbosity")
 

Sunday, November 17, 2013

[Debug] Postfix, Dovecot, OpenLDAP

Vài khái niệm/ câu lệnh quan trọng khi debug stack : postfix - dovecot - openldap, với dovecot là imap server đồng thời thực hiện SASL authenticate sử dụng backend LDAP.

1. Tắt hết TLS / SSL option đi.
2. Kiểm tra xem LDAP có hoạt động bình thường không
NOTE: nếu dùng TLS, LDAP vẫn listen ở port 389
Dùng SSL mới listen 636.

$ ldapsearch -x -H ldap://127.0.0.1 -D 'uid=hvn@example.com,ou=people,dc=example,dc=com' -W -ZZ -b'dc=example,dc=com' # (bỏ -ZZ nếu chỉ dùng LDAP không SSL/TLS)

3. Bật verbose cho slapd: đặt oldLog = 16383

Sau khi ldap đã hoạt động bình thường, kiểm tra dovecot.

Dùng dovecot -a để xem cấu hình của dovecot hiện tại.


4. Thử telnet với postfix:

Tuesday, August 20, 2013

Multi-nodes graphite cluster

I done  set up a graphite cluster on 2 nodes:
- Each node have 1 webapp, 1 carbon-relay that relay to n carbon-cache.
- Each node talk to each other ONLY through webapp. You have to config in local_config at cluster section.
- Note that double check your graphite django url file. Do not require login to get metric, or you will get 302 error when webapp talk to each others.

On each node:
- Set up each carbon-cache listen on a separate port.
- All webapp must use exactly same database and memcached (if you use memcached)
- Then, in relay config, set DESTIONATIONS to a list of all local carbon-cache. Look like this:

Wednesday, July 17, 2013

Install salt-minion on Raspberry Pi (Raspbian)

root@raspberrypi:~# apt-get install msgpack-python python-crypto python-jinja2 python-yaml python-zmq

Then download and install two this deb files with dpkg

http://debian.saltstack.com/debian/pool/main/s/salt/salt-common_0.15.1-1_all.deb
http://debian.saltstack.com/debian/pool/main/s/salt/salt-minion_0.15.1-1_all.deb


dpkg -i common_0.15.1-1_all.deb minion_0.15.1-1_all.deb

Sunday, June 23, 2013

[TIL] Chạy command từ python script

và liên thiên về ruby, bash...

Trong python 2.7, có đến vài cách để chạy 1 câu lệnh linux. Điều này thực sự trái với triết lý của Python:
There should be one-- and preferably only one --obvious way to do it.
Các cách để chạy 1 command:
  • dùng lệnh os.system
  • dùng module subprocess
  • dùng module commands
  • dùng Popen
ai cũng hiểu rằng python có khả năng xử lý tốt hơn bash, nhưng hãy nhìn ví dụ đơn giản dưới đây khi cần lấy output của một câu lệnh:

bash:
ls_output=`ls -la | grep hvn`
hoặc
ls_output=$(ls -la | grep hvn)

Monday, June 17, 2013

[TIL] Luôn setup logging cho python script

Khi bắt tay vào viết 1 python script / program nào, cần setup logging ngay từ đầu. Quá trình code sẽ không cần sử dụng print nữa, vì có thể add handler stdout / stderr cho logger, nhờ vậy logger tương đương với các lệnh print. Khi xong, chỉ cần bỏ cái handler hoặc set debug level khác là được, không mất công xóa print.

(Một khi đã dùng python nghĩa là công việc khá phức tạp, dùng vài dòng bash không thể làm / khó làm)

Sunday, June 2, 2013

2013 TODO list

- Emacs for python
- Python debugger
- Unittest
- Dive in python 3
- Which first (Haskell -  (Scheme + SICP))  ?
- Networking - TCP/IP illustrated vol 1
- Archlinux && FreeBSD
- Django || Flask ?

Friday, May 31, 2013

[TIL] luôn sử dụng argparse

Python 2.7

Khi viết script python có pass các argument, cách đơn giản nhất là dùng sys.argv nhưng chỉ cần việc xử lý phức tạp hơn 1 chút, xuất hiện khoảng 3,4 argument, hay đang trong giai đoạn thiết kế thì cách tốt nhất là dùng thư viện argparse. Mất công học một tí nhưng với vài dòng là đã có 1 argparser xịn, dễ dùng.


Wednesday, May 29, 2013

Start reading Dive Python 3

This famous book http://getpython3.com/diveintopython3/

Why?
  • My Python knowledge is collected from anywhere but a book. Most of them from StackOverFlow. So I'm not sure what I've missed. Maybe I need a reference book but this book is good enough, and it was written in practical manner
  • Re-learn python means I'm sharping my skill/ knowledge
  • Learn python 3, which is the future of python
How:
  • Daily read this book, from-cover-to-cover
  • Try to use python commandline debugger as much as possible
  • Try emacs 
  • Conclude what I learned on this blog. But wrote them in Vietnamese
 Today is 30-05-2013

Monday, May 6, 2013

Remove package when lack of its config file

This is very bad situation.
Try below solutions:
- Reinstall that package
- Reinstall packages that your package depends on. (Eg: some xxx-common package)
- Copy config from other machine

Monday, April 22, 2013

Things I Wish I'd Known Before Installed slapd on Ubuntu 12.04

slapd is OpenLDAP server.

This post is my experiences from install slapd on Ubuntu 12.04

0. x86 and x64
Please do use x86 instead of x64 machine for openldap. As I experiment with Ubuntu 12.04 x64 version, I got some annoying bugs relate to TLS. At least, I can sure that for package from Ubuntu repo, use x86 will save you from many headache.

1. Logging / Debug
olcLogFile is not easy to use (I don't know how to use it), if you want logging to a separate file, change rsyslog config (/etc/rsyslog.d/50-....).
Let local4.* outputs to a dedicated file.

Debug server:
Change your config :  olcLogLevel : none
to 256, 16383 to get more verbose output
or run :
slapd --debug

Debug client:
add -d 1 -d 2 ... or -d 5 after your command


2. GNUTLS vs openssl
On Ubuntu 12.04, slapd / ldap-utils is compiled with GNUTLS. You should know this and use certificates/key created by gnutls-bin (certtool) when add SSL/TLS to it.

Or if you use openssl cert/key, do compile your own a slapd / ldap-utils with openssl.

Use mix slapd (built with gnutls) with openssl cert wil cause endless headache to you. DON'T DO THAT!

3. Certificate/ Key
Certificate MUST be created which cn = your hostname FQDN.

To check that, use:
hostname --fqdn

If you wan to change it to example.com, add example.com into /etc/hosts, before the result you've got.