時代に追いつくMining Log

マイニングが流行ってから一足遅れて世界に飛び込んだ人の日々の記録と成長を記録していきます

Ubuntu20.04にraid0を構築してsnap版nextcloudをインストールした話(最初に少々マイニングの話)

序章

お久しぶりです。最近はめっきりマイニングからは手を引いてしまっていたのですが、情報だけは集めていました。その中でもhddマイニングでのchiaマイニングはburstマイニングを少々連想させられていました。あの頃よりは通貨自体の相場が高めなので割に合うのかなといった感想でしたが、hddマイニングの界隈は数百TBからPB単位に突入するレベルの人たちが参入してきたり、burstの頃と違ってマイニングプールが存在しないことからchainの一本釣り感がある印象のため、すぐにhddの元が取れなくなったり収益概算値がめちゃくちゃ不安定じゃないのかなぁと遠目に眺めていたら案の定といった感じでした。GPUマイニングよりもhddマイニングはより手軽に参戦出来ますが、圧倒的に参入勢の使用容量が桁違いのため、数TBもあればいけるやろといった感覚は結構外れたりします。あと、plotファイルの作成に非常に時間がかかったりとちょっと悩ましい点もありますね。自分はburstコインの時はplotファイルの作成用にRyzenを新調してました。
(5/19に末尾分追記)

記事作成の理由

今回この記事を書いた理由として、nextcloudに関する記事が日本語ではraspberryPiに対するものしか無く、自分かこれを構築するにあたってめちゃくちゃ海外のフォーラムを漁りまくっていたので、誰かの助けになればと思って書いています。
ちなみに、raspberryPiだとUSB接続にて外部ストレージを読み込ませるのですが、PCとして構築する場合はSATAケーブルにて繋ぐため、少々手順が変わってきます。また、今回raidを構築するため、間に数ステップ追加されます。それに関してもちょっと手間取ったのでメモ書きとして残します。

構成

まあchiaの話はこれぐらいにして、今回の本題であるnextcloudの話を。
今回これを自宅に構築した理由ですが、身内10人程度での大容量クラウドサーバーが欲しいということになったのですが、NASだとローカル環境でしかアクセス出来ず、sshを介してしか使用出来ないため、PC初心者も混じっているメンバーだとsoftEtherなどの導入は難しく、結果nextcloudの構築となりました。PCの構成は以下のような感じです。
Intel i7 6700k
・MAXIMUS VII HERO
・DDR4 2133 4GB*2
・ADATA SSD 120GB
SEAGATE 4TB*3
・450W Thermaltake
構成自体は、正直床に転がっていた部品を全部使ったため、新調したものは無かったです。HDDに関してはburstマイニングの頃に使っていた物の余り物なので、正直ちょっと寿命が心配ですが、そこは根性でなんとかします。

Ubuntu20.04の導入

とりあえず、まずはOSのインストールということで、isoファイルをダウンロード、RufusでUSBに焼いてインストールをします。これに関しては手順は山のように記事が転がっているので省略します。それぐらいは自分でできる人じゃないと今後のことは出来ないため。
今回、OSは120GBのSSDに導入します。

RAIDの構築

とりあえずOSはインストール出来たとして、RAIDを構築していきます。今回はソフトウェアRAIDということでmdadmを使用していきます。まずは使用しているディスクの名前の一覧を

sudo fdiski -l

自分の構成だと、4本記憶デバイスが刺さっているため、これらが/dev/sda,/dev/sdb,/dev/sdc,/dev/sddとして認識しているのが把握できます。今回OSは/dev/sdaにインストールしてあり、残りのsd[bcd]が4TB HDDのため、これらでRAIDを構築していきます。

まずはRAID構築用ソフトのインストール

sudo apt install mdadm

この子はソフトウェアRAIDを構築するためのソフトです。

そしたらこれを使ってRAIDアレイを作成します。

sudo mdadm —create /dev/md0 —level=0 —raid-devices=3 -f /dev/sd[bcd]

なんか確認が出るのでyでおっけーします。
もしこの際なんかエラーを吐いたら、各デバイスパーティションが出来ていないため、fdiskとかpartedでパーティションを/dev/sdb,/dev/sdc,/dev/sddに対して作っておきます。また、容量が2TBを超えるので、その点に関しても注意しながら。もしCUIでの作成がだるい場合はGUIでディスクって言うソフトでUIを使っても作れるので、それを使うと楽かも。

