How to call yum install as a Makefile's target - makefile

How to create a Makefile's target that calls a specific yum install:
yum install libarchive-devel.x86_64
but only if the desired package isn't yet installed. Maybe a yum list installed | grep libarchive to check...
My goal is to call: sudo yum install libarchive-devel.x86_64 but only if the package isn't installed yet. A kind of Maven like in an abstract way.
Don't need any specific version of it. Only it to be x86_64.

Solution:
»»» below means a tab char
installLib:
»»»rpm -qa | egrep -q libarchive-devel.*64 || sudo yum install --assumeyes libarchive-devel.x86_64
This way won't try to install libarchive at each make

Related

CentOS 7 : How can i fix this Error? (Yum : Error Nothing to do)

First, I'm so sorry to my english, not perfect.
I was faced with problem while testing a .sh file.
That because of error Nothing to do..
That phrase is the phrase that appeared when executing yum -y install perl-CPAN, but before that, yum -y groupinstall 'Development Tools' worked normally.
And It was successful when I typed it directly instead of yum -y install perl-CPAN.
I tried solutions like below but the result was the same.
Edit and Install
# cd /etc/yum.repos.d
# vi CentOS-Base.repo
Enable =0 -> 1
# yum install epel-release
# ./setup.sh
ps : Many people have recommended this solutions.
Check
check already install
check the correct install repository
Thanks to read my situation, and have a nice day.
Although I do not know what setup.sh you are refering to is, yum says Nothing to do. if you have the package already installed. To check if you have the package installed, you can use rpm. If the package is not installed, it will give you:
# rpm -q perl-CPAN
package perl-CPAN is not installed
Then if you install the package, e.g. with:
# yum -y install perl-CPAN
[...]
Complete!
Then you can verify package is installed:
# rpm -q perl-CPAN
perl-CPAN-2.28-5.fc33.noarch
Note I have tested on Fedora 33, but there should not be much difference to CentOS in this regards.

How to install pip in CentOS 7?

CentOS 7 EPEL now includes Python 3.4: yum install python34
However, when I try that, even though Python 3.4 installs successfully, it doesn't appear to install pip. Which is weird, because pip should be included by default with Python 3.4. which pip3 doesn't find anything, nor does which pip.
How do I access pip from the Python 3.4 package in CentOS 7 EPEL release?
The easiest way I've found to install pip3 (for python3.x packages) on CentOS 7 is:
$ sudo yum install python34-setuptools
$ sudo easy_install-3.4 pip
You'll need to have the EPEL repository enabled before hand, of course.
You should now be able to run commands like the following to install packages for python3.x:
$ pip3 install foo
curl https://bootstrap.pypa.io/get-pip.py | python3.4
Or if you don't have curl for some reason:
wget https://bootstrap.pypa.io/get-pip.py
python3.4 get-pip.py
After this you should be able to run
$ pip3
The CentOS 7 yum package for python34 does include the ensurepip module, but for some reason is missing the setuptools and pip files that should be a part of that module. To fix, download the latest wheels from PyPI into the module's _bundled directory (/lib64/python3.4/ensurepip/_bundled/):
setuptools-18.4-py2.py3-none-any.whl
pip-7.1.2-py2.py3-none-any.whl
then edit __init__.py to match the downloaded versions:
_SETUPTOOLS_VERSION = "18.4"
_PIP_VERSION = "7.1.2"
after which python3.4 -m ensurepip works as intended. Ensurepip is invoked automatically every time you create a virtual environment, for example:
pyvenv-3.4 py3
source py3/bin/activate
Hopefully RH will fix the broken Python3.4 yum package so that manual patching isn't needed.
Update: The python34 bug mentioned below has finally been fixed. It is a perfectly fine choice now.
Rather than using broken EPEL python34 packages, you can enable the IUS repo and have it work properly.
pip inside virtual environments
The main python34u and python35u IUS packages include the pyvenv tool (/usr/bin/pyvenv-3.4 or /usr/bin/pyvenv-3.5) that includes bundled wheels of pip and setuptools for bootstrapping virtual environments.
global pip
The python34u-pip and python35u-pip IUS packages include /usr/bin/pip3.4 and /usr/bin/pip3.5 respectively. These work just fine to install packages to the system site-packages directory.
yum install python34-pip
pip3.4 install foo
You will likely need the EPEL repositories installed:
yum install -y epel-release
Update 2019
I tried easy_install at first but it doesn't install packages in a clean and intuitive way. Also when it comes time to remove packages it left a lot of artifacts that needed to be cleaned up.
sudo yum install epel-release
sudo yum install python34-pip
pip install package
Was the solution that worked for me, it installs "pip3" as pip on the system. It also uses standard rpm structure so it clean in its removal. I am not sure what process you would need to take if you want both python2 and python3 package manager on your system.
Below are the steps I followed to install python34 and pip
yum update -y
yum -y install yum-utils
yum -y groupinstall development
yum -y install https://centos7.iuscommunity.org/ius-release.rpm
yum makecache
yum -y install python34u python34u-pip
python3.6 -v
echo "alias python=/usr/bin/python3.4" >> ~/.bash_profile
source ~/.bash_profile
pip3 install --upgrade pip
# if yum install python34u-pip doesnt work, try
curl https://bootstrap.pypa.io/get-pip.py | python
There is a easy way of doing this by just using easy_install (A Setuptools to package python librarie).
Assumption.
Before doing this check whether you have python installed into your Centos machine (at least 2.x).
Steps to install pip.
So lets do install easy_install,
sudo yum install python-setuptools python-setuptools-devel
Now lets do pip with easy_install,
sudo easy_install pip
That's Great. Now you have pip :)
Figure out what version of python3 you have installed:
yum search pip
and then install the best match. Use reqoquery to find name of resulting pip3.e.g
repoquery -l python36u-pip
tells me to use pip3.6 instead of pip3
On CentOS 7, the pip version is pip3.4 and is located here:
/usr/local/bin/pip3.4

