树莓派使用笔记

发布于 — 2019 年 08 月 08 日
#树莓派

预备条件

  • 树莓派(我的型号的3b+),电源线
  • 内存卡 class10 8g以上
  • 一台有ssh连接的电脑或者显示器、键鼠

最终实现功能

  • 开机自动挂载外接硬盘
  • Samba(局域网文件共享)
  • 开启ftp连接
  • Nginx
  • Mariadb数据库(与MySQL相同)
  • Docker
  • 内网穿透
  • Aria2下载机

安装系统

下载镜像

官网下载自己想要的镜像,一般就下载树莓派的默认Raspbian系统就行了,有桌面版和无桌面版。自行选择所需系统下载即可。

输入内存卡

推荐使用软件balenaEtcher这个软件,这个有windows版本和macos版本,所以还是很方便的。

选择我们下载镜像的安装位置,选择要刷的设备这里就是我们的内存卡,然后点击确认即可。

系统配置

在刷完系统后拔出读卡器,然后再插入电脑,此时可以看到一个boot分区。以下文件都保存在这个分区里面。

  • 设置SSH访问

    写一个空白的文件,命名为ssh,大小写无所谓,注意ssh就是文件的全部名称不要有后缀。

  • 设置WIFI

    如果有网线,可以先使用网线连接,后面再考虑这一步。

    写一个命名为wpa_supplicant.conf的文件,这里面写wifi的配置信息。

    主要有以下几个属性:

    • ssid:WiFi的名称
    • psk: 密码
    • key_mgmt:WIFI的加密方式
    • priority:连接的优先级,数字越大优先级越高,不可以是负数
    • scan_ssid:连接隐藏的wifi时需要将这个指定为1
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
    # WiFi配置
    network={
    	ssid="WiFi-A"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=1
    }
    # 连接隐藏的WiFi
    network={
        ssid="WiFi-B"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=2
        scan_ssid=1
    }
    
    # 无密码时候的配置
    network={
        ssid="你的无线网络名称(ssid)"
        key_mgmt=NONE
    }
    # WiFi 使用WEP加密
    network={
        ssid="你的无线网络名称(ssid)"
        key_mgmt=NONE
        wep_key0="你的wifi密码"
    }
    # WiFi 使用WPA/WPA2加密
    network={
        ssid="你的无线网络名称(ssid)"
        key_mgmt=WPA-PSK
        psk="你的wifi密码"
    }
    

开机重置密码

如果有屏幕和键鼠就直接连接即可。

如果没有屏幕,需要先知道树莓派的ip,到路由器上查看树莓派的ip利用ssh软件连接到这个ip即可。

默认的用户名与密码是piraspberry。登录后可以重置密码。

输入passwd,然后根据提示输入新密码即可。

树莓派默认是锁住root用户的,如果需要可以执行以下命令进行解锁:

1
2
sudo passwd root # 根据提示设置root密码即可
sudo passwd --unlock root # 解锁root用户

然后我们可以对系统执行一下更新:

1
2
sudo apt-get update
sudo apt-get upgrade

开机挂载硬盘

由于树莓派使用的是内存卡,并把它当做存储系统,所以存储大小就取决于内存卡的大小,所以我将树莓派挂载了一个外接硬盘。并且设置了开机自动挂载,这样就不用每次执行挂载命令了。但是要注意的是可能供电不足,如果遇到这种情况需要给移动硬盘额外供电,不过我没出现这种情况。

1.为了在windows和mac上都能使用,所以先将硬盘转换为ExFAT格式并安装所需软件

1
sudo apt-get install exfat-fuse

2.在树莓派上插上硬盘,查看设备编号。

1
sudo fdisk -l # 我们可以根据容量大小等信息判断哪个是sd卡,哪个是硬盘

3.建立挂载目录

1
sudo mkdir /media/yingpan  # 这个位置随便

4.挂载

挂载的时候我遇到了一个问题就是硬盘里面有东西就挂载不进去,所以我将内容备份了一下,重置了后又重新挂载的。

1
sudo mount /dev/sda1 /media/yingpan # /dev/sda1 是第2步的硬盘编号, /media/yingpan 是第3步建立的位置

5.开机挂载

编辑/etc/fstab文件,在最后一行添加:

/dev/sda1 /media/yingpan exfat rw,defaults,nofail 0 0

/dev/sda1是你要自动挂载的硬盘

/media/yingpan是你要挂载到的地方

