저번에 Raspberry Pi 에 docker-compose 를 설치하려고 했지만 arm 기반인 pi 에는 설치가 쉽지 않았다.
https://gukjan9.tistory.com/118
이에 대한 해결 방법을 찾은듯 했으나
docker-compose --version
명령어를 실행해보면
/usr/local/bin/docker-compose: line 1: Not: command not found
가 여전히 떴다.
쉘 스크립트로 다른 명령어들과 같이 실행될땐 docker-compose 명령어가 잘 실행되는듯 했지만
터미널에서 단독으로 docker-compose up 이나 --version 을 치면 command not found 랜다..
아무래도 다시 설치를 해봐야할 것 같아 구글링을 해보았다.
https://github.com/docker/compose/issues/7378
내 상황과 거의 비슷한 경우 발견
해당 쓰레드를 타고 들어가봤다.
https://github.com/docker/compose/issues/6831
대충 내용은 docker-compose 가 arm 를 공식적으로 지원하진 않지만
직접 빌드하는 방식으로 pi 에서도 정상 작동한다고 하는 것 같다.
해당 쓰레드의 these instructions 를 따라 해보기로 했다.
https://www.berthon.eu/2019/revisiting-getting-docker-compose-on-raspberry-pi-arm-the-easy-way/
글을 읽어보니 결국엔 pip 로 설치해야 되는 것 같다.
1. Git clone
git clone https://github.com/docker/compose.git
cd compose
git checkout release
본문에는 git checkout bump-1.23.2 라고 돼있는데
previous guide 를 들어가보면 (https://www.berthon.eu/2017/getting-docker-compose-on-raspberry-pi-arm-the-easy-way/) release 로 checkout 해도 무방한 것 같다.
2. Dependencies 추가
sed -i -e 's:^VENV=/code/.tox/py36:VENV=/code/.venv; python3 -m venv $VENV:' script/build/linux-entrypoint
sed -i -e '/requirements-build.txt/ i $VENV/bin/pip install -q -r requirements.txt' script/build/linux-entrypoint
3. Build
docker build -t docker-compose:armhf -f Dockerfile.armhf .
위 명령어로 빌드를 하면 되는데 여기서 각종 에러들이 발생한다.
① Network error
ERROR: http://dl-cdn.alpinelinux.org/alpine/edge/main: network error (check Internet connection and firewall)
WARNING: Ignoring APKINDEX.066df28d.tar.gz: No such file or directory
ERROR: http://dl-cdn.alpinelinux.org/alpine/edge/community: network error (check Internet connection and firewall)
WARNING: Ignoring APKINDEX.b53994b4.tar.gz: No such file or directory
위에 build 명령어를 치니 (로그가 훨씬 지나가버려서 정확하진 않지만) 위 같은 에러가 떴었다.
https://stackoverflow.com/questions/58603749/internet-connection-issue-while-creating-docker-image
docker build 시 --network=host 옵션을 추가해주면 해결된다 한다.
--network 옵션을 주고 build 하면 아래와 같은 에러가 주르륵 발생한다.
[+] Building 2312.3s (28/31) docker:default
=> [internal] load build definition from Dockerfile.armhf 0.0s
=> => transferring dockerfile: 2.06kB 0.0s
=> [internal] load metadata for docker.io/library/python:3.7.5-alpine3.10 2.6s
=> [internal] load metadata for docker.io/library/alpine:3.10.3 2.6s
=> [internal] load metadata for docker.io/library/docker:19.03.5 2.6s
=> [auth] library/alpine:pull token for registry-1.docker.io 0.0s
=> [auth] library/docker:pull token for registry-1.docker.io 0.0s
=> [auth] library/python:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 163B 0.0s
=> [runtime-alpine 1/1] FROM docker.io/library/alpine:3.10.3@sha256:c19173c5ada610a5989151111163d28a67368362762534d8a8121ce95cf2bd5a 0.0s
=> [build-alpine 1/2] FROM docker.io/library/python:3.7.5-alpine3.10@sha256:de9fc5bc46cb1a7e2222b976394ea8aa0290592e3075457d41c5f246f176b1bf 0.0s
=> [internal] load build context 0.4s
=> => transferring context: 24.56kB 0.3s
=> [docker-cli 1/1] FROM docker.io/library/docker:19.03.5@sha256:0b90b0aefd15794e4d5bea2debc3b761c1d3481a92ec7166f8453652d0deba95 0.0s
=> CACHED [runtime 1/3] COPY docker-compose-entrypoint.sh /usr/local/bin/ 0.0s
=> CACHED [runtime 2/3] COPY --from=docker-cli /usr/local/bin/docker /usr/local/bin/docker 0.0s
=> CACHED [build-alpine 2/2] RUN apk add --no-cache bash build-base ca-certificates curl gcc git libc-dev libffi-dev libgcc make musl 0.0s
=> CACHED [build 1/15] COPY docker-compose-entrypoint.sh /usr/local/bin/ 0.0s
=> CACHED [build 2/15] COPY --from=docker-cli /usr/local/bin/docker /usr/local/bin/docker 0.0s
=> CACHED [build 3/15] WORKDIR /code/ 0.0s
=> CACHED [build 4/15] RUN pip install virtualenv==16.2.0 0.0s
=> CACHED [build 5/15] RUN pip install tox==2.9.1 0.0s
=> CACHED [build 6/15] COPY requirements.txt . 0.0s
=> CACHED [build 7/15] COPY requirements-dev.txt . 0.0s
=> CACHED [build 8/15] COPY .pre-commit-config.yaml . 0.0s
=> CACHED [build 9/15] COPY tox.ini . 0.0s
=> CACHED [build 10/15] COPY setup.py . 0.0s
=> CACHED [build 11/15] COPY README.md . 0.0s
=> CACHED [build 12/15] COPY compose compose/ 0.0s
=> ERROR [build 13/15] RUN tox --notest 2308.8s
------
> [build 13/15] RUN tox --notest:
3.340 py27 create: /code/.tox/py27
37.54 py27 installdeps: -rrequirements.txt, -rrequirements-dev.txt
1082.2 py27 develop-inst: /code
1099.0 py27 installed: DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.,atomicwrites==1.4.1,attrs==21.4.0,backports.functools-lru-cache==1.6.6,backports.shutil-get-terminal-size==1.0.0,backports.ssl-match-hostname==3.5.0.1,bcrypt==3.1.7,cached-property==1.5.1,certifi==2019.11.28,cffi==1.15.1,chardet==3.0.4,configparser==4.0.2,contextlib2==0.6.0.post1,coverage==5.0.3,cryptography==3.3.2,ddt==1.2.2,docker==4.1.0,# Editable install with no version control (docker-compose==1.25.2rc1),-e /code,docker-pycreds==0.4.0,dockerpty==0.4.1,docopt==0.6.2,entrypoints==0.3,enum34==1.1.6,flake8==3.7.9,funcsigs==1.0.2,functools32==3.2.3.post2,idna==2.8,importlib-metadata==2.1.3,ipaddress==1.0.23,jsonschema==3.2.0,mccabe==0.6.1,mock==3.0.5,more-itertools==5.0.0,packaging==20.9,paramiko==2.7.1,pathlib2==2.3.7.post1,pluggy==0.13.1,py==1.11.0,pycodestyle==2.5.0,pycparser==2.21,pyflakes==2.1.1,PyNaCl==1.4.0,pyparsing==2.4.7,pyrsistent==0.16.1,PySocks==1.7.1,pytest==4.6.5,pytest-cov==2.8.1,PyYAML==5.3,requests==2.22.0,scandir==1.10.0,six==1.12.0,subprocess32==3.5.4,texttable==1.6.2,typing==3.10.0.0,urllib3==1.25.11,wcwidth==0.2.13,websocket-client==0.57.0,zipp==1.2.0
1099.0 py37 create: /code/.tox/py37
1146.3 py37 installdeps: -rrequirements.txt, -rrequirements-dev.txt
2166.5 ERROR: invocation failed (exit code 1), logfile: /code/.tox/py37/log/py37-1.log
2166.6 ERROR: actionid: py37
2166.6 msg: getenv
2166.6 cmdargs: ['/code/.tox/py37/bin/pip', 'install', '-rrequirements.txt', '-rrequirements-dev.txt']
2166.6
2166.6 Ignoring backports.ssl-match-hostname: markers 'python_version < "3"' don't match your environment
2166.6 Ignoring colorama: markers 'sys_platform == "win32"' don't match your environment
2166.6 Ignoring enum34: markers 'python_version < "3.4"' don't match your environment
2166.6 Ignoring functools32: markers 'python_version < "3.2"' don't match your environment
2166.6 Ignoring pypiwin32: markers 'sys_platform == "win32" and python_version < "3.6"' don't match your environment
2166.6 Ignoring pypiwin32: markers 'sys_platform == "win32" and python_version >= "3.6"' don't match your environment
2166.6 Ignoring subprocess32: markers 'python_version < "3.2"' don't match your environment
2166.6 Ignoring urllib3: markers 'python_version == "3.3"' don't match your environment
2166.6 Ignoring pytest: markers 'python_version < "3.5"' don't match your environment
2166.6 Collecting backports.shutil_get_terminal_size==1.0.0 (from -r requirements.txt (line 1))
2166.6 Downloading backports.shutil_get_terminal_size-1.0.0-py2.py3-none-any.whl (6.5 kB)
2166.6 Collecting cached-property==1.5.1 (from -r requirements.txt (line 3))
2166.6 Downloading cached_property-1.5.1-py2.py3-none-any.whl (6.0 kB)
2166.6 Collecting certifi==2019.11.28 (from -r requirements.txt (line 4))
2166.6 Downloading certifi-2019.11.28-py2.py3-none-any.whl (156 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 156.0/156.0 kB 1.0 MB/s eta 0:00:00
2166.6 Collecting chardet==3.0.4 (from -r requirements.txt (line 5))
2166.6 Downloading chardet-3.0.4-py2.py3-none-any.whl (133 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.4/133.4 kB 1.7 MB/s eta 0:00:00
2166.6 Collecting docker==4.1.0 (from -r requirements.txt (line 7))
2166.6 Downloading docker-4.1.0-py2.py3-none-any.whl (139 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 139.1/139.1 kB 1.7 MB/s eta 0:00:00
2166.6 Collecting docker-pycreds==0.4.0 (from -r requirements.txt (line 8))
2166.6 Downloading docker_pycreds-0.4.0-py2.py3-none-any.whl (9.0 kB)
2166.6 Collecting dockerpty==0.4.1 (from -r requirements.txt (line 9))
2166.6 Downloading dockerpty-0.4.1.tar.gz (13 kB)
2166.6 Preparing metadata (setup.py): started
2166.6 Preparing metadata (setup.py): finished with status 'done'
2166.6 Collecting docopt==0.6.2 (from -r requirements.txt (line 10))
2166.6 Downloading docopt-0.6.2.tar.gz (25 kB)
2166.6 Preparing metadata (setup.py): started
2166.6 Preparing metadata (setup.py): finished with status 'done'
2166.6 Collecting idna==2.8 (from -r requirements.txt (line 13))
2166.6 Downloading idna-2.8-py2.py3-none-any.whl (58 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.6/58.6 kB 1.1 MB/s eta 0:00:00
2166.6 Collecting ipaddress==1.0.23 (from -r requirements.txt (line 14))
2166.6 Downloading ipaddress-1.0.23-py2.py3-none-any.whl (18 kB)
2166.6 Collecting jsonschema==3.2.0 (from -r requirements.txt (line 15))
2166.6 Downloading jsonschema-3.2.0-py2.py3-none-any.whl (56 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 kB 901.7 kB/s eta 0:00:00
2166.6 Collecting paramiko==2.7.1 (from -r requirements.txt (line 16))
2166.6 Downloading paramiko-2.7.1-py2.py3-none-any.whl (206 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 206.8/206.8 kB 1.3 MB/s eta 0:00:00
2166.6 Collecting PySocks==1.7.1 (from -r requirements.txt (line 19))
2166.6 Downloading PySocks-1.7.1-py3-none-any.whl (16 kB)
2166.6 Collecting PyYAML==5.3 (from -r requirements.txt (line 20))
2166.6 Downloading PyYAML-5.3.tar.gz (268 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 268.2/268.2 kB 1.9 MB/s eta 0:00:00
2166.6 Preparing metadata (setup.py): started
2166.6 Preparing metadata (setup.py): finished with status 'done'
2166.6 Collecting requests==2.22.0 (from -r requirements.txt (line 21))
2166.6 Downloading requests-2.22.0-py2.py3-none-any.whl (57 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.0/58.0 kB 917.0 kB/s eta 0:00:00
2166.6 Collecting six==1.12.0 (from -r requirements.txt (line 22))
2166.6 Downloading six-1.12.0-py2.py3-none-any.whl (10 kB)
2166.6 Collecting texttable==1.6.2 (from -r requirements.txt (line 24))
2166.6 Downloading texttable-1.6.2-py2.py3-none-any.whl (10 kB)
2166.6 Collecting websocket-client==0.57.0 (from -r requirements.txt (line 26))
2166.6 Downloading websocket_client-0.57.0-py2.py3-none-any.whl (200 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 200.9/200.9 kB 1.8 MB/s eta 0:00:00
2166.6 Collecting coverage==5.0.3 (from -r requirements-dev.txt (line 1))
2166.6 Downloading coverage-5.0.3.tar.gz (679 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 679.2/679.2 kB 2.5 MB/s eta 0:00:00
2166.6 Preparing metadata (setup.py): started
2166.6 Preparing metadata (setup.py): finished with status 'done'
2166.6 Collecting ddt==1.2.2 (from -r requirements-dev.txt (line 2))
2166.6 Downloading ddt-1.2.2-py2.py3-none-any.whl (5.4 kB)
2166.6 Collecting flake8==3.7.9 (from -r requirements-dev.txt (line 3))
2166.6 Downloading flake8-3.7.9-py2.py3-none-any.whl (69 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 69.9/69.9 kB 1.5 MB/s eta 0:00:00
2166.6 Collecting mock==3.0.5 (from -r requirements-dev.txt (line 4))
2166.6 Downloading mock-3.0.5-py2.py3-none-any.whl (25 kB)
2166.6 Collecting pytest==5.3.2 (from -r requirements-dev.txt (line 5))
2166.6 Downloading pytest-5.3.2-py3-none-any.whl (234 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 234.5/234.5 kB 2.7 MB/s eta 0:00:00
2166.6 Collecting pytest-cov==2.8.1 (from -r requirements-dev.txt (line 7))
2166.6 Downloading pytest_cov-2.8.1-py2.py3-none-any.whl (18 kB)
2166.6 Collecting attrs>=17.4.0 (from jsonschema==3.2.0->-r requirements.txt (line 15))
2166.6 Downloading attrs-23.2.0-py3-none-any.whl.metadata (9.5 kB)
2166.6 Collecting pyrsistent>=0.14.0 (from jsonschema==3.2.0->-r requirements.txt (line 15))
2166.6 Downloading pyrsistent-0.19.3-py3-none-any.whl (57 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.5/57.5 kB 876.2 kB/s eta 0:00:00
2166.6 Requirement already satisfied: setuptools in ./.tox/py37/lib/python3.7/site-packages (from jsonschema==3.2.0->-r requirements.txt (line 15)) (68.0.0)
2166.6 Collecting importlib-metadata (from jsonschema==3.2.0->-r requirements.txt (line 15))
2166.6 Downloading importlib_metadata-6.7.0-py3-none-any.whl.metadata (4.9 kB)
2166.6 Collecting bcrypt>=3.1.3 (from paramiko==2.7.1->-r requirements.txt (line 16))
2166.6 Downloading bcrypt-4.1.2.tar.gz (26 kB)
2166.6 Installing build dependencies: started
2166.6 Installing build dependencies: finished with status 'done'
2166.6 Getting requirements to build wheel: started
2166.6 Getting requirements to build wheel: finished with status 'done'
2166.6 Preparing metadata (pyproject.toml): started
2166.6 Preparing metadata (pyproject.toml): finished with status 'done'
2166.6 Collecting cryptography>=2.5 (from paramiko==2.7.1->-r requirements.txt (line 16))
2166.6 Downloading cryptography-42.0.1.tar.gz (672 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 672.4/672.4 kB 2.7 MB/s eta 0:00:00
2166.6 Installing build dependencies: started
2166.6 Installing build dependencies: still running...
2166.6 Installing build dependencies: finished with status 'done'
2166.6 Getting requirements to build wheel: started
2166.6 Getting requirements to build wheel: finished with status 'done'
2166.6 Preparing metadata (pyproject.toml): started
2166.6 Preparing metadata (pyproject.toml): finished with status 'done'
2166.6 Collecting pynacl>=1.0.1 (from paramiko==2.7.1->-r requirements.txt (line 16))
2166.6 Downloading PyNaCl-1.5.0.tar.gz (3.4 MB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.4/3.4 MB 3.1 MB/s eta 0:00:00
2166.6 Installing build dependencies: started
2166.6 Installing build dependencies: finished with status 'done'
2166.6 Getting requirements to build wheel: started
2166.6 Getting requirements to build wheel: finished with status 'done'
2166.6 Preparing metadata (pyproject.toml): started
2166.6 Preparing metadata (pyproject.toml): finished with status 'done'
2166.6 Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests==2.22.0->-r requirements.txt (line 21))
2166.6 Downloading urllib3-1.25.11-py2.py3-none-any.whl (127 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 128.0/128.0 kB 915.2 kB/s eta 0:00:00
2166.6 Collecting entrypoints<0.4.0,>=0.3.0 (from flake8==3.7.9->-r requirements-dev.txt (line 3))
2166.6 Downloading entrypoints-0.3-py2.py3-none-any.whl (11 kB)
2166.6 Collecting pyflakes<2.2.0,>=2.1.0 (from flake8==3.7.9->-r requirements-dev.txt (line 3))
2166.6 Downloading pyflakes-2.1.1-py2.py3-none-any.whl (59 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 60.0/60.0 kB 823.7 kB/s eta 0:00:00
2166.6 Collecting pycodestyle<2.6.0,>=2.5.0 (from flake8==3.7.9->-r requirements-dev.txt (line 3))
2166.6 Downloading pycodestyle-2.5.0-py2.py3-none-any.whl (51 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 51.2/51.2 kB 769.4 kB/s eta 0:00:00
2166.6 Collecting mccabe<0.7.0,>=0.6.0 (from flake8==3.7.9->-r requirements-dev.txt (line 3))
2166.6 Downloading mccabe-0.6.1-py2.py3-none-any.whl (8.6 kB)
2166.6 Collecting py>=1.5.0 (from pytest==5.3.2->-r requirements-dev.txt (line 5))
2166.6 Downloading py-1.11.0-py2.py3-none-any.whl (98 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.7/98.7 kB 1.9 MB/s eta 0:00:00
2166.6 Collecting packaging (from pytest==5.3.2->-r requirements-dev.txt (line 5))
2166.6 Downloading packaging-23.2-py3-none-any.whl.metadata (3.2 kB)
2166.6 Collecting more-itertools>=4.0.0 (from pytest==5.3.2->-r requirements-dev.txt (line 5))
2166.6 Downloading more_itertools-9.1.0-py3-none-any.whl (54 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 54.2/54.2 kB 791.0 kB/s eta 0:00:00
2166.6 Collecting pluggy<1.0,>=0.12 (from pytest==5.3.2->-r requirements-dev.txt (line 5))
2166.6 Downloading pluggy-0.13.1-py2.py3-none-any.whl (18 kB)
2166.6 Collecting wcwidth (from pytest==5.3.2->-r requirements-dev.txt (line 5))
2166.6 Downloading wcwidth-0.2.13-py2.py3-none-any.whl.metadata (14 kB)
2166.6 Collecting cffi>=1.12 (from cryptography>=2.5->paramiko==2.7.1->-r requirements.txt (line 16))
2166.6 Using cached cffi-1.15.1-cp37-cp37m-linux_armv7l.whl
2166.6 Collecting zipp>=0.5 (from importlib-metadata->jsonschema==3.2.0->-r requirements.txt (line 15))
2166.6 Downloading zipp-3.15.0-py3-none-any.whl (6.8 kB)
2166.6 Collecting typing-extensions>=3.6.4 (from importlib-metadata->jsonschema==3.2.0->-r requirements.txt (line 15))
2166.6 Using cached typing_extensions-4.7.1-py3-none-any.whl.metadata (3.1 kB)
2166.6 Collecting pycparser (from cffi>=1.12->cryptography>=2.5->paramiko==2.7.1->-r requirements.txt (line 16))
2166.6 Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB)
2166.6 Downloading attrs-23.2.0-py3-none-any.whl (60 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 60.8/60.8 kB 852.5 kB/s eta 0:00:00
2166.6 Downloading importlib_metadata-6.7.0-py3-none-any.whl (22 kB)
2166.6 Downloading packaging-23.2-py3-none-any.whl (53 kB)
2166.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 53.0/53.0 kB 753.4 kB/s eta 0:00:00
2166.6 Downloading wcwidth-0.2.13-py2.py3-none-any.whl (34 kB)
2166.6 Using cached typing_extensions-4.7.1-py3-none-any.whl (33 kB)
2166.6 Building wheels for collected packages: dockerpty, docopt, PyYAML, coverage, bcrypt, cryptography, pynacl
2166.6 Building wheel for dockerpty (setup.py): started
2166.6 Building wheel for dockerpty (setup.py): finished with status 'done'
2166.6 Created wheel for dockerpty: filename=dockerpty-0.4.1-py3-none-any.whl size=16597 sha256=fc8117557a73ff08f1e26281c41144a7b757bb19d517991a5802f48c1dbe0443
2166.6 Stored in directory: /tmp/.cache/pip/wheels/0b/40/ea/b275182c42dc7be184c36518d42999bc5267268af2639e409b
2166.6 Building wheel for docopt (setup.py): started
2166.6 Building wheel for docopt (setup.py): finished with status 'done'
2166.6 Created wheel for docopt: filename=docopt-0.6.2-py2.py3-none-any.whl size=13706 sha256=f22dd624d74ff53017ae25dc9544326384ba8aadd38670a1425b5e2cd94dc505
2166.6 Stored in directory: /tmp/.cache/pip/wheels/72/b0/3f/1d95f96ff986c7dfffe46ce2be4062f38ebd04b506c77c81b9
2166.6 Building wheel for PyYAML (setup.py): started
2166.6 Building wheel for PyYAML (setup.py): finished with status 'done'
2166.6 Created wheel for PyYAML: filename=PyYAML-5.3-cp37-cp37m-linux_armv7l.whl size=44246 sha256=77f21386f2f9f36c92fd2ee3ff171dda4c908c51e221774aa86d8835beb92397
2166.6 Stored in directory: /tmp/.cache/pip/wheels/8a/55/a4/c0a81d27c33462cfdcb904db018f5550197e88b2b6b85beed2
2166.6 Building wheel for coverage (setup.py): started
2166.6 Building wheel for coverage (setup.py): finished with status 'done'
2166.6 Created wheel for coverage: filename=coverage-5.0.3-cp37-cp37m-linux_armv7l.whl size=233113 sha256=26515fbc8987ce65cb53207a39927106703beed226330b5fea6cf71065362973
2166.6 Stored in directory: /tmp/.cache/pip/wheels/9a/28/2e/363fdd99aaeb9b0d0a6ade93b69ecaf0e5f5a0a2b52133a7e7
2166.6 Building wheel for bcrypt (pyproject.toml): started
2166.6 Building wheel for bcrypt (pyproject.toml): finished with status 'error'
2166.6 error: subprocess-exited-with-error
2166.6
2166.6 × Building wheel for bcrypt (pyproject.toml) did not run successfully.
2166.6 │ exit code: 1
2166.6 ╰─> [59 lines of output]
2166.6 running bdist_wheel
2166.6 running build
2166.6 running build_py
2166.6 creating build
2166.6 creating build/lib.linux-armv7l-cpython-37
2166.6 creating build/lib.linux-armv7l-cpython-37/bcrypt
2166.6 copying src/bcrypt/__init__.py -> build/lib.linux-armv7l-cpython-37/bcrypt
2166.6 running egg_info
2166.6 writing src/bcrypt.egg-info/PKG-INFO
2166.6 writing dependency_links to src/bcrypt.egg-info/dependency_links.txt
2166.6 writing requirements to src/bcrypt.egg-info/requires.txt
2166.6 writing top-level names to src/bcrypt.egg-info/top_level.txt
2166.6 reading manifest file 'src/bcrypt.egg-info/SOURCES.txt'
2166.6 reading manifest template 'MANIFEST.in'
2166.6 /tmp/pip-build-env-ax4v092g/overlay/lib/python3.7/site-packages/setuptools/config/pyprojecttoml.py:66: _BetaConfiguration: Support for `[tool.setuptools]` in `pyproject.toml` is still *beta*.
2166.6 config = read_configuration(filepath, True, ignore_option_errors, dist)
2166.6 warning: no previously-included files found matching 'requirements.txt'
2166.6 warning: no previously-included files found matching 'release.py'
2166.6 warning: no previously-included files found matching 'mypy.ini'
2166.6 warning: no previously-included files matching '*' found under directory '.github'
2166.6 warning: no previously-included files found matching 'src/_bcrypt/target'
2166.6 warning: no previously-included files matching '*' found under directory 'src/_bcrypt/target'
2166.6 adding license file 'LICENSE'
2166.6 writing manifest file 'src/bcrypt.egg-info/SOURCES.txt'
2166.6 copying src/bcrypt/__init__.pyi -> build/lib.linux-armv7l-cpython-37/bcrypt
2166.6 copying src/bcrypt/py.typed -> build/lib.linux-armv7l-cpython-37/bcrypt
2166.6 running build_ext
2166.6 running build_rust
2166.6
2166.6 =============================DEBUG ASSISTANCE=============================
2166.6 If you are seeing a compilation error please try the following steps to
2166.6 successfully install bcrypt:
2166.6 1) Upgrade to the latest pip and try again. This will fix errors for most
2166.6 users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip
2166.6 2) Ensure you have a recent Rust toolchain installed. bcrypt requires
2166.6 rustc >= 1.64.0. (1.63 may be used by setting the BCRYPT_ALLOW_RUST_163
2166.6 environment variable)
2166.6
2166.6 Python: 3.7.5
2166.6 platform: Linux-5.4.0-1101-raspi-armv7l-with
2166.6 pip: n/a
2166.6 setuptools: 68.0.0
2166.6 setuptools_rust: 1.7.0
2166.6 rustc: n/a
2166.6 =============================DEBUG ASSISTANCE=============================
2166.6
2166.6 error: can't find Rust compiler
2166.6
2166.6 If you are using an outdated pip version, it is possible a prebuilt wheel is available for this package but pip is not able to install from it. Installing from the wheel would avoid the need for a Rust compiler.
2166.6
2166.6 To update pip, run:
2166.6
2166.6 pip install --upgrade pip
2166.6
2166.6 and then retry package installation.
2166.6
2166.6 If you did intend to build this package from source, try installing a Rust compiler from your system package manager and ensure it is on the PATH during installation. Alternatively, rustup (available at https://rustup.rs) is the recommended way to download and update the Rust compiler toolchain.
2166.6
2166.6 This package requires Rust >=1.63.0.
2166.6 [end of output]
2166.6
2166.6 note: This error originates from a subprocess, and is likely not a problem with pip.
2166.6 ERROR: Failed building wheel for bcrypt
2166.6 Building wheel for cryptography (pyproject.toml): started
2166.6 Building wheel for cryptography (pyproject.toml): finished with status 'error'
2166.6 error: subprocess-exited-with-error
2166.6
2166.6 × Building wheel for cryptography (pyproject.toml) did not run successfully.
2166.6 │ exit code: 1
2166.6 ╰─> [153 lines of output]
2166.6 running bdist_wheel
2166.6 running build
2166.6 running build_py
2166.6 creating build
2166.6 creating build/lib.linux-armv7l-cpython-37
2166.6 creating build/lib.linux-armv7l-cpython-37/cryptography
2166.6 copying src/cryptography/__init__.py -> build/lib.linux-armv7l-cpython-37/cryptography
2166.6 copying src/cryptography/__about__.py -> build/lib.linux-armv7l-cpython-37/cryptography
2166.6 copying src/cryptography/exceptions.py -> build/lib.linux-armv7l-cpython-37/cryptography
2166.6 copying src/cryptography/fernet.py -> build/lib.linux-armv7l-cpython-37/cryptography
2166.6 copying src/cryptography/utils.py -> build/lib.linux-armv7l-cpython-37/cryptography
2166.6 creating build/lib.linux-armv7l-cpython-37/cryptography/hazmat
2166.6 copying src/cryptography/hazmat/__init__.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat
2166.6 copying src/cryptography/hazmat/_oid.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat
2166.6 creating build/lib.linux-armv7l-cpython-37/cryptography/x509
2166.6 copying src/cryptography/x509/base.py -> build/lib.linux-armv7l-cpython-37/cryptography/x509
2166.6 copying src/cryptography/x509/__init__.py -> build/lib.linux-armv7l-cpython-37/cryptography/x509
2166.6 copying src/cryptography/x509/name.py -> build/lib.linux-armv7l-cpython-37/cryptography/x509
2166.6 copying src/cryptography/x509/ocsp.py -> build/lib.linux-armv7l-cpython-37/cryptography/x509
2166.6 copying src/cryptography/x509/general_name.py -> build/lib.linux-armv7l-cpython-37/cryptography/x509
2166.6 copying src/cryptography/x509/oid.py -> build/lib.linux-armv7l-cpython-37/cryptography/x509
2166.6 copying src/cryptography/x509/certificate_transparency.py -> build/lib.linux-armv7l-cpython-37/cryptography/x509
2166.6 copying src/cryptography/x509/verification.py -> build/lib.linux-armv7l-cpython-37/cryptography/x509
2166.6 copying src/cryptography/x509/extensions.py -> build/lib.linux-armv7l-cpython-37/cryptography/x509
2166.6 creating build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings
2166.6 copying src/cryptography/hazmat/bindings/__init__.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings
2166.6 creating build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives
2166.6 copying src/cryptography/hazmat/primitives/__init__.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives
2166.6 copying src/cryptography/hazmat/primitives/_serialization.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives
2166.6 copying src/cryptography/hazmat/primitives/hmac.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives
2166.6 copying src/cryptography/hazmat/primitives/padding.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives
2166.6 copying src/cryptography/hazmat/primitives/_asymmetric.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives
2166.6 copying src/cryptography/hazmat/primitives/hashes.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives
2166.6 copying src/cryptography/hazmat/primitives/keywrap.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives
2166.6 copying src/cryptography/hazmat/primitives/constant_time.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives
2166.6 copying src/cryptography/hazmat/primitives/_cipheralgorithm.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives
2166.6 copying src/cryptography/hazmat/primitives/poly1305.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives
2166.6 copying src/cryptography/hazmat/primitives/cmac.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives
2166.6 creating build/lib.linux-armv7l-cpython-37/cryptography/hazmat/backends
2166.6 copying src/cryptography/hazmat/backends/__init__.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/backends
2166.6 creating build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/openssl
2166.6 copying src/cryptography/hazmat/bindings/openssl/__init__.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/openssl
2166.6 copying src/cryptography/hazmat/bindings/openssl/binding.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/openssl
2166.6 copying src/cryptography/hazmat/bindings/openssl/_conditional.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/openssl
2166.6 creating build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/ciphers
2166.6 copying src/cryptography/hazmat/primitives/ciphers/base.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/ciphers
2166.6 copying src/cryptography/hazmat/primitives/ciphers/__init__.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/ciphers
2166.6 copying src/cryptography/hazmat/primitives/ciphers/algorithms.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/ciphers
2166.6 copying src/cryptography/hazmat/primitives/ciphers/aead.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/ciphers
2166.6 copying src/cryptography/hazmat/primitives/ciphers/modes.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/ciphers
2166.6 creating build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/twofactor
2166.6 copying src/cryptography/hazmat/primitives/twofactor/__init__.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/twofactor
2166.6 copying src/cryptography/hazmat/primitives/twofactor/hotp.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/twofactor
2166.6 copying src/cryptography/hazmat/primitives/twofactor/totp.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/twofactor
2166.6 creating build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/serialization
2166.6 copying src/cryptography/hazmat/primitives/serialization/base.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/serialization
2166.6 copying src/cryptography/hazmat/primitives/serialization/__init__.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/serialization
2166.6 copying src/cryptography/hazmat/primitives/serialization/pkcs12.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/serialization
2166.6 copying src/cryptography/hazmat/primitives/serialization/pkcs7.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/serialization
2166.6 copying src/cryptography/hazmat/primitives/serialization/ssh.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/serialization
2166.6 creating build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/asymmetric
2166.6 copying src/cryptography/hazmat/primitives/asymmetric/__init__.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/asymmetric
2166.6 copying src/cryptography/hazmat/primitives/asymmetric/types.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/asymmetric
2166.6 copying src/cryptography/hazmat/primitives/asymmetric/padding.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/asymmetric
2166.6 copying src/cryptography/hazmat/primitives/asymmetric/dh.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/asymmetric
2166.6 copying src/cryptography/hazmat/primitives/asymmetric/ec.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/asymmetric
2166.6 copying src/cryptography/hazmat/primitives/asymmetric/rsa.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/asymmetric
2166.6 copying src/cryptography/hazmat/primitives/asymmetric/dsa.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/asymmetric
2166.6 copying src/cryptography/hazmat/primitives/asymmetric/x25519.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/asymmetric
2166.6 copying src/cryptography/hazmat/primitives/asymmetric/x448.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/asymmetric
2166.6 copying src/cryptography/hazmat/primitives/asymmetric/ed448.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/asymmetric
2166.6 copying src/cryptography/hazmat/primitives/asymmetric/utils.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/asymmetric
2166.6 copying src/cryptography/hazmat/primitives/asymmetric/ed25519.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/asymmetric
2166.6 creating build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/kdf
2166.6 copying src/cryptography/hazmat/primitives/kdf/__init__.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/kdf
2166.6 copying src/cryptography/hazmat/primitives/kdf/scrypt.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/kdf
2166.6 copying src/cryptography/hazmat/primitives/kdf/hkdf.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/kdf
2166.6 copying src/cryptography/hazmat/primitives/kdf/kbkdf.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/kdf
2166.6 copying src/cryptography/hazmat/primitives/kdf/x963kdf.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/kdf
2166.6 copying src/cryptography/hazmat/primitives/kdf/concatkdf.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/kdf
2166.6 copying src/cryptography/hazmat/primitives/kdf/pbkdf2.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/primitives/kdf
2166.6 creating build/lib.linux-armv7l-cpython-37/cryptography/hazmat/backends/openssl
2166.6 copying src/cryptography/hazmat/backends/openssl/__init__.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/backends/openssl
2166.6 copying src/cryptography/hazmat/backends/openssl/ciphers.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/backends/openssl
2166.6 copying src/cryptography/hazmat/backends/openssl/decode_asn1.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/backends/openssl
2166.6 copying src/cryptography/hazmat/backends/openssl/backend.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/backends/openssl
2166.6 copying src/cryptography/hazmat/backends/openssl/aead.py -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/backends/openssl
2166.6 running egg_info
2166.6 writing src/cryptography.egg-info/PKG-INFO
2166.6 writing dependency_links to src/cryptography.egg-info/dependency_links.txt
2166.6 writing requirements to src/cryptography.egg-info/requires.txt
2166.6 writing top-level names to src/cryptography.egg-info/top_level.txt
2166.6 reading manifest file 'src/cryptography.egg-info/SOURCES.txt'
2166.6 reading manifest template 'MANIFEST.in'
2166.6 /tmp/pip-build-env-98mqp972/overlay/lib/python3.7/site-packages/setuptools/config/pyprojecttoml.py:66: _BetaConfiguration: Support for `[tool.setuptools]` in `pyproject.toml` is still *beta*.
2166.6 config = read_configuration(filepath, True, ignore_option_errors, dist)
2166.6 warning: no files found matching '*.c' under directory 'src/_cffi_src'
2166.6 warning: no files found matching '*.h' under directory 'src/_cffi_src'
2166.6 no previously-included directories found matching 'docs/_build'
2166.6 warning: no previously-included files found matching 'vectors'
2166.6 warning: no previously-included files matching '*' found under directory 'vectors'
2166.6 warning: no previously-included files found matching 'src/rust/target'
2166.6 warning: no previously-included files matching '*' found under directory 'src/rust/target'
2166.6 warning: no previously-included files matching '*' found under directory '.github'
2166.6 warning: no previously-included files found matching 'release.py'
2166.6 warning: no previously-included files found matching '.readthedocs.yml'
2166.6 warning: no previously-included files found matching 'ci-constraints-requirements.txt'
2166.6 warning: no previously-included files found matching 'mypy.ini'
2166.6 adding license file 'LICENSE'
2166.6 adding license file 'LICENSE.APACHE'
2166.6 adding license file 'LICENSE.BSD'
2166.6 writing manifest file 'src/cryptography.egg-info/SOURCES.txt'
2166.6 copying src/cryptography/py.typed -> build/lib.linux-armv7l-cpython-37/cryptography
2166.6 creating build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust
2166.6 copying src/cryptography/hazmat/bindings/_rust/__init__.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust
2166.6 copying src/cryptography/hazmat/bindings/_rust/_openssl.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust
2166.6 copying src/cryptography/hazmat/bindings/_rust/asn1.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust
2166.6 copying src/cryptography/hazmat/bindings/_rust/exceptions.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust
2166.6 copying src/cryptography/hazmat/bindings/_rust/ocsp.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust
2166.6 copying src/cryptography/hazmat/bindings/_rust/pkcs7.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust
2166.6 copying src/cryptography/hazmat/bindings/_rust/x509.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust
2166.6 creating build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/__init__.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/aead.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/dh.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/dsa.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/ec.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/hashes.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/keys.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/x25519.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 copying src/cryptography/hazmat/bindings/_rust/openssl/x448.pyi -> build/lib.linux-armv7l-cpython-37/cryptography/hazmat/bindings/_rust/openssl
2166.6 running build_ext
2166.6 running build_rust
2166.6 error: can't find Rust compiler
2166.6
2166.6 If you are using an outdated pip version, it is possible a prebuilt wheel is available for this package but pip is not able to install from it. Installing from the wheel would avoid the need for a Rust compiler.
2166.6
2166.6 To update pip, run:
2166.6
2166.6 pip install --upgrade pip
2166.6
2166.6 and then retry package installation.
2166.6
2166.6 If you did intend to build this package from source, try installing a Rust compiler from your system package manager and ensure it is on the PATH during installation. Alternatively, rustup (available at https://rustup.rs) is the recommended way to download and update the Rust compiler toolchain.
2166.6
2166.6 This package requires Rust >=1.63.0.
2166.6 [end of output]
2166.6
2166.6 note: This error originates from a subprocess, and is likely not a problem with pip.
2166.6 ERROR: Failed building wheel for cryptography
2166.6 Building wheel for pynacl (pyproject.toml): started
2166.6 Building wheel for pynacl (pyproject.toml): still running...
2166.6 Building wheel for pynacl (pyproject.toml): still running...
2166.6 Building wheel for pynacl (pyproject.toml): still running...
2166.6 Building wheel for pynacl (pyproject.toml): still running...
2166.6 Building wheel for pynacl (pyproject.toml): still running...
2166.6 Building wheel for pynacl (pyproject.toml): still running...
2166.6 Building wheel for pynacl (pyproject.toml): still running...
2166.6 Building wheel for pynacl (pyproject.toml): still running...
2166.6 Building wheel for pynacl (pyproject.toml): still running...
2166.6 Building wheel for pynacl (pyproject.toml): still running...
2166.6 Building wheel for pynacl (pyproject.toml): still running...
2166.6 Building wheel for pynacl (pyproject.toml): finished with status 'done'
2166.6 Created wheel for pynacl: filename=PyNaCl-1.5.0-cp37-cp37m-linux_armv7l.whl size=774944 sha256=cc7e107fa32d0a9d98e25de4040d44d0d10d98eeeb851a6aece5090d4a210a80
2166.6 Stored in directory: /tmp/.cache/pip/wheels/0f/f3/ee/af726acbcb0c55d6eb264b835122ffedf886a090849ecb13c2
2166.6 Successfully built dockerpty docopt PyYAML coverage pynacl
2166.6 Failed to build bcrypt cryptography
2166.6 ERROR: Could not build wheels for bcrypt, cryptography, which is required to install pyproject.toml-based projects
2166.6
backports.shutil_get_terminal_size==1.0.0
backports.ssl-match-hostname==3.5.0.1; python_version < '3'
cached-property==1.5.1
certifi==2019.11.28
chardet==3.0.4
colorama==0.4.3; sys_platform == 'win32'
docker==4.1.0
docker-pycreds==0.4.0
dockerpty==0.4.1
docopt==0.6.2
enum34==1.1.6; python_version < '3.4'
functools32==3.2.3.post2; python_version < '3.2'
idna==2.8
ipaddress==1.0.23
jsonschema==3.2.0
paramiko==2.7.1
pypiwin32==219; sys_platform == 'win32' and python_version < '3.6'
pypiwin32==223; sys_platform == 'win32' and python_version >= '3.6'
PySocks==1.7.1
PyYAML==5.3
requests==2.22.0
six==1.12.0
subprocess32==3.5.4; python_version < '3.2'
texttable==1.6.2
urllib3==1.25.7; python_version == '3.3'
websocket-client==0.57.0
"requirements.txt" 26L, 735C 1,1 All
backports.shutil_get_terminal_size==1.0.0
2166.6 ERROR: could not install deps [-rrequirements.txt, -rrequirements-dev.txt]; v = InvocationError('/code/.tox/py37/bin/pip install -rrequirements.txt -rrequirements-dev.txt (see /code/.tox/py37/log/py37-1.log)', 1)
2166.6 pre-commit create: /code/.tox/pre-commit
2209.6 pre-commit installdeps: pre-commit
backports.shutil_get_terminal_size==1.0.0
backports.ssl-match-hostname==3.5.0.1; python_version < '3'
cached-property==1.5.1
certifi==2019.11.28
chardet==3.0.4
colorama==0.4.3; sys_platform == 'win32'
cryptography==2.8
docker==4.1.0
docker-pycreds==0.4.0
dockerpty==0.4.1
docopt==0.6.2
enum34==1.1.6; python_version < '3.4'
functools32==3.2.3.post2; python_version < '3.2'
idna==2.8
ipaddress==1.0.23
jsonschema==3.2.0
paramiko==2.7.1
pypiwin32==219; sys_platform == 'win32' and python_version < '3.6'
pypiwin32==223; sys_platform == 'win32' and python_version >= '3.6'
PySocks==1.7.1
PyYAML==5.3
requests==2.22.0
six==1.12.0
subprocess32==3.5.4; python_version < '3.2'
texttable==1.6.2
urllib3==1.25.7; python_version == '3.3'
websocket-client==0.57.0
"requirements.txt" 27L, 753C 7,17 All
backports.shutil_get_terminal_size==1.0.0
2307.1 pre-commit installed: cfgv==3.3.1,distlib==0.3.8,filelock==3.12.2,identify==2.5.24,importlib-metadata==6.7.0,nodeenv==1.8.0,platformdirs==4.0.0,pre-commit==2.21.0,PyYAML==6.0.1,typing_extensions==4.7.1,virtualenv==20.25.0,zipp==3.15.0
2307.1 ___________________________________ summary ____________________________________
2307.1 py27: skipped tests
2307.1 ERROR: py37: could not install deps [-rrequirements.txt, -rrequirements-dev.txt]; v = InvocationError('/code/.tox/py37/bin/pip install -rrequirements.txt -rrequirements-dev.txt (see /code/.tox/py37/log/py37-1.log)', 1)
2307.1 pre-commit: skipped tests
------
Dockerfile.armhf:62
--------------------
60 | COPY README.md .
61 | COPY compose compose/
62 | >>> RUN tox --notest
63 | COPY . .
64 | ARG GIT_COMMIT=unknown
--------------------
ERROR: failed to solve: process "/bin/sh -c tox --notest" did not complete successfully: exit code: 1
저번에 봤던 bcrypt 와 cryptography 가 또 보인다.
이밖에도 각종 오류가 있는데 하나씩 해결해보도록 하겠다..
시작하기 전에
일단 build 명령어를 치면 build 프로세스가 작동하는데 순서대로 빠르게 잘 되는듯 하다가
=> ERROR [build 13/15] RUN tox --notest 2308.8s
이 부분에서 거의 멈춘 상태로 진행이 되지 않는다.
build 중인 것은 시간초가 올라가기 때문에 진행이 되고 있는거 같긴한데 처음엔 아무리 기다려도 성공을 하든 에러가 뜨든 결과가 떠야하는데 뜨질 않아서 몇 번 종료하다가 그냥 냅둬보았더니 2308초 정도의 시간 동안 중간 중간에 진행상황이 업데이트 된다.
시간 초가 올라가는 이상 계속 빌드 진행 중인 것이니 인내심을 갖고 기다리자...
② pip install --upgrade pip
에러 메세지 중간에 보면 pip 가 outdated 일수도 있으니 업그레이드 해보라고 한다.
-> 이미 최신 버전이다.
③ can't find Rust compiler
python 이나 관련된거에 대해선 잘 모르지만 일단 Rust compiler 가 필요한 모양이다.
설치한 기억이 없으니 설치해준다.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # rust 설치
rustc --version # rust compiler 버전 확인
rustup --version # rust 설치툴 버전 확인
설치하고 터미널을 재실행해주거나 reboot 해준다.
설치 후 rustc 버전 확인은 되지만
여전히 > [build 13/15] RUN tox --notest: 부분에서 에러가 발생한다.
2166.6 =============================DEBUG ASSISTANCE=============================
2166.6 If you are seeing a compilation error please try the following steps to
2166.6 successfully install bcrypt:
2166.6 1) Upgrade to the latest pip and try again. This will fix errors for most
2166.6 users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip
2166.6 2) Ensure you have a recent Rust toolchain installed. bcrypt requires
2166.6 rustc >= 1.64.0. (1.63 may be used by setting the BCRYPT_ALLOW_RUST_163
2166.6 environment variable)
2166.6
2166.6 Python: 3.7.5
2166.6 platform: Linux-5.4.0-1101-raspi-armv7l-with
2166.6 pip: n/a
2166.6 setuptools: 68.0.0
2166.6 setuptools_rust: 1.7.0
2166.6 rustc: n/a
2166.6 =============================DEBUG ASSISTANCE=============================
중간에 debug assistance 라고 내 머신 환경을 친절하게 보여주는데
rustc 를 설치한 상태여도 n/a 로 뜬다.
여기까지 했는데도 해결이 안되니 다시 bcyrpt 부분과 cryptography 부분을 확인해봐야겠다.
④ requirements.txt 수정
Building wheel for cryptography (PEP 517) 에러에 대해서 구글링 하던 중
crytography 의 버전을 2.8 로 설정해보라는 말이 있어서
내 requirements.txt 파일을 확인해보니 설치 에러가 나는 crytography 와 bcrypt 둘다 없었다.
backports.shutil_get_terminal_size==1.0.0
backports.ssl-match-hostname==3.5.0.1; python_version < '3'
cached-property==1.5.1
certifi==2019.11.28
chardet==3.0.4
colorama==0.4.3; sys_platform == 'win32'
docker==4.1.0
docker-pycreds==0.4.0
dockerpty==0.4.1
docopt==0.6.2
enum34==1.1.6; python_version < '3.4'
functools32==3.2.3.post2; python_version < '3.2'
idna==2.8
ipaddress==1.0.23
jsonschema==3.2.0
paramiko==2.7.1
pypiwin32==219; sys_platform == 'win32' and python_version < '3.6'
pypiwin32==223; sys_platform == 'win32' and python_version >= '3.6'
PySocks==1.7.1
PyYAML==5.3
requests==2.22.0
six==1.12.0
subprocess32==3.5.4; python_version < '3.2'
texttable==1.6.2
urllib3==1.25.7; python_version == '3.3'
websocket-client==0.57.0
우선
cryptography==2.8
cryptography 는 2.8 로,
bcrypt 는
https://github.com/teslamate-org/teslamate/discussions/2881
3.x 버전으로 설치해보라는 글이 있어
https://pypi.org/project/bcrypt/
3.x 버전 중 가장 최신 버전인 3.2.2 를 추가해줬다.
bcrypt==3.2.2
requirements.txt 에 이 2줄을 추가해주고 다시 build 를 해보았더니
에러 메세지가 바꼈다..!
bcrypt 의 버전을 대충 3.1.7 버전으로 맞춰주면 될 것 같다.
bcrypt==3.1.7
requirements.txt 를 다시 수정해주고 build 를 해주니...
드디어 성공한 것 같다ㅠㅠ
(성공해도 build 13/15 부분을 보면 소요 시간은 50분 정도 된다... 인내심을 갖고 기다리자)
4. Run
다시 본론으로 돌아와서 성공적으로 build 까지 하였으면
docker run --rm --entrypoint="script/build/linux-entrypoint" -v $(pwd)/dist:/code/dist -v $(pwd)/.git:/code/.git "docker-compose:armhf"
로 run 을 시켜줘야 하는데
아무리 (경로를 바꾸거나) 실행을 시켜도
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "script/build/linux-entrypoint": stat script/build/linux-entrypoint: no such file or directory: unknown.
이런 에러가 뜬다.
한참 구글링을 하다가
https://www.boolsee.pe.kr/docker-compose-installation-on-rpi/
위 블로그에서 debian 버전에 따라 Dockerfile 을 수정해야한다는데 여기서 뭔가 잘못됨을 느꼈다.
나는 라즈베리파이에 ubuntu 를 올려서 사용 중이라 debian os가 아닌데...
해결
살짝 멘붕인 상태로 docker-compose --version 을 해주어도 여전히
/usr/local/bin/docker-compose: line 1: Not: command not found 상태
아까 bcrypt 와 cryptography 를 다시 설치했으니 혹시나하는 마음에
sudo pip3 install docker-compose
를 해주었지만
Requirement already satisfied: docker-compose in /usr/lib/python3/dist-packages (1.25.0)
이미 있댄다.
근데 저 경로를 보는 순간, 설마 심볼릭 링크가 잘못된건가 하는 생각이 스쳐 지나갔다. (항상 보던거였는데...)
command not found 되는 경로의 심볼릭 링크를 읽어보니
readlink -f /usr/local/bin/docker-compose
그대로 /usr/local/bin/docker-compose 가 출력되었고
해당 링크를 삭제 후, docker-compose 가 실제로 설치되어 있다는 경로로 심볼릭 링크를 지정해주니
sudo rm /usr/local/bin/docker-compose
sudo ln -s /usr/lib/python3/dist-packages/docker_compose-1.25.0.egg-info/ /usr/local/bin/docker-compose
docker-compose 가 먹는다...
단순 심볼릭 링크 문제인데 왜 몇날 며칠 삽질할 동안 심볼릭 링크의 문제일거라곤 생각을 못했는가...
언제부터 docker-compose 가 정상적으로 설치되어 있었는지도 모르겠다.
이 문제를 해결하기 위해 온갖 쓸데 없는 삽질만 한 것 같지만 언젠가 이 또한 피가 되고 살이 될 것이라 생각한다...