どこにでもいるような普通の一般人が、たまに自分用メモを書いてる。

今更ながら GitLab と BitBucket に登録してみた

日付:

GitHub3年前に登録していたものの、GitLab BitBucket は未登録だった。
当サイトは Hugo に移行する計画があるので、これらも登録してみようと思った次第。
GitHub は Microsoft に買収されたし、他の類似サービスも確保しておけば安泰だというわけ。


どちらも普通に登録完了。

BitBucket には Academic プランがあって、内容的には Standard プラン相当が無料で提供されると考えて良い。
大学のメイルアドレスを登録することで自動的に Free プランから Academic プラン変更される。
大学以外のメイルアドレスでサインアップしていても、設定→一般→メールエイリアスで大学のメイルアドレスを追加するだけ。


静的サイトホスティングとして考えると、やはり GitHub Pages に一日の長がある。

GitLab Pages は SSL 化可能とはいえ、手動で証明書をセットする必要がある。無料で済ませようと思うと、3ヶ月ごとに Let’s Encrypt の証明書を手動で調達しなくてはならないわけだ。

BitBucket はカスタムドメインが使用できない。

GitHub Pages は自動的に Let’s Encrypt の証明書を調達・更新してくれる。

とはいえ結局、あくまで Git リポジトリとして使い、ホスティングは Netlify を使うのがベストであるように思われる。CI のビルドの早さも含めると。


私は GitHub の Micro プランが無料で使える立場なわけだが、これってどうせプライベートリポジトリ5個までだし、無制限の GitLab や BitBucket は良いぞ……と思っていたが、GitHub も2年前に無制限になったようだった。あんまり使わないので気づかなかった。タハー。

さらば XVM Labs

日付:
タグ:

4年前に契約した XVM Labs の激安 VPS だが、今年2月に終了のお知らせが来た。

終了と言っても突然サービス終了ではなく、契約の更新ができなくなるというもの。
激安 VPS 界隈では「今月末で閉めます」程度はよくある話で、私など業者が夜逃げという事例にも多く出くわしているが、さすがに10年以上継続しているところはしっかりしている。

この契約期間満了がついに到来してしまった。

年 2.99 USD、メモリ 512MB、IPv4 アドレス4個というスペックで、色々実験的な運用をさせてもらった。
その中の一つが Pleroma インスタンス

ありがとう、さようなら。

HP t5740 シンクライアント

日付:

厳密には t5740 じゃなくて t5740wi Internet Appliance なわけだが、ぶっちゃけ中身は t5740 だし、OS イメージも t5740 のものがそのまま入るしで。

  • hp t5740wi
  • CPU : Intel Atom N280 1.66GHz
  • メモリ : DDR3 SO-DIMM 2GB x2
  • ストレージ : IDE DOM 2GB
  • OS : Windows Embedded Standard 2009

t5570t510 よりも幅が狭いので、たぶん2.5インチ SSD は内蔵できないと思われる。

ただ、本機はメモリスロットが2個ある。よりによって 64bit 非対応 CPU 搭載機種に!

t5570 の時と同様、soltec41 氏が mSATA SSD を t5740 の SATA ポートにマウントする変換基板「SOL313-0」を製作されているので購入。
配置的に t5570、t510 よりもスペーサーによる安定性が低いので、標準のスペーサーから SOL313-0 付属のネジ止めスペーサーに交換するメリットが大きい。ネジでガッチリ固定すればぐらつかない。

Wyse 5010 D90D7 シンクライアント

日付:

  • Wyse 5010 D90D7
  • CPU : AMD G-T48E 1.4GHz (2コア)
  • GPU : RADEON HD 6250 280MHz
  • メモリ : DDR3 SO-DIMM 2GB
  • ストレージ : SATA DoM 4GB
  • OS : Windows Embedded Standard 7

マザーボードには SATA 端子が、マザーボードと水平についている。
HP t5570 や t510 では垂直のところ、水平だ。SSD がかなり短くかつ幅も狭くないと入らない。メモリスロットにぶつかったり、背面端子用の基板にぶつかったり。
SATA Half-Slim、JEDEC MO-297 準拠のものなら入る (ただしネジ止めできない)。

SATA Half-Slim とうたっていても、たとえば mSATA を横向きに配置する SATA-mSATA 変換基板は MO-297 より明らかに大きく使用できない。
AliExpress で SATA Half-Slim とうたっている KingDian などの SSD は問題ない。
SATA-M.2 2242 の変換基板 (これも M.2 2242 を横向きに配置) がほぼ MO-297 通りのサイズなので、使い回しを考えるとこれがベストと思われる。

