Harish Ganesan
Harish Ganesan

Reputation: 135

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://[email protected]:~/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 [email protected]: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 ?

Upvotes: 3

Views: 8128

Answers (3)

benf
benf

Reputation: 1005

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.

Upvotes: 2

Charles C.
Charles C.

Reputation: 3913

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.

Upvotes: 0

Anders
Anders

Reputation: 8981

Try using:

git://[email protected]/some-project/some-repo.git;protocol=‌​ssh;branch=${SRCBRAN‌​CH}

in your SRC_URI.

Note the removal of :~.

Upvotes: 6

Related Questions