Hatena::ブログ(Diary)

プログラムとかののblog このページをアンテナに追加 RSSフィード Twitter

2017-05-21

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が出て全然アップデートしてくれない...。

どうもMacのsedでは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とかまで行きたいけどどこを書き直そうか。

2015-07-26

新しいMagitにしたら動かなくなった

こんなエラーが出た。

Error (magit): git-commit-mode has to be removed

Magit is no longer compatible with the library `git-commit-mode',
which was used in earlier releases.  Please remove it, so that
Magit can use the successor `git-commit' without the obsolete
library getting in the way.  Then restart Emacs.

Error (magit): git-rebase-mode has to be removed

Magit is no longer compatible with the library `git-rebase-mode',
which was used in earlier releases.  Please remove it, so that
Magit can use the successor `git-rebase' without the obsolete
library getting in the way.  Then restart Emacs.

git-commit-mode, git-rebase-modeは最近のMagitだと互換性がないから削除してくださいとのこと。

magitに関連するパッケージが古いことが原因らしい。

対処法としては、

  1. M-x list-package をする
  2. magitに関連しそうなパッケージをキーボードの"d"で選択する。
    この場合git-commit-mode、git-rebase-modeを削除する。
  3. キーボードの"x"で削除を実行してパッケージを削除する。
  4. 削除したらまたmagitをインストールする。
  5. Emacsを再起動する。

これでmagitが動くようになるはず。

新しくなったmagitはこちら。

f:id:pogin:20150726040359p:image

なんかインデントがなくなって違和感がある…。

ちなみに昔のMagitはこちら。

f:id:pogin:20150726041052p:image

Stashes: が下に来たから見やすくなった。Stashes:はそんな重要な情報じゃないし確かに上になくて良いと思う。Local:が消えて Remote: の情報が少なくなったのはたまに困ることがありそう。

更新履歴

2015/12/29
1. git-commit-mode、git-rebase-modeを削除するように文章を変更。
2. Emacsを再起動する文言を追加

2015-04-02

error "GHCi lacks `:complete' support"

haskell-modeでinteractive-modeの補完を使おうとしたら、こんなメッセージが出た。

[Haskell]error "GHCi lacks `:complete' support"

どういうことかというと、GHC 7.6.3じゃ:completeはサポートしていないという話。

Haskell 7.8に上げろとのこと。

Completion error on OS X: GHCi lacks :complete support ? Issue #281 ? haskell/haskell-mode ? GitHub