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ắm thẻ nhớ vào đầu đọc thẻ rồi gắn vào máy tính.
  2. Cài Raspberry Pi Imager (Windows/macOS/Linux).
  3. 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
  4. 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).