ku-sukeのブログ

Just another hatena blog

OrangePi のNAS構築いったん完成(NextCloudPi)

あらすじ

自宅にAdBlockdnsサーバを立てたくなったku-sukeは、ついでに古くなったLinkStationのリプレースを検討する。いろいろ方式はあるがどうもNextCloudPiがよいようだ。ハードはOrangePiとWDのSSDを買ってさっそく構築してみた。

blog.ku-suke.jp

前回の記事の続きです。自宅の環境すべてで自動的にAdBlockされるのは意外といいものです。スマホゲーム内のインターステーシャル動画とかもほとんどでなくなりました。

 

さて、がんばって200GBくらいバックアップを取ったのですが、よくよく調べたところファイル名が日本語のところが見事にぶっ壊れており、躊躇なく初期化しました。やりなおしです。

調べてみるとLinkStationにはUSB接続の外部ストレージにバックアップする機能があり、ext3に対応していました。これ幸いとssdext3に変換し、標準機能を使ってバックアップしました。速度は遅いらしく4-5時間かかった気がします。

バックアップ済みのssdをorangepiにマウントし、ext4に変換します。

$ sudo umount /media/ssd
$ sudo tune2fs -O extents,uninit_bg,dir_index,extent,flex_bg,huge_file,dir_nlink,extra_isize /dev/sda1
$ e2fsck -fDC0 /dev/sda1

一部修復も行われ、無事読み書きが確認できたので、UUIDを調べてfstabに記載します。

UUID=dc33d819-3add-XXXX-XXXX-7a88712d8311 /media/ssd ext4 defaults 0 0

このバックアップデータは、普段使わないため、NextCloudとは別の領域に格納し、宅内環境でSMB経由でのみアクセスします。

 

NextCloudのフォルダ同期を試す

これでひとまず完成なので、実運用に耐えうるのかテストしてみたいと思います。使い方はやや特殊で、OneDriveみたいにDocumentsとDesktopを複数マシンで同期してみたいと思います。OneDriveの場合はDocumentsをクラウド同期にしてしまうとパワポとかが保存時にクラウド上に書き込むのを待ってしまうのですが、こちらならサードパーティ製なのでそのようなこともなさそうです。

 

f:id:ku-suke:20190601234618p:plain

Pixel 3aからもすぐに確認出来て、米国にサーバがありそうなクラウドストレージの10倍以上サクサクなので意外といいかもしれません。


f:id:ku-suke:20190601235133j:image

 

OrangePi / ASUS に接続したSSDのベンチマーク(SMB経由)

前回、OrangePiを構築したわけですが、いったんSSDASUSについているUSB3.0ポートに接続していました。こちらをいろいろと試しつつベンチマークをとってみたいと思います。

変更前:Buffalo LinkStation LS210D 

PC→WiFiASUSルータ→有線LAN→3.5inchHDD

f:id:ku-suke:20190519220807p:plain

こんなかんじです。普段使いはしてなくてほぼバックアップ用でした。

 

ASUS RT-AC87U のUSB3.0ポート

標準でついている機能を利用してみます。PC→WiFiASUSSSD

f:id:ku-suke:20190519220959p:plain

シーケンシャルリードは、ほぼ頭打ちです。WiFiの性能かもしれません。40MB/sとして、320Mbpsですかね。ランダムリードは全般的に伸びています。

 

OrangePiのUSB2.0接続

最後はOrange Piへの接続です。これもSMB経由になります。

PC→ASUSルータ→有線(1000base)→OrangePi→USB2.0SSD

f:id:ku-suke:20190519221542p:plain

なぜかSeq Readだけ性能が上がってしまったのですが、それ以外は微妙でした。こちらのメリットとして、ASUSルータNASでベンチを取るとCPUが張り付くのですが、OrangeNASだととくに問題ないため、家でガンガン動画を見ているときにルータが熱暴走とかしなさそうという安心感はあります。

ただし、NextCloudPiで使用するには、extでフォーマットしなおす必要があり、すでに旧NASからコピーした200GBのデータをどうするかが悩みどころです。自分しか使わないので、50GB分だけ切り出してextにして使っているのもよいかもしれません。

 

 

OrangePi One PlusでNASリプレースと家庭内AdBlock運用

f:id:ku-suke:20171226193634j:plain

OrangePi One Plus

無事構築できたので書いてみます。動機としてはぶっちゃけやってみたかっただけなんですが、NASが5年以上使用して老朽化してたり、AmazonやAndroidTVでTVerの広告が多すぎるっていうクレームが家族からきたりという点もあります。

 

使用機材

 

Orange Pi One Plusとは

