树莓派4b的linux之旅

  • 哔哩哔哩:参考答案开心否
  • Github:参考答案开心否
  • csdn:参考答案开心否

未经本人同意禁止转载、印发。
本文涉及到的软件地址连接:
链接:https://pan.baidu.com/s/1HIfGp5Ghc2BWduS5R7Rvrg
提取码:qsa9

0 树莓派4b ubuntu20.04

0.1 官方镜像下载地址

  • 官方系统镜像地址(选择相应的版本,建议64位的,用迅雷下载链接可能快一些)
# 版本1:Ubuntu Server 20.04.1 LTS  (LTS 是官方长期支持的版本)
https://ubuntu.com/download/raspberry-pi/thank-you?version=20.04.1&architecture=server-arm64+raspi# 版本2:Ubuntu Desktop 20.10
https://ubuntu.com/download/raspberry-pi/thank-you?version=20.10&architecture=desktop-arm64+raspi

0.2 镜像的烧录与安装

  • 进行解压,得到镜像文件

    • ubuntu-20.04.1-preinstalled-server-arm64+raspi.img
  • 下载烧写工具 balenaEtcher
  • balenaEtcher 将上面解压 得到的 *-arm64+raspi.img 镜像文件烧写到SD卡中
  • SD卡烧录好有两个硬盘,一个硬盘是fat32文件系统的,一个是ext4文件格式的
  • 完成后电脑弹出SD卡,把SD安装到树莓派
  • 连接网线(没有网线就要有HDMI的显示屏)
  • 插电启动

1 系统初始化

1.1 ssh连接

  • 使用的连接软件:Xshell-6.0.0197p.exe

  • ssh连接到树莓派

  • 用户名:ubuntu

  • 密码:ubuntu

  • 修改密码,重新连接

1.2 更改镜像源

# 备份镜像源
sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
# 编辑镜像源文件
sudo vim /etc/apt/sources.list
# 添加以下的行,这个源是用在ARM板上的,支持arm64
sudo touch /etc/apt/sources.list
sudo tee /etc/apt/sources.list <<-'EOF'
deb https://mirrors.aliyun.com/ubuntu-ports/ bionic main multiverse restricted universe
deb https://mirrors.aliyun.com/ubuntu-ports/ bionic-security main multiverse restricted universe
deb https://mirrors.aliyun.com/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb https://mirrors.aliyun.com/ubuntu-ports/ bionic-backports main multiverse restricted universe
deb-src https://mirrors.aliyun.com/ubuntu-ports/ bionic main multiverse restricted universe
deb-src https://mirrors.aliyun.com/ubuntu-ports/ bionic-security main multiverse restricted universe
deb-src https://mirrors.aliyun.com/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb-src https://mirrors.aliyun.com/ubuntu-ports/ bionic-backports main multiverse restricted universe
EOF
# 更新系统源
sudo apt update
# 如果报错的话 It is held by process 2775 (apt-get)
sudo kill -9 2775
# 进行更新
sudo apt upgrade -yapt install

1.3 修改主机设置

# 修改主机名
sudo vim /etc/cloud/cloud.cfg
# 里面将preserve_hostname设置为true# 在里面修改主机名
sudo vim /etc/hostname# 修改时区和更新时间
sudo timedatectl set-timezone Asia/Shanghai
# 再次查看时间,已经修改为北京时间(Fri, 24 Apr 2020 00:27:10 +0800)
date -R

1.4 切换python的镜像源

# 新建文件夹
mkdir ~/.pipsudo vim ~/.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/[install]
trusted-host=mirrors.aliyun.com[list]
format=columns
# 安装pip3
sudo apt install python3-pip -y# 观察是否正常
pip3 list

1.5 挂载磁盘(如果有外接硬盘的话)

# 查看自己的外接硬盘的盘符
sudo fdisk -l
Device     Start        End    Sectors   Size Type
/dev/sda1   2048 1953523711 1953521664 931.5G Linux filesystem
sudo vim /etc/fstab
# 最下面加上
/dev/sda1        /mnt    ext4    defaults        0 0sudo mount -a
# 没有提示说明正确# 然后进行挂载
sudo mount /dev/sda1 /mnt# 然后访问/mnt
cd /mnt#外接硬盘就被挂载到/mnt下

1.6 显示系统信息

# 系统cpu运行
top
# 显示cpu温度
cat /sys/class/thermal/thermal_zone0/temp|awk '{printf("Temp = %.2f C\n",$1/1000)}'

1.6 重启

# 到这一步基本的工作都弄完了,重启一下树莓派
sudo reboot