メモリスロットは1個で、8GB も問題なく認識した。

iPhone SE 使用開始

日付:

今月末で電波が止まるワイモバイル (旧イーモバイル) の携帯電話を使ってきたのだが、iPhone SE 一括1円という巻き取りで移行した。
届いた iPhone SE はバッテリーが完全に空っぽになっていて、そのため初期設定に少し手間取ることになった。
早い話、時計が盛大にずれているのでそれを直して再起動する必要があった。

それに気づくまでああでもないこうでもないと情報を探し回る羽目に。
初期設定の Apple ID ログインがまずできない。
Safari でアクセスする HTTPS サイトが片っ端から証明書エラー。
iOS 11 にアップグレードすれば直るかと思いきや、そのダウンロードさえもコケる有様。

設定項目を片っ端から見ていると、時計が半年前。諸悪の根源はこいつか!!


昨今の5インチスマートフォンよりやや細身で、片手で使うにはやはりこのサイズが使いやすい。
普段使っている SIM フリー安物 Android 端末 (MVNO) と比べると、確かに iPhone の出来は良い。
前に使ったことがある iPhone 4s の頃と違って、ちゃんとテザリングもできるし。
しかし ATOK Passport に入っているのに iOS 版 ATOK を別途購入しなくてはならないのは Apple のせいで、しかたないから買ったけれども腹立たしい。

初詣 (平成30年)

日付:
タグ:

昨年と同じく、終電での移動。

前回も列が短いと感じたが、今回はさらに短くなっていた。
お守りもらっておみくじ引いて (大吉)、前回より5~10分早いぐらい。

初詣の個人的なお目当て、ふかしてるじゃがバターは、なんと1軒しか見当たらない。絶滅危惧種。
あと串焼き食べたり。
境内で「動物保護」とか言って募金活動してる男がいたが、あれは許可とってんのかねえ。胡散臭いのでお断り。

始発までeワールド府中店で3時間パック。
PC に Office 2007 が入ってるんだが、これ延長サポート終わったんだよね。
近辺にいびきのうるささを競うようにズゴゴゴとやかましい客が複数いて参った。

始発で帰った時点で眠気が激しく、初日の出は行かないことに。

10億円引換券の予定が300円引換券に化けたり色々沈んで去年はアレだった。今年は良い年になるといいなあ。

Debian stretch で Pleroma インスタンスを立ててみた

日付:

Mastodon より軽いと評判の Pleroma インスタンスを立ててみた。
確かに消費メモリはかなり少ない。
Mastodon はメモリ 1GB の VPS ではメモリ不足でスラッシングホーダイだったが、Pleroma はメモリ 512MB の VPS で Pleroma 自体が 14% 程度のメモリ消費。
PostgreSQL や httpd の消費分を含めても、メモリ 256MB の VPS で十分動作可能だと思う1

公式のインストール手順だと引っかかるところがいくつかあったのでメモを残しておく。


早い話:

  • PostgresSQL のユーザー pleroma を作る時に CREATEDB をつける。
  • mix ecto.create と mix ecto.migrate の間で、PostgreSQL のスーパーユーザーで DB に CREATE EXTENSION citext; する。
  • 画像が http://localhost:4000/ 下になるのは、mod_substitute (Apache の場合) で書き換える。

Erlang は Debian にも収録されているが、公式の説明通り upstream のリポジトリを使う必要がある。
git も当然必要だが、公式の説明には書かれていないので入れる。

% sudo dpkg -i erlang-solutions_1.0_all.deb
% sudo apt update
% sudo apt install esl-erlang elixir build-essential git
% sudo useradd -d /home/pleroma pleroma
% su pleroma
% cd
% git clone https://git.pleroma.social/pleroma/pleroma.git
% cd pleroma
% mix deps.get

PostgreSQL のユーザー pleroma に CREATEDB をつけてやらないとコケるのでつける。
たぶん開発者は postgres ユーザー権限で作業してるんだろうなあ。
公式説明では \c pleroma_dev から始めてるけど、そもそもデータベース pleroma_dev は後の mix ecto.create で作るから、この時点では存在しない。

% sudo -u postgres psql
CREATE USER pleroma CREATEDB;
ALTER USER pleroma WITH ENCRYPTED PASSWORD 'パスワード';
\q
% exit

config/dev.secret.exs を編集する。
公式の説明だと dev.exs をコピーして編集することになっている。
これはバージョンアップで dev.exs が更新される場合があることによるのかな。
標準だと postgres ユーザー権限を使うように書かれているので、ここはさっき作った DB ユーザーに変更する必要がある。説明とデフォルト設定にズレがある。

