#!/bin/bash

##
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# For those usages not covered by the Apache License, Version 2.0 please
# contact with: OSM_TECH@list.etsi.org
##

echo "POST INSTALL OSM-COMMON"
echo "Installing python dependencies via pip..."

pip3 install dataclasses
pip3 install --upgrade aiokafka
pip3 install --upgrade pymongo
pip3 install --upgrade pyyaml==5.*
pip3 install pycrypto   # added dependency python3-crypto seems not working

#Creation of log folder
mkdir -p /var/log/osm

