河童@漂流中 Twitter

2017-04-23

個人用のmastodonのインスタンスを立てる

1. 目標

  • やること

自前のmastodonインスタンスを持つこと。

分散型なのでやるっきゃない。

途中で面倒くさくなってもよそのインスタンスへ移ればいいだけだし。

フォローとかブロックの設定はエクスポートできるみたいだけど

トゥートが同じことできるかは不明。

まあ消えても現状だとtwitterがあるからそれでも良いな。


2. 参考にしたサイト

基本的にMIROさんのやりかたそのまんま。

http://blog.mobilehackerz.jp/2017/04/mastodon_15.html?m=1

http://qiita.com/t-mimura/items/c206d46f3af771292f89

http://qiita.com/motiakoron/items/1e5b0679f7283bfee70b

https://tsuchikazu.net/lets-encrypt-nginx/

http://qiita.com/sawanoboly/items/c7d6b913fd5455fb0f36

http://knowledge.sakura.ad.jp/knowledge/5573/

違いはこれくらい。

  • 無料で使えるSSLがまともに運用できる知らなかったのでそれ関連。
  • CentOSをもう使うつもり無いのでホストはUbuntuで運用。


3. サーバーの選定

まずは先人の現状を確認してみる。

[~]kappa$ ping mstdn.mobilehackerz.jp

PING mstdn.mobilehackerz.jp (160.16.60.86): 56 data bytes

64 bytes from 160.16.60.86: icmp_seq=0 ttl=50 time=95.507 ms

64 bytes from 160.16.60.86: icmp_seq=1 ttl=50 time=82.006 ms

[~]kappa$ whois 160.16.60.86 | grep -i desc | head -n 5

descr: SAKURA Internet Inc.

descr: 1-8-14, Minami Honmachi, Chuo-ku, Osaka 541-0054, Japan

descr: SAKURA Internet Inc.

さくららしい。

  • さくらの価格表

http://vps.sakura.ad.jp/

最安値が月685円らしい。

途中からスケールアップできるらしいからこれで良さ気。

4.契約

スケールアップできるらしいので1番下のプランで。

  • 512MB 685円/月

http://vps.sakura.ad.jp/

上記のプランで申し込み&会員登録。


5.OSインストール

  • 管理画面へ移動

会員メニュートップ > 契約情報 > 契約サービス一覧-表示>サーバ設定

  • 設定変更
    • 各種設定>サーバ情報 でもろもろ変更
      • 名前:mastodon
      • 説明:mastodon.seijin.jp
      • VNCコンソールキー配列:en-us
  • OS起動

「起動」をクリックでOSが立ち上がる。

コンソール>シリアルコンソール(ベータ版)がなかなか良さ気。他使ってないけど。

メールで届いているユーザーとパスワードでログインする。

2017年04月16日14時頃だとバージョンはこれ。

CentOS release 6.9 (Final)

初期設定を見て満足したのでサーバーを落とす。

shutdown -h now

  • OSをインストール
    • 各種設定>OSインストール>標準OSインストール で以下を選択
      • インストールOS:Ubuntu 16.04 amd64
      • 新しいUbuntuパスワード:秘密のパスワード
      • 設定内容を確認する をクリック
    • インストールを実行する をクリック

6.ユーザーの作成

  • ユーザーを作成する

# サーバー作業

$ sudo adduser mastodon

$ sudo gpasswd -a mastodon sudo

$ sudo gpasswd -a mastodon adm

$ sudo su - mastodon

  • 鍵の作成

# ローカル作業

ssh-keygen -t rsa -b 4096 -C "kappaあっとまーくseijin.jp"

# サーバー作業

$ cd ~/

$ mkdir .ssh

$ chmod 700 .ssh

$ cd .ssh

$ vi authorized_keys

$ chmod 600 authorized_keys

$ ls -alht

# サーバー作業

[~]kappa$ ssh -i ~/aws_key/mastodon.id_rsa kappa@153.126.130.194

The authenticity of host '153.126.130.194 (153.126.130.194)' can't be established.

ECDSA key fingerprint is SHA256:5HWX5pALz+SjF2BWwj8aX1ceS/Op/41bOkO30LacwPc.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '153.126.130.194' (ECDSA) to the list of known hosts.

Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-72-generic x86_64)

