うちで動いている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””と出てここで止まってしまっているようです。
今日はここまで。