Raspeberry PI Ubuntu

Canonical đã bỏ nỗ lực để đưa Ubuntu đến với Raspberry PI. Điều này là dễ hiểu thôi bởi sứ mệnh của họ là đưa linux tới với mọi máy tính mà. Raspberry PI vốn đã rất tốt rồi, với kết quả này thì cộng đồng lập trình viên thích hí hoáy lại có thêm một lựa chọn để hack. Dù sao Ubuntu cũng gần gũi hơn với đa số, và không phải ai cũng ưa cố thủ với những gói phần mềm quá cũ.

Bài viết này trình bày cách thức cài đặt một môi trường Ubuntu sẵn sàng làm việc hoàn chỉnh, phục vụ hầu hết các tác vụ mà lập trình viên cần, với ràng buộc là chiếm dụng tài nguyên tối thiểu (để các máy PI có dưới 2GB RAM vẫn thực hiện được) và cần thiết bị tối thiểu, không cần dây mạng, không cần adapter HDMI, bàn phím, chuột…

Chuẩn bị cần thiết

  • Máy PI 2, 3, 4
  • Một thẻ nhớ dung lượng lớn (tối thiểu 4GB) tốc độ cao chút
  • Một máy tính hoạt động
  • Một đầu đọc thẻ nhớ
  • Mạng wifi hoặc dây kết nối mạng LAN

“Flash” thẻ nhớ

Bước này nhằm mục tiêu tạo một thẻ nhớ chứa OS khởi động được. Cách tốt nhất để thực hiện là bằng phần mềm Raspberry PI Imager.

Cắm thẻ nhớ vào máy tính và bật Raspberry PI Imager lên. Có hai việc cần làm, chọn OS muốn flash, và chọn thẻ nhớ muốn dùng
Chọn OS, Ubuntu nằm ở mục General Purpose OS
Desktop có thể được cài đặt bổ sung từ phiên bản server, vậy nên không cần chọn phiên bản Desktop ở bước này. Ưu tiên phiên bản Server, 64bit, LTS, nếu có thể.
Tiếp theo, chọn thẻ nhớ SD muốn flash sau đó thực hiện WRITE.

Cấu hình để kết nối

Khoan hẵng rút thẻ nhớ, ngay bây giờ nó đã sẵn sàng để cắm vào máy PI và khởi động. Nhưng bởi bạn không sử dụng PI qua thiết bị ngoại vi trực tiếp như màn hình, bàn phím, chuột… mà thay vào đó log vào OS qua giao thức SSH hay VNC. Vậy nên bạn cần máy PI kết nối được vào mạng LAN của bạn ngay sau khi khởi động.

Nếu bạn có dây mạng ethernet thì rất dễ dàng, chỉ cần cắm dây vào là xong. Nếu không có thì cũng hoàn toàn không sao cả, ta sẽ cấu hình đề máy PI “biết” tên mạng wifi và password truy cập trước cả khi khởi động.

Duyệt file trong của vùng system-boot trong thẻ nhớ. Định vị file network-config và mở nó lên bằng một text editor bất kỳ.

Bạn sẽ thấy có một template cấu hình wifi bị comment lại, hãy gỡ những comment cần thiết để kết quả trông như dưới đây:

wifis:
  wlan0:
    dhcp4: true # true, để máy PI được nhận IP tự động
    optional: true # true, cho phép máy PI khởi động mà không cần chờ kết nối thành công
    access-points:
      myhomewifi: # tên mạng wifi
        password: "S3kr1t" # mật khẩu mạng wifi
      myworkwifi: # tên mạng wifi khác, nếu có
        password: "correct battery horse staple" # mật khẩu mạng wifi khác

Nếu mạng của bạn không bật DHCP server, PI sẽ không thể nhận IP tự động được, trong trường hợp đó bạn cần đặt IP thủ công:

wifis:
  wlan0:
    dhcp4: false
    addresses:
      - 192.168.101.23/24 #  Các địa chỉ IP là do bạn đặt
    gateway4: 192.168.1.1
    nameservers:
      addresses: [192.168.1.53]
    # ... các cấu hình còn lại

Ở hệ điều hành Raspbian, bạn phải tweak một chút thì PI mới mở SSH server sau khi boot, nhưng Ubuntu thì điều đó là mặc định, vậy nên sau khi cấu hình truy cập mạng xong bạn có thể nhét thẻ vào máy và khởi động.

Khởi động Ubuntu Server