nofail是很重要的一个参数,如果连接了硬盘就实现自动挂载,如果没连接硬盘也能正常启动。

我就在填了这个文件后启动报错了,然后我连接上屏幕将这个文件又重新修改了后才能开机,所以这个配置文件很重要,如果填错了就开不了机了。一定要注意跟自己的硬盘格式是不是一致,如果错了也不要怕,连上屏幕使用root用户把这个文件再修改回来就好了。

6.热插拔挂载

/etc/udev/rules.d/新建10-usbstorage.rules文件,会自动在/meida/yingpan/目录下挂载。

[ruby] view plaincopy

KERNEL!="sd*", GOTO="media_by_label_auto_mount_end"  
SUBSYSTEM!="block",GOTO="media_by_label_auto_mount_end"  
IMPORT{program}="/sbin/blkid -o udev -p %N"  
ENV{ID_FS_TYPE}=="", GOTO="media_by_label_auto_mount_end"  
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"  
ENV{ID_FS_LABEL}=="", ENV{dir_name}="Untitled-%k"  
ACTION=="add", ENV{mount_options}="relatime,sync"  
ACTION=="add", ENV{ID_FS_TYPE}=="vfat", ENV{mount_options}="iocharset=utf8,umaskk=000"  
ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", ENV{mount_options}="iocharset=utf8,umaskk=000"  
ACTION=="add", RUN+="/bin/mkdir -p /mnt/yingpan/", RUN+="/bin/mount -o $env{mount__options} /dev/%k /mnt/yingpan/"  
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /meida/yingpan/}", RUN+="//bin/rmdir /meida/yingpan/"
LABEL="media_by_label_auto_mount_end"

Samba(局域网文件共享)

使用树莓派挂载移动硬盘后,如果需要在其他机器上访问移动硬盘,可以在树莓派上安装samba开启局域网的文件共享

首先我们需要安装samba软件

1
2
sudo apt-get install samba samba-common-bin
sudo apt-get install avahi-daemon(可选,用于支持网内的计算机自动发现)

安装完成后修改配置文件:sudo vim /etc/samba/smb.conf,在配置文件最后追加这些信息:

[NAS] # 文件夹的名称,在局域网中以这个名称展示
comment = Public Storage # 文件夹说明
path = /path # 共享文件的路径,要把这个文件夹的权限修改成 777
create mask = 0777 #创建文件的权限
directory mask = 0777 #创建文件夹的权限
guest ok = yes # 游客访问,不需密码。
# valid users = pi # 需要登录后查看,登录的用户名
browseable = yes # 允许浏览
read only = no # 是否可读

如果配置了访问的用户,这个用户与系统用户还不一致,需要自行添加用户到samba系统

1
sudo smbpasswd -a pi # pi 就是用户名 然后输入密码即可

然后我将上面没有的[printers]删掉了,并对[homes]进行了修改,最终[homes]的配置如下:

[homes]
comment = Home Directories
browseable = no
read only = no
create mask = 0777
directory mask = 0777
valid users = %S

这样登录后即可访问[homes]的文件夹下内容了。

这时打开mac系统的访达就可以看到我设置的[NAS]文件夹,登录后就可以看到[homes](/home/pi)文件夹下的内容。

配置ftp

有时候还会使用到ftp操作,所以安装了vsftpd。

1
sudo apt-get install vsftpd

然后再进行修改配置文件,配置文件在/etc/vsftpd.conf,主要修改为以下的内容:

1
2
3
4
5
write_enable=YES #可以进行写操作
# 下面几项都是默认的或者被注释的。可改可不改
annoymous_enable=NO #是否开启匿名访问,关闭即可
local_enable=YES #设定本地用户可以访问
local_umask=022 # 上传后文件的权限,默认是077

然后开启服务sudo service vsftpd start

我们就可以使用ftp软件连接到树莓派了。

安装编译nginx

具体文章可以参照我的这篇文章nginx编译安装

安装、配置Mariadb

安装

1
sudo apt-get install mariadb-server

配置

1
sudo mysql -u root -p # 以root身份登录,然后提示输入密码,安装完成后密码为空,所以直接回车即可

这时已经进入mysql的命令行,对root修改密码并且授权远程访问

1
2
3
4
5
6
usr mysql;
update user set password = PASSWORD('要设置的密码') where user = 'root' # 对root用户修改密码,如果需要root可远程访问将host更新为 % 即可
# 或者新建其他用户(新建用户为 pi  密码为 123456)
CREATE USER 'pi'@'%' IDENTIFIED BY '123456';
# 对新建用户授予权限
GRANT ALL ON *.* TO 'pi'@'%';

