树莓派学习(一) — 系统安装和设置

最近业余有点空闲时间,入手了一台树莓派3B+,想业余时间架点服务,另外尝试一下连接一些外设玩玩。第一次玩,很多不清楚的,所以边玩边写下来。

 

一 硬件

 

目前最新的树莓派版本是3B+,今年3月发布,上一代是16年发布的。主要区别在于CPU 频率提升到了1.4G, 网卡升级到了1000M,支持5GWIFI, 蓝牙升级到4.2。

其他树莓派型号如下:

在淘宝上购入,包装非常简单,就一个纸盒子,连一个防静电袋都没没有。 裸机大概230左右。目前主要有E14(中国产)和RS(英国产)版本,网上看主要是产地的区别,配置和功能上没有任何区别。TB上E14稍微贵一点,我买的E14版本。

性能就不说了,博通BCM2873B0, 1G DDR2, 这个配置还比不上3年前的手机。  A53 64位4核,应该和高通S400差不多参数,但是性能就。。。

买回来家里的猫大爷就抱着啃了起来。

在淘宝上买了一个亚克力的盒子,2个散热片和一个风扇和电源。电源的话3B+需要5V/2.5A的电源,目前大多手机充电器或充电宝是2A。如果有2.5A以上电源头的就不需要买了。线的话手机充电的线就可以。插上电树莓派就启动了,所以我买了一个带开关的线。 树莓派本身发热不用风扇应该也行,不过目前三伏天,36,7度还是加上散热片和风扇比较好。

CPU上方的40针接口是GPIO接口(General Purpose Input Output),主要用来连接和控制外部设备的。如果风扇是5V的,那么接在PIN04和PIN06上。

 

二 连接设备

 

官网有一系列的Guide图文并茂很容易懂:  https://projects.raspberrypi.org/en/projects/raspberry-pi-getting-started

screenshot

树莓派3B+提供了比较充足的接口,4*USB2.0, HDMI,网卡,音频接口, 相机模块接口,GPIO。

screenshot

树莓派接通电源后就启动了,所以要正常使用,在通电前要接入已经安装好系统的存储设备。  默认树莓派是使用TF卡作为存储,并且从TF卡中加载系统。所以要准备好一张TF卡并安装系统。接通电源后红色的电源指示灯亮,左边是磁盘读取的指示灯,在读写TF卡时会闪。

 

存储卡选择

 

