Raspberry Pi + Fedora (aarch64) = Điểm truy cập Wi-Fi (hoặc bộ định tuyến mâm xôi có mũ màu xanh)

Trong bài viết Raspberry Pi + CentOS = Điểm truy cập Wi-Fi (hoặc bộ định tuyến mâm xôi có mũ đỏ) Tôi đã nói về cách biến Raspberry thành điểm truy cập không dây bằng hệ điều hành CentOS. Bằng cách lắp ráp bộ định tuyến gia đình của mình theo bản vẽ này, tôi đã thỏa mãn cái tôi sáng tạo của mình và nhận được sự an tâm hơn về một yếu tố quan trọng trong cơ sở hạ tầng ấm cúng của mình. Tuy nhiên, cảm giác về giải pháp chưa hoàn thiện và tính cầu toàn bên trong đã ám ảnh tôi: “một kết quả công việc không hoàn hảo thì không có quyền tồn tại”. Ý nghĩ “lý tưởng có thể và cần phải đạt được” không rời bỏ tôi lấy một phút.

Và rồi một ngày, trên một trong những diễn đàn chuyên đề, tôi bắt gặp một cuộc thảo luận về độ sâu bit của các hệ điều hành hiện có dành cho Raspberry (aarch64 so với armhfp): về nguyên tắc, hệ điều hành 64 bit nào có thể phù hợp và hoạt động trên Raspberry phiên bản 3 ++?

CentOS yêu quý của tôi dành cho kiến ​​​​trúc ARM từ “Userland” đã không vội chuyển sang phiên bản kernel mới nhất và chuyển sang 64-bit. Và kho lưu trữ EPEL, được kết nối từ đâu mà không có chữ ký số, là cơn ác mộng trong giấc ngủ không yên của tôi...

Phát biểu với tư cách là một người ủng hộ các bản phân phối dựa trên RPM, tôi rất ngạc nhiên khi thấy rằng hệ điều hành dành cho Raspberry đã hoàn toàn bị lãng quên trong các cuộc thảo luận. Fedora! Và điều này mặc dù thực tế là việc phát hành nó
từ phiên bản 28 nó chính thức hỗ trợ Raspberry Pi 3B+ ở phiên bản 64-bit!

Raspberry Pi + Fedora (aarch64) = Điểm truy cập Wi-Fi (hoặc bộ định tuyến mâm xôi có mũ màu xanh)
Trong bài viết này tôi sẽ nói về phương pháp cài đặt Fedora (aarch64) trên Raspberry Pi 3 Model B + в hiệu suất tối thiểu thêm. Tôi sẽ trình bày ngắn gọn về các tính năng nâng cao điểm truy cập Wi-Fi, được xác định là kết quả của quá trình vận hành thử cấu hình trước đó của tôi trên CentOS 7.

0. Những gì bạn sẽ cần

Mọi thứ đều giống như được liệt kê trong bài viết trước:

  • Raspberry Pi 3 Mẫu B+;
  • microSD >= 4GB (sau này bạn có thể “chuyển” hệ thống sang ổ 2GB);
  • Máy trạm với đầu đọc thẻ Linux và microSD;
  • Kết nối mạng có dây giữa Raspberry và máy trạm Linux (trong trường hợp này, không cần thêm màn hình và bàn phím để thiết lập), truy cập Internet từ cả hai thiết bị;
  • Kỹ năng nâng cao về Linux (để biết và không sợ hãi: chia tay, dd и mkfs).

Tương tự như lặp đi lặp lại LFS-xây dựng Linux của riêng bạn, hình ảnh phân phối Fedora sẽ được sử dụng và sau đó dựa trên nó, một hệ thống tối thiểu sẽ được tạo ra (không cần “biên dịch từ nguồn”).

1. Cài đặt bản phân phối gốc

Tọa độ ảnh thô của hệ thống trên Internet:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

Sau khi ghi vào thẻ nhớ microSD và trước khi sử dụng, bạn cần:

  1. Mở rộng “root” của hệ thống tập tin (phân vùng thứ 3, ext4)
    parted /dev/mmcblk0 resizepart 3 100%
    e2fsck -f /dev/mmcblk0p3; resize2fs /dev/mmcblk0p3; e2fsck -f /dev/mmcblk0p3
    for i in 1 2 3; do mkdir -p /mnt/$i; mount /dev/mmcblk0p$i /mnt/$i; done
    

  2. Vô hiệu hóa SELinux
    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

  3. Xóa Trình hướng dẫn thiết lập ban đầu:
    find /mnt/3/etc/systemd/ -iname initial-setup.service -delete
    

  4. Cho phép truy cập qua ssh:
    mkdir -p /mnt/3/root/.ssh
    cp -fv ~/.ssh/id_rsa.pub /mnt/3/root/.ssh/authorized_keys
    sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/g' /mnt/3/etc/ssh/sshd_config
    

