将idea开发的带串口springboot项目部署到麒麟v10系统

   我这里串口使用的是jSerialComm,JDK版本是17,使用的是Maven。麒麟系统为DeBian版

一、环境准备

1.1 麒麟v10系统配置

# 安装基础依赖
sudo apt update
sudo apt install -y build-essential unzip

# 查看CPU架构(x86_64或aarch64) 
uname -m

# 安装JDK17(若系统未预装)

     使用OpenJDK(推荐)

# 通过apt直接安装(自动匹配架构)
sudo apt update
sudo apt install -y openjdk-17-jdk

# 验证安装
java -version
# 配置环境变量(添加到/etc/profile末尾)

# 查找JDK安装路径 sudo update-alternatives --config java 
# 示例输出:  /usr/lib/jvm/jdk-17-oracle-x64/bin/java 
# 编辑环境变量文件 sudo nano /etc/profile 
# 在文件末尾添加(路径根据实际修改): export JAVA_HOME=/usr/lib/jvm/jdk-17-oracle-x64 export PATH=$JAVA_HOME/bin:$PATH
# 使配置生效 source /etc/profile
# 验证安装
java -version
1.2 串口权限配置

# 查看串口设备
ls -l /dev/ttyS*

# 将用户加入dialout组
sudo usermod -aG dialout $USER

# 或直接修改设备权限(临时生效)
sudo chmod 666 /dev/ttyS0

# 重启生效
reboot

二、项目打包

2.1 修改pom.xml(增加Linux打包支持)

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <executable>true</executable> <!-- 增加可执行权限 -->
                <classifier>exec</classifier> <!-- 生成带依赖的包 -->
            </configuration>
        </plugin>
    </plugins>
</build>
2.2 在IDEA中打包

mvn clean package -DskipTests
# 生成的包路径:target/ck-0.0.1-SNAPSHOT-exec.jar

三、部署到麒麟系统

3.1 传输文件

# 使用scp传输(示例)
scp target/ck-0.0.1-SNAPSHOT-exec.jar user@kylin-v10:/opt/app/

这里如果要将 Windows 系统中的打包文件部署到另一台麒麟系统电脑:

需要使用scp命令:

  1. 打开 Windows 的 PowerShell(以管理员权限运行)。如果系统没有安装 OpenSSH,需要先安装 OpenSSH 才能使用scp命令。
  2. 确保麒麟系统电脑的 SSH 服务已经开启,并且防火墙允许 SSH 通信。可以在麒麟系统电脑上执行sudo systemctl enable --now sshd来开启 SSH 服务,执行sudo firewall-cmd --add-service=ssh --permanentsudo firewall-cmd --reload来配置防火墙允许 SSH 通信2。         (如果执行执行sudo systemctl enable --now sshd报错Failed to enable unit: Unit file sshd.service does not exist. 可知,系统里不存在 sshd.service 这个单元文件,这往往是因为 OpenSSH 服务器未安装。

    基于 Debian 或 Ubuntu 的系统

    在终端执行以下命令来安装 OpenSSH 服务器:sudo apt update
                                                                   sudo apt install openssh-server

    安装完成后,启用并启动 SSH 服务

    sudo systemctl enable --now ssh
    )
  3. 如果开启失败:
     

    你可以通过以下命令列出所有和 SSH 相关的单元文件:sudo systemctl list-units --type=service | grep ssh

    此命令会列出所有正在运行的 SSH 相关服务。你要留意其中类似 sshd.service 或者 ssh.service 这样的服务名。

     

    如果你发现正确的单元文件名是 ssh.service,那么可以使用下面的命令来启用并启动 SSH 服务:sudo systemctl enable --now ssh.service

  4. 在 Debian 系统中使用ufw(Uncomplicated Firewall)来实现允许 SSH 通信,可参考以下步骤:

    允许 SSH 端口通过防火墙

    通常 SSH 服务使用 22 端口,执行以下命令允许 22 端口的流量通过防火墙:sudo ufw allow 22/tcp 。如果你的 SSH 服务使用了非默认端口,将上述命令中的22替换为你实际使用的端口号。重新加载防火墙规则:执行以下命令使新的规则生效:sudo ufw reload
  5. 确定麒麟系统电脑的 IP 地址或主机名,以及登录用户名。
  6. 在 PowerShell 中执行scp命令,格式为scp -r 本地文件路径 用户名@麒麟系统电脑IP地址:远程目标路径。例如scp -r D:\code\ck\target\ck-0.0.1-SNAPSHOT-exec.jar user@kylin-v10:/opt/app/,将本地的ck-0.0.1-SNAPSHOT-exec.jar文件传输到麒麟系统电脑的/opt/app/目录下。
  7. 输入麒麟系统电脑上user用户的密码,即可开始传输文件。

这里需要将 user 替换为远程服务器的实际用户名,将 kylin-v10 替换为远程服务器的实际主机名或 IP 地址。

出现 C:\WINDOWS\System32\OpenSSH\scp.exe: dest open "/opt/app/": Failure 错误提示,是因为目标路径/opt/app/的权限设置不允许当前用户写入。可以尝试以下解决方法:

  • 使用临时目录中转
    • 先将文件传输到具有写入权限的临时目录,如/tmp。命令为scp -r D:\code\ck\target\ck-0.0.1-SNAPSHOT-exec.jar tytdc@192.168.18.182:/tmp
    • 登录到麒麟系统电脑,使用mv命令将文件从/tmp目录移动到/opt/app/目录,前提是你有对/opt/app/目录执行mv操作的权限。
  • 修改目标目录权限:以管理员身份登录麒麟系统电脑,执行以下命令修改/opt/app/目录的权限,使其允许tytdc用户写入。
    • sudo chown -R tytdc /opt/app:将/opt/app/目录及其所有子文件和子目录的所有者更改为tytdc
    • sudo chmod -R 755 /opt/app:为/opt/app/目录及其所有子文件和子目录设置权限,使所有者具有读、写和执行权限,组用户和其他用户具有读和执行权限。