Raspberry Piみたいなシングルボードコンピュータです。ラズパイほど安定していませんが、中華ガジェットでは有名なAllwiner H5を搭載し、メモリも1GBあるのでなかなかパワフルです。技適はありませんがWiFiがついていないので安心して(?)使うこともできます。

 

 電源とケースも買いましたがケースだけまだ届きません。

今回はこれでNASDNSフィルタリングを作ります。

 

OwnCloudのフォーク版NextCloudPiを使おう

とはいえ先人が多くのノウハウを公開していたので僕のは後追いになります。無事できたよという記事です。

 

OSはArmbianのStretchを使う

唯一のハマりポイントとしてはこれ。公式サイトにいくつかイメージが公開されているんですが、最新版は起動せず、古い奴はUSBにキーボードが刺さっていると起動しないといわれました。

また、そもそも使おうと思っていたNextCloudPiがDebian Stretchを公式にサポートしていたため、Armbianという有志がメンテしているイメージを使うことにしました。

https://qiita.com/masataka55/items/182ac6b2fdd0a984f641

NextCloudPi – Own your bits

 

Armbianインストール後、ユーザを追加・rootを無効化して、MACアドレスの固定化を行いました。ArmbianはまだTEST用で、起動ごとにRANDOM MAC ADDRESSになるのは不便なためです。

パスは違いますが、こちらの記事に従ってoneplusようのdtbを生成したところ、無事MACアドレスが固定されました。

https://gato.intaa.net/archives/8244

 

NextCloudPiをインストールします。ワンライナーでシェル実行するだけで30分ほどでインストールが完了しました。

 

ポートフォワーディングとLet's Encryptの実施

家の外からアクセスするため、ルーターの設定で80/443をあけ、DDNSをセットアップします。なんとNextCloudPiの管理画面からLet's Encryptが設定できるので、Web画面上で簡単に設定することができました。これで80番は閉じておいてもいいですね。

 

f:id:ku-suke:20190518170855p:plain

 

なぜかdnsmasqもすぐ使えた

なぜかわからないのですが各種DNSソフトウエアの導入も管理画面からできました。おそらくDDNSも運用できるようにという配慮かもしれません。

これでdnsmasqをいったん立ち上げて動作確認した後、この記事に沿ってDNSのBlacklistを埋め込むことにしました。

 

ohtorii.hatenadiary.jp

AdBlock用のconfを作成した後、dnsmasq.dの中に入れて読み込む形式で設置しました。いくつかネットサーフィンしてみて問題があればホワイトリストいりできるような運用体制を作ってみようと思います。

 

Mackerelのインストールと温度管理

さて、一通り動きましたがDNSサーバがたびたび止まるのはよくないので、死活監視することにしました。Mackerelをインストールします。※APIキーの取得が必要です

https://github.com/mackerelio/mackerel-agent

Releaseから最新版のlinux-armパッケージを落としてきます。/etc/ 配下に配置し、systemdとしてデーモン化します。

https://blog.adachin.me/archives/4007

 

通常の負荷だけでなく、温度も管理したいとおもいます。カスタムメトリクスを作ればいいようです。

Raspberry Piの温度をMackerelで監視し、アラートを飛ばす - Qiita

しかし、RasPiに含まれるvcgencmd がArmbianにはありません。そこでPythonで温度を取得することにしました。

#!/usr/bin/python2.7
import os

temp = 'cat /sys/class/thermal/thermal_zone0/temp'
temp = os.popen(temp).readline().strip()
temp = int(temp) / 1000
print( str(temp) )

 ちょっと雑なコードなので動かなかったらごめんなさい。こんなかんじで無事温度の管理をすることができました!

 

というわけで実際にNextCloudPiを使っていきたいのですが旧NASの整理が終わらないのでここまでで。姫トランスとかでてきてやべえ

 


Hime Trance kai & J Eurobeat / Mirukomeda 138

明日の #技術書典6 に新刊3冊!JavaScript、Oculus Go、そしてアジャイルカラダ開発【か18】

f:id:ku-suke:20190413144527p:plain

 

 いよいよ明日は技術書典6ですね!今回FlightBooksからは新刊が3冊でます!それぞれ100部のみの頒布となりますので、気になる本があればぜひ【か18】までお越しくださいませ!

新刊1 JavaScriptで徹底的に遊ぶ本 by まさとらん

JavaScriptの基本的な学習を終了した人
・初心者から中級者にステップアップしたい人
JavaScriptでいろいろ作ってみたい人
・とにかくJavaScriptが好きな人

