Soạn just-in-time
Giáo trình từng phiên
Mỗi phiên một tài liệu, soạn ngay trước buổi học chứ không soạn trước cả khoá — vì nội dung phiên sau phụ thuộc vào chỗ phiên trước dừng lại.
Đã soạn
- P1 · Phase 0 Dựng VM lab & serial console
libvirt/virt-install, cloud image + cloud-init, serial console cho thấy kernel log từ dòng đầu. Kèm cơ chế NoCloud datasource, ring buffer vs console, và bẫy AppArmor.
- P2 · Phase 0 → M-L0 Snapshot và lab-reset.sh
Internal vs external snapshot và cái gì thật sự nằm ở đâu trên đĩa; revert vs rebuild giải hai bài toán khác nhau; script dựng lại lab từ số không. Kèm ba chỗ tài liệu phổ biến nói sai.
- P3 · Phase 1 fork, exec, wait: zombie và orphan
Bốn động từ dựng nên vòng đời một tiến trình, và cái gì còn lại khi nó chết. Zombie giữ đúng những gì, luật reparent ba bước, và 16 bit của exit status mà shell làm phẳng mất. Kèm năm chỗ tài liệu phổ biến nói sai.
- P4 · Phase 1 exec và /proc: đọc ngược một tiến trình
Kernel quyết định chạy một file bằng cách nào, luật shebang chính xác tới từng khoảng trắng, và ba cái tên của một tiến trình — hai trong ba là thứ nó muốn bạn thấy. Artifact: hồ sơ một tiến trình thật đọc hoàn toàn qua /proc.
Phase 0 đã đủ hai phiên; Phase 1 đang chạy. Các phiên còn lại chưa soạn — nội dung dự kiến của từng phiên nằm ở kế hoạch 40 phiên.
Một phiên gồm những gì
Mỗi phiên theo cùng một khung, để không phải đọc lại cấu trúc mỗi lần mở:
| Phần | Vai trò |
|---|---|
| Trước khi bấm giờ | Điều kiện đầu vào, kiểm bằng lệnh. Hỏng một cái là hỏng cả phiên. |
| Kiến thức cơ sở | Cơ chế bên dưới, có sơ đồ khi cơ chế đáng vẽ. Đọc trước khi gõ. |
| Block A / B / C | Việc cần làm, có timebox, mỗi block một tiêu chí nghiệm thu riêng. |
| Bẫy | Quirk của đúng phần này — version, default của distro, thông báo lỗi gây hiểu nhầm. |
| Definition of Done | Ranh giới "xong phiên", thay cho cảm giác. |
| Câu hỏi kiểm tra | Trả lời không nhìn tài liệu. Đáp án gợi ý gập lại. |
| Nguồn & đọc thêm | Phân loại: đọc trong phiên / tra khi cần / để dành phiên sau. |
Mục tiêu phải falsifiable: "hiểu về serial console" không phải mục tiêu;
"reboot VM trong virsh console và thấy kernel log từ dòng Linux version"
thì có — làm được hoặc không, không có vùng xám.
Về khối lệnh gập lại
Chuỗi lệnh đầy đủ có, nhưng nằm sau khối Hiện lệnh đầy đủ gập lại. Mở nó sau khi đã tự ghép lệnh từ man page, hoặc khi kẹt quá 5 phút. Mở ngay từ đầu thì phiên biến thành copy-paste, và tuần sau sẽ không nhớ gì.
Ranh giới của quy ước này: lệnh vận hành và cấu hình thì gập lại được — cài gói, bật service, dựng VM, đọc log. Chúng là phương tiện, không phải bài tập, và tra lại chúng ở man page tốn thời gian mà không dạy thêm gì sau lần thứ hai.
Code phải tự viết thì không — không có lời giải, kể cả sau spoiler. Chương trình mini-container ở Phase 4 hay bài phân tích hiệu năng ở Phase 6 là sản phẩm của phiên; đưa sẵn đáp án là phá đúng thứ đang học. Ở đó chỉ có gợi ý hướng, tên hàm, và câu hỏi cần tự trả lời trước khi code.
Sắp tới
Phiên kế tiếp được soạn khi phiên hiện tại kết thúc, vì chỗ dừng lại của buổi trước là đầu vào của buổi sau. Soạn xa hơn hai phiên là công sức bỏ đi: lab luôn tràn ở chỗ không đoán trước được, và nội dung soạn sẵn sẽ không khớp.
Phase 0 gồm P1–P2. Từ P3 trở đi là Phase 1 — process, file descriptor, signal — tầng nền mà mọi thứ về sau quy về. Mốc M-L1 rơi vào P8, và câu hỏi của nó đã bắt đầu được chuẩn bị từ P3.