如果 /opt/app 这个目录不存在。你可以按照以下步骤来解决这个问题:

  1. 确认目录是否存在:在麒麟系统的终端中,使用 ls /opt 命令查看 /opt 目录下的内容,确认是否真的没有 app 目录。

  2. 创建目录:如果 app 目录确实不存在,你可以使用 sudo mkdir /opt/app 命令来创建它。这条命令使用 sudo 以管理员权限运行,mkdir 是创建目录的命令,/opt/app 是要创建的目录路径。

  3. 设置目录权限:创建好目录后,再执行 sudo chown -R tytdc /opt/app 命令,将目录的所有者设置为 tytdc 用户。然后执行 sudo chmod -R 755 /opt/app 命令,设置目录的权限,使其可被读写执行。

  4. 重新传输文件:完成上述步骤后,回到 Windows 的 PowerShell 中,再次执行 scp -r D:\code\ck\target\ck-0.0.1-SNAPSHOT-exec.jar tytdc@192.168.18.182:/opt/app/ 命令,尝试将文件传输到新创建的目录中。

按照这些步骤操作后,应该可以解决无法访问目录的问题,并成功传输文件。

3.2 创建服务管理文件

1. 登录麒麟系统

使用具备管理员权限的用户(通常是通过 sudo 执行命令)登录到麒麟系统的终端。可以通过物理终端登录,也可以使用 SSH 从其他设备远程登录,例如在 Windows 上使用 PuTTY 或在 Linux/macOS 上使用 ssh 命令:

ssh tytdc@192.168.18.182

然后输入密码完成登录。

2. 创建并编辑服务文件

使用文本编辑器(如 vim 或 nano)创建并编辑 /etc/systemd/system/serial-app.service 文件。这里以 vim 为例:

sudo vim /etc/systemd/system/serial-app.service

输入上述命令后,会提示你输入当前用户的密码。输入密码后,按回车键,vim 编辑器会打开一个空白文件。在 vim 中,按 i 键进入插入模式,然后将以下内容复制粘贴到文件中:

[Unit]
Description=Serial Port Application
After=syslog.target network.target

[Service]
User=appuser
Group=dialout
WorkingDirectory=/opt/app
ExecStart=/usr/bin/java -jar /opt/app/ck-0.0.1-SNAPSHOT-exec.jar
SuccessExitStatus=143
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

3. 保存并退出编辑器

在 vim 中,按 Esc 键退出插入模式,然后输入 :wq 并按回车键,这表示保存文件并退出 vim 编辑器。

4. 重新加载系统服务配置

创建或修改服务文件后,需要重新加载 systemd 的管理器配置,使新的服务文件生效:

sudo systemctl daemon-reload

5. 启动并设置服务开机自启

使用以下命令启动服务:

sudo systemctl start serial-app.service

使用以下命令设置服务开机自启:

sudo systemctl enable serial-app.service

通过以上步骤,你就在麒麟系统上成功创建并启动了 serial-app 服务。

# 查看日志
journalctl -u serial-app -f

如果之前部署过,需要先执行以下步骤:

1. 停止相关服务

在删除服务配置文件之前,你需要先停止由该文件定义的服务,以避免服务在运行过程中出现异常。你可以使用以下命令停止服务:

sudo systemctl stop serial-app.service

执行该命令后,系统会尝试停止 serial-app 服务。

2. 禁用服务开机自启

为了防止系统在下次启动时尝试启动该服务,你需要禁用该服务的开机自启。可以使用以下命令:

sudo systemctl disable serial-app.service

3. 删除服务配置文件

使用 rm 命令删除 /etc/systemd/system/serial-app.service 文件:

sudo rm /etc/systemd/system/serial-app.service

执行该命令后,系统会提示你输入管理员密码,输入正确密码后,文件将被删除。

4. 重新加载 systemd 管理器配置

删除服务配置文件后,你需要重新加载 systemd 管理器的配置,以确保系统不再识别该服务。可以使用以下命令:

sudo systemctl daemon-reload

注意事项

四、验证调试

4.1 检查串口通信
# 查看串口设备识别
dmesg | grep tty

# 使用minicom测试串口
sudo yum install minicom
minicom -D /dev/ttyS0 -b 9600
4.2 应用调试技巧

# 临时前台运行(查看实时日志)
java -jar ck-0.0.1-SNAPSHOT-exec.jar \
--server.port=8080 \
--logging.level.com.example=DEBUG

# 检查jSerialComm加载
-Djserialcomm.lib.path=/usr/lib/jni/ # 指定本地库路径

五、常见问题解决

5.1 串口无法打开

Error opening serial port: /dev/ttyS0 (error code: -1)

解决方案:

sudo chmod 666 /dev/ttyS0
sudo setenforce 0 # 临时关闭SELinux
5.2 缺少本地库

UnsatisfiedLinkError: no jSerialComm in java.library.path

解决方法:

# 查找本地库位置
find / -name "libjSerialComm.so"

# 设置JVM参数
java -Djava.library.path=/usr/lib/jni/ -jar your-app.jar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dov_c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值