% mix ecto.create

公式説明だと && mix ecto.migrate してるけど、その前にやることがある。
mix ecto.migrate で citext 拡張が入ってなければ入れることになっているのだが、PostgreSQL のユーザー pleroma には拡張の権限がないので CREATE EXTENSION citext; に失敗する。

% sudo -u postgres psql
\c pleroma_dev
CREATE EXTENSION citext;
\q

これでようやく mix ecto.migrate できる。

% mix ecto.migrate

公式の説明では Nginx でリバースプロキシしているが、私は Apache を使っているので Apache でのやり方を。
/etc/apache2/sites-available/pleroma.example.com.conf を作成。

<VirtualHost *:80>
	ServerName	pleroma.example.com
	DocumentRoot	/home/pleroma/www
#	Redirect	permanent	/	https://pleroma.example.com/
</VirtualHost>

#<VirtualHost *:443>
#	ServerName	pleroma.example.com
#	SSLEngine	On
#	SSLCertificateFile	/etc/letsencrypt/live/pleroma.example.com/cert.pem
#	SSLCertificateKeyFile	/etc/letsencrypt/live/pleroma.example.com/privkey.pem
#	SSLCertificateChainFile	/etc/letsencrypt/live/pleroma.example.com/chain.pem
#	DocumentRoot	/home/pleroma/www
#	ProxyPassMatch	^/(.well-known/acme-challenge) !
#	ProxyPass	/	http://localhost:4000/
#	AddOutputFilterByType	SUBSTITUTE \
#		text/html \
#		application/json \
#		application/javascript \
#		text/javascript \
#		text/css
#	Substitute "s|http://localhost:4000/|https://pleroma.example.com/|"
#</VirtualHost>

これで Let’s Encrypt の証明書ができたらコメントアウト部分を有効にする。
アップロードしたアバター画像などが http://localhost:4000/ 下にあるような html が出力されるので、これを mod_substitute で書き換えている。


(2017/11/20 追記)

ITmedia の記事で作者が「月額2.5ドルの仮想サーバで動かしている人もいます」と言っているが、私は年額 2.99 USD の VPS で動かしている(笑)。



  1. さすがに 128MB では PostgreSQL と Apache を起動した時点でメモリの残りが 30MB を割ったので無理だと判断した。 ↩︎

nazwa.pl の激安 VPS を契約してみた

日付:
タグ:

nazwa.pl というポーランドのホスティング業者があって、初回支払い分限定割引で目玉が飛び出るぐらい激安の VPS を出していたので思わず契約。

カタログスペックはこんな感じ。

  • 11.88 PLN / 年 (初年度のみの価格。このほか VAT やカード決済手数料が追加される)
  • メモリ 4GB
  • ディスク 25GB NVMe
  • 最大転送量 100GB / 日
  • 場所 ポーランド (ping rtt 270-300ms 前後)
  • KVM

サイトはポーランド語のみで作られている。読めないので Google 翻訳に頼りまくってなんとか契約した感じ。

契約時点でポーランドの通貨ズウォティ (PLN) は約31.15円。
VAT やらカード決済手数料やらが追加されるが、諸々含めてトータル500円程度。
PayPal に対応していないので、日本から利用するには事実上クレジットカードのみ。
普段使っているカードで支払うのにいささか不安を覚えてジャパンネット銀行のカードレス VISA デビットで支払ったところ、513円の引落だった。

513円でメモリ 4GB の KVM VPS が1年使えるって、これはかなりすごい話だ。
この価格は初回分のみで、通常価格は月 9.99 PLN。通常価格でも月500円未満なのでかなり安い。国内業者の8割引。

注意点としては、こんなところか。

  • ポーランド語なので翻訳に頼らなくてはならない
  • カートに入れた時点で有料オプションの DirectAdmin が選択された状態になっている (ので外す)

支払い完了から47時間強で開通。
身分証明書の提示を要求される事例もあるようだが、私の場合は要求されなかった。

さすがに経路が太平洋と大西洋を横断していくので ping rtt の数字が大きく、ssh は快適とはいえないが、動作自体は軽快。
vpsRus から Mastodon インスタンスを移転したら早くなった。

Debian stretch で Mastodon インスタンスを立て直した

日付:

前回、Ubuntu で Mastodon インスタンスを立てたのだが、さすがにメモリが 1GB では明らかに不足していて、Mastodon のバージョンアップに際して assets:precompile するだけで30分以上かかるという有様だった。
その上 CloudAtCost が長期間ダウンしたため、もう少しまともな環境で立て直すことに。