Bây giờ bạn có thể tải xuống quả mâm xôi từ microSD và kết nối với nó qua mạng.

Khởi động nguội mất khoảng một phút rưỡi. TTX của hệ thống sau khi tải:

Raspberry Pi + Fedora (aarch64) = Điểm truy cập Wi-Fi (hoặc bộ định tuyến mâm xôi có mũ màu xanh)

rpm -qa | wc -l
444

2. Lắp ráp một hệ thống tối thiểu

Thật không may, “sự phân phối tối thiểu” từ các nhà phát triển hóa ra lại không phải là mức tiêu thụ tài nguyên khiêm tốn nhất. Hình ảnh hệ thống có thể được làm nhỏ hơn nữa.

Để thực hiện việc này, bạn cần chạy tập lệnh trên Malinka:

#!/bin/bash

. /etc/os-release
P=$(mktemp --directory $(pwd)/$ID-$VERSION_ID.XXX)

dnf --installroot=$P --releasever=$VERSION_ID --setopt=install_weak_deps=false 
--assumeyes install  
    bcm283x-firmware 
    dnf              
    grub2-efi-aa64   
    kernel           
    openssh-server   
    shim-aa64

for f in /boot/efi/EFI/fedora/grub.cfg 
         /boot/efi/EFI/fedora/grubenv  
         /boot/efi/rpi3-u-boot.bin     
         /etc/default/grub             
         /etc/fstab
do
  cp -fv $f $P$f
done

