Mastodon on Ubuntu 18.04 amd64 さくらのVPS

基本的には Installation ページのコマンドをコピペでよいのだけれど、いくつか嵌まったポイントがあるのでメモしておく。

Ruby のバージョンが違う

ドキュメントでは2019/05/04 16:37時点で 2.6.0 をインストールしているけれど、現在の最新 v2.8.1 が要求するのは 2.6.1 。ただし .ruby-version を書き換えてもいいみたいだ。

これはさくらのVPS固有の問題ではない。

DBのセットアップに失敗する

template1 の文字コード設定が en_US のため、 UTF8 のDBが作成できないもよう。

PostgreSQL: template1 のエンコーディングを UTF-8 に変更する - tkrdの日記を参考に、以下の通り実行する。

UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
DROP DATABASE template1;
CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UTF8'
  LC_COLLATE = 'C.UTF-8' LC_CTYPE = 'C.UTF-8';
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';

locale -a の結果によれば ja_JP 自体が存在しない。

Let's encrypt の HTTP-01 認証が通らない

nginx のデフォルト設定ファイル default があるため、 http サーバがそちらの設定で動いてしまう。

Redis 3 to 5

Mastodon のログを眺めていたら、 Sidekiq 6.x だかに Redix 3.x は古すぎだよって叱られていたので勢いに任せてアップグレードしてみた。OSは CentOS7 64bit 、もともとの Redis は 3.2.12 。

新しい Redis があると噂の Remi リポジトリをインストール
sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Remi リポジトリの Redis バージョンをチェック
yum info redis --enablerepo=remi
ついでに rubygem-redis も
yum info rubygem-redis --enablerepo=remi
Redis を使っているサービスであるところの Mastodon を止める
systemctl stop mastodon-*
Redis も念のため止めておく
systemctl stop redis
古い Redis をアンインストール
sudo yum remove redis
新しい Redis をインストール
sudo yum -y install redis --enablerepo=remi
systemctl enable redis
systemctl start redis
バージョンチェック
redis-cli -v
start してもうんともすんとも言わないと思っていたら disabled だったみたいだ
systemctl enable mastodon-*
systemctl start mastodon-*
active なら、おっけー!
systemctl status mastodon-*

最後に

よいこの皆は、バックアップを取ってから作業するんだぞ!

完全食 BASE RAMEN® おためしセット

完全食 BASE RAMEN® おためしセット

以前から興味があった BASE PASTA のラーメン版、 BASE RAMEN がリリースされたのでおためしセットを購入してみた。

茹で時間が長くて2分

2分というのはフェットチーネの場合で、今回わたしが購入した BASE RAMEN に至ってはスパゲッティ麺なので1分である。沸騰した湯さえあれば、すっと火を通して食べられる。忙しい朝にはぴったりだ。洗い物も、混ぜるだけ溶かすだけのスープやソースを使えば鍋と器、箸くらいで済むだろう。

もっちもちの食感

本当にもちもち。とにかく噛まないとって気にさせられる。

もしかしたら、後述する通り麺好きのわたしが啜れないほど表面がざらついているので、飲み込むことに恐怖があって、それでめちゃくちゃ噛んでいるのかもしれない。健康に悪い話ではないと思う。

あ、2018年12月時点でチアシードは粒じゃなくなってるようだ。ぷちぷちはなかった。

襲いかかる満腹感

とにかく噛むからかもしれない。食べ終わる前から満腹感がある。1食でじゅうぶん、物足りないなんてことない、と思わせてもらえる強さだ。

独特の風味

麺自体に穀物の味が強く付いている。味の濃い調理法や副菜とは相性の差が大きそうだ。……だからこそ、定期便にはレシピブックが付属するのかもしれない。

ラーメンスープとの組み合わせ

おためしセットに附属しているのは「ラーメン凪監修 すごい煮干しスープ」と「こってり濃厚 豚骨醤油スープ」。煮干しスープは醤油ベースなんだけど、商品画像から想像するより濃い。つまり、どちらもこってり系だ。

麺の表面がとてもざらついていてスープが絡み易いであろう特性を活かしたものと思われた。塩を入れずに茹でたのだけど、それでも、正直すこししょっぱいかなって思うくらいに味がついてたんだよ。 スープにもパンチがないと麺自体の味に負けそうで、そういうことでもあるんだろう。

油そばとか合いそうだ。鶏ガラは、よほど濃くないと危ないかもしれない。白湯とか。

まとめ

少しでも興味があるならおためしセットを頼めばよいと思う。百聞は一見にしかず、食べてみるのが手っ取り早い。

毎日毎食ラーメンでもよいわたしにとって、主食を完全食に変えられるというのは夢のようだ。健康診断の結果にいくつもの問題が並ぶようになった今、取り寄せる前は、よほどのことがない限り今後の主食にしようと思っていた。

そのわたしが、主食にするかどうか悩んでいる。そういう味と食感だ。どちらか片方だけなら、たぶん迷わなかった。

