天天看點

Dsm as deepin mate(2):在阿裡雲上真正實作單盤安裝運作skynas

本文關鍵字:單盤群晖,本驗證碼版黑群

在《使用群晖作mineportalbox》文3和《利用整塊化自啟鏡像實作黑群在單盤位實機與雲主機上的安裝啟動》,及《dsm as deepin mate》文1中,我們着重提到使skynas在雲主機上單機安裝使用的方法,這些文章中,研究點經曆了從“黑群webassit,從0開始安裝的方法”到“從鏡像開始,能啟動就行”的路徑變化,但這二者我們都沒有完全完成,達成最終目的。下面繼續這個課題,實作最終在阿裡雲上單盤安裝運作skynas。

制造并導出鏡像的方法

我們重新開始,首先去阿裡雲開一台系統盤20G,資料盤20G,鏡像為skynas615-15254的按量機器,等進去了(因為我們不嘗試導出純淨可安裝鏡像,是以這裡不必跟以前一樣等一啟動就急停,做快照…,或者使用阿裡雲最新的解除安裝系統盤功能,恢複系統盤初始狀态不重新開機…,其實這個時候導出的鏡像也沒用,會失效,稍後會講到),建立一個admin,密碼自設,這個admin會是管理者。我們發現應用隻有系統區的二個,filestation和universal search,沒有關系,打開控制台,外部通路中的ssh,我們可以ssh admin@yourip從指令行用admin登入,然後sudo synouser --setpw root xxx,然後exit或su root切換到root。

其它的應用去

http://synology.cn/zh-cn/support/download/VirtualDSM#packages

複制其spk位址。通過指令行cd到/tmp,wget這個spk,通過synopkg install xxx.spk來安裝,這種方式下你需要自己探尋app的依賴關系。啟動失敗一般是依賴沒安好。

但是我們這裡并不急着安裝APP,因為我們優先考慮盡早把系統設定儲存下來,這些将來用于作為模闆初始化新volume, ——— 系統啟動,安裝APP會在資料盤volume1中産生檔案,分析産生的檔案有volume1/@appstore,volume1/@databases,/tmp,volume1/@tmp,這些檔案與APP與系統本身都綁定,如果不打包打走,等volume1被釋放,這些APP或系統本身,在新volume上啟動,運作都會産生設定丢失或權限隐患等問題。比如tmp中包含有系統關于volume1的空間設定(這個設定會讓沒有任何volume的系統在啟動時誤認為volume1損毀,但這正是我們需要的,在以前的文章中,我們那個tmpdata,tmproot隻是安裝/更新時解包的邏輯。并不是進入系統後判斷用作資料盤的邏輯。),相應的,@appstore應該就是app的資料。—— 為了不使這個模闆檔案過大,也是為了不帶入因內建APP産生的不确定因素,我們不必事先在這個20G的資料盤volume上裝太多APP,後面在增強部分會講到APP。

我們打包這些初始設定檔案并替換volume所在盤:

/volume1/@database/pgsql(它實際上/var/services/pgsql,app和系統都會使用它)

/volume1/@tmp(它實際上是/var/services/tmp,app和系統都會使用它)

/tmp(這個目錄極為重要,系統使用)

cd到/,tar cvpzf template.gz tmp volume1/@tmp volume1/@databases,帶原使用者權限打包,這樣這個模闆檔案就有了。

事實上,在這裡我們就可以把鏡像導出來了。因為此時群晖是視資料盤為volume1的,我們盤和模闆都有了,是以将在下一次重新開機時永久解除安裝這個volume1,讓它用上新volume就行了。

來測試一下:1,制造新volume。因為群晖中有parted,比起fdisk它是即時生效的,是以sudo parted /dev/sda mkpart primary 4 100%,然後格式化sudo mkfs.btrfs /dev/sda4,完成。2,sudo reboot 重新開機,在阿裡雲ECS的存儲管理中,解除安裝volume1,重新開機進來,登入web端。空間管理器提示沒有任何存儲,這是意料之中的,那麼沒有什麼也沒有提示空間損毀呢,這是因為tmp是每次啟動都會清空的,儲存在其中的空間資訊會丢掉。3,我們把template.gz恢複到tmp,web端存儲管理器立刻提示空間損毀,這是與原來資料盤volume1的挂鈎的tmp/space資料,這個時候我們隻需要把/dev/sda4挂載到/volume1就可以了。我們在指令行中嘗試root登入,sudo mount /dev/sda4 /volume1挂載,web端已顯示存儲空間可用,這裡其實格式sda4為Ext4也可以直接挂載。

然後你就可以導出這個自動鏡像為别的機器所用。導出時可以線上nc導出(需配合virtio tinycorelinux,因為群晖沒有nc也不能在其中直接nc):1,dd if=/dev/vda | gzip -c | nc -v -l -p 5000 , 恢複處用nc -v xxx.xxx.xxx.xxx(這裡最好使用阿裡雲内網位址) 5000 | gzip -dc | dd of=/dev/vda,也可以2:儲存為一個本地gz的方式然後使用ossutil+oss内部endpoint位址導出或者scp xx.gz [email protected]:/var/www上傳到一個遠端空間,oss最快。

恢複到不同的機器時,需要手動産生sda4及重複上述測試過程(使用非custom linux鏡像如果是custom linux,需要配合virtio tinycorelinux修改/boot/aliyun_image/os.conf),1,wget -qO-

http://xxx/vdaimg.gz

