【干货】将WD My Cloud Gen2改造成私人在线云播服务器

前段时间入手了西数的My Cloud个人云,估计是由于国内网络环境的原因,官方的远程同步和管理功能基本连不上。于是计划用My Cloud自己重新搭一个私有云。下面记录一下折腾的过程和坑。

折腾思路


My Cloud 有 Gen1(固件版本 0.3.xx、04.xx)和 Gen2(固件版本2.xx)两种,Gen2相当于是第二代,硬件升级了一点,但系统也更封闭,
关键Gen1的教程Gen2完全不适用!
WD论坛上的俄罗斯大神fox_exe为Gen2提供了三种折腾方法:

  1. 原生系统破解+第三方APP
  2. 原生系统破解后安装黑群晖系统
  3. 删掉原系统安装纯净版的Debian 8 + OpenMediaVault

方法1的话解决不了内网穿透的问题,无法远程访问;方法2我没试过,貌似有bug;方法3的我装的OpenMediaVault认不了磁盘,所以最终采取的是方法4——

  • 安装纯净版的Debian 8 + 芒果云

简单说下方法1~3的步骤


方法1:原生系统破解(最简单,改动最小) [英文教程] [破解文件及app下载]

  1. 首先在控制面板打开SSH访问,然后通过SSH上传define.js覆盖原版,解除控制面板的第三方app安装限制。
  • 在Mac终端连接My Cloud的SSH可能需要下面的命令
ssh -oHostKeyAlgorithms=+ssh-dss sshd@192.168.XXX.XXX
  • 不熟悉SSH操作的朋友可以在chrome浏览器安装插件stylish,然后添加解锁style 就可以在网页安装bin,不用管什么SSH和define.js。
  1. 接着安装fox_exe提供的WDMyCloud_WDCrack_1.0.bin

  2. 然后就可以随意安装大神们打包好的各种第三方app了。

  • fox_exe发布的app里有个叫WDMyCloud_Debian_8.0-1.bin的app,装完以后可以在原生busybox里切换成debian8来用,切换命令:
chroot /mnt/HD/HD_a2/Nas_Prog/Debian/chroot/ /bin/bash 

最终没有采用方法一的原因是搞不定内网穿透服务的自启动问题。Gen2 重启就会重置在busybox中的配置,西数官方论坛上有大神出过Gen2脚本自启动教程,但我变砖两次都搞不成,遂放弃。

方法2:安装黑群晖DSM(据说有bug,不怕折腾可以试试)[文件下载]

群晖是一个专业做NAS的公司,他家系统口碑不错。装黑群晖貌的方法和装第三方app一样,也是先解除限制,再从控制面板上传bin文件,但是fox_exe警告说

Its a "Beta" version of DSM, and "Alpha" of Firmware itself.Its have some bugs.But one "Bug" is really important:Sometime few lib (.so files) was "damaged" and system cant run normally. (Random bugs).

……有未知原因的严重bug,所以还是不按这个方法搞了

方法3:纯净版Debian8 + OpenMediaVault(OMV有坑)[英文教程] [文件下载]

  1. 把硬盘重新分区并格式化
  2. 安装fox_exe提供的纯净版Debian8
  3. 在Debian8里加装开源的NAS管理系统OpenMediaVault。

OpenMediaVault功能很多,但用起来太复杂并不适合小白玩家,而对于高级玩家还不如直接用命令行操作,总之也是鸡肋。

方法4:自己搭积木


  • 系统:Debian 8
  • Web服务器:apache2 + mysql + php5
  • 内网穿透:frp
  • 文件管理:芒果云
  • 文件下载:Aria2
  • 文件同步:ResilioSync(就是btsync)

** 1 安装debian 8**

基本是参照fox_exe的教程来做,英文好的可以直接看英文版,主要用到uImage、uRamdisk、jessie-rootfs.tar.gz 三个文件。(注意英文教程里把jessie-rootfs.tar.gz错写成了rootfs-jessie.tar.xz)

======= 把硬盘分成三个分区 ========
/dev/sda1 - Swap 交换分区
/dev/sda2 - User data 用户数据
/dev/sda3 - Rootfs/Boot (Important for bootloader) 系统文件和启动分区

======= 正常步骤(用telnet刷系统) =======
# 在控制面板的“网络”那里开启ssh访问,然后命令行访问MyCloud
# Windows下的ssh客户端
ssh sshd@你的MyCloud_IP
#  在MAC终端
ssh -oHostKeyAlgorithms=+ssh-dss sshd@你的MyCloud_IP 
# 将uImage, uRamdisk和jessie-rootfs.tar.gz放进/boot/boot里。
# 重启MyCloud
# 通过telnet链接MyCloud (telnet的ip和原ssh的ip不一样,可在路由器上查看)
telnet your_device_telnet_ip
# 使用parted命令重新分区
# 删除分区124567留下分区3,新建1G的分区1
parted /dev/sda 
rm 1
rm 2
rm 4 
rm 5
rm 6
rm 7
mkpart primary 0% 1G 
# 退出parted
q 
# 将分区1 格式化为ext4格式
mkfs.ext4 /dev/sda1 