出来たら、mdadmで確認を

sudo mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Wed May 12 15:53:00 2021
        Raid Level : raid0
        Array Size : 11720658432 (11177.69 GiB 12001.95 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Wed May 12 15:53:00 2021
             State : clean 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 0

            Layout : -unknown-
        Chunk Size : 512K

Consistency Policy : none

              Name : micotoserver:0  (local to host micotoserver)
              UUID : 47ad2973:c59b4863:45b2d5ea:4c8e144b
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       2       8       48        2      active sync   /dev/sdd

こんな感じで出てくれば、RAID0を3本使って構築が完了しています。

そしたら、fdisk /dev/md0でパーティションを作って、mkfs.ext4 /dev/md0を使って新しく作った/dev/md0をext4でフォーマットします。これが完了すれば、今回作ったRAIDが1つの領域として使用可能な状態になります。

RAIDをmountする

とりあえずRAIDの構築が終了したので、ファイルとして使えるようにmountします。今回は/mnt/nextcloudにマウントします。

cd /mnt
sudo mkdir nextcloud

これでとりあえずフォルダを作って、

sudo mount /dev/md0 /mnt/nextcloud

こいつでマウントします。なんか特にエラー吐かずに出来れば、マウント出来てます。

再起動でも安定するようにconfigファイルを弄る

そしたら、サーバー再起動をしてもraidが正しく構築されて自動でマウントされるようにちょっとだけconfigをいじります。
reboot時に自動でやって欲しいことは
・raidArrayの構築
・/mnt/nextcloudに/dev/md0のマウント
この2つなので、それぞれ書きます。

まずはraidに関して。いろんな記事を見てると/etc/mdadm/mdadm.confに書けば再起動時に自動でやってくれるらしいんですが、自分はなんか上手くいかなかったので、/etc/rc.localに対して記載しました。

#!/bin/bash
mdadm --create /dev/md0 --level=0 --raid-devices=3  /dev/sd[bcd] <<EOF
y
EOF
mount -a

mdadmのraid構築の際のyの入力はEOFで飛ばして、マウントに関してはmount -aでやってくれます。ただ、このmount -aはconfigファイルに書いてあるmountをやってくれるコードなので、それのconfigも書きます。

そいつのファイルは/etc/fstabにあります

UUID=***************** /mnt/nextcloud ext4 defaults 0 0

こいつを1番下に追記します。
このUUIDってなんじゃいってことなんだけど、これはblkidってcmdで打つと出てきます。

micotoserver@micotoserver:~$ blkid
/dev/sda5: UUID="e3efa4d6-3d5e-4e28-afb0-4ad4ecc84077" TYPE="ext4" PARTUUID="40374a4a-05"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"
/dev/loop4: TYPE="squashfs"
/dev/loop5: TYPE="squashfs"
/dev/loop6: TYPE="squashfs"
/dev/loop7: TYPE="squashfs"
/dev/sdc: UUID="47ad2973-c59b-4863-45b2-d5ea4c8e144b" UUID_SUB="a567ff5c-a293-f680-56e9-145a4816a105" LABEL="micotoserver:0" TYPE="linux_raid_member"
/dev/sda1: UUID="D622-6E45" TYPE="vfat" PARTUUID="40374a4a-01"
/dev/sdb: UUID="47ad2973-c59b-4863-45b2-d5ea4c8e144b" UUID_SUB="e7300202-3c01-8f5a-aea3-88a13c5e4a50" LABEL="micotoserver:0" TYPE="linux_raid_member"
/dev/sdd: UUID="47ad2973-c59b-4863-45b2-d5ea4c8e144b" UUID_SUB="0918c5ca-1c1e-d7ef-a574-634dbd1a1ded" LABEL="micotoserver:0" TYPE="linux_raid_member"
/dev/loop8: TYPE="squashfs"
/dev/loop9: TYPE="squashfs"
/dev/loop10: TYPE="squashfs"
/dev/md0p1: LABEL="nextcloud" UUID="2cf83024-eda2-4bd5-80c3-43a9fd72d048" TYPE="ext4" PARTUUID="98893b25-1a08-49e1-b019-6fa34f645d9c"

これ。自分の場合は2cf83024-eda2-4bd5-80c3-43a9fd72d048になりますね。ちなみに、これで一応/dev/sd[bcd]がraidに追加されていることも確認できたり。

とりあえず、/etc/rc.localと/etc/fstabの編集で、再起動時にraidがうまく構築されるはず。一旦ここでrebootを入れて再起動後にraidが出来てマウントまで自動で出来ていれば成功。

次はnextcloudのインストールのお話。

snapとnextcloudのインストール

まずはsnap君のインストール

sudo apt install snap

なんかわーっといっぱいインストールされる。

ここからなんだけど、ちょっと一難あって、nextcloudをインストールする際に現在バージョンは最新20.0.9なんだけど、こいつ、いくら弄ってもクラウド容量(free space)が自分のインストールされてるパーティションしか読み込まなくて、今回みたいにraidの方にデータを保存して、nextcloud本体はOS側に入れたい場合、どちゃくそだるいので、インストールするバージョンを下げます。
まずはバージョンリストを取得

snap info nextcloud

わーっと出てきたら、今回は17/stableをインストールします。

sudo snap install nextcloud —channel=17/stable

ちょっとレイアウトは古くなるけど、正直認識しないよりは全然マシ。こいつなら上手く認識してくれました。

nextcloudの初期設定

そしたら初期設定をします。まずはadminUserの作成とアクセス可能なdomainの追加。

sudo nextcloud.manual-install UserName password

UserNameとpasswordは自分で変えてね。ここでadminアカウントを作成します。そしたら、アクセス可能なdomainの追加。

sudo nextcloud.occ config:system:set trusted_domains 1 --value=192.168.1.*

こいつで192.168.1.*からのアクセスが全般的に可能になります。他にもddnsを持っている場合はtrusted_domains 2としてvalueを変えて追加していきます。この追加を忘れると、localhostからのアクセスしか初期設定だと受け付けないため、ssh接続して操作してる場合、そのPCからローカルIPでブラウザで接続しても弾かれます。

その後は、データ保存先の変更。

nextcloudのconfig弄り

アカウントを作ったら、まずはデータをraidを作ったhddの方にコピーします。

sudo cp -r -d /var/snap/nextcloud/common/nextcloud/data /mnt/nextcloud

再帰させてディレクトリごとコピー。
コピー出来たら、アクセス権限の変更。これ、nextcloudの仕様なのですが、パーミッションを0770にしないと安全性の点から操作できないようになってます。なので、この辺を変えます。また、0770にしても保持ユーザーの関係からエラーを吐いたりするのですが、実は吐くエラーが同じなんですね。これに関してはマジで躓きました。
/mntから全部パーミッションを変更

sudo chmod 0770 /mnt -R
sudo chown root:root /mnt -R

chmodで権限を変えて、chownで保持ユーザーと保持グループの変更。両方-Rで再帰させる。

次に外付けのメディアをnextcloudが読み込めるように設定します。

sudo snap connect nextcloud:removable-media

こいつ、/mediaにマウントしたUSBとか/mntにマウントしたHDDとかにnextcloudが読めるようにする設定です。

そしたら、保存先の変更。

sudo nano /var/snap/nextcloud/current/nextcloud/config/config.php

'datadirectory'の項目を以下のように変更
'datadirectory' => '/mnt/nextcloud/data',
これで変更完了。ちょうど直下に.ocdataっていうファイルがあるように編集してください。じゃないとまた怒られます。
このファイルは隠しファイルになっているため、探す際はls -alで探して下さい。

後は、好みなんですが、domainを取得している際はSSLを発行します。

SSLの発行

まずはファイアウォールを開けます。

sudo ufw allow 80,443/tcp

そしたらSSL発行

sudo nextcloud.enable-https lets-encrypt

これで発行。domain名とメールアドレスを聞かれますので記入していきます。自己証明でも発行はできますが、chromeだと自己証明のSSLは弾いたりするので、lets-encryptで発行した方が安全かも。

最後に確認

そしたら、http://localhostかhttp://ローカルIPでサーバーにアクセスします。なんかログイン画面が出ればオッケー。adminユーザーでログインします。最初に設定したやつ。
ログイン出来たらこんな感じの画面に飛べるはず。
f:id:takaindex:20210513173512j:plain
ちょっとファイルとかアドレスは編集で隠してます。
右上のアイコンから設定に飛びます。
f:id:takaindex:20210513173646j:plain
左の1番下にシステムってタブがあるんですが、その中にサーバーの詳細が入ってます。その中のディスクの項目がサーバーの容量です。上手く増設したHDDの容量になってれば成功。ちなみに、20.0.9のバージョンだとこれが何故かdatadirectoryを変えても自分の場合は100GBぐらいしか認識しませんでした。バージョンを17/stableに下げたら上手くいった。なんでだろう。

その他細かい設定関係

ちょっとだるいんですが、実はこいつ、初期設定だと16GB以上のファイルをアップロードで受け付けない用になってます。また、phpの使用メモリも512MBで割り当てられており、サーバータイムアウトも設定されてます。ここら辺を弄ります。12TBのサーバーを作ったのに70GBのファイルとか上がらないと悲しいからね。

sudo snap set nextcloud php.upload-max-filesize = 70G
sudo snao set nextcloud php.post-max-size = 70G
sudo snap set nextcloud php.max-input-time = 0
sudo snap set nextcloud php.memory-limit = 6G

この辺は各自自分のサーバーにあった数値に変えてください。
この辺に関しては、/var/snap/nextcloud/current/nextcloud/config/config.phpを直接弄っても大丈夫ですが、snapのコマンドから編集した方が気持ち安全かも。

他にも、snapでインストールしたnextcloudは、apachephpもsnap管理の元で動いているため、サービスの再起動を行う際のコマンドも特殊。

sudo systemctl restart snap.nextcloud.php-fpm.service
sudo systemctl restart snap.nextcloud.apache.service

まあなんか、気持ち違和感。phpの設定とか変えた際はこっちで再起動。まあ面倒な時はrebootしちゃうんだけど。

終わりに

今回の構築に丸3日かかりました。まあ、snapのインストールに失敗して何回かubuntuの再インストールと、パーティションを間違えて弄ってbootファイルを見失ってend kernel panic起こして数回のubuntu再インストール、nextcloudを弄りすぎて壊れてubuntuごと再インストールを数回したのが原因なんですが。
安定したと思ったらhddを認識してなくていくら記事を探しても「あんたremovable-mediaをactiveにしてないんじゃない?」って書いてある記事しか出てこなくて、activeにしとるわい!ってキレてた。あと、記事を遡りすぎると古いバージョンはapachephpを別に入れてnextcloudをgitからcloneして構築する記事しか引っ掛からなくて、php.iniを探して編集してねって言われたけど、snapからのインストールだと実はそんなファイルなくて、なんなんだよ!!ってなってた。

3日目にしてやっと—channel=17/stableでインストールしてる海外の記事を見つけて、全部インストールし直してやってみたらすんなり認識して終わった。
んで、調べてて日本語記事はraspberryPiで外付けHDDを刺して構築してる記事しかなくて、しかもやるべきことが記事によってバラバラで困ったので、今回この記事を書いてみました。
まあ個人で大容量クラウドを構築する人なんてそうそういないと思うけど、誰かの助けになれればと思って。
それではまた。


5/19追記

chiaマイニングについて数日ちょっとだけ情報を集めてみたんですが、どうやら非公式でプールが存在するらしいですね(HPOOL)。また、公式もプールの開発には着手しているらしいです。プールが現状存在していて公式も開発の意思があるようなら、数十TBぐらいからならちょっと参入してもいいのかなと思ったりしています。
現状手持ちのHDDはnextcloudに12TB使ってしまっており、この子達は解体する予定がないため、参入する際は新規で少々HDDを購入しなければいけません。chiaの相場とHDDの相場、あとはプールのpayout率を監視しながらそこそこ真面目に計算して自分も参入しようか考えてみます。
ただ、plotファイルの作成にくそ時間がかかり、主な原因は演算よりもread/writeの方に問題があるらしいので、使い捨てのMVNeを考慮した方が良さげかも。演算用に昔買ったRyzenも別の機体に埋め込んでしまったので、そこら辺もちょっと考えながらHDD分の元が取れそうな気配がしたら参入していこうかと思います。その際は作成手順や計算結果もろもろを記事にまとめていこうと思うので、よろしくお願いします。