ブログを新しいサーバーに引っ越した。

自宅サーバーで4年くらい使っているサーバーから、ついに新自宅サーバーを購入して引っ越しました。
最近は3万円台のパソコンでも省エネでCore i5、メモリ8GBもあるパソコンが購入できるのでかなりいい時代になりました。 購入したのは、CHUWIのCoreBox。
ミニサイズながらも、 USB3.0 が2個もあるのでRAID 1も構築できます。

AWS Lambda で Rustを使ってみた話

この記事は、nacika.com Rust記事 アドベントカレンダー Advent Calendar 2018 – Adventar 二日目の記事です。

AWS LambdaでRustを使う方法はほぼ、<a href=”https://dev.classmethod.jp/cloud/aws/custom-runtime-rust/” title=”AWS LambdaのCustom RuntimeでRustを実行してみた #reinvent | DevelopersIO target=”_blank”>AWS LambdaのCustom RuntimeでRustを実行してみた #reinvent | DevelopersIO こちらや Rust Runtime for AWS Lambda | AWS Open Source Blog こちらの記事の通りに作ると簡単につくれます。

手順はもうあるので、作ってみた感想などを書いていこうと思います。

ランタイム is 何処

ランタイムは、AWSが用意しているというよりはcreateとして提供されているようです。
Cargo.toml にある lambda_runtime = "^0.1" というのがそれですね。

main.rsの編集だけで終わる

びっくりしたのが、main.rsに一通りの処理を書くだけですぐに使える所。内部的にはLambda用のリクエストを受け付ける処理があるようですが全てランタイムがやってくれます。便利。
そのため、こちらでやることはハンドラを書くことくらい。

必要なイベントを型で受け取る

#[derive(Deserialize, Clone)]
struct CustomEvent { #[serde(rename = "text")] text: String, #[serde(rename = "is_decode")] is_decode: bool
}

serde(rename = "text") が実際のイベント名、下にあるのが型のフィールド。
イベントがそのまま型で来るのでそこから取ってくればOK。falseやtrueがboolで処理してくれるのも地味に嬉しい。(オプション型は試せていない)

気をつける所

Cargo.tomlの

[[bin]]
name = "bootstrap"

この部分、buildされたバイナリのファイル名がbootstrapじゃないとエラーになる。

実行時間

最安プランになっている様子。これ以上高速化しても安くならない・・?

この開発によって作ったもの

モコあきさんが2001年にリリースしたWindowsアプリのロリコンバータをリメイクしたものを作りました
https://nacika.com/loliconv/

カテゴリー: Rust

actixを試す

この記事は nacika.com Rust記事 アドベントカレンダー Advent Calendar 2018 – Adventar の1日目の記事です。
日付跨いじゃってるけど・・・。

早速、actix/actix: Actor framework for Rust を試しました。

nacika-ins/actix-sample

使った感じ

現状だと、特に各アクターでスレッドを作ってくれるわけではないようで、どこかのアクターでloopを書いたりしてスレッドを専有してしまうと、他のアクターの処理が止まる。
panic!を書けばプロセスは落ちるし、エラーが発生してもプロセスごと落ちる。

impl Superviseddef restarting というメソッドがあり、エラーがあると呼ばれてリスタートするらしいんだけど、呼ばれない。。

メリットがありそうなところ

  • 耐障害性は、スレッドを作ってあげて処理すればなんとかなりそう。do_sendや、sendなどのメソッドは #[derive(Message)] をつけたものを送ればいいだけなので、複雑な所有権をあまり考えずに使えそうなところがよさそう。
  • スレッドループからもメッセージを送ることができるのでいい感じ。
  • アクターの変数も、メッセージ自体もミュータブルにすることができる。

今後使うか

正直、Rust言語の複雑な部分をActorでまとめることができてコード自体も簡潔にかける部分が良いので、今後使っていきたい。

カテゴリー: Rust

docker-ceがUbuntu16.04.2 LTSに入らないとき

wget http://launchpadlibrarian.net/236916213/libltdl7_2.4.6-0.1_amd64.deb
sudo dpkg -i libltdl7_2.4.6-0.1_amd64.deb
sudo add-apt-repository ppa:ubuntu-sdk-team/ppa
sudo apt-get update
sudo apt-get install docker-ce

