Я использую Raspbian OS на Raspberry Pi 3 B + и пытаюсь использовать его вместе с AWS ecs-cli для управления моими контейнерами ECS путем их масштабирования. Я планирую использовать Lambda в будущем, но на данный момент я стараюсь поддерживать низкие показатели в CloudWatch, чтобы оставаться на бесплатном уровне и не получать плату (отдельная тема).
Я пытался установить ecs-cli в соответствии с инструкциями AWS для Linux здесь
$ sudo curl -o /usr/local/bin/ecs-cli https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-linux-amd64-latest
$ sudo chmod +x /usr/local/bin/ecs-cli
$ ecs-cli
Очевидно, что бинарный файл предназначен для ОС x86-64. У меня ошибка:
-bash: / usr / local / bin / ecs-cli: невозможно выполнить двоичный файл: ошибка формата Exec
Дальнейшая проверка файла показывает, что ecs-cli не скомпилирован в архитектуре для raspbian:
$ file ecs-cli
ecs-cli: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped
$ dpkg --print-architecture
armhf
Я попытался найти в Google компиляцию ecs-cli, к сожалению, без удачи. Есть идеи?
Я нашел исходный код ecs-cli на GitHub , поэтому я попытался его клонировать и скомпилировать.
$ pwd
/home/pi
$ git clone https://github.com/aws/amazon-ecs-cli.git
Cloning into 'amazon-ecs-cli'...
..., done.
$ cd amazon-ecs-cli
$ make
./scripts/build_binary.sh ./bin/local
./scripts/build_binary.sh: line 28: go: command not found
./scripts/build_binary.sh: line 32: go: command not found
Makefile:30: recipe for target 'bin/local/ecs-cli' failed
make: *** [bin/local/ecs-cli] Error 127
Ошибка указывает на то, что мне не хватает установки Golang на моей Raspbian OS.
Установите Golang 1.9 (или выше от здесь ) и Godep на Raspbian OS:
$ cd ~
$ wget https://storage.googleapis.com/golang/go1.9.linux-armv6l.tar.gz
$ sudo tar -C /usr/local -xzf go1.9.linux-armv6l.tar.gz
$ export PATH=$PATH:/usr/local/go/bin
$ go version
go version go1.9 linux/arm
$ go get -u github.com/tools/godep
$ export GOPATH=~/go
$ export PATH=$GOPATH/bin:$PATH
$ godep version
godep v80 (linux/arm/go1.9)
#Add paths into profile file;
$ echo "export GOPATH=~/go" >> $HOME/.profile
$ echo "export PATH=/usr/local/go/bin:\$GOPATH/bin:\$PATH" >> $HOME/.profile
Компиляция ecs-cli
$ cd ~/amazon-ecs-cli
$ make
./scripts/build_binary.sh ./bin/local
ecs-cli/main.go:29:2: cannot find package "github.com/cihub/seelog" in any of:
/usr/local/go/src/github.com/cihub/seelog (from $GOROOT)
/home/pi/go/src/github.com/cihub/seelog (from $GOPATH)
...
Похоже, что GO ожидает, что все будет клонировано в /usr/local/go/src/github.com
(Обратите внимание, что команда make может быть интенсивно загружать процессор, я рекомендую останавливать любые другие ресурсоемкие процессы, чтобы избежать зависания Raspberry Pi)
$ mkdir -p /usr/local/go/src/github.com/aws/
$ cd /usr/local/go/src/github.com/aws/
$ git clone https://github.com/aws/amazon-ecs-cli.git
..., done
$ cd /usr/local/go/src/github.com/aws/amazon-ecs-cli
$ make
./scripts/build_binary.sh ./bin/local
Built ecs-cli
Скопируйте в целевое местоположение и запустите его!
$ sudo cp /usr/local/go/src/github.com/aws/amazon-ecs-cli/bin/local/ecs-cli /usr/local/bin/
$ sudo chmod +x /usr/local/bin/ecs-cli
$ ecs-cli --version
ecs-cli version 1.5.0 (*UNKNOWN)
Теперь я могу запустить ecs-cli на Raspbian OS. Надеюсь, это поможет всем, кто будет искать похожие ошибки. Но есть ли более простой способ?