树莓派IO性能还是比较弱的,3B+上对TF卡的写入速度上限在20-30M/S左右,随机读写2-3M/S (http://www.pidramble.com/wiki/benchmarks/microsd-cards),所以不必要选择很贵的高速卡。树莓派至少需要8G的TF卡,我建议至少16G以上。 我买的是三星EVO Plus 64G U3的卡。 写入速度64M, 随机写2M左右。  需要注意的是测试的读写速度是最高的读写速度,不代表持续,所以建议选择U3的卡,这个表示持续写速度在30M以上。 

另外TF卡作为系统盘,读写次数是很多的。目前大部分TF卡都是TLC芯片,所以在长时间使用后可能会损坏, 如果对数据要求高的,可以考虑购买MLC芯片的TF卡。现在网上有专门给行车记录仪使用的TF卡,这种应该是MLC芯片,但是速度不知道。也有一些超高速卡应该也是MLC芯片(需确认)。另外的方法就是外接硬盘,把数据挂载到外接硬盘上或定期备份TF卡的数据。

 

三 系统安装

 

树莓派是64位 ARM芯片,官方的系统是 RASPBIAN,基于Debian系统。不过官方系统是32位的。 当然还提供了其他很多系统。除了这些之外还有一些他人移植的系统,比如Ubuntu,Windows 10 ARM等等。

第一次用,装一下官方系统体验一下。官方系统主要有2种安装方式,一种是使用NOOBS安装器,一种是制作安装镜像。官网有安装指引:https://www.raspberrypi.org/learning/software-guide/

 

NOOBS

NOOBS是一个树莓派系统的安装器,适合第一次使用树莓派或者对系统安装不太熟悉的用户,可以通过NOOBS安装不同的系统。网页上提供了NOOBS和NOOBS Lite 2个下载包。 区别在于Lite只有有安装器,而不包括系统,但是下载速度会很慢,所以建议直接下载NOOBS。

 

格式化TF卡

官方建议使用SD Formatter 4.0 对TF卡进行格式化,不过这里有个问题。如果你的卡是64G或以上,这个工具会格式化成extFAT格式,但是树莓派只支持FAT32格式的TF卡进行引导, 所以需要使用其他工具转格式化或转换为FAT32。 使用SD Formatter格式化时请选择 overwrite format, 否则引导时可能会提示你找不到FAT分区。 (一开始没有看官方引导,弄了半天,官方引导还是很详细)

 

系统安装

下载完成后解压出来之后,把文件夹内的所有文件拷贝到TG卡下面就可以了。然后TF卡插入到树莓派中,通电。 一切正常的话就可以进入到安装系统界面。第一个界面是系统选择界面,可能有一个或多个系统可以选择。 第一个是系统推荐的,带有桌面程序, 也可以选择没有桌面的Raspbian Lite版(下载的NOOBS好像还有2个系统,并没有Lite版本)。整个安装过程都是图形化界面,没有什么特别说的了。

 

系统配置

安装过程中可以设置位置、时区、wifi连接、系统更新等等(目前下载的系统好像不是最新的有更新)。另外可以设置用户密码,默认的用户是pi,默认密码是raspberry,可以修改成新的密码。如果使用中文汉字可能会显示乱码,需要下载中文字体,我没有使用桌面版,所以没有处理乱码的问题,需要处理的参考:https://blog.csdn.net/y511374875/article/details/73548195

 

 

镜像安装

使用NOOBS安装的系统后,SD卡中会多出一个receovery分区。这个分区有1.4G左右,保存了系统完整的镜像,用来恢复系统用的。 使用镜像安装和安装其他系统也差不多。先下载镜像文件,,这里就有Desktop和Lite版本可以选择。Lite版本只有命令行,没有桌面,但是内存占用非常下。我看了 一下,Desktop版启动后内存使用100M, 而Lite版只有28M。并且Lite版安装完只占用1G左右的空间,而桌面版差不多有4G, 如果使用NOOBS安装桌面版, 8G空间基本只剩下不到1G。   所以如果使用树莓派作为服务器的话建议使用Lite版,说实话桌面版也没什么可玩的。 命令行是第一生产力。

 

制作

制作镜像可以使用自己熟悉的工具,也可以使用官方推荐的Etcher,这个还是很方便也很简洁,windows和mac下都有。使用要安装系统的TF卡制作好安装盘之后,可以发现TF卡被分成了boot和root两个分区,root就是挂着/的分区,只有1G左右,TF还有很大的剩余空间没有被分区。 这个时候不需要自己分区,在安装系统的时候系统会重新调整root分区的。

安装

安装和NOOBS一样,插入TF卡,通电。 第一次启动后会显示 调整分区,调整完成后会重启。我装了几次碰到或重启后屏幕不亮的情况。断电在通电试试看。应该就可以了。Lite版安装比桌面版快的多。安装完成后直接进入命令行。提示你登陆,默认的用户是pi,默认密码是raspberry。 (树莓派现在也支持从硬盘和U盘的系统启动, 百度一下,之前在官网上看到过,现在一下找不到连接了)

 

系统配置:

登录后系统有提示你,没有设置国家,所以WIFI无法使用,可以使用raspi-config来进行配置。需要root权限

sudo raspi-config

显示的菜单大概是这个样子。回车是确定,ECS返回或退出。

  1. 进入Localisation Option中设置国家,区域,时区,键盘布局等 (注意一定要修改一下键盘布局,默认是英国布局,有些按键按出来是不对的。键盘类型可以不变或选择对应的,然后布局选other,修改成美国的,后面都选默认的就行了
  2. 进入Network Options中可以设置WIFI,输入wifi的名字和密码,系统就会自动连接上wifi了
  3. 进入Interfacing Option中可以开启SSH\
  4. 进入Change User Password可以修改当前密码
  5. 设置wan

整个raspi-config用起来还是很方便,把这些设置的功能都包装起来了,不需要自己输入命令。上面设置完成后,如果成功连接上了WIFI,我们就可以通过SSH来远程控制树莓派了。

pi@raspberrypi-cc:~ $ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether b8:27:eb:89:27:b2 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:dc:72:e7 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.86/24 brd 10.0.0.255 scope global wlan0
       valid_lft forever preferred_lft forever
    inet6 fe80::efa4:b9e5:4ca4:9fd0/64 scope link
       valid_lft forever preferred_lft forever

通过上面命令看到wlan0已经有了IP地址,就可以进行远程连接了。

 

四 系统设置

 

开启root账户

默认root账户是被禁用的,所以可以通过下面命令开启root账户

#设置root密码
pi@raspberrypi-cc:~ $ sudo passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

#启用root账号
pi@raspberrypi-cc:~ $ sudo passwd --unlock root
passwd: password expiry information changed.

#切换到root
pi@raspberrypi-cc:~ $ su root
Password:
root@raspberrypi-cc:/home/pi#

 

安装VIM

不太喜欢自带的vim.tiny和nano编辑器,安装标准的vim

pi@raspberrypi-cc:~ $ sudo apt install vim

 

更新软件

检查软件更新,用apt代替apt-get。

pi@raspberrypi-cc:~ $ sudo apt update
Hit:1 http://archive.raspberrypi.org/debian stretch InRelease
Hit:2 http://raspbian.raspberrypi.org/raspbian stretch InRelease
Reading package lists... Done
Building dependency tree
Reading state information... Done
22 packages can be upgraded. Run 'apt list --upgradable' to see them.

更新软件,速度很一般几十K到300K的速度,我可是300M的宽带啊。

pi@raspberrypi-cc:~ $ sudo apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  ca-certificates dpkg dpkg-dev file libdpkg-perl libmagic-mgc libmagic1 libpam-systemd libraspberrypi-bin
  libraspberrypi-dev libraspberrypi-doc libraspberrypi0 libsystemd0 libudev1 patch raspberrypi-bootloader
  raspberrypi-kernel shared-mime-info systemd systemd-sysv tzdata udev
22 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 80.2 MB of archives.
After this operation, 239 kB of additional disk space will be used.
Do you want to continue? [Y/n]

 

更换apt源

pi@raspberrypi-cc:~ $ sudo cat /etc/apt/sources.list
deb http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi

pi@raspberrypi-cc:~ $ sudo cat /etc/apt/sources.list.d/raspi.list
deb http://archive.raspberrypi.org/debian/ stretch main ui
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://archive.raspberrypi.org/debian/ stretch main ui

上面两个文件中的地址修改为:

sudo vim /etc/apt/sources.list
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi 
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi

sudo vim /etc/apt/sources.list.d/raspi.list
deb http://mirror.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui 
deb-src http://mirror.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui

#更新一下源
sudo apt update

更新后速度3M/S,秒下。

 

查看内存

目前没跑什么,只使用了38M。

pi@raspberrypi-cc:~ $ free -h
              total        used        free      shared  buff/cache   available
Mem:           927M         38M        196M         11M        692M        814M
Swap:           99M          0B         99M

交换分区只有99M,有点小。实际内存1G,交换分区也扩展到1G。准备修改fstab,结果发现备注写了,这里swap不是一个分区,请使用dphys-swapfile

pi@raspberrypi-cc:~ $ sudo cat /etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=5f2dcb49-01  /boot           vfat    defaults          0       2
PARTUUID=5f2dcb49-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

树莓派要修改swap是修改/etc/dphys-swapfile配置文件,修改下面配置,设置为1024

CONF_SWAPSIZE=100

重启dphys-swapfile服务后查看一下交换分区,大小已经变了(- -! 怎么1023)

pi@raspberrypi-cc:~ $ sudo service dphys-swapfile restart

pi@raspberrypi-cc:~ $ free -m
              total        used        free      shared  buff/cache   available
Mem:            927          39         194          11         693         813
Swap:          1023           0        1023

查看内存占用排序

ps -aux | sort -k4,4n

 

 

查看磁盘分区

pi@raspberrypi-cc:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        59G  2.1G   55G   4% /
devtmpfs        460M     0  460M   0% /dev
tmpfs           464M     0  464M   0% /dev/shm
tmpfs           464M   12M  452M   3% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           464M     0  464M   0% /sys/fs/cgroup
/dev/mmcblk0p1   43M   22M   21M  52% /boot
tmpfs            93M     0   93M   0% /run/user/1000

结合fstab和fdisk的信息, TF卡被分成了2个分区。其中mmcblk0p1分区挂载到了/boot目录下,FAT32格式,而mmcblk0p2分区挂载到了/ 根目录下,ext4格式。系统更新之后,目前只使用了2G空间。

pi@raspberrypi-cc:~ $ sudo cat /etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=5f2dcb49-01  /boot           vfat    defaults          0       2
PARTUUID=5f2dcb49-02  /               ext4    defaults,noatime  0       1

pi@raspberrypi-cc:~ $ fdisk -l
Disk /dev/mmcblk0: 59.6 GiB, 64021856256 bytes, 125042688 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5f2dcb49

Device         Boot Start       End   Sectors  Size Id Type
/dev/mmcblk0p1       8192     96663     88472 43.2M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      98304 125042687 124944384 59.6G 83 Linux

 

科学上网

有很多软件或代码被墙,所以必须能科学上网。 访问一下google,被墙。还好VPS已经搭建了Shadowsock,树莓派上也设置一下就可以上网了。

pi@raspberrypi-cc:~ $ wget www.google.com
--2018-07-30 02:08:00-- http://www.google.com/
Resolving www.google.com (www.google.com)... 31.13.64.1, 2404:6800:4005:80d::2004
Connecting to www.google.com (www.google.com)|31.13.64.1|:80...

 

安装shadowsock客户端

最常用的shadowsock软件有用python写的shadowsock 和 c写的shadowsocks-libev

pip install shadowsocks
apt-get install shadowsocks-libev
cpan Net::Shadowsocks

我这里使用shadowsocks-libev

pi@raspberrypi-cc:/ $ sudo apt install shadowsocks-libev
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  apg libcork16 libcorkipset1 libev4 libmbedcrypto0 libsodium18 libudns0
The following NEW packages will be installed:
  apg libcork16 libcorkipset1 libev4 libmbedcrypto0 libsodium18 libudns0 shadowsocks-libev
0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded.
Need to get 563 kB of archives.
After this operation, 1,664 kB of additional disk space will be used.
Do you want to continue? [Y/n]

安装后配置SS服务器信息,填入自己服务器的地址、端口和加密方式

# sudo vim /etc/shadowsocks-libev/config.json
{
    "server":"0.0.0.0",
    "server_port":10098,
    "local_port":1080,
    "password":"****",
    "timeout":60,
    "method":""aes-256-cfb""
}

shadowsocks-libev 支持服务端和客户端,默认是服务端,需要修改为客户端。标红的为修改的。如果不修改,会报错显示地址绑定失败。错误log可以去/var/log/syslog中看

#sudo vim /lib/systemd/system/shadowsocks-libev.service

[Unit]
Description=Shadowsocks-libev Default Server Service
Documentation=man:shadowsocks-libev(8)
After=network.target

[Service]
Type=simple
EnvironmentFile=/etc/default/shadowsocks-libev
User=root
Group=root
LimitNOFILE=32768
#ExecStart=/usr/bin/ss-server -c CONFFILEDAEMON_ARGS
ExecStart=/usr/bin/ss-local -c CONFFILEDAEMON_ARGS
[Install]
WantedBy=multi-user.target

启动客户端服务,  查看一下进程已经启动了。查看一下1080端口,也在监听中

sudo service shadowsocks-libev start

pi@raspberrypi-cc:~ $ ps aux | grep shadowsock
root 14983 0.0 0.1 4256 1004 ? Ss 01:54 0:00 /usr/bin/ss-local -c /etc/shadowsocks-libev/config.json -u
pi 14988 0.0 0.0 4372 536 pts/0 S+ 01:54 0:00 grep --color=auto shadowsock

pi@raspberrypi-cc:~ $ netstat -napt|grep 1080
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:1080 0.0.0.0:* LISTEN -的

但是这个时候还不能上,因为shadowsock是socks5代理,无法直接使用。所以使用polipo作为http二级代理,把http请求转发给ss-local然后在发送给VPS。

sudo apt install polipo

sudo vim /etc/polipo/config

配置文件增加

logSyslog = true
logFile = /var/log/polipo/polipo.log

proxyAddress = "0.0.0.0"

socksParentProxy = "127.0.0.1:1080"
socksProxyType = socks5

chunkHighMark = 50331648
objectHighMark = 16384

serverMaxSlots = 64
serverSlots = 16
serverSlots1 = 32

重启服务,并设置HTTP代理, polipo代理端口是8123

sudo service polipo restart

pi@raspberrypi-cc:~ export http_proxy="http://127.0.0.1:8123/"
pi@raspberrypi-cc:~ export https_proxy="http://127.0.0.1:8123/"

访问一下google

pi@raspberrypi-cc:~ $ wget www.google.com
--2018-07-30 02:06:48--  http://www.google.com/
Connecting to 127.0.0.1:8123... connected.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’

index.html                        [ <=>                                              ]  11.77K  --.-KB/s    in 0.05s

2018-07-30 02:06:48 (241 KB/s) - ‘index.html’ saved [12057]

如果不想用代理,清空代理就可以了。

pi@raspberrypi-cc:~ export http_proxy=
pi@raspberrypi-cc:~ export https_proxy=

为了方便开关科学上网简单些了个脚本:

#!/bin/bash

shadowsockOn(){
        echo "Switch Shadowsock On"
        sudo service shadowsocks-libev start
        sudo service polipo start
        export http_proxy="http://127.0.0.1:8123/"
        export http_proxy="http://127.0.0.1:8123/"
}

shadowsockOff(){
        echo "Switch Shadowsock Off"
        sudo service shadowsocks-libev stop
        sudo service polipo stop
        export http_proxy=
        export http_proxy=
}


if [ "1" = "on" ];
then
        shadowsockOn
elif [ "1" = "off" ];
then
        shadowsockOff
else
        echo "Invalid param. Should be [off|on]"
fi

使用source执行脚本。参数是on或者off

source shadowsock.sh on

如果本文对您有帮助,可以扫描下方二维码打赏!您的支持是我的动力!
微信打赏 支付宝打赏

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注