これでいいみたい。外部のdebパッケージ入れてるみたいなので取扱要注意。

参考とソース元:
ubuntu16.04 安装docker-ce,解决libltdl7版本过低的问题。 – 简书
docker-ce : Depends: libseccomp2 (>= 2.3.0) but 2.2.3-3ubuntu3 is to be installed

起動中のDockerコンテナ内にホストのDNSサーバーを登録する

基本的に異なるDockerコンテナ内でDNSサーバを使う場合は、こちらに書かれているように –link や –dns を使うとよいでしょう。

もしも、この–linkや–dnsを設定し忘れたりした場合に簡単にDNSサーバーを登録する方法をご紹介します。

docker ps -q | xargs -I{} docker exec -i {} sh -c 'echo "nameserver (ここにDNSサーバのIP)" >> /etc/resolv.conf'

はい、お疲れ様でした。
DNSサーバに関してはこちらがおすすめです。

dnsmasqで始めるプライベートDNSサーバ – GeekFactory

なんと! Dockerホストに入れさえすれば、ホストの /etc/hostsを見てくれるようになります。

AWS Lightsail向けのマストドン構築用Ansibleレシピ作ったよ

AWS LightsailというVPS

最近コスパがすごくよくて、立ち上げも簡単なAWS LightsailというVPSがあります。
AWSアカウントがあれば、めんどうなロードバランサの設定やVPCの設定、固定IPの発行も楽に行うことが出来ます。

Ansibleスクリプト

スクリプトはこちらです。

https://github.com/nacika-ins/ansible-mastodon-amznlinux

localhost用になっているので、Lightsail内で実行してみてください。
Amazon Linux 2018.03.0 に対応しています。

途中、certbotの設定などでスクリプトがとまることがあるので、そのときは手動実行をします。

[v2.5.2対応] Macでマストドンの開発環境構築

参考: Vagrant や Docker を使わずに macOS でマストドンの開発環境を構築する – Qiita

まずは開発ガイドラインを読もう

マストドン公式 開発ガイドライン
https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Development-guide.md

.env.productionの修正

マストドンのソースが手元にある状態にしてまず最初にやるのがこのファイルの編集です。
下記の部分を変更していきます。

LOCAL_DOMAIN

localhost:3000

SECRET_KEY_BASE と OTP_SECRET

docker-compose run --rm -e RAILS_ENV=production web bundle exec rake secret

を二回叩いてちゃちゃっと設定します。

VAPID_PRIVATE_KEY と VAPID_PUBLIC_KEY

docker-compose run --rm web rake mastodon:webpush:generate_vapid_key

を一度だけ実行してコピペして貼り付けます。

SINGLE_USER_MODE

おひとりさまインスタンスにしたいときは

SINGLE_USER_MODE=true

複数アカウント作りたいときは

SINGLE_USER_MODE=false

にします。

アカウント新規作成画面やログイン画面にアクセスしようとするとID1番のユーザーのページに飛ぶ挙動になります。

DEFAULT_LOCALE

ja

日本語を使うので日本にします。

SMTP関係

SMTP_SERVER=localhost
SMTP_PORT=587
SMTP_LOGIN=
SMTP_PASSWORD=
SMTP_FROM_ADDRESS=notifications@example.com

使わないのでこうします。

compileをwebpacker-dev-server経由にする

sed -i 's/compile: true/compile: false/' config/webpacker.yml

rubyのインストール

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd ~/.rbenv && src/configure && make -C src
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
# 一度ここでシェルをログインし直す
cd ~/ws/mastodon
RUBY_VERSION=`cat .ruby-version`
echo $RUBY_VERSION
rbenv install $RUBY_VERSION
rbenv rehash
rbenv global $RUBY_VERSION
ruby -v

yarnのインストール

npm i -g n
n stable
npm -v
node -v
npm i -g yarn # brew install yarn でも良いかも

必要ライブラリのインストール

brew install autoconf ffmpeg gcc gdbm imagemagick libffi libidn libxml2 libxslt libyaml openssl pkg-config protobuf readline postgresql

ライブラリを個別インストール

