Installing programs via shell script; programs not found? - linux

I'm writing a shell script so that I can quickly install dependencies on fresh virtual machines via OpenStack. I have written these dependencies in a script file but upon running, I receive the following error for each one:
E: unable to locate package ***
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: unable to locate package ****
and so on. I'm not sure what's going wrong, as I know the packages I've listed exist, and running sudo apt-get install *** (with the package names in the file) works as expected. My shell file looks like this:
#!/bin/bash
#shell script for installation on a VM
#i've never written a shell script before so bear with me please
apt-get update
apt-get --assume-yes install build-essential
apt-get --assume-yes install git
apt-get --assume-yes install make
apt-get --assume-yes install xclip
apt-get --assume-yes install python
apt-get --assume-yes install liblapack-dev
apt-get --assume-yes install libblas-dev
apt-get --assume-yes install libboost-dev
apt-get --assume-yes install libarmadillo-dev
and I'm running it as sudo bash freshinstallscript.sh.

I fixed the issue; it seemed to be related to line endings. To fix, I installed dos2unix and converted the shell file.

Related

python-rocksdb installation -llz4 missing inside /usr/bin/ld

With the installation of python-rocksdb on ubuntu i had the following issue of missing packages:
Then i run:
apt-get install build-essential libsnappy-dev zlib1g-dev libbz2-dev libgflags-dev
allmost all sorted, the only one that i can't find is -llz4. Anyone know what is the pacakge that i need to install?
At the moment whenever i run
pip install python-rocksdb
i always received the error
Sorted!
sudo apt-get install liblz4-dev

How to make an autoinstall command script for Debian

So I was working on a project that need some libraries . so I decided to made an .sh script to just install all at once but I don't know why it fails . I was searching about it , but just found how to create installer like .deb , etc
here are the commands lines that I use
install.sh
#!/bin/sh
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-pip python3-dev
sudo apt-get install build-essential cmake git unzip pkg-config libopenblas-dev liblapack-dev
sudo apt-get install python-numpy python-scipy python-matplotlib python aml
sudo apt-get install libhdf5-serial-dev python-h5py
sudo apt-get install graphviz
sudo apt-get install python-opencv
sudo apt install python-sklearn
sudo apt install python3-sklearn
pip3 install matplotlib
pip3 install pydot-ng
pip3 install tensorflow
pip3 install keras
pip3 install scikit-learn
using
bash install.sh
and I got this , I think that I'm doing just a few things wrong , I think
E: The update command takes no arguments
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package
Reading package lists... Done
Building dependency tree
Reading state information... Done
............
Can someone help me please
Your shebang at the beginning of your script is for a boot script
You're using:
#!/bin/sh
When this script should call the bash environment with:
#!/bin/bash
That should solve your problem.
As sergio states these can be done in one liners like:
#!/bin/bash
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y python3-pip python3-dev build-essential cmake git unzip pkg-config libopenblas-dev liblapack-dev python-numpy python-scipy python-matplotlib python aml libhdf5-serial-dev python-h5py graphviz python-opencv python-sklearn python3-sklearn
sudo pip3 install matplotlib pydot-ng tensorflow keras scikit-learn
At the very least utilize an array for more efficient bash programming like this:
#!/bin/bash
sudo apt-get update && sudo apt-get upgrade -y
aptDepends=(
python3-pip
python3-dev
build-essential
cmake
git
unzip
pkg-config
libopenblas-dev
liblapack-dev
python-numpy
python-scipy
python-matplotlib
python
aml
libhdf5-serial-dev
python-h5py
graphviz
python-opencv
python-sklearn
python3-sklearn
)
pipDepends=(
matplotlib
pydot-ng
tensorflow
keras
scikit-learn
)
sudo apt-get install -y "${aptDepends[#]}" && sudo pip3 install -y "${pipDepends[#]}"

"apt-get install linux-headers-generic" installed in directory different than $(uname-r)