shell script to install a package if not alreay installed

I have made a C program, but it depends on the ncurses library. So, when i give my code to anyone else, I have to ask him/her to install ncurses library first then only compile the code using the Makefile i provided.
However, I want to write a shell script which will automatically install ncurses if it is NOT already installed. So that I can simply ask my friend to run the script.
This is what i want the script to do ::
if(ncurses-dev package not installed)
sudo apt-get install ncurses-dev
I know it is a very basic question, but i dont know how to do it. I tried google search but could not find a simple tutorial which i could understand.
For fedora
if ! rpm -qa | grep -qw $package_name$; then
yum install $package_name
fi
For UBUNTU
#!/bin/sh
for package; do
dpkg -s "$package" >/dev/null 2>&1 && {
echo "$package is installed."
} || {
sudo apt-get install $package
}
done
This can be used for checking multiple packages as well.
To automatically install without user interaction on Debian(In your case Ubuntu), you could use the --force-yes --yes switches in your command line args list. Like so:
sudo apt-get --force-yes --yes install package

How to install ruby on linux in a specific folder

I try to install ruby and rails to start to learn ruby on rails.
I work on Windows. After many search and tries, I gave up and installed a fresh ubuntu 14 x64 in a VirtualBox.
I installed ruby with apt-get, but its files get spread all over the file system (/bin, /var...). So, I have to use always sudo and search all over the place when installing gems.
I would like, just like in windows, find a ruby tar.gz which I can decompress in a folder of mine, with all files at the same place, where I have the "control" over the files, and I can watch easily what it's hapenning while installing gems, rails, etc...
The problem : I cannot find any tar.gz (or similar archive) of ruby for linux which I simply can uncompress in a folder and work with it (I can manage the $path). The only one I can find is for Windows !
Thanks !
It sounds like what you want is Ruby's source code. Go to https://www.ruby-lang.org/en/downloads/ and look under "Compiling Ruby - Source Code". That's where you'll find the .tar.gz files you want. You'll need to compile and install it before you can actually use it. Installing normally copies files "all over the file system", but you can force it to install to a specific folder by passing the --prefix option to the ./configure script.
$ tar -xf ruby-2.2.1.tar.gz
$ cd ruby-2.2.1
$ ./configure --prefix=/my/ruby/dir
$ make && make install
You may need to install some dev packages in order to get it to compile, but any compilation errors should make it clear what you need.
These instructions are also described here.
Thank you Max for your response.
In case someone else tries to compile ruby on a fresh new ubuntu, this is what I had to do to build and use it with success :
Install missing dependencies :
get the latest "Stable Snapshot" from https://ftp.ruby-lang.org/pub/ruby/stable-snapshot.tar.gz and not the "Current stable"
sudo apt-get install libffi-dev
sudo apt-get install zlibc zlib1g zlib1g-dev
sudo apt-get install openssl
sudo apt-get install libssl0.9.8 [[[ first, find the latest version with : apt-cache search libssl | grep SSL ]]]
sudo apt-get install ca-certificates
sudo apt-get install libssl-dev
sudo apt-get install libreadline-dev
Then :
Edit downloaded file tools/rbinstall.rb, goto line 714 and correct the typo :
change "rescue LoadErroe" to "rescue LoadError" (not corrected in date of 20 March 2015).
Run Max's instructions above
Don't move the ruby destination folder declared with "--prefix" (even if you try to correct the shells in ruby/bin)
Finally, for using rails :
sudo apt-get install libsqlite3-dev
sudo apt-get install nodejs ==> inorder to have a js runtime