2 安装 docker

  • 在这里面下载 docker-cedocker-ce-clicontainerd.io 最新的安装包

    • https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/arm64/
  • 上传下载的三个 .deb 文件
# 安装三个deb文件
sudo dpkg -i ./docker-ce-cli_20.10.2_3-0_ubuntu-bionic_arm64.deb
sudo dpkg -i ./containerd.io_1.4.3-1_arm64.deb
sudo dpkg -i ./docker-ce_20.10.2_3-0_ubuntu-bionic_arm64.deb # 进行测试
sudo docker run hello-world#配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://fvp17nw5.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker# 下载 Docker 图形化界面 portainer
sudo docker pull portainer/portainer# 创建 portainer 容器
sudo docker volume create portainer_data# 运行 portainer
sudo docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer# portainer 使用地址
# 浏览器打开 http://你的树莓派的ip地址:9000/
# 例如:http://192.168.31.184:9000/

2.1 docker 使用说明

  • 一般情况下在:http://192.168.31.184:9000/,里面可以处理大部分docker的事情
  • 有些时候需要其他的用法就需要额外的docker命令来进行使用
# 有时候,我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动
# 修改docker容器启动配置参数
sudo docker container update --restart=always 容器名称# 往docker容器里面上传文件
sudo docker cp /path/file 容器名称:/path_to_save# 查看运行的容器
sudo docker ps# 查看下载的镜像
sudo docker images# 暂停 container
sudo docker stop 容器名称# 删除容器 填容器id
sudo docker rm 容器id# 删除镜像 填镜像id
sudo docker rmi 镜像id

2.2 使用docker安装mysq5.7

  • https://hub.docker.com/_/mysql
  • 下面的服务基本上都需要使用mysql 所以这个一定要装
sudo docker pull mysql:5.7.33# -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
# 设置 MySQL 服务 root 用户的密码 MYSQL_ROOT_PASSWORD=wp123456
sudo docker run --restart unless-stopped -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=wp123456 mysql:5.7.33#进入容器
sudo docker exec -it mysql bash#登录mysql
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'wp123456';#添加远程登录用户
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
flush privileges;
exit;# 退出mysql容器
exit

3 安装应用

3.1 安装 nextcloud 云盘管理

  • https://hub.docker.com/_/nextcloud

  • 默认情况下,docker 安装 nextcloud 使用SQLite进行数据存储,但是Nextcloud设置向导(首次运行时显示)允许连接到现有的MySQL /
    MariaDB或PostgreSQL数据库。您还可以链接数据库容器(例如)–link my-mysql:mysql,然后mysql在安装时用作数据库主机。更多信息在docker-compose部分。

# 拉取 nextcloud 镜像
sudo docker pull nextcloud:latest# 新建一个文件夹,用于存放文件,这里我存放上面挂载的/mnt目录下
cd /mnt
sudo mkdir nextcloud
cd nextcloud/
sudo mkdir nextcloud apps config data theme# 下面的目录要改
sudo docker run -d -p 81:80 --restart unless-stopped -v /mnt/nextcloud/nextcloud:/var/www/html -v /mnt/nextcloud/apps:/var/www/html/custom_apps -v /mnt/nextcloud/config:/var/www/html/config -v /mnt/nextcloud/data:/var/www/html/data nextcloud# 其中 -p 8080:80  指定一个外部端口 8080,这里是指定外部端口80
  • 打开浏览器输入

    • http://你的树莓派的ip地址:81/
    • 例如:http://192.168.31.184:81/
  • 输入需要创建的管理员和密码

  • 存储与数据库里面 只需要修改配置数据库里面的内容,其他不用改。

  • 大概 5mins

# 安装完成以后修复索引
# 进入容器
sudo docker exec -u 33 -it objective_bardeen bash
./occ db:add-missing-indices
exit# nextcloud 使用地址
# 浏览器打开 http://你的树莓派的ip地址:81/
# 例如:http://192.168.31.184:81/

3.1.1 安装其他插件

# 直接在网页里面安装可能很慢
# 通过浏览器直接访问 App Store 页面
# 页面地址为 https://apps.nextcloud.com/
# 根据nextcloud的版本选择下载压缩包,压缩包的文件名后缀一般为.tar.gz# 往docker容器里面上传文件
sudo docker cp /path/registration-0.5.1.tar.gz my-wordpress:/var/www/html/apps
# 进入容器里面
sudo docker exec -it angry_proskuriakova bashcd /var/www/html/apps
tar -zvxf registration-0.5.1.tar.gz# 使用管理员账号或具有管理权限的账号登录系统,找到插件管理页面,选择启用插件即可# 设置电子邮件服务器:(qq邮箱如下图所示)
# 邮件服务器密码(需要去qq邮箱里面自己获取):zpsgpwyltntabthd

