Issue
I made a bash script to install a software package on a Linux system. There are 4 packages I can use to install the software:
- x86.deb
- x86.rpm
- x86_64.deb
- x86_64.rpm
I know when to install which package on which Linux server manually, but I would like to find out "automatically" (in my bash script) which one I have to install.
Is there any command to find out? I already know there is a way to find out the architecture (32-bit or 64-bit) via the "arch" command, but I do not know how to find out which package I need.
Solution
uname -m
or arch
gives you the architecture (x86_64
or similar).
You can probably figure out whether your system is based on RPM or DEB (e. g. Ubuntu is DEB-based) by asking both variants which package installed /bin/ls
:
dpkg -S /bin/ls
will print
coreutils: /bin/ls
on a DEB-based system.
rpm -q -f /bin/ls
will print
coreutils-5.97-23.el5_6.4
on an RPM-based system (with probably different version numbers).
On the "wrong" system each of these will give an error message instead.
if dpkg -S /bin/ls >/dev/null 2>&1
then
case "$(arch)" in
x86_64)
sudo dpkg -i x86_64.deb;;
i368)
sudo dpkg -i x86.deb;;
*)
echo "Don't know how to handle $(arch)"
exit 1
;;
esac
elif rpm -q -f /bin/ls >/dev/null 2>&1
then
case "$(arch)" in
x86_64)
sudo rpm -i x86_64.rpm;;
i368)
sudo rpm -i x86.rpm;;
*)
echo "Don't know how to handle $(arch)"
exit 1
;;
esac
else
echo "Don't know this package system (neither RPM nor DEB)."
exit 1
fi
Of course all this only makes sense in case you know what to do then, i. e. if you know which package is to be installed on which package system with which architecture.
Answered By - Alfe Answer Checked By - Robin (WPSolving Admin)