うちで動いているRaspberry Pi 2をMastodonインスタンスにしようと画策してみたのですが、docker 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””と出てここで止まってしまっているようです。