3.1.2 登录提示域名不信任的问题

# 进入容器里面
sudo docker exec -it angry_proskuriakova bash# 下载vim工具
apt update
apt install vim
# 进行修改配置文件
vim config/config.php
# 找到’trusted_domains’
# 在 array 里添加需要信任的网站(即为私有云主机的ip或者域名或者映射的外网ip)

3.2 使用 docker 安装 aria2 下载器

  • https://hub.docker.com/r/p3terx/aria2-pro
  • https://hub.docker.com/r/p3terx/ariang
# 拉取 aria2 镜像
sudo docker pull p3terx/aria2-pro
# 拉取网页ui镜像
sudo docker pull p3terx/ariang# 新建一个文件夹,用于存放文件,这里我存放上面挂载的/mnt目录下
cd /mnt
sudo mkdir aria2
cd aria2/
sudo mkdir aria2-config aria2-downloads# 运行 aria2 服务
# 下面命令中的 RPC_SECRET=wp123456 可以自己指定 例如 RPC_SECRET=qq123456,需要记住
sudo docker run -d --name aria2-pro --restart unless-stopped --log-opt max-size=1m -e PUID=$UID -e PGID=$GID -e UMASK_SET=022 -e RPC_SECRET=wp123456 -e RPC_PORT=6800 -p 6800:6800 -e LISTEN_PORT=6888 -p 6888:6888 -p 6888:6888/udp -v /mnt/aria2/aria2-config:/config -v /mnt/aria2/aria2-downloads:/downloads p3terx/aria2-pro# 运行 webui 服务
sudo docker run -d --name ariang --log-opt max-size=1m --restart unless-stopped -p 6880:6880 p3terx/ariang# 浏览器打开 http://你的树莓派的ip地址:6880/
# 例如:http://192.168.31.184:6880/# 将刚刚的 RPC_SECRET 等号后面的 wp123456 填入
# AriaNg 设置 -> RPC (192.168.31.184:6800) -> Aria2 RPC 密钥 里面
# 刷新页面,至此安装完成# aria2 下载器 使用地址
# 浏览器打开 http://你的树莓派的ip地址:6880/
# 例如:http://192.168.31.184:6880/

3.3 使用 docker 安装 samba 文件服务器

  • https://hub.docker.com/r/dperson/samba
# 拉取镜像
sudo docker pull dperson/samba# 新建一个文件夹,用于存放文件,这里我存放上面挂载的/mnt目录下# 启动镜像
# -u "user:passwd"  连接时的账号和密码,多用户就多 -u
# -v /mnt:/mount 冒号左边填的是你想要共享的目录地址,右边不要动
sudo docker run -it --name samba --restart unless-stopped -m 512m -p 139:139 -p 445:445 -v /mnt:/mount -d dperson/samba -u "wp;wp" -g "aio read size = 0" -g "aio write size = 0" -s "shared;/mount/;yes;no;yes;all;wp"# windows电脑,进入文件管理器,右击此电脑-> 添加网路位址

# windows电脑,进入文件管理器,右击此电脑-> 映射网络驱动器(N)...
# 输入 \\192.168.31.184\shared -> 完成
# 可能需要输入上面的账号密码 -> 记住密码,确定

3.4 使用 docker 安装 wordpress

  • https://hub.docker.com/_/wordpress
# 拉取 wordpress 镜像
sudo docker pull wordpress# WORDPRESS_DB_HOST 是mysql地址和端口
# WORDPRESS_DB_USER 是mysql用户名
# WORDPRESS_DB_PASSWORD 是 mysql 密码
# WORDPRESS_DB_NAME 是数据库的名称,这里填 wordpress_db
sudo docker run --name my-wordpress --restart unless-stopped -e WORDPRESS_DB_HOST=192.168.31.184:3306 -e WORDPRESS_DB_USER=mysql_用户 -e WORDPRESS_DB_PASSWORD=mysql_密码 -e WORDPRESS_DB_NAME=wordpress_db -p 80:80 -d wordpress

3.4.1 上传下载的插件或者图片大于2mb

  • 出现:上传的文件尺寸超过upload_max_filesize文件中定义的php.ini值。