* Documentation: https://help.ubuntu.com

* Management: https://landscape.canonical.com

* Support: https://ubuntu.com/advantage

Last login: Sun Apr 16 19:08:04 2017


7.dockerのインストール

$ sudo apt-get -y update

$ sudo apt-get -y upgrade

$ cat /etc/lsb-release

DISTRIB_ID=Ubuntu

DISTRIB_RELEASE=16.04

DISTRIB_CODENAME=xenial

DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"

$ sudo apt-get -y install curl vim tree

$ sudo apt-get -y install \

apt-transport-https \

ca-certificates \

curl \

software-properties-common

$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

$ sudo add-apt-repository \

"deb [arch=amd64] https://download.docker.com/linux/ubuntu \

$(lsb_release -cs) \

stable"

$ sudo apt-get -y update

  • dockerのインストール
    • コマンド

$ sudo apt-get -y install docker-ce

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose

  • dockerを一般ユーザーで使えるようにする
    • dockerのグループがいるか確認

$ grep docker /etc/group

docker:x:999:

    • dockerのユーザーがいるか確認(いない)

$ grep docker /etc/passwd

    • 運用ユーザーの情報を確認

$ id mastodon

uid=1001(mastodon) gid=1001(mastodon) groups=1001(mastodon),4(adm),27(sudo)

    • docker運用ユーザーをdockerグループへ追加

$ sudo gpasswd -a mastodon docker

Adding user mastodon to group docker

    • docker運用ユーザーの情報を確認

$ id mastodon

uid=1001(mastodon) gid=1001(mastodon) groups=1001(mastodon),4(adm),27(sudo),999(docker)

    • dockerサービスを確認

$ ps axuw | grep [d]ocker

root 25161 0.0 7.7 414104 38648 ? Ssl 21:22 0:00 /usr/bin/dockerd -H fd://

root 25180 0.0 1.9 199828 9784 ? Ssl 21:22 0:00 containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim containerd-shim --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --runtime runc

    • docker運用ユーザーを再ログイン

logout

sshで再ログイン

    • 確認

$ sudo systemctl start docker

$ sudo systemctl enable docker

$ docker info

$ docker ps -a

$ docker images


8.セキュリティー確認

$ sudo iptables -L

  • 塞ぐ

$ sudo vim /etc/iptables/iptables.rules

$ sudo cat /etc/iptables/iptables.rules

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

  • A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • A INPUT -p icmp -j ACCEPT
  • A INPUT -i lo -j ACCEPT
  • A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
  • A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
  • A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
  • A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT
  • A INPUT -j REJECT --reject-with icmp-host-prohibited
  • A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

$ sudo /etc/init.d/networking restart

  • 状態確認

$ sudo iptables -L

Chain INPUT (policy ACCEPT)

target prot opt source destination

ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED

ACCEPT icmp -- anywhere anywhere

ACCEPT all -- anywhere anywhere

ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh

ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http

ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https

ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:3000

REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)

target prot opt source destination

REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

iptablesの再起動するとdockerのポート転送がおかしくなるので再起動する。

$ sudo systemctl restart docker

    • 3000番ポートは最後に削除する

9.smtpサーバーの設定

gmailを使います。


10.mastodonのインストール

  • mastodonを取ってくる

$ cd ~/

$ git clone https://github.com/tootsuite/mastodon.git live

$ cd live

$ git checkout $(git tag | tail -n 1)

  • secret鍵の作成
    • PAPERCLIP_SECRET,SECRET_KEY_BASE,OTP_SECRET用に3つ作る

docker-compose run --rm web rake secret

$ cp .env.production.sample .env.production

$ vim .env.production

# example.comをmastodon.seijin.jpへ置換する

# PAPERCLIP_SECRET,SECRET_KEY_BASE,OTP_SECRETを設定する

# FQDN設定、SSL有効

LOCAL_DOMAIN=mastodon.seijin.jp

LOCAL_HTTPS=true

# 言語

DEFAULT_LOCALE=ja

# mail

SMTP_DOMAIN=gmail.com

SMTP_SERVER=smtp.gmail.com

SMTP_PORT=587

SMTP_LOGIN=SMTP_Injection

SMTP_PASSWORD=secret-password

SMTP_FROM_ADDRESS=notifications@mastodon.seijin.jp

