IoTLabs

Nghiên cứu, Sáng tạo và Thử nghiệm

Series: Lập trình Raspberry Pi: Bài 2: Cài Raspberry Pi OS + bật SSH + tối ưu cơ bản (swap, log, timezone, locale)

1) Mục tiêu bài học

Sau bài này bạn sẽ:

  • Cài Raspberry Pi OS chuẩn, boot lên chạy ổn.
  • Bật SSH để quản trị từ xa (không cần cắm màn hình).
  • Tối ưu cơ bản cho chạy thực tế: timezone, locale, update, swap, log.

2) Chuẩn bị

  • Raspberry Pi + nguồn tốt
  • microSD (hoặc SSD nếu Pi 4/5 và bạn đã chọn boot SSD)
  • Laptop/PC có internet
  • Cùng mạng Wi-Fi/LAN với Pi

3) Cài Raspberry Pi OS bằng Raspberry Pi Imager

  1. Cài Raspberry Pi Imager (Windows/macOS/Linux).
  2. Mở Imager:
    • Choose Device: chọn đúng model Pi
    • Choose OS: chọn Raspberry Pi OS Lite (64-bit) (khuyến nghị cho làm server/gateway)
    • Choose Storage: chọn thẻ microSD/SSD
  3. Bấm biểu tượng ⚙️ (Advanced options) và thiết lập:
  • Set hostname: ví dụ iotlabs-pi
  • Enable SSH: chọn Use password authentication (tạm thời)
  • Set username & password: ví dụ user developer (hoặc bạn chọn)
  • Configure wireless LAN (nếu dùng Wi-Fi): SSID + password + chọn country VN
  • Set locale settings: timezone Asia/Bangkok (GMT+7), keyboard layout phù hợp
  1. Write để ghi OS vào thẻ.

Khuyến nghị: dùng OS Lite để nhẹ, ổn định, dễ chạy 24/7.


4) Boot lần đầu & SSH vào Pi

Cắm thẻ vào Pi → cấp nguồn → đợi 1–2 phút.

Cách tìm IP nhanh

  • Vào router xem danh sách DHCP clients, hoặc
  • Dùng mDNS:
    • Thử SSH: ssh developer@iotlabs-pi.local

Nếu không được, dùng IP:

  • ssh developer@<IP_CUA_PI>

5) Thiết lập cơ bản sau khi vào được SSH

5.1 Update hệ thống

sudo apt update
sudo apt -y full-upgrade
sudo reboot

Sau reboot, SSH lại vào Pi.

6) Cấu hình timezone & locale (giờ Việt Nam)

Timezone

sudo timedatectl set-timezone Asia/Bangkok
timedatectl

Locale

sudo raspi-config

Vào:

  • Localisation Options
    • Locale: chọn en_US.UTF-8 (khuyến nghị cho hệ thống dev/ops) và nếu bạn muốn tiếng Việt thì bật thêm vi_VN.UTF-8
    • Keyboard
    • WLAN Country: VN

7) Bật NTP & kiểm tra giờ chuẩn

timedatectl status

Bạn nên thấy NTP service: active và time đúng GMT+7.

8) Tối ưu swap (tuỳ mục tiêu)

Khi nào nên tăng swap?

  • Pi Zero 2 W / RAM thấp, có build code nhẹ, chạy vài service.

Thiết lập swap (nhẹ, an toàn)

Mở cấu hình:

sudo nano /etc/dphys-swapfile

Tìm dòng:

  • CONF_SWAPSIZE=100 (ví dụ)
    Đổi thành:
  • Zero 2 W: CONF_SWAPSIZE=512
  • Pi 4/5 (4GB+): thường để 100–512 là đủ

Áp dụng:

sudo systemctl restart dphys-swapfile
free -h

Lưu ý: swap trên microSD có thể làm “mòn thẻ” nếu swap nhiều. Nếu bạn chạy nặng/24-7 → ưu tiên SSD.


9) Tối ưu log để tránh đầy đĩa (rất quan trọng khi chạy lâu)

Kiểm tra journald đang dùng bao nhiêu:

journalctl --disk-usage

Giới hạn dung lượng log (khuyến nghị):

sudo nano /etc/systemd/journald.conf

Bật/đặt các dòng sau (nếu có # thì bỏ #):

  • SystemMaxUse=200M
  • SystemMaxFileSize=50M
  • RuntimeMaxUse=100M

Restart:

sudo systemctl restart systemd-journald
journalctl --disk-usage

10) Tạo “baseline” tiện quản trị

10.1 Cài tool hay dùng

sudo apt -y install git curl wget unzip htop net-tools iotop ufw

10.2 Kiểm tra dung lượng và nhiệt

df -h
vcgencmd measure_temp 2>/dev/null || true

11) Checklist debug nhanh

  • SSH không vào được:
    • Sai Wi-Fi SSID/pass trong Imager
    • Pi chưa cùng mạng
    • Router chặn mDNS (*.local) → dùng IP
  • Boot lâu/treo:
    • Nguồn yếu / cáp kém
    • Thẻ microSD lỗi (đổi thẻ tốt hơn)
  • Giờ sai:
    • timezone chưa set
    • NTP chưa active

12) Bài tập nâng cấp

  1. Đặt hostname theo chuẩn dự án (ví dụ: iotlabs-gw-01).
  2. Giới hạn journald để log không vượt 200MB.
  3. Ghi lại IP/hostname + user/pass vào nơi quản lý (password manager).