# 往docker容器里面上传文件
sudo docker cp /home/ubuntu/software/mailoptin.1.2.34.2.zip my-wordpress:/var/www/html/wp-content/plugins
# 进入容器里面
sudo docker exec -it my-wordpress bash
# 下载解压工具
apt update
apt install unzip
# 把zip包复制到/wp-content/plugins文件夹下,解压
cd /var/www/html/wp-content/plugins
unzip mailoptin.1.2.34.2.zip
# 增加权限
chmod 775 ../../wp-content
# 然后在web界面就能看到了,启用,配置一下,enjoy
  • 推荐的插件:

    • 已经下载好了,按照上面的方式就可以使用了
    • 也可以在插件市场自己下载,推荐使用最新版
https://wordpress.org/plugins/contact-form-7/
https://downloads.wordpress.org/plugin/contact-form-7.5.3.2.ziphttps://wordpress.org/plugins/wp-smushit/
https://downloads.wordpress.org/plugin/wp-smushit.3.8.2.ziphttps://wordpress.org/plugins/wp-mail-smtp/
https://downloads.wordpress.org/plugin/wp-mail-smtp.2.5.1.ziphttps://wordpress.org/plugins/wp-user-avatar/
https://downloads.wordpress.org/plugin/wp-user-avatar.2.2.9.ziphttps://wordpress.org/plugins/wordpress-seo/
https://downloads.wordpress.org/plugin/wordpress-seo.15.6.2.zip

3.4.2 在仪表盘不小心更改了wordpress地址后回不到后台

# 解决这个问题,进数据库修改相关数据即可
# 操作如下:
mysql -u root -p
# 然后输入密码# 显示所有数据库
show databases;
# 选中你自己网站对应的数据库
use wordpress_db;
# 显示该数据库所有表格
show tables;
# 查看数据库前10条记录
select * from wp_options where 1=1 limit 10;

# 例如:
update wp_options set option_value='http://192.168.31.126/wordpress' where option_name='siteurl';
update wp_options set option_value='http://192.168.31.126' where option_name='home';

# 再次的查看修改后的
# 查看数据库前10条记录
select * from wp_options where 1=1 limit 10;
# 退出 mysql
quit;

  • 现在就能重新登上去了,设置也改回去了

3.5使用 docker 安装 AdGuard Home

  • https://hub.docker.com/r/adguard/adguardhome
mkdir ~/adguardhome
mkdir ~/adguardhome/work
mkdir ~/adguardhome/conf
cd ~# 创建 macvlan 网络
# 如果你的路由器的地址为 192.168.31.1 (小米路由器 miwifi.com 也是这个)
# 则设置为下面的--subnet=192.168.31.0/24 --gateway=192.168.31.1
# 否则的话只改下面的两个点之间的数字31
sudo docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 -o parent=eth0 adguardhome_net# 新建镜像
# 下面的 --ip 192.168.31.253 必须是没有被使用的 ip
sudo docker run -d --name adguardhome --restart unless-stopped --log-opt max-size=1m  --network adguardhome_net --ip 192.168.31.253 -v $PWD/adguardhome/work:/opt/adguardhome/work -v $PWD/adguardhome/conf:/opt/adguardhome/conf adguard/adguardhome# AdGuard Home 使用地址
# 浏览器打开 http://上面网卡的ip:8096/
# 例如:http://192.168.31.253:3000

  • 一直下一步,添加自己的账号

3.5.1 先在 安卓 或者 ios 设备上设置

  • IOS Wi-Fi 设置

  • 安卓 WiFi 设置

  • 在仪表盘上看到,下面的情况,就可以进行下一步了

3.5.2 DNS设置

  • 需要接管路由器的DNS,就要在配置 AdGuard Home 里面配置上游 DNS 服务器

tls://dns.pub
https://dns.pub/dns-query
tls://dns.alidns.com
https://dns.alidns.com/dns-query

119.29.29.29
223.5.5.5
9.9.9.10
149.112.112.10
2620:fe::10
2620:fe::fe:10
  • 点击应用

3.5.3 配置广告过滤规则

anti-AD
https://anti-ad.net/easylist.txtadaway
https://adaway.org/hosts.txthalflife_mobile
https://gitee.com/halflife/list/raw/master/ad.txthalflife_pc
https://gitee.com/halflife/list/raw/master/ad-pc.txt

3.5.4 修改路由器上DNS服务器

  • 在路由器上改变DNS服务器的地址

  • 等待路由器应用设置,就完成配置了

3.6 使用 docker 安装 homebridge 家庭

  • https://hub.docker.com/r/oznu/homebridge