CUR_RUBY_VERSION=`rbenv version | awk '{print $1}'`
echo $CUR_RUBY_VERSION
IDN_VERSION=`idn --version | head -n 1 | awk '{print $4}'`
echo $IDN_VERSION
NOKOGIRI_VERSION=`grep nokogiri Gemfile | egrep -ioh '[0-9\.]+'`
echo NOKOGIRI_VERSION
gem install nokogiri -v "$NOKOGIRI_VERSION" -- --use-system-libraries --with-xml2-include=/usr/local/opt/libxml2/include/libxml2
gem install idn-ruby -- --with-idn-dir=/usr/local/Cellar/libidn/$IDN_VERSION
## cld3のインストールがうまくいかないときは https://github.com/akihikodaki/cld3-ruby#openbsd こちらを試す
gem install cld3

postgres初期化と起動

pg_ctl -D /usr/local/var/postgres start
initdb /usr/local/var/postgres -E utf8
brew services start postgresql

yarn install

yarn install

db:migrate

RAILS_ENV=development rake db:migrate

bundle install

gem install bundler
rbenv rehash
bundle install

高確率でcld3がエラーとなる。こちらを試そう。

install redis

brew install redis
brew services start redis

Railsサーバー起動

RAILS_ENV=development bundle exec rails server

Webpackサーバー起動

RAILS_ENV=development NODE_ENV=development ./bin/webpack-dev-server --listen-host 0.0.0.0

sidekiq 起動

env PORT=3000 RAILS_ENV=development bundle exec sidekiq

streaming 起動

env PORT=4000 NODE_ENV=development RAILS_ENV=development yarn run start

admin作成

> 管理画面からアカウントを作成する
RAILS_ENV=development rails mastodon:confirm_email USER_EMAIL=admin@example.com
RAILS_ENV=development rails mastodon:make_admin USERNAME=admin
RAILS_ENV=development rails mastodon:confirm_email USER_EMAIL=guest@example.com
RAILS_ENV=development rails mastodon:make_admin USERNAME=guest

Macの開発環境でcld3-rubyがコンパイルできない時の対処法

Mastodonでは、 cld3-rubyをがっつり使っているために、これがないとまともに動かない。
実はこの対処方法、公式に載っている。

"pkg-config --exists protobuf"
| pkg-config --libs protobuf
=> "-L/usr/local/Cellar/protobuf/3.6.1/lib -lprotobuf -pthread\n"
"clang -o conftest -I/Users/user/.rbenv/versions/2.5.1/include/ruby-2.5.0/x86_64-darwin17 -I/Users/user/.rbenv/versions/2.5.1/include/ruby-2.5.0/ruby/backward -I/Users/user/.rbenv/versions/2.5.1/include/ruby-2.5.0 -I. -I/Users/user/.rbenv/versions/2.5.1/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -Wno-error=shorten-64-to-32 -pipe conftest.c -L. -L/Users/user/.rbenv/versions/2.5.1/lib -L. -L/Users/user/.rbenv/versions/2.5.1/lib -fstack-protector -L/usr/local/lib -lruby.2.5.1-static -framework Foundation -lpthread -ldl -lobjc "
ld: warning: text-based stub file /System/Library/Frameworks//Foundation.framework/Foundation.tbd and library file /System/Library/Frameworks//Foundation.framework/Foundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/Versions/A/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/Versions/A/CoreFoundation are out of sync. Falling back to library file for linking.
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: int main(int argc, char **argv)
4: {
5: return 0;
6: }
/* end */
"clang -o conftest -I/Users/user/.rbenv/versions/2.5.1/include/ruby-2.5.0/x86_64-darwin17 -I/Users/user/.rbenv/versions/2.5.1/include/ruby-2.5.0/ruby/backward -I/Users/user/.rbenv/versions/2.5.1/include/ruby-2.5.0 -I. -I/Users/user/.rbenv/versions/2.5.1/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -Wno-error=shorten-64-to-32 -pipe conftest.c -L. -L/Users/user/.rbenv/versions/2.5.1/lib -L. -L/Users/user/.rbenv/versions/2.5.1/lib -fstack-protector -L/usr/local/lib -lruby.2.5.1-static -framework Foundation -L/usr/local/Cellar/protobuf/3.6.1/lib -lprotobuf -pthread -lpthread -ldl -lobjc "
ld: warning: text-based stub file /System/Library/Frameworks//Foundation.framework/Foundation.tbd and library file /System/Library/Frameworks//Foundation.framework/Foundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/Versions/A/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/Versions/A/CoreFoundation are out of sync. Falling back to library file for linking.
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: int main(int argc, char **argv)
4: {
5: return 0;
6: }
/* end */
| pkg-config --cflags-only-I protobuf
=> "-I/usr/local/Cellar/protobuf/3.6.1/include\n"
| pkg-config --cflags-only-other protobuf
=> "-pthread\n"
| pkg-config --libs-only-l protobuf
=> "-lprotobuf\n"
package configuration for protobuf
cflags: -pthread
ldflags: -L/usr/local/Cellar/protobuf/3.6.1/lib -pthread
libs: -lprotobuf

