简体   繁体   中英

How to use a private git repo while building yocto using bitbake in Ubuntu 16.04?

While using bitbake after configuring , bitbake failed before trying to clone/access a private repository using an SSH link .

$ bitbake linux-imx
git -c core.fsyncobjectfiles=0 ls-remote ssh://git@gitlab.com:~/some-project/some-repo.git
| DEBUG: Python function base_do_fetch finished
| DEBUG: Python function do_fetch finished
| ERROR: Function failed: Fetcher failure: Fetch command failed with exit code 128, output:
| ssh: Could not resolve hostname gitlab.com:~: Name or service not known
| fatal: Could not read from remote repository.
| 
| Please make sure you have the correct access rights
| and the repository exists.
| 
ERROR: Task 4 (/home/user/Projects/some_project/some-project-release-bsp/sources/meta-fsl-bsp-release/imx/meta-bsp/recipes-kernel/linux/linux-imx_4.1.15.bb, do_fetch) failed with exit code '1'

When i try to remove the ~/ from the URL i get a similar error .

| DEBUG: Python function base_do_fetch finished
| DEBUG: Python function do_fetch finished
| ERROR: Function failed: Fetcher failure: Fetch command failed with exit code 128, output:
| ssh: Could not resolve hostname gitlab.com:some-project: Name or service not known
| fatal: Could not read from remote repository.

I even tried modifying the URL to https: , on which it gave me another error

git -c core.fsyncobjectfiles=0 ls-remote http://gitlab.com/some-project/some-repo.git
| DEBUG: Python function base_do_fetch finished
| DEBUG: Python function do_fetch finished
| ERROR: Function failed: Fetcher failure: Fetch command failed with exit code 128, output:
| fatal: could not read Username for 'https://gitlab.com': No such device or address
| 
ERROR: Task 4 (/home/user/Projects/some-project/some-project-release-bsp/sources/meta-fsl-bsp-release/imx/meta-bsp/recipes-kernel/linux/linux-imx_4.1.15.bb, do_fetch) failed with exit code '1'

When i tried the same in the terminal instead of bitbake , It succeeded with the desired output

git -c core.fsyncobjectfiles=0 ls-remote git@gitlab.com:some-project/some-repo.git

I am using Ubuntu 16.04 . I know that Yocto build is not tested in Ubuntu 16.04 .

WARNING: Host distribution "Ubuntu-16.04" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.

But a previous build with public repositories succeeded . So is there a way to make this work ?

Try using:

git://git@gitlab.com/some-project/some-repo.git;protocol=‌​ssh;branch=${SRCBRAN‌​CH}

in your SRC_URI.

Note the removal of :~ .

It is something to do with how Yocto fetch the source code from gitlab . No matter the repository is public or private, the git link will not work.

I have search a lot but do not find a reason. So, I had to move my repository to github. It will work when it switches to github.

An alternative way is to fetch your source to local and edit the recipe to source it from there.

What you may want is a deploy token for your gitlab repo. I suspect github has something similar. https://docs.gitlab.com/ee/user/project/deploy_tokens/ .

Once you have created the token, you will have a token name, such as gitlab+deploy-token-1 and the token itself, which is only displayed upon creation, such as yN_gx3zzrrgqnxzzgsZmqS .

Once you a have these values for your token, add it to your SRC_URI as a user:pass like so:

SRC_URI = "git://gitlab.com/my_username/my_repo.git;protocol=https;user=gitlab+deploy-token-1:yN_gx3zzrrgqnxzzgsZmqS;branch=master"

Note that anyone with access to this recipe will be able to clone your private repo. You can set an expiration date for the token, or manually revoke it at any time.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM