绿联云NAS一些探索
SSH、包管理器探测、安装docker-compose等
- 文章信息 - Author: 李俊才(jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSite :http://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article: https://blog.csdn.net/qq_28550263/article/details/139510912
HuaWei: https://bbs.huaweicloud.com/blogs/428627 【警告】:登入系统执行相关命令具有损坏你的NAS系统的风险,如果读者朋友没有那个技术和能力,就不要学我在本文中的操作。由于绿联云又多个版本,本文的方案未必适合于所有版本,读者必须深刻认识版本差异可能会导致各种无法预估的异常风险。本文仅仅作为技术方案指导,读者进行任何本文中提到的相关操作前应该明确相关风险并自行评估,本文不对任何读者相关操作导致的灾难性后果负责。
下一节:《 绿联云NAS一些探索(2):部署GitLab Runner 》
目 录
- [1. 关于:为什么](#1. 关于:为什么)
- [2. 远程调试功能](#2. 远程调试功能)
- [3. SSH到绿联云NAS](#3. SSH到绿联云NAS)
-
- [3.1 端口](#3.1 端口)
- [3.2 密码](#3.2 密码)
- [3.3 SSH命令](#3.3 SSH命令)
- [4. 探测包管理器](#4. 探测包管理器)
- [5. OPKG包管理器](#5. OPKG包管理器)
-
- [5.1 OPKG是什么](#5.1 OPKG是什么)
- [5.2 OPKG的特点](#5.2 OPKG的特点)
- [5.3 OPKG的配置文件](#5.3 OPKG的配置文件)
- [5.4 OPKG的常用命令](#5.4 OPKG的常用命令)
- [6. 部署Docker Compose](#6. 部署Docker Compose)
[1. 关于:为什么](#1. 关于:为什么)
很久前买了一个绿联云NAS,其功能实在有限,不仅有各种漏洞,很多问题在绿联社区提出也得不到解决。很多功能,虽然在UI上看起来有,但是又不完整。比如安装了Docker却不能手动执行相关命令,也没有Docker Compose,更不要说绿联云的Docker没有做NAT,离开了绿联NAS所在的网络就无法访问------简直是,罄竹难书。
于是产生了SSH到NAS进行研究的想法,这篇文章便是初探。
[2. 远程调试功能](#2. 远程调试功能)
远程调试功能是一个绿联云提供的
开启远程调试功能只能在管理员用户上运行,且需要获得手机验证码,一旦验证成功,就可以获取一个
[3. SSH到绿联云NAS](#3. SSH到绿联云NAS)
3.1 端口
绿联云使用的是922
端口,而不是22
端口,这一点需要注意。如果你在
3.2 密码
密码是一个3天有效的临时密码,也就是"开启远程调试"时的验证码。
3.3 SSH命令
在了解账户和密码后,你可以使用下面的命令登陆:
bash
ssh root@192.168.31.12 -p 922
[4. 探测包管理器](#4. 探测包管理器)
处于猜测,最常见的就是apt-get
和yum
这两种包管理器,不过很快你就会发现,绿联云NAS上,根本就没有这两个包管理器,为了不再继续手动尝试浪费时间,可以实现一个脚本,将常用的包管理器罗列进去。
这里我贡献一个包管理器探测脚本,我常使用它来测试不同linux发行版本上所使用的包管理器是什么。
bash
#!/bin/bash
# 检查命令是否存在并打印软件包管理器名称
check_command() {
if command -v $1 &> /dev/null; then
echo "$2 is available"
exit 0
fi
}
# Check for common package managers
check_command apt "APT (Debian, Ubuntu)"
check_command apt-get "APT (Debian, Ubuntu)"
check_command yum "YUM (CentOS, RHEL)"
check_command dnf "DNF (Fedora, RHEL 8+)"
check_command rpm "RPM (CentOS, RHEL, Fedora, SUSE)"
check_command pacman "Pacman (Arch Linux)"
check_command zypper "Zypper (openSUSE, SLES)"
check_command eopkg "EOPKG (Solus)"
check_command snap "Snap (Cross-distribution)"
check_command flatpak "Flatpak (Cross-distribution)"
check_command opkg "OPKG (OpenWrt, embedded systems)"
check_command pkg "PKG (FreeBSD)"
check_command apk "APK (Alpine Linux)"
check_command xbps-install "XBPS (Void Linux)"
check_command swupd "swupd (Clear Linux)"
check_command pkgutil "pkgutil (Solaris, Illumos)"
check_command pkg_add "pkg_add (OpenBSD)"
check_command yast "YaST (SUSE Linux Enterprise)"
check_command equo "Equo (Sabayon Linux)"
check_command emerge "Portage (Gentoo)"
check_command nix-env "Nix (NixOS)"
check_command guix "Guix (GuixSD)"
check_command ups "UPS (Unified Package System, Oracle Solaris)"
# 如果没有找到公共包管理器
echo "No common package manager found"
exit 1
一般来说,系统上有精简版编辑器vi
,可以使用它编辑上面的脚本到文件:
bash
vi detect_pkg_manager.sh
复制粘贴脚本后,编辑保存退出。接下来,赋予脚本执行权限:
bash
chmod +x detect_pkg_manager.sh
现在,运行脚本:
bash
./detect_pkg_manager.sh
运行后可见输出为:
OPKG (OpenWrt, embedded systems) is available
因此,此系统上所使用的包管理器为:OPKG。
[5. OPKG包管理器](#5. OPKG包管理器)
5.1 OPKG是什么
OPKG包管理器是一个相对少用的包管理器。这里我已经查阅和准备好了它的资料。
OPKG是一个轻量级的包管理系统,因为它主要用于嵌入式Linux系统,如OpenWrt、LEDE等。它的设计目标是提供一个简单、快速、可靠的包管理工具,适用于存储空间和系统资源有限的设备。OPKG的主要特点包括:
- 轻量级:OPKG的二进制文件和数据库占用空间小,适合嵌入式设备。
- 依赖管理:OPKG可以自动处理软件包之间的依赖关系,确保安装和升级的顺利进行。
- 多架构支持:OPKG支持多种CPU架构,如ARM、MIPS、x86等。
- 远程仓库:OPKG可以从远程仓库下载和安装软件包,方便系统的更新和维护。
- 包签名:OPKG支持包签名验证,提高系统安全性。
5.2 OPKG的特点
优点
- 轻量级,适合嵌入式设备。
- 自动处理依赖关系,简化软件包管理。
- 支持多种CPU架构。
- 可以从远程仓库获取软件包。
缺点
- 功能相对简单,不如APT、YUM等包管理器强大。
- 软件包的可用性和更新频率取决于源的维护者。
5.3 OPKG的配置文件
OPKG的主要配置文件是/etc/opkg.conf,其中包含了以下配置项:
src/gz :定义软件包源,是源的名称,是源的URL。
dest :定义软件包的安装目录,是目标的名称, 是目标的路径。
option :设置OPKG的选项,如option verbose-wget启用详细的wget输出。
5.4 OPKG的常用命令
更新本地的软件包列表
bash
opkg update
升级已安装的软件包
bash
opkg upgrade <pkgs>
安装指定的软件包
bash
opkg install <package>
卸载指定的软件包
bash
opkg remove <package>
列出可用的软件包
bash
opkg list
列出已安装的软件包
bash
opkg list-installed
列出软件包中包含的文件
bash
opkg files <package>
搜索软件包
bash
opkg search <keyword>
显示软件包的详细信息
bash
opkg info <package>
[6. 部署Docker Compose](#6. 部署Docker Compose)
我们希望能够提取版本号然后安装compose,不过在这个阉割系统里面还有一些麻烦。系统的已经安装的grep
命令是 BusyBox 版本的 grep,它不支持 -P 选项。另外/usr/local/bin
目录也不存在。你可以参考我下面的方法来安装:
首先,确保 /usr/local/bin
目录存在:
bash
mkdir -p /usr/local/bin
使用 sed
来提取最新的 Docker Compose 版本号:
bash
LATEST_VERSION=$(wget -qO- https://api.github.com/repos/docker/compose/releases/latest | sed -n 's/.*"tag_name": "\(.*\)",/\1/p')
然后从github
下载对应的版本来安装:
bash
wget "https://github.com/docker/compose/releases/download/${LATEST_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -O /usr/local/bin/docker-compose
下载完成后,赋予 Docker Compose 二进制文件执行权限:
bash
chmod +x /usr/local/bin/docker-compose
验证 Docker Compose 是否安装成功:
bash
/usr/local/bin/docker-compose --version
如果你看到显示版本号,说明安装成功:
至此,Docker Compose安装完成,你可以开始搞事情了。
另外,上面的步骤也可以合并为一个完整的脚本:
bash
#!/bin/bash
# 更新软件包列表
opkg update
# 安装 Docker
opkg install docker
# 创建必要的目录
mkdir -p /usr/local/bin
# 下载 Docker Compose
LATEST_VERSION=$(wget -qO- https://api.github.com/repos/docker/compose/releases/latest | sed -n 's/.*"tag_name": "\(.*\)",/\1/p')
wget "https://github.com/docker/compose/releases/download/${LATEST_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -O /usr/local/bin/docker-compose
# 赋予执行权限
chmod +x /usr/local/bin/docker-compose
# 验证安装
/usr/local/bin/docker-compose --version
将上述脚本保存为 install_docker_compose.sh
,然后运行:
bash
chmod +x install_docker_compose.sh
./install_docker_compose.sh
通过这些步骤,你应该能够在使用 opkg
包管理器的系统上成功安装 Docker Compose。