准备一台x86工控机,最小配置(4G内存、64G存储空间)。
如只是进行开发和测试,也可用虚拟机或者个人电脑进行替代性。
x86软路由

x86工控机

Linux操作系统
推荐Ubuntu Server 22.04 LTS版本,或者Ubuntu Server 24.04 LTS版本,
部分用户习惯Debian系列
目前已适配11稳定版本,或者Debian 12稳定版本。
注意:Debian对中文文件名支持的并不好,容易出现乱码问题,建议模板文件只使用ASCII字符,以免出现乱码引来不必要的麻烦。
1、JAVA:openjdk-11-jdk 或 openjdk-17-jdk
2、MySql或Mariadb:MySql8.0以上版本 或者 Mariadb 10.5.x以上版本
3、Redis:6.0以上版本
4、nginx:1.18以上版本
5、python3:3.8.x以上版本
请到Ubuntu的页面下载服务器版本
https://releases.ubuntu.com/22.04.2/ubuntu-22.04.2-live-server-amd64.iso
操作系统 Ubuntu-server
# ubuntu在安装阶段,建议选择最小安装和安装ssh,其他建议操作系统的默认值安装
基础软件 net-tools
# 更新软件
sudo apt-get update
# net-tools是linux下的网络基本工具,包含ifconfig命令
sudo apt-get install net-tools
远程登录linux
# 用sudo修改root的初始密码,方便后续安装软件
sudo passwd root
# 切换为root账号
su root
基础软件 vim
sudo apt install vim -y
基础软件 dos2unix
# dos2unix工具:windows环境下编辑的sh文件,经常会因为文件格式不同导致无法运行,此时需要使用dos2unix进行格式转
# 换处理,否则会出现/bin/bash^M: bad interpreter: No such file or directory的错误,导致无法执行
apt install dos2unix -y
# dmidecode工具:查询CPU信息,这是设备序列号的信息来源,相关查询命令dmidecode -t 4 | grep ID |sort -u |awk -F': ' '{print $2}'
apt install dmidecode -y
基础软件 openssh
# 更新软件
apt-get update
# 安装openssh
apt install openssh-server -y
#修改root密码
passwd root
#允许root远程登录
vim /etc/ssh/sshd_config
#将sshd_config文件中的PermitRootLogin prohibit-password修改为PermitRootLogin yes
#重启ssh
service ssh restart
基础软件 vsftpd(非必须软件,安装它仅为了方便于开发调试)
# 更新软件
apt-get update
# 安装vsftpd
apt-get install vsftpd -y
# 设置开机启动并启动ftp服务
systemctl enable vsftpd
systemctl start vsftpd
#查看其运行状态
systemctl status vsftpd
#重启服务
systemctl restart vsftpd
基础软件 java
# 更新软件
apt-get update
# 安装jdk
apt-get install openjdk-11-jdk -y
#查看安装状态
java -version
#安装jmap:fox-edge运行阶段,会使用JMAP进行GC操作
apt install openjdk-11-jdk-headless -y
#检查jmap是否安装成功
jmap
基础软件 mysql8.0
mysql和mariadb是师出同源的开源技术,后面由不同的组织进行各自维护。它们基本上保持兼容,根据自己环境的需要,可以选择其中一种进行安装。
#更新源
apt-get update
#安装
apt-get install mysql-server -y
#验证
systemctl status mysql
#修改配置文件:bind-address = 127.0.0.1修改为bind-address = 0.0.0.0
#关闭binlog日志:在末尾添加 skip-log-bin ,登录后可以用show variables like '%log_bin%%';查询log_bin变为off
vim /etc/mysql/mysql.conf.d/mysqld.cnf
#
#重启mysql
systemctl restart mysql
#验证mysql
systemctl status mysql
基础软件 mariadb10.5(mysql 8.0的兼容性方案,它与mysql8.0二选一,从测试状况看,它比mysql8.0更节省内存)
mysql和mariadb是师出同源的开源技术,后面由不同的组织进行各自维护。它们基本上保持兼容,根据自己环境的需要,可以选择其中一种进行安装。
#更新源
apt-get update
#安装
apt-get install mariadb-server -y
#验证
systemctl status mysql
#修改配置文件:bind-address = 127.0.0.1修改为bind-address = 0.0.0.0
#关闭binlog日志:在末尾添加 skip-log-bin ,登录后可以用show variables like '%log_bin%%';查询log_bin变为off
vim /etc/mysql/mariadb.conf.d/50-server.cnf
#重启mysql
systemctl restart mysql
#验证mysql
systemctl status mysql
#停止mariadb
#systemctl stop mysql
#卸载mariadb
#apt-get remove mysql-\* -y
#删除mariadb的文件
#dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
基础软件 创建mysql的root账号(非必须配置,配置它仅为了方便于开发调试)
# -u 指定用户名 -p需要输入密码 回车输入密码
mysql -u root -p
#后面是进入mysql后的操作
#查看用户权限
mysql>
use mysql;
select host, user, plugin from user;
#创建用户:'root'@'%'
create user 'root'@'%' identified by '12345678';
grant all privileges on *.* to 'root'@'%';
flush privileges;
exit;
基础软件 redis
#更新
apt-get update
#安装redis
apt install redis-server -y
#检查安装结果
systemctl status redis-server
#修改配置文件
vim /etc/redis/redis.conf
#1.注释掉 bind 127.0.0.1 ::1 位置在69行左右
sed -i 's/bind 127.0.0.1 ::1/# bind 127.0.0.1 ::1/g' /etc/redis/redis.conf
#2.修改protected-mode为no 位置在88行左右
sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis/redis.conf
#3.修改requirepass为12345678 位置在507行左右或者在790行左右
sed -i 's/# requirepass foobared/requirepass 12345678/g' /etc/redis/redis.conf
#重启redis
systemctl restart redis-server
卸载
#停止redis
systemctl stop redis-server
#卸载redis
apt-get remove redis-server -y
#清理未安装的包
apt-get autoremove -y
#删除残留的配置
rm -rf /var/lib/redis/
rm -rf /etc/redis/
基础软件 Python3 (可选软件,有些用户想要安装自己的Python服务,作为更强大的边缘计算平台)
#更新
apt-get update -y
#安装python3
apt-get install python3 -y
#安装pip,Python3的组件库,需要通过该工具进行安装
apt-get install pip -y
#为Python3安装redis.py组件
pip install redis
#为Python3安装pymysql.py组件
pip install pymysql
ubuntu的磁盘扩容
#ubuntu20安装后,默认会有一半磁盘空间未使用,需要进行下面的操作,将这一半空间用上
#显示存在的卷组,Alloc PE是已经分配的磁盘空间,Free PE是尚未分配的磁盘空间
vgdisplay
#显查看磁盘目录:可以看到正在使用的磁盘/dev/mapper/ubuntu--vg-ubuntu--lv
df -h
#全部空间都给这个盘
lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
#重新计算磁盘大小
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
#再次显查看磁盘目录,可以看到/dev/mapper/ubuntu--vg-ubuntu--lv已经把那部分磁盘空间利用上了
df -h
ubuntu的虚拟内存扩容
说明:
在嵌入式设备设置swap的目的,是因为Fox-Edge是JAVA开发,对内存的要求比较高。
当整个系统使用的内存空间超过4G的时候,有了SWAP空间作为冗余,可以放心的充分去使用4G内存空间,而不用担心内存不足带来的各种问题。
#察看当前swap分区大小
free -h
#查看swap分区挂载位置,默认是/swap.img
cat /proc/swaps
#停止原来的交换分区
#注意:这要等一段时间
swapoff /swap.img
#删除原来的分区文件
rm /swap.img
#重新建立分区文件swapfile:物理内存是4G,所以这里准备新建的swap分区是4G,bs x count = 1024 × 4096000 = 4G
#注意:这要等一段时间,可能要十分钟,需要耐心等待
dd if=/dev/zero of=/swap.img bs=1024 count=4096000
#启用
chmod 600 /swap.img
mkswap -f /swap.img
swapon /swap.img
#检查结果
free -h
cat /proc/swaps
ubuntu的虚拟内存挂载
有些精简版Ubuntu,在启动后没有自动挂载虚拟内存,可以使用该方法自动挂载swap
方法1:
#在/etc/fstab文件的末尾,添加/swap.img none swap sw 0 0
vim /etc/fstab
方法2:
#通过vim新建一个启动配置文件swap.service
vim /etc/systemd/system/swap.service
swap.service文件内容如下
[Unit]
Description=Load Swap
[Service]
Type=oneshot
ExecStart=swapon /swap.img
[Install]
WantedBy=multi-user.target
通过下面命令使swap.service生效
#重新加载systemd管理器配置,使新服务生效
systemctl daemon-reload
#启用服务,使其在启动时自动运行:
systemctl enable swap.service
#如果需要立即启用swap,而不是等到下次重启,可以运行
systemctl start swap.service
nginx的安装
#更新仓库
apt update
#默认安装nginx
apt install nginx -y
#检查nginx的安装是否成功
systemctl status nginx
#重新装载配置
nginx -s reload
samba的安装,非必须软件,安装它仅为了方便于开发调试
#更新
apt-get update
#安装samba
apt-get install samba -y
#修改配置文件
vim /etc/samba/smb.conf
#增加下面的配置
#------------------#
[share]
# 设置共享目录
path = /
# 设置访问用户
valid users = root
# 设置读写权限
writable = yes
#------------------#
#创建samba用户
smbpasswd -a root
#重启samba
service smbd restart
静态端口配置
ubuntu不同的版本有不同的配置方法,通常是20版本后在/etc/netplan/00-installer-config.yaml中配置,20版本前在/etc/network/interfaces中配置, 我选择的Ubuntu20或者22的版本,所以配置/etc/netplan
# 使用ifconfig查看当前动态分配的IP地址信息,可以看到网卡名、IP名称、子网掩码
# 比如,我用ifconfig看到,我的物理网卡名字叫enp2s0,当前IP是192.168.1.7,子网掩码是255.255.255.0
# 我想固定分配为192.168.1.21,那么可以编辑/etc/netplan/00-installer-config.yaml文件,加入以下内容,然后重启
# vim /etc/netplan/00-installer-config.yaml
# 注意yaml文件的缩进格式,否则不会生效
network: ethernets: enp2s0: dhcp4: false dhcp6: false addresses: - 192.168.1.21/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: [192.168.1.1] version: 2
- windows常用命令
```cmd
# windows有记忆网上邻居信息的功能,问题是这功能有时候是访问不了samba的肇事者
# 比如,linux的samba信息变化了,windows记忆的信息不匹配了,就访问不了samba。
# 比如,比如你开了多个linux虚拟机,IP来回使用,windows记忆的信息又匹配了,又访问不了samba。
# 但是,windows在访问不了的时候,不直接提供给你删除旧信息和重新输入的功能
# 下面提供windows访问不了samba的时候,删除旧信息,重新初始化的办法。
# 打开windows的命令行工具cmd,输入下面命令,然后删除旧凭证,接着重新访问samba,
# 然后你就看到windows重新让你输入账号/密码,然后就可以访问samba了。
control keymgr.dll
ufw的安装(可选软件,安装它是为了加固开放式的公网环境下的网络安全,避免遭受外部的恶意攻击)
#更新仓库
apt update
#默认安装防火墙
apt install ufw -y
#版本查看
ufw version
#查看防火墙运行状态,此时默认是未激活状态的
#注意:此时千万别激活,否则你会发现全部都登录不上去了,因为防火墙默认的策略是"禁止所有入向,放行所有出向"
ufw status
#重要:首先要放开ssh端口和web端口和gateway端口,保证你在防火墙激活后,能够登录SSH和WEB
#在开发阶段,可以自己添加放开的指定端口
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 9000/tcp
#允许开发者的IP访问。自己的公网IP可以通过百度浏览器上搜索IP,百度会反射回你的公网IP给你
#ufw allow from 120.230.79.1/24
#启动防火墙:此时,你会发现无法通过web访问工控机了,因为防火墙默认的策略是"禁止所有入向,放行所有出向"
ufw enable
#查看防火墙策略的编号
ufw status numbered
#删除指定的策略
#ufw delete 2
#禁止防火墙:开发调试阶段,可以先关闭防火墙
#ufw disable
usb模块的安装
为了扩展工控机的物理接口,开发者经常会在市场上购买USB转LORA、串口之类的外部模块,插入LINUX后使用,如何检测是否识别成功呢? 下面以淘宝上购买的某家USB-485为例,插入USB-485模块后Ubuntu立即自动识别出QinHeng Electronics CH340 serial converter这个USB设备, 并自动挂载成名字为ttyUSB0的串口设备。后面就可以通过channel-serial服务,直接使用该ttyUSB0串口
# 未插入USB模块之前,先执行lsusb:查看工控机上的usb设备是否存在
lsusb
# 此时只有两个系统自带的虚拟化usb设备
#Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
#Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
# 插入淘宝USB转串口模块后,再执行lsusb,发现多出来一个USB模块,
lsusb
#Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
#Bus 001 Device 003: ID 1a86:7523 QinHeng Electronics CH340 serial converter <---------这是发现的USB转串口模块
#Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
#确认串口节点是否存在
ls -al /dev/ttyU*
#crw-rw---- 1 root dialout 188, 0 Jul 13 14:02 /dev/ttyUSB0 <---------这是发现了串口生成的串口
#给USB模块写入一串文本,看看能否从这个模块发出数据
echo "hello" >> /dev/ttyUSB0
快捷安装
如果是熟练的用户,可以使用下面的命令,先进行一键式安装,然后再参考上述进行配置。
apt-get update -y && \
apt-get install openjdk-11-jdk -y && \
apt install openjdk-11-jdk-headless -y && \
apt-get install mysql-server -y && \
apt install redis-server -y && \
apt install nginx -y && \
apt install vim -y && \
apt install dos2unix -y && \
apt install dmidecode -y && \
cd /home && \
wget -c http://repository.fox-tech.cn/system/fox-edge/v1/1.0.9/fox-edge-20231019121007.gz && \
tar -xzvf fox-edge-20231019121007.gz && \
mv fox-edge /opt