cd ~
mkdir homebridge# PGID 和 PUID 使用下面的命令查看 id user
id ubuntu
# 有时在使用数据量(-v标志)时,主机OS和容器之间可能会出现权限问题。我们通过允许您指定用户PUID和组来避免此问题PGID。确保主机上的数据卷目录归您指定的同一用户所有,并且它将“正常工作”。sudo docker run -itd --net=host -e PGID=1000 -e PUID=1000 -e HOMEBRIDGE_CONFIG_UI=1 -e HOMEBRIDGE_CONFIG_UI_PORT=8581 -e TZ=Asia/Shanghai --name=homebridge -v $(pwd)/homebridge:/homebridge oznu/homebridge:ubuntu# 要管理Homebridge,浏览器打开 http://树莓派ip地址:8581
# 例如,http://192.168.1.20:8581
# 在这里,您可以安装,删除和更新插件,修改Homebridge config.json并重新启动Homebridge。
# 默认用户名是admin,默认密码是admin

3.7 使用 docker 安装 jellyfin 视频服务

  • https://hub.docker.com/r/jellyfin/jellyfin
  • 需要挂载一个硬盘,不然可能电影视频存放的空间可能不足
  • 可以选择任何位置来存储媒体文件
# 创建存放的文件夹
sudo mkdir /mnt/jellyfin/
sudo mkdir /mnt/jellyfin/config
sudo mkdir /mnt/jellyfin/cachesudo mkdir /mnt/media
sudo mkdir /mnt/media/moviesudo docker volume create jellyfin-config
sudo docker volume create jellyfin-cache# 下面的目录就是上面创建的目录
sudo docker run -d --name jellyfin --user 0 --net=host --volume /mnt/jellyfin/config:/config --volume /mnt/jellyfin/cache:/cache --mount type=bind,source=/mnt/media,target=/media --restart=unless-stopped jellyfin/jellyfin# jellyfin 使用地址
# 浏览器打开 http://你的树莓派的ip地址:8096/
# 例如:http://192.168.31.184:8096

3.8 使用 docker 安装 openwrt (有点小问题)

  • 参考地址:https://mlapp.cn/376.html,这里只是截取,可以去这个地址查看完整的教程
  • 必须清楚你树莓派现在的ip地址
    • 例如:192.168.31.184
# 1.打开网卡混杂模式
sudo ip link set eth0 promisc on # 2.创建网络(须结合实际网络情况,不能照抄命令)
# 如果上面已经安装过 AdGuard Home ,就不要执行下面的这一条。如果没有安装的话,就执行下面的这一条。
# sudo docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 -o parent=eth0 openwrt_net# 看到网络macnet已建立成功
sudo docker network ls# 拉取镜像
sudo docker pull registry.cn-shanghai.aliyuncs.com/suling/openwrt:latest# 镜像拉取完成后,我们可以执行docker images命令查看现存镜像:
sudo docker images# 4.创建并启动容器
# 下面的这个 --network openwrt_net
# 如果已经安装过 AdGuard Home ,就变成这个--network adguardhome_net
sudo docker run --restart unless-stopped --name openwrt -d --network openwrt_net --privileged registry.cn-shanghai.aliyuncs.com/suling/openwrt:latest /sbin/init
  • 其中:

    • restart always参数表示容器退出时始终重启,使服务尽量保持始终可用;
    • name openwrt参数定义了容器的名称;
    • -d参数定义使容器运行在 Daemon 模式;
    • network macnet参数定义将容器加入 maxnet网络;
    • privileged 参数定义容器运行在特权模式下;
    • registry.cn-shanghai.aliyuncs.com/suling/openwrt:latest为 Docker 镜像名,因容器托管在阿里云 Docker 镜像仓库内,所以在镜像名中含有阿里云仓库信息;
    • /sbin/init定义容器启动后执行的命令。
# 启动容器后,我们可以使用 docker ps -a命令查看当前运行的容器:
sudo docker ps -a# 5.进入容器并修改相关参数(须结合实际网络情况,不能照抄配置)
sudo docker exec -it openwrt bash # 执行此命令后我们便进入 OpenWrt 的命令行界面,首先,我们需要编辑 OpenWrt 的网络配置文件:
vim /etc/config/network
# 我们需要更改 Lan 口设置:
config interface 'lan'option type 'bridge'option ifname 'eth0'option proto 'static'option ipaddr '192.168.123.100'option netmask '255.255.255.0'option ip6assign '60'option gateway '192.168.123.1'option broadcast '192.168.123.255'option dns '192.168.123.1'
  • 其中:所有的 192.168.123.x 需要根据树莓派所处网段修改,option gateway和option dns填写路由器的 IP,若树莓派获得的 IP 为 192.168.2.154,路由器 IP
    为192.168.2.1,则需要这样修改:
config interface 'lan'option type 'bridge'option ifname 'eth0'option proto 'static'option ipaddr '192.168.2.100'option netmask '255.255.255.0'option ip6assign '60'option gateway '192.168.2.1'option broadcast '192.168.2.255'option dns '192.168.2.1'
  • option ipaddr 项目定义了 OpenWrt 的 IP 地址,在完成网段设置后,IP最后一段可根据自己的爱好修改(前提是符合规则且不和现有已分配 IP 冲突)。
# 6.重启网络
/etc/init.d/network restart
# 7.进入控制面板
# 在浏览器中输入第 5 步option ipaddr 项目中的 IP 进入 Luci 控制面板,若option ipaddr 的参数为 192.168.123.100,则可以在浏览器输入 http://192.168.123.100进入控制面板。#用户名:root
#密码:password#8.关闭 DHCP 服务
# 在 “网络 - 接口 - Lan - 修改” 界面中,勾选下方的 “忽略此接口(不在此接口提供 DHCP 服务)”,并“保存&应用”。# 9.主路由 DHCP 设置
# 进入路由器后台中,将主路由的 DHCP 的默认网关和 DNS 服务器设置为第 5 步中option ipaddr 项目中的 IP。# 10.重新连接路由器
# 完成以上操作后,断开设备(如手机,电脑)与路由器的连接,重新连接路由器,连接路由器的设备将获取到我们设置到的 IP。

3.9 搭建 Plex Media Server (建议用jellyfin )

  • https://hub.docker.com/r/linuxserver/plex
  • 需要挂载一个硬盘,不然可能电影视频存放的空间可能不足
  • 可以选择任何位置来存储媒体文件,只需确保设置了正确的权限即可
  • 下载地址:https://www.plex.tv/media-server-downloads/?lang=
  • 使用迅雷下载比较快

# 上传 文件/plexmediaserver_1.20.5.3600-47c0d9038_arm64.deb
sudo dpkg -i ./plexmediaserver_1.20.5.3600-47c0d9038_arm64.deb# 要验证Plex服务是否正在运行,请输入
sudo systemctl status plexmediaserver

3.9.1 配置 Plex Media Server

# 在启动Plex设置向导之前,让我们创建用于存储Plex媒体文件的目录# 需要挂载一个硬盘,不然可能电影视频存放的空间可能不足
# 可以选择任何位置来存储媒体文件,只需确保设置了正确的权限即可# 先进行挂载硬盘
cd /mnt
# 创建文件夹
sudo mkdir plex-media-server-file
sudo mkdir -p /mnt/plex-media-server-file/{movie,tv,music,photo,other}# Plex Media Server作为用户plex运行,该用户plex必须具有对媒体文件和目录的读取和执行权限。
# 要设置正确的所有权,请运行以下命令
sudo chown -R plex: /mnt/plex-media-server-file# 现在,我们可以继续进行服务器配置
# 浏览器打开 http://你的树莓派的ip地址:32400/web
# 例如:http://192.168.31.126:32400/web

4 安装 frp 内网穿透

  • 使你的树莓派可以在移动网络下使用
  • 前提是你已经有一个云端公网ip的服务器(大学生可以去阿里云购买云服务器,一年120左右)
  • 使用的工具是 frp GitHub链接

4.1 frp是什么

  • 简单地说,frp就是一个反向代理软件,它体积轻量但功能很强大,可以使处于内网或防火墙后的设备对外界提供服务,它支持HTTP、TCP、UDP等众多协议。我们今天仅讨论TCP和UDP相关的内容。

4.2 服务端设置 需要安装 docker

  • 也就是公网ip的服务器端设置
  • 需要在服务器的控制台设置弹性网卡,让7000、7500端口可以访问
mkdir ~/frps
vim ~/frps/frps.ini
[common]
bind_port = 7000
dashboard_port = 7500
token = your_token
dashboard_user = your_user
dashboard_pwd = your_pwd
vhost_http_port = 10080
vhost_https_port = 10443
docker run --restart unless-stopped --network host -d -v /root/frps/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps

4.3 树莓派端设置