Boost-Libboost is needed in Centos7 (ContexBroker)

I am trying to install ContextBroker in Centos7:
sudo rpm -i contextBroker-0.14.1-1.X86_64.rpm
But I am getting the next error:
error: Failed dependencies:
libboost_filesystem-mt.so.5()(64bit) is needed by contextBroker-0.14.1-1.x86_64
libboost_system-mt.so.5()(64bit) is needed by contextBroker-0.14.1-1.x86_64
libboost_thread.so.5()(64bit) is needed by contextBroker-0.14.1-1.x86_64
Up to this point I thought that the solution was clear, lets install:
sudo yum install boost boost-devel boost-doc
But it was not functioning and Centos7 was giving me the same error.
Then I though that maybe it was because the static versión was needed as the error is related to libboost and not directly boost ( I do not know if this was a good assumption),but I tried and it was not functioning and Centos7 was giving me the same error.
The thing is that I am able to find those files, but I dont know how to give dependencies to rpm and in case is not possible I tried to install the following packages:
sudo rpm -i boost-1.53.0-18.el7.x86_64.rpm
However to be able to install the following two packages, I had to install boost-devel using yum, because when I tried to install the package boost-devel.1.53.0-18.el7.x86_64.rpm I was missing a lot of dependencies.
sudo rpm -i boost-static-1.53.0-18.el7.i686.rpm
(Edit. The extension .i686 is for 32 bits, so this package was not needed.)
sudo rpm -i boost-static-1.53.0-18.el7.x86_64.rpm
The result was the same.. so I have two questions:
1.Can someone tell me the name or pass me the link of the boost rpm that I am missing and that is not allowing me to install directly boost-devel from the rpm.
2.Which one is the correct order to install all the boost rpm packages in Centos7?
Thanks!!
Edit:
I found that the extension of the files that are in my system end with .so.1.53.0, and the dependencies that the rpm is asking for end with .so.5()(64bit). Can it be that the rpm is looking for a specific version of the dependencies?
here is what I did on centos 6.5 x64
get the rpm package
wget --no-check-certificate https://forge.fi-ware.org/frs/download.php/1502/contextBroker-0.15.0-1.x86_64.rpm
then because of the dependencies required (listed in https://forge.fi-ware.org/plugins/mediawiki/wiki/fiware/index.php/Publish/Subscribe_Broker_-_Orion_Context_Broker_-_Installation_and_Administration_Guide#Requirements )
we need to install EPEL (see http://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F ) by running
yum install epel-release
then install each dependency:
yum install boost-filesystem
yum install boost-thread
yum install libmicrohttpd
yum install logrotate
then
rpm -i contextBroker-0.15.0-1.x86_64.rpm
it worked for me.
Hope this help
Finally I have been able to resolve the problem with the dependencies.
ContextBroker is depending on the old packages of boost for Centos 6, so to be able to install ContextBroker in Centos7 you have to remove the newest versions of boost from the system (to me this solution was not a problem, because in my case I am using a VM just to be able to exclusively use contextBroker but this can be a real problem with the dependencies of other packages that are using the corresponding version of boost for Centos7):
sudo yum remove boost boost-devel boost-system boost-filesystem boost-thread
Later it is needed the downloading and installation of the old packages:
sudo rpm -Uvh boost-thread-1.41.0-25.el6.x86_64.rpm
sudo rpm -Uvh boost-system-1.41.0-25.el6.x86_64.rpm
sudo rpm -Uvh boost-filesystem-1.41.0-25.el6.x86_64.rpm
And then is possible to install ContextBroker:
sudo rpm -i context-0.15.0-1.x86_64.rpm
I hope this helps to the new contextBroker's users!

Resources