然后还需要修改mysql的配置文件/etc/mysql/mariadb.conf.d/50-server.cnf,将其中的bind-address = 127.0.0.1给注释掉即可。

Docker

自己的电脑上也能安装docker,但是运行时会有些卡顿,所以我就将docker装在了树莓派上面

具体安装和使用文章可以看我的这篇文章:Docker

内网穿透

我仅仅使用过花生壳与frp两种方案,还有很多其他的解决方案。

花生壳

首先贴出官方文档地址,一般看这个文档按照这个执行就可以完成了:http://service.oray.com/question/2680.html

但是这个毕竟是人家公司的服务项目,所以我们申请后只有1m的带宽,限制也挺多。但是刚刚开始使用时也是不错的解决方案。

frp

这个方案就是使用自己的服务器做中转,所以我们就需要一台自己的服务器。

具体实现方案可以看我的这篇文章:内网穿透

Aria2下载机

有了NAS和外接硬盘,我们可以做一个下载机。

安装

1
sudo apt-get install aria2

配置

创建配置文件夹和配置文件、会话文件

1
2
3
mkdir -p ~/.config/aria2/ #创建文件夹 这个文件夹位置可以随意修改,只要后面能对应即可
touch ~/.config/aria2/aria2.session #创建会话文件
vim ~/.config/aria2/aria2/conf #创建配置文件

然后配置文件的内容可以照着这样写:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#后台运行
daemon=true
#允许rpc
enable-rpc=true
#允许所有来源, web界面跨域权限需要
rpc-allow-origin-all=true
#允许外部访问,false的话只监听本地端口
rpc-listen-all=true
#RPC端口, 仅当默认端口被占用时修改
rpc-listen-port=6800
#最大同时下载数(任务数), 路由建议值: 3
max-concurrent-downloads=5
#断点续传
continue=true
#同服务器连接数
max-connection-per-server=5
#最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要
min-split-size=10M
#单文件最大线程数, 路由建议值: 5
split=10
#下载速度限制
max-overall-download-limit=0
#单文件速度限制
max-download-limit=0
#上传速度限制
max-overall-upload-limit=0
#单文件速度限制
max-upload-limit=0
#文件保存路径, 默认为当前启动位置(我的是外置设备,请自行坐相应修改)
dir=/mnt/LiuNaiJie/download
#保存下载会话
save-session=/home/pi/.config/aria2/aria2.session
input-file=/home/pi/.config/aria2/aria2.session
#断电续传
save-session-interval=60

## BT/PT下载相关 ##

# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
#follow-torrent=true
# BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51413
# 单个种子最大连接数, 默认:55
#bt-max-peers=55
# 打开DHT功能, PT需要禁用, 默认:true
enable-dht=false
# 打开IPv6 DHT功能, PT需要禁用
#enable-dht6=false
# DHT网络监听端口, 默认:6881-6999
#dht-listen-port=6881-6999
# 本地节点查找, PT需要禁用, 默认:false
#bt-enable-lpd=false
# 种子交换, PT需要禁用, 默认:true
enable-peer-exchange=false
# 每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K
# 客户端伪装, PT需要
peer-id-prefix=-TR2770-
user-agent=Transmission/2.77
# 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
seed-ratio=0
# 强制保存会话, 即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
#force-save=false
# BT校验相关, 默认:true
#bt-hash-check-seed=true
# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true
# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
bt-save-metadata=true

启动:

aria2c --conf-path=/home/pi/.config/aria2/aria2.config

下载web管理页面

我这里使用的是AriaNg,官网地址是https://github.com/mayswind/AriaNg/releases,可以下载最近的版本,之前已经安装过nginx了,就直接下载解压到nginx的html下,然后访问树莓派ip/aria-ng显示如下的页面。

设置开机启动

创建ststemctl service文件

1
sudo vim /libsudo vim /lib/systemd/system/aria2.service

编写脚本文件,里面的配置文件路径修改为自己的路径

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[Unit]
Description=Aria2 Service
After=network.target

[Service]
User=pi
ExecStart=/usr/bin/aria2c --conf-path=/home/pi/.config/aria2/aria2.config

[Install]
WantedBy=default.target

然后重载服务并设置开机启动

1
2
3
4
sudo systemctl daemon-reload
sudo systemctl enable aria2
sudo systemctl start aria2
sudo systemctl status aria2

参考文章: