Headless Raspberry Pi

萌新:如何配置“无头”树莓派呀?

休闲玩家:照官方文档配呗……

烧录镜像

Raspbian操作系统的下载页面下载Raspbian Stretch Lite镜像,使用Etcher烧录镜像。

镜像烧录好后,SD卡被挂载在主机目录树中/media/pi的位置,并被分成了两个分区:引导文件系统boot、根文件系统rootfs

配置文件

sudo su命令,将主机用户切换成root用户;

SSH

  1. boot分区的根目录下,创建一个名为ssh的空白文件1

  2. ssh-keygen命令创建一个SSH KEY2

  3. rootfs分区的home/pi目录下,新建一个名为.ssh的目录3

  4. 将SSH KEY的公钥id_rsa.pub写入.ssh目录下的authorized_keys文件中;

  5. sed命令,修改rootfs分区中etc/ssh目录下的sshd_config文件中的认证信息。

touch /media/pi/boot/ssh
home=$(cat /etc/passwd | grep 1000:1000 | grep /home/[^:]* -o)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f $home/.ssh/id_rsa
cd /media/pi/rootfs/home/pi/
mkdir .ssh
cat $home/.ssh/id_rsa.pub >> .ssh/authorized_keys
chmod 644 .ssh/authorized_keys
cd /media/pi/rootfs/etc/ssh/
sed -i '/ChallengeResponseAuthentication no/c ChallengeResponseAuthentication no' sshd_config
sed -i '/PasswordAuthentication yes/c PasswordAuthentication no' sshd_config
sed -i '/UsePAM yes/c UsePAM no' sshd_config

Wi-Fi

  1. wpa_passphrase命令,接受两个参数:ssidpassphrase,用于生成Wi-Fi连接信息4

  2. sed命令在连接信息中添加两个字段:国名、搜寻隐藏网络;

  3. 将连接信息追加到rootfs分区中etc/wpa_supplicant目录下的wpa_supplicant.conf文件中。

cd /media/pi/rootfs/etc/wpa_supplicant/
wpa_passphrase 'ssid' 'passphrase' | sed -e '1i country=CN' -e '3i \\tscan_ssid=1' >> wpa_supplicant.conf

静态IP

  1. 登录路由器的管理界面,查看LAN口IP参数:IP地址与子网掩码;

  2. ip_address的值为:树莓派的静态IP地址/子网掩码位数,routersdomain_name_servers的值为LAN口IP地址;

  3. 修改rootfs分区中etc目录下的dhcpcd.conf文件5

cd /media/pi/rootfs/etc/
cat >> dhcpcd.conf << EOF
interface wlan0
    static ip_address=192.168.0.200/24
    static routers=192.168.0.1
    static domain_name_servers=192.168.0.1
EOF

hostname与locale

  1. rootfs分区中etc目录下的hostnamehosts文件中,写入树莓派的新主机名;

  2. 将环境变量$LC_ALL添加到rootfs分区中home/pi目录下的.bashrc文件中。

cd /media/pi/rootfs/etc/
echo 'raspberrypi0' > hostname
sed -i '/raspberrypi/c 127.0.1.1\traspberrypi0' hosts
cd /media/pi/rootfs/home/pi/
echo 'export LC_ALL="C.UTF-8"' >> .bashrc

搭建集群

  1. Docker Machine无法识别树莓派的操作系统,需挨个安装Docker

  2. 参照Swarm示例6,编排容器集群。

/assets/posts/raspberrypi.jpg