# 把分区3 /boot/boot里的三个文件,复制到分区1里)
mkdir -p /mnt/root /mnt/data
mount /dev/sda1 /mnt/data
mount /dev/sda3 /mnt/root
cp /mnt/root/boot/uImage /mnt/data/
cp /mnt/root/boot/uRamdisk /mnt/data/
cp /mnt/root/boot/jessie-rootfs.tar.gz /mnt/data/
umount /mnt/root

# 删除原分区3,建立新的分区2和分区3
parted /dev/sda
rm 3
mkpart primary 4G 100%  
mkpart primary 1G 4G 
q
mkfs.ext4 /dev/sda2
mkfs.ext4 /dev/sda3

# 把分区1里的3个文件解压并复制回分区3,
mount /dev/sda3 /mnt/root
tar xvf /mnt/data/jessie-rootfs.tar.gz -C /mnt/root
mkdir -p /mnt/root/boot
cp /mnt/data/uImage /mnt/root/boot/uImage
cp /mnt/data/uRamdisk /mnt/root/boot/uRamdisk
umount /mnt/root

# 把分区1格式化成swap
umount /mnt/data
mkswap /dev/sda1

# 重启完成Debian8安装
sync
reboot -f

# ssh进入Debian8 初始密码是 mycloud
ssh root@your_device_ip 

======= 非正常步骤(救砖并刷debian8)=======
# 把硬盘拆出来安装到另一台linux电脑上,并安装parted
# centos下
yum install parted 
# debian/Ubuntu下
apt-get install parted
# 查看硬盘及分区情况
parted -l
# 进入parted分区,注意/dev/sdb改成你 parted -l 看到的那个
parted /dev/sdb
mklabel gpt
# 删掉所有分区
rm 1
rm 2
rm 3
rm 4 
rm 5
rm 6
rm 7
# 建立大小为1G的分区1
mkpart primary 0% 1G 
# 建立大小为剩余空间大小的的分区2
mkpart primary 4G 100%  
# 建立大小为3G的分区3
mkpart primary 1G 4G 
q
# 格式化
mkswap /dev/sdb1
mkfs.ext4 /dev/sdb2
mkfs.ext4 /dev/sdb3

# 上传文件,把三个文件解压复制到分区3
mkdir /mnt/root
mount /dev/sdb3 /mnt/root
mkdir /mnt/root/boot
tar xvf  jessie-rootfs.tar.gz -C /mnt/root
cp uImage /mnt/root/boot/uImage
cp uRamdisk /mnt/root/boot/uRamdisk

# 重启完成Debian8安装
sync
reboot -f

** 2 Debian安装Web服务器 **

# 默认在root用户下操作

## 更改debian软件源为华中科大
## 打开/etc/apt/sources.list文件注释掉原来的源(在每行前加#)##
## 复制以下代码到sources.list ##
vi /etc/apt/sources.list
deb http://mirrors.ustc.edu.cn/debian/ jessie main contrib non-free
deb http://mirrors.ustc.edu.cn/debian/ jessie-updates main contrib non-free
deb http://mirrors.ustc.edu.cn/debian/ jessie-backports main contrib non-free
deb http://mirrors.ustc.edu.cn/debian-security/ jessie/updates main contrib non-free
apt-get update
apt-get upgrade

#语言设置
apt-get install locales
dpkg-reconfigure locales

# 时间同步(很重要)
apt-get install -y ntp

# 时区设置(参考:http://coolnull.com/235.html)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 安装nano文本编辑器(我不习惯用原生的vi编辑器)
apt-get install nano

# 安装Apache2服务器(参考 https://www.centos.bz/2016/10/debian-8-jessie-install-lamp/)
apt-get install apache2
# 配置服务器
nano /etc/apache2/apache2.conf
# 重启服务器
systemctl restart apache2
# 此时用浏览器访问Mycloud的IP应该可以看到apache的默认页面了。

# 安装Mysql数据库
apt-get install mysql-server
# 初始化mysql数据库
mysql_secure_installation

# 安装PHP
apt-get install php5 php-pear
# 安装PHP的mysql支持
apt-get install php5-mysql
# 配置PHP
nano /etc/php5/apache2/php.ini

** 3 安装芒果云 **

# 安装wget命令行下载工具
apt-get install wget
# 安装zip文件解压工具
apt-get install zip
# 下载芒果云
wget http://static.kalcaddle.com/update/download/kodexplorer3.39.zip
# 解压到/home/kod
upzip -d /home/kod kod*.zip
# 建立软连接
ln -s  /home/kod /var/www/kod
# 把apache2服务器的默认首页改成kod(也可以删掉这个默认conf文件另建一个)
nano /etc/apache2/sites-enabled/000-default.conf
# 把文件里面的DocumentRoot /var/www/html 替换成 DocumentRoot /var/www/kod
# 现在重新用浏览器访问Mycloud的IP应该可以看到芒果云了。
# 注意kod文件夹必须放在/home目录下,因为只有/home目录是挂载了分区2,/var目录和/root目录都在分区3里,而分区3只有3G空间。
# 如果出现权限错误,尝试 chmod -R 777 [目录名] 来提升目录权限

