Raspberry Piの初期設定箇条書き



 Raspberry Piの最初のモデルを持っていたが、2はなんとなくスルーした。そんでこのたび3が出て、USBポートからHDD駆動の電力が出るものに変えたいなと思っていたので買った。
 以前のRaspberryPiはファイルサーバとして使っていたので、その辺も含めての初期設定を箇条書きでまとめておく。
 ちなみにHDDはTOSHIBAの2.5インチ、15mm厚を買った。15mm厚だとUSB1ポートからの電力駆動が無理かなと心配だったが、今のところ問題なく動作している。

・IP固定(SSH接続のため)
sudo nano /etc/dhcpcd.conf

interface eth0
static ip_address=192.168.XX.XX/24
static routers=192.168.XX.1
static domain_name_servers=192.168.XX.1


・ホスト名変更
sudo nano /etc/hosts
sudo nano /etc/hostname


・cron作業設定
crontab -e
sudo /etc/init.d/cron reload



・HDDマウント
NTFSのHDDマウントのためのモジュールを入れる
sudo apt-get install ntfs-3g

接続されたHDDのUUIDを調べる
sudo blkid /dev/sda1


sudo nano /etc/fstab
上記コマンドで設定ファイルを開いて、下記を追加。
UUID="XXXXXXXXXXXXXX" /mnt/hdd1 ntfs-3g defaults,nofail 0 0



・samba

sudo apt-get install samba

sudo nano /etc/samba/smb.conf

[share]
path=/mnt/hdd1
read only=no
browserable=yes
guest ok=yes
hide files = Thumbs.db/desktop.ini
force user=XXX

sudo service smbd restart
sudo service nmbd restart
comment: 0


このブログの技術的要素

 先月に.NET Coreの正式版リリースが迫っているという報を聞いて、このブログをぼちぼちと作り始めて形になってきた。ブログを作るというのは既存のサービス上で開設するのではなく、できあいのブログエンジンを使うでもなく、正式リリースがせまっていた.NET Coreを使って作った。

 自作なので自分で必要なものを選んでいった。ちなみに自分の使いたいと思っていたサービスを使いつつ、月額費用がタダになるように選んでいった。
 まずAzure。もうクラウドが話題になって久しい。クラウドサービスはAWSが圧倒的なシェアを持ちつつもAzureがそれを追うという状態。そして大企業がリソースをローカルからクラウドへ移すという事例をメールマガジンでよく読むようになってきた。そんな中で仕事でクラウドを触る機会はなく、このままいっさいクラウドに触れないというのはまずいかなと思った。なのでクラウドサービスを使いたいと考えていた。あとはVPSでDocker上でコンテナとしてWebアプリを動かそうと考えていたが、そうなるとタダとはいかなくなるので別の機会にやることに。とりあえず本ブログはAzure WebAppServiceの無料枠で。
 続いてデータベースはmlabというMongoDBのホスティングサービスを使った。Azureで金を払ってデータベースを用意するのもいいが、MongoDBを使いたいと思っていたところ、軽い使い方(使用可能領域がぼちぼちのサイズでリソースが共用だったり)ならタダだったのでホスティングサービスmlabを利用。サーバのリージョンを選べるが、タダだと日本のサーバは選べない。なのでタダの米国西部を選択。これに合わせてAzureのほうのサーバも米国西部にした。
 画像などの容量の多いファイルのサーブについて。クラウドだと回線でデータを送受信した分も金をとられる。そしてmlabでタダの範囲内に容量を収めることを考えると、画像ファイルは敵である。そこでそれらのファイルはOneDriveに入れることにした。最初はMongoDBにGridFSという仕組みがあるのでそっちを使おうとしたけど。OneDriveについては通常のOneDriveサービス画面でファイルをアップして、埋め込みリンクを取得してという手順で今は使っている。ここらはAPIがあるので近々管理者ページでうまく連携できるようにしたい。
 ASP.NET MVC周りについて。現状は.NET Coreでも、.NET Frameworkベースで動作するものを使っている。MongoDBのドライバがまだ.NET Core対応のものが出ていないので。対応版が近々リリースされるので、それが出たら純粋な?.NET Coreに切り替える。

 このブログのベースにある技術的なところをとりあえず大まかに並べて書いていった。続いてブログを作るためにどんなC#コードを書いたかを記事にしていきたい。
comment: 0

MongoDB, C#: MapReduceで集計処理

 MongoDBにもドキュメントの集計を行う機能がある。それがMapReduce。
Gihyo MongoDBでの集計処理

 このブログのサイドバーに、タグごとにそれがついた記事が何件あるかを集計してある。この集計にMapReduceを使っている。
 タグは一件の記事ごとにArrayに入れてある。集計では公開記事のそのArrayを全件とってきて、中のタグをカウントしている。というわけでそのコード。

var collection = DbConnection.db.GetCollection<BsonDocument>("entry");

var map = (BsonJavaScript)@"
function() {
emit('tag', this.tag);
}";

var reduce = (BsonJavaScript)@"
function(key, values) {
var result = {};

values.forEach(function(value){
value.forEach(function(v){
if (!(v in result)) {
result[v] = 1;
} else {
result[v] += 1;
}
});
});

return result;
}";

var filter = Builders<BsonDocument>.Filter.Eq("showFlg", true);
var options = new MapReduceOptions<BsonDocument, Dictionary<string, object>>();
options.Filter = filter;

var results = collection.MapReduce(map, reduce, options);
var result = results.First();
var json = result.Values.Last().ToJson();
var dict = (Dictionary<string, int>)BsonSerializer.Deserialize(json, typeof(Dictionary<string, int>));


 MongoDBからDriverが受け取ったBSONから、どうすれば直接集計結果のKeyValueペアを抜き出せるかわからなかった。なので必要な部分だけJSON文字列で抜き取って、それをデシリアライズして辞書型にした。
comment: 0

404ページにこだわる

 近年はWebページを訪れた人の興味をひきつけるため、404ページにもこだわることにおもむきがあるとされている。自分の趣味の悪さをいかして、こだわりの404ページを作ってみた。いろいろ整って来たらこのブログにのっける。

404ページ

comment: 0