# 创建存放的文件夹
mkdir ~/frp
# 修改 frpc.ini 配置
vim ~/frp/frpc.ini
# 下面的 server_addr 填你服务器的公网ip
# 下面的 token 填你刚刚需要记住的 yourToken
[common]
server_addr = your_VPS_ip
server_port = 7000
token = your_token[web_80]
type = tcp
local_ip = 192.168.31.184
local_port = 80
remote_port = 80[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7022[Portainer]
type = tcp
local_ip = 192.168.31.184
local_port = 9000
remote_port = 7900[Homebridge]
type = tcp
local_ip = 192.168.31.184
local_port = 8581
remote_port = 8581
# 修改保存后
# 拉取docker镜像
sudo docker pull snowdreamtech/frpc# 修改下面的连接地址 -v /home/ubuntu/frp/frpc.ini:/etc/frp/frpc.ini 前面是你树莓派的frpc.ini文件路径。后面不用改
sudo docker run --restart unless-stopped --network host -d -v /home/ubuntu/frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc# 此时 frpc 会在docker容器里面运行,并且是开机自动启动的
  • 需要注意的是 remote_port 是服务器端需要在控制台设置弹性网卡,让 remote_port 端口可以访问

4.4 自定义规则

  • frp实际使用时,会按照端口号进行对应的转发,原理如下图所示。

  • 上面frpc.ini的ssh、web_80字段都是自己定义的规则,自定义端口对应时格式如下

    • [xxx] 表示一个规则名称,自己定义,便于查询即可。
    • type 表示转发的协议类型,有TCP和UDP等选项可以选择,如有需要请自行查询frp手册。
    • local_port 是本地应用的端口号,按照实际应用工作在本机的端口号填写即可。
    • remote_port 是该条规则在服务端开放的端口号,自己填写并记录即可。
  • 需要注意的是 remote_port 是服务器端需要在控制台设置弹性网卡,让 remote_port 端口可以访问
  • 及时在弹性网卡里面关闭不需要的端口

4.5 关闭和更改服务

# 修改 frpc.ini 配置
vim ~/frp/frpc.ini
# 重新启动docker容器就行了

4.7 进行访问

  • 可以在移动网络下使用 http://服务器公网ip地址:remote_port 去访问你已经开启的服务

5 安装硬件

5.1 安装oled驱动

# 上传 文件/bcm2835-1.63.tar.gz
tar -zxvf bcm2835-1.63.tar.gz
cd bcm2835-1.63/# 安装GCC
sudo apt-get install gcc -y
# 安装编译文件的工具make
sudo apt install makesudo ./configure
# 进行编译
sudo make
sudo make check# 安装编译好的驱动
sudo make install# 上传 文件/wiringPi-8d188fa.tar.gz
tar xfz wiringPi-8d188fa.tar.gz
cd wiringPi-8d188fa/
sudo ./build# 检查gpio是否安装成功
gpio -v
# 安装i2c-tools工具
sudo apt-get install i2c-tools -y
# 检查oled是否插到树莓派上
sudo i2cdetect -y 1# 切换root用户
sudo su# 回到root目录
cd ~
mkdir download
mkdir oled# 切换python的国内源,下载速度快
mkdir ~/.pip
cd ~/.pip
sudo vim pip.conf
'''
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/[install]
trusted-host=mirrors.aliyun.com[list]
format=columns
'''cd ~/download
# 里面有相应的脚本例子:
# 上传 文件/Adafruit_Python_SSD1306.tar.gz
tar -zxvf Adafruit_Python_SSD1306.tar.gz# 将例子里面的文件复制到root用户的oled目录下
cp ~/download/Adafruit_Python_SSD1306/examples/stats.py  /root/oled/# 安装pip工具
apt install python-pip -y# 安装相应的库文件
pip install Adafruit_GPIO Adafruit_SSD1306 RPi.GPIO
# 安装PIL库
apt-get install python-pil -y# 后台运行控制oled显示的py文件
cd /root/oled
python stats.py &
# 成功点亮oled,显示了ip地址和其他信息

5.1.1 设置开机自动启动(有问题)

  • 控制oled显示的py文件
  • 用来显示ip地址课相应的其他信息
vim /lib/systemd/system/rc-local.service
# 在最下面添加:
'''
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
'''
# system默认读取/etc/systemd/system下配置文件,需要在/etc/systemd/system目录下创建软链接:
ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/vim /etc/rc.local
# 写入下面的内容
'''
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# 第一个是Python的目录 第二个是py文件所在的目录和文件 第三个是后台启动
/usr/bin/python /root/oled/stats.py & exit 0
'''# 给 rc.local 加上权限,启用服务
chmod 755 /etc/rc.local
systemctl enable rc-local# 启动服务并检查状态
systemctl start rc-local.service
systemctl status rc-local.service# 更新系统的其他软件
apt upgrade -y# 重启
reboot# 观察进程:
ps -aux|grep 'stats.py'
# 已经成功开机启动

保姆级教程 树莓派4b ubuntu20.04 的 linux 之旅相关推荐

  1. 树莓派4B——Ubuntu20.04 mate

    树莓派4B--Ubuntu20.04 mate 安装操作系统 安装必要的库 安装软件 VNC和SSH 开机启动 问题 安装操作系统 1.从树莓派官网下载镜像烧写工具,点这里,如图选择对应系统地烧写工具 ...

  2. 树莓派4B ubuntu20.04 python点亮LED 教程

    关于如何在ubuntu上配置python控制gpio的环境参见这篇博客 https://blog.csdn.net/ourkix/article/details/113417800 关于GPIO引脚 ...

  3. 树莓派4B ubuntu20.04 python驱动光电传感器实现计数 教程

    驱动光电传感器实现计数 光电传感器是将光信号转换为电信号的一种器件.其工作原理基于光电效应.光电效应是指光照射在某些物质上时,物质的电子吸收光子的能量而发生了相应的电效应现象.根据光电效应现象的不同将 ...

  4. 树莓派4B ubuntu20.04 UART 多串口配置通信

    相比树莓派0.1.2 以及 3 的双串口 UART0(PL011)和 UART1(mini UART),树莓派 4 中新增了 4 个 PL011 串口共计有 6 个 UART,整理此笔记用作记录和配置 ...

  5. 【强化学习实战-04】DQN和Double DQN保姆级教程(2):以MountainCar-v0

    [强化学习实战-04]DQN和Double DQN保姆级教程(2):以MountainCar-v0 实战:用Double DQN求解MountainCar问题 MountainCar问题详解 Moun ...

  6. 保姆级教程:Linux(Ubuntu 18.04)下VSCode配置与嵌入式开发平台X2000_Halley5调试环境搭建

    保姆级教程:Linux(Ubuntu 18.04)下VSCode配置与嵌入式开发平台X2000_Halley5调试环境搭建 写在前面 配置VSCode的编译环境 配置VSCode的gdb调试环境 配置 ...

  7. 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)...

    写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

  8. 天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

    天才少年稚晖君 | [保姆级教程]个人深度学习工作站配置指南 来源:https://zhuanlan.zhihu.com/p/336429888 0. 前言 工作原因一直想配置一台自己的深度学习工作站 ...

  9. 图片适应窗口_毕业论文排版保姆级教程——图片和公式排版

    [小技巧]Origin作图过程中如何让图看起来更生动 2020-05-30 [小技巧]简单设置让你origin导出的图片不在有大白边 2020-05-29 [干货放送]萤火科研资源免费赠送第一期--必 ...

  10. win11 安装Ubuntu加可视化桌面(最新保姆级教程)

    win11.win10 安装Ubuntu加可视化桌面(最新保姆级教程) 前言 保姆级安装流程 第一节·安装前准备 第二节·安装ubuntu本体 第三节·可视化安装 前言 win11.win10 安装U ...

