Created on 12-26-2018 03:37 PM - edited 04-14-2020 02:31 AM
Problem Statement : when using a local repository, installation fails due to empty baseurls being written to the Ambari repository (even though local repository baseurl values were provided). The installation fails with below error :
stderr: Traceback (most recent call last): File "/var/lib/ambari-agent/cache/stack-hooks/before-INSTALL/scripts/hook.py", line 37, in <module> BeforeInstallHook().execute() File "/usr/lib/ambari-agent/lib/resource_management/libraries/script/script.py", line 352, in execute method(env) File "/var/lib/ambari-agent/cache/stack-hooks/before-INSTALL/scripts/hook.py", line 33, in hook install_packages() File "/var/lib/ambari-agent/cache/stack-hooks/before-INSTALL/scripts/shared_initialization.py", line 37, in install_packages retry_count=params.agent_stack_retry_count) File "/usr/lib/ambari-agent/lib/resource_management/core/base.py", line 166, in __init__ self.env.run() File "/usr/lib/ambari-agent/lib/resource_management/core/environment.py", line 160, in run self.run_action(resource, action) File "/usr/lib/ambari-agent/lib/resource_management/core/environment.py", line 124, in run_action provider_action() File "/usr/lib/ambari-agent/lib/resource_management/core/providers/packaging.py", line 30, in action_install self._pkg_manager.install_package(package_name, self.__create_context()) File "/usr/lib/ambari-agent/lib/ambari_commons/repo_manager/yum_manager.py", line 219, in install_package shell.repository_manager_executor(cmd, self.properties, context) File "/usr/lib/ambari-agent/lib/ambari_commons/shell.py", line 753, in repository_manager_executor raise RuntimeError(message) RuntimeError: Failed to execute command '/usr/bin/yum -y install hdp-select', exited with code '1', message: 'Repository InstallMedia is listed more than once in the configuration One of the configured repositories failed (Unknown), and yum doesn't have enough cached data to continue. At this point the only safe thing yum can do is fail. There are a few ways to work "fix" this: 1. Contact the upstream for the repository and get them to fix the problem. 2. Reconfigure the baseurl/etc. for the repository, to point to a working upstream. This is most often useful if you are using a newer distribution release than is supported by the repository (and the packages for the previous distribution release still work). 3. Run the command with the repository temporarily disabled yum --disablerepo=<repoid> ... 4. Disable the repository permanently, so yum won't use it by default. Yum will then just ignore the repository until you permanently enable it again or use --enablerepo for temporary usage: yum-config-manager --disable <repoid> or subscription-manager repos --disable=<repoid> 5. Configure the failing repository to be skipped, if it is unavailable. Note that yum will try to contact the repo. when it runs most commands,so will have to try and fail each time (and thus. yum will be be much slower). If it is a very temporary problem though, this is often a nice compromise: yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true Cannot find a valid baseurl for repo: HDP-3.1-repo-1 ' Command aborted. Reason: 'Server considered task failed and automatically aborted it' stdout:
We can See that Ambari UI shows the empty baseURL in review step :
It also sends the empty Repo version while deploy stage
Root cause : https://issues.apache.org/jira/browse/AMBARI-25069
Workaround :
This is a Javascript bug in ambari that happens when using local repository and there is no internet access to cluster
to workaround this
Steps
1) go to /usr/lib/ambari-server/web/javascipts
cd /usr/lib/ambari-server/web/javascripts
2) take backup of app.js
cp app.js app.js_backup
3) edit the app.js
find out the line(39892) : onNetworkIssuesExist: function () {
Change the line from :
/** * Use Local Repo if some network issues exist */ onNetworkIssuesExist: function () { if (this.get('networkIssuesExist')) { this.get('content.stacks').forEach(function (stack) { stack.setProperties({ usePublicRepo: false, useLocalRepo: true }); stack.cleanReposBaseUrls(); }); } }.observes('networkIssuesExist'),
to
/** * Use Local Repo if some network issues exist */ onNetworkIssuesExist: function () { if (this.get('networkIssuesExist')) { this.get('content.stacks').forEach(function (stack) { if(stack.get('useLocalRepo') != true){ stack.setProperties({ usePublicRepo: false, useLocalRepo: true }); stack.cleanReposBaseUrls(); } }); } }.observes('networkIssuesExist'),
as per : https://github.com/apache/ambari/pull/2743/files
Later as you have already deployed the cluster we need to reset the cluster (Caution : this will erase all the configs you have created previously in Step6 and also the Hosts and services you have selected need to select again )
Command :
ambari-server reset
And hard reload the page and start the create cluster wizard again.
Incase you have already at Step 9 and cannot proceed with ambari-server reset (as it invovles lots of Configs being added again , the below steps are for you )
Preqrequesties : The cluster now is in Deployment step(step 9 ) and you have only retry button to press
steps
1) Stop ambari-server
2) login to Database
3) use the below command to list out all the contents in repo_definition table :
select * from repo_definition;
4) you can see the base_url will be empty for the all the Rows in the table
5) Correct the base_url for every rows and update it using the command :
update repo_definition set base_url='<YOUR BASE URL>' where id=<THE CORESPONDING ID>;
for ex :
update repo_definition set base_url='http://asnaik.example.com/localrepo/HDP-3.1' where id=9;
6) after correcting all the base_url columns in repo_definition table and also delete the empty repos created by ambari from location /etc/yum.repos.d
7) start ambari, Login to UI and press retry button, The Installation will work as smooth as it can be.
Hope this helps.
Created on 03-14-2019 09:39 PM
Thanks @Akhil S Naik . Your post saved my day!
Created on 05-17-2019 04:02 PM
@Akhil S Naik . Amazing Document, Made may day too. 🙂
Thanks for sharing it
Created on 08-23-2019 12:26 PM
Very helpful!
It may be implied by "Later as you have already deployed the cluster we need to reset the cluster," but I had to add an additional step of removing the empty baseurl repositories that had been configured on the hosts. If this step isn't done, the error continues to appear because the repo configuration is still left over from the failed attempt. This can be done two ways:
# yum remove HDP-3.1-repo-1
# yum clean all
And also by manually removing the repo file from `/etc/yum.repos.d/' and then running
# yum clean all
at least for the RHEL 7 hosts we were on.
Created on 09-03-2019 06:31 AM
Thanks
Created on 10-22-2019 07:11 AM
Incase you have already at Step 9 and cannot proceed with ambari-server reset (as it invovles lots of Configs being added again , the below steps are for you )
Preqrequesties : The cluster now is in Deployment step(step 9 ) and you have only retry button to press
- Follow the above mentioned steps
- Dont restart ambari-server. Instead refresh the Installation wizard page. It will automatically pick the HDP repo urls and click on deploy.
- It will go smoothly