I am a newbie on Linux kernel. I was trying to install Linux header on ubuntu. I first tried
sudo apt-get install linux-headers-$(uname -r)
However, since the output of $(uname -r) is 4.4.0-18362-Microsoft, the installation gives me the error:
E: Unable to locate package linux-headers-4.4.0-18362-Microsoft
E: Couldn't find any package by glob 'linux-headers-4.4.0-18362-Microsoft'
E: Couldn't find any package by regex 'linux-headers-4.4.0-18362-Microsoft'
By searching on the internet, I found that linux headers do not exist on WSL. Therefore I tried something that is recommended on the internet, by doing
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install linux-generic
sudo apt-get install linux-headers-generic
Then I got a successful installation under /usr/src/linux-headers-4.15.0-51-generic and /usr/src/linux-headers-4.15.0-51. However, my team uses a makefile where the directory of the Linux headers is referred to using $(uname -r), which is still 4.4.0-18362-Microsoft. So whenever I do make, it still gives me the error
can't read /usr/src/linux-headers-4.4.0-18362-Microsoft/...
Is there anyway I can install the headers or change $(uname -r) such that I can use $(uname -r) to refer to the directory?
Create a symlink from /usr/src/linux-headers-4.15.0-51-generic to /usr/src/linux-headers-4.4.0-18362-Microsoft/
sudo ln -s /usr/src/linux-headers-4.15.0-51-generic /usr/src/linux-headers-4.4.0-18362-Microsoft
I'm using Ubuntu 18.04.2 LTS and had a similar issue - but it wasn't Microsoft:
E: Unable to locate package linux-headers-4.15.0-51-generic-generic
E: Couldn't find any package by glob 'linux-headers-4.15.0-51-generic-generic'
E: Couldn't find any package by regex 'linux-headers-4.15.0-51-generic-generic'
For me worked fine after I did as below:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install linux-generic
sudo apt-get install linux-headers-$(uname -r)

Build-Essential: Command Not Found on WSL

I am currently trying to setup my Windows 10 Dev Box with WSL. I have successfully install Ubuntu (Ubuntu 16.04.3) on a Windows 10 Insider Preview Version 1803 (OS Build 17666.1000). Using this walkthru to setup a RoR Dev ENV. Getting Rails app to...
sudo apt-get update seems to run fine.
sudo apt-get install git-core curl zlib1g-dev seems to run fine except libfreetype6 is no longer required.
When I try to run a build-essential command it gives me this message: build-essential: command not found
I try to apt-get autoremove to see if the libfreetype6 is causing the issue, no dice. I try sudo apt-get install --reinstall build-essential and it installs, but as soon as I run another build-essential command, it's not found again. Am I missing something?
Any help or direction would be awesome. Thanks.
You're missing nothing. build-essential is a package, not a command.
If you do apt show build-essential, you will notice this line:
Depends: libc6-dev | libc-dev, gcc (>= 4:7.2), g++ (>= 4:7.2), make, dpkg-dev (>= 1.17.11)
So it's just a convenient package that installs a set of essential build tools.
Furthermore, if you do dpkg -L build-essential, you will find that it contains nothing in /usr/bin (or whatever binary directory).
you have to install build-essential. first update repo list and update your libs, then install it.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential
It works for me in WSL, thanks Roberto

Can't install node.js on Linux server

I followed some instructions to install node.js on a Linux server and ran in to the following blocks. I started out by doing sudo apt-get install python-software-properties and that worked fine. Then, I did sudo add-apt-repository ppa:chris-lea/node.js. But, wait - there is no command add-apt-repository. OK, so I looked it up and it told me to do apt-get install software-properties-common and that would have been fine, except it gave me this error:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package software-properties-common
Well, what can I do to get node.js on my server? Obviously, none of this works and it's Debian, in case you were wondering. I really need help on this. Basically, how can I install software-properties-common if it does not exist? It just won't show up.
For a Debian install of the latest node.js, you should follow these instructions, not requiring you to add the PPA:
sudo apt-get install python g++ make checkinstall
mkdir ~/src && cd $_
wget -N http://nodejs.org/dist/node-latest.tar.gz
tar xzvf node-latest.tar.gz && cd node-v*
./configure
checkinstall #(remove the "v" in front of the version number in the dialog)
sudo dpkg -i node_*
UPDATE: I wrote this a long time ago. Since then, I find using nvm a much less painful way to get node onto machines. As per link, steps are basically reduced to:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
nvm install node

Resources