** 4 安装aria2并设置开机启动 **

# 我是参考https://www.zrj96.com/post-296.html 这篇文的
# 安装Aria2
apt-get -y install aria2
# 在/root目录下建立.aria2目录
mkdir .aria2
# 建立配置文件(参考后面的代码)
nano /root/.aria2/aria2.conf
# 建立进度保存空文件
echo '' > /root/aria2.session;
# 建立开机启动文件(参考后面)
nano /lib/systemd/system/aria2c.service
# 启动程序并加入开机启动
systemctl start aria2c.service
systemctl enable aria2c.service
# 下载aria2的图形界面 https://github.com/mayswind/AriaNg/releases
# 解压后复制到/home/www/kod/aria2下,就可以直接通过 http//myloud的ip/aria2 访问了
/root/.aria2/aria2.conf
dir=/home/kod/data/Group/public/home/downloads
file-allocation=trunc
continue=true
max-concurrent-downloads=10
max-connection-per-server=5
min-split-size=10M
split=20
disable-ipv6=true
input-file=/root/aria2.session
save-session=/root/aria2.session
enable-rpc=true
rpc-allow-origin-all=true
rpc-listen-all=true
listen-port=51413
enable-dht=true
enable-peer-exchange=true
peer-id-prefix=-TR2770-
user-agent=Transmission/2.77
seed-ratio=0.1
bt-seed-unverified=true
bt-save-metadata=true
/lib/systemd/system/aria2c.service
[Unit]
Description=Aria2 Service
After=network.target

[Service]
ExecStart=/usr/bin/aria2c --conf-path=%h/.aria2/aria2.conf

[Install]
WantedBy=default.target

我的aria2还没有搞定磁力链接下载,大家谁搞好的可以分享一下。

** 5 设置内网穿透并设置Timer启动 **

国内的宽带貌似都成了局域网没有公网IP,所以无论把MyCloud放公司还是家里,想要远程操作MyCloud都必须搞内网穿透。内网穿透主要有 ① SSH反向连接+Autossh ② 收费的花生壳 ③ ngrok及从ngrok衍生各种收费Tunnel服务三种方式

大概了解过感觉都不靠谱,最后选用了frp这个工具,实现起来还不错。

  1. 前提是你需要有一部拥有外网IP的机器(如VPS之类的)
  2. 把frps(服务端程序)放在外网机器上
  3. 把frpc(客户端程序)放在MyCloud里
  4. 配置好服务器和客户端的.ini文件,各自运行起来就可以了
./frps -c ./frps.ini

frp怎么配置运行官方文档里写得很清楚就不重复了。主要提几点:

** frpc客户端在MyCloud(debian8)中实现自启动的方式 **

因为MyCloud主板没有电池,所以每次重启系统时间都会变回1970年1月1日
如果frp的服务器端时间是2017年,frp的客户端时间是1970年,frp是链接不上的,所以我们需要ntp来做时间同步。
ntp完成时间同步的时间是不固定的,所以frp的自启动不能设置为像aria2一样设为开机启动。在Debian8里,我们可以用timer(定时器)来启动service解决这个问题。

在/lib/systemd/system/目录下建立两个文件frpc.service 和 frpc.timer

** /lib/systemd/system/frpc.service **

[Unit]
Description=Frp Client Service
[Service]
Type=simple
ExecStart=/usr/bin/frpc -c %h/.frp/frpc.ini

** /lib/systemd/system/frpc.timer **

[Unit]
Description=Run frpc daily and on boot

[Timer]
# 开机一分钟后启动
OnBootSec=1min 
# 每天启动一次
OnUnitActiveSec=1d

[Install]
WantedBy=timers.target

编辑保存好这两个文件以后输入:

systemctl enable frpc.timer

用下面这个命令可以查看运行的状态:

systemctl status frpc.service

可以愉快地食用了。

** 6 还有一些坑 **

  • Gen2不支持USB启动,所以如果ssh和telnet都连不上,那就得拆机,把硬盘接到另一台Linux电脑上对硬盘进行分区、格式化、刷系统
  • 拆外壳需要两张卡插进去分别顶开两边扣子,然后把外壳朝后拉,注意两边的扣子的位置是不对称的
  • 如果没有台式机来插硬盘,那么你需要一个外置硬盘盒
  • 如果要插入外置硬盘盒,那么你需要到五金店买六角匙来拧开硬盘上的螺丝
  • 分区格式化的时候注意/dev/sda 和/dev/sdb的区别,网上教程一般直接把要格式化的硬盘写成sda,但实际上插进Linux里会变成/dev/sdb(第二块硬盘)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容