読者です 読者をやめる 読者になる 読者になる

OpenSuSEでDocker (1)

公式(?)なリポジトリを追加すればいいらしい

$ sudo zypper ar -f http://download.opensuse.org/repositories/Virtualization/openSUSE_12.3/ Virtualization
$ sudo rpm --import http://download.opensuse.org/repositories/Virtualization/openSUSE_12.3/repodata/repomd.xml.key

で、リポジトリにDockerのが追加され

$ sudo zypper in docker

で、インスコされ。。。ない。。。

moguriso@balthazar:~$ sudo zypper in docker
リポジトリ 'Virtualization' のメタデータを取り出しています... ..........................................[完了]
リポジトリ 'Virtualization' のキャッシュを構築しています ...............................................[完了]
リポジトリのデータを読み込んでいます...
インストール済みのパッケージを読み込んでいます...
パッケージの依存関係を解決しています...

問題点: docker-1.1.2-13.3.x86_64 で必要としている kernel >= 3.8.0 はどこからも提供されていません
 解決方法 1: docker-1.1.2-13.3.x86_64 をインストールしない
 解決方法 2: いくつかの依存関係を無視することによって docker-1.1.2-13.3.x86_64 を壊します

いずれかの数字を入力するか、キャンセル(C) を入力してください [1/2/c] (c): 

kernel 3.8以上にしろや(#゚Д゚)ゴルァ!!ということらしい

$ sudo zypper dup

しても

$ uname -r
3.7.10-1.36-desktop

多分rc用じゃないsrc.rpmを↓からdownload

$ wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/openSUSE_user1:/kernel-custom/openSUSE_12.1/noarch/kernel-source-3.8.6-3.1.noarch.rpm
$ wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/openSUSE_user1:/kernel-custom/openSUSE_12.1/noarch/kernel-devel-3.8.6-3.1.noarch.rpm

3.7.x系と競合するのでNG。当たり前か、、、vanillaから入れなおそうかと思ったけれど自宅に居ないからrebuild掛けて諦め・・・

とりあえずzypperでソースを落とす

$ sudo zypper in docker.src
$ cd /usr/src/packages/SPECS
$ sudo rpmbuild -ba docker.spec 
エラー: ビルド依存性の失敗:
        bash-completion は docker-1.1.2-13.3.x86_64 に必要とされています
        device-mapper-devel >= 1.2.68 は docker-1.1.2-13.3.x86_64 に必要とされています
        glibc-devel-static は docker-1.1.2-13.3.x86_64 に必要とされています
        go >= 1.2 は docker-1.1.2-13.3.x86_64 に必要とされています
        libapparmor-devel は docker-1.1.2-13.3.x86_64 に必要とされています
        libbtrfs-devel >= 3.8 は docker-1.1.2-13.3.x86_64 に必要とされています
        systemd-devel は docker-1.1.2-13.3.x86_64 に必要とされています
        zsh は docker-1.1.2-13.3.x86_64 に必要とされています

怒られた

$ sudo zypper in bash-completion device-mapper-devel glibc-devel-static go libapparmor-devel libbtrfs-devel systemd-devel zsh

入れた。

$ sudo rpmbuild -ba docker.spec 
エラー: ビルド依存性の失敗:
        go >= 1.2 は docker-1.1.2-13.3.x86_64 に必要とされています

goのversionが古いらしい

$ go version
go version go1.0.3

確かに古い

$ sudo zypper rm go

消した

$ wget https://storage.googleapis.com/golang/go1.3.1.linux-amd64.tar.gz

取ってきた.適当に展開してパスを通す。

moguriso@balthazar:/usr/src/packages/SPECS$ sudo bash /var/tmp/rpm-tmp.atVXE9
+ umask 022
+ cd /usr/src/packages/BUILD
+ /usr/bin/rm -rf /usr/src/packages/BUILDROOT/docker-1.1.2-13.3.x86_64
++ dirname /usr/src/packages/BUILDROOT/docker-1.1.2-13.3.x86_64
+ /usr/bin/mkdir -p /usr/src/packages/BUILDROOT
+ /usr/bin/mkdir /usr/src/packages/BUILDROOT/docker-1.1.2-13.3.x86_64
+ cd docker
+ '%{go_disable_brp_strip_static_archive}'
/var/tmp/rpm-tmp.atVXE9: line 30: fg: no job control
+ cd docker
+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ echo 'Patch #0 (0002-Stripped-dockerinit-binary.patch):'
Patch #0 (0002-Stripped-dockerinit-binary.patch):
+ /usr/bin/cat /usr/src/packages/SOURCES/0002-Stripped-dockerinit-binary.patch
+ /usr/bin/patch -p1 --fuzz=0
patching file hack/make/dynbinary
Hunk #1 succeeded at 16 (offset 1 line).
+ cp /usr/src/packages/SOURCES/README_SUSE.md .
+ exit 0
実行中(%build): /bin/sh -e /var/tmp/rpm-tmp.4tQ0qA
+ umask 022
+ cd /usr/src/packages/BUILD
+ /usr/bin/rm -rf /usr/src/packages/BUILDROOT/docker-1.1.2-13.3.x86_64
++ dirname /usr/src/packages/BUILDROOT/docker-1.1.2-13.3.x86_64
+ /usr/bin/mkdir -p /usr/src/packages/BUILDROOT
+ /usr/bin/mkdir /usr/src/packages/BUILDROOT/docker-1.1.2-13.3.x86_64
+ cd docker
+ '%{go_disable_brp_strip_static_archive}'
/var/tmp/rpm-tmp.4tQ0qA: line 30: fg: no job control
エラー: /var/tmp/rpm-tmp.4tQ0qA の不正な終了ステータス (%build)


RPM ビルドのエラー:
    /var/tmp/rpm-tmp.4tQ0qA の不正な終了ステータス (%build)

怒られた。 sudo bashで↑の /var/tmp/rpm-tmp.4tQ0qAを実行すると成功してバイナリが出来るので多分環境変数か何かが見えてないんだと思う。おそらくはgo_disable_brp_strip_static_archive。

ぐぐっても引っかからないので、取り敢えず zypper in goしてgo 1.0.3を入れて、/usr/bin/goを/usr/bin/go.orgにリネーム。which goで後から入れた方(1.3.x)が見えることを確認して再度実行。更にdocker.specのkernelを3.8=>3.7に書き換えてgoのbuild requireを削除したらrpmを吐いた。

moguriso@balthazar:/usr/src/packages/RPMS/x86_64$ ls
docker-1.1.2-13.3.x86_64.rpm
moguriso@balthazar:/usr/src/packages/RPMS/x86_64$ sudo rpm -ivh docker-1.1.2-13.3.x86_64.rpm 
エラー: 依存性の欠如:
        apparmor-parser は docker-1.1.2-13.3.x86_64 に必要とされています

apparmor-parserがねーよと怒られるので入れる。

moguriso@balthazar:/usr/src/packages/RPMS/x86_64$ sudo zypper in apparmor-parser

んで、再度インストール

umoguriso@balthazar:/usr/src/packages/RPMS/x86_64$ sudo rpm -ivh docker-1.1.2-13.3.x86_64.rpm 
準備しています...              ################################# [100%]
creating group docker...
更新中 / インストール中...
   1:docker-1.1.2-13.3                ################################# [100%]
Updating /etc/sysconfig/docker...
moguriso@balthazar:/usr/src/packages/RPMS/x86_64$ which docker
/usr/bin/docker

入った。動くんか、これ?


via openSUSE - Docker Documentation
via Go言語のインストール - golang.jp
via Downloads - The Go Programming Language