公式リポジトリに書いてあった

これをやるだけでした。

[v2.5.2対応] Dockerでらくらく!マストドンの開発環境構築

タイトルは釣りです。Dockerが入っている環境前提での作業環境構築の備忘録です。

参考: Vagrant や Docker を使わずに macOS でマストドンの開発環境を構築する – Qiita

Docker使わない版も用意しました!

Docker使わない環境構築はこちら

まずは開発ガイドラインを読もう

マストドン公式 開発ガイドライン
https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Development-guide.md

.env.productionの修正

マストドンのソースが手元にある状態にしてまず最初にやるのがこのファイルの編集です。
下記の部分を変更していきます。

LOCAL_DOMAIN

localhost:3000

SECRET_KEY_BASE と OTP_SECRET

docker-compose run --rm -e RAILS_ENV=production web bundle exec rake secret

を二回叩いてちゃちゃっと設定します。

VAPID_PRIVATE_KEY と VAPID_PUBLIC_KEY

docker-compose run --rm web rake mastodon:webpush:generate_vapid_key

を一度だけ実行してコピペして貼り付けます。

SINGLE_USER_MODE

おひとりさまインスタンスにしたいときは

SINGLE_USER_MODE=true

複数アカウント作りたいときは

SINGLE_USER_MODE=false

にします。

アカウント新規作成画面やログイン画面にアクセスしようとするとID1番のユーザーのページに飛ぶ挙動になります。

DEFAULT_LOCALE

ja

日本語を使うので日本にします。

SMTP関係

SMTP_SERVER=localhost
SMTP_PORT=587
SMTP_LOGIN=
SMTP_PASSWORD=
SMTP_FROM_ADDRESS=notifications@example.com

使わないのでこうします。

docker-compose.ymlの編集

web

command: tail -f /mastodon/README.md
volumes: - ./:/mastodon
ports: - "127.0.0.1:3000:3000"

commandの行を書き換えておきます。
こうすることで、コンテナが落ちなくなります。
volumesはソースファイルをコンテナ内外から直接編集できるようにするためです。

ここまできたら

docker-compose up -d

で起動します。

コンテナに入るには、

docker-compose exec web bash

これで入ります。

rootで入りたい場合は、

docker-compose exec --user root web bash

で入ります。

migrate

dbのセットアップをします。

docker-compose run -e RAILS_ENV=development --rm web rake db:migrate

これだけでOK。

[webコンテナ内] yarn

yarn
yarn install --dependencies
yarn add webpack-dev-server --dependencies

基本的にはyarnだけでOKですが、トラブルシュート的に3行

[webコンテナ内] development許可

sed -i 's|BUNDLE_WITHOUT: "test:development"||g' /usr/local/bundle/config

[webコンテナ内] Rails側でアセットのコンパイルをしない

sed -i 's/compile: true/compile: false/' config/webpacker.yml

[webコンテナ内] bundle install

bundle install

[webコンテナ内] webpacker:install

RAILS_ENV=development rails webpacker:install

不要かもしれませんが念の為・・・。
全てnで解答します。

[webコンテナ内] 環境設定

echo 'export RAILS_ENV=development' >> ~/.bashrc
echo 'export NODE_ENV=development' >> ~/.bashrc
source ~/.bashrc

[webコンテナ内] rails起動

RAILS_ENV=development bundle exec rails server

