1. 에러 내용
Yocto 개발 환경 구축을 위해서는 repo를 이용하여 관련 소스들을 다운로드 받는다.
repo란 여러 git repository 전체에 걸친 작업을 단순화하여 git을 보완하기 위해 만들 툴이다.
간혹 repo를 잘 못 사용하다 보면 이 repo를 이용 소스를 다운로드 받을려고 할 때 아래와 같은 에러 메세지가 발생한다.
$~/BUILD$ repo init
File "/home/SSD/hdkim/BUILD/.repo/repo/main.py", line 79
file=sys.stderr)
^
SyntaxError: invalid syntax
정상적인 상태에서는 repo 명령만을 쳤을 때에는 "error: repo is not installed. Use "repo init" to install it here." 이러한 에러 메세지가 출력이 되어야 한다.
해당 에러의 해결책으로 어떤 블로그에서는 파이썬 버전이 3.6을 설치해야 된다, 또는 repo가 최신 버전이 아니라서 최신 버전으로 설치해야 된다는 블로그 내용들이 많다. 물론 이 블로그 내용들이 맞는 상황에서의 해결책은 파이썬 버전을 올리거나 최신 repo를 설치하는게 맞다.
하지만 필자의 경우 빌드 서버를 이용하여 다른 계정들은 파이썬 2.7버전에서 최신 repo가 아니더라도 정상적으로 repo를 이용하여 소스 다운로드가 가능하였지만 특정 계정에서만 repo 에러가 나는 경우가 있었기에 해당 블로그를 작성하였다.
2. .repo 삭제 및 git config 설정을 통한 에러 해결 방안
해당 에러 해결 방안은 한 빌드서버에서 다른 계정들은 파이썬 2.7, 기본 repo를 이용한 소스 다운로드가 가능한데 특정 계정에서 에러가 발생 하였을 때 적용이 가능한 방법이다.
2-1. .repo 삭제
현재 계정의 홈 디렉토리 또는 repo로 소스를 받으려고 하는 폴더에서 ls -al로 .repo가 있는지 확인한다.
만약 .repo가 있다면 삭제 후 다시 repo init을 실행한다.
$ repo init -u git@gitlab-server:Telechips/PROJECT/TCC.git -m YURA_PRECEDING.xml
File "/home/SSD/GEN2/YTCC/.repo/repo/main.py", line 79
file=sys.stderr)
^
SyntaxError: invalid syntax
$ ls -al
total 12
drwxrwxr-x 3 user user 4096 4월 20 13:32 .
drwxr-xr-x 14 user user 4096 4월 20 11:59 ..
drwx------ 6 user user 4096 4월 20 13:32 .repo
$ rm -rf .repo/
$ repo init -u git@gitlab-server:Test/PROJECT/TEST.git -m PRECEDING.xml
Get https://gerrit.googlesource.com/git-repo/clone.bundle
Get https://gerrit.googlesource.com/git-repo
remote: Finding sources: 100% (3/3)
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://gerrit.googlesource.com/git-repo
b90a422..4c11aeb main -> origin/main
Get git@gitlab-server:Telechips/PROJECT/TCC.git
remote: Enumerating objects: 132, done.
remote: Counting objects: 100% (59/59), done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 132 (delta 37), reused 57 (delta 35), pack-reused 73
Receiving objects: 100% (132/132), 14.33 KiB | 0 bytes/s, done.
Resolving deltas: 100% (74/74), done.
From gitlab-server:Telechips/PROJECT/TEST
* [new branch] master -> origin/master
Your identity is: khd0801 <hdkim@xxx.co.kr>
If you want to change this, please re-run 'repo init' with --config-name
repo has been initialized in /home/SSD/
2-2. git config 등록
위의 방법을 적용하여 SyntaxError가 넘어가고 아래와 같은 에러가 발생하였다면 git config 설정을 해주면 된다.
(보안상 주소는 및 xml 이름은 의미 없는 단어를 사용했다)
$ repo init -u git@gitlab-server:Test/PROJECT/TEST.git -m PRECEDING.xml
Get https://gerrit.googlesource.com/git-repo/clone.bundle
Get https://gerrit.googlesource.com/git-repo
remote: Finding sources: 100% (3/3)
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://gerrit.googlesource.com/git-repo
b90a422..4c11aeb main -> origin/main
Get git@gitlab-server:Telechips/PROJECT/TCC.git
remote: Enumerating objects: 132, done.
remote: Counting objects: 100% (59/59), done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 132 (delta 37), reused 57 (delta 35), pack-reused 73
Receiving objects: 100% (132/132), 14.33 KiB | 0 bytes/s, done.
Resolving deltas: 100% (74/74), done.
From gitlab-server:Telechips/PROJECT/TEST
* [new branch] master -> origin/master
Traceback (most recent call last):
File "/home/SSD/GEN2/YTCC/.repo/repo/main.py", line 541, in <module>
_Main(sys.argv[1:])
File "/home/SSD/GEN2/YTCC/.repo/repo/main.py", line 516, in _Main
result = run()
File "/home/SSD/GEN2/YTCC/.repo/repo/main.py", line 509, in <lambda>
run = lambda: repo._Run(name, gopts, argv) or 0
File "/home/SSD/GEN2/YTCC/.repo/repo/main.py", line 212, in _Run
result = cmd.Execute(copts, cargs)
File "/home/SSD/GEN2/YTCC/.repo/repo/subcmds/init.py", line 461, in Execute
self._ConfigureUser()
File "/home/SSD/GEN2/YTCC/.repo/repo/subcmds/init.py", line 352, in _ConfigureUser
name = self._Prompt('Your Name', mp.UserName)
File "/home/SSD/GEN2/YTCC/.repo/repo/project.py", line 934, in UserName
self._LoadUserIdentity()
File "/home/SSD/GEN2/YTCC/.repo/repo/project.py", line 947, in _LoadUserIdentity
u = self.bare_git.var('GIT_COMMITTER_IDENT')
File "/home/SSD/GEN2/YTCC/.repo/repo/project.py", line 3046, in runner
(self._project.name, name, p.stderr))
error.GitError: manifests var:
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: empty ident name (for <user@vision.(none)>) not allowed
위에러는 git에 해당 사용자에 대한 이름과 이메일 주소가 등록이 안되어 나타난 현상이다.
아래 명령어를 사용하여 git 설정 후 정상 동작이 되는 것을 볼 수 있다.
$ git config –list
$ git config --global user.name "user 이름"
$ git config --global user.email "user 이메일"
$ git config --global user.email "hdkim@xxx.co.kr"
$ git config --global user.name "khd0801"
$ repo init -u git@gitlab-server:Test/PROJECT/TEST.git -PRECEDING.xml
Your identity is: khd0801 <hdkim@xxx.co.kr>
If you want to change this, please re-run 'repo init' with --config-name
repo has been initialized in /home/SSD/
3. 파이썬 업데이트 및 최신 repo 설치를 통한 에러 해결 방안
yocto 레퍼런스 메뉴얼을 보면 yocto 버전별 필요한 python 버전이 명시되어 있다.
Yocto Project Quick Build
3-1. 파이썬 3.6 업데이트
아래 내용은 ubuntu 16.04에서 파이썬 3.6을 설치하는 방법이다.
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt-get install python3.6
$sudo add-apt-repository ppa:deadsnakes/ppa
This PPA contains more recent Python versions packaged for Ubuntu.
Disclaimer: there's no guarantee of timely updates in case of security problems or other issues. If you want to use them in a security-or-otherwise-critical environment (say, on a production server), you do so at your own risk.
Update Note
===========
Please use this repository instead of ppa:fkrull/deadsnakes.
Reporting Issues
================
Issues can be reported in the master issue tracker at:
https://github.com/deadsnakes/issues/issues
Supported Ubuntu and Python Versions
====================================
- Ubuntu 18.04 (bionic) Python2.3 - Python 2.6, Python 3.1 - Python 3.5, Python3.7 - Python3.11
- Ubuntu 20.04 (focal) Python3.5 - Python3.7, Python3.9 - Python3.11
- Note: Python2.7 (all), Python 3.6 (bionic), Python 3.8 (focal) are not provided by deadsnakes as upstream ubuntu provides those packages.
- Note: for focal, older python versions require libssl1.0.x so they are not currently built
The packages may also work on other versions of Ubuntu or Debian, but that is not tested or supported.
Packages
========
The packages provided here are loosely based on the debian upstream packages with some modifications to make them more usable as non-default pythons and on ubuntu. As such, the packages follow debian's patterns and often do not include a full python distribution with just `apt install python#.#`. Here is a list of packages that may be useful along with the default install:
- `python#.#-dev`: includes development headers for building C extensions
- `python#.#-venv`: provides the standard library `venv` module
- `python#.#-distutils`: provides the standard library `distutils` module
- `python#.#-lib2to3`: provides the `2to3-#.#` utility as well as the standard library `lib2to3` module
- `python#.#-gdbm`: provides the standard library `dbm.gnu` module
- `python#.#-tk`: provides the standard library `tkinter` module
Third-Party Python Modules
==========================
Python modules in the official Ubuntu repositories are packaged to work with the Python interpreters from the official repositories. Accordingly, they generally won't work with the Python interpreters from this PPA. As an exception, pure-Python modules for Python 3 will work, but any compiled extension modules won't.
To install 3rd-party Python modules, you should use the common Python packaging tools. For an introduction into the Python packaging ecosystem and its tools, refer to the Python Packaging User Guide:
https://packaging.python.org/installing/
Sources
=======
The package sources are available at:
https://github.com/deadsnakes/
Nightly Builds
==============
For nightly builds, see ppa:deadsnakes/nightly https://launchpad.net/~deadsnakes/+archive/ubuntu/nightly
More info: https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa
Press [ENTER] to continue or ctrl-c to cancel adding it
gpg: keyring `/tmp/tmpc9_kcogd/secring.gpg' created
gpg: keyring `/tmp/tmpc9_kcogd/pubring.gpg' created
gpg: requesting key 6A755776 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpc9_kcogd/trustdb.gpg: trustdb created
gpg: key 6A755776: public key "Launchpad PPA for deadsnakes" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
OK
$ sudo apt update
Hit:1 https://download.docker.com/linux/ubuntu xenial InRelease
Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [99.8 kB]
Hit:3 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu xenial InRelease
Hit:4 http://kr.archive.ubuntu.com/ubuntu xenial InRelease
Get:5 http://kr.archive.ubuntu.com/ubuntu xenial-updates InRelease [99.8 kB]
Get:6 http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu xenial InRelease [17.5 kB]
Get:7 http://kr.archive.ubuntu.com/ubuntu xenial-backports InRelease [97.4 kB]
Get:8 http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu xenial/main amd64 Packages [20.6 kB]
Get:9 http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu xenial/main i386 Packages [20.6 kB]
Get:10 http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu xenial/main Translation-en [5,652 B]
Fetched 361 kB in 3s (91.1 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
3 packages can be upgraded. Run 'apt list --upgradable' to see them.
$ sudo apt-get install python3.6
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libpython3.6-minimal libpython3.6-stdlib python3.6-minimal
Suggested packages:
python3.6-venv python3.6-doc binfmt-support
The following NEW packages will be installed:
libpython3.6-minimal libpython3.6-stdlib python3.6 python3.6-minimal
0 upgraded, 4 newly installed, 0 to remove and 3 not upgraded.
Need to get 4,321 kB of archives.
After this operation, 23.5 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu xenial/main amd64 libpython3.6-minimal amd64 3.6.2-1+xenial1 [598 kB]
Get:2 http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu xenial/main amd64 python3.6-minimal amd64 3.6.2-1+xenial1 [1,418 kB]
Get:3 http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu xenial/main amd64 libpython3.6-stdlib amd64 3.6.2-1+xenial1 [2,094 kB]
Get:4 http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu xenial/main amd64 python3.6 amd64 3.6.2-1+xenial1 [210 kB]
Fetched 4,321 kB in 7s (553 kB/s)
Selecting previously unselected package libpython3.6-minimal:amd64.
(Reading database ... 283857 files and directories currently installed.)
Preparing to unpack .../libpython3.6-minimal_3.6.2-1+xenial1_amd64.deb ...
Unpacking libpython3.6-minimal:amd64 (3.6.2-1+xenial1) ...
Selecting previously unselected package python3.6-minimal.
Preparing to unpack .../python3.6-minimal_3.6.2-1+xenial1_amd64.deb ...
Unpacking python3.6-minimal (3.6.2-1+xenial1) ...
Selecting previously unselected package libpython3.6-stdlib:amd64.
Preparing to unpack .../libpython3.6-stdlib_3.6.2-1+xenial1_amd64.deb ...
Unpacking libpython3.6-stdlib:amd64 (3.6.2-1+xenial1) ...
Selecting previously unselected package python3.6.
Preparing to unpack .../python3.6_3.6.2-1+xenial1_amd64.deb ...
Unpacking python3.6 (3.6.2-1+xenial1) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for gnome-menus (3.13.3-6ubuntu3.1) ...
Processing triggers for desktop-file-utils (0.22-1ubuntu5.2) ...
Processing triggers for bamfdaemon (0.5.3~bzr0+16.04.20180209-0ubuntu1) ...
Rebuilding /usr/share/applications/bamf-2.index...
Processing triggers for mime-support (3.59ubuntu1) ...
Setting up libpython3.6-minimal:amd64 (3.6.2-1+xenial1) ...
Setting up python3.6-minimal (3.6.2-1+xenial1) ...
Setting up libpython3.6-stdlib:amd64 (3.6.2-1+xenial1) ...
Setting up python3.6 (3.6.2-1+xenial1) ...
$ python3.6
Python 3.6.2 (default, Jul 17 2017, 23:14:31)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("hello world")
hello world
잘 없겠지만 만약 "sudo add-apt-repository ppa:deadsnakes/ppa" 명어러가 에러가 난다면 "sudo apt-get install -y software-properties-common" 명령어 실행 후 다시 설치 명령어를 입력하면 정상적으로 동작이 될 것이다.
기존 Ubuntu 16.04는 파이썬 2.7로 동작되는 프로그램들이 있다. 파이썬 2.7과 3.6은 문법이 바뀌어 에러가 날 수 있는데 이러한 문제를 해결하기 위해 파이썬 버전을 선택하여 사용 할 수 있는 방법이 필요하다.
아래 설정들을 통하여 간편하게 파이썬 버전을 선택하여 사용 할 수 있다.
sudo update-alternatives --config python
만약 위 명령어를 입력 하고 "update-alternatives: no alternatives for python"라는 오류 메세지가 뜨면 미리 등록된 파이썬 버전이 없다는 뜻이다.
그래서 아래와 같이 파이썬 경로를 선택지로 등록 해주어야 한다.
sudo update-alternatives --install [심볼릭 링크 경로] python [실제 경로] [숫자]
update-alternatives --install /usr/bin/python3 python /usr/bin/python3.6 1
update-alternatives --install /usr/bin/python3 python /usr/bin/python2.7 2
$ sudo update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/python3.6 1 auto mode
1 /usr/bin/python2.7 1 manual mode
Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in manual mode
$ python
Python 2.7.17 (default, Sep 30 2020, 13:38:04)
[GCC 7.5.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
처음 python 버전은 Status가 auto mode로 등록이 되어 있고, 추가로 등록하면 manual mode로 등록이 되는 것 같다. 메뉴를 등록한 후와 버전을 바꾼 후를 비교해보면 왼쪽의 별(*) 표시로 구분 할 수 있다.
3-2. 최신 repo 설치
아래 명령어로 repo를 자신의 홈 디렉토리쪽에 설치한다.
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$which repo
/usr/bin/repo
$mkdir ~/bin
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 45277 100 45277 0 0 34869 0 0:00:01 0:00:01 --:--:-- 34882
$ chmod a+x ~/bin/repo
$ which repo
/home/SSD/bin/repo
repo를 새로 설치하기 전에는 기본적으로 설치되어 있는 /usr/bin/repo를 사용하고 홈 디렉토리에 repo를 설치하고 사용 권한을 변경해 준 이후로는 자신의 홈 디렉토리/bin/repo를 사용하게 된다.
만약 repo를 새로 설치했는데도 계속 /usr/bin/repo 출력이 나온다면 ~/.bashrc 파일에 export PATH="~/bin:$PATH" 문구를 추가해 준다.
댓글