Ubuntu sẽ khởi động, trong lần khởi động đầu tiên, ngay khi bạn được hỏi username, một tiến trình tên là cloud-init sẽ được thực thi, nếu bạn có thể đăng nhập lúc này thì cloud-init sẽ bị ngắt và lần khởi động sau tiến trình này sẽ phải thực thi lại. Vậy nên hãy chờ vài phút, cho đến khi một thông báo cloud-init đã hoàn thành sau đó mới đăng nhập. Username và password đều là ubuntu.

Tìm IP của PI

Bạn sẽ remote vào Ubuntu Server, trước tiên, bằng giao thức SSH. Nếu bạn đặt cho PI nhận IP bằng DHCP, bạn sẽ cần biết IP của Pi trước.

Trên một máy tính khác, bạn chạy một trong hai script sau:

arp -na | grep -i "b8:27:eb" # trên Unix/Linux
arp -a | findstr b8-27-eb # trên Windows

Nếu không tìm thấy kết quả, bạn thay pattern tìm kiếm thành dc:a6:32, và nếu không có gói arp, bạn hãy cài đặt gói net-tools. Kết quả tìm kiếm trông sẽ như sau:

 ? (xx.xx.xx.x) at b8:27:eb:yy:yy:yy [ether] on wlp2s0

Bạn có thể sẽ phải chờ 2-3 phút để PI kết nối được vào mạng, nếu lâu quá mà không có điều gì xảy ra thì rất có thể cấu hình mạng của bạn có vấn đề, bạn có thể sẽ cần login trực tiếp vào máy PI để debug.

Nếu bạn có quyền quản trị thiết bị mạng, không ai cấm bạn sử dụng panel quản trị của router để tìm IP của PI mà không cần sử dụng bất kỳ câu lệnh gì.

Remote tới Ubuntu Server

Đơn giản thôi, sử dụng bất kỳ SSH client nào mà bạn quen thuộc sử dụng:

ssh ubuntu@<Raspberry Pi’s IP address>

Khi được hỏi như sau, hãy nhập yes:

Are you sure you want to continue connecting (yes/no/[fingerprint])?

Cài đặt môi trường làm việc

Ngay lần đầu tiên đăng nhập, Ubuntu sẽ yêu cầu bạn đổi mật khẩu. Sau đó bạn có thể cân nhắc việc cài đặt một môi trường làm việc. Raspberry PI không chỉ là một server, bạn có thể sử dụng nó như một máy desktop bình thường trong một vài tình huống, thế nên nếu có thêm một vài khả năng dự phòng như duyệt web bằng chromium thì cũng không có hại gì cả.

Bước đầu tiên là cập nhật app store cũng như nâng cấp các gói hiện có cái đã:

sudo apt update
sudo apt upgrade

Bạn có thể cân nhắc sử dụng các Desktop Environment thiết kế sẵn như xubuntu hay lubuntu

sudo apt install xubuntu-core --no-install-recommends
# hoặc:
sudo apt install lubuntu-desktop --no-install-recommends

Một lựa chọn khác cũng rất phù hợp đó là i3vm:

sudo apt update
sudo apt install i3 dmenu suckless-tools xorg
echo "exec i3" > .xinit.rc
startx # mỗi lần khởi động

Cài đặt VNC Server

Để mà login vào môi trường đồ họa thôi.

sudo apt install tightvncserver

Cài đặt NoMachime NX

Nếu bạn sử dụng một Desktop Environment hoàn chỉnh thì không sao. Nhưng nếu bạn muốn i3vm, môi trường này không tương thích tốt lắm với VNC, vậy nên NoMachine NX có vẻ ok hơn:

# wget hoặc sfpt put file deb tu https://www.nomachine.com/download
sudo dpkg -i nomachine_7.6.2_3_arm64.deb

Hãy comment dòng /etc/X11/Xsession và thêm i3 & vào cuối file ~/.vnc/xstartup, chẳng hạn như sau:

#!/bin/sh

xrdb $HOME/.Xresources
xsetroot -solid grey
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1
#/etc/X11/Xsession
i3 &

Docker

curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $(whoami)

Docker Compose

Trên PI không thể cài đặt docker-compose chỉ bằng cách tải raw về được. Phải dùng pip.

sudo pip install docker-compose # nếu không dùng virtualenv

Caddy

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/caddy-stable.asc
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
sudo setcap CAP_NET_BIND_SERVICE=+eip $(which caddy) # nếu muốn chạy caddy không như một service

Vậy là xong, PI của bạn đã sẵn sàng thực hiện nghĩa vụ. Ở bước tiếp theo cấu hình hay cài đặt thêm những gói là là tùy thuộc vào chỉ số hí hoáy của bạn. Chúc vui!

Loading

Leave a Reply

Your email address will not be published. Required fields are marked *