ただ、糖質をカットしながら麺を食べられるというのは変わらず魅力的な点である。罪悪感がない。

501 - Server cannot accept argument のとある解

IIS に同じマシンの FTP クライアントから繋ぐと何故か 501 - Server cannot accept argument が出る、というトラブルを調べてみた。
 
結果、その環境で使わざるを得ない、独自実装の FTP クライアントが犯人だった。
 
寡聞にして IIS 7.5 だけなのか FTP の仕様なのかは知らないのだが、少なくとも IIS は制御コネクションと違う IP 宛ての PORT コマンドを弾くらしい。
 
そしてこの IIS 7.5 において、この制御コネクションのクライアント IP は、サーバにループバックアドレスで接続されればループバックアドレス、そうでなければそのアドレスになるらしい。つまり 127.0.0.1 へ繋げばクライアントも 127.0.0.1 、 192.168... で繋げば 192.168... だと認識するわけだ。
 
問題の独自クライアントは自アドレスとして、先の例でいうなら必ず 192.168... を用いているのだ。 127.0.0.1 で見に行った場合に対応していない。
 
もちろん Windows 標準の FTP コマンドならば、 501 など発生しない。 127.0.0.1 へ繋いだ際には PORT コマンドも 127.0.0.1 で送っていた。
 
……このクライアント、アクティブ/パッシブも選べないうえドキュメントもないが広く公開されているモノでもない。だからこのエントリはどうしようもなく使えない覚え書きでしかないが、このようなゴミ箱へレイアップシュートするような代物しか許されない環境への恨みと、こんなネタでも理解できれば楽しく思えた自分の単純さを残しておく。
 
以上、2015年1月付けのテキストでした。見つけちゃったから公開しておく。 IIS は制御コネクションと違う IP 宛ての PORT コマンドを弾くって話の元ページは何故か記載していなかったので見付からなかったよ……。

Docker for Windows で象を暴れさせてみた

前回までで、とりあえず Mastodon のセットアップは出来た。次は、その Mastodon のトップページを表示する方法である。

試行錯誤してたら何となく出来たので、簡単に記載しておく。クリーンな環境からの再構築テストはしていないので、抜け洩れや不要な作業があるかもしれない。

オレオレ証明書をつくる

オレオレ Mastodon の証明書にはオレオレが相応しかろう。nginxに自己証明書(オレオレ証明書)を設定を参考に、証明書を作成する。

Nginx コンテナをつくる

Mastodon の docker-compose.yml に追記を行う。

まずは service にこちら。

  nginx:
    image: nginx
    container_name: nginx-sandbox
    ports:
      - 8180:80
      - 443:443
    restart: always
    volumes:
      - ./conf:/etc/nginx/conf.d/
      - ./certs:/etc/nginx/certs/
    networks:
      - front
      - internal_network

networks にこちら。

  front:
    external: true

Nginx に必要なファイルを配置する

docker-compose.yml で設定した通り、 conf ディレクトリを作ってそこに default.conf を、 certs ディレクトリを作ってそこにオレオレ証明書を、それぞれ配置する。

default.conf の内容は、ほぼ公式に記載されているサンプルの通りにした。

ただし 127.0.0.1 部分は、 docker の内部ネットワークを介するのでコンテナ名にしよう。あと ssl_certificatessl_certificate_key も、作成したオレオレ証明書を示すよう書き換えよう。

コンテナを起動しよう

docker-compose up -d する。

トップページにアクセスしてみよう

http://localhost:8180 へアクセスする。きっと about ページが君を迎えてくれるだろう。

ユーザを登録してみよう

……わたしの環境では、象が「もうしわけありませんが、なにかが間違っています。」と暴れ始めた。ログを見ると、リレーションが見つからないだのメソッドが定義されてないだのと書かれている。

最後に

どうせメールサーバの設定を行っていないので、リレーションが正しかろうとメソッドが定義されていようと、ユーザの登録はできない。

しかし、こんな行き当たりばったりで手あたり次第なわたしの作業ででも象は現れてくれた。今はそれだけでいい。

Docker 、ちょっと面白いかも。

Docker for Windows で結果も確認せず Mastodon を建ててみた

そこに Docker for WindowsMastodon があったので。

Dockerで雑にMastodonを起動する方法を参考に作業したのだが、 Mastodon 自体のバージョン差異やOSの違いでところどころ躓いたのでメモを残してみる。

ベースとして参照したドキュメントは上記ページと 公式の Docker 用インストールガイド

Docker for Windows のインストールと設定

公式より随意にダウンロードとインストールを行う。わたしが使ったのは Version 18.06.0-ce-win70 (19075) 。

データを永続化してみようと思うので、タスクトレイアイコンの右クリックから出てくるメニューで Settings を選ぶ。表示されたダイアログの Shared Devices タブにて、共有したいドライブへチェックを入れる。Windows アカウントのパスワードを聞かれるので答える。

リポジトリのクローン

