为了一个远程存储网盘代码学习了Linux系统

为了各类学习资料的独立自主,个人喜欢倒腾存储方面的软件,比如网盘开源代码和U盘、NAS等。

前些时间,看了一个Zpan的开源项目,是作者为了女朋友写的一个基于云存储(非网盘)的网盘系统。虽然无法挂载本地存储和网盘,但界面清爽、基本功能也不少,于是下载来尝尝鲜。

Zpan开源地址为:https://github.com/saltbo/zpan

为了一个远程存储网盘代码学习了Linux系统插图

一、Windows下安装

平时没有用Linux,在Github上准备下载AMD的运行包,可惜最后发布版本为1.6.5,最新测试版本为1.7.0-beta2,都没有Windows的AMD包。

下载zpan:1.7.0-beta2的zip源代码,安装go1.23.4.windows-amd64运行环境。下载地址:https://go.dev/dl/

使用go run main.go命令行运行,花了一段时间,自动更新了go.mod里的大堆依赖包到本地,终于可以运行。

浏览器打开127.0.0.1:8222网址,网页标题出来了,源代码也可查看,可惜就是卡住不出页面。

看来此路不通。为什么不支持Windows系统,作者也写了说明:实际上Mac也没有提供二进制包,主要是考虑ZPan是一个服务端程序,再加上ZPan用到的一些依赖在支持多平台的情况下打包遇到一些麻烦,所以目前仅提供了一个Linux版本的Release,后续我们会考虑支持多平台。

二、Linux下安装

手里有台淘汰的Intel Q9400的机器,准备了一个32G U盘,使用Ventoy制作了一个启动,并下载了Debian 12.8.0的ISO文件放在上面。

Ventoy启动盘工具:https://www.ventoy.net/cn/index.html

Debian下载地址:https://www.debian.org/index.zh-cn.html

机器过老,没有F12选择启动操作,直接按DEL键将硬盘启动屏蔽,强制为U盘启动才完成引导。

看起来631M的Debian看起来轻松能够安装完,没想到中途需要联网更新组件,零碎时间加起来硬是安装了一天多。

安装完成,打开ssh和XRDP远程桌面,操作直观。但每次操作都需要密码,包括使用sudo,于是想着将用户提升一下权限,不用频繁输入密码。

使用sudo nano /etc/sudoers编辑配置文件,添加以下行:

username ALL=(ALL) ALL

使用命令将用户添加到sudo组中:

sudo usermod -aG sudo username

最后,又编辑sudo nano /etc/passwd文件:

username :x:1000:1000::/home/username :/bing/bash

将两个1000,全修改为0。

本以为用户权限提升了,万事大吉,但重启后远程桌面连接不上了,SSH也连接不上了。

接上显示器、键盘鼠标一看,居然出现重设登录用户名,按流程重新设置后,SSH登录后目录瞬间变成root用户,XRDP远程桌面怎么设置也不行。

感觉是乱了。又将修改过的配置一一还原,XRDP折腾了一天也没恢复成功,也不管了。

三、安装Zpan的DEB包

下载Linux的zpan-linux-amd64.deb包,使用WinSCP上传到服务器。

使用sudo dpkg -i zpan-linux-amd64.deb完成安装。

使用systemctl start zpan启动服务,打开网址不成功。

使用systemctl status zpan查看服务状态,发现是未运行状态。

再使用zpan server手动启动,出现“段错误”,看来是编译的包不对,运行失败了。

四、安装go运行源代码

使用sudo apt-get install golang安装go语言到本地,下载Source code (zip)源码包,使用WinSCP上传到用户文件夹。

再使用go run main.go运行源码包,又下载大堆依赖包,开始运行,看似运行了,访问页面也出现打开日志,可惜和Windows下运行时一样的结果。

顺便讲一下镜像源,下载Debian更新包,需要国内的镜像源,一般安装时会让你选择,我选的是http://mirrors.163.com/的镜像站,否则默认的国外服务器,会下载到怀疑人生,而且极有可能不成功。

可以sudo nano /etc/apt/sources.list编辑镜像源地址。

更多镜像源地址见此:https://www.cnblogs.com/smlile-you-me/p/17727308.html

其中清华镜像源地址原地址不对,前缀需要修改为https://mirrors.tuna.tsinghua.edu.cn/

关于go依赖包下载,也需要修改源地址,否则直接不成功。

Linux运行以下命令:

export GO111MODULE=on

export GOPROXY=https://goproxy.cn,direct

Windows运行以下命令:

go env -w GO111MODULE=on