vpsRus の VPS で、カタログスペックはこんな感じ。

  • 2.5 USD / 月
  • CPU 2仮想コア
  • メモリ 2GB (vswap 2GB)
  • HDD 200GB
  • 月間転送量 1TB
  • 場所 イリノイ州シカゴ (ping rtt 200ms 前後)
  • OpenVZ

国内業者と比べると 1/4 以下のお値段。
シカゴにしては ping rtt がちょっと遅い。あとディスク I/O が結構遅い。たぶんユーザー詰め込んでるからだが、こんな値段でこれだけメモリ使えるなら我慢できる。


というわけで Mastodon を入れていく。
前回と比べるとプロダクションガイドも大幅に更新されており、それに従っていけば問題ない。
今回はプロダクションガイド #385に従うが、Nginx ではなく Apache を使う。
前回は rbenv を使わなかったが、今回は使う。


早い話:

  • redis-server と PostgreSQL がすんなりいかない。
  • redis-server は apt でのインストール時にエラーが出るので、/etc/systemd/system/redis.service の「ReadWriteDirectories=-/var/run/redis」から「/var」を削除して apt -f install。
  • PostgreSQL はデータベース template1 を encoding=’UTF8′ で作り直す。

node.js、yarn のリポジトリを追加、インストールしていく。プロダクションガイドは Ubuntu 16.04 ベースで書かれているが、Debian stretch も apt はプロダクションガイド通りに実行していい。

ただ、redis-server のインストールでエラーが出る。
これは /var/run が /run へのシンボリックリンクであることによるものらしく、/lib/systemd/system/redis-server.service の次の行を修正すればいい。

ReadWriteDirectories=-/var/run/redis

ReadWriteDirectories=-/run/redis
% sudo apt -f install

PostgreSQL の template1 が SQL_ASCII なのでうまくいかない。なので template1 を UTF8 で作り直す。

% sudo -u postgres psql
update pg_database set datistemplate=false where datname='template1';
drop database template1;
create database template1 with template='template0' encoding='UTF8';
update pg_database set datistemplate=true where datname='template1';
\q

バッドノウハウ!

Ubuntu 16.04 で Mastodon インスタンスを立ててみた

日付:

前回、Mastodon がメモリ食いらしいので代わりに GNU social インスタンスを立ててみたのだが、それでも一応 Mastodon も触ってみたくなったので CloudAtCost の Developer Cloud Pro 1 (メモリ 512MB、ストレージ 10GB) を2台持っているのを1台にまとめてインスタンスを立ててみることにした。

まとめるとこんな感じ:

  • なるべく APT で済ませる (基本方針)。
  • rbenv は使わない。Ubuntu 収録の Ruby 2.3.1 でいく。
  • なぜか bundle install 通らないのは Gemfile いじって無理矢理。

あ、Docker 使うのが普通みたいだけど使ってない。


基本方針は「なるべく APT で済ませる」だ。アップデートチャネルが多くなると面倒なので。
当初 Debian jessie で構築を進めていたが、Ruby 2.1 ではさすがに古くてどうにもならず、当然ながら ruby-build も古くて rbenv で Ruby 2.4.1 を入れることができず、rbenv 関係全部 git で入れる羽目になって基本方針とかけ離れてきたので中止。
なお CloudAtCost の Ubuntu イメージは 14.04 しかないので、まず最初に do-release-upgrade で 16.04 にした。

ベースは Mastodon のプロダクションガイドに従うが、APT で代替できるものは APT にする。
その際、PPA もどんどん使う。

以下、プロダクションガイドの記述順に沿って書いていく。


プロダクションガイドではユーザー mastodon、ホームディレクトリ /home/mastodon を使うことを前提としているのでユーザーを作っておく。違うものを使う場合は適宜読み替える。

Nginx 関係は後に回す。


まずは Node.js。プロダクションガイドの手順ではこうなっている。

sudo apt-get install imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git curl g++ libprotobuf-dev protobuf-compiler
curl -sL https://deb.nodesource.com/setup_6.x | sudo bash -
sudo apt-get install nodejs
sudo npm install -g yarn

1行目はそのままでいい。

2、3行目もそのまま。
Ubuntu 16.04 では Node.js 4.2.6 が収録されているが、後で必要になる browserify の導入には 4.6 以降が要求されるので、素直に 6.x を入れてしまう。

4行目は yarn の apt-line 追加に変更する。

wget -qO- https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update
sudo apt install yarn

Redis と PostgreSQL はプロダクションガイドの通り。