本書は上記のような人にオススメできる「作って勉強する」スタイルの本になります。
とにかくJavaScriptの勉強と言えば、フレームワーク論争やWebpack・BabelなどのNode.js環境の話になりがちなのですが、そうではなくて純粋にJavaScriptを使って「何かを作る」ということに重点を置いた本です。
本書を読むことで、3Dマップやグラフ・チャート、ゲーム、音楽、ブログ、ボット…など、さまざまなジャンルのコンテンツをJavaScriptライブラリなどを駆使して誰でも開発できるようになります。

というわけで、とにかくJavaScriptを使って、いろんなものを作り出してみるという本です。個人的に面白かったのが、3章の立体視画像を作ろう!というやつです。こんなのもJavaScriptだけで作れるんですね(笑)

f:id:ku-suke:20190413140855p:plain f:id:ku-suke:20190413140935p:plain

後半の章では勉強の過程を動画で記録できるサービスの紹介や3Dゲームなど、プログラミング初心者でもいろいろ動かして楽しめる内容が盛りだくさんです!

 

新刊2 Oculus GoのVR Shooting Gameアプリを作ろう!by keijipoon

Unityを使って個人でもゲームを作れるようになりました。これからは、3DやVR/ARでのゲームが増えていきます。しかし、まだまだ自分で作れる人はごくわずかです。この本では、VR ShootingGameに必要な最低限のTipsを紹介していきます。今回は安価なVRバイスとして、話題をさらったOculusGoを対象にVR Shooting Gameを作成します。Oculus GO にならではの設定などを冒頭に、後半はShooting Gameを作成するための最低限の要素だけをまとめました。

本書はUnityをつかった3Dシューティングゲームが作れるようになる本です。しかも作ったゲームをOculus Goで動かすことができる各種設定を丁寧に解説しています。

 

f:id:ku-suke:20190413141703p:plain f:id:ku-suke:20190413141757p:plain

実は僕もOculus Goを買ったまま、3,4回だけ使って眠らせてしまっていました。いまではUnityのAsset Storeも充実していて、パーツをダウンロードして配置していくだけで世界を作っていくことができるんですね!自分だけではなく子供と一緒にゲーム作りを楽しんでみたいと思います。

 

