Wednesday, 28 January 2015

Để trờ thành Linux sysadmin ...

Làm thế nào để trở thành Linux sysadmin? học gì để trở thành Linux sysadmin?

Đăng ký học Linux Sysadmin OFFLINE tại https://pymivn.github.io/sysad101/
Khoan hãy đi vào phần trả lời, hãy tự hỏi mình vài câu sau:
- bạn có sẵn sàng thức dậy vào lúc 3h sáng vì hệ thống có sự cố ? bạn có sẵn sàng / muốn ở trung tâm dữ liệu suốt một tuần không biết ngày đêm?

Nếu câu trả lời là có, hãy tiếp tục.
Nếu có chút ngần ngại, hãy ngó qua khả năng trở thành một python developer...
Nhưng dù sao đi nữa, hãy cứ tiếp tục :))
Linux Sysadmin là một khái niệm khá rộng, nhưng cách hiểu thông thường nhất là những người thực hiện công việc cài đặt, bảo trì, vận hành một hệ thống (một hoặc nhiều) máy chủ Linux.
Bạn chẳng cần chứng chỉ nào để trở thành system admin cả, và nên tránh nhầm lẫn với Network sysadmin (là những người chuyên làm về network, switch ... và thường cần có chứng chỉ CCNA...) hay DBA (những sysadmin chỉ chuyên quản lý database).
Thật ra các "chức danh" trên phụ thuộc vào quy mô của công ty, ở nhiều nơi, sysadmin có thể phải làm tất cả các công việc nói trên.

Có rất nhiều yếu tố liên quan đến việc trở thành system admin nhưng trong bài này sẽ chỉ giới thiệu các vấn đề kỹ thuật.

Bước 0. Sẵn sàng đọc tiếng Anh.
Hãy sẵn sàng tâm lý để ôm quyển từ điển hay là khách hàng thường xuyên của các website từ điển. Bởi sớm muộn gì, bạn cũng sẽ phải đọc tiếng Anh. Và hơn nữa, muốn tiến xa, bạn chắc chắn phải dùng tiếng Anh. (tiếng Pháp, Đức, Nga, Trung, Nhật cũng được :)))

Bước 1: cài Ubuntu
Trước hết, cần phải biết cài đặt một hệ điều hành nhân Linux, để khỏi phải lựa chọn nhiều, ở đây giới thiệu hệ điều hành Ubuntu - hệ điều hành nhân Linux phổ biến nhất thế giới. Chọn lấy bản mới nhất, download về và cài.


Nếu chưa dám cài lên máy thật, có thể tải Virtualbox về và tập cài máy ảo (bản dành cho server) trên ấy (hướng dẫn có thể tìm trên mạng, thậm chí có cả video hướng dẫn trên youtube).
Việc cài đặt cần được làm một cách thành thạo, bởi đây nó mang tính sống còn. Khi biết cài hệ điều hành rồi, bạn chả sợ mình làm hỏng cái gì cả, hỏng thì sửa, không sửa được thì lại cài lại là xong - loại bỏ được tâm lý sợ hãi vốn là rào cản lớn của việc học hành.
(anh nào quảng cáo cho fedora, opensuse, archlinux, mint hay bất cứ cái gì thì mời iem đi cafe, iem sẽ update vào đây để thay đổi định hướng :)) )

Bước 2. Tập dùng shell
Đây là bước quyết định, đánh dấu sự chuyển đổi mạnh mẽ, thay đổi về tư duy của người dùng, đặc biệt là những người chuyển từ Windows sang. Thậm chí nó sẽ ảnh hưởng đến cả cuộc đời sysadmin của bạn sau này. Hãy làm tốt nhất những gì mình có thể. Hãy tập làm tất cả mọi việc có thể trên shell.

Tài liệu:
Tiếng Việt:
http://www.familug.org/2012/03/ccgu-cat-cut-grep-uniq.html
http://www.familug.org/search/label/Command

Tiếng Anh:
http://linuxcommand.org/

Khi nào thì xong?
sẽ chẳng bao giờ là đủ cả, nhưng khi nào bạn có thể sử dụng thành thạo các câu lệnh ở phần basic trong bài này http://www.familug.org/2014/11/cmd-linux-utilities-co-gi-can-thiet.html là bắt đầu ổn rồi.

Bước 3. Tập cài đặt, gỡ các phần mềm bằng apt-get
Là một sysadmin, hay chỉ là một user bình thường thì việc cài đặt phần mềm là chuyện hiển nhiên phải biết.
Hãy làm quen với apt-get, biết install, remove, purge, update, upgrade. Biết dùng apt-cache để tìm các gói cần cài.
Và nâng cao hơn với các câu lệnh ở đây.

Bước 4. Cài vim và sử dụng.
WTF?
Thật ra, những gì bạn cần biết dùng với vim chỉ có: mở file, sửa nội dung, lưu lại vài thoát ra.
Không cần gì cao siêu hơn, nhưng bạn sẽ không phải dùng nano, pico hay bất cứ editor nào khác trên terminal nữa.
Hướng dẫn của FAMILUG  http://www.familug.org/2013/06/vim-huong-dan-hoc-dung-vim.html

Bước 5. Đọc một quyển sách.
Không cần thiết phải đọc từng từ từng chữ, hay hiểu tất cả, nhưng đọc để biết những gì mình chưa biết. Cuốn sách ấy sẽ giúp định hướng con đường còn lại của bạn.

Và cuốn sách khuyên đọc ở đây là: http://debian-handbook.info/
Đừng ngạc nhiên khi được khuyên đọc một cuốn sách viết về Debian. Vì Ubuntu là một nhánh phát triển từ Debian, nên về cơ bản là nó giống nhau.
Sau khi xong bước này, bạn hoàn toàn đã biết mình cần phải làm gì. Nếu có thắc mắc?
hãy lên đây hỏi http://serverfault.com/

hay ngại ngùng gì mà không comment, Linux không dành cho những người hay lo sợ.
Hết!
hvn@familug.org

Update 25/Feb/2015
Bài tập thực hành:
1. cài ubuntu server 
cài 10 lần trên virtualbox, chọn cài openssh-server
sau khi cài xong, login vào, gõ sudo rm -rf / 
rồi lại cài lại.

2. dùng ssh 
ssh vào máy ảo đã cài
đăng nhập sử dụng password đã gõ lúc cài, sử dụng ssh key để đăng nhập, sửa file cấu hình của openssh-server để chỉ cho phép đăng nhập bằng ssh key.
- copy file từ máy ảo về máy mình bằng scp
- copy file từ máy mình lên máy ảo bằng scp

3. tập cài đặt package và dùng các lệnh cơ bản
- dùng ``sudo`` để chạy các lệnh với quyền root.
- cài đặt / gỡ các gói sau:
vim nmap nginx tree pastebinit byobu tmux screen htop tcpdump ngrep ufw guile gcc make dnsmasq
(sử dụng apt-get install, apt-get remove, apt-get purge)
- Sửa nội dung file /etc/apt/sources.list bằng vim, sử dụng mirror của FPT http://mirror-fpt-telecom.fpt.net/ubuntu/
sau đõ gõ apt-get update
- đọc các bài viết cơ bản về CLI ở: http://www.familug.org/2012/03/ccgu-cat-cut-grep-uniq.html
- nén và giải nén trên Linux
- đọc bài tìm hiểu về câu lệnh ở:
http://www.familug.org/2012/03/ccgu-cac-cau-lenh-e-tim-hieu-cau-lenh.html
http://www.familug.org/2013/04/ccgu-cac-cau-lenh-e-tim-hieu-cau-lenh.html
http://www.familug.org/2013/09/cli-cac-lenh-quan-ly-package-tren.html
- tự quản lý máy của mình bằng các câu lệnh
http://www.familug.org/2013/04/cmd-cac-lenh-quan-tri-mot-may-tinh-linux.html

