Raspberry Pi 2でMastodonインスタンスを立てようとして失敗した件

2017年4月24日


うちで動いているRaspberry Pi 2をMastodonインスタンスにしようと画策してみたのですが、docker-compose buildが動いてくれず失敗しました。需要があるのか分かりませんが、ひとまず失敗したところまでの手順を公開します。
はじめはaptで入れた古いdockerとdocker-compose(x86_64用)でうまくいかず、ARMアーキテクチャ上ではx86用を流用してもうまくいかない、Raspbianではdebian用を流用してもうまくいかないことを知って調べて最終的に一番確度の高そうな手順が以下になりました。
でも動かなかったんですけどね。

用意するもの

  • Raspberry Pi 2 Model B

動作確認環境

  • Raspbian GNU/Linux 8.0 Lite (Jessie)
  • Docker 17.04.0-ce ※今回導入します
  • docker-compose 1.13.0dev ※今回導入します
  • Mastodon ※今回導入します

手順

Dockerをインストールします。こちらを参考にしました。

curl -sSL https://get.docker.com/ | sh

これで処理が数分ほど走ります。
バージョンは4/24現在、このように表示されました。

$ docker version
Client:
 Version:      17.04.0-ce
 API version:  1.28
 Go version:   go1.7.5
 Git commit:   4845c56
 Built:        Mon Apr  3 18:22:23 2017
 OS/Arch:      linux/arm
Server:
 Version:      17.04.0-ce
 API version:  1.28 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   4845c56
 Built:        Mon Apr  3 18:22:23 2017
 OS/Arch:      linux/arm
 Experimental: false

続いて、一応自分自身がroot権限がなくてもdockerコマンドを使えるようにしておきます。
(ユーザ名は仮にpiとしていますが、変えて下さい)

sudo gpasswd -a pi docker

一度ログアウトし再度ログインします。
docker-composeをインストールします。Raspbianなのでそのままではインストールできません。なのでこちらを参考にしました。

git clone https://github.com/docker/compose.git
cd compose
docker build -t docker-compose:armhf -f Dockerfile.armhf .
docker run --rm --entrypoint="script/build/linux-entrypoint" -v $(pwd)/dist:/code/dist -v $(pwd)/.git:/code/.git "docker-compose:armhf"

docker buildのところは気を付けて下さい。Raspberry Pi 2だと処理するのに1時間ほどかかりました。
docker-composeファイルができたことを確認します。

ls -l dist/

このように表示されます。

$ ls -l dist/
total 6840
-rwxr-xr-x 1 pi pi 7003348 Apr 24 20:42 docker-compose-Linux-armv7l

docker-composeファイルを/usr/local/bin/に配置します。

sudo cp dist/docker-compose-Linux-armv7l /usr/local/bin/docker-compose
sudo chown root:root /usr/local/bin/docker-compose
sudo chmod 0755 /usr/local/bin/docker-compose
docker-compose version

バージョンは4/24現在、このように表示されました。

$ docker-compose version
docker-compose version 1.13.0dev, build baf457c
docker-py version: 2.2.1
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t  3 May 2016

Mastodonをインストールします。こちらを参考にしました。

git clone https://github.com/tootsuite/mastodon
cd mastodon

続いて、.env.productionを編集します。

cp .env.production.sample .env.production
vi .env.production

LOCAL_DOMAINの部分を自分の所持するドメインに変えます。私は「mastodon.yagi.tc」にしました。

# Federation
LOCAL_DOMAIN=mastodon.yagi.tc
LOCAL_HTTPS=true

ビルドします。

docker-compose build

処理に時間がかかりますが、最終的には以下のようなメッセージが出て失敗します。

$ docker-compose build
redis uses an image, skipping
db uses an image, skipping
Building streaming
Step 1/9 : FROM ruby:2.4.1-alpine
 ---> 5eadd5d1419a
Step 2/9 : LABEL maintainer "https://github.com/tootsuite/mastodon" description "A GNU Social-compatible microblogging server"
 ---> Using cache
 ---> 33acaf815613
Step 3/9 : ENV RAILS_ENV production NODE_ENV production
 ---> Using cache
 ---> 9b4746592828
Step 4/9 : EXPOSE 3000 4000
 ---> Using cache
 ---> d39ea8339906
Step 5/9 : WORKDIR /mastodon
 ---> Using cache
 ---> 0bad89f04412
Step 6/9 : COPY Gemfile Gemfile.lock package.json yarn.lock /mastodon/
 ---> Using cache
 ---> bec29943f9a9
Step 7/9 : RUN echo "@edge https://nl.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories  && BUILD_DEPS="     postgresql-dev     libxm
l2-dev     libxslt-dev     python     build-base"  && apk -U upgrade && apk add     $BUILD_DEPS     nodejs@edge     nodejs-npm@edge     libpq
    libxml2     libxslt     ffmpeg     file     imagemagick@edge     ca-certificates  && npm install -g npm@3 && npm install -g yarn  && bundl
e install --deployment --without test development  && yarn --ignore-optional  && yarn cache clean  && npm -g cache clean  && update-ca-certifi
cates  && apk del $BUILD_DEPS  && rm -rf /tmp/* /var/cache/apk/*
 ---> Running in 5f5939fc5bf4
standard_init_linux.go:178: exec user process caused "exec format error"
ERROR: Service 'streaming' failed to build: The command '/bin/sh -c echo "@edge https://nl.alpinelinux.org/alpine/edge/main" >> /etc/apk/repos
itories  && BUILD_DEPS="     postgresql-dev     libxml2-dev     libxslt-dev     python     build-base"  && apk -U upgrade && apk add     $BUIL
D_DEPS     nodejs@edge     nodejs-npm@edge     libpq     libxml2     libxslt     ffmpeg     file     imagemagick@edge     ca-certificates  &&
npm install -g npm@3 && npm install -g yarn  && bundle install --deployment --without test development  && yarn --ignore-optional  && yarn cac
he clean  && npm -g cache clean  && update-ca-certificates  && apk del $BUILD_DEPS  && rm -rf /tmp/* /var/cache/apk/*' returned a non-zero cod
e: 1

“standard_init_linux.go:178: exec user process caused “exec format error””と出てここで止まってしまっているようです。
今日はここまで。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です