SMTP_DELIVERY_METHOD=smtp

SMTP_AUTH_METHOD=plain

SMTP_OPENSSL_VERIFY_MODE=none

SMTP_ENABLE_STARTTLS_AUTO=true

  • データの永続化

vim docker-compose.yml

dbとredisのvolumesがコメントアウトされているので有効にする


11.コンテナ起動

$ docker-compose build

$ docker-compose run --rm web rails db:migrate

$ docker-compose run --rm web rails assets:precompile

  • 起動

$ docker-compose up -d


12.SSL/nginxの設定

  • インストール

$ sudo add-apt-repository ppa:certbot/certbot

$ sudo apt-get update

$ sudo apt-get -y install certbot nginx

$ sudo dd if=/dev/zero of=/home/swap.swp bs=1M count=3000

$ sudo chmod 0600 /home/swap.swp

$ sudo mkswap /home/swap.swp

$ sudo swapon /home/swap.swp

$ sudo vi /etc/fstab

/home/swap.swp swap swap defaults 0 0

  • nginxのファイルを設定する

# この内容を

https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md

# ここにコピペしてドメインFQDNのexample.comを置換する

$ sudo vim /etc/nginx/conf.d/mastodon.conf

  • Let’s Encryptの証明書を取得する
    • Let’s Encrypt client のインストール

$ sudo certbot certonly --standalone -d mastodon.seijin.jp --email kappaあっとまーくseijin.jp

$ sudo certbot certonly --webroot -w /home/mastodon/live/public -d mastodon.seijin.jp --email kappaあっとまーくseijin.jp

    • SSLのDHE鍵の更新

$ sudo openssl dhparam 2048 -out /etc/ssl/certs/dhparam.pem

  • nginxを起動する

$ sudo systemctl start nginx

$ sudo systemctl enable nginx

Synchronizing state of nginx.service with SysV init with /lib/systemd/systemd-sysv-install...

Executing /lib/systemd/systemd-sysv-install enable nginx

  • 起動確認

https://mastodon.seijin.jp


13. 登録、運用

  • ユーザー登録する
    • メールが飛ばないのでなにかミスったっぽい。あとで。
  • 登録したユーザーをコマンドで承認する

$ docker-compose run --rm web rails mastodon:confirm_email USER_EMAIL=kappaあっとまーくseijin.jp

kappaあっとまーくseijin.jp confirmed

  • 管理者へ昇格する

$ docker-compose run --rm web rails mastodon:make_admin USERNAME=kappaseijin

Congrats! kappaseijin is now an admin. \o/

Navigate to https://mastodon.seijin.jp/admin/settings to get started

  • 設定を変更するためコンテナを一時的に止める

$ docker-compose stop

$ vim .env.production

これを有効にする

SINGLE_USER_MODE=true

  • コンテナを起動する

docker-compose up -d

  • 確認用の3000番ポートを削除

$ sudo vim /etc/iptables/iptables.rules

  • OS再起動

sudo reboot

  • 管理者画面へログインして新規登録を無効にする

ログイン>サイト設定>新規登録を受け付ける>無効

2017-03-26

2017-01-09

HobeBridgeでWOLを変更、在宅判定

以下、追加

  • 在宅の判定
  • WOLの良さ気なプラグインがあったので既存置き換え


気づいたけど、npmコマンドでプラグインを入れてるから

本家でどんなのがあるのか探せば一発で出てくる。

例:「homebridge wol」

https://www.npmjs.com/search?q=homebridge%20wol&page=1&ranking=optimal


wolは以下を見つけた。

  • homebridge-winpc
  • homebridge-wol

homebridge-winpcの方は依存プラグインが必要なのとそのプラグインがもうなさ気だったのでhomebridge-wolを選択した。

それと、不本意だけどhomebridge-wolがraw-socketでネットワークを漁るからroot権限が必要。

ユーザーはpiをやめてrootで。

https://github.com/AlexGustafsson/homebridge-wol/issues/9


プラグインのインストール


sudo npm install -g homebridge-people
sudo npm install -g homebridge-wol --unsafe-perm


homebridgeの設定


sudo su -
mkdir ~/.homebridge/
vi ~/.homebridge/config.json