[webコンテナ内] webpack –watch起動

vim config/webpack/development.js

してから、

watchOptions: { poll: 1000
}

を追加、これで1秒ごとにファイルの変更を監視します。

NODE_ENV=development RAILS_ENV=development yarn build:development --watch

こちらで監視のスタートとアセットのコンパイルをするようになります。
差分変更に対応しているのでファイル変更時はコンパイルが早いです。

localhost:3000にアクセス

http://localhost:3000 にアクセスして起動していることを確認します。

[webコンテナ内] admin作成

まずはじめに、管理画面からアカウントを作成します。

RAILS_ENV=development rails mastodon:confirm_email USER_EMAIL=admin@example.com
RAILS_ENV=development rails mastodon:make_admin USERNAME=admin

[webコンテナ内] alpine linuxの環境改善

docker-compose exec --user root web bash

でrootでログイン後、

apk update
apk add --update alpine-sdk
apk add vim tmux wget curl lsof tree sudo

を実行しておくと使いやすくなると思います。

LiveReload

コンテナの外での作業です。ファイルが変更されたら、自動的にブラウザをリロードします。
LiveReload というChrome拡張をインストールします。

livereload本体は、下記URLの手順でインストールします。

Winの場合: http://livereload.com/
Macの場合: http://macappstore.org/livereload/

Mac版は App Storeでは有料ですが、それ以外のインストール手段では無料です。npm版もあります。

アセットコンパイルに時間がかかるので3秒後にブラウザをリロードするようにしてlivereloadを起動します。

livereload . --wait 3000

1分でわかるMastodon入門

この記事は、はじめてMastodonを始めようとしている人のための記事です。

インスタンスの選び方

マストドン流速計 というサイトがあります。 このサイトでは、インスタンスがアクティブな順で並んでいるのでインスタンスを選びやすいです。

各リンクからはローカルタイムラインの(インスタンスの中のタイムラインのこと)を覗き見ることができるので、インスタンスの雰囲気をアカウントを作らなくても知ることが出来ます。

アプリ

アプリは、様々な種類があります。

Tootdon

対応OS: iOS, Android

音声読み上げにも対応している安定しているクライアントです。

Pawoo

iOS: https://itunes.apple.com/jp/app/id1229070679
Android: https://play.google.com/store/apps/details?id=jp.pxv.pawoo&hl=ja

Pixivが作ったマストドンクライアントアプリです。

friends.nico

iOS: https://itunes.apple.com/jp/app/friends-nico/id1230158182?mt=8
Android: https://play.google.com/store/apps/details?id=nico.friends.android&hl=en

ドワンゴが開発したマストドンクライアントアプリです。

SubwayTooter

対応OS: Android

Androidのみですが、人気が高いクライアントアプリです。開発者自身も積極的にマストドンを利用しているようです。
マルチカラムタイムラインが非常に良い。

Tusky

対応OS: Android

使い勝手が良いマストドンのクライアントアプリです。
Androidで軽快に動作します。

Tootle

対応OS: iOS

なかなかこちらも人気のクライアントアプリで名前がよく出てきます。
色のカスタマイズが可能。

ニュース系アカウント

マストドンは、自分が参加しているインスタンス以外の投稿も連合タイムラインから流れてきます。
そこからおすすめのアカウントを紹介していきます。

地震・津波情報

全国の震度1以上の地震をお知らせしてくれます。

RSS Feeeder/LTL News

・JPNIC
・週刊アスキー
・Cisco
・WWW.BLUECORE.NET
・Yahooニュース/地方&IT
・CNET ネットワーク・ブログ
・Homenoc Operator’s Group
のニュースが流れていきます。

ねとらぼ(RSSfeed)

ITMediaのねとらぼの新着ニュースが流れます。

ニュース速報

普通のニュースが流れています。

NHK NEWS(非公式)

NHK NEWSのリンクが流れます。

hotentry

はてなブックマークのホッテントリが流れます。

画像収集

マストドン検索ポータルで Pawoo を検索するといったスタイルで画像検索ができるようです。
ここからお気に入りの絵描きさんをフォローしたりすることができます。

リモートフォローの仕方

検索窓に、フォローしたいアカウントのURLを入れるとフォローすることができます。