跳到主要內容

openSUSE/Raspberry Pi 3/Nextcloud 心得

前同事成立 ownCloud 的時候就很好奇是要怎麼用,不過一直到主要開發者另外成立 Nextcloud 都還沒用過,只知道是可以自己架的 file server,也有手機 APP 支援。直到最近家人有備份 iPad 檔案的需求,才想到可以拿被我閒置的 Raspberry Pi 3 來試看看。

其實在這之前就一直在想用什麼方式備份比較好。一開始是買有 USB 的 WiFi router 刷上 openWRT 以後再透過 sftp 拷貝到外接的 USB 硬碟,然後順便架了 DLNA 看照片跟影片。不過 WiFi router 用的晶片運算能力都不太強,用 DLNA 看照片時,有時會因為運算縮圖需要的記憶體太多而整個當掉,算不上是一個好方案。另外只有一顆外接硬碟也不是很保險,所以變成電腦裡面也備份,到後來也吃了不少空間。Google Driver 或 iCloud 之類的除了容量限制,還有綁定服務商的問題,所以還是希望自己家裡架一台。中間有想過買台 NAS,不過一直懶得弄。這次總算有動力來做備份用的 server。

首先是外接硬碟。一開始想用兩顆外接硬碟做 soft raid,但 Raspberry Pi 3 本身供電有限,接兩顆硬碟搞不好推不動,保險起見還是買外接盒。挑了兩三天最後買了 CyberSLIM SSDPRO RAID。優點:體積小(因為是塞兩顆 2.5” 硬碟)、鋁殼無風扇(很安靜)、有硬體 RAID1、支援 USB 3.1。缺點:軔體鳥鳥的(一開始切到 RAID1 還是會認到兩顆硬碟)、LED 燈太亮(晚上關燈在閃的話很刺眼)。因為沒有主動式散熱,所以我搭配了兩顆 HGST  1TB 5400 轉的硬碟,降低散熱需求。另外 Raspberry Pi 3 只有 USB 2.0,所以也不用太在意硬碟效能,加上大部份使用會透過 WiFi,整體效能瓶頸不會是在硬碟這邊。

硬碟設定完,把 openSUSE Leap 42.2 刷進 Raspberry Pi 3 就可以開始裝 Nextcloud 了。安裝難度比想像中低很多,照著 openSUSE wiki 上的步驟做,很容易就可以裝好了。不過呢!因為 server:php:applications 這個 repo 的 build target 沒有 AArch64,所以只能選擇 2.2 的 Install from Source。另外還有一點很重要,42.2 的 php 還是 5.5.14,所以只能裝 Nextcloud 10,11 需要 5.6 (註:wiki 上的指令是裝 php5-*,實際上把 php5 改成 php7 就可以上 Nextcloud 11 了)。基本上照著 wiki 做就差不多了,最後用瀏覽器連到 http://<server ip>/nextcloud 就可以看到第一次使用時的設定頁面。如果想設定 SSL,記得把 APACHE_SERVER_FLAGS="SSL" 加到 /etc/sysconfig/apache2,然後到 /etc/apache2/vhosts.d 以 vhost-ssl.template 當基礎來寫 vhost-ssl.conf,我是只有把 _default_ 改成我 server 的 IP,然後照 Apache Wiki 全面啟用 HTTPS。

Server 設定完以後就可以裝 client 了。Linux 桌面的話可以直接用 WebDAV 來連,手機不管 Android(免費) 或 iOS(要 30 元現在免錢) 都有 APP 可以裝。用過以後感覺 iOS 上的 APP 比較好一點,在開自動同步以後會把所有照片都依年月分資料夾上傳。Android 的不知為何只有新的照片才會上傳,舊的要自己上傳。不管怎樣,至少有個簡單的備份工具可以用了。

最後來說說優缺點。優點:安靜(無風扇真的安靜)、不太佔空間、全部裝置都可以共享、容易客製化。缺點:運算能力不算太好(用網頁開相片模式會非~~~常~~~慢,因為 1G RAM 真的太少)、LED 燈太亮。另外就是沒有想像中便宜,全部錢加一加其實也可以買一台初階的 NAS 了,但是用 RPi 3 彈性比較大。另外網路上有人提到可以用 nginx + php-fpm 取代 apache,據說比較省資源。不過我沒有裝成功,雖然可以看到登入畫面,但是登入後就一直跳回登入畫面,後來就放棄了。有機會的話還是想試試看 nginx + php7。

後記:
在從 openSUSE Leap 42.3 更新到 openSUSE Leap 15.0 的時候把 SD 卡弄壞了,只能重建系統。不過在 Leap 15.0 裡面已經有 nextcloud 了,可以直接 zypper in nextcloud 安裝。大部份設定照之前來做,然後外接硬碟上使用者外的資料砍掉讓 nextcloud 重建,最後把帳號建回來,一切又跟以前一樣了。

留言

這個網誌中的熱門文章

Linux Network Scaling: Receiving Packets

Once upon a time, everything was so simple. The network card was slow and had only one queue. When packets arrives, the network card copies packets through DMA and sends an interrupt, and the Linux kernel harvests those packets and completes interrupt processing. As the network cards became faster, the interrupt based model may cause IRQ storm due to the massive incoming packets. This will consume the most of CPU power and freeze the system. To solve this problem, NAPI (interrupt + polling) was proposed. When the kernel receives an interrupt from the network card, it starts to poll the device and harvest packets in the queue as fast as possible. NAPI works nicely with the 1 Gbps network card which is common nowadays. However, it comes to the 10 Gbps, 20 Gbps, or even 40 Gbps network cards, NAPI may not be sufficient. Those cards would demand much faster CPU if we still use one CPU and one queue to receive packets. Fortunately, multi-core CPUs are popular now, so why not process packet

uxterm + tmux 使用心得

公司工作環境主要是一台筆電,一台桌機。筆電因為比較老舊,主要用來看文件查資料,桌機才是用來開發,兩台用 synergy 連接起來,這樣就可以用桌機的鍵盤滑鼠同時控制。為了追蹤自己的工作進度,我利用了 vim-notes 來做條列式的紀錄,底層再加上 git,每個星期 commit 一次,這樣用 git diff 就可以知道自己在某段時間內做了什麼事。 一開始會在筆電開個 terminal 用 mosh 登入桌機來開 vim-notes,工作時邊做紀錄。但是後來遇到一個問題:有時候在筆電看文件的時候想用桌機的 terminal 編輯工作進度。假如要同時用 vim 編輯,就會有同步的問題。為了這個問題找一些遠端同步編輯的程式,後來想想,其實只要同時 attach 到同一個 screen 或 tmux session 就可以兩邊同步操作。 在這之前,只覺得 tmux 就另一個 screen 而已,但是 tmux 有個比 screen 好的地方:當一個 session 有兩個 client 時,tmux 會自動把 window 的大小改成比較小的那個。screen 則是要自己調整。為了這個功能,最後選擇了 tmux + vim-notes 來同步做筆記。 tmux 用慣了以後,又開始覺得是不是可以用 tmux 取代 urxvt 那個有點憋腳的分頁。調校了一下設定,現在主要就用 uxterm + tmux。 目前的設定檔: .Xresources UXTerm . termName : xterm-256color xterm * scrollBar : false xterm * alternateScroll : true UXTerm * faceName : Source Code Pro Medium UXTerm * faceNameDoublesize : Noto Sans Mono CJK TC UXTerm * faceSize : 12 ! Color UXTerm * foreground : white UXTerm * background : black UXTerm * color0 : rgb:00/00/00 UXTerm * color8 : rgb:55/57/53 UXTer