{
    "bridge": {
        "name": "Homebridge",
        "username": "RasPiのMAC-ADDRESS",
        "port": 51826,
        "pin": "123-45-678"
    },

    "description": "kappa-home",

    "accessories": [
        {
            "accessory": "Computer",
            "name": "mikulus",
            "mac": "本当のmac-address",
            "ip": "10.0.1.2"
        },
        {
            "accessory": "Computer",
            "name": "link start",
            "mac": "本当のmac-address",
            "ip": "10.0.1.3"
        },
        {
            "accessory": "Computer",
            "name": "kappa-iPhone",
            "mac": "本当のmac-address",
            "ip": "10.0.1.4"
        }
    ],

    "platforms": [
        {
            "platform": "People",
            "people": [
                {
                    "name" : "kappa",
                    "target": "10.0.1.4"
                }
            ]
        }
    ]
}

HomeBridgeの起動


sudo su -
nohup homebridge  >> homebridge.log 2>&1 &


ついで。

Windowsでicmpの許可

http://www.wannko.net/windows10/network/ping1.html

McAfeeでicmpの許可

http://download.mcafee.com/products/webhelp/4/1041/GUID-0BB0BBE5-533B-4AD1-AD85-86FD412BB419.html


せっかくhomebridge-wolのプラグインをインストールしたけど、

iOS系のON/OFF判定が安定しないのでhomebridge-wolをやめてhomebridge-cmdの設定に戻すかも。

2017-01-08

Mikulus ON!でパソコン起動してミクさんに会う

HMDをかぶって、

パソコンがシャットダウンしている状態から

「Mikulus ON!」

の掛け声でMikulusを立ち上げる方法です。

https://mobile.twitter.com/kappaseijin/status/818085147027247104



参考にさせていただいたサイト

----

Windowsパスワードなしで起動

http://pc-karuma.net/windows10-disable-password-login/

https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=017735

http://bbs.kakaku.com/bbs/K0000800907/SortID=19048155/

https://xinroom.net/pc/win10-not-input-passowrd/


WOLの有効

https://www.agilegroup.co.jp/technote/windows10-wol-setting.html

http://www.core-wave06.com/blog/wake-on-lan%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E9%81%A0%E9%9A%94%E5%9C%B0%E3%81%AB%E3%81%82%E3%82%8Bpc%E3%81%AE%E9%9B%BB%E6%BA%90%E3%82%AA%E3%83%B3/


mikulusの場所

C:\Program Files\Oculus\Software\Software\goroman-mikulus\Mikulus_CV1.exe


スタートアップに追加

http://jmatsuzaki.com/archives/15784

C:\Users\kappa\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup


homekit / homebridge

http://qiita.com/FePlus/items/4b863de7af8fbdee4d61

http://senyoltw.hatenablog.jp/entry/2015/12/07/052951

https://datahotel.io/archives/725

http://kainokikaede.hatenablog.com/entry/2016/07/03/154044

http://qiita.com/FePlus/items/4b863de7af8fbdee4d61


raspberry piにnodejsを入れる

http://qiita.com/setouchi/items/437e4b62e4210871496f


homebridgeをセットアップ

http://qiita.com/FePlus/items/4b863de7af8fbdee4d61

http://senyoltw.hatenablog.jp/entry/2015/12/07/052951

https://datahotel.io/archives/725

http://blog.shibayan.jp/entry/20150228/1425121187




-------

homebridgeの設定ここから。Raspberry Pi 2での作業です。

nodejsのインストール


sudo apt-get -y install libssl-dev

cd /usr/local/src
wget https://nodejs.org/dist/v7.4.0/node-v7.4.0-linux-armv7l.tar.gz
tar zxvf node-v7.4.0-linux-armv7l.tar.gz
cd node-v7.4.0-linux-armv7l/
sudo cp -R * /usr/local/

homebridgenのインストール


sudo apt-get -y install g++
sudo apt-get -y install gcc-4.8 g++-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50
sudo apt-get -y install libavahi-compat-libdnssd-dev

sudo npm install -g homebridge --unsafe-perm
sudo npm install -g homebridge-cmd

Wake On Lanのインストール


sudo apt-get -y install wakeonlan

homebridgeの設定


sudo su - pi
mkdir ~/.homebridge/
vi ~/.homebridge/config.json