rm  -fv $P/dev/*
rm -rfv $P/var/cache/dnf

echo "--------------------------------------------------------------------------------"
du -hs $P

Sau khi chạy tập lệnh, một thư mục con sẽ được tạo trong thư mục hiện tại ($P) với nội dung gốc của phiên bản hệ điều hành tối thiểu mới. Bạn có thể tắt Raspberry và trả lại thẻ nhớ microSD cho máy trạm Linux.

3. Cài đặt hệ thống tối thiểu

Quá trình cài đặt bao gồm việc sao chép các tệp “hình ảnh” hệ điều hành tối thiểu (thu được ở bước trước) vào thẻ nhớ microSD được chuẩn bị đặc biệt vào các thư mục thích hợp.

Một thẻ 2GB và hai phân vùng trên đó là đủ:

  1. / boot / efi - EFI+FAT32, khởi động, 100MB;
  2. / (root) - EXT4, tất cả dung lượng còn lại.

Sau khi chuẩn bị thẻ nhớ microSD và sao chép các tập tin vào đó, bạn cần:

  • sửa lỗi khởi động hệ điều hành;
  • bật mạng;
  • cấu hình truy cập thông qua ssh.

Cách sửa lỗi khởi động là thay thế UUID của các phần trong file:

microSD:/boot/efi/EFI/fedora/grub.cfg
microSD:/boot/efi/EFI/fedora/grubenv

và tham số đã lưu_entry= trong tập tin cuối cùng

Trong tập tin:

microSD:/etc/fstab

bạn có thể tìm thấy các giá trị cũ và các giá trị hiện tại (cập nhật) trong đầu ra lệnh:

blkid | grep mmcblk | sort

Sau khi thay thế bạn cũng nên sửa lại nội dung fstab trên microSD sao cho các điểm gắn kết tương ứng với UUID phân vùng mới.

Chức năng mạng khi bạn bật Raspberry lần đầu tiên có thể đạt được bằng một “nạng” nhỏ - tạo một liên kết (theo sơ đồ):

ln -s /usr/lib/systemd/system/systemd-networkd.service 
  microSD:/etc/systemd/system/multi-user.target.wants

và tập tin:

mkdir -p microSD:/etc/systemd/network
cat > microSD:/etc/systemd/network/dhcp.network << EOF
[Match]
Name=*
[Network]
DHCP=ipv4
EOF

Sau khi tải xuống thành công, hãy dọn dẹp quá trình khởi chạy systemd-mạngd:

systemctl disable systemd-networkd
systemctl enable systemd-networkd

Quyền truy cập siêu người dùng qua ssh được định cấu hình tương tự như bước 1.

Sau khi thực hiện mọi thứ một cách cẩn thận và không có lỗi, bạn có thể di chuyển thẻ nhớ microSD vào "quả mâm xôi" và bắt đầu làm việc với hệ điều hành 64 bit ở phiên bản tối thiểu hơn.

4. Hệ thống sẵn sàng

Bạn có thể tải xuống “hình ảnh” của hệ thống đã hoàn thiện theo hướng dẫn ở trên từ liên kết:
Fedora-Tiny-31-5.5.7-200.aarch64

Đây sẽ là một kho lưu trữ chứa hai tệp: tập lệnh cài đặt và TGZ với các tệp hệ điều hành. Kho lưu trữ cần được giải nén trên máy trạm Linux, lắp thẻ nhớ microSD (thẻ 2GB là đủ) và chạy tập lệnh có tham số - tên thiết bị:

./install /dev/mmcblk0

Hãy cẩn thận!

Nếu không có bất kỳ cảnh báo nào, thiết bị sẽ được định dạng và hệ điều hành sẽ được cài đặt trên đó.

Sau khi thực thi tập lệnh không có lỗi, thẻ có thể được sắp xếp lại thành “mâm xôi” và được sử dụng: bắt qua dhcp, mật khẩu - “1”.

Hệ thống sẽ bị xóa tất cả ID và khóa, đó là lý do tại sao mỗi lần cài đặt mới là duy nhất.

Tôi nhắc lại một lần nữa, hệ thống -- tối thiểu! Do đó, đừng lo lắng: DNF đã có sẵn, để nó hoạt động, bạn sẽ phải “phát minh” ra cái chính xác / Etc / resolv.conf.

Quá trình khởi động nguội của Raspberry mất khoảng 40 giây. TTX của hệ thống sau khi tải:

Raspberry Pi + Fedora (aarch64) = Điểm truy cập Wi-Fi (hoặc bộ định tuyến mâm xôi có mũ màu xanh)

rpm -qa | wc -l
191

5. Wifi

Tôi sẽ tập trung một chút vào các tính năng của việc triển khai điểm truy cập Wi-Fi. Để biết cụ thể, bạn có thể tham khảo trước đây của tôi Bài viết.

EPEL không còn cần thiết nữa - tất cả các gói đều được chứa trong kho chính thức.

Có lẽ đáng để từ bỏ dnsmasq, vì Fedora, không giống như CentOS, có systemd-networkd khá gần đây, có máy chủ DHCP/DNS tích hợp thông thường. Nhưng thực tế là ở các nhà phát triển RHEL8 từ chối hỗ trợ ngăn xếp mạng bằng bất kỳ thứ gì ngoài NM, không tạo được niềm tin vào tương lai tươi sáng của dự án (những kẻ vô lại). Tóm lại là tôi chưa thử.

Hơn nữa, các trình điều khiển hiện tại cho bộ điều hợp Wi-Fi tích hợp không thể bị “đánh cắp” từ bản phân phối Raspbian mà được tải xuống trực tiếp từ github.

Đây là giao diện của tệp chương trình cơ sở Broadcom trên Raspberry của tôi (theo sơ đồ):

ls /usr/lib/firmware/brcm | grep 43455

 [612775] brcmfmac43455-sdio.bin
  [14828] brcmfmac43455-sdio.clm_blob
[symlink] brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt -> brcmfmac43455-sdio.txt
   [2099] brcmfmac43455-sdio.txt

Không có chúng, bạn sẽ không nhận được 5GHz/AC.

Về số lượng và tên các giao diện. Bây giờ tôi thực sự khuyên mọi người không nên sử dụng “dịch vụ” của các bộ chuyển mạch phần mềm trừ khi thực sự cần thiết (cầu), điều này đưa tải đáng kể vào ngăn xếp mạng và làm giảm việc định tuyến. Nếu bạn không định có nhiều bộ điều hợp không dây thì bạn chỉ nên sử dụng các giao diện vật lý. Tôi có hai Wi-Fi, vì vậy tôi chỉ kết hợp chúng thành một cầu nối phần mềm (mặc dù bạn có thể thực hiện mà không cần điều này bằng cách xem cách thiết lập máy chủ lưu trữ theo cách khác).

Và tôi thích đổi tên giao diện.

Để thực hiện việc này trong Fedora, bạn cần tạo một liên kết tượng trưng:

/etc/systemd/network/99-default.link -> /dev/null

và sau đó sẽ có thể đặt những cái tên có ý nghĩa mà không cần phải tìm tòi xung quanh udev, nhưng chỉ sử dụng systemd-networkd.

Ví dụ: đây là tên mà bộ điều hợp mạng trong bộ định tuyến của tôi:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

2: wan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

3: lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

4: int: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master lan state UP group default qlen 1000

5: ext: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master lan state UP group default qlen 1000

  • int - được xây dựng trong, ext — bộ điều hợp Wi-Fi bên ngoài (USB) được lắp ráp thành một “cầu nối” lan;
  • wan - Bộ điều hợp Ethernet để kết nối Internet.

Nhận thấy? fq_codel - một điều thực sự tuyệt vời. Cùng với nhân Linux mới, chúng tạo ra những điều kỳ diệu thực sự trong phạm vi không dây: việc “tải xuống torrent” dữ dội sẽ không dẫn đến tốc độ giảm đột ngột giữa các nước láng giềng. Ngay cả một IP-TV gia đình hoạt động “qua mạng” với một kênh đã tải cũng không “bị hỏng” và không hề “lắp đặt”!

Tệp dịch vụ daemon đã trải qua những thay đổi nhỏ hostapd.

Bây giờ nó trông như thế này (sử dụng ví dụ về bộ chuyển đổi tích hợp):

[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
After=network.target
BindsTo=sys-subsystem-net-devices-int.device

[Service]
Type=forking
PIDFile=/run/hostapd-int.pid
#ExecStartPre=/usr/sbin/iw dev int set power_save off
ExecStart=/usr/sbin/hostapd /path/to/hostapd-int.conf -P /run/hostapd-int.pid -B

[Install]
RequiredBy=sys-subsystem-net-devices-int.device

Và Hostapd-int.conf “ma thuật” để hoạt động ở tần số 5GHz/AC:

ssid=rpi
wpa_passphrase=FedoRullezZ

# 5180 MHz  [36] (20.0 dBm)
# 5200 MHz  [40] (20.0 dBm)
# 5220 MHz  [44] (20.0 dBm)
# 5240 MHz  [48] (20.0 dBm)
# 5745 MHz [149] (20.0 dBm)
# 5765 MHz [153] (20.0 dBm)
# 5785 MHz [157] (20.0 dBm)
# 5805 MHz [161] (20.0 dBm)
# 5825 MHz [165] (20.0 dBm)

channel=36
#channel=149

# channel+6
# http://blog.fraggod.net/2017/04/27/wifi-hostapd-configuration-for-80211ac-networks.html

vht_oper_centr_freq_seg0_idx=42
#vht_oper_centr_freq_seg0_idx=155

country_code=US

interface=int
bridge=lan

driver=nl80211

auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

macaddr_acl=0

hw_mode=a
wmm_enabled=1

# N
ieee80211n=1
require_ht=1
ht_capab=[HT40+][SHORT-GI-40][SHORT-GI-20]

# AC
ieee80211ac=1
ieee80211d=0
ieee80211h=0
vht_oper_chwidth=1
require_vht=1
vht_capab=[SHORT-GI-80]

Một chút photoshop được làm từ chiếc Ericsson A1018s của tôi:

(Kết nối Internet - 100Mbit/giây)Raspberry Pi + Fedora (aarch64) = Điểm truy cập Wi-Fi (hoặc bộ định tuyến mâm xôi có mũ màu xanh)
Và cuối cùng, một câu hỏi thường gặp nhỏ.

6. Câu hỏi thường gặp

6.1 Tại sao phải tạo bộ định tuyến Wi-Fi trên Raspberry?

Người ta có thể trả lời đơn giản như “thật thú vị khi thử tất cả những thứ đó”.

Nhưng trên thực tế, đối với tôi, chủ đề này khá nghiêm túc. Trong thời đại Internet “đẫm máu”, việc mua một bộ định tuyến trong cửa hàng và làm con tin cho nhà sản xuất nó là một viễn cảnh rất ảm đạm. Nhiều người đã hiểu rằng việc ngồi với CVE hoặc cửa sau tích hợp là không thể.

Tất nhiên, bạn có thể chuyển sang chương trình cơ sở WRT từ những người đam mê. Có lẽ người ta tin tưởng họ nhiều hơn, nhưng nếu bạn không muốn phụ thuộc vào họ thì hãy sử dụng sản phẩm của chính bạn. Lý tưởng nhất là một chiếc máy tính hoàn chỉnh để mọi thứ trên thế giới đều có thể được thực hiện trên đó. Tất nhiên là về mặt định tuyến.

Vì vậy, việc lựa chọn một quả mâm xôi là một động thái kinh tế thuần túy: một chiếc máy tính thực sự và đồng thời là một chiếc rẻ tiền. Mặc dù, có lẽ cũng vậy - với "bộ đôi" của họ bên trong.

6.2 Nhưng Raspberry là một “bộ định tuyến cấp thấp”: chậm và có một cổng Ethernet!

Với tư cách là một bộ định tuyến Wi-Fi gia đình, Raspberry khiến tôi hài lòng hơn cả. Tôi đã nói về tốc độ không khí ở trên. Và chỉ có một Ethernet, à, trong một sản phẩm tương tự của Apple, nó cũng giống như vậy!

Nhưng nghiêm túc mà nói, tất nhiên tôi muốn nhiều hơn thế. Và mặc dù thực tế là trong gia đình tôi tất cả các thiết bị đều được kết nối không dây, đôi khi vẫn cần có kết nối đồng. Đối với những trường hợp như vậy, tôi có sẵn một “trung tâm di động”:

thiết bị - đại loại như thế nàyRaspberry Pi + Fedora (aarch64) = Điểm truy cập Wi-Fi (hoặc bộ định tuyến mâm xôi có mũ màu xanh)

6.3 Nếu đây là một bộ định tuyến thì không có gì được nói đến về việc “điều chỉnh” TCP/IP, vì điều này rất quan trọng!

Ngoài việc thiết lập ngăn xếp mạng (tcp_fastopen, YeAH, v.v.), bài viết này và bài viết trước không đề cập đến các sắc thái khác, đặc biệt là quá trình chuẩn bị microSD để sử dụng tối ưu (mặc dù trình cài đặt cố gắng định dạng thẻ nhớ trong một cách khó khăn). Quá trình cải tiến là vô tận, bạn chỉ cần dừng lại kịp thời.

6.4 Tại sao lại dùng Fedora?

Bởi vì tôi thích! Fedora là một hệ thống “chính thống” dành cho những người đam mê công nghệ, đối tượng mà bài viết này thực sự hướng tới. Tại thời điểm viết bài, có lẽ hệ điều hành duy nhất dành cho Raspberry ở phiên bản 64 bit được hỗ trợ chính thức bởi một đội ngũ nhà phát triển đáng kể (những người mà tôi rất nóng lòng chờ đợi). hạt nhân 5.6).

6.5 Bluetooth có hoạt động không? Video/âm thanh/GPIO thế nào?

Không biết. Bài viết nói về cách cài đặt tối thiểu của hệ thống và việc sử dụng hệ thống sau đó làm bộ định tuyến Wi-Fi.

6.6 Tại sao tất cả các bài viết về CentOS/Fedora/RedHat đều bắt đầu bằng việc vô hiệu hóa SELinux?

Bởi vì hệ thống này rất tối thiểu nên nó thậm chí không có tường lửa hoặc các tiện ích để thiết lập. Bất cứ ai cần nó đều có thể cài đặt thêm mọi thứ họ cần.

6.7 Hệ thống không thể sử dụng được, không thể thay đổi mật khẩu - không có mật khẩu. Không có ping, không có gì!

DNF. Hoặc tùy chọn cài đặt này không dành cho bạn - hãy sử dụng bộ phân phối từ nhà phát triển.

6.8 SWAP ở đâu? Tôi không thể sống thiếu anh ấy!

Có đúng không? Được rồi:

fallocate -l 1G /swap
chmod -v 0600 /swap
mkswap -f /swap
swapon -v /swap
grep "/swap" /etc/fstab || echo "/swap swap swap defaults 0 0" >> /etc/fstab

6.9 Tôi muốn tải xuống ngay hình ảnh tạo sẵn có điểm truy cập Wi-Fi đã được định cấu hình!

Việc chuẩn bị một trình cài đặt “cho mọi người” sẽ đòi hỏi một chút thời gian và công sức. Nếu (đột nhiên!) ai đó thực sự thấy điều này thú vị và cần thiết, hãy viết thư cho chúng tôi và chúng tôi sẽ nghĩ ra điều gì đó.

Tôi sẽ kết thúc với điều này.

Tôi chúc mọi người lướt web an toàn và kiểm soát tối đa cơ sở hạ tầng!

Nguồn: www.habr.com

Thêm một lời nhận xét