最新文章

  1. ThinkPHP快捷查询
  2. Jmeter实现WebSocket协议的接口和性能测试方法
  3. uva 10152 ShellSort
  4. docker-compose.yml 配置文件编写
  5. 使用 Flex 布局与其他普通布局的简单对比
  6. ASP.NET MVC 重写RazorViewEngine实现多主题切换
  7. 和49支战队瓜分600万奖金,这场史上奖金最多的AI大赛到底比什么?
  8. SQL基础【七、Order by】
  9. Flex布局新旧混合写法详解
  10. 在springboot中,如何读取配置文件中的属性
  11. HDU2191 多重背包或者01背包 xingxing在努力
  12. Aizu0189 Convenient Location【Floyd算法】
  13. python判断工作日,节假日
  14. 2018全球高被引学者榜单出炉!中国上榜538人,计算机类排名第一
  15. FPGA电源设计总结
  16. ttyS、ttySAC、tty、ttyn的区别
  17. 74HC595级联介绍篇(一)
  18. Unity文档——AssetBundle使用模式
  19. 基于微信小程序开发的demo
  20. windows_server2008操作系统切换语言

热门文章

  1. php开发的在线客服系统,全开源无加密,支持微信客服对接
  2. Python---面向对象
  3. List接口(ArrayList集合和LinkedList集合)
  4. 真的有必要读研究生吗?
  5. matlab 变限积分计算,Matlab变限积分计算【方法教程】
  6. 服务器装win7找不到硬盘驱动,Windows 7安装问题时找不到硬盘驱动器怎么办
  7. Proof_Of_Work机制
  8. CS5216 Capstone DP to hdmi 1080p转换器或者转接线设计原理|CS5216 DP转HDMI转换电路原理图
  9. linux 下 安装Gdrive来实现谷歌云盘同步文件ps 可能出现 Error 404: File not found
  10. 对不起 我追不上你了。