任意のディレクトリで https://github.com/tootsuite/mastodon.git を git clone する。

わたしが作業した時点での最新コミットは Update to Node 8.x · tootsuite/documentation@f92195c · GitHub かな。

docker-compose.yml の書き換え

まず、ファイルを開く。

特に my own image をビルドする必要はないので、 web, streaming, sidekiq の build: . 行はコメントアウトする。

今回はデータの永続化を目指すので、コメントで記載されている通り、以下の行のコメントアウトを外す。

#    volumes:
#    - ./postgres:/var/lib/postgresql/data
#    volumes:
#    - ./redis:/data

Docker for Windows には postgres のマウント周りにコツがあるようなので、 GitHub のコメントを参考に以下の行を末尾へ追加する。 networks のさらに下でよい。

volumes:
  postgres:
    external: true

GitHub のコメントを参考に、 db へ environment を追記する。 user や password はセットアップ時のウィザードで聞かれるので、ここへ書く必要はなさそう。

  volumes:
    - ./postgres:/var/lib/postgresql/data
   environment:
    PGDATA: /tmp

PGDATA を記載しないと、 db の起動が失敗したり、セットアップ時のウィザードで db へ繋がらないって怒られる。

.env.production の書き換え

.env.production.sample をベースに .env.production を作成する。

作成した .env.production の Application secrets を設定する。ファイル内コメントに従い、 docker-compose run --rm web rake secret の結果を SECRET_KEY_BASE と OTP_SECRET へ設定する。

default language を設定する。

# DEFAULT_LOCALE=de

この行のコメントアウトを外し、日本語へ書き換える。

DEFAULT_LOCALE=ja

build を行う

docker-compose build を実行する。

次に docker-compose run --rm web bundle exec rake mastodon:setup を実行する。いろいろ質問されるので、任意に答える。 db と redis の設定は、ただ Enter キーを叩けばいいだろう。うまく質問に答えられれば、DBの初期化とアセットのコンパイルが始まる。

All done! You can now power on the Mastodon server と表示されれば成功だ。成功だろう。だって All done! だぞ。 You can now power on the Mastodon server だぞ。

Mastodon を立ち上げる

docker-compose up -d を実行する。

接続に失敗する

ブラウザのアドレスバーへ https://localhost:3000/ と入力し、 Enter キーを押下してみよう。 Firefox では SSL_ERROR_RX_RECORD_TOO_LONG 、 Google Chrome では ERR_SSL_PROTOCOL_ERROR といった文字列が見られるのではないだろうか。

さて、ここで公式のドキュメントへ戻ってみよう。


Prerequisites

  • Working basic (Linux) server with Nginx (or Apache2; not officially supported).

そうだ。 Nginx か Apache2 が必要なのだ。

.env.production にも Changing LOCAL_HTTPS in production is no longer supported. (Mastodon will always serve https:// links) とコメントされている通り、もはや non SSL ではアクセスできないらしいので、良い子のみんなは前提条件を整えようね。

ぶっちゃけメール送信用の設定もしてないしね。これだけで Mastodon が動くってわけではない。ただ、とりあえず All done! までは持っていけたので、備忘録として。

山田工業所製の中華鍋

テフロン加工された深めのフライパン。卵が焦げ付くようになってしまったと思った。思った、というのは、火加減が強すぎた所為だったらしく、弱火からだんだん中火へ上げれば焦げ付かなくなったのである。しかし、それに気づいたのは中華鍋を注文した後であった。

というわけで、せっかくなので山田工業所製の中華鍋を注文した。具体的には鉄打出し中華鍋底平型27cmである。空焼きするのが面倒かつ、生来の雑さ加減からニスをきっちり焼き切る自信がなかったので「バーナーで炙って食用油を塗る」オプションつきでお願いした。受注生産のため90日〜120日ほどかかるそうだが問題ない。

そして、それが届いた。黒光りする頼もしいヤツ。付属の取扱説明書によれば、いちど多めの油でくず野菜を炒めろとある。カット野菜ばかり購入していたので、マズいな……と思いつつ冷蔵庫を覗けば、たまたま玉ねぎがあった。喜び勇んで適当に切り、サラダ油をどばっと入れ、てけとーに炒める。

あっつあつの油をそのままシンクへ流すわけにはいかない。悩んだ末、陶器の茶碗にぶっこんだ。

ここからが本番である。くず部分ではない玉ねぎと卵でインスタントラーメンを作った。特記すべき事件は……卵を1つ、床に落とした以外に起こらなかったので、詳細は割愛する。ただ、強火にしやすいので、全ての材料は揃えてから鍋に向かえという中華の基本をしみじみ実感することができた。

後片付けが、また好い。洗った後すぐに火へかけ、水分が蒸発する様を見るのは楽しい。油を塗るあたりなんか最高である。ここは調理場、ならば中華鍋は武器であり、使った武器を手入れする――この瞬間、わたしは戦士なのだ。

もっと早く買えば好かったと思った。鉄の調理器具、おすすめ。