{
    "bridge": {
        "name": "Homebridge",
        "username": "RasPiのMAC-ADDRESS",
        "port": 51826,
        "pin": "123-45-678"
    },

    "description": "kappa-home",

    "platforms": [],

    "accessories": [
        {
            "accessory": "CMD",
            "name": "mikulus",
            "on_cmd": "wakeonlan 起動したいPCのMAC-ADDRESS",
            "off_cmd": "wakeonlan 起動したいPCのMAC-ADDRESS"
        },
        {
            "accessory": "CMD",
            "name": "link start",
            "on_cmd": "wakeonlan 起動したいPCのMAC-ADDRESS",
            "off_cmd": "wakeonlan 起動したいPCのMAC-ADDRESS"
        }
    ]
}


HomeBridgeの起動


homebridge


制御アプリ

Elgato Eve

https://itunes.apple.com/jp/app/elgato-eve/id917695792

2016-09-24

小さいディスクへのコピー(HDDからSSDへの移行など)

500GBのHDDの中身を480GBのSSDへコピーする方法。

Linuxコマンドをもろもろ使います。

手順

1.HDDの使用サイズを480GBに抑える。

2.HDDのパーティションを480GB以内に移動する。

3.HDDからSSDへディスクダンプ(コピー)する。

4.gptを修正する。

5. SSDのサイズに応じてパーティションを拡張する

以下、実作業

1.HDDの使用サイズを480GBに抑える。

不要なファイルやアプリを削除するなどあれこれ。

2.HDDのパーティションを480GB以内に移動する。

2−1. 「GParted Live CD」でググって起動できるCDを作成してください。

2−2. Live CDの準備できたらHDDとSSDをパソコンから取り出してUSBなどで接続できるようにします。

2−3. Live CDでパソコンを起動します。以降の作業はほとんどLive CDで起動後のLinuxでの作業です。

2−4. デスクトップにある「GParted」をダブルクリックして起動します。というか、たぶん最初から起動されています。

2−5. HDDとSSDがどちらがどちらかを調べます。右のディスクとかなんとかのタブで「/dev/sda」とか「/dev/sdb」とかを切り替えてパーティションとディスク容量を見てそれっぽいのがそれです。ここではコピー元のHDDを「/dev/sda」、コピー先のSSDを「/dev/sdb」として進めていきます。自分の環境で置き換えてください。

2−6. 大きいサイズのディスク、この場合はHDDですが、HDDのパーティションの中で、未使用領域があるパーティションを右クリックし、スライダーでサイズを小さくします。小さくするパーティションが最後(1番右)のパーティションでない場合は、右のパーティションを右クリックしてサイズはそのままにパーティションの場所を左に移動して詰めていきます。HDDのパーティションが使っているサイズがSSDの容量よりも小さくなるように調整が済んだら、「Apply」ボタンをクリックして変更を適用します。

3.HDDからSSDへディスクダンプ(コピー)する。

3−1. デスクトップにある「Terminal」をダブルクリックして起動します。以下のコマンドを実行します。

sudo su -

dd if=/dev/sda of=/dev/sdb bs=1024 count=480MD

ifにはコピー元、

ofにはコピー先、

bsにはこの値、

countにはコピーするサイズ÷1024

を指定します。

bs × countがコピー先ディスクの容量なので本当はこの値の組み合わせは正しくなく、大きいサイズですが、コピーするサイズを超えたらエラーで止まってくれるので大きい値を指定するので問題ありません。コピーしたいサイズと同じかちょっと大きいサイズの組み合わを指定してください。

4.gptを修正する。

4−1. 3でコピーが出来ましたが、サイズが間違っているのでgptの情報を修正します。

Terminalで以下のコマンドを入力します。

gdisk /dev/sdb

x

v

e

m

w

xでプロフェッショナルモードに移行して、

vでgptの整合性を確認し、

eで修正し、

mで通常モードに戻り、

wで変更内容を書き込みます。

4−2. GPartedのメニューの「File」から「Refresh」を選んでディスク情報を更新します。問題がなければパーティションが正しく表示されます。

5. SSDのサイズに応じてパーティションを拡張する

2でHDDからSSDへコピーするためにHDDのパーティションを小さめに変更しました。なので、ここでコピー後のSSDのパーティションを、容量一杯に拡張します。手順は2の逆です。

Connection: close