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が出て全然アップデートしてくれない...。
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とかまで行きたいけどどこを書き直そうか。