新刊3 アジャイル"カラダ"開発ガイド by 懸田 剛(@kkd

3つめは、プログラミング言語と打って変わって、カラダの改善にアジャイルを取り入れた本です。

本書は30代半ばを過ぎて身体が気になってきたソフトウェアエンジニアを対象に、ソフトウェア開発の現場で行われている**アジャイル開発**のエッセンスを用いて、リーンで生産的でアジャイルなカラダへと変化させるための入門書です。巷に氾濫する「XXXだけでOK」「一週間でXXXできる」「究極のXXX」といった短絡的なキャッチコピーに踊らされずに、漸進的かつ継続的に健康的なカラダや習慣を**楽しみながら**生み出すコツを紹介します。

飽きっぽく意志が弱い筆者が、様々なダイエットや運動経験の失敗経験や、40歳を過ぎてから約7年間実践してきた様々な経験・研究を元に構成されています。そのため誰でもすぐにカラダ開発を始めて継続しながら成果を出すことができます。

本書は30代半ばを過ぎて身体が気になってきた おいおいワイのことやないか・・・

これは個人的にめちゃくちゃ刺さりましたw

f:id:ku-suke:20190413142730p:plain f:id:ku-suke:20190413142936p:plain

 

本書は筆者の数々の失敗とそこからの学び、そこから生み出された「アジャイルカラダマニフェスト」を宣言しどのように取り組めばよいかが記されています。後半のカラダのリファクタリングでは原理原則が示されたうえで、巷にあふれる単一のメソッドではなく、どのように組み合わせ、計測し、無理せずに進めるべき書かれています。

 

技術書典は「か18」へお越しください!

サークルチェックはこちらから

https://techbookfest.org/event/tbf06/circle/52120002

技術書の商業出版と同人誌の「間」を解説するよ - その2

前回の記事では、一般的な商業流通の「本の物流の流れ」「お金の流れと権利」について書きました。

 

blog.ku-suke.jp

 

それでは、商業出版と同人誌の間の形態って?

まず本の物流面についてです。

具体的には、インプレスR&Dさんのやってる通販オンリーの商業出版がこれに近いと思っています。

前の記事で説明した商業出版では、全国津々浦々の書店に届けるため、約2000-3000部を刷ると説明しました。

一方で、インプレスR&Dさんが取り扱っているのは「プリントオンデマンド」と呼ばれる方式で、オンライン書店で印刷を受けてから印刷する方式になり、事前にリスクを負って刷る必要が基本的にはありません。

この方式に対応しているのは現在Amazonと、一部の大手書店にとどまります。そのため「全国津々浦々の書店に並ぶ」ということは叶わないものの、一般的な電子コンテンツの販売と同じように紙の本を扱うことが可能になります。

さらにAmazonであればKindleをつかって電子版も流通させることができますね。

このような形式でPODを実施している出版社はいくつかありますが、技術書ではインプレスさんがほとんどでしょうか。著者からすると、卸流通に載せるようなまとまった印税は期待しにくいですが、同人誌感覚でAmazonで売れることがメリットでしょう。

 

契約と売上に関しては?

 インプレスさんでは商業出版ということでもともとは独占契約でされていたのを、カスタマイズされてるみたいですね。おそらく売り上げの分配も印税のように売れた分のX%という契約ではないでしょうか。

Kindleに関しては著者個人で申し込むと、35% or 70%が手元に入ります。70%プランはAmazon独占販売などいくつか条件がありますが、それでも35%がはいります。もちろん面倒な手続きや必要なePubフォーマットの作成は必要ですので、手間に見合うかは考える必要があります。

つまり、プリントオンデマンドを利用することによって、紙も電子も同様に売れた分だけというモデルが成立するようになったのです。インターネット界隈の方にはこの方がなじみがあるのではないでしょうか。

ほかにも、自社通販のみのクラウドファンディング型出版のPEAKSさんなんかだと、著者がアフィリエイト設定をできたり、それによって非常に高い売り上げ還元率を実施できたりとユニークな仕組みがあります。

 

このように、「商業流通だけど書店には並ばない」「紙の本だけど事前に数千部刷らない」(からニッチな本でも出版できる)というような新しい方式が、同人と商業出版の間にあるといえます。

そのため、例えば「kindleは自分で出すけど、Koboは出版社」「紙の本はA社のPODでだすけど、電子はB社経由で出す、さらにBOOTHでも売る」「Kindleとnodeで有料で販売する」みたいな様々な方式があるのではないでしょうか。

 

個人的にもこのあたりに非常に興味があり、技術書典6では「Markdownで技術同人誌を書こう!」の続編として「技術同人誌をあらゆるサイトで売ろう!」に挑戦してみたいと思っています。興味ある方は、Twitter@ku_suke か、技術書をもくもく書くSlackを立ち上げているのでそこでわいわい議論しましょう!

技術書の商業出版と同人誌の「間」を解説するよ - その1

AWSを始めよう!などで前回の技術書典でラスボスとよばれたmochikoさんが技術同人誌の商業出版についておはなしを書かれていて、とても面白かったです。

note.mu

一方で技術書典シリーズを出版されているインプレスR&Dの山城さんも書かれている通り、技術書界隈という特殊な市場においては、「商業出版」と「技術同人誌」の間もあるのではないかと僕も思っていて、そのあたりを解説しようと思います!

 

 

そもそも商業出版とは?

※何を持ってして「商業」「同人」と呼ぶのかは人に寄ると思うので、ここでは「商業出版」を「出版社が版元となって本を出版すること」と定義して話を進めます

このようにmochikoさんの記事ではありましたが、本記事における商業出版は「ISBNコードを取得して流通させること」「出版権の契約を締結すること」の2点をもって商業出版と呼ぶことにします。

前者は「物理的な本の流れ」、後者は「お金と権利の流れ」ですね。

ISBNコードと流通について

本が著者から読者に届くまでにはいくつかの経路がありますが、基本的には

出版社→ 印刷所→書籍卸→書店→読者

という経路を通ります。Amazonの場合は卸を通さないこともあるみたいですが、基本的にはこんな感じです。ここで全国の書店のレジで扱えるようにするシステムが、ISBNコード(書籍の裏にあるバーコード)です。

 

これは申し込めば有料で取得することができ、出版社はたくさんコードを持っています。(小規模だとまずは10-100個くらいしか取れないらしい)これがあることで、卸業者を通じて全国の書店に出すことができるんですね。

 

じゃあBOOTHで売られている同人誌は?

少し余談ですが、AmazonとちがいBOOTHやとらのあなで売られている同人誌はどうでしょうか。こちらはすべて商業流通の観点では「書籍のような形状をしているグッズ・冊子」として扱われているため、その他の書店で基本的に扱うことができません。

もちろん個々のお店で特別に扱うことは可能ですが、それはそのお店の商品データベースにいちいち追加して、そのお店のレジだけで使える番号を発行してもらっているわけです。

 

ここまでがまず物理的な本がどのような流れで読者に届くかです。

 

出版権とは?印税とは?

次に、本が売れたのでお金を著者まで届けなければいけません。ここで登場するのが出版権と印税というシステムです。

印税のざっくりとした仕組み

まず、わかりやすい印税から説明すると、「売れた本の割合に対する著作権使用料」になります。もともと著作物はこの世に1つで、本はあくまでそれを複製したものと位置づけられます。そのため、複製に関する著作権料を出版社は著者に支払うのです。

多くの場合は、出荷の単位でその8%とか10%とかが設定されます。だいたい技術書だと2000部~3000部を初版にすることが多いと思われますので、2000円の本を3000部出荷すると、著者に50-60万円はいるわけですね。増刷すると追加で500部とか出荷した単位で印税が入ります。*1

よくある誤解なのですが基本的には「お店で売れた数」ではなく「卸に向けて出荷した冊数」になります。ただしニッチな本などはリスクに応じて「売れた分だけ」の契約割合が増えると聞きます。

 

ちょっとややこしかったのでお金の流れを整理すると

読者→(商品代金)→書店→(仕入れ代)→卸・出版社→(著作権料)→著者 

ですね。再販制度という仕組みがあるので本当はもっとややこしいのですが、簡略化するとこんな感じです。イベントでの同人誌手売りやBOOTHの場合はもっと簡単で

読者→(商品代金)→BOOTH→(システム手数料引き後商品代金)→著者

となります。あくまで読者に著者が直販していて、BOOTHはシステムという立て付けです。*2

 

出版権とは

商業出版のうち、難しいし悩むポイントがこの出版権です。出版権とは要するに、「この世に一つしかない著作物を複製(印刷)したりダウンロードさせたりする権利を独占的に契約しますよ」というものです。

この独占というやつが弊害で、契約した出版社が「うちはAmazonやってないんだよねー」と言われても、自分でAmazonと契約したりすることは契約書に書いていない限りできません。

その代わり、出版権をもつものは、勝手に海賊版が流通していたらそれを差し止める権利を有します。

とはいえ、この流通が複雑化している時代、この独占というのが著者からすると悩ましいのではないでしょうか。たとえば著者自身がブログで1章無料公開したい場合も、出版社の許可が必要になってしまうのです。

 

 

つまり、全国の書店に並べることができる商業流通の可否、ある程度のリスクを分担する印税契約、それと独占契約を結ぶかどうかがポイントとなりそうですね。

 

じゃあタイトルにある商業出版と同人誌の「間」って、どういう契約形態、出版方式ができるんだっけ?

 

長くなってきたのでその2に続きます

*1:ただし入った印税が振り込まれるのは年に数回まとめられることが多い

*2:そのため、著者ごとに特定商取引法に基づく表示が存在する

Markdownで書籍PDFが生成できるFlightBooksをアルファリリースしました

先日の記事からなんとか各位にご協力いただきまして、また自分もだいぶVueとTypeScriptの環境に慣れてきまして、ある程度会員登録から本の生成まで最低限動作するようになりました。

 

flightbooks.pub

 

こういう感じで書籍が作れます。まずサインアップか、ソーシャルログインをします。

 

f:id:ku-suke:20181128182010p:plain

サインアップ画面

 

つぎにプロジェクトを作成します。なお技術カテゴリはまだ動作していません。

f:id:ku-suke:20181128182858p:plain

新規プロジェクト

プロジェクトを開くと執筆画面になります。左の章一覧から章を作成してどんどん書いていってください。だいたい1章あたり1つのMarkdown文書、1万文字未満になることを想定しています。

 

f:id:ku-suke:20181128183130p:plain

章を追加

気の向くまま書いてください。あるいは社内Wikiなどからコピペしてもいいですね。現状利用規約とかがないのとデータも消すかもしれません。大切な情報は書かないでください。

エディタはプレビュー機能やテーブルタグの入力支援があります。画像に関しては編集エリアにドラッグドロップするとアップロードして差し込めます。編集したり削除する機能はまだありません。

 

f:id:ku-suke:20181128183655p:plain

エディタの様子

書けましたら「保存」をおして、まずはビルドしてみましょう。目次を生成するので、最低ひとつは見出し(# 一個)があるとよいでしょう。

 

左側の書籍をビルドを押すと、ビルド設定が出てきます。いろいろありますが登録したメールアドレスが埋まっていると思いますので、ビルド実行すると記入されたメールあてに1~2分程度でPDFリンクが送られてきます。

f:id:ku-suke:20181128184447p:plain

できあがったPDF

こんな感じで遊べます!いまのところ1ビルド当たり1円~数十円くらいのコストなのでガンガン遊んでもらって大丈夫です。

 

まだまだ不具合、未実装が多いので、TwitterIssueでお知らせいただけると幸いです。