go env -w GOPROXY=https://goproxy.cn,direct

五、安装Docker运行

既然常规动作不行,使用作者提供的docker安装命令行:

docker run -it -p 8222:8222 -v /etc/zpan:/etc/zpan --name zpan saltbo/zpan

由于服务器和路由器无加速,安装包扒不下来。

docker  pull  saltbo/zpan:1.7.0-beta2

也是扒不下来,又添加docker镜像,才得以成功。

编辑sudo nano /etc/docker/daemon.json

输入以下代码:

{
"registry-mirrors": [
"https://docker.1panel.live"
]
}

CTRL O保存,CTRL X退出。

使用docker images查看加入的镜像和ID。

为了一个远程存储网盘代码学习了Linux系统插图1

使用docker run imageid运行镜像,出现找不到 GLIBC 2.32和 GLIBC 2.34版本的错误。

通过ldd --version命令查看,我服务器的版本为(Debian GLIBC 2.36-9 deb12u9) 2.36。没想到才一年多时间,编译包就落后版本无法运行了。

后来,又扒了1.6.5版本。

docker  pull  saltbo/zpan:latest

错误提示依旧。使用docker ps查看运行状态,确认没有成功运行。

在必应和谷歌上搜索了一圈,都没有可操作的降GLIBC版本的办法,几个小时又过去了。

六、重新编译源代码

使用go run在Windows和Linux环境直接运行源代码,系统无法正常开启。

使用原来的编译包无法运行。

使用docker环境打开原来的编译包无法运行。

对于开源软件,只有重新编译源代码一条路了。

进入zpan-1.7.0-beta2文件夹,使用以下命令生成zpan执行文件。

go build -o zpan main.go

由于已安装过DEB包,直接复制zpan到相应的可执行文件所在文件夹就行了。命令行如下:

cp -rf zpan /usr/local/bin/zpan

如果没有安装过,需要生成DEB安装包进行安装。

附一个DEB包的生成方法:

1、创建工作目录

mkdir -p mypackage/DEBIAN
mkdir -p mypackage/usr/local/bin

2、创建控制文件

touch mypackage/DEBIAN/control

内容如下:

Package: mypackage

Version: 1.0

Section: base

Priority: optional

Architecture: amd64

Depends: libc6 (>= 2.14)

Maintainer: Your Name <youremail@example.com>

Description: My Go Application

This is a sample description of my Go application.

3、编译go程序

go build -o myapp main.go

将生成的二进制文件myapp复制到工作目录:

cp myapp mypackage  /usr/local/bin/

4、确认工作目录

mypackage
├── DEBIAN
│   └── control
│└── usr
│   └── local
│      └── bin
│         └── myapp

5、生成DEB包

dpkg  -deb --build   mypackage

 

另外使用fpm成生DEB包就不多说了,这个打包功能更强大。

七、成功启动

为了一个远程存储网盘代码学习了Linux系统插图2

重新编译后,使用zpan server成功启动,但默认启动了编译文件夹中的执行文件,进入安装界面,生成了SQLite3的数据库在当前文件夹,并持续调用源代码中的模块。

后分析了sh安装文件,确认了几个配置文件和默认数据库存放位置。并使用完成服务的安装和加载。

记得安装了防火墙,需要将端口允许放行才行,命令行如下:

sudo ufw allow 8222/tcp

我是针对我的局域网网段放行,命令行如下:

sudo ufw allow from 192.168.1.0/24 to any port 8222

首次打开,需要设置数据库和默认管理员用户,登录后就可以添加存储了。

添加了七牛云的免费存储桶,方法如下:

1、在个人中心——秘钥管理,获取AccessKey/SecretKey这两个串码。

2、左上角打开对象存储KODO,新建空间,设置空间名称。

3、选择空间管理,点击打开空间名称——空间概览,右下角有个系统域名,如S3 协议的外网访问 http(s)://zhenganonline.s3.cn-south-1.qiniucs.com。

4、打开zpan后台管理,创建存储,填写项目如下:

名称:空间名称

云平台:选择KODO

存储桶:空间名称(S3协议网址的前段)

接入点:s3.cn-south-1.qiniucs.com(S3协议网址的后段)

AccessKey:AccessKey串码

SecretKey:SecretKey串码

八、结语

为了一个开源网盘,自学了go的安装和运行、Linux的基础操作、docker的原理和操作等,花费了那么多时间,还是值得记录一下。

不知是bug还是我的操作问题,zpan后台退出时,服务器上运行的服务也会崩溃,需要手动重启。希望后续能够解决。

THE END