(配合oss内網endpoint和virtio tinycorelinux) | dd of=/dev/vda 或者2用InstallNET.sh -dd,重新測試前,記得把網絡改了,你需要改,etc/sysconfig/network,etc/sysconfig/network-scripts,/etc/resolv.conf,并增加一條gateway:route add default gw xxx.xxx.xxx.xxx。

增強:在鏡像中直接封裝sda4 as volume1,及提前封裝app

事實上,我們可以對鏡像進行一些強化,因為上述過程在每一次換機或重新開機都要進行一次,為了追求制造一個自動的鏡像。我們需要自動産生壞盤和自動挂載sda4,但又不能直接把這個sda4封裝進去(因為這樣在不同機器上不能自動擴充空間),是以還需要一些内容

自動産生損毀盤。自動産生并挂載sda4

要echo 自動挂載規則到fstab。這就需要繞開syno的自動cfgen,重命名/usr/syno/cfgen/s00_synocheckfstab to k00_synocheckfstab這樣etc/fstab就不會改了。

如果不存在sda4,sudo parted /dev/sda mkpart primary 4 100%,然後格式化sudo mkfs.btrfs /dev/sda4

然後sudo vi /etc/rc,在開頭加上:

echo “/dev/sdb4 /volume1 btrfs nospace_cache,synoacl,relatime 0 0” > /etc/fstab

mount -a

如果不存在/tmp/space,volume1/@databases,volume1/@tmp,則tar zxvf /template.gz -C /

如果是ext4,直接在/etc/rc開頭挂載mount /dev/sda4 /volume1,即可,mount -a不用加

進一步封裝App,你可以手動将APP移到系統區:先停止app,這裡以TextEdtior為例,先sudo synopkg stop TextEditor,然後sudo mv /volume1/@appstore/TextEditor /usr/local/packages/@appstore,再然後sudo ln -sfn /usr/local/packages/@appstore/TextEditor /var/packages/TextEditor/target

但最好是直接安裝app到volume1做app封裝,因為app啟動與volume1/@tmp,volume1/@databases相關,直接轉移到系統分區的APP絕大多數不依賴有沒有一個volume1,但有些會要求有volume1,這時即使有原來的volume1/@tmp,@databases,啟動也會出錯。另外注意,把所有的依賴和核心安裝全:

這裡我總結了spk的依賴規律。

一些語言類的:

PHP5.6-x86_64-5.6.40-0059.spk(webstation需要,nginx是系統自帶的)

PHP7.0-x86_64-7.0.33-0028.spk(photostation需要)

Perl-x86_64-5.24.0-0074.spk,PythonModule-x86_64-0114.spk(perl和pymodule cardavserver需要,py2是系統内置的),Node.js_v8-x86_64-8.9.4-0005.spk(這個就是chat server缺失的v8,calendar也需要)

PHP7.2-x86_64-7.2.24-0006.spk(這個calendar也需要)

和基礎類的:

SynologyApplicationService-x86_64-1.6.2-0431.spk(calendar也需要)的都是最好要安裝的。

然後就是各種其它APP了。

本地驗證版

還記得開頭說的“其實這個時候導出的鏡像也沒用,會失效”嗎?上一步導出的鏡像有可能失效。在另外的機器上啟動時會出現僅加載到webassit的情況,這應該是群晖的驗證過程。但是我測試時從一台新阿裡雲+skynas的按量組合産生的鏡像,在24小時之内是不會的。是以要趕在你做好鏡像的24小時内”食用“這個鏡像,很沮喪是嗎?我們可以把黑群弄成純粹的本地驗證。

驗證的過程肯定存在于rd.gz,rd.gz相當于usb pe(它會把綁定的網卡或sn與官方比對?異或是上面的tmp?)。而且我發現,普通群晖與skynas的rd.gz中的邏輯腳本組織等,都很接近。skynas的rd.gz并沒有經過深度定制。隻是沒找到vda變sda的地方。是否可以直接互相置換制造雲上的黑群?測試安裝普通黑群到阿裡雲,

但是安裝好了的,絕對沒事(這分二個過程,驗證的過程永遠在sda1中,而不是sda5中),不然,安裝好了的syno會重新開機後boot不動,這是毀滅性的。沒有出現過黑群被删volume1。

一些本質上的問題,任何黑群晖都不是絕對的本地驗證版

就像微軟假sn一樣,你固然可以在淘寶上買到,但如果涉及到使用某些線上服務時(比如黑蘋果之于icloud,黑群晖之于quickconnect,windows之于office,共同的線上更新等),注冊在官方的庫中,還是可以被辨識并删掉中止服務的,一切隻>> 是官方出于某些目的并沒有去針對反破解,這些反破解措施中有沒有包括删掉你的資料不可得知。技術上可以繞過機器和本地,但是你沒法繞過遠端和人 — 除非你滿足于使用封閉的本地服務,是以,任何使用破解OS這類大件都是有風險的,黑群也是。

——

讀到這裡的小夥伴都赢了。讓我在這裡看到你的頭像

接下來還會有一篇文章。Dsm as deepin mate(3):更安心全面地使用syno as icloud,我們将講解app中那些關于個人辦公及日常使用的portal,erp性質的app(email,cardav,calendar,etc..),探讨其可以無縫代替iCloud的方式,如何利用cloudstation+cloudsync作三地異地,探讨其同步算法與原理。

(此處不設回複,掃碼到微信參與留言,或直接點選到原文)

Dsm as deepin mate(2):在阿裡雲上真正實作單盤安裝運作skynas