kublerの404 Not Found エラーを回避する(Mac)

解決方法

Macだとsedの互換性の問題でrオプションが使えないのでまずgnu-sedを入れる。

$ brew install gnu-sed

lib/cmd/update.shの、rオプションを使っている部分をgsedに書き換える。

$ cd kubler
$ nano lib/cmd/update.sh

-                        sed -r -i s/^STAGE3_DATE=\(\"\|\'\)?[0-9]*\(\"\|\'\)?/STAGE3_DATE=\'"${s3date_remote}"\'/g \
+                        gsed -r -i s/^STAGE3_DATE=\(\"\|\'\)?[0-9]*\(\"\|\'\)?/STAGE3_DATE=\'"${s3date_remote}"\'/g \

kublerの使用するGentoo stage3イメージ?をアップデートする。

./kubler.sh update

cleanしてビルドする。

./kubler.sh clean
./kubler.sh build -c kubler/glibc

経緯

kubler(旧:gentoo-bb)というものを使うとdockerのコンテナサイズを小さく作れるというのを聞いて試して見るとERROR 404: Not Found が出て進まなくなった。

> $ ./kubler.sh build kubler/glibc
*** generate build order
--> required engines:    docker
--> required stage3:     stage3-amd64-hardened+nomultilib stage3-amd64-musl-hardened
--> required builders:   kubler/bob kubler/bob-musl
--> build sequence:      kubler/busybox kubler/glibc
*** gogo!
--2017-05-14 01:12:00--  http://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64-hardened+nomultilib/stage3-amd64-hardened+nomultilib-20170420.tar.bz2
Resolving distfiles.gentoo.org... 64.50.236.52, 140.211.166.134, 137.226.34.46, ...
Connecting to distfiles.gentoo.org|64.50.236.52|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2017-05-14 01:12:01 ERROR 404: Not Found.

*** Got a 404 for stage3-amd64-hardened+nomultilib-20170420.tar.bz2, try running the update command to resolve this.
fatal: Aborted download of /Users/pogin/workspace/kubler/tmp/downloads/stage3-amd64-hardened+nomultilib-20170420.tar.bz2

set -xをkubler.shに入れて調べたけど結局よくわからなかった。

なので、公式のREADME.mdを見直してみると

$ kubler.sh update

というものがあったので、これを実行するとtagをアップデートしてくるっぽいので実行してみる。

$ ./kubler.sh update
*** sync portage container
Warning, skipped sync. Couldn't find a builder image to work with, tried "kubler/bob"
*** check for stage3 updates
dummy/
sed: illegal option -- r
usage: sed script [-Ealn] [-i extension] [file ...]
       sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]
--> bob/                 updated 20170420 -> 20170504 - stage3-amd64-hardened+nomultilib
kubler/
sed: illegal option -- r
usage: sed script [-Ealn] [-i extension] [file ...]
       sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]
--> bob-musl/            updated 20170404 -> 20170509 - stage3-amd64-musl-hardened
sed: illegal option -- r
usage: sed script [-Ealn] [-i extension] [file ...]
       sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]
--> bob-uclibc/          updated 20170405 -> 20170430 - stage3-amd64-uclibc-hardened
sed: illegal option -- r
usage: sed script [-Ealn] [-i extension] [file ...]
       sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]
--> bob/                 updated 20170420 -> 20170504 - stage3-amd64-hardened+nomultilib

Found updates for 1 stage3 file(s), to rebuild run:

    kubler.sh clean
    kubler.sh build -c some_namespace

このままkubler.sh clean; kubler.sh build kubler/glibcとしても同じように404 Not Foundが出て全然アップデートしてくれない...。

どうもMacsedではrオプションを受け付けない様子。

sed: illegal option -- r
usage: sed script [-Ealn] [-i extension] [file ...]
       sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]

以下のissueを見てみるとgnu-sedを入れて書き換えれば動くというらしいので入れてみる。
OS X Yosemite “sed: illegal option -- r” fatal error · Issue #1526 · fabric/fabric

$ brew install gnu-sed

該当しそうな箇所をagで探す。

$ ag sed
lib/cmd/update.sh
24:                        sed -r -i s/^STAGE3_DATE=\(\"\|\'\)?[0-9]*\(\"\|\'\)?/STAGE3_DATE=\'"${s3date_remote}"\'/g \

何かしらのエディタで修正する。

$ nano lib/cmd/update.sh
-                        sed -r -i s/^STAGE3_DATE=\(\"\|\'\)?[0-9]*\(\"\|\'\)?/STAGE3_DATE=\'"${s3date_remote}"\'/g \
+                        gsed -r -i s/^STAGE3_DATE=\(\"\|\'\)?[0-9]*\(\"\|\'\)?/STAGE3_DATE=\'"${s3date_remote}"\'/g \

もう一度updateコマンドを実行してみる。

$ ./kubler.sh update
*** sync portage container
Warning, skipped sync. Couldn't find a builder image to work with, tried "kubler/bob"
*** check for stage3 updates
dummy/
--> bob/                 updated 20170420 -> 20170504 - stage3-amd64-hardened+nomultilib
kubler/
--> bob-musl/            updated 20170404 -> 20170509 - stage3-amd64-musl-hardened
--> bob-uclibc/          updated 20170405 -> 20170430 - stage3-amd64-uclibc-hardened
--> bob/                 updated 20170420 -> 20170504 - stage3-amd64-hardened+nomultilib

Found updates for 1 stage3 file(s), to rebuild run:

    ./kubler.sh clean
    ./kubler.sh build -c some_namespace

指示に従ってclean,buildを実行してみる。

$ ./kubler.sh clean
--> remove build artifacts
rootfs.tar files
generated Dockerfiles
PACKAGES.md files
find: -delete: forbidden when symlinks are followed

find: -delete: forbidden when symlinks are followed
なんか不穏なメッセージが出てるがとりあえず次に進む。

$ ./kubler.sh build kubler/glibc
*** generate build order
--> required engines:    docker
--> required stage3:     stage3-amd64-hardened+nomultilib stage3-amd64-musl-hardened
--> required builders:   kubler/bob kubler/bob-musl
--> build sequence:      kubler/busybox kubler/glibc
*** gogo!
--> build image kubler/bob-core
--> phase 2: build kubler/bob-core:20170423
Sending build context to Docker daemon 40.45 kB
Step 1/10 : FROM kubler-gentoo/stage3-amd64-hardened-nomultilib
 ---> e0a88dbeb066
Step 2/10 : LABEL maintainer Erik Dannenberg <erik.dannenberg@xtrade-gmbh.de>
 ---> Using cache
 ---> 3df1f3912ff9
.....

やっとこさ動きました。

終わりに

久々のブログだったので大変だった。
できればPull Requestとかまで行きたいけどどこを書き直そうか。