前段時間入手了西數的My Cloud個人云,估計是由于國內網絡環境的原因,官方的遠程同步和管理功能基本連不上。于是計劃用My Cloud自己重新搭一個私有云。下面記錄一下折騰的過程和坑。
折騰思路
My Cloud 有 Gen1(固件版本 0.3.xx、04.xx)和 Gen2(固件版本2.xx)兩種,Gen2相當于是第二代,硬件升級了一點,但系統也更封閉,
關鍵Gen1的教程Gen2完全不適用!
WD論壇上的俄羅斯大神fox_exe為Gen2提供了三種折騰方法:
- 原生系統破解+第三方APP
- 原生系統破解后安裝黑群暉系統
- 刪掉原系統安裝純凈版的Debian 8 + OpenMediaVault
方法1的話解決不了內網穿透的問題,無法遠程訪問;方法2我沒試過,貌似有bug;方法3的我裝的OpenMediaVault認不了磁盤,所以最終采取的是方法4——
- 安裝純凈版的Debian 8 + 芒果云
簡單說下方法1~3的步驟
方法1:原生系統破解(最簡單,改動最?。?/strong> [英文教程] [破解文件及app下載]
- 首先在控制面板打開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。
接著安裝fox_exe提供的WDMyCloud_WDCrack_1.0.bin
然后就可以隨意安裝大神們打包好的各種第三方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有坑)[英文教程] [文件下載]
- 把硬盤重新分區并格式化
- 安裝fox_exe提供的純凈版Debian8
- 在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這個工具,實現起來還不錯。
- 前提是你需要有一部擁有外網IP的機器(如VPS之類的)
- 把frps(服務端程序)放在外網機器上
- 把frpc(客戶端程序)放在MyCloud里
- 配置好服務器和客戶端的.ini文件,各自運行起來就可以了
./frps -c ./frps.ini
frp怎么配置運行官方文檔里寫得很清楚就不重復了。主要提幾點:
- 有好人寫了frp服務器端自動安裝腳本《[frpc穿透] 【填坑完畢】內網穿透利器Frp一鍵安裝腳本及設置教程》,圖方便可以試試。
- 實際上你的VPS如果不是在國外或者自帶翻墻的話,這個腳本常常會因為下載超時執行不下去(已阿里云ECS測試過)。
- 0.9.3版本的frpc客戶端是用 go1.7 編譯的,在My Cloud下會出現運行時錯誤,需要在go1.8下重新交叉編譯一次。可以下載我編譯好的文件https://pan.baidu.com/s/1bo4Z19d
- 請注意frps和frpc的區別,敲命令的時候很容易寫錯。
** 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(第二塊硬盤)