David Duncan's Personal Blog/2020-01-08T00:00:00-06:00A simple way to install the Amazon AWSCLI on RHEL 7 on-demand instances2019-11-05T00:00:00-06:002020-01-08T00:00:00-06:00David Duncantag:None,2019-11-05:/pip is not supported for system python on RHEL.html<p>Install AWSCLI on RHEL 7</p><p>This is just a quick review of the steps required to install the latest AWS CLI version with python pip and the <a href="https://www.redhat.com/en/resources/red-hat-software-collections" title="RHSCL">Red Hat Software Collections Library</a> (RHSCL). I have left the discussion on the decision to use the RHSCL to the <a href="https://developers.redhat.com/blog/2018/08/13/install-python3-rhel/?source=searchresultlisting&extIdCarryOver=true&intcmp=7013a000002CtibAAC&sc_cid=7013a000002CvXLAA0#why-rhscl">Red Hat Developers blog</a> on the topic. This is a guide on using the tools provided by Amazon Web Services at the command line without making modifications to the base operating system.</p>
<p>When you read the documentation for the AWSCLI installation, it's not clear that the use of python-pip on RHEL is not supported. The recommendation from <a href="https://access.redhat.com/solutions/1519803" title="KB#1519803">the official Red Hat Knowledgebase</a> is to use a virtualenv as follows:</p>
<blockquote>
<p>WARNING: Using pip as root user can OVERWRITE your system python libraries, use a virtualenv as a normal user whenever possible to avoid issues when packages are upgraded using Red Hat provided RPM's.
-- Red Hat KB#1519803</p>
</blockquote>
<p>I saw this recently in a configuration a customer was using for disaster recovery. Use of pip to install the python urllib3 library caused a failure in cloud-init and the hardware address was not updated in the ifcfg-eth0 file on the creation of a new instance from an Amazon Machine Image (AMI, pronounced "ah-mee" in my house) . This was due to the urrlib3 library overwriting files associated with other Python RPM packages. So I went through the steps of setting up the AWSCLI on an instance using the RHSCL and I wanted to share this experience with you. I hope it helps you access the very latest <a href="https://aws.amazon.com">AWS</a> updates and features from your on-demand instances running RHEL 6 and RHEL 7. Next time I write it up, we'll use an RHSCL container on <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/8.1_release_notes/index">RHEL 8.1</a> with <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/building_running_and_managing_containers/index">podman</a>.</p>
<h2>For RHEL on-demand with RHUI3, follow the following instructions</h2>
<div class="highlight"><pre><span></span><span class="err">$</span><span class="w"> </span><span class="n">sudo</span><span class="w"> </span><span class="n">yum</span><span class="w"> </span><span class="c1">--enablerepo rhui-REGION-rhel-server-rhscl install -y rh-python36</span>
<span class="err">$</span><span class="w"> </span><span class="n">scl</span><span class="w"> </span><span class="o">-</span><span class="n">l</span><span class="w"> </span>
<span class="n">rh</span><span class="o">-</span><span class="n">python36</span><span class="w"></span>
<span class="err">$</span><span class="w"> </span><span class="n">scl</span><span class="w"> </span><span class="n">enable</span><span class="w"> </span><span class="n">rh</span><span class="o">-</span><span class="n">python36</span><span class="w"> </span><span class="n">bash</span><span class="w"></span>
<span class="err">$</span><span class="w"> </span><span class="n">which</span><span class="w"> </span><span class="n">python</span><span class="w"></span>
<span class="o">/</span><span class="n">opt</span><span class="o">/</span><span class="n">rh</span><span class="o">/</span><span class="n">rh</span><span class="o">-</span><span class="n">python36</span><span class="o">/</span><span class="n">root</span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">python</span><span class="w"></span>
<span class="err">$</span><span class="w"> </span><span class="n">which</span><span class="w"> </span><span class="n">pip</span><span class="w"></span>
<span class="o">/</span><span class="n">opt</span><span class="o">/</span><span class="n">rh</span><span class="o">/</span><span class="n">rh</span><span class="o">-</span><span class="n">python36</span><span class="o">/</span><span class="n">root</span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">pip</span><span class="w"></span>
<span class="err">$</span><span class="w"> </span><span class="n">mkdir</span><span class="w"> </span><span class="o">-</span><span class="n">p</span><span class="w"> </span><span class="o">~/</span><span class="p">.</span><span class="n">virtualenv</span><span class="o">/</span><span class="n">awscli</span><span class="w"></span>
<span class="err">$</span><span class="w"> </span><span class="n">virtualenv</span><span class="w"> </span><span class="c1">--prompt=[awscli] ~/.virtualenv/awscli</span>
<span class="err">$</span><span class="w"> </span><span class="n">source</span><span class="w"> </span><span class="o">~/</span><span class="p">.</span><span class="n">virtualenv</span><span class="o">/</span><span class="n">awscli</span><span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">activate</span><span class="w"></span>
<span class="err">$</span><span class="w"> </span><span class="n">pip</span><span class="w"> </span><span class="n">install</span><span class="w"> </span><span class="n">awscli</span><span class="w"></span>
<span class="err">$</span><span class="w"> </span><span class="n">which</span><span class="w"> </span><span class="n">awscli</span><span class="w"></span>
<span class="o">~/</span><span class="p">.</span><span class="n">virtualenv</span><span class="o">/</span><span class="n">awscli</span><span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">aws</span><span class="w"></span>
</pre></div>
<blockquote>
<p>At this point, you should be able to use the application directly like so: </p>
</blockquote>
<div class="highlight"><pre><span></span>$ ~/.virtualenv/awscli/bin/aws <span class="nb">help</span>
</pre></div>
<p>If you are using <a href="https://www.centos.org">CentOS</a> or <a href="http://getfedora.org">Fedora 30</a> or later, then consider using the included RPMs I help to package. </p>