4. basic scripting
- viết bash script tự cài đặt, gỡ các gói đã nói ở bước trên
- viết 1 script dựa trên các câu lệnh trong http://www.familug.org/2013/09/cli-cac-lenh-quan-ly-package-tren.html để in ra các thông tin liên quan đến 1 câu lệnh hoặc package bất kỳ.
- lướt qua các bài trong http://www.familug.org/search/label/bash và làm theo các ví dụ đơn giản.
- viết script hiển thị LAN IP của máy mình (http://www.familug.org/2013/03/cmd-cau-hinh-va-quan-ly-mang-tren-linux.html)
- viết scrip thiển thị WAN IP của máy mình (tham khảo http://www.familug.org/2014/03/lay-external-ip.html)
- viết script hiển thị các địa chỉ mà máy mình đang connect tới (đáp án: http://www.familug.org/2014/03/list-cac-ia-chi-ma-may-minh-ang-connect.html)

Update 11/March/2015
5. dùng PPA / custom repo
PPA là phương pháp chia sẻ phần mềm do một user nào đó đóng gói thành file deb và chia sẻ trên trang launchpad.com. Sau khi add PPA này vào, người dùng có thể cài đặt phần mềm mà PPA ấy cung cấp qua APT.

(Personal Package Archives (PPA) allow you to upload Ubuntu source packages to be built and published as an apt repository by Launchpad. You can find out more about PPAs and how to use them in our help page. )

Cách sử dụng:
https://help.launchpad.net/Packaging/PPA

Người ta sử dụng PPA vì có nhiều phần mềm phát triển nhanh, không có (bản mới nhất) trong kho phần mềm của Ubuntu. Nhiều tổ chức sản xuất phần mềm cũng sử dụng PPA để xuất bản phiên bản sản phẩm mới nhất của họ.

Cài đặt, dùng thử các phần mềm cung cấp từ các PPA sau:
  • ppa:git-core/ppa
  • ppa:chris-lea/node.js
  • ppa:l-mierzwa/lucid-php5
  • ppa:pitti/postgresql
  • ppa:tmortensen/rsyslogv7
  • ppa:brightbox/ruby-ng
  • ppa:saltstack/salt
  • ppa:chris-lea/libjs-underscore
Thử sử dụng repo không chính thức của Ubuntu để cài đặt một phần mềm khác, ví dụ sử dụng repo mà nginx cung cấp:
http://nginx.org/en/linux_packages.html#stable

Bài tập: viết bash script hoàn toàn  tự động add các PPA, repo nói trên và cài đặt phần mềm chính chứa trong đó.
Script tự động tức là sau khi đã gõ Enter thì không cần tương tác của người dùng nữa (không cần gõ yes, no hay bất cứ gì hết).

6. Dùng vagrant
Thừa nhận rằng việc sử dụng virtualbox đã thành thạo qua bước 1, bài tập này sẽ tiến một bước xa hơn, giúp dễ dàng bật tắt, cài đặt máy ảo qua dòng lệnh với vagrant.
Xem bài giới thiệu về vagrant.
Vì sao?
- dùng vagrant giúp hoàn toàn có thể quản lý/ tạo máy ảo bằng dòng lệnh
- có thể script được
- vì tự học nên không có server, dùng máy ảo là việc tối cần thiết.

Bài tập:
- tạo một máy ảo chạy Ubuntu 14.04, cấu hình cho sử dụng 1GB ram, dùng public network, tạo script provision để tự cài nginx bằng apt sau khi máy ảo bật lên lần đầu tiên.
- snapshot máy ảo, bật máy lên cài vài gói mới rồi revert (snapshot back) để trở lại trạng thái khi snapshot.

7. Bật tắt service
- Học các câu lệnh initctl của upstart, kiểm tra xem service nào đang chạy, bật tắt các service (start NAME, stop NAME)
- Đọc nội dung của /etc/init/NAME.conf tương ứng, hiểu xem từng dòng ý nghĩa gì
- Viết 1 file upstart config để chạy 1 bash script (file bash này chỉ để sleep 100) - giả lập 1 service
- Cài NGINX và đọc file /etc/init/nginx.conf
- Xem thêm các file bên /etc/init.d/ # (SysV)

8. Đọc log
Khám phá thư mục /var/log (xem có những file/ thư mục gì, app nào tạo ra chúng?)
- Trước tiên là /var/log/syslog xem và tìm hiểu xem từng dòng có ý nghĩa thế nào.
- Sau đó xem /var/log/upstart có gì [Ubuntu 14.04 trở xuống]
- Đọc output lệnh dmesg

9. Học dùng cron
- viết các crobjob để tự động các công việc thường xuyên
- đọc /etc/crontab
- xem các file ở /etc/cron.d, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly

10. Cài đặt phần mềm graph/metric monitoring
- Graphite/carbon/diamond hoặc InfluxDB hoặc Prometheus

11. Cài đặt phần mềm monitor host/service
- Shinken hoặc icinga2

12. Cài đặt phầm mêm quản lý log tập trung
- Logstash hoặc graylog2
- Elasticsearch cluster

13. Cài đặt FTP server 
- Cài đặt và cấu hình proftpd hoặc vsftpd

14. Cài đặt DNS server
- Cài BIND9 - authoritative server, resolver server, cache server, master-slave
- DYNDNS

15. Học dùng một công cụ quản lý cấu hình (configuration management)
- Saltstack (hiểu các khái niệm pillar, grains, viết formula, dùng formula, dùng master tương tác với các minion) hoặc ansible

16. Cài đặt một database cluster
- Postgresql master - slave

17.
...


19. Cài đặt hệ thống mail server (SMTP, IMAP, Web mail, spam filtering, virus scanner)
- Postfix, dovecot, roundcube, spamassassin, avamisd, clamav

20. Build package
http://packaging.ubuntu.com/html/
... còn tiếp


Update
---------

- 2015/March/01 - thêm 4 bài tập ở cuối bài viết
- 2015/March/11 - thêm bài tập cài đặt phần mềm qua PPA, custom repo
- 2015/November/28 - thêm bài tập vagrant
- 2016/July/03 - thêm bài tập các service thường dùng
==============
Bài viết được thực hiện dưới quan điểm cá nhân của 1 Linux User với 5 kinh nghiệm mày mò, không tên tuổi, không trường lớp.