次は Rbenv だが、Ubuntu 16.04 が Ruby 2.3.1 収録のところ、Mastodon は Ruby 2.4.1 を要求している。
しかし Gemfile を見ると 2.3.0 以上 2.5.0 未満となっているのでこのままいく。
つまり、rbenv は入れない!

sudo apt install ruby bundler

ユーザー mastodon に su しての作業は、git checkout まではプロダクションガイド通り。

cd ~
git clone https://github.com/tootsuite/mastodon.git live
cd live
git checkout $(git tag | tail -n 1)

ここからは違ってくる。
プロダクションガイドでは次のようになっている。

gem install bundler
bundle install –deployment –without development test
yarn install –pure-lockfile

bundler はさっき apt で入れたので1行目は除外。


.env.production は DB がローカルの場合、DB_HOST に localhost とか書くと ident 認証がコケるので、空にする必要がある。
こんな感じに。

REDIS_HOST=localhost
REDIS_PORT=6379
# REDIS_DB=0
DB_HOST=
DB_USER=mastodon
DB_NAME=mastodon
DB_PASS=
DB_PORT=5432

そしてセットアップ。

RAILS_ENV=production bundle exec rails db:setup

これはプロダクションガイド通りではあるが、Ruby のバージョンチェックで引っかかる。
/home/mastodon/live/Gemfile の4行目だ。

ruby ‘>= 2.3.0’, ‘< 2.5.0’

とあり、2.3.1 が入っているのだから問題ないはずなのだが。
PPA で 2.4.1 を入れた状態でも引っかかる有様だったので、行頭に # をねじ込みコメントアウトして無理矢理いく。

次に進む前に browserify を入れる。これだけは APT 管理できない。
node-browserify-lite では代用できなかった。

yarn add browserify

そして次に進む。

RAILS_ENV=production bundle exec rails assets:precompile

その次は systemd 周りの前に、Nginx と Let’s Encrypt を済ませる。


Nginx のインストール。

sudo apt install nginx

プロダクションガイド記載の設定は Nginx 全体のものではなくサイト設定なので、/etc/nginx/sites-available/mastodon とかファイルを作ってそこに書く。流用でいいが、一応ググって基本的な理解をしておいた方がいいとは思う。

流用の場合、基本的にすべて HTTPS でのアクセスになる。
HTTP は Let’s Encrypt のドメイン確認のみに使い、それ以外は HTTPS にリダイレクトされる。
SSL 関係の設定は Mozilla SSL Configuration Generator を参考に詰めることをおすすめする1
以下、流用ベースで書いていく。

なお HTTP の方にも

root /home/mastodon/live/public;

を書いておかないと certbot がコケる。

sites-available にあるだけではもちろん動かないので、sites-enabled にシンボリックリンクを張る。

sudo ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/

certbot で Let’s Encrypt の証明書を導入しておく。

まずは certbot の導入から。

sudo add-apt-repository ppa:certbot/certbot
sudo apt update
sudo apt install certbot

/etc/ssl/certs/dhparam.pem も作っておく。

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

一時的に /etc/nginx/sites-available/mastodon の

  ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

は行頭 # でコメントアウトしておく。でないと今はまだ証明書も鍵もないので、Nginx がエラーを吐く。

sudo systemctl reload nginx
sudo certbot certonly --webroot -w /home/mastodon/live/public -d example.com -m admin@example.com

証明書ができたら、/etc/nginx/sites-available/mastodon の先ほどコメントアウトした部分を戻して nginx を reload。


プロダクションガイドの続きに戻って systemd 周り。
基本的にはプロダクションガイドの記述をそのままコピペでファイルを作っていけばいいのだが、rbenv を使っていないので /home/mastodon/.rbenv_shims/bundle はない。
/usr/bin/bundle を使う。

ExecStart=/home/mastodon/.rbenv/shims/bundle exec puma -C config/puma.rb

↑これをこうする↓。

ExecStart=/usr/bin/bundle exec puma -C config/puma.rb

crontab も同様に。


メモリ 1GB ではかなりカツカツという事前情報は正しく、ruby2.3 が4プロセスで合計 700MB 近く食っている。

以下はメモリ 128MB や 64MB といった極小 VPS でこそ役に立つものの 1GB 積んでると誤差レベルのメモリ節約にしかならないことだが、一応やっておく。

  • syslog は rsyslog から inetutils-syslogd に差し替える。
  • ssh サーバーは openssh-server から dropbear に差し替える。


  1. 流用そのままだと SSL Server Test スコア A